Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp737415ybg; Tue, 9 Jun 2020 11:29:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJytzvS/ERnAD4HqFu7M+sxQhzPKePoyPdpzsr5tKMqz6gFGm7Nf6jIpTXyRZon/JquOKkf8 X-Received: by 2002:a50:a721:: with SMTP id h30mr26264197edc.153.1591727394950; Tue, 09 Jun 2020 11:29:54 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1591727394; cv=pass; d=google.com; s=arc-20160816; b=Eq3AC1kbpBK0v84STdOsGZg3ulcuHJg7+sTbuNwVaysETneuiXJbO9AOVOnZna6INZ x5OHDHm+rAoXPe2FBkNidsJd20pTW4RIv2Kz5SdSCciK2K2hEr5s4iWgLbzJmiYpuYbo eOI19gjaMh7OWJiD9SRK2WTVEru5MD2WA+sG8xEDQY4D+YacdUoJ4Vr40u8RnpdMLqY/ U7bDnRvIuld1yl+jaXZilLKCBhf2QkCfPNMSz2p4ux0cMkqhZoWUCoo/Zkj7BU9hSgTq fmBEJrn1wFY3JNNmTOOV8Jw2c7l3xtS1cLlyWqtTejq/eaAS+9zRpB7MfKwhDPKA6K8M xQ/w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=n82/2xMiCkS85nCrh8QCiP5PxrGoH2mLJ2NMFnJtD+k=; b=viJT71rGGtXFx3HJSbbFCCpW2VlrF+SoAi7MqMiJg1Jcifw0vIJPWUEUm+5JgHR3Xz ptfINrgZV/6NQIvvmmyBS6e8oOF2woX+tlu0iky1MXvxfx5DgiVolfmkeJOEE0oMURvV znM37ZGi4ziPQWdLNznZrZltmeL2zktUJJz+1KxkT1rU8VgBJz09RUfDwpRy2DCGAp+D 4dtuAffcS2QDAoKyDBnM7UDfN3yBHXHYb5wsDVsSxuYFD+WmtP/VF+pK2BbqMQ7OJlFg MSYM/2EylWRm1IQwsHofaANDJQh+rY8gAdACpDeZxV12EgN4HZ5Z2NQ579K/447Fw70s wy1w== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=Pd5Bpbds; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sb15si11419848ejb.478.2020.06.09.11.29.30; Tue, 09 Jun 2020 11:29:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=Pd5Bpbds; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389135AbgFISYY (ORCPT + 99 others); Tue, 9 Jun 2020 14:24:24 -0400 Received: from mail-eopbgr750089.outbound.protection.outlook.com ([40.107.75.89]:17984 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2389093AbgFISYP (ORCPT ); Tue, 9 Jun 2020 14:24:15 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Azlj3TcqVAe1dBveRt478XMMV1wCjgsul6t7Q8Q1Oiwz1d7gGbUZjirebbhq0j41urUdKpM0yu9jVVZxDcQ71dGpBHmSBVWPzhybxuK++83Bk5puKF5Aduq77JEsnHG2JY0+l3p+zwjJYqlpJzEwpMgk6+CiL2xk1K61SvdhgVpRRhr03kHGs+UcO5xEahnHPRNVkGaQzIxDCJGMUGvVcLzGmCYMyEYIuLcLbI8cHHyZbobSIPAzOHUaKD61pXskWrcsuCVTBEALMiTCOiRBBQ0tESNgxBK97M0jOtPYPyA+W27YqXa+NJlxvPvs87TSuoRVc9D7c/pvofn7IZ1Btw== 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-SenderADCheck; bh=n82/2xMiCkS85nCrh8QCiP5PxrGoH2mLJ2NMFnJtD+k=; b=FOLq8lkly/a1/TPcP+dHITOT46pfW3dgzIi5Xa4HRXfKkXx67gBYgrC5Nxlc9+8x49kRA/Imjg3iEqoktnBrK/dZq2/QuJJ42+Yd0h3YlqFsdozQU8lhThBDfUi9hB4AgUQ+Yar1TnDyFGHCqrKS9tt1YKawYOlgEIrjLe8X0Dnv+dPd+2tX7wv2/JBCcX0RZAr4zvjbruL9kMX90Y0hNrDBjQVa8h7g7FRSkx9ETFjbOs1ZQKuscUbRjt59b1rA0dR92fx1DzgC/AaL6mOttP/yRzdMqIn6A9V6GCvRV6uHxSDyWPUnhcWOU8LiXfSy6RpksIgyq3J0YU1rp78chQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=xilinx.com; dmarc=pass action=none header.from=xilinx.com; dkim=pass header.d=xilinx.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n82/2xMiCkS85nCrh8QCiP5PxrGoH2mLJ2NMFnJtD+k=; b=Pd5BpbdssERGVyVQ8eZeRQBigV24xYsxmSoIpLabdBM7zgCLMo6gLzg6YjmbIYTvmXL1/CxyTdZBK3z0fttxGSkB4Bxhr8M8nKtshmHo9cW58dvXLbJHBCojRP1GyUR+GFNNtPeIm4F9PdBG+6+GpGHucHv1WZNAnO8eRlV+jdA= Received: from BY5PR02MB6867.namprd02.prod.outlook.com (2603:10b6:a03:21c::9) by BY5PR02MB6212.namprd02.prod.outlook.com (2603:10b6:a03:1f6::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.18; Tue, 9 Jun 2020 18:23:44 +0000 Received: from BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::307b:d6d0:221d:9550]) by BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::307b:d6d0:221d:9550%8]) with mapi id 15.20.3066.023; Tue, 9 Jun 2020 18:23:44 +0000 From: Vishal Sagar To: Laurent Pinchart CC: Hyun Kwon , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Joe Perches Subject: RE: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Topic: [PATCH v2 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Index: AQHWHjEiqUZz1pXhF0WpN20jJIL4b6ibNOkAgCnD6rA= Date: Tue, 9 Jun 2020 18:23:43 +0000 Message-ID: References: <20200429141705.18755-1-vishal.sagar@xilinx.com> <20200429141705.18755-3-vishal.sagar@xilinx.com> <20200506151142.GA15206@pendragon.ideasonboard.com> In-Reply-To: <20200506151142.GA15206@pendragon.ideasonboard.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: ideasonboard.com; dkim=none (message not signed) header.d=none;ideasonboard.com; dmarc=none action=none header.from=xilinx.com; x-originating-ip: [223.230.54.177] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: e7bb3f04-7a76-4897-ec7c-08d80ca23e4d x-ms-traffictypediagnostic: BY5PR02MB6212: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 042957ACD7 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: g+QwAze2D/Xg9CrYKj8WzF0bbO0Vz3oVAwDyhoJcvmnuBfjfqRX7UnlqcF7zNTP3b8yq2xYF66PTHns5/5tMbnyPJy+LhzZ/Vd8+r1OdeMdXIN1bYFic+rHJUJQTHzBnb8iNVl4O+clEQDmb0z65SJvPgiJpgO8oMD72G+RCq2itpuWSjWH7cugeAxwnEslCvzJB8+eF0syeMMFuGueFoaed3etJDW42p8xRVBLv0MmV4EuNYe5LmqdePL41yNUaufRrTLElT0TgzLk1qdJCs9dFqe86dQkU+6Y2ZfZHNM0Qoh4zJLMkhY2ADL/YB5RDgb4u27RKI3fa+vKWm2BZWK/rWhFD2mIgmhJxWId8O7QBTrAZhL2MTZQSRMO/mHJopKmcTmEV4xByumDqb3sIk8fPViUSeZTEnIfZXH7AxOOD0tMGLbrcDb3jHnUqU+YK x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR02MB6867.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(366004)(39850400004)(396003)(346002)(376002)(136003)(55016002)(71200400001)(7416002)(8676002)(8936002)(19627235002)(316002)(54906003)(2906002)(186003)(966005)(33656002)(86362001)(478600001)(76116006)(53546011)(4326008)(6506007)(52536014)(26005)(5660300002)(6916009)(7696005)(9686003)(66476007)(66556008)(30864003)(83380400001)(66946007)(64756008)(66446008)(579004)(569008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: A/Rs1QkVWM8zTWz4ZwDkGMRXb4DDjND0xTESLqgr32RuarepcfKOSFQ1ulz3fZ4Y5lUiVB2KKGVVkXGGq6JgyJPBEPsnB+CV2Q+n1iFEjmFX35yNumqrKySbvLndCyhEcCvoiVYkOhUsfeFZqEN19qqdEbptY7wruNRIox1In7gFC+wIL78CQHloZT/qos/QjdGsLXfyie8l4AvQGBdclVnaTjEAjUT7NChpdHSP8ODc4jLJERB3w32Td/dzwSMBWsrl1DRYCPn7L8c7STcdyMdY+GiAmQMZEkhxktK2cixCAImH6K4vaeAeBjSgmk0dHfhuURDb69xT3bkyCQ5u1DvwurxHyXg8f1lxQKkFezf284al/m5DOvHe2ifMwfFX0rbz+/9/C+82IZ6LhDYRXu20e3I+hamubYJ7/wlJt41Fo2aJSbUysE7XooqqesXLrSix2zjz7iRZY+lBUB1dAvHryF3SsMo3/ReaYhPmQU4tBZKp4zvNXYWMIsy9s1Wk Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7bb3f04-7a76-4897-ec7c-08d80ca23e4d X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jun 2020 18:23:44.0373 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 8wyCJUcwC63duU/ir6OMJ5UvToPwgV4RmhS62XboinyOHogmoVl01CKrVt6Mh6sv0815B5z+fRTVs4YU6H19Qw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB6212 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTGF1cmVudA0KDQpUaGFua3MgZm9yIHRoZSByZXZpZXcuDQoNCj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gRnJvbTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBp ZGVhc29uYm9hcmQuY29tPg0KPiBTZW50OiBXZWRuZXNkYXksIE1heSA2LCAyMDIwIDg6NDIgUE0N Cj4gVG86IFZpc2hhbCBTYWdhciA8dnNhZ2FyQHhpbGlueC5jb20+DQo+IENjOiBIeXVuIEt3b24g PGh5dW5rQHhpbGlueC5jb20+OyBtY2hlaGFiQGtlcm5lbC5vcmc7DQo+IHJvYmgrZHRAa2VybmVs Lm9yZzsgbWFyay5ydXRsYW5kQGFybS5jb207IE1pY2hhbCBTaW1law0KPiA8bWljaGFsc0B4aWxp bnguY29tPjsgbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnOw0KPiBkZXZpY2V0cmVlQHZnZXIu a2VybmVsLm9yZzsgaGFucy52ZXJrdWlsQGNpc2NvLmNvbTsgbGludXgtYXJtLQ0KPiBrZXJuZWxA bGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgRGluZXNo IEt1bWFyDQo+IDxkaW5lc2hrQHhpbGlueC5jb20+OyBTYW5kaXAgS290aGFyaSA8c2FuZGlwa0B4 aWxpbnguY29tPjsgSm9lIFBlcmNoZXMNCj4gPGpvZUBwZXJjaGVzLmNvbT4NCj4gU3ViamVjdDog UmU6IFtQQVRDSCB2MiAyLzJdIG1lZGlhOiB2NGw6IHhpbGlueDogQWRkIFhpbGlueCBVSEQtU0RJ IFJ4IFN1YnN5c3RlbQ0KPiBkcml2ZXINCj4gDQo+IEhpIFZpc2hhbCwNCj4gDQo+IFRoYW5rIHlv dSBmb3IgdGhlIHBhdGNoLg0KPiANCj4gVGhlcmUgYXJlIGEgZmV3IHF1ZXN0aW9ucyBmb3IgSGFu cyBiZWxvdy4NCj4gDQo+IE9uIFdlZCwgQXByIDI5LCAyMDIwIGF0IDA3OjQ3OjA0UE0gKzA1MzAs IFZpc2hhbCBTYWdhciB3cm90ZToNCj4gPiBUaGUgWGlsaW54IFVIRC1TREkgUnggc3Vic3lzdGVt IHNvZnQgSVAgaXMgdXNlZCB0byBjYXB0dXJlIG5hdGl2ZSBTREkNCj4gPiBzdHJlYW1zIGZyb20g U0RJIHNvdXJjZXMgbGlrZSBTREkgYnJvYWRjYXN0IGVxdWlwbWVudCBsaWtlIGNhbWVyYXMgYW5k DQo+ID4gbWl4ZXJzLiBUaGlzIGJsb2NrIG91dHB1dHMgZWl0aGVyIG5hdGl2ZSBTREksIG5hdGl2 ZSB2aWRlbyBvcg0KPiA+IEFYSTQtU3RyZWFtIGNvbXBsaWFudCBkYXRhIHN0cmVhbSBmb3IgZnVy dGhlciBwcm9jZXNzaW5nLiBQbGVhc2UgcmVmZXINCj4gPiB0byBQRzI5MCBmb3IgZGV0YWlscy4N Cj4gPg0KPiA+IFRoZSBkcml2ZXIgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIElQIHRvIGFkZCBm cmFtZXIsIHNlYXJjaCBmb3INCj4gPiBzcGVjaWZpYyBtb2RlcywgZ2V0IHRoZSBkZXRlY3RlZCBt b2RlLCBzdHJlYW0gcGFyYW1ldGVycywgZXJyb3JzLCBldGMuDQo+ID4gSXQgYWxzbyBnZW5lcmF0 ZXMgZXZlbnRzIGZvciB2aWRlbyBsb2NrL3VubG9jaywgYnJpZGdlIG92ZXIvdW5kZXIgZmxvdy4N Cj4gPg0KPiA+IFRoZSBkcml2ZXIgc3VwcG9ydHMgMTAvMTIgYnBjIFlVViA0MjIgbWVkaWEgYnVz IGZvcm1hdCBjdXJyZW50bHkuIEl0IGFsc28NCj4gPiBkZWNvZGVzIHRoZSBzdHJlYW0gcGFyYW1l dGVycyBiYXNlZCBvbiB0aGUgU1QzNTIgcGFja2V0IGVtYmVkZGVkIGluIHRoZQ0KPiA+IHN0cmVh bS4gSW4gY2FzZSB0aGUgU1QzNTIgcGFja2V0IGlzbid0IHByZXNlbnQgaW4gdGhlIHN0cmVhbSwg dGhlIGNvcmUncw0KPiA+IGRldGVjdGVkIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gc2V0IHN0cmVh bSBwcm9wZXJ0aWVzLg0KPiANCj4gQXMgY29tbWVudGVkIG9uIHBhdGNoIDEvMiwgSSBkb24ndCBz ZWUgYSBtZW50aW9uIG9mIDEyIGJwYyBpbiB0aGUNCj4gZG9jdW1lbnRhdGlvbi4gTGV0J3MgZGlz Y3VzcyBpdCBhcyBwYXJ0IG9mIHBhdGNoIDEvMi4NCj4gDQoNCk9rLg0KDQo+ID4gVGhlIGRyaXZl ciBjdXJyZW50bHkgc3VwcG9ydHMgb25seSB0aGUgQVhJNC1TdHJlYW0gSVAgY29uZmlndXJhdGlv bi4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhp bGlueC5jb20+DQo+ID4gLS0tDQo+ID4gdjINCj4gPiAtIEFkZGVkIERWIHRpbWluZyBzdXBwb3J0 IGJhc2VkIG9uIEhhbnMgVmVya3VpbMWbIGZlZWRiYWNrDQo+ID4gLSBNb3JlIGRvY3VtZW50YXRp b24gdG8gY3VzdG9tIHY0bCBjb250cm9scyBhbmQgZXZlbnRzDQo+ID4gLSBGaXhlZCBIeXVuxZsg Y29tbWVudHMNCj4gPiAtIEFkZGVkIG1hY3JvIGZvciBtYXNraW5nIGFuZCBzaGlmdGluZyBhcyBw ZXIgSm9lIFBlcmNoZXMgY29tbWVudHMNCj4gPiAtIFVwZGF0ZWQgdG8gbGF0ZXN0IGFzIHBlciBY aWxpbnggZ2l0aHViIHJlcG8gZHJpdmVyIGxpa2UNCj4gPiAgIGFkZGluZyBuZXcgRFYgdGltaW5n cyBub3QgaW4gbWFpbmxpbmUgeWV0IHVwdGlsbCAwMy8yMS8yMA0KPiA+DQo+ID4gIGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcgICAgICAgICB8ICAgMTEgKw0KPiA+ICBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZSAgICAgICAgfCAgICAxICsNCj4gPiAg Li4uL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5jICAgIHwgMjE2MiArKysr KysrKysrKysrKysrKw0KPiA+ICBpbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXNkaXJ4c3MuaCAg ICAgICAgICAgfCAgMTc5ICsrDQo+ID4gIGluY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1j b250cm9scy5oICAgICB8ICAgNjcgKw0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDI0MjAgaW5zZXJ0 aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94 aWxpbngveGlsaW54LXNkaXJ4c3MuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91 YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNzLmgNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS94aWxpbngvS2NvbmZpZw0KPiA+IGluZGV4IDAxYzk2ZmI2NjQxNC4uNzcwOTEzMThhOWM5IDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4g PiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ID4gQEAgLTEy LDYgKzEyLDE3IEBAIGNvbmZpZyBWSURFT19YSUxJTlgNCj4gPg0KPiA+ICBpZiBWSURFT19YSUxJ TlgNCj4gPg0KPiA+ICtjb25maWcgVklERU9fWElMSU5YX1NESVJYU1MNCj4gPiArCXRyaXN0YXRl ICJYaWxpbnggVUhEIFNESSBSeCBTdWJzeXN0ZW0iDQo+ID4gKwloZWxwDQo+ID4gKwkgIERyaXZl ciBmb3IgWGlsaW54IFVIRC1TREkgUnggU3Vic3lzdGVtLiBUaGlzIGlzIGEgVjRMIHN1Yi1kZXZp Y2UNCj4gPiArCSAgYmFzZWQgZHJpdmVyIHRoYXQgdGFrZXMgaW5wdXQgZnJvbSBhIFNESSBzb3Vy Y2UgbGlrZSBTREkgY2FtZXJhIGFuZA0KPiA+ICsJICBjb252ZXJ0cyBpdCBpbnRvIGFuIEFYSTQt U3RyZWFtLiBUaGUgc3Vic3lzdGVtIGNvbXByaXNlcyBvZiBhIFNNUFRFDQo+IA0KPiBzL2NvbXBy aXNlcyBvZi9jb21wcmlzZXMvDQo+IA0KDQpPayBJIHdpbGwgZml4IHRoaXMgaW4gdjMuDQoNCj4g PiArCSAgVUhELVNESSBSeCBjb3JlLCBhIFNESSBSeCB0byBOYXRpdmUgVmlkZW8gYnJpZGdlIGFu ZCBhIFZpZGVvIEluIHRvDQo+ID4gKwkgIEFYSTQtU3RyZWFtIGJyaWRnZS4gVGhlIGRyaXZlciBp cyB1c2VkIHRvIHNldCBkaWZmZXJlbnQgc3RyZWFtDQo+ID4gKwkgIGRldGVjdGlvbiBtb2RlcyBh bmQgaWRlbnRpZnkgc3RyZWFtIHByb3BlcnRpZXMgdG8gcHJvcGVybHkgY29uZmlndXJlDQo+ID4g KwkgIGRvd25zdHJlYW0uDQo+ID4gKw0KPiA+ICBjb25maWcgVklERU9fWElMSU5YX1RQRw0KPiA+ ICAJdHJpc3RhdGUgIlhpbGlueCBWaWRlbyBUZXN0IFBhdHRlcm4gR2VuZXJhdG9yIg0KPiA+ICAJ ZGVwZW5kcyBvbiBWSURFT19YSUxJTlgNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlu eC9NYWtlZmlsZQ0KPiA+IGluZGV4IDRjZGMwYjFlYzdhNS4uNmMzNzVmMDNmNTg3IDEwMDY0NA0K PiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlDQo+ID4gKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gPiBAQCAtMiw2ICsy LDcgQEANCj4gPg0KPiA+ICB4aWxpbngtdmlkZW8tb2JqcyArPSB4aWxpbngtZG1hLm8geGlsaW54 LXZpcC5vIHhpbGlueC12aXBwLm8NCj4gPg0KPiA+ICtvYmotJChDT05GSUdfVklERU9fWElMSU5Y X1NESVJYU1MpICs9IHhpbGlueC1zZGlyeHNzLm8NCj4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX1hJ TElOWCkgKz0geGlsaW54LXZpZGVvLm8NCj4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX1hJTElOWF9U UEcpICs9IHhpbGlueC10cGcubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fWElMSU5YX1ZUQykg Kz0geGlsaW54LXZ0Yy5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v eGlsaW54L3hpbGlueC1zZGlyeHNzLmMNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlu eC94aWxpbngtc2Rpcnhzcy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLmM1MzZlYTNhYWEwZA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5jDQo+ID4gQEAgLTAs MCArMSwyMTYyIEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ ID4gKy8qDQo+ID4gKyAqIERyaXZlciBmb3IgWGlsaW54IFNESSBSeCBTdWJzeXN0ZW0NCj4gPiAr ICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAyMCBYaWxpbngsIEluYy4NCj4gPiAr ICoNCj4gPiArICogQ29udGFjdHM6IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhpbGlueC5j b20+DQo+ID4gKyAqDQo+IA0KPiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsYW5rIGxpbmUuDQo+IA0K QWdyZWUuIEkgd2lsbCByZW1vdmUgdGhpcyBpbiB2My4NCg0KPiA+ICsgKi8NCj4gPiArDQo+ID4g KyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9tZWRpYS94aWxpbngtdmlwLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9iaXRvcHMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gDQo+IFlvdSBuZWFybHkgZ290IHRoZSBhbHBoYWJl dGljYWwgb3JkZXIgcmlnaHQgOy0pDQo+IA0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4N Cj4gDQo+IE5vIHVzZSBvZiBkZWxheSBvciBzbGVlcCBmdW5jdGlvbnMgaW4gdGhlIGNvZGUsIGlz IHRoaXMgbmVlZGVkID8NCj4gDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gDQo+ IFlvdSBjYW4gcHJvYmFibHkgZHJvcCB0aGlzIG9uZSBhcyB5b3UgaW5jbHVkZSBwbGF0Zm9ybV9k ZXZpY2UuaC4NCj4gDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPg0KPiANCj4gSSBkb24ndCB0aGluayBvZl9pcnEg aXMgbmVlZGVkIGVpdGhlci4NCj4gDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvc3BpbmxvY2tfdHlwZXMuaD4NCj4gDQo+IFRoZSBkcml2ZXIgZG9lc24ndCBzZWVtcyB0 byB1c2Ugc3BpbmxvY2tzLCB5b3UgY2FuIHJlbW92ZSB0aG9zZSB0d28NCj4gaGVhZGVycy4NCj4g DQo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdjRs Mi1kdi10aW1pbmdzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC92NGwyLXN1YmRldi5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgveGlsaW54LXNkaXJ4c3MuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L3hpbGlueC12NGwyLWNvbnRyb2xzLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS9tZWRpYS1lbnRp dHkuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+DQo+ID4gKyNpbmNsdWRl IDxtZWRpYS92NGwyLWN0cmxzLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+ DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPg0KPiA+ICsjaW5jbHVkZSA8bWVk aWEvdjRsMi1zdWJkZXYuaD4NCj4gPiArI2luY2x1ZGUgInhpbGlueC12aXAuaCINCj4gPiArDQoN Ckkgd2lsbCBmaXggdGhlIGhlYWRlcnMgbGlzdCBieSByZW1vdmluZyB1bm5lY2Vzc2FyeSBpbmNs dWRlcw0KDQo+ID4gKy8qDQo+ID4gKyAqIFNESSBSeCByZWdpc3RlciBtYXAsIGJpdG1hc2sgYW5k IG9mZnNldHMNCj4gPiArICovDQo+ID4gKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1JFRwkJMHgw MA0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9SRUcJCTB4MDQNCj4gPiArI2RlZmluZSBY U0RJUlhfR0xCTF9JRVJfUkVHCQkweDBDDQo+ID4gKyNkZWZpbmUgWFNESVJYX0lTUl9SRUcJCQkw eDEwDQo+ID4gKyNkZWZpbmUgWFNESVJYX0lFUl9SRUcJCQkweDE0DQo+ID4gKyNkZWZpbmUgWFNE SVJYX1NUMzUyX1ZBTElEX1JFRwkJMHgxOA0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzFf UkVHCQkweDFDDQo+IA0KPiBDb3VsZCB5b3UgdXNlIGxvd2VyLWNhc2UgaGV4IHZhbHVlcyA/IFRo YXQncyB0aGUgbW9zdCBjb21tb24gb3B0aW9uIGluDQo+IGtlcm5lbCBjb2RlLiBJZiB5b3UgdXNl IHZpbSwNCj4gDQo+IDolcy9cPDB4WzAtOUEtRl1cK1w+L1xMXDAvDQo+IA0KPiBJJ20gc3VyZSB0 aGVyZSdzIGFuIGVtYWNzIGVxdWl2YWxlbnQgOi0pDQo+IA0KW1Zpc2hhbCBTYWdhcl0gDQoNClN1 cmUgSSB3aWxsIGNoYW5nZSB0aGlzLiBUaGFua3MgZm9yIHNoYXJpbmcgdGhlIHJlZ2V4IHRvIGRv IHRoYXQuDQpJIHVzZSB2aW0g8J+YiiANCg0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzNf UkVHCQkweDIwDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTNV9SRUcJCTB4MjQNCj4gPiAr I2RlZmluZSBYU0RJUlhfU1QzNTJfRFM3X1JFRwkJMHgyOA0KPiA+ICsjZGVmaW5lIFhTRElSWF9T VDM1Ml9EUzlfUkVHCQkweDJDDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTFfUkVHCQkw eDMwDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX0RTMTNfUkVHCQkweDM0DQo+ID4gKyNkZWZp bmUgWFNESVJYX1NUMzUyX0RTMTVfUkVHCQkweDM4DQo+ID4gKyNkZWZpbmUgWFNESVJYX1ZFUlNJ T05fUkVHCQkweDNDDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NTX0NPTkZJR19SRUcJCTB4NDANCj4g PiArI2RlZmluZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcJMHg0NA0KPiA+ICsjZGVmaW5lIFhT RElSWF9UU19ERVRfU1RBVF9SRUcJCTB4NDgNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX1NUQVRf UkVHCQkweDRDDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRU5fUkVHCTB4NTANCj4g PiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9SRUcJCTB4NTQNCj4gPiArI2RlZmluZSBYU0RJ UlhfQ1JDX0VSUkNOVF9SRUcJCTB4NTgNCj4gPiArI2RlZmluZSBYU0RJUlhfVklEX0xPQ0tfV0lO RE9XX1JFRwkweDVDDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NCX1JYX1NUU19SRUcJCTB4NjANCj4g PiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX1JTVF9DVFJMX1NTX0VOX01BU0sJCQlCSVQoMCkNCj4g PiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfU1JTVF9NQVNLCQkJQklUKDEpDQo+ID4gKyNkZWZp bmUgWFNESVJYX1JTVF9DVFJMX1JTVF9DUkNfRVJSQ05UX01BU0sJCUJJVCgyKQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9SU1RfQ1RSTF9SU1RfRURIX0VSUkNOVF9NQVNLCQlCSVQoMykNCj4gPiArI2Rl ZmluZSBYU0RJUlhfUlNUX0NUUkxfU0RJUlhfQlJJREdFX0VOQl9NQVNLCQlCSVQoOCkNCj4gPiAr I2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJNFNfTU9EX0VOQl9NQVNLCUJJVCg5KQ0K PiA+ICsjZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9CUklER0VfQ0hfRk1UX09GRlNFVAkJMTANCj4g PiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfQlJJREdFX0NIX0ZNVF9NQVNLCQlHRU5NQVNLKDEy LA0KPiAxMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfQlJJREdFX0NIX0ZNVF9ZVVY0 NDQJCTENCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX0ZSTV9FTl9NQVNLCQlC SVQoNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9ERVRfRU5fTUFTSwlCSVQo NSkNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9IRF9FTl9NQVNLCQlCSVQoOCkN Cj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9TRF9FTl9NQVNLCQlCSVQoOSkNCj4g PiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV8zR19FTl9NQVNLCQlCSVQoMTApDQo+ID4g KyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfNkdfRU5fTUFTSwkJQklUKDExKQ0KPiA+ICsj ZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0lfRU5fTUFTSwlCSVQoMTIpDQo+ID4gKyNk ZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfMTJHRl9FTl9NQVNLCUJJVCgxMykNCj4gPiArI2Rl ZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRPX0RFVF9NQVNLCUdFTk1BU0soMTMsDQo+IDgp DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9GT1JDRURfTU9ERV9PRkZTRVQJ MTYNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfTUFTSwlHRU5NQVNL KDE4LCAxNikNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX0dMQkxfSU5UUl9FTl9NQVNLCUJJ VCgwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfSU5UUl9WSURMT0NLX01BU0sJQklUKDAp DQo+ID4gKyNkZWZpbmUgWFNESVJYX0lOVFJfVklEVU5MT0NLX01BU0sJQklUKDEpDQo+ID4gKyNk ZWZpbmUgWFNESVJYX0lOVFJfT1ZFUkZMT1dfTUFTSwlCSVQoOSkNCj4gPiArI2RlZmluZSBYU0RJ UlhfSU5UUl9VTkRFUkZMT1dfTUFTSwlCSVQoMTApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElS WF9JTlRSX0FMTF9NQVNLCShYU0RJUlhfSU5UUl9WSURMT0NLX01BU0sgfFwNCj4gPiArCQkJCVhT RElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLIHxcDQo+ID4gKwkJCQlYU0RJUlhfSU5UUl9PVkVSRkxP V19NQVNLIHxcDQo+ID4gKwkJCQlYU0RJUlhfSU5UUl9VTkRFUkZMT1dfTUFTSykNCj4gPiArDQo+ ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMV9NQVNLCUJJVCgwKQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzNfTUFTSwlCSVQoMSkNCj4gPiArI2RlZmluZSBYU0RJ UlhfU1QzNTJfVkFMSURfRFM1X01BU0sJQklUKDIpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUy X1ZBTElEX0RTN19NQVNLCUJJVCgzKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9E UzlfTUFTSwlCSVQoNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfVkFMSURfRFMxMV9NQVNL CUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9WQUxJRF9EUzEzX01BU0sJQklUKDYp DQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUyX1ZBTElEX0RTMTVfTUFTSwlCSVQoNykNCj4gPiAr DQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfREVUX1NUQVRfUlhfTU9ERV9NQVNLCUdFTk1BU0so MiwgMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9NT0RFX0xPQ0tfTUFTSwlC SVQoMykNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RSRUFNX01BU0sJ R0VOTUFTSyg2LA0KPiA0KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFX0RFVF9TVEFUX0FDVF9T VFJFQU1fT0ZGU0VUCTQNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9MVkxCXzNH X01BU0sJQklUKDcpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9MT0NL RURfTUFTSwkJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1NDQU5fTUFT SwkJQklUKDEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX1RTX0RFVF9TVEFUX1NDQU5fT0ZGU0VUCQko MSkNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfRkFNSUxZX01BU0sJCUdFTk1BU0so NywNCj4gNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfRkFNSUxZX09GRlNFVAko NCkNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV9NQVNLCQlHRU5NQVNLKDEx LCA4KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFX09GRlNFVAkJKDgpDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFX05PTkUJCTB4MA0KPiA+ ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzIzXzk4SFoJCTB4Mg0KPiA+ICsjZGVm aW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFoJCTB4Mw0KPiA+ICsjZGVmaW5lIFhTRElS WF9UU19ERVRfU1RBVF9SQVRFXzQ3Xzk1SFoJCTB4NA0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19E RVRfU1RBVF9SQVRFXzI1SFoJCTB4NQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9S QVRFXzI5Xzk3SFoJCTB4Ng0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMw SFoJCTB4Nw0KPiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzQ4SFoJCTB4OA0K PiA+ICsjZGVmaW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzUwSFoJCTB4OQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzU5Xzk0SFoJCTB4QQ0KPiA+ICsjZGVmaW5lIFhT RElSWF9UU19ERVRfU1RBVF9SQVRFXzYwSFoJCTB4Qg0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJ UlhfRURIX1NUQVRfRURIX0FQX01BU0sJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9T VEFUX0VESF9GRl9NQVNLCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9FREhf QU5DX01BU0sJQklUKDIpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX0FQX0ZMQUdfTUFT SwlHRU5NQVNLKDgsIDQpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX0ZGX0ZMQUdfTUFT SwlHRU5NQVNLKDEzLCA5KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9BTkNfRkxBR19N QVNLCUdFTk1BU0soMTgsIDE0KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfU1RBVF9QS1RfRkxB R19NQVNLCUdFTk1BU0soMjIsIDE5KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VS UkNOVF9DT1VOVF9NQVNLCUdFTk1BU0soMTUsIDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElS WF9DUkNfRVJSQ05UX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMTYpDQo+ID4gKyNkZWZpbmUgWFNE SVJYX0NSQ19FUlJDTlRfRFNfQ1JDX01BU0sJR0VOTUFTSygxNSwgMCkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgWFNESVJYX1ZFUlNJT05fUkVWX01BU0sJCUdFTk1BU0soNywgMCkNCj4gPiArI2RlZmlu ZSBYU0RJUlhfVkVSU0lPTl9QQVRDSElEX01BU0sJR0VOTUFTSygxMSwgOCkNCj4gPiArI2RlZmlu ZSBYU0RJUlhfVkVSU0lPTl9WRVJfUkVWX01BU0sJR0VOTUFTSygxNSwgMTIpDQo+ID4gKyNkZWZp bmUgWFNESVJYX1ZFUlNJT05fVkVSX01JTl9NQVNLCUdFTk1BU0soMjMsIDE2KQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9WRVJTSU9OX1ZFUl9NQUpfTUFTSwlHRU5NQVNLKDMxLCAyNCkNCj4gPiArDQo+ ID4gKyNkZWZpbmUgWFNESVJYX1NTX0NPTkZJR19FREhfSU5DTFVERURfTUFTSwkJQklUKDEpDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVEFUX1NCX1JYX1REQVRBX0NIQU5HRV9ET05FX01B U0sJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUQVRfU0JfUlhfVERBVEFfQ0hBTkdFX0ZB SUxfTUFTSwlCSVQoMSkNCj4gPiArI2RlZmluZSBYU0RJUlhfU1RBVF9TQl9SWF9UREFUQV9HVF9S RVNFVERPTkVfTUFTSwlCSVQoMikNCj4gPiArI2RlZmluZSBYU0RJUlhfU1RBVF9TQl9SWF9UREFU QV9HVF9CSVRSQVRFX01BU0sJCUJJVCgzKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfREVG QVVMVF9XSURUSAkoMTkyMCkNCj4gDQo+IE5vIG5lZWQgZm9yIHBhcmVudGhlc2VzIGFyb3VuZCBp bnRlZ2VyIHZhbHVlcyBpbiBtYWNyb3MuDQo+IA0KDQpJIHdpbGwgcmVtb3ZlIHRoZXNlIGluIG5l eHQgdmVyc2lvbi4NCg0KPiA+ICsjZGVmaW5lIFhTRElSWF9ERUZBVUxUX0hFSUdIVAkoMTA4MCkN Cj4gPiArDQo+ID4gKyNkZWZpbmUgWFNESVJYX01BWF9TVFJfTEVOR1RICTE2DQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFhTRElSWFNTX1NESV9TVERfM0cJCTANCj4gPiArI2RlZmluZSBYU0RJUlhTU19T RElfU1REXzZHCQkxDQo+ID4gKyNkZWZpbmUgWFNESVJYU1NfU0RJX1NURF8xMkdfOERTCTINCj4g DQo+IFNob3VsZCB0aGVzZSB0aHJlZSBjb25zdGFudHMgYmUgcGxhY2VkIGluIGFuIGVudW0gPyBU aGUNCj4geHNkaXJ4c3NfY29yZS5tb2RlIGZpZWxkIHdvdWxkIHRoZW4gYmVjb21lIGFuIGVudW0u DQo+IA0KDQpJIHdpbGwgZ2V0IGNvcmUtPm1vZGUgZGlyZWN0bHkgZnJvbSBkdC1iaW5kaW5ncy4g U28gZW51bSB0eXBlIHdvbid0IGJlIG5lY2Vzc2FyeS4NCg0KPiA+ICsNCj4gPiArI2RlZmluZSBY U0RJUlhfREVGQVVMVF9WSURFT19MT0NLX1dJTkRPVwkweDMwMDANCj4gPiArDQo+ID4gKyNkZWZp bmUgWFNESVJYX01PREVfSERfTUFTSwkweDANCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV9TRF9N QVNLCTB4MQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NT0RFXzNHX01BU0sJMHgyDQo+ID4gKyNkZWZp bmUgWFNESVJYX01PREVfNkdfTUFTSwkweDQNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV8xMkdJ X01BU0sJMHg1DQo+ID4gKyNkZWZpbmUgWFNESVJYX01PREVfMTJHRl9NQVNLCTB4Ng0KPiA+ICsN Cj4gPiArLyogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHBlciBmaWxlIGhhbmRsZS4gKi8NCj4g PiArI2RlZmluZSBYU0RJUlhfTUFYX0VWRU5UUwkoMTI4KQ0KPiANCj4gRG8gd2UgcmVhbGx5IG5l ZWQgc3VjaCBhIGhpZ2ggbnVtYmVyID8gSG93IG9mdGVuIGFyZSB0aGUgb3ZlcmZsb3cgYW5kDQo+ IHVuZGVyZmxvdyBleHBlY3RlZCA/DQo+IA0KDQpBbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgZXZl bnRzIHdpbGwgb2NjdXIgd2hlbiBhIHJlc29sdXRpb24gLyByYXRlIGNoYW5nZSBvY2N1cnMuDQpC dXQgc2luY2Ugd2UgYXJlIHN0b3BwaW5nIHRoZSBicmlkZ2VzIGluIGlycSBoYW5kbGVyLCB0aGVz ZSBldmVudHMgd2lsbCBzdG9wIGNvbWluZy4NCkkgY2FuIHJlZHVjZSB0aGlzIHRvIDggZXZlbnRz IGJ1dCBpdCBpcyBhcmJpdHJhcnkuIElzIHRoYXQgb2s/DQoNCj4gPiArDQo+ID4gKy8qIFNUMzUy IHJlbGF0ZWQgbWFjcm9zICovDQo+ID4gKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllURTFfTUFT SwkweEZGDQo+ID4gKyNkZWZpbmUgWFNUMzUyX1BBWUxPQURfQllURTFfT0ZGU0VUCTANCj4gPiAr I2RlZmluZSBYU1QzNTJfUEFZTE9BRF9CWVRFMl9PRkZTRVQJOA0KPiA+ICsjZGVmaW5lIFhTVDM1 Ml9QQVlMT0FEX0JZVEUzX09GRlNFVAkxNg0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9QQVlMT0FEX0JZ VEU0X09GRlNFVAkyNA0KPiA+ICsNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyOTJfMXg3 MjBMXzFfNUcJCTB4ODQNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTFfU1QyOTJfMXgxMDgwTF8x XzVHCQkweDg1DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUNDI1XzIwMDhfNzUwTF8zR0IJ MHg4OA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9TVDQyNV8yMDA4XzExMjVMXzNHQQkweDg5 DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMzcyX0RMXzNHQgkJMHg4QQ0KPiA+ICsjZGVm aW5lIFhTVDM1Ml9CWVRFMV9TVDM3Ml8yeDcyMExfM0dCCQkweDhCDQo+ID4gKyNkZWZpbmUgWFNU MzUyX0JZVEUxX1NUMzcyXzJ4MTA4MExfM0dCCQkweDhDDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZ VEUxX1NUMjA4MV8xMF8yMTYwTF82RwkJMHhDMA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMV9T VDIwODFfMTBfMl8xMDgwTF82RwkweEMxDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjA4 MV8xMF9ETF8yMTYwTF82RwkweEMyDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUxX1NUMjA4Ml8x MF8yMTYwTF8xMkcJMHhDRQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfVFNfVFlQ RV9NQVNLCQlCSVQoMTUpDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX1RTX1RZUEVfT0ZGU0VU CQkxNQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9QSUNfVFlQRV9NQVNLCQlCSVQoMTQpDQo+ ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX1BJQ19UWVBFX09GRlNFVAkJMTQNCj4gPiArI2RlZmlu ZSBYU1QzNTJfQllURTJfVFNfUElDX1RZUEVfSU5URVJMQUNFRAkwDQo+ID4gKyNkZWZpbmUgWFNU MzUyX0JZVEUyX1RTX1BJQ19UWVBFX1BST0dSRVNTSVZFCTENCj4gPiArDQo+ID4gKyNkZWZpbmUg WFNUMzUyX0JZVEUyX0ZQU19NQVNLCQkJMHhGDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQ U19PRkZTRVQJCQk4DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18yNEYJCQkweDINCj4g PiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzI0CQkJMHgzDQo+ID4gKyNkZWZpbmUgWFNUMzUy X0JZVEUyX0ZQU180OEYJCQkweDQNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzI1CQkJ MHg1DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQU18zMEYJCQkweDYNCj4gPiArI2RlZmlu ZSBYU1QzNTJfQllURTJfRlBTXzMwCQkJMHg3DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUyX0ZQ U180OAkJCTB4OA0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfNTAJCQkweDkNCj4gPiAr I2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzYwRgkJCTB4QQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9C WVRFMl9GUFNfNjAJCQkweEINCj4gPiArLyogVGFibGUgNCBTVCAyMDgxLTEwOjIwMTUgKi8NCj4g PiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzk2CQkJMHhDDQo+ID4gKyNkZWZpbmUgWFNUMzUy X0JZVEUyX0ZQU18xMDAJCQkweEQNCj4gPiArI2RlZmluZSBYU1QzNTJfQllURTJfRlBTXzEyMAkJ CTB4RQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFMl9GUFNfMTIwRgkJCTB4Rg0KPiA+ICsNCj4g PiArI2RlZmluZSBYU1QzNTJfQllURTNfQUNUX0xVTUFfQ09VTlRfTUFTSwlCSVQoMjIpDQo+ID4g KyNkZWZpbmUgWFNUMzUyX0JZVEUzX0FDVF9MVU1BX0NPVU5UX09GRlNFVAkyMg0KPiA+ICsNCj4g PiArI2RlZmluZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUX01BU0sJCUdFTk1BU0soMTksDQo+ IDE2KQ0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfT0ZGU0VUCTE2DQo+ ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF80MjIJCTB4MA0KPiA+ICsjZGVm aW5lIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfWVVWNDQ0CTB4MQ0KPiA+ICsjZGVmaW5lIFhT VDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfNDIwCQkweDMNCj4gPiArI2RlZmluZSBYU1QzNTJfQllU RTNfQ09MT1JfRk9STUFUX0dCUgkJMHgyDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTVDM1Ml9CWVRF NF9CSVRfREVQVEhfTUFTSwkJR0VOTUFTSygyNSwgMjQpDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZ VEU0X0JJVF9ERVBUSF9PRkZTRVQJCTI0DQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEU0X0JJVF9E RVBUSF8xMAkJMHgxDQo+ID4gKyNkZWZpbmUgWFNUMzUyX0JZVEU0X0JJVF9ERVBUSF8xMgkJMHgy DQo+ID4gKw0KPiA+ICsjZGVmaW5lIENMS19JTlQJCTE0ODUwMDAwMFVMDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIHJzaGlmdF9hbmRfbWFzayh2YWwsIHR5cGUpIFwNCj4gPiArCQkoKCh2YWwpID4+IHR5 cGUjI19PRkZTRVQpICYgdHlwZSMjX01BU0spDQo+ID4gKw0KPiA+ICsjZGVmaW5lIG1hc2tfYW5k X3JzaGlmdCh2YWwsIHR5cGUpIFwNCj4gPiArCQkoKCh2YWwpICYgdHlwZSMjX01BU0spID4+IHR5 cGUjI19PRkZTRVQpDQo+IA0KPiBIb3cgYWJvdXQgdXNpbmcgRklFTERfR0VUKCkgZnJvbSBsaW51 eC9iaXRmaWVsZC5oID8gSXQncyBtb3JlIHN0YW5kYXJkLA0KPiBhbmQgd2lsbCB0aHVzIGJlIGxl c3MgY29uZnVzaW5nIHRvIHJlYWRlcnMuDQo+IA0KDQpPayBJIHdpbGwgdHJ5IHRvIGNvbnZlcnQg dGhpcyB0byBGSUVMRF9HRVQoKQ0KDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogZW51bSBzZGlf ZmFtaWx5X2VuYyAtIFNESSBUcmFuc3BvcnQgVmlkZW8gRm9ybWF0IERldGVjdGVkIHdpdGggQWN0 aXZlDQo+IFBpeGVscw0KPiA+ICsgKiBAWFNESVJYX1NNUFRFX1NUXzI3NDogU01QVEUgU1QgMjc0 IGRldGVjdGVkIHdpdGggQVAgMTkyMHgxMDgwDQo+ID4gKyAqIEBYU0RJUlhfU01QVEVfU1RfMjk2 OiBTTVBURSBTVCAyOTYgZGV0ZWN0ZWQgd2l0aCBBUCAxMjgweDcyMA0KPiA+ICsgKiBAWFNESVJY X1NNUFRFX1NUXzIwNDhfMjogU01QVEUgU1QgMjA0OC0yIGRldGVjdGVkIHdpdGggQVANCj4gMjA0 OHgxMDgwDQo+ID4gKyAqIEBYU0RJUlhfU01QVEVfU1RfMjk1OiBTTVBURSBTVCAyOTUgZGV0ZWN0 ZWQgd2l0aCBBUCAxOTIweDEwODANCj4gPiArICogQFhTRElSWF9OVFNDOiBOVFNDIGVuY29kaW5n IGRldGVjdGVkIHdpdGggQVAgNzIweDQ4Ng0KPiA+ICsgKiBAWFNESVJYX1BBTDogUEFMIGVuY29k aW5nIGRldGVjdGVkIHdpdGggQVAgNzIweDU3Ng0KPiA+ICsgKiBAWFNESVJYX1RTX1VOS05PV046 IFVua25vd24gU01QVEUgVHJhbnNwb3J0IGZhbWlseSB0eXBlDQo+ID4gKyAqLw0KPiA+ICtlbnVt IHNkaV9mYW1pbHlfZW5jIHsNCj4gPiArCVhTRElSWF9TTVBURV9TVF8yNzQJPSAwLA0KPiA+ICsJ WFNESVJYX1NNUFRFX1NUXzI5Ngk9IDEsDQo+ID4gKwlYU0RJUlhfU01QVEVfU1RfMjA0OF8yCT0g MiwNCj4gPiArCVhTRElSWF9TTVBURV9TVF8yOTUJPSAzLA0KPiA+ICsJWFNESVJYX05UU0MJCT0g OCwNCj4gPiArCVhTRElSWF9QQUwJCT0gOSwNCj4gPiArCVhTRElSWF9UU19VTktOT1dOCT0gMTUN Cj4gPiArfTsNCj4gDQo+IFRoaXMgc2hvdWxkIGlkZWFsbHkgZ28gaW4gYSBoZWFkZXIgZmlsZSBz aGFyZWQgYmV0d2VlbiB0aGUgU0RJIFJYIGFuZA0KPiBUWCwgYXMgaXQncyBwYXJ0IG9mIHRoZSBV SEQtU0RJIElQIGNvcmUsIGJ1dCBpdCBjYW4gYmUgZG9uZSBsYXRlci4NCj4gDQoNClJpZ2h0LiBX ZSBjYW4gbG9vayBpbnRvIHRoaXMgbGF0ZXIuDQoNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBz dHJ1Y3QgeHNkaXJ4c3NfY29yZSAtIENvcmUgY29uZmlndXJhdGlvbiBTREkgUnggU3Vic3lzdGVt IGRldmljZQ0KPiBzdHJ1Y3R1cmUNCj4gPiArICogQGRldjogUGxhdGZvcm0gc3RydWN0dXJlDQo+ ID4gKyAqIEBpb21lbTogQmFzZSBhZGRyZXNzIG9mIHN1YnN5c3RlbQ0KPiA+ICsgKiBAaXJxOiBy ZXF1ZXN0ZWQgaXJxIG51bWJlcg0KPiA+ICsgKiBAaW5jbHVkZV9lZGg6IEVESCBwcm9jZXNzb3Ig cHJlc2VuY2UNCj4gPiArICogQG1vZGU6IDNHLzZHLzEyRyBtb2RlDQo+ID4gKyAqIEBjbGtzOiBh cnJheSBvZiBjbG9ja3MNCj4gPiArICogQG51bV9jbGtzOiBudW1iZXIgb2YgY2xvY2tzDQo+ID4g KyAqIEBicGM6IEJpdHMgcGVyIGNvbXBvbmVudCwgY2FuIGJlIDEwIG9yIDEyDQo+ID4gKyAqLw0K PiA+ICtzdHJ1Y3QgeHNkaXJ4c3NfY29yZSB7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ ID4gKwl2b2lkIF9faW9tZW0gKmlvbWVtOw0KPiA+ICsJaW50IGlycTsNCj4gPiArCWJvb2wgaW5j bHVkZV9lZGg7DQo+ID4gKwlpbnQgbW9kZTsNCj4gPiArCXN0cnVjdCBjbGtfYnVsa19kYXRhICpj bGtzOw0KPiA+ICsJaW50IG51bV9jbGtzOw0KPiANCj4gbnVtX2Nsa3MgaXMgbmV2ZXIgbmVnYXRp dmUsIHlvdSBjYW4gbWFrZSBpdCBhbiB1bnNpZ25lZCBpbnQuDQoNCk9rLiBJIHdpbGwgbWFrZSBu dW1fY2xrcyBhcyB1bnNpZ25lZCBpbnQuDQpTbyB3aHkgZGV2bV9jbGtfYnVsa19nZXQoKSBhbmQg Y2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoKSB0YWtlIGluIG51bV9jbGtzIGFyZ3VtZW50IGFzIGlu dCA/DQoNCj4gDQo+ID4gKwl1MzIgYnBjOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAtIFNESSBSeCBTdWJzeXN0ZW0gZGV2aWNlIHN0cnVj dHVyZQ0KPiA+ICsgKiBAY29yZTogQ29yZSBzdHJ1Y3R1cmUgZm9yIE1JUEkgU0RJIFJ4IFN1YnN5 c3RlbQ0KPiA+ICsgKiBAc3ViZGV2OiBUaGUgdjRsMiBzdWJkZXYgc3RydWN0dXJlDQo+ID4gKyAq IEBjdHJsX2hhbmRsZXI6IGNvbnRyb2wgaGFuZGxlcg0KPiA+ICsgKiBAZXZlbnQ6IEhvbGRzIHRo ZSB2aWRlbyB1bmxvY2sgZXZlbnQNCj4gPiArICogQGZvcm1hdDogQWN0aXZlIFY0TDIgZm9ybWF0 IG9uIHNvdXJjZSBwYWQNCj4gPiArICogQGRlZmF1bHRfZm9ybWF0OiBkZWZhdWx0IFY0TDIgbWVk aWEgYnVzIGZvcm1hdA0KPiA+ICsgKiBAZnJhbWVfaW50ZXJ2YWw6IENhcHR1cmVzIHRoZSBmcmFt ZSByYXRlDQo+ID4gKyAqIEBwYWQ6IHNvdXJjZSBtZWRpYSBwYWQNCj4gPiArICogQHZpZGxvY2t3 aW46IFZpZGVvIGxvY2sgd2luZG93IHZhbHVlIHNldCBieSBjb250cm9sDQo+ID4gKyAqIEBlZGht YXNrOiBFREggbWFzayBzZXQgYnkgY29udHJvbA0KPiA+ICsgKiBAc2VhcmNobWFzazogU2VhcmNo IG1hc2sgc2V0IGJ5IGNvbnRyb2wNCj4gPiArICogQHN0cmVhbWluZzogRmxhZyBmb3Igc3Rvcmlu ZyBzdHJlYW1pbmcgc3RhdGUNCj4gPiArICogQHZpZGxvY2tlZDogRmxhZyBpbmRpY2F0aW5nIFNE SSBSeCBoYXMgbG9ja2VkIG9udG8gdmlkZW8gc3RyZWFtDQo+ID4gKyAqIEB0c19pc19pbnRlcmxh Y2VkOiBGbGFnIGluZGljYXRpbmcgVHJhbnNwb3J0IFN0cmVhbSBpcyBpbnRlcmxhY2VkLg0KPiA+ ICsgKiBAZnJhbWVyX2VuYWJsZTogRmxhZyBmb3IgZnJhbWVyIGVuYWJsZWQgb3Igbm90IHNldCBi eSBjb250cm9sDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBk ZXZpY2UgZHJpdmVyIHJlbGF0ZWQgcGFyYW1ldGVycw0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHhz ZGlyeHNzX3N0YXRlIHsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlIGNvcmU7DQo+ID4gKwlz dHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVy IGN0cmxfaGFuZGxlcjsNCj4gPiArCXN0cnVjdCB2NGwyX2V2ZW50IGV2ZW50Ow0KPiANCj4gSXMg dGhpcyBuZWVkZWQsIGNhbid0IGl0IGJlIGEgbG9jYWwgdmFyaWFibGUgaW4gdGhlIGZ1bmN0aW9u IHdoZXJlIGl0IGlzDQo+IHVzZWQgPw0KDQpZZXMgdGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4 dCB2ZXJzaW9uIGFuZCBtYWRlIGEgbG9jYWwgdmFyaWFibGUgaW4gdGhlIGlycSBoYW5kbGVyLg0K DQo+IA0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmb3JtYXQ7DQo+ID4gKwlzdHJ1 Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IGRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsJc3RydWN0IHY0bDJf ZnJhY3QgZnJhbWVfaW50ZXJ2YWw7DQo+ID4gKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsNCj4gDQo+ IFlvdSB3aWxsIG5lZWQgdHdvIHBhZHMgYXMgdGhlcmUgc2hvdWxkIGJlIHR3byBwb3J0cyAobGV0 J3MgZGlzY3VzcyBpdCBhcw0KPiBwYXJ0IG9mIHBhdGNoIDEvMikuDQo+IA0KDQpPaw0KDQo+ID4g Kwl1MzIgdmlkbG9ja3dpbjsNCj4gPiArCXUzMiBlZGhtYXNrOw0KPiA+ICsJdTE2IHNlYXJjaG1h c2s7DQo+ID4gKwlib29sIHN0cmVhbWluZzsNCj4gPiArCWJvb2wgdmlkbG9ja2VkOw0KPiA+ICsJ Ym9vbCB0c19pc19pbnRlcmxhY2VkOw0KPiA+ICsJYm9vbCBmcmFtZXJfZW5hYmxlOw0KPiA+ICt9 Ow0KPiANCj4gQXMgZm9yIHRoZSBDU0kyLVJYLCBzcGxpdHRpbmcgY29yZSBhbmQgc3RhdGUgaW4g c2VwYXJhdGUgc3RydWN0dXJlcw0KPiBpc24ndCBhbiBlc3RhYmxpc2hlZCBwcmFjdGljZS4gSSB0 aGluayBpdCBsZWFkcyB0byBtb3JlIGNvbXBsZXggY29kZSBhcw0KPiB5b3UgaGF2ZSB0byByZW1l bWJlciBpbiB3aGljaCBzdHJ1Y3R1cmUgZWFjaCBmaWVsZCBpcyBsb2NhdGVkLg0KPg0KDQpJIHdp bGwgbWVyZ2UgdGhlIGNvcmUgYW5kIHN0YXRlIGludG8gYSBzaW5nbGUgc3RydWN0dXJlIHNpbWls YXIgdG8gQ1NJMi1SeCBjYXNlLg0KIA0KPiA+ICsNCj4gPiArLyogTGlzdCBvZiBjbG9ja3MgcmVx dWlyZWQgYnkgVUhELVNESSBSeCBzdWJzeXN0ZW0gKi8NCj4gPiArc3RhdGljIGNvbnN0IGNoYXIg KiBjb25zdCB4c2Rpcnhzc19jbGtzW10gPSB7DQo+ID4gKwkic19heGlfYWNsayIsICJzZGlfcnhf Y2xrIiwgInZpZGVvX291dF9jbGsiLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogVE9ETyAtIEFk ZCBZVVYgNDQ0LzQyMCBhbmQgUkJHIDEwLzEyIGJwYyBtYnVzIGZvcm1hdHMgaGVyZSAqLw0KPiAN Cj4gcy9SQkcvUkdCLyA/DQo+IA0KDQpObyBSQkcgaXMgY29ycmVjdCBiZWNhdXNlIGFzIHBlciBY aWxpbnggVXNlciBHdWlkZSA5MzQgRmlndXJlIDEtNCBhbmQgVGFibGUgMS00LCANCnRoZSBCbHVl IGlzIG1pZGRsZSBjb21wb25lbnQgaW4gdGhlIEFYSTQtU3RyZWFtIHByb3RvY29sIGZvbGxvd2Vk IGJ5IGFsbCBYaWxpbnggVmlkZW8gSVBzLg0KaHR0cHM6Ly93d3cueGlsaW54LmNvbS9zdXBwb3J0 L2RvY3VtZW50YXRpb24vaXBfZG9jdW1lbnRhdGlvbi9heGlfdmlkZW9pcC92MV8wL3VnOTM0X2F4 aV92aWRlb0lQLnBkZg0KDQpXZSB3aWxsIGFkZCB0aGUgUkJHIDEwIGFuZCAxMiBicGMgZm9ybWF0 cyBsYXRlci4NCg0KPiA+ICtzdGF0aWMgY29uc3QgdTMyIHhzZGlyeHNzXzEwYnBjX21idXNfZm10 c1tdID0gew0KPiA+ICsJTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgyMCwNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCB1MzIgeHNkaXJ4c3NfMTJicGNfbWJ1c19mbXRzW10gPSB7DQo+ ID4gKwlNRURJQV9CVVNfRk1UX1VZVlkxMl8xWDI0LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgZm10X2NhcFtdID0gew0KPiA+ICsJVjRM Ml9EVl9CVF9TRElfNzIwWDQ4N0k2MCwNCj4gPiArCVY0TDJfRFZfQlRfQ0VBXzcyMFg1NzZJNTAs DQo+ID4gKwlWNEwyX0RWX0JUX0NFQV8xMjgwWDcyMFAyNCwNCj4gPiArCVY0TDJfRFZfQlRfQ0VB XzEyODBYNzIwUDI1LA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTI4MFg3MjBQMzAsDQo+ID4gKwlW NEwyX0RWX0JUX0NFQV8xMjgwWDcyMFA1MCwNCj4gPiArCVY0TDJfRFZfQlRfQ0VBXzEyODBYNzIw UDYwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDI0LA0KPiA+ICsJVjRMMl9EVl9C VF9DRUFfMTkyMFgxMDgwUDMwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwSTUwLA0K PiA+ICsJVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwSTYwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFf MTkyMFgxMDgwUDUwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwUDYwLA0KPiA+ICsJ VjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDI0LA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMzg0MFgy MTYwUDMwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDUwLA0KPiA+ICsJVjRMMl9E Vl9CVF9DRUFfMzg0MFgyMTYwUDYwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDI0 LA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDI1LA0KPiA+ICsJVjRMMl9EVl9CVF9D RUFfNDA5NlgyMTYwUDMwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDUwLA0KPiA+ ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDYwLA0KPiA+ICsNCj4gPiArCVhMTlhfVjRMMl9E Vl9CVF8yMDQ4WDEwODBQMjQsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI1LA0K PiA+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFAzMCwNCj4gPiArCVhMTlhfVjRMMl9EVl9C VF8yMDQ4WDEwODBJNDgsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTUwLA0KPiA+ ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MEk2MCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBQNDgsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDUwLA0KPiA+ICsJ WExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA2MCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8xOTIw WDEwODBQNDgsDQo+ID4gKwlYTE5YX1Y0TDJfRFZfQlRfMTkyMFgxMDgwSTQ4LA0KPiA+ICsJWExO WF9WNEwyX0RWX0JUXzM4NDBYMjE2MFA0OCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF80MDk2WDIx NjBQNDgsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgeHNkaXJ4c3NfZHZfbWFwIHsNCj4g PiArCXUzMiB3aWR0aDsNCj4gPiArCXUzMiBoZWlnaHQ7DQo+ID4gKwl1MzIgZnBzOw0KPiA+ICsJ c3RydWN0IHY0bDJfZHZfdGltaW5ncyBmb3JtYXQ7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHhzZGlyeHNzX2R2X21hcCB4c2Rpcnhzc19kdl90aW1pbmdzW10gPSB7 DQo+ID4gKwkvKiBTRCAtIDcyMHg0ODdpNjAgKi8NCj4gPiArCXsgNzIwLCAyNDMsIDMwLCBWNEwy X0RWX0JUX1NESV83MjBYNDg3STYwIH0sDQo+ID4gKwkvKiBTRCAtIDcyMHg1NzZpNTAgKi8NCj4g PiArCXsgNzIwLCAyODgsIDI1LCBWNEwyX0RWX0JUX0NFQV83MjBYNTc2STUwIH0sDQo+ID4gKwkv KiBIRCAtIDEyODB4NzIwcDIzLjk4ICovDQo+ID4gKwkvKiBIRCAtIDEyODB4NzIwcDI0ICovDQo+ ID4gKwl7IDEyODAsIDcyMCwgMjQsIFY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDI0IH0sDQo+ID4g KwkvKiBIRCAtIDEyODB4NzIwcDI1ICovDQo+ID4gKwl7IDEyODAsIDcyMCwgMjUsIFY0TDJfRFZf QlRfQ0VBXzEyODBYNzIwUDI1IH0sDQo+ID4gKwkvKiBIRCAtIDEyODB4NzIwcDI5Ljk3ICovDQo+ ID4gKwkvKiBIRCAtIDEyODB4NzIwcDMwICovDQo+ID4gKwl7IDEyODAsIDcyMCwgMzAsIFY0TDJf RFZfQlRfQ0VBXzEyODBYNzIwUDMwIH0sDQo+ID4gKwkvKiBIRCAtIDEyODB4NzIwcDUwICovDQo+ ID4gKwl7IDEyODAsIDcyMCwgNTAsIFY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDUwIH0sDQo+ID4g KwkvKiBIRCAtIDEyODB4NzIwcDU5Ljk0ICovDQo+ID4gKwkvKiBIRCAtIDEyODB4NzIwcDYwICov DQo+ID4gKwl7IDEyODAsIDcyMCwgNjAsIFY0TDJfRFZfQlRfQ0VBXzEyODBYNzIwUDYwIH0sDQo+ ID4gKwkvKiBIRCAtIDE5MjB4MTA4MHAyMy45OCAqLw0KPiA+ICsJLyogSEQgLSAxOTIweDEwODBw MjQgKi8NCj4gPiArCXsgMTkyMCwgMTA4MCwgMjQsIFY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MFAy NCB9LA0KPiA+ICsJLyogSEQgLSAxOTIweDEwODBwMjUgKi8NCj4gPiArCXsgMTkyMCwgMTA4MCwg MjUsIFY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MFAyNSB9LA0KPiA+ICsJLyogSEQgLSAxOTIweDEw ODBwMjkuOTcgKi8NCj4gPiArCS8qIEhEIC0gMTkyMHgxMDgwcDMwICovDQo+ID4gKwl7IDE5MjAs IDEwODAsIDMwLCBWNEwyX0RWX0JUX0NFQV8xOTIwWDEwODBQMzAgfSwNCj4gPiArDQo+ID4gKwkv KiBIRCAtIDIwNDh4MTA4MHAyMy45OCAqLw0KPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBwMjQgKi8N Cj4gPiArCXsgMjA0OCwgMTA4MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjQgfSwN Cj4gPiArCS8qIEhEIC0gMjA0OHgxMDgwcDI1ICovDQo+ID4gKwl7IDIwNDgsIDEwODAsIDI0LCBY TE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI1IH0sDQo+ID4gKwkvKiBIRCAtIDIwNDh4MTA4MHAy OS45NyAqLw0KPiA+ICsJLyogSEQgLSAyMDQ4eDEwODBwMzAgKi8NCj4gPiArCXsgMjA0OCwgMTA4 MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMzAgfSwNCj4gPiArCS8qIEhEIC0gMTky MHgxMDgwaTQ3Ljk1ICovDQo+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MGk0OCAqLw0KPiA+ICsJeyAx OTIwLCA1NDAsIDI0LCBYTE5YX1Y0TDJfRFZfQlRfMTkyMFgxMDgwSTQ4IH0sDQo+ID4gKw0KPiA+ ICsJLyogSEQgLSAxOTIweDEwODBpNTAgKi8NCj4gPiArCXsgMTkyMCwgNTQwLCAyNSwgVjRMMl9E Vl9CVF9DRUFfMTkyMFgxMDgwSTUwIH0sDQo+ID4gKwkvKiBIRCAtIDE5MjB4MTA4MGk1OS45NCAq Lw0KPiA+ICsJLyogSEQgLSAxOTIweDEwODBpNjAgKi8NCj4gPiArCXsgMTkyMCwgNTQwLCAzMCwg VjRMMl9EVl9CVF9DRUFfMTkyMFgxMDgwSTYwIH0sDQo+ID4gKw0KPiA+ICsJLyogSEQgLSAyMDQ4 eDEwODBpNDcuOTUgKi8NCj4gPiArCS8qIEhEIC0gMjA0OHgxMDgwaTQ4ICovDQo+ID4gKwl7IDIw NDgsIDU0MCwgMjQsIFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNDggfSwNCj4gPiArCS8qIEhE IC0gMjA0OHgxMDgwaTUwICovDQo+ID4gKwl7IDIwNDgsIDU0MCwgMjUsIFhMTlhfVjRMMl9EVl9C VF8yMDQ4WDEwODBJNTAgfSwNCj4gPiArCS8qIEhEIC0gMjA0OHgxMDgwaTU5Ljk0ICovDQo+ID4g KwkvKiBIRCAtIDIwNDh4MTA4MGk2MCAqLw0KPiA+ICsJeyAyMDQ4LCA1NDAsIDMwLCBYTE5YX1Y0 TDJfRFZfQlRfMjA0OFgxMDgwSTYwIH0sDQo+ID4gKwkvKiAzRyAtIDE5MjB4MTA4MHA0Ny45NSAq Lw0KPiA+ICsJLyogM0cgLSAxOTIweDEwODBwNDggKi8NCj4gPiArCXsgMTkyMCwgMTA4MCwgNDgs IFhMTlhfVjRMMl9EVl9CVF8xOTIwWDEwODBQNDggfSwNCj4gPiArDQo+ID4gKwkvKiAzRyAtIDE5 MjB4MTA4MHA1MCAxNDguNSAqLw0KPiA+ICsJeyAxOTIwLCAxMDgwLCA1MCwgVjRMMl9EVl9CVF9D RUFfMTkyMFgxMDgwUDUwIH0sDQo+ID4gKwkvKiAzRyAtIDE5MjB4MTA4MHA1OS45NCAxNDguNS8x LjAwMSAqLw0KPiA+ICsJLyogM0cgLSAxOTIweDEwODBwNjAgMTQ4LjUgKi8NCj4gPiArCXsgMTky MCwgMTA4MCwgNjAsIFY0TDJfRFZfQlRfQ0VBXzE5MjBYMTA4MFA2MCB9LA0KPiA+ICsNCj4gPiAr CS8qIDNHIC0gMjA0OHgxMDgwcDQ3Ljk1ICovDQo+ID4gKwkvKiAzRyAtIDIwNDh4MTA4MHA0OCAq Lw0KPiA+ICsJeyAyMDQ4LCAxMDgwLCA0OCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA0OCB9 LA0KPiA+ICsJLyogM0cgLSAyMDQ4eDEwODBwNTAgKi8NCj4gPiArCXsgMjA0OCwgMTA4MCwgNTAs IFhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNTAgfSwNCj4gPiArCS8qIDNHIC0gMjA0OHgxMDgw cDU5Ljk0ICovDQo+ID4gKwkvKiAzRyAtIDIwNDh4MTA4MHA2MCAqLw0KPiA+ICsJeyAyMDQ4LCAx MDgwLCA2MCwgWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA2MCB9LA0KPiA+ICsNCj4gPiArCS8q IDZHIC0gMzg0MFgyMTYwcDIzLjk4ICovDQo+ID4gKwkvKiA2RyAtIDM4NDBYMjE2MHAyNCAqLw0K PiA+ICsJeyAzODQwLCAyMTYwLCAyNCwgVjRMMl9EVl9CVF9DRUFfMzg0MFgyMTYwUDI0IH0sDQo+ ID4gKwkvKiA2RyAtIDM4NDBYMjE2MHAyNSAqLw0KPiA+ICsJeyAzODQwLCAyMTYwLCAyNSwgVjRM Ml9EVl9CVF9DRUFfMzg0MFgyMTYwUDI1IH0sDQo+ID4gKwkvKiA2RyAtIDM4NDBYMjE2MHAyOS45 NyAqLw0KPiA+ICsJLyogNkcgLSAzODQwWDIxNjBwMzAgKi8NCj4gPiArCXsgMzg0MCwgMjE2MCwg MzAsIFY0TDJfRFZfQlRfQ0VBXzM4NDBYMjE2MFAzMCB9LA0KPiA+ICsJLyogNkcgLSA0MDk2WDIx NjBwMjMuOTggKi8NCj4gPiArCS8qIDZHIC0gNDA5NlgyMTYwcDI0ICovDQo+ID4gKwl7IDQwOTYs IDIxNjAsIDI0LCBWNEwyX0RWX0JUX0NFQV80MDk2WDIxNjBQMjQgfSwNCj4gPiArCS8qIDZHIC0g NDA5NlgyMTYwcDI1ICovDQo+ID4gKwl7IDQwOTYsIDIxNjAsIDI1LCBWNEwyX0RWX0JUX0NFQV80 MDk2WDIxNjBQMjUgfSwNCj4gPiArCS8qIDZHIC0gNDA5NlgyMTYwcDI5Ljk3ICovDQo+ID4gKwkv KiA2RyAtIDQwOTZYMjE2MHAzMCAqLw0KPiA+ICsJeyA0MDk2LCAyMTYwLCAzMCwgVjRMMl9EVl9C VF9DRUFfNDA5NlgyMTYwUDMwIH0sDQo+ID4gKwkvKiAxMkcgLSAzODQwWDIxNjBwNDcuOTUgKi8N Cj4gPiArCS8qIDEyRyAtIDM4NDBYMjE2MHA0OCAqLw0KPiA+ICsJeyAzODQwLCAyMTYwLCA0OCwg WExOWF9WNEwyX0RWX0JUXzM4NDBYMjE2MFA0OCB9LA0KPiA+ICsNCj4gPiArCS8qIDEyRyAtIDM4 NDBYMjE2MHA1MCAqLw0KPiA+ICsJeyAzODQwLCAyMTYwLCA1MCwgVjRMMl9EVl9CVF9DRUFfMzg0 MFgyMTYwUDUwIH0sDQo+ID4gKwkvKiAxMkcgLSAzODQwWDIxNjBwNTkuOTQgKi8NCj4gPiArCS8q IDEyRyAtIDM4NDBYMjE2MHA2MCAqLw0KPiA+ICsJeyAzODQwLCAyMTYwLCA2MCwgVjRMMl9EVl9C VF9DRUFfMzg0MFgyMTYwUDYwIH0sDQo+ID4gKw0KPiA+ICsJLyogMTJHIC0gNDA5NlgyMTYwcDQ3 Ljk1ICovDQo+ID4gKwkvKiAxMkcgLSA0MDk2WDIxNjBwNDggKi8NCj4gPiArCXsgMzg0MCwgMjE2 MCwgNDgsIFhMTlhfVjRMMl9EVl9CVF80MDk2WDIxNjBQNDggfSwNCj4gPiArDQo+ID4gKwkvKiAx MkcgLSA0MDk2WDIxNjBwNTAgKi8NCj4gPiArCXsgNDA5NiwgMjE2MCwgNTAsIFY0TDJfRFZfQlRf Q0VBXzQwOTZYMjE2MFA1MCB9LA0KPiA+ICsJLyogMTJHIC0gNDA5NlgyMTYwcDU5Ljk0ICovDQo+ ID4gKwkvKiAxMkcgLSA0MDk2WDIxNjBwNjAgKi8NCj4gPiArCXsgNDA5NiwgMjE2MCwgNjAsIFY0 TDJfRFZfQlRfQ0VBXzQwOTZYMjE2MFA2MCB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKg0KPiA+ICt0b194c2Rpcnhzc3N0YXRlKHN0 cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2KQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gY29udGFpbmVy X29mKHN1YmRldiwgc3RydWN0IHhzZGlyeHNzX3N0YXRlLCBzdWJkZXYpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKg0KPiA+ICsgKiBSZWdpc3RlciByZWxhdGVkIG9wZXJhdGlvbnMNCj4gPiArICov DQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIHhzZGlyeHNzX3JlYWQoc3RydWN0IHhzZGlyeHNzX2Nv cmUgKnhzZGlyeHNzLCB1MzIgYWRkcikNCj4gPiArew0KPiA+ICsJcmV0dXJuIGlvcmVhZDMyKHhz ZGlyeHNzLT5pb21lbSArIGFkZHIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5l IHZvaWQgeHNkaXJ4c3Nfd3JpdGUoc3RydWN0IHhzZGlyeHNzX2NvcmUgKnhzZGlyeHNzLCB1MzIg YWRkciwNCj4gPiArCQkJCSAgdTMyIHZhbHVlKQ0KPiA+ICt7DQo+ID4gKwlpb3dyaXRlMzIodmFs dWUsIHhzZGlyeHNzLT5pb21lbSArIGFkZHIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW5saW5lIHZvaWQgeHNkaXJ4c3NfY2xyKHN0cnVjdCB4c2Rpcnhzc19jb3JlICp4c2Rpcnhzcywg dTMyIGFkZHIsDQo+ID4gKwkJCQl1MzIgY2xyKQ0KPiA+ICt7DQo+ID4gKwl4c2Rpcnhzc193cml0 ZSh4c2RpcnhzcywgYWRkciwgeHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywgYWRkcikgJiB+Y2xyKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeHNzX3NldChzdHJ1 Y3QgeHNkaXJ4c3NfY29yZSAqeHNkaXJ4c3MsIHUzMiBhZGRyLA0KPiA+ICsJCQkJdTMyIHNldCkN Cj4gPiArew0KPiA+ICsJeHNkaXJ4c3Nfd3JpdGUoeHNkaXJ4c3MsIGFkZHIsIHhzZGlyeHNzX3Jl YWQoeHNkaXJ4c3MsIGFkZHIpIHwgc2V0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu bGluZSB2b2lkIHhzZGlyeF9jb3JlX2Rpc2FibGUoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUp DQo+ID4gK3sNCj4gPiArCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVHLA0K PiBYU0RJUlhfUlNUX0NUUkxfU1NfRU5fTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbmxpbmUgdm9pZCB4c2RpcnhfY29yZV9lbmFibGUoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNv cmUpDQo+ID4gK3sNCj4gPiArCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVH LA0KPiBYU0RJUlhfUlNUX0NUUkxfU1NfRU5fTUFTSyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgeHNkaXJ4X3NldF9tb2RlZGV0ZWN0KHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3Jl LCB1MTYgbWFzaykNCj4gPiArew0KPiA+ICsJdTMyIHZhbDsNCj4gPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9IGNvcmUtPmRldjsNCj4gPiArDQo+ID4gKwltYXNrICY9IFhTRElSWF9ERVRFQ1RfQUxM X01PREVTOw0KPiA+ICsJaWYgKCFtYXNrKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJJbnZhbGlk IGJpdCBtYXNrID0gMHglMDh4XG4iLCBtYXNrKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlkZXZfZGJnKGRldiwgIm1hc2sgPSAweCV4XG4iLCBtYXNrKTsN Cj4gPiArDQo+ID4gKwl2YWwgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9NRExfQ1RSTF9S RUcpOw0KPiA+ICsJdmFsICY9IH5YU0RJUlhfTURMX0NUUkxfTU9ERV9ERVRfRU5fTUFTSzsNCj4g PiArCXZhbCAmPSB+WFNESVJYX01ETF9DVFJMX01PREVfQVVUT19ERVRfTUFTSzsNCj4gPiArCXZh bCAmPSB+WFNESVJYX01ETF9DVFJMX0ZPUkNFRF9NT0RFX01BU0s7DQo+ID4gKw0KPiA+ICsJaWYg KGh3ZWlnaHQxNihtYXNrKSA+IDEpIHsNCj4gPiArCQkvKiBNdWx0aSBtb2RlIGRldGVjdGlvbiBh cyBtb3JlIHRoYW4gMSBiaXQgc2V0IGluIG1hc2sgKi8NCj4gPiArCQlkZXZfZGJnKGRldiwgIkRl dGVjdCBtdWx0aXBsZSBtb2Rlc1xuIik7DQo+ID4gKw0KPiA+ICsJCWlmIChtYXNrICYgQklUKFhT RElSWF9NT0RFX1NEX09GRlNFVCkpDQo+ID4gKwkJCXZhbCB8PSBYU0RJUlhfTURMX0NUUkxfTU9E RV9TRF9FTl9NQVNLOw0KPiA+ICsJCWlmIChtYXNrICYgQklUKFhTRElSWF9NT0RFX0hEX09GRlNF VCkpDQo+ID4gKwkJCXZhbCB8PSBYU0RJUlhfTURMX0NUUkxfTU9ERV9IRF9FTl9NQVNLOw0KPiA+ ICsJCWlmIChtYXNrICYgQklUKFhTRElSWF9NT0RFXzNHX09GRlNFVCkpDQo+ID4gKwkJCXZhbCB8 PSBYU0RJUlhfTURMX0NUUkxfTU9ERV8zR19FTl9NQVNLOw0KPiA+ICsJCWlmIChtYXNrICYgQklU KFhTRElSWF9NT0RFXzZHX09GRlNFVCkpDQo+ID4gKwkJCXZhbCB8PSBYU0RJUlhfTURMX0NUUkxf TU9ERV82R19FTl9NQVNLOw0KPiA+ICsJCWlmIChtYXNrICYgQklUKFhTRElSWF9NT0RFXzEyR0lf T0ZGU0VUKSkNCj4gPiArCQkJdmFsIHw9IFhTRElSWF9NRExfQ1RSTF9NT0RFXzEyR0lfRU5fTUFT SzsNCj4gPiArCQlpZiAobWFzayAmIEJJVChYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCkpDQo+ID4g KwkJCXZhbCB8PSBYU0RJUlhfTURMX0NUUkxfTU9ERV8xMkdGX0VOX01BU0s7DQo+ID4gKw0KPiA+ ICsJCXZhbCB8PSBYU0RJUlhfTURMX0NUUkxfTU9ERV9ERVRfRU5fTUFTSzsNCj4gPiArCX0gZWxz ZSB7DQo+ID4gKwkJLyogRml4ZWQgTW9kZSAqLw0KPiA+ICsJCXUzMiBmb3JjZWRfbW9kZV9tYXNr Ow0KPiA+ICsNCj4gPiArCQlkZXZfZGJnKGRldiwgIkRldGVjdCBmaXhlZCBtb2RlXG4iKTsNCj4g PiArDQo+ID4gKwkJLyogRmluZCBvZmZzZXQgb2YgZmlyc3QgYml0IHNldCAqLw0KPiA+ICsJCXN3 aXRjaCAoX19mZnMobWFzaykpIHsNCj4gPiArCQljYXNlIFhTRElSWF9NT0RFX1NEX09GRlNFVDoN Cj4gPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RFX1NEX01BU0s7DQo+ID4gKwkJ CWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfSERfT0ZGU0VUOg0KPiA+ICsJCQlmb3Jj ZWRfbW9kZV9tYXNrID0gWFNESVJYX01PREVfSERfTUFTSzsNCj4gPiArCQkJYnJlYWs7DQo+ID4g KwkJY2FzZSBYU0RJUlhfTU9ERV8zR19PRkZTRVQ6DQo+ID4gKwkJCWZvcmNlZF9tb2RlX21hc2sg PSBYU0RJUlhfTU9ERV8zR19NQVNLOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTRElS WF9NT0RFXzZHX09GRlNFVDoNCj4gPiArCQkJZm9yY2VkX21vZGVfbWFzayA9IFhTRElSWF9NT0RF XzZHX01BU0s7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfMTJHSV9P RkZTRVQ6DQo+ID4gKwkJCWZvcmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV8xMkdJX01BU0s7 DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfMTJHRl9PRkZTRVQ6DQo+ ID4gKwkJCWZvcmNlZF9tb2RlX21hc2sgPSBYU0RJUlhfTU9ERV8xMkdGX01BU0s7DQo+ID4gKwkJ CWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWZvcmNlZF9tb2RlX21hc2sgPSAwOw0K PiA+ICsJCX0NCj4gPiArCQlkZXZfZGJnKGRldiwgIkZvcmNlZCBNb2RlIE1hc2sgOiAweCV4XG4i LA0KPiA+ICsJCQlmb3JjZWRfbW9kZV9tYXNrKTsNCj4gPiArCQl2YWwgfD0gZm9yY2VkX21vZGVf bWFzayA8PA0KPiBYU0RJUlhfTURMX0NUUkxfRk9SQ0VEX01PREVfT0ZGU0VUOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWRldl9kYmcoZGV2LCAiTW9kZXMgdG8gYmUgZGV0ZWN0ZWQgOiBzZGkgY3Ry bCByZWcgPSAweCUwOHhcbiIsDQo+ID4gKwkJdmFsKTsNCj4gPiArCXhzZGlyeHNzX3dyaXRlKGNv cmUsIFhTRElSWF9NRExfQ1RSTF9SRUcsIHZhbCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhzZGlyeF9mcmFtZXIoc3RydWN0IHhzZGly eHNzX2NvcmUgKmNvcmUsIGJvb2wgZmxhZykNCj4gPiArew0KPiA+ICsJaWYgKGZsYWcpDQo+ID4g KwkJeHNkaXJ4c3Nfc2V0KGNvcmUsIFhTRElSWF9NRExfQ1RSTF9SRUcsDQo+ID4gKwkJCSAgICAg WFNESVJYX01ETF9DVFJMX0ZSTV9FTl9NQVNLKTsNCj4gPiArCWVsc2UNCj4gPiArCQl4c2Rpcnhz c19jbHIoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRywNCj4gPiArCQkJICAgICBYU0RJUlhfTURM X0NUUkxfRlJNX0VOX01BU0spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rp cnhfc2V0ZWRoZXJyY250dHJpZ2dlcihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgdTMyDQo+ IGVuYWJsZSkNCj4gDQo+IFRoYXQncyBhIGhhcmQgdG8gcmVhZCBmdW5jdGlvbiBuYW1lLiBDb3Vs ZCB5b3Ugc2VwYXJhdGUgd29yZHMgd2l0aA0KPiB1bmRlcnNjb3JlcyA/IFNhbWUgZm9yIGZ1bmN0 aW9ucyBiZWxvdyB0aGF0IGNvbmNhdGVuYXRlIG11bHRpcGxlIHdvcmRzDQo+IHRvZ2V0aGVyLg0K PiANCg0KT2suIEkgd2lsbCBjaGFuZ2UgdGhlIG5hbWluZyBmb3IgdGhpcyBmdW5jdGlvbiBhbmQg b3RoZXJzIGJlbG93IGluIG5leHQgdmVyc2lvbi4NCg0KPiA+ICt7DQo+ID4gKwl1MzIgdmFsID0g eHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfRURIX0VSUkNOVF9FTl9SRUcpOw0KPiA+ICsNCj4g PiArCXZhbCA9IGVuYWJsZSAmIFhTRElSWF9FREhfQUxMRVJSX01BU0s7DQo+ID4gKw0KPiA+ICsJ eHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX0VESF9FUlJDTlRfRU5fUkVHLCB2YWwpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X3NldHZpZGxvY2t3aW5k b3coc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsIHUzMg0KPiB2YWwpDQo+ID4gK3sNCj4gPiAr CS8qDQo+ID4gKwkgKiBUaGUgdmlkZW8gbG9jayB3aW5kb3cgaXMgdGhlIGFtb3VudCBvZiB0aW1l IGZvciB3aGljaCB0aGUNCj4gPiArCSAqIHRoZSBtb2RlIGFuZCB0cmFuc3BvcnQgc3RyZWFtIHNo b3VsZCBiZSBsb2NrZWQgdG8gZ2V0IHRoZQ0KPiA+ICsJICogdmlkZW8gbG9jayBpbnRlcnJ1cHQu DQo+ID4gKwkgKi8NCj4gPiArCXhzZGlyeHNzX3dyaXRlKGNvcmUsIFhTRElSWF9WSURfTE9DS19X SU5ET1dfUkVHLCB2YWwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQg eHNkaXJ4X2Rpc2FibGVpbnRyKHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCB1MzIgbWFzaykN Cj4gPiArew0KPiA+ICsJeHNkaXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9JRVJfUkVHLCBtYXNrKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHhzZGlyeF9lbmFibGVpbnRy KHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCB1MzIgbWFzaykNCj4gPiArew0KPiA+ICsJeHNk aXJ4c3Nfc2V0KGNvcmUsIFhTRElSWF9JRVJfUkVHLCBtYXNrKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgeHNkaXJ4X2dsb2JhbGludHIoc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNv cmUsIGJvb2wgZmxhZykNCj4gPiArew0KPiA+ICsJaWYgKGZsYWcpDQo+ID4gKwkJeHNkaXJ4c3Nf c2V0KGNvcmUsIFhTRElSWF9HTEJMX0lFUl9SRUcsDQo+ID4gKwkJCSAgICAgWFNESVJYX0dMQkxf SU5UUl9FTl9NQVNLKTsNCj4gPiArCWVsc2UNCj4gPiArCQl4c2Rpcnhzc19jbHIoY29yZSwgWFNE SVJYX0dMQkxfSUVSX1JFRywNCj4gPiArCQkJICAgICBYU0RJUlhfR0xCTF9JTlRSX0VOX01BU0sp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeHNkaXJ4X2NsZWFyaW50 cihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgdTMyIG1hc2spDQo+ID4gK3sNCj4gPiArCXhz ZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfSVNSX1JFRywgbWFzayk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIHhzZGlyeF92aWRfYnJpZGdlX2NvbnRyb2woc3RydWN0IHhzZGlyeHNz X2NvcmUgKmNvcmUsDQo+ID4gKwkJCQkgICAgICBib29sIGVuYWJsZSkNCj4gPiArew0KPiA+ICsJ dTMyIG1hc2sgPSBYU0RJUlhfUlNUX0NUUkxfU0RJUlhfQlJJREdFX0VOQl9NQVNLOw0KPiA+ICsN Cj4gPiArCS8qDQo+ID4gKwkgKiBUT0RPIC0gRW5hYmxlIFlVVjQ0NC9SQkcgZm9ybWF0IGluIHRo ZSBicmlkZ2UgYmFzZWQNCj4gPiArCSAqIG9uIEJZVEUzIGNvbG9yIGZvcm1hdC4NCj4gPiArCSAq IFhTRElSWF9SU1RfQ1RSTF9CUklER0VfQ0hfRk1UX1lVVjQ0NA0KPiA+ICsJICovDQo+ID4gKwlp ZiAoZW5hYmxlKQ0KPiA+ICsJCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVH LCBtYXNrKTsNCj4gPiArCWVsc2UNCj4gPiArCQl4c2Rpcnhzc19jbHIoY29yZSwgWFNESVJYX1JT VF9DVFJMX1JFRywgbWFzayk7DQo+ID4gK30NCj4gDQo+IFRoaXMgaXMgb25seSB1c2VkIGluIHhz ZGlyeF9zdHJlYW1mbG93X2NvbnRyb2woKSwgaW5saW5pbmcgaXQgbWFudWFsbHkNCj4gd291bGQg YmUgc2ltcGxlciBJIHRoaW5rLg0KPiANCg0KQWdyZWUuIEkgd2lsbCB1cGRhdGUgdGhpcyBpbiB0 aGUgbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2RpcnhfYXhpczRf YnJpZGdlX2NvbnRyb2woc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUsDQo+ID4gKwkJCQkJYm9v bCBlbmFibGUpDQo+ID4gK3sNCj4gPiArCWlmIChlbmFibGUpDQo+ID4gKwkJeHNkaXJ4c3Nfc2V0 KGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcsDQo+ID4gKw0KPiBYU0RJUlhfUlNUX0NUUkxfVklE SU5fQVhJNFNfTU9EX0VOQl9NQVNLKTsNCj4gPiArCWVsc2UNCj4gPiArCQl4c2Rpcnhzc19jbHIo Y29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywNCj4gPiArDQo+IFhTRElSWF9SU1RfQ1RSTF9WSURJ Tl9BWEk0U19NT0RfRU5CX01BU0spOw0KPiA+ICt9DQo+IA0KPiBTYW1lIGZvciB0aGlzIG9uZS4N Cj4gDQoNCkFncmVlLiBJIHdpbGwgdXBkYXRlIHRoaXMgaW4gdGhlIG5leHQgdmVyc2lvbi4NCg0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChzdHJ1Y3Qg eHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbA0KPiBlbmFibGUpDQo+ID4gK3sNCj4gPiArCS8qIFRo ZSBzZGkgdG8gbmF0aXZlIGJyaWRnZSBpcyBmb2xsb3dlZCBieSBuYXRpdmUgdG8gYXhpczQgYnJp ZGdlICovDQo+ID4gKwlpZiAoZW5hYmxlKSB7DQo+ID4gKwkJeHNkaXJ4X2F4aXM0X2JyaWRnZV9j b250cm9sKGNvcmUsIGVuYWJsZSk7DQo+ID4gKwkJeHNkaXJ4X3ZpZF9icmlkZ2VfY29udHJvbChj b3JlLCBlbmFibGUpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQl4c2RpcnhfdmlkX2JyaWRnZV9j b250cm9sKGNvcmUsIGVuYWJsZSk7DQo+ID4gKwkJeHNkaXJ4X2F4aXM0X2JyaWRnZV9jb250cm9s KGNvcmUsIGVuYWJsZSk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHhzZGlyeHNzX2dldF9mcmFtZXJhdGUoc3RydWN0IHY0bDJfZnJhY3QgKmZyYW1lX2ludGVydmFs LA0KPiA+ICsJCQkJICAgdTMyIGZyYW1lcmF0ZSkNCj4gPiArew0KPiA+ICsJc3dpdGNoIChmcmFt ZXJhdGUpIHsNCj4gPiArCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjNfOThIWjoNCj4g PiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMTsNCj4gPiArCQlmcmFtZV9pbnRl cnZhbC0+ZGVub21pbmF0b3IgPSAyNDAwMDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNE SVJYX1RTX0RFVF9TVEFUX1JBVEVfMjRIWjoNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJh dG9yID0gMTAwMDsNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSAyNDAwMDsN Cj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVIWjoN Cj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4gPiArCQlmcmFtZV9p bnRlcnZhbC0+ZGVub21pbmF0b3IgPSAyNTAwMDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug WFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjlfOTdIWjoNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ bnVtZXJhdG9yID0gMTAwMTsNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSAz MDAwMDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVf MzBIWjoNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4gPiArCQlm cmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSAzMDAwMDsNCj4gPiArCQlicmVhazsNCj4gPiAr CWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNDdfOTVIWjoNCj4gPiArCQlmcmFtZV9pbnRl cnZhbC0+bnVtZXJhdG9yID0gMTAwMTsNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0 b3IgPSA0ODAwMDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFU X1JBVEVfNDhIWjoNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4g PiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSA0ODAwMDsNCj4gPiArCQlicmVhazsN Cj4gPiArCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTBIWjoNCj4gPiArCQlmcmFtZV9p bnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21p bmF0b3IgPSA1MDAwMDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNESVJYX1RTX0RFVF9T VEFUX1JBVEVfNTlfOTRIWjoNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAw MTsNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ZGVub21pbmF0b3IgPSA2MDAwMDsNCj4gPiArCQli cmVhazsNCj4gPiArCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNjBIWjoNCj4gPiArCQlm cmFtZV9pbnRlcnZhbC0+bnVtZXJhdG9yID0gMTAwMDsNCj4gPiArCQlmcmFtZV9pbnRlcnZhbC0+ ZGVub21pbmF0b3IgPSA2MDAwMDsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4g KwkJZnJhbWVfaW50ZXJ2YWwtPm51bWVyYXRvciA9IDE7DQo+ID4gKwkJZnJhbWVfaW50ZXJ2YWwt PmRlbm9taW5hdG9yID0gMTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgeHNkaXJ4c3Nfc2V0X2d0Y2xrKHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBjbGsgKmd0Y2xrOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBjbGtyYXRl Ow0KPiA+ICsJaW50IHJldCwgaXNfZnJhYzsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpj b3JlID0gJnN0YXRlLT5jb3JlOw0KPiA+ICsJdTMyIG1vZGU7DQo+ID4gKwlzdGF0aWMgaW50IHBy ZXZfaXNfZnJhYyA9IC0xOw0KPiA+ICsNCj4gPiArCW1vZGUgPSB4c2Rpcnhzc19yZWFkKGNvcmUs IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwltb2RlICY9IFhTRElSWF9NT0RFX0RF VF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVE9ETzogRm9y IG5vdywgZG9uJ3QgY2hhbmdlIHRoZSBjbG9jayByYXRlIGZvciBhbnkgbW9kZSBleGNlcHQNCj4g MTJHLg0KPiA+ICsJICogSW4gZnV0dXJlLCBjb25maWd1cmUgZ3QgY2xvY2sgZm9yIGFsbCBtb2Rl cyBhbmQgZW5hYmxlIGNsb2NrIG9ubHkNCj4gPiArCSAqIHdoZW4gbmVlZGVkIChzdHJlYW0gb24v b2ZmKS4NCj4gPiArCSAqLw0KPiA+ICsJaWYgKG1vZGUgIT0gWFNESVJYX01PREVfMTJHSV9NQVNL ICYmIG1vZGUgIT0NCj4gWFNESVJYX01PREVfMTJHRl9NQVNLKQ0KPiA+ICsJCXJldHVybjsNCj4g PiArDQo+ID4gKwlpc19mcmFjID0gc3RhdGUtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciA9PSAx MDAxID8gMSA6IDA7DQo+ID4gKw0KPiA+ICsJaWYgKHByZXZfaXNfZnJhYyA9PSBpc19mcmFjKQ0K PiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwl4c2RpcnhfY29yZV9kaXNhYmxlKGNvcmUpOw0K PiA+ICsJeHNkaXJ4X2dsb2JhbGludHIoY29yZSwgZmFsc2UpOw0KPiA+ICsJeHNkaXJ4X2Rpc2Fi bGVpbnRyKGNvcmUsIFhTRElSWF9JTlRSX0FMTF9NQVNLKTsNCj4gPiArDQo+ID4gKwkvKiBnZXQg c2RpX3J4X2NsayAqLw0KPiA+ICsJZ3RjbGsgPSBjb3JlLT5jbGtzWzFdLmNsazsNCj4gPiArCWNs a3JhdGUgPSBjbGtfZ2V0X3JhdGUoZ3RjbGspOw0KPiA+ICsJaXNfZnJhYyA9IHN0YXRlLT5mcmFt ZV9pbnRlcnZhbC5udW1lcmF0b3IgPT0gMTAwMSA/IDEgOiAwOw0KPiA+ICsNCj4gPiArCS8qIGNh bGN1YWx0ZSBjbGtyYXRlICovDQo+IA0KPiBzL2NhbGN1YWx0ZS9jYWxjdWxhdGUvDQoNCldpbGwg Zml4IHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+IA0KPiA+ICsJaWYgKCFpc19mcmFjKQ0KPiA+ ICsJCWNsa3JhdGUgPSBDTEtfSU5UOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCWNsa3JhdGUgPSAoQ0xL X0lOVCAqIDEwMDApIC8gMTAwMTsNCj4gDQo+IFNob3VsZG4ndCB0aGUgY2xvY2sgcmF0ZSBhbHNv IGRlcGVuZCBvbiB0aGUgbW9kZSA/IFRhYmxlIDMtMiBsaXN0cw0KPiBkaWZmZXJlbnQgY2xvY2sg cmF0ZXMgZm9yIEhELVNESSBhbmQgMTJHLVNESS4NCj4gDQoNClRoZXJlIGlzIGEgR1QgKGdpZ2Fi aXQgdHJhbnNjZWl2ZXIgUEhZKSBJUCB3aGljaCB0YWtlcyB0aGlzIGNsb2NrIGZyb20gdGhlIG9u Ym9hcmQgY2xvY2sgc291cmNlIGxpa2UgU2k1NzANCmFuZCBnZW5lcmF0ZXMgdGhlIHNkaV9yeF9j bGsgcmVxdWlyZWQgYXMgcGVyIG1vZGUuIA0KQXMgbWVudGlvbmVkIGluIGFib3ZlIGNvbW1lbnQs IGZvciBhbGwgbW9kZXMgZXhjZXB0IDEyRyBtb2RlLCB0aGUgY2xvY2sgbmVlZCBub3QgYmUgY2hh bmdlZCBmcm9tIDE0OC41IE1Iei4NClRoZSBHVCBibG9jayBpcyBjYXBhYmxlIG9mIGRldGVjdGlu ZyBpbnRlZ2VyIGFzIHdlbGwgYXMgZnJhY3Rpb25hbCBmcmFtZSByYXRlcyBpbiB0aGlzIGNhc2Uu DQpGb3IgMTJHIGludGVnZXIgLyBmcmFjdGlvbmFsIG1vZGUgdGhlIGNsb2NrIG5lZWRzIHRvIGJl IDE0OC41IE1IeiAvIDE0OC41LzEuMDAxIE1IeiB0byBjb3JyZWN0bHkgZGVsaXZlciB0aGUgdmlk ZW8uDQpIZW5jZSBhZnRlciBkZXRlY3RpbmcgdGhlIG1vZGUoMTJHIGludGVnZXIvZnJhY3Rpb25h bCksIHRoZSBjbG9jayBzb3VyY2UgaXMgY2hhbmdlZCBhY2NvcmRpbmdseS4gDQoNCj4gPiArDQo+ ID4gKwlyZXQgPSBjbGtfc2V0X3JhdGUoZ3RjbGssIGNsa3JhdGUpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgImZhaWxlZCB0byBzZXQgY2xrIHJhdGUgPSAlZFxu IiwgcmV0KTsNCj4gPiArDQo+ID4gKwljbGtyYXRlID0gY2xrX2dldF9yYXRlKGd0Y2xrKTsNCj4g PiArDQo+ID4gKwlkZXZfZGJnKGNvcmUtPmRldiwgImNsa3JhdGUgPSAlbHUgaXNfZnJhYyA9ICVk XG4iLA0KPiA+ICsJCWNsa3JhdGUsIGlzX2ZyYWMpOw0KPiA+ICsNCj4gPiArCXhzZGlyeF9mcmFt ZXIoY29yZSwgc3RhdGUtPmZyYW1lcl9lbmFibGUpOw0KPiANCj4gQXMgdGhpcyBpcyBjYWxsZWQg aW4gYm90aCB0aGUgSVJRIGhhbmRsZXIgYW5kIHRoZSBzX2N0cmwgaGFuZGxlciwgeW91DQo+IGNv dWxkIGhhdmUgYSByYWNlIHdoZW4gYWNjZXNzaW5nIHRoZSBYU0RJUlhfTURMX0NUUkxfUkVHIHJl Z2lzdGVyLiBZb3UNCj4gd2lsbCBuZWVkIHRvIHByb3RlY3QgYWxsIGFjY2Vzc2VzIHRvIHJlZ2lz dGVycyB0aGF0IGFyZSB3cml0dGVuIGZyb20NCj4gYm90aCB0aGUgSVJRIGhhbmRsZXIgYW5kIHVz ZXJzcGFjZSBjb250ZXh0cyB3aXRoIGEgc3BpbmxvY2suDQo+IA0KDQpBZ3JlZS4gVGhpcyB3YXMg bWlzc2VkLiBJIHdpbGwgYWRkIHRoZSBuZWNlc3Nhcnkgc3BpbmxvY2suIA0KDQo+ID4gKwl4c2Rp cnhfc2V0ZWRoZXJyY250dHJpZ2dlcihjb3JlLCBzdGF0ZS0+ZWRobWFzayk7DQo+ID4gKwl4c2Rp cnhfc2V0dmlkbG9ja3dpbmRvdyhjb3JlLCBzdGF0ZS0+dmlkbG9ja3dpbik7DQo+ID4gKwl4c2Rp cnhfc2V0X21vZGVkZXRlY3QoY29yZSwgc3RhdGUtPnNlYXJjaG1hc2spOw0KPiA+ICsJeHNkaXJ4 X2VuYWJsZWludHIoY29yZSwgWFNESVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ICsJeHNkaXJ4X2ds b2JhbGludHIoY29yZSwgdHJ1ZSk7DQo+ID4gKwl4c2RpcnhfY29yZV9lbmFibGUoY29yZSk7DQo+ ID4gKw0KPiA+ICsJcHJldl9pc19mcmFjID0gaXNfZnJhYzsNCj4gDQo+IFRoYXQncyBsb3RzIG9m IHdvcmsgZG9uZSBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gQXMgdGhpcyBmdW5jdGlvbiBpcw0K PiBjYWxsZWQgd2hlbiBhIHN0cmVhbSBsb2NrIGlzIGRldGVjdGVkLCBpZiB0aGUgY2xvY2sgcmF0 ZSBoYXMgdG8gYmUNCj4gY2hhbmdlZCwgZG8gSSBhc3N1bWUgY29ycmVjdGx5IHRoYXQgdGhlIHJl c29sdXRpb24gbWF5IGhhdmUgY2hhbmdlZCB0b28NCj4gPyBUaGF0IG1heSByZXF1aXJlIHJlY29u ZmlndXJpbmcgdGhlIHBpcGVsaW5lIGFuZCByZWFsbG9jYXRpbmcgYnVmZmVycy4NCj4gV2l0aCBT RCBhbmQgSEQgVFYsIEkgdGhpbmsgdGhlIHVzdWFsIHByYWN0aWNlIGlzIHRvIG5vdGlmeSB1c2Vy c3BhY2Ugb2YNCj4gdmlkZW8gbG9jayBhbmQgbGV0IGl0IGRvIHRoZSByZWNvbmZpZ3VyYXRpb24g aXMgcmVxdWlyZWQsIGluc3RlYWQgb2YNCj4gYXR0ZW1wdGluZyB0byBkbyBzbyBhdXRvbWF0aWNh bGx5LiBIYW5zLCBpcyB0aGF0IGNvcnJlY3QgPyBIb3cgd291bGQgd2UNCj4gaGFuZGxlIHRoZW4g dGhlIGNhc2Ugd2hlcmUgdGhlIHBpcGVsaW5lIGlzIGFscmVhZHkgY29ycmVjdGx5IGNvbmZpZ3Vy ZWQNCj4gd2l0aCBiaWcgZW5vdWdoIGJ1ZmZlcnMgKEknbSBub3Qgc3VyZSB0aGlzIGNhbiBhY3R1 YWxseSBoYXBwZW4sIGZvciB0aGUNCj4gYnVmZmVycyB5ZXMsIGJ1dCBmb3IgdGhlIHBpcGVsaW5l IGNvbmZpZ3VyYXRpb24sIG1heWJlIHRoZSBmb3JtYXQgd2lsbA0KPiBhbHdheXMgbmVlZCB0byBj aGFuZ2UpID8NCj4gDQo+IEFuZCBJJ3ZlIG5vdyBzZWVuIHRoYXQgd2UgZG8gZW1pdCB0aGUgVjRM Ml9FVkVOVF9TUkNfQ0hfUkVTT0xVVElPTg0KPiBldmVudA0KPiA6LSkgRG8gd2UgdGh1cyBuZWVk IHRvIHJlY29uZmlndXJlIHRoZSBJUCBjb3JlIGhlcmUgPw0KPiANCg0KWWVzIHdlIG5lZWQgdG8g cmVjb25maWd1cmUgdGhlIElQIGNvcmUgYW5kIGVuYWJsZSBpdCBoZXJlIHNvIHRoYXQgdGhlIGNv cmUgaXMgcnVubmluZw0KYnV0IHRoZSBicmlkZ2VzIGFyZSBkaXNhYmxlZC4gV2l0aCB0aGUgU0RJ IFJ4IGNvcmUgZW5hYmxlZCwgd2Ugd2lsbCBnZXQgdG8ga25vdyB3aGVuIGEgbmV3IHN0cmVhbSBo YXMgc3RhcnRlZCBhbmQgaXRzIHByb3BlcnRpZXMuDQpUaGUgYXBwbGljYXRpb24gd2lsbCBiZSBu b3RpZmllZCBvZiB0aGlzIGFuZCBpdCBjYW4gcXVlcnkgZm9yIHRoZSBzdHJlYW0gcHJvcGVydGll cyB0byBhY2NvcmRpbmdseSBzZXR1cCB0aGUgcGlwZWxpbmUuDQpXaXRoIHRoZSBicmlkZ2VzIGRp c2FibGVkLCB0aGUgZG93bnN0cmVhbSBJUHMgd2lsbCBub3QgYmUgYWJsZSB0byByZWNlaXZlIGFu eSBkYXRhLg0KDQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2RpcnhfZ2V0X3N0 cmVhbV9wcm9wZXJ0aWVzIC0gR2V0IFNESSBSeCBzdHJlYW0gcHJvcGVydGllcw0KPiA+ICsgKiBA c3RhdGU6IHBvaW50ZXIgdG8gZHJpdmVyIHN0YXRlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVu Y3Rpb24gZGVjb2RlcyB0aGUgc3RyZWFtJ3MgU1QzNTIgcGF5bG9hZCAoaWYgYXZhaWxhYmxlKSB0 byBnZXQNCj4gPiArICogc3RyZWFtIHByb3BlcnRpZXMgbGlrZSB3aWR0aCwgaGVpZ2h0LCBwaWN0 dXJlIHR5cGUNCj4gKGludGVybGFjZWQvcHJvZ3Jlc3NpdmUpLA0KPiA+ICsgKiBldGMuDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjogMCBmb3Igc3VjY2VzcyBlbHNlIGVycm9ycw0KPiA+ICsgKi8N Cj4gPiArc3RhdGljIGludCB4c2RpcnhfZ2V0X3N0cmVhbV9wcm9wZXJ0aWVzKHN0cnVjdCB4c2Rp cnhzc19zdGF0ZSAqc3RhdGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpj b3JlID0gJnN0YXRlLT5jb3JlOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY29yZS0+ZGV2 Ow0KPiA+ICsJdTMyIG1vZGUsIHBheWxvYWQgPSAwLCB2YWwsIGZhbWlseSwgdmFsaWQsIHRzY2Fu Ow0KPiA+ICsJdTggYnl0ZTEgPSAwLCBhY3RpdmVfbHVtYSA9IDAsIHBpY190eXBlID0gMCwgZnJh bWVyYXRlID0gMDsNCj4gPiArCXU4IHNhbXBsaW5nID0gWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1B VF80MjI7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQgPSAmc3RhdGUt PmZvcm1hdDsNCj4gPiArCXUzMiBicGMgPSBYU1QzNTJfQllURTRfQklUX0RFUFRIXzEwOw0KPiA+ ICsNCj4gPiArCW1vZGUgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFU X1JFRyk7DQo+ID4gKwltb2RlICY9IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsN Cj4gPiArDQo+ID4gKwl2YWxpZCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX1ZB TElEX1JFRyk7DQo+ID4gKw0KPiA+ICsJaWYgKG1vZGUgPj0gWFNESVJYX01PREVfM0dfTUFTSyAm JiAhdmFsaWQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIk5vIHZhbGlkIFNUMzUyIHBheWxvYWQg cHJlc2VudCBldmVuIGZvciAzRw0KPiBtb2RlIGFuZCBhYm92ZVxuIik7DQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdmFsID0geHNkaXJ4c3NfcmVhZChjb3Jl LCBYU0RJUlhfVFNfREVUX1NUQVRfUkVHKTsNCj4gPiArCWlmICh2YWxpZCAmIFhTRElSWF9TVDM1 Ml9WQUxJRF9EUzFfTUFTSykgew0KPiA+ICsJCXBheWxvYWQgPSB4c2Rpcnhzc19yZWFkKGNvcmUs IFhTRElSWF9TVDM1Ml9EUzFfUkVHKTsNCj4gPiArCQlieXRlMSA9IHJzaGlmdF9hbmRfbWFzayhw YXlsb2FkLCBYU1QzNTJfUEFZTE9BRF9CWVRFMSk7DQo+ID4gKwkJYWN0aXZlX2x1bWEgPSBtYXNr X2FuZF9yc2hpZnQocGF5bG9hZCwNCj4gPiArDQo+IFhTVDM1Ml9CWVRFM19BQ1RfTFVNQV9DT1VO VCk7DQo+ID4gKwkJcGljX3R5cGUgPSBtYXNrX2FuZF9yc2hpZnQocGF5bG9hZCwNCj4gWFNUMzUy X0JZVEUyX1BJQ19UWVBFKTsNCj4gPiArCQlmcmFtZXJhdGUgPSByc2hpZnRfYW5kX21hc2socGF5 bG9hZCwgWFNUMzUyX0JZVEUyX0ZQUyk7DQo+ID4gKwkJdHNjYW4gPSBtYXNrX2FuZF9yc2hpZnQo cGF5bG9hZCwgWFNUMzUyX0JZVEUyX1RTX1RZUEUpOw0KPiA+ICsJCXNhbXBsaW5nID0gbWFza19h bmRfcnNoaWZ0KHBheWxvYWQsDQo+IFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVQpOw0KPiA+ICsJ CWJwYyA9IG1hc2tfYW5kX3JzaGlmdChwYXlsb2FkLCBYU1QzNTJfQllURTRfQklUX0RFUFRIKTsN Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJObyBTVDM1MiBwYXlsb2FkIGF2 YWlsYWJsZSA6IE1vZGUgPSAlZFxuIiwNCj4gbW9kZSk7DQo+ID4gKwkJZnJhbWVyYXRlID0gbWFz a19hbmRfcnNoaWZ0KHZhbCwNCj4gWFNESVJYX1RTX0RFVF9TVEFUX1JBVEUpOw0KPiA+ICsJCXRz Y2FuID0gbWFza19hbmRfcnNoaWZ0KHZhbCwgWFNESVJYX1RTX0RFVF9TVEFUX1NDQU4pOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmICgoYnBjID09IFhTVDM1Ml9CWVRFNF9CSVRfREVQVEhfMTAg JiYgY29yZS0+YnBjICE9IDEwKSB8fA0KPiA+ICsJICAgIChicGMgPT0gWFNUMzUyX0JZVEU0X0JJ VF9ERVBUSF8xMiAmJiBjb3JlLT5icGMgIT0gMTIpKSB7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJC aXQgZGVwdGggbm90IHN1cHBvcnRlZC4gYnBjID0gJWQgY29yZS0+YnBjID0NCj4gJWRcbiIsDQo+ ID4gKwkJCWJwYywgY29yZS0+YnBjKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlmYW1pbHkgPSBtYXNrX2FuZF9yc2hpZnQodmFsLCBYU0RJUlhfVFNfREVU X1NUQVRfRkFNSUxZKTsNCj4gPiArCXN0YXRlLT50c19pc19pbnRlcmxhY2VkID0gdHNjYW4gPyBm YWxzZSA6IHRydWU7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhkZXYsICJ0c19pc19pbnRlcmxhY2Vk ID0gJWQsIGZhbWlseSA9ICVkXG4iLA0KPiA+ICsJCXN0YXRlLT50c19pc19pbnRlcmxhY2VkLCBm YW1pbHkpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAobW9kZSkgew0KPiA+ICsJY2FzZSBYU0RJUlhf TU9ERV9IRF9NQVNLOg0KPiA+ICsJCWlmICghdmFsaWQpIHsNCj4gPiArCQkJLyogTm8gcGF5bG9h ZCBvYnRhaW5lZCAqLw0KPiA+ICsJCQlkZXZfZGJnKGRldiwgImZyYW1lIHJhdGUgOiAlZCwgdHNj YW4gPSAlZFxuIiwNCj4gPiArCQkJCWZyYW1lcmF0ZSwgdHNjYW4pOw0KPiA+ICsJCQkvKg0KPiA+ ICsJCQkgKiBOT1RFIDogQSBwcm9ncmVzc2l2ZSBzZWdtZW50ZWQgZnJhbWUgcFNGIHdpbGwgYmUN Cj4gPiArCQkJICogcmVwb3J0ZWQgaW5jb3JyZWN0bHkgYXMgSW50ZXJsYWNlZCBhcyB3ZSByZWx5 IG9uIElQJ3MNCj4gPiArCQkJICogdHJhbnNwb3J0IHNjYW4gbG9ja2VkIGJpdC4NCj4gPiArCQkJ ICovDQo+ID4gKwkJCWRldl93YXJuKGRldiwgInBTRiB3aWxsIGJlIGluY29ycmVjdGx5IHJlcG9y dGVkIGFzDQo+IEludGVybGFjZWRcbiIpOw0KPiA+ICsNCj4gPiArCQkJc3dpdGNoIChmcmFtZXJh dGUpIHsNCj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yM185OEhaOg0KPiA+ ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFo6DQo+ID4gKwkJCWNhc2UgWFNE SVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVIWjoNCj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NU QVRfUkFURV8yOV85N0haOg0KPiA+ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzMw SFo6DQo+ID4gKwkJCQlpZiAoZmFtaWx5ID09IFhTRElSWF9TTVBURV9TVF8yOTYpIHsNCj4gPiAr CQkJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJCQlmb3JtYXQtPmhlaWdodCA9IDcy MDsNCj4gPiArCQkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJCQkJ fSBlbHNlIGlmIChmYW1pbHkgPT0gWFNESVJYX1NNUFRFX1NUXzIwNDhfMikNCj4gew0KPiA+ICsJ CQkJCWZvcm1hdC0+d2lkdGggPSAyMDQ4Ow0KPiA+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0gMTA4 MDsNCj4gPiArCQkJCQlpZiAodHNjYW4pDQo+ID4gKwkJCQkJCWZvcm1hdC0+ZmllbGQgPQ0KPiBW NEwyX0ZJRUxEX05PTkU7DQo+ID4gKwkJCQkJZWxzZQ0KPiA+ICsJCQkJCQlmb3JtYXQtPmZpZWxk ID0NCj4gPiArDQo+IAlWNEwyX0ZJRUxEX0FMVEVSTkFURTsNCj4gPiArCQkJCX0gZWxzZSB7DQo+ ID4gKwkJCQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7DQo+ID4gKwkJCQkJZm9ybWF0LT5oZWlnaHQg PSAxMDgwOw0KPiA+ICsJCQkJCWlmICh0c2NhbikNCj4gPiArCQkJCQkJZm9ybWF0LT5maWVsZCA9 DQo+IFY0TDJfRklFTERfTk9ORTsNCj4gPiArCQkJCQllbHNlDQo+ID4gKwkJCQkJCWZvcm1hdC0+ ZmllbGQgPQ0KPiA+ICsNCj4gCVY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsJCQkJfQ0KPiA+ ICsJCQkJYnJlYWs7DQo+ID4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTBIWjoN Cj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV81OV85NEhaOg0KPiA+ICsJCQlj YXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzYwSFo6DQo+ID4gKwkJCQlpZiAoZmFtaWx5ID09 IFhTRElSWF9TTVBURV9TVF8yNzQpIHsNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsN Cj4gPiArCQkJCQlmb3JtYXQtPmhlaWdodCA9IDEwODA7DQo+ID4gKwkJCQl9IGVsc2Ugew0KPiA+ ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAxMjgwOw0KPiA+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0g NzIwOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9O RTsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQlkZWZhdWx0Og0KPiA+ICsJCQkJZm9ybWF0LT53 aWR0aCA9IDE5MjA7DQo+ID4gKwkJCQlmb3JtYXQtPmhlaWdodCA9IDEwODA7DQo+ID4gKwkJCQlm b3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJCQl9DQo+ID4gKwkJfSBlbHNl IHsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICJHb3QgdGhlIHBheWxvYWRcbiIpOw0KPiA+ICsJCQlz d2l0Y2ggKGJ5dGUxKSB7DQo+ID4gKwkJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjkyXzF4NzIwTF8x XzVHOg0KPiA+ICsJCQkJLyogU01QVEUgU1QgMjkyLTEgZm9yIDcyMCBsaW5lIHBheWxvYWRzICov DQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJCWZvcm1hdC0+aGVpZ2h0 ID0gNzIwOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjky XzF4MTA4MExfMV81RzoNCj4gPiArCQkJCS8qIFNNUFRFIFNUIDI5Mi0xIGZvciAxMDgwIGxpbmUg cGF5bG9hZHMgKi8NCj4gPiArCQkJCWZvcm1hdC0+aGVpZ2h0ID0gMTA4MDsNCj4gPiArCQkJCWlm IChhY3RpdmVfbHVtYSkNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsNCj4gPiArCQkJ CWVsc2UNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiArCQkJCWJyZWFrOw0K PiA+ICsJCQlkZWZhdWx0Og0KPiA+ICsJCQkJZGV2X2RiZyhkZXYsICJVbmtub3duIEhEIE1vZGUg U01QVEUNCj4gc3RhbmRhcmRcbiIpOw0KPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJ CX0NCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9NT0RFX1NEX01B U0s6DQo+ID4gKwkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsN Cj4gPiArCQlzd2l0Y2ggKGZhbWlseSkgew0KPiA+ICsJCWNhc2UgWFNESVJYX05UU0M6DQo+ID4g KwkJCWZvcm1hdC0+d2lkdGggPSA3MjA7DQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gNDg2Ow0K PiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTRElSWF9QQUw6DQo+ID4gKwkJCWZvcm1hdC0+ d2lkdGggPSA3MjA7DQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gNTc2Ow0KPiA+ICsJCQlicmVh azsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlkZXZfZGJnKGRldiwgIlVua25vd24gU0QgTW9k ZSBTTVBURSBzdGFuZGFyZFxuIik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0N Cj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNESVJYX01PREVfM0dfTUFTSzoNCj4gPiArCQlz d2l0Y2ggKGJ5dGUxKSB7DQo+ID4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1Q0MjVfMjAwOF83NTBM XzNHQjoNCj4gPiArCQkJLyogU2VjIDQuMS42LjEgU01QVEUgNDI1LTIwMDggKi8NCj4gPiArCQlj YXNlIFhTVDM1Ml9CWVRFMV9TVDM3Ml8yeDcyMExfM0dCOg0KPiA+ICsJCQkvKiBUYWJsZSAxMyBT TVBURSA0MjUtMjAwOCAqLw0KPiA+ICsJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJ Zm9ybWF0LT5oZWlnaHQgPSA3MjA7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNUMzUy X0JZVEUxX1NUNDI1XzIwMDhfMTEyNUxfM0dBOg0KPiA+ICsJCQkvKiBTVDM1MiBUYWJsZSBTTVBU RSA0MjUtMSAqLw0KPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMzcyX0RMXzNHQjoNCj4gPiAr CQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDggKi8NCj4gPiArCQljYXNlIFhTVDM1Ml9CWVRF MV9TVDM3Ml8yeDEwODBMXzNHQjoNCj4gPiArCQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDgg Ki8NCj4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsJCQlpZiAoYWN0aXZlX2x1 bWEpDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJ CQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6 DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiVW5rbm93biAzRyBNb2RlIFNNUFRFIHN0YW5kYXJkXG4i KTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBYU0RJUlhfTU9ERV82R19NQVNLOg0KPiA+ICsJCXN3aXRjaCAoYnl0ZTEpIHsNCj4g PiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIwODFfMTBfRExfMjE2MExfNkc6DQo+ID4gKwkJCS8q IER1YWwgbGluayA2RyAqLw0KPiA+ICsJCWNhc2UgWFNUMzUyX0JZVEUxX1NUMjA4MV8xMF8yMTYw TF82RzoNCj4gPiArCQkJLyogVGFibGUgMyBTTVBURSBTVCAyMDgxLTEwICovDQo+ID4gKwkJCWZv cm1hdC0+aGVpZ2h0ID0gMjE2MDsNCj4gPiArCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ICsJCQkJ Zm9ybWF0LT53aWR0aCA9IDQwOTY7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCWZvcm1hdC0+d2lk dGggPSAzODQwOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIw ODFfMTBfMl8xMDgwTF82RzoNCj4gPiArCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsJ CQlpZiAoYWN0aXZlX2x1bWEpDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMjA0ODsNCj4gPiAr CQkJZWxzZQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7DQo+ID4gKwkJCWJyZWFrOw0K PiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiVW5rbm93biA2RyBNb2RlIFNN UFRFIHN0YW5kYXJkXG4iKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU0RJUlhfTU9ERV8xMkdJX01BU0s6DQo+ID4gKwljYXNl IFhTRElSWF9NT0RFXzEyR0ZfTUFTSzoNCj4gPiArCQlzd2l0Y2ggKGJ5dGUxKSB7DQo+ID4gKwkJ Y2FzZSBYU1QzNTJfQllURTFfU1QyMDgyXzEwXzIxNjBMXzEyRzoNCj4gPiArCQkJLyogU2VjdGlv biA0LjMuMSBTTVBURSBTVCAyMDgyLTEwICovDQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gMjE2 MDsNCj4gPiArCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDQw OTY7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCWZvcm1hdC0+d2lkdGggPSAzODQwOw0KPiA+ICsJ CQlicmVhazsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlkZXZfZGJnKGRldiwgIlVua25vd24g MTJHIE1vZGUgU01QVEUNCj4gc3RhbmRhcmRcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWRldl9lcnIo ZGV2LCAiSW52YWxpZCBNb2RlXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpZiAodmFsaWQpIHsNCj4gPiArCQlpZiAocGljX3R5cGUpDQo+ID4gKwkJ CWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlm b3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9BTFRFUk5BVEU7DQo+ID4gKw0KPiA+ICsJCWlmIChm b3JtYXQtPmhlaWdodCA9PSAxMDgwICYmIHBpY190eXBlICYmICF0c2NhbikNCj4gPiArCQkJZm9y bWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsNCj4gPiArCQkvKg0KPiA+ ICsJCSAqIEluIDNHQiBETCBwU0YgbW9kZSB0aGUgdmlkZW8gaXMgc2ltaWxhciB0byBpbnRlcmxh Y2VkLg0KPiA+ICsJCSAqIFNvIHRob3VnaCBpdCBpcyBhIHByb2dyZXNzaXZlIHZpZGVvLCBpdHMg dHJhbnNwb3J0IGlzDQo+ID4gKwkJICogaW50ZXJsYWNlZCBhbmQgaXMgc2VudCBhcyB0d28gd2lk dGggeCAoaGVpZ2h0LzIpIGJ1ZmZlcnMuDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKGJ5dGUxID09 IFhTVDM1Ml9CWVRFMV9TVDM3Ml9ETF8zR0IpIHsNCj4gPiArCQkJaWYgKHN0YXRlLT50c19pc19p bnRlcmxhY2VkKQ0KPiA+ICsJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRF Ow0KPiA+ICsJCQllbHNlDQo+ID4gKwkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05F Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZm9ybWF0LT5maWVsZCA9PSBW NEwyX0ZJRUxEX0FMVEVSTkFURSkNCj4gPiArCQlmb3JtYXQtPmhlaWdodCA9IGZvcm1hdC0+aGVp Z2h0IC8gMjsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHNhbXBsaW5nKSB7DQo+ID4gKwljYXNlIFhT VDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfNDIyOg0KPiA+ICsJCWlmIChjb3JlLT5icGMgPT0gMTAp DQo+ID4gKwkJCWZvcm1hdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEwXzFYMjA7DQo+ID4g KwkJZWxzZQ0KPiA+ICsJCQlmb3JtYXQtPmNvZGUgPSBNRURJQV9CVVNfRk1UX1VZVlkxMl8xWDI0 Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUXzQy MDoNCj4gPiArCWNhc2UgWFNUMzUyX0JZVEUzX0NPTE9SX0ZPUk1BVF9ZVVY0NDQ6DQo+ID4gKwlj YXNlIFhTVDM1Ml9CWVRFM19DT0xPUl9GT1JNQVRfR0JSOg0KPiA+ICsJCWZvcm1hdC0+Y29kZSA9 IDA7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJObyBjb3JyZXNwb25kaW5nIG1lZGlhIGJ1cyBmb3Jt YXRzXG4iKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJZGV2X2Vycihk ZXYsICJVbnN1cHBvcnRlZCBjb2xvciBmb3JtYXQgOiAlZFxuIiwgc2FtcGxpbmcpOw0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXhzZGlyeHNzX2dldF9mcmFt ZXJhdGUoJnN0YXRlLT5mcmFtZV9pbnRlcnZhbCwgZnJhbWVyYXRlKTsNCj4gPiArDQo+ID4gKwlk ZXZfZGJnKGRldiwgIlN0cmVhbSB3aWR0aCA9ICVkIGhlaWdodCA9ICVkIEZpZWxkID0gJWQgcGF5 bG9hZCA9DQo+IDB4JTA4eCB0cyA9IDB4JTA4eFxuIiwNCj4gPiArCQlmb3JtYXQtPndpZHRoLCBm b3JtYXQtPmhlaWdodCwgZm9ybWF0LT5maWVsZCwgcGF5bG9hZCwgdmFsKTsNCj4gPiArCWRldl9k YmcoZGV2LCAiZnJhbWUgcmF0ZSBudW1lcmF0b3IgPSAlZCBkZW5vbWluYXRvciA9ICVkXG4iLA0K PiA+ICsJCXN0YXRlLT5mcmFtZV9pbnRlcnZhbC5udW1lcmF0b3IsDQo+ID4gKwkJc3RhdGUtPmZy YW1lX2ludGVydmFsLmRlbm9taW5hdG9yKTsNCj4gPiArCWRldl9kYmcoZGV2LCAiU3RyZWFtIGNv ZGUgPSAweCV4XG4iLCBmb3JtYXQtPmNvZGUpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19pcnFfaGFuZGxlciAtIEludGVycnVwdCBo YW5kbGVyIGZvciBTREkgUngNCj4gPiArICogQGlycTogSVJRIG51bWJlcg0KPiA+ICsgKiBAZGV2 X2lkOiBQb2ludGVyIHRvIGRldmljZSBzdGF0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgU0RJIFJ4 IGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGNvcnJlc3BvbmRpbmcgYml0 Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IElSUV9IQU5ETEVEIGFmdGVyIGhhbmRsaW5nIGlu dGVycnVwdHMNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCB4c2Rpcnhzc19pcnFf aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rp cnhzc19zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHhzZGlyeHNzX3N0YXRlICopZGV2X2lkOw0KPiA+ ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmc3RhdGUtPmNvcmU7DQo+ID4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjb3JlLT5kZXY7DQo+ID4gKwl1MzIgc3RhdHVzOw0KPiA+ICsNCj4g PiArCXN0YXR1cyA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX0lTUl9SRUcpOw0KPiA+ICsJ eHNkaXJ4c3Nfd3JpdGUoY29yZSwgWFNESVJYX0lTUl9SRUcsIHN0YXR1cyk7DQo+ID4gKwlkZXZf ZGJnKGRldiwgImludGVycnVwdCBzdGF0dXMgPSAweCUwOHhcbiIsIHN0YXR1cyk7DQo+ID4gKw0K PiA+ICsJaWYgKHN0YXR1cyAmIFhTRElSWF9JTlRSX1ZJRExPQ0tfTUFTSyB8fA0KPiA+ICsJICAg IHN0YXR1cyAmIFhTRElSWF9JTlRSX1ZJRFVOTE9DS19NQVNLKSB7DQo+ID4gKwkJdTMyIHZhbDEs IHZhbDI7DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcoZGV2LCAidmlkZW8gbG9jay91bmxvY2sgaW50 ZXJydXB0XG4iKTsNCj4gPiArDQo+ID4gKwkJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3Jl LCBmYWxzZSk7DQo+ID4gKwkJc3RhdGUtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiA+ICsNCj4gPiAr CQl2YWwxID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0K PiA+ICsJCXZhbDIgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9UU19ERVRfU1RBVF9SRUcp Ow0KPiA+ICsNCj4gPiArCQlpZiAoKHZhbDEgJiBYU0RJUlhfTU9ERV9ERVRfU1RBVF9NT0RFX0xP Q0tfTUFTSykgJiYNCj4gPiArCQkgICAgKHZhbDIgJiBYU0RJUlhfVFNfREVUX1NUQVRfTE9DS0VE X01BU0spKSB7DQo+ID4gKwkJCXUzMiBtYXNrID0NCj4gWFNESVJYX1JTVF9DVFJMX1JTVF9DUkNf RVJSQ05UX01BU0sgfA0KPiA+ICsNCj4gWFNESVJYX1JTVF9DVFJMX1JTVF9FREhfRVJSQ05UX01B U0s7DQo+ID4gKw0KPiA+ICsJCQlkZXZfZGJnKGRldiwgInZpZGVvIGxvY2sgaW50ZXJydXB0XG4i KTsNCj4gPiArDQo+ID4gKwkJCXhzZGlyeHNzX3NldChjb3JlLCBYU0RJUlhfUlNUX0NUUkxfUkVH LCBtYXNrKTsNCj4gPiArCQkJeHNkaXJ4c3NfY2xyKGNvcmUsIFhTRElSWF9SU1RfQ1RSTF9SRUcs IG1hc2spOw0KPiA+ICsNCj4gPiArCQkJdmFsMSA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJY X1NUMzUyX1ZBTElEX1JFRyk7DQo+ID4gKwkJCXZhbDIgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhT RElSWF9TVDM1Ml9EUzFfUkVHKTsNCj4gPiArDQo+ID4gKwkJCWRldl9kYmcoZGV2LCAidmFsaWQg c3QzNTIgbWFzayA9IDB4JTA4eFxuIiwgdmFsMSk7DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAic3Qz NTIgcGF5bG9hZCA9IDB4JTA4eFxuIiwgdmFsMik7DQo+ID4gKw0KPiA+ICsJCQlpZiAoIXhzZGly eF9nZXRfc3RyZWFtX3Byb3BlcnRpZXMoc3RhdGUpKSB7DQo+ID4gKwkJCQlzdGF0ZS0+dmlkbG9j a2VkID0gdHJ1ZTsNCj4gPiArCQkJCXhzZGlyeHNzX3NldF9ndGNsayhzdGF0ZSk7DQo+ID4gKwkJ CX0gZWxzZSB7DQo+ID4gKwkJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgc3RyZWFtDQo+ IHByb3BlcnRpZXMhXG4iKTsNCj4gPiArCQkJCXN0YXRlLT52aWRsb2NrZWQgPSBmYWxzZTsNCj4g PiArCQkJfQ0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAidmlkZW8gdW5s b2NrIGludGVycnVwdFxuIik7DQo+ID4gKwkJCXN0YXRlLT52aWRsb2NrZWQgPSBmYWxzZTsNCj4g PiArCQl9DQo+ID4gKw0KPiA+ICsJCW1lbXNldCgmc3RhdGUtPmV2ZW50LCAwLCBzaXplb2Yoc3Rh dGUtPmV2ZW50KSk7DQo+ID4gKwkJc3RhdGUtPmV2ZW50LnR5cGUgPSBWNEwyX0VWRU5UX1NPVVJD RV9DSEFOR0U7DQo+ID4gKwkJc3RhdGUtPmV2ZW50LnUuc3JjX2NoYW5nZS5jaGFuZ2VzID0NCj4g PiArCQkJVjRMMl9FVkVOVF9TUkNfQ0hfUkVTT0xVVElPTjsNCj4gPiArCQl2NGwyX3N1YmRldl9u b3RpZnlfZXZlbnQoJnN0YXRlLT5zdWJkZXYsICZzdGF0ZS0+ZXZlbnQpOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWlmIChzdGF0dXMgJiBYU0RJUlhfSU5UUl9VTkRFUkZMT1dfTUFTSykgew0KPiA+ ICsJCWRldl9kYmcoZGV2LCAiVmlkZW8gaW4gdG8gQVhJNCBTdHJlYW0gY29yZSB1bmRlcmZsb3cN Cj4gaW50ZXJydXB0XG4iKTsNCj4gPiArDQo+ID4gKwkJbWVtc2V0KCZzdGF0ZS0+ZXZlbnQsIDAs IHNpemVvZihzdGF0ZS0+ZXZlbnQpKTsNCj4gPiArCQlzdGF0ZS0+ZXZlbnQudHlwZSA9IFY0TDJf RVZFTlRfWElMSU5YX1NESVJYX1VOREVSRkxPVzsNCj4gPiArCQl2NGwyX3N1YmRldl9ub3RpZnlf ZXZlbnQoJnN0YXRlLT5zdWJkZXYsICZzdGF0ZS0+ZXZlbnQpOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmIChzdGF0dXMgJiBYU0RJUlhfSU5UUl9PVkVSRkxPV19NQVNLKSB7DQo+ID4gKwkJZGV2 X2RiZyhkZXYsICJWaWRlbyBpbiB0byBBWEk0IFN0cmVhbSBjb3JlIG92ZXJmbG93DQo+IGludGVy cnVwdFxuIik7DQo+ID4gKw0KPiA+ICsJCW1lbXNldCgmc3RhdGUtPmV2ZW50LCAwLCBzaXplb2Yo c3RhdGUtPmV2ZW50KSk7DQo+ID4gKwkJc3RhdGUtPmV2ZW50LnR5cGUgPSBWNEwyX0VWRU5UX1hJ TElOWF9TRElSWF9PVkVSRkxPVzsNCj4gPiArCQl2NGwyX3N1YmRldl9ub3RpZnlfZXZlbnQoJnN0 YXRlLT5zdWJkZXYsICZzdGF0ZS0+ZXZlbnQpOw0KPiA+ICsJfQ0KPiANCj4gQ2FuJ3Qgd2UgY29t YmluZSB0aGVzZSB0d28gaW4gYSBzaW5nbGUgZXZlbnQgdHlwZSwgd2l0aCB1bmRlcmZsb3cgYW5k DQo+IG92ZXJmbG93IHJlcG9ydGVkIGluIHRoZSBldmVudCBwYXlsb2FkIGluIGEgYml0bWFzayA/ DQo+IA0KDQpZZXMgd2UgY2FuLiBJIHdpbGwgY29tYmluZSB0aGVzZSB0d28gaW50byBhIHNpbmds ZSBldmVudCBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19zdWJzY3JpYmVfZXZl bnQgLSBTdWJzY3JpYmUgdG8gdmlkZW8gbG9jayBhbmQgdW5sb2NrIGV2ZW50DQo+ID4gKyAqIEBz ZDogVjRMMiBTdWIgZGV2aWNlDQo+ID4gKyAqIEBmaDogVjRMMiBGaWxlIEhhbmRsZQ0KPiA+ICsg KiBAc3ViOiBTdWJjcmliZSBldmVudCBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogUmV0dXJu OiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gPiArICovDQo+ID4gK3N0YXRpYyBp bnQgeHNkaXJ4c3Nfc3Vic2NyaWJlX2V2ZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4g KwkJCQkgICAgc3RydWN0IHY0bDJfZmggKmZoLA0KPiA+ICsJCQkJICAgIHN0cnVjdCB2NGwyX2V2 ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJc3Ry dWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3MtPmNvcmU7DQo+ID4gKw0K PiA+ICsJc3dpdGNoIChzdWItPnR5cGUpIHsNCj4gPiArCWNhc2UgVjRMMl9FVkVOVF9YSUxJTlhf U0RJUlhfVU5ERVJGTE9XOg0KPiA+ICsJY2FzZSBWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9PVkVS RkxPVzoNCj4gPiArCQlyZXQgPSB2NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCBYU0RJUlhf TUFYX0VWRU5UUywNCj4gTlVMTCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfRVZF TlRfU09VUkNFX0NIQU5HRToNCj4gPiArCQlyZXQgPSB2NGwyX3NyY19jaGFuZ2VfZXZlbnRfc3Vi c2NyaWJlKGZoLCBzdWIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gDQo+IEFzIEhhbnMgY29tbWVudGVkLCB5b3UgbmVlZCB0byBjYWxs IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQoKSBoZXJlLg0KPiANCg0KQWdyZWUuIEkgd2lsbCBh ZGQgdGhpcyBpbiBuZXh0IHJldmlzaW9uLg0KDQo+ID4gKwl9DQo+ID4gKwlkZXZfZGJnKGNvcmUt PmRldiwgIkV2ZW50IHN1YnNjcmliZWQgOiAweCUwOHhcbiIsIHN1Yi0+dHlwZSk7DQo+ID4gKwly ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3NfdW5z dWJzY3JpYmVfZXZlbnQgLSBVbnN1YnNjcmliZSBmcm9tIGFsbCBldmVudHMgcmVnaXN0ZXJlZA0K PiA+ICsgKiBAc2Q6IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmg6IFY0TDIgZmlsZSBoYW5k bGUNCj4gPiArICogQHN1YjogcG9pbnRlciB0byBFdmVudCB1bnN1YnNjcmlwdGlvbiBzdHJ1Y3R1 cmUNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdh dGl2ZSBlcnJvciBjb2RlLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc191bnN1 YnNjcmliZV9ldmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJICAgICAgc3Ry dWN0IHY0bDJfZmggKmZoLA0KPiA+ICsJCQkJICAgICAgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2Ny aXB0aW9uICpzdWIpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4 c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19jb3JlICpj b3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2LCAi RXZlbnQgdW5zdWJzY3JpYmUgOiAweCUwOHhcbiIsIHN1Yi0+dHlwZSk7DQo+ID4gKwlyZXR1cm4g djRsMl9ldmVudF91bnN1YnNjcmliZShmaCwgc3ViKTsNCj4gPiArfQ0KPiANCj4gSSB0aGluayB5 b3UgY2FuIGRyb3AgdGhpcyBmdW5jdGlvbiBhbmQgdXNlIHY0bDJfZXZlbnRfc3ViZGV2X3Vuc3Vi c2NyaWJlDQo+IGFzIHRoZSAuLnVuc3Vic2NyaWJlX2V2ZW50KCkgaGFuZGxlci4NCj4gDQoNCkFn cmVlIEkgd2lsbCByZW1vdmUgdGhpcyBpbiBuZXh0IHZlcnNpb24uDQoNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiB4c2Rpcnhzc19zX2N0cmwgLSBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBYaWxp bnggU0RJIFJ4IFY0TDIgY29udHJvbHMNCj4gPiArICogQGN0cmw6IFY0TDIgY29udHJvbCB0byBi ZSBzZXQNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUg VjRMMiBjb250cm9scyBmb3IgdGhlIFhpbGlueCBTREkgUngNCj4gPiArICogU3Vic3lzdGVtLg0K PiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3JzIG90aGVyd2lzZQ0K PiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19zX2N0cmwoc3RydWN0IHY0bDJfY3Ry bCAqY3RybCkNCj4gPiArew0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4 c3Nfc3RhdGUgKnhzZGlyeHNzID0NCj4gPiArCQljb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwg c3RydWN0IHhzZGlyeHNzX3N0YXRlLA0KPiA+ICsJCQkgICAgIGN0cmxfaGFuZGxlcik7DQo+ID4g KwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGNvcmUtPmRldjsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGRldiwg InNldCBjdHJsIGlkID0gMHglMDh4IHZhbCA9IDB4JTA4eFxuIiwNCj4gPiArCQljdHJsLT5pZCwg Y3RybC0+dmFsKTsNCj4gPiArDQo+ID4gKwlpZiAoeHNkaXJ4c3MtPnN0cmVhbWluZykgew0KPiA+ ICsJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHNldCBjb250cm9scyB3aGlsZSBzdHJlYW1pbmdcbiIp Ow0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXhzZGlyeF9j b3JlX2Rpc2FibGUoY29yZSk7DQo+ID4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+ID4gKwljYXNl IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9GUkFNRVI6DQo+ID4gKwkJeHNkaXJ4X2ZyYW1lcihjb3Jl LCBjdHJsLT52YWwpOw0KPiA+ICsJCXhzZGlyeHNzLT5mcmFtZXJfZW5hYmxlID0gY3RybC0+dmFs Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVklETE9D S19XSU5ET1c6DQo+ID4gKwkJeHNkaXJ4X3NldHZpZGxvY2t3aW5kb3coY29yZSwgY3RybC0+dmFs KTsNCj4gPiArCQl4c2Rpcnhzcy0+dmlkbG9ja3dpbiA9IGN0cmwtPnZhbDsNCj4gPiArCQlicmVh azsNCj4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlRfRU5BQkxFOg0K PiANCj4gQXMgdGhpcyBpcyB1c2VkIHRvIHNlbGVjdCB3aGljaCBlcnJvciBzb3VyY2VzIHRvIGVu YWJsZSwgaG93IGFib3V0DQo+IG5hbWluZyB0aGUgY29udHJvbCBWNEwyX0NJRF9YSUxJTlhfU0RJ UlhfRURIX0VSUk9SX1NPVVJDRVMgb3INCj4gVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJP UlNfTUFTSyA/DQo+IA0KDQpPay4gSSB3aWxsIHJlbmFtZSB0aGlzIHRvIFY0TDJfQ0lEX1hJTElO WF9TRElSWF9FREhfRVJST1JfU09VUkNFUw0KDQo+ID4gKwkJeHNkaXJ4X3NldGVkaGVycmNudHRy aWdnZXIoY29yZSwgY3RybC0+dmFsKTsNCj4gPiArCQl4c2Rpcnhzcy0+ZWRobWFzayA9IGN0cmwt PnZhbDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX1NF QVJDSF9NT0RFUzoNCj4gPiArCQlpZiAoY3RybC0+dmFsKSB7DQo+ID4gKwkJCWlmIChjb3JlLT5t b2RlID09IFhTRElSWFNTX1NESV9TVERfM0cpIHsNCj4gPiArCQkJCWRldl9kYmcoZGV2LCAiVXB0 byAzRyBzdXBwb3J0ZWRcbiIpOw0KPiA+ICsJCQkJY3RybC0+dmFsICY9IH4oQklUKFhTRElSWF9N T0RFXzZHX09GRlNFVCkNCj4gfA0KPiA+ICsJCQkJCSAgICAgICBCSVQoWFNESVJYX01PREVfMTJH SV9PRkZTRVQpDQo+IHwNCj4gPiArDQo+IEJJVChYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCkpOw0K PiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlpZiAoY29yZS0+bW9kZSA9PSBYU0RJUlhTU19TRElf U1REXzZHKSB7DQo+ID4gKwkJCQlkZXZfZGJnKGRldiwgIlVwdG8gNkcgc3VwcG9ydGVkXG4iKTsN Cj4gPiArCQkJCWN0cmwtPnZhbCAmPQ0KPiB+KEJJVChYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCkg fA0KPiA+ICsNCj4gQklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUKSk7DQo+ID4gKwkJCX0NCj4g PiArDQo+ID4gKwkJCXJldCA9IHhzZGlyeF9zZXRfbW9kZWRldGVjdChjb3JlLCBjdHJsLT52YWwp Ow0KPiA+ICsJCQlpZiAoIXJldCkNCj4gPiArCQkJCXhzZGlyeHNzLT5zZWFyY2htYXNrID0gY3Ry bC0+dmFsOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiU2VsZWN0IGF0 IGxlYXN0IG9uZSBtb2RlIVxuIik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0N Cj4gPiArCQlicmVhazsNCj4gDQo+IFRoZSB0cmFkaXRpb25hbCBhcHByb2FjaCB0byBzZWxlY3Qg dGltaW5nIHN0YW5kYXJkcyBpcyB0byB1c2UgaW9jdGxzLg0KPiBIYW5zLCBkbyB5b3UgdGhpbmsg YSBjdXN0b20gY29udHJvbCBpcyBmaW5lIGhlcmUsIG9yIHNob3VsZCB0aGUgZHYNCj4gdGltaW5n cyBpb2N0bHMgYmUgZXh0ZW5kZWQgKG9yIG5ldyBzZGkgdGltaW5ncyBpb2N0bHMgY3JlYXRlZCkg Pw0KPiANCj4gSWYgd2UgZ28gZm9yIGEgc2luZ2xlIGNvbnRyb2wsIEknbSBhIGJpdCBjb25jZXJu ZWQgdGhhdCB0aGlzIGNvbnRyb2wNCj4gd2lsbCByZXN0cmljdCB0aGUgc2VhcmNoIHdoZW4gbXVs dGlwbGUgYml0cyBhcmUgc2V0LCBidXQgZm9yY2UgYQ0KPiBzcGVjaWZpYyBtb2RlIHdoZW4gYSBz aW5nbGUgYml0IGlzIHNldC4gSSBkb24ndCBoYXZlIGVub3VnaCBleHBlcmllbmNlDQo+IHdpdGgg U0RJIHRvIHRlbGwgd2hldGhlciB0aGlzIGlzIHRoZSByaWdodCBiZWhhdmlvdXIuDQo+IA0KPiA+ ICsJZGVmYXVsdDoNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JF RywNCj4gPiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfU1NfRU5fTUFTSyk7DQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+IA0KPiBUaGlzIGxvb2tzIHdlaXJkLg0KPiANCj4gCQlyZXQgPSAtRUlO VkFMOw0KPiAJCWJyZWFrOw0KPiANCj4gd291bGQgYmUgYmV0dGVyLg0KPiANCg0KQWdyZWUuIEkg d2lsbCBmaXggdGhpcy4NCg0KPiA+ICsJfQ0KPiA+ICsJeHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUp Ow0KPiANCj4gRG8gd2UgcmVhbGx5IG5lZWQgdG8gZGlzYWJsZSBhbmQgcmVlbmFibGUgdGhlIGNv cmUgYXMgd2UncmUgZ3VhcmFudGVlZA0KPiBub3QgdG8gYmUgc3RyZWFtaW5nID8NCj4gDQoNClRo ZSBTREkgUnggY29yZSB3aWxsIGFsd2F5cyBiZSBlbmFibGVkIHRvIGJlIGFibGUgdG8gdW5kZXJz dGFuZCB3aGF0IGlzIHRoZSBpbmNvbWluZyBzdHJlYW0gcHJvcGVydGllcy4NCkR1cmluZyBzdHJl YW0gb24vb2ZmIHdlIG9ubHkgZW5hYmxlL2Rpc2FibGUgdGhlIHZpZGVvIGJyaWRnZXMgd2hpY2gg Y29udmVydCB0aGUgU0RJIHN0cmVhbSB0byBBWEk0LVMNCmFuZCBwYXNzIHRvIGRvd25zdHJlYW0g SVAuDQpJZiB0aGUgU0RJIFJ4IGNvcmUgaXNuJ3QgZW5hYmxlZCBiZWZvcmUgc3RyZWFtX29uLCB0 aGUgc3RyZWFtIHByb3BlcnRpZXMgKG1vZGUsIHdpZHRoLCBoZWlnaHQsIGZyYW1lIHJhdGUsIGV0 Yykgd29uJ3QgYmUga25vd24NCnRvIHRoZSBkcml2ZXIgYW5kIGhlbmNlIHRoZSBhcHBsaWNhdGlv bi4NCg0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHhzZGlyeHNzX2dfdm9sYXRpbGVfY3RybCAtIGdldCB0aGUgWGlsaW54IFNESSBSeCBjb250cm9s cw0KPiA+ICsgKiBAY3RybDogUG9pbnRlciB0byBWNEwyIGNvbnRyb2wNCj4gPiArICoNCj4gPiAr ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gPiArICovDQo+ID4g K3N0YXRpYyBpbnQgeHNkaXJ4c3NfZ192b2xhdGlsZV9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0 cmwpDQo+ID4gK3sNCj4gPiArCXUzMiB2YWw7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUg KnhzZGlyeHNzID0NCj4gPiArCQljb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCj4gPiArCQkJ ICAgICBzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUsIGN0cmxfaGFuZGxlcik7DQo+ID4gKwlzdHJ1Y3Qg eHNkaXJ4c3NfY29yZSAqY29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGNvcmUtPmRldjsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+ ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVDoNCj4gPiArCQlpZiAo IXhzZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQg dmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJdmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhf TU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9S WF9NT0RFX01BU0s7DQo+ID4gKw0KPiA+ICsJCXN3aXRjaCAodmFsKSB7DQo+ID4gKwkJY2FzZSBY U0RJUlhfTU9ERV9TRF9NQVNLOg0KPiA+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV9TRF9P RkZTRVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfSERfTUFTSzoN Cj4gPiArCQkJY3RybC0+dmFsID0gWFNESVJYX01PREVfSERfT0ZGU0VUOw0KPiA+ICsJCQlicmVh azsNCj4gPiArCQljYXNlIFhTRElSWF9NT0RFXzNHX01BU0s6DQo+ID4gKwkJCWN0cmwtPnZhbCA9 IFhTRElSWF9NT0RFXzNHX09GRlNFVDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJ UlhfTU9ERV82R19NQVNLOg0KPiA+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV82R19PRkZT RVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfMTJHSV9NQVNLOg0K PiA+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV8xMkdJX09GRlNFVDsNCj4gPiArCQkJYnJl YWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdGX01BU0s6DQo+ID4gKwkJCWN0cmwtPnZh bCA9IFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ ID4gKwkJYnJlYWs7DQo+IA0KPiBIYW5zIGNvbW1lbnRlZCB0aGF0IHRoZSBkdiB0aW1pbmdzIHN0 cnVjdHVyZSB3aWxsIHJlcG9ydCB3aGV0aGVyIHRoZQ0KPiBtb2RlIGlzIGludGVybGFjZWQsIEkg d29uZGVyIGlmIHJlcG9ydGluZyB0aGUgU0RJIG1vZGUgc2hvdWxkbid0IGdvDQo+IHRocm91Z2gg dGhhdCBzdHJ1Y3R1cmUgdG9vLg0KPiANCg0KSSBkb27igJl0IGtub3cgYWJvdXQgdGhpcy4gDQpX ZSBtYXkgYWRkIGEgZmVhdHVyZSBpbiBWNEwyIC8gRFJNIGZyYW1ld29yayB0byBzZXQgLyBnZXQg dGhlIFNESSBtb2Rlcy4NCg0KPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQ1JDOg0K PiA+ICsJCWN0cmwtPnZhbCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX0NSQ19FUlJDTlRf UkVHKTsNCj4gPiArCQl4c2Rpcnhzc193cml0ZShjb3JlLCBYU0RJUlhfQ1JDX0VSUkNOVF9SRUcs IDB4RkZGRik7DQo+ID4gKwkJYnJlYWs7DQo+IA0KPiBBcmUgQ1JDIGVycm9ycyBjb21tb24gKGFu ZCByZWNvdmVyYWJsZSksIG9yIGFyZSB0aGV5IHJhcmUgYW5kIGZhdGFsDQo+IGVycm9ycyA/IElu IG90aGVyIHdvcmRzLCBkb2VzIHRoaXMgcmVwb3J0IGluZm9ybWF0aW9uIHRoYXQgd291bGQgYmUN Cj4gY2xhc3NpZmllZCBhcyBsaW5rIHF1YWxpdHksIG9yIGZhdGFsIGVycm9ycyA/IEluIHRoZSBs YXRlciBjYXNlIEkgd29uZGVyDQo+IGlmIGFuIGV2ZW50IHdvdWxkbid0IG1ha2UgbW9yZSBzZW5z ZS4gSXQgY291bGQgYmUgcmVwb3J0ZWQgYXMgYW5vdGhlcg0KPiBiaXQgaW4gdGhlIG92ZXJmbG93 L3VuZGVyZmxvdyBldmVudC4NCj4gDQoNCkNSQyBlcnJvcnMgd2lsbCByZWZsZWN0IGxpbmsgcXVh bGl0eS4gDQpUaGVyZSBpcyBubyBpbnRlcnJ1cHQgZm9yIENSQyBlcnJvcnMuIA0KU28gZHJpdmVy IHNvZnR3YXJlIHdvbid0IGtub3cgd2hlbiB0byByZWFkIHRoaXMgcmVnaXN0ZXIuIA0KQWxzbyB0 aGlzIGlzIHNwZWNpZmljIHRvIFhpbGlueCBpbXBsZW1lbnRhdGlvbi4NCg0KPiA+ICsJY2FzZSBW NEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVDoNCj4gPiArCQl2YWwgPSB4c2Rpcnhzc19y ZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwkJdmFsICY9IFhTRElS WF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiArCQlpZiAodmFsID09IFhTRElSWF9N T0RFX1NEX01BU0spIHsNCj4gPiArCQkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLA0K PiBYU0RJUlhfRURIX0VSUkNOVF9SRUcpOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWRldl9k YmcoZGV2LCAiJWQgLSBub3QgaW4gU0QgbW9kZVxuIiwgY3RybC0+aWQpOw0KPiA+ICsJCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+IA0KPiBJZiBteSB1bmRlcnN0 YW5kaW5nIG9mIHRoZSBkYXRhc2hlZXQgaXMgY29ycmVjdCwgdGhpcyB3aWxsIGJlIHJlc2V0IGZv cg0KPiBldmVyeSBmcmFtZSwgcmlnaHQgPyBSZXBvcnRpbmcgdGhlIGluZm9ybWF0aW9uIHRoaXMg d2F5IGlzIHRodXMgcXVpdGUNCj4gcmFjeS4gSXNuJ3QgaXQgYmV0dGVyIHRvIHNlbmQgaXQgdGhy b3VnaCBhbiBldmVudCA/DQo+IA0KDQpUaGlzIGlzIG5vdCByZXNldCBwZXIgZnJhbWUuIA0KVGhp cyBpcyBhbiBlcnJvciByZXBvcnRpbmcgbWVjaGFuaXNtIHRoYXQgYXBwbGljYXRpb24gY2FuIHVz ZSB0byBnZXQgZXJyb3JzIGluIHN0cmVhbSB3aGlsZSANCnJ1bm5pbmcgU0QgbW9kZXMgKDcyMHg0 ODcgYW5kIDcyMHg1NzYpLg0KU28gSSB0aGluayBpdCBpcyBvayB0byBzZW5kIGl0IGxpa2UgdGhp cy4NCg0KPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX1NUQVRVUzoNCj4gPiAr CQl2YWwgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ ID4gKwkJdmFsICY9IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiArCQlp ZiAodmFsID09IFhTRElSWF9NT0RFX1NEX01BU0spIHsNCj4gPiArCQkJY3RybC0+dmFsID0geHNk aXJ4c3NfcmVhZChjb3JlLA0KPiBYU0RJUlhfRURIX1NUQVRfUkVHKTsNCj4gPiArCQl9IGVsc2Ug ew0KPiA+ICsJCQlkZXZfZGJnKGRldiwgIiVkIC0gbm90IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlk KTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiAN Cj4gU2FtZSBoZXJlLCBzZWVtcyBxdWl0ZSByYWN5Lg0KPiANCg0KU2FtZSBoZXJlIGFzIGVhcmxp ZXIgYWJvdXQgRURIIENvdW50ZXIuIFRoZXJlIGlzIG5vIGludGVycnVwdCBoZXJlIHRvby4NCg0K PiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVFNfSVNfSU5URVJMQUNFRDoNCj4gPiAr CQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4n dCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJY3RybC0+dmFsID0geHNkaXJ4c3MtPnRzX2lz X2ludGVybGFjZWQ7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX1hJTElOWF9T RElSWF9BQ1RJVkVfU1RSRUFNUzoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsN Cj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+ IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJ dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RSRUFNX01BU0s7DQo+ID4gKwkJ dmFsID4+PSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9BQ1RfU1RSRUFNX09GRlNFVDsNCj4gPiArCQlj dHJsLT52YWwgPSAxIDw8IHZhbDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9DSURf WElMSU5YX1NESVJYX0lTXzNHQjoNCj4gPiArCQlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQpIHsN Cj4gPiArCQkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgdmFsdWVzIHdoZW4gdmlkZW8gbm90DQo+ IGxvY2tlZCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJ dmFsID0geHNkaXJ4c3NfcmVhZChjb3JlLCBYU0RJUlhfTU9ERV9ERVRfU1RBVF9SRUcpOw0KPiA+ ICsJCXZhbCAmPSBYU0RJUlhfTU9ERV9ERVRfU1RBVF9MVkxCXzNHX01BU0s7DQo+ID4gKwkJY3Ry bC0+dmFsID0gdmFsID8gdHJ1ZSA6IGZhbHNlOw0KPiA+ICsJCWJyZWFrOw0KPiANCj4gU2hvdWxk bid0IHRoaXMgYWxzbyBnbyB0aHJvdWdoIERWIHRpbWluZ3MgPyBJZiBub3QsIEkgdGhpbmsgaXQg c2hvdWxkIGF0DQo+IGxlYXN0IGJlIGNvbWJpbmVkIHdpdGggVjRMMl9DSURfWElMSU5YX1NESVJY X01PREVfREVURUNULg0KPiANCg0KSSBhbSB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lIHZhbHVlcyB0 byBzZXQgbW9kZSBhbmQgZGV0ZWN0IGl0LiANCkFzIHRoZXJlIGlzIG5vIGRpZmZlcmVudCBiaXQg dG8gc3BlY2lmaWNhbGx5IGRldGVjdCAzR0IgTW9kZSwgaGVuY2UgdGhpcyBkaWZmZXJlbnRpYXRp b24gaXMgdGhlcmUuDQpJIHdpbGwgdHJ5IHRvIGNvbWJpbmUgdGhpcyBpbiBsYXRlciBwYXRjaC4N Cg0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlkZXZfZXJyKGRldiwgIkdldCBJbnZhbGlkIGNvbnRy b2wgaWQgMHglMHhcbiIsIGN0cmwtPmlkKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAr CX0NCj4gPiArCWRldl9kYmcoZGV2LCAiR2V0IGN0cmwgaWQgPSAweCUwOHggdmFsID0gMHglMDh4 XG4iLCBjdHJsLT5pZCwNCj4gPiArCQljdHJsLT52YWwpOw0KPiANCj4gSSB3b3VsZCBkcm9wIHRo aXMgbGluZS4NCj4gDQoNCk9rIEkgd2lsbCByZW1vdmUgdGhpcyBpbiBuZXh0IHBhdGNoLg0KDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhzZGlyeHNz X2xvZ19zdGF0dXMgLSBMb2dzIHRoZSBzdGF0dXMgb2YgdGhlIFNESSBSeCBTdWJzeXN0ZW0NCj4g PiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIgc3ViZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKg0K PiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHByaW50cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgWGlsaW54 IFNESSBSeCBTdWJzeXN0ZW0NCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MN Cj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGly eHNzID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAq Y29yZSA9ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiArCXUzMiBpOw0KPiA+ICsNCj4gPiArCXY0bDJf aW5mbyhzZCwgIioqKioqIFNESSBSeCBzdWJzeXN0ZW0gcmVnIGR1bXAgc3RhcnQgKioqKipcbiIp Ow0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDB4Mjg7IGkrKykgew0KPiANCj4gVGhlcmUgYXJlIHJl Z2lzdGVycyBpbiB0aGlzIHJhbmdlIHRoYXQgYXJlIG5vdCBkb2N1bWVudGVkIGluIHRoZQ0KPiBk YXRhc2hlZXQuIElzIGl0IHJlYWxseSBzYWZlIHRvIHJlYWQgdGhlbSA/IFRoZXJlIGFyZSBhbHNv IHJlZ2lzdGVycw0KPiB0aGF0IGFyZSBvZiBubyByZWFsIGludGVyZXN0IEkgYmVsaWV2ZSAoSVNS IGZvciBpbnN0YW5jZSksIG9yIHJlZ2lzdGVycw0KPiB0aGF0IHNlZW1zIHRvIG1hcCB0byBhIEZJ Rk8gKFJYX1NUMzUyX0RBVEFfRFMqKSB3aGljaCBtYXkgY2F1c2UgaXNzdWUNCj4gd2hlbiByZWFk IGFzIHRoZSBJUlEgaGFuZGxlciBleHRyYWN0cyBkYXRhIGZyb20gdGhlbSAoSSBjb3VsZCBiZSB3 cm9uZw0KPiBoZXJlIHRob3VnaCkuIFNob3VsZCB0aGlzIGJlIHJlc3RyaWN0ZWQgdG8gYSBoYW5k ZnVsIG9mIGNhcmVmdWxseQ0KPiBzZWxlY3RlZCByZWdpc3RlcnMgPyBZb3UgY291bGQgdGhlbiBh bHNvIHByaW50IHRoZWlyIG5hbWUgaW5zdGVhZCBvZg0KPiB0aGVpciBhZGRyZXNzLCB0aGF0IHdv dWxkIGJlIG1vcmUgcmVhZGFibGUuDQo+IA0KDQpPay4gSSB3aWxsIHByaW50IHJlZ2lzdGVycyB2 YWx1ZXMgd2l0aCByZWdpc3RlciBuYW1lcyBhbmQgb2Zmc2V0cyBpbiBuZXh0IHZlcnNpb24uDQoN Cj4gPiArCQl1MzIgZGF0YTsNCj4gPiArDQo+ID4gKwkJZGF0YSA9IHhzZGlyeHNzX3JlYWQoY29y ZSwgaSAqIDQpOw0KPiA+ICsJCXY0bDJfaW5mbyhzZCwgIm9mZnNldCAweCUwOHggZGF0YSAweCUw OHhcbiIsDQo+ID4gKwkJCSAgaSAqIDQsIGRhdGEpOw0KPiA+ICsJfQ0KPiA+ICsJdjRsMl9pbmZv KHNkLCAiKioqKiogU0RJIFJ4IHN1YnN5c3RlbSByZWcgZHVtcCBlbmQgKioqKipcbiIpOw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19n X2ZyYW1lX2ludGVydmFsIC0gR2V0IHRoZSBmcmFtZSBpbnRlcnZhbA0KPiA+ICsgKiBAc2Q6IFY0 TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZmk6IFBvaW50ZXIgdG8gVjRsMiBTdWIgZGV2aWNlIGZy YW1lIGludGVydmFsIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlz IHVzZWQgdG8gZ2V0IHRoZSBmcmFtZSBpbnRlcnZhbC4NCj4gPiArICogVGhlIGZyYW1lIHJhdGUg Y2FuIGJlIGludGVncmFsIG9yIGZyYWN0aW9uYWwuDQo+ID4gKyAqIEludGVncmFsIGZyYW1lIHJh dGUgZS5nLiBudW1lcmF0b3IgPSAxMDAwLCBkZW5vbWluYXRvciA9IDI0MDAwID0+IDI0DQo+IGZw cw0KPiA+ICsgKiBGcmFjdGlvbmFsIGZyYW1lIHJhdGUgZS5nLiBudW1lcmF0b3IgPSAxMDAxLCBk ZW5vbWluYXRvciA9IDI0MDAwID0+DQo+IDIzLjk3IGZwcw0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1 cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19nX2Zy YW1lX2ludGVydmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkgICAgIHN0cnVj dCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbCAqZmkpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4 c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0 cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsNCj4gPiAr CWlmICgheHNkaXJ4c3MtPnZpZGxvY2tlZCkgew0KPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAi VmlkZW8gbm90IGxvY2tlZCFcbiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWZpLT5pbnRlcnZhbCA9IHhzZGlyeHNzLT5mcmFtZV9pbnRlcnZhbDsNCj4g DQo+IFRoZXJlJ3MgYSBkYXRhIHJhY2Ugd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaGVyZS4N Cj4gDQoNClllcyBJIHdpbGwgZml4IHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKw0KPiA+ ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJmcmFtZSByYXRlIG51bWVyYXRvciA9ICVkIGRlbm9taW5h dG9yID0gJWRcbiIsDQo+ID4gKwkJeHNkaXJ4c3MtPmZyYW1lX2ludGVydmFsLm51bWVyYXRvciwN Cj4gPiArCQl4c2Rpcnhzcy0+ZnJhbWVfaW50ZXJ2YWwuZGVub21pbmF0b3IpOw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19zX3N0cmVh bSAtIEl0IGlzIHVzZWQgdG8gc3RhcnQvc3RvcCB0aGUgc3RyZWFtaW5nLg0KPiA+ICsgKiBAc2Q6 IFY0TDIgU3ViIGRldmljZQ0KPiA+ICsgKiBAZW5hYmxlOiBGbGFnIChUcnVlIC8gRmFsc2UpDQo+ ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIHN0YXJ0IG9yIHN0b3Ag b2Ygc3RyZWFtaW5nIGZvciB0aGUNCj4gPiArICogWGlsaW54IFNESSBSeCBTdWJzeXN0ZW0uDQo+ ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNlDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1 YmRldiAqc2QsIGludCBlbmFibGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0 ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhz c19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gY29yZS0+ZGV2Ow0KPiA+ICsNCj4gDQo+IE1heWJlDQo+IA0KPiAJaWYgKGVuYWJsZSA9PSB4 c2Rpcnhzcy0+c3RyZWFtaW5nKSB7DQo+IAkJZGV2X2RiZyguLi4pOw0KPiAJCXJldHVybiBlbmFi bGUgPyAtRUlOVkFMIDogMDsNCj4gCX0NCj4gDQo+ID8gVXAgdG8geW91Lg0KPiANCg0KQWdyZWUu IFRoaXMgd2lsbCBiZSBzaW1pbGFyIHRvIE1JUEkgQ1NJLTIgUnggZHJpdmVyIHRoZW4uDQpJIHdp bGwgZml4IHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKwlpZiAoZW5hYmxlKSB7DQo+ID4g KwkJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKSB7DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiVmlk ZW8gaXMgbm90IGxvY2tlZFxuIik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0N Cj4gPiArCQlpZiAoeHNkaXJ4c3MtPnN0cmVhbWluZykgew0KPiA+ICsJCQlkZXZfZGJnKGRldiwg IkFscmVhZHkgc3RyZWFtaW5nXG4iKTsNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJ fQ0KPiA+ICsNCj4gPiArCQl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUsIHRydWUpOw0K PiA+ICsJCXhzZGlyeHNzLT5zdHJlYW1pbmcgPSB0cnVlOw0KPiA+ICsJCWRldl9kYmcoZGV2LCAi U3RyZWFtaW5nIHN0YXJ0ZWRcbiIpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlpZiAoIXhzZGly eHNzLT5zdHJlYW1pbmcpIHsNCj4gPiArCQkJZGV2X2RiZyhkZXYsICJTdG9wcGVkIHN0cmVhbWlu ZyBhbHJlYWR5XG4iKTsNCj4gPiArCQkJcmV0dXJuIDA7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiAr CQl4c2Rpcnhfc3RyZWFtZmxvd19jb250cm9sKGNvcmUsIGZhbHNlKTsNCj4gPiArCQl4c2Rpcnhz cy0+c3RyZWFtaW5nID0gZmFsc2U7DQo+ID4gKwkJZGV2X2RiZyhkZXYsICJTdHJlYW1pbmcgc3Rv cHBlZFxuIik7DQo+ID4gKwl9DQo+ID4gKw0KPiANCj4gQW5kIHBvc3NpYmx5DQo+IA0KPiAJeHNk aXJ4c3MtPnN0cmVhbWluZyA9IGVuYWJsZTsNCj4gCWRldl9kYmcoZGV2LCAiU3RyZWFtaW5nICVz XCIsIGVuYWJsZSA/ICJzdGFydGVkIiA6ICJzdG9wcGVkIik7DQo+IA0KDQpBZ3JlZSB0byB0aGlz IHRvby4gSSB3aWxsIHVwZGF0ZSB0aGlzIGluIG5leHQgdmVyc2lvbi4NCg0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19nX2lucHV0X3N0 YXR1cyAtIEl0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2aWRlbyBzaWduYWwNCj4gPiAr ICogaXMgcHJlc2VudCAvIGxvY2tlZCBvbnRvIG9yIG5vdC4NCj4gPiArICoNCj4gPiArICogQHNk OiBWNEwyIFN1YiBkZXZpY2UNCj4gPiArICogQHN0YXR1czogc3RhdHVzIG9mIHNpZ25hbCBsb2Nr ZWQNCj4gPiArICoNCj4gPiArICogVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgdmlk ZW8gc2lnbmFsIGlzIHByZXNlbnQgYW5kIGxvY2tlZCBvbnRvDQo+ID4gKyAqIGJ5IHRoZSBTREkg UnggY29yZSBvciBub3QgYmFzZWQgb24gdmlkbG9ja2VkIGZsYWcuDQo+ID4gKyAqDQo+ID4gKyAq IFJldHVybjogemVybyBvbiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHhzZGly eHNzX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNkaXJ4 c3NzdGF0ZShzZCk7DQo+ID4gKw0KPiA+ICsJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKQ0KPiA+ ICsJCSpzdGF0dXMgPSBWNEwyX0lOX1NUX05PX1NZTkMgfCBWNEwyX0lOX1NUX05PX1NJR05BTDsN Cj4gPiArCWVsc2UNCj4gPiArCQkqc3RhdHVzID0gMDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKg0K PiA+ICtfX3hzZGlyeHNzX2dldF9wYWRfZm9ybWF0KHN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNk aXJ4c3MsDQo+ID4gKwkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCj4g PiArCQkJICB1bnNpZ25lZCBpbnQgcGFkLCB1MzIgd2hpY2gpDQo+ID4gK3sNCj4gPiArCXN3aXRj aCAod2hpY2gpIHsNCj4gPiArCWNhc2UgVjRMMl9TVUJERVZfRk9STUFUX1RSWToNCj4gPiArCQly ZXR1cm4gdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoJnhzZGlyeHNzLT5zdWJkZXYsIGNmZywN Cj4gcGFkKTsNCj4gPiArCWNhc2UgVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRToNCj4gPiArCQly ZXR1cm4gJnhzZGlyeHNzLT5mb3JtYXQ7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiBO VUxMOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3Nf aW5pdF9jZmcgLSBJbml0aWFsaXNlIHRoZSBwYWQgZm9ybWF0IGNvbmZpZyB0byBkZWZhdWx0DQo+ ID4gKyAqIEBzZDogUG9pbnRlciB0byBWNEwyIFN1YiBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAq IEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBwYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBw YWQgZm9ybWF0IHdpdGggdGhlIGRlZmF1bHQNCj4gPiArICogdmFsdWVzLg0KPiA+ICsgKg0KPiA+ ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rp cnhzc19pbml0X2NmZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkgICAgIHN0cnVj dCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4c2Rp cnhzc19zdGF0ZSAqeHNkaXJ4c3MgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVj dCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsNCj4gPiArDQo+ID4gKwlmb3JtYXQgPSB2NGwy X3N1YmRldl9nZXRfdHJ5X2Zvcm1hdChzZCwgY2ZnLCAwKTsNCj4gPiArCSpmb3JtYXQgPSB4c2Rp cnhzcy0+ZGVmYXVsdF9mb3JtYXQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19nZXRfZm9ybWF0IC0gR2V0IHRoZSBwYWQg Zm9ybWF0DQo+ID4gKyAqIEBzZDogUG9pbnRlciB0byBWNEwyIFN1YiBkZXZpY2Ugc3RydWN0dXJl DQo+ID4gKyAqIEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBwYWQgaW5mb3JtYXRpb24gc3Ry dWN0dXJlDQo+ID4gKyAqIEBmbXQ6IFBvaW50ZXIgdG8gcGFkIGxldmVsIG1lZGlhIGJ1cyBmb3Jt YXQNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgcGFk IGZvcm1hdCBpbmZvcm1hdGlvbi4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nl c3MNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZ2V0X2Zvcm1hdChzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9j b25maWcgKmNmZywNCj4gPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZt dCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hz ZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNk aXJ4c3MtPmNvcmU7DQo+ID4gKw0KPiA+ICsJaWYgKCF4c2Rpcnhzcy0+dmlkbG9ja2VkKSB7DQo+ ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJWaWRlbyBub3QgbG9ja2VkIVxuIik7DQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm10LT5mb3JtYXQgPSAqX194 c2Rpcnhzc19nZXRfcGFkX2Zvcm1hdCh4c2RpcnhzcywgY2ZnLA0KPiA+ICsJCQkJCQkgZm10LT5w YWQsIGZtdC0+d2hpY2gpOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2LCAiU3RyZWFt IHdpZHRoID0gJWQgaGVpZ2h0ID0gJWQgRmllbGQgPSAlZFxuIiwNCj4gPiArCQlmbXQtPmZvcm1h dC53aWR0aCwgZm10LT5mb3JtYXQuaGVpZ2h0LCBmbXQtPmZvcm1hdC5maWVsZCk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhz c19zZXRfZm9ybWF0IC0gVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUgcGFkIGZvcm1hdA0KPiA+ICsg KiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBTdWIgZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2Zn OiBQb2ludGVyIHRvIHN1YiBkZXZpY2UgcGFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQ0KPiA+ICsg KiBAZm10OiBQb2ludGVyIHRvIHBhZCBsZXZlbCBtZWRpYSBidXMgZm9ybWF0DQo+ID4gKyAqDQo+ ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBhZCBmb3JtYXQuDQo+ID4g KyAqIFNpbmNlIHRoZSBwYWQgZm9ybWF0IGlzIGZpeGVkIGluIGhhcmR3YXJlLCBpdCBjYW4ndCBi ZQ0KPiA+ICsgKiBtb2RpZmllZCBvbiBydW4gdGltZS4NCj4gPiArICoNCj4gPiArICogUmV0dXJu OiAwIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3Nfc2V0X2Zv cm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkgICAgICAgc3RydWN0IHY0bDJf c3ViZGV2X3BhZF9jb25maWcgKmNmZywNCj4gPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRl dl9mb3JtYXQgKmZtdCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAq X19mb3JtYXQ7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0gdG9feHNk aXJ4c3NzdGF0ZShzZCk7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyh4c2Rpcnhzcy0+Y29yZS5kZXYs DQo+ID4gKwkJInNldCB3aWR0aCAlZCBoZWlnaHQgJWQgY29kZSAlZCBmaWVsZCAlZCBjb2xvcnNw YWNlICVkXG4iLA0KPiA+ICsJCWZtdC0+Zm9ybWF0LndpZHRoLCBmbXQtPmZvcm1hdC5oZWlnaHQs DQo+ID4gKwkJZm10LT5mb3JtYXQuY29kZSwgZm10LT5mb3JtYXQuZmllbGQsDQo+ID4gKwkJZm10 LT5mb3JtYXQuY29sb3JzcGFjZSk7DQo+ID4gKw0KPiA+ICsJX19mb3JtYXQgPSBfX3hzZGlyeHNz X2dldF9wYWRfZm9ybWF0KHhzZGlyeHNzLCBjZmcsDQo+ID4gKwkJCQkJICAgICBmbXQtPnBhZCwg Zm10LT53aGljaCk7DQo+ID4gKw0KPiA+ICsJLyogQ3VycmVudGx5IHJlc2V0IHRoZSBjb2RlIHRv IG9uZSBmaXhlZCBpbiBoYXJkd2FyZSAqLw0KPiA+ICsJLyogVE9ETyA6IEFkZCBjaGVja3MgZm9y IHdpZHRoIGhlaWdodCAqLw0KPiA+ICsJZm10LT5mb3JtYXQuY29kZSA9IF9fZm9ybWF0LT5jb2Rl Ow0KPiANCj4gQXMgSGFucyByZXF1ZXN0ZWQsIHdpZHRoLCBoZWlnaHQgYW5kIGZpZWxkIHNob3Vs ZCBiZSBzZXQgaGVyZSB0b28sIGFuZA0KPiBwcm9iYWJseSBjb2xvcnNwYWNlIGluZm9ybWF0aW9u IHRvby4NCj4gDQoNClllcy4gSSB3aWxsIGJlIHVwZGF0aW5nIHRoaXMgaW4gbmV4dCB2ZXJzaW9u Lg0KDQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiB4c2Rpcnhzc19lbnVtX21idXNfY29kZSAtIEhhbmRsZSBwaXhlbCBmb3JtYXQgZW51bWVy YXRpb24NCj4gPiArICogQHNkOiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2IHN0cnVjdHVyZQ0KPiA+ ICsgKiBAY2ZnOiBWNEwyIHN1YmRldiBwYWQgY29uZmlndXJhdGlvbg0KPiA+ICsgKiBAY29kZTog cG9pbnRlciB0byB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSBzdHJ1Y3R1cmUNCj4gPiArICoN Cj4gPiArICogUmV0dXJuOiAtRUlOVkFMIG9yIHplcm8gb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCB4c2Rpcnhzc19lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYg KnNkLA0KPiA+ICsJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCj4g PiArCQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bQ0KPiAqY29kZSkNCj4g PiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNz c3RhdGUoc2QpOw0KPiA+ICsJdTMyIGluZGV4ID0gY29kZS0+aW5kZXg7DQo+ID4gKwl1MzIgbWF4 aW5kZXg7DQo+ID4gKw0KPiA+ICsJaWYgKHhzZGlyeHNzLT5jb3JlLmJwYyA9PSAxMCkNCj4gPiAr CQltYXhpbmRleCA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfMTBicGNfbWJ1c19mbXRzKTsNCj4gPiAr CWVsc2UNCj4gPiArCQltYXhpbmRleCA9IEFSUkFZX1NJWkUoeHNkaXJ4c3NfMTJicGNfbWJ1c19m bXRzKTsNCj4gPiArDQo+ID4gKwlpZiAoY29kZS0+cGFkIHx8IGluZGV4ID49IG1heGluZGV4KQ0K PiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWlmICh4c2Rpcnhzcy0+Y29yZS5i cGMgPT0gMTApDQo+ID4gKwkJY29kZS0+Y29kZSA9IHhzZGlyeHNzXzEwYnBjX21idXNfZm10c1tp bmRleF07DQo+ID4gKwllbHNlDQo+ID4gKwkJY29kZS0+Y29kZSA9IHhzZGlyeHNzXzEyYnBjX21i dXNfZm10c1tpbmRleF07DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19lbnVtX2R2X3RpbWluZ3M6IEVudW1lcmF0ZSBhbGwg dGhlIHN1cHBvcnRlZCBEViB0aW1pbmdzDQo+ID4gKyAqIEBzZDogcG9pbnRlciB0byB2NGwyIHN1 YmRldiBzdHJ1Y3R1cmUNCj4gPiArICogQHRpbWluZ3M6IERWIHRpbWluZ3Mgc3RydWN0dXJlIHRv IGJlIHJldHVybmVkLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IC1FSU5WQUwgaW5jYXNlIG9m IGludmFsaWQgaW5kZXggYW5kIHBhZCBvciB6ZXJvIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4g K3N0YXRpYyBpbnQgeHNkaXJ4c3NfZW51bV9kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsDQo+ID4gKwkJCQkgICAgc3RydWN0IHY0bDJfZW51bV9kdl90aW1pbmdzICp0aW1pbmdzKQ0K PiA+ICt7DQo+ID4gKwlpZiAodGltaW5ncy0+aW5kZXggPj0gQVJSQVlfU0laRShmbXRfY2FwKSkN Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlpZiAodGltaW5ncy0+cGFkICE9 IDApDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJdGltaW5ncy0+dGltaW5n cyA9IGZtdF9jYXBbdGltaW5ncy0+aW5kZXhdOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4c2Rpcnhzc19xdWVyeV9kdl90aW1pbmdzOiBRdWVyeSBm b3IgdGhlIGN1cnJlbnQgRFYgdGltaW5ncw0KPiA+ICsgKiBAc2Q6IHBvaW50ZXIgdG8gdjRsMiBz dWJkZXYgc3RydWN0dXJlDQo+ID4gKyAqIEB0aW1pbmdzOiBEViB0aW1pbmdzIHN0cnVjdHVyZSB0 byBiZSByZXR1cm5lZC4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAtRU5PTENLIHdoZW4gdmlk ZW8gaXMgbm90IGxvY2tlZCwgLUVSQU5HRSB3aGVuIGNvcnJlc3BvbmRpbmcNCj4gdGltaW5nDQo+ ID4gKyAqIGVudHJ5IGlzIG5vdCBmb3VuZCBvciB6ZXJvIG9uIHN1Y2Nlc3MuDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3F1ZXJ5X2R2X3RpbWluZ3Moc3RydWN0IHY0bDJfc3Vi ZGV2ICpzZCwNCj4gPiArCQkJCSAgICAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykN Cj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0YXRlICpzdGF0ZSA9IHRvX3hzZGlyeHNz c3RhdGUoc2QpOw0KPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsJaWYgKCFzdGF0 ZS0+dmlkbG9ja2VkKQ0KPiA+ICsJCXJldHVybiAtRU5PTENLOw0KPiA+ICsNCj4gPiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhzZGlyeHNzX2R2X3RpbWluZ3MpOyBpKyspIHsNCj4gPiAr CQlpZiAoc3RhdGUtPmZvcm1hdC53aWR0aCA9PSB4c2Rpcnhzc19kdl90aW1pbmdzW2ldLndpZHRo ICYmDQo+ID4gKwkJICAgIHN0YXRlLT5mb3JtYXQuaGVpZ2h0ID09IHhzZGlyeHNzX2R2X3RpbWlu Z3NbaV0uaGVpZ2h0ICYmDQo+ID4gKwkJICAgIHN0YXRlLT5mcmFtZV9pbnRlcnZhbC5kZW5vbWlu YXRvciA9PQ0KPiA+ICsJCSAgICAoeHNkaXJ4c3NfZHZfdGltaW5nc1tpXS5mcHMgKiAxMDAwKSkg ew0KPiA+ICsJCQkqdGltaW5ncyA9IHhzZGlyeHNzX2R2X3RpbWluZ3NbaV0uZm9ybWF0Ow0KPiA+ ICsJCQlyZXR1cm4gMDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIC1F UkFOR0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4g KyAqIE1lZGlhIE9wZXJhdGlvbnMNCj4gPiArICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHhzZGlyeHNzX21lZGlhX29wcyA9IHsNCj4g PiArCS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZQ0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIHhzZGlyeHNzX2N0 cmxfb3BzID0gew0KPiA+ICsJLmdfdm9sYXRpbGVfY3RybCA9IHhzZGlyeHNzX2dfdm9sYXRpbGVf Y3RybCwNCj4gPiArCS5zX2N0cmwJPSB4c2Rpcnhzc19zX2N0cmwNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyB4c2Rpcnhzc19lZGhfY3Ry bHNbXSA9IHsNCj4gPiArCXsNCj4gPiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJSQ05UX0VOQUJMRSwNCj4gPiAr CQkubmFtZQk9ICJTREkgUnggOiBFREggRXJyb3IgQ291bnQgRW5hYmxlIiwNCj4gPiArCQkudHlw ZQk9IFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0ssDQo+ID4gKwkJLm1pbgk9IDAsDQo+ID4gKwkJLm1h eAk9IFhTRElSWF9FREhfQUxMRVJSX01BU0ssDQo+ID4gKwkJLmRlZgk9IDAsDQo+ID4gKwl9LCB7 DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwyX0NJ RF9YSUxJTlhfU0RJUlhfRURIX0VSUkNOVCwNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBFREgg RXJyb3IgQ291bnQiLA0KPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4g PiArCQkubWluCT0gMCwNCj4gPiArCQkubWF4CT0gMHhGRkZGLA0KPiA+ICsJCS5zdGVwCT0gMSwN Cj4gPiArCQkuZGVmCT0gMCwNCj4gPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJ TEUgfA0KPiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9w cwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJ UlhfRURIX1NUQVRVUywNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBFREggU3RhdHVzIiwNCj4g PiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+ID4gKwkJLm1pbgk9IDAsDQo+ ID4gKwkJLm1heAk9IDB4RkZGRkZGRkYsDQo+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ICsJCS5kZWYJ PSAwLA0KPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19WT0xBVElMRSB8DQo+IFY0TDJf Q1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiArCX0NCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyB4c2Rpcnhzc19jdHJsc1tdID0gew0KPiA+ ICsJew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRM Ml9DSURfWElMSU5YX1NESVJYX0ZSQU1FUiwNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBFbmFi bGUgRnJhbWVyIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sDQo+ID4g KwkJLm1pbgk9IGZhbHNlLA0KPiA+ICsJCS5tYXgJPSB0cnVlLA0KPiA+ICsJCS5zdGVwCT0gMSwN Cj4gPiArCQkuZGVmCT0gdHJ1ZSwNCj4gPiArCX0sIHsNCj4gPiArCQkub3BzCT0gJnhzZGlyeHNz X2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9WSURMT0NLX1dJ TkRPVywNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBWaWRlbyBMb2NrIFdpbmRvdyIsDQo+ID4g KwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPiA+ICsJCS5taW4JPSAwLA0KPiA+ ICsJCS5tYXgJPSAweEZGRkZGRkZGLA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4gPiArCQkuZGVmCT0g WFNESVJYX0RFRkFVTFRfVklERU9fTE9DS19XSU5ET1csDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9w cwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJ UlhfU0VBUkNIX01PREVTLA0KPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IE1vZGVzIHNlYXJjaCBN YXNrIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0ssDQo+ID4gKwkJLm1p bgk9IDAsDQo+ID4gKwkJLm1heAk9IFhTRElSWF9ERVRFQ1RfQUxMX01PREVTLA0KPiA+ICsJCS5k ZWYJPSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUywNCj4gPiArCX0sIHsNCj4gPiArCQkub3BzCT0g JnhzZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9N T0RFX0RFVEVDVCwNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBNb2RlIERldGVjdCBTdGF0dXMi LA0KPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4gPiArCQkubWluCT0g WFNESVJYX01PREVfU0RfT0ZGU0VULA0KPiA+ICsJCS5tYXgJPSBYU0RJUlhfTU9ERV8xMkdGX09G RlNFVCwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ID4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFH X1ZPTEFUSUxFIHwNCj4gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPiA+ICsJfSwgew0KPiA+ ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElM SU5YX1NESVJYX0NSQywNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBDUkMgRXJyb3Igc3RhdHVz IiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+ID4gKwkJLm1pbgk9 IDAsDQo+ID4gKwkJLm1heAk9IDB4RkZGRkZGRkYsDQo+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ICsJ CS5kZWYJPSAwLA0KPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19WT0xBVElMRSB8DQo+ IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSwNCj4gPiArCX0sIHsNCj4gPiArCQkub3BzCT0gJnhz ZGlyeHNzX2N0cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9UU19J U19JTlRFUkxBQ0VELA0KPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IFRTIGlzIEludGVybGFjZWQi LA0KPiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwNCj4gPiArCQkubWluCT0g ZmFsc2UsDQo+ID4gKwkJLm1heAk9IHRydWUsDQo+ID4gKwkJLmRlZgk9IGZhbHNlLA0KPiA+ICsJ CS5zdGVwCT0gMSwNCj4gPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgfA0K PiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4 c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQkuaWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfQUNU SVZFX1NUUkVBTVMsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogQWN0aXZlIFN0cmVhbXMiLA0K PiA+ICsJCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwNCj4gPiArCQkubWluCT0gMSwN Cj4gPiArCQkubWF4CT0gMTYsDQo+ID4gKwkJLmRlZgk9IDEsDQo+ID4gKwkJLnN0ZXAJPSAxLA0K PiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19WT0xBVElMRSB8DQo+IFY0TDJfQ1RSTF9G TEFHX1JFQURfT05MWSwNCj4gPiArCX0sIHsNCj4gPiArCQkub3BzCT0gJnhzZGlyeHNzX2N0cmxf b3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9JU18zR0IsDQo+ID4gKwkJ Lm5hbWUJPSAiU0RJIFJ4IDogSXMgM0dCIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBF X0JPT0xFQU4sDQo+ID4gKwkJLm1pbgk9IGZhbHNlLA0KPiA+ICsJCS5tYXgJPSB0cnVlLA0KPiA+ ICsJCS5kZWYJPSBmYWxzZSwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ID4gKwkJLmZsYWdzICA9IFY0 TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwNCj4gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPiA+ ICsJfQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRl dl9jb3JlX29wcyB4c2Rpcnhzc19jb3JlX29wcyA9IHsNCj4gPiArCS5sb2dfc3RhdHVzID0geHNk aXJ4c3NfbG9nX3N0YXR1cywNCj4gPiArCS5zdWJzY3JpYmVfZXZlbnQgPSB4c2Rpcnhzc19zdWJz Y3JpYmVfZXZlbnQsDQo+ID4gKwkudW5zdWJzY3JpYmVfZXZlbnQgPSB4c2Rpcnhzc191bnN1YnNj cmliZV9ldmVudA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X3N1YmRldl92aWRlb19vcHMgeHNkaXJ4c3NfdmlkZW9fb3BzID0gew0KPiA+ICsJLmdfZnJhbWVf aW50ZXJ2YWwgPSB4c2Rpcnhzc19nX2ZyYW1lX2ludGVydmFsLA0KPiA+ICsJLnNfc3RyZWFtID0g eHNkaXJ4c3Nfc19zdHJlYW0sDQo+ID4gKwkuZ19pbnB1dF9zdGF0dXMgPSB4c2Rpcnhzc19nX2lu cHV0X3N0YXR1cywNCj4gPiArCS5xdWVyeV9kdl90aW1pbmdzID0geHNkaXJ4c3NfcXVlcnlfZHZf dGltaW5ncywNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9z dWJkZXZfcGFkX29wcyB4c2Rpcnhzc19wYWRfb3BzID0gew0KPiA+ICsJLmluaXRfY2ZnID0geHNk aXJ4c3NfaW5pdF9jZmcsDQo+ID4gKwkuZ2V0X2ZtdCA9IHhzZGlyeHNzX2dldF9mb3JtYXQsDQo+ ID4gKwkuc2V0X2ZtdCA9IHhzZGlyeHNzX3NldF9mb3JtYXQsDQo+ID4gKwkuZW51bV9tYnVzX2Nv ZGUgPSB4c2Rpcnhzc19lbnVtX21idXNfY29kZSwNCj4gPiArCS5lbnVtX2R2X3RpbWluZ3MgPSB4 c2Rpcnhzc19lbnVtX2R2X3RpbWluZ3MsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB4c2Rpcnhzc19vcHMgPSB7DQo+ID4gKwkuY29yZSA9 ICZ4c2Rpcnhzc19jb3JlX29wcywNCj4gPiArCS52aWRlbyA9ICZ4c2Rpcnhzc192aWRlb19vcHMs DQo+ID4gKwkucGFkID0gJnhzZGlyeHNzX3BhZF9vcHMNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gKyAqIFBsYXRmb3JtIERldmljZSBEcml2ZXINCj4g PiArICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3BhcnNlX29mKHN0cnVjdCB4 c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZSA9IHhzZGlyeHNzLT5jb3JlLmRldi0+b2Zfbm9kZTsNCj4gPiArCXN0cnVjdCB4c2Rp cnhzc19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gY29yZS0+ZGV2Ow0KPiA+ICsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmVwLCAqcmVwOw0K PiA+ICsJaW50IHJldDsNCj4gPiArCWNvbnN0IGNoYXIgKnNkaV9zdGQ7DQo+ID4gKw0KPiA+ICsJ Y29yZS0+aW5jbHVkZV9lZGggPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInhsbngsaW5j bHVkZS1lZGgiKTsNCj4gPiArCWRldl9kYmcoZGV2LCAiRURIIHByb3BlcnR5ID0gJXNcbiIsDQo+ ID4gKwkJY29yZS0+aW5jbHVkZV9lZGggPyAiUHJlc2VudCIgOiAiQWJzZW50Iik7DQo+ID4gKw0K PiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZSwgInhsbngsbGluZS1yYXRl IiwgJnNkaV9zdGQpOw0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwg InhsbngsbGluZS1yYXRlIHByb3BlcnR5IG5vdCBmb3VuZFxuIik7DQo+ID4gKwkJcmV0dXJuIHJl dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoIXN0cm5jbXAoc2RpX3N0ZCwgIjEyR19TRElf OERTIiwgWFNESVJYX01BWF9TVFJfTEVOR1RIKSkgew0KPiANCj4gU3RyaW5ncyBpbiBEVCBhcmUg bnVsbC10ZXJtaW5hdGVkLCB5b3UgY2FuIHVzZSBzdHJjbXAoKSBhbmQgZHJvcA0KPiBYU0RJUlhf TUFYX1NUUl9MRU5HVEguDQo+IA0KDQpJIHdpbGwgcmVtb3ZlIHRoZSBzdHJpbmdzIGZyb20gRFQg YW5kIGhhdmUgdmFsdWVzIDAsIDEgYW5kIDIgdG8gcmVwcmVzZW50IDNHLCA2RyBhbmQgMTJHIDhE UyBtb2RlIGNvbmZpZ3VyYXRpb25zLg0KDQo+ID4gKwkJY29yZS0+bW9kZSA9IFhTRElSWFNTX1NE SV9TVERfMTJHXzhEUzsNCj4gPiArCX0gZWxzZSBpZiAoIXN0cm5jbXAoc2RpX3N0ZCwgIjZHX1NE SSIsIFhTRElSWF9NQVhfU1RSX0xFTkdUSCkpIHsNCj4gPiArCQljb3JlLT5tb2RlID0gWFNESVJY U1NfU0RJX1NURF82RzsNCj4gPiArCX0gZWxzZSBpZiAoIXN0cm5jbXAoc2RpX3N0ZCwgIjNHX1NE SSIsIFhTRElSWF9NQVhfU1RSX0xFTkdUSCkpIHsNCj4gPiArCQljb3JlLT5tb2RlID0gWFNESVJY U1NfU0RJX1NURF8zRzsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJJbnZh bGlkIExpbmUgUmF0ZVxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4g KwlkZXZfZGJnKGRldiwgIlNESSBSeCBMaW5lIFJhdGUgPSAlcywgbW9kZSA9ICVkXG4iLCBzZGlf c3RkLA0KPiA+ICsJCWNvcmUtPm1vZGUpOw0KPiA+ICsNCj4gPiArCXJldCA9IG9mX3Byb3BlcnR5 X3JlYWRfdTMyKG5vZGUsICJ4bG54LGJwcCIsICZjb3JlLT5icGMpOw0KPiA+ICsJaWYgKHJldCA8 IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgeGxueCxicHBcbiIpOw0K PiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNvcmUtPmJwYyAh PSAxMCAmJiBjb3JlLT5icGMgIT0gMTIpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImJpdHMgcGVy IGNvbXBvbmVudD0ldS4gQ2FuIGJlIDEwIG9yIDEyIG9ubHlcbiIsDQo+ID4gKwkJCWNvcmUtPmJw Yyk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXAgPSBm d25vZGVfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X2lkKGRldl9md25vZGUoZGV2KSwgMCwgMCwNCj4g PiArDQo+IEZXTk9ERV9HUkFQSF9FTkRQT0lOVF9ORVhUKTsNCj4gPiArCWlmICghZXApIHsNCj4g PiArCQlkZXZfZXJyKGRldiwgIm5vIHNvdXJjZSBwb3J0IGZvdW5kIik7DQo+ID4gKwkJcmV0ID0g LUVJTlZBTDsNCj4gPiArCQlnb3RvIGR0X3BhcnNlX2RvbmU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmVwID0gZndub2RlX2dyYXBoX2dldF9yZW1vdGVfZW5kcG9pbnQoZXApOw0KPiA+ICsJaWYg KCFyZXApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIm5vIHJlbW90ZSBzaW5rIGVuZHBvaW50IGZv dW5kIik7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCX0NCj4gDQo+IEkgZG9uJ3QgdGhp bmsgeW91IG5lZWQgdG8gY2hlY2sgdGhpcywgdGhlIHN1YmRldiB3b24ndCBiZSBsaW5rZWQNCj4g cHJvcGVybHkgaW4gdGhlIHBpcGVsaW5lIGlmIHRoZXJlJ3Mgbm8gcG9ydCBhbnl3YXkuDQo+IA0K DQpPay4gSSB0aG91Z2h0IGl0IHdhcyBzdWJkZXYgZHJpdmVyJ3MgcmVzcG9uc2liaWxpdHkgdG8g dmFsaWRhdGUgdGhpcyB0b28uIEhlbmNlIGFkZGVkLiANCkkgd2lsbCByZW1vdmUgdGhpcyBwYXJz aW5nIGluIHRoZSBuZXh0IHZlcnNpb24uDQoNCj4gPiArDQo+ID4gKwlmd25vZGVfaGFuZGxlX3B1 dChyZXApOw0KPiA+ICtkdF9wYXJzZV9kb25lOg0KPiA+ICsJZndub2RlX2hhbmRsZV9wdXQoZXAp Ow0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4c2Rp cnhzc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldjsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAq eHNkaXJ4c3M7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZTsNCj4gPiArCXN0cnVj dCBkZXZpY2UgKmRldjsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbnVtX2N0 cmxzLCBudW1fZWRoX2N0cmxzID0gMCwgaTsNCj4gPiArDQo+ID4gKwl4c2RpcnhzcyA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnhzZGlyeHNzKSwgR0ZQX0tFUk5FTCk7DQo+ID4g KwlpZiAoIXhzZGlyeHNzKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCXhz ZGlyeHNzLT5jb3JlLmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKwljb3JlID0gJnhzZGlyeHNzLT5j b3JlOw0KPiA+ICsJZGV2ID0gY29yZS0+ZGV2Ow0KPiA+ICsNCj4gPiArCS8qIFJlZ2lzdGVyIGlu dGVycnVwdCBoYW5kbGVyICovDQo+ID4gKwljb3JlLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk ZXYsIDApOw0KPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGNvcmUt PmlycSwgTlVMTCwNCj4gPiArCQkJCQl4c2Rpcnhzc19pcnFfaGFuZGxlciwgSVJRRl9PTkVTSE9U LA0KPiA+ICsJCQkJCWRldl9uYW1lKGRldiksIHhzZGlyeHNzKTsNCj4gDQo+IFdoeSBhIHRocmVh ZGVkIElSUSA/DQoNClRoZSBpcnEgaGFuZGxlciBjYWxscyB4c2Rpcnhzc19zZXRfZ3RjbGsoKSB3 aGljaCBpbiB0dXJuIGNhbGxzIGNsa19zZXRfcmF0ZSgpIGFuZCBjbGtfZ2V0X3JhdGUoKSB3aGlj aCBjYW4ndCBiZSBjYWxsZWQgaW4gdGhlIGludGVycnVwdCBjb250ZXh0Lg0KSGVuY2UgYSB0aHJl YWRlZCBpcnEgaGFuZGxlci4NCg0KPiANCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJy KGRldiwgIkVyciA9ICVkIEludGVycnVwdCBoYW5kbGVyIHJlZyBmYWlsZWQhXG4iLA0KPiA+ICsJ CQlyZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+IA0KPiBZb3Ugc2hvdWxkIHJl cXVlc3QgdGhlIElSUSBhZnRlciByZXNldHRpbmcgdGhlIGNvcmUsIG90aGVyd2lzZQ0KPiBpbnRl cnJ1cHRzIGNvdWxkIGJlIHRyaWdnZXJlZCBpbW1lZGlhdGVseS4NCj4gDQoNCk9rIEkgd2lsbCBt b3ZlIHRoaXMgYWZ0ZXIgY29yZSBkaXNhYmxlZCBiZWxvdy4NCg0KPiA+ICsNCj4gPiArCWNvcmUt Pm51bV9jbGtzID0gQVJSQVlfU0laRSh4c2Rpcnhzc19jbGtzKTsNCj4gPiArCWNvcmUtPmNsa3Mg PSBkZXZtX2tjYWxsb2MoZGV2LCBjb3JlLT5udW1fY2xrcywNCj4gPiArCQkJCSAgc2l6ZW9mKCpj b3JlLT5jbGtzKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIWNvcmUtPmNsa3MpDQo+ID4gKwkJ cmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGNvcmUtPm51bV9j bGtzOyBpKyspDQo+ID4gKwkJY29yZS0+Y2xrc1tpXS5pZCA9IHhzZGlyeHNzX2Nsa3NbaV07DQo+ ID4gKw0KPiA+ICsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXQoZGV2LCBjb3JlLT5udW1fY2xrcywg Y29yZS0+Y2xrcyk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0K PiA+ICsJcmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoY29yZS0+bnVtX2Nsa3MsIGNvcmUt PmNsa3MpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiAr CXJldCA9IHhzZGlyeHNzX3BhcnNlX29mKHhzZGlyeHNzKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0K PiA+ICsJCWdvdG8gY2xrX2VycjsNCj4gPiArDQo+ID4gKwljb3JlLT5pb21lbSA9IGRldm1fcGxh dGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsNCj4gPiArCWlmIChJU19FUlIoY29yZS0+ aW9tZW0pKSB7DQo+ID4gKwkJcmV0ID0gUFRSX0VSUihjb3JlLT5pb21lbSk7DQo+ID4gKwkJZ290 byBjbGtfZXJyOw0KPiA+ICsJfQ0KPiANCj4gSWYgeW91IG1vdmUgdGhlc2UgdHdvIGNhbGxzIGFi b3ZlIGhhbmRsaW5nIG9mIHRoZSBjbG9ja3MsIHlvdSB3aWxsIGJlDQo+IGFibGUgdG8gcmV0dXJu IGltbWVkaWF0ZWx5IGFuZCBhdm9pZCB0aGUgZ290by4NCj4gDQoNCkFncmVlZC4gSSB3aWxsIG1v dmUgdGhlbSBhYm92ZSB0aGUgY2xvY2sgaW5pdGlhbGl6YXRpb24uDQoNCj4gPiArDQo+ID4gKwkv KiBSZXNldCB0aGUgY29yZSAqLw0KPiA+ICsJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbChjb3Jl LCBmYWxzZSk7DQo+ID4gKwl4c2RpcnhfY29yZV9kaXNhYmxlKGNvcmUpOw0KPiA+ICsJeHNkaXJ4 X2NsZWFyaW50cihjb3JlLCBYU0RJUlhfSU5UUl9BTExfTUFTSyk7DQo+ID4gKwl4c2RpcnhfZGlz YWJsZWludHIoY29yZSwgWFNESVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ICsJeHNkaXJ4X2VuYWJs ZWludHIoY29yZSwgWFNESVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ICsJeHNkaXJ4X2dsb2JhbGlu dHIoY29yZSwgdHJ1ZSk7DQo+ID4gKwl4c2Rpcnhzc193cml0ZShjb3JlLCBYU0RJUlhfQ1JDX0VS UkNOVF9SRUcsIDB4RkZGRik7DQo+ID4gKw0KPiA+ICsJLyogSW5pdGlhbGl6ZSBWNEwyIHN1YmRl dmljZSBhbmQgbWVkaWEgZW50aXR5ICovDQo+ID4gKwl4c2Rpcnhzcy0+cGFkLmZsYWdzID0gTUVE SUFfUEFEX0ZMX1NPVVJDRTsNCj4gPiArDQo+ID4gKwkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0 IGZvcm1hdCAqLw0KPiA+ICsJaWYgKGNvcmUtPmJwYyA9PSAxMCkNCj4gPiArCQl4c2Rpcnhzcy0+ ZGVmYXVsdF9mb3JtYXQuY29kZSA9DQo+IE1FRElBX0JVU19GTVRfVVlWWTEwXzFYMjA7DQo+ID4g KwllbHNlDQo+ID4gKwkJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmNvZGUgPQ0KPiBNRURJQV9C VVNfRk1UX1VZVlkxMl8xWDI0Ow0KPiA+ICsJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmZpZWxk ID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJeHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0LmNvbG9y c3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfREVGQVVMVDsNCj4gPiArCXhzZGlyeHNzLT5kZWZhdWx0 X2Zvcm1hdC53aWR0aCA9IFhTRElSWF9ERUZBVUxUX1dJRFRIOw0KPiA+ICsJeHNkaXJ4c3MtPmRl ZmF1bHRfZm9ybWF0LmhlaWdodCA9IFhTRElSWF9ERUZBVUxUX0hFSUdIVDsNCj4gPiArDQo+ID4g Kwl4c2Rpcnhzcy0+Zm9ybWF0ID0geHNkaXJ4c3MtPmRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsNCj4g PiArCS8qIEluaXRpYWxpemUgVjRMMiBzdWJkZXZpY2UgYW5kIG1lZGlhIGVudGl0eSAqLw0KPiA+ ICsJc3ViZGV2ID0gJnhzZGlyeHNzLT5zdWJkZXY7DQo+ID4gKwl2NGwyX3N1YmRldl9pbml0KHN1 YmRldiwgJnhzZGlyeHNzX29wcyk7DQo+ID4gKw0KPiA+ICsJc3ViZGV2LT5kZXYgPSAmcGRldi0+ ZGV2Ow0KPiA+ICsJc3Ryc2NweShzdWJkZXYtPm5hbWUsIGRldl9uYW1lKGRldiksIHNpemVvZihz dWJkZXYtPm5hbWUpKTsNCj4gPiArDQo+ID4gKwlzdWJkZXYtPmZsYWdzIHw9IFY0TDJfU1VCREVW X0ZMX0hBU19FVkVOVFMgfA0KPiBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsNCj4gPiArDQo+ ID4gKwlzdWJkZXYtPmVudGl0eS5vcHMgPSAmeHNkaXJ4c3NfbWVkaWFfb3BzOw0KPiA+ICsNCj4g PiArCXY0bDJfc2V0X3N1YmRldmRhdGEoc3ViZGV2LCB4c2Rpcnhzcyk7DQo+ID4gKw0KPiA+ICsJ cmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2LT5lbnRpdHksIDEsICZ4c2Rpcnhz cy0+cGFkKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gKw0K PiA+ICsJLyogSW5pdGlhbGlzZSBhbmQgcmVnaXN0ZXIgdGhlIGNvbnRyb2xzICovDQo+ID4gKwlu dW1fY3RybHMgPSBBUlJBWV9TSVpFKHhzZGlyeHNzX2N0cmxzKTsNCj4gPiArDQo+ID4gKwlpZiAo Y29yZS0+aW5jbHVkZV9lZGgpDQo+ID4gKwkJbnVtX2VkaF9jdHJscyA9IEFSUkFZX1NJWkUoeHNk aXJ4c3NfZWRoX2N0cmxzKTsNCj4gDQo+IEhvdyBhYm91dA0KPiANCj4gCQludW1fY3RybHMgKz0g QVJSQVlfU0laRSh4c2Rpcnhzc19lZGhfY3RybHMpOw0KPiANCj4gPiArDQo+ID4gKwl2NGwyX2N0 cmxfaGFuZGxlcl9pbml0KCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLA0KPiA+ICsJCQkgICAgICAg KG51bV9jdHJscyArIG51bV9lZGhfY3RybHMpKTsNCj4gDQo+IAkJCSAgICAgICBudW1fY3RybHMp Ow0KPiANCg0KQWdyZWUuIEkgd2lsbCBtYWtlIHRoaXMgY2hhbmdlIGluIG5leHQgdmVyc2lvbi4N Cg0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY3RybHM7IGkrKykgew0KPiANCj4g CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhzZGlyeHNzX2N0cmxzKTsgaSsrKSB7DQo+IA0K PiA+ICsJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7DQo+ID4gKw0KPiA+ICsJCWRldl9kYmcoZGV2 LCAiJWQgJXMgY3RybCA9IDB4JXhcbiIsIGksIHhzZGlyeHNzX2N0cmxzW2ldLm5hbWUsDQo+ID4g KwkJCXhzZGlyeHNzX2N0cmxzW2ldLmlkKTsNCj4gPiArDQo+ID4gKwkJY3RybCA9IHY0bDJfY3Ry bF9uZXdfY3VzdG9tKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyLA0KPiA+ICsJCQkJCSAgICAmeHNk aXJ4c3NfY3RybHNbaV0sIE5VTEwpOw0KPiA+ICsJCWlmICghY3RybCkgew0KPiA+ICsJCQlkZXZf ZGJnKGRldiwgIkZhaWxlZCB0byBhZGQgJXMgY3RybFxuIiwNCj4gPiArCQkJCXhzZGlyeHNzX2N0 cmxzW2ldLm5hbWUpOw0KPiA+ICsJCQlnb3RvIGVycm9yOw0KPiA+ICsJCX0NCj4gDQo+IEFzIHlv dSBjaGVjayBmb3IgeHNkaXJ4c3MtPmN0cmxfaGFuZGxlci5lcnJvciBiZWxvdyB5b3UgY2FuIGRy b3AgdGhpcw0KPiBjaGVjayBhbmQgdGhlIGVxdWl2YWxlbnQgb25lIGZvciB0aGUgRURIIGNvbnRy b2xzLg0KPiANCg0KT2sgSSB3aWxsIHJlbW92ZSB0aGlzIGNoZWNrIGhlcmUgYW5kIGluIEVESCBj b250cm9scyBiZWxvdy4NCg0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChjb3JlLT5pbmNsdWRl X2VkaCkgew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBudW1fZWRoX2N0cmxzOyBpKyspIHsNCj4g DQo+IAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeHNkaXJ4c3NfZWRoX2N0cmxzKTsgaSsr KSB7DQo+IA0KDQpUaGlzIHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IHZlcnNpb24uDQoNCj4gPiAr CQkJc3RydWN0IHY0bDJfY3RybCAqY3RybDsNCj4gPiArDQo+ID4gKwkJCWRldl9kYmcoZGV2LCAi JWQgJXMgY3RybCA9IDB4JXhcbiIsIGksDQo+ID4gKwkJCQl4c2Rpcnhzc19lZGhfY3RybHNbaV0u bmFtZSwNCj4gPiArCQkJCXhzZGlyeHNzX2VkaF9jdHJsc1tpXS5pZCk7DQo+ID4gKw0KPiA+ICsJ CQljdHJsID0gdjRsMl9jdHJsX25ld19jdXN0b20oJnhzZGlyeHNzLT5jdHJsX2hhbmRsZXIsDQo+ ID4gKwkJCQkJCSAgICAmeHNkaXJ4c3NfZWRoX2N0cmxzW2ldLA0KPiA+ICsJCQkJCQkgICAgTlVM TCk7DQo+ID4gKwkJCWlmICghY3RybCkgew0KPiA+ICsJCQkJZGV2X2RiZyhkZXYsICJGYWlsZWQg dG8gYWRkICVzIGN0cmxcbiIsDQo+ID4gKwkJCQkJeHNkaXJ4c3NfZWRoX2N0cmxzW2ldLm5hbWUp Ow0KPiA+ICsJCQkJZ290byBlcnJvcjsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpZiAoeHNkaXJ4c3MtPmN0cmxfaGFuZGxlci5lcnJvcikgew0KPiA+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBjb250cm9sc1xuIik7DQo+ID4gKwkJcmV0ID0geHNk aXJ4c3MtPmN0cmxfaGFuZGxlci5lcnJvcjsNCj4gPiArCQlnb3RvIGVycm9yOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXN1YmRldi0+Y3RybF9oYW5kbGVyID0gJnhzZGlyeHNzLT5jdHJsX2hhbmRs ZXI7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoJnhzZGlyeHNz LT5jdHJsX2hhbmRsZXIpOw0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBzZXQgY29udHJvbHNcbiIpOw0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgeHNkaXJ4c3MpOw0K PiA+ICsNCj4gPiArCXJldCA9IHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3ViZGV2KHN1YmRldik7DQo+ ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lz dGVyIHN1YmRldlxuIik7DQo+ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwl4c2Rpcnhzcy0+c3RyZWFtaW5nID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJeHNkaXJ4X2NvcmVf ZW5hYmxlKGNvcmUpOw0KPiA+ICsNCj4gPiArCWRldl9pbmZvKGRldiwgInByb2JlIHN1Y2Nlc3Nc biIpOw0KPiANCj4gWW91IGNhbiBkcm9wIHRoaXMgbGluZSwgc3VjY2Vzc2Z1bCBkcml2ZXIgcHJv YmluZyBzaG91bGQgYmUgc2lsZW50Lg0KPiANCg0KUmlnaHQuIEkgd2lsbCByZW1vdmUgdGhpcyBp biBuZXh0IHZlcnNpb24uDQoNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArZXJyb3I6DQo+ ID4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyKTsNCj4g PiArCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzdWJkZXYtPmVudGl0eSk7DQo+ID4gKwl4c2Rpcnhf Z2xvYmFsaW50cihjb3JlLCBmYWxzZSk7DQo+ID4gKwl4c2RpcnhfZGlzYWJsZWludHIoY29yZSwg WFNESVJYX0lOVFJfQUxMX01BU0spOw0KPiA+ICtjbGtfZXJyOg0KPiA+ICsJY2xrX2J1bGtfZGlz YWJsZV91bnByZXBhcmUoY29yZS0+bnVtX2Nsa3MsIGNvcmUtPmNsa3MpOw0KPiA+ICsJcmV0dXJu IHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNz X3N0YXRlICp4c2RpcnhzcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsJc3Ry dWN0IHhzZGlyeHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3MtPmNvcmU7DQo+ID4gKwlzdHJ1Y3Qg djRsMl9zdWJkZXYgKnN1YmRldiA9ICZ4c2Rpcnhzcy0+c3ViZGV2Ow0KPiA+ICsNCj4gPiArCXY0 bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsNCj4gPiArCXY0bDJfY3RybF9oYW5k bGVyX2ZyZWUoJnhzZGlyeHNzLT5jdHJsX2hhbmRsZXIpOw0KPiA+ICsJbWVkaWFfZW50aXR5X2Ns ZWFudXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gPiArDQo+ID4gKwl4c2RpcnhfZ2xvYmFsaW50cihj b3JlLCBmYWxzZSk7DQo+ID4gKwl4c2RpcnhfZGlzYWJsZWludHIoY29yZSwgWFNESVJYX0lOVFJf QUxMX01BU0spOw0KPiA+ICsJeHNkaXJ4X2NvcmVfZGlzYWJsZShjb3JlKTsNCj4gPiArCXhzZGly eF9zdHJlYW1mbG93X2NvbnRyb2woY29yZSwgZmFsc2UpOw0KPiA+ICsNCj4gPiArCWNsa19idWxr X2Rpc2FibGVfdW5wcmVwYXJlKGNvcmUtPm51bV9jbGtzLCBjb3JlLT5jbGtzKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgeHNkaXJ4c3Nfb2ZfaWRfdGFibGVbXSA9IHsNCj4gPiArCXsgLmNvbXBhdGli bGUgPSAieGxueCx2LXNtcHRlLXVoZHNkaS1yeC1zcy0yLjAiIH0sDQo+ID4gKwl7IH0NCj4gPiAr fTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHNkaXJ4c3Nfb2ZfaWRfdGFibGUpOw0K PiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHNkaXJ4c3NfZHJpdmVy ID0gew0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZQkJPSAieGlsaW54LXNkaXJ4c3Mi LA0KPiA+ICsJCS5vZl9tYXRjaF90YWJsZQk9IHhzZGlyeHNzX29mX2lkX3RhYmxlLA0KPiA+ICsJ fSwNCj4gPiArCS5wcm9iZQkJCT0geHNkaXJ4c3NfcHJvYmUsDQo+ID4gKwkucmVtb3ZlCQkJPSB4 c2Rpcnhzc19yZW1vdmUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJp dmVyKHhzZGlyeHNzX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJWaXNoYWwg U2FnYXIgPHZzYWdhckB4aWxpbnguY29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlhp bGlueCBTREkgUnggU3Vic3lzdGVtIERyaXZlciIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BM IHYyIik7DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtc2Rpcnhz cy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC0NCj4gc2Rpcnhzcy5oDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjZmMmEwOTM5NjhkOQ0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXNkaXJ4 c3MuaA0KPiA+IEBAIC0wLDAgKzEsMTc5IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovDQo+ID4gKy8qDQo+ID4gKyAq IFhpbGlueCBTREkgUnggU3Vic3lzdGVtIG1vZGUsIGV2ZW50LCBjdXN0b20gdGltaW5ncw0KPiA+ ICsgKiBhbmQgZmxhZyBkZWZpbml0aW9ucy4NCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChD KSAyMDE5IC0gMjAyMCBYaWxpbngsIEluYy4NCj4gPiArICoNCj4gPiArICogQ29udGFjdHM6IFZp c2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhpbGlueC5jb20+DQo+ID4gKyAqLw0KPiA+ICsNCj4g PiArI2lmbmRlZiBfX1VBUElfWElMSU5YX1NESVJYU1NfSF9fDQo+ID4gKyNkZWZpbmUgX19VQVBJ X1hJTElOWF9TRElSWFNTX0hfXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC92NGwyLWR2LXRpbWluZ3MuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L3ZpZGVvZGV2Mi5oPg0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogRXZlbnRzDQo+ID4g KyAqDQo+ID4gKyAqIFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX1VOREVSRkxPVzogVmlkZW8gaW4g dG8gQVhJNCBTdHJlYW0gY29yZQ0KPiB1bmRlcmZsb3dlZA0KPiA+ICsgKiBWNEwyX0VWRU5UX1hJ TElOWF9TRElSWF9PVkVSRkxPVzogVmlkZW8gaW4gdG8gQVhJNCBTdHJlYW0gY29yZQ0KPiBvdmVy Zmxvd2VkDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX0NM QVNTDQo+IChWNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQgfCAweDIwMCkNCj4gPiArI2RlZmluZSBW NEwyX0VWRU5UX1hJTElOWF9TRElSWF9VTkRFUkZMT1cNCj4gKFY0TDJfRVZFTlRfWElMSU5YX1NE SVJYX0NMQVNTIHwgMHgxKQ0KPiA+ICsjZGVmaW5lIFY0TDJfRVZFTlRfWElMSU5YX1NESVJYX09W RVJGTE9XDQo+IChWNEwyX0VWRU5UX1hJTElOWF9TRElSWF9DTEFTUyB8IDB4MikNCj4gPiArDQo+ ID4gKy8qDQo+ID4gKyAqIFRoaXMgZW51bSBpcyB1c2VkIHRvIHByZXBhcmUgdGhlIGJpdG1hc2sg b2YgbW9kZXMgdG8gYmUgZGV0ZWN0ZWQNCj4gPiArICovDQo+ID4gK2VudW0gew0KPiA+ICsJWFNE SVJYX01PREVfU0RfT0ZGU0VUID0gMCwNCj4gPiArCVhTRElSWF9NT0RFX0hEX09GRlNFVCwNCj4g PiArCVhTRElSWF9NT0RFXzNHX09GRlNFVCwNCj4gPiArCVhTRElSWF9NT0RFXzZHX09GRlNFVCwN Cj4gPiArCVhTRElSWF9NT0RFXzEyR0lfT0ZGU0VULA0KPiA+ICsJWFNESVJYX01PREVfMTJHRl9P RkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV9OVU1fU1VQUE9SVEVELA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArI2RlZmluZSBYU0RJUlhfREVURUNUX0FMTF9NT0RFUw0KPiAJKEJJVChYU0RJUlhfTU9E RV9TRF9PRkZTRVQpIHwgXA0KPiA+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV9IRF9PRkZTRVQpIHwg XA0KPiA+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV8zR19PRkZTRVQpIHwgXA0KPiA+ICsJCQkJCUJJ VChYU0RJUlhfTU9ERV82R19PRkZTRVQpIHwgXA0KPiA+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV8x MkdJX09GRlNFVCkgfCBcDQo+ID4gKwkJCQkJQklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUKSkN Cj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIEVESCBFcnJvciBUeXBlcw0KPiA+ICsgKiBBTkMgLSBB bmNpbGxhcnkgRGF0YSBQYWNrZXQgRXJyb3JzDQo+ID4gKyAqIEZGIC0gRnVsbCBGaWVsZCBFcnJv cnMNCj4gPiArICogQVAgLSBBY3RpdmUgUG9ydGlvbiBFcnJvcnMNCj4gPiArICovDQo+ID4gKw0K PiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19FREhfRVJSCQlCSVQoMCkNCj4gPiAr I2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNfRURBX0VSUgkJQklUKDEpDQo+ID4gKyNkZWZp bmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX0lESF9FUlIJCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIFhT RElSWF9FREhfRVJSQ05UX0FOQ19JREFfRVJSCQlCSVQoMykNCj4gPiArI2RlZmluZSBYU0RJUlhf RURIX0VSUkNOVF9BTkNfVUVTX0VSUgkJQklUKDQpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9F UlJDTlRfRkZfRURIX0VSUgkJQklUKDUpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRf RkZfRURBX0VSUgkJQklUKDYpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfSURI X0VSUgkJQklUKDcpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfSURBX0VSUgkJ QklUKDgpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfRkZfVUVTX0VSUgkJQklUKDkp DQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQVBfRURIX0VSUgkJQklUKDEwKQ0KPiA+ ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0VEQV9FUlIJCUJJVCgxMSkNCj4gPiArI2Rl ZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9JREhfRVJSCQlCSVQoMTIpDQo+ID4gKyNkZWZpbmUg WFNESVJYX0VESF9FUlJDTlRfQVBfSURBX0VSUgkJQklUKDEzKQ0KPiA+ICsjZGVmaW5lIFhTRElS WF9FREhfRVJSQ05UX0FQX1VFU19FUlIJCUJJVCgxNCkNCj4gPiArI2RlZmluZSBYU0RJUlhfRURI X0VSUkNOVF9QS1RfQ0hLU1VNX0VSUglCSVQoMTUpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhTRElS WF9FREhfQUxMRVJSX01BU0sJCTB4RkZGRg0KPiA+ICsNCj4gPiArLyogWGlsaW54IERWIHRpbWlu Z3Mgbm90IGluIG1haW5saW5lIHlldCAqLw0KPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBQMjQgeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4g PiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwNCj4gPiArCQlWNEwyX0RW X0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiArCQk3NDI1MDAw MCwgNTEwLCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZfQlRf U1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBQMjUgeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4g PiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwNCj4gPiArCQlWNEwyX0RW X0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiArCQk3NDI1MDAw MCwgNDAwLCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZfQlRf U1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBQMzAgeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4g PiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwNCj4gPiArCQlWNEwyX0RW X0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiArCQk3NDI1MDAw MCwgNjYsIDIwLCA2NiwgNCwgNSwgMzYsIDAsIDAsIDAsIFwNCj4gPiArCQlWNEwyX0RWX0JUX1NU RF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRfMjA0 OFgxMDgwSTQ4IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcDQo+ID4g KwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAxLCBcDQo+ID4gKwkJVjRMMl9EVl9I U1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ID4gKwkJNzQyNTAwMDAs IDMyOSwgNDQsIDMyOSwgMiwgNSwgMTUsIDMsIDUsIDE1LCBcDQo+ID4gKwkJVjRMMl9EVl9CVF9T VERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzIw NDhYMTA4MEk1MCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMSwgXA0KPiA+ICsJCVY0TDJfRFZf SFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ICsJCTc0MjUwMDAw LCAyNzQsIDQ0LCAyNzQsIDIsIDUsIDE1LCAzLCA1LCAxNSwgXA0KPiA+ICsJCVY0TDJfRFZfQlRf U1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBJNjAgeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4g PiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDEsIFwNCj4gPiArCQlWNEwyX0RW X0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiArCQk3NDI1MDAw MCwgNjYsIDIwLCA2NiwgMiwgNSwgMTUsIDMsIDUsIDE1LCBcDQo+ID4gKwkJVjRMMl9EVl9CVF9T VERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzE5 MjBYMTA4MFA0OCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMTkyMCwgMTA4MCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZf SFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ICsJCTE0ODUwMDAw MCwgNjM4LCA0NCwgMTQ4LCA0LCA1LCAzNiwgMCwgMCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZfQlRf U1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhMTlhfVjRMMl9EVl9CVF8y MDQ4WDEwODBQNDggeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsIFwNCj4g PiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDIwNDgsIDEwODAsIDAsIFwNCj4gPiArCQlWNEwyX0RW X0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwNCj4gPiArCQkxNDg1MDAw MDAsIDUxMCwgNDQsIDE0OCwgNCwgNSwgMzYsIDAsIDAsIDAsIFwNCj4gPiArCQlWNEwyX0RWX0JU X1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRf MjA0OFgxMDgwUDUwIHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcDQo+ ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygyMDQ4LCAxMDgwLCAwLCBcDQo+ID4gKwkJVjRMMl9E Vl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ID4gKwkJMTQ4NTAw MDAwLCA0MDAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9C VF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JU XzIwNDhYMTA4MFA2MCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0K PiA+ICsJVjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMCwgXA0KPiA+ICsJCVY0TDJf RFZfSFNZTkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ICsJCTE0ODUw MDAwMCwgODgsIDQ0LCAyMCwgNCwgNSwgMzYsIDAsIDAsIDAsIFwNCj4gPiArCQlWNEwyX0RWX0JU X1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5YX1Y0TDJfRFZfQlRf Mzg0MFgyMTYwUDQ4IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBcDQo+ ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygzODQwLCAyMTYwLCAwLCBcDQo+ID4gKwkJVjRMMl9E Vl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ID4gKwkJNTk0MDAw MDAwLCAxMjc2LCA4OCwgMjk2LCA4LCAxMCwgNzIsIDAsIDAsIDAsIFwNCj4gPiArCQlWNEwyX0RW X0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5YX1Y0TDJfRFZf QlRfNDA5NlgyMTYwUDQ4IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCBc DQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUyg0MDk2LCAyMTYwLCAwLCBcDQo+ID4gKwkJVjRM Ml9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ID4gKwkJNTk0 MDAwMDAwLCAxMDIwLCA4OCwgMjk2LCA4LCAxMCwgNzIsIDAsIDAsIDAsIFwNCj4gPiArCQlWNEwy X0RWX0JUX1NURF9TREkpIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYTE5YX1Y0TDJf RFZfQlRfMTkyMFgxMDgwSTQ4IHsgXA0KPiA+ICsJLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIw LCBcDQo+ID4gKwlWNEwyX0lOSVRfQlRfVElNSU5HUygxOTIwLCAxMDgwLCAxLCBcDQo+ID4gKwkJ VjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCBcDQo+ID4gKwkJ MTQ4NTAwMDAwLCAzNzEsIDg4LCAzNzEsIDIsIDUsIDE1LCAzLCA1LCAxNSwgXA0KPiA+ICsJCVY0 TDJfRFZfQlRfU1REX1NESSkgXA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX19VQVBJ X1hJTElOWF9TRElSWFNTX0hfXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGlu dXgveGlsaW54LXY0bDItY29udHJvbHMuaA0KPiBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngt djRsMi1jb250cm9scy5oDQo+ID4gaW5kZXggYjY0NDFmZTcwNWM1Li5lOWRlNjVlODI2NDIgMTAw NjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWNvbnRyb2xzLmgN Cj4gPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0bDItY29udHJvbHMuaA0KPiA+ IEBAIC03MSw0ICs3MSw3MSBAQA0KPiA+ICAvKiBOb2lzZSBsZXZlbCAqLw0KPiA+ICAjZGVmaW5l IFY0TDJfQ0lEX1hJTElOWF9UUEdfTk9JU0VfR0FJTg0KPiAJKFY0TDJfQ0lEX1hJTElOWF9UUEcg KyAxNykNCj4gPg0KPiA+ICsvKg0KPiA+ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbQ0KPiA+ ICsgKi8NCj4gPiArDQo+ID4gKy8qIFRoZSBiYXNlIGZvciB0aGUgc2RpIHJ4IGRyaXZlciBjb250 cm9scy4NCj4gPiArICogV2UgcmVzZXJ2ZSAzMiBjb250cm9scyBmb3IgdGhpcyBkcml2ZXIuDQo+ ID4gKyAqDQo+ID4gKyAqIFRoZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIXyogY29udHJvbHMg YXJlIHByZXNlbnQgb25seSBpZg0KPiA+ICsgKiBFREggaXMgZW5hYmxlZC4NCj4gPiArICogVGhl IGNvbnRyb2xzIHdoaWNoIGNhbiBiZSBzZXQgc2hvdWxkIG9ubHkgYmUgc2V0IGJlZm9yZSBlbmFi bGluZw0KPiA+ICsgKiBzdHJlYW1pbmcuIFRoZSBjb250cm9scyB3aGljaCBjYW4gYmUgZ290IHNo b3VsZCBiZSBjYWxsZWQgd2hpbGUNCj4gPiArICogc3RyZWFtaW5nIHRvIGdldCBjb3JyZWN0IHZh bHVlcy4NCj4gPiArICogVGhlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVCBjYW4g YmUgY2FsbGVkIHdoZW4gcXVlcnkNCj4gZHYgdGltaW5nDQo+ID4gKyAqIHJldHVybnMgYSB2YWxp ZCB0aW1pbmcuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhf U0RJUlgNCj4gCShWNEwyX0NJRF9YSUxJTlhfQkFTRSArIDB4MjApDQo+ID4gKw0KPiA+ICsvKiBG cmFtZXIgQ29udHJvbCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZnJhbWVyICovDQo+ID4gKyNk ZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0ZSQU1FUg0KPiAJKFY0TDJfQ0lEX1hJTElOWF9T RElSWCArIDEpDQo+IA0KPiBUaGlzIGNvbnRyb2wgbmVlZHMgbW9yZSBkb2N1bWVudGF0aW9uLiBX aGF0IGRvZXMgaXQgZG8sIGFuZCBob3cgc2hvdWxkDQo+IGl0IGJlIHVzZWQgPw0KDQpUaGlzIGlz IGRvY3VtZW50ZWQgaW4gdGhlIFRhYmxlIDItMiByeF9mcmFtZV9lbiByb3cgb2YgUEcgMjA1IA0K aHR0cHM6Ly93d3cueGlsaW54LmNvbS9zdXBwb3J0L2RvY3VtZW50YXRpb24vaXBfZG9jdW1lbnRh dGlvbi92X3NtcHRlX3VoZHNkaS92MV8wL3BnMjA1LXYtc21wdGUtdWhkc2RpLnBkZg0KDQoiVGhp cyBpbnB1dCBlbmFibGVzIHRoZSBTREkgZnJhbWVyIGZ1bmN0aW9uLiBXaGVuIHRoaXMgaW5wdXQg aXMgSGlnaCwgdGhlIGZyYW1lciBhdXRvbWF0aWNhbGx5IHJlYWRqdXN0cyB0aGUgb3V0cHV0IHdv cmQNCmFsaWdubWVudCB0byBtYXRjaCB0aGUgYWxpZ25tZW50IG9mIGVhY2ggdGltaW5nIHJlZmVy ZW5jZSBzaWduYWwgKFRSUykuIFRSUyBpcyBhIGdlbmVyaWMgdGVybSByZWZlcnJpbmcgdG8gYm90 aCBFQVYgYW5kIFNBViBzZXF1ZW5jZXMuDQpOb3JtYWxseSwgdGhpcyBpbnB1dCBzaG91bGQgYmUg YWx3YXlzIGJlIEhpZ2guIEJ1dCwgdGhlIHVzZXIgYXBwbGljYXRpb24gbWF5IGNvbnRyb2wgdGhp cyBpbnB1dCB0byBpbXBsZW1lbnQgVFJTIGZpbHRlcmluZw0KdG8gcHJldmVudCBhIHNpZ25hbCBt aXNhbGlnbmVkIFRSUyBmcm9tIGNhdXNpbmcgZXJyb25lb3VzIGFsaWdubWVudCBjaGFuZ2VzLiIN CkUvU0FWIGlzIEVuZC9TdGFydCBvZiBBY3RpdmUgVmlkZW8uDQoNCkkgd2lsbCB1cGRhdGUgdGhp cyBpbiBuZXh0IHZlcnNpb24NCg0KPiANCj4gPiArLyoNCj4gPiArICogVmlkZW8gTG9jayBXaW5k b3cgQ29udHJvbCB0byBzZXQgdGhlIHZpZGVvIGxvY2sgd2luZG93IHZhbHVlDQo+ID4gKyAqIFRo aXMgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoZSBtb2RlIGFuZCB0cmFuc3BvcnQgc3RyZWFtIG5l ZWQNCj4gPiArICogdG8gYmUgbG9ja2VkIGJlZm9yZSBhIHZpZGVvIGxvY2sgaW50ZXJydXB0IG9j Y3Vycy4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX1ZJRExP Q0tfV0lORE9XDQo+IAkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgMikNCj4gPiArLyogRURIIEVy cm9yIE1hc2sgQ29udHJvbCB0byBlbmFibGUgRURIIGVycm9yIGNvdW50ICovDQo+ID4gKyNkZWZp bmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJDTlRfRU5BQkxFDQo+IAkoVjRMMl9DSURf WElMSU5YX1NESVJYICsgMykNCj4gPiArLyoNCj4gPiArICogTW9kZSBzZWFyY2ggQ29udHJvbCB0 byBwYXNzIHRoZSBiaXQgbWFzayBvZiBtb2RlcyB0byBkZXRlY3QuDQo+ID4gKyAqDQo+ID4gKyAq IGJpdCAwIHNldCB0byBkZXRlY3QgU0QgbW9kZSwNCj4gPiArICogYml0IDEgc2V0IHRvIGRldGVj dCBIRCBtb2RlLA0KPiA+ICsgKiBiaXQgMiBzZXQgdG8gZGV0ZWN0IDNHICgzR0EgJiAzR0IpIG1v ZGUsDQo+ID4gKyAqIGJpdCAzIHNldCB0byBkZXRlY3QgNkcgbW9kZSwNCj4gPiArICogYml0IDQg c2V0IHRvIGRldGVjdCAxMkcgaW50ZWdlciBmcmFtZSByYXRlIG1vZGUsDQo+ID4gKyAqIGJpdCA1 IHNldCB0byBkZXRlY3QgMTJHIGZyYWN0aW9uYWwgZnJhbWUgcmF0ZSBtb2RlLA0KPiA+ICsgKi8N Cj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfU0VBUkNIX01PREVTDQo+IAkoVjRM Ml9DSURfWElMSU5YX1NESVJYICsgNCkNCj4gPiArLyoNCj4gPiArICogR2V0IERldGVjdGVkIE1v ZGUgY29udHJvbA0KPiA+ICsgKg0KPiA+ICsgKiBDb250cm9sIFZhbHVlIC0gTW9kZSBkZXRlY3Rl ZA0KPiA+ICsgKiAgICAgICAgMCAgICAgIC0gICAgIFNEDQo+ID4gKyAqICAgICAgICAxICAgICAg LSAgICAgSEQNCj4gPiArICogICAgICAgIDIgICAgICAtICAgICAzRyAoM0dBICYgM0dCKQ0KPiA+ ICsgKiAgICAgICAgMyAgICAgIC0gICAgIDZHDQo+ID4gKyAqICAgICAgICA0ICAgICAgLSAgICAg MTJHIGludGVnZXIgZnJhbWUgcmF0ZQ0KPiA+ICsgKiAgICAgICAgNSAgICAgIC0gICAgIDEyRyBm cmFjdGlvbmFsIGZyYW1lIHJhdGUNCj4gPiArICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElM SU5YX1NESVJYX01PREVfREVURUNUDQo+IAkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgNSkNCj4g PiArLyogR2V0IG51bWJlciBvZiBDUkMgZXJyb3JzIHN0YXR1cyBjb250cm9sICovDQo+ID4gKyNk ZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX0NSQw0KPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElS WCArIDYpDQo+ID4gKy8qIEdldCBFREggZXJyb3IgY291bnQgY29udHJvbCAqLw0KPiA+ICsjZGVm aW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJSQ05UDQo+IAkoVjRMMl9DSURfWElMSU5Y X1NESVJYICsgNykNCj4gPiArLyogR2V0IEVESCBzdGF0dXMgY29udHJvbCAqLw0KPiA+ICsjZGVm aW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfU1RBVFVTDQo+IAkoVjRMMl9DSURfWElMSU5Y X1NESVJYICsgOCkNCj4gPiArLyogR2V0IFRyYW5zcG9ydCBJbnRlcmxhY2VkIHN0YXR1cyB3aGV0 aGVyIGl0IGlzIGludGVybGFjZWQgb3Igbm90ICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElM SU5YX1NESVJYX1RTX0lTX0lOVEVSTEFDRUQNCj4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyA5 KQ0KPiA+ICsvKiBHZXQgbnVtYmVyIG9mIEFjdGl2ZSBTdHJlYW1zICovDQo+ID4gKyNkZWZpbmUg VjRMMl9DSURfWElMSU5YX1NESVJYX0FDVElWRV9TVFJFQU1TDQo+IAkoVjRMMl9DSURfWElMSU5Y X1NESVJYICsgMTApDQo+ID4gKy8qDQo+ID4gKyAqIEdldCBpZiB0aGUgZGV0ZWN0ZWQgbW9kZSBp cyAzR0IuDQo+ID4gKyAqIENhbiBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoZWQgYmV0d2VlbiAzR0Eg YW5kIDNHQg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfSVNf M0dCDQo+IAkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgMTEpDQo+ID4gKw0KPiA+ICAjZW5kaWYg LyogX19VQVBJX1hJTElOWF9WNEwyX0NPTlRST0xTX0hfXyAqLw0KPiANCj4gLS0NCj4gUmVnYXJk cywNCj4gDQo+IExhdXJlbnQgUGluY2hhcnQNCg0KUmVnYXJkcw0KVmlzaGFsIFNhZ2FyDQo=