From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 7/7] x86/pagewalk: Re-implement the pagetable walker Date: Mon, 27 Feb 2017 14:03:18 +0000 Message-ID: <1488204198-23948-8-git-send-email-andrew.cooper3@citrix.com> References: <1488204198-23948-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1488204198-23948-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhlIGV4aXN0aW5nIHBhZ2V0YWJsZSB3YWxrZXIgaGFzIGNvbXBsaWNhdGVkIHJldHVybiBzZW1h bnRpY3MsIHdoaWNoIHNxdWVlemUKbXVsdGlwbGUgcGllY2VzIG9mIGluZm9ybWF0aW9uIGludG8g c2luZ2xlIGludGVnZXIuICBUaGlzIHdvdWxkIGJlIGZpbmUgaWYgdGhlCmluZm9ybWF0aW9uIGRp ZG4ndCBvdmVybGFwLCBidXQgaXQgZG9lcy4KClNwZWNpZmljYWxseSwgX1BBR0VfSU5WQUxJRF9C SVRTIGZvciAzLWxldmVsIGd1ZXN0cyBhbGlhcyBfUEFHRV9QQUdFRCBhbmQKX1BBR0VfU0hBUkVE LiAgQSBndWVzdCB3aGljaCBjb25zdHJ1Y3RzIGEgUFRFIHdpdGggYml0cyA1MiBvciA1MyBzZXQg KHRoZQpzdGFydCBvZiB0aGUgdXBwZXIgc29mdHdhcmUtYXZhaWxhYmxlIHJhbmdlKSB3aWxsIGNy ZWF0ZSBhIHZpcnR1YWwgYWRkcmVzcwp3aGljaCwgd2hlbiB3YWxrZWQgYnkgWGVuLCB0cmlja3Mg WGVuIGludG8gYmVsaWV2aW5nIHRoZSBmcmFtZSBpcyBwYWdlZCBvcgpzaGFyZWQuICBUaGlzIGJl aGF2aW91ciB3YXMgaW50cm9kdWNlZCBieSBYU0EtMTczIChjL3MgOGIxNzY0OCkuCgpJdCBpcyBh bHNvIGNvbXBsaWNhdGVkIHRvIHR1cm4gcmMgYmFjayBpbnRvIGEgbm9ybWFsIHBhZ2VmYXVsdCBl cnJvciBjb2RlLgpJbnN0ZWFkLCBjaGFuZ2UgdGhlIGNhbGxpbmcgc2VtYW50aWNzIHRvIHJldHVy biBhIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzLAphbmQgaGF2ZSB0aGUgZnVuY3Rpb24gYWNj dW11bGF0ZSBhIHJlYWwgcGFnZWZhdWx0IGVycm9yIGNvZGUgYXMgaXQgZ29lcwooaW5jbHVkaW5n IHN5bnRoZXRpYyBlcnJvciBjb2Rlcywgd2hpY2ggZG8gbm90IGFsaWFzIGhhcmR3YXJlIG9uZXMp LiAgVGhpcwpyZXF1aXJlcyBhbiBlcXVpdmFsZW50IGFkanVzdG1lbnQgdG8gbWFwX2RvbWFpbl9n Zm4oKS4KCklzc3VlcyBmaXhlZDoKICogMi1sZXZlbCBQU0UzNiBzdXBlcnBhZ2VzIG5vdyByZXR1 cm4gdGhlIGNvcnJlY3QgdHJhbnNsYXRpb24uCiAqIDItbGV2ZWwgTDIgc3VwZXJwYWdlcyB3aXRo b3V0IENSMC5QU0Ugbm93IHJldHVybiB0aGUgY29ycmVjdCB0cmFuc2xhdGlvbi4KICogU01FUCBu b3cgaW5oaWJpdHMgYSB1c2VyIGluc3RydWN0aW9uIGZldGNoIGV2ZW4gaWYgTlggaXNuJ3QgYWN0 aXZlLgogKiBTdXBlcnZpc29yIHdyaXRlcyB3aXRob3V0IENSMC5XUCBub3cgc2V0IHRoZSBsZWFm IGRpcnR5IGJpdC4KICogTDRlLl9QQUdFX0dMT0JBTCBpcyBzdHJpY3RseSByZXNlcnZlZCBvbiBB TUQuCiAqIDMtbGV2ZWwgbDMgZW50cmllcyBoYXZlIGFsbCByZXNlcnZlZCBiaXRzIGNoZWNrZWQu CiAqIDMtbGV2ZWwgZW50cmllcyBjYW4gbm8gbG9uZ2VyIGFsaWFzIFhlbidzIGlkZWEgb2YgcGFn ZWQgb3Igc2hhcmVkLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3Bl cjNAY2l0cml4LmNvbT4KLS0tCkNDOiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+CkND OiBUaW0gRGVlZ2FuIDx0aW1AeGVuLm9yZz4KQ0M6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5s YXBAZXUuY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvbW0vZ3Vlc3Rfd2Fsay5jICAgICAg fCA0NDggKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4 Ni9tbS9oYXAvZ3Vlc3Rfd2Fsay5jICB8ICAyMSArLQogeGVuL2FyY2gveDg2L21tL2hhcC9uZXN0 ZWRfZXB0LmMgIHwgICAyICstCiB4ZW4vYXJjaC94ODYvbW0vcDJtLmMgICAgICAgICAgICAgfCAg MTcgKy0KIHhlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGkuYyAgICB8ICAyNyArLS0KIHhlbi9p bmNsdWRlL2FzbS14ODYvZ3Vlc3RfcHQuaCAgICB8ICA2MyArKysrLS0KIHhlbi9pbmNsdWRlL2Fz bS14ODYvcDJtLmggICAgICAgICB8ICAgMiArLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmgg ICAgICAgIHwgICAzIC0KIHhlbi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmggICB8ICAgMiAr CiB4ZW4vaW5jbHVkZS9hc20teDg2L3g4Nl82NC9wYWdlLmggfCAgIDYgLQogMTAgZmlsZXMgY2hh bmdlZCwgMzAzIGluc2VydGlvbnMoKyksIDI4OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94 ZW4vYXJjaC94ODYvbW0vZ3Vlc3Rfd2Fsay5jIGIveGVuL2FyY2gveDg2L21tL2d1ZXN0X3dhbGsu YwppbmRleCA0ZjhkMGUzLi4wMWJjYjFkIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0vZ3Vl c3Rfd2Fsay5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9ndWVzdF93YWxrLmMKQEAgLTMyLDQ0ICsz Miw2IEBAIGFzbSgiLmZpbGUgXCIiIF9fT0JKRUNUX0ZJTEVfXyAiXCIiKTsKICNpbmNsdWRlIDxh c20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9ndWVzdF9wdC5oPgogCi1leHRlcm4gY29uc3QgdWlu dDMyX3QgZ3dfcGFnZV9mbGFnc1tdOwotI2lmIEdVRVNUX1BBR0lOR19MRVZFTFMgPT0gQ09ORklH X1BBR0lOR19MRVZFTFMKLWNvbnN0IHVpbnQzMl90IGd3X3BhZ2VfZmxhZ3NbXSA9IHsKLSAgICAv KiBJL0YgLSAgVXNyIFdyICovCi0gICAgLyogMCAgIDAgICAwICAgMCAqLyBfUEFHRV9QUkVTRU5U LAotICAgIC8qIDAgICAwICAgMCAgIDEgKi8gX1BBR0VfUFJFU0VOVHxfUEFHRV9SVywKLSAgICAv KiAwICAgMCAgIDEgICAwICovIF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUiwKLSAgICAvKiAwICAg MCAgIDEgICAxICovIF9QQUdFX1BSRVNFTlR8X1BBR0VfUld8X1BBR0VfVVNFUiwKLSAgICAvKiAw ICAgMSAgIDAgICAwICovIF9QQUdFX1BSRVNFTlQsCi0gICAgLyogMCAgIDEgICAwICAgMSAqLyBf UEFHRV9QUkVTRU5UfF9QQUdFX1JXLAotICAgIC8qIDAgICAxICAgMSAgIDAgKi8gX1BBR0VfUFJF U0VOVHxfUEFHRV9VU0VSLAotICAgIC8qIDAgICAxICAgMSAgIDEgKi8gX1BBR0VfUFJFU0VOVHxf UEFHRV9SV3xfUEFHRV9VU0VSLAotICAgIC8qIDEgICAwICAgMCAgIDAgKi8gX1BBR0VfUFJFU0VO VHxfUEFHRV9OWF9CSVQsCi0gICAgLyogMSAgIDAgICAwICAgMSAqLyBfUEFHRV9QUkVTRU5UfF9Q QUdFX1JXfF9QQUdFX05YX0JJVCwKLSAgICAvKiAxICAgMCAgIDEgICAwICovIF9QQUdFX1BSRVNF TlR8X1BBR0VfVVNFUnxfUEFHRV9OWF9CSVQsCi0gICAgLyogMSAgIDAgICAxICAgMSAqLyBfUEFH RV9QUkVTRU5UfF9QQUdFX1JXfF9QQUdFX1VTRVJ8X1BBR0VfTlhfQklULAotICAgIC8qIDEgICAx ICAgMCAgIDAgKi8gX1BBR0VfUFJFU0VOVHxfUEFHRV9OWF9CSVQsCi0gICAgLyogMSAgIDEgICAw ICAgMSAqLyBfUEFHRV9QUkVTRU5UfF9QQUdFX1JXfF9QQUdFX05YX0JJVCwKLSAgICAvKiAxICAg MSAgIDEgICAwICovIF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUnxfUEFHRV9OWF9CSVQsCi0gICAg LyogMSAgIDEgICAxICAgMSAqLyBfUEFHRV9QUkVTRU5UfF9QQUdFX1JXfF9QQUdFX1VTRVJ8X1BB R0VfTlhfQklULAotfTsKLSNlbmRpZgotCi0vKiBGbGFncyB0aGF0IGFyZSBuZWVkZWQgaW4gYSBw YWdldGFibGUgZW50cnksIHdpdGggdGhlIHNlbnNlIG9mIE5YIGludmVydGVkICovCi1zdGF0aWMg dWludDMyX3QgbWFuZGF0b3J5X2ZsYWdzKHN0cnVjdCB2Y3B1ICp2LCB1aW50MzJfdCBwZmVjKSAK LXsKLSAgICAvKiBEb24ndCBkZW1hbmQgbm90LU5YIGlmIHRoZSBDUFUgd291bGRuJ3QgZW5mb3Jj ZSBpdC4gKi8KLSAgICBpZiAoICFndWVzdF9zdXBwb3J0c19ueCh2KSApCi0gICAgICAgIHBmZWMg Jj0gflBGRUNfaW5zbl9mZXRjaDsKLQotICAgIC8qIERvbid0IGRlbWFuZCBSL1cgaWYgdGhlIENQ VSB3b3VsZG4ndCBlbmZvcmNlIGl0LiAqLwotICAgIGlmICggaXNfaHZtX3ZjcHUodikgJiYgdW5s aWtlbHkoIWh2bV93cF9lbmFibGVkKHYpKSAKLSAgICAgICAgICYmICEocGZlYyAmIFBGRUNfdXNl cl9tb2RlKSApCi0gICAgICAgIHBmZWMgJj0gflBGRUNfd3JpdGVfYWNjZXNzOwotCi0gICAgcmV0 dXJuIGd3X3BhZ2VfZmxhZ3NbKHBmZWMgJiAweDFmKSA+PiAxXSB8IF9QQUdFX0lOVkFMSURfQklU UzsKLX0KLQogLyogTW9kaWZ5IGEgZ3Vlc3QgcGFnZXRhYmxlIGVudHJ5IHRvIHNldCB0aGUgQWNj ZXNzZWQgYW5kIERpcnR5IGJpdHMuCiAgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIGl0IGFjdHVhbGx5 IHdyaXRlcyB0byBndWVzdCBtZW1vcnkuICovCiBzdGF0aWMgdWludDMyX3Qgc2V0X2FkX2JpdHMo dm9pZCAqZ3Vlc3RfcCwgdm9pZCAqd2Fsa19wLCBpbnQgc2V0X2RpcnR5KQpAQCAtOTAsNjIgKzUy LDMzIEBAIHN0YXRpYyB1aW50MzJfdCBzZXRfYWRfYml0cyh2b2lkICpndWVzdF9wLCB2b2lkICp3 YWxrX3AsIGludCBzZXRfZGlydHkpCiAgICAgcmV0dXJuIDA7CiB9CiAKLSNpZiBHVUVTVF9QQUdJ TkdfTEVWRUxTID49IDQKLXN0YXRpYyBib29sX3QgcGtleV9mYXVsdChzdHJ1Y3QgdmNwdSAqdmNw dSwgdWludDMyX3QgcGZlYywKLSAgICAgICAgdWludDMyX3QgcHRlX2ZsYWdzLCB1aW50MzJfdCBw dGVfcGtleSkKLXsKLSAgICB1aW50MzJfdCBwa3J1OwotCi0gICAgLyogV2hlbiBwYWdlIGlzbid0 IHByZXNlbnQsICBQS0VZIGlzbid0IGNoZWNrZWQuICovCi0gICAgaWYgKCAhKHBmZWMgJiBQRkVD X3BhZ2VfcHJlc2VudCkgfHwgaXNfcHZfdmNwdSh2Y3B1KSApCi0gICAgICAgIHJldHVybiAwOwot Ci0gICAgLyoKLSAgICAgKiBQS1U6ICBhZGRpdGlvbmFsIG1lY2hhbmlzbSBieSB3aGljaCB0aGUg cGFnaW5nIGNvbnRyb2xzCi0gICAgICogYWNjZXNzIHRvIHVzZXItbW9kZSBhZGRyZXNzZXMgYmFz ZWQgb24gdGhlIHZhbHVlIGluIHRoZQotICAgICAqIFBLUlUgcmVnaXN0ZXIuIEEgZmF1bHQgaXMg Y29uc2lkZXJlZCBhcyBhIFBLVSB2aW9sYXRpb24gaWYgYWxsCi0gICAgICogb2YgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIGFyZSB0cnVlOgotICAgICAqIDEuQ1I0X1BLRT0xLgotICAgICAqIDIu RUZFUl9MTUE9MS4KLSAgICAgKiAzLlBhZ2UgaXMgcHJlc2VudCB3aXRoIG5vIHJlc2VydmVkIGJp dCB2aW9sYXRpb25zLgotICAgICAqIDQuVGhlIGFjY2VzcyBpcyBub3QgYW4gaW5zdHJ1Y3Rpb24g ZmV0Y2guCi0gICAgICogNS5UaGUgYWNjZXNzIGlzIHRvIGEgdXNlciBwYWdlLgotICAgICAqIDYu UEtSVS5BRD0xIG9yCi0gICAgICogICAgICB0aGUgYWNjZXNzIGlzIGEgZGF0YSB3cml0ZSBhbmQg UEtSVS5XRD0xIGFuZAotICAgICAqICAgICAgICAgIGVpdGhlciBDUjAuV1A9MSBvciBpdCBpcyBh IHVzZXIgYWNjZXNzLgotICAgICAqLwotICAgIGlmICggIWh2bV9wa3VfZW5hYmxlZCh2Y3B1KSB8 fAotICAgICAgICAgIWh2bV9sb25nX21vZGVfZW5hYmxlZCh2Y3B1KSB8fAotICAgICAgICAgKHBm ZWMgJiBQRkVDX3Jlc2VydmVkX2JpdCkgfHwKLSAgICAgICAgIChwZmVjICYgUEZFQ19pbnNuX2Zl dGNoKSB8fAotICAgICAgICAgIShwdGVfZmxhZ3MgJiBfUEFHRV9VU0VSKSApCi0gICAgICAgIHJl dHVybiAwOwotCi0gICAgcGtydSA9IHJlYWRfcGtydSgpOwotICAgIGlmICggdW5saWtlbHkocGty dSkgKQotICAgIHsKLSAgICAgICAgYm9vbF90IHBrcnVfYWQgPSByZWFkX3BrcnVfYWQocGtydSwg cHRlX3BrZXkpOwotICAgICAgICBib29sX3QgcGtydV93ZCA9IHJlYWRfcGtydV93ZChwa3J1LCBw dGVfcGtleSk7Ci0KLSAgICAgICAgLyogQ29uZGl0aW9uIDYgKi8KLSAgICAgICAgaWYgKCBwa3J1 X2FkIHx8Ci0gICAgICAgICAgICAgKHBrcnVfd2QgJiYgKHBmZWMgJiBQRkVDX3dyaXRlX2FjY2Vz cykgJiYKLSAgICAgICAgICAgICAgKGh2bV93cF9lbmFibGVkKHZjcHUpIHx8IChwZmVjICYgUEZF Q191c2VyX21vZGUpKSkgKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0 dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogV2FsayB0aGUgZ3Vlc3QgcGFnZXRhYmxlcywgYWZ0ZXIg dGhlIG1hbm5lciBvZiBhIGhhcmR3YXJlIHdhbGtlci4gKi8KLS8qIEJlY2F1c2UgdGhlIHdhbGsg aXMgZXNzZW50aWFsbHkgcmFuZG9tLCBpdCBjYW4gY2F1c2UgYSBkZWFkbG9jayAKLSAqIHdhcm5p bmcgaW4gdGhlIHAybSBsb2NraW5nIGNvZGUuIEhpZ2hseSB1bmxpa2VseSB0aGlzIGlzIGFuIGFj dHVhbAotICogZGVhZGxvY2ssIGJlY2F1c2Ugd2hvIHdvdWxkIHdhbGsgcGFnZSB0YWJsZSBpbiB0 aGUgb3Bwb3NpdGUgb3JkZXI/ICovCi11aW50MzJfdAorLyoKKyAqIFdhbGsgdGhlIGd1ZXN0IHBh Z2V0YWJsZXMsIGFmdGVyIHRoZSBtYW5uZXIgb2YgYSBoYXJkd2FyZSB3YWxrZXIuCisgKgorICog VGhpcyBpcyBhIGNvbmRlbnNpbmcgb2YgdGhlICdQYWdpbmcnIGNoYXB0ZXJzIGZyb20gSW50ZWwg YW5kIEFNRCBzb2Z0d2FyZQorICogbWFudWFscy4gIFBsZWFzZSByZWZlciBjbG9zZWx5IHRvIHRo ZW0uCisgKgorICogQSBwYWdldGFibGUgd2FsayBjb25zaXN0cyBvZiB0d28gcGFydHM6CisgKiAg IDEpIHRvIGZpbmQgd2hldGhlciBhIHRyYW5zbGF0aW9uIGV4aXN0cywgYW5kCisgKiAgIDIpIGlm IGEgdHJhbnNsYXRpb24gZG9lcyBleGlzdCwgdG8gY2hlY2sgd2hldGhlciB0aGUgdHJhbnNsYXRp b24ncyBhY2Nlc3MKKyAqICAgICAgcmlnaHRzIHBlcm1pdCB0aGUgYWNjZXNzLgorICoKKyAqIEEg dHJhbnNsYXRpb24gaXMgZm91bmQgYnkgZm9sbG93aW5nIHRoZSBwYWdldGFibGUgc3RydWN0dXJl IChzdGFydGluZyBhdAorICogJWNyMykgdG8gYSBsZWFmIGVudHJ5IChhbiBMMSBQVEUsIG9yIGEg aGlnaGVyIGxldmVsIGVudHJ5IHdpdGggUFNFIHNldCkKKyAqIHdoaWNoIGlkZW50aWZpZXMgdGhl IHBoeXNpY2FsIGRlc3RpbmF0aW9uIG9mIHRoZSBhY2Nlc3MuCisgKgorICogQSB0cmFuc2xhdGlv biBmcm9tIG9uZSBsZXZlbCB0byB0aGUgbmV4dCBleGlzdHMgaWYgdGhlIFBURSBpcyBib3RoIHBy ZXNlbnQKKyAqIGFuZCBoYXMgbm8gcmVzZXJ2ZWQgYml0cyBzZXQuICBJZiB0aGUgcGFnZXdhbGsg Y291bnRlcnMgYSBzaXR1YXRpb24gd2hlcmUgYQorICogdHJhbnNsYXRpb24gZG9lcyBub3QgZXhp c3QsIHRoZSB3YWxrIHN0b3BzIGF0IHRoYXQgcG9pbnQuCisgKgorICogVGhlIGFjY2VzcyByaWdo dHMgKE5YLCBVc2VyLCBSVyBiaXRzKSBhcmUgY29sbGVjdGVkIGFzIHRoZSB3YWxrIHByb2dyZXNz ZXMuCisgKiBJZiBhIHRyYW5zbGF0aW9uIGV4aXN0cywgdGhlIGFjY3VtdWxhdGVkIGFjY2VzcyBy aWdodHMgYXJlIGNvbXBhcmVkIHRvIHRoZQorICogcmVxdWVzdGVkIHdhbGssIHRvIHNlZSB3aGV0 aGVyIHRoZSBhY2Nlc3MgaXMgcGVybWl0dGVkLgorICovCitib29sCiBndWVzdF93YWxrX3RhYmxl cyhzdHJ1Y3QgdmNwdSAqdiwgc3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgdmEsIHdhbGtfdCAqZ3csIAotICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgcGZlYywgbWZuX3QgdG9wX21mbiwgdm9pZCAqdG9wX21hcCkKKyAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IHdhbGssIG1mbl90IHRvcF9tZm4sIHZvaWQgKnRvcF9tYXApCiB7CiAgICAg c3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKICAgICBwMm1fdHlwZV90IHAybXQ7CkBAIC0x NTUsNjQgKzg4LDQ0IEBAIGd1ZXN0X3dhbGtfdGFibGVzKHN0cnVjdCB2Y3B1ICp2LCBzdHJ1Y3Qg cDJtX2RvbWFpbiAqcDJtLAogICAgIGd1ZXN0X2wzZV90ICpsM3AgPSBOVUxMOwogICAgIGd1ZXN0 X2w0ZV90ICpsNHA7CiAjZW5kaWYKLSAgICB1bnNpZ25lZCBpbnQgcGtleTsKLSAgICB1aW50MzJf dCBnZmxhZ3MsIG1mbGFncywgaWZsYWdzLCByYyA9IDA7Ci0gICAgYm9vbF90IHNtZXAgPSAwLCBz bWFwID0gMDsKKyAgICB1aW50MzJfdCBnZmxhZ3MsIHJjOwogICAgIGJvb2xfdCBwc2UxRyA9IDAs IHBzZTJNID0gMDsKICAgICBwMm1fcXVlcnlfdCBxdCA9IFAyTV9BTExPQyB8IFAyTV9VTlNIQVJF OwogCi0gICAgLyogT25seSBpbXBsaWNpdCBzdXBlcnZpc29yIGRhdGEgYWNjZXNzZXMgZXhpc3Qu ICovCi0gICAgQVNTRVJUKCEocGZlYyAmIFBGRUNfaW1wbGljaXQpIHx8Ci0gICAgICAgICAgICEo cGZlYyAmIChQRkVDX2luc25fZmV0Y2h8UEZFQ191c2VyX21vZGUpKSk7CisjZGVmaW5lIEFSX0FD Q1VNX0FORCAoX1BBR0VfVVNFUiB8IF9QQUdFX1JXKQorI2RlZmluZSBBUl9BQ0NVTV9PUiAgKF9Q QUdFX05YX0JJVCkKKyAgICAvKiBTdGFydCB3aXRoIGFsbCBBTkQgYml0cyBzZXQsIGFsbCBPUiBi aXRzIGNsZWFyLiAqLworICAgIHVpbnQzMl90IGFyLCBhcl9hbmQgPSB+MHUsIGFyX29yID0gMDsK IAotICAgIHBlcmZjX2luY3IoZ3Vlc3Rfd2Fsayk7Ci0gICAgbWVtc2V0KGd3LCAwLCBzaXplb2Yo Kmd3KSk7Ci0gICAgZ3ctPnZhID0gdmE7Ci0KLSAgICAvKiBNYW5kYXRvcnkgYml0cyB0aGF0IG11 c3QgYmUgc2V0IGluIGV2ZXJ5IGVudHJ5LiAgV2UgaW52ZXJ0IE5YIGFuZAotICAgICAqIHRoZSBp bnZhbGlkIGJpdHMsIHRvIGNhbGN1bGF0ZSBhcyBpZiB0aGVyZSB3ZXJlIGFuICJYIiBiaXQgdGhh dAotICAgICAqIGFsbG93ZWQgYWNjZXNzLiAgV2Ugd2lsbCBhY2N1bXVsYXRlLCBpbiByYywgdGhl IHNldCBvZiBmbGFncyB0aGF0Ci0gICAgICogYXJlIG1pc3NpbmcvdW53YW50ZWQuICovCi0gICAg bWZsYWdzID0gbWFuZGF0b3J5X2ZsYWdzKHYsIHBmZWMpOwotICAgIGlmbGFncyA9IChfUEFHRV9O WF9CSVQgfCBfUEFHRV9JTlZBTElEX0JJVFMpOworICAgIGJvb2wgd2Fsa19vayA9IGZhbHNlOwog Ci0gICAgaWYgKCBpc19odm1fZG9tYWluKGQpICYmICEocGZlYyAmIFBGRUNfdXNlcl9tb2RlKSAp Ci0gICAgewotICAgICAgICBjb25zdCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyA9IGd1ZXN0 X2NwdV91c2VyX3JlZ3MoKTsKKyAgICAvKgorICAgICAqIFRPRE8gLSBXZSBzaG91bGQgQVNTRVJU KCkgdGhhdCBvbmx5IHRoZSBmb2xsb3dpbmcgYml0cyBhcmUgc2V0IGFzCisgICAgICogaW5wdXRz IHRvIGEgZ3Vlc3Qgd2FsaywgYnV0IGEgd2hvbGUgbG9hZCBvZiBjb2RlIGN1cnJlbnRseSBwYXNz ZXMgaW4KKyAgICAgKiBvdGhlciBQRkVDXyBjb25zdGFudHMuCisgICAgICovCisgICAgd2FsayAm PSAoUEZFQ19pbXBsaWNpdCB8IFBGRUNfaW5zbl9mZXRjaCB8IFBGRUNfdXNlcl9tb2RlIHwgUEZF Q193cml0ZV9hY2Nlc3MpOwogCi0gICAgICAgIC8qIFNNRVA6IGtlcm5lbC1tb2RlIGluc3RydWN0 aW9uIGZldGNoZXMgZnJvbSB1c2VyLW1vZGUgbWFwcGluZ3MKLSAgICAgICAgICogc2hvdWxkIGZh dWx0LiAgVW5saWtlIE5YIG9yIGludmFsaWQgYml0cywgd2UncmUgbG9va2luZyBmb3IgX2FsbF8K LSAgICAgICAgICogZW50cmllcyBpbiB0aGUgd2FsayB0byBoYXZlIF9QQUdFX1VTRVIgc2V0LCBz byB3ZSBuZWVkIHRvIGRvIHRoZQotICAgICAgICAgKiB3aG9sZSB3YWxrIGFzIGlmIGl0IHdlcmUg YSB1c2VyLW1vZGUgb25lIGFuZCB0aGVuIGludmVydCB0aGUgYW5zd2VyLiAqLwotICAgICAgICBz bWVwID0gIGh2bV9zbWVwX2VuYWJsZWQodikgJiYgKHBmZWMgJiBQRkVDX2luc25fZmV0Y2gpOwor ICAgIC8qIE9ubHkgaW1wbGljaXQgc3VwZXJ2aXNvciBkYXRhIGFjY2Vzc2VzIGV4aXN0LiAqLwor ICAgIEFTU0VSVCghKHdhbGsgJiBQRkVDX2ltcGxpY2l0KSB8fAorICAgICAgICAgICAhKHdhbGsg JiAoUEZFQ19pbnNuX2ZldGNofFBGRUNfdXNlcl9tb2RlKSkpOwogCi0gICAgICAgIHN3aXRjaCAo IHYtPmFyY2guc21hcF9jaGVja19wb2xpY3kgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgU01B UF9DSEVDS19IT05PUl9DUExfQUM6Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogU01B UDoga2VybmVsLW1vZGUgZGF0YSBhY2Nlc3NlcyBmcm9tIHVzZXItbW9kZSBtYXBwaW5ncwotICAg ICAgICAgICAgICogc2hvdWxkIGZhdWx0LgotICAgICAgICAgICAgICogQSBmYXVsdCBpcyBjb25z aWRlcmVkIGFzIGEgU01BUCB2aW9sYXRpb24gaWYgdGhlIGZvbGxvd2luZwotICAgICAgICAgICAg ICogY29uZGl0aW9ucyBjb21lIHRydWU6Ci0gICAgICAgICAgICAgKiAgIC0gWDg2X0NSNF9TTUFQ IGlzIHNldCBpbiBDUjQKLSAgICAgICAgICAgICAqICAgLSBBIHVzZXIgcGFnZSBpcyBhY2Nlc3Nl ZAotICAgICAgICAgICAgICogICAtIENQTCA9IDMgb3IgWDg2X0VGTEFHU19BQyBpcyBjbGVhcgot ICAgICAgICAgICAgICogICAtIFBhZ2UgZmF1bHQgaW4ga2VybmVsIG1vZGUKLSAgICAgICAgICAg ICAqLwotICAgICAgICAgICAgc21hcCA9IGh2bV9zbWFwX2VuYWJsZWQodikgJiYKLSAgICAgICAg ICAgICAgICAgICAoKGh2bV9nZXRfY3BsKHYpID09IDMpIHx8ICEocmVncy0+X2VmbGFncyAmIFg4 Nl9FRkxBR1NfQUMpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNNQVBfQ0hF Q0tfRU5BQkxFRDoKLSAgICAgICAgICAgIHNtYXAgPSBodm1fc21hcF9lbmFibGVkKHYpOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQodi0+ YXJjaC5zbWFwX2NoZWNrX3BvbGljeSA9PSBTTUFQX0NIRUNLX0RJU0FCTEVEKTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIC8qCisgICAgICogUEZFQ19pbnNuX2Zl dGNoIGlzIG9ubHkgdXNlZCBhcyBhbiBpbnB1dCB0byBwYWdldGFibGUgd2Fsa2luZyBpZiBOWCBv cgorICAgICAqIFNNRVAgYXJlIGVuYWJsZWQuICBPdGhlcndpc2UsIGluc3RydWN0aW9uIGZldGNo ZXMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlCisgICAgICogZnJvbSBkYXRhIHJlYWRzLgorICAgICAq CisgICAgICogVGhpcyBwcm9wZXJ0eSBjYW4gYmUgZGVtb25zdHJhdGVkIG9uIHJlYWwgaGFyZHdh cmUgYnkgaGF2aW5nIE5YIGFuZAorICAgICAqIFNNRVAgaW5hY3RpdmUsIGJ1dCBTTUFQIGFjdGl2 ZSwgYW5kIG9ic2VydmluZyB0aGF0IEVGTEFHUy5BQyBkZXRlcm1pbmVzCisgICAgICogd2hldGhl ciBhIHBhZ2VmYXVsdCBvY2N1cmVzIGZvciBzdXBlcnZpc29yIGV4ZWN1dGlvbiBvbiB1c2VyIG1h cHBpbmdzLgorICAgICAqLworICAgIGlmICggIShndWVzdF9zdXBwb3J0c19ueCh2KSB8fCBndWVz dF9zbWVwX2VuYWJsZWQodikpICkKKyAgICAgICAgd2FsayAmPSB+UEZFQ19pbnNuX2ZldGNoOwog Ci0gICAgaWYgKCBzbWVwIHx8IHNtYXAgKQotICAgICAgICBtZmxhZ3MgfD0gX1BBR0VfVVNFUjsK KyAgICBwZXJmY19pbmNyKGd1ZXN0X3dhbGspOworICAgIG1lbXNldChndywgMCwgc2l6ZW9mKCpn dykpOworICAgIGd3LT52YSA9IHZhOworICAgIGd3LT5wZmVjID0gd2FsayAmIChQRkVDX2luc25f ZmV0Y2ggfCBQRkVDX3VzZXJfbW9kZSB8IFBGRUNfd3JpdGVfYWNjZXNzKTsKIAogI2lmIEdVRVNU X1BBR0lOR19MRVZFTFMgPj0gMyAvKiBQQUUgb3IgNjQuLi4gKi8KICNpZiBHVUVTVF9QQUdJTkdf TEVWRUxTID49IDQgLyogNjQtYml0IG9ubHkuLi4gKi8KQEAgLTIyMSwxNyArMTM0LDIwIEBAIGd1 ZXN0X3dhbGtfdGFibGVzKHN0cnVjdCB2Y3B1ICp2LCBzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLAog ICAgIGd3LT5sNG1mbiA9IHRvcF9tZm47CiAgICAgbDRwID0gKGd1ZXN0X2w0ZV90ICopIHRvcF9t YXA7CiAgICAgZ3ctPmw0ZSA9IGw0cFtndWVzdF9sNF90YWJsZV9vZmZzZXQodmEpXTsKLSAgICBn ZmxhZ3MgPSBndWVzdF9sNGVfZ2V0X2ZsYWdzKGd3LT5sNGUpIF4gaWZsYWdzOwotICAgIGlmICgg IShnZmxhZ3MgJiBfUEFHRV9QUkVTRU5UKSApIHsKLSAgICAgICAgcmMgfD0gX1BBR0VfUFJFU0VO VDsKKyAgICBnZmxhZ3MgPSBndWVzdF9sNGVfZ2V0X2ZsYWdzKGd3LT5sNGUpOworICAgIGlmICgg IShnZmxhZ3MgJiBfUEFHRV9QUkVTRU5UKSApCiAgICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAg ICBpZiAoIGdmbGFncyAmIF9QQUdFX1BTRSApCisKKyAgICAvKiBDaGVjayBmb3IgcmVzZXJ2ZWQg Yml0cy4gKi8KKyAgICBpZiAoIGd1ZXN0X2w0ZV9yc3ZkX2JpdHModiwgZ3ctPmw0ZSkgKQogICAg IHsKLSAgICAgICAgcmMgfD0gX1BBR0VfUFNFIHwgX1BBR0VfSU5WQUxJRF9CSVQ7CisgICAgICAg IGd3LT5wZmVjIHw9IFBGRUNfcmVzZXJ2ZWRfYml0IHwgUEZFQ19wYWdlX3ByZXNlbnQ7CiAgICAg ICAgIGdvdG8gb3V0OwogICAgIH0KLSAgICByYyB8PSAoKGdmbGFncyAmIG1mbGFncykgXiBtZmxh Z3MpOworCisgICAgLyogQWNjdW11bGF0ZSBsNGUgYWNjZXNzIHJpZ2h0cy4gKi8KKyAgICBhcl9h bmQgJj0gZ2ZsYWdzOworICAgIGFyX29yICB8PSBnZmxhZ3M7CiAKICAgICAvKiBNYXAgdGhlIGwz IHRhYmxlICovCiAgICAgbDNwID0gbWFwX2RvbWFpbl9nZm4ocDJtLCAKQEAgLTI0MSwxNyArMTU3 LDI4IEBAIGd1ZXN0X3dhbGtfdGFibGVzKHN0cnVjdCB2Y3B1ICp2LCBzdHJ1Y3QgcDJtX2RvbWFp biAqcDJtLAogICAgICAgICAgICAgICAgICAgICAgICAgIHF0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICZyYyk7IAogICAgIGlmKGwzcCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgZ3ctPnBm ZWMgfD0gcmMgJiBQRkVDX3N5bnRoX21hc2s7CiAgICAgICAgIGdvdG8gb3V0OworICAgIH0KKwog ICAgIC8qIEdldCB0aGUgbDNlIGFuZCBjaGVjayBpdHMgZmxhZ3MqLwogICAgIGd3LT5sM2UgPSBs M3BbZ3Vlc3RfbDNfdGFibGVfb2Zmc2V0KHZhKV07Ci0gICAgcGtleSA9IGd1ZXN0X2wzZV9nZXRf cGtleShndy0+bDNlKTsKLSAgICBnZmxhZ3MgPSBndWVzdF9sM2VfZ2V0X2ZsYWdzKGd3LT5sM2Up IF4gaWZsYWdzOwotICAgIGlmICggIShnZmxhZ3MgJiBfUEFHRV9QUkVTRU5UKSApIHsKLSAgICAg ICAgcmMgfD0gX1BBR0VfUFJFU0VOVDsKKyAgICBnZmxhZ3MgPSBndWVzdF9sM2VfZ2V0X2ZsYWdz KGd3LT5sM2UpOworICAgIGlmICggIShnZmxhZ3MgJiBfUEFHRV9QUkVTRU5UKSApCisgICAgICAg IGdvdG8gb3V0OworCisgICAgLyogQ2hlY2sgZm9yIHJlc2VydmVkIGJpdHMsIGluY2x1ZGluZyBw b3NzaWJseSBfUEFHRV9QU0UuICovCisgICAgaWYgKCBndWVzdF9sM2VfcnN2ZF9iaXRzKHYsIGd3 LT5sM2UpICkKKyAgICB7CisgICAgICAgIGd3LT5wZmVjIHw9IFBGRUNfcmVzZXJ2ZWRfYml0IHwg UEZFQ19wYWdlX3ByZXNlbnQ7CiAgICAgICAgIGdvdG8gb3V0OwogICAgIH0KLSAgICByYyB8PSAo KGdmbGFncyAmIG1mbGFncykgXiBtZmxhZ3MpOwogICAgIAorICAgIC8qIEFjY3VtdWxhdGUgbDNl IGFjY2VzcyByaWdodHMuICovCisgICAgYXJfYW5kICY9IGdmbGFnczsKKyAgICBhcl9vciAgfD0g Z2ZsYWdzOworCiAgICAgcHNlMUcgPSAhIShnZmxhZ3MgJiBfUEFHRV9QU0UpOwogCiAgICAgaWYg KCBwc2UxRyApCkBAIC0yNzIsMjYgKzE5OSwyNSBAQCBndWVzdF93YWxrX3RhYmxlcyhzdHJ1Y3Qg dmNwdSAqdiwgc3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICAgICAgICAgIC8qIF9QQUdFX1BT RV9QQVQgbm90IHNldDogcmVtb3ZlIF9QQUdFX1BBVCBmcm9tIGZsYWdzLiAqLwogICAgICAgICAg ICAgZmxhZ3MgJj0gfl9QQUdFX1BBVDsKIAotICAgICAgICBpZiAoICFndWVzdF9zdXBwb3J0c18x R19zdXBlcnBhZ2VzKHYpICkKLSAgICAgICAgICAgIHJjIHw9IF9QQUdFX1BTRSB8IF9QQUdFX0lO VkFMSURfQklUOwotICAgICAgICBpZiAoIGdmbl94KHN0YXJ0KSAmIEdVRVNUX0wzX0dGTl9NQVNL ICYgfjB4MSApCi0gICAgICAgICAgICByYyB8PSBfUEFHRV9JTlZBTElEX0JJVFM7Ci0KICAgICAg ICAgLyogSW5jcmVtZW50IHRoZSBwZm4gYnkgdGhlIHJpZ2h0IG51bWJlciBvZiA0ayBwYWdlcy4g Ki8KICAgICAgICAgc3RhcnQgPSBfZ2ZuKChnZm5feChzdGFydCkgJiB+R1VFU1RfTDNfR0ZOX01B U0spICsKICAgICAgICAgICAgICAgICAgICAgICgodmEgPj4gUEFHRV9TSElGVCkgJiBHVUVTVF9M M19HRk5fTUFTSykpOwogICAgICAgICBndy0+bDFlID0gZ3Vlc3RfbDFlX2Zyb21fZ2ZuKHN0YXJ0 LCBmbGFncyk7CiAgICAgICAgIGd3LT5sMm1mbiA9IGd3LT5sMW1mbiA9IElOVkFMSURfTUZOOwot ICAgICAgICBnb3RvIHNldF9hZDsKKyAgICAgICAgZ290byBsZWFmOwogICAgIH0KIAogI2Vsc2Ug LyogUEFFIG9ubHkuLi4gKi8KIAogICAgIC8qIEdldCB0aGUgbDNlIGFuZCBjaGVjayBpdHMgZmxh ZyAqLwogICAgIGd3LT5sM2UgPSAoKGd1ZXN0X2wzZV90ICopIHRvcF9tYXApW2d1ZXN0X2wzX3Rh YmxlX29mZnNldCh2YSldOwotICAgIGlmICggIShndWVzdF9sM2VfZ2V0X2ZsYWdzKGd3LT5sM2Up ICYgX1BBR0VfUFJFU0VOVCkgKSAKKyAgICBnZmxhZ3MgPSBndWVzdF9sM2VfZ2V0X2ZsYWdzKGd3 LT5sM2UpOworICAgIGlmICggIShnZmxhZ3MgJiBfUEFHRV9QUkVTRU5UKSApCisgICAgICAgIGdv dG8gb3V0OworCisgICAgaWYgKCBndWVzdF9sM2VfcnN2ZF9iaXRzKHYsIGd3LT5sM2UpICkKICAg ICB7Ci0gICAgICAgIHJjIHw9IF9QQUdFX1BSRVNFTlQ7CisgICAgICAgIGd3LT5wZmVjIHw9IFBG RUNfcmVzZXJ2ZWRfYml0IHwgUEZFQ19wYWdlX3ByZXNlbnQ7CiAgICAgICAgIGdvdG8gb3V0Owog ICAgIH0KIApAQCAtMzA1LDcgKzIzMSwxMSBAQCBndWVzdF93YWxrX3RhYmxlcyhzdHJ1Y3QgdmNw dSAqdiwgc3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICAgICAgICAgICAgICAgICAgICAgICBx dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAmcmMpOyAKICAgICBpZihsMnAgPT0gTlVMTCkK KyAgICB7CisgICAgICAgIGd3LT5wZmVjIHw9IHJjICYgUEZFQ19zeW50aF9tYXNrOwogICAgICAg ICBnb3RvIG91dDsKKyAgICB9CisKICAgICAvKiBHZXQgdGhlIGwyZSAqLwogICAgIGd3LT5sMmUg PSBsMnBbZ3Vlc3RfbDJfdGFibGVfb2Zmc2V0KHZhKV07CiAKQEAgLTMxOCwxNSArMjQ4LDMyIEBA IGd1ZXN0X3dhbGtfdGFibGVzKHN0cnVjdCB2Y3B1ICp2LCBzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJt LAogCiAjZW5kaWYgLyogQWxsIGxldmVscy4uLiAqLwogCi0gICAgcGtleSA9IGd1ZXN0X2wyZV9n ZXRfcGtleShndy0+bDJlKTsKLSAgICBnZmxhZ3MgPSBndWVzdF9sMmVfZ2V0X2ZsYWdzKGd3LT5s MmUpIF4gaWZsYWdzOwotICAgIGlmICggIShnZmxhZ3MgJiBfUEFHRV9QUkVTRU5UKSApIHsKLSAg ICAgICAgcmMgfD0gX1BBR0VfUFJFU0VOVDsKKyAgICAvKiBDaGVjayB0aGUgbDJlIGZsYWdzLiAq LworICAgIGdmbGFncyA9IGd1ZXN0X2wyZV9nZXRfZmxhZ3MoZ3ctPmwyZSk7CisgICAgaWYgKCAh KGdmbGFncyAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICAvKgor ICAgICAqIEluIDItbGV2ZWwgcGFnaW5nIHdpdGhvdXQgQ1IwLlBTRSwgdGhlcmUgYXJlIG5vIHJl c2VydmVkIGJpdHMsIGFuZCB0aGUKKyAgICAgKiBQQVQvUFNFIGJpdCBpcyBpZ25vcmVkLgorICAg ICAqLworICAgIGlmICggR1VFU1RfUEFHSU5HX0xFVkVMUyA9PSAyICYmICFndWVzdF9zdXBwb3J0 c19zdXBlcnBhZ2VzKHYpICkKKyAgICB7CisgICAgICAgIGd3LT5sMmUubDIgJj0gfl9QQUdFX1BT RTsKKyAgICAgICAgZ2ZsYWdzICY9IH5fUEFHRV9QU0U7CisgICAgfQorICAgIC8qIGVsc2UgY2hl Y2sgZm9yIHJlc2VydmVkIGJpdHMsIGluY2x1ZGluZyBwb3NzaWJseSBfUEFHRV9QU0UuICovCisg ICAgZWxzZSBpZiAoIGd1ZXN0X2wyZV9yc3ZkX2JpdHModiwgZ3ctPmwyZSkgKQorICAgIHsKKyAg ICAgICAgZ3ctPnBmZWMgfD0gUEZFQ19yZXNlcnZlZF9iaXQgfCBQRkVDX3BhZ2VfcHJlc2VudDsK ICAgICAgICAgZ290byBvdXQ7CiAgICAgfQotICAgIHJjIHw9ICgoZ2ZsYWdzICYgbWZsYWdzKSBe IG1mbGFncyk7CiAKLSAgICBwc2UyTSA9IChnZmxhZ3MgJiBfUEFHRV9QU0UpICYmIGd1ZXN0X3N1 cHBvcnRzX3N1cGVycGFnZXModik7IAorICAgIC8qIEFjY3VtdWxhdGUgbDJlIGFjY2VzcyByaWdo dHMuICovCisgICAgYXJfYW5kICY9IGdmbGFnczsKKyAgICBhcl9vciAgfD0gZ2ZsYWdzOworCisg ICAgcHNlMk0gPSAhIShnZmxhZ3MgJiBfUEFHRV9QU0UpOwogCiAgICAgaWYgKCBwc2UyTSApCiAg ICAgewpAQCAtMzM0LDcgKzI4MSwxMSBAQCBndWVzdF93YWxrX3RhYmxlcyhzdHJ1Y3QgdmNwdSAq diwgc3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICAgICAgICogbm8gZ3Vlc3QgbDFlLiAgV2Ug bWFrZSBvbmUgdXAgc28gdGhhdCB0aGUgcHJvcGFnYXRpb24gY29kZQogICAgICAgICAgKiBjYW4g Z2VuZXJhdGUgYSBzaGFkb3cgbDEgdGFibGUuICBTdGFydCB3aXRoIHRoZSBnZm4gb2YgdGhlIAog ICAgICAgICAgKiBmaXJzdCA0ay1wYWdlIG9mIHRoZSBzdXBlcnBhZ2UuICovCisjaWYgR1VFU1Rf UEFHSU5HX0xFVkVMUyA9PSAyCisgICAgICAgIGdmbl90IHN0YXJ0ID0gX2dmbih1bmZvbGRfcHNl MzYoZ3ctPmwyZS5sMikgPj4gUEFHRV9TSElGVCk7CisjZWxzZQogICAgICAgICBnZm5fdCBzdGFy dCA9IGd1ZXN0X2wyZV9nZXRfZ2ZuKGd3LT5sMmUpOworI2VuZGlmCiAgICAgICAgIC8qIEdyYW50 IGZ1bGwgYWNjZXNzIGluIHRoZSBsMWUsIHNpbmNlIGFsbCB0aGUgZ3Vlc3QgZW50cnkncyAKICAg ICAgICAgICogYWNjZXNzIGNvbnRyb2xzIGFyZSBlbmZvcmNlZCBpbiB0aGUgc2hhZG93IGwyZS4g Ki8KICAgICAgICAgaW50IGZsYWdzID0gKF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUnxfUEFHRV9S V3wKQEAgLTM0OCw3MCArMjk5LDEzNiBAQCBndWVzdF93YWxrX3RhYmxlcyhzdHJ1Y3QgdmNwdSAq diwgc3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICAgICAgICAgIC8qIF9QQUdFX1BTRV9QQVQg bm90IHNldDogcmVtb3ZlIF9QQUdFX1BBVCBmcm9tIGZsYWdzLiAqLwogICAgICAgICAgICAgZmxh Z3MgJj0gfl9QQUdFX1BBVDsKIAotICAgICAgICBpZiAoIGdmbl94KHN0YXJ0KSAmIEdVRVNUX0wy X0dGTl9NQVNLICYgfjB4MSApCi0gICAgICAgICAgICByYyB8PSBfUEFHRV9JTlZBTElEX0JJVFM7 Ci0KLSAgICAgICAgLyogSW5jcmVtZW50IHRoZSBwZm4gYnkgdGhlIHJpZ2h0IG51bWJlciBvZiA0 ayBwYWdlcy4gIAotICAgICAgICAgKiBNYXNrIG91dCBQQVQgYW5kIGludmFsaWQgYml0cy4gKi8K KyAgICAgICAgLyogSW5jcmVtZW50IHRoZSBwZm4gYnkgdGhlIHJpZ2h0IG51bWJlciBvZiA0ayBw YWdlcy4gKi8KICAgICAgICAgc3RhcnQgPSBfZ2ZuKChnZm5feChzdGFydCkgJiB+R1VFU1RfTDJf R0ZOX01BU0spICsKICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0X2wxX3RhYmxlX29mZnNldCh2 YSkpOworI2lmIEdVRVNUX1BBR0lOR19MRVZFTFMgPT0gMgorICAgICAgICAgLyogV2lkZXIgdGhh biAzMiBiaXRzIGlmIFBTRTM2IHN1cGVycGFnZS4gKi8KKyAgICAgICAgZ3ctPmVsMWUgPSAoZ2Zu X3goc3RhcnQpIDw8IFBBR0VfU0hJRlQpIHwgZmxhZ3M7CisjZWxzZQogICAgICAgICBndy0+bDFl ID0gZ3Vlc3RfbDFlX2Zyb21fZ2ZuKHN0YXJ0LCBmbGFncyk7CisjZW5kaWYKICAgICAgICAgZ3ct PmwxbWZuID0gSU5WQUxJRF9NRk47Ci0gICAgfSAKLSAgICBlbHNlIAorICAgICAgICBnb3RvIGxl YWY7CisgICAgfQorCisgICAgLyogTWFwIHRoZSBsMSB0YWJsZSAqLworICAgIGwxcCA9IG1hcF9k b21haW5fZ2ZuKHAybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBndWVzdF9sMmVfZ2V0X2dm bihndy0+bDJlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmZ3ctPmwxbWZuLAorICAgICAg ICAgICAgICAgICAgICAgICAgICZwMm10LAorICAgICAgICAgICAgICAgICAgICAgICAgIHF0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICZyYyk7CisgICAgaWYgKCBsMXAgPT0gTlVMTCApCiAg ICAgewotICAgICAgICAvKiBOb3QgYSBzdXBlcnBhZ2U6IGNhcnJ5IG9uIGFuZCBmaW5kIHRoZSBs MWUuICovCi0gICAgICAgIGwxcCA9IG1hcF9kb21haW5fZ2ZuKHAybSwgCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGd1ZXN0X2wyZV9nZXRfZ2ZuKGd3LT5sMmUpLCAKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmd3LT5sMW1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnAybXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmcmMpOwotICAgICAgICBpZihsMXAgPT0gTlVMTCkKKyAgICAgICAg Z3ctPnBmZWMgfD0gcmMgJiBQRkVDX3N5bnRoX21hc2s7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKyAgICBndy0+bDFlID0gbDFwW2d1ZXN0X2wxX3RhYmxlX29mZnNldCh2YSldOworICAgIGdm bGFncyA9IGd1ZXN0X2wxZV9nZXRfZmxhZ3MoZ3ctPmwxZSk7CisgICAgaWYgKCAhKGdmbGFncyAm IF9QQUdFX1BSRVNFTlQpICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICAvKiBDaGVjayBmb3Ig cmVzZXJ2ZWQgYml0cy4gKi8KKyAgICBpZiAoIGd1ZXN0X2wxZV9yc3ZkX2JpdHModiwgZ3ctPmwx ZSkgKQorICAgIHsKKyAgICAgICAgZ3ctPnBmZWMgfD0gUEZFQ19yZXNlcnZlZF9iaXQgfCBQRkVD X3BhZ2VfcHJlc2VudDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogQWNjdW11 bGF0ZSBsMWUgYWNjZXNzIHJpZ2h0cy4gKi8KKyAgICBhcl9hbmQgJj0gZ2ZsYWdzOworICAgIGFy X29yICB8PSBnZmxhZ3M7CisKKyBsZWFmOgorICAgIGd3LT5wZmVjIHw9IFBGRUNfcGFnZV9wcmVz ZW50OworCisgICAgLyoKKyAgICAgKiBUaGUgcGFnZXRhYmxlIHdhbGsgaGFzIHJldHVybmVkIGEg c3VjY2Vzc2Z1bCB0cmFuc2xhdGlvbi4gIE5vdyBjaGVjaworICAgICAqIGFjY2VzcyByaWdodHMg dG8gc2VlIHdoZXRoZXIgdGhlIGFjY2VzcyBzaG91bGQgc3VjY2VlZC4KKyAgICAgKi8KKyAgICBh ciA9IChhcl9hbmQgJiBBUl9BQ0NVTV9BTkQpIHwgKGFyX29yICYgQVJfQUNDVU1fT1IpOworCisg ICAgaWYgKCAod2FsayAmIFBGRUNfaW5zbl9mZXRjaCkgJiYgKGFyICYgX1BBR0VfTlhfQklUKSAp CisgICAgICAgIC8qIFJlcXVlc3RlZCBhbiBpbnN0cnVjdGlvbiBmZXRjaCBhbmQgZm91bmQgTlg/ IEZhaWwuICovCisgICAgICAgIGdvdG8gb3V0OworCisgICAgaWYgKCB3YWxrICYgUEZFQ191c2Vy X21vZGUgKSAvKiBSZXF1ZXN0ZWQgYSB1c2VyIGFjZXNzLiAqLworICAgIHsKKyAgICAgICAgaWYg KCAhKGFyICYgX1BBR0VfVVNFUikgKQorICAgICAgICAgICAgLyogR290IGEgc3VwZXJ2aXNvciB3 YWxrPyAgVW5jb25kaXRpb25hbCBmYWlsLiAqLwogICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAg ICAgIGd3LT5sMWUgPSBsMXBbZ3Vlc3RfbDFfdGFibGVfb2Zmc2V0KHZhKV07Ci0gICAgICAgIHBr ZXkgPSBndWVzdF9sMWVfZ2V0X3BrZXkoZ3ctPmwxZSk7Ci0gICAgICAgIGdmbGFncyA9IGd1ZXN0 X2wxZV9nZXRfZmxhZ3MoZ3ctPmwxZSkgXiBpZmxhZ3M7Ci0gICAgICAgIGlmICggIShnZmxhZ3Mg JiBfUEFHRV9QUkVTRU5UKSApIHsKLSAgICAgICAgICAgIHJjIHw9IF9QQUdFX1BSRVNFTlQ7CisK KyAgICAgICAgaWYgKCAod2FsayAmIFBGRUNfd3JpdGVfYWNjZXNzKSAmJiAhKGFyICYgX1BBR0Vf UlcpICkKKyAgICAgICAgICAgIC8qIFJlcXVlc3RlZCBhIHdyaXRlIGFuZCBvbmx5IGdvdCBhIHJl YWQ/IEZhaWwuICovCiAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgZWxzZSAvKiBS ZXF1ZXN0ZWQgYSBzdXBlcnZpc29yIGFjY2Vzcy4gKi8KKyAgICB7CisgICAgICAgIGlmICggYXIg JiBfUEFHRV9VU0VSICkgLyogR290IGEgdXNlciB3YWxrLiAqLworICAgICAgICB7CisgICAgICAg ICAgICBpZiAoICh3YWxrICYgUEZFQ19pbnNuX2ZldGNoKSAmJiBndWVzdF9zbWVwX2VuYWJsZWQo dikgKQorICAgICAgICAgICAgICAgIC8qIFVzZXIgaW5zbiBmZXRjaCBhbmQgc21lcD8gRmFpbC4g Ki8KKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICAgICAgaWYgKCAhKHdhbGsg JiBQRkVDX2luc25fZmV0Y2gpICYmIGd1ZXN0X3NtYXBfZW5hYmxlZCh2KSAmJgorICAgICAgICAg ICAgICAgICAoKHdhbGsgJiBQRkVDX2ltcGxpY2l0KSB8fAorICAgICAgICAgICAgICAgICAgIShn dWVzdF9jcHVfdXNlcl9yZWdzKCktPl9lZmxhZ3MgJiBYODZfRUZMQUdTX0FDKSkgKQorICAgICAg ICAgICAgICAgIC8qIFVzZXIgZGF0YSBhY2Nlc3MgYW5kIHNtYXA/IEZhaWwuICovCisgICAgICAg ICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KLSAgICAgICAgcmMgfD0gKChnZmxhZ3MgJiBt ZmxhZ3MpIF4gbWZsYWdzKTsKKworICAgICAgICBpZiAoICh3YWxrICYgUEZFQ193cml0ZV9hY2Nl c3MpICYmICEoYXIgJiBfUEFHRV9SVykgJiYKKyAgICAgICAgICAgICBndWVzdF93cF9lbmFibGVk KHYpICkKKyAgICAgICAgICAgIC8qIFJlcXVlc3RlZCBhIHdyaXRlLCBnb3QgYSByZWFkLCBhbmQg Q1IwLldQIGlzIHNldD8gRmFpbC4gKi8KKyAgICAgICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAog I2lmIEdVRVNUX1BBR0lOR19MRVZFTFMgPj0gNCAvKiA2NC1iaXQgb25seS4uLiAqLwotc2V0X2Fk OgotICAgIGlmICggcGtleV9mYXVsdCh2LCBwZmVjLCBnZmxhZ3MsIHBrZXkpICkKLSAgICAgICAg cmMgfD0gX1BBR0VfUEtFWV9CSVRTOworICAgIC8qCisgICAgICogSWYgYWxsIGFjY2VzcyBjaGVj a3MgYXJlIHRodXNmYXIgb2ssIGNoZWNrIFByb3RlY3Rpb24gS2V5IGZvciA2NGJpdAorICAgICAq IHVzZXIgZGF0YSBhY2Nlc3Nlcy4KKyAgICAgKgorICAgICAqIE4uQi4gSW4gdGhlIGNhc2UgdGhh dCB0aGUgd2FsayBlbmRlZCB3aXRoIGEgc3VwZXJwYWdlLCB0aGUgZmFicmljYXRlZAorICAgICAq IGd3LT5sMWUgY29udGFpbnMgdGhlIGFwcHJvcHJpYXRlIGxlYWYgcGtleS4KKyAgICAgKi8KKyAg ICBpZiAoICh3YWxrICYgUEZFQ191c2VyX21vZGUpICYmICEod2FsayAmIFBGRUNfaW5zbl9mZXRj aCkgJiYgZ3Vlc3RfcGt1X2VuYWJsZWQodikgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50 IHBrZXkgPSBndWVzdF9sMWVfZ2V0X3BrZXkoZ3ctPmwxZSk7CisgICAgICAgIHVuc2lnbmVkIGlu dCBwa3J1ID0gcmVhZF9wa3J1KCk7CisKKyAgICAgICAgaWYgKCByZWFkX3BrcnVfYWQocGtydSwg cGtleSkgfHwKKyAgICAgICAgICAgICAoKGFyICYgUEZFQ193cml0ZV9hY2Nlc3MpICYmIHJlYWRf cGtydV93ZChwa3J1LCBwa2V5KSkgKQorICAgICAgICB7CisgICAgICAgICAgICBndy0+cGZlYyB8 PSBQRkVDX3Byb3Rfa2V5OworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9 CiAjZW5kaWYKLSAgICAvKiBOb3cgcmUtaW52ZXJ0IHRoZSB1c2VyLW1vZGUgcmVxdWlyZW1lbnQg Zm9yIFNNRVAgYW5kIFNNQVAgKi8KLSAgICBpZiAoIHNtZXAgfHwgc21hcCApCi0gICAgICAgIHJj IF49IF9QQUdFX1VTRVI7CisKKyAgICB3YWxrX29rID0gdHJ1ZTsKIAogICAgIC8qIEdvIGJhY2sg YW5kIHNldCBhY2Nlc3NlZCBhbmQgZGlydHkgYml0cyBvbmx5IGlmIHRoZSB3YWxrIHdhcyBhCiAg ICAgICogc3VjY2Vzcy4gIEFsdGhvdWdoIHRoZSBQUk1zIHNheSBoaWdoZXItbGV2ZWwgX1BBR0Vf QUNDRVNTRUQgYml0cwogICAgICAqIGdldCBzZXQgd2hlbmV2ZXIgYSBsb3dlci1sZXZlbCBQVCBp cyB1c2VkLCBhdCBsZWFzdCBzb21lIGhhcmR3YXJlCiAgICAgICogd2Fsa2VycyBiZWhhdmUgdGhp cyB3YXkuICovCi0gICAgaWYgKCByYyA9PSAwICkgCi0gICAgewogI2lmIEdVRVNUX1BBR0lOR19M RVZFTFMgPT0gNCAvKiA2NC1iaXQgb25seS4uLiAqLwotICAgICAgICBpZiAoIHNldF9hZF9iaXRz KGw0cCArIGd1ZXN0X2w0X3RhYmxlX29mZnNldCh2YSksICZndy0+bDRlLCAwKSApCi0gICAgICAg ICAgICBwYWdpbmdfbWFya19kaXJ0eShkLCBndy0+bDRtZm4pOwotICAgICAgICBpZiAoIHNldF9h ZF9iaXRzKGwzcCArIGd1ZXN0X2wzX3RhYmxlX29mZnNldCh2YSksICZndy0+bDNlLAotICAgICAg ICAgICAgICAgICAgICAgICAgIChwc2UxRyAmJiAocGZlYyAmIFBGRUNfd3JpdGVfYWNjZXNzKSkp ICkKLSAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIGd3LT5sM21mbik7CisgICAgaWYg KCBzZXRfYWRfYml0cyhsNHAgKyBndWVzdF9sNF90YWJsZV9vZmZzZXQodmEpLCAmZ3ctPmw0ZSwg MCkgKQorICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShkLCBndy0+bDRtZm4pOworICAgIGlmICgg c2V0X2FkX2JpdHMobDNwICsgZ3Vlc3RfbDNfdGFibGVfb2Zmc2V0KHZhKSwgJmd3LT5sM2UsCisg ICAgICAgICAgICAgICAgICAgICAocHNlMUcgJiYgKHdhbGsgJiBQRkVDX3dyaXRlX2FjY2Vzcykp KSApCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIGd3LT5sM21mbik7CiAjZW5kaWYKLSAg ICAgICAgaWYgKCAhcHNlMUcgKSAKKyAgICBpZiAoICFwc2UxRyApCisgICAgeworICAgICAgICBp ZiAoIHNldF9hZF9iaXRzKGwycCArIGd1ZXN0X2wyX3RhYmxlX29mZnNldCh2YSksICZndy0+bDJl LAorICAgICAgICAgICAgICAgICAgICAgICAgIChwc2UyTSAmJiAod2FsayAmIFBGRUNfd3JpdGVf YWNjZXNzKSkpICkKKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIGd3LT5sMm1mbik7 CisgICAgICAgIGlmICggIXBzZTJNICkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCBzZXRf YWRfYml0cyhsMnAgKyBndWVzdF9sMl90YWJsZV9vZmZzZXQodmEpLCAmZ3ctPmwyZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBzZTJNICYmIChwZmVjICYgUEZFQ193cml0ZV9hY2Nl c3MpKSkgKQotICAgICAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIGd3LT5sMm1mbik7 Ci0gICAgICAgICAgICBpZiAoICFwc2UyTSApIAotICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgIGlmICggc2V0X2FkX2JpdHMobDFwICsgZ3Vlc3RfbDFfdGFibGVfb2Zmc2V0KHZhKSwgJmd3 LT5sMWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBmZWMgJiBQRkVDX3dy aXRlX2FjY2VzcykpICkKLSAgICAgICAgICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkoZCwg Z3ctPmwxbWZuKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggc2V0X2FkX2JpdHMo bDFwICsgZ3Vlc3RfbDFfdGFibGVfb2Zmc2V0KHZhKSwgJmd3LT5sMWUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh3YWxrICYgUEZFQ193cml0ZV9hY2Nlc3MpKSApCisgICAgICAgICAg ICAgICAgcGFnaW5nX21hcmtfZGlydHkoZCwgZ3ctPmwxbWZuKTsKICAgICAgICAgfQogICAgIH0K IApAQCAtNDM2LDEwICs0NTMsNSBAQCBndWVzdF93YWxrX3RhYmxlcyhzdHJ1Y3QgdmNwdSAqdiwg c3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICAgICAgcHV0X3BhZ2UobWZuX3RvX3BhZ2UobWZu X3goZ3ctPmwxbWZuKSkpOwogICAgIH0KIAotICAgIC8qIElmIHRoaXMgZ3Vlc3QgaGFzIGEgcmVz dHJpY3RlZCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIHRoZW4gdGhlCi0gICAgICogdGFyZ2V0IEdG TiBtdXN0IGZpdCB3aXRoaW4gaXQuICovCi0gICAgaWYgKCAhKHJjICYgX1BBR0VfUFJFU0VOVCkg JiYgIWdmbl92YWxpZChkLCBndWVzdF9sMWVfZ2V0X2dmbihndy0+bDFlKSkgKQotICAgICAgICBy YyB8PSBfUEFHRV9JTlZBTElEX0JJVFM7Ci0KLSAgICByZXR1cm4gcmM7CisgICAgcmV0dXJuIHdh bGtfb2s7CiB9CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0vaGFwL2d1ZXN0X3dhbGsuYyBi L3hlbi9hcmNoL3g4Ni9tbS9oYXAvZ3Vlc3Rfd2Fsay5jCmluZGV4IDMxM2Y4MmYuLjk3YjhhYzUg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9oYXAvZ3Vlc3Rfd2Fsay5jCisrKyBiL3hlbi9h cmNoL3g4Ni9tbS9oYXAvZ3Vlc3Rfd2Fsay5jCkBAIC01MCw3ICs1MCw3IEBAIHVuc2lnbmVkIGxv bmcgaGFwX3AybV9nYV90b19nZm4oR1VFU1RfUEFHSU5HX0xFVkVMUykoCiAgICAgc3RydWN0IHZj cHUgKnYsIHN0cnVjdCBwMm1fZG9tYWluICpwMm0sIHVuc2lnbmVkIGxvbmcgY3IzLAogICAgIHBh ZGRyX3QgZ2EsIHVpbnQzMl90ICpwZmVjLCB1bnNpZ25lZCBpbnQgKnBhZ2Vfb3JkZXIpCiB7Ci0g ICAgdWludDMyX3QgbWlzc2luZzsKKyAgICBib29sIHdhbGtfb2s7CiAgICAgbWZuX3QgdG9wX21m bjsKICAgICB2b2lkICp0b3BfbWFwOwogICAgIHAybV90eXBlX3QgcDJtdDsKQEAgLTkxLDEyICs5 MSwxMiBAQCB1bnNpZ25lZCBsb25nIGhhcF9wMm1fZ2FfdG9fZ2ZuKEdVRVNUX1BBR0lOR19MRVZF TFMpKAogI2lmIEdVRVNUX1BBR0lOR19MRVZFTFMgPT0gMwogICAgIHRvcF9tYXAgKz0gKGNyMyAm IH4oUEFHRV9NQVNLIHwgMzEpKTsKICNlbmRpZgotICAgIG1pc3NpbmcgPSBndWVzdF93YWxrX3Rh Ymxlcyh2LCBwMm0sIGdhLCAmZ3csIHBmZWNbMF0sIHRvcF9tZm4sIHRvcF9tYXApOworICAgIHdh bGtfb2sgPSBndWVzdF93YWxrX3RhYmxlcyh2LCBwMm0sIGdhLCAmZ3csIHBmZWNbMF0sIHRvcF9t Zm4sIHRvcF9tYXApOwogICAgIHVubWFwX2RvbWFpbl9wYWdlKHRvcF9tYXApOwogICAgIHB1dF9w YWdlKHRvcF9wYWdlKTsKIAogICAgIC8qIEludGVycHJldCB0aGUgYW5zd2VyICovCi0gICAgaWYg KCBtaXNzaW5nID09IDAgKQorICAgIGlmICggd2Fsa19vayApCiAgICAgewogICAgICAgICBnZm5f dCBnZm4gPSBndWVzdF93YWxrX3RvX2dmbigmZ3cpOwogICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlOwpAQCAtMTIzLDIwICsxMjMsNyBAQCB1bnNpZ25lZCBsb25nIGhhcF9wMm1fZ2FfdG9f Z2ZuKEdVRVNUX1BBR0lOR19MRVZFTFMpKAogICAgICAgICByZXR1cm4gZ2ZuX3goZ2ZuKTsKICAg ICB9CiAKLSAgICBpZiAoIG1pc3NpbmcgJiBfUEFHRV9QUkVTRU5UICkKLSAgICAgICAgcGZlY1sw XSAmPSB+UEZFQ19wYWdlX3ByZXNlbnQ7Ci0KLSAgICBpZiAoIG1pc3NpbmcgJiBfUEFHRV9JTlZB TElEX0JJVFMgKSAKLSAgICAgICAgcGZlY1swXSB8PSBQRkVDX3Jlc2VydmVkX2JpdDsKLQotICAg IGlmICggbWlzc2luZyAmIF9QQUdFX1BLRVlfQklUUyApCi0gICAgICAgIHBmZWNbMF0gfD0gUEZF Q19wcm90X2tleTsKLQotICAgIGlmICggbWlzc2luZyAmIF9QQUdFX1BBR0VEICkKLSAgICAgICAg cGZlY1swXSA9IFBGRUNfcGFnZV9wYWdlZDsKLQotICAgIGlmICggbWlzc2luZyAmIF9QQUdFX1NI QVJFRCApCi0gICAgICAgIHBmZWNbMF0gPSBQRkVDX3BhZ2Vfc2hhcmVkOworICAgIHBmZWNbMF0g PSBndy5wZmVjOwogCiAgb3V0X3R3ZWFrX3BmZWM6CiAgICAgLyoKZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni9tbS9oYXAvbmVzdGVkX2VwdC5jIGIveGVuL2FyY2gveDg2L21tL2hhcC9uZXN0ZWRf ZXB0LmMKaW5kZXggMDJiMjdiMS4uMTRiMWJiMCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L21t L2hhcC9uZXN0ZWRfZXB0LmMKKysrIGIveGVuL2FyY2gveDg2L21tL2hhcC9uZXN0ZWRfZXB0LmMK QEAgLTIwOCw3ICsyMDgsNyBAQCBuZXB0X3dhbGtfdGFibGVzKHN0cnVjdCB2Y3B1ICp2LCB1bnNp Z25lZCBsb25nIGwyZ2EsIGVwdF93YWxrX3QgKmd3KQogICAgIGdvdG8gb3V0OwogCiBtYXBfZXJy OgotICAgIGlmICggcmMgPT0gX1BBR0VfUEFHRUQgKQorICAgIGlmICggcmMgPT0gUEZFQ19wYWdl X3BhZ2VkICkKICAgICB7CiAgICAgICAgIHJldCA9IEVQVF9UUkFOU0xBVEVfUkVUUlk7CiAgICAg ICAgIGdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tL3AybS5jIGIveGVuL2Fy Y2gveDg2L21tL3AybS5jCmluZGV4IDJlZWU5Y2QuLmI1MTQyMWIgMTAwNjQ0Ci0tLSBhL3hlbi9h cmNoL3g4Ni9tbS9wMm0uYworKysgYi94ZW4vYXJjaC94ODYvbW0vcDJtLmMKQEAgLTE3NzQsMTcg KzE3NzQsMTggQEAgdW5zaWduZWQgbG9uZyBwYWdpbmdfZ3ZhX3RvX2dmbihzdHJ1Y3QgdmNwdSAq diwKIH0KIAogLyoKLSAqIElmIHRoZSBtYXAgaXMgbm9uLU5VTEwsIHdlIGxlYXZlIHRoaXMgZnVu Y3Rpb24gaGF2aW5nCi0gKiBhY3F1aXJlZCBhbiBleHRyYSByZWYgb24gbWZuX3RvX3BhZ2UoKm1m bikuCisgKiBJZiB0aGUgbWFwIGlzIG5vbi1OVUxMLCB3ZSBsZWF2ZSB0aGlzIGZ1bmN0aW9uIGhh dmluZyBhY3F1aXJlZCBhbiBleHRyYSByZWYKKyAqIG9uIG1mbl90b19wYWdlKCptZm4pLiAgSW4g YWxsIGNhc2VzLCAqcGZlYyBjb250YWlucyBhcHByb3ByaWF0ZQorICogc3ludGhldGljL3N0cnVj dHVyZSBQRkVDXyogYml0cy4KICAqLwogdm9pZCAqbWFwX2RvbWFpbl9nZm4oc3RydWN0IHAybV9k b21haW4gKnAybSwgZ2ZuX3QgZ2ZuLCBtZm5fdCAqbWZuLAotICAgICAgICAgICAgICAgICAgICAg cDJtX3R5cGVfdCAqcDJtdCwgcDJtX3F1ZXJ5X3QgcSwgdWludDMyX3QgKnJjKQorICAgICAgICAg ICAgICAgICAgICAgcDJtX3R5cGVfdCAqcDJtdCwgcDJtX3F1ZXJ5X3QgcSwgdWludDMyX3QgKnBm ZWMpCiB7CiAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKIAogICAgIGlmICggIWdmbl92YWxp ZChwMm0tPmRvbWFpbiwgZ2ZuKSApCiAgICAgewotICAgICAgICAqcmMgPSBfUEFHRV9JTlZBTElE X0JJVDsKKyAgICAgICAgKnBmZWMgPSBQRkVDX3Jlc2VydmVkX2JpdCB8IFBGRUNfcGFnZV9wcmVz ZW50OwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTE3OTYsMjEgKzE3OTcsMjMg QEAgdm9pZCAqbWFwX2RvbWFpbl9nZm4oc3RydWN0IHAybV9kb21haW4gKnAybSwgZ2ZuX3QgZ2Zu LCBtZm5fdCAqbWZuLAogICAgICAgICBpZiAoIHBhZ2UgKQogICAgICAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7CiAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKHAybS0+ZG9tYWluLCBnZm5f eChnZm4pKTsKLSAgICAgICAgKnJjID0gX1BBR0VfUEFHRUQ7CisgICAgICAgICpwZmVjID0gUEZF Q19wYWdlX3BhZ2VkOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKCBwMm1f aXNfc2hhcmVkKCpwMm10KSApCiAgICAgewogICAgICAgICBpZiAoIHBhZ2UgKQogICAgICAgICAg ICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICpyYyA9IF9QQUdFX1NIQVJFRDsKKyAgICAgICAg KnBmZWMgPSBQRkVDX3BhZ2Vfc2hhcmVkOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAg ICAgaWYgKCAhcGFnZSApCiAgICAgewotICAgICAgICAqcmMgfD0gX1BBR0VfUFJFU0VOVDsKKyAg ICAgICAgKnBmZWMgPSAwOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICAqcGZl YyA9IFBGRUNfcGFnZV9wcmVzZW50OwogICAgICptZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKICAg ICBBU1NFUlQobWZuX3ZhbGlkKCptZm4pKTsKIApkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21t L3NoYWRvdy9tdWx0aS5jIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jCmluZGV4IGY3 M2I1NTMuLjYyYzFmYjUgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGku YworKysgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMKQEAgLTE3MSw3ICsxNzEsNyBA QCBkZWxldGVfc2hhZG93X3N0YXR1cyhzdHJ1Y3QgZG9tYWluICpkLCBtZm5fdCBnbWZuLCB1MzIg c2hhZG93X3R5cGUsIG1mbl90IHNtZm4pCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBGdW5jdGlv bnMgZm9yIHdhbGtpbmcgdGhlIGd1ZXN0IHBhZ2UgdGFibGVzICovCiAKLXN0YXRpYyBpbmxpbmUg dWludDMyX3QKK3N0YXRpYyBpbmxpbmUgYm9vbAogc2hfd2Fsa19ndWVzdF90YWJsZXMoc3RydWN0 IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgdmEsIHdhbGtfdCAqZ3csCiAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBwZmVjKQogewpAQCAtMjg2NSw2ICsyODY1LDcgQEAgc3RhdGljIGludCBz aF9wYWdlX2ZhdWx0KHN0cnVjdCB2Y3B1ICp2LAogICAgIGludCByOwogICAgIHAybV90eXBlX3Qg cDJtdDsKICAgICB1aW50MzJfdCByYywgZXJyb3JfY29kZTsKKyAgICBib29sIHdhbGtfb2s7CiAg ICAgaW50IHZlcnNpb247CiAgICAgY29uc3Qgc3RydWN0IG5wZmVjIGFjY2VzcyA9IHsKICAgICAg ICAgIC5yZWFkX2FjY2VzcyA9IDEsCkBAIC0zMDgwLDIxICszMDgxLDIwIEBAIHN0YXRpYyBpbnQg c2hfcGFnZV9mYXVsdChzdHJ1Y3QgdmNwdSAqdiwKICAgICAgKiBzaGFkb3cgcGFnZSB0YWJsZS4g Ki8KICAgICB2ZXJzaW9uID0gYXRvbWljX3JlYWQoJmQtPmFyY2gucGFnaW5nLnNoYWRvdy5ndGFi bGVfZGlydHlfdmVyc2lvbik7CiAgICAgcm1iKCk7Ci0gICAgcmMgPSBzaF93YWxrX2d1ZXN0X3Rh Ymxlcyh2LCB2YSwgJmd3LCBlcnJvcl9jb2RlKTsKKyAgICB3YWxrX29rID0gc2hfd2Fsa19ndWVz dF90YWJsZXModiwgdmEsICZndywgZXJyb3JfY29kZSk7CiAKICNpZiAoU0hBRE9XX09QVElNSVpB VElPTlMgJiBTSE9QVF9PVVRfT0ZfU1lOQykKICAgICByZWdzLT5lcnJvcl9jb2RlICY9IH5QRkVD X3BhZ2VfcHJlc2VudDsKLSAgICBpZiAoICEocmMgJiBfUEFHRV9QUkVTRU5UKSApCisgICAgaWYg KCBndy5wZmVjICYgUEZFQ19wYWdlX3ByZXNlbnQgKQogICAgICAgICByZWdzLT5lcnJvcl9jb2Rl IHw9IFBGRUNfcGFnZV9wcmVzZW50OwogI2VuZGlmCiAKLSAgICBpZiAoIHJjICE9IDAgKQorICAg IGlmICggIXdhbGtfb2sgKQogICAgIHsKICAgICAgICAgcGVyZmNfaW5jcihzaGFkb3dfZmF1bHRf YmFpbF9yZWFsX2ZhdWx0KTsKICAgICAgICAgU0hBRE9XX1BSSU5USygibm90IGEgc2hhZG93IGZh dWx0XG4iKTsKICAgICAgICAgcmVzZXRfZWFybHlfdW5zaGFkb3codik7Ci0gICAgICAgIGlmICgg KHJjICYgX1BBR0VfSU5WQUxJRF9CSVRTKSApCi0gICAgICAgICAgICByZWdzLT5lcnJvcl9jb2Rl IHw9IFBGRUNfcmVzZXJ2ZWRfYml0OworICAgICAgICByZWdzLT5lcnJvcl9jb2RlID0gZ3cucGZl YyAmIFBGRUNfYXJjaF9tYXNrOwogICAgICAgICBnb3RvIHByb3BhZ2F0ZTsKICAgICB9CiAKQEAg LTM3MjgsNyArMzcyOCw3IEBAIHNoX2d2YV90b19nZm4oc3RydWN0IHZjcHUgKnYsIHN0cnVjdCBw Mm1fZG9tYWluICpwMm0sCiB7CiAgICAgd2Fsa190IGd3OwogICAgIGdmbl90IGdmbjsKLSAgICB1 aW50MzJfdCBtaXNzaW5nOworICAgIGJvb2wgd2Fsa19vazsKIAogI2lmIChTSEFET1dfT1BUSU1J WkFUSU9OUyAmIFNIT1BUX1ZJUlRVQUxfVExCKQogICAgIC8qIENoZWNrIHRoZSB2VExCIGNhY2hl IGZpcnN0ICovCkBAIC0zNzM3LDE4ICszNzM3LDkgQEAgc2hfZ3ZhX3RvX2dmbihzdHJ1Y3QgdmNw dSAqdiwgc3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICAgICAgcmV0dXJuIHZ0bGJfZ2ZuOwog I2VuZGlmIC8qIChTSEFET1dfT1BUSU1JWkFUSU9OUyAmIFNIT1BUX1ZJUlRVQUxfVExCKSAqLwog Ci0gICAgaWYgKCAobWlzc2luZyA9IHNoX3dhbGtfZ3Vlc3RfdGFibGVzKHYsIHZhLCAmZ3csIHBm ZWNbMF0pKSAhPSAwICkKKyAgICBpZiAoICEod2Fsa19vayA9IHNoX3dhbGtfZ3Vlc3RfdGFibGVz KHYsIHZhLCAmZ3csIHBmZWNbMF0pKSApCiAgICAgewotICAgICAgICBpZiAoIChtaXNzaW5nICYg X1BBR0VfUFJFU0VOVCkgKQotICAgICAgICAgICAgcGZlY1swXSAmPSB+UEZFQ19wYWdlX3ByZXNl bnQ7Ci0gICAgICAgIGlmICggbWlzc2luZyAmIF9QQUdFX0lOVkFMSURfQklUUyApCi0gICAgICAg ICAgICBwZmVjWzBdIHw9IFBGRUNfcmVzZXJ2ZWRfYml0OwotICAgICAgICAvKgotICAgICAgICAg KiBTRE0gSW50ZWwgNjQgVm9sdW1lIDMsIENoYXB0ZXIgUGFnaW5nLCBQQUdFLUZBVUxUIEVYQ0VQ VElPTlM6Ci0gICAgICAgICAqIFRoZSBQRkVDX2luc25fZmV0Y2ggZmxhZyBpcyBzZXQgb25seSB3 aGVuIE5YIG9yIFNNRVAgYXJlIGVuYWJsZWQuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIGlz X2h2bV92Y3B1KHYpICYmICFodm1fbnhfZW5hYmxlZCh2KSAmJiAhaHZtX3NtZXBfZW5hYmxlZCh2 KSApCi0gICAgICAgICAgICBwZmVjWzBdICY9IH5QRkVDX2luc25fZmV0Y2g7CisgICAgICAgIHBm ZWNbMF0gPSBndy5wZmVjOwogICAgICAgICByZXR1cm4gZ2ZuX3goSU5WQUxJRF9HRk4pOwogICAg IH0KICAgICBnZm4gPSBndWVzdF93YWxrX3RvX2dmbigmZ3cpOwpkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9ndWVzdF9wdC5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9ndWVzdF9wdC5o CmluZGV4IDFhYTM4M2YuLjQ0ZmMwOTcgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYv Z3Vlc3RfcHQuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2d1ZXN0X3B0LmgKQEAgLTIzNiwx OSArMjM2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9zdXBwb3J0c19ueChjb25zdCBz dHJ1Y3QgdmNwdSAqdikKICAgICByZXR1cm4gaHZtX254X2VuYWJsZWQodik7CiB9CiAKK3N0YXRp YyBpbmxpbmUgYm9vbCBndWVzdF93cF9lbmFibGVkKGNvbnN0IHN0cnVjdCB2Y3B1ICp2KQorewor ICAgIC8qIFBWIGd1ZXN0cyBjYW4ndCBjb250cm9sIENSMC5XUCwgYW5kIGl0IGlzIHVuY29uZGl0 aW9uYWxseSBzZXQgYnkgWGVuLiAqLworICAgIHJldHVybiBpc19wdl92Y3B1KHYpIHx8IGh2bV93 cF9lbmFibGVkKHYpOworfQogCi0vKgotICogU29tZSBiaXRzIGFyZSBpbnZhbGlkIGluIGFueSBw YWdldGFibGUgZW50cnkuCi0gKiBOb3JtYWwgZmxhZ3MgdmFsdWVzIGdldCByZXByZXNlbnRlZCBp biAyNC1iaXQgdmFsdWVzIChzZWUKLSAqIGdldF9wdGVfZmxhZ3MoKSBhbmQgcHV0X3B0ZV9mbGFn cygpKSwgc28gc2V0IGJpdCAyNCBpbgotICogYWRkaXRpb24gdG8gYmUgYWJsZSB0byBmbGFnIG91 dCBvZiByYW5nZSBmcmFtZSBudW1iZXJzLgotICovCi0jaWYgR1VFU1RfUEFHSU5HX0xFVkVMUyA9 PSAzCi0jZGVmaW5lIF9QQUdFX0lOVkFMSURfQklUUyBcCi0gICAgKF9QQUdFX0lOVkFMSURfQklU IHwgZ2V0X3B0ZV9mbGFncygoKDF1bGwgPDwgNjMpIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKSkK LSNlbHNlIC8qIDItbGV2ZWwgYW5kIDQtbGV2ZWwgKi8KLSNkZWZpbmUgX1BBR0VfSU5WQUxJRF9C SVRTIF9QQUdFX0lOVkFMSURfQklUCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9z bWVwX2VuYWJsZWQoY29uc3Qgc3RydWN0IHZjcHUgKnYpCit7CisgICAgcmV0dXJuIGlzX3B2X3Zj cHUodikgPyAwIDogaHZtX3NtZXBfZW5hYmxlZCh2KTsKK30KKworc3RhdGljIGlubGluZSBib29s IGd1ZXN0X3NtYXBfZW5hYmxlZChjb25zdCBzdHJ1Y3QgdmNwdSAqdikKK3sKKyAgICByZXR1cm4g aXNfcHZfdmNwdSh2KSA/IDAgOiBodm1fc21hcF9lbmFibGVkKHYpOworfQorCitzdGF0aWMgaW5s aW5lIGJvb2wgZ3Vlc3RfcGt1X2VuYWJsZWQoY29uc3Qgc3RydWN0IHZjcHUgKnYpCit7CisgICAg cmV0dXJuIGlzX3B2X3ZjcHUodikgPyAwIDogaHZtX3BrdV9lbmFibGVkKHYpOworfQogCiAvKiBI ZWxwZXJzIGZvciBpZGVudGlmeWluZyB3aGV0aGVyIGd1ZXN0IGVudHJpZXMgaGF2ZSByZXNlcnZl ZCBiaXRzIHNldC4gKi8KIApAQCAtMzEyLDEzICszMTksMTkgQEAgc3RydWN0IGd1ZXN0X3BhZ2V0 YWJsZV93YWxrCiAgICAgZ3Vlc3RfbDNlX3QgbDNlOyAgICAgICAgICAgIC8qIEd1ZXN0J3MgbGV2 ZWwgMyBlbnRyeSAqLwogI2VuZGlmCiAgICAgZ3Vlc3RfbDJlX3QgbDJlOyAgICAgICAgICAgIC8q IEd1ZXN0J3MgbGV2ZWwgMiBlbnRyeSAqLwotICAgIGd1ZXN0X2wxZV90IGwxZTsgICAgICAgICAg ICAvKiBHdWVzdCdzIGxldmVsIDEgZW50cnkgKG9yIGZhYnJpY2F0aW9uKSAqLworICAgIHVuaW9u CisgICAgeworICAgICAgICBndWVzdF9sMWVfdCBsMWU7ICAgICAgICAvKiBHdWVzdCdzIGxldmVs IDEgZW50cnkgKG9yIGZhYnJpY2F0aW9uKS4gKi8KKyAgICAgICAgdWludDY0X3QgICBlbDFlOyAg ICAgICAgLyogTDIgUFNFMzYgc3VwZXJwYWdlcyB3aWRlciB0aGFuIDMyIGJpdHMuICovCisgICAg fTsKICNpZiBHVUVTVF9QQUdJTkdfTEVWRUxTID49IDQKICAgICBtZm5fdCBsNG1mbjsgICAgICAg ICAgICAgICAgLyogTUZOIHRoYXQgdGhlIGxldmVsIDQgZW50cnkgd2FzIGluICovCiAgICAgbWZu X3QgbDNtZm47ICAgICAgICAgICAgICAgIC8qIE1GTiB0aGF0IHRoZSBsZXZlbCAzIGVudHJ5IHdh cyBpbiAqLwogI2VuZGlmCiAgICAgbWZuX3QgbDJtZm47ICAgICAgICAgICAgICAgIC8qIE1GTiB0 aGF0IHRoZSBsZXZlbCAyIGVudHJ5IHdhcyBpbiAqLwogICAgIG1mbl90IGwxbWZuOyAgICAgICAg ICAgICAgICAvKiBNRk4gdGhhdCB0aGUgbGV2ZWwgMSBlbnRyeSB3YXMgaW4gKi8KKworICAgIHVp bnQzMl90IHBmZWM7ICAgICAgICAgICAgICAvKiBBY2N1bXVsYXRlZCBQRkVDXyogZXJyb3IgY29k ZSBmcm9tIHdhbGsuICovCiB9OwogCiAvKiBHaXZlbiBhIHdhbGtfdCwgdHJhbnNsYXRlIHRoZSBn dy0+dmEgaW50byB0aGUgZ3Vlc3QncyBub3Rpb24gb2YgdGhlCkBAIC0zMjcsNyArMzQwLDkgQEAg c3RhdGljIGlubGluZSBnZm5fdCBndWVzdF93YWxrX3RvX2dmbihjb25zdCB3YWxrX3QgKmd3KQog ewogICAgIGlmICggIShndWVzdF9sMWVfZ2V0X2ZsYWdzKGd3LT5sMWUpICYgX1BBR0VfUFJFU0VO VCkgKQogICAgICAgICByZXR1cm4gSU5WQUxJRF9HRk47Ci0gICAgcmV0dXJuIGd1ZXN0X2wxZV9n ZXRfZ2ZuKGd3LT5sMWUpOworICAgIHJldHVybiAoR1VFU1RfUEFHSU5HX0xFVkVMUyA9PSAyCisg ICAgICAgICAgICA/IF9nZm4oZ3ctPmVsMWUgPj4gUEFHRV9TSElGVCkKKyAgICAgICAgICAgIDog Z3Vlc3RfbDFlX2dldF9nZm4oZ3ctPmwxZSkpOwogfQogCiAvKiBHaXZlbiBhIHdhbGtfdCwgdHJh bnNsYXRlIHRoZSBndy0+dmEgaW50byB0aGUgZ3Vlc3QncyBub3Rpb24gb2YgdGhlCkBAIC0zNzIs MTUgKzM4NywxNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBndWVzdF93YWxrX3RvX3Bh Z2Vfb3JkZXIoY29uc3Qgd2Fsa190ICpndykKICAqIHdlIGdvLiAgRm9yIHRoZSBwdXJwb3NlcyBv ZiByZWFkaW5nIHBhZ2V0YWJsZXMgd2UgdHJlYXQgYWxsIG5vbi1SQU0KICAqIG1lbW9yeSBhcyBj b250aW5pbmcgemVyb2VzLgogICogCi0gKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG9yIHRoZSBz ZXQgb2YgcGVybWlzc2lvbiBiaXRzIHRoYXQgd2UgZmFpbGVkIG9uIAotICogaWYgdGhlIHdhbGsg ZGlkIG5vdCBjb21wbGV0ZS4gKi8KKyAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgc3Vj Y2VzcyBvciBmYWlsdXJlLiAgd2Fsa190LnBmZWMgY29udGFpbnMKKyAqIHRoZSBhY2N1bXVsYXRl ZCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KIAogLyogTWFjcm8tZnUgc28geW91IGNhbiBj YWxsIGd1ZXN0X3dhbGtfdGFibGVzKCkgYW5kIGdldCB0aGUgcmlnaHQgb25lLiAqLwogI2RlZmlu ZSBHUFRfUkVOQU1FMihfbiwgX2wpIF9uICMjIF8gIyMgX2wgIyMgX2xldmVscwogI2RlZmluZSBH UFRfUkVOQU1FKF9uLCBfbCkgR1BUX1JFTkFNRTIoX24sIF9sKQogI2RlZmluZSBndWVzdF93YWxr X3RhYmxlcyBHUFRfUkVOQU1FKGd1ZXN0X3dhbGtfdGFibGVzLCBHVUVTVF9QQUdJTkdfTEVWRUxT KQogCi1leHRlcm4gdWludDMyX3QgCitib29sCiBndWVzdF93YWxrX3RhYmxlcyhzdHJ1Y3QgdmNw dSAqdiwgc3RydWN0IHAybV9kb21haW4gKnAybSwgdW5zaWduZWQgbG9uZyB2YSwKICAgICAgICAg ICAgICAgICAgIHdhbGtfdCAqZ3csIHVpbnQzMl90IHBmZWMsIG1mbl90IHRvcF9tZm4sIHZvaWQg KnRvcF9tYXApOwogCkBAIC00MDAsOCArNDE2LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmlu dF9ndyhjb25zdCB3YWxrX3QgKmd3KQogI2VuZGlmIC8qIEFsbCBsZXZlbHMuLi4gKi8KICAgICBn cHJpbnRrKFhFTkxPR19JTkZPLCAiICAgbDJlPSUiIFBSSV9ncHRlICIgbDJtZm49JSIgUFJJX21m biAiXG4iLAogICAgICAgICAgICAgZ3ctPmwyZS5sMiwgbWZuX3goZ3ctPmwybWZuKSk7CisjaWYg R1VFU1RfUEFHSU5HX0xFVkVMUyA9PSAyCisgICAgZ3ByaW50ayhYRU5MT0dfSU5GTywgIiAgZWwx ZT0lMDgiIFBSSXg2NCAiIGwxbWZuPSUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAgICAgIGd3LT5l bDFlLCBtZm5feChndy0+bDFtZm4pKTsKKyNlbHNlCiAgICAgZ3ByaW50ayhYRU5MT0dfSU5GTywg IiAgIGwxZT0lIiBQUklfZ3B0ZSAiIGwxbWZuPSUiIFBSSV9tZm4gIlxuIiwKICAgICAgICAgICAg IGd3LT5sMWUubDEsIG1mbl94KGd3LT5sMW1mbikpOworI2VuZGlmCisgICAgZ3ByaW50ayhYRU5M T0dfSU5GTywgIiAgIHBmZWM9JTAyeFslYyVjJWMlYyVjJWNdXG4iLCBndy0+cGZlYywKKyAgICAg ICAgICAgIGd3LT5wZmVjICYgUEZFQ19wcm90X2tleSAgICAgPyAnSycgOiAnLScsCisgICAgICAg ICAgICBndy0+cGZlYyAmIFBGRUNfaW5zbl9mZXRjaCAgID8gJ0knIDogJ2QnLAorICAgICAgICAg ICAgZ3ctPnBmZWMgJiBQRkVDX3Jlc2VydmVkX2JpdCA/ICdSJyA6ICctJywKKyAgICAgICAgICAg IGd3LT5wZmVjICYgUEZFQ191c2VyX21vZGUgICAgPyAnVScgOiAncycsCisgICAgICAgICAgICBn dy0+cGZlYyAmIFBGRUNfd3JpdGVfYWNjZXNzID8gJ1cnIDogJ3InLAorICAgICAgICAgICAgZ3ct PnBmZWMgJiBQRkVDX3BhZ2VfcHJlc2VudCA/ICdQJyA6ICctJworICAgICAgICApOwogfQogCiAj ZW5kaWYgLyogX1hFTl9BU01fR1VFU1RfUFRfSCAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv YXNtLXg4Ni9wMm0uaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcDJtLmgKaW5kZXggNDcwZDI5ZC4u YmMxODlkMSAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wMm0uaAorKysgYi94ZW4v aW5jbHVkZS9hc20teDg2L3AybS5oCkBAIC02NzksNyArNjc5LDcgQEAgaW50IHAybV9zZXRfZW50 cnkoc3RydWN0IHAybV9kb21haW4gKnAybSwgdW5zaWduZWQgbG9uZyBnZm4sIG1mbl90IG1mbiwK IGV4dGVybiB2b2lkIHAybV9wdF9pbml0KHN0cnVjdCBwMm1fZG9tYWluICpwMm0pOwogCiB2b2lk ICptYXBfZG9tYWluX2dmbihzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtLCBnZm5fdCBnZm4sIG1mbl90 ICptZm4sCi0gICAgICAgICAgICAgICAgICAgICBwMm1fdHlwZV90ICpwMm10LCBwMm1fcXVlcnlf dCBxLCB1aW50MzJfdCAqcmMpOworICAgICAgICAgICAgICAgICAgICAgcDJtX3R5cGVfdCAqcDJt dCwgcDJtX3F1ZXJ5X3QgcSwgdWludDMyX3QgKnBmZWMpOwogCiAvKiBEZWJ1Z2dpbmcgYW5kIGF1 ZGl0aW5nIG9mIHRoZSBQMk0gY29kZT8gKi8KICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS94 ZW4vaW5jbHVkZS9hc20teDg2L3BhZ2UuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcGFnZS5oCmlu ZGV4IDQ2ZmFmZmMuLmJjNTk0NmIgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcGFn ZS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcGFnZS5oCkBAIC0zMTQsOSArMzE0LDYgQEAg dm9pZCBlZmlfdXBkYXRlX2w0X3BndGFibGUodW5zaWduZWQgaW50IGw0aWR4LCBsNF9wZ2VudHJ5 X3QpOwogI2RlZmluZSBfUEFHRV9QU0VfUEFUICBfQUMoMHgxMDAwLFUpCiAjZGVmaW5lIF9QQUdF X0FWQUlMX0hJR0ggKF9BQygweDdmZiwgVSkgPDwgMTIpCiAjZGVmaW5lIF9QQUdFX05YICAgICAg IChjcHVfaGFzX254ID8gX1BBR0VfTlhfQklUIDogMCkKLS8qIG5vbi1hcmNoaXRlY3R1cmFsIGZs YWdzICovCi0jZGVmaW5lIF9QQUdFX1BBR0VEICAgMHgyMDAwVQotI2RlZmluZSBfUEFHRV9TSEFS RUQgIDB4NDAwMFUKIAogLyoKICAqIERlYnVnIG9wdGlvbjogRW5zdXJlIHRoYXQgZ3JhbnRlZCBt YXBwaW5ncyBhcmUgbm90IGltcGxpY2l0bHkgdW5tYXBwZWQuCmRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS9hc20teDg2L3Byb2Nlc3Nvci5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3Iu aAppbmRleCBkM2JhOGVhLi43NTYzMmQ5IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2 L3Byb2Nlc3Nvci5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmgKQEAgLTcz LDEwICs3MywxMiBAQAogI2RlZmluZSBQRkVDX3Jlc2VydmVkX2JpdCAgIChfQUMoMSxVKSA8PCAz KQogI2RlZmluZSBQRkVDX2luc25fZmV0Y2ggICAgIChfQUMoMSxVKSA8PCA0KQogI2RlZmluZSBQ RkVDX3Byb3Rfa2V5ICAgICAgIChfQUMoMSxVKSA8PCA1KQorI2RlZmluZSBQRkVDX2FyY2hfbWFz ayAgICAgIChfQUMoMHhmZmZmLFUpKSAvKiBBcmNoaXRlY3R1cmFsIFBGRUMgdmFsdWVzLiAqLwog LyogSW50ZXJuYWxseSB1c2VkIG9ubHkgZmxhZ3MuICovCiAjZGVmaW5lIFBGRUNfcGFnZV9wYWdl ZCAgICAgKDFVPDwxNikKICNkZWZpbmUgUEZFQ19wYWdlX3NoYXJlZCAgICAoMVU8PDE3KQogI2Rl ZmluZSBQRkVDX2ltcGxpY2l0ICAgICAgICgxVTw8MTgpIC8qIFBhZ2V3YWxrIGlucHV0IGZvciBs ZHQvZ2R0L2lkdC90ciBhY2Nlc3Nlcy4gKi8KKyNkZWZpbmUgUEZFQ19zeW50aF9tYXNrICAgICAo flBGRUNfYXJjaF9tYXNrKSAvKiBTeW50aGV0aWMgUEZFQyB2YWx1ZXMuICovCiAKIC8qIE90aGVy IGV4Y2VwdGlvbiBlcnJvciBjb2RlIHZhbHVlcy4gKi8KICNkZWZpbmUgWDg2X1hFQ19FWFQgICAg ICAgICAoX0FDKDEsVSkgPDwgMCkKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYveDg2 XzY0L3BhZ2UuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYveDg2XzY0L3BhZ2UuaAppbmRleCA1YTYx M2JjLi4xYTZjYWU2IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3g4Nl82NC9wYWdl LmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni94ODZfNjQvcGFnZS5oCkBAIC0xNTIsMTIgKzE1 Miw2IEBAIHR5cGVkZWYgbDRfcGdlbnRyeV90IHJvb3RfcGdlbnRyeV90OwogI2RlZmluZSBfUEFH RV9HTlRUQUIgKDFVPDwyMikKIAogLyoKLSAqIEJpdCAyNCBvZiBhIDI0LWJpdCBmbGFnIG1hc2sh ICBUaGlzIGlzIG5vdCBhbnkgYml0IG9mIGEgcmVhbCBwdGUsCi0gKiBhbmQgaXMgb25seSB1c2Vk IGZvciBzaWduYWxsaW5nIGluIHZhcmlhYmxlcyB0aGF0IGNvbnRhaW4gZmxhZ3MuCi0gKi8KLSNk ZWZpbmUgX1BBR0VfSU5WQUxJRF9CSVQgKDFVPDwyNCkKLQotLyoKICAqIEJpdCAxMiBvZiBhIDI0 LWJpdCBmbGFnIG1hc2suIFRoaXMgY29ycmVzcG9uZHMgdG8gYml0IDUyIG9mIGEgcHRlLgogICog VGhpcyBpcyBuZWVkZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1c2VyIGFuZCBrZXJuZWwgUFRF cyBzaW5jZSBfUEFHRV9VU0VSCiAgKiBpcyBhc3NlcnRlZCBmb3IgYm90aC4KLS0gCjIuMS40CgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==