From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 1/2] drm/i915: start moving state checker to intel_verify.c Date: Wed, 15 May 2019 11:38:26 +0200 Message-ID: <20190515093826.GI17751@phenom.ffwll.local> References: <20190416103603.8266-1-jani.nikula@intel.com> <20190515093331.GG17751@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id C8A3089780 for ; Wed, 15 May 2019 09:38:31 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id l25so3192563eda.9 for ; Wed, 15 May 2019 02:38:31 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190515093331.GG17751@phenom.ffwll.local> 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 T24gV2VkLCBNYXkgMTUsIDIwMTkgYXQgMTE6MzM6MzFBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUdWUsIEFwciAxNiwgMjAxOSBhdCAwMTozNjowMlBNICswMzAwLCBKYW5pIE5p a3VsYSB3cm90ZToKPiA+IFNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBp bnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAg ICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8IDQ3 NCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCAgICAgfCAgMTIgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zl cmlmeS5jICB8IDQ2NCArKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5oICB8ICAyMiArKwo+ID4gIDUgZmlsZXMgY2hhbmdlZCwg NTEwIGluc2VydGlvbnMoKyksIDQ2MyBkZWxldGlvbnMoLSkKPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmVyaWZ5LmMKPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdmVyaWZ5LmgKPiA+IAo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiA+IGluZGV4IGZiY2IwOTA0Li5hMDAwZmFkIDEwMDY0NAo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlCj4gPiBAQCAtMTY2LDYgKzE2Niw3IEBAIGk5MTUteSArPSBkdm9fY2g3MDE3 Lm8gXAo+ID4gIAkgIGludGVsX3BhbmVsLm8gXAo+ID4gIAkgIGludGVsX3Nkdm8ubyBcCj4gPiAg CSAgaW50ZWxfdHYubyBcCj4gPiArCSAgaW50ZWxfdmVyaWZ5Lm8gXAo+ID4gIAkgIHZsdl9kc2ku byBcCj4gPiAgCSAgdmx2X2RzaV9wbGwubyBcCj4gPiAgCSAgaW50ZWxfdmRzYy5vCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBpbmRleCAzYmQ0MGEuLjMxYTkzMSAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBAQCAtNjksNiArNjks NyBAQAo+ID4gICNpbmNsdWRlICJpbnRlbF9zZHZvLmgiCj4gPiAgI2luY2x1ZGUgImludGVsX3Nw cml0ZS5oIgo+ID4gICNpbmNsdWRlICJpbnRlbF90di5oIgo+ID4gKyNpbmNsdWRlICJpbnRlbF92 ZXJpZnkuaCIKPiA+ICAKPiA+ICAvKiBQcmltYXJ5IHBsYW5lIGZvcm1hdHMgZm9yIGdlbiA8PSAz ICovCj4gPiAgc3RhdGljIGNvbnN0IHUzMiBpOHh4X3ByaW1hcnlfZm9ybWF0c1tdID0gewo+ID4g QEAgLTEyNDMsNyArMTI0NCw3IEBAIHZvaWQgYXNzZXJ0X3BpcGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ID4gIAkJCXBpcGVfbmFtZShwaXBlKSwgb25vZmYoc3RhdGUpLCBv bm9mZihjdXJfc3RhdGUpKTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgYXNzZXJ0X3Bs YW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsIGJvb2wgc3RhdGUpCj4gPiArdm9pZCBhc3Nl cnRfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwgYm9vbCBzdGF0ZSkKPiA+ICB7Cj4g PiAgCWVudW0gcGlwZSBwaXBlOwo+ID4gIAlib29sIGN1cl9zdGF0ZTsKPiA+IEBAIC02NjA3LDQ1 ICs2NjA4LDYgQEAgdm9pZCBpbnRlbF9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKQo+ID4gIAlrZnJlZShpbnRlbF9lbmNvZGVyKTsKPiA+ICB9Cj4gPiAgCj4gPiAt LyogQ3Jvc3MgY2hlY2sgdGhlIGFjdHVhbCBodyBzdGF0ZSB3aXRoIG91ciBvd24gbW9kZXNldCBz dGF0ZSB0cmFja2luZyAoYW5kIGl0J3MKPiA+IC0gKiBpbnRlcm5hbCBjb25zaXN0ZW5jeSkuICov Cj4gPiAtc3RhdGljIHZvaWQgaW50ZWxfY29ubmVjdG9yX3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiAtCQkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpj b25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKPiA+ IC0KPiA+IC0JRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc11cbiIsCj4gPiAtCQkgICAg ICBjb25uZWN0b3ItPmJhc2UuYmFzZS5pZCwKPiA+IC0JCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5u YW1lKTsKPiA+IC0KPiA+IC0JaWYgKGNvbm5lY3Rvci0+Z2V0X2h3X3N0YXRlKGNvbm5lY3Rvcikp IHsKPiA+IC0JCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0gY29ubmVjdG9yLT5lbmNv ZGVyOwo+ID4gLQo+ID4gLQkJSTkxNV9TVEFURV9XQVJOKCFjcnRjX3N0YXRlLAo+ID4gLQkJCSAi Y29ubmVjdG9yIGVuYWJsZWQgd2l0aG91dCBhdHRhY2hlZCBjcnRjXG4iKTsKPiA+IC0KPiA+IC0J CWlmICghY3J0Y19zdGF0ZSkKPiA+IC0JCQlyZXR1cm47Cj4gPiAtCj4gPiAtCQlJOTE1X1NUQVRF X1dBUk4oIWNydGNfc3RhdGUtPmFjdGl2ZSwKPiA+IC0JCSAgICAgICJjb25uZWN0b3IgaXMgYWN0 aXZlLCBidXQgYXR0YWNoZWQgY3J0YyBpc24ndFxuIik7Cj4gPiAtCj4gPiAtCQlpZiAoIWVuY29k ZXIgfHwgZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRFBfTVNUKQo+ID4gLQkJCXJldHVy bjsKPiA+IC0KPiA+IC0JCUk5MTVfU1RBVEVfV0FSTihjb25uX3N0YXRlLT5iZXN0X2VuY29kZXIg IT0gJmVuY29kZXItPmJhc2UsCj4gPiAtCQkJImF0b21pYyBlbmNvZGVyIGRvZXNuJ3QgbWF0Y2gg YXR0YWNoZWQgZW5jb2RlclxuIik7Cj4gPiAtCj4gPiAtCQlJOTE1X1NUQVRFX1dBUk4oY29ubl9z dGF0ZS0+Y3J0YyAhPSBlbmNvZGVyLT5iYXNlLmNydGMsCj4gPiAtCQkJImF0dGFjaGVkIGVuY29k ZXIgY3J0YyBkaWZmZXJzIGZyb20gY29ubmVjdG9yIGNydGNcbiIpOwo+ID4gLQl9IGVsc2Ugewo+ ID4gLQkJSTkxNV9TVEFURV9XQVJOKGNydGNfc3RhdGUgJiYgY3J0Y19zdGF0ZS0+YWN0aXZlLAo+ ID4gLQkJCSJhdHRhY2hlZCBjcnRjIGlzIGFjdGl2ZSwgYnV0IGNvbm5lY3RvciBpc24ndFxuIik7 Cj4gPiAtCQlJOTE1X1NUQVRFX1dBUk4oIWNydGNfc3RhdGUgJiYgY29ubl9zdGF0ZS0+YmVzdF9l bmNvZGVyLAo+ID4gLQkJCSJiZXN0IGVuY29kZXIgc2V0IHdpdGhvdXQgY3J0YyFcbiIpOwo+ID4g LQl9Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyBpbnQgcGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMo c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAgewo+ID4gIAlpZiAoY3J0 Y19zdGF0ZS0+YmFzZS5lbmFibGUgJiYgY3J0Y19zdGF0ZS0+aGFzX3BjaF9lbmNvZGVyKQo+ID4g QEAgLTY4NzksNyArNjg0MSw3IEBAIHN0YXRpYyB1MzIgaWxrX3BpcGVfcGl4ZWxfcmF0ZShjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gPiAgCXJldHVybiBwaXhl bF9yYXRlOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2NvbXB1dGVf cGl4ZWxfcmF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt2b2lk IGludGVsX2NydGNfY29tcHV0ZV9waXhlbF9yYXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjcnRjX3N0YXRlLT5iYXNlLmNydGMtPmRldik7Cj4gPiAgCj4gPiBAQCAtMTE1 ODQsOSArMTE1NDYsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3V0cHV0X2Zvcm1hdHMoZW51bSBp bnRlbF9vdXRwdXRfZm9ybWF0IGZvcm1hdCkKPiA+ICAJcmV0dXJuIG91dHB1dF9mb3JtYXRfc3Ry W2Zvcm1hdF07Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIGludGVsX2R1bXBfcGlwZV9j b25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiAtCQkJCSAgIHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpwaXBlX2NvbmZpZywKPiA+IC0JCQkJICAgY29uc3QgY2hhciAqY29udGV4dCkK PiA+ICt2b2lkIGludGVsX2R1bXBfcGlwZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMs Cj4gPiArCQkJICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKPiA+ICsJ CQkgICAgY29uc3QgY2hhciAqY29udGV4dCkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gQEAgLTEyMDc2LDcgKzEyMDM4LDcgQEAgc3RhdGlj IGJvb2wgZmFzdGJvb3RfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gPiAgCXJldHVybiBmYWxzZTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGJvb2wKPiA+ICti b29sCj4gPiAgaW50ZWxfcGlwZV9jb25maWdfY29tcGFyZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gPiAgCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3VycmVudF9j b25maWcsCj4gPiAgCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCj4g PiBAQCAtMTIzODksOCArMTIzNTEsOCBAQCBpbnRlbF9waXBlX2NvbmZpZ19jb21wYXJlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICAJcmV0dXJuIHJldDsKPiA+ICB9Cj4g PiAgCj4gPiAtc3RhdGljIHZvaWQgaW50ZWxfcGlwZV9jb25maWdfc2FuaXR5X2NoZWNrKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+IC0JCQkJCSAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiA+ICt2b2lkIGludGVsX3BpcGVfY29uZmln X3Nhbml0eV9jaGVjayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiArCQkJ CSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gPiAgewo+ ID4gIAlpZiAocGlwZV9jb25maWctPmhhc19wY2hfZW5jb2Rlcikgewo+ID4gIAkJaW50IGZkaV9k b3RjbG9jayA9IGludGVsX2RvdGNsb2NrX2NhbGN1bGF0ZShpbnRlbF9mZGlfbGlua19mcmVxKGRl dl9wcml2LCBwaXBlX2NvbmZpZyksCj4gPiBAQCAtMTI0MDcsNDIwICsxMjM2OSw2IEBAIHN0YXRp YyB2b2lkIGludGVsX3BpcGVfY29uZmlnX3Nhbml0eV9jaGVjayhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgdmVy aWZ5X3dtX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+IC0JCQkgICAgc3RydWN0IGRy bV9jcnRjX3N0YXRlICpuZXdfc3RhdGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmRldik7Cj4gPiAtCXN0cnVjdCBza2xfaHdf c3RhdGUgewo+ID4gLQkJc3RydWN0IHNrbF9kZGJfZW50cnkgZGRiX3lbSTkxNV9NQVhfUExBTkVT XTsKPiA+IC0JCXN0cnVjdCBza2xfZGRiX2VudHJ5IGRkYl91dltJOTE1X01BWF9QTEFORVNdOwo+ ID4gLQkJc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiBkZGI7Cj4gPiAtCQlzdHJ1Y3Qgc2tsX3Bp cGVfd20gd207Cj4gPiAtCX0gKmh3Owo+ID4gLQlzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpz d19kZGI7Cj4gPiAtCXN0cnVjdCBza2xfcGlwZV93bSAqc3dfd207Cj4gPiAtCXN0cnVjdCBza2xf ZGRiX2VudHJ5ICpod19kZGJfZW50cnksICpzd19kZGJfZW50cnk7Cj4gPiAtCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+IC0JY29uc3QgZW51 bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+ID4gLQlpbnQgcGxhbmUsIGxldmVsLCBt YXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2KTsKPiA+IC0KPiA+IC0JaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPCA5IHx8ICFuZXdfc3RhdGUtPmFjdGl2ZSkKPiA+IC0JCXJldHVy bjsKPiA+IC0KPiA+IC0JaHcgPSBremFsbG9jKHNpemVvZigqaHcpLCBHRlBfS0VSTkVMKTsKPiA+ IC0JaWYgKCFodykKPiA+IC0JCXJldHVybjsKPiA+IC0KPiA+IC0Jc2tsX3BpcGVfd21fZ2V0X2h3 X3N0YXRlKGludGVsX2NydGMsICZody0+d20pOwo+ID4gLQlzd193bSA9ICZ0b19pbnRlbF9jcnRj X3N0YXRlKG5ld19zdGF0ZSktPndtLnNrbC5vcHRpbWFsOwo+ID4gLQo+ID4gLQlza2xfcGlwZV9k ZGJfZ2V0X2h3X3N0YXRlKGludGVsX2NydGMsIGh3LT5kZGJfeSwgaHctPmRkYl91dik7Cj4gPiAt Cj4gPiAtCXNrbF9kZGJfZ2V0X2h3X3N0YXRlKGRldl9wcml2LCAmaHctPmRkYik7Cj4gPiAtCXN3 X2RkYiA9ICZkZXZfcHJpdi0+d20uc2tsX2h3LmRkYjsKPiA+IC0KPiA+IC0JaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTEgJiYKPiA+IC0JICAgIGh3LT5kZGIuZW5hYmxlZF9zbGljZXMgIT0g c3dfZGRiLT5lbmFibGVkX3NsaWNlcykKPiA+IC0JCURSTV9FUlJPUigibWlzbWF0Y2ggaW4gREJV RiBTbGljZXMgKGV4cGVjdGVkICV1LCBnb3QgJXUpXG4iLAo+ID4gLQkJCSAgc3dfZGRiLT5lbmFi bGVkX3NsaWNlcywKPiA+IC0JCQkgIGh3LT5kZGIuZW5hYmxlZF9zbGljZXMpOwo+ID4gLQo+ID4g LQkvKiBwbGFuZXMgKi8KPiA+IC0JZm9yX2VhY2hfdW5pdmVyc2FsX3BsYW5lKGRldl9wcml2LCBw aXBlLCBwbGFuZSkgewo+ID4gLQkJc3RydWN0IHNrbF9wbGFuZV93bSAqaHdfcGxhbmVfd20sICpz d19wbGFuZV93bTsKPiA+IC0KPiA+IC0JCWh3X3BsYW5lX3dtID0gJmh3LT53bS5wbGFuZXNbcGxh bmVdOwo+ID4gLQkJc3dfcGxhbmVfd20gPSAmc3dfd20tPnBsYW5lc1twbGFuZV07Cj4gPiAtCj4g PiAtCQkvKiBXYXRlcm1hcmtzICovCj4gPiAtCQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4 X2xldmVsOyBsZXZlbCsrKSB7Cj4gPiAtCQkJaWYgKHNrbF93bV9sZXZlbF9lcXVhbHMoJmh3X3Bs YW5lX3dtLT53bVtsZXZlbF0sCj4gPiAtCQkJCQkJJnN3X3BsYW5lX3dtLT53bVtsZXZlbF0pKQo+ ID4gLQkJCQljb250aW51ZTsKPiA+IC0KPiA+IC0JCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIFdN IHBpcGUgJWMgcGxhbmUgJWQgbGV2ZWwgJWQgKGV4cGVjdGVkIGU9JWQgYj0ldSBsPSV1LCBnb3Qg ZT0lZCBiPSV1IGw9JXUpXG4iLAo+ID4gLQkJCQkgIHBpcGVfbmFtZShwaXBlKSwgcGxhbmUgKyAx LCBsZXZlbCwKPiA+IC0JCQkJICBzd19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX2VuLAo+ID4g LQkJCQkgIHN3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2IsCj4gPiAtCQkJCSAgc3df cGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfbCwKPiA+IC0JCQkJICBod19wbGFuZV93bS0+ d21bbGV2ZWxdLnBsYW5lX2VuLAo+ID4gLQkJCQkgIGh3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxh bmVfcmVzX2IsCj4gPiAtCQkJCSAgaHdfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfbCk7 Cj4gPiAtCQl9Cj4gPiAtCj4gPiAtCQlpZiAoIXNrbF93bV9sZXZlbF9lcXVhbHMoJmh3X3BsYW5l X3dtLT50cmFuc193bSwKPiA+IC0JCQkJCSAmc3dfcGxhbmVfd20tPnRyYW5zX3dtKSkgewo+ID4g LQkJCURSTV9FUlJPUigibWlzbWF0Y2ggaW4gdHJhbnMgV00gcGlwZSAlYyBwbGFuZSAlZCAoZXhw ZWN0ZWQgZT0lZCBiPSV1IGw9JXUsIGdvdCBlPSVkIGI9JXUgbD0ldSlcbiIsCj4gPiAtCQkJCSAg cGlwZV9uYW1lKHBpcGUpLCBwbGFuZSArIDEsCj4gPiAtCQkJCSAgc3dfcGxhbmVfd20tPnRyYW5z X3dtLnBsYW5lX2VuLAo+ID4gLQkJCQkgIHN3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNf YiwKPiA+IC0JCQkJICBzd19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wsCj4gPiAtCQkJ CSAgaHdfcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2VuLAo+ID4gLQkJCQkgIGh3X3BsYW5lX3dt LT50cmFuc193bS5wbGFuZV9yZXNfYiwKPiA+IC0JCQkJICBod19wbGFuZV93bS0+dHJhbnNfd20u cGxhbmVfcmVzX2wpOwo+ID4gLQkJfQo+ID4gLQo+ID4gLQkJLyogRERCICovCj4gPiAtCQlod19k ZGJfZW50cnkgPSAmaHctPmRkYl95W3BsYW5lXTsKPiA+IC0JCXN3X2RkYl9lbnRyeSA9ICZ0b19p bnRlbF9jcnRjX3N0YXRlKG5ld19zdGF0ZSktPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV07Cj4g PiAtCj4gPiAtCQlpZiAoIXNrbF9kZGJfZW50cnlfZXF1YWwoaHdfZGRiX2VudHJ5LCBzd19kZGJf ZW50cnkpKSB7Cj4gPiAtCQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEREIgc3RhdGUgcGlwZSAl YyBwbGFuZSAlZCAoZXhwZWN0ZWQgKCV1LCV1KSwgZm91bmQgKCV1LCV1KSlcbiIsCj4gPiAtCQkJ CSAgcGlwZV9uYW1lKHBpcGUpLCBwbGFuZSArIDEsCj4gPiAtCQkJCSAgc3dfZGRiX2VudHJ5LT5z dGFydCwgc3dfZGRiX2VudHJ5LT5lbmQsCj4gPiAtCQkJCSAgaHdfZGRiX2VudHJ5LT5zdGFydCwg aHdfZGRiX2VudHJ5LT5lbmQpOwo+ID4gLQkJfQo+ID4gLQl9Cj4gPiAtCj4gPiAtCS8qCj4gPiAt CSAqIGN1cnNvcgo+ID4gLQkgKiBJZiB0aGUgY3Vyc29yIHBsYW5lIGlzbid0IGFjdGl2ZSwgd2Ug bWF5IG5vdCBoYXZlIHVwZGF0ZWQgaXQncyBkZGIKPiA+IC0JICogYWxsb2NhdGlvbi4gSW4gdGhh dCBjYXNlIHNpbmNlIHRoZSBkZGIgYWxsb2NhdGlvbiB3aWxsIGJlIHVwZGF0ZWQKPiA+IC0JICog b25jZSB0aGUgcGxhbmUgYmVjb21lcyB2aXNpYmxlLCB3ZSBjYW4gc2tpcCB0aGlzIGNoZWNrCj4g PiAtCSAqLwo+ID4gLQlpZiAoMSkgewo+ID4gLQkJc3RydWN0IHNrbF9wbGFuZV93bSAqaHdfcGxh bmVfd20sICpzd19wbGFuZV93bTsKPiA+IC0KPiA+IC0JCWh3X3BsYW5lX3dtID0gJmh3LT53bS5w bGFuZXNbUExBTkVfQ1VSU09SXTsKPiA+IC0JCXN3X3BsYW5lX3dtID0gJnN3X3dtLT5wbGFuZXNb UExBTkVfQ1VSU09SXTsKPiA+IC0KPiA+IC0JCS8qIFdhdGVybWFya3MgKi8KPiA+IC0JCWZvciAo bGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKPiA+IC0JCQlpZiAoc2ts X3dtX2xldmVsX2VxdWFscygmaHdfcGxhbmVfd20tPndtW2xldmVsXSwKPiA+IC0JCQkJCQkmc3df cGxhbmVfd20tPndtW2xldmVsXSkpCj4gPiAtCQkJCWNvbnRpbnVlOwo+ID4gLQo+ID4gLQkJCURS TV9FUlJPUigibWlzbWF0Y2ggaW4gV00gcGlwZSAlYyBjdXJzb3IgbGV2ZWwgJWQgKGV4cGVjdGVk IGU9JWQgYj0ldSBsPSV1LCBnb3QgZT0lZCBiPSV1IGw9JXUpXG4iLAo+ID4gLQkJCQkgIHBpcGVf bmFtZShwaXBlKSwgbGV2ZWwsCj4gPiAtCQkJCSAgc3dfcGxhbmVfd20tPndtW2xldmVsXS5wbGFu ZV9lbiwKPiA+IC0JCQkJICBzd19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iLAo+ID4g LQkJCQkgIHN3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2wsCj4gPiAtCQkJCSAgaHdf cGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9lbiwKPiA+IC0JCQkJICBod19wbGFuZV93bS0+d21b bGV2ZWxdLnBsYW5lX3Jlc19iLAo+ID4gLQkJCQkgIGh3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxh bmVfcmVzX2wpOwo+ID4gLQkJfQo+ID4gLQo+ID4gLQkJaWYgKCFza2xfd21fbGV2ZWxfZXF1YWxz KCZod19wbGFuZV93bS0+dHJhbnNfd20sCj4gPiAtCQkJCQkgJnN3X3BsYW5lX3dtLT50cmFuc193 bSkpIHsKPiA+IC0JCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIHRyYW5zIFdNIHBpcGUgJWMgY3Vy c29yIChleHBlY3RlZCBlPSVkIGI9JXUgbD0ldSwgZ290IGU9JWQgYj0ldSBsPSV1KVxuIiwKPiA+ IC0JCQkJICBwaXBlX25hbWUocGlwZSksCj4gPiAtCQkJCSAgc3dfcGxhbmVfd20tPnRyYW5zX3dt LnBsYW5lX2VuLAo+ID4gLQkJCQkgIHN3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfYiwK PiA+IC0JCQkJICBzd19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wsCj4gPiAtCQkJCSAg aHdfcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2VuLAo+ID4gLQkJCQkgIGh3X3BsYW5lX3dtLT50 cmFuc193bS5wbGFuZV9yZXNfYiwKPiA+IC0JCQkJICBod19wbGFuZV93bS0+dHJhbnNfd20ucGxh bmVfcmVzX2wpOwo+ID4gLQkJfQo+ID4gLQo+ID4gLQkJLyogRERCICovCj4gPiAtCQlod19kZGJf ZW50cnkgPSAmaHctPmRkYl95W1BMQU5FX0NVUlNPUl07Cj4gPiAtCQlzd19kZGJfZW50cnkgPSAm dG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfc3RhdGUpLT53bS5za2wucGxhbmVfZGRiX3lbUExBTkVf Q1VSU09SXTsKPiA+IC0KPiA+IC0JCWlmICghc2tsX2RkYl9lbnRyeV9lcXVhbChod19kZGJfZW50 cnksIHN3X2RkYl9lbnRyeSkpIHsKPiA+IC0JCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIEREQiBz dGF0ZSBwaXBlICVjIGN1cnNvciAoZXhwZWN0ZWQgKCV1LCV1KSwgZm91bmQgKCV1LCV1KSlcbiIs Cj4gPiAtCQkJCSAgcGlwZV9uYW1lKHBpcGUpLAo+ID4gLQkJCQkgIHN3X2RkYl9lbnRyeS0+c3Rh cnQsIHN3X2RkYl9lbnRyeS0+ZW5kLAo+ID4gLQkJCQkgIGh3X2RkYl9lbnRyeS0+c3RhcnQsIGh3 X2RkYl9lbnRyeS0+ZW5kKTsKPiA+IC0JCX0KPiA+IC0JfQo+ID4gLQo+ID4gLQlrZnJlZShodyk7 Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkCj4gPiAtdmVyaWZ5X2Nvbm5lY3Rvcl9zdGF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gLQkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSwKPiA+IC0JCSAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiAt ewo+ID4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gLQlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGU7Cj4gPiAtCWludCBpOwo+ID4gLQo+ID4g LQlmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IsIG5ld19j b25uX3N0YXRlLCBpKSB7Cj4gPiAtCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBjb25u ZWN0b3ItPmVuY29kZXI7Cj4gPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUg PSBOVUxMOwo+ID4gLQo+ID4gLQkJaWYgKG5ld19jb25uX3N0YXRlLT5jcnRjICE9IGNydGMpCj4g PiAtCQkJY29udGludWU7Cj4gPiAtCj4gPiAtCQlpZiAoY3J0YykKPiA+IC0JCQljcnRjX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG5ld19jb25uX3N0YXRlLT5j cnRjKTsKPiA+IC0KPiA+IC0JCWludGVsX2Nvbm5lY3Rvcl92ZXJpZnlfc3RhdGUoY3J0Y19zdGF0 ZSwgbmV3X2Nvbm5fc3RhdGUpOwo+ID4gLQo+ID4gLQkJSTkxNV9TVEFURV9XQVJOKG5ld19jb25u X3N0YXRlLT5iZXN0X2VuY29kZXIgIT0gZW5jb2RlciwKPiA+IC0JCSAgICAgImNvbm5lY3Rvcidz IGF0b21pYyBlbmNvZGVyIGRvZXNuJ3QgbWF0Y2ggbGVnYWN5IGVuY29kZXJcbiIpOwo+ID4gLQl9 Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkCj4gPiAtdmVyaWZ5X2VuY29kZXJfc3RhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ ID4gLXsKPiA+IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4gPiAtCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpvbGRfY29ubl9zdGF0ZSwgKm5ld19jb25uX3N0YXRlOwo+ID4gLQlpbnQgaTsKPiA+IC0KPiA+ IC0JZm9yX2VhY2hfaW50ZWxfZW5jb2RlcihkZXYsIGVuY29kZXIpIHsKPiA+IC0JCWJvb2wgZW5h YmxlZCA9IGZhbHNlLCBmb3VuZCA9IGZhbHNlOwo+ID4gLQkJZW51bSBwaXBlIHBpcGU7Cj4gPiAt Cj4gPiAtCQlEUk1fREVCVUdfS01TKCJbRU5DT0RFUjolZDolc11cbiIsCj4gPiAtCQkJICAgICAg ZW5jb2Rlci0+YmFzZS5iYXNlLmlkLAo+ID4gLQkJCSAgICAgIGVuY29kZXItPmJhc2UubmFtZSk7 Cj4gPiAtCj4gPiAtCQlmb3JfZWFjaF9vbGRuZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBj b25uZWN0b3IsIG9sZF9jb25uX3N0YXRlLAo+ID4gLQkJCQkJCSAgIG5ld19jb25uX3N0YXRlLCBp KSB7Cj4gPiAtCQkJaWYgKG9sZF9jb25uX3N0YXRlLT5iZXN0X2VuY29kZXIgPT0gJmVuY29kZXIt PmJhc2UpCj4gPiAtCQkJCWZvdW5kID0gdHJ1ZTsKPiA+IC0KPiA+IC0JCQlpZiAobmV3X2Nvbm5f c3RhdGUtPmJlc3RfZW5jb2RlciAhPSAmZW5jb2Rlci0+YmFzZSkKPiA+IC0JCQkJY29udGludWU7 Cj4gPiAtCQkJZm91bmQgPSBlbmFibGVkID0gdHJ1ZTsKPiA+IC0KPiA+IC0JCQlJOTE1X1NUQVRF X1dBUk4obmV3X2Nvbm5fc3RhdGUtPmNydGMgIT0KPiA+IC0JCQkJCWVuY29kZXItPmJhc2UuY3J0 YywKPiA+IC0JCQkgICAgICJjb25uZWN0b3IncyBjcnRjIGRvZXNuJ3QgbWF0Y2ggZW5jb2RlciBj cnRjXG4iKTsKPiA+IC0JCX0KPiA+IC0KPiA+IC0JCWlmICghZm91bmQpCj4gPiAtCQkJY29udGlu dWU7Cj4gPiAtCj4gPiAtCQlJOTE1X1NUQVRFX1dBUk4oISFlbmNvZGVyLT5iYXNlLmNydGMgIT0g ZW5hYmxlZCwKPiA+IC0JCSAgICAgImVuY29kZXIncyBlbmFibGVkIHN0YXRlIG1pc21hdGNoICIK PiA+IC0JCSAgICAgIihleHBlY3RlZCAlaSwgZm91bmQgJWkpXG4iLAo+ID4gLQkJICAgICAhIWVu Y29kZXItPmJhc2UuY3J0YywgZW5hYmxlZCk7Cj4gPiAtCj4gPiAtCQlpZiAoIWVuY29kZXItPmJh c2UuY3J0Yykgewo+ID4gLQkJCWJvb2wgYWN0aXZlOwo+ID4gLQo+ID4gLQkJCWFjdGl2ZSA9IGVu Y29kZXItPmdldF9od19zdGF0ZShlbmNvZGVyLCAmcGlwZSk7Cj4gPiAtCQkJSTkxNV9TVEFURV9X QVJOKGFjdGl2ZSwKPiA+IC0JCQkgICAgICJlbmNvZGVyIGRldGFjaGVkIGJ1dCBzdGlsbCBlbmFi bGVkIG9uIHBpcGUgJWMuXG4iLAo+ID4gLQkJCSAgICAgcGlwZV9uYW1lKHBpcGUpKTsKPiA+IC0J CX0KPiA+IC0JfQo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZAo+ID4gLXZlcmlmeV9jcnRj X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+IC0JCSAgc3RydWN0IGRybV9jcnRjX3N0 YXRlICpvbGRfY3J0Y19zdGF0ZSwKPiA+IC0JCSAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdf Y3J0Y19zdGF0ZSkKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2 KTsKPiA+IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4gPiAtCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+IC0Jc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLCAqc3dfY29uZmlnOwo+ID4gLQlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlOwo+ID4gLQlib29sIGFjdGl2ZTsKPiA+IC0KPiA+IC0J b2xkX3N0YXRlID0gb2xkX2NydGNfc3RhdGUtPnN0YXRlOwo+ID4gLQlfX2RybV9hdG9taWNfaGVs cGVyX2NydGNfZGVzdHJveV9zdGF0ZShvbGRfY3J0Y19zdGF0ZSk7Cj4gPiAtCXBpcGVfY29uZmln ID0gdG9faW50ZWxfY3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSk7Cj4gPiAtCW1lbXNldChwaXBl X2NvbmZpZywgMCwgc2l6ZW9mKCpwaXBlX2NvbmZpZykpOwo+ID4gLQlwaXBlX2NvbmZpZy0+YmFz ZS5jcnRjID0gY3J0YzsKPiA+IC0JcGlwZV9jb25maWctPmJhc2Uuc3RhdGUgPSBvbGRfc3RhdGU7 Cj4gPiAtCj4gPiAtCURSTV9ERUJVR19LTVMoIltDUlRDOiVkOiVzXVxuIiwgY3J0Yy0+YmFzZS5p ZCwgY3J0Yy0+bmFtZSk7Cj4gPiAtCj4gPiAtCWFjdGl2ZSA9IGRldl9wcml2LT5kaXNwbGF5Lmdl dF9waXBlX2NvbmZpZyhpbnRlbF9jcnRjLCBwaXBlX2NvbmZpZyk7Cj4gPiAtCj4gPiAtCS8qIHdl IGtlZXAgYm90aCBwaXBlcyBlbmFibGVkIG9uIDgzMCAqLwo+ID4gLQlpZiAoSVNfSTgzMChkZXZf cHJpdikpCj4gPiAtCQlhY3RpdmUgPSBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlOwo+ID4gLQo+ID4g LQlJOTE1X1NUQVRFX1dBUk4obmV3X2NydGNfc3RhdGUtPmFjdGl2ZSAhPSBhY3RpdmUsCj4gPiAt CSAgICAgImNydGMgYWN0aXZlIHN0YXRlIGRvZXNuJ3QgbWF0Y2ggd2l0aCBodyBzdGF0ZSAiCj4g PiAtCSAgICAgIihleHBlY3RlZCAlaSwgZm91bmQgJWkpXG4iLCBuZXdfY3J0Y19zdGF0ZS0+YWN0 aXZlLCBhY3RpdmUpOwo+ID4gLQo+ID4gLQlJOTE1X1NUQVRFX1dBUk4oaW50ZWxfY3J0Yy0+YWN0 aXZlICE9IG5ld19jcnRjX3N0YXRlLT5hY3RpdmUsCj4gPiAtCSAgICAgInRyYW5zaXRpb25hbCBh Y3RpdmUgc3RhdGUgZG9lcyBub3QgbWF0Y2ggYXRvbWljIGh3IHN0YXRlICIKPiA+IC0JICAgICAi KGV4cGVjdGVkICVpLCBmb3VuZCAlaSlcbiIsIG5ld19jcnRjX3N0YXRlLT5hY3RpdmUsIGludGVs X2NydGMtPmFjdGl2ZSk7Cj4gPiAtCj4gPiAtCWZvcl9lYWNoX2VuY29kZXJfb25fY3J0YyhkZXYs IGNydGMsIGVuY29kZXIpIHsKPiA+IC0JCWVudW0gcGlwZSBwaXBlOwo+ID4gLQo+ID4gLQkJYWN0 aXZlID0gZW5jb2Rlci0+Z2V0X2h3X3N0YXRlKGVuY29kZXIsICZwaXBlKTsKPiA+IC0JCUk5MTVf U1RBVEVfV0FSTihhY3RpdmUgIT0gbmV3X2NydGNfc3RhdGUtPmFjdGl2ZSwKPiA+IC0JCQkiW0VO Q09ERVI6JWldIGFjdGl2ZSAlaSB3aXRoIGNydGMgYWN0aXZlICVpXG4iLAo+ID4gLQkJCWVuY29k ZXItPmJhc2UuYmFzZS5pZCwgYWN0aXZlLCBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlKTsKPiA+IC0K PiA+IC0JCUk5MTVfU1RBVEVfV0FSTihhY3RpdmUgJiYgaW50ZWxfY3J0Yy0+cGlwZSAhPSBwaXBl LAo+ID4gLQkJCQkiRW5jb2RlciBjb25uZWN0ZWQgdG8gd3JvbmcgcGlwZSAlY1xuIiwKPiA+IC0J CQkJcGlwZV9uYW1lKHBpcGUpKTsKPiA+IC0KPiA+IC0JCWlmIChhY3RpdmUpCj4gPiAtCQkJZW5j b2Rlci0+Z2V0X2NvbmZpZyhlbmNvZGVyLCBwaXBlX2NvbmZpZyk7Cj4gPiAtCX0KPiA+IC0KPiA+ IC0JaW50ZWxfY3J0Y19jb21wdXRlX3BpeGVsX3JhdGUocGlwZV9jb25maWcpOwo+ID4gLQo+ID4g LQlpZiAoIW5ld19jcnRjX3N0YXRlLT5hY3RpdmUpCj4gPiAtCQlyZXR1cm47Cj4gPiAtCj4gPiAt CWludGVsX3BpcGVfY29uZmlnX3Nhbml0eV9jaGVjayhkZXZfcHJpdiwgcGlwZV9jb25maWcpOwo+ ID4gLQo+ID4gLQlzd19jb25maWcgPSB0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19jcnRjX3N0YXRl KTsKPiA+IC0JaWYgKCFpbnRlbF9waXBlX2NvbmZpZ19jb21wYXJlKGRldl9wcml2LCBzd19jb25m aWcsCj4gPiAtCQkJCSAgICAgICBwaXBlX2NvbmZpZywgZmFsc2UpKSB7Cj4gPiAtCQlJOTE1X1NU QVRFX1dBUk4oMSwgInBpcGUgc3RhdGUgZG9lc24ndCBtYXRjaCFcbiIpOwo+ID4gLQkJaW50ZWxf ZHVtcF9waXBlX2NvbmZpZyhpbnRlbF9jcnRjLCBwaXBlX2NvbmZpZywKPiA+IC0JCQkJICAgICAg ICJbaHcgc3RhdGVdIik7Cj4gPiAtCQlpbnRlbF9kdW1wX3BpcGVfY29uZmlnKGludGVsX2NydGMs IHN3X2NvbmZpZywKPiA+IC0JCQkJICAgICAgICJbc3cgc3RhdGVdIik7Cj4gPiAtCX0KPiA+IC19 Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQKPiA+IC1pbnRlbF92ZXJpZnlfcGxhbmVzKHN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZTsKPiA+IC0JY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZTsKPiA+IC0JaW50IGk7Cj4gPiAtCj4gPiAtCWZvcl9lYWNoX25ld19pbnRlbF9wbGFuZV9pbl9z dGF0ZShzdGF0ZSwgcGxhbmUsCj4gPiAtCQkJCQkgIHBsYW5lX3N0YXRlLCBpKQo+ID4gLQkJYXNz ZXJ0X3BsYW5lKHBsYW5lLCBwbGFuZV9zdGF0ZS0+c2xhdmUgfHwKPiA+IC0JCQkgICAgIHBsYW5l X3N0YXRlLT5iYXNlLnZpc2libGUpOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZAo+ID4g LXZlcmlmeV9zaW5nbGVfZHBsbF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gPiAtCQkJIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsLAo+ID4gLQkJCSBzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X3N0 YXRlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGludGVsX2RwbGxfaHdfc3RhdGUgZHBsbF9od19zdGF0 ZTsKPiA+IC0JdW5zaWduZWQgaW50IGNydGNfbWFzazsKPiA+IC0JYm9vbCBhY3RpdmU7Cj4gPiAt Cj4gPiAtCW1lbXNldCgmZHBsbF9od19zdGF0ZSwgMCwgc2l6ZW9mKGRwbGxfaHdfc3RhdGUpKTsK PiA+IC0KPiA+IC0JRFJNX0RFQlVHX0tNUygiJXNcbiIsIHBsbC0+aW5mby0+bmFtZSk7Cj4gPiAt Cj4gPiAtCWFjdGl2ZSA9IHBsbC0+aW5mby0+ZnVuY3MtPmdldF9od19zdGF0ZShkZXZfcHJpdiwg cGxsLCAmZHBsbF9od19zdGF0ZSk7Cj4gPiAtCj4gPiAtCWlmICghKHBsbC0+aW5mby0+ZmxhZ3Mg JiBJTlRFTF9EUExMX0FMV0FZU19PTikpIHsKPiA+IC0JCUk5MTVfU1RBVEVfV0FSTighcGxsLT5v biAmJiBwbGwtPmFjdGl2ZV9tYXNrLAo+ID4gLQkJICAgICAicGxsIGluIGFjdGl2ZSB1c2UgYnV0 IG5vdCBvbiBpbiBzdyB0cmFja2luZ1xuIik7Cj4gPiAtCQlJOTE1X1NUQVRFX1dBUk4ocGxsLT5v biAmJiAhcGxsLT5hY3RpdmVfbWFzaywKPiA+IC0JCSAgICAgInBsbCBpcyBvbiBidXQgbm90IHVz ZWQgYnkgYW55IGFjdGl2ZSBjcnRjXG4iKTsKPiA+IC0JCUk5MTVfU1RBVEVfV0FSTihwbGwtPm9u ICE9IGFjdGl2ZSwKPiA+IC0JCSAgICAgInBsbCBvbiBzdGF0ZSBtaXNtYXRjaCAoZXhwZWN0ZWQg JWksIGZvdW5kICVpKVxuIiwKPiA+IC0JCSAgICAgcGxsLT5vbiwgYWN0aXZlKTsKPiA+IC0JfQo+ ID4gLQo+ID4gLQlpZiAoIWNydGMpIHsKPiA+IC0JCUk5MTVfU1RBVEVfV0FSTihwbGwtPmFjdGl2 ZV9tYXNrICYgfnBsbC0+c3RhdGUuY3J0Y19tYXNrLAo+ID4gLQkJCQkibW9yZSBhY3RpdmUgcGxs IHVzZXJzIHRoYW4gcmVmZXJlbmNlczogJXggdnMgJXhcbiIsCj4gPiAtCQkJCXBsbC0+YWN0aXZl X21hc2ssIHBsbC0+c3RhdGUuY3J0Y19tYXNrKTsKPiA+IC0KPiA+IC0JCXJldHVybjsKPiA+IC0J fQo+ID4gLQo+ID4gLQljcnRjX21hc2sgPSBkcm1fY3J0Y19tYXNrKGNydGMpOwo+ID4gLQo+ID4g LQlpZiAobmV3X3N0YXRlLT5hY3RpdmUpCj4gPiAtCQlJOTE1X1NUQVRFX1dBUk4oIShwbGwtPmFj dGl2ZV9tYXNrICYgY3J0Y19tYXNrKSwKPiA+IC0JCQkJInBsbCBhY3RpdmUgbWlzbWF0Y2ggKGV4 cGVjdGVkIHBpcGUgJWMgaW4gYWN0aXZlIG1hc2sgMHglMDJ4KVxuIiwKPiA+IC0JCQkJcGlwZV9u YW1lKGRybV9jcnRjX2luZGV4KGNydGMpKSwgcGxsLT5hY3RpdmVfbWFzayk7Cj4gPiAtCWVsc2UK PiA+IC0JCUk5MTVfU1RBVEVfV0FSTihwbGwtPmFjdGl2ZV9tYXNrICYgY3J0Y19tYXNrLAo+ID4g LQkJCQkicGxsIGFjdGl2ZSBtaXNtYXRjaCAoZGlkbid0IGV4cGVjdCBwaXBlICVjIGluIGFjdGl2 ZSBtYXNrIDB4JTAyeClcbiIsCj4gPiAtCQkJCXBpcGVfbmFtZShkcm1fY3J0Y19pbmRleChjcnRj KSksIHBsbC0+YWN0aXZlX21hc2spOwo+ID4gLQo+ID4gLQlJOTE1X1NUQVRFX1dBUk4oIShwbGwt PnN0YXRlLmNydGNfbWFzayAmIGNydGNfbWFzayksCj4gPiAtCQkJInBsbCBlbmFibGVkIGNydGNz IG1pc21hdGNoIChleHBlY3RlZCAweCV4IGluIDB4JTAyeClcbiIsCj4gPiAtCQkJY3J0Y19tYXNr LCBwbGwtPnN0YXRlLmNydGNfbWFzayk7Cj4gPiAtCj4gPiAtCUk5MTVfU1RBVEVfV0FSTihwbGwt Pm9uICYmIG1lbWNtcCgmcGxsLT5zdGF0ZS5od19zdGF0ZSwKPiA+IC0JCQkJCSAgJmRwbGxfaHdf c3RhdGUsCj4gPiAtCQkJCQkgIHNpemVvZihkcGxsX2h3X3N0YXRlKSksCj4gPiAtCQkJInBsbCBo dyBzdGF0ZSBtaXNtYXRjaFxuIik7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkCj4gPiAt dmVyaWZ5X3NoYXJlZF9kcGxsX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiA+IC0JCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19z dGF0ZSwKPiA+IC0JCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkKPiA+ IC17Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2 KTsKPiA+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX2ludGVsX2Ny dGNfc3RhdGUob2xkX2NydGNfc3RhdGUpOwo+ID4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq bmV3X3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSk7Cj4gPiAtCj4g PiAtCWlmIChuZXdfc3RhdGUtPnNoYXJlZF9kcGxsKQo+ID4gLQkJdmVyaWZ5X3NpbmdsZV9kcGxs X3N0YXRlKGRldl9wcml2LCBuZXdfc3RhdGUtPnNoYXJlZF9kcGxsLCBjcnRjLCBuZXdfY3J0Y19z dGF0ZSk7Cj4gPiAtCj4gPiAtCWlmIChvbGRfc3RhdGUtPnNoYXJlZF9kcGxsICYmCj4gPiAtCSAg ICBvbGRfc3RhdGUtPnNoYXJlZF9kcGxsICE9IG5ld19zdGF0ZS0+c2hhcmVkX2RwbGwpIHsKPiA+ IC0JCXVuc2lnbmVkIGludCBjcnRjX21hc2sgPSBkcm1fY3J0Y19tYXNrKGNydGMpOwo+ID4gLQkJ c3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwgPSBvbGRfc3RhdGUtPnNoYXJlZF9kcGxsOwo+ ID4gLQo+ID4gLQkJSTkxNV9TVEFURV9XQVJOKHBsbC0+YWN0aXZlX21hc2sgJiBjcnRjX21hc2ss Cj4gPiAtCQkJCSJwbGwgYWN0aXZlIG1pc21hdGNoIChkaWRuJ3QgZXhwZWN0IHBpcGUgJWMgaW4g YWN0aXZlIG1hc2spXG4iLAo+ID4gLQkJCQlwaXBlX25hbWUoZHJtX2NydGNfaW5kZXgoY3J0Yykp KTsKPiA+IC0JCUk5MTVfU1RBVEVfV0FSTihwbGwtPnN0YXRlLmNydGNfbWFzayAmIGNydGNfbWFz aywKPiA+IC0JCQkJInBsbCBlbmFibGVkIGNydGNzIG1pc21hdGNoIChmb3VuZCAleCBpbiBlbmFi bGVkIG1hc2spXG4iLAo+ID4gLQkJCQlwaXBlX25hbWUoZHJtX2NydGNfaW5kZXgoY3J0YykpKTsK PiA+IC0JfQo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZAo+ID4gLWludGVsX21vZGVzZXRf dmVyaWZ5X2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gLQkJCSAgc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gLQkJCSAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRf c3RhdGUsCj4gPiAtCQkJICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm5ld19zdGF0ZSkKPiA+IC17 Cj4gPiAtCWlmICghbmVlZHNfbW9kZXNldChuZXdfc3RhdGUpICYmCj4gPiAtCSAgICAhdG9faW50 ZWxfY3J0Y19zdGF0ZShuZXdfc3RhdGUpLT51cGRhdGVfcGlwZSkKPiA+IC0JCXJldHVybjsKPiA+ IC0KPiA+IC0JdmVyaWZ5X3dtX3N0YXRlKGNydGMsIG5ld19zdGF0ZSk7Cj4gPiAtCXZlcmlmeV9j b25uZWN0b3Jfc3RhdGUoY3J0Yy0+ZGV2LCBzdGF0ZSwgY3J0Yyk7Cj4gPiAtCXZlcmlmeV9jcnRj X3N0YXRlKGNydGMsIG9sZF9zdGF0ZSwgbmV3X3N0YXRlKTsKPiA+IC0JdmVyaWZ5X3NoYXJlZF9k cGxsX3N0YXRlKGNydGMtPmRldiwgY3J0Yywgb2xkX3N0YXRlLCBuZXdfc3RhdGUpOwo+ID4gLX0K PiA+IC0KPiA+IC1zdGF0aWMgdm9pZAo+ID4gLXZlcmlmeV9kaXNhYmxlZF9kcGxsX3N0YXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiAtCWludCBpOwo+ID4gLQo+ID4gLQlmb3Ig KGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbDsgaSsrKQo+ID4gLQkJdmVyaWZ5 X3NpbmdsZV9kcGxsX3N0YXRlKGRldl9wcml2LCAmZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXSwg TlVMTCwgTlVMTCk7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkCj4gPiAtaW50ZWxfbW9k ZXNldF92ZXJpZnlfZGlzYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+IC0JCQkgICAg ICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiAtewo+ID4gLQl2ZXJpZnlfZW5j b2Rlcl9zdGF0ZShkZXYsIHN0YXRlKTsKPiA+IC0JdmVyaWZ5X2Nvbm5lY3Rvcl9zdGF0ZShkZXYs IHN0YXRlLCBOVUxMKTsKPiA+IC0JdmVyaWZ5X2Rpc2FibGVkX2RwbGxfc3RhdGUoZGV2KTsKPiA+ IC19Cj4gPiAtCj4gPiAgc3RhdGljIHZvaWQgdXBkYXRlX3NjYW5saW5lX29mZnNldChjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBp bnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ ID4gQEAgLTEzNTIxLDcgKzEzMDY5LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1p dF90YWlsKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ICAJCWlmICghaW50ZWxf Y2FuX2VuYWJsZV9zYWd2KHN0YXRlKSkKPiA+ICAJCQlpbnRlbF9kaXNhYmxlX3NhZ3YoZGV2X3By aXYpOwo+ID4gIAo+ID4gLQkJaW50ZWxfbW9kZXNldF92ZXJpZnlfZGlzYWJsZWQoZGV2LCBzdGF0 ZSk7Cj4gPiArCQlpbnRlbF92ZXJpZnlfbW9kZXNldF9kaXNhYmxlZChkZXYsIHN0YXRlKTsKPiA+ ICAJfQo+IAo+IEkgdGhpbmsgd2Ugc2hvdWxkIHRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBzbGln aHRseSBjbGVhbiB1cCB0aGUgaW50ZXJmYWNlCj4gaGVyZSwgYW5kIGFsaWduIGEgYml0IHdpdGgK PiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzL2Rpc2FibGVzIGZyb20g aGVscGVycy4gU28KPiByZW5hbWUgdGhpcyBmdW5jdGlvbiBoZXJlIHRvIAo+IAo+IGludGVsX3Zl cmlmeV9tb2Rlc2V0X2Rpc2FibGVzKGRldiwgc3RhdGUpCj4gCj4gc28gdGhlIG5hbWluZyBpcyBh IGJpdCBjbGVhcmVyIC0gaXQgdG9vayBtZSBhIHdoaWxlIHdoYXQgZXhhY3RseSBfZGlzYWJsZWQK PiBoZXJlIG1lYW5zOiBJcyB0aGUgdmVyaWZpZXIgZGlzYWJsZWQsIG9yIHRoZSBtb2Rlc2V0IGlz IGRpc2FibGVkIG9yIHdoYXQKPiBleGFjdGx5LiBJIHRoaW5rIHRoZSBpZGVhIG9mICJtb2Rlc2V0 X2Rpc2FibGVzIiBhcyBhIHBoYXNlIG9mIGFuIGF0b21pYwo+IGNvbW1pdCBpcyBiZXR0ZXIgZXN0 YWJsaXNoZWQuCj4gPiAgCj4gPiAgCS8qIENvbXBsZXRlIHRoZSBldmVudHMgZm9yIHBpcGVzIHRo YXQgaGF2ZSBub3cgYmVlbiBkaXNhYmxlZCAqLwo+ID4gQEAgLTEzNTg5LDcgKzEzMTM3LDcgQEAg c3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1pdF90YWlsKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSkKPiA+ICAJCWlmIChwdXRfZG9tYWluc1tpXSkKPiA+ICAJCQltb2Rlc2V0X3B1 dF9wb3dlcl9kb21haW5zKGRldl9wcml2LCBwdXRfZG9tYWluc1tpXSk7Cj4gPiAgCj4gPiAtCQlp bnRlbF9tb2Rlc2V0X3ZlcmlmeV9jcnRjKGNydGMsIHN0YXRlLCBvbGRfY3J0Y19zdGF0ZSwgbmV3 X2NydGNfc3RhdGUpOwo+ID4gKwkJaW50ZWxfdmVyaWZ5X21vZGVzZXRfY3J0YyhjcnRjLCBzdGF0 ZSwgb2xkX2NydGNfc3RhdGUsIG5ld19jcnRjX3N0YXRlKTsKPiA+ICAJfQo+IAo+IFNhbWUgaGVy ZSwgY3JlYXRlIGEgbmV3Cj4gCj4gaW50ZWxfdmVyaWZ5X21vZGVzZXRfZW5hYmxlcyhkZXYsIHN0 YXRlKQo+IAo+IHdoaWNoIGNvbWJpbmVzIHRoZSBjcnRjIGFuZCBwbGFuIGNoZWNrcyAodGhlIGFk ZGl0aW9uYWwgbG9vcCB3b250IG1hdHRlciksCj4gYW5kIG5lYXRseSBhbGlnbnMgd2l0aCB0aGUg aWRlYSBvZiBhICJtb2Rlc2V0X2VuYWJsZXMiIHBoYXNlIGZyb20gYXRvbWljCj4gaGVscGVycy4K PiAKPiBXaXRoIHRoYXQgSSB0aGluayB3ZSdsbCBoYXZlIHNvbWUgcmVhbGx5IHRpZHkgaW50ZXJm YWNlIGludG8KPiBpbnRlbF92ZXJpZnkuYywgYW5kIHlvdXIgcGF0Y2ggaGVyZSBoYXMgbXkgUmV2 aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CgpCb251cyBp ZiB5b3UgY2FuIHRocm93IHNvbWUga2VybmVsZG9jIGZvciB0aGVzZSBvbiB0b3AsIGV4cGxhaW5p bmcgdGhlCmxpbmsgd2l0aCBjb3JlIGhlbHBlciBjb25jZXB0cyBmb3IgdGhlIGFjdHVhbCBmdW5j dGlvbnMsIHBsdXMgYSBzaG9ydAppbnRybyBvbiB3dGYgdGhpcyBpcy4gQmVjYXVzZSB0aGUgaWRl YSBiZWhpbmQgb3VyIHN0YXRlIHZlcmlmaWVyIHNlZW1zCnJhdGhlciBlbHVzaXZlIHRvIG5ld2Jp ZXMuIEJ1dCB0aGF0IHdvdWxkIGJlIGEgMm5kIHBhdGNoIEkgdGhpbmsuCgpJIGNhbiBhbHNvIGhl bHAgd2l0aCB0aGUgZG9jcyBpZiB5b3Ugd2FudC4KLURhbmllbAoKPiAKPiBDaGVlcnMsIERhbmll bAo+IAo+ID4gIAo+ID4gIAlpZiAoaW50ZWxfc3RhdGUtPm1vZGVzZXQpCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAo+ID4gaW5kZXggYTM4YjljLi43Nzc2N2MgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKPiA+IEBAIC0xNjY4LDYgKzE2NjgsMTcgQEAgaW50IGludGVsX2dl dF9waXBlX2Zyb21fY3J0Y19pZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAo+ID4gIAkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cj4gPiAgZW51 bSB0cmFuc2NvZGVyIGludGVsX3BpcGVfdG9fY3B1X3RyYW5zY29kZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIAkJCQkJICAgICBlbnVtIHBpcGUgcGlwZSk7Cj4gPiAr dm9pZCBpbnRlbF9waXBlX2NvbmZpZ19zYW5pdHlfY2hlY2soc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ID4gKwkJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KnBpcGVfY29uZmlnKTsKPiA+ICtib29sCj4gPiAraW50ZWxfcGlwZV9jb25maWdfY29tcGFyZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiArCQkJICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3VycmVudF9jb25maWcsCj4gPiArCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqcGlwZV9jb25maWcsCj4gPiArCQkJICBib29sIGFkanVzdCk7Cj4gPiArdm9pZCBpbnRl bF9kdW1wX3BpcGVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4gKwkJCSAgICBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCj4gPiArCQkJICAgIGNvbnN0IGNo YXIgKmNvbnRleHQpOwo+ID4gK3ZvaWQgaW50ZWxfY3J0Y19jb21wdXRlX3BpeGVsX3JhdGUoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ID4gIHN0YXRpYyBpbmxpbmUgYm9v bAo+ID4gIGludGVsX2NydGNfaGFzX3R5cGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCj4gPiAgCQkgICAgZW51bSBpbnRlbF9vdXRwdXRfdHlwZSB0eXBlKQo+ID4g QEAgLTE3NjAsNiArMTc3MSw3IEBAIHZvaWQgYXNzZXJ0X2ZkaV9yeF9wbGwoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIHZvaWQgYXNzZXJ0X3BpcGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSwgYm9vbCBzdGF0ZSk7Cj4gPiAg I2RlZmluZSBhc3NlcnRfcGlwZV9lbmFibGVkKGQsIHApIGFzc2VydF9waXBlKGQsIHAsIHRydWUp Cj4gPiAgI2RlZmluZSBhc3NlcnRfcGlwZV9kaXNhYmxlZChkLCBwKSBhc3NlcnRfcGlwZShkLCBw LCBmYWxzZSkKPiA+ICt2b2lkIGFzc2VydF9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LCBib29sIHN0YXRlKTsKPiA+ICB2b2lkIGludGVsX3ByZXBhcmVfcmVzZXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiA+ICB2b2lkIGludGVsX2ZpbmlzaF9yZXNldChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4gIHZvaWQgaHN3X2VuYWJsZV9wYzgo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJpZnkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3ZlcmlmeS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwLi40 Yzg5OTAKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3ZlcmlmeS5jCj4gPiBAQCAtMCwwICsxLDQ2NCBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBNSVQKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3N0 YXRlX2hlbHBlci5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ID4gKyNpbmNs dWRlICJpbnRlbF9kcnYuaCIKPiA+ICsjaW5jbHVkZSAiaW50ZWxfcG0uaCIKPiA+ICsjaW5jbHVk ZSAiaW50ZWxfdmVyaWZ5LmgiCj4gPiArCj4gPiArc3RhdGljIHZvaWQgdmVyaWZ5X3dtX3N0YXRl KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRl ICpuZXdfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGNydGMtPmRldik7Cj4gPiArCXN0cnVjdCBza2xfaHdfc3RhdGUgewo+ID4g KwkJc3RydWN0IHNrbF9kZGJfZW50cnkgZGRiX3lbSTkxNV9NQVhfUExBTkVTXTsKPiA+ICsJCXN0 cnVjdCBza2xfZGRiX2VudHJ5IGRkYl91dltJOTE1X01BWF9QTEFORVNdOwo+ID4gKwkJc3RydWN0 IHNrbF9kZGJfYWxsb2NhdGlvbiBkZGI7Cj4gPiArCQlzdHJ1Y3Qgc2tsX3BpcGVfd20gd207Cj4g PiArCX0gKmh3Owo+ID4gKwlzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpzd19kZGI7Cj4gPiAr CXN0cnVjdCBza2xfcGlwZV93bSAqc3dfd207Cj4gPiArCXN0cnVjdCBza2xfZGRiX2VudHJ5ICpo d19kZGJfZW50cnksICpzd19kZGJfZW50cnk7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+ICsJY29uc3QgZW51bSBwaXBlIHBpcGUg PSBpbnRlbF9jcnRjLT5waXBlOwo+ID4gKwlpbnQgcGxhbmUsIGxldmVsLCBtYXhfbGV2ZWwgPSBp bGtfd21fbWF4X2xldmVsKGRldl9wcml2KTsKPiA+ICsKPiA+ICsJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPCA5IHx8ICFuZXdfc3RhdGUtPmFjdGl2ZSkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ ICsJaHcgPSBremFsbG9jKHNpemVvZigqaHcpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFodykK PiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJc2tsX3BpcGVfd21fZ2V0X2h3X3N0YXRlKGludGVs X2NydGMsICZody0+d20pOwo+ID4gKwlzd193bSA9ICZ0b19pbnRlbF9jcnRjX3N0YXRlKG5ld19z dGF0ZSktPndtLnNrbC5vcHRpbWFsOwo+ID4gKwo+ID4gKwlza2xfcGlwZV9kZGJfZ2V0X2h3X3N0 YXRlKGludGVsX2NydGMsIGh3LT5kZGJfeSwgaHctPmRkYl91dik7Cj4gPiArCj4gPiArCXNrbF9k ZGJfZ2V0X2h3X3N0YXRlKGRldl9wcml2LCAmaHctPmRkYik7Cj4gPiArCXN3X2RkYiA9ICZkZXZf cHJpdi0+d20uc2tsX2h3LmRkYjsKPiA+ICsKPiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gMTEgJiYKPiA+ICsJICAgIGh3LT5kZGIuZW5hYmxlZF9zbGljZXMgIT0gc3dfZGRiLT5lbmFi bGVkX3NsaWNlcykKPiA+ICsJCURSTV9FUlJPUigibWlzbWF0Y2ggaW4gREJVRiBTbGljZXMgKGV4 cGVjdGVkICV1LCBnb3QgJXUpXG4iLAo+ID4gKwkJCSAgc3dfZGRiLT5lbmFibGVkX3NsaWNlcywK PiA+ICsJCQkgIGh3LT5kZGIuZW5hYmxlZF9zbGljZXMpOwo+ID4gKwo+ID4gKwkvKiBwbGFuZXMg Ki8KPiA+ICsJZm9yX2VhY2hfdW5pdmVyc2FsX3BsYW5lKGRldl9wcml2LCBwaXBlLCBwbGFuZSkg ewo+ID4gKwkJc3RydWN0IHNrbF9wbGFuZV93bSAqaHdfcGxhbmVfd20sICpzd19wbGFuZV93bTsK PiA+ICsKPiA+ICsJCWh3X3BsYW5lX3dtID0gJmh3LT53bS5wbGFuZXNbcGxhbmVdOwo+ID4gKwkJ c3dfcGxhbmVfd20gPSAmc3dfd20tPnBsYW5lc1twbGFuZV07Cj4gPiArCj4gPiArCQkvKiBXYXRl cm1hcmtzICovCj4gPiArCQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZl bCsrKSB7Cj4gPiArCQkJaWYgKHNrbF93bV9sZXZlbF9lcXVhbHMoJmh3X3BsYW5lX3dtLT53bVts ZXZlbF0sCj4gPiArCQkJCQkJJnN3X3BsYW5lX3dtLT53bVtsZXZlbF0pKQo+ID4gKwkJCQljb250 aW51ZTsKPiA+ICsKPiA+ICsJCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIFdNIHBpcGUgJWMgcGxh bmUgJWQgbGV2ZWwgJWQgKGV4cGVjdGVkIGU9JWQgYj0ldSBsPSV1LCBnb3QgZT0lZCBiPSV1IGw9 JXUpXG4iLAo+ID4gKwkJCQkgIHBpcGVfbmFtZShwaXBlKSwgcGxhbmUgKyAxLCBsZXZlbCwKPiA+ ICsJCQkJICBzd19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX2VuLAo+ID4gKwkJCQkgIHN3X3Bs YW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2IsCj4gPiArCQkJCSAgc3dfcGxhbmVfd20tPndt W2xldmVsXS5wbGFuZV9yZXNfbCwKPiA+ICsJCQkJICBod19wbGFuZV93bS0+d21bbGV2ZWxdLnBs YW5lX2VuLAo+ID4gKwkJCQkgIGh3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2IsCj4g PiArCQkJCSAgaHdfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfbCk7Cj4gPiArCQl9Cj4g PiArCj4gPiArCQlpZiAoIXNrbF93bV9sZXZlbF9lcXVhbHMoJmh3X3BsYW5lX3dtLT50cmFuc193 bSwKPiA+ICsJCQkJCSAmc3dfcGxhbmVfd20tPnRyYW5zX3dtKSkgewo+ID4gKwkJCURSTV9FUlJP UigibWlzbWF0Y2ggaW4gdHJhbnMgV00gcGlwZSAlYyBwbGFuZSAlZCAoZXhwZWN0ZWQgZT0lZCBi PSV1IGw9JXUsIGdvdCBlPSVkIGI9JXUgbD0ldSlcbiIsCj4gPiArCQkJCSAgcGlwZV9uYW1lKHBp cGUpLCBwbGFuZSArIDEsCj4gPiArCQkJCSAgc3dfcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2Vu LAo+ID4gKwkJCQkgIHN3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfYiwKPiA+ICsJCQkJ ICBzd19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wsCj4gPiArCQkJCSAgaHdfcGxhbmVf d20tPnRyYW5zX3dtLnBsYW5lX2VuLAo+ID4gKwkJCQkgIGh3X3BsYW5lX3dtLT50cmFuc193bS5w bGFuZV9yZXNfYiwKPiA+ICsJCQkJICBod19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wp Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJLyogRERCICovCj4gPiArCQlod19kZGJfZW50cnkgPSAm aHctPmRkYl95W3BsYW5lXTsKPiA+ICsJCXN3X2RkYl9lbnRyeSA9ICZ0b19pbnRlbF9jcnRjX3N0 YXRlKG5ld19zdGF0ZSktPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV07Cj4gPiArCj4gPiArCQlp ZiAoIXNrbF9kZGJfZW50cnlfZXF1YWwoaHdfZGRiX2VudHJ5LCBzd19kZGJfZW50cnkpKSB7Cj4g PiArCQkJRFJNX0VSUk9SKCJtaXNtYXRjaCBpbiBEREIgc3RhdGUgcGlwZSAlYyBwbGFuZSAlZCAo ZXhwZWN0ZWQgKCV1LCV1KSwgZm91bmQgKCV1LCV1KSlcbiIsCj4gPiArCQkJCSAgcGlwZV9uYW1l KHBpcGUpLCBwbGFuZSArIDEsCj4gPiArCQkJCSAgc3dfZGRiX2VudHJ5LT5zdGFydCwgc3dfZGRi X2VudHJ5LT5lbmQsCj4gPiArCQkJCSAgaHdfZGRiX2VudHJ5LT5zdGFydCwgaHdfZGRiX2VudHJ5 LT5lbmQpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIGN1cnNvcgo+ ID4gKwkgKiBJZiB0aGUgY3Vyc29yIHBsYW5lIGlzbid0IGFjdGl2ZSwgd2UgbWF5IG5vdCBoYXZl IHVwZGF0ZWQgaXQncyBkZGIKPiA+ICsJICogYWxsb2NhdGlvbi4gSW4gdGhhdCBjYXNlIHNpbmNl IHRoZSBkZGIgYWxsb2NhdGlvbiB3aWxsIGJlIHVwZGF0ZWQKPiA+ICsJICogb25jZSB0aGUgcGxh bmUgYmVjb21lcyB2aXNpYmxlLCB3ZSBjYW4gc2tpcCB0aGlzIGNoZWNrCj4gPiArCSAqLwo+ID4g KwlpZiAoMSkgewo+ID4gKwkJc3RydWN0IHNrbF9wbGFuZV93bSAqaHdfcGxhbmVfd20sICpzd19w bGFuZV93bTsKPiA+ICsKPiA+ICsJCWh3X3BsYW5lX3dtID0gJmh3LT53bS5wbGFuZXNbUExBTkVf Q1VSU09SXTsKPiA+ICsJCXN3X3BsYW5lX3dtID0gJnN3X3dtLT5wbGFuZXNbUExBTkVfQ1VSU09S XTsKPiA+ICsKPiA+ICsJCS8qIFdhdGVybWFya3MgKi8KPiA+ICsJCWZvciAobGV2ZWwgPSAwOyBs ZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVsKyspIHsKPiA+ICsJCQlpZiAoc2tsX3dtX2xldmVsX2Vx dWFscygmaHdfcGxhbmVfd20tPndtW2xldmVsXSwKPiA+ICsJCQkJCQkmc3dfcGxhbmVfd20tPndt W2xldmVsXSkpCj4gPiArCQkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJCURSTV9FUlJPUigibWlz bWF0Y2ggaW4gV00gcGlwZSAlYyBjdXJzb3IgbGV2ZWwgJWQgKGV4cGVjdGVkIGU9JWQgYj0ldSBs PSV1LCBnb3QgZT0lZCBiPSV1IGw9JXUpXG4iLAo+ID4gKwkJCQkgIHBpcGVfbmFtZShwaXBlKSwg bGV2ZWwsCj4gPiArCQkJCSAgc3dfcGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9lbiwKPiA+ICsJ CQkJICBzd19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iLAo+ID4gKwkJCQkgIHN3X3Bs YW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2wsCj4gPiArCQkJCSAgaHdfcGxhbmVfd20tPndt W2xldmVsXS5wbGFuZV9lbiwKPiA+ICsJCQkJICBod19wbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5l X3Jlc19iLAo+ID4gKwkJCQkgIGh3X3BsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2wpOwo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYgKCFza2xfd21fbGV2ZWxfZXF1YWxzKCZod19wbGFuZV93 bS0+dHJhbnNfd20sCj4gPiArCQkJCQkgJnN3X3BsYW5lX3dtLT50cmFuc193bSkpIHsKPiA+ICsJ CQlEUk1fRVJST1IoIm1pc21hdGNoIGluIHRyYW5zIFdNIHBpcGUgJWMgY3Vyc29yIChleHBlY3Rl ZCBlPSVkIGI9JXUgbD0ldSwgZ290IGU9JWQgYj0ldSBsPSV1KVxuIiwKPiA+ICsJCQkJICBwaXBl X25hbWUocGlwZSksCj4gPiArCQkJCSAgc3dfcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2VuLAo+ ID4gKwkJCQkgIHN3X3BsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNfYiwKPiA+ICsJCQkJICBz d19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wsCj4gPiArCQkJCSAgaHdfcGxhbmVfd20t PnRyYW5zX3dtLnBsYW5lX2VuLAo+ID4gKwkJCQkgIGh3X3BsYW5lX3dtLT50cmFuc193bS5wbGFu ZV9yZXNfYiwKPiA+ICsJCQkJICBod19wbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wpOwo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJLyogRERCICovCj4gPiArCQlod19kZGJfZW50cnkgPSAmaHct PmRkYl95W1BMQU5FX0NVUlNPUl07Cj4gPiArCQlzd19kZGJfZW50cnkgPSAmdG9faW50ZWxfY3J0 Y19zdGF0ZShuZXdfc3RhdGUpLT53bS5za2wucGxhbmVfZGRiX3lbUExBTkVfQ1VSU09SXTsKPiA+ ICsKPiA+ICsJCWlmICghc2tsX2RkYl9lbnRyeV9lcXVhbChod19kZGJfZW50cnksIHN3X2RkYl9l bnRyeSkpIHsKPiA+ICsJCQlEUk1fRVJST1IoIm1pc21hdGNoIGluIEREQiBzdGF0ZSBwaXBlICVj IGN1cnNvciAoZXhwZWN0ZWQgKCV1LCV1KSwgZm91bmQgKCV1LCV1KSlcbiIsCj4gPiArCQkJCSAg cGlwZV9uYW1lKHBpcGUpLAo+ID4gKwkJCQkgIHN3X2RkYl9lbnRyeS0+c3RhcnQsIHN3X2RkYl9l bnRyeS0+ZW5kLAo+ID4gKwkJCQkgIGh3X2RkYl9lbnRyeS0+c3RhcnQsIGh3X2RkYl9lbnRyeS0+ ZW5kKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlrZnJlZShodyk7Cj4gPiArfQo+ID4g Kwo+ID4gKy8qIENyb3NzIGNoZWNrIHRoZSBhY3R1YWwgaHcgc3RhdGUgd2l0aCBvdXIgb3duIG1v ZGVzZXQgc3RhdGUgdHJhY2tpbmcgKGFuZCBpdCdzCj4gPiArICogaW50ZXJuYWwgY29uc2lzdGVu Y3kpLiAqLwo+ID4gK3N0YXRpYyB2b2lkIGludGVsX2Nvbm5lY3Rvcl92ZXJpZnlfc3RhdGUoc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCQkJIHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGludGVsX2Nvbm5l Y3RvciAqY29ubmVjdG9yID0gdG9faW50ZWxfY29ubmVjdG9yKGNvbm5fc3RhdGUtPmNvbm5lY3Rv cik7Cj4gPiArCj4gPiArCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAo+ID4g KwkJICAgICAgY29ubmVjdG9yLT5iYXNlLmJhc2UuaWQsCj4gPiArCQkgICAgICBjb25uZWN0b3It PmJhc2UubmFtZSk7Cj4gPiArCj4gPiArCWlmIChjb25uZWN0b3ItPmdldF9od19zdGF0ZShjb25u ZWN0b3IpKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciA9IGNvbm5lY3Rv ci0+ZW5jb2RlcjsKPiA+ICsKPiA+ICsJCUk5MTVfU1RBVEVfV0FSTighY3J0Y19zdGF0ZSwKPiA+ ICsJCQkgImNvbm5lY3RvciBlbmFibGVkIHdpdGhvdXQgYXR0YWNoZWQgY3J0Y1xuIik7Cj4gPiAr Cj4gPiArCQlpZiAoIWNydGNfc3RhdGUpCj4gPiArCQkJcmV0dXJuOwo+ID4gKwo+ID4gKwkJSTkx NV9TVEFURV9XQVJOKCFjcnRjX3N0YXRlLT5hY3RpdmUsCj4gPiArCQkgICAgICAiY29ubmVjdG9y IGlzIGFjdGl2ZSwgYnV0IGF0dGFjaGVkIGNydGMgaXNuJ3RcbiIpOwo+ID4gKwo+ID4gKwkJaWYg KCFlbmNvZGVyIHx8IGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0RQX01TVCkKPiA+ICsJ CQlyZXR1cm47Cj4gPiArCj4gPiArCQlJOTE1X1NUQVRFX1dBUk4oY29ubl9zdGF0ZS0+YmVzdF9l bmNvZGVyICE9ICZlbmNvZGVyLT5iYXNlLAo+ID4gKwkJCSJhdG9taWMgZW5jb2RlciBkb2Vzbid0 IG1hdGNoIGF0dGFjaGVkIGVuY29kZXJcbiIpOwo+ID4gKwo+ID4gKwkJSTkxNV9TVEFURV9XQVJO KGNvbm5fc3RhdGUtPmNydGMgIT0gZW5jb2Rlci0+YmFzZS5jcnRjLAo+ID4gKwkJCSJhdHRhY2hl ZCBlbmNvZGVyIGNydGMgZGlmZmVycyBmcm9tIGNvbm5lY3RvciBjcnRjXG4iKTsKPiA+ICsJfSBl bHNlIHsKPiA+ICsJCUk5MTVfU1RBVEVfV0FSTihjcnRjX3N0YXRlICYmIGNydGNfc3RhdGUtPmFj dGl2ZSwKPiA+ICsJCQkiYXR0YWNoZWQgY3J0YyBpcyBhY3RpdmUsIGJ1dCBjb25uZWN0b3IgaXNu J3RcbiIpOwo+ID4gKwkJSTkxNV9TVEFURV9XQVJOKCFjcnRjX3N0YXRlICYmIGNvbm5fc3RhdGUt PmJlc3RfZW5jb2RlciwKPiA+ICsJCQkiYmVzdCBlbmNvZGVyIHNldCB3aXRob3V0IGNydGMhXG4i KTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3ZlcmlmeV9jb25u ZWN0b3Jfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJCSAgICAgICBzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArCQkgICAgICAgc3RydWN0IGRybV9jcnRjICpj cnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ICsJ c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0YXRlOwo+ID4gKwlpbnQgaTsK PiA+ICsKPiA+ICsJZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVj dG9yLCBuZXdfY29ubl9zdGF0ZSwgaSkgewo+ID4gKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyID0gY29ubmVjdG9yLT5lbmNvZGVyOwo+ID4gKwkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlID0gTlVMTDsKPiA+ICsKPiA+ICsJCWlmIChuZXdfY29ubl9zdGF0ZS0+Y3J0YyAh PSBjcnRjKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJaWYgKGNydGMpCj4gPiArCQkJ Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBuZXdfY29u bl9zdGF0ZS0+Y3J0Yyk7Cj4gPiArCj4gPiArCQlpbnRlbF9jb25uZWN0b3JfdmVyaWZ5X3N0YXRl KGNydGNfc3RhdGUsIG5ld19jb25uX3N0YXRlKTsKPiA+ICsKPiA+ICsJCUk5MTVfU1RBVEVfV0FS TihuZXdfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyICE9IGVuY29kZXIsCj4gPiArCQkgICAgICJj b25uZWN0b3IncyBhdG9taWMgZW5jb2RlciBkb2Vzbid0IG1hdGNoIGxlZ2FjeSBlbmNvZGVyXG4i KTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3ZlcmlmeV9lbmNv ZGVyX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ID4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUsICpuZXdfY29ubl9zdGF0ZTsKPiA+ICsJaW50IGk7 Cj4gPiArCj4gPiArCWZvcl9lYWNoX2ludGVsX2VuY29kZXIoZGV2LCBlbmNvZGVyKSB7Cj4gPiAr CQlib29sIGVuYWJsZWQgPSBmYWxzZSwgZm91bmQgPSBmYWxzZTsKPiA+ICsJCWVudW0gcGlwZSBw aXBlOwo+ID4gKwo+ID4gKwkJRFJNX0RFQlVHX0tNUygiW0VOQ09ERVI6JWQ6JXNdXG4iLAo+ID4g KwkJCSAgICAgIGVuY29kZXItPmJhc2UuYmFzZS5pZCwKPiA+ICsJCQkgICAgICBlbmNvZGVyLT5i YXNlLm5hbWUpOwo+ID4gKwo+ID4gKwkJZm9yX2VhY2hfb2xkbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0 ZShzdGF0ZSwgY29ubmVjdG9yLCBvbGRfY29ubl9zdGF0ZSwKPiA+ICsJCQkJCQkgICBuZXdfY29u bl9zdGF0ZSwgaSkgewo+ID4gKwkJCWlmIChvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyID09 ICZlbmNvZGVyLT5iYXNlKQo+ID4gKwkJCQlmb3VuZCA9IHRydWU7Cj4gPiArCj4gPiArCQkJaWYg KG5ld19jb25uX3N0YXRlLT5iZXN0X2VuY29kZXIgIT0gJmVuY29kZXItPmJhc2UpCj4gPiArCQkJ CWNvbnRpbnVlOwo+ID4gKwkJCWZvdW5kID0gZW5hYmxlZCA9IHRydWU7Cj4gPiArCj4gPiArCQkJ STkxNV9TVEFURV9XQVJOKG5ld19jb25uX3N0YXRlLT5jcnRjICE9Cj4gPiArCQkJCQllbmNvZGVy LT5iYXNlLmNydGMsCj4gPiArCQkJICAgICAiY29ubmVjdG9yJ3MgY3J0YyBkb2Vzbid0IG1hdGNo IGVuY29kZXIgY3J0Y1xuIik7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAoIWZvdW5kKQo+ID4g KwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJSTkxNV9TVEFURV9XQVJOKCEhZW5jb2Rlci0+YmFz ZS5jcnRjICE9IGVuYWJsZWQsCj4gPiArCQkgICAgICJlbmNvZGVyJ3MgZW5hYmxlZCBzdGF0ZSBt aXNtYXRjaCAiCj4gPiArCQkgICAgICIoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwKPiA+ICsJ CSAgICAgISFlbmNvZGVyLT5iYXNlLmNydGMsIGVuYWJsZWQpOwo+ID4gKwo+ID4gKwkJaWYgKCFl bmNvZGVyLT5iYXNlLmNydGMpIHsKPiA+ICsJCQlib29sIGFjdGl2ZTsKPiA+ICsKPiA+ICsJCQlh Y3RpdmUgPSBlbmNvZGVyLT5nZXRfaHdfc3RhdGUoZW5jb2RlciwgJnBpcGUpOwo+ID4gKwkJCUk5 MTVfU1RBVEVfV0FSTihhY3RpdmUsCj4gPiArCQkJICAgICAiZW5jb2RlciBkZXRhY2hlZCBidXQg c3RpbGwgZW5hYmxlZCBvbiBwaXBlICVjLlxuIiwKPiA+ICsJCQkgICAgIHBpcGVfbmFtZShwaXBl KSk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICt2 ZXJpZnlfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkgIHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCj4gPiArCQkgIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqbmV3X2NydGNfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY3J0Yy0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGRldik7Cj4gPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ID4gKwlz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPiAr CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywgKnN3X2NvbmZpZzsKPiA+ICsJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZTsKPiA+ICsJYm9vbCBhY3RpdmU7Cj4g PiArCj4gPiArCW9sZF9zdGF0ZSA9IG9sZF9jcnRjX3N0YXRlLT5zdGF0ZTsKPiA+ICsJX19kcm1f YXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUob2xkX2NydGNfc3RhdGUpOwo+ID4gKwlw aXBlX2NvbmZpZyA9IHRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpOwo+ID4gKwlt ZW1zZXQocGlwZV9jb25maWcsIDAsIHNpemVvZigqcGlwZV9jb25maWcpKTsKPiA+ICsJcGlwZV9j b25maWctPmJhc2UuY3J0YyA9IGNydGM7Cj4gPiArCXBpcGVfY29uZmlnLT5iYXNlLnN0YXRlID0g b2xkX3N0YXRlOwo+ID4gKwo+ID4gKwlEUk1fREVCVUdfS01TKCJbQ1JUQzolZDolc11cbiIsIGNy dGMtPmJhc2UuaWQsIGNydGMtPm5hbWUpOwo+ID4gKwo+ID4gKwlhY3RpdmUgPSBkZXZfcHJpdi0+ ZGlzcGxheS5nZXRfcGlwZV9jb25maWcoaW50ZWxfY3J0YywgcGlwZV9jb25maWcpOwo+ID4gKwo+ ID4gKwkvKiB3ZSBrZWVwIGJvdGggcGlwZXMgZW5hYmxlZCBvbiA4MzAgKi8KPiA+ICsJaWYgKElT X0k4MzAoZGV2X3ByaXYpKQo+ID4gKwkJYWN0aXZlID0gbmV3X2NydGNfc3RhdGUtPmFjdGl2ZTsK PiA+ICsKPiA+ICsJSTkxNV9TVEFURV9XQVJOKG5ld19jcnRjX3N0YXRlLT5hY3RpdmUgIT0gYWN0 aXZlLAo+ID4gKwkgICAgICJjcnRjIGFjdGl2ZSBzdGF0ZSBkb2Vzbid0IG1hdGNoIHdpdGggaHcg c3RhdGUgIgo+ID4gKwkgICAgICIoZXhwZWN0ZWQgJWksIGZvdW5kICVpKVxuIiwgbmV3X2NydGNf c3RhdGUtPmFjdGl2ZSwgYWN0aXZlKTsKPiA+ICsKPiA+ICsJSTkxNV9TVEFURV9XQVJOKGludGVs X2NydGMtPmFjdGl2ZSAhPSBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlLAo+ID4gKwkgICAgICJ0cmFu c2l0aW9uYWwgYWN0aXZlIHN0YXRlIGRvZXMgbm90IG1hdGNoIGF0b21pYyBodyBzdGF0ZSAiCj4g PiArCSAgICAgIihleHBlY3RlZCAlaSwgZm91bmQgJWkpXG4iLCBuZXdfY3J0Y19zdGF0ZS0+YWN0 aXZlLCBpbnRlbF9jcnRjLT5hY3RpdmUpOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9lbmNvZGVyX29u X2NydGMoZGV2LCBjcnRjLCBlbmNvZGVyKSB7Cj4gPiArCQllbnVtIHBpcGUgcGlwZTsKPiA+ICsK PiA+ICsJCWFjdGl2ZSA9IGVuY29kZXItPmdldF9od19zdGF0ZShlbmNvZGVyLCAmcGlwZSk7Cj4g PiArCQlJOTE1X1NUQVRFX1dBUk4oYWN0aXZlICE9IG5ld19jcnRjX3N0YXRlLT5hY3RpdmUsCj4g PiArCQkJIltFTkNPREVSOiVpXSBhY3RpdmUgJWkgd2l0aCBjcnRjIGFjdGl2ZSAlaVxuIiwKPiA+ ICsJCQllbmNvZGVyLT5iYXNlLmJhc2UuaWQsIGFjdGl2ZSwgbmV3X2NydGNfc3RhdGUtPmFjdGl2 ZSk7Cj4gPiArCj4gPiArCQlJOTE1X1NUQVRFX1dBUk4oYWN0aXZlICYmIGludGVsX2NydGMtPnBp cGUgIT0gcGlwZSwKPiA+ICsJCQkJIkVuY29kZXIgY29ubmVjdGVkIHRvIHdyb25nIHBpcGUgJWNc biIsCj4gPiArCQkJCXBpcGVfbmFtZShwaXBlKSk7Cj4gPiArCj4gPiArCQlpZiAoYWN0aXZlKQo+ ID4gKwkJCWVuY29kZXItPmdldF9jb25maWcoZW5jb2RlciwgcGlwZV9jb25maWcpOwo+ID4gKwl9 Cj4gPiArCj4gPiArCWludGVsX2NydGNfY29tcHV0ZV9waXhlbF9yYXRlKHBpcGVfY29uZmlnKTsK PiA+ICsKPiA+ICsJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlKQo+ID4gKwkJcmV0dXJuOwo+ ID4gKwo+ID4gKwlpbnRlbF9waXBlX2NvbmZpZ19zYW5pdHlfY2hlY2soZGV2X3ByaXYsIHBpcGVf Y29uZmlnKTsKPiA+ICsKPiA+ICsJc3dfY29uZmlnID0gdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdf Y3J0Y19zdGF0ZSk7Cj4gPiArCWlmICghaW50ZWxfcGlwZV9jb25maWdfY29tcGFyZShkZXZfcHJp diwgc3dfY29uZmlnLAo+ID4gKwkJCQkgICAgICAgcGlwZV9jb25maWcsIGZhbHNlKSkgewo+ID4g KwkJSTkxNV9TVEFURV9XQVJOKDEsICJwaXBlIHN0YXRlIGRvZXNuJ3QgbWF0Y2ghXG4iKTsKPiA+ ICsJCWludGVsX2R1bXBfcGlwZV9jb25maWcoaW50ZWxfY3J0YywgcGlwZV9jb25maWcsCj4gPiAr CQkJCSAgICAgICAiW2h3IHN0YXRlXSIpOwo+ID4gKwkJaW50ZWxfZHVtcF9waXBlX2NvbmZpZyhp bnRlbF9jcnRjLCBzd19jb25maWcsCj4gPiArCQkJCSAgICAgICAiW3N3IHN0YXRlXSIpOwo+ID4g Kwl9Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQKPiA+ICtpbnRlbF92ZXJpZnlfcGxhbmVzKHN0cnVj dCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZTsKPiA+ICsJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZTsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCWZvcl9lYWNoX25ld19pbnRlbF9wbGFuZV9p bl9zdGF0ZShzdGF0ZSwgcGxhbmUsCj4gPiArCQkJCQkgIHBsYW5lX3N0YXRlLCBpKQo+ID4gKwkJ YXNzZXJ0X3BsYW5lKHBsYW5lLCBwbGFuZV9zdGF0ZS0+c2xhdmUgfHwKPiA+ICsJCQkgICAgIHBs YW5lX3N0YXRlLT5iYXNlLnZpc2libGUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ ID4gK3ZlcmlmeV9zaW5nbGVfZHBsbF9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gPiArCQkJIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsLAo+ID4gKwkJCSBz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3 X3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGludGVsX2RwbGxfaHdfc3RhdGUgZHBsbF9od19z dGF0ZTsKPiA+ICsJdW5zaWduZWQgaW50IGNydGNfbWFzazsKPiA+ICsJYm9vbCBhY3RpdmU7Cj4g PiArCj4gPiArCW1lbXNldCgmZHBsbF9od19zdGF0ZSwgMCwgc2l6ZW9mKGRwbGxfaHdfc3RhdGUp KTsKPiA+ICsKPiA+ICsJRFJNX0RFQlVHX0tNUygiJXNcbiIsIHBsbC0+aW5mby0+bmFtZSk7Cj4g PiArCj4gPiArCWFjdGl2ZSA9IHBsbC0+aW5mby0+ZnVuY3MtPmdldF9od19zdGF0ZShkZXZfcHJp diwgcGxsLCAmZHBsbF9od19zdGF0ZSk7Cj4gPiArCj4gPiArCWlmICghKHBsbC0+aW5mby0+Zmxh Z3MgJiBJTlRFTF9EUExMX0FMV0FZU19PTikpIHsKPiA+ICsJCUk5MTVfU1RBVEVfV0FSTighcGxs LT5vbiAmJiBwbGwtPmFjdGl2ZV9tYXNrLAo+ID4gKwkJICAgICAicGxsIGluIGFjdGl2ZSB1c2Ug YnV0IG5vdCBvbiBpbiBzdyB0cmFja2luZ1xuIik7Cj4gPiArCQlJOTE1X1NUQVRFX1dBUk4ocGxs LT5vbiAmJiAhcGxsLT5hY3RpdmVfbWFzaywKPiA+ICsJCSAgICAgInBsbCBpcyBvbiBidXQgbm90 IHVzZWQgYnkgYW55IGFjdGl2ZSBjcnRjXG4iKTsKPiA+ICsJCUk5MTVfU1RBVEVfV0FSTihwbGwt Pm9uICE9IGFjdGl2ZSwKPiA+ICsJCSAgICAgInBsbCBvbiBzdGF0ZSBtaXNtYXRjaCAoZXhwZWN0 ZWQgJWksIGZvdW5kICVpKVxuIiwKPiA+ICsJCSAgICAgcGxsLT5vbiwgYWN0aXZlKTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlpZiAoIWNydGMpIHsKPiA+ICsJCUk5MTVfU1RBVEVfV0FSTihwbGwtPmFj dGl2ZV9tYXNrICYgfnBsbC0+c3RhdGUuY3J0Y19tYXNrLAo+ID4gKwkJCQkibW9yZSBhY3RpdmUg cGxsIHVzZXJzIHRoYW4gcmVmZXJlbmNlczogJXggdnMgJXhcbiIsCj4gPiArCQkJCXBsbC0+YWN0 aXZlX21hc2ssIHBsbC0+c3RhdGUuY3J0Y19tYXNrKTsKPiA+ICsKPiA+ICsJCXJldHVybjsKPiA+ ICsJfQo+ID4gKwo+ID4gKwljcnRjX21hc2sgPSBkcm1fY3J0Y19tYXNrKGNydGMpOwo+ID4gKwo+ ID4gKwlpZiAobmV3X3N0YXRlLT5hY3RpdmUpCj4gPiArCQlJOTE1X1NUQVRFX1dBUk4oIShwbGwt PmFjdGl2ZV9tYXNrICYgY3J0Y19tYXNrKSwKPiA+ICsJCQkJInBsbCBhY3RpdmUgbWlzbWF0Y2gg KGV4cGVjdGVkIHBpcGUgJWMgaW4gYWN0aXZlIG1hc2sgMHglMDJ4KVxuIiwKPiA+ICsJCQkJcGlw ZV9uYW1lKGRybV9jcnRjX2luZGV4KGNydGMpKSwgcGxsLT5hY3RpdmVfbWFzayk7Cj4gPiArCWVs c2UKPiA+ICsJCUk5MTVfU1RBVEVfV0FSTihwbGwtPmFjdGl2ZV9tYXNrICYgY3J0Y19tYXNrLAo+ ID4gKwkJCQkicGxsIGFjdGl2ZSBtaXNtYXRjaCAoZGlkbid0IGV4cGVjdCBwaXBlICVjIGluIGFj dGl2ZSBtYXNrIDB4JTAyeClcbiIsCj4gPiArCQkJCXBpcGVfbmFtZShkcm1fY3J0Y19pbmRleChj cnRjKSksIHBsbC0+YWN0aXZlX21hc2spOwo+ID4gKwo+ID4gKwlJOTE1X1NUQVRFX1dBUk4oIShw bGwtPnN0YXRlLmNydGNfbWFzayAmIGNydGNfbWFzayksCj4gPiArCQkJInBsbCBlbmFibGVkIGNy dGNzIG1pc21hdGNoIChleHBlY3RlZCAweCV4IGluIDB4JTAyeClcbiIsCj4gPiArCQkJY3J0Y19t YXNrLCBwbGwtPnN0YXRlLmNydGNfbWFzayk7Cj4gPiArCj4gPiArCUk5MTVfU1RBVEVfV0FSTihw bGwtPm9uICYmIG1lbWNtcCgmcGxsLT5zdGF0ZS5od19zdGF0ZSwKPiA+ICsJCQkJCSAgJmRwbGxf aHdfc3RhdGUsCj4gPiArCQkJCQkgIHNpemVvZihkcGxsX2h3X3N0YXRlKSksCj4gPiArCQkJInBs bCBodyBzdGF0ZSBtaXNtYXRjaFxuIik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4g PiArdmVyaWZ5X3NoYXJlZF9kcGxsX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0 Y19zdGF0ZSwKPiA+ICsJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkK PiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZGV2KTsKPiA+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX2ludGVs X2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqbmV3X3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSk7Cj4gPiAr Cj4gPiArCWlmIChuZXdfc3RhdGUtPnNoYXJlZF9kcGxsKQo+ID4gKwkJdmVyaWZ5X3NpbmdsZV9k cGxsX3N0YXRlKGRldl9wcml2LCBuZXdfc3RhdGUtPnNoYXJlZF9kcGxsLCBjcnRjLCBuZXdfY3J0 Y19zdGF0ZSk7Cj4gPiArCj4gPiArCWlmIChvbGRfc3RhdGUtPnNoYXJlZF9kcGxsICYmCj4gPiAr CSAgICBvbGRfc3RhdGUtPnNoYXJlZF9kcGxsICE9IG5ld19zdGF0ZS0+c2hhcmVkX2RwbGwpIHsK PiA+ICsJCXVuc2lnbmVkIGludCBjcnRjX21hc2sgPSBkcm1fY3J0Y19tYXNrKGNydGMpOwo+ID4g KwkJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwgPSBvbGRfc3RhdGUtPnNoYXJlZF9kcGxs Owo+ID4gKwo+ID4gKwkJSTkxNV9TVEFURV9XQVJOKHBsbC0+YWN0aXZlX21hc2sgJiBjcnRjX21h c2ssCj4gPiArCQkJCSJwbGwgYWN0aXZlIG1pc21hdGNoIChkaWRuJ3QgZXhwZWN0IHBpcGUgJWMg aW4gYWN0aXZlIG1hc2spXG4iLAo+ID4gKwkJCQlwaXBlX25hbWUoZHJtX2NydGNfaW5kZXgoY3J0 YykpKTsKPiA+ICsJCUk5MTVfU1RBVEVfV0FSTihwbGwtPnN0YXRlLmNydGNfbWFzayAmIGNydGNf bWFzaywKPiA+ICsJCQkJInBsbCBlbmFibGVkIGNydGNzIG1pc21hdGNoIChmb3VuZCAleCBpbiBl bmFibGVkIG1hc2spXG4iLAo+ID4gKwkJCQlwaXBlX25hbWUoZHJtX2NydGNfaW5kZXgoY3J0Yykp KTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICt2b2lkCj4gPiAraW50ZWxfdmVyaWZ5X21vZGVz ZXRfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJICBzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gPiArCQkJICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0 ZSwKPiA+ICsJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X3N0YXRlKQo+ID4gK3sKPiA+ ICsJaWYgKCFkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChuZXdfc3RhdGUpICYmCj4gPiAr CSAgICAhdG9faW50ZWxfY3J0Y19zdGF0ZShuZXdfc3RhdGUpLT51cGRhdGVfcGlwZSkKPiA+ICsJ CXJldHVybjsKPiA+ICsKPiA+ICsJdmVyaWZ5X3dtX3N0YXRlKGNydGMsIG5ld19zdGF0ZSk7Cj4g PiArCXZlcmlmeV9jb25uZWN0b3Jfc3RhdGUoY3J0Yy0+ZGV2LCBzdGF0ZSwgY3J0Yyk7Cj4gPiAr CXZlcmlmeV9jcnRjX3N0YXRlKGNydGMsIG9sZF9zdGF0ZSwgbmV3X3N0YXRlKTsKPiA+ICsJdmVy aWZ5X3NoYXJlZF9kcGxsX3N0YXRlKGNydGMtPmRldiwgY3J0Yywgb2xkX3N0YXRlLCBuZXdfc3Rh dGUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3ZlcmlmeV9kaXNhYmxlZF9k cGxsX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiArCWludCBpOwo+ID4g Kwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbDsgaSsrKQo+ ID4gKwkJdmVyaWZ5X3NpbmdsZV9kcGxsX3N0YXRlKGRldl9wcml2LCAmZGV2X3ByaXYtPnNoYXJl ZF9kcGxsc1tpXSwgTlVMTCwgTlVMTCk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQKPiA+ICtpbnRl bF92ZXJpZnlfbW9kZXNldF9kaXNhYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKwkJ CSAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArCXZlcmlm eV9lbmNvZGVyX3N0YXRlKGRldiwgc3RhdGUpOwo+ID4gKwl2ZXJpZnlfY29ubmVjdG9yX3N0YXRl KGRldiwgc3RhdGUsIE5VTEwpOwo+ID4gKwl2ZXJpZnlfZGlzYWJsZWRfZHBsbF9zdGF0ZShkZXYp Owo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJp ZnkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3ZlcmlmeS5oCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwLi40Yjc1MWVhCj4gPiAtLS0gL2Rldi9udWxsCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZXJpZnkuaAo+ID4gQEAgLTAsMCAr MSwyMiBAQAo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KPiA+ICsvKgo+ ID4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gPiArICovCj4gPiAr Cj4gPiArI2lmbmRlZiBfX0lOVEVMX1ZFUklGWV9IX18KPiA+ICsjZGVmaW5lIF9fSU5URUxfVkVS SUZZX0hfXwo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fYXRvbWljX3N0YXRlOwo+ID4gK3N0cnVjdCBk cm1fY3J0YzsKPiA+ICtzdHJ1Y3QgZHJtX2NydGNfc3RhdGU7Cj4gPiArc3RydWN0IGRybV9kZXZp Y2U7Cj4gPiArCj4gPiArdm9pZCBpbnRlbF92ZXJpZnlfbW9kZXNldF9jcnRjKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPiA+ICsJCQkgICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl LAo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSwKPiA+ICsJ CQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfc3RhdGUpOwo+ID4gK3ZvaWQgaW50 ZWxfdmVyaWZ5X21vZGVzZXRfZGlzYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJ CQkJICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+ICt2b2lkIGludGVsX3Zl cmlmeV9wbGFuZXMoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4gKwo+ID4g KyNlbmRpZiAvKiBfX0lOVEVMX1ZFUklGWV9IX18gKi8KPiA+IC0tIAo+ID4gMi4yMC4xCj4gPiAK PiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBJ bnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cj4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo+IAo+IC0tIAo+IERhbmllbCBWZXR0ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwg Q29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5mZndsbC5jaAoKLS0gCkRhbmllbCBWZXR0ZXIKU29m dHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==