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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id E1FCEC433EF for ; Fri, 27 May 2022 09:43:04 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 90EB010EF58; Fri, 27 May 2022 09:43:03 +0000 (UTC) Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3E6FC10EF58 for ; Fri, 27 May 2022 09:43:02 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: martyn) with ESMTPSA id 5FE8D1F45C42 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1653644580; bh=VSlbzmXuYI9yvIBYTiYN/bCaKaZZDnnY0FZGUr8sDrg=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=emEa4cVUCOYLmR926+GlmajfbENawPSKGO8eU2gj5MDAWguLrGESdDhm2C2rBFwsI MlYE+PSWN2NZBmCoes4vU0uzxsc6SKTVnOZbZgTtwqZ2BB9NCfN2M1HziFY/RZLvI0 vB5aTY9F2opcxmt/EiGI970kQ2GXJ9ttnwt5Nxf9CZ0l0FjDIrImT/2qqx25ngZI9R mlg/wLE1ZkcPh/9w+O9SJM2UTFkaeou8dETTYbwB2q0u9r+KA4NZU4zzhKW/c4CuRy elqVSpwSxzhL3gzZma982FJwoNymSE6/TE1ohoCBIeTLbNri+Z/IA4Fgff38sZ/Zrt Hj7gc1i+ULHZw== Message-ID: Subject: Re: [PATCH v4 2/2] drm: lcdif: Add support for i.MX8MP LCDIF variant From: Martyn Welch To: Marek Vasut , dri-devel@lists.freedesktop.org Date: Fri, 27 May 2022 10:42:54 +0100 In-Reply-To: <20220519114849.69918-2-marex@denx.de> References: <20220519114849.69918-1-marex@denx.de> <20220519114849.69918-2-marex@denx.de> Organization: Collabora Ltd. Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.0-2 MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peng Fan , Alexander Stein , robert.foss@linaro.org, Laurent Pinchart , Sam Ravnborg , Robby Cai Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gVGh1LCAyMDIyLTA1LTE5IGF0IDEzOjQ4ICswMjAwLCBNYXJlayBWYXN1dCB3cm90ZToKPiBB ZGQgc3VwcG9ydCBmb3IgaS5NWDhNUCBMQ0RJRiB2YXJpYW50LiBUaGlzIGlzIGNhbGxlZCBMQ0RJ RnYzIGFuZCBpcwo+IGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20gdGhlIExDRElGdjMgZm91bmQg aW4gaS5NWDIzIGluIHRoYXQgaXQgaGFzCj4gYSBjb21wbGV0ZWx5IHNjcmFtYmxlZCByZWdpc3Rl ciBsYXlvdXQgY29tcGFyZWQgdG8gYWxsIHByZXZpb3VzIExDRElGCj4gdmFyaWFudHMuIFRoZSBu ZXcgTENESUZ2MyBhbHNvIHN1cHBvcnRzIDM2Yml0IGFkZHJlc3Mgc3BhY2UuCj4gCj4gQWRkIGEg c2VwYXJhdGUgZHJpdmVyIHdoaWNoIGlzIHJlYWxseSBhIGZvcmsgb2YgTVhTRkIgZHJpdmVyIHdp dGggdGhlCj4gaS5NWDhNUCBMQ0RJRiB2YXJpYW50IGhhbmRsaW5nIGZpbGxlZCBpbi4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KPiBDYzogQWxleGFuZGVy IFN0ZWluIDxhbGV4YW5kZXIuc3RlaW5AZXcudHEtZ3JvdXAuY29tPgo+IENjOiBMYXVyZW50IFBp bmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gQ2M6IEx1Y2FzIFN0 YWNoIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPgo+IENjOiBQZW5nIEZhbiA8cGVuZy5mYW5Abnhw LmNvbT4KPiBDYzogUm9iYnkgQ2FpIDxyb2JieS5jYWlAbnhwLmNvbT4KPiBDYzogU2FtIFJhdm5i b3JnIDxzYW1AcmF2bmJvcmcub3JnPgo+IENjOiBTdGVmYW4gQWduZXIgPHN0ZWZhbkBhZ25lci5j aD4KClRlc3RlZCBhbG9uZyB3aXRoIHJlbGF0ZWQgcGF0Y2hlcywgZHJpdmluZyBJbm5vTHV4IEcx NTBYTkUgTFZEUyBwYW5lbAphdHRhY2hlZCB0byBOWFAgaS5NWCA4TSBQbHVzIEVWSy4KClRyZWU6 IGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYS5jb20vbWFydHluL2xpbnV4Ly0vdHJlZS9pbXg4bXAK ClRlc3RlZC1ieTogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAY29sbGFib3JhLmNvbT4KCgo+ IC0tLQo+IFYyOiAtIERyb3AgdGhlIHBpdGNoIGNoZWNrIGZyb20gbGNkaWZfZmJfY3JlYXRlKCkK PiDCoMKgwqAgLSBEcm9wIGNvbm5lY3RvciBjYWNoaW5nCj4gwqDCoMKgIC0gV2FpdCBmb3Igc2hh ZG93IGxvYWQgYml0IHRvIGJlIGNsZWFyZWQgaW4gSVJRIGhhbmRsZXIKPiDCoMKgwqAgLSBNYWtl IGFsbCBjbG9jayBtYW5kYXRvcnkgYW5kIGdyYWIgdGhlbSBhbGwgYnkgbmFtZQo+IMKgwqDCoCAt IFdhaXQgZm9yIEVOIHRvIGJlIGNsZWFyZWQgaW4gbGNkaWZfZGlzYWJsZV9jb250cm9sbGVyCj4g wqDCoMKgIC0gUmVuYW1lIHRvIGlteC1sY2RpZgo+IMKgwqDCoCAtIE1vdmUgc2hhZG93IGxvYWQg dG8gYXRvbWljX2ZsdXNoCj4gVjM6IC0gSW52ZXJ0IERFIHBvbGFyaXR5IHRvIG1hdGNoIE1YOE1Q Uk0gZGF0YXNoZWV0Cj4gwqDCoMKgIC0gRW5hYmxlIENTQyBpbiBSR0IgdG8gWVVWIG1vZGUgZm9y IE1FRElBX0JVU19GTVRfVVlWWThfMVgxNgo+IFY0OiAtIERyb3AgbGNkaWZfb3ZlcmxheV9wbGFu ZV9mb3JtYXRzLCBpdCBpcyB1bnVzZWQKPiAtLS0KPiDCoGRyaXZlcnMvZ3B1L2RybS9teHNmYi9L Y29uZmlnwqDCoMKgwqDCoCB8wqAgMTYgKwo+IMKgZHJpdmVycy9ncHUvZHJtL214c2ZiL01ha2Vm aWxlwqDCoMKgwqAgfMKgwqAgMiArCj4gwqBkcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfZHJ2 LmPCoCB8IDM2MSArKysrKysrKysrKysrKysrKysrKysKPiDCoGRyaXZlcnMvZ3B1L2RybS9teHNm Yi9sY2RpZl9kcnYuaMKgIHzCoCA0NyArKysKPiDCoGRyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2Rp Zl9rbXMuY8KgIHwgNDk3Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoGRyaXZl cnMvZ3B1L2RybS9teHNmYi9sY2RpZl9yZWdzLmggfCAyNTcgKysrKysrKysrKysrKysrCj4gwqA2 IGZpbGVzIGNoYW5nZWQsIDExODAgaW5zZXJ0aW9ucygrKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9kcnYuYwo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9kcnYuaAo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9rbXMuYwo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9yZWdzLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL214c2ZiL0tjb25maWcKPiBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9LY29u ZmlnCj4gaW5kZXggOTg3MTcwZTE2ZWJkNi4uODczNTUxYjQ1NTJmNSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXhzZmIvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9teHNm Yi9LY29uZmlnCj4gQEAgLTE5LDMgKzE5LDE5IEBAIGNvbmZpZyBEUk1fTVhTRkIKPiDCoMKgwqDC oMKgwqDCoMKgwqAgaS5NWDI4LCBpLk1YNlNYLCBpLk1YNyBhbmQgaS5NWDhNKS4KPiDCoAo+IMKg wqDCoMKgwqDCoMKgwqDCoCBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQgbXhzZmIuCj4gKwo+ICtjb25maWcgRFJNX0lNWF9MQ0RJRgo+ICvCoMKgwqDCoMKgwqDCoHRy aXN0YXRlICJpLk1YIExDRElGdjMgTENEIGNvbnRyb2xsZXIiCj4gK8KgwqDCoMKgwqDCoMKgZGVw ZW5kcyBvbiBEUk0gJiYgT0YKPiArwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIENPTU1PTl9DTEsK PiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgRFJNX01YUwo+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBE Uk1fS01TX0hFTFBFUgo+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIK PiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgRFJNX1BBTkVMCj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0 IERSTV9QQU5FTF9CUklER0UKPiArwqDCoMKgwqDCoMKgwqBoZWxwCj4gK8KgwqDCoMKgwqDCoMKg wqAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIExDRElGdjMgTENEIGNvbnRyb2xs ZXIuCj4gK8KgwqDCoMKgwqDCoMKgwqAgVGhvc2UgZGV2aWNlcyBhcmUgZm91bmQgaW4gdmFyaW91 cyBpLk1YIFNvQyAoaS5NWDhNUCwKPiArwqDCoMKgwqDCoMKgwqDCoCBpLk1YUlQpLgo+ICsKPiAr wqDCoMKgwqDCoMKgwqDCoCBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQgaW14LWxjZGlmLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvTWFrZWZp bGUKPiBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9NYWtlZmlsZQo+IGluZGV4IDI2ZDE1Mzg5NmQ3 MjAuLjNmYTQ0MDU5YjlkODUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL214c2ZiL01h a2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL01ha2VmaWxlCj4gQEAgLTEsMyAr MSw1IEBACj4gwqAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiDCoG14 c2ZiLXkgOj0gbXhzZmJfZHJ2Lm8gbXhzZmJfa21zLm8KPiDCoG9iai0kKENPTkZJR19EUk1fTVhT RkIpwqDCoMKgwqDCoMKgwqDCoCs9IG14c2ZiLm8KPiAraW14LWxjZGlmLXkgOj0gbGNkaWZfZHJ2 Lm8gbGNkaWZfa21zLm8KPiArb2JqLSQoQ09ORklHX0RSTV9JTVhfTENESUYpICs9IGlteC1sY2Rp Zi5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9kcnYuYwo+IGIv ZHJpdmVycy9ncHUvZHJtL214c2ZiL2xjZGlmX2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAwLi4zZTI5YzhhNzY4NDg3Cj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9kcnYuYwo+IEBAIC0wLDAgKzEsMzYxIEBA Cj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCj4gKy8qCj4g KyAqIENvcHlyaWdodCAoQykgMjAyMiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KPiArICoK PiArICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvZ3B1L2RybS9teHNmYi9teHNmYioK PiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9k bWEtbWFwcGluZy5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2lvcG9sbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fY29ubmVjdG9yLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbW9kZV9j b25maWcuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX29mLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV92YmxhbmsuaD4KPiArCj4gKyNpbmNsdWRlICJsY2RpZl9kcnYuaCIKPiArI2lu Y2x1ZGUgImxjZGlmX3JlZ3MuaCIKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICoKPiArbGNkaWZfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBz dHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBj b25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBp bmZvID0gZHJtX2dldF9mb3JtYXRfaW5mbyhkZXYsIG1vZGVfY21kKTsKPiArwqDCoMKgwqDCoMKg wqBpZiAoIWluZm8pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJf UFRSKC1FSU5WQUwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZHJtX2dlbV9mYl9jcmVh dGUoZGV2LCBmaWxlX3ByaXYsIG1vZGVfY21kKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbGNkaWZfbW9kZV9jb25maWdfZnVuY3MgPQo+IHsK PiArwqDCoMKgwqDCoMKgwqAuZmJfY3JlYXRlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0g bGNkaWZfZmJfY3JlYXRlLAo+ICvCoMKgwqDCoMKgwqDCoC5hdG9taWNfY2hlY2vCoMKgwqDCoMKg wqDCoMKgwqDCoMKgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiArwqDCoMKgwqDCoMKgwqAu YXRvbWljX2NvbW1pdMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21t aXQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19oZWxw ZXJfZnVuY3MKPiBsY2RpZl9tb2RlX2NvbmZpZ19oZWxwZXJzID0gewo+ICvCoMKgwqDCoMKgwqDC oC5hdG9taWNfY29tbWl0X3RhaWwgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbF9ycG0s Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGxjZGlmX2F0dGFjaF9icmlkZ2Uoc3RydWN0IGxjZGlm X2RybV9wcml2YXRlICpsY2RpZikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSBsY2RpZi0+ZHJtOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2U7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7Cj4gK8Kg wqDCoMKgwqDCoMKgaW50IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX29mX2Zp bmRfcGFuZWxfb3JfYnJpZGdlKGRybS0+ZGV2LT5vZl9ub2RlLCAwLCAwLAo+ICZwYW5lbCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmJyaWRnZSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJl dCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKHBhbmVsKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyaWRnZSA9IGRldm1fZHJtX3BhbmVsX2JyaWRnZV9hZGRfdHlwZWQoZHJtLT5kZXYsCj4gcGFu ZWwsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgCj4gRFJNX01PREVfQ09OTkVDVE9SX0RQSSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChJU19FUlIoYnJpZGdlKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGJyaWRnZSk7Cj4gK8KgwqDCoMKgwqDC oMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWJyaWRnZSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IGRybV9icmlkZ2VfYXR0YWNoKCZsY2RpZi0+ZW5jb2RlciwgYnJpZGdlLCBOVUxMLCAwKTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZGV2X2Vycl9wcm9iZShkcm0tPmRldiwgcmV0LCAiRmFpbGVkIHRvIGF0dGFjaAo+IGJy aWRnZVxuIik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxjZGlmLT5icmlkZ2UgPSBicmlkZ2U7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJu X3QgbGNkaWZfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKPiArewo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBsY2RpZl9kcm1fcHJpdmF0ZSAqbGNkaWYgPSBkcm0tPmRldl9wcml2YXRlOwo+ICvCoMKg wqDCoMKgwqDCoHUzMiByZWc7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiArCj4gK8KgwqDC oMKgwqDCoMKgcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGxjZGlmLT5iYXNlICsgTENEQ19WOF9D VFJMREVTQ0wwXzUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZywgIShyZWcgJgo+IENUUkxERVNDTDBfNV9TSEFET1df TE9BRF9FTiksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDAsIDM2MDAwKTvCoMKgwqDCoMKgLyogV2FpdCB+MiBmcmFtZQo+ IHRpbWVzIG1heCAqLwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRybV9lcnJfcmF0ZWxpbWl0ZWQoZHJtLCAiU2hhZG93IGxvYWQgYml0 IG5vdAo+IGNsZWFyZWQhXG4iKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmVnID0gcmVhZGwobGNk aWYtPmJhc2UgKyBMQ0RDX1Y4X0lOVF9TVEFUVVNfRDApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBp ZiAocmVnICYgSU5UX1NUQVRVU19EMF9WU19CTEFOSykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmbGNkaWYtPmNydGMpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqB3cml0ZWwoSU5UX1NUQVRVU19EMF9WU19CTEFOSywgbGNkaWYtPmJhc2UgKwo+ IExDRENfVjhfSU5UX1NUQVRVU19EMCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBJUlFf SEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIGludCBsY2RpZl9sb2FkKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRybS0+ZGV2KTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgbGNkaWZfZHJtX3ByaXZhdGUgKmxjZGlmOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZXNv dXJjZSAqcmVzOwo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oGxjZGlmID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbGNkaWYpLCBHRlBfS0VS TkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWxjZGlmKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbGNkaWYtPmRy bSA9IGRybTsKPiArwqDCoMKgwqDCoMKgwqBkcm0tPmRldl9wcml2YXRlID0gbGNkaWY7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09V UkNFX01FTSwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgbGNkaWYtPmJhc2UgPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoZHJtLT5kZXYsIHJlcyk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihsY2Rp Zi0+YmFzZSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJS KGxjZGlmLT5iYXNlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbGNkaWYtPmNsayA9IGRldm1fY2xr X2dldChkcm0tPmRldiwgInBpeCIpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIobGNkaWYt PmNsaykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGxj ZGlmLT5jbGspOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBsY2RpZi0+Y2xrX2F4aSA9IGRldm1fY2xr X2dldChkcm0tPmRldiwgImF4aSIpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIobGNkaWYt PmNsa19heGkpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VS UihsY2RpZi0+Y2xrX2F4aSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxjZGlmLT5jbGtfZGlzcF9h eGkgPSBkZXZtX2Nsa19nZXQoZHJtLT5kZXYsICJkaXNwX2F4aSIpOwo+ICvCoMKgwqDCoMKgwqDC oGlmIChJU19FUlIobGNkaWYtPmNsa19kaXNwX2F4aSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGxjZGlmLT5jbGtfZGlzcF9heGkpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcm0pOwo+ICsKPiArwqDCoMKg wqDCoMKgwqByZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRybS0+ZGV2LCBETUFfQklU X01BU0soMzYpKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBNb2Rlc2V0 IGluaXQgKi8KPiArwqDCoMKgwqDCoMKgwqBkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ICsK PiArwqDCoMKgwqDCoMKgwqByZXQgPSBsY2RpZl9rbXNfaW5pdChsY2RpZik7Cj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIEtNUwo+IHBpcGVsaW5lXG4iKTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArwqDCoMKgwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRybV92YmxhbmtfaW5pdChkcm0sIGRy bS0+bW9kZV9jb25maWcubnVtX2NydGMpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZHJtLT5kZXYsICJGYWls ZWQgdG8gaW5pdGlhbGlzZSB2YmxhbmtcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKg LyogU3RhcnQgd2l0aCB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnJ1cHQgcmVwb3J0aW5nIGRpc2Fi bGVkLgo+ICovCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2NydGNfdmJsYW5rX29mZigmbGNkaWYtPmNy dGMpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBsY2RpZl9hdHRhY2hfYnJpZGdlKGxjZGlm KTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShkcm0tPmRldiwgcmV0LCAiQ2Fubm90IGNvbm5lY3QK PiBicmlkZ2VcbiIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkcm0tPm1vZGVfY29uZmlnLm1pbl93 aWR0aMKgwqDCoMKgwqDCoD0gTENESUZfTUlOX1hSRVM7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtLT5t b2RlX2NvbmZpZy5taW5faGVpZ2h0wqDCoMKgwqDCoD0gTENESUZfTUlOX1lSRVM7Cj4gK8KgwqDC oMKgwqDCoMKgZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGjCoMKgwqDCoMKgwqA9IExDRElGX01B WF9YUkVTOwo+ICvCoMKgwqDCoMKgwqDCoGRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodMKgwqDC oMKgwqA9IExDRElGX01BWF9ZUkVTOwo+ICvCoMKgwqDCoMKgwqDCoGRybS0+bW9kZV9jb25maWcu ZnVuY3PCoMKgwqDCoMKgwqDCoMKgwqDCoD0gJmxjZGlmX21vZGVfY29uZmlnX2Z1bmNzOwo+ICvC oMKgwqDCoMKgwqDCoGRybS0+bW9kZV9jb25maWcuaGVscGVyX3ByaXZhdGXCoD0gJmxjZGlmX21v ZGVfY29uZmlnX2hlbHBlcnM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9tb2RlX2NvbmZpZ19y ZXNldChkcm0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk ZXYsIDApOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICvCoMKgwqDCoMKgwqDCoGxjZGlmLT5pcnEgPSBy ZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHJlcXVlc3RfaXJxKGxjZGlmLT5pcnEsIGxj ZGlmX2lycV9oYW5kbGVyLCAwLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZHJtLT5kcml2ZXItPm5hbWUsIGRybSk7Cj4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycihk cm0tPmRldiwgIkZhaWxlZCB0byBpbnN0YWxsIElSUSBoYW5kbGVyXG4iKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoGRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHJtKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgcG1fcnVudGltZV9lbmFibGUoZHJtLT5kZXYpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbGNkaWZfdW5sb2FkKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGNkaWZfZHJtX3ByaXZh dGUgKmxjZGlmID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcG1fcnVu dGltZV9nZXRfc3luYyhkcm0tPmRldik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9jcnRjX3Zi bGFua19vZmYoJmxjZGlmLT5jcnRjKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2ttc19oZWxw ZXJfcG9sbF9maW5pKGRybSk7Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX21vZGVfY29uZmlnX2NsZWFu dXAoZHJtKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGltZV9wdXRfc3luYyhkcm0tPmRl dik7Cj4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGltZV9kaXNhYmxlKGRybS0+ZGV2KTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgZnJlZV9pcnEobGNkaWYtPmlycSwgZHJtLT5kZXYpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBkcm0tPmRldl9wcml2YXRlID0gTlVMTDsKPiArfQo+ICsKPiArREVGSU5FX0RS TV9HRU1fQ01BX0ZPUFMoZm9wcyk7Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kcml2 ZXIgbGNkaWZfZHJpdmVyID0gewo+ICvCoMKgwqDCoMKgwqDCoC5kcml2ZXJfZmVhdHVyZXPCoMKg wqDCoMKgwqDCoMKgPSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfAo+IERSSVZFUl9BVE9N SUMsCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0dFTV9DTUFfRFJJVkVSX09QUywKPiArwqDCoMKgwqDC oMKgwqAuZm9wc8KgwqDCoD0gJmZvcHMsCj4gK8KgwqDCoMKgwqDCoMKgLm5hbWXCoMKgwqA9ICJp bXgtbGNkaWYiLAo+ICvCoMKgwqDCoMKgwqDCoC5kZXNjwqDCoMKgPSAiaS5NWCBMQ0RJRiBDb250 cm9sbGVyIERSTSIsCj4gK8KgwqDCoMKgwqDCoMKgLmRhdGXCoMKgwqA9ICIyMDIyMDQxNyIsCj4g K8KgwqDCoMKgwqDCoMKgLm1ham9ywqDCoD0gMSwKPiArwqDCoMKgwqDCoMKgwqAubWlub3LCoMKg PSAwLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbGNkaWZf ZHRfaWRzW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14OG1w LWxjZGlmIiB9LAo+ICvCoMKgwqDCoMKgwqDCoHsgLyogc2VudGluZWwgKi8gfQo+ICt9Owo+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBsY2RpZl9kdF9pZHMpOwo+ICsKPiArc3RhdGljIGludCBs Y2RpZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXBkZXYtPmRldi5vZl9ub2RlKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsKPiArCj4gK8KgwqDCoMKgwqDCoMKg ZHJtID0gZHJtX2Rldl9hbGxvYygmbGNkaWZfZHJpdmVyLCAmcGRldi0+ZGV2KTsKPiArwqDCoMKg wqDCoMKgwqBpZiAoSVNfRVJSKGRybSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBQVFJfRVJSKGRybSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGxjZGlmX2xv YWQoZHJtKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBnb3RvIGVycl9mcmVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1f ZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJfdW5sb2FkOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cChkcm0sIDMyKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIDA7Cj4gKwo+ICtlcnJfdW5sb2FkOgo+ICvCoMKgwqDCoMKgwqDCoGxjZGlmX3Vu bG9hZChkcm0pOwo+ICtlcnJfZnJlZToKPiArwqDCoMKgwqDCoMKgwqBkcm1fZGV2X3B1dChkcm0p Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGxjZGlmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKPiArwqDC oMKgwqDCoMKgwqBkcm1fYXRvbWljX2hlbHBlcl9zaHV0ZG93bihkcm0pOwo+ICvCoMKgwqDCoMKg wqDCoGxjZGlmX3VubG9hZChkcm0pOwo+ICvCoMKgwqDCoMKgwqDCoGRybV9kZXZfcHV0KGRybSk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBs Y2RpZl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkcm1fYXRvbWljX2hlbHBlcl9zaHV0ZG93bihkcm0p Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxjZGlmX3JwbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2Ug KmRldikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGNkaWZfZHJtX3ByaXZh dGUgKmxjZGlmID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogVGhl c2UgY2xvY2sgc3VwcGx5IHRoZSBESVNQTEFZIENMT0NLIERvbWFpbiAqLwo+ICvCoMKgwqDCoMKg wqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShsY2RpZi0+Y2xrKTsKPiArwqDCoMKgwqDCoMKgwqAv KiBUaGVzZSBjbG9jayBzdXBwbHkgdGhlIFN5c3RlbSBCdXMsIEFYSSwgV3JpdGUgUGF0aCwgTEZJ Rk8KPiAqLwo+ICvCoMKgwqDCoMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShsY2RpZi0+Y2xr X2Rpc3BfYXhpKTsKPiArwqDCoMKgwqDCoMKgwqAvKiBUaGVzZSBjbG9jayBzdXBwbHkgdGhlIENv bnRyb2wgQnVzLCBBUEIsIEFQQkggQ3RybAo+IFJlZ2lzdGVycyAqLwo+ICvCoMKgwqDCoMKgwqDC oGNsa19kaXNhYmxlX3VucHJlcGFyZShsY2RpZi0+Y2xrX2F4aSk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxjZGlmX3JwbV9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsY2Rp Zl9kcm1fcHJpdmF0ZSAqbGNkaWYgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArwqDCoMKgwqDC oMKgwqAvKiBUaGVzZSBjbG9jayBzdXBwbHkgdGhlIENvbnRyb2wgQnVzLCBBUEIsIEFQQkggQ3Ry bAo+IFJlZ2lzdGVycyAqLwo+ICvCoMKgwqDCoMKgwqDCoGNsa19wcmVwYXJlX2VuYWJsZShsY2Rp Zi0+Y2xrX2F4aSk7Cj4gK8KgwqDCoMKgwqDCoMKgLyogVGhlc2UgY2xvY2sgc3VwcGx5IHRoZSBT eXN0ZW0gQnVzLCBBWEksIFdyaXRlIFBhdGgsIExGSUZPCj4gKi8KPiArwqDCoMKgwqDCoMKgwqBj bGtfcHJlcGFyZV9lbmFibGUobGNkaWYtPmNsa19kaXNwX2F4aSk7Cj4gK8KgwqDCoMKgwqDCoMKg LyogVGhlc2UgY2xvY2sgc3VwcGx5IHRoZSBESVNQTEFZIENMT0NLIERvbWFpbiAqLwo+ICvCoMKg wqDCoMKgwqDCoGNsa19wcmVwYXJlX2VuYWJsZShsY2RpZi0+Y2xrKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbGNkaWZfc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9zdXNwZW5kKGRy bSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGxjZGlmX3JwbV9z dXNwZW5kKGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbGNkaWZfcmVzdW1lKHN0cnVjdCBk ZXZpY2UgKmRldikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGV2aWNlICpkcm0g PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbGNkaWZfcnBtX3Jl c3VtZShkZXYpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZHJtX21vZGVfY29uZmlnX2hl bHBlcl9yZXN1bWUoZHJtKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1f b3BzIGxjZGlmX3BtX29wcyA9IHsKPiArwqDCoMKgwqDCoMKgwqAucnVudGltZV9zdXNwZW5kID0g bGNkaWZfcnBtX3N1c3BlbmQsCj4gK8KgwqDCoMKgwqDCoMKgLnJ1bnRpbWVfcmVzdW1lID0gbGNk aWZfcnBtX3Jlc3VtZSwKPiArwqDCoMKgwqDCoMKgwqBTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhs Y2RpZl9zdXNwZW5kLCBsY2RpZl9yZXN1bWUpCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBsY2RpZl9wbGF0Zm9ybV9kcml2ZXIgPSB7Cj4gK8KgwqDCoMKgwqDCoMKg LnByb2JlwqDCoMKgwqDCoMKgwqDCoMKgwqA9IGxjZGlmX3Byb2JlLAo+ICvCoMKgwqDCoMKgwqDC oC5yZW1vdmXCoMKgwqDCoMKgwqDCoMKgwqA9IGxjZGlmX3JlbW92ZSwKPiArwqDCoMKgwqDCoMKg wqAuc2h1dGRvd27CoMKgwqDCoMKgwqDCoD0gbGNkaWZfc2h1dGRvd24sCj4gK8KgwqDCoMKgwqDC oMKgLmRyaXZlcsKgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lwqDC oMKgwqDCoMKgwqDCoMKgwqDCoD0gImlteC1sY2RpZiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5vZl9tYXRjaF90YWJsZcKgPSBsY2RpZl9kdF9pZHMsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5wbcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSAmbGNkaWZf cG1fb3BzLAo+ICvCoMKgwqDCoMKgwqDCoH0sCj4gK307Cj4gKwo+ICtkcm1fbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihsY2RpZl9wbGF0Zm9ybV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigi TWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiRnJl ZXNjYWxlIExDRElGIERSTS9LTVMgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL214c2ZiL2xjZGlmX2Rydi5oCj4gYi9kcml2 ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfZHJ2LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMDAuLmQxMTlhYmZmNWNjZWEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL214c2ZiL2xjZGlmX2Rydi5oCj4gQEAgLTAsMCArMSw0NyBAQAo+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMjIgTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Cj4gKyAqCj4g KyAqIGkuTVg4TVAvaS5NWFJUIExDRElGdjMgTENEIGNvbnRyb2xsZXIgZHJpdmVyLgo+ICsgKi8K PiArCj4gKyNpZm5kZWYgX19MQ0RJRl9EUlZfSF9fCj4gKyNkZWZpbmUgX19MQ0RJRl9EUlZfSF9f Cj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rl dmljZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX3BsYW5lLmg+Cj4gKwo+ICtzdHJ1Y3QgY2xrOwo+ICsKPiArc3RydWN0IGxjZGlmX2RybV9w cml2YXRlIHsKPiArwqDCoMKgwqDCoMKgwqB2b2lkIF9faW9tZW3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgKmJhc2U7wqDCoC8qIHJlZ2lzdGVycyAqLwo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBjbGvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCpjbGs7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsa8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKmNsa19heGk7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGNsa8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKmNsa19kaXNw X2F4aTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlycTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9kZXZpY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqZHJtOwo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f cGxhbmXCoMKgwqDCoMKgwqDCoMKgcHJpbWFyeTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLyogaS5NWFJUIGRvZXMgc3VwcG9ydCBvdmVybGF5IHBsYW5lcywgYWRkIHRoZW0gaGVy ZS4KPiAqLwo+ICvCoMKgwqDCoMKgwqDCoH0gcGxhbmVzOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fY3J0Y8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjcnRjOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcm1fZW5jb2RlcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl bmNvZGVyOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fYnJpZGdlwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgKmJyaWRnZTsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGxjZGlmX2RybV9wcml2YXRlICoKPiArdG9fbGNkaWZfZHJtX3ByaXZhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRybSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkcm0tPmRldl9wcml2YXRl Owo+ICt9Cj4gKwo+ICt2b2lkIGxjZGlmX2VuYWJsZV9heGlfY2xrKHN0cnVjdCBsY2RpZl9kcm1f cHJpdmF0ZSAqbGNkaWYpOwo+ICt2b2lkIGxjZGlmX2Rpc2FibGVfYXhpX2NsayhzdHJ1Y3QgbGNk aWZfZHJtX3ByaXZhdGUgKmxjZGlmKTsKPiArCj4gK2ludCBsY2RpZl9rbXNfaW5pdChzdHJ1Y3Qg bGNkaWZfZHJtX3ByaXZhdGUgKmxjZGlmKTsKPiArCj4gKyNlbmRpZiAvKiBfX0xDRElGX0RSVl9I X18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL214c2ZiL2xjZGlmX2ttcy5jCj4g Yi9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfa21zLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjNkNzNhZjlmMjBmODMKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL2xjZGlmX2ttcy5jCj4gQEAgLTAsMCArMSw0OTcg QEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKPiArLyoK PiArICogQ29weXJpZ2h0IChDKSAyMDIyIE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgo+ICsg Kgo+ICsgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9ncHUvZHJtL214c2ZiL214c2Zi Kgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2lvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Bt X3J1bnRpbWUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Cj4gKwo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0 Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Cj4gKyNpbmNs dWRlIDxkcm0vZHJtX2dlbV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dl bV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV92YmxhbmsuaD4K PiArCj4gKyNpbmNsdWRlICJsY2RpZl9kcnYuaCIKPiArI2luY2x1ZGUgImxjZGlmX3JlZ3MuaCIK PiArCj4gKy8qIDEgc2Vjb25kIGRlbGF5IHNob3VsZCBiZSBwbGVudHkgb2YgdGltZSBmb3IgYmxv Y2sgcmVzZXQgKi8KPiArI2RlZmluZSBSRVNFVF9USU1FT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqAx MDAwMDAwCj4gKwo+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0tLS0tLS0tLS0tLQo+ICsgKiBDUlRDCj4gKyAq Lwo+ICtzdGF0aWMgdm9pZCBsY2RpZl9zZXRfZm9ybWF0cyhzdHJ1Y3QgbGNkaWZfZHJtX3ByaXZh dGUgKmxjZGlmLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb25zdCB1MzIgYnVzX2Zvcm1hdCkKPiArewo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBsY2RpZi0+ZHJtOwo+ICvCoMKgwqDCoMKgwqDCoGNv bnN0IHUzMiBmb3JtYXQgPSBsY2RpZi0+Y3J0Yy5wcmltYXJ5LT5zdGF0ZS0+ZmItPmZvcm1hdC0K PiA+Zm9ybWF0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1NDMF9DVFJMX0JZUEFTUywg bGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0NTQzBfQ1RSTCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHN3 aXRjaCAoYnVzX2Zvcm1hdCkgewo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUVESUFfQlVTX0ZNVF9S R0I1NjVfMVgxNjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd3JpdGVsKERJU1Bf UEFSQV9MSU5FX1BBVFRFUk5fUkdCNTY1LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0RJU1BfUEFSQSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUVE SUFfQlVTX0ZNVF9SR0I4ODhfMVgyNDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg d3JpdGVsKERJU1BfUEFSQV9MSU5FX1BBVFRFUk5fUkdCODg4LAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0RJU1BfUEFS QSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKg wqDCoGNhc2UgTUVESUFfQlVTX0ZNVF9VWVZZOF8xWDE2Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB3cml0ZWwoRElTUF9QQVJBX0xJTkVfUEFUVEVSTl9VWVZZX0gsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsY2RpZi0+YmFzZSArIExDRENf VjhfRElTUF9QQVJBKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIENT QzogQlQuNjAxIEZ1bGwgUmFuZ2UgUkdCIHRvIFlDYkNyIGNvZWZmaWNpZW50cy4KPiAqLwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1NDMF9DT0VGMF9BMigweDA5Nikg fCBDU0MwX0NPRUYwX0ExKDB4MDRjKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxjZGlmLT5iYXNlICsgTENEQ19WOF9DU0MwX0NPRUYwKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd3JpdGVsKENTQzBfQ09FRjFfQjEoMHg3ZDUpIHwgQ1ND MF9DT0VGMV9BMygweDAxZCksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBsY2RpZi0+YmFzZSArIExDRENfVjhfQ1NDMF9DT0VGMSk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlbChDU0MwX0NPRUYyX0IzKDB4MDgwKSB8IENTQzBfQ09F RjJfQjIoMHg3YWMpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0NTQzBfQ09FRjIpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1NDMF9DT0VGM19DMigweDc5NSkgfCBDU0MwX0NPRUYzX0Mx KDB4MDgwKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxj ZGlmLT5iYXNlICsgTENEQ19WOF9DU0MwX0NPRUYzKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgd3JpdGVsKENTQzBfQ09FRjRfRDEoMHgwMDApIHwgQ1NDMF9DT0VGNF9DMygweDdl YyksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsY2RpZi0+ YmFzZSArIExDRENfVjhfQ1NDMF9DT0VGNCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHdyaXRlbChDU0MwX0NPRUY1X0QzKDB4MDgwKSB8IENTQzBfQ09FRjVfRDIoMHgwODApLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNkaWYtPmJhc2Ug KyBMQ0RDX1Y4X0NTQzBfQ09FRjUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgd3JpdGVsKENTQzBfQ1RSTF9DU0NfTU9ERV9SR0IyWUNiQ3IsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsY2RpZi0+YmFzZSArIExDRENfVjhfQ1NDMF9D VFJMKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKg wqDCoMKgwqDCoGRlZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9l cnIoZHJtLT5kZXYsICJVbmtub3duIG1lZGlhIGJ1cyBmb3JtYXQgMHgleFxuIiwKPiBidXNfZm9y bWF0KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGZvcm1hdCkgewo+ICvCoMKgwqDC oMKgwqDCoGNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHdyaXRlbChDVFJMREVTQ0wwXzVfQlBQXzE2X1JHQjU2NSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxjZGlmLT5iYXNlICsgTENEQ19WOF9DVFJM REVTQ0wwXzUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDC oMKgwqDCoMKgwqBjYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB3cml0ZWwoQ1RSTERFU0NMMF81X0JQUF8yNF9SR0I4ODgsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsY2RpZi0+YmFzZSArIExDRENfVjhf Q1RSTERFU0NMMF81KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4g K8KgwqDCoMKgwqDCoMKgY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1Ogo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1RSTERFU0NMMF81X0JQUF8xNl9BUkdCMTU1NSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxjZGlmLT5iYXNlICsg TENEQ19WOF9DVFJMREVTQ0wwXzUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi cmVhazsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIERSTV9GT1JNQVRfWFJHQjQ0NDQ6Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlbChDVFJMREVTQ0wwXzVfQlBQXzE2X0FSR0I0 NDQ0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNkaWYt PmJhc2UgKyBMQ0RDX1Y4X0NUUkxERVNDTDBfNSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd3JpdGVsKENUUkxERVNDTDBfNV9CUFBf MzJfQUJHUjg4ODgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBsY2RpZi0+YmFzZSArIExDRENfVjhfQ1RSTERFU0NMMF81KTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBEUk1fRk9STUFUX1hS R0I4ODg4Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1RSTERFU0NM MF81X0JQUF8zMl9BUkdCODg4OCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGxjZGlmLT5iYXNlICsgTENEQ19WOF9DVFJMREVTQ0wwXzUpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRybS0+ZGV2LCAiVW5rbm93 biBwaXhlbCBmb3JtYXQgMHgleFxuIiwKPiBmb3JtYXQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGxjZGlmX3NldF9tb2RlKHN0cnVjdCBsY2RpZl9kcm1fcHJpdmF0ZSAqbGNkaWYsIHUzMgo+ IGJ1c19mbGFncykKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptID0gJmxjZGlmLT5jcnRjLnN0YXRlLQo+ID5hZGp1c3RlZF9tb2RlOwo+ICvCoMKgwqDCoMKg wqDCoHUzMiBjdHJsID0gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKG0tPmZsYWdzICYgRFJN X01PREVfRkxBR19QSFNZTkMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0cmwg fD0gQ1RSTF9JTlZfSFM7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKG0tPmZsYWdzICYgRFJNX01PREVf RkxBR19QVlNZTkMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0cmwgfD0gQ1RS TF9JTlZfVlM7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGJ1c19mbGFncyAmIERSTV9CVVNfRkxBR19E RV9MT1cpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0cmwgfD0gQ1RSTF9JTlZf REU7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGJ1c19mbGFncyAmIERSTV9CVVNfRkxBR19QSVhEQVRB X0RSSVZFX05FR0VER0UpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGN0cmwgfD0g Q1RSTF9JTlZfUFhDSzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgd3JpdGVsKGN0cmwsIGxjZGlmLT5i YXNlICsgTENEQ19WOF9DVFJMKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgd3JpdGVsKERJU1BfU0la RV9ERUxUQV9ZKG0tPmNydGNfdmRpc3BsYXkpIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgRElTUF9TSVpFX0RFTFRBX1gobS0+Y3J0Y19oZGlzcGxheSksCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxjZGlmLT5iYXNlICsgTENEQ19WOF9ESVNQX1NJWkUpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqB3cml0ZWwoSFNZTl9QQVJBX0JQX0gobS0+aHRvdGFsIC0gbS0+aHN5bmNfZW5k KSB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhTWU5fUEFSQV9GUF9IKG0tPmhzeW5j X3N0YXJ0IC0gbS0+aGRpc3BsYXkpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsY2Rp Zi0+YmFzZSArIExDRENfVjhfSFNZTl9QQVJBKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgd3JpdGVs KFZTWU5fUEFSQV9CUF9WKG0tPnZ0b3RhbCAtIG0tPnZzeW5jX2VuZCkgfAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBWU1lOX1BBUkFfRlBfVihtLT52c3luY19zdGFydCAtIG0tPnZkaXNw bGF5KSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4 X1ZTWU5fUEFSQSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbChWU1lOX0hTWU5fV0lEVEhf UFdfVihtLT52c3luY19lbmQgLSBtLT52c3luY19zdGFydCkgfAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBWU1lOX0hTWU5fV0lEVEhfUFdfSChtLT5oc3luY19lbmQgLSBtLT5oc3luY19z dGFydCksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxjZGlmLT5iYXNlICsgTENEQ19W OF9WU1lOX0hTWU5fV0lEVEgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1RSTERFU0NM MF8xX0hFSUdIVChtLT5jcnRjX3ZkaXNwbGF5KSB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIENUUkxERVNDTDBfMV9XSURUSChtLT5jcnRjX2hkaXNwbGF5KSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0NUUkxERVNDTDBfMSk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHdyaXRlbChDVFJMREVTQ0wwXzNfUElUQ0gobGNkaWYtPmNydGMucHJp bWFyeS0+c3RhdGUtPmZiLQo+ID5waXRjaGVzWzBdKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0NUUkxERVNDTDBfMyk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGxjZGlmX2VuYWJsZV9jb250cm9sbGVyKHN0cnVjdCBsY2RpZl9kcm1fcHJpdmF0 ZSAqbGNkaWYpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByZWcgPSByZWFkbChsY2RpZi0+YmFzZSArIExDRENfVjhfRElTUF9QQVJBKTsKPiArwqDC oMKgwqDCoMKgwqByZWcgfD0gRElTUF9QQVJBX0RJU1BfT047Cj4gK8KgwqDCoMKgwqDCoMKgd3Jp dGVsKHJlZywgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0RJU1BfUEFSQSk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJlZyA9IHJlYWRsKGxjZGlmLT5iYXNlICsgTENEQ19WOF9DVFJMREVTQ0wwXzUpOwo+ ICvCoMKgwqDCoMKgwqDCoHJlZyB8PSBDVFJMREVTQ0wwXzVfRU47Cj4gK8KgwqDCoMKgwqDCoMKg d3JpdGVsKHJlZywgbGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0NUUkxERVNDTDBfNSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGxjZGlmX2Rpc2FibGVfY29udHJvbGxlcihzdHJ1Y3QgbGNkaWZfZHJt X3ByaXZhdGUKPiAqbGNkaWYpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnOwo+ICvCoMKg wqDCoMKgwqDCoGludCByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJlZyA9IHJlYWRsKGxjZGlm LT5iYXNlICsgTENEQ19WOF9DVFJMREVTQ0wwXzUpOwo+ICvCoMKgwqDCoMKgwqDCoHJlZyAmPSB+ Q1RSTERFU0NMMF81X0VOOwo+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbChyZWcsIGxjZGlmLT5iYXNl ICsgTENEQ19WOF9DVFJMREVTQ0wwXzUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSByZWFk bF9wb2xsX3RpbWVvdXQobGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0NUUkxERVNDTDBfNSwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmVnLCAhKHJlZyAmIENUUkxERVNDTDBfNV9FTiksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsIDM2MDAwKTvCoMKg wqDCoMKgLyogV2FpdCB+MiBmcmFtZQo+IHRpbWVzIG1heCAqLwo+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9lcnIobGNkaWYtPmRy bSwgIkZhaWxlZCB0byBkaXNhYmxlCj4gY29udHJvbGxlciFcbiIpOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByZWcgPSByZWFkbChsY2RpZi0+YmFzZSArIExDRENfVjhfRElTUF9QQVJBKTsKPiArwqDC oMKgwqDCoMKgwqByZWcgJj0gfkRJU1BfUEFSQV9ESVNQX09OOwo+ICvCoMKgwqDCoMKgwqDCoHdy aXRlbChyZWcsIGxjZGlmLT5iYXNlICsgTENEQ19WOF9ESVNQX1BBUkEpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGxjZGlmX3Jlc2V0X2Jsb2NrKHN0cnVjdCBsY2RpZl9kcm1fcHJpdmF0ZSAqbGNk aWYpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnOwo+ICvCoMKgwqDCoMKgwqDCoGludCBy ZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbChDVFJMX1NXX1JFU0VULCBsY2RpZi0+YmFz ZSArIExDRENfVjhfQ1RSTCArIFJFR19TRVQpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBy ZWFkbF9wb2xsX3RpbWVvdXQobGNkaWYtPmJhc2UgKyBMQ0RDX1Y4X0NUUkwsIHJlZywKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKHJlZyAmIENUUkxfU1dfUkVTRVQpLCAwLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRVNFVF9USU1FT1VUKTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1RSTF9TV19SRVNFVCwgbGNk aWYtPmJhc2UgKyBMQ0RDX1Y4X0NUUkwgKyBSRUdfQ0xSKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIHJlYWRsX3BvbGxfdGltZW91dChsY2RpZi0+YmFzZSArIExDRENfVjhfQ1RSTCwgcmVn LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICEocmVnICYgQ1RSTF9TV19SRVNFVCksIDAsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVTRVRf VElNRU9VVCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxjZGlmX2NydGNfbW9kZV9zZXRfbm9m YihzdHJ1Y3QgbGNkaWZfZHJtX3ByaXZhdGUKPiAqbGNkaWYsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGRybV9icmlkZ2Vfc3RhdGUKPiAqYnJpZGdlX3N0YXRlLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNv bnN0IHUzMiBidXNfZm9ybWF0KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9kZXZp Y2UgKmRybSA9IGxjZGlmLT5jcnRjLmRldjsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbSA9ICZsY2RpZi0+Y3J0Yy5zdGF0ZS0KPiA+YWRqdXN0ZWRfbW9kZTsKPiAr wqDCoMKgwqDCoMKgwqB1MzIgYnVzX2ZsYWdzID0gMDsKPiArwqDCoMKgwqDCoMKgwqBpbnQgZXJy Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAobGNkaWYtPmJyaWRnZSAmJiBsY2RpZi0+YnJpZGdl LT50aW1pbmdzKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBidXNfZmxhZ3MgPSBs Y2RpZi0+YnJpZGdlLT50aW1pbmdzLT5pbnB1dF9idXNfZmxhZ3M7Cj4gK8KgwqDCoMKgwqDCoMKg ZWxzZSBpZiAoYnJpZGdlX3N0YXRlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi dXNfZmxhZ3MgPSBicmlkZ2Vfc3RhdGUtPmlucHV0X2J1c19jZmcuZmxhZ3M7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRybS0+ZGV2LCAiUGl4ZWwgY2xvY2s6ICVk a0h6IChhY3R1YWw6Cj4gJWRrSHopXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbS0+Y3J0Y19jbG9jaywKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChpbnQpKGNsa19nZXRf cmF0ZShsY2RpZi0+Y2xrKSAvIDEwMDApKTsKPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVH X0RSSVZFUihkcm0tPmRldiwgIkNvbm5lY3RvciBidXNfZmxhZ3M6Cj4gMHglMDhYXG4iLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVz X2ZsYWdzKTsKPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkcm0tPmRldiwg Ik1vZGUgZmxhZ3M6IDB4JTA4WFxuIiwgbS0KPiA+ZmxhZ3MpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqAvKiBNYW5kYXRvcnkgZUxDRElGIHJlc2V0IGFzIHBlciB0aGUgUmVmZXJlbmNlIE1hbnVhbCAq Lwo+ICvCoMKgwqDCoMKgwqDCoGVyciA9IGxjZGlmX3Jlc2V0X2Jsb2NrKGxjZGlmKTsKPiArwqDC oMKgwqDCoMKgwqBpZiAoZXJyKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxjZGlmX3NldF9mb3JtYXRzKGxjZGlmLCBidXNfZm9y bWF0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbGNkaWZfc2V0X21vZGUobGNkaWYsIGJ1c19mbGFn cyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbGNkaWZfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlID0KPiBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoAo+IMKgwqDCoMKgIGNydGMpOwo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgaGFz X3ByaW1hcnkgPSBjcnRjX3N0YXRlLT5wbGFuZV9tYXNrICYKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3BsYW5lX21hc2soY3J0Yy0+cHJp bWFyeSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIFRoZSBwcmltYXJ5IHBsYW5lIGhhcyB0byBi ZSBlbmFibGVkIHdoZW4gdGhlIENSVEMgaXMKPiBhY3RpdmUuICovCj4gK8KgwqDCoMKgwqDCoMKg aWYgKGNydGNfc3RhdGUtPmFjdGl2ZSAmJiAhaGFzX3ByaW1hcnkpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfcGxhbmVzKHN0YXRlLCBjcnRjKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgbGNkaWZfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpj cnRjLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gK3sK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGNkaWZfZHJtX3ByaXZhdGUgKmxjZGlmID0gdG9fbGNk aWZfZHJtX3ByaXZhdGUoY3J0Yy0KPiA+ZGV2KTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKPiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqByZWcgPSByZWFkbChsY2RpZi0+YmFzZSArIExDRENfVjhfQ1RS TERFU0NMMF81KTsKPiArwqDCoMKgwqDCoMKgwqByZWcgfD0gQ1RSTERFU0NMMF81X1NIQURPV19M T0FEX0VOOwo+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbChyZWcsIGxjZGlmLT5iYXNlICsgTENEQ19W OF9DVFJMREVTQ0wwXzUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBldmVudCA9IGNydGMtPnN0YXRl LT5ldmVudDsKPiArwqDCoMKgwqDCoMKgwqBjcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBpZiAoIWV2ZW50KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHNwaW5fbG9ja19pcnEoJmNydGMtPmRl di0+ZXZlbnRfbG9jayk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRybV9jcnRjX3ZibGFua19nZXQo Y3J0YykgPT0gMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2NydGNfYXJt X3ZibGFua19ldmVudChjcnRjLCBldmVudCk7Cj4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRj LCBldmVudCk7Cj4gK8KgwqDCoMKgwqDCoMKgc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2 ZW50X2xvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBsY2RpZl9jcnRjX2F0b21pY19lbmFi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsY2RpZl9kcm1f cHJpdmF0ZSAqbGNkaWYgPSB0b19sY2RpZl9kcm1fcHJpdmF0ZShjcnRjLQo+ID5kZXYpOwo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19wc3RhdGUgPQo+IGRybV9h dG9taWNfZ2V0X25ld19wbGFuZV9zdGF0ZShzdGF0ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oAo+IMKgwqDCoMKgwqDCoCBjcnRjLT5wcmltYXJ5KTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbSA9ICZsY2RpZi0+Y3J0Yy5zdGF0ZS0KPiA+YWRqdXN0ZWRfbW9k ZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqYnJpZGdlX3N0YXRl ID0gTlVMTDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbGNkaWYt PmRybTsKPiArwqDCoMKgwqDCoMKgwqB1MzIgYnVzX2Zvcm1hdCA9IDA7Cj4gK8KgwqDCoMKgwqDC oMKgZG1hX2FkZHJfdCBwYWRkcjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogSWYgdGhlcmUgaXMg YSBicmlkZ2UgYXR0YWNoZWQgdG8gdGhlIExDRElGLCB1c2UgaXRzIGJ1cwo+IGZvcm1hdCAqLwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChsY2RpZi0+YnJpZGdlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGJyaWRnZV9zdGF0ZSA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fYXRvbWljX2dldF9uZXdfYnJpZGdlX3N0YXRlKHN0YXRl LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGxjZGlmLQo+ID5icmlkZ2UpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo IWJyaWRnZV9zdGF0ZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJ1c19mb3JtYXQgPSBNRURJQV9CVVNfRk1UX0ZJWEVEOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBidXNfZm9ybWF0ID0gYnJpZGdlX3N0YXRlLQo+ID5pbnB1dF9idXNfY2Zn LmZvcm1hdDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChidXNfZm9y bWF0ID09IE1FRElBX0JVU19GTVRfRklYRUQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl93YXJuX29uY2UoZHJtLT5kZXYsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAiQnJpZGdlIGRvZXMgbm90IHByb3ZpZGUgYnVzCj4gZm9ybWF0LCBhc3N1bWluZyBN RURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0LlxuIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlBsZWFzZSBm aXggYnJpZGdlIGRyaXZlciBieQo+IGhhbmRsaW5nIGF0b21pY19nZXRfaW5wdXRfYnVzX2ZtdHMu XG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJ1 c19mb3JtYXQgPSBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0Owo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAv KiBJZiBhbGwgZWxzZSBmYWlscywgZGVmYXVsdCB0byBSR0I4ODhfMVgyNCAqLwo+ICvCoMKgwqDC oMKgwqDCoGlmICghYnVzX2Zvcm1hdCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg YnVzX2Zvcm1hdCA9IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQ7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGNsa19zZXRfcmF0ZShsY2RpZi0+Y2xrLCBtLT5jcnRjX2Nsb2NrICogMTAwMCk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHBtX3J1bnRpbWVfZ2V0X3N5bmMoZHJtLT5kZXYpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBsY2RpZl9jcnRjX21vZGVfc2V0X25vZmIobGNkaWYsIGJyaWRnZV9zdGF0ZSwg YnVzX2Zvcm1hdCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIFdyaXRlIGN1cl9idWYgYXMgd2Vs bCB0byBhdm9pZCBhbiBpbml0aWFsIGNvcnJ1cHQgZnJhbWUgKi8KPiArwqDCoMKgwqDCoMKgwqBw YWRkciA9IGRybV9mYl9jbWFfZ2V0X2dlbV9hZGRyKG5ld19wc3RhdGUtPmZiLCBuZXdfcHN0YXRl LAo+IDApOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwYWRkcikgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB3cml0ZWwobG93ZXJfMzJfYml0cyhwYWRkciksCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsY2RpZi0+YmFzZSArIExDRENfVjhfQ1RS TERFU0NMX0xPVzBfNCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlbChD VFJMREVTQ0xfSElHSDBfNF9BRERSX0hJR0godXBwZXJfMzJfYml0cyhwYWRkCj4gcikpLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNkaWYtPmJhc2UgKyBM Q0RDX1Y4X0NUUkxERVNDTF9ISUdIMF80KTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKg wqDCoMKgbGNkaWZfZW5hYmxlX2NvbnRyb2xsZXIobGNkaWYpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxjZGlm X2NydGNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGxjZGlmX2RybV9wcml2YXRlICpsY2RpZiA9IHRvX2xjZGlmX2RybV9wcml2YXRl KGNydGMtCj4gPmRldik7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IGxjZGlmLT5kcm07Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19l dmVudCAqZXZlbnQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9jcnRjX3ZibGFua19vZmYoY3J0 Yyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxjZGlmX2Rpc2FibGVfY29udHJvbGxlcihsY2RpZik7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHNwaW5fbG9ja19pcnEoJmRybS0+ZXZlbnRfbG9jayk7Cj4g K8KgwqDCoMKgwqDCoMKgZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKGV2ZW50KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNydGMtPnN0 YXRlLT5ldmVudCA9IE5VTEw7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9j cnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGV2ZW50KTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4g K8KgwqDCoMKgwqDCoMKgc3Bpbl91bmxvY2tfaXJxKCZkcm0tPmV2ZW50X2xvY2spOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBsY2RpZl9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxjZGlmX2RybV9wcml2YXRlICpsY2RpZiA9 IHRvX2xjZGlmX2RybV9wcml2YXRlKGNydGMtCj4gPmRldik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oC8qIENsZWFyIGFuZCBlbmFibGUgVkJMQU5LIElSUSAqLwo+ICvCoMKgwqDCoMKgwqDCoHdyaXRl bChJTlRfU1RBVFVTX0QwX1ZTX0JMQU5LLCBsY2RpZi0+YmFzZSArCj4gTENEQ19WOF9JTlRfU1RB VFVTX0QwKTsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoSU5UX0VOQUJMRV9EMF9WU19CTEFOS19F TiwgbGNkaWYtPmJhc2UgKwo+IExDRENfVjhfSU5UX0VOQUJMRV9EMCk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBsY2RpZl9jcnRjX2Rpc2Fi bGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBsY2RpZl9kcm1fcHJpdmF0ZSAqbGNkaWYgPSB0b19sY2RpZl9kcm1fcHJpdmF0ZShjcnRj LQo+ID5kZXYpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBEaXNhYmxlIGFuZCBjbGVhciBWQkxB TksgSVJRICovCj4gK8KgwqDCoMKgwqDCoMKgd3JpdGVsKDAsIGxjZGlmLT5iYXNlICsgTENEQ19W OF9JTlRfRU5BQkxFX0QwKTsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoSU5UX1NUQVRVU19EMF9W U19CTEFOSywgbGNkaWYtPmJhc2UgKwo+IExDRENfVjhfSU5UX1NUQVRVU19EMCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGxjZGlmX2NydGNf aGVscGVyX2Z1bmNzID0KPiB7Cj4gK8KgwqDCoMKgwqDCoMKgLmF0b21pY19jaGVjayA9IGxjZGlm X2NydGNfYXRvbWljX2NoZWNrLAo+ICvCoMKgwqDCoMKgwqDCoC5hdG9taWNfZmx1c2ggPSBsY2Rp Zl9jcnRjX2F0b21pY19mbHVzaCwKPiArwqDCoMKgwqDCoMKgwqAuYXRvbWljX2VuYWJsZSA9IGxj ZGlmX2NydGNfYXRvbWljX2VuYWJsZSwKPiArwqDCoMKgwqDCoMKgwqAuYXRvbWljX2Rpc2FibGUg PSBsY2RpZl9jcnRjX2F0b21pY19kaXNhYmxlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY3J0Y19mdW5jcyBsY2RpZl9jcnRjX2Z1bmNzID0gewo+ICvCoMKgwqDCoMKgwqDC oC5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCj4gK8KgwqDCoMKgwqDCoMKg LmRlc3Ryb3kgPSBkcm1fY3J0Y19jbGVhbnVwLAo+ICvCoMKgwqDCoMKgwqDCoC5zZXRfY29uZmln ID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiArwqDCoMKgwqDCoMKgwqAucGFnZV9m bGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAo+ICvCoMKgwqDCoMKgwqDCoC5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0KPiBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9z dGF0ZSwKPiArwqDCoMKgwqDCoMKgwqAuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCj4gK8KgwqDCoMKgwqDCoMKgLmVuYWJsZV92Ymxh bmsgPSBsY2RpZl9jcnRjX2VuYWJsZV92YmxhbmssCj4gK8KgwqDCoMKgwqDCoMKgLmRpc2FibGVf dmJsYW5rID0gbGNkaWZfY3J0Y19kaXNhYmxlX3ZibGFuaywKPiArfTsKPiArCj4gKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCj4gLS0tLS0tLS0tLS0tCj4gKyAqIEVuY29kZXIKPiArICovCj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGxjZGlmX2VuY29kZXJfZnVuY3MgPSB7Cj4gK8Kg wqDCoMKgwqDCoMKgLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAo+ICt9Owo+ICsKPiAr LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiAtLS0tLS0tLS0tLS0KPiArICogUGxhbmVzCj4gKyAqLwo+ICsKPiArc3Rh dGljIGludCBsY2RpZl9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KPiBkcm1f YXRvbWljX2dldF9uZXdfcGxhbmVfc3RhdGUoc3RhdGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAKPiDCoMKgwqDCoMKgwqDCoCBwbGFuZSk7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxjZGlm X2RybV9wcml2YXRlICpsY2RpZiA9IHRvX2xjZGlmX2RybV9wcml2YXRlKHBsYW5lLQo+ID5kZXYp Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0 YXRlKHN0YXRlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm bGNkaWYtPmNydGMpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZHJtX2F0b21pY19oZWxw ZXJfY2hlY2tfcGxhbmVfc3RhdGUocGxhbmVfc3RhdGUsCj4gY3J0Y19zdGF0ZSwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiBEUk1fUExBTkVfSEVMUEVSX05P X1NDQUxJTkcsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4g RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBmYWxzZSwgdHJ1ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxj ZGlmX3BsYW5lX3ByaW1hcnlfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lCj4gKnBsYW5l LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlCj4gKnN0YXRlKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxjZGlmX2RybV9wcml2 YXRlICpsY2RpZiA9IHRvX2xjZGlmX2RybV9wcml2YXRlKHBsYW5lLQo+ID5kZXYpOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19wc3RhdGUgPQo+IGRybV9hdG9t aWNfZ2V0X25ld19wbGFuZV9zdGF0ZShzdGF0ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ IMKgwqDCoMKgwqDCoCBwbGFuZSk7Cj4gK8KgwqDCoMKgwqDCoMKgZG1hX2FkZHJfdCBwYWRkcjsK PiArCj4gK8KgwqDCoMKgwqDCoMKgcGFkZHIgPSBkcm1fZmJfY21hX2dldF9nZW1fYWRkcihuZXdf cHN0YXRlLT5mYiwgbmV3X3BzdGF0ZSwKPiAwKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocGFkZHIp IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd3JpdGVsKGxvd2VyXzMyX2JpdHMo cGFkZHIpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNk aWYtPmJhc2UgKyBMQ0RDX1Y4X0NUUkxERVNDTF9MT1cwXzQpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB3cml0ZWwoQ1RSTERFU0NMX0hJR0gwXzRfQUREUl9ISUdIKHVwcGVyXzMy X2JpdHMocGFkZAo+IHIpKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGxjZGlmLT5iYXNlICsgTENEQ19WOF9DVFJMREVTQ0xfSElHSDBfNCk7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBsY2RpZl9mb3JtYXRfbW9kX3N1cHBv cnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMy X3QgZm9ybWF0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50NjRfdCBtb2RpZmllcikKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiBtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVI7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcwo+ IGxjZGlmX3BsYW5lX3ByaW1hcnlfaGVscGVyX2Z1bmNzID0gewo+ICvCoMKgwqDCoMKgwqDCoC5h dG9taWNfY2hlY2sgPSBsY2RpZl9wbGFuZV9hdG9taWNfY2hlY2ssCj4gK8KgwqDCoMKgwqDCoMKg LmF0b21pY191cGRhdGUgPSBsY2RpZl9wbGFuZV9wcmltYXJ5X2F0b21pY191cGRhdGUsCj4gK307 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBsY2RpZl9wbGFuZV9m dW5jcyA9IHsKPiArwqDCoMKgwqDCoMKgwqAuZm9ybWF0X21vZF9zdXBwb3J0ZWTCoMKgwqA9IGxj ZGlmX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAo+ICvCoMKgwqDCoMKgwqDCoC51cGRhdGVfcGxhbmXC oMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCj4g K8KgwqDCoMKgwqDCoMKgLmRpc2FibGVfcGxhbmXCoMKgwqDCoMKgwqDCoMKgwqDCoD0gZHJtX2F0 b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiArwqDCoMKgwqDCoMKgwqAuZGVzdHJvecKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBkcm1fcGxhbmVfY2xlYW51cCwKPiArwqDCoMKg wqDCoMKgwqAucmVzZXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IGRybV9h dG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAo+ICvCoMKgwqDCoMKgwqDCoC5hdG9taWNfZHVwbGlj YXRlX3N0YXRlwqA9Cj4gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAo+ ICvCoMKgwqDCoMKgwqDCoC5hdG9taWNfZGVzdHJveV9zdGF0ZcKgwqDCoD0KPiBkcm1fYXRvbWlj X2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHUz MiBsY2RpZl9wcmltYXJ5X3BsYW5lX2Zvcm1hdHNbXSA9IHsKPiArwqDCoMKgwqDCoMKgwqBEUk1f Rk9STUFUX1JHQjU2NSwKPiArwqDCoMKgwqDCoMKgwqBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHU2NCBsY2RpZl9tb2RpZmllcnNbXSA9IHsKPiArwqDCoMKg wqDCoMKgwqBEUk1fRk9STUFUX01PRF9MSU5FQVIsCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0ZPUk1B VF9NT0RfSU5WQUxJRAo+ICt9Owo+ICsKPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAtLS0tLS0tLS0tLS0KPiAr ICogSW5pdGlhbGl6YXRpb24KPiArICovCj4gKwo+ICtpbnQgbGNkaWZfa21zX2luaXQoc3RydWN0 IGxjZGlmX2RybV9wcml2YXRlICpsY2RpZikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlciA9ICZsY2RpZi0+ZW5jb2RlcjsKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbGNkaWYtPmNydGM7Cj4gK8KgwqDCoMKgwqDCoMKgaW50 IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZHJtX3BsYW5lX2hlbHBlcl9hZGQoJmxjZGlmLT5w bGFuZXMucHJpbWFyeSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZsY2RpZl9wbGFuZV9wcmltYXJ5X2hlbHBlcl9mdW5jcyk7Cj4gK8Kg wqDCoMKgwqDCoMKgcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGxjZGlmLT5kcm0sICZs Y2RpZi0KPiA+cGxhbmVzLnByaW1hcnksIDEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZsY2RpZl9w bGFuZV9mdW5jcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNkaWZfcHJpbWFyeV9wbGFuZV9mb3Jt YXRzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IEFSUkFZX1NJWkUobGNkaWZfcHJpbWFyeV9wbGFu ZV9mb3JtYXRzKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGNkaWZfbW9kaWZpZXJzLAo+IERSTV9Q TEFORV9UWVBFX1BSSU1BUlksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5VTEwpOwo+ICvCoMKgwqDC oMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJmxjZGlm X2NydGNfaGVscGVyX2Z1bmNzKTsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fY3J0Y19pbml0 X3dpdGhfcGxhbmVzKGxjZGlmLT5kcm0sIGNydGMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZs Y2RpZi0+cGxhbmVzLnByaW1hcnksIE5VTEwsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZsY2Rp Zl9jcnRjX2Z1bmNzLCBOVUxMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBl bmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9jcnRjX21hc2soY3J0Yyk7Cj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIGRybV9lbmNvZGVyX2luaXQobGNkaWYtPmRybSwgZW5jb2RlciwKPiAmbGNk aWZfZW5jb2Rlcl9mdW5jcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fTU9ERV9FTkNPREVSX05PTkUsIE5VTEwpOwo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9yZWdzLmgKPiBi L2RyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9yZWdzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLmM3MDIyMDY1MWUzYTUKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL214c2ZiL2xjZGlmX3JlZ3MuaAo+IEBAIC0wLDAgKzEsMjU3 IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCj4g Ky8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4K PiArICoKPiArICogaS5NWDhNUC9pLk1YUlQgTENESUYgTENEIGNvbnRyb2xsZXIgZHJpdmVyLgo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgX19MQ0RJRl9SRUdTX0hfXwo+ICsjZGVmaW5lIF9fTENESUZf UkVHU19IX18KPiArCj4gKyNkZWZpbmUgUkVHX1NFVMKgwqDCoMKgwqDCoMKgwqA0Cj4gKyNkZWZp bmUgUkVHX0NMUsKgwqDCoMKgwqDCoMKgwqA4Cj4gKwo+ICsvKiBWOCByZWdpc3RlciBzZXQgKi8K PiArI2RlZmluZSBMQ0RDX1Y4X0NUUkzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDB4MDAKPiArI2RlZmluZSBMQ0RDX1Y4X0RJU1BfUEFSQcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDEwCj4gKyNkZWZpbmUgTENEQ19WOF9ESVNQX1NJWkXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgxNAo+ICsjZGVmaW5lIExDRENfVjhfSFNZTl9QQVJBwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4MTgKPiArI2RlZmluZSBMQ0RDX1Y4X1ZTWU5fUEFSQcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDFjCj4gKyNkZWZpbmUgTENEQ19WOF9WU1lOX0hTWU5fV0lE VEjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjAKPiArI2RlZmluZSBMQ0RDX1Y4 X0lOVF9TVEFUVVNfRDDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjQKPiArI2RlZmluZSBMQ0RDX1Y4 X0lOVF9FTkFCTEVfRDDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjgKPiArI2RlZmluZSBMQ0RDX1Y4 X0lOVF9TVEFUVVNfRDHCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MzAKPiArI2RlZmluZSBMQ0RDX1Y4 X0lOVF9FTkFCTEVfRDHCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MzQKPiArI2RlZmluZSBMQ0RDX1Y4 X0NUUkxERVNDTDBfMcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIwMAo+ICsjZGVmaW5lIExDRENf VjhfQ1RSTERFU0NMMF8zwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjA4Cj4gKyNkZWZpbmUgTENE Q19WOF9DVFJMREVTQ0xfTE9XMF80wqDCoMKgwqDCoMKgwqAweDIwYwo+ICsjZGVmaW5lIExDRENf VjhfQ1RSTERFU0NMX0hJR0gwXzTCoMKgwqDCoMKgwqAweDIxMAo+ICsjZGVmaW5lIExDRENfVjhf Q1RSTERFU0NMMF81wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjE0Cj4gKyNkZWZpbmUgTENEQ19W OF9DU0MwX0NUUkzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMWMKPiArI2RlZmluZSBM Q0RDX1Y4X0NTQzBfQ09FRjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjIwCj4gKyNkZWZp bmUgTENEQ19WOF9DU0MwX0NPRUYxwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIyNAo+ICsj ZGVmaW5lIExDRENfVjhfQ1NDMF9DT0VGMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMjgK PiArI2RlZmluZSBMQ0RDX1Y4X0NTQzBfQ09FRjPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MjJjCj4gKyNkZWZpbmUgTENEQ19WOF9DU0MwX0NPRUY0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDIzMAo+ICsjZGVmaW5lIExDRENfVjhfQ1NDMF9DT0VGNcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMHgyMzQKPiArI2RlZmluZSBMQ0RDX1Y4X1BBTklDMF9USFJFU8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDIzOAo+ICsKPiArI2RlZmluZSBDVFJMX1NGVFJTVMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMzEpCj4gKyNkZWZpbmUgQ1RSTF9DTEtHQVRFwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMzApCj4gKyNkZWZpbmUgQ1RS TF9CWVBBU1NfQ09VTlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDE5KQo+ICsjZGVm aW5lIENUUkxfVlNZTkNfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoEJJVCgxOCkKPiArI2RlZmluZSBDVFJMX0RPVENMS19NT0RFwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgQklUKDE3KQo+ICsjZGVmaW5lIENUUkxfREFUQV9TRUxFQ1TCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMTYpCj4gKyNkZWZpbmUgQ1RSTF9CVVNfV0lE VEhfMTbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDAgPDwgMTApCj4gKyNkZWZpbmUgQ1RS TF9CVVNfV0lEVEhfOMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgxIDw8IDEwKQo+ICsj ZGVmaW5lIENUUkxfQlVTX1dJRFRIXzE4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgyIDw8 IDEwKQo+ICsjZGVmaW5lIENUUkxfQlVTX1dJRFRIXzI0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCgzIDw8IDEwKQo+ICsjZGVmaW5lIENUUkxfQlVTX1dJRFRIX01BU0vCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAoMHgzIDw8IDEwKQo+ICsjZGVmaW5lIENUUkxfV09SRF9MRU5HVEhfMTbCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAoMCA8PCA4KQo+ICsjZGVmaW5lIENUUkxfV09SRF9MRU5HVEhf OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDEgPDwgOCkKPiArI2RlZmluZSBDVFJMX1dPUkRf TEVOR1RIXzE4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDIgPDwgOCkKPiArI2RlZmluZSBDVFJM X1dPUkRfTEVOR1RIXzI0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDMgPDwgOCkKPiArI2RlZmlu ZSBDVFJMX01BU1RFUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQo NSkKPiArI2RlZmluZSBDVFJMX0RGMTbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoEJJVCgzKQo+ICsjZGVmaW5lIENUUkxfREYxOMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDIpCj4gKyNkZWZpbmUgQ1RSTF9ERjI0wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMSkKPiArI2RlZmluZSBD VFJMX1JVTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQo MCkKPiArCj4gKyNkZWZpbmUgQ1RSTDFfUkVDT1ZFUl9PTl9VTkRFUkZMT1fCoMKgwqDCoMKgQklU KDI0KQo+ICsjZGVmaW5lIENUUkwxX0ZJRk9fQ0xFQVLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoMjEpCj4gKyNkZWZpbmUgQ1RSTDFfU0VUX0JZVEVfUEFDS0FHSU5HKHgpwqDCoMKg wqAoKCh4KSAmIDB4ZikgPDwgMTYpCj4gKyNkZWZpbmUgQ1RSTDFfR0VUX0JZVEVfUEFDS0FHSU5H KHgpwqDCoMKgwqAoKCh4KSA+PiAxNikgJiAweGYpCj4gKyNkZWZpbmUgQ1RSTDFfQ1VSX0ZSQU1F X0RPTkVfSVJRX0VOwqDCoMKgwqBCSVQoMTMpCj4gKyNkZWZpbmUgQ1RSTDFfQ1VSX0ZSQU1FX0RP TkVfSVJRwqDCoMKgwqDCoMKgwqBCSVQoOSkKPiArCj4gKyNkZWZpbmUgQ1RSTDJfU0VUX09VVFNU QU5ESU5HX1JFUVNfMcKgwqDCoDAKPiArI2RlZmluZSBDVFJMMl9TRVRfT1VUU1RBTkRJTkdfUkVR U18ywqDCoMKgKDB4MSA8PCAyMSkKPiArI2RlZmluZSBDVFJMMl9TRVRfT1VUU1RBTkRJTkdfUkVR U180wqDCoMKgKDB4MiA8PCAyMSkKPiArI2RlZmluZSBDVFJMMl9TRVRfT1VUU1RBTkRJTkdfUkVR U184wqDCoMKgKDB4MyA8PCAyMSkKPiArI2RlZmluZSBDVFJMMl9TRVRfT1VUU1RBTkRJTkdfUkVR U18xNsKgwqAoMHg0IDw8IDIxKQo+ICsjZGVmaW5lIENUUkwyX1NFVF9PVVRTVEFORElOR19SRVFT X01BU0vCoMKgwqDCoMKgwqDCoMKgKDB4NyA8PCAyMSkKPiArCj4gKyNkZWZpbmUgVFJBTlNGRVJf Q09VTlRfU0VUX1ZDT1VOVCh4KcKgwqDCoCgoKHgpICYgMHhmZmZmKSA8PCAxNikKPiArI2RlZmlu ZSBUUkFOU0ZFUl9DT1VOVF9HRVRfVkNPVU5UKHgpwqDCoMKgKCgoeCkgPj4gMTYpICYgMHhmZmZm KQo+ICsjZGVmaW5lIFRSQU5TRkVSX0NPVU5UX1NFVF9IQ09VTlQoeCnCoMKgwqAoKHgpICYgMHhm ZmZmKQo+ICsjZGVmaW5lIFRSQU5TRkVSX0NPVU5UX0dFVF9IQ09VTlQoeCnCoMKgwqAoKHgpICYg MHhmZmZmKQo+ICsKPiArI2RlZmluZSBWRENUUkwwX0VOQUJMRV9QUkVTRU5UwqDCoMKgwqDCoMKg wqDCoMKgQklUKDI4KQo+ICsjZGVmaW5lIFZEQ1RSTDBfVlNZTkNfQUNUX0hJR0jCoMKgwqDCoMKg wqDCoMKgwqBCSVQoMjcpCj4gKyNkZWZpbmUgVkRDVFJMMF9IU1lOQ19BQ1RfSElHSMKgwqDCoMKg wqDCoMKgwqDCoEJJVCgyNikKPiArI2RlZmluZSBWRENUUkwwX0RPVENMS19BQ1RfRkFMTElOR8Kg wqDCoMKgwqBCSVQoMjUpCj4gKyNkZWZpbmUgVkRDVFJMMF9FTkFCTEVfQUNUX0hJR0jCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyNCkKPiArI2RlZmluZSBWRENUUkwwX1ZTWU5D X1BFUklPRF9VTklUwqDCoMKgwqDCoMKgQklUKDIxKQo+ICsjZGVmaW5lIFZEQ1RSTDBfVlNZTkNf UFVMU0VfV0lEVEhfVU5JVMKgQklUKDIwKQo+ICsjZGVmaW5lIFZEQ1RSTDBfSEFMRl9MSU5FwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxOSkKPiArI2RlZmluZSBWRENUUkwwX0hBTEZf TElORV9NT0RFwqDCoMKgwqDCoMKgwqDCoMKgQklUKDE4KQo+ICsjZGVmaW5lIFZEQ1RSTDBfU0VU X1ZTWU5DX1BVTFNFX1dJRFRIKHgpICgoeCkgJiAweDNmZmZmKQo+ICsjZGVmaW5lIFZEQ1RSTDBf R0VUX1ZTWU5DX1BVTFNFX1dJRFRIKHgpICgoeCkgJiAweDNmZmZmKQo+ICsKPiArI2RlZmluZSBW RENUUkwyX1NFVF9IU1lOQ19QRVJJT0QoeCnCoMKgwqDCoCgoeCkgJiAweDNmZmZmKQo+ICsjZGVm aW5lIFZEQ1RSTDJfR0VUX0hTWU5DX1BFUklPRCh4KcKgwqDCoMKgKCh4KSAmIDB4M2ZmZmYpCj4g Kwo+ICsjZGVmaW5lIFZEQ1RSTDNfTVVYX1NZTkNfU0lHTkFMU8KgwqDCoMKgwqDCoMKgQklUKDI5 KQo+ICsjZGVmaW5lIFZEQ1RSTDNfVlNZTkNfT05MWcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDI4KQo+ICsjZGVmaW5lIFNFVF9IT1JfV0FJVF9DTlQoeCnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAoKCh4KSAmIDB4ZmZmKSA8PCAxNikKPiArI2RlZmluZSBHRVRfSE9SX1dBSVRfQ05UKHgp wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKCgoeCkgPj4gMTYpICYgMHhmZmYpCj4gKyNkZWZpbmUg U0VUX1ZFUlRfV0FJVF9DTlQoeCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKCh4KSAmIDB4ZmZmZikK PiArI2RlZmluZSBHRVRfVkVSVF9XQUlUX0NOVCh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoKHgp ICYgMHhmZmZmKQo+ICsKPiArI2RlZmluZSBWRENUUkw0X1NFVF9ET1RDTEtfRExZKHgpwqDCoMKg wqDCoMKgKCgoeCkgJiAweDcpIDw8IDI5KSAvKiB2NAo+IG9ubHkgKi8KPiArI2RlZmluZSBWRENU Ukw0X0dFVF9ET1RDTEtfRExZKHgpwqDCoMKgwqDCoMKgKCgoeCkgPj4gMjkpICYgMHg3KSAvKiB2 NAo+IG9ubHkgKi8KPiArI2RlZmluZSBWRENUUkw0X1NZTkNfU0lHTkFMU19PTsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDE4KQo+ICsjZGVmaW5lIFNFVF9ET1RDTEtfSF9WQUxJ RF9EQVRBX0NOVCh4KcKgKCh4KSAmIDB4M2ZmZmYpCj4gKwo+ICsjZGVmaW5lIERFQlVHMF9IU1lO Q8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDI2KQo+ICsjZGVmaW5l IERFQlVHMF9WU1lOQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDI1 KQo+ICsKPiArI2RlZmluZSBBU19DVFJMX1BTX0RJU0FCTEXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoEJJVCgyMykKPiArI2RlZmluZSBBU19DVFJMX0FMUEhBX0lOVkVSVMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBCSVQoMjApCj4gKyNkZWZpbmUgQVNfQ1RSTF9BTFBIQShhKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCgoKGEpICYgMHhmZikgPDwgOCkKPiArI2RlZmluZSBBU19DVFJMX0ZP Uk1BVF9SR0I1NjXCoMKgwqDCoMKgwqDCoMKgwqDCoCgweGUgPDwgNCkKPiArI2RlZmluZSBBU19D VFJMX0ZPUk1BVF9SR0I0NDTCoMKgwqDCoMKgwqDCoMKgwqDCoCgweGQgPDwgNCkKPiArI2RlZmlu ZSBBU19DVFJMX0ZPUk1BVF9SR0I1NTXCoMKgwqDCoMKgwqDCoMKgwqDCoCgweGMgPDwgNCkKPiAr I2RlZmluZSBBU19DVFJMX0ZPUk1BVF9BUkdCNDQ0NMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgKDB4OSA8PCA0KQo+ICsjZGVmaW5lIEFTX0NUUkxfRk9STUFUX0FSR0IxNTU1wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHg4IDw8IDQpCj4gKyNkZWZpbmUgQVNfQ1RSTF9G T1JNQVRfUkdCODg4wqDCoMKgwqDCoMKgwqDCoMKgwqAoMHg0IDw8IDQpCj4gKyNkZWZpbmUgQVNf Q1RSTF9GT1JNQVRfQVJHQjg4ODjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgweDAg PDwgNCkKPiArI2RlZmluZSBBU19DVFJMX0VOQUJMRV9DT0xPUktFWcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgQklUKDMpCj4gKyNkZWZpbmUgQVNfQ1RSTF9BTFBIQV9DVFJMX1JPUMKg wqDCoMKgwqDCoMKgwqDCoCgzIDw8IDEpCj4gKyNkZWZpbmUgQVNfQ1RSTF9BTFBIQV9DVFJMX01V TFRJUExZwqDCoMKgwqAoMiA8PCAxKQo+ICsjZGVmaW5lIEFTX0NUUkxfQUxQSEFfQ1RSTF9PVkVS UklERcKgwqDCoMKgKDEgPDwgMSkKPiArI2RlZmluZSBBU19DVFJMX0FMUEhBX0NUUkxfRU1CRURE RUTCoMKgwqDCoCgwIDw8IDEpCj4gKyNkZWZpbmUgQVNfQ1RSTF9BU19FTkFCTEXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgQklUKDApCj4gKwo+ICsvKiBWOCByZWdpc3RlciBzZXQgKi8KPiAr I2RlZmluZSBDVFJMX1NXX1JFU0VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDMxKQo+ICsjZGVmaW5lIENUUkxfRkVUQ0hfU1RBUlRfT1BUSU9OX0ZQVsKgwqDCoMKgMAo+ ICsjZGVmaW5lIENUUkxfRkVUQ0hfU1RBUlRfT1BUSU9OX1BXVsKgwqDCoMKgQklUKDgpCj4gKyNk ZWZpbmUgQ1RSTF9GRVRDSF9TVEFSVF9PUFRJT05fQlBWwqDCoMKgwqBCSVQoOSkKPiArI2RlZmlu ZSBDVFJMX0ZFVENIX1NUQVJUX09QVElPTl9SRVNWwqDCoMKgR0VOTUFTSyg5LCA4KQo+ICsjZGVm aW5lIENUUkxfRkVUQ0hfU1RBUlRfT1BUSU9OX01BU0vCoMKgwqBHRU5NQVNLKDksIDgpCj4gKyNk ZWZpbmUgQ1RSTF9ORUfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg0KQo+ICsjZGVmaW5lIENUUkxfSU5WX1BYQ0vCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMykKPiArI2RlZmluZSBDVFJMX0lOVl9E RcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMikKPiArI2RlZmlu ZSBDVFJMX0lOVl9WU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQo MSkKPiArI2RlZmluZSBDVFJMX0lOVl9IU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBCSVQoMCkKPiArCj4gKyNkZWZpbmUgRElTUF9QQVJBX0RJU1BfT07CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgQklUKDMxKQo+ICsjZGVmaW5lIERJU1BfUEFSQV9TV0FQX0VOwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzMCkKPiArI2RlZmluZSBESVNQX1BBUkFfTElO RV9QQVRURVJOX1VZVllfSMKgwqAoR0VOTUFTSygyOSwgMjgpIHwgQklUKDI2KSkKPiArI2RlZmlu ZSBESVNQX1BBUkFfTElORV9QQVRURVJOX1JHQjU2NcKgwqBHRU5NQVNLKDI4LCAyNikKPiArI2Rl ZmluZSBESVNQX1BBUkFfTElORV9QQVRURVJOX1JHQjg4OMKgwqAwCj4gKyNkZWZpbmUgRElTUF9Q QVJBX0xJTkVfUEFUVEVSTl9NQVNLwqDCoMKgwqBHRU5NQVNLKDI5LCAyNikKPiArI2RlZmluZSBE SVNQX1BBUkFfRElTUF9NT0RFX01BU0vCoMKgwqDCoMKgwqDCoEdFTk1BU0soMjUsIDI0KQo+ICsj ZGVmaW5lIERJU1BfUEFSQV9CR05EX1JfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygy MywgMTYpCj4gKyNkZWZpbmUgRElTUF9QQVJBX0JHTkRfR19NQVNLwqDCoMKgwqDCoMKgwqDCoMKg wqBHRU5NQVNLKDE1LCA4KQo+ICsjZGVmaW5lIERJU1BfUEFSQV9CR05EX0JfTUFTS8KgwqDCoMKg wqDCoMKgwqDCoMKgR0VOTUFTSyg3LCAwKQo+ICsKPiArI2RlZmluZSBESVNQX1NJWkVfREVMVEFf WShuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoKChuKSAmIDB4ZmZmZikgPDwgMTYpCj4gKyNkZWZp bmUgRElTUF9TSVpFX0RFTFRBX1lfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMzEsIDE2 KQo+ICsjZGVmaW5lIERJU1BfU0laRV9ERUxUQV9YKG4pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgo bikgJiAweGZmZmYpCj4gKyNkZWZpbmUgRElTUF9TSVpFX0RFTFRBX1hfTUFTS8KgwqDCoMKgwqDC oMKgwqDCoEdFTk1BU0soMTUsIDApCj4gKwo+ICsjZGVmaW5lIEhTWU5fUEFSQV9CUF9IKG4pwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgoKG4pICYgMHhmZmZmKSA8PCAxNikKPiArI2RlZmlu ZSBIU1lOX1BBUkFfQlBfSF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygzMSwg MTYpCj4gKyNkZWZpbmUgSFNZTl9QQVJBX0ZQX0gobinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgKChuKSAmIDB4ZmZmZikKPiArI2RlZmluZSBIU1lOX1BBUkFfRlBfSF9NQVNLwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgR0VOTUFTSygxNSwgMCkKPiArCj4gKyNkZWZpbmUgVlNZTl9QQVJBX0JQ X1YobinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKCgobikgJiAweGZmZmYpIDw8IDE2KQo+ ICsjZGVmaW5lIFZTWU5fUEFSQV9CUF9WX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5N QVNLKDMxLCAxNikKPiArI2RlZmluZSBWU1lOX1BBUkFfRlBfVihuKcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAoKG4pICYgMHhmZmZmKQo+ICsjZGVmaW5lIFZTWU5fUEFSQV9GUF9WX01BU0vC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDE1LCAwKQo+ICsKPiArI2RlZmluZSBWU1lO X0hTWU5fV0lEVEhfUFdfVihuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKCgobikg JiAweGZmZmYpIDw8Cj4gMTYpCj4gKyNkZWZpbmUgVlNZTl9IU1lOX1dJRFRIX1BXX1ZfTUFTS8Kg wqDCoMKgwqDCoEdFTk1BU0soMzEsIDE2KQo+ICsjZGVmaW5lIFZTWU5fSFNZTl9XSURUSF9QV19I KG4pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoKG4pICYgMHhmZmZmKQo+ICsjZGVm aW5lIFZTWU5fSFNZTl9XSURUSF9QV19IX01BU0vCoMKgwqDCoMKgwqBHRU5NQVNLKDE1LCAwKQo+ ICsKPiArI2RlZmluZSBJTlRfU1RBVFVTX0QwX0ZJRk9fRU1QVFnCoMKgwqDCoMKgwqDCoEJJVCgy NCkKPiArI2RlZmluZSBJTlRfU1RBVFVTX0QwX0RNQV9ET05FwqDCoMKgwqDCoMKgwqDCoMKgQklU KDE2KQo+ICsjZGVmaW5lIElOVF9TVEFUVVNfRDBfRE1BX0VSUsKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDgpCj4gKyNkZWZpbmUgSU5UX1NUQVRVU19EMF9WU19CTEFOS8KgwqDCoMKgwqDCoMKgwqDC oEJJVCgyKQo+ICsjZGVmaW5lIElOVF9TVEFUVVNfRDBfVU5ERVJSVU7CoMKgwqDCoMKgwqDCoMKg wqBCSVQoMSkKPiArI2RlZmluZSBJTlRfU1RBVFVTX0QwX1ZTWU5DwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgQklUKDApCj4gKwo+ICsjZGVmaW5lIElOVF9FTkFCTEVfRDBfRklGT19FTVBUWV9FTsKg wqDCoMKgQklUKDI0KQo+ICsjZGVmaW5lIElOVF9FTkFCTEVfRDBfRE1BX0RPTkVfRU7CoMKgwqDC oMKgwqBCSVQoMTYpCj4gKyNkZWZpbmUgSU5UX0VOQUJMRV9EMF9ETUFfRVJSX0VOwqDCoMKgwqDC oMKgwqBCSVQoOCkKPiArI2RlZmluZSBJTlRfRU5BQkxFX0QwX1ZTX0JMQU5LX0VOwqDCoMKgwqDC oMKgQklUKDIpCj4gKyNkZWZpbmUgSU5UX0VOQUJMRV9EMF9VTkRFUlJVTl9FTsKgwqDCoMKgwqDC oEJJVCgxKQo+ICsjZGVmaW5lIElOVF9FTkFCTEVfRDBfVlNZTkNfRU7CoMKgwqDCoMKgwqDCoMKg wqBCSVQoMCkKPiArCj4gKyNkZWZpbmUgSU5UX1NUQVRVU19EMV9QTEFORV9QQU5JQ8KgwqDCoMKg wqDCoEJJVCgwKQo+ICsKPiArI2RlZmluZSBJTlRfRU5BQkxFX0QxX1BMQU5FX1BBTklDX0VOwqDC oMKgQklUKDApCj4gKwo+ICsjZGVmaW5lIENUUkxERVNDTDBfMV9IRUlHSFQobinCoMKgwqDCoMKg wqDCoMKgwqAoKChuKSAmIDB4ZmZmZikgPDwgMTYpCj4gKyNkZWZpbmUgQ1RSTERFU0NMMF8xX0hF SUdIVF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygzMSwgMTYpCj4g KyNkZWZpbmUgQ1RSTERFU0NMMF8xX1dJRFRIKG4pwqDCoMKgwqDCoMKgwqDCoMKgwqAoKG4pICYg MHhmZmZmKQo+ICsjZGVmaW5lIENUUkxERVNDTDBfMV9XSURUSF9NQVNLwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDE1LCAwKQo+ICsKPiArI2RlZmluZSBDVFJMREVTQ0ww XzNfUElUQ0gobinCoMKgwqDCoMKgwqDCoMKgwqDCoCgobikgJiAweGZmZmYpCj4gKyNkZWZpbmUg Q1RSTERFU0NMMF8zX1BJVENIX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdF Tk1BU0soMTUsIDApCj4gKwo+ICsjZGVmaW5lIENUUkxERVNDTF9ISUdIMF80X0FERFJfSElHSChu KcKgKChuKSAmIDB4ZikKPiArI2RlZmluZSBDVFJMREVTQ0xfSElHSDBfNF9BRERSX0hJR0hfTUFT S8KgwqDCoMKgwqDCoMKgR0VOTUFTSygzLCAwKQo+ICsKPiArI2RlZmluZSBDVFJMREVTQ0wwXzVf RU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMzEp Cj4gKyNkZWZpbmUgQ1RSTERFU0NMMF81X1NIQURPV19MT0FEX0VOwqDCoMKgwqBCSVQoMzApCj4g KyNkZWZpbmUgQ1RSTERFU0NMMF81X0JQUF8xNl9SR0I1NjXCoMKgwqDCoMKgQklUKDI2KQo+ICsj ZGVmaW5lIENUUkxERVNDTDBfNV9CUFBfMTZfQVJHQjE1NTXCoMKgwqAoQklUKDI2KSB8IEJJVCgy NCkpCj4gKyNkZWZpbmUgQ1RSTERFU0NMMF81X0JQUF8xNl9BUkdCNDQ0NMKgwqDCoChCSVQoMjYp IHwgQklUKDI1KSkKPiArI2RlZmluZSBDVFJMREVTQ0wwXzVfQlBQX1lDYkNyNDIywqDCoMKgwqDC oMKgKEJJVCgyNikgfCBCSVQoMjUpIHwgQklUKDI0KSkKPiArI2RlZmluZSBDVFJMREVTQ0wwXzVf QlBQXzI0X1JHQjg4OMKgwqDCoMKgwqBCSVQoMjcpCj4gKyNkZWZpbmUgQ1RSTERFU0NMMF81X0JQ UF8zMl9BUkdCODg4OMKgwqDCoChCSVQoMjcpIHwgQklUKDI0KSkKPiArI2RlZmluZSBDVFJMREVT Q0wwXzVfQlBQXzMyX0FCR1I4ODg4wqDCoMKgKEJJVCgyNykgfCBCSVQoMjUpKQo+ICsjZGVmaW5l IENUUkxERVNDTDBfNV9CUFBfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygyNywgMjQp Cj4gKyNkZWZpbmUgQ1RSTERFU0NMMF81X1lVVl9GT1JNQVRfWTJWWTFVwqAwCj4gKyNkZWZpbmUg Q1RSTERFU0NMMF81X1lVVl9GT1JNQVRfWTJVWTFWwqBCSVQoMTQpCj4gKyNkZWZpbmUgQ1RSTERF U0NMMF81X1lVVl9GT1JNQVRfVlkyVVkxwqBCSVQoMTUpCj4gKyNkZWZpbmUgQ1RSTERFU0NMMF81 X1lVVl9GT1JNQVRfVVkyVlkxwqAoQklUKDE1KSB8IEJJVCgxNCkpCj4gKyNkZWZpbmUgQ1RSTERF U0NMMF81X1lVVl9GT1JNQVRfTUFTS8KgwqDCoEdFTk1BU0soMTUsIDE0KQo+ICsKPiArI2RlZmlu ZSBDU0MwX0NUUkxfQ1NDX01PREVfUkdCMllDYkNywqDCoMKgR0VOTUFTSygyLCAxKQo+ICsjZGVm aW5lIENTQzBfQ1RSTF9DU0NfTU9ERV9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBHRU5NQVNLKDIsIDEpCj4gKyNkZWZpbmUgQ1NDMF9DVFJMX0JZUEFTU8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEJJVCgwKQo+ICsKPiArI2RlZmluZSBDU0MwX0NPRUYwX0EyKG4pwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKCgobikgPDwgMTYpICYKPiBDU0MwX0NPRUYwX0Ey X01BU0spCj4gKyNkZWZpbmUgQ1NDMF9DT0VGMF9BMl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBHRU5NQVNLKDI2LCAxNikKPiArI2RlZmluZSBDU0MwX0NPRUYwX0ExKG4pwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgKChuKSAmIENTQzBfQ09FRjBfQTFfTUFTSykKPiArI2RlZmlu ZSBDU0MwX0NPRUYwX0ExX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMTAs IDApCj4gKwo+ICsjZGVmaW5lIENTQzBfQ09FRjFfQjEobinCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAoKChuKSA8PCAxNikgJgo+IENTQzBfQ09FRjFfQjFfTUFTSykKPiArI2RlZmluZSBD U0MwX0NPRUYxX0IxX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMjYsIDE2 KQo+ICsjZGVmaW5lIENTQzBfQ09FRjFfQTMobinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAoKG4pICYgQ1NDMF9DT0VGMV9BM19NQVNLKQo+ICsjZGVmaW5lIENTQzBfQ09FRjFfQTNfTUFT S8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygxMCwgMCkKPiArCj4gKyNkZWZpbmUg Q1NDMF9DT0VGMl9CMyhuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgoKG4pIDw8IDE2 KSAmCj4gQ1NDMF9DT0VGMl9CM19NQVNLKQo+ICsjZGVmaW5lIENTQzBfQ09FRjJfQjNfTUFTS8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygyNiwgMTYpCj4gKyNkZWZpbmUgQ1NDMF9D T0VGMl9CMihuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgobikgJiBDU0MwX0NPRUYy X0IyX01BU0spCj4gKyNkZWZpbmUgQ1NDMF9DT0VGMl9CMl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBHRU5NQVNLKDEwLCAwKQo+ICsKPiArI2RlZmluZSBDU0MwX0NPRUYzX0MyKG4pwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKCgobikgPDwgMTYpICYKPiBDU0MwX0NPRUYzX0My X01BU0spCj4gKyNkZWZpbmUgQ1NDMF9DT0VGM19DMl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBHRU5NQVNLKDI2LCAxNikKPiArI2RlZmluZSBDU0MwX0NPRUYzX0MxKG4pwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgKChuKSAmIENTQzBfQ09FRjNfQzFfTUFTSykKPiArI2RlZmlu ZSBDU0MwX0NPRUYzX0MxX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMTAs IDApCj4gKwo+ICsjZGVmaW5lIENTQzBfQ09FRjRfRDEobinCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAoKChuKSA8PCAxNikgJgo+IENTQzBfQ09FRjRfRDFfTUFTSykKPiArI2RlZmluZSBD U0MwX0NPRUY0X0QxX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMjQsIDE2 KQo+ICsjZGVmaW5lIENTQzBfQ09FRjRfQzMobinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAoKG4pICYgQ1NDMF9DT0VGNF9DM19NQVNLKQo+ICsjZGVmaW5lIENTQzBfQ09FRjRfQzNfTUFT S8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygxMCwgMCkKPiArCj4gKyNkZWZpbmUg Q1NDMF9DT0VGNV9EMyhuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgoKG4pIDw8IDE2 KSAmCj4gQ1NDMF9DT0VGNV9EM19NQVNLKQo+ICsjZGVmaW5lIENTQzBfQ09FRjVfRDNfTUFTS8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygyNCwgMTYpCj4gKyNkZWZpbmUgQ1NDMF9D T0VGNV9EMihuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgobikgJiBDU0MwX0NPRUY1 X0QyX01BU0spCj4gKyNkZWZpbmUgQ1NDMF9DT0VGNV9EMl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBHRU5NQVNLKDgsIDApCj4gKwo+ICsjZGVmaW5lIFBBTklDMF9USFJFU19MT1dfTUFT S8KgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygyNCwgMTYpCj4gKyNkZWZpbmUgUEFOSUMwX1RI UkVTX0hJR0hfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soOCwgMCkKPiArCj4gKyNkZWZp bmUgTENESUZfTUlOX1hSRVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTIwCj4g KyNkZWZpbmUgTENESUZfTUlOX1lSRVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MTIwCj4gKyNkZWZpbmUgTENESUZfTUFYX1hSRVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMHhmZmZmCj4gKyNkZWZpbmUgTENESUZfTUFYX1lSRVPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHhmZmZmCj4gKwo+ICsjZW5kaWYgLyogX19MQ0RJRl9SRUdTX0hfXyAq LwoK