Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp4855224img; Tue, 26 Mar 2019 19:07:11 -0700 (PDT) X-Google-Smtp-Source: APXvYqyubzMfdZzUjeTflarQoGiruE/08wk4u8iHiIOGmMlct9F6VNkpvunFzYyzFavvgLuDqSzz X-Received: by 2002:a62:458a:: with SMTP id n10mr33619585pfi.136.1553652430980; Tue, 26 Mar 2019 19:07:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553652430; cv=none; d=google.com; s=arc-20160816; b=f4LuLO5R+euRCMJise4XOQ6SEPT/01o3gcW3FjqUAi0weSOGqMAVCsSRSpSZmMrFD8 eMTQgNyzPEOQn+93K2W4xFv0lPyMKXOOPc/ArccDiMJxa5YJ9SlpyFnxJtjuR0xGf1uH n3t5DWsAF58pyogMmCYA+kDXGR9cfZj6Y5vQw9FwOPryyu3QklFPmXhTsfOPJWPFi6qV veuihAkDAciH2Z+7v5yO4Ui0JNJz/iPBJgV6MGJgka8FPWeT9GPpM4s9nqoqMCyTeTLS BUyto9/P5o+WLbWS2+HGFWNtVBUs4TFscIifl/hBMVt3iNoV/pkulMkcQTUyZCBC3d7T g4hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=PxfhNW4CArJ/GyQQ+YVO+qsvDGFhA1eElcXPexEBSEQ=; b=WF9QOddZ6KF97+Fl7MJ51EepMlfKy/qNLFVKTSjI1NRmnEziD4p95OS3QPRK2s5mso tmocvGb3rjf0jeFtNNjmGwy1qOxvATbfXwt+Ji7ELDv9XCdg3cetuBNeo8hmhXo96ZNg ASKgB7AWHoH2Gj9YtRU+FaLT8whRa/9K0PYL5vYN6mobzGeD91zPgswUVupRxR/+OvuV r5BDIx/vMZViaGIfkTRAQAWxDlDgxqIDkh700LMDIp1RJ632WqMAN1uPYUZaReNftfcV OEzm+/HvsrCiwJmRXdZt034YCd8QsiQD2DnMfrP44isM00yqsqK0OHmMvEuGkGPHxnKi OSWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=napASauk; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 17si16314889pfw.6.2019.03.26.19.06.55; Tue, 26 Mar 2019 19:07:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=napASauk; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732099AbfC0CGS (ORCPT + 99 others); Tue, 26 Mar 2019 22:06:18 -0400 Received: from mail-eopbgr130057.outbound.protection.outlook.com ([40.107.13.57]:56060 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727452AbfC0CGS (ORCPT ); Tue, 26 Mar 2019 22:06:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PxfhNW4CArJ/GyQQ+YVO+qsvDGFhA1eElcXPexEBSEQ=; b=napASaukoG5K9vuMGNI5cwuO8H5lQ3P29lT+yYDcCsP0zBu9IgT3bnJh0s4DTupJDhj6iLLbalDQFoihqt66IatPueCPiRQ7Jqjas78rTGLQKr+C19U6u6XDMWd7szNOXfCSpFS8R5DsN2A9FOA4rxodKlTw5roIlc+3+52fP+U= Received: from AM6PR04MB5781.eurprd04.prod.outlook.com (20.179.3.19) by AM6PR04MB4805.eurprd04.prod.outlook.com (20.177.35.76) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Wed, 27 Mar 2019 02:04:01 +0000 Received: from AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::30cc:e034:1f7a:2cc7]) by AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::30cc:e034:1f7a:2cc7%2]) with mapi id 15.20.1750.014; Wed, 27 Mar 2019 02:04:01 +0000 From: "Z.q. Hou" To: Lorenzo Pieralisi CC: "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "l.subrahmanya@mobiveil.co.in" , "shawnguo@kernel.org" , Leo Li , "catalin.marinas@arm.com" , "will.deacon@arm.com" , Mingkai Hu , "M.h. Lian" , Xiaowei Bao Subject: RE: [PATCHv4 16/28] PCI: mobiveil: refactor Mobiveil PCIe Host Bridge IP driver Thread-Topic: [PATCHv4 16/28] PCI: mobiveil: refactor Mobiveil PCIe Host Bridge IP driver Thread-Index: AQHU1+1JKH7BRWLFLk+IghztSVt2gqYeRHCAgACM1qA= Date: Wed, 27 Mar 2019 02:04:00 +0000 Message-ID: References: <20190311093130.7209-1-Zhiqiang.Hou@nxp.com> <20190311093130.7209-17-Zhiqiang.Hou@nxp.com> <20190326173421.GB10666@e107981-ln.cambridge.arm.com> In-Reply-To: <20190326173421.GB10666@e107981-ln.cambridge.arm.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=zhiqiang.hou@nxp.com; x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7fd821d9-8b19-4ae8-8670-08d6b2587b18 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR04MB4805; x-ms-traffictypediagnostic: AM6PR04MB4805: x-microsoft-antispam-prvs: x-forefront-prvs: 0989A7979C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(376002)(396003)(366004)(39860400002)(136003)(13464003)(199004)(189003)(11346002)(68736007)(105586002)(186003)(446003)(71200400001)(486006)(71190400001)(2906002)(81156014)(33656002)(6436002)(97736004)(53946003)(8676002)(81166006)(106356001)(66066001)(256004)(53936002)(5024004)(52536014)(55016002)(9686003)(6246003)(476003)(14444005)(26005)(316002)(25786009)(6116002)(6506007)(76176011)(7736002)(7696005)(478600001)(4326008)(14454004)(30864003)(74316002)(54906003)(305945005)(3846002)(229853002)(86362001)(5660300002)(6916009)(102836004)(7416002)(8936002)(53546011)(99286004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4805;H:AM6PR04MB5781.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: GfcR9qeqbvjwBEWNS6geNlND3C+YNV6SBh0x3IgHUMQNNdmNWmhQOY6+O3aybr+jGHq4nrXA0aWRU5wPPyD/YB4PI8MdbvKU/bTYhIsAXadGBMWYU4naTW8TtQF4ntEP2ebmUIjx3DQ72y2NEQ6ljuGWv7MX9u4qUk3oAn6ofZzCdYhpID559WbgrUl1GN3BS9/0d7LD4gJFsAOBUV660wZNaoy4nXavM0MHAvE544/OjQy3gOwmG3IVULXy8W6B5jnEb8wuPW+0Thwu6CoFlv0fHULiwwMu2pqKMZIYo2Tvj1FGan+7wse1/KyXTTDKtdloNpQe9acWKyEPP8fhutKIwGGm2HjtOkzO99H24q8/sX0YJmMRS+ABqwIhsszp58ouLSeJ5PTyMt4pH4Clwslxjf4/zzLfKJsdOzH/ldw= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7fd821d9-8b19-4ae8-8670-08d6b2587b18 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Mar 2019 02:04:01.0113 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4805 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTG9yZW56bywNCg0KVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzIQ0KDQo+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExvcmVuem8gUGllcmFsaXNpIDxsb3JlbnpvLnBpZXJh bGlzaUBhcm0uY29tPg0KPiBTZW50OiAyMDE5xOoz1MIyN8jVIDE6MzQNCj4gVG86IFoucS4gSG91 IDx6aGlxaWFuZy5ob3VAbnhwLmNvbT4NCj4gQ2M6IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7 IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsNCj4gZGV2aWNldHJlZUB2Z2Vy Lmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+IGJoZWxnYWFzQGdv b2dsZS5jb207IHJvYmgrZHRAa2VybmVsLm9yZzsgbWFyay5ydXRsYW5kQGFybS5jb207DQo+IGwu c3VicmFobWFueWFAbW9iaXZlaWwuY28uaW47IHNoYXduZ3VvQGtlcm5lbC5vcmc7IExlbyBMaQ0K PiA8bGVveWFuZy5saUBueHAuY29tPjsgY2F0YWxpbi5tYXJpbmFzQGFybS5jb207IHdpbGwuZGVh Y29uQGFybS5jb207DQo+IE1pbmdrYWkgSHUgPG1pbmdrYWkuaHVAbnhwLmNvbT47IE0uaC4gTGlh biA8bWluZ2h1YW4ubGlhbkBueHAuY29tPjsNCj4gWGlhb3dlaSBCYW8gPHhpYW93ZWkuYmFvQG54 cC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0h2NCAxNi8yOF0gUENJOiBtb2JpdmVpbDogcmVm YWN0b3IgTW9iaXZlaWwgUENJZSBIb3N0DQo+IEJyaWRnZSBJUCBkcml2ZXINCj4gDQo+IE9uIE1v biwgTWFyIDExLCAyMDE5IGF0IDA5OjMyOjA0QU0gKzAwMDAsIFoucS4gSG91IHdyb3RlOg0KPiA+ IEZyb206IEhvdSBaaGlxaWFuZyA8WmhpcWlhbmcuSG91QG54cC5jb20+DQo+ID4NCj4gPiBBcyB0 aGUgTW9iaXZlaWwgUENJZSBjb250cm9sbGVyIHN1cHBvcnQgUkMmRVAgREFVTCBtb2RlLCBhbmQg dG8gbWFrZQ0KPiA+IHBsYXRmb3JtcyB3aGljaCBpbnRlZ3JhdGVkIHRoZSBNb2JpdmVpbCBQQ0ll IElQIG1vcmUgZWFzeSB0byBhZGQgdGhlaXINCj4gPiBkcml2ZXJzLCB0aGlzIHBhdGNoIG1vdmVk IHRoZSBNb2JpdmVpbCBkcml2ZXIgdG8gYSBuZXcgZGlyZWN0b3J5DQo+ID4gJ2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvbW9iaXZlaWwnIGFuZCByZWZhY3RvcmVkIGl0IGFjY29yZGluZyB0byB0aGUN Cj4gPiBhYnN0cmFjdGlvbiBvZiBSQyZFUCAoRVAgZHJpdmVyIHdpbGwgYmUgYWRkZWQgbGF0ZXIp Lg0KPiANCj4gSSBkbyBub3Qgd2FudCB0byBjcmVhdGUgYSBzdWJkaXJlY3RvcnkgZm9yIGV2ZXJ5 IGNvbnRyb2xsZXIgdGhhdCBjYW4gd29yayBpbg0KPiBSQyZFUCBzbyBkcm9wIHRoaXMgcGF0Y2gs IG1vcmUgc28gZ2l2ZW4gdGhhdCBpdCB3aWxsIGJlIHJlcXVpcmVkICJsYXRlciIsIHdlDQo+IHdp bGwgY3JlYXRlIGEgZGlyZWN0b3J5IHdoZW4gYW5kIGlmIHdlIGFjdHVhbGx5IGhhdmUgdG8uDQoN ClBsZWFzZSBkb24ndCBkcm9wIHRoaXMgcGF0Y2gsIFhpYW93ZWkgQmFvIGhhcyBzZW50IHYxIG9m IHRoZSBFUCBtb2RlIGRyaXZlciwgd2hpY2ggaXMgZGVwZW5kcyBvbiB0aGlzIHBhdGNoLg0KDQo+ IFRoYW5rcywNCj4gTG9yZW56bw0KPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBIb3UgWmhpcWlhbmcg PFpoaXFpYW5nLkhvdUBueHAuY29tPg0KPiA+IFJldmlld2VkLWJ5OiBNaW5naHVhbiBMaWFuIDxN aW5naHVhbi5MaWFuQG54cC5jb20+DQo+ID4gUmV2aWV3ZWQtYnk6IFN1YnJhaG1hbnlhIExpbmdh cHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KPiA+IC0tLQ0KPiA+IFY0Og0KPiA+ ICAtIG5vIGNoYW5nZQ0KPiA+DQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMiArLQ0KPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25m aWcgICAgICAgICAgICAgICAgfCAgMTEgKy0NCj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9N YWtlZmlsZSAgICAgICAgICAgICAgIHwgICAyICstDQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvbW9iaXZlaWwvS2NvbmZpZyAgICAgICB8ICAyNCArDQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRy b2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUgICAgICB8ICAgNCArDQo+ID4gIC4uLi9wY2llLW1vYml2 ZWlsLWhvc3QuY30gICAgICAgICAgICAgICAgICAgICB8IDUyOCArKystLS0tLS0tLS0tLS0tLS0N Cj4gPiAgLi4uL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMgIHwgIDU0 ICsrDQo+ID4gIC4uLi9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMgICB8 IDIyOCArKysrKysrKw0KPiA+ICAuLi4vcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2Jp dmVpbC5oICAgfCAxODcgKysrKysrKw0KPiA+ICA5IGZpbGVzIGNoYW5nZWQsIDU4NyBpbnNlcnRp b25zKCspLCA0NTMgZGVsZXRpb25zKC0pICBjcmVhdGUgbW9kZQ0KPiA+IDEwMDY0NCBkcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUNCj4gPiAgcmVuYW1lIGRy aXZlcnMvcGNpL2NvbnRyb2xsZXIve3BjaWUtbW9iaXZlaWwuYyA9Pg0KPiA+IG1vYml2ZWlsL3Bj aWUtbW9iaXZlaWwtaG9zdC5jfSAoNTUlKSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gZHJpdmVy cy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0KPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2 ZWlsLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9i aXZlaWwvcGNpZS1tb2JpdmVpbC5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMg Yi9NQUlOVEFJTkVSUyBpbmRleA0KPiA+IDFlNjQyNzlmMzM4YS4uMTAxM2U3NGIxNGYyIDEwMDY0 NA0KPiA+IC0tLSBhL01BSU5UQUlORVJTDQo+ID4gKysrIGIvTUFJTlRBSU5FUlMNCj4gPiBAQCAt MTE4NzcsNyArMTE4NzcsNyBAQCBNOglTdWJyYWhtYW55YSBMaW5nYXBwYQ0KPiA8bC5zdWJyYWht YW55YUBtb2JpdmVpbC5jby5pbj4NCj4gPiAgTDoJbGludXgtcGNpQHZnZXIua2VybmVsLm9yZw0K PiA+ICBTOglTdXBwb3J0ZWQNCj4gPiAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp bmdzL3BjaS9tb2JpdmVpbC1wY2llLnR4dA0KPiA+IC1GOglkcml2ZXJzL3BjaS9jb250cm9sbGVy L3BjaWUtbW9iaXZlaWwuYw0KPiA+ICtGOglkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWls L3BjaWUtbW9iaXZlaWwqDQo+ID4NCj4gPiAgUENJIERSSVZFUiBGT1IgTVZFQlUgKE1hcnZlbGwg QXJtYWRhIDM3MCBhbmQgQXJtYWRhIFhQIFNPQw0KPiBzdXBwb3J0KQ0KPiA+ICBNOglUaG9tYXMg UGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGJvb3RsaW4uY29tPg0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcNCj4gPiBiL2RyaXZlcnMvcGNpL2NvbnRy b2xsZXIvS2NvbmZpZyBpbmRleCA2NjcxOTQ2ZGJmNjYuLjBlOTgxZWQwMGE3NQ0KPiA+IDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KPiA+ICsrKyBiL2Ry aXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KPiA+IEBAIC0yNDEsMTYgKzI0MSw2IEBAIGNv bmZpZyBQQ0lFX01FRElBVEVLDQo+ID4gIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5h YmxlIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQo+ID4gIAkgIE1lZGlhVGVrIFNvQ3MuDQo+ ID4NCj4gPiAtY29uZmlnIFBDSUVfTU9CSVZFSUwNCj4gPiAtCWJvb2wgIk1vYml2ZWlsIEFYSSBQ Q0llIGNvbnRyb2xsZXIiDQo+ID4gLQlkZXBlbmRzIG9uIEFSQ0hfWllOUU1QIHx8IENPTVBJTEVf VEVTVA0KPiA+IC0JZGVwZW5kcyBvbiBPRg0KPiA+IC0JZGVwZW5kcyBvbiBQQ0lfTVNJX0lSUV9E T01BSU4NCj4gPiAtCWhlbHANCj4gPiAtCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFi bGUgc3VwcG9ydCBmb3IgdGhlIE1vYml2ZWlsIEFYSSBQQ0llDQo+ID4gLQkgIFNvZnQgSVAuIEl0 IGhhcyB1cCB0byA4IG91dGJvdW5kIGFuZCBpbmJvdW5kIHdpbmRvd3MNCj4gPiAtCSAgZm9yIGFk ZHJlc3MgdHJhbnNsYXRpb24gYW5kIGl0IGlzIGEgUENJZSBHZW40IElQLg0KPiA+IC0NCj4gPiAg Y29uZmlnIFBDSUVfVEFOR09fU01QODc1OQ0KPiA+ICAJYm9vbCAiVGFuZ28gU01QODc1OSBQQ0ll IGNvbnRyb2xsZXIgKERBTkdFUk9VUykiDQo+ID4gIAlkZXBlbmRzIG9uIEFSQ0hfVEFOR08gJiYg UENJX01TSSAmJiBPRiBAQCAtMjgxLDQgKzI3MSw1IEBADQo+IGNvbmZpZw0KPiA+IFZNRA0KPiA+ ICAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdm1kLg0KPiA+DQo+ID4gIHNvdXJjZSAiZHJpdmVy cy9wY2kvY29udHJvbGxlci9kd2MvS2NvbmZpZyINCj4gPiArc291cmNlICJkcml2ZXJzL3BjaS9j b250cm9sbGVyL21vYml2ZWlsL0tjb25maWciDQo+ID4gIGVuZG1lbnUNCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KPiA+IGIvZHJpdmVycy9wY2kvY29u dHJvbGxlci9NYWtlZmlsZSBpbmRleCBkNTZhNTA3NDk1YzUuLmI3OWE2MTUwNDFhMA0KPiA+IDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCj4gPiArKysg Yi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQo+ID4gQEAgLTI2LDExICsyNiwxMSBA QCBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUCkgKz0gcGNpZS1yb2NrY2hpcC5vDQo+ID4gIG9i ai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0VQKSArPSBwY2llLXJvY2tjaGlwLWVwLm8NCj4gPiAg b2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfSE9TVCkgKz0gcGNpZS1yb2NrY2hpcC1ob3N0Lm8N Cj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfTUVESUFURUspICs9IHBjaWUtbWVkaWF0ZWsubw0KPiA+ IC1vYmotJChDT05GSUdfUENJRV9NT0JJVkVJTCkgKz0gcGNpZS1tb2JpdmVpbC5vDQo+ID4gIG9i ai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBjaWUtdGFuZ28ubw0KPiA+ICBvYmot JChDT05GSUdfVk1EKSArPSB2bWQubw0KPiA+ICAjIHBjaWUtaGlzaS5vIHF1aXJrcyBhcmUgbmVl ZGVkIGV2ZW4gd2l0aG91dCBDT05GSUdfUENJRV9EVw0KPiA+ICBvYmoteQkJCQkrPSBkd2MvDQo+ ID4gK29iai15CQkJCSs9IG1vYml2ZWlsLw0KPiA+DQo+ID4NCj4gPiAgIyBUaGUgZm9sbG93aW5n IGRyaXZlcnMgYXJlIGZvciBkZXZpY2VzIHRoYXQgdXNlIHRoZSBnZW5lcmljIEFDUEkNCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9LY29uZmlnDQo+ID4g Yi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjQzNDNjMDdiZmVkDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvS2Nv bmZpZw0KPiA+IEBAIC0wLDAgKzEsMjQgQEANCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMA0KPiA+ICsNCj4gPiArbWVudSAiTW9iaXZlaWwgUENJZSBDb3JlIFN1cHBvcnQi DQo+ID4gKwlkZXBlbmRzIG9uIFBDSQ0KPiA+ICsNCj4gPiArY29uZmlnIFBDSUVfTU9CSVZFSUwN Cj4gPiArCWJvb2wNCj4gPiArDQo+ID4gK2NvbmZpZyBQQ0lFX01PQklWRUlMX0hPU1QNCj4gPiAr ICAgICAgICBib29sDQo+ID4gKwlkZXBlbmRzIG9uIFBDSV9NU0lfSVJRX0RPTUFJTg0KPiA+ICsg ICAgICAgIHNlbGVjdCBQQ0lFX01PQklWRUlMDQo+ID4gKw0KPiA+ICtjb25maWcgUENJRV9NT0JJ VkVJTF9QTEFUDQo+ID4gKwlib29sICJNb2JpdmVpbCBBWEkgUENJZSBjb250cm9sbGVyIg0KPiA+ ICsJZGVwZW5kcyBvbiBBUkNIX1pZTlFNUCB8fCBDT01QSUxFX1RFU1QNCj4gPiArCWRlcGVuZHMg b24gT0YNCj4gPiArCXNlbGVjdCBQQ0lFX01PQklWRUlMX0hPU1QNCj4gPiArCWhlbHANCj4gPiAr CSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIE1vYml2 ZWlsIEFYSSBQQ0llDQo+ID4gKwkgIFNvZnQgSVAuIEl0IGhhcyB1cCB0byA4IG91dGJvdW5kIGFu ZCBpbmJvdW5kIHdpbmRvd3MNCj4gPiArCSAgZm9yIGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kIGl0 IGlzIGEgUENJZSBHZW40IElQLg0KPiA+ICsNCj4gPiArZW5kbWVudQ0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlDQo+ID4gYi9kcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjlmYjZkMWM2NTA0ZA0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlDQo+ ID4gQEAgLTAsMCArMSw0IEBADQo+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjANCj4gPiArb2JqLSQoQ09ORklHX1BDSUVfTU9CSVZFSUwpICs9IHBjaWUtbW9iaXZlaWwubw0K PiA+ICtvYmotJChDT05GSUdfUENJRV9NT0JJVkVJTF9IT1NUKSArPSBwY2llLW1vYml2ZWlsLWhv c3Qubw0KPiA+ICtvYmotJChDT05GSUdfUENJRV9NT0JJVkVJTF9QTEFUKSArPSBwY2llLW1vYml2 ZWlsLXBsYXQubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUt bW9iaXZlaWwuYw0KPiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1v Yml2ZWlsLWhvc3QuYw0KPiA+IHNpbWlsYXJpdHkgaW5kZXggNTUlDQo+ID4gcmVuYW1lIGZyb20g ZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1vYml2ZWlsLmMNCj4gPiByZW5hbWUgdG8gZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYw0KPiA+IGlu ZGV4IDkyMTAxNjVmZThjMC4uZGM1MzI0ZDk0NDY2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29u dHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYw0KPiA+IEBAIC00LDkgKzQsOSBA QA0KPiA+ICAgKg0KPiA+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5jLg0KPiA+ ICAgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWls LmNvLmluPg0KPiA+ICsgKiBSZWZhY3RvcjogWmhpcWlhbmcgSG91IDxaaGlxaWFuZy5Ib3VAbnhw LmNvbT4NCj4gPiAgICovDQo+ID4NCj4gPiAtI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4g ICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+IEBAIC0yMywyNzUgKzIzLDIxIEBA DQo+ID4gICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiAgI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCj4gPg0KPiA+IC0jaW5jbHVkZSAiLi4vcGNpLmgiDQo+ID4gLQ0KPiA+ IC0vKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXQgcG9zaXRpb25zICovDQo+ID4gLQ0KPiA+IC0v Kg0KPiA+IC0gKiB0cmFuc2xhdGlvbiB0YWJsZXMgYXJlIGdyb3VwZWQgaW50byB3aW5kb3dzLCBl YWNoIHdpbmRvdyByZWdpc3RlcnMNCj4gPiBhcmUNCj4gPiAtICogZ3JvdXBlZCBpbnRvIGJsb2Nr cyBvZiA0IG9yIDE2IHJlZ2lzdGVycyBlYWNoDQo+ID4gLSAqLw0KPiA+IC0jZGVmaW5lIFBBQl9S RUdfQkxPQ0tfU0laRQkJMTYNCj4gPiAtI2RlZmluZSBQQUJfRVhUX1JFR19CTE9DS19TSVpFCQk0 DQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9SRUdfQUREUihvZmZzZXQsIHdpbikJXA0KPiA+IC0J KG9mZnNldCArICh3aW4gKiBQQUJfUkVHX0JMT0NLX1NJWkUpKQ0KPiA+IC0jZGVmaW5lIFBBQl9F WFRfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwNCj4gPiAtCShvZmZzZXQgKyAod2luICogUEFCX0VY VF9SRUdfQkxPQ0tfU0laRSkpDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIExUU1NNX1NUQVRVUwkJCTB4 MDQwNA0KPiA+IC0jZGVmaW5lICBMVFNTTV9TVEFUVVNfTDBfTUFTSwkJMHgzZg0KPiA+IC0jZGVm aW5lICBMVFNTTV9TVEFUVVNfTDAJCTB4MmQNCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFCX0NUUkwJ CQkweDA4MDgNCj4gPiAtI2RlZmluZSAgQU1CQV9QSU9fRU5BQkxFX1NISUZUCQkwDQo+ID4gLSNk ZWZpbmUgIFBFWF9QSU9fRU5BQkxFX1NISUZUCQkxDQo+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX1NI SUZUCQkJMTMNCj4gPiAtI2RlZmluZSAgUEFHRV9TRUxfTUFTSwkJCTB4M2YNCj4gPiAtI2RlZmlu ZSAgUEFHRV9MT19NQVNLCQkJMHgzZmYNCj4gPiAtI2RlZmluZSAgUEFHRV9TRUxfT0ZGU0VUX1NI SUZUCQkxMA0KPiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfQVhJX1BJT19DVFJMCQkweDA4NDANCj4g PiAtI2RlZmluZSAgQVBJT19FTl9NQVNLCQkJMHhmDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9Q RVhfUElPX0NUUkwJCTB4MDhjMA0KPiA+IC0jZGVmaW5lICBQSU9fRU5BQkxFX1NISUZUCQkwDQo+ ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIJCTB4MGIwYw0KPiA+IC0j ZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19TVEFUCQkweDBiMWMNCj4gPiAtI2RlZmluZSAgUEFC X0lOVFBfSU5UWF9NQVNLCQkweDAxZTANCj4gPiAtI2RlZmluZSAgUEFCX0lOVFBfTVNJX01BU0sJ CTB4OA0KPiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfQVhJX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVH X0FERFIoMHgwYmEwLCB3aW4pDQo+ID4gLSNkZWZpbmUgIFdJTl9FTkFCTEVfU0hJRlQJCTANCj4g PiAtI2RlZmluZSAgV0lOX1RZUEVfU0hJRlQJCQkxDQo+ID4gLSNkZWZpbmUgIFdJTl9UWVBFX01B U0sJCQkweDMNCj4gPiAtI2RlZmluZSAgV0lOX1NJWkVfU0hJRlQJCQkxMA0KPiA+IC0jZGVmaW5l ICBXSU5fU0laRV9NQVNLCQkJMHgzZmZmZmYNCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFCX0VYVF9B WElfQU1BUF9TSVpFKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJhZjAsDQo+IHdpbikNCj4gPiAt DQo+ID4gLSNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbikNCj4gCVBBQl9FWFRf UkVHX0FERFIoMHg4MGEwLCB3aW4pDQo+ID4gLSNkZWZpbmUgUEFCX0FYSV9BTUFQX0FYSV9XSU4o d2luKQlQQUJfUkVHX0FERFIoMHgwYmE0LCB3aW4pDQo+ID4gLSNkZWZpbmUgIEFYSV9XSU5ET1df QUxJR05fTUFTSwkJMw0KPiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfQVhJX0FNQVBfUEVYX1dJTl9M KHdpbikJUEFCX1JFR19BRERSKDB4MGJhOCwNCj4gd2luKQ0KPiA+IC0jZGVmaW5lICBQQUJfQlVT X1NISUZUCQkJMjQNCj4gPiAtI2RlZmluZSAgUEFCX0RFVklDRV9TSElGVAkJMTkNCj4gPiAtI2Rl ZmluZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0KPiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfQVhJ X0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4MGJhYywNCj4gd2luKQ0KPiA+IC0j ZGVmaW5lIFBBQl9JTlRQX0FYSV9QSU9fQ0xBU1MJCTB4NDc0DQo+ID4gLQ0KPiA+IC0jZGVmaW5l IFBBQl9QRVhfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDRiYTAsIHdpbikNCj4gPiAt I2RlZmluZSAgQU1BUF9DVFJMX0VOX1NISUZUCQkwDQo+ID4gLSNkZWZpbmUgIEFNQVBfQ1RSTF9U WVBFX1NISUZUCQkxDQo+ID4gLSNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX01BU0sJCTMNCj4gPiAt DQo+ID4gLSNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW4pCVBBQl9FWFRfUkVHX0FE RFIoMHhiZWYwLA0KPiB3aW4pDQo+ID4gLSNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9BWElfV0lO KHdpbikNCj4gCVBBQl9FWFRfUkVHX0FERFIoMHhiNGEwLCB3aW4pDQo+ID4gLSNkZWZpbmUgUEFC X1BFWF9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHg0YmE0LCB3aW4pDQo+ID4gLSNk ZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQUREUigweDRiYTgsDQo+ IHdpbikNCj4gPiAtI2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19B RERSKDB4NGJhYywNCj4gd2luKQ0KPiA+IC0NCj4gPiAtLyogc3RhcnRpbmcgb2Zmc2V0IG9mIElO VFggYml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8NCj4gPiAtI2RlZmluZSBQQUJfSU5UWF9TVEFS VAkJCTUNCj4gPiAtDQo+ID4gLS8qIHN1cHBvcnRlZCBudW1iZXIgb2YgTVNJIGludGVycnVwdHMg Ki8NCj4gPiAtI2RlZmluZSBQQ0lfTlVNX01TSQkJCTE2DQo+ID4gLQ0KPiA+IC0vKiBNU0kgcmVn aXN0ZXJzICovDQo+ID4gLSNkZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCQkweDA0DQo+ID4gLSNk ZWZpbmUgTVNJX0JBU0VfSElfT0ZGU0VUCQkweDA4DQo+ID4gLSNkZWZpbmUgTVNJX1NJWkVfT0ZG U0VUCQkJMHgwYw0KPiA+IC0jZGVmaW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkweDE0DQo+ID4gLSNk ZWZpbmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4MTgNCj4gPiAtI2RlZmluZSBNU0lfREFUQV9PRkZT RVQJCQkweDIwDQo+ID4gLSNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4MjQNCj4gPiAtI2Rl ZmluZSBNU0lfQUREUl9IX09GRlNFVAkJMHgyOA0KPiA+IC0NCj4gPiAtLyogb3V0Ym91bmQgYW5k IGluYm91bmQgd2luZG93IGRlZmluaXRpb25zICovDQo+ID4gLSNkZWZpbmUgV0lOX05VTV8wCQkJ MA0KPiA+IC0jZGVmaW5lIFdJTl9OVU1fMQkJCTENCj4gPiAtI2RlZmluZSBDRkdfV0lORE9XX1RZ UEUJCQkwDQo+ID4gLSNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkxDQo+ID4gLSNkZWZpbmUgTUVN X1dJTkRPV19UWVBFCQkJMg0KPiA+IC0jZGVmaW5lIElCX1dJTl9TSVpFCQkJKCh1NjQpMjU2ICog MTAyNCAqIDEwMjQgKiAxMDI0KQ0KPiA+IC0jZGVmaW5lIE1BWF9QSU9fV0lORE9XUwkJCTgNCj4g PiAtDQo+ID4gLS8qIFBhcmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRp bmUgKi8NCj4gPiAtI2RlZmluZSBMSU5LX1dBSVRfTUFYX1JFVFJJRVMJCTEwDQo+ID4gLSNkZWZp bmUgTElOS19XQUlUX01JTgkJCTkwMDAwDQo+ID4gLSNkZWZpbmUgTElOS19XQUlUX01BWAkJCTEw MDAwMA0KPiA+IC0NCj4gPiAtI2RlZmluZSBQQUdFRF9BRERSX0JORFJZCQkweGMwMA0KPiA+IC0j ZGVmaW5lIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKQlcDQo+ID4gLQkoKG9mZiAmIFBBR0VfTE9f TUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQ0KPiA+IC0jZGVmaW5lIE9GRlNFVF9UT19QQUdFX0lE WChvZmYpCQlcDQo+ID4gLQkoKG9mZiA+PiBQQUdFX1NFTF9PRkZTRVRfU0hJRlQpICYgUEFHRV9T RUxfTUFTSykNCj4gPiAtDQo+ID4gLXN0cnVjdCBtb2JpdmVpbF9tc2kgewkJCS8qIE1TSSBpbmZv cm1hdGlvbiAqLw0KPiA+IC0Jc3RydWN0IG11dGV4IGxvY2s7CQkvKiBwcm90ZWN0IGJpdG1hcCB2 YXJpYWJsZSAqLw0KPiA+IC0Jc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47DQo+ID4gLQlz dHJ1Y3QgaXJxX2RvbWFpbiAqZGV2X2RvbWFpbjsNCj4gPiAtCXBoeXNfYWRkcl90IG1zaV9wYWdl c19waHlzOw0KPiA+IC0JaW50IG51bV9vZl92ZWN0b3JzOw0KPiA+IC0JREVDTEFSRV9CSVRNQVAo bXNpX2lycV9pbl91c2UsIFBDSV9OVU1fTVNJKTsNCj4gPiAtfTsNCj4gPiAtDQo+ID4gLXN0cnVj dCBtb2JpdmVpbF9wY2llIHsNCj4gPiAtCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQo+ ID4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsNCj4gPiAtCXZvaWQgX19pb21lbSAqY29u ZmlnX2F4aV9zbGF2ZV9iYXNlOwkvKiBlbmRwb2ludCBjb25maWcgYmFzZSAqLw0KPiA+IC0Jdm9p ZCBfX2lvbWVtICpjc3JfYXhpX3NsYXZlX2Jhc2U7CS8qIHJvb3QgcG9ydCBjb25maWcgYmFzZSAq Lw0KPiA+IC0Jdm9pZCBfX2lvbWVtICphcGJfY3NyX2Jhc2U7CS8qIE1TSSByZWdpc3RlciBiYXNl ICovDQo+ID4gLQlwaHlzX2FkZHJfdCBwY2llX3JlZ19iYXNlOwkvKiBQaHlzaWNhbCBQQ0llIENv bnRyb2xsZXIgQmFzZSAqLw0KPiA+IC0Jc3RydWN0IGlycV9kb21haW4gKmludHhfZG9tYWluOw0K PiA+IC0JcmF3X3NwaW5sb2NrX3QgaW50eF9tYXNrX2xvY2s7DQo+ID4gLQlpbnQgaXJxOw0KPiA+ IC0JaW50IGFwaW9fd2luczsNCj4gPiAtCWludCBwcGlvX3dpbnM7DQo+ID4gLQlpbnQgb2Jfd2lu c19jb25maWd1cmVkOwkJLyogY29uZmlndXJlZCBvdXRib3VuZCB3aW5kb3dzICovDQo+ID4gLQlp bnQgaWJfd2luc19jb25maWd1cmVkOwkJLyogY29uZmlndXJlZCBpbmJvdW5kIHdpbmRvd3MgKi8N Cj4gPiAtCXN0cnVjdCByZXNvdXJjZSAqb2JfaW9fcmVzOw0KPiA+IC0JY2hhciByb290X2J1c19u cjsNCj4gPiAtCXN0cnVjdCBtb2JpdmVpbF9tc2kgbXNpOw0KPiA+IC19Ow0KPiA+IC0NCj4gPiAt LyoNCj4gPiAtICogbW9iaXZlaWxfcGNpZV9zZWxfcGFnZSAtIHJvdXRpbmUgdG8gYWNjZXNzIHBh Z2VkIHJlZ2lzdGVyDQo+ID4gLSAqDQo+ID4gLSAqIFJlZ2lzdGVycyB3aG9zZSBhZGRyZXNzIGdy ZWF0ZXIgdGhhbiBQQUdFRF9BRERSX0JORFJZICgweGMwMCkgYXJlDQo+ID4gcGFnZWQsDQo+ID4g LSAqIGZvciB0aGlzIHNjaGVtZSB0byB3b3JrIGV4dHJhY3RlZCBoaWdoZXIgNiBiaXRzIG9mIHRo ZSBvZmZzZXQgd2lsbA0KPiA+IGJlDQo+ID4gLSAqIHdyaXR0ZW4gdG8gcGdfc2VsIGZpZWxkIG9m IFBBQl9DVFJMIHJlZ2lzdGVyIGFuZCByZXN0IG9mIHRoZSBsb3dlcg0KPiA+IDEwDQo+ID4gLSAq IGJpdHMgZW5hYmxlZCB3aXRoIFBBR0VEX0FERFJfQk5EUlkgYXJlIHVzZWQgYXMgb2Zmc2V0IG9m IHRoZQ0KPiByZWdpc3Rlci4NCj4gPiAtICovDQo+ID4gLXN0YXRpYyB2b2lkIG1vYml2ZWlsX3Bj aWVfc2VsX3BhZ2Uoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHU4DQo+ID4gcGdfaWR4KSAt ew0KPiA+IC0JdTMyIHZhbDsNCj4gPiAtDQo+ID4gLQl2YWwgPSByZWFkbChwY2llLT5jc3JfYXhp X3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQo+ID4gLQl2YWwgJj0gfihQQUdFX1NFTF9NQVNLIDw8 IFBBR0VfU0VMX1NISUZUKTsNCj4gPiAtCXZhbCB8PSAocGdfaWR4ICYgUEFHRV9TRUxfTUFTSykg PDwgUEFHRV9TRUxfU0hJRlQ7DQo+ID4gLQ0KPiA+IC0Jd3JpdGVsKHZhbCwgcGNpZS0+Y3NyX2F4 aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9p ZCAqbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz Mg0KPiA+IG9mZikgLXsNCj4gPiAtCWlmIChvZmYgPCBQQUdFRF9BRERSX0JORFJZKSB7DQo+ID4g LQkJLyogRm9yIGRpcmVjdGx5IGFjY2Vzc2VkIHJlZ2lzdGVycywgY2xlYXIgdGhlIHBnX3NlbCBm aWVsZCAqLw0KPiA+IC0JCW1vYml2ZWlsX3BjaWVfc2VsX3BhZ2UocGNpZSwgMCk7DQo+ID4gLQkJ cmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIG9mZjsNCj4gPiAtCX0NCj4gPiAtDQo+ ID4gLQltb2JpdmVpbF9wY2llX3NlbF9wYWdlKHBjaWUsIE9GRlNFVF9UT19QQUdFX0lEWChvZmYp KTsNCj4gPiAtCXJldHVybiBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBPRkZTRVRfVE9fUEFH RV9BRERSKG9mZik7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyBpbnQgbW9iaXZlaWxfcGNp ZV9yZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHNpemUsIHUzMiAqdmFsKQ0KPiA+IC17DQo+ ID4gLQlpZiAoKHVpbnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkgew0KPiA+IC0JCSp2YWwgPSAw Ow0KPiA+IC0JCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQo+ID4gLQl9DQo+ ID4gLQ0KPiA+IC0Jc3dpdGNoIChzaXplKSB7DQo+ID4gLQljYXNlIDQ6DQo+ID4gLQkJKnZhbCA9 IHJlYWRsKGFkZHIpOw0KPiA+IC0JCWJyZWFrOw0KPiA+IC0JY2FzZSAyOg0KPiA+IC0JCSp2YWwg PSByZWFkdyhhZGRyKTsNCj4gPiAtCQlicmVhazsNCj4gPiAtCWNhc2UgMToNCj4gPiAtCQkqdmFs ID0gcmVhZGIoYWRkcik7DQo+ID4gLQkJYnJlYWs7DQo+ID4gLQlkZWZhdWx0Og0KPiA+IC0JCSp2 YWwgPSAwOw0KPiA+IC0JCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQo+ID4g LQl9DQo+ID4gLQ0KPiA+IC0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsNCj4gPiAtfQ0KPiA+ IC0NCj4gPiAtc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3dyaXRlKHZvaWQgX19pb21lbSAqYWRk ciwgaW50IHNpemUsIHUzMiB2YWwpDQo+ID4gLXsNCj4gPiAtCWlmICgodWludHB0cl90KWFkZHIg JiAoc2l6ZSAtIDEpKQ0KPiA+IC0JCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7 DQo+ID4gLQ0KPiA+IC0Jc3dpdGNoIChzaXplKSB7DQo+ID4gLQljYXNlIDQ6DQo+ID4gLQkJd3Jp dGVsKHZhbCwgYWRkcik7DQo+ID4gLQkJYnJlYWs7DQo+ID4gLQljYXNlIDI6DQo+ID4gLQkJd3Jp dGV3KHZhbCwgYWRkcik7DQo+ID4gLQkJYnJlYWs7DQo+ID4gLQljYXNlIDE6DQo+ID4gLQkJd3Jp dGViKHZhbCwgYWRkcik7DQo+ID4gLQkJYnJlYWs7DQo+ID4gLQlkZWZhdWx0Og0KPiA+IC0JCXJl dHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0J cmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHUz MiBjc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZiwgc2l6ZV90IHNp emUpDQo+ID4gLXsNCj4gPiAtCXZvaWQgKmFkZHI7DQo+ID4gLQl1MzIgdmFsOw0KPiA+IC0JaW50 IHJldDsNCj4gPiAtDQo+ID4gLQlhZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwg b2ZmKTsNCj4gPiAtDQo+ID4gLQlyZXQgPSBtb2JpdmVpbF9wY2llX3JlYWQoYWRkciwgc2l6ZSwg JnZhbCk7DQo+ID4gLQlpZiAocmV0KQ0KPiA+IC0JCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwg InJlYWQgQ1NSIGFkZHJlc3MgZmFpbGVkXG4iKTsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gdmFsOw0K PiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZCBjc3Jfd3JpdGUoc3RydWN0IG1vYml2ZWls X3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYsDQo+ID4gc2l6ZV90IHNpemUpIC17DQo+ID4g LQl2b2lkICphZGRyOw0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4gLQlhZGRyID0gbW9iaXZl aWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiAtDQo+ID4gLQlyZXQgPSBtb2JpdmVp bF9wY2llX3dyaXRlKGFkZHIsIHNpemUsIHZhbCk7DQo+ID4gLQlpZiAocmV0KQ0KPiA+IC0JCWRl dl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgIndyaXRlIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7DQo+ ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1MzIgY3NyX3JlYWRsKHN0cnVjdCBtb2JpdmVpbF9w Y2llICpwY2llLCB1MzIgb2ZmKSAtew0KPiA+IC0JcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwg MHg0KTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQgY3NyX3dyaXRlbChzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZikNCj4gPiAtew0KPiA+IC0JY3Ny X3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDQpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMg Ym9vbCBtb2JpdmVpbF9wY2llX2xpbmtfdXAoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpIC17 DQo+ID4gLQlyZXR1cm4gKGNzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFUVVMpICYNCj4gPiAtCQlM VFNTTV9TVEFUVVNfTDBfTUFTSykgPT0gTFRTU01fU1RBVFVTX0wwOw0KPiA+IC19DQo+ID4gKyNp bmNsdWRlICJwY2llLW1vYml2ZWlsLmgiDQo+ID4NCj4gPiAgc3RhdGljIGJvb2wgbW9iaXZlaWxf cGNpZV92YWxpZF9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQNCj4gPiBpbnQg ZGV2Zm4pICB7DQo+ID4gIAlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSA9IGJ1cy0+c3lzZGF0 YTsNCj4gPg0KPiA+ICAJLyogT25seSBvbmUgZGV2aWNlIGRvd24gb24gZWFjaCByb290IHBvcnQg Ki8NCj4gPiAtCWlmICgoYnVzLT5udW1iZXIgPT0gcGNpZS0+cm9vdF9idXNfbnIpICYmIChkZXZm biA+IDApKQ0KPiA+ICsJaWYgKChidXMtPm51bWJlciA9PSBwY2llLT5ycC5yb290X2J1c19ucikg JiYgKGRldmZuID4gMCkpDQo+ID4gIAkJcmV0dXJuIGZhbHNlOw0KPiA+DQo+ID4gIAkvKg0KPiA+ ICAJICogRG8gbm90IHJlYWQgbW9yZSB0aGFuIG9uZSBkZXZpY2Ugb24gdGhlIGJ1cyBkaXJlY3Rs eQ0KPiA+ICAJICogYXR0YWNoZWQgdG8gUkMNCj4gPiAgCSAqLw0KPiA+IC0JaWYgKChidXMtPnBy aW1hcnkgPT0gcGNpZS0+cm9vdF9idXNfbnIpICYmIChkZXZmbiA+IDApKQ0KPiA+ICsJaWYgKChi dXMtPnByaW1hcnkgPT0gcGNpZS0+cnAucm9vdF9idXNfbnIpICYmIChkZXZmbiA+IDApKQ0KPiA+ ICAJCXJldHVybiBmYWxzZTsNCj4gPg0KPiA+ICAJcmV0dXJuIHRydWU7DQo+ID4gQEAgLTMxMSw3 ICs1Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW9tZW0gKm1vYml2ZWlsX3BjaWVfbWFwX2J1cyhzdHJ1 Y3QNCj4gcGNpX2J1cyAqYnVzLA0KPiA+ICAJCXJldHVybiBOVUxMOw0KPiA+DQo+ID4gIAkvKiBS QyBjb25maWcgYWNjZXNzICovDQo+ID4gLQlpZiAoYnVzLT5udW1iZXIgPT0gcGNpZS0+cm9vdF9i dXNfbnIpDQo+ID4gKwlpZiAoYnVzLT5udW1iZXIgPT0gcGNpZS0+cnAucm9vdF9idXNfbnIpDQo+ ID4gIAkJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIHdoZXJlOw0KPiA+DQo+ID4g IAkvKg0KPiA+IEBAIC0zMjYsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBfX2lvbWVtICptb2JpdmVp bF9wY2llX21hcF9idXMoc3RydWN0DQo+ID4gcGNpX2J1cyAqYnVzLA0KPiA+DQo+ID4gIAljc3Jf d3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKFdJTl9OVU1fMCkpOw0K PiA+DQo+ID4gLQlyZXR1cm4gcGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9iYXNlICsgd2hlcmU7DQo+ ID4gKwlyZXR1cm4gcGNpZS0+cnAuY29uZmlnX2F4aV9zbGF2ZV9iYXNlICsgd2hlcmU7DQo+ID4g IH0NCj4gPg0KPiA+ICBzdGF0aWMgc3RydWN0IHBjaV9vcHMgbW9iaXZlaWxfcGNpZV9vcHMgPSB7 IEBAIC0zNDAsNyArODYsNyBAQCBzdGF0aWMNCj4gPiB2b2lkIG1vYml2ZWlsX3BjaWVfaXNyKHN0 cnVjdCBpcnFfZGVzYyAqZGVzYykNCj4gPiAgCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9k ZXNjX2dldF9jaGlwKGRlc2MpOw0KPiA+ICAJc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUgPSBp cnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOw0KPiA+ICAJc3RydWN0IGRldmljZSAqZGV2 ID0gJnBjaWUtPnBkZXYtPmRldjsNCj4gPiAtCXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZw Y2llLT5tc2k7DQo+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNp Ow0KPiA+ICAJdTMyIG1zaV9kYXRhLCBtc2lfYWRkcl9sbywgbXNpX2FkZHJfaGk7DQo+ID4gIAl1 MzIgaW50cl9zdGF0dXMsIG1zaV9zdGF0dXM7DQo+ID4gIAl1bnNpZ25lZCBsb25nIHNoaWZ0ZWRf c3RhdHVzOw0KPiA+IEBAIC0zNjUsNyArMTExLDcgQEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNp ZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKQ0KPiA+ICAJCXNoaWZ0ZWRfc3RhdHVzID4+PSBQ QUJfSU5UWF9TVEFSVDsNCj4gPiAgCQlkbyB7DQo+ID4gIAkJCWZvcl9lYWNoX3NldF9iaXQoYml0 LCAmc2hpZnRlZF9zdGF0dXMsIFBDSV9OVU1fSU5UWCkgew0KPiA+IC0JCQkJdmlycSA9IGlycV9m aW5kX21hcHBpbmcocGNpZS0+aW50eF9kb21haW4sDQo+ID4gKwkJCQl2aXJxID0gaXJxX2ZpbmRf bWFwcGluZyhwY2llLT5ycC5pbnR4X2RvbWFpbiwNCj4gPiAgCQkJCQkJCWJpdCArIDEpOw0KPiA+ ICAJCQkJaWYgKHZpcnEpDQo+ID4gIAkJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0KPiA+ IEBAIC00MjgsMTAgKzE3NCwxMCBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcGFyc2VfZHQo c3RydWN0DQo+IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQo+ID4gIAkvKiBtYXAgY29uZmlnIHJlc291 cmNlICovDQo+ID4gIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElP UkVTT1VSQ0VfTUVNLA0KPiA+ICAJCQkJCSAgICJjb25maWdfYXhpX3NsYXZlIik7DQo+ID4gLQlw Y2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdfcmVzb3VyY2Uo ZGV2LCByZXMpOw0KPiA+IC0JaWYgKElTX0VSUihwY2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2Up KQ0KPiA+IC0JCXJldHVybiBQVFJfRVJSKHBjaWUtPmNvbmZpZ19heGlfc2xhdmVfYmFzZSk7DQo+ ID4gLQlwY2llLT5vYl9pb19yZXMgPSByZXM7DQo+ID4gKwlwY2llLT5ycC5jb25maWdfYXhpX3Ns YXZlX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdfcmVzb3VyY2UoZGV2LA0KPiByZXMpOw0KPiA+ ICsJaWYgKElTX0VSUihwY2llLT5ycC5jb25maWdfYXhpX3NsYXZlX2Jhc2UpKQ0KPiA+ICsJCXJl dHVybiBQVFJfRVJSKHBjaWUtPnJwLmNvbmZpZ19heGlfc2xhdmVfYmFzZSk7DQo+ID4gKwlwY2ll LT5ycC5vYl9pb19yZXMgPSByZXM7DQo+ID4NCj4gPiAgCS8qIG1hcCBjc3IgcmVzb3VyY2UgKi8N Cj4gPiAgCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJD RV9NRU0sIEBADQo+IC00NDEsMTINCj4gPiArMTg3LDYgQEAgc3RhdGljIGludCBtb2JpdmVpbF9w Y2llX3BhcnNlX2R0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KPiA+ICAJCXJldHVybiBQ VFJfRVJSKHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSk7DQo+ID4gIAlwY2llLT5wY2llX3JlZ19i YXNlID0gcmVzLT5zdGFydDsNCj4gPg0KPiA+IC0JLyogbWFwIE1TSSBjb25maWcgcmVzb3VyY2Ug Ki8NCj4gPiAtCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNP VVJDRV9NRU0sDQo+ICJhcGJfY3NyIik7DQo+ID4gLQlwY2llLT5hcGJfY3NyX2Jhc2UgPSBkZXZt X3BjaV9yZW1hcF9jZmdfcmVzb3VyY2UoZGV2LCByZXMpOw0KPiA+IC0JaWYgKElTX0VSUihwY2ll LT5hcGJfY3NyX2Jhc2UpKQ0KPiA+IC0JCXJldHVybiBQVFJfRVJSKHBjaWUtPmFwYl9jc3JfYmFz ZSk7DQo+ID4gLQ0KPiA+ICAJLyogcmVhZCB0aGUgbnVtYmVyIG9mIHdpbmRvd3MgcmVxdWVzdGVk ICovDQo+ID4gIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImFwaW8td2lucyIsICZw Y2llLT5hcGlvX3dpbnMpKQ0KPiA+ICAJCXBjaWUtPmFwaW9fd2lucyA9IE1BWF9QSU9fV0lORE9X UzsNCj4gPiBAQCAtNDU0LDExOSArMTk0LDE1IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9w YXJzZV9kdChzdHJ1Y3QNCj4gbW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiAgCWlmIChvZl9wcm9w ZXJ0eV9yZWFkX3UzMihub2RlLCAicHBpby13aW5zIiwgJnBjaWUtPnBwaW9fd2lucykpDQo+ID4g IAkJcGNpZS0+cHBpb193aW5zID0gTUFYX1BJT19XSU5ET1dTOw0KPiA+DQo+ID4gLQlwY2llLT5p cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiA+IC0JaWYgKHBjaWUtPmlycSA8PSAw KSB7DQo+ID4gLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWFwIElSUTogJWRcbiIsIHBjaWUt PmlycSk7DQo+ID4gLQkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+ICAJcmV0 dXJuIDA7DQo+ID4gIH0NCj4gPg0KPiA+IC1zdGF0aWMgdm9pZCBwcm9ncmFtX2liX3dpbmRvd3Mo c3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLA0KPiA+IC0JCQkgICAgICAg dTY0IGNwdV9hZGRyLCB1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSkNCj4gPiAtew0K PiA+IC0JdTMyIHZhbHVlOw0KPiA+IC0JdTY0IHNpemU2NCA9IH4oc2l6ZSAtIDEpOw0KPiA+IC0N Cj4gPiAtCWlmICh3aW5fbnVtID49IHBjaWUtPnBwaW9fd2lucykgew0KPiA+IC0JCWRldl9lcnIo JnBjaWUtPnBkZXYtPmRldiwNCj4gPiAtCQkJIkVSUk9SOiBtYXggaW5ib3VuZCB3aW5kb3dzIHJl YWNoZWQgIVxuIik7DQo+ID4gLQkJcmV0dXJuOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCXZhbHVl ID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9QRVhfQU1BUF9DVFJMKHdpbl9udW0pKTsNCj4gPiAtCXZh bHVlICY9IH4oQU1BUF9DVFJMX1RZUEVfTUFTSyA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCB8DQo+ ID4gLQkJIFdJTl9TSVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KPiA+IC0JdmFsdWUgfD0g KHR5cGUgPDwgQU1BUF9DVFJMX1RZUEVfU0hJRlQpIHwgKDEgPDwNCj4gQU1BUF9DVFJMX0VOX1NI SUZUKSB8DQo+ID4gLQkJIChsb3dlcl8zMl9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLIDw8 IFdJTl9TSVpFX1NISUZUKTsNCj4gPiAtCWNzcl93cml0ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhf QU1BUF9DVFJMKHdpbl9udW0pKTsNCj4gPiAtDQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHVwcGVy XzMyX2JpdHMoc2l6ZTY0KSwNCj4gPiAtCQkgICBQQUJfRVhUX1BFWF9BTUFQX1NJWkVOKHdpbl9u dW0pKTsNCj4gPiAtDQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1X2Fk ZHIpLA0KPiA+IC0JCSAgIFBBQl9QRVhfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiAtCWNz cl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhjcHVfYWRkciksDQo+ID4gLQkJICAgUEFCX0VY VF9QRVhfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiAtDQo+ID4gLQljc3Jfd3JpdGVsKHBj aWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+IC0JCSAgIFBBQl9QRVhfQU1BUF9QRVhf V0lOX0wod2luX251bSkpOw0KPiA+IC0JY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBj aV9hZGRyKSwNCj4gPiAtCQkgICBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsNCj4g PiAtDQo+ID4gLQlwY2llLT5pYl93aW5zX2NvbmZpZ3VyZWQrKzsNCj4gPiAtfQ0KPiA+IC0NCj4g PiAtLyoNCj4gPiAtICogcm91dGluZSB0byBwcm9ncmFtIHRoZSBvdXRib3VuZCB3aW5kb3dzDQo+ ID4gLSAqLw0KPiA+IC1zdGF0aWMgdm9pZCBwcm9ncmFtX29iX3dpbmRvd3Moc3RydWN0IG1vYml2 ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLA0KPiA+IC0JCQkgICAgICAgdTY0IGNwdV9hZGRy LCB1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSkNCj4gPiAtew0KPiA+IC0NCj4gPiAt CXUzMiB2YWx1ZTsNCj4gPiAtCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCj4gPiAtDQo+ID4g LQlpZiAod2luX251bSA+PSBwY2llLT5hcGlvX3dpbnMpIHsNCj4gPiAtCQlkZXZfZXJyKCZwY2ll LT5wZGV2LT5kZXYsDQo+ID4gLQkJCSJFUlJPUjogbWF4IG91dGJvdW5kIHdpbmRvd3MgcmVhY2hl ZCAhXG4iKTsNCj4gPiAtCQlyZXR1cm47DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JLyoNCj4gPiAt CSAqIHByb2dyYW0gRW5hYmxlIEJpdCB0byAxLCBUeXBlIEJpdCB0byAoMDApIGJhc2UgMiwgQVhJ IFdpbmRvdyBTaXplIEJpdA0KPiA+IC0JICogdG8gNCBLQiBpbiBQQUJfQVhJX0FNQVBfQ1RSTCBy ZWdpc3Rlcg0KPiA+IC0JICovDQo+ID4gLQl2YWx1ZSA9IGNzcl9yZWFkbChwY2llLCBQQUJfQVhJ X0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4gLQl2YWx1ZSAmPSB+KFdJTl9UWVBFX01BU0sgPDwg V0lOX1RZUEVfU0hJRlQgfA0KPiA+IC0JCSBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZU KTsNCj4gPiAtCXZhbHVlIHw9IDEgPDwgV0lOX0VOQUJMRV9TSElGVCB8IHR5cGUgPDwgV0lOX1RZ UEVfU0hJRlQgfA0KPiA+IC0JCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFT SyA8PCBXSU5fU0laRV9TSElGVCk7DQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJf QVhJX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4gLQ0KPiA+IC0JY3NyX3dyaXRlbChwY2llLCB1 cHBlcl8zMl9iaXRzKHNpemU2NCksDQo+IFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW5fbnVtKSk7 DQo+ID4gLQ0KPiA+IC0JLyoNCj4gPiAtCSAqIHByb2dyYW0gQVhJIHdpbmRvdyBiYXNlIHdpdGgg YXBwcm9wcmlhdGUgdmFsdWUgaW4NCj4gPiAtCSAqIFBBQl9BWElfQU1BUF9BWElfV0lOMCByZWdp c3Rlcg0KPiA+IC0JICovDQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1 X2FkZHIpICYNCj4gKH5BWElfV0lORE9XX0FMSUdOX01BU0spLA0KPiA+IC0JCSAgIFBBQl9BWElf QU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiAtCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJf Yml0cyhjcHVfYWRkciksDQo+ID4gLQkJICAgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbl9u dW0pKTsNCj4gPiAtDQo+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2Fk ZHIpLA0KPiA+IC0JCSAgIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KPiA+IC0J Y3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCj4gPiAtCQkgICBQQUJf QVhJX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsNCj4gPiAtDQo+ID4gLQlwY2llLT5vYl93aW5z X2NvbmZpZ3VyZWQrKzsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIGludCBtb2JpdmVpbF9i cmluZ3VwX2xpbmsoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpIC17DQo+ID4gLQlpbnQgcmV0 cmllczsNCj4gPiAtDQo+ID4gLQkvKiBjaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8N Cj4gPiAtCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCBMSU5LX1dBSVRfTUFYX1JFVFJJRVM7 IHJldHJpZXMrKykgew0KPiA+IC0JCWlmIChtb2JpdmVpbF9wY2llX2xpbmtfdXAocGNpZSkpDQo+ ID4gLQkJCXJldHVybiAwOw0KPiA+IC0NCj4gPiAtCQl1c2xlZXBfcmFuZ2UoTElOS19XQUlUX01J TiwgTElOS19XQUlUX01BWCk7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JZGV2X2VycigmcGNpZS0+ cGRldi0+ZGV2LCAibGluayBuZXZlciBjYW1lIHVwXG4iKTsNCj4gPiAtDQo+ID4gLQlyZXR1cm4g LUVUSU1FRE9VVDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAgc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNp ZV9lbmFibGVfbXNpKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKSAgew0KPiA+ICAJcGh5c19h ZGRyX3QgbXNnX2FkZHIgPSBwY2llLT5wY2llX3JlZ19iYXNlOw0KPiA+IC0Jc3RydWN0IG1vYml2 ZWlsX21zaSAqbXNpID0gJnBjaWUtPm1zaTsNCj4gPiArCXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1z aSA9ICZwY2llLT5ycC5tc2k7DQo+ID4NCj4gPiAtCXBjaWUtPm1zaS5udW1fb2ZfdmVjdG9ycyA9 IFBDSV9OVU1fTVNJOw0KPiA+ICsJbXNpLT5udW1fb2ZfdmVjdG9ycyA9IFBDSV9OVU1fTVNJOw0K PiA+ICAJbXNpLT5tc2lfcGFnZXNfcGh5cyA9IChwaHlzX2FkZHJfdCltc2dfYWRkcjsNCj4gPg0K PiA+ICAJd3JpdGVsX3JlbGF4ZWQobG93ZXJfMzJfYml0cyhtc2dfYWRkciksDQo+ID4gQEAgLTYw NCw5ICsyNDAsNiBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX2hvc3RfaW5pdChzdHJ1Y3QgbW9iaXZl aWxfcGNpZQ0KPiAqcGNpZSkNCj4gPiAgCXBhYl9jdHJsIHw9ICgxIDw8IEFNQkFfUElPX0VOQUJM RV9TSElGVCkgfCAoMSA8PA0KPiBQRVhfUElPX0VOQUJMRV9TSElGVCk7DQo+ID4gIAljc3Jfd3Jp dGVsKHBjaWUsIHBhYl9jdHJsLCBQQUJfQ1RSTCk7DQo+ID4NCj4gPiAtCWNzcl93cml0ZWwocGNp ZSwgKFBBQl9JTlRQX0lOVFhfTUFTSyB8IFBBQl9JTlRQX01TSV9NQVNLKSwNCj4gPiAtCQkgICBQ QUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCj4gPiAtDQo+ID4gIAkvKg0KPiA+ICAJICogcHJvZ3Jh bSBQSU8gRW5hYmxlIEJpdCB0byAxIGFuZCBDb25maWcgV2luZG93IEVuYWJsZSBCaXQgdG8gMSBp bg0KPiA+ICAJICogUEFCX0FYSV9QSU9fQ1RSTCBSZWdpc3Rlcg0KPiA+IEBAIC02MjgsMjAgKzI2 MSwyNCBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX2hvc3RfaW5pdChzdHJ1Y3QgbW9iaXZlaWxfcGNp ZQ0KPiAqcGNpZSkNCj4gPiAgCSAqLw0KPiA+DQo+ID4gIAkvKiBjb25maWcgb3V0Ym91bmQgdHJh bnNsYXRpb24gd2luZG93ICovDQo+ID4gLQlwcm9ncmFtX29iX3dpbmRvd3MocGNpZSwgV0lOX05V TV8wLCBwY2llLT5vYl9pb19yZXMtPnN0YXJ0LCAwLA0KPiA+IC0JCQkgICBDRkdfV0lORE9XX1RZ UEUsIHJlc291cmNlX3NpemUocGNpZS0+b2JfaW9fcmVzKSk7DQo+ID4gKwlwcm9ncmFtX29iX3dp bmRvd3MocGNpZSwgV0lOX05VTV8wLCBwY2llLT5ycC5vYl9pb19yZXMtPnN0YXJ0LCAwLA0KPiA+ ICsJCQkgICBDRkdfV0lORE9XX1RZUEUsIHJlc291cmNlX3NpemUocGNpZS0+cnAub2JfaW9fcmVz KSk7DQo+ID4NCj4gPiAgCS8qIG1lbW9yeSBpbmJvdW5kIHRyYW5zbGF0aW9uIHdpbmRvdyAqLw0K PiA+ICAJcHJvZ3JhbV9pYl93aW5kb3dzKHBjaWUsIFdJTl9OVU1fMCwgMCwgMCwgTUVNX1dJTkRP V19UWVBFLA0KPiBJQl9XSU5fU0laRSk7DQo+ID4NCj4gPiAgCS8qIEdldCB0aGUgSS9PIGFuZCBt ZW1vcnkgcmFuZ2VzIGZyb20gRFQgKi8NCj4gPiAgCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50 cnkod2luLCAmcGNpZS0+cmVzb3VyY2VzKSB7DQo+ID4gLQkJaWYgKHJlc291cmNlX3R5cGUod2lu LT5yZXMpID09IElPUkVTT1VSQ0VfTUVNKQ0KPiA+ICsJCWlmIChyZXNvdXJjZV90eXBlKHdpbi0+ cmVzKSA9PSBJT1JFU09VUkNFX01FTSkgew0KPiA+ICAJCQl0eXBlID0gTUVNX1dJTkRPV19UWVBF Ow0KPiA+IC0JCWVsc2UgaWYgKHJlc291cmNlX3R5cGUod2luLT5yZXMpID09IElPUkVTT1VSQ0Vf SU8pDQo+ID4gKwkJfSBlbHNlIGlmIChyZXNvdXJjZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09V UkNFX0lPKSB7DQo+ID4gIAkJCXR5cGUgPSBJT19XSU5ET1dfVFlQRTsNCj4gPiAtCQllbHNlDQo+ ID4gKwkJfSBlbHNlIGlmIChyZXNvdXJjZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09VUkNFX0JV Uykgew0KPiA+ICsJCQlwY2llLT5ycC5yb290X2J1c19uciA9IHdpbi0+cmVzLT5zdGFydDsNCj4g PiArCQkJY29udGludWU7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiAgCQkJY29udGludWU7DQo+ID4g KwkJfQ0KPiA+DQo+ID4gIAkJLyogY29uZmlndXJlIG91dGJvdW5kIHRyYW5zbGF0aW9uIHdpbmRv dyAqLw0KPiA+ICAJCXByb2dyYW1fb2Jfd2luZG93cyhwY2llLCBwY2llLT5vYl93aW5zX2NvbmZp Z3VyZWQsDQo+ID4gQEAgLTY1Niw5ICsyOTMsNiBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX2hvc3Rf aW5pdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZQ0KPiAqcGNpZSkNCj4gPiAgCXZhbHVlIHw9IChQQ0lf Q0xBU1NfQlJJREdFX1BDSSA8PCAxNik7DQo+ID4gIAljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQ QUJfSU5UUF9BWElfUElPX0NMQVNTKTsNCj4gPg0KPiA+IC0JLyogc2V0dXAgTVNJIGhhcmR3YXJl IHJlZ2lzdGVycyAqLw0KPiA+IC0JbW9iaXZlaWxfcGNpZV9lbmFibGVfbXNpKHBjaWUpOw0KPiA+ IC0NCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4NCj4gPiBAQCAtNjcxLDExICszMDUsMTEg QEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfbWFza19pbnR4X2lycShzdHJ1Y3QNCj4gaXJxX2RhdGEg KmRhdGEpDQo+ID4NCj4gPiAgCXBjaWUgPSBpcnFfZGVzY19nZXRfY2hpcF9kYXRhKGRlc2MpOw0K PiA+ICAJbWFzayA9IDEgPDwgKChkYXRhLT5od2lycSArIFBBQl9JTlRYX1NUQVJUKSAtIDEpOw0K PiA+IC0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3Mp Ow0KPiA+ICsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2llLT5ycC5pbnR4X21hc2tfbG9jaywg ZmxhZ3MpOw0KPiA+ICAJc2hpZnRlZF92YWwgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0lOVFBfQU1C QV9NSVNDX0VOQik7DQo+ID4gIAlzaGlmdGVkX3ZhbCAmPSB+bWFzazsNCj4gPiAgCWNzcl93cml0 ZWwocGNpZSwgc2hpZnRlZF92YWwsIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KPiA+IC0JcmF3 X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7DQo+ ID4gKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+cnAuaW50eF9tYXNrX2xvY2ss IGZsYWdzKTsNCj4gPiAgfQ0KPiA+DQo+ID4gIHN0YXRpYyB2b2lkIG1vYml2ZWlsX3VubWFza19p bnR4X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQo+ID4gQEAgLTY4NywxMSArMzIxLDExIEBA IHN0YXRpYyB2b2lkIG1vYml2ZWlsX3VubWFza19pbnR4X2lycShzdHJ1Y3QNCj4gaXJxX2RhdGEg KmRhdGEpDQo+ID4NCj4gPiAgCXBjaWUgPSBpcnFfZGVzY19nZXRfY2hpcF9kYXRhKGRlc2MpOw0K PiA+ICAJbWFzayA9IDEgPDwgKChkYXRhLT5od2lycSArIFBBQl9JTlRYX1NUQVJUKSAtIDEpOw0K PiA+IC0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3Mp Ow0KPiA+ICsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2llLT5ycC5pbnR4X21hc2tfbG9jaywg ZmxhZ3MpOw0KPiA+ICAJc2hpZnRlZF92YWwgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0lOVFBfQU1C QV9NSVNDX0VOQik7DQo+ID4gIAlzaGlmdGVkX3ZhbCB8PSBtYXNrOw0KPiA+ICAJY3NyX3dyaXRl bChwY2llLCBzaGlmdGVkX3ZhbCwgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7DQo+ID4gLQlyYXdf c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ssIGZsYWdzKTsNCj4g PiArCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2llLT5ycC5pbnR4X21hc2tfbG9jaywg ZmxhZ3MpOw0KPiA+ICB9DQo+ID4NCj4gPiAgc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbnR4X2ly cV9jaGlwID0gew0KPiA+IEBAIC03NTksNyArMzkzLDcgQEAgc3RhdGljIGludCBtb2JpdmVpbF9p cnFfbXNpX2RvbWFpbl9hbGxvYyhzdHJ1Y3QNCj4gaXJxX2RvbWFpbiAqZG9tYWluLA0KPiA+ICAJ CQkJCSB1bnNpZ25lZCBpbnQgbnJfaXJxcywgdm9pZCAqYXJncykNCj4gPiAgew0KPiA+ICAJc3Ry dWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUgPSBkb21haW4tPmhvc3RfZGF0YTsNCj4gPiAtCXN0cnVj dCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQo+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxf bXNpICptc2kgPSAmcGNpZS0+cnAubXNpOw0KPiA+ICAJdW5zaWduZWQgbG9uZyBiaXQ7DQo+ID4N Cj4gPiAgCVdBUk5fT04obnJfaXJxcyAhPSAxKTsNCj4gPiBAQCAtNzg2LDcgKzQyMCw3IEBAIHN0 YXRpYyB2b2lkIG1vYml2ZWlsX2lycV9tc2lfZG9tYWluX2ZyZWUoc3RydWN0DQo+IGlycV9kb21h aW4gKmRvbWFpbiwNCj4gPiAgew0KPiA+ICAJc3RydWN0IGlycV9kYXRhICpkID0gaXJxX2RvbWFp bl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxKTsNCj4gPiAgCXN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7DQo+ID4gLQlzdHJ1Y3QgbW9i aXZlaWxfbXNpICptc2kgPSAmcGNpZS0+bXNpOw0KPiA+ICsJc3RydWN0IG1vYml2ZWlsX21zaSAq bXNpID0gJnBjaWUtPnJwLm1zaTsNCj4gPg0KPiA+ICAJbXV0ZXhfbG9jaygmbXNpLT5sb2NrKTsN Cj4gPg0KPiA+IEBAIC04MDcsOSArNDQxLDkgQEAgc3RhdGljIGludCBtb2JpdmVpbF9hbGxvY2F0 ZV9tc2lfZG9tYWlucyhzdHJ1Y3QNCj4gbW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiAgew0KPiA+ ICAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCj4gPiAgCXN0cnVjdCBm d25vZGVfaGFuZGxlICpmd25vZGUgPSBvZl9ub2RlX3RvX2Z3bm9kZShkZXYtPm9mX25vZGUpOw0K PiA+IC0Jc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPm1zaTsNCj4gPiArCXN0cnVj dCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5ycC5tc2k7DQo+ID4NCj4gPiAtCW11dGV4X2lu aXQoJnBjaWUtPm1zaS5sb2NrKTsNCj4gPiArCW11dGV4X2luaXQoJm1zaS0+bG9jayk7DQo+ID4g IAltc2ktPmRldl9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoTlVMTCwNCj4gbXNpLT5u dW1fb2ZfdmVjdG9ycywNCj4gPiAgCQkJCQkJJm1zaV9kb21haW5fb3BzLCBwY2llKTsNCj4gPiAg CWlmICghbXNpLT5kZXZfZG9tYWluKSB7DQo+ID4gQEAgLTgzNiwxNSArNDcwLDE1IEBAIHN0YXRp YyBpbnQgbW9iaXZlaWxfcGNpZV9pbml0X2lycV9kb21haW4oc3RydWN0DQo+IG1vYml2ZWlsX3Bj aWUgKnBjaWUpDQo+ID4gIAlpbnQgcmV0Ow0KPiA+DQo+ID4gIAkvKiBzZXR1cCBJTlR4ICovDQo+ ID4gLQlwY2llLT5pbnR4X2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihub2RlLCBQQ0lf TlVNX0lOVFgsDQo+ID4gLQkJCQkJCSAgJmludHhfZG9tYWluX29wcywgcGNpZSk7DQo+ID4gKwlw Y2llLT5ycC5pbnR4X2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihub2RlLCBQQ0lfTlVN X0lOVFgsDQo+ID4gKwkJCQkJCSAgICAgJmludHhfZG9tYWluX29wcywgcGNpZSk7DQo+ID4NCj4g PiAtCWlmICghcGNpZS0+aW50eF9kb21haW4pIHsNCj4gPiArCWlmICghcGNpZS0+cnAuaW50eF9k b21haW4pIHsNCj4gPiAgCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgYSBJTlR4IElSUSBk b21haW5cbiIpOw0KPiA+ICAJCXJldHVybiAtRU5PTUVNOw0KPiA+ICAJfQ0KPiA+DQo+ID4gLQly YXdfc3Bpbl9sb2NrX2luaXQoJnBjaWUtPmludHhfbWFza19sb2NrKTsNCj4gPiArCXJhd19zcGlu X2xvY2tfaW5pdCgmcGNpZS0+cnAuaW50eF9tYXNrX2xvY2spOw0KPiA+DQo+ID4gIAkvKiBzZXR1 cCBNU0kgKi8NCj4gPiAgCXJldCA9IG1vYml2ZWlsX2FsbG9jYXRlX21zaV9kb21haW5zKHBjaWUp Ow0KPiA+IEBAIC04NTQsMjQgKzQ4OCw1OCBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfaW5p dF9pcnFfZG9tYWluKHN0cnVjdA0KPiBtb2JpdmVpbF9wY2llICpwY2llKQ0KPiA+ICAJcmV0dXJu IDA7DQo+ID4gIH0NCj4gPg0KPiA+IC1zdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArc3RhdGljIGludCBtb2JpdmVpbF9wY2ll X2ludGVycnVwdF9pbml0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KPiA+ICsJc3RydWN0IHJl c291cmNlICpyZXM7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWlmIChwY2llLT5ycC5v cHMtPmludGVycnVwdF9pbml0KQ0KPiA+ICsJCXJldHVybiBwY2llLT5ycC5vcHMtPmludGVycnVw dF9pbml0KHBjaWUpOw0KPiA+ICsNCj4gPiArCS8qIG1hcCBNU0kgY29uZmlnIHJlc291cmNlICov DQo+ID4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBjaWUtPnBkZXYsIElP UkVTT1VSQ0VfTUVNLA0KPiA+ICsJCQkJCSAgICJhcGJfY3NyIik7DQo+ID4gKwlwY2llLT5hcGJf Y3NyX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdfcmVzb3VyY2UoZGV2LCByZXMpOw0KPiA+ICsJ aWYgKElTX0VSUihwY2llLT5hcGJfY3NyX2Jhc2UpKQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKHBj aWUtPmFwYl9jc3JfYmFzZSk7DQo+ID4gKw0KPiA+ICsJLyogc2V0dXAgTVNJIGhhcmR3YXJlIHJl Z2lzdGVycyAqLw0KPiA+ICsJbW9iaXZlaWxfcGNpZV9lbmFibGVfbXNpKHBjaWUpOw0KPiA+ICsN Cj4gPiArCXBjaWUtPnJwLmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGNpZS0+cGRldiwgMCk7DQo+ ID4gKwlpZiAocGNpZS0+cnAuaXJxIDw9IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBtYXAgSVJROiAlZFxuIiwgcGNpZS0+cnAuaXJxKTsNCj4gPiArCQlyZXR1cm4gLUVOT0RF VjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBpbml0aWFsaXplIHRoZSBJUlEgZG9tYWlucyAq Lw0KPiA+ICsJcmV0ID0gbW9iaXZlaWxfcGNpZV9pbml0X2lycV9kb21haW4ocGNpZSk7DQo+ID4g KwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgY3JlYXRpbmcgSVJRIERv bWFpblxuIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpcnFf c2V0X2NoYWluZWRfaGFuZGxlcl9hbmRfZGF0YShwY2llLT5ycC5pcnEsDQo+ID4gKwkJCQkJIG1v Yml2ZWlsX3BjaWVfaXNyLCBwY2llKTsNCj4gPiArDQo+ID4gKwkvKiBFbmFibGUgaW50ZXJydXB0 cyAqLw0KPiA+ICsJY3NyX3dyaXRlbChwY2llLCAoUEFCX0lOVFBfSU5UWF9NQVNLIHwgUEFCX0lO VFBfTVNJX01BU0spLA0KPiA+ICsJCSAgIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbW9iaXZlaWxfcGNpZV9o b3N0X3Byb2JlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KPiA+ICB7DQo+ID4gLQlzdHJ1 Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZTsNCj4gPiAgCXN0cnVjdCBwY2lfYnVzICpidXM7DQo+ID4g IAlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7DQo+ID4gIAlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpi cmlkZ2U7DQo+ID4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCj4gPiAgCXJlc291cmNlX3NpemVf dCBpb2Jhc2U7DQo+ID4gIAlpbnQgcmV0Ow0KPiA+DQo+ID4gLQkvKiBhbGxvY2F0ZSB0aGUgUENJ ZSBwb3J0ICovDQo+ID4gLQlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYs IHNpemVvZigqcGNpZSkpOw0KPiA+IC0JaWYgKCFicmlkZ2UpDQo+ID4gLQkJcmV0dXJuIC1FTk9N RU07DQo+ID4gLQ0KPiA+IC0JcGNpZSA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGJyaWRnZSk7DQo+ ID4gLQ0KPiA+IC0JcGNpZS0+cGRldiA9IHBkZXY7DQo+ID4gKwlJTklUX0xJU1RfSEVBRCgmcGNp ZS0+cmVzb3VyY2VzKTsNCj4gPg0KPiA+ICAJcmV0ID0gbW9iaXZlaWxfcGNpZV9wYXJzZV9kdChw Y2llKTsNCj4gPiAgCWlmIChyZXQpIHsNCj4gPiBAQCAtODc5LDcgKzU0NywxMCBAQCBzdGF0aWMg aW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0DQo+IHBsYXRmb3JtX2RldmljZSAqcGRldikN Cj4gPiAgCQlyZXR1cm4gcmV0Ow0KPiA+ICAJfQ0KPiA+DQo+ID4gLQlJTklUX0xJU1RfSEVBRCgm cGNpZS0+cmVzb3VyY2VzKTsNCj4gPiArCS8qIGFsbG9jYXRlIHRoZSBQQ0llIHBvcnQgKi8NCj4g PiArCWJyaWRnZSA9IGRldm1fcGNpX2FsbG9jX2hvc3RfYnJpZGdlKGRldiwgMCk7DQo+ID4gKwlp ZiAoIWJyaWRnZSkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPg0KPiA+ICAJLyogcGFyc2Ug dGhlIGhvc3QgYnJpZGdlIGJhc2UgYWRkcmVzc2VzIGZyb20gdGhlIGRldmljZSB0cmVlIGZpbGUg Ki8NCj4gPiAgCXJldCA9IGRldm1fb2ZfcGNpX2dldF9ob3N0X2JyaWRnZV9yZXNvdXJjZXMoZGV2 LCAwLCAweGZmLA0KPiA+IEBAIC04OTksMTUgKzU3MCwxMiBAQCBzdGF0aWMgaW50IG1vYml2ZWls X3BjaWVfcHJvYmUoc3RydWN0DQo+IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgCQlnb3Rv IGVycm9yOw0KPiA+ICAJfQ0KPiA+DQo+ID4gLQkvKiBpbml0aWFsaXplIHRoZSBJUlEgZG9tYWlu cyAqLw0KPiA+IC0JcmV0ID0gbW9iaXZlaWxfcGNpZV9pbml0X2lycV9kb21haW4ocGNpZSk7DQo+ ID4gKwlyZXQgPSBtb2JpdmVpbF9wY2llX2ludGVycnVwdF9pbml0KHBjaWUpOw0KPiA+ICAJaWYg KHJldCkgew0KPiA+IC0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIGNyZWF0aW5nIElSUSBEb21haW5c biIpOw0KPiA+ICsJCWRldl9lcnIoZGV2LCAiSW50ZXJydXB0IGluaXQgZmFpbGVkXG4iKTsNCj4g PiAgCQlnb3RvIGVycm9yOw0KPiA+ICAJfQ0KPiA+DQo+ID4gLQlpcnFfc2V0X2NoYWluZWRfaGFu ZGxlcl9hbmRfZGF0YShwY2llLT5pcnEsIG1vYml2ZWlsX3BjaWVfaXNyLCBwY2llKTsNCj4gPiAt DQo+ID4gIAlyZXQgPSBkZXZtX3JlcXVlc3RfcGNpX2J1c19yZXNvdXJjZXMoZGV2LCAmcGNpZS0+ cmVzb3VyY2VzKTsNCj4gPiAgCWlmIChyZXQpDQo+ID4gIAkJZ290byBlcnJvcjsNCj4gPiBAQCAt OTE2LDcgKzU4NCw3IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wcm9iZShzdHJ1Y3QNCj4g cGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJbGlzdF9zcGxpY2VfaW5pdCgmcGNpZS0+cmVz b3VyY2VzLCAmYnJpZGdlLT53aW5kb3dzKTsNCj4gPiAgCWJyaWRnZS0+ZGV2LnBhcmVudCA9IGRl djsNCj4gPiAgCWJyaWRnZS0+c3lzZGF0YSA9IHBjaWU7DQo+ID4gLQlicmlkZ2UtPmJ1c25yID0g cGNpZS0+cm9vdF9idXNfbnI7DQo+ID4gKwlicmlkZ2UtPmJ1c25yID0gcGNpZS0+cnAucm9vdF9i dXNfbnI7DQo+ID4gIAlicmlkZ2UtPm9wcyA9ICZtb2JpdmVpbF9wY2llX29wczsNCj4gPiAgCWJy aWRnZS0+bWFwX2lycSA9IG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaTsNCj4gPiAgCWJyaWRnZS0+ c3dpenpsZV9pcnEgPSBwY2lfY29tbW9uX3N3aXp6bGU7DQo+ID4gQEAgLTk0NCwyNSArNjEyLDMg QEAgc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdA0KPiBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpDQo+ID4gIAlwY2lfZnJlZV9yZXNvdXJjZV9saXN0KCZwY2llLT5yZXNvdXJjZXMp Ow0KPiA+ICAJcmV0dXJuIHJldDsNCj4gPiAgfQ0KPiA+IC0NCj4gPiAtc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgbW9iaXZlaWxfcGNpZV9vZl9tYXRjaFtdID0gew0KPiA+IC0Jey5j b21wYXRpYmxlID0gIm1idmwsZ3BleDQwLXBjaWUiLH0sDQo+ID4gLQl7fSwNCj4gPiAtfTsNCj4g PiAtDQo+ID4gLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gp Ow0KPiA+IC0NCj4gPiAtc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbW9iaXZlaWxfcGNp ZV9kcml2ZXIgPSB7DQo+ID4gLQkucHJvYmUgPSBtb2JpdmVpbF9wY2llX3Byb2JlLA0KPiA+IC0J LmRyaXZlciA9IHsNCj4gPiAtCQkubmFtZSA9ICJtb2JpdmVpbC1wY2llIiwNCj4gPiAtCQkub2Zf bWF0Y2hfdGFibGUgPSBtb2JpdmVpbF9wY2llX29mX21hdGNoLA0KPiA+IC0JCS5zdXBwcmVzc19i aW5kX2F0dHJzID0gdHJ1ZSwNCj4gPiAtCX0sDQo+ID4gLX07DQo+ID4gLQ0KPiA+IC1idWlsdGlu X3BsYXRmb3JtX2RyaXZlcihtb2JpdmVpbF9wY2llX2RyaXZlcik7DQo+ID4gLQ0KPiA+IC1NT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7DQo+ID4gLU1PRFVMRV9ERVNDUklQVElPTigiTW9iaXZlaWwg UENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIik7DQo+ID4gLU1PRFVMRV9BVVRIT1IoIlN1YnJh aG1hbnlhIExpbmdhcHBhDQo+IDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPiIpOw0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZl aWwtcGxhdC5jDQo+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2 ZWlsLXBsYXQuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi4yMTZjNjJmMzU1NjgNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0KPiA+IEBAIC0wLDAg KzEsNTQgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiAr LyoNCj4gPiArICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0ll IEhvc3QgY29udHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9i aXZlaWwgSW5jLg0KPiA+ICsgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJh aG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KPiA+ICsgKiBSZWZhY3RvcjogWmhpcWlhbmcgSG91IDxa aGlxaWFuZy5Ib3VAbnhwLmNvbT4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRl ICJwY2llLW1vYml2ZWlsLmgiDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0 IG1vYml2ZWlsX3BjaWUgKnBjaWU7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2Ow0KPiA+ICsNCj4gPiArCXBjaWUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBjaWUp LCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghcGNpZSkNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsN Cj4gPiArDQo+ID4gKwlwY2llLT5wZGV2ID0gcGRldjsNCj4gPiArDQo+ID4gKwlyZXR1cm4gbW9i aXZlaWxfcGNpZV9ob3N0X3Byb2JlKHBjaWUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtb2JpdmVpbF9wY2llX29mX21hdGNoW10gPSB7DQo+ ID4gKwl7LmNvbXBhdGlibGUgPSAibWJ2bCxncGV4NDAtcGNpZSIsfSwNCj4gPiArCXt9LA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbW9iaXZlaWxfcGNpZV9v Zl9tYXRjaCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtb2Jp dmVpbF9wY2llX2RyaXZlciA9IHsNCj4gPiArCS5wcm9iZSA9IG1vYml2ZWlsX3BjaWVfcHJvYmUs DQo+ID4gKwkuZHJpdmVyID0gew0KPiA+ICsJCS5uYW1lID0gIm1vYml2ZWlsLXBjaWUiLA0KPiA+ ICsJCS5vZl9tYXRjaF90YWJsZSA9IG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gsDQo+ID4gKwkJLnN1 cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLA0KPiA+ICsJfSwNCj4gPiArfTsNCj4gPiArDQo+ID4g K2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKG1vYml2ZWlsX3BjaWVfZHJpdmVyKTsNCj4gPiArDQo+ ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJN b2JpdmVpbCBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsNCj4gPiArTU9EVUxFX0FVVEhP UigiU3VicmFobWFueWEgTGluZ2FwcGENCj4gPGwuc3VicmFobWFueWFAbW9iaXZlaWwuY28uaW4+ Iik7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNp ZS1tb2JpdmVpbC5jDQo+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1v Yml2ZWlsLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uZWU2NzhhNjA4MjVkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5jDQo+ID4gQEAgLTAsMCArMSwyMjgg QEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4g PiArICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0llIEhvc3Qg Y29udHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwg SW5jLg0KPiA+ICsgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlh QG1vYml2ZWlsLmNvLmluPg0KPiA+ICsgKiBSZWZhY3RvcjogWmhpcWlhbmcgSG91IDxaaGlxaWFu Zy5Ib3VAbnhwLmNvbT4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJwY2llLW1vYml2 ZWlsLmgiDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBtb2JpdmVpbF9wY2llX3NlbF9wYWdlIC0g cm91dGluZSB0byBhY2Nlc3MgcGFnZWQgcmVnaXN0ZXINCj4gPiArICoNCj4gPiArICogUmVnaXN0 ZXJzIHdob3NlIGFkZHJlc3MgZ3JlYXRlciB0aGFuIFBBR0VEX0FERFJfQk5EUlkgKDB4YzAwKSBh cmUNCj4gcGFnZWQsDQo+ID4gKyAqIGZvciB0aGlzIHNjaGVtZSB0byB3b3JrIGV4dHJhY3RlZCBo aWdoZXIgNiBiaXRzIG9mIHRoZSBvZmZzZXQgd2lsbCBiZQ0KPiA+ICsgKiB3cml0dGVuIHRvIHBn X3NlbCBmaWVsZCBvZiBQQUJfQ1RSTCByZWdpc3RlciBhbmQgcmVzdCBvZiB0aGUgbG93ZXIgMTAN Cj4gPiArICogYml0cyBlbmFibGVkIHdpdGggUEFHRURfQUREUl9CTkRSWSBhcmUgdXNlZCBhcyBv ZmZzZXQgb2YgdGhlDQo+IHJlZ2lzdGVyLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgbW9i aXZlaWxfcGNpZV9zZWxfcGFnZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTggcGdfaWR4 KQ0KPiA+ICt7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiArCXZhbCA9IHJlYWRsKHBjaWUt PmNzcl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJMKTsNCj4gPiArCXZhbCAmPSB+KFBBR0VfU0VM X01BU0sgPDwgUEFHRV9TRUxfU0hJRlQpOw0KPiA+ICsJdmFsIHw9IChwZ19pZHggJiBQQUdFX1NF TF9NQVNLKSA8PCBQQUdFX1NFTF9TSElGVDsNCj4gPiArDQo+ID4gKwl3cml0ZWwodmFsLCBwY2ll LT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkICptb2JpdmVpbF9wY2llX2NvbXBfYWRkcihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAq cGNpZSwgdTMyIG9mZikNCj4gPiArew0KPiA+ICsJaWYgKG9mZiA8IFBBR0VEX0FERFJfQk5EUlkp IHsNCj4gPiArCQkvKiBGb3IgZGlyZWN0bHkgYWNjZXNzZWQgcmVnaXN0ZXJzLCBjbGVhciB0aGUg cGdfc2VsIGZpZWxkICovDQo+ID4gKwkJbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShwY2llLCAwKTsN Cj4gPiArCQlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgb2ZmOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCW1vYml2ZWlsX3BjaWVfc2VsX3BhZ2UocGNpZSwgT0ZGU0VUX1RPX1BBR0Vf SURYKG9mZikpOw0KPiA+ICsJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIE9GRlNF VF9UT19QQUdFX0FERFIob2ZmKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtb2Jp dmVpbF9wY2llX3JlYWQodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQo+ ID4gK3sNCj4gPiArCWlmICgodWludHB0cl90KWFkZHIgJiAoc2l6ZSAtIDEpKSB7DQo+ID4gKwkJ KnZhbCA9IDA7DQo+ID4gKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHNpemUpIHsNCj4gPiArCWNhc2UgNDoNCj4gPiAr CQkqdmFsID0gcmVhZGwoYWRkcik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIDI6DQo+ID4g KwkJKnZhbCA9IHJlYWR3KGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSAxOg0KPiA+ ICsJCSp2YWwgPSByZWFkYihhZGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ ID4gKwkJKnZhbCA9IDA7DQo+ID4gKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJF UjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfd3JpdGUodm9pZCBfX2lv bWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyIHZhbCkNCj4gPiArew0KPiA+ICsJaWYgKCh1aW50cHRy X3QpYWRkciAmIChzaXplIC0gMSkpDQo+ID4gKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVS X05VTUJFUjsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHNpemUpIHsNCj4gPiArCWNhc2UgNDoNCj4g PiArCQl3cml0ZWwodmFsLCBhZGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMjoNCj4g PiArCQl3cml0ZXcodmFsLCBhZGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMToNCj4g PiArCQl3cml0ZWIodmFsLCBhZGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ ID4gKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1 MzIgY3NyX3JlYWQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYsIHNpemVfdCBz aXplKQ0KPiA+ICt7DQo+ID4gKwl2b2lkICphZGRyOw0KPiA+ICsJdTMyIHZhbDsNCj4gPiArCWlu dCByZXQ7DQo+ID4gKw0KPiA+ICsJYWRkciA9IG1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHBjaWUs IG9mZik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbW9iaXZlaWxfcGNpZV9yZWFkKGFkZHIsIHNpemUs ICZ2YWwpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYs ICJyZWFkIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHZhbDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBjc3Jfd3JpdGUoc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYsIHNpemVfdCBzaXplKQ0KPiA+ICt7DQo+ID4gKwl2b2lk ICphZGRyOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlhZGRyID0gbW9iaXZlaWxfcGNp ZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBtb2JpdmVpbF9wY2ll X3dyaXRlKGFkZHIsIHNpemUsIHZhbCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIo JnBjaWUtPnBkZXYtPmRldiwgIndyaXRlIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7DQo+ID4gK30N Cj4gPiArDQo+ID4gK2Jvb2wgbW9iaXZlaWxfcGNpZV9saW5rX3VwKHN0cnVjdCBtb2JpdmVpbF9w Y2llICpwY2llKQ0KPiA+ICt7DQo+ID4gKwlpZiAocGNpZS0+b3BzLT5saW5rX3VwKQ0KPiA+ICsJ CXJldHVybiBwY2llLT5vcHMtPmxpbmtfdXAocGNpZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIChj c3JfcmVhZGwocGNpZSwgTFRTU01fU1RBVFVTKSAmDQo+ID4gKwkJTFRTU01fU1RBVFVTX0wwX01B U0spID09IExUU1NNX1NUQVRVU19MMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBwcm9ncmFt X2liX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLCB1NjQN Cj4gY3B1X2FkZHIsDQo+ID4gKwkJCXU2NCBwY2lfYWRkciwgdTMyIHR5cGUsIHU2NCBzaXplKQ0K PiA+ICt7DQo+ID4gKwl1MzIgdmFsdWU7DQo+ID4gKwl1NjQgc2l6ZTY0ID0gfihzaXplIC0gMSk7 DQo+ID4gKw0KPiA+ICsJaWYgKHdpbl9udW0gPj0gcGNpZS0+cHBpb193aW5zKSB7DQo+ID4gKwkJ ZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LA0KPiA+ICsJCQkiRVJST1I6IG1heCBpbmJvdW5kIHdp bmRvd3MgcmVhY2hlZCAhXG4iKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJdmFsdWUgPSBjc3JfcmVhZGwocGNpZSwgUEFCX1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0K PiA+ICsJdmFsdWUgJj0gfihBTUFQX0NUUkxfVFlQRV9NQVNLIDw8IEFNQVBfQ1RSTF9UWVBFX1NI SUZUIHwNCj4gPiArCQkgV0lOX1NJWkVfTUFTSyA8PCBXSU5fU0laRV9TSElGVCk7DQo+ID4gKwl2 YWx1ZSB8PSAodHlwZSA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCkgfCAoMSA8PA0KPiBBTUFQX0NU UkxfRU5fU0hJRlQpIHwNCj4gPiArCQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJTl9TSVpF X01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KPiA+ICsJY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwg UEFCX1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0KPiA+ICsNCj4gPiArCWNzcl93cml0ZWwocGNp ZSwgdXBwZXJfMzJfYml0cyhzaXplNjQpLA0KPiA+ICsJCSAgIFBBQl9FWFRfUEVYX0FNQVBfU0la RU4od2luX251bSkpOw0KPiA+ICsNCj4gPiArCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0 cyhjcHVfYWRkciksDQo+ID4gKwkJICAgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luX251bSkpOw0K PiA+ICsJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCj4gPiArCQkg ICBQQUJfRVhUX1BFWF9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KPiA+ICsNCj4gPiArCWNzcl93 cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhwY2lfYWRkciksDQo+ID4gKwkJICAgUEFCX1BFWF9B TUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQo+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMy X2JpdHMocGNpX2FkZHIpLA0KPiA+ICsJCSAgIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0god2luX251 bSkpOw0KPiA+ICsNCj4gPiArCXBjaWUtPmliX3dpbnNfY29uZmlndXJlZCsrOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiByb3V0aW5lIHRvIHByb2dyYW0gdGhlIG91dGJvdW5kIHdp bmRvd3MNCj4gPiArICovDQo+ID4gK3ZvaWQgcHJvZ3JhbV9vYl93aW5kb3dzKHN0cnVjdCBtb2Jp dmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwgdTY0DQo+IGNwdV9hZGRyLA0KPiA+ICsJCQl1 NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSkNCj4gPiArew0KPiA+ICsNCj4gPiArCXUz MiB2YWx1ZTsNCj4gPiArCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCj4gPiArDQo+ID4gKwlp ZiAod2luX251bSA+PSBwY2llLT5hcGlvX3dpbnMpIHsNCj4gPiArCQlkZXZfZXJyKCZwY2llLT5w ZGV2LT5kZXYsDQo+ID4gKwkJCSJFUlJPUjogbWF4IG91dGJvdW5kIHdpbmRvd3MgcmVhY2hlZCAh XG4iKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAq IHByb2dyYW0gRW5hYmxlIEJpdCB0byAxLCBUeXBlIEJpdCB0byAoMDApIGJhc2UgMiwgQVhJIFdp bmRvdyBTaXplIEJpdA0KPiA+ICsJICogdG8gNCBLQiBpbiBQQUJfQVhJX0FNQVBfQ1RSTCByZWdp c3Rlcg0KPiA+ICsJICovDQo+ID4gKwl2YWx1ZSA9IGNzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FN QVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4gKwl2YWx1ZSAmPSB+KFdJTl9UWVBFX01BU0sgPDwgV0lO X1RZUEVfU0hJRlQgfA0KPiA+ICsJCSBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsN Cj4gPiArCXZhbHVlIHw9IDEgPDwgV0lOX0VOQUJMRV9TSElGVCB8IHR5cGUgPDwgV0lOX1RZUEVf U0hJRlQgfA0KPiA+ICsJCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFTSyA8 PCBXSU5fU0laRV9TSElGVCk7DQo+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJ X0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4gKw0KPiA+ICsJY3NyX3dyaXRlbChwY2llLCB1cHBl cl8zMl9iaXRzKHNpemU2NCksDQo+IFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW5fbnVtKSk7DQo+ ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIHByb2dyYW0gQVhJIHdpbmRvdyBiYXNlIHdpdGggYXBw cm9wcmlhdGUgdmFsdWUgaW4NCj4gPiArCSAqIFBBQl9BWElfQU1BUF9BWElfV0lOMCByZWdpc3Rl cg0KPiA+ICsJICovDQo+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1X2Fk ZHIpICYNCj4gKH5BWElfV0lORE9XX0FMSUdOX01BU0spLA0KPiA+ICsJCSAgIFBBQl9BWElfQU1B UF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiArCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0 cyhjcHVfYWRkciksDQo+ID4gKwkJICAgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0p KTsNCj4gPiArDQo+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIp LA0KPiA+ICsJCSAgIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KPiA+ICsJY3Ny X3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCj4gPiArCQkgICBQQUJfQVhJ X0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsNCj4gPiArDQo+ID4gKwlwY2llLT5vYl93aW5zX2Nv bmZpZ3VyZWQrKzsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IG1vYml2ZWlsX2JyaW5ndXBfbGlu ayhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiArew0KPiA+ICsJaW50IHJldHJpZXM7 DQo+ID4gKw0KPiA+ICsJLyogY2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Igbm90ICovDQo+ID4g Kwlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgTElOS19XQUlUX01BWF9SRVRSSUVTOyByZXRy aWVzKyspIHsNCj4gPiArCQlpZiAobW9iaXZlaWxfcGNpZV9saW5rX3VwKHBjaWUpKQ0KPiA+ICsJ CQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwkJdXNsZWVwX3JhbmdlKExJTktfV0FJVF9NSU4sIExJ TktfV0FJVF9NQVgpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRldl9lcnIoJnBjaWUtPnBkZXYt PmRldiwgImxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIC1FVElN RURPVVQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9t b2JpdmVpbC9wY2llLW1vYml2ZWlsLmgNCj4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2 ZWlsL3BjaWUtbW9iaXZlaWwuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgg MDAwMDAwMDAwMDAwLi5lYjRjYjYxMjkxYTgNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIv ZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmgNCj4gPiBAQCAt MCwwICsxLDE4NyBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lw0KPiA+ICsvKg0KPiA+ICsgKiBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZm9yIE1vYml2 ZWlsIFBDSWUgSG9zdCBjb250cm9sbGVyDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAoYykg MjAxOCBNb2JpdmVpbCBJbmMuDQo+ID4gKyAqIEF1dGhvcjogU3VicmFobWFueWEgTGluZ2FwcGEg PGwuc3VicmFobWFueWFAbW9iaXZlaWwuY28uaW4+DQo+ID4gKyAqIFJlZmFjdG9yOiBaaGlxaWFu ZyBIb3UgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5k ZWYgX1BDSUVfTU9CSVZFSUxfSA0KPiA+ICsjZGVmaW5lIF9QQ0lFX01PQklWRUlMX0gNCj4gPiAr DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lycS5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+DQo+ID4gKyNpbmNsdWRlICIuLi8uLi9wY2ku aCINCj4gPiArDQo+ID4gKy8qIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJpdCBwb3NpdGlvbnMgKi8N Cj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHRyYW5zbGF0aW9uIHRhYmxlcyBhcmUgZ3JvdXBlZCBp bnRvIHdpbmRvd3MsIGVhY2ggd2luZG93IHJlZ2lzdGVycyBhcmUNCj4gPiArICogZ3JvdXBlZCBp bnRvIGJsb2NrcyBvZiA0IG9yIDE2IHJlZ2lzdGVycyBlYWNoDQo+ID4gKyAqLw0KPiA+ICsjZGVm aW5lIFBBQl9SRUdfQkxPQ0tfU0laRQkJMTYNCj4gPiArI2RlZmluZSBQQUJfRVhUX1JFR19CTE9D S19TSVpFCQk0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9SRUdfQUREUihvZmZzZXQsIHdpbikJ XA0KPiA+ICsJKG9mZnNldCArICh3aW4gKiBQQUJfUkVHX0JMT0NLX1NJWkUpKQ0KPiA+ICsjZGVm aW5lIFBBQl9FWFRfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwNCj4gPiArCShvZmZzZXQgKyAod2lu ICogUEFCX0VYVF9SRUdfQkxPQ0tfU0laRSkpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIExUU1NNX1NU QVRVUwkJCTB4MDQwNA0KPiA+ICsjZGVmaW5lICBMVFNTTV9TVEFUVVNfTDBfTUFTSwkJMHgzZg0K PiA+ICsjZGVmaW5lICBMVFNTTV9TVEFUVVNfTDAJCTB4MmQNCj4gPiArDQo+ID4gKyNkZWZpbmUg UEFCX0NUUkwJCQkweDA4MDgNCj4gPiArI2RlZmluZSAgQU1CQV9QSU9fRU5BQkxFX1NISUZUCQkw DQo+ID4gKyNkZWZpbmUgIFBFWF9QSU9fRU5BQkxFX1NISUZUCQkxDQo+ID4gKyNkZWZpbmUgIFBB R0VfU0VMX1NISUZUCQkJMTMNCj4gPiArI2RlZmluZSAgUEFHRV9TRUxfTUFTSwkJCTB4M2YNCj4g PiArI2RlZmluZSAgUEFHRV9MT19NQVNLCQkJMHgzZmYNCj4gPiArI2RlZmluZSAgUEFHRV9TRUxf T0ZGU0VUX1NISUZUCQkxMA0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUJfQVhJX1BJT19DVFJMCQkw eDA4NDANCj4gPiArI2RlZmluZSAgQVBJT19FTl9NQVNLCQkJMHhmDQo+ID4gKw0KPiA+ICsjZGVm aW5lIFBBQl9QRVhfUElPX0NUUkwJCTB4MDhjMA0KPiA+ICsjZGVmaW5lICBQSU9fRU5BQkxFX1NI SUZUCQkwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIJCTB4MGIw Yw0KPiA+ICsjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19TVEFUCQkweDBiMWMNCj4gPiArI2Rl ZmluZSAgUEFCX0lOVFBfSU5UWF9NQVNLCQkweDAxZTANCj4gPiArI2RlZmluZSAgUEFCX0lOVFBf TVNJX01BU0sJCTB4OA0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUJfQVhJX0FNQVBfQ1RSTCh3aW4p CQlQQUJfUkVHX0FERFIoMHgwYmEwLCB3aW4pDQo+ID4gKyNkZWZpbmUgIFdJTl9FTkFCTEVfU0hJ RlQJCTANCj4gPiArI2RlZmluZSAgV0lOX1RZUEVfU0hJRlQJCQkxDQo+ID4gKyNkZWZpbmUgIFdJ Tl9UWVBFX01BU0sJCQkweDMNCj4gPiArI2RlZmluZSAgV0lOX1NJWkVfU0hJRlQJCQkxMA0KPiA+ ICsjZGVmaW5lICBXSU5fU0laRV9NQVNLCQkJMHgzZmZmZmYNCj4gPiArDQo+ID4gKyNkZWZpbmUg UEFCX0VYVF9BWElfQU1BUF9TSVpFKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJhZjAsDQo+IHdp bikNCj4gPiArDQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbikNCj4g CVBBQl9FWFRfUkVHX0FERFIoMHg4MGEwLCB3aW4pDQo+ID4gKyNkZWZpbmUgUEFCX0FYSV9BTUFQ X0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHgwYmE0LCB3aW4pDQo+ID4gKyNkZWZpbmUgIEFY SV9XSU5ET1dfQUxJR05fTUFTSwkJMw0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUJfQVhJX0FNQVBf UEVYX1dJTl9MKHdpbikJUEFCX1JFR19BRERSKDB4MGJhOCwNCj4gd2luKQ0KPiA+ICsjZGVmaW5l ICBQQUJfQlVTX1NISUZUCQkJMjQNCj4gPiArI2RlZmluZSAgUEFCX0RFVklDRV9TSElGVAkJMTkN Cj4gPiArI2RlZmluZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQUJfQVhJX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4MGJhYywNCj4gd2lu KQ0KPiA+ICsjZGVmaW5lIFBBQl9JTlRQX0FYSV9QSU9fQ0xBU1MJCTB4NDc0DQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFBBQl9QRVhfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDRiYTAsDQo+ IHdpbikNCj4gPiArI2RlZmluZSAgQU1BUF9DVFJMX0VOX1NISUZUCQkwDQo+ID4gKyNkZWZpbmUg IEFNQVBfQ1RSTF9UWVBFX1NISUZUCQkxDQo+ID4gKyNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX01B U0sJCTMNCj4gPiArDQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW4pCVBB Ql9FWFRfUkVHX0FERFIoMHhiZWYwLA0KPiB3aW4pDQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9QRVhf QU1BUF9BWElfV0lOKHdpbikNCj4gCVBBQl9FWFRfUkVHX0FERFIoMHhiNGEwLCB3aW4pDQo+ID4g KyNkZWZpbmUgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHg0YmE0LCB3 aW4pDQo+ID4gKyNkZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQURE UigweDRiYTgsDQo+IHdpbikNCj4gPiArI2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdp bikJUEFCX1JFR19BRERSKDB4NGJhYywNCj4gd2luKQ0KPiA+ICsNCj4gPiArLyogc3RhcnRpbmcg b2Zmc2V0IG9mIElOVFggYml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8NCj4gPiArI2RlZmluZSBQ QUJfSU5UWF9TVEFSVAkJCTUNCj4gPiArDQo+ID4gKy8qIHN1cHBvcnRlZCBudW1iZXIgb2YgTVNJ IGludGVycnVwdHMgKi8NCj4gPiArI2RlZmluZSBQQ0lfTlVNX01TSQkJCTE2DQo+ID4gKw0KPiA+ ICsvKiBNU0kgcmVnaXN0ZXJzICovDQo+ID4gKyNkZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCQkw eDA0DQo+ID4gKyNkZWZpbmUgTVNJX0JBU0VfSElfT0ZGU0VUCQkweDA4DQo+ID4gKyNkZWZpbmUg TVNJX1NJWkVfT0ZGU0VUCQkJMHgwYw0KPiA+ICsjZGVmaW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkw eDE0DQo+ID4gKyNkZWZpbmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4MTgNCj4gPiArI2RlZmluZSBN U0lfREFUQV9PRkZTRVQJCQkweDIwDQo+ID4gKyNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4 MjQNCj4gPiArI2RlZmluZSBNU0lfQUREUl9IX09GRlNFVAkJMHgyOA0KPiA+ICsNCj4gPiArLyog b3V0Ym91bmQgYW5kIGluYm91bmQgd2luZG93IGRlZmluaXRpb25zICovDQo+ID4gKyNkZWZpbmUg V0lOX05VTV8wCQkJMA0KPiA+ICsjZGVmaW5lIFdJTl9OVU1fMQkJCTENCj4gPiArI2RlZmluZSBD RkdfV0lORE9XX1RZUEUJCQkwDQo+ID4gKyNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkxDQo+ID4g KyNkZWZpbmUgTUVNX1dJTkRPV19UWVBFCQkJMg0KPiA+ICsjZGVmaW5lIElCX1dJTl9TSVpFCQkJ KCh1NjQpMjU2ICogMTAyNCAqIDEwMjQgKiAxMDI0KQ0KPiA+ICsjZGVmaW5lIE1BWF9QSU9fV0lO RE9XUwkJCTgNCj4gPiArDQo+ID4gKy8qIFBhcmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBs aW5rIHVwIHJvdXRpbmUgKi8NCj4gPiArI2RlZmluZSBMSU5LX1dBSVRfTUFYX1JFVFJJRVMJCTEw DQo+ID4gKyNkZWZpbmUgTElOS19XQUlUX01JTgkJCTkwMDAwDQo+ID4gKyNkZWZpbmUgTElOS19X QUlUX01BWAkJCTEwMDAwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUdFRF9BRERSX0JORFJZCQkw eGMwMA0KPiA+ICsjZGVmaW5lIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKQlcDQo+ID4gKwkoKG9m ZiAmIFBBR0VfTE9fTUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQ0KPiA+ICsjZGVmaW5lIE9GRlNF VF9UT19QQUdFX0lEWChvZmYpCQlcDQo+ID4gKwkoKG9mZiA+PiBQQUdFX1NFTF9PRkZTRVRfU0hJ RlQpICYgUEFHRV9TRUxfTUFTSykNCj4gPiArDQo+ID4gK3N0cnVjdCBtb2JpdmVpbF9wY2llOw0K PiA+ICsNCj4gPiArc3RydWN0IG1vYml2ZWlsX21zaSB7CQkJLyogTVNJIGluZm9ybWF0aW9uICov DQo+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIHByb3RlY3QgYml0bWFwIHZhcmlhYmxlICov DQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX2RvbWFpbjsNCj4gPiArCXN0cnVjdCBpcnFf ZG9tYWluICpkZXZfZG9tYWluOw0KPiA+ICsJcGh5c19hZGRyX3QgbXNpX3BhZ2VzX3BoeXM7DQo+ ID4gKwlpbnQgbnVtX29mX3ZlY3RvcnM7DQo+ID4gKwlERUNMQVJFX0JJVE1BUChtc2lfaXJxX2lu X3VzZSwgUENJX05VTV9NU0kpOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IG1vYml2ZWls X3JwX29wcyB7DQo+ID4gKwlpbnQgKCppbnRlcnJ1cHRfaW5pdCkoc3RydWN0IG1vYml2ZWlsX3Bj aWUgKnBjaWUpOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHJvb3RfcG9ydCB7DQo+ID4g Kwl1OCByb290X2J1c19ucjsNCj4gPiArCXZvaWQgX19pb21lbSAqY29uZmlnX2F4aV9zbGF2ZV9i YXNlOwkvKiBlbmRwb2ludCBjb25maWcgYmFzZSAqLw0KPiA+ICsJc3RydWN0IHJlc291cmNlICpv Yl9pb19yZXM7DQo+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfcnBfb3BzICpvcHM7DQo+ID4gKwlpbnQg aXJxOw0KPiA+ICsJcmF3X3NwaW5sb2NrX3QgaW50eF9tYXNrX2xvY2s7DQo+ID4gKwlzdHJ1Y3Qg aXJxX2RvbWFpbiAqaW50eF9kb21haW47DQo+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpIG1zaTsN Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBtb2JpdmVpbF9wYWJfb3BzIHsNCj4gPiArCWlu dCAoKmxpbmtfdXApKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKTsNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0cnVjdCBtb2JpdmVpbF9wY2llIHsNCj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXY7DQo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsNCj4gPiArCXZvaWQg X19pb21lbSAqY3NyX2F4aV9zbGF2ZV9iYXNlOwkvKiBQQUIgcmVnaXN0ZXJzIGJhc2UgKi8NCj4g PiArCXBoeXNfYWRkcl90IHBjaWVfcmVnX2Jhc2U7CS8qIFBoeXNpY2FsIFBDSWUgQ29udHJvbGxl ciBCYXNlICovDQo+ID4gKwl2b2lkIF9faW9tZW0gKmFwYl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lz dGVyIGJhc2UgKi8NCj4gPiArCXUzMiBhcGlvX3dpbnM7DQo+ID4gKwl1MzIgcHBpb193aW5zOw0K PiA+ICsJdTMyIG9iX3dpbnNfY29uZmlndXJlZDsJCS8qIGNvbmZpZ3VyZWQgb3V0Ym91bmQgd2lu ZG93cyAqLw0KPiA+ICsJdTMyIGliX3dpbnNfY29uZmlndXJlZDsJCS8qIGNvbmZpZ3VyZWQgaW5i b3VuZCB3aW5kb3dzICovDQo+ID4gKwljb25zdCBzdHJ1Y3QgbW9iaXZlaWxfcGFiX29wcyAqb3Bz Ow0KPiA+ICsJc3RydWN0IHJvb3RfcG9ydCBycDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK2ludCBt b2JpdmVpbF9wY2llX2hvc3RfcHJvYmUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpOw0KPiA+ ICtib29sIG1vYml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSk7 DQo+ID4gK2ludCBtb2JpdmVpbF9icmluZ3VwX2xpbmsoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUpOw0KPiA+ICt2b2lkIHByb2dyYW1fb2Jfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAq cGNpZSwgaW50IHdpbl9udW0sIHU2NA0KPiBjcHVfYWRkciwNCj4gPiArCQkJdTY0IHBjaV9hZGRy LCB1MzIgdHlwZSwgdTY0IHNpemUpOw0KPiA+ICt2b2lkIHByb2dyYW1faWJfd2luZG93cyhzdHJ1 Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NA0KPiBjcHVfYWRkciwNCj4g PiArCQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpOw0KPiA+ICt1MzIgY3NyX3Jl YWQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYsIHNpemVfdCBzaXplKTsNCj4g PiArdm9pZCBjc3Jfd3JpdGUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUz MiBvZmYsIHNpemVfdCBzaXplKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIGNzcl9y ZWFkbChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZikNCj4gPiArew0KPiA+ICsJ cmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGlubGluZSB2b2lkIGNzcl93cml0ZWwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz MiB2YWwsIHUzMiBvZmYpDQo+ID4gK3sNCj4gPiArCWNzcl93cml0ZShwY2llLCB2YWwsIG9mZiwg MHg0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIF9QQ0lFX01PQklWRUlMX0ggKi8N Cj4gPiAtLQ0KPiA+IDIuMTcuMQ0KPiA+DQoNClRoYW5rcywNClpoaXFpYW5nDQo=