Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 40C8FC433EF for ; Sat, 27 Nov 2021 15:01:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236157AbhK0PDa (ORCPT ); Sat, 27 Nov 2021 10:03:30 -0500 Received: from mail-vi1eur05on2067.outbound.protection.outlook.com ([40.107.21.67]:29664 "EHLO EUR05-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S229557AbhK0PB0 (ORCPT ); Sat, 27 Nov 2021 10:01:26 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MSFQiFZPcO5l2zq8J9iODquBzKCVKJrT9+giDLzkOICQlNUuHyllqy1dVtbdSwgmnIvqBgN6e1UQd4nQXdqh30jU8OmGhpJphYHTU4pe+PWalozOGGsa3P+ahaLCjRrtE4pFUMvHmjddfZoGLZwdUK9G0cMrvz8/Mnt2KBtXmX5zI2RaCVWkp7gOlIP28xIuFw4aGKNRJxJa3vLeipCOPpExkyCXiLgi58Aqzy9/kApf1RU5A1K5I+9UlPPLfDMkCUAQ9jGvaptJ5qeuSpyEAMJLwoJiXonymWe64ZX8uMEbExABi3Drl3T1JTQSvFG5r4Km39hisMHzyaMRFDVApA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ylCRIfY13IVTgGKyvWet3/qL4eMZgp9OBg8l8kBA45M=; b=EA4brCmPBANZsvYq0khNDEaemdBRYye6arQd+iOv5x/wmfb2vcVAJ8emaMSjsz0dk/owqfVpKmAdFtG1yHM++WrCt7vSduV7D3MHzqQsXElr5NRerr8EZQrsBgCskIraDsAh+YmOxQArhv1eXab0wpP/moxy8o6b5NId8BK2auGlbNg5AesFrDN5JxP1ENbo0uN9z6JH3v3KtoD/If+rdQPy5VVMElDln8TB4PkftAwaaodMYcMNiiKrFI0M17Tx3dSBJo0nsPS4P+l+yl3GKoW5pGwt0mBLBw3WkLGL1kjo3/mxYlXwKawbZQcZDuzdToZ6HAw4YKhyTEGPrEhdzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ylCRIfY13IVTgGKyvWet3/qL4eMZgp9OBg8l8kBA45M=; b=ctgYVcyYXEEypQO5q3cmPX0xL5biGevbMFiWNmeO/S4/F79iAo7+heVg/9md4YStzNoF2bHHRqA56mc+mc5XzfGMxwgOEklBxtYw5zKc3DEvuNwkWf0qTUtml20AGi8P+DjxLnrNTUnKwBXvNlw7ASB3LZBrU89rssdG9ivP+Vs= Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VE1PR04MB6640.eurprd04.prod.outlook.com (2603:10a6:803:122::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23; Sat, 27 Nov 2021 14:58:07 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::e4ed:b009:ae4:83c5]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::e4ed:b009:ae4:83c5%7]) with mapi id 15.20.4734.023; Sat, 27 Nov 2021 14:58:06 +0000 From: Vladimir Oltean To: =?utf-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= CC: "David S. Miller" , Jakub Kicinski , Rob Herring , Claudiu Manoil , Alexandre Belloni , "UNGLinuxDriver@microchip.com" , Andrew Lunn , "netdev@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Thomas Petazzoni , Denis Kirjanov , Julian Wiedmann Subject: Re: [PATCH net-next v3 4/4] net: ocelot: add FDMA support Thread-Topic: [PATCH net-next v3 4/4] net: ocelot: add FDMA support Thread-Index: AQHX4ur0oKFzimZda0eyFp+wSrHWQKwXeIeA Date: Sat, 27 Nov 2021 14:58:06 +0000 Message-ID: <20211127145805.75qh2vim7c5m5hjd@skbuf> References: <20211126172739.329098-1-clement.leger@bootlin.com> <20211126172739.329098-5-clement.leger@bootlin.com> In-Reply-To: <20211126172739.329098-5-clement.leger@bootlin.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b940fccf-a6bd-455f-0e9a-08d9b1b65222 x-ms-traffictypediagnostic: VE1PR04MB6640: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:901; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dWUiGpvKECeeMyFKKc8/Kvj1jPsAwrtmBUc9ayWj4hveOPsrZv+UquSasjxbLlJZZs1n2txKSxfRx4mXV+6QpzRpYAsgds983Z6+t9votCbSgmZ2k9PpSx/Xt5XFf8acetZStJ0yICFhdVF3ejiAatBuZS2KT/FuIHWVxAk035/zZvsIj7oOU7I3JrVnqx5lhAxEGBc581HCg1Wxk/OlhdYOpMu1UCBm/QL287BUNG41YJi/mIKc3ORlgwI/EE98aTfdQNNDJpnLgF0Ub5vybX7euDhdPQowRssqPaJrQtG/1rD2aGJc+xYNOw6wqsczHez26k0+a5UD8uc8yBG648faj66z8DzDaxFIIJly6o22UGcCoLC6iEWuIemhtMboZo3ht6+ir8rZ3BFekqBj4HMoKJHn+3WMQ7FA0P9cnnZozJCq4qE3MrCXcaoCeov8GPRkHoW7F+c+jzUxMAobaop3HnZKBWAsQRP9G6BFPIm15LNGEqO3DYkTUnSF/Q+EwzOEzRqBJSUYls2IsVm7BGpcFHv9SO67kfCa5UtSu8zNmCdhFkrBBPWOcSQcVGPSF0YH688cS7yYHMaVStIwn6p1SxVbZJ/1F3q3ZH8AD1cXQxL73yothpetNb54WaQu6JAw6AIoPugU3oI/PZmIyQ1iWQSY0EY2slyQqwCoU0dscIWq3PWzZbJl5V+mt6cOCumFX0H4Hp+VAJkXdv8+7A== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(7916004)(4636009)(366004)(66946007)(66446008)(64756008)(186003)(9686003)(7416002)(6512007)(66556008)(71200400001)(5660300002)(508600001)(66476007)(54906003)(38100700002)(316002)(2906002)(83380400001)(91956017)(6916009)(122000001)(66574015)(8676002)(30864003)(76116006)(4326008)(33716001)(1076003)(44832011)(6486002)(26005)(86362001)(8936002)(38070700005)(6506007)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NG1JZVVTRk9BMTBLSmNLZE40dnVFYXJRblg1UnRuWXN1TWZ4THVwTHdGTXBE?= =?utf-8?B?WkkvMHNKd3hNb1puU0VKeFhFVStVOGdZNlgraXN2UUx2dDFjUk9rQ3dwa1Fx?= =?utf-8?B?aXYzTHNKV0N1Z1ZrUGpmMExxOFlwT2lyb1RtZ0NyY0Q2Lzg4Rkx5c21ObU1M?= =?utf-8?B?MlU1MG9rSXVsanM3QXIvU0xYM09MdnpSUnFLM0xjcW1jVTVaUGI0S0V0L0Nj?= =?utf-8?B?c3BqNlkwQUVaNnlsZzVWbEZCOU9xS3NNUng4VDFyNGJwY21BVGVTYnFPYmZ5?= =?utf-8?B?bExYUkFSZDJUbUl0bGowbExqdStmMmlPbFBhdXRONmc0emRpSEQrNnlTcUQ3?= =?utf-8?B?SFVlWXNtOTJVdEJ5STVsbk1CK01yUmN4aDNsY0VvWWh0R1AyNGt5aktPS1FW?= =?utf-8?B?MUNkeWhOcFp6U1BOd0dOL3V3aUpuZVl1OEwwcUY4NVZQMVAyRnNvVTdvQmYw?= =?utf-8?B?R2xxcmFYem03ZVlGUVB0TmtHL0lJNnBWazJvdWZEMGF2S2pJanZxN0t5QVFy?= =?utf-8?B?UGxqVllJaVN5Uk5rbWVTRXdtRVRYTHZDR3h6bWdkem1mS28yYWJpbHhEMEhM?= =?utf-8?B?eDFCUEpkTWxhZjJ0a04zK01GSWcwS0MyK0YwUkpSa3FaOWgwUG1JM2Y4eXIr?= =?utf-8?B?b0ZFRXRpMDVvNGx4RUpoeU9RYjR4bXpIV1FUa1hjSmRvbFVtdFh6RFRtalpr?= =?utf-8?B?L1VXR25SSmkvNEphMURKZXhwdW9EZmlEN3ltNDkreC9EQStKL2p6MWJvWlRu?= =?utf-8?B?R1o1MkFBSkxsSVdsamIzL3p1N0U4MVMzaU1xSUZjOVJhNkhyUWZyUHpxWE9P?= =?utf-8?B?K3d1VW5YUWxJdWRsUjRtemd3M2lGMStxNmdXSUVDNFZUcjE3ODY0R1BGUG5G?= =?utf-8?B?a0loK0Njc3JydGwxamIxblFkWHNENkdnNjRCcStKWUMwWms0V24zalpuSXp2?= =?utf-8?B?VE9CRFdqQWVWTnFKUkZXOXlwVVdZeDBGUHJRaGJ1RXVKZ21xWlZiS0dIc1ha?= =?utf-8?B?SDdFZFJLNWVZc21XbXR0MEZMS3Naci9FcUM1a0ZLTjlrZWxLQ3EyUzRUNUNF?= =?utf-8?B?dkdRK0kvazNrZ3pKc0IrY3dOaWNoeGRsN05PN2tkOWEwU0dNN1czSVlIUGJn?= =?utf-8?B?YXpxMFQ1SVJsa1ZHYW1ROFJGTlBockQ5U1NPdlRLR24wK1VHaytRNEJVek5n?= =?utf-8?B?R1Bqb20yY1ZEaGFXc08rZkN3S001Qk94NEtCOW51N05IVTdhSnhHMWpSK3hK?= =?utf-8?B?ZW1yTkQ2RWNYY0FCcGZUZCtLb2wyRThLN3N0cG5GQkhYbVo3ZGdLL01rQ0c0?= =?utf-8?B?dFlqMHlTWERMdWtJUHJueEd5M2Y1YkRWcWtENlpTSVJESkFnbWdjNkVycm1z?= =?utf-8?B?RGNaMzhHNm9NNU5ra2hpbHFTV3JRaWVlR1dPR0dUYitna0ZiU01FR1l2eUx1?= =?utf-8?B?V2RSVHBta2o5YVBDSnlVZTRjWnRDN0IxZTN6ODRTU3AvQXk4NXRBUTFDZ1FJ?= =?utf-8?B?RmpIYmNpL3NoUVhsY2lNSCtBckw5a200UldCYkhET3Y4cEd5ZnNaSDZoRDE0?= =?utf-8?B?My9PbldlcU5LaGhhaWlQVzFsY1BVNnkwYjRqd2tKRjQ2Vm5LVmlCYytrT1Fa?= =?utf-8?B?QnUvYlFjSUcwTlNqcXhabDN5RVlFZ0VRbTNnTjhYWWZ5UmFoTjFFZVVWeTQ3?= =?utf-8?B?cWNmSnhmVVp3ZWVTQlZjS1VrQmdyYkhXWlhsMURJQ2s3OGFvdUZuYW5xcHlp?= =?utf-8?B?Ykx4Mnd3TXhRUG9Sb0pkSG93VkxLeEd1WWU3TmdZVnp1QUdZWjJHN25YM0FF?= =?utf-8?B?bm5NY3NkQXNETHgwcmJGTDh2RFU5aFJjTlNyY200T3VqMVZFdy9iWmpJQTk1?= =?utf-8?B?UXRoYWR1SkwyMHZMMU5xUlJML3MxTWtJZ0lTSlZyby93Y1l4bU5HaGtJQ2Fv?= =?utf-8?B?ZGYwdWZiaE9SSHZyRTNGVk5zSjE4eE5kS3BSYVEvdC9qWThaaUxKQnhLbDF4?= =?utf-8?B?Z3NoUkpZY0pzdlhaSmJVY0Uybjk0V1JSTHZJL3RoR2tXZEhHYlBLcVVRUXRL?= =?utf-8?B?WjdZcU84end4WVk3MlZxNndQMHVMZ0V0bzVhSjdvaW80Z1BjY0N2NDFLbEpB?= =?utf-8?B?UWRvQTdTQ0Y5dnA0YXJDM2V4Q2hYblBXODNrK2RMZVlwL21SSEpJbTNONElO?= =?utf-8?Q?3ZvkPvRqsd4syKi0kf3Y2Gg=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <044C1020BD49CB40A7CAF77D634752EF@eurprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b940fccf-a6bd-455f-0e9a-08d9b1b65222 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2021 14:58:06.8234 (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-CrossTenant-userprincipalname: OHe2HW5uK60QxT1e3dMz3vT6i3uOdArqpzQL4InZKzspf75rCdrtiRzXwmZj53HPloMKC2qawlq2To5m6HxNFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6640 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gRnJpLCBOb3YgMjYsIDIwMjEgYXQgMDY6Mjc6MzlQTSArMDEwMCwgQ2zDqW1lbnQgTMOpZ2Vy IHdyb3RlOg0KPiBFdGhlcm5ldCBmcmFtZXMgY2FuIGJlIGV4dHJhY3RlZCBvciBpbmplY3RlZCBh dXRvbm9tb3VzbHkgdG8gb3IgZnJvbQ0KPiB0aGUgZGV2aWNl4oCZcyBERFIzL0REUjNMIG1lbW9y eSBhbmQvb3IgUENJZSBtZW1vcnkgc3BhY2UuIExpbmtlZCBsaXN0DQo+IGRhdGEgc3RydWN0dXJl cyBpbiBtZW1vcnkgYXJlIHVzZWQgZm9yIGluamVjdGluZyBvciBleHRyYWN0aW5nIEV0aGVybmV0 DQo+IGZyYW1lcy4gVGhlIEZETUEgZ2VuZXJhdGVzIGludGVycnVwdHMgd2hlbiBmcmFtZSBleHRy YWN0aW9uIG9yDQo+IGluamVjdGlvbiBpcyBkb25lIGFuZCB3aGVuIHRoZSBsaW5rZWQgbGlzdHMg bmVlZCB1cGRhdGluZy4NCj4gDQo+IFRoZSBGRE1BIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUg ZXRoZXJuZXQgcG9ydHMgb2YgdGhlIHN3aXRjaCBhbmQNCj4gdXNlcyBhIGxpbmtlZCBsaXN0IG9m IGRlc2NyaXB0b3JzIChEQ0IpIHRvIGluamVjdCBhbmQgZXh0cmFjdCBwYWNrZXRzLg0KPiBCZWZv cmUgYWRkaW5nIGRlc2NyaXB0b3JzLCB0aGUgRkRNQSBjaGFubmVscyBtdXN0IGJlIHN0b3BwZWQu IEl0IHdvdWxkDQo+IGJlIGluZWZmaWNpZW50IHRvIGRvIHRoYXQgZWFjaCB0aW1lIGEgZGVzY3Jp cHRvciB3b3VsZCBiZSBhZGRlZCBzbyB0aGUNCj4gY2hhbm5lbHMgYXJlIHJlc3RhcnRlZCBvbmx5 IG9uY2UgdGhleSBzdG9wcGVkLg0KPiANCj4gQm90aCBjaGFubmVscyB1c2VzIHJpbmctbGlrZSBz dHJ1Y3R1cmUgdG8gZmVlZCB0aGUgRENCcyB0byB0aGUgRkRNQS4NCj4gaGVhZCBhbmQgdGFpbCBh cmUgbmV2ZXIgdG91Y2hlZCBieSBoYXJkd2FyZSBhbmQgYXJlIGNvbXBsZXRlbHkgaGFuZGxlZA0K PiBieSB0aGUgZHJpdmVyLg0KPiANCj4gQ28tZGV2ZWxvcGVkLWJ5OiBBbGV4YW5kcmUgQmVsbG9u aSA8YWxleGFuZHJlLmJlbGxvbmlAYm9vdGxpbi5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEFsZXhh bmRyZSBCZWxsb25pIDxhbGV4YW5kcmUuYmVsbG9uaUBib290bGluLmNvbT4NCj4gU2lnbmVkLW9m Zi1ieTogQ2zDqW1lbnQgTMOpZ2VyIDxjbGVtZW50LmxlZ2VyQGJvb3RsaW4uY29tPg0KPiAtLS0N Cg0KSSBuZWVkIHRvIGFzaywgd2FzIHRoZXJlIGFueSBjaGFuZ2UgaW4gcGVyZm9ybWFuY2UsIGlu IG9uZSBkaXJlY3Rpb24gb3INCnRoZSBvdGhlciwgYmV0d2VlbiB0aGUgcmluZyBhbmQgbGlzdCBi YXNlZCBpbXBsZW1lbnRhdGlvbnM/DQoNCj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvTWFr ZWZpbGUgICAgICAgICB8ICAgMSArDQo+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxv dC5jICAgICAgICAgfCAgNDMgKy0NCj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90 LmggICAgICAgICB8ICAgMSArDQo+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9m ZG1hLmMgICAgfCA3MTMgKysrKysrKysrKysrKysrKysrKysrDQo+ICBkcml2ZXJzL25ldC9ldGhl cm5ldC9tc2NjL29jZWxvdF9mZG1hLmggICAgfCAgOTYgKysrDQo+ICBkcml2ZXJzL25ldC9ldGhl cm5ldC9tc2NjL29jZWxvdF9uZXQuYyAgICAgfCAgMTggKy0NCj4gIGRyaXZlcnMvbmV0L2V0aGVy bmV0L21zY2Mvb2NlbG90X3ZzYzc1MTQuYyB8ICAxMyArDQo+ICBpbmNsdWRlL3NvYy9tc2NjL29j ZWxvdC5oICAgICAgICAgICAgICAgICAgfCAgIDQgKw0KPiAgOCBmaWxlcyBjaGFuZ2VkLCA4Njkg aW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oDQo+IA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L21zY2MvTWFrZWZpbGUNCj4gaW5kZXggNzIyYzI3Njk0YjIxLi5kNzZhOWI3OGI2Y2Eg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvTWFrZWZpbGUNCj4gKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9NYWtlZmlsZQ0KPiBAQCAtMTEsNSArMTEsNiBA QCBtc2NjX29jZWxvdF9zd2l0Y2hfbGliLXkgOj0gXA0KPiAgbXNjY19vY2Vsb3Rfc3dpdGNoX2xp Yi0kKENPTkZJR19CUklER0VfTVJQKSArPSBvY2Vsb3RfbXJwLm8NCj4gIG9iai0kKENPTkZJR19N U0NDX09DRUxPVF9TV0lUQ0gpICs9IG1zY2Nfb2NlbG90Lm8NCj4gIG1zY2Nfb2NlbG90LXkgOj0g XA0KPiArCW9jZWxvdF9mZG1hLm8gXA0KPiAgCW9jZWxvdF92c2M3NTE0Lm8gXA0KPiAgCW9jZWxv dF9uZXQubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3Qu YyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90LmMNCj4gaW5kZXggMWY3YzlmZjE4 YWM1Li40YjI0NjBkMjMyYzIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21z Y2Mvb2NlbG90LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3QuYw0K PiBAQCAtOTY2LDE0ICs5NjYsMzcgQEAgc3RhdGljIGludCBvY2Vsb3RfeHRyX3BvbGxfeGZoKHN0 cnVjdCBvY2Vsb3QgKm9jZWxvdCwgaW50IGdycCwgdTMyICp4ZmgpDQo+ICAJcmV0dXJuIDA7DQo+ ICB9DQo+ICANCj4gLWludCBvY2Vsb3RfeHRyX3BvbGxfZnJhbWUoc3RydWN0IG9jZWxvdCAqb2Nl bG90LCBpbnQgZ3JwLCBzdHJ1Y3Qgc2tfYnVmZiAqKm5za2IpDQo+ICt2b2lkIG9jZWxvdF9wdHBf cnhfdGltZXN0YW1wKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwN Cj4gKwkJCSAgICAgdTY0IHRpbWVzdGFtcCkNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2tiX3NoYXJlZF9o d3RzdGFtcHMgKnNoaHd0c3RhbXBzOw0KPiAgCXU2NCB0b2RfaW5fbnMsIGZ1bGxfdHNfaW5fbnM7 DQo+ICsJc3RydWN0IHRpbWVzcGVjNjQgdHM7DQo+ICsNCj4gKwlpZiAoIW9jZWxvdC0+cHRwKQ0K PiArCQlyZXR1cm47DQo+ICsNCj4gKwlvY2Vsb3RfcHRwX2dldHRpbWU2NCgmb2NlbG90LT5wdHBf aW5mbywgJnRzKTsNCj4gKw0KPiArCXRvZF9pbl9ucyA9IGt0aW1lX3NldCh0cy50dl9zZWMsIHRz LnR2X25zZWMpOw0KPiArCWlmICgodG9kX2luX25zICYgMHhmZmZmZmZmZikgPCB0aW1lc3RhbXAp DQo+ICsJCWZ1bGxfdHNfaW5fbnMgPSAoKCh0b2RfaW5fbnMgPj4gMzIpIC0gMSkgPDwgMzIpIHwN Cj4gKwkJCQl0aW1lc3RhbXA7DQo+ICsJZWxzZQ0KPiArCQlmdWxsX3RzX2luX25zID0gKHRvZF9p bl9ucyAmIEdFTk1BU0tfVUxMKDYzLCAzMikpIHwNCj4gKwkJCQl0aW1lc3RhbXA7DQo+ICsNCj4g KwlzaGh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTsNCj4gKwltZW1zZXQoc2hod3RzdGFt cHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMpKTsNCj4gKwlzaGh3dHN0 YW1wcy0+aHd0c3RhbXAgPSBmdWxsX3RzX2luX25zOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChv Y2Vsb3RfcHRwX3J4X3RpbWVzdGFtcCk7DQoNClRoaXMgc3BsaXQgY2FuIHZlcnkgd2VsbCBiZSBh IHNlcGFyYXRlIHBhdGNoLCBpdCdzIGRpc3RyYWN0aW5nLg0KDQo+ICsNCj4gK2ludCBvY2Vsb3Rf eHRyX3BvbGxfZnJhbWUoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgZ3JwLCBzdHJ1Y3Qgc2tf YnVmZiAqKm5za2IpDQo+ICt7DQo+ICAJdTY0IHRpbWVzdGFtcCwgc3JjX3BvcnQsIGxlbjsNCj4g IAl1MzIgeGZoW09DRUxPVF9UQUdfTEVOIC8gNF07DQo+ICAJc3RydWN0IG5ldF9kZXZpY2UgKmRl djsNCj4gLQlzdHJ1Y3QgdGltZXNwZWM2NCB0czsNCj4gIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0K PiAgCWludCBzeiwgYnVmX2xlbjsNCj4gIAl1MzIgdmFsLCAqYnVmOw0KPiBAQCAtMTAyOSwyMSAr MTA1Miw3IEBAIGludCBvY2Vsb3RfeHRyX3BvbGxfZnJhbWUoc3RydWN0IG9jZWxvdCAqb2NlbG90 LCBpbnQgZ3JwLCBzdHJ1Y3Qgc2tfYnVmZiAqKm5za2IpDQo+ICAJCSpidWYgPSB2YWw7DQo+ICAJ fQ0KPiAgDQo+IC0JaWYgKG9jZWxvdC0+cHRwKSB7DQo+IC0JCW9jZWxvdF9wdHBfZ2V0dGltZTY0 KCZvY2Vsb3QtPnB0cF9pbmZvLCAmdHMpOw0KPiAtDQo+IC0JCXRvZF9pbl9ucyA9IGt0aW1lX3Nl dCh0cy50dl9zZWMsIHRzLnR2X25zZWMpOw0KPiAtCQlpZiAoKHRvZF9pbl9ucyAmIDB4ZmZmZmZm ZmYpIDwgdGltZXN0YW1wKQ0KPiAtCQkJZnVsbF90c19pbl9ucyA9ICgoKHRvZF9pbl9ucyA+PiAz MikgLSAxKSA8PCAzMikgfA0KPiAtCQkJCQl0aW1lc3RhbXA7DQo+IC0JCWVsc2UNCj4gLQkJCWZ1 bGxfdHNfaW5fbnMgPSAodG9kX2luX25zICYgR0VOTUFTS19VTEwoNjMsIDMyKSkgfA0KPiAtCQkJ CQl0aW1lc3RhbXA7DQo+IC0NCj4gLQkJc2hod3RzdGFtcHMgPSBza2JfaHd0c3RhbXBzKHNrYik7 DQo+IC0JCW1lbXNldChzaGh3dHN0YW1wcywgMCwgc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2h3 dHN0YW1wcykpOw0KPiAtCQlzaGh3dHN0YW1wcy0+aHd0c3RhbXAgPSBmdWxsX3RzX2luX25zOw0K PiAtCX0NCj4gKwlvY2Vsb3RfcHRwX3J4X3RpbWVzdGFtcChvY2Vsb3QsIHNrYiwgdGltZXN0YW1w KTsNCj4gIA0KPiAgCS8qIEV2ZXJ5dGhpbmcgd2Ugc2VlIG9uIGFuIGludGVyZmFjZSB0aGF0IGlz IGluIHRoZSBIVyBicmlkZ2UNCj4gIAkgKiBoYXMgYWxyZWFkeSBiZWVuIGZvcndhcmRlZC4NCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90LmggYi9kcml2ZXJz L25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5oDQo+IGluZGV4IGU0M2RhMDliOGY5MS4uZjFhN2I0 MDNlMjIxIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5o DQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90LmgNCj4gQEAgLTksNiAr OSw3IEBADQo+ICAjZGVmaW5lIF9NU0NDX09DRUxPVF9IXw0KPiAgDQo+ICAjaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZHNhL29jZWxvdC5oPg0KPiAgI2luY2x1 ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPg0K PiAgI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L21zY2Mvb2NlbG90X2ZkbWEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21z Y2Mvb2NlbG90X2ZkbWEuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwMDAuLmU0MmMyYzNhZDI3Mw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvbmV0 L2V0aGVybmV0L21zY2Mvb2NlbG90X2ZkbWEuYw0KPiBAQCAtMCwwICsxLDcxMyBAQA0KPiArLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIE9SIE1JVCkNCj4gKy8qDQo+ICsgKiBN aWNyb3NlbWkgU29DcyBGRE1BIGRyaXZlcg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAy MSBNaWNyb2NoaXANCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RzYS9vY2Vs b3QuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9vZl9wbGF0Zm9ybS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KPiArDQo+ICsj aW5jbHVkZSAib2NlbG90X2ZkbWEuaCINCj4gKyNpbmNsdWRlICJvY2Vsb3RfcXMuaCINCj4gKw0K PiArI2RlZmluZSBNU0NDX0ZETUFfRENCX0xMUCh4KQkJCSgoeCkgKiA0ICsgMHgwKQ0KPiArI2Rl ZmluZSBNU0NDX0ZETUFfRENCX0xMUF9QUkVWKHgpCQkoKHgpICogNCArIDB4QTApDQo+ICsNCj4g KyNkZWZpbmUgTVNDQ19GRE1BX0RDQl9TVEFUX0JMT0NLTyh4KQkJKCgoeCkgPDwgMjApICYgR0VO TUFTSygzMSwgMjApKQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfQkxPQ0tPX00JCUdF Tk1BU0soMzEsIDIwKQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfQkxPQ0tPX1goeCkJ CSgoKHgpICYgR0VOTUFTSygzMSwgMjApKSA+PiAyMCkNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0RD Ql9TVEFUX1BECQkJQklUKDE5KQ0KPiArI2RlZmluZSBNU0NDX0ZETUFfRENCX1NUQVRfQUJPUlQJ CUJJVCgxOCkNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0RDQl9TVEFUX0VPRgkJCUJJVCgxNykNCj4g KyNkZWZpbmUgTVNDQ19GRE1BX0RDQl9TVEFUX1NPRgkJCUJJVCgxNikNCj4gKyNkZWZpbmUgTVND Q19GRE1BX0RDQl9TVEFUX0JMT0NLTF9NCQlHRU5NQVNLKDE1LCAwKQ0KPiArI2RlZmluZSBNU0ND X0ZETUFfRENCX1NUQVRfQkxPQ0tMKHgpCQkoKHgpICYgR0VOTUFTSygxNSwgMCkpDQo+ICsNCj4g KyNkZWZpbmUgTVNDQ19GRE1BX0NIX1NBRkUJCQkweGNjDQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19G RE1BX0NIX0FDVElWQVRFCQkJMHhkMA0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9DSF9ESVNB QkxFCQkJMHhkNA0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9FVlRfRVJSCQkJMHgxNjQNCj4g Kw0KPiArI2RlZmluZSBNU0NDX0ZETUFfRVZUX0VSUl9DT0RFCQkJMHgxNjgNCj4gKw0KPiArI2Rl ZmluZSBNU0NDX0ZETUFfSU5UUl9MTFAJCQkweDE2Yw0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRN QV9JTlRSX0xMUF9FTkEJCQkweDE3MA0KPiArDQo+ICsjZGVmaW5lIE1TQ0NfRkRNQV9JTlRSX0ZS TQkJCTB4MTc0DQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0lOVFJfRlJNX0VOQQkJCTB4MTc4 DQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19GRE1BX0lOVFJfRU5BCQkJMHgxODQNCj4gKw0KPiArI2Rl ZmluZSBNU0NDX0ZETUFfSU5UUl9JREVOVAkJCTB4MTg4DQo+ICsNCj4gKyNkZWZpbmUgTVNDQ19G RE1BX0lOSl9DSEFOCQkJMg0KPiArI2RlZmluZSBNU0NDX0ZETUFfWFRSX0NIQU4JCQkwDQo+ICsN Cj4gKyNkZWZpbmUgT0NFTE9UX0ZETUFfUlhfTVRVCQkJRVRIX0RBVEFfTEVODQo+ICsjZGVmaW5l IE9DRUxPVF9GRE1BX1dFSUdIVAkJCTMyDQoNCkkgZ3Vlc3MgeW91J3ZlIHJlZHVjZWQgdG8gaGFs ZiBvZiBOQVBJX1BPTExfV0VJR0hUIGJlY2F1c2UgdGhlIE5FVF9SWA0Kc29mdGlycSBpcyBjb25z dW1pbmcgdG9vIG11Y2ggQ1BVIHRpbWUgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZT8gSSBkb24ndA0K a25vdyBpZiB0aGlzIGlzIHRoZSBwcm9kdWN0aXZlIHRoaW5nIHRvIGRvIHdpdGggYSB2ZXJ5IHNs b3cgQ1BVIHRoYXQgaXMNCnN3YW1wZWQgd2l0aCB0cmFmZmljLCBzaW5jZSB5b3UncmUgcHJhY3Rp Y2FsbHkgbGVhdmluZyB5b3Vyc2VsZiBleHBvc2VkDQp0byBtb3JlIGludGVycnVwdHMsIGNhbiBz b21lYm9keSBwbGVhc2UgY2hpbWUgaW4/DQoNCj4gKyNkZWZpbmUgT0NFTE9UX0ZETUFfUlhfUkVG SUxMX0NPVU5UCQkoT0NFTE9UX0ZETUFfTUFYX0RDQiAvIDIpDQoNClVudXNlZC4gSSBzdXBwb3Nl IHlvdSB3YW50ZWQgdG8gcmVmaWxsIG1vcmUgdGhhbiBvbmNlIHBlciBOQVBJIHBvbGwNCmN5Y2xl IChhcyB5b3UgY3VycmVudGx5IGRvIGluIG9jZWxvdF9mZG1hX3J4X3Jlc3RhcnQpIGJ1dCB5b3Ug ZGlkbid0IGdldA0KYXJvdW5kIHRvIGl0PyBJIHRoaW5rIHlvdSBzaG91bGQgc3RpbGwgZG8gdGhh dCwgZG9uJ3QgbGVhdmUgdGhlIFJYIHJpbmcNCnJ1bm5pbmcgZHJ5Lg0KDQo+ICsNCj4gKyNkZWZp bmUgT0NFTE9UX0ZETUFfQ0hfU0FGRV9USU1FT1VUX01TCQkxMDANCj4gKw0KPiArI2RlZmluZSBP Q0VMT1RfRkRNQV9SWF9FWFRSQV9TSVpFIFwNCj4gKwkJCQkoT0NFTE9UX1RBR19MRU4gKyBFVEhf RkNTX0xFTiArIEVUSF9ITEVOKQ0KDQpDb3VsZCBhbGwgdGhlc2UgbWFjcm9zIGJlbG9uZyB0byBv Y2Vsb3RfZmRtYS5oPw0KDQo+ICsNCj4gK3N0YXRpYyBpbnQgb2NlbG90X2ZkbWFfcnhfYnVmX3Np emUoaW50IG10dSkNCj4gK3sNCj4gKwlyZXR1cm4gQUxJR04obXR1ICsgT0NFTE9UX0ZETUFfUlhf RVhUUkFfU0laRSwgNCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG9jZWxvdF9mZG1hX3dy aXRlbChzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIHUzMiByZWcsIHUzMiBkYXRhKQ0KPiArew0K PiArCXdyaXRlbChkYXRhLCBmZG1hLT5iYXNlICsgcmVnKTsNCj4gK30NCg0KUmVnbWFwIGlzIHRv byBzbG93IGZvciB5b3UsIHlvdSdyZSB1c2luZyBkaXJlY3QgSS9PIGFjY2Vzc29ycyBub3c/DQoN Cj4gKw0KPiArc3RhdGljIHUzMiBvY2Vsb3RfZmRtYV9yZWFkbChzdHJ1Y3Qgb2NlbG90X2ZkbWEg KmZkbWEsIHUzMiByZWcpDQo+ICt7DQo+ICsJcmV0dXJuIHJlYWRsKGZkbWEtPmJhc2UgKyByZWcp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQgaW50IG9jZWxvdF9mZG1hX2lkeF9pbmNy KHVuc2lnbmVkIGludCBpZHgpDQoNCk1pbm9yIGNvbW1lbnQsIGJ1dCAiaW5jIiBhbmQgImRlYyIg YXJlIG11Y2ggbW9yZSBwb3B1bGFyIGFiYnJldmlhdGlvbnMuDQpBbHRob3VnaCB0aGUgd2F5IGlu IHdoaWNoIHlvdSB1c2UgdGhlbSBpcyBub3QgcXVpdGUgdGhlIHNhbWUgd2F5IGluDQp3aGljaCBv dGhlciBkcml2ZXJzIHVzZSB0aGVtIChzb21ldGhpbmcgY2FsbGVkICJpbmMiIHdvdWxkIHRha2Ug YQ0KcmVmZXJlbmNlIG9uIHRoZSBudW1iZXIgYW5kIGFjdHVhbGx5IGluY3JlbWVudCBpdCkuIFNv IG1heWJlICJuZXh0IiBhbmQNCiJwcmV2Ij8NCg0KPiArew0KPiArCWlkeCsrOw0KPiArCWlmIChp ZHggPT0gT0NFTE9UX0ZETUFfTUFYX0RDQikNCj4gKwkJaWR4ID0gMDsNCj4gKw0KPiArCXJldHVy biBpZHg7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2NlbG90X2ZkbWFfaWR4 X2RlY3IodW5zaWduZWQgaW50IGlkeCkNCj4gK3sNCj4gKwlpZiAoaWR4ID09IDApDQo+ICsJCWlk eCA9IE9DRUxPVF9GRE1BX01BWF9EQ0IgLSAxOw0KPiArCWVsc2UNCj4gKwkJaWR4LS07DQo+ICsN Cj4gKwlyZXR1cm4gaWR4Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG9jZWxvdF9mZG1hX3R4 X2ZyZWVfY291bnQoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hKQ0KPiArew0KPiArCXN0cnVjdCBv Y2Vsb3RfZmRtYV9yaW5nICpyaW5nID0gJmZkbWEtPmluajsNCj4gKw0KPiArCWlmIChyaW5nLT50 YWlsID49IHJpbmctPmhlYWQpDQo+ICsJCXJldHVybiBPQ0VMT1RfRkRNQV9NQVhfRENCIC0gKHJp bmctPnRhaWwgLSByaW5nLT5oZWFkKSAtIDE7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gcmluZy0+ aGVhZCAtIHJpbmctPnRhaWwgLSAxOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBvY2Vsb3Rf ZmRtYV9yaW5nX2VtcHR5KHN0cnVjdCBvY2Vsb3RfZmRtYV9yaW5nICpyaW5nKQ0KPiArew0KPiAr CXJldHVybiByaW5nLT5oZWFkID09IHJpbmctPnRhaWw7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIG9jZWxvdF9mZG1hX2FjdGl2YXRlX2NoYW4oc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0K PiArCQkJCSAgICAgIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYiwgaW50IGNoYW4pDQo+ICt7 DQo+ICsJb2NlbG90X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9EQ0JfTExQKGNoYW4pLCBk Y2ItPmh3X2RtYSk7DQo+ICsJb2NlbG90X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9DSF9B Q1RJVkFURSwgQklUKGNoYW4pKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBvY2Vsb3RfZmRt YV93YWl0X2NoYW5fc2FmZShzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIGludCBjaGFuKQ0KPiAr ew0KPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCj4gKwl1MzIgc2FmZTsNCj4gKw0KPiArCXRp bWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhPQ0VMT1RfRkRNQV9DSF9TQUZFX1RJ TUVPVVRfTVMpOw0KPiArCWRvIHsNCj4gKwkJc2FmZSA9IG9jZWxvdF9mZG1hX3JlYWRsKGZkbWEs IE1TQ0NfRkRNQV9DSF9TQUZFKTsNCj4gKwkJaWYgKHNhZmUgJiBCSVQoY2hhbikpDQo+ICsJCQly ZXR1cm4gMDsNCg0KUHJldHR5IGJ1c3kgbG9vcCwgYW5kIHlvdXIgdGltZW91dCBpcyAxMDAgbXMu IEtpbmRhIG5hc3R5IHN0dWZmIGZvciB0aGUNCmxhdGVuY3kgb2YgeW91ciBzeXN0ZW0uDQoNCj4g Kwl9IHdoaWxlICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsNCj4gKw0KPiArCXJldHVy biAtRVRJTUVET1VUOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG9jZWxvdF9mZG1hX3N0b3Bf Y2hhbm5lbChzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIGludCBjaGFuKQ0KPiArew0KPiArCW9j ZWxvdF9mZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfQ0hfRElTQUJMRSwgQklUKGNoYW4pKTsN Cj4gKw0KPiArCXJldHVybiBvY2Vsb3RfZmRtYV93YWl0X2NoYW5fc2FmZShmZG1hLCBjaGFuKTsN Cg0KTWF5YmUgZm9yIHRoZSBleHRyYWN0aW9uIGNoYW5uZWwgaXQgd291bGQgbWFrZSBzZW5zZSB0 byBoYXZlIGFuIGFzeW5jDQpzdG9wLCBtZWFuaW5nIHRoYXQgeW91IGFzayBpdCB0byBzdG9wLCB0 aGVuIHByb2Nlc3MgdGhlIGZyYW1lcyB5b3UndmUNCmdvdCBzbyBmYXIsIGFuZCB3YWl0IHVudGls IHRoZSBjaGFubmVsIGhhcyBjb21wbGV0ZWx5IHN0b3BwZWQgb25seSB3aGVuDQp5b3UgbmVlZCB0 byByZWZpbGw/DQoNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgb2NlbG90X2ZkbWFfZGNiX3Nl dF9kYXRhKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwNCj4gKwkJCQkgICAgIHN0cnVjdCBvY2Vs b3RfZmRtYV9kY2IgKmRjYiwNCj4gKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsDQo+ICsJ CQkJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQ0KPiArew0K PiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9kY2JfaHdfdjIgKmh3ID0gZGNiLT5odzsNCj4gKwl1MzIg b2Zmc2V0Ow0KPiArDQo+ICsJZGNiLT5za2IgPSBza2I7DQo+ICsJZGNiLT5tYXBwZWRfc2l6ZSA9 IHNpemU7DQo+ICsJZGNiLT5tYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoZmRtYS0+ZGV2LCBza2It PmRhdGEsIHNpemUsIGRpcik7DQo+ICsJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGZk bWEtPmRldiwgZGNiLT5tYXBwaW5nKSkpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCW9m ZnNldCA9IGRjYi0+bWFwcGluZyAmIDB4MzsNCj4gKw0KPiArCWh3LT5sbHAgPSAwOw0KPiArCWh3 LT5kYXRhcCA9IEFMSUdOX0RPV04oZGNiLT5tYXBwaW5nLCA0KTsNCj4gKwlody0+ZGF0YWwgPSBB TElHTl9ET1dOKHNpemUsIDQpOw0KPiArCWh3LT5zdGF0ID0gTVNDQ19GRE1BX0RDQl9TVEFUX0JM T0NLTyhvZmZzZXQpOw0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBib29sIG9jZWxvdF9mZG1hX3J4X3NldF9za2Ioc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0K PiArCQkJCSAgIHN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IgKmRjYiwNCj4gKwkJCQkgICBzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzaXplX3Qgc2l6ZSkNCj4gK3sNCj4gKwlyZXR1cm4gb2NlbG90X2ZkbWFf ZGNiX3NldF9kYXRhKGZkbWEsIGRjYiwgc2tiLCBzaXplLA0KPiArCQkJCQlETUFfRlJPTV9ERVZJ Q0UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBvY2Vsb3RfZmRtYV90eF9kY2Jfc2V0X3Nr YihzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsDQo+ICsJCQkJICAgICAgIHN0cnVjdCBvY2Vsb3Rf ZmRtYV9kY2IgKmRjYiwNCj4gKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikNCj4gK3sN Cj4gKwlpZiAoIW9jZWxvdF9mZG1hX2RjYl9zZXRfZGF0YShmZG1hLCBkY2IsIHNrYiwgc2tiLT5s ZW4sDQo+ICsJCQkJICAgICAgRE1BX1RPX0RFVklDRSkpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4g Kw0KPiArCWRjYi0+aHctPnN0YXQgfD0gTVNDQ19GRE1BX0RDQl9TVEFUX0JMT0NLTChza2ItPmxl bik7DQo+ICsJZGNiLT5ody0+c3RhdCB8PSBNU0NDX0ZETUFfRENCX1NUQVRfU09GIHwgTVNDQ19G RE1BX0RDQl9TVEFUX0VPRjsNCj4gKw0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBvY2Vsb3RfZmRtYV9yeF9yZXN0YXJ0KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRt YSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfcmluZyAqcmluZyA9ICZmZG1hLT54dHI7 DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNiLCAqbGFzdF9kY2I7DQo+ICsJdW5zaWdu ZWQgaW50IGlkeDsNCj4gKwlpbnQgcmV0Ow0KPiArCXUzMiBsbHA7DQo+ICsNCj4gKwkvKiBDaGVj ayBpZiB0aGUgRkRNQSBoaXRzIHRoZSBEQ0Igd2l0aCBMTFAgPT0gTlVMTCAqLw0KPiArCWxscCA9 IG9jZWxvdF9mZG1hX3JlYWRsKGZkbWEsIE1TQ0NfRkRNQV9EQ0JfTExQKE1TQ0NfRkRNQV9YVFJf Q0hBTikpOw0KPiArCWlmIChsbHApDQo+ICsJCXJldHVybjsNCg0KSSdtIG5vdCBzdXJlIHdoeSB5 b3UncmUgbGV0dGluZyB0aGUgaGFyZHdhcmUgZ3JpbmQgdG8gYSBoYWx0IGZpcnN0LA0KYmVmb3Jl IHJlZmlsbGluZz8gSSB0aGluayBzaW5jZSB0aGUgQ1BVIGlzIHRoZSBib3R0bGVuZWNrIGFueXdh eSwgeW91DQpjYW4gc3RvcCB0aGUgZXh0cmFjdGlvbiBjaGFubmVsIGF0IGFueSB0aW1lIHlvdSB3 YW50IHRvIHJlZmlsbC4NCkEgY29uc3RhbnQgc3RyZWFtIG9mIGxlc3MgZGF0YSBtaWdodCBiZSBi ZXR0ZXIgdGhhbiBhIGJ1cnN0eSBvbmUuDQpPciBtYXliZSBJJ20gbWlzdW5kZXJzdGFuZGluZyBz b21lIG9mIHRoZSBkZXRhaWxzIG9mIHRoZSBoYXJkd2FyZS4NCg0KPiArDQo+ICsJcmV0ID0gb2Nl bG90X2ZkbWFfc3RvcF9jaGFubmVsKGZkbWEsIE1TQ0NfRkRNQV9YVFJfQ0hBTik7DQo+ICsJaWYg KHJldCkgew0KPiArCQlkZXZfd2FybihmZG1hLT5kZXYsICJVbmFibGUgdG8gc3RvcCBSWCBjaGFu bmVsXG4iKTsNCg0KUmF0ZSBsaW1pdCB0aGVzZSBwcmludHMgbWF5YmUuDQoNCj4gKwkJcmV0dXJu Ow0KPiArCX0NCj4gKw0KPiArCS8qIENoYWluIHRoZSB0YWlsIHdpdGggdGhlIG5leHQgRENCICov DQo+ICsJZGNiID0gJnJpbmctPmRjYnNbcmluZy0+dGFpbF07DQo+ICsJaWR4ID0gb2NlbG90X2Zk bWFfaWR4X2luY3IocmluZy0+dGFpbCk7DQo+ICsJZGNiLT5ody0+bGxwID0gcmluZy0+ZGNic1tp ZHhdLmh3X2RtYTsNCj4gKwlkY2IgPSAmcmluZy0+ZGNic1tpZHhdOw0KPiArDQo+ICsJLyogUGxh Y2UgYSBOVUxMIHRlcm1pbmF0b3IgaW4gbGFzdCBEQ0IgYWRkZWQgKGhlYWQgLSAxKSAqLw0KPiAr CWlkeCA9IG9jZWxvdF9mZG1hX2lkeF9kZWNyKHJpbmctPmhlYWQpOw0KPiArCWxhc3RfZGNiID0g JnJpbmctPmRjYnNbaWR4XTsNCj4gKwlsYXN0X2RjYi0+aHctPmxscCA9IDA7DQo+ICsJcmluZy0+ dGFpbCA9IGlkeDsNCj4gKw0KPiArCS8qIEZpbmFsbHkgcmVhY3RpdmF0ZSB0aGUgY2hhbm5lbCAq Lw0KPiArCW9jZWxvdF9mZG1hX2FjdGl2YXRlX2NoYW4oZmRtYSwgZGNiLCBNU0NDX0ZETUFfWFRS X0NIQU4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBvY2Vsb3RfZmRtYV9yeF9nZXQoc3Ry dWN0IG9jZWxvdF9mZG1hICpmZG1hLCBpbnQgYnVkZ2V0KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vs b3RfZmRtYV9yaW5nICpyaW5nID0gJmZkbWEtPnh0cjsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFf ZGNiICpkY2IsICpuZXh0X2RjYjsNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBmZG1hLT5v Y2Vsb3Q7DQo+ICsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7DQo+ICsJc3RydWN0IHNrX2J1ZmYg KnNrYjsNCj4gKwlib29sIHZhbGlkID0gdHJ1ZTsNCj4gKwl1NjQgdGltZXN0YW1wOw0KPiArCXU2 NCBzcmNfcG9ydDsNCj4gKwl2b2lkICp4Zmg7DQo+ICsJdTMyIHN0YXQ7DQo+ICsNCj4gKwkvKiBX ZSBzaG91bGQgbm90IGdvIHBhc3QgdGhlIHRhaWwgKi8NCj4gKwlpZiAocmluZy0+aGVhZCA9PSBy aW5nLT50YWlsKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlkY2IgPSAmcmluZy0+ZGNi c1tyaW5nLT5oZWFkXTsNCj4gKwlzdGF0ID0gZGNiLT5ody0+c3RhdDsNCj4gKwlpZiAoTVNDQ19G RE1BX0RDQl9TVEFUX0JMT0NLTChzdGF0KSA9PSAwKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsN Cj4gKwlyaW5nLT5oZWFkID0gb2NlbG90X2ZkbWFfaWR4X2luY3IocmluZy0+aGVhZCk7DQo+ICsN Cj4gKwlpZiAoc3RhdCAmIE1TQ0NfRkRNQV9EQ0JfU1RBVF9BQk9SVCB8fCBzdGF0ICYgTVNDQ19G RE1BX0RDQl9TVEFUX1BEKQ0KPiArCQl2YWxpZCA9IGZhbHNlOw0KPiArDQo+ICsJaWYgKCEoc3Rh dCAmIE1TQ0NfRkRNQV9EQ0JfU1RBVF9TT0YpIHx8DQo+ICsJICAgICEoc3RhdCAmIE1TQ0NfRkRN QV9EQ0JfU1RBVF9FT0YpKQ0KPiArCQl2YWxpZCA9IGZhbHNlOw0KPiArDQo+ICsJZG1hX3VubWFw X3NpbmdsZShmZG1hLT5kZXYsIGRjYi0+bWFwcGluZywgZGNiLT5tYXBwZWRfc2l6ZSwNCj4gKwkJ CSBETUFfRlJPTV9ERVZJQ0UpOw0KPiArDQo+ICsJc2tiID0gZGNiLT5za2I7DQo+ICsNCj4gKwlp ZiAodW5saWtlbHkoIXZhbGlkKSkgew0KPiArCQlkZXZfd2FybihmZG1hLT5kZXYsICJJbnZhbGlk IHBhY2tldFxuIik7DQoNClJhdGUgbGltaXQgcGxlYXNlLCBhbmQgdHJ5IHRvIHNob3cgc29tZXRo aW5nIHdoaWNoIG1pZ2h0IGJlIHJlbGV2YW50IHRvDQp3aHkgaXQgaXMgbm90IHZhbGlkLg0KDQo+ ICsJCWdvdG8gcmVmaWxsOw0KPiArCX0NCj4gKw0KPiArCXhmaCA9IHNrYi0+ZGF0YTsNCj4gKwlv Y2Vsb3RfeGZoX2dldF9zcmNfcG9ydCh4ZmgsICZzcmNfcG9ydCk7DQo+ICsNCj4gKwlpZiAoV0FS Tl9PTihzcmNfcG9ydCA+PSBvY2Vsb3QtPm51bV9waHlzX3BvcnRzKSkNCj4gKwkJZ290byByZWZp bGw7DQo+ICsNCj4gKwluZGV2ID0gb2NlbG90X3BvcnRfdG9fbmV0ZGV2KG9jZWxvdCwgc3JjX3Bv cnQpOw0KPiArCWlmICh1bmxpa2VseSghbmRldikpDQo+ICsJCWdvdG8gcmVmaWxsOw0KPiArDQo+ ICsJc2tiX3B1dChza2IsIE1TQ0NfRkRNQV9EQ0JfU1RBVF9CTE9DS0woc3RhdCkgLSBFVEhfRkNT X0xFTik7DQo+ICsJc2tiX3B1bGwoc2tiLCBPQ0VMT1RfVEFHX0xFTik7DQo+ICsNCj4gKwlza2It PmRldiA9IG5kZXY7DQo+ICsJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2ti LT5kZXYpOw0KPiArCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsNCj4gKwlz a2ItPmRldi0+c3RhdHMucnhfcGFja2V0cysrOw0KPiArDQo+ICsJb2NlbG90X3B0cF9yeF90aW1l c3RhbXAob2NlbG90LCBza2IsIHRpbWVzdGFtcCk7DQoNCllvdSBmb3Jnb3QgdG8gZXh0cmFjdCB0 aGUgInRpbWVzdGFtcCIgZnJvbSB0aGUgWEZILCBhbmQgYXJlIHByb3ZpZGluZw0KanVuayBmcm9t IHRoZSBrZXJuZWwgc3RhY2sgbWVtb3J5LiBQbGVhc2UgbWFrZSBzdXJlIHRvIHRlc3QgUFRQLg0K DQo+ICsNCj4gKwlpZiAoIXNrYl9kZWZlcl9yeF90aW1lc3RhbXAoc2tiKSkNCj4gKwkJbmV0aWZf cmVjZWl2ZV9za2Ioc2tiKTsNCj4gKw0KPiArCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZmZG1hLT5u YXBpLCBmZG1hLT5yeF9idWZfc2l6ZSk7DQo+ICsJaWYgKCFza2IpDQo+ICsJCXJldHVybiBmYWxz ZTsNCg0KU2VlIG15IGNvbW1lbnQgYmVsb3csIG9uIHRoZSBvY2Vsb3RfZmRtYV9yeF9za2JfYWxs b2MoKSBmdW5jdGlvbiwgb24gd2h5DQpJIHRoaW5rIHlvdSBhcmUgbWFraW5nIHN1Yi1vcHRpbWFs IHVzZSBvZiB0aGUgcmluZyBjb25jZXB0Lg0KDQo+ICsNCj4gK3JlZmlsbDoNCj4gKwlpZiAoIW9j ZWxvdF9mZG1hX3J4X3NldF9za2IoZmRtYSwgZGNiLCBza2IsIGZkbWEtPnJ4X2J1Zl9zaXplKSkN Cj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJLyogQ2hhaW4gdGhlIG5leHQgRENCICovDQo+ ICsJbmV4dF9kY2IgPSAmcmluZy0+ZGNic1tyaW5nLT5oZWFkXTsNCj4gKwlkY2ItPmh3LT5sbHAg PSBuZXh0X2RjYi0+aHdfZG1hOw0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIG9jZWxvdF9mZG1hX3R4X2NsZWFudXAoc3RydWN0IG9jZWxvdF9mZG1hICpm ZG1hLCBpbnQgYnVkZ2V0KQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9yaW5nICpyaW5n ID0gJmZkbWEtPmluajsNCj4gKwl1bnNpZ25lZCBpbnQgdG1wX2hlYWQsIG5ld19udWxsX2xscF9p ZHg7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX2RjYiAqZGNiOw0KPiArCWJvb2wgZW5kX29mX2xp c3QgPSBmYWxzZTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJc3Bpbl9sb2NrX2JoKCZmZG1hLT54 bWl0X2xvY2spOw0KPiArDQo+ICsJLyogUHVyZ2UgdGhlIFRYIHBhY2tldHMgdGhhdCBoYXZlIGJl ZW4gc2VudCB1cCB0byB0aGUgTlVMTCBsbHAgb3IgdGhlDQo+ICsJICogZW5kIG9mIGRvbmUgbGlz dC4NCj4gKwkgKi8NCj4gKwl3aGlsZSAoIW9jZWxvdF9mZG1hX3JpbmdfZW1wdHkoJmZkbWEtPmlu aikpIHsNCg0Kcy8mZmRtYS0+aW5qL3JpbmcvDQoNCj4gKwkJZGNiID0gJnJpbmctPmRjYnNbcmlu Zy0+aGVhZF07DQo+ICsJCWlmICghKGRjYi0+aHctPnN0YXQgJiBNU0NDX0ZETUFfRENCX1NUQVRf UEQpKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJdG1wX2hlYWQgPSByaW5nLT5oZWFkOw0KDQpV bnVzZWQuDQoNCj4gKwkJcmluZy0+aGVhZCA9IG9jZWxvdF9mZG1hX2lkeF9pbmNyKHJpbmctPmhl YWQpOw0KPiArDQo+ICsJCWRtYV91bm1hcF9zaW5nbGUoZmRtYS0+ZGV2LCBkY2ItPm1hcHBpbmcs IGRjYi0+bWFwcGVkX3NpemUsDQo+ICsJCQkJIERNQV9UT19ERVZJQ0UpOw0KPiArCQluYXBpX2Nv bnN1bWVfc2tiKGRjYi0+c2tiLCBidWRnZXQpOw0KPiArDQo+ICsJCS8qIElmIHdlIGhpdCB0aGUg TlVMTCBMTFAsIHN0b3AsIHdlIG1pZ2h0IG5lZWQgdG8gcmVsb2FkIEZETUEgKi8NCj4gKwkJaWYg KGRjYi0+aHctPmxscCA9PSAwKSB7DQo+ICsJCQllbmRfb2ZfbGlzdCA9IHRydWU7DQo+ICsJCQli cmVhazsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8qIElmIHRoZXJlIGlzIHN0aWxsIHNvbWUg RENCcyB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIEZETUEgb3IgaWYgdGhlDQo+ICsJICogcGVuZGlu ZyBsaXN0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlc3RhcnQgdGhlIEZETUEuDQo+ ICsJICovDQoNCkkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgeW91IHJlc3RhcnQgdGhlIGluamVjdGlv biBjaGFubmVsIGZyb20gdGhlIFRYDQpjb25maXJtYXRpb24gaW50ZXJydXB0LiBJdCByYWlzZWQg dGhlIGludGVycnVwdCB0byB0ZWxsIHlvdSB0aGF0IGl0IGhpdA0KYSBOVUxMIExMUCBiZWNhdXNl IHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIHNlbmQuIElmIHlvdSByZXN0YXJ0IGl0IG5vdyBhbmQN Cm5vIG90aGVyIHRyYW5zbWlzc2lvbiBoYXMgaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lLCB3b24n dCBpdCBzdG9wIGFnYWluPw0KDQo+ICsJaWYgKCFlbmRfb2ZfbGlzdCB8fCBvY2Vsb3RfZmRtYV9y aW5nX2VtcHR5KCZmZG1hLT5pbmopKQ0KDQpzLyZmZG1hLT5pbmovcmluZy8NCg0KPiArCQlnb3Rv IG91dF91bmxvY2s7DQo+ICsNCj4gKwlyZXQgPSBvY2Vsb3RfZmRtYV93YWl0X2NoYW5fc2FmZShm ZG1hLCBNU0NDX0ZETUFfSU5KX0NIQU4pOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X3dhcm4o ZmRtYS0+ZGV2LCAiRmFpbGVkIHRvIHdhaXQgZm9yIFRYIGNoYW5uZWwgdG8gc3RvcFxuIik7DQo+ ICsJCWdvdG8gb3V0X3VubG9jazsNCj4gKwl9DQo+ICsNCj4gKwkvKiBTZXQgTlVMTCBMTFAgKi8N Cj4gKwluZXdfbnVsbF9sbHBfaWR4ID0gb2NlbG90X2ZkbWFfaWR4X2RlY3IocmluZy0+dGFpbCk7 DQo+ICsJZGNiID0gJnJpbmctPmRjYnNbbmV3X251bGxfbGxwX2lkeF07DQo+ICsJZGNiLT5ody0+ bGxwID0gMDsNCj4gKw0KPiArCWRjYiA9ICZyaW5nLT5kY2JzW3JpbmctPmhlYWRdOw0KPiArCW9j ZWxvdF9mZG1hX2FjdGl2YXRlX2NoYW4oZmRtYSwgZGNiLCBNU0NDX0ZETUFfSU5KX0NIQU4pOw0K DQoJaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgJiYNCgkgICAgb2NlbG90 X2ZkbWFfdHhfZnJlZV9jb3VudChmZG1hKSkNCgkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOw0KDQpU aGlzIGNhbiB0aGVuIGJlIHR3ZWFrZWQgZm9yIHdoZW4geW91IGFkZCBzdXBwb3J0IGZvciBzY2F0 dGVyL2dhdGhlciB4bWl0Lg0KDQo+ICsNCj4gK291dF91bmxvY2s6DQo+ICsJc3Bpbl91bmxvY2tf YmgoJmZkbWEtPnhtaXRfbG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgb2NlbG90X2Zk bWFfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkNCj4gK3sN Cj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0 IG9jZWxvdF9mZG1hLCBuYXBpKTsNCj4gKwlpbnQgd29ya19kb25lID0gMDsNCj4gKw0KPiArCW9j ZWxvdF9mZG1hX3R4X2NsZWFudXAoZmRtYSwgYnVkZ2V0KTsNCj4gKw0KPiArCXdoaWxlICh3b3Jr X2RvbmUgPCBidWRnZXQpIHsNCj4gKwkJaWYgKCFvY2Vsb3RfZmRtYV9yeF9nZXQoZmRtYSwgYnVk Z2V0KSkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCXdvcmtfZG9uZSsrOw0KPiArCX0NCj4gKw0K PiArCW9jZWxvdF9mZG1hX3J4X3Jlc3RhcnQoZmRtYSk7DQo+ICsNCj4gKwlpZiAod29ya19kb25l IDwgYnVkZ2V0KSB7DQo+ICsJCW5hcGlfY29tcGxldGVfZG9uZSgmZmRtYS0+bmFwaSwgd29ya19k b25lKTsNCj4gKwkJb2NlbG90X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0VOQSwN Cj4gKwkJCQkgICBCSVQoTVNDQ19GRE1BX0lOSl9DSEFOKSB8DQo+ICsJCQkJICAgQklUKE1TQ0Nf RkRNQV9YVFJfQ0hBTikpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiB3b3JrX2RvbmU7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBvY2Vsb3RfZmRtYV9pbnRlcnJ1cHQoaW50IGly cSwgdm9pZCAqZGV2X2lkKQ0KPiArew0KPiArCXUzMiBpZGVudCwgbGxwLCBmcm0sIGVyciwgZXJy X2NvZGU7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hID0gZGV2X2lkOw0KPiArDQo+ICsJ aWRlbnQgPSBvY2Vsb3RfZmRtYV9yZWFkbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9JREVOVCk7DQo+ ICsJZnJtID0gb2NlbG90X2ZkbWFfcmVhZGwoZmRtYSwgTVNDQ19GRE1BX0lOVFJfRlJNKTsNCj4g KwlsbHAgPSBvY2Vsb3RfZmRtYV9yZWFkbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9MTFApOw0KPiAr DQo+ICsJb2NlbG90X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0xMUCwgbGxwICYg aWRlbnQpOw0KPiArCW9jZWxvdF9mZG1hX3dyaXRlbChmZG1hLCBNU0NDX0ZETUFfSU5UUl9GUk0s IGZybSAmIGlkZW50KTsNCj4gKwlpZiAoZnJtIHx8IGxscCkgew0KPiArCQlvY2Vsb3RfZmRtYV93 cml0ZWwoZmRtYSwgTVNDQ19GRE1BX0lOVFJfRU5BLCAwKTsNCj4gKwkJbmFwaV9zY2hlZHVsZSgm ZmRtYS0+bmFwaSk7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gb2NlbG90X2ZkbWFfcmVhZGwoZmRt YSwgTVNDQ19GRE1BX0VWVF9FUlIpOw0KPiArCWlmICh1bmxpa2VseShlcnIpKSB7DQo+ICsJCWVy cl9jb2RlID0gb2NlbG90X2ZkbWFfcmVhZGwoZmRtYSwgTVNDQ19GRE1BX0VWVF9FUlJfQ09ERSk7 DQo+ICsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZmRtYS0+ZGV2LA0KPiArCQkJCSAgICAiRXJyb3Ig ISBjaGFucyBtYXNrOiAlI3gsIGNvZGU6ICUjeFxuIiwNCj4gKwkJCQkgICAgZXJyLCBlcnJfY29k ZSk7DQo+ICsNCj4gKwkJb2NlbG90X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9FVlRfRVJS LCBlcnIpOw0KPiArCQlvY2Vsb3RfZmRtYV93cml0ZWwoZmRtYSwgTVNDQ19GRE1BX0VWVF9FUlJf Q09ERSwgZXJyX2NvZGUpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgb2NlbG90X2ZkbWFfc2VuZF9za2Ioc3RydWN0IG9jZWxv dF9mZG1hICpmZG1hLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KPiArew0KPiArCXN0cnVjdCBvY2Vs b3RfZmRtYV9yaW5nICpyaW5nID0gJmZkbWEtPmluajsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFf ZGNiICpkY2IsICpuZXh0Ow0KPiArDQo+ICsJZGNiID0gJnJpbmctPmRjYnNbcmluZy0+dGFpbF07 DQo+ICsJaWYgKCFvY2Vsb3RfZmRtYV90eF9kY2Jfc2V0X3NrYihmZG1hLCBkY2IsIHNrYikpIHsN Cj4gKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0K PiArCWlmIChvY2Vsb3RfZmRtYV9yaW5nX2VtcHR5KCZmZG1hLT5pbmopKSB7DQoNCnMvJmZkbWEt Pmluai9yaW5nLw0KDQo+ICsJCW9jZWxvdF9mZG1hX2FjdGl2YXRlX2NoYW4oZmRtYSwgZGNiLCBN U0NDX0ZETUFfSU5KX0NIQU4pOw0KPiArCX0gZWxzZSB7DQo+ICsJCW5leHQgPSAmcmluZy0+ZGNi c1tvY2Vsb3RfZmRtYV9pZHhfaW5jcihyaW5nLT50YWlsKV07DQo+ICsJCWRjYi0+aHctPmxscCA9 IG5leHQtPmh3X2RtYTsNCj4gKwl9DQo+ICsNCj4gKwlyaW5nLT50YWlsID0gb2NlbG90X2ZkbWFf aWR4X2luY3IocmluZy0+dGFpbCk7DQoNCllvdSBzdGlsbCBoYXZlIGxvY2tpbmcgYmV0d2VlbiBU WCBhbmQgVFggY29uZiwgdGhhdCdzIHRvbyBiYWQuIFdoeSBpcw0KdGhhdCwgSSB3b25kZXI/IEJl Y2F1c2UgVFggY29uZiAob2NlbG90X2ZkbWFfdHhfY2xlYW51cCkgdXBkYXRlcw0KcmluZy0+aGVh ZCBhbmQgVFggKG9jZWxvdF9mZG1hX3NlbmRfc2tiKSB1cGRhdGVzIHJpbmctPnRhaWwuIENvdWxk IGl0IGJlDQpiZWNhdXNlIHlvdSdyZSB1cGRhdGluZyB0aGUgcmluZy0+dGFpbCBfYWZ0ZXJfIHlv dSd2ZSBhY3RpdmF0ZWQgdGhlDQppbmplY3Rpb24gY2hhbm5lbCwgdGhlcmVmb3JlIGV4cG9zaW5n IHlvdSB0byBhIHJhY2Ugd2l0aCB0aGUgY29tcGxldGlvbg0KaW50ZXJydXB0IHdoaWNoIHJlYWRz IHJpbmctPnRhaWw/DQoNCj4gKw0KPiArCXNrYl90eF90aW1lc3RhbXAoc2tiKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBvY2Vsb3RfZmRtYV9wcmVwYXJlX3NrYihzdHJ1Y3Qgb2NlbG90X2Zk bWEgKmZkbWEsIGludCBwb3J0LA0KPiArCQkJCSAgIHUzMiByZXdfb3AsIHN0cnVjdCBza19idWZm ICpza2IsDQo+ICsJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gK3sNCj4gKwlpbnQg bmVlZGVkX2hlYWRyb29tID0gbWF4X3QoaW50LCBPQ0VMT1RfVEFHX0xFTiAtIHNrYl9oZWFkcm9v bShza2IpLCAwKTsNCj4gKwlpbnQgbmVlZGVkX3RhaWxyb29tID0gbWF4X3QoaW50LCBFVEhfRkNT X0xFTiAtIHNrYl90YWlscm9vbShza2IpLCAwKTsNCj4gKwlzdHJ1Y3Qgb2NlbG90X3BvcnQgKm9j ZWxvdF9wb3J0ID0gZmRtYS0+b2NlbG90LT5wb3J0c1twb3J0XTsNCj4gKwl2b2lkICppZmg7DQo+ ICsJaW50IGVycjsNCj4gKw0KPiArCWlmICh1bmxpa2VseShuZWVkZWRfaGVhZHJvb20gfHwgbmVl ZGVkX3RhaWxyb29tIHx8DQo+ICsJCSAgICAgc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkpIHsNCj4g KwkJZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3Rh aWxyb29tLA0KPiArCQkJCSAgICAgICBHRlBfQVRPTUlDKTsNCj4gKwkJaWYgKHVubGlrZWx5KGVy cikpIHsNCj4gKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQo+ICsJCQlyZXR1cm4gMTsNCj4g KwkJfQ0KPiArCX0NCj4gKw0KPiArCWVyciA9IHNrYl9saW5lYXJpemUoc2tiKTsNCj4gKwlpZiAo ZXJyKSB7DQo+ICsJCW5ldF9lcnJfcmF0ZWxpbWl0ZWQoIiVzOiBza2JfbGluZWFyaXplIGVycm9y ICglZCkhXG4iLA0KPiArCQkJCSAgICBkZXYtPm5hbWUsIGVycik7DQo+ICsJCWRldl9rZnJlZV9z a2JfYW55KHNrYik7DQo+ICsJCXJldHVybiAxOw0KPiArCX0NCj4gKw0KPiArCWlmaCA9IHNrYl9w dXNoKHNrYiwgT0NFTE9UX1RBR19MRU4pOw0KPiArCXNrYl9wdXQoc2tiLCBFVEhfRkNTX0xFTik7 DQo+ICsJb2NlbG90X2lmaF9wb3J0X3NldChpZmgsIG9jZWxvdF9wb3J0LCByZXdfb3AsIHNrYl92 bGFuX3RhZ19nZXQoc2tiKSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50 IG9jZWxvdF9mZG1hX2luamVjdF9mcmFtZShzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIGludCBw b3J0LCB1MzIgcmV3X29wLA0KPiArCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQ0KPiArew0KPiArCWludCByZXQgPSBORVRERVZfVFhfT0s7DQo+ICsN Cj4gKwlzcGluX2xvY2soJmZkbWEtPnhtaXRfbG9jayk7DQo+ICsNCj4gKwlpZiAob2NlbG90X2Zk bWFfdHhfZnJlZV9jb3VudChmZG1hKSA9PSAwKSB7DQo+ICsJCXJldCA9IE5FVERFVl9UWF9CVVNZ Ow0KDQpuZXRpZl9zdG9wX3F1ZXVlKGRldik7DQoNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiAr DQo+ICsJaWYgKG9jZWxvdF9mZG1hX3ByZXBhcmVfc2tiKGZkbWEsIHBvcnQsIHJld19vcCwgc2ti LCBkZXYpKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCW9jZWxvdF9mZG1hX3NlbmRfc2tiKGZk bWEsIHNrYik7DQo+ICsNCj4gK291dDoNCj4gKwlzcGluX3VubG9jaygmZmRtYS0+eG1pdF9sb2Nr KTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG9jZWxv dF9mZG1hX3JpbmdfZnJlZShzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsDQo+ICsJCQkJICBzdHJ1 Y3Qgb2NlbG90X2ZkbWFfcmluZyAqcmluZykNCj4gK3sNCj4gKwlkbWFtX2ZyZWVfY29oZXJlbnQo ZmRtYS0+ZGV2LCBPQ0VMT1RfRENCU19IV19BTExPQ19TSVpFLCByaW5nLT5od19kY2JzLA0KPiAr CQkJICAgcmluZy0+aHdfZGNic19kbWEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG9jZWxv dF9mZG1hX3JpbmdfYWxsb2Moc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLA0KPiArCQkJCSAgc3Ry dWN0IG9jZWxvdF9mZG1hX3JpbmcgKnJpbmcpDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1h X2RjYl9od192MiAqaHdfZGNiczsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpkY2I7DQo+ ICsJZG1hX2FkZHJfdCBod19kY2JzX2RtYTsNCj4gKwl1bnNpZ25lZCBpbnQgYWRqdXN0Ow0KPiAr CWludCBpOw0KPiArDQo+ICsJLyogQ3JlYXRlIGEgcG9vbCBvZiBjb25zaXN0ZW50IG1lbW9yeSBi bG9ja3MgZm9yIGhhcmR3YXJlIGRlc2NyaXB0b3JzICovDQo+ICsJcmluZy0+aHdfZGNicyA9IGRt YW1fYWxsb2NfY29oZXJlbnQoZmRtYS0+ZGV2LA0KPiArCQkJCQkgICAgT0NFTE9UX0RDQlNfSFdf QUxMT0NfU0laRSwNCj4gKwkJCQkJICAgICZyaW5nLT5od19kY2JzX2RtYSwgR0ZQX0tFUk5FTCk7 DQo+ICsJaWYgKCFyaW5nLT5od19kY2JzKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiAr CS8qIERDQnMgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMzJiaXQgYm91bmRhcnkgKi8NCj4gKwlod19k Y2JzID0gcmluZy0+aHdfZGNiczsNCj4gKwlod19kY2JzX2RtYSA9IHJpbmctPmh3X2RjYnNfZG1h Ow0KPiArCWlmICghSVNfQUxJR05FRChod19kY2JzX2RtYSwgNCkpIHsNCj4gKwkJYWRqdXN0ID0g aHdfZGNic19kbWEgJiAweDM7DQo+ICsJCWh3X2RjYnNfZG1hID0gQUxJR04oaHdfZGNic19kbWEs IDQpOw0KPiArCQlod19kY2JzID0gKHZvaWQgKilod19kY2JzICsgYWRqdXN0Ow0KPiArCX0NCj4g Kw0KPiArCWZvciAoaSA9IDA7IGkgPCBPQ0VMT1RfRkRNQV9NQVhfRENCOyBpKyspIHsNCj4gKwkJ ZGNiID0gJnJpbmctPmRjYnNbaV07DQo+ICsJCWRjYi0+aHcgPSAmaHdfZGNic1tpXTsNCj4gKwkJ ZGNiLT5od19kbWEgPSBod19kY2JzX2RtYSArDQo+ICsJCQkgICAgIGkgKiBzaXplb2Yoc3RydWN0 IG9jZWxvdF9mZG1hX2RjYl9od192Mik7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgb2NlbG90X2ZkbWFfcnhfc2tiX2FsbG9jKHN0cnVjdCBvY2Vs b3RfZmRtYSAqZmRtYSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiICpkY2IsICpw cmV2X2RjYiA9IE5VTEw7DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX3JpbmcgKnJpbmcgPSAmZmRt YS0+eHRyOw0KPiArCXN0cnVjdCBza19idWZmICpza2I7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlm b3IgKGkgPSAwOyBpIDwgT0NFTE9UX0ZETUFfTUFYX0RDQjsgaSsrKSB7DQo+ICsJCWRjYiA9ICZy aW5nLT5kY2JzW2ldOw0KPiArCQlza2IgPSBuYXBpX2FsbG9jX3NrYigmZmRtYS0+bmFwaSwgZmRt YS0+cnhfYnVmX3NpemUpOw0KDQpJIGhhdmUgdG8gdGVsbCB5b3UsIHNrYiBhbGxvY2F0aW9uIGF0 IHByb2JlIHRpbWUgaXMgc29tZXRoaW5nIEkgaGF2ZW4ndA0Kc2VlbiBiZWZvcmUsIEknbGwgaGF2 ZSB0byBkZWZlciB0byBzb21lYm9keSBlbHNlIGZvciBhIHNlY29uZCBvcGluaW9uLg0KSSB1bmRl cnN0YW5kIHRoYXQgeW91IGtlZXAgdGhlIHNrX2J1ZmYgc3RydWN0dXJlIGNsb3NlbHkgdGllZCB0 byB0aGUgRENCDQpzdHJ1Y3R1cmUsIHdoZXJlYXMgbm9ybWFsbHkgeW91J2Qgc2VlIG9ubHkgRENC IHN0cnVjdHVyZXMgaW4gdGhlIFJYIHJpbmcuDQoNCkFuZCBuYXBpX2FsbG9jX3NrYj8gVGhpcyBp c24ndCBOQVBJIGNvbnRleHQuDQoNClRoZSB3aG9sZSBpZGVhIChhcyBmYXIgYXMgSSB1bmRlcnN0 YW5kIGl0ISkgd2l0aCBhIHJlY2VpdmUgcmluZyBpcyB0aGF0DQpoYXJkd2FyZSBwcm9kdWNlcyBk YXRhIG9uIG9uZSBzaWRlIG9mIGl0LCBhbmQgc29mdHdhcmUgY29uc3VtZXMgZnJvbQ0KdGhhdCBz aWRlIHRvbyBhbmQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLCBqdXN0IGxhZ3MgYmVoaW5kIGEgbGl0 dGxlIGJpdC4NClNvZnR3YXJlIG11c3QgYWxzbyBwcm92aWRlIGJ1ZmZlcnMgYXQgdGhlIG9wcG9z aXRlIGVuZCwgaW4gd2hpY2gNCmhhcmR3YXJlIHdpbGwgcHV0IHRoZSBwcm9kdWNlZCBkYXRhLCBz byB0aGF0IHRoZSBwaXBlbGluZSBuZXZlciBydW5zDQpvdXQuIFlvdSdsbCBub3RpY2UgdGhhdCBp dCBpcyBzdGFuZGFyZCBhbW9uZ3N0IHJpbmcgYmFzZWQgZHJpdmVycyB0bw0KbmFtZSB5b3VyIHJp bmctPmhlYWQgYXMgcmluZy0+bmV4dF90b19jbGVhbiwgYW5kIHlvdXIgcmluZy0+dGFpbCBhcw0K cmluZy0+bmV4dF90b191c2UgKGFjdHVhbGx5IG5vdCBxdWl0ZTogeW91ciBoYXJkd2FyZSBkb2Vz bid0IHJlYWxseQ0KcHJvdmlkZSBwcm9kdWNlciBhbmQgY29uc3VtZXIgaW5kaWNlcywgYW5kIHRo ZSB3YXkgaW4gd2hpY2ggeW91IHVwZGF0ZQ0KdGhlIHJpbmctPnRhaWwgcGFzdCB0aGUgTlVMTCBM TFAgcG9pbnRlciBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgd2F5DQppbiB3aGljaCBkcml2 ZXJzIHVzZSByaW5nLT5uZXh0X3RvX3VzZSBhbmQgbW9yZSBsaWtlIHJpbmctPm5leHRfdG9fYWxs b2MsDQpidXQgbW9yZSBvbiB0aGF0IGxhdGVyKS4gSSB0aGluayBwZW9wbGUgcmV2aWV3aW5nIHlv dXIgY29kZSB3aWxsIGluc3RhbnRseQ0Ka25vdyB3aGF0IGl0J3MgYWJvdXQgaWYgeW91IG5hbWUg YW5kIHN0cnVjdHVyZSB0aGluZ3MgaW4gdGhpcyB3YXksDQpwZXJoYXBzIHRoZSBsYWNrIG9mIGNv bnN1bWVyIGFuZCBwcm9kdWNlciBpbmRpY2VzIGlzIG1lcmVseSBhbg0KaXJyZWxldmFudCBkZXRh aWwuDQoNCkFzIGxvbmcgYXMgdGhlIHJpbmcgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggaW4gb3JkZXIg dG8gZ2l2ZSBzb2Z0d2FyZSBzb21lDQp0aW1lIHRvIHJlYWN0LCB5b3UgY2FuIHJlYWNoIGEgc3Rh dGUgb2YgZXF1aWxpYnJpdW0gd2hlcmUgeW91IGRvbid0IG5lZWQNCnRvIGFsbG9jYXRlIG9yIERN QSBtYXAgYW55IG5ldyBidWZmZXIsIHlvdSBjYW4ganVzdCByZWN5Y2xlIHRoZSBvbmVzIHlvdQ0K YWxyZWFkeSBoYXZlLiBUbyB1c2UgYnVmZmVyIHJlY3ljbGluZywgeW91IG5lZWQgdG8gcmVwbGFj ZSBhbGxvY19za2IoKQ0Kd2l0aCBmdW5jdGlvbnMgc3VjaCBhcyBidWlsZF9za2IoKSwgd2hpY2gg YnVpbGRzIGFuIHNrX2J1ZmYgc3RydWN0dXJlDQphcm91bmQgYSBwcmUtZXhpc3RpbmcgYnVmZmVy Lg0KDQpPbmUgc2ltcGxlIHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdGhlIHBhZ2UgZmxpcHBpbmcg dGVjaG5pcXVlLiBUaGVyZSBtYXkNCmJlIG90aGVycyBhbmQgeW91IGRvbid0IGhhdmUgdG8gdXNl IHRoaXMgb25lLiBUaGUgcHJpbmNpcGxlIGlzIGFzDQpmb2xsb3dzOiB5b3UgYWxsb2NhdGUgYW5k IERNQSBtYXAgYnVmZmVycyBkb3VibGUgdGhlIHNpemUgeW91IG5lZWQNCihQQUdFX1NJWkUgaXMg YSBjb21tb24gY2hvaWNlLCBkaXZpZGVkIGJ5IHR3byB5b3UgZ2V0IGFib3V0IDJLIG9mIGRhdGEN CnBlciBidWZmZXIsIGZvciBmcmFtZXMgbGFyZ2VyIHRoYW4gdGhhdCB5b3Ugc2hvdWxkIGRvIHNj YXR0ZXIvZ2F0aGVyKQ0KYW5kIHlvdSBwb3B1bGF0ZSBhbiBSWCBEQ0Igd2l0aCBqdXN0IG9uZSBo YWxmIG9mIHRoYXQgcGFnZSwgdGhlIG90aGVyDQpoYWxmIGlzIHVudXNlZCBmb3Igbm93LiBZb3Ug cmVwZWF0IHRoaXMgcHJvY2VzcyB1bnRpbCB5b3UndmUgZmlsbGVkIHVwDQp0aGUgUlggcmluZyB3 aXRoIHN1ZmZpY2llbnQgRENCIGVudHJpZXMsIGFuZCBhbGwgb2YgdGhpcyBoYXBwZW5zIGF0DQpp bml0aWFsaXphdGlvbiB0aW1lLg0KDQpUaGVuLCB3aGVuIHlvdSBwcm9jZXNzIGEgZnJhbWUgZnJv bSB0aGUgUlggRENCIHJpbmcgKGluIHRoZSBOQVBJIHBvbGwNCmZ1bmN0aW9uKSwgeW91IGNvbnN0 cnVjdCBhIHNrYiBhcm91bmQgdGhhdCBwYWdlIGhhbGYsIGFuZCBiZWZvcmUgZ2l2aW5nDQppdCB0 byB0aGUgbmV0d29yayBzdGFjaywgeW91IHNwZWN1bGF0aXZlbHkgYXR0ZW1wdCB0byByZXVzZSB0 aGUgb3RoZXINCmhhbGYgb2YgdGhlIHBhZ2UgYnkgcHV0dGluZyBpdCBiYWNrIGludG8gdGhlIFJY IERDQiByaW5nLCBhdCB0aGUNCm9wcG9zaXRlIGVuZCBjb21wYXJlZCB0byB3aGVyZSB5b3UncmUg Y29uc3VtaW5nIHRoZSBvdGhlciBoYWxmIGZyb20uDQpSaW5nLWJhc2VkIGRyaXZlcnMgdXNlIGEg c2VwYXJhdGUgcmluZy0+bmV4dF90b19hbGxvYyB2YXJpYWJsZSBmb3IgdGhpcy4NCkRDQiBlbGVt ZW50cyByYW5naW5nIGZyb20gcmluZy0+bmV4dF90b191c2UgYW5kIHVwIHRvIHJpbmctPm5leHRf dG9fYWxsb2MNCmFyZSBzaW1wbHkgaGFsdmVzIG9mIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIHByb2Nl c3NlZCBieSB5b3VyIE5BUEksIGFuZA0KYXJlIHJlYWR5IHRvIGJlIGNvbW1pdHRlZCB0byBoYXJk d2FyZSB3aGVuIHlvdSBuZWVkIHRvIHJlZmlsbCAoaW4geW91cg0KY2FzZSB1cGRhdGUgdGhlIExM UCBwb2ludGVyKS4NCg0KU28gZWFjaCBwYWdlIGNvdWxkIGhhdmUgdXAgdG8gdHdvIHVzZXJzIChy ZWZlcmVuY2VzKSwgYW5kIHlvdSBuZWVkIHRvIGJlDQp2ZXJ5IGNhcmVmdWwgaG93IHlvdSBkZWFs IHdpdGggY29uY3VycmVuY3kgd2l0aCB0aGUgc3RhY2suIEFzIENsYXVkaXUNCmV4cGxhaW5lZCBp biBncmVhdCBkZXRhaWwgdG8gbWUgd2hlbiBJIHdhcyBmaXJzdCBzdHVkeWluZyB0aGlzDQptZWNo YW5pc20sIHRoZSBkcml2ZXIgaXMgdGhlIHByb2R1Y2VyIG9mIHRoZXNlIFJYIHBhZ2VzIGFuZCB0 aGUgbmV0d29yaw0Kc3RhY2sgaXMgdGhlIGNvbnN1bWVyLiBBbmQgc2luY2UgdGhlIG5ldHdvcmsg c3RhY2sgd2lsbCBldmVudHVhbGx5IGNhbGwNCmtmcmVlX3NrYigpIGFmdGVyIGl0J3MgZG9uZSwg d2hpY2ggdWx0aW1hdGVseSByZXN1bHRzIGludG8gYSBwdXRfcGFnZSgpLA0KeW91IG5lZWQgdG8g Y291bnRlcmFjdCB0aGF0IGFjdGlvbiBhbmQgZW5zdXJlIHRoYXQgaWYgeW91IHdhbnQgdG8gcmVj eWNsZQ0KdGhlIG90aGVyIGhhbGYgb2YgdGhlIHBhZ2UsIHRoZSBwYWdlJ3MgcmVmY291bnQgbmV2 ZXIgcmVhY2hlcyB6ZXJvLg0KDQpBcyBhIHJlc3VsdCwgaWYgeW91IGRlZW0gdGhlIG90aGVyIHBh Z2UgaGFsZiBhcyBnb29kIGZvciByZWN5Y2xpbmcsIHlvdQ0KbmVlZCB0byBidW1wIHRoZSByZWZl cmVuY2UgY291bnQgb2YgdGhlIHBhZ2UgZnJvbSAxIHRvIDIuIFRoaXMgd2lsbCBtYWtlDQppdCBz YWZlIGZvciB5b3UgdG8gcmVmaWxsIHRoZSBEQ0IgcmluZyB3aXRoIHRoYXQgb3RoZXIgaGFsZi4N Cg0KT2YgY291cnNlLCB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgcGFnZSBtaWdodCBub3QgYmUgYXZh aWxhYmxlIGZvcg0KcmVjeWNsaW5nLCB0aGlzIGlzIHdoeSB0aGUgdGVjaG5pcXVlIGlzIHNwZWN1 bGF0aXZlLiBJZiB0aGUgc3RhY2sgaGFzbid0DQp5ZXQgY2FsbGVkIGtmcmVlX3NrYigpIG9uIHRo ZSBvdGhlciBoYWxmLCB0aGUgcGFnZSByZWZlcmVuY2UgY291bnQgd2lsbA0KYmUgMiBhdCB0aGUg dGltZSB5b3UncmUgY2xlYW5pbmcgdGhlIGJ1ZmZlciwgYW5kIGJhZCBsdWNrLCB5b3UgY2FuIG5v DQpsb25nZXIgcmV1c2UgdGhpcyBwYWdlLCBzbyB0aGUgZHJpdmVyIG5lZWRzIHRvIHRha2UgaXRz IGhhbmRzIG9mZiBvZiBpdC4NCg0KSWYgeW91IGxvb2sgYXQgZHJpdmVyIGltcGxlbWVudGF0aW9u cyBvZiB0aGUgaGFsZiBwYWdlIGZsaXAgaGV1cmlzdGljLA0KeW91J2xsIHNlZSB0aGF0ICJ0YWtp bmcgeW91ciBoYW5kcyBvZmYgdGhlIHBhZ2UiIG1lYW5zIHNpbXBseSB0byBETUENCnVubWFwIHRo ZSBlbnRpcmUgcGFnZS4gVGhpcyBtaWdodCBzdXJwcmlzZSB5b3UsIGFmdGVyIGFsbCwgdGhlIHJl ZmVyZW5jZQ0KY291bnQgb2YgdGhlIHBhZ2UgaXMgMiwgeW91IG1pZ2h0IHRoaW5rIHRoYXQgdGhl IHBhZ2Ugd2lsbCBsZWFrIGlmIHlvdQ0KZG9uJ3QgZGVjcmVtZW50IG9uZSBvZiB0aGUgcmVmZXJl bmNlcyBvbiBpdCwgb3Igc29tZXRoaW5nLiBCdXQgaWYgeW91DQp0aGluayBhYm91dCBpdCwgdGhl IHJlZmVyZW5jZSBjb3VudCBpcyAyIGJlY2F1c2Ugb25lIGhhbGYgaGFzIGFuIHNrYg0KYnVpbHQg YXQgYW4gZWFybGllciB0aW1lIGFyb3VuZCBpdCwgd2hpY2ggaXMgc3RpbGwgaW4gdGhlIG5ldHdv cmsgc3RhY2sNCnRoZXJlIHNvbWV3aGVyZSBwZW5kaW5nIGEga2ZyZWVfc2tiKCksIGFuZCB0aGUg b3RoZXIgaGFsZiBpcyB0aGUgYnVmZmVyDQp5b3UncmUgY2xlYW5pbmcgcmlnaHQgbm93LiBUaGlz IGhhbGYgaXMgcHJhY3RpY2FsbHkgcHJvbWlzZWQgdG8gdGhlDQpuZXR3b3JrIHN0YWNrLCB5b3Un bGwgY3JlYXRlIGFuIHNrYiBhcm91bmQgdGhpcyBoYWxmIHRvbywgYW5kIHRoZSBzdGFjaw0Kd2ls bCBrZnJlZSBpdCB0b28sIGFuZCB0aGUgcmVmY291bnQgb2YgdGhlIHBhZ2Ugd2lsbCB0aHVzIGRy b3AgdG8gemVyby4NCg0KT2YgY291cnNlLCB3aGVuIHlvdSBuZWVkIHRvIHJlZmlsbCB0aGUgUlgg cmluZyB3aXRoLCBzYXksIDMyIGJ1ZmZlcnMsDQp5b3UgbWlnaHQgZmluZCB0aGF0IChyaW5nLT5u ZXh0X3RvX2FsbG9jIC0gcmluZy0+bmV4dF90b191c2UpIG1vZCByaW5nIHNpemUNCmlzIGxlc3Mg dGhhbiAzMiAob3RoZXJ3aXNlIHNhaWQsIHRoZSBidWZmZXIgcmV1c2UgdGVjaG5pcXVlIGNvdWxk bid0DQpwcm92aWRlIGVub3VnaCBidWZmZXJzKS4gU28geW91IG5lZWQgdG8gYWxsb2MgYW5kIERN QSBtYXAgbmV3IHBhZ2VzIGZyb20NCnJpbmctPm5leHRfdG9fYWxsb2MgdXAgdG8gMzIgKGJ1dCB0 aGlzIGlzIHN0aWxsIGluIGNvbnRyYXN0IHdpdGggeW91cg0KY3VycmVudCBpbXBsZW1lbnRhdGlv biB3aGljaCBhbHdheXMgY2FsbHMgbmFwaV9hbGxvY19za2IgMzIgdGltZXMpLg0KTm9uZXRoZWxl c3MsIGluIG15IGV4cGVyaWVuY2UsIHRoZSB0ZWNobmlxdWUgd29ya3MgdmVyeSB3ZWxsIGluIHJl YWwNCmxpZmUgc2l0dWF0aW9ucyBhbmQgaXMgYSB2ZXJ5IGdvb2Qgd2F5IHRvIHJlZHVjZSB0aGUg cHJlc3N1cmUgb24gdGhlDQptZW1vcnkgYWxsb2NhdG9yIGFuZCBhdm9pZCBjb3N0bHkgRE1BIG1h cHBpbmcgYW5kIHVubWFwcGluZyBwZXIgcGFja2V0Lg0KU2luY2UgeW91J3ZlIGFscmVhZHkgd2Vu dCB0aHJvdWdoIHRoZSB0cm91YmxlIG9mIG1ha2luZyB0aGlzIGENCnJpbmctYmFzZWQgZHJpdmVy LCBJIGJlbGlldmUgeW91IHNob3VsZCB0cnkgdG8gaW1wbGVtZW50IGEgYnVmZmVyIHJldXNlDQp0 ZWNobmlxdWUgdG9vLCBlc3BlY2lhbGx5IGZvciB0aGlzIHBhcnRpY3VsYXIgY2FzZSBvZiBhIHZl cnkgc2xvdw0KcHJvY2Vzc29yLg0KDQo+ICsJCWlmICghc2tiKQ0KPiArCQkJZ290byBza2JfYWxs b2NfZmFpbGVkOw0KPiArDQo+ICsJCW9jZWxvdF9mZG1hX3J4X3NldF9za2IoZmRtYSwgZGNiLCBz a2IsIGZkbWEtPnJ4X2J1Zl9zaXplKTsNCj4gKw0KPiArCQlpZiAocHJldl9kY2IpDQo+ICsJCQlw cmV2X2RjYi0+aHctPmxscCA9IGRjYi0+aHdfZG1hOw0KPiArDQo+ICsJCXByZXZfZGNiID0gZGNi Ow0KPiArCX0NCj4gKw0KPiArCXJpbmctPmhlYWQgPSAwOw0KPiArCXJpbmctPnRhaWwgPSBPQ0VM T1RfRkRNQV9NQVhfRENCIC0gMTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtza2JfYWxs b2NfZmFpbGVkOg0KPiArCWZvciAoaSA9IDA7IGkgPCBPQ0VMT1RfRkRNQV9NQVhfRENCOyBpKysp IHsNCj4gKwkJZGNiID0gJnJpbmctPmRjYnNbaV07DQo+ICsJCWlmICghZGNiLT5za2IpDQo+ICsJ CQlicmVhazsNCj4gKw0KPiArCQlkZXZfa2ZyZWVfc2tiX2FueShkY2ItPnNrYik7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIC1FTk9NRU07DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgb2NlbG90 X2ZkbWFfcnhfaW5pdChzdHJ1Y3Qgb2NlbG90X2ZkbWEgKmZkbWEpDQo+ICt7DQo+ICsJaW50IHJl dDsNCj4gKw0KPiArCWZkbWEtPnJ4X2J1Zl9zaXplID0gb2NlbG90X2ZkbWFfcnhfYnVmX3NpemUo T0NFTE9UX0ZETUFfUlhfTVRVKTsNCj4gKw0KPiArCXJldCA9IG9jZWxvdF9mZG1hX3J4X3NrYl9h bGxvYyhmZG1hKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCW5ldGlmX25hcGlfZGVsKCZmZG1hLT5u YXBpKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwluYXBpX2VuYWJsZSgmZmRt YS0+bmFwaSk7DQo+ICsNCj4gKwlvY2Vsb3RfZmRtYV9hY3RpdmF0ZV9jaGFuKGZkbWEsICZmZG1h LT54dHIuZGNic1swXSwNCj4gKwkJCQkgIE1TQ0NfRkRNQV9YVFJfQ0hBTik7DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArdm9pZCBvY2Vsb3RfZmRtYV9uZXRkZXZfaW5pdChzdHJ1 Y3Qgb2NlbG90X2ZkbWEgKmZkbWEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJ ZGV2LT5uZWVkZWRfaGVhZHJvb20gPSBPQ0VMT1RfVEFHX0xFTjsNCj4gKwlkZXYtPm5lZWRlZF90 YWlscm9vbSA9IEVUSF9GQ1NfTEVOOw0KDQpUaGUgbmVlZGVkX2hlYWRyb29tIGlzIGluIG5vIHdh eSBzcGVjaWZpYyB0byBGRE1BLCByaWdodD8gV2h5IGFyZW4ndCB5b3UNCmRvaW5nIGl0IGZvciBt YW51YWwgcmVnaXN0ZXItYmFzZWQgaW5qZWN0aW9uIHRvbz8gKGluIGEgc2VwYXJhdGUgcGF0Y2gg b2ZjKQ0KDQo+ICsNCj4gKwlpZiAoZmRtYS0+bmRldikNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJ ZmRtYS0+bmRldiA9IGRldjsNCj4gKwluZXRpZl9uYXBpX2FkZChkZXYsICZmZG1hLT5uYXBpLCBv Y2Vsb3RfZmRtYV9uYXBpX3BvbGwsDQo+ICsJCSAgICAgICBPQ0VMT1RfRkRNQV9XRUlHSFQpOw0K DQpJIHVuZGVyc3RhbmQgdGhhdCBOQVBJIGlzIHBlciBuZXRkZXYgYnV0IHlvdSBoYXZlIGEgc2lu Z2xlIGludGVycnVwdCBzbw0KeW91IG5lZWQgdG8gc2hhcmUgdGhlIE5BUEkgaW5zdGFuY2UgZm9y IGFsbCBwb3J0cy4gVGhhdCBpcyBmaW5lLg0KQnV0IGRhbmdlciBhaGVhZCwgc2VlIHRoaXM6DQoN Cm1zY2Nfb2NlbG90X2luaXRfcG9ydHMoKSBkb2VzOg0KDQoJCWVyciA9IG9jZWxvdF9wcm9iZV9w b3J0KG9jZWxvdCwgcG9ydCwgdGFyZ2V0LCBwb3J0bnApOw0KCQlpZiAoZXJyKSB7DQoJCQlvY2Vs b3RfcG9ydF9kZXZsaW5rX3RlYXJkb3duKG9jZWxvdCwgcG9ydCk7DQoJCQljb250aW51ZTsNCgkJ fQ0KDQpha2EgaXQgc2tpcHMgb3ZlciBwb3J0cyB0aGF0IGZhaWxlZCB0byBwcm9iZS4NCkFuZCBv Y2Vsb3RfcHJvYmVfcG9ydCBkb2VzOg0KDQoJaWYgKG9jZWxvdC0+ZmRtYSkNCgkJb2NlbG90X2Zk bWFfbmV0ZGV2X2luaXQob2NlbG90LT5mZG1hLCBkZXYpOw0KDQoJZXJyID0gcmVnaXN0ZXJfbmV0 ZGV2KGRldik7DQoJaWYgKGVycikgew0KCQlkZXZfZXJyKG9jZWxvdC0+ZGV2LCAicmVnaXN0ZXJf bmV0ZGV2IGZhaWxlZFxuIik7DQoJCWdvdG8gb3V0Ow0KCX0NCg0KU28gaWYgcmVnaXN0ZXJfbmV0 ZGV2KCkgZmFpbHMsIHlvdSB3aWxsIGhhdmUgYSBkYW5nbGluZywgZnJlZWQgcG9pbnRlcg0KaW5z aWRlIGZkbWEtPm5kZXYuIFRoYXQgaXMgbm90IGdvb2QsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBU cnkgdG8gbWFrZQ0KdGhlIHByb2Jpbmcgb2YgeW91ciBmaXJzdCBwb3J0IGZhaWwgYXQgcmVnaXN0 ZXJfbmV0ZGV2KCkgdGltZSwgdG8gc2VlDQp3aGF0IEkgbWVhbi4NCg0KPiArfQ0KPiArDQo+ICt2 b2lkIG9jZWxvdF9mZG1hX25ldGRldl9kZWluaXQoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hLCBz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiArew0KPiArCWlmIChkZXYgPT0gZmRtYS0+bmRldikN Cj4gKwkJbmV0aWZfbmFwaV9kZWwoJmZkbWEtPm5hcGkpOw0KPiArfQ0KPiArDQo+ICtzdHJ1Y3Qg b2NlbG90X2ZkbWEgKm9jZWxvdF9mZG1hX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwNCj4gKwkJCQkgICAgIHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg b2NlbG90X2ZkbWEgKmZkbWE7DQo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOw0KPiArCWludCByZXQ7 DQo+ICsNCj4gKwliYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShw ZGV2LCAiZmRtYSIpOw0KPiArCWlmIChJU19FUlJfT1JfTlVMTChiYXNlKSkNCj4gKwkJcmV0dXJu IE5VTEw7DQo+ICsNCj4gKwlmZG1hID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigq ZmRtYSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghZmRtYSkNCj4gKwkJZ290byBlcnJfcmVsZWFz ZV9yZXNvdXJjZTsNCj4gKw0KPiArCWZkbWEtPm9jZWxvdCA9IG9jZWxvdDsNCj4gKwlmZG1hLT5i YXNlID0gYmFzZTsNCj4gKwlmZG1hLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiArCWZkbWEtPmRldi0+ Y29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOw0KPiArDQo+ICsJb2NlbG90X2Zk bWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0VOQSwgMCk7DQo+ICsNCj4gKwlmZG1hLT5p cnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZmRtYSIpOw0KPiArCXJldCA9IGRl dm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZmRtYS0+aXJxLCBvY2Vsb3RfZmRtYV9pbnRlcnJ1 cHQsIDAsDQo+ICsJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIGZkbWEpOw0KPiArCWlm IChyZXQpDQo+ICsJCWdvdG8gZXJyX2ZyZWVfZmRtYTsNCj4gKw0KPiArCXJldCA9IG9jZWxvdF9m ZG1hX3JpbmdfYWxsb2MoZmRtYSwgJmZkbWEtPmluaik7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290 byBlcnJfZnJlZV9pcnE7DQo+ICsNCj4gKwlyZXQgPSBvY2Vsb3RfZmRtYV9yaW5nX2FsbG9jKGZk bWEsICZmZG1hLT54dHIpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gZnJlZV9pbmpfcmluZzsN Cj4gKw0KPiArCXJldHVybiBmZG1hOw0KPiArDQo+ICtmcmVlX2lual9yaW5nOg0KPiArCW9jZWxv dF9mZG1hX3JpbmdfZnJlZShmZG1hLCAmZmRtYS0+aW5qKTsNCj4gK2Vycl9mcmVlX2lycToNCj4g KwlkZXZtX2ZyZWVfaXJxKCZwZGV2LT5kZXYsIGZkbWEtPmlycSwgZmRtYSk7DQo+ICtlcnJfZnJl ZV9mZG1hOg0KPiArCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZmRtYSk7DQo+ICtlcnJfcmVsZWFz ZV9yZXNvdXJjZToNCj4gKwlkZXZtX2lvdW5tYXAoJnBkZXYtPmRldiwgYmFzZSk7DQo+ICsNCj4g KwlyZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiAraW50IG9jZWxvdF9mZG1hX3N0YXJ0KHN0cnVj dCBvY2Vsb3RfZmRtYSAqZmRtYSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBm ZG1hLT5vY2Vsb3Q7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IG9jZWxvdF9mZG1hX3J4 X2luaXQoZmRtYSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4g KwkvKiBSZWNvbmZpZ3VyZSBmb3IgZXh0cmFjdGlvbiBhbmQgaW5qZWN0aW9uIHVzaW5nIERNQSAq Lw0KPiArCW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCBRU19JTkpfR1JQX0NGR19NT0RFKDIpLCBR U19JTkpfR1JQX0NGRywgMCk7DQo+ICsJb2NlbG90X3dyaXRlX3JpeChvY2Vsb3QsIFFTX0lOSl9D VFJMX0dBUF9TSVpFKDApLCBRU19JTkpfQ1RSTCwgMCk7DQo+ICsNCj4gKwlvY2Vsb3Rfd3JpdGVf cml4KG9jZWxvdCwgUVNfWFRSX0dSUF9DRkdfTU9ERSgyKSwgUVNfWFRSX0dSUF9DRkcsIDApOw0K PiArDQo+ICsJb2NlbG90X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0xMUCwgMHhm ZmZmZmZmZik7DQo+ICsJb2NlbG90X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0ZS TSwgMHhmZmZmZmZmZik7DQo+ICsNCj4gKwlvY2Vsb3RfZmRtYV93cml0ZWwoZmRtYSwgTVNDQ19G RE1BX0lOVFJfTExQX0VOQSwNCj4gKwkJCSAgIEJJVChNU0NDX0ZETUFfSU5KX0NIQU4pIHwgQklU KE1TQ0NfRkRNQV9YVFJfQ0hBTikpOw0KPiArCW9jZWxvdF9mZG1hX3dyaXRlbChmZG1hLCBNU0ND X0ZETUFfSU5UUl9GUk1fRU5BLCBCSVQoTVNDQ19GRE1BX1hUUl9DSEFOKSk7DQo+ICsJb2NlbG90 X2ZkbWFfd3JpdGVsKGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0VOQSwNCj4gKwkJCSAgIEJJVChNU0ND X0ZETUFfSU5KX0NIQU4pIHwgQklUKE1TQ0NfRkRNQV9YVFJfQ0hBTikpOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludCBvY2Vsb3RfZmRtYV9zdG9wKHN0cnVjdCBvY2Vsb3Rf ZmRtYSAqZmRtYSkNCg0KVGhpcyBzaG91bGQgcmV0dXJuIHZvaWQuDQoNCj4gK3sNCj4gKwlzdHJ1 Y3Qgb2NlbG90X2ZkbWFfcmluZyAqcmluZyA9ICZmZG1hLT54dHI7DQo+ICsJc3RydWN0IG9jZWxv dF9mZG1hX2RjYiAqZGNiOw0KPiArCWludCBpOw0KPiArDQo+ICsJb2NlbG90X2ZkbWFfd3JpdGVs KGZkbWEsIE1TQ0NfRkRNQV9JTlRSX0VOQSwgMCk7DQo+ICsNCj4gKwlvY2Vsb3RfZmRtYV9zdG9w X2NoYW5uZWwoZmRtYSwgTVNDQ19GRE1BX1hUUl9DSEFOKTsNCj4gKwlvY2Vsb3RfZmRtYV9zdG9w X2NoYW5uZWwoZmRtYSwgTVNDQ19GRE1BX0lOSl9DSEFOKTsNCj4gKw0KPiArCS8qIEZyZWUgdGhl IFNLQiBob2xkIGluIHRoZSBleHRyYWN0aW9uIHJpbmcgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwg T0NFTE9UX0ZETUFfTUFYX0RDQjsgaSsrKSB7DQo+ICsJCWRjYiA9ICZyaW5nLT5kY2JzW2ldOw0K PiArCQlkZXZfa2ZyZWVfc2tiX2FueShkY2ItPnNrYik7DQo+ICsJfQ0KPiArDQo+ICsJbmFwaV9z eW5jaHJvbml6ZSgmZmRtYS0+bmFwaSk7DQo+ICsJbmFwaV9kaXNhYmxlKCZmZG1hLT5uYXBpKTsN Cj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRo ZXJuZXQvbXNjYy9vY2Vsb3RfZmRtYS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vs b3RfZmRtYS5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4u YjZmMWRkYTBlMGM3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbXNjYy9vY2Vsb3RfZmRtYS5oDQo+IEBAIC0wLDAgKzEsOTYgQEANCj4gKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpICovDQo+ICsvKg0KPiArICogTWljcm9z ZW1pIFNvQ3MgRkRNQSBkcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWlj cm9jaGlwDQo+ICsgKi8NCj4gKyNpZm5kZWYgX01TQ0NfT0NFTE9UX0ZETUFfSF8NCj4gKyNkZWZp bmUgX01TQ0NfT0NFTE9UX0ZETUFfSF8NCj4gKw0KPiArI2luY2x1ZGUgIm9jZWxvdC5oIg0KPiAr DQo+ICsjZGVmaW5lIE9DRUxPVF9GRE1BX01BWF9EQ0IJCTEyOA0KPiArLyogKzQgYWxsb3dzIGZv ciB3b3JkIGFsaWdubWVudCBhZnRlciBhbGxvY2F0aW9uICovDQo+ICsjZGVmaW5lIE9DRUxPVF9E Q0JTX0hXX0FMTE9DX1NJWkUJKE9DRUxPVF9GRE1BX01BWF9EQ0IgKiBcDQo+ICsJCQkJCSBzaXpl b2Yoc3RydWN0IG9jZWxvdF9mZG1hX2RjYl9od192MikgKyBcDQo+ICsJCQkJCSA0KQ0KPiArDQo+ ICtzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiX2h3X3YyIHsNCj4gKwl1MzIgbGxwOw0KPiArCXUzMiBk YXRhcDsNCj4gKwl1MzIgZGF0YWw7DQo+ICsJdTMyIHN0YXQ7DQo+ICt9Ow0KDQpDb3VsZCB5b3Ug ZGVjbGFyZSB0aGlzIHVzaW5nIF9fYXR0cmlidXRlKChwYWNrZWQpKSB0byBzaG93IHRoYXQgeW91 J3JlDQptYXBwaW5nIGl0IG92ZXIgaGFyZHdhcmU/DQoNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1 Y3Qgb2NlbG90X2ZkbWFfZGNiIC0gU29mdHdhcmUgRENCcyBkZXNjcmlwdGlvbg0KPiArICoNCj4g KyAqIEBodzogaGFyZHdhcmUgRENCIHVzZWQgYnkgaGFyZHdhcmUoY29oZXJlbnQgbWVtb3J5KQ0K PiArICogQGh3X2RtYTogRE1BIGFkZHJlc3Mgb2YgdGhlIERDQg0KPiArICogQHNrYjogc2tiIGFz c29jaWF0ZWQgd2l0aCB0aGUgRENCDQo+ICsgKiBAbWFwcGluZzogQWRkcmVzcyBvZiB0aGUgc2ti IGRhdGEgbWFwcGluZw0KPiArICogQG1hcHBlZF9zaXplOiBNYXBwZWQgc2l6ZQ0KPiArICovDQo+ ICtzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiIHsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWFfZGNiX2h3 X3YyCSpodzsNCj4gKwlkbWFfYWRkcl90CQkJaHdfZG1hOw0KPiArCXN0cnVjdCBza19idWZmCQkJ KnNrYjsNCj4gKwlkbWFfYWRkcl90CQkJbWFwcGluZzsNCj4gKwlzaXplX3QJCQkJbWFwcGVkX3Np emU7DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBvY2Vsb3RfZmRtYV9yaW5nIC0g IlJpbmciIGRlc2NyaXB0aW9uIG9mIERDQnMNCj4gKyAqDQo+ICsgKiBAaHdfZGNiczogSGFyZHdh cmUgRENCcyBhbGxvY2F0ZWQgZm9yIHRoZSByaW5nDQo+ICsgKiBAaHdfZGNic19kbWE6IERNQSBh ZGRyZXNzIG9mIHRoZSBEQ0JzDQo+ICsgKiBAZGNiczogTGlzdCBvZiBzb2Z0d2FyZSBEQ0JzDQo+ ICsgKiBAaGVhZDogcG9pbnRlciB0byBmaXJzdCBhdmFpbGFibGUgRENCDQo+ICsgKiBAdGFpbDog cG9pbnRlciB0byBsYXN0IGF2YWlsYWJsZSBEQ0INCj4gKyAqLw0KPiArc3RydWN0IG9jZWxvdF9m ZG1hX3Jpbmcgew0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9kY2JfaHdfdjIJKmh3X2RjYnM7DQo+ ICsJZG1hX2FkZHJfdAkJCWh3X2RjYnNfZG1hOw0KPiArCXN0cnVjdCBvY2Vsb3RfZmRtYV9kY2IJ CWRjYnNbT0NFTE9UX0ZETUFfTUFYX0RDQl07DQo+ICsJdW5zaWduZWQgaW50CQkJaGVhZDsNCj4g Kwl1bnNpZ25lZCBpbnQJCQl0YWlsOw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3Qg b2NlbG90X2ZkbWEgLSBGTURBIHN0cnVjdA0KDQpzL0ZNREEvRkRNQS8NCg0KPiArICoNCj4gKyAq IEBvY2Vsb3Q6IFBvaW50ZXIgdG8gb2NlbG90IHN0cnVjdA0KPiArICogQGJhc2U6IGJhc2UgYWRk cmVzcyBvZiBGRE1BIHJlZ2lzdGVycw0KPiArICogQGlycTogRkRNQSBpbnRlcnJ1cHQNCj4gKyAq IEBkZXY6IE9jZWxvdCBkZXZpY2UNCj4gKyAqIEBuYXBpOiBuYXBpIGhhbmRsZQ0KPiArICogQHJ4 X2J1Zl9zaXplOiBTaXplIG9mIFJYIGJ1ZmZlcg0KPiArICogQGluajogSW5qZWN0aW9uIHJpbmcN Cj4gKyAqIEB4dHI6IEV4dHJhY3Rpb24gcmluZw0KPiArICogQHhtaXRfbG9jazogWG1pdCBsb2Nr DQo+ICsgKg0KPiArICovDQo+ICtzdHJ1Y3Qgb2NlbG90X2ZkbWEgew0KPiArCXN0cnVjdCBvY2Vs b3QJCQkqb2NlbG90Ow0KDQpUbyBtZSwgdGhpcyBzdHJ1Y3R1cmUgb3JnYW5pemF0aW9uIGluIHdo aWNoICJzdHJ1Y3Qgb2NlbG90X2ZkbWEgKiIgaXMNCnBhc3NlZCBhcyBhcmd1bWVudCB0byBhbGwg RkRNQSBmdW5jdGlvbnMsIGluc3RlYWQgb2YgInN0cnVjdCBvY2Vsb3QgKiIsDQppcyBzdHJhbmdl LCBhbmQgbGVhZHMgdG8gb2RkaXRpZXMgc3VjaCBhcyB0aGlzIGJhY2twb2ludGVyIHJpZ2h0IGhl cmUuDQpEbyBpdCBpbiB3aGljaGV2ZXIgd2F5IHlvdSB3YW50LCBJJ20ganVzdCBwb2ludGluZyB0 aGlzIG91dC4NCg0KPiArCXZvaWQgX19pb21lbQkJCSpiYXNlOw0KPiArCWludAkJCQlpcnE7DQo+ ICsJc3RydWN0IGRldmljZQkJCSpkZXY7DQo+ICsJc3RydWN0IG5hcGlfc3RydWN0CQluYXBpOw0K PiArCXN0cnVjdCBuZXRfZGV2aWNlCQkqbmRldjsNCj4gKwlzaXplX3QJCQkJcnhfYnVmX3NpemU7 DQo+ICsJc3RydWN0IG9jZWxvdF9mZG1hX3JpbmcJCWluajsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2Zk bWFfcmluZwkJeHRyOw0KPiArCXNwaW5sb2NrX3QJCQl4bWl0X2xvY2s7DQo+ICt9Ow0KPiArDQo+ ICtzdHJ1Y3Qgb2NlbG90X2ZkbWEgKm9jZWxvdF9mZG1hX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwNCj4gKwkJCQkgICAgIHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCk7DQo+ICtpbnQg b2NlbG90X2ZkbWFfc3RhcnQoc3RydWN0IG9jZWxvdF9mZG1hICpmZG1hKTsNCj4gK2ludCBvY2Vs b3RfZmRtYV9zdG9wKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSk7DQo+ICtpbnQgb2NlbG90X2Zk bWFfaW5qZWN0X2ZyYW1lKHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwgaW50IHBvcnQsIHUzMiBy ZXdfb3AsDQo+ICsJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpOw0KPiArdm9pZCBvY2Vsb3RfZmRtYV9uZXRkZXZfaW5pdChzdHJ1Y3Qgb2NlbG90X2Zk bWEgKmZkbWEsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPiArdm9pZCBvY2Vsb3RfZmRtYV9u ZXRkZXZfZGVpbml0KHN0cnVjdCBvY2Vsb3RfZmRtYSAqZmRtYSwNCj4gKwkJCSAgICAgICBzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L21zY2Mvb2NlbG90X25ldC5jDQo+IGluZGV4IGI1ODlhZTk1ZTI5Yi4uOWRjYWY0MjFkYTEyIDEw MDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYw0KPiAr KysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9uZXQuYw0KPiBAQCAtMTUsNiAr MTUsNyBAQA0KPiAgI2luY2x1ZGUgPG5ldC9wa3RfY2xzLmg+DQo+ICAjaW5jbHVkZSAib2NlbG90 LmgiDQo+ICAjaW5jbHVkZSAib2NlbG90X3ZjYXAuaCINCj4gKyNpbmNsdWRlICJvY2Vsb3RfZmRt YS5oIg0KPiAgDQo+ICAjZGVmaW5lIE9DRUxPVF9NQUNfUVVJUktTCU9DRUxPVF9RVUlSS19RU0dN SUlfUE9SVFNfTVVTVF9CRV9VUA0KPiAgDQo+IEBAIC00NTcsNyArNDU4LDcgQEAgc3RhdGljIG5l dGRldl90eF90IG9jZWxvdF9wb3J0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5l dF9kZXZpY2UgKmRldikNCj4gIAlpbnQgcG9ydCA9IHByaXYtPmNoaXBfcG9ydDsNCj4gIAl1MzIg cmV3X29wID0gMDsNCj4gIA0KPiAtCWlmICghb2NlbG90X2Nhbl9pbmplY3Qob2NlbG90LCAwKSkN Cj4gKwlpZiAoIW9jZWxvdC0+ZmRtYSAmJiAhb2NlbG90X2Nhbl9pbmplY3Qob2NlbG90LCAwKSkN Cj4gIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOw0KPiAgDQo+ICAJLyogQ2hlY2sgaWYgdGltZXN0 YW1waW5nIGlzIG5lZWRlZCAqLw0KPiBAQCAtNDc1LDkgKzQ3NiwxMyBAQCBzdGF0aWMgbmV0ZGV2 X3R4X3Qgb2NlbG90X3BvcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQ0KPiAgCQlyZXdfb3AgPSBvY2Vsb3RfcHRwX3Jld19vcChza2IpOw0KPiAgCX0N Cj4gIA0KPiAtCW9jZWxvdF9wb3J0X2luamVjdF9mcmFtZShvY2Vsb3QsIHBvcnQsIDAsIHJld19v cCwgc2tiKTsNCj4gKwlpZiAob2NlbG90LT5mZG1hKSB7DQo+ICsJCW9jZWxvdF9mZG1hX2luamVj dF9mcmFtZShvY2Vsb3QtPmZkbWEsIHBvcnQsIHJld19vcCwgc2tiLCBkZXYpOw0KPiArCX0gZWxz ZSB7DQo+ICsJCW9jZWxvdF9wb3J0X2luamVjdF9mcmFtZShvY2Vsb3QsIHBvcnQsIDAsIHJld19v cCwgc2tiKTsNCg0KSSBjYW4ndCBoZWxwIGJ1dCB0aGluayBob3cgcGFpbmZ1bCBpdCBpcyB0aGF0 IHdpdGggYSBDUFUgYXMgc2xvdyBhcw0KeW91cnMsIGluc3VsdCBvdmVyIGluanVyeSwgeW91IGFs c28gbmVlZCB0byBjaGVjayBmb3IgZWFjaCBwYWNrZXQNCndoZXRoZXIgdGhlIGRldmljZSB0cmVl IGhhZCBkZWZpbmVkIHRoZSAiZmRtYSIgcmVnaW9uIG9yIG5vdCwgYmVjYXVzZQ0KeW91IHByYWN0 aWNhbGx5IGtlZXAgdHdvIHRyYWZmaWMgSS9PIGltcGxlbWVudGF0aW9ucyBkdWUgdG8gdGhhdCBz b2xlDQpyZWFzb24uIEkgdGhpbmsgZm9yIHRoZSBvY2Vsb3Qgc3dpdGNoZGV2IGRyaXZlciwgd2hp Y2ggaXMgc3RyaWN0bHkgZm9yDQpNSVBTIENQVXMgZW1iZWRkZWQgd2l0aGluIHRoZSBkZXZpY2Us IGl0IHNob3VsZCBiZSBmaW5lIHRvIGludHJvZHVjZSBhDQpzdGF0aWMga2V5IGhlcmUgKHNlYXJj aCBmb3Igc3RhdGljX2JyYW5jaF9saWtlbHkgaW4gdGhlIGtlcm5lbCkuDQoNCj4gIA0KPiAtCWtm cmVlX3NrYihza2IpOw0KPiArCQljb25zdW1lX3NrYihza2IpOw0KPiArCX0NCj4gIA0KPiAgCXJl dHVybiBORVRERVZfVFhfT0s7DQo+ICB9DQo+IEBAIC0xNzE3LDYgKzE3MjIsOSBAQCBpbnQgb2Nl bG90X3Byb2JlX3BvcnQoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgcG9ydCwgc3RydWN0IHJl Z21hcCAqdGFyZ2V0LA0KPiAgCWlmIChlcnIpDQo+ICAJCWdvdG8gb3V0Ow0KPiAgDQo+ICsJaWYg KG9jZWxvdC0+ZmRtYSkNCj4gKwkJb2NlbG90X2ZkbWFfbmV0ZGV2X2luaXQob2NlbG90LT5mZG1h LCBkZXYpOw0KPiArDQo+ICAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7DQo+ICAJaWYgKGVy cikgew0KPiAgCQlkZXZfZXJyKG9jZWxvdC0+ZGV2LCAicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZFxu Iik7DQo+IEBAIC0xNzM3LDkgKzE3NDUsMTMgQEAgdm9pZCBvY2Vsb3RfcmVsZWFzZV9wb3J0KHN0 cnVjdCBvY2Vsb3RfcG9ydCAqb2NlbG90X3BvcnQpDQo+ICAJc3RydWN0IG9jZWxvdF9wb3J0X3By aXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yob2NlbG90X3BvcnQsDQo+ICAJCQkJCQlzdHJ1Y3Qg b2NlbG90X3BvcnRfcHJpdmF0ZSwNCj4gIAkJCQkJCXBvcnQpOw0KPiArCXN0cnVjdCBvY2Vsb3Rf ZmRtYSAqZmRtYSA9IG9jZWxvdF9wb3J0LT5vY2Vsb3QtPmZkbWE7DQo+ICANCj4gIAl1bnJlZ2lz dGVyX25ldGRldihwcml2LT5kZXYpOw0KPiAgDQo+ICsJaWYgKGZkbWEpDQo+ICsJCW9jZWxvdF9m ZG1hX25ldGRldl9kZWluaXQoZmRtYSwgcHJpdi0+ZGV2KTsNCj4gKw0KPiAgCWlmIChwcml2LT5w aHlsaW5rKSB7DQo+ICAJCXJ0bmxfbG9jaygpOw0KPiAgCQlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5 KHByaXYtPnBoeWxpbmspOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNj Yy9vY2Vsb3RfdnNjNzUxNC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNj NzUxNC5jDQo+IGluZGV4IDM4MTAzYjAyNTViMC4uZmE2OGViMjNhMzMzIDEwMDY0NA0KPiAtLS0g YS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF92c2M3NTE0LmMNCj4gKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3RfdnNjNzUxNC5jDQo+IEBAIC0xOCw2ICsxOCw3 IEBADQo+ICANCj4gICNpbmNsdWRlIDxzb2MvbXNjYy9vY2Vsb3RfdmNhcC5oPg0KPiAgI2luY2x1 ZGUgPHNvYy9tc2NjL29jZWxvdF9oc2lvLmg+DQo+ICsjaW5jbHVkZSAib2NlbG90X2ZkbWEuaCIN Cj4gICNpbmNsdWRlICJvY2Vsb3QuaCINCj4gIA0KPiAgc3RhdGljIGNvbnN0IHUzMiBvY2Vsb3Rf YW5hX3JlZ21hcFtdID0gew0KPiBAQCAtMTA4MCw2ICsxMDgxLDEwIEBAIHN0YXRpYyBpbnQgbXNj Y19vY2Vsb3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gIAkJb2NlbG90 LT50YXJnZXRzW2lvX3RhcmdldFtpXS5pZF0gPSB0YXJnZXQ7DQo+ICAJfQ0KPiAgDQo+ICsJb2Nl bG90LT5mZG1hID0gb2NlbG90X2ZkbWFfaW5pdChwZGV2LCBvY2Vsb3QpOw0KPiArCWlmIChJU19F UlIob2NlbG90LT5mZG1hKSkNCj4gKwkJb2NlbG90LT5mZG1hID0gTlVMTDsNCj4gKw0KPiAgCWhz aW8gPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9jb21wYXRpYmxlKCJtc2NjLG9jZWxvdC1oc2lv Iik7DQo+ICAJaWYgKElTX0VSUihoc2lvKSkgew0KPiAgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJt aXNzaW5nIGhzaW8gc3lzY29uXG4iKTsNCj4gQEAgLTExMzksNiArMTE0NCwxMiBAQCBzdGF0aWMg aW50IG1zY2Nfb2NlbG90X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICAJ aWYgKGVycikNCj4gIAkJZ290byBvdXRfb2NlbG90X2RldmxpbmtfdW5yZWdpc3RlcjsNCj4gIA0K PiArCWlmIChvY2Vsb3QtPmZkbWEpIHsNCj4gKwkJZXJyID0gb2NlbG90X2ZkbWFfc3RhcnQob2Nl bG90LT5mZG1hKTsNCj4gKwkJaWYgKGVycikNCj4gKwkJCWdvdG8gb3V0X29jZWxvdF9yZWxlYXNl X3BvcnRzOw0KPiArCX0NCj4gKw0KPiAgCWVyciA9IG9jZWxvdF9kZXZsaW5rX3NiX3JlZ2lzdGVy KG9jZWxvdCk7DQo+ICAJaWYgKGVycikNCj4gIAkJZ290byBvdXRfb2NlbG90X3JlbGVhc2VfcG9y dHM7DQo+IEBAIC0xMTc5LDYgKzExOTAsOCBAQCBzdGF0aWMgaW50IG1zY2Nfb2NlbG90X3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiAgew0KPiAgCXN0cnVjdCBvY2Vsb3Qg Km9jZWxvdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiAgDQo+ICsJaWYgKG9jZWxv dC0+ZmRtYSkNCj4gKwkJb2NlbG90X2ZkbWFfc3RvcChvY2Vsb3QtPmZkbWEpOw0KPiAgCWRldmxp bmtfdW5yZWdpc3RlcihvY2Vsb3QtPmRldmxpbmspOw0KPiAgCW9jZWxvdF9kZWluaXRfdGltZXN0 YW1wKG9jZWxvdCk7DQo+ICAJb2NlbG90X2Rldmxpbmtfc2JfdW5yZWdpc3RlcihvY2Vsb3QpOw0K PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb2MvbXNjYy9vY2Vsb3QuaCBiL2luY2x1ZGUvc29jL21z Y2Mvb2NlbG90LmgNCj4gaW5kZXggYjMzODFjOTBmZjNlLi4zNTFhYjM4NWFiOTggMTAwNjQ0DQo+ IC0tLSBhL2luY2x1ZGUvc29jL21zY2Mvb2NlbG90LmgNCj4gKysrIGIvaW5jbHVkZS9zb2MvbXNj Yy9vY2Vsb3QuaA0KPiBAQCAtNjk1LDYgKzY5NSw4IEBAIHN0cnVjdCBvY2Vsb3Qgew0KPiAgCS8q IFByb3RlY3RzIHRoZSBQVFAgY2xvY2sgKi8NCj4gIAlzcGlubG9ja190CQkJcHRwX2Nsb2NrX2xv Y2s7DQo+ICAJc3RydWN0IHB0cF9waW5fZGVzYwkJcHRwX3BpbnNbT0NFTE9UX1BUUF9QSU5TX05V TV07DQo+ICsNCj4gKwlzdHJ1Y3Qgb2NlbG90X2ZkbWEJCSpmZG1hOw0KPiAgfTsNCj4gIA0KPiAg c3RydWN0IG9jZWxvdF9wb2xpY2VyIHsNCj4gQEAgLTc2MSw2ICs3NjMsOCBAQCB2b2lkIG9jZWxv dF9pZmhfcG9ydF9zZXQodm9pZCAqaWZoLCBzdHJ1Y3Qgb2NlbG90X3BvcnQgKnBvcnQsIHUzMiBy ZXdfb3AsDQo+ICAJCQkgdTMyIHZsYW5fdGFnKTsNCj4gIGludCBvY2Vsb3RfeHRyX3BvbGxfZnJh bWUoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBpbnQgZ3JwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYik7 DQo+ICB2b2lkIG9jZWxvdF9kcmFpbl9jcHVfcXVldWUoc3RydWN0IG9jZWxvdCAqb2NlbG90LCBp bnQgZ3JwKTsNCj4gK3ZvaWQgb2NlbG90X3B0cF9yeF90aW1lc3RhbXAoc3RydWN0IG9jZWxvdCAq b2NlbG90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KPiArCQkJICAgICB1NjQgdGltZXN0YW1wKTsN Cj4gIA0KPiAgLyogSGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gKi8NCj4gIGludCBvY2Vsb3RfcmVn ZmllbGRzX2luaXQoc3RydWN0IG9jZWxvdCAqb2NlbG90LA0KPiAtLSANCj4gMi4zMy4xDQo+