From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sender4-op-o12.zoho.com (sender4-op-o12.zoho.com [136.143.188.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E2566EB79; Sat, 16 Aug 2025 16:11:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.12 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755360666; cv=pass; b=hON/3LHWCGU0lVDKRRUlkK6RmKgE7Qj79NFqMfIdAJw3tvpmcm0Ylpk4GFVkBvXqLVkDESiQ8Teh2szKk5/MwylDiZpcgFrvO0hqurgb9O03ynjKG72zCUKlILwpx3mFqAGEf0HaW/jmfT/HxxdyMo84F12jyA83ojMh3+frcNg= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755360666; c=relaxed/simple; bh=xHwMvfPXsns89713hYSASPgW9wLnTcINtVYZbvvkzMw=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=MXXOorb9o6MI19Hv7oy0uuh0OpjUFVuM3ujGrbQyt7LGawq7nBfkd0sCKVUd98QA4H1fLTE0yg34YmPrOtL3rS+qtGz9egjOa2uvH1IlUkm/Dvzt0rNdUEWJdta+EAOsUMY/SIzzgF2bJ/JI6oqimq80fWZVb+pSKrTt+ai6XJk= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=icenowy.me; spf=pass smtp.mailfrom=icenowy.me; dkim=pass (2048-bit key) header.d=icenowy.me header.i=uwu@icenowy.me header.b=beRyXOQ+; arc=pass smtp.client-ip=136.143.188.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=icenowy.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=icenowy.me Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=icenowy.me header.i=uwu@icenowy.me header.b="beRyXOQ+" ARC-Seal: i=1; a=rsa-sha256; t=1755360612; cv=none; d=zohomail.com; s=zohoarc; b=HGBKodMTsJwSmhpfYImmQZ3KWsb1awZUydvzZAI4LAqw73RemenZHM6PfynP0GyLFgcVIfXBacj9fHjIlI4oniGU0XJUdfVe+ymGtt+/QrNMUKrc+0Z0mTYlFzXGHOVEeZPwC8gH5Pwk2GdysPkkgB5nDdLbhReYN+zCLgU9Qm8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755360612; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=xHwMvfPXsns89713hYSASPgW9wLnTcINtVYZbvvkzMw=; b=MI2F7TFqML05+qI4DtyCHI/afgVL3goVzWLEoyTjyyfA3WBuTMCqXpQwKgbkWet5fklIKu76Sjaath5cCi03L13PJjZHTt4S8R06VDCzWXvwye0HqQUNLMm3iwai0sKPQEfpIj3Pq2RGAQdd2c48wEuwQChRfEwwIckpl42Ka9M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=icenowy.me; spf=pass smtp.mailfrom=uwu@icenowy.me; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1755360612; s=zmail2; d=icenowy.me; i=uwu@icenowy.me; h=Message-ID:Subject:Subject:From:From:To:To:Cc:Cc:Date:Date:In-Reply-To:References:Content-Type:Content-Transfer-Encoding:MIME-Version:Message-Id:Reply-To; bh=xHwMvfPXsns89713hYSASPgW9wLnTcINtVYZbvvkzMw=; b=beRyXOQ+8lVgx/wwSYiu+274s+9SA8O+NuaqMyBso3TsszBNI6Wjdr85GD4akS9i oEAe1MJOUBBBlrWFO4IhYX7nfOywfoTF/+8ZRSsXyeVJVywfaMPpuK02RRgtQbJROQc ZhwWGT7BFgKma5rS5paaYpDzik8mPNZorZDRTTAdA5k+YbR1k6ywrT1KNPlpl6uWTdp gtBn4iE+NeABmWJOXHeHeVTFgrVLyUBs33eP+GSaetV4PchPsKBnuYCc+n/dYwOeudW 6hYGhdehPVWO5iHuUpv94JykfVV6XZ2LwKdPi1btqnlgfyaUuAiNfCNyBxbzVDd6V7i qAaZ9FAa2g== Received: by mx.zohomail.com with SMTPS id 1755360607895330.8017688173617; Sat, 16 Aug 2025 09:10:07 -0700 (PDT) Message-ID: Subject: Re: [RFC PATCH 3/8] drm: verisilicon: add a driver for Verisilicon display controllers From: Icenowy Zheng To: Yao Zi , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Drew Fustini , Guo Ren , Fu Wei , Philipp Zabel , Heiko Stuebner , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Michal Wilczynski Cc: Han Gao , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org Date: Sun, 17 Aug 2025 00:09:55 +0800 In-Reply-To: References: <20250814164048.2336043-1-uwu@icenowy.me> <20250814164048.2336043-4-uwu@icenowy.me> Organization: Anthon Open-Source Community Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.4 Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ZohoMailClient: External 5ZyoIDIwMjUtMDgtMTbmmJ/mnJ/lha3nmoQgMTA6MDQgKzAwMDDvvIxZYW8gWmnlhpnpgZPvvJoK PiBPbiBGcmksIEF1ZyAxNSwgMjAyNSBhdCAxMjo0MDo0M0FNICswODAwLCBJY2Vub3d5IFpoZW5n IHdyb3RlOgo+ID4gVGhpcyBpcyBhIGZyb20tc2NyYXRjaCBkcml2ZXIgdGFyZ2V0aW5nIFZlcmlz aWxpY29uIERDLXNlcmllcwo+ID4gZGlzcGxheQo+ID4gY29udHJvbGxlcnMsIHdoaWNoIGZlYXR1 cmUgc2VsZi1pZGVudGlmaWNhdGlvbiBmdW5jdGlvbmFsaXR5IGxpa2UKPiA+IHRoZWlyCj4gPiBH Qy1zZXJpZXMgR1BVcy4KPiA+IAo+ID4gT25seSBEQzgyMDAgaXMgYmVpbmcgc3VwcG9ydGVkIG5v dywgYW5kIG9ubHkgdGhlIG1haW4gZnJhbWVidWZmZXIKPiA+IGlzIHNldAo+ID4gdXAgKGFzIHRo ZSBEUk0gcHJpbWFyeSBwbGFuZSkuIFN1cHBvcnQgZm9yIG1vcmUgREMgbW9kZWxzIGFuZCBtb3Jl Cj4gPiBmZWF0dXJlcyBpcyBteSBmdXJ0aGVyIHRhcmdldHMuCj4gPiAKPiA+IEFzIHRoZSBkaXNw bGF5IGNvbnRyb2xsZXIgaXMgZGVsaXZlcmVkIHRvIFNvQyB2ZW5kb3JzIGFzIGEgd2hvbGUKPiA+ IHBhcnQsCj4gPiB0aGlzIGRyaXZlciBkb2VzIG5vdCB1c2UgY29tcG9uZW50IGZyYW1ld29yayBh bmQgZXh0cmEgYnJpZGdlcwo+ID4gaW5zaWRlIGEKPiA+IFNvQyBpcyBleHBlY3RlZCB0byBiZSBp bXBsZW1lbnRlZCBhcyBkZWRpY2F0ZWQgYnJpZGdlcyAodGhpcyBkcml2ZXIKPiA+IHByb3Blcmx5 IHN1cHBvcnRzIGJyaWRnZSBjaGFpbmluZykuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IEljZW5v d3kgWmhlbmcgPHV3dUBpY2Vub3d5Lm1lPgo+IAo+IFRoYW5rIHlvdSBmb3IgdGhlIGdyZWF0IHdv cmshCj4gCj4gPiAtLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL0tjb25maWfCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICsKPiA+IMKgZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHzCoMKgIDEgKwo+ID4gwqBkcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vS2NvbmZpZ8KgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoCAxNSArCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNv bi9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA1ICsKPiA+IMKgZHJpdmVycy9ncHUv ZHJtL3ZlcmlzaWxpY29uL3ZzX2JyaWRnZS5jwqDCoMKgwqDCoMKgIHwgMzMwCj4gPiArKysrKysr KysrKysrKysrKysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3ZzX2JyaWRnZS5o wqDCoMKgwqDCoMKgIHzCoCA0MCArKysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29u L3ZzX2JyaWRnZV9yZWdzLmjCoCB8wqAgNDcgKysrCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS92ZXJp c2lsaWNvbi92c19jcnRjLmPCoMKgwqDCoMKgwqDCoMKgIHwgMjE3ICsrKysrKysrKysrKwo+ID4g wqBkcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vdnNfY3J0Yy5owqDCoMKgwqDCoMKgwqDCoCB8 wqAgMjkgKysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3ZzX2NydGNfcmVncy5o wqDCoMKgIHzCoCA2MCArKysrCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19k Yy5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAyMzMgKysrKysrKysrKysrKwo+ID4gwqBkcml2ZXJz L2dwdS9kcm0vdmVyaXNpbGljb24vdnNfZGMuaMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAzOSAr KysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3ZzX2RjX3RvcF9yZWdzLmjCoCB8 wqAgMjcgKysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3ZzX2RybS5jwqDCoMKg wqDCoMKgwqDCoMKgIHwgMTc3ICsrKysrKysrKysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3Zlcmlz aWxpY29uL3ZzX2RybS5owqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyOSArKwo+ID4gwqBkcml2ZXJz L2dwdS9kcm0vdmVyaXNpbGljb24vdnNfaHdkYi5jwqDCoMKgwqDCoMKgwqDCoCB8IDE1MCArKysr KysrKwo+ID4gwqBkcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vdnNfaHdkYi5owqDCoMKgwqDC oMKgwqDCoCB8wqAgMjkgKysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3ZzX3Bs YW5lLmPCoMKgwqDCoMKgwqDCoCB8IDEwMiArKysrKysKPiA+IMKgZHJpdmVycy9ncHUvZHJtL3Zl cmlzaWxpY29uL3ZzX3BsYW5lLmjCoMKgwqDCoMKgwqDCoCB8wqAgNjggKysrKwo+ID4gwqAuLi4v Z3B1L2RybS92ZXJpc2lsaWNvbi92c19wcmltYXJ5X3BsYW5lLmPCoMKgwqAgfCAxNjYgKysrKysr KysrCj4gPiDCoC4uLi9kcm0vdmVyaXNpbGljb24vdnNfcHJpbWFyeV9wbGFuZV9yZWdzLmjCoMKg IHzCoCA1MyArKysKPiA+IMKgMjEgZmlsZXMgY2hhbmdlZCwgMTgxOSBpbnNlcnRpb25zKCspCj4g PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vS2NvbmZp Zwo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL01h a2VmaWxlCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGlj b24vdnNfYnJpZGdlLmMKPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92 ZXJpc2lsaWNvbi92c19icmlkZ2UuaAo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3ZlcmlzaWxpY29uL3ZzX2JyaWRnZV9yZWdzLmgKPiA+IMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19jcnRjLmMKPiA+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19jcnRjLmgKPiA+IMKgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19jcnRjX3JlZ3Mu aAo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3Zz X2RjLmMKPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNv bi92c19kYy5oCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmVyaXNp bGljb24vdnNfZGNfdG9wX3JlZ3MuaAo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3ZlcmlzaWxpY29uL3ZzX2RybS5jCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vdnNfZHJtLmgKPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19od2RiLmMKPiA+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19od2RiLmgKPiA+IMKgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19wbGFuZS5jCj4gPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vdnNfcGxhbmUu aAo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3Zz X3ByaW1hcnlfcGxhbmUuYwo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQKPiA+IGRyaXZlcnMvZ3B1 L2RybS92ZXJpc2lsaWNvbi92c19wcmltYXJ5X3BsYW5lX3JlZ3MuaAo+ID4gCj4gCj4gLi4uCj4g Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3ZzX2JyaWRnZS5j Cj4gPiBiL2RyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19icmlkZ2UuYwo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMDAuLmM4Y2FmMzFmYWM3ZDYKPiA+ IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19i cmlkZ2UuYwo+IAo+IC4uLgo+IAo+ID4gK3N0YXRpYyBib29sIHZzX2JyaWRnZV9vdXRfZHBfZm10 X3N1cHBvcnRlZCh1MzIgb3V0X2ZtdCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25l ZCBpbnQgaTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHZzZGNfZHBfc3VwcG9ydGVkX2ZtdHMpOyBpKyspCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHZzZGNfZHBfc3VwcG9ydGVkX2ZtdHNbaV0ubGludXhfZm10ID09IG91 dF9mbXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuICEoaSA9PSBBUlJBWV9TSVpF KHZzZGNfZHBfc3VwcG9ydGVkX2ZtdHMpKTsKPiAKPiBZb3UgY291bGQgc2ltcGxpZnkgdGhlIHJl dHVybiBzdGF0ZW1lbnQgYnkgcmV0dXJuaW5nIGVhcmx5IGluIHRoZQo+IGxvb3AKPiBpZiBvdXRf Zm10IG1hdGNoZXMuCgpUaGFua3MgZm9yIHRoaXMgdGlwLCB0aGlzIHdhcyBvcmlnaW5hbGx5IGNv ZGVkIGluIHR3byBkaWZmZXJlbnQKZnVuY3Rpb25zLCBidXQgdGhlbiBleHRyYWN0ZWQgdG8gYmUg c3VjaCBhIGNvbW1vbiBmdW5jdGlvbi4KCj4gCj4gPiArfQo+IAo+ID4gK3N0YXRpYyBpbnQgdnNf YnJpZGdlX2RldGVjdF9vdXRwdXRfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2Vfbm9kZQo+ID4gKm9m X25vZGUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG91 dHB1dCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBy ZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUob2Zfbm9kZSwgb3V0cHV0LAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiBWU0RDX09VVFBVVF9JTlRFUkZBQ0VfRFBJKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZW1vdGUpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXQgPSBWU0RDX09VVFBVVF9JTlRFUkZBQ0VfRFBJOwo+ID4gK8KgwqDCoMKgwqDC oMKgfSBlbHNlIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZW1vdGUgPSBv Zl9ncmFwaF9nZXRfcmVtb3RlX25vZGUob2Zfbm9kZSwgb3V0cHV0LAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gVlNEQ19PVVRQVVRfSU5URVJGQUNFX0RQ KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmVtb3RlKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBWU0RDX09V VFBVVF9JTlRFUkZBQ0VfRFA7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxz ZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg PSAtRU5PREVWOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+IAo+IHJlbW90ZSBpcyBsZWFrZWQgaGVy ZSwgaXQgc2hvdWxkIGJlIHJlbGVhc2VkIHdpdGggb2Zfbm9kZV9wdXQgSU1ITy4KClRoYW5rcyBm b3IgdGhpcywgd2lsbCBmaXggaXQuCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsK PiA+ICt9Cj4gPiArCj4gPiArc3RydWN0IHZzX2JyaWRnZSAqdnNfYnJpZGdlX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZzX2NydGMgKmNydGMpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IG91dHB1dCA9IGNydGMtPmlkOwo+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHZzX2JyaWRnZSAqYnJpZGdlOwo+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9icmlkZ2UgKm5leHQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbnVtIHZz X2JyaWRnZV9vdXRwdXRfaW50ZXJmYWNlIGludGY7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0 Owo+IAo+IC4uLgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgYnJpZGdlID0gZGV2bV9remFsbG9jKGRy bV9kZXYtPmRldiwgc2l6ZW9mKCpicmlkZ2UpLAo+ID4gR0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKg wqDCoMKgwqBpZiAoIWJyaWRnZSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAKPiAuLi4KPiAKPiA+ICtlcnJfY2xlYW51cF9lbmNv ZGVyOgo+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2VuY29kZXJfY2xlYW51cCgmYnJpZGdlLT5lbmMp Owo+ID4gK2Vycl9mcmVlX2JyaWRnZToKPiA+ICvCoMKgwqDCoMKgwqDCoGRldm1fa2ZyZWUoZHJt X2Rldi0+ZGV2LCBicmlkZ2UpOwo+IAo+IFRob3VnaCBpcyB0ZWNobmljYWxseSBjb3JyZWN0LCB0 aGlzIGRldm1fa2ZyZWUoKSBpcyB1bm5lY2Vzc2FyeS4KPiBSZXNvdXJjZXMgcmVnaXN0ZXJlZCB3 aXRoIGRldnJlcyBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuCj4gcHJvYmluZwo+IGZh aWxzWzFdWzJdLgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ ICt9Cj4gCj4gLi4uCj4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZlcmlzaWxp Y29uL3ZzX2NydGMuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vdnNfY3J0Yy5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwMC4uNDZjNDE5 MWI4MmY0OQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zlcmlz aWxpY29uL3ZzX2NydGMuYwo+ID4gQEAgLTAsMCArMSwyMTcgQEAKPiAKPiAuLi4KPiAKPiA+ICtz dGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKPiA+ICt2c19jcnRjX21vZGVfdmFsaWQoc3RydWN0 IGRybV9jcnRjICpjcnRjLCBjb25zdCBzdHJ1Y3QKPiA+IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHZzX2NydGMgKnZjcnRjID0gZHJtX2Ny dGNfdG9fdnNfY3J0YyhjcnRjKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB2c19kYyAqZGMg PSB2Y3J0Yy0+ZGM7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgb3V0cHV0ID0gdmNy dGMtPmlkOwo+ID4gK8KgwqDCoMKgwqDCoMKgbG9uZyByYXRlOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKG1vZGUtPmh0b3RhbCA+IDB4N0ZGRikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gTU9ERV9CQURfSFZBTFVFOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KG1vZGUtPnZ0b3RhbCA+IDB4N0ZGRikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gTU9ERV9CQURfVlZBTFVFOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmF0ZSA9 IGNsa19yb3VuZF9yYXRlKGRjLT5waXhfY2xrW291dHB1dF0sIG1vZGUtPmNsb2NrICoKPiA+IDEw MDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJhdGUgPD0gMCkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTU9ERV9DTE9DS19SQU5HRTsKPiAKPiBTb21lIHJvdW5k X3JhdGUgaW1wbGVtZW50YXRpb25zIG1heSBub3QgcmV0dXJuIHplcm8gb3IgZXJyb3Igb24gYW4K PiB1bnN1cHBvcnRlZCBjbG9jayByYXRlLCBpbnN0ZWFkIHRoZXkgc2ltcGx5IHJldHVybiBhIHZh bHVlIGRpZmZlcmluZwo+IGEKPiBsb3QgZnJvbSB0aGUgcmVxdWVzdGVkIHJhdGUuIFRodXMgSSB0 aGluayB5b3Ugc2hvdWxkIGFsc28gY2hlY2sKPiB3aGV0aGVyCj4gdGhlIHJlc3VsdGVkIHJhdGUg aXMgYWNjZXB0YWJsZSBhcyB3ZWxsLCB3aGljaCBhcHBsaWVzIGZvcgo+IHZzX2NydGNfbW9kZV9m aXh1cCgpIGFzIHdlbGwuCgpXZWxsIEkgZG9uJ3Qga25vdyBob3cgdG8gZGVjaWRlIGEgcm91bmQg cmF0ZSBpcyBnb29kIChzb21ldGltZXMgdGhlCmNsb2NrIG1pZ2h0IGJlIGEgbGl0dGxlIG9mZiBi dXQgc2V0dGluZyBpdCBpcyBzdGlsbCBiZXR0ZXIgdGhhbgpyZWplY3RpbmcgdGhlIG91dHB1dCBk ZXZpY2UpLCBzbyBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYQpmdXJ0aGVyIHBy b2JsZW0uCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIE1PREVfT0s7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBib29sIHZzX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlCj4gPiAqYWRqdXN0ZWRfbW9kZSkKPiA+ICt7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgdnNfY3J0YyAqdmNydGMgPSBkcm1fY3J0Y190b192c19jcnRjKGNydGMp Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHZzX2RjICpkYyA9IHZjcnRjLT5kYzsKPiA+ICvC oMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBvdXRwdXQgPSB2Y3J0Yy0+aWQ7Cj4gPiArwqDCoMKg wqDCoMKgwqBsb25nIGNsa19yYXRlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX21vZGVf c2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg LyogRmVlZGJhY2sgdGhlIHBpeGVsIGNsb2NrIHRvIGNydGNfY2xvY2sgKi8KPiA+ICvCoMKgwqDC oMKgwqDCoGNsa19yYXRlID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19jbG9jayAqIDEwMDA7Cj4gPiAr wqDCoMKgwqDCoMKgwqBjbGtfcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGRjLT5waXhfY2xrW291dHB1 dF0sIGNsa19yYXRlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChjbGtfcmF0ZSA8PSAwKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2sgPSBjbGtfcmF0ZSAvIDEwMDA7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gCj4gLi4uCj4g Cj4gPiArc3RydWN0IHZzX2NydGMgKnZzX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt X2Rldiwgc3RydWN0Cj4gPiB2c19kYyAqZGMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBvdXRwdXQpCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHZzX2NydGMgKnZjcnRjOwo+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBy ZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB2Y3J0YyA9IGRldm1fa3phbGxvYyhkcm1fZGV2 LT5kZXYsIHNpemVvZigqdmNydGMpLAo+ID4gR0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKg wqBpZiAoIXZjcnRjKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBF UlJfUFRSKC1FTk9NRU0pOwo+ID4gK8KgwqDCoMKgwqDCoMKgdmNydGMtPmRjID0gZGM7Cj4gPiAr wqDCoMKgwqDCoMKgwqB2Y3J0Yy0+aWQgPSBvdXRwdXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqAvKiBDcmVhdGUgb3VyIHByaW1hcnkgcGxhbmUgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHByaW1h cnkgPSB2c19wcmltYXJ5X3BsYW5lX2luaXQoZHJtX2RldiwgZGMpOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKElTX0VSUihwcmltYXJ5KSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRldl9lcnIoZHJtX2Rldi0+ZGV2LCAiQ291bGRuJ3QgY3JlYXRlIHRoZSBwcmltYXJ5Cj4g PiBwbGFuZVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVS Ul9QVFIoUFRSX0VSUihwcmltYXJ5KSk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gCj4gU3VnZ2Vz dCBkZXZfZXJyX3Byb2JlIHdoaWNoIGhhbmRsZXMgZGVmZXJyZWQgcHJvYmluZyBhcyB3ZWxsLgoK V2VsbCBJIGRvbid0IHRoaW5rIENSVEMvUGxhbmUgaW5pdGlhbGl6YXRpb24gd2lsbCBsZWFkIHRv IGRlZmVycmVkCnByb2JpbmcuCgo+IAo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJt X2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm1fZGV2LCAmdmNydGMtPmJhc2UsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcHJpbWFyeSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOVUxMLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZ2c19jcnRjX2Z1bmNzLAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoE5VTEwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZHJtX2Rldi0+ZGV2LCAiQ291bGRuJ3Qg aW5pdGlhbGl6ZQo+ID4gQ1JUQ1xuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoGRybV9jcnRjX2hlbHBlcl9hZGQoJnZjcnRjLT5iYXNlLCAmdnNfY3J0Y19o ZWxwZXJfZnVuY3MpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHZjcnRjOwo+ID4g K30KPiAKPiAuLi4KPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGlj b24vdnNfZGMuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vdmVyaXNpbGljb24vdnNfZGMuYwo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjk4Mzg0NTU5NTY4 YzQKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNv bi92c19kYy5jCj4gPiBAQCAtMCwwICsxLDIzMyBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAyNSBJ Y2Vub3d5IFpoZW5nIDx1d3VAaWNlbm93eS5tZT4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVk ZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAidnNfY3J0Yy5o Igo+ID4gKyNpbmNsdWRlICJ2c19kYy5oIgo+ID4gKyNpbmNsdWRlICJ2c19kY190b3BfcmVncy5o Igo+ID4gKyNpbmNsdWRlICJ2c19kcm0uaCIKPiA+ICsjaW5jbHVkZSAidnNfaHdkYi5oIgo+ID4g Kwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB2c19kY19yZWdtYXBfY2Zn ID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgLnJlZ19iaXRzID0gMzIsCj4gPiArwqDCoMKgwqDCoMKg wqAudmFsX2JpdHMgPSAzMiwKPiA+ICvCoMKgwqDCoMKgwqDCoC5yZWdfc3RyaWRlID0gc2l6ZW9m KHUzMiksCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBWU0RDX09WTF9DT05GSUdfRVgoMSkgKi8KPiA+ ICvCoMKgwqDCoMKgwqDCoC5tYXhfcmVnaXN0ZXIgPSAweDI1NDQsCj4gPiArwqDCoMKgwqDCoMKg wqAuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsCj4gCj4gSSB0aGluayBjYWNoZV90eXBlID0g UkVHQ0FDSEVfTk9ORSBpcyB0aGUgZGVmYXVsdCwgdGh1cyBpdCBzaG91bGQgYmUKPiBva2F5IHRv IG9taXR0ZWQgaXQ/CgpTb3VuZHMgcmlnaHQuIFRoYW5rcy4KCj4gCj4gPiArfTsKPiAKPiAuLi4K PiAKPiA+ICtzdGF0aWMgaW50IHZzX2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gPiArewo+IAo+IC4uLgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgZGMtPmNvcmVfY2xrID0g ZGV2bV9jbGtfZ2V0KGRldiwgImNvcmUiKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIo ZGMtPmNvcmVfY2xrKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9l cnIoZGV2LCAiY2FuJ3QgZ2V0IGNvcmUgY2xvY2tcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGRjLT5jb3JlX2Nsayk7Cj4gPiArwqDCoMKgwqDC oMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkYy0+YXhpX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJheGkiKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZGMtPmF4aV9jbGsp KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJjYW4n dCBnZXQgYXhpIGNsb2NrXG4iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gUFRSX0VSUihkYy0+YXhpX2Nsayk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqBkYy0+YWhiX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJhaGIiKTsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZGMtPmFoYl9jbGspKSB7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJjYW4ndCBnZXQgYWhiIGNsb2Nr XG4iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUihk Yy0+YWhiX2Nsayk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gCj4gSSB0aGluayBkZXZtX2Nsa19n ZXRfZW5hYmxlZCgpIHdpbGwgaGVscCBoZXJlLgoKVGhhbmtzIGZvciB0aGUgdGlwLCBJIGRvbid0 IGtub3cgd2h5IEkgZm9yZ290IGl0IGhlcmUgKGJlY2F1c2UgSSB1c2VkCmRldm1fY2xrX2dldF9l bmFibGVkIGluIHRoMTUyMC1kdy1oZG1pIGRyaXZlcikuCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKg Zm9yIChpID0gMDsgaSA8IG91dHB1dHM7IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNucHJpbnRmKHBpeGNsa19uYW1lLCBzaXplb2YocGl4Y2xrX25hbWUpLCAicGl4 JXUiLAo+ID4gaSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGMtPnBpeF9j bGtbaV0gPSBkZXZtX2Nsa19nZXQoZGV2LCBwaXhjbGtfbmFtZSk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihkYy0+cGl4X2Nsa1tpXSkpIHsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJj YW4ndCBnZXQgcGl4ZWwgY2xrICV1XG4iLAo+ID4gaSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGRjLT5waXhfY2xrW2ld KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKg wqB9Cj4gCj4gLi4uCj4gCj4gPiArZXJyX2FoYl9jbGtfZGlzYWJsZToKPiA+ICvCoMKgwqDCoMKg wqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShkYy0+YWhiX2Nsayk7Cj4gPiArZXJyX2F4aV9jbGtf ZGlzYWJsZToKPiA+ICvCoMKgwqDCoMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShkYy0+YXhp X2Nsayk7Cj4gPiArZXJyX2NvcmVfY2xrX2Rpc2FibGU6Cj4gPiArwqDCoMKgwqDCoMKgwqBjbGtf ZGlzYWJsZV91bnByZXBhcmUoZGMtPmNvcmVfY2xrKTsKPiAKPiBBbmQgeW91IGNvdWxkIGdldCBh dm9pZCB0aGVzZSBjbGtfZGlzYWJsZV91bnByZXBhcmUoKS4gQWxzbyB0aGUgb25lcwo+IGluCj4g dGhlIHJlbW92ZSBjYWxsYmFjay4KPiAKPiA+ICtlcnJfcnN0X2Fzc2VydDoKPiA+ICvCoMKgwqDC oMKgwqDCoHJlc2V0X2NvbnRyb2xfYnVsa19hc3NlcnQoVlNEQ19SRVNFVF9DT1VOVCwgZGMtPnJz dHMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgdnNfZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHZzX2RjICpkYyA9IGRldl9nZXRfZHJ2ZGF0YSgm cGRldi0+ZGV2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHZzX2RybV9maW5hbGl6ZShkYyk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVM TCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBjbGtfZGlzYWJsZV91bnByZXBhcmUoZGMtPmFo Yl9jbGspOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRjLT5heGlf Y2xrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShkYy0+Y29yZV9j bGspOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzZXRfY29udHJvbF9idWxrX2Fzc2VydChWU0RDX1JF U0VUX0NPVU5ULCBkYy0+cnN0cyk7Cj4gPiArfQo+IAo+IC4uLgo+IAo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19wcmltYXJ5X3BsYW5lLmMKPiA+IGIvZHJp dmVycy9ncHUvZHJtL3ZlcmlzaWxpY29uL3ZzX3ByaW1hcnlfcGxhbmUuYwo+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjI1ZDZlMDFjYzhiNzEKPiA+IC0t LSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92ZXJpc2lsaWNvbi92c19wcmlt YXJ5X3BsYW5lLmMKPiA+IEBAIC0wLDAgKzEsMTY2IEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDI1 IEljZW5vd3kgWmhlbmcgPHV3dUBpY2Vub3d5Lm1lPgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNs dWRlIDxsaW51eC9yZWdtYXAuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUg PGRybS9kcm1fY3J0Yy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2RtYV9oZWxwZXIuaD4K PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9m cmFtZWJ1ZmZlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9hdG9taWNfaGVscGVyLmg+ Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2RtYV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8 ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1f cGxhbmUuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ID4gKwo+ID4gKyNpbmNs dWRlICJ2c19jcnRjLmgiCj4gPiArI2luY2x1ZGUgInZzX3BsYW5lLmgiCj4gPiArI2luY2x1ZGUg InZzX2RjLmgiCj4gPiArI2luY2x1ZGUgInZzX3ByaW1hcnlfcGxhbmVfcmVncy5oIgo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgdnNfcHJpbWFyeV9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlCj4gPiAqc3RhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlID0KPiA+IGRybV9hdG9taWNfZ2V0X25ld19wbGFu ZV9zdGF0ZShzdGF0ZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHBsYW5lKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fY3J0YyAq Y3J0YyA9IG5ld19wbGFuZV9zdGF0ZS0+Y3J0YzsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICgh Y3J0YykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19j cnRjX3N0YXRlKHN0YXRlLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY3J0Yyk7Cj4gCj4gSSB0aGluayB0aGVzZSBhcmd1bWVudHMgY291 bGQgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgbGluZS4KPiAKPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChXQVJOX09OKCFjcnRjX3N0YXRlKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkcm1fYXRv bWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZShuZXdfcGxhbmVfc3RhdGUsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3J0Y19zdGF0ZSwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gRFJNX1BMQU5FX05PX1ND QUxJTkcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ IERSTV9QTEFORV9OT19TQ0FMSU5HLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGZhbHNlLCB0cnVlKTsKPiA+ICt9Cj4gCj4gLi4uCj4gCj4gPiArc3RydWN0 IGRybV9wbGFuZSAqdnNfcHJpbWFyeV9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlCj4gPiAq ZHJtX2Rldiwgc3RydWN0IHZzX2RjICpkYykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqBwbGFuZSA9IGRldm1fa3phbGxvYyhkcm1fZGV2LT5kZXYsIHNpemVv ZigqcGxhbmUpLAo+ID4gR0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIXBsYW5l KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKC1FTk9N RU0pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9p bml0KGRybV9kZXYsIHBsYW5lLCAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZ2c19wcmltYXJ5 X3BsYW5lX2Z1bmNzLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRjLT5pZGVudGl0eS5mb3JtYXRz LT5hcnJheSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYy0+aWRlbnRpdHkuZm9ybWF0cy0+bnVt LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5VTEwsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZtX2tmcmVlKGRybV9kZXYtPmRldiwgcGxhbmUpOwo+IAo+IFNpbWlsYXIgdG8g dnNfYnJpZGdlX2luaXQncyBjYXNlLCB0aGlzIGRldm1fa2ZyZWUoKSBpc24ndAo+IHVubmVjZXNz YXJ5LAo+IGVpdGhlci4KPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gRVJSX1BUUihyZXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsCj4gPiAmdnNfcHJpbWFyeV9wbGFuZV9o ZWxwZXJfZnVuY3MpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHBsYW5lOwo+ID4g K30KPiAKPiBCZXN0IHJlZ2FyZHMsCj4gWWFvIFppCj4gCj4gWzFdOgo+IGh0dHBzOi8vZWxpeGly LmJvb3RsaW4uY29tL2xpbnV4L3Y2LjE2L3NvdXJjZS9kcml2ZXJzL2Jhc2UvZGQuYyNMNzIzCj4g WzJdOgo+IGh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y2LjE2L3NvdXJjZS9kcml2 ZXJzL2Jhc2UvZGQuYyNMNTQ5Cgo=