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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27090C636CD for ; Fri, 10 Feb 2023 15:05:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232425AbjBJPFt (ORCPT ); Fri, 10 Feb 2023 10:05:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232024AbjBJPFo (ORCPT ); Fri, 10 Feb 2023 10:05:44 -0500 Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D5B635AB13 for ; Fri, 10 Feb 2023 07:05:08 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 5F121345E7; Fri, 10 Feb 2023 15:04:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1676041478; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=6T+z7Kg6ZItuIo2AWTrVqhduj2yF9XjOPBrmQKQ65w8=; b=tEN2EME6sujtE88m74Plkcw1HrX7JwBPNkf72kT2qLscQYG+0Rsu3GiKPKVU2OrtKekRMa HwTIdPCKnCz5AGb2vtYzfDLbWlbYJePww8UnoyNd+QqlzMk4XGrwI+bZFN3nFDHnrQR06h X6JKqiWi9Uyp2pxzqlMgKQ+2Nvmpj7g= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1676041478; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=6T+z7Kg6ZItuIo2AWTrVqhduj2yF9XjOPBrmQKQ65w8=; b=m3Ebf+iixAw/DFJ2wcW/U0KY1x/W+OCpJ9GRjZfXeKWAeaCigH3ITe5qQIKyy3zLRXqq8Q r8oPZDbvl5LD7ZBQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 16F031325E; Fri, 10 Feb 2023 15:04:38 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id XMjKBAZd5mM4WwAAMHmgww (envelope-from ); Fri, 10 Feb 2023 15:04:38 +0000 Message-ID: <1b9df663-5dbc-d7f2-a1d6-41594983f1f0@suse.de> Date: Fri, 10 Feb 2023 16:04:37 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v2] drm: add kms driver for loongson display controller Content-Language: en-US To: suijingfeng <15330273260@189.cn>, Maarten Lankhorst , Maxime Ripard , David Airlie , Daniel Vetter , suijingfeng Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <20230205161724.488421-1-15330273260@189.cn> From: Thomas Zimmermann In-Reply-To: <20230205161724.488421-1-15330273260@189.cn> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------SDsInXzM34qv4DqWVRTGrMSC" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------SDsInXzM34qv4DqWVRTGrMSC Content-Type: multipart/mixed; boundary="------------EeZ8jFUWyvKv2xHMdnt8nMiA"; protected-headers="v1" From: Thomas Zimmermann To: suijingfeng <15330273260@189.cn>, Maarten Lankhorst , Maxime Ripard , David Airlie , Daniel Vetter , suijingfeng Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Message-ID: <1b9df663-5dbc-d7f2-a1d6-41594983f1f0@suse.de> Subject: Re: [PATCH v2] drm: add kms driver for loongson display controller References: <20230205161724.488421-1-15330273260@189.cn> In-Reply-To: <20230205161724.488421-1-15330273260@189.cn> --------------EeZ8jFUWyvKv2xHMdnt8nMiA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMDUuMDIuMjMgdW0gMTc6MTcgc2NocmllYiBzdWlqaW5nZmVuZzoNCj4gRnJv bTogc3VpamluZ2ZlbmcgPHN1aWppbmdmZW5nQGxvb25nc29uLmNuPg0KPiANCj4gTG9vbmdz b24gZGlzcGxheSBjb250cm9sbGVyIElQIGhhcyBiZWVuIGludGVncmF0ZWQgaW4gYm90aCBM b29uZ3Nvbg0KPiBOb3J0aCBCcmlkZ2UgY2hpcHNldChsczdhMTAwMCBhbmQgbHM3YTIwMDAp IGFuZCBMb29uZ3NvbiBTb0NzKGxzMmsxMDAwDQo+IGFuZCBsczJrMjAwMCBldGMpLCBpdCBl dmVuIGJlZW4gaW5jbHVkZWQgaW4gTG9vbmdzb24gQk1DIHByb2R1Y3RzLg0KPiANCj4gVGhl IGRpc3BsYXkgY29udHJvbGxlciBpcyBhIFBDSSBkZXZpY2UsIGl0IGhhcyB0d28gZGlzcGxh eSBwaXBlLg0KPiBGb3IgdGhlIERDIGluIExTN0ExMDAwIGFuZCBMUzJLMTAwMCBlYWNoIHdh eSBoYXMgYSBEVk8gb3V0cHV0IGludGVyZmFjZQ0KPiB3aGljaCBwcm92aWRlIFJHQjg4OCBz aWduYWxzLCB2ZXJ0aWNhbCAmIGhvcml6b250YWwgc3luY2hyb25pc2F0aW9ucywNCj4gYW5k IHRoZSBwaXhlbCBjbG9jay4gRWFjaCBDUlRDIGlzIGFibGUgdG8gc3VwcG9ydCAxOTIweDEw ODBANjBIeiwNCj4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpcyAyMDQ4eDIwNDggYWNjb3Jk aW5nIHRvIHRoZSBoYXJkd2FyZSBzcGVjLg0KPiANCj4gRm9yIHRoZSBEQyBpbiBMUzdBMjAw MCwgZWFjaCBkaXNwbGF5IHBpcGUgaXMgY29ubmVjdGVkIHdpdGggYSBidWlsdC1pbg0KPiBI RE1JIGVuY29kZXIgd2hpY2ggc3VwcG9ydCAzODQweDIxNjBAMzBIei4gdGhlIGZpcnN0IGRp c3BsYXkgcGlwZSBpcw0KPiBhbHNvIGVxdWlwcGVkIHdpdGggYSB0cmFuc3BhcmVudCB2Z2Eg ZW5jb2RlciB3aGljaCBpcyBwYXJhbGxlbCB3aXRoDQo+IHRoZSBoZG1pIGVuY29kZXIuIFRo ZSBEQyBpbiBMUzdBMjAwMCBpcyBtb3JlIGNvbXBsZXRlLCBiZXNpZGVzIGFib3ZlDQo+IGZl YXR1cmUsIGl0IGhhcyB0d28gaGFyZHdhcmUgY3Vyc29ycywgdHdvIGhhcmR3YXJlIHZibGFu ayBjb3VudGVyIGFuZA0KPiB0d28gc2Nhbm91dCBwb3NpdGlvbiByZWNvZGVycy4gSXQgYWxz byBzdXBwb3J0IGhkbWkgYXVkaW8gYW5kIHRpbGVkDQo+IGZvcm1hdCBldGMuDQo+IA0KPiAg IHYyOg0KPiAgICAxKSBVc2UgaHBkIHN0YXR1cyByZWcgd2hlbiBwb2xsaW5nIGZvciBsczdh MjAwMA0KPiAgICAyKSBGaXggYWxsIHdhcm5pbmdzIGVtZXJnZWQgd2hlbiBjb21waWxlIHdp dGggVz0xDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBzdWlqaW5nZmVuZyA8c3VpamluZ2ZlbmdA bG9vbmdzb24uY24+DQo+IFNpZ25lZC1vZmYtYnk6IHN1aWppbmdmZW5nIDwxNTMzMDI3MzI2 MEAxODkuY24+DQo+IC0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAg ICAgIHwgICAyICsNCj4gICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICB8 ICAgMSArDQo+ICAgZHJpdmVycy9ncHUvZHJtL2xzZGMvS2NvbmZpZyAgICAgICAgfCAgMTcg Kw0KPiAgIGRyaXZlcnMvZ3B1L2RybS9sc2RjL01ha2VmaWxlICAgICAgIHwgIDE0ICsNCj4g ICBkcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX2NydGMuYyAgICB8IDQyMSArKysrKysrKysr KysrKysrKysNCj4gICBkcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX2RlYnVnZnMuYyB8IDE5 MSArKysrKysrKysNCj4gICBkcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX2Rydi5jICAgICB8 IDYzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICAgZHJpdmVycy9ncHUvZHJt L2xzZGMvbHNkY19kcnYuaCAgICAgfCAyNzQgKysrKysrKysrKysrDQo+ICAgZHJpdmVycy9n cHUvZHJtL2xzZGMvbHNkY19pMmMuYyAgICAgfCAyMDEgKysrKysrKysrDQo+ICAgZHJpdmVy cy9ncHUvZHJtL2xzZGMvbHNkY19pcnEuYyAgICAgfCAgODYgKysrKw0KPiAgIGRyaXZlcnMv Z3B1L2RybS9sc2RjL2xzZGNfb3V0cHV0LmMgIHwgNDUyICsrKysrKysrKysrKysrKysrKysr DQo+ICAgZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19wbGFuZS5jICAgfCA0NDMgKysrKysr KysrKysrKysrKysrKw0KPiAgIGRyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcGxsLmMgICAg IHwgNTY5ICsrKysrKysrKysrKysrKysrKysrKysrKysNCj4gICBkcml2ZXJzL2dwdS9kcm0v bHNkYy9sc2RjX3BsbC5oICAgICB8ICA3OCArKysrDQo+ICAgZHJpdmVycy9ncHUvZHJtL2xz ZGMvbHNkY19yZWdzLmMgICAgfCAgMjkgKysNCj4gICBkcml2ZXJzL2dwdS9kcm0vbHNkYy9s c2RjX3JlZ3MuaCAgICB8IDI5NiArKysrKysrKysrKysrDQo+ICAgMTYgZmlsZXMgY2hhbmdl ZCwgMzcwOSBpbnNlcnRpb25zKCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9sc2RjL0tjb25maWcNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2xzZGMvTWFrZWZpbGUNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2xzZGMvbHNkY19jcnRjLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2xzZGMvbHNkY19kZWJ1Z2ZzLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19kcnYuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX2Rydi5oDQo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfaTJjLmMNCj4gICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19pcnEuYw0KPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX291dHB1dC5jDQo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcGxhbmUuYw0KPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX3BsbC5jDQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcGxsLmgNCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19yZWdzLmMN Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19yZWdz LmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnDQo+IGluZGV4IGRjMGY5NGYwMmE4Mi4uM2JhZWNkNDg5MzBi IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZw0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZw0KPiBAQCAtMzY3LDYgKzM2Nyw4IEBAIHNvdXJjZSAiZHJp dmVycy9ncHUvZHJtL3NvbG9tb24vS2NvbmZpZyINCj4gICANCj4gICBzb3VyY2UgImRyaXZl cnMvZ3B1L2RybS9zcHJkL0tjb25maWciDQo+ICAgDQo+ICtzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9sc2RjL0tjb25maWciDQo+ICsNCj4gICBjb25maWcgRFJNX0hZUEVSVg0KPiAgIAl0 cmlzdGF0ZSAiRFJNIFN1cHBvcnQgZm9yIEh5cGVyLVYgc3ludGhldGljIHZpZGVvIGRldmlj ZSINCj4gICAJZGVwZW5kcyBvbiBEUk0gJiYgUENJICYmIE1NVSAmJiBIWVBFUlYNCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQ0KPiBpbmRleCBhYjQ0NjBmY2Q2M2YuLjVhOGUyZmM4ZGQ1ZCAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQ0KPiBAQCAtMTkwLDMgKzE5MCw0IEBAIG9iai15CQkJKz0gZ3VkLw0KPiAg IG9iai0kKENPTkZJR19EUk1fSFlQRVJWKSArPSBoeXBlcnYvDQo+ICAgb2JqLXkJCQkrPSBz b2xvbW9uLw0KPiAgIG9iai0kKENPTkZJR19EUk1fU1BSRCkgKz0gc3ByZC8NCj4gK29iai0k KENPTkZJR19EUk1fTFNEQykgKz0gbHNkYy8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9sc2RjL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbHNkYy9LY29uZmlnDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOGI5YmI2OTk2ODc3 DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2xzZGMvS2NvbmZp Zw0KPiBAQCAtMCwwICsxLDE3IEBADQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+ICsNCj4gK2NvbmZpZyBEUk1fTFNEQw0KPiArCXRyaXN0YXRlICJEUk0gc3Vw cG9ydCBmb3IgbG9vbmdzb24gZGlzcGxheSBjb250cm9sbGVyIg0KPiArCWRlcGVuZHMgb24g RFJNICYmIFBDSSAmJiAoTUFDSF9MT09OR1NPTjY0IHx8IExPT05HQVJDSCB8fCBNSVBTKQ0K DQpJZiBwb3NzaWJsZSwgSSdkIGFkZCBhIHNpbmdsZSAnZGVwZW5kcyBvbicgc3RhdGVtZW50 IGZvciBlYWNoIEFORCANCmNvbmRpdGlvbi4gTGlrZSB0aGlzDQoNCiAgIGRlcGVuZHMgb24g RFJNDQogICBkZXBlbmRzIG9uIFBDSQ0KICAgZGVwZW5kcyBvbiAoTUFDSF9MT09OR1NPTjY0 IHx8IExPT05HQVJDSCB8fCBNSVBTKQ0KDQpEb2VzIGl0IGJ1aWxkIG9uIG90aGVyIGFyY2hp dGVjdHVyZXMgaWYgeW91IGFkZCBDT01QSUxFX1RFU1QgdG8gdGhhdCANCmxpc3Qgb2YgYXJj aGl0ZWN0dXJlcz8gSWYgc28sIGl0IHdvdWxkIHNpbXBsaWZ5IHRlc3RpbmcgYSBsb3QuDQoN Cj4gKwlzZWxlY3QgT0YNCg0KSSBkb24ndCB0aGluayB0aGF0IGl0IGlzIGFsbG93ZWQgdG8g c2VsZWN0IE9GLiBSYXRoZXIgdXNlDQoNCiAgIGRlcGVuZHMgb24gT0YNCg0KSSB0aGluayB0 aGF0IGdlbmVyYWwgcnVsZSBpcyB0aGF0IGl0IGlzIG5vdCBhbGxvd2VkIHRvIGF1dG8tc2Vs ZWN0IA0Kb3B0aW9ucyB0aGF0IGFyZSBzZWxlY3RhYmxlIGJ5IHVzZXJzLiBUaGF0J3MgdGhl IGNhc2UgZm9yIE9GLg0KDQoNCj4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVINCj4gKwlzZWxl Y3QgRFJNX1RUTQ0KPiArCXNlbGVjdCBEUk1fVFRNX0hFTFBFUg0KPiArCXNlbGVjdCBEUk1f VlJBTV9IRUxQRVINCj4gKwlkZWZhdWx0IG0NCg0KTm8gZGVmYXVsdCwgZXNwZWNpYWxseSBu b3QgJ20nLiBFdmVyeXRoaW5nIHNob3VsZCBiZSBvZmYgYnkgZGVmYXVsdC4NCg0KPiArCWhl bHANCj4gKwkgIFRoaXMgaXMgYSBLTVMgZHJpdmVyIGZvciBsb29uZ3NvbiBkaXNwbGF5IGNv bnRyb2xsZXIgaW4gdGhlDQo+ICsJICBMUzdBMTAwMC9MUzdBMjAwMCBicmlkZ2UgY2hpcCBh bmQgTFMySzEwMDAvTFMySzA1MDAgU29DLg0KPiArCSAgSWYgIk0iIGlzIHNlbGVjdGVkLCB0 aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxzZGMuDQo+ICsNCj4gKwkgIElmIGluIGRvdWJ0 LCBzYXkgIlkiLg0KDQpBbHdheXMgc2F5ICJOIiBieSBkZWZhdWx0LiBUaGVyZSBhcmUgYSBm ZXcgZXhjZXB0aW9ucyB3aGVyZSAieWVzIiBpcyANCmFkdmlzZWQsIGJ1dCByZWd1bGFyIGRy aXZlcnMgYXJlIG5vdCBvbmUgb2YgdGhlbS4NCg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2xzZGMvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbHNkYy9NYWtlZmlsZQ0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ0YjkwMWVj MDljZg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL01h a2VmaWxlDQo+IEBAIC0wLDAgKzEsMTQgQEANCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCj4gKw0KPiArbHNkYy15IDo9IFwNCj4gKwlsc2RjX2Rydi5vIFwNCj4g Kwlsc2RjX2NydGMubyBcDQo+ICsJbHNkY19pcnEubyBcDQo+ICsJbHNkY19wbGFuZS5vIFwN Cj4gKwlsc2RjX3BsbC5vIFwNCj4gKwlsc2RjX2kyYy5vIFwNCj4gKwlsc2RjX291dHB1dC5v IFwNCj4gKwlsc2RjX3JlZ3MubyBcDQo+ICsJbHNkY19kZWJ1Z2ZzLm8NCg0KUGxlYXNlIGFs d2F5cyBzb3J0IHN1Y2ggbGlzdHMgYWxwaGFiZXRpY2FsbHkuDQoNCj4gKw0KPiArb2JqLSQo Q09ORklHX0RSTV9MU0RDKSArPSBsc2RjLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9sc2RjL2xzZGNfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19jcnRj LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lMjNl NjA4NWY0MTgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbHNk Yy9sc2RjX2NydGMuYw0KPiBAQCAtMCwwICsxLDQyMSBAQA0KPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4gKw0KPiArI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5r Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4NCj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4NCg0KU2FtZSBoZXJlLCBhbHBoYWJldGljYWwgc29ydGlu Zy4NCg0KPiArI2luY2x1ZGUgImxzZGNfZHJ2LmgiDQo+ICsjaW5jbHVkZSAibHNkY19yZWdz LmgiDQo+ICsjaW5jbHVkZSAibHNkY19wbGwuaCINCg0KU29ydGluZy4NCg0KPiArDQo+ICtz dGF0aWMgaW50IGxzZGNfY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykNCj4gK3sNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYgPSB0b19sc2RjKGNydGMt PmRldik7DQo+ICsJdW5zaWduZWQgaW50IGluZGV4ID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7 DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCXZhbCA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENf SU5UX1JFRyk7DQo+ICsNCj4gKwlpZiAoaW5kZXggPT0gMCkNCj4gKwkJdmFsIHw9IElOVF9D UlRDMF9WU19FTjsNCj4gKwllbHNlIGlmIChpbmRleCA9PSAxKQ0KPiArCQl2YWwgfD0gSU5U X0NSVEMxX1ZTX0VOOw0KPiArDQo+ICsJbHNkY193cmVnMzIobGRldiwgTFNEQ19JTlRfUkVH LCB2YWwpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGxzZGNfY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpDQo+ICt7 DQo+ICsJc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhjcnRjLT5kZXYpOw0K PiArCXVuc2lnbmVkIGludCBpbmRleCA9IGRybV9jcnRjX2luZGV4KGNydGMpOw0KPiArCXUz MiB2YWw7DQo+ICsNCj4gKwl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0lOVF9SRUcp Ow0KPiArDQo+ICsJaWYgKGluZGV4ID09IDApDQo+ICsJCXZhbCAmPSB+SU5UX0NSVEMwX1ZT X0VOOw0KPiArCWVsc2UgaWYgKGluZGV4ID09IDEpDQo+ICsJCXZhbCAmPSB+SU5UX0NSVEMx X1ZTX0VOOw0KPiArDQo+ICsJbHNkY193cmVnMzIobGRldiwgTFNEQ19JTlRfUkVHLCB2YWwp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2RjX2NydGNfcmVzZXQoc3RydWN0IGRy bV9jcnRjICpjcnRjKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0 Yy0+ZGV2Ow0KPiArCXN0cnVjdCBsc2RjX2RldmljZSAqbGRldiA9IHRvX2xzZGMoZGRldik7 DQo+ICsJdW5zaWduZWQgaW50IGluZGV4ID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7DQo+ICsJ c3RydWN0IGxzZGNfY3J0Y19zdGF0ZSAqcHJpdl9jcnRjX3N0YXRlOw0KPiArCXUzMiB2YWwg PSBDRkdfUkVTRVRfTiB8IExTRENfUEZfWFJHQjg4ODg7DQo+ICsNCj4gKwlpZiAoaW5kZXgg PT0gMCkNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DUlRDMF9DRkdfUkVHLCB2YWwp Ow0KPiArCWVsc2UgaWYgKGluZGV4ID09IDEpDQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExT RENfQ1JUQzFfQ0ZHX1JFRywgdmFsKTsNCj4gKw0KPiArCWlmIChjcnRjLT5zdGF0ZSkgew0K PiArCQlwcml2X2NydGNfc3RhdGUgPSB0b19sc2RjX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUp Ow0KPiArCQlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSgmcHJpdl9j cnRjX3N0YXRlLT5iYXNlKTsNCj4gKwkJa2ZyZWUocHJpdl9jcnRjX3N0YXRlKTsNCj4gKwl9 DQo+ICsNCj4gKwlwcml2X2NydGNfc3RhdGUgPSBremFsbG9jKHNpemVvZigqcHJpdl9jcnRj X3N0YXRlKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFwcml2X2NydGNfc3RhdGUpDQo+ICsJ CXJldHVybjsNCj4gKw0KPiArCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldChjcnRj LCAmcHJpdl9jcnRjX3N0YXRlLT5iYXNlKTsNCj4gKw0KPiArCWRybV9pbmZvKGRkZXYsICJD UlRDLSV1IHJlc2V0XG4iLCBpbmRleCk7DQoNCk5vIGRybV9pbmZvKCkgaGVyZS4gWW91IGNv dWxkIHVzZSBkcm1fZGJnKCkgaWYgeW91IHJlYWxseSB3YW50IHRvIHByaW50IA0Kc29tZXRo aW5nLiBJJ2QgYWR2aXNlIHRvIHNpbXBseSByZW1vdmUgdGhhdCBsaW5lLg0KDQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGxzZGNfY3J0Y19hdG9taWNfZGVzdHJveV9zdGF0ZShzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsDQo+ICsJCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq c3RhdGUpDQo+ICt7DQo+ICsJc3RydWN0IGxzZGNfY3J0Y19zdGF0ZSAqcHJpdl9jcnRjX3N0 YXRlID0gdG9fbHNkY19jcnRjX3N0YXRlKHN0YXRlKTsNCj4gKw0KPiArCV9fZHJtX2F0b21p Y19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKCZwcml2X2NydGNfc3RhdGUtPmJhc2UpOw0K PiArDQo+ICsJa2ZyZWUocHJpdl9jcnRjX3N0YXRlKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqDQo+ICtsc2RjX2NydGNfYXRvbWljX2R1cGxpY2F0 ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpDQo+ICt7DQo+ICsJc3RydWN0IGxzZGNf Y3J0Y19zdGF0ZSAqbmV3X3ByaXZfc3RhdGU7DQo+ICsJc3RydWN0IGxzZGNfY3J0Y19zdGF0 ZSAqb2xkX3ByaXZfc3RhdGU7DQo+ICsNCj4gKwluZXdfcHJpdl9zdGF0ZSA9IGttYWxsb2Mo c2l6ZW9mKCpuZXdfcHJpdl9zdGF0ZSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghbmV3X3By aXZfc3RhdGUpDQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ICsJX19kcm1fYXRvbWljX2hl bHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAmbmV3X3ByaXZfc3RhdGUtPmJhc2Up Ow0KPiArDQo+ICsJb2xkX3ByaXZfc3RhdGUgPSB0b19sc2RjX2NydGNfc3RhdGUoY3J0Yy0+ c3RhdGUpOw0KPiArDQo+ICsJbWVtY3B5KCZuZXdfcHJpdl9zdGF0ZS0+cHBhcm1zLCAmb2xk X3ByaXZfc3RhdGUtPnBwYXJtcywNCj4gKwkgICAgICAgc2l6ZW9mKG5ld19wcml2X3N0YXRl LT5wcGFybXMpKTsNCj4gKw0KPiArCXJldHVybiAmbmV3X3ByaXZfc3RhdGUtPmJhc2U7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB1MzIgbHNkY19nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0 IGRybV9jcnRjICpjcnRjKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0g Y3J0Yy0+ZGV2Ow0KPiArCXN0cnVjdCBsc2RjX2RldmljZSAqbGRldiA9IHRvX2xzZGMoZGRl dik7DQo+ICsJY29uc3Qgc3RydWN0IGxzZGNfZGVzYyAqZGVzY3AgPSBsZGV2LT5kZXNjcDsN Cj4gKwlzdHJ1Y3QgbHNkY19kaXNwbGF5X3BpcGUgKmRpc3BpcGUgPSBjcnRjX3RvX2Rpc3Bs YXlfcGlwZShjcnRjKTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkaXNwaXBlLT5pbmRl eDsNCj4gKw0KPiArCS8qIGZhbGxiYWNrIHRvIHNvZnR3YXJlIGVtdWxhdGVkIFZCTEFOSyBj b3VudGVyICovDQo+ICsJaWYgKCFkZXNjcC0+aGFzX3ZibGFua19jb3VudGVyKQ0KPiArCQln b3RvIGZhbGxiYWNrOw0KPiArDQo+ICsJaWYgKGluZGV4ID09IDApDQo+ICsJCXJldHVybiBs c2RjX3JyZWczMihsZGV2LCBMU0RDX0NSVEMwX1ZTWU5DX0NPVU5URVJfUkVHKTsNCj4gKw0K PiArCWlmIChpbmRleCA9PSAxKQ0KPiArCQlyZXR1cm4gbHNkY19ycmVnMzIobGRldiwgTFNE Q19DUlRDMV9WU1lOQ19DT1VOVEVSX1JFRyk7DQo+ICsNCj4gK2ZhbGxiYWNrOg0KPiArCXJl dHVybiAodTMyKWRybV9jcnRjX3ZibGFua19jb3VudChjcnRjKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBsc2RjX2NydGNfZnVuY3MgPSB7 DQoNCk15IGFkdmlzZSBmb3IgdGhlIGRlc2lnbiBpcyB0byB1bnRhbmdsZSB0aGUgZGlmZmVy ZW50IGNhc2VzIGludG8gc21hbGxlciANCmhlbHBlcnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4N Cg0KWW91IGhhdmUgc2V2ZXJhbCBjaGlwcyB3aXRoIG11bHRpcGxlIHBpcGVsaW5lcy4gSSB3 b3VsZCBhZHZpc2UgdG8gDQpwcm92aWRlIGEgZnVuY3MgYXJyYXkgZm9yIGVhY2ggcG9zc2li bGUgY2FzZS4gRm9yIGV4YW1wbGU6DQoNCiAgIHUzMiBsc2RjX2NydGMwX2dldF92Ymxhbmtf Y291bnRlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpDQogICB7DQoJLy8gcmV0dXJuIExTRENf Q1JUQzBfVlNZTkNfQ09VTlRFUl9SRUcNCiAgIH0NCg0KICAgdTMyIGxzZGNfY3J0YzFfZ2V0 X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykNCiAgIHsNCgkvLyByZXR1 cm4gTFNEQ19DUlRDMV9WU1lOQ19DT1VOVEVSX1JFRw0KICAgfQ0KDQphbmQgdXNlIGEgZGlm ZmVyZW50IGZ1bmNzIGluc3RhbmNlIGZvciBlYWNoIHBpcGVsaW5lDQoNCiAgIHN0cnVjdCBs c2RjX2NydGMwX2Z1bmNzX2xzMmsyMDAwID0gew0KCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBs c2RjX2NydGMwX2dldF92YmxhbmtfY291bnRlciwNCiAgIH07DQoNCiAgIHN0cnVjdCBsc2Rj X2NydGMxX2Z1bmNzX2xzMmsyMDAwID0gew0KCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBsc2Rj X2NydGMxX2dldF92YmxhbmtfY291bnRlciwNCiAgIH07DQoNCkZvciBoYXJkd2FyZSB3aXRo b3V0IHZibGFuayBjb3VudGVyLCB1c2UgYW5vdGhlciBpbnN0YW5jZQ0KDQogICBzdHJ1Y3Qg bHNkY19jcnRjMF9mdW5jc19sczJrMDUwMCA9IHsNCgkvLyBubw0KICAgfTsNCg0KQXQgZmly c3QsIHRoaXMgbG9va3MgbGlrZSBhIGxvdCBvZiBjb2RlLiBCdXQgaW4gdGhlIGxvbmcgdGVy bSwgdGhpcyBwYXlzIA0Kb2YsIGJlY2F1c2UgaXQncyBzbyBtdWNoIG1vcmUgbWFpbnRhaW5h YmxlLiBJZiB5b3UgaGF2ZSBmdW5jdGlvbnMgdGhhdCANCndvcmsgd2l0aCBhbnkgQ1JUQywg eW91IGNhbiBzdGlsbCBzaGFyZSB0aGUgaW1wbGVtZW50YXRpb24uDQoNCkFsbCB0aGlzIGdv ZXMgZm9yIG90aGVyIGNvbXBvbmVudHMgYXMgd2VsbC4NCg0KWW91IG1heSB3YW50IHRvIHN0 dWR5IG1nYWcyMDAuIEl0IHN1cHBvcnRzIH4xMCBjaGlwcy4gSGFuZGxpbmcgdGhpcyBpbiAN CnNpbmdsZSBmdW5jdGlvbnMgd2FzIHVubWFpbnRhaW5hYmxlLiBTbyB3ZSBzcGxpdCBldmVy eXRoaW5nIGludG8gc21hbGxlciANCmhlbHBlcnMgdGhhdCBlYWNoIGhhbmRsZSBhIHNpbmds ZSBjYXNlLiBBbmQgdGhlbiB3ZSBidWlsZCBhIGRlZGljYXRlZCANCm1vZGVzZXR0aW5nIHBp cGVsaW5lIGZvciBlYWNoIGNoaXAgZnJvbSB2YXJpb3VzIGhlbHBlcnMuIENvbW1vbiBjb2Rl IGlzIA0Kc2hhcmVkIGFtb25nIHRoZSBjaGlwcy4NCg0KSGVyZSdzIHdoZXJlIHdlIHNlbGVj dCB0aGUgY2hpcDoNCg0KIA0KaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvbGF0 ZXN0L3NvdXJjZS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX2Rydi5jI0wyMjcN Cg0KVGhlcmUncyBhIHNvdXJjZSBmaWxlIGZvciBlYWNoIGNoaXAgYW5kIHRoZSBjb21tb24g c291cmNlIGNvZGUgaXMgaW4NCg0KIA0KaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGlu dXgvbGF0ZXN0L3NvdXJjZS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUu Yw0KDQoNCj4gKwkucmVzZXQgPSBsc2RjX2NydGNfcmVzZXQsDQo+ICsJLmRlc3Ryb3kgPSBk cm1fY3J0Y19jbGVhbnVwLA0KPiArCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJf c2V0X2NvbmZpZywNCj4gKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9m bGlwLA0KPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gbHNkY19jcnRjX2F0b21pY19k dXBsaWNhdGVfc3RhdGUsDQo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gbHNkY19jcnRj X2F0b21pY19kZXN0cm95X3N0YXRlLA0KPiArCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBsc2Rj X2dldF92YmxhbmtfY291bnRlciwNCj4gKwkuZW5hYmxlX3ZibGFuayA9IGxzZGNfY3J0Y19l bmFibGVfdmJsYW5rLA0KPiArCS5kaXNhYmxlX3ZibGFuayA9IGxzZGNfY3J0Y19kaXNhYmxl X3ZibGFuaywNCj4gKwkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBkcm1fY3J0Y192Ymxhbmtf aGVscGVyX2dldF92YmxhbmtfdGltZXN0YW1wLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGVu dW0gZHJtX21vZGVfc3RhdHVzDQo+ICtsc2RjX2NydGNfbW9kZV92YWxpZChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsDQo+ICsJCSAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7 DQo+ICsJc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhkZGV2KTsNCj4gKwlj b25zdCBzdHJ1Y3QgbHNkY19kZXNjICpkZXNjcCA9IGxkZXYtPmRlc2NwOw0KPiArDQo+ICsJ aWYgKG1vZGUtPmhkaXNwbGF5ID4gZGVzY3AtPm1heF93aWR0aCkNCj4gKwkJcmV0dXJuIE1P REVfQkFEX0hWQUxVRTsNCj4gKwlpZiAobW9kZS0+dmRpc3BsYXkgPiBkZXNjcC0+bWF4X2hl aWdodCkNCj4gKwkJcmV0dXJuIE1PREVfQkFEX1ZWQUxVRTsNCj4gKw0KPiArCWlmIChtb2Rl LT5jbG9jayA+IGRlc2NwLT5tYXhfcGl4ZWxfY2xrKSB7DQo+ICsJCWRybV9kYmcoZGRldiwg Im1vZGUgJWR4JWQsIHBpeGVsIGNsb2NrPSVkIGlzIHRvbyBoaWdoXG4iLA0KPiArCQkJbW9k ZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT5jbG9jayk7DQo+ICsJCXJldHVy biBNT0RFX0NMT0NLX0hJR0g7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKChtb2RlLT5oZGlzcGxh eSAqIDQpICUgZGVzY3AtPnBpdGNoX2FsaWduKSB7DQo+ICsJCWRybV9kYmcoZGRldiwgInN0 cmlkZSBpcyByZXF1aXJlIHRvIG5vdCAldSBieXRlcyBhbGlnbmVkXG4iLA0KPiArCQkJZGVz Y3AtPnBpdGNoX2FsaWduKTsNCj4gKwkJcmV0dXJuIE1PREVfQkFEOw0KPiArCX0NCj4gKw0K PiArCXJldHVybiBNT0RFX09LOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxzZGNfcGl4 cGxsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+ICsJCQkJICAgIHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpDQo+ICt7DQo+ICsJc3RydWN0IGxzZGNfZGlz cGxheV9waXBlICpkaXNwaXBlID0gY3J0Y190b19kaXNwbGF5X3BpcGUoY3J0Yyk7DQo+ICsJ c3RydWN0IGxzZGNfcGxsICpwaXhwbGwgPSAmZGlzcGlwZS0+cGl4cGxsOw0KPiArCWNvbnN0 IHN0cnVjdCBsc2RjX3BpeHBsbF9mdW5jcyAqcGZ1bmNzID0gcGl4cGxsLT5mdW5jczsNCj4g KwlzdHJ1Y3QgbHNkY19jcnRjX3N0YXRlICpwcml2X3N0YXRlID0gdG9fbHNkY19jcnRjX3N0 YXRlKHN0YXRlKTsNCj4gKwlib29sIHJldDsNCj4gKw0KPiArCXJldCA9IHBmdW5jcy0+Y29t cHV0ZShwaXhwbGwsIHN0YXRlLT5tb2RlLmNsb2NrLCAmcHJpdl9zdGF0ZS0+cHBhcm1zKTsN Cj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCWRybV93YXJuKGNydGMt PmRldiwgImZhaWxlZCBmaW5kIFBMTCBwYXJhbWV0ZXJzIGZvciAldVxuIiwgc3RhdGUtPm1v ZGUuY2xvY2spOw0KPiArDQo+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgbHNkY19jcnRjX2hlbHBlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRj ICpjcnRjLA0KPiArCQkJCQkgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQ0KPiAr ew0KPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsNCj4gKw0KPiArCWlmICghY3J0Y19z dGF0ZS0+ZW5hYmxlKQ0KPiArCQlyZXR1cm4gMDsgLyogbm8gbW9kZSBjaGVja3MgaWYgQ1JU QyBpcyBiZWluZyBkaXNhYmxlZCAqLw0KPiArDQo+ICsJcmV0dXJuIGxzZGNfcGl4cGxsX2F0 b21pY19jaGVjayhjcnRjLCBjcnRjX3N0YXRlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbHNkY191cGRhdGVfcGl4Y2xrKHN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSAqZGlzcGlw ZSwNCj4gKwkJCSAgICAgICBzdHJ1Y3QgbHNkY19jcnRjX3N0YXRlICpwcml2X3N0YXRlKQ0K PiArew0KPiArCXN0cnVjdCBsc2RjX3BsbCAqcGl4cGxsID0gJmRpc3BpcGUtPnBpeHBsbDsN Cj4gKwljb25zdCBzdHJ1Y3QgbHNkY19waXhwbGxfZnVuY3MgKmNsa2Z1bmMgPSBwaXhwbGwt PmZ1bmNzOw0KPiArDQo+ICsJY2xrZnVuYy0+dXBkYXRlKHBpeHBsbCwgJnByaXZfc3RhdGUt PnBwYXJtcyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxzZGNfY3J0Y19oZWxwZXJf bW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpDQo+ICt7DQo+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7DQo+ICsJc3RydWN0IGxzZGNfZGV2aWNl ICpsZGV2ID0gdG9fbHNkYyhkZGV2KTsNCj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSA9ICZjcnRjLT5zdGF0ZS0+bW9kZTsNCj4gKwlzdHJ1Y3QgbHNkY19kaXNwbGF5X3Bp cGUgKmRpc3BpcGUgPSBjcnRjX3RvX2Rpc3BsYXlfcGlwZShjcnRjKTsNCj4gKwlzdHJ1Y3Qg bHNkY19jcnRjX3N0YXRlICpwcml2X3N0YXRlID0gdG9fbHNkY19jcnRjX3N0YXRlKGNydGMt PnN0YXRlKTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkaXNwaXBlLT5pbmRleDsNCj4g Kwl1MzIgaF9zeW5jLCB2X3N5bmMsIGhfdmFsLCB2X3ZhbDsNCj4gKwl1MzIgdmFsOw0KPiAr DQo+ICsJLyogMjY6MTYgdG90YWwgcGl4ZWxzLCAxMDowIHZpc2lhYmxlIHBpeGVscywgaW4g aG9yaXpvbnRhbCAqLw0KPiArCWhfdmFsID0gKG1vZGUtPmNydGNfaHRvdGFsIDw8IDE2KSB8 IG1vZGUtPmNydGNfaGRpc3BsYXk7DQo+ICsNCj4gKwkvKiAyNjoxNiB0b3RhbCBwaXhlbHMs IDEwOjAgdmlzaWFibGUgcGl4ZWxzLCBpbiB2ZXJ0aWNhbCAqLw0KPiArCXZfdmFsID0gKG1v ZGUtPmNydGNfdnRvdGFsIDw8IDE2KSB8IG1vZGUtPmNydGNfdmRpc3BsYXk7DQo+ICsJLyog MjY6MTYgaHN5bmMgZW5kLCAxMDowIGhzeW5jIHN0YXJ0LCBiaXQgMzAgaXMgaHN5bmMgZW5h YmxlICovDQo+ICsJaF9zeW5jID0gKG1vZGUtPmNydGNfaHN5bmNfZW5kIDw8IDE2KSB8IG1v ZGUtPmNydGNfaHN5bmNfc3RhcnQgfCBDRkdfSFNZTkNfRU47DQo+ICsJaWYgKG1vZGUtPmZs YWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpDQo+ICsJCWhfc3luYyB8PSBDRkdfSFNZTkNf SU5WOw0KPiArDQo+ICsJLyogMjY6MTYgdnN5bmMgZW5kLCAxMDowIHZzeW5jIHN0YXJ0LCBi aXQgMzAgaXMgdnN5bmMgZW5hYmxlICovDQo+ICsJdl9zeW5jID0gKG1vZGUtPmNydGNfdnN5 bmNfZW5kIDw8IDE2KSB8IG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgfCBDRkdfVlNZTkNfRU47 DQo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpDQo+ICsJCXZf c3luYyB8PSBDRkdfVlNZTkNfSU5WOw0KPiArDQo+ICsJaWYgKGluZGV4ID09IDApIHsNCj4g KwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DUlRDMF9IRElTUExBWV9SRUcsIGhfdmFsKTsN Cj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DUlRDMF9WRElTUExBWV9SRUcsIHZfdmFs KTsNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DUlRDMF9IU1lOQ19SRUcsIGhfc3lu Yyk7DQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1JUQzBfVlNZTkNfUkVHLCB2X3N5 bmMpOw0KPiArDQo+ICsJCXZhbCA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfQ1JUQzBfQ0ZH X1JFRyk7DQo+ICsJCXZhbCA9ICh2YWwgJiB+TFNEQ19ETUFfU1RFUF9NQVNLKSB8IExTRENf RE1BX1NURVBfMjU2X0JZVEVTOw0KPiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0NSVEMw X0NGR19SRUcsIHZhbCk7DQo+ICsJfSBlbHNlIGlmIChpbmRleCA9PSAxKSB7DQo+ICsJCWxz ZGNfd3JlZzMyKGxkZXYsIExTRENfQ1JUQzFfSERJU1BMQVlfUkVHLCBoX3ZhbCk7DQo+ICsJ CWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1JUQzFfVkRJU1BMQVlfUkVHLCB2X3ZhbCk7DQo+ ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1JUQzFfSFNZTkNfUkVHLCBoX3N5bmMpOw0K PiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0NSVEMxX1ZTWU5DX1JFRywgdl9zeW5jKTsN Cj4gKw0KPiArCQl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0NSVEMxX0NGR19SRUcp Ow0KPiArCQl2YWwgPSAodmFsICYgfkxTRENfRE1BX1NURVBfTUFTSykgfCBMU0RDX0RNQV9T VEVQXzI1Nl9CWVRFUzsNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DUlRDMV9DRkdf UkVHLCB2YWwpOw0KPiArCX0NCg0KU2FtZSBoZXJlIGFzIHdpdGggdmJsYW5rOiBoYXZlIG9u ZSBoZWxwZXIgZm9yIGVhY2ggaW5kZXggYW5kIHVzZSANCmRpZmZlcmVudCBfZnVuY3Mgc3Ry dWN0dXJlcyBmb3IgZWFjaCBwaXBlbGluZS4NCg0KPiArDQo+ICsJZHJtX2RiZyhkZGV2LCAi JXMgbW9kZXNldDogJXV4JXVcbiIsDQo+ICsJCWNydGMtPm5hbWUsIG1vZGUtPmhkaXNwbGF5 LCBtb2RlLT52ZGlzcGxheSk7DQo+ICsNCj4gKwlsc2RjX3VwZGF0ZV9waXhjbGsoZGlzcGlw ZSwgcHJpdl9zdGF0ZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxzZGNfZW5hYmxl X2Rpc3BsYXkoc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgp DQo+ICt7DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCWlmIChpbmRleCA9PSAwKSB7DQo+ICsJ CXZhbCA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfQ1JUQzBfQ0ZHX1JFRyk7DQo+ICsJCXZh bCB8PSBDRkdfT1VUUFVUX0VOOw0KPiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0NSVEMw X0NGR19SRUcsIHZhbCk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaW5k ZXggPT0gMSkgew0KPiArCQl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0NSVEMxX0NG R19SRUcpOw0KPiArCQl2YWwgfD0gQ0ZHX09VVFBVVF9FTjsNCj4gKwkJbHNkY193cmVnMzIo bGRldiwgTFNEQ19DUlRDMV9DRkdfUkVHLCB2YWwpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2RjX2Rpc2FibGVfZGlzcGxheShzdHJ1Y3Qg bHNkY19kZXZpY2UgKmxkZXYsIHVuc2lnbmVkIGludCBpbmRleCkNCj4gK3sNCj4gKwl1MzIg dmFsOw0KPiArDQo+ICsJaWYgKGluZGV4ID09IDApIHsNCj4gKwkJdmFsID0gbHNkY19ycmVn MzIobGRldiwgTFNEQ19DUlRDMF9DRkdfUkVHKTsNCj4gKwkJdmFsICY9IH5DRkdfT1VUUFVU X0VOOw0KPiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0NSVEMwX0NGR19SRUcsIHZhbCk7 DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaW5kZXggPT0gMSkgew0KPiAr CQl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0NSVEMxX0NGR19SRUcpOw0KPiArCQl2 YWwgJj0gfkNGR19PVVRQVVRfRU47DQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1JU QzFfQ0ZHX1JFRywgdmFsKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgbHNkY19jcnRjX2hlbHBlcl9hdG9taWNfZW5hYmxlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywNCj4gKwkJCQkJICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0Yy0+ZGV2Ow0KPiAr CXN0cnVjdCBsc2RjX2RldmljZSAqbGRldiA9IHRvX2xzZGMoZGRldik7DQo+ICsNCj4gKwlk cm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7DQo+ICsNCj4gKwlsc2RjX2VuYWJsZV9kaXNwbGF5 KGxkZXYsIGRybV9jcnRjX2luZGV4KGNydGMpKTsNCj4gKw0KPiArCWRybV9kYmcoZGRldiwg IiVzOiBlbmFibGVkXG4iLCBjcnRjLT5uYW1lKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbHNkY19jcnRjX2hlbHBlcl9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsDQo+ICsJCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ICt7 DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7DQo+ICsJc3RydWN0 IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhkZGV2KTsNCj4gKw0KPiArCWxzZGNfZGlz YWJsZV9kaXNwbGF5KGxkZXYsIGRybV9jcnRjX2luZGV4KGNydGMpKTsNCj4gKw0KPiArCWRy bV9jcnRjX3dhaXRfb25lX3ZibGFuayhjcnRjKTsNCj4gKw0KPiArCWRybV9jcnRjX3ZibGFu a19vZmYoY3J0Yyk7DQo+ICsNCj4gKwlkcm1fZGJnKGRkZXYsICIlczogZGlzYWJsZWRcbiIs IGNydGMtPm5hbWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2RjX2NydGNfYXRv bWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywNCj4gKwkJCQkgICBzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ICt7DQo+ICsJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ ZGV2LT5ldmVudF9sb2NrKTsNCj4gKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7DQo+ICsJ CWlmIChkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApDQo+ICsJCQlkcm1fY3J0Y19h cm1fdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7DQo+ICsJCWVsc2UN Cj4gKwkJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5l dmVudCk7DQo+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7DQo+ICsJfQ0KPiArCXNw aW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGJvb2wgbHNkY19jcnRjX2dldF9zY2Fub3V0X3Bvc2l0aW9uKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywNCj4gKwkJCQkJICAgYm9vbCBpbl92YmxhbmtfaXJxLA0KPiArCQkJCQkg ICBpbnQgKnZwb3MsDQo+ICsJCQkJCSAgIGludCAqaHBvcywNCj4gKwkJCQkJICAga3RpbWVf dCAqc3RpbWUsDQo+ICsJCQkJCSAgIGt0aW1lX3QgKmV0aW1lLA0KPiArCQkJCQkgICBjb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGRldiA9IGNydGMtPmRldjsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxk ZXYgPSB0b19sc2RjKGRkZXYpOw0KPiArCXVuc2lnbmVkIGludCBpbmRleCA9IGRybV9jcnRj X2luZGV4KGNydGMpOw0KPiArCWludCBsaW5lLCB2c3csIHZicCwgdmFjdGl2ZV9zdGFydCwg dmFjdGl2ZV9lbmQsIHZmcF9lbmQ7DQo+ICsJdTMyIHZhbCA9IDA7DQo+ICsNCj4gKwl2c3cg PSBtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIG1vZGUtPmNydGNfdnN5bmNfc3RhcnQ7DQo+ICsJ dmJwID0gbW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5jX2VuZDsNCj4gKw0K PiArCXZhY3RpdmVfc3RhcnQgPSB2c3cgKyB2YnAgKyAxOw0KPiArDQo+ICsJdmFjdGl2ZV9l bmQgPSB2YWN0aXZlX3N0YXJ0ICsgbW9kZS0+Y3J0Y192ZGlzcGxheTsNCj4gKw0KPiArCS8q IGxhc3Qgc2NhbiBsaW5lIGJlZm9yZSBWU1lOQyAqLw0KPiArCXZmcF9lbmQgPSBtb2RlLT5j cnRjX3Z0b3RhbDsNCj4gKw0KPiArCWlmIChzdGltZSkNCj4gKwkJKnN0aW1lID0ga3RpbWVf Z2V0KCk7DQo+ICsNCj4gKwlpZiAoaW5kZXggPT0gMCkNCj4gKwkJdmFsID0gbHNkY19ycmVn MzIobGRldiwgTFNEQ19DUlRDMF9TQ0FOX1BPU19SRUcpOw0KPiArCWVsc2UgaWYgKGluZGV4 ID09IDEpDQo+ICsJCXZhbCA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfQ1JUQzFfU0NBTl9Q T1NfUkVHKTsNCj4gKw0KPiArCWxpbmUgPSAodmFsICYgMHhmZmZmKTsNCj4gKw0KPiArCWlm IChsaW5lIDwgdmFjdGl2ZV9zdGFydCkNCj4gKwkJbGluZSAtPSB2YWN0aXZlX3N0YXJ0Ow0K PiArCWVsc2UgaWYgKGxpbmUgPiB2YWN0aXZlX2VuZCkNCj4gKwkJbGluZSA9IGxpbmUgLSB2 ZnBfZW5kIC0gdmFjdGl2ZV9zdGFydDsNCj4gKwllbHNlDQo+ICsJCWxpbmUgLT0gdmFjdGl2 ZV9zdGFydDsNCj4gKw0KPiArCSp2cG9zID0gbGluZTsNCj4gKwkqaHBvcyA9IHZhbCA+PiAx NjsNCj4gKw0KPiArCWlmIChldGltZSkNCj4gKwkJKmV0aW1lID0ga3RpbWVfZ2V0KCk7DQo+ ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbHNkY19jcnRjX2hlbHBlcl9mdW5jcyA9IHsNCj4g KwkubW9kZV92YWxpZCA9IGxzZGNfY3J0Y19tb2RlX3ZhbGlkLA0KPiArCS5tb2RlX3NldF9u b2ZiID0gbHNkY19jcnRjX2hlbHBlcl9tb2RlX3NldF9ub2ZiLA0KPiArCS5hdG9taWNfZW5h YmxlID0gbHNkY19jcnRjX2hlbHBlcl9hdG9taWNfZW5hYmxlLA0KPiArCS5hdG9taWNfZGlz YWJsZSA9IGxzZGNfY3J0Y19oZWxwZXJfYXRvbWljX2Rpc2FibGUsDQo+ICsJLmF0b21pY19j aGVjayA9IGxzZGNfY3J0Y19oZWxwZXJfYXRvbWljX2NoZWNrLA0KPiArCS5hdG9taWNfZmx1 c2ggPSBsc2RjX2NydGNfYXRvbWljX2ZsdXNoLA0KPiArCS5nZXRfc2Nhbm91dF9wb3NpdGlv biA9IGxzZGNfY3J0Y19nZXRfc2Nhbm91dF9wb3NpdGlvbiwNCj4gK307DQo+ICsNCj4gK2lu dCBsc2RjX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwNCj4gKwkJICAgc3Ry dWN0IGRybV9jcnRjICpjcnRjLA0KPiArCQkgICB1bnNpZ25lZCBpbnQgaW5kZXgsDQo+ICsJ CSAgIHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksDQo+ICsJCSAgIHN0cnVjdCBkcm1fcGxh bmUgKmN1cnNvcikNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gZHJtX2Ny dGNfaW5pdF93aXRoX3BsYW5lcyhkZGV2LCBjcnRjLCBwcmltYXJ5LCBjdXJzb3IsDQo+ICsJ CQkJCSZsc2RjX2NydGNfZnVuY3MsDQo+ICsJCQkJCSJDUlRDLSVkIiwgaW5kZXgpOw0KPiAr DQo+ICsJaWYgKHJldCkgew0KPiArCQlkcm1fZXJyKGRkZXYsICJjcnRjIGluaXQgd2l0aCBw bGFuZXMgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ ICsNCj4gKwlkcm1fY3J0Y19oZWxwZXJfYWRkKGNydGMsICZsc2RjX2NydGNfaGVscGVyX2Z1 bmNzKTsNCj4gKw0KPiArCXJldCA9IGRybV9tb2RlX2NydGNfc2V0X2dhbW1hX3NpemUoY3J0 YywgMjU2KTsNCj4gKwlpZiAocmV0KQ0KPiArCQlkcm1fd2FybihkZGV2LCAic2V0IHRoZSBn YW1tYSB0YWJsZSBzaXplIGZhaWxlZFxuIik7DQo+ICsNCj4gKwlkcm1fY3J0Y19lbmFibGVf Y29sb3JfbWdtdChjcnRjLCAwLCBmYWxzZSwgMjU2KTsNCg0KTWF5YmUgbGVhdmUgdGhpcyBv dXQgZm9yIG5vdy4gWW91IG5lZWQgdG8gaGFuZGxlIHRoZSBwcm9wZXJ0eSBpbiB5b3VyIA0K ZHJpdmVyLiBJIGRvbid0IHNlZSBjb2RlIGZvciB0aGF0Lg0KDQpDb2xvciBtYW5hZ2VtZW50 IHNob3VsZCBwcm9iYWJseSBnbyBpbnRvIGEgc2VwYXJhdGUgcGF0Y2guDQoNCj4gKw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xzZGMv bHNkY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX2RlYnVnZnMuYw0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE3NmFlNGUx MWQxYw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xz ZGNfZGVidWdmcy5jDQo+IEBAIC0wLDAgKzEsMTkxIEBADQo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCsNCj4gKw0KPiArI2luY2x1ZGUgPGRybS9kcm1fZGVidWdm cy5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fbWFuYWdlZC5oPg0KPiArI2luY2x1ZGUgPGRy bS9kcm1fZ2VtX3ZyYW1faGVscGVyLmg+DQo+ICsjaW5jbHVkZSAibHNkY19kcnYuaCINCj4g KyNpbmNsdWRlICJsc2RjX3JlZ3MuaCINCj4gKyNpbmNsdWRlICJsc2RjX3BsbC5oIg0KPiAr DQo+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+ICtzdGF0aWMgaW50IGxzZGNfc2hvd19j bG9jayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZh dGU7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBub2RlLT5taW5vci0+ZGV2Ow0K PiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsNCj4gKw0KPiArCWRybV9mb3JfZWFjaF9jcnRj KGNydGMsIGRkZXYpIHsNCj4gKwkJc3RydWN0IGxzZGNfZGlzcGxheV9waXBlICpwaXBlID0g Y3J0Y190b19kaXNwbGF5X3BpcGUoY3J0Yyk7DQo+ICsJCXN0cnVjdCBsc2RjX3BsbCAqcGl4 cGxsID0gJnBpcGUtPnBpeHBsbDsNCj4gKwkJY29uc3Qgc3RydWN0IGxzZGNfcGl4cGxsX2Z1 bmNzICpmdW5jcyA9IHBpeHBsbC0+ZnVuY3M7DQo+ICsJCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGogPSAmY3J0Yy0+c3RhdGUtPm1vZGU7DQo+ICsJCXN0cnVjdCBsc2RjX3BsbF9w YXJtcyBwYXJtczsNCj4gKwkJdW5zaWduZWQgaW50IG91dF9raHo7DQo+ICsNCj4gKwkJb3V0 X2toeiA9IGZ1bmNzLT5nZXRfY2xvY2tfcmF0ZShwaXhwbGwsICZwYXJtcyk7DQo+ICsNCj4g KwkJc2VxX3ByaW50ZihtLCAiRGlzcGxheSBwaXBlICV1OiAlZHglZFxuIiwNCj4gKwkJCSAg IHBpcGUtPmluZGV4LCBhZGotPmhkaXNwbGF5LCBhZGotPnZkaXNwbGF5KTsNCj4gKw0KPiAr CQlzZXFfcHJpbnRmKG0sICJGcmVxdWVuY3kgYWN0dWFsbHkgb3V0cHV0OiAldSBrSHpcbiIs IG91dF9raHopOw0KPiArCQlzZXFfcHJpbnRmKG0sICJQaXhlbCBjbG9jayByZXF1aXJlZDog JWQga0h6XG4iLCBhZGotPmNsb2NrKTsNCj4gKwkJc2VxX3ByaW50ZihtLCAiZGlmZjogJWQg a0h6XG4iLCBhZGotPmNsb2NrKTsNCj4gKw0KPiArCQlzZXFfcHJpbnRmKG0sICJkaXZfcmVm PSV1LCBsb29wYz0ldSwgZGl2X291dD0ldVxuIiwNCj4gKwkJCSAgIHBhcm1zLmRpdl9yZWYs IHBhcm1zLmxvb3BjLCBwYXJtcy5kaXZfb3V0KTsNCj4gKw0KPiArCQlzZXFfcHJpbnRmKG0s ICJoc3luY19zdGFydD0lZCwgaHN5bmNfZW5kPSVkLCBodG90YWw9JWRcbiIsDQo+ICsJCQkg ICBhZGotPmhzeW5jX3N0YXJ0LCBhZGotPmhzeW5jX2VuZCwgYWRqLT5odG90YWwpOw0KPiAr CQlzZXFfcHJpbnRmKG0sICJ2c3luY19zdGFydD0lZCwgdnN5bmNfZW5kPSVkLCB2dG90YWw9 JWRcblxuIiwNCj4gKwkJCSAgIGFkai0+dnN5bmNfc3RhcnQsIGFkai0+dnN5bmNfZW5kLCBh ZGotPnZ0b3RhbCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbHNkY19zaG93X21tKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJn KQ0KPiArew0KPiArCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1f aW5mb19ub2RlICopbS0+cHJpdmF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9 IG5vZGUtPm1pbm9yLT5kZXY7DQo+ICsJc3RydWN0IGRybV9wcmludGVyIHAgPSBkcm1fc2Vx X2ZpbGVfcHJpbnRlcihtKTsNCj4gKw0KPiArCWRybV9tbV9wcmludCgmZGRldi0+dm1hX29m ZnNldF9tYW5hZ2VyLT52bV9hZGRyX3NwYWNlX21tLCAmcCk7DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArI2RlZmluZSBSRUdERUYocmVnKSB7IF9fc3RyaW5naWZ5XzEo TFNEQ18jI3JlZyMjX1JFRyksIExTRENfIyNyZWcjI19SRUcgfQ0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB7DQo+ICsJY29uc3QgY2hhciAqbmFtZTsNCj4gKwl1MzIgcmVnX29mZnNldDsN Cj4gK30gbHNkY19yZWdzX2FycmF5W10gPSB7DQo+ICsJUkVHREVGKENVUlNPUjBfQ0ZHKSwN Cj4gKwlSRUdERUYoQ1VSU09SMF9BRERSX0xPKSwNCj4gKwlSRUdERUYoQ1VSU09SMF9BRERS X0hJKSwNCj4gKwlSRUdERUYoQ1VSU09SMF9QT1NJVElPTiksDQo+ICsJUkVHREVGKENVUlNP UjBfQkdfQ09MT1IpLA0KPiArCVJFR0RFRihDVVJTT1IwX0ZHX0NPTE9SKSwNCj4gKwlSRUdE RUYoSU5UKSwNCj4gKwlSRUdERUYoQ1JUQzBfQ0ZHKSwNCj4gKwlSRUdERUYoQ1JUQzBfU1RS SURFKSwNCj4gKwlSRUdERUYoQ1JUQzBfRkJfT1JJR0lOKSwNCj4gKwlSRUdERUYoQ1JUQzBf SERJU1BMQVkpLA0KPiArCVJFR0RFRihDUlRDMF9IU1lOQyksDQo+ICsJUkVHREVGKENSVEMw X1ZESVNQTEFZKSwNCj4gKwlSRUdERUYoQ1JUQzBfVlNZTkMpLA0KPiArCVJFR0RFRihDUlRD MF9HQU1NQV9JTkRFWCksDQo+ICsJUkVHREVGKENSVEMwX0dBTU1BX0RBVEEpLA0KPiArCVJF R0RFRihDUlRDMV9DRkcpLA0KPiArCVJFR0RFRihDUlRDMV9TVFJJREUpLA0KPiArCVJFR0RF RihDUlRDMV9GQl9PUklHSU4pLA0KPiArCVJFR0RFRihDUlRDMV9IRElTUExBWSksDQo+ICsJ UkVHREVGKENSVEMxX0hTWU5DKSwNCj4gKwlSRUdERUYoQ1JUQzFfVkRJU1BMQVkpLA0KPiAr CVJFR0RFRihDUlRDMV9WU1lOQyksDQo+ICsJUkVHREVGKENSVEMxX0dBTU1BX0lOREVYKSwN Cj4gKwlSRUdERUYoQ1JUQzFfR0FNTUFfREFUQSksDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMg aW50IGxzZGNfc2hvd19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQ0KPiAr ew0KPiArCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19u b2RlICopbS0+cHJpdmF0ZTsNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IG5vZGUt Pm1pbm9yLT5kZXY7DQo+ICsJc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhk ZGV2KTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGxzZGNfcmVnc19hcnJheSk7IGkrKykgew0KPiArCQl1MzIgb2Zmc2V0ID0gbHNkY19yZWdz X2FycmF5W2ldLnJlZ19vZmZzZXQ7DQo+ICsJCWNvbnN0IGNoYXIgKm5hbWUgPSBsc2RjX3Jl Z3NfYXJyYXlbaV0ubmFtZTsNCj4gKw0KPiArCQlzZXFfcHJpbnRmKG0sICIlcyAoMHglMDR4 KTogMHglMDh4XG4iLA0KPiArCQkJICAgbmFtZSwgb2Zmc2V0LCBsc2RjX3JyZWczMihsZGV2 LCBvZmZzZXQpKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBsc2RjX3Nob3dfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICphcmcpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAo c3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRlOw0KPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkZGV2ID0gbm9kZS0+bWlub3ItPmRldjsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2Ug KmxkZXYgPSB0b19sc2RjKGRkZXYpOw0KPiArDQo+ICsJc2VxX3ByaW50ZihtLCAiQ1JUQy0w IHZibGFuayBjb3VudGVyOiAlMDh1XG4iLA0KPiArCQkgICBsc2RjX3JyZWczMihsZGV2LCBM U0RDX0NSVEMwX1ZTWU5DX0NPVU5URVJfUkVHKSk7DQo+ICsNCj4gKwlzZXFfcHJpbnRmKG0s ICJDUlRDLTEgdmJsYW5rIGNvdW50ZXI6ICUwOHVcbiIsDQo+ICsJCSAgIGxzZGNfcnJlZzMy KGxkZXYsIExTRENfQ1JUQzFfVlNZTkNfQ09VTlRFUl9SRUcpKTsNCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxzZGNfc2hvd19zY2FuX3Bvc2l0aW9u KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQ0KPiArew0KPiArCXN0cnVjdCBkcm1f aW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopbS0+cHJpdmF0ZTsN Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IG5vZGUtPm1pbm9yLT5kZXY7DQo+ICsJ c3RydWN0IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhkZGV2KTsNCj4gKwl1MzIgdmFs MCA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfQ1JUQzBfU0NBTl9QT1NfUkVHKTsNCj4gKwl1 MzIgdmFsMSA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfQ1JUQzFfU0NBTl9QT1NfUkVHKTsN Cj4gKw0KPiArCXNlcV9wcmludGYobSwgIkNSVEMtMDogeDogJTA4dSwgeTogJTA4dVxuIiwN Cj4gKwkJICAgdmFsMCA+PiAxNiwgdmFsMCAmIDB4RkZGRik7DQo+ICsNCj4gKwlzZXFfcHJp bnRmKG0sICJDUlRDLTE6IHg6ICUwOHUsIHk6ICUwOHVcbiIsDQo+ICsJCSAgIHZhbDEgPj4g MTYsIHZhbDEgJiAweEZGRkYpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbHNkY19zaG93X2ZiX2FkZHIoc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICphcmcpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0 IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRlOw0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2ID0gbm9kZS0+bWlub3ItPmRldjsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYg PSB0b19sc2RjKGRkZXYpOw0KPiArCXUzMiBsbywgaGk7DQo+ICsJdTMyIHZhbDsNCj4gKw0K PiArCXZhbCA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfQ1JUQzBfQ0ZHX1JFRyk7DQo+ICsJ aWYgKHZhbCAmIENGR19GQl9JTl9VU0lORykgew0KPiArCQlsbyA9IGxzZGNfcnJlZzMyKGxk ZXYsIExTRENfQ1JUQzBfRkIxX0xPX0FERFJfUkVHKTsNCj4gKwkJaGkgPSBsc2RjX3JyZWcz MihsZGV2LCBMU0RDX0NSVEMwX0ZCMV9ISV9BRERSX1JFRyk7DQo+ICsJCXNlcV9wcmludGYo bSwgIkNSVEMtMCB1c2luZyBmYjE6IDB4JXg6JXhcbiIsIGhpLCBsbyk7DQo+ICsJfSBlbHNl IHsNCj4gKwkJbG8gPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0NSVEMwX0ZCMF9MT19BRERS X1JFRyk7DQo+ICsJCWhpID0gbHNkY19ycmVnMzIobGRldiwgTFNEQ19DUlRDMF9GQjBfSElf QUREUl9SRUcpOw0KPiArCQlzZXFfcHJpbnRmKG0sICJDUlRDLTAgdXNpbmcgZmIwOiAweCV4 OiV4XG4iLCBoaSwgbG8pOw0KPiArCX0NCj4gKw0KPiArCXZhbCA9IGxzZGNfcnJlZzMyKGxk ZXYsIExTRENfQ1JUQzFfQ0ZHX1JFRyk7DQo+ICsJaWYgKHZhbCAmIENGR19GQl9JTl9VU0lO Rykgew0KPiArCQlsbyA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfQ1JUQzFfRkIxX0xPX0FE RFJfUkVHKTsNCj4gKwkJaGkgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0NSVEMxX0ZCMV9I SV9BRERSX1JFRyk7DQo+ICsJCXNlcV9wcmludGYobSwgIkNSVEMtMSB1c2luZyBmYjE6IDB4 JXg6JXhcbiIsIGhpLCBsbyk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJbG8gPSBsc2RjX3JyZWcz MihsZGV2LCBMU0RDX0NSVEMxX0ZCMF9MT19BRERSX1JFRyk7DQo+ICsJCWhpID0gbHNkY19y cmVnMzIobGRldiwgTFNEQ19DUlRDMV9GQjBfSElfQUREUl9SRUcpOw0KPiArCQlzZXFfcHJp bnRmKG0sICJDUlRDLTEgdXNpbmcgZmIwOiAweCV4OiV4XG4iLCBoaSwgbG8pOw0KPiArCX0N Cj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGRybV9p bmZvX2xpc3QgbHNkY19kZWJ1Z2ZzX2xpc3RbXSA9IHsNCj4gKwl7ICJjbG9ja3MiLCAgIGxz ZGNfc2hvd19jbG9jaywgMCB9LA0KPiArCXsgIm1tIiwgICAgICAgbHNkY19zaG93X21tLCAw LCBOVUxMIH0sDQo+ICsJeyAicmVncyIsICAgICBsc2RjX3Nob3dfcmVncywgMCB9LA0KPiAr CXsgInZibGFua3MiLCAgbHNkY19zaG93X3ZibGFua19jb3VudGVyLCAwLCBOVUxMIH0sDQo+ ICsJeyAic2Nhbl9wb3MiLCBsc2RjX3Nob3dfc2Nhbl9wb3NpdGlvbiwgMCwgTlVMTCB9LA0K PiArCXsgImZiX2FkZHIiLCAgbHNkY19zaG93X2ZiX2FkZHIsIDAsIE5VTEwgfSwNCj4gK307 DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICt2b2lkIGxzZGNfZGVidWdmc19pbml0KHN0cnVj dCBkcm1fbWlub3IgKm1pbm9yKQ0KPiArew0KPiArI2lmZGVmIENPTkZJR19ERUJVR19GUw0K PiArCWRybV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyhsc2RjX2RlYnVnZnNfbGlzdCwNCj4gKwkJ CQkgQVJSQVlfU0laRShsc2RjX2RlYnVnZnNfbGlzdCksDQo+ICsJCQkJIG1pbm9yLT5kZWJ1 Z2ZzX3Jvb3QsDQo+ICsJCQkJIG1pbm9yKTsNCj4gKyNlbmRpZg0KPiArfQ0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9sc2RjL2xzZGNfZHJ2LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMDAwLi4zYmQ0NTdlNmU5ODANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX2Rydi5jDQo+IEBAIC0wLDAgKzEsNjM1IEBADQo+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4gKy8qDQo+ICsgKiBLTVMg ZHJpdmVyIGZvciBMb29uZ3NvbiBkaXNwbGF5IGNvbnRyb2xsZXINCj4gKyAqIENvcHlyaWdo dCAoQykgMjAyMiBMb29uZ3NvbiBDb3Jwb3JhdGlvbg0KPiArICoNCj4gKyAqIEF1dGhvcnM6 DQo+ICsgKiAgICAgIExpIFlpIDxsaXlpQGxvb25nc29uLmNuPg0KPiArICogICAgICBMaSBD aGVueWFuZyA8bGljaGVueWFuZ0Bsb29uZ3Nvbi5jbj4NCj4gKyAqICAgICAgU3VpIEppbmdm ZW5nIDxzdWlqaW5nZmVuZ0Bsb29uZ3Nvbi5jbj4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fYXBlcnR1 cmUuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPg0KPiArI2luY2x1ZGUgPGRy bS9kcm1fZmJfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdnJhbV9oZWxw ZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4N Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9o ZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiZGV2X2dlbmVyaWMuaD4NCj4gKyNp bmNsdWRlICJsc2RjX2Rydi5oIg0KDQpBbHBoZWJldGljYWwgb3JkZXIuDQoNCj4gKw0KPiAr c3RhdGljIGludCBsc2RjX2NoaXAgPSAtMTsNCj4gK01PRFVMRV9QQVJNX0RFU0MoY2hpcCwg Im92ZXJyaWRlIGNoaXAgaWQgKC0xID0gcHJvYmVkIGJ5IGRyaXZlciIpOw0KPiArbW9kdWxl X3BhcmFtX25hbWVkKGNoaXAsIGxzZGNfY2hpcCwgaW50LCAwNjQ0KTsNCg0KVGhhdCdzIGEg ZGV2ZWxvcG1lbnQgb3B0aW9uLiBCZXR0ZXIgbm90IGFkZCBpdCB0byB0aGUgcHVibGlzaGVk IGRyaXZlci4NCg0KPiArDQo+ICsvKg0KPiArICogbHM3YTEwMDAgYW5kIGxzN2EyMDAwIGlz IG5vdCBvbmx5IHVzZWQgd2l0aCBsb29uZ3NvbiBkZXNrdG9wIGNsYXNzIENQVQ0KPiArICog YnV0IGFsc28gbG9vbmdzb24gc2VydmVyIGNsYXNzIENQVXMgKExTM0M1MDAwQDIuMkdIeiAx NiBjb3JlKS4gTG9vbmdzb24NCj4gKyAqIHNlcnZlciBwcm9kdWN0cyBnZW5lcmFsbHkgZG9u J3QgaGFzIGEgZGVkaWNhdGVkIHZyYW0gbW91bnRlZCBmb3IgY29zdA0KPiArICogcmVhc29u LCBpdCB3aWxsIHVzZSBhc3BlZWQgYm1jIGFzIGl0cyBkaXNwbGF5IG9uIGl0cyBmaW5hbCBh bmQgZm9ybWFsDQo+ICsgKiBwcm9kdWN0LiBsc2RjLmhhc192cmFtPTAgaXMgbWFpbmx5IGJl IHVzZSBpbiBkZXZlbG9waW5nIHBoYXNlIG9mIHRoZQ0KPiArICogcHJvZHVjdC4gV2hlbiBh IGJvYXJkIGRvbid0IGhhcyBhIGRlZGljYXRlZCB2cmFtIG1vdW50ZWQsIHdlIGNhbiBwdXQN Cj4gKyAqIHRoZSBmcmFtZWJ1ZmZlciBvbiBzeXN0ZW0gUkFNLg0KPiArICovDQo+ICtzdGF0 aWMgaW50IGxzZGNfaGFzX3ZyYW0gPSAtMTsNCj4gK01PRFVMRV9QQVJNX0RFU0MoaGFzX3Zy YW0sICJoYXMgb24tYm9hcmQgZ3B1IG1lbW9yeSBpbiByZWFsaXR5ICgwID0gbm8sIC0xID0g ZGVmYXVsdCIpOw0KPiArbW9kdWxlX3BhcmFtX25hbWVkKGhhc192cmFtLCBsc2RjX2hhc192 cmFtLCBpbnQsIDA2NDQpOw0KDQpTYW1lIGhlcmUuIFRoYXQncyBmb3IgZGV2ZWxvcG1lbnQu DQoNCj4gKw0KPiArI2RlZmluZSBEUklWRVJfQVVUSE9SCQkiU3VpIEppbmdmZW5nIDxzdWlq aW5nZmVuZ0Bsb29uZ3Nvbi5jbj4iDQo+ICsjZGVmaW5lIERSSVZFUl9OQU1FCQkibHNkYyIN Cj4gKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJkcm0gZHJpdmVyIGZvciBsb29uZ3NvbidzIGRp c3BsYXkgY29udHJvbGxlciINCj4gKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDIyMDcwMSIN Cj4gKyNkZWZpbmUgRFJJVkVSX01BSk9SCQkxDQo+ICsjZGVmaW5lIERSSVZFUl9NSU5PUgkJ MA0KPiArI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkwDQo+ICsNCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbHNkY19kZXNjIGRjX2luX2xzMmswNTAwID0gew0KDQpUaG9zZSBkZXNjcmlw dGlvbiBzdHJ1Y3RzIGFyZSBhIHR3by1lZGdlZCBzd29yZCBJTUhPLg0KDQo+ICsJLmNoaXAg PSBDSElQX0xTMkswNTAwLA0KPiArCS5udW1fb2ZfY3J0YyA9IExTRENfTlVNX0NSVEMsDQo+ ICsJLm1heF9waXhlbF9jbGsgPSAyMDAwMDAsDQo+ICsJLm1heF93aWR0aCA9IDIwNDgsDQo+ ICsJLm1heF9oZWlnaHQgPSAyMDQ4LA0KPiArCS5od19jdXJzb3JfdyA9IDMyLA0KPiArCS5o d19jdXJzb3JfaCA9IDMyLA0KPiArCS5waXRjaF9hbGlnbiA9IDI1NiwNCj4gKwkubWNfYml0 cyA9IDQwLA0KDQpUaGVzZSBhcmUgZGV2aWNlIGNvbnN0YW50cyBhcmUgcHJvYmFibHkgZmlu ZS4NCg0KPiArCS5udW1fb2ZfaHdfY3Vyc29yID0gMSwNCj4gKwkuaGFzX3ZibGFua19jb3Vu dGVyID0gZmFsc2UsDQo+ICsJLmhhc19idWlsdGluX2kyYyA9IGZhbHNlLA0KPiArCS5oYXNf dnJhbSA9IGZhbHNlLA0KPiArCS5oYXNfaHBkX3JlZyA9IGZhbHNlLA0KPiArCS5pc19zb2Mg PSB0cnVlLA0KDQpCdXQgZnJvbSBhIHF1aWNrIGxvb2sgdGhyb3VnaCB0aGUgY29kZSwgdGhl c2Ugc2V0dGluZ3MgYWZmZWN0IGNvbnRyb2wgDQpmbG93IGFuZC9vciBtb2Rlc2V0dGluZyBw aXBlbGluZXMuIFRoZXkgYXJlIG9mdGVuIGJldHRlciBpbXBsZW1lbnRlZCBieSANCmRlZGlj YXRlZCBoZWxwZXJzIGFzIG91dGxpbmVkIGluIG15IGNvbW1lbnRzIGFib3V0IHZibGFuayBh bmQgbWdhZzIwMC4NCg0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBsc2Rj X2Rlc2MgZGNfaW5fbHMyazEwMDAgPSB7DQo+ICsJLmNoaXAgPSBDSElQX0xTMksxMDAwLA0K PiArCS5udW1fb2ZfY3J0YyA9IExTRENfTlVNX0NSVEMsDQo+ICsJLm1heF9waXhlbF9jbGsg PSAyMDAwMDAsDQo+ICsJLm1heF93aWR0aCA9IDIwNDgsDQo+ICsJLm1heF9oZWlnaHQgPSAy MDQ4LA0KPiArCS5udW1fb2ZfaHdfY3Vyc29yID0gMSwNCj4gKwkuaHdfY3Vyc29yX3cgPSAz MiwNCj4gKwkuaHdfY3Vyc29yX2ggPSAzMiwNCj4gKwkucGl0Y2hfYWxpZ24gPSAyNTYsDQo+ ICsJLm1jX2JpdHMgPSA0MCwNCj4gKwkuaGFzX3ZibGFua19jb3VudGVyID0gZmFsc2UsDQo+ ICsJLmhhc19idWlsdGluX2kyYyA9IGZhbHNlLA0KPiArCS5oYXNfdnJhbSA9IGZhbHNlLA0K PiArCS5oYXNfaHBkX3JlZyA9IGZhbHNlLA0KPiArCS5pc19zb2MgPSB0cnVlLA0KPiArfTsN Cj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBsc2RjX2Rlc2MgZGNfaW5fbHMyazIwMDAg PSB7DQo+ICsJLmNoaXAgPSBDSElQX0xTMksyMDAwLA0KPiArCS5udW1fb2ZfY3J0YyA9IExT RENfTlVNX0NSVEMsDQo+ICsJLm1heF9waXhlbF9jbGsgPSAzNTAwMDAsDQo+ICsJLm1heF93 aWR0aCA9IDQwOTYsDQo+ICsJLm1heF9oZWlnaHQgPSA0MDk2LA0KPiArCS5udW1fb2ZfaHdf Y3Vyc29yID0gMiwNCj4gKwkuaHdfY3Vyc29yX3cgPSA2NCwNCj4gKwkuaHdfY3Vyc29yX2gg PSA2NCwNCj4gKwkucGl0Y2hfYWxpZ24gPSAyNTYsDQo+ICsJLm1jX2JpdHMgPSA0MCwNCj4g KwkuaGFzX3ZibGFua19jb3VudGVyID0gdHJ1ZSwNCj4gKwkuaGFzX2J1aWx0aW5faTJjID0g dHJ1ZSwNCj4gKwkuaGFzX3ZyYW0gPSBmYWxzZSwNCj4gKwkuaGFzX2hwZF9yZWcgPSB0cnVl LA0KPiArCS5pc19zb2MgPSB0cnVlLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBsc2RjX2Rlc2MgZGNfaW5fbHM3YTEwMDAgPSB7DQo+ICsJLmNoaXAgPSBDSElQX0xT N0ExMDAwLA0KPiArCS5udW1fb2ZfY3J0YyA9IExTRENfTlVNX0NSVEMsDQo+ICsJLm1heF9w aXhlbF9jbGsgPSAyMDAwMDAsDQo+ICsJLm1heF93aWR0aCA9IDIwNDgsDQo+ICsJLm1heF9o ZWlnaHQgPSAyMDQ4LA0KPiArCS5udW1fb2ZfaHdfY3Vyc29yID0gMSwNCj4gKwkuaHdfY3Vy c29yX3cgPSAzMiwNCj4gKwkuaHdfY3Vyc29yX2ggPSAzMiwNCj4gKwkucGl0Y2hfYWxpZ24g PSAyNTYsDQo+ICsJLm1jX2JpdHMgPSA0MCwNCj4gKwkuaGFzX3ZibGFua19jb3VudGVyID0g ZmFsc2UsDQo+ICsJLmhhc19idWlsdGluX2kyYyA9IHRydWUsDQo+ICsJLmhhc192cmFtID0g dHJ1ZSwNCj4gKwkuaGFzX2hwZF9yZWcgPSBmYWxzZSwNCj4gKwkuaXNfc29jID0gZmFsc2Us DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGxzZGNfZGVzYyBkY19pbl9s czdhMjAwMCA9IHsNCj4gKwkuY2hpcCA9IENISVBfTFM3QTIwMDAsDQo+ICsJLm51bV9vZl9j cnRjID0gTFNEQ19OVU1fQ1JUQywNCj4gKwkubWF4X3BpeGVsX2NsayA9IDM1MDAwMCwNCj4g KwkubWF4X3dpZHRoID0gNDA5NiwNCj4gKwkubWF4X2hlaWdodCA9IDQwOTYsDQo+ICsJLm51 bV9vZl9od19jdXJzb3IgPSAyLA0KPiArCS5od19jdXJzb3JfdyA9IDY0LA0KPiArCS5od19j dXJzb3JfaCA9IDY0LA0KPiArCS5waXRjaF9hbGlnbiA9IDI1NiwNCj4gKwkubWNfYml0cyA9 IDQwLCAvKiBzdXBwb3J0IDQ4LCBidXQgdXNlIDQwIGZvciBiYWNrd2FyZCBjb21wYXRpYmls aXR5ICovDQo+ICsJLmhhc192YmxhbmtfY291bnRlciA9IHRydWUsDQo+ICsJLmhhc19idWls dGluX2kyYyA9IHRydWUsDQo+ICsJLmhhc192cmFtID0gdHJ1ZSwNCj4gKwkuaGFzX2hwZF9y ZWcgPSB0cnVlLA0KPiArCS5pc19zb2MgPSBmYWxzZSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBpbnQgbHNkY19nZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLA0KPiAr CQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LA0KPiArCQkJCXN0cnVjdCBkcm1fbW9kZV9j cmVhdGVfZHVtYiAqYXJncykNCj4gK3sNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYg PSB0b19sc2RjKGRkZXYpOw0KPiArCWNvbnN0IHN0cnVjdCBsc2RjX2Rlc2MgKmRlc2NwID0g bGRldi0+ZGVzY3A7DQo+ICsNCj4gKwlyZXR1cm4gZHJtX2dlbV92cmFtX2ZpbGxfY3JlYXRl X2R1bWIoZmlsZSwgZGRldiwgMCwgZGVzY3AtPnBpdGNoX2FsaWduLCBhcmdzKTsNCj4gK30N Cj4gKw0KPiArREVGSU5FX0RSTV9HRU1fRk9QUyhsc2RjX2dlbV9mb3BzKTsNCj4gKw0KPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZHJpdmVyIGxzZGNfZHJtX2RyaXZlciA9IHsNCj4g KwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX01PREVTRVQgfCBEUklWRVJfR0VNIHwgRFJJ VkVSX0FUT01JQywNCj4gKwkuZm9wcyA9ICZsc2RjX2dlbV9mb3BzLA0KPiArDQo+ICsJLm5h bWUgPSBEUklWRVJfTkFNRSwNCj4gKwkuZGVzYyA9IERSSVZFUl9ERVNDLA0KPiArCS5kYXRl ID0gRFJJVkVSX0RBVEUsDQo+ICsJLm1ham9yID0gRFJJVkVSX01BSk9SLA0KPiArCS5taW5v ciA9IERSSVZFUl9NSU5PUiwNCj4gKwkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVM LA0KPiArDQo+ICsJLmRlYnVnZnNfaW5pdCA9IGxzZGNfZGVidWdmc19pbml0LA0KPiArCS5k dW1iX2NyZWF0ZSA9IGxzZGNfZ2VtX2R1bWJfY3JlYXRlLA0KPiArCS5kdW1iX21hcF9vZmZz ZXQgPSBkcm1fZ2VtX3R0bV9kdW1iX21hcF9vZmZzZXQsDQo+ICsJLmdlbV9wcmltZV9tbWFw ID0gZHJtX2dlbV9wcmltZV9tbWFwLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbHNkY19tb2RlX2NvbmZpZ19mdW5jcyA9IHsN Cj4gKwkuZmJfY3JlYXRlID0gZHJtX2dlbV9mYl9jcmVhdGUsDQo+ICsJLm91dHB1dF9wb2xs X2NoYW5nZWQgPSBkcm1fZmJfaGVscGVyX291dHB1dF9wb2xsX2NoYW5nZWQsDQo+ICsJLmF0 b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLA0KPiArCS5hdG9taWNfY29t bWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LA0KPiArCS5tb2RlX3ZhbGlkID0gZHJt X3ZyYW1faGVscGVyX21vZGVfdmFsaWQsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IGxz ZGNfbW9kZXNldF9pbml0KHN0cnVjdCBsc2RjX2RldmljZSAqbGRldiwNCj4gKwkJCSAgICAg Y29uc3Qgc3RydWN0IGxzZGNfZGVzYyAqZGVzY3ApDQo+ICt7DQo+ICsJc3RydWN0IGRybV9k ZXZpY2UgKmRkZXYgPSAmbGRldi0+YmFzZTsNCj4gKwl1bnNpZ25lZCBpbnQgbnVtX2NydGMg PSBkZXNjcC0+bnVtX29mX2NydGM7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsJaW50IHJl dDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY3J0YzsgaSsrKSB7DQo+ICsJCXJl dCA9IGxzZGNfY3JlYXRlX291dHB1dChsZGV2LCBpKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJ CXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jcnRj OyBpKyspIHsNCj4gKwkJc3RydWN0IGxzZGNfZGlzcGxheV9waXBlICpkaXNwaXBlID0gJmxk ZXYtPmRpc3BpcGVbaV07DQo+ICsJCXN0cnVjdCBsc2RjX3BsbCAqcGl4cGxsID0gJmRpc3Bp cGUtPnBpeHBsbDsNCj4gKwkJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSA9ICZkaXNwaXBl LT5wcmltYXJ5Ow0KPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IgPSAmZGlzcGlwZS0+ Y3Vyc29yOw0KPiArCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmZGlzcGlwZS0+Y3J0YzsN Cj4gKw0KPiArCQlkaXNwaXBlLT5pbmRleCA9IGk7DQo+ICsNCj4gKwkJcmV0ID0gbHNkY19w aXhwbGxfaW5pdChwaXhwbGwsIGRkZXYsIGkpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0 dXJuIHJldDsNCj4gKw0KPiArCQlyZXQgPSBsc2RjX3BsYW5lX2luaXQobGRldiwgcHJpbWFy eSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwgaSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQly ZXR1cm4gcmV0Ow0KPiArDQo+ICsJCXJldCA9IGxzZGNfcGxhbmVfaW5pdChsZGV2LCBjdXJz b3IsIERSTV9QTEFORV9UWVBFX0NVUlNPUiwgaSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQly ZXR1cm4gcmV0Ow0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIEluaXRpYWwgYWxsIG9mIHRoZSBD UlRDIGF2YWlsYWJsZSwgaW4gdGhpcyB3YXkgdGhlIGxvZ2ljYWwNCj4gKwkJICogY3J0YyBp bmRleCBpcyBlcXVhbCB0byB0aGUgaGFyZHdhcmUgY3J0YyBpbmRleC4NCj4gKwkJICoNCj4g KwkJICogZGlzcGxheSBwaXBlIDAgPSBjcnRjMCArIGR2bzAgKyBlbmNvZGVyMCArIGNvbm5l Y3RvcjANCj4gKwkJICogZGlzcGxheSBwaXBlIDEgPSBjcnRjMSArIGR2bzEgKyBlbmNvZGVy MSArIGNvbm5lY3RvcjENCj4gKwkJICovDQo+ICsJCXJldCA9IGxzZGNfY3J0Y19pbml0KGRk ZXYsIGNydGMsIGksIHByaW1hcnksIGN1cnNvcik7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQly ZXR1cm4gcmV0Ow0KPiArDQo+ICsJCWRybV9pbmZvKGRkZXYsICJkaXNwbGF5IHBpcGUgJXUg aW5pdGlhbGl6ZWRcbiIsIGkpOw0KPiArCX0NCj4gKw0KPiArCWRybV9tb2RlX2NvbmZpZ19y ZXNldChkZGV2KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IGxzZGNfbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwNCj4g KwkJCQkgY29uc3Qgc3RydWN0IGxzZGNfZGVzYyAqZGVzY3ApDQo+ICt7DQo+ICsJaW50IHJl dDsNCj4gKw0KPiArCXJldCA9IGRybW1fbW9kZV9jb25maWdfaW5pdChkZGV2KTsNCj4gKwlp ZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJZGRldi0+bW9kZV9jb25maWcu ZnVuY3MgPSAmbHNkY19tb2RlX2NvbmZpZ19mdW5jczsNCj4gKwlkZGV2LT5tb2RlX2NvbmZp Zy5taW5fd2lkdGggPSAxOw0KPiArCWRkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAx Ow0KPiArCWRkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IGRlc2NwLT5tYXhfd2lkdGgg KiBMU0RDX05VTV9DUlRDOw0KPiArCWRkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBk ZXNjcC0+bWF4X2hlaWdodCAqIExTRENfTlVNX0NSVEM7DQo+ICsJZGRldi0+bW9kZV9jb25m aWcucHJlZmVycmVkX2RlcHRoID0gMjQ7DQo+ICsJZGRldi0+bW9kZV9jb25maWcucHJlZmVy X3NoYWRvdyA9IGRlc2NwLT5oYXNfdnJhbTsNCj4gKw0KPiArCWRkZXYtPm1vZGVfY29uZmln LmN1cnNvcl93aWR0aCA9IGRlc2NwLT5od19jdXJzb3JfaDsNCj4gKwlkZGV2LT5tb2RlX2Nv bmZpZy5jdXJzb3JfaGVpZ2h0ID0gZGVzY3AtPmh3X2N1cnNvcl9oOw0KPiArDQo+ICsJLyog bWF4X3ZibGFua19jb3VudCBpcyBzZXQgb24gZWFjaCBDUlRDICovDQo+ICsJZGRldi0+bWF4 X3ZibGFua19jb3VudCA9IDB4ZmZmZmZmZmY7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiAr fQ0KPiArDQo+ICsvKg0KPiArICogbHNkY19kZXRlY3RfY2hpcCAtIGEgZnVuY3Rpb24gdG8g dGVsbCBsc2RjIHZhcmlhbnQgYXBhcnQuDQo+ICsgKi8NCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbHNkY19kZXNjICoNCj4gK2xzZGNfZGV0ZWN0X2NoaXAoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpDQo+ICt7DQo+ICsJLyoNCj4g KwkgKiBQcm92aWRlIGEgd2F5IHRvIGZhbHNlIHRoZSBkcml2ZXIgcnVubmluZyBvbiBuZXcg bW9kZWwNCj4gKwkgKiBiZWZvcmUgd2UgaGF2ZSBhIHByb3BlciB3YXkgdG8gdGVsbCB0aGVt IGFwYXJ0DQo+ICsJICovDQo+ICsJaWYgKGxzZGNfY2hpcCA9PSBDSElQX0xTMksyMDAwKSB7 DQo+ICsJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJPdmVycmlkZSBhcyBMUzJLMjAwMFxuIik7 DQo+ICsJCXJldHVybiAmZGNfaW5fbHMyazIwMDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGxz ZGNfY2hpcCA9PSBDSElQX0xTMksxMDAwKSB7DQo+ICsJCWRldl9pbmZvKCZwZGV2LT5kZXYs ICJPdmVycmlkZSBhcyBMUzJLMTAwMFxuIik7DQo+ICsJCXJldHVybiAmZGNfaW5fbHMyazEw MDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGxzZGNfY2hpcCA9PSBDSElQX0xTMkswNTAwKSB7 DQo+ICsJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJPdmVycmlkZSBhcyBMUzJLMDUwMFxuIik7 DQo+ICsJCXJldHVybiAmZGNfaW5fbHMyazA1MDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGVu dCkgew0KPiArCQlzdHJ1Y3QgbHNkY19kZXNjICpkY19kZXNjcDsNCj4gKw0KPiArCQlkY19k ZXNjcCA9IChzdHJ1Y3QgbHNkY19kZXNjICopZW50LT5kcml2ZXJfZGF0YTsNCg0KSXMgdGhh dCBsZWdhbD8gZHJpdmVyX2RhdGEgaXMgb2Yga2VybmVsX3Vsb25nX3QuIE1heWJlIHN0b3Jl IHRoZSBDSElQXyANCmNvbnN0YW50IGhlcmUgYW5kIHRoZW4gbG9va3VwIHRoZSBsc2RjX2Rl c2MuDQoNCiANCmh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L2xhdGVzdC9zb3Vy Y2UvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaCNMMzYNCg0KPiArCQlpZiAoZGNf ZGVzY3AtPmNoaXAgPT0gQ0hJUF9MUzdBMTAwMCkNCj4gKwkJCWRldl9pbmZvKCZwZGV2LT5k ZXYsICJMUzdBMTAwMCBGb3VuZCByZXZpc2lvbjogJXVcbiIsIHBkZXYtPnJldmlzaW9uKTsN Cj4gKwkJZWxzZSBpZiAoZGNfZGVzY3AtPmNoaXAgPT0gQ0hJUF9MUzdBMjAwMCkNCj4gKwkJ CWRldl9pbmZvKCZwZGV2LT5kZXYsICJMUzdBMjAwMCBGb3VuZCByZXZpc29uOiAldVxuIiwg cGRldi0+cmV2aXNpb24pOw0KPiArDQo+ICsJCXJldHVybiBkY19kZXNjcDsNCj4gKwl9DQo+ ICsNCj4gKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJOb3Qga25vd24gZGV2aWNlXG4iKTsNCj4g Kw0KPiArCXJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxzZGNfZ2V0 X2RlZGljYXRlZF92cmFtKHN0cnVjdCBsc2RjX2RldmljZSAqbGRldiwNCj4gKwkJCQkgICBj b25zdCBzdHJ1Y3QgbHNkY19kZXNjICpkZXNjcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldiA9ICZsZGV2LT5iYXNlOw0KPiArCXN0cnVjdCBwY2lfZGV2ICpncHU7DQo+ ICsJcmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHNpemU7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFRo ZSBHUFUgYW5kIGRpc3BsYXkgY29udHJvbGxlciBpbiBMUzdBMTAwMC9MUzdBMjAwMCBhcmUg c2VwYXJhdGVkDQo+ICsJICogUENJRSBkZXZpY2VzLCB0aGV5IGFyZSB0d28gZGV2aWNlcyBu b3Qgb25lLiBUaGUgREMgaXMgYSBwY2kgZGV2aWNlLA0KPiArCSAqIGJ1dCBpdCBkb24ndCBo YXZlIGEgZGVkaWNhdGUgVlJBTSBiYXIsIHRoZSBCSU9TIGVuZ2luZWVyIGNob29zZSB0bw0K PiArCSAqIGFzc2lnbiB0aGUgVlJBTSB0byB0aGUgZ3B1IGRldmljZS4gU2FkbHksIGFmdGVy IHllYXJzIGFwcGxpY2F0aW9uLA0KPiArCSAqIHRoaXMgZGVjaXNpb24gZm9ybSBhcyBhIGNv bnZlbnRpb24gZm9yIGxvb25nc29uIGludGVncmF0ZSBncmFwaGljcy4NCj4gKwkgKiBGb3Ig TFM3QTEwMDAgYW5kIExTN0EyMDAwLCBiYXIgMiBvZiBHUFUgZGV2aWNlIGNvbnRhaW4gdGhl IFZSQU0sDQo+ICsJICogYm90aCB0aGUgR1BVIGFuZCB0aGUgREMgY2FuIG1ha2UgdXNlIG9m IHRoZSBWUkFNIGRlcGVuZCBvbiBob3cgRFJNDQo+ICsJICogZGV2aWNlIGRyaXZlciBpcyB3 cml0dGVuLiBUaGVyZWZvcmUsIHdlIGhhdmUgdG8gZG8gc29tZSB0cmlja3MgaGVyZS4NCj4g KwkgKi8NCj4gKwlpZiAoZGVzY3AtPmNoaXAgPT0gQ0hJUF9MUzdBMTAwMCkNCj4gKwkJZ3B1 ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9MT09OR1NPTiwgMHg3QTE1LCBOVUxM KTsNCj4gKwllbHNlIGlmIChkZXNjcC0+Y2hpcCA9PSBDSElQX0xTN0EyMDAwKQ0KPiArCQln cHUgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0xPT05HU09OLCAweDdBMjUsIE5V TEwpOw0KPiArDQo+ICsJaWYgKCFncHUpIHsNCj4gKwkJZHJtX3dhcm4oZGRldiwgIk5vIEdQ VSBkZXZpY2UgZm91bmRcbiIpOw0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKwl9DQo+ICsN Cj4gKwliYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGdwdSwgMik7DQo+ICsJc2l6ZSA9IHBj aV9yZXNvdXJjZV9sZW4oZ3B1LCAyKTsNCj4gKw0KPiArCWxkZXYtPnZyYW1fYmFzZSA9IGJh c2U7DQo+ICsJbGRldi0+dnJhbV9zaXplID0gc2l6ZTsNCj4gKw0KPiArCWRybV9pbmZvKGRk ZXYsICJkZWRpY2F0ZWQgdnJhbSBzdGFydDogMHglbGx4LCBzaXplOiAldU1CXG4iLA0KPiAr CQkgKHU2NCliYXNlLCAodTMyKShzaXplID4+IDIwKSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIExvb25nc29uIGRpc3BsYXkgY29udHJvbGxlciBp cyBub3QgZXF1aXBwZWQgd2l0aCBJT01NVS4NCj4gKyAqIEluIG9yZGVyIHRvIG1ha2UgdGhp cyBkcml2ZXIgd29yayB3aXRoIExvb25nc29uIFNvQywNCj4gKyAqIHlvdSBuZWVkIHRvIGVp dGhlciBjYXJ2ZW91dCBwYXJ0IFJBTSBhcyBWUkFNIG9yIHJlc2VydmUNCj4gKyAqIHBhcnQg c3lzdGVtIHJhbSBhcyB2cmFtLiBQYXNzIHRoZSBzdGFydCBhZGRyZXNzIGFuZCBzaXplDQo+ ICsgKiB2aWEgRFQgb3IgQUNQSS4NCj4gKyAqLw0KPiArc3RhdGljIGludCBsc2RjX29mX2dl dF9yZXNlcnZlZF9yYW0oc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2KQ0KPiArew0KPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gJmxkZXYtPmJhc2U7DQo+ICsJdW5zaWduZWQgbG9u ZyBzaXplID0gMDsNCj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7DQo+ICsJc3RydWN0 IHJlc291cmNlIHI7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCW5vZGUgPSBvZl9wYXJzZV9w aGFuZGxlKGRkZXYtPmRldi0+b2Zfbm9kZSwgIm1lbW9yeS1yZWdpb24iLCAwKTsNCj4gKwlp ZiAoIW5vZGUpIHsNCj4gKwkJZHJtX2VycihkZGV2LCAiTm8gbWVtb3J5LXJlZ2lvbiBwcm9w ZXJ0eSBvciBubyBEVCwgYWJvcnRcbiIpOw0KPiArCQlyZXR1cm4gLUVOT0VOVDsNCj4gKwl9 DQo+ICsNCj4gKwlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5vZGUsIDAsICZyKTsN Cj4gKwlvZl9ub2RlX3B1dChub2RlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0 Ow0KPiArDQo+ICsJc2l6ZSA9IHIuZW5kIC0gci5zdGFydCArIDE7DQo+ICsNCj4gKwlsZGV2 LT52cmFtX2Jhc2UgPSByLnN0YXJ0Ow0KPiArCWxkZXYtPnZyYW1fc2l6ZSA9IHNpemU7DQo+ ICsNCj4gKwlkcm1faW5mbyhkZGV2LCAidXNpbmcgVlJBTSBjYXJ2ZW91dDogJWx4QCVwYVxu Iiwgc2l6ZSwgJnIuc3RhcnQpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQNCj4gK2xzZGNfcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhj b25zdCBzdHJ1Y3QgZHJtX2RyaXZlciAqcGRyaXZlciwNCj4gKwkJCQkgICAgIHJlc291cmNl X3NpemVfdCBiYXNlLA0KPiArCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUpDQo+ICt7 DQo+ICsJcmV0dXJuIGRybV9hcGVydHVyZV9yZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZm ZXJzKGJhc2UsDQo+ICsJCQkJCQkJICAgIHNpemUsDQo+ICsJCQkJCQkJICAgIGZhbHNlLA0K PiArCQkJCQkJCSAgICBwZHJpdmVyKTsNCj4gK30NCg0KTm8gbmVlZCB0byB3cmFwIHRoaXMg c2luZ2xlIGZ1bmN0aW9uLg0KDQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgbHNkY19kZXZpY2Ug Kg0KPiArbHNkY19jcmVhdGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LA0KPiArCQkg ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LA0KPiArCQkgICBjb25zdCBzdHJ1 Y3QgZHJtX2RyaXZlciAqZHJ2KQ0KPiArew0KPiArCXN0cnVjdCBsc2RjX2RldmljZSAqbGRl djsNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsNCj4gKwljb25zdCBzdHJ1Y3QgbHNk Y19kZXNjICpkZXNjcDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbGRldiA9IGRldm1fZHJt X2Rldl9hbGxvYygmcGRldi0+ZGV2LCBkcnYsIHN0cnVjdCBsc2RjX2RldmljZSwgYmFzZSk7 DQo+ICsJaWYgKElTX0VSUihsZGV2KSkNCj4gKwkJcmV0dXJuIGxkZXY7DQo+ICsNCj4gKwlk ZGV2ID0gJmxkZXYtPmJhc2U7DQo+ICsNCj4gKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGRl dik7DQo+ICsNCj4gKwlkZXNjcCA9IGxzZGNfZGV0ZWN0X2NoaXAocGRldiwgZW50KTsNCj4g KwlpZiAoIWRlc2NwKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCWxkZXYtPmRlc2Nw ID0gZGVzY3A7DQo+ICsNCj4gKwlzcGluX2xvY2tfaW5pdCgmbGRldi0+cmVnbG9jayk7DQo+ ICsNCj4gKwkvKiBCQVIgMCB0aGUgREMgZGV2aWNlIGNvbnRhaW5zIHJlZ2lzdGVycyAqLw0K PiArCWxkZXYtPnJlZ19iYXNlID0gcGNpbV9pb21hcChwZGV2LCAwLCAwKTsNCj4gKwlpZiAo IWxkZXYtPnJlZ19iYXNlKQ0KPiArCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsNCj4gKw0KPiAr CWlmIChkZXNjcC0+aGFzX3ZyYW0gJiYgbHNkY19oYXNfdnJhbSkNCj4gKwkJcmV0ID0gbHNk Y19nZXRfZGVkaWNhdGVkX3ZyYW0obGRldiwgZGVzY3ApOw0KPiArCWVsc2UNCj4gKwkJcmV0 ID0gbHNkY19vZl9nZXRfcmVzZXJ2ZWRfcmFtKGxkZXYpOw0KPiArDQo+ICsJaWYgKHJldCkg ew0KPiArCQlkcm1fZXJyKGRkZXYsICJJbml0IFZSQU0gZmFpbGVkOiAlZFxuIiwgcmV0KTsN Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBsc2Rj X3JlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoZHJ2LA0KPiArCQkJCQkJICAgbGRl di0+dnJhbV9iYXNlLA0KPiArCQkJCQkJICAgbGRldi0+dnJhbV9zaXplKTsNCj4gKwlpZiAo cmV0KSB7DQo+ICsJCWRybV9lcnIoZGRldiwgInJlbW92ZSBmaXJtd2FyZSBmcmFtZWJ1ZmZl cnMgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXQgPSBkcm1tX3ZyYW1faGVscGVyX2luaXQoZGRldiwgbGRldi0+ dnJhbV9iYXNlLCBsZGV2LT52cmFtX3NpemUpOw0KDQpVc2luZyBHRU0gVlJBTSBoZWxwZXJz IGNvdWxkIGJlY29tZSBhIHByb2JsZW0gYW5kIEknZCBhZHZpc2UgYWdhaW5zdCB0aGVtLg0K DQpGaXJzdCBvZiBhbGwsIGhvdyBtdWNoIHZpZGVvIG1lbW9yeSBpcyB0aGVyZT8gVlJBTSBo ZWxwZXJzIG5lZWQgYXQgbGVhc3QgDQozIHRpbWVzIHRoZSBtYXhpbXVtIGNvbnN1bXB0aW9u IHRvIGJlIHJlbGlhYmxlLiAgU28gaWYgeW91IGhhdmUgYSBGdWxsSEQgDQpkaXNwbGF5IHRo YXQgY29uc3VtZXMgfjggTWliLCB5b3UnZCBuZWVkIDI0IE1pQiBvZiBWUkFNLiBIYXJkd2Fy ZSANCmN1cnNvcnMgY2FuIGZ1cnRoZXIgaW50ZXJmZXJlLg0KDQpWUkFNIGhlbHBlcnMgYWxz byBkb24ndCBzdXBwb3J0IGJ1ZmZlciBzaGFyaW5nIHdpdGggb3RoZXIgZGV2aWNlcy4gDQpU aGF0J3MgYSBwcm9ibGVtIGZvciBzb21lIGNvbXBvc2l0b3JzLg0KDQpGb3IgdGhvc2UgcmVh c29ucywgVlJBTSBoZWxwZXJzIGFyZSBkZXByZWNhdGVkLiBJJ2QgcmF0aGVyIHJlbW92ZSB0 aGVtIA0KZW50aXJlbHkuICBBcyBhIGJldHRlciBhbHRlcm5hdGl2ZSBmb3IgdGhlIERDLCB5 b3UgY291bGQgdXNlIEdFTSBTSE1FTSANCmhlbHBlcnMuIFNlZSBtZ2FnMjAwIG9yIGFzdCBm b3IgaG93IHRvIGRvIHRoYXQuDQoNClRoZSBjb21tZW50cyBtZW50aW9uIHRoYXQgdGhlcmUn cyBhbHNvIGEgR1BVLiBEb2VzIHRoZSBHUFUgdXNlIFZSQU0/IE9yIA0KZG8gR1BVIGFuZCBE QyBzaGFyZSBtZW1vcnkgcmFuZ2VzPw0KDQoNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRybV9l cnIoZGRldiwgInZyYW0gaGVscGVyIGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gKwkJ Z290byBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gbHNkY19tb2RlX2NvbmZpZ19pbml0 KGRkZXYsIGRlc2NwKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRybV9kYmcoZGRldiwgIiVz OiAlZFxuIiwgX19mdW5jX18sIHJldCk7DQo+ICsJCWdvdG8gZXJyOw0KPiArCX0NCj4gKw0K PiArCXJldCA9IGxzZGNfbW9kZXNldF9pbml0KGxkZXYsIGRlc2NwKTsNCj4gKwlpZiAocmV0 KQ0KPiArCQlnb3RvIGVycjsNCj4gKw0KPiArCXJldCA9IGRybV92YmxhbmtfaW5pdChkZGV2 LCBkZXNjcC0+bnVtX29mX2NydGMpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gZXJyOw0K PiArDQo+ICsJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGRldi0+aXJxLA0KPiArCQkJ CSAgIGxzZGNfZ2V0X2lycV9oYW5kbGVyKGxkZXYpLA0KPiArCQkJCSAgIGxzZGNfaXJxX3Ro cmVhZF9oYW5kbGVyLA0KPiArCQkJCSAgIElSUUZfT05FU0hPVCwNCj4gKwkJCQkgICBkZXZf bmFtZShkZGV2LT5kZXYpLA0KPiArCQkJCSAgIGRkZXYpOw0KPiArCWlmIChyZXQpIHsNCj4g KwkJZHJtX2VycihkZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGxzZGMgaW50ZXJydXB0XG4i KTsNCj4gKwkJZ290byBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZHJtX2ttc19oZWxwZXJfcG9s bF9pbml0KGRkZXYpOw0KPiArDQo+ICsJcmV0dXJuIGxkZXY7DQo+ICsNCj4gK2VycjoNCj4g KwlyZXR1cm4gRVJSX1BUUihyZXQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxzZGNf cGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LA0KPiArCQkJICBjb25zdCBzdHJ1Y3Qg cGNpX2RldmljZV9pZCAqZW50KQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2 Ow0KPiArCXN0cnVjdCBsc2RjX2RldmljZSAqbGRldjsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ ICsJcmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOw0KPiArCWlmIChyZXQpDQo+ICsJ CXJldHVybiByZXQ7DQo+ICsNCj4gKwlwY2lfc2V0X21hc3RlcihwZGV2KTsNCj4gKw0KPiAr CXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBkZXYtPmRldiwgRE1BX0JJVF9N QVNLKDQwKSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWxk ZXYgPSBsc2RjX2NyZWF0ZV9kZXZpY2UocGRldiwgZW50LCAmbHNkY19kcm1fZHJpdmVyKTsN Cj4gKwlpZiAoSVNfRVJSKGxkZXYpKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihsZGV2KTsNCj4g Kw0KPiArCWRkZXYgPSAmbGRldi0+YmFzZTsNCj4gKw0KPiArCXJldCA9IGRybV9kZXZfcmVn aXN0ZXIoZGRldiwgMCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0K PiArCWRybV9mYmRldl9nZW5lcmljX3NldHVwKGRkZXYsIDMyKTsNCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2RjX3BjaV9yZW1vdmUoc3RydWN0 IHBjaV9kZXYgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBw Y2lfZ2V0X2RydmRhdGEocGRldik7DQo+ICsNCj4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZGRl dik7DQo+ICsJZHJtX2F0b21pY19oZWxwZXJfc2h1dGRvd24oZGRldik7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgbHNkY19kcm1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2 KQ0KPiArew0KPiArCWludCBlcnJvcjsNCj4gKw0KPiArCWVycm9yID0gZHJtX21vZGVfY29u ZmlnX2hlbHBlcl9zdXNwZW5kKGRkZXYpOw0KPiArCWlmIChlcnJvcikNCj4gKwkJcmV0dXJu IGVycm9yOw0KPiArDQo+ICsJcGNpX3NhdmVfc3RhdGUodG9fcGNpX2RldihkZGV2LT5kZXYp KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGxzZGNf ZHJtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IHBjaV9k ZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRk ZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ICsNCj4gKwlyZXR1cm4gZHJtX21vZGVf Y29uZmlnX2hlbHBlcl9yZXN1bWUoZGRldik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg bHNkY19wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBw Y2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOw0KPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArDQo+ICsJcmV0dXJuIGxzZGNf ZHJtX2ZyZWV6ZShkZGV2KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBsc2RjX3BtX3Ro YXcoc3RydWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXJldHVybiBsc2RjX2RybV9yZXN1 bWUoZGV2KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBsc2RjX3BtX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9f cGNpX2RldihkZXYpOw0KPiArCWludCBlcnJvcjsNCj4gKw0KPiArCWVycm9yID0gbHNkY19w bV9mcmVlemUoZGV2KTsNCj4gKwlpZiAoZXJyb3IpDQo+ICsJCXJldHVybiBlcnJvcjsNCj4g Kw0KPiArCXBjaV9zYXZlX3N0YXRlKHBkZXYpOw0KPiArCS8qIFNodXQgZG93biB0aGUgZGV2 aWNlICovDQo+ICsJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOw0KPiArCXBjaV9zZXRfcG93 ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGxzZGNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikN Cj4gK3sNCj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsNCj4g Kw0KPiArCWlmIChwY2ltX2VuYWJsZV9kZXZpY2UocGRldikpDQo+ICsJCXJldHVybiAtRUlP Ow0KPiArDQo+ICsJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOw0KPiArDQo+ ICsJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7DQo+ICsNCj4gKwlyZXR1cm4gbHNkY19wbV90 aGF3KGRldik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29w cyBsc2RjX3BtX29wcyA9IHsNCj4gKwkuc3VzcGVuZCA9IGxzZGNfcG1fc3VzcGVuZCwNCj4g KwkucmVzdW1lID0gbHNkY19wbV9yZXN1bWUsDQo+ICsJLmZyZWV6ZSA9IGxzZGNfcG1fZnJl ZXplLA0KPiArCS50aGF3ID0gbHNkY19wbV90aGF3LA0KPiArCS5wb3dlcm9mZiA9IGxzZGNf cG1fZnJlZXplLA0KPiArCS5yZXN0b3JlID0gbHNkY19wbV9yZXN1bWUsDQo+ICt9Ow0KPiAr DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbHNkY19wY2lpZF9saXN0 W10gPSB7DQo+ICsJe1BDSV9WRU5ET1JfSURfTE9PTkdTT04sIDB4N2EwNiwgUENJX0FOWV9J RCwgUENJX0FOWV9JRCwgMCwgMCwNCj4gKwkgKGtlcm5lbF91bG9uZ190KSZkY19pbl9sczdh MTAwMH0sDQo+ICsJe1BDSV9WRU5ET1JfSURfTE9PTkdTT04sIDB4N2EzNiwgUENJX0FOWV9J RCwgUENJX0FOWV9JRCwgMCwgMCwNCj4gKwkgKGtlcm5lbF91bG9uZ190KSZkY19pbl9sczdh MjAwMH0sDQo+ICsJezAsIDAsIDAsIDAsIDAsIDAsIDB9DQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgc3RydWN0IHBjaV9kcml2ZXIgbHNkY19wY2lfZHJpdmVyID0gew0KPiArCS5uYW1lID0g RFJJVkVSX05BTUUsDQo+ICsJLmlkX3RhYmxlID0gbHNkY19wY2lpZF9saXN0LA0KPiArCS5w cm9iZSA9IGxzZGNfcGNpX3Byb2JlLA0KPiArCS5yZW1vdmUgPSBsc2RjX3BjaV9yZW1vdmUs DQo+ICsJLmRyaXZlci5wbSA9ICZsc2RjX3BtX29wcywNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBpbnQgX19pbml0IGxzZGNfbW9kdWxlX2luaXQodm9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg cGNpX2RldiAqcGRldiA9IE5VTEw7DQo+ICsNCj4gKwlpZiAoZHJtX2Zpcm13YXJlX2RyaXZl cnNfb25seSgpKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCg0KICAgcmV0dXJuIC1FTk9ERVY7 DQoNCj4gKw0KPiArCXdoaWxlICgocGRldiA9IHBjaV9nZXRfY2xhc3MoUENJX0NMQVNTX0RJ U1BMQVlfVkdBIDw8IDgsIHBkZXYpKSkgew0KPiArCQkvKg0KPiArCQkgKiBNdWx0aXBsZSB2 aWRlbyBjYXJkIHdvcmthcm91bmQ6IGxzZGMgd2lsbCBhbHdheXMgYmUNCj4gKwkJICogc2Vs ZWN0ZWQgYXMgdGhlIGRlZmF1bHQgYm9vdCBkZXZpY2UgYnkgdmdhYXJiIHN1YnN5c3RlbS4N Cj4gKwkJICovDQo+ICsJCWlmIChwZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9MT09O R1NPTikgew0KPiArCQkJcHJfaW5mbygiRGlzY3JldGUgZ3JhcGhpYyBjYXJkIGRldGVjdGVk LCBhYm9ydFxuIik7DQo+ICsJCQlyZXR1cm4gMDsNCj4gKwkJfQ0KPiArCX0NCg0KSSBkb24n dCB1bmRlcnN0YW5kIHRoaXMgY29kZS4gWW91IGFyZSBub3QgcmVnaXN0ZXJpbmcgeW91ciBk cml2ZXIgaWYgDQp0aGVyZSdzIGFub3RoZXIgZ3JhcGhpY3MgY2FyZD8NCg0KQmVzdCByZWdh cmRzDQpUaG9tYXMNCg0KDQo+ICsNCj4gKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigm bHNkY19wY2lfZHJpdmVyKTsNCj4gK30NCj4gK21vZHVsZV9pbml0KGxzZGNfbW9kdWxlX2lu aXQpOw0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgbHNkY19tb2R1bGVfZXhpdCh2b2lk KQ0KPiArew0KPiArCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbHNkY19wY2lfZHJpdmVyKTsN Cj4gK30NCj4gK21vZHVsZV9leGl0KGxzZGNfbW9kdWxlX2V4aXQpOw0KPiArDQo+ICtNT0RV TEVfREVWSUNFX1RBQkxFKHBjaSwgbHNkY19wY2lpZF9saXN0KTsNCj4gK01PRFVMRV9BVVRI T1IoRFJJVkVSX0FVVEhPUik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0Mp Ow0KPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2xzZGMvbHNkY19kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfZHJ2 LmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kNjdk YWUwNDE0Y2ENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbHNk Yy9sc2RjX2Rydi5oDQo+IEBAIC0wLDAgKzEsMjc0IEBADQo+ICsvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiArLyoNCj4gKyAqIEtNUyBkcml2ZXIgZm9yIExv b25nc29uIGRpc3BsYXkgY29udHJvbGxlcg0KPiArICogQ29weXJpZ2h0IChDKSAyMDIyIExv b25nc29uIENvcnBvcmF0aW9uDQo+ICsgKg0KPiArICogQXV0aG9yczoNCj4gKyAqICAgICAg TGkgWWkgPGxpeWlAbG9vbmdzb24uY24+DQo+ICsgKiAgICAgIExpIENoZW55YW5nIDxsaWNo ZW55YW5nQGxvb25nc29uLmNuPg0KPiArICogICAgICBTdWkgSmluZ2ZlbmcgPHN1aWppbmdm ZW5nQGxvb25nc29uLmNuPg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX19MU0RDX0RSVl9I X18NCj4gKyNkZWZpbmUgX19MU0RDX0RSVl9IX18NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPg0KPiArDQo+ICsj aW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNl Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9wbGFuZS5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+DQo+ICsjaW5j bHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4N Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPg0KPiArDQo+ICsjaW5jbHVkZSAibHNk Y19yZWdzLmgiDQo+ICsjaW5jbHVkZSAibHNkY19wbGwuaCINCj4gKw0KPiArI2RlZmluZSBM U0RDX05VTV9DUlRDICAgICAgICAgICAyDQo+ICsNCj4gKy8qDQo+ICsgKiBUaGUgZGlzcGxh eSBjb250cm9sbGVyIGluIExTN0EyMDAwIGludGVncmF0ZSB0aHJlZSBsb29uZ3NvbiBzZWxm LW1hZGUNCj4gKyAqIGVuY29kZXIuIERpc3BsYXkgcGlwZSAwIGhhcyBhIHRyYW5zcGFyZW50 IFZHQSBlbmNvZGVyIGFuZCBhIEhETUkgcGh5LA0KPiArICogdGhleSBhcmUgcGFyYWxsZWwu IERpc3BsYXkgcGlwZSAxIGhhcyBvbmx5IG9uZSBIRE1JIHBoeS4NCj4gKyAqICAgICAgIF9f X19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19f X19fX18NCj4gKyAqICAgICAgfCAgICAgICAgICAgICArLS0tLS0rICB8ICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICB8DQo+ICsgKiAgICAgIHwgQ1JUQzAgLSstLT4g fCBWR0EgfCAgLS0tLT4gVkdBIENvbm5lY3RvciAtLS0+IHwgVkdBIE1vbml0b3IgfDwtLS0r DQo+ICsgKiAgICAgIHwgICAgICAgIHwgICAgKy0tLS0tKyAgfCAgICAgICAgICAgICAgICAg ICAgICAgIHxfX19fX19fX19fX19ffCAgICB8DQo+ICsgKiAgICAgIHwgICAgICAgIHwgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fXyAgICB8 DQo+ICsgKiAgICAgIHwgICAgICAgIHwgICAgKy0tLS0tLSsgfCAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgIHwgICB8DQo+ICsgKiAgICAgIHwgICAgICAgICstLT4g fCBIRE1JIHwgLS0tLT4gSERNSSBDb25uZWN0b3IgLS0+IHwgSERNSSBNb25pdG9yIHw8LS0r DQo+ICsgKiAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLSsgfCAgICAgICAgICAgICAgICAg ICAgICAgIHxfX19fX19fX19fX19fX3wgICB8DQo+ICsgKiAgICAgIHwgICAgICAgICAgICAr LS0tLS0tKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 DQo+ICsgKiAgICAgIHwgICAgICAgICAgICB8IGkyYzYgfCAgPC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsgKiAgICAgIHwgICAgICAgICAgICAr LS0tLS0tKyAgfA0KPiArICogICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwNCj4gKyAq ICAgICAgfCAgICBEQyBpbiBMUzdBMjAwMCAgICB8DQo+ICsgKiAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgfA0KPiArICogICAgICB8ICAgICAgICAgICAgKy0tLS0tLSsgIHwNCj4g KyAqICAgICAgfCAgICAgICAgICAgIHwgaTJjNyB8ICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rDQo+ICsgKiAgICAgIHwgICAgICAgICAgICArLS0tLS0tKyAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiArICogICAgICB8ICAgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX3xfX19fX19fDQo+ ICsgKiAgICAgIHwgICAgICAgICAgICArLS0tLS0tKyAgfCAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICB8DQo+ICsgKiAgICAgIHwgQ1JUQzEgLS0tPiB8IEhETUkg fCAgLS0tLT4gSERNSSBDb25uZWN0b3IgLS0tPiB8IEhETUkgTW9uaXRvciB8DQo+ICsgKiAg ICAgIHwgICAgICAgICAgICArLS0tLS0tKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8 X19fX19fX19fX19fX198DQo+ICsgKiAgICAgIHxfX19fX19fX19fX19fX19fX19fX19ffA0K PiArICoNCj4gKyAqDQo+ICsgKiBUaGUgZGlzcGxheSBjb250cm9sbGVyIGluIExTN0ExMDAw IGludGVncmF0ZSB0d28td2F5IERWTywgZXh0ZXJuYWwNCj4gKyAqIGVuY29kZXIgaXMgcmVx dWlyZWQgZXhjZXB0IHVzZSBkaXJlY3RseSB3aXRoIGRwaShyZ2I4ODgpIHBhbmVsLg0KPiAr ICogICAgICAgX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX19fX19fX18NCj4gKyAqICAgICAgfCAgICAgICAgICAgIC0tLS0tLS18 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfA0KPiArICog ICAgICB8ICBDUlRDMCAtLT4gfCBEVk8wIC0tLS0+IEVuY29kZXIwIC0tLT4gQ29ubmVjdG9y MCAtLS0+IHwgRGlzcGxheSB8DQo+ICsgKiAgICAgIHwgIF8gICBfICAgICAtLS0tLS0tfCAg ICAgICAgXiAgICAgICAgICAgICBeICAgICAgICAgICAgfF9fX19fX19fX3wNCj4gKyAqICAg ICAgfCB8IHwgfCB8ICAgIC0tLS0tLS18ICAgICAgICB8ICAgICAgICAgICAgIHwNCj4gKyAq ICAgICAgfCB8X3wgfF98ICAgIHwgaTJjNiA8LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsNCj4g KyAqICAgICAgfCAgICAgICAgICAgIC0tLS0tLS18DQo+ICsgKiAgICAgIHwgIF8gICBfICAg ICAtLS0tLS0tfA0KPiArICogICAgICB8IHwgfCB8IHwgICAgfCBpMmM3IDwtLS0tLS0tLSst LS0tLS0tLS0tLS0tKw0KPiArICogICAgICB8IHxffCB8X3wgICAgLS0tLS0tLXwgICAgICAg IHwgICAgICAgICAgICAgfCAgICAgICAgICAgICBfX19fX19fX18NCj4gKyAqICAgICAgfCAg ICAgICAgICAgIC0tLS0tLS18ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8 ICAgICAgICAgfA0KPiArICogICAgICB8ICBDUlRDMSAtLT4gfCBEVk8xIC0tLS0+IEVuY29k ZXIxIC0tLT4gQ29ubmVjdG9yMSAtLS0+IHwgIFBhbmVsICB8DQo+ICsgKiAgICAgIHwgICAg ICAgICAgICAtLS0tLS0tfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9f X19fX19fX3wNCj4gKyAqICAgICAgfF9fX19fX19fX19fX19fX19fX198DQo+ICsgKg0KPiAr ICoNCj4gKyAqIFRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgaW4gTFMySzEwMDAuDQo+ICsgKiAg ICAgICBfX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fX19fX19fXw0KPiArICogICAgICB8ICAgICAgICAgICAgLS0tLS0tLXwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8DQo+ICsgKiAgICAg IHwgIENSVEMwIC0tPiB8IERWTzAgLS0tLT4gRW5jb2RlcjAgLS0tPiBDb25uZWN0b3IwIC0t LT4gfCBEaXNwbGF5IHwNCj4gKyAqICAgICAgfCAgXyAgIF8gICAgIC0tLS0tLS18ICAgICAg ICBeICAgICAgICAgICAgICBeICAgICAgICAgICB8X19fX19fX19ffA0KPiArICogICAgICB8 IHwgfCB8IHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgIHwNCj4gKyAqICAg ICAgfCB8X3wgfF98ICAgICAgICAgICB8ICAgICArLS0tLS0tKyAgICAgICAgICB8DQo+ICsg KiAgICAgIHwgICAgICAgICAgICAgICAgICAgPC0tLS0+fCBpMmMwIHw8LS0tLS0tLS0tKw0K PiArICogICAgICB8ICBEQyBpbiBMUzJLMTAwMCAgIHwgICAgICstLS0tLS0rDQo+ICsgKiAg ICAgIHwgIF8gICBfICAgICAgICAgICAgfCAgICAgKy0tLS0tLSsNCj4gKyAqICAgICAgfCB8 IHwgfCB8ICAgICAgICAgICA8LS0tLT58IGkyYzEgfC0tLS0tLS0tLS0rDQo+ICsgKiAgICAg IHwgfF98IHxffCAgICAgICAgICAgfCAgICAgKy0tLS0tLSsgICAgICAgICAgfCAgICAgICAg ICAgIF9fX19fX19fXw0KPiArICogICAgICB8ICAgICAgICAgICAgLS0tLS0tLXwgICAgICAg IHwgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICB8DQo+ICsgKiAgICAgIHwg IENSVEMxIC0tPiB8IERWTzEgLS0tLT4gRW5jb2RlcjEgLS0tPiBDb25uZWN0b3IxIC0tLT4g fCAgUGFuZWwgIHwNCj4gKyAqICAgICAgfCAgICAgICAgICAgIC0tLS0tLS18ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19ffA0KPiArICogICAgICB8X19f X19fX19fX19fX19fX19fX3wNCj4gKyAqDQo+ICsgKg0KPiArICogVGhlIGRpc3BsYXkgY29u dHJvbGxlciBpbiBMUzJLMDUwMCwgTFMySzA1MDAgaGFzIGEgYnVpbHQtaW4gdHJhbnNwYXJl bnQNCj4gKyAqIFZHQSBlbmNvZGVyIHdoaWNoIGlzIGNvbm5lY3RlZCB0byBkaXNwbGF5IHBp cGUgMShDUlRDMSkuDQo+ICsgKiAgICAgICBfX19fX19fX19fX19fX19fX19fICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fXw0KPiArICogICAgICB8ICAg ICAgICAgICAgLS0tLS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICB8DQo+ICsgKiAgICAgIHwgIENSVEMwIC0tPiB8IERWTzAgLS0tLT4gRW5jb2Rl cjAgLS0tPiBDb25uZWN0b3IwIC0tLT4gfCBEaXNwbGF5IHwNCj4gKyAqICAgICAgfCAgXyAg IF8gICAgIC0tLS0tLS18ICAgICAgICBeICAgICAgICAgICAgICBeICAgICAgICAgICB8X19f X19fX19ffA0KPiArICogICAgICB8IHwgfCB8IHwgICAgICAgICAgIHwgICAgICAgIHwgICAg ICAgICAgICAgIHwNCj4gKyAqICAgICAgfCB8X3wgfF98ICAgICAgICAgICB8ICAgICArLS0t LS0tKyAgICAgICAgICB8DQo+ICsgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgPC0tLS0+ fCBpMmM0IHw8LS0tLS0tLS0tKw0KPiArICogICAgICB8ICBEQyBpbiBMUzJLMDUwMCAgIHwg ICAgICstLS0tLS0rDQo+ICsgKiAgICAgIHwgIF8gICBfICAgICAgICAgICAgfCAgICAgKy0t LS0tLSsNCj4gKyAqICAgICAgfCB8IHwgfCB8ICAgICAgICAgICA8LS0tLT58IGkyYzUgfC0t LS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsgKiAgICAgIHwgfF98IHxffCAgICAgICAgICAgfCAg ICAgKy0tLS0tLSsgICAgICAgICAgICAgX19fX19ffF9fX19fXw0KPiArICogICAgICB8ICAg ICAgICAgICArLS0tLS0rIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICB8DQo+ICsgKiAgICAgIHwgQ1JUQzEgLS0+IHwgVkdBIHwgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tPiB8IFZHQSBNb25pdG9yIHwNCj4gKyAqICAgICAgfCAgICAgICAgICAgKy0tLS0t KyB8ICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19ffA0KPiArICogICAg ICB8X19fX19fX19fX19fX19fX19fX3wNCj4gKyAqDQo+ICsgKiBMUzdBMTAwMCBhbmQgTFM3 QTIwMDAgYXJlIGJyaWRnZSBjaGlwcywgaGFzIGRlZGljYXRlZCBWaWRlbyBSQU0uDQo+ICsg KiB3aGlsZSBMUzJLMjAwMC9MUzJLMTAwMC9MUzJLMDUwMCBhcmUgU29DLCB0aGV5IGRvbid0 IGhhdmUgZGVkaWFjYXRlZA0KPiArICogVmlkZW8gUkFNLiBUaGUgZGMgaW4gTFMySzIwMDAg aXMgYmFzaWNseSBzYW1lIHdpdGggdGhlIGRjIGluIExTN0ExMDAwDQo+ICsgKiBleGNlcHQg dGhhdCBMUzJLMjAwMCBkb24ndCBoYXZlIGEgdmlkZW8gUkFNIGFuZCBoYXZlIG9ubHkgb25l IGJ1aWx0LWluDQo+ICsgKiBoZG1pIGVuY29kZXIuDQo+ICsgKg0KPiArICogVGhlcmUgaXMg b25seSBhIDE6MSBtYXBwaW5nIG9mIGVuY29kZXJzIGFuZCBjb25uZWN0b3JzIGZvciB0aGUg REMsDQo+ICsgKiBlYWNoIENSVEMgaGF2ZSB0d28gRkIgYWRkcmVzcyByZWdpc3RlcnMuDQo+ ICsgKi8NCj4gKw0KPiArZW51bSBsb29uZ3Nvbl9jaGlwX2ZhbWlseSB7DQo+ICsJQ0hJUF9V TktOT1dOID0gMCwNCj4gKwlDSElQX0xTN0ExMDAwID0gMSwgIC8qIE5vcnRoIGJyaWRnZSBv ZiBMUzNBMzAwMC9MUzNBNDAwMC9MUzNBNTAwMCAqLw0KPiArCUNISVBfTFM3QTIwMDAgPSAy LCAgLyogVXBkYXRlIHZlcnNpb24gb2YgTFM3QTEwMDAsIHdpdGggYnVpbHQtaW4gSERNSSBl bmNvZGVyICovDQo+ICsJQ0hJUF9MUzJLMDUwMCA9IDMsICAvKiBSZWR1Y2VkIHZlcnNpb24g b2YgTFMySzEwMDAsIHNpbmdsZSBjb3JlICovDQo+ICsJQ0hJUF9MUzJLMTAwMCA9IDQsICAv KiAyLUNvcmUgTWlwczY0cjIvTEEyNjQgU29DLCA2NC1iaXQsIDEuMCBHaHogKi8NCj4gKwlD SElQX0xTMksyMDAwID0gNSwgIC8qIDItQ29yZSA2NC1iaXQgTEEzNjQgU29DLCAxLjIgfiAx LjUgR2h6ICovDQo+ICsJQ0hJUF9MQVNULA0KPiArfTsNCj4gKw0KPiArc3RydWN0IGxzZGNf ZGVzYyB7DQo+ICsJZW51bSBsb29uZ3Nvbl9jaGlwX2ZhbWlseSBjaGlwOw0KPiArCXUzMiBu dW1fb2ZfY3J0YzsNCj4gKwl1MzIgbWF4X3BpeGVsX2NsazsNCj4gKwl1MzIgbWF4X3dpZHRo Ow0KPiArCXUzMiBtYXhfaGVpZ2h0Ow0KPiArCXUzMiBudW1fb2ZfaHdfY3Vyc29yOw0KPiAr CXUzMiBod19jdXJzb3JfdzsNCj4gKwl1MzIgaHdfY3Vyc29yX2g7DQo+ICsJdTMyIHBpdGNo X2FsaWduOyAgLyogRE1BIGFsaWdubWVudCBjb25zdHJhaW50ICovDQo+ICsJdTY0IG1jX2Jp dHM7ICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBidXMgYml0IHdpZHRoICovDQo+ICsJYm9v bCBoYXNfdmJsYW5rX2NvdW50ZXI7DQo+ICsJYm9vbCBoYXNfYnVpbHRpbl9pMmM7DQo+ICsJ Ym9vbCBoYXNfdnJhbTsNCj4gKwlib29sIGhhc19ocGRfcmVnOw0KPiArCWJvb2wgaXNfc29j Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IGxzZGNfaTJjIHsNCj4gKwlzdHJ1Y3QgaTJjX2Fk YXB0ZXIgYWRhcHRlcjsNCj4gKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYml0Ow0KPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2Ow0KPiArCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7 DQo+ICsJdm9pZCBfX2lvbWVtICpkaXJfcmVnOw0KPiArCXZvaWQgX19pb21lbSAqZGF0X3Jl ZzsNCj4gKwkvKiBwaW4gYml0IG1hc2sgKi8NCj4gKwl1OCBzZGE7DQo+ICsJdTggc2NsOw0K PiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIHN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSAtIEFi c3RyYWN0aW9uIG9mIGhhcmR3YXJlIGRpc3BsYXkgcGlwZWxpbmUuDQo+ICsgKiBAY3J0Yzog Q1JUQyBjb250cm9sIHN0cnVjdHVyZQ0KPiArICogQHByaW1hcnk6IGZyYW1lYnVmZmVyIHBs YW5lIGNvbnRyb2wgc3RydWN0dXJlDQo+ICsgKiBAY3Vyc29yOiBjdXJzb3IgcGxhbmUgY29u dHJvbCBzdHJ1Y3R1cmUNCj4gKyAqIEBvdXRwdXQ6IG91dHB1dCBjb250cm9sIHN0cnVjdHVy ZSBvZiB0aGlzIGRpc3BsYXkgcGlwZSBiaW5kDQo+ICsgKiBAcGl4cGxsOiBwaXhlbCBwbGwg Y29udHJvbCBzdHJ1Y3R1cmUNCj4gKyAqIEBpbmRleDogdGhlIGluZGV4IGNvcnJlc3BvbmRp bmcgdG8gdGhlIGhhcmR3YXJlIGRpc3BsYXkgcGlwZQ0KPiArICovDQo+ICtzdHJ1Y3QgbHNk Y19kaXNwbGF5X3BpcGUgew0KPiArCXN0cnVjdCBkcm1fY3J0YyBjcnRjOw0KPiArCXN0cnVj dCBkcm1fcGxhbmUgcHJpbWFyeTsNCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lIGN1cnNvcjsNCj4g KwlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsNCj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciBjb25uZWN0b3I7DQo+ICsJc3RydWN0IGxzZGNfcGxsIHBpeHBsbDsNCj4gKwlzdHJ1Y3Qg bHNkY19pMmMgKmxpMmM7DQo+ICsJaW50IGluZGV4Ow0KPiArfTsNCj4gKw0KPiArc3RhdGlj IGlubGluZSBzdHJ1Y3QgbHNkY19kaXNwbGF5X3BpcGUgKg0KPiArY3J0Y190b19kaXNwbGF5 X3BpcGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQ0KPiArew0KPiArCXJldHVybiBjb250YWlu ZXJfb2YoY3J0Yywgc3RydWN0IGxzZGNfZGlzcGxheV9waXBlLCBjcnRjKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbHNkY19kaXNwbGF5X3BpcGUgKg0KPiArY3Vy c29yX3RvX2Rpc3BsYXlfcGlwZShzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IpDQo+ICt7DQo+ ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjdXJzb3IsIHN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlw ZSwgY3Vyc29yKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbHNkY19k aXNwbGF5X3BpcGUgKg0KPiArY29ubmVjdG9yX3RvX2Rpc3BsYXlfcGlwZShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubikNCj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm4s IHN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSwgY29ubmVjdG9yKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgbHNkY19kaXNwbGF5X3BpcGUgKg0KPiArZW5jb2Rlcl90 b19kaXNwbGF5X3BpcGUoc3RydWN0IGRybV9lbmNvZGVyICplbmMpDQo+ICt7DQo+ICsJcmV0 dXJuIGNvbnRhaW5lcl9vZihlbmMsIHN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSwgZW5jb2Rl cik7DQo+ICt9DQo+ICsNCj4gK3N0cnVjdCBsc2RjX2NydGNfc3RhdGUgew0KPiArCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSBiYXNlOw0KPiArCXN0cnVjdCBsc2RjX3BsbF9wYXJtcyBwcGFy bXM7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbHNkY19kZXZpY2Ugew0KPiArCXN0cnVjdCBk cm1fZGV2aWNlIGJhc2U7DQo+ICsNCj4gKwkvKiBAcmVnbG9jazogcHJvdGVjdHMgY29uY3Vy cmVudCByZWdpc3RlciBhY2Nlc3MgKi8NCj4gKwlzcGlubG9ja190IHJlZ2xvY2s7DQo+ICsJ dm9pZCBfX2lvbWVtICpyZWdfYmFzZTsNCj4gKwl2b2lkIF9faW9tZW0gKnZyYW07DQo+ICsJ cmVzb3VyY2Vfc2l6ZV90IHZyYW1fYmFzZTsNCj4gKwlyZXNvdXJjZV9zaXplX3QgdnJhbV9z aXplOw0KPiArCXU2NCBtY19tYXNrOw0KPiArDQo+ICsJc3RydWN0IGxzZGNfZGlzcGxheV9w aXBlIGRpc3BpcGVbTFNEQ19OVU1fQ1JUQ107DQo+ICsNCj4gKwkvKiBAbnVtX291dHB1dDog Y291bnQgdGhlIG51bWJlciBvZiBhY3RpdmUgZGlzcGxheSBwaXBlICovDQo+ICsJdW5zaWdu ZWQgaW50IG51bV9vdXRwdXQ7DQo+ICsNCj4gKwkvKiBAZGVzY3A6IGZlYXR1cmVzIGRlc2Ny aXB0aW9uIG9mIHRoZSBEQyB2YXJpYW50ICovDQo+ICsJY29uc3Qgc3RydWN0IGxzZGNfZGVz YyAqZGVzY3A7DQo+ICsNCj4gKwl1MzIgaXJxX3N0YXR1czsNCj4gK307DQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGxzZGNfZGV2aWNlICoNCj4gK3RvX2xzZGMoc3RydWN0IGRy bV9kZXZpY2UgKmRkZXYpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihkZGV2LCBz dHJ1Y3QgbHNkY19kZXZpY2UsIGJhc2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBsc2RjX2NydGNfc3RhdGUgKg0KPiArdG9fbHNkY19jcnRjX3N0YXRlKHN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqYmFzZSkNCj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29m KGJhc2UsIHN0cnVjdCBsc2RjX2NydGNfc3RhdGUsIGJhc2UpOw0KPiArfQ0KPiArDQo+ICt2 b2lkIGxzZGNfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsNCj4gKw0K PiAraW50IGxzZGNfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LA0KPiArCQkg ICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+ICsJCSAgIHVuc2lnbmVkIGludCBpbmRleCwN Cj4gKwkJICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwNCj4gKwkJICAgc3RydWN0IGRy bV9wbGFuZSAqY3Vyc29yKTsNCj4gKw0KPiAraW50IGxzZGNfcGxhbmVfaW5pdChzdHJ1Y3Qg bHNkY19kZXZpY2UgKmxkZXYsDQo+ICsJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwN Cj4gKwkJICAgIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSwNCj4gKwkJICAgIHVuc2lnbmVk IGludCBpbmRleCk7DQo+ICsNCj4gK2ludCBsc2RjX2NyZWF0ZV9vdXRwdXQoc3RydWN0IGxz ZGNfZGV2aWNlICpsZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgpOw0KPiArDQo+ICtzdHJ1Y3Qg bHNkY19pMmMgKmxzZGNfY3JlYXRlX2kyY19jaGFuKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2 LA0KPiArCQkJCSAgICAgIHZvaWQgKmJhc2UsDQo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50 IGluZGV4KTsNCj4gKw0KPiArc3RydWN0IGkyY19hZGFwdGVyICpsc2RjX2dldF9pMmNfYWRh cHRlcihzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYsIGludCBpbmRleCk7DQo+ICsNCj4gK2ly cXJldHVybl90IGxzZGNfaXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZyk7 DQo+ICtpcnFfaGFuZGxlcl90IGxzZGNfZ2V0X2lycV9oYW5kbGVyKHN0cnVjdCBsc2RjX2Rl dmljZSAqbGRldik7DQo+ICsNCj4gK3UzMiBsc2RjX3JyZWczMihzdHJ1Y3QgbHNkY19kZXZp Y2UgKiBjb25zdCBsZGV2LCB1MzIgb2Zmc2V0KTsNCj4gK3ZvaWQgbHNkY193cmVnMzIoc3Ry dWN0IGxzZGNfZGV2aWNlICogY29uc3QgbGRldiwgdTMyIG9mZnNldCwgdTMyIHZhbCk7DQo+ ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNk Y19pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfaTJjLmMNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iMzgwMDk4NDA5Y2ENCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX2kyYy5jDQo+ IEBAIC0wLDAgKzEsMjAxIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+DQo+ICsjaW5jbHVkZSA8ZHJt L2RybV9tYW5hZ2VkLmg+DQo+ICsjaW5jbHVkZSAibHNkY19kcnYuaCINCj4gKyNpbmNsdWRl ICJsc2RjX3JlZ3MuaCINCj4gKw0KPiArLyoNCj4gKyAqIGxzN2FfZ3Bpb19pMmNfc2V0IC0g c2V0IHRoZSBzdGF0ZSBvZiBhIGdwaW8gcGluIGluZGljYXRlZCBieSBtYXNrDQo+ICsgKiBA bWFzazogZ3BpbyBwaW4gbWFzaw0KPiArICogQHN0YXRlOiAiMCIgZm9yIGxvdywgIjEiIGZv ciBoaWdoDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGxzN2FfZ3Bpb19pMmNfc2V0KHN0cnVj dCBsc2RjX2kyYyAqIGNvbnN0IGxpMmMsIGludCBtYXNrLCBpbnQgc3RhdGUpDQo+ICt7DQo+ ICsJc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhsaTJjLT5kZGV2KTsNCj4g Kwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCXU4IHZhbDsNCj4gKw0KPiArCXNwaW5fbG9j a19pcnFzYXZlKCZsZGV2LT5yZWdsb2NrLCBmbGFncyk7DQo+ICsNCj4gKwlpZiAoc3RhdGUp IHsNCj4gKwkJLyoNCj4gKwkJICogU2V0dGluZyB0aGlzIHBpbiBhcyBpbnB1dCBkaXJlY3Rs eSwgd3JpdGUgMSBmb3IgSW5wdXQuDQo+ICsJCSAqIFRoZSBleHRlcm5hbCBwdWxsLXVwIHJl c2lzdG9yIHdpbGwgcHVsbCB0aGUgbGV2ZWwgdXANCj4gKwkJICovDQo+ICsJCXZhbCA9IHJl YWRiKGxpMmMtPmRpcl9yZWcpOw0KPiArCQl2YWwgfD0gbWFzazsNCj4gKwkJd3JpdGViKHZh bCwgbGkyYy0+ZGlyX3JlZyk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyogRmlyc3Qgc2V0IHRo aXMgcGluIGFzIG91dHB1dCwgd3JpdGUgMCBmb3IgT3V0cHV0ICovDQo+ICsJCXZhbCA9IHJl YWRiKGxpMmMtPmRpcl9yZWcpOw0KPiArCQl2YWwgJj0gfm1hc2s7DQo+ICsJCXdyaXRlYih2 YWwsIGxpMmMtPmRpcl9yZWcpOw0KPiArDQo+ICsJCS8qIFRoZW4sIG1ha2UgdGhpcyBwaW4g b3V0cHV0IDAgKi8NCj4gKwkJdmFsID0gcmVhZGIobGkyYy0+ZGF0X3JlZyk7DQo+ICsJCXZh bCAmPSB+bWFzazsNCj4gKwkJd3JpdGViKHZhbCwgbGkyYy0+ZGF0X3JlZyk7DQo+ICsJfQ0K PiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGRldi0+cmVnbG9jaywgZmxhZ3Mp Ow0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogbHM3YV9ncGlvX2kyY19nZXQgLSByZWFkIHZh bHVlIGJhY2sgZnJvbSB0aGUgZ3BpbyBwaW4gaW5kaWNhdGVkIGJ5IG1hc2sNCj4gKyAqIEBt YXNrOiBncGlvIHBpbiBtYXNrDQo+ICsgKiByZXR1cm4gIjAiIGZvciBsb3csICIxIiBmb3Ig aGlnaA0KPiArICovDQo+ICtzdGF0aWMgaW50IGxzN2FfZ3Bpb19pMmNfZ2V0KHN0cnVjdCBs c2RjX2kyYyAqIGNvbnN0IGxpMmMsIGludCBtYXNrKQ0KPiArew0KPiArCXN0cnVjdCBsc2Rj X2RldmljZSAqbGRldiA9IHRvX2xzZGMobGkyYy0+ZGRldik7DQo+ICsJdW5zaWduZWQgbG9u ZyBmbGFnczsNCj4gKwl1OCB2YWw7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGRl di0+cmVnbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJLyogRmlyc3Qgc2V0IHRoaXMgcGluIGFz IGlucHV0ICovDQo+ICsJdmFsID0gcmVhZGIobGkyYy0+ZGlyX3JlZyk7DQo+ICsJdmFsIHw9 IG1hc2s7DQo+ICsJd3JpdGViKHZhbCwgbGkyYy0+ZGlyX3JlZyk7DQo+ICsNCj4gKwkvKiBU aGVuIGdldCBsZXZlbCBzdGF0ZSBmcm9tIHRoaXMgcGluICovDQo+ICsJdmFsID0gcmVhZGIo bGkyYy0+ZGF0X3JlZyk7DQo+ICsNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZGV2 LT5yZWdsb2NrLCBmbGFncyk7DQo+ICsNCj4gKwlyZXR1cm4gKHZhbCAmIG1hc2spID8gMSA6 IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxzN2FfaTJjX3NldF9zZGEodm9pZCAq aTJjLCBpbnQgc3RhdGUpDQo+ICt7DQo+ICsJc3RydWN0IGxzZGNfaTJjICogY29uc3QgbGky YyA9IChzdHJ1Y3QgbHNkY19pMmMgKilpMmM7DQo+ICsJLyogc2V0IHN0YXRlIG9uIHRoZSBs aTJjLT5zZGEgcGluICovDQo+ICsJcmV0dXJuIGxzN2FfZ3Bpb19pMmNfc2V0KGxpMmMsIGxp MmMtPnNkYSwgc3RhdGUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsczdhX2kyY19z ZXRfc2NsKHZvaWQgKmkyYywgaW50IHN0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBsc2RjX2ky YyAqIGNvbnN0IGxpMmMgPSAoc3RydWN0IGxzZGNfaTJjICopaTJjOw0KPiArCS8qIHNldCBz dGF0ZSBvbiB0aGUgbGkyYy0+c2NsIHBpbiAqLw0KPiArCXJldHVybiBsczdhX2dwaW9faTJj X3NldChsaTJjLCBsaTJjLT5zY2wsIHN0YXRlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBsczdhX2kyY19nZXRfc2RhKHZvaWQgKmkyYykNCj4gK3sNCj4gKwlzdHJ1Y3QgbHNkY19p MmMgKiBjb25zdCBsaTJjID0gKHN0cnVjdCBsc2RjX2kyYyAqKWkyYzsNCj4gKwkvKiByZWFk IHZhbHVlIGZyb20gdGhlIGxpMmMtPnNkYSBwaW4gKi8NCj4gKwlyZXR1cm4gbHM3YV9ncGlv X2kyY19nZXQobGkyYywgbGkyYy0+c2RhKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBs czdhX2kyY19nZXRfc2NsKHZvaWQgKmkyYykNCj4gK3sNCj4gKwlzdHJ1Y3QgbHNkY19pMmMg KiBjb25zdCBsaTJjID0gKHN0cnVjdCBsc2RjX2kyYyAqKWkyYzsNCj4gKwkvKiByZWFkIHRo ZSB2YWx1ZSBmcm9tIHRoZSBsaTJjLT5zY2wgcGluICovDQo+ICsJcmV0dXJuIGxzN2FfZ3Bp b19pMmNfZ2V0KGxpMmMsIGxpMmMtPnNjbCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGxzZGNfZGVzdHJveV9pMmMoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsIHZvaWQgKmRhdGEp DQo+ICt7DQo+ICsJc3RydWN0IGxzZGNfaTJjICpsaTJjID0gKHN0cnVjdCBsc2RjX2kyYyAq KWRhdGE7DQo+ICsNCj4gKwlpZiAobGkyYykgew0KPiArCQlpMmNfZGVsX2FkYXB0ZXIoJmxp MmMtPmFkYXB0ZXIpOw0KPiArCQlrZnJlZShsaTJjKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4g Ky8qDQo+ICsgKiBUaGUgREMgaW4gbHM3YTEwMDAvbHM3YTIwMDAgaGF2ZSBidWlsdGluIGdw aW8gaGFyZHdhcmUNCj4gKyAqDQo+ICsgKiBAYmFzZTogZ3BpbyByZWcgYmFzZQ0KPiArICog QGluZGV4OiBvdXRwdXQgY2hhbm5lbCBpbmRleCwgMCBmb3IgRFZPMCwgMSBmb3IgRFZPMQ0K PiArICovDQo+ICtzdHJ1Y3QgbHNkY19pMmMgKmxzZGNfY3JlYXRlX2kyY19jaGFuKHN0cnVj dCBkcm1fZGV2aWNlICpkZGV2LA0KPiArCQkJCSAgICAgIHZvaWQgKmJhc2UsDQo+ICsJCQkJ ICAgICAgdW5zaWduZWQgaW50IGluZGV4KQ0KPiArew0KPiArCXN0cnVjdCBpMmNfYWRhcHRl ciAqYWRhcHRlcjsNCj4gKwlzdHJ1Y3QgbHNkY19pMmMgKmxpMmM7DQo+ICsJaW50IHJldDsN Cj4gKw0KPiArCWxpMmMgPSBremFsbG9jKHNpemVvZigqbGkyYyksIEdGUF9LRVJORUwpOw0K PiArCWlmICghbGkyYykNCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsNCj4g KwlpZiAoaW5kZXggPT0gMCkgew0KPiArCQlsaTJjLT5zZGEgPSAweDAxOyAgLyogcGluIDAg Ki8NCj4gKwkJbGkyYy0+c2NsID0gMHgwMjsgIC8qIHBpbiAxICovDQo+ICsJfSBlbHNlIGlm IChpbmRleCA9PSAxKSB7DQo+ICsJCWxpMmMtPnNkYSA9IDB4MDQ7ICAvKiBwaW4gMiAqLw0K PiArCQlsaTJjLT5zY2wgPSAweDA4OyAgLyogcGluIDMgKi8NCj4gKwl9DQo+ICsNCj4gKwls aTJjLT5yZWdfYmFzZSA9IGJhc2U7DQo+ICsJbGkyYy0+ZGRldiA9IGRkZXY7DQo+ICsJbGky Yy0+ZGlyX3JlZyA9IGxpMmMtPnJlZ19iYXNlICsgTFM3QV9EQ19HUElPX0RJUl9SRUc7DQo+ ICsJbGkyYy0+ZGF0X3JlZyA9IGxpMmMtPnJlZ19iYXNlICsgTFM3QV9EQ19HUElPX0RBVF9S RUc7DQo+ICsNCj4gKwlsaTJjLT5iaXQuc2V0c2RhID0gbHM3YV9pMmNfc2V0X3NkYTsNCj4g KwlsaTJjLT5iaXQuc2V0c2NsID0gbHM3YV9pMmNfc2V0X3NjbDsNCj4gKwlsaTJjLT5iaXQu Z2V0c2RhID0gbHM3YV9pMmNfZ2V0X3NkYTsNCj4gKwlsaTJjLT5iaXQuZ2V0c2NsID0gbHM3 YV9pMmNfZ2V0X3NjbDsNCj4gKwlsaTJjLT5iaXQudWRlbGF5ID0gNTsNCj4gKwlsaTJjLT5i aXQudGltZW91dCA9IHVzZWNzX3RvX2ppZmZpZXMoMjIwMCk7DQo+ICsJbGkyYy0+Yml0LmRh dGEgPSBsaTJjOw0KPiArDQo+ICsJYWRhcHRlciA9ICZsaTJjLT5hZGFwdGVyOw0KPiArCWFk YXB0ZXItPmFsZ29fZGF0YSA9ICZsaTJjLT5iaXQ7DQo+ICsJYWRhcHRlci0+b3duZXIgPSBU SElTX01PRFVMRTsNCj4gKwlhZGFwdGVyLT5jbGFzcyA9IEkyQ19DTEFTU19EREM7DQo+ICsJ YWRhcHRlci0+ZGV2LnBhcmVudCA9IGRkZXYtPmRldjsNCj4gKwlhZGFwdGVyLT5uciA9IC0x Ow0KPiArDQo+ICsJc25wcmludGYoYWRhcHRlci0+bmFtZSwgc2l6ZW9mKGFkYXB0ZXItPm5h bWUpLCAibHNkYy1pMmMldSIsIGluZGV4KTsNCj4gKw0KPiArCWkyY19zZXRfYWRhcGRhdGEo YWRhcHRlciwgbGkyYyk7DQo+ICsNCj4gKwlyZXQgPSBpMmNfYml0X2FkZF9idXMoYWRhcHRl cik7DQo+ICsJaWYgKHJldCkgew0KPiArCQlrZnJlZShsaTJjKTsNCj4gKwkJcmV0dXJuIEVS Ul9QVFIocmV0KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBkcm1tX2FkZF9hY3Rpb25fb3Jf cmVzZXQoZGRldiwgbHNkY19kZXN0cm95X2kyYywgbGkyYyk7DQo+ICsJaWYgKHJldCkNCj4g KwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlkcm1faW5mbyhkZGV2LCAiJXMoc2RhPSV1LCBz Y2w9JXUpIGNyZWF0ZWQgZm9yIGNvbm5lY3Rvci0ldVxuIiwNCj4gKwkJIGFkYXB0ZXItPm5h bWUsIGxpMmMtPnNkYSwgbGkyYy0+c2NsLCBpbmRleCk7DQo+ICsNCj4gKwlyZXR1cm4gbGky YzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBsc2RjX2dldF9pMmNfaWQoc3RydWN0IGxz ZGNfZGV2aWNlICpsZGV2LCBpbnQgaW5kZXgpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGxz ZGNfZGVzYyAqZGVzY3AgPSBsZGV2LT5kZXNjcDsNCj4gKw0KPiArCWlmIChkZXNjcC0+Y2hp cCA9PSBDSElQX0xTMksxMDAwKQ0KPiArCQlyZXR1cm4gaW5kZXg7DQo+ICsNCj4gKwlpZiAo ZGVzY3AtPmNoaXAgPT0gQ0hJUF9MUzJLMDUwMCkNCj4gKwkJcmV0dXJuIGluZGV4ICsgMjsN Cj4gKw0KPiArCXJldHVybiBpbmRleDsNCj4gK30NCj4gKw0KPiArc3RydWN0IGkyY19hZGFw dGVyICpsc2RjX2dldF9pMmNfYWRhcHRlcihzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYsDQo+ ICsJCQkJCSBpbnQgaW5kZXgpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGxzZGNfZGVzYyAq ZGVzY3AgPSBsZGV2LT5kZXNjcDsNCj4gKwlzdHJ1Y3QgbHNkY19kaXNwbGF5X3BpcGUgKmRp c3BpcGUgPSAmbGRldi0+ZGlzcGlwZVtpbmRleF07DQo+ICsNCj4gKwlpZiAoZGVzY3AtPmhh c19idWlsdGluX2kyYykgew0KPiArCQlzdHJ1Y3QgbHNkY19pMmMgKmxpMmMgPSBkaXNwaXBl LT5saTJjOw0KPiArDQo+ICsJCWlmIChsaTJjKQ0KPiArCQkJcmV0dXJuICZsaTJjLT5hZGFw dGVyOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBpMmNfZ2V0X2FkYXB0ZXIobHNkY19nZXRf aTJjX2lkKGxkZXYsIGluZGV4KSk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbHNkYy9sc2RjX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19pcnEu Yw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjcxYzg1 ZjA5YmI2Zg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9sc2Rj L2xzZGNfaXJxLmMNCj4gQEAgLTAsMCArMSw4NiBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4gKw0KPiArI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+ DQo+ICsjaW5jbHVkZSAibHNkY19kcnYuaCINCj4gKyNpbmNsdWRlICJsc2RjX3JlZ3MuaCIN Cj4gKw0KPiArLyoNCj4gKyAqIEZvciB0aGUgREMgaW4gbHM3YTIwMDAsIGNsZWFyaW5nIGlu dGVycnVwdCBzdGF0dXMgaXMgYWNoaWV2ZWQgYnkNCj4gKyAqIHdyaXRlICIxIiB0byBMU0RD X0lOVF9SRUcsIEZvciB0aGUgREMgaW4gbHM3YTEwMDAsIGxzMmsxMDAwIGFuZA0KPiArICog bHMyazA1MDAsIGNsZWFyaW5nIGludGVycnVwdCBzdGF0dXMgaXMgYWNoaWV2ZWQgYnkgd3Jp dGUgIjAiIHRvDQo+ICsgKiBMU0RDX0lOVF9SRUcuIFR3byBkaWZmZXJlbnQgaGFyZHdhcmUg ZW5naW5lZXIgb2YgTG9vbmdzb24gbW9kaWZ5DQo+ICsgKiBpdCBhcyB0aGVpciB3aWxsLg0K PiArICovDQo+ICsNCj4gKy8qIEZvciB0aGUgREMgaW4gbHM3YTIwMDAgKi8NCj4gK3N0YXRp YyBpcnFyZXR1cm5fdCBsc2RjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGFyZzsNCj4gKwlzdHJ1Y3QgbHNk Y19kZXZpY2UgKmxkZXYgPSB0b19sc2RjKGRkZXYpOw0KPiArCXUzMiB2YWw7DQo+ICsNCj4g KwkvKiBSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovDQo+ICsJdmFsID0gbHNkY19ycmVn MzIobGRldiwgTFNEQ19JTlRfUkVHKTsNCj4gKwlpZiAoKHZhbCAmIElOVF9TVEFUVVNfTUFT SykgPT0gMCkgew0KPiArCQlkcm1fd2FybihkZGV2LCAibm8gaW50ZXJydXB0IG9jY3Vyc1xu Iik7DQo+ICsJCXJldHVybiBJUlFfTk9ORTsNCj4gKwl9DQo+ICsNCj4gKwlsZGV2LT5pcnFf c3RhdHVzID0gdmFsOw0KPiArDQo+ICsJLyogd3JpdGUgIjEiIHRvIGNsZWFyIHRoZSBpbnRl cnJ1cHQgc3RhdHVzICovDQo+ICsJbHNkY193cmVnMzIobGRldiwgTFNEQ19JTlRfUkVHLCB2 YWwpOw0KPiArDQo+ICsJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsNCj4gK30NCj4gKw0KPiAr LyogRm9yIHRoZSBEQyBpbiBsczdhMTAwMCwgbHMyazEwMDAgYW5kIGxzMmswNTAwICovDQo+ ICtzdGF0aWMgaXJxcmV0dXJuX3QgbHNkY19pcnFfaGFuZGxlcl9sZWdhY3koaW50IGlycSwg dm9pZCAqYXJnKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gYXJnOw0K PiArCXN0cnVjdCBsc2RjX2RldmljZSAqbGRldiA9IHRvX2xzZGMoZGRldik7DQo+ICsJdTMy IHZhbDsNCj4gKw0KPiArCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgKi8NCj4gKwl2 YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0lOVF9SRUcpOw0KPiArCWlmICgodmFsICYg SU5UX1NUQVRVU19NQVNLKSA9PSAwKSB7DQo+ICsJCWRybV93YXJuKGRkZXYsICJubyBpbnRl cnJ1cHQgb2NjdXJzXG4iKTsNCj4gKwkJcmV0dXJuIElSUV9OT05FOw0KPiArCX0NCj4gKw0K PiArCWxkZXYtPmlycV9zdGF0dXMgPSB2YWw7DQo+ICsNCj4gKwkvKiB3cml0ZSAiMCIgdG8g Y2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgKi8NCj4gKwlsc2RjX3dyZWczMihsZGV2LCBM U0RDX0lOVF9SRUcsIHZhbCAmIH5JTlRfU1RBVFVTX01BU0spOw0KPiArDQo+ICsJcmV0dXJu IElSUV9XQUtFX1RIUkVBRDsNCj4gK30NCj4gKw0KPiAraXJxX2hhbmRsZXJfdCBsc2RjX2dl dF9pcnFfaGFuZGxlcihzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYpDQo+ICt7DQo+ICsJY29u c3Qgc3RydWN0IGxzZGNfZGVzYyAqZGVzY3AgPSBsZGV2LT5kZXNjcDsNCj4gKw0KPiArCWlm IChkZXNjcC0+Y2hpcCA9PSBDSElQX0xTN0EyMDAwKQ0KPiArCQlyZXR1cm4gbHNkY19pcnFf aGFuZGxlcjsNCj4gKw0KPiArCXJldHVybiBsc2RjX2lycV9oYW5kbGVyX2xlZ2FjeTsNCj4g K30NCj4gKw0KPiAraXJxcmV0dXJuX3QgbHNkY19pcnFfdGhyZWFkX2hhbmRsZXIoaW50IGly cSwgdm9pZCAqYXJnKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gYXJn Ow0KPiArCXN0cnVjdCBsc2RjX2RldmljZSAqbGRldiA9IHRvX2xzZGMoZGRldik7DQo+ICsJ c3RydWN0IGRybV9jcnRjICpjcnRjOw0KPiArDQo+ICsJaWYgKGxkZXYtPmlycV9zdGF0dXMg JiBJTlRfQ1JUQzBfVlNZTkMpIHsNCj4gKwkJY3J0YyA9IGRybV9jcnRjX2Zyb21faW5kZXgo ZGRldiwgMCk7DQo+ICsJCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoY3J0Yyk7DQo+ICsJfQ0K PiArDQo+ICsJaWYgKGxkZXYtPmlycV9zdGF0dXMgJiBJTlRfQ1JUQzFfVlNZTkMpIHsNCj4g KwkJY3J0YyA9IGRybV9jcnRjX2Zyb21faW5kZXgoZGRldiwgMSk7DQo+ICsJCWRybV9jcnRj X2hhbmRsZV92YmxhbmsoY3J0Yyk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIElSUV9IQU5E TEVEOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19v dXRwdXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfb3V0cHV0LmMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kNGJjNzY2NmQ5ZWENCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX291dHB1 dC5jDQo+IEBAIC0wLDAgKzEsNDUyIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMA0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+DQo+ICsjaW5j bHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pY19oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPg0KPiAr I2luY2x1ZGUgImxzZGNfZHJ2LmgiDQo+ICsNCj4gK3N0YXRpYyBpbnQgbHNkY19nZXRfbW9k ZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikNCj4gK3sNCj4gKwl1bnNpZ25l ZCBpbnQgbnVtID0gMDsNCj4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsNCj4gKw0KPiArCWlmIChj b25uZWN0b3ItPmRkYykgew0KPiArCQllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3Rvciwg Y29ubmVjdG9yLT5kZGMpOw0KPiArCQlpZiAoZWRpZCkgew0KPiArCQkJZHJtX2Nvbm5lY3Rv cl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOw0KPiArCQkJbnVtID0g ZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7DQo+ICsJCQlrZnJlZShlZGlk KTsNCj4gKwkJfQ0KPiArDQo+ICsJCXJldHVybiBudW07DQo+ICsJfQ0KPiArDQo+ICsJbnVt ID0gZHJtX2FkZF9tb2Rlc19ub2VkaWQoY29ubmVjdG9yLCAxOTIwLCAxMjAwKTsNCj4gKw0K PiArCWRybV9zZXRfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCAxMDI0LCA3NjgpOw0KPiAr DQo+ICsJcmV0dXJuIG51bTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMNCj4gK2xzZGNfdW5rbm93bl9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpDQo+ICt7DQo+ICsJc3RydWN0 IGkyY19hZGFwdGVyICpkZGMgPSBjb25uZWN0b3ItPmRkYzsNCj4gKw0KPiArCWlmIChkZGMp IHsNCj4gKwkJaWYgKGRybV9wcm9iZV9kZGMoZGRjKSkNCj4gKwkJCXJldHVybiBjb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4gKwl9IGVsc2Ugew0KPiArCQlpZiAoY29ubmVjdG9y LT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFBJKQ0KPiArCQkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOw0KPiArDQo+ICsJCWlmIChjb25uZWN0 b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKQ0KPiAr CQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzDQo+ICtsc2RjX2hkbWlfY29ubmVjdG9yX2Rl dGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQ0KPiAr ew0KPiArCXN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSAqcGlwZSA9IGNvbm5lY3Rvcl90b19k aXNwbGF5X3BpcGUoY29ubmVjdG9yKTsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYg PSB0b19sc2RjKGNvbm5lY3Rvci0+ZGV2KTsNCj4gKwl1MzIgdmFsOw0KPiArDQo+ICsJdmFs ID0gbHNkY19ycmVnMzIobGRldiwgTFNEQ19IRE1JX0hQRF9TVEFUVVNfUkVHKTsNCj4gKw0K PiArCWlmIChwaXBlLT5pbmRleCA9PSAwKSB7DQo+ICsJCWlmICh2YWwgJiBIRE1JMF9IUERf RkxBRykNCj4gKwkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4gKwl9 DQo+ICsNCj4gKwlpZiAocGlwZS0+aW5kZXggPT0gMSkgew0KPiArCQlpZiAodmFsICYgSERN STFfSFBEX0ZMQUcpDQo+ICsJCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVk Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cw0KPiAr bHNkY19oZG1pX3ZnYV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsIGJvb2wgZm9yY2UpDQo+ICt7DQo+ICsJc3RydWN0IGxzZGNfZGlzcGxheV9w aXBlICpwaXBlID0gY29ubmVjdG9yX3RvX2Rpc3BsYXlfcGlwZShjb25uZWN0b3IpOw0KPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY29ubmVjdG9yLT5kZXY7DQo+ICsJc3RydWN0 IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhkZGV2KTsNCj4gKwlzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmRkYzsNCj4gKwl1MzIgdmFsOw0KPiArDQo+ICsJdmFsID0gbHNkY19ycmVnMzIo bGRldiwgTFNEQ19IRE1JX0hQRF9TVEFUVVNfUkVHKTsNCj4gKw0KPiArCWlmIChwaXBlLT5p bmRleCA9PSAxKSB7DQo+ICsJCWlmICh2YWwgJiBIRE1JMV9IUERfRkxBRykNCj4gKwkJCXJl dHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4gKw0KPiArCQlyZXR1cm4gY29u bmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHBpcGUt PmluZGV4ID09IDApIHsNCj4gKwkJaWYgKHZhbCAmIEhETUkwX0hQRF9GTEFHKQ0KPiArCQkJ cmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOw0KPiArDQo+ICsJCWRkYyA9IGNv bm5lY3Rvci0+ZGRjOw0KPiArCQlpZiAoZGRjKSB7DQo+ICsJCQlpZiAoZHJtX3Byb2JlX2Rk YyhkZGMpKQ0KPiArCQkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4g Kw0KPiArCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQl9 DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsNCj4g K30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqDQo+ICtsc2RjX2Nvbm5l Y3Rvcl9nZXRfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is DQo+ICsJCQkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQ0KPiArew0KPiArCXN0 cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSAqcGlwZSA9IGNvbm5lY3Rvcl90b19kaXNwbGF5X3Bp cGUoY29ubmVjdG9yKTsNCj4gKw0KPiArCXJldHVybiAmcGlwZS0+ZW5jb2RlcjsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5j cyBsc2RjX2Nvbm5lY3Rvcl9oZWxwZXJzID0gew0KPiArCS5hdG9taWNfYmVzdF9lbmNvZGVy ID0gbHNkY19jb25uZWN0b3JfZ2V0X2Jlc3RfZW5jb2RlciwNCj4gKwkuZ2V0X21vZGVzID0g bHNkY19nZXRfbW9kZXMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfZnVuY3MgbHNkY191bmtub3duX2Nvbm5lY3Rvcl9mdW5jcyA9IHsNCj4g KwkuZGV0ZWN0ID0gbHNkY191bmtub3duX2Nvbm5lY3Rvcl9kZXRlY3QsDQo+ICsJLmZpbGxf bW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsDQo+ICsJ LmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsDQo+ICsJLnJlc2V0ID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LA0KPiArCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwNCj4g KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZGVzdHJveV9zdGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9mdW5jcyBsc2RjX2hkbWlfdmdhX2Nvbm5lY3Rvcl9mdW5jcyA9IHsNCj4g KwkuZGV0ZWN0ID0gbHNkY19oZG1pX3ZnYV9jb25uZWN0b3JfZGV0ZWN0LA0KPiArCS5maWxs X21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLA0KPiAr CS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLA0KPiArCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwNCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsDQo+ ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X2Rlc3Ryb3lfc3RhdGUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfZnVuY3MgbHNkY19oZG1pX2Nvbm5lY3Rvcl9mdW5jcyA9IHsNCj4gKwku ZGV0ZWN0ID0gbHNkY19oZG1pX2Nvbm5lY3Rvcl9kZXRlY3QsDQo+ICsJLmZpbGxfbW9kZXMg PSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsDQo+ICsJLmRlc3Ry b3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsDQo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX3Jlc2V0LA0KPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0g ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwNCj4gKwkuYXRv bWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJv eV9zdGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9mdW5jcyAqDQo+ICtsc2RjX2dldF9jb25uZWN0b3JfZnVuYyhzdHJ1Y3QgbHNkY19k ZXZpY2UgKmxkZXYsIHVuc2lnbmVkIGludCBpbmRleCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1 Y3QgbHNkY19kZXNjICpkZXNjcCA9IGxkZXYtPmRlc2NwOw0KPiArDQo+ICsJaWYgKGRlc2Nw LT5jaGlwID09IENISVBfTFM3QTIwMDApIHsNCj4gKwkJaWYgKGluZGV4ID09IDApDQo+ICsJ CQlyZXR1cm4gJmxzZGNfaGRtaV92Z2FfY29ubmVjdG9yX2Z1bmNzOw0KPiArDQo+ICsJCWlm IChpbmRleCA9PSAxKQ0KPiArCQkJcmV0dXJuICZsc2RjX2hkbWlfY29ubmVjdG9yX2Z1bmNz Ow0KPiArCX0NCj4gKw0KPiArCXJldHVybiAmbHNkY191bmtub3duX2Nvbm5lY3Rvcl9mdW5j czsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIHdlIHByb3ZpZGUgYSBkZWZhdWx0IHN1cHBv cnQgYmVmb3JlIERUL1ZCSU9TIGlzIHN1cHBvcnRlZA0KPiArICovDQo+ICtzdGF0aWMgaW50 IGxzZGNfZ2V0X2VuY29kZXJfdHlwZShzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYsDQo+ICsJ CQkJIHVuc2lnbmVkIGludCBpbmRleCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgbHNkY19k ZXNjICpkZXNjcCA9IGxkZXYtPmRlc2NwOw0KPiArDQo+ICsJaWYgKGRlc2NwLT5jaGlwID09 IENISVBfTFM3QTIwMDApIHsNCj4gKwkJaWYgKGluZGV4ID09IDApDQo+ICsJCQlyZXR1cm4g RFJNX01PREVfRU5DT0RFUl9EQUM7DQo+ICsJCWlmIChpbmRleCA9PSAxKQ0KPiArCQkJcmV0 dXJuIERSTV9NT0RFX0VOQ09ERVJfVE1EUzsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoZGVzY3At PmNoaXAgPT0gQ0hJUF9MUzdBMTAwMCB8fCBkZXNjcC0+Y2hpcCA9PSBDSElQX0xTMksxMDAw KSB7DQo+ICsJCWlmIChpbmRleCA9PSAwKQ0KPiArCQkJcmV0dXJuIERSTV9NT0RFX0VOQ09E RVJfRFBJOw0KPiArCQlpZiAoaW5kZXggPT0gMSkNCj4gKwkJCXJldHVybiBEUk1fTU9ERV9F TkNPREVSX0RQSTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoZGVzY3AtPmNoaXAgPT0gQ0hJUF9M UzJLMDUwMCkgew0KPiArCQlpZiAoaW5kZXggPT0gMCkNCj4gKwkJCXJldHVybiBEUk1fTU9E RV9FTkNPREVSX0RQSTsNCj4gKwkJaWYgKGluZGV4ID09IDEpDQo+ICsJCQlyZXR1cm4gRFJN X01PREVfRU5DT0RFUl9EQUM7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIERSTV9NT0RFX0VO Q09ERVJfTk9ORTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIHByb3ZpZGUgYSBkZWZhdWx0 IGJlZm9yZSBEVC9WQklPUyBzdXBwb3J0IGlzIHVwc3RyZWFtZWQNCj4gKyAqLw0KPiArc3Rh dGljIGludCBsc2RjX2dldF9jb25uZWN0b3JfdHlwZShzdHJ1Y3QgbHNkY19kZXZpY2UgKmxk ZXYsDQo+ICsJCQkJICAgdW5zaWduZWQgaW50IGluZGV4KQ0KPiArew0KPiArCWNvbnN0IHN0 cnVjdCBsc2RjX2Rlc2MgKmRlc2NwID0gbGRldi0+ZGVzY3A7DQo+ICsNCj4gKwlpZiAoZGVz Y3AtPmNoaXAgPT0gQ0hJUF9MUzdBMjAwMCkgew0KPiArCQlpZiAoaW5kZXggPT0gMCkNCj4g KwkJCXJldHVybiBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOw0KPiArCQlpZiAoaW5kZXggPT0g MSkNCj4gKwkJCXJldHVybiBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE7DQo+ICsJfQ0KPiAr DQo+ICsJaWYgKGRlc2NwLT5jaGlwID09IENISVBfTFM3QTEwMDAgfHwgZGVzY3AtPmNoaXAg PT0gQ0hJUF9MUzJLMTAwMCkgew0KPiArCQlpZiAoaW5kZXggPT0gMCkNCj4gKwkJCXJldHVy biBEUk1fTU9ERV9DT05ORUNUT1JfRFBJOw0KPiArCQlpZiAoaW5kZXggPT0gMSkNCj4gKwkJ CXJldHVybiBEUk1fTU9ERV9DT05ORUNUT1JfRFBJOw0KPiArCX0NCj4gKw0KPiArCWlmIChk ZXNjcC0+Y2hpcCA9PSBDSElQX0xTMkswNTAwKSB7DQo+ICsJCWlmIChpbmRleCA9PSAwKQ0K PiArCQkJcmV0dXJuIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEk7DQo+ICsJCWlmIChpbmRleCA9 PSAxKQ0KPiArCQkJcmV0dXJuIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E7DQo+ICsJfQ0KPiAr DQo+ICsJcmV0dXJuIERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBsc2RjX2hkbWlfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpDQo+ICt7DQo+ICsJc3RydWN0IGxzZGNfZGlzcGxheV9waXBlICpkaXNwaXBlID0g ZW5jb2Rlcl90b19kaXNwbGF5X3BpcGUoZW5jb2Rlcik7DQo+ICsJc3RydWN0IGRybV9kZXZp Y2UgKmRkZXYgPSBlbmNvZGVyLT5kZXY7DQo+ICsJc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2 ID0gdG9fbHNkYyhkZGV2KTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkaXNwaXBlLT5p bmRleDsNCj4gKwl1MzIgdmFsOw0KPiArDQo+ICsJaWYgKGluZGV4ID09IDApDQo+ICsJCXZh bCA9IGxzZGNfcnJlZzMyKGxkZXYsIExTRENfSERNSTBfUEhZX0NUUkxfUkVHKTsNCj4gKwll bHNlIGlmIChpbmRleCA9PSAxKQ0KPiArCQl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RD X0hETUkxX1BIWV9DVFJMX1JFRyk7DQo+ICsNCj4gKwl2YWwgJj0gfkhETUlfUEhZX0VOOw0K PiArDQo+ICsJaWYgKGluZGV4ID09IDApDQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENf SERNSTBfUEhZX0NUUkxfUkVHLCB2YWwpOw0KPiArCWVsc2UgaWYgKGluZGV4ID09IDEpDQo+ ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfSERNSTFfUEhZX0NUUkxfUkVHLCB2YWwpOw0K PiArDQo+ICsJZHJtX2RiZyhkZGV2LCAiSERNSS0ldSBkaXNhYmxlZFxuIiwgaW5kZXgpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2RjX2hkbWlfZW5hYmxlKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9 IGVuY29kZXItPmRldjsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYgPSB0b19sc2Rj KGRkZXYpOw0KPiArCXN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSAqZGlzcGlwZSA9IGVuY29k ZXJfdG9fZGlzcGxheV9waXBlKGVuY29kZXIpOw0KPiArCXVuc2lnbmVkIGludCBpbmRleCA9 IGRpc3BpcGUtPmluZGV4Ow0KPiArCXUzMiB2YWw7DQo+ICsNCj4gKwkvKiB3ZSBhcmUgdXNp bmcgc29mdHdhcmUgZ3BpbyBlbXVsYXRlZCBpMmMgKi8NCj4gKwl2YWwgPSBIRE1JX0NUTF9Q RVJJT0RfTU9ERSB8IEhETUlfQVVESU9fRU4gfA0KPiArCSAgICAgIEhETUlfUEFDS0VUX0VO IHwgSERNSV9JTlRFUkZBQ0VfRU47DQo+ICsNCj4gKwlpZiAoaW5kZXggPT0gMCkgew0KPiAr CQkvKiBFbmFibGUgSERNSS0wICovDQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfSERN STBfQ1RSTF9SRUcsIHZhbCk7DQo+ICsNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19I RE1JMF9aT05FX1JFRywgMHgwMDQwMDA0MCk7DQo+ICsJfSBlbHNlIGlmIChpbmRleCA9PSAx KSB7DQo+ICsJCS8qIEVuYWJsZSBIRE1JLTEgKi8NCj4gKwkJbHNkY193cmVnMzIobGRldiwg TFNEQ19IRE1JMV9DVFJMX1JFRywgdmFsKTsNCj4gKw0KPiArCQlsc2RjX3dyZWczMihsZGV2 LCBMU0RDX0hETUkxX1pPTkVfUkVHLCAweDAwNDAwMDQwKTsNCj4gKwl9DQo+ICsNCj4gKwl2 YWwgPSBIRE1JX1BIWV9URVJNX1NUQVRVUyB8DQo+ICsJICAgICAgSERNSV9QSFlfVEVSTV9E RVRfRU4gfA0KPiArCSAgICAgIEhETUlfUEhZX1RFUk1fSF9FTiB8DQo+ICsJICAgICAgSERN SV9QSFlfVEVSTV9MX0VOIHwNCj4gKwkgICAgICBIRE1JX1BIWV9SRVNFVF9OIHwNCj4gKwkg ICAgICBIRE1JX1BIWV9FTjsNCj4gKw0KPiArCWlmIChpbmRleCA9PSAwKQ0KPiArCQlsc2Rj X3dyZWczMihsZGV2LCBMU0RDX0hETUkwX1BIWV9DVFJMX1JFRywgdmFsKTsNCj4gKwllbHNl IGlmIChpbmRleCA9PSAxKQ0KPiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0hETUkxX1BI WV9DVFJMX1JFRywgdmFsKTsNCj4gKw0KPiArCWRybV9kYmcoZGRldiwgIkhETUktJXUgZW5h YmxlZFxuIiwgaW5kZXgpOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogIEZvdXQgPSBNICog RmluDQo+ICsgKg0KPiArICogIE0gPSAoNCAqIExGKSAvIChJREYgKiBPREYpDQo+ICsgKg0K PiArICogIExvb25nc29uIEhETUkgcmVxdWlyZSBNID0gMTANCj4gKyAqLw0KPiArc3RhdGlj IHZvaWQgbHNkY19oZG1pX3BoeV9wbGxfY29uZmlnKHN0cnVjdCBsc2RjX2RldmljZSAqbGRl diwNCj4gKwkJCQkgICAgIGludCBpbmRleCwNCj4gKwkJCQkgICAgIGludCBjbG9jaykNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9ICZsZGV2LT5iYXNlOw0KPiArCWlu dCBjb3VudCA9IDA7DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCS8qIGRpc2FibGUgcGh5IHBs bCAqLw0KPiArCWlmIChpbmRleCA9PSAwKQ0KPiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RD X0hETUkwX1BIWV9QTExfUkVHLCAweDApOw0KPiArCWVsc2UgaWYgKGluZGV4ID09IDEpDQo+ ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfSERNSTFfUEhZX1BMTF9SRUcsIDB4MCk7DQo+ ICsNCj4gKwkvKg0KPiArCSAqIDEwID0gKDQgKiA0MCkgLyAoOCAqIDIpDQo+ICsJICovDQo+ ICsJdmFsID0gKDggPDwgSERNSV9QTExfSURGX1NISUZUKSB8DQo+ICsJICAgICAgKDQwIDw8 IEhETUlfUExMX0xGX1NISUZUKSB8DQo+ICsJICAgICAgKDEgPDwgSERNSV9QTExfT0RGX1NI SUZUKSB8DQo+ICsJICAgICAgSERNSV9QTExfRU5BQkxFOw0KPiArDQo+ICsJZHJtX2RiZyhk ZGV2LCAiSERNSS0ldSBjbG9jazogJWRcbiIsIGluZGV4LCBjbG9jayk7DQo+ICsNCj4gKwlp ZiAoaW5kZXggPT0gMCkNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19IRE1JMF9QSFlf UExMX1JFRywgdmFsKTsNCj4gKwllbHNlIGlmIChpbmRleCA9PSAxKQ0KPiArCQlsc2RjX3dy ZWczMihsZGV2LCBMU0RDX0hETUkxX1BIWV9QTExfUkVHLCB2YWwpOw0KPiArDQo+ICsJLyog d2FpdCBoZG1pIHBoeSBwbGwgbG9jayAqLw0KPiArCWRvIHsNCj4gKwkJaWYgKGluZGV4ID09 IDApDQo+ICsJCQl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RDX0hETUkwX1BIWV9QTExf UkVHKTsNCj4gKwkJZWxzZSBpZiAoaW5kZXggPT0gMSkNCj4gKwkJCXZhbCA9IGxzZGNfcnJl ZzMyKGxkZXYsIExTRENfSERNSTFfUEhZX1BMTF9SRUcpOw0KPiArDQo+ICsJCSsrY291bnQ7 DQo+ICsNCj4gKwkJaWYgKHZhbCAmIEhETUlfUExMX0xPQ0tFRCkgew0KPiArCQkJZHJtX2Ri ZyhkZGV2LCAiU2V0dGluZyBIRE1JLSV1IFBMTCBzdWNjZXNzKHRha2UgJWQgY3ljbGVzKVxu IiwNCj4gKwkJCQlpbmRleCwgY291bnQpOw0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKwl9 IHdoaWxlIChjb3VudCA8IDEwMDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2Rj X2hkbWlfYXRvbWljX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwNCj4g KwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsDQo+ICsJCQkJ ICAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpDQo+ICt7DQo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBlbmNvZGVyLT5kZXY7DQo+ICsJc3RydWN0 IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhkZGV2KTsNCj4gKwlzdHJ1Y3QgbHNkY19k aXNwbGF5X3BpcGUgKmRpc3BpcGUgPSBlbmNvZGVyX3RvX2Rpc3BsYXlfcGlwZShlbmNvZGVy KTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkaXNwaXBlLT5pbmRleDsNCj4gKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZjcnRjX3N0YXRlLT5tb2RlOw0KPiArDQo+ ICsJbHNkY19oZG1pX3BoeV9wbGxfY29uZmlnKGxkZXYsIGluZGV4LCBtb2RlLT5jbG9jayk7 DQo+ICsNCj4gKwlkcm1fZGJnKGRkZXYsICJIRE1JLSV1IG1vZGVzZXRcbiIsIGluZGV4KTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgbHNkY19oZG1pX2hlbHBlcl9mdW5jcyA9IHsNCj4gKwkuZGlzYWJsZSA9IGxzZGNf aGRtaV9kaXNhYmxlLA0KPiArCS5lbmFibGUgPSBsc2RjX2hkbWlfZW5hYmxlLA0KPiArCS5h dG9taWNfbW9kZV9zZXQgPSBsc2RjX2hkbWlfYXRvbWljX21vZGVfc2V0LA0KPiArfTsNCj4g Kw0KPiArc3RhdGljIHZvaWQgbHNkY19oZG1pX3Jlc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGVuY29kZXIt PmRldjsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYgPSB0b19sc2RjKGRkZXYpOw0K PiArCXN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSAqZGlzcGlwZSA9IGVuY29kZXJfdG9fZGlz cGxheV9waXBlKGVuY29kZXIpOw0KPiArCXVuc2lnbmVkIGludCBpbmRleCA9IGRpc3BpcGUt PmluZGV4Ow0KPiArCXUzMiB2YWwgPSBIRE1JX0NUTF9QRVJJT0RfTU9ERSB8IEhETUlfQVVE SU9fRU4gfA0KPiArCQkgIEhETUlfUEFDS0VUX0VOIHwgSERNSV9JTlRFUkZBQ0VfRU47DQo+ ICsNCj4gKwlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0hETUkwX0NUUkxfUkVHLCB2YWwpOw0K PiArCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfSERNSTFfQ1RSTF9SRUcsIHZhbCk7DQo+ICsN Cj4gKwlkcm1fZGJnKGRkZXYsICJIRE1JLSV1IFJlc2V0XG4iLCBpbmRleCk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgbHNkY19lbmNv ZGVyX2Z1bmNzID0gew0KPiArCS5yZXNldCA9IGxzZGNfaGRtaV9yZXNldCwNCj4gKwkuZGVz dHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsDQo+ICt9Ow0KPiArDQo+ICtpbnQgbHNkY19j cmVhdGVfb3V0cHV0KHN0cnVjdCBsc2RjX2RldmljZSAqbGRldiwgdW5zaWduZWQgaW50IGlu ZGV4KQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBsc2RjX2Rlc2MgKmRlc2NwID0gbGRldi0+ ZGVzY3A7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSAmbGRldi0+YmFzZTsNCj4g KwlzdHJ1Y3QgbHNkY19kaXNwbGF5X3BpcGUgKmRpc3BpcGUgPSAmbGRldi0+ZGlzcGlwZVtp bmRleF07DQo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmRpc3BpcGUtPmVu Y29kZXI7DQo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZkaXNwaXBl LT5jb25uZWN0b3I7DQo+ICsJc3RydWN0IGkyY19hZGFwdGVyICpkZGMgPSBOVUxMOw0KPiAr CXN0cnVjdCBsc2RjX2kyYyAqbGkyYzsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0g ZHJtX2VuY29kZXJfaW5pdChkZGV2LA0KPiArCQkJICAgICAgIGVuY29kZXIsDQo+ICsJCQkg ICAgICAgJmxzZGNfZW5jb2Rlcl9mdW5jcywNCj4gKwkJCSAgICAgICBsc2RjX2dldF9lbmNv ZGVyX3R5cGUobGRldiwgaW5kZXgpLA0KPiArCQkJICAgICAgICJlbmNvZGVyLSV1IiwNCj4g KwkJCSAgICAgICBpbmRleCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkcm1fZXJyKGRkZXYs ICJGYWlsZWQgdG8gaW5pdCBlbmNvZGVyOiAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKwl9DQo+ICsNCj4gKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IEJJVChpbmRl eCk7DQo+ICsNCj4gKwlpZiAoZGVzY3AtPmNoaXAgPT0gQ0hJUF9MUzdBMjAwMCkNCj4gKwkJ ZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmbHNkY19oZG1pX2hlbHBlcl9mdW5j cyk7DQo+ICsNCj4gKwlpZiAoZGVzY3AtPmhhc19idWlsdGluX2kyYykgew0KPiArCQlsaTJj ID0gbHNkY19jcmVhdGVfaTJjX2NoYW4oZGRldiwgbGRldi0+cmVnX2Jhc2UsIGluZGV4KTsN Cj4gKwkJaWYgKElTX0VSUihsaTJjKSkNCj4gKwkJCXJldHVybiBQVFJfRVJSKGxpMmMpOw0K PiArDQo+ICsJCWRpc3BpcGUtPmxpMmMgPSBsaTJjOw0KPiArDQo+ICsJCWRkYyA9ICZsaTJj LT5hZGFwdGVyOw0KPiArCX0gZWxzZSB7DQo+ICsJCWRkYyA9IGxzZGNfZ2V0X2kyY19hZGFw dGVyKGxkZXYsIGluZGV4KTsNCj4gKwkJaWYgKElTX0VSUihkZGMpKSB7DQo+ICsJCQlkcm1f ZXJyKGRkZXYsICJFcnJvciBnZXQgZGRjIGZvciBvdXRwdXQtJXVcbiIsIGluZGV4KTsNCj4g KwkJCXJldHVybiBQVFJfRVJSKGRkYyk7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBkcm1fY29ubmVjdG9yX2luaXRfd2l0aF9kZGMoZGRldiwNCj4gKwkJCQkJICBjb25uZWN0 b3IsDQo+ICsJCQkJCSAgbHNkY19nZXRfY29ubmVjdG9yX2Z1bmMobGRldiwgaW5kZXgpLA0K PiArCQkJCQkgIGxzZGNfZ2V0X2Nvbm5lY3Rvcl90eXBlKGxkZXYsIGluZGV4KSwNCj4gKwkJ CQkJICBkZGMpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZHJtX2VycihkZGV2LCAiSW5pdCBj b25uZWN0b3ItJWQgZmFpbGVkXG4iLCBpbmRleCk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJ fQ0KPiArDQo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmxzZGNf Y29ubmVjdG9yX2hlbHBlcnMpOw0KPiArDQo+ICsJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j b2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOw0KPiArDQo+ICsJY29ubmVjdG9yLT5wb2xsZWQg PSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCB8DQo+ICsJCQkgICAgRFJNX0NPTk5FQ1RP Ul9QT0xMX0RJU0NPTk5FQ1Q7DQo+ICsNCj4gKwljb25uZWN0b3ItPmludGVybGFjZV9hbGxv d2VkID0gMDsNCj4gKwljb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IDA7DQo+ICsN Cj4gKwlsZGV2LT5udW1fb3V0cHV0Kys7DQo+ICsNCj4gKwlkcm1faW5mbyhkZGV2LCAib3V0 cHV0LSV1IGluaXRpYWxpemVkXG4iLCBpbmRleCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcGxhbmUuYyBi L2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcGxhbmUuYw0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjBmNzc5Yzk3ZDUzYg0KPiAtLS0gL2Rldi9u dWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcGxhbmUuYw0KPiBAQCAt MCwwICsxLDQ0MyBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN Cj4gKw0KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+DQo+ICsjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mcmFtZWJ1ZmZl ci5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+DQo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlICJsc2RjX2Rydi5o Ig0KPiArI2luY2x1ZGUgImxzZGNfcmVncy5oIg0KPiArI2luY2x1ZGUgImxzZGNfcGxsLmgi DQo+ICsNCj4gK3N0YXRpYyBjb25zdCB1MzIgbHNkY19wcmltYXJ5X2Zvcm1hdHNbXSA9IHsN Cj4gKwlEUk1fRk9STUFUX1hSR0I4ODg4LA0KPiArCURSTV9GT1JNQVRfQVJHQjg4ODgsDQo+ ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3QgdTMyIGxzZGNfY3Vyc29yX2Zvcm1hdHNbXSA9 IHsNCj4gKwlEUk1fRk9STUFUX0FSR0I4ODg4LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNv bnN0IHU2NCBsc2RjX2ZiX2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsNCj4gKwlEUk1fRk9STUFU X01PRF9MSU5FQVIsDQo+ICsJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRA0KPiArfTsNCj4gKw0K PiArc3RhdGljIHZvaWQgbHNkY191cGRhdGVfZmJfZm9ybWF0KHN0cnVjdCBsc2RjX2Rldmlj ZSAqbGRldiwNCj4gKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywNCj4gKwkJCQkgIGNv bnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZtdF9pbmZvKQ0KPiArew0KPiArCXVuc2ln bmVkIGludCBpbmRleCA9IGRybV9jcnRjX2luZGV4KGNydGMpOw0KPiArCXUzMiB2YWw7DQo+ ICsJdTMyIGZtdDsNCj4gKw0KPiArCXN3aXRjaCAoZm10X2luZm8tPmZvcm1hdCkgew0KPiAr CWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoNCj4gKwkJZm10ID0gTFNEQ19QRl9YUkdCODg4 ODsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4Og0KPiArCQlm bXQgPSBMU0RDX1BGX1hSR0I4ODg4Ow0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiAr CQlmbXQgPSBMU0RDX1BGX1hSR0I4ODg4Ow0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4g KwlpZiAoaW5kZXggPT0gMCkgew0KPiArCQl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBMU0RD X0NSVEMwX0NGR19SRUcpOw0KPiArCQl2YWwgPSAodmFsICYgfkNGR19QSVhfRk1UX01BU0sp IHwgZm10Ow0KPiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0NSVEMwX0NGR19SRUcsIHZh bCk7DQo+ICsJfSBlbHNlIGlmIChpbmRleCA9PSAxKSB7DQo+ICsJCXZhbCA9IGxzZGNfcnJl ZzMyKGxkZXYsIExTRENfQ1JUQzFfQ0ZHX1JFRyk7DQo+ICsJCXZhbCA9ICh2YWwgJiB+Q0ZH X1BJWF9GTVRfTUFTSykgfCBmbXQ7DQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1JU QzFfQ0ZHX1JFRywgdmFsKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGxz ZGNfdXBkYXRlX2ZiX3N0YXJ0X2FkZHIoc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2LA0KPiAr CQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywNCj4gKwkJCQkgICAgICB1NjQgcGFk ZHIpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSAmbGRldi0+YmFzZTsN Cj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkcm1fY3J0Y19pbmRleChjcnRjKTsNCj4gKwl1 MzIgbG9fYWRkcl9yZWc7DQo+ICsJdTMyIGhpX2FkZHJfcmVnOw0KPiArCXUzMiB2YWw7DQo+ ICsNCj4gKwkvKg0KPiArCSAqIEZpbmQgd2hpY2ggZnJhbWVidWZmZXIgYWRkcmVzcyByZWdp c3RlciBzaG91bGQgdXBkYXRlLg0KPiArCSAqIGlmIEZCX0FERFIwX1JFRyBpcyBpbiB1c2lu Zywgd2Ugd3JpdGUgdGhlIGFkZHJlc3MgdG8gRkJfQUREUjBfUkVHLA0KPiArCSAqIGlmIEZC X0FERFIxX1JFRyBpcyBpbiB1c2luZywgd2Ugd3JpdGUgdGhlIGFkZHJlc3MgdG8gRkJfQURE UjFfUkVHDQo+ICsJICogZm9yIGVhY2ggQ1JUQywgdGhlIHN3aXRjaCB1c2luZyBvbmUgZmIg cmVnaXN0ZXIgdG8gYW5vdGhlciBpcw0KPiArCSAqIHRyaWdnZXIgYnkgdHJpZ2dlcmVkIGJ5 IHNldCBDRkdfUEFHRV9GTElQIGJpdCBvZiBMU0RDX0NSVEN4X0NGR19SRUcNCj4gKwkgKi8N Cj4gKwlpZiAoaW5kZXggPT0gMCkgew0KPiArCQl2YWwgPSBsc2RjX3JyZWczMihsZGV2LCBM U0RDX0NSVEMwX0NGR19SRUcpOw0KPiArCQlpZiAodmFsICYgQ0ZHX0ZCX0lOX1VTSU5HKSB7 DQo+ICsJCQlsb19hZGRyX3JlZyA9IExTRENfQ1JUQzBfRkIxX0xPX0FERFJfUkVHOw0KPiAr CQkJaGlfYWRkcl9yZWcgPSBMU0RDX0NSVEMwX0ZCMV9ISV9BRERSX1JFRzsNCj4gKwkJCWRy bV9kYmcoZGRldiwgIkN1cnJlbnRseSwgRkIxIGlzIGluIHVzaW5nIGJ5IENSVEMtMFxuIik7 DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlsb19hZGRyX3JlZyA9IExTRENfQ1JUQzBfRkIwX0xP X0FERFJfUkVHOw0KPiArCQkJaGlfYWRkcl9yZWcgPSBMU0RDX0NSVEMwX0ZCMF9ISV9BRERS X1JFRzsNCj4gKwkJCWRybV9kYmcoZGRldiwgIkN1cnJlbnRseSwgRkIwIGlzIGluIHVzaW5n IGJ5IENSVEMtMFxuIik7DQo+ICsJCX0NCj4gKwl9IGVsc2UgaWYgKGluZGV4ID09IDEpIHsN Cj4gKwkJdmFsID0gbHNkY19ycmVnMzIobGRldiwgTFNEQ19DUlRDMV9DRkdfUkVHKTsNCj4g KwkJaWYgKHZhbCAmIENGR19GQl9JTl9VU0lORykgew0KPiArCQkJbG9fYWRkcl9yZWcgPSBM U0RDX0NSVEMxX0ZCMV9MT19BRERSX1JFRzsNCj4gKwkJCWhpX2FkZHJfcmVnID0gTFNEQ19D UlRDMV9GQjFfSElfQUREUl9SRUc7DQo+ICsJCQlkcm1fZGJnKGRkZXYsICJDdXJyZW50bHks IEZCMSBpcyBpbiB1c2luZyBieSBDUlRDLTFcbiIpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJ bG9fYWRkcl9yZWcgPSBMU0RDX0NSVEMxX0ZCMF9MT19BRERSX1JFRzsNCj4gKwkJCWhpX2Fk ZHJfcmVnID0gTFNEQ19DUlRDMV9GQjBfSElfQUREUl9SRUc7DQo+ICsJCQlkcm1fZGJnKGRk ZXYsICJDdXJyZW50bHksIEZCMCBpcyBpbiB1c2luZyBieSBDUlRDLTFcbiIpOw0KPiArCQl9 DQo+ICsJfQ0KPiArDQo+ICsJLyogNDAtYml0IHdpZHRoIHBoeXNpY2FsIGFkZHJlc3MgYnVz ICovDQo+ICsJbHNkY193cmVnMzIobGRldiwgbG9fYWRkcl9yZWcsIHBhZGRyKTsNCj4gKwls c2RjX3dyZWczMihsZGV2LCBoaV9hZGRyX3JlZywgKHBhZGRyID4+IDMyKSAmIDB4RkYpOw0K PiArDQo+ICsJZHJtX2RiZyhkZGV2LCAiQ1JUQy0ldSBzY2FudG91dCBmcm9tIDB4JWxseFxu IiwgaW5kZXgsIHBhZGRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGludCBs c2RjX2dldF9mYl9vZmZzZXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsDQo+ICsJCQkJ ICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLA0KPiArCQkJCSAgICAgICB1 bnNpZ25lZCBpbnQgcGxhbmUpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IG9mZnNldCA9IGZi LT5vZmZzZXRzW3BsYW5lXTsNCj4gKw0KPiArCW9mZnNldCArPSBmYi0+Zm9ybWF0LT5jcHBb cGxhbmVdICogKHN0YXRlLT5zcmNfeCA+PiAxNik7DQo+ICsJb2Zmc2V0ICs9IGZiLT5waXRj aGVzW3BsYW5lXSAqIChzdGF0ZS0+c3JjX3kgPj4gMTYpOw0KPiArDQo+ICsJcmV0dXJuIG9m ZnNldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHM2NCBsc2RjX2dldF92cmFtX2JvX29mZnNl dChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2dl bV92cmFtX29iamVjdCAqZ2JvOw0KPiArCXM2NCBncHVfYWRkcjsNCj4gKw0KPiArCWdibyA9 IGRybV9nZW1fdnJhbV9vZl9nZW0oZmItPm9ialswXSk7DQo+ICsJZ3B1X2FkZHIgPSBkcm1f Z2VtX3ZyYW1fb2Zmc2V0KGdibyk7DQo+ICsNCj4gKwlyZXR1cm4gZ3B1X2FkZHI7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgbHNkY19wcmltYXJ5X3BsYW5lX2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwNCj4gKwkJCQkJICAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFuZSk7 DQo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gcGxhbmVfc3RhdGUtPmNydGM7DQo+ICsJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3 X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOw0KPiArDQo+ICsJaWYgKCFjcnRjKQ0KPiArCQly ZXR1cm4gMDsNCj4gKw0KPiArCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19wbGFu ZV9zdGF0ZShwbGFuZV9zdGF0ZSwNCj4gKwkJCQkJCSAgIGNydGNfc3RhdGUsDQo+ICsJCQkJ CQkgICBEUk1fUExBTkVfTk9fU0NBTElORywNCj4gKwkJCQkJCSAgIERSTV9QTEFORV9OT19T Q0FMSU5HLA0KPiArCQkJCQkJICAgZmFsc2UsDQo+ICsJCQkJCQkgICB0cnVlKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgbHNkY191cGRhdGVfZmJfc3RyaWRlKHN0cnVjdCBsc2Rj X2RldmljZSAqbGRldiwNCj4gKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywNCj4gKwkJ CQkgIHVuc2lnbmVkIGludCBzdHJpZGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGluZGV4 ID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7DQo+ICsNCj4gKwlpZiAoaW5kZXggPT0gMCkNCj4g KwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DUlRDMF9TVFJJREVfUkVHLCBzdHJpZGUpOw0K PiArCWVsc2UgaWYgKGluZGV4ID09IDEpDQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENf Q1JUQzFfU1RSSURFX1JFRywgc3RyaWRlKTsNCj4gKw0KPiArCWRybV9kYmcoY3J0Yy0+ZGV2 LCAidXBkYXRlIHN0cmlkZSB0byAldVxuIiwgc3RyaWRlKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgbHNkY19wcmltYXJ5X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsDQo+ICsJCQkJCSAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKQ0KPiArew0KPiArCXN0cnVjdCBsc2RjX2RldmljZSAqbGRldiA9IHRvX2xzZGMocGxh bmUtPmRldik7DQo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbmV3X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFuZSk7DQo+ICsJ c3RydWN0IGRybV9jcnRjICpjcnRjID0gbmV3X3BsYW5lX3N0YXRlLT5jcnRjOw0KPiArCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbmV3X3BsYW5lX3N0YXRlLT5mYjsNCj4gKwl1 MzIgZmJfb2Zmc2V0ID0gbHNkY19nZXRfZmJfb2Zmc2V0KGZiLCBuZXdfcGxhbmVfc3RhdGUs IDApOw0KPiArCWRtYV9hZGRyX3QgZmJfYWRkcjsNCj4gKwlzNjQgZ3B1X2FkZHI7DQo+ICsN Cj4gKwlncHVfYWRkciA9IGxzZGNfZ2V0X3ZyYW1fYm9fb2Zmc2V0KGZiKTsNCj4gKwlpZiAo Z3B1X2FkZHIgPCAwKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlmYl9hZGRyID0gbGRldi0+ dnJhbV9iYXNlICsgZ3B1X2FkZHIgKyBmYl9vZmZzZXQ7DQo+ICsNCj4gKwlsc2RjX3VwZGF0 ZV9mYl9zdGFydF9hZGRyKGxkZXYsIGNydGMsIGZiX2FkZHIpOw0KPiArDQo+ICsJbHNkY191 cGRhdGVfZmJfc3RyaWRlKGxkZXYsIGNydGMsIGZiLT5waXRjaGVzWzBdKTsNCj4gKw0KPiAr CWxzZGNfdXBkYXRlX2ZiX2Zvcm1hdChsZGV2LCBjcnRjLCBmYi0+Zm9ybWF0KTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgbHNkY19wcmltYXJ5X3BsYW5lX2F0b21pY19kaXNhYmxl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLA0KPiArCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpDQo+ICt7DQo+ICsJZHJtX2RiZyhwbGFuZS0+ZGV2LCAiJXMg ZGlzYWJsZWRcbiIsIHBsYW5lLT5uYW1lKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIGxzZGNfcHJpbWFyeV9wbGFuZV9oZWxw ZXJzID0gew0KPiArCS5wcmVwYXJlX2ZiID0gZHJtX2dlbV92cmFtX3BsYW5lX2hlbHBlcl9w cmVwYXJlX2ZiLA0KPiArCS5jbGVhbnVwX2ZiID0gZHJtX2dlbV92cmFtX3BsYW5lX2hlbHBl cl9jbGVhbnVwX2ZiLA0KPiArCS5hdG9taWNfY2hlY2sgPSBsc2RjX3ByaW1hcnlfcGxhbmVf YXRvbWljX2NoZWNrLA0KPiArCS5hdG9taWNfdXBkYXRlID0gbHNkY19wcmltYXJ5X3BsYW5l X2F0b21pY191cGRhdGUsDQo+ICsJLmF0b21pY19kaXNhYmxlID0gbHNkY19wcmltYXJ5X3Bs YW5lX2F0b21pY19kaXNhYmxlLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBsc2RjX2N1 cnNvcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsDQo+ICsJCQkJICAg IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpuZXdfcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfcGxh bmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsNCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9IG5ld19wbGFuZV9zdGF0ZS0+ZmI7DQo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0g bmV3X3BsYW5lX3N0YXRlLT5jcnRjOw0KPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJLyogbm8gbmVlZCBmb3IgZnVydGhl ciBjaGVja3MgaWYgdGhlIHBsYW5lIGlzIGJlaW5nIGRpc2FibGVkICovDQo+ICsJaWYgKCFj cnRjIHx8ICFmYikNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlpZiAoIW5ld19wbGFuZV9z dGF0ZS0+dmlzaWJsZSkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwljcnRjX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsDQo+ICsJCQkJCQkgICBuZXdf cGxhbmVfc3RhdGUtPmNydGMpOw0KPiArDQo+ICsJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJf Y2hlY2tfcGxhbmVfc3RhdGUobmV3X3BsYW5lX3N0YXRlLA0KPiArCQkJCQkJICBjcnRjX3N0 YXRlLA0KPiArCQkJCQkJICBEUk1fUExBTkVfTk9fU0NBTElORywNCj4gKwkJCQkJCSAgRFJN X1BMQU5FX05PX1NDQUxJTkcsDQo+ICsJCQkJCQkgIHRydWUsDQo+ICsJCQkJCQkgIHRydWUp Ow0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFRoZXJl IGlzIG9ubHkgb25lIGhhcmR3YXJlIGN1cnNvciBpbiBsczdhMTAwMCwgbHMyazEwMDAgYW5k IGxzMmswNTAwLg0KPiArICogd2UgbWFkZSBpdCBzaGFyZWQgYnkgdGhlIHR3byBDUlRDLCB3 aGljaCBjYW4gc2F0aXNmeSBwZW9wbGVzIHdobyB1c2UNCj4gKyAqIGRvdWJsZSBzY3JlZW4g ZXh0ZW5kIG1vZGUgb25seS4gT24gY2xvbmUgc2NyZWVuIHVzYWdlIGNhc2UsIHRoZSBjdXJz b3INCj4gKyAqIG9uIGRpc3BsYXkgcGlwZSAxIHdpbGwgbm90IGJlIGFibGUgdG8gZGlzcGxh eS4NCj4gKyAqDQo+ICsgKiBVcGRhdGUgbG9jYXRpb24gb2YgdGhlIGN1cnNvciwgYXR0YWNo IGl0IHRvIENSVEMwIG9yIENSVEMxIG9uIHRoZSBydW50aW1lLg0KPiArICovDQo+ICtzdGF0 aWMgdm9pZCBsc2RjX2N1cnNvcl91cGRhdGVfbG9jYXRpb25fcXVpcmtzKHN0cnVjdCBsc2Rj X2RldmljZSAqbGRldiwNCj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykN Cj4gK3sNCj4gKwl1MzIgdmFsID0gQ1VSU09SX0ZPUk1BVF9BUkdCODg4ODsNCj4gKw0KPiAr CS8qDQo+ICsJICogSWYgYml0IDQgb2YgTFNEQ19DVVJTT1IwX0NGR19SRUcgaXMgMSwgdGhl biB0aGUgY3Vyc29yIHdpbGwgYmUNCj4gKwkgKiBsb2NhdGUgYXQgQ1JUQy0xLCBpZiBiaXQg NCBvZiBMU0RDX0NVUlNPUjBfQ0ZHX1JFRyBpcyAwLCB0aGVuDQo+ICsJICogdGhlIGN1cnNv ciB3aWxsIGJlIGxvY2F0ZSBhdCBDUlRDLTAuIFRoZSBjdXJzb3IgaXMgYWx3YXkgb24gdGhl DQo+ICsJICogdG9wIG9mIHRoZSBwcmltYXJ5LiBDb21wb3NpdGluZyB0aGUgcHJpbWFyeSBw bGFuZSBhbmQgY3Vyc29yDQo+ICsJICogcGxhbmUgaXMgYXV0b21hdGljYWxseSBkb25lIGJ5 IGhhcmR3YXJlLg0KPiArCSAqLw0KPiArCWlmIChkcm1fY3J0Y19pbmRleChjcnRjKSkNCj4g KwkJdmFsIHw9IENVUlNPUl9MT0NBVElPTjsNCj4gKw0KPiArCWxzZGNfd3JlZzMyKGxkZXYs IExTRENfQ1VSU09SMF9DRkdfUkVHLCB2YWwpOw0KPiArfQ0KPiArDQo+ICsvKiB1cGRhdGUg dGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IgKi8NCj4gK3N0YXRpYyB2b2lkIGxzZGNfY3Vy c29yX3VwZGF0ZV9wb3NpdGlvbl9xdWlya3Moc3RydWN0IGxzZGNfZGV2aWNlICpsZGV2LA0K PiArCQkJCQkgICAgICAgaW50IHgsDQo+ICsJCQkJCSAgICAgICBpbnQgeSkNCj4gK3sNCj4g KwlpZiAoeCA8IDApDQo+ICsJCXggPSAwOw0KPiArDQo+ICsJaWYgKHkgPCAwKQ0KPiArCQl5 ID0gMDsNCj4gKw0KPiArCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1VSU09SMF9QT1NJVElP Tl9SRUcsICh5IDw8IDE2KSB8IHgpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2Rj X2N1cnNvcl9hdG9taWNfdXBkYXRlX3F1aXJrcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwN Cj4gKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ICt7DQo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwbGFuZS0+ZGV2Ow0KPiArCXN0cnVjdCBs c2RjX2RldmljZSAqbGRldiA9IHRvX2xzZGMoZGRldik7DQo+ICsJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X3BsYW5lX3N0 YXRlKHN0YXRlLCBwbGFuZSk7DQo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3Bs YW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFu ZSk7DQo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbmV3X2ZiID0gbmV3X3BsYW5lX3N0 YXRlLT5mYjsNCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIgPSBvbGRfcGxh bmVfc3RhdGUtPmZiOw0KPiArDQo+ICsJaWYgKG5ld19mYiAhPSBvbGRfZmIpIHsNCj4gKwkJ czY0IG9mZnNldCA9IGxzZGNfZ2V0X3ZyYW1fYm9fb2Zmc2V0KG5ld19mYik7DQo+ICsJCXU2 NCBjdXJzb3JfYWRkciA9IGxkZXYtPnZyYW1fYmFzZSArIG9mZnNldDsNCj4gKw0KPiArCQlk cm1fZGJnX2ttcyhkZGV2LCAiJXMgb2Zmc2V0OiAlbGx4XG4iLCBwbGFuZS0+bmFtZSwgb2Zm c2V0KTsNCj4gKw0KPiArCQlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0NVUlNPUjBfQUREUl9M T19SRUcsIGN1cnNvcl9hZGRyKTsNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DVVJT T1IwX0FERFJfSElfUkVHLCAoY3Vyc29yX2FkZHIgPj4gMzIpICYgMHhGRik7DQo+ICsJfQ0K PiArDQo+ICsJbHNkY19jdXJzb3JfdXBkYXRlX3Bvc2l0aW9uX3F1aXJrcyhsZGV2LCBuZXdf cGxhbmVfc3RhdGUtPmNydGNfeCwgbmV3X3BsYW5lX3N0YXRlLT5jcnRjX3kpOw0KPiArDQo+ ICsJbHNkY19jdXJzb3JfdXBkYXRlX2xvY2F0aW9uX3F1aXJrcyhsZGV2LCBuZXdfcGxhbmVf c3RhdGUtPmNydGMpOw0KPiArfQ0KPiArDQo+ICsvKiB1cGRhdGUgdGhlIGZvcm1hdCwgc2l6 ZSBhbmQgbG9jYXRpb24gb2YgdGhlIGN1cnNvciAqLw0KPiArc3RhdGljIHZvaWQgbHNkY19j dXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwNCj4gKwkJCQkg ICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpDQo+ICt7DQo+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRkZXYgPSBwbGFuZS0+ZGV2Ow0KPiArCXN0cnVjdCBsc2RjX2Rldmlj ZSAqbGRldiA9IHRvX2xzZGMoZGRldik7DQo+ICsJc3RydWN0IGxzZGNfZGlzcGxheV9waXBl ICpkaXNwaXBlID0gY3Vyc29yX3RvX2Rpc3BsYXlfcGlwZShwbGFuZSk7DQo+ICsJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3 X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFuZSk7DQo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqbmV3X2ZiID0gbmV3X3BsYW5lX3N0YXRlLT5mYjsNCj4gKwlpbnQgeCA9IG5ld19wbGFu ZV9zdGF0ZS0+Y3J0Y194Ow0KPiArCWludCB5ID0gbmV3X3BsYW5lX3N0YXRlLT5jcnRjX3k7 DQo+ICsJdTMyIGNvbmYgPSBDVVJTT1JfRk9STUFUX0FSR0I4ODg4IHwgQ1VSU09SX1NJWkVf NjRYNjQ7DQo+ICsJdTY0IGN1cnNvcl9hZGRyID0gbGRldi0+dnJhbV9iYXNlICsgbHNkY19n ZXRfdnJhbV9ib19vZmZzZXQobmV3X2ZiKTsNCj4gKw0KPiArCWlmICh4IDwgMCkNCj4gKwkJ eCA9IDA7DQo+ICsNCj4gKwlpZiAoeSA8IDApDQo+ICsJCXkgPSAwOw0KPiArDQo+ICsJaWYg KGRpc3BpcGUtPmluZGV4ID09IDApIHsNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19D VVJTT1IwX0FERFJfSElfUkVHLCAoY3Vyc29yX2FkZHIgPj4gMzIpICYgMHhGRik7DQo+ICsJ CWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1VSU09SMF9BRERSX0xPX1JFRywgY3Vyc29yX2Fk ZHIpOw0KPiArCQkvKiBBdHRhY2ggQ3Vyc29yLTAgdG8gQ1JUQy0wICovDQo+ICsJCWxzZGNf d3JlZzMyKGxkZXYsIExTRENfQ1VSU09SMF9DRkdfUkVHLCBjb25mICYgfkNVUlNPUl9MT0NB VElPTik7DQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1VSU09SMF9QT1NJVElPTl9S RUcsICh5IDw8IDE2KSB8IHgpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJaWYg KGRpc3BpcGUtPmluZGV4ID09IDEpIHsNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19D VVJTT1IxX0FERFJfSElfUkVHLCAoY3Vyc29yX2FkZHIgPj4gMzIpICYgMHhGRik7DQo+ICsJ CWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1VSU09SMV9BRERSX0xPX1JFRywgY3Vyc29yX2Fk ZHIpOw0KPiArCQkvKiBBdHRhY2ggQ3Vyc29yLTEgdG8gQ1JUQy0xICovDQo+ICsJCWxzZGNf d3JlZzMyKGxkZXYsIExTRENfQ1VSU09SMV9DRkdfUkVHLCBjb25mIHwgQ1VSU09SX0xPQ0FU SU9OKTsNCj4gKwkJbHNkY193cmVnMzIobGRldiwgTFNEQ19DVVJTT1IxX1BPU0lUSU9OX1JF RywgKHkgPDwgMTYpIHwgeCk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIGxzZGNfY3Vyc29yX2F0b21pY19kaXNhYmxlX3F1aXJrcyhzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwNCj4gKwkJCQkJICAgICAgc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gcGxhbmUt PmRldjsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYgPSB0b19sc2RjKGRkZXYpOw0K PiArDQo+ICsJLyogU2V0IHRoZSBmb3JtYXQgdG8gMCBhY3R1YWxseSBkaXNwbGF5IHRoZSBj dXJzb3IgKi8NCj4gKwlsc2RjX3dyZWczMihsZGV2LCBMU0RDX0NVUlNPUjBfQ0ZHX1JFRywg MCk7DQo+ICsNCj4gKwlkcm1fZGJnKGRkZXYsICIlcyBkaXNhYmxlZFxuIiwgcGxhbmUtPm5h bWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBsc2RjX2N1cnNvcl9hdG9taWNfZGlz YWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwNCj4gKwkJCQkgICAgICAgc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2ID0gcGxhbmUtPmRldjsNCj4gKwlzdHJ1Y3QgbHNkY19kZXZpY2UgKmxkZXYgPSB0b19s c2RjKGRkZXYpOw0KPiArCXN0cnVjdCBsc2RjX2Rpc3BsYXlfcGlwZSAqZGlzcGlwZSA9IGN1 cnNvcl90b19kaXNwbGF5X3BpcGUocGxhbmUpOw0KPiArDQo+ICsJaWYgKGRpc3BpcGUtPmlu ZGV4ID09IDApDQo+ICsJCWxzZGNfd3JlZzMyKGxkZXYsIExTRENfQ1VSU09SMF9DRkdfUkVH LCAwKTsNCj4gKwllbHNlIGlmIChkaXNwaXBlLT5pbmRleCA9PSAxKQ0KPiArCQlsc2RjX3dy ZWczMihsZGV2LCBMU0RDX0NVUlNPUjFfQ0ZHX1JFRywgMCk7DQo+ICsNCj4gKwlkcm1fZGJn KGRkZXYsICIlcyBkaXNhYmxlZFxuIiwgcGxhbmUtPm5hbWUpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbHNkY19jdXJzb3Jf aGVscGVyc19xdWlyayA9IHsNCj4gKwkucHJlcGFyZV9mYiA9IGRybV9nZW1fdnJhbV9wbGFu ZV9oZWxwZXJfcHJlcGFyZV9mYiwNCj4gKwkuY2xlYW51cF9mYiA9IGRybV9nZW1fdnJhbV9w bGFuZV9oZWxwZXJfY2xlYW51cF9mYiwNCj4gKwkuYXRvbWljX2NoZWNrID0gbHNkY19jdXJz b3JfYXRvbWljX2NoZWNrLA0KPiArCS5hdG9taWNfdXBkYXRlID0gbHNkY19jdXJzb3JfYXRv bWljX3VwZGF0ZV9xdWlya3MsDQo+ICsJLmF0b21pY19kaXNhYmxlID0gbHNkY19jdXJzb3Jf YXRvbWljX2Rpc2FibGVfcXVpcmtzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIGxzZGNfY3Vyc29yX3BsYW5lX2hlbHBlcnMg PSB7DQo+ICsJLnByZXBhcmVfZmIgPSBkcm1fZ2VtX3ZyYW1fcGxhbmVfaGVscGVyX3ByZXBh cmVfZmIsDQo+ICsJLmNsZWFudXBfZmIgPSBkcm1fZ2VtX3ZyYW1fcGxhbmVfaGVscGVyX2Ns ZWFudXBfZmIsDQo+ICsJLmF0b21pY19jaGVjayA9IGxzZGNfY3Vyc29yX2F0b21pY19jaGVj aywNCj4gKwkuYXRvbWljX3VwZGF0ZSA9IGxzZGNfY3Vyc29yX2F0b21pY191cGRhdGUsDQo+ ICsJLmF0b21pY19kaXNhYmxlID0gbHNkY19jdXJzb3JfYXRvbWljX2Rpc2FibGUsDQo+ICt9 Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBsc2RjX3Bs YW5lX2Z1bmNzID0gew0KPiArCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91 cGRhdGVfcGxhbmUsDQo+ICsJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9k aXNhYmxlX3BsYW5lLA0KPiArCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFudXAsDQo+ICsJ LnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsDQo+ICsJLmF0b21pY19k dXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3Rh dGUsDQo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxh bmVfZGVzdHJveV9zdGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyAqDQo+ICtsc2RjX2dldF9jdXJzb3JfaGVscGVyX2Z1 bmNzKGNvbnN0IHN0cnVjdCBsc2RjX2Rlc2MgKmRlc2NwKQ0KPiArew0KPiArCWlmIChkZXNj cC0+Y2hpcCA9PSBDSElQX0xTN0EyMDAwKQ0KPiArCQlyZXR1cm4gJmxzZGNfY3Vyc29yX3Bs YW5lX2hlbHBlcnM7DQo+ICsNCj4gKwlyZXR1cm4gJmxzZGNfY3Vyc29yX2hlbHBlcnNfcXVp cms7DQo+ICt9DQo+ICsNCj4gK2ludCBsc2RjX3BsYW5lX2luaXQoc3RydWN0IGxzZGNfZGV2 aWNlICpsZGV2LA0KPiArCQkgICAgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsDQo+ICsJCSAg ICBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsDQo+ICsJCSAgICB1bnNpZ25lZCBpbnQgaW5k ZXgpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGxzZGNfZGVzYyAqZGVzY3AgPSBsZGV2LT5k ZXNjcDsNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9ICZsZGV2LT5iYXNlOw0KPiAr CXVuc2lnbmVkIGludCBmb3JtYXRfY291bnQ7DQo+ICsJY29uc3QgdTMyICpmb3JtYXRzOw0K PiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXN3aXRjaCAo dHlwZSkgew0KPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWToNCj4gKwkJZm9ybWF0 cyA9IGxzZGNfcHJpbWFyeV9mb3JtYXRzOw0KPiArCQlmb3JtYXRfY291bnQgPSBBUlJBWV9T SVpFKGxzZGNfcHJpbWFyeV9mb3JtYXRzKTsNCj4gKwkJbmFtZSA9ICJwcmltYXJ5LSV1IjsN Cj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBEUk1fUExBTkVfVFlQRV9DVVJTT1I6DQo+ICsJCWZv cm1hdHMgPSBsc2RjX2N1cnNvcl9mb3JtYXRzOw0KPiArCQlmb3JtYXRfY291bnQgPSBBUlJB WV9TSVpFKGxzZGNfY3Vyc29yX2Zvcm1hdHMpOw0KPiArCQluYW1lID0gImN1cnNvci0ldSI7 DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWToNCj4gKwkJ ZHJtX2VycihkZGV2LCAib3ZlcmxheSBwbGFuZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsNCj4g KwkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9p bml0KGRkZXYsIHBsYW5lLCAxIDw8IGluZGV4LA0KPiArCQkJCSAgICAgICAmbHNkY19wbGFu ZV9mdW5jcywNCj4gKwkJCQkgICAgICAgZm9ybWF0cywgZm9ybWF0X2NvdW50LA0KPiArCQkJ CSAgICAgICBsc2RjX2ZiX2Zvcm1hdF9tb2RpZmllcnMsDQo+ICsJCQkJICAgICAgIHR5cGUs IG5hbWUsIGluZGV4KTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRybV9lcnIoZGRldiwgIiVz IGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr CX0NCj4gKw0KPiArCXN3aXRjaCAodHlwZSkgew0KPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVf UFJJTUFSWToNCj4gKwkJZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsICZsc2RjX3ByaW1h cnlfcGxhbmVfaGVscGVycyk7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgRFJNX1BMQU5FX1RZ UEVfQ1VSU09SOg0KPiArCQlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgbHNkY19nZXRf Y3Vyc29yX2hlbHBlcl9mdW5jcyhkZXNjcCkpOw0KPiArCQlicmVhazsNCj4gKwljYXNlIERS TV9QTEFORV9UWVBFX09WRVJMQVk6DQo+ICsJCWRybV9lcnIoZGRldiwgIm92ZXJsYXkgcGxh bmUgaXMgbm90IHN1cHBvcnRlZFxuIik7DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xzZGMv bHNkY19wbGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcGxsLmMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi42ZWQ3NDk4OWE2ZjUNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX3BsbC5j DQo+IEBAIC0wLDAgKzEsNTY5IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMA0KPiArDQo+ICsjaW5jbHVkZSAibHNkY19kcnYuaCINCj4gKyNpbmNsdWRlICJs c2RjX3JlZ3MuaCINCj4gKyNpbmNsdWRlICJsc2RjX3BsbC5oIg0KPiArDQo+ICsvKg0KPiAr ICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgcGl4ZWwgUExMIHJlZ2lzdGVyIGlzIGV2b2x2ZWQg d2l0aCB0aW1lcy4NCj4gKyAqIEFsbCBsb29uZ3NvbidzIGNwdSBpcyBsaXR0bGUgZW5kaWFu Lg0KPiArICovDQo+ICsNCj4gKy8qIHU2NCAqLw0KPiArc3RydWN0IGxzN2ExMDAwX3BpeHBs bF9iaXRtYXAgew0KPiArCS8qIEJ5dGUgMCB+IEJ5dGUgMyAqLw0KPiArCXVuc2lnbmVkIGRp dl9vdXQgICAgICA6IDc7ICAgLyogIDAgOiA2ICAgICBvdXRwdXQgY2xvY2sgZGl2aWRlciAg Ki8NCj4gKwl1bnNpZ25lZCBfXzEgICAgICAgICAgOiAxNDsgIC8qICA3IDogMjAgICAgICAg ICAgICAgICAgICAgICAgICAgICovDQo+ICsJdW5zaWduZWQgbG9vcGMgICAgICAgIDogOTsg ICAvKiAyMSA6IDI5ICAgIGNsb2NrIG11bHRpcGxpZXIgICAgICAqLw0KPiArCXVuc2lnbmVk IF9fMiAgICAgICAgICA6IDI7ICAgLyogMzAgOiAzMSAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8NCj4gKw0KPiArCS8qIEJ5dGUgNCB+IEJ5dGUgNyAqLw0KPiArCXVuc2lnbmVkIGRp dl9yZWYgICAgICA6IDc7ICAgLyogIDAgOiA2ICAgICBpbnB1dCBjbG9jayBkaXZpZGVyICAg Ki8NCj4gKwl1bnNpZ25lZCBsb2NrZWQgICAgICAgOiAxOyAgIC8qICA3ICAgICAgICAgUExM IGxvY2tlZCBzdGF0dXMgICAgICovDQo+ICsJdW5zaWduZWQgc2VsX291dCAgICAgIDogMTsg ICAvKiAgOCAgICAgICAgIG91dHB1dCBjbGsgc2VsZWN0b3IgICAqLw0KPiArCXVuc2lnbmVk IF9fMyAgICAgICAgICA6IDI7ICAgLyogIDkgOiAxMCAgICByZXNlcnZlZCAgICAgICAgICAg ICAgKi8NCj4gKwl1bnNpZ25lZCBzZXRfcGFyYW0gICAgOiAxOyAgIC8qICAxMSAgICAgICAg dHJpZ2dlciB0aGUgdXBkYXRlICAgICovDQo+ICsJdW5zaWduZWQgYnlwYXNzICAgICAgIDog MTsgICAvKiAgMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPiArCXVuc2ln bmVkIHBvd2VyZG93biAgICA6IDE7ICAgLyogIDEzICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8NCj4gKwl1bnNpZ25lZCBfXzQgICAgICAgICAgOiAxODsgIC8qICAxNCA6IDMx ICAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ICt9Ow0KPiArDQo+ICsvKiB1MTI4ICov DQo+ICtzdHJ1Y3QgbHMyazEwMDBfcGl4cGxsX2JpdG1hcCB7DQo+ICsJLyogQnl0ZSAwIH4g Qnl0ZSAzICovDQo+ICsJdW5zaWduZWQgc2VsX291dCAgICAgIDogIDE7ICAvKiAgMCAgICAg IHNlbGVjdCB0aGlzIFBMTCAgICAgICAgICAqLw0KPiArCXVuc2lnbmVkIF9fMSAgICAgICAg ICA6ICAxOyAgLyogIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCj4gKwl1 bnNpZ25lZCBzd19hZGpfZW4gICAgOiAgMTsgIC8qICAyICAgICAgYWxsb3cgc29mdHdhcmUg YWRqdXN0ICAgICovDQo+ICsJdW5zaWduZWQgYnlwYXNzICAgICAgIDogIDE7ICAvKiAgMyAg ICAgIGJ5cGFzcyBMMSBQTEwgICAgICAgICAgICAqLw0KPiArCXVuc2lnbmVkIF9fMiAgICAg ICAgICA6ICAzOyAgLyogIDQ6NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCj4g Kwl1bnNpZ25lZCBsb2NrX2VuICAgICAgOiAgMTsgIC8qICA3ICAgICAgZW5hYmxlIGxvY2sg TDEgUExMICAgICAgICovDQo+ICsJdW5zaWduZWQgX18zICAgICAgICAgIDogIDI7ICAvKiAg ODo5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPiArCXVuc2lnbmVkIGxvY2tf Y2hlY2sgICA6ICAyOyAgLyogMTA6MTEgICBwcmVjaXNpb24gY2hlY2sgICAgICAgICAgKi8N Cj4gKwl1bnNpZ25lZCBfXzQgICAgICAgICAgOiAgNDsgIC8qIDEyOjE1ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovDQo+ICsNCj4gKwl1bnNpZ25lZCBsb2NrZWQgICAgICAgOiAg MTsgIC8qIDE2ICAgICAgUExMIGxvY2tlZCBmbGFnIGJpdCAgICAgICovDQo+ICsJdW5zaWdu ZWQgX181ICAgICAgICAgIDogIDI7ICAvKiAxNzoxOCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLw0KPiArCXVuc2lnbmVkIHBvd2VyZG93biAgICA6ICAxOyAgLyogMTkgICAgICBw b3dlcmRvd24gdGhlIHBsbCBpZiBzZXQgKi8NCj4gKwl1bnNpZ25lZCBfXzYgICAgICAgICAg OiAgNjsgIC8qIDIwOjI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ICsJdW5z aWduZWQgZGl2X3JlZiAgICAgIDogIDY7ICAvKiAyNjozMSAgIEwxIFByZXNjYWxlciAgICAg ICAgICAgICAqLw0KPiArDQo+ICsJLyogQnl0ZSA0IH4gQnl0ZSA3ICovDQo+ICsJdW5zaWdu ZWQgbG9vcGMgICAgICAgIDogMTA7ICAvKiAzMjo0MSAgIENsb2NrIE11bHRpcGxpZXIgICAg ICAgICAqLw0KPiArCXVuc2lnbmVkIGwxX2RpdiAgICAgICA6ICA2OyAgLyogNDI6NDcgICBu b3QgdXNlZCAgICAgICAgICAgICAgICAgKi8NCj4gKwl1bnNpZ25lZCBfXzcgICAgICAgICAg OiAxNjsgIC8qIDQ4OjYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ICsNCj4g KwkvKiBCeXRlIDggfiBCeXRlIDE1ICovDQo+ICsJdW5zaWduZWQgZGl2X291dCAgICAgIDog IDY7ICAvKiAwIDogNSAgIG91dHB1dCBjbG9jayBkaXZpZGVyICAgICAqLw0KPiArCXVuc2ln bmVkIF9fOCAgICAgICAgICA6IDI2OyAgLyogNiA6IDMxICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8NCj4gKwl1bnNpZ25lZCBfXzkgICAgICAgICAgOiAzMjsgIC8qIDcwOiAxMjcg ICAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ICt9Ow0KPiArDQo+ICsvKiB1MzIgKi8N Cj4gK3N0cnVjdCBsczJrMDUwMF9waXhwbGxfYml0bWFwIHsNCj4gKwkvKiBCeXRlIDAgfiBC eXRlIDEgKi8NCj4gKwl1bnNpZ25lZCBzZWxfb3V0ICAgICAgOiAxOw0KPiArCXVuc2lnbmVk IF9fMSAgICAgICAgICA6IDI7DQo+ICsJdW5zaWduZWQgc3dfYWRqX2VuICAgIDogMTsgICAv KiBhbGxvdyBzb2Z0d2FyZSBhZGp1c3QgICAgICAgICAgICAgICovDQo+ICsJdW5zaWduZWQg YnlwYXNzICAgICAgIDogMTsgICAvKiBieXBhc3MgTDEgUExMICAgICAgICAgICAgICAgICAg ICAgICovDQo+ICsJdW5zaWduZWQgcG93ZXJkb3duICAgIDogMTsgICAvKiB3cml0ZSAxIHRv IHBvd2VyZG93biB0aGUgUExMICAgICAgICovDQo+ICsJdW5zaWduZWQgX18yICAgICAgICAg IDogMTsNCj4gKwl1bnNpZ25lZCBsb2NrZWQgICAgICAgOiAxOyAgIC8qICA3ICAgICBJcyBM MSBQTEwgbG9ja2VkLCByZWFkIG9ubHkgKi8NCj4gKwl1bnNpZ25lZCBkaXZfcmVmICAgICAg OiA2OyAgIC8qICA4OjEzICByZWYgY2xvY2sgZGl2aWRlciAgICAgICAgICAgKi8NCj4gKwl1 bnNpZ25lZCBfXzMgICAgICAgICAgOiAyOyAgIC8qIDE0OjE1ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8NCj4gKwkvKiBCeXRlIDIgfiBCeXRlIDMgKi8NCj4gKwl1bnNpZ25l ZCBsb29wYyAgICAgICAgOiA4OyAgIC8qIDE2OjIzICAgQ2xvY2sgTXVsdGlwbGllciAgICAg ICAgICAgKi8NCj4gKwl1bnNpZ25lZCBkaXZfb3V0ICAgICAgOiA2OyAgIC8qIDI0OjI5ICAg b3V0cHV0IGNsb2NrIGRpdmlkZXIgICAgICAgKi8NCj4gKwl1bnNpZ25lZCBfXzQgICAgICAg ICAgOiAyOyAgIC8qIDMwOjMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCj4g K307DQo+ICsNCj4gK3VuaW9uIGxzZGNfcGl4cGxsX2JpdG1hcCB7DQo+ICsJc3RydWN0IGxz N2ExMDAwX3BpeHBsbF9iaXRtYXAgbHM3YTEwMDA7DQo+ICsJc3RydWN0IGxzMmsxMDAwX3Bp eHBsbF9iaXRtYXAgbHMyazEwMDA7DQo+ICsJc3RydWN0IGxzMmswNTAwX3BpeHBsbF9iaXRt YXAgbHMyazA1MDA7DQo+ICsNCj4gKwl1MzIgZHdvcmRbNF07DQo+ICt9Ow0KPiArDQo+ICtz dHJ1Y3QgcGl4Y2xrX3RvX3BsbF9wYXJtIHsNCj4gKwkvKiBrSHogKi8NCj4gKwl1bnNpZ25l ZCBpbnQgY2xvY2s7DQo+ICsNCj4gKwl1bnNpZ25lZCBzaG9ydCB3aWR0aDsNCj4gKwl1bnNp Z25lZCBzaG9ydCBoZWlnaHQ7DQo+ICsJdW5zaWduZWQgc2hvcnQgdnJlZnJlc2g7DQo+ICsN Cj4gKwkvKiBTdG9yZXMgcGFyYW1ldGVycyBmb3IgcHJvZ3JhbW1pbmcgdGhlIEhhcmR3YXJl IFBMTHMgKi8NCj4gKwl1bnNpZ25lZCBzaG9ydCBkaXZfb3V0Ow0KPiArCXVuc2lnbmVkIHNo b3J0IGxvb3BjOw0KPiArCXVuc2lnbmVkIHNob3J0IGRpdl9yZWY7DQo+ICt9Ow0KPiArDQo+ ICsvKg0KPiArICogUGl4ZWwgY2xvY2sgdG8gUExMIHBhcmFtZXRlcnMgdHJhbnNsYXRpb24g dGFibGUuDQo+ICsgKiBTbWFsbCBzdGF0aWMgY2FjaGVkIHZhbHVlIHRvIHNwZWVkIHVwIFBM TCBwYXJhbWV0ZXJzIGNhbGN1bGF0aW9uLg0KPiArICovDQo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHBpeGNsa190b19wbGxfcGFybSBwbGxfcGFyYW1fdGFibGVbXSA9IHsNCj4gKwl7MTQ4 NTAwLCAxOTIwLCAxMDgwLCA2MCwgMTEsIDQ5LCAgM30sICAgLyogMTkyMHgxMDgwQDYwSHog Ki8NCj4gKwkJCQkJCS8qIDE5MjB4MTA4MEA1MEh6ICovDQo+ICsJezE3NDUwMCwgMTkyMCwg MTA4MCwgNzUsIDE3LCA4OSwgIDN9LCAgIC8qIDE5MjB4MTA4MEA3NUh6ICovDQo+ICsJezE4 MTI1MCwgMjU2MCwgMTA4MCwgNzUsICA4LCA1OCwgIDR9LCAgIC8qIDI1NjB4MTA4MEA3NUh6 ICovDQo+ICsJezE0NjI1MCwgMTY4MCwgMTA1MCwgNjAsIDE2LCAxMTcsIDV9LCAgIC8qIDE2 ODB4MTA1MEA2MEh6ICovDQo+ICsJezEzNTAwMCwgMTI4MCwgMTAyNCwgNzUsIDEwLCA1NCwg IDR9LCAgIC8qIDEyODB4MTAyNEA3NUh6ICovDQo+ICsNCj4gKwl7MTA4MDAwLCAxNjAwLCA5 MDAsICA2MCwgMTUsIDgxLCAgNX0sICAgLyogMTYwMHg5MDBANjBIeiAgKi8NCj4gKwkJCQkJ CS8qIDEyODB4MTAyNEA2MEh6ICovDQo+ICsJCQkJCQkvKiAxMjgweDk2MEA2MEh6ICovDQo+ ICsJCQkJCQkvKiAxMTUyeDg2NEA3NUh6ICovDQo+ICsNCj4gKwl7MTA2NTAwLCAxNDQwLCA5 MDAsICA2MCwgMTksIDgxLCAgNH0sICAgLyogMTQ0MHg5MDBANjBIeiAqLw0KPiArCXs4ODc1 MCwgIDE0NDAsIDkwMCwgIDYwLCAxNiwgNzEsICA1fSwgICAvKiAxNDQweDkwMEA2MEh6ICov DQo+ICsJezgzNTAwLCAgMTI4MCwgODAwLCAgNjAsIDE3LCA3MSwgIDV9LCAgIC8qIDEyODB4 ODAwQDYwSHogKi8NCj4gKwl7NzEwMDAsICAxMjgwLCA4MDAsICA2MCwgMjAsIDcxLCAgNX0s ICAgLyogMTI4MHg4MDBANjBIeiAqLw0KPiArDQo+ICsJezc0MjUwLCAgMTI4MCwgNzIwLCAg NjAsIDIyLCA0OSwgIDN9LCAgIC8qIDEyODB4NzIwQDYwSHogKi8NCj4gKwkJCQkJCS8qIDEy ODB4NzIwQDUwSHogKi8NCj4gKw0KPiArCXs3ODc1MCwgIDEwMjQsIDc2OCwgIDc1LCAxNiwg NjMsICA1fSwgICAvKiAxMDI0eDc2OEA3NUh6ICovDQo+ICsJezc1MDAwLCAgMTAyNCwgNzY4 LCAgNzAsIDI5LCA4NywgIDR9LCAgIC8qIDEwMjR4NzY4QDcwSHogKi8NCj4gKwl7NjUwMDAs ICAxMDI0LCA3NjgsICA2MCwgMjAsIDM5LCAgM30sICAgLyogMTAyNHg3NjhANjBIeiAqLw0K PiArDQo+ICsJezUxMjAwLCAgMTAyNCwgNjAwLCAgNjAsIDI1LCA2NCwgIDV9LCAgIC8qIDEw MjR4NjAwQDYwSHogKi8NCj4gKw0KPiArCXs1NzI4NCwgIDgzMiwgIDYyNCwgIDc1LCAyNCwg NTUsICA0fSwgICAvKiA4MzJ4NjI0QDc1SHogKi8NCj4gKwl7NDk1MDAsICA4MDAsICA2MDAs ICA3NSwgNDAsIDk5LCAgNX0sICAgLyogODAweDYwMEA3NUh6ICovDQo+ICsJezUwMDAwLCAg ODAwLCAgNjAwLCAgNzIsIDQ0LCA4OCwgIDR9LCAgIC8qIDgwMHg2MDBANzJIeiAqLw0KPiAr CXs0MDAwMCwgIDgwMCwgIDYwMCwgIDYwLCAzMCwgMzYsICAzfSwgICAvKiA4MDB4NjAwQDYw SHogKi8NCj4gKwl7MzYwMDAsICA4MDAsICA2MDAsICA1NiwgNTAsIDcyLCAgNH0sICAgLyog ODAweDYwMEA1Nkh6ICovDQo+ICsJezMxNTAwLCAgNjQwLCAgNDgwLCAgNzUsIDQwLCA2Mywg IDV9LCAgIC8qIDY0MHg0ODBANzVIeiAqLw0KPiArCQkJCQkJLyogNjQweDQ4MEA3M0h6ICov DQo+ICsNCj4gKwl7MzAyNDAsICA2NDAsICA0ODAsICA2NywgNjIsIDc1LCAgNH0sICAgLyog NjQweDQ4MEA2N0h6ICovDQo+ICsJezI3MDAwLCAgNzIwLCAgNTc2LCAgNTAsIDUwLCA1NCwg IDR9LCAgIC8qIDcyMHg1NzZANjBIeiAqLw0KPiArCXsyNTE3NSwgIDY0MCwgIDQ4MCwgIDYw LCA4NSwgMTA3LCA1fSwgICAvKiA2NDB4NDgwQDYwSHogKi8NCj4gKwl7MjUyMDAsICA2NDAs ICA0ODAsICA2MCwgNTAsIDYzLCAgNX0sICAgLyogNjQweDQ4MEA2MEh6ICovDQo+ICsJCQkJ CQkvKiA3MjB4NDgwQDYwSHogKi8NCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBsc2RjX3Bp eHBsbF9zZXR1cCAtIGlvcmVtYXAgdGhlIGRldmljZSBkZXBlbmRlbnQgUExMIHJlZ2lzdGVy cw0KPiArICoNCj4gKyAqIEB0aGlzOiBwb2ludCB0byB0aGUgb2JqZWN0IHdoZXJlIHRoaXMg ZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20NCj4gKyAqLw0KPiArc3RhdGljIGludCBsc2RjX3Bp eHBsbF9zZXR1cChzdHJ1Y3QgbHNkY19wbGwgKiBjb25zdCB0aGlzKQ0KPiArew0KPiArCXRo aXMtPm1taW8gPSBpb3JlbWFwKHRoaXMtPnJlZ19iYXNlLCB0aGlzLT5yZWdfc2l6ZSk7DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIEZpbmQgYSBzZXQg b2YgcGxsIHBhcmFtZXRlcnMgKHRvIGdlbmVyYXRlIHBpeGVsIGNsb2NrKSBmcm9tIGEgc3Rh dGljDQo+ICsgKiBsb2NhbCB0YWJsZSwgd2hpY2ggYXZvaWQgdG8gY29tcHV0ZSB0aGUgcGxs IHBhcmFtZXRlciBlYWNodGltZSBhDQo+ICsgKiBtb2Rlc2V0IGlzIHRyaWdnZXJlZC4NCj4g KyAqDQo+ICsgKiBAdGhpczogcG9pbnQgdG8gdGhlIG9iamVjdCB3aGljaCB0aGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCBmcm9tDQo+ICsgKiBAY2xvY2s6IHRoZSBkZXNpcmVkIG91dHB1dCBw aXhlbCBjbG9jaywgdGhlIHVuaXQgaXMga0h6DQo+ICsgKiBAcG91dDogcG9pbnQgdG8gd2hl cmUgdGhlIHBhcmFtZXRlcnMgdG8gc3RvcmUgaWYgZm91bmQNCj4gKyAqDQo+ICsgKiAgUmV0 dXJuIHRydWUgaWYgaGl0LCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLg0KPiArICovDQo+ICtz dGF0aWMgYm9vbCBsc2RjX3BpeHBsbF9maW5kKHN0cnVjdCBsc2RjX3BsbCAqIGNvbnN0IHRo aXMsDQo+ICsJCQkgICAgIHVuc2lnbmVkIGludCBjbG9jaywNCj4gKwkJCSAgICAgc3RydWN0 IGxzZGNfcGxsX3Bhcm1zICogY29uc3QgcG91dCkNCj4gK3sNCj4gKwl1bnNpZ25lZCBpbnQg bnVtID0gQVJSQVlfU0laRShwbGxfcGFyYW1fdGFibGUpOw0KPiArCXVuc2lnbmVkIGludCBp Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7DQo+ICsJCWlmIChjbG9j ayAhPSBwbGxfcGFyYW1fdGFibGVbaV0uY2xvY2spDQo+ICsJCQljb250aW51ZTsNCj4gKw0K PiArCQlwb3V0LT5kaXZfcmVmID0gcGxsX3BhcmFtX3RhYmxlW2ldLmRpdl9yZWY7DQo+ICsJ CXBvdXQtPmxvb3BjICAgPSBwbGxfcGFyYW1fdGFibGVbaV0ubG9vcGM7DQo+ICsJCXBvdXQt PmRpdl9vdXQgPSBwbGxfcGFyYW1fdGFibGVbaV0uZGl2X291dDsNCj4gKw0KPiArCQlyZXR1 cm4gdHJ1ZTsNCj4gKwl9DQo+ICsNCj4gKwlkcm1fZGJnKHRoaXMtPmRkZXYsICJwaXhlbCBj bG9jayAldTogbWlzc1xuIiwgY2xvY2spOw0KPiArDQo+ICsJcmV0dXJuIGZhbHNlOw0KPiAr fQ0KPiArDQo+ICsvKg0KPiArICogRmluZCBhIHNldCBvZiBwbGwgcGFyYW1ldGVycyB3aGlj aCBoYXZlIG1pbmltYWwgZGlmZmVyZW5jZSB3aXRoIHRoZSBkZXNpcmVkDQo+ICsgKiBwaXhl bCBjbG9jayBmcmVxdWVuY3kuIEl0IGRvZXMgdGhhdCBieSBjb21wdXRpbmcgYWxsIG9mIHRo ZSBwb3NzaWJsZQ0KPiArICogY29tYmluYXRpb24uIENvbXB1dGUgdGhlIGRpZmYgYW5kIGZp bmQgdGhlIGNvbWJpbmF0aW9uIHdpdGggbWluaW1hbCBkaWZmLg0KPiArICoNCj4gKyAqICBj bG9ja19vdXQgPSByZWZjbGsgLyBkaXZfcmVmICogbG9vcGMgLyBkaXZfb3V0DQo+ICsgKg0K PiArICogIHJlZmNsayBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvc2NpbGxhdG9yIG1vdW50ZWQg Ym9hcmQoSGVyZSBpcyAxMDBNSHogaW4NCj4gKyAqICBhbG1vc3QgYWxsIGNhc2UpDQo+ICsg Kg0KPiArICogQHRoaXM6IHBvaW50IHRvIHRoZSBvYmplY3QgZnJvbSB3aGljaCB0aGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZA0KPiArICogQGNsb2NrX2toejogdGhlIGRlc2lyZWQgb3V0cHV0 IHBpeGVsIGNsb2NrLCB0aGUgdW5pdCBpcyBrSHoNCj4gKyAqIEBwb3V0OiBwb2ludCB0byB0 aGUgb3V0IHN0cnVjdCBvZiBsc2RjX3BsbF9wYXJtcw0KPiArICoNCj4gKyAqICBSZXR1cm4g dHJ1ZSBpZiBhIHBhcmFtZXRlciBpcyBmb3VuZCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZQ0K PiArICovDQo+ICtzdGF0aWMgYm9vbCBsc2RjX3BpeHBsbF9jb21wdXRlKHN0cnVjdCBsc2Rj X3BsbCAqIGNvbnN0IHRoaXMsDQo+ICsJCQkJdW5zaWduZWQgaW50IGNsb2NrX2toeiwNCj4g KwkJCQlzdHJ1Y3QgbHNkY19wbGxfcGFybXMgKnBvdXQpDQo+ICt7DQo+ICsJdW5zaWduZWQg aW50IHJlZmNsayA9IHRoaXMtPnJlZl9jbG9jazsNCj4gKwljb25zdCB1bnNpZ25lZCBpbnQg dG9sZXJhbmNlID0gMTAwMDsNCj4gKwl1bnNpZ25lZCBpbnQgbWluID0gdG9sZXJhbmNlOw0K PiArCXVuc2lnbmVkIGludCBkaXZfb3V0LCBsb29wYywgZGl2X3JlZjsNCj4gKwl1bnNpZ25l ZCBpbnQgY29tcHV0ZWQ7DQo+ICsNCj4gKwlpZiAobHNkY19waXhwbGxfZmluZCh0aGlzLCBj bG9ja19raHosIHBvdXQpKQ0KPiArCQlyZXR1cm4gdHJ1ZTsNCj4gKw0KPiArCWZvciAoZGl2 X291dCA9IDY7IGRpdl9vdXQgPCA2NDsgZGl2X291dCsrKSB7DQo+ICsJCWZvciAoZGl2X3Jl ZiA9IDM7IGRpdl9yZWYgPCA2OyBkaXZfcmVmKyspIHsNCj4gKwkJCWZvciAobG9vcGMgPSA2 OyBsb29wYyA8IDE2MTsgbG9vcGMrKykgew0KPiArCQkJCWludCBkaWZmOw0KPiArDQo+ICsJ CQkJaWYgKGxvb3BjIDwgMTIgKiBkaXZfcmVmKQ0KPiArCQkJCQljb250aW51ZTsNCj4gKwkJ CQlpZiAobG9vcGMgPiAzMiAqIGRpdl9yZWYpDQo+ICsJCQkJCWNvbnRpbnVlOw0KPiArDQo+ ICsJCQkJY29tcHV0ZWQgPSByZWZjbGsgKiBsb29wYyAvIGRpdl9yZWYgLyBkaXZfb3V0Ow0K PiArDQo+ICsJCQkJaWYgKGNsb2NrX2toeiA+IGNvbXB1dGVkKQ0KPiArCQkJCQlkaWZmID0g Y2xvY2tfa2h6IC0gY29tcHV0ZWQ7DQo+ICsJCQkJZWxzZSBpZiAoY2xvY2tfa2h6IDwgY29t cHV0ZWQpDQo+ICsJCQkJCWRpZmYgPSBjb21wdXRlZCAtIGNsb2NrX2toejsNCj4gKw0KPiAr CQkJCWlmIChkaWZmIDwgbWluKSB7DQo+ICsJCQkJCW1pbiA9IGRpZmY7DQo+ICsJCQkJCXBv dXQtPmRpdl9yZWYgPSBkaXZfcmVmOw0KPiArCQkJCQlwb3V0LT5kaXZfb3V0ID0gZGl2X291 dDsNCj4gKwkJCQkJcG91dC0+bG9vcGMgPSBsb29wYzsNCj4gKw0KPiArCQkJCQlpZiAoZGlm ZiA9PSAwKQ0KPiArCQkJCQkJcmV0dXJuIHRydWU7DQo+ICsJCQkJfQ0KPiArCQkJfQ0KPiAr CQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIG1pbiA8IHRvbGVyYW5jZTsNCj4gK30NCj4g Kw0KPiArLyoNCj4gKyAqIFVwZGF0ZSB0aGUgcGxsIHBhcmFtZXRlcnMgdG8gaGFyZHdhcmUs IHRhcmdldCB0byB0aGUgcGl4cGxsIGluIGxzN2ExMDAwDQo+ICsgKg0KPiArICogQHRoaXM6 IHBvaW50IHRvIHRoZSBvYmplY3QgZnJvbSB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZA0KPiArICogQHBpbjogcG9pbnQgdG8gdGhlIHN0cnVjdCBvZiBsc2RjX3BsbF9wYXJtcyBw YXNzZWQgaW4NCj4gKyAqDQo+ICsgKiByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLg0KPiArICov DQo+ICtzdGF0aWMgaW50IGxzN2ExMDAwX3BpeHBsbF9wYXJhbV91cGRhdGUoc3RydWN0IGxz ZGNfcGxsICogY29uc3QgdGhpcywNCj4gKwkJCQkJc3RydWN0IGxzZGNfcGxsX3Bhcm1zIGNv bnN0ICpwaW4pDQo+ICt7DQo+ICsJdm9pZCBfX2lvbWVtICpyZWcgPSB0aGlzLT5tbWlvOw0K PiArCXVuc2lnbmVkIGludCBjb3VudGVyID0gMDsNCj4gKwlib29sIGxvY2tlZDsNCj4gKwl1 MzIgdmFsOw0KPiArDQo+ICsJLyogQnlwYXNzIHRoZSBzb2Z0d2FyZSBjb25maWd1cmVkIFBM TCwgdXNpbmcgcmVmY2xrIGRpcmVjdGx5ICovDQo+ICsJdmFsID0gcmVhZGwocmVnICsgMHg0 KTsNCj4gKwl2YWwgJj0gfigxIDw8IDgpOw0KPiArCXdyaXRlbCh2YWwsIHJlZyArIDB4NCk7 DQo+ICsNCj4gKwkvKiBQb3dlcmRvd24gdGhlIFBMTCAqLw0KPiArCXZhbCA9IHJlYWRsKHJl ZyArIDB4NCk7DQo+ICsJdmFsIHw9ICgxIDw8IDEzKTsNCj4gKwl3cml0ZWwodmFsLCByZWcg KyAweDQpOw0KPiArDQo+ICsJLyogQ2xlYXIgdGhlIHBsbCBwYXJhbWV0ZXJzICovDQo+ICsJ dmFsID0gcmVhZGwocmVnICsgMHg0KTsNCj4gKwl2YWwgJj0gfigxIDw8IDExKTsNCj4gKwl3 cml0ZWwodmFsLCByZWcgKyAweDQpOw0KPiArDQo+ICsJLyogY2xlYXIgb2xkIHZhbHVlICYg Y29uZmlnIG5ldyB2YWx1ZSAqLw0KPiArCXZhbCA9IHJlYWRsKHJlZyArIDB4MDQpOw0KPiAr CXZhbCAmPSB+MHg3RjsNCj4gKwl2YWwgfD0gcGluLT5kaXZfcmVmOyAgICAgICAgLyogZGl2 X3JlZiAqLw0KPiArCXdyaXRlbCh2YWwsIHJlZyArIDB4NCk7DQo+ICsNCj4gKwl2YWwgPSBy ZWFkbChyZWcpOw0KPiArCXZhbCAmPSB+MHg3ZjsNCj4gKwl2YWwgfD0gcGluLT5kaXZfb3V0 OyAgICAgICAgLyogZGl2X291dCAqLw0KPiArDQo+ICsJdmFsICY9IH4oMHgxZmYgPDwgMjEp Ow0KPiArCXZhbCB8PSBwaW4tPmxvb3BjIDw8IDIxOyAgICAvKiBsb29wYyAqLw0KPiArCXdy aXRlbCh2YWwsIHJlZyk7DQo+ICsNCj4gKwkvKiBTZXQgdGhlIHBsbCB0aGUgcGFyYW1ldGVy cyAqLw0KPiArCXZhbCA9IHJlYWRsKHJlZyArIDB4NCk7DQo+ICsJdmFsIHw9ICgxIDw8IDEx KTsNCj4gKwl3cml0ZWwodmFsLCByZWcgKyAweDQpOw0KPiArDQo+ICsJLyogUG93ZXJ1cCB0 aGUgUExMICovDQo+ICsJdmFsID0gcmVhZGwocmVnICsgMHg0KTsNCj4gKwl2YWwgJj0gfigx IDw8IDEzKTsNCj4gKwl3cml0ZWwodmFsLCByZWcgKyAweDQpOw0KPiArDQo+ICsJLyogV2Fp dCB0aGUgUExMIGxvY2sgKi8NCj4gKwlkbyB7DQo+ICsJCXZhbCA9IHJlYWRsKHJlZyArIDB4 NCk7DQo+ICsJCWxvY2tlZCA9IHZhbCAmIDB4ODA7DQo+ICsJCWNvdW50ZXIrKzsNCj4gKwl9 IHdoaWxlICghbG9ja2VkICYmIChjb3VudGVyIDwgMjAwMCkpOw0KPiArDQo+ICsJZHJtX2Ri Zyh0aGlzLT5kZGV2LCAiJXUgbG9vcCB3YWl0ZWRcbiIsIGNvdW50ZXIpOw0KPiArDQo+ICsJ LyogU3dpdGNoIHRvIHRoZSBzb2Z0d2FyZSBjb25maWd1cmVkIHBsbCAqLw0KPiArCXZhbCA9 IHJlYWRsKHJlZyArIDB4NCk7DQo+ICsJdmFsIHw9ICgxVUwgPDwgOCk7DQo+ICsJd3JpdGVs KHZhbCwgcmVnICsgMHg0KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsv Kg0KPiArICogVXBkYXRlIHRoZSBwbGwgcGFyYW1ldGVycyB0byBoYXJkd2FyZSwgdGFyZ2V0 IHRvIHRoZSBwaXhwbGwgaW4gbHMyazEwMDANCj4gKyAqDQo+ICsgKiBAdGhpczogcG9pbnQg dG8gdGhlIG9iamVjdCBmcm9tIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkDQo+ICsg KiBAcGluOiBwb2ludCB0byB0aGUgc3RydWN0IG9mIGxzZGNfcGxsX3Bhcm1zIHBhc3NlZCBp bg0KPiArICoNCj4gKyAqIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwuDQo+ICsgKi8NCj4gK3N0 YXRpYyBpbnQgbHMyazEwMDBfcGl4cGxsX3BhcmFtX3VwZGF0ZShzdHJ1Y3QgbHNkY19wbGwg KiBjb25zdCB0aGlzLA0KPiArCQkJCQlzdHJ1Y3QgbHNkY19wbGxfcGFybXMgY29uc3QgKnBp bikNCj4gK3sNCj4gKwl2b2lkIF9faW9tZW0gKnJlZyA9IHRoaXMtPm1taW87DQo+ICsJdW5z aWduZWQgaW50IGNvdW50ZXIgPSAwOw0KPiArCWJvb2wgbG9ja2VkID0gZmFsc2U7DQo+ICsJ dTMyIHZhbDsNCj4gKw0KPiArCXZhbCA9IHJlYWRsKHJlZyk7DQo+ICsJLyogQnlwYXNzIHRo ZSBzb2Z0d2FyZSBjb25maWd1cmVkIFBMTCwgdXNpbmcgcmVmY2xrIGRpcmVjdGx5ICovDQo+ ICsJdmFsICY9IH4oMSA8PCAwKTsNCj4gKwl3cml0ZWwodmFsLCByZWcpOw0KPiArDQo+ICsJ LyogUG93ZXJkb3duIHRoZSBQTEwgKi8NCj4gKwl2YWwgfD0gKDEgPDwgMTkpOw0KPiArCXdy aXRlbCh2YWwsIHJlZyk7DQo+ICsNCj4gKwkvKiBBbGxvdyB0aGUgc29mdHdhcmUgY29uZmln dXJhdGlvbiAqLw0KPiArCXZhbCAmPSB+KDEgPDwgMik7DQo+ICsJd3JpdGVsKHZhbCwgcmVn KTsNCj4gKw0KPiArCS8qIGFsbG93IEwxIFBMTCBsb2NrICovDQo+ICsJdmFsID0gKDFMIDw8 IDcpIHwgKDNMIDw8IDEwKTsNCj4gKwl3cml0ZWwodmFsLCByZWcpOw0KPiArDQo+ICsJLyog Y2xlYXIgZGl2X3JlZiBiaXQgZmllbGQgKi8NCj4gKwl2YWwgJj0gfigweDNmIDw8IDI2KTsN Cj4gKwkvKiBzZXQgZGl2X3JlZiBiaXQgZmllbGQgKi8NCj4gKwl2YWwgfD0gcGluLT5kaXZf cmVmIDw8IDI2Ow0KPiArCXdyaXRlbCh2YWwsIHJlZyk7DQo+ICsNCj4gKwl2YWwgPSByZWFk bChyZWcgKyA0KTsNCj4gKwkvKiBjbGVhciBsb29wYyBiaXQgZmllbGQgKi8NCj4gKwl2YWwg Jj0gfjB4MGZmZjsNCj4gKwkvKiBzZXQgbG9vcGMgYml0IGZpZWxkICovDQo+ICsJdmFsIHw9 IHBpbi0+bG9vcGM7DQo+ICsJd3JpdGVsKHZhbCwgcmVnICsgNCk7DQo+ICsNCj4gKwkvKiBz ZXQgZGl2X291dCAqLw0KPiArCXdyaXRlbChwaW4tPmRpdl9vdXQsIHJlZyArIDgpOw0KPiAr DQo+ICsJdmFsID0gcmVhZGwocmVnKTsNCj4gKwkvKiB1c2UgdGhpcyBwYXJtcyBjb25maWd1 cmVkIGp1c3Qgbm93ICovDQo+ICsJdmFsIHw9ICgxIDw8IDIpOw0KPiArCS8qIHBvd2VydXAg dGhlIFBMTCAqLw0KPiArCXZhbCAmPSB+KDEgPDwgMTkpOw0KPiArCXdyaXRlbCh2YWwsIHJl Zyk7DQo+ICsNCj4gKwkvKiB3YWl0IHBsbCBzZXR1cCBhbmQgbG9ja2VkICovDQo+ICsJZG8g ew0KPiArCQl2YWwgPSByZWFkbChyZWcpOw0KPiArCQlsb2NrZWQgPSB2YWwgJiAweDEwMDAw Ow0KPiArCQljb3VudGVyKys7DQo+ICsJfSB3aGlsZSAoIWxvY2tlZCAmJiAoY291bnRlciA8 IDIwMDApKTsNCj4gKw0KPiArCWRybV9kYmcodGhpcy0+ZGRldiwgIiV1IGxvb3Agd2FpdGVk XG4iLCBjb3VudGVyKTsNCj4gKw0KPiArCS8qIFN3aXRjaCB0byBzb2Z0d2FyZSBjb25maWd1 cmVkIFBMTCBpbnN0ZWFkIG9mIHJlZmNsayAqLw0KPiArCXZhbCB8PSAxOw0KPiArCXdyaXRl bCh2YWwsIHJlZyk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoNCj4g KyAqIFVwZGF0ZSB0aGUgcGxsIHBhcmFtZXRlcnMgdG8gaGFyZHdhcmUsIHRhcmdldCB0byB0 aGUgcGl4cGxsIGluIGxzMmswNTAwDQo+ICsgKg0KPiArICogQHRoaXM6IHBvaW50IHRvIHRo ZSBvYmplY3Qgd2hpY2ggY2FsbGluZyB0aGlzIGZ1bmN0aW9uDQo+ICsgKiBAcGFyYW06IHBv aW50ZXIgdG8gd2hlcmUgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGluDQo+ICsgKg0KPiArICog cmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4NCj4gKyAqLw0KPiArc3RhdGljIGludCBsczJrMDUw MF9waXhwbGxfcGFyYW1fdXBkYXRlKHN0cnVjdCBsc2RjX3BsbCAqIGNvbnN0IHRoaXMsDQo+ ICsJCQkJCXN0cnVjdCBsc2RjX3BsbF9wYXJtcyBjb25zdCAqcGFyYW0pDQo+ICt7DQo+ICsJ dm9pZCBfX2lvbWVtICpyZWcgPSB0aGlzLT5tbWlvOw0KPiArCXVuc2lnbmVkIGludCBjb3Vu dGVyID0gMDsNCj4gKwlib29sIGxvY2tlZCA9IGZhbHNlOw0KPiArCXUzMiB2YWw7DQo+ICsN Cj4gKwkvKiBCeXBhc3MgdGhlIHNvZnR3YXJlIGNvbmZpZ3VyZWQgUExMLCB1c2luZyByZWZj bGsgZGlyZWN0bHkgKi8NCj4gKwl2YWwgPSByZWFkbChyZWcpOw0KPiArCXZhbCAmPSB+KDEg PDwgMCk7DQo+ICsJd3JpdGVsKHZhbCwgcmVnKTsNCj4gKw0KPiArCS8qIFBvd2VyZG93biB0 aGUgUExMICovDQo+ICsJdmFsID0gcmVhZGwocmVnKTsNCj4gKwl2YWwgfD0gKDEgPDwgNSk7 DQo+ICsJd3JpdGVsKHZhbCwgcmVnKTsNCj4gKw0KPiArCS8qIEFsbG93IHRoZSBzb2Z0d2Fy ZSBjb25maWd1cmF0aW9uICovDQo+ICsJdmFsIHw9ICgxIDw8IDMpOw0KPiArCXdyaXRlbCh2 YWwsIHJlZyk7DQo+ICsNCj4gKwkvKiBVcGRhdGUgdGhlIHBsbCBwYXJhbXMgKi8NCj4gKwl2 YWwgPSAocGFyYW0tPmRpdl9vdXQgPDwgMjQpIHwNCj4gKwkgICAgICAocGFyYW0tPmxvb3Bj IDw8IDE2KSB8DQo+ICsJICAgICAgKHBhcmFtLT5kaXZfcmVmIDw8IDgpOw0KPiArDQo+ICsJ d3JpdGVsKHZhbCwgcmVnKTsNCj4gKw0KPiArCS8qIFBvd2VydXAgdGhlIFBMTCAqLw0KPiAr CXZhbCA9IHJlYWRsKHJlZyk7DQo+ICsJdmFsICY9IH4oMSA8PCA1KTsNCj4gKwl3cml0ZWwo dmFsLCByZWcpOw0KPiArDQo+ICsJLyogd2FpdCBwbGwgc2V0dXAgYW5kIGxvY2tlZCAqLw0K PiArCWRvIHsNCj4gKwkJdmFsID0gcmVhZGwocmVnKTsNCj4gKwkJbG9ja2VkID0gdmFsICYg MHg4MDsNCj4gKwkJY291bnRlcisrOw0KPiArCX0gd2hpbGUgKCFsb2NrZWQgJiYgKGNvdW50 ZXIgPCAxMDAwMCkpOw0KPiArDQo+ICsJZHJtX2RiZyh0aGlzLT5kZGV2LCAiJXUgbG9vcCB3 YWl0ZWRcbiIsIGNvdW50ZXIpOw0KPiArDQo+ICsJLyogU3dpdGNoIHRvIHNvZnR3YXJlIGNv bmZpZ3VyZWQgUExMIGluc3RlYWQgb2YgcmVmY2xrICovDQo+ICsJd3JpdGVsKCh2YWwgfCAx KSwgcmVnKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5z aWduZWQgaW50IGxzZGNfZ2V0X2Nsb2NrX3JhdGUoc3RydWN0IGxzZGNfcGxsICogY29uc3Qg dGhpcywNCj4gKwkJCQkJc3RydWN0IGxzZGNfcGxsX3Bhcm1zICpwb3V0KQ0KPiArew0KPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gdGhpcy0+ZGRldjsNCj4gKwlzdHJ1Y3QgbHNk Y19kZXZpY2UgKmxkZXYgPSB0b19sc2RjKGRkZXYpOw0KPiArCWNvbnN0IHN0cnVjdCBsc2Rj X2Rlc2MgKiBjb25zdCBkZXNjcCA9IGxkZXYtPmRlc2NwOw0KPiArCXVuc2lnbmVkIGludCBv dXQ7DQo+ICsJdW5pb24gbHNkY19waXhwbGxfYml0bWFwIHBhcm1zOw0KPiArDQo+ICsJaWYg KGRlc2NwLT5jaGlwID09IENISVBfTFM3QTEwMDAgfHwgZGVzY3AtPmNoaXAgPT0gQ0hJUF9M UzdBMjAwMCkgew0KPiArCQlzdHJ1Y3QgbHM3YTEwMDBfcGl4cGxsX2JpdG1hcCAqb2JqID0g JnBhcm1zLmxzN2ExMDAwOw0KPiArDQo+ICsJCXBhcm1zLmR3b3JkWzBdID0gcmVhZGwodGhp cy0+bW1pbyk7DQo+ICsJCXBhcm1zLmR3b3JkWzFdID0gcmVhZGwodGhpcy0+bW1pbyArIDQp Ow0KPiArCQlvdXQgPSB0aGlzLT5yZWZfY2xvY2sgLyBvYmotPmRpdl9yZWYgKiBvYmotPmxv b3BjIC8gb2JqLT5kaXZfb3V0Ow0KPiArCQlpZiAocG91dCkgew0KPiArCQkJcG91dC0+ZGl2 X3JlZiA9IG9iai0+ZGl2X3JlZjsNCj4gKwkJCXBvdXQtPmxvb3BjID0gb2JqLT5sb29wYzsN Cj4gKwkJCXBvdXQtPmRpdl9vdXQgPSBvYmotPmRpdl9vdXQ7DQo+ICsJCX0NCj4gKwl9IGVs c2UgaWYgKGRlc2NwLT5jaGlwID09IENISVBfTFMySzEwMDApIHsNCj4gKwkJc3RydWN0IGxz MmsxMDAwX3BpeHBsbF9iaXRtYXAgKm9iaiA9ICZwYXJtcy5sczJrMTAwMDsNCj4gKw0KPiAr CQlwYXJtcy5kd29yZFswXSA9IHJlYWRsKHRoaXMtPm1taW8pOw0KPiArCQlwYXJtcy5kd29y ZFsxXSA9IHJlYWRsKHRoaXMtPm1taW8gKyA0KTsNCj4gKwkJcGFybXMuZHdvcmRbMl0gPSBy ZWFkbCh0aGlzLT5tbWlvICsgOCk7DQo+ICsJCXBhcm1zLmR3b3JkWzNdID0gcmVhZGwodGhp cy0+bW1pbyArIDEyKTsNCj4gKwkJb3V0ID0gdGhpcy0+cmVmX2Nsb2NrIC8gb2JqLT5kaXZf cmVmICogb2JqLT5sb29wYyAvIG9iai0+ZGl2X291dDsNCj4gKwkJaWYgKHBvdXQpIHsNCj4g KwkJCXBvdXQtPmRpdl9yZWYgPSBvYmotPmRpdl9yZWY7DQo+ICsJCQlwb3V0LT5sb29wYyA9 IG9iai0+bG9vcGM7DQo+ICsJCQlwb3V0LT5kaXZfb3V0ID0gb2JqLT5kaXZfb3V0Ow0KPiAr CQl9DQo+ICsJfSBlbHNlIGlmIChkZXNjcC0+Y2hpcCA9PSBDSElQX0xTMkswNTAwKSB7DQo+ ICsJCXN0cnVjdCBsczJrMDUwMF9waXhwbGxfYml0bWFwICpvYmogPSAmcGFybXMubHMyazA1 MDA7DQo+ICsNCj4gKwkJcGFybXMuZHdvcmRbMF0gPSByZWFkbCh0aGlzLT5tbWlvKTsNCj4g KwkJb3V0ID0gdGhpcy0+cmVmX2Nsb2NrIC8gb2JqLT5kaXZfcmVmICogb2JqLT5sb29wYyAv IG9iai0+ZGl2X291dDsNCj4gKwkJaWYgKHBvdXQpIHsNCj4gKwkJCXBvdXQtPmRpdl9yZWYg PSBvYmotPmRpdl9yZWY7DQo+ICsJCQlwb3V0LT5sb29wYyA9IG9iai0+bG9vcGM7DQo+ICsJ CQlwb3V0LT5kaXZfb3V0ID0gb2JqLT5kaXZfb3V0Ow0KPiArCQl9DQo+ICsJfSBlbHNlIHsN Cj4gKwkJZHJtX2VycihkZGV2LCAidW5rbm93biBjaGlwLCB0aGUgZHJpdmVyIG5lZWQgdXBk YXRlXG4iKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIG91dDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBsc2RjX3BpeHBsbF9mdW5jcyBs czdhMTAwMF9waXhwbGxfZnVuY3MgPSB7DQo+ICsJLnNldHVwID0gbHNkY19waXhwbGxfc2V0 dXAsDQo+ICsJLmNvbXB1dGUgPSBsc2RjX3BpeHBsbF9jb21wdXRlLA0KPiArCS51cGRhdGUg PSBsczdhMTAwMF9waXhwbGxfcGFyYW1fdXBkYXRlLA0KPiArCS5nZXRfY2xvY2tfcmF0ZSA9 IGxzZGNfZ2V0X2Nsb2NrX3JhdGUsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGxzZGNfcGl4cGxsX2Z1bmNzIGxzMmsxMDAwX3BpeHBsbF9mdW5jcyA9IHsNCj4gKwku c2V0dXAgPSBsc2RjX3BpeHBsbF9zZXR1cCwNCj4gKwkuY29tcHV0ZSA9IGxzZGNfcGl4cGxs X2NvbXB1dGUsDQo+ICsJLnVwZGF0ZSA9IGxzMmsxMDAwX3BpeHBsbF9wYXJhbV91cGRhdGUs DQo+ICsJLmdldF9jbG9ja19yYXRlID0gbHNkY19nZXRfY2xvY2tfcmF0ZSwNCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHNkY19waXhwbGxfZnVuY3MgbHMyazA1MDBf cGl4cGxsX2Z1bmNzID0gew0KPiArCS5zZXR1cCA9IGxzZGNfcGl4cGxsX3NldHVwLA0KPiAr CS5jb21wdXRlID0gbHNkY19waXhwbGxfY29tcHV0ZSwNCj4gKwkudXBkYXRlID0gbHMyazA1 MDBfcGl4cGxsX3BhcmFtX3VwZGF0ZSwNCj4gKwkuZ2V0X2Nsb2NrX3JhdGUgPSBsc2RjX2dl dF9jbG9ja19yYXRlLA0KPiArfTsNCj4gKw0KPiAraW50IGxzZGNfcGl4cGxsX2luaXQoc3Ry dWN0IGxzZGNfcGxsICogY29uc3QgdGhpcywNCj4gKwkJICAgICBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGRldiwNCj4gKwkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpDQo+ICt7DQo+ICsJc3Ry dWN0IGxzZGNfZGV2aWNlICpsZGV2ID0gdG9fbHNkYyhkZGV2KTsNCj4gKwljb25zdCBzdHJ1 Y3QgbHNkY19kZXNjICpkZXNjcCA9IGxkZXYtPmRlc2NwOw0KPiArDQo+ICsJdGhpcy0+ZGRl diA9IGRkZXY7DQo+ICsJdGhpcy0+aW5kZXggPSBpbmRleDsNCj4gKwl0aGlzLT5yZWZfY2xv Y2sgPSBMU0RDX1BMTF9SRUZfQ0xLOw0KPiArDQo+ICsJLyogTFM3QTEwMDAgYW5kIExTN0Ey MDAwJ3MgcGl4cGxsIHNldHRpbmcgcmVnaXN0ZXJzIGlzIHNhbWUgKi8NCj4gKwlpZiAoZGVz Y3AtPmNoaXAgPT0gQ0hJUF9MUzdBMjAwMCB8fCBkZXNjcC0+Y2hpcCA9PSBDSElQX0xTN0Ex MDAwKSB7DQo+ICsJCWlmIChpbmRleCA9PSAwKQ0KPiArCQkJdGhpcy0+cmVnX2Jhc2UgPSBM UzdBMTAwMF9DRkdfUkVHX0JBU0UgKyBMUzdBMTAwMF9QSVhfUExMMF9SRUc7DQo+ICsJCWVs c2UgaWYgKGluZGV4ID09IDEpDQo+ICsJCQl0aGlzLT5yZWdfYmFzZSA9IExTN0ExMDAwX0NG R19SRUdfQkFTRSArIExTN0ExMDAwX1BJWF9QTEwxX1JFRzsNCj4gKwkJdGhpcy0+cmVnX3Np emUgPSA4Ow0KPiArCQl0aGlzLT5mdW5jcyA9ICZsczdhMTAwMF9waXhwbGxfZnVuY3M7DQo+ ICsJfSBlbHNlIGlmIChkZXNjcC0+Y2hpcCA9PSBDSElQX0xTMksxMDAwKSB7DQo+ICsJCWlm IChpbmRleCA9PSAwKQ0KPiArCQkJdGhpcy0+cmVnX2Jhc2UgPSBMUzJLMTAwMF9DRkdfUkVH X0JBU0UgKyBMUzJLMTAwMF9QSVhfUExMMF9SRUc7DQo+ICsJCWVsc2UgaWYgKGluZGV4ID09 IDEpDQo+ICsJCQl0aGlzLT5yZWdfYmFzZSA9IExTMksxMDAwX0NGR19SRUdfQkFTRSArIExT MksxMDAwX1BJWF9QTEwxX1JFRzsNCj4gKw0KPiArCQl0aGlzLT5yZWdfc2l6ZSA9IDE2Ow0K PiArCQl0aGlzLT5mdW5jcyA9ICZsczJrMTAwMF9waXhwbGxfZnVuY3M7DQo+ICsJfSBlbHNl IGlmIChkZXNjcC0+Y2hpcCA9PSBDSElQX0xTMkswNTAwKSB7DQo+ICsJCWlmIChpbmRleCA9 PSAwKQ0KPiArCQkJdGhpcy0+cmVnX2Jhc2UgPSBMUzJLMDUwMF9DRkdfUkVHX0JBU0UgKyBM UzJLMDUwMF9QSVhfUExMMF9SRUc7DQo+ICsJCWVsc2UgaWYgKGluZGV4ID09IDEpDQo+ICsJ CQl0aGlzLT5yZWdfYmFzZSA9IExTMkswNTAwX0NGR19SRUdfQkFTRSArIExTMkswNTAwX1BJ WF9QTEwxX1JFRzsNCj4gKw0KPiArCQl0aGlzLT5yZWdfc2l6ZSA9IDQ7DQo+ICsJCXRoaXMt PmZ1bmNzID0gJmxzMmswNTAwX3BpeHBsbF9mdW5jczsNCj4gKwl9IGVsc2Ugew0KPiArCQlk cm1fZXJyKHRoaXMtPmRkZXYsICJ1bmtub3duIGNoaXAsIHRoZSBkcml2ZXIgbmVlZCB1cGRh dGVcbiIpOw0KPiArCQlyZXR1cm4gLUVOT0VOVDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4g dGhpcy0+ZnVuY3MtPnNldHVwKHRoaXMpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2xzZGMvbHNkY19wbGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNf cGxsLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi41 Mzg3MzlmNDYxZjINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v bHNkYy9sc2RjX3BsbC5oDQo+IEBAIC0wLDAgKzEsNzggQEANCj4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+ICsNCj4gKyNpZm5kZWYgX19MU0RDX1BMTF9I X18NCj4gKyNkZWZpbmUgX19MU0RDX1BMTF9IX18NCj4gKw0KPiArI2luY2x1ZGUgPGRybS9k cm1fZGV2aWNlLmg+DQo+ICsNCj4gKy8qDQo+ICsgKiBMb29uZ3NvbiBQaXhlbCBQTEwgaGFy ZHdhcmUgc3RydWN0dXJlDQo+ICsgKg0KPiArICogcmVmY2xrOiByZWZlcmVuY2UgZnJlcXVl bmN5LCAxMDAgTUh6IGZyb20gZXh0ZXJuYWwgb3NjaWxsYXRvcg0KPiArICogb3V0Y2xrOiBv dXRwdXQgZnJlcXVlbmN5IGRlc2lyZWQuDQo+ICsgKg0KPiArICoNCj4gKyAqICAgICAgICAg ICAgICAgTDEgICAgICAgRnJlZiAgICAgICAgICAgICAgICAgICAgICBGdmNvICAgICBMMg0K PiArICogcmVmY2xrICAgKy0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0r ICAgICAgKy0tLS0tLS0tLSsgICBvdXRjbGsNCj4gKyAqIC0tLSstLS0+IHwgUHJlc2NhbGVy IHwgLS0tPiB8IENsb2NrIE11bHRpcGxpZXIgfCAtLS0+IHwgZGl2aWRlciB8IC0tLS0tLS0t Pg0KPiArICogICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0tLS0t LS0rICAgICAgKy0tLS0tLS0tLSsgICAgIF4NCj4gKyAqICAgIHwgICAgICAgICAgIF4gICAg ICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICB8DQo+ ICsgKiAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgfA0KPiArICogICAgfCAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwNCj4gKyAq ICAgIHwgICAgICAgIGRpdl9yZWYgICAgICAgICAgICAgICAgIGxvb3BjICAgICAgICAgICAg ICAgZGl2X291dCAgICAgICB8DQo+ICsgKiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiArICogICAg Ky0tLSBzZWxfb3V0IChieXBhc3MgYWJvdmUgc29mdHdhcmUgY29uZmlndXJhYmxlIGNsb2Nr IGlmIHNldCkgLS0tLSsNCj4gKyAqDQo+ICsgKiAgc2VsX291dDogUExMIGNsb2NrIG91dHB1 dCBzZWxlY3RvciAoZm9yIGRlYnVnIHB1cnBvc2Ugb25seSkuDQo+ICsgKg0KPiArICogIElm IHNlbF9vdXQgPT0gMSwgaXQgd2lsbCB0YWtlIHJlZmNsayBhcyBvdXRwdXQgZGlyZWN0bHks DQo+ICsgKiAgdGhlIEwxIFByZXNjYWxlciBhbmQgdGhlIG91dCBkaXZpZGVyIHdpbGwgYmUg YnlwYXNzZWQuDQo+ICsgKg0KPiArICogIElmIHNlbF9vdXQgPT0gMCwgdGhlbiBvdXRjbGsg PSByZWZjbGsgLyBkaXZfcmVmICogbG9vcGMgLyBkaXZfb3V0Ow0KPiArICoNCj4gKyAqIFBM TCB3b3JraW5nIHJlcXVpcmVtZW50czoNCj4gKyAqDQo+ICsgKiAgMSkgMjAgTUh6IDw9IHJl ZmNsayAvIGRpdl9yZWYgPD0gNDBNaHoNCj4gKyAqICAyKSAxLjIgR0h6IDw9IHJlZmNsayAv ZGl2X291dCAqIGxvb3BjIDw9IDMuMiBHaHoNCj4gKyAqLw0KPiArDQo+ICtzdHJ1Y3QgbHNk Y19wbGxfcGFybXMgew0KPiArCXVuc2lnbmVkIGludCBkaXZfcmVmOw0KPiArCXVuc2lnbmVk IGludCBsb29wYzsNCj4gKwl1bnNpZ25lZCBpbnQgZGl2X291dDsNCj4gK307DQo+ICsNCj4g K3N0cnVjdCBsc2RjX3BsbDsNCj4gKw0KPiArc3RydWN0IGxzZGNfcGl4cGxsX2Z1bmNzIHsN Cj4gKwlpbnQgKCpzZXR1cCkoc3RydWN0IGxzZGNfcGxsICogY29uc3QgdGhpcyk7DQo+ICsJ Ym9vbCAoKmNvbXB1dGUpKHN0cnVjdCBsc2RjX3BsbCAqIGNvbnN0IHRoaXMsDQo+ICsJCQl1 bnNpZ25lZCBpbnQgY2xvY2ssDQo+ICsJCQlzdHJ1Y3QgbHNkY19wbGxfcGFybXMgKnBvdXQp Ow0KPiArCWludCAoKnVwZGF0ZSkoc3RydWN0IGxzZGNfcGxsICogY29uc3QgdGhpcywNCj4g KwkJICAgICAgc3RydWN0IGxzZGNfcGxsX3Bhcm1zIGNvbnN0ICpwaW4pOw0KPiArCXVuc2ln bmVkIGludCAoKmdldF9jbG9ja19yYXRlKShzdHJ1Y3QgbHNkY19wbGwgKiBjb25zdCB0aGlz LA0KPiArCQkJCSAgICAgICBzdHJ1Y3QgbHNkY19wbGxfcGFybXMgKnBvdXQpOw0KPiArfTsN Cj4gKw0KPiArc3RydWN0IGxzZGNfcGxsIHsNCj4gKwljb25zdCBzdHJ1Y3QgbHNkY19waXhw bGxfZnVuY3MgKmZ1bmNzOw0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2Ow0KPiArCXZv aWQgX19pb21lbSAqbW1pbzsNCj4gKw0KPiArCS8qIFBMTCByZWdpc3RlciBvZmZzZXQgKi8N Cj4gKwl1MzIgcmVnX2Jhc2U7DQo+ICsJLyogUExMIHJlZ2lzdGVyIHNpemUgaW4gYnl0ZXMg Ki8NCj4gKwl1MzIgcmVnX3NpemU7DQo+ICsNCj4gKwkvKiAxMDAwMDBrSHosIGZpeGVkIG9u IGFsbCBib2FyZCBmb3VuZCAqLw0KPiArCXVuc2lnbmVkIGludCByZWZfY2xvY2s7DQo+ICsN Cj4gKwl1bnNpZ25lZCBpbnQgaW5kZXg7DQo+ICt9Ow0KPiArDQo+ICtpbnQgbHNkY19waXhw bGxfaW5pdChzdHJ1Y3QgbHNkY19wbGwgKiBjb25zdCB0aGlzLA0KPiArCQkgICAgIHN0cnVj dCBkcm1fZGV2aWNlICpkZGV2LA0KPiArCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCk7DQo+ ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNk Y19yZWdzLmMgYi9kcml2ZXJzL2dwdS9kcm0vbHNkYy9sc2RjX3JlZ3MuYw0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM3OTUwYzQzOTY4Zg0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcmVncy5j DQo+IEBAIC0wLDAgKzEsMjkgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+ICsNCj4gKyNpbmNsdWRlICJsc2RjX2Rydi5oIg0KPiArI2luY2x1ZGUgImxz ZGNfcmVncy5oIg0KPiArDQo+ICt1MzIgbHNkY19ycmVnMzIoc3RydWN0IGxzZGNfZGV2aWNl ICogY29uc3QgbGRldiwgdTMyIG9mZnNldCkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzOw0KPiArCXUzMiByZXQ7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGRldi0+ cmVnbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJcmV0ID0gcmVhZGwobGRldi0+cmVnX2Jhc2Ug KyBvZmZzZXQpOw0KPiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGRldi0+cmVn bG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArdm9p ZCBsc2RjX3dyZWczMihzdHJ1Y3QgbHNkY19kZXZpY2UgKiBjb25zdCBsZGV2LCB1MzIgb2Zm c2V0LCB1MzIgdmFsKQ0KPiArew0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsNCj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmbGRldi0+cmVnbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJ d3JpdGVsKHZhbCwgbGRldi0+cmVnX2Jhc2UgKyBvZmZzZXQpOw0KPiArDQo+ICsJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmbGRldi0+cmVnbG9jaywgZmxhZ3MpOw0KPiArfQ0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xzZGMvbHNkY19yZWdzLmggYi9kcml2ZXJzL2dw dS9kcm0vbHNkYy9sc2RjX3JlZ3MuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjgyODk1NjYzMzEzNw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9sc2RjL2xzZGNfcmVncy5oDQo+IEBAIC0wLDAgKzEsMjk2IEBA DQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiArDQo+ICsj aWZuZGVmIF9fTFNEQ19SRUdTX0hfXw0KPiArI2RlZmluZSBfX0xTRENfUkVHU19IX18NCj4g Kw0KPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+DQo+ICsNCj4gKy8qDQo+ICsgKiBQSVhFTCBQTEwgUmVmZXJlbmNlIGNsb2NrDQo+ ICsgKi8NCj4gKyNkZWZpbmUgTFNEQ19QTExfUkVGX0NMSyAgICAgICAgICAgICAgICAxMDAw MDAgICAgICAgICAgIC8qIGtIeiAqLw0KPiArDQo+ICsvKg0KPiArICogVGhvc2UgUExMIHJl Z2lzdGVycyBhcmUgbm90IGxvY2F0ZWQgYXQgREMgcmVnIGJhciBzcGFjZSwNCj4gKyAqIHRo ZXJlIGFyZSByZWxhdGl2ZSB0byBMU1hYWFhYX0NGR19SRUdfQkFTRS4NCj4gKyAqIFhYWFhY ID0gN0ExMDAwLCAySzEwMDAsIDJLMDUwMA0KPiArICovDQo+ICsNCj4gKy8qIExTMksxMDAw ICovDQo+ICsjZGVmaW5lIExTMksxMDAwX1BJWF9QTEwwX1JFRyAgICAgICAgICAgMHgwNEIw DQo+ICsjZGVmaW5lIExTMksxMDAwX1BJWF9QTEwxX1JFRyAgICAgICAgICAgMHgwNEMwDQo+ ICsjZGVmaW5lIExTMksxMDAwX0NGR19SRUdfQkFTRSAgICAgICAgICAgMHgxZmUxMDAwMA0K PiArDQo+ICsvKiBMUzdBMTAwMCBhbmQgTFMySzIwMDAgKi8NCj4gKyNkZWZpbmUgTFM3QTEw MDBfUElYX1BMTDBfUkVHICAgICAgICAgICAweDA0QjANCj4gKyNkZWZpbmUgTFM3QTEwMDBf UElYX1BMTDFfUkVHICAgICAgICAgICAweDA0QzANCj4gKyNkZWZpbmUgTFM3QTEwMDBfQ0ZH X1JFR19CQVNFICAgICAgICAgICAweDEwMDEwMDAwDQo+ICsNCj4gKy8qIExTMkswNTAwICov DQo+ICsjZGVmaW5lIExTMkswNTAwX1BJWF9QTEwwX1JFRyAgICAgICAgICAgMHgwNDE4DQo+ ICsjZGVmaW5lIExTMkswNTAwX1BJWF9QTEwxX1JFRyAgICAgICAgICAgMHgwNDIwDQo+ICsj ZGVmaW5lIExTMkswNTAwX0NGR19SRUdfQkFTRSAgICAgICAgICAgMHgxZmUxMDAwMA0KPiAr DQo+ICsvKg0KPiArICogIENSVEMgQ0ZHIFJFRw0KPiArICovDQo+ICsjZGVmaW5lIENGR19Q SVhfRk1UX01BU0sgICAgICAgICAgICAgICAgR0VOTUFTSygyLCAwKQ0KPiArDQo+ICtlbnVt IGxzZGNfcGl4ZWxfZm9ybWF0IHsNCj4gKwlMU0RDX1BGX05PTkUgPSAwLA0KPiArCUxTRENf UEZfQVJHQjQ0NDQgPSAxLCAgLyogQVJHQiBBOjQgYml0cyBSL0cvQjogNCBiaXRzIGVhY2gg WzE2IGJpdHNdICovDQo+ICsJTFNEQ19QRl9BUkdCMTU1NSA9IDIsICAvKiBBUkdCIEE6MSBi aXQgUkdCOjE1IGJpdHMgWzE2IGJpdHNdICovDQo+ICsJTFNEQ19QRl9SR0I1NjUgPSAzLCAg ICAvKiBSR0IgWzE2IGJpdHNdICovDQo+ICsJTFNEQ19QRl9YUkdCODg4OCA9IDQsICAvKiBY UkdCIFszMiBiaXRzXSAqLw0KPiArCUxTRENfUEZfUkdCQTg4ODggPSA1LCAgLyogQVJHQiBb MzIgYml0c10gKi8NCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBFYWNoIGNydGMgaGFzIHR3 byBzZXQgZmIgYWRkcmVzcyByZWdpc3RlcnMgdXNhYmxlLCBDRkdfRkJfSU5fVVNJTkcgb2YN Cj4gKyAqIExTRENfQ1JUQ3hfQ0ZHX1JFRyBzcGVjaWZ5IHdoaWNoIGZiIGFkZHJlc3MgcmVn aXN0ZXIgaXMgY3VycmVudGx5DQo+ICsgKiBpbiB1c2luZyBieSB0aGUgQ1JUQy4gQ0ZHX1BB R0VfRkxJUCBvZiBMU0RDX0NSVEN4X0NGR19SRUcgaXMgdXNlZCB0bw0KPiArICogdHJpZ2dl ciB0aGUgc3dpdGNoIHdoaWNoIHdpbGwgYmUgZmluaXNoZWQgYXQgdGhlIHZlcnkgdmJsYW5r LiBJZiB5b3UNCj4gKyAqIHdhbnQgaXQgc3dpdGNoIHRvIGFub3RoZXIgYWdhaW4sIHlvdSBt dXN0IHNldCBDRkdfUEFHRV9GTElQIGFnYWluLg0KPiArICovDQo+ICsjZGVmaW5lIENGR19Q QUdFX0ZMSVAgICAgICAgICAgICAgICAgICAgQklUKDcpDQo+ICsjZGVmaW5lIENGR19PVVRQ VVRfRU4gICAgICAgICAgICAgICAgICAgQklUKDgpDQo+ICsvKiBDUlRDMCBjbG9uZSBmcm9t IENSVEMxIG9yIENSVEMxIGNsb25lIGZyb20gQ1JUQzAgdXNpbmcgaGFyZHdhcmUgbG9naWMg Ki8NCj4gKyNkZWZpbmUgQ0ZHX1BBTkVMX1NXSVRDSCAgICAgICAgICAgICAgICBCSVQoOSkN Cj4gKy8qIEluZGljYXRlIHdpdGNoIGZiIGFkZHIgcmVnIGlzIGluIHVzaW5nLCBjdXJyZW50 bHkgKi8NCj4gKyNkZWZpbmUgQ0ZHX0ZCX0lOX1VTSU5HICAgICAgICAgICAgICAgICBCSVQo MTEpDQo+ICsjZGVmaW5lIENGR19HQU1NQV9FTiAgICAgICAgICAgICAgICAgICAgQklUKDEy KQ0KPiArDQo+ICsvKiBDUlRDIGdldCBzb2Z0IHJlc2V0IGlmIHZvbHRhZ2UgbGV2ZWwgY2hh bmdlIGZyb20gMSAtPiAwICovDQo+ICsjZGVmaW5lIENGR19SRVNFVF9OICAgICAgICAgICAg ICAgICAgICAgQklUKDIwKQ0KPiArDQo+ICsjZGVmaW5lIENGR19IU1lOQ19FTiAgICAgICAg ICAgICAgICAgICAgQklUKDMwKQ0KPiArI2RlZmluZSBDRkdfSFNZTkNfSU5WICAgICAgICAg ICAgICAgICAgIEJJVCgzMSkNCj4gKyNkZWZpbmUgQ0ZHX1ZTWU5DX0VOICAgICAgICAgICAg ICAgICAgICBCSVQoMzApDQo+ICsjZGVmaW5lIENGR19WU1lOQ19JTlYgICAgICAgICAgICAg ICAgICAgQklUKDMxKQ0KPiArDQo+ICsvKiBUSEUgRE1BIHN0ZXAgb2YgdGhlIERDIGluIExT N0EyMDAwIGlzIGNvbmZpZ3VyYWJsZSAqLw0KPiArI2RlZmluZSBMU0RDX0RNQV9TVEVQX01B U0sgICAgICAgICAgICAgIEdFTk1BU0soMTcsIDE2KQ0KPiArZW51bSBsc2RjX2RtYV9zdGVw c19zdXBwb3J0ZWQgew0KPiArCUxTRENfRE1BX1NURVBfMjU2X0JZVEVTID0gMCwNCj4gKwlM U0RDX0RNQV9TVEVQXzEyOF9CWVRFUyA9IDEsDQo+ICsJTFNEQ19ETUFfU1RFUF82NF9CWVRF UyA9IDIsDQo+ICsJTFNEQ19ETUFfU1RFUF8zMl9CWVRFUyA9IDMsDQo+ICt9Ow0KPiArDQo+ ICsvKioqKioqKiogQ1JUQzAgJiBEVk8wICoqKioqKioqLw0KPiArI2RlZmluZSBMU0RDX0NS VEMwX0NGR19SRUcgICAgICAgICAgICAgIDB4MTI0MA0KPiArI2RlZmluZSBMU0RDX0NSVEMw X0ZCMF9MT19BRERSX1JFRyAgICAgIDB4MTI2MA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX0ZC MF9ISV9BRERSX1JFRyAgICAgIDB4MTVBMA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX0ZCMV9M T19BRERSX1JFRyAgICAgIDB4MTU4MA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX0ZCMV9ISV9B RERSX1JFRyAgICAgIDB4MTVDMA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX1NUUklERV9SRUcg ICAgICAgICAgIDB4MTI4MA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX0ZCX09SSUdJTl9SRUcg ICAgICAgIDB4MTMwMA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX0hESVNQTEFZX1JFRyAgICAg ICAgIDB4MTQwMA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX0hTWU5DX1JFRyAgICAgICAgICAg IDB4MTQyMA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX1ZESVNQTEFZX1JFRyAgICAgICAgIDB4 MTQ4MA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX1ZTWU5DX1JFRyAgICAgICAgICAgIDB4MTRB MA0KPiArI2RlZmluZSBMU0RDX0NSVEMwX0dBTU1BX0lOREVYX1JFRyAgICAgIDB4MTRFMA0K PiArI2RlZmluZSBMU0RDX0NSVEMwX0dBTU1BX0RBVEFfUkVHICAgICAgIDB4MTUwMA0KPiAr DQo+ICsvKioqKioqKiogQ1RSQzEgJiBEVk8xICoqKioqKioqLw0KPiArI2RlZmluZSBMU0RD X0NSVEMxX0NGR19SRUcgICAgICAgICAgICAgIDB4MTI1MA0KPiArI2RlZmluZSBMU0RDX0NS VEMxX0ZCMF9MT19BRERSX1JFRyAgICAgIDB4MTI3MA0KPiArI2RlZmluZSBMU0RDX0NSVEMx X0ZCMF9ISV9BRERSX1JFRyAgICAgIDB4MTVCMA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX0ZC MV9MT19BRERSX1JFRyAgICAgIDB4MTU5MA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX0ZCMV9I SV9BRERSX1JFRyAgICAgIDB4MTVEMA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX1NUUklERV9S RUcgICAgICAgICAgIDB4MTI5MA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX0ZCX09SSUdJTl9S RUcgICAgICAgIDB4MTMxMA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX0hESVNQTEFZX1JFRyAg ICAgICAgIDB4MTQxMA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX0hTWU5DX1JFRyAgICAgICAg ICAgIDB4MTQzMA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX1ZESVNQTEFZX1JFRyAgICAgICAg IDB4MTQ5MA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX1ZTWU5DX1JFRyAgICAgICAgICAgIDB4 MTRCMA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX0dBTU1BX0lOREVYX1JFRyAgICAgIDB4MTRG MA0KPiArI2RlZmluZSBMU0RDX0NSVEMxX0dBTU1BX0RBVEFfUkVHICAgICAgIDB4MTUxMA0K PiArDQo+ICsvKg0KPiArICogTFM3QTIwMDAgaGFzIHRoZSBoYXJkd2FyZSB3aGljaCByZWNv cmQgdGhlIHNjYW4gcG9zaXRpb24gb2YgdGhlIENSVEMNCj4gKyAqIFszMToxNl0gOiBjdXJy ZW50IFggcG9zaXRpb24sIFsxNTowXSA6IGN1cnJlbnQgWSBwb3NpdGlvbg0KPiArICovDQo+ ICsjZGVmaW5lIExTRENfQ1JUQzBfU0NBTl9QT1NfUkVHICAgICAgICAgMHgxNEMwDQo+ICsj ZGVmaW5lIExTRENfQ1JUQzFfU0NBTl9QT1NfUkVHICAgICAgICAgMHgxNEQwDQo+ICsNCj4g Ky8qDQo+ICsgKiBMUzdBMjAwMCBoYXMgdGhlIGhhcmR3YXJlIHdoaWNoIGNvdW50IHRoZSBu dW1iZXIgb2YgdmJsYW5rIGdlbmVyYXRlZA0KPiArICovDQo+ICsjZGVmaW5lIExTRENfQ1JU QzBfVlNZTkNfQ09VTlRFUl9SRUcgICAgMHgxQTAwDQo+ICsjZGVmaW5lIExTRENfQ1JUQzFf VlNZTkNfQ09VTlRFUl9SRUcgICAgMHgxQTEwDQo+ICsNCj4gKy8qIEluIGFsbCwgTFNEQ19D UlRDMV9YWFhfUkVHIC0gTFNEQ19DUlRDMF9YWFhfUkVHID0gMHgxMCAqLw0KPiArDQo+ICsv Kg0KPiArICogVGhlcmUgaXMgb25seSBvbmUgaGFyZHdhcmUgY3Vyc29yIHVuaXQgaW4gbHM3 YTEwMDAsIGxzMmsxMDAwIGFuZCBsczJrMDUwMC4NCj4gKyAqIHdlbGwsIGxzN2EyMDAwIGhh cyB0d28gaGFyZHdhcmUgY3Vyc29yIHVuaXQuDQo+ICsgKi8NCj4gKyNkZWZpbmUgQ1VSU09S X0ZPUk1BVF9NQVNLICAgICAgICAgICAgICBHRU5NQVNLKDEsIDApDQo+ICtlbnVtIGxzZGNf Y3Vyc29yX2Zvcm1hdCB7DQo+ICsJQ1VSU09SX0ZPUk1BVF9ESVNBQkxFID0gMCwNCj4gKwlD VVJTT1JfRk9STUFUX01PTk9DSFJPTUUgPSAxLA0KPiArCUNVUlNPUl9GT1JNQVRfQVJHQjg4 ODggPSAyLA0KPiArfTsNCj4gKw0KPiArI2RlZmluZSBDVVJTT1JfU0laRV82NFg2NCAgICAg ICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBDVVJTT1JfTE9DQVRJT04gICAgICAgICAg ICAgICAgIEJJVCg0KQ0KPiArDQo+ICsjZGVmaW5lIExTRENfQ1VSU09SMF9DRkdfUkVHICAg ICAgICAgICAgMHgxNTIwDQo+ICsjZGVmaW5lIExTRENfQ1VSU09SMF9BRERSX0xPX1JFRyAg ICAgICAgMHgxNTMwDQo+ICsjZGVmaW5lIExTRENfQ1VSU09SMF9BRERSX0hJX1JFRyAgICAg ICAgMHgxNWUwDQo+ICsjZGVmaW5lIExTRENfQ1VSU09SMF9QT1NJVElPTl9SRUcgICAgICAg MHgxNTQwDQo+ICsjZGVmaW5lIExTRENfQ1VSU09SMF9CR19DT0xPUl9SRUcgICAgICAgMHgx NTUwICAvKiBiYWNrZ3JvdW5kIGNvbG9yICovDQo+ICsjZGVmaW5lIExTRENfQ1VSU09SMF9G R19DT0xPUl9SRUcgICAgICAgMHgxNTYwICAvKiBmb3JlZ3JvdW5kIGNvbG9yICovDQo+ICsN Cj4gKyNkZWZpbmUgTFNEQ19DVVJTT1IxX0NGR19SRUcgICAgICAgICAgICAweDE2NzANCj4g KyNkZWZpbmUgTFNEQ19DVVJTT1IxX0FERFJfTE9fUkVHICAgICAgICAweDE2ODANCj4gKyNk ZWZpbmUgTFNEQ19DVVJTT1IxX0FERFJfSElfUkVHICAgICAgICAweDE2ZTANCj4gKyNkZWZp bmUgTFNEQ19DVVJTT1IxX1BPU0lUSU9OX1JFRyAgICAgICAweDE2OTAgIC8qIFszMToxNl0g WSwgWzE1OjBdIFggKi8NCj4gKyNkZWZpbmUgTFNEQ19DVVJTT1IxX0JHX0NPTE9SX1JFRyAg ICAgICAweDE2QTAgIC8qIGJhY2tncm91bmQgY29sb3IgKi8NCj4gKyNkZWZpbmUgTFNEQ19D VVJTT1IxX0ZHX0NPTE9SX1JFRyAgICAgICAweDE2QjAgIC8qIGZvcmVncm91bmQgY29sb3Ig Ki8NCj4gKw0KPiArLyoNCj4gKyAqIERDIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyLCAz MmJpdCwgQWRkcmVzcyBPZmZzZXQ6IDE1NzANCj4gKyAqDQo+ICsgKiBCaXRzIDE1OjAgaW5p ZGljYXRlIHRoZSBpbnRlcnJ1cHQgc3RhdHVzDQo+ICsgKiBCaXRzIDMxOjE2IGNvbnRyb2wg ZW5hYmxlIGludGVycnVwdHMgY29ycmVzcG9uZGluZyB0byBiaXQgMTU6MCBvciBub3QNCj4g KyAqIFdyaXRlIDEgdG8gZW5hYmxlLCB3cml0ZSAwIHRvIGRpc2FibGUNCj4gKyAqDQo+ICsg KiBSRjogUmVhZCBGaW5pc2hlZA0KPiArICogSURCVTogSW50ZXJuYWwgRGF0YSBCdWZmZXIg VW5kZXJmbG93DQo+ICsgKiBJREJGVTogSW50ZXJuYWwgRGF0YSBCdWZmZXIgRmF0YWwgVW5k ZXJmbG93DQo+ICsgKiBDQlJGOiBDdXJzb3IgQnVmZmVyIFJlYWQgRmluaXNoZWQgRmxhZywg bm8gdXNlLg0KPiArICoNCj4gKyAqICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSsNCj4gKyAqIHwgMzE6Mjcg fCAgICAgICAgIDI2OjE2ICAgICAgICAgICAgfCAxNToxMSB8ICAgMTAgICB8ICAgOSAgICB8 ICAgOCAgIHwNCj4gKyAqICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSsNCj4gKyAqIHwgIE4vQSAgfCBJbnRl cnJ1cHQgRW5hYmxlIENvbnRyb2wgfCAgTi9BICB8IElEQkZVMCB8IElEQkZVMSB8IElEQlUw IHwNCj4gKyAqICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSsNCj4gKyAqDQo+ICsgKiArLS0tLS0tLSstLS0t LSstLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rDQo+ ICsgKiB8ICAgNyAgIHwgIDYgIHwgIDUgIHwgIDQgICB8ICAgMyAgICB8ICAgMiAgICB8ICAg MSAgICB8ICAgMCAgICB8DQo+ICsgKiArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rDQo+ICsgKiB8IElEQlUxIHwgUkYw IHwgUkYxIHwgQ1JSRiB8IEhTWU5DMCB8IFZTWU5DMCB8IEhTWU5DMSB8IFZTWU5DMSB8DQo+ ICsgKiArLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0rDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBMU0RDX0lOVF9SRUcg ICAgICAgICAgICAgICAgICAgIDB4MTU3MA0KPiArDQo+ICsjZGVmaW5lIElOVF9DUlRDMF9W U1lOQyAgICAgICAgICAgICAgICAgQklUKDIpDQo+ICsjZGVmaW5lIElOVF9DUlRDMF9IU1lO QyAgICAgICAgICAgICAgICAgQklUKDMpDQo+ICsjZGVmaW5lIElOVF9DUlRDMF9SRiAgICAg ICAgICAgICAgICAgICAgQklUKDYpDQo+ICsjZGVmaW5lIElOVF9DUlRDMF9JREJVICAgICAg ICAgICAgICAgICAgQklUKDgpDQo+ICsjZGVmaW5lIElOVF9DUlRDMF9JREJGVSAgICAgICAg ICAgICAgICAgQklUKDEwKQ0KPiArDQo+ICsjZGVmaW5lIElOVF9DUlRDMV9WU1lOQyAgICAg ICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lIElOVF9DUlRDMV9IU1lOQyAgICAgICAg ICAgICAgICAgQklUKDEpDQo+ICsjZGVmaW5lIElOVF9DUlRDMV9SRiAgICAgICAgICAgICAg ICAgICAgQklUKDUpDQo+ICsjZGVmaW5lIElOVF9DUlRDMV9JREJVICAgICAgICAgICAgICAg ICAgQklUKDcpDQo+ICsjZGVmaW5lIElOVF9DUlRDMV9JREJGVSAgICAgICAgICAgICAgICAg QklUKDkpDQo+ICsNCj4gKyNkZWZpbmUgSU5UX0NSVEMwX1ZTX0VOICAgICAgICAgICAgICAg ICBCSVQoMTgpDQo+ICsjZGVmaW5lIElOVF9DUlRDMF9IU19FTiAgICAgICAgICAgICAgICAg QklUKDE5KQ0KPiArI2RlZmluZSBJTlRfQ1JUQzBfUkZfRU4gICAgICAgICAgICAgICAgIEJJ VCgyMikNCj4gKyNkZWZpbmUgSU5UX0NSVEMwX0lEQlVfRU4gICAgICAgICAgICAgICBCSVQo MjQpDQo+ICsjZGVmaW5lIElOVF9DUlRDMF9JREJGVV9FTiAgICAgICAgICAgICAgQklUKDI2 KQ0KPiArDQo+ICsjZGVmaW5lIElOVF9DUlRDMV9WU19FTiAgICAgICAgICAgICAgICAgQklU KDE2KQ0KPiArI2RlZmluZSBJTlRfQ1JUQzFfSFNfRU4gICAgICAgICAgICAgICAgIEJJVCgx NykNCj4gKyNkZWZpbmUgSU5UX0NSVEMxX1JGX0VOICAgICAgICAgICAgICAgICBCSVQoMjEp DQo+ICsjZGVmaW5lIElOVF9DUlRDMV9JREJVX0VOICAgICAgICAgICAgICAgQklUKDIzKQ0K PiArI2RlZmluZSBJTlRfQ1JUQzFfSURCRlVfRU4gICAgICAgICAgICAgIEJJVCgyNSkNCj4g Kw0KPiArI2RlZmluZSBJTlRfU1RBVFVTX01BU0sgICAgICAgICAgICAgICAgIEdFTk1BU0so MTUsIDApDQo+ICsNCj4gKy8qDQo+ICsgKiBMUzdBMTAwMC9MUzdBMjAwMCBoYXZlIDQgZ3Bp b3Mgd2hpY2ggYXJlIHVzZWQgdG8gZW11bGF0ZWQgSTJDLg0KPiArICogVGhleSBhcmUgdW5k ZXIgY29udHJvbCBvZiB0aGUgTFM3QV9EQ19HUElPX0RBVF9SRUcgYW5kIExTN0FfRENfR1BJ T19ESVJfUkVHDQo+ICsgKiByZWdpc3RlciwgVGhvc2UgR1BJT3MgaGFzIG5vIHJlbGF0aW9u c2hpcCB3aHRoIHRoZSBHUElPIGhhcmR3YXJlIG9uIHRoZQ0KPiArICogYnJpZGdlIGNoaXAg aXRzZWxmLiBUaG9zZSBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBEQyByZWdpc3RlciBiYXNl IGFkZHJlc3MNCj4gKyAqDQo+ICsgKiBMUzJrMTAwMCBhbmQgTFMySzA1MDAgZG9uJ3QgaGF2 ZSB0aG9zZSByZWdpc3RlcnMsIHRoZXkgdXNlIGhhcmR3YXJlIGkyYw0KPiArICogb3IgZ2Vu ZXJhbCBHUElPIGVtdWxhdGVkIGkyYyBmcm9tIGxpbnV4IGkyYyBzdWJzeXN0ZW0uDQo+ICsg Kg0KPiArICogR1BJTyBkYXRhIHJlZ2lzdGVyLCBhZGRyZXNzIG9mZnNldDogMHgxNjUwDQo+ ICsgKiAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQo+ICsg KiAgIHwgNyB8IDYgfCA1IHwgNCB8ICAzICB8ICAyICB8ICAxICB8ICAwICB8DQo+ICsgKiAg ICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQo+ICsgKiAgIHwg ICAgICAgICAgICAgICB8ICAgIERWTzEgICB8ICAgIERWTzAgICB8DQo+ICsgKiAgICsgICAg ICBOL0EgICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQo+ICsgKiAgIHwgICAgICAg ICAgICAgICB8IFNDTCB8IFNEQSB8IFNDTCB8IFNEQSB8DQo+ICsgKiAgICstLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQo+ICsgKi8NCj4gKyNkZWZpbmUgTFM3 QV9EQ19HUElPX0RBVF9SRUcgICAgICAgICAgICAweDE2NTANCj4gKw0KPiArLyoNCj4gKyAq ICBHUElPIElucHV0L091dHB1dCBkaXJlY3Rpb24gY29udHJvbCByZWdpc3RlciwgYWRkcmVz cyBvZmZzZXQ6IDB4MTY2MA0KPiArICovDQo+ICsjZGVmaW5lIExTN0FfRENfR1BJT19ESVJf UkVHICAgICAgICAgICAgMHgxNjYwDQo+ICsNCj4gKy8qDQo+ICsgKiAgTFM3QTIwMDAgaGFz IHR3byBidWlsdC1pbiBIRE1JIEVuY29kZXIgYW5kIG9uZSBWR0EgZW5jb2Rlcg0KPiArICov DQo+ICsNCj4gKy8qDQo+ICsgKiBOdW1iZXIgb2YgY29udGludW91cyBwYWNrZXRzIG1heSBi ZSBwcmVzZW50DQo+ICsgKiBpbiBIRE1JIGhibGFuayBhbmQgdmJsYW5rIHpvbmUsIHNob3Vs ZCA+PSA0OA0KPiArICovDQo+ICsjZGVmaW5lIExTRENfSERNSTBfWk9ORV9SRUcgICAgICAg ICAgICAgMHgxNzAwDQo+ICsjZGVmaW5lIExTRENfSERNSTFfWk9ORV9SRUcgICAgICAgICAg ICAgMHgxNzEwDQo+ICsNCj4gKyNkZWZpbmUgSERNSV9JTlRFUkZBQ0VfRU4gICAgICAgICAg ICAgICBCSVQoMCkNCj4gKyNkZWZpbmUgSERNSV9QQUNLRVRfRU4gICAgICAgICAgICAgICAg ICBCSVQoMSkNCj4gKyNkZWZpbmUgSERNSV9BVURJT19FTiAgICAgICAgICAgICAgICAgICBC SVQoMikNCj4gKyNkZWZpbmUgSERNSV9WSURFT19QUkVBTUJMRV9NQVNLICAgICAgICBHRU5N QVNLKDcsIDQpDQo+ICsjZGVmaW5lIEhETUlfSFdfSTJDX0VOICAgICAgICAgICAgICAgICAg QklUKDgpDQo+ICsjZGVmaW5lIEhETUlfQ1RMX1BFUklPRF9NT0RFICAgICAgICAgICAgQklU KDkpDQo+ICsjZGVmaW5lIExTRENfSERNSTBfQ1RSTF9SRUcgICAgICAgICAgICAgMHgxNzIw DQo+ICsjZGVmaW5lIExTRENfSERNSTFfQ1RSTF9SRUcgICAgICAgICAgICAgMHgxNzMwDQo+ ICsNCj4gKyNkZWZpbmUgSERNSV9QSFlfRU4gICAgICAgICAgICAgICAgICAgICBCSVQoMCkN Cj4gKyNkZWZpbmUgSERNSV9QSFlfUkVTRVRfTiAgICAgICAgICAgICAgICBCSVQoMSkNCj4g KyNkZWZpbmUgSERNSV9QSFlfVEVSTV9MX0VOICAgICAgICAgICAgICBCSVQoOCkNCj4gKyNk ZWZpbmUgSERNSV9QSFlfVEVSTV9IX0VOICAgICAgICAgICAgICBCSVQoOSkNCj4gKyNkZWZp bmUgSERNSV9QSFlfVEVSTV9ERVRfRU4gICAgICAgICAgICBCSVQoMTApDQo+ICsjZGVmaW5l IEhETUlfUEhZX1RFUk1fU1RBVFVTICAgICAgICAgICAgQklUKDExKQ0KPiArI2RlZmluZSBM U0RDX0hETUkwX1BIWV9DVFJMX1JFRyAgICAgICAgIDB4MTgwMA0KPiArI2RlZmluZSBMU0RD X0hETUkxX1BIWV9DVFJMX1JFRyAgICAgICAgIDB4MTgxMA0KPiArDQo+ICsvKg0KPiArICog IElERjogSW5wdXQgRGl2aXNpb24gRmFjdG9yDQo+ICsgKiAgT0RGOiBPdXRwdXQgRGl2aXNp b24gRmFjdG9yDQo+ICsgKiAgIExGOiBMb29wIEZhY3Rvcg0KPiArICogICAgTTogUmVxdWly ZWQgTXVsdA0KPiArICoNCj4gKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsgKiAgfCAgICAgRmluIChrSFopICAg ICB8IE0gIHwgSURGIHwgTEYgfCBPREYgfCAgIEZvdXQoTWh6KSAgfA0KPiArICogIHwtLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLXwN Cj4gKyAqICB8ICAxNzAwMDAgfiAzNDAwMDAgIHwgMTAgfCAxNiAgfCA0MCB8ICAxICB8IDE3 MDAgfiAzNDAwICB8DQo+ICsgKiAgfCAgIDg1MDAwIH4gMTcwMDAwICB8IDEwIHwgIDggIHwg NDAgfCAgMiAgfCAgODUwIH4gMTcwMCAgfA0KPiArICogIHwgICA0MjUwMCB+ICA4NTAwMCAg fCAxMCB8ICA0ICB8IDQwIHwgIDQgIHwgIDQyNSB+IDg1MCAgIHwNCj4gKyAqICB8ICAgMjEy NTAgfiAgNDI1MDAgIHwgMTAgfCAgMiAgfCA0MCB8ICA4ICB8IDIxMi41IH4gNDI1ICB8DQo+ ICsgKiAgfCAgIDIwMDAwIH4gIDIxMjUwICB8IDEwIHwgIDEgIHwgNDAgfCAxNiAgfCAgMjAw IH4gMjEyLjUgfA0KPiArICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gKyAqLw0KPiArI2RlZmluZSBMU0RDX0hETUkw X1BIWV9QTExfUkVHICAgICAgICAgIDB4MTgyMA0KPiArI2RlZmluZSBMU0RDX0hETUkxX1BI WV9QTExfUkVHICAgICAgICAgIDB4MTgzMA0KPiArDQo+ICsjZGVmaW5lIEhETUlfUExMX0VO QUJMRSAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lIEhETUlfUExMX0xPQ0tF RCAgICAgICAgICAgICAgICAgQklUKDE2KQ0KPiArI2RlZmluZSBIRE1JX1BMTF9CWVBBU1Mg ICAgICAgICAgICAgICAgIEJJVCgxNykNCj4gKw0KPiArI2RlZmluZSBIRE1JX1BMTF9JREZf U0hJRlQgICAgICAgICAgICAgIDENCj4gKyNkZWZpbmUgSERNSV9QTExfSURGX01BU0sgICAg ICAgICAgICAgICBHRU5NQVNLKDUsIDEpDQo+ICsjZGVmaW5lIEhETUlfUExMX0xGX1NISUZU ICAgICAgICAgICAgICAgNg0KPiArI2RlZmluZSBIRE1JX1BMTF9MRl9NQVNLICAgICAgICAg ICAgICAgIEdFTk1BU0soMTIsIDYpDQo+ICsjZGVmaW5lIEhETUlfUExMX09ERl9TSElGVCAg ICAgICAgICAgICAgMTMNCj4gKyNkZWZpbmUgSERNSV9QTExfT0RGX01BU0sgICAgICAgICAg ICAgICBHRU5NQVNLKDE1LCAxMykNCj4gKw0KPiArLyogTFM3QTIwMDAgaGF2ZSBocGQgc3Vw cG9ydCAqLw0KPiArI2RlZmluZSBMU0RDX0hETUlfSFBEX1NUQVRVU19SRUcgICAgICAgIDB4 MUJBMA0KPiArI2RlZmluZSBIRE1JMF9IUERfRkxBRyAgICAgICAgICAgICAgICAgIEJJVCgw KQ0KPiArI2RlZmluZSBIRE1JMV9IUERfRkxBRyAgICAgICAgICAgICAgICAgIEJJVCgxKQ0K PiArDQo+ICsjZW5kaWYNCg0KLS0gDQpUaG9tYXMgWmltbWVybWFubg0KR3JhcGhpY3MgRHJp dmVyIERldmVsb3Blcg0KU1VTRSBTb2Z0d2FyZSBTb2x1dGlvbnMgR2VybWFueSBHbWJIDQpN YXhmZWxkc3RyLiA1LCA5MDQwOSBOw7xybmJlcmcsIEdlcm1hbnkNCihIUkIgMzY4MDksIEFH IE7DvHJuYmVyZykNCkdlc2Now6RmdHNmw7xocmVyOiBJdm8gVG90ZXYNCg== --------------EeZ8jFUWyvKv2xHMdnt8nMiA-- --------------SDsInXzM34qv4DqWVRTGrMSC Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAmPmXQUFAwAAAAAACgkQlh/E3EQov+Bw 4RAAqrDOCT3ifV4nRrzWVwdudus6WzKL+1wnkD7LfvFGbGph+qnqG3n0V2HkFmiUfFezL2/w4Krw f5MtWYdN0+Ni5oqmGEiFNC00b6CF2vI6JYPBewrZ/oWO7TvXpFGjgW2XxBCl7n7frscJh9v2gTGA A0hQ/51McvWgh80iIMRU5kkJq0JvYoUMFRLVfMgGoJImV0zTtayuSboek8ea0H7Dpwyvu82A4XWJ tXCzoXTY3MMDG2Sa991GjQe/F3BNu1Yp0p0bgojkgfYxjpe2TZ5OyFJmWvdjAQphhoUcxarefJdq zussqhqasP6L/Nyg2yT5a3a6s86XRSCHPY/h3kpf5mp64NoCZOXpRoFlhsYsKtwITrFLhFU8mShx lGFL9/U0prMCfC3PgQceq1MU6an5KrHZcYjgthGKYCZ2NmYxNWe+6wi0GWXabKAv5F1SbStABDnM YbtBxxyKuMfVn/b4T+PFAKmW4B6dXcBps3nJQXFXytTDfa35Kf5I9QPklQ4+Wxmi/MOyJwg8vbWW OFduVmIISPrISypFC5q1AINRZHQlOAr5PX3IgA4scyOEQepSxiC/R90wtKeJ2hArYuYhyHlEz/mN +ykgBy6vw9+StlLhVFh40jJvazJeFNj/Ao/teFxX9AWfRJhk3sEPpZMyNQuYpqFn/WhDcwlCLzcI 5mY= =AtlF -----END PGP SIGNATURE----- --------------SDsInXzM34qv4DqWVRTGrMSC--