From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 463C1C07E85 for ; Fri, 7 Dec 2018 09:27:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EB75D20838 for ; Fri, 7 Dec 2018 09:27:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EB75D20838 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kontron.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726080AbeLGJ1Z (ORCPT ); Fri, 7 Dec 2018 04:27:25 -0500 Received: from skedge03.snt-world.com ([91.208.41.68]:36756 "EHLO skedge03.snt-world.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725976AbeLGJ1Z (ORCPT ); Fri, 7 Dec 2018 04:27:25 -0500 Received: from sntmail10s.snt-is.com (unknown [10.203.32.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by skedge03.snt-world.com (Postfix) with ESMTPS id 79FAD67A5AF; Fri, 7 Dec 2018 10:27:12 +0100 (CET) Received: from sntmail12r.snt-is.com (10.203.32.182) by sntmail10s.snt-is.com (10.203.32.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1466.3; Fri, 7 Dec 2018 10:27:12 +0100 Received: from sntmail12r.snt-is.com ([fe80::e551:8750:7bba:3305]) by sntmail12r.snt-is.com ([fe80::e551:8750:7bba:3305%5]) with mapi id 15.01.1466.003; Fri, 7 Dec 2018 10:27:12 +0100 From: Schrempf Frieder To: Yogesh Narayan Gaur , "linux-mtd@lists.infradead.org" , "boris.brezillon@bootlin.com" , "linux-spi@vger.kernel.org" , Marek Vasut , Mark Brown , Han Xu CC: "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "richard@nod.at" , "miquel.raynal@bootlin.com" , David Wolfe , Fabio Estevam , "Prabhakar Kushwaha" , "shawnguo@kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v7 3/9] spi: Add a driver for the Freescale/NXP QuadSPI controller Thread-Topic: [PATCH v7 3/9] spi: Add a driver for the Freescale/NXP QuadSPI controller Thread-Index: AQHUi9vIM/Zqhf65/0GcM/gL1st1VqVyt/gAgAA9mwA= Date: Fri, 7 Dec 2018 09:27:11 +0000 Message-ID: References: <1543932685-15011-1-git-send-email-frieder.schrempf@kontron.de> <1543932685-15011-4-git-send-email-frieder.schrempf@kontron.de> In-Reply-To: Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.25.9.43] x-c2processedorg: 51b406b7-48a2-4d03-b652-521f56ac89f3 Content-Type: text/plain; charset="utf-8" Content-ID: <81221F730256DA47A0747DC93B49E05D@snt-world.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-SnT-MailScanner-Information: Please contact the ISP for more information X-SnT-MailScanner-ID: 79FAD67A5AF.A51C8 X-SnT-MailScanner: Found to be clean X-SnT-MailScanner-SpamCheck: X-SnT-MailScanner-From: frieder.schrempf@kontron.de X-SnT-MailScanner-To: boris.brezillon@bootlin.com, broonie@kernel.org, computersforpeace@gmail.com, david.wolfe@nxp.com, dwmw2@infradead.org, fabio.estevam@nxp.com, han.xu@nxp.com, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-spi@vger.kernel.org, marek.vasut@gmail.com, miquel.raynal@bootlin.com, prabhakar.kushwaha@nxp.com, richard@nod.at, shawnguo@kernel.org, yogeshnarayan.gaur@nxp.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gMDcuMTIuMTggMDY6NDYsIFlvZ2VzaCBOYXJheWFuIEdhdXIgd3JvdGU6DQo+IEhpIEZyaWVk ZXIsDQo+IA0KPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+IEZyb206IFNjaHJlbXBm IEZyaWVkZXIgW21haWx0bzpmcmllZGVyLnNjaHJlbXBmQGtvbnRyb24uZGVdDQo+PiBTZW50OiBU dWVzZGF5LCBEZWNlbWJlciA0LCAyMDE4IDc6NDUgUE0NCj4+IFRvOiBsaW51eC1tdGRAbGlzdHMu aW5mcmFkZWFkLm9yZzsgYm9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tOyBsaW51eC0NCj4+IHNw aUB2Z2VyLmtlcm5lbC5vcmc7IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+OyBN YXJrIEJyb3duDQo+PiA8YnJvb25pZUBrZXJuZWwub3JnPjsgSGFuIFh1IDxoYW4ueHVAbnhwLmNv bT4NCj4+IENjOiBkd213MkBpbmZyYWRlYWQub3JnOyBjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5j b207IHJpY2hhcmRAbm9kLmF0Ow0KPj4gbWlxdWVsLnJheW5hbEBib290bGluLmNvbTsgRGF2aWQg V29sZmUgPGRhdmlkLndvbGZlQG54cC5jb20+OyBGYWJpbw0KPj4gRXN0ZXZhbSA8ZmFiaW8uZXN0 ZXZhbUBueHAuY29tPjsgUHJhYmhha2FyIEt1c2h3YWhhDQo+PiA8cHJhYmhha2FyLmt1c2h3YWhh QG54cC5jb20+OyBZb2dlc2ggTmFyYXlhbiBHYXVyDQo+PiA8eW9nZXNobmFyYXlhbi5nYXVyQG54 cC5jb20+OyBzaGF3bmd1b0BrZXJuZWwub3JnOyBTY2hyZW1wZiBGcmllZGVyDQo+PiA8ZnJpZWRl ci5zY2hyZW1wZkBrb250cm9uLmRlPjsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZw0KPj4g U3ViamVjdDogW1BBVENIIHY3IDMvOV0gc3BpOiBBZGQgYSBkcml2ZXIgZm9yIHRoZSBGcmVlc2Nh bGUvTlhQIFF1YWRTUEkNCj4+IGNvbnRyb2xsZXINCj4+DQo+PiBGcm9tOiBGcmllZGVyIFNjaHJl bXBmIDxmcmllZGVyLnNjaHJlbXBmQGtvbnRyb24uZGU+DQo+Pg0KPj4gVGhpcyBkcml2ZXIgaXMg ZGVyaXZlZCBmcm9tIHRoZSBTUEkgTk9SIGRyaXZlciBhdCBtdGQvc3BpLW5vci9mc2wtcXVhZHNw aS5jLiBJdA0KPj4gdXNlcyB0aGUgbmV3IFNQSSBtZW1vcnkgaW50ZXJmYWNlIG9mIHRoZSBTUEkg ZnJhbWV3b3JrIHRvIGlzc3VlIGZsYXNoIG1lbW9yeQ0KPj4gb3BlcmF0aW9ucyB0byB1cCB0byBm b3VyIGNvbm5lY3RlZCBmbGFzaCBjaGlwcyAoMiBidXNlcyB3aXRoIDIgQ1MgZWFjaCkuDQo+Pg0K Pj4gVGhlIGNvbnRyb2xsZXIgZG9lcyBub3Qgc3VwcG9ydCBnZW5lcmljIFNQSSBtZXNzYWdlcy4N Cj4+DQo+PiBUaGlzIHBhdGNoIGFsc28gZGlzYWJsZXMgdGhlIGJ1aWxkIG9mIHRoZSAib2xkIiBk cml2ZXIgYW5kIHJldXNlcyBpdHMgS2NvbmZpZyBvcHRpb24NCj4+IENPTkZJR19TUElfRlNMX1FV QURTUEkgdG8gcmVwbGFjZSBpdC4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBGcmllZGVyIFNjaHJl bXBmIDxmcmllZGVyLnNjaHJlbXBmQGtvbnRyb24uZGU+DQo+PiAtLS0NCj4+ICAgZHJpdmVycy9t dGQvc3BpLW5vci9LY29uZmlnICB8ICAgOSAtDQo+PiAgIGRyaXZlcnMvbXRkL3NwaS1ub3IvTWFr ZWZpbGUgfCAgIDEgLQ0KPj4gICBkcml2ZXJzL3NwaS9LY29uZmlnICAgICAgICAgIHwgIDExICsN Cj4+ICAgZHJpdmVycy9zcGkvTWFrZWZpbGUgICAgICAgICB8ICAgMSArDQo+PiAgIGRyaXZlcnMv c3BpL3NwaS1mc2wtcXNwaS5jICAgfCA5NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysNCj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCA5NzggaW5zZXJ0aW9ucygrKSwgMTAgZGVs ZXRpb25zKC0pDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZp ZyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZyBpbmRleA0KPj4gNmNjOWM5Mi4uZDFjYTMw NyAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvbXRkL3NwaS1ub3IvS2NvbmZpZw0KPj4gKysrIGIv ZHJpdmVycy9tdGQvc3BpLW5vci9LY29uZmlnDQo+PiBAQCAtNTksMTUgKzU5LDYgQEAgY29uZmln IFNQSV9DQURFTkNFX1FVQURTUEkNCj4+ICAgCSAgZGV2aWNlIHdpdGggYSBDYWRlbmNlIFFTUEkg Y29udHJvbGxlciBhbmQgd2FudCB0byBhY2Nlc3MgdGhlDQo+PiAgIAkgIEZsYXNoIGFzIGFuIE1U RCBkZXZpY2UuDQo+Pg0KPj4gLWNvbmZpZyBTUElfRlNMX1FVQURTUEkNCj4+IC0JdHJpc3RhdGUg IkZyZWVzY2FsZSBRdWFkIFNQSSBjb250cm9sbGVyIg0KPj4gLQlkZXBlbmRzIG9uIEFSQ0hfTVhD IHx8IFNPQ19MUzEwMjFBIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fA0KPj4gQ09NUElMRV9URVNUDQo+ PiAtCWRlcGVuZHMgb24gSEFTX0lPTUVNDQo+PiAtCWhlbHANCj4+IC0JICBUaGlzIGVuYWJsZXMg c3VwcG9ydCBmb3IgdGhlIFF1YWQgU1BJIGNvbnRyb2xsZXIgaW4gbWFzdGVyIG1vZGUuDQo+PiAt CSAgVGhpcyBjb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyBTUEkuIEl0IG9ubHkg c3VwcG9ydHMNCj4+IC0JICBTUEkgTk9SLg0KPj4gLQ0KPj4gICBjb25maWcgU1BJX0hJU0lfU0ZD DQo+PiAgIAl0cmlzdGF0ZSAiSGlzaWxpY29uIFNQSS1OT1IgRmxhc2ggQ29udHJvbGxlcihTRkMp Ig0KPj4gICAJZGVwZW5kcyBvbiBBUkNIX0hJU0kgfHwgQ09NUElMRV9URVNUDQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tdGQvc3BpLW5vci9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL3NwaS1ub3Iv TWFrZWZpbGUgaW5kZXgNCj4+IGY0YzYxZDIuLjNmMTYwYzJlMyAxMDA2NDQNCj4+IC0tLSBhL2Ry aXZlcnMvbXRkL3NwaS1ub3IvTWFrZWZpbGUNCj4+ICsrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3Iv TWFrZWZpbGUNCj4+IEBAIC0zLDcgKzMsNiBAQCBvYmotJChDT05GSUdfTVREX1NQSV9OT1IpCSs9 IHNwaS1ub3Iubw0KPj4gICBvYmotJChDT05GSUdfU1BJX0FTUEVFRF9TTUMpCSs9IGFzcGVlZC1z bWMubw0KPj4gICBvYmotJChDT05GSUdfU1BJX0FUTUVMX1FVQURTUEkpCSs9IGF0bWVsLXF1YWRz cGkubw0KPj4gICBvYmotJChDT05GSUdfU1BJX0NBREVOQ0VfUVVBRFNQSSkJKz0gY2FkZW5jZS1x dWFkc3BpLm8NCj4+IC1vYmotJChDT05GSUdfU1BJX0ZTTF9RVUFEU1BJKQkrPSBmc2wtcXVhZHNw aS5vDQo+PiAgIG9iai0kKENPTkZJR19TUElfSElTSV9TRkMpCSs9IGhpc2ktc2ZjLm8NCj4+ICAg b2JqLSQoQ09ORklHX01URF9NVDgxeHhfTk9SKSAgICArPSBtdGstcXVhZHNwaS5vDQo+PiAgIG9i ai0kKENPTkZJR19TUElfTlhQX1NQSUZJKQkrPSBueHAtc3BpZmkubw0KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3BpL0tjb25maWcgYi9kcml2ZXJzL3NwaS9LY29uZmlnIGluZGV4IDdkM2E1Yzku LjhjODQxODYNCj4+IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZw0KPj4gKysr IGIvZHJpdmVycy9zcGkvS2NvbmZpZw0KPj4gQEAgLTI1OSw2ICsyNTksMTcgQEAgY29uZmlnIFNQ SV9GU0xfTFBTUEkNCj4+ICAgCWhlbHANCj4+ICAgCSAgVGhpcyBlbmFibGVzIEZyZWVzY2FsZSBp Lk1YIExQU1BJIGNvbnRyb2xsZXJzIGluIG1hc3RlciBtb2RlLg0KPj4NCj4+ICtjb25maWcgU1BJ X0ZTTF9RVUFEU1BJDQo+PiArCXRyaXN0YXRlICJGcmVlc2NhbGUgUVNQSSBjb250cm9sbGVyIg0K Pj4gKwlkZXBlbmRzIG9uIEFSQ0hfTVhDIHx8IFNPQ19MUzEwMjFBIHx8IEFSQ0hfTEFZRVJTQ0FQ RSB8fA0KPj4gQ09NUElMRV9URVNUDQo+PiArCWRlcGVuZHMgb24gSEFTX0lPTUVNDQo+PiArCWhl bHANCj4+ICsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFF1YWQgU1BJIGNvbnRyb2xs ZXIgaW4gbWFzdGVyIG1vZGUuDQo+PiArCSAgVXAgdG8gZm91ciBmbGFzaCBjaGlwcyBjYW4gYmUg Y29ubmVjdGVkIG9uIHR3byBidXNlcyB3aXRoIHR3bw0KPj4gKwkgIGNoaXBzZWxlY3RzIGVhY2gu DQo+PiArCSAgVGhpcyBjb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyBTUEkgbWVz c2FnZXMuIEl0IG9ubHkNCj4+ICsJICBzdXBwb3J0cyB0aGUgaGlnaC1sZXZlbCBTUEkgbWVtb3J5 IGludGVyZmFjZS4NCj4+ICsNCj4+ICAgY29uZmlnIFNQSV9HUElPDQo+PiAgIAl0cmlzdGF0ZSAi R1BJTy1iYXNlZCBiaXRiYW5naW5nIFNQSSBNYXN0ZXIiDQo+PiAgIAlkZXBlbmRzIG9uIEdQSU9M SUIgfHwgQ09NUElMRV9URVNUDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUg Yi9kcml2ZXJzL3NwaS9NYWtlZmlsZSBpbmRleCAzNTc1MjA1Li41Mzc3ZTYxDQo+PiAxMDA2NDQN Cj4+IC0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlDQo+PiArKysgYi9kcml2ZXJzL3NwaS9NYWtl ZmlsZQ0KPj4gQEAgLTQ0LDYgKzQ0LDcgQEAgb2JqLSQoQ09ORklHX1NQSV9GU0xfRFNQSSkJCSs9 IHNwaS1mc2wtDQo+PiBkc3BpLm8NCj4+ICAgb2JqLSQoQ09ORklHX1NQSV9GU0xfTElCKQkJKz0g c3BpLWZzbC1saWIubw0KPj4gICBvYmotJChDT05GSUdfU1BJX0ZTTF9FU1BJKQkJKz0gc3BpLWZz bC1lc3BpLm8NCj4+ICAgb2JqLSQoQ09ORklHX1NQSV9GU0xfTFBTUEkpCQkrPSBzcGktZnNsLWxw c3BpLm8NCj4+ICtvYmotJChDT05GSUdfU1BJX0ZTTF9RVUFEU1BJKQkJKz0gc3BpLWZzbC1xc3Bp Lm8NCj4+ICAgb2JqLSQoQ09ORklHX1NQSV9GU0xfU1BJKQkJKz0gc3BpLWZzbC1zcGkubw0KPj4g ICBvYmotJChDT05GSUdfU1BJX0dQSU8pCQkJKz0gc3BpLWdwaW8ubw0KPj4gICBvYmotJChDT05G SUdfU1BJX0lNR19TUEZJKQkJKz0gc3BpLWltZy1zcGZpLm8NCj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3NwaS9zcGktZnNsLXFzcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtcXNwaS5jIG5ldyBm aWxlIG1vZGUNCj4+IDEwMDY0NCBpbmRleCAwMDAwMDAwLi5mMGEzNDAwDQo+PiAtLS0gL2Rldi9u dWxsDQo+PiArKysgYi9kcml2ZXJzL3NwaS9zcGktZnNsLXFzcGkuYw0KPj4gQEAgLTAsMCArMSw5 NjYgQEANCj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4+ICsNCj4+ ICsvKg0KPj4gKyAqIEZyZWVzY2FsZSBRdWFkU1BJIGRyaXZlci4NCj4+ICsgKg0KPj4gKyAqIENv cHlyaWdodCAoQykgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLg0KPj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBCb290bGluDQo+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IGV4Y2Vl dCBlbGVjdHJvbmljcyBHbWJIDQo+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IEtvbnRyb24gRWxl Y3Ryb25pY3MgR21iSA0KPj4gKyAqDQo+PiArICogVHJhbnNpdGlvbiB0byBTUEkgTUVNIGludGVy ZmFjZToNCj4+ICsgKiBBdXRob3JzOg0KPj4gKyAqICAgICBCb3JpcyBCcmV6aWxsaW9uIDxib3Jp cy5icmV6aWxsb25AYm9vdGxpbi5jb20+DQo+PiArICogICAgIEZyaWVkZXIgU2NocmVtcGYgPGZy aWVkZXIuc2NocmVtcGZAa29udHJvbi5kZT4NCj4+ICsgKiAgICAgWW9nZXNoIEdhdXIgPHlvZ2Vz aG5hcmF5YW4uZ2F1ckBueHAuY29tPg0KPj4gKyAqICAgICBTdXJlc2ggR3VwdGEgPHN1cmVzaC5n dXB0YUBueHAuY29tPg0KPj4gKyAqDQo+PiArICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIGZzbC1x dWFkc3BpLmMgc3BpLW5vciBkcml2ZXI6DQo+PiArICogQXV0aG9yOiBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvciwgSW5jLg0KPj4gKyAqDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4 L2JpdG9wcy5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4+ICsjaW5jbHVkZSA8bGlu dXgvY29tcGxldGlvbi5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPj4gKyNpbmNs dWRlIDxsaW51eC9lcnIuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCj4+ICsjaW5j bHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+PiAr I2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+ DQo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4NCj4+ICsjaW5jbHVkZSA8bGludXgv b2YuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+PiArI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9wbV9xb3MuaD4NCj4+ ICsjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4NCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvc3Bp L3NwaS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLW1lbS5oPg0KPj4gKw0KPj4gKy8q DQo+PiArICogVGhlIGRyaXZlciBvbmx5IHVzZXMgb25lIHNpbmdsZSBMVVQgZW50cnksIHRoYXQg aXMgdXBkYXRlZCBvbg0KPj4gKyAqIGVhY2ggY2FsbCBvZiBleGVjX29wKCkuIEluZGV4IDAgaXMg cHJlc2V0IGF0IGJvb3Qgd2l0aCBhIGJhc2ljDQo+PiArICogcmVhZCBvcGVyYXRpb24sIHNvIGxl dCdzIHVzZSB0aGUgbGFzdCBlbnRyeSAoMTUpLg0KPj4gKyAqLw0KPj4gKyNkZWZpbmUJU0VRSURf TFVUCQkJMTUNCj4+ICsNCj4+ICsvKiBSZWdpc3RlcnMgdXNlZCBieSB0aGUgZHJpdmVyICovDQo+ PiArI2RlZmluZSBRVUFEU1BJX01DUgkJCTB4MDANCj4+ICsjZGVmaW5lIFFVQURTUElfTUNSX1JF U0VSVkVEX01BU0sJR0VOTUFTSygxOSwgMTYpDQo+PiArI2RlZmluZSBRVUFEU1BJX01DUl9NRElT X01BU0sJCUJJVCgxNCkNCj4+ICsjZGVmaW5lIFFVQURTUElfTUNSX0NMUl9UWEZfTUFTSwlCSVQo MTEpDQo+PiArI2RlZmluZSBRVUFEU1BJX01DUl9DTFJfUlhGX01BU0sJQklUKDEwKQ0KPj4gKyNk ZWZpbmUgUVVBRFNQSV9NQ1JfRERSX0VOX01BU0sJCUJJVCg3KQ0KPj4gKyNkZWZpbmUgUVVBRFNQ SV9NQ1JfRU5EX0NGR19NQVNLCUdFTk1BU0soMywgMikNCj4+ICsjZGVmaW5lIFFVQURTUElfTUNS X1NXUlNUSERfTUFTSwlCSVQoMSkNCj4+ICsjZGVmaW5lIFFVQURTUElfTUNSX1NXUlNUU0RfTUFT SwlCSVQoMCkNCj4+ICsNCj4+ICsjZGVmaW5lIFFVQURTUElfSVBDUgkJCTB4MDgNCj4+ICsjZGVm aW5lIFFVQURTUElfSVBDUl9TRVFJRCh4KQkJKCh4KSA8PCAyNCkNCj4+ICsNCj4+ICsjZGVmaW5l IFFVQURTUElfQlVGM0NSCQkJMHgxYw0KPj4gKyNkZWZpbmUgUVVBRFNQSV9CVUYzQ1JfQUxMTVNU X01BU0sJQklUKDMxKQ0KPj4gKyNkZWZpbmUgUVVBRFNQSV9CVUYzQ1JfQURBVFNaKHgpCSgoeCkg PDwgOCkNCj4+ICsjZGVmaW5lIFFVQURTUElfQlVGM0NSX0FEQVRTWl9NQVNLCUdFTk1BU0soMTUs IDgpDQo+PiArDQo+PiArI2RlZmluZSBRVUFEU1BJX0JGR0VOQ1IJCQkweDIwDQo+PiArI2RlZmlu ZSBRVUFEU1BJX0JGR0VOQ1JfU0VRSUQoeCkJKCh4KSA8PCAxMikNCj4+ICsNCj4+ICsjZGVmaW5l IFFVQURTUElfQlVGMElORAkJCTB4MzANCj4+ICsjZGVmaW5lIFFVQURTUElfQlVGMUlORAkJCTB4 MzQNCj4+ICsjZGVmaW5lIFFVQURTUElfQlVGMklORAkJCTB4MzgNCj4+ICsjZGVmaW5lIFFVQURT UElfU0ZBUgkJCTB4MTAwDQo+PiArDQo+PiArI2RlZmluZSBRVUFEU1BJX1NNUFIJCQkweDEwOA0K Pj4gKyNkZWZpbmUgUVVBRFNQSV9TTVBSX0REUlNNUF9NQVNLCUdFTk1BU0soMTgsIDE2KQ0KPj4g KyNkZWZpbmUgUVVBRFNQSV9TTVBSX0ZTRExZX01BU0sJCUJJVCg2KQ0KPj4gKyNkZWZpbmUgUVVB RFNQSV9TTVBSX0ZTUEhTX01BU0sJCUJJVCg1KQ0KPj4gKyNkZWZpbmUgUVVBRFNQSV9TTVBSX0hT RU5BX01BU0sJCUJJVCgwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgUVVBRFNQSV9SQkNUCQkJMHgxMTAN Cj4+ICsjZGVmaW5lIFFVQURTUElfUkJDVF9XTVJLX01BU0sJCUdFTk1BU0soNCwgMCkNCj4+ICsj ZGVmaW5lIFFVQURTUElfUkJDVF9SWEJSRF9VU0VJUFMJQklUKDgpDQo+PiArDQo+PiArI2RlZmlu ZSBRVUFEU1BJX1RCRFIJCQkweDE1NA0KPj4gKw0KPj4gKyNkZWZpbmUgUVVBRFNQSV9TUgkJCTB4 MTVjDQo+PiArI2RlZmluZSBRVUFEU1BJX1NSX0lQX0FDQ19NQVNLCQlCSVQoMSkNCj4+ICsjZGVm aW5lIFFVQURTUElfU1JfQUhCX0FDQ19NQVNLCQlCSVQoMikNCj4+ICsNCj4+ICsjZGVmaW5lIFFV QURTUElfRlIJCQkweDE2MA0KPj4gKyNkZWZpbmUgUVVBRFNQSV9GUl9URkZfTUFTSwkJQklUKDAp DQo+PiArDQo+PiArI2RlZmluZSBRVUFEU1BJX1NQVFJDTFIJCQkweDE2Yw0KPj4gKyNkZWZpbmUg UVVBRFNQSV9TUFRSQ0xSX0lQUFRSQwkJQklUKDgpDQo+PiArI2RlZmluZSBRVUFEU1BJX1NQVFJD TFJfQkZQVFJDCQlCSVQoMCkNCj4+ICsNCj4+ICsjZGVmaW5lIFFVQURTUElfU0ZBMUFECQkJMHgx ODANCj4+ICsjZGVmaW5lIFFVQURTUElfU0ZBMkFECQkJMHgxODQNCj4+ICsjZGVmaW5lIFFVQURT UElfU0ZCMUFECQkJMHgxODgNCj4+ICsjZGVmaW5lIFFVQURTUElfU0ZCMkFECQkJMHgxOGMNCj4+ ICsjZGVmaW5lIFFVQURTUElfUkJEUih4KQkJCSgweDIwMCArICgoeCkgKiA0KSkNCj4+ICsNCj4+ ICsjZGVmaW5lIFFVQURTUElfTFVUS0VZCQkJMHgzMDANCj4+ICsjZGVmaW5lIFFVQURTUElfTFVU S0VZX1ZBTFVFCQkweDVBRjA1QUYwDQo+PiArDQo+PiArI2RlZmluZSBRVUFEU1BJX0xDS0NSCQkJ MHgzMDQNCj4+ICsjZGVmaW5lIFFVQURTUElfTENLRVJfTE9DSwkJQklUKDApDQo+PiArI2RlZmlu ZSBRVUFEU1BJX0xDS0VSX1VOTE9DSwkJQklUKDEpDQo+PiArDQo+PiArI2RlZmluZSBRVUFEU1BJ X1JTRVIJCQkweDE2NA0KPj4gKyNkZWZpbmUgUVVBRFNQSV9SU0VSX1RGSUUJCUJJVCgwKQ0KPj4g Kw0KPj4gKyNkZWZpbmUgUVVBRFNQSV9MVVRfQkFTRQkJMHgzMTANCj4+ICsjZGVmaW5lIFFVQURT UElfTFVUX09GRlNFVAkJKFNFUUlEX0xVVCAqIDQgKiA0KQ0KPj4gKyNkZWZpbmUgUVVBRFNQSV9M VVRfUkVHKGlkeCkgXA0KPj4gKwkoUVVBRFNQSV9MVVRfQkFTRSArIFFVQURTUElfTFVUX09GRlNF VCArIChpZHgpICogNCkNCj4+ICsNCj4+ICsvKiBJbnN0cnVjdGlvbiBzZXQgZm9yIHRoZSBMVVQg cmVnaXN0ZXIgKi8NCj4+ICsjZGVmaW5lIExVVF9TVE9QCQkwDQo+PiArI2RlZmluZSBMVVRfQ01E CQkJMQ0KPj4gKyNkZWZpbmUgTFVUX0FERFIJCTINCj4+ICsjZGVmaW5lIExVVF9EVU1NWQkJMw0K Pj4gKyNkZWZpbmUgTFVUX01PREUJCTQNCj4+ICsjZGVmaW5lIExVVF9NT0RFMgkJNQ0KPj4gKyNk ZWZpbmUgTFVUX01PREU0CQk2DQo+PiArI2RlZmluZSBMVVRfRlNMX1JFQUQJCTcNCj4+ICsjZGVm aW5lIExVVF9GU0xfV1JJVEUJCTgNCj4+ICsjZGVmaW5lIExVVF9KTVBfT05fQ1MJCTkNCj4+ICsj ZGVmaW5lIExVVF9BRERSX0REUgkJMTANCj4+ICsjZGVmaW5lIExVVF9NT0RFX0REUgkJMTENCj4+ ICsjZGVmaW5lIExVVF9NT0RFMl9ERFIJCTEyDQo+PiArI2RlZmluZSBMVVRfTU9ERTRfRERSCQkx Mw0KPj4gKyNkZWZpbmUgTFVUX0ZTTF9SRUFEX0REUgkxNA0KPj4gKyNkZWZpbmUgTFVUX0ZTTF9X UklURV9ERFIJMTUNCj4+ICsjZGVmaW5lIExVVF9EQVRBX0xFQVJOCQkxNg0KPj4gKw0KPj4gKy8q DQo+PiArICogVGhlIFBBRCBkZWZpbml0aW9ucyBmb3IgTFVUIHJlZ2lzdGVyLg0KPj4gKyAqDQo+ PiArICogVGhlIHBhZCBzdGFuZHMgZm9yIHRoZSBudW1iZXIgb2YgSU8gbGluZXMgWzA6M10uDQo+ PiArICogRm9yIGV4YW1wbGUsIHRoZSBxdWFkIHJlYWQgbmVlZHMgZm91ciBJTyBsaW5lcywNCj4+ ICsgKiBzbyB5b3Ugc2hvdWxkIHVzZSBMVVRfUEFEKDQpLg0KPj4gKyAqLw0KPj4gKyNkZWZpbmUg TFVUX1BBRCh4KSAoZmxzKHgpIC0gMSkNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIE1hY3JvIGZvciBj b25zdHJ1Y3RpbmcgdGhlIExVVCBlbnRyaWVzIHdpdGggdGhlIGZvbGxvd2luZw0KPj4gKyAqIHJl Z2lzdGVyIGxheW91dDoNCj4+ICsgKg0KPj4gKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ICsgKiAgfCBJTlNUUjEgfCBQQUQxIHwgT1BS TkQxIHwgSU5TVFIwIHwgUEFEMCB8IE9QUk5EMCB8DQo+PiArICogIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4gKyAqLw0KPj4gKyNkZWZpbmUg TFVUX0RFRihpZHgsIGlucywgcGFkLCBvcHIpCQkJCQlcDQo+PiArCSgoKChpbnMpIDw8IDEwKSB8 ICgocGFkKSA8PCA4KSB8IChvcHIpKSA8PCAoKChpZHgpICUgMikgKiAxNikpDQo+PiArDQo+PiAr LyogQ29udHJvbGxlciBuZWVkcyBkcml2ZXIgdG8gc3dhcCBlbmRpYW5uZXNzICovDQo+PiArI2Rl ZmluZSBRVUFEU1BJX1FVSVJLX1NXQVBfRU5ESUFOCUJJVCgwKQ0KPj4gKw0KPj4gKy8qIENvbnRy b2xsZXIgbmVlZHMgNHggaW50ZXJuYWwgY2xvY2sgKi8NCj4+ICsjZGVmaW5lIFFVQURTUElfUVVJ UktfNFhfSU5UX0NMSwlCSVQoMSkNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIFRLVDI1Mzg5MCwgdGhl IGNvbnRyb2xsZXIgbmVlZHMgdGhlIGRyaXZlciB0byBmaWxsIHRoZSB0eGZpZm8gd2l0aA0KPj4g KyAqIDE2IGJ5dGVzIGF0IGxlYXN0IHRvIHRyaWdnZXIgYSBkYXRhIHRyYW5zZmVyLCBldmVuIHRo b3VnaCB0aGUgZXh0cmENCj4+ICsgKiBkYXRhIHdvbid0IGJlIHRyYW5zZmVycmVkLg0KPj4gKyAq Lw0KPj4gKyNkZWZpbmUgUVVBRFNQSV9RVUlSS19US1QyNTM4OTAJCUJJVCgyKQ0KPj4gKw0KPj4g Ky8qIFRLVDI0NTYxOCwgdGhlIGNvbnRyb2xsZXIgY2Fubm90IHdha2UgdXAgZnJvbSB3YWl0IG1v ZGUgKi8NCj4+ICsjZGVmaW5lIFFVQURTUElfUVVJUktfVEtUMjQ1NjE4CQlCSVQoMykNCj4+ICsN Cj4+ICsvKg0KPj4gKyAqIENvbnRyb2xsZXIgYWRkcyBRU1BJX0FNQkFfQkFTRSAoYmFzZSBhZGRy ZXNzIG9mIHRoZSBtYXBwZWQgbWVtb3J5KQ0KPj4gKyAqIGludGVybmFsbHkuIE5vIG5lZWQgdG8g YWRkIGl0IHdoZW4gc2V0dGluZyBTRlhYQUQgYW5kIFNGQVIgcmVnaXN0ZXJzDQo+PiArKi8NCj4+ ICsjZGVmaW5lIFFVQURTUElfUVVJUktfQkFTRV9JTlRFUk5BTAlCSVQoNCkNCj4+ICsNCj4+ICtz dHJ1Y3QgZnNsX3FzcGlfZGV2dHlwZV9kYXRhIHsNCj4+ICsJdW5zaWduZWQgaW50IHJ4ZmlmbzsN Cj4+ICsJdW5zaWduZWQgaW50IHR4ZmlmbzsNCj4+ICsJdW5zaWduZWQgaW50IGFoYl9idWZfc2l6 ZTsNCj4+ICsJdW5zaWduZWQgaW50IHF1aXJrczsNCj4+ICsJYm9vbCBsaXR0bGVfZW5kaWFuOw0K Pj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfcXNwaV9kZXZ0eXBlX2Rh dGEgdnlicmlkX2RhdGEgPSB7DQo+PiArCS5yeGZpZm8gPSBTWl8xMjgsDQo+PiArCS50eGZpZm8g PSBTWl82NCwNCj4+ICsJLmFoYl9idWZfc2l6ZSA9IFNaXzFLLA0KPj4gKwkucXVpcmtzID0gUVVB RFNQSV9RVUlSS19TV0FQX0VORElBTiwNCj4+ICsJLmxpdHRsZV9lbmRpYW4gPSB0cnVlLA0KPj4g K307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfcXNwaV9kZXZ0eXBlX2RhdGEg aW14NnN4X2RhdGEgPSB7DQo+PiArCS5yeGZpZm8gPSBTWl8xMjgsDQo+PiArCS50eGZpZm8gPSBT Wl81MTIsDQo+PiArCS5haGJfYnVmX3NpemUgPSBTWl8xSywNCj4+ICsJLnF1aXJrcyA9IFFVQURT UElfUVVJUktfNFhfSU5UX0NMSyB8IFFVQURTUElfUVVJUktfVEtUMjQ1NjE4LA0KPj4gKwkubGl0 dGxlX2VuZGlhbiA9IHRydWUsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGZzbF9xc3BpX2RldnR5cGVfZGF0YSBpbXg3ZF9kYXRhID0gew0KPj4gKwkucnhmaWZvID0gU1pf NTEyLA0KPj4gKwkudHhmaWZvID0gU1pfNTEyLA0KPj4gKwkuYWhiX2J1Zl9zaXplID0gU1pfMUss DQo+PiArCS5xdWlya3MgPSBRVUFEU1BJX1FVSVJLX1RLVDI1Mzg5MCB8IFFVQURTUElfUVVJUktf NFhfSU5UX0NMSywNCj4+ICsJLmxpdHRsZV9lbmRpYW4gPSB0cnVlLA0KPj4gK307DQo+PiArDQo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfcXNwaV9kZXZ0eXBlX2RhdGEgaW14NnVsX2RhdGEg PSB7DQo+PiArCS5yeGZpZm8gPSBTWl8xMjgsDQo+PiArCS50eGZpZm8gPSBTWl81MTIsDQo+PiAr CS5haGJfYnVmX3NpemUgPSBTWl8xSywNCj4+ICsJLnF1aXJrcyA9IFFVQURTUElfUVVJUktfVEtU MjUzODkwIHwgUVVBRFNQSV9RVUlSS180WF9JTlRfQ0xLLA0KPj4gKwkubGl0dGxlX2VuZGlhbiA9 IHRydWUsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF9xc3BpX2Rl dnR5cGVfZGF0YSBsczEwMjFhX2RhdGEgPSB7DQo+PiArCS5yeGZpZm8gPSBTWl8xMjgsDQo+PiAr CS50eGZpZm8gPSBTWl82NCwNCj4+ICsJLmFoYl9idWZfc2l6ZSA9IFNaXzFLLA0KPj4gKwkucXVp cmtzID0gMCwNCj4+ICsJLmxpdHRsZV9lbmRpYW4gPSBmYWxzZSwNCj4+ICt9Ow0KPj4gKw0KPj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnNsX3FzcGlfZGV2dHlwZV9kYXRhIGxzMjA4MGFfZGF0YSA9 IHsNCj4+ICsJLnJ4ZmlmbyA9IFNaXzEyOCwNCj4+ICsJLnR4ZmlmbyA9IFNaXzY0LA0KPj4gKwku YWhiX2J1Zl9zaXplID0gU1pfMUssDQo+PiArCS5xdWlya3MgPSBRVUFEU1BJX1FVSVJLX1RLVDI1 Mzg5MCB8DQo+PiBRVUFEU1BJX1FVSVJLX0JBU0VfSU5URVJOQUwsDQo+PiArCS5saXR0bGVfZW5k aWFuID0gdHJ1ZSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCBmc2xfcXNwaSB7DQo+PiArCXZv aWQgX19pb21lbSAqaW9iYXNlOw0KPj4gKwl2b2lkIF9faW9tZW0gKmFoYl9hZGRyOw0KPj4gKwl1 MzIgbWVtbWFwX3BoeTsNCj4+ICsJc3RydWN0IGNsayAqY2xrLCAqY2xrX2VuOw0KPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7DQo+PiArCXN0cnVjdCBjb21wbGV0aW9uIGM7DQo+PiArCWNvbnN0IHN0 cnVjdCBmc2xfcXNwaV9kZXZ0eXBlX2RhdGEgKmRldnR5cGVfZGF0YTsNCj4+ICsJc3RydWN0IG11 dGV4IGxvY2s7DQo+PiArCXN0cnVjdCBwbV9xb3NfcmVxdWVzdCBwbV9xb3NfcmVxOw0KPj4gKwlp bnQgc2VsZWN0ZWQ7DQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGludCBuZWVkc19z d2FwX2VuZGlhbihzdHJ1Y3QgZnNsX3FzcGkgKnEpIHsNCj4+ICsJcmV0dXJuIHEtPmRldnR5cGVf ZGF0YS0+cXVpcmtzICYgUVVBRFNQSV9RVUlSS19TV0FQX0VORElBTjsgfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbmxpbmUgaW50IG5lZWRzXzR4X2Nsb2NrKHN0cnVjdCBmc2xfcXNwaSAqcSkgew0KPj4g KwlyZXR1cm4gcS0+ZGV2dHlwZV9kYXRhLT5xdWlya3MgJiBRVUFEU1BJX1FVSVJLXzRYX0lOVF9D TEs7IH0NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGludCBuZWVkc19maWxsX3R4ZmlmbyhzdHJ1 Y3QgZnNsX3FzcGkgKnEpIHsNCj4+ICsJcmV0dXJuIHEtPmRldnR5cGVfZGF0YS0+cXVpcmtzICYg UVVBRFNQSV9RVUlSS19US1QyNTM4OTA7IH0NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGludCBu ZWVkc193YWtldXBfd2FpdF9tb2RlKHN0cnVjdCBmc2xfcXNwaSAqcSkgew0KPj4gKwlyZXR1cm4g cS0+ZGV2dHlwZV9kYXRhLT5xdWlya3MgJiBRVUFEU1BJX1FVSVJLX1RLVDI0NTYxODsgfQ0KPj4g Kw0KPj4gK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRzX2FtYmFfYmFzZV9vZmZzZXQoc3RydWN0IGZz bF9xc3BpICpxKSB7DQo+PiArCXJldHVybiAhKHEtPmRldnR5cGVfZGF0YS0+cXVpcmtzICYNCj4+ IFFVQURTUElfUVVJUktfQkFTRV9JTlRFUk5BTCk7IH0NCj4+ICsNCj4+ICsvKg0KPj4gKyAqIEFu IElDIGJ1ZyBtYWtlcyBpdCBuZWNlc3NhcnkgdG8gcmVhcnJhbmdlIHRoZSAzMi1iaXQgZGF0YS4N Cj4+ICsgKiBMYXRlciBjaGlwcywgc3VjaCBhcyBJTVg2U0xYLCBoYXZlIGZpeGVkIHRoaXMgYnVn Lg0KPj4gKyAqLw0KPj4gK3N0YXRpYyBpbmxpbmUgdTMyIGZzbF9xc3BpX2VuZGlhbl94Y2hnKHN0 cnVjdCBmc2xfcXNwaSAqcSwgdTMyIGEpIHsNCj4+ICsJcmV0dXJuIG5lZWRzX3N3YXBfZW5kaWFu KHEpID8gX19zd2FiMzIoYSkgOiBhOyB9DQo+PiArDQo+PiArLyoNCj4+ICsgKiBSL1cgZnVuY3Rp b25zIGZvciBiaWctIG9yIGxpdHRsZS1lbmRpYW4gcmVnaXN0ZXJzOg0KPj4gKyAqIFRoZSBRU1BJ IGNvbnRyb2xsZXIncyBlbmRpYW5uZXNzIGlzIGluZGVwZW5kZW50IG9mDQo+PiArICogdGhlIENQ VSBjb3JlJ3MgZW5kaWFubmVzcy4gU28gZmFyLCBhbHRob3VnaCB0aGUgQ1BVDQo+PiArICogY29y ZSBpcyBsaXR0bGUtZW5kaWFuIHRoZSBRU1BJIGNvbnRyb2xsZXIgY2FuIHVzZQ0KPj4gKyAqIGJp Zy1lbmRpYW4gb3IgbGl0dGxlLWVuZGlhbi4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgdm9pZCBxc3Bp X3dyaXRlbChzdHJ1Y3QgZnNsX3FzcGkgKnEsIHUzMiB2YWwsIHZvaWQgX19pb21lbQ0KPj4gKyph ZGRyKSB7DQo+PiArCWlmIChxLT5kZXZ0eXBlX2RhdGEtPmxpdHRsZV9lbmRpYW4pDQo+PiArCQlp b3dyaXRlMzIodmFsLCBhZGRyKTsNCj4+ICsJZWxzZQ0KPj4gKwkJaW93cml0ZTMyYmUodmFsLCBh ZGRyKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHUzMiBxc3BpX3JlYWRsKHN0cnVjdCBmc2xf cXNwaSAqcSwgdm9pZCBfX2lvbWVtICphZGRyKSB7DQo+PiArCWlmIChxLT5kZXZ0eXBlX2RhdGEt PmxpdHRsZV9lbmRpYW4pDQo+PiArCQlyZXR1cm4gaW9yZWFkMzIoYWRkcik7DQo+PiArDQo+PiAr CXJldHVybiBpb3JlYWQzMmJlKGFkZHIpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaXJxcmV0 dXJuX3QgZnNsX3FzcGlfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKSB7DQo+PiAr CXN0cnVjdCBmc2xfcXNwaSAqcSA9IGRldl9pZDsNCj4+ICsJdTMyIHJlZzsNCj4+ICsNCj4+ICsJ LyogY2xlYXIgaW50ZXJydXB0ICovDQo+PiArCXJlZyA9IHFzcGlfcmVhZGwocSwgcS0+aW9iYXNl ICsgUVVBRFNQSV9GUik7DQo+PiArCXFzcGlfd3JpdGVsKHEsIHJlZywgcS0+aW9iYXNlICsgUVVB RFNQSV9GUik7DQo+PiArDQo+PiArCWlmIChyZWcgJiBRVUFEU1BJX0ZSX1RGRl9NQVNLKQ0KPj4g KwkJY29tcGxldGUoJnEtPmMpOw0KPj4gKw0KPj4gKwlkZXZfZGJnKHEtPmRldiwgIlFVQURTUElf RlIgOiAweCUuOHg6MHglLjh4XG4iLCAwLCByZWcpOw0KPj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZnNsX3FzcGlfY2hlY2tfYnVzd2lkdGgoc3Ry dWN0IGZzbF9xc3BpICpxLCB1OCB3aWR0aCkgew0KPj4gKwlzd2l0Y2ggKHdpZHRoKSB7DQo+PiAr CWNhc2UgMToNCj4+ICsJY2FzZSAyOg0KPj4gKwljYXNlIDQ6DQo+PiArCQlyZXR1cm4gMDsNCj4+ ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gLUVOT1RTVVBQOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgYm9vbCBmc2xfcXNwaV9zdXBwb3J0c19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLA0KPj4gKwkJ CQkgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGZzbF9x c3BpICpxID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7DQo+ PiArCWludCByZXQ7DQo+PiArDQo+PiArCXJldCA9IGZzbF9xc3BpX2NoZWNrX2J1c3dpZHRoKHEs IG9wLT5jbWQuYnVzd2lkdGgpOw0KPj4gKw0KPj4gKwlpZiAob3AtPmFkZHIubmJ5dGVzKQ0KPj4g KwkJcmV0IHw9IGZzbF9xc3BpX2NoZWNrX2J1c3dpZHRoKHEsIG9wLT5hZGRyLmJ1c3dpZHRoKTsN Cj4+ICsNCj4+ICsJaWYgKG9wLT5kdW1teS5uYnl0ZXMpDQo+PiArCQlyZXQgfD0gZnNsX3FzcGlf Y2hlY2tfYnVzd2lkdGgocSwgb3AtPmR1bW15LmJ1c3dpZHRoKTsNCj4+ICsNCj4+ICsJaWYgKG9w LT5kYXRhLm5ieXRlcykNCj4+ICsJCXJldCB8PSBmc2xfcXNwaV9jaGVja19idXN3aWR0aChxLCBv cC0+ZGF0YS5idXN3aWR0aCk7DQo+PiArDQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gZmFs c2U7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIFRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIG5l ZWRlZCBmb3IgdGhlIG9wLCBuZWVkcw0KPj4gKwkgKiB0byBmaXQgaW50byBhIHNpbmdsZSBMVVQg ZW50cnkuDQo+PiArCSAqLw0KPj4gKwlpZiAob3AtPmFkZHIubmJ5dGVzICsNCj4+ICsJICAgKG9w LT5kdW1teS5uYnl0ZXMgPyAxOjApICsNCj4+ICsJICAgKG9wLT5kYXRhLm5ieXRlcyA/IDE6MCkg PiA2KQ0KPj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4gKw0KPj4gKwkvKiBNYXggNjQgZHVtbXkgY2xv Y2sgY3ljbGVzIHN1cHBvcnRlZCAqLw0KPj4gKwlpZiAob3AtPmR1bW15Lm5ieXRlcyAmJg0KPj4g KwkgICAgKG9wLT5kdW1teS5uYnl0ZXMgKiA4IC8gb3AtPmR1bW15LmJ1c3dpZHRoID4gNjQpKQ0K Pj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4gKw0KPj4gKwkvKiBNYXggZGF0YSBsZW5ndGgsIGNoZWNr IGNvbnRyb2xsZXIgbGltaXRzIGFuZCBhbGlnbm1lbnQgKi8NCj4+ICsJaWYgKG9wLT5kYXRhLmRp ciA9PSBTUElfTUVNX0RBVEFfSU4gJiYNCj4+ICsJICAgIChvcC0+ZGF0YS5uYnl0ZXMgPiBxLT5k ZXZ0eXBlX2RhdGEtPmFoYl9idWZfc2l6ZSB8fA0KPj4gKwkgICAgIChvcC0+ZGF0YS5uYnl0ZXMg PiBxLT5kZXZ0eXBlX2RhdGEtPnJ4ZmlmbyAtIDQgJiYNCj4+ICsJICAgICAgIUlTX0FMSUdORUQo b3AtPmRhdGEubmJ5dGVzLCA4KSkpKQ0KPj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4gKw0KPj4gKwlp ZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9PVVQgJiYNCj4+ICsJICAgIG9wLT5kYXRh Lm5ieXRlcyA+IHEtPmRldnR5cGVfZGF0YS0+dHhmaWZvKQ0KPj4gKwkJcmV0dXJuIGZhbHNlOw0K Pj4gKw0KPj4gKwlyZXR1cm4gdHJ1ZTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgZnNs X3FzcGlfcHJlcGFyZV9sdXQoc3RydWN0IGZzbF9xc3BpICpxLA0KPj4gKwkJCQkgY29uc3Qgc3Ry dWN0IHNwaV9tZW1fb3AgKm9wKQ0KPj4gK3sNCj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlID0gcS0+ aW9iYXNlOw0KPj4gKwl1MzIgbHV0dmFsWzRdID0ge307DQo+PiArCWludCBsdXRpZHggPSAxLCBp Ow0KPj4gKw0KPj4gKwlsdXR2YWxbMF0gfD0gTFVUX0RFRigwLCBMVVRfQ01ELCBMVVRfUEFEKG9w LT5jbWQuYnVzd2lkdGgpLA0KPj4gKwkJCSAgICAgb3AtPmNtZC5vcGNvZGUpOw0KPj4gKw0KPj4g KwkvKg0KPj4gKwkgKiBGb3Igc29tZSB1bmtub3duIHJlYXNvbiwgdXNpbmcgTFVUX0FERFIgZG9l c24ndCB3b3JrIGluIHNvbWUNCj4+ICsJICogY2FzZXMgKGF0IGxlYXN0IHdpdGggb25seSBvbmUg Ynl0ZSBsb25nIGFkZHJlc3NlcyksIHNvDQo+PiArCSAqIGxldCdzIHVzZSBMVVRfTU9ERSB0byB3 cml0ZSB0aGUgYWRkcmVzcyBieXRlcyBvbmUgYnkgb25lDQo+PiArCSAqLw0KPj4gKwlmb3IgKGkg PSAwOyBpIDwgb3AtPmFkZHIubmJ5dGVzOyBpKyspIHsNCj4+ICsJCXU4IGFkZHJieXRlID0gb3At PmFkZHIudmFsID4+ICg4ICogKG9wLT5hZGRyLm5ieXRlcyAtIGkgLSAxKSk7DQo+PiArDQo+PiAr CQlsdXR2YWxbbHV0aWR4IC8gMl0gfD0gTFVUX0RFRihsdXRpZHgsIExVVF9NT0RFLA0KPj4gKwkJ CQkJICAgICAgTFVUX1BBRChvcC0+YWRkci5idXN3aWR0aCksDQo+PiArCQkJCQkgICAgICBhZGRy Ynl0ZSk7DQo+PiArCQlsdXRpZHgrKzsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAob3AtPmR1bW15 Lm5ieXRlcykgew0KPj4gKwkJbHV0dmFsW2x1dGlkeCAvIDJdIHw9IExVVF9ERUYobHV0aWR4LCBM VVRfRFVNTVksDQo+PiArCQkJCQkgICAgICBMVVRfUEFEKG9wLT5kdW1teS5idXN3aWR0aCksDQo+ PiArCQkJCQkgICAgICBvcC0+ZHVtbXkubmJ5dGVzICogOCAvDQo+PiArCQkJCQkgICAgICBvcC0+ ZHVtbXkuYnVzd2lkdGgpOw0KPj4gKwkJbHV0aWR4Kys7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYg KG9wLT5kYXRhLm5ieXRlcykgew0KPj4gKwkJbHV0dmFsW2x1dGlkeCAvIDJdIHw9IExVVF9ERUYo bHV0aWR4LA0KPj4gKwkJCQkJICAgICAgb3AtPmRhdGEuZGlyID09DQo+PiBTUElfTUVNX0RBVEFf SU4gPw0KPj4gKwkJCQkJICAgICAgTFVUX0ZTTF9SRUFEIDogTFVUX0ZTTF9XUklURSwNCj4+ICsJ CQkJCSAgICAgIExVVF9QQUQob3AtPmRhdGEuYnVzd2lkdGgpLA0KPj4gKwkJCQkJICAgICAgMCk7 DQo+PiArCQlsdXRpZHgrKzsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlsdXR2YWxbbHV0aWR4IC8gMl0g fD0gTFVUX0RFRihsdXRpZHgsIExVVF9TVE9QLCAwLCAwKTsNCj4+ICsNCj4+ICsJLyogdW5sb2Nr IExVVCAqLw0KPj4gKwlxc3BpX3dyaXRlbChxLCBRVUFEU1BJX0xVVEtFWV9WQUxVRSwgcS0+aW9i YXNlICsgUVVBRFNQSV9MVVRLRVkpOw0KPj4gKwlxc3BpX3dyaXRlbChxLCBRVUFEU1BJX0xDS0VS X1VOTE9DSywgcS0+aW9iYXNlICsgUVVBRFNQSV9MQ0tDUik7DQo+PiArDQo+PiArCS8qIGZpbGwg TFVUICovDQo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGx1dHZhbCk7IGkrKykNCj4+ ICsJCXFzcGlfd3JpdGVsKHEsIGx1dHZhbFtpXSwgYmFzZSArIFFVQURTUElfTFVUX1JFRyhpKSk7 DQo+PiArDQo+PiArCS8qIGxvY2sgTFVUICovDQo+PiArCXFzcGlfd3JpdGVsKHEsIFFVQURTUElf TFVUS0VZX1ZBTFVFLCBxLT5pb2Jhc2UgKyBRVUFEU1BJX0xVVEtFWSk7DQo+PiArCXFzcGlfd3Jp dGVsKHEsIFFVQURTUElfTENLRVJfTE9DSywgcS0+aW9iYXNlICsgUVVBRFNQSV9MQ0tDUik7IH0N Cj4+ICsNCj4+ICtzdGF0aWMgaW50IGZzbF9xc3BpX2Nsa19wcmVwX2VuYWJsZShzdHJ1Y3QgZnNs X3FzcGkgKnEpIHsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKHEtPmNsa19lbik7DQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4g Kw0KPj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocS0+Y2xrKTsNCj4+ICsJaWYgKHJldCkg ew0KPj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHEtPmNsa19lbik7DQo+PiArCQlyZXR1cm4g cmV0Ow0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChuZWVkc193YWtldXBfd2FpdF9tb2RlKHEpKQ0K Pj4gKwkJcG1fcW9zX2FkZF9yZXF1ZXN0KCZxLT5wbV9xb3NfcmVxLA0KPj4gUE1fUU9TX0NQVV9E TUFfTEFURU5DWSwgMCk7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgdm9pZCBmc2xfcXNwaV9jbGtfZGlzYWJsZV91bnByZXAoc3RydWN0IGZzbF9xc3BpICpx KSB7DQo+PiArCWlmIChuZWVkc193YWtldXBfd2FpdF9tb2RlKHEpKQ0KPj4gKwkJcG1fcW9zX3Jl bW92ZV9yZXF1ZXN0KCZxLT5wbV9xb3NfcmVxKTsNCj4+ICsNCj4+ICsJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKHEtPmNsayk7DQo+PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShxLT5jbGtfZW4pOw0K Pj4gK30NCj4+ICsNCj4+ICsvKg0KPj4gKyAqIElmIHdlIGhhdmUgY2hhbmdlZCB0aGUgY29udGVu dCBvZiB0aGUgZmxhc2ggYnkgd3JpdGluZyBvciBlcmFzaW5nLA0KPj4gK29yIGlmIHdlDQo+PiAr ICogcmVhZCBmcm9tIGZsYXNoIHdpdGggYSBkaWZmZXJlbnQgb2Zmc2V0IGludG8gdGhlIHBhZ2Ug YnVmZmVyLCB3ZQ0KPj4gK25lZWQgdG8NCj4+ICsgKiBpbnZhbGlkYXRlIHRoZSBBSEIgYnVmZmVy LiBJZiB3ZSBkbyBub3QgZG8gc28sIHdlIG1heSByZWFkIG91dCB0aGUNCj4+ICt3cm9uZw0KPj4g KyAqIGRhdGEuIFRoZSBzcGVjIHRlbGxzIHVzIHJlc2V0IHRoZSBBSEIgZG9tYWluIGFuZCBTZXJp YWwgRmxhc2ggZG9tYWluDQo+PiArYXQNCj4+ICsgKiB0aGUgc2FtZSB0aW1lLg0KPj4gKyAqLw0K Pj4gK3N0YXRpYyB2b2lkIGZzbF9xc3BpX2ludmFsaWRhdGUoc3RydWN0IGZzbF9xc3BpICpxKSB7 DQo+PiArCXUzMiByZWc7DQo+PiArDQo+PiArCXJlZyA9IHFzcGlfcmVhZGwocSwgcS0+aW9iYXNl ICsgUVVBRFNQSV9NQ1IpOw0KPj4gKwlyZWcgfD0gUVVBRFNQSV9NQ1JfU1dSU1RIRF9NQVNLIHwN Cj4+IFFVQURTUElfTUNSX1NXUlNUU0RfTUFTSzsNCj4+ICsJcXNwaV93cml0ZWwocSwgcmVnLCBx LT5pb2Jhc2UgKyBRVUFEU1BJX01DUik7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIFRoZSBtaW5p bXVtIGRlbGF5IDogMSBBSEIgKyAyIFNGQ0sgY2xvY2tzLg0KPj4gKwkgKiBEZWxheSAxIHVzIGlz IGVub3VnaC4NCj4+ICsJICovDQo+PiArCXVkZWxheSgxKTsNCj4+ICsNCj4+ICsJcmVnICY9IH4o UVVBRFNQSV9NQ1JfU1dSU1RIRF9NQVNLIHwNCj4+IFFVQURTUElfTUNSX1NXUlNUU0RfTUFTSyk7 DQo+PiArCXFzcGlfd3JpdGVsKHEsIHJlZywgcS0+aW9iYXNlICsgUVVBRFNQSV9NQ1IpOyB9DQo+ PiArDQo+PiArc3RhdGljIHZvaWQgZnNsX3FzcGlfc2VsZWN0X21lbShzdHJ1Y3QgZnNsX3FzcGkg KnEsIHN0cnVjdCBzcGlfZGV2aWNlDQo+PiArKnNwaSkgew0KPj4gKwl1bnNpZ25lZCBsb25nIHJh dGUgPSBzcGktPm1heF9zcGVlZF9oejsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJaWYgKHEt PnNlbGVjdGVkID09IHNwaS0+Y2hpcF9zZWxlY3QpDQo+PiArCQlyZXR1cm47DQo+PiArDQo+PiAr CWlmIChuZWVkc180eF9jbG9jayhxKSkNCj4+ICsJCXJhdGUgKj0gNDsNCj4+ICsNCj4+ICsJZnNs X3FzcGlfY2xrX2Rpc2FibGVfdW5wcmVwKHEpOw0KPj4gKw0KPj4gKwlyZXQgPSBjbGtfc2V0X3Jh dGUocS0+Y2xrLCByYXRlKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVybjsNCj4+ICsNCj4+ ICsJcmV0ID0gZnNsX3FzcGlfY2xrX3ByZXBfZW5hYmxlKHEpOw0KPj4gKwlpZiAocmV0KQ0KPj4g KwkJcmV0dXJuOw0KPj4gKw0KPj4gKwlxLT5zZWxlY3RlZCA9IHNwaS0+Y2hpcF9zZWxlY3Q7DQo+ PiArDQo+PiArCWZzbF9xc3BpX2ludmFsaWRhdGUocSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyB2b2lkIGZzbF9xc3BpX3JlYWRfYWhiKHN0cnVjdCBmc2xfcXNwaSAqcSwgY29uc3Qgc3RydWN0 DQo+PiArc3BpX21lbV9vcCAqb3ApIHsNCj4+ICsJbWVtY3B5X2Zyb21pbyhvcC0+ZGF0YS5idWYu aW4sDQo+PiArCQkgICAgICBxLT5haGJfYWRkciArIHEtPnNlbGVjdGVkICogcS0+ZGV2dHlwZV9k YXRhLQ0KPj4+IGFoYl9idWZfc2l6ZSwNCj4+ICsJCSAgICAgIG9wLT5kYXRhLm5ieXRlcyk7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGZzbF9xc3BpX2ZpbGxfdHhmaWZvKHN0cnVjdCBm c2xfcXNwaSAqcSwNCj4+ICsJCQkJIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkNCj4+ICt7 DQo+PiArCXZvaWQgX19pb21lbSAqYmFzZSA9IHEtPmlvYmFzZTsNCj4+ICsJaW50IGk7DQo+PiAr CXUzMiB2YWw7DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBBTElHTl9ET1dOKG9wLT5kYXRh Lm5ieXRlcywgNCk7IGkgKz0gNCkgew0KPj4gKwkJbWVtY3B5KCZ2YWwsIG9wLT5kYXRhLmJ1Zi5v dXQgKyBpLCA0KTsNCj4+ICsJCXZhbCA9IGZzbF9xc3BpX2VuZGlhbl94Y2hnKHEsIHZhbCk7DQo+ PiArCQlxc3BpX3dyaXRlbChxLCB2YWwsIGJhc2UgKyBRVUFEU1BJX1RCRFIpOw0KPj4gKwl9DQo+ PiArDQo+PiArCWlmIChpIDwgb3AtPmRhdGEubmJ5dGVzKSB7DQo+PiArCQltZW1jcHkoJnZhbCwg b3AtPmRhdGEuYnVmLm91dCArIGksIG9wLT5kYXRhLm5ieXRlcyAtIGkpOw0KPj4gKwkJdmFsID0g ZnNsX3FzcGlfZW5kaWFuX3hjaGcocSwgdmFsKTsNCj4+ICsJCXFzcGlfd3JpdGVsKHEsIHZhbCwg YmFzZSArIFFVQURTUElfVEJEUik7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKG5lZWRzX2ZpbGxf dHhmaWZvKHEpKSB7DQo+PiArCQlmb3IgKGkgPSBvcC0+ZGF0YS5uYnl0ZXM7IGkgPCAxNjsgaSAr PSA0KQ0KPj4gKwkJCXFzcGlfd3JpdGVsKHEsIDAsIGJhc2UgKyBRVUFEU1BJX1RCRFIpOw0KPj4g Kwl9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGZzbF9xc3BpX3JlYWRfcnhmaWZvKHN0 cnVjdCBmc2xfcXNwaSAqcSwNCj4+ICsJCQkgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkN Cj4+ICt7DQo+PiArCXZvaWQgX19pb21lbSAqYmFzZSA9IHEtPmlvYmFzZTsNCj4+ICsJaW50IGk7 DQo+PiArCXU4ICpidWYgPSBvcC0+ZGF0YS5idWYuaW47DQo+PiArCXUzMiB2YWw7DQo+PiArDQo+ PiArCWZvciAoaSA9IDA7IGkgPCBBTElHTl9ET1dOKG9wLT5kYXRhLm5ieXRlcywgNCk7IGkgKz0g NCkgew0KPj4gKwkJdmFsID0gcXNwaV9yZWFkbChxLCBiYXNlICsgUVVBRFNQSV9SQkRSKGkgLyA0 KSk7DQo+PiArCQl2YWwgPSBmc2xfcXNwaV9lbmRpYW5feGNoZyhxLCB2YWwpOw0KPj4gKwkJbWVt Y3B5KGJ1ZiArIGksICZ2YWwsIDQpOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChpIDwgb3AtPmRh dGEubmJ5dGVzKSB7DQo+PiArCQl2YWwgPSBxc3BpX3JlYWRsKHEsIGJhc2UgKyBRVUFEU1BJX1JC RFIoaSAvIDQpKTsNCj4+ICsJCXZhbCA9IGZzbF9xc3BpX2VuZGlhbl94Y2hnKHEsIHZhbCk7DQo+ PiArCQltZW1jcHkoYnVmICsgaSwgJnZhbCwgb3AtPmRhdGEubmJ5dGVzIC0gaSk7DQo+PiArCX0N Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBmc2xfcXNwaV9kb19vcChzdHJ1Y3QgZnNsX3Fz cGkgKnEsIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wDQo+PiArKm9wKSB7DQo+PiArCXZvaWQgX19p b21lbSAqYmFzZSA9IHEtPmlvYmFzZTsNCj4+ICsJaW50IGVyciA9IDA7DQo+PiArDQo+PiArCWlu aXRfY29tcGxldGlvbigmcS0+Yyk7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIEFsd2F5cyBzdGFy dCB0aGUgc2VxdWVuY2UgYXQgdGhlIHNhbWUgaW5kZXggc2luY2Ugd2UgdXBkYXRlDQo+PiArCSAq IHRoZSBMVVQgYXQgZWFjaCBleGVjX29wKCkgY2FsbC4gQW5kIGFsc28gc3BlY2lmeSB0aGUgREFU QQ0KPj4gKwkgKiBsZW5ndGgsIHNpbmNlIGl0J3MgaGFzIG5vdCBiZWVuIHNwZWNpZmllZCBpbiB0 aGUgTFVULg0KPj4gKwkgKi8NCj4+ICsJcXNwaV93cml0ZWwocSwgb3AtPmRhdGEubmJ5dGVzIHwg UVVBRFNQSV9JUENSX1NFUUlEKFNFUUlEX0xVVCksDQo+PiArCQkgICAgYmFzZSArIFFVQURTUElf SVBDUik7DQo+PiArDQo+PiArCS8qIFdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQuICovDQo+PiArCWlm ICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZxLT5jLCBtc2Vjc190b19qaWZmaWVzKDEw MDApKSkNCj4+ICsJCWVyciA9IC1FVElNRURPVVQ7DQo+PiArDQo+PiArCWlmICghZXJyICYmIG9w LT5kYXRhLm5ieXRlcyAmJiBvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKQ0KPj4gKwkJ ZnNsX3FzcGlfcmVhZF9yeGZpZm8ocSwgb3ApOw0KPj4gKw0KPj4gKwlyZXR1cm4gZXJyOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGZzbF9xc3BpX3JlYWRsX3BvbGxfdG91dChzdHJ1Y3Qg ZnNsX3FzcGkgKnEsIHZvaWQgX19pb21lbSAqYmFzZSwNCj4+ICsJCQkJICAgIHUzMiBtYXNrLCB1 MzIgZGVsYXlfdXMsIHUzMiB0aW1lb3V0X3VzKSB7DQo+PiArCXUzMiByZWc7DQo+PiArDQo+PiAr CWlmICghcS0+ZGV2dHlwZV9kYXRhLT5saXR0bGVfZW5kaWFuKQ0KPj4gKwkJbWFzayA9ICh1MzIp Y3B1X3RvX2JlMzIobWFzayk7DQo+PiArDQo+IA0KPiByZWcgaXMgYmVpbmcgdXNlZCBhcyBhbiB1 bi1pbml0aWFsaXplZCB2YXJpYWJsZSwgZGlkbid0IGl0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVk IHdpdGggc29tZSBwcm9wZXIgdmFsdWU/DQoNCk5vLCBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGlu aXRpYWxpemVkLiBUaGlzIGlzIG9ubHkgdG8gYXNzaWduIHNvbWUgDQptZW1vcnkgZm9yIHRoZSBy ZWFkeF9wb2xsX3RpbWVvdXQoKSBtYWNybzogWzFdLg0KDQpbMV0gDQpodHRwczovL2VsaXhpci5i b290bGluLmNvbS9saW51eC9sYXRlc3Qvc291cmNlL2luY2x1ZGUvbGludXgvaW9wb2xsLmgjTDUw DQoNCj4gDQo+PiArCXJldHVybiByZWFkbF9wb2xsX3RpbWVvdXQoYmFzZSwgcmVnLCAhKHJlZyAm IG1hc2spLCBkZWxheV91cywNCj4+ICsJCQkJICB0aW1lb3V0X3VzKTsNCj4+ICt9DQo+PiArDQo+ IA0KPiAtLQ0KPiBSZWdhcmRzDQo+IFlvZ2VzaCBHYXVyLg0KPiANCj4gWy4uLl0NCj4g