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 16A09C64ED6 for ; Fri, 17 Feb 2023 16:31:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230183AbjBQQbF (ORCPT ); Fri, 17 Feb 2023 11:31:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229683AbjBQQbD (ORCPT ); Fri, 17 Feb 2023 11:31:03 -0500 Received: from FRA01-MR2-obe.outbound.protection.outlook.com (mail-mr2fra01on20608.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e19::608]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12F4D711BB; Fri, 17 Feb 2023 08:30:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W27Jf74BE2GAB9oK1wVhPIKVf6TIgon38xRC9Vzzabx5N8tKFtJwo1Gh+Nz1kxn5qGWCIyoeoWm0bjv/hsnZjVu9hHYN1JL6ZuCFVBDkPdEHg/4Dcrw3L8W68TDr7X8zGMfNLaQeI2MCeRX1QjU5/ALobkXu36EwZl+ERBCNn71p1msQqr1Eog8JLU8bmi4W6W//60nAPeIwyyQsiIjH8fL2pcYOfGoxnBoiEbyk/jeTuFasCqUWwiW7jZw0UD0zJqi735bpNs34Y612yjRGJg5XuesYN87Zurx7pCWBbS/9CoHaXNdU2vGRaKdMddc3Tjnp5arPtvorOU84ALj/Sg== 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=sV9s3lVaCT24WGD4v4I3A3fstHUJWd1+TohcYMDtLIU=; b=l2I0ERoJbZ7mAPRTe2Uaq9GMyeDqEu1MMRdS93j3moB7JxiTEJE7/ZC30NN4ikaTeG60TfjitBEB9LpDgd5/v+u/Ja0cH3xCs6LJZ9QKQErW/RtTZpJ0w+W/angFGCqvRYg0T6WLbdOynip6p+a7RD77MSYucVcC8AFj6P5X9KLMQm6fl/MY9Ub/mBU+H3i+lGdml+BrVCeHDXrmeMO3M88Qn+r7UKFrdwthbnlO1sm3rzykKXFWseGvSoFtHtQ0lgpimGXqH6QDmI+gjF2sHlhQQJKdcnshyzfUBBo11B2CKTOmkitmc6P+bEwJ6Q2SDlDyVU8XpgDIORsGu89yjw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csgroup.eu; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sV9s3lVaCT24WGD4v4I3A3fstHUJWd1+TohcYMDtLIU=; b=vvQP9ww8TMHiXPCdf6dOlnlSvdQ5j/drCye9genZEy3rYw3zhZDIcyhRWDabat9m4nbhc4GP5BoeOkyPcpcgjXPqSP/tEBehfMaVFm/BR7MTSWSDJg3xWtnVHaJmfLujT9w/lX77J5vJjOEE73E3Wskret9Ubmr8n0t2zhB5EbgD8BjpuR+p8OlgZsfa3icsDFKoU2Y0qp5MKj+bb8gtmeiSB+kokzImWquGZ6rha8dhGNIMZmcxcxO7OUhMjBwXArEVrZ/ZBygFn8NIeeyv5VQrHl5Wfv1InqCXfHVY/yIID7b8bHO2rA6ZHCPLNqGp3XKgUThRumbHPTvdqj1SLA== Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MR1P264MB1665.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:12::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.15; Fri, 17 Feb 2023 16:30:06 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097%4]) with mapi id 15.20.6111.013; Fri, 17 Feb 2023 16:30:06 +0000 From: Christophe Leroy To: Herve Codina , Li Yang , Rob Herring , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , 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 v6 09/10] ASoC: fsl: Add support for QMC audio Thread-Topic: [PATCH v6 09/10] ASoC: fsl: Add support for QMC audio Thread-Index: AQHZQuAm8MD9wmmvukOugkytSgrcga7TVG6A Date: Fri, 17 Feb 2023 16:30:06 +0000 Message-ID: <4fe7fd4d-1896-d933-3843-366dc94c71c6@csgroup.eu> References: <20230217145645.1768659-1-herve.codina@bootlin.com> <20230217145645.1768659-10-herve.codina@bootlin.com> In-Reply-To: <20230217145645.1768659-10-herve.codina@bootlin.com> Accept-Language: fr-FR, en-US Content-Language: fr-FR X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=csgroup.eu; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MRZP264MB2988:EE_|MR1P264MB1665:EE_ x-ms-office365-filtering-correlation-id: 0ddfa0e2-bc2a-43b4-7fd8-08db11043acf x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: IZAddnUCc24MkOJDibaobr2CruDRDyElzmPLnD3HrB9AWDsaD44nwjMGmwEjuEGfFr+Izjkm6MOJ6GJ57cbRcHvwI6nY/Z2SJIm1o/Dbb7SCcxVpgoGTtg/Lgf1/sSqZuYP6I1VjmyadZ9badswKN+aLRqGByIxXhIY1bi+YmGueNAig1kdLhQUlvvvU3Y1dZ7o2LypUDhaoO1mj/Mi7ppxEA0mDhYVJJFKYUXGgSpqHtqV9+Sy/xMpXuvBJEm0nFzNkLLpjU9x0UXlIGHQJoBOqdaRwjS1TSyclEq66UDcjmNVZi/X01l4FZ583s5KEhpRQq4q5cP5gu/f1OAUuZ3AcMg5o12AzANGCS7pu9i/7xV5A8qV39Fq426KgBZftoBMeeSZuhzvK6bxMKny0W6dO9z00VmkhaN1MBPCf3x9yydv1vyslTPVbt3fDXCb2WXKPr78sai6DRuhsfgcKze/v6KFygl0jm3N54TDGdASLx6nyuydoYjb8cPZPSgJFPjUu4Tw0Z2hv6Fr346Na/epSklrYs39Ka1WXioSwQwtDAi5TolCx+l0+jC+fvz7JjBFwulZZvj09FyDUyaDPn19DlKcknPfygI+C41HY8EVT6z8C9xCGLz7Z0bkpJIc4ndxEmpZ6jqotHWi5pCTz3cY7NKejKd/MZTEmR2EXCn4icTcK24wA4ztESOa/LehM3ZOcxtQGkBQsZuGxlUnnQ0f4QcB8pAPyj6h9JShkDl6J/5AiBP0+DTIyqu2tMgJeKOYYYjkIzikIwsLvXqWh0A== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230025)(4636009)(346002)(39850400004)(376002)(366004)(396003)(136003)(451199018)(122000001)(38100700002)(86362001)(921005)(38070700005)(30864003)(4326008)(31696002)(36756003)(44832011)(7416002)(5660300002)(64756008)(2906002)(76116006)(66556008)(8676002)(66446008)(66476007)(66946007)(8936002)(91956017)(41300700001)(66574015)(2616005)(6512007)(186003)(83380400001)(26005)(71200400001)(54906003)(316002)(6486002)(110136005)(478600001)(6506007)(31686004)(45980500001)(43740500002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UFppNC9GamZjbG00V3VuaWxTMUcrUWdyZXA4Z0E1Q2tUMS9JODMxM0c3cDcv?= =?utf-8?B?VFRDUVRIOE1XdVE2T0gzL2puRjNwUFdsQ05yUXNTT2J1Y1RIN2tpSnJnR1Vo?= =?utf-8?B?dmhORndkQ3h2NklKSXd3T0NwNjh6RkV3OURzVHNRblVnaEZGRy9Kc01aN1BP?= =?utf-8?B?bDRxdnlLdldMeG5naGFxMVJNZkc5K2VxNHBHZVdlWEptaU5DWStaaXR5YXc2?= =?utf-8?B?Q1ordTJ1SkhJT1ovMUZtMFFCM0hOTklvYW5SNDRTVTJZS2pzcWRnUDdzU2RP?= =?utf-8?B?UWlBYzFFWWNPZnNjVkZMcnB4c1k0bkFYWEVMc1cxOCtqM1lOMk5VVFdpb3hh?= =?utf-8?B?L29LMzBjcThmN2pZMlBTN0lNVERSRG1vUVA3R1o0TlcvYWZDbVV4enh6RzBI?= =?utf-8?B?Q1NkOFlDU0w1Z1U2TVFHdk1Kb051dC91TXMyMjRGUmFGamhidk1uR2o2WjdC?= =?utf-8?B?Tnl3VlNSbzZXTHdJU1ZiY2lpZ1RKc1pmVjdhU2oxWTBBc2ltcTZ6eU4yQmlO?= =?utf-8?B?UkN6N3pEbzliaTJ4MGh2blZuWG5aaStzUTJOalhjZCtqSEdLTWZ1RXozYStZ?= =?utf-8?B?ekU4NW5XNEljYjZyNExtdUROMlJNbS9nVnVZbjZTbUN4NFZ4UUpKbnJvVjE0?= =?utf-8?B?bFlSSEVsTlVtZndoME54UEMrZUhwYmNkZzlMS1ZPK3hpWWtYVTdXMVlQbUh3?= =?utf-8?B?OFF4VWxUUFA1dWtBZWlNZCtJT3IzcXE3SHh2Nk5tQXVLajlRR1k1V1BjeDRP?= =?utf-8?B?N3B1cjBFYUFBVmRiVDdNWDUrMlhTMjA0RTRXcnBKTlB1ZnpwSmVKNkgzd1dP?= =?utf-8?B?SnhxS2t1dTRRcEticXM1Z3FUOVZzQ0NIbkFOWW5DbjhSeWE1azRzb2xaZDZ3?= =?utf-8?B?STJaWThMZzlTekZwSjVKZkZBaHgyOUIyWHlGQnU2ejRKaHkxb1JYNSsvc3Jz?= =?utf-8?B?Y0RFUkxTdWJLUnh6c1JINXFYTEkwTXBzTko3ZnJsRGVUbGVEcWVzMmp6UFVN?= =?utf-8?B?NUM3V1JSc0RMcXpCNkZkcktNRnFRcHpBL2ZuRlFJMTVYeHZzUEM2TjlmVjYv?= =?utf-8?B?bEZDcXM3bXFvUUFmVEJpTHJLdUJ2eEplMlBrOW5FMElQN3dtaDFOOU9JVmUr?= =?utf-8?B?eW1VRDNmRnVha2pMbC9NU0F6aXIrN2h4K0R0dG10dXg4MGhiV2lINTJoTjBr?= =?utf-8?B?S0pZbTIyMUJSWFhWVTVWWWcvUjU3RmJ6WU5SOVBtVnkrN1l6YzVrdUcrODdk?= =?utf-8?B?TDE4QkVnYUV6SXVBK3RmQVR5UENubTZ0cWlSaUR2L2Q1VjNZY0NRQ25obVRC?= =?utf-8?B?MGdMZGFhZExlVGhlby9IQkxrZm1rOFVZVTZESm92MDZhNFYyWHhXYktpL2xy?= =?utf-8?B?Wmh4U0xDSEVsTzZ3OVo0YnFaZ0d5S3IvNHZBSEFkV0xYZTI5d2Q4NDY5WHlV?= =?utf-8?B?VXlQSWw1cGE1NHhrczl3ZnFwZysyUzNDRWNGWnNKY2V1c01SNWdiSHhORjdl?= =?utf-8?B?cldjam5JdWhKdmRucnZodXVwSWJUNUI1dzExUVo0cTI5NVBXMHNBb3hxaHRw?= =?utf-8?B?dlljd2tMTWExKy9HWFFHSUh3VzBmQ2pvVlJmQWVTUjNBbEp0ajA5NGY4L2lk?= =?utf-8?B?TnY4bHp3dkRqc0EweHEwZnVvR0tNOWl2SG1xbzlkdFNRekV0ODlaaHN2cDJ4?= =?utf-8?B?RGlHc0NFVTRmRHd2VmRuQnQyblpzQmFJWG01ekMzelJ5Ujhpb0RGUkg2M0Fl?= =?utf-8?B?ckw3bFhvS0ZNNzBEbGhpMTRZM0ZZeEpjUGgwcWFlNUtVR1RFVUJXTmwzZ3Vm?= =?utf-8?B?Y2lUVUpVZytQY1Y3UlFFbnB6OWQrOEFVVVpnUmZjaUJhT0lpdEVmZEU5Z0Fo?= =?utf-8?B?WExOQkloTnk2QjhuSHRudHZQeW5nKzc5QjFEeGNxSnNaVlhreHc4bXZDY2NR?= =?utf-8?B?eE52WkhsSzhOWEo2dk9CSmx2ZTdPRVA5UlAwRVdKMEduWlV5U3JkNytvTXRK?= =?utf-8?B?dUxkZi9jNlZqL0ZFRnZnWFViODlwN2NKM2tsbDBiNUFUNVlodit4dFR3eEF6?= =?utf-8?B?NEwzTk1CZ0tuc3J4NUlrSFZzMHdGNlc5M1d6WmlQM1RBeDJvY3hOd2d0UmRJ?= =?utf-8?B?Um02c3U1d2FKUTBYNDRwMFVKN0Y1Mk1EL3ROUHh4SlE2eEhSYVg4aWdZVTQ5?= =?utf-8?B?NHc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <64E7FD13CE4903408BAA34ED20A02A8F@FRAP264.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 0ddfa0e2-bc2a-43b4-7fd8-08db11043acf X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Feb 2023 16:30:06.6637 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: nX/tKGSy7NBRnpGyp/BEQSvEKg9lfQv4uWLdd85l4ihkPwqOSIN+Tdxo/lJERcGvpBdyG1M9FnTY+IThmRRV84uoNF4zZ2Jaem9uHjIYDjc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR1P264MB1665 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCkxlIDE3LzAyLzIwMjMgw6AgMTU6NTYsIEhlcnZlIENvZGluYSBhIMOpY3JpdMKgOg0KPiBU aGUgUU1DIGF1ZGlvIGlzIGFuIEFTb0MgY29tcG9uZW50IHdoaWNoIHByb3ZpZGVzIERBSXMNCj4g dGhhdCB1c2UgdGhlIFFNQyAoUVVJQ0MgTXVsdGljaGFubmVsIENvbnRyb2xsZXIpIHRvIHRyYW5z ZmVyDQo+IHRoZSBhdWRpbyBkYXRhLg0KPiANCj4gSXQgcHJvdmlkZXMgYXMgbWFueSBEQUlzIGFz IHRoZSBudW1iZXIgb2YgUU1DIGNoYW5uZWxzIGl0DQo+IHJlZmVyZW5jZXMuDQo+IA0KPiBTaWdu ZWQtb2ZmLWJ5OiBIZXJ2ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBib290bGluLmNvbT4NCg0KUmV2 aWV3ZWQtYnk6IENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3lAY3Nncm91cC5ldT4N ClRlc3RlZC1ieTogQ2hyaXN0b3BoZSBMZXJveSA8Y2hyaXN0b3BoZS5sZXJveUBjc2dyb3VwLmV1 Pg0KDQo+IC0tLQ0KPiAgIHNvdW5kL3NvYy9mc2wvS2NvbmZpZyAgICAgICAgIHwgICA5ICsNCj4g ICBzb3VuZC9zb2MvZnNsL01ha2VmaWxlICAgICAgICB8ICAgMiArDQo+ICAgc291bmQvc29jL2Zz bC9mc2xfcW1jX2F1ZGlvLmMgfCA3MzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kw0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgNzQ2IGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9k ZSAxMDA2NDQgc291bmQvc29jL2ZzbC9mc2xfcW1jX2F1ZGlvLmMNCj4gDQo+IGRpZmYgLS1naXQg YS9zb3VuZC9zb2MvZnNsL0tjb25maWcgYi9zb3VuZC9zb2MvZnNsL0tjb25maWcNCj4gaW5kZXgg NjE0ZWNlZGE2YjllLi4xN2RiMjljMjVkOTYgMTAwNjQ0DQo+IC0tLSBhL3NvdW5kL3NvYy9mc2wv S2NvbmZpZw0KPiArKysgYi9zb3VuZC9zb2MvZnNsL0tjb25maWcNCj4gQEAgLTE3Miw2ICsxNzIs MTUgQEAgY29uZmlnIFNORF9NUEM1Mnh4X0RNQQ0KPiAgIGNvbmZpZyBTTkRfU09DX1BPV0VSUENf RE1BDQo+ICAgCXRyaXN0YXRlDQo+ICAgDQo+ICtjb25maWcgU05EX1NPQ19QT1dFUlBDX1FNQ19B VURJTw0KPiArCXRyaXN0YXRlICJRTUMgQUxTQSBTb0Mgc3VwcG9ydCINCj4gKwlkZXBlbmRzIG9u IENQTV9RTUMNCj4gKwloZWxwDQo+ICsJICBBTFNBIFNvQyBBdWRpbyBzdXBwb3J0IHVzaW5nIHRo ZSBGcmVlc2NhbGUgUVVJQ0MgTXVsdGljaGFubmVsDQo+ICsJICBDb250cm9sbGVyIChRTUMpLg0K PiArCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlv IHVzaW5nIEZyZWVzY2FsZQ0KPiArCSAgUU1DLg0KPiArDQo+ICAgY29tbWVudCAiU29DIEF1ZGlv IHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBQUEMgYm9hcmRzOiINCj4gICANCj4gICBjb25maWcgU05E X1NPQ19NUEM4NjEwX0hQQ0QNCj4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvTWFrZWZpbGUg Yi9zb3VuZC9zb2MvZnNsL01ha2VmaWxlDQo+IGluZGV4IGI1NGJlYjFhNjZmYS4uOGRiN2U5N2Qw YmQ1IDEwMDY0NA0KPiAtLS0gYS9zb3VuZC9zb2MvZnNsL01ha2VmaWxlDQo+ICsrKyBiL3NvdW5k L3NvYy9mc2wvTWFrZWZpbGUNCj4gQEAgLTI4LDYgKzI4LDcgQEAgc25kLXNvYy1mc2wtZWFzcmMt b2JqcyA6PSBmc2xfZWFzcmMubw0KPiAgIHNuZC1zb2MtZnNsLXhjdnItb2JqcyA6PSBmc2xfeGN2 ci5vDQo+ICAgc25kLXNvYy1mc2wtYXVkMmh0eC1vYmpzIDo9IGZzbF9hdWQyaHR4Lm8NCj4gICBz bmQtc29jLWZzbC1ycG1zZy1vYmpzIDo9IGZzbF9ycG1zZy5vDQo+ICtzbmQtc29jLWZzbC1xbWMt YXVkaW8tb2JqcyA6PSBmc2xfcW1jX2F1ZGlvLm8NCj4gICANCj4gICBvYmotJChDT05GSUdfU05E X1NPQ19GU0xfQVVETUlYKSArPSBzbmQtc29jLWZzbC1hdWRtaXgubw0KPiAgIG9iai0kKENPTkZJ R19TTkRfU09DX0ZTTF9BU09DX0NBUkQpICs9IHNuZC1zb2MtZnNsLWFzb2MtY2FyZC5vDQo+IEBA IC00NCw2ICs0NSw3IEBAIG9iai0kKENPTkZJR19TTkRfU09DX1BPV0VSUENfRE1BKSArPSBzbmQt c29jLWZzbC1kbWEubw0KPiAgIG9iai0kKENPTkZJR19TTkRfU09DX0ZTTF9YQ1ZSKSArPSBzbmQt c29jLWZzbC14Y3ZyLm8NCj4gICBvYmotJChDT05GSUdfU05EX1NPQ19GU0xfQVVEMkhUWCkgKz0g c25kLXNvYy1mc2wtYXVkMmh0eC5vDQo+ICAgb2JqLSQoQ09ORklHX1NORF9TT0NfRlNMX1JQTVNH KSArPSBzbmQtc29jLWZzbC1ycG1zZy5vDQo+ICtvYmotJChDT05GSUdfU05EX1NPQ19QT1dFUlBD X1FNQ19BVURJTykgKz0gc25kLXNvYy1mc2wtcW1jLWF1ZGlvLm8NCj4gICANCj4gICAjIE1QQzUy MDAgUGxhdGZvcm0gU3VwcG9ydA0KPiAgIG9iai0kKENPTkZJR19TTkRfTVBDNTJ4eF9ETUEpICs9 IG1wYzUyMDBfZG1hLm8NCj4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3FtY19hdWRp by5jIGIvc291bmQvc29jL2ZzbC9mc2xfcW1jX2F1ZGlvLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi43Y2JiOGU0NzU4Y2MNCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9xbWNfYXVkaW8uYw0KPiBAQCAtMCwwICsxLDczNSBA QA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gKy8qDQo+ICsgKiBB TFNBIFNvQyB1c2luZyB0aGUgUVVJQ0MgTXVsdGljaGFubmVsIENvbnRyb2xsZXIgKFFNQykNCj4g KyAqDQo+ICsgKiBDb3B5cmlnaHQgMjAyMiBDUyBHUk9VUCBGcmFuY2UNCj4gKyAqDQo+ICsgKiBB dXRob3I6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29tPg0KPiArICovDQo+ ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv b2ZfcGxhdGZvcm0uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ICsjaW5jbHVkZSA8c29jL2ZzbC9xZS9xbWMuaD4N Cj4gKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+DQo+ICsjaW5jbHVkZSA8c291bmQvc29j Lmg+DQo+ICsNCj4gK3N0cnVjdCBxbWNfZGFpIHsNCj4gKwljaGFyICpuYW1lOw0KPiArCWludCBp ZDsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJc3RydWN0IHFtY19jaGFuICpxbWNfY2hh bjsNCj4gKwl1bnNpZ25lZCBpbnQgbmJfdHhfdHM7DQo+ICsJdW5zaWduZWQgaW50IG5iX3J4X3Rz Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IHFtY19hdWRpbyB7DQo+ICsJc3RydWN0IGRldmljZSAq ZGV2Ow0KPiArCXVuc2lnbmVkIGludCBudW1fZGFpczsNCj4gKwlzdHJ1Y3QgcW1jX2RhaSAqZGFp czsNCj4gKwlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkYWlfZHJpdmVyczsNCj4gK307DQo+ ICsNCj4gK3N0cnVjdCBxbWNfZGFpX3BydGQgew0KPiArCXN0cnVjdCBxbWNfZGFpICpxbWNfZGFp Ow0KPiArCWRtYV9hZGRyX3QgZG1hX2J1ZmZlcl9zdGFydDsNCj4gKwlkbWFfYWRkcl90IHBlcmlv ZF9wdHJfc3VibWl0dGVkOw0KPiArCWRtYV9hZGRyX3QgcGVyaW9kX3B0cl9lbmRlZDsNCj4gKwlk bWFfYWRkcl90IGRtYV9idWZmZXJfZW5kOw0KPiArCXNpemVfdCBwZXJpb2Rfc2l6ZTsNCj4gKwlz dHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBpbnQgcW1jX2F1ZGlvX3BjbV9jb25zdHJ1Y3Qoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpj b21wb25lbnQsDQo+ICsJCQkJICAgc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkNCj4g K3sNCj4gKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQtPnNuZF9jYXJkOw0KPiAr CWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KGNh cmQtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCXNuZF9wY21fc2V0X21hbmFnZWRfYnVmZmVyX2FsbChydGQtPnBjbSwgU05E UlZfRE1BX1RZUEVfREVWLCBjYXJkLT5kZXYsDQo+ICsJCQkJICAgICAgIDY0KjEwMjQsIDY0KjEw MjQpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19hdWRpb19w Y21faHdfcGFyYW1zKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50LA0KPiArCQkJ CSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLA0KPiArCQkJCSAgIHN0cnVj dCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQ0KPiArew0KPiArCXN0cnVjdCBzbmRfcGNtX3J1 bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7DQo+ICsJc3RydWN0IHFtY19kYWlf cHJ0ZCAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOw0KPiArDQo+ICsJ cHJ0ZC0+ZG1hX2J1ZmZlcl9zdGFydCA9IHJ1bnRpbWUtPmRtYV9hZGRyOw0KPiArCXBydGQtPmRt YV9idWZmZXJfZW5kID0gcnVudGltZS0+ZG1hX2FkZHIgKyBwYXJhbXNfYnVmZmVyX2J5dGVzKHBh cmFtcyk7DQo+ICsJcHJ0ZC0+cGVyaW9kX3NpemUgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFt cyk7DQo+ICsJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQgPSBwcnRkLT5kbWFfYnVmZmVyX3N0 YXJ0Ow0KPiArCXBydGQtPnBlcmlvZF9wdHJfZW5kZWQgPSBwcnRkLT5kbWFfYnVmZmVyX3N0YXJ0 Ow0KPiArCXBydGQtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsNCj4gKw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBxbWNfYXVkaW9fcGNtX3dyaXRlX2NvbXBsZXRlKHZv aWQgKmNvbnRleHQpDQo+ICt7DQo+ICsJc3RydWN0IHFtY19kYWlfcHJ0ZCAqcHJ0ZCA9IGNvbnRl eHQ7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXBydGQtPnBlcmlvZF9wdHJfZW5kZWQgKz0gcHJ0 ZC0+cGVyaW9kX3NpemU7DQo+ICsJaWYgKHBydGQtPnBlcmlvZF9wdHJfZW5kZWQgPj0gcHJ0ZC0+ ZG1hX2J1ZmZlcl9lbmQpDQo+ICsJCXBydGQtPnBlcmlvZF9wdHJfZW5kZWQgPSBwcnRkLT5kbWFf YnVmZmVyX3N0YXJ0Ow0KPiArDQo+ICsJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQgKz0gcHJ0 ZC0+cGVyaW9kX3NpemU7DQo+ICsJaWYgKHBydGQtPnBlcmlvZF9wdHJfc3VibWl0dGVkID49IHBy dGQtPmRtYV9idWZmZXJfZW5kKQ0KPiArCQlwcnRkLT5wZXJpb2RfcHRyX3N1Ym1pdHRlZCA9IHBy dGQtPmRtYV9idWZmZXJfc3RhcnQ7DQo+ICsNCj4gKwlyZXQgPSBxbWNfY2hhbl93cml0ZV9zdWJt aXQocHJ0ZC0+cW1jX2RhaS0+cW1jX2NoYW4sDQo+ICsJCXBydGQtPnBlcmlvZF9wdHJfc3VibWl0 dGVkLCBwcnRkLT5wZXJpb2Rfc2l6ZSwNCj4gKwkJcW1jX2F1ZGlvX3BjbV93cml0ZV9jb21wbGV0 ZSwgcHJ0ZCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKHBydGQtPnFtY19kYWktPmRl diwgIndyaXRlX3N1Ym1pdCBmYWlsZWQgJWRcbiIsDQo+ICsJCQlyZXQpOw0KPiArCX0NCj4gKw0K PiArCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQocHJ0ZC0+c3Vic3RyZWFtKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgcW1jX2F1ZGlvX3BjbV9yZWFkX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQs IHNpemVfdCBsZW5ndGgpDQo+ICt7DQo+ICsJc3RydWN0IHFtY19kYWlfcHJ0ZCAqcHJ0ZCA9IGNv bnRleHQ7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmIChsZW5ndGggIT0gcHJ0ZC0+cGVyaW9k X3NpemUpIHsNCj4gKwkJZGV2X2VycihwcnRkLT5xbWNfZGFpLT5kZXYsICJyZWFkIGNvbXBsZXRl IGxlbmd0aCA9ICV6dSwgZXhwICV6dVxuIiwNCj4gKwkJCWxlbmd0aCwgcHJ0ZC0+cGVyaW9kX3Np emUpOw0KPiArCX0NCj4gKw0KPiArCXBydGQtPnBlcmlvZF9wdHJfZW5kZWQgKz0gcHJ0ZC0+cGVy aW9kX3NpemU7DQo+ICsJaWYgKHBydGQtPnBlcmlvZF9wdHJfZW5kZWQgPj0gcHJ0ZC0+ZG1hX2J1 ZmZlcl9lbmQpDQo+ICsJCXBydGQtPnBlcmlvZF9wdHJfZW5kZWQgPSBwcnRkLT5kbWFfYnVmZmVy X3N0YXJ0Ow0KPiArDQo+ICsJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQgKz0gcHJ0ZC0+cGVy aW9kX3NpemU7DQo+ICsJaWYgKHBydGQtPnBlcmlvZF9wdHJfc3VibWl0dGVkID49IHBydGQtPmRt YV9idWZmZXJfZW5kKQ0KPiArCQlwcnRkLT5wZXJpb2RfcHRyX3N1Ym1pdHRlZCA9IHBydGQtPmRt YV9idWZmZXJfc3RhcnQ7DQo+ICsNCj4gKwlyZXQgPSBxbWNfY2hhbl9yZWFkX3N1Ym1pdChwcnRk LT5xbWNfZGFpLT5xbWNfY2hhbiwNCj4gKwkJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQsIHBy dGQtPnBlcmlvZF9zaXplLA0KPiArCQlxbWNfYXVkaW9fcGNtX3JlYWRfY29tcGxldGUsIHBydGQp Ow0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihwcnRkLT5xbWNfZGFpLT5kZXYsICJyZWFk X3N1Ym1pdCBmYWlsZWQgJWRcbiIsDQo+ICsJCQlyZXQpOw0KPiArCX0NCj4gKw0KPiArCXNuZF9w Y21fcGVyaW9kX2VsYXBzZWQocHJ0ZC0+c3Vic3RyZWFtKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBxbWNfYXVkaW9fcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21w b25lbnQsDQo+ICsJCQkJIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQg Y21kKQ0KPiArew0KPiArCXN0cnVjdCBxbWNfZGFpX3BydGQgKnBydGQgPSBzdWJzdHJlYW0tPnJ1 bnRpbWUtPnByaXZhdGVfZGF0YTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJaWYgKCFwcnRkLT5x bWNfZGFpKSB7DQo+ICsJCWRldl9lcnIoY29tcG9uZW50LT5kZXYsICJxbWNfZGFpIGlzIG5vdCBz ZXRcbiIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlzd2l0Y2ggKGNt ZCkgew0KPiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6DQo+ICsJCWlmIChzdWJzdHJl YW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7DQo+ICsJCQkvKiBTdWJt aXQgZmlyc3QgY2h1bmsgLi4uICovDQo+ICsJCQlyZXQgPSBxbWNfY2hhbl93cml0ZV9zdWJtaXQo cHJ0ZC0+cW1jX2RhaS0+cW1jX2NoYW4sDQo+ICsJCQkJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0 ZWQsIHBydGQtPnBlcmlvZF9zaXplLA0KPiArCQkJCXFtY19hdWRpb19wY21fd3JpdGVfY29tcGxl dGUsIHBydGQpOw0KPiArCQkJaWYgKHJldCkgew0KPiArCQkJCWRldl9lcnIoY29tcG9uZW50LT5k ZXYsICJ3cml0ZV9zdWJtaXQgZmFpbGVkICVkXG4iLA0KPiArCQkJCQlyZXQpOw0KPiArCQkJCXJl dHVybiByZXQ7DQo+ICsJCQl9DQo+ICsNCj4gKwkJCS8qIC4uLiBwcmVwYXJlIG5leHQgb25lIC4u LiAqLw0KPiArCQkJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQgKz0gcHJ0ZC0+cGVyaW9kX3Np emU7DQo+ICsJCQlpZiAocHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQgPj0gcHJ0ZC0+ZG1hX2J1 ZmZlcl9lbmQpDQo+ICsJCQkJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQgPSBwcnRkLT5kbWFf YnVmZmVyX3N0YXJ0Ow0KPiArDQo+ICsJCQkvKiAuLi4gYW5kIHNlbmQgaXQgKi8NCj4gKwkJCXJl dCA9IHFtY19jaGFuX3dyaXRlX3N1Ym1pdChwcnRkLT5xbWNfZGFpLT5xbWNfY2hhbiwNCj4gKwkJ CQlwcnRkLT5wZXJpb2RfcHRyX3N1Ym1pdHRlZCwgcHJ0ZC0+cGVyaW9kX3NpemUsDQo+ICsJCQkJ cW1jX2F1ZGlvX3BjbV93cml0ZV9jb21wbGV0ZSwgcHJ0ZCk7DQo+ICsJCQlpZiAocmV0KSB7DQo+ ICsJCQkJZGV2X2Vycihjb21wb25lbnQtPmRldiwgIndyaXRlX3N1Ym1pdCBmYWlsZWQgJWRcbiIs DQo+ICsJCQkJCXJldCk7DQo+ICsJCQkJcmV0dXJuIHJldDsNCj4gKwkJCX0NCj4gKwkJfSBlbHNl IHsNCj4gKwkJCS8qIFN1Ym1pdCBmaXJzdCBjaHVuayAuLi4gKi8NCj4gKwkJCXJldCA9IHFtY19j aGFuX3JlYWRfc3VibWl0KHBydGQtPnFtY19kYWktPnFtY19jaGFuLA0KPiArCQkJCXBydGQtPnBl cmlvZF9wdHJfc3VibWl0dGVkLCBwcnRkLT5wZXJpb2Rfc2l6ZSwNCj4gKwkJCQlxbWNfYXVkaW9f cGNtX3JlYWRfY29tcGxldGUsIHBydGQpOw0KPiArCQkJaWYgKHJldCkgew0KPiArCQkJCWRldl9l cnIoY29tcG9uZW50LT5kZXYsICJyZWFkX3N1Ym1pdCBmYWlsZWQgJWRcbiIsDQo+ICsJCQkJCXJl dCk7DQo+ICsJCQkJcmV0dXJuIHJldDsNCj4gKwkJCX0NCj4gKw0KPiArCQkJLyogLi4uIHByZXBh cmUgbmV4dCBvbmUgLi4uICovDQo+ICsJCQlwcnRkLT5wZXJpb2RfcHRyX3N1Ym1pdHRlZCArPSBw cnRkLT5wZXJpb2Rfc2l6ZTsNCj4gKwkJCWlmIChwcnRkLT5wZXJpb2RfcHRyX3N1Ym1pdHRlZCA+ PSBwcnRkLT5kbWFfYnVmZmVyX2VuZCkNCj4gKwkJCQlwcnRkLT5wZXJpb2RfcHRyX3N1Ym1pdHRl ZCA9IHBydGQtPmRtYV9idWZmZXJfc3RhcnQ7DQo+ICsNCj4gKwkJCS8qIC4uLiBhbmQgc2VuZCBp dCAqLw0KPiArCQkJcmV0ID0gcW1jX2NoYW5fcmVhZF9zdWJtaXQocHJ0ZC0+cW1jX2RhaS0+cW1j X2NoYW4sDQo+ICsJCQkJcHJ0ZC0+cGVyaW9kX3B0cl9zdWJtaXR0ZWQsIHBydGQtPnBlcmlvZF9z aXplLA0KPiArCQkJCXFtY19hdWRpb19wY21fcmVhZF9jb21wbGV0ZSwgcHJ0ZCk7DQo+ICsJCQlp ZiAocmV0KSB7DQo+ICsJCQkJZGV2X2Vycihjb21wb25lbnQtPmRldiwgIndyaXRlX3N1Ym1pdCBm YWlsZWQgJWRcbiIsDQo+ICsJCQkJCXJldCk7DQo+ICsJCQkJcmV0dXJuIHJldDsNCj4gKwkJCX0N Cj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVT VU1FOg0KPiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToNCj4gKwkJYnJl YWs7DQo+ICsNCj4gKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6DQo+ICsJY2FzZSBTTkRS Vl9QQ01fVFJJR0dFUl9TVVNQRU5EOg0KPiArCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0Vf UFVTSDoNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHNuZF9w Y21fdWZyYW1lc190IHFtY19hdWRpb19wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3NvY19jb21wb25l bnQgKmNvbXBvbmVudCwNCj4gKwkJCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq c3Vic3RyZWFtKQ0KPiArew0KPiArCXN0cnVjdCBxbWNfZGFpX3BydGQgKnBydGQgPSBzdWJzdHJl YW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsNCj4gKw0KPiArCXJldHVybiBieXRlc190b19mcmFt ZXMoc3Vic3RyZWFtLT5ydW50aW1lLA0KPiArCQkJICAgICAgIHBydGQtPnBlcmlvZF9wdHJfZW5k ZWQgLSBwcnRkLT5kbWFfYnVmZmVyX3N0YXJ0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBx bWNfYXVkaW9fb2ZfeGxhdGVfZGFpX25hbWUoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21w b25lbnQsDQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmFyZ3MsDQo+ICsJ CQkJCWNvbnN0IGNoYXIgKipkYWlfbmFtZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX2F1ZGlvICpx bWNfYXVkaW8gPSBkZXZfZ2V0X2RydmRhdGEoY29tcG9uZW50LT5kZXYpOw0KPiArCXN0cnVjdCBz bmRfc29jX2RhaV9kcml2ZXIgKmRhaV9kcml2ZXI7DQo+ICsJaW50IGlkID0gYXJncy0+YXJnc1sw XTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgIDwgcW1jX2F1ZGlvLT5udW1f ZGFpczsgaSsrKSB7DQo+ICsJCWRhaV9kcml2ZXIgPSBxbWNfYXVkaW8tPmRhaV9kcml2ZXJzICsg aTsNCj4gKwkJaWYgKGRhaV9kcml2ZXItPmlkID09IGlkKSB7DQo+ICsJCQkqZGFpX25hbWUgPSBk YWlfZHJpdmVyLT5uYW1lOw0KPiArCQkJcmV0dXJuIDA7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gLUVJTlZBTDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRf cGNtX2hhcmR3YXJlIHFtY19hdWRpb19wY21faGFyZHdhcmUgPSB7DQo+ICsJLmluZm8JCQk9IFNO RFJWX1BDTV9JTkZPX01NQVAgfA0KPiArCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8 DQo+ICsJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8DQo+ICsJCQkJICBTTkRSVl9Q Q01fSU5GT19QQVVTRSwNCj4gKwkucGVyaW9kX2J5dGVzX21pbgk9IDMyLA0KPiArCS5wZXJpb2Rf Ynl0ZXNfbWF4CT0gNjQqMTAyNCwNCj4gKwkucGVyaW9kc19taW4JCT0gMiwNCj4gKwkucGVyaW9k c19tYXgJCT0gMioxMDI0LA0KPiArCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQqMTAyNCwNCj4gK307 DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX2F1ZGlvX3BjbV9vcGVuKHN0cnVjdCBzbmRfc29jX2Nv bXBvbmVudCAqY29tcG9uZW50LA0KPiArCQkJICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW0pDQo+ICt7DQo+ICsJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9 IHN1YnN0cmVhbS0+cnVudGltZTsNCj4gKwlzdHJ1Y3QgcW1jX2RhaV9wcnRkICpwcnRkOw0KPiAr CWludCByZXQ7DQo+ICsNCj4gKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVh bSwgJnFtY19hdWRpb19wY21faGFyZHdhcmUpOw0KPiArDQo+ICsJLyogZW5zdXJlIHRoYXQgYnVm ZmVyIHNpemUgaXMgYSBtdWx0aXBsZSBvZiBwZXJpb2Qgc2l6ZSAqLw0KPiArCXJldCA9IHNuZF9w Y21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJ T0RTKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXBydGQg PSBremFsbG9jKHNpemVvZigqcHJ0ZCksIEdGUF9LRVJORUwpOw0KPiArCWlmIChwcnRkID09IE5V TEwpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJcnVudGltZS0+cHJpdmF0ZV9kYXRh ID0gcHJ0ZDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFt Y19hdWRpb19wY21fY2xvc2Uoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQsDQo+ ICsJCQkgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pDQo+ICt7DQo+ ICsJc3RydWN0IHFtY19kYWlfcHJ0ZCAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0 ZV9kYXRhOw0KPiArDQo+ICsJa2ZyZWUocHJ0ZCk7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIHFtY19hdWRp b19zb2NfcGxhdGZvcm0gPSB7DQo+ICsJLm9wZW4JCQk9IHFtY19hdWRpb19wY21fb3BlbiwNCj4g KwkuY2xvc2UJCQk9IHFtY19hdWRpb19wY21fY2xvc2UsDQo+ICsJLmh3X3BhcmFtcwkJPSBxbWNf YXVkaW9fcGNtX2h3X3BhcmFtcywNCj4gKwkudHJpZ2dlcgkJPSBxbWNfYXVkaW9fcGNtX3RyaWdn ZXIsDQo+ICsJLnBvaW50ZXIJCT0gcW1jX2F1ZGlvX3BjbV9wb2ludGVyLA0KPiArCS5wY21fY29u c3RydWN0CQk9IHFtY19hdWRpb19wY21fY29uc3RydWN0LA0KPiArCS5vZl94bGF0ZV9kYWlfbmFt ZQk9IHFtY19hdWRpb19vZl94bGF0ZV9kYWlfbmFtZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB1 bnNpZ25lZCBpbnQgcW1jX2RhaV9nZXRfaW5kZXgoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpDQo+ ICt7DQo+ICsJc3RydWN0IHFtY19hdWRpbyAqcW1jX2F1ZGlvID0gc25kX3NvY19kYWlfZ2V0X2Ry dmRhdGEoZGFpKTsNCj4gKw0KPiArCXJldHVybiBkYWktPmRyaXZlciAtIHFtY19hdWRpby0+ZGFp X2RyaXZlcnM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcW1jX2RhaSAqcW1jX2RhaV9n ZXRfZGF0YShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX2F1 ZGlvICpxbWNfYXVkaW8gPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOw0KPiArCXVuc2ln bmVkIGludCBpbmRleDsNCj4gKw0KPiArCWluZGV4ID0gcW1jX2RhaV9nZXRfaW5kZXgoZGFpKTsN Cj4gKwlpZiAoaW5kZXggPiBxbWNfYXVkaW8tPm51bV9kYWlzKQ0KPiArCQlyZXR1cm4gTlVMTDsN Cj4gKw0KPiArCXJldHVybiBxbWNfYXVkaW8tPmRhaXMgKyBpbmRleDsNCj4gK30NCj4gKw0KPiAr LyoNCj4gKyAqIFRoZSBjb25zdHJhaW50cyBmb3IgZm9ybWF0L2NoYW5uZWwgaXMgdG8gbWF0Y2gg d2l0aCB0aGUgbnVtYmVyIG9mIDhiaXQNCj4gKyAqIHRpbWUtc2xvdHMgYXZhaWxhYmxlLg0KPiAr ICovDQo+ICtzdGF0aWMgaW50IHFtY19kYWlfaHdfcnVsZV9jaGFubmVsc19ieV9mb3JtYXQoc3Ry dWN0IHFtY19kYWkgKnFtY19kYWksDQo+ICsJCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3Bh cmFtcyAqcGFyYW1zLA0KPiArCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbmJfdHMpDQo+ICt7DQo+ ICsJc3RydWN0IHNuZF9pbnRlcnZhbCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywgU05E UlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsNCj4gKwlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCA9 IHBhcmFtc19mb3JtYXQocGFyYW1zKTsNCj4gKwlzdHJ1Y3Qgc25kX2ludGVydmFsIGNoID0gezB9 Ow0KPiArDQo+ICsJc3dpdGNoIChzbmRfcGNtX2Zvcm1hdF9waHlzaWNhbF93aWR0aChmb3JtYXQp KSB7DQo+ICsJY2FzZSA4Og0KPiArCQljaC5tYXggPSBuYl90czsNCj4gKwkJYnJlYWs7DQo+ICsJ Y2FzZSAxNjoNCj4gKwkJY2gubWF4ID0gbmJfdHMvMjsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAz MjoNCj4gKwkJY2gubWF4ID0gbmJfdHMvNDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSA2NDoNCj4g KwkJY2gubWF4ID0gbmJfdHMvODsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJZGV2 X2VycihxbWNfZGFpLT5kZXYsICJmb3JtYXQgcGh5c2ljYWwgd2lkdGggJXUgbm90IHN1cHBvcnRl ZFxuIiwNCj4gKwkJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKGZvcm1hdCkpOw0KPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwljaC5taW4gPSBjaC5tYXggPyAxIDog MDsNCj4gKw0KPiArCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZjaCk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpbnQgcW1jX2RhaV9od19ydWxlX3BsYXliYWNrX2NoYW5uZWxzX2J5X2Zv cm1hdChzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywNCj4gKwkJCQkJCSAgICAgICBz dHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQ0KPiArew0KPiArCXN0cnVjdCBxbWNfZGFpICpx bWNfZGFpID0gcnVsZS0+cHJpdmF0ZTsNCj4gKw0KPiArCXJldHVybiBxbWNfZGFpX2h3X3J1bGVf Y2hhbm5lbHNfYnlfZm9ybWF0KHFtY19kYWksIHBhcmFtcywgcW1jX2RhaS0+bmJfdHhfdHMpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19kYWlfaHdfcnVsZV9jYXB0dXJlX2NoYW5uZWxz X2J5X2Zvcm1hdCgNCj4gKwkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLA0KPiAr CQkJc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX2Rh aSAqcW1jX2RhaSA9IHJ1bGUtPnByaXZhdGU7DQo+ICsNCj4gKwlyZXR1cm4gcW1jX2RhaV9od19y dWxlX2NoYW5uZWxzX2J5X2Zvcm1hdChxbWNfZGFpLCBwYXJhbXMsIHFtY19kYWktPm5iX3J4X3Rz KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfZGFpX2h3X3J1bGVfZm9ybWF0X2J5X2No YW5uZWxzKHN0cnVjdCBxbWNfZGFpICpxbWNfZGFpLA0KPiArCQkJCQkgICAgICBzdHJ1Y3Qgc25k X3BjbV9od19wYXJhbXMgKnBhcmFtcywNCj4gKwkJCQkJICAgICAgdW5zaWduZWQgaW50IG5iX3Rz KQ0KPiArew0KPiArCXN0cnVjdCBzbmRfbWFzayAqZl9vbGQgPSBod19wYXJhbV9tYXNrKHBhcmFt cywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7DQo+ICsJdW5zaWduZWQgaW50IGNoYW5uZWxz ID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7DQo+ICsJdW5zaWduZWQgaW50IHNsb3Rfd2lkdGg7 DQo+ICsJc3RydWN0IHNuZF9tYXNrIGZfbmV3Ow0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ ICsJaWYgKCFjaGFubmVscyB8fCBjaGFubmVscyA+IG5iX3RzKSB7DQo+ICsJCWRldl9lcnIocW1j X2RhaS0+ZGV2LCAiY2hhbm5lbHMgJXUgbm90IHN1cHBvcnRlZFxuIiwNCj4gKwkJCW5iX3RzKTsN Cj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJc2xvdF93aWR0aCA9IChuYl90 cyAvIGNoYW5uZWxzKSAqIDg7DQo+ICsNCj4gKwlzbmRfbWFza19ub25lKCZmX25ldyk7DQo+ICsJ Zm9yIChpID0gMDsgaSA8PSBTTkRSVl9QQ01fRk9STUFUX0xBU1Q7IGkrKykgew0KPiArCQlpZiAo c25kX21hc2tfdGVzdChmX29sZCwgaSkpIHsNCj4gKwkJCWlmIChzbmRfcGNtX2Zvcm1hdF9waHlz aWNhbF93aWR0aChpKSA8PSBzbG90X3dpZHRoKQ0KPiArCQkJCXNuZF9tYXNrX3NldCgmZl9uZXcs IGkpOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHNuZF9tYXNrX3JlZmluZShmX29s ZCwgJmZfbmV3KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfZGFpX2h3X3J1bGVfcGxh eWJhY2tfZm9ybWF0X2J5X2NoYW5uZWxzKA0KPiArCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1z ICpwYXJhbXMsDQo+ICsJCQlzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQ0KPiArew0KPiAr CXN0cnVjdCBxbWNfZGFpICpxbWNfZGFpID0gcnVsZS0+cHJpdmF0ZTsNCj4gKw0KPiArCXJldHVy biBxbWNfZGFpX2h3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzKHFtY19kYWksIHBhcmFtcywgcW1j X2RhaS0+bmJfdHhfdHMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHFtY19kYWlfaHdfcnVs ZV9jYXB0dXJlX2Zvcm1hdF9ieV9jaGFubmVscygNCj4gKwkJCXN0cnVjdCBzbmRfcGNtX2h3X3Bh cmFtcyAqcGFyYW1zLA0KPiArCQkJc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkNCj4gK3sN Cj4gKwlzdHJ1Y3QgcW1jX2RhaSAqcW1jX2RhaSA9IHJ1bGUtPnByaXZhdGU7DQo+ICsNCj4gKwly ZXR1cm4gcW1jX2RhaV9od19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscyhxbWNfZGFpLCBwYXJhbXMs IHFtY19kYWktPm5iX3J4X3RzKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBxbWNfZGFpX3N0 YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sDQo+ICsJCQkgICAgIHN0 cnVjdCBzbmRfc29jX2RhaSAqZGFpKQ0KPiArew0KPiArCXN0cnVjdCBxbWNfZGFpX3BydGQgKnBy dGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsNCj4gKwlzbmRfcGNtX2h3X3J1 bGVfZnVuY190IGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0Ow0KPiArCXNuZF9wY21faHdfcnVs ZV9mdW5jX3QgaHdfcnVsZV9mb3JtYXRfYnlfY2hhbm5lbHM7DQo+ICsJc3RydWN0IHFtY19kYWkg KnFtY19kYWk7DQo+ICsJdW5zaWduZWQgaW50IGZyYW1lX2JpdHM7DQo+ICsJaW50IHJldDsNCj4g Kw0KPiArCXFtY19kYWkgPSBxbWNfZGFpX2dldF9kYXRhKGRhaSk7DQo+ICsJaWYgKCFxbWNfZGFp KSB7DQo+ICsJCWRldl9lcnIoZGFpLT5kZXYsICJJbnZhbGlkIGRhaVxuIik7DQo+ICsJCXJldHVy biAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCXBydGQtPnFtY19kYWkgPSBxbWNfZGFpOw0KPiAr DQo+ICsJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkg ew0KPiArCQlod19ydWxlX2NoYW5uZWxzX2J5X2Zvcm1hdCA9IHFtY19kYWlfaHdfcnVsZV9jYXB0 dXJlX2NoYW5uZWxzX2J5X2Zvcm1hdDsNCj4gKwkJaHdfcnVsZV9mb3JtYXRfYnlfY2hhbm5lbHMg PSBxbWNfZGFpX2h3X3J1bGVfY2FwdHVyZV9mb3JtYXRfYnlfY2hhbm5lbHM7DQo+ICsJCWZyYW1l X2JpdHMgPSBxbWNfZGFpLT5uYl9yeF90cyAqIDg7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaHdfcnVs ZV9jaGFubmVsc19ieV9mb3JtYXQgPSBxbWNfZGFpX2h3X3J1bGVfcGxheWJhY2tfY2hhbm5lbHNf YnlfZm9ybWF0Ow0KPiArCQlod19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscyA9IHFtY19kYWlfaHdf cnVsZV9wbGF5YmFja19mb3JtYXRfYnlfY2hhbm5lbHM7DQo+ICsJCWZyYW1lX2JpdHMgPSBxbWNf ZGFpLT5uYl90eF90cyAqIDg7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gc25kX3BjbV9od19ydWxl X2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywN Cj4gKwkJCQkgIGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0LCBxbWNfZGFpLA0KPiArCQkJCSAg U05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwgLTEpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2 X2VycihkYWktPmRldiwgIkZhaWxlZCB0byBhZGQgY2hhbm5lbHMgcnVsZSAoJWQpXG4iLCByZXQp Ow0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IHNuZF9wY21faHdfcnVs ZV9hZGQoc3Vic3RyZWFtLT5ydW50aW1lLCAwLCAgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwN Cj4gKwkJCQkgIGh3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzLCBxbWNfZGFpLA0KPiArCQkJCSAg U05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlk ZXZfZXJyKGRhaS0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBmb3JtYXQgcnVsZSAoJWQpXG4iLCByZXQp Ow0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IHNuZF9wY21faHdfY29u c3RyYWludF9zaW5nbGUoc3Vic3RyZWFtLT5ydW50aW1lLA0KPiArCQkJCQkgICBTTkRSVl9QQ01f SFdfUEFSQU1fRlJBTUVfQklUUywNCj4gKwkJCQkJICAgZnJhbWVfYml0cyk7DQo+ICsJaWYgKHJl dCA8IDApIHsNCj4gKwkJZGV2X2VycihkYWktPmRldiwgIkZhaWxlZCB0byBhZGQgZnJhbWVfYml0 cyBjb25zdHJhaW50ICglZClcbiIsIHJldCk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcW1jX2RhaV9od19wYXJh bXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sDQo+ICsJCQkgICAgIHN0cnVj dCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLA0KPiArCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19k YWkgKmRhaSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcW1jX2NoYW5fcGFyYW0gY2hhbl9wYXJhbSA9IHsw fTsNCj4gKwlzdHJ1Y3QgcW1jX2RhaSAqcW1jX2RhaTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJ cW1jX2RhaSA9IHFtY19kYWlfZ2V0X2RhdGEoZGFpKTsNCj4gKwlpZiAoIXFtY19kYWkpIHsNCj4g KwkJZGV2X2VycihkYWktPmRldiwgIkludmFsaWQgZGFpXG4iKTsNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9T VFJFQU1fQ0FQVFVSRSkgew0KPiArCQljaGFuX3BhcmFtLm1vZGUgPSBRTUNfVFJBTlNQQVJFTlQ7 DQo+ICsJCWNoYW5fcGFyYW0udHJhbnNwLm1heF9yeF9idWZfc2l6ZSA9IHBhcmFtc19wZXJpb2Rf Ynl0ZXMocGFyYW1zKTsNCj4gKwkJcmV0ID0gcW1jX2NoYW5fc2V0X3BhcmFtKHFtY19kYWktPnFt Y19jaGFuLCAmY2hhbl9wYXJhbSk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCWRldl9lcnIoZGFp LT5kZXYsICJzZXQgcGFyYW0gZmFpbGVkICVkXG4iLA0KPiArCQkJCXJldCk7DQo+ICsJCQlyZXR1 cm4gcmV0Ow0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgcW1jX2RhaV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vi c3RyZWFtLCBpbnQgY21kLA0KPiArCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpDQo+ICt7 DQo+ICsJc3RydWN0IHFtY19kYWkgKnFtY19kYWk7DQo+ICsJaW50IGRpcmVjdGlvbjsNCj4gKwlp bnQgcmV0Ow0KPiArDQo+ICsJcW1jX2RhaSA9IHFtY19kYWlfZ2V0X2RhdGEoZGFpKTsNCj4gKwlp ZiAoIXFtY19kYWkpIHsNCj4gKwkJZGV2X2VycihkYWktPmRldiwgIkludmFsaWQgZGFpXG4iKTsN Cj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJZGlyZWN0aW9uID0gKHN1YnN0 cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spID8NCj4gKwkJICAgIFFN Q19DSEFOX1dSSVRFIDogUU1DX0NIQU5fUkVBRDsNCj4gKw0KPiArCXN3aXRjaCAoY21kKSB7DQo+ ICsJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoNCj4gKwljYXNlIFNORFJWX1BDTV9UUklH R0VSX1JFU1VNRToNCj4gKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6DQo+ ICsJCXJldCA9IHFtY19jaGFuX3N0YXJ0KHFtY19kYWktPnFtY19jaGFuLCBkaXJlY3Rpb24pOw0K PiArCQlpZiAocmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwlj YXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6DQo+ICsJCXJldCA9IHFtY19jaGFuX3N0b3AocW1j X2RhaS0+cW1jX2NoYW4sIGRpcmVjdGlvbik7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4g cmV0Ow0KPiArCQlyZXQgPSBxbWNfY2hhbl9yZXNldChxbWNfZGFpLT5xbWNfY2hhbiwgZGlyZWN0 aW9uKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCWJyZWFrOw0KPiAr DQo+ICsJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOg0KPiArCWNhc2UgU05EUlZfUENN X1RSSUdHRVJfUEFVU0VfUFVTSDoNCj4gKwkJcmV0ID0gcW1jX2NoYW5fc3RvcChxbWNfZGFpLT5x bWNfY2hhbiwgZGlyZWN0aW9uKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ ICsJCWJyZWFrOw0KPiArDQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg c25kX3NvY19kYWlfb3BzIHFtY19kYWlfb3BzID0gew0KPiArCS5zdGFydHVwCT0gcW1jX2RhaV9z dGFydHVwLA0KPiArCS50cmlnZ2VyCT0gcW1jX2RhaV90cmlnZ2VyLA0KPiArCS5od19wYXJhbXMJ PSBxbWNfZGFpX2h3X3BhcmFtcywNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB1NjQgcW1jX2F1ZGlv X2Zvcm1hdHModTggbmJfdHMpDQo+ICt7DQo+ICsJdTY0IGZvcm1hdHM7DQo+ICsJdW5zaWduZWQg aW50IGNoYW5fd2lkdGg7DQo+ICsJdW5zaWduZWQgaW50IGZvcm1hdF93aWR0aDsNCj4gKwlpbnQg aTsNCj4gKw0KPiArCWlmICghbmJfdHMpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJZm9ybWF0 cyA9IDA7DQo+ICsJY2hhbl93aWR0aCA9IG5iX3RzICogODsNCj4gKwlmb3IgKGkgPSAwOyBpIDw9 IFNORFJWX1BDTV9GT1JNQVRfTEFTVDsgaSsrKSB7DQo+ICsJCS8qDQo+ICsJCSAqIFN1cHBvcnQg Zm9ybWF0IG90aGVyIHRoYW4gbGl0dGxlLWVuZGlhbiAoaWUgYmlnLWVuZGlhbiBvcg0KPiArCQkg KiB3aXRob3V0IGVuZGlhbm5lc3Mgc3VjaCBhcyA4Yml0IGZvcm1hdHMpDQo+ICsJCSAqLw0KPiAr CQlpZiAoc25kX3BjbV9mb3JtYXRfbGl0dGxlX2VuZGlhbihpKSA9PSAxKQ0KPiArCQkJY29udGlu dWU7DQo+ICsNCj4gKwkJLyogU3VwcG9ydCBwaHlzaWNhbCB3aWR0aCBtdWx0aXBsZSBvZiA4Yml0 ICovDQo+ICsJCWZvcm1hdF93aWR0aCA9IHNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKGkp Ow0KPiArCQlpZiAoZm9ybWF0X3dpZHRoID09IDAgfHwgZm9ybWF0X3dpZHRoICUgOCkNCj4gKwkJ CWNvbnRpbnVlOw0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIEFuZCBzdXBwb3J0IHBoeXNpY2FsIHdp ZHRoIHRoYXQgY2FuIGZpdCBOIHRpbWVzIGluIHRoZQ0KPiArCQkgKiBjaGFubmVsDQo+ICsJCSAq Lw0KPiArCQlpZiAoZm9ybWF0X3dpZHRoID4gY2hhbl93aWR0aCB8fCBjaGFuX3dpZHRoICUgZm9y bWF0X3dpZHRoKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJZm9ybWF0cyB8PSAoMVVMTCA8 PCBpKTsNCj4gKwl9DQo+ICsJcmV0dXJuIGZvcm1hdHM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgcW1jX2F1ZGlvX2RhaV9wYXJzZShzdHJ1Y3QgcW1jX2F1ZGlvICpxbWNfYXVkaW8sIHN0cnVj dCBkZXZpY2Vfbm9kZSAqbnAsDQo+ICsJc3RydWN0IHFtY19kYWkgKnFtY19kYWksIHN0cnVjdCBz bmRfc29jX2RhaV9kcml2ZXIgKnFtY19zb2NfZGFpX2RyaXZlcikNCj4gK3sNCj4gKwlzdHJ1Y3Qg cW1jX2NoYW5faW5mbyBpbmZvOw0KPiArCXUzMiB2YWw7DQo+ICsJaW50IHJldDsNCj4gKw0KPiAr CXFtY19kYWktPmRldiA9IHFtY19hdWRpby0+ZGV2Ow0KPiArDQo+ICsJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIobnAsICJyZWciLCAmdmFsKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRldl9l cnIocW1jX2F1ZGlvLT5kZXYsICIlcE9GOiBmYWlsZWQgdG8gcmVhZCByZWdcbiIsIG5wKTsNCj4g KwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsJcW1jX2RhaS0+aWQgPSB2YWw7DQo+ICsNCj4gKwlx bWNfZGFpLT5uYW1lID0gZGV2bV9rYXNwcmludGYocW1jX2F1ZGlvLT5kZXYsIEdGUF9LRVJORUws ICIlcy4lZCIsDQo+ICsJCQkJICAgICAgIG5wLT5wYXJlbnQtPm5hbWUsIHFtY19kYWktPmlkKTsN Cj4gKw0KPiArCXFtY19kYWktPnFtY19jaGFuID0gZGV2bV9xbWNfY2hhbl9nZXRfYnlwaGFuZGxl KHFtY19hdWRpby0+ZGV2LCBucCwNCj4gKwkJCQkJCQkiZnNsLHFtYy1jaGFuIik7DQo+ICsJaWYg KElTX0VSUihxbWNfZGFpLT5xbWNfY2hhbikpIHsNCj4gKwkJcmV0ID0gUFRSX0VSUihxbWNfZGFp LT5xbWNfY2hhbik7DQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHFtY19hdWRpby0+ZGV2LCBy ZXQsDQo+ICsJCQkJICAgICAiZGFpICVkIGdldCBRTUMgY2hhbm5lbCBmYWlsZWRcbiIsIHFtY19k YWktPmlkKTsNCj4gKwl9DQo+ICsNCj4gKwlxbWNfc29jX2RhaV9kcml2ZXItPmlkID0gcW1jX2Rh aS0+aWQ7DQo+ICsJcW1jX3NvY19kYWlfZHJpdmVyLT5uYW1lID0gcW1jX2RhaS0+bmFtZTsNCj4g Kw0KPiArCXJldCA9IHFtY19jaGFuX2dldF9pbmZvKHFtY19kYWktPnFtY19jaGFuLCAmaW5mbyk7 DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKHFtY19hdWRpby0+ZGV2LCAiZGFpICVkIGdl dCBRTUMgY2hhbm5lbCBpbmZvIGZhaWxlZCAlZFxuIiwNCj4gKwkJCXFtY19kYWktPmlkLCByZXQp Ow0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKwlkZXZfaW5mbyhxbWNfYXVkaW8tPmRldiwg ImRhaSAlZCBRTUMgY2hhbm5lbCBtb2RlICVkLCBuYl90eF90cyAldSwgbmJfcnhfdHMgJXVcbiIs DQo+ICsJCSBxbWNfZGFpLT5pZCwgaW5mby5tb2RlLCBpbmZvLm5iX3R4X3RzLCBpbmZvLm5iX3J4 X3RzKTsNCj4gKw0KPiArCWlmIChpbmZvLm1vZGUgIT0gUU1DX1RSQU5TUEFSRU5UKSB7DQo+ICsJ CWRldl9lcnIocW1jX2F1ZGlvLT5kZXYsICJkYWkgJWQgUU1DIGNoYW4gbW9kZSAlZCBpcyBub3Qg UU1DX1RSQU5TUEFSRU5UXG4iLA0KPiArCQkJcW1jX2RhaS0+aWQsIGluZm8ubW9kZSk7DQo+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKwlxbWNfZGFpLT5uYl90eF90cyA9IGluZm8ubmJf dHhfdHM7DQo+ICsJcW1jX2RhaS0+bmJfcnhfdHMgPSBpbmZvLm5iX3J4X3RzOw0KPiArDQo+ICsJ cW1jX3NvY19kYWlfZHJpdmVyLT5wbGF5YmFjay5jaGFubmVsc19taW4gPSAwOw0KPiArCXFtY19z b2NfZGFpX2RyaXZlci0+cGxheWJhY2suY2hhbm5lbHNfbWF4ID0gMDsNCj4gKwlpZiAocW1jX2Rh aS0+bmJfdHhfdHMpIHsNCj4gKwkJcW1jX3NvY19kYWlfZHJpdmVyLT5wbGF5YmFjay5jaGFubmVs c19taW4gPSAxOw0KPiArCQlxbWNfc29jX2RhaV9kcml2ZXItPnBsYXliYWNrLmNoYW5uZWxzX21h eCA9IHFtY19kYWktPm5iX3R4X3RzOw0KPiArCX0NCj4gKwlxbWNfc29jX2RhaV9kcml2ZXItPnBs YXliYWNrLmZvcm1hdHMgPSBxbWNfYXVkaW9fZm9ybWF0cyhxbWNfZGFpLT5uYl90eF90cyk7DQo+ ICsNCj4gKwlxbWNfc29jX2RhaV9kcml2ZXItPmNhcHR1cmUuY2hhbm5lbHNfbWluID0gMDsNCj4g KwlxbWNfc29jX2RhaV9kcml2ZXItPmNhcHR1cmUuY2hhbm5lbHNfbWF4ID0gMDsNCj4gKwlpZiAo cW1jX2RhaS0+bmJfcnhfdHMpIHsNCj4gKwkJcW1jX3NvY19kYWlfZHJpdmVyLT5jYXB0dXJlLmNo YW5uZWxzX21pbiA9IDE7DQo+ICsJCXFtY19zb2NfZGFpX2RyaXZlci0+Y2FwdHVyZS5jaGFubmVs c19tYXggPSBxbWNfZGFpLT5uYl9yeF90czsNCj4gKwl9DQo+ICsJcW1jX3NvY19kYWlfZHJpdmVy LT5jYXB0dXJlLmZvcm1hdHMgPSBxbWNfYXVkaW9fZm9ybWF0cyhxbWNfZGFpLT5uYl9yeF90cyk7 DQo+ICsNCj4gKwlxbWNfc29jX2RhaV9kcml2ZXItPnBsYXliYWNrLnJhdGVzID0gc25kX3BjbV9y YXRlX3RvX3JhdGVfYml0KGluZm8udHhfZnNfcmF0ZSk7DQo+ICsJcW1jX3NvY19kYWlfZHJpdmVy LT5wbGF5YmFjay5yYXRlX21pbiA9IGluZm8udHhfZnNfcmF0ZTsNCj4gKwlxbWNfc29jX2RhaV9k cml2ZXItPnBsYXliYWNrLnJhdGVfbWF4ID0gaW5mby50eF9mc19yYXRlOw0KPiArCXFtY19zb2Nf ZGFpX2RyaXZlci0+Y2FwdHVyZS5yYXRlcyA9IHNuZF9wY21fcmF0ZV90b19yYXRlX2JpdChpbmZv LnJ4X2ZzX3JhdGUpOw0KPiArCXFtY19zb2NfZGFpX2RyaXZlci0+Y2FwdHVyZS5yYXRlX21pbiA9 IGluZm8ucnhfZnNfcmF0ZTsNCj4gKwlxbWNfc29jX2RhaV9kcml2ZXItPmNhcHR1cmUucmF0ZV9t YXggPSBpbmZvLnJ4X2ZzX3JhdGU7DQo+ICsNCj4gKwlxbWNfc29jX2RhaV9kcml2ZXItPm9wcyA9 ICZxbWNfZGFpX29wczsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IHFtY19hdWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0K PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4gKwlzdHJ1 Y3QgcW1jX2F1ZGlvICpxbWNfYXVkaW87DQo+ICsJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsN Cj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcW1jX2F1ZGlvID0g ZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcW1jX2F1ZGlvKSwgR0ZQX0tFUk5FTCk7 DQo+ICsJaWYgKCFxbWNfYXVkaW8pDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJcW1j X2F1ZGlvLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiArDQo+ICsJcW1jX2F1ZGlvLT5udW1fZGFpcyA9 IG9mX2dldF9hdmFpbGFibGVfY2hpbGRfY291bnQobnApOw0KPiArCWlmIChxbWNfYXVkaW8tPm51 bV9kYWlzKSB7DQo+ICsJCXFtY19hdWRpby0+ZGFpcyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2 LCBxbWNfYXVkaW8tPm51bV9kYWlzLA0KPiArCQkJCQkgICAgICAgc2l6ZW9mKCpxbWNfYXVkaW8t PmRhaXMpLA0KPiArCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7DQo+ICsJCWlmICghcW1jX2F1ZGlv LT5kYWlzKQ0KPiArCQkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwkJcW1jX2F1ZGlvLT5kYWlf ZHJpdmVycyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBxbWNfYXVkaW8tPm51bV9kYWlzLA0K PiArCQkJCQkJICAgICAgc2l6ZW9mKCpxbWNfYXVkaW8tPmRhaV9kcml2ZXJzKSwNCj4gKwkJCQkJ CSAgICAgIEdGUF9LRVJORUwpOw0KPiArCQlpZiAoIXFtY19hdWRpby0+ZGFpX2RyaXZlcnMpDQo+ ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4gKwl9DQo+ICsNCj4gKwlpID0gMDsNCj4gKwlmb3JfZWFj aF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsNCj4gKwkJcmV0ID0gcW1jX2F1 ZGlvX2RhaV9wYXJzZShxbWNfYXVkaW8sIGNoaWxkLA0KPiArCQkJCQkgIHFtY19hdWRpby0+ZGFp cyArIGksDQo+ICsJCQkJCSAgcW1jX2F1ZGlvLT5kYWlfZHJpdmVycyArIGkpOw0KPiArCQlpZiAo cmV0KSB7DQo+ICsJCQlvZl9ub2RlX3B1dChjaGlsZCk7DQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiAr CQl9DQo+ICsJCWkrKzsNCj4gKwl9DQo+ICsNCj4gKw0KPiArCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIHFtY19hdWRpbyk7DQo+ICsNCj4gKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJf Y29tcG9uZW50KHFtY19hdWRpby0+ZGV2LA0KPiArCQkJCQkgICAgICAmcW1jX2F1ZGlvX3NvY19w bGF0Zm9ybSwNCj4gKwkJCQkJICAgICAgcW1jX2F1ZGlvLT5kYWlfZHJpdmVycywNCj4gKwkJCQkJ ICAgICAgcW1jX2F1ZGlvLT5udW1fZGFpcyk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBxbWNfYXVkaW9faWRfdGFibGVbXSA9IHsNCj4gKwl7IC5jb21wYXRpYmxl ID0gImZzbCxxbWMtYXVkaW8iIH0sDQo+ICsJe30gLyogc2VudGluZWwgKi8NCj4gK307DQo+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBxbWNfYXVkaW9faWRfdGFibGUpOw0KPiArDQo+ICtzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxbWNfYXVkaW9fZHJpdmVyID0gew0KPiArCS5kcml2 ZXIgPSB7DQo+ICsJCS5uYW1lID0gImZzbC1xbWMtYXVkaW8iLA0KPiArCQkub2ZfbWF0Y2hfdGFi bGUgPSBvZl9tYXRjaF9wdHIocW1jX2F1ZGlvX2lkX3RhYmxlKSwNCj4gKwl9LA0KPiArCS5wcm9i ZSA9IHFtY19hdWRpb19wcm9iZSwNCj4gK307DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHFt Y19hdWRpb19kcml2ZXIpOw0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJIZXJ2ZSBDb2RpbmEgPGhl cnZlLmNvZGluYUBib290bGluLmNvbT4iKTsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiQ1BNL1FF IFFNQyBhdWRpbyBkcml2ZXIiKTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCg==