Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp631807img; Thu, 21 Mar 2019 05:53:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqyH3cSFlIxdG9NoEqi2N/4Y576i0M+5EAW5+pfhf3QmpMDsZfY3wojoD1YnQeETGrBlR+5U X-Received: by 2002:a62:170c:: with SMTP id 12mr3129643pfx.104.1553172821709; Thu, 21 Mar 2019 05:53:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553172821; cv=none; d=google.com; s=arc-20160816; b=ju75aBybeXtV2ce9klyjqc8ZrvPhpRTiMgjrZqaogpP2mTld6QWGbbfE9w7O1Buy0/ 3mcq3XYKsdXkC+5Kx9LQgDgXUzu7cMyIWpndzteCyxQK04ew8Cdf2GA2HcXfPvTG46JT FcsYQhIfzHCcZJZF7QRPfeFIEpIB9KXUtadn1boENCajv14JKHdHQHUuYtM+dtZ7gq7A AhgYXh5Z7j8DHxvtJHJc8Kif66DUgQAnlRPqFy9JmFZHVoKm6cjrr91WYT6qKtXW9GXt x4n4uqY5lr4tpMzd2EK64v7NBcaUNPGCgPnI1p7nOs+Mp9kcK/uJZR3bfepFKA5wQJF7 JqPQ== ARC-Message-Signature: i=1; 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=SFfhQT5h32Y2j22OqACRoS5j5WoKzUo9JEJlo8Jy8MA=; b=VI56ZVUUQMXxj7yuV3pz0hddvoJYY05inewBxAvMvOxM+l+M3KBUcFqOBxNkF03/T1 4oAmdfh8eBHzN2gl6fJscxHBDS4JVHJSwE29wAzAeJdNDo7yro/IU3WfuzVXE53qE0fj LML6IxSlFWOtG5TJV3wpHWQyZxRWJU+WcrHyQBZdT4/x0U9/2O2lcGe0mYPfaesUxj3g TskMla8fHiUOne3FcVnjCbZ+wim6rqiEwNBXjyngmPPEWlq5hfCUZAFxCE4l+OcINZge fXeV/RURuoSFY3iR+0wT3eYXo97mlxniuoosbMJiugSboV3ijWoBJq/uVecuXtyJa00Z Sjeg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=I64aRJgJ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d16si4078820pgh.440.2019.03.21.05.53.22; Thu, 21 Mar 2019 05:53:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=I64aRJgJ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728215AbfCUMwi (ORCPT + 99 others); Thu, 21 Mar 2019 08:52:38 -0400 Received: from mail-eopbgr80088.outbound.protection.outlook.com ([40.107.8.88]:38532 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728032AbfCUMwh (ORCPT ); Thu, 21 Mar 2019 08:52:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SFfhQT5h32Y2j22OqACRoS5j5WoKzUo9JEJlo8Jy8MA=; b=I64aRJgJCz8dP056x4Pf+UbLpoi/0vLwFqXb5e0w8YCnRbZ2rOYocLCwwi1aHMhyjeWwz7s5zyeRiT7MY8gGH39Mj1+PXk/Hja+mf9z8s9WG/d6nO2dQWHyk6nVdf57+nX6J5eDU2fmcSh+DQYcU6ssO0jcMOyIJKu0iypToHUQ= Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com (52.134.72.18) by DB3PR0402MB3834.eurprd04.prod.outlook.com (52.134.71.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1709.14; Thu, 21 Mar 2019 12:47:33 +0000 Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08]) by DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08%7]) with mapi id 15.20.1730.013; Thu, 21 Mar 2019 12:47:33 +0000 From: Anson Huang To: =?utf-8?B?VXdlIEtsZWluZS1Lw7ZuaWc=?= CC: "thierry.reding@gmail.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "kernel@pengutronix.de" , "festevam@gmail.com" , "linux@armlinux.org.uk" , "stefan@agner.ch" , "otavio@ossystems.com.br" , Leonard Crestez , "schnitzeltony@gmail.com" , "jan.tuerk@emtrion.com" , Robin Gong , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , dl-linux-imx Subject: RE: [PATCH V8 2/5] pwm: Add i.MX TPM PWM driver support Thread-Topic: [PATCH V8 2/5] pwm: Add i.MX TPM PWM driver support Thread-Index: AQHU33+6HvJ7a8klrE6atPwc3kmOS6YVz3gAgAACysCAABPyAIAAHlow Date: Thu, 21 Mar 2019 12:47:32 +0000 Message-ID: References: <1553128960-17923-1-git-send-email-Anson.Huang@nxp.com> <1553128960-17923-3-git-send-email-Anson.Huang@nxp.com> <20190321091950.tkzem7cbgvtynr5m@pengutronix.de> <20190321104112.xits5qgk7tsuhdps@pengutronix.de> In-Reply-To: <20190321104112.xits5qgk7tsuhdps@pengutronix.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=anson.huang@nxp.com; x-originating-ip: [119.31.174.69] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ccbe18ec-2d7b-4cb9-7af0-08d6adfb631c x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:DB3PR0402MB3834; x-ms-traffictypediagnostic: DB3PR0402MB3834: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 0983EAD6B2 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(366004)(396003)(346002)(376002)(39860400002)(189003)(199004)(13464003)(54906003)(6436002)(52536014)(446003)(81166006)(6916009)(81156014)(44832011)(11346002)(93886005)(55016002)(8676002)(9686003)(486006)(6306002)(5660300002)(33656002)(186003)(6246003)(2906002)(476003)(316002)(229853002)(305945005)(71200400001)(71190400001)(14444005)(86362001)(66574012)(3846002)(256004)(6116002)(7696005)(26005)(4326008)(7736002)(45080400002)(68736007)(76176011)(478600001)(14454004)(966005)(102836004)(53936002)(105586002)(53546011)(106356001)(30864003)(7416002)(8936002)(99286004)(74316002)(53946003)(97736004)(25786009)(6506007)(66066001)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB3PR0402MB3834;H:DB3PR0402MB3916.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: MkrmaakL8uAc8v3Pgqv/gV9qXI4P7LtPBZ7PUxwF4rE+LrAk1ff0scSdreNfXZJSfqKZu93ewgZaEkA6Yuge456DT7FgGMWbL2uA1rQ4oYuIylF9XRVbVUZo7G9kEBFMxzuYg/1kENCFyd7zBfxK8FpY32vF4Mf4LlUTeN8mYsEycXuF8/nI5bDzloNIYzHqH/iL7+HTEB1iFFK5GzhOTDQhE2t5+RlxzY2dmaDB6iSGibI9EMPsqXYbvrkHTxEd31RpdmDSgX94s45+M+nqUr8ODY7YeqARE1y8xt2ml26vUFk9J8NM1DOZ6FwXTz6Bg45Nsjh2YBFmG5M0X2oAnrzAreIDyEkhLYiCR6aEoblCyxhTKhA4s0LUFy0ZY62MLnfO6GLuIMz1pM1hTEV3Ik89u0simZqk3OBbqCFfvog= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ccbe18ec-2d7b-4cb9-7af0-08d6adfb631c X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2019 12:47:32.9260 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0402MB3834 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksIFV3ZQ0KDQpCZXN0IFJlZ2FyZHMhDQpBbnNvbiBIdWFuZw0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IFV3ZSBLbGVpbmUtS8O2bmlnIFttYWlsdG86dS5rbGVpbmUt a29lbmlnQHBlbmd1dHJvbml4LmRlXQ0KPiBTZW50OiAyMDE55bm0M+aciDIx5pelIDE4OjQxDQo+ IFRvOiBBbnNvbiBIdWFuZyA8YW5zb24uaHVhbmdAbnhwLmNvbT4NCj4gQ2M6IHRoaWVycnkucmVk aW5nQGdtYWlsLmNvbTsgcm9iaCtkdEBrZXJuZWwub3JnOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsN Cj4gc2hhd25ndW9Aa2VybmVsLm9yZzsgcy5oYXVlckBwZW5ndXRyb25peC5kZTsga2VybmVsQHBl bmd1dHJvbml4LmRlOw0KPiBmZXN0ZXZhbUBnbWFpbC5jb207IGxpbnV4QGFybWxpbnV4Lm9yZy51 azsgc3RlZmFuQGFnbmVyLmNoOw0KPiBvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icjsgTGVvbmFyZCBD cmVzdGV6IDxsZW9uYXJkLmNyZXN0ZXpAbnhwLmNvbT47DQo+IHNjaG5pdHplbHRvbnlAZ21haWwu Y29tOyBqYW4udHVlcmtAZW10cmlvbi5jb207IFJvYmluIEdvbmcNCj4gPHlpYmluLmdvbmdAbnhw LmNvbT47IGxpbnV4LXB3bUB2Z2VyLmtlcm5lbC5vcmc7DQo+IGRldmljZXRyZWVAdmdlci5rZXJu ZWwub3JnOyBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LQ0KPiBr ZXJuZWxAdmdlci5rZXJuZWwub3JnOyBkbC1saW51eC1pbXggPGxpbnV4LWlteEBueHAuY29tPg0K PiBTdWJqZWN0OiBSZTogW1BBVENIIFY4IDIvNV0gcHdtOiBBZGQgaS5NWCBUUE0gUFdNIGRyaXZl ciBzdXBwb3J0DQo+IA0KPiBIZWxsbyBBbnNvbiwNCj4gDQo+IE9uIFRodSwgTWFyIDIxLCAyMDE5 IGF0IDA5OjU0OjE1QU0gKzAwMDAsIEFuc29uIEh1YW5nIHdyb3RlOg0KPiA+ID4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IFV3ZSBLbGVpbmUtS8O2bmlnIFttYWlsdG86 dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlXQ0KPiA+ID4gU2VudDogMjAxOeW5tDPmnIgy MeaXpSAxNzoyMA0KPiA+ID4gVG86IEFuc29uIEh1YW5nIDxhbnNvbi5odWFuZ0BueHAuY29tPg0K PiA+ID4gQ2M6IHRoaWVycnkucmVkaW5nQGdtYWlsLmNvbTsgcm9iaCtkdEBrZXJuZWwub3JnOw0K PiA+ID4gbWFyay5ydXRsYW5kQGFybS5jb207IHNoYXduZ3VvQGtlcm5lbC5vcmc7DQo+IHMuaGF1 ZXJAcGVuZ3V0cm9uaXguZGU7DQo+ID4gPiBrZXJuZWxAcGVuZ3V0cm9uaXguZGU7IGZlc3RldmFt QGdtYWlsLmNvbTsgbGludXhAYXJtbGludXgub3JnLnVrOw0KPiA+ID4gc3RlZmFuQGFnbmVyLmNo OyBvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icjsgTGVvbmFyZCBDcmVzdGV6DQo+ID4gPiA8bGVvbmFy ZC5jcmVzdGV6QG54cC5jb20+OyBzY2huaXR6ZWx0b255QGdtYWlsLmNvbTsNCj4gPiA+IGphbi50 dWVya0BlbXRyaW9uLmNvbTsgUm9iaW4gR29uZyA8eWliaW4uZ29uZ0BueHAuY29tPjsNCj4gPiA+ IGxpbnV4LXB3bUB2Z2VyLmtlcm5lbC5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOw0K PiA+ID4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC0ga2VybmVs QHZnZXIua2VybmVsLm9yZzsNCj4gPiA+IGRsLWxpbnV4LWlteCA8bGludXgtaW14QG54cC5jb20+ DQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIFY4IDIvNV0gcHdtOiBBZGQgaS5NWCBUUE0gUFdN IGRyaXZlciBzdXBwb3J0DQo+ID4gPg0KPiA+ID4gSGVsbG8sDQo+ID4gPg0KPiA+ID4gT24gVGh1 LCBNYXIgMjEsIDIwMTkgYXQgMTI6NDc6NTdBTSArMDAwMCwgQW5zb24gSHVhbmcgd3JvdGU6DQo+ ID4gPiA+IGkuTVg3VUxQIGhhcyBUUE0oTG93IFBvd2VyIFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVs YXRpb24gTW9kdWxlKQ0KPiA+ID4gPiBpbnNpZGUsIGl0IGNhbiBzdXBwb3J0IG11bHRpcGxlIFBX TSBjaGFubmVscywgYWxsIHRoZSBjaGFubmVscw0KPiA+ID4gPiBzaGFyZSBzYW1lIGNvdW50ZXIg YW5kIHBlcmlvZCBzZXR0aW5nLCBidXQgZWFjaCBjaGFubmVsIGNhbg0KPiA+ID4gPiBjb25maWd1 cmUgaXRzIGR1dHkgYW5kIHBvbGFyaXR5IGluZGVwZW5kZW50bHkuDQo+ID4gPiA+DQo+ID4gPiA+ IFRoZXJlIGFyZSBzZXZlcmFsIFRQTSBtb2R1bGVzIGluIGkuTVg3VUxQLCB0aGUgbnVtYmVyIG9m IGNoYW5uZWxzDQo+ID4gPiA+IGluIFRQTSBtb2R1bGVzIGFyZSBkaWZmZXJlbnQsIGl0IGNhbiBi ZSByZWFkIGZyb20gZWFjaCBUUE0NCj4gPiA+ID4gbW9kdWxlJ3MgUEFSQU0gcmVnaXN0ZXIuDQo+ ID4gPiA+DQo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEFuc29uIEh1YW5nIDxBbnNvbi5IdWFuZ0Bu eHAuY29tPg0KPiA+ID4gPiAtLS0NCj4gPiA+ID4gY2hhbmdlcyBzaW5jZSBWNzoNCj4gPiA+ID4g CS0gaW1wcm92ZSBwcmVzY2FsZSBjb21wdXRhdGlvbjsNCj4gPiA+ID4gCS0gaW1wcm92ZSBzb21l IHJlZ2lzdGVyIGRlZmluaXRpb25zOw0KPiA+ID4gPiAJLSByZW1vdmUgdW5uZWNlc3NhcnkgY2hl Y2sgZm9yIHBlcmlvZCBjb3VudCBjaGVjazsNCj4gPiA+ID4gCS0gaW1wcm92ZSBmdW5jdGlvbiBw YXJhbWV0ZXIgdG8gdXNlIHBvaW50ZXIgaW5zdGVhZCBvZiB2YWx1ZTsNCj4gPiA+ID4gLS0tDQo+ ID4gPiA+ICBkcml2ZXJzL3B3bS9LY29uZmlnICAgICAgIHwgIDExICsrDQo+ID4gPiA+ICBkcml2 ZXJzL3B3bS9NYWtlZmlsZSAgICAgIHwgICAxICsNCj4gPiA+ID4gIGRyaXZlcnMvcHdtL3B3bS1p bXgtdHBtLmMgfCA0MzUNCj4gPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiA+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA0NDcgaW5zZXJ0aW9ucygr KSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGRyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMN Cj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL0tjb25maWcgYi9kcml2 ZXJzL3B3bS9LY29uZmlnIGluZGV4DQo+ID4gPiA+IDU0ZjgyMzguLjNlYTAzOTEgMTAwNjQ0DQo+ ID4gPiA+IC0tLSBhL2RyaXZlcnMvcHdtL0tjb25maWcNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9w d20vS2NvbmZpZw0KPiA+ID4gPiBAQCAtMjEwLDYgKzIxMCwxNyBAQCBjb25maWcgUFdNX0lNWDI3 DQo+ID4gPiA+ICAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2Ug TSBoZXJlOiB0aGUgbW9kdWxlDQo+ID4gPiA+ICAJICB3aWxsIGJlIGNhbGxlZCBwd20taW14Mjcu DQo+ID4gPiA+DQo+ID4gPiA+ICtjb25maWcgUFdNX0lNWF9UUE0NCj4gPiA+ID4gKwl0cmlzdGF0 ZSAiaS5NWCBUUE0gUFdNIHN1cHBvcnQiDQo+ID4gPiA+ICsJZGVwZW5kcyBvbiBBUkNIX01YQyB8 fCBDT01QSUxFX1RFU1QNCj4gPiA+ID4gKwlkZXBlbmRzIG9uIEhBVkVfQ0xLICYmIEhBU19JT01F TQ0KPiA+ID4gPiArCWhlbHANCj4gPiA+ID4gKwkgIEdlbmVyaWMgUFdNIGZyYW1ld29yayBkcml2 ZXIgZm9yIGkuTVg3VUxQIFRQTSBtb2R1bGUsIFRQTSdzDQo+IGZ1bGwNCj4gPiA+ID4gKwkgIG5h bWUgaXMgTG93IFBvd2VyIFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVsYXRpb24gTW9kdWxlLg0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBj aG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlDQo+ID4gPiA+ICsJICB3aWxsIGJlIGNhbGxlZCBwd20t aW14LXRwbS4NCj4gPiA+ID4gKw0KPiA+ID4gPiAgY29uZmlnIFBXTV9KWjQ3NDANCj4gPiA+ID4g IAl0cmlzdGF0ZSAiSW5nZW5pYyBKWjQ3eHggUFdNIHN1cHBvcnQiDQo+ID4gPiA+ICAJZGVwZW5k cyBvbiBNQUNIX0lOR0VOSUMNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL01ha2Vm aWxlIGIvZHJpdmVycy9wd20vTWFrZWZpbGUgaW5kZXgNCj4gPiA+ID4gNDQ4ODI1ZS4uYzM2ODU5 OSAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvZHJpdmVycy9wd20vTWFrZWZpbGUNCj4gPiA+ID4gKysr IGIvZHJpdmVycy9wd20vTWFrZWZpbGUNCj4gPiA+ID4gQEAgLTE5LDYgKzE5LDcgQEAgb2JqLSQo Q09ORklHX1BXTV9ISUJWVCkJCSs9DQo+IHB3bS0NCj4gPiA+IGhpYnZ0Lm8NCj4gPiA+ID4gIG9i ai0kKENPTkZJR19QV01fSU1HKQkJKz0gcHdtLWltZy5vDQo+ID4gPiA+ICBvYmotJChDT05GSUdf UFdNX0lNWDEpCQkrPSBwd20taW14MS5vDQo+ID4gPiA+ICBvYmotJChDT05GSUdfUFdNX0lNWDI3 KQkJKz0gcHdtLWlteDI3Lm8NCj4gPiA+ID4gK29iai0kKENPTkZJR19QV01fSU1YX1RQTSkJKz0g cHdtLWlteC10cG0ubw0KPiA+ID4gPiAgb2JqLSQoQ09ORklHX1BXTV9KWjQ3NDApCSs9IHB3bS1q ejQ3NDAubw0KPiA+ID4gPiAgb2JqLSQoQ09ORklHX1BXTV9MUDM5NDMpCSs9IHB3bS1scDM5NDMu bw0KPiA+ID4gPiAgb2JqLSQoQ09ORklHX1BXTV9MUEMxOFhYX1NDVCkJKz0gcHdtLWxwYzE4eHgt c2N0Lm8NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMgYi9k cml2ZXJzL3B3bS9wd20taW14LQ0KPiB0cG0uYw0KPiA+ID4gbmV3DQo+ID4gPiA+IGZpbGUgbW9k ZSAxMDA2NDQgaW5kZXggMDAwMDAwMC4uMGVmZWEzNg0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gPiA+ICsrKyBiL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMNCj4gPiA+ID4gQEAgLTAsMCAr MSw0MzUgQEANCj4gPiA+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ ID4gPiA+ICsvKg0KPiA+ID4gPiArICogQ29weXJpZ2h0IDIwMTgtMjAxOSBOWFAuDQo+ID4gPiA+ ICsgKg0KPiA+ID4gPiArICogTGltaXRhdGlvbnM6DQo+ID4gPiA+ICsgKiAtIFRoZSBUUE0gY291 bnRlciBhbmQgcGVyaW9kIGNvdW50ZXIgYXJlIHNoYXJlZCBiZXR3ZWVuDQo+ID4gPiA+ICsgKiAg IG11bHRpcGxlIGNoYW5uZWxzLCBzbyBhbGwgY2hhbm5lbHMgc2hvdWxkIHVzZSBzYW1lIHBlcmlv ZA0KPiA+ID4gPiArICogICBzZXR0aW5ncy4NCj4gPiA+DQo+ID4gPiBXaGF0IGFib3V0Og0KPiA+ ID4NCj4gPiA+ICAtIE5vdCBhbGwgcGFyYW1ldGVycyB0byBjaGFuZ2UgdGhlIHBlcmlvZCBsZW5n dGggY2FuIGJlIGNoYW5nZWQNCj4gPiA+ICAgIGF0b21pY2FsbHkuIFRoZSBjb3VudGVyIG11c3Qg YmUgc3RvcHBlZCB0byBjaGFuZ2UgU0MuUFMuDQo+ID4gPg0KPiA+ID4gIC0gQ2hhbmdlcyB0byBw b2xhcml0eSBjYW5ub3QgYmUgbGF0Y2hlZCBhdCB0aGUgdGltZSBvZiB0aGUgbmV4dCBwZXJpb2QN Cj4gPiA+ICAgIHN0YXJ0Lg0KPiA+DQo+ID4gT0suDQo+ID4NCj4gPiA+DQo+ID4gPiA/DQo+ID4g Pg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRm aWVsZC5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPiA+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiA+ ID4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbG9n Mi5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ID4gPiArI2luY2x1 ZGUgPGxpbnV4L29mLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0K PiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPiAjaW5jbHVkZSA8bGlu dXgvcHdtLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1BBUkFNCTB4NA0KPiA+ID4gPiArI2RlZmluZSBQ V01fSU1YX1RQTV9HTE9CQUwJMHg4DQo+ID4gPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDCQkw eDEwDQo+ID4gPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NOVAkJMHgxNA0KPiA+ID4gPiArI2Rl ZmluZSBQV01fSU1YX1RQTV9NT0QJCTB4MTgNCj4gPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1f Q25TQyhuKQkoMHgyMCArIChuKSAqIDB4OCkNCj4gPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1f Q25WKG4pCSgweDI0ICsgKG4pICogMHg4KQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFBX TV9JTVhfVFBNX1BBUkFNX0NIQU4JCQlHRU5NQVNLKDcsDQo+ID4gPiAwKQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX1BTCQkJR0VOTUFTSygyLCAwKQ0KPiA+ID4g PiArI2RlZmluZSBQV01fSU1YX1RQTV9TQ19DTU9ECQkJR0VOTUFTSyg0LA0KPiAzKQ0KPiA+ID4g PiArI2RlZmluZSBQV01fSU1YX1RQTV9TQ19DTU9EX0lOQ19FVkVSWV9DTEsNCj4gPiA+IAlGSUVM RF9QUkVQKFBXTV9JTVhfVFBNX1NDX0NNT0QsIDEpDQo+ID4gPiA+ICsjZGVmaW5lIFBXTV9JTVhf VFBNX1NDX0NQV01TCQkJQklUKDUpDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgUFdNX0lN WF9UUE1fQ25TQ19DSEYJQklUKDcpDQo+ID4gPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0Nf TVNCCUJJVCg1KQ0KPiA+ID4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX01TQQlCSVQoNCkN Cj4gPiA+ID4gKw0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAqIFRoZSByZWZlcmVuY2UgbWFudWFs IGRlc2NyaWJlcyB0aGlzIGZpZWxkIGFzIHR3byBzZXBhcmF0ZSBiaXRzLg0KPiA+ID4gPiArVGhl DQo+ID4gPiA+ICsgKiBzYW1hbnRpYyBvZiB0aGUgdHdvIGJpdHMgaXNuJ3Qgb3J0aG9nb25hbCB0 aG91Z2gsIHNvIHRoZXkgYXJlDQo+ID4gPiA+ICt0cmVhdGVkDQo+ID4gPiA+ICsgKiB0b2dldGhl ciBhcyBhIDItYml0IGZpZWxkIGhlcmUuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKyNkZWZpbmUg UFdNX0lNWF9UUE1fQ25TQ19FTFMJR0VOTUFTSygzLCAyKQ0KPiA+ID4gPiArI2RlZmluZSBQV01f SU1YX1RQTV9DblNDX0VMU19QT0xBUklUWV9JTlZFUlNFRAkweDENCj4gPiA+ID4gKyNkZWZpbmUg UFdNX0lNWF9UUE1fQ25TQ19FTFNfSU5WRVJTRUQNCj4gPiA+IAlGSUVMRF9QUkVQKFBXTV9JTVhf VFBNX0NuU0NfRUxTLCAxKQ0KPiA+ID4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX0VMU19O T1JNQUwNCj4gPiA+IAlGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCAyKQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9EX1dJRFRICTE2 DQo+ID4gPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX01PRF9NT0QNCj4gPiA+IAlHRU5NQVNLKFBX TV9JTVhfVFBNX01PRF9XSURUSCAtIDEsIDApDQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0cnVjdCBp bXhfdHBtX3B3bV9jaGlwIHsNCj4gPiA+ID4gKwlzdHJ1Y3QgcHdtX2NoaXAgY2hpcDsNCj4gPiA+ ID4gKwlzdHJ1Y3QgY2xrICpjbGs7DQo+ID4gPiA+ICsJdm9pZCBfX2lvbWVtICpiYXNlOw0KPiA+ ID4gPiArCXN0cnVjdCBtdXRleCBsb2NrOw0KPiA+ID4gPiArCXUzMiB1c2VyX2NvdW50Ow0KPiA+ ID4gPiArCXUzMiBlbmFibGVfY291bnQ7DQo+ID4gPiA+ICsJdTMyIHJlYWxfcGVyaW9kOw0KPiA+ ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RydWN0IGlteF90cG1fcHdtX3BhcmFtIHsN Cj4gPiA+ID4gKwl1OCBwcmVzY2FsZTsNCj4gPiA+ID4gKwl1MzIgbW9kOw0KPiA+ID4gPiArfTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaW14X3RwbV9wd21fY2hp cCAqdG9faW14X3RwbV9wd21fY2hpcChzdHJ1Y3QNCj4gPiA+ID4gK3B3bV9jaGlwICpjaGlwKSB7 DQo+ID4gPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaW14X3RwbV9wd21f Y2hpcCwgY2hpcCk7IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCBwd21faW14X3Rw bV9yb3VuZF9zdGF0ZShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQo+ID4gPiA+ICsJCQkJICAgc3Ry dWN0IGlteF90cG1fcHdtX3BhcmFtICpwLA0KPiA+ID4gPiArCQkJCSAgIHN0cnVjdCBwd21fc3Rh dGUgKnN0YXRlLA0KPiA+ID4gPiArCQkJCSAgIHN0cnVjdCBwd21fc3RhdGUgKnJlYWxfc3RhdGUp IHsNCj4gPiA+ID4gKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9w d21fY2hpcChjaGlwKTsNCj4gPiA+ID4gKwl1MzIgcmF0ZSwgcHJlc2NhbGUsIHBlcmlvZF9jb3Vu dCwgY2xvY2tfdW5pdDsNCj4gPiA+ID4gKwl1NjQgdG1wOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJ cmF0ZSA9IGNsa19nZXRfcmF0ZSh0cG0tPmNsayk7DQo+ID4gPiA+ICsJdG1wID0gKHU2NClzdGF0 ZS0+cGVyaW9kICogcmF0ZTsNCj4gPiA+ID4gKwljbG9ja191bml0ID0gRElWX1JPVU5EX0NMT1NF U1RfVUxMKHRtcCwgTlNFQ19QRVJfU0VDKTsNCj4gPiA+ID4gKwlpZiAoY2xvY2tfdW5pdCA8PSBQ V01fSU1YX1RQTV9NT0RfTU9EKQ0KPiA+ID4gPiArCQlwcmVzY2FsZSA9IDA7DQo+ID4gPiA+ICsJ ZWxzZQ0KPiA+ID4gPiArCQlwcmVzY2FsZSA9IGlsb2cyKGNsb2NrX3VuaXQpICsgMSAtDQo+ID4g PiBQV01fSU1YX1RQTV9NT0RfV0lEVEg7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoKCFGSUVM RF9GSVQoUFdNX0lNWF9UUE1fU0NfUFMsIHByZXNjYWxlKSkpDQo+ID4gPiA+ICsJCXJldHVybiAt RVJBTkdFOw0KPiA+ID4gPiArCXAtPnByZXNjYWxlID0gcHJlc2NhbGU7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwlwZXJpb2RfY291bnQgPSAoY2xvY2tfdW5pdCArICgoMSA8PCBwcmVzY2FsZSkgPj4g MSkpID4+IHByZXNjYWxlOw0KPiA+ID4gPiArCXAtPm1vZCA9IHBlcmlvZF9jb3VudDsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArCS8qIGNhbGN1bGF0ZSByZWFsIHBlcmlvZCBIVyBjYW4gc3VwcG9ydCAq Lw0KPiA+ID4gPiArCXRtcCA9ICh1NjQpcGVyaW9kX2NvdW50IDw8IHByZXNjYWxlOw0KPiA+ID4g PiArCXRtcCAqPSBOU0VDX1BFUl9TRUM7DQo+ID4gPiA+ICsJcmVhbF9zdGF0ZS0+cGVyaW9kID0g RElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcmF0ZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkv Kg0KPiA+ID4gPiArCSAqIGlmIGV2ZW50dWFsbHkgdGhlIFBXTSBvdXRwdXQgaXMgaW5hY3RpdmUs IGVpdGhlcg0KPiA+ID4gPiArCSAqIGR1dHkgY3ljbGUgaXMgMCBvciBzdGF0dXMgaXMgZGlzYWJs ZWQsIG5lZWQgdG8NCj4gPiA+ID4gKwkgKiBtYWtlIHN1cmUgdGhlIG91dHB1dCBwaW4gaXMgaW5h Y3RpdmUuDQo+ID4gPiA+ICsJICovDQo+ID4gPiA+ICsJaWYgKCFzdGF0ZS0+ZW5hYmxlZCkNCj4g PiA+ID4gKwkJcmVhbF9zdGF0ZS0+ZHV0eV9jeWNsZSA9IDA7DQo+ID4gPiA+ICsJZWxzZQ0KPiA+ ID4gPiArCQlyZWFsX3N0YXRlLT5kdXR5X2N5Y2xlID0gc3RhdGUtPmR1dHlfY3ljbGU7DQo+ID4g Pg0KPiA+ID4gWW91J3JlIG1heWJlIGx5aW5nIGFib3V0IHRoZSBkdXR5IGN5Y2xlIGhlcmUuIEFs c28gaXQgd291bGQgYmUgbW9yZQ0KPiA+ID4gY29uc2lzdGVudCB0byBjYWxjdWxhdGUgdGhlIHZh bHVlIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgQ25WDQo+ID4gPiByZWdpc3RlciB0aGF0IGRlZmlu ZXMgdGhlIGR1dHkgY3ljbGUgaGVyZS4NCj4gPiA+DQo+ID4gPiBSZWdhcmRpbmcgdGhlIHBlcmlv ZCBjb21wdXRhdGlvbiBJJ20gaGFwcHkgd2l0aCB0aGlzIGZ1bmN0aW9uLg0KPiA+ID4gVW5sZXNz IEkgbWlzcyBzb21ldGhpbmcgdGhpcyBmdW5jdGlvbiBpcyBpZGVtcG90ZW50IChpLmUuIGRvaW5n DQo+ID4gPg0KPiA+ID4gCXB3bV9pbXhfdHBtX3JvdW5kX3N0YXRlKGNoaXAsICZwLCBzb21lX3N0 YXRlLCAmcmVhbF9zdGF0ZTEpOw0KPiA+ID4gCXB3bV9pbXhfdHBtX3JvdW5kX3N0YXRlKGNoaXAs ICZwLCAmcmVhbF9zdGF0ZTEsICZyZWFsX3N0YXRlMik7DQo+ID4gPg0KPiA+ID4gcmVzdWx0cyBp biByZWFsX3N0YXRlMSA9PSByZWFsX3N0YXRlMikgZ2l2ZW4gdGhhdA0KPiA+ID4gY2xrX2dldF9y YXRlKHRwbS0+Y2xrKSA8IE5TRUNfUEVSX1NFQy4NCj4gPg0KPiA+IFNvcnJ5LCBJIGNhbiBOT1Qg Z2V0IHlvdXIgcG9pbnQsIGNhbiB5b3UgYmUgbW9yZSBkZXRhaWw/DQo+IA0KPiBJIGFzc3VtZSB5 b3UgYXNrIGFib3V0IHRoZSBpZGVtcG90ZW50IHN0dWZmIGFuZCBteSBjcml0aWNzIGFib3V0IHRo ZSBkdXR5DQo+IGN5Y2xlIGFib3ZlIGlzIGNsZWFyLg0KPiANCj4gSU1ITyBhIFBXTSBkcml2ZXIg c2hvdWxkIGhhdmUgdGhlIHByb3BlcnR5IHRoYXQgaWYgSSBkbzoNCj4gDQo+IAlwd21fZ2V0X3N0 YXRlKG15X3B3bSwgJnN0YXRlKTsNCj4gCXB3bV9hcHBseV9zdGF0ZShteV9wd20sICZzdGF0ZSk7 DQo+IA0KPiBpdCBzaG91bGQgbm90IHJlc3VsdCBpbiBhbnkgY2hhbmdlcy4gVGhpcyBjb3VsZCBm b3IgZXhhbXBsZSBoYXBwZW4gaWYgSQ0KPiByZXF1ZXN0IHRoZSBwZXJpb2Qgb2YgYSBQV00gdG8g YmUgMzMzMzMzNCBucywgdGhlbiB0aGUgb3V0cHV0IG1pZ2h0IGJlDQo+IGNvbmZpZ3VyZWQgKGJl Y2F1c2Ugb2YgaGFyZHdhcmUgY29uc3RyYWludHMpIHRvIDMzMzMzMzMuMzMzMzMzMzMzIG5zLg0K PiBUaGVuIGdldF9zdGF0ZSByZXR1cm5zIDMzMzMzMzMgbnMgKHdoaWNoIGlzIGZpbmUpIGFuZCB0 aGVuIGNvbmZpZ3VyaW5nIGZvcg0KPiB0aGVzZSAzMzMzMzMzIG5zIHJlc3VsdHMgaW4gYSBwZXJp b2Qgb2YgbGVuZ3RoIDMzMTY2NiBucy4NCj4gDQo+IFRoaXMgaXMgbm90IHRoZSBjYXNlIGhlcmUg YXMgcHdtX2lteF90cG1fcm91bmRfc3RhdGUgaXMgaWRlbXBvdGVudCB3aGljaA0KPiBpcyBhY3R1 YWxseSBhIGdvb2QgcHJvcGVydHkgYW5kIG15IGNvbW1lbnQgd2FzIHBvaW50aW5nIG91dCBzb21l dGhpbmcNCj4gZ29vZCwgbm90IHJlcXVlc3RpbmcgYSBjaGFuZ2UuDQoNClRoYW5rcyBmb3IgeW91 ciBkZXRhaWwgZXhwbGFuYXRpb24uDQoNCj4gDQo+ID4gPiA+ICsJcmVhbF9zdGF0ZS0+cG9sYXJp dHkgPSBzdGF0ZS0+cG9sYXJpdHk7DQo+ID4gPiA+ICsJcmVhbF9zdGF0ZS0+ZW5hYmxlZCA9IHN0 YXRlLT5lbmFibGVkOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9 DQo+ID4gPiA+ICsNCj4gPiA+DQo+ID4gPiBBIGNvbW1lbnQgaGVyZSBub3RpbmcgdGhhdCBwd21f aW14X3RwbV9zZXR1cF9wZXJpb2QgaXMgc3VwcG9zZWQgdG8NCj4gPiA+IGJlIGNhbGxlZCB3aXRo IHRoZSBtdXRleCBob2xkIHdvdWxkIGJlIGdvb2QgaGVyZS4NCj4gPg0KPiA+IEZpbmUuDQo+ID4N Cj4gPiA+DQo+ID4gPiA+ICtzdGF0aWMgdm9pZCBwd21faW14X3RwbV9zZXR1cF9wZXJpb2Qoc3Ry dWN0IHB3bV9jaGlwICpjaGlwLA0KPiA+ID4gPiArCQkJCSAgICAgc3RydWN0IGlteF90cG1fcHdt X3BhcmFtICpwKSB7DQo+ID4gPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRv X2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQo+ID4gPiA+ICsJdTMyIHZhbCwgc2F2ZWRfY21vZCwg Y3VyX3ByZXNjYWxlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogbWFrZSBzdXJlIGNvdW50ZXIg aXMgZGlzYWJsZWQgZm9yIHByb2dyYW1taW5nIHByZXNjYWxlICovDQo+ID4gPg0KPiA+ID4gQFRo aWVycnk6IFdoYXQgaXMgeW91ciB0aG91Z2h0IGhlcmU/IElNSE8gdGhpcyBzaG91bGQgb25seSBi ZQ0KPiA+ID4gYWxsb3dlZCBpZiBhbGwgYWZmZWN0ZWQgUFdNcyBhcmUgb2ZmLg0KPiA+DQo+ID4g QXMgd2UgYWxyZWFkeSBtYWtlIHN1cmUgdGhhdCBPTkxZIHdoZW4gdGhlcmUgaXMgT05MWSAxIHVz ZXIgYW5kIHRoZQ0KPiA+IHJlcXVlc3RlZCBwZXJpb2QgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1 cnJlbnQgcGVyaW9kLCB0aGVuIHRoaXMNCj4gPiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCwgc28g dGhlcmUgaXMgaW1wb3NzaWJsZSB0aGF0IG11bHRpcGxlIFBXTXMgYXJlIGFjdGl2ZQ0KPiBhbmQg dGhlIHBlcmlvZCBpcyByZXF1ZXN0ZWQgdG8gYmUgY2hhbmdlZC4NCj4gPiBBbSBJIHJpZ2h0Pw0K PiANCj4gVGhpcyBwcm9ibGVtIGlzIG5vdCBhYm91dCB0d28gUFdNcy4gSWYgeW91IHJlY29uZmln dXJlIGEgcnVubmluZyBQV00gdGhlDQo+IHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGhhcmR3YXJl IGNvbXBsZXRlcyBhIHdob2xlIHBlcmlvZCB3aXRoIHRoZSBvbGQNCj4gY29uZmlndXJhdGlvbiBh bmQgdGhlbiBpbW1lZGlhdGVseSBzdGFydHMgYSBuZXcgcGVyaW9kIHdpdGggdGhlIG5ldw0KPiBw YXJhbWV0ZXJzLiBJZiB5b3Ugc3RvcCB0aGUgY291bnRlciwgdGhlIGxhc3QgcGVyaW9kIHdpdGgg dGhlIG9sZCBwYXJhbWV0ZXJzDQo+IGlzIGRpc3R1cmJlZC4NCg0KU28sIEkgdGhpbmsgc2ltcGx5 IHJldHVybiBlcnJvciBpZiB0aGUgY291bnRlciBpcyBydW5uaW5nIGFuZCB0aGVyZSBpcyBhIG5l dyBQUyBjaGFuZ2UNCnJlcXVlc3QsIHJpZ2h0Pw0KDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiAr CXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiA+ID4gKwlzYXZl ZF9jbW9kID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX0NNT0QsIHZhbCk7DQo+ID4gPiA+ICsJ Y3VyX3ByZXNjYWxlID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX1BTLCB2YWwpOw0KPiA+ID4g PiArCWlmIChzYXZlZF9jbW9kICYmIGN1cl9wcmVzY2FsZSAhPSBwLT5wcmVzY2FsZSkgew0KPiA+ ID4gPiArCQl2YWwgJj0gflBXTV9JTVhfVFBNX1NDX0NNT0Q7DQo+ID4gPiA+ICsJCXdyaXRlbCh2 YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwkvKiBzZXQgVFBNIGNvdW50ZXIgcHJlc2NhbGUgKi8NCj4gPiA+ID4gKwl2YWwg Jj0gflBXTV9JTVhfVFBNX1NDX1BTOw0KPiA+ID4gPiArCXZhbCB8PSBGSUVMRF9QUkVQKFBXTV9J TVhfVFBNX1NDX1BTLCBwLT5wcmVzY2FsZSk7DQo+ID4gPiA+ICsJd3JpdGVsKHZhbCwgdHBtLT5i YXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogcmVzdG9yZSB0 aGUgY2xvY2sgbW9kZSBpZiBuZWNlc3NhcnkgKi8NCj4gPiA+ID4gKwlpZiAoc2F2ZWRfY21vZCAm JiBjdXJfcHJlc2NhbGUgIT0gcC0+cHJlc2NhbGUpIHsNCj4gPiA+ID4gKwkJdmFsIHw9IEZJRUxE X1BSRVAoUFdNX0lNWF9UUE1fU0NfQ01PRCwgc2F2ZWRfY21vZCk7DQo+ID4gPiA+ICsJCXdyaXRl bCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwkvKg0KPiA+ID4gPiArCSAqIHNldCBwZXJpb2QgY291bnQ6DQo+ID4gPiA+ ICsJICogYWNjb3JkaW5nIHRvIFJNLCB0aGUgTU9EIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgaW1tZWRp YXRlbHkNCj4gPiA+ID4gKwkgKiBpZiBDTU9EWzE6MF0gPSAyYicwMC4gaWYgQ01PRFsxOjBdICE9 IDJiJzAwLCB0aGVuIE1PRA0KPiA+ID4gPiArCSAqIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgYWNjb3Jk aW5nIHRvIHRoZSBDUFdNUyBiaXQsIHRoYXQgaXM6DQo+ID4gPiA+ICsJICoNCj4gPiA+ID4gKwkg KiBpZiB0aGUgc2VsZWN0ZWQgbW9kZSBpcyBub3QgQ1BXTSB0aGVuIE1PRCByZWdpc3RlciBpcw0K PiA+ID4gPiArCSAqIHVwZGF0ZWQgYWZ0ZXIgTU9EIHJlZ2lzdGVyIHdhcyB3cml0dGVuIGFuZCB0 aGUgVFBNDQo+ID4gPiA+ICsJICogY291bnRlciBjaGFuZ2VzIGZyb20gTU9EIHRvIHplcm8uDQo+ ID4gPiA+ICsJICoNCj4gPiA+ID4gKwkgKiBpZiB0aGUgc2VsZWN0ZWQgbW9kZSBpcyBDUFdNIHRo ZW4gTU9EIHJlZ2lzdGVyIGlzIHVwZGF0ZWQNCj4gPiA+ID4gKwkgKiBhZnRlciBNT0QgcmVnaXN0 ZXIgd2FzIHdyaXR0ZW4gYW5kIHRoZSBUUE0gY291bnRlciBjaGFuZ2VzDQo+ID4gPiA+ICsJICog ZnJvbSBNT0QgdG8gKE1PRCDigJMgMSkuDQo+ID4gPiA+ICsJICovDQo+ID4gPiA+ICsJd3JpdGVs KHAtPm1vZCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fTU9EKTsgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICtzdGF0aWMgdm9pZCBwd21faW14X3RwbV9nZXRfc3RhdGUoc3RydWN0IHB3bV9jaGlwICpj aGlwLA0KPiA+ID4gPiArCQkJCSAgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwNCj4gPiA+ID4gKwkJ CQkgIHN0cnVjdCBwd21fc3RhdGUgKnN0YXRlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN0cnVj dCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KPiA+ ID4gPiArCXUzMiByYXRlLCB2YWwsIHByZXNjYWxlOw0KPiA+ID4gPiArCXU2NCB0bXA7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwkvKiBnZXQgcGVyaW9kICovDQo+ID4gPiA+ICsJc3RhdGUtPnBlcmlv ZCA9IHRwbS0+cmVhbF9wZXJpb2Q7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBnZXQgZHV0eSBj eWNsZSAqLw0KPiA+ID4gPiArCXJhdGUgPSBjbGtfZ2V0X3JhdGUodHBtLT5jbGspOw0KPiA+ID4g PiArCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiA+ID4gKwlw cmVzY2FsZSA9IEZJRUxEX0dFVChQV01fSU1YX1RQTV9TQ19QUywgdmFsKTsNCj4gPiA+ID4gKwl0 bXAgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblYocHdtLT5od3B3bSkpOw0KPiA+ ID4gPiArCXRtcCA9ICh0bXAgPDwgcHJlc2NhbGUpICogTlNFQ19QRVJfU0VDOw0KPiA+ID4gPiAr CXN0YXRlLT5kdXR5X2N5Y2xlID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcmF0ZSk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBnZXQgcG9sYXJpdHkgKi8NCj4gPiA+ID4gKwl2YWwgPSBy ZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblNDKHB3bS0+aHdwd20pKTsNCj4gPiA+ID4g KwlpZiAoRklFTERfR0VUKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCB2YWwpID09DQo+ID4gPiA+ICsJ ICAgIFBXTV9JTVhfVFBNX0NuU0NfRUxTX1BPTEFSSVRZX0lOVkVSU0VEKQ0KPiA+ID4gPiArCQlz dGF0ZS0+cG9sYXJpdHkgPSBQV01fUE9MQVJJVFlfSU5WRVJTRUQ7DQo+ID4gPiA+ICsJZWxzZQ0K PiA+ID4gPiArCQkvKg0KPiA+ID4gPiArCQkgKiBBc3N1bWUgcmVzZXJ2ZWQgdmFsdWVzICgyYjAw IGFuZCAyYjExKSB0byB5aWVsZA0KPiA+ID4gPiArCQkgKiBub3JtYWwgcG9sYXJpdHkuDQo+ID4g Pg0KPiA+ID4gR2l2ZW4gdGhhdCB0aGlzIGRyaXZlciB3cml0ZXMgUFdNX0lNWF9UUE1fQ25TQ19F TFMgPSAyYjAwIGluIHNvbWUNCj4gPiA+IHNpdHVhdGlvbnMgYXNzdW1pbmcgdGhhdCB0aGlzIHJl c3VsdHMgaW4gYW4gY29uc3RhbnQgaW5hY3RpdmUNCj4gPiA+IG91dHB1dCwgdGhpcyBzaG91bGQg YmUgcmVjb2duaXplZCBoZXJlLiAoTm90IGVudGlyZWx5IHN1cmUgdGhlDQo+ID4gPiBvdXRwdXQg aXMgaW5hY3RpdmUgYmVjYXVzZSBvZiBvbmx5IFBXTV9JTVhfVFBNX0NuU0NfRUxTID0gMmIwMC4p DQo+ID4NCj4gPiBGaW5lLCB0aGVuIEkgY2FuIHNhdmUgdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBw b2xhcml0eSBpbiBlYWNoIGNoYW5uZWwsDQo+ID4gYW5kIHRoZW4gcmV0dXJuIHRoZSBsYXN0IHJl cXVlc3RlZCBwb2xhcml0eSBoZXJlLCBOT1QgcmVhZCBmcm9tDQo+ID4gaGFyZHdhcmUsIHNpbmNl IHRoZSBwb2xhcml0eSBjb3VsZCBiZSBkaWZmZXJlbnQgYWNjb3JkaW5nIHRvIGVuYWJsZSBzdGF0 dXMuDQo+IA0KPiBUaGlzIHdvcmtzIGlmZiB0aGVyZSB3YXMgYSBwb2xhcml0eSByZXF1ZXN0ZWQg YmVmb3JlLg0KDQpXaWxsIGRvIHRoYXQgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+IA0KPiA+ID4gPiAr CQkgKi8NCj4gPiA+ID4gKwkJc3RhdGUtPnBvbGFyaXR5ID0gUFdNX1BPTEFSSVRZX05PUk1BTDsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIGdldCBjaGFubmVsIHN0YXR1cyAqLw0KPiA+ID4gPiAr CXN0YXRlLT5lbmFibGVkID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCB2YWwpID8g dHJ1ZSA6DQo+ID4gPiA+ICtmYWxzZTsgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgdm9p ZCBwd21faW14X3RwbV9hcHBseV9odyhzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQo+ID4gPiA+ICsJ CQkJIHN0cnVjdCBwd21fZGV2aWNlICpwd20sDQo+ID4gPiA+ICsJCQkJIHN0cnVjdCBwd21fc3Rh dGUgKnN0YXRlKQ0KPiA+ID4NCj4gPiA+IHB3bV9pbXhfdHBtX2FwcGx5X2h3IGlzIGNhbGxlZCB3 aXRoIHRoZSBtdXRleCBob2xkLiBJcyB0aGlzIG5lY2Vzc2FyeT8NCj4gPiA+IFBsZWFzZSBlaXRo ZXIgY2FsbCBpdCB3aXRob3V0IHRoZSBtdXRleCBvciBhbm5vdGF0ZSB0aGUgZnVuY3Rpb24NCj4g PiA+IHRoYXQgdGhlIGNhbGxlciBpcyBzdXBwb3NlZCB0byBob2xkIGl0Lg0KPiA+DQo+ID4gT0ss IHdpbGwgbWFrZSBzdXJlIGNhbGwgaXQgd2l0aG91dCBtdXRleCBob2xkLg0KPiA+DQo+ID4gPg0K PiA+ID4gPiArew0KPiA+ID4gPiArCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19p bXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KPiA+ID4gPiArCXN0cnVjdCBwd21fc3RhdGUgYzsNCj4g PiA+ID4gKwl1MzIgdmFsLCBzY192YWw7DQo+ID4gPiA+ICsJdTY0IHRtcDsNCj4gPiA+ID4gKw0K PiA+ID4gPiArCXB3bV9pbXhfdHBtX2dldF9zdGF0ZShjaGlwLCBwd20sICZjKTsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArCWlmIChzdGF0ZS0+ZHV0eV9jeWNsZSAhPSBjLmR1dHlfY3ljbGUpIHsNCj4g PiA+ID4gKwkJLyogc2V0IGR1dHkgY291bnRlciAqLw0KPiA+ID4gPiArCQl0bXAgPSByZWFkbCh0 cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9NT0QpICYNCj4gPiA+IFBXTV9JTVhfVFBNX01PRF9NT0Q7 DQo+ID4gPiA+ICsJCXRtcCAqPSBzdGF0ZS0+ZHV0eV9jeWNsZTsNCj4gPiA+ID4gKwkJdmFsID0g RElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgc3RhdGUtPnBlcmlvZCk7DQo+ID4gPiA+ICsJCXdy aXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20tDQo+ID4gPiA+aHdwd20p KTsNCj4gPiA+DQo+ID4gPiBIb3cgZG9lcyB0aGlzIGFmZmVjdCBhIGN1cnJlbnRseSBydW5uaW5n IFBXTT8gQ29uc2lkZXIgaXQgcnVucyBhdA0KPiA+ID4gZHV0eV9jeWNsZT01MDAgKyBwZXJpb2Q9 MTAwMCBhbmQgbm93IHNob3VsZCBjaGFuZ2UgdG8gZHV0eV9jeWNsZT03MDANCj4gPiA+ICsgcGVy aW9kPTgwMC4gQ2FuIGl0IGhhcHBlbiB0aGF0IHdlIHNlZSBhIG9yIGV2ZW4gc2V2ZXJhbCBwZXJp b2RzDQo+ID4gPiB3aXRoDQo+ID4gPiBkdXR5X2N5Y2xlPTcwMCBhbmQgcGVyaW9kPTEwMDA/DQo+ ID4NCj4gPg0KPiA+IFRoZSByZWZlcmVuY2UgbWFudWFsIHNheXMsIGlmIGNvdW50ZXIgaXMgZGlz YWJsZWQsIGl0IHdpbGwgYmUgdXBkYXRlZA0KPiBpbW1lZGlhdGVseS4NCj4gDQo+IFRoZSBjb3Vu dGVyIGlzIG5vdCBkaXNhYmxlZCwgcmlnaHQ/DQoNClRoZSBjb3VudGVyIGNvdWxkIGJlIGVuYWJs ZWQgb3IgZGlzYWJsZWQsIGZvciBkaXNhYmxlZCBjYXNlLCBJIHRoaW5rIHRoZXJlIGlzDQpubyBp c3N1ZSBmb3IgZHV0eSBjaGFuZ2UgaW1tZWRpYXRlbHkuDQoNCj4gDQo+ID4gSWYgY291bnRlciBp cyBlbmFibGVkLCBhbmQgZm9yIGVkZ2UgYWxpZ25lZCBQV00gbW9kZShFUFdNKSwgdGhlDQo+ID4g cmVnaXN0ZXIgaXMgdXBkYXRlZCBBZnRlciB3cml0dGVuIGFuZCBUUE0gY291bnRlciBjaGFuZ2Vz IGZyb20gTU9EIHRvDQo+ID4gemVybywgc2FtZSBhcyBwZXJpb2QgY291bnQgdXBkYXRlLCBIVyB3 aWxsIG1ha2Ugc3VyZSB0aGUgcGVyaW9kIGZpbmlzaC4uDQo+IA0KPiBMb29raW5nIGludG8gbXkg Y29uY2VybiBhZ2FpbiwgaXQgaXMgYWN0dWFsbHkgdGhlIG90aGVyIHdheSBhcm91bmQ6DQo+IEFz c3VtaW5nIGEgc2luZ2xlIHVzZWQgUFdNIGNoYW5uZWwgdGhhdCBydW5zIGF0IGR1dHlfY3ljbGU9 NTAwICsNCj4gcGVyaW9kPTEwMDAuIFRoZW4gcHdtX2lteF90cG1fYXBwbHkoKSBpcyBjYWxsZWQg d2l0aCBzdGF0ZS0NCj4gPmR1dHlfY3ljbGU9NzAwIGFuZCBzdGF0ZS0+cGVyaW9kPTgwMC4gcHdt X2lteF90cG1fYXBwbHkoKSBjYWxscw0KPiBwd21faW14X3RwbV9zZXR1cF9wZXJpb2QoKSB0byBj b25maWd1cmUgZm9yIC5wZXJpb2Q9MTAwMC4gTm93IGlmIHRoZQ0KPiBQV00gY29tcGxldGVzIGEg cGVyaW9kIGJlZm9yZSBwd21faW14X3RwbV9hcHBseV9odygpIHNldHMgdXAgQ25WIHRvDQo+IHRo ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGR1dHlfY3ljbGU9NzAwLCBpdCBwcm9kdWNlcyBhIHdh dmVmb3JtIHdpdGgNCj4gZHV0eV9jeWNsZT01MDAgYW5kIHBlcmlvZD04MDAgd2hpY2ggaXMgYmFk LiBUaGlzIGlzIGFub3RoZXIgbGltaXRhdGlvbiB0aGF0DQo+IGNhbiBiZSB3b3JrZWQgYXJvdW5k IGluIHNvZnR3YXJlIHdpdGggc29tZSBlZmZvcnQgKHdoaWNoIG1pZ2h0IG9yIG1pZ2h0DQo+IG5v dCBiZSB3b3J0aCB0byBzcGVuZCkuDQoNCkkgYW0gc3VyZSB0aGF0IG9uIGkuTVg3VUxQIHBsYXRm b3JtIHdlIHVzZWQgZm9yIGJhY2tsaWdodCBPTkxZLCBpdCBzaG91bGQgTk9UDQp0aGF0IG1hdHRl ciBpZiB0aGlzIGNhc2UgaGFwcGVuLCB1bmxlc3MgdGhlIGNvdW50ZXIgaXMgZGlzYWJsZWQsIHRo ZW4gdGhlIGVmZm9ydCBzcGVuZA0Kb24gdGhpcyBjYXNlIHdpbGwgYmUgaHVnZSwgc28gSSBwbGFu IHRvIGxlYXZlIGl0IGFzIHdoYXQgaXQgaXMgaWYgeW91IGRvbid0IG1pbmQuDQoNCj4gDQo+ID4g SWYgKENNT0RbMTowXSA9IDA6MCkgdGhlbiBDblYgcmVnaXN0ZXIgaXMgdXBkYXRlZCB3aGVuIENu ViByZWdpc3RlciBpcw0KPiB3cml0dGVuLg0KPiA+IElmIChDTU9EWzE6MF0g4omgIDA6MCksIHRo ZW4gQ25WIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZQ0KPiA+IHNlbGVjdGVk IG1vZGUsIHRoYXQNCj4gPiBpczoNCj4gPiDigKIgSWYgdGhlIHNlbGVjdGVkIG1vZGUgaXMgb3V0 cHV0IGNvbXBhcmUgdGhlbiBDblYgcmVnaXN0ZXIgaXMgdXBkYXRlZA0KPiA+IG9uIHRoZSBuZXh0 IFRQTSBjb3VudGVyIGluY3JlbWVudCAoZW5kIG9mIHRoZSBwcmVzY2FsZXIgY291bnRpbmcpIGFm dGVyDQo+IENuViByZWdpc3RlciB3YXMgd3JpdHRlbi4NCj4gPiDigKIgSWYgdGhlIHNlbGVjdGVk IG1vZGUgaXMgRVBXTSB0aGVuIENuViByZWdpc3RlciBpcyB1cGRhdGVkIGFmdGVyIENuVg0KPiA+ IHJlZ2lzdGVyIHdhcyB3cml0dGVuIGFuZCB0aGUgVFBNIGNvdW50ZXIgY2hhbmdlcyBmcm9tIE1P RCB0byB6ZXJvLg0KPiA+IOKAoiBJZiB0aGUgc2VsZWN0ZWQgbW9kZSBpcyBDUFdNIHRoZW4gQ25W IHJlZ2lzdGVyIGlzIHVwZGF0ZWQgYWZ0ZXIgQ25WDQo+ID4gcmVnaXN0ZXIgd2FzIHdyaXR0ZW4g YW5kIHRoZSBUUE0gY291bnRlciBjaGFuZ2VzIGZyb20gTU9EIHRvIChNT0Qg4oCTIDEpLg0KPiA+ IDY0LjUuMTQNCj4gDQo+IFRoZSBjYXNlICJzZWxlY3RlZCBtb2RlIGlzIEVQV00iIGlzIHRoZSBv bmUgcmVsZXZhbnQgZm9yIHVzLCByaWdodD8NCg0KWWVzLg0KDQo+IA0KPiA+ID4gPiArCX0NCj4g PiA+ID4gKw0KPiA+ID4gPiArCWlmIChzdGF0ZS0+ZW5hYmxlZCAhPSBjLmVuYWJsZWQpIHsNCj4g PiA+DQo+ID4gPiBJZiB0aGUgUFdNIHdhcyBhbHJlYWR5IG9uIGFuZCBpcyBjaGFuZ2VkIHRvIGFu b3RoZXIgZW5hYmxlZCBzdGF0ZSwNCj4gPiA+IHlvdSdyZSBpZ25vcmluZyB0aGUgKG1heWJlKSBu ZXcgcG9sYXJpdHkgaGVyZS4NCj4gPiA+DQo+ID4gPiA+ICsJCS8qDQo+ID4gPiA+ICsJCSAqIHNl dCBwb2xhcml0eSAoZm9yIGVkZ2UtYWxpZ25lZCBQV00gbW9kZXMpDQo+ID4gPiA+ICsJCSAqDQo+ ID4gPiA+ICsJCSAqIEVMU1sxOjBdID0gMmIxMCB5aWVsZHMgbm9ybWFsIHBvbGFyaXR5IGJlaGF2 aW91ciwNCj4gPiA+ID4gKwkJICogRUxTWzE6MF0gPSAyYjAxIHlpZWxkcyBpbnZlcnNlZCBwb2xh cml0eS4NCj4gPiA+ID4gKwkJICogVGhlIG90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQuDQo+ID4g PiA+ICsJCSAqDQo+ID4gPiA+ICsJCSAqIHBvbGFyaXR5IHNldHRpbmdzIHdpbGwgZW5hYmxlZC9k aXNhYmxlIG91dHB1dCBzdGF0dXMNCj4gPiA+ID4gKwkJICogaW1tZWRpYXRlbHksIHNvIGlmIHRo ZSBjaGFubmVsIGlzIGRpc2FibGVkLCBuZWVkIHRvDQo+ID4gPiA+ICsJCSAqIG1ha2Ugc3VyZSBN U0EvTVNCL0VMUyBhcmUgc2V0IHRvIDAgd2hpY2ggbWVhbnMgY2hhbm5lbA0KPiA+ID4gPiArCQkg KiBkaXNhYmxlZC4NCj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsJCXZhbCA9IHJlYWRsKHRwbS0+ YmFzZSArIFBXTV9JTVhfVFBNX0NuU0MocHdtLQ0KPiA+ID4gPmh3cHdtKSk7DQo+ID4gPiA+ICsJ CXZhbCAmPSB+KFBXTV9JTVhfVFBNX0NuU0NfRUxTIHwNCj4gPiA+IFBXTV9JTVhfVFBNX0NuU0Nf TVNBIHwNCj4gPiA+ID4gKwkJCSBQV01fSU1YX1RQTV9DblNDX01TQik7DQo+ID4gPiA+ICsJCXNj X3ZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCj4gPiA+ID4gKwkJaWYg KHN0YXRlLT5lbmFibGVkKSB7DQo+ID4gPiA+ICsJCQl2YWwgfD0gUFdNX0lNWF9UUE1fQ25TQ19N U0I7DQo+ID4gPiA+ICsJCQl2YWwgfD0gKHN0YXRlLT5wb2xhcml0eSA9PSBQV01fUE9MQVJJVFlf Tk9STUFMKSA/DQo+ID4gPiA+ICsJCQkJUFdNX0lNWF9UUE1fQ25TQ19FTFNfTk9STUFMIDoNCj4g PiA+ID4gKwkJCQlQV01fSU1YX1RQTV9DblNDX0VMU19JTlZFUlNFRDsNCj4gPiA+ID4gKwkJCWlm ICgrK3RwbS0+ZW5hYmxlX2NvdW50ID09IDEpIHsNCj4gPiA+ID4gKwkJCQkvKiBzdGFydCBUUE0g Y291bnRlciAqLw0KPiA+ID4gPiArCQkJCXNjX3ZhbCB8PQ0KPiA+ID4gUFdNX0lNWF9UUE1fU0Nf Q01PRF9JTkNfRVZFUllfQ0xLOw0KPiA+ID4gPiArCQkJCXdyaXRlbChzY192YWwsIHRwbS0+YmFz ZSArDQo+ID4gPiBQV01fSU1YX1RQTV9TQyk7DQo+ID4gPiA+ICsJCQl9DQo+ID4gPiA+ICsJCX0g ZWxzZSB7DQo+ID4gPiA+ICsJCQlpZiAoLS10cG0tPmVuYWJsZV9jb3VudCA9PSAwKSB7DQo+ID4g PiA+ICsJCQkJLyogc3RvcCBUUE0gY291bnRlciAqLw0KPiA+ID4gPiArCQkJCXNjX3ZhbCAmPSB+ UFdNX0lNWF9UUE1fU0NfQ01PRDsNCj4gPiA+ID4gKwkJCQl3cml0ZWwoc2NfdmFsLCB0cG0tPmJh c2UgKw0KPiA+ID4gUFdNX0lNWF9UUE1fU0MpOw0KPiA+ID4gPiArCQkJfQ0KPiA+ID4gPiArCQl9 DQo+ID4gPiA+ICsJCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuU0MocHdt LQ0KPiA+ID4gPmh3cHdtKSk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX2FwcGx5KHN0cnVjdCBwd21fY2hpcCAqY2hp cCwNCj4gPiA+ID4gKwkJCSAgICAgIHN0cnVjdCBwd21fZGV2aWNlICpwd20sDQo+ID4gPiA+ICsJ CQkgICAgIHN0cnVjdCBwd21fc3RhdGUgKnN0YXRlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN0 cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0K PiA+ID4gPiArCXN0cnVjdCBpbXhfdHBtX3B3bV9wYXJhbSBwYXJhbTsNCj4gPiA+ID4gKwlzdHJ1 Y3QgcHdtX3N0YXRlIHJlYWxfc3RhdGU7DQo+ID4gPiA+ICsJaW50IHJldDsNCj4gPiA+ID4gKw0K PiA+ID4gPiArCXJldCA9IHB3bV9pbXhfdHBtX3JvdW5kX3N0YXRlKGNoaXAsICZwYXJhbSwgc3Rh dGUsICZyZWFsX3N0YXRlKTsNCj4gPiA+ID4gKwlpZiAocmV0KQ0KPiA+ID4gPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCW11dGV4X2xvY2soJnRwbS0+bG9jayk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwkvKg0KPiA+ID4gPiArCSAqIFRQTSBjb3VudGVyIGlzIHNoYXJl ZCBieSBtdWx0aXBsZSBjaGFubmVscywgc28NCj4gPiA+ID4gKwkgKiBwcmVzY2FsZSBhbmQgcGVy aW9kIGNhbiBOT1QgYmUgbW9kaWZpZWQgd2hlbg0KPiA+ID4gPiArCSAqIHRoZXJlIGFyZSBtdWx0 aXBsZSBjaGFubmVscyBpbiB1c2Ugd2l0aCBkaWZmZXJlbnQNCj4gPiA+ID4gKwkgKiBwZXJpb2Qg c2V0dGluZ3MuDQo+ID4gPiA+ICsJICovDQo+ID4gPiA+ICsJaWYgKHJlYWxfc3RhdGUucGVyaW9k ICE9IHRwbS0+cmVhbF9wZXJpb2QpIHsNCj4gPiA+ID4gKwkJaWYgKHRwbS0+dXNlcl9jb3VudCA+ IDEpIHsNCj4gPiA+ID4gKwkJCXJldCA9IC1FQlVTWTsNCj4gPiA+ID4gKwkJCWdvdG8gZXhpdDsN Cj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCXB3bV9pbXhfdHBtX3NldHVwX3Bl cmlvZChjaGlwLCAmcGFyYW0pOw0KPiA+ID4gPiArCQl0cG0tPnJlYWxfcGVyaW9kID0gcmVhbF9z dGF0ZS5wZXJpb2Q7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcHdtX2lteF90 cG1fYXBwbHlfaHcoY2hpcCwgcHdtLCAmcmVhbF9zdGF0ZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4g K2V4aXQ6DQo+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZ0cG0tPmxvY2spOw0KPiA+ID4NCj4gPiA+ IC5hcHBseSBpcyBzdXBwb3NlZCB0byBzbGVlcCB1bnRpbCB0aGUgbmV3bHkgY29uZmlndXJlZCBz dGF0ZSBpcyBhY3RpdmUuDQo+ID4gPiBUaGlzIGlzIG1pc3NpbmcgaGVyZSwgcmlnaHQ/DQo+ID4N Cj4gPiBOT1QgcXVpdGUgdW5kZXJzdGFuZCwgeW91IG1lYW50IC5hcHBseSBjb3VsZCBiZSBzbGVl cCBpZiBtdXRleCBpcyBob2xkDQo+ID4gYnkgb3RoZXIgdGhyZWFkPw0KPiANCj4gTm8uIC5hcHBs eSBpcyBzdXBwb3NlZCB0byBvbmx5IHJldHVybiB3aGVuIHRoZSBuZXcgY29uZmlndXJhdGlvbiBp cyBhY3RpdmUuDQo+IFNvIGlmIHRoZSBQV00gaXMgcnVubmluZyBpbiBpdHMgcHJldmlvdXMgY29u ZmlndXJhdGlvbiwgeW91IHNldHVwIHRoZSByZWdpc3RlcnMNCj4gc3VjaCB0aGF0IHRoZSBuZXcg Y29uZmlndXJhdGlvbiBnZXRzIGFjdGl2ZSBpbiB0aGUgbmV4dCBwZXJpb2QsIHlvdSBtdXN0IG5v dA0KPiB5ZXQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgdW50aWwgdGhlIG5ldyBwZXJpb2Qgc3RhcnRl ZC4NCg0KVGhhdCBicmluZyBtZSBiYWNrIHRvIHByZXZpb3VzIHF1ZXN0aW9uLCB3ZSBjYW4gYWRk IHdhaXRpbmcgZm9yIHBlcmlvZCBmaW5pc2gNCkFuZCB0aGVuIHJldHVybiBmcm9tIC5hcHBseSwg YnV0IHdlIGFsc28gbmVlZCBhIHRpbWVvdXQgZm9yIHRoZSB3YWl0LCB3aGF0IHNob3VsZA0KVGhl IHRpbWVvdXQgdmFsdWUgYmU/IDEwMG1TPyBPciBldmVuIHNldmVyYWwgc2Vjb25kcz8NCg0KDQo+ IA0KPiA+IEJUVywgY2FuIHlvdSBoYXZlIGFzIG1vcmUgb2YgeW91ciBjb21tZW50cyB0b2dldGhl ciBhcyBwb3NzaWJsZT8gVGhhdA0KPiA+IGNhbiBzYXZlIHNvbWUgdGltZSBvZiBkb2luZyBuZXcg cGF0Y2gsIG1hbnkgdGhhbmtzIGZvciB5b3VyIHRpbWUgYW5kDQo+IHBhdGllbmNlLg0KPiANCj4g SSB1bmRlcnN0YW5kIHRoYXQgY29taW5nIHVwIHdpdGggbmV3IGlzc3VlcyBpbiBWOCB0aGF0IHdl cmUgYWxyZWFkeSBwcmVzZW50DQo+IGluIFY1IGlzIGFubm95aW5nLiBPbiB0aGUgb3RoZXIgaGFu ZCB3aGVuIGhhdmluZyBhbHJlYWR5IHBvaW50ZWQgb3V0IHF1aXRlDQo+IHNvbWUgaXNzdWVzIGlu IFY1IChhbmQgVjYgYW5kIFY3KSBpdCdzIG5vdCBhbHdheXMgZWFzeSB0byBzdGlsbCBzZWUgdGhl IG1vcmUNCj4gY29tcGxpY2F0ZWQgaXNzdWVzLiBJbiB0aGlzIHJldmlldyByb3VuZCB0aGUgZHJp dmVyIGdvdCBpbiBteSBleWVzDQo+IGNvbnNpZGVyYWJseSBjbGVhbmVyIHdpdGggdGhlIGludHJv ZHVjdGlvbiBvZiB0aGUgcm91bmRfc3RhdGUgZnVuY3Rpb24gYW5kDQo+IGVhcmxpZXIgdGhlIGRy b3Agb2YgX2NvbmZpZyBhbmQgX2VuYWJsZS4gVGhhdCBvbmx5IGFmdGVyIHRoaXMgSSB3YXMgYWJs ZSB0bw0KPiBpZGVudGlmeSBtb3JlIGlzc3VlcyBpcyBiYWQgZm9yIHlvdXIgd29yayBmbG93LCBi dXQgYSBwcmltZSBzaG93IGNhc2Ugd2h5IGENCj4gd2VsbCBzdHJ1Y3R1cmVkIGRyaXZlciBpcyBn b29kIGZvciBtYWludGFpbmFiaWxpdHkuIEFsc28gbm90ZSB0aGF0IG15IGZlZWRiYWNrDQo+IGlz IChmb3IgeW91KSBmcmVlIG9mIGNoYXJnZS4NCj4gTXkgZGF5J3MgY2FsZW5kYXIgYWxzbyBjb250 YWlucyBvdGhlciBpdGVtcy4gU28gSSBjYW4gYmV0dGVyIHNwZW5kIHNldmVyYWwNCj4gc21hbGwg dGltZSBzbGljZXMgcmV2aWV3aW5nIHlvdXIgd29yayB0aGFuIGEgc2luZ2xlIGJpZyBvbmUuIE9m IGNvdXJzZSBJIGNvdWxkDQo+IGRlbGF5IHNlbmRpbmcgb3V0IG15IGZpbmRpbmdzIHRpbGwgdGhl IG5leHQgc21hbGwgc2xvdCwgYnV0IEkgdGhpbmsgdGhpcyBpcyBub3QNCj4gYmVuZWZpY2lhbCBp biB0aGUgc3VtIGZvciBzZXZlcmFsIHJlYXNvbnMuIElmIEkgZ2l2ZSBzbWFsbCAoYnV0IG1heWJl DQo+IGluY29tcGxldGUpIGZlZWRiYWNrOg0KPiANCj4gIC0geW91IGFyZSBub3QgKGNvbXBsZXRl bHkpIGRlbGF5ZWQ7DQo+ICAtIGl0IGlzIGxlc3MgbGlrZWx5IHRoYXQgc29tZW9uZSBlbHNlIGxv b2tzIGF0IHlvdXIgcGF0Y2ggYW5kIHNvDQo+ICAgIGR1cGxpY2F0ZXMgbXkgd29yazsNCj4gIC0g aXQgaXMgbGVzcyBsaWtlbHkgdGhhdCB0aGUgbWFpbnRhaW5lciBjb21lcyBhcm91bmQgaW4gYSBo dXJyeSwNCj4gICAgZG9lc24ndCBub3RpY2UgcmVtYWluaW5nIGlzc3VlcyBhbmQgYXBwbGllcyB0 aGUgbm9uLW9wdGltYWwgcGF0Y2g7DQo+ICAtIHlvdSBjYW4gcHJvdmlkZSBhIG5ldyBpdGVyYXRp b24gdGhhdCBpcyBhbHJlYWR5IGJldHRlciB0aGFuIHRoZSBsYXN0DQo+ICAgIGFuZCBzbyBnaXZl IHRoZSBjaGFuY2UgdG8gZmluZCBpc3N1ZXMgdGhhdCB3aGVyZSBzb21ld2hhdCBoaWRkZW4NCj4g ICAgYmVoaW5kIHRoaW5ncyB0aGUgZHJpdmVyIHN1ZmZlcmVkIGJlZm9yZS4NCj4gDQo+IEluIG15 IGV5ZXMgdGhpcyBvdXR3ZWlnaHMgdGhlIGRyYXdiYWNrcyBvZiB0aGlzIHdvcmtmbG93DQoNClRo YW5rcyBhZ2FpbiwgSSB1bmRlcnN0YW5kIGFsbCBvZiB0aGVzZSwganVzdCBob3BlIHRoYXQgdG9v IG1hbnkgcGF0Y2hlcy9tYWlscw0KZG9lcyBOT1QgYm90aGVyIHJldmlld2VyIHRvbyBtdWNoLCBJ IGxpa2UgdG8gc2VuZCBvdXQgbmV3IHBhdGNoZXMgb25jZSBJIGdvdA0KbmV3IGNvbW1lbnRzIGFu ZCBoYXZlIHRpbWUgdG8gZG8gdGhhdC4NCg0KVGhhbmtzIGZvciB5b3VyIHRpbWUuDQpBbnNvbi4g DQoNCi4NCj4gDQo+IEJlc3QgcmVnYXJkcw0KPiBVd2UNCj4gDQo+IC0tDQo+IFBlbmd1dHJvbml4 IGUuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICB8IFV3ZSBLbGVpbmUtS8O2bmlnICAgICAg ICAgICAgfA0KPiBJbmR1c3RyaWFsIExpbnV4IFNvbHV0aW9ucyAgICAgICAgICAgICAgICAgfA0K PiBodHRwczovL2V1cjAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0 cCUzQSUyRiUyRnd3dy5wDQo+IGVuZ3V0cm9uaXguZGUlMkYmYW1wO2RhdGE9MDIlN0MwMSU3Q2Fu c29uLmh1YW5nJTQwbnhwLmNvbSU3Q2MxDQo+IDU3YzQ1ZDc0MTQ0MTUwMTc4MDA4ZDZhZGU5YzRl OCU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAxNjMNCj4gNSU3QzAlN0MwJTdDNjM2ODg3 NjE2ODg1NTk5MzM5JmFtcDtzZGF0YT1NdVJrTTV1SSUyRm5KWWNwa0ZnaA0KPiBxUWRjckdKeUdr ZHI1ZDNYeXZ0VHBuJTJGNEklM0QmYW1wO3Jlc2VydmVkPTAgIHwNCg==