From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 2/2] drm/i915: move pipe config compare to intel_verify.c Date: Wed, 15 May 2019 11:36:33 +0200 Message-ID: <20190515093633.GH17751@phenom.ffwll.local> References: <20190416103603.8266-1-jani.nikula@intel.com> <20190416103603.8266-2-jani.nikula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3FEF689780 for ; Wed, 15 May 2019 09:36:38 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id b8so3172264edm.11 for ; Wed, 15 May 2019 02:36:38 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190416103603.8266-2-jani.nikula@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBBcHIgMTYsIDIwMTkgYXQgMDE6MzY6MDNQTSArMDMwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gU2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4K CnBpcGVfY29uZmlnX2NvbXBhcmUgaXMgdXNlZCBib3RoIGZvciB0aGUgYXRvbWljX2NoZWNrIGxv Z2ljLCBhbmQgdGhlCnZlcmlmaWVyLiBJIHRoaW5rIHN0dWZmaW5nIGl0IGludG8gdGhlIHZlcmlm aWVyIGNvZGUgaXMgbWlzcGxhY2luZyBpdCBhcwptdWNoIGFzIGUuZy4gc3R1ZmZpbmcgaXQgaW50 byBpbnRlbF9hdG9taWNfY2hlY2suYyBmaWxlLgoKV2hhdCBJJ2QgZG8gaW5zdGVhZCBpcyBjcmVh dGUgYW4gaW50ZWxfY3J0Y19zdGF0ZS5baGNdIHBhaXIgYW5kIGNvbGxlY3QKZXZlcnl0aGluZyB0 aGF0IG9wZXJhdGVzIG9uIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlLCBwbHVzIHRoZSBzdHJ1Y3QK aXRzZWxmLiBPZiBjb3Vyc2Ugd2UgbWlnaHQgd2FudCB0byBzcGxpdCBvdXQgc3BlY2lmaWMgc3Vi dG9waWNzIGZyb20gdGhpcywKbGlrZSBlLmcuIHRoZSBmYWlybHkgbWFzc2l2ZSBhbW91bnQgb2Yg Y29kZSByZWxhdGVkIHRvIGNvbXB1dGUgY2xvY2sKc3RhdGUuCi1EYW5pZWwKCj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8IDQ3MSArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgICA5 ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5jICB8IDQ2NSArKysrKysr KysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJpZnku aCAgfCAgIDggKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDQ3OCBpbnNlcnRpb25zKCspLCA0NzUgZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IDMx YTkzMS4uMTQ4OTlmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBA IC0yMDIsOSArMjAyLDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX2N6Y2xrKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCURSTV9ERUJVR19EUklWRVIoIkNaIGNsb2Nr IHJhdGU6ICVkIGtIelxuIiwgZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgaW5saW5lIHUzMiAvKiB1bml0cyBvZiAxMDBNSHogKi8KPiAtaW50ZWxfZmRpX2xpbmtfZnJl cShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiArLyogdW5pdHMgb2YgMTAwTUh6ICov Cj4gK3UzMiBpbnRlbF9mZGlfbGlua19mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiArCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+ ICB7Cj4gIAlpZiAoSEFTX0RESShkZXZfcHJpdikpCj4gIAkJcmV0dXJuIHBpcGVfY29uZmlnLT5w b3J0X2Nsb2NrOyAvKiBTUExMICovCj4gQEAgLTExOTA0LDQ3MSArMTE5MDQsNiBAQCBpbnRlbF9t b2Rlc2V0X3BpcGVfY29uZmlnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCXJldHVybiAwOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgYm9vbCBpbnRlbF9mdXp6eV9jbG9ja19jaGVjayhpbnQgY2xvY2sx LCBpbnQgY2xvY2syKQo+IC17Cj4gLQlpbnQgZGlmZjsKPiAtCj4gLQlpZiAoY2xvY2sxID09IGNs b2NrMikKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCj4gLQlpZiAoIWNsb2NrMSB8fCAhY2xvY2syKQo+ IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQlkaWZmID0gYWJzKGNsb2NrMSAtIGNsb2NrMik7Cj4g LQo+IC0JaWYgKCgoKChkaWZmICsgY2xvY2sxICsgY2xvY2syKSAqIDEwMCkpIC8gKGNsb2NrMSAr IGNsb2NrMikpIDwgMTA1KQo+IC0JCXJldHVybiB0cnVlOwo+IC0KPiAtCXJldHVybiBmYWxzZTsK PiAtfQo+IC0KPiAtc3RhdGljIGJvb2wKPiAtaW50ZWxfY29tcGFyZV9tX24odW5zaWduZWQgaW50 IG0sIHVuc2lnbmVkIGludCBuLAo+IC0JCSAgdW5zaWduZWQgaW50IG0yLCB1bnNpZ25lZCBpbnQg bjIsCj4gLQkJICBib29sIGV4YWN0KQo+IC17Cj4gLQlpZiAobSA9PSBtMiAmJiBuID09IG4yKQo+ IC0JCXJldHVybiB0cnVlOwo+IC0KPiAtCWlmIChleGFjdCB8fCAhbSB8fCAhbiB8fCAhbTIgfHwg IW4yKQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQlCVUlMRF9CVUdfT04oREFUQV9MSU5LX01f Tl9NQVNLID4gSU5UX01BWCk7Cj4gLQo+IC0JaWYgKG4gPiBuMikgewo+IC0JCXdoaWxlIChuID4g bjIpIHsKPiAtCQkJbTIgPDw9IDE7Cj4gLQkJCW4yIDw8PSAxOwo+IC0JCX0KPiAtCX0gZWxzZSBp ZiAobiA8IG4yKSB7Cj4gLQkJd2hpbGUgKG4gPCBuMikgewo+IC0JCQltIDw8PSAxOwo+IC0JCQlu IDw8PSAxOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlpZiAobiAhPSBuMikKPiAtCQlyZXR1cm4gZmFs c2U7Cj4gLQo+IC0JcmV0dXJuIGludGVsX2Z1enp5X2Nsb2NrX2NoZWNrKG0sIG0yKTsKPiAtfQo+ IC0KPiAtc3RhdGljIGJvb2wKPiAtaW50ZWxfY29tcGFyZV9saW5rX21fbihjb25zdCBzdHJ1Y3Qg aW50ZWxfbGlua19tX24gKm1fbiwKPiAtCQkgICAgICAgc3RydWN0IGludGVsX2xpbmtfbV9uICpt Ml9uMiwKPiAtCQkgICAgICAgYm9vbCBhZGp1c3QpCj4gLXsKPiAtCWlmIChtX24tPnR1ID09IG0y X24yLT50dSAmJgo+IC0JICAgIGludGVsX2NvbXBhcmVfbV9uKG1fbi0+Z21jaF9tLCBtX24tPmdt Y2hfbiwKPiAtCQkJICAgICAgbTJfbjItPmdtY2hfbSwgbTJfbjItPmdtY2hfbiwgIWFkanVzdCkg JiYKPiAtCSAgICBpbnRlbF9jb21wYXJlX21fbihtX24tPmxpbmtfbSwgbV9uLT5saW5rX24sCj4g LQkJCSAgICAgIG0yX24yLT5saW5rX20sIG0yX24yLT5saW5rX24sICFhZGp1c3QpKSB7Cj4gLQkJ aWYgKGFkanVzdCkKPiAtCQkJKm0yX24yID0gKm1fbjsKPiAtCj4gLQkJcmV0dXJuIHRydWU7Cj4g LQl9Cj4gLQo+IC0JcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbAo+IC1pbnRl bF9jb21wYXJlX2luZm9mcmFtZShjb25zdCB1bmlvbiBoZG1pX2luZm9mcmFtZSAqYSwKPiAtCQkJ Y29uc3QgdW5pb24gaGRtaV9pbmZvZnJhbWUgKmIpCj4gLXsKPiAtCXJldHVybiBtZW1jbXAoYSwg Yiwgc2l6ZW9mKCphKSkgPT0gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtcGlwZV9jb25m aWdfaW5mb2ZyYW1lX2VycihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJ CSAgYm9vbCBhZGp1c3QsIGNvbnN0IGNoYXIgKm5hbWUsCj4gLQkJCSAgY29uc3QgdW5pb24gaGRt aV9pbmZvZnJhbWUgKmEsCj4gLQkJCSAgY29uc3QgdW5pb24gaGRtaV9pbmZvZnJhbWUgKmIpCj4g LXsKPiAtCWlmIChhZGp1c3QpIHsKPiAtCQlpZiAoKGRybV9kZWJ1ZyAmIERSTV9VVF9LTVMpID09 IDApCj4gLQkJCXJldHVybjsKPiAtCj4gLQkJZHJtX2RiZyhEUk1fVVRfS01TLCAibWlzbWF0Y2gg aW4gJXMgaW5mb2ZyYW1lIiwgbmFtZSk7Cj4gLQkJZHJtX2RiZyhEUk1fVVRfS01TLCAiZXhwZWN0 ZWQ6Iik7Cj4gLQkJaGRtaV9pbmZvZnJhbWVfbG9nKEtFUk5fREVCVUcsIGRldl9wcml2LT5kcm0u ZGV2LCBhKTsKPiAtCQlkcm1fZGJnKERSTV9VVF9LTVMsICJmb3VuZCIpOwo+IC0JCWhkbWlfaW5m b2ZyYW1lX2xvZyhLRVJOX0RFQlVHLCBkZXZfcHJpdi0+ZHJtLmRldiwgYik7Cj4gLQl9IGVsc2Ug ewo+IC0JCWRybV9lcnIoIm1pc21hdGNoIGluICVzIGluZm9mcmFtZSIsIG5hbWUpOwo+IC0JCWRy bV9lcnIoImV4cGVjdGVkOiIpOwo+IC0JCWhkbWlfaW5mb2ZyYW1lX2xvZyhLRVJOX0VSUiwgZGV2 X3ByaXYtPmRybS5kZXYsIGEpOwo+IC0JCWRybV9lcnIoImZvdW5kIik7Cj4gLQkJaGRtaV9pbmZv ZnJhbWVfbG9nKEtFUk5fRVJSLCBkZXZfcHJpdi0+ZHJtLmRldiwgYik7Cj4gLQl9Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIF9fcHJpbnRmKDMsIDQpCj4gLXBpcGVfY29uZmlnX2Vycihib29sIGFk anVzdCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCj4gLXsKPiAt CXN0cnVjdCB2YV9mb3JtYXQgdmFmOwo+IC0JdmFfbGlzdCBhcmdzOwo+IC0KPiAtCXZhX3N0YXJ0 KGFyZ3MsIGZvcm1hdCk7Cj4gLQl2YWYuZm10ID0gZm9ybWF0Owo+IC0JdmFmLnZhID0gJmFyZ3M7 Cj4gLQo+IC0JaWYgKGFkanVzdCkKPiAtCQlkcm1fZGJnKERSTV9VVF9LTVMsICJtaXNtYXRjaCBp biAlcyAlcFYiLCBuYW1lLCAmdmFmKTsKPiAtCWVsc2UKPiAtCQlkcm1fZXJyKCJtaXNtYXRjaCBp biAlcyAlcFYiLCBuYW1lLCAmdmFmKTsKPiAtCj4gLQl2YV9lbmQoYXJncyk7Cj4gLX0KPiAtCj4g LXN0YXRpYyBib29sIGZhc3Rib290X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+IC17Cj4gLQlpZiAoaTkxNV9tb2RwYXJhbXMuZmFzdGJvb3QgIT0gLTEpCj4gLQkJ cmV0dXJuIGk5MTVfbW9kcGFyYW1zLmZhc3Rib290Owo+IC0KPiAtCS8qIEVuYWJsZSBmYXN0Ym9v dCBieSBkZWZhdWx0IG9uIFNreWxha2UgYW5kIG5ld2VyICovCj4gLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA5KQo+IC0JCXJldHVybiB0cnVlOwo+IC0KPiAtCS8qIEVuYWJsZSBmYXN0Ym9v dCBieSBkZWZhdWx0IG9uIFZMViBhbmQgQ0hWICovCj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZf cHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJcmV0dXJuIHRydWU7Cj4gLQo+ IC0JLyogRGlzYWJsZWQgYnkgZGVmYXVsdCBvbiBhbGwgb3RoZXJzICovCj4gLQlyZXR1cm4gZmFs c2U7Cj4gLX0KPiAtCj4gLWJvb2wKPiAtaW50ZWxfcGlwZV9jb25maWdfY29tcGFyZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmN1cnJlbnRfY29uZmlnLAo+IC0JCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBl X2NvbmZpZywKPiAtCQkJICBib29sIGFkanVzdCkKPiAtewo+IC0JYm9vbCByZXQgPSB0cnVlOwo+ IC0JYm9vbCBmaXh1cF9pbmhlcml0ZWQgPSBhZGp1c3QgJiYKPiAtCQkoY3VycmVudF9jb25maWct PmJhc2UubW9kZS5wcml2YXRlX2ZsYWdzICYgSTkxNV9NT0RFX0ZMQUdfSU5IRVJJVEVEKSAmJgo+ IC0JCSEocGlwZV9jb25maWctPmJhc2UubW9kZS5wcml2YXRlX2ZsYWdzICYgSTkxNV9NT0RFX0ZM QUdfSU5IRVJJVEVEKTsKPiAtCj4gLQlpZiAoZml4dXBfaW5oZXJpdGVkICYmICFmYXN0Ym9vdF9l bmFibGVkKGRldl9wcml2KSkgewo+IC0JCURSTV9ERUJVR19LTVMoImluaXRpYWwgbW9kZXNldCBh bmQgZmFzdGJvb3Qgbm90IHNldFxuIik7Cj4gLQkJcmV0ID0gZmFsc2U7Cj4gLQl9Cj4gLQo+IC0j ZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19YKG5hbWUpIGRvIHsgXAo+IC0JaWYgKGN1cnJlbnRfY29u ZmlnLT5uYW1lICE9IHBpcGVfY29uZmlnLT5uYW1lKSB7IFwKPiAtCQlwaXBlX2NvbmZpZ19lcnIo YWRqdXN0LCBfX3N0cmluZ2lmeShuYW1lKSwgXAo+IC0JCQkgICIoZXhwZWN0ZWQgMHglMDh4LCBm b3VuZCAweCUwOHgpXG4iLCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPm5hbWUsIFwKPiAtCQkJ ICBwaXBlX2NvbmZpZy0+bmFtZSk7IFwKPiAtCQlyZXQgPSBmYWxzZTsgXAo+IC0JfSBcCj4gLX0g d2hpbGUgKDApCj4gLQo+IC0jZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19JKG5hbWUpIGRvIHsgXAo+ IC0JaWYgKGN1cnJlbnRfY29uZmlnLT5uYW1lICE9IHBpcGVfY29uZmlnLT5uYW1lKSB7IFwKPiAt CQlwaXBlX2NvbmZpZ19lcnIoYWRqdXN0LCBfX3N0cmluZ2lmeShuYW1lKSwgXAo+IC0JCQkgICIo ZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwgXAo+IC0JCQkgIGN1cnJlbnRfY29uZmlnLT5uYW1l LCBcCj4gLQkJCSAgcGlwZV9jb25maWctPm5hbWUpOyBcCj4gLQkJcmV0ID0gZmFsc2U7IFwKPiAt CX0gXAo+IC19IHdoaWxlICgwKQo+IC0KPiAtI2RlZmluZSBQSVBFX0NPTkZfQ0hFQ0tfQk9PTChu YW1lKSBkbyB7IFwKPiAtCWlmIChjdXJyZW50X2NvbmZpZy0+bmFtZSAhPSBwaXBlX2NvbmZpZy0+ bmFtZSkgeyBcCj4gLQkJcGlwZV9jb25maWdfZXJyKGFkanVzdCwgX19zdHJpbmdpZnkobmFtZSks IFwKPiAtCQkJICAiKGV4cGVjdGVkICVzLCBmb3VuZCAlcylcbiIsIFwKPiAtCQkJICB5ZXNubyhj dXJyZW50X2NvbmZpZy0+bmFtZSksIFwKPiAtCQkJICB5ZXNubyhwaXBlX2NvbmZpZy0+bmFtZSkp OyBcCj4gLQkJcmV0ID0gZmFsc2U7IFwKPiAtCX0gXAo+IC19IHdoaWxlICgwKQo+IC0KPiAtLyoK PiAtICogQ2hlY2tzIHN0YXRlIHdoZXJlIHdlIG9ubHkgcmVhZCBvdXQgdGhlIGVuYWJsaW5nLCBi dXQgbm90IHRoZSBlbnRpcmUKPiAtICogc3RhdGUgaXRzZWxmIChsaWtlIGZ1bGwgaW5mb2ZyYW1l cyBvciBFTEQgZm9yIGF1ZGlvKS4gVGhlc2Ugc3RhdGVzCj4gLSAqIHJlcXVpcmUgYSBmdWxsIG1v ZGVzZXQgb24gYm9vdHVwIHRvIGZpeCB1cC4KPiAtICovCj4gLSNkZWZpbmUgUElQRV9DT05GX0NI RUNLX0JPT0xfSU5DT01QTEVURShuYW1lKSBkbyB7IFwKPiAtCWlmICghZml4dXBfaW5oZXJpdGVk IHx8ICghY3VycmVudF9jb25maWctPm5hbWUgJiYgIXBpcGVfY29uZmlnLT5uYW1lKSkgeyBcCj4g LQkJUElQRV9DT05GX0NIRUNLX0JPT0wobmFtZSk7IFwKPiAtCX0gZWxzZSB7IFwKPiAtCQlwaXBl X2NvbmZpZ19lcnIoYWRqdXN0LCBfX3N0cmluZ2lmeShuYW1lKSwgXAo+IC0JCQkgICJ1bmFibGUg dG8gdmVyaWZ5IHdoZXRoZXIgc3RhdGUgbWF0Y2hlcyBleGFjdGx5LCBmb3JjaW5nIG1vZGVzZXQg KGV4cGVjdGVkICVzLCBmb3VuZCAlcylcbiIsIFwKPiAtCQkJICB5ZXNubyhjdXJyZW50X2NvbmZp Zy0+bmFtZSksIFwKPiAtCQkJICB5ZXNubyhwaXBlX2NvbmZpZy0+bmFtZSkpOyBcCj4gLQkJcmV0 ID0gZmFsc2U7IFwKPiAtCX0gXAo+IC19IHdoaWxlICgwKQo+IC0KPiAtI2RlZmluZSBQSVBFX0NP TkZfQ0hFQ0tfUChuYW1lKSBkbyB7IFwKPiAtCWlmIChjdXJyZW50X2NvbmZpZy0+bmFtZSAhPSBw aXBlX2NvbmZpZy0+bmFtZSkgeyBcCj4gLQkJcGlwZV9jb25maWdfZXJyKGFkanVzdCwgX19zdHJp bmdpZnkobmFtZSksIFwKPiAtCQkJICAiKGV4cGVjdGVkICVwLCBmb3VuZCAlcClcbiIsIFwKPiAt CQkJICBjdXJyZW50X2NvbmZpZy0+bmFtZSwgXAo+IC0JCQkgIHBpcGVfY29uZmlnLT5uYW1lKTsg XAo+IC0JCXJldCA9IGZhbHNlOyBcCj4gLQl9IFwKPiAtfSB3aGlsZSAoMCkKPiAtCj4gLSNkZWZp bmUgUElQRV9DT05GX0NIRUNLX01fTihuYW1lKSBkbyB7IFwKPiAtCWlmICghaW50ZWxfY29tcGFy ZV9saW5rX21fbigmY3VycmVudF9jb25maWctPm5hbWUsIFwKPiAtCQkJCSAgICAmcGlwZV9jb25m aWctPm5hbWUsXAo+IC0JCQkJICAgIGFkanVzdCkpIHsgXAo+IC0JCXBpcGVfY29uZmlnX2Vycihh ZGp1c3QsIF9fc3RyaW5naWZ5KG5hbWUpLCBcCj4gLQkJCSAgIihleHBlY3RlZCB0dSAlaSBnbWNo ICVpLyVpIGxpbmsgJWkvJWksICIgXAo+IC0JCQkgICJmb3VuZCB0dSAlaSwgZ21jaCAlaS8laSBs aW5rICVpLyVpKVxuIiwgXAo+IC0JCQkgIGN1cnJlbnRfY29uZmlnLT5uYW1lLnR1LCBcCj4gLQkJ CSAgY3VycmVudF9jb25maWctPm5hbWUuZ21jaF9tLCBcCj4gLQkJCSAgY3VycmVudF9jb25maWct Pm5hbWUuZ21jaF9uLCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPm5hbWUubGlua19tLCBcCj4g LQkJCSAgY3VycmVudF9jb25maWctPm5hbWUubGlua19uLCBcCj4gLQkJCSAgcGlwZV9jb25maWct Pm5hbWUudHUsIFwKPiAtCQkJICBwaXBlX2NvbmZpZy0+bmFtZS5nbWNoX20sIFwKPiAtCQkJICBw aXBlX2NvbmZpZy0+bmFtZS5nbWNoX24sIFwKPiAtCQkJICBwaXBlX2NvbmZpZy0+bmFtZS5saW5r X20sIFwKPiAtCQkJICBwaXBlX2NvbmZpZy0+bmFtZS5saW5rX24pOyBcCj4gLQkJcmV0ID0gZmFs c2U7IFwKPiAtCX0gXAo+IC19IHdoaWxlICgwKQo+IC0KPiAtLyogVGhpcyBpcyByZXF1aXJlZCBm b3IgQkRXKyB3aGVyZSB0aGVyZSBpcyBvbmx5IG9uZSBzZXQgb2YgcmVnaXN0ZXJzIGZvcgo+IC0g KiBzd2l0Y2hpbmcgYmV0d2VlbiBoaWdoIGFuZCBsb3cgUlIuCj4gLSAqIFRoaXMgbWFjcm8gY2Fu IGJlIHVzZWQgd2hlbmV2ZXIgYSBjb21wYXJpc29uIGhhcyB0byBiZSBtYWRlIGJldHdlZW4gb25l Cj4gLSAqIGh3IHN0YXRlIGFuZCBtdWx0aXBsZSBzdyBzdGF0ZSB2YXJpYWJsZXMuCj4gLSAqLwo+ IC0jZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19NX05fQUxUKG5hbWUsIGFsdF9uYW1lKSBkbyB7IFwK PiAtCWlmICghaW50ZWxfY29tcGFyZV9saW5rX21fbigmY3VycmVudF9jb25maWctPm5hbWUsIFwK PiAtCQkJCSAgICAmcGlwZV9jb25maWctPm5hbWUsIGFkanVzdCkgJiYgXAo+IC0JICAgICFpbnRl bF9jb21wYXJlX2xpbmtfbV9uKCZjdXJyZW50X2NvbmZpZy0+YWx0X25hbWUsIFwKPiAtCQkJCSAg ICAmcGlwZV9jb25maWctPm5hbWUsIGFkanVzdCkpIHsgXAo+IC0JCXBpcGVfY29uZmlnX2Vycihh ZGp1c3QsIF9fc3RyaW5naWZ5KG5hbWUpLCBcCj4gLQkJCSAgIihleHBlY3RlZCB0dSAlaSBnbWNo ICVpLyVpIGxpbmsgJWkvJWksICIgXAo+IC0JCQkgICJvciB0dSAlaSBnbWNoICVpLyVpIGxpbmsg JWkvJWksICIgXAo+IC0JCQkgICJmb3VuZCB0dSAlaSwgZ21jaCAlaS8laSBsaW5rICVpLyVpKVxu IiwgXAo+IC0JCQkgIGN1cnJlbnRfY29uZmlnLT5uYW1lLnR1LCBcCj4gLQkJCSAgY3VycmVudF9j b25maWctPm5hbWUuZ21jaF9tLCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPm5hbWUuZ21jaF9u LCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPm5hbWUubGlua19tLCBcCj4gLQkJCSAgY3VycmVu dF9jb25maWctPm5hbWUubGlua19uLCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPmFsdF9uYW1l LnR1LCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPmFsdF9uYW1lLmdtY2hfbSwgXAo+IC0JCQkg IGN1cnJlbnRfY29uZmlnLT5hbHRfbmFtZS5nbWNoX24sIFwKPiAtCQkJICBjdXJyZW50X2NvbmZp Zy0+YWx0X25hbWUubGlua19tLCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPmFsdF9uYW1lLmxp bmtfbiwgXAo+IC0JCQkgIHBpcGVfY29uZmlnLT5uYW1lLnR1LCBcCj4gLQkJCSAgcGlwZV9jb25m aWctPm5hbWUuZ21jaF9tLCBcCj4gLQkJCSAgcGlwZV9jb25maWctPm5hbWUuZ21jaF9uLCBcCj4g LQkJCSAgcGlwZV9jb25maWctPm5hbWUubGlua19tLCBcCj4gLQkJCSAgcGlwZV9jb25maWctPm5h bWUubGlua19uKTsgXAo+IC0JCXJldCA9IGZhbHNlOyBcCj4gLQl9IFwKPiAtfSB3aGlsZSAoMCkK PiAtCj4gLSNkZWZpbmUgUElQRV9DT05GX0NIRUNLX0ZMQUdTKG5hbWUsIG1hc2spIGRvIHsgXAo+ IC0JaWYgKChjdXJyZW50X2NvbmZpZy0+bmFtZSBeIHBpcGVfY29uZmlnLT5uYW1lKSAmIChtYXNr KSkgeyBcCj4gLQkJcGlwZV9jb25maWdfZXJyKGFkanVzdCwgX19zdHJpbmdpZnkobmFtZSksIFwK PiAtCQkJICAiKCV4KSAoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwgXAo+IC0JCQkgIChtYXNr KSwgXAo+IC0JCQkgIGN1cnJlbnRfY29uZmlnLT5uYW1lICYgKG1hc2spLCBcCj4gLQkJCSAgcGlw ZV9jb25maWctPm5hbWUgJiAobWFzaykpOyBcCj4gLQkJcmV0ID0gZmFsc2U7IFwKPiAtCX0gXAo+ IC19IHdoaWxlICgwKQo+IC0KPiAtI2RlZmluZSBQSVBFX0NPTkZfQ0hFQ0tfQ0xPQ0tfRlVaWlko bmFtZSkgZG8geyBcCj4gLQlpZiAoIWludGVsX2Z1enp5X2Nsb2NrX2NoZWNrKGN1cnJlbnRfY29u ZmlnLT5uYW1lLCBwaXBlX2NvbmZpZy0+bmFtZSkpIHsgXAo+IC0JCXBpcGVfY29uZmlnX2Vycihh ZGp1c3QsIF9fc3RyaW5naWZ5KG5hbWUpLCBcCj4gLQkJCSAgIihleHBlY3RlZCAlaSwgZm91bmQg JWkpXG4iLCBcCj4gLQkJCSAgY3VycmVudF9jb25maWctPm5hbWUsIFwKPiAtCQkJICBwaXBlX2Nv bmZpZy0+bmFtZSk7IFwKPiAtCQlyZXQgPSBmYWxzZTsgXAo+IC0JfSBcCj4gLX0gd2hpbGUgKDAp Cj4gLQo+IC0jZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19JTkZPRlJBTUUobmFtZSkgZG8geyBcCj4g LQlpZiAoIWludGVsX2NvbXBhcmVfaW5mb2ZyYW1lKCZjdXJyZW50X2NvbmZpZy0+aW5mb2ZyYW1l cy5uYW1lLCBcCj4gLQkJCQkgICAgICZwaXBlX2NvbmZpZy0+aW5mb2ZyYW1lcy5uYW1lKSkgeyBc Cj4gLQkJcGlwZV9jb25maWdfaW5mb2ZyYW1lX2VycihkZXZfcHJpdiwgYWRqdXN0LCBfX3N0cmlu Z2lmeShuYW1lKSwgXAo+IC0JCQkJCSAgJmN1cnJlbnRfY29uZmlnLT5pbmZvZnJhbWVzLm5hbWUs IFwKPiAtCQkJCQkgICZwaXBlX2NvbmZpZy0+aW5mb2ZyYW1lcy5uYW1lKTsgXAo+IC0JCXJldCA9 IGZhbHNlOyBcCj4gLQl9IFwKPiAtfSB3aGlsZSAoMCkKPiAtCj4gLSNkZWZpbmUgUElQRV9DT05G X1FVSVJLKHF1aXJrKSBcCj4gLQkoKGN1cnJlbnRfY29uZmlnLT5xdWlya3MgfCBwaXBlX2NvbmZp Zy0+cXVpcmtzKSAmIChxdWlyaykpCj4gLQo+IC0JUElQRV9DT05GX0NIRUNLX0koY3B1X3RyYW5z Y29kZXIpOwo+IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19CT09MKGhhc19wY2hfZW5jb2Rlcik7Cj4g LQlQSVBFX0NPTkZfQ0hFQ0tfSShmZGlfbGFuZXMpOwo+IC0JUElQRV9DT05GX0NIRUNLX01fTihm ZGlfbV9uKTsKPiAtCj4gLQlQSVBFX0NPTkZfQ0hFQ0tfSShsYW5lX2NvdW50KTsKPiAtCVBJUEVf Q09ORl9DSEVDS19YKGxhbmVfbGF0X29wdGltX21hc2spOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpIDwgOCkgewo+IC0JCVBJUEVfQ09ORl9DSEVDS19NX04oZHBfbV9uKTsKPiAtCj4g LQkJaWYgKGN1cnJlbnRfY29uZmlnLT5oYXNfZHJycykKPiAtCQkJUElQRV9DT05GX0NIRUNLX01f TihkcF9tMl9uMik7Cj4gLQl9IGVsc2UKPiAtCQlQSVBFX0NPTkZfQ0hFQ0tfTV9OX0FMVChkcF9t X24sIGRwX20yX24yKTsKPiAtCj4gLQlQSVBFX0NPTkZfQ0hFQ0tfWChvdXRwdXRfdHlwZXMpOwo+ IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2hkaXNwbGF5 KTsKPiAtCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2h0b3RhbCk7 Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21vZGUuY3J0Y19oYmxhbmtfc3Rh cnQpOwo+IC0JUElQRV9DT05GX0NIRUNLX0koYmFzZS5hZGp1c3RlZF9tb2RlLmNydGNfaGJsYW5r X2VuZCk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21vZGUuY3J0Y19oc3lu Y19zdGFydCk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21vZGUuY3J0Y19o c3luY19lbmQpOwo+IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0ZWRfbW9kZS5j cnRjX3ZkaXNwbGF5KTsKPiAtCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0ZWRfbW9kZS5j cnRjX3Z0b3RhbCk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21vZGUuY3J0 Y192Ymxhbmtfc3RhcnQpOwo+IC0JUElQRV9DT05GX0NIRUNLX0koYmFzZS5hZGp1c3RlZF9tb2Rl LmNydGNfdmJsYW5rX2VuZCk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21v ZGUuY3J0Y192c3luY19zdGFydCk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVk X21vZGUuY3J0Y192c3luY19lbmQpOwo+IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19JKHBpeGVsX211 bHRpcGxpZXIpOwo+IC0JUElQRV9DT05GX0NIRUNLX0kob3V0cHV0X2Zvcm1hdCk7Cj4gLQlQSVBF X0NPTkZfQ0hFQ0tfQk9PTChoYXNfaGRtaV9zaW5rKTsKPiAtCWlmICgoSU5URUxfR0VOKGRldl9w cml2KSA8IDggJiYgIUlTX0hBU1dFTEwoZGV2X3ByaXYpKSB8fAo+IC0JICAgIElTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0JCVBJUEVfQ09ORl9D SEVDS19CT09MKGxpbWl0ZWRfY29sb3JfcmFuZ2UpOwo+IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19C T09MKGhkbWlfc2NyYW1ibGluZyk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfQk9PTChoZG1pX2hpZ2hf dG1kc19jbG9ja19yYXRpbyk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfQk9PTF9JTkNPTVBMRVRFKGhh c19pbmZvZnJhbWUpOwo+IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19CT09MX0lOQ09NUExFVEUoaGFz X2F1ZGlvKTsKPiAtCj4gLQlQSVBFX0NPTkZfQ0hFQ0tfRkxBR1MoYmFzZS5hZGp1c3RlZF9tb2Rl LmZsYWdzLAo+IC0JCQkgICAgICBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSk7Cj4gLQo+IC0JaWYg KCFQSVBFX0NPTkZfUVVJUksoUElQRV9DT05GSUdfUVVJUktfTU9ERV9TWU5DX0ZMQUdTKSkgewo+ IC0JCVBJUEVfQ09ORl9DSEVDS19GTEFHUyhiYXNlLmFkanVzdGVkX21vZGUuZmxhZ3MsCj4gLQkJ CQkgICAgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyk7Cj4gLQkJUElQRV9DT05GX0NIRUNLX0ZMQUdT KGJhc2UuYWRqdXN0ZWRfbW9kZS5mbGFncywKPiAtCQkJCSAgICAgIERSTV9NT0RFX0ZMQUdfTkhT WU5DKTsKPiAtCQlQSVBFX0NPTkZfQ0hFQ0tfRkxBR1MoYmFzZS5hZGp1c3RlZF9tb2RlLmZsYWdz LAo+IC0JCQkJICAgICAgRFJNX01PREVfRkxBR19QVlNZTkMpOwo+IC0JCVBJUEVfQ09ORl9DSEVD S19GTEFHUyhiYXNlLmFkanVzdGVkX21vZGUuZmxhZ3MsCj4gLQkJCQkgICAgICBEUk1fTU9ERV9G TEFHX05WU1lOQyk7Cj4gLQl9Cj4gLQo+IC0JUElQRV9DT05GX0NIRUNLX1goZ21jaF9wZml0LmNv bnRyb2wpOwo+IC0JLyogcGZpdCByYXRpb3MgYXJlIGF1dG9jb21wdXRlZCBieSB0aGUgaHcgb24g Z2VuNCsgKi8KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkKPiAtCQlQSVBFX0NPTkZf Q0hFQ0tfWChnbWNoX3BmaXQucGdtX3JhdGlvcyk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfWChnbWNo X3BmaXQubHZkc19ib3JkZXJfYml0cyk7Cj4gLQo+IC0JaWYgKCFhZGp1c3QpIHsKPiAtCQlQSVBF X0NPTkZfQ0hFQ0tfSShwaXBlX3NyY193KTsKPiAtCQlQSVBFX0NPTkZfQ0hFQ0tfSShwaXBlX3Ny Y19oKTsKPiAtCj4gLQkJUElQRV9DT05GX0NIRUNLX0JPT0wocGNoX3BmaXQuZW5hYmxlZCk7Cj4g LQkJaWYgKGN1cnJlbnRfY29uZmlnLT5wY2hfcGZpdC5lbmFibGVkKSB7Cj4gLQkJCVBJUEVfQ09O Rl9DSEVDS19YKHBjaF9wZml0LnBvcyk7Cj4gLQkJCVBJUEVfQ09ORl9DSEVDS19YKHBjaF9wZml0 LnNpemUpOwo+IC0JCX0KPiAtCj4gLQkJUElQRV9DT05GX0NIRUNLX0koc2NhbGVyX3N0YXRlLnNj YWxlcl9pZCk7Cj4gLQkJUElQRV9DT05GX0NIRUNLX0NMT0NLX0ZVWlpZKHBpeGVsX3JhdGUpOwo+ IC0KPiAtCQlQSVBFX0NPTkZfQ0hFQ0tfWChnYW1tYV9tb2RlKTsKPiAtCQlpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCj4gLQkJCVBJUEVfQ09ORl9DSEVDS19YKGNnbV9tb2RlKTsKPiAtCQll bHNlCj4gLQkJCVBJUEVfQ09ORl9DSEVDS19YKGNzY19tb2RlKTsKPiAtCQlQSVBFX0NPTkZfQ0hF Q0tfQk9PTChnYW1tYV9lbmFibGUpOwo+IC0JCVBJUEVfQ09ORl9DSEVDS19CT09MKGNzY19lbmFi bGUpOwo+IC0JfQo+IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19CT09MKGRvdWJsZV93aWRlKTsKPiAt Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfUChzaGFyZWRfZHBsbCk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tf WChkcGxsX2h3X3N0YXRlLmRwbGwpOwo+IC0JUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0 ZS5kcGxsX21kKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuZnAwKTsKPiAt CVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuZnAxKTsKPiAtCVBJUEVfQ09ORl9DSEVD S19YKGRwbGxfaHdfc3RhdGUud3JwbGwpOwo+IC0JUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19z dGF0ZS5zcGxsKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuY3RybDEpOwo+ IC0JUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5jZmdjcjEpOwo+IC0JUElQRV9DT05G X0NIRUNLX1goZHBsbF9od19zdGF0ZS5jZmdjcjIpOwo+IC0JUElQRV9DT05GX0NIRUNLX1goZHBs bF9od19zdGF0ZS5jZmdjcjApOwo+IC0JUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5l YmIwKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuZWJiNCk7Cj4gLQlQSVBF X0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLnBsbDApOwo+IC0JUElQRV9DT05GX0NIRUNLX1go ZHBsbF9od19zdGF0ZS5wbGwxKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUu cGxsMik7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLnBsbDMpOwo+IC0JUElQ RV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5wbGw2KTsKPiAtCVBJUEVfQ09ORl9DSEVDS19Y KGRwbGxfaHdfc3RhdGUucGxsOCk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRl LnBsbDkpOwo+IC0JUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5wbGwxMCk7Cj4gLQlQ SVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLnBjc2R3MTIpOwo+IC0JUElQRV9DT05GX0NI RUNLX1goZHBsbF9od19zdGF0ZS5tZ19yZWZjbGtpbl9jdGwpOwo+IC0JUElQRV9DT05GX0NIRUNL X1goZHBsbF9od19zdGF0ZS5tZ19jbGt0b3AyX2NvcmVjbGtjdGwxKTsKPiAtCVBJUEVfQ09ORl9D SEVDS19YKGRwbGxfaHdfc3RhdGUubWdfY2xrdG9wMl9oc2Nsa2N0bCk7Cj4gLQlQSVBFX0NPTkZf Q0hFQ0tfWChkcGxsX2h3X3N0YXRlLm1nX3BsbF9kaXYwKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19Y KGRwbGxfaHdfc3RhdGUubWdfcGxsX2RpdjEpOwo+IC0JUElQRV9DT05GX0NIRUNLX1goZHBsbF9o d19zdGF0ZS5tZ19wbGxfbGYpOwo+IC0JUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5t Z19wbGxfZnJhY19sb2NrKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUubWdf cGxsX3NzYyk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLm1nX3BsbF9iaWFz KTsKPiAtCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUubWdfcGxsX3RkY19jb2xkc3Rf Ymlhcyk7Cj4gLQo+IC0JUElQRV9DT05GX0NIRUNLX1goZHNpX3BsbC5jdHJsKTsKPiAtCVBJUEVf Q09ORl9DSEVDS19YKGRzaV9wbGwuZGl2KTsKPiAtCj4gLQlpZiAoSVNfRzRYKGRldl9wcml2KSB8 fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUpCj4gLQkJUElQRV9DT05GX0NIRUNLX0kocGlwZV9i cHApOwo+IC0KPiAtCVBJUEVfQ09ORl9DSEVDS19DTE9DS19GVVpaWShiYXNlLmFkanVzdGVkX21v ZGUuY3J0Y19jbG9jayk7Cj4gLQlQSVBFX0NPTkZfQ0hFQ0tfQ0xPQ0tfRlVaWlkocG9ydF9jbG9j ayk7Cj4gLQo+IC0JUElQRV9DT05GX0NIRUNLX0kobWluX3ZvbHRhZ2VfbGV2ZWwpOwo+IC0KPiAt CVBJUEVfQ09ORl9DSEVDS19YKGluZm9mcmFtZXMuZW5hYmxlKTsKPiAtCVBJUEVfQ09ORl9DSEVD S19YKGluZm9mcmFtZXMuZ2NwKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19JTkZPRlJBTUUoYXZpKTsK PiAtCVBJUEVfQ09ORl9DSEVDS19JTkZPRlJBTUUoc3BkKTsKPiAtCVBJUEVfQ09ORl9DSEVDS19J TkZPRlJBTUUoaGRtaSk7Cj4gLQo+IC0jdW5kZWYgUElQRV9DT05GX0NIRUNLX1gKPiAtI3VuZGVm IFBJUEVfQ09ORl9DSEVDS19JCj4gLSN1bmRlZiBQSVBFX0NPTkZfQ0hFQ0tfQk9PTAo+IC0jdW5k ZWYgUElQRV9DT05GX0NIRUNLX0JPT0xfSU5DT01QTEVURQo+IC0jdW5kZWYgUElQRV9DT05GX0NI RUNLX1AKPiAtI3VuZGVmIFBJUEVfQ09ORl9DSEVDS19GTEFHUwo+IC0jdW5kZWYgUElQRV9DT05G X0NIRUNLX0NMT0NLX0ZVWlpZCj4gLSN1bmRlZiBQSVBFX0NPTkZfUVVJUksKPiAtCj4gLQlyZXR1 cm4gcmV0Owo+IC19Cj4gLQo+IC12b2lkIGludGVsX3BpcGVfY29uZmlnX3Nhbml0eV9jaGVjayhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+IC17Cj4gLQlpZiAocGlwZV9jb25maWct Pmhhc19wY2hfZW5jb2Rlcikgewo+IC0JCWludCBmZGlfZG90Y2xvY2sgPSBpbnRlbF9kb3RjbG9j a19jYWxjdWxhdGUoaW50ZWxfZmRpX2xpbmtfZnJlcShkZXZfcHJpdiwgcGlwZV9jb25maWcpLAo+ IC0JCQkJCQkJICAgICZwaXBlX2NvbmZpZy0+ZmRpX21fbik7Cj4gLQkJaW50IGRvdGNsb2NrID0g cGlwZV9jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOwo+IC0KPiAtCQkvKgo+ IC0JCSAqIEZESSBhbHJlYWR5IHByb3ZpZGVkIG9uZSBpZGVhIGZvciB0aGUgZG90Y2xvY2suCj4g LQkJICogWWVsbCBpZiB0aGUgZW5jb2RlciBkaXNhZ3JlZXMuCj4gLQkJICovCj4gLQkJV0FSTigh aW50ZWxfZnV6enlfY2xvY2tfY2hlY2soZmRpX2RvdGNsb2NrLCBkb3RjbG9jayksCj4gLQkJICAg ICAiRkRJIGRvdGNsb2NrIGFuZCBlbmNvZGVyIGRvdGNsb2NrIG1pc21hdGNoLCBmZGk6ICVpLCBl bmNvZGVyOiAlaVxuIiwKPiAtCQkgICAgIGZkaV9kb3RjbG9jaywgZG90Y2xvY2spOwo+IC0JfQo+ IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCB1cGRhdGVfc2NhbmxpbmVfb2Zmc2V0KGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IDc3NzY3Yy4uZWQ4NTNiMiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCj4gQEAgLTE2NjgsMTcgKzE2NjgsMTIgQEAgaW50IGludGVsX2dldF9w aXBlX2Zyb21fY3J0Y19pZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAo+ICAJCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ICBlbnVtIHRyYW5z Y29kZXIgaW50ZWxfcGlwZV90b19jcHVfdHJhbnNjb2RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gIAkJCQkJICAgICBlbnVtIHBpcGUgcGlwZSk7Cj4gLXZvaWQgaW50ZWxf cGlwZV9jb25maWdfc2FuaXR5X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAtCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcp Owo+IC1ib29sCj4gLWludGVsX3BpcGVfY29uZmlnX2NvbXBhcmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+IC0JCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjdXJyZW50 X2NvbmZpZywKPiAtCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCj4g LQkJCSAgYm9vbCBhZGp1c3QpOwo+ICB2b2lkIGludGVsX2R1bXBfcGlwZV9jb25maWcoc3RydWN0 IGludGVsX2NydGMgKmNydGMsCj4gIAkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlw ZV9jb25maWcsCj4gIAkJCSAgICBjb25zdCBjaGFyICpjb250ZXh0KTsKPiAgdm9pZCBpbnRlbF9j cnRjX2NvbXB1dGVfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSk7Cj4gK3UzMiBpbnRlbF9mZGlfbGlua19mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmln KTsKPiAgc3RhdGljIGlubGluZSBib29sCj4gIGludGVsX2NydGNfaGFzX3R5cGUoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJICAgIGVudW0gaW50ZWxfb3V0 cHV0X3R5cGUgdHlwZSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dmVyaWZ5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJpZnkuYwo+IGluZGV4IDRj ODk5MC4uOTc4NWFkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zl cmlmeS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmVyaWZ5LmMKPiBAQCAt MTAsNiArMTAsNDcxIEBACj4gICNpbmNsdWRlICJpbnRlbF9wbS5oIgo+ICAjaW5jbHVkZSAiaW50 ZWxfdmVyaWZ5LmgiCj4gIAo+ICtzdGF0aWMgYm9vbCBpbnRlbF9mdXp6eV9jbG9ja19jaGVjayhp bnQgY2xvY2sxLCBpbnQgY2xvY2syKQo+ICt7Cj4gKwlpbnQgZGlmZjsKPiArCj4gKwlpZiAoY2xv Y2sxID09IGNsb2NrMikKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlpZiAoIWNsb2NrMSB8fCAh Y2xvY2syKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlkaWZmID0gYWJzKGNsb2NrMSAtIGNs b2NrMik7Cj4gKwo+ICsJaWYgKCgoKChkaWZmICsgY2xvY2sxICsgY2xvY2syKSAqIDEwMCkpIC8g KGNsb2NrMSArIGNsb2NrMikpIDwgMTA1KQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVy biBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wKPiAraW50ZWxfY29tcGFyZV9tX24odW5z aWduZWQgaW50IG0sIHVuc2lnbmVkIGludCBuLAo+ICsJCSAgdW5zaWduZWQgaW50IG0yLCB1bnNp Z25lZCBpbnQgbjIsCj4gKwkJICBib29sIGV4YWN0KQo+ICt7Cj4gKwlpZiAobSA9PSBtMiAmJiBu ID09IG4yKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCWlmIChleGFjdCB8fCAhbSB8fCAhbiB8 fCAhbTIgfHwgIW4yKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlCVUlMRF9CVUdfT04oREFU QV9MSU5LX01fTl9NQVNLID4gSU5UX01BWCk7Cj4gKwo+ICsJaWYgKG4gPiBuMikgewo+ICsJCXdo aWxlIChuID4gbjIpIHsKPiArCQkJbTIgPDw9IDE7Cj4gKwkJCW4yIDw8PSAxOwo+ICsJCX0KPiAr CX0gZWxzZSBpZiAobiA8IG4yKSB7Cj4gKwkJd2hpbGUgKG4gPCBuMikgewo+ICsJCQltIDw8PSAx Owo+ICsJCQluIDw8PSAxOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAobiAhPSBuMikKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIGludGVsX2Z1enp5X2Nsb2NrX2NoZWNrKG0sIG0y KTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wKPiAraW50ZWxfY29tcGFyZV9saW5rX21fbihjb25z dCBzdHJ1Y3QgaW50ZWxfbGlua19tX24gKm1fbiwKPiArCQkgICAgICAgc3RydWN0IGludGVsX2xp bmtfbV9uICptMl9uMiwKPiArCQkgICAgICAgYm9vbCBhZGp1c3QpCj4gK3sKPiArCWlmIChtX24t PnR1ID09IG0yX24yLT50dSAmJgo+ICsJICAgIGludGVsX2NvbXBhcmVfbV9uKG1fbi0+Z21jaF9t LCBtX24tPmdtY2hfbiwKPiArCQkJICAgICAgbTJfbjItPmdtY2hfbSwgbTJfbjItPmdtY2hfbiwg IWFkanVzdCkgJiYKPiArCSAgICBpbnRlbF9jb21wYXJlX21fbihtX24tPmxpbmtfbSwgbV9uLT5s aW5rX24sCj4gKwkJCSAgICAgIG0yX24yLT5saW5rX20sIG0yX24yLT5saW5rX24sICFhZGp1c3Qp KSB7Cj4gKwkJaWYgKGFkanVzdCkKPiArCQkJKm0yX24yID0gKm1fbjsKPiArCj4gKwkJcmV0dXJu IHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bAo+ICtpbnRlbF9jb21wYXJlX2luZm9mcmFtZShjb25zdCB1bmlvbiBoZG1pX2luZm9mcmFtZSAq YSwKPiArCQkJY29uc3QgdW5pb24gaGRtaV9pbmZvZnJhbWUgKmIpCj4gK3sKPiArCXJldHVybiBt ZW1jbXAoYSwgYiwgc2l6ZW9mKCphKSkgPT0gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAr cGlwZV9jb25maWdfaW5mb2ZyYW1lX2VycihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gKwkJCSAgYm9vbCBhZGp1c3QsIGNvbnN0IGNoYXIgKm5hbWUsCj4gKwkJCSAgY29uc3Qg dW5pb24gaGRtaV9pbmZvZnJhbWUgKmEsCj4gKwkJCSAgY29uc3QgdW5pb24gaGRtaV9pbmZvZnJh bWUgKmIpCj4gK3sKPiArCWlmIChhZGp1c3QpIHsKPiArCQlpZiAoKGRybV9kZWJ1ZyAmIERSTV9V VF9LTVMpID09IDApCj4gKwkJCXJldHVybjsKPiArCj4gKwkJZHJtX2RiZyhEUk1fVVRfS01TLCAi bWlzbWF0Y2ggaW4gJXMgaW5mb2ZyYW1lIiwgbmFtZSk7Cj4gKwkJZHJtX2RiZyhEUk1fVVRfS01T LCAiZXhwZWN0ZWQ6Iik7Cj4gKwkJaGRtaV9pbmZvZnJhbWVfbG9nKEtFUk5fREVCVUcsIGRldl9w cml2LT5kcm0uZGV2LCBhKTsKPiArCQlkcm1fZGJnKERSTV9VVF9LTVMsICJmb3VuZCIpOwo+ICsJ CWhkbWlfaW5mb2ZyYW1lX2xvZyhLRVJOX0RFQlVHLCBkZXZfcHJpdi0+ZHJtLmRldiwgYik7Cj4g Kwl9IGVsc2Ugewo+ICsJCWRybV9lcnIoIm1pc21hdGNoIGluICVzIGluZm9mcmFtZSIsIG5hbWUp Owo+ICsJCWRybV9lcnIoImV4cGVjdGVkOiIpOwo+ICsJCWhkbWlfaW5mb2ZyYW1lX2xvZyhLRVJO X0VSUiwgZGV2X3ByaXYtPmRybS5kZXYsIGEpOwo+ICsJCWRybV9lcnIoImZvdW5kIik7Cj4gKwkJ aGRtaV9pbmZvZnJhbWVfbG9nKEtFUk5fRVJSLCBkZXZfcHJpdi0+ZHJtLmRldiwgYik7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fcHJpbnRmKDMsIDQpCj4gK3BpcGVfY29uZmlnX2Vy cihib29sIGFkanVzdCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p Cj4gK3sKPiArCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwo+ICsJdmFfbGlzdCBhcmdzOwo+ICsKPiAr CXZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Cj4gKwl2YWYuZm10ID0gZm9ybWF0Owo+ICsJdmFmLnZh ID0gJmFyZ3M7Cj4gKwo+ICsJaWYgKGFkanVzdCkKPiArCQlkcm1fZGJnKERSTV9VVF9LTVMsICJt aXNtYXRjaCBpbiAlcyAlcFYiLCBuYW1lLCAmdmFmKTsKPiArCWVsc2UKPiArCQlkcm1fZXJyKCJt aXNtYXRjaCBpbiAlcyAlcFYiLCBuYW1lLCAmdmFmKTsKPiArCj4gKwl2YV9lbmQoYXJncyk7Cj4g K30KPiArCj4gK3N0YXRpYyBib29sIGZhc3Rib290X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpZiAoaTkxNV9tb2RwYXJhbXMuZmFzdGJvb3QgIT0g LTEpCj4gKwkJcmV0dXJuIGk5MTVfbW9kcGFyYW1zLmZhc3Rib290Owo+ICsKPiArCS8qIEVuYWJs ZSBmYXN0Ym9vdCBieSBkZWZhdWx0IG9uIFNreWxha2UgYW5kIG5ld2VyICovCj4gKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA5KQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCS8qIEVuYWJs ZSBmYXN0Ym9vdCBieSBkZWZhdWx0IG9uIFZMViBhbmQgQ0hWICovCj4gKwlpZiAoSVNfVkFMTEVZ VklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKwkJcmV0dXJuIHRy dWU7Cj4gKwo+ICsJLyogRGlzYWJsZWQgYnkgZGVmYXVsdCBvbiBhbGwgb3RoZXJzICovCj4gKwly ZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK2Jvb2wKPiAraW50ZWxfcGlwZV9jb25maWdfY29tcGFy ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCSAgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmN1cnJlbnRfY29uZmlnLAo+ICsJCQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZywKPiArCQkJICBib29sIGFkanVzdCkKPiArewo+ICsJYm9vbCByZXQg PSB0cnVlOwo+ICsJYm9vbCBmaXh1cF9pbmhlcml0ZWQgPSBhZGp1c3QgJiYKPiArCQkoY3VycmVu dF9jb25maWctPmJhc2UubW9kZS5wcml2YXRlX2ZsYWdzICYgSTkxNV9NT0RFX0ZMQUdfSU5IRVJJ VEVEKSAmJgo+ICsJCSEocGlwZV9jb25maWctPmJhc2UubW9kZS5wcml2YXRlX2ZsYWdzICYgSTkx NV9NT0RFX0ZMQUdfSU5IRVJJVEVEKTsKPiArCj4gKwlpZiAoZml4dXBfaW5oZXJpdGVkICYmICFm YXN0Ym9vdF9lbmFibGVkKGRldl9wcml2KSkgewo+ICsJCURSTV9ERUJVR19LTVMoImluaXRpYWwg bW9kZXNldCBhbmQgZmFzdGJvb3Qgbm90IHNldFxuIik7Cj4gKwkJcmV0ID0gZmFsc2U7Cj4gKwl9 Cj4gKwo+ICsjZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19YKG5hbWUpIGRvIHsgXAo+ICsJaWYgKGN1 cnJlbnRfY29uZmlnLT5uYW1lICE9IHBpcGVfY29uZmlnLT5uYW1lKSB7IFwKPiArCQlwaXBlX2Nv bmZpZ19lcnIoYWRqdXN0LCBfX3N0cmluZ2lmeShuYW1lKSwgXAo+ICsJCQkgICIoZXhwZWN0ZWQg MHglMDh4LCBmb3VuZCAweCUwOHgpXG4iLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPm5hbWUs IFwKPiArCQkJICBwaXBlX2NvbmZpZy0+bmFtZSk7IFwKPiArCQlyZXQgPSBmYWxzZTsgXAo+ICsJ fSBcCj4gK30gd2hpbGUgKDApCj4gKwo+ICsjZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19JKG5hbWUp IGRvIHsgXAo+ICsJaWYgKGN1cnJlbnRfY29uZmlnLT5uYW1lICE9IHBpcGVfY29uZmlnLT5uYW1l KSB7IFwKPiArCQlwaXBlX2NvbmZpZ19lcnIoYWRqdXN0LCBfX3N0cmluZ2lmeShuYW1lKSwgXAo+ ICsJCQkgICIoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwgXAo+ICsJCQkgIGN1cnJlbnRfY29u ZmlnLT5uYW1lLCBcCj4gKwkJCSAgcGlwZV9jb25maWctPm5hbWUpOyBcCj4gKwkJcmV0ID0gZmFs c2U7IFwKPiArCX0gXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArI2RlZmluZSBQSVBFX0NPTkZfQ0hF Q0tfQk9PTChuYW1lKSBkbyB7IFwKPiArCWlmIChjdXJyZW50X2NvbmZpZy0+bmFtZSAhPSBwaXBl X2NvbmZpZy0+bmFtZSkgeyBcCj4gKwkJcGlwZV9jb25maWdfZXJyKGFkanVzdCwgX19zdHJpbmdp ZnkobmFtZSksIFwKPiArCQkJICAiKGV4cGVjdGVkICVzLCBmb3VuZCAlcylcbiIsIFwKPiArCQkJ ICB5ZXNubyhjdXJyZW50X2NvbmZpZy0+bmFtZSksIFwKPiArCQkJICB5ZXNubyhwaXBlX2NvbmZp Zy0+bmFtZSkpOyBcCj4gKwkJcmV0ID0gZmFsc2U7IFwKPiArCX0gXAo+ICt9IHdoaWxlICgwKQo+ ICsKPiArLyoKPiArICogQ2hlY2tzIHN0YXRlIHdoZXJlIHdlIG9ubHkgcmVhZCBvdXQgdGhlIGVu YWJsaW5nLCBidXQgbm90IHRoZSBlbnRpcmUKPiArICogc3RhdGUgaXRzZWxmIChsaWtlIGZ1bGwg aW5mb2ZyYW1lcyBvciBFTEQgZm9yIGF1ZGlvKS4gVGhlc2Ugc3RhdGVzCj4gKyAqIHJlcXVpcmUg YSBmdWxsIG1vZGVzZXQgb24gYm9vdHVwIHRvIGZpeCB1cC4KPiArICovCj4gKyNkZWZpbmUgUElQ RV9DT05GX0NIRUNLX0JPT0xfSU5DT01QTEVURShuYW1lKSBkbyB7IFwKPiArCWlmICghZml4dXBf aW5oZXJpdGVkIHx8ICghY3VycmVudF9jb25maWctPm5hbWUgJiYgIXBpcGVfY29uZmlnLT5uYW1l KSkgeyBcCj4gKwkJUElQRV9DT05GX0NIRUNLX0JPT0wobmFtZSk7IFwKPiArCX0gZWxzZSB7IFwK PiArCQlwaXBlX2NvbmZpZ19lcnIoYWRqdXN0LCBfX3N0cmluZ2lmeShuYW1lKSwgXAo+ICsJCQkg ICJ1bmFibGUgdG8gdmVyaWZ5IHdoZXRoZXIgc3RhdGUgbWF0Y2hlcyBleGFjdGx5LCBmb3JjaW5n IG1vZGVzZXQgKGV4cGVjdGVkICVzLCBmb3VuZCAlcylcbiIsIFwKPiArCQkJICB5ZXNubyhjdXJy ZW50X2NvbmZpZy0+bmFtZSksIFwKPiArCQkJICB5ZXNubyhwaXBlX2NvbmZpZy0+bmFtZSkpOyBc Cj4gKwkJcmV0ID0gZmFsc2U7IFwKPiArCX0gXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArI2RlZmlu ZSBQSVBFX0NPTkZfQ0hFQ0tfUChuYW1lKSBkbyB7IFwKPiArCWlmIChjdXJyZW50X2NvbmZpZy0+ bmFtZSAhPSBwaXBlX2NvbmZpZy0+bmFtZSkgeyBcCj4gKwkJcGlwZV9jb25maWdfZXJyKGFkanVz dCwgX19zdHJpbmdpZnkobmFtZSksIFwKPiArCQkJICAiKGV4cGVjdGVkICVwLCBmb3VuZCAlcClc biIsIFwKPiArCQkJICBjdXJyZW50X2NvbmZpZy0+bmFtZSwgXAo+ICsJCQkgIHBpcGVfY29uZmln LT5uYW1lKTsgXAo+ICsJCXJldCA9IGZhbHNlOyBcCj4gKwl9IFwKPiArfSB3aGlsZSAoMCkKPiAr Cj4gKyNkZWZpbmUgUElQRV9DT05GX0NIRUNLX01fTihuYW1lKSBkbyB7IFwKPiArCWlmICghaW50 ZWxfY29tcGFyZV9saW5rX21fbigmY3VycmVudF9jb25maWctPm5hbWUsIFwKPiArCQkJCSAgICAm cGlwZV9jb25maWctPm5hbWUsXAo+ICsJCQkJICAgIGFkanVzdCkpIHsgXAo+ICsJCXBpcGVfY29u ZmlnX2VycihhZGp1c3QsIF9fc3RyaW5naWZ5KG5hbWUpLCBcCj4gKwkJCSAgIihleHBlY3RlZCB0 dSAlaSBnbWNoICVpLyVpIGxpbmsgJWkvJWksICIgXAo+ICsJCQkgICJmb3VuZCB0dSAlaSwgZ21j aCAlaS8laSBsaW5rICVpLyVpKVxuIiwgXAo+ICsJCQkgIGN1cnJlbnRfY29uZmlnLT5uYW1lLnR1 LCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPm5hbWUuZ21jaF9tLCBcCj4gKwkJCSAgY3VycmVu dF9jb25maWctPm5hbWUuZ21jaF9uLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPm5hbWUubGlu a19tLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPm5hbWUubGlua19uLCBcCj4gKwkJCSAgcGlw ZV9jb25maWctPm5hbWUudHUsIFwKPiArCQkJICBwaXBlX2NvbmZpZy0+bmFtZS5nbWNoX20sIFwK PiArCQkJICBwaXBlX2NvbmZpZy0+bmFtZS5nbWNoX24sIFwKPiArCQkJICBwaXBlX2NvbmZpZy0+ bmFtZS5saW5rX20sIFwKPiArCQkJICBwaXBlX2NvbmZpZy0+bmFtZS5saW5rX24pOyBcCj4gKwkJ cmV0ID0gZmFsc2U7IFwKPiArCX0gXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArLyogVGhpcyBpcyBy ZXF1aXJlZCBmb3IgQkRXKyB3aGVyZSB0aGVyZSBpcyBvbmx5IG9uZSBzZXQgb2YgcmVnaXN0ZXJz IGZvcgo+ICsgKiBzd2l0Y2hpbmcgYmV0d2VlbiBoaWdoIGFuZCBsb3cgUlIuCj4gKyAqIFRoaXMg bWFjcm8gY2FuIGJlIHVzZWQgd2hlbmV2ZXIgYSBjb21wYXJpc29uIGhhcyB0byBiZSBtYWRlIGJl dHdlZW4gb25lCj4gKyAqIGh3IHN0YXRlIGFuZCBtdWx0aXBsZSBzdyBzdGF0ZSB2YXJpYWJsZXMu Cj4gKyAqLwo+ICsjZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19NX05fQUxUKG5hbWUsIGFsdF9uYW1l KSBkbyB7IFwKPiArCWlmICghaW50ZWxfY29tcGFyZV9saW5rX21fbigmY3VycmVudF9jb25maWct Pm5hbWUsIFwKPiArCQkJCSAgICAmcGlwZV9jb25maWctPm5hbWUsIGFkanVzdCkgJiYgXAo+ICsJ ICAgICFpbnRlbF9jb21wYXJlX2xpbmtfbV9uKCZjdXJyZW50X2NvbmZpZy0+YWx0X25hbWUsIFwK PiArCQkJCSAgICAmcGlwZV9jb25maWctPm5hbWUsIGFkanVzdCkpIHsgXAo+ICsJCXBpcGVfY29u ZmlnX2VycihhZGp1c3QsIF9fc3RyaW5naWZ5KG5hbWUpLCBcCj4gKwkJCSAgIihleHBlY3RlZCB0 dSAlaSBnbWNoICVpLyVpIGxpbmsgJWkvJWksICIgXAo+ICsJCQkgICJvciB0dSAlaSBnbWNoICVp LyVpIGxpbmsgJWkvJWksICIgXAo+ICsJCQkgICJmb3VuZCB0dSAlaSwgZ21jaCAlaS8laSBsaW5r ICVpLyVpKVxuIiwgXAo+ICsJCQkgIGN1cnJlbnRfY29uZmlnLT5uYW1lLnR1LCBcCj4gKwkJCSAg Y3VycmVudF9jb25maWctPm5hbWUuZ21jaF9tLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPm5h bWUuZ21jaF9uLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPm5hbWUubGlua19tLCBcCj4gKwkJ CSAgY3VycmVudF9jb25maWctPm5hbWUubGlua19uLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWct PmFsdF9uYW1lLnR1LCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPmFsdF9uYW1lLmdtY2hfbSwg XAo+ICsJCQkgIGN1cnJlbnRfY29uZmlnLT5hbHRfbmFtZS5nbWNoX24sIFwKPiArCQkJICBjdXJy ZW50X2NvbmZpZy0+YWx0X25hbWUubGlua19tLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPmFs dF9uYW1lLmxpbmtfbiwgXAo+ICsJCQkgIHBpcGVfY29uZmlnLT5uYW1lLnR1LCBcCj4gKwkJCSAg cGlwZV9jb25maWctPm5hbWUuZ21jaF9tLCBcCj4gKwkJCSAgcGlwZV9jb25maWctPm5hbWUuZ21j aF9uLCBcCj4gKwkJCSAgcGlwZV9jb25maWctPm5hbWUubGlua19tLCBcCj4gKwkJCSAgcGlwZV9j b25maWctPm5hbWUubGlua19uKTsgXAo+ICsJCXJldCA9IGZhbHNlOyBcCj4gKwl9IFwKPiArfSB3 aGlsZSAoMCkKPiArCj4gKyNkZWZpbmUgUElQRV9DT05GX0NIRUNLX0ZMQUdTKG5hbWUsIG1hc2sp IGRvIHsgXAo+ICsJaWYgKChjdXJyZW50X2NvbmZpZy0+bmFtZSBeIHBpcGVfY29uZmlnLT5uYW1l KSAmIChtYXNrKSkgeyBcCj4gKwkJcGlwZV9jb25maWdfZXJyKGFkanVzdCwgX19zdHJpbmdpZnko bmFtZSksIFwKPiArCQkJICAiKCV4KSAoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwgXAo+ICsJ CQkgIChtYXNrKSwgXAo+ICsJCQkgIGN1cnJlbnRfY29uZmlnLT5uYW1lICYgKG1hc2spLCBcCj4g KwkJCSAgcGlwZV9jb25maWctPm5hbWUgJiAobWFzaykpOyBcCj4gKwkJcmV0ID0gZmFsc2U7IFwK PiArCX0gXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArI2RlZmluZSBQSVBFX0NPTkZfQ0hFQ0tfQ0xP Q0tfRlVaWlkobmFtZSkgZG8geyBcCj4gKwlpZiAoIWludGVsX2Z1enp5X2Nsb2NrX2NoZWNrKGN1 cnJlbnRfY29uZmlnLT5uYW1lLCBwaXBlX2NvbmZpZy0+bmFtZSkpIHsgXAo+ICsJCXBpcGVfY29u ZmlnX2VycihhZGp1c3QsIF9fc3RyaW5naWZ5KG5hbWUpLCBcCj4gKwkJCSAgIihleHBlY3RlZCAl aSwgZm91bmQgJWkpXG4iLCBcCj4gKwkJCSAgY3VycmVudF9jb25maWctPm5hbWUsIFwKPiArCQkJ ICBwaXBlX2NvbmZpZy0+bmFtZSk7IFwKPiArCQlyZXQgPSBmYWxzZTsgXAo+ICsJfSBcCj4gK30g d2hpbGUgKDApCj4gKwo+ICsjZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19JTkZPRlJBTUUobmFtZSkg ZG8geyBcCj4gKwlpZiAoIWludGVsX2NvbXBhcmVfaW5mb2ZyYW1lKCZjdXJyZW50X2NvbmZpZy0+ aW5mb2ZyYW1lcy5uYW1lLCBcCj4gKwkJCQkgICAgICZwaXBlX2NvbmZpZy0+aW5mb2ZyYW1lcy5u YW1lKSkgeyBcCj4gKwkJcGlwZV9jb25maWdfaW5mb2ZyYW1lX2VycihkZXZfcHJpdiwgYWRqdXN0 LCBfX3N0cmluZ2lmeShuYW1lKSwgXAo+ICsJCQkJCSAgJmN1cnJlbnRfY29uZmlnLT5pbmZvZnJh bWVzLm5hbWUsIFwKPiArCQkJCQkgICZwaXBlX2NvbmZpZy0+aW5mb2ZyYW1lcy5uYW1lKTsgXAo+ ICsJCXJldCA9IGZhbHNlOyBcCj4gKwl9IFwKPiArfSB3aGlsZSAoMCkKPiArCj4gKyNkZWZpbmUg UElQRV9DT05GX1FVSVJLKHF1aXJrKSBcCj4gKwkoKGN1cnJlbnRfY29uZmlnLT5xdWlya3MgfCBw aXBlX2NvbmZpZy0+cXVpcmtzKSAmIChxdWlyaykpCj4gKwo+ICsJUElQRV9DT05GX0NIRUNLX0ko Y3B1X3RyYW5zY29kZXIpOwo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19CT09MKGhhc19wY2hfZW5j b2Rlcik7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShmZGlfbGFuZXMpOwo+ICsJUElQRV9DT05GX0NI RUNLX01fTihmZGlfbV9uKTsKPiArCj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShsYW5lX2NvdW50KTsK PiArCVBJUEVfQ09ORl9DSEVDS19YKGxhbmVfbGF0X29wdGltX21hc2spOwo+ICsKPiArCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpIDwgOCkgewo+ICsJCVBJUEVfQ09ORl9DSEVDS19NX04oZHBfbV9u KTsKPiArCj4gKwkJaWYgKGN1cnJlbnRfY29uZmlnLT5oYXNfZHJycykKPiArCQkJUElQRV9DT05G X0NIRUNLX01fTihkcF9tMl9uMik7Cj4gKwl9IGVsc2UKPiArCQlQSVBFX0NPTkZfQ0hFQ0tfTV9O X0FMVChkcF9tX24sIGRwX20yX24yKTsKPiArCj4gKwlQSVBFX0NPTkZfQ0hFQ0tfWChvdXRwdXRf dHlwZXMpOwo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRj X2hkaXNwbGF5KTsKPiArCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRj X2h0b3RhbCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21vZGUuY3J0Y19o Ymxhbmtfc3RhcnQpOwo+ICsJUElQRV9DT05GX0NIRUNLX0koYmFzZS5hZGp1c3RlZF9tb2RlLmNy dGNfaGJsYW5rX2VuZCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21vZGUu Y3J0Y19oc3luY19zdGFydCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVkX21v ZGUuY3J0Y19oc3luY19lbmQpOwo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0 ZWRfbW9kZS5jcnRjX3ZkaXNwbGF5KTsKPiArCVBJUEVfQ09ORl9DSEVDS19JKGJhc2UuYWRqdXN0 ZWRfbW9kZS5jcnRjX3Z0b3RhbCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFkanVzdGVk X21vZGUuY3J0Y192Ymxhbmtfc3RhcnQpOwo+ICsJUElQRV9DT05GX0NIRUNLX0koYmFzZS5hZGp1 c3RlZF9tb2RlLmNydGNfdmJsYW5rX2VuZCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNlLmFk anVzdGVkX21vZGUuY3J0Y192c3luY19zdGFydCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfSShiYXNl LmFkanVzdGVkX21vZGUuY3J0Y192c3luY19lbmQpOwo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19J KHBpeGVsX211bHRpcGxpZXIpOwo+ICsJUElQRV9DT05GX0NIRUNLX0kob3V0cHV0X2Zvcm1hdCk7 Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfQk9PTChoYXNfaGRtaV9zaW5rKTsKPiArCWlmICgoSU5URUxf R0VOKGRldl9wcml2KSA8IDggJiYgIUlTX0hBU1dFTEwoZGV2X3ByaXYpKSB8fAo+ICsJICAgIElT X1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJCVBJ UEVfQ09ORl9DSEVDS19CT09MKGxpbWl0ZWRfY29sb3JfcmFuZ2UpOwo+ICsKPiArCVBJUEVfQ09O Rl9DSEVDS19CT09MKGhkbWlfc2NyYW1ibGluZyk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfQk9PTCho ZG1pX2hpZ2hfdG1kc19jbG9ja19yYXRpbyk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfQk9PTF9JTkNP TVBMRVRFKGhhc19pbmZvZnJhbWUpOwo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19CT09MX0lOQ09N UExFVEUoaGFzX2F1ZGlvKTsKPiArCj4gKwlQSVBFX0NPTkZfQ0hFQ0tfRkxBR1MoYmFzZS5hZGp1 c3RlZF9tb2RlLmZsYWdzLAo+ICsJCQkgICAgICBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSk7Cj4g Kwo+ICsJaWYgKCFQSVBFX0NPTkZfUVVJUksoUElQRV9DT05GSUdfUVVJUktfTU9ERV9TWU5DX0ZM QUdTKSkgewo+ICsJCVBJUEVfQ09ORl9DSEVDS19GTEFHUyhiYXNlLmFkanVzdGVkX21vZGUuZmxh Z3MsCj4gKwkJCQkgICAgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyk7Cj4gKwkJUElQRV9DT05GX0NI RUNLX0ZMQUdTKGJhc2UuYWRqdXN0ZWRfbW9kZS5mbGFncywKPiArCQkJCSAgICAgIERSTV9NT0RF X0ZMQUdfTkhTWU5DKTsKPiArCQlQSVBFX0NPTkZfQ0hFQ0tfRkxBR1MoYmFzZS5hZGp1c3RlZF9t b2RlLmZsYWdzLAo+ICsJCQkJICAgICAgRFJNX01PREVfRkxBR19QVlNZTkMpOwo+ICsJCVBJUEVf Q09ORl9DSEVDS19GTEFHUyhiYXNlLmFkanVzdGVkX21vZGUuZmxhZ3MsCj4gKwkJCQkgICAgICBE Uk1fTU9ERV9GTEFHX05WU1lOQyk7Cj4gKwl9Cj4gKwo+ICsJUElQRV9DT05GX0NIRUNLX1goZ21j aF9wZml0LmNvbnRyb2wpOwo+ICsJLyogcGZpdCByYXRpb3MgYXJlIGF1dG9jb21wdXRlZCBieSB0 aGUgaHcgb24gZ2VuNCsgKi8KPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkKPiArCQlQ SVBFX0NPTkZfQ0hFQ0tfWChnbWNoX3BmaXQucGdtX3JhdGlvcyk7Cj4gKwlQSVBFX0NPTkZfQ0hF Q0tfWChnbWNoX3BmaXQubHZkc19ib3JkZXJfYml0cyk7Cj4gKwo+ICsJaWYgKCFhZGp1c3QpIHsK PiArCQlQSVBFX0NPTkZfQ0hFQ0tfSShwaXBlX3NyY193KTsKPiArCQlQSVBFX0NPTkZfQ0hFQ0tf SShwaXBlX3NyY19oKTsKPiArCj4gKwkJUElQRV9DT05GX0NIRUNLX0JPT0wocGNoX3BmaXQuZW5h YmxlZCk7Cj4gKwkJaWYgKGN1cnJlbnRfY29uZmlnLT5wY2hfcGZpdC5lbmFibGVkKSB7Cj4gKwkJ CVBJUEVfQ09ORl9DSEVDS19YKHBjaF9wZml0LnBvcyk7Cj4gKwkJCVBJUEVfQ09ORl9DSEVDS19Y KHBjaF9wZml0LnNpemUpOwo+ICsJCX0KPiArCj4gKwkJUElQRV9DT05GX0NIRUNLX0koc2NhbGVy X3N0YXRlLnNjYWxlcl9pZCk7Cj4gKwkJUElQRV9DT05GX0NIRUNLX0NMT0NLX0ZVWlpZKHBpeGVs X3JhdGUpOwo+ICsKPiArCQlQSVBFX0NPTkZfQ0hFQ0tfWChnYW1tYV9tb2RlKTsKPiArCQlpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKwkJCVBJUEVfQ09ORl9DSEVDS19YKGNnbV9tb2Rl KTsKPiArCQllbHNlCj4gKwkJCVBJUEVfQ09ORl9DSEVDS19YKGNzY19tb2RlKTsKPiArCQlQSVBF X0NPTkZfQ0hFQ0tfQk9PTChnYW1tYV9lbmFibGUpOwo+ICsJCVBJUEVfQ09ORl9DSEVDS19CT09M KGNzY19lbmFibGUpOwo+ICsJfQo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19CT09MKGRvdWJsZV93 aWRlKTsKPiArCj4gKwlQSVBFX0NPTkZfQ0hFQ0tfUChzaGFyZWRfZHBsbCk7Cj4gKwlQSVBFX0NP TkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLmRwbGwpOwo+ICsJUElQRV9DT05GX0NIRUNLX1goZHBs bF9od19zdGF0ZS5kcGxsX21kKTsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUu ZnAwKTsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuZnAxKTsKPiArCVBJUEVf Q09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUud3JwbGwpOwo+ICsJUElQRV9DT05GX0NIRUNLX1go ZHBsbF9od19zdGF0ZS5zcGxsKTsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUu Y3RybDEpOwo+ICsJUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5jZmdjcjEpOwo+ICsJ UElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5jZmdjcjIpOwo+ICsJUElQRV9DT05GX0NI RUNLX1goZHBsbF9od19zdGF0ZS5jZmdjcjApOwo+ICsJUElQRV9DT05GX0NIRUNLX1goZHBsbF9o d19zdGF0ZS5lYmIwKTsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuZWJiNCk7 Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLnBsbDApOwo+ICsJUElQRV9DT05G X0NIRUNLX1goZHBsbF9od19zdGF0ZS5wbGwxKTsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxf aHdfc3RhdGUucGxsMik7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLnBsbDMp Owo+ICsJUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5wbGw2KTsKPiArCVBJUEVfQ09O Rl9DSEVDS19YKGRwbGxfaHdfc3RhdGUucGxsOCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxs X2h3X3N0YXRlLnBsbDkpOwo+ICsJUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5wbGwx MCk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLnBjc2R3MTIpOwo+ICsJUElQ RV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5tZ19yZWZjbGtpbl9jdGwpOwo+ICsJUElQRV9D T05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5tZ19jbGt0b3AyX2NvcmVjbGtjdGwxKTsKPiArCVBJ UEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUubWdfY2xrdG9wMl9oc2Nsa2N0bCk7Cj4gKwlQ SVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLm1nX3BsbF9kaXYwKTsKPiArCVBJUEVfQ09O Rl9DSEVDS19YKGRwbGxfaHdfc3RhdGUubWdfcGxsX2RpdjEpOwo+ICsJUElQRV9DT05GX0NIRUNL X1goZHBsbF9od19zdGF0ZS5tZ19wbGxfbGYpOwo+ICsJUElQRV9DT05GX0NIRUNLX1goZHBsbF9o d19zdGF0ZS5tZ19wbGxfZnJhY19sb2NrKTsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdf c3RhdGUubWdfcGxsX3NzYyk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLm1n X3BsbF9iaWFzKTsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUubWdfcGxsX3Rk Y19jb2xkc3RfYmlhcyk7Cj4gKwo+ICsJUElQRV9DT05GX0NIRUNLX1goZHNpX3BsbC5jdHJsKTsK PiArCVBJUEVfQ09ORl9DSEVDS19YKGRzaV9wbGwuZGl2KTsKPiArCj4gKwlpZiAoSVNfRzRYKGRl dl9wcml2KSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUpCj4gKwkJUElQRV9DT05GX0NIRUNL X0kocGlwZV9icHApOwo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19DTE9DS19GVVpaWShiYXNlLmFk anVzdGVkX21vZGUuY3J0Y19jbG9jayk7Cj4gKwlQSVBFX0NPTkZfQ0hFQ0tfQ0xPQ0tfRlVaWlko cG9ydF9jbG9jayk7Cj4gKwo+ICsJUElQRV9DT05GX0NIRUNLX0kobWluX3ZvbHRhZ2VfbGV2ZWwp Owo+ICsKPiArCVBJUEVfQ09ORl9DSEVDS19YKGluZm9mcmFtZXMuZW5hYmxlKTsKPiArCVBJUEVf Q09ORl9DSEVDS19YKGluZm9mcmFtZXMuZ2NwKTsKPiArCVBJUEVfQ09ORl9DSEVDS19JTkZPRlJB TUUoYXZpKTsKPiArCVBJUEVfQ09ORl9DSEVDS19JTkZPRlJBTUUoc3BkKTsKPiArCVBJUEVfQ09O Rl9DSEVDS19JTkZPRlJBTUUoaGRtaSk7Cj4gKwo+ICsjdW5kZWYgUElQRV9DT05GX0NIRUNLX1gK PiArI3VuZGVmIFBJUEVfQ09ORl9DSEVDS19JCj4gKyN1bmRlZiBQSVBFX0NPTkZfQ0hFQ0tfQk9P TAo+ICsjdW5kZWYgUElQRV9DT05GX0NIRUNLX0JPT0xfSU5DT01QTEVURQo+ICsjdW5kZWYgUElQ RV9DT05GX0NIRUNLX1AKPiArI3VuZGVmIFBJUEVfQ09ORl9DSEVDS19GTEFHUwo+ICsjdW5kZWYg UElQRV9DT05GX0NIRUNLX0NMT0NLX0ZVWlpZCj4gKyN1bmRlZiBQSVBFX0NPTkZfUVVJUksKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3BpcGVfY29uZmlnX3Nhbml0 eV9jaGVjayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCQkgICAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+ICt7Cj4gKwlpZiAocGlw ZV9jb25maWctPmhhc19wY2hfZW5jb2Rlcikgewo+ICsJCWludCBmZGlfZG90Y2xvY2sgPSBpbnRl bF9kb3RjbG9ja19jYWxjdWxhdGUoaW50ZWxfZmRpX2xpbmtfZnJlcShkZXZfcHJpdiwgcGlwZV9j b25maWcpLAo+ICsJCQkJCQkJICAgICZwaXBlX2NvbmZpZy0+ZmRpX21fbik7Cj4gKwkJaW50IGRv dGNsb2NrID0gcGlwZV9jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOwo+ICsK PiArCQkvKgo+ICsJCSAqIEZESSBhbHJlYWR5IHByb3ZpZGVkIG9uZSBpZGVhIGZvciB0aGUgZG90 Y2xvY2suCj4gKwkJICogWWVsbCBpZiB0aGUgZW5jb2RlciBkaXNhZ3JlZXMuCj4gKwkJICovCj4g KwkJV0FSTighaW50ZWxfZnV6enlfY2xvY2tfY2hlY2soZmRpX2RvdGNsb2NrLCBkb3RjbG9jayks Cj4gKwkJICAgICAiRkRJIGRvdGNsb2NrIGFuZCBlbmNvZGVyIGRvdGNsb2NrIG1pc21hdGNoLCBm ZGk6ICVpLCBlbmNvZGVyOiAlaVxuIiwKPiArCQkgICAgIGZkaV9kb3RjbG9jaywgZG90Y2xvY2sp Owo+ICsJfQo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCB2ZXJpZnlfd21fc3RhdGUoc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ICAJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfc3RhdGUp Cj4gIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmVyaWZ5Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJpZnkuaAo+IGluZGV4IDRiNzUxZWEuLmZh YWY4ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJpZnkuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5oCj4gQEAgLTEwLDcgKzEw LDE1IEBAIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlOwo+ICBzdHJ1Y3QgZHJtX2NydGM7Cj4gIHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZTsKPiAgc3RydWN0IGRybV9kZXZpY2U7Cj4gK3N0cnVjdCBkcm1f aTkxNV9wcml2YXRlOwo+ICtzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsKPiAgCj4gK3ZvaWQgaW50 ZWxfcGlwZV9jb25maWdfc2FuaXR5X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25m aWcpOwo+ICtib29sIGludGVsX3BpcGVfY29uZmlnX2NvbXBhcmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICsJCQkgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmN1 cnJlbnRfY29uZmlnLAo+ICsJCQkgICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVf Y29uZmlnLAo+ICsJCQkgICAgICAgYm9vbCBhZGp1c3QpOwo+ICB2b2lkIGludGVsX3ZlcmlmeV9t b2Rlc2V0X2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCQkgICAgICAgc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRl ICpvbGRfc3RhdGUsCj4gLS0gCj4gMi4yMC4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBF bmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4