From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 15/31] x86/mm: split out PV grant table code Date: Thu, 17 Aug 2017 15:44:40 +0100 Message-ID: <20170817144456.18989-16-wei.liu2@citrix.com> References: <20170817144456.18989-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1diM4N-0001yT-1b for xen-devel@lists.xenproject.org; Thu, 17 Aug 2017 14:46:47 +0000 In-Reply-To: <20170817144456.18989-1-wei.liu2@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 , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9ncmFudF90YWJsZS5jLiBGaXggc29tZSBjb2Rpbmcgc3R5bGUg aXNzdWVzIHdoaWxlCm1vdmluZyBjb2RlLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxp dTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgICB8IDM2MyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3B2L01h a2VmaWxlICAgICAgfCAgIDEgKwogeGVuL2FyY2gveDg2L3B2L2dyYW50X3RhYmxlLmMgfCAzOTgg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5n ZWQsIDM5OSBpbnNlcnRpb25zKCspLCAzNjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgeGVuL2FyY2gveDg2L3B2L2dyYW50X3RhYmxlLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4IGM0MmRkNWY4ZjUuLjYzNTQ5Yjk4N2Mg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS5jCkBA IC0zNjAyLDM2OSArMzYwMiw2IEBAIGxvbmcgZG9fbW11X3VwZGF0ZSgKICAgICByZXR1cm4gcmM7 CiB9CiAKLQotc3RhdGljIGludCBjcmVhdGVfZ3JhbnRfcHRlX21hcHBpbmcoCi0gICAgdWludDY0 X3QgcHRlX2FkZHIsIGwxX3BnZW50cnlfdCBubDFlLCBzdHJ1Y3QgdmNwdSAqdikKLXsKLSAgICBp bnQgcmMgPSBHTlRTVF9va2F5OwotICAgIHZvaWQgKnZhOwotICAgIHVuc2lnbmVkIGxvbmcgZ21m biwgbWZuOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90IG9s MWU7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKLQotICAgIGlmICggIUlTX0FM SUdORUQocHRlX2FkZHIsIHNpemVvZihubDFlKSkgKQotICAgICAgICByZXR1cm4gR05UU1RfZ2Vu ZXJhbF9lcnJvcjsKLQotICAgIGFkanVzdF9ndWVzdF9sMWUobmwxZSwgZCk7Ci0KLSAgICBnbWZu ID0gcHRlX2FkZHIgPj4gUEFHRV9TSElGVDsKLSAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4o ZCwgZ21mbiwgTlVMTCwgUDJNX0FMTE9DKTsKLQotICAgIGlmICggdW5saWtlbHkoIXBhZ2UpICkK LSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ291bGQgbm90IGdldCBw YWdlIGZvciBub3JtYWwgdXBkYXRlXG4iKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxf ZXJyb3I7Ci0gICAgfQotCi0gICAgbWZuID0gcGFnZV90b19tZm4ocGFnZSk7Ci0gICAgdmEgPSBt YXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKLSAgICB2YSA9ICh2b2lkICopKCh1bnNpZ25lZCBs b25nKXZhICsgKCh1bnNpZ25lZCBsb25nKXB0ZV9hZGRyICYgflBBR0VfTUFTSykpOwotCi0gICAg aWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJh bF9lcnJvcjsKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgfQotCi0gICAgaWYgKCAocGFnZS0+ dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSAp Ci0gICAgewotICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAgICAgcmMgPSBHTlRTVF9n ZW5lcmFsX2Vycm9yOwotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICB9Ci0KLSAgICBvbDFlID0g KihsMV9wZ2VudHJ5X3QgKil2YTsKLSAgICBpZiAoICFVUERBVEVfRU5UUlkobDEsIChsMV9wZ2Vu dHJ5X3QgKil2YSwgb2wxZSwgbmwxZSwgbWZuLCB2LCAwKSApCi0gICAgewotICAgICAgICBwYWdl X3VubG9jayhwYWdlKTsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgICAg ICBnb3RvIGZhaWxlZDsKLSAgICB9Ci0KLSAgICBwYWdlX3VubG9jayhwYWdlKTsKLQotICAgIHB1 dF9wYWdlX2Zyb21fbDFlKG9sMWUsIGQpOwotCi0gZmFpbGVkOgotICAgIHVubWFwX2RvbWFpbl9w YWdlKHZhKTsKLSAgICBwdXRfcGFnZShwYWdlKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkZXN0cm95X2dyYW50X3B0ZV9tYXBwaW5nKAotICAgIHVpbnQ2NF90IGFkZHIsIHVu c2lnbmVkIGxvbmcgZnJhbWUsIHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgaW50IHJjID0gR05U U1Rfb2theTsKLSAgICB2b2lkICp2YTsKLSAgICB1bnNpZ25lZCBsb25nIGdtZm4sIG1mbjsKLSAg ICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIGwxX3BnZW50cnlfdCBvbDFlOwotCi0gICAg LyoKLSAgICAgKiBhZGRyIGNvbWVzIGZyb20gWGVuJ3MgYWN0aXZlX2VudHJ5IHRyYWNraW5nIHNv IGlzbid0IGd1ZXN0IGNvbnRyb2xsZWQsCi0gICAgICogYnV0IGl0IGhhZCBzdGlsbCBiZXR0ZXIg YmUgUFRFLWFsaWduZWQuCi0gICAgICovCi0gICAgaWYgKCAhSVNfQUxJR05FRChhZGRyLCBzaXpl b2Yob2wxZSkpICkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwotICAgICAg ICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0KLSAgICBnbWZuID0gYWRkciA+ PiBQQUdFX1NISUZUOwotICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihkLCBnbWZuLCBOVUxM LCBQMk1fQUxMT0MpOwotCi0gICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQotICAgIHsKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5vcm1h bCB1cGRhdGVcbiIpOwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9 Ci0KLSAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICB2YSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKG1mbikpOwotICAgIHZhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdmEgKyAoKHVu c2lnbmVkIGxvbmcpYWRkciAmIH5QQUdFX01BU0spKTsKLQotICAgIGlmICggIXBhZ2VfbG9jayhw YWdlKSApCi0gICAgewotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAg IGdvdG8gZmFpbGVkOwotICAgIH0KLQotICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZv ICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAg cGFnZV91bmxvY2socGFnZSk7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAg ICAgICAgZ290byBmYWlsZWQ7Ci0gICAgfQotCi0gICAgb2wxZSA9ICoobDFfcGdlbnRyeV90ICop dmE7Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3VwcGxpZWQgaXMg YWN0dWFsbHkgbWFwcGVkIHRvIGZyYW1lLiAqLwotICAgIGlmICggdW5saWtlbHkobDFlX2dldF9w Zm4ob2wxZSkgIT0gZnJhbWUpICkKLSAgICB7Ci0gICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwot ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgIlBURSBl bnRyeSAlIlBSSXB0ZSIgZm9yIGFkZHJlc3MgJSJQUkl4NjQiIGRvZXNuJ3QgbWF0Y2ggZnJhbWUg JWx4XG4iLAotICAgICAgICAgICAgICAgICBsMWVfZ2V0X2ludHB0ZShvbDFlKSwgYWRkciwgZnJh bWUpOwotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIGdvdG8gZmFp bGVkOwotICAgIH0KLQotICAgIC8qIERlbGV0ZSBwYWdldGFibGUgZW50cnkuICovCi0gICAgaWYg KCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobDFfcGdlbnRyeV90ICopdmEsIG9sMWUsIGwxZV9lbXB0eSgpLCBtZm4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGQtPnZjcHVbMF0gLyogQ2hhbmdlIGlmIHdlIGdvIHRv IHBlci12Y3B1IHNoYWRvd3MuICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw KSkgKQotICAgIHsKLSAgICAgICAgcGFnZV91bmxvY2socGFnZSk7Ci0gICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiQ2Fubm90IGRlbGV0ZSBQVEUgZW50cnkgYXQgJXBcbiIsIHZhKTsK LSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgICAgICBnb3RvIGZhaWxlZDsK LSAgICB9Ci0KLSAgICBwYWdlX3VubG9jayhwYWdlKTsKLQotIGZhaWxlZDoKLSAgICB1bm1hcF9k b21haW5fcGFnZSh2YSk7Ci0gICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgcmV0dXJuIHJjOwotfQot Ci0KLXN0YXRpYyBpbnQgY3JlYXRlX2dyYW50X3ZhX21hcHBpbmcoCi0gICAgdW5zaWduZWQgbG9u ZyB2YSwgbDFfcGdlbnRyeV90IG5sMWUsIHN0cnVjdCB2Y3B1ICp2KQotewotICAgIGwxX3BnZW50 cnlfdCAqcGwxZSwgb2wxZTsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwotICAg IHVuc2lnbmVkIGxvbmcgZ2wxbWZuOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKmwxcGc7Ci0gICAg aW50IG9rYXk7Ci0KLSAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOwotCi0gICAgcGwxZSA9 IHB2X21hcF9ndWVzdF9sMWUodmEsICZnbDFtZm4pOwotICAgIGlmICggIXBsMWUgKQotICAgIHsK LSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZmluZCBMMSBQVEUg Zm9yIGFkZHJlc3MgJWx4XG4iLCB2YSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vy cm9yOwotICAgIH0KLQotICAgIGlmICggIWdldF9wYWdlX2Zyb21fbWZuKF9tZm4oZ2wxbWZuKSwg Y3VycmVudC0+ZG9tYWluKSApCi0gICAgewotICAgICAgICBwdl91bm1hcF9ndWVzdF9sMWUocGwx ZSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIH0KLQotICAgIGwx cGcgPSBtZm5fdG9fcGFnZShnbDFtZm4pOwotICAgIGlmICggIXBhZ2VfbG9jayhsMXBnKSApCi0g ICAgewotICAgICAgICBwdXRfcGFnZShsMXBnKTsKLSAgICAgICAgcHZfdW5tYXBfZ3Vlc3RfbDFl KHBsMWUpOwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0KLSAg ICBpZiAoIChsMXBnLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9IFBHVF9s MV9wYWdlX3RhYmxlICkKLSAgICB7Ci0gICAgICAgIHBhZ2VfdW5sb2NrKGwxcGcpOwotICAgICAg ICBwdXRfcGFnZShsMXBnKTsKLSAgICAgICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOwotICAg ICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0KLSAgICBvbDFlID0gKnBs MWU7Ci0gICAgb2theSA9IFVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgZ2wxbWZu LCB2LCAwKTsKLQotICAgIHBhZ2VfdW5sb2NrKGwxcGcpOwotICAgIHB1dF9wYWdlKGwxcGcpOwot ICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKLQotICAgIGlmICggb2theSApCi0gICAgICAg IHB1dF9wYWdlX2Zyb21fbDFlKG9sMWUsIGQpOwotCi0gICAgcmV0dXJuIG9rYXkgPyBHTlRTVF9v a2F5IDogR05UU1RfZ2VuZXJhbF9lcnJvcjsKLX0KLQotc3RhdGljIGludCByZXBsYWNlX2dyYW50 X3ZhX21hcHBpbmcoCi0gICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1l LCBsMV9wZ2VudHJ5X3QgbmwxZSwgc3RydWN0IHZjcHUgKnYpCi17Ci0gICAgbDFfcGdlbnRyeV90 ICpwbDFlLCBvbDFlOwotICAgIHVuc2lnbmVkIGxvbmcgZ2wxbWZuOwotICAgIHN0cnVjdCBwYWdl X2luZm8gKmwxcGc7Ci0gICAgaW50IHJjID0gMDsKLQotICAgIHBsMWUgPSBwdl9tYXBfZ3Vlc3Rf bDFlKGFkZHIsICZnbDFtZm4pOwotICAgIGlmICggIXBsMWUgKQotICAgIHsKLSAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZmluZCBMMSBQVEUgZm9yIGFkZHJlc3Mg JWx4XG4iLCBhZGRyKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAg fQotCi0gICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4oX21mbihnbDFtZm4pLCBjdXJyZW50LT5k b21haW4pICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAg ICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7Ci0g ICAgaWYgKCAhcGFnZV9sb2NrKGwxcGcpICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2Vu ZXJhbF9lcnJvcjsKLSAgICAgICAgcHV0X3BhZ2UobDFwZyk7Ci0gICAgICAgIGdvdG8gb3V0Owot ICAgIH0KLQotICAgIGlmICggKGwxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFz aykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5l cmFsX2Vycm9yOwotICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OwotICAgIH0KLQotICAgIG9s MWUgPSAqcGwxZTsKLQotICAgIC8qIENoZWNrIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBzdXBw bGllZCBpcyBhY3R1YWxseSBtYXBwZWQgdG8gZnJhbWUuICovCi0gICAgaWYgKCB1bmxpa2VseShs MWVfZ2V0X3BmbihvbDFlKSAhPSBmcmFtZSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICJQVEUgZW50cnkgJWx4IGZvciBhZGRyZXNz ICVseCBkb2Vzbid0IG1hdGNoIGZyYW1lICVseFxuIiwKLSAgICAgICAgICAgICAgICAgbDFlX2dl dF9wZm4ob2wxZSksIGFkZHIsIGZyYW1lKTsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vy cm9yOwotICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OwotICAgIH0KLQotICAgIC8qIERlbGV0 ZSBwYWdldGFibGUgZW50cnkuICovCi0gICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwx LCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHYsIDApKSApCi0gICAgewotICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywgIkNhbm5vdCBkZWxldGUgUFRFIGVudHJ5IGF0ICVwXG4iLCBw bDFlKTsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgICAgICBnb3RvIHVu bG9ja19hbmRfb3V0OwotICAgIH0KLQotIHVubG9ja19hbmRfb3V0OgotICAgIHBhZ2VfdW5sb2Nr KGwxcGcpOwotICAgIHB1dF9wYWdlKGwxcGcpOwotIG91dDoKLSAgICBwdl91bm1hcF9ndWVzdF9s MWUocGwxZSk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRlc3Ryb3lfZ3JhbnRf dmFfbWFwcGluZygKLSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUs IHN0cnVjdCB2Y3B1ICp2KQotewotICAgIHJldHVybiByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmco YWRkciwgZnJhbWUsIGwxZV9lbXB0eSgpLCB2KTsKLX0KLQotaW50IGNyZWF0ZV9ncmFudF9wdl9t YXBwaW5nKHVpbnQ2NF90IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgY2FjaGVfZmxh Z3MpCi17Ci0gICAgbDFfcGdlbnRyeV90IHB0ZTsKLSAgICB1aW50MzJfdCBncmFudF9wdGVfZmxh Z3M7Ci0KLSAgICBncmFudF9wdGVfZmxhZ3MgPQotICAgICAgICBfUEFHRV9QUkVTRU5UIHwgX1BB R0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0dOVFRBQjsKLSAgICBpZiAoIGNwdV9o YXNfbnggKQotICAgICAgICBncmFudF9wdGVfZmxhZ3MgfD0gX1BBR0VfTlhfQklUOwotCi0gICAg cHRlID0gbDFlX2Zyb21fcGZuKGZyYW1lLCBncmFudF9wdGVfZmxhZ3MpOwotICAgIGlmICggKGZs YWdzICYgR05UTUFQX2FwcGxpY2F0aW9uX21hcCkgKQotICAgICAgICBsMWVfYWRkX2ZsYWdzKHB0 ZSxfUEFHRV9VU0VSKTsKLSAgICBpZiAoICEoZmxhZ3MgJiBHTlRNQVBfcmVhZG9ubHkpICkKLSAg ICAgICAgbDFlX2FkZF9mbGFncyhwdGUsX1BBR0VfUlcpOwotCi0gICAgbDFlX2FkZF9mbGFncyhw dGUsCi0gICAgICAgICAgICAgICAgICAoKGZsYWdzID4+IF9HTlRNQVBfZ3Vlc3RfYXZhaWwwKSAq IF9QQUdFX0FWQUlMMCkKLSAgICAgICAgICAgICAgICAgICAmIF9QQUdFX0FWQUlMKTsKLQotICAg IGwxZV9hZGRfZmxhZ3MocHRlLCBjYWNoZWF0dHJfdG9fcHRlX2ZsYWdzKGNhY2hlX2ZsYWdzID4+ IDUpKTsKLQotICAgIGlmICggZmxhZ3MgJiBHTlRNQVBfY29udGFpbnNfcHRlICkKLSAgICAgICAg cmV0dXJuIGNyZWF0ZV9ncmFudF9wdGVfbWFwcGluZyhhZGRyLCBwdGUsIGN1cnJlbnQpOwotICAg IHJldHVybiBjcmVhdGVfZ3JhbnRfdmFfbWFwcGluZyhhZGRyLCBwdGUsIGN1cnJlbnQpOwotfQot Ci1pbnQgcmVwbGFjZV9ncmFudF9wdl9tYXBwaW5nKHVpbnQ2NF90IGFkZHIsIHVuc2lnbmVkIGxv bmcgZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG5ld19hZGRy LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50 OwotICAgIGwxX3BnZW50cnlfdCAqcGwxZSwgb2wxZTsKLSAgICB1bnNpZ25lZCBsb25nIGdsMW1m bjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpsMXBnOwotICAgIGludCByYzsKLQotICAgIGlmICgg ZmxhZ3MgJiBHTlRNQVBfY29udGFpbnNfcHRlICkKLSAgICB7Ci0gICAgICAgIGlmICggIW5ld19h ZGRyICkKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95X2dyYW50X3B0ZV9tYXBwaW5nKGFkZHIs IGZyYW1lLCBjdXJyLT5kb21haW4pOwotCi0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vy cm9yOwotICAgIH0KLQotICAgIGlmICggIW5ld19hZGRyICkKLSAgICAgICAgcmV0dXJuIGRlc3Ry b3lfZ3JhbnRfdmFfbWFwcGluZyhhZGRyLCBmcmFtZSwgY3Vycik7Ci0KLSAgICBwbDFlID0gcHZf bWFwX2d1ZXN0X2wxZShuZXdfYWRkciwgJmdsMW1mbik7Ci0gICAgaWYgKCAhcGwxZSApCi0gICAg ewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgIkNv dWxkIG5vdCBmaW5kIEwxIFBURSBmb3IgYWRkcmVzcyAlIlBSSXg2NCJcbiIsIG5ld19hZGRyKTsK LSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotCi0gICAgaWYgKCAh Z2V0X3BhZ2VfZnJvbV9tZm4oX21mbihnbDFtZm4pLCBjdXJyZW50LT5kb21haW4pICkKLSAgICB7 Ci0gICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKLSAgICAgICAgcmV0dXJuIEdOVFNU X2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotCi0gICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7 Ci0gICAgaWYgKCAhcGFnZV9sb2NrKGwxcGcpICkKLSAgICB7Ci0gICAgICAgIHB1dF9wYWdlKGwx cGcpOwotICAgICAgICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7Ci0gICAgICAgIHJldHVybiBH TlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIH0KLQotICAgIGlmICggKGwxcGctPnUuaW51c2UudHlw ZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAg ICAgICAgcGFnZV91bmxvY2sobDFwZyk7Ci0gICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAg ICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFs X2Vycm9yOwotICAgIH0KLQotICAgIG9sMWUgPSAqcGwxZTsKLQotICAgIGlmICggdW5saWtlbHko IVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbDFlX2VtcHR5KCksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdsMW1mbiwgY3VyciwgMCkpICkKLSAgICB7Ci0gICAgICAgIHBh Z2VfdW5sb2NrKGwxcGcpOwotICAgICAgICBwdXRfcGFnZShsMXBnKTsKLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsICJDYW5ub3QgZGVsZXRlIFBURSBlbnRyeSBhdCAlcFxuIiwgcGwx ZSk7Ci0gICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKLSAgICAgICAgcmV0dXJuIEdO VFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotCi0gICAgcGFnZV91bmxvY2sobDFwZyk7Ci0gICAg cHV0X3BhZ2UobDFwZyk7Ci0gICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOwotCi0gICAgcmMg PSByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUsIG9sMWUsIGN1cnIpOwotICAg IGlmICggcmMgKQotICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBjdXJyLT5kb21haW4p OwotCi0gICAgcmV0dXJuIHJjOwotfQotCiBpbnQgZG9uYXRlX3BhZ2UoCiAgICAgc3RydWN0IGRv bWFpbiAqZCwgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgaW50IG1lbWZsYWdzKQog ewpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L3B2 L01ha2VmaWxlCmluZGV4IDAxNmIxYjZlOGYuLjUwMWM3NjZjYzIgMTAwNjQ0Ci0tLSBhL3hlbi9h cmNoL3g4Ni9wdi9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKQEAgLTYs NiArNiw3IEBAIG9iai15ICs9IGVtdWwtaW52LW9wLm8KIG9iai15ICs9IGVtdWwtbW1pby1vcC5v CiBvYmoteSArPSBlbXVsLXByaXYtb3Aubwogb2JqLXkgKz0gZW11bC1wdHdyLW9wLm8KK29iai15 ICs9IGdyYW50X3RhYmxlLm8KIG9iai15ICs9IGh5cGVyY2FsbC5vCiBvYmoteSArPSBpcmV0Lm8K IG9iai15ICs9IG1pc2MtaHlwZXJjYWxscy5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYv Z3JhbnRfdGFibGUuYyBiL3hlbi9hcmNoL3g4Ni9wdi9ncmFudF90YWJsZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjM1ZDA0NWI5MGQKLS0tIC9kZXYvbnVsbAorKysg Yi94ZW4vYXJjaC94ODYvcHYvZ3JhbnRfdGFibGUuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICogYXJjaC94ODYvcHYvZ3JhbnRfdGFibGUuYworICoKKyAqIEdy YW50IHRhYmxlIGludGVyZmFjZXMgZm9yIFBWIGd1ZXN0cworICoKKyAqIENvcHlyaWdodCAoQykg MjAxNyBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxw dWJsaWMvZ3JhbnRfdGFibGUuaD4KKworI2luY2x1ZGUgPGFzbS9wMm0uaD4KKyNpbmNsdWRlIDxh c20vcHYvbW0uaD4KKworc3RhdGljIGludCBjcmVhdGVfZ3JhbnRfcHRlX21hcHBpbmcodWludDY0 X3QgcHRlX2FkZHIsIGwxX3BnZW50cnlfdCBubDFlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHZjcHUgKnYpCit7CisgICAgaW50IHJjID0gR05UU1Rfb2theTsK KyAgICB2b2lkICp2YTsKKyAgICB1bnNpZ25lZCBsb25nIGdtZm4sIG1mbjsKKyAgICBzdHJ1Y3Qg cGFnZV9pbmZvICpwYWdlOworICAgIGwxX3BnZW50cnlfdCBvbDFlOworICAgIHN0cnVjdCBkb21h aW4gKmQgPSB2LT5kb21haW47CisKKyAgICBpZiAoICFJU19BTElHTkVEKHB0ZV9hZGRyLCBzaXpl b2YobmwxZSkpICkKKyAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisKKyAgICBh ZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOworCisgICAgZ21mbiA9IHB0ZV9hZGRyID4+IFBBR0Vf U0hJRlQ7CisgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGdtZm4sIE5VTEwsIFAyTV9B TExPQyk7CisKKyAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCisgICAgeworICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywgIkNvdWxkIG5vdCBnZXQgcGFnZSBmb3Igbm9ybWFsIHVwZGF0 ZVxuIik7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0KKworICAg IG1mbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAgIHZhID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4o bWZuKSk7CisgICAgdmEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl2YSArICgodW5zaWduZWQg bG9uZylwdGVfYWRkciAmIH5QQUdFX01BU0spKTsKKworICAgIGlmICggIXBhZ2VfbG9jayhwYWdl KSApCisgICAgeworICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgICAgIGdv dG8gZmFpbGVkOworICAgIH0KKworICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYg UEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgIHsKKyAgICAgICAgcGFn ZV91bmxvY2socGFnZSk7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAg ICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgICAgb2wxZSA9ICoobDFfcGdlbnRyeV90ICopdmE7 CisgICAgaWYgKCAhVVBEQVRFX0VOVFJZKGwxLCAobDFfcGdlbnRyeV90ICopdmEsIG9sMWUsIG5s MWUsIG1mbiwgdiwgMCkgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAg ICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAg fQorCisgICAgcGFnZV91bmxvY2socGFnZSk7CisKKyAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFl LCBkKTsKKworIGZhaWxlZDoKKyAgICB1bm1hcF9kb21haW5fcGFnZSh2YSk7CisgICAgcHV0X3Bh Z2UocGFnZSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZGVzdHJveV9ncmFu dF9wdGVfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmQpCit7CisgICAg aW50IHJjID0gR05UU1Rfb2theTsKKyAgICB2b2lkICp2YTsKKyAgICB1bnNpZ25lZCBsb25nIGdt Zm4sIG1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIGwxX3BnZW50cnlfdCBv bDFlOworCisgICAgLyoKKyAgICAgKiBhZGRyIGNvbWVzIGZyb20gWGVuJ3MgYWN0aXZlX2VudHJ5 IHRyYWNraW5nIHNvIGlzbid0IGd1ZXN0IGNvbnRyb2xsZWQsCisgICAgICogYnV0IGl0IGhhZCBz dGlsbCBiZXR0ZXIgYmUgUFRFLWFsaWduZWQuCisgICAgICovCisgICAgaWYgKCAhSVNfQUxJR05F RChhZGRyLCBzaXplb2Yob2wxZSkpICkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlJFQUNIQUJM RSgpOworICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICB9CisKKyAgICBn bWZuID0gYWRkciA+PiBQQUdFX1NISUZUOworICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihk LCBnbWZuLCBOVUxMLCBQMk1fQUxMT0MpOworCisgICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQor ICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZ2V0IHBh Z2UgZm9yIG5vcm1hbCB1cGRhdGVcbiIpOworICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9l cnJvcjsKKyAgICB9CisKKyAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKyAgICB2YSA9IG1h cF9kb21haW5fcGFnZShfbWZuKG1mbikpOworICAgIHZhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxv bmcpdmEgKyAoKHVuc2lnbmVkIGxvbmcpYWRkciAmIH5QQUdFX01BU0spKTsKKworICAgIGlmICgg IXBhZ2VfbG9jayhwYWdlKSApCisgICAgeworICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJy b3I7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICAgIGlmICggKHBhZ2UtPnUuaW51 c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAg IHsKKyAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJh bF9lcnJvcjsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgICAgb2wxZSA9ICoobDFf cGdlbnRyeV90ICopdmE7CisKKyAgICAvKiBDaGVjayB0aGF0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mg c3VwcGxpZWQgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIGZyYW1lLiAqLworICAgIGlmICggdW5saWtl bHkobDFlX2dldF9wZm4ob2wxZSkgIT0gZnJhbWUpICkKKyAgICB7CisgICAgICAgIHBhZ2VfdW5s b2NrKHBhZ2UpOworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAg ICAgICAgIlBURSBlbnRyeSAlIlBSSXB0ZSIgZm9yIGFkZHJlc3MgJSJQUkl4NjQiIGRvZXNuJ3Qg bWF0Y2ggZnJhbWUgJWx4XG4iLAorICAgICAgICAgICAgICAgICBsMWVfZ2V0X2ludHB0ZShvbDFl KSwgYWRkciwgZnJhbWUpOworICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAg ICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICAgIC8qIERlbGV0ZSBwYWdldGFibGUgZW50cnku ICovCisgICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwxLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobDFfcGdlbnRyeV90ICopdmEsIG9sMWUsIGwxZV9lbXB0eSgpLCBt Zm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPnZjcHVbMF0gLyogQ2hhbmdl IGlmIHdlIGdvIHRvIHBlci12Y3B1IHNoYWRvd3MuICovLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwKSkgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ2Fubm90IGRlbGV0ZSBQVEUgZW50cnkgYXQg JXBcbiIsIHZhKTsKKyAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBn b3RvIGZhaWxlZDsKKyAgICB9CisKKyAgICBwYWdlX3VubG9jayhwYWdlKTsKKworIGZhaWxlZDoK KyAgICB1bm1hcF9kb21haW5fcGFnZSh2YSk7CisgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgcmV0 dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9ncmFudF92YV9tYXBwaW5nKHVuc2lnbmVk IGxvbmcgdmEsIGwxX3BnZW50cnlfdCBubDFlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdmNwdSAqdikKK3sKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWUsIG9sMWU7 CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAgICB1bnNpZ25lZCBsb25nIGds MW1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpsMXBnOworICAgIGludCBva2F5OworCisgICAg YWRqdXN0X2d1ZXN0X2wxZShubDFlLCBkKTsKKworICAgIHBsMWUgPSBwdl9tYXBfZ3Vlc3RfbDFl KHZhLCAmZ2wxbWZuKTsKKyAgICBpZiAoICFwbDFlICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiQ291bGQgbm90IGZpbmQgTDEgUFRFIGZvciBhZGRyZXNzICVseFxu IiwgdmEpOworICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICB9CisKKyAg ICBpZiAoICFnZXRfcGFnZV9mcm9tX21mbihfbWZuKGdsMW1mbiksIGN1cnJlbnQtPmRvbWFpbikg KQorICAgIHsKKyAgICAgICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOworICAgICAgICByZXR1 cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICB9CisKKyAgICBsMXBnID0gbWZuX3RvX3BhZ2Uo Z2wxbWZuKTsKKyAgICBpZiAoICFwYWdlX2xvY2sobDFwZykgKQorICAgIHsKKyAgICAgICAgcHV0 X3BhZ2UobDFwZyk7CisgICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKyAgICAgICAg cmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgaWYgKCAobDFwZy0+dS5p bnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCisg ICAgeworICAgICAgICBwYWdlX3VubG9jayhsMXBnKTsKKyAgICAgICAgcHV0X3BhZ2UobDFwZyk7 CisgICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdOVFNU X2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgb2wxZSA9ICpwbDFlOworICAgIG9rYXkgPSBV UERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgdiwgMCk7CisKKyAgICBw YWdlX3VubG9jayhsMXBnKTsKKyAgICBwdXRfcGFnZShsMXBnKTsKKyAgICBwdl91bm1hcF9ndWVz dF9sMWUocGwxZSk7CisKKyAgICBpZiAoIG9rYXkgKQorICAgICAgICBwdXRfcGFnZV9mcm9tX2wx ZShvbDFlLCBkKTsKKworICAgIHJldHVybiBva2F5ID8gR05UU1Rfb2theSA6IEdOVFNUX2dlbmVy YWxfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgcmVwbGFjZV9ncmFudF92YV9tYXBwaW5nKHVuc2ln bmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGwxX3BnZW50cnlfdCBubDFlLCBzdHJ1Y3QgdmNwdSAqdikKK3sKKyAg ICBsMV9wZ2VudHJ5X3QgKnBsMWUsIG9sMWU7CisgICAgdW5zaWduZWQgbG9uZyBnbDFtZm47Cisg ICAgc3RydWN0IHBhZ2VfaW5mbyAqbDFwZzsKKyAgICBpbnQgcmMgPSAwOworCisgICAgcGwxZSA9 IHB2X21hcF9ndWVzdF9sMWUoYWRkciwgJmdsMW1mbik7CisgICAgaWYgKCAhcGwxZSApCisgICAg eworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNvdWxkIG5vdCBmaW5kIEwxIFBU RSBmb3IgYWRkcmVzcyAlbHhcbiIsIGFkZHIpOworICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJh bF9lcnJvcjsKKyAgICB9CisKKyAgICBpZiAoICFnZXRfcGFnZV9mcm9tX21mbihfbWZuKGdsMW1m biksIGN1cnJlbnQtPmRvbWFpbikgKQorICAgIHsKKyAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFs X2Vycm9yOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsMXBnID0gbWZuX3RvX3Bh Z2UoZ2wxbWZuKTsKKyAgICBpZiAoICFwYWdlX2xvY2sobDFwZykgKQorICAgIHsKKyAgICAgICAg cmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBwdXRfcGFnZShsMXBnKTsKKyAgICAg ICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKCAobDFwZy0+dS5pbnVzZS50eXBlX2luZm8g JiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCisgICAgeworICAgICAgICBy YyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgICAgIGdvdG8gdW5sb2NrX2FuZF9vdXQ7Cisg ICAgfQorCisgICAgb2wxZSA9ICpwbDFlOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgdmlydHVh bCBhZGRyZXNzIHN1cHBsaWVkIGlzIGFjdHVhbGx5IG1hcHBlZCB0byBmcmFtZS4gKi8KKyAgICBp ZiAoIHVubGlrZWx5KGwxZV9nZXRfcGZuKG9sMWUpICE9IGZyYW1lKSApCisgICAgeworICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgIlBURSBlbnRyeSAl bHggZm9yIGFkZHJlc3MgJWx4IGRvZXNuJ3QgbWF0Y2ggZnJhbWUgJWx4XG4iLAorICAgICAgICAg ICAgICAgICBsMWVfZ2V0X3BmbihvbDFlKSwgYWRkciwgZnJhbWUpOworICAgICAgICByYyA9IEdO VFNUX2dlbmVyYWxfZXJyb3I7CisgICAgICAgIGdvdG8gdW5sb2NrX2FuZF9vdXQ7CisgICAgfQor CisgICAgLyogRGVsZXRlIHBhZ2V0YWJsZSBlbnRyeS4gKi8KKyAgICBpZiAoIHVubGlrZWx5KCFV UERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgdiwgMCkpICkKKyAgICB7 CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ2Fubm90IGRlbGV0ZSBQVEUgZW50 cnkgYXQgJXBcbiIsIHBsMWUpOworICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Cisg ICAgICAgIGdvdG8gdW5sb2NrX2FuZF9vdXQ7CisgICAgfQorCisgdW5sb2NrX2FuZF9vdXQ6Cisg ICAgcGFnZV91bmxvY2sobDFwZyk7CisgICAgcHV0X3BhZ2UobDFwZyk7Cisgb3V0OgorICAgIHB2 X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg ZGVzdHJveV9ncmFudF92YV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9u ZyBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1 ICp2KQoreworICAgIHJldHVybiByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUs IGwxZV9lbXB0eSgpLCB2KTsKK30KKworaW50IGNyZWF0ZV9ncmFudF9wdl9tYXBwaW5nKHVpbnQ2 NF90IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgY2FjaGVfZmxhZ3MpCit7CisgICAg bDFfcGdlbnRyeV90IHB0ZTsKKyAgICB1aW50MzJfdCBncmFudF9wdGVfZmxhZ3M7CisKKyAgICBn cmFudF9wdGVfZmxhZ3MgPQorICAgICAgICBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQg fCBfUEFHRV9ESVJUWSB8IF9QQUdFX0dOVFRBQjsKKyAgICBpZiAoIGNwdV9oYXNfbnggKQorICAg ICAgICBncmFudF9wdGVfZmxhZ3MgfD0gX1BBR0VfTlhfQklUOworCisgICAgcHRlID0gbDFlX2Zy b21fcGZuKGZyYW1lLCBncmFudF9wdGVfZmxhZ3MpOworICAgIGlmICggKGZsYWdzICYgR05UTUFQ X2FwcGxpY2F0aW9uX21hcCkgKQorICAgICAgICBsMWVfYWRkX2ZsYWdzKHB0ZSxfUEFHRV9VU0VS KTsKKyAgICBpZiAoICEoZmxhZ3MgJiBHTlRNQVBfcmVhZG9ubHkpICkKKyAgICAgICAgbDFlX2Fk ZF9mbGFncyhwdGUsX1BBR0VfUlcpOworCisgICAgbDFlX2FkZF9mbGFncyhwdGUsCisgICAgICAg ICAgICAgICAgICAoKGZsYWdzID4+IF9HTlRNQVBfZ3Vlc3RfYXZhaWwwKSAqIF9QQUdFX0FWQUlM MCkKKyAgICAgICAgICAgICAgICAgICAmIF9QQUdFX0FWQUlMKTsKKworICAgIGwxZV9hZGRfZmxh Z3MocHRlLCBjYWNoZWF0dHJfdG9fcHRlX2ZsYWdzKGNhY2hlX2ZsYWdzID4+IDUpKTsKKworICAg IGlmICggZmxhZ3MgJiBHTlRNQVBfY29udGFpbnNfcHRlICkKKyAgICAgICAgcmV0dXJuIGNyZWF0 ZV9ncmFudF9wdGVfbWFwcGluZyhhZGRyLCBwdGUsIGN1cnJlbnQpOworICAgIHJldHVybiBjcmVh dGVfZ3JhbnRfdmFfbWFwcGluZyhhZGRyLCBwdGUsIGN1cnJlbnQpOworfQorCitpbnQgcmVwbGFj ZV9ncmFudF9wdl9tYXBwaW5nKHVpbnQ2NF90IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG5ld19hZGRyLCB1bnNpZ25lZCBp bnQgZmxhZ3MpCit7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIGwxX3Bn ZW50cnlfdCAqcGwxZSwgb2wxZTsKKyAgICB1bnNpZ25lZCBsb25nIGdsMW1mbjsKKyAgICBzdHJ1 Y3QgcGFnZV9pbmZvICpsMXBnOworICAgIGludCByYzsKKworICAgIGlmICggZmxhZ3MgJiBHTlRN QVBfY29udGFpbnNfcHRlICkKKyAgICB7CisgICAgICAgIGlmICggIW5ld19hZGRyICkKKyAgICAg ICAgICAgIHJldHVybiBkZXN0cm95X2dyYW50X3B0ZV9tYXBwaW5nKGFkZHIsIGZyYW1lLCBjdXJy LT5kb21haW4pOworCisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0K KworICAgIGlmICggIW5ld19hZGRyICkKKyAgICAgICAgcmV0dXJuIGRlc3Ryb3lfZ3JhbnRfdmFf bWFwcGluZyhhZGRyLCBmcmFtZSwgY3Vycik7CisKKyAgICBwbDFlID0gcHZfbWFwX2d1ZXN0X2wx ZShuZXdfYWRkciwgJmdsMW1mbik7CisgICAgaWYgKCAhcGwxZSApCisgICAgeworICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5k IEwxIFBURSBmb3IgYWRkcmVzcyAlIlBSSXg2NCJcbiIsIG5ld19hZGRyKTsKKyAgICAgICAgcmV0 dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgaWYgKCAhZ2V0X3BhZ2VfZnJv bV9tZm4oX21mbihnbDFtZm4pLCBjdXJyZW50LT5kb21haW4pICkKKyAgICB7CisgICAgICAgIHB2 X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJy b3I7CisgICAgfQorCisgICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7CisgICAgaWYgKCAh cGFnZV9sb2NrKGwxcGcpICkKKyAgICB7CisgICAgICAgIHB1dF9wYWdlKGwxcGcpOworICAgICAg ICBwdl91bm1hcF9ndWVzdF9sMWUocGwxZSk7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFs X2Vycm9yOworICAgIH0KKworICAgIGlmICggKGwxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdU X3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgIHsKKyAgICAgICAgcGFnZV91 bmxvY2sobDFwZyk7CisgICAgICAgIHB1dF9wYWdlKGwxcGcpOworICAgICAgICBwdl91bm1hcF9n dWVzdF9sMWUocGwxZSk7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAg IH0KKworICAgIG9sMWUgPSAqcGwxZTsKKworICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRS WShsMSwgcGwxZSwgb2wxZSwgbDFlX2VtcHR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdsMW1mbiwgY3VyciwgMCkpICkKKyAgICB7CisgICAgICAgIHBhZ2VfdW5sb2NrKGwx cGcpOworICAgICAgICBwdXRfcGFnZShsMXBnKTsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJDYW5ub3QgZGVsZXRlIFBURSBlbnRyeSBhdCAlcFxuIiwgcGwxZSk7CisgICAgICAg IHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxf ZXJyb3I7CisgICAgfQorCisgICAgcGFnZV91bmxvY2sobDFwZyk7CisgICAgcHV0X3BhZ2UobDFw Zyk7CisgICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOworCisgICAgcmMgPSByZXBsYWNlX2dy YW50X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUsIG9sMWUsIGN1cnIpOworICAgIGlmICggcmMgKQor ICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBjdXJyLT5kb21haW4pOworCisgICAgcmV0 dXJuIHJjOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1m aWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAor ICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMTEuMAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=