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 A37E8C636CC for ; Wed, 15 Feb 2023 22:44:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229694AbjBOWo1 (ORCPT ); Wed, 15 Feb 2023 17:44:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45654 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229509AbjBOWoZ (ORCPT ); Wed, 15 Feb 2023 17:44:25 -0500 Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2078.outbound.protection.outlook.com [40.107.105.78]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7A6A233E1; Wed, 15 Feb 2023 14:44:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nVs+wyiM9OTHV952QNCpQ3bgrjHFonUVeoBEDQXdresVDmgedmmPNlPrpf497Ofjc1/OY465PBeLXctEH4PwnFf8OB+90CZvDf2zYVYhj//6J2tqte/cxsASZLUQYDx0QNRSfrcLgOwGAlNKwcmKTriVkC5qmCiJCC4+JDi2ksYMsidGr9//W5ZF9dwPi4WvPFkltLWeV/gVropiFLZRPFI15yJMmdumCGlNEpaH0GrKodFdTYOoU1GK2aXlsByaY9rAEJN0Y8i2USCkjag5RyCwrSWe+S15sNVh6PfRdc2H9DwWxyRiZCjrvPz8v02VFfVSaysEQnsyzpBw08k3Eg== 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=f5mD6EfrCDZPuDe+KyVv10Hb2os7RZ+MiODsQXDaMmQ=; b=BXFyYxsX5mPvmvffaxurvG9FaulAknrw8+bqcAOKgKNV2e76yJ6EkrnwiYtq/IEjiqH8SkrKyK4Y1WYZyrDqnmepJA9FbXe1rqdYHohh3Zd7KKqfyXn9HVIYDnWTHVjeyWLrzG33UPQltovDVMFMKPZy+Z+Jpz10KWlWNux2Db8m1BFShnOVNIiABYoOlwBNMvGfnZR4u6IBGLPdxCPEH12OLeZ6Eo86GanjJnwy+6uKP46sfS3w4i0RBgKxSrE2NEpqs7VQFIFrH9TuysskuIOlGLfXTpwtcP1L8q+i+JoOQaEbF56GwYnKPJZ5CgUMGVvC9+UJWEjrZUcnMiSkeg== 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=f5mD6EfrCDZPuDe+KyVv10Hb2os7RZ+MiODsQXDaMmQ=; b=TBfQb8p4mi+4cP3crMkVZBZFCoZuci5Mfpo2QZG2umq54TzejPOHICYi/7HAT7wDGH3HY95GJu5MdII/0O7cy06ofOnAUxZXoJk00yqnMdMG3c2SiWpBuisEgExHmnkJ7416ypnsw6SKW26wYfupxe+C7EgKlcQLFQ7BjsSbbho= Received: from AM0PR04MB6289.eurprd04.prod.outlook.com (2603:10a6:208:145::23) by DU0PR04MB9587.eurprd04.prod.outlook.com (2603:10a6:10:317::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.12; Wed, 15 Feb 2023 22:44:16 +0000 Received: from AM0PR04MB6289.eurprd04.prod.outlook.com ([fe80::509:96a2:4382:6b51]) by AM0PR04MB6289.eurprd04.prod.outlook.com ([fe80::509:96a2:4382:6b51%4]) with mapi id 15.20.6086.026; Wed, 15 Feb 2023 22:44:15 +0000 From: Leo Li To: Herve Codina , Rob Herring , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Christophe Leroy , Michael Ellerman , Nicholas Piggin , Qiang Zhao , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen CC: "linuxppc-dev@lists.ozlabs.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "alsa-devel@alsa-project.org" , Thomas Petazzoni Subject: RE: [PATCH v4 06/10] soc: fsl: cmp1: Add support for QMC Thread-Topic: [PATCH v4 06/10] soc: fsl: cmp1: Add support for QMC Thread-Index: AQHZMWDGjrd5yxTC2Eq8sey9LLf7Nq7Qqihw Date: Wed, 15 Feb 2023 22:44:15 +0000 Message-ID: References: <20230126083222.374243-1-herve.codina@bootlin.com> <20230126083222.374243-7-herve.codina@bootlin.com> In-Reply-To: <20230126083222.374243-7-herve.codina@bootlin.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM0PR04MB6289:EE_|DU0PR04MB9587:EE_ x-ms-office365-filtering-correlation-id: 7f13f2e6-23e2-44e1-f82e-08db0fa62a87 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: I1okBAmCwFosa/Rc6Yl/D56qJ4GselWGX7khUSW9gzf8TwDPQF6QfOkxdi174F9VhM6c5q9yUadXjG9Y7vz8bTr0ZDzvK+jhufNIKkjXfLSCJ+i0ScXzhqZqRWq4mubmPal9NlzqaGY2qn/r4beTfO9GgA+lrws4g516QrM/pQ/qeTpyrMhcvDus1jDzV23Sx42rYSuQ3DQSx/rmEr7tder6C8BmCPQitc0DAayHLCXIKm7qAHltoU4B6Y/xEOTiR4mE5I+SfTmmOA5fSTf8NbWWpGPKT7aTql4JXdxS72x40fmH/b/AigmHpN/a+CkNuy/O+f1wihn9jLYVBnrJCiTu+Y2lHDxyr8G/tGWFCi+WMTOkxaDbc9etva6hYr3xGVuNP9nCN/zJgOqzmd1n662mCPOBiA0GANwn1HnV0nd1F7zOD38oFLZ+fYWG8s82kmcipSLdAxPGP2fVl+MHb5uBx1evIdOwt8ynpSxLeGHp3Cy1GCmV/ROfXGptW6naMNuPI+BRi/AsLAxTyL2WK9SvsNlyBrcWJnFQ1gtL7j1+6LAuZ9q3oLITYN+++NRSbwsSjeYSxP43B+GojPoA8sirN2dhHx76cDnpU3zDyfyU3PzYLUieVVMxE8NKgGdrS9ZgLc41us38hXe5/yuhZ9DDpbat7LWVC+mkY4PjnwDkyWlJj4g3/A1Xn0yqWo2TAe+Mnkp0PRezUJsFGGia1LfWgxGI1pBUpGvxR+OWvIo= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB6289.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(396003)(136003)(346002)(376002)(366004)(39860400002)(451199018)(4326008)(76116006)(66946007)(66446008)(38100700002)(66476007)(66556008)(7696005)(2906002)(41300700001)(921005)(8676002)(64756008)(38070700005)(33656002)(478600001)(9686003)(52536014)(26005)(186003)(55016003)(8936002)(30864003)(7416002)(5660300002)(316002)(122000001)(54906003)(110136005)(71200400001)(83380400001)(55236004)(53546011)(6506007)(86362001)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RTdVbWNDNVZDaDJzQXBkOU11TTljdnFDRCtwNy8ydEQ1bldyR1FXNm44dFI2?= =?utf-8?B?YVBzRTdnZitPOUNZMHU1WUZBSHFoaHp2YVdoTjQ3TGRJcks3dFFMNHVwS3Rx?= =?utf-8?B?Z1NkdlRuNGdCNWxKVERZbUhPa2JvQkhycXoyWjhUVzFtZmpqb1RDRm83MGEv?= =?utf-8?B?RkJoc21RUW9LQkxhODBOVldWblpVWmI0TE94aGRKLy8yL0hPWlE5ZDNHTXRE?= =?utf-8?B?NUJyOEI2L2VPUk1IU0doSTZydStWSVZ0TU5sSkJVQVFSemZsSGx3cC8zMTVC?= =?utf-8?B?b01rV1BrRzhxcTVjYmtONE9jTVNlTGdNbTBWdzhPcmlRazNMN0Y1aUhTRVN6?= =?utf-8?B?QzdFU051NUhrRUlFcFJmTFR4UTdaY1NaNnlFRWZjSUplQjlJMHdEZ3JzR1py?= =?utf-8?B?QnFBRnhHSy9xdXM2Z00zeUZsZjd0OEYrdlNmY2ZvRGwyQlU5ay9WVGFYWXFG?= =?utf-8?B?SEtkbDdnYVJDdTBaRFU5K1hvK0hwTFZ6UEN1b2hQdVdWTWlpckVBVWtvSmhM?= =?utf-8?B?TEJOVkRpK3ZtSUNwU0REaVdjQTczbVBYQ25jRGNxUEdmenBSS2hub2dweEd4?= =?utf-8?B?SEJHWVhZVUpzVFF4U1dmamVSTnVTL1lhaTBTaTVrMlBubXBVMXk5MXhrT3g3?= =?utf-8?B?NG00TDJUdTVzMnhWZFQxSmxJd0MvSEV0OVZsekxxRU1ZV3I1aTVXRXVKaWtI?= =?utf-8?B?eERwV3Z4NUlhQjh6NURtM0RMVEpERUtRajhUdjBFTysxQlJQWUcxZCtGTFBG?= =?utf-8?B?SUowMGhFL0VWRlFORkhyVWdPc1lwN0JVazhJSE8xOGgwTEo1Z1Ixams3MVdy?= =?utf-8?B?RHZkV0JiS3JDOUJlV3RuZ3FzNkNWOFJGWXFrK3VjejFTZGJiVG5EZFNPRlpG?= =?utf-8?B?czYrdHJyZE44TVRWdFJzbFM4WlcrVml1U3ZmSjVFV01aSTYwcXFreTVQc2E3?= =?utf-8?B?S0ZDcml5d1RlQmVVdmtEdCtLazdsMk5tdWUwZDZpVjh6bGE3YnhTOUYzcmxX?= =?utf-8?B?R2FjVDRHaXpmZlA5TE5XRm16Q0dnZzhYc1psS0FBbDhEQ29DTGJMdDUrdG80?= =?utf-8?B?dGwvVjNuT2llWGN1TDBNemI3bE1xVjc1TytyRGFNL3R5dDQ5MXNRbllmb295?= =?utf-8?B?TFZYb0Y5Z3VoUFNaZkprYnNpK1lNRHNJWUZZbDZDaGt4VlV6dXVOaXBQUktV?= =?utf-8?B?aTQzTmQ1TElhSXdoaURJZEpUYWtINEszU3FOUnRtTjBDTXQwam5uUnYyZ3Ru?= =?utf-8?B?UWV5cDRNSmhXb1BtditFS1FCczhqTlNvMjBPM0t1QkJxQlBKaVFoWW0xSlpu?= =?utf-8?B?QkgwZFo3cm5kRyt5dkdnRkFIT1hnNkwvaUpSZENicEE5anVVL0FRU1RJcjJR?= =?utf-8?B?NXJyQ2kzTHloMU5IanlxMmREVHhUWld0RW5VOUxvQzRUckhLNHU2dDBBalVN?= =?utf-8?B?WGxyZkFQb0crR21DRkx1cDE0d2w0NndPTW9BcVRxYU42bUMyTDRiMDFXYU5n?= =?utf-8?B?SS9PL1hxWGxOWjBSei9pWDNQcGtzRVJmZ20wY0RvSEd4L3NZSjNnQUxqMDB6?= =?utf-8?B?d3ZaREthQmdOTmpqcUU1Z2tmcnE0OU5NaHRFaUg4RFlIUlljMk5JMlU1dS9F?= =?utf-8?B?UG9VWm85VjhUbVREVC9kNElkM2dTVG92cG1FR2tadkR2V09yMmFndmV5TGxy?= =?utf-8?B?anJ4UWJPLzIvdWJvVjNEb2oreFgvc2tVNjBsZVpNZG9xZ0NqTDlGclB1clRs?= =?utf-8?B?OUthZ3hDN28zN0J4K3ZRRjRTL2NwR2FKL1pWQzR0UnRTL3Y3MFFOU1VvT20r?= =?utf-8?B?TFlhY0E2dXlSV1VEK2VuYkM2MUV5dkdBQmRrSkpnODBDSWdIUzdUVGdoZUJk?= =?utf-8?B?UDA2dnc0Z3dsMllrUVlXSjlmQkpiLzYxcXBKMjFaTVFITCtVcVV1QjhySFZR?= =?utf-8?B?SU9hMVlOU0RtN2x2Ty9rdUtnVzFCK1ludEszd1lKSE0rTlNsbU1LVUpBRU9q?= =?utf-8?B?WW1aNFlnOFJPZ1hoSHM1eDRkY2ppZUxFQ2RWSTRncjZXZkxzWjlzZ2tiNlpC?= =?utf-8?B?Y0puOEFUa3VYeEdTWjZyaXlsTkd6b3YxWExJNUVBSjRlVE8yM0hwMnRHaTNj?= =?utf-8?Q?xEhauJo+8CGkZQC0gPuX0eQFP?= 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: AM0PR04MB6289.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7f13f2e6-23e2-44e1-f82e-08db0fa62a87 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Feb 2023 22:44:15.5286 (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: LXDdBujBevWWyheoInzqjd+XJX1Oes3guTH8Wj7UrOKWqRamB0eRf/RCBjCs8NRCLdq5WbdPtzoA5MGzbhrBmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR04MB9587 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSGVydmUgQ29kaW5hIDxo ZXJ2ZS5jb2RpbmFAYm9vdGxpbi5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBKYW51YXJ5IDI2LCAy MDIzIDI6MzIgQU0NCj4gVG86IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29t PjsgTGVvIExpDQo+IDxsZW95YW5nLmxpQG54cC5jb20+OyBSb2IgSGVycmluZyA8cm9iaCtkdEBr ZXJuZWwub3JnPjsgS3J6eXN6dG9mDQo+IEtvemxvd3NraSA8a3J6eXN6dG9mLmtvemxvd3NraStk dEBsaW5hcm8ub3JnPjsgTGlhbSBHaXJkd29vZA0KPiA8bGdpcmR3b29kQGdtYWlsLmNvbT47IE1h cmsgQnJvd24gPGJyb29uaWVAa2VybmVsLm9yZz47IENocmlzdG9waGUNCj4gTGVyb3kgPGNocmlz dG9waGUubGVyb3lAY3Nncm91cC5ldT47IE1pY2hhZWwgRWxsZXJtYW4NCj4gPG1wZUBlbGxlcm1h bi5pZC5hdT47IE5pY2hvbGFzIFBpZ2dpbiA8bnBpZ2dpbkBnbWFpbC5jb20+OyBRaWFuZyBaaGFv DQo+IDxxaWFuZy56aGFvQG54cC5jb20+OyBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6 PjsgVGFrYXNoaSBJd2FpDQo+IDx0aXdhaUBzdXNlLmNvbT47IFNoZW5naml1IFdhbmcgPHNoZW5n aml1LndhbmdAZ21haWwuY29tPjsgWGl1Ym8gTGkNCj4gPFhpdWJvLkxlZUBnbWFpbC5jb20+OyBG YWJpbyBFc3RldmFtIDxmZXN0ZXZhbUBnbWFpbC5jb20+OyBOaWNvbGluDQo+IENoZW4gPG5pY29s ZW90c3VrYUBnbWFpbC5jb20+DQo+IENjOiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsg bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiBkZXZpY2V0cmVlQHZnZXIu a2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgYWxzYS1kZXZlbEBhbHNh LQ0KPiBwcm9qZWN0Lm9yZzsgVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBib290 bGluLmNvbT4NCj4gU3ViamVjdDogW1BBVENIIHY0IDA2LzEwXSBzb2M6IGZzbDogY21wMTogQWRk IHN1cHBvcnQgZm9yIFFNQw0KDQpUeXBvOiBjcG0xDQoNCj4gDQo+IFRoZSBRTUMgKFFVSUNDIE11 bHRpY2hhbm5lbCBDb250cm9sbGVyKSBlbXVsYXRlcyB1cCB0byA2NCBjaGFubmVscyB3aXRoaW4N Cj4gb25lIHNlcmlhbCBjb250cm9sbGVyIHVzaW5nIHRoZSBzYW1lIFRETSBwaHlzaWNhbCBpbnRl cmZhY2Ugcm91dGVkIGZyb20gdGhlDQo+IFRTQS4NCj4gDQo+IEl0IGlzIGF2YWlsYWJsZSBpbiBz b21lCVBvd2VyUVVJQ0MgU29DIHN1Y2ggYXMgdGhlDQo+IE1QQzg4NSBvciBNUEM4NjYuDQo+IA0K PiBJdCBpcyBhbHNvIGF2YWlsYWJsZSBvbiBzb21lIFF1aWNjIEVuZ2luZSBTb0NzLg0KPiBUaGlz IGN1cnJlbnQgdmVyc2lvbiBzdXBwb3J0IENQTTEgU29DcyBvbmx5IGFuZCBzb21lIGVuaGFuY2Vt ZW50IGFyZQ0KPiBuZWVkZWQgdG8gc3VwcG9ydCBRdWljYyBFbmdpbmUgU29Dcy4NCj4gDQo+IFNp Z25lZC1vZmYtYnk6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29tPg0KDQpP dGhlcndpc2UgbG9va3MgZ29vZCB0byBtZS4NCg0KQWNrZWQtYnk6IExpIFlhbmcgPGxlb3lhbmcu bGlAbnhwLmNvbT4NCg0KPiAtLS0NCj4gIGRyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnICB8ICAg MTIgKw0KPiAgZHJpdmVycy9zb2MvZnNsL3FlL01ha2VmaWxlIHwgICAgMSArDQo+ICBkcml2ZXJz L3NvYy9mc2wvcWUvcW1jLmMgICAgfCAxNTMzDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrDQo+ICBpbmNsdWRlL3NvYy9mc2wvcWUvcW1jLmggICAgfCAgIDcxICsrDQo+ICA0 IGZpbGVzIGNoYW5nZWQsIDE2MTcgaW5zZXJ0aW9ucygrKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc29jL2ZzbC9xZS9xbWMuYyAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IGluY2x1ZGUv c29jL2ZzbC9xZS9xbWMuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2ZzbC9xZS9L Y29uZmlnIGIvZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcgaW5kZXgNCj4gNjBlYzExYzlmNGQ5 Li4yNWIyMTgzNTFhZTMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmln DQo+ICsrKyBiL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnDQo+IEBAIC00NCw2ICs0NCwxOCBA QCBjb25maWcgQ1BNX1RTQQ0KPiAgCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0 aGlzDQo+ICAJICBjb250cm9sbGVyDQo+IA0KPiArY29uZmlnIENQTV9RTUMNCj4gKwl0cmlzdGF0 ZSAiQ1BNIFFNQyBzdXBwb3J0Ig0KPiArCWRlcGVuZHMgb24gT0YgJiYgSEFTX0lPTUVNDQo+ICsJ ZGVwZW5kcyBvbiBDUE0xIHx8IChQUEMgJiYgQ09NUElMRV9URVNUKQ0KPiArCWRlcGVuZHMgb24g Q1BNX1RTQQ0KPiArCWhlbHANCj4gKwkgIEZyZWVzY2FsZSBDUE0gUVVJQ0MgTXVsdGljaGFubmVs IENvbnRyb2xsZXINCj4gKwkgIChRTUMpDQo+ICsNCj4gKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMg c3VwcG9ydCBmb3IgdGhpcw0KPiArCSAgY29udHJvbGxlcg0KPiArDQo+ICBjb25maWcgUUVfVERN DQo+ICAJYm9vbA0KPiAgCWRlZmF1bHQgeSBpZiBGU0xfVUNDX0hETEMNCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvc29jL2ZzbC9xZS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL2ZzbC9xZS9NYWtlZmls ZSBpbmRleA0KPiA0NWM5NjFhY2M4MWIuLmVjODUwNmUxMzExMyAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9zb2MvZnNsL3FlL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvc29jL2ZzbC9xZS9NYWtl ZmlsZQ0KPiBAQCAtNSw2ICs1LDcgQEANCj4gIG9iai0kKENPTkZJR19RVUlDQ19FTkdJTkUpKz0g cWUubyBxZV9jb21tb24ubyBxZV9pYy5vIHFlX2lvLm8NCj4gIG9iai0kKENPTkZJR19DUE0pCSs9 IHFlX2NvbW1vbi5vDQo+ICBvYmotJChDT05GSUdfQ1BNX1RTQSkJKz0gdHNhLm8NCj4gK29iai0k KENPTkZJR19DUE1fUU1DKQkrPSBxbWMubw0KPiAgb2JqLSQoQ09ORklHX1VDQykJKz0gdWNjLm8N Cj4gIG9iai0kKENPTkZJR19VQ0NfU0xPVykJKz0gdWNjX3Nsb3cubw0KPiAgb2JqLSQoQ09ORklH X1VDQ19GQVNUKQkrPSB1Y2NfZmFzdC5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9mc2wv cWUvcW1jLmMgYi9kcml2ZXJzL3NvYy9mc2wvcWUvcW1jLmMgbmV3IGZpbGUNCj4gbW9kZSAxMDA2 NDQgaW5kZXggMDAwMDAwMDAwMDAwLi5jZmE3MjA3MzUzZTANCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9kcml2ZXJzL3NvYy9mc2wvcWUvcW1jLmMNCj4gQEAgLTAsMCArMSwxNTMzIEBADQo+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArLyoNCj4gKyAqIFFNQyBkcml2 ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgMjAyMiBDUyBHUk9VUCBGcmFuY2UNCj4gKyAqDQo+ ICsgKiBBdXRob3I6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29tPiAgKi8N Cj4gKw0KPiArI2luY2x1ZGUgPHNvYy9mc2wvcWUvcW1jLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9oZGxjLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L29mX3BsYXRmb3JtLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiArI2luY2x1ZGUgPHNvYy9mc2wvY3Bt Lmg+DQo+ICsjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4NCj4gKyNpbmNsdWRlICJ0c2EuaCIN Cj4gKw0KPiArLyogU0NDIGdlbmVyYWwgbW9kZSByZWdpc3RlciBoaWdoICgzMiBiaXRzKSAqLw0K PiArI2RlZmluZSBTQ0NfR1NNUkwJMHgwMA0KPiArI2RlZmluZSBTQ0NfR1NNUkxfRU5SCQkoMSA8 PCA1KQ0KPiArI2RlZmluZSBTQ0NfR1NNUkxfRU5UCQkoMSA8PCA0KQ0KPiArI2RlZmluZSBTQ0Nf R1NNUkxfTU9ERV9RTUMJKDB4MEEgPDwgMCkNCj4gKw0KPiArLyogU0NDIGdlbmVyYWwgbW9kZSBy ZWdpc3RlciBsb3cgKDMyIGJpdHMpICovDQo+ICsjZGVmaW5lIFNDQ19HU01SSAkweDA0DQo+ICsj ZGVmaW5lICAgU0NDX0dTTVJIX0NUU1MJKDEgPDwgNykNCj4gKyNkZWZpbmUgICBTQ0NfR1NNUkhf Q0RTCQkoMSA8PCA4KQ0KPiArI2RlZmluZSAgIFNDQ19HU01SSF9DVFNQCSgxIDw8IDkpDQo+ICsj ZGVmaW5lICAgU0NDX0dTTVJIX0NEUAkJKDEgPDwgMTApDQo+ICsNCj4gKy8qIFNDQyBldmVudCBy ZWdpc3RlciAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgU0NDX1NDQ0UJMHgxMA0KPiArI2RlZmlu ZSAgIFNDQ19TQ0NFX0lRT1YJCSgxIDw8IDMpDQo+ICsjZGVmaW5lICAgU0NDX1NDQ0VfR0lOVAkJ KDEgPDwgMikNCj4gKyNkZWZpbmUgICBTQ0NfU0NDRV9HVU4JCSgxIDw8IDEpDQo+ICsjZGVmaW5l ICAgU0NDX1NDQ0VfR09WCQkoMSA8PCAwKQ0KPiArDQo+ICsvKiBTQ0MgbWFzayByZWdpc3RlciAo MTYgYml0cykgKi8NCj4gKyNkZWZpbmUgU0NDX1NDQ00JMHgxNA0KPiArLyogTXVsdGljaGFubmVs IGJhc2UgcG9pbnRlciAoMzIgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9NQ0JBU0UJCTB4 MDANCj4gKy8qIE11bHRpY2hhbm5lbCBjb250cm9sbGVyIHN0YXRlICgxNiBiaXRzKSAqLw0KPiAr I2RlZmluZSBRTUNfR0JMX1FNQ1NUQVRFCTB4MDQNCj4gKy8qIE1heGltdW0gcmVjZWl2ZSBidWZm ZXIgbGVuZ3RoICgxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfR0JMX01SQkxSCQkweDA2DQo+ ICsvKiBUeCB0aW1lLXNsb3QgYXNzaWdubWVudCB0YWJsZSBwb2ludGVyICgxNiBiaXRzKSAqLw0K PiArI2RlZmluZSBRTUNfR0JMX1RYX1NfUFRSCTB4MDgNCj4gKy8qIFJ4IHBvaW50ZXIgKDE2IGJp dHMpICovDQo+ICsjZGVmaW5lIFFNQ19HQkxfUlhQVFIJCTB4MEENCj4gKy8qIEdsb2JhbCByZWNl aXZlIGZyYW1lIHRocmVzaG9sZCAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9HUkZU SFIJCTB4MEMNCj4gKy8qIEdsb2JhbCByZWNlaXZlIGZyYW1lIGNvdW50ICgxNiBiaXRzKSAqLw0K PiArI2RlZmluZSBRTUNfR0JMX0dSRkNOVAkJMHgwRQ0KPiArLyogTXVsdGljaGFubmVsIGludGVy cnVwdCBiYXNlIGFkZHJlc3MgKDMyIGJpdHMpICovDQo+ICsjZGVmaW5lIFFNQ19HQkxfSU5UQkFT RQkJMHgxMA0KPiArLyogTXVsdGljaGFubmVsIGludGVycnVwdCBwb2ludGVyICgzMiBiaXRzKSAq Lw0KPiArI2RlZmluZSBRTUNfR0JMX0lOVFBUUgkJMHgxNA0KPiArLyogUnggdGltZS1zbG90IGFz c2lnbm1lbnQgdGFibGUgcG9pbnRlciAoMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9S WF9TX1BUUgkweDE4DQo+ICsvKiBUeCBwb2ludGVyICgxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBR TUNfR0JMX1RYUFRSCQkweDFBDQo+ICsvKiBDUkMgY29uc3RhbnQgKDMyIGJpdHMpICovDQo+ICsj ZGVmaW5lIFFNQ19HQkxfQ19NQVNLMzIJMHgxQw0KPiArLyogVGltZSBzbG90IGFzc2lnbm1lbnQg dGFibGUgUnggKDMyIHggMTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX0dCTF9UU0FUUlgJCTB4 MjANCj4gKy8qIFRpbWUgc2xvdCBhc3NpZ25tZW50IHRhYmxlIFR4ICgzMiB4IDE2IGJpdHMpICov DQo+ICsjZGVmaW5lIFFNQ19HQkxfVFNBVFRYCQkweDYwDQo+ICsvKiBDUkMgY29uc3RhbnQgKDE2 IGJpdHMpICovDQo+ICsjZGVmaW5lIFFNQ19HQkxfQ19NQVNLMTYJMHhBMA0KPiArDQo+ICsvKiBU U0EgZW50cnkgKDE2Yml0IGVudHJ5IGluIFRTQVRSWCBhbmQgVFNBVFRYKSAqLw0KPiArI2RlZmlu ZSBRTUNfVFNBX1ZBTElECQkoMSA8PCAxNSkNCj4gKyNkZWZpbmUgUU1DX1RTQV9XUkFQCQkoMSA8 PCAxNCkNCj4gKyNkZWZpbmUgUU1DX1RTQV9NQVNLCQkoMHgzMDNGKQ0KPiArI2RlZmluZSBRTUNf VFNBX0NIQU5ORUwoeCkJKCh4KSA8PCA2KQ0KPiArDQo+ICsvKiBUeCBidWZmZXIgZGVzY3JpcHRv ciBiYXNlIGFkZHJlc3MgKDE2IGJpdHMsIG9mZnNldCBmcm9tIE1DQkFTRSkgKi8NCj4gKyNkZWZp bmUgUU1DX1NQRV9UQkFTRQkweDAwDQo+ICsNCj4gKy8qIENoYW5uZWwgbW9kZSByZWdpc3RlciAo MTYgYml0cykgKi8NCj4gKyNkZWZpbmUgUU1DX1NQRV9DSEFNUgkweDAyDQo+ICsjZGVmaW5lICAg UU1DX1NQRV9DSEFNUl9NT0RFX0hETEMJKDEgPDwgMTUpDQo+ICsjZGVmaW5lICAgUU1DX1NQRV9D SEFNUl9NT0RFX1RSQU5TUAkoKDAgPDwgMTUpIHwgKDEgPDwgMTMpKQ0KPiArI2RlZmluZSAgIFFN Q19TUEVfQ0hBTVJfRU5UCQkoMSA8PCAxMikNCj4gKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX1BP TAkJKDEgPDwgOCkNCj4gKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX0hETENfSURMTQkoMSA8PCAx MykNCj4gKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX0hETENfQ1JDCSgxIDw8IDcpDQo+ICsjZGVm aW5lICAgUU1DX1NQRV9DSEFNUl9IRExDX05PRgkoMHgwZiA8PCAwKQ0KPiArI2RlZmluZSAgIFFN Q19TUEVfQ0hBTVJfVFJBTlNQX1JECSgxIDw8IDE0KQ0KPiArI2RlZmluZSAgIFFNQ19TUEVfQ0hB TVJfVFJBTlNQX1NZTkMJKDEgPDwgMTApDQo+ICsNCj4gKy8qIFR4IGludGVybmFsIHN0YXRlICgz MiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfU1BFX1RTVEFURQkweDA0DQo+ICsvKiBUeCBidWZm ZXIgZGVzY3JpcHRvciBwb2ludGVyICgxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNfU1BFX1RC UFRSCTB4MEMNCj4gKy8qIFplcm8taW5zZXJ0aW9uIHN0YXRlICgzMiBiaXRzKSAqLw0KPiArI2Rl ZmluZSBRTUNfU1BFX1pJU1RBVEUJMHgxNA0KPiArLyogQ2hhbm5lbOKAmXMgaW50ZXJydXB0IG1h c2sgZmxhZ3MgKDE2IGJpdHMpICovDQo+ICsjZGVmaW5lIFFNQ19TUEVfSU5UTVNLCTB4MUMNCj4g Ky8qIFJ4IGJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAoMTYgYml0cywgb2Zmc2V0IGZy b20gTUNCQVNFKSAqLw0KPiArI2RlZmluZSBRTUNfU1BFX1JCQVNFCTB4MjANCj4gKy8qIEhETEM6 IE1heGltdW0gZnJhbWUgbGVuZ3RoIHJlZ2lzdGVyICgxNiBiaXRzKSAqLw0KPiArI2RlZmluZSBR TUNfU1BFX01GTFIJMHgyMg0KPiArLyogVFJBTlNQQVJFTlQ6IFRyYW5zcGFyZW50IG1heGltdW0g cmVjZWl2ZSBsZW5ndGggKDE2IGJpdHMpICovDQo+ICsjZGVmaW5lIFFNQ19TUEVfVE1SQkxSCTB4 MjINCj4gKy8qIFJ4IGludGVybmFsIHN0YXRlICgzMiBiaXRzKSAqLw0KPiArI2RlZmluZSBRTUNf U1BFX1JTVEFURQkweDI0DQo+ICsvKiBSeCBidWZmZXIgZGVzY3JpcHRvciBwb2ludGVyICgxNiBi aXRzKSAqLw0KPiArI2RlZmluZSBRTUNfU1BFX1JCUFRSCTB4MkMNCj4gKy8qIFBhY2tzIDQgYnl0 ZXMgdG8gMSBsb25nIHdvcmQgYmVmb3JlIHdyaXRpbmcgdG8gYnVmZmVyICgzMiBiaXRzKSAqLw0K PiArI2RlZmluZSBRTUNfU1BFX1JQQUNLCTB4MzANCj4gKy8qIFplcm8gZGVsZXRpb24gc3RhdGUg KDMyIGJpdHMpICovDQo+ICsjZGVmaW5lIFFNQ19TUEVfWkRTVEFURQkweDM0DQo+ICsNCj4gKy8q IFRyYW5zcGFyZW50IHN5bmNocm9uaXphdGlvbiAoMTYgYml0cykgKi8gI2RlZmluZSBRTUNfU1BF X1RSTlNZTkMNCj4gKzB4M0MNCj4gKyNkZWZpbmUgICBRTUNfU1BFX1RSTlNZTkNfUlgoeCkJKCh4 KSA8PCA4KQ0KPiArI2RlZmluZSAgIFFNQ19TUEVfVFJOU1lOQ19UWCh4KQkoKHgpIDw8IDApDQo+ ICsNCj4gKy8qIEludGVycnVwdCByZWxhdGVkIHJlZ2lzdGVycyBiaXRzICovDQo+ICsjZGVmaW5l IFFNQ19JTlRfVgkJKDEgPDwgMTUpDQo+ICsjZGVmaW5lIFFNQ19JTlRfVwkJKDEgPDwgMTQpDQo+ ICsjZGVmaW5lIFFNQ19JTlRfTklECQkoMSA8PCAxMykNCj4gKyNkZWZpbmUgUU1DX0lOVF9JREwJ CSgxIDw8IDEyKQ0KPiArI2RlZmluZSBRTUNfSU5UX0dFVF9DSEFOTkVMKHgpCSgoKHgpICYgMHgw RkMwKSA+PiA2KQ0KPiArI2RlZmluZSBRTUNfSU5UX01SRgkJKDEgPDwgNSkNCj4gKyNkZWZpbmUg UU1DX0lOVF9VTgkJKDEgPDwgNCkNCj4gKyNkZWZpbmUgUU1DX0lOVF9SWEYJCSgxIDw8IDMpDQo+ ICsjZGVmaW5lIFFNQ19JTlRfQlNZCQkoMSA8PCAyKQ0KPiArI2RlZmluZSBRTUNfSU5UX1RYQgkJ KDEgPDwgMSkNCj4gKyNkZWZpbmUgUU1DX0lOVF9SWEIJCSgxIDw8IDApDQo+ICsNCj4gKy8qIEJE IHJlbGF0ZWQgcmVnaXN0ZXJzIGJpdHMgKi8NCj4gKyNkZWZpbmUgUU1DX0JEX1JYX0UJKDEgPDwg MTUpDQo+ICsjZGVmaW5lIFFNQ19CRF9SWF9XCSgxIDw8IDEzKQ0KPiArI2RlZmluZSBRTUNfQkRf UlhfSQkoMSA8PCAxMikNCj4gKyNkZWZpbmUgUU1DX0JEX1JYX0wJKDEgPDwgMTEpDQo+ICsjZGVm aW5lIFFNQ19CRF9SWF9GCSgxIDw8IDEwKQ0KPiArI2RlZmluZSBRTUNfQkRfUlhfQ00JKDEgPDwg OSkNCj4gKyNkZWZpbmUgUU1DX0JEX1JYX1VCCSgxIDw8IDcpDQo+ICsjZGVmaW5lIFFNQ19CRF9S WF9MRwkoMSA8PCA1KQ0KPiArI2RlZmluZSBRTUNfQkRfUlhfTk8JKDEgPDwgNCkNCj4gKyNkZWZp bmUgUU1DX0JEX1JYX0FCCSgxIDw8IDMpDQo+ICsjZGVmaW5lIFFNQ19CRF9SWF9DUgkoMSA8PCAy KQ0KPiArDQo+ICsjZGVmaW5lIFFNQ19CRF9UWF9SCSgxIDw8IDE1KQ0KPiArI2RlZmluZSBRTUNf QkRfVFhfVwkoMSA8PCAxMykNCj4gKyNkZWZpbmUgUU1DX0JEX1RYX0kJKDEgPDwgMTIpDQo+ICsj ZGVmaW5lIFFNQ19CRF9UWF9MCSgxIDw8IDExKQ0KPiArI2RlZmluZSBRTUNfQkRfVFhfVEMJKDEg PDwgMTApDQo+ICsjZGVmaW5lIFFNQ19CRF9UWF9DTQkoMSA8PCA5KQ0KPiArI2RlZmluZSBRTUNf QkRfVFhfVUIJKDEgPDwgNykNCj4gKyNkZWZpbmUgUU1DX0JEX1RYX1BBRAkoMHgwZiA8PCAwKQ0K PiArDQo+ICsvKiBOdW1iZXJzIG9mIEJEcyBhbmQgaW50ZXJydXB0IGl0ZW1zICovDQo+ICsjZGVm aW5lIFFNQ19OQl9UWEJEUwk4DQo+ICsjZGVmaW5lIFFNQ19OQl9SWEJEUwk4DQo+ICsjZGVmaW5l IFFNQ19OQl9JTlRTCTEyOA0KPiArDQo+ICtzdHJ1Y3QgcW1jX3hmZXJfZGVzYyB7DQo+ICsJdW5p b24gew0KPiArCQl2b2lkICgqdHhfY29tcGxldGUpKHZvaWQgKmNvbnRleHQpOw0KPiArCQl2b2lk ICgqcnhfY29tcGxldGUpKHZvaWQgKmNvbnRleHQsIHNpemVfdCBsZW5ndGgpOw0KPiArCX07DQo+ ICsJdm9pZCAqY29udGV4dDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBxbWNfY2hhbiB7DQo+ICsJ c3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KPiArCXVuc2lnbmVkIGludCBpZDsNCj4gKwlzdHJ1Y3Qg cW1jICpxbWM7DQo+ICsJdm9pZCAqX19pb21lbSBzX3BhcmFtOw0KPiArCWVudW0gcW1jX21vZGUg bW9kZTsNCj4gKwl1NjQJdHhfdHNfbWFzazsNCj4gKwl1NjQJcnhfdHNfbWFzazsNCj4gKwlib29s IGlzX3JldmVyc2VfZGF0YTsNCj4gKw0KPiArCXNwaW5sb2NrX3QJdHhfbG9jazsNCj4gKwljYmRf dCBfX2lvbWVtICp0eGJkczsNCj4gKwljYmRfdCBfX2lvbWVtICp0eGJkX2ZyZWU7DQo+ICsJY2Jk X3QgX19pb21lbSAqdHhiZF9kb25lOw0KPiArCXN0cnVjdCBxbWNfeGZlcl9kZXNjIHR4X2Rlc2Nb UU1DX05CX1RYQkRTXTsNCj4gKwl1NjQJbmJfdHhfdW5kZXJydW47DQo+ICsJYm9vbAlpc190eF9z dG9wcGVkOw0KPiArDQo+ICsJc3BpbmxvY2tfdAlyeF9sb2NrOw0KPiArCWNiZF90IF9faW9tZW0g KnJ4YmRzOw0KPiArCWNiZF90IF9faW9tZW0gKnJ4YmRfZnJlZTsNCj4gKwljYmRfdCBfX2lvbWVt ICpyeGJkX2RvbmU7DQo+ICsJc3RydWN0IHFtY194ZmVyX2Rlc2MgcnhfZGVzY1tRTUNfTkJfUlhC RFNdOw0KPiArCXU2NAluYl9yeF9idXN5Ow0KPiArCWludAlyeF9wZW5kaW5nOw0KPiArCWJvb2wJ aXNfcnhfaGFsdGVkOw0KPiArCWJvb2wJaXNfcnhfc3RvcHBlZDsNCj4gK307DQo+ICsNCj4gK3N0 cnVjdCBxbWMgew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gKwlzdHJ1Y3QgdHNhX3Nlcmlh bCAqdHNhX3NlcmlhbDsNCj4gKwl2b2lkICpfX2lvbWVtIHNjY19yZWdzOw0KPiArCXZvaWQgKl9f aW9tZW0gc2NjX3ByYW07DQo+ICsJdm9pZCAqX19pb21lbSBkcHJhbTsNCj4gKwl1MTYgc2NjX3By YW1fb2Zmc2V0Ow0KPiArCWNiZF90IF9faW9tZW0gKmJkX3RhYmxlOw0KPiArCWRtYV9hZGRyX3Qg YmRfZG1hX2FkZHI7DQo+ICsJc2l6ZV90IGJkX3NpemU7DQo+ICsJdTE2IF9faW9tZW0gKmludF90 YWJsZTsNCj4gKwl1MTYgX19pb21lbSAqaW50X2N1cnI7DQo+ICsJZG1hX2FkZHJfdCBpbnRfZG1h X2FkZHI7DQo+ICsJc2l6ZV90IGludF9zaXplOw0KPiArCXN0cnVjdCBsaXN0X2hlYWQgY2hhbl9o ZWFkOw0KPiArCXN0cnVjdCBxbWNfY2hhbiAqY2hhbnNbNjRdOw0KPiArfTsNCj4gKw0KPiArc3Rh dGljIGlubGluZSB2b2lkIHFtY193cml0ZTE2KHZvaWQgKl9faW9tZW0gYWRkciwgdTE2IHZhbCkg ew0KPiArCWlvd3JpdGUxNmJlKHZhbCwgYWRkcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxp bmUgdTE2IHFtY19yZWFkMTYodm9pZCAqX19pb21lbSBhZGRyKSB7DQo+ICsJcmV0dXJuIGlvcmVh ZDE2YmUoYWRkcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBxbWNfc2V0Yml0 czE2KHZvaWQgKl9faW9tZW0gYWRkciwgdTE2IHNldCkgew0KPiArCXFtY193cml0ZTE2KGFkZHIs IHFtY19yZWFkMTYoYWRkcikgfCBzZXQpOyB9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBx bWNfY2xyYml0czE2KHZvaWQgKl9faW9tZW0gYWRkciwgdTE2IGNscikgew0KPiArCXFtY193cml0 ZTE2KGFkZHIsIHFtY19yZWFkMTYoYWRkcikgJiB+Y2xyKTsgfQ0KPiArDQo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgcW1jX3dyaXRlMzIodm9pZCAqX19pb21lbSBhZGRyLCB1MzIgdmFsKSB7DQo+ICsJ aW93cml0ZTMyYmUodmFsLCBhZGRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB1MzIg cW1jX3JlYWQzMih2b2lkICpfX2lvbWVtIGFkZHIpIHsNCj4gKwlyZXR1cm4gaW9yZWFkMzJiZShh ZGRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIHFtY19zZXRiaXRzMzIodm9p ZCAqX19pb21lbSBhZGRyLCB1MzIgc2V0KSB7DQo+ICsJcW1jX3dyaXRlMzIoYWRkciwgcW1jX3Jl YWQzMihhZGRyKSB8IHNldCk7IH0NCj4gKw0KPiArDQo+ICtpbnQgcW1jX2NoYW5fZ2V0X2luZm8o c3RydWN0IHFtY19jaGFuICpjaGFuLCBzdHJ1Y3QgcW1jX2NoYW5faW5mbw0KPiAqaW5mbykNCj4g K3sNCj4gKwlzdHJ1Y3QgdHNhX3NlcmlhbF9pbmZvIHRzYV9pbmZvOw0KPiArCWludCByZXQ7DQo+ ICsNCj4gKwkvKiBSZXRyaWV2ZSBpbmZvIGZyb20gdGhlIFRTQSByZWxhdGVkIHNlcmlhbCAqLw0K PiArCXJldCA9IHRzYV9zZXJpYWxfZ2V0X2luZm8oY2hhbi0+cW1jLT50c2Ffc2VyaWFsLCAmdHNh X2luZm8pOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlpbmZvLT5t b2RlID0gY2hhbi0+bW9kZTsNCj4gKwlpbmZvLT5yeF9mc19yYXRlID0gdHNhX2luZm8ucnhfZnNf cmF0ZTsNCj4gKwlpbmZvLT5yeF9iaXRfcmF0ZSA9IHRzYV9pbmZvLnJ4X2JpdF9yYXRlOw0KPiAr CWluZm8tPm5iX3R4X3RzID0gaHdlaWdodDY0KGNoYW4tPnR4X3RzX21hc2spOw0KPiArCWluZm8t PnR4X2ZzX3JhdGUgPSB0c2FfaW5mby50eF9mc19yYXRlOw0KPiArCWluZm8tPnR4X2JpdF9yYXRl ID0gdHNhX2luZm8udHhfYml0X3JhdGU7DQo+ICsJaW5mby0+bmJfcnhfdHMgPSBod2VpZ2h0NjQo Y2hhbi0+cnhfdHNfbWFzayk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9T WU1CT0wocW1jX2NoYW5fZ2V0X2luZm8pOw0KPiArDQo+ICtpbnQgcW1jX2NoYW5fc2V0X3BhcmFt KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgY29uc3Qgc3RydWN0DQo+IHFtY19jaGFuX3BhcmFtICpw YXJhbSkNCj4gK3sNCj4gKwlpZiAocGFyYW0tPm1vZGUgIT0gY2hhbi0+bW9kZSkNCj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlzd2l0Y2ggKHBhcmFtLT5tb2RlKSB7DQo+ICsJY2FzZSBR TUNfSERMQzoNCj4gKwkJaWYgKChwYXJhbS0+aGRsYy5tYXhfcnhfYnVmX3NpemUgJSA0KSB8fA0K PiArCQkgICAgKHBhcmFtLT5oZGxjLm1heF9yeF9idWZfc2l6ZSA8IDgpKQ0KPiArCQkJcmV0dXJu IC1FSU5WQUw7DQo+ICsNCj4gKwkJcW1jX3dyaXRlMTYoY2hhbi0+cW1jLT5zY2NfcHJhbSArIFFN Q19HQkxfTVJCTFIsDQo+ICsJCQkgICAgcGFyYW0tPmhkbGMubWF4X3J4X2J1Zl9zaXplIC0gOCk7 DQo+ICsJCXFtY193cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX01GTFIsDQo+ICsJCQkg ICAgcGFyYW0tPmhkbGMubWF4X3J4X2ZyYW1lX3NpemUpOw0KPiArCQlpZiAocGFyYW0tPmhkbGMu aXNfY3JjMzIpIHsNCj4gKwkJCXFtY19zZXRiaXRzMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVf Q0hBTVIsDQo+ICsJCQkJICAgICAgUU1DX1NQRV9DSEFNUl9IRExDX0NSQyk7DQo+ICsJCX0gZWxz ZSB7DQo+ICsJCQlxbWNfY2xyYml0czE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX0NIQU1SLA0K PiArCQkJCSAgICAgIFFNQ19TUEVfQ0hBTVJfSERMQ19DUkMpOw0KPiArCQl9DQo+ICsJCWJyZWFr Ow0KPiArDQo+ICsJY2FzZSBRTUNfVFJBTlNQQVJFTlQ6DQo+ICsJCXFtY193cml0ZTE2KGNoYW4t PnNfcGFyYW0gKyBRTUNfU1BFX1RNUkJMUiwNCj4gKwkJCSAgICBwYXJhbS0+dHJhbnNwLm1heF9y eF9idWZfc2l6ZSk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lN Qk9MKHFtY19jaGFuX3NldF9wYXJhbSk7DQo+ICsNCj4gK2ludCBxbWNfY2hhbl93cml0ZV9zdWJt aXQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBkbWFfYWRkcl90IGFkZHIsDQo+IHNpemVfdCBsZW5n dGgsDQo+ICsJCQkgIHZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCksIHZvaWQgKmNvbnRl eHQpDQo+ICt7DQo+ICsJc3RydWN0IHFtY194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsNCj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOw0KPiArCWNiZF90ICpfX2lvbWVtIGJkOw0KPiArCXUxNiBjdHJsOw0K PiArCWludCByZXQ7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFIgYml0ICBVQiBiaXQNCj4gKwkgKiAg IDAgICAgICAgMCAgOiBUaGUgQkQgaXMgZnJlZQ0KPiArCSAqICAgMSAgICAgICAxICA6IFRoZSBC RCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZvciB0cmFuc2Zlcg0KPiArCSAqICAgMCAgICAgICAxICA6 IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uDQo+ICsJICogICAxICAg ICAgIDAgIDogU2hvdWxkIG5vdCBhcHBlbmQNCj4gKwkgKi8NCj4gKw0KPiArCXNwaW5fbG9ja19p cnFzYXZlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7DQo+ICsJYmQgPSBjaGFuLT50eGJkX2ZyZWU7 DQo+ICsNCj4gKwljdHJsID0gcW1jX3JlYWQxNigmYmQtPmNiZF9zYyk7DQo+ICsJaWYgKGN0cmwg JiAoUU1DX0JEX1RYX1IgfCBRTUNfQkRfVFhfVUIpKSB7DQo+ICsJCS8qIFdlIGFyZSBmdWxsIC4u LiAqLw0KPiArCQlyZXQgPSAtRUJVU1k7DQo+ICsJCWdvdG8gZW5kOw0KPiArCX0NCj4gKw0KPiAr CXFtY193cml0ZTE2KCZiZC0+Y2JkX2RhdGxlbiwgbGVuZ3RoKTsNCj4gKwlxbWNfd3JpdGUzMigm YmQtPmNiZF9idWZhZGRyLCBhZGRyKTsNCj4gKw0KPiArCXhmZXJfZGVzYyA9ICZjaGFuLT50eF9k ZXNjW2JkIC0gY2hhbi0+dHhiZHNdOw0KPiArCXhmZXJfZGVzYy0+dHhfY29tcGxldGUgPSBjb21w bGV0ZTsNCj4gKwl4ZmVyX2Rlc2MtPmNvbnRleHQgPSBjb250ZXh0Ow0KPiArDQo+ICsJLyogQWN0 aXZhdGUgdGhlIGRlc2NyaXB0b3IgKi8NCj4gKwljdHJsIHw9IChRTUNfQkRfVFhfUiB8IFFNQ19C RF9UWF9VQik7DQo+ICsJd21iKCk7IC8qIEJlIHN1cmUgdG8gZmx1c2ggdGhlIGRlc2NyaXB0b3Ig YmVmb3JlIGNvbnRyb2wgdXBkYXRlICovDQo+ICsJcW1jX3dyaXRlMTYoJmJkLT5jYmRfc2MsIGN0 cmwpOw0KPiArDQo+ICsJaWYgKCFjaGFuLT5pc190eF9zdG9wcGVkKQ0KPiArCQlxbWNfc2V0Yml0 czE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX0NIQU1SLA0KPiBRTUNfU1BFX0NIQU1SX1BPTCk7 DQo+ICsNCj4gKwlpZiAoY3RybCAmIFFNQ19CRF9UWF9XKQ0KPiArCQljaGFuLT50eGJkX2ZyZWUg PSBjaGFuLT50eGJkczsNCj4gKwllbHNlDQo+ICsJCWNoYW4tPnR4YmRfZnJlZSsrOw0KPiArDQo+ ICsJcmV0ID0gMDsNCj4gKw0KPiArZW5kOg0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNo YW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZ TUJPTChxbWNfY2hhbl93cml0ZV9zdWJtaXQpOw0KPiArDQo+ICtzdGF0aWMgdm9pZCBxbWNfY2hh bl93cml0ZV9kb25lKHN0cnVjdCBxbWNfY2hhbiAqY2hhbikNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1j X3hmZXJfZGVzYyAqeGZlcl9kZXNjOw0KPiArCXZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29udGV4 dCk7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwl2b2lkICpjb250ZXh0Ow0KPiArCWNi ZF90ICpfX2lvbWVtIGJkOw0KPiArCXUxNiBjdHJsOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBSIGJp dCAgVUIgYml0DQo+ICsJICogICAwICAgICAgIDAgIDogVGhlIEJEIGlzIGZyZWUNCj4gKwkgKiAg IDEgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgdHJhbnNmZXINCj4g KwkgKiAgIDAgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgY29tcGxl dGlvbg0KPiArCSAqICAgMSAgICAgICAwICA6IFNob3VsZCBub3QgYXBwZW5kDQo+ICsJICovDQo+ ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOw0KPiArCWJk ID0gY2hhbi0+dHhiZF9kb25lOw0KPiArDQo+ICsJY3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRf c2MpOw0KPiArCXdoaWxlICghKGN0cmwgJiBRTUNfQkRfVFhfUikpIHsNCj4gKwkJaWYgKCEoY3Ry bCAmIFFNQ19CRF9UWF9VQikpDQo+ICsJCQlnb3RvIGVuZDsNCj4gKw0KPiArCQl4ZmVyX2Rlc2Mg PSAmY2hhbi0+dHhfZGVzY1tiZCAtIGNoYW4tPnR4YmRzXTsNCj4gKwkJY29tcGxldGUgPSB4ZmVy X2Rlc2MtPnR4X2NvbXBsZXRlOw0KPiArCQljb250ZXh0ID0geGZlcl9kZXNjLT5jb250ZXh0Ow0K PiArCQl4ZmVyX2Rlc2MtPnR4X2NvbXBsZXRlID0gTlVMTDsNCj4gKwkJeGZlcl9kZXNjLT5jb250 ZXh0ID0gTlVMTDsNCj4gKw0KPiArCQlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgY3RybCAmIH5R TUNfQkRfVFhfVUIpOw0KPiArDQo+ICsJCWlmIChjdHJsICYgUU1DX0JEX1RYX1cpDQo+ICsJCQlj aGFuLT50eGJkX2RvbmUgPSBjaGFuLT50eGJkczsNCj4gKwkJZWxzZQ0KPiArCQkJY2hhbi0+dHhi ZF9kb25lKys7DQo+ICsNCj4gKwkJaWYgKGNvbXBsZXRlKSB7DQo+ICsJCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7DQo+ICsJCQljb21wbGV0ZShjb250ZXh0 KTsNCj4gKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7DQo+ICsJ CX0NCj4gKw0KPiArCQliZCA9IGNoYW4tPnR4YmRfZG9uZTsNCj4gKwkJY3RybCA9IHFtY19yZWFk MTYoJmJkLT5jYmRfc2MpOw0KPiArCX0NCj4gKw0KPiArZW5kOg0KPiArCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gK30NCj4gKw0KPiAraW50IHFtY19j aGFuX3JlYWRfc3VibWl0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRyLA0K PiBzaXplX3QgbGVuZ3RoLA0KPiArCQkJIHZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCwg c2l6ZV90IGxlbmd0aCksIHZvaWQNCj4gKmNvbnRleHQpDQo+ICt7DQo+ICsJc3RydWN0IHFtY194 ZmVyX2Rlc2MgKnhmZXJfZGVzYzsNCj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCWNiZF90 ICpfX2lvbWVtIGJkOw0KPiArCXUxNiBjdHJsOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwkvKg0K PiArCSAqIEUgYml0ICBVQiBiaXQNCj4gKwkgKiAgIDAgICAgICAgMCAgOiBUaGUgQkQgaXMgZnJl ZQ0KPiArCSAqICAgMSAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZvciB0 cmFuc2Zlcg0KPiArCSAqICAgMCAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5n IGZvciBjb21wbGV0aW9uDQo+ICsJICogICAxICAgICAgIDAgIDogU2hvdWxkIG5vdCBhcHBlbmQN Cj4gKwkgKi8NCj4gKw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFn cyk7DQo+ICsJYmQgPSBjaGFuLT5yeGJkX2ZyZWU7DQo+ICsNCj4gKwljdHJsID0gcW1jX3JlYWQx NigmYmQtPmNiZF9zYyk7DQo+ICsJaWYgKGN0cmwgJiAoUU1DX0JEX1JYX0UgfCBRTUNfQkRfUlhf VUIpKSB7DQo+ICsJCS8qIFdlIGFyZSBmdWxsIC4uLiAqLw0KPiArCQlyZXQgPSAtRUJVU1k7DQo+ ICsJCWdvdG8gZW5kOw0KPiArCX0NCj4gKw0KPiArCXFtY193cml0ZTE2KCZiZC0+Y2JkX2RhdGxl biwgMCk7IC8qIGRhdGEgbGVuZ3RoIGlzIHVwZGF0ZWQgYnkgdGhlDQo+IFFNQyAqLw0KPiArCXFt Y193cml0ZTMyKCZiZC0+Y2JkX2J1ZmFkZHIsIGFkZHIpOw0KPiArDQo+ICsJeGZlcl9kZXNjID0g JmNoYW4tPnJ4X2Rlc2NbYmQgLSBjaGFuLT5yeGJkc107DQo+ICsJeGZlcl9kZXNjLT5yeF9jb21w bGV0ZSA9IGNvbXBsZXRlOw0KPiArCXhmZXJfZGVzYy0+Y29udGV4dCA9IGNvbnRleHQ7DQo+ICsN Cj4gKwkvKiBBY3RpdmF0ZSB0aGUgZGVzY3JpcHRvciAqLw0KPiArCWN0cmwgfD0gKFFNQ19CRF9S WF9FIHwgUU1DX0JEX1JYX1VCKTsNCj4gKwl3bWIoKTsgLyogQmUgc3VyZSB0byBmbHVzaCBkYXRh IGJlZm9yZSBkZXNjcmlwdG9yIGFjdGl2YXRpb24gKi8NCj4gKwlxbWNfd3JpdGUxNigmYmQtPmNi ZF9zYywgY3RybCk7DQo+ICsNCj4gKwkvKiBSZXN0YXJ0IHJlY2VpdmVyIGlmIG5lZWRlZCAqLw0K PiArCWlmIChjaGFuLT5pc19yeF9oYWx0ZWQgJiYgIWNoYW4tPmlzX3J4X3N0b3BwZWQpIHsNCj4g KwkJLyogUmVzdGFydCByZWNlaXZlciAqLw0KPiArCQlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfVFJB TlNQQVJFTlQpDQo+ICsJCQlxbWNfd3JpdGUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNU QVRFLA0KPiAweDE4MDAwMDgwKTsNCj4gKwkJZWxzZQ0KPiArCQkJcW1jX3dyaXRlMzIoY2hhbi0+ c19wYXJhbSArIFFNQ19TUEVfWkRTVEFURSwNCj4gMHgwMDAwMDA4MCk7DQo+ICsJCXFtY193cml0 ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JTVEFURSwNCj4gMHgzMTAwMDAwMCk7DQo+ICsJ CWNoYW4tPmlzX3J4X2hhbHRlZCA9IGZhbHNlOw0KPiArCX0NCj4gKwljaGFuLT5yeF9wZW5kaW5n Kys7DQo+ICsNCj4gKwlpZiAoY3RybCAmIFFNQ19CRF9SWF9XKQ0KPiArCQljaGFuLT5yeGJkX2Zy ZWUgPSBjaGFuLT5yeGJkczsNCj4gKwllbHNlDQo+ICsJCWNoYW4tPnJ4YmRfZnJlZSsrOw0KPiAr DQo+ICsJcmV0ID0gMDsNCj4gK2VuZDoNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFu LT5yeF9sb2NrLCBmbGFncyk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gK0VYUE9SVF9TWU1C T0wocW1jX2NoYW5fcmVhZF9zdWJtaXQpOw0KPiArDQo+ICtzdGF0aWMgdm9pZCBxbWNfY2hhbl9y ZWFkX2RvbmUoc3RydWN0IHFtY19jaGFuICpjaGFuKQ0KPiArew0KPiArCXZvaWQgKCpjb21wbGV0 ZSkodm9pZCAqY29udGV4dCwgc2l6ZV90IHNpemUpOw0KPiArCXN0cnVjdCBxbWNfeGZlcl9kZXNj ICp4ZmVyX2Rlc2M7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwljYmRfdCAqX19pb21l bSBiZDsNCj4gKwl2b2lkICpjb250ZXh0Ow0KPiArCXUxNiBkYXRhbGVuOw0KPiArCXUxNiBjdHJs Ow0KPiArDQo+ICsJLyoNCj4gKwkgKiBFIGJpdCAgVUIgYml0DQo+ICsJICogICAwICAgICAgIDAg IDogVGhlIEJEIGlzIGZyZWUNCj4gKwkgKiAgIDEgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNl ZCwgd2FpdGluZyBmb3IgdHJhbnNmZXINCj4gKwkgKiAgIDAgICAgICAgMSAgOiBUaGUgQkQgaXMg aW4gdXNlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbg0KPiArCSAqICAgMSAgICAgICAwICA6IFNo b3VsZCBub3QgYXBwZW5kDQo+ICsJICovDQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hh bi0+cnhfbG9jaywgZmxhZ3MpOw0KPiArCWJkID0gY2hhbi0+cnhiZF9kb25lOw0KPiArDQo+ICsJ Y3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2MpOw0KPiArCXdoaWxlICghKGN0cmwgJiBRTUNf QkRfUlhfRSkpIHsNCj4gKwkJaWYgKCEoY3RybCAmIFFNQ19CRF9SWF9VQikpDQo+ICsJCQlnb3Rv IGVuZDsNCj4gKw0KPiArCQl4ZmVyX2Rlc2MgPSAmY2hhbi0+cnhfZGVzY1tiZCAtIGNoYW4tPnJ4 YmRzXTsNCj4gKwkJY29tcGxldGUgPSB4ZmVyX2Rlc2MtPnJ4X2NvbXBsZXRlOw0KPiArCQljb250 ZXh0ID0geGZlcl9kZXNjLT5jb250ZXh0Ow0KPiArCQl4ZmVyX2Rlc2MtPnJ4X2NvbXBsZXRlID0g TlVMTDsNCj4gKwkJeGZlcl9kZXNjLT5jb250ZXh0ID0gTlVMTDsNCj4gKw0KPiArCQlkYXRhbGVu ID0gcW1jX3JlYWQxNigmYmQtPmNiZF9kYXRsZW4pOw0KPiArCQlxbWNfd3JpdGUxNigmYmQtPmNi ZF9zYywgY3RybCAmIH5RTUNfQkRfUlhfVUIpOw0KPiArDQo+ICsJCWlmIChjdHJsICYgUU1DX0JE X1JYX1cpDQo+ICsJCQljaGFuLT5yeGJkX2RvbmUgPSBjaGFuLT5yeGJkczsNCj4gKwkJZWxzZQ0K PiArCQkJY2hhbi0+cnhiZF9kb25lKys7DQo+ICsNCj4gKwkJY2hhbi0+cnhfcGVuZGluZy0tOw0K PiArDQo+ICsJCWlmIChjb21wbGV0ZSkgew0KPiArCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm Y2hhbi0+cnhfbG9jaywgZmxhZ3MpOw0KPiArCQkJY29tcGxldGUoY29udGV4dCwgZGF0YWxlbik7 DQo+ICsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOw0KPiArCQl9 DQo+ICsNCj4gKwkJYmQgPSBjaGFuLT5yeGJkX2RvbmU7DQo+ICsJCWN0cmwgPSBxbWNfcmVhZDE2 KCZiZC0+Y2JkX3NjKTsNCj4gKwl9DQo+ICsNCj4gK2VuZDoNCj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg cW1jX2NoYW5fY29tbWFuZChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIHU4IHFtY19vcGNvZGUpDQo+ ICt7DQo+ICsJcmV0dXJuIGNwbV9jb21tYW5kKGNoYW4tPmlkIDw8IDIsIChxbWNfb3Bjb2RlIDw8 IDQpIHwgMHgwRSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX2NoYW5fc3RvcF9yeChz dHJ1Y3QgcW1jX2NoYW4gKmNoYW4pDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4g KwlpbnQgcmV0Ow0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZs YWdzKTsNCj4gKw0KPiArCS8qIFNlbmQgU1RPUCBSRUNFSVZFIGNvbW1hbmQgKi8NCj4gKwlyZXQg PSBxbWNfY2hhbl9jb21tYW5kKGNoYW4sIDB4MCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZf ZXJyKGNoYW4tPnFtYy0+ZGV2LCAiY2hhbiAldTogU2VuZCBTVE9QIFJFQ0VJVkUNCj4gZmFpbGVk ICglZClcbiIsDQo+ICsJCQljaGFuLT5pZCwgcmV0KTsNCj4gKwkJZ290byBlbmQ7DQo+ICsJfQ0K PiArDQo+ICsJY2hhbi0+aXNfcnhfc3RvcHBlZCA9IHRydWU7DQo+ICsNCj4gK2VuZDoNCj4gKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICsJcmV0dXJu IHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfY2hhbl9zdG9wX3R4KHN0cnVjdCBx bWNfY2hhbiAqY2hhbikNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCWludCBy ZXQ7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOw0K PiArDQo+ICsJLyogU2VuZCBTVE9QIFRSQU5TTUlUIGNvbW1hbmQgKi8NCj4gKwlyZXQgPSBxbWNf Y2hhbl9jb21tYW5kKGNoYW4sIDB4MSk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKGNo YW4tPnFtYy0+ZGV2LCAiY2hhbiAldTogU2VuZCBTVE9QIFRSQU5TTUlUDQo+IGZhaWxlZCAoJWQp XG4iLA0KPiArCQkJY2hhbi0+aWQsIHJldCk7DQo+ICsJCWdvdG8gZW5kOw0KPiArCX0NCj4gKw0K PiArCWNoYW4tPmlzX3R4X3N0b3BwZWQgPSB0cnVlOw0KPiArDQo+ICtlbmQ6DQo+ICsJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOw0KPiArCXJldHVybiByZXQ7 DQo+ICt9DQo+ICsNCj4gK2ludCBxbWNfY2hhbl9zdG9wKHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwg aW50IGRpcmVjdGlvbikNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJaWYgKGRpcmVjdGlv biAmIFFNQ19DSEFOX1JFQUQpIHsNCj4gKwkJcmV0ID0gcW1jX2NoYW5fc3RvcF9yeChjaGFuKTsN Cj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGRp cmVjdGlvbiAmIFFNQ19DSEFOX1dSSVRFKSB7DQo+ICsJCXJldCA9IHFtY19jaGFuX3N0b3BfdHgo Y2hhbik7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChxbWNfY2hhbl9zdG9wKTsNCj4gKw0K PiArc3RhdGljIHZvaWQgcW1jX2NoYW5fc3RhcnRfcngoc3RydWN0IHFtY19jaGFuICpjaGFuKQ0K PiArew0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2 ZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJLyogUmVzdGFydCB0aGUgcmVjZWl2 ZXIgKi8NCj4gKwlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfVFJBTlNQQVJFTlQpDQo+ICsJCXFtY193 cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1pEU1RBVEUsDQo+IDB4MTgwMDAwODApOw0K PiArCWVsc2UNCj4gKwkJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFU RSwNCj4gMHgwMDAwMDA4MCk7DQo+ICsJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19T UEVfUlNUQVRFLCAweDMxMDAwMDAwKTsNCj4gKwljaGFuLT5pc19yeF9oYWx0ZWQgPSBmYWxzZTsN Cj4gKw0KPiArCWNoYW4tPmlzX3J4X3N0b3BwZWQgPSBmYWxzZTsNCj4gKw0KPiArCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgcW1jX2NoYW5fc3RhcnRfdHgoc3RydWN0IHFtY19jaGFuICpjaGFuKQ0KPiArew0K PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hh bi0+dHhfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBFbmFibGUgY2hhbm5lbCB0 cmFuc21pdHRlciBhcyBpdCBjb3VsZCBiZSBkaXNhYmxlZCBpZg0KPiArCSAqIHFtY19jaGFuX3Jl c2V0KCkgd2FzIGNhbGxlZC4NCj4gKwkgKi8NCj4gKwlxbWNfc2V0Yml0czE2KGNoYW4tPnNfcGFy YW0gKyBRTUNfU1BFX0NIQU1SLA0KPiBRTUNfU1BFX0NIQU1SX0VOVCk7DQo+ICsNCj4gKwkvKiBT ZXQgdGhlIFBPTCBiaXQgaW4gdGhlIGNoYW5uZWwgbW9kZSByZWdpc3RlciAqLw0KPiArCXFtY19z ZXRiaXRzMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsDQo+IFFNQ19TUEVfQ0hBTVJf UE9MKTsNCj4gKw0KPiArCWNoYW4tPmlzX3R4X3N0b3BwZWQgPSBmYWxzZTsNCj4gKw0KPiArCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gK30NCj4gKw0K PiAraW50IHFtY19jaGFuX3N0YXJ0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgaW50IGRpcmVjdGlv bikNCj4gK3sNCj4gKwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fUkVBRCkNCj4gKwkJcW1jX2No YW5fc3RhcnRfcngoY2hhbik7DQo+ICsNCj4gKwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fV1JJ VEUpDQo+ICsJCXFtY19jaGFuX3N0YXJ0X3R4KGNoYW4pOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+ICtFWFBPUlRfU1lNQk9MKHFtY19jaGFuX3N0YXJ0KTsNCj4gKw0KPiArc3RhdGljIHZv aWQgcW1jX2NoYW5fcmVzZXRfcngoc3RydWN0IHFtY19jaGFuICpjaGFuKQ0KPiArew0KPiArCXN0 cnVjdCBxbWNfeGZlcl9kZXNjICp4ZmVyX2Rlc2M7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsN Cj4gKwljYmRfdCAqX19pb21lbSBiZDsNCj4gKwl1MTYgY3RybDsNCj4gKw0KPiArCXNwaW5fbG9j a19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7DQo+ICsJYmQgPSBjaGFuLT5yeGJkczsN Cj4gKwlkbyB7DQo+ICsJCWN0cmwgPSBxbWNfcmVhZDE2KCZiZC0+Y2JkX3NjKTsNCj4gKwkJcW1j X3dyaXRlMTYoJmJkLT5jYmRfc2MsIGN0cmwgJiB+KFFNQ19CRF9SWF9VQiB8DQo+IFFNQ19CRF9S WF9FKSk7DQo+ICsNCj4gKwkJeGZlcl9kZXNjID0gJmNoYW4tPnJ4X2Rlc2NbYmQgLSBjaGFuLT5y eGJkc107DQo+ICsJCXhmZXJfZGVzYy0+cnhfY29tcGxldGUgPSBOVUxMOw0KPiArCQl4ZmVyX2Rl c2MtPmNvbnRleHQgPSBOVUxMOw0KPiArDQo+ICsJCWJkKys7DQo+ICsJfSB3aGlsZSAoIShjdHJs ICYgUU1DX0JEX1JYX1cpKTsNCj4gKw0KPiArCWNoYW4tPnJ4YmRfZnJlZSA9IGNoYW4tPnJ4YmRz Ow0KPiArCWNoYW4tPnJ4YmRfZG9uZSA9IGNoYW4tPnJ4YmRzOw0KPiArCXFtY193cml0ZTE2KGNo YW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JCUFRSLA0KPiArCQkgICAgcW1jX3JlYWQxNihjaGFuLT5z X3BhcmFtICsgUU1DX1NQRV9SQkFTRSkpOw0KPiArDQo+ICsJY2hhbi0+cnhfcGVuZGluZyA9IDA7 DQo+ICsJY2hhbi0+aXNfcnhfc3RvcHBlZCA9IGZhbHNlOw0KPiArDQo+ICsJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBxbWNfY2hhbl9yZXNldF90eChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pDQo+ICt7DQo+ICsJ c3RydWN0IHFtY194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsNCj4gKwl1bnNpZ25lZCBsb25nIGZsYWdz Ow0KPiArCWNiZF90ICpfX2lvbWVtIGJkOw0KPiArCXUxNiBjdHJsOw0KPiArDQo+ICsJc3Bpbl9s b2NrX2lycXNhdmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsNCj4gKw0KPiArCS8qIERpc2FibGUg dHJhbnNtaXR0ZXIuIEl0IHdpbGwgYmUgcmUtZW5hYmxlIG9uIHFtY19jaGFuX3N0YXJ0KCkgKi8N Cj4gKwlxbWNfY2xyYml0czE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX0NIQU1SLA0KPiBRTUNf U1BFX0NIQU1SX0VOVCk7DQo+ICsNCj4gKwliZCA9IGNoYW4tPnR4YmRzOw0KPiArCWRvIHsNCj4g KwkJY3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2MpOw0KPiArCQlxbWNfd3JpdGUxNigmYmQt PmNiZF9zYywgY3RybCAmIH4oUU1DX0JEX1RYX1VCIHwNCj4gUU1DX0JEX1RYX1IpKTsNCj4gKw0K PiArCQl4ZmVyX2Rlc2MgPSAmY2hhbi0+dHhfZGVzY1tiZCAtIGNoYW4tPnR4YmRzXTsNCj4gKwkJ eGZlcl9kZXNjLT50eF9jb21wbGV0ZSA9IE5VTEw7DQo+ICsJCXhmZXJfZGVzYy0+Y29udGV4dCA9 IE5VTEw7DQo+ICsNCj4gKwkJYmQrKzsNCj4gKwl9IHdoaWxlICghKGN0cmwgJiBRTUNfQkRfVFhf VykpOw0KPiArDQo+ICsJY2hhbi0+dHhiZF9mcmVlID0gY2hhbi0+dHhiZHM7DQo+ICsJY2hhbi0+ dHhiZF9kb25lID0gY2hhbi0+dHhiZHM7DQo+ICsJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSAr IFFNQ19TUEVfVEJQVFIsDQo+ICsJCSAgICBxbWNfcmVhZDE2KGNoYW4tPnNfcGFyYW0gKyBRTUNf U1BFX1RCQVNFKSk7DQo+ICsNCj4gKwkvKiBSZXNldCBUU1RBVEUgYW5kIFpJU1RBVEUgdG8gdGhl aXIgaW5pdGlhbCB2YWx1ZSAqLw0KPiArCXFtY193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNf U1BFX1RTVEFURSwgMHgzMDAwMDAwMCk7DQo+ICsJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSAr IFFNQ19TUEVfWklTVEFURSwgMHgwMDAwMDEwMCk7DQo+ICsNCj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7DQo+ICt9DQo+ICsNCj4gK2ludCBxbWNfY2hh bl9yZXNldChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGludCBkaXJlY3Rpb24pDQo+ICt7DQo+ICsJ aWYgKGRpcmVjdGlvbiAmIFFNQ19DSEFOX1JFQUQpDQo+ICsJCXFtY19jaGFuX3Jlc2V0X3J4KGNo YW4pOw0KPiArDQo+ICsJaWYgKGRpcmVjdGlvbiAmIFFNQ19DSEFOX1dSSVRFKQ0KPiArCQlxbWNf Y2hhbl9yZXNldF90eChjaGFuKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQT1JU X1NZTUJPTChxbWNfY2hhbl9yZXNldCk7DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX2NoZWNrX2No YW5zKHN0cnVjdCBxbWMgKnFtYykNCj4gK3sNCj4gKwlzdHJ1Y3QgdHNhX3NlcmlhbF9pbmZvIGlu Zm87DQo+ICsJYm9vbCBpc19vbmVfdGFibGUgPSBmYWxzZTsNCj4gKwlzdHJ1Y3QgcW1jX2NoYW4g KmNoYW47DQo+ICsJdTY0IHR4X3RzX21hc2sgPSAwOw0KPiArCXU2NCByeF90c19tYXNrID0gMDsN Cj4gKwl1NjQgdHhfdHNfYXNzaWduZWRfbWFzazsNCj4gKwl1NjQgcnhfdHNfYXNzaWduZWRfbWFz azsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJLyogUmV0cmlldmUgaW5mbyBmcm9tIHRoZSBUU0Eg cmVsYXRlZCBzZXJpYWwgKi8NCj4gKwlyZXQgPSB0c2Ffc2VyaWFsX2dldF9pbmZvKHFtYy0+dHNh X3NlcmlhbCwgJmluZm8pOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4g KwkvKg0KPiArCSAqIElmIG1vcmUgdGhhbiAzMiBUUyBhcmUgYXNzaWduZWQgdG8gdGhpcyBzZXJp YWwsIG9uZSBjb21tb24gdGFibGUgaXMNCj4gKwkgKiB1c2VkIGZvciBUeCBhbmQgUnggYW5kIHNv IG1hc2tzIG11c3QgYmUgZXF1YWwgZm9yIGFsbCBjaGFubmVscy4NCj4gKwkgKi8NCj4gKwlpZiAo KGluZm8ubmJfdHhfdHMgPiAzMikgfHwgKGluZm8ubmJfcnhfdHMgPiAzMikpIHsNCj4gKwkJaWYg KGluZm8ubmJfdHhfdHMgIT0gaW5mby5uYl9yeF90cykgew0KPiArCQkJZGV2X2VycihxbWMtPmRl diwgIk51bWJlciBvZiBUU0EgVHgvUnggVFMNCj4gYXNzaWduZWQgYXJlIG5vdCBlcXVhbFxuIik7 DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArCQlpc19vbmVfdGFibGUgPSB0cnVl Ow0KPiArCX0NCj4gKw0KPiArDQo+ICsJdHhfdHNfYXNzaWduZWRfbWFzayA9ICgoKHU2NCkxKSA8 PCBpbmZvLm5iX3R4X3RzKSAtIDE7DQo+ICsJcnhfdHNfYXNzaWduZWRfbWFzayA9ICgoKHU2NCkx KSA8PCBpbmZvLm5iX3J4X3RzKSAtIDE7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNo YW4sICZxbWMtPmNoYW5faGVhZCwgbGlzdCkgew0KPiArCQlpZiAoY2hhbi0+dHhfdHNfbWFzayA+ IHR4X3RzX2Fzc2lnbmVkX21hc2spIHsNCj4gKwkJCWRldl9lcnIocW1jLT5kZXYsICJjaGFuICV1 IHVzZXMgVFNBIHVuYXNzaWduZWQgVHgNCj4gVFNcbiIsIGNoYW4tPmlkKTsNCj4gKwkJCXJldHVy biAtRUlOVkFMOw0KPiArCQl9DQo+ICsJCWlmICh0eF90c19tYXNrICYgY2hhbi0+dHhfdHNfbWFz aykgew0KPiArCQkJZGV2X2VycihxbWMtPmRldiwgImNoYW4gJXUgdXNlcyBhbiBhbHJlYWR5IHVz ZWQNCj4gVHggVFNcbiIsIGNoYW4tPmlkKTsNCj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiArCQl9 DQo+ICsNCj4gKwkJaWYgKGNoYW4tPnJ4X3RzX21hc2sgPiByeF90c19hc3NpZ25lZF9tYXNrKSB7 DQo+ICsJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiY2hhbiAldSB1c2VzIFRTQSB1bmFzc2lnbmVkDQo+ IFJ4IFRTXG4iLCBjaGFuLT5pZCk7DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiAr CQlpZiAocnhfdHNfbWFzayAmIGNoYW4tPnJ4X3RzX21hc2spIHsNCj4gKwkJCWRldl9lcnIocW1j LT5kZXYsICJjaGFuICV1IHVzZXMgYW4gYWxyZWFkeSB1c2VkDQo+IFJ4IFRTXG4iLCBjaGFuLT5p ZCk7DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmIChpc19vbmVf dGFibGUgJiYgKGNoYW4tPnR4X3RzX21hc2sgIT0gY2hhbi0NCj4gPnJ4X3RzX21hc2spKSB7DQo+ ICsJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiY2hhbiAldSB1c2VzIGRpZmZlcmVudCBSeCBhbmQNCj4g VHggVFNcbiIsIGNoYW4tPmlkKTsNCj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiArCQl9DQo+ICsN Cj4gKwkJdHhfdHNfbWFzayB8PSBjaGFuLT50eF90c19tYXNrOw0KPiArCQlyeF90c19tYXNrIHw9 IGNoYW4tPnJ4X3RzX21hc2s7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgcW1jX25iX2NoYW5zKHN0cnVjdCBxbWMgKnFtYykNCj4g K3sNCj4gKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOw0KPiArCXN0cnVjdCBxbWNfY2hhbiAqY2hh bjsNCj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBs aXN0KQ0KPiArCQljb3VudCsrOw0KPiArDQo+ICsJcmV0dXJuIGNvdW50Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IHFtY19vZl9wYXJzZV9jaGFucyhzdHJ1Y3QgcW1jICpxbWMsIHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnApDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZV9ub2RlICpjaGFuX25wOw0K PiArCXN0cnVjdCBxbWNfY2hhbiAqY2hhbjsNCj4gKwljb25zdCBjaGFyICptb2RlOw0KPiArCXUz MiBjaGFuX2lkOw0KPiArCXU2NCB0c19tYXNrOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlmb3Jf ZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hhbl9ucCkgew0KPiArCQlyZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihjaGFuX25wLCAicmVnIiwgJmNoYW5faWQpOw0KPiArCQlpZiAo cmV0KSB7DQo+ICsJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiJXBPRjogZmFpbGVkIHRvIHJlYWQgcmVn XG4iLA0KPiBjaGFuX25wKTsNCj4gKwkJCW9mX25vZGVfcHV0KGNoYW5fbnApOw0KPiArCQkJcmV0 dXJuIHJldDsNCj4gKwkJfQ0KPiArCQlpZiAoY2hhbl9pZCA+IDYzKSB7DQo+ICsJCQlkZXZfZXJy KHFtYy0+ZGV2LCAiJXBPRjogSW52YWxpZCBjaGFuX2lkXG4iLA0KPiBjaGFuX25wKTsNCj4gKwkJ CW9mX25vZGVfcHV0KGNoYW5fbnApOw0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCX0NCj4g Kw0KPiArCQljaGFuID0gZGV2bV9remFsbG9jKHFtYy0+ZGV2LCBzaXplb2YoKmNoYW4pLCBHRlBf S0VSTkVMKTsNCj4gKwkJaWYgKCFjaGFuKSB7DQo+ICsJCQlvZl9ub2RlX3B1dChjaGFuX25wKTsN Cj4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiArCQl9DQo+ICsNCj4gKwkJY2hhbi0+aWQgPSBjaGFu X2lkOw0KPiArCQlzcGluX2xvY2tfaW5pdCgmY2hhbi0+cnhfbG9jayk7DQo+ICsJCXNwaW5fbG9j a19pbml0KCZjaGFuLT50eF9sb2NrKTsNCj4gKw0KPiArCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFk X3U2NChjaGFuX25wLCAiZnNsLHR4LXRzLW1hc2siLA0KPiAmdHNfbWFzayk7DQo+ICsJCWlmIChy ZXQpIHsNCj4gKwkJCWRldl9lcnIocW1jLT5kZXYsICIlcE9GOiBmYWlsZWQgdG8gcmVhZCBmc2ws dHgtdHMtDQo+IG1hc2tcbiIsDQo+ICsJCQkJY2hhbl9ucCk7DQo+ICsJCQlvZl9ub2RlX3B1dChj aGFuX25wKTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwkJY2hhbi0+dHhfdHNfbWFz ayA9IHRzX21hc2s7DQo+ICsNCj4gKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91NjQoY2hhbl9u cCwgImZzbCxyeC10cy1tYXNrIiwNCj4gJnRzX21hc2spOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJ CQlkZXZfZXJyKHFtYy0+ZGV2LCAiJXBPRjogZmFpbGVkIHRvIHJlYWQgZnNsLHJ4LXRzLQ0KPiBt YXNrXG4iLA0KPiArCQkJCWNoYW5fbnApOw0KPiArCQkJb2Zfbm9kZV9wdXQoY2hhbl9ucCk7DQo+ ICsJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsJCWNoYW4tPnJ4X3RzX21hc2sgPSB0c19tYXNr Ow0KPiArDQo+ICsJCW1vZGUgPSAidHJhbnNwYXJlbnQiOw0KPiArCQlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3N0cmluZyhjaGFuX25wLCAiZnNsLG9wZXJhdGlvbmFsLQ0KPiBtb2RlIiwgJm1vZGUp Ow0KPiArCQlpZiAocmV0ICYmIHJldCAhPSAtRUlOVkFMKSB7DQo+ICsJCQlkZXZfZXJyKHFtYy0+ ZGV2LCAiJXBPRjogZmFpbGVkIHRvIHJlYWQNCj4gZnNsLG9wZXJhdGlvbmFsLW1vZGVcbiIsDQo+ ICsJCQkJY2hhbl9ucCk7DQo+ICsJCQlvZl9ub2RlX3B1dChjaGFuX25wKTsNCj4gKwkJCXJldHVy biByZXQ7DQo+ICsJCX0NCj4gKwkJaWYgKCFzdHJjbXAobW9kZSwgInRyYW5zcGFyZW50IikpIHsN Cj4gKwkJCWNoYW4tPm1vZGUgPSBRTUNfVFJBTlNQQVJFTlQ7DQo+ICsJCX0gZWxzZSBpZiAoIXN0 cmNtcChtb2RlLCAiaGRsYyIpKSB7DQo+ICsJCQljaGFuLT5tb2RlID0gUU1DX0hETEM7DQo+ICsJ CX0gZWxzZSB7DQo+ICsJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiJXBPRjogSW52YWxpZCBmc2wsb3Bl cmF0aW9uYWwtDQo+IG1vZGUgKCVzKVxuIiwNCj4gKwkJCQljaGFuX25wLCBtb2RlKTsNCj4gKwkJ CW9mX25vZGVfcHV0KGNoYW5fbnApOw0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCX0NCj4g Kw0KPiArCQljaGFuLT5pc19yZXZlcnNlX2RhdGEgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hh bl9ucCwNCj4gKwkJCQkJCQkgICAgICAiZnNsLHJldmVyc2UtZGF0YSIpOw0KPiArDQo+ICsJCWxp c3RfYWRkX3RhaWwoJmNoYW4tPmxpc3QsICZxbWMtPmNoYW5faGVhZCk7DQo+ICsJCXFtYy0+Y2hh bnNbY2hhbi0+aWRdID0gY2hhbjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcW1jX2NoZWNrX2No YW5zKHFtYyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX3NldHVwX3RzYV82NHJ4dHgo c3RydWN0IHFtYyAqcW1jLCBjb25zdCBzdHJ1Y3QNCj4gdHNhX3NlcmlhbF9pbmZvICppbmZvKQ0K PiArew0KPiArCXN0cnVjdCBxbWNfY2hhbiAqY2hhbjsNCj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4g Kwl1MTYgdmFsOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBVc2UgYSBjb21tb24gVHgvUnggNjQgZW50 cmllcyB0YWJsZS4NCj4gKwkgKiBFdmVyeXRoaW5nIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQsIFR4 IGFuZCBSeCByZWxhdGVkIHN0dWZmcyBhcmUNCj4gKwkgKiBpZGVudGljYWwgLT4gVXNlZCBSeCBy ZWxhdGVkIHN0dWZmIHRvIGJ1aWxkIHRoZSB0YWJsZQ0KPiArCSAqLw0KPiArDQo+ICsJLyogSW52 YWxpZGF0ZSBhbGwgZW50cmllcyAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQ0KPiAr CQlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoaSAqIDIpLA0K PiAweDAwMDApOw0KPiArDQo+ICsJLyogU2V0IGVudHJpZXMgYmFzZWQgb24gUnggc3R1ZmYqLw0K PiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7DQo+ ICsJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYl9yeF90czsgaSsrKSB7DQo+ICsJCQlpZiAoIShj aGFuLT5yeF90c19tYXNrICYgKCgodTY0KTEpIDw8IGkpKSkNCj4gKwkJCQljb250aW51ZTsNCj4g Kw0KPiArCQkJdmFsID0gUU1DX1RTQV9WQUxJRCB8IFFNQ19UU0FfTUFTSyB8DQo+ICsJCQkgICAg ICBRTUNfVFNBX0NIQU5ORUwoY2hhbi0+aWQpOw0KPiArCQkJcW1jX3dyaXRlMTYocW1jLT5zY2Nf cHJhbSArIFFNQ19HQkxfVFNBVFJYICsNCj4gKGkgKiAyKSwgdmFsKTsNCj4gKwkJfQ0KPiArCX0N Cj4gKw0KPiArCS8qIFNldCBXcmFwIGJpdCBvbiBsYXN0IGVudHJ5ICovDQo+ICsJcW1jX3NldGJp dHMxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoKGluZm8tDQo+ID5uYl9yeF90 cyAtIDEpICogMiksDQo+ICsJCSAgICAgIFFNQ19UU0FfV1JBUCk7DQo+ICsNCj4gKwkvKiBJbml0 IHBvaW50ZXJzIHRvIHRoZSB0YWJsZSAqLw0KPiArCXZhbCA9IHFtYy0+c2NjX3ByYW1fb2Zmc2V0 ICsgUU1DX0dCTF9UU0FUUlg7DQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19H QkxfUlhfU19QVFIsIHZhbCk7DQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19H QkxfUlhQVFIsIHZhbCk7DQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxf VFhfU19QVFIsIHZhbCk7DQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxf VFhQVFIsIHZhbCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBxbWNfc2V0dXBfdHNhXzMycnhfMzJ0eChzdHJ1Y3QgcW1jICpxbWMsIGNvbnN0IHN0cnVjdA0K PiB0c2Ffc2VyaWFsX2luZm8gKmluZm8pDQo+ICt7DQo+ICsJc3RydWN0IHFtY19jaGFuICpjaGFu Ow0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArCXUxNiB2YWw7DQo+ICsNCj4gKwkvKg0KPiArCSAq IFVzZSBhIFR4IDMyIGVudHJpZXMgdGFibGUgYW5kIGEgUnggMzIgZW50cmllcyB0YWJsZS4NCj4g KwkgKiBFdmVyeXRoaW5nIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQuDQo+ICsJICovDQo+ICsNCj4g KwkvKiBJbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IDMyOyBp KyspIHsNCj4gKwkJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFJYICsg KGkgKiAyKSwNCj4gMHgwMDAwKTsNCj4gKwkJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFN Q19HQkxfVFNBVFRYICsgKGkgKiAyKSwNCj4gMHgwMDAwKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBT ZXQgZW50cmllcyBiYXNlZCBvbiBSeCBhbmQgVHggc3R1ZmYqLw0KPiArCWxpc3RfZm9yX2VhY2hf ZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7DQo+ICsJCS8qIFJ4IHBhcnQgKi8N Cj4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5iX3J4X3RzOyBpKyspIHsNCj4gKwkJCWlmICgh KGNoYW4tPnJ4X3RzX21hc2sgJiAoKCh1NjQpMSkgPDwgaSkpKQ0KPiArCQkJCWNvbnRpbnVlOw0K PiArDQo+ICsJCQl2YWwgPSBRTUNfVFNBX1ZBTElEIHwgUU1DX1RTQV9NQVNLIHwNCj4gKwkJCSAg ICAgIFFNQ19UU0FfQ0hBTk5FTChjaGFuLT5pZCk7DQo+ICsJCQlxbWNfd3JpdGUxNihxbWMtPnNj Y19wcmFtICsgUU1DX0dCTF9UU0FUUlggKw0KPiAoaSAqIDIpLCB2YWwpOw0KPiArCQl9DQo+ICsJ CS8qIFR4IHBhcnQgKi8NCj4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5iX3R4X3RzOyBpKysp IHsNCj4gKwkJCWlmICghKGNoYW4tPnR4X3RzX21hc2sgJiAoKCh1NjQpMSkgPDwgaSkpKQ0KPiAr CQkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCQl2YWwgPSBRTUNfVFNBX1ZBTElEIHwgUU1DX1RTQV9N QVNLIHwNCj4gKwkJCSAgICAgIFFNQ19UU0FfQ0hBTk5FTChjaGFuLT5pZCk7DQo+ICsJCQlxbWNf d3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUVFggKw0KPiAoaSAqIDIpLCB2YWwp Ow0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJLyogU2V0IFdyYXAgYml0IG9uIGxhc3QgZW50cmll cyAqLw0KPiArCXFtY19zZXRiaXRzMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFJYICsg KChpbmZvLQ0KPiA+bmJfcnhfdHMgLSAxKSAqIDIpLA0KPiArCQkgICAgICBRTUNfVFNBX1dSQVAp Ow0KPiArCXFtY19zZXRiaXRzMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFRYICsgKChp bmZvLQ0KPiA+bmJfdHhfdHMgLSAxKSAqIDIpLA0KPiArCQkgICAgICBRTUNfVFNBX1dSQVApOw0K PiArDQo+ICsJLyogSW5pdCBSeCBwb2ludGVycyAuLi4qLw0KPiArCXZhbCA9IHFtYy0+c2NjX3By YW1fb2Zmc2V0ICsgUU1DX0dCTF9UU0FUUlg7DQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJh bSArIFFNQ19HQkxfUlhfU19QVFIsIHZhbCk7DQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJh bSArIFFNQ19HQkxfUlhQVFIsIHZhbCk7DQo+ICsNCj4gKwkvKiAuLi4gYW5kIFR4IHBvaW50ZXJz ICovDQo+ICsJdmFsID0gcW1jLT5zY2NfcHJhbV9vZmZzZXQgKyBRTUNfR0JMX1RTQVRUWDsNCj4g KwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UWF9TX1BUUiwgdmFsKTsNCj4g KwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UWFBUUiwgdmFsKTsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19zZXR1cF90c2Eoc3Ry dWN0IHFtYyAqcW1jKQ0KPiArew0KPiArCXN0cnVjdCB0c2Ffc2VyaWFsX2luZm8gaW5mbzsNCj4g KwlpbnQgcmV0Ow0KPiArDQo+ICsJLyogUmV0cmlldmUgaW5mbyBmcm9tIHRoZSBUU0EgcmVsYXRl ZCBzZXJpYWwgKi8NCj4gKwlyZXQgPSB0c2Ffc2VyaWFsX2dldF9pbmZvKHFtYy0+dHNhX3Nlcmlh bCwgJmluZm8pOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkvKg0K PiArCSAqIFNldHVwIG9uZSBjb21tb24gNjQgZW50cmllcyB0YWJsZSBvciB0d28gMzIgZW50cmll cyAob25lIGZvciBUeA0KPiBhbmQNCj4gKwkgKiBvbmUgZm9yIFR4KSBhY2NvcmRpbmcgdG8gYXNz aWduZWQgVFMgbnVtYmVycy4NCj4gKwkgKi8NCj4gKwlyZXR1cm4gKChpbmZvLm5iX3R4X3RzID4g MzIpIHx8IChpbmZvLm5iX3J4X3RzID4gMzIpKSA/DQo+ICsJCXFtY19zZXR1cF90c2FfNjRyeHR4 KHFtYywgJmluZm8pIDoNCj4gKwkJcW1jX3NldHVwX3RzYV8zMnJ4XzMydHgocW1jLCAmaW5mbyk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX3NldHVwX2NoYW5fdHJuc3luYyhzdHJ1Y3Qg cW1jICpxbWMsIHN0cnVjdCBxbWNfY2hhbg0KPiAqY2hhbikNCj4gK3sNCj4gKwlzdHJ1Y3QgdHNh X3NlcmlhbF9pbmZvIGluZm87DQo+ICsJdTE2IGZpcnN0X3J4LCBsYXN0X3R4Ow0KPiArCXUxNiB0 cm5zeW5jOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwkvKiBSZXRyaWV2ZSBpbmZvIGZyb20gdGhl IFRTQSByZWxhdGVkIHNlcmlhbCAqLw0KPiArCXJldCA9IHRzYV9zZXJpYWxfZ2V0X2luZm8oY2hh bi0+cW1jLT50c2Ffc2VyaWFsLCAmaW5mbyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCS8qIEZpbmQgdGhlIGZpcnN0IFJ4IFRTIGFsbG9jYXRlZCB0byB0aGUgY2hh bm5lbCAqLw0KPiArCWZpcnN0X3J4ID0gY2hhbi0+cnhfdHNfbWFzayA/IF9fZmZzNjQoY2hhbi0+ cnhfdHNfbWFzaykgKyAxIDogMDsNCj4gKw0KPiArCS8qIEZpbmQgdGhlIGxhc3QgVHggVFMgYWxs b2NhdGVkIHRvIHRoZSBjaGFubmVsICovDQo+ICsJbGFzdF90eCA9IGZsczY0KGNoYW4tPnR4X3Rz X21hc2spOw0KPiArDQo+ICsJdHJuc3luYyA9IDA7DQo+ICsJaWYgKGluZm8ubmJfcnhfdHMpDQo+ ICsJCXRybnN5bmMgfD0gUU1DX1NQRV9UUk5TWU5DX1JYKChmaXJzdF9yeCAlIGluZm8ubmJfcnhf dHMpDQo+ICogMik7DQo+ICsJaWYgKGluZm8ubmJfdHhfdHMpDQo+ICsJCXRybnN5bmMgfD0gUU1D X1NQRV9UUk5TWU5DX1RYKChsYXN0X3R4ICUgaW5mby5uYl90eF90cykNCj4gKiAyKTsNCj4gKw0K PiArCXFtY193cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RSTlNZTkMsIHRybnN5bmMp Ow0KPiArDQo+ICsJZGV2X2RiZyhxbWMtPmRldiwgImNoYW4gJXU6IHRybnN5bmM9MHglMDR4LCBy eCAldS8ldSAweCVsbHgsDQo+IHR4ICV1LyV1IDB4JWxseFxuIiwNCj4gKwkJY2hhbi0+aWQsIHRy bnN5bmMsDQo+ICsJCWZpcnN0X3J4LCBpbmZvLm5iX3J4X3RzLCBjaGFuLT5yeF90c19tYXNrLA0K PiArCQlsYXN0X3R4LCBpbmZvLm5iX3R4X3RzLCBjaGFuLT50eF90c19tYXNrKTsNCj4gKw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19zZXR1cF9jaGFuKHN0cnVj dCBxbWMgKnFtYywgc3RydWN0IHFtY19jaGFuICpjaGFuKQ0KPiArew0KPiArCXVuc2lnbmVkIGlu dCBpOw0KPiArCWNiZF90IF9faW9tZW0gKmJkOw0KPiArCWludCByZXQ7DQo+ICsJdTE2IHZhbDsN Cj4gKw0KPiArCWNoYW4tPnFtYyA9IHFtYzsNCj4gKw0KPiArCS8qIFNldCBjaGFubmVsIHNwZWNp ZmljIHBhcmFtZXRlciBiYXNlIGFkZHJlc3MgKi8NCj4gKwljaGFuLT5zX3BhcmFtID0gcW1jLT5k cHJhbSArIChjaGFuLT5pZCAqIDY0KTsNCj4gKwkvKiAxNiBiZCBwZXIgY2hhbm5lbCAoOCByeCBh bmQgOCB0eCkgKi8NCj4gKwljaGFuLT50eGJkcyA9IHFtYy0+YmRfdGFibGUgKyAoY2hhbi0+aWQg KiAoUU1DX05CX1RYQkRTICsNCj4gUU1DX05CX1JYQkRTKSk7DQo+ICsJY2hhbi0+cnhiZHMgPSBx bWMtPmJkX3RhYmxlICsgKGNoYW4tPmlkICogKFFNQ19OQl9UWEJEUyArDQo+IFFNQ19OQl9SWEJE UykpICsgUU1DX05CX1RYQkRTOw0KPiArDQo+ICsJY2hhbi0+dHhiZF9mcmVlID0gY2hhbi0+dHhi ZHM7DQo+ICsJY2hhbi0+dHhiZF9kb25lID0gY2hhbi0+dHhiZHM7DQo+ICsJY2hhbi0+cnhiZF9m cmVlID0gY2hhbi0+cnhiZHM7DQo+ICsJY2hhbi0+cnhiZF9kb25lID0gY2hhbi0+cnhiZHM7DQo+ ICsNCj4gKwkvKiBUQkFTRSBhbmQgVEJQVFIqLw0KPiArCXZhbCA9IGNoYW4tPmlkICogKFFNQ19O Ql9UWEJEUyArIFFNQ19OQl9SWEJEUykgKg0KPiBzaXplb2YoY2JkX3QpOw0KPiArCXFtY193cml0 ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RCQVNFLCB2YWwpOw0KPiArCXFtY193cml0ZTE2 KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RCUFRSLCB2YWwpOw0KPiArDQo+ICsJLyogUkJBU0Ug YW5kIFJCUFRSKi8NCj4gKwl2YWwgPSAoKGNoYW4tPmlkICogKFFNQ19OQl9UWEJEUyArIFFNQ19O Ql9SWEJEUykpICsNCj4gUU1DX05CX1RYQkRTKSAqIHNpemVvZihjYmRfdCk7DQo+ICsJcW1jX3dy aXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUkJBU0UsIHZhbCk7DQo+ICsJcW1jX3dyaXRl MTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUkJQVFIsIHZhbCk7DQo+ICsJcW1jX3dyaXRlMzIo Y2hhbi0+c19wYXJhbSArIFFNQ19TUEVfVFNUQVRFLCAweDMwMDAwMDAwKTsNCj4gKwlxbWNfd3Jp dGUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9SU1RBVEUsIDB4MzEwMDAwMDApOw0KPiArCXFt Y193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1pJU1RBVEUsIDB4MDAwMDAxMDApOw0K PiArCWlmIChjaGFuLT5tb2RlID09IFFNQ19UUkFOU1BBUkVOVCkgew0KPiArCQlxbWNfd3JpdGUz MihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLA0KPiAweDE4MDAwMDgwKTsNCj4gKwkJ cW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfVE1SQkxSLCA2MCk7DQo+ICsJCXZh bCA9IFFNQ19TUEVfQ0hBTVJfTU9ERV9UUkFOU1AgfA0KPiBRTUNfU1BFX0NIQU1SX1RSQU5TUF9T WU5DOw0KPiArCQlpZiAoY2hhbi0+aXNfcmV2ZXJzZV9kYXRhKQ0KPiArCQkJdmFsIHw9IFFNQ19T UEVfQ0hBTVJfVFJBTlNQX1JEOw0KPiArCQlxbWNfd3JpdGUxNihjaGFuLT5zX3BhcmFtICsgUU1D X1NQRV9DSEFNUiwgdmFsKTsNCj4gKwkJcmV0ID0gcW1jX3NldHVwX2NoYW5fdHJuc3luYyhxbWMs IGNoYW4pOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwl9IGVsc2Ugew0K PiArCQlxbWNfd3JpdGUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLA0KPiAweDAw MDAwMDgwKTsNCj4gKwkJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfTUZMUiwg NjApOw0KPiArCQlxbWNfd3JpdGUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9DSEFNUiwNCj4g KwkJCVFNQ19TUEVfQ0hBTVJfTU9ERV9IRExDIHwNCj4gUU1DX1NQRV9DSEFNUl9IRExDX0lETE0p Ow0KPiArCX0NCj4gKw0KPiArCS8qIERvIG5vdCBlbmFibGUgaW50ZXJydXB0cyBub3cuIFRoZXkg d2lsbCBiZSBlbmFibGVkIGxhdGVyICovDQo+ICsJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSAr IFFNQ19TUEVfSU5UTVNLLCAweDAwMDApOw0KPiArDQo+ICsJLyogSW5pdCBSeCBCRHMgYW5kIHNl dCBXcmFwIGJpdCBvbiBsYXN0IGRlc2NyaXB0b3IgKi8NCj4gKwlCVUlMRF9CVUdfT04oUU1DX05C X1JYQkRTID09IDApOw0KPiArCXZhbCA9IFFNQ19CRF9SWF9JOw0KPiArCWZvciAoaSA9IDA7IGkg PCBRTUNfTkJfUlhCRFM7IGkrKykgew0KPiArCQliZCA9IGNoYW4tPnJ4YmRzICsgaTsNCj4gKwkJ cW1jX3dyaXRlMTYoJmJkLT5jYmRfc2MsIHZhbCk7DQo+ICsJfQ0KPiArCWJkID0gY2hhbi0+cnhi ZHMgKyBRTUNfTkJfUlhCRFMgLSAxOw0KPiArCXFtY193cml0ZTE2KCZiZC0+Y2JkX3NjLCB2YWwg fCBRTUNfQkRfUlhfVyk7DQo+ICsNCj4gKwkvKiBJbml0IFR4IEJEcyBhbmQgc2V0IFdyYXAgYml0 IG9uIGxhc3QgZGVzY3JpcHRvciAqLw0KPiArCUJVSUxEX0JVR19PTihRTUNfTkJfVFhCRFMgPT0g MCk7DQo+ICsJdmFsID0gUU1DX0JEX1RYX0k7DQo+ICsJaWYgKGNoYW4tPm1vZGUgPT0gUU1DX0hE TEMpDQo+ICsJCXZhbCB8PSBRTUNfQkRfVFhfTCB8IFFNQ19CRF9UWF9UQzsNCj4gKwlmb3IgKGkg PSAwOyBpIDwgUU1DX05CX1RYQkRTOyBpKyspIHsNCj4gKwkJYmQgPSBjaGFuLT50eGJkcyArIGk7 DQo+ICsJCXFtY193cml0ZTE2KCZiZC0+Y2JkX3NjLCB2YWwpOw0KPiArCX0NCj4gKwliZCA9IGNo YW4tPnR4YmRzICsgUU1DX05CX1RYQkRTIC0gMTsNCj4gKwlxbWNfd3JpdGUxNigmYmQtPmNiZF9z YywgdmFsIHwgUU1DX0JEX1RYX1cpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgcW1jX3NldHVwX2NoYW5zKHN0cnVjdCBxbWMgKnFtYykNCj4gK3sNCj4gKwlz dHJ1Y3QgcW1jX2NoYW4gKmNoYW47DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7DQo+ICsJCXJldCA9IHFtY19z ZXR1cF9jaGFuKHFtYywgY2hhbik7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gcmV0Ow0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19m aW5hbGl6ZV9jaGFucyhzdHJ1Y3QgcW1jICpxbWMpDQo+ICt7DQo+ICsJc3RydWN0IHFtY19jaGFu ICpjaGFuOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4s ICZxbWMtPmNoYW5faGVhZCwgbGlzdCkgew0KPiArCQkvKiBVbm1hc2sgY2hhbm5lbCBpbnRlcnJ1 cHRzICovDQo+ICsJCWlmIChjaGFuLT5tb2RlID09IFFNQ19IRExDKSB7DQo+ICsJCQlxbWNfd3Jp dGUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9JTlRNU0ssDQo+ICsJCQkJICAgIFFNQ19JTlRf TklEIHwgUU1DX0lOVF9JREwgfA0KPiBRTUNfSU5UX01SRiB8DQo+ICsJCQkJICAgIFFNQ19JTlRf VU4gfCBRTUNfSU5UX1JYRiB8DQo+IFFNQ19JTlRfQlNZIHwNCj4gKwkJCQkgICAgUU1DX0lOVF9U WEIgfCBRTUNfSU5UX1JYQik7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlxbWNfd3JpdGUxNihjaGFu LT5zX3BhcmFtICsgUU1DX1NQRV9JTlRNU0ssDQo+ICsJCQkJICAgIFFNQ19JTlRfVU4gfCBRTUNf SU5UX0JTWSB8DQo+ICsJCQkJICAgIFFNQ19JTlRfVFhCIHwgUU1DX0lOVF9SWEIpOw0KPiArCQl9 DQo+ICsNCj4gKwkJLyogRm9yY2VkIHN0b3AgdGhlIGNoYW5uZWwgKi8NCj4gKwkJcmV0ID0gcW1j X2NoYW5fc3RvcChjaGFuLCBRTUNfQ0hBTl9BTEwpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJcmV0 dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBxbWNfc2V0dXBfaW50cyhzdHJ1Y3QgcW1jICpxbWMpDQo+ICt7DQo+ICsJdW5zaWduZWQg aW50IGk7DQo+ICsJdTE2IF9faW9tZW0gKmxhc3Q7DQo+ICsNCj4gKwkvKiBSYXogYWxsIGVudHJp ZXMgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgKHFtYy0+aW50X3NpemUgLyBzaXplb2YodTE2KSk7 IGkrKykNCj4gKwkJcW1jX3dyaXRlMTYocW1jLT5pbnRfdGFibGUgKyBpLCAweDAwMDApOw0KPiAr DQo+ICsJLyogU2V0IFdyYXAgYml0IG9uIGxhc3QgZW50cnkgKi8NCj4gKwlpZiAocW1jLT5pbnRf c2l6ZSA+PSBzaXplb2YodTE2KSkgew0KPiArCQlsYXN0ID0gcW1jLT5pbnRfdGFibGUgKyAocW1j LT5pbnRfc2l6ZSAvIHNpemVvZih1MTYpKSAtIDE7DQo+ICsJCXFtY193cml0ZTE2KGxhc3QsIFFN Q19JTlRfVyk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIHFtY19pcnFfZ2ludChzdHJ1Y3QgcW1jICpxbWMpDQo+ICt7DQo+ICsJc3RydWN0IHFt Y19jaGFuICpjaGFuOw0KPiArCXVuc2lnbmVkIGludCBjaGFuX2lkOw0KPiArCXVuc2lnbmVkIGxv bmcgZmxhZ3M7DQo+ICsJdTE2IGludF9lbnRyeTsNCj4gKw0KPiArCWludF9lbnRyeSA9IHFtY19y ZWFkMTYocW1jLT5pbnRfY3Vycik7DQo+ICsJd2hpbGUgKGludF9lbnRyeSAmIFFNQ19JTlRfVikg ew0KPiArCQkvKiBDbGVhciBhbGwgYnV0IHRoZSBXcmFwIGJpdCAqLw0KPiArCQlxbWNfd3JpdGUx NihxbWMtPmludF9jdXJyLCBpbnRfZW50cnkgJiBRTUNfSU5UX1cpOw0KPiArDQo+ICsJCWNoYW5f aWQgPSBRTUNfSU5UX0dFVF9DSEFOTkVMKGludF9lbnRyeSk7DQo+ICsJCWNoYW4gPSBxbWMtPmNo YW5zW2NoYW5faWRdOw0KPiArCQlpZiAoIWNoYW4pIHsNCj4gKwkJCWRldl9lcnIocW1jLT5kZXYs ICJpbnRlcnJ1cHQgb24gaW52YWxpZCBjaGFuICV1XG4iLA0KPiBjaGFuX2lkKTsNCj4gKwkJCWdv dG8gaW50X25leHQ7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAoaW50X2VudHJ5ICYgUU1DX0lOVF9U WEIpDQo+ICsJCQlxbWNfY2hhbl93cml0ZV9kb25lKGNoYW4pOw0KPiArDQo+ICsJCWlmIChpbnRf ZW50cnkgJiBRTUNfSU5UX1VOKSB7DQo+ICsJCQlkZXZfaW5mbyhxbWMtPmRldiwgImludHIgY2hh biAldSwgMHglMDR4IChVTilcbiIsDQo+IGNoYW5faWQsDQo+ICsJCQkJIGludF9lbnRyeSk7DQo+ ICsJCQljaGFuLT5uYl90eF91bmRlcnJ1bisrOw0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKGludF9l bnRyeSAmIFFNQ19JTlRfQlNZKSB7DQo+ICsJCQlkZXZfaW5mbyhxbWMtPmRldiwgImludHIgY2hh biAldSwgMHglMDR4IChCU1kpXG4iLA0KPiBjaGFuX2lkLA0KPiArCQkJCSBpbnRfZW50cnkpOw0K PiArCQkJY2hhbi0+bmJfcnhfYnVzeSsrOw0KPiArCQkJLyogUmVzdGFydCB0aGUgcmVjZWl2ZXIg aWYgbmVlZGVkICovDQo+ICsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+cnhfbG9jaywgZmxh Z3MpOw0KPiArCQkJaWYgKGNoYW4tPnJ4X3BlbmRpbmcgJiYgIWNoYW4tPmlzX3J4X3N0b3BwZWQp IHsNCj4gKwkJCQlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfVFJBTlNQQVJFTlQpDQo+ICsJCQkJCXFt Y193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKw0KPiBRTUNfU1BFX1pEU1RBVEUsIDB4MTgwMDAwODAp Ow0KPiArCQkJCWVsc2UNCj4gKwkJCQkJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArDQo+IFFN Q19TUEVfWkRTVEFURSwgMHgwMDAwMDA4MCk7DQo+ICsJCQkJcW1jX3dyaXRlMzIoY2hhbi0+c19w YXJhbSArDQo+IFFNQ19TUEVfUlNUQVRFLCAweDMxMDAwMDAwKTsNCj4gKwkJCQljaGFuLT5pc19y eF9oYWx0ZWQgPSBmYWxzZTsNCj4gKwkJCX0gZWxzZSB7DQo+ICsJCQkJY2hhbi0+aXNfcnhfaGFs dGVkID0gdHJ1ZTsNCj4gKwkJCX0NCj4gKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4t PnJ4X2xvY2ssIGZsYWdzKTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmIChpbnRfZW50cnkgJiBRTUNf SU5UX1JYQikNCj4gKwkJCXFtY19jaGFuX3JlYWRfZG9uZShjaGFuKTsNCj4gKw0KPiAraW50X25l eHQ6DQo+ICsJCWlmIChpbnRfZW50cnkgJiBRTUNfSU5UX1cpDQo+ICsJCQlxbWMtPmludF9jdXJy ID0gcW1jLT5pbnRfdGFibGU7DQo+ICsJCWVsc2UNCj4gKwkJCXFtYy0+aW50X2N1cnIrKzsNCj4g KwkJaW50X2VudHJ5ID0gcW1jX3JlYWQxNihxbWMtPmludF9jdXJyKTsNCj4gKwl9DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBxbWNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAq cHJpdikNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jICpxbWMgPSAoc3RydWN0IHFtYyAqKXByaXY7DQo+ ICsJdTE2IHNjY2U7DQo+ICsNCj4gKwlzY2NlID0gcW1jX3JlYWQxNihxbWMtPnNjY19yZWdzICsg U0NDX1NDQ0UpOw0KPiArCXFtY193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDRSwgc2Nj ZSk7DQo+ICsNCj4gKwlpZiAodW5saWtlbHkoc2NjZSAmIFNDQ19TQ0NFX0lRT1YpKQ0KPiArCQlk ZXZfaW5mbyhxbWMtPmRldiwgIklSUSBxdWV1ZSBvdmVyZmxvd1xuIik7DQo+ICsNCj4gKwlpZiAo dW5saWtlbHkoc2NjZSAmIFNDQ19TQ0NFX0dVTikpDQo+ICsJCWRldl9lcnIocW1jLT5kZXYsICJH bG9iYWwgdHJhbnNtaXR0ZXIgdW5kZXJydW5cbiIpOw0KPiArDQo+ICsJaWYgKHVubGlrZWx5KHNj Y2UgJiBTQ0NfU0NDRV9HT1YpKQ0KPiArCQlkZXZfZXJyKHFtYy0+ZGV2LCAiR2xvYmFsIHJlY2Vp dmVyIG92ZXJydW5cbiIpOw0KPiArDQo+ICsJLyogbm9ybWFsIGludGVycnVwdCAqLw0KPiArCWlm IChsaWtlbHkoc2NjZSAmIFNDQ19TQ0NFX0dJTlQpKQ0KPiArCQlxbWNfaXJxX2dpbnQocW1jKTsN Cj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBx bWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7DQo+ICsJdW5zaWduZWQgaW50IG5i X2NoYW5zOw0KPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KPiArCXN0cnVjdCBxbWMgKnFtYzsN Cj4gKwlpbnQgaXJxOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlxbWMgPSBkZXZtX2t6YWxsb2Mo JnBkZXYtPmRldiwgc2l6ZW9mKCpxbWMpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXFtYykNCj4g KwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlxbWMtPmRldiA9ICZwZGV2LT5kZXY7DQo+ICsJ SU5JVF9MSVNUX0hFQUQoJnFtYy0+Y2hhbl9oZWFkKTsNCj4gKw0KPiArCXFtYy0+c2NjX3JlZ3Mg PSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsDQo+ICJzY2NfcmVn cyIpOw0KPiArCWlmIChJU19FUlIocW1jLT5zY2NfcmVncykpDQo+ICsJCXJldHVybiBQVFJfRVJS KHFtYy0+c2NjX3JlZ3MpOw0KPiArDQo+ICsNCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLA0KPiAic2NjX3ByYW0iKTsNCj4gKwlpZiAo IXJlcykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJcW1jLT5zY2NfcHJhbV9vZmZzZXQgPSBy ZXMtPnN0YXJ0IC0gZ2V0X2ltbXJiYXNlKCk7DQo+ICsJcW1jLT5zY2NfcHJhbSA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZShxbWMtPmRldiwgcmVzKTsNCj4gKwlpZiAoSVNfRVJSKHFtYy0+c2NjX3By YW0pKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihxbWMtPnNjY19wcmFtKTsNCj4gKw0KPiArCXFtYy0+ ZHByYW0gID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LA0KPiAi ZHByYW0iKTsNCj4gKwlpZiAoSVNfRVJSKHFtYy0+ZHByYW0pKQ0KPiArCQlyZXR1cm4gUFRSX0VS UihxbWMtPmRwcmFtKTsNCj4gKw0KPiArCXFtYy0+dHNhX3NlcmlhbCA9IGRldm1fdHNhX3Nlcmlh bF9nZXRfYnlwaGFuZGxlKHFtYy0+ZGV2LCBucCwNCj4gImZzbCx0c2Etc2VyaWFsIik7DQo+ICsJ aWYgKElTX0VSUihxbWMtPnRzYV9zZXJpYWwpKSB7DQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2Jl KHFtYy0+ZGV2LCBQVFJfRVJSKHFtYy0+dHNhX3NlcmlhbCksDQo+ICsJCQkJICAgICAiRmFpbGVk IHRvIGdldCBUU0Egc2VyaWFsXG4iKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBDb25uZWN0IHRoZSBz ZXJpYWwgKFNDQykgdG8gVFNBICovDQo+ICsJcmV0ID0gdHNhX3NlcmlhbF9jb25uZWN0KHFtYy0+ dHNhX3NlcmlhbCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKHFtYy0+ZGV2LCAiRmFp bGVkIHRvIGNvbm5lY3QgVFNBIHNlcmlhbFxuIik7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0K PiArDQo+ICsJLyogUGFyc2UgY2hhbm5lbHMgaW5mb3JtYXRpb25zcyAqLw0KPiArCXJldCA9IHFt Y19vZl9wYXJzZV9jaGFucyhxbWMsIG5wKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIGVycl90 c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7DQo+ICsNCj4gKwluYl9jaGFucyA9IHFtY19uYl9jaGFucyhx bWMpOw0KPiArDQo+ICsJLyogSW5pdCBHTVNSX0ggYW5kIEdNU1JfTCByZWdpc3RlcnMgKi8NCj4g KwlxbWNfd3JpdGUzMihxbWMtPnNjY19yZWdzICsgU0NDX0dTTVJILA0KPiArCQkgICAgU0NDX0dT TVJIX0NEUyB8IFNDQ19HU01SSF9DVFNTIHwgU0NDX0dTTVJIX0NEUA0KPiB8IFNDQ19HU01SSF9D VFNQKTsNCj4gKw0KPiArCS8qIGVuYWJsZSBRTUMgbW9kZSAqLw0KPiArCXFtY193cml0ZTMyKHFt Yy0+c2NjX3JlZ3MgKyBTQ0NfR1NNUkwsDQo+IFNDQ19HU01STF9NT0RFX1FNQyk7DQo+ICsNCj4g KwkvKg0KPiArCSAqIEFsbG9jYXRlIHRoZSBidWZmZXIgZGVzY3JpcHRvciB0YWJsZQ0KPiArCSAq IDggcnggYW5kIDggdHggZGVzY3JpcHRvcnMgcGVyIGNoYW5uZWwNCj4gKwkgKi8NCj4gKwlxbWMt PmJkX3NpemUgPSAobmJfY2hhbnMgKiAoUU1DX05CX1RYQkRTICsgUU1DX05CX1JYQkRTKSkNCj4g KiBzaXplb2YoY2JkX3QpOw0KPiArCXFtYy0+YmRfdGFibGUgPSBkbWFtX2FsbG9jX2NvaGVyZW50 KHFtYy0+ZGV2LCBxbWMtPmJkX3NpemUsDQo+ICsJCSZxbWMtPmJkX2RtYV9hZGRyLCBHRlBfS0VS TkVMKTsNCj4gKwlpZiAoIXFtYy0+YmRfdGFibGUpIHsNCj4gKwkJZGV2X2VycihxbWMtPmRldiwg IkZhaWxlZCB0byBhbGxvY2F0ZSBiZCB0YWJsZVxuIik7DQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ ICsJCWdvdG8gZXJyX3RzYV9zZXJpYWxfZGlzY29ubmVjdDsNCj4gKwl9DQo+ICsJbWVtc2V0KHFt Yy0+YmRfdGFibGUsIDAsIHFtYy0+YmRfc2l6ZSk7DQo+ICsNCj4gKwlxbWNfd3JpdGUzMihxbWMt PnNjY19wcmFtICsgUU1DX0dCTF9NQ0JBU0UsIHFtYy0NCj4gPmJkX2RtYV9hZGRyKTsNCj4gKw0K PiArCS8qIEFsbG9jYXRlIHRoZSBpbnRlcnJ1cHQgdGFibGUgKi8NCj4gKwlxbWMtPmludF9zaXpl ID0gUU1DX05CX0lOVFMgKiBzaXplb2YodTE2KTsNCj4gKwlxbWMtPmludF90YWJsZSA9IGRtYW1f YWxsb2NfY29oZXJlbnQocW1jLT5kZXYsIHFtYy0+aW50X3NpemUsDQo+ICsJCSZxbWMtPmludF9k bWFfYWRkciwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFxbWMtPmludF90YWJsZSkgew0KPiArCQlk ZXZfZXJyKHFtYy0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGludGVycnVwdCB0YWJsZVxuIik7 DQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ICsJCWdvdG8gZXJyX3RzYV9zZXJpYWxfZGlzY29ubmVj dDsNCj4gKwl9DQo+ICsJbWVtc2V0KHFtYy0+aW50X3RhYmxlLCAwLCBxbWMtPmludF9zaXplKTsN Cj4gKw0KPiArCXFtYy0+aW50X2N1cnIgPSBxbWMtPmludF90YWJsZTsNCj4gKwlxbWNfd3JpdGUz MihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9JTlRCQVNFLCBxbWMtDQo+ID5pbnRfZG1hX2FkZHIp Ow0KPiArCXFtY193cml0ZTMyKHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX0lOVFBUUiwgcW1jLQ0K PiA+aW50X2RtYV9hZGRyKTsNCj4gKw0KPiArCS8qIFNldCBNUkJMUiAodmFsaWQgZm9yIEhETEMg b25seSkgbWF4IE1SVSArIG1heCBDUkMgKi8NCj4gKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFt ICsgUU1DX0dCTF9NUkJMUiwNCj4gSERMQ19NQVhfTVJVICsgNCk7DQo+ICsNCj4gKwlxbWNfd3Jp dGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9HUkZUSFIsIDEpOw0KPiArCXFtY193cml0ZTE2 KHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX0dSRkNOVCwgMSk7DQo+ICsNCj4gKwlxbWNfd3JpdGUz MihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9DX01BU0szMiwgMHhERUJCMjBFMyk7DQo+ICsJcW1j X3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfQ19NQVNLMTYsIDB4RjBCOCk7DQo+ICsN Cj4gKwlyZXQgPSBxbWNfc2V0dXBfdHNhKHFtYyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290byBl cnJfdHNhX3NlcmlhbF9kaXNjb25uZWN0Ow0KPiArDQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2Nf cHJhbSArIFFNQ19HQkxfUU1DU1RBVEUsIDB4ODAwMCk7DQo+ICsNCj4gKwlyZXQgPSBxbWNfc2V0 dXBfY2hhbnMocW1jKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIGVycl90c2Ffc2VyaWFsX2Rp c2Nvbm5lY3Q7DQo+ICsNCj4gKwkvKiBJbml0IGludGVycnVwdHMgdGFibGUgKi8NCj4gKwlyZXQg PSBxbWNfc2V0dXBfaW50cyhxbWMpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gZXJyX3RzYV9z ZXJpYWxfZGlzY29ubmVjdDsNCj4gKw0KPiArCS8qIERpc2FibGUgYW5kIGNsZWFyIGludGVycnVw dHMsICBzZXQgdGhlIGlycSBoYW5kbGVyICovDQo+ICsJcW1jX3dyaXRlMTYocW1jLT5zY2NfcmVn cyArIFNDQ19TQ0NNLCAweDAwMDApOw0KPiArCXFtY193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBT Q0NfU0NDRSwgMHgwMDBGKTsNCj4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0K PiArCWlmIChpcnEgPCAwKQ0KPiArCQlnb3RvIGVycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7DQo+ ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShxbWMtPmRldiwgaXJxLCBxbWNfaXJxX2hhbmRsZXIs IDAsICJxbWMiLA0KPiBxbWMpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlnb3RvIGVycl90c2Ff c2VyaWFsX2Rpc2Nvbm5lY3Q7DQo+ICsNCj4gKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KPiAr CXFtY193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDTSwNCj4gKwkJU0NDX1NDQ0VfSVFP ViB8IFNDQ19TQ0NFX0dJTlQgfCBTQ0NfU0NDRV9HVU4gfA0KPiBTQ0NfU0NDRV9HT1YpOw0KPiAr DQo+ICsJcmV0ID0gcW1jX2ZpbmFsaXplX2NoYW5zKHFtYyk7DQo+ICsJaWYgKHJldCA8IDApDQo+ ICsJCWdvdG8gZXJyX2Rpc2FibGVfaW50cjsNCj4gKw0KPiArCS8qIEVuYWJsZSB0cmFuc21pdGVy IGFuZCByZWNlaXZlciAqLw0KPiArCXFtY19zZXRiaXRzMzIocW1jLT5zY2NfcmVncyArIFNDQ19H U01STCwgU0NDX0dTTVJMX0VOUiB8DQo+IFNDQ19HU01STF9FTlQpOw0KPiArDQo+ICsJcGxhdGZv cm1fc2V0X2RydmRhdGEocGRldiwgcW1jKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtl cnJfZGlzYWJsZV9pbnRyOg0KPiArCXFtY193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0ND TSwgMCk7DQo+ICsNCj4gK2Vycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q6DQo+ICsJdHNhX3Nlcmlh bF9kaXNjb25uZWN0KHFtYy0+dHNhX3NlcmlhbCk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBxbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp DQo+ICt7DQo+ICsJc3RydWN0IHFtYyAqcW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 DQo+ICsNCj4gKwkvKiBEaXNhYmxlIHRyYW5zbWl0ZXIgYW5kIHJlY2VpdmVyICovDQo+ICsJcW1j X3NldGJpdHMzMihxbWMtPnNjY19yZWdzICsgU0NDX0dTTVJMLCAwKTsNCj4gKw0KPiArCS8qIERp c2FibGUgaW50ZXJydXB0cyAqLw0KPiArCXFtY193cml0ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0Nf U0NDTSwgMCk7DQo+ICsNCj4gKwkvKiBEaXNjb25uZWN0IHRoZSBzZXJpYWwgZnJvbSBUU0EgKi8N Cj4gKwl0c2Ffc2VyaWFsX2Rpc2Nvbm5lY3QocW1jLT50c2Ffc2VyaWFsKTsNCj4gKw0KPiArCXJl dHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBx bWNfaWRfdGFibGVbXSA9IHsNCj4gKwl7IC5jb21wYXRpYmxlID0gImZzbCxjcG0xLXNjYy1xbWMi IH0sDQo+ICsJe30gLyogc2VudGluZWwgKi8NCj4gK307DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBxbWNfaWRfdGFibGUpOw0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBxbWNfZHJpdmVyID0gew0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5uYW1lID0gImZzbC1xbWMi LA0KPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocW1jX2lkX3RhYmxlKSwNCj4g Kwl9LA0KPiArCS5wcm9iZSA9IHFtY19wcm9iZSwNCj4gKwkucmVtb3ZlID0gcW1jX3JlbW92ZSwN Cj4gK307DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHFtY19kcml2ZXIpOw0KPiArDQo+ICtz dHJ1Y3QgcW1jX2NoYW4gKnFtY19jaGFuX2dldF9ieXBoYW5kbGUoc3RydWN0IGRldmljZV9ub2Rl ICpucCwNCj4gY29uc3QgY2hhciAqcGhhbmRsZV9uYW1lKQ0KPiArew0KPiArCXN0cnVjdCBvZl9w aGFuZGxlX2FyZ3Mgb3V0X2FyZ3M7DQo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsN Cj4gKwlzdHJ1Y3QgcW1jX2NoYW4gKnFtY19jaGFuOw0KPiArCXN0cnVjdCBxbWMgKnFtYzsNCj4g KwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2Fy Z3MobnAsIHBoYW5kbGVfbmFtZSwgMSwgMCwNCj4gKwkJCQkJICAgICAgICZvdXRfYXJncyk7DQo+ ICsJaWYgKHJldCA8IDApDQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7DQo+ICsNCj4gKwlpZiAo IW9mX21hdGNoX25vZGUocW1jX2RyaXZlci5kcml2ZXIub2ZfbWF0Y2hfdGFibGUsDQo+IG91dF9h cmdzLm5wKSkgew0KPiArCQlvZl9ub2RlX3B1dChvdXRfYXJncy5ucCk7DQo+ICsJCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOw0KPiArCX0NCj4gKw0KPiArCXBkZXYgPSBvZl9maW5kX2RldmljZV9i eV9ub2RlKG91dF9hcmdzLm5wKTsNCj4gKwlvZl9ub2RlX3B1dChvdXRfYXJncy5ucCk7DQo+ICsJ aWYgKCFwZGV2KQ0KPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsNCj4gKw0KPiArCXFtYyA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArCWlmICghcW1jKSB7DQo+ICsJCXBsYXRm b3JtX2RldmljZV9wdXQocGRldik7DQo+ICsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIp Ow0KPiArCX0NCj4gKw0KPiArCWlmIChvdXRfYXJncy5hcmdzX2NvdW50ICE9IDEpIHsNCj4gKwkJ cGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsNCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 DQo+ICsJfQ0KPiArDQo+ICsJaWYgKG91dF9hcmdzLmFyZ3NbMF0gPj0gQVJSQVlfU0laRShxbWMt PmNoYW5zKSkgew0KPiArCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOw0KPiArCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsNCj4gKwl9DQo+ICsNCj4gKwlxbWNfY2hhbiA9IHFtYy0+Y2hhbnNb b3V0X2FyZ3MuYXJnc1swXV07DQo+ICsJaWYgKCFxbWNfY2hhbikgew0KPiArCQlwbGF0Zm9ybV9k ZXZpY2VfcHV0KHBkZXYpOw0KPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsNCj4gKwl9DQo+ ICsNCj4gKwlyZXR1cm4gcW1jX2NoYW47DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKHFtY19jaGFu X2dldF9ieXBoYW5kbGUpOw0KPiArDQo+ICt2b2lkIHFtY19jaGFuX3B1dChzdHJ1Y3QgcW1jX2No YW4gKmNoYW4pDQo+ICt7DQo+ICsJcHV0X2RldmljZShjaGFuLT5xbWMtPmRldik7DQo+ICt9DQo+ ICtFWFBPUlRfU1lNQk9MKHFtY19jaGFuX3B1dCk7DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGRldm1f cW1jX2NoYW5fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykNCj4gK3sNCj4g KwlzdHJ1Y3QgcW1jX2NoYW4gKipxbWNfY2hhbiA9IHJlczsNCj4gKw0KPiArCXFtY19jaGFuX3B1 dCgqcW1jX2NoYW4pOw0KPiArfQ0KPiArDQo+ICtzdHJ1Y3QgcW1jX2NoYW4gKmRldm1fcW1jX2No YW5fZ2V0X2J5cGhhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJCSAgICAgc3RydWN0 IGRldmljZV9ub2RlICpucCwNCj4gKwkJCQkJICAgICBjb25zdCBjaGFyICpwaGFuZGxlX25hbWUp DQo+ICt7DQo+ICsJc3RydWN0IHFtY19jaGFuICpxbWNfY2hhbjsNCj4gKwlzdHJ1Y3QgcW1jX2No YW4gKipkcjsNCj4gKw0KPiArCWRyID0gZGV2cmVzX2FsbG9jKGRldm1fcW1jX2NoYW5fcmVsZWFz ZSwgc2l6ZW9mKCpkciksDQo+IEdGUF9LRVJORUwpOw0KPiArCWlmICghZHIpDQo+ICsJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOw0KPiArDQo+ICsJcW1jX2NoYW4gPSBxbWNfY2hhbl9nZXRfYnlw aGFuZGxlKG5wLCBwaGFuZGxlX25hbWUpOw0KPiArCWlmICghSVNfRVJSKHFtY19jaGFuKSkgew0K PiArCQkqZHIgPSBxbWNfY2hhbjsNCj4gKwkJZGV2cmVzX2FkZChkZXYsIGRyKTsNCj4gKwl9IGVs c2Ugew0KPiArCQlkZXZyZXNfZnJlZShkcik7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHFtY19j aGFuOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkZXZtX3FtY19jaGFuX2dldF9ieXBoYW5kbGUp Ow0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJIZXJ2ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBib290 bGluLmNvbT4iKTsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiQ1BNIFFNQyBkcml2ZXIiKTsNCj4g K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc29jL2ZzbC9x ZS9xbWMuaCBiL2luY2x1ZGUvc29jL2ZzbC9xZS9xbWMuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjNjNjFhNTBkMmFlMg0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL2luY2x1ZGUvc29jL2ZzbC9xZS9xbWMuaA0KPiBAQCAtMCwwICsxLDcxIEBADQo+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLw0KPiArLyoNCj4g KyAqIFFNQyBtYW5hZ2VtZW50DQo+ICsgKg0KPiArICogQ29weXJpZ2h0IDIwMjIgQ1MgR1JPVVAg RnJhbmNlDQo+ICsgKg0KPiArICogQXV0aG9yOiBIZXJ2ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBi b290bGluLmNvbT4NCj4gKyAqLw0KPiArI2lmbmRlZiBfX1NPQ19GU0xfUU1DX0hfXw0KPiArI2Rl ZmluZSBfX1NPQ19GU0xfUU1DX0hfXw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4N Cj4gKw0KPiArc3RydWN0IGRldmljZV9ub2RlOw0KPiArc3RydWN0IGRldmljZTsNCj4gK3N0cnVj dCBxbWNfY2hhbjsNCj4gKw0KPiArc3RydWN0IHFtY19jaGFuICpxbWNfY2hhbl9nZXRfYnlwaGFu ZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsDQo+IGNvbnN0IGNoYXIgKnBoYW5kbGVfbmFtZSk7 DQo+ICt2b2lkIHFtY19jaGFuX3B1dChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pOw0KPiArc3RydWN0 IHFtY19jaGFuICpkZXZtX3FtY19jaGFuX2dldF9ieXBoYW5kbGUoc3RydWN0IGRldmljZSAqZGV2 LA0KPiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLA0KPiArCQkJCQkgICAgIGNvbnN0IGNoYXIgKnBo YW5kbGVfbmFtZSk7DQo+ICsNCj4gK2VudW0gcW1jX21vZGUgew0KPiArCVFNQ19UUkFOU1BBUkVO VCwNCj4gKwlRTUNfSERMQywNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBxbWNfY2hhbl9pbmZvIHsN Cj4gKwllbnVtIHFtY19tb2RlIG1vZGU7DQo+ICsJdW5zaWduZWQgbG9uZyByeF9mc19yYXRlOw0K PiArCXVuc2lnbmVkIGxvbmcgcnhfYml0X3JhdGU7DQo+ICsJdTggbmJfcnhfdHM7DQo+ICsJdW5z aWduZWQgbG9uZyB0eF9mc19yYXRlOw0KPiArCXVuc2lnbmVkIGxvbmcgdHhfYml0X3JhdGU7DQo+ ICsJdTggbmJfdHhfdHM7DQo+ICt9Ow0KPiArDQo+ICtpbnQgcW1jX2NoYW5fZ2V0X2luZm8oc3Ry dWN0IHFtY19jaGFuICpjaGFuLCBzdHJ1Y3QgcW1jX2NoYW5faW5mbw0KPiAqaW5mbyk7DQo+ICsN Cj4gK3N0cnVjdCBxbWNfY2hhbl9wYXJhbSB7DQo+ICsJZW51bSBxbWNfbW9kZSBtb2RlOw0KPiAr CXVuaW9uIHsNCj4gKwkJc3RydWN0IHsNCj4gKwkJCXUxNiBtYXhfcnhfYnVmX3NpemU7DQo+ICsJ CQl1MTYgbWF4X3J4X2ZyYW1lX3NpemU7DQo+ICsJCQlib29sIGlzX2NyYzMyOw0KPiArCQl9IGhk bGM7DQo+ICsJCXN0cnVjdCB7DQo+ICsJCQl1MTYgbWF4X3J4X2J1Zl9zaXplOw0KPiArCQl9IHRy YW5zcDsNCj4gKwl9Ow0KPiArfTsNCj4gKw0KPiAraW50IHFtY19jaGFuX3NldF9wYXJhbShzdHJ1 Y3QgcW1jX2NoYW4gKmNoYW4sIGNvbnN0IHN0cnVjdA0KPiBxbWNfY2hhbl9wYXJhbSAqcGFyYW0p Ow0KPiArDQo+ICtpbnQgcW1jX2NoYW5fd3JpdGVfc3VibWl0KHN0cnVjdCBxbWNfY2hhbiAqY2hh biwgZG1hX2FkZHJfdCBhZGRyLA0KPiBzaXplX3QgbGVuZ3RoLA0KPiArCQkJICB2b2lkICgqY29t cGxldGUpKHZvaWQgKmNvbnRleHQpLCB2b2lkICpjb250ZXh0KTsNCj4gKw0KPiAraW50IHFtY19j aGFuX3JlYWRfc3VibWl0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRyLA0K PiBzaXplX3QgbGVuZ3RoLA0KPiArCQkJIHZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCwg c2l6ZV90IGxlbmd0aCksDQo+ICsJCQkgdm9pZCAqY29udGV4dCk7DQo+ICsNCj4gKyNkZWZpbmUg UU1DX0NIQU5fUkVBRCAgKDE8PDApDQo+ICsjZGVmaW5lIFFNQ19DSEFOX1dSSVRFICgxPDwxKQ0K PiArI2RlZmluZSBRTUNfQ0hBTl9BTEwgICAoUU1DX0NIQU5fUkVBRCB8IFFNQ19DSEFOX1dSSVRF KQ0KPiArDQo+ICtpbnQgcW1jX2NoYW5fc3RhcnQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBpbnQg ZGlyZWN0aW9uKTsNCj4gK2ludCBxbWNfY2hhbl9zdG9wKHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwg aW50IGRpcmVjdGlvbik7DQo+ICtpbnQgcW1jX2NoYW5fcmVzZXQoc3RydWN0IHFtY19jaGFuICpj aGFuLCBpbnQgZGlyZWN0aW9uKTsNCj4gKw0KPiArI2VuZGlmIC8qIF9fU09DX0ZTTF9RTUNfSF9f ICovDQo+IC0tDQo+IDIuMzkuMA0KDQo=