From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D99CC4361B for ; Wed, 16 Dec 2020 10:03:53 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1E8A72313B for ; Wed, 16 Dec 2020 10:03:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1E8A72313B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 62C116E0D8; Wed, 16 Dec 2020 10:03:52 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id BE75F6E0D8 for ; Wed, 16 Dec 2020 10:03:49 +0000 (UTC) IronPort-SDR: Yq79XQ551dajhMI/PUc5uhQqrd1IeFidw2ec3fvJfWIYpAvUZzQBIFtDW8SD5RphYWpG3ygLGm pY/LQHFr/mig== X-IronPort-AV: E=McAfee;i="6000,8403,9836"; a="171525881" X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="171525881" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 02:03:46 -0800 IronPort-SDR: IxCTbVX0ReqKAPKvob/Ux19aUwWAWluEf2WIKcC83Nza1aAzZ6csbm5t2DIKGz45kAPXSHGTIz YrZSpRHXiBSg== X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="368882126" Received: from slevy-mobl.ger.corp.intel.com (HELO localhost) ([10.214.192.176]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 02:03:40 -0800 From: Jani Nikula To: Dave Airlie , intel-gfx@lists.freedesktop.org In-Reply-To: <20201211072922.19101-6-airlied@gmail.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20201211072922.19101-1-airlied@gmail.com> <20201211072922.19101-6-airlied@gmail.com> Date: Wed, 16 Dec 2020 12:03:37 +0200 Message-ID: <87czza5apy.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 05/11] drm/i915: refactor some crtc code out of intel display. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Syrjala, Ville" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gRnJpLCAxMSBEZWMgMjAyMCwgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAZ21haWwuY29tPiB3cm90 ZToKPiBGcm9tOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+Cj4gVGhlcmUgbWF5 IGJlIG1vcmUgY3J0YyBjb2RlIHRoYXQgY2FuIGJlIHB1bGxlZCBvdXQsIGJ1dCB0aGlzCj4gaXMg YSBnb29kIHN0YXJ0Lgo+Cj4gUkZDOiBtYXliZSBjYWxsIHRoZSBuZXcgZmlsZSBzb21ldGhpbmcg ZGlmZmVyZW50CgpJIGNoZWNrZWQgdGhpcyBpcyBqdXN0IGNvZGUgbW92ZW1lbnQuIEkgZGlkIGNs ZWFuIHVwIGludGVsX2NydGMuaApsb2NhbGx5IGEgYml0IHRob3VnaC4gKEknbGwgcHJvYmFibHkg cmUtc2VuZCB0aGUgc2VyaWVzIHdpdGggYSBmZXcgZml4ZXMKdG8gcGFzcyBDSS4pCgpJJ20gbm90 IGF2ZXJzZSB0byByZW5hbWluZyB0aGUgZmlsZSBsYXRlciBpZiBuZWVkZWQsIEknbSBtb3JlIGNv bmNlcm5lZAphYm91dCBjaG9vc2luZyBhIG1lYW5pbmdmdWwgYnVuY2ggb2YgZnVuY3Rpb25zIHRv IHRha2Ugb3V0IGFuZCBwdXQgaW4KdGhlIG5ldyBmaWxlLgoKVmlsbGUsIEkgc2F3IHlvdSBoYWQg c29tZSBjb21tZW50cyBhYm91dCB0aGlzIC0gaXMgdGhpcyBtYWtpbmcgc2Vuc2libGUKcHJvZ3Jl c3Mgb3IgbWFraW5nIGZ1cnRoZXIgcmVmYWN0b3JpbmcgaGFyZGVyPwoKSSdtIGhvbmVzdGx5IGJl Z2lubmluZyB0byB0aGluayB3ZSd2ZSBoYWQgdG9vIG1hbnkgc3RhbGxlZCBhdHRlbXB0cyBhdApj bGVhbmluZyB1cCB0aGUgZmlsZSAoaW5jbHVkaW5nIGF0IGxlYXN0IHRocmVlIHBhdGNoIHNlcmll cyBmcm9tIHlvdXJzCnRydWx5KSB0aGF0IEknbSByZWFkeSB0byBqdXN0IGNob3AgdXAgdGhlIGZp bGUsIGFuZCBjbGVhbiBpdCB1cCBtb3JlCmxhdGVyIGFzIG5lZWRlZC4KCkJSLApKYW5pLgoKCj4K PiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+IC0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jICAgIHwgOTUzICsrKysr KysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRj LmggICAgfCAgMjAgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuYyB8IDkzNCArLS0tLS0tLS0tLS0tLS0tLS0KPiAgNCBmaWxlcyBjaGFuZ2VkLCA5NzUgaW5z ZXJ0aW9ucygrKSwgOTMzIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5oCj4KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZQo+IGluZGV4IDk4YTM1YjkzOTA1Mi4uZmZlYzI1NzcwMmFmIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiBAQCAtMTk2LDYgKzE5Niw3IEBAIGk5MTUteSArPSBcCj4gIAlkaXNwbGF5 L2ludGVsX2NvbG9yLm8gXAo+ICAJZGlzcGxheS9pbnRlbF9jb21ib19waHkubyBcCj4gIAlkaXNw bGF5L2ludGVsX2Nvbm5lY3Rvci5vIFwKPiArCWRpc3BsYXkvaW50ZWxfY3J0Yy5vIFwKPiAgCWRp c3BsYXkvaW50ZWxfY3NyLm8gXAo+ICAJZGlzcGxheS9pbnRlbF9jdXJzb3IubyBcCj4gIAlkaXNw bGF5L2ludGVsX2Rpc3BsYXkubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9jcnRjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDI2 YmViOGFkOWVkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfY3J0Yy5jCj4gQEAgLTAsMCArMSw5NTMgQEAKPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jw b3JhdGlvbgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmUu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAi aW50ZWxfYXRvbWljLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9hdG9taWNfcGxhbmUuaCIKPiArI2lu Y2x1ZGUgImludGVsX2NvbG9yLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9jcnRjLmgiCj4gKyNpbmNs dWRlICJpbnRlbF9jdXJzb3IuaCIKPiArI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfZGVidWdmcy5o Igo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf cGlwZV9jcmMuaCIKPiArI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgo+ICsKPiArLyogUHJpbWFy eSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPD0gMyAqLwo+ICtzdGF0aWMgY29uc3QgdTMyIGk4eHhf cHJpbWFyeV9mb3JtYXRzW10gPSB7Cj4gKwlEUk1fRk9STUFUX0M4LAo+ICsJRFJNX0ZPUk1BVF9Y UkdCMTU1NSwKPiArCURSTV9GT1JNQVRfUkdCNTY1LAo+ICsJRFJNX0ZPUk1BVF9YUkdCODg4OCwK PiArfTsKPiArCj4gKy8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgaXZiIChubyBmcDE2IGR1 ZSB0byBodyBpc3N1ZSkgKi8KPiArc3RhdGljIGNvbnN0IHUzMiBpdmJfcHJpbWFyeV9mb3JtYXRz W10gPSB7Cj4gKwlEUk1fRk9STUFUX0M4LAo+ICsJRFJNX0ZPUk1BVF9SR0I1NjUsCj4gKwlEUk1f Rk9STUFUX1hSR0I4ODg4LAo+ICsJRFJNX0ZPUk1BVF9YQkdSODg4OCwKPiArCURSTV9GT1JNQVRf WFJHQjIxMDEwMTAsCj4gKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAo+ICt9Owo+ICsKPiArLyog UHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciBnZW4gPj0gNCwgZXhjZXB0IGl2YiAqLwo+ICtzdGF0 aWMgY29uc3QgdTMyIGk5NjVfcHJpbWFyeV9mb3JtYXRzW10gPSB7Cj4gKwlEUk1fRk9STUFUX0M4 LAo+ICsJRFJNX0ZPUk1BVF9SR0I1NjUsCj4gKwlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJRFJN X0ZPUk1BVF9YQkdSODg4OCwKPiArCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCj4gKwlEUk1fRk9S TUFUX1hCR1IyMTAxMDEwLAo+ICsJRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGLAo+ICt9Owo+ICsK PiArLyogUHJpbWFyeSBwbGFuZSBmb3JtYXRzIGZvciB2bHYvY2h2ICovCj4gK3N0YXRpYyBjb25z dCB1MzIgdmx2X3ByaW1hcnlfZm9ybWF0c1tdID0gewo+ICsJRFJNX0ZPUk1BVF9DOCwKPiArCURS TV9GT1JNQVRfUkdCNTY1LAo+ICsJRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCURSTV9GT1JNQVRf WEJHUjg4ODgsCj4gKwlEUk1fRk9STUFUX0FSR0I4ODg4LAo+ICsJRFJNX0ZPUk1BVF9BQkdSODg4 OCwKPiArCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCj4gKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEw LAo+ICsJRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKPiArCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAs Cj4gKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qg dTY0IGk5eHhfZm9ybWF0X21vZGlmaWVyc1tdID0gewo+ICsJSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQsCj4gKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCj4gKwlEUk1fRk9STUFUX01PRF9JTlZBTElE Cj4gK307Cj4gKwo+ICtzdGF0aWMgYm9vbCBpOHh4X3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVk KHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPiArCQkJCQkgICAgdTMyIGZvcm1hdCwgdTY0IG1v ZGlmaWVyKQo+ICt7Cj4gKwlzd2l0Y2ggKG1vZGlmaWVyKSB7Cj4gKwljYXNlIERSTV9GT1JNQVRf TU9EX0xJTkVBUjoKPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Cj4gKwkJYnJlYWs7 Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlzd2l0Y2ggKGZv cm1hdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX0M4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2 NToKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdC ODg4ODoKPiArCQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8Cj4g KwkJCW1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwo+ICsJZGVmYXVsdDoKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGk5NjVfcGxhbmVf Zm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAo+ICsJCQkJCSAg ICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCj4gK3sKPiArCXN3aXRjaCAobW9kaWZpZXIpIHsK PiArCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgo+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRDoKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJ fQo+ICsKPiArCXN3aXRjaCAoZm9ybWF0KSB7Cj4gKwljYXNlIERSTV9GT1JNQVRfQzg6Cj4gKwlj YXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ICsJ Y2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogo+ ICsJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAx MDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9STUFU X0FSR0IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+ICsJY2FzZSBE Uk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Cj4gKwkJcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JN QVRfTU9EX0xJTkVBUiB8fAo+ICsJCQltb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxF RDsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCBpOXh4X3BsYW5lX2hhc19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICsJCQkgICAgICAgZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUpCj4gK3sKPiAr CWlmICghSEFTX0ZCQyhkZXZfcHJpdikpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChJ U19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+ICsJCXJldHVy biBpOXh4X3BsYW5lID09IFBMQU5FX0E7IC8qIHRpZWQgdG8gcGlwZSBBICovCj4gKwllbHNlIGlm IChJU19JVllCUklER0UoZGV2X3ByaXYpKQo+ICsJCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5F X0EgfHwgaTl4eF9wbGFuZSA9PSBQTEFORV9CIHx8Cj4gKwkJCWk5eHhfcGxhbmUgPT0gUExBTkVf QzsKPiArCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiArCQlyZXR1cm4gaTl4 eF9wbGFuZSA9PSBQTEFORV9BIHx8IGk5eHhfcGxhbmUgPT0gUExBTkVfQjsKPiArCWVsc2UKPiAr CQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBh c3NlcnRfdmJsYW5rX2Rpc2FibGVkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJaWYg KEk5MTVfU1RBVEVfV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApKQo+ICsJ CWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7Cj4gK30KPiArCj4gK3UzMiBpbnRlbF9jcnRjX2dl dF92YmxhbmtfY291bnRlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ICsJc3RydWN0IGRybV92Ymxhbmtf Y3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW2RybV9jcnRjX2luZGV4KCZjcnRjLT5iYXNlKV07 Cj4gKwo+ICsJaWYgKCF2YmxhbmstPm1heF92YmxhbmtfY291bnQpCj4gKwkJcmV0dXJuICh1MzIp ZHJtX2NydGNfYWNjdXJhdGVfdmJsYW5rX2NvdW50KCZjcnRjLT5iYXNlKTsKPiArCj4gKwlyZXR1 cm4gY3J0Yy0+YmFzZS5mdW5jcy0+Z2V0X3ZibGFua19jb3VudGVyKCZjcnRjLT5iYXNlKTsKPiAr fQo+ICsKPiArdTMyIGludGVsX2NydGNfbWF4X3ZibGFua19jb3VudChjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Cj4gKwlz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5j cnRjKTsKPiArCXUzMiBtb2RlX2ZsYWdzID0gY3J0Yy0+bW9kZV9mbGFnczsKPiArCj4gKwkvKgo+ ICsJICogRnJvbSBHZW4gMTEsIEluIGNhc2Ugb2YgZHNpIGNtZCBtb2RlLCBmcmFtZSBjb3VudGVy IHdvdWxkbnQKPiArCSAqIGhhdmUgdXBkYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIFRFLCBpZiB3 ZSB3YW50IHRvIHVzZQo+ICsJICogdGhlIGh3IGNvdW50ZXIsIHRoZW4gd2Ugd291bGQgZmluZCBp dCB1cGRhdGVkIGluIG9ubHkKPiArCSAqIHRoZSBuZXh0IFRFLCBoZW5jZSBzd2l0Y2hpbmcgdG8g c3cgY291bnRlci4KPiArCSAqLwo+ICsJaWYgKG1vZGVfZmxhZ3MgJiAoSTkxNV9NT0RFX0ZMQUdf RFNJX1VTRV9URTAgfCBJOTE1X01PREVfRkxBR19EU0lfVVNFX1RFMSkpCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJLyoKPiArCSAqIE9uIGk5NjVnbSB0aGUgaGFyZHdhcmUgZnJhbWUgY291bnRlciBy ZWFkcwo+ICsJICogemVybyB3aGVuIHRoZSBUViBlbmNvZGVyIGlzIGVuYWJsZWQgOigKPiArCSAq Lwo+ICsJaWYgKElTX0k5NjVHTShkZXZfcHJpdikgJiYKPiArCSAgICAoY3J0Y19zdGF0ZS0+b3V0 cHV0X3R5cGVzICYgQklUKElOVEVMX09VVFBVVF9UVk9VVCkpKQo+ICsJCXJldHVybiAwOwo+ICsK PiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKPiAr CQlyZXR1cm4gMHhmZmZmZmZmZjsgLyogZnVsbCAzMiBiaXQgY291bnRlciAqLwo+ICsJZWxzZSBp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAzKQo+ICsJCXJldHVybiAweGZmZmZmZjsgLyogb25s eSAyNCBiaXRzIG9mIGZyYW1lIGNvdW50ICovCj4gKwllbHNlCj4gKwkJcmV0dXJuIDA7IC8qIEdl bjIgZG9lc24ndCBoYXZlIGEgaGFyZHdhcmUgZnJhbWUgY291bnRlciAqLwo+ICt9Cj4gKwo+ICt2 b2lkIGludGVsX2NydGNfdmJsYW5rX29uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiArCj4gKwlhc3NlcnRfdmJsYW5rX2Rpc2FibGVk KCZjcnRjLT5iYXNlKTsKPiArCWRybV9jcnRjX3NldF9tYXhfdmJsYW5rX2NvdW50KCZjcnRjLT5i YXNlLAo+ICsJCQkJICAgICAgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNydGNfc3RhdGUp KTsKPiArCWRybV9jcnRjX3ZibGFua19vbigmY3J0Yy0+YmFzZSk7Cj4gK30KPiArCj4gK3ZvaWQg aW50ZWxfY3J0Y192Ymxhbmtfb2ZmKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiArCj4gKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKCZjcnRj LT5iYXNlKTsKPiArCWFzc2VydF92YmxhbmtfZGlzYWJsZWQoJmNydGMtPmJhc2UpOwo+ICt9Cj4g Kwo+ICtzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Cj4gKwo+ICsJY3J0Y19zdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKCpjcnRjX3N0YXRl KSwgR0ZQX0tFUk5FTCk7Cj4gKwo+ICsJaWYgKGNydGNfc3RhdGUpCj4gKwkJaW50ZWxfY3J0Y19z dGF0ZV9yZXNldChjcnRjX3N0YXRlLCBjcnRjKTsKPiArCj4gKwlyZXR1cm4gY3J0Y19zdGF0ZTsK PiArfQo+ICsKPiArdm9pZCBpbnRlbF9jcnRjX3N0YXRlX3Jlc2V0KHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAo+ICsJCQkgICAgc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4g K3sKPiArCW1lbXNldChjcnRjX3N0YXRlLCAwLCBzaXplb2YoKmNydGNfc3RhdGUpKTsKPiArCj4g KwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfc3RhdGVfcmVzZXQoJmNydGNfc3RhdGUtPnVhcGks ICZjcnRjLT5iYXNlKTsKPiArCj4gKwljcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2RlciA9IElOVkFM SURfVFJBTlNDT0RFUjsKPiArCWNydGNfc3RhdGUtPm1hc3Rlcl90cmFuc2NvZGVyID0gSU5WQUxJ RF9UUkFOU0NPREVSOwo+ICsJY3J0Y19zdGF0ZS0+aHN3X3dvcmthcm91bmRfcGlwZSA9IElOVkFM SURfUElQRTsKPiArCWNydGNfc3RhdGUtPm91dHB1dF9mb3JtYXQgPSBJTlRFTF9PVVRQVVRfRk9S TUFUX0lOVkFMSUQ7Cj4gKwljcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGUuc2NhbGVyX2lkID0gLTE7 Cj4gKwljcnRjX3N0YXRlLT5tc3RfbWFzdGVyX3RyYW5zY29kZXIgPSBJTlZBTElEX1RSQU5TQ09E RVI7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGk5eHhfcGxhbmVfaGFzX3dpbmRvd2luZyhzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gKwllbnVtIGk5eHhfcGxhbmVf aWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwo+ICsKPiArCWlmIChJU19DSEVSUllW SUVXKGRldl9wcml2KSkKPiArCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9COwo+ICsJZWxz ZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJpdikpCj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsJZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCA0KSkKPiArCQlyZXR1 cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9DOwo+ICsJZWxzZQo+ICsJCXJldHVybiBpOXh4X3BsYW5l ID09IFBMQU5FX0IgfHwKPiArCQkJaTl4eF9wbGFuZSA9PSBQTEFORV9DOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdTMyIGk5eHhfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAo+ICsJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gKwkJ dG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiArCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsJdW5zaWduZWQgaW50 IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwo+ICsJdTMyIGRzcGNudHI7Cj4g Kwo+ICsJZHNwY250ciA9IERJU1BMQVlfUExBTkVfRU5BQkxFOwo+ICsKPiArCWlmIChJU19HNFgo ZGV2X3ByaXYpIHx8IElTX0dFTihkZXZfcHJpdiwgNSkgfHwKPiArCSAgICBJU19HRU4oZGV2X3By aXYsIDYpIHx8IElTX0lWWUJSSURHRShkZXZfcHJpdikpCj4gKwkJZHNwY250ciB8PSBESVNQUExB TkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7Cj4gKwo+ICsJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3Jt YXQpIHsKPiArCWNhc2UgRFJNX0ZPUk1BVF9DODoKPiArCQlkc3BjbnRyIHw9IERJU1BQTEFORV84 QlBQOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1Ogo+ICsJCWRzcGNu dHIgfD0gRElTUFBMQU5FX0JHUlg1NTU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRf QVJHQjE1NTU6Cj4gKwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTU1NTsKPiArCQlicmVhazsK PiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gKwkJZHNwY250ciB8PSBESVNQUExBTkVfQkdS WDU2NTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCQlkc3Bj bnRyIHw9IERJU1BQTEFORV9CR1JYODg4Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFU X1hCR1I4ODg4Ogo+ICsJCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQlg4ODg7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gKwkJZHNwY250ciB8PSBESVNQUExBTkVf QkdSQTg4ODsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiArCQlk c3BjbnRyIHw9IERJU1BQTEFORV9SR0JBODg4Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9S TUFUX1hSR0IyMTAxMDEwOgo+ICsJCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlgxMDEwMTA7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Cj4gKwkJZHNwY250ciB8 PSBESVNQUExBTkVfUkdCWDEwMTAxMDsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMjEwMTAxMDoKPiArCQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JBMTAxMDEwOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+ICsJCWRzcGNudHIgfD0gRElT UFBMQU5FX1JHQkExMDEwMTA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjE2 MTYxNjE2RjoKPiArCQlkc3BjbnRyIHw9IERJU1BQTEFORV9SR0JYMTYxNjE2Owo+ICsJCWJyZWFr Owo+ICsJZGVmYXVsdDoKPiArCQlNSVNTSU5HX0NBU0UoZmItPmZvcm1hdC0+Zm9ybWF0KTsKPiAr CQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0ICYm Cj4gKwkgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKQo+ICsJCWRz cGNudHIgfD0gRElTUFBMQU5FX1RJTEVEOwo+ICsKPiArCWlmIChyb3RhdGlvbiAmIERSTV9NT0RF X1JPVEFURV8xODApCj4gKwkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKPiArCj4g KwlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpCj4gKwkJZHNwY250ciB8PSBESVNQ UExBTkVfTUlSUk9SOwo+ICsKPiArCXJldHVybiBkc3BjbnRyOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50Cj4gK2k5eHhfcGxhbmVfY2hlY2soc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCj4gKwkJIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiAr CXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+ dWFwaS5wbGFuZSk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNodl9wbGFuZV9jaGVja19y b3RhdGlvbihwbGFuZV9zdGF0ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJcmV0ID0gaW50ZWxfYXRvbWljX3BsYW5lX2NoZWNrX2NsaXBwaW5nKHBsYW5lX3N0YXRlLCBj cnRjX3N0YXRlLAo+ICsJCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKwkJCQkJ CURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKPiArCQkJCQkJaTl4eF9wbGFuZV9oYXNfd2lu ZG93aW5nKHBsYW5lKSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0 ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5h dGVzKHBsYW5lX3N0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlw bGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9wbGFuZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGk5eHhfcGxhbmVfY3Rs X2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiAr CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBp LmNydGMpOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj cnRjLT5iYXNlLmRldik7Cj4gKwl1MzIgZHNwY250ciA9IDA7Cj4gKwo+ICsJaWYgKGNydGNfc3Rh dGUtPmdhbW1hX2VuYWJsZSkKPiArCQlkc3BjbnRyIHw9IERJU1BQTEFORV9HQU1NQV9FTkFCTEU7 Cj4gKwo+ICsJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCj4gKwkJZHNwY250ciB8PSBESVNQ UExBTkVfUElQRV9DU0NfRU5BQkxFOwo+ICsKPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwg NSkKPiArCQlkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRShjcnRjLT5waXBlKTsKPiArCj4g KwlyZXR1cm4gZHNwY250cjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTl4eF9wbGFuZV9yYXRp byhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ICsJCQkgICAgIHVu c2lnbmVkIGludCAqbnVtLCB1bnNpZ25lZCBpbnQgKmRlbikKPiArewo+ICsJY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Cj4gKwl1bnNpZ25lZCBp bnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwWzBdOwo+ICsKPiArCS8qCj4gKwkgKiBnNHggYnNwZWMg c2F5cyA2NGJwcCBwaXhlbCByYXRlIGNhbid0IGV4Y2VlZCA4MCUKPiArCSAqIG9mIGNkY2xrIHdo ZW4gdGhlIHNwcml0ZSBwbGFuZSBpcyBlbmFibGVkIG9uIHRoZQo+ICsJICogc2FtZSBwaXBlLiBp bGsvc25iIGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0ZSBpcwo+ICsJICogbmV2ZXIgYWxsb3dl ZCB0byBleGNlZWQgODAlIG9mIGNkY2xrLiBMZXQncyBqdXN0IGdvCj4gKwkgKiB3aXRoIHRoZSBp bGsvc25iIGxpbWl0IGFsd2F5cy4KPiArCSAqLwo+ICsJaWYgKGNwcCA9PSA4KSB7Cj4gKwkJKm51 bSA9IDEwOwo+ICsJCSpkZW4gPSA4Owo+ICsJfSBlbHNlIHsKPiArCQkqbnVtID0gMTsKPiArCQkq ZGVuID0gMTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBpOXh4X3BsYW5lX21pbl9jZGNs ayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJCWNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArCXVuc2lnbmVk IGludCBwaXhlbF9yYXRlOwo+ICsJdW5zaWduZWQgaW50IG51bSwgZGVuOwo+ICsKPiArCS8qCj4g KwkgKiBOb3RlIHRoYXQgY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZSBhY2NvdW50cyBmb3IgYm90aAo+ ICsJICogaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcGFuZWwgZml0dGVyIGRvd25zY2FsaW5nIGZh Y3RvcnMuCj4gKwkgKiBQcmUtSFNXIGJzcGVjIHRlbGxzIHVzIHRvIG9ubHkgY29uc2lkZXIgdGhl IGhvcml6b250YWwKPiArCSAqIGRvd25zY2FsaW5nIGZhY3RvciBoZXJlLiBXZSBpZ25vcmUgdGhh dCBhbmQganVzdCBjb25zaWRlcgo+ICsJICogYm90aCBmb3Igc2ltcGxpY2l0eS4KPiArCSAqLwo+ ICsJcGl4ZWxfcmF0ZSA9IGNydGNfc3RhdGUtPnBpeGVsX3JhdGU7Cj4gKwo+ICsJaTl4eF9wbGFu ZV9yYXRpbyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgJm51bSwgJmRlbik7Cj4gKwo+ICsJLyog dHdvIHBpeGVscyBwZXIgY2xvY2sgd2l0aCBkb3VibGUgd2lkZSBwaXBlICovCj4gKwlpZiAoY3J0 Y19zdGF0ZS0+ZG91YmxlX3dpZGUpCj4gKwkJZGVuICo9IDI7Cj4gKwo+ICsJcmV0dXJuIERJVl9S T1VORF9VUChwaXhlbF9yYXRlICogbnVtLCBkZW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBp OXh4X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ICsJCQkgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJICAgICAgY29u c3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ ICsJZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKPiAr CXUzMiBsaW5lYXJfb2Zmc2V0Owo+ICsJaW50IHggPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVb MF0ueDsKPiArCWludCB5ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnk7Cj4gKwlpbnQg Y3J0Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOwo+ICsJaW50IGNydGNfeSA9IHBsYW5l X3N0YXRlLT51YXBpLmRzdC55MTsKPiArCWludCBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxh bmVfc3RhdGUtPnVhcGkuZHN0KTsKPiArCWludCBjcnRjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBs YW5lX3N0YXRlLT51YXBpLmRzdCk7Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ICsJdTMy IGRzcGFkZHJfb2Zmc2V0Owo+ICsJdTMyIGRzcGNudHI7Cj4gKwo+ICsJZHNwY250ciA9IHBsYW5l X3N0YXRlLT5jdGwgfCBpOXh4X3BsYW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOwo+ICsKPiArCWxp bmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwgcGxhbmVfc3RhdGUsIDAp Owo+ICsKPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gKwkJZHNwYWRkcl9vZmZz ZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0Owo+ICsJZWxzZQo+ICsJCWRz cGFkZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgm ZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICsJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIERTUFNUUklERShpOXh4X3BsYW5lKSwKPiArCQkJICBwbGFuZV9zdGF0ZS0+ Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8 IDQpIHsKPiArCQkvKgo+ICsJCSAqIFBMQU5FX0EgZG9lc24ndCBhY3R1YWxseSBoYXZlIGEgZnVs bCB3aW5kb3cKPiArCQkgKiBnZW5lcmF0b3IgYnV0IGxldCdzIGFzc3VtZSB3ZSBzdGlsbCBuZWVk IHRvCj4gKwkJICogcHJvZ3JhbSB3aGF0ZXZlciBpcyB0aGVyZS4KPiArCQkgKi8KPiArCQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQUE9TKGk5eHhfcGxhbmUpLAo+ICsJCQkJICAoY3J0 Y195IDw8IDE2KSB8IGNydGNfeCk7Cj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERT UFNJWkUoaTl4eF9wbGFuZSksCj4gKwkJCQkgICgoY3J0Y19oIC0gMSkgPDwgMTYpIHwgKGNydGNf dyAtIDEpKTsKPiArCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYgaTl4eF9w bGFuZSA9PSBQTEFORV9CKSB7Cj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBSSU1Q T1MoaTl4eF9wbGFuZSksCj4gKwkJCQkgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsKPiArCQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTVNJWkUoaTl4eF9wbGFuZSksCj4gKwkJCQkg ICgoY3J0Y19oIC0gMSkgPDwgMTYpIHwgKGNydGNfdyAtIDEpKTsKPiArCQlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgUFJJTUNOU1RBTFBIQShpOXh4X3BsYW5lKSwgMCk7Cj4gKwl9Cj4gKwo+ ICsJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsK PiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQT0ZGU0VUKGk5eHhfcGxhbmUpLAo+ ICsJCQkJICAoeSA8PCAxNikgfCB4KTsKPiArCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA0KSB7Cj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUExJTk9GRihpOXh4 X3BsYW5lKSwKPiArCQkJCSAgbGluZWFyX29mZnNldCk7Cj4gKwkJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIERTUFRJTEVPRkYoaTl4eF9wbGFuZSksCj4gKwkJCQkgICh5IDw8IDE2KSB8IHgp Owo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMg aWYgdGhlIHBsYW5lIHdhcyBwcmV2aW91c2x5Cj4gKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2Ug dGhlIHBsYW5lIGVuYWJsZSBhdG9taWMgYnkgd3JpdGluZwo+ICsJICogdGhlIGNvbnRyb2wgcmVn aXN0ZXIganVzdCBiZWZvcmUgdGhlIHN1cmZhY2UgcmVnaXN0ZXIuCj4gKwkgKi8KPiArCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsKPiAr CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIERTUFNVUkYoaTl4eF9wbGFuZSksCj4gKwkJCQkgIGludGVsX3BsYW5lX2dndHRfb2Zm c2V0KHBsYW5lX3N0YXRlKSArIGRzcGFkZHJfb2Zmc2V0KTsKPiArCWVsc2UKPiArCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQUREUihpOXh4X3BsYW5lKSwKPiArCQkJCSAgaW50ZWxf cGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgZHNwYWRkcl9vZmZzZXQpOwo+ICsKPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3Mp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOXh4X2Rpc2FibGVfcGxhbmUoc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSwKPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gKwllbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9w bGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwo+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiAr CXUzMiBkc3BjbnRyOwo+ICsKPiArCS8qCj4gKwkgKiBEU1BDTlRSIHBpcGUgZ2FtbWEgZW5hYmxl IG9uIGc0eCsgYW5kIHBpcGUgY3NjCj4gKwkgKiBlbmFibGUgb24gaWxrKyBhZmZlY3QgdGhlIHBp cGUgYm90dG9tIGNvbG9yIGFzCj4gKwkgKiB3ZWxsLCBzbyB3ZSBtdXN0IGNvbmZpZ3VyZSB0aGVt IGV2ZW4gaWYgdGhlIHBsYW5lCj4gKwkgKiBpcyBkaXNhYmxlZC4KPiArCSAqCj4gKwkgKiBPbiBw cmUtZzR4IHRoZXJlIGlzIG5vIHdheSB0byBnYW1tYSBjb3JyZWN0IHRoZQo+ICsJICogcGlwZSBi b3R0b20gY29sb3IgYnV0IHdlJ2xsIGtlZXAgb24gZG9pbmcgdGhpcwo+ICsJICogYW55d2F5IHNv IHRoYXQgdGhlIGNydGMgc3RhdGUgcmVhZG91dCB3b3JrcyBjb3JyZWN0bHkuCj4gKwkgKi8KPiAr CWRzcGNudHIgPSBpOXh4X3BsYW5lX2N0bF9jcnRjKGNydGNfc3RhdGUpOwo+ICsKPiArCXNwaW5f bG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiArCj4gKwlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQ05UUihpOXh4X3BsYW5lKSwgZHNwY250cik7 Cj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQo+ICsJCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBEU1BTVVJGKGk5eHhfcGxhbmUpLCAwKTsKPiArCWVsc2UKPiArCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQUREUihpOXh4X3BsYW5lKSwgMCk7Cj4gKwo+ICsJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4g K30KPiArCj4gK3N0YXRpYyBib29sIGk5eHhfcGxhbmVfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgICAgZW51bSBwaXBlICpwaXBlKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7 Cj4gKwllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKPiArCWVu dW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5eHhfcGxhbmU7Cj4gKwlpbnRl bF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArCWJvb2wgcmV0Owo+ICsJdTMyIHZhbDsKPiArCj4gKwkv Kgo+ICsJICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUgYmV0d2Vl biBwaXBlcywKPiArCSAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBmb3IgZ2VuMi00IHdoaWNo IGRvbid0IGhhdmUgYW55Cj4gKwkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgo+ICsJICovCj4gKwlw b3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7Cj4gKwl3YWtlcmVm ID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9t YWluKTsKPiArCWlmICghd2FrZXJlZikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRFNQQ05UUihpOXh4X3BsYW5lKSk7Cj4gKwo+ICsJcmV0 ID0gdmFsICYgRElTUExBWV9QTEFORV9FTkFCTEU7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gNSkKPiArCQkqcGlwZSA9IHBsYW5lLT5waXBlOwo+ICsJZWxzZQo+ICsJCSpwaXBl ID0gKHZhbCAmIERJU1BQTEFORV9TRUxfUElQRV9NQVNLKSA+Pgo+ICsJCQlESVNQUExBTkVfU0VM X1BJUEVfU0hJRlQ7Cj4gKwo+ICsJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBv d2VyX2RvbWFpbiwgd2FrZXJlZik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdW5z aWduZWQgaW50Cj4gK2k5eHhfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAo+ICsJCSAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKPiArCQkgICAg ICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiArCj4gKwlpZiAoIUhBU19H TUNIKGRldl9wcml2KSkgewo+ICsJCXJldHVybiAzMioxMDI0Owo+ICsJfSBlbHNlIGlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpIHsKPiArCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQpCj4gKwkJCXJldHVybiAxNioxMDI0Owo+ICsJCWVsc2UKPiArCQkJcmV0dXJu IDMyKjEwMjQ7Cj4gKwl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMykgewo+ICsJ CWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKPiArCQkJcmV0dXJuIDgq MTAyNDsKPiArCQllbHNlCj4gKwkJCXJldHVybiAxNioxMDI0Owo+ICsJfSBlbHNlIHsKPiArCQlp ZiAocGxhbmUtPmk5eHhfcGxhbmUgPT0gUExBTkVfQykKPiArCQkJcmV0dXJuIDQqMTAyNDsKPiAr CQllbHNlCj4gKwkJCXJldHVybiA4KjEwMjQ7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk5NjVfcGxhbmVfZnVuY3MgPSB7Cj4gKwkudXBkYXRl X3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAo+ICsJLmRpc2FibGVfcGxh bmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+ICsJLmRlc3Ryb3kgPSBpbnRl bF9wbGFuZV9kZXN0cm95LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFu ZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFu ZV9kZXN0cm95X3N0YXRlLAo+ICsJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTk2NV9wbGFuZV9m b3JtYXRfbW9kX3N1cHBvcnRlZCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX2Z1bmNzIGk4eHhfcGxhbmVfZnVuY3MgPSB7Cj4gKwkudXBkYXRlX3BsYW5lID0gZHJt X2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAo+ICsJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+ICsJLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0 cm95LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVf c3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0 YXRlLAo+ICsJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaTh4eF9wbGFuZV9mb3JtYXRfbW9kX3N1 cHBvcnRlZCwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfcGxhbmUgKgo+ICtpbnRl bF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGVudW0gcGlwZSBwaXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ICsJ Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyAqcGxhbmVfZnVuY3M7Cj4gKwl1bnNpZ25lZCBp bnQgc3VwcG9ydGVkX3JvdGF0aW9uczsKPiArCWNvbnN0IHUzMiAqZm9ybWF0czsKPiArCWludCBu dW1fZm9ybWF0czsKPiArCWludCByZXQsIHpwb3M7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOSkKPiArCQlyZXR1cm4gc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoZGV2X3By aXYsIHBpcGUsCj4gKwkJCQkJCSAgUExBTkVfUFJJTUFSWSk7Cj4gKwo+ICsJcGxhbmUgPSBpbnRl bF9wbGFuZV9hbGxvYygpOwo+ICsJaWYgKElTX0VSUihwbGFuZSkpCj4gKwkJcmV0dXJuIHBsYW5l Owo+ICsKPiArCXBsYW5lLT5waXBlID0gcGlwZTsKPiArCS8qCj4gKwkgKiBPbiBnZW4yLzMgb25s eSBwbGFuZSBBIGNhbiBkbyBGQkMsIGJ1dCB0aGUgcGFuZWwgZml0dGVyIGFuZCBMVkRTCj4gKwkg KiBwb3J0IGlzIGhvb2tlZCB0byBwaXBlIEIuIEhlbmNlIHdlIHdhbnQgcGxhbmUgQSBmZWVkaW5n IHBpcGUgQi4KPiArCSAqLwo+ICsJaWYgKEhBU19GQkMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihk ZXZfcHJpdikgPCA0ICYmCj4gKwkgICAgSU5URUxfTlVNX1BJUEVTKGRldl9wcml2KSA9PSAyKQo+ ICsJCXBsYW5lLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgIXBpcGU7Cj4gKwll bHNlCj4gKwkJcGxhbmUtPmk5eHhfcGxhbmUgPSAoZW51bSBpOXh4X3BsYW5lX2lkKSBwaXBlOwo+ ICsJcGxhbmUtPmlkID0gUExBTkVfUFJJTUFSWTsKPiArCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQg PSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBwbGFuZS0+aWQpOwo+ICsKPiArCXBsYW5lLT5oYXNf ZmJjID0gaTl4eF9wbGFuZV9oYXNfZmJjKGRldl9wcml2LCBwbGFuZS0+aTl4eF9wbGFuZSk7Cj4g KwlpZiAocGxhbmUtPmhhc19mYmMpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZmJjICpmYmMgPSAmZGV2 X3ByaXYtPmZiYzsKPiArCj4gKwkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9iaXRzIHw9IHBs YW5lLT5mcm9udGJ1ZmZlcl9iaXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKElTX1ZBTExFWVZJRVcoZGV2 X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gKwkJZm9ybWF0cyA9IHZsdl9w cmltYXJ5X2Zvcm1hdHM7Cj4gKwkJbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHZsdl9wcmltYXJ5 X2Zvcm1hdHMpOwo+ICsJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKPiAr CQkvKgo+ICsJCSAqIFdhRlAxNkdhbW1hRW5hYmxpbmc6aXZiCj4gKwkJICogIldvcmthcm91bmQg OiBXaGVuIHVzaW5nIHRoZSA2NC1iaXQgZm9ybWF0LCB0aGUgcGxhbmUKPiArCQkgKiAgb3V0cHV0 IG9uIGVhY2ggY29sb3IgY2hhbm5lbCBoYXMgb25lIHF1YXJ0ZXIgYW1wbGl0dWRlLgo+ICsJCSAq ICBJdCBjYW4gYmUgYnJvdWdodCB1cCB0byBmdWxsIGFtcGxpdHVkZSBieSB1c2luZyBwaXBlCj4g KwkJICogIGdhbW1hIGNvcnJlY3Rpb24gb3IgcGlwZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIHRv Cj4gKwkJICogIG11bHRpcGx5IHRoZSBwbGFuZSBvdXRwdXQgYnkgZm91ci4iCj4gKwkJICoKPiAr CQkgKiBUaGVyZSBpcyBubyBkZWRpY2F0ZWQgcGxhbmUgZ2FtbWEgZm9yIHRoZSBwcmltYXJ5IHBs YW5lLAo+ICsJCSAqIGFuZCB1c2luZyB0aGUgcGlwZSBnYW1tYS9jc2MgY291bGQgY29uZmxpY3Qg d2l0aCBvdGhlcgo+ICsJCSAqIHBsYW5lcywgc28gd2UgY2hvb3NlIG5vdCB0byBleHBvc2UgZnAx NiBvbiBJVkIgcHJpbWFyeQo+ICsJCSAqIHBsYW5lcy4gSFNXIHByaW1hcnkgcGxhbmVzIG5vIGxv bmdlciBoYXZlIHRoaXMgcHJvYmxlbS4KPiArCQkgKi8KPiArCQlpZiAoSVNfSVZZQlJJREdFKGRl dl9wcml2KSkgewo+ICsJCQlmb3JtYXRzID0gaXZiX3ByaW1hcnlfZm9ybWF0czsKPiArCQkJbnVt X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGl2Yl9wcmltYXJ5X2Zvcm1hdHMpOwo+ICsJCX0gZWxzZSB7 Cj4gKwkJCWZvcm1hdHMgPSBpOTY1X3ByaW1hcnlfZm9ybWF0czsKPiArCQkJbnVtX2Zvcm1hdHMg PSBBUlJBWV9TSVpFKGk5NjVfcHJpbWFyeV9mb3JtYXRzKTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ ICsJCWZvcm1hdHMgPSBpOHh4X3ByaW1hcnlfZm9ybWF0czsKPiArCQludW1fZm9ybWF0cyA9IEFS UkFZX1NJWkUoaTh4eF9wcmltYXJ5X2Zvcm1hdHMpOwo+ICsJfQo+ICsKPiArCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDQpCj4gKwkJcGxhbmVfZnVuY3MgPSAmaTk2NV9wbGFuZV9mdW5jczsK PiArCWVsc2UKPiArCQlwbGFuZV9mdW5jcyA9ICZpOHh4X3BsYW5lX2Z1bmNzOwo+ICsKPiArCWlm IChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAr CQlwbGFuZS0+bWluX2NkY2xrID0gdmx2X3BsYW5lX21pbl9jZGNsazsKPiArCWVsc2UgaWYgKElT X0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCj4gKwkJcGxhbmUt Pm1pbl9jZGNsayA9IGhzd19wbGFuZV9taW5fY2RjbGs7Cj4gKwllbHNlIGlmIChJU19JVllCUklE R0UoZGV2X3ByaXYpKQo+ICsJCXBsYW5lLT5taW5fY2RjbGsgPSBpdmJfcGxhbmVfbWluX2NkY2xr Owo+ICsJZWxzZQo+ICsJCXBsYW5lLT5taW5fY2RjbGsgPSBpOXh4X3BsYW5lX21pbl9jZGNsazsK PiArCj4gKwlwbGFuZS0+bWF4X3N0cmlkZSA9IGk5eHhfcGxhbmVfbWF4X3N0cmlkZTsKPiArCXBs YW5lLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9wbGFuZTsKPiArCXBsYW5lLT5kaXNhYmxl X3BsYW5lID0gaTl4eF9kaXNhYmxlX3BsYW5lOwo+ICsJcGxhbmUtPmdldF9od19zdGF0ZSA9IGk5 eHhfcGxhbmVfZ2V0X2h3X3N0YXRlOwo+ICsJcGxhbmUtPmNoZWNrX3BsYW5lID0gaTl4eF9wbGFu ZV9jaGVjazsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChk ZXZfcHJpdikpCj4gKwkJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ ZHJtLCAmcGxhbmUtPmJhc2UsCj4gKwkJCQkJICAgICAgIDAsIHBsYW5lX2Z1bmNzLAo+ICsJCQkJ CSAgICAgICBmb3JtYXRzLCBudW1fZm9ybWF0cywKPiArCQkJCQkgICAgICAgaTl4eF9mb3JtYXRf bW9kaWZpZXJzLAo+ICsJCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZLAo+ICsJCQkJ CSAgICAgICAicHJpbWFyeSAlYyIsIHBpcGVfbmFtZShwaXBlKSk7Cj4gKwllbHNlCj4gKwkJcmV0 ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmcGxhbmUtPmJhc2Us Cj4gKwkJCQkJICAgICAgIDAsIHBsYW5lX2Z1bmNzLAo+ICsJCQkJCSAgICAgICBmb3JtYXRzLCBu dW1fZm9ybWF0cywKPiArCQkJCQkgICAgICAgaTl4eF9mb3JtYXRfbW9kaWZpZXJzLAo+ICsJCQkJ CSAgICAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZLAo+ICsJCQkJCSAgICAgICAicGxhbmUgJWMi LAo+ICsJCQkJCSAgICAgICBwbGFuZV9uYW1lKHBsYW5lLT5pOXh4X3BsYW5lKSk7Cj4gKwlpZiAo cmV0KQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikg JiYgcGlwZSA9PSBQSVBFX0IpIHsKPiArCQlzdXBwb3J0ZWRfcm90YXRpb25zID0KPiArCQkJRFJN X01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfMTgwIHwKPiArCQkJRFJNX01PREVfUkVG TEVDVF9YOwo+ICsJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKPiArCQlz dXBwb3J0ZWRfcm90YXRpb25zID0KPiArCQkJRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9S T1RBVEVfMTgwOwo+ICsJfSBlbHNlIHsKPiArCQlzdXBwb3J0ZWRfcm90YXRpb25zID0gRFJNX01P REVfUk9UQVRFXzA7Cj4gKwl9Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkK PiArCQlkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwKPiAr CQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCj4gKwkJCQkJCSAgIHN1cHBvcnRlZF9yb3RhdGlv bnMpOwo+ICsKPiArCXpwb3MgPSAwOwo+ICsJZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJs ZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIHpwb3MpOwo+ICsKPiArCWRybV9wbGFuZV9oZWxwZXJf YWRkKCZwbGFuZS0+YmFzZSwgJmludGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJcmV0 dXJuIHBsYW5lOwo+ICsKPiArZmFpbDoKPiArCWludGVsX3BsYW5lX2ZyZWUocGxhbmUpOwo+ICsK PiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0Y19hbGxvYyh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwo+ICsKPiArCWNy dGMgPSBremFsbG9jKHNpemVvZigqY3J0YyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFjcnRjKQo+ ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCWNydGNfc3RhdGUgPSBpbnRlbF9j cnRjX3N0YXRlX2FsbG9jKGNydGMpOwo+ICsJaWYgKCFjcnRjX3N0YXRlKSB7Cj4gKwkJa2ZyZWUo Y3J0Yyk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwl9Cj4gKwo+ICsJY3J0Yy0+ YmFzZS5zdGF0ZSA9ICZjcnRjX3N0YXRlLT51YXBpOwo+ICsJY3J0Yy0+Y29uZmlnID0gY3J0Y19z dGF0ZTsKPiArCj4gKwlyZXR1cm4gY3J0YzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW50ZWxf Y3J0Y19mcmVlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+ICt7Cj4gKwlpbnRlbF9jcnRjX2Rl c3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsIGNydGMtPmJhc2Uuc3RhdGUpOwo+ICsJa2ZyZWUoY3J0 Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9f aW50ZWxfY3J0YyhjcnRjKTsKPiArCj4gKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+ICsJa2Zy ZWUoaW50ZWxfY3J0Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW50ZWxfY3J0Y19sYXRlX3Jl Z2lzdGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJaW50ZWxfY3J0Y19kZWJ1Z2Zz X2FkZChjcnRjKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIElOVEVMX0NSVENf RlVOQ1MgXAo+ICsJLmdhbW1hX3NldCA9IGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9z ZXQsIFwKPiArCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywgXAo+ ICsJLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ksIFwKPiArCS5wYWdlX2ZsaXAgPSBkcm1f YXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsIFwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0g aW50ZWxfY3J0Y19kdXBsaWNhdGVfc3RhdGUsIFwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IGludGVsX2NydGNfZGVzdHJveV9zdGF0ZSwgXAo+ICsJLnNldF9jcmNfc291cmNlID0gaW50ZWxf Y3J0Y19zZXRfY3JjX3NvdXJjZSwgXAo+ICsJLnZlcmlmeV9jcmNfc291cmNlID0gaW50ZWxfY3J0 Y192ZXJpZnlfY3JjX3NvdXJjZSwgXAo+ICsJLmdldF9jcmNfc291cmNlcyA9IGludGVsX2NydGNf Z2V0X2NyY19zb3VyY2VzLCBcCj4gKwkubGF0ZV9yZWdpc3RlciA9IGludGVsX2NydGNfbGF0ZV9y ZWdpc3Rlcgo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBiZHdfY3J0 Y19mdW5jcyA9IHsKPiArCUlOVEVMX0NSVENfRlVOQ1MsCj4gKwo+ICsJLmdldF92YmxhbmtfY291 bnRlciA9IGc0eF9nZXRfdmJsYW5rX2NvdW50ZXIsCj4gKwkuZW5hYmxlX3ZibGFuayA9IGJkd19l bmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0gYmR3X2Rpc2FibGVfdmJsYW5rLAo+ ICsJLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFt cCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaWxrX2Ny dGNfZnVuY3MgPSB7Cj4gKwlJTlRFTF9DUlRDX0ZVTkNTLAo+ICsKPiArCS5nZXRfdmJsYW5rX2Nv dW50ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAo+ICsJLmVuYWJsZV92YmxhbmsgPSBpbGtf ZW5hYmxlX3ZibGFuaywKPiArCS5kaXNhYmxlX3ZibGFuayA9IGlsa19kaXNhYmxlX3ZibGFuaywK PiArCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3Rh bXAsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGc0eF9j cnRjX2Z1bmNzID0gewo+ICsJSU5URUxfQ1JUQ19GVU5DUywKPiArCj4gKwkuZ2V0X3ZibGFua19j b3VudGVyID0gZzR4X2dldF92YmxhbmtfY291bnRlciwKPiArCS5lbmFibGVfdmJsYW5rID0gaTk2 NV9lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0gaTk2NV9kaXNhYmxlX3ZibGFu aywKPiArCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1l c3RhbXAsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5 NjVfY3J0Y19mdW5jcyA9IHsKPiArCUlOVEVMX0NSVENfRlVOQ1MsCj4gKwo+ICsJLmdldF92Ymxh bmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyLAo+ICsJLmVuYWJsZV92Ymxhbmsg PSBpOTY1X2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSBpOTY1X2Rpc2FibGVf dmJsYW5rLAo+ICsJLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5r X3RpbWVzdGFtcCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVu Y3MgaTkxNWdtX2NydGNfZnVuY3MgPSB7Cj4gKwlJTlRFTF9DUlRDX0ZVTkNTLAo+ICsKPiArCS5n ZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKPiArCS5lbmFibGVf dmJsYW5rID0gaTkxNWdtX2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSBpOTE1 Z21fZGlzYWJsZV92YmxhbmssCj4gKwkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRj X2dldF92YmxhbmtfdGltZXN0YW1wLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY3J0Y19mdW5jcyBpOTE1X2NydGNfZnVuY3MgPSB7Cj4gKwlJTlRFTF9DUlRDX0ZVTkNTLAo+ ICsKPiArCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKPiAr CS5lbmFibGVfdmJsYW5rID0gaTh4eF9lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5r ID0gaTh4eF9kaXNhYmxlX3ZibGFuaywKPiArCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVs X2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jcnRjX2Z1bmNzIGk4eHhfY3J0Y19mdW5jcyA9IHsKPiArCUlOVEVMX0NSVENfRlVO Q1MsCj4gKwo+ICsJLyogbm8gaHcgdmJsYW5rIGNvdW50ZXIgKi8KPiArCS5lbmFibGVfdmJsYW5r ID0gaTh4eF9lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0gaTh4eF9kaXNhYmxl X3ZibGFuaywKPiArCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFu a190aW1lc3RhbXAsCj4gK307Cj4gKwo+ICtpbnQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiArCXN0cnVjdCBp bnRlbF9wbGFuZSAqcHJpbWFyeSwgKmN1cnNvcjsKPiArCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19m dW5jcyAqZnVuY3M7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiArCWludCBzcHJpdGUs IHJldDsKPiArCj4gKwljcnRjID0gaW50ZWxfY3J0Y19hbGxvYygpOwo+ICsJaWYgKElTX0VSUihj cnRjKSkKPiArCQlyZXR1cm4gUFRSX0VSUihjcnRjKTsKPiArCj4gKwljcnRjLT5waXBlID0gcGlw ZTsKPiArCWNydGMtPm51bV9zY2FsZXJzID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+bnVtX3Nj YWxlcnNbcGlwZV07Cj4gKwo+ICsJcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRl KGRldl9wcml2LCBwaXBlKTsKPiArCWlmIChJU19FUlIocHJpbWFyeSkpIHsKPiArCQlyZXQgPSBQ VFJfRVJSKHByaW1hcnkpOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCWNydGMtPnBsYW5lX2lk c19tYXNrIHw9IEJJVChwcmltYXJ5LT5pZCk7Cj4gKwo+ICsJZm9yX2VhY2hfc3ByaXRlKGRldl9w cml2LCBwaXBlLCBzcHJpdGUpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ICsK PiArCQlwbGFuZSA9IGludGVsX3Nwcml0ZV9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUsIHNw cml0ZSk7Cj4gKwkJaWYgKElTX0VSUihwbGFuZSkpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihwbGFu ZSk7Cj4gKwkJCWdvdG8gZmFpbDsKPiArCQl9Cj4gKwkJY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0g QklUKHBsYW5lLT5pZCk7Cj4gKwl9Cj4gKwo+ICsJY3Vyc29yID0gaW50ZWxfY3Vyc29yX3BsYW5l X2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7Cj4gKwlpZiAoSVNfRVJSKGN1cnNvcikpIHsKPiArCQly ZXQgPSBQVFJfRVJSKGN1cnNvcik7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsJY3J0Yy0+cGxh bmVfaWRzX21hc2sgfD0gQklUKGN1cnNvci0+aWQpOwo+ICsKPiArCWlmIChIQVNfR01DSChkZXZf cHJpdikpIHsKPiArCQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwKPiArCQkgICAgSVNf VkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfRzRYKGRldl9wcml2KSkKPiArCQkJZnVuY3MgPSAm ZzR4X2NydGNfZnVuY3M7Cj4gKwkJZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCA0KSkKPiArCQkJ ZnVuY3MgPSAmaTk2NV9jcnRjX2Z1bmNzOwo+ICsJCWVsc2UgaWYgKElTX0k5NDVHTShkZXZfcHJp dikgfHwgSVNfSTkxNUdNKGRldl9wcml2KSkKPiArCQkJZnVuY3MgPSAmaTkxNWdtX2NydGNfZnVu Y3M7Cj4gKwkJZWxzZSBpZiAoSVNfR0VOKGRldl9wcml2LCAzKSkKPiArCQkJZnVuY3MgPSAmaTkx NV9jcnRjX2Z1bmNzOwo+ICsJCWVsc2UKPiArCQkJZnVuY3MgPSAmaTh4eF9jcnRjX2Z1bmNzOwo+ ICsJfSBlbHNlIHsKPiArCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQo+ICsJCQlmdW5j cyA9ICZiZHdfY3J0Y19mdW5jczsKPiArCQllbHNlCj4gKwkJCWZ1bmNzID0gJmlsa19jcnRjX2Z1 bmNzOwo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoJmRldl9w cml2LT5kcm0sICZjcnRjLT5iYXNlLAo+ICsJCQkJCSZwcmltYXJ5LT5iYXNlLCAmY3Vyc29yLT5i YXNlLAo+ICsJCQkJCWZ1bmNzLCAicGlwZSAlYyIsIHBpcGVfbmFtZShwaXBlKSk7Cj4gKwlpZiAo cmV0KQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlCVUdfT04ocGlwZSA+PSBBUlJBWV9TSVpFKGRl dl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZykgfHwKPiArCSAgICAgICBkZXZfcHJpdi0+cGlw ZV90b19jcnRjX21hcHBpbmdbcGlwZV0gIT0gTlVMTCk7Cj4gKwlkZXZfcHJpdi0+cGlwZV90b19j cnRjX21hcHBpbmdbcGlwZV0gPSBjcnRjOwo+ICsKPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp IDwgOSkgewo+ICsJCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcHJpbWFyeS0+aTl4 eF9wbGFuZTsKPiArCj4gKwkJQlVHX09OKGk5eHhfcGxhbmUgPj0gQVJSQVlfU0laRShkZXZfcHJp di0+cGxhbmVfdG9fY3J0Y19tYXBwaW5nKSB8fAo+ICsJCSAgICAgICBkZXZfcHJpdi0+cGxhbmVf dG9fY3J0Y19tYXBwaW5nW2k5eHhfcGxhbmVdICE9IE5VTEwpOwo+ICsJCWRldl9wcml2LT5wbGFu ZV90b19jcnRjX21hcHBpbmdbaTl4eF9wbGFuZV0gPSBjcnRjOwo+ICsJfQo+ICsKPiArCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQo+ICsJCWRybV9jcnRjX2NyZWF0ZV9zY2FsaW5nX2Zp bHRlcl9wcm9wZXJ0eSgmY3J0Yy0+YmFzZSwKPiArCQkJCQkJQklUKERSTV9TQ0FMSU5HX0ZJTFRF Ul9ERUZBVUxUKSB8Cj4gKwkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9ORUlH SEJPUikpOwo+ICsKPiArCWludGVsX2NvbG9yX2luaXQoY3J0Yyk7Cj4gKwo+ICsJaW50ZWxfY3J0 Y19jcmNfaW5pdChjcnRjKTsKPiArCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZHJt X2NydGNfaW5kZXgoJmNydGMtPmJhc2UpICE9IGNydGMtPnBpcGUpOwo+ICsKPiArCXJldHVybiAw Owo+ICsKPiArZmFpbDoKPiArCWludGVsX2NydGNfZnJlZShjcnRjKTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZGEyOGFmNzVhZTIyCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf Y3J0Yy5oCj4gQEAgLTAsMCArMSwyMCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCj4g KyAqLwo+ICsKPiArI2lmbmRlZiBfSU5URUxfQ1JUQ19IXwo+ICsjZGVmaW5lIF9JTlRFTF9DUlRD X0hfCj4gKwo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgo+ICsKPiArc3RydWN0IGludGVs X2NydGNfc3RhdGU7Cj4gKwo+ICt1MzIgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAraW50IGludGVsX2NydGNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKTsK PiArc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2NydGNfc3RhdGVfYWxsb2Moc3RydWN0 IGludGVsX2NydGMgKmNydGMpOwo+ICt2b2lkIGludGVsX2NydGNfc3RhdGVfcmVzZXQoc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0Yyk7Cj4gKwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCAyODg1NTg0NGY4ZGUuLjVkZmVjOTUwYzE0NCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4g QEAgLTY4LDggKzY4LDggQEAKPiAgI2luY2x1ZGUgImludGVsX2J3LmgiCj4gICNpbmNsdWRlICJp bnRlbF9jZGNsay5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfY29sb3IuaCIKPiArI2luY2x1ZGUgImlu dGVsX2NydGMuaCIKPiAgI2luY2x1ZGUgImludGVsX2Nzci5oIgo+IC0jaW5jbHVkZSAiaW50ZWxf Y3Vyc29yLmgiCj4gICNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCj4gICNpbmNsdWRl ICJpbnRlbF9kcF9saW5rX3RyYWluaW5nLmgiCj4gICNpbmNsdWRlICJpbnRlbF9mYmMuaCIKPiBA QCAtODgsNTYgKzg4LDYgQEAKPiAgI2luY2x1ZGUgImludGVsX3RjLmgiCj4gICNpbmNsdWRlICJp bnRlbF92Z2EuaCIKPiAgCj4gLS8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2VuIDw9IDMg Ki8KPiAtc3RhdGljIGNvbnN0IHUzMiBpOHh4X3ByaW1hcnlfZm9ybWF0c1tdID0gewo+IC0JRFJN X0ZPUk1BVF9DOCwKPiAtCURSTV9GT1JNQVRfWFJHQjE1NTUsCj4gLQlEUk1fRk9STUFUX1JHQjU2 NSwKPiAtCURSTV9GT1JNQVRfWFJHQjg4ODgsCj4gLX07Cj4gLQo+IC0vKiBQcmltYXJ5IHBsYW5l IGZvcm1hdHMgZm9yIGl2YiAobm8gZnAxNiBkdWUgdG8gaHcgaXNzdWUpICovCj4gLXN0YXRpYyBj b25zdCB1MzIgaXZiX3ByaW1hcnlfZm9ybWF0c1tdID0gewo+IC0JRFJNX0ZPUk1BVF9DOCwKPiAt CURSTV9GT1JNQVRfUkdCNTY1LAo+IC0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiAtCURSTV9GT1JN QVRfWEJHUjg4ODgsCj4gLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAo+IC0JRFJNX0ZPUk1BVF9Y QkdSMjEwMTAxMCwKPiAtfTsKPiAtCj4gLS8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBmb3IgZ2Vu ID49IDQsIGV4Y2VwdCBpdmIgKi8KPiAtc3RhdGljIGNvbnN0IHUzMiBpOTY1X3ByaW1hcnlfZm9y bWF0c1tdID0gewo+IC0JRFJNX0ZPUk1BVF9DOCwKPiAtCURSTV9GT1JNQVRfUkdCNTY1LAo+IC0J RFJNX0ZPUk1BVF9YUkdCODg4OCwKPiAtCURSTV9GT1JNQVRfWEJHUjg4ODgsCj4gLQlEUk1fRk9S TUFUX1hSR0IyMTAxMDEwLAo+IC0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKPiAtCURSTV9GT1JN QVRfWEJHUjE2MTYxNjE2RiwKPiAtfTsKPiAtCj4gLS8qIFByaW1hcnkgcGxhbmUgZm9ybWF0cyBm b3Igdmx2L2NodiAqLwo+IC1zdGF0aWMgY29uc3QgdTMyIHZsdl9wcmltYXJ5X2Zvcm1hdHNbXSA9 IHsKPiAtCURSTV9GT1JNQVRfQzgsCj4gLQlEUk1fRk9STUFUX1JHQjU2NSwKPiAtCURSTV9GT1JN QVRfWFJHQjg4ODgsCj4gLQlEUk1fRk9STUFUX1hCR1I4ODg4LAo+IC0JRFJNX0ZPUk1BVF9BUkdC ODg4OCwKPiAtCURSTV9GT1JNQVRfQUJHUjg4ODgsCj4gLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEw LAo+IC0JRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKPiAtCURSTV9GT1JNQVRfQVJHQjIxMDEwMTAs Cj4gLQlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAo+IC0JRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZG LAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHU2NCBpOXh4X2Zvcm1hdF9tb2RpZmllcnNbXSA9 IHsKPiAtCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAo+IC0JRFJNX0ZPUk1BVF9NT0RfTElORUFS LAo+IC0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+IC19Owo+IC0KPiAgc3RhdGljIHZvaWQgaTl4 eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgCQkJCXN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4gIHN0YXRpYyB2b2lkIGlsa19wY2hfY2xv Y2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+IEBAIC0xNjMsNyArMTEzLDYgQEAgc3Rh dGljIHZvaWQgc2tsX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKTsKPiAgc3RhdGljIHZvaWQgaWxrX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAgc3RhdGljIHZvaWQgaW50ZWxfbW9kZXNl dF9zZXR1cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJCSBzdHJ1Y3Qg ZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCk7Cj4gLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7 Cj4gIAo+ICBzdHJ1Y3QgaW50ZWxfbGltaXQgewo+ICAJc3RydWN0IHsKPiBAQCAtMTMwMiwxMiAr MTI1MSw2IEBAIHN0YXRpYyB2b2lkIGFzc2VydF9wbGFuZXNfZGlzYWJsZWQoc3RydWN0IGludGVs X2NydGMgKmNydGMpCj4gIAkJYXNzZXJ0X3BsYW5lX2Rpc2FibGVkKHBsYW5lKTsKPiAgfQo+ICAK PiAtc3RhdGljIHZvaWQgYXNzZXJ0X3ZibGFua19kaXNhYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gLXsKPiAtCWlmIChJOTE1X1NUQVRFX1dBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChj cnRjKSA9PSAwKSkKPiAtCQlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOwo+IC19Cj4gLQo+ICB2 b2lkIGFzc2VydF9wY2hfdHJhbnNjb2Rlcl9kaXNhYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gIAkJCQkgICAgZW51bSBwaXBlIHBpcGUpCj4gIHsKPiBAQCAtMTc5Miw1 NSArMTczNSw2IEBAIGVudW0gcGlwZSBpbnRlbF9jcnRjX3BjaF90cmFuc2NvZGVyKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjKQo+ICAJCXJldHVybiBjcnRjLT5waXBlOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgdTMyIGludGVsX2NydGNfbWF4X3ZibGFua19jb3VudChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Cj4gLQlzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsK PiAtCXUzMiBtb2RlX2ZsYWdzID0gY3J0Yy0+bW9kZV9mbGFnczsKPiAtCj4gLQkvKgo+IC0JICog RnJvbSBHZW4gMTEsIEluIGNhc2Ugb2YgZHNpIGNtZCBtb2RlLCBmcmFtZSBjb3VudGVyIHdvdWxk bnQKPiAtCSAqIGhhdmUgdXBkYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIFRFLCBpZiB3ZSB3YW50 IHRvIHVzZQo+IC0JICogdGhlIGh3IGNvdW50ZXIsIHRoZW4gd2Ugd291bGQgZmluZCBpdCB1cGRh dGVkIGluIG9ubHkKPiAtCSAqIHRoZSBuZXh0IFRFLCBoZW5jZSBzd2l0Y2hpbmcgdG8gc3cgY291 bnRlci4KPiAtCSAqLwo+IC0JaWYgKG1vZGVfZmxhZ3MgJiAoSTkxNV9NT0RFX0ZMQUdfRFNJX1VT RV9URTAgfCBJOTE1X01PREVfRkxBR19EU0lfVVNFX1RFMSkpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+ IC0JLyoKPiAtCSAqIE9uIGk5NjVnbSB0aGUgaGFyZHdhcmUgZnJhbWUgY291bnRlciByZWFkcwo+ IC0JICogemVybyB3aGVuIHRoZSBUViBlbmNvZGVyIGlzIGVuYWJsZWQgOigKPiAtCSAqLwo+IC0J aWYgKElTX0k5NjVHTShkZXZfcHJpdikgJiYKPiAtCSAgICAoY3J0Y19zdGF0ZS0+b3V0cHV0X3R5 cGVzICYgQklUKElOVEVMX09VVFBVVF9UVk9VVCkpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKPiAtCQlyZXR1 cm4gMHhmZmZmZmZmZjsgLyogZnVsbCAzMiBiaXQgY291bnRlciAqLwo+IC0JZWxzZSBpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSAzKQo+IC0JCXJldHVybiAweGZmZmZmZjsgLyogb25seSAyNCBi aXRzIG9mIGZyYW1lIGNvdW50ICovCj4gLQllbHNlCj4gLQkJcmV0dXJuIDA7IC8qIEdlbjIgZG9l c24ndCBoYXZlIGEgaGFyZHdhcmUgZnJhbWUgY291bnRlciAqLwo+IC19Cj4gLQo+IC12b2lkIGlu dGVsX2NydGNfdmJsYW5rX29uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiAtCj4gLQlhc3NlcnRfdmJsYW5rX2Rpc2FibGVkKCZjcnRj LT5iYXNlKTsKPiAtCWRybV9jcnRjX3NldF9tYXhfdmJsYW5rX2NvdW50KCZjcnRjLT5iYXNlLAo+ IC0JCQkJICAgICAgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNydGNfc3RhdGUpKTsKPiAt CWRybV9jcnRjX3ZibGFua19vbigmY3J0Yy0+YmFzZSk7Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxf Y3J0Y192Ymxhbmtfb2ZmKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19z dGF0ZS0+dWFwaS5jcnRjKTsKPiAtCj4gLQlkcm1fY3J0Y192Ymxhbmtfb2ZmKCZjcnRjLT5iYXNl KTsKPiAtCWFzc2VydF92YmxhbmtfZGlzYWJsZWQoJmNydGMtPmJhc2UpOwo+IC19Cj4gLQo+ICB2 b2lkIGludGVsX2VuYWJsZV9waXBlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdf Y3J0Y19zdGF0ZSkKPiAgewo+ICAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9j cnRjKG5ld19jcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+IEBAIC00MDQ3LDE3MSArMzk0MSw2IEBA IGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGk5eHhfcGxh bmVfcmF0aW8oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLQkJ CSAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiAtCQkJ ICAgICB1bnNpZ25lZCBpbnQgKm51bSwgdW5zaWduZWQgaW50ICpkZW4pCj4gLXsKPiAtCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+IC0JdW5z aWduZWQgaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKPiAtCj4gLQkvKgo+IC0JICogZzR4 IGJzcGVjIHNheXMgNjRicHAgcGl4ZWwgcmF0ZSBjYW4ndCBleGNlZWQgODAlCj4gLQkgKiBvZiBj ZGNsayB3aGVuIHRoZSBzcHJpdGUgcGxhbmUgaXMgZW5hYmxlZCBvbiB0aGUKPiAtCSAqIHNhbWUg cGlwZS4gaWxrL3NuYiBic3BlYyBzYXlzIDY0YnBwIHBpeGVsIHJhdGUgaXMKPiAtCSAqIG5ldmVy IGFsbG93ZWQgdG8gZXhjZWVkIDgwJSBvZiBjZGNsay4gTGV0J3MganVzdCBnbwo+IC0JICogd2l0 aCB0aGUgaWxrL3NuYiBsaW1pdCBhbHdheXMuCj4gLQkgKi8KPiAtCWlmIChjcHAgPT0gOCkgewo+ IC0JCSpudW0gPSAxMDsKPiAtCQkqZGVuID0gODsKPiAtCX0gZWxzZSB7Cj4gLQkJKm51bSA9IDE7 Cj4gLQkJKmRlbiA9IDE7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgaTl4eF9wbGFuZV9t aW5fY2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLQkJ CQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLQl1 bnNpZ25lZCBpbnQgcGl4ZWxfcmF0ZTsKPiAtCXVuc2lnbmVkIGludCBudW0sIGRlbjsKPiAtCj4g LQkvKgo+IC0JICogTm90ZSB0aGF0IGNydGNfc3RhdGUtPnBpeGVsX3JhdGUgYWNjb3VudHMgZm9y IGJvdGgKPiAtCSAqIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHBhbmVsIGZpdHRlciBkb3duc2Nh bGluZyBmYWN0b3JzLgo+IC0JICogUHJlLUhTVyBic3BlYyB0ZWxscyB1cyB0byBvbmx5IGNvbnNp ZGVyIHRoZSBob3Jpem9udGFsCj4gLQkgKiBkb3duc2NhbGluZyBmYWN0b3IgaGVyZS4gV2UgaWdu b3JlIHRoYXQgYW5kIGp1c3QgY29uc2lkZXIKPiAtCSAqIGJvdGggZm9yIHNpbXBsaWNpdHkuCj4g LQkgKi8KPiAtCXBpeGVsX3JhdGUgPSBjcnRjX3N0YXRlLT5waXhlbF9yYXRlOwo+IC0KPiAtCWk5 eHhfcGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZudW0sICZkZW4pOwo+IC0K PiAtCS8qIHR3byBwaXhlbHMgcGVyIGNsb2NrIHdpdGggZG91YmxlIHdpZGUgcGlwZSAqLwo+IC0J aWYgKGNydGNfc3RhdGUtPmRvdWJsZV93aWRlKQo+IC0JCWRlbiAqPSAyOwo+IC0KPiAtCXJldHVy biBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51bSwgZGVuKTsKPiAtfQo+IC0KPiAtdW5zaWdu ZWQgaW50Cj4gLWk5eHhfcGxhbmVfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l LAo+IC0JCSAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKPiAtCQkgICAgICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiAtCj4gLQlpZiAoIUhBU19HTUNI KGRldl9wcml2KSkgewo+IC0JCXJldHVybiAzMioxMDI0Owo+IC0JfSBlbHNlIGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDQpIHsKPiAtCQlpZiAobW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1hfVElMRUQpCj4gLQkJCXJldHVybiAxNioxMDI0Owo+IC0JCWVsc2UKPiAtCQkJcmV0dXJuIDMy KjEwMjQ7Cj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMykgewo+IC0JCWlm IChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKPiAtCQkJcmV0dXJuIDgqMTAy NDsKPiAtCQllbHNlCj4gLQkJCXJldHVybiAxNioxMDI0Owo+IC0JfSBlbHNlIHsKPiAtCQlpZiAo cGxhbmUtPmk5eHhfcGxhbmUgPT0gUExBTkVfQykKPiAtCQkJcmV0dXJuIDQqMTAyNDsKPiAtCQll bHNlCj4gLQkJCXJldHVybiA4KjEwMjQ7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB1MzIgaTl4 eF9wbGFuZV9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKPiAtewo+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNf c3RhdGUtPnVhcGkuY3J0Yyk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiAtCXUzMiBkc3BjbnRyID0gMDsKPiAtCj4gLQlp ZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQo+IC0JCWRzcGNudHIgfD0gRElTUFBMQU5FX0dB TU1BX0VOQUJMRTsKPiAtCj4gLQlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKPiAtCQlkc3Bj bnRyIHw9IERJU1BQTEFORV9QSVBFX0NTQ19FTkFCTEU7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCA1KQo+IC0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1NFTF9QSVBFKGNydGMtPnBp cGUpOwo+IC0KPiAtCXJldHVybiBkc3BjbnRyOwo+IC19Cj4gLQo+IC1zdGF0aWMgdTMyIGk5eHhf cGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0J CQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gLQkJdG9faTkxNShwbGFuZV9z dGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+IC0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxh bmVfc3RhdGUtPmh3LnJvdGF0aW9uOwo+IC0JdTMyIGRzcGNudHI7Cj4gLQo+IC0JZHNwY250ciA9 IERJU1BMQVlfUExBTkVfRU5BQkxFOwo+IC0KPiAtCWlmIChJU19HNFgoZGV2X3ByaXYpIHx8IElT X0dFTihkZXZfcHJpdiwgNSkgfHwKPiAtCSAgICBJU19HRU4oZGV2X3ByaXYsIDYpIHx8IElTX0lW WUJSSURHRShkZXZfcHJpdikpCj4gLQkJZHNwY250ciB8PSBESVNQUExBTkVfVFJJQ0tMRV9GRUVE X0RJU0FCTEU7Cj4gLQo+IC0Jc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKPiAtCWNhc2Ug RFJNX0ZPUk1BVF9DODoKPiAtCQlkc3BjbnRyIHw9IERJU1BQTEFORV84QlBQOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1Ogo+IC0JCWRzcGNudHIgfD0gRElTUFBMQU5F X0JHUlg1NTU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6Cj4gLQkJ ZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTU1NTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZP Uk1BVF9SR0I1NjU6Cj4gLQkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSWDU2NTsKPiAtCQlicmVh azsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAtCQlkc3BjbnRyIHw9IERJU1BQTEFO RV9CR1JYODg4Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+IC0J CWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQlg4ODg7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9G T1JNQVRfQVJHQjg4ODg6Cj4gLQkJZHNwY250ciB8PSBESVNQUExBTkVfQkdSQTg4ODsKPiAtCQli cmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiAtCQlkc3BjbnRyIHw9IERJU1BQ TEFORV9SR0JBODg4Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEw Ogo+IC0JCWRzcGNudHIgfD0gRElTUFBMQU5FX0JHUlgxMDEwMTA7Cj4gLQkJYnJlYWs7Cj4gLQlj YXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Cj4gLQkJZHNwY250ciB8PSBESVNQUExBTkVfUkdC WDEwMTAxMDsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKPiAt CQlkc3BjbnRyIHw9IERJU1BQTEFORV9CR1JBMTAxMDEwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBE Uk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+IC0JCWRzcGNudHIgfD0gRElTUFBMQU5FX1JHQkExMDEw MTA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKPiAtCQlk c3BjbnRyIHw9IERJU1BQTEFORV9SR0JYMTYxNjE2Owo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoK PiAtCQlNSVNTSU5HX0NBU0UoZmItPmZvcm1hdC0+Zm9ybWF0KTsKPiAtCQlyZXR1cm4gMDsKPiAt CX0KPiAtCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0ICYmCj4gLQkgICAgZmItPm1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKQo+IC0JCWRzcGNudHIgfD0gRElTUFBM QU5FX1RJTEVEOwo+IC0KPiAtCWlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApCj4g LQkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKPiAtCj4gLQlpZiAocm90YXRpb24g JiBEUk1fTU9ERV9SRUZMRUNUX1gpCj4gLQkJZHNwY250ciB8PSBESVNQUExBTkVfTUlSUk9SOwo+ IC0KPiAtCXJldHVybiBkc3BjbnRyOwo+IC19Cj4gLQo+ICBpbnQgaTl4eF9jaGVja19wbGFuZV9z dXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIHsKPiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gQEAgLTQyNzIsMTk3ICs0MDAxLDYg QEAgaW50IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBib29sIGk5eHhf cGxhbmVfaGFzX3dpbmRvd2luZyhzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lKQo+IC17Cj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRl dik7Cj4gLQllbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5l Owo+IC0KPiAtCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAtCQlyZXR1cm4gaTl4eF9w bGFuZSA9PSBQTEFORV9COwo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8 IElTX0c0WChkZXZfcHJpdikpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0JZWxzZSBpZiAoSVNfR0VO KGRldl9wcml2LCA0KSkKPiAtCQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9DOwo+IC0JZWxz ZQo+IC0JCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5FX0IgfHwKPiAtCQkJaTl4eF9wbGFuZSA9 PSBQTEFORV9DOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWk5eHhfcGxhbmVfY2hlY2soc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLQkJIHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUg PSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Cj4gLQlpbnQgcmV0Owo+ IC0KPiAtCXJldCA9IGNodl9wbGFuZV9jaGVja19yb3RhdGlvbihwbGFuZV9zdGF0ZSk7Cj4gLQlp ZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmV0ID0gaW50ZWxfYXRvbWljX3BsYW5l X2NoZWNrX2NsaXBwaW5nKHBsYW5lX3N0YXRlLCBjcnRjX3N0YXRlLAo+IC0JCQkJCQlEUk1fUExB TkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gLQkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElO RywKPiAtCQkJCQkJaTl4eF9wbGFuZV9oYXNfd2luZG93aW5nKHBsYW5lKSk7Cj4gLQlpZiAocmV0 KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNl KHBsYW5lX3N0YXRlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlpZiAo IXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JcmV0ID0g aW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKPiAtCWlmIChy ZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlwbGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9wbGFu ZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAo+IC0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKPiAtCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShw bGFuZS0+YmFzZS5kZXYpOwo+IC0JZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUgPSBwbGFu ZS0+aTl4eF9wbGFuZTsKPiAtCXUzMiBsaW5lYXJfb2Zmc2V0Owo+IC0JaW50IHggPSBwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbMF0ueDsKPiAtCWludCB5ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzBdLnk7Cj4gLQlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOwo+IC0J aW50IGNydGNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC55MTsKPiAtCWludCBjcnRjX3cgPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPiAtCWludCBjcnRjX2ggPSBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Cj4gLQl1bnNpZ25lZCBsb25n IGlycWZsYWdzOwo+IC0JdTMyIGRzcGFkZHJfb2Zmc2V0Owo+IC0JdTMyIGRzcGNudHI7Cj4gLQo+ IC0JZHNwY250ciA9IHBsYW5lX3N0YXRlLT5jdGwgfCBpOXh4X3BsYW5lX2N0bF9jcnRjKGNydGNf c3RhdGUpOwo+IC0KPiAtCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwg eSwgcGxhbmVfc3RhdGUsIDApOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQp Cj4gLQkJZHNwYWRkcl9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0 Owo+IC0JZWxzZQo+IC0JCWRzcGFkZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKPiAtCj4gLQlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gLQo+ IC0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNUUklERShpOXh4X3BsYW5lKSwKPiAt CQkJICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKPiAtCj4gLQlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA8IDQpIHsKPiAtCQkvKgo+IC0JCSAqIFBMQU5FX0EgZG9lc24ndCBh Y3R1YWxseSBoYXZlIGEgZnVsbCB3aW5kb3cKPiAtCQkgKiBnZW5lcmF0b3IgYnV0IGxldCdzIGFz c3VtZSB3ZSBzdGlsbCBuZWVkIHRvCj4gLQkJICogcHJvZ3JhbSB3aGF0ZXZlciBpcyB0aGVyZS4K PiAtCQkgKi8KPiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQUE9TKGk5eHhfcGxh bmUpLAo+IC0JCQkJICAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7Cj4gLQkJaW50ZWxfZGVfd3Jp dGVfZncoZGV2X3ByaXYsIERTUFNJWkUoaTl4eF9wbGFuZSksCj4gLQkJCQkgICgoY3J0Y19oIC0g MSkgPDwgMTYpIHwgKGNydGNfdyAtIDEpKTsKPiAtCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikgJiYgaTl4eF9wbGFuZSA9PSBQTEFORV9CKSB7Cj4gLQkJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBSSU1QT1MoaTl4eF9wbGFuZSksCj4gLQkJCQkgIChjcnRjX3kgPDwgMTYp IHwgY3J0Y194KTsKPiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTVNJWkUoaTl4 eF9wbGFuZSksCj4gLQkJCQkgICgoY3J0Y19oIC0gMSkgPDwgMTYpIHwgKGNydGNfdyAtIDEpKTsK PiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUFJJTUNOU1RBTFBIQShpOXh4X3BsYW5l KSwgMCk7Cj4gLQl9Cj4gLQo+IC0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FE V0VMTChkZXZfcHJpdikpIHsKPiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQT0ZG U0VUKGk5eHhfcGxhbmUpLAo+IC0JCQkJICAoeSA8PCAxNikgfCB4KTsKPiAtCX0gZWxzZSBpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA0KSB7Cj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIERTUExJTk9GRihpOXh4X3BsYW5lKSwKPiAtCQkJCSAgbGluZWFyX29mZnNldCk7Cj4gLQkJ aW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFRJTEVPRkYoaTl4eF9wbGFuZSksCj4gLQkJ CQkgICh5IDw8IDE2KSB8IHgpOwo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBUaGUgY29udHJvbCBy ZWdpc3RlciBzZWxmLWFybXMgaWYgdGhlIHBsYW5lIHdhcyBwcmV2aW91c2x5Cj4gLQkgKiBkaXNh YmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJsZSBhdG9taWMgYnkgd3JpdGluZwo+IC0J ICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVzdCBiZWZvcmUgdGhlIHN1cmZhY2UgcmVnaXN0ZXIu Cj4gLQkgKi8KPiAtCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BDTlRSKGk5eHhfcGxh bmUpLCBkc3BjbnRyKTsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4gLQkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIERTUFNVUkYoaTl4eF9wbGFuZSksCj4gLQkJCQkgIGlu dGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRlKSArIGRzcGFkZHJfb2Zmc2V0KTsKPiAt CWVsc2UKPiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQUREUihpOXh4X3BsYW5l KSwKPiAtCQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgZHNwYWRk cl9vZmZzZXQpOwo+IC0KPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNv cmUubG9jaywgaXJxZmxhZ3MpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOXh4X2Rpc2FibGVf cGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAtCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gLQllbnVtIGk5 eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHBsYW5lLT5pOXh4X3BsYW5lOwo+IC0JdW5zaWduZWQg bG9uZyBpcnFmbGFnczsKPiAtCXUzMiBkc3BjbnRyOwo+IC0KPiAtCS8qCj4gLQkgKiBEU1BDTlRS IHBpcGUgZ2FtbWEgZW5hYmxlIG9uIGc0eCsgYW5kIHBpcGUgY3NjCj4gLQkgKiBlbmFibGUgb24g aWxrKyBhZmZlY3QgdGhlIHBpcGUgYm90dG9tIGNvbG9yIGFzCj4gLQkgKiB3ZWxsLCBzbyB3ZSBt dXN0IGNvbmZpZ3VyZSB0aGVtIGV2ZW4gaWYgdGhlIHBsYW5lCj4gLQkgKiBpcyBkaXNhYmxlZC4K PiAtCSAqCj4gLQkgKiBPbiBwcmUtZzR4IHRoZXJlIGlzIG5vIHdheSB0byBnYW1tYSBjb3JyZWN0 IHRoZQo+IC0JICogcGlwZSBib3R0b20gY29sb3IgYnV0IHdlJ2xsIGtlZXAgb24gZG9pbmcgdGhp cwo+IC0JICogYW55d2F5IHNvIHRoYXQgdGhlIGNydGMgc3RhdGUgcmVhZG91dCB3b3JrcyBjb3Jy ZWN0bHkuCj4gLQkgKi8KPiAtCWRzcGNudHIgPSBpOXh4X3BsYW5lX2N0bF9jcnRjKGNydGNfc3Rh dGUpOwo+IC0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGly cWZsYWdzKTsKPiAtCj4gLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQ05UUihpOXh4 X3BsYW5lKSwgZHNwY250cik7Cj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQo+IC0J CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBEU1BTVVJGKGk5eHhfcGxhbmUpLCAwKTsKPiAt CWVsc2UKPiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgRFNQQUREUihpOXh4X3BsYW5l KSwgMCk7Cj4gLQo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIGk5eHhfcGxhbmVfZ2V0X2h3 X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gLQkJCQkgICAgZW51bSBwaXBlICpw aXBlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Cj4gLQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBv d2VyX2RvbWFpbjsKPiAtCWVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lID0gcGxhbmUtPmk5 eHhfcGxhbmU7Cj4gLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWJvb2wgcmV0Owo+IC0J dTMyIHZhbDsKPiAtCj4gLQkvKgo+IC0JICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRo YXQgY2FuIG1vdmUgYmV0d2VlbiBwaXBlcywKPiAtCSAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2Fz ZSBmb3IgZ2VuMi00IHdoaWNoIGRvbid0IGhhdmUgYW55Cj4gLQkgKiBkaXNwbGF5IHBvd2VyIHdl bGxzLgo+IC0JICovCj4gLQlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+ cGlwZSk7Cj4gLQl3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChk ZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKPiAtCWlmICghd2FrZXJlZikKPiAtCQlyZXR1cm4gZmFs c2U7Cj4gLQo+IC0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRFNQQ05UUihpOXh4X3Bs YW5lKSk7Cj4gLQo+IC0JcmV0ID0gdmFsICYgRElTUExBWV9QTEFORV9FTkFCTEU7Cj4gLQo+IC0J aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSkKPiAtCQkqcGlwZSA9IHBsYW5lLT5waXBlOwo+ IC0JZWxzZQo+IC0JCSpwaXBlID0gKHZhbCAmIERJU1BQTEFORV9TRUxfUElQRV9NQVNLKSA+Pgo+ IC0JCQlESVNQUExBTkVfU0VMX1BJUEVfU0hJRlQ7Cj4gLQo+IC0JaW50ZWxfZGlzcGxheV9wb3dl cl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbiwgd2FrZXJlZik7Cj4gLQo+IC0JcmV0dXJuIHJl dDsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgc2tsX2RldGFjaF9zY2FsZXIoc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMsIGludCBpZCkKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGludGVsX2NydGMtPmJhc2UuZGV2Owo+IEBAIC0xMTkwOSwzMyArMTE0NDcsNiBAQCBzdGF0 aWMgdm9pZCBpbGtfcGNoX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiAgCQkJ CQkgJnBpcGVfY29uZmlnLT5mZGlfbV9uKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaW50ZWxf Y3J0Y19zdGF0ZV9yZXNldChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAt CQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+IC17Cj4gLQltZW1zZXQoY3J0Y19zdGF0 ZSwgMCwgc2l6ZW9mKCpjcnRjX3N0YXRlKSk7Cj4gLQo+IC0JX19kcm1fYXRvbWljX2hlbHBlcl9j cnRjX3N0YXRlX3Jlc2V0KCZjcnRjX3N0YXRlLT51YXBpLCAmY3J0Yy0+YmFzZSk7Cj4gLQo+IC0J Y3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIgPSBJTlZBTElEX1RSQU5TQ09ERVI7Cj4gLQljcnRj X3N0YXRlLT5tYXN0ZXJfdHJhbnNjb2RlciA9IElOVkFMSURfVFJBTlNDT0RFUjsKPiAtCWNydGNf c3RhdGUtPmhzd193b3JrYXJvdW5kX3BpcGUgPSBJTlZBTElEX1BJUEU7Cj4gLQljcnRjX3N0YXRl LT5vdXRwdXRfZm9ybWF0ID0gSU5URUxfT1VUUFVUX0ZPUk1BVF9JTlZBTElEOwo+IC0JY3J0Y19z dGF0ZS0+c2NhbGVyX3N0YXRlLnNjYWxlcl9pZCA9IC0xOwo+IC0JY3J0Y19zdGF0ZS0+bXN0X21h c3Rlcl90cmFuc2NvZGVyID0gSU5WQUxJRF9UUkFOU0NPREVSOwo+IC19Cj4gLQo+IC1zdGF0aWMg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2NydGNfc3RhdGVfYWxsb2Moc3RydWN0IGlu dGVsX2NydGMgKmNydGMpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlOwo+IC0KPiAtCWNydGNfc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqY3J0Y19zdGF0ZSksIEdG UF9LRVJORUwpOwo+IC0KPiAtCWlmIChjcnRjX3N0YXRlKQo+IC0JCWludGVsX2NydGNfc3RhdGVf cmVzZXQoY3J0Y19zdGF0ZSwgY3J0Yyk7Cj4gLQo+IC0JcmV0dXJuIGNydGNfc3RhdGU7Cj4gLX0K PiAtCj4gIC8qIFJldHVybnMgdGhlIGN1cnJlbnRseSBwcm9ncmFtbWVkIG1vZGUgb2YgdGhlIGdp dmVuIGVuY29kZXIuICovCj4gIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoKPiAgaW50ZWxfZW5j b2Rlcl9jdXJyZW50X21vZGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4gQEAgLTEx OTc2LDE0ICsxMTQ4Nyw2IEBAIGludGVsX2VuY29kZXJfY3VycmVudF9tb2RlKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyKQo+ICAJcmV0dXJuIG1vZGU7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2 b2lkIGludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiAtCj4g LQlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+IC0Ja2ZyZWUoaW50ZWxfY3J0Yyk7Cj4gLX0KPiAt Cj4gIC8qKgo+ICAgKiBpbnRlbF93bV9uZWVkX3VwZGF0ZSAtIENoZWNrIHdoZXRoZXIgd2F0ZXJt YXJrcyBuZWVkIHVwZGF0aW5nCj4gICAqIEBjdXI6IGN1cnJlbnQgcGxhbmUgc3RhdGUKPiBAQCAt MTUxODcsMTcgKzE0NjkwLDYgQEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfcHJlcGFyZV9jb21t aXQoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ ICAKPiAtdTMyIGludGVsX2NydGNfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7 Cj4gLQlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbZHJtX2Ny dGNfaW5kZXgoJmNydGMtPmJhc2UpXTsKPiAtCj4gLQlpZiAoIXZibGFuay0+bWF4X3ZibGFua19j b3VudCkKPiAtCQlyZXR1cm4gKHUzMilkcm1fY3J0Y19hY2N1cmF0ZV92YmxhbmtfY291bnQoJmNy dGMtPmJhc2UpOwo+IC0KPiAtCXJldHVybiBjcnRjLT5iYXNlLmZ1bmNzLT5nZXRfdmJsYW5rX2Nv dW50ZXIoJmNydGMtPmJhc2UpOwo+IC19Cj4gLQo+ICB2b2lkIGludGVsX2NydGNfYXJtX2ZpZm9f dW5kZXJydW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gIAkJCQkgIHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICB7Cj4gQEAgLTE2MjUwLDMzNiArMTU3NDIsNiBAQCB2 b2lkIGludGVsX3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gIAlrZnJl ZSh0b19pbnRlbF9wbGFuZShwbGFuZSkpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgYm9vbCBpOHh4X3Bs YW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPiAtCQkJ CQkgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQo+IC17Cj4gLQlzd2l0Y2ggKG1vZGlmaWVy KSB7Cj4gLQljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKPiAtCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQ6Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCXJldHVybiBmYWxzZTsK PiAtCX0KPiAtCj4gLQlzd2l0Y2ggKGZvcm1hdCkgewo+IC0JY2FzZSBEUk1fRk9STUFUX0M4Ogo+ IC0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToK PiAtCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAtCQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJN X0ZPUk1BVF9NT0RfTElORUFSIHx8Cj4gLQkJCW1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Y X1RJTEVEOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQl9Cj4gLX0KPiAtCj4g LXN0YXRpYyBib29sIGk5NjVfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9w bGFuZSAqX3BsYW5lLAo+IC0JCQkJCSAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCj4gLXsK PiAtCXN3aXRjaCAobW9kaWZpZXIpIHsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgo+ IC0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6 Cj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0JfQo+IC0KPiAtCXN3aXRjaCAoZm9ybWF0KSB7Cj4gLQlj YXNlIERSTV9GT1JNQVRfQzg6Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+IC0JY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4Ogo+IC0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+IC0JY2Fz ZSBEUk1fRk9STUFUX0FSR0I4ODg4Ogo+IC0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+IC0J Y2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAx MDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgo+IC0JY2FzZSBEUk1fRk9STUFU X0FCR1IyMTAxMDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Cj4gLQkJcmV0 dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAo+IC0JCQltb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKPiAtCWRlZmF1bHQ6Cj4gLQkJcmV0dXJuIGZhbHNl Owo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBp OTY1X3BsYW5lX2Z1bmNzID0gewo+IC0JLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVy X3VwZGF0ZV9wbGFuZSwKPiAtCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlz YWJsZV9wbGFuZSwKPiAtCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKPiAtCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAo+IC0JLmF0 b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKPiAtCS5mb3Jt YXRfbW9kX3N1cHBvcnRlZCA9IGk5NjVfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCj4gLX07 Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpOHh4X3BsYW5lX2Z1 bmNzID0gewo+IC0JLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFu ZSwKPiAtCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwK PiAtCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKPiAtCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAo+IC0JLmF0b21pY19kZXN0cm95 X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKPiAtCS5mb3JtYXRfbW9kX3N1cHBv cnRlZCA9IGk4eHhfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCj4gLX07Cj4gLQo+IC1zdGF0 aWMgYm9vbCBpOXh4X3BsYW5lX2hhc19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+IC0JCQkgICAgICAgZW51bSBpOXh4X3BsYW5lX2lkIGk5eHhfcGxhbmUpCj4gLXsKPiAt CWlmICghSEFTX0ZCQyhkZXZfcHJpdikpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCWlmIChJ U19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+IC0JCXJldHVy biBpOXh4X3BsYW5lID09IFBMQU5FX0E7IC8qIHRpZWQgdG8gcGlwZSBBICovCj4gLQllbHNlIGlm IChJU19JVllCUklER0UoZGV2X3ByaXYpKQo+IC0JCXJldHVybiBpOXh4X3BsYW5lID09IFBMQU5F X0EgfHwgaTl4eF9wbGFuZSA9PSBQTEFORV9CIHx8Cj4gLQkJCWk5eHhfcGxhbmUgPT0gUExBTkVf QzsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiAtCQlyZXR1cm4gaTl4 eF9wbGFuZSA9PSBQTEFORV9BIHx8IGk5eHhfcGxhbmUgPT0gUExBTkVfQjsKPiAtCWVsc2UKPiAt CQlyZXR1cm4gaTl4eF9wbGFuZSA9PSBQTEFORV9BOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0 IGludGVsX3BsYW5lICoKPiAtaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKPiAtewo+IC0Jc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZTsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgKnBsYW5l X2Z1bmNzOwo+IC0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7Cj4gLQljb25zdCB1 MzIgKmZvcm1hdHM7Cj4gLQlpbnQgbnVtX2Zvcm1hdHM7Cj4gLQlpbnQgcmV0LCB6cG9zOwo+IC0K PiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4gLQkJcmV0dXJuIHNrbF91bml2ZXJz YWxfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlLAo+IC0JCQkJCQkgIFBMQU5FX1BSSU1BUlkp Owo+IC0KPiAtCXBsYW5lID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKPiAtCWlmIChJU19FUlIocGxh bmUpKQo+IC0JCXJldHVybiBwbGFuZTsKPiAtCj4gLQlwbGFuZS0+cGlwZSA9IHBpcGU7Cj4gLQkv Kgo+IC0JICogT24gZ2VuMi8zIG9ubHkgcGxhbmUgQSBjYW4gZG8gRkJDLCBidXQgdGhlIHBhbmVs IGZpdHRlciBhbmQgTFZEUwo+IC0JICogcG9ydCBpcyBob29rZWQgdG8gcGlwZSBCLiBIZW5jZSB3 ZSB3YW50IHBsYW5lIEEgZmVlZGluZyBwaXBlIEIuCj4gLQkgKi8KPiAtCWlmIChIQVNfRkJDKGRl dl9wcml2KSAmJiBJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCAmJgo+IC0JICAgIElOVEVMX05VTV9Q SVBFUyhkZXZfcHJpdikgPT0gMikKPiAtCQlwbGFuZS0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhf cGxhbmVfaWQpICFwaXBlOwo+IC0JZWxzZQo+IC0JCXBsYW5lLT5pOXh4X3BsYW5lID0gKGVudW0g aTl4eF9wbGFuZV9pZCkgcGlwZTsKPiAtCXBsYW5lLT5pZCA9IFBMQU5FX1BSSU1BUlk7Cj4gLQlw bGFuZS0+ZnJvbnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRCVUZGRVIocGlwZSwgcGxhbmUtPmlk KTsKPiAtCj4gLQlwbGFuZS0+aGFzX2ZiYyA9IGk5eHhfcGxhbmVfaGFzX2ZiYyhkZXZfcHJpdiwg cGxhbmUtPmk5eHhfcGxhbmUpOwo+IC0JaWYgKHBsYW5lLT5oYXNfZmJjKSB7Cj4gLQkJc3RydWN0 IGludGVsX2ZiYyAqZmJjID0gJmRldl9wcml2LT5mYmM7Cj4gLQo+IC0JCWZiYy0+cG9zc2libGVf ZnJhbWVidWZmZXJfYml0cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0Owo+IC0JfQo+IC0KPiAt CWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkg ewo+IC0JCWZvcm1hdHMgPSB2bHZfcHJpbWFyeV9mb3JtYXRzOwo+IC0JCW51bV9mb3JtYXRzID0g QVJSQVlfU0laRSh2bHZfcHJpbWFyeV9mb3JtYXRzKTsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA0KSB7Cj4gLQkJLyoKPiAtCQkgKiBXYUZQMTZHYW1tYUVuYWJsaW5nOml2 Ygo+IC0JCSAqICJXb3JrYXJvdW5kIDogV2hlbiB1c2luZyB0aGUgNjQtYml0IGZvcm1hdCwgdGhl IHBsYW5lCj4gLQkJICogIG91dHB1dCBvbiBlYWNoIGNvbG9yIGNoYW5uZWwgaGFzIG9uZSBxdWFy dGVyIGFtcGxpdHVkZS4KPiAtCQkgKiAgSXQgY2FuIGJlIGJyb3VnaHQgdXAgdG8gZnVsbCBhbXBs aXR1ZGUgYnkgdXNpbmcgcGlwZQo+IC0JCSAqICBnYW1tYSBjb3JyZWN0aW9uIG9yIHBpcGUgY29s b3Igc3BhY2UgY29udmVyc2lvbiB0bwo+IC0JCSAqICBtdWx0aXBseSB0aGUgcGxhbmUgb3V0cHV0 IGJ5IGZvdXIuIgo+IC0JCSAqCj4gLQkJICogVGhlcmUgaXMgbm8gZGVkaWNhdGVkIHBsYW5lIGdh bW1hIGZvciB0aGUgcHJpbWFyeSBwbGFuZSwKPiAtCQkgKiBhbmQgdXNpbmcgdGhlIHBpcGUgZ2Ft bWEvY3NjIGNvdWxkIGNvbmZsaWN0IHdpdGggb3RoZXIKPiAtCQkgKiBwbGFuZXMsIHNvIHdlIGNo b29zZSBub3QgdG8gZXhwb3NlIGZwMTYgb24gSVZCIHByaW1hcnkKPiAtCQkgKiBwbGFuZXMuIEhT VyBwcmltYXJ5IHBsYW5lcyBubyBsb25nZXIgaGF2ZSB0aGlzIHByb2JsZW0uCj4gLQkJICovCj4g LQkJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpIHsKPiAtCQkJZm9ybWF0cyA9IGl2Yl9wcmlt YXJ5X2Zvcm1hdHM7Cj4gLQkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpdmJfcHJpbWFyeV9m b3JtYXRzKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlmb3JtYXRzID0gaTk2NV9wcmltYXJ5X2Zvcm1h dHM7Cj4gLQkJCW51bV9mb3JtYXRzID0gQVJSQVlfU0laRShpOTY1X3ByaW1hcnlfZm9ybWF0cyk7 Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCQlmb3JtYXRzID0gaTh4eF9wcmltYXJ5X2Zvcm1hdHM7 Cj4gLQkJbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGk4eHhfcHJpbWFyeV9mb3JtYXRzKTsKPiAt CX0KPiAtCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQo+IC0JCXBsYW5lX2Z1bmNz ID0gJmk5NjVfcGxhbmVfZnVuY3M7Cj4gLQllbHNlCj4gLQkJcGxhbmVfZnVuY3MgPSAmaTh4eF9w bGFuZV9mdW5jczsKPiAtCj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hF UlJZVklFVyhkZXZfcHJpdikpCj4gLQkJcGxhbmUtPm1pbl9jZGNsayA9IHZsdl9wbGFuZV9taW5f Y2RjbGs7Cj4gLQllbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwo ZGV2X3ByaXYpKQo+IC0JCXBsYW5lLT5taW5fY2RjbGsgPSBoc3dfcGxhbmVfbWluX2NkY2xrOwo+ IC0JZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKPiAtCQlwbGFuZS0+bWluX2NkY2xr ID0gaXZiX3BsYW5lX21pbl9jZGNsazsKPiAtCWVsc2UKPiAtCQlwbGFuZS0+bWluX2NkY2xrID0g aTl4eF9wbGFuZV9taW5fY2RjbGs7Cj4gLQo+IC0JcGxhbmUtPm1heF9zdHJpZGUgPSBpOXh4X3Bs YW5lX21heF9zdHJpZGU7Cj4gLQlwbGFuZS0+dXBkYXRlX3BsYW5lID0gaTl4eF91cGRhdGVfcGxh bmU7Cj4gLQlwbGFuZS0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9wbGFuZTsKPiAtCXBs YW5lLT5nZXRfaHdfc3RhdGUgPSBpOXh4X3BsYW5lX2dldF9od19zdGF0ZTsKPiAtCXBsYW5lLT5j aGVja19wbGFuZSA9IGk5eHhfcGxhbmVfY2hlY2s7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQo+IC0JCXJldCA9IGRybV91bml2ZXJzYWxf cGxhbmVfaW5pdCgmZGV2X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAo+IC0JCQkJCSAgICAgICAw LCBwbGFuZV9mdW5jcywKPiAtCQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsCj4gLQkJ CQkJICAgICAgIGk5eHhfZm9ybWF0X21vZGlmaWVycywKPiAtCQkJCQkgICAgICAgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSwKPiAtCQkJCQkgICAgICAgInByaW1hcnkgJWMiLCBwaXBlX25hbWUocGlw ZSkpOwo+IC0JZWxzZQo+IC0JCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgmZGV2X3By aXYtPmRybSwgJnBsYW5lLT5iYXNlLAo+IC0JCQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywKPiAt CQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsCj4gLQkJCQkJICAgICAgIGk5eHhfZm9y bWF0X21vZGlmaWVycywKPiAtCQkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwKPiAt CQkJCQkgICAgICAgInBsYW5lICVjIiwKPiAtCQkJCQkgICAgICAgcGxhbmVfbmFtZShwbGFuZS0+ aTl4eF9wbGFuZSkpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGZhaWw7Cj4gLQo+IC0JaWYgKElT X0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIHBpcGUgPT0gUElQRV9CKSB7Cj4gLQkJc3VwcG9ydGVk X3JvdGF0aW9ucyA9Cj4gLQkJCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4 MCB8Cj4gLQkJCURSTV9NT0RFX1JFRkxFQ1RfWDsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA0KSB7Cj4gLQkJc3VwcG9ydGVkX3JvdGF0aW9ucyA9Cj4gLQkJCURSTV9NT0RF X1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRFXzE4MDsKPiAtCX0gZWxzZSB7Cj4gLQkJc3VwcG9y dGVkX3JvdGF0aW9ucyA9IERSTV9NT0RFX1JPVEFURV8wOwo+IC0JfQo+IC0KPiAtCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDQpCj4gLQkJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9w ZXJ0eSgmcGxhbmUtPmJhc2UsCj4gLQkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wLAo+IC0JCQkJ CQkgICBzdXBwb3J0ZWRfcm90YXRpb25zKTsKPiAtCj4gLQl6cG9zID0gMDsKPiAtCWRybV9wbGFu ZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCB6cG9zKTsKPiAt Cj4gLQlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxw ZXJfZnVuY3MpOwo+IC0KPiAtCXJldHVybiBwbGFuZTsKPiAtCj4gLWZhaWw6Cj4gLQlpbnRlbF9w bGFuZV9mcmVlKHBsYW5lKTsKPiAtCj4gLQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IC19Cj4gLQo+ IC1zdGF0aWMgaW50IGludGVsX2NydGNfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gLXsKPiAtCWludGVsX2NydGNfZGVidWdmc19hZGQoY3J0Yyk7Cj4gLQlyZXR1cm4gMDsK PiAtfQo+IC0KPiAtI2RlZmluZSBJTlRFTF9DUlRDX0ZVTkNTIFwKPiAtCS5nYW1tYV9zZXQgPSBk cm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0LCBcCj4gLQkuc2V0X2NvbmZpZyA9IGRy bV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsIFwKPiAtCS5kZXN0cm95ID0gaW50ZWxfY3J0Y19k ZXN0cm95LCBcCj4gLQkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLCBc Cj4gLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRl LCBcCj4gLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUs IFwKPiAtCS5zZXRfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfc2V0X2NyY19zb3VyY2UsIFwKPiAt CS52ZXJpZnlfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfdmVyaWZ5X2NyY19zb3VyY2UsIFwKPiAt CS5nZXRfY3JjX3NvdXJjZXMgPSBpbnRlbF9jcnRjX2dldF9jcmNfc291cmNlcywgXAo+IC0JLmxh dGVfcmVnaXN0ZXIgPSBpbnRlbF9jcnRjX2xhdGVfcmVnaXN0ZXIKPiAtCj4gLXN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgYmR3X2NydGNfZnVuY3MgPSB7Cj4gLQlJTlRFTF9DUlRD X0ZVTkNTLAo+IC0KPiAtCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3Vu dGVyLAo+IC0JLmVuYWJsZV92YmxhbmsgPSBiZHdfZW5hYmxlX3ZibGFuaywKPiAtCS5kaXNhYmxl X3ZibGFuayA9IGJkd19kaXNhYmxlX3ZibGFuaywKPiAtCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9 IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGlsa19jcnRjX2Z1bmNzID0gewo+IC0JSU5URUxfQ1JU Q19GVU5DUywKPiAtCj4gLQkuZ2V0X3ZibGFua19jb3VudGVyID0gZzR4X2dldF92YmxhbmtfY291 bnRlciwKPiAtCS5lbmFibGVfdmJsYW5rID0gaWxrX2VuYWJsZV92YmxhbmssCj4gLQkuZGlzYWJs ZV92YmxhbmsgPSBpbGtfZGlzYWJsZV92YmxhbmssCj4gLQkuZ2V0X3ZibGFua190aW1lc3RhbXAg PSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAo+IC19Owo+IC0KPiAtc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBnNHhfY3J0Y19mdW5jcyA9IHsKPiAtCUlOVEVMX0NS VENfRlVOQ1MsCj4gLQo+IC0JLmdldF92YmxhbmtfY291bnRlciA9IGc0eF9nZXRfdmJsYW5rX2Nv dW50ZXIsCj4gLQkuZW5hYmxlX3ZibGFuayA9IGk5NjVfZW5hYmxlX3ZibGFuaywKPiAtCS5kaXNh YmxlX3ZibGFuayA9IGk5NjVfZGlzYWJsZV92YmxhbmssCj4gLQkuZ2V0X3ZibGFua190aW1lc3Rh bXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAo+IC19Owo+IC0KPiAtc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOTY1X2NydGNfZnVuY3MgPSB7Cj4gLQlJTlRF TF9DUlRDX0ZVTkNTLAo+IC0KPiAtCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92Ymxh bmtfY291bnRlciwKPiAtCS5lbmFibGVfdmJsYW5rID0gaTk2NV9lbmFibGVfdmJsYW5rLAo+IC0J LmRpc2FibGVfdmJsYW5rID0gaTk2NV9kaXNhYmxlX3ZibGFuaywKPiAtCS5nZXRfdmJsYW5rX3Rp bWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCj4gLX07Cj4gLQo+IC1z dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5MTVnbV9jcnRjX2Z1bmNzID0gewo+ IC0JSU5URUxfQ1JUQ19GVU5DUywKPiAtCj4gLQkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9n ZXRfdmJsYW5rX2NvdW50ZXIsCj4gLQkuZW5hYmxlX3ZibGFuayA9IGk5MTVnbV9lbmFibGVfdmJs YW5rLAo+IC0JLmRpc2FibGVfdmJsYW5rID0gaTkxNWdtX2Rpc2FibGVfdmJsYW5rLAo+IC0JLmdl dF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKPiAt fTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaTkxNV9jcnRjX2Z1 bmNzID0gewo+IC0JSU5URUxfQ1JUQ19GVU5DUywKPiAtCj4gLQkuZ2V0X3ZibGFua19jb3VudGVy ID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCj4gLQkuZW5hYmxlX3ZibGFuayA9IGk4eHhfZW5h YmxlX3ZibGFuaywKPiAtCS5kaXNhYmxlX3ZibGFuayA9IGk4eHhfZGlzYWJsZV92YmxhbmssCj4g LQkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1w LAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOHh4X2Ny dGNfZnVuY3MgPSB7Cj4gLQlJTlRFTF9DUlRDX0ZVTkNTLAo+IC0KPiAtCS8qIG5vIGh3IHZibGFu ayBjb3VudGVyICovCj4gLQkuZW5hYmxlX3ZibGFuayA9IGk4eHhfZW5hYmxlX3ZibGFuaywKPiAt CS5kaXNhYmxlX3ZibGFuayA9IGk4eHhfZGlzYWJsZV92YmxhbmssCj4gLQkuZ2V0X3ZibGFua190 aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAo+IC19Owo+IC0KPiAt c3RhdGljIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjX2FsbG9jKHZvaWQpCj4gLXsKPiAt CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0Jc3RydWN0IGludGVsX2Ny dGMgKmNydGM7Cj4gLQo+IC0JY3J0YyA9IGt6YWxsb2Moc2l6ZW9mKCpjcnRjKSwgR0ZQX0tFUk5F TCk7Cj4gLQlpZiAoIWNydGMpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gLQo+IC0J Y3J0Y19zdGF0ZSA9IGludGVsX2NydGNfc3RhdGVfYWxsb2MoY3J0Yyk7Cj4gLQlpZiAoIWNydGNf c3RhdGUpIHsKPiAtCQlrZnJlZShjcnRjKTsKPiAtCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiAtCX0KPiAtCj4gLQljcnRjLT5iYXNlLnN0YXRlID0gJmNydGNfc3RhdGUtPnVhcGk7Cj4gLQlj cnRjLT5jb25maWcgPSBjcnRjX3N0YXRlOwo+IC0KPiAtCXJldHVybiBjcnRjOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2ZyZWUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4g LXsKPiAtCWludGVsX2NydGNfZGVzdHJveV9zdGF0ZSgmY3J0Yy0+YmFzZSwgY3J0Yy0+YmFzZS5z dGF0ZSk7Cj4gLQlrZnJlZShjcnRjKTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgaW50ZWxfcGxh bmVfcG9zc2libGVfY3J0Y3NfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4gQEAgLTE2NTkyLDEwMCArMTU3 NTQsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbGFuZV9wb3NzaWJsZV9jcnRjc19pbml0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGlu dCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVt IHBpcGUgcGlwZSkKPiAtewo+IC0Jc3RydWN0IGludGVsX3BsYW5lICpwcmltYXJ5LCAqY3Vyc29y Owo+IC0JY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzICpmdW5jczsKPiAtCXN0cnVjdCBpbnRl bF9jcnRjICpjcnRjOwo+IC0JaW50IHNwcml0ZSwgcmV0Owo+IC0KPiAtCWNydGMgPSBpbnRlbF9j cnRjX2FsbG9jKCk7Cj4gLQlpZiAoSVNfRVJSKGNydGMpKQo+IC0JCXJldHVybiBQVFJfRVJSKGNy dGMpOwo+IC0KPiAtCWNydGMtPnBpcGUgPSBwaXBlOwo+IC0JY3J0Yy0+bnVtX3NjYWxlcnMgPSBS VU5USU1FX0lORk8oZGV2X3ByaXYpLT5udW1fc2NhbGVyc1twaXBlXTsKPiAtCj4gLQlwcmltYXJ5 ID0gaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUpOwo+IC0JaWYgKElT X0VSUihwcmltYXJ5KSkgewo+IC0JCXJldCA9IFBUUl9FUlIocHJpbWFyeSk7Cj4gLQkJZ290byBm YWlsOwo+IC0JfQo+IC0JY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKHByaW1hcnktPmlkKTsK PiAtCj4gLQlmb3JfZWFjaF9zcHJpdGUoZGV2X3ByaXYsIHBpcGUsIHNwcml0ZSkgewo+IC0JCXN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4gLQo+IC0JCXBsYW5lID0gaW50ZWxfc3ByaXRlX3Bs YW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKTsKPiAtCQlpZiAoSVNfRVJSKHBsYW5l KSkgewo+IC0JCQlyZXQgPSBQVFJfRVJSKHBsYW5lKTsKPiAtCQkJZ290byBmYWlsOwo+IC0JCX0K PiAtCQljcnRjLT5wbGFuZV9pZHNfbWFzayB8PSBCSVQocGxhbmUtPmlkKTsKPiAtCX0KPiAtCj4g LQljdXJzb3IgPSBpbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBlKTsKPiAt CWlmIChJU19FUlIoY3Vyc29yKSkgewo+IC0JCXJldCA9IFBUUl9FUlIoY3Vyc29yKTsKPiAtCQln b3RvIGZhaWw7Cj4gLQl9Cj4gLQljcnRjLT5wbGFuZV9pZHNfbWFzayB8PSBCSVQoY3Vyc29yLT5p ZCk7Cj4gLQo+IC0JaWYgKEhBU19HTUNIKGRldl9wcml2KSkgewo+IC0JCWlmIChJU19DSEVSUllW SUVXKGRldl9wcml2KSB8fAo+IC0JCSAgICBJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19H NFgoZGV2X3ByaXYpKQo+IC0JCQlmdW5jcyA9ICZnNHhfY3J0Y19mdW5jczsKPiAtCQllbHNlIGlm IChJU19HRU4oZGV2X3ByaXYsIDQpKQo+IC0JCQlmdW5jcyA9ICZpOTY1X2NydGNfZnVuY3M7Cj4g LQkJZWxzZSBpZiAoSVNfSTk0NUdNKGRldl9wcml2KSB8fCBJU19JOTE1R00oZGV2X3ByaXYpKQo+ IC0JCQlmdW5jcyA9ICZpOTE1Z21fY3J0Y19mdW5jczsKPiAtCQllbHNlIGlmIChJU19HRU4oZGV2 X3ByaXYsIDMpKQo+IC0JCQlmdW5jcyA9ICZpOTE1X2NydGNfZnVuY3M7Cj4gLQkJZWxzZQo+IC0J CQlmdW5jcyA9ICZpOHh4X2NydGNfZnVuY3M7Cj4gLQl9IGVsc2Ugewo+IC0JCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDgpCj4gLQkJCWZ1bmNzID0gJmJkd19jcnRjX2Z1bmNzOwo+IC0JCWVs c2UKPiAtCQkJZnVuY3MgPSAmaWxrX2NydGNfZnVuY3M7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gZHJt X2NydGNfaW5pdF93aXRoX3BsYW5lcygmZGV2X3ByaXYtPmRybSwgJmNydGMtPmJhc2UsCj4gLQkJ CQkJJnByaW1hcnktPmJhc2UsICZjdXJzb3ItPmJhc2UsCj4gLQkJCQkJZnVuY3MsICJwaXBlICVj IiwgcGlwZV9uYW1lKHBpcGUpKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBmYWlsOwo+IC0KPiAt CUJVR19PTihwaXBlID49IEFSUkFZX1NJWkUoZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5n KSB8fAo+IC0JICAgICAgIGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXSAhPSBO VUxMKTsKPiAtCWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXSA9IGNydGM7Cj4g LQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA5KSB7Cj4gLQkJZW51bSBpOXh4X3BsYW5l X2lkIGk5eHhfcGxhbmUgPSBwcmltYXJ5LT5pOXh4X3BsYW5lOwo+IC0KPiAtCQlCVUdfT04oaTl4 eF9wbGFuZSA+PSBBUlJBWV9TSVpFKGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmcpIHx8 Cj4gLQkJICAgICAgIGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbaTl4eF9wbGFuZV0g IT0gTlVMTCk7Cj4gLQkJZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGluZ1tpOXh4X3BsYW5l XSA9IGNydGM7Cj4gLQl9Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCj4g LQkJZHJtX2NydGNfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3Byb3BlcnR5KCZjcnRjLT5iYXNlLAo+ IC0JCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVSX0RFRkFVTFQpIHwKPiAtCQkJCQkJQklUKERS TV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSk7Cj4gLQo+IC0JaW50ZWxfY29sb3Jf aW5pdChjcnRjKTsKPiAtCj4gLQlpbnRlbF9jcnRjX2NyY19pbml0KGNydGMpOwo+IC0KPiAtCWRy bV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBkcm1fY3J0Y19pbmRleCgmY3J0Yy0+YmFzZSkgIT0g Y3J0Yy0+cGlwZSk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1mYWlsOgo+IC0JaW50ZWxfY3J0 Y19mcmVlKGNydGMpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAgCj4gIGludCBpbnRlbF9n ZXRfcGlwZV9mcm9tX2NydGNfaWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKPiAgCQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKCi0tIApKYW5pIE5pa3Vs YSwgSW50ZWwgT3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=