From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B284C433EF for ; Thu, 2 Dec 2021 10:07:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356722AbhLBKKa (ORCPT ); Thu, 2 Dec 2021 05:10:30 -0500 Received: from mail-eopbgr30084.outbound.protection.outlook.com ([40.107.3.84]:53327 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1346218AbhLBKK2 (ORCPT ); Thu, 2 Dec 2021 05:10:28 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VroQ6PzgCnOexNafil5Hx6i6Hwz9dekb6A7Bz8kFbe1Ta66Y0ZSmnSGYPC2qSZOpEIZJvu/KWSFkGjM4xaexy7QwBSxjUJKqjTt5oMTbSh4dl+Aqz/Vyr3sV9QL00gkBTGXK8i/8dvSripfMsKeRoZ+8REOPlvRdqCelHbrfYNV4h+OtgOuANlJxhQSwTlxdI+1BNOpR/VtFy5HyloGYwYspNRvq9SPoVB8Duyk0/4G3L/LLrpWtzEHlmH+mesrGgWhL06+TK9K2Mr7pjOkxEGDOyyYMUc0sAV0fnN62oDRvkvKYXUYwwyJ3LtuystYTQdKUc/BrFzVKVQ9senxEkw== 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=+wGOLVvxXBEUjwSOIGZmqcv3VQ7Topd029ZEIlR5aak=; b=czB1WRj2MHNnMeX1kfNnrocvST3QEOzLb5Sbui6tWvToot0TsJcWvR2AZ+MBWxCRTQyntxYzOOSg1fDW4uVw/yCBoaXR9qZLxOWo+Fje52CnHjowb4QvaUcjx0WSl1LV6QLutECJGG+cq4CrdHRWfCUPcDOlLacPN+i3G7sj99/p5yYgk6lGvKcNzx0pLP1S0TarSgCAtL3VLUOuh6QRlNcnurg7pGb+zs3VumMQ3xkptIGIgX9dxnrmeUAfq9dMf+04NvPjUF1ZCQwxabvWdHbSugpC5ordm5Lw5qLOiasT+4IcQ33TOo+dkDbnLaS8AWaonKreI7wBXROksLUeCw== 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=+wGOLVvxXBEUjwSOIGZmqcv3VQ7Topd029ZEIlR5aak=; b=UQxd2NtOHlVP7eIK7EUZGLJKJsAibYeJW7eP00GyfjxoFJgVdIH/ihqOt7W0C2ruYumbK7GJzMdvHCkFeUw6dGzqRK3OKtqtt8sXoSga35j2359snAE2cTif+YCGSwmGmofFEkUc9waDh43lWqjLm1F2k9N27zd6NaTkAx146pw= Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) by AM6PR04MB4790.eurprd04.prod.outlook.com (2603:10a6:20b:10::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23; Thu, 2 Dec 2021 10:07:02 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::fc3a:8aea:2c92:3886]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::fc3a:8aea:2c92:3886%5]) with mapi id 15.20.4734.028; Thu, 2 Dec 2021 10:07:02 +0000 From: Ming Qian To: Hans Verkuil , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" CC: "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , Aisheng Dong , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Subject: RE: [EXT] Re: [PATCH v13 04/13] media: amphion: add vpu core driver Thread-Topic: [EXT] Re: [PATCH v13 04/13] media: amphion: add vpu core driver Thread-Index: AQHX5c0I/CqWIb6L10+FVoyKwJl1tKwe+Y6AgAADPFA= Date: Thu, 2 Dec 2021 10:07:02 +0000 Message-ID: References: <041cfcb9c52e2c3a4e8f5927e23f1b3c70ee44f8.1638263914.git.ming.qian@nxp.com> In-Reply-To: Accept-Language: zh-CN, 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: e843e445-50ff-4624-46c7-08d9b57b7cd3 x-ms-traffictypediagnostic: AM6PR04MB4790: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2399; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: r0j+Ngw+udkVp+VSxYu+6cdFBsm6xJarTXU63nYxRAWcstVqJDiTPvga6QwfFoTi5ooHxA3ofKpR+VFlRrgFZyk7VGWVb4j9/yFOpt8iwGMk+NxpzmBVeU+G+3VHzCUTg2kj4zQHmTqHYTUP0YFW1lqbKzvCp9LFtvcGDp29mZGRUFdni85EIV5VF1JIF+7A2S9CRv2nm5/bfEGzMFwcGYK2iefIbqbykwncdO+Ez20ZH37jszR2vxOyXSRiEz/6V0CUVwRe2QnAb1SfG2pF4LxDTHoKvSzYxXgmvDl1Q2vvp9F/0TvHh9Uziz1aPO2i/43kR8EdQ/k7/YFkxMXbSmvj0+o3lXkoGCYlSOPpXwRznHm8LxOd0IASxtQWqFmpQdz5S5dqReKsP7R3UPR4CQS75XO2wCrQkZuV7frS3yvgtzhpzR/HpYwpiZwS9ON9t9dhJ7Ur02/GVTcnwXFfeF/Hx5HaxThxsZlDw9loFH89NoiOi6DMlagj46GQVHEMIB4fb+XNjksotHUWanLViVHx+1hS5DO5lbv0LTHfgQWE8TtCstDgzyCjOHDyWSfPSDDzdMSJI+xIykw+tP4byd0AexfblUde2TlrffNO34OeI598blkBCkmt2VZdimvigfOCAa2cn+pBnJUgt1X957WXZHYiAy65UjNJnOwpCG1ilSDb/BAp64B9GUgNF+cryK7HjA7hL5FUt6t1N97vvw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB6341.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(38070700005)(7416002)(6506007)(83380400001)(316002)(8676002)(508600001)(76116006)(8936002)(54906003)(186003)(9686003)(55016003)(110136005)(53546011)(86362001)(33656002)(4326008)(30864003)(2906002)(66556008)(71200400001)(44832011)(52536014)(66476007)(64756008)(38100700002)(5660300002)(66946007)(26005)(7696005)(122000001)(66446008)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eTN3YkwvZGNTTTM0bVdzZzV1WXY3eXpFam0xRlFheDNjc2NydnA1dDBXVWZJ?= =?utf-8?B?aGZQL2tYTWNYWWdaek1MWEFUSVV3S25sYWF5dE1EandjbGN6R2h4THZuV3Jr?= =?utf-8?B?Y3VZaEdHMkd0ekFYalhrdkFzTFBlcUxwb2tRVGhqM2pZM0pzcGZFSVRmSndT?= =?utf-8?B?YVB2Z1lVTE5MeElqakNOUUZqdVhZY280alQyblZiakpydm1yK0xiYXd4QVZH?= =?utf-8?B?MC8weTltTHZPcGVVNUpvdEtncVVUMjJ2cVJXanNNSkxiNkdNRkdxS3VQa3hO?= =?utf-8?B?S05OTjdWRDB0U0g2czJaeDcrcGRGbktFbDFqVEgxNTNrb0JlY0k2dDFhK2hV?= =?utf-8?B?Mk5oZUtKTU1TWFpmMnI5SWI2a1hvWHd5c2VlOElwK2NZOWM2OXQzUm4rVTlp?= =?utf-8?B?aWtydWUzVWpxNWhZaTc3YldOcll4UXdnc2RiL01ndHk3aDJXLzhET1lxc3JU?= =?utf-8?B?YXpKNVdDVE13YzV0azFRMDgzQ1k0djNaQWh1Vzg2L21zWCtQTFNJaGVMU0to?= =?utf-8?B?TlNvcnFhRTJtTEtySm9ScjJ4TWpwTTVkTUVPdk1oQWVvNFZRaWpUWUJUOWhQ?= =?utf-8?B?d0FtMXczenk4V2JBWjI2ZUlySEhxQm9lbUExNy8yaXBFSFRPT3FFcW1OSE9G?= =?utf-8?B?ZjVDNFUxOVVlUUlFWXVtaDczM3FVN01DMTFzcUpmVFlHZmhBMmNGYXp2UnVy?= =?utf-8?B?Y3JIaVlSS0RGSkFsMzhLME1KS1B1OFZRS25RMDRFR0FOMi9XdTg0SXRiY0pW?= =?utf-8?B?SjRLQVlIamdKTTJ0MzZtUUVCWW85cEtJV1FVcEkydVpoNVhCc0Q4YnozOVNk?= =?utf-8?B?MkxhT3lKNTQ1NUt0Ynd2WENQd29nd1FSNTVPeE9JSHNpRGtxdk9QZlAzTElp?= =?utf-8?B?bzM0Z01FNDNJZU1tQXEwaWhqa0FMSE5XeHlQeUx5WkJaWkJHbDAveFE1MjVv?= =?utf-8?B?S0FXT0FEV0NETUU2dXhsdW1MRjZDN3VVdHBlRDk2d3lkWm1YTFR4Qk41djRY?= =?utf-8?B?NHJpMmVJeHc1Zzh2bU84NkovRlo4MnlzRVJwKzBkM3o5UUFtZEROa3FucTZa?= =?utf-8?B?UzFFY1RxalUrcU44bWtVOVVabjVCMjRYTzlnQVNEZVVSNnAwRExBNlZXNk1y?= =?utf-8?B?MCtCRlJ2QnJIaFFsSEhnOVlzc3FtVjZTVndHaHZVMzNiOXY2MUk5RmFsalR6?= =?utf-8?B?Ym8weHVhMW1KTEF4MnNTYmpOZ1hmcXhBL284cWNjdmZTZXVkS3J6Zm9KbFBw?= =?utf-8?B?Qi9IYlFiTENaNStxUmtxUUJmakw0MUtwZGM5ZHhqKzhxZmMrSmMyM043K1VD?= =?utf-8?B?ODJDZ0RLT3lqY0NiZEVGMVNUcDJaTHllWjY5WjBiV0t2UzROUGlnSCtxd2lU?= =?utf-8?B?Q0xrSnVJTVdYcjZUWTdTamNlV0VJcmc2WTY3SFFHQTZIdGhlVUxpMzczSHhK?= =?utf-8?B?N2VjbHFLdzlnNU5HM2Z2Zitxd2VuWS9ST2dFeG1nbE43a2ZuK3V6eFVwYk1u?= =?utf-8?B?OXVkdmU2OUNlTnk4STJ6bldqN080WUdmNlF5Qmk4b3YvTTRpdm5ZMkoxMnc1?= =?utf-8?B?cmNXeXpBQWxkOHpzZ1RJWjlLeGYvZGljVlI1N3VVMnNob25UQW4wZjlGZVdO?= =?utf-8?B?SVo1UTk3RFBCTHFXVHJ1U3d5dVR3Z1FCRUU5RHBsWFB5ZE01c01tRzRkdi9Q?= =?utf-8?B?alNHWW9Ba2IxN05CR0drWVJDc2dsRk1GSWRnRnJhbWkzbURkRHM0eVRoeW5o?= =?utf-8?B?WFQ3aVgxT1lKQVNTWEEzcTB3R0VJWDB3SDRkZ09uR2Q0VjBUc0NydzVrVUlk?= =?utf-8?B?TlpRRk5NZkdZVjY2ZytlZEZFSG9xQ08zKy8vK0xCNFBRMHhQZndZdW1MZGxR?= =?utf-8?B?L0NmMlp1ZXZzMElLTDBLK2NKRXV4TXl3bmZEV0xxUENyN0FpYVJhYXhzaVFr?= =?utf-8?B?aTV0N0ppUFNLQU1Sem4vSUZyalF5ektJeTFvMlVKSVNGSStqdWdDMXlheGxl?= =?utf-8?B?ZExTbUt0c24rSDg0dmZ5MENkY0NkRzBmaFBybTlVenRhbUVCS1hGTDFYbXJW?= =?utf-8?B?ZjY1azAwMmJCU2twekRlUE9LVjQvZlBmYmxzaGYzYVdkOUhqeStzK2VsSnpz?= =?utf-8?B?bmZnWk5tWnN1U3dLblIvMTJ2WFovY1REZU00MWFQQVk0dUducmxIemlTQWJk?= =?utf-8?B?V0E9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6341.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e843e445-50ff-4624-46c7-08d9b57b7cd3 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Dec 2021 10:07:02.7952 (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: Ma5hVgK8FYAQl34LwQFdQYlWN7TV+HB4iySUnzlDD4WvFc5Xgt1ehNGIiH/nzWgpNwg3Taa9m86q20j83DlkNg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4790 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIYW5zIFZlcmt1aWwgW21haWx0 bzpodmVya3VpbC1jaXNjb0B4czRhbGwubmxdDQo+IFNlbnQ6IFRodXJzZGF5LCBEZWNlbWJlciAy LCAyMDIxIDU6NTQgUE0NCj4gVG86IE1pbmcgUWlhbiA8bWluZy5xaWFuQG54cC5jb20+OyBtY2hl aGFiQGtlcm5lbC5vcmc7DQo+IHNoYXduZ3VvQGtlcm5lbC5vcmc7IHJvYmgrZHRAa2VybmVsLm9y Zzsgcy5oYXVlckBwZW5ndXRyb25peC5kZQ0KPiBDYzoga2VybmVsQHBlbmd1dHJvbml4LmRlOyBm ZXN0ZXZhbUBnbWFpbC5jb207IGRsLWxpbnV4LWlteA0KPiA8bGludXgtaW14QG54cC5jb20+OyBB aXNoZW5nIERvbmcgPGFpc2hlbmcuZG9uZ0BueHAuY29tPjsNCj4gbGludXgtbWVkaWFAdmdlci5r ZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPiBkZXZpY2V0cmVlQHZn ZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnDQo+IFN1 YmplY3Q6IFtFWFRdIFJlOiBbUEFUQ0ggdjEzIDA0LzEzXSBtZWRpYTogYW1waGlvbjogYWRkIHZw dSBjb3JlIGRyaXZlcg0KPiANCj4gQ2F1dGlvbjogRVhUIEVtYWlsDQo+IA0KPiBPbiAzMC8xMS8y MDIxIDEwOjQ4LCBNaW5nIFFpYW4gd3JvdGU6DQo+ID4gVGhlIHZwdSBzdXBwb3J0cyBlbmNvZGVy IGFuZCBkZWNvZGVyLg0KPiA+IGl0IG5lZWRzIG11IGNvcmUgdG8gaGFuZGxlIGl0Lg0KPiA+IGNv cmUgd2lsbCBydW4gZWl0aGVyIGVuY29kZXIgb3IgZGVjb2RlciBmaXJtd2FyZS4NCj4gPg0KPiA+ IFRoaXMgZHJpdmVyIGlzIGZvciBzdXBwb3J0IHRoZSB2cHUgY29yZS4NCj4gPg0KPiA+IFNpZ25l ZC1vZmYtYnk6IE1pbmcgUWlhbiA8bWluZy5xaWFuQG54cC5jb20+DQo+ID4gU2lnbmVkLW9mZi1i eTogU2hpamllIFFpbiA8c2hpamllLnFpbkBueHAuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFpo b3UgUGVuZyA8ZWFnbGUuemhvdUBueHAuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmggfCAgNjcgKysNCj4gPiAgZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmMgIHwgOTA2DQo+ICsrKysrKysrKysrKysrKysr KysrKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUuaCAgfCAg MTUgKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2RiZy5jICAgfCA0 OTUgKysrKysrKysrKysNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9y cGMuYyAgIHwgMjc5ICsrKysrKysNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9u L3ZwdV9ycGMuaCAgIHwgNDY0ICsrKysrKysrKysrDQo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgMjIy NiBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29yZS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUuaA0KPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9kYmcuYw0K PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3Zw dV9ycGMuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h bXBoaW9uL3ZwdV9ycGMuaA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYW1waGlvbi92cHVfY29kZWMuaA0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1w aGlvbi92cHVfY29kZWMuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMDAwMDAwLi5iZjg5MjBlOWY2ZDcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb2RlYy5oDQo+ID4gQEAgLTAsMCArMSw2 NyBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsv Kg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4g KyNpZm5kZWYgX0FNUEhJT05fVlBVX0NPREVDX0gNCj4gPiArI2RlZmluZSBfQU1QSElPTl9WUFVf Q09ERUNfSA0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9lbmNvZGVfcGFyYW1zIHsNCj4gPiArICAg ICB1MzIgaW5wdXRfZm9ybWF0Ow0KPiA+ICsgICAgIHUzMiBjb2RlY19mb3JtYXQ7DQo+ID4gKyAg ICAgdTMyIHByb2ZpbGU7DQo+ID4gKyAgICAgdTMyIHRpZXI7DQo+ID4gKyAgICAgdTMyIGxldmVs Ow0KPiA+ICsgICAgIHN0cnVjdCB2NGwyX2ZyYWN0IGZyYW1lX3JhdGU7DQo+ID4gKyAgICAgdTMy IHNyY19zdHJpZGU7DQo+ID4gKyAgICAgdTMyIHNyY193aWR0aDsNCj4gPiArICAgICB1MzIgc3Jj X2hlaWdodDsNCj4gPiArICAgICBzdHJ1Y3QgdjRsMl9yZWN0IGNyb3A7DQo+ID4gKyAgICAgdTMy IG91dF93aWR0aDsNCj4gPiArICAgICB1MzIgb3V0X2hlaWdodDsNCj4gPiArDQo+ID4gKyAgICAg dTMyIGdvcF9sZW5ndGg7DQo+ID4gKyAgICAgdTMyIGJmcmFtZXM7DQo+ID4gKw0KPiA+ICsgICAg IHUzMiByY19tb2RlOw0KPiA+ICsgICAgIHUzMiBiaXRyYXRlOw0KPiA+ICsgICAgIHUzMiBiaXRy YXRlX21pbjsNCj4gPiArICAgICB1MzIgYml0cmF0ZV9tYXg7DQo+ID4gKw0KPiA+ICsgICAgIHUz MiBpX2ZyYW1lX3FwOw0KPiA+ICsgICAgIHUzMiBwX2ZyYW1lX3FwOw0KPiA+ICsgICAgIHUzMiBi X2ZyYW1lX3FwOw0KPiA+ICsgICAgIHUzMiBxcF9taW47DQo+ID4gKyAgICAgdTMyIHFwX21heDsN Cj4gPiArICAgICB1MzIgcXBfbWluX2k7DQo+ID4gKyAgICAgdTMyIHFwX21heF9pOw0KPiA+ICsN Cj4gPiArICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAgICAgICAgdTMyIGVuYWJsZTsNCj4gPiAr ICAgICAgICAgICAgIHUzMiBpZGM7DQo+ID4gKyAgICAgICAgICAgICB1MzIgd2lkdGg7DQo+ID4g KyAgICAgICAgICAgICB1MzIgaGVpZ2h0Ow0KPiA+ICsgICAgIH0gc2FyOw0KPiA+ICsNCj4gPiAr ICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAgICAgICAgdTMyIHByaW1hcmllczsNCj4gPiArICAg ICAgICAgICAgIHUzMiB0cmFuc2ZlcjsNCj4gPiArICAgICAgICAgICAgIHUzMiBtYXRyaXg7DQo+ ID4gKyAgICAgICAgICAgICB1MzIgZnVsbF9yYW5nZTsNCj4gPiArICAgICB9IGNvbG9yOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9kZWNvZGVfcGFyYW1zIHsNCj4gPiArICAgICB1 MzIgY29kZWNfZm9ybWF0Ow0KPiA+ICsgICAgIHUzMiBvdXRwdXRfZm9ybWF0Ow0KPiA+ICsgICAg IHUzMiBiX2Rpc19yZW9yZGVyOw0KPiA+ICsgICAgIHUzMiBiX25vbl9mcmFtZTsNCj4gPiArICAg ICB1MzIgZnJhbWVfY291bnQ7DQo+ID4gKyAgICAgdTMyIGVuZF9mbGFnOw0KPiA+ICsgICAgIHN0 cnVjdCB7DQo+ID4gKyAgICAgICAgICAgICB1MzIgYmFzZTsNCj4gPiArICAgICAgICAgICAgIHUz MiBzaXplOw0KPiA+ICsgICAgIH0gdWRhdGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZW5kaWYN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb3Jl LmMNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUuYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wZGJmZDFjODRmNzUN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBo aW9uL3ZwdV9jb3JlLmMNCj4gPiBAQCAtMCwwICsxLDkwNiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMC0y MDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcmNvbm5lY3QuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2lvY3RsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNz Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9kb21h aW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+DQo+ID4gKyNpbmNsdWRlICJ2 cHUuaCINCj4gPiArI2luY2x1ZGUgInZwdV9kZWZzLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfY29y ZS5oIg0KPiA+ICsjaW5jbHVkZSAidnB1X21ib3guaCINCj4gPiArI2luY2x1ZGUgInZwdV9tc2dz LmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfcnBjLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfY21kcy5o Ig0KPiA+ICsNCj4gPiArdm9pZCBjc3Jfd3JpdGVsKHN0cnVjdCB2cHVfY29yZSAqY29yZSwgdTMy IHJlZywgdTMyIHZhbCkNCj4gPiArew0KPiA+ICsgICAgIHdyaXRlbCh2YWwsIGNvcmUtPmJhc2Ug KyByZWcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1MzIgY3NyX3JlYWRsKHN0cnVjdCB2cHVfY29y ZSAqY29yZSwgdTMyIHJlZykNCj4gPiArew0KPiA+ICsgICAgIHJldHVybiByZWFkbChjb3JlLT5i YXNlICsgcmVnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9sb2Fk X2Zpcm13YXJlKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqcGZ3ID0gTlVMTDsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4g PiArDQo+ID4gKyAgICAgV0FSTl9PTighY29yZSB8fCAhY29yZS0+cmVzIHx8ICFjb3JlLT5yZXMt PmZ3bmFtZSk7DQo+IA0KPiBFaXRoZXIgZG86DQo+IA0KPiAgICAgICAgIGlmIChXQVJOX09OKCFj b3JlIHx8ICFjb3JlLT5yZXMgfHwgIWNvcmUtPnJlcy0+ZnduYW1lKSkNCj4gICAgICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOw0KPiANCj4gb3IganVzdCBkcm9wIGl0LiBZb3UnbGwgZ2V0IGEg b29wcyB3aXRoIGJhY2t0cmFjZSBzb29uIGVub3VnaC4NCj4gDQo+IFNhbWUgZWxzZXdoZXJlIGlu IHRoaXMgZHJpdmVyLg0KDQpHb3QgaXQsIEknbGwgY2hlY2sgYW5kIGZpeCB0aGVtDQoNCj4gDQo+ ID4gKyAgICAgaWYgKCFjb3JlLT5mdy52aXJ0KSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJy KGNvcmUtPmRldiwgImZpcm13YXJlIGJ1ZmZlciBpcyBub3QgcmVhZHlcbiIpOw0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBy ZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZwZncsIGNvcmUtPnJlcy0+ZnduYW1lLCBjb3JlLT5kZXYp Ow0KPiA+ICsgICAgIGRldl9kYmcoY29yZS0+ZGV2LCAicmVxdWVzdF9maXJtd2FyZSAlcyA6ICVk XG4iLA0KPiBjb3JlLT5yZXMtPmZ3bmFtZSwgcmV0KTsNCj4gPiArICAgICBpZiAocmV0KSB7DQo+ ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgInJlcXVlc3QgZmlybXdhcmUgJXMg ZmFpbGVkLCByZXQgPSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3JlLT5yZXMtPmZ3bmFtZSwgcmV0KTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAoY29yZS0+ZncubGVuZ3RoIDwgcGZ3LT5z aXplKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgImZpcm13YXJlIGJ1 ZmZlciBzaXplIHdhbnQgJXp1LA0KPiBidXQgJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGZ3LT5zaXplLCBjb3JlLT5mdy5sZW5ndGgpOw0KPiA+ICsgICAgICAgICAg ICAgcmV0ID0gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXhpdDsNCj4gPiArICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgIG1lbXNldF9pbyhjb3JlLT5mdy52aXJ0LCAwLCBjb3JlLT5m dy5sZW5ndGgpOw0KPiA+ICsgICAgIG1lbWNweShjb3JlLT5mdy52aXJ0LCBwZnctPmRhdGEsIHBm dy0+c2l6ZSk7DQo+ID4gKyAgICAgY29yZS0+ZncuYnl0ZXN1c2VkID0gcGZ3LT5zaXplOw0KPiA+ ICsgICAgIHJldCA9IHZwdV9pZmFjZV9vbl9maXJtd2FyZV9sb2FkZWQoY29yZSk7DQo+ID4gK2V4 aXQ6DQo+ID4gKyAgICAgcmVsZWFzZV9maXJtd2FyZShwZncpOw0KPiA+ICsgICAgIHBmdyA9IE5V TEw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgdnB1X2NvcmVfYm9vdF9kb25lKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiAr ew0KPiA+ICsgICAgIHUzMiBmd192ZXJzaW9uOw0KPiA+ICsNCj4gPiArICAgICBmd192ZXJzaW9u ID0gdnB1X2lmYWNlX2dldF92ZXJzaW9uKGNvcmUpOw0KPiA+ICsgICAgIGRldl9pbmZvKGNvcmUt PmRldiwgIiVzIGZpcm13YXJlIHZlcnNpb24gOiAlZC4lZC4lZFxuIiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgdnB1X2NvcmVfdHlwZV9kZXNjKGNvcmUtPnR5cGUpLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAoZndfdmVyc2lvbiA+PiAxNikgJiAweGZmLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAoZndfdmVyc2lvbiA+PiA4KSAmIDB4ZmYsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGZ3X3ZlcnNpb24gJiAweGZmKTsNCj4gPiArICAgICBjb3JlLT5zdXBwb3J0ZWRfaW5z dGFuY2VfY291bnQgPQ0KPiB2cHVfaWZhY2VfZ2V0X21heF9pbnN0YW5jZV9jb3VudChjb3JlKTsN Cj4gPiArICAgICBpZiAoY29yZS0+cmVzLT5hY3Rfc2l6ZSkgew0KPiA+ICsgICAgICAgICAgICAg dTMyIGNvdW50ID0gY29yZS0+YWN0Lmxlbmd0aCAvIGNvcmUtPnJlcy0+YWN0X3NpemU7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgY29yZS0+c3VwcG9ydGVkX2luc3RhbmNlX2NvdW50ID0NCj4g bWluKGNvcmUtPnN1cHBvcnRlZF9pbnN0YW5jZV9jb3VudCwgY291bnQpOw0KPiA+ICsgICAgIH0N Cj4gPiArICAgICBjb3JlLT5md192ZXJzaW9uID0gZndfdmVyc2lvbjsNCj4gPiArICAgICBjb3Jl LT5zdGF0ZSA9IFZQVV9DT1JFX0FDVElWRTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X2NvcmVfd2FpdF9ib290X2RvbmUoc3Ry dWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50IHJldDsNCj4gPiArDQo+ ID4gKyAgICAgcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjb3JlLT5jbXAsIFZQ VV9USU1FT1VUKTsNCj4gPiArICAgICBpZiAoIXJldCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2 X2Vycihjb3JlLT5kZXYsICJib290IHRpbWVvdXRcbiIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHJldHVybiB2cHVfY29yZV9ib290 X2RvbmUoY29yZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X2NvcmVfYm9v dChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIGJvb2wgbG9hZCkNCj4gPiArew0KPiA+ICsgICAgIGlu dCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIWNvcmUpOw0KPiA+ICsNCj4gPiArICAg ICBpZiAoIWNvcmUtPnJlcy0+c3RhbmRhbG9uZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAw Ow0KPiA+ICsNCj4gPiArICAgICByZWluaXRfY29tcGxldGlvbigmY29yZS0+Y21wKTsNCj4gPiAr ICAgICBpZiAobG9hZCkgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gdnB1X2NvcmVfbG9hZF9m aXJtd2FyZShjb3JlKTsNCj4gPiArICAgICAgICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICB2 cHVfaWZhY2VfYm9vdF9jb3JlKGNvcmUpOw0KPiA+ICsgICAgIHJldHVybiB2cHVfY29yZV93YWl0 X2Jvb3RfZG9uZShjb3JlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29y ZV9zaHV0ZG93bihzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBpZiAo IWNvcmUtPnJlcy0+c3RhbmRhbG9uZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ ICsgICAgIHJldHVybiB2cHVfaWZhY2Vfc2h1dGRvd25fY29yZShjb3JlKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9yZXN0b3JlKHN0cnVjdCB2cHVfY29yZSAqY29y ZSkNCj4gPiArew0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghY29y ZS0+cmVzLT5zdGFuZGFsb25lKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAg ICAgcmV0ID0gdnB1X2NvcmVfc3dfcmVzZXQoY29yZSk7DQo+ID4gKyAgICAgaWYgKHJldCkNCj4g PiArICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9jb3JlX2Jv b3RfZG9uZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gdnB1X2lmYWNlX3Jlc3RvcmVfY29yZShj b3JlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX3ZwdV9hbGxvY19kbWEoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdnB1X2J1ZmZlciAqYnVmKQ0KPiA+ICt7DQo+ID4gKyAg ICAgZ2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMjsNCj4gPiArDQo+ID4gKyAgICAg V0FSTl9PTighZGV2IHx8ICFidWYpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWJ1Zi0+bGVuZ3Ro KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIGJ1Zi0+dmly dCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIGJ1Zi0+bGVuZ3RoLCAmYnVmLT5waHlzLCBnZnAp Ow0KPiA+ICsgICAgIGlmICghYnVmLT52aXJ0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F Tk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIGJ1Zi0+ZGV2ID0gZGV2Ow0KPiA+ICsNCj4gPiArICAg ICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2cHVfZnJlZV9kbWEoc3RydWN0 IHZwdV9idWZmZXIgKmJ1ZikNCj4gPiArew0KPiA+ICsgICAgIFdBUk5fT04oIWJ1Zik7DQo+ID4g Kw0KPiA+ICsgICAgIGlmICghYnVmLT52aXJ0IHx8ICFidWYtPmRldikNCj4gPiArICAgICAgICAg ICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgZG1hX2ZyZWVfY29oZXJlbnQoYnVmLT5kZXYs IGJ1Zi0+bGVuZ3RoLCBidWYtPnZpcnQsIGJ1Zi0+cGh5cyk7DQo+ID4gKyAgICAgYnVmLT52aXJ0 ID0gTlVMTDsNCj4gPiArICAgICBidWYtPnBoeXMgPSAwOw0KPiA+ICsgICAgIGJ1Zi0+bGVuZ3Ro ID0gMDsNCj4gPiArICAgICBidWYtPmJ5dGVzdXNlZCA9IDA7DQo+ID4gKyAgICAgYnVmLT5kZXYg PSBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgdnB1X2FsbG9jX2RtYShzdHJ1Y3QgdnB1 X2NvcmUgKmNvcmUsIHN0cnVjdCB2cHVfYnVmZmVyICpidWYpDQo+ID4gK3sNCj4gPiArICAgICBX QVJOX09OKCFjb3JlIHx8ICFidWYpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gX192cHVfYWxs b2NfZG1hKGNvcmUtPmRldiwgYnVmKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg dnB1X2NvcmVfY2hlY2tfaGFuZyhzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiAr ICAgICBpZiAoY29yZS0+aGFuZ19tYXNrKQ0KPiA+ICsgICAgICAgICAgICAgY29yZS0+c3RhdGUg PSBWUFVfQ09SRV9IQU5HOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHZwdV9j b3JlICp2cHVfY29yZV9maW5kX3Byb3Blcl9ieV90eXBlKHN0cnVjdCB2cHVfZGV2ICp2cHUsDQo+ IHUzMiB0eXBlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3JlID0gTlVM TDsNCj4gPiArICAgICBpbnQgcmVxdWVzdF9jb3VudCA9IElOVF9NQVg7DQo+ID4gKyAgICAgc3Ry dWN0IHZwdV9jb3JlICpjOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKCF2cHUpOw0KPiA+ICsN Cj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZ2cHUtPmNvcmVzLCBsaXN0KSB7DQo+ ID4gKyAgICAgICAgICAgICBkZXZfZGJnKGMtPmRldiwgImluc3RhbmNlX21hc2sgPSAweCVseCwg c3RhdGUgPSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5pbnN0 YW5jZV9tYXNrLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPnN0YXRlKTsN Cj4gPiArICAgICAgICAgICAgIGlmIChjLT50eXBlICE9IHR5cGUpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgaWYgKGMtPnN0YXRlID09IFZQ VV9DT1JFX0RFSU5JVCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3JlID0gYzsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4g KyAgICAgICAgICAgICB2cHVfY29yZV9jaGVja19oYW5nKGMpOw0KPiA+ICsgICAgICAgICAgICAg aWYgKGMtPnN0YXRlICE9IFZQVV9DT1JFX0FDVElWRSkNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAgICBpZiAoYy0+cmVxdWVzdF9jb3VudCA8IHJl cXVlc3RfY291bnQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9jb3VudCA9 IGMtPnJlcXVlc3RfY291bnQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvcmUgPSBjOw0K PiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0X2NvdW50 KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICB9DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiBjb3JlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCB2 cHVfY29yZV9pc19leGlzdChzdHJ1Y3QgdnB1X2RldiAqdnB1LCBzdHJ1Y3QgdnB1X2NvcmUgKmNv cmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmM7DQo+ID4gKw0KPiA+ICsg ICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnZwdS0+Y29yZXMsIGxpc3QpIHsNCj4gPiArICAg ICAgICAgICAgIGlmIChjID09IGNvcmUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0cnVlOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2cHVfY29yZV9nZXRfdnB1KHN0cnVjdCB2cHVf Y29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGNvcmUtPnZwdS0+Z2V0X3ZwdShjb3JlLT52 cHUpOw0KPiA+ICsgICAgIGlmIChjb3JlLT50eXBlID09IFZQVV9DT1JFX1RZUEVfRU5DKQ0KPiA+ ICsgICAgICAgICAgICAgY29yZS0+dnB1LT5nZXRfZW5jKGNvcmUtPnZwdSk7DQo+ID4gKyAgICAg aWYgKGNvcmUtPnR5cGUgPT0gVlBVX0NPUkVfVFlQRV9ERUMpDQo+ID4gKyAgICAgICAgICAgICBj b3JlLT52cHUtPmdldF9kZWMoY29yZS0+dnB1KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCB2cHVfY29yZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2cHVfY29y ZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfZGV2ICp2cHUgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAg ZGV2X2RiZyhjb3JlLT5kZXYsICJyZWdpc3RlciBjb3JlICVzXG4iLA0KPiB2cHVfY29yZV90eXBl X2Rlc2MoY29yZS0+dHlwZSkpOw0KPiA+ICsgICAgIGlmICh2cHVfY29yZV9pc19leGlzdCh2cHUs IGNvcmUpKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIGNv cmUtPndvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgidnB1IiwgV1FfVU5CT1VORCB8DQo+IFdR X01FTV9SRUNMQUlNLCAxKTsNCj4gPiArICAgICBpZiAoIWNvcmUtPndvcmtxdWV1ZSkgew0KPiA+ ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJmYWlsIHRvIGFsbG9jIHdvcmtxdWV1 ZVxuIik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArICAgICB9DQo+ ID4gKyAgICAgSU5JVF9XT1JLKCZjb3JlLT5tc2dfd29yaywgdnB1X21zZ19ydW5fd29yayk7DQo+ ID4gKyAgICAgSU5JVF9ERUxBWUVEX1dPUksoJmNvcmUtPm1zZ19kZWxheWVkX3dvcmssDQo+IHZw dV9tc2dfZGVsYXllZF93b3JrKTsNCj4gPiArICAgICBjb3JlLT5tc2dfYnVmZmVyX3NpemUgPQ0K PiByb3VuZHVwX3Bvd19vZl90d28oVlBVX01TR19CVUZGRVJfU0laRSk7DQo+ID4gKyAgICAgY29y ZS0+bXNnX2J1ZmZlciA9IHZ6YWxsb2MoY29yZS0+bXNnX2J1ZmZlcl9zaXplKTsNCj4gPiArICAg ICBpZiAoIWNvcmUtPm1zZ19idWZmZXIpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoY29y ZS0+ZGV2LCAiZmFpbGVkIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZmlmb1xuIik7DQo+ID4gKyAgICAg ICAgICAgICByZXQgPSAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4g PiArICAgICB9DQo+ID4gKyAgICAgcmV0ID0ga2ZpZm9faW5pdCgmY29yZS0+bXNnX2ZpZm8sIGNv cmUtPm1zZ19idWZmZXIsDQo+IGNvcmUtPm1zZ19idWZmZXJfc2l6ZSk7DQo+ID4gKyAgICAgaWYg KHJldCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJmYWlsZWQgaW5p dCBrZmlmb1xuIik7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycm9yOw0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgbGlzdF9hZGRfdGFpbCgmY29yZS0+bGlzdCwgJnZwdS0+Y29yZXMp Ow0KPiA+ICsNCj4gPiArICAgICB2cHVfY29yZV9nZXRfdnB1KGNvcmUpOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAodnB1X2lmYWNlX2dldF9wb3dlcl9zdGF0ZShjb3JlKSkNCj4gPiArICAgICAgICAg ICAgIHJldCA9IHZwdV9jb3JlX3Jlc3RvcmUoY29yZSk7DQo+ID4gKyAgICAgaWYgKHJldCkNCj4g PiArICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0K PiA+ICtlcnJvcjoNCj4gPiArICAgICBpZiAoY29yZS0+bXNnX2J1ZmZlcikgew0KPiA+ICsgICAg ICAgICAgICAgdmZyZWUoY29yZS0+bXNnX2J1ZmZlcik7DQo+ID4gKyAgICAgICAgICAgICBjb3Jl LT5tc2dfYnVmZmVyID0gTlVMTDsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgaWYgKGNvcmUtPndv cmtxdWV1ZSkgew0KPiA+ICsgICAgICAgICAgICAgZGVzdHJveV93b3JrcXVldWUoY29yZS0+d29y a3F1ZXVlKTsNCj4gPiArICAgICAgICAgICAgIGNvcmUtPndvcmtxdWV1ZSA9IE5VTEw7DQo+ID4g KyAgICAgfQ0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHZwdV9jb3JlX3B1dF92cHUoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ ID4gKyAgICAgaWYgKGNvcmUtPnR5cGUgPT0gVlBVX0NPUkVfVFlQRV9FTkMpDQo+ID4gKyAgICAg ICAgICAgICBjb3JlLT52cHUtPnB1dF9lbmMoY29yZS0+dnB1KTsNCj4gPiArICAgICBpZiAoY29y ZS0+dHlwZSA9PSBWUFVfQ09SRV9UWVBFX0RFQykNCj4gPiArICAgICAgICAgICAgIGNvcmUtPnZw dS0+cHV0X2RlYyhjb3JlLT52cHUpOw0KPiA+ICsgICAgIGNvcmUtPnZwdS0+cHV0X3ZwdShjb3Jl LT52cHUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9jb3JlX3VucmVnaXN0 ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4g PiArICAgICBsaXN0X2RlbF9pbml0KCZjb3JlLT5saXN0KTsNCj4gPiArDQo+ID4gKyAgICAgdnB1 X2NvcmVfcHV0X3ZwdShjb3JlKTsNCj4gPiArICAgICBjb3JlLT52cHUgPSBOVUxMOw0KPiA+ICsg ICAgIHZmcmVlKGNvcmUtPm1zZ19idWZmZXIpOw0KPiA+ICsgICAgIGNvcmUtPm1zZ19idWZmZXIg PSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29yZS0+d29ya3F1ZXVlKSB7DQo+ID4gKyAg ICAgICAgICAgICBjYW5jZWxfd29ya19zeW5jKCZjb3JlLT5tc2dfd29yayk7DQo+ID4gKyAgICAg ICAgICAgICBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNvcmUtPm1zZ19kZWxheWVkX3dvcmsp Ow0KPiA+ICsgICAgICAgICAgICAgZGVzdHJveV93b3JrcXVldWUoY29yZS0+d29ya3F1ZXVlKTsN Cj4gPiArICAgICAgICAgICAgIGNvcmUtPndvcmtxdWV1ZSA9IE5VTEw7DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCB2cHVfY29yZV9hY3F1aXJlX2luc3RhbmNlKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiAr ew0KPiA+ICsgICAgIGludCBpZDsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighY29yZSk7DQo+ ID4gKw0KPiA+ICsgICAgIGlkID0gZmZ6KGNvcmUtPmluc3RhbmNlX21hc2spOw0KPiA+ICsgICAg IGlmIChpZCA+PSBjb3JlLT5zdXBwb3J0ZWRfaW5zdGFuY2VfY291bnQpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgc2V0X2JpdChpZCwgJmNvcmUt Pmluc3RhbmNlX21hc2spOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gaWQ7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIHZwdV9jb3JlX3JlbGVhc2VfaW5zdGFuY2Uoc3RydWN0IHZw dV9jb3JlICpjb3JlLCBpbnQgaWQpDQo+ID4gK3sNCj4gPiArICAgICBXQVJOX09OKCFjb3JlKTsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKGlkIDwgMCB8fCBpZCA+PSBjb3JlLT5zdXBwb3J0ZWRfaW5z dGFuY2VfY291bnQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAg IGNsZWFyX2JpdChpZCwgJmNvcmUtPmluc3RhbmNlX21hc2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdHJ1Y3QgdnB1X2luc3QgKnZwdV9pbnN0X2dldChzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ ID4gK3sNCj4gPiArICAgICBpZiAoIWluc3QpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gTlVM TDsNCj4gPiArDQo+ID4gKyAgICAgYXRvbWljX2luYygmaW5zdC0+cmVmX2NvdW50KTsNCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuIGluc3Q7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgdnB1X2lu c3RfcHV0KHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsgICAgIGlmICghaW5z dCkNCj4gPiArICAgICAgICAgICAgIHJldHVybjsNCj4gPiArICAgICBpZiAoYXRvbWljX2RlY19h bmRfdGVzdCgmaW5zdC0+cmVmX2NvdW50KSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKGluc3Qt PnJlbGVhc2UpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QtPnJlbGVhc2UoaW5zdCk7 DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2NvcmUgKnZwdV9y ZXF1ZXN0X2NvcmUoc3RydWN0IHZwdV9kZXYgKnZwdSwgZW51bQ0KPiB2cHVfY29yZV90eXBlIHR5 cGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBOVUxMOw0KPiA+ ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJnZwdS0+bG9jayk7 DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUgPSB2cHVfY29yZV9maW5kX3Byb3Blcl9ieV90eXBlKHZw dSwgdHlwZSk7DQo+ID4gKyAgICAgaWYgKCFjb3JlKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBl eGl0Ow0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAg ICBwbV9ydW50aW1lX2dldF9zeW5jKGNvcmUtPmRldik7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChj b3JlLT5zdGF0ZSA9PSBWUFVfQ09SRV9ERUlOSVQpIHsNCj4gPiArICAgICAgICAgICAgIHJldCA9 IHZwdV9jb3JlX2Jvb3QoY29yZSwgdHJ1ZSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAocmV0KSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBtX3J1bnRpbWVfcHV0X3N5bmMoY29yZS0+ZGV2 KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgY29yZSA9IE5VTEw7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXhpdDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIGNvcmUtPnJlcXVlc3RfY291bnQrKzsNCj4gPiArDQo+ID4gKyAgICAg bXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArZXhpdDoNCj4gPiArICAgICBtdXRleF91 bmxvY2soJnZwdS0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBjb3JlOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICt2b2lkIHZwdV9yZWxlYXNlX2NvcmUoc3RydWN0IHZwdV9jb3JlICpjb3Jl KQ0KPiA+ICt7DQo+ID4gKyAgICAgaWYgKCFjb3JlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu Ow0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBw bV9ydW50aW1lX3B1dF9zeW5jKGNvcmUtPmRldik7DQo+ID4gKyAgICAgaWYgKGNvcmUtPnJlcXVl c3RfY291bnQpDQo+ID4gKyAgICAgICAgICAgICBjb3JlLT5yZXF1ZXN0X2NvdW50LS07DQo+ID4g KyAgICAgbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50 IHZwdV9pbnN0X3JlZ2lzdGVyKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsg ICAgIHN0cnVjdCB2cHVfZGV2ICp2cHU7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3Jl Ow0KPiA+ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKCFpbnN0 IHx8ICFpbnN0LT52cHUpOw0KPiA+ICsNCj4gPiArICAgICB2cHUgPSBpbnN0LT52cHU7DQo+ID4g KyAgICAgY29yZSA9IGluc3QtPmNvcmU7DQo+ID4gKyAgICAgaWYgKCFjb3JlKSB7DQo+ID4gKyAg ICAgICAgICAgICBjb3JlID0gdnB1X3JlcXVlc3RfY29yZSh2cHUsIGluc3QtPnR5cGUpOw0KPiA+ ICsgICAgICAgICAgICAgaWYgKCFjb3JlKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRl dl9lcnIodnB1LT5kZXYsICJ0aGVyZSBpcyBubyB2cHUgY29yZSBmb3IgJXNcbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnB1X2NvcmVfdHlwZV9kZXNjKGluc3QtPnR5cGUp KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAg ICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICBpbnN0LT5jb3JlID0gY29yZTsNCj4gPiArICAg ICAgICAgICAgIGluc3QtPmRldiA9IGdldF9kZXZpY2UoY29yZS0+ZGV2KTsNCj4gPiArICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsgICAgIGlm IChpbnN0LT5pZCA+PSAwICYmIGluc3QtPmlkIDwgY29yZS0+c3VwcG9ydGVkX2luc3RhbmNlX2Nv dW50KQ0KPiA+ICsgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsNCj4gPiArICAgICByZXQg PSB2cHVfY29yZV9hY3F1aXJlX2luc3RhbmNlKGNvcmUpOw0KPiA+ICsgICAgIGlmIChyZXQgPCAw KQ0KPiA+ICsgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsNCj4gPiArICAgICB2cHVfdHJh Y2UoaW5zdC0+ZGV2LCAiWyVkXSAlcFxuIiwgcmV0LCBpbnN0KTsNCj4gPiArICAgICBpbnN0LT5p ZCA9IHJldDsNCj4gPiArICAgICBsaXN0X2FkZF90YWlsKCZpbnN0LT5saXN0LCAmY29yZS0+aW5z dGFuY2VzKTsNCj4gPiArICAgICByZXQgPSAwOw0KPiA+ICsgICAgIGlmIChjb3JlLT5yZXMtPmFj dF9zaXplKSB7DQo+ID4gKyAgICAgICAgICAgICBpbnN0LT5hY3QucGh5cyA9IGNvcmUtPmFjdC5w aHlzICsgY29yZS0+cmVzLT5hY3Rfc2l6ZSAqDQo+IGluc3QtPmlkOw0KPiA+ICsgICAgICAgICAg ICAgaW5zdC0+YWN0LnZpcnQgPSBjb3JlLT5hY3QudmlydCArIGNvcmUtPnJlcy0+YWN0X3NpemUg KiBpbnN0LT5pZDsNCj4gPiArICAgICAgICAgICAgIGluc3QtPmFjdC5sZW5ndGggPSBjb3JlLT5y ZXMtPmFjdF9zaXplOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICB2cHVfaW5zdF9jcmVhdGVfZGJn ZnNfZmlsZShpbnN0KTsNCj4gPiArZXhpdDoNCj4gPiArICAgICBtdXRleF91bmxvY2soJmNvcmUt PmxvY2spOw0KPiA+ICsNCj4gPiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgZGV2 X2Vycihjb3JlLT5kZXYsICJyZWdpc3RlciBpbnN0YW5jZSBmYWlsXG4iKTsNCj4gPiArICAgICBy ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgdnB1X2luc3RfdW5yZWdpc3Rlcihz dHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUg KmNvcmU7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIWluc3QpOw0KPiA+ICsNCj4gPiArICAg ICBpZiAoIWluc3QtPmNvcmUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ ID4gKyAgICAgY29yZSA9IGluc3QtPmNvcmU7DQo+ID4gKyAgICAgdnB1X2NsZWFyX3JlcXVlc3Qo aW5zdCk7DQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgaWYg KGluc3QtPmlkID49IDAgJiYgaW5zdC0+aWQgPCBjb3JlLT5zdXBwb3J0ZWRfaW5zdGFuY2VfY291 bnQpIHsNCj4gPiArICAgICAgICAgICAgIHZwdV9pbnN0X3JlbW92ZV9kYmdmc19maWxlKGluc3Qp Ow0KPiA+ICsgICAgICAgICAgICAgbGlzdF9kZWxfaW5pdCgmaW5zdC0+bGlzdCk7DQo+ID4gKyAg ICAgICAgICAgICB2cHVfY29yZV9yZWxlYXNlX2luc3RhbmNlKGNvcmUsIGluc3QtPmlkKTsNCj4g PiArICAgICAgICAgICAgIGluc3QtPmlkID0gVlBVX0lOU1RfTlVMTF9JRDsNCj4gPiArICAgICB9 DQo+ID4gKyAgICAgdnB1X2NvcmVfY2hlY2tfaGFuZyhjb3JlKTsNCj4gPiArICAgICBpZiAoY29y ZS0+c3RhdGUgPT0gVlBVX0NPUkVfSEFORyAmJiAhY29yZS0+aW5zdGFuY2VfbWFzaykgew0KPiA+ ICsgICAgICAgICAgICAgZGV2X2luZm8oY29yZS0+ZGV2LCAicmVzZXQgaGFuZyBjb3JlXG4iKTsN Cj4gPiArICAgICAgICAgICAgIGlmICghdnB1X2NvcmVfc3dfcmVzZXQoY29yZSkpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9BQ1RJVkU7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmhhbmdfbWFzayA9IDA7DQo+ID4gKyAgICAgICAg ICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg dnB1X2luc3QgKnZwdV9jb3JlX2ZpbmRfaW5zdGFuY2Uoc3RydWN0IHZwdV9jb3JlICpjb3JlLCB1 MzIgaW5kZXgpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2luc3QgKmluc3QgPSBOVUxM Ow0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaW5zdCAqdG1wOw0KPiA+ICsNCj4gPiArICAgICBtdXRl eF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBpZiAoIXRlc3RfYml0KGluZGV4LCAmY29y ZS0+aW5zdGFuY2VfbWFzaykpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGV4aXQ7DQo+ID4gKyAg ICAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZjb3JlLT5pbnN0YW5jZXMsIGxpc3QpIHsNCj4g PiArICAgICAgICAgICAgIGlmICh0bXAtPmlkID09IGluZGV4KSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGluc3QgPSB2cHVfaW5zdF9nZXQodG1wKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICtleGl0 Og0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAg IHJldHVybiBpbnN0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtjb25zdCBzdHJ1Y3QgdnB1X2NvcmVf cmVzb3VyY2VzICp2cHVfZ2V0X3Jlc291cmNlKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfZGV2ICp2cHU7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9j b3JlICpjb3JlID0gTlVMTDsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgdnB1X2NvcmVfcmVzb3Vy Y2VzICpyZXMgPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWluc3QgfHwgIWluc3QtPnZw dSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBpZiAo aW5zdC0+Y29yZSAmJiBpbnN0LT5jb3JlLT5yZXMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g aW5zdC0+Y29yZS0+cmVzOw0KPiA+ICsNCj4gPiArICAgICB2cHUgPSBpbnN0LT52cHU7DQo+ID4g KyAgICAgbXV0ZXhfbG9jaygmdnB1LT5sb2NrKTsNCj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGNvcmUsICZ2cHUtPmNvcmVzLCBsaXN0KSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoY29y ZS0+dHlwZSA9PSBpbnN0LT50eXBlKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJlcyA9 IGNvcmUtPnJlczsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg ICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmdnB1LT5sb2Nr KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJlczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCB2cHVfY29yZV9wYXJzZV9kdChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnApDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGU7DQo+ID4gKyAgICAgc3RydWN0IHJlc291cmNlIHJlczsNCj4gPiArDQo+ID4gKyAgICAgaWYg KG9mX2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAibWVtb3J5LXJlZ2lvbiIsIE5VTEwpIDwg Mikgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJuZWVkIDIgbWVtb3J5 LXJlZ2lvbiBmb3IgYm9vdCBhbmQNCj4gcnBjXG4iKTsNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRU5PREVWOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgbm9kZSA9IG9mX3BhcnNl X3BoYW5kbGUobnAsICJtZW1vcnktcmVnaW9uIiwgMCk7DQo+ID4gKyAgICAgaWYgKCFub2RlKSB7 DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgImJvb3QtcmVnaW9uIG9mX3Bh cnNlX3BoYW5kbGUgZXJyb3JcbiIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7 DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIGlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5vZGUs IDAsICZyZXMpKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgImJvb3Qt cmVnaW9uIG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UNCj4gZXJyb3JcbiIpOw0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIGNvcmUtPmZ3LnBo eXMgPSByZXMuc3RhcnQ7DQo+ID4gKyAgICAgY29yZS0+ZncubGVuZ3RoID0gcmVzb3VyY2Vfc2l6 ZSgmcmVzKTsNCj4gPiArDQo+ID4gKyAgICAgbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJt ZW1vcnktcmVnaW9uIiwgMSk7DQo+ID4gKyAgICAgaWYgKCFub2RlKSB7DQo+ID4gKyAgICAgICAg ICAgICBkZXZfZXJyKGNvcmUtPmRldiwgInJwYy1yZWdpb24gb2ZfcGFyc2VfcGhhbmRsZSBlcnJv clxuIik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gPiArICAgICB9DQo+ ID4gKyAgICAgaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uobm9kZSwgMCwgJnJlcykpIHsNCj4g PiArICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAicnBjLXJlZ2lvbiBvZl9hZGRyZXNz X3RvX3Jlc291cmNlDQo+IGVycm9yXG4iKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBjb3JlLT5ycGMucGh5cyA9IHJlcy5zdGFydDsN Cj4gPiArICAgICBjb3JlLT5ycGMubGVuZ3RoID0gcmVzb3VyY2Vfc2l6ZSgmcmVzKTsNCj4gPiAr DQo+ID4gKyAgICAgaWYgKGNvcmUtPnJwYy5sZW5ndGggPCBjb3JlLT5yZXMtPnJwY19zaXplICsg Y29yZS0+cmVzLT5md2xvZ19zaXplKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUt PmRldiwgInRoZSBycGMtcmVnaW9uIDwlcGFkLCAweCV4PiBpcyBub3QNCj4gZW5vdWdoXG4iLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3JlLT5ycGMucGh5cywgY29yZS0+ cnBjLmxlbmd0aCk7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPmZ3LnZpcnQgPSBpb3JlbWFwX3djKGNvcmUtPmZ3 LnBoeXMsIGNvcmUtPmZ3Lmxlbmd0aCk7DQo+ID4gKyAgICAgY29yZS0+cnBjLnZpcnQgPSBpb3Jl bWFwX3djKGNvcmUtPnJwYy5waHlzLCBjb3JlLT5ycGMubGVuZ3RoKTsNCj4gPiArICAgICBtZW1z ZXRfaW8oY29yZS0+cnBjLnZpcnQsIDAsIGNvcmUtPnJwYy5sZW5ndGgpOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAodnB1X2lmYWNlX2NoZWNrX21lbW9yeV9yZWdpb24oY29yZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5ycGMucGh5cywNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3JlLT5ycGMubGVuZ3RoKSAhPQ0KPiBWUFVfQ09SRV9NRU1PUllf VU5DQUNIRUQpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAicnBjIHJl Z2lvbjwlcGFkLCAweCV4PiBpc24ndA0KPiB1bmNhY2hlZFxuIiwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmY29yZS0+cnBjLnBoeXMsIGNvcmUtPnJwYy5sZW5ndGgpOw0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICBjb3JlLT5sb2cucGh5cyA9IGNvcmUtPnJwYy5waHlzICsgY29yZS0+cmVzLT5ycGNfc2l6 ZTsNCj4gPiArICAgICBjb3JlLT5sb2cudmlydCA9IGNvcmUtPnJwYy52aXJ0ICsgY29yZS0+cmVz LT5ycGNfc2l6ZTsNCj4gPiArICAgICBjb3JlLT5sb2cubGVuZ3RoID0gY29yZS0+cmVzLT5md2xv Z19zaXplOw0KPiA+ICsgICAgIGNvcmUtPmFjdC5waHlzID0gY29yZS0+bG9nLnBoeXMgKyBjb3Jl LT5sb2cubGVuZ3RoOw0KPiA+ICsgICAgIGNvcmUtPmFjdC52aXJ0ID0gY29yZS0+bG9nLnZpcnQg KyBjb3JlLT5sb2cubGVuZ3RoOw0KPiA+ICsgICAgIGNvcmUtPmFjdC5sZW5ndGggPSBjb3JlLT5y cGMubGVuZ3RoIC0gY29yZS0+cmVzLT5ycGNfc2l6ZSAtDQo+IGNvcmUtPmxvZy5sZW5ndGg7DQo+ ID4gKyAgICAgY29yZS0+cnBjLmxlbmd0aCA9IGNvcmUtPnJlcy0+cnBjX3NpemU7DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9j b3JlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCB2cHVf Y29yZSAqY29yZTsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2RldiAqdnB1ID0gZGV2X2dldF9kcnZk YXRhKGRldi0+cGFyZW50KTsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICppZmFj ZTsNCj4gPiArICAgICB1MzIgaWZhY2VfZGF0YV9zaXplOw0KPiA+ICsgICAgIGludCByZXQ7DQo+ ID4gKw0KPiA+ICsgICAgIGRldl9kYmcoZGV2LCAicHJvYmVcbiIpOw0KPiA+ICsgICAgIGlmICgh dnB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgY29yZSA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29yZSksIEdGUF9LRVJORUwpOw0KPiA+ICsgICAg IGlmICghY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4g PiArICAgICBjb3JlLT5wZGV2ID0gcGRldjsNCj4gPiArICAgICBjb3JlLT5kZXYgPSBkZXY7DQo+ ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29yZSk7DQo+ID4gKyAgICAgY29y ZS0+dnB1ID0gdnB1Ow0KPiA+ICsgICAgIElOSVRfTElTVF9IRUFEKCZjb3JlLT5pbnN0YW5jZXMp Ow0KPiA+ICsgICAgIG11dGV4X2luaXQoJmNvcmUtPmxvY2spOw0KPiA+ICsgICAgIG11dGV4X2lu aXQoJmNvcmUtPmNtZF9sb2NrKTsNCj4gPiArICAgICBpbml0X2NvbXBsZXRpb24oJmNvcmUtPmNt cCk7DQo+ID4gKyAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmY29yZS0+YWNrX3dxKTsNCj4gPiAr ICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0RFSU5JVDsNCj4gPiArDQo+ID4gKyAgICAgY29y ZS0+cmVzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7DQo+ID4gKyAgICAgaWYgKCFj b3JlLT5yZXMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4g KyAgICAgY29yZS0+dHlwZSA9IGNvcmUtPnJlcy0+dHlwZTsNCj4gPiArICAgICBjb3JlLT5pZCA9 IG9mX2FsaWFzX2dldF9pZChkZXYtPm9mX25vZGUsICJ2cHVfY29yZSIpOw0KPiA+ICsgICAgIGlm IChjb3JlLT5pZCA8IDApIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiY2FuJ3Qg Z2V0IHZwdSBjb3JlIGlkXG4iKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiBjb3JlLT5pZDsN Cj4gPiArICAgICB9DQo+ID4gKyAgICAgZGV2X2luZm8oY29yZS0+ZGV2LCAiWyVkXSA9ICVzXG4i LCBjb3JlLT5pZCwNCj4gdnB1X2NvcmVfdHlwZV9kZXNjKGNvcmUtPnR5cGUpKTsNCj4gPiArICAg ICByZXQgPSB2cHVfY29yZV9wYXJzZV9kdChjb3JlLCBkZXYtPm9mX25vZGUpOw0KPiA+ICsgICAg IGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArICAg ICBjb3JlLT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOw0K PiA+ICsgICAgIGlmIChJU19FUlIoY29yZS0+YmFzZSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gUFRSX0VSUihjb3JlLT5iYXNlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCF2cHVfaWZhY2Vf Y2hlY2tfY29kZWMoY29yZSkpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2 LCAiaXMgbm90IHN1cHBvcnRlZFxuIik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IHZwdV9tYm94X2luaXQoY29y ZSk7DQo+ID4gKyAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ ID4gKw0KPiA+ICsgICAgIGlmYWNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppZmFjZSks IEdGUF9LRVJORUwpOw0KPiA+ICsgICAgIGlmICghaWZhY2UpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgaWZhY2VfZGF0YV9zaXplID0gdnB1X2lm YWNlX2dldF9kYXRhX3NpemUoY29yZSk7DQo+ID4gKyAgICAgaWYgKGlmYWNlX2RhdGFfc2l6ZSkg ew0KPiA+ICsgICAgICAgICAgICAgaWZhY2UtPnByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBpZmFj ZV9kYXRhX3NpemUsDQo+IEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKCFpZmFj ZS0+cHJpdikNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4g KyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXQgPSB2cHVfaWZhY2VfaW5pdChjb3JlLCBpZmFj ZSwgJmNvcmUtPnJwYywgY29yZS0+ZncucGh5cyk7DQo+ID4gKyAgICAgaWYgKHJldCkgew0KPiA+ ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJpbml0IGlmYWNlIGZhaWwsIHJldCA9 ICVkXG4iLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9pZmFjZV9jb25maWdfc3lzdGVtKGNvcmUsIHZwdS0+cmVz LT5tcmVnX2Jhc2UsIHZwdS0+YmFzZSk7DQo+ID4gKyAgICAgdnB1X2lmYWNlX3NldF9sb2dfYnVm KGNvcmUsICZjb3JlLT5sb2cpOw0KPiA+ICsNCj4gPiArICAgICBwbV9ydW50aW1lX2VuYWJsZShk ZXYpOw0KPiA+ICsgICAgIHJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsNCj4gDQo+IFVz ZSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KCkgaW5zdGVhZCBhbmQgZHJvcCB0aGUNCj4gcG1f cnVudGltZV9wdXRfbm9pZGxlKCkNCj4gaW4gdGhlICdpZicgYmVsb3cuIFRoZSB1c2Ugb2YgcG1f cnVudGltZV9yZXN1bWVfYW5kX2dldCBpcyBwcmVmZXJyZWQgb3Zlcg0KPiB0aGUgcmF0aGVyIGNv bmZ1c2luZyBwbV9ydW50aW1lX2dldF9zeW5jKCkuDQo+IA0KPiBJZiBpdCBpcyB1c2VkIGVsc2V3 aGVyZSBpbiB0aGlzIHNlcmllcyBhcyB3ZWxsIChJIGhhdmVuJ3QgY2hlY2tlZCB0aGlzKSwNCj4g dGhlbiBtYWtlIHRoZSBzYW1lIGNoYW5nZXMuDQo+IA0KPiA+ICsgICAgIGlmIChyZXQpIHsNCj4g PiArICAgICAgICAgICAgIHBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOw0KPiA+ICsgICAgICAg ICAgICAgcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7DQo+ID4gKyAgICAgICAgICAgICBn b3RvIGVycl9ydW50aW1lX2Rpc2FibGU7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBy ZXQgPSB2cHVfY29yZV9yZWdpc3RlcihkZXYtPnBhcmVudCwgY29yZSk7DQo+ID4gKyAgICAgaWYg KHJldCkNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX2NvcmVfcmVnaXN0ZXI7DQo+ID4gKyAg ICAgY29yZS0+cGFyZW50ID0gZGV2LT5wYXJlbnQ7DQo+ID4gKw0KPiA+ICsgICAgIHBtX3J1bnRp bWVfcHV0X3N5bmMoZGV2KTsNCj4gPiArICAgICB2cHVfY29yZV9jcmVhdGVfZGJnZnNfZmlsZShj b3JlKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnJfY29yZV9y ZWdpc3RlcjoNCj4gPiArICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7DQo+ID4gK2Vycl9y dW50aW1lX2Rpc2FibGU6DQo+ID4gKyAgICAgcG1fcnVudGltZV9kaXNhYmxlKGRldik7DQo+ID4g Kw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg dnB1X2NvcmVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsgICAgIHN0cnVj dCB2cHVfY29yZSAqY29yZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsgICAg IGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9jb3JlX3JlbW92ZV9kYmdmc19maWxlKGNv cmUpOw0KPiA+ICsgICAgIHJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsNCj4gDQo+IEFo LCBzYW1lIGhlcmUuDQo+IA0KPiA+ICsgICAgIFdBUk5fT04ocmV0IDwgMCk7DQo+ID4gKw0KPiA+ ICsgICAgIHZwdV9jb3JlX3NodXRkb3duKGNvcmUpOw0KPiA+ICsgICAgIHBtX3J1bnRpbWVfcHV0 X3N5bmMoZGV2KTsNCj4gPiArICAgICBwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsNCj4gPiArDQo+ ID4gKyAgICAgdnB1X2NvcmVfdW5yZWdpc3Rlcihjb3JlLT5wYXJlbnQsIGNvcmUpOw0KPiA+ICsg ICAgIGlvdW5tYXAoY29yZS0+ZncudmlydCk7DQo+ID4gKyAgICAgaW91bm1hcChjb3JlLT5ycGMu dmlydCk7DQo+ID4gKyAgICAgbXV0ZXhfZGVzdHJveSgmY29yZS0+bG9jayk7DQo+ID4gKyAgICAg bXV0ZXhfZGVzdHJveSgmY29yZS0+Y21kX2xvY2spOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB2cHVfY29y ZV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArDQo+ID4g KyAgICAgcmV0dXJuIHZwdV9tYm94X3JlcXVlc3QoY29yZSk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdnB1X2NvcmVfcnVudGltZV9zdXNwZW5kKHN0cnVj dCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsNCj4gPiArICAgICB2cHVfbWJveF9mcmVlKGNv cmUpOw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p ZCB2cHVfY29yZV9jYW5jZWxfd29yayhzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgdnB1X2luc3QgKmluc3QgPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBj YW5jZWxfd29ya19zeW5jKCZjb3JlLT5tc2dfd29yayk7DQo+ID4gKyAgICAgY2FuY2VsX2RlbGF5 ZWRfd29ya19zeW5jKCZjb3JlLT5tc2dfZGVsYXllZF93b3JrKTsNCj4gPiArDQo+ID4gKyAgICAg bXV0ZXhfbG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShp bnN0LCAmY29yZS0+aW5zdGFuY2VzLCBsaXN0KQ0KPiA+ICsgICAgICAgICAgICAgY2FuY2VsX3dv cmtfc3luYygmaW5zdC0+bXNnX3dvcmspOw0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+ bG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZwdV9jb3JlX3Jlc3VtZV93 b3JrKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVf aW5zdCAqaW5zdCA9IE5VTEw7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBkZWxheSA9IG1zZWNz X3RvX2ppZmZpZXMoMTApOw0KPiA+ICsNCj4gPiArICAgICBxdWV1ZV93b3JrKGNvcmUtPndvcmtx dWV1ZSwgJmNvcmUtPm1zZ193b3JrKTsNCj4gPiArICAgICBxdWV1ZV9kZWxheWVkX3dvcmsoY29y ZS0+d29ya3F1ZXVlLCAmY29yZS0+bXNnX2RlbGF5ZWRfd29yaywNCj4gZGVsYXkpOw0KPiA+ICsN Cj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5KGluc3QsICZjb3JlLT5pbnN0YW5jZXMsIGxpc3QpDQo+ID4gKyAgICAgICAgICAg ICBxdWV1ZV93b3JrKGluc3QtPndvcmtxdWV1ZSwgJmluc3QtPm1zZ193b3JrKTsNCj4gPiArICAg ICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IF9fbWF5YmVfdW51c2VkIHZwdV9jb3JlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFjb3Jl LT5yZXMtPnN0YW5kYWxvbmUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ ID4gKyAgICAgbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgcG1fcnVudGltZV9n ZXRfc3luYyhkZXYpOw0KPiA+ICsgICAgIHZwdV9jb3JlX2dldF92cHUoY29yZSk7DQo+ID4gKyAg ICAgaWYgKGNvcmUtPnN0YXRlICE9IFZQVV9DT1JFX1NOQVBTSE9UKQ0KPiA+ICsgICAgICAgICAg ICAgZ290byBleGl0Ow0KPiA+ICsNCj4gPiArICAgICBpZiAoIXZwdV9pZmFjZV9nZXRfcG93ZXJf c3RhdGUoY29yZSkpIHsNCj4gPiArICAgICAgICAgICAgIGlmICghbGlzdF9lbXB0eSgmY29yZS0+ aW5zdGFuY2VzKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSB2cHVfY29yZV9i b290KGNvcmUsIGZhbHNlKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAiJXMg Ym9vdCBmYWlsXG4iLA0KPiBfX2Z1bmNfXyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9ERUlOSVQ7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ ID4gKyAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3Jl LT5zdGF0ZSA9IFZQVV9DT1JFX0RFSU5JVDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAg ICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgaWYgKCFsaXN0X2VtcHR5KCZjb3JlLT5pbnN0 YW5jZXMpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZwdV9jb3JlX3N3X3Jl c2V0KGNvcmUpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICIlcyBzd19yZXNl dCBmYWlsXG4iLA0KPiBfX2Z1bmNfXyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9IQU5HOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXhpdDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9B Q1RJVkU7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArZXhpdDoNCj4gPiArICAgICBwbV9ydW50 aW1lX3B1dF9zeW5jKGRldik7DQo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsN Cj4gPiArDQo+ID4gKyAgICAgdnB1X2NvcmVfcmVzdW1lX3dvcmsoY29yZSk7DQo+ID4gKyAgICAg cmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJlX3VudXNl ZCB2cHVfY29yZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAg IHN0cnVjdCB2cHVfY29yZSAqY29yZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsgICAg IGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmUtPnJlcy0+c3RhbmRhbG9u ZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9s b2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBpZiAoY29yZS0+c3RhdGUgPT0gVlBVX0NPUkVf QUNUSVZFKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoIWxpc3RfZW1wdHkoJmNvcmUtPmluc3Rh bmNlcykpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdnB1X2NvcmVfc25hcHNo b3QoY29yZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX1NOQVBTSE9UOw0KPiA+ICsgICAgIH0NCj4gPiAr ICAgICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICB2cHVfY29y ZV9jYW5jZWxfd29yayhjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmY29yZS0+ bG9jayk7DQo+ID4gKyAgICAgdnB1X2NvcmVfcHV0X3ZwdShjb3JlKTsNCj4gPiArICAgICBtdXRl eF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2cHVfY29yZV9wbV9vcHMg PSB7DQo+ID4gKyAgICAgU0VUX1JVTlRJTUVfUE1fT1BTKHZwdV9jb3JlX3J1bnRpbWVfc3VzcGVu ZCwNCj4gdnB1X2NvcmVfcnVudGltZV9yZXN1bWUsIE5VTEwpDQo+ID4gKyAgICAgU0VUX1NZU1RF TV9TTEVFUF9QTV9PUFModnB1X2NvcmVfc3VzcGVuZCwgdnB1X2NvcmVfcmVzdW1lKQ0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB2cHVfY29yZV9yZXNvdXJjZXMgaW14OHFfZW5j ID0gew0KPiA+ICsgICAgIC50eXBlID0gVlBVX0NPUkVfVFlQRV9FTkMsDQo+ID4gKyAgICAgLmZ3 bmFtZSA9ICJ2cHUvdnB1X2Z3X2lteDhfZW5jLmJpbiIsDQo+ID4gKyAgICAgLnN0cmlkZSA9IDE2 LA0KPiA+ICsgICAgIC5tYXhfd2lkdGggPSAxOTIwLA0KPiA+ICsgICAgIC5tYXhfaGVpZ2h0ID0g MTkyMCwNCj4gPiArICAgICAubWluX3dpZHRoID0gNjQsDQo+ID4gKyAgICAgLm1pbl9oZWlnaHQg PSA0OCwNCj4gPiArICAgICAuc3RlcF93aWR0aCA9IDIsDQo+ID4gKyAgICAgLnN0ZXBfaGVpZ2h0 ID0gMiwNCj4gPiArICAgICAucnBjX3NpemUgPSAweDgwMDAwLA0KPiA+ICsgICAgIC5md2xvZ19z aXplID0gMHg4MDAwMCwNCj4gPiArICAgICAuYWN0X3NpemUgPSAweGMwMDAwLA0KPiA+ICsgICAg IC5zdGFuZGFsb25lID0gdHJ1ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qg dnB1X2NvcmVfcmVzb3VyY2VzIGlteDhxX2RlYyA9IHsNCj4gPiArICAgICAudHlwZSA9IFZQVV9D T1JFX1RZUEVfREVDLA0KPiA+ICsgICAgIC5md25hbWUgPSAidnB1L3ZwdV9md19pbXg4X2RlYy5i aW4iLA0KPiA+ICsgICAgIC5zdHJpZGUgPSAyNTYsDQo+ID4gKyAgICAgLm1heF93aWR0aCA9IDgx ODgsDQo+ID4gKyAgICAgLm1heF9oZWlnaHQgPSA4MTg4LA0KPiA+ICsgICAgIC5taW5fd2lkdGgg PSAxNiwNCj4gPiArICAgICAubWluX2hlaWdodCA9IDE2LA0KPiA+ICsgICAgIC5zdGVwX3dpZHRo ID0gMSwNCj4gPiArICAgICAuc3RlcF9oZWlnaHQgPSAxLA0KPiA+ICsgICAgIC5ycGNfc2l6ZSA9 IDB4ODAwMDAsDQo+ID4gKyAgICAgLmZ3bG9nX3NpemUgPSAweDgwMDAwLA0KPiA+ICsgICAgIC5z dGFuZGFsb25lID0gdHJ1ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHZwdV9jb3JlX2R0X21hdGNoW10gPSB7DQo+ID4gKyAgICAgeyAuY29t cGF0aWJsZSA9ICJueHAsaW14OHEtdnB1LWVuY29kZXIiLCAuZGF0YSA9ICZpbXg4cV9lbmMgfSwN Cj4gPiArICAgICB7IC5jb21wYXRpYmxlID0gIm54cCxpbXg4cS12cHUtZGVjb2RlciIsIC5kYXRh ID0gJmlteDhxX2RlYyB9LA0KPiA+ICsgICAgIHt9DQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIHZwdV9jb3JlX2R0X21hdGNoKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGFtcGhpb25fdnB1X2NvcmVfZHJpdmVyID0gew0KPiA+ICsgICAg IC5wcm9iZSA9IHZwdV9jb3JlX3Byb2JlLA0KPiA+ICsgICAgIC5yZW1vdmUgPSB2cHVfY29yZV9y ZW1vdmUsDQo+ID4gKyAgICAgLmRyaXZlciA9IHsNCj4gPiArICAgICAgICAgICAgIC5uYW1lID0g ImFtcGhpb24tdnB1LWNvcmUiLA0KPiA+ICsgICAgICAgICAgICAgLm9mX21hdGNoX3RhYmxlID0g dnB1X2NvcmVfZHRfbWF0Y2gsDQo+ID4gKyAgICAgICAgICAgICAucG0gPSAmdnB1X2NvcmVfcG1f b3BzLA0KPiA+ICsgICAgIH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtpbnQgX19pbml0IHZwdV9j b3JlX2RyaXZlcl9pbml0KHZvaWQpDQo+ID4gK3sNCj4gPiArICAgICByZXR1cm4gcGxhdGZvcm1f ZHJpdmVyX3JlZ2lzdGVyKCZhbXBoaW9uX3ZwdV9jb3JlX2RyaXZlcik7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3ZvaWQgX19leGl0IHZwdV9jb3JlX2RyaXZlcl9leGl0KHZvaWQpDQo+ID4gK3sNCj4g PiArICAgICBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYW1waGlvbl92cHVfY29yZV9kcml2 ZXIpOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1w aGlvbi92cHVfY29yZS5oDQo+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9j b3JlLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4u MDBhNjYyOTk3ZGE0DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1waGlvbi92cHVfY29yZS5oDQo+ID4gQEAgLTAsMCArMSwxNSBAQA0KPiA+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsvKg0KPiA+ICsgKiBD b3B5cmlnaHQgMjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX0FN UEhJT05fVlBVX0NPUkVfSA0KPiA+ICsjZGVmaW5lIF9BTVBISU9OX1ZQVV9DT1JFX0gNCj4gPiAr DQo+ID4gK3ZvaWQgY3NyX3dyaXRlbChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIHUzMiByZWcsIHUz MiB2YWwpOw0KPiA+ICt1MzIgY3NyX3JlYWRsKHN0cnVjdCB2cHVfY29yZSAqY29yZSwgdTMyIHJl Zyk7DQo+ID4gK2ludCB2cHVfYWxsb2NfZG1hKHN0cnVjdCB2cHVfY29yZSAqY29yZSwgc3RydWN0 IHZwdV9idWZmZXIgKmJ1Zik7DQo+ID4gK3ZvaWQgdnB1X2ZyZWVfZG1hKHN0cnVjdCB2cHVfYnVm ZmVyICpidWYpOw0KPiA+ICtzdHJ1Y3QgdnB1X2luc3QgKnZwdV9jb3JlX2ZpbmRfaW5zdGFuY2Uo c3RydWN0IHZwdV9jb3JlICpjb3JlLCB1MzIgaW5kZXgpOw0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMN Cj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2RiZy5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjJlN2UxMTEwMWY5OQ0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24v dnB1X2RiZy5jDQo+ID4gQEAgLTAsMCArMSw0OTUgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMjAtMjAyMSBO WFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ID4gKyNpbmNs dWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5o Pg0KPiA+ICsjaW5jbHVkZSAidnB1LmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfZGVmcy5oIg0KPiA+ ICsjaW5jbHVkZSAidnB1X2hlbHBlcnMuaCINCj4gPiArI2luY2x1ZGUgInZwdV9jbWRzLmgiDQo+ ID4gKyNpbmNsdWRlICJ2cHVfcnBjLmgiDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcHJpbnRfYnVmX2Rl c2Mgew0KPiA+ICsgICAgIHUzMiBzdGFydF9oX3BoeTsNCj4gPiArICAgICB1MzIgc3RhcnRfaF92 aXI7DQo+ID4gKyAgICAgdTMyIHN0YXJ0X207DQo+ID4gKyAgICAgdTMyIGJ5dGVzOw0KPiA+ICsg ICAgIHUzMiByZWFkOw0KPiA+ICsgICAgIHUzMiB3cml0ZTsNCj4gPiArICAgICBjaGFyIGJ1ZmZl clswXTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjaGFyICp2YjJfc3RhdF9uYW1lW10g PSB7DQo+ID4gKyAgICAgW1ZCMl9CVUZfU1RBVEVfREVRVUVVRURdID0gImRlcXVldWVkIiwNCj4g PiArICAgICBbVkIyX0JVRl9TVEFURV9JTl9SRVFVRVNUXSA9ICJpbl9yZXF1ZXN0IiwNCj4gPiAr ICAgICBbVkIyX0JVRl9TVEFURV9QUkVQQVJJTkddID0gInByZXBhcmluZyIsDQo+ID4gKyAgICAg W1ZCMl9CVUZfU1RBVEVfUVVFVUVEXSA9ICJxdWV1ZWQiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NU QVRFX0FDVElWRV0gPSAiYWN0aXZlIiwNCj4gPiArICAgICBbVkIyX0JVRl9TVEFURV9ET05FXSA9 ICJkb25lIiwNCj4gPiArICAgICBbVkIyX0JVRl9TVEFURV9FUlJPUl0gPSAiZXJyb3IiLA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNoYXIgKnZwdV9zdGF0X25hbWVbXSA9IHsNCj4gPiAr ICAgICBbVlBVX0JVRl9TVEFURV9JRExFXSA9ICJpZGxlIiwNCj4gPiArICAgICBbVlBVX0JVRl9T VEFURV9JTlVTRV0gPSAiaW51c2UiLA0KPiA+ICsgICAgIFtWUFVfQlVGX1NUQVRFX0RFQ09ERURd ID0gImRlY29kZWQiLA0KPiA+ICsgICAgIFtWUFVfQlVGX1NUQVRFX1JFQURZXSA9ICJyZWFkeSIs DQo+ID4gKyAgICAgW1ZQVV9CVUZfU1RBVEVfU0tJUF0gPSAic2tpcCIsDQo+ID4gKyAgICAgW1ZQ VV9CVUZfU1RBVEVfRVJST1JdID0gImVycm9yIiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgdnB1X2RiZ19pbnN0YW5jZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2luc3QgKmluc3QgPSBzLT5wcml2YXRlOw0KPiA+ ICsgICAgIGNoYXIgc3RyWzEyOF07DQo+ID4gKyAgICAgaW50IG51bTsNCj4gPiArICAgICBzdHJ1 Y3QgdmIyX3F1ZXVlICp2cTsNCj4gPiArICAgICBpbnQgaTsNCj4gPiArDQo+ID4gKyAgICAgbnVt ID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJbJXNdXG4iLA0KPiB2cHVfY29yZV90eXBl X2Rlc2MoaW5zdC0+dHlwZSkpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0p KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIG51bSA9IHNj bnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAidGdpZyA9ICVkLHBpZCA9ICVkXG4iLCBpbnN0LT50 Z2lkLA0KPiBpbnN0LT5waWQpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0p KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRm KHN0ciwgc2l6ZW9mKHN0ciksICJzdGF0ZSA9ICVkXG4iLCBpbnN0LT5zdGF0ZSk7DQo+ID4gKyAg ICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g MDsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgIm1pbl9idWZmZXJfb3V0ID0gJWQsIG1pbl9idWZmZXJfY2FwID0g JWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QtPm1pbl9idWZmZXJfb3V0LCBp bnN0LT5taW5fYnVmZmVyX2NhcCk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51 bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKw0KPiA+ICsgICAg IHZxID0gdjRsMl9tMm1fZ2V0X3NyY192cShpbnN0LT5maC5tMm1fY3R4KTsNCj4gPiArICAgICBu dW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgIm91dHB1dCAoJTJkLCAlMmQpOiBmbXQgPSAlYyVjJWMlYyAlZA0KPiB4ICVkLCAlZDsiLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICB2YjJfaXNfc3RyZWFtaW5nKHZxKSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgdnEtPm51bV9idWZmZXJzLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBpbnN0LT5vdXRfZm9ybWF0LnBpeGZtdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg aW5zdC0+b3V0X2Zvcm1hdC5waXhmbXQgPj4gOCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg aW5zdC0+b3V0X2Zvcm1hdC5waXhmbXQgPj4gMTYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGluc3QtPm91dF9mb3JtYXQucGl4Zm10ID4+IDI0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBpbnN0LT5vdXRfZm9ybWF0LndpZHRoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnN0 LT5vdXRfZm9ybWF0LmhlaWdodCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdnEtPmxhc3Rf YnVmZmVyX2RlcXVldWVkKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkN Cj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBp bnN0LT5vdXRfZm9ybWF0Lm51bV9wbGFuZXM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgbnVt ID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQoJWQpIiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LnNpemVpbWFnZVtpXSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LmJ5dGVzcGVybGlu ZVtpXSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAg IGlmIChzZXFfd3JpdGUocywgIlxuIiwgMSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsN Cj4gPiArDQo+ID4gKyAgICAgdnEgPSB2NGwyX20ybV9nZXRfZHN0X3ZxKGluc3QtPmZoLm0ybV9j dHgpOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAiY2FwdHVyZSglMmQsICUyZCk6IGZtdCA9ICVjJWMlYyVjICVk DQo+IHggJWQsICVkOyIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHZiMl9pc19zdHJlYW1p bmcodnEpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB2cS0+bnVtX2J1ZmZlcnMsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQucGl4Zm10LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LnBpeGZtdCA+PiA4LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LnBpeGZtdCA+PiAxNiwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgaW5zdC0+Y2FwX2Zvcm1hdC5waXhmbXQgPj4gMjQsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQud2lkdGgsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQuaGVpZ2h0LA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICB2cS0+bGFzdF9idWZmZXJfZGVxdWV1ZWQpOw0KPiA+ICsgICAgIGlmIChzZXFfd3Jp dGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAg Zm9yIChpID0gMDsgaSA8IGluc3QtPmNhcF9mb3JtYXQubnVtX3BsYW5lczsgaSsrKSB7DQo+ID4g KyAgICAgICAgICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiAlZCglZCki LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQuc2l6 ZWltYWdlW2ldLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNhcF9m b3JtYXQuYnl0ZXNwZXJsaW5lW2ldKTsNCj4gPiArICAgICAgICAgICAgIGlmIChzZXFfd3JpdGUo cywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiAr ICAgICB9DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCAiXG4iLCAxKSkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihz dHIpLCAiY3JvcDogKCVkLCAlZCkgJWQgeCAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgaW5zdC0+Y3JvcC5sZWZ0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jcm9w LnRvcCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y3JvcC53aWR0aCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y3JvcC5oZWlnaHQpOw0KPiA+ICsgICAgIGlmIChz ZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4g Kw0KPiA+ICsgICAgIHZxID0gdjRsMl9tMm1fZ2V0X3NyY192cShpbnN0LT5maC5tMm1fY3R4KTsN Cj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgdnEtPm51bV9idWZmZXJzOyBpKyspIHsNCj4gPiAr ICAgICAgICAgICAgIHN0cnVjdCB2YjJfYnVmZmVyICp2YiA9IHZxLT5idWZzW2ldOw0KPiA+ICsg ICAgICAgICAgICAgc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1 ZmZlcih2Yik7DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgdnB1X3ZiMl9idWZmZXIgKnZwdV9i dWYgPSB0b192cHVfdmIyX2J1ZmZlcih2YnVmKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBp ZiAodmItPnN0YXRlID09IFZCMl9CVUZfU1RBVEVfREVRVUVVRUQpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgbnVtID0gc2NucHJpbnRmKHN0 ciwgc2l6ZW9mKHN0ciksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dHB1 dCBbJTJkXSBzdGF0ZSA9ICUxMHMsICU4c1xuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpLCB2YjJfc3RhdF9uYW1lW3ZiLT5zdGF0ZV0sDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdnB1X3N0YXRfbmFtZVt2cHVfYnVmLT5zdGF0ZV0pOw0KPiA+ICsgICAg ICAgICAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgdnEgPSB2NGwy X20ybV9nZXRfZHN0X3ZxKGluc3QtPmZoLm0ybV9jdHgpOw0KPiA+ICsgICAgIGZvciAoaSA9IDA7 IGkgPCB2cS0+bnVtX2J1ZmZlcnM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgc3RydWN0IHZi Ml9idWZmZXIgKnZiID0gdnEtPmJ1ZnNbaV07DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmIy X3Y0bDJfYnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCj4gPiArICAgICAg ICAgICAgIHN0cnVjdCB2cHVfdmIyX2J1ZmZlciAqdnB1X2J1ZiA9IHRvX3ZwdV92YjJfYnVmZmVy KHZidWYpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICh2Yi0+c3RhdGUgPT0gVkIyX0JV Rl9TVEFURV9ERVFVRVVFRCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ ID4gKyAgICAgICAgICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwdHVyZVslMmRdIHN0YXRlID0gJTEwcywg JThzXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHZiMl9zdGF0X25h bWVbdmItPnN0YXRlXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cHVfc3Rh dF9uYW1lW3ZwdV9idWYtPnN0YXRlXSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRl KHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4g KyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3Ry KSwgInNlcXVlbmNlID0gJWRcbiIsIGluc3QtPnNlcXVlbmNlKTsNCj4gPiArICAgICBpZiAoc2Vx X3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoaW5zdC0+dXNlX3N0cmVhbV9idWZmZXIpIHsNCj4gPiArICAgICAgICAg ICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAic3RyZWFtX2J1ZmZlciA9ICVk IC8gJWQsDQo+IDwlcGFkLCAweCV4PlxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2cHVfaGVscGVyX2dldF91c2VkX3NwYWNlKGluc3QpLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGluc3QtPnN0cmVhbV9idWZmZXIubGVuZ3RoLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZpbnN0LT5zdHJlYW1fYnVmZmVyLnBoeXMsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC0+c3RyZWFtX2J1ZmZlci5sZW5ndGgpOw0K PiA+ICsgICAgICAgICAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBudW0gPSBz Y25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgImtmaWZvIGxlbiA9IDB4JXhcbiIsDQo+IGtmaWZv X2xlbigmaW5zdC0+bXNnX2ZpZm8pKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwg bnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBudW0g PSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgImZsb3cgOlxuIik7DQo+ID4gKyAgICAgaWYg KHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4g PiArDQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmaW5zdC0+Y29yZS0+Y21kX2xvY2spOw0KPiA+ICsg ICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluc3QtPmZsb3dzKTsgaSsrKSB7DQo+ID4g KyAgICAgICAgICAgICB1MzIgaWR4ID0gKGluc3QtPmZsb3dfaWR4ICsgaSkgJSAoQVJSQVlfU0la RShpbnN0LT5mbG93cykpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICghaW5zdC0+Zmxv d3NbaWR4XSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAg ICAgICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIlx0WyVzXTB4JXhcbiIs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Zmxvd3NbaWR4XSA+PSBW UFVfTVNHX0lEX05PT1AgPw0KPiAiTSIgOiAiQyIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW5zdC0+Zmxvd3NbaWR4XSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dy aXRlKHMsIHN0ciwgbnVtKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxv Y2soJmluc3QtPmNvcmUtPmNtZF9sb2NrKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIDA7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11dGV4 X3VubG9jaygmaW5zdC0+Y29yZS0+Y21kX2xvY2spOw0KPiA+ICsNCj4gPiArICAgICBpID0gMDsN Cj4gPiArICAgICB3aGlsZSAodHJ1ZSkgew0KPiA+ICsgICAgICAgICAgICAgbnVtID0gY2FsbF92 b3AoaW5zdCwgZ2V0X2RlYnVnX2luZm8sIHN0ciwgc2l6ZW9mKHN0ciksIGkrKyk7DQo+ID4gKyAg ICAgICAgICAgICBpZiAobnVtIDw9IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X2RiZ19jb3Jl KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVj dCB2cHVfY29yZSAqY29yZSA9IHMtPnByaXZhdGU7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9zaGFy ZWRfYWRkciAqaWZhY2UgPSBjb3JlLT5pZmFjZTsNCj4gPiArICAgICBjaGFyIHN0clsxMjhdOw0K PiA+ICsgICAgIGludCBudW07DQo+ID4gKw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIs IHNpemVvZihzdHIpLCAiWyVzXVxuIiwNCj4gdnB1X2NvcmVfdHlwZV9kZXNjKGNvcmUtPnR5cGUp KTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAg ICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXpl b2Yoc3RyKSwgImJvb3RfcmVnaW9uICA9IDwlcGFkLCAweCV4PlxuIiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgJmNvcmUtPmZ3LnBoeXMsIGNvcmUtPmZ3Lmxlbmd0aCk7DQo+ID4gKyAgICAg aWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsN Cj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgInJwY19yZWdpb24g ICA9IDwlcGFkLCAweCV4PiB1c2VkID0NCj4gMHgleFxuIiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgJmNvcmUtPnJwYy5waHlzLCBjb3JlLT5ycGMubGVuZ3RoLA0KPiBjb3JlLT5ycGMuYnl0 ZXN1c2VkKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVv ZihzdHIpLCAiZndsb2dfcmVnaW9uID0gPCVwYWQsIDB4JXg+XG4iLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAmY29yZS0+bG9nLnBoeXMsIGNvcmUtPmxvZy5sZW5ndGgpOw0KPiA+ICsgICAg IGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAic3Rh dGUgPSAlZFxuIiwgY29yZS0+c3RhdGUpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3Ry LCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgaWYgKGNvcmUt PnN0YXRlID09IFZQVV9DT1JFX0RFSU5JVCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0K PiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiZncgdmVyc2lvbiA9 ICVkLiVkLiVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3JlLT5m d192ZXJzaW9uID4+IDE2KSAmIDB4ZmYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvcmUtPmZ3X3ZlcnNpb24gPj4gOCkgJiAweGZmLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvcmUtPmZ3X3ZlcnNpb24gJiAweGZmKTsNCj4gPiArICAgICBpZiAoc2Vx X3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsg ICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiaW5zdGFuY2VzID0gJWQvJWQg KDB4JTAybHgpLCAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaHdlaWdodDMyKGNv cmUtPmluc3RhbmNlX21hc2spLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3JlLT5zdXBw b3J0ZWRfaW5zdGFuY2VfY291bnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmlu c3RhbmNlX21hc2ssDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvcmUtPnJlcXVlc3RfY291 bnQpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0 ciksICJrZmlmbyBsZW4gPSAweCV4XG4iLA0KPiBrZmlmb19sZW4oJmNvcmUtPm1zZ19maWZvKSk7 DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gMDsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgImNtZF9idWY6WzB4JXgsIDB4JXhdLCB3cHRyID0g MHgleCwgcnB0ciA9DQo+IDB4JXhcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNl LT5jbWRfZGVzYy0+c3RhcnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNlLT5jbWRf ZGVzYy0+ZW5kLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZmFjZS0+Y21kX2Rlc2MtPndw dHIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNlLT5jbWRfZGVzYy0+cnB0cik7DQo+ ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gMDsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgIm1zZ19idWY6WzB4JXgsIDB4JXhdLCB3cHRyID0gMHgl eCwgcnB0ciA9DQo+IDB4JXhcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNlLT5t c2dfZGVzYy0+c3RhcnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNlLT5tc2dfZGVz Yy0+ZW5kLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZmFjZS0+bXNnX2Rlc2MtPndwdHIs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNlLT5tc2dfZGVzYy0+cnB0cik7DQo+ID4g KyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgdnB1X2RiZ19md2xvZyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBzLT5wcml2YXRlOw0KPiA+ ICsgICAgIHN0cnVjdCBwcmludF9idWZfZGVzYyAqcHJpbnRfYnVmOw0KPiA+ICsgICAgIGludCBs ZW5ndGg7DQo+ID4gKyAgICAgdTMyIHJwdHI7DQo+ID4gKyAgICAgdTMyIHdwdHI7DQo+ID4gKyAg ICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghY29yZS0+bG9nLnZpcnQgfHwg Y29yZS0+c3RhdGUgPT0gVlBVX0NPUkVfREVJTklUKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKw0KPiA+ICsgICAgIHByaW50X2J1ZiA9IGNvcmUtPmxvZy52aXJ0Ow0KPiA+ICsg ICAgIHJwdHIgPSBwcmludF9idWYtPnJlYWQ7DQo+ID4gKyAgICAgd3B0ciA9IHByaW50X2J1Zi0+ d3JpdGU7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChycHRyID09IHdwdHIpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gMDsNCj4gPiArICAgICBlbHNlIGlmIChycHRyIDwgd3B0cikNCj4gPiArICAg ICAgICAgICAgIGxlbmd0aCA9IHdwdHIgLSBycHRyOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAg ICAgICAgICAgIGxlbmd0aCA9IHByaW50X2J1Zi0+Ynl0ZXMgKyB3cHRyIC0gcnB0cjsNCj4gPiAr DQo+ID4gKyAgICAgaWYgKHMtPmNvdW50ICsgbGVuZ3RoID49IHMtPnNpemUpIHsNCj4gPiArICAg ICAgICAgICAgIHMtPmNvdW50ID0gcy0+c2l6ZTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAw Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKHJwdHIgKyBsZW5ndGggPj0gcHJp bnRfYnVmLT5ieXRlcykgew0KPiA+ICsgICAgICAgICAgICAgaW50IG51bSA9IHByaW50X2J1Zi0+ Ynl0ZXMgLSBycHRyOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmIChzZXFfd3JpdGUocywg cHJpbnRfYnVmLT5idWZmZXIgKyBycHRyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICByZXQgPSAtMTsNCj4gPiArICAgICAgICAgICAgIGxlbmd0aCAtPSBudW07DQo+ID4gKyAgICAg ICAgICAgICBycHRyID0gMDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChsZW5n dGgpIHsNCj4gPiArICAgICAgICAgICAgIGlmIChzZXFfd3JpdGUocywgcHJpbnRfYnVmLT5idWZm ZXIgKyBycHRyLCBsZW5ndGgpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsN Cj4gPiArICAgICAgICAgICAgIHJwdHIgKz0gbGVuZ3RoOw0KPiA+ICsgICAgIH0NCj4gPiArICAg ICBpZiAoIXJldCkNCj4gPiArICAgICAgICAgICAgIHByaW50X2J1Zi0+cmVhZCA9IHJwdHI7DQo+ ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHZwdV9kYmdfaW5zdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxw KQ0KPiA+ICt7DQo+ID4gKyAgICAgcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHZwdV9kYmdfaW5z dGFuY2UsIGlub2RlLT5pX3ByaXZhdGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Np emVfdCB2cHVfZGJnX2luc3Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IHNpemUsIGxv ZmZfdA0KPiAqcHBvcykNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBzZXFfZmlsZSAqcyA9IGZp bGUtPnByaXZhdGVfZGF0YTsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2luc3QgKmluc3QgPSBzLT5w cml2YXRlOw0KPiA+ICsNCj4gPiArICAgICB2cHVfc2Vzc2lvbl9kZWJ1ZyhpbnN0KTsNCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuIHNpemU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6 ZV90IHZwdV9kYmdfY29yZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3Qgc2l6ZSwgbG9m Zl90DQo+ICpwcG9zKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHNlcV9maWxlICpzID0gZmls ZS0+cHJpdmF0ZV9kYXRhOw0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZSA9IHMtPnBy aXZhdGU7DQo+ID4gKw0KPiA+ICsgICAgIHBtX3J1bnRpbWVfZ2V0X3N5bmMoY29yZS0+ZGV2KTsN Cj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBpZiAoY29yZS0+ c3RhdGUgIT0gVlBVX0NPUkVfREVJTklUICYmICFjb3JlLT5pbnN0YW5jZV9tYXNrKSB7DQo+ID4g KyAgICAgICAgICAgICBkZXZfaW5mbyhjb3JlLT5kZXYsICJyZXNldFxuIik7DQo+ID4gKyAgICAg ICAgICAgICBpZiAoIXZwdV9jb3JlX3N3X3Jlc2V0KGNvcmUpKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvcmUtPnN0YXRlID0gVlBVX0NPUkVfQUNUSVZFOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBjb3JlLT5oYW5nX21hc2sgPSAwOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ ICsgICAgIH0NCj4gPiArICAgICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsgICAg IHBtX3J1bnRpbWVfcHV0X3N5bmMoY29yZS0+ZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJu IHNpemU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X2RiZ19jb3JlX29wZW4o c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApDQo+ID4gK3sNCj4gPiArICAg ICByZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgdnB1X2RiZ19jb3JlLCBpbm9kZS0+aV9wcml2YXRl KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfZGJnX2Z3bG9nX29wZW4oc3Ry dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApDQo+ID4gK3sNCj4gPiArICAgICBy ZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgdnB1X2RiZ19md2xvZywgaW5vZGUtPmlfcHJpdmF0ZSk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHZwdV9kYmdfaW5zdF9mb3BzID0gew0KPiA+ICsgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLA0K PiA+ICsgICAgIC5vcGVuID0gdnB1X2RiZ19pbnN0X29wZW4sDQo+ID4gKyAgICAgLnJlbGVhc2Ug PSBzaW5nbGVfcmVsZWFzZSwNCj4gPiArICAgICAucmVhZCA9IHNlcV9yZWFkLA0KPiA+ICsgICAg IC53cml0ZSA9IHZwdV9kYmdfaW5zdF93cml0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZwdV9kYmdfY29yZV9mb3BzID0gew0KPiA+ ICsgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLA0KPiA+ICsgICAgIC5vcGVuID0gdnB1X2RiZ19j b3JlX29wZW4sDQo+ID4gKyAgICAgLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwNCj4gPiArICAg ICAucmVhZCA9IHNlcV9yZWFkLA0KPiA+ICsgICAgIC53cml0ZSA9IHZwdV9kYmdfY29yZV93cml0 ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHZwdV9kYmdfZndsb2dfZm9wcyA9IHsNCj4gPiArICAgICAub3duZXIgPSBUSElTX01PRFVM RSwNCj4gPiArICAgICAub3BlbiA9IHZwdV9kYmdfZndsb2dfb3BlbiwNCj4gPiArICAgICAucmVs ZWFzZSA9IHNpbmdsZV9yZWxlYXNlLA0KPiA+ICsgICAgIC5yZWFkID0gc2VxX3JlYWQsDQo+ID4g K307DQo+ID4gKw0KPiA+ICtpbnQgdnB1X2luc3RfY3JlYXRlX2RiZ2ZzX2ZpbGUoc3RydWN0IHZw dV9pbnN0ICppbnN0KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9kZXYgKnZwdTsNCj4g PiArICAgICBjaGFyIG5hbWVbNjRdOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWluc3QgfHwgIWlu c3QtPmNvcmUgfHwgIWluc3QtPmNvcmUtPnZwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICB2cHUgPSBpbnN0LT5jb3JlLT52cHU7DQo+ID4gKyAg ICAgaWYgKCF2cHUtPmRlYnVnZnMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKGluc3QtPmRlYnVnZnMpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgc2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwg Imluc3RhbmNlLiVkLiVkIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y29yZS0+ aWQsIGluc3QtPmlkKTsNCj4gPiArICAgICBpbnN0LT5kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVf ZmlsZSgoY29uc3QgY2hhciAqKW5hbWUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVkVSSUZZX09DVEFMX1BFUk1JU1NJT05TKDA2NDQpLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZwdS0+ZGVidWdmcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cHVfZGJnX2lu c3RfZm9wcyk7DQo+ID4gKyAgICAgaWYgKCFpbnN0LT5kZWJ1Z2ZzKSB7DQo+ID4gKyAgICAgICAg ICAgICBkZXZfZXJyKGluc3QtPmRldiwgInZwdSBjcmVhdGUgZGVidWdmcyAlcyBmYWlsXG4iLCBu YW1lKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCB2cHVfaW5z dF9yZW1vdmVfZGJnZnNfZmlsZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiAr ICAgICBpZiAoIWluc3QpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4g KyAgICAgZGVidWdmc19yZW1vdmUoaW5zdC0+ZGVidWdmcyk7DQo+ID4gKyAgICAgaW5zdC0+ZGVi dWdmcyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtpbnQgdnB1X2NvcmVfY3JlYXRlX2RiZ2ZzX2ZpbGUoc3RydWN0IHZwdV9jb3JlICpjb3Jl KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9kZXYgKnZwdTsNCj4gPiArICAgICBjaGFy IG5hbWVbNjRdOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmUgfHwgIWNvcmUtPnZwdSkNCj4g PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICB2cHUgPSBj b3JlLT52cHU7DQo+ID4gKyAgICAgaWYgKCF2cHUtPmRlYnVnZnMpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFjb3JlLT5kZWJ1Z2ZzKSB7 DQo+ID4gKyAgICAgICAgICAgICBzY25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiY29yZS4l ZCIsIGNvcmUtPmlkKTsNCj4gPiArICAgICAgICAgICAgIGNvcmUtPmRlYnVnZnMgPSBkZWJ1Z2Zz X2NyZWF0ZV9maWxlKChjb25zdCBjaGFyICopbmFtZSwNCj4gPiArDQo+IFZFUklGWV9PQ1RBTF9Q RVJNSVNTSU9OUygwNjQ0KSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZwdS0+ZGVidWdmcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvcmUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnB1 X2RiZ19jb3JlX2ZvcHMpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKCFjb3JlLT5kZWJ1Z2ZzKSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAidnB1IGNyZWF0 ZSBkZWJ1Z2ZzICVzIGZhaWxcbiIsDQo+IG5hbWUpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4g KyAgICAgaWYgKCFjb3JlLT5kZWJ1Z2ZzX2Z3bG9nKSB7DQo+ID4gKyAgICAgICAgICAgICBzY25w cmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiZndsb2cuJWQiLCBjb3JlLT5pZCk7DQo+ID4gKyAg ICAgICAgICAgICBjb3JlLT5kZWJ1Z2ZzX2Z3bG9nID0gZGVidWdmc19jcmVhdGVfZmlsZSgoY29u c3QgY2hhcg0KPiAqKW5hbWUsDQo+ID4gKw0KPiBWRVJJRllfT0NUQUxfUEVSTUlTU0lPTlMoMDQ0 NCksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cHUtPmRlYnVn ZnMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZwdV9kYmdfZndsb2dfZm9w cyk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoIWNvcmUtPmRlYnVnZnNfZndsb2cpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJ2cHUgY3JlYXRlIGRlYnVn ZnMgJXMgZmFpbFxuIiwNCj4gbmFtZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCB2cHVfY29yZV9yZW1vdmVf ZGJnZnNfZmlsZShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBpZiAo IWNvcmUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBkZWJ1Z2ZzX3Jl bW92ZShjb3JlLT5kZWJ1Z2ZzKTsNCj4gPiArICAgICBjb3JlLT5kZWJ1Z2ZzID0gTlVMTDsNCj4g PiArICAgICBkZWJ1Z2ZzX3JlbW92ZShjb3JlLT5kZWJ1Z2ZzX2Z3bG9nKTsNCj4gPiArICAgICBj b3JlLT5kZWJ1Z2ZzX2Z3bG9nID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgdnB1X2luc3RfcmVjb3JkX2Zsb3coc3RydWN0IHZwdV9p bnN0ICppbnN0LCB1MzIgZmxvdykNCj4gPiArew0KPiA+ICsgICAgIGlmICghaW5zdCkNCj4gPiAr ICAgICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgaW5zdC0+Zmxvd3NbaW5zdC0+ Zmxvd19pZHhdID0gZmxvdzsNCj4gPiArICAgICBpbnN0LT5mbG93X2lkeCA9IChpbnN0LT5mbG93 X2lkeCArIDEpICUgKEFSUkFZX1NJWkUoaW5zdC0+Zmxvd3MpKTsNCj4gPiArfQ0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X3JwYy5jDQo+IGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9ycGMuYw0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi43YjVlOTE3N2UwMTANCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9ycGMu Yw0KPiA+IEBAIC0wLDAgKzEsMjc5IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAyMDIwLTIwMjEgTlhQDQo+ID4g KyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2ludGVyY29ubmVjdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZmly bXdhcmUvaW14L2lwYy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUvaW14L3N2Yy9t aXNjLmg+DQo+ID4gKyNpbmNsdWRlICJ2cHUuaCINCj4gPiArI2luY2x1ZGUgInZwdV9ycGMuaCIN Cj4gPiArI2luY2x1ZGUgInZwdV9pbXg4cS5oIg0KPiA+ICsjaW5jbHVkZSAidnB1X3dpbmRzb3Iu aCINCj4gPiArI2luY2x1ZGUgInZwdV9tYWxvbmUuaCINCj4gPiArDQo+ID4gK3UzMiB2cHVfaWZh Y2VfY2hlY2tfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIGRtYV9hZGRyX3QN Cj4gYWRkciwgdTMyIHNpemUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29w cyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo IW9wcyB8fCAhb3BzLT5jaGVja19tZW1vcnlfcmVnaW9uKQ0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIFZQVV9DT1JFX01FTU9SWV9JTlZBTElEOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3Bz LT5jaGVja19tZW1vcnlfcmVnaW9uKGNvcmUtPmZ3LnBoeXMsIGFkZHIsIHNpemUpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTMyIHZwdV9ycGNfY2hlY2tfYnVmZmVyX3NwYWNlKHN0cnVj dCB2cHVfcnBjX2J1ZmZlcl9kZXNjICpkZXNjLA0KPiBib29sIHdyaXRlKQ0KPiA+ICt7DQo+ID4g KyAgICAgdTMyIHB0cjE7DQo+ID4gKyAgICAgdTMyIHB0cjI7DQo+ID4gKyAgICAgdTMyIHNpemU7 DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIWRlc2MpOw0KPiA+ICsNCj4gPiArICAgICBzaXpl ID0gZGVzYy0+ZW5kIC0gZGVzYy0+c3RhcnQ7DQo+ID4gKyAgICAgaWYgKHdyaXRlKSB7DQo+ID4g KyAgICAgICAgICAgICBwdHIxID0gZGVzYy0+d3B0cjsNCj4gPiArICAgICAgICAgICAgIHB0cjIg PSBkZXNjLT5ycHRyOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBwdHIx ID0gZGVzYy0+cnB0cjsNCj4gPiArICAgICAgICAgICAgIHB0cjIgPSBkZXNjLT53cHRyOw0KPiA+ ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKHB0cjEgPT0gcHRyMikgew0KPiA+ICsgICAg ICAgICAgICAgaWYgKCF3cml0ZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gKyAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biBzaXplOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIChwdHIyICsgc2l6 ZSAtIHB0cjEpICUgc2l6ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfcnBj X3NlbmRfY21kX2J1ZihzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfcnBjX2V2ZW50ICpjbWQpDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgdnB1X3JwY19idWZmZXJfZGVzYyAqZGVzYzsNCj4gPiArICAgICB1MzIgc3Bh Y2UgPSAwOw0KPiA+ICsgICAgIHUzMiAqZGF0YTsNCj4gPiArICAgICB1MzIgd3B0cjsNCj4gPiAr ICAgICB1MzIgaTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighc2hhcmVkIHx8ICFzaGFyZWQt PmNtZF9tZW1fdmlyIHx8ICFjbWQpOw0KPiA+ICsNCj4gPiArICAgICBkZXNjID0gc2hhcmVkLT5j bWRfZGVzYzsNCj4gPiArICAgICBzcGFjZSA9IHZwdV9ycGNfY2hlY2tfYnVmZmVyX3NwYWNlKGRl c2MsIHRydWUpOw0KPiA+ICsgICAgIGlmIChzcGFjZSA8ICgoKGNtZC0+aGRyLm51bSArIDEpIDw8 IDIpICsgMTYpKSB7DQo+ID4gKyAgICAgICAgICAgICBwcl9lcnIoIkNtZCBCdWZmZXIgaXMgbm8g c3BhY2UgZm9yIFslZF0gJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y21kLT5oZHIuaW5kZXgsIGNtZC0+aGRyLmlkKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICB3cHRyID0gZGVzYy0+d3B0cjsNCj4gPiAr ICAgICBkYXRhID0gKHUzMiAqKShzaGFyZWQtPmNtZF9tZW1fdmlyICsgZGVzYy0+d3B0ciAtIGRl c2MtPnN0YXJ0KTsNCj4gPiArICAgICAqZGF0YSA9IDA7DQo+ID4gKyAgICAgKmRhdGEgfD0gKChj bWQtPmhkci5pbmRleCAmIDB4ZmYpIDw8IDI0KTsNCj4gPiArICAgICAqZGF0YSB8PSAoKGNtZC0+ aGRyLm51bSAmIDB4ZmYpIDw8IDE2KTsNCj4gPiArICAgICAqZGF0YSB8PSAoY21kLT5oZHIuaWQg JiAweDNmZmYpOw0KPiA+ICsgICAgIHdwdHIgKz0gNDsNCj4gPiArICAgICBkYXRhKys7DQo+ID4g KyAgICAgaWYgKHdwdHIgPj0gZGVzYy0+ZW5kKSB7DQo+ID4gKyAgICAgICAgICAgICB3cHRyID0g ZGVzYy0+c3RhcnQ7DQo+ID4gKyAgICAgICAgICAgICBkYXRhID0gc2hhcmVkLT5jbWRfbWVtX3Zp cjsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBjbWQtPmhk ci5udW07IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgKmRhdGEgPSBjbWQtPmRhdGFbaV07DQo+ ID4gKyAgICAgICAgICAgICB3cHRyICs9IDQ7DQo+ID4gKyAgICAgICAgICAgICBkYXRhKys7DQo+ ID4gKyAgICAgICAgICAgICBpZiAod3B0ciA+PSBkZXNjLT5lbmQpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgd3B0ciA9IGRlc2MtPnN0YXJ0Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBkYXRhID0gc2hhcmVkLT5jbWRfbWVtX3ZpcjsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiAr ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qdXBkYXRlIHdwdHIgYWZ0ZXIgZGF0YSBpcyB3cml0 dGVuKi8NCj4gPiArICAgICBtYigpOw0KPiA+ICsgICAgIGRlc2MtPndwdHIgPSB3cHRyOw0KPiA+ ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wg dnB1X3JwY19jaGVja19tc2coc3RydWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkKQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IHZwdV9ycGNfYnVmZmVyX2Rlc2MgKmRlc2M7DQo+ID4gKyAgICAg dTMyIHNwYWNlID0gMDsNCj4gPiArICAgICB1MzIgbXNnd29yZDsNCj4gPiArICAgICB1MzIgbXNn bnVtOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKCFzaGFyZWQgfHwgIXNoYXJlZC0+bXNnX2Rl c2MpOw0KPiA+ICsNCj4gPiArICAgICBkZXNjID0gc2hhcmVkLT5tc2dfZGVzYzsNCj4gPiArICAg ICBzcGFjZSA9IHZwdV9ycGNfY2hlY2tfYnVmZmVyX3NwYWNlKGRlc2MsIDApOw0KPiA+ICsgICAg IHNwYWNlID0gKHNwYWNlID4+IDIpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoc3BhY2UpIHsNCj4g PiArICAgICAgICAgICAgIG1zZ3dvcmQgPSAqKHUzMiAqKShzaGFyZWQtPm1zZ19tZW1fdmlyICsg ZGVzYy0+cnB0ciAtDQo+IGRlc2MtPnN0YXJ0KTsNCj4gPiArICAgICAgICAgICAgIG1zZ251bSA9 IChtc2d3b3JkICYgMHhmZjAwMDApID4+IDE2Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKG1zZ251 bSA8PSBzcGFjZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQo+ID4g KyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgdnB1X3JwY19yZWNlaXZlX21zZ19idWYoc3RydWN0IHZwdV9zaGFyZWRf YWRkciAqc2hhcmVkLCBzdHJ1Y3QNCj4gdnB1X3JwY19ldmVudCAqbXNnKQ0KPiA+ICt7DQo+ID4g KyAgICAgc3RydWN0IHZwdV9ycGNfYnVmZmVyX2Rlc2MgKmRlc2M7DQo+ID4gKyAgICAgdTMyICpk YXRhOw0KPiA+ICsgICAgIHUzMiBtc2d3b3JkOw0KPiA+ICsgICAgIHUzMiBycHRyOw0KPiA+ICsg ICAgIHUzMiBpOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKCFzaGFyZWQgfHwgIXNoYXJlZC0+ bXNnX2Rlc2MgfHwgIW1zZyk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghdnB1X3JwY19jaGVja19t c2coc2hhcmVkKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArICAgICBkZXNjID0gc2hhcmVkLT5tc2dfZGVzYzsNCj4gPiArICAgICBkYXRhID0gKHUzMiAq KShzaGFyZWQtPm1zZ19tZW1fdmlyICsgZGVzYy0+cnB0ciAtIGRlc2MtPnN0YXJ0KTsNCj4gPiAr ICAgICBycHRyID0gZGVzYy0+cnB0cjsNCj4gPiArICAgICBtc2d3b3JkID0gKmRhdGE7DQo+ID4g KyAgICAgZGF0YSsrOw0KPiA+ICsgICAgIHJwdHIgKz0gNDsNCj4gPiArICAgICBpZiAocnB0ciA+ PSBkZXNjLT5lbmQpIHsNCj4gPiArICAgICAgICAgICAgIHJwdHIgPSBkZXNjLT5zdGFydDsNCj4g PiArICAgICAgICAgICAgIGRhdGEgPSBzaGFyZWQtPm1zZ19tZW1fdmlyOw0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgbXNnLT5oZHIuaW5kZXggPSAobXNnd29yZCA+PiAyNCkgJiAweGZm Ow0KPiA+ICsgICAgIG1zZy0+aGRyLm51bSA9IChtc2d3b3JkID4+IDE2KSAmIDB4ZmY7DQo+ID4g KyAgICAgbXNnLT5oZHIuaWQgPSBtc2d3b3JkICYgMHgzZmZmOw0KPiA+ICsNCj4gPiArICAgICBp ZiAobXNnLT5oZHIubnVtID4gQVJSQVlfU0laRShtc2ctPmRhdGEpKSB7DQo+ID4gKyAgICAgICAg ICAgICBwcl9lcnIoIm1zZyglZCkgZGF0YSBsZW5ndGgoJWQpIGlzIG91dCBvZiByYW5nZVxuIiwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPmhkci5pZCwgbXNnLT5oZHIu bnVtKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IG1zZy0+aGRyLm51bTsgaSsrKSB7DQo+ID4g KyAgICAgICAgICAgICBtc2ctPmRhdGFbaV0gPSAqZGF0YTsNCj4gPiArICAgICAgICAgICAgIGRh dGErKzsNCj4gPiArICAgICAgICAgICAgIHJwdHIgKz0gNDsNCj4gPiArICAgICAgICAgICAgIGlm IChycHRyID49IGRlc2MtPmVuZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBycHRyID0g ZGVzYy0+c3RhcnQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzaGFyZWQtPm1z Z19tZW1fdmlyOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgLyp1cGRhdGUgcnB0ciBhZnRlciBkYXRhIGlzIHJlYWQqLw0KPiA+ICsgICAgIG1iKCk7 DQo+ID4gKyAgICAgZGVzYy0+cnB0ciA9IHJwdHI7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2lmYWNlX29wcyBpbXg4cV9ycGNfb3Bz W10gPSB7DQo+ID4gKyAgICAgW1ZQVV9DT1JFX1RZUEVfRU5DXSA9IHsNCj4gPiArICAgICAgICAg ICAgIC5jaGVja19jb2RlYyA9IHZwdV9pbXg4cV9jaGVja19jb2RlYywNCj4gPiArICAgICAgICAg ICAgIC5jaGVja19mbXQgPSB2cHVfaW14OHFfY2hlY2tfZm10LA0KPiA+ICsgICAgICAgICAgICAg LmJvb3RfY29yZSA9IHZwdV9pbXg4cV9ib290X2NvcmUsDQo+ID4gKyAgICAgICAgICAgICAuZ2V0 X3Bvd2VyX3N0YXRlID0gdnB1X2lteDhxX2dldF9wb3dlcl9zdGF0ZSwNCj4gPiArICAgICAgICAg ICAgIC5vbl9maXJtd2FyZV9sb2FkZWQgPSB2cHVfaW14OHFfb25fZmlybXdhcmVfbG9hZGVkLA0K PiA+ICsgICAgICAgICAgICAgLmdldF9kYXRhX3NpemUgPSB2cHVfd2luZHNvcl9nZXRfZGF0YV9z aXplLA0KPiA+ICsgICAgICAgICAgICAgLmNoZWNrX21lbW9yeV9yZWdpb24gPQ0KPiB2cHVfaW14 OHFfY2hlY2tfbWVtb3J5X3JlZ2lvbiwNCj4gPiArICAgICAgICAgICAgIC5pbml0X3JwYyA9IHZw dV93aW5kc29yX2luaXRfcnBjLA0KPiA+ICsgICAgICAgICAgICAgLnNldF9sb2dfYnVmID0gdnB1 X3dpbmRzb3Jfc2V0X2xvZ19idWYsDQo+ID4gKyAgICAgICAgICAgICAuc2V0X3N5c3RlbV9jZmcg PSB2cHVfd2luZHNvcl9zZXRfc3lzdGVtX2NmZywNCj4gPiArICAgICAgICAgICAgIC5nZXRfdmVy c2lvbiA9IHZwdV93aW5kc29yX2dldF92ZXJzaW9uLA0KPiA+ICsgICAgICAgICAgICAgLnNlbmRf Y21kX2J1ZiA9IHZwdV9ycGNfc2VuZF9jbWRfYnVmLA0KPiA+ICsgICAgICAgICAgICAgLnJlY2Vp dmVfbXNnX2J1ZiA9IHZwdV9ycGNfcmVjZWl2ZV9tc2dfYnVmLA0KPiA+ICsgICAgICAgICAgICAg LnBhY2tfY21kID0gdnB1X3dpbmRzb3JfcGFja19jbWQsDQo+ID4gKyAgICAgICAgICAgICAuY29u dmVydF9tc2dfaWQgPSB2cHVfd2luZHNvcl9jb252ZXJ0X21zZ19pZCwNCj4gPiArICAgICAgICAg ICAgIC51bnBhY2tfbXNnX2RhdGEgPSB2cHVfd2luZHNvcl91bnBhY2tfbXNnX2RhdGEsDQo+ID4g KyAgICAgICAgICAgICAuY29uZmlnX21lbW9yeV9yZXNvdXJjZSA9DQo+IHZwdV93aW5kc29yX2Nv bmZpZ19tZW1vcnlfcmVzb3VyY2UsDQo+ID4gKyAgICAgICAgICAgICAuZ2V0X3N0cmVhbV9idWZm ZXJfc2l6ZSA9DQo+IHZwdV93aW5kc29yX2dldF9zdHJlYW1fYnVmZmVyX3NpemUsDQo+ID4gKyAg ICAgICAgICAgICAuY29uZmlnX3N0cmVhbV9idWZmZXIgPSB2cHVfd2luZHNvcl9jb25maWdfc3Ry ZWFtX2J1ZmZlciwNCj4gPiArICAgICAgICAgICAgIC5nZXRfc3RyZWFtX2J1ZmZlcl9kZXNjID0N Cj4gdnB1X3dpbmRzb3JfZ2V0X3N0cmVhbV9idWZmZXJfZGVzYywNCj4gPiArICAgICAgICAgICAg IC51cGRhdGVfc3RyZWFtX2J1ZmZlciA9DQo+IHZwdV93aW5kc29yX3VwZGF0ZV9zdHJlYW1fYnVm ZmVyLA0KPiA+ICsgICAgICAgICAgICAgLnNldF9lbmNvZGVfcGFyYW1zID0gdnB1X3dpbmRzb3Jf c2V0X2VuY29kZV9wYXJhbXMsDQo+ID4gKyAgICAgICAgICAgICAuaW5wdXRfZnJhbWUgPSB2cHVf d2luZHNvcl9pbnB1dF9mcmFtZSwNCj4gPiArICAgICAgICAgICAgIC5nZXRfbWF4X2luc3RhbmNl X2NvdW50ID0NCj4gdnB1X3dpbmRzb3JfZ2V0X21heF9pbnN0YW5jZV9jb3VudCwNCj4gPiArICAg ICB9LA0KPiA+ICsgICAgIFtWUFVfQ09SRV9UWVBFX0RFQ10gPSB7DQo+ID4gKyAgICAgICAgICAg ICAuY2hlY2tfY29kZWMgPSB2cHVfaW14OHFfY2hlY2tfY29kZWMsDQo+ID4gKyAgICAgICAgICAg ICAuY2hlY2tfZm10ID0gdnB1X2lteDhxX2NoZWNrX2ZtdCwNCj4gPiArICAgICAgICAgICAgIC5i b290X2NvcmUgPSB2cHVfaW14OHFfYm9vdF9jb3JlLA0KPiA+ICsgICAgICAgICAgICAgLmdldF9w b3dlcl9zdGF0ZSA9IHZwdV9pbXg4cV9nZXRfcG93ZXJfc3RhdGUsDQo+ID4gKyAgICAgICAgICAg ICAub25fZmlybXdhcmVfbG9hZGVkID0gdnB1X2lteDhxX29uX2Zpcm13YXJlX2xvYWRlZCwNCj4g PiArICAgICAgICAgICAgIC5nZXRfZGF0YV9zaXplID0gdnB1X21hbG9uZV9nZXRfZGF0YV9zaXpl LA0KPiA+ICsgICAgICAgICAgICAgLmNoZWNrX21lbW9yeV9yZWdpb24gPQ0KPiB2cHVfaW14OHFf Y2hlY2tfbWVtb3J5X3JlZ2lvbiwNCj4gPiArICAgICAgICAgICAgIC5pbml0X3JwYyA9IHZwdV9t YWxvbmVfaW5pdF9ycGMsDQo+ID4gKyAgICAgICAgICAgICAuc2V0X2xvZ19idWYgPSB2cHVfbWFs b25lX3NldF9sb2dfYnVmLA0KPiA+ICsgICAgICAgICAgICAgLnNldF9zeXN0ZW1fY2ZnID0gdnB1 X21hbG9uZV9zZXRfc3lzdGVtX2NmZywNCj4gPiArICAgICAgICAgICAgIC5nZXRfdmVyc2lvbiA9 IHZwdV9tYWxvbmVfZ2V0X3ZlcnNpb24sDQo+ID4gKyAgICAgICAgICAgICAuc2VuZF9jbWRfYnVm ID0gdnB1X3JwY19zZW5kX2NtZF9idWYsDQo+ID4gKyAgICAgICAgICAgICAucmVjZWl2ZV9tc2df YnVmID0gdnB1X3JwY19yZWNlaXZlX21zZ19idWYsDQo+ID4gKyAgICAgICAgICAgICAuZ2V0X3N0 cmVhbV9idWZmZXJfc2l6ZSA9DQo+IHZwdV9tYWxvbmVfZ2V0X3N0cmVhbV9idWZmZXJfc2l6ZSwN Cj4gPiArICAgICAgICAgICAgIC5jb25maWdfc3RyZWFtX2J1ZmZlciA9IHZwdV9tYWxvbmVfY29u ZmlnX3N0cmVhbV9idWZmZXIsDQo+ID4gKyAgICAgICAgICAgICAuc2V0X2RlY29kZV9wYXJhbXMg PSB2cHVfbWFsb25lX3NldF9kZWNvZGVfcGFyYW1zLA0KPiA+ICsgICAgICAgICAgICAgLnBhY2tf Y21kID0gdnB1X21hbG9uZV9wYWNrX2NtZCwNCj4gPiArICAgICAgICAgICAgIC5jb252ZXJ0X21z Z19pZCA9IHZwdV9tYWxvbmVfY29udmVydF9tc2dfaWQsDQo+ID4gKyAgICAgICAgICAgICAudW5w YWNrX21zZ19kYXRhID0gdnB1X21hbG9uZV91bnBhY2tfbXNnX2RhdGEsDQo+ID4gKyAgICAgICAg ICAgICAuZ2V0X3N0cmVhbV9idWZmZXJfZGVzYyA9DQo+IHZwdV9tYWxvbmVfZ2V0X3N0cmVhbV9i dWZmZXJfZGVzYywNCj4gPiArICAgICAgICAgICAgIC51cGRhdGVfc3RyZWFtX2J1ZmZlciA9DQo+ IHZwdV9tYWxvbmVfdXBkYXRlX3N0cmVhbV9idWZmZXIsDQo+ID4gKyAgICAgICAgICAgICAuYWRk X3Njb2RlID0gdnB1X21hbG9uZV9hZGRfc2NvZGUsDQo+ID4gKyAgICAgICAgICAgICAuaW5wdXRf ZnJhbWUgPSB2cHVfbWFsb25lX2lucHV0X2ZyYW1lLA0KPiA+ICsgICAgICAgICAgICAgLnByZV9z ZW5kX2NtZCA9IHZwdV9tYWxvbmVfcHJlX2NtZCwNCj4gPiArICAgICAgICAgICAgIC5wb3N0X3Nl bmRfY21kID0gdnB1X21hbG9uZV9wb3N0X2NtZCwNCj4gPiArICAgICAgICAgICAgIC5pbml0X2lu c3RhbmNlID0gdnB1X21hbG9uZV9pbml0X2luc3RhbmNlLA0KPiA+ICsgICAgICAgICAgICAgLmdl dF9tYXhfaW5zdGFuY2VfY291bnQgPQ0KPiB2cHVfbWFsb25lX2dldF9tYXhfaW5zdGFuY2VfY291 bnQsDQo+ID4gKyAgICAgfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Ry dWN0IHZwdV9pZmFjZV9vcHMgKnZwdV9nZXRfaWZhY2Uoc3RydWN0IHZwdV9kZXYgKnZwdSwgZW51 bQ0KPiB2cHVfY29yZV90eXBlIHR5cGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lm YWNlX29wcyAqcnBjX29wcyA9IE5VTEw7DQo+ID4gKyAgICAgdTMyIHNpemUgPSAwOw0KPiA+ICsN Cj4gPiArICAgICBXQVJOX09OKCF2cHUgfHwgIXZwdS0+cmVzKTsNCj4gPiArDQo+ID4gKyAgICAg c3dpdGNoICh2cHUtPnJlcy0+cGxhdF90eXBlKSB7DQo+ID4gKyAgICAgY2FzZSBJTVg4UVhQOg0K PiA+ICsgICAgIGNhc2UgSU1YOFFNOg0KPiA+ICsgICAgICAgICAgICAgcnBjX29wcyA9IGlteDhx X3JwY19vcHM7DQo+ID4gKyAgICAgICAgICAgICBzaXplID0gQVJSQVlfU0laRShpbXg4cV9ycGNf b3BzKTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4g KyAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAg IGlmICh0eXBlID49IHNpemUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuICZycGNfb3BzW3R5cGVdOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dHJ1Y3QgdnB1X2lmYWNlX29wcyAqdnB1X2NvcmVfZ2V0X2lmYWNlKHN0cnVjdCB2cHVfY29yZSAq Y29yZSkNCj4gPiArew0KPiA+ICsgICAgIFdBUk5fT04oIWNvcmUgfHwgIWNvcmUtPnZwdSk7DQo+ ID4gKw0KPiA+ICsgICAgIHJldHVybiB2cHVfZ2V0X2lmYWNlKGNvcmUtPnZwdSwgY29yZS0+dHlw ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVfaWZhY2Vfb3BzICp2cHVfaW5zdF9n ZXRfaWZhY2Uoc3RydWN0IHZwdV9pbnN0ICppbnN0KQ0KPiA+ICt7DQo+ID4gKyAgICAgV0FSTl9P TighaW5zdCB8fCAhaW5zdC0+dnB1KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGluc3QtPmNvcmUp DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gdnB1X2NvcmVfZ2V0X2lmYWNlKGluc3QtPmNvcmUp Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gdnB1X2dldF9pZmFjZShpbnN0LT52cHUsIGluc3Qt PnR5cGUpOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YW1waGlvbi92cHVfcnBjLmgNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1 X3JwYy5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAu LmFiZTk5OGU1YTViZQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL2FtcGhpb24vdnB1X3JwYy5oDQo+ID4gQEAgLTAsMCArMSw0NjQgQEANCj4gPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiArLyoNCj4gPiArICog Q29weXJpZ2h0IDIwMjAtMjAyMSBOWFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9B TVBISU9OX1ZQVV9SUENfSA0KPiA+ICsjZGVmaW5lIF9BTVBISU9OX1ZQVV9SUENfSA0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1jb3JlLmg+DQo+ID4gKyNpbmNsdWRlICJ2 cHVfY29kZWMuaCINCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVfcnBjX2J1ZmZlcl9kZXNjIHsNCj4g PiArICAgICB1MzIgd3B0cjsNCj4gPiArICAgICB1MzIgcnB0cjsNCj4gPiArICAgICB1MzIgc3Rh cnQ7DQo+ID4gKyAgICAgdTMyIGVuZDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVf c2hhcmVkX2FkZHIgew0KPiA+ICsgICAgIHZvaWQgKmlmYWNlOw0KPiA+ICsgICAgIHN0cnVjdCB2 cHVfcnBjX2J1ZmZlcl9kZXNjICpjbWRfZGVzYzsNCj4gPiArICAgICB2b2lkICpjbWRfbWVtX3Zp cjsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X3JwY19idWZmZXJfZGVzYyAqbXNnX2Rlc2M7DQo+ID4g KyAgICAgdm9pZCAqbXNnX21lbV92aXI7DQo+ID4gKw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcg Ym9vdF9hZGRyOw0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZTsNCj4gPiArICAgICB2 b2lkICpwcml2Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9ycGNfZXZlbnRfaGVh ZGVyIHsNCj4gPiArICAgICB1MzIgaW5kZXg7DQo+ID4gKyAgICAgdTMyIGlkOw0KPiA+ICsgICAg IHUzMiBudW07DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X3JwY19ldmVudCB7DQo+ ID4gKyAgICAgc3RydWN0IHZwdV9ycGNfZXZlbnRfaGVhZGVyIGhkcjsNCj4gPiArICAgICB1MzIg ZGF0YVsxMjhdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9pZmFjZV9vcHMgew0K PiA+ICsgICAgIGJvb2wgKCpjaGVja19jb2RlYykoZW51bSB2cHVfY29yZV90eXBlIHR5cGUpOw0K PiA+ICsgICAgIGJvb2wgKCpjaGVja19mbXQpKGVudW0gdnB1X2NvcmVfdHlwZSB0eXBlLCB1MzIg cGl4ZWxmbXQpOw0KPiA+ICsgICAgIHUzMiAoKmdldF9kYXRhX3NpemUpKHZvaWQpOw0KPiA+ICsg ICAgIHUzMiAoKmNoZWNrX21lbW9yeV9yZWdpb24pKGRtYV9hZGRyX3QgYmFzZSwgZG1hX2FkZHJf dCBhZGRyLA0KPiB1MzIgc2l6ZSk7DQo+ID4gKyAgICAgaW50ICgqYm9vdF9jb3JlKShzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUpOw0KPiA+ICsgICAgIGludCAoKnNodXRkb3duX2NvcmUpKHN0cnVjdCB2 cHVfY29yZSAqY29yZSk7DQo+ID4gKyAgICAgaW50ICgqcmVzdG9yZV9jb3JlKShzdHJ1Y3QgdnB1 X2NvcmUgKmNvcmUpOw0KPiA+ICsgICAgIGludCAoKmdldF9wb3dlcl9zdGF0ZSkoc3RydWN0IHZw dV9jb3JlICpjb3JlKTsNCj4gPiArICAgICBpbnQgKCpvbl9maXJtd2FyZV9sb2FkZWQpKHN0cnVj dCB2cHVfY29yZSAqY29yZSk7DQo+ID4gKyAgICAgdm9pZCAoKmluaXRfcnBjKShzdHJ1Y3QgdnB1 X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2 cHVfYnVmZmVyICpycGMsIGRtYV9hZGRyX3QgYm9vdF9hZGRyKTsNCj4gPiArICAgICB2b2lkICgq c2V0X2xvZ19idWYpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHZwdV9idWZmZXIgKmxvZyk7DQo+ID4gKyAgICAgdm9pZCAo KnNldF9zeXN0ZW1fY2ZnKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHUzMiByZWdzX2Jhc2UsIHZvaWQgX19pb21lbSAqcmVncywgdTMy IGluZGV4KTsNCj4gPiArICAgICB2b2lkICgqc2V0X3N0cmVhbV9jZmcpKHN0cnVjdCB2cHVfc2hh cmVkX2FkZHIgKnNoYXJlZCwgdTMyIGluZGV4KTsNCj4gPiArICAgICB1MzIgKCpnZXRfdmVyc2lv bikoc3RydWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkKTsNCj4gPiArICAgICB1MzIgKCpnZXRf bWF4X2luc3RhbmNlX2NvdW50KShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQpOw0KPiA+ ICsgICAgIGludCAoKmdldF9zdHJlYW1fYnVmZmVyX3NpemUpKHN0cnVjdCB2cHVfc2hhcmVkX2Fk ZHIgKnNoYXJlZCk7DQo+ID4gKyAgICAgaW50ICgqc2VuZF9jbWRfYnVmKShzdHJ1Y3QgdnB1X3No YXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVf cnBjX2V2ZW50ICpjbWQpOw0KPiA+ICsgICAgIGludCAoKnJlY2VpdmVfbXNnX2J1Zikoc3RydWN0 IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdnB1X3JwY19ldmVudCAqbXNnKTsNCj4gPiArICAgICBpbnQgKCpwYWNrX2NtZCkoc3RydWN0 IHZwdV9ycGNfZXZlbnQgKnBrdCwgdTMyIGluZGV4LCB1MzIgaWQsIHZvaWQNCj4gKmRhdGEpOw0K PiA+ICsgICAgIGludCAoKmNvbnZlcnRfbXNnX2lkKSh1MzIgbXNnX2lkKTsNCj4gPiArICAgICBp bnQgKCp1bnBhY2tfbXNnX2RhdGEpKHN0cnVjdCB2cHVfcnBjX2V2ZW50ICpwa3QsIHZvaWQgKmRh dGEpOw0KPiA+ICsgICAgIGludCAoKmlucHV0X2ZyYW1lKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRy ICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfaW5zdCAqaW5z dCwgc3RydWN0IHZiMl9idWZmZXIgKnZiKTsNCj4gPiArICAgICBpbnQgKCpjb25maWdfbWVtb3J5 X3Jlc291cmNlKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgaW5zdGFuY2UsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdHlwZSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBpbmRleCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfYnVmZmVyICpidWYpOw0KPiA+ICsgICAg IGludCAoKmNvbmZpZ19zdHJlYW1fYnVmZmVyKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFy ZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgaW5zdGFu Y2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnB1 X2J1ZmZlciAqYnVmKTsNCj4gPiArICAgICBpbnQgKCp1cGRhdGVfc3RyZWFtX2J1ZmZlcikoc3Ry dWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLCB1MzIgcHRyLCBib29sDQo+IHdyaXRlKTsNCj4g PiArICAgICBpbnQgKCpnZXRfc3RyZWFtX2J1ZmZlcl9kZXNjKShzdHJ1Y3QgdnB1X3NoYXJlZF9h ZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 MzIgaW5zdGFuY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdnB1X3JwY19idWZmZXJfZGVzYw0KPiAqZGVzYyk7DQo+ID4gKyAgICAgaW50ICgqc2V0 X2VuY29kZV9wYXJhbXMpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdnB1X2VuY29kZV9wYXJhbXMgKnBhcmFtcywgdTMyIHVwZGF0ZSk7DQo+ID4gKyAg ICAgaW50ICgqc2V0X2RlY29kZV9wYXJhbXMpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJl ZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X2RlY29kZV9wYXJhbXMgKnBhcmFtcywgdTMyIHVwZGF0 ZSk7DQo+ID4gKyAgICAgaW50ICgqYWRkX3Njb2RlKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpz aGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfYnVmZmVyICpzdHJl YW1fYnVmZmVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwaXhlbGZv cm1hdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc2NvZGVfdHlwZSk7 DQo+ID4gKyAgICAgaW50ICgqcHJlX3NlbmRfY21kKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpz aGFyZWQsIHUzMiBpbnN0YW5jZSk7DQo+ID4gKyAgICAgaW50ICgqcG9zdF9zZW5kX2NtZCkoc3Ry dWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLCB1MzIgaW5zdGFuY2UpOw0KPiA+ICsgICAgIGlu dCAoKmluaXRfaW5zdGFuY2UpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwgdTMyIGlu c3RhbmNlKTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gew0KPiA+ICsgICAgIFZQVV9DT1JF X01FTU9SWV9JTlZBTElEID0gMCwNCj4gPiArICAgICBWUFVfQ09SRV9NRU1PUllfQ0FDSEVELA0K PiA+ICsgICAgIFZQVV9DT1JFX01FTU9SWV9VTkNBQ0hFRA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RydWN0IHZwdV9ycGNfcmVnaW9uX3Qgew0KPiA+ICsgICAgIGRtYV9hZGRyX3Qgc3RhcnQ7DQo+ ID4gKyAgICAgZG1hX2FkZHJfdCBlbmQ7DQo+ID4gKyAgICAgZG1hX2FkZHJfdCB0eXBlOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9pZmFjZV9vcHMgKnZwdV9jb3JlX2dldF9pZmFj ZShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpOw0KPiA+ICtzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqdnB1 X2luc3RfZ2V0X2lmYWNlKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCk7DQo+ID4gK3UzMiB2cHVfaWZh Y2VfY2hlY2tfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIGRtYV9hZGRyX3QN Cj4gYWRkciwgdTMyIHNpemUpOw0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBib29sIHZwdV9p ZmFjZV9jaGVja19jb2RlYyhzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0K PiA+ICsNCj4gPiArICAgICBpZiAob3BzICYmIG9wcy0+Y2hlY2tfY29kZWMpDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gb3BzLT5jaGVja19jb2RlYyhjb3JlLT50eXBlKTsNCj4gPiArDQo+ID4g KyAgICAgcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9v bCB2cHVfaWZhY2VfY2hlY2tfZm9ybWF0KHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwgdTMyDQo+IHBp eGVsZm10KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZw dV9pbnN0X2dldF9pZmFjZShpbnN0KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAmJiBvcHMt PmNoZWNrX2ZtdCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPmNoZWNrX2ZtdChpbnN0 LT50eXBlLCBwaXhlbGZtdCk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiB0cnVlOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfYm9vdF9jb3JlKHN0cnVj dCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3Bz ICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChv cHMgJiYgb3BzLT5ib290X2NvcmUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gb3BzLT5ib290 X2NvcmUoY29yZSk7DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9nZXRfcG93ZXJfc3RhdGUoc3RydWN0IHZwdV9jb3Jl ICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZw dV9jb3JlX2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAmJiBvcHMt PmdldF9wb3dlcl9zdGF0ZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPmdldF9wb3dl cl9zdGF0ZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3NodXRkb3duX2NvcmUoc3RydWN0IHZwdV9jb3Jl ICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZw dV9jb3JlX2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAmJiBvcHMt PnNodXRkb3duX2NvcmUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gb3BzLT5zaHV0ZG93bl9j b3JlKGNvcmUpOw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW5saW5lIGludCB2cHVfaWZhY2VfcmVzdG9yZV9jb3JlKHN0cnVjdCB2cHVfY29yZSAqY29y ZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29y ZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChvcHMgJiYgb3BzLT5yZXN0 b3JlX2NvcmUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gb3BzLT5yZXN0b3JlX2NvcmUoY29y ZSk7DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxp bmUgaW50IHZwdV9pZmFjZV9vbl9maXJtd2FyZV9sb2FkZWQoc3RydWN0IHZwdV9jb3JlICpjb3Jl KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3Jl X2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAmJiBvcHMtPm9uX2Zp cm13YXJlX2xvYWRlZCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPm9uX2Zpcm13YXJl X2xvYWRlZChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIHZwdV9pZmFjZV9nZXRfZGF0YV9zaXplKHN0cnVjdCB2 cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpv cHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3Bz IHx8ICFvcHMtPmdldF9kYXRhX3NpemUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+Z2V0X2RhdGFfc2l6ZSgpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfaW5pdChzdHJ1Y3QgdnB1X2NvcmUg KmNvcmUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9zaGFy ZWRfYWRkciAqc2hhcmVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB2cHVfYnVmZmVyICpycGMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1h X2FkZHJfdCBib290X2FkZHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29w cyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo IW9wcyB8fCAhb3BzLT5pbml0X3JwYykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM Ow0KPiA+ICsNCj4gPiArICAgICBvcHMtPmluaXRfcnBjKHNoYXJlZCwgcnBjLCBib290X2FkZHIp Ow0KPiA+ICsgICAgIGNvcmUtPmlmYWNlID0gc2hhcmVkOw0KPiA+ICsgICAgIHNoYXJlZC0+Y29y ZSA9IGNvcmU7DQo+ID4gKyAgICAgaWYgKHJwYy0+Ynl0ZXN1c2VkID4gcnBjLT5sZW5ndGgpDQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT1NQQzsNCj4gPiArICAgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3NldF9sb2dfYnVm KHN0cnVjdCB2cHVfY29yZSAqY29yZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB2cHVfYnVmZmVyICpsb2cpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoIW9wcykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ICsNCj4gPiArICAgICBpZiAob3BzLT5zZXRfbG9nX2J1ZikNCj4gPiArICAgICAgICAgICAg IG9wcy0+c2V0X2xvZ19idWYoY29yZS0+aWZhY2UsIGxvZyk7DQo+ID4gKw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vf Y29uZmlnX3N5c3RlbShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsDQo+ID4gKyAgICAgICAgICAgICB1 MzIgcmVnc19iYXNlLCB2b2lkIF9faW9tZW0gKnJlZ3MpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoIW9wcykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ICsgICAgIGlmIChvcHMtPnNldF9zeXN0ZW1fY2ZnKQ0KPiA+ICsgICAgICAgICAgICAgb3Bz LT5zZXRfc3lzdGVtX2NmZyhjb3JlLT5pZmFjZSwgcmVnc19iYXNlLCByZWdzLCBjb3JlLT5pZCk7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW5saW5lIGludCB2cHVfaWZhY2VfZ2V0X3N0cmVhbV9idWZmZXJfc2l6ZShzdHJ1Y3QgdnB1X2Nv cmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0g dnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIW9wcyB8fCAh b3BzLT5nZXRfc3RyZWFtX2J1ZmZlcl9zaXplKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmdldF9zdHJlYW1fYnVmZmVyX3NpemUoY29y ZS0+aWZhY2UpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZh Y2VfY29uZmlnX3N0cmVhbShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGluc3QtPmNv cmUpOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAg aWYgKCFvcHMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICBp ZiAob3BzLT5zZXRfc3RyZWFtX2NmZykNCj4gPiArICAgICAgICAgICAgIG9wcy0+c2V0X3N0cmVh bV9jZmcoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QtPmlkKTsNCj4gPiArICAgICByZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3NlbmRfY21k KHN0cnVjdCB2cHVfY29yZSAqY29yZSwgc3RydWN0DQo+IHZwdV9ycGNfZXZlbnQgKmNtZCkNCj4g PiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRf aWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPnNlbmRfY21k X2J1ZikNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAg ICByZXR1cm4gb3BzLT5zZW5kX2NtZF9idWYoY29yZS0+aWZhY2UsIGNtZCk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9yZWNlaXZlX21zZyhzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUsIHN0cnVjdA0KPiB2cHVfcnBjX2V2ZW50ICptc2cpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNv cmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIW9wcyB8fCAhb3BzLT5yZWNlaXZlX21zZ19idWYp DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0 dXJuIG9wcy0+cmVjZWl2ZV9tc2dfYnVmKGNvcmUtPmlmYWNlLCBtc2cpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfcGFja19jbWQoc3RydWN0IHZwdV9j b3JlICpjb3JlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHZwdV9ycGNfZXZlbnQgKnBrdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUzMiBpbmRleCwgdTMyIGlkLCB2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4gKyAg ICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShjb3JlKTsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+cGFja19jbWQpDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICByZXR1cm4gb3BzLT5wYWNrX2NtZChw a3QsIGluZGV4LCBpZCwgZGF0YSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUg aW50IHZwdV9pZmFjZV9jb252ZXJ0X21zZ19pZChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIHUzMg0K PiBtc2dfaWQpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0g dnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIW9wcyB8fCAh b3BzLT5jb252ZXJ0X21zZ19pZCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5jb252ZXJ0X21zZ19pZChtc2dfaWQpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfdW5wYWNrX21zZ19k YXRhKHN0cnVjdCB2cHVfY29yZSAqY29yZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9ycGNfZXZlbnQNCj4gKnBrdCwgdm9pZCAq ZGF0YSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVf Y29yZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMt PnVucGFja19tc2dfZGF0YSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT51bnBhY2tfbXNnX2RhdGEocGt0LCBkYXRhKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2lucHV0X2ZyYW1l KHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KPiA+ICt7DQo+ID4gKyAg ICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5j b3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+aW5wdXRfZnJhbWUpDQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJu IG9wcy0+aW5wdXRfZnJhbWUoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QsIHZiKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2NvbmZpZ19tZW1vcnlfcmVz b3VyY2Uoc3RydWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB1 MzIgdHlwZSwgdTMyIGluZGV4LCBzdHJ1Y3QgdnB1X2J1ZmZlciAqYnVmKQ0KPiA+ICt7DQo+ID4g KyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0 LT5jb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsg ICAgIGlmICghb3BzIHx8ICFvcHMtPmNvbmZpZ19tZW1vcnlfcmVzb3VyY2UpDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+Y29u ZmlnX21lbW9yeV9yZXNvdXJjZShpbnN0LT5jb3JlLT5pZmFjZSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPmlkLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZSwgaW5kZXgsIGJ1Zik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9jb25maWdfc3RyZWFtX2J1ZmZlcihzdHJ1 Y3QgdnB1X2luc3QgKmluc3QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2cHVfYnVmZmVyICpidWYpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGluc3QtPmNvcmUp Ow0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAgaWYg KCFvcHMgfHwgIW9wcy0+Y29uZmlnX3N0cmVhbV9idWZmZXIpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+Y29uZmlnX3N0cmVh bV9idWZmZXIoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QtPmlkLCBidWYpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfdXBkYXRlX3N0cmVhbV9idWZmZXIo c3RydWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1MzIgcHRyLCBib29sIHdyaXRlKQ0KPiA+ICt7DQo+ID4gKyAgICAg c3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5jb3Jl KTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlm ICghb3BzIHx8ICFvcHMtPnVwZGF0ZV9zdHJlYW1fYnVmZmVyKQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPnVwZGF0ZV9zdHJl YW1fYnVmZmVyKGluc3QtPmNvcmUtPmlmYWNlLCBpbnN0LT5pZCwgcHRyLA0KPiB3cml0ZSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9nZXRfc3RyZWFt X2J1ZmZlcl9kZXNjKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfcnBjX2J1ZmZlcl9kZXNjDQo+ICpkZXNj KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3Jl X2dldF9pZmFjZShpbnN0LT5jb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5p ZCA8IDApOw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPmdldF9zdHJlYW1fYnVmZmVyX2Rl c2MpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAg aWYgKCFkZXNjKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAg IHJldHVybiBvcHMtPmdldF9zdHJlYW1fYnVmZmVyX2Rlc2MoaW5zdC0+Y29yZS0+aWZhY2UsIGlu c3QtPmlkLCBkZXNjKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1MzIgdnB1 X2lmYWNlX2dldF92ZXJzaW9uKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsg ICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29yZSk7 DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPmdldF92ZXJzaW9uKQ0KPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmdldF92 ZXJzaW9uKGNvcmUtPmlmYWNlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1 MzIgdnB1X2lmYWNlX2dldF9tYXhfaW5zdGFuY2VfY291bnQoc3RydWN0IHZwdV9jb3JlICpjb3Jl KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3Jl X2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+Z2V0 X21heF9pbnN0YW5jZV9jb3VudCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsN Cj4gPiArICAgICByZXR1cm4gb3BzLT5nZXRfbWF4X2luc3RhbmNlX2NvdW50KGNvcmUtPmlmYWNl KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3NldF9l bmNvZGVfcGFyYW1zKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X2VuY29kZV9wYXJhbXMgKnBhcmFtcywgdTMyDQo+IHVw ZGF0ZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVf Y29yZV9nZXRfaWZhY2UoaW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oaW5z dC0+aWQgPCAwKTsNCj4gPiArICAgICBpZiAoIW9wcyB8fCAhb3BzLT5zZXRfZW5jb2RlX3BhcmFt cykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gb3BzLT5zZXRfZW5jb2RlX3BhcmFtcyhpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQs IHBhcmFtcywNCj4gdXBkYXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBp bnQgdnB1X2lmYWNlX3NldF9kZWNvZGVfcGFyYW1zKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X2RlY29kZV9wYXJhbXMg KnBhcmFtcywgdTMyDQo+IHVwZGF0ZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZh Y2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoaW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsNCj4gPiArICAgICBpZiAoIW9wcyB8fCAhb3Bz LT5zZXRfZGVjb2RlX3BhcmFtcykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5zZXRfZGVjb2RlX3BhcmFtcyhpbnN0LT5jb3Jl LT5pZmFjZSwgaW5zdC0+aWQsIHBhcmFtcywNCj4gdXBkYXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2FkZF9zY29kZShzdHJ1Y3QgdnB1X2luc3Qg Kmluc3QsIHUzMiBzY29kZV90eXBlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFj ZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5jb3JlKTsNCj4gPiArDQo+ID4g KyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMt PmFkZF9zY29kZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gb3BzLT5hZGRfc2NvZGUoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QtPmlk LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnN0LT5zdHJlYW1fYnVmZmVy LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPm91dF9mb3JtYXQucGl4 Zm10LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb2RlX3R5cGUpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfcHJlX3NlbmRfY21k KHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZh Y2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoaW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsNCj4gPiArICAgICBpZiAob3BzICYmIG9wcy0+ cHJlX3NlbmRfY21kKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9wcy0+cHJlX3NlbmRfY21k KGluc3QtPmNvcmUtPmlmYWNlLCBpbnN0LT5pZCk7DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9wb3N0X3NlbmRfY21k KHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZh Y2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoaW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsNCj4gPiArICAgICBpZiAob3BzICYmIG9wcy0+ cG9zdF9zZW5kX2NtZCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPnBvc3Rfc2VuZF9j bWQoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QtPmlkKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2luaXRfaW5zdGFu Y2Uoc3RydWN0IHZwdV9pbnN0ICppbnN0KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9p ZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5jb3JlKTsNCj4gPiArDQo+ ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmIChvcHMgJiYgb3Bz LT5pbml0X2luc3RhbmNlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9wcy0+aW5pdF9pbnN0 YW5jZShpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQpOw0KPiA+ICsNCj4gPiArICAgICByZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4NCj4gDQo+IFJlZ2FyZHMsDQo+ IA0KPiAgICAgICAgIEhhbnMNCg==