From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH RFC 06/10] passthrough/amd: remove guest iommu support Date: Wed, 21 Feb 2018 21:46:57 +0000 Message-ID: <20180221214701.1646-7-wei.liu2@citrix.com> References: <20180221214701.1646-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eocEG-0001gZ-2v for xen-devel@lists.xenproject.org; Wed, 21 Feb 2018 21:47:08 +0000 In-Reply-To: <20180221214701.1646-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Suravee Suthikulpanit , Jan Beulich List-Id: xen-devel@lists.xenproject.org SXQgaXMgbmV2ZXIgdXNlZCBhbmQgaXQgaXMgZ2V0dGluZyBpbiB0aGUgd2F5IG9mIGNsZWFuaW5n IHVwLgoKVGhlIG9ubHkgY2FsbHNpdGUgb2YgZ3Vlc3RfaW9tbXVfYWRkX3Bwcl9sb2cgaGFzIG5v IGVmZmVjdCBiZWNhdXNlCmd1ZXN0IGlvbW11IGlzIG5vdCBpbml0aWFsaXNlZC4KClNpZ25lZC1v ZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQpDYzogU3VyYXZlZSBTdXRo aWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KLS0tCiB4ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC94ODYvYW1kL01ha2VmaWxlICAgICAgfCAgIDEgLQogeGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gveDg2L2FtZC9pb21tdV9ndWVzdC5jIHwgOTI3IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94ODYvYW1kL2lvbW11X2luaXQuYyAg fCAgMjEgKy0KIHhlbi9pbmNsdWRlL2FzbS14ODYvYW1kLWlvbW11LmggICAgICAgICAgICAgICB8 ICA1MSAtLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL2FtZC1pb21tdS1wcm90by5oIHwg ICA4IC0KIHhlbi9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaCAgICAgICAgICAgICAgICAgICB8ICAg MSAtCiA2IGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMTAwMyBkZWxldGlvbnMoLSkK IGRlbGV0ZSBtb2RlIDEwMDY0NCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94ODYvYW1kL2lvbW11 X2d1ZXN0LmMKCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94ODYvYW1kL01h a2VmaWxlIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2FtZC9NYWtlZmlsZQppbmRleCA5 NWMwNGVkMjM3Li40MTUxNDZmY2RiIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC94ODYvYW1kL01ha2VmaWxlCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQv TWFrZWZpbGUKQEAgLTUsNCArNSwzIEBAIG9iai15ICs9IHBjaV9hbWRfaW9tbXUubwogb2JqLWJp bi15ICs9IGlvbW11X2FjcGkuaW5pdC5vCiBvYmoteSArPSBpb21tdV9pbnRyLm8KIG9iai15ICs9 IGlvbW11X2NtZC5vCi1vYmoteSArPSBpb21tdV9ndWVzdC5vCmRpZmYgLS1naXQgYS94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC94ODYvYW1kL2lvbW11X2d1ZXN0LmMgYi94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC94ODYvYW1kL2lvbW11X2d1ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDk2MTc1YmI5YWMuLjAwMDAwMDAwMDAKLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gv eDg2L2FtZC9pb21tdV9ndWVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTI3ICswLDAgQEAKLS8q Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICog QXV0aG9yOiBXZWkgV2FuZyA8d2VpLndhbmcyQGFtZC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK LSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgotICovCi0KLSNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KLSNpbmNsdWRlIDxh c20vcDJtLmg+Ci0jaW5jbHVkZSA8YXNtL2FtZC1pb21tdS5oPgotI2luY2x1ZGUgPGFzbS9odm0v c3ZtL2FtZC1pb21tdS1wcm90by5oPgotCi0KLSNkZWZpbmUgSU9NTVVfTU1JT19TSVpFICAgICAg ICAgICAgICAgICAgICAgICAgIDB4ODAwMAotI2RlZmluZSBJT01NVV9NTUlPX1BBR0VfTlIgICAg ICAgICAgICAgICAgICAgICAgMHg4Ci0jZGVmaW5lIFJJTkdfQkZfTEVOR1RIX01BU0sgICAgICAg ICAgICAgICAgICAgICAweDBGMDAwMDAwCi0jZGVmaW5lIFJJTkdfQkZfTEVOR1RIX1NISUZUICAg ICAgICAgICAgICAgICAgICAyNAotCi0jZGVmaW5lIFBBU01BWF85X2JpdCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDgKLSNkZWZpbmUgR1VFU1RfQ1IzXzFfTEVWRUwgICAgICAgICAgICAg ICAgICAgICAgIDB4MAotI2RlZmluZSBHVUVTVF9BRERSRVNTX1NJWkVfNl9MRVZFTCAgICAgICAg ICAgICAgMHgyCi0jZGVmaW5lIEhPU1RfQUREUkVTU19TSVpFXzZfTEVWRUwgICAgICAgICAgICAg ICAweDIKLQotI2RlZmluZSBndWVzdF9pb21tdV9zZXRfc3RhdHVzKGlvbW11LCBiaXQpIFwKLSAg ICAgICAgaW9tbXVfc2V0X2JpdCgmKChpb21tdSktPnJlZ19zdGF0dXMubG8pLCBiaXQpCi0KLSNk ZWZpbmUgZ3Vlc3RfaW9tbXVfY2xlYXJfc3RhdHVzKGlvbW11LCBiaXQpIFwKLSAgICAgICAgaW9t bXVfY2xlYXJfYml0KCYoKGlvbW11KS0+cmVnX3N0YXR1cy5sbyksIGJpdCkKLQotI2RlZmluZSBy ZWdfdG9fdTY0KHJlZykgKCgodWludDY0X3QpcmVnLmhpIDw8IDMyKSB8IHJlZy5sbyApCi0jZGVm aW5lIHU2NF90b19yZWcocmVnLCB2YWwpIFwKLSAgICBkbyBcCi0gICAgeyBcCi0gICAgICAgIChy ZWcpLT5sbyA9ICh1MzIpKHZhbCk7IFwKLSAgICAgICAgKHJlZyktPmhpID0gKHZhbCkgPj4gMzI7 IFwKLSAgICB9IHdoaWxlICgwKQotCi1zdGF0aWMgdW5zaWduZWQgaW50IG1hY2hpbmVfYmRmKHN0 cnVjdCBkb21haW4gKmQsIHVpbnQxNl90IGd1ZXN0X2JkZikKLXsKLSAgICByZXR1cm4gZ3Vlc3Rf YmRmOwotfQotCi1zdGF0aWMgdWludDE2X3QgZ3Vlc3RfYmRmKHN0cnVjdCBkb21haW4gKmQsIHVp bnQxNl90IG1hY2hpbmVfYmRmKQotewotICAgIHJldHVybiBtYWNoaW5lX2JkZjsKLX0KLQotc3Rh dGljIGlubGluZSBzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKmRvbWFpbl9pb21tdShzdHJ1Y3QgZG9tYWlu ICpkKQotewotICAgIHJldHVybiBkb21faW9tbXUoZCktPmFyY2guZ19pb21tdTsKLX0KLQotc3Rh dGljIGlubGluZSBzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKnZjcHVfaW9tbXUoc3RydWN0IHZjcHUgKnYp Ci17Ci0gICAgcmV0dXJuIGRvbV9pb21tdSh2LT5kb21haW4pLT5hcmNoLmdfaW9tbXU7Ci19Ci0K LXN0YXRpYyB2b2lkIGd1ZXN0X2lvbW11X2VuYWJsZShzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKmlvbW11 KQotewotICAgIGlvbW11LT5lbmFibGVkID0gMTsKLX0KLQotc3RhdGljIHZvaWQgZ3Vlc3RfaW9t bXVfZGlzYWJsZShzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKmlvbW11KQotewotICAgIGlvbW11LT5lbmFi bGVkID0gMDsKLX0KLQotc3RhdGljIHVpbnQ2NF90IGdldF9ndWVzdF9jcjNfZnJvbV9kdGUoZGV2 X2VudHJ5X3QgKmR0ZSkKLXsKLSAgICB1aW50NjRfdCBnY3IzXzEsIGdjcjNfMiwgZ2NyM18zOwot Ci0gICAgZ2NyM18xID0gZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMihkdGUtPmRhdGFbMV0sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9ERVZfVEFCTEVfR0NSM18xX01B U0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9ERVZfVEFCTEVf R0NSM18xX1NISUZUKTsKLSAgICBnY3IzXzIgPSBnZXRfZmllbGRfZnJvbV9yZWdfdTMyKGR0ZS0+ ZGF0YVsyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0RFVl9U QUJMRV9HQ1IzXzJfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElP TU1VX0RFVl9UQUJMRV9HQ1IzXzJfU0hJRlQpOwotICAgIGdjcjNfMyA9IGdldF9maWVsZF9mcm9t X3JlZ191MzIoZHRlLT5kYXRhWzNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSU9NTVVfREVWX1RBQkxFX0dDUjNfM19NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSU9NTVVfREVWX1RBQkxFX0dDUjNfM19TSElGVCk7Ci0KLSAgICByZXR1cm4g KChnY3IzXzMgPDwgMzEpIHwgKGdjcjNfMiA8PCAxNSApIHwgKGdjcjNfMSA8PCAxMikpID4+IFBB R0VfU0hJRlQ7Ci19Ci0KLXN0YXRpYyB1aW50MTZfdCBnZXRfZG9taWRfZnJvbV9kdGUoZGV2X2Vu dHJ5X3QgKmR0ZSkKLXsKLSAgICByZXR1cm4gZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMihkdGUtPmRh dGFbMl0sIElPTU1VX0RFVl9UQUJMRV9ET01BSU5fSURfTUFTSywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJT01NVV9ERVZfVEFCTEVfRE9NQUlOX0lEX1NISUZUKTsKLX0KLQot c3RhdGljIHVpbnQxNl90IGdldF9nbHhfZnJvbV9kdGUoZGV2X2VudHJ5X3QgKmR0ZSkKLXsKLSAg ICByZXR1cm4gZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMihkdGUtPmRhdGFbMV0sIElPTU1VX0RFVl9U QUJMRV9HTFhfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9E RVZfVEFCTEVfR0xYX1NISUZUKTsKLX0KLQotc3RhdGljIHVpbnQxNl90IGdldF9ndl9mcm9tX2R0 ZShkZXZfZW50cnlfdCAqZHRlKQotewotICAgIHJldHVybiBnZXRfZmllbGRfZnJvbV9yZWdfdTMy KGR0ZS0+ZGF0YVsxXSxJT01NVV9ERVZfVEFCTEVfR1ZfTUFTSywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJT01NVV9ERVZfVEFCTEVfR1ZfU0hJRlQpOwotfQotCi1zdGF0aWMg dW5zaWduZWQgaW50IGhvc3RfZG9taWQoc3RydWN0IGRvbWFpbiAqZCwgdWludDY0X3QgZ19kb21p ZCkKLXsKLSAgICAvKiBPbmx5IHN1cHBvcnQgb25lIFBQUiBkZXZpY2UgaW4gZ3Vlc3QgZm9yIG5v dyAqLwotICAgIHJldHVybiBkLT5kb21haW5faWQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25n IGdldF9nZm5fZnJvbV9iYXNlX3JlZyh1aW50NjRfdCBiYXNlX3JhdykKLXsKLSAgICBiYXNlX3Jh dyAmPSBQQUREUl9NQVNLOwotICAgIEFTU0VSVCAoIGJhc2VfcmF3ICE9IDAgKTsKLSAgICByZXR1 cm4gYmFzZV9yYXcgPj4gUEFHRV9TSElGVDsKLX0KLQotc3RhdGljIHZvaWQgZ3Vlc3RfaW9tbXVf ZGVsaXZlcl9tc2koc3RydWN0IGRvbWFpbiAqZCkKLXsKLSAgICB1aW50OF90IHZlY3RvciwgZGVz dCwgZGVzdF9tb2RlLCBkZWxpdmVyeV9tb2RlLCB0cmlnX21vZGU7Ci0gICAgc3RydWN0IGd1ZXN0 X2lvbW11ICppb21tdSA9IGRvbWFpbl9pb21tdShkKTsKLQotICAgIHZlY3RvciA9IGlvbW11LT5t c2kudmVjdG9yOwotICAgIGRlc3QgPSBpb21tdS0+bXNpLmRlc3Q7Ci0gICAgZGVzdF9tb2RlID0g aW9tbXUtPm1zaS5kZXN0X21vZGU7Ci0gICAgZGVsaXZlcnlfbW9kZSA9IGlvbW11LT5tc2kuZGVs aXZlcnlfbW9kZTsKLSAgICB0cmlnX21vZGUgPSBpb21tdS0+bXNpLnRyaWdfbW9kZTsKLQotICAg IHZtc2lfZGVsaXZlcihkLCB2ZWN0b3IsIGRlc3QsIGRlc3RfbW9kZSwgZGVsaXZlcnlfbW9kZSwg dHJpZ19tb2RlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Vlc3RfaW9tbXVfZ2V0X3Rh YmxlX21mbihzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50NjRfdCBiYXNlX3JhdywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVudHJ5X3NpemUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBw b3MpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBpZHgsIGdmbiwgbWZuOwotICAgIHAybV90eXBlX3Qg cDJtdDsKLQotICAgIGdmbiA9IGdldF9nZm5fZnJvbV9iYXNlX3JlZyhiYXNlX3Jhdyk7Ci0gICAg aWR4ID0gKHBvcyAqIGVudHJ5X3NpemUpID4+IFBBR0VfU0hJRlQ7Ci0KLSAgICBtZm4gPSBtZm5f eChnZXRfZ2ZuKGQsIGdmbiArIGlkeCwgJnAybXQpKTsKLSAgICBwdXRfZ2ZuKGQsIGdmbik7Ci0K LSAgICByZXR1cm4gbWZuOwotfQotCi1zdGF0aWMgdm9pZCBndWVzdF9pb21tdV9lbmFibGVfZGV2 X3RhYmxlKHN0cnVjdCBndWVzdF9pb21tdSAqaW9tbXUpCi17Ci0gICAgdWludDMyX3QgbGVuZ3Ro X3JhdyA9IGdldF9maWVsZF9mcm9tX3JlZ191MzIoaW9tbXUtPmRldl90YWJsZS5yZWdfYmFzZS5s bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01N VV9ERVZfVEFCTEVfU0laRV9NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElPTU1VX0RFVl9UQUJMRV9TSVpFX1NISUZUKTsKLSAgICBpb21tdS0+ ZGV2X3RhYmxlLnNpemUgPSAobGVuZ3RoX3JhdyArIDEpICogUEFHRV9TSVpFOwotfQotCi1zdGF0 aWMgdm9pZCBndWVzdF9pb21tdV9lbmFibGVfcmluZ19idWZmZXIoc3RydWN0IGd1ZXN0X2lvbW11 ICppb21tdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZ3Vlc3RfYnVmZmVyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgZW50cnlfc2l6ZSkKLXsKLSAgICB1aW50MzJfdCBsZW5ndGhf cmF3ID0gZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMihidWZmZXItPnJlZ19iYXNlLmhpLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJJTkdfQkZfTEVOR1RI X01BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UklOR19CRl9MRU5HVEhfU0hJRlQpOwotICAgIGJ1ZmZlci0+ZW50cmllcyA9IDEgPDwgbGVuZ3Ro X3JhdzsKLX0KLQotdm9pZCBndWVzdF9pb21tdV9hZGRfcHByX2xvZyhzdHJ1Y3QgZG9tYWluICpk LCB1MzIgZW50cnlbXSkKLXsKLSAgICB1aW50MTZfdCBnZGV2X2lkOwotICAgIHVuc2lnbmVkIGxv bmcgbWZuLCB0YWlsLCBoZWFkOwotICAgIHBwcl9lbnRyeV90ICpsb2csICpsb2dfYmFzZTsKLSAg ICBzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKmlvbW11OwotCi0gICAgaWYgKCAhaXNfaHZtX2RvbWFpbihk KSApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlvbW11ID0gZG9tYWluX2lvbW11KGQpOwotICAg IGlmICggIWlvbW11ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFpbCA9IGlvbW11X2dldF9y Yl9wb2ludGVyKGlvbW11LT5wcHJfbG9nLnJlZ190YWlsLmxvKTsKLSAgICBoZWFkID0gaW9tbXVf Z2V0X3JiX3BvaW50ZXIoaW9tbXUtPnBwcl9sb2cucmVnX2hlYWQubG8pOwotCi0gICAgaWYgKCB0 YWlsID49IGlvbW11LT5wcHJfbG9nLmVudHJpZXMgfHwgaGVhZCA+PSBpb21tdS0+cHByX2xvZy5l bnRyaWVzICkKLSAgICB7Ci0gICAgICAgIEFNRF9JT01NVV9ERUJVRygiRXJyb3I6IGd1ZXN0IGlv bW11IHBwciBsb2cgb3ZlcmZsb3dzXG4iKTsKLSAgICAgICAgZ3Vlc3RfaW9tbXVfZGlzYWJsZShp b21tdSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZm4gPSBndWVzdF9pb21tdV9n ZXRfdGFibGVfbWZuKGQsIHJlZ190b191NjQoaW9tbXUtPnBwcl9sb2cucmVnX2Jhc2UpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBwcl9lbnRyeV90KSwgdGFp bCk7Ci0gICAgQVNTRVJUKG1mbl92YWxpZChfbWZuKG1mbikpKTsKLQotICAgIGxvZ19iYXNlID0g bWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7Ci0gICAgbG9nID0gbG9nX2Jhc2UgKyB0YWlsICUg KFBBR0VfU0laRSAvIHNpemVvZihwcHJfZW50cnlfdCkpOwotCi0gICAgLyogQ29udmVydCBwaHlz aWNhbCBkZXZpY2UgaWQgYmFjayBpbnRvIHZpcnR1YWwgZGV2aWNlIGlkICovCi0gICAgZ2Rldl9p ZCA9IGd1ZXN0X2JkZihkLCBpb21tdV9nZXRfZGV2aWRfZnJvbV9jbWQoZW50cnlbMF0pKTsKLSAg ICBpb21tdV9zZXRfZGV2aWRfdG9fY21kKCZlbnRyeVswXSwgZ2Rldl9pZCk7Ci0KLSAgICBtZW1j cHkobG9nLCBlbnRyeSwgc2l6ZW9mKHBwcl9lbnRyeV90KSk7Ci0KLSAgICAvKiBOb3cgc2hpZnQg cHByIGxvZyB0YWlsIHBvaW50ZXIgKi8KLSAgICBpZiAoICsrdGFpbCA+PSBpb21tdS0+cHByX2xv Zy5lbnRyaWVzICkKLSAgICB7Ci0gICAgICAgIHRhaWwgPSAwOwotICAgICAgICBndWVzdF9pb21t dV9zZXRfc3RhdHVzKGlvbW11LCBJT01NVV9TVEFUVVNfUFBSX0xPR19PVkVSRkxPV19TSElGVCk7 Ci0gICAgfQotICAgIGlvbW11X3NldF9yYl9wb2ludGVyKCZpb21tdS0+cHByX2xvZy5yZWdfdGFp bC5sbywgdGFpbCk7Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UobG9nX2Jhc2UpOwotCi0gICAgZ3Vl c3RfaW9tbXVfZGVsaXZlcl9tc2koZCk7Ci19Ci0KLXZvaWQgZ3Vlc3RfaW9tbXVfYWRkX2V2ZW50 X2xvZyhzdHJ1Y3QgZG9tYWluICpkLCB1MzIgZW50cnlbXSkKLXsKLSAgICB1aW50MTZfdCBkZXZf aWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtZm4sIHRhaWwsIGhlYWQ7Ci0gICAgZXZlbnRfZW50cnlf dCAqbG9nLCAqbG9nX2Jhc2U7Ci0gICAgc3RydWN0IGd1ZXN0X2lvbW11ICppb21tdTsKLQotICAg IGlmICggIWlzX2h2bV9kb21haW4oZCkgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpb21tdSA9 IGRvbWFpbl9pb21tdShkKTsKLSAgICBpZiAoICFpb21tdSApCi0gICAgICAgIHJldHVybjsKLQot ICAgIHRhaWwgPSBpb21tdV9nZXRfcmJfcG9pbnRlcihpb21tdS0+ZXZlbnRfbG9nLnJlZ190YWls LmxvKTsKLSAgICBoZWFkID0gaW9tbXVfZ2V0X3JiX3BvaW50ZXIoaW9tbXUtPmV2ZW50X2xvZy5y ZWdfaGVhZC5sbyk7Ci0KLSAgICBpZiAoIHRhaWwgPj0gaW9tbXUtPmV2ZW50X2xvZy5lbnRyaWVz IHx8IGhlYWQgPj0gaW9tbXUtPmV2ZW50X2xvZy5lbnRyaWVzICkKLSAgICB7Ci0gICAgICAgIEFN RF9JT01NVV9ERUJVRygiRXJyb3I6IGd1ZXN0IGlvbW11IGV2ZW50IG92ZXJmbG93c1xuIik7Ci0g ICAgICAgIGd1ZXN0X2lvbW11X2Rpc2FibGUoaW9tbXUpOwotICAgICAgICByZXR1cm47Ci0gICAg fQotCi0gICAgbWZuID0gZ3Vlc3RfaW9tbXVfZ2V0X3RhYmxlX21mbihkLCByZWdfdG9fdTY0KGlv bW11LT5ldmVudF9sb2cucmVnX2Jhc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKGV2ZW50X2VudHJ5X3QpLCB0YWlsKTsKLSAgICBBU1NFUlQobWZuX3ZhbGlk KF9tZm4obWZuKSkpOwotCi0gICAgbG9nX2Jhc2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4p KTsKLSAgICBsb2cgPSBsb2dfYmFzZSArIHRhaWwgJSAoUEFHRV9TSVpFIC8gc2l6ZW9mKGV2ZW50 X2VudHJ5X3QpKTsKLQotICAgIC8qIHJlLXdyaXRlIHBoeXNpY2FsIGRldmljZSBpZCBpbnRvIHZp cnR1YWwgZGV2aWNlIGlkICovCi0gICAgZGV2X2lkID0gZ3Vlc3RfYmRmKGQsIGlvbW11X2dldF9k ZXZpZF9mcm9tX2NtZChlbnRyeVswXSkpOwotICAgIGlvbW11X3NldF9kZXZpZF90b19jbWQoJmVu dHJ5WzBdLCBkZXZfaWQpOwotICAgIG1lbWNweShsb2csIGVudHJ5LCBzaXplb2YoZXZlbnRfZW50 cnlfdCkpOwotCi0gICAgLyogTm93IHNoaWZ0IGV2ZW50IGxvZyB0YWlsIHBvaW50ZXIgKi8KLSAg ICBpZiAoICsrdGFpbCA+PSBpb21tdS0+ZXZlbnRfbG9nLmVudHJpZXMgKQotICAgIHsKLSAgICAg ICAgdGFpbCA9IDA7Ci0gICAgICAgIGd1ZXN0X2lvbW11X3NldF9zdGF0dXMoaW9tbXUsIElPTU1V X1NUQVRVU19FVkVOVF9PVkVSRkxPV19TSElGVCk7Ci0gICAgfQotCi0gICAgaW9tbXVfc2V0X3Ji X3BvaW50ZXIoJmlvbW11LT5ldmVudF9sb2cucmVnX3RhaWwubG8sIHRhaWwpOwotICAgIHVubWFw X2RvbWFpbl9wYWdlKGxvZ19iYXNlKTsKLQotICAgIGd1ZXN0X2lvbW11X2RlbGl2ZXJfbXNpKGQp OwotfQotCi1zdGF0aWMgaW50IGRvX2NvbXBsZXRlX3Bwcl9yZXF1ZXN0KHN0cnVjdCBkb21haW4g KmQsIGNtZF9lbnRyeV90ICpjbWQpCi17Ci0gICAgdWludDE2X3QgZGV2X2lkOwotICAgIHN0cnVj dCBhbWRfaW9tbXUgKmlvbW11OwotCi0gICAgZGV2X2lkID0gbWFjaGluZV9iZGYoZCwgaW9tbXVf Z2V0X2RldmlkX2Zyb21fY21kKGNtZC0+ZGF0YVswXSkpOwotICAgIGlvbW11ID0gZmluZF9pb21t dV9mb3JfZGV2aWNlKDAsIGRldl9pZCk7Ci0KLSAgICBpZiAoICFpb21tdSApCi0gICAgewotICAg ICAgICBBTURfSU9NTVVfREVCVUcoIiVzOiBGYWlsIHRvIGZpbmQgaW9tbXUgZm9yIGJkZiAleFxu IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBkZXZfaWQpOwotICAgICAgICBy ZXR1cm4gLUVOT0RFVjsKLSAgICB9Ci0KLSAgICAvKiByZXBsYWNlIHZpcnR1YWwgZGV2aWNlIGlk IGludG8gcGh5c2ljYWwgKi8KLSAgICBpb21tdV9zZXRfZGV2aWRfdG9fY21kKCZjbWQtPmRhdGFb MF0sIGRldl9pZCk7Ci0gICAgYW1kX2lvbW11X3NlbmRfZ3Vlc3RfY21kKGlvbW11LCBjbWQtPmRh dGEpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZG9faW52YWxpZGF0ZV9wYWdl cyhzdHJ1Y3QgZG9tYWluICpkLCBjbWRfZW50cnlfdCAqY21kKQotewotICAgIHVpbnQxNl90IGdk b21faWQsIGhkb21faWQ7Ci0gICAgc3RydWN0IGFtZF9pb21tdSAqaW9tbXUgPSBOVUxMOwotCi0g ICAgZ2RvbV9pZCA9IGdldF9maWVsZF9mcm9tX3JlZ191MzIoY21kLT5kYXRhWzFdLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVfSU5WX0lPTU1VX1BBR0VTX0RPTUFJ Tl9JRF9NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVfSU5W X0lPTU1VX1BBR0VTX0RPTUFJTl9JRF9TSElGVCk7Ci0KLSAgICBoZG9tX2lkID0gaG9zdF9kb21p ZChkLCBnZG9tX2lkKTsKLSAgICBzZXRfZmllbGRfaW5fcmVnX3UzMihoZG9tX2lkLCBjbWQtPmRh dGFbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVfSU5WX0lPTU1VX1BBR0VTX0RP TUFJTl9JRF9NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0lOVl9JT01NVV9Q QUdFU19ET01BSU5fSURfU0hJRlQsICZjbWQtPmRhdGFbMV0pOwotCi0gICAgZm9yX2VhY2hfYW1k X2lvbW11ICggaW9tbXUgKQotICAgICAgICBhbWRfaW9tbXVfc2VuZF9ndWVzdF9jbWQoaW9tbXUs IGNtZC0+ZGF0YSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkb19pbnZhbGlk YXRlX2FsbChzdHJ1Y3QgZG9tYWluICpkLCBjbWRfZW50cnlfdCAqY21kKQotewotICAgIHN0cnVj dCBhbWRfaW9tbXUgKmlvbW11ID0gTlVMTDsKLQotICAgIGZvcl9lYWNoX2FtZF9pb21tdSAoIGlv bW11ICkKLSAgICAgICAgYW1kX2lvbW11X2ZsdXNoX2FsbF9wYWdlcyhkKTsKLQotICAgIHJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGRvX2ludmFsaWRhdGVfaW90bGJfcGFnZXMoc3RydWN0IGRv bWFpbiAqZCwgY21kX2VudHJ5X3QgKmNtZCkKLXsKLSAgICBzdHJ1Y3QgYW1kX2lvbW11ICppb21t dTsKLSAgICB1aW50MTZfdCBkZXZfaWQ7Ci0KLSAgICBkZXZfaWQgPSBtYWNoaW5lX2JkZihkLCBp b21tdV9nZXRfZGV2aWRfZnJvbV9jbWQoY21kLT5kYXRhWzBdKSk7Ci0KLSAgICBpb21tdSA9IGZp bmRfaW9tbXVfZm9yX2RldmljZSgwLCBkZXZfaWQpOwotICAgIGlmICggIWlvbW11ICkKLSAgICB7 Ci0gICAgICAgIEFNRF9JT01NVV9ERUJVRygiJXM6IEZhaWwgdG8gZmluZCBpb21tdSBmb3IgYmRm ICV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBkZXZfaWQpOwotICAg ICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9Ci0KLSAgICBpb21tdV9zZXRfZGV2aWRfdG9fY21k KCZjbWQtPmRhdGFbMF0sIGRldl9pZCk7Ci0gICAgYW1kX2lvbW11X3NlbmRfZ3Vlc3RfY21kKGlv bW11LCBjbWQtPmRhdGEpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fY29t cGxldGlvbl93YWl0KHN0cnVjdCBkb21haW4gKmQsIGNtZF9lbnRyeV90ICpjbWQpCi17Ci0gICAg Ym9vbF90IGNvbV93YWl0X2ludF9lbiwgY29tX3dhaXRfaW50LCBpLCBzOwotICAgIHN0cnVjdCBn dWVzdF9pb21tdSAqaW9tbXU7Ci0gICAgdW5zaWduZWQgbG9uZyBnZm47Ci0gICAgcDJtX3R5cGVf dCBwMm10OwotCi0gICAgaW9tbXUgPSBkb21haW5faW9tbXUoZCk7Ci0KLSAgICBpID0gaW9tbXVf Z2V0X2JpdChjbWQtPmRhdGFbMF0sIElPTU1VX0NPTVBfV0FJVF9JX0ZMQUdfU0hJRlQpOwotICAg IHMgPSBpb21tdV9nZXRfYml0KGNtZC0+ZGF0YVswXSwgSU9NTVVfQ09NUF9XQUlUX1NfRkxBR19T SElGVCk7Ci0KLSAgICBpZiAoIGkgKQotICAgICAgICBndWVzdF9pb21tdV9zZXRfc3RhdHVzKGlv bW11LCBJT01NVV9TVEFUVVNfQ09NUF9XQUlUX0lOVF9TSElGVCk7Ci0KLSAgICBpZiAoIHMgKQot ICAgIHsKLSAgICAgICAgdWludDY0X3QgZ2FkZHJfbG8sIGdhZGRyX2hpLCBnYWRkcl82NCwgZGF0 YTsKLSAgICAgICAgdm9pZCAqdmFkZHI7Ci0KLSAgICAgICAgZGF0YSA9ICh1aW50NjRfdCljbWQt PmRhdGFbM10gPDwgMzIgfCBjbWQtPmRhdGFbMl07Ci0gICAgICAgIGdhZGRyX2xvID0gZ2V0X2Zp ZWxkX2Zyb21fcmVnX3UzMihjbWQtPmRhdGFbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJT01NVV9DT01QX1dBSVRfQUREUl9MT1dfTUFTSywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0NPTVBfV0FJVF9BRERSX0xP V19TSElGVCk7Ci0gICAgICAgIGdhZGRyX2hpID0gZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMihjbWQt PmRhdGFbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01N VV9DT01QX1dBSVRfQUREUl9ISUdIX01BU0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJT01NVV9DT01QX1dBSVRfQUREUl9ISUdIX1NISUZUKTsKLQotICAgICAg ICBnYWRkcl82NCA9IChnYWRkcl9oaSA8PCAzMikgfCAoZ2FkZHJfbG8gPDwgMyk7Ci0KLSAgICAg ICAgZ2ZuID0gZ2FkZHJfNjQgPj4gUEFHRV9TSElGVDsKLSAgICAgICAgdmFkZHIgPSBtYXBfZG9t YWluX3BhZ2UoZ2V0X2dmbihkLCBnZm4gLCZwMm10KSk7Ci0gICAgICAgIHB1dF9nZm4oZCwgZ2Zu KTsKLQotICAgICAgICB3cml0ZV91NjRfYXRvbWljKCh1aW50NjRfdCAqKSh2YWRkciArIChnYWRk cl82NCAmIChQQUdFX1NJWkUtMSkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsK LSAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UodmFkZHIpOwotICAgIH0KLQotICAgIGNvbV93YWl0 X2ludF9lbiA9IGlvbW11X2dldF9iaXQoaW9tbXUtPnJlZ19jdHJsLmxvLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVfQ09OVFJPTF9DT01QX1dBSVRfSU5UX1NISUZU KTsKLSAgICBjb21fd2FpdF9pbnQgPSBpb21tdV9nZXRfYml0KGlvbW11LT5yZWdfc3RhdHVzLmxv LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVfU1RBVFVTX0NPTVBfV0FJ VF9JTlRfU0hJRlQpOwotCi0gICAgaWYgKCBjb21fd2FpdF9pbnRfZW4gJiYgY29tX3dhaXRfaW50 ICkKLSAgICAgICAgZ3Vlc3RfaW9tbXVfZGVsaXZlcl9tc2koZCk7Ci0KLSAgICByZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBkb19pbnZhbGlkYXRlX2R0ZShzdHJ1Y3QgZG9tYWluICpkLCBjbWRf ZW50cnlfdCAqY21kKQotewotICAgIHVpbnQxNl90IGdiZGYsIG1iZGYsIHJlcV9pZCwgZ2RvbV9p ZCwgaGRvbV9pZDsKLSAgICBkZXZfZW50cnlfdCAqZ2R0ZSwgKm1kdGUsICpkdGVfYmFzZTsKLSAg ICBzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSA9IE5VTEw7Ci0gICAgc3RydWN0IGd1ZXN0X2lvbW11 ICpnX2lvbW11OwotICAgIHVpbnQ2NF90IGdjcjNfZ2ZuLCBnY3IzX21mbjsKLSAgICB1aW50OF90 IGdseCwgZ3Y7Ci0gICAgdW5zaWduZWQgbG9uZyBkdGVfbWZuLCBmbGFnczsKLSAgICBwMm1fdHlw ZV90IHAybXQ7Ci0KLSAgICBnX2lvbW11ID0gZG9tYWluX2lvbW11KGQpOwotICAgIGdiZGYgPSBp b21tdV9nZXRfZGV2aWRfZnJvbV9jbWQoY21kLT5kYXRhWzBdKTsKLSAgICBtYmRmID0gbWFjaGlu ZV9iZGYoZCwgZ2JkZik7Ci0KLSAgICAvKiBHdWVzdCBjYW4gb25seSB1cGRhdGUgRFRFcyBmb3Ig aXRzIHBhc3N0aHJ1IGRldmljZXMgKi8KLSAgICBpZiAoIG1iZGYgPT0gMCB8fCBnYmRmID09IDAg KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIFNvbWV0aW1lcyBndWVzdCBpbnZhbGlkYXRl cyBkZXZpY2VzIGZyb20gbm9uLWV4aXN0cyBkdGVzICovCi0gICAgaWYgKCAoZ2JkZiAqIHNpemVv ZihkZXZfZW50cnlfdCkpID4gZ19pb21tdS0+ZGV2X3RhYmxlLnNpemUgKQotICAgICAgICByZXR1 cm4gMDsKLQotICAgIGR0ZV9tZm4gPSBndWVzdF9pb21tdV9nZXRfdGFibGVfbWZuKGQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3RvX3U2NChnX2lvbW11LT5k ZXZfdGFibGUucmVnX2Jhc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihkZXZfZW50cnlfdCksIGdiZGYpOwotICAgIEFTU0VSVChtZm5fdmFsaWQoX21m bihkdGVfbWZuKSkpOwotCi0gICAgLyogUmVhZCBndWVzdCBkdGUgaW5mb3JtYXRpb24gKi8KLSAg ICBkdGVfYmFzZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKGR0ZV9tZm4pKTsKLQotICAgIGdkdGUg PSBkdGVfYmFzZSArIGdiZGYgJSAoUEFHRV9TSVpFIC8gc2l6ZW9mKGRldl9lbnRyeV90KSk7Ci0K LSAgICBnZG9tX2lkICA9IGdldF9kb21pZF9mcm9tX2R0ZShnZHRlKTsKLSAgICBnY3IzX2dmbiA9 IGdldF9ndWVzdF9jcjNfZnJvbV9kdGUoZ2R0ZSk7Ci0gICAgZ2x4ICAgICAgPSBnZXRfZ2x4X2Zy b21fZHRlKGdkdGUpOwotICAgIGd2ICAgICAgID0gZ2V0X2d2X2Zyb21fZHRlKGdkdGUpOwotCi0g ICAgdW5tYXBfZG9tYWluX3BhZ2UoZHRlX2Jhc2UpOwotCi0gICAgLyogRG8gbm90IHVwZGF0ZSBo b3N0IGR0ZSBiZWZvcmUgZ2NyMyBoYXMgYmVlbiBzZXQgKi8KLSAgICBpZiAoIGdjcjNfZ2ZuID09 IDAgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGdjcjNfbWZuID0gbWZuX3goZ2V0X2dmbihk LCBnY3IzX2dmbiwgJnAybXQpKTsKLSAgICBwdXRfZ2ZuKGQsIGdjcjNfZ2ZuKTsKLQotICAgIEFT U0VSVChtZm5fdmFsaWQoX21mbihnY3IzX21mbikpKTsKLQotICAgIGlvbW11ID0gZmluZF9pb21t dV9mb3JfZGV2aWNlKDAsIG1iZGYpOwotICAgIGlmICggIWlvbW11ICkKLSAgICB7Ci0gICAgICAg IEFNRF9JT01NVV9ERUJVRygiJXM6IEZhaWwgdG8gZmluZCBpb21tdSBmb3IgYmRmICV4IVxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBtYmRmKTsKLSAgICAgICAgcmV0dXJu IC1FTk9ERVY7Ci0gICAgfQotCi0gICAgLyogU2V0dXAgaG9zdCBkZXZpY2UgZW50cnkgKi8KLSAg ICBoZG9tX2lkID0gaG9zdF9kb21pZChkLCBnZG9tX2lkKTsKLSAgICByZXFfaWQgPSBnZXRfZG1h X3JlcXVlc3Rvcl9pZChpb21tdS0+c2VnLCBtYmRmKTsKLSAgICBtZHRlID0gaW9tbXUtPmRldl90 YWJsZS5idWZmZXIgKyAocmVxX2lkICogc2l6ZW9mKGRldl9lbnRyeV90KSk7Ci0KLSAgICBzcGlu X2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLSAgICBpb21tdV9kdGVfc2V0X2d1 ZXN0X2NyMygodTMyICopbWR0ZSwgaGRvbV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnY3IzX21mbiA8PCBQQUdFX1NISUZULCBndiwgZ2x4KTsKLQotICAgIGFtZF9pb21tdV9mbHVz aF9kZXZpY2UoaW9tbXUsIHJlcV9pZCk7Ci0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9t bXUtPmxvY2ssIGZsYWdzKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBndWVz dF9pb21tdV9wcm9jZXNzX2NvbW1hbmQodW5zaWduZWQgbG9uZyBfZCkKLXsKLSAgICB1bnNpZ25l ZCBsb25nIG9wY29kZSwgdGFpbCwgaGVhZCwgZW50cmllc19wZXJfcGFnZSwgY21kX21mbjsKLSAg ICBjbWRfZW50cnlfdCAqY21kLCAqY21kX2Jhc2U7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IChz dHJ1Y3QgZG9tYWluICopX2Q7Ci0gICAgc3RydWN0IGd1ZXN0X2lvbW11ICppb21tdTsKLQotICAg IGlvbW11ID0gZG9tYWluX2lvbW11KGQpOwotCi0gICAgaWYgKCAhaW9tbXUtPmVuYWJsZWQgKQot ICAgICAgICByZXR1cm47Ci0KLSAgICBoZWFkID0gaW9tbXVfZ2V0X3JiX3BvaW50ZXIoaW9tbXUt PmNtZF9idWZmZXIucmVnX2hlYWQubG8pOwotICAgIHRhaWwgPSBpb21tdV9nZXRfcmJfcG9pbnRl cihpb21tdS0+Y21kX2J1ZmZlci5yZWdfdGFpbC5sbyk7Ci0KLSAgICAvKiBUYWlsIHBvaW50ZXIg aXMgcm9sbGVkIG92ZXIgYnkgZ3Vlc3QgZHJpdmVyLCB2YWx1ZSBvdXRzaWRlCi0gICAgICogY21k X2J1ZmZlcl9lbnRyaWVzIGNhdXNlIGlvbW11IGRpc2FibGVkCi0gICAgICovCi0KLSAgICBpZiAo IHRhaWwgPj0gaW9tbXUtPmNtZF9idWZmZXIuZW50cmllcyB8fAotICAgICAgICAgaGVhZCA+PSBp b21tdS0+Y21kX2J1ZmZlci5lbnRyaWVzICkKLSAgICB7Ci0gICAgICAgIEFNRF9JT01NVV9ERUJV RygiRXJyb3I6IGd1ZXN0IGlvbW11IGNtZCBidWZmZXIgb3ZlcmZsb3dzXG4iKTsKLSAgICAgICAg Z3Vlc3RfaW9tbXVfZGlzYWJsZShpb21tdSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg ICBlbnRyaWVzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gc2l6ZW9mKGNtZF9lbnRyeV90KTsKLQot ICAgIHdoaWxlICggaGVhZCAhPSB0YWlsICkKLSAgICB7Ci0gICAgICAgIGludCByZXQgPSAwOwot Ci0gICAgICAgIGNtZF9tZm4gPSBndWVzdF9pb21tdV9nZXRfdGFibGVfbWZuKGQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ190b191NjQoaW9tbXUtPmNt ZF9idWZmZXIucmVnX2Jhc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoY21kX2VudHJ5X3QpLCBoZWFkKTsKLSAgICAgICAgQVNTRVJUKG1mbl92 YWxpZChfbWZuKGNtZF9tZm4pKSk7Ci0KLSAgICAgICAgY21kX2Jhc2UgPSBtYXBfZG9tYWluX3Bh Z2UoX21mbihjbWRfbWZuKSk7Ci0gICAgICAgIGNtZCA9IGNtZF9iYXNlICsgaGVhZCAlIGVudHJp ZXNfcGVyX3BhZ2U7Ci0KLSAgICAgICAgb3Bjb2RlID0gZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMihj bWQtPmRhdGFbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9N TVVfQ01EX09QQ09ERV9NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElPTU1VX0NNRF9PUENPREVfU0hJRlQpOwotICAgICAgICBzd2l0Y2ggKCBvcGNvZGUgKQot ICAgICAgICB7Ci0gICAgICAgIGNhc2UgSU9NTVVfQ01EX0NPTVBMRVRJT05fV0FJVDoKLSAgICAg ICAgICAgIHJldCA9IGRvX2NvbXBsZXRpb25fd2FpdChkLCBjbWQpOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIGNhc2UgSU9NTVVfQ01EX0lOVkFMSURBVEVfREVWVEFCX0VOVFJZOgotICAg ICAgICAgICAgcmV0ID0gZG9faW52YWxpZGF0ZV9kdGUoZCwgY21kKTsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICBjYXNlIElPTU1VX0NNRF9JTlZBTElEQVRFX0lPTU1VX1BBR0VTOgotICAg ICAgICAgICAgcmV0ID0gZG9faW52YWxpZGF0ZV9wYWdlcyhkLCBjbWQpOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgIGNhc2UgSU9NTVVfQ01EX0lOVkFMSURBVEVfSU9UTEJfUEFHRVM6Ci0g ICAgICAgICAgICByZXQgPSBkb19pbnZhbGlkYXRlX2lvdGxiX3BhZ2VzKGQsIGNtZCk7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJT01NVV9DTURfSU5WQUxJREFURV9JTlRfVEFC TEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJT01NVV9DTURfQ09NUExFVEVf UFBSX1JFUVVFU1Q6Ci0gICAgICAgICAgICByZXQgPSBkb19jb21wbGV0ZV9wcHJfcmVxdWVzdChk LCBjbWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSU9NTVVfQ01EX0lOVkFM SURBVEVfSU9NTVVfQUxMOgotICAgICAgICAgICAgcmV0ID0gZG9faW52YWxpZGF0ZV9hbGwoZCwg Y21kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg QU1EX0lPTU1VX0RFQlVHKCJDTUQ6IFVua25vd24gY29tbWFuZCBjbWRfdHlwZSA9ICVseCAiCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWQgPSAlbGRcbiIsIG9wY29kZSwgaGVhZCk7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHVubWFwX2RvbWFpbl9w YWdlKGNtZF9iYXNlKTsKLSAgICAgICAgaWYgKCArK2hlYWQgPj0gaW9tbXUtPmNtZF9idWZmZXIu ZW50cmllcyApCi0gICAgICAgICAgICBoZWFkID0gMDsKLSAgICAgICAgaWYgKCByZXQgKQotICAg ICAgICAgICAgZ3Vlc3RfaW9tbXVfZGlzYWJsZShpb21tdSk7Ci0gICAgfQotCi0gICAgLyogTm93 IHNoaWZ0IGNtZCBidWZmZXIgaGVhZCBwb2ludGVyICovCi0gICAgaW9tbXVfc2V0X3JiX3BvaW50 ZXIoJmlvbW11LT5jbWRfYnVmZmVyLnJlZ19oZWFkLmxvLCBoZWFkKTsKLSAgICByZXR1cm47Ci19 Ci0KLXN0YXRpYyBpbnQgZ3Vlc3RfaW9tbXVfd3JpdGVfY3RybChzdHJ1Y3QgZ3Vlc3RfaW9tbXUg KmlvbW11LCB1aW50NjRfdCBuZXdjdHJsKQotewotICAgIGJvb2xfdCBjbWRfZW4sIGV2ZW50X2Vu LCBpb21tdV9lbiwgcHByX2VuLCBwcHJfbG9nX2VuOwotICAgIGJvb2xfdCBjbWRfZW5fb2xkLCBl dmVudF9lbl9vbGQsIGlvbW11X2VuX29sZDsKLSAgICBib29sX3QgY21kX3J1bjsKLQotICAgIGlv bW11X2VuID0gaW9tbXVfZ2V0X2JpdChuZXdjdHJsLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJT01NVV9DT05UUk9MX1RSQU5TTEFUSU9OX0VOQUJMRV9TSElGVCk7Ci0gICAgaW9tbXVf ZW5fb2xkID0gaW9tbXVfZ2V0X2JpdChpb21tdS0+cmVnX2N0cmwubG8sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJT01NVV9DT05UUk9MX1RSQU5TTEFUSU9OX0VOQUJMRV9TSElG VCk7Ci0KLSAgICBjbWRfZW4gPSBpb21tdV9nZXRfYml0KG5ld2N0cmwsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBJT01NVV9DT05UUk9MX0NPTU1BTkRfQlVGRkVSX0VOQUJMRV9TSElGVCk7 Ci0gICAgY21kX2VuX29sZCA9IGlvbW11X2dldF9iaXQoaW9tbXUtPnJlZ19jdHJsLmxvLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0NPTlRST0xfQ09NTUFORF9CVUZGRVJf RU5BQkxFX1NISUZUKTsKLSAgICBjbWRfcnVuID0gaW9tbXVfZ2V0X2JpdChpb21tdS0+cmVnX3N0 YXR1cy5sbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9TVEFUVVNfQ01EX0JV RkZFUl9SVU5fU0hJRlQpOwotICAgIGV2ZW50X2VuID0gaW9tbXVfZ2V0X2JpdChuZXdjdHJsLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9DT05UUk9MX0VWRU5UX0xPR19FTkFC TEVfU0hJRlQpOwotICAgIGV2ZW50X2VuX29sZCA9IGlvbW11X2dldF9iaXQoaW9tbXUtPnJlZ19j dHJsLmxvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVfQ09OVFJPTF9F VkVOVF9MT0dfRU5BQkxFX1NISUZUKTsKLQotICAgIHBwcl9lbiA9IGlvbW11X2dldF9iaXQobmV3 Y3RybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0NPTlRST0xfUFBSX0VOQUJM RV9TSElGVCk7Ci0gICAgcHByX2xvZ19lbiA9IGlvbW11X2dldF9iaXQobmV3Y3RybCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9DT05UUk9MX1BQUl9MT0dfRU5BQkxFX1NI SUZUKTsKLQotICAgIGlmICggaW9tbXVfZW4gKQotICAgIHsKLSAgICAgICAgZ3Vlc3RfaW9tbXVf ZW5hYmxlKGlvbW11KTsKLSAgICAgICAgZ3Vlc3RfaW9tbXVfZW5hYmxlX2Rldl90YWJsZShpb21t dSk7Ci0gICAgfQotCi0gICAgaWYgKCBpb21tdV9lbiAmJiBjbWRfZW4gKQotICAgIHsKLSAgICAg ICAgZ3Vlc3RfaW9tbXVfZW5hYmxlX3JpbmdfYnVmZmVyKGlvbW11LCAmaW9tbXUtPmNtZF9idWZm ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY21kX2Vu dHJ5X3QpKTsKLSAgICAgICAgLyogRW5hYmxlIGlvbW11IGNvbW1hbmQgcHJvY2Vzc2luZyAqLwot ICAgICAgICB0YXNrbGV0X3NjaGVkdWxlKCZpb21tdS0+Y21kX2J1ZmZlcl90YXNrbGV0KTsKLSAg ICB9Ci0KLSAgICBpZiAoIGlvbW11X2VuICYmIGV2ZW50X2VuICkKLSAgICB7Ci0gICAgICAgIGd1 ZXN0X2lvbW11X2VuYWJsZV9yaW5nX2J1ZmZlcihpb21tdSwgJmlvbW11LT5ldmVudF9sb2csCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXZlbnRfZW50cnlf dCkpOwotICAgICAgICBndWVzdF9pb21tdV9zZXRfc3RhdHVzKGlvbW11LCBJT01NVV9TVEFUVVNf RVZFTlRfTE9HX1JVTl9TSElGVCk7Ci0gICAgICAgIGd1ZXN0X2lvbW11X2NsZWFyX3N0YXR1cyhp b21tdSwgSU9NTVVfU1RBVFVTX0VWRU5UX09WRVJGTE9XX1NISUZUKTsKLSAgICB9Ci0KLSAgICBp ZiAoIGlvbW11X2VuICYmIHBwcl9lbiAmJiBwcHJfbG9nX2VuICkKLSAgICB7Ci0gICAgICAgIGd1 ZXN0X2lvbW11X2VuYWJsZV9yaW5nX2J1ZmZlcihpb21tdSwgJmlvbW11LT5wcHJfbG9nLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBwcl9lbnRyeV90KSk7 Ci0gICAgICAgIGd1ZXN0X2lvbW11X3NldF9zdGF0dXMoaW9tbXUsIElPTU1VX1NUQVRVU19QUFJf TE9HX1JVTl9TSElGVCk7Ci0gICAgICAgIGd1ZXN0X2lvbW11X2NsZWFyX3N0YXR1cyhpb21tdSwg SU9NTVVfU1RBVFVTX1BQUl9MT0dfT1ZFUkZMT1dfU0hJRlQpOwotICAgIH0KLQotICAgIGlmICgg aW9tbXVfZW4gJiYgY21kX2VuX29sZCAmJiAhY21kX2VuICkKLSAgICB7Ci0gICAgICAgIC8qIERp c2FibGUgaW9tbXUgY29tbWFuZCBwcm9jZXNzaW5nICovCi0gICAgICAgIHRhc2tsZXRfa2lsbCgm aW9tbXUtPmNtZF9idWZmZXJfdGFza2xldCk7Ci0gICAgfQotCi0gICAgaWYgKCBldmVudF9lbl9v bGQgJiYgIWV2ZW50X2VuICkKLSAgICAgICAgZ3Vlc3RfaW9tbXVfY2xlYXJfc3RhdHVzKGlvbW11 LCBJT01NVV9TVEFUVVNfRVZFTlRfTE9HX1JVTl9TSElGVCk7Ci0KLSAgICBpZiAoIGlvbW11X2Vu X29sZCAmJiAhaW9tbXVfZW4gKQotICAgICAgICBndWVzdF9pb21tdV9kaXNhYmxlKGlvbW11KTsK LQotICAgIHU2NF90b19yZWcoJmlvbW11LT5yZWdfY3RybCwgbmV3Y3RybCk7Ci0gICAgcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdCBpb21tdV9tbWlvX3JlYWQ2NChzdHJ1Y3QgZ3Vlc3Rf aW9tbXUgKmlvbW11LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgb2Zmc2V0KQotewotICAgIHVpbnQ2NF90IHZhbDsKLQotICAgIHN3aXRjaCAoIG9mZnNl dCApCi0gICAgewotICAgIGNhc2UgSU9NTVVfREVWX1RBQkxFX0JBU0VfTE9XX09GRlNFVDoKLSAg ICAgICAgdmFsID0gcmVnX3RvX3U2NChpb21tdS0+ZGV2X3RhYmxlLnJlZ19iYXNlKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9DTURfQlVGRkVSX0JBU0VfTE9XX09GRlNFVDoKLSAg ICAgICAgdmFsID0gcmVnX3RvX3U2NChpb21tdS0+Y21kX2J1ZmZlci5yZWdfYmFzZSk7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgSU9NTVVfRVZFTlRfTE9HX0JBU0VfTE9XX09GRlNFVDoKLSAg ICAgICAgdmFsID0gcmVnX3RvX3U2NChpb21tdS0+ZXZlbnRfbG9nLnJlZ19iYXNlKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9QUFJfTE9HX0JBU0VfTE9XX09GRlNFVDoKLSAgICAg ICAgdmFsID0gcmVnX3RvX3U2NChpb21tdS0+cHByX2xvZy5yZWdfYmFzZSk7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgSU9NTVVfQ01EX0JVRkZFUl9IRUFEX09GRlNFVDoKLSAgICAgICAgdmFs ID0gcmVnX3RvX3U2NChpb21tdS0+Y21kX2J1ZmZlci5yZWdfaGVhZCk7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgSU9NTVVfQ01EX0JVRkZFUl9UQUlMX09GRlNFVDoKLSAgICAgICAgdmFsID0g cmVnX3RvX3U2NChpb21tdS0+Y21kX2J1ZmZlci5yZWdfdGFpbCk7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgSU9NTVVfRVZFTlRfTE9HX0hFQURfT0ZGU0VUOgotICAgICAgICB2YWwgPSByZWdf dG9fdTY0KGlvbW11LT5ldmVudF9sb2cucmVnX2hlYWQpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIElPTU1VX0VWRU5UX0xPR19UQUlMX09GRlNFVDoKLSAgICAgICAgdmFsID0gcmVnX3RvX3U2 NChpb21tdS0+ZXZlbnRfbG9nLnJlZ190YWlsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ T01NVV9QUFJfTE9HX0hFQURfT0ZGU0VUOgotICAgICAgICB2YWwgPSByZWdfdG9fdTY0KGlvbW11 LT5wcHJfbG9nLnJlZ19oZWFkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9QUFJf TE9HX1RBSUxfT0ZGU0VUOgotICAgICAgICB2YWwgPSByZWdfdG9fdTY0KGlvbW11LT5wcHJfbG9n LnJlZ190YWlsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9DT05UUk9MX01NSU9f T0ZGU0VUOgotICAgICAgICB2YWwgPSByZWdfdG9fdTY0KGlvbW11LT5yZWdfY3RybCk7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgSU9NTVVfU1RBVFVTX01NSU9fT0ZGU0VUOgotICAgICAgICB2 YWwgPSByZWdfdG9fdTY0KGlvbW11LT5yZWdfc3RhdHVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBJT01NVV9FWFRfRkVBVFVSRV9NTUlPX09GRlNFVDoKLSAgICAgICAgdmFsID0gcmVnX3Rv X3U2NChpb21tdS0+cmVnX2V4dF9mZWF0dXJlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZh dWx0OgotICAgICAgICBBTURfSU9NTVVfREVCVUcoIkd1ZXN0IHJlYWRzIHVua25vd24gbW1pbyBv ZmZzZXQgPSAlbHhcbiIsIG9mZnNldCk7Ci0gICAgICAgIHZhbCA9IDA7Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLQotICAgIHJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgZ3Vlc3RfaW9tbXVf bW1pb19yZWFkKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFkZHIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nICpw dmFsKQotewotICAgIHN0cnVjdCBndWVzdF9pb21tdSAqaW9tbXUgPSB2Y3B1X2lvbW11KHYpOwot ICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotICAgIHVpbnQ2NF90IHZhbDsKLSAgICB1aW50MzJf dCBtbWlvLCBzaGlmdDsKLSAgICB1aW50NjRfdCBtYXNrID0gMDsKLQotICAgIG9mZnNldCA9IGFk ZHIgLSBpb21tdS0+bW1pb19iYXNlOwotCi0gICAgaWYgKCB1bmxpa2VseSgob2Zmc2V0ICYgKGxl biAtIDEgKSkgfHwgKGxlbiA+IDgpKSApCi0gICAgewotICAgICAgICBBTURfSU9NTVVfREVCVUco ImlvbW11IG1taW8gcmVhZCBhY2Nlc3MgaXMgbm90IGFsaWduZWQ6IgotICAgICAgICAgICAgICAg ICAgICAgICAgIiBvZmZzZXQgPSAlbHgsIGxlbiA9ICV4XG4iLCBvZmZzZXQsIGxlbik7Ci0gICAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICBtYXNrID0gKGxl biA9PSA4KSA/IH4wVUxMIDogKDFVTEwgPDwgKGxlbiAqIDgpKSAtIDE7Ci0gICAgc2hpZnQgPSAo b2Zmc2V0ICYgN3UpICogODsKLQotICAgIC8qIG1taW8gYWNjZXNzIGlzIGFsd2F5cyBhbGlnbmVk IG9uIDgtYnl0ZSBib3VuZGFyeSAqLwotICAgIG1taW8gPSBvZmZzZXQgJiAofjd1KTsKLQotICAg IHNwaW5fbG9jaygmaW9tbXUtPmxvY2spOwotICAgIHZhbCA9IGlvbW11X21taW9fcmVhZDY0KGlv bW11LCBtbWlvKTsKLSAgICBzcGluX3VubG9jaygmaW9tbXUtPmxvY2spOwotCi0gICAgKnB2YWwg PSAodmFsID4+IHNoaWZ0ICkgJiBtYXNrOwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0K LQotc3RhdGljIHZvaWQgZ3Vlc3RfaW9tbXVfbW1pb193cml0ZTY0KHN0cnVjdCBndWVzdF9pb21t dSAqaW9tbXUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIG9mZnNldCwgdWludDY0X3QgdmFsKQotewotICAgIHN3aXRjaCAoIG9mZnNldCApCi0gICAg ewotICAgIGNhc2UgSU9NTVVfREVWX1RBQkxFX0JBU0VfTE9XX09GRlNFVDoKLSAgICAgICAgdTY0 X3RvX3JlZygmaW9tbXUtPmRldl90YWJsZS5yZWdfYmFzZSwgdmFsKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBJT01NVV9DTURfQlVGRkVSX0JBU0VfTE9XX09GRlNFVDoKLSAgICAgICAgdTY0 X3RvX3JlZygmaW9tbXUtPmNtZF9idWZmZXIucmVnX2Jhc2UsIHZhbCk7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgSU9NTVVfRVZFTlRfTE9HX0JBU0VfTE9XX09GRlNFVDoKLSAgICAgICAgdTY0 X3RvX3JlZygmaW9tbXUtPmV2ZW50X2xvZy5yZWdfYmFzZSwgdmFsKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBJT01NVV9QUFJfTE9HX0JBU0VfTE9XX09GRlNFVDoKLSAgICAgICAgdTY0X3Rv X3JlZygmaW9tbXUtPnBwcl9sb2cucmVnX2Jhc2UsIHZhbCk7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgSU9NTVVfQ09OVFJPTF9NTUlPX09GRlNFVDoKLSAgICAgICAgZ3Vlc3RfaW9tbXVfd3Jp dGVfY3RybChpb21tdSwgdmFsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9DTURf QlVGRkVSX0hFQURfT0ZGU0VUOgotICAgICAgICB1NjRfdG9fcmVnKCZpb21tdS0+Y21kX2J1ZmZl ci5yZWdfaGVhZCwgdmFsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9DTURfQlVG RkVSX1RBSUxfT0ZGU0VUOgotICAgICAgICB1NjRfdG9fcmVnKCZpb21tdS0+Y21kX2J1ZmZlci5y ZWdfdGFpbCwgdmFsKTsKLSAgICAgICAgdGFza2xldF9zY2hlZHVsZSgmaW9tbXUtPmNtZF9idWZm ZXJfdGFza2xldCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSU9NTVVfRVZFTlRfTE9HX0hF QURfT0ZGU0VUOgotICAgICAgICB1NjRfdG9fcmVnKCZpb21tdS0+ZXZlbnRfbG9nLnJlZ19oZWFk LCB2YWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElPTU1VX0VWRU5UX0xPR19UQUlMX09G RlNFVDoKLSAgICAgICAgdTY0X3RvX3JlZygmaW9tbXUtPmV2ZW50X2xvZy5yZWdfdGFpbCwgdmFs KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9QUFJfTE9HX0hFQURfT0ZGU0VUOgot ICAgICAgICB1NjRfdG9fcmVnKCZpb21tdS0+cHByX2xvZy5yZWdfaGVhZCwgdmFsKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBJT01NVV9QUFJfTE9HX1RBSUxfT0ZGU0VUOgotICAgICAgICB1 NjRfdG9fcmVnKCZpb21tdS0+cHByX2xvZy5yZWdfdGFpbCwgdmFsKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBJT01NVV9TVEFUVVNfTU1JT19PRkZTRVQ6Ci0gICAgICAgIHZhbCAmPSBJT01N VV9TVEFUVVNfRVZFTlRfT1ZFUkZMT1dfTUFTSyB8Ci0gICAgICAgICAgICAgICBJT01NVV9TVEFU VVNfRVZFTlRfTE9HX0lOVF9NQVNLIHwKLSAgICAgICAgICAgICAgIElPTU1VX1NUQVRVU19DT01Q X1dBSVRfSU5UX01BU0sgfAotICAgICAgICAgICAgICAgSU9NTVVfU1RBVFVTX1BQUl9MT0dfT1ZF UkZMT1dfTUFTSyB8Ci0gICAgICAgICAgICAgICBJT01NVV9TVEFUVVNfUFBSX0xPR19JTlRfTUFT SyB8Ci0gICAgICAgICAgICAgICBJT01NVV9TVEFUVVNfR0FQSUNfTE9HX09WRVJGTE9XX01BU0sg fAotICAgICAgICAgICAgICAgSU9NTVVfU1RBVFVTX0dBUElDX0xPR19JTlRfTUFTSzsKLSAgICAg ICAgdTY0X3RvX3JlZygmaW9tbXUtPnJlZ19zdGF0dXMsIHJlZ190b191NjQoaW9tbXUtPnJlZ19z dGF0dXMpICYgfnZhbCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg QU1EX0lPTU1VX0RFQlVHKCJndWVzdCB3cml0ZXMgdW5rbm93biBtbWlvIG9mZnNldCA9ICVseCwi Ci0gICAgICAgICAgICAgICAgICAgICAgICAiIHZhbCA9ICUiIFBSSXg2NCAiXG4iLCBvZmZzZXQs IHZhbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIGludCBndWVzdF9pb21t dV9tbWlvX3dyaXRlKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFkZHIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgbG9u ZyB2YWwpCi17Ci0gICAgc3RydWN0IGd1ZXN0X2lvbW11ICppb21tdSA9IHZjcHVfaW9tbXUodik7 Ci0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0gICAgdWludDY0X3QgcmVnX29sZCwgbW1pbzsK LSAgICB1aW50MzJfdCBzaGlmdDsKLSAgICB1aW50NjRfdCBtYXNrID0gMDsKLQotICAgIG9mZnNl dCA9IGFkZHIgLSBpb21tdS0+bW1pb19iYXNlOwotCi0gICAgaWYgKCB1bmxpa2VseSgob2Zmc2V0 ICYgKGxlbiAtIDEpKSB8fCAobGVuID4gOCkpICkKLSAgICB7Ci0gICAgICAgIEFNRF9JT01NVV9E RUJVRygiaW9tbXUgbW1pbyB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsaWduZWQ6IgotICAgICAgICAg ICAgICAgICAgICAgICAgIiBvZmZzZXQgPSAlbHgsIGxlbiA9ICV4XG4iLCBvZmZzZXQsIGxlbik7 Ci0gICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICBtYXNr ID0gKGxlbiA9PSA4KSA/IH4wVUxMIDogKDFVTEwgPDwgKGxlbiAqIDgpKSAtIDE7Ci0gICAgc2hp ZnQgPSAob2Zmc2V0ICYgNykgKiA4OwotCi0gICAgLyogbW1pbyBhY2Nlc3MgaXMgYWx3YXlzIGFs aWduZWQgb24gOC1ieXRlIGJvdW5kYXJ5ICovCi0gICAgbW1pbyA9IG9mZnNldCAmIH43OwotCi0g ICAgc3Bpbl9sb2NrKCZpb21tdS0+bG9jayk7Ci0KLSAgICByZWdfb2xkID0gaW9tbXVfbW1pb19y ZWFkNjQoaW9tbXUsIG1taW8pOwotICAgIHJlZ19vbGQgJj0gfihtYXNrIDw8IHNoaWZ0KTsKLSAg ICB2YWwgPSByZWdfb2xkIHwgKCh2YWwgJiBtYXNrKSA8PCBzaGlmdCk7Ci0gICAgZ3Vlc3RfaW9t bXVfbW1pb193cml0ZTY0KGlvbW11LCBtbWlvLCB2YWwpOwotCi0gICAgc3Bpbl91bmxvY2soJmlv bW11LT5sb2NrKTsKLQotICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLWludCBndWVzdF9p b21tdV9zZXRfYmFzZShzdHJ1Y3QgZG9tYWluICpkLCB1aW50NjRfdCBiYXNlKQotewotICAgIHAy bV90eXBlX3QgdDsKLSAgICBzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKmlvbW11ID0gZG9tYWluX2lvbW11 KGQpOwotCi0gICAgaWYgKCAhaW9tbXUgKQotICAgICAgICByZXR1cm4gLUVBQ0NFUzsKLQotICAg IGlvbW11LT5tbWlvX2Jhc2UgPSBiYXNlOwotICAgIGJhc2UgPj49IFBBR0VfU0hJRlQ7Ci0KLSAg ICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBJT01NVV9NTUlPX1BBR0VfTlI7IGkrKyApCi0gICAgewot ICAgICAgICB1bnNpZ25lZCBsb25nIGdmbiA9IGJhc2UgKyBpOwotCi0gICAgICAgIGdldF9nZm5f cXVlcnkoZCwgZ2ZuLCAmdCk7Ci0gICAgICAgIHAybV9jaGFuZ2VfdHlwZV9vbmUoZCwgZ2ZuLCB0 LCBwMm1fbW1pb19kbSk7Ci0gICAgICAgIHB1dF9nZm4oZCwgZ2ZuKTsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotLyogSW5pdGlhbGl6ZSBtbWlvIHJlYWQgb25seSBiaXRzICovCi1zdGF0 aWMgdm9pZCBndWVzdF9pb21tdV9yZWdfaW5pdChzdHJ1Y3QgZ3Vlc3RfaW9tbXUgKmlvbW11KQot ewotICAgIHVpbnQzMl90IGxvd2VyLCB1cHBlcjsKLQotICAgIGxvd2VyID0gdXBwZXIgPSAwOwot ICAgIC8qIFN1cHBvcnQgcHJlZmV0Y2ggKi8KLSAgICBpb21tdV9zZXRfYml0KCZsb3dlcixJT01N VV9FWFRfRkVBVFVSRV9QUkVGU1VQX1NISUZUKTsKLSAgICAvKiBTdXBwb3J0IFBQUiBsb2cgKi8K LSAgICBpb21tdV9zZXRfYml0KCZsb3dlcixJT01NVV9FWFRfRkVBVFVSRV9QUFJTVVBfU0hJRlQp OwotICAgIC8qIFN1cHBvcnQgZ3Vlc3QgdHJhbnNsYXRpb24gKi8KLSAgICBpb21tdV9zZXRfYml0 KCZsb3dlcixJT01NVV9FWFRfRkVBVFVSRV9HVFNVUF9TSElGVCk7Ci0gICAgLyogU3VwcG9ydCBp bnZhbGlkYXRlIGFsbCBjb21tYW5kICovCi0gICAgaW9tbXVfc2V0X2JpdCgmbG93ZXIsSU9NTVVf RVhUX0ZFQVRVUkVfSUFTVVBfU0hJRlQpOwotCi0gICAgLyogSG9zdCB0cmFuc2xhdGlvbiBzaXpl IGhhcyA2IGxldmVscyAqLwotICAgIHNldF9maWVsZF9pbl9yZWdfdTMyKEhPU1RfQUREUkVTU19T SVpFXzZfTEVWRUwsIGxvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0VYVF9G RUFUVVJFX0hBVFNfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9FWFRfRkVB VFVSRV9IQVRTX1NISUZULAotICAgICAgICAgICAgICAgICAgICAgICAgICZsb3dlcik7Ci0gICAg LyogR3Vlc3QgdHJhbnNsYXRpb24gc2l6ZSBoYXMgNiBsZXZlbHMgKi8KLSAgICBzZXRfZmllbGRf aW5fcmVnX3UzMihHVUVTVF9BRERSRVNTX1NJWkVfNl9MRVZFTCwgbG93ZXIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgSU9NTVVfRVhUX0ZFQVRVUkVfR0FUU19NQVNLLAotICAgICAgICAgICAg ICAgICAgICAgICAgIElPTU1VX0VYVF9GRUFUVVJFX0dBVFNfU0hJRlQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgJmxvd2VyKTsKLSAgICAvKiBTaW5nbGUgbGV2ZWwgZ0NSMyAqLwotICAgIHNl dF9maWVsZF9pbl9yZWdfdTMyKEdVRVNUX0NSM18xX0xFVkVMLCBsb3dlciwKLSAgICAgICAgICAg ICAgICAgICAgICAgICBJT01NVV9FWFRfRkVBVFVSRV9HTFhTVVBfTUFTSywKLSAgICAgICAgICAg ICAgICAgICAgICAgICBJT01NVV9FWFRfRkVBVFVSRV9HTFhTVVBfU0hJRlQsICZsb3dlcik7Ci0g ICAgLyogOSBiaXQgUEFTSUQgKi8KLSAgICBzZXRfZmllbGRfaW5fcmVnX3UzMihQQVNNQVhfOV9i aXQsIHVwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0VYVF9GRUFUVVJFX1BB U01BWF9NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgIElPTU1VX0VYVF9GRUFUVVJFX1BB U01BWF9TSElGVCwgJnVwcGVyKTsKLQotICAgIGlvbW11LT5yZWdfZXh0X2ZlYXR1cmUubG8gPSBs b3dlcjsKLSAgICBpb21tdS0+cmVnX2V4dF9mZWF0dXJlLmhpID0gdXBwZXI7Ci19Ci0KLXN0YXRp YyBpbnQgZ3Vlc3RfaW9tbXVfbW1pb19yYW5nZShzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9u ZyBhZGRyKQotewotICAgIHN0cnVjdCBndWVzdF9pb21tdSAqaW9tbXUgPSB2Y3B1X2lvbW11KHYp OwotCi0gICAgcmV0dXJuIGlvbW11ICYmIGFkZHIgPj0gaW9tbXUtPm1taW9fYmFzZSAmJgotICAg ICAgICAgICBhZGRyIDwgaW9tbXUtPm1taW9fYmFzZSArIElPTU1VX01NSU9fU0laRTsKLX0KLQot c3RhdGljIGNvbnN0IHN0cnVjdCBodm1fbW1pb19vcHMgaW9tbXVfbW1pb19vcHMgPSB7Ci0gICAg LmNoZWNrID0gZ3Vlc3RfaW9tbXVfbW1pb19yYW5nZSwKLSAgICAucmVhZCA9IGd1ZXN0X2lvbW11 X21taW9fcmVhZCwKLSAgICAud3JpdGUgPSBndWVzdF9pb21tdV9tbWlvX3dyaXRlCi19OwotCi0v KiBEb21haW4gc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLWludCBndWVzdF9pb21tdV9pbml0 KHN0cnVjdCBkb21haW4qIGQpCi17Ci0gICAgc3RydWN0IGd1ZXN0X2lvbW11ICppb21tdTsKLSAg ICBzdHJ1Y3QgZG9tYWluX2lvbW11ICpoZCA9IGRvbV9pb21tdShkKTsKLQotICAgIGlmICggIWlz X2h2bV9kb21haW4oZCkgfHwgIWlvbW11X2VuYWJsZWQgfHwgIWlvbW11djJfZW5hYmxlZCB8fAot ICAgICAgICAgIWhhc192aW9tbXUoZCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlvbW11 ID0geHphbGxvYyhzdHJ1Y3QgZ3Vlc3RfaW9tbXUpOwotICAgIGlmICggIWlvbW11ICkKLSAgICB7 Ci0gICAgICAgIEFNRF9JT01NVV9ERUJVRygiRXJyb3IgYWxsb2NhdGluZyBndWVzdCBpb21tdSBz dHJ1Y3R1cmUuXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgZ3Vlc3RfaW9t bXVfcmVnX2luaXQoaW9tbXUpOwotICAgIGlvbW11LT5tbWlvX2Jhc2UgPSB+MFVMTDsKLSAgICBp b21tdS0+ZG9tYWluID0gZDsKLSAgICBoZC0+YXJjaC5nX2lvbW11ID0gaW9tbXU7Ci0KLSAgICB0 YXNrbGV0X2luaXQoJmlvbW11LT5jbWRfYnVmZmVyX3Rhc2tsZXQsCi0gICAgICAgICAgICAgICAg IGd1ZXN0X2lvbW11X3Byb2Nlc3NfY29tbWFuZCwgKHVuc2lnbmVkIGxvbmcpZCk7Ci0KLSAgICBz cGluX2xvY2tfaW5pdCgmaW9tbXUtPmxvY2spOwotCi0gICAgcmVnaXN0ZXJfbW1pb19oYW5kbGVy KGQsICZpb21tdV9tbWlvX29wcyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBndWVzdF9p b21tdV9kZXN0cm95KHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgc3RydWN0IGd1ZXN0X2lvbW11 ICppb21tdTsKLQotICAgIGlvbW11ID0gZG9tYWluX2lvbW11KGQpOwotICAgIGlmICggIWlvbW11 ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFza2xldF9raWxsKCZpb21tdS0+Y21kX2J1ZmZl cl90YXNrbGV0KTsKLSAgICB4ZnJlZShpb21tdSk7Ci0KLSAgICBkb21faW9tbXUoZCktPmFyY2gu Z19pb21tdSA9IE5VTEw7Ci19CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94 ODYvYW1kL2lvbW11X2luaXQuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQvaW9t bXVfaW5pdC5jCmluZGV4IDQ3NDk5MmE3NWEuLmMwNzQyZDFjZWUgMTAwNjQ0Ci0tLSBhL3hlbi9k cml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQvaW9tbXVfaW5pdC5jCisrKyBiL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL3g4Ni9hbWQvaW9tbXVfaW5pdC5jCkBAIC02MzgsMTIgKzYzOCwxNSBAQCBz dGF0aWMgdm9pZCBpb21tdV9jaGVja19ldmVudF9sb2coc3RydWN0IGFtZF9pb21tdSAqaW9tbXUp CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKIH0KIAor LyoKKyAqIFhYWCBPcmlnaW5hbGx5IHRoaXMgZnVuY3Rpb24gY2FsbHMgKGRlYWQpIGd1ZXN0X2lv bW11IGNvZGUuIEl0IGRvZXMKKyAqIG5vdGhpbmcgb3RoZXIgdGhhbiB6ZXJvJ2luZyB0aGUgZW50 cnkgKGFuZCBoYW5kbGluZyBlcnJhdHVtKS4gVGhpcworICogaXMgd2hhdCBpcyBsb29rcyBsaWtl IHdoZW4gYWxsIGRlYWQgY29kZSBpcyBkZWxldGVkLgorICovCiB2b2lkIHBhcnNlX3Bwcl9sb2df ZW50cnkoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUzMiBlbnRyeVtdKQogewogCi0gICAgdTE2 IGRldmljZV9pZDsKLSAgICB1OCBidXMsIGRldmZuLCBjb2RlOwotICAgIHN0cnVjdCBwY2lfZGV2 ICpwZGV2OworICAgIHU4IGNvZGU7CiAgICAgaW50IGNvdW50ID0gMDsKIAogICAgIGNvZGUgPSBn ZXRfZmllbGRfZnJvbV9yZWdfdTMyKGVudHJ5WzFdLCBJT01NVV9QUFJfTE9HX0NPREVfTUFTSywK QEAgLTY2OCwxOCArNjcxLDYgQEAgdm9pZCBwYXJzZV9wcHJfbG9nX2VudHJ5KHN0cnVjdCBhbWRf aW9tbXUgKmlvbW11LCB1MzIgZW50cnlbXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSU9NTVVfUFBSX0xPR19DT0RFX1NISUZUKTsKICAgICB9CiAKLSAgICAvKiBoZXJl IGRldmljZV9pZCBpcyBwaHlzaWNhbCB2YWx1ZSAqLwotICAgIGRldmljZV9pZCA9IGlvbW11X2dl dF9kZXZpZF9mcm9tX2NtZChlbnRyeVswXSk7Ci0gICAgYnVzID0gUENJX0JVUyhkZXZpY2VfaWQp OwotICAgIGRldmZuID0gUENJX0RFVkZOMihkZXZpY2VfaWQpOwotCi0gICAgcGNpZGV2c19sb2Nr KCk7Ci0gICAgcGRldiA9IHBjaV9nZXRfcmVhbF9wZGV2KGlvbW11LT5zZWcsIGJ1cywgZGV2Zm4p OwotICAgIHBjaWRldnNfdW5sb2NrKCk7Ci0KLSAgICBpZiAoIHBkZXYgKQotICAgICAgICBndWVz dF9pb21tdV9hZGRfcHByX2xvZyhwZGV2LT5kb21haW4sIGVudHJ5KTsKLQogICAgIG1lbXNldChl bnRyeSwgMCwgSU9NTVVfUFBSX0xPR19FTlRSWV9TSVpFKTsKIH0KIApkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9hbWQtaW9tbXUuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvYW1kLWlv bW11LmgKaW5kZXggMDI3MTViNDgyYi4uMTAyNTE4YTg2NCAxMDA2NDQKLS0tIGEveGVuL2luY2x1 ZGUvYXNtLXg4Ni9hbWQtaW9tbXUuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2FtZC1pb21t dS5oCkBAIC0xMzQsNTcgKzEzNCw2IEBAIHN0cnVjdCBpdnJzX21hcHBpbmdzICpnZXRfaXZyc19t YXBwaW5ncyh1MTYgc2VnKTsKIGludCBpdGVyYXRlX2l2cnNfbWFwcGluZ3MoaW50ICgqKSh1MTYg c2VnLCBzdHJ1Y3QgaXZyc19tYXBwaW5ncyAqKSk7CiBpbnQgaXRlcmF0ZV9pdnJzX2VudHJpZXMo aW50ICgqKSh1MTYgc2VnLCBzdHJ1Y3QgaXZyc19tYXBwaW5ncyAqKSk7CiAKLS8qIGlvbW11IHRh YmxlcyBpbiBndWVzdCBzcGFjZSAqLwotc3RydWN0IG1taW9fcmVnIHsKLSAgICB1aW50MzJfdCAg ICBsbzsKLSAgICB1aW50MzJfdCAgICBoaTsKLX07Ci0KLXN0cnVjdCBndWVzdF9kZXZfdGFibGUg ewotICAgIHN0cnVjdCBtbWlvX3JlZyAgICAgICAgIHJlZ19iYXNlOwotICAgIHVpbnQzMl90ICAg ICAgICAgICAgICAgIHNpemU7Ci19OwotCi1zdHJ1Y3QgZ3Vlc3RfYnVmZmVyIHsKLSAgICBzdHJ1 Y3QgbW1pb19yZWcgICAgICAgICByZWdfYmFzZTsKLSAgICBzdHJ1Y3QgbW1pb19yZWcgICAgICAg ICByZWdfdGFpbDsKLSAgICBzdHJ1Y3QgbW1pb19yZWcgICAgICAgICByZWdfaGVhZDsKLSAgICB1 aW50MzJfdCAgICAgICAgICAgICAgICBlbnRyaWVzOwotfTsKLQotc3RydWN0IGd1ZXN0X2lvbW11 X21zaSB7Ci0gICAgdWludDhfdCAgICAgICAgICAgICAgICAgdmVjdG9yOwotICAgIHVpbnQ4X3Qg ICAgICAgICAgICAgICAgIGRlc3Q7Ci0gICAgdWludDhfdCAgICAgICAgICAgICAgICAgZGVzdF9t b2RlOwotICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X21vZGU7Ci0gICAgdWlu dDhfdCAgICAgICAgICAgICAgICAgdHJpZ19tb2RlOwotfTsKLQotLyogdmlydHVhbCBJT01NVSBz dHJ1Y3R1cmUgKi8KLXN0cnVjdCBndWVzdF9pb21tdSB7Ci0KLSAgICBzdHJ1Y3QgZG9tYWluICAg ICAgICAgICpkb21haW47Ci0gICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKLSAgICBi b29sX3QgICAgICAgICAgICAgICAgICBlbmFibGVkOwotCi0gICAgc3RydWN0IGd1ZXN0X2Rldl90 YWJsZSAgZGV2X3RhYmxlOwotICAgIHN0cnVjdCBndWVzdF9idWZmZXIgICAgIGNtZF9idWZmZXI7 Ci0gICAgc3RydWN0IGd1ZXN0X2J1ZmZlciAgICAgZXZlbnRfbG9nOwotICAgIHN0cnVjdCBndWVz dF9idWZmZXIgICAgIHBwcl9sb2c7Ci0KLSAgICBzdHJ1Y3QgdGFza2xldCAgICAgICAgICBjbWRf YnVmZmVyX3Rhc2tsZXQ7Ci0KLSAgICB1aW50NjRfdCAgICAgICAgICAgICAgICBtbWlvX2Jhc2U7 ICAgICAgICAgICAgIC8qIE1NSU8gYmFzZSBhZGRyZXNzICovCi0KLSAgICAvKiBNTUlPIHJlZ3Mg Ki8KLSAgICBzdHJ1Y3QgbW1pb19yZWcgICAgICAgICByZWdfY3RybDsgICAgICAgICAgICAgIC8q IE1NSU8gb2Zmc2V0IDAwMThoICovCi0gICAgc3RydWN0IG1taW9fcmVnICAgICAgICAgcmVnX3N0 YXR1czsgICAgICAgICAgICAvKiBNTUlPIG9mZnNldCAyMDIwaCAqLwotICAgIHN0cnVjdCBtbWlv X3JlZyAgICAgICAgIHJlZ19leHRfZmVhdHVyZTsgICAgICAgLyogTU1JTyBvZmZzZXQgMDAzMGgg Ki8KLQotICAgIC8qIGd1ZXN0IGludGVycnVwdCBzZXR0aW5ncyAqLwotICAgIHN0cnVjdCBndWVz dF9pb21tdV9tc2kgIG1zaTsKLX07Ci0KIGV4dGVybiBib29sX3QgaW9tbXV2Ml9lbmFibGVkOwog CiAjZW5kaWYgLyogX0FTTV9YODZfNjRfQU1EX0lPTU1VX0ggKi8KZGlmZiAtLWdpdCBhL3hlbi9p bmNsdWRlL2FzbS14ODYvaHZtL3N2bS9hbWQtaW9tbXUtcHJvdG8uaCBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvaHZtL3N2bS9hbWQtaW9tbXUtcHJvdG8uaAppbmRleCA5OWJjMjFjN2IzLi45MTYzZGM5 MDM1IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0vYW1kLWlvbW11LXBy b3RvLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL2FtZC1pb21tdS1wcm90by5o CkBAIC0xMzAsMTQgKzEzMCw2IEBAIHZvaWQgYW1kX2lvbW11X3Jlc3VtZSh2b2lkKTsKIGludCBf X211c3RfY2hlY2sgYW1kX2lvbW11X3N1c3BlbmQodm9pZCk7CiB2b2lkIGFtZF9pb21tdV9jcmFz aF9zaHV0ZG93bih2b2lkKTsKIAotLyogZ3Vlc3QgaW9tbXUgc3VwcG9ydCAqLwotdm9pZCBhbWRf aW9tbXVfc2VuZF9ndWVzdF9jbWQoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUzMiBjbWRbXSk7 Ci12b2lkIGd1ZXN0X2lvbW11X2FkZF9wcHJfbG9nKHN0cnVjdCBkb21haW4gKmQsIHUzMiBlbnRy eVtdKTsKLXZvaWQgZ3Vlc3RfaW9tbXVfYWRkX2V2ZW50X2xvZyhzdHJ1Y3QgZG9tYWluICpkLCB1 MzIgZW50cnlbXSk7Ci1pbnQgZ3Vlc3RfaW9tbXVfaW5pdChzdHJ1Y3QgZG9tYWluKiBkKTsKLXZv aWQgZ3Vlc3RfaW9tbXVfZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkKTsKLWludCBndWVzdF9pb21t dV9zZXRfYmFzZShzdHJ1Y3QgZG9tYWluICpkLCB1aW50NjRfdCBiYXNlKTsKLQogc3RhdGljIGlu bGluZSB1MzIgZ2V0X2ZpZWxkX2Zyb21fcmVnX3UzMih1MzIgcmVnX3ZhbHVlLCB1MzIgbWFzaywg dTMyIHNoaWZ0KQogewogICAgIHUzMiBmaWVsZDsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2Fz bS14ODYvaW9tbXUuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaAppbmRleCAxNGFkMDQ4 OWE2Li44Y2I3YmVjMjZiIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2lvbW11LmgK KysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCkBAIC00MSw3ICs0MSw2IEBAIHN0cnVj dCBhcmNoX2lvbW11CiAgICAgLyogYW1kIGlvbW11IHN1cHBvcnQgKi8KICAgICBpbnQgcGFnaW5n X21vZGU7CiAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcm9vdF90YWJsZTsKLSAgICBzdHJ1Y3QgZ3Vl c3RfaW9tbXUgKmdfaW9tbXU7CiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGlvbW11X29wcyBp bnRlbF9pb21tdV9vcHM7Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz dGluZm8veGVuLWRldmVs