From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CB842A04BA; Thu, 1 Oct 2020 23:46:55 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 27D0A1C1EE; Thu, 1 Oct 2020 23:46:54 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id A88991C196 for ; Thu, 1 Oct 2020 23:46:51 +0200 (CEST) IronPort-SDR: x7fgiG27LnbJUlbfGdDBJOJnyuMfDuTVT0hEPCgWA3mDZaTron50urO1gYLI56zlLt0EpWVW/r eHxj9jMRh44w== X-IronPort-AV: E=McAfee;i="6000,8403,9761"; a="224463308" X-IronPort-AV: E=Sophos;i="5.77,325,1596524400"; d="scan'208";a="224463308" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Oct 2020 14:46:48 -0700 IronPort-SDR: wHmcbu98N86Efqrw3b1oBj0PzSky27XL54sk4DDqKatp42ZemvSPAoCGTBj1TMcpMcHqCmWFcu 0BhMZkm0jNOg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,325,1596524400"; d="scan'208";a="294594568" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by fmsmga007.fm.intel.com with ESMTP; 01 Oct 2020 14:46:48 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 1 Oct 2020 14:46:47 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 1 Oct 2020 14:46:47 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.172) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Thu, 1 Oct 2020 14:46:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fQzHz8Y7mbi4L77+4GE2FTiAq9IeVaCAHk/aHbpJexfDoCn/jm4Aysj+3CX98n7PagkHTOXPP0TahqXCmWq9zoFk+UxKH1CZxybv4IgNJe/vUg6PMsgyDG+sKkf5rhSjSHKSRP1CbXjnylv7IP0rYFc2vOm6T3xDq+r525xGkF/Yh3SqOg4OXbLeehy/xZBtavumGBpqmyL/rkTY06Yc8AafKhpY/a3xgGDp/szf6toblvLpjd/chx/hvSinaXEWfmubeuUZzy/tq3z8MJ1JxswIiAZuanCwCTdtFxt5JLtuAQ6hoNjrxPsiVsajd3wIjM63l9E2hU0LLL3PKT7RjQ== 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=t0DsTK7yHSlChn9BFiNa/aAutDpp7v3iRWJafPCgjSo=; b=kpFI6/g5ZzsnffLcdBybAtn3NjBQo+6G5RUiTMuUH3KaNnJrG9tvRt/4eDjr0JKpcczBY/3oziRUf0no3YbzoQJM/wvkeZtqaYIz4InvGKjqVBCYYZH14WDrB/8hhGH43PzwM+EIPo0nR59oYH+2FZ2qPLXH26VD7IiIgKwnjM8C+DxHuAlEB5socdxPx1uuwfYqWmpk5ck8GdiwQcjgOOwvNoAUOVoIYOnXah1pLpDiuoPw83Ewb5PlMgJoxf04enJAwXpnknzD5qAT7H7+xfzT6g+XGX9Z+DmmlpYmECFl7RyHhOAnfmi5wJkiKA5fT8dqtl/sZcc0eOduzf9EsQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t0DsTK7yHSlChn9BFiNa/aAutDpp7v3iRWJafPCgjSo=; b=SH3X8o0r+abrOe+c3Dslg8vurYJMYAwHjTh2+tE5latS21P+hJGATch10TdcHR38fq+NZ/Qhp7JlUGYe08QsL1lk8BhrdqVZX+Jw2vB2dKGf4GtDDWjm+DlDzO0g/R+FuFWn7uy72Vv9VKiAApPUR8T0WvjUZMdGagYbs/y2m0k= Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by BYAPR11MB2775.namprd11.prod.outlook.com (2603:10b6:a02:bd::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3412.28; Thu, 1 Oct 2020 21:46:38 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508%7]) with mapi id 15.20.3412.028; Thu, 1 Oct 2020 21:46:38 +0000 From: "Chautru, Nicolas" To: Tom Rix , "dev@dpdk.org" , "akhil.goyal@nxp.com" CC: "Richardson, Bruce" , "Xu, Rosen" , "dave.burley@accelercomm.com" , "aidan.goddard@accelercomm.com" , "Yigit, Ferruh" , "Liu, Tianjiao" Thread-Topic: [dpdk-dev] [PATCH v9 07/10] baseband/acc100: add support for 4G processing Thread-Index: AQHWlffi2D99yx50j0KeQ5g2OlCDdKmBhXkAgAAFtUCAAVvrAIAAZVAA Date: Thu, 1 Oct 2020 21:46:38 +0000 Message-ID: References: <1597796731-57841-12-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-1-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-8-git-send-email-nicolas.chautru@intel.com> <9798b533-1898-12dd-443e-be25ad1180f1@redhat.com> <1ac86e0b-ecc4-7fcb-10f1-a962585f16bd@redhat.com> In-Reply-To: <1ac86e0b-ecc4-7fcb-10f1-a962585f16bd@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [45.28.143.88] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b5bd162e-bac3-4341-647c-08d8665379d9 x-ms-traffictypediagnostic: BYAPR11MB2775: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:261; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: faqYJldJOE57knRn39rv4YREuoRgi8PTEnQk5xkHXbUxonxTT+HIyD2b557B6WAiP40L6qrq9H3iIGNigU1WgOa7nk5K4KCy1dLFlXfKJpE7WQ7QzlyL3Q0tcH8yAryxvzhLtZfmTij+BK1w79cdCBL3VKKQni/50Mn/NGTaUlHFVbFQ4UcDZUuHMWRqV7Ym5LTR6zwnSWsO9SHui4UI8JBxz8u0NWFKdRhuYIqwygoIpBfQtOzOD3CzS87x6epILzVSJCKSrH3aJkQSh7KmZ4Hfpw3fh1KTpxjX8urVVgdeX4IqhqX7lL5E6asyo89bTVppVQ84MeZUn7oLGg/9kK3FJ65cd6hmpNTxJtG8nxfRchNXwYiSdl4Jh5TIfL4nHqxqf/19wuJCrB/i7jxqTvtj9Inoe/G5FYQafzpZZsU= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB4451.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(39860400002)(346002)(366004)(136003)(396003)(9686003)(33656002)(26005)(8936002)(66946007)(76116006)(6506007)(7696005)(71200400001)(5660300002)(86362001)(186003)(54906003)(107886003)(53546011)(8676002)(110136005)(55016002)(83380400001)(66446008)(52536014)(64756008)(30864003)(66476007)(4326008)(316002)(66556008)(478600001)(2906002)(461764006)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: ov/qOpgrYoET5fGS1ZRqBnBUqBxKwSAUVIdE9sR2tC8lpCnk8f9JpGY29g8MgBCPz+Y2YaAV9Sj+JyvtLnFLVQ7L92D00hkHFJtnYaaWG8NeF5fACbTC8MjN/M89oNr7kEiPJvYwOqEY1y4V0UP/93je9stnqL2Oqi7yCXICT5C9vVhTc/Og1fpPM3rlJjKBTfGGehOeoYJe0r7Qvy8M760hgF91l6ePoPibjXa/y8higzsdZiz5V9VEHuvKGMdUakM+wnTUlEgghfeI1cB0cik/46HR1JMxeWWhalKx0iD1VCO8XqmJKj2Xhiqsdnrhqxa9y648+dVk+YOnFjMp+B1bSpcbKwhUiL0A5ohNaDWrPztEleMipOzSRwUB4i53Gm8oD61cB4Vpcc2RcIY+Fse4mR2G4dg7muUXQCh/+g65Nb4OycyzdRm1A9oXdACkUeMEL/DFu2HFlXllpVEusCnQI6PcezyeJ2A183uc8k8QFQYbeTmgg2Q3Gy3VJsRSy6ktrW67N/UPsItujHfsLE7cTvjSrLFreAjsmRShcbpKrA/A9xRIglUKfyeoLRqHCYOGxFs37PXJqEoQxg9EtHCTuVHw2VnCplX63eRd1nWAnpECiQNTcDWbyC7TKHsTpnEpznYq7QEOQCASbSssMw== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR11MB4451.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5bd162e-bac3-4341-647c-08d8665379d9 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Oct 2020 21:46:38.2146 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Bx0fq2fIH8/dBWxE3X3mcjf1xJRHBXYD2WV5S1GQKV2VUhCyzy0BQvW+PCdP9cod4CbNEvpqw1P/J5zEqI09CdFJNhRQxzrcrK7Klvp9rfY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB2775 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v9 07/10] baseband/acc100: add support for 4G processing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgVG9tLA0KDQo+IEZyb206IFRvbSBSaXggPHRyaXhAcmVkaGF0LmNvbT4NCj4gT24gOS8zMC8y MCAxMjoxMCBQTSwgQ2hhdXRydSwgTmljb2xhcyB3cm90ZToNCj4gPiBIaSBUb20sDQo+ID4NCj4g Pj4gRnJvbTogVG9tIFJpeCA8dHJpeEByZWRoYXQuY29tPg0KPiA+PiBPbiA5LzI4LzIwIDU6Mjkg UE0sIE5pY29sYXMgQ2hhdXRydSB3cm90ZToNCj4gPj4+IEFkZGluZyBjYXBhYmlsaXR5IGZvciA0 RyBlbmNvZGUgYW5kIGRlY29kZXIgcHJvY2Vzc2luZw0KPiA+Pj4NCj4gPj4+IFNpZ25lZC1vZmYt Ynk6IE5pY29sYXMgQ2hhdXRydSA8bmljb2xhcy5jaGF1dHJ1QGludGVsLmNvbT4NCj4gPj4+IEFj a2VkLWJ5OiBMaXUgVGlhbmppYW8gPFRpYW5qaWFvLmxpdUBpbnRlbC5jb20+DQo+ID4+PiAtLS0N Cj4gPj4+ICBkb2MvZ3VpZGVzL2JiZGV2cy9mZWF0dXJlcy9hY2MxMDAuaW5pICAgIHwgICAgNCAr LQ0KPiA+Pj4gIGRyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMgfCAxMDEw DQo+ID4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0NCj4gPj4+ICAyIGZpbGVzIGNo YW5nZWQsIDk0NSBpbnNlcnRpb25zKCspLCA2OSBkZWxldGlvbnMoLSkNCj4gPj4+DQo+ID4+PiBk aWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9iYmRldnMvZmVhdHVyZXMvYWNjMTAwLmluaQ0KPiA+Pj4g Yi9kb2MvZ3VpZGVzL2JiZGV2cy9mZWF0dXJlcy9hY2MxMDAuaW5pDQo+ID4+PiBpbmRleCA0MGM3 YWRjLi42NDJjZDQ4IDEwMDY0NA0KPiA+Pj4gLS0tIGEvZG9jL2d1aWRlcy9iYmRldnMvZmVhdHVy ZXMvYWNjMTAwLmluaQ0KPiA+Pj4gKysrIGIvZG9jL2d1aWRlcy9iYmRldnMvZmVhdHVyZXMvYWNj MTAwLmluaQ0KPiA+Pj4gQEAgLTQsOCArNCw4IEBADQo+ID4+PiAgOyBSZWZlciB0byBkZWZhdWx0 LmluaSBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgUE1EIGZlYXR1cmVzLg0KPiA+Pj4g IDsNCj4gPj4+ICBbRmVhdHVyZXNdDQo+ID4+PiAtVHVyYm8gRGVjb2RlciAoNEcpICAgICA9IE4N Cj4gPj4+IC1UdXJibyBFbmNvZGVyICg0RykgICAgID0gTg0KPiA+Pj4gK1R1cmJvIERlY29kZXIg KDRHKSAgICAgPSBZDQo+ID4+PiArVHVyYm8gRW5jb2RlciAoNEcpICAgICA9IFkNCj4gPj4+ICBM RFBDIERlY29kZXIgKDVHKSAgICAgID0gWQ0KPiA+Pj4gIExEUEMgRW5jb2RlciAoNUcpICAgICAg PSBZDQo+ID4+PiAgTExSL0hBUlEgQ29tcHJlc3Npb24gICA9IFkNCj4gPj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX3BtZC5jDQo+ID4+PiBiL2RyaXZl cnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMNCj4gPj4+IGluZGV4IGU0ODRjMGEu LjdkNGMzZGYgMTAwNjQ0DQo+ID4+PiAtLS0gYS9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVf YWNjMTAwX3BtZC5jDQo+ID4+PiArKysgYi9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNj MTAwX3BtZC5jDQo+ID4+PiBAQCAtMzM5LDcgKzMzOSw2IEBADQo+ID4+PiAgCWZyZWVfYmFzZV9h ZGRyZXNzZXMoYmFzZV9hZGRycywgaSk7ICB9DQo+ID4+Pg0KPiA+Pj4gLQ0KPiA+Pj4gIC8qIEFs bG9jYXRlIDY0TUIgbWVtb3J5IHVzZWQgZm9yIGFsbCBzb2Z0d2FyZSByaW5ncyAqLyAgc3RhdGlj IGludA0KPiA+Pj4gYWNjMTAwX3NldHVwX3F1ZXVlcyhzdHJ1Y3QgcnRlX2JiZGV2ICpkZXYsIHVp bnQxNl90IG51bV9xdWV1ZXMsIGludA0KPiA+Pj4gc29ja2V0X2lkKSBAQCAtNjM3LDYgKzYzNiw0 MSBAQA0KPiA+Pj4NCj4gPj4+ICAJc3RhdGljIGNvbnN0IHN0cnVjdCBydGVfYmJkZXZfb3BfY2Fw IGJiZGV2X2NhcGFiaWxpdGllc1tdID0gew0KPiA+Pj4gIAkJew0KPiA+Pj4gKwkJCS50eXBlID0g UlRFX0JCREVWX09QX1RVUkJPX0RFQywNCj4gPj4+ICsJCQkuY2FwLnR1cmJvX2RlYyA9IHsNCj4g Pj4+ICsJCQkJLmNhcGFiaWxpdHlfZmxhZ3MgPQ0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JCREVWX1RV UkJPX1NVQkJMT0NLX0RFSU5URVJMRUFWRSB8DQo+ID4+PiArCQkJCQlSVEVfQkJERVZfVFVSQk9f Q1JDX1RZUEVfMjRCDQo+ID4+IHwNCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9UVVJCT19IQUxG X0lURVJBVElPTl9FVkVOIHwNCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9UVVJCT19FQVJMWV9U RVJNSU5BVElPTiB8DQo+ID4+PiArDQo+ID4+IAlSVEVfQkJERVZfVFVSQk9fTkVHX0xMUl8xX0JJ VF9JTiB8DQo+ID4+PiArCQkJCQlSVEVfQkJERVZfVFVSQk9fTUFQX0RFQyB8DQo+ID4+PiArDQo+ ID4+IAlSVEVfQkJERVZfVFVSQk9fREVDX1RCX0NSQ18yNEJfS0VFUCB8DQo+ID4+PiArDQo+ID4+ IAlSVEVfQkJERVZfVFVSQk9fREVDX1NDQVRURVJfR0FUSEVSLA0KPiA+Pj4gKwkJCQkubWF4X2xs cl9tb2R1bHVzID0gSU5UOF9NQVgsDQo+ID4+PiArCQkJCS5udW1fYnVmZmVyc19zcmMgPQ0KPiA+ Pj4gKw0KPiA+PiAJUlRFX0JCREVWX1RVUkJPX01BWF9DT0RFX0JMT0NLUywNCj4gPj4+ICsJCQkJ Lm51bV9idWZmZXJzX2hhcmRfb3V0ID0NCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9UVVJCT19N QVhfQ09ERV9CTE9DS1MsDQo+ID4+PiArCQkJCS5udW1fYnVmZmVyc19zb2Z0X291dCA9DQo+ID4+ PiArDQo+ID4+IAlSVEVfQkJERVZfVFVSQk9fTUFYX0NPREVfQkxPQ0tTLA0KPiA+Pj4gKwkJCX0N Cj4gPj4+ICsJCX0sDQo+ID4+PiArCQl7DQo+ID4+PiArCQkJLnR5cGUgPSBSVEVfQkJERVZfT1Bf VFVSQk9fRU5DLA0KPiA+Pj4gKwkJCS5jYXAudHVyYm9fZW5jID0gew0KPiA+Pj4gKwkJCQkuY2Fw YWJpbGl0eV9mbGFncyA9DQo+ID4+PiArDQo+ID4+IAlSVEVfQkJERVZfVFVSQk9fQ1JDXzI0Ql9B VFRBQ0ggfA0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JCREVWX1RVUkJPX1JWX0lOREVYX0JZUEFTUyB8 DQo+ID4+PiArCQkJCQlSVEVfQkJERVZfVFVSQk9fUkFURV9NQVRDSCB8DQo+ID4+PiArDQo+ID4+ IAlSVEVfQkJERVZfVFVSQk9fRU5DX1NDQVRURVJfR0FUSEVSLA0KPiA+Pj4gKwkJCQkubnVtX2J1 ZmZlcnNfc3JjID0NCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9UVVJCT19NQVhfQ09ERV9CTE9D S1MsDQo+ID4+PiArCQkJCS5udW1fYnVmZmVyc19kc3QgPQ0KPiA+Pj4gKw0KPiA+PiAJUlRFX0JC REVWX1RVUkJPX01BWF9DT0RFX0JMT0NLUywNCj4gPj4+ICsJCQl9DQo+ID4+PiArCQl9LA0KPiA+ Pj4gKwkJew0KPiA+Pj4gIAkJCS50eXBlICAgPSBSVEVfQkJERVZfT1BfTERQQ19FTkMsDQo+ID4+ PiAgCQkJLmNhcC5sZHBjX2VuYyA9IHsNCj4gPj4+ICAJCQkJLmNhcGFiaWxpdHlfZmxhZ3MgPQ0K PiA+Pj4gQEAgLTcxOSw3ICs3NTMsNiBAQA0KPiA+Pj4gICNlbmRpZg0KPiA+Pj4gIH0NCj4gPj4+ DQo+ID4+PiAtDQo+ID4+PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBydGVfYmJkZXZfb3BzIGFjYzEw MF9iYmRldl9vcHMgPSB7DQo+ID4+PiAgCS5zZXR1cF9xdWV1ZXMgPSBhY2MxMDBfc2V0dXBfcXVl dWVzLA0KPiA+Pj4gIAkuY2xvc2UgPSBhY2MxMDBfZGV2X2Nsb3NlLA0KPiA+Pj4gQEAgLTc2Myw2 ICs3OTYsNTggQEANCj4gPj4+ICAJcmV0dXJuIHRhaWw7DQo+ID4+PiAgfQ0KPiA+Pj4NCj4gPj4+ ICsvKiBGaWxsIGluIGEgZnJhbWUgY29udHJvbCB3b3JkIGZvciB0dXJibyBlbmNvZGluZy4gKi8g c3RhdGljDQo+ID4+PiAraW5saW5lIHZvaWQgYWNjMTAwX2Zjd190ZV9maWxsKGNvbnN0IHN0cnVj dCBydGVfYmJkZXZfZW5jX29wICpvcCwNCj4gPj4+ICtzdHJ1Y3QgYWNjMTAwX2Zjd190ZSAqZmN3 KSB7DQo+ID4+PiArCWZjdy0+Y29kZV9ibG9ja19tb2RlID0gb3AtPnR1cmJvX2VuYy5jb2RlX2Js b2NrX21vZGU7DQo+ID4+PiArCWlmIChmY3ctPmNvZGVfYmxvY2tfbW9kZSA9PSAwKSB7IC8qIEZv ciBUQiBtb2RlICovDQo+ID4+PiArCQlmY3ctPmtfbmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJh bXMua19uZWc7DQo+ID4+PiArCQlmY3ctPmtfcG9zID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMu a19wb3M7DQo+ID4+PiArCQlmY3ctPmNfbmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuY19u ZWc7DQo+ID4+PiArCQlmY3ctPmMgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5jOw0KPiA+Pj4g KwkJZmN3LT5uY2JfbmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMubmNiX25lZzsNCj4gPj4+ ICsJCWZjdy0+bmNiX3BvcyA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLm5jYl9wb3M7DQo+ID4+ PiArDQo+ID4+PiArCQlpZiAoY2hlY2tfYml0KG9wLT50dXJib19lbmMub3BfZmxhZ3MsDQo+ID4+ PiArCQkJCVJURV9CQkRFVl9UVVJCT19SQVRFX01BVENIKSkgew0KPiA+Pj4gKwkJCWZjdy0+Ynlw YXNzX3JtID0gMDsNCj4gPj4+ICsJCQlmY3ctPmNhYiA9IG9wLT50dXJib19lbmMudGJfcGFyYW1z LmNhYjsNCj4gPj4+ICsJCQlmY3ctPmVhID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuZWE7DQo+ ID4+PiArCQkJZmN3LT5lYiA9IG9wLT50dXJib19lbmMudGJfcGFyYW1zLmViOw0KPiA+Pj4gKwkJ fSBlbHNlIHsNCj4gPj4+ICsJCQkvKiBFIGlzIHNldCB0byB0aGUgZW5jb2Rpbmcgb3V0cHV0IHNp emUgd2hlbiBSTSBpcw0KPiA+Pj4gKwkJCSAqIGJ5cGFzc2VkLg0KPiA+Pj4gKwkJCSAqLw0KPiA+ Pj4gKwkJCWZjdy0+YnlwYXNzX3JtID0gMTsNCj4gPj4+ICsJCQlmY3ctPmNhYiA9IGZjdy0+Y19u ZWc7DQo+ID4+PiArCQkJZmN3LT5lYSA9IDMgKiBmY3ctPmtfbmVnICsgMTI7DQo+ID4+PiArCQkJ ZmN3LT5lYiA9IDMgKiBmY3ctPmtfcG9zICsgMTI7DQo+ID4+PiArCQl9DQo+ID4+PiArCX0gZWxz ZSB7IC8qIEZvciBDQiBtb2RlICovDQo+ID4+PiArCQlmY3ctPmtfcG9zID0gb3AtPnR1cmJvX2Vu Yy5jYl9wYXJhbXMuazsNCj4gPj4+ICsJCWZjdy0+bmNiX3BvcyA9IG9wLT50dXJib19lbmMuY2Jf cGFyYW1zLm5jYjsNCj4gPj4+ICsNCj4gPj4+ICsJCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2Vu Yy5vcF9mbGFncywNCj4gPj4+ICsJCQkJUlRFX0JCREVWX1RVUkJPX1JBVEVfTUFUQ0gpKSB7DQo+ ID4+PiArCQkJZmN3LT5ieXBhc3Nfcm0gPSAwOw0KPiA+Pj4gKwkJCWZjdy0+ZWIgPSBvcC0+dHVy Ym9fZW5jLmNiX3BhcmFtcy5lOw0KPiA+Pj4gKwkJfSBlbHNlIHsNCj4gPj4+ICsJCQkvKiBFIGlz IHNldCB0byB0aGUgZW5jb2Rpbmcgb3V0cHV0IHNpemUgd2hlbiBSTSBpcw0KPiA+Pj4gKwkJCSAq IGJ5cGFzc2VkLg0KPiA+Pj4gKwkJCSAqLw0KPiA+Pj4gKwkJCWZjdy0+YnlwYXNzX3JtID0gMTsN Cj4gPj4+ICsJCQlmY3ctPmViID0gMyAqIGZjdy0+a19wb3MgKyAxMjsNCj4gPj4+ICsJCX0NCj4g Pj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlmY3ctPmJ5cGFzc19ydl9pZHgxID0gY2hlY2tfYml0 KG9wLT50dXJib19lbmMub3BfZmxhZ3MsDQo+ID4+PiArCQkJUlRFX0JCREVWX1RVUkJPX1JWX0lO REVYX0JZUEFTUyk7DQo+ID4+PiArCWZjdy0+Y29kZV9ibG9ja19jcmMgPSBjaGVja19iaXQob3At PnR1cmJvX2VuYy5vcF9mbGFncywNCj4gPj4+ICsJCQlSVEVfQkJERVZfVFVSQk9fQ1JDXzI0Ql9B VFRBQ0gpOw0KPiA+Pj4gKwlmY3ctPnJ2X2lkeDEgPSBvcC0+dHVyYm9fZW5jLnJ2X2luZGV4OyB9 DQo+ID4+PiArDQo+ID4+PiAgLyogQ29tcHV0ZSB2YWx1ZSBvZiBrMC4NCj4gPj4+ICAgKiBCYXNl ZCBvbiAzR1BQIDM4LjIxMiBUYWJsZSA1LjQuMi4xLTINCj4gPj4+ICAgKiBTdGFydGluZyBwb3Np dGlvbiBvZiBkaWZmZXJlbnQgcmVkdW5kYW5jeSB2ZXJzaW9ucywgazAgQEAgLTgxMyw2DQo+ID4+ PiArODk4LDI1IEBADQo+ID4+PiAgCWZjdy0+bWNiX2NvdW50ID0gbnVtX2NiOw0KPiA+Pj4gIH0N Cj4gPj4+DQo+ID4+PiArLyogRmlsbCBpbiBhIGZyYW1lIGNvbnRyb2wgd29yZCBmb3IgdHVyYm8g ZGVjb2RpbmcuICovIHN0YXRpYw0KPiA+Pj4gK2lubGluZSB2b2lkIGFjYzEwMF9mY3dfdGRfZmls bChjb25zdCBzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3AsDQo+ID4+PiArc3RydWN0IGFjYzEw MF9mY3dfdGQgKmZjdykgew0KPiA+Pj4gKwkvKiBOb3RlIDogRWFybHkgdGVybWluYXRpb24gaXMg YWx3YXlzIGVuYWJsZWQgZm9yIDRHVUwgKi8NCj4gPj4+ICsJZmN3LT5mY3dfdmVyID0gMTsNCj4g Pj4+ICsJaWYgKG9wLT50dXJib19kZWMuY29kZV9ibG9ja19tb2RlID09IDApDQo+ID4+PiArCQlm Y3ctPmtfcG9zID0gb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMua19wb3M7DQo+ID4+PiArCWVsc2UN Cj4gPj4+ICsJCWZjdy0+a19wb3MgPSBvcC0+dHVyYm9fZGVjLmNiX3BhcmFtcy5rOw0KPiA+Pj4g KwlmY3ctPnR1cmJvX2NyY190eXBlID0gY2hlY2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3Ms DQo+ID4+PiArCQkJUlRFX0JCREVWX1RVUkJPX0NSQ19UWVBFXzI0Qik7DQo+ID4+PiArCWZjdy0+ YnlwYXNzX3NiX2RlaW50ID0gMDsNCj4gPj4+ICsJZmN3LT5yYXdfZGVjb2Rlcl9pbnB1dF9vbiA9 IDA7DQo+ID4+PiArCWZjdy0+bWF4X2l0ZXIgPSBvcC0+dHVyYm9fZGVjLml0ZXJfbWF4Ow0KPiA+ Pj4gKwlmY3ctPmhhbGZfaXRlcl9vbiA9ICFjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFn cywNCj4gPj4+ICsJCQlSVEVfQkJERVZfVFVSQk9fSEFMRl9JVEVSQVRJT05fRVZFTik7DQo+ID4+ PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gIC8qIEZpbGwgaW4gYSBmcmFtZSBjb250cm9sIHdvcmQgZm9y IExEUEMgZGVjb2RpbmcuICovICBzdGF0aWMNCj4gPj4+IGlubGluZSB2b2lkICBhY2MxMDBfZmN3 X2xkX2ZpbGwoY29uc3Qgc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLA0KPiA+Pj4gc3RydWN0 IGFjYzEwMF9mY3dfbGQgKmZjdywgQEAgLTEwNDIsNiArMTE0Niw4NyBAQCAgfQ0KPiA+Pj4NCj4g Pj4+ICBzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gK2FjYzEwMF9kbWFfZGVzY190ZV9maWxsKHN0 cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcCwNCj4gPj4+ICsJCXN0cnVjdCBhY2MxMDBfZG1hX3Jl cV9kZXNjICpkZXNjLCBzdHJ1Y3QgcnRlX21idWYgKippbnB1dCwNCj4gPj4+ICsJCXN0cnVjdCBy dGVfbWJ1ZiAqb3V0cHV0LCB1aW50MzJfdCAqaW5fb2Zmc2V0LA0KPiA+Pj4gKwkJdWludDMyX3Qg Km91dF9vZmZzZXQsIHVpbnQzMl90ICpvdXRfbGVuZ3RoLA0KPiA+Pj4gKwkJdWludDMyX3QgKm1i dWZfdG90YWxfbGVmdCwgdWludDMyX3QgKnNlZ190b3RhbF9sZWZ0LCB1aW50OF90DQo+ID4+IHIp IHsNCj4gPj4+ICsJaW50IG5leHRfdHJpcGxldCA9IDE7IC8qIEZDVyBhbHJlYWR5IGRvbmUgKi8N Cj4gPj4+ICsJdWludDMyX3QgZSwgZWEsIGViLCBsZW5ndGg7DQo+ID4+PiArCXVpbnQxNl90IGss IGtfbmVnLCBrX3BvczsNCj4gPj4+ICsJdWludDhfdCBjYWIsIGNfbmVnOw0KPiA+Pj4gKw0KPiA+ Pj4gKwlkZXNjLT53b3JkMCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+Pj4gKwlkZXNjLT53 b3JkMSA9IDA7IC8qKjwgVGltZXN0YW1wIGNvdWxkIGJlIGRpc2FibGVkICovDQo+ID4+PiArCWRl c2MtPndvcmQyID0gMDsNCj4gPj4+ICsJZGVzYy0+d29yZDMgPSAwOw0KPiA+Pj4gKwlkZXNjLT5u dW1DQnMgPSAxOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAob3AtPnR1cmJvX2VuYy5jb2RlX2Jsb2Nr X21vZGUgPT0gMCkgew0KPiA+Pj4gKwkJZWEgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5lYTsN Cj4gPj4+ICsJCWViID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMuZWI7DQo+ID4+PiArCQljYWIg PSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5jYWI7DQo+ID4+PiArCQlrX25lZyA9IG9wLT50dXJi b19lbmMudGJfcGFyYW1zLmtfbmVnOw0KPiA+Pj4gKwkJa19wb3MgPSBvcC0+dHVyYm9fZW5jLnRi X3BhcmFtcy5rX3BvczsNCj4gPj4+ICsJCWNfbmVnID0gb3AtPnR1cmJvX2VuYy50Yl9wYXJhbXMu Y19uZWc7DQo+ID4+PiArCQllID0gKHIgPCBjYWIpID8gZWEgOiBlYjsNCj4gPj4+ICsJCWsgPSAo ciA8IGNfbmVnKSA/IGtfbmVnIDoga19wb3M7DQo+ID4+PiArCX0gZWxzZSB7DQo+ID4+PiArCQll ID0gb3AtPnR1cmJvX2VuYy5jYl9wYXJhbXMuZTsNCj4gPj4+ICsJCWsgPSBvcC0+dHVyYm9fZW5j LmNiX3BhcmFtcy5rOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWlmIChjaGVja19iaXQo b3AtPnR1cmJvX2VuYy5vcF9mbGFncywNCj4gPj4gUlRFX0JCREVWX1RVUkJPX0NSQ18yNEJfQVRU QUNIKSkNCj4gPj4+ICsJCWxlbmd0aCA9IChrIC0gMjQpID4+IDM7DQo+ID4+PiArCWVsc2UNCj4g Pj4+ICsJCWxlbmd0aCA9IGsgPj4gMzsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHVubGlrZWx5KCgq bWJ1Zl90b3RhbF9sZWZ0ID09IDApIHx8ICgqbWJ1Zl90b3RhbF9sZWZ0IDwNCj4gPj4+ICtsZW5n dGgpKSkgew0KPiA+PiBzaW1pbGFyIHRvIG90aGVyIHBhdGNoZXMsIHRoaXMgY2hlY2sgY2FuIGJl IGNvbWJpbmVkIHRvIDw9DQo+ID4+DQo+ID4+IGNoYW5nZSBnZW5lcmFsbHkNCj4gPiBzYW1lIGNv bW1lbnQgb24gb3RoZXIgcGF0Y2gNCj4gPg0KPiA+Pj4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ ID4+PiArCQkJCSJNaXNtYXRjaCBiZXR3ZWVuIG1idWYgbGVuZ3RoIGFuZA0KPiA+PiBpbmNsdWRl ZCBDQiBzaXplczogbWJ1ZiBsZW4gJXUsIGNiIGxlbiAldSIsDQo+ID4+PiArCQkJCSptYnVmX3Rv dGFsX2xlZnQsIGxlbmd0aCk7DQo+ID4+PiArCQlyZXR1cm4gLTE7DQo+ID4+PiArCX0NCj4gPj4+ ICsNCj4gPj4+ICsJbmV4dF90cmlwbGV0ID0gYWNjMTAwX2RtYV9maWxsX2Jsa190eXBlX2luKGRl c2MsIGlucHV0LCBpbl9vZmZzZXQsDQo+ID4+PiArCQkJbGVuZ3RoLCBzZWdfdG90YWxfbGVmdCwg bmV4dF90cmlwbGV0KTsNCj4gPj4+ICsJaWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7 DQo+ID4+PiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPj4+ICsJCQkJIk1pc21hdGNoIGJldHdl ZW4gZGF0YSB0byBwcm9jZXNzIGFuZA0KPiA+PiBtYnVmIGRhdGEgbGVuZ3RoIGluIGJiZGV2X29w OiAlcCIsDQo+ID4+PiArCQkJCW9wKTsNCj4gPj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsJfQ0K PiA+Pj4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0IC0gMV0ubGFzdCA9IDE7DQo+ID4+ PiArCWRlc2MtPm0yZGxlbiA9IG5leHRfdHJpcGxldDsNCj4gPj4+ICsJKm1idWZfdG90YWxfbGVm dCAtPSBsZW5ndGg7DQo+ID4+PiArDQo+ID4+PiArCS8qIFNldCBvdXRwdXQgbGVuZ3RoICovDQo+ ID4+PiArCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2VuYy5vcF9mbGFncywNCj4gPj4gUlRFX0JC REVWX1RVUkJPX1JBVEVfTUFUQ0gpKQ0KPiA+Pj4gKwkJLyogSW50ZWdlciByb3VuZCB1cCBkaXZp c2lvbiBieSA4ICovDQo+ID4+PiArCQkqb3V0X2xlbmd0aCA9IChlICsgNykgPj4gMzsNCj4gPj4+ ICsJZWxzZQ0KPiA+Pj4gKwkJKm91dF9sZW5ndGggPSAoayA+PiAzKSAqIDMgKyAyOw0KPiA+Pj4g Kw0KPiA+Pj4gKwluZXh0X3RyaXBsZXQgPSBhY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVfb3V0KGRl c2MsIG91dHB1dCwNCj4gPj4gKm91dF9vZmZzZXQsDQo+ID4+PiArCQkJKm91dF9sZW5ndGgsIG5l eHRfdHJpcGxldCwNCj4gPj4gQUNDMTAwX0RNQV9CTEtJRF9PVVRfRU5DKTsNCj4gPj4+ICsJaWYg KHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7DQo+ID4+PiArCQlydGVfYmJkZXZfbG9nKEVS UiwNCj4gPj4+ICsJCQkJIk1pc21hdGNoIGJldHdlZW4gZGF0YSB0byBwcm9jZXNzIGFuZA0KPiA+ PiBtYnVmIGRhdGEgbGVuZ3RoIGluIGJiZGV2X29wOiAlcCIsDQo+ID4+PiArCQkJCW9wKTsNCj4g Pj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwlvcC0+dHVyYm9fZW5jLm91dHB1 dC5sZW5ndGggKz0gKm91dF9sZW5ndGg7DQo+ID4+PiArCSpvdXRfb2Zmc2V0ICs9ICpvdXRfbGVu Z3RoOw0KPiA+Pj4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0IC0gMV0ubGFzdCA9IDE7 DQo+ID4+PiArCWRlc2MtPmQybWxlbiA9IG5leHRfdHJpcGxldCAtIGRlc2MtPm0yZGxlbjsNCj4g Pj4+ICsNCj4gPj4+ICsJZGVzYy0+b3BfYWRkciA9IG9wOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1 cm4gMDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIGlubGluZSBpbnQNCj4gPj4+ ICBhY2MxMDBfZG1hX2Rlc2NfbGVfZmlsbChzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqb3AsDQo+ ID4+PiAgCQlzdHJ1Y3QgYWNjMTAwX2RtYV9yZXFfZGVzYyAqZGVzYywgc3RydWN0IHJ0ZV9tYnVm ICoqaW5wdXQsDQo+ID4+PiAgCQlzdHJ1Y3QgcnRlX21idWYgKm91dHB1dCwgdWludDMyX3QgKmlu X29mZnNldCwgQEAgLTExMTAsNg0KPiA+PiArMTI5NSwxMTcNCj4gPj4+IEBAICB9DQo+ID4+Pg0K PiA+Pj4gIHN0YXRpYyBpbmxpbmUgaW50DQo+ID4+PiArYWNjMTAwX2RtYV9kZXNjX3RkX2ZpbGwo c3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLA0KPiA+Pj4gKwkJc3RydWN0IGFjYzEwMF9kbWFf cmVxX2Rlc2MgKmRlc2MsIHN0cnVjdCBydGVfbWJ1ZiAqKmlucHV0LA0KPiA+Pj4gKwkJc3RydWN0 IHJ0ZV9tYnVmICpoX291dHB1dCwgc3RydWN0IHJ0ZV9tYnVmICpzX291dHB1dCwNCj4gPj4+ICsJ CXVpbnQzMl90ICppbl9vZmZzZXQsIHVpbnQzMl90ICpoX291dF9vZmZzZXQsDQo+ID4+PiArCQl1 aW50MzJfdCAqc19vdXRfb2Zmc2V0LCB1aW50MzJfdCAqaF9vdXRfbGVuZ3RoLA0KPiA+Pj4gKwkJ dWludDMyX3QgKnNfb3V0X2xlbmd0aCwgdWludDMyX3QgKm1idWZfdG90YWxfbGVmdCwNCj4gPj4+ ICsJCXVpbnQzMl90ICpzZWdfdG90YWxfbGVmdCwgdWludDhfdCByKSB7DQo+ID4+PiArCWludCBu ZXh0X3RyaXBsZXQgPSAxOyAvKiBGQ1cgYWxyZWFkeSBkb25lICovDQo+ID4+PiArCXVpbnQxNl90 IGs7DQo+ID4+PiArCXVpbnQxNl90IGNyYzI0X292ZXJsYXAgPSAwOw0KPiA+Pj4gKwl1aW50MzJf dCBlLCBrdzsNCj4gPj4+ICsNCj4gPj4+ICsJZGVzYy0+d29yZDAgPSBBQ0MxMDBfRE1BX0RFU0Nf VFlQRTsNCj4gPj4+ICsJZGVzYy0+d29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBiZSBk aXNhYmxlZCAqLw0KPiA+Pj4gKwlkZXNjLT53b3JkMiA9IDA7DQo+ID4+PiArCWRlc2MtPndvcmQz ID0gMDsNCj4gPj4+ICsJZGVzYy0+bnVtQ0JzID0gMTsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKG9w LT50dXJib19kZWMuY29kZV9ibG9ja19tb2RlID09IDApIHsNCj4gPj4+ICsJCWsgPSAociA8IG9w LT50dXJib19kZWMudGJfcGFyYW1zLmNfbmVnKQ0KPiA+Pj4gKwkJCT8gb3AtPnR1cmJvX2RlYy50 Yl9wYXJhbXMua19uZWcNCj4gPj4+ICsJCQk6IG9wLT50dXJib19kZWMudGJfcGFyYW1zLmtfcG9z Ow0KPiA+Pj4gKwkJZSA9IChyIDwgb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMuY2FiKQ0KPiA+Pj4g KwkJCT8gb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMuZWENCj4gPj4+ICsJCQk6IG9wLT50dXJib19k ZWMudGJfcGFyYW1zLmViOw0KPiA+Pj4gKwl9IGVsc2Ugew0KPiA+Pj4gKwkJayA9IG9wLT50dXJi b19kZWMuY2JfcGFyYW1zLms7DQo+ID4+PiArCQllID0gb3AtPnR1cmJvX2RlYy5jYl9wYXJhbXMu ZTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAoKG9wLT50dXJib19kZWMuY29kZV9i bG9ja19tb2RlID09IDApDQo+ID4+PiArCQkmJiAhY2hlY2tfYml0KG9wLT50dXJib19kZWMub3Bf ZmxhZ3MsDQo+ID4+PiArCQlSVEVfQkJERVZfVFVSQk9fREVDX1RCX0NSQ18yNEJfS0VFUCkpDQo+ ID4+PiArCQljcmMyNF9vdmVybGFwID0gMjQ7DQo+ID4+PiArDQo+ID4+PiArCS8qIENhbGN1bGF0 ZXMgY2lyY3VsYXIgYnVmZmVyIHNpemUuDQo+ID4+PiArCSAqIEFjY29yZGluZyB0byAzZ3BwIDM2 LjIxMiBzZWN0aW9uIDUuMS40LjINCj4gPj4+ICsJICogICBLdyA9IDMgKiBLcGksDQo+ID4+PiAr CSAqIHdoZXJlOg0KPiA+Pj4gKwkgKiAgIEtwaSA9IG5Db2wgKiBuUm93DQo+ID4+PiArCSAqIHdo ZXJlIG5Db2wgaXMgMzIgYW5kIG5Sb3cgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbToNCj4gPj4+ICsJ ICogICBEID08IG5Db2wgKiBuUm93DQo+ID4+PiArCSAqIHdoZXJlIEQgaXMgdGhlIHNpemUgb2Yg ZWFjaCBvdXRwdXQgZnJvbSB0dXJibyBlbmNvZGVyIGJsb2NrIChrDQo+ID4+PiArKw0KPiA+PiA0 KS4NCj4gPj4+ICsJICovDQo+ID4+PiArCWt3ID0gUlRFX0FMSUdOX0NFSUwoayArIDQsIDMyKSAq IDM7DQo+ID4+PiArDQo+ID4+PiArCWlmICh1bmxpa2VseSgoKm1idWZfdG90YWxfbGVmdCA9PSAw KSB8fCAoKm1idWZfdG90YWxfbGVmdCA8IGt3KSkpIHsNCj4gPj4+ICsJCXJ0ZV9iYmRldl9sb2co RVJSLA0KPiA+Pj4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBtYnVmIGxlbmd0aCBhbmQNCj4gPj4g aW5jbHVkZWQgQ0Igc2l6ZXM6IG1idWYgbGVuICV1LCBjYiBsZW4gJXUiLA0KPiA+Pj4gKwkJCQkq bWJ1Zl90b3RhbF9sZWZ0LCBrdyk7DQo+ID4+PiArCQlyZXR1cm4gLTE7DQo+ID4+PiArCX0NCj4g Pj4+ICsNCj4gPj4+ICsJbmV4dF90cmlwbGV0ID0gYWNjMTAwX2RtYV9maWxsX2Jsa190eXBlX2lu KGRlc2MsIGlucHV0LCBpbl9vZmZzZXQsDQo+ID4+IGt3LA0KPiA+Pj4gKwkJCXNlZ190b3RhbF9s ZWZ0LCBuZXh0X3RyaXBsZXQpOw0KPiA+Pj4gKwlpZiAodW5saWtlbHkobmV4dF90cmlwbGV0IDwg MCkpIHsNCj4gPj4+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+Pj4gKwkJCQkiTWlzbWF0Y2gg YmV0d2VlbiBkYXRhIHRvIHByb2Nlc3MgYW5kDQo+ID4+IG1idWYgZGF0YSBsZW5ndGggaW4gYmJk ZXZfb3A6ICVwIiwNCj4gPj4+ICsJCQkJb3ApOw0KPiA+Pj4gKwkJcmV0dXJuIC0xOw0KPiA+Pj4g Kwl9DQo+ID4+PiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXQgLSAxXS5sYXN0ID0gMTsN Cj4gPj4+ICsJZGVzYy0+bTJkbGVuID0gbmV4dF90cmlwbGV0Ow0KPiA+Pj4gKwkqbWJ1Zl90b3Rh bF9sZWZ0IC09IGt3Ow0KPiA+Pj4gKw0KPiA+Pj4gKwluZXh0X3RyaXBsZXQgPSBhY2MxMDBfZG1h X2ZpbGxfYmxrX3R5cGVfb3V0KA0KPiA+Pj4gKwkJCWRlc2MsIGhfb3V0cHV0LCAqaF9vdXRfb2Zm c2V0LA0KPiA+Pj4gKwkJCWsgPj4gMywgbmV4dF90cmlwbGV0LA0KPiA+PiBBQ0MxMDBfRE1BX0JM S0lEX09VVF9IQVJEKTsNCj4gPj4+ICsJaWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7 DQo+ID4+PiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPj4+ICsJCQkJIk1pc21hdGNoIGJldHdl ZW4gZGF0YSB0byBwcm9jZXNzIGFuZA0KPiA+PiBtYnVmIGRhdGEgbGVuZ3RoIGluIGJiZGV2X29w OiAlcCIsDQo+ID4+PiArCQkJCW9wKTsNCj4gPj4+ICsJCXJldHVybiAtMTsNCj4gPj4+ICsJfQ0K PiA+Pj4gKw0KPiA+Pj4gKwkqaF9vdXRfbGVuZ3RoID0gKChrIC0gY3JjMjRfb3ZlcmxhcCkgPj4g Myk7DQo+ID4+PiArCW9wLT50dXJib19kZWMuaGFyZF9vdXRwdXQubGVuZ3RoICs9ICpoX291dF9s ZW5ndGg7DQo+ID4+PiArCSpoX291dF9vZmZzZXQgKz0gKmhfb3V0X2xlbmd0aDsNCj4gPj4+ICsN Cj4gPj4+ICsJLyogU29mdCBvdXRwdXQgKi8NCj4gPj4+ICsJaWYgKGNoZWNrX2JpdChvcC0+dHVy Ym9fZGVjLm9wX2ZsYWdzLA0KPiA+PiBSVEVfQkJERVZfVFVSQk9fU09GVF9PVVRQVVQpKSB7DQo+ ID4+PiArCQlpZiAoY2hlY2tfYml0KG9wLT50dXJib19kZWMub3BfZmxhZ3MsDQo+ID4+PiArCQkJ CVJURV9CQkRFVl9UVVJCT19FUVVBTElaRVIpKQ0KPiA+Pj4gKwkJCSpzX291dF9sZW5ndGggPSBl Ow0KPiA+Pj4gKwkJZWxzZQ0KPiA+Pj4gKwkJCSpzX291dF9sZW5ndGggPSAoayAqIDMpICsgMTI7 DQo+ID4+PiArDQo+ID4+PiArCQluZXh0X3RyaXBsZXQgPSBhY2MxMDBfZG1hX2ZpbGxfYmxrX3R5 cGVfb3V0KGRlc2MsIHNfb3V0cHV0LA0KPiA+Pj4gKwkJCQkqc19vdXRfb2Zmc2V0LCAqc19vdXRf bGVuZ3RoLCBuZXh0X3RyaXBsZXQsDQo+ID4+PiArCQkJCUFDQzEwMF9ETUFfQkxLSURfT1VUX1NP RlQpOw0KPiA+Pj4gKwkJaWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7DQo+ID4+PiAr CQkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4+PiArCQkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRh IHRvIHByb2Nlc3MNCj4gPj4gYW5kIG1idWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwN Cj4gPj4+ICsJCQkJCW9wKTsNCj4gPj4+ICsJCQlyZXR1cm4gLTE7DQo+ID4+PiArCQl9DQo+ID4+ PiArDQo+ID4+PiArCQlvcC0+dHVyYm9fZGVjLnNvZnRfb3V0cHV0Lmxlbmd0aCArPSAqc19vdXRf bGVuZ3RoOw0KPiA+Pj4gKwkJKnNfb3V0X29mZnNldCArPSAqc19vdXRfbGVuZ3RoOw0KPiA+Pj4g Kwl9DQo+ID4+PiArDQo+ID4+PiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXQgLSAxXS5s YXN0ID0gMTsNCj4gPj4+ICsJZGVzYy0+ZDJtbGVuID0gbmV4dF90cmlwbGV0IC0gZGVzYy0+bTJk bGVuOw0KPiA+Pj4gKw0KPiA+Pj4gKwlkZXNjLT5vcF9hZGRyID0gb3A7DQo+ID4+PiArDQo+ID4+ PiArCXJldHVybiAwOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgaW5saW5lIGlu dA0KPiA+Pj4gIGFjYzEwMF9kbWFfZGVzY19sZF9maWxsKHN0cnVjdCBydGVfYmJkZXZfZGVjX29w ICpvcCwNCj4gPj4+ICAJCXN0cnVjdCBhY2MxMDBfZG1hX3JlcV9kZXNjICpkZXNjLA0KPiA+Pj4g IAkJc3RydWN0IHJ0ZV9tYnVmICoqaW5wdXQsIHN0cnVjdCBydGVfbWJ1ZiAqaF9vdXRwdXQsIEBA IC0NCj4gPj4gMTM3NCw2DQo+ID4+PiArMTY3MCw1NyBAQA0KPiA+Pj4NCj4gPj4+ICAvKiBFbnF1 ZXVlIG9uZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRldmljZSBpbiBDQiBtb2RlICov DQo+ID4+PiBzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gK2VucXVldWVfZW5jX29uZV9vcF9jYihz dHJ1Y3QgYWNjMTAwX3F1ZXVlICpxLCBzdHJ1Y3QNCj4gPj4gcnRlX2JiZGV2X2VuY19vcCAqb3As DQo+ID4+PiArCQl1aW50MTZfdCB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4+PiArew0KPiA+Pj4g Kwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+Pj4gKwlpbnQgcmV0Ow0K PiA+Pj4gKwl1aW50MzJfdCBpbl9vZmZzZXQsIG91dF9vZmZzZXQsIG91dF9sZW5ndGgsIG1idWZf dG90YWxfbGVmdCwNCj4gPj4+ICsJCXNlZ190b3RhbF9sZWZ0Ow0KPiA+Pj4gKwlzdHJ1Y3QgcnRl X21idWYgKmlucHV0LCAqb3V0cHV0X2hlYWQsICpvdXRwdXQ7DQo+ID4+PiArDQo+ID4+PiArCXVp bnQxNl90IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMp DQo+ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiArCWRlc2MgPSBxLT5y aW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPj4+ICsJYWNjMTAwX2Zjd190ZV9maWxsKG9wLCAmZGVz Yy0+cmVxLmZjd190ZSk7DQo+ID4+PiArDQo+ID4+PiArCWlucHV0ID0gb3AtPnR1cmJvX2VuYy5p bnB1dC5kYXRhOw0KPiA+Pj4gKwlvdXRwdXRfaGVhZCA9IG91dHB1dCA9IG9wLT50dXJib19lbmMu b3V0cHV0LmRhdGE7DQo+ID4+PiArCWluX29mZnNldCA9IG9wLT50dXJib19lbmMuaW5wdXQub2Zm c2V0Ow0KPiA+Pj4gKwlvdXRfb2Zmc2V0ID0gb3AtPnR1cmJvX2VuYy5vdXRwdXQub2Zmc2V0Ow0K PiA+Pj4gKwlvdXRfbGVuZ3RoID0gMDsNCj4gPj4+ICsJbWJ1Zl90b3RhbF9sZWZ0ID0gb3AtPnR1 cmJvX2VuYy5pbnB1dC5sZW5ndGg7DQo+ID4+PiArCXNlZ190b3RhbF9sZWZ0ID0gcnRlX3BrdG1i dWZfZGF0YV9sZW4ob3AtPnR1cmJvX2VuYy5pbnB1dC5kYXRhKQ0KPiA+Pj4gKwkJCS0gaW5fb2Zm c2V0Ow0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXQgPSBhY2MxMDBfZG1hX2Rlc2NfdGVfZmlsbChvcCwg JmRlc2MtPnJlcSwgJmlucHV0LCBvdXRwdXQsDQo+ID4+PiArCQkJJmluX29mZnNldCwgJm91dF9v ZmZzZXQsICZvdXRfbGVuZ3RoLA0KPiA+PiAmbWJ1Zl90b3RhbF9sZWZ0LA0KPiA+Pj4gKwkJCSZz ZWdfdG90YWxfbGVmdCwgMCk7DQo+ID4+PiArDQo+ID4+PiArCWlmICh1bmxpa2VseShyZXQgPCAw KSkNCj4gPj4+ICsJCXJldHVybiByZXQ7DQo+ID4+PiArDQo+ID4+PiArCW1idWZfYXBwZW5kKG91 dHB1dF9oZWFkLCBvdXRwdXQsIG91dF9sZW5ndGgpOw0KPiA+Pj4gKw0KPiA+Pj4gKyNpZmRlZiBS VEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4+PiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIs ICZkZXNjLT5yZXEuZmN3X3RlLA0KPiA+Pj4gKwkJCXNpemVvZihkZXNjLT5yZXEuZmN3X3RlKSAt IDgpOw0KPiA+Pj4gKwlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXpl b2YoKmRlc2MpKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogQ2hlY2sgaWYgYW55IGRhdGEgbGVmdCBh ZnRlciBwcm9jZXNzaW5nIG9uZSBDQiAqLw0KPiA+Pj4gKwlpZiAobWJ1Zl90b3RhbF9sZWZ0ICE9 IDApIHsNCj4gPj4+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+Pj4gKwkJCQkiU29tZSBkYXRl IHN0aWxsIGxlZnQgYWZ0ZXIgcHJvY2Vzc2luZyBvbmUgQ0I6DQo+ID4+IG1idWZfdG90YWxfbGVm dCA9ICV1IiwNCj4gPj4+ICsJCQkJbWJ1Zl90b3RhbF9sZWZ0KTsNCj4gPj4+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+Pj4gKwl9DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArCS8qIE9uZSBDQiAob25l IG9wKSB3YXMgc3VjY2Vzc2Z1bGx5IHByZXBhcmVkIHRvIGVucXVldWUgKi8NCj4gPj4+ICsJcmV0 dXJuIDE7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qIEVucXVldWUgb25lIGVuY29kZSBv cGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4gPj4+ICtzdGF0aWMg aW5saW5lIGludA0KPiA+Pj4gIGVucXVldWVfbGRwY19lbmNfbl9vcF9jYihzdHJ1Y3QgYWNjMTAw X3F1ZXVlICpxLCBzdHJ1Y3QNCj4gPj4gcnRlX2JiZGV2X2VuY19vcCAqKm9wcywNCj4gPj4+ICAJ CXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgaW50MTZfdCBudW0pICB7IEBAIC0xNDgxLDc4 DQo+ID4+ICsxODI4LDIzNQ0KPiA+Pj4gQEANCj4gPj4+ICAJcmV0dXJuIDE7DQo+ID4+PiAgfQ0K PiA+Pj4NCj4gPj4+IC1zdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gLWhhcnFfbG9vcGJhY2soc3Ry dWN0IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLA0KPiA+Pj4g LQkJdWludDE2X3QgdG90YWxfZW5xdWV1ZWRfY2JzKSB7DQo+ID4+PiAtCXN0cnVjdCBhY2MxMDBf ZmN3X2xkICpmY3c7DQo+ID4+PiAtCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYzsNCj4gPj4+ IC0JaW50IG5leHRfdHJpcGxldCA9IDE7DQo+ID4+PiAtCXN0cnVjdCBydGVfbWJ1ZiAqaHFfb3V0 cHV0X2hlYWQsICpocV9vdXRwdXQ7DQo+ID4+PiAtCXVpbnQxNl90IGhhcnFfaW5fbGVuZ3RoID0g b3AtDQo+ID4+PiBsZHBjX2RlYy5oYXJxX2NvbWJpbmVkX2lucHV0Lmxlbmd0aDsNCj4gPj4+IC0J aWYgKGhhcnFfaW5fbGVuZ3RoID09IDApIHsNCj4gPj4+IC0JCXJ0ZV9iYmRldl9sb2coRVJSLCAi TG9vcGJhY2sgb2YgaW52YWxpZCBudWxsIHNpemVcbiIpOw0KPiA+Pj4gLQkJcmV0dXJuIC1FSU5W QUw7DQo+ID4+PiAtCX0NCj4gPj4+DQo+ID4+PiAtCWludCBoX2NvbXAgPSBjaGVja19iaXQob3At PmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+Pj4gLQkJCVJURV9CQkRFVl9MRFBDX0hBUlFfNkJJVF9D T01QUkVTU0lPTg0KPiA+Pj4gLQkJCSkgPyAxIDogMDsNCj4gPj4+IC0JaWYgKGhfY29tcCA9PSAx KQ0KPiA+Pj4gLQkJaGFycV9pbl9sZW5ndGggPSBoYXJxX2luX2xlbmd0aCAqIDggLyA2Ow0KPiA+ Pj4gLQloYXJxX2luX2xlbmd0aCA9IFJURV9BTElHTihoYXJxX2luX2xlbmd0aCwgNjQpOw0KPiA+ Pj4gLQl1aW50MTZfdCBoYXJxX2RtYV9sZW5ndGhfaW4gPSAoaF9jb21wID09IDApID8NCj4gPj4+ IC0JCQloYXJxX2luX2xlbmd0aCA6DQo+ID4+PiAtCQkJaGFycV9pbl9sZW5ndGggKiA2IC8gODsN Cj4gPj4+IC0JdWludDE2X3QgaGFycV9kbWFfbGVuZ3RoX291dCA9IGhhcnFfZG1hX2xlbmd0aF9p bjsNCj4gPj4+IC0JYm9vbCBkZHJfbWVtX2luID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9m bGFncywNCj4gPj4+IC0NCj4gPj4gCVJURV9CQkRFVl9MRFBDX0lOVEVSTkFMX0hBUlFfTUVNT1JZ X0lOX0VOQUJMRSk7DQo+ID4+PiAtCXVuaW9uIGFjYzEwMF9oYXJxX2xheW91dF9kYXRhICpoYXJx X2xheW91dCA9IHEtPmQtPmhhcnFfbGF5b3V0Ow0KPiA+Pj4gLQl1aW50MTZfdCBoYXJxX2luZGV4 ID0gKGRkcl9tZW1faW4gPw0KPiA+Pj4gLQkJCW9wLT5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX2lu cHV0Lm9mZnNldCA6DQo+ID4+PiAtCQkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0 Lm9mZnNldCkNCj4gPj4+IC0JCQkvIEFDQzEwMF9IQVJRX09GRlNFVDsNCj4gPj4+ICsvKiBFbnF1 ZXVlIG9uZSBlbmNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRldmljZSBpbiBUQiBtb2RlLiAq Lw0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGVucXVldWVfZW5jX29uZV9vcF90YihzdHJ1Y3Qg YWNjMTAwX3F1ZXVlICpxLA0KPiA+Pj4gK3N0cnVjdCBydGVfYmJkZXZfZW5jX29wICpvcCwNCj4g Pj4+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgdWludDhfdCBjYnNfaW5fdGIpIHsN Cj4gPj4+ICsJdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjID0gTlVMTDsNCj4gPj4+ICsJaW50 IHJldDsNCj4gPj4+ICsJdWludDhfdCByLCBjOw0KPiA+Pj4gKwl1aW50MzJfdCBpbl9vZmZzZXQs IG91dF9vZmZzZXQsIG91dF9sZW5ndGgsIG1idWZfdG90YWxfbGVmdCwNCj4gPj4+ICsJCXNlZ190 b3RhbF9sZWZ0Ow0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX21idWYgKmlucHV0LCAqb3V0cHV0X2hlYWQs ICpvdXRwdXQ7DQo+ID4+PiArCXVpbnQxNl90IGN1cnJlbnRfZW5xdWV1ZWRfY2JzID0gMDsNCj4g Pj4+DQo+ID4+PiAgCXVpbnQxNl90IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3Rh bF9lbnF1ZXVlZF9jYnMpDQo+ID4+PiAgCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+ PiAgCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPj4+IC0JZmN3ID0gJmRlc2Mt PnJlcS5mY3dfbGQ7DQo+ID4+PiAtCS8qIFNldCB0aGUgRkNXIGZyb20gbG9vcGJhY2sgaW50byBE RFIgKi8NCj4gPj4+IC0JbWVtc2V0KGZjdywgMCwgc2l6ZW9mKHN0cnVjdCBhY2MxMDBfZmN3X2xk KSk7DQo+ID4+PiAtCWZjdy0+RkNXdmVyc2lvbiA9IEFDQzEwMF9GQ1dfVkVSOw0KPiA+Pj4gLQlm Y3ctPnFtID0gMjsNCj4gPj4+IC0JZmN3LT5aYyA9IDM4NDsNCj4gPj4+IC0JaWYgKGhhcnFfaW5f bGVuZ3RoIDwgMTYgKiBOX1pDXzEpDQo+ID4+PiAtCQlmY3ctPlpjID0gMTY7DQo+ID4+PiAtCWZj dy0+bmNiID0gZmN3LT5aYyAqIE5fWkNfMTsNCj4gPj4+IC0JZmN3LT5ybV9lID0gMjsNCj4gPj4+ IC0JZmN3LT5oY2luX2VuID0gMTsNCj4gPj4+IC0JZmN3LT5oY291dF9lbiA9IDE7DQo+ID4+PiAr CXVpbnQ2NF90IGZjd19vZmZzZXQgPSAoZGVzY19pZHggPDwgOCkgKyBBQ0MxMDBfREVTQ19GQ1df T0ZGU0VUOw0KPiA+Pj4gKwlhY2MxMDBfZmN3X3RlX2ZpbGwob3AsICZkZXNjLT5yZXEuZmN3X3Rl KTsNCj4gPj4+DQo+ID4+PiAtCXJ0ZV9iYmRldl9sb2coREVCVUcsICJMb29wYmFjayBJTiAlZCBJ bmRleCAlZCBvZmZzZXQgJWQgbGVuZ3RoDQo+ID4+ICVkICVkXG4iLA0KPiA+Pj4gLQkJCWRkcl9t ZW1faW4sIGhhcnFfaW5kZXgsDQo+ID4+PiAtCQkJaGFycV9sYXlvdXRbaGFycV9pbmRleF0ub2Zm c2V0LCBoYXJxX2luX2xlbmd0aCwNCj4gPj4+IC0JCQloYXJxX2RtYV9sZW5ndGhfaW4pOw0KPiA+ Pj4gKwlpbnB1dCA9IG9wLT50dXJib19lbmMuaW5wdXQuZGF0YTsNCj4gPj4+ICsJb3V0cHV0X2hl YWQgPSBvdXRwdXQgPSBvcC0+dHVyYm9fZW5jLm91dHB1dC5kYXRhOw0KPiA+Pj4gKwlpbl9vZmZz ZXQgPSBvcC0+dHVyYm9fZW5jLmlucHV0Lm9mZnNldDsNCj4gPj4+ICsJb3V0X29mZnNldCA9IG9w LT50dXJib19lbmMub3V0cHV0Lm9mZnNldDsNCj4gPj4+ICsJb3V0X2xlbmd0aCA9IDA7DQo+ID4+ PiArCW1idWZfdG90YWxfbGVmdCA9IG9wLT50dXJib19lbmMuaW5wdXQubGVuZ3RoOw0KPiA+Pj4N Cj4gPj4+IC0JaWYgKGRkcl9tZW1faW4gJiYgKGhhcnFfbGF5b3V0W2hhcnFfaW5kZXhdLm9mZnNl dCA+IDApKSB7DQo+ID4+PiAtCQlmY3ctPmhjaW5fc2l6ZTAgPSBoYXJxX2xheW91dFtoYXJxX2lu ZGV4XS5zaXplMDsNCj4gPj4+IC0JCWZjdy0+aGNpbl9vZmZzZXQgPSBoYXJxX2xheW91dFtoYXJx X2luZGV4XS5vZmZzZXQ7DQo+ID4+PiAtCQlmY3ctPmhjaW5fc2l6ZTEgPSBoYXJxX2luX2xlbmd0 aCAtIGZjdy0+aGNpbl9vZmZzZXQ7DQo+ID4+PiAtCQloYXJxX2RtYV9sZW5ndGhfaW4gPSAoZmN3 LT5oY2luX3NpemUwICsgZmN3LT5oY2luX3NpemUxKTsNCj4gPj4+IC0JCWlmIChoX2NvbXAgPT0g MSkNCj4gPj4+IC0JCQloYXJxX2RtYV9sZW5ndGhfaW4gPSBoYXJxX2RtYV9sZW5ndGhfaW4gKiA2 IC8gODsNCj4gPj4+IC0JfSBlbHNlIHsNCj4gPj4+IC0JCWZjdy0+aGNpbl9zaXplMCA9IGhhcnFf aW5fbGVuZ3RoOw0KPiA+Pj4gLQl9DQo+ID4+PiAtCWhhcnFfbGF5b3V0W2hhcnFfaW5kZXhdLnZh bCA9IDA7DQo+ID4+PiAtCXJ0ZV9iYmRldl9sb2coREVCVUcsICJMb29wYmFjayBGQ1cgQ29uZmln ICVkICVkICVkXG4iLA0KPiA+Pj4gLQkJCWZjdy0+aGNpbl9zaXplMCwgZmN3LT5oY2luX29mZnNl dCwgZmN3LT5oY2luX3NpemUxKTsNCj4gPj4+IC0JZmN3LT5oY291dF9zaXplMCA9IGhhcnFfaW5f bGVuZ3RoOw0KPiA+Pj4gLQlmY3ctPmhjaW5fZGVjb21wX21vZGUgPSBoX2NvbXA7DQo+ID4+PiAt CWZjdy0+aGNvdXRfY29tcF9tb2RlID0gaF9jb21wOw0KPiA+Pj4gLQlmY3ctPmdhaW5faSA9IDE7 DQo+ID4+PiAtCWZjdy0+Z2Fpbl9oID0gMTsNCj4gPj4+ICsJYyA9IG9wLT50dXJib19lbmMudGJf cGFyYW1zLmM7DQo+ID4+PiArCXIgPSBvcC0+dHVyYm9fZW5jLnRiX3BhcmFtcy5yOw0KPiA+Pj4N Cj4gPj4+IC0JLyogU2V0IHRoZSBwcmVmaXggb2YgZGVzY3JpcHRvci4gVGhpcyBjb3VsZCBiZSBk b25lIGF0IHBvbGxpbmcgKi8NCj4gPj4+ICsJd2hpbGUgKG1idWZfdG90YWxfbGVmdCA+IDAgJiYg ciA8IGMpIHsNCj4gPj4+ICsJCXNlZ190b3RhbF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4o aW5wdXQpIC0gaW5fb2Zmc2V0Ow0KPiA+Pj4gKwkJLyogU2V0IHVwIERNQSBkZXNjcmlwdG9yICov DQo+ID4+PiArCQlkZXNjID0gcS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKw0KPiA+ PiB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4+PiArCQkJCSYgcS0+c3dfcmluZ193cmFwX21hc2sp Ow0KPiA+Pj4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1swXS5hZGRyZXNzID0gcS0+cmluZ19hZGRy X3BoeXMgKw0KPiA+PiBmY3dfb2Zmc2V0Ow0KPiA+Pj4gKwkJZGVzYy0+cmVxLmRhdGFfcHRyc1sw XS5ibGVuID0gQUNDMTAwX0ZDV19URV9CTEVOOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJcmV0ID0gYWNj MTAwX2RtYV9kZXNjX3RlX2ZpbGwob3AsICZkZXNjLT5yZXEsICZpbnB1dCwNCj4gPj4gb3V0cHV0 LA0KPiA+Pj4gKwkJCQkmaW5fb2Zmc2V0LCAmb3V0X29mZnNldCwgJm91dF9sZW5ndGgsDQo+ID4+ PiArCQkJCSZtYnVmX3RvdGFsX2xlZnQsICZzZWdfdG90YWxfbGVmdCwgcik7DQo+ID4+PiArCQlp ZiAodW5saWtlbHkocmV0IDwgMCkpDQo+ID4+PiArCQkJcmV0dXJuIHJldDsNCj4gPj4+ICsJCW1i dWZfYXBwZW5kKG91dHB1dF9oZWFkLCBvdXRwdXQsIG91dF9sZW5ndGgpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwkJLyogU2V0IHRvdGFsIG51bWJlciBvZiBDQnMgaW4gVEIgKi8NCj4gPj4+ICsJCWRlc2Mt PnJlcS5jYnNfaW5fdGIgPSBjYnNfaW5fdGI7DQo+ID4+PiArI2lmZGVmIFJURV9MSUJSVEVfQkJE RVZfREVCVUcNCj4gPj4+ICsJCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNjLT5yZXEu ZmN3X3RlLA0KPiA+Pj4gKwkJCQlzaXplb2YoZGVzYy0+cmVxLmZjd190ZSkgLSA4KTsNCj4gPj4+ ICsJCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykp Ow0KPiA+PiAjZW5kaWYNCj4gPj4+ICsNCj4gPj4+ICsJCWlmIChzZWdfdG90YWxfbGVmdCA9PSAw KSB7DQo+ID4+PiArCQkJLyogR28gdG8gdGhlIG5leHQgbWJ1ZiAqLw0KPiA+Pj4gKwkJCWlucHV0 ID0gaW5wdXQtPm5leHQ7DQo+ID4+PiArCQkJaW5fb2Zmc2V0ID0gMDsNCj4gPj4+ICsJCQlvdXRw dXQgPSBvdXRwdXQtPm5leHQ7DQo+ID4+PiArCQkJb3V0X29mZnNldCA9IDA7DQo+ID4+PiArCQl9 DQo+ID4+PiArDQo+ID4+PiArCQl0b3RhbF9lbnF1ZXVlZF9jYnMrKzsNCj4gPj4+ICsJCWN1cnJl bnRfZW5xdWV1ZWRfY2JzKys7DQo+ID4+PiArCQlyKys7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4g Pj4+ICsJaWYgKHVubGlrZWx5KGRlc2MgPT0gTlVMTCkpDQo+ID4+PiArCQlyZXR1cm4gY3VycmVu dF9lbnF1ZXVlZF9jYnM7DQo+ID4+PiArDQo+ID4+PiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZf REVCVUcNCj4gPj4+ICsJLyogQ2hlY2sgaWYgYW55IENCcyBsZWZ0IGZvciBwcm9jZXNzaW5nICov DQo+ID4+PiArCWlmIChtYnVmX3RvdGFsX2xlZnQgIT0gMCkgew0KPiA+Pj4gKwkJcnRlX2JiZGV2 X2xvZyhFUlIsDQo+ID4+PiArCQkJCSJTb21lIGRhdGUgc3RpbGwgbGVmdCBmb3IgcHJvY2Vzc2lu ZzoNCj4gPj4gbWJ1Zl90b3RhbF9sZWZ0ID0gJXUiLA0KPiA+Pj4gKwkJCQltYnVmX3RvdGFsX2xl ZnQpOw0KPiA+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+PiArCX0NCj4gPj4+ICsjZW5kaWYN Cj4gPj4+ICsNCj4gPj4+ICsJLyogU2V0IFNEb25lIG9uIGxhc3QgQ0IgZGVzY3JpcHRvciBmb3Ig VEIgbW9kZS4gKi8NCj4gPj4+ICsJZGVzYy0+cmVxLnNkb25lX2VuYWJsZSA9IDE7DQo+ID4+PiAr CWRlc2MtPnJlcS5pcnFfZW5hYmxlID0gcS0+aXJxX2VuYWJsZTsNCj4gPj4+ICsNCj4gPj4+ICsJ cmV0dXJuIGN1cnJlbnRfZW5xdWV1ZWRfY2JzOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsv KiogRW5xdWV1ZSBvbmUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UgaW4gQ0Ig bW9kZSAqLw0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGVucXVldWVfZGVjX29uZV9vcF9jYihz dHJ1Y3QgYWNjMTAwX3F1ZXVlICpxLA0KPiA+Pj4gK3N0cnVjdCBydGVfYmJkZXZfZGVjX29wICpv cCwNCj4gPj4+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicykNCj4gPj4+ICt7DQo+ID4+ PiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYyA9IE5VTEw7DQo+ID4+PiArCWludCByZXQ7 DQo+ID4+PiArCXVpbnQzMl90IGluX29mZnNldCwgaF9vdXRfb2Zmc2V0LCBzX291dF9vZmZzZXQs IHNfb3V0X2xlbmd0aCwNCj4gPj4+ICsJCWhfb3V0X2xlbmd0aCwgbWJ1Zl90b3RhbF9sZWZ0LCBz ZWdfdG90YWxfbGVmdDsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9tYnVmICppbnB1dCwgKmhfb3V0cHV0 X2hlYWQsICpoX291dHB1dCwNCj4gPj4+ICsJCSpzX291dHB1dF9oZWFkLCAqc19vdXRwdXQ7DQo+ ID4+PiArDQo+ID4+PiArCXVpbnQxNl90IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0 b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ ID4+PiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPj4+ICsJYWNjMTAwX2Zj d190ZF9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd190ZCk7DQo+ID4+PiArDQo+ID4+PiArCWlucHV0 ID0gb3AtPnR1cmJvX2RlYy5pbnB1dC5kYXRhOw0KPiA+Pj4gKwloX291dHB1dF9oZWFkID0gaF9v dXRwdXQgPSBvcC0+dHVyYm9fZGVjLmhhcmRfb3V0cHV0LmRhdGE7DQo+ID4+PiArCXNfb3V0cHV0 X2hlYWQgPSBzX291dHB1dCA9IG9wLT50dXJib19kZWMuc29mdF9vdXRwdXQuZGF0YTsNCj4gPj4+ ICsJaW5fb2Zmc2V0ID0gb3AtPnR1cmJvX2RlYy5pbnB1dC5vZmZzZXQ7DQo+ID4+PiArCWhfb3V0 X29mZnNldCA9IG9wLT50dXJib19kZWMuaGFyZF9vdXRwdXQub2Zmc2V0Ow0KPiA+Pj4gKwlzX291 dF9vZmZzZXQgPSBvcC0+dHVyYm9fZGVjLnNvZnRfb3V0cHV0Lm9mZnNldDsNCj4gPj4+ICsJaF9v dXRfbGVuZ3RoID0gc19vdXRfbGVuZ3RoID0gMDsNCj4gPj4+ICsJbWJ1Zl90b3RhbF9sZWZ0ID0g b3AtPnR1cmJvX2RlYy5pbnB1dC5sZW5ndGg7DQo+ID4+PiArCXNlZ190b3RhbF9sZWZ0ID0gcnRl X3BrdG1idWZfZGF0YV9sZW4oaW5wdXQpIC0gaW5fb2Zmc2V0Ow0KPiA+Pj4gKw0KPiA+Pj4gKyNp ZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4+PiArCWlmICh1bmxpa2VseShpbnB1dCA9 PSBOVUxMKSkgew0KPiA+Pj4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsICJJbnZhbGlkIG1idWYgcG9p bnRlciIpOw0KPiA+Pj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4+PiArCX0NCj4gPj4+ICsjZW5k aWYNCj4gPj4+ICsNCj4gPj4+ICsJLyogU2V0IHVwIERNQSBkZXNjcmlwdG9yICovDQo+ID4+PiAr CWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfaGVhZCArIHRvdGFsX2VucXVldWVk X2NicykNCj4gPj4+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPj4+ICsNCj4gPj4+ ICsJcmV0ID0gYWNjMTAwX2RtYV9kZXNjX3RkX2ZpbGwob3AsICZkZXNjLT5yZXEsICZpbnB1dCwg aF9vdXRwdXQsDQo+ID4+PiArCQkJc19vdXRwdXQsICZpbl9vZmZzZXQsICZoX291dF9vZmZzZXQs ICZzX291dF9vZmZzZXQsDQo+ID4+PiArCQkJJmhfb3V0X2xlbmd0aCwgJnNfb3V0X2xlbmd0aCwg Jm1idWZfdG90YWxfbGVmdCwNCj4gPj4+ICsJCQkmc2VnX3RvdGFsX2xlZnQsIDApOw0KPiA+Pj4g Kw0KPiA+Pj4gKwlpZiAodW5saWtlbHkocmV0IDwgMCkpDQo+ID4+PiArCQlyZXR1cm4gcmV0Ow0K PiA+Pj4gKw0KPiA+Pj4gKwkvKiBIYXJkIG91dHB1dCAqLw0KPiA+Pj4gKwltYnVmX2FwcGVuZCho X291dHB1dF9oZWFkLCBoX291dHB1dCwgaF9vdXRfbGVuZ3RoKTsNCj4gPj4+ICsNCj4gPj4+ICsJ LyogU29mdCBvdXRwdXQgKi8NCj4gPj4+ICsJaWYgKGNoZWNrX2JpdChvcC0+dHVyYm9fZGVjLm9w X2ZsYWdzLA0KPiA+PiBSVEVfQkJERVZfVFVSQk9fU09GVF9PVVRQVVQpKQ0KPiA+Pj4gKwkJbWJ1 Zl9hcHBlbmQoc19vdXRwdXRfaGVhZCwgc19vdXRwdXQsIHNfb3V0X2xlbmd0aCk7DQo+ID4+PiAr DQo+ID4+PiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPj4+ICsJcnRlX21lbWR1 bXAoc3RkZXJyLCAiRkNXIiwgJmRlc2MtPnJlcS5mY3dfdGQsDQo+ID4+PiArCQkJc2l6ZW9mKGRl c2MtPnJlcS5mY3dfdGQpIC0gOCk7DQo+ID4+PiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBE ZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDaGVjayBp ZiBhbnkgQ0JzIGxlZnQgZm9yIHByb2Nlc3NpbmcgKi8NCj4gPj4+ICsJaWYgKG1idWZfdG90YWxf bGVmdCAhPSAwKSB7DQo+ID4+PiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPj4+ICsJCQkJIlNv bWUgZGF0ZSBzdGlsbCBsZWZ0IGFmdGVyIHByb2Nlc3Npbmcgb25lIENCOg0KPiA+PiBtYnVmX3Rv dGFsX2xlZnQgPSAldSIsDQo+ID4+PiArCQkJCW1idWZfdG90YWxfbGVmdCk7DQo+ID4+PiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKyNlbmRpZg0KPiA+PiBsb2dpYyBzaW1p bGFyIHRvIGRlYnVnIGluIG1idWZfYXBwZW5kLCBzaG91bGQgYmUgYSBjb21tb24gZnVuY3Rpb24u DQo+ID4gTm90IGV4YWN0bHkgZXhjZXB0IGlmIEkgbWlzcyB5b3VyIHBvaW50Lg0KPiANCj4gSSBs b29rIGZvciBjb2RlIGJsb2NrcyB0aGF0IGxvb2sgc2ltaWxhciBhbmQgd2FudCB5b3UgdG8gY29u c2lkZXIgaWYgdGhleSBjYW4NCj4gYmUgY29tYmluZWQNCj4gDQo+IGludG8gYSBnZW5lcmFsIGZ1 bmN0aW9uIG9yIG1hY3JvLiAgQSBnZW5lcmFsIGZ1bmN0aW9uIGlzIGVhc2llciB0byBtYWludGFp bi4gSW4NCj4gdGhpcyBjYXNlLA0KPiANCj4gaXQgc2VlbXMgbGlrZSBsb2dnaW5nIG9mIHNvbWV0 aGluZyBpcyB3cm9uZyB3aXRoIG1idWYgaXMgc2ltaWxhciB0byBhbiBlYXJsaWVyDQo+IGJsb2Nr IG9mIGNvZGUuDQo+IA0KPiBOb3RoaW5nIGlzIGZ1bmN0aW9uYWxseSB3cm9uZy4NCg0KRm9yIHRo YXQgdmVyeSBleGFtcGxlIEkgY2FuIGFkZCBhIGNvbW1vbiBlcnJvciB0cmFwLg0KTm90IHRvdGFs bHkgY29udmluY2VkIG9mIHRoZSB2YWx1ZSBhbmQgdGhpcyBwcmV2ZW50cyB1c2luZyAlcywgX19m dW5jX18sIGJ1dCBvay4gDQoNCj4gDQo+ID4NCj4gPj4+ICsNCj4gPj4+ICsJLyogT25lIENCIChv bmUgb3ApIHdhcyBzdWNjZXNzZnVsbHkgcHJlcGFyZWQgdG8gZW5xdWV1ZSAqLw0KPiA+Pj4gKwly ZXR1cm4gMTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIGlubGluZSBpbnQNCj4g Pj4+ICtoYXJxX2xvb3BiYWNrKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsIHN0cnVjdCBydGVfYmJk ZXZfZGVjX29wICpvcCwNCj4gPj4+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2Nicykgew0K PiA+Pj4gKwlzdHJ1Y3QgYWNjMTAwX2Zjd19sZCAqZmN3Ow0KPiA+Pj4gKwl1bmlvbiBhY2MxMDBf ZG1hX2Rlc2MgKmRlc2M7DQo+ID4+PiArCWludCBuZXh0X3RyaXBsZXQgPSAxOw0KPiA+Pj4gKwlz dHJ1Y3QgcnRlX21idWYgKmhxX291dHB1dF9oZWFkLCAqaHFfb3V0cHV0Ow0KPiA+Pj4gKwl1aW50 MTZfdCBoYXJxX2luX2xlbmd0aCA9IG9wLQ0KPiA+Pj4gbGRwY19kZWMuaGFycV9jb21iaW5lZF9p bnB1dC5sZW5ndGg7DQo+ID4+PiArCWlmIChoYXJxX2luX2xlbmd0aCA9PSAwKSB7DQo+ID4+PiAr CQlydGVfYmJkZXZfbG9nKEVSUiwgIkxvb3BiYWNrIG9mIGludmFsaWQgbnVsbCBzaXplXG4iKTsN Cj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWlu dCBoX2NvbXAgPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+Pj4gKwkJCVJU RV9CQkRFVl9MRFBDX0hBUlFfNkJJVF9DT01QUkVTU0lPTg0KPiA+Pj4gKwkJCSkgPyAxIDogMDsN Cj4gPj4+ICsJaWYgKGhfY29tcCA9PSAxKQ0KPiA+Pj4gKwkJaGFycV9pbl9sZW5ndGggPSBoYXJx X2luX2xlbmd0aCAqIDggLyA2Ow0KPiA+Pj4gKwloYXJxX2luX2xlbmd0aCA9IFJURV9BTElHTiho YXJxX2luX2xlbmd0aCwgNjQpOw0KPiA+Pj4gKwl1aW50MTZfdCBoYXJxX2RtYV9sZW5ndGhfaW4g PSAoaF9jb21wID09IDApID8NCj4gPj4gQ2FuIHRoZXNlIGhfY29tcCBjaGVja3MgYmUgY29tYmlu ZWQgdG8gYSBzaW5nbGUgaWYvZWxzZSA/DQo+ID4gaXQgbWF5IGJlIGNsZWFyZXIsIG9rLg0KPiA+ DQo+ID4NCj4gPj4+ICsJCQloYXJxX2luX2xlbmd0aCA6DQo+ID4+PiArCQkJaGFycV9pbl9sZW5n dGggKiA2IC8gODsNCj4gPj4+ICsJdWludDE2X3QgaGFycV9kbWFfbGVuZ3RoX291dCA9IGhhcnFf ZG1hX2xlbmd0aF9pbjsNCj4gPj4+ICsJYm9vbCBkZHJfbWVtX2luID0gY2hlY2tfYml0KG9wLT5s ZHBjX2RlYy5vcF9mbGFncywNCj4gPj4+ICsNCj4gPj4gCVJURV9CQkRFVl9MRFBDX0lOVEVSTkFM X0hBUlFfTUVNT1JZX0lOX0VOQUJMRSk7DQo+ID4+PiArCXVuaW9uIGFjYzEwMF9oYXJxX2xheW91 dF9kYXRhICpoYXJxX2xheW91dCA9IHEtPmQtPmhhcnFfbGF5b3V0Ow0KPiA+Pj4gKwl1aW50MTZf dCBoYXJxX2luZGV4ID0gKGRkcl9tZW1faW4gPw0KPiA+Pj4gKwkJCW9wLT5sZHBjX2RlYy5oYXJx X2NvbWJpbmVkX2lucHV0Lm9mZnNldCA6DQo+ID4+PiArCQkJb3AtPmxkcGNfZGVjLmhhcnFfY29t YmluZWRfb3V0cHV0Lm9mZnNldCkNCj4gPj4+ICsJCQkvIEFDQzEwMF9IQVJRX09GRlNFVDsNCj4g Pj4+ICsNCj4gPj4+ICsJdWludDE2X3QgZGVzY19pZHggPSAoKHEtPnN3X3JpbmdfaGVhZCArIHRv dGFsX2VucXVldWVkX2NicykNCj4gPj4+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4g Pj4+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArIGRlc2NfaWR4Ow0KPiA+Pj4gKwlmY3cgPSAmZGVz Yy0+cmVxLmZjd19sZDsNCj4gPj4+ICsJLyogU2V0IHRoZSBGQ1cgZnJvbSBsb29wYmFjayBpbnRv IEREUiAqLw0KPiA+Pj4gKwltZW1zZXQoZmN3LCAwLCBzaXplb2Yoc3RydWN0IGFjYzEwMF9mY3df bGQpKTsNCj4gPj4+ICsJZmN3LT5GQ1d2ZXJzaW9uID0gQUNDMTAwX0ZDV19WRVI7DQo+ID4+PiAr CWZjdy0+cW0gPSAyOw0KPiA+Pj4gKwlmY3ctPlpjID0gMzg0Ow0KPiA+PiB0aGVzZSBtYWdpYyBu dW1iZXJzIHNob3VsZCBoYXZlICNkZWZpbmVzDQo+ID4gVGhlc2UgYXJlIG5vdCBtYWdpYyBudW1i ZXJzLCBidXQgYWN0dWFsbHkgM0dQUCB2YWx1ZXMNCj4gb2sNCj4gPg0KPiA+Pj4gKwlpZiAoaGFy cV9pbl9sZW5ndGggPCAxNiAqIE5fWkNfMSkNCj4gPj4+ICsJCWZjdy0+WmMgPSAxNjsNCj4gPj4+ ICsJZmN3LT5uY2IgPSBmY3ctPlpjICogTl9aQ18xOw0KPiA+Pj4gKwlmY3ctPnJtX2UgPSAyOw0K PiA+Pj4gKwlmY3ctPmhjaW5fZW4gPSAxOw0KPiA+Pj4gKwlmY3ctPmhjb3V0X2VuID0gMTsNCj4g Pj4+ICsNCj4gPj4+ICsJcnRlX2JiZGV2X2xvZyhERUJVRywgIkxvb3BiYWNrIElOICVkIEluZGV4 ICVkIG9mZnNldCAlZCBsZW5ndGgNCj4gPj4gJWQgJWRcbiIsDQo+ID4+PiArCQkJZGRyX21lbV9p biwgaGFycV9pbmRleCwNCj4gPj4+ICsJCQloYXJxX2xheW91dFtoYXJxX2luZGV4XS5vZmZzZXQs IGhhcnFfaW5fbGVuZ3RoLA0KPiA+Pj4gKwkJCWhhcnFfZG1hX2xlbmd0aF9pbik7DQo+ID4+PiAr DQo+ID4+PiArCWlmIChkZHJfbWVtX2luICYmIChoYXJxX2xheW91dFtoYXJxX2luZGV4XS5vZmZz ZXQgPiAwKSkgew0KPiA+Pj4gKwkJZmN3LT5oY2luX3NpemUwID0gaGFycV9sYXlvdXRbaGFycV9p bmRleF0uc2l6ZTA7DQo+ID4+PiArCQlmY3ctPmhjaW5fb2Zmc2V0ID0gaGFycV9sYXlvdXRbaGFy cV9pbmRleF0ub2Zmc2V0Ow0KPiA+Pj4gKwkJZmN3LT5oY2luX3NpemUxID0gaGFycV9pbl9sZW5n dGggLSBmY3ctPmhjaW5fb2Zmc2V0Ow0KPiA+Pj4gKwkJaGFycV9kbWFfbGVuZ3RoX2luID0gKGZj dy0+aGNpbl9zaXplMCArIGZjdy0+aGNpbl9zaXplMSk7DQo+ID4+PiArCQlpZiAoaF9jb21wID09 IDEpDQo+ID4+PiArCQkJaGFycV9kbWFfbGVuZ3RoX2luID0gaGFycV9kbWFfbGVuZ3RoX2luICog NiAvIDg7DQo+ID4+PiArCX0gZWxzZSB7DQo+ID4+PiArCQlmY3ctPmhjaW5fc2l6ZTAgPSBoYXJx X2luX2xlbmd0aDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwloYXJxX2xheW91dFtoYXJxX2luZGV4XS52 YWwgPSAwOw0KPiA+Pj4gKwlydGVfYmJkZXZfbG9nKERFQlVHLCAiTG9vcGJhY2sgRkNXIENvbmZp ZyAlZCAlZCAlZFxuIiwNCj4gPj4+ICsJCQlmY3ctPmhjaW5fc2l6ZTAsIGZjdy0+aGNpbl9vZmZz ZXQsIGZjdy0+aGNpbl9zaXplMSk7DQo+ID4+PiArCWZjdy0+aGNvdXRfc2l6ZTAgPSBoYXJxX2lu X2xlbmd0aDsNCj4gPj4+ICsJZmN3LT5oY2luX2RlY29tcF9tb2RlID0gaF9jb21wOw0KPiA+Pj4g KwlmY3ctPmhjb3V0X2NvbXBfbW9kZSA9IGhfY29tcDsNCj4gPj4+ICsJZmN3LT5nYWluX2kgPSAx Ow0KPiA+Pj4gKwlmY3ctPmdhaW5faCA9IDE7DQo+ID4+PiArDQo+ID4+PiArCS8qIFNldCB0aGUg cHJlZml4IG9mIGRlc2NyaXB0b3IuIFRoaXMgY291bGQgYmUgZG9uZSBhdCBwb2xsaW5nICovDQo+ ID4+PiAgCWRlc2MtPnJlcS53b3JkMCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+Pj4gIAlk ZXNjLT5yZXEud29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBiZSBkaXNhYmxlZCAqLw0K PiA+Pj4gIAlkZXNjLT5yZXEud29yZDIgPSAwOw0KPiA+Pj4gQEAgLTE4MTYsNiArMjMyMCwxMDcg QEANCj4gPj4+ICAJcmV0dXJuIGN1cnJlbnRfZW5xdWV1ZWRfY2JzOw0KPiA+Pj4gIH0NCj4gPj4+ DQo+ID4+PiArLyogRW5xdWV1ZSBvbmUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZp Y2UgaW4gVEIgbW9kZSAqLw0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGVucXVldWVfZGVjX29u ZV9vcF90YihzdHJ1Y3QgYWNjMTAwX3F1ZXVlICpxLA0KPiA+Pj4gK3N0cnVjdCBydGVfYmJkZXZf ZGVjX29wICpvcCwNCj4gPj4+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgdWludDhf dCBjYnNfaW5fdGIpIHsNCj4gPj4+ICsJdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjID0gTlVM TDsNCj4gPj4+ICsJaW50IHJldDsNCj4gPj4+ICsJdWludDhfdCByLCBjOw0KPiA+Pj4gKwl1aW50 MzJfdCBpbl9vZmZzZXQsIGhfb3V0X29mZnNldCwgc19vdXRfb2Zmc2V0LCBzX291dF9sZW5ndGgs DQo+ID4+PiArCQloX291dF9sZW5ndGgsIG1idWZfdG90YWxfbGVmdCwgc2VnX3RvdGFsX2xlZnQ7 DQo+ID4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqaW5wdXQsICpoX291dHB1dF9oZWFkLCAqaF9vdXRw dXQsDQo+ID4+PiArCQkqc19vdXRwdXRfaGVhZCwgKnNfb3V0cHV0Ow0KPiA+Pj4gKwl1aW50MTZf dCBjdXJyZW50X2VucXVldWVkX2NicyA9IDA7DQo+ID4+PiArDQo+ID4+PiArCXVpbnQxNl90IGRl c2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4+PiAr CQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiArCWRlc2MgPSBxLT5yaW5nX2FkZHIg KyBkZXNjX2lkeDsNCj4gPj4+ICsJdWludDY0X3QgZmN3X29mZnNldCA9IChkZXNjX2lkeCA8PCA4 KSArIEFDQzEwMF9ERVNDX0ZDV19PRkZTRVQ7DQo+ID4+PiArCWFjYzEwMF9mY3dfdGRfZmlsbChv cCwgJmRlc2MtPnJlcS5mY3dfdGQpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpbnB1dCA9IG9wLT50dXJi b19kZWMuaW5wdXQuZGF0YTsNCj4gPj4+ICsJaF9vdXRwdXRfaGVhZCA9IGhfb3V0cHV0ID0gb3At PnR1cmJvX2RlYy5oYXJkX291dHB1dC5kYXRhOw0KPiA+Pj4gKwlzX291dHB1dF9oZWFkID0gc19v dXRwdXQgPSBvcC0+dHVyYm9fZGVjLnNvZnRfb3V0cHV0LmRhdGE7DQo+ID4+PiArCWluX29mZnNl dCA9IG9wLT50dXJib19kZWMuaW5wdXQub2Zmc2V0Ow0KPiA+Pj4gKwloX291dF9vZmZzZXQgPSBv cC0+dHVyYm9fZGVjLmhhcmRfb3V0cHV0Lm9mZnNldDsNCj4gPj4+ICsJc19vdXRfb2Zmc2V0ID0g b3AtPnR1cmJvX2RlYy5zb2Z0X291dHB1dC5vZmZzZXQ7DQo+ID4+PiArCWhfb3V0X2xlbmd0aCA9 IHNfb3V0X2xlbmd0aCA9IDA7DQo+ID4+PiArCW1idWZfdG90YWxfbGVmdCA9IG9wLT50dXJib19k ZWMuaW5wdXQubGVuZ3RoOw0KPiA+Pj4gKwljID0gb3AtPnR1cmJvX2RlYy50Yl9wYXJhbXMuYzsN Cj4gPj4+ICsJciA9IG9wLT50dXJib19kZWMudGJfcGFyYW1zLnI7DQo+ID4+PiArDQo+ID4+PiAr CXdoaWxlIChtYnVmX3RvdGFsX2xlZnQgPiAwICYmIHIgPCBjKSB7DQo+ID4+PiArDQo+ID4+PiAr CQlzZWdfdG90YWxfbGVmdCA9IHJ0ZV9wa3RtYnVmX2RhdGFfbGVuKGlucHV0KSAtIGluX29mZnNl dDsNCj4gPj4+ICsNCj4gPj4+ICsJCS8qIFNldCB1cCBETUEgZGVzY3JpcHRvciAqLw0KPiA+Pj4g KwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ19oZWFkICsNCj4gPj4gdG90YWxf ZW5xdWV1ZWRfY2JzKQ0KPiA+Pj4gKwkJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPj4+ ICsJCWRlc2MtPnJlcS5kYXRhX3B0cnNbMF0uYWRkcmVzcyA9IHEtPnJpbmdfYWRkcl9waHlzICsN Cj4gPj4gZmN3X29mZnNldDsNCj4gPj4+ICsJCWRlc2MtPnJlcS5kYXRhX3B0cnNbMF0uYmxlbiA9 IEFDQzEwMF9GQ1dfVERfQkxFTjsNCj4gPj4+ICsJCXJldCA9IGFjYzEwMF9kbWFfZGVzY190ZF9m aWxsKG9wLCAmZGVzYy0+cmVxLCAmaW5wdXQsDQo+ID4+PiArCQkJCWhfb3V0cHV0LCBzX291dHB1 dCwgJmluX29mZnNldCwNCj4gPj4gJmhfb3V0X29mZnNldCwNCj4gPj4+ICsJCQkJJnNfb3V0X29m ZnNldCwgJmhfb3V0X2xlbmd0aCwNCj4gPj4gJnNfb3V0X2xlbmd0aCwNCj4gPj4+ICsJCQkJJm1i dWZfdG90YWxfbGVmdCwgJnNlZ190b3RhbF9sZWZ0LCByKTsNCj4gPj4+ICsNCj4gPj4+ICsJCWlm ICh1bmxpa2VseShyZXQgPCAwKSkNCj4gPj4+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+Pj4gKw0KPiA+ Pj4gKwkJLyogSGFyZCBvdXRwdXQgKi8NCj4gPj4+ICsJCW1idWZfYXBwZW5kKGhfb3V0cHV0X2hl YWQsIGhfb3V0cHV0LCBoX291dF9sZW5ndGgpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJLyogU29mdCBv dXRwdXQgKi8NCj4gPj4+ICsJCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9mbGFncywN Cj4gPj4+ICsJCQkJUlRFX0JCREVWX1RVUkJPX1NPRlRfT1VUUFVUKSkNCj4gPj4+ICsJCQltYnVm X2FwcGVuZChzX291dHB1dF9oZWFkLCBzX291dHB1dCwNCj4gPj4gc19vdXRfbGVuZ3RoKTsNCj4g Pj4+ICsNCj4gPj4+ICsJCS8qIFNldCB0b3RhbCBudW1iZXIgb2YgQ0JzIGluIFRCICovDQo+ID4+ PiArCQlkZXNjLT5yZXEuY2JzX2luX3RiID0gY2JzX2luX3RiOw0KPiA+Pj4gKyNpZmRlZiBSVEVf TElCUlRFX0JCREVWX0RFQlVHDQo+ID4+PiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJGQ1ciLCAm ZGVzYy0+cmVxLmZjd190ZCwNCj4gPj4+ICsJCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3dfdGQpIC0g OCk7DQo+ID4+PiArCQlydGVfbWVtZHVtcChzdGRlcnIsICJSZXEgRGVzYy4iLCBkZXNjLCBzaXpl b2YoKmRlc2MpKTsNCj4gPj4gI2VuZGlmDQo+ID4+PiArDQo+ID4+PiArCQlpZiAoc2VnX3RvdGFs X2xlZnQgPT0gMCkgew0KPiA+Pj4gKwkJCS8qIEdvIHRvIHRoZSBuZXh0IG1idWYgKi8NCj4gPj4+ ICsJCQlpbnB1dCA9IGlucHV0LT5uZXh0Ow0KPiA+Pj4gKwkJCWluX29mZnNldCA9IDA7DQo+ID4+ PiArCQkJaF9vdXRwdXQgPSBoX291dHB1dC0+bmV4dDsNCj4gPj4+ICsJCQloX291dF9vZmZzZXQg PSAwOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJCWlmIChjaGVja19iaXQob3AtPnR1cmJvX2RlYy5vcF9m bGFncywNCj4gPj4+ICsJCQkJCVJURV9CQkRFVl9UVVJCT19TT0ZUX09VVFBVVCkpDQo+ID4+IHsN Cj4gPj4+ICsJCQkJc19vdXRwdXQgPSBzX291dHB1dC0+bmV4dDsNCj4gPj4+ICsJCQkJc19vdXRf b2Zmc2V0ID0gMDsNCj4gPj4+ICsJCQl9DQo+ID4+PiArCQl9DQo+ID4+PiArDQo+ID4+PiArCQl0 b3RhbF9lbnF1ZXVlZF9jYnMrKzsNCj4gPj4+ICsJCWN1cnJlbnRfZW5xdWV1ZWRfY2JzKys7DQo+ ID4+PiArCQlyKys7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHVubGlrZWx5KGRl c2MgPT0gTlVMTCkpDQo+ID4+PiArCQlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ID4+ PiArDQo+ID4+PiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPj4+ICsJLyogQ2hl Y2sgaWYgYW55IENCcyBsZWZ0IGZvciBwcm9jZXNzaW5nICovDQo+ID4+PiArCWlmIChtYnVmX3Rv dGFsX2xlZnQgIT0gMCkgew0KPiA+Pj4gKwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4+PiArCQkJ CSJTb21lIGRhdGUgc3RpbGwgbGVmdCBmb3IgcHJvY2Vzc2luZzoNCj4gPj4gbWJ1Zl90b3RhbF9s ZWZ0ID0gJXUiLA0KPiA+Pj4gKwkJCQltYnVmX3RvdGFsX2xlZnQpOw0KPiA+Pj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4+PiArCX0NCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICsJLyogU2V0IFNEb25l IG9uIGxhc3QgQ0IgZGVzY3JpcHRvciBmb3IgVEIgbW9kZSAqLw0KPiA+Pj4gKwlkZXNjLT5yZXEu c2RvbmVfZW5hYmxlID0gMTsNCj4gPj4+ICsJZGVzYy0+cmVxLmlycV9lbmFibGUgPSBxLT5pcnFf ZW5hYmxlOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ ID4+PiArfQ0KPiA+Pj4NCj4gPj4+ICAvKiBDYWxjdWxhdGVzIG51bWJlciBvZiBDQnMgaW4gcHJv Y2Vzc2VkIGVuY29kZXIgVEIgYmFzZWQgb24gJ3InDQo+ID4+PiBhbmQNCj4gPj4gaW5wdXQNCj4g Pj4+ICAgKiBsZW5ndGguDQo+ID4+PiBAQCAtMTg5Myw2ICsyNDk4LDQ1IEBADQo+ID4+PiAgCXJl dHVybiBjYnNfaW5fdGI7DQo+ID4+PiAgfQ0KPiA+Pj4NCj4gPj4+ICsvKiBFbnF1ZXVlIGVuY29k ZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIENCIG1vZGUuICovDQo+ID4+PiArc3Rh dGljIHVpbnQxNl90IGFjYzEwMF9lbnF1ZXVlX2VuY19jYihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVl X2RhdGENCj4gPj4gKnFfZGF0YSwNCj4gPj4+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICoq b3BzLCB1aW50MTZfdCBudW0pIHsNCj4gPj4+ICsJc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSA9IHFf ZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPj4+ICsJaW50MzJfdCBhdmFpbCA9IHEtPnN3X3Jpbmdf ZGVwdGggKyBxLT5zd19yaW5nX3RhaWwgLSBxLQ0KPiA+Pj4gc3dfcmluZ19oZWFkOw0KPiA+Pj4g Kwl1aW50MTZfdCBpOw0KPiA+Pj4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2M7DQo+ID4+ PiArCWludCByZXQ7DQo+ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkg ew0KPiA+Pj4gKwkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzcGFjZSBmb3IgZnVy dGhlciBwcm9jZXNzaW5nICovDQo+ID4+PiArCQlpZiAodW5saWtlbHkoYXZhaWwgLSAxIDwgMCkp DQo+ID4+PiArCQkJYnJlYWs7DQo+ID4+PiArCQlhdmFpbCAtPSAxOw0KPiA+Pj4gKw0KPiA+Pj4g KwkJcmV0ID0gZW5xdWV1ZV9lbmNfb25lX29wX2NiKHEsIG9wc1tpXSwgaSk7DQo+ID4+PiArCQlp ZiAocmV0IDwgMCkNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4g KwlpZiAodW5saWtlbHkoaSA9PSAwKSkNCj4gPj4+ICsJCXJldHVybiAwOyAvKiBOb3RoaW5nIHRv IGVucXVldWUgKi8NCj4gPj4+ICsNCj4gPj4+ICsJLyogU2V0IFNEb25lIGluIGxhc3QgQ0IgaW4g ZW5xdWV1ZWQgb3BzIGZvciBDQiBtb2RlKi8NCj4gPj4+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciAr ICgocS0+c3dfcmluZ19oZWFkICsgaSAtIDEpDQo+ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBf bWFzayk7DQo+ID4+PiArCWRlc2MtPnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+Pj4gKwlkZXNj LT5yZXEuaXJxX2VuYWJsZSA9IHEtPmlycV9lbmFibGU7DQo+ID4+PiArDQo+ID4+PiArCWFjYzEw MF9kbWFfZW5xdWV1ZShxLCBpLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4+PiArDQo+ID4+ PiArCS8qIFVwZGF0ZSBzdGF0cyAqLw0KPiA+Pj4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVl dWVkX2NvdW50ICs9IGk7DQo+ID4+PiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZW5xdWV1ZV9lcnJf Y291bnQgKz0gbnVtIC0gaTsNCj4gPj4+ICsJcmV0dXJuIGk7DQo+ID4+PiArfQ0KPiA+Pj4gKw0K PiA+Pj4gIC8qIENoZWNrIHdlIGNhbiBtdXggZW5jb2RlIG9wZXJhdGlvbnMgd2l0aCBjb21tb24g RkNXICovICBzdGF0aWMNCj4gPj4+IGlubGluZSBib29sICBjaGVja19tdXgoc3RydWN0IHJ0ZV9i YmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkNCj4gPj4+IHsgQEAgLTE5NjAsNiArMjYw NCw1MiBAQA0KPiA+Pj4gIAlyZXR1cm4gaTsNCj4gPj4+ICB9DQo+ID4+Pg0KPiA+Pj4gKy8qIEVu cXVldWUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UgaW4gVEIgbW9kZS4gKi8N Cj4gPj4+ICtzdGF0aWMgdWludDE2X3QgYWNjMTAwX2VucXVldWVfZW5jX3RiKHN0cnVjdCBydGVf YmJkZXZfcXVldWVfZGF0YQ0KPiA+PiAqcV9kYXRhLA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9iYmRl dl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+Pj4gKwlzdHJ1Y3QgYWNjMTAwX3F1 ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+Pj4gKwlpbnQzMl90IGF2YWlsID0g cS0+c3dfcmluZ19kZXB0aCArIHEtPnN3X3JpbmdfdGFpbCAtIHEtDQo+ID4+PiBzd19yaW5nX2hl YWQ7DQo+ID4+PiArCXVpbnQxNl90IGksIGVucXVldWVkX2NicyA9IDA7DQo+ID4+PiArCXVpbnQ4 X3QgY2JzX2luX3RiOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKw0KPiA+Pj4gKwlmb3IgKGkg PSAwOyBpIDwgbnVtOyArK2kpIHsNCj4gPj4+ICsJCWNic19pbl90YiA9IGdldF9udW1fY2JzX2lu X3RiX2VuYygmb3BzW2ldLT50dXJib19lbmMpOw0KPiA+Pj4gKwkJLyogQ2hlY2sgaWYgdGhlcmUg YXJlIGF2YWlsYWJsZSBzcGFjZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nICovDQo+ID4+PiArCQlp ZiAodW5saWtlbHkoYXZhaWwgLSBjYnNfaW5fdGIgPCAwKSkNCj4gPj4+ICsJCQlicmVhazsNCj4g Pj4+ICsJCWF2YWlsIC09IGNic19pbl90YjsNCj4gPj4+ICsNCj4gPj4+ICsJCXJldCA9IGVucXVl dWVfZW5jX29uZV9vcF90YihxLCBvcHNbaV0sIGVucXVldWVkX2NicywNCj4gPj4gY2JzX2luX3Ri KTsNCj4gPj4+ICsJCWlmIChyZXQgPCAwKQ0KPiA+Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwkJZW5x dWV1ZWRfY2JzICs9IHJldDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+PiBvdGhlciBzaW1pbGFy IGZ1bmN0aW9ucyBoYXZlIGEgKGkgPT0gMCkgY2hlY2sgaGVyZS4NCj4gPiBvaw0KPiA+DQo+ID4+ PiArCWFjYzEwMF9kbWFfZW5xdWV1ZShxLCBlbnF1ZXVlZF9jYnMsICZxX2RhdGEtPnF1ZXVlX3N0 YXRzKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4+PiArCXFfZGF0 YS0+cXVldWVfc3RhdHMuZW5xdWV1ZWRfY291bnQgKz0gaTsNCj4gPj4+ICsJcV9kYXRhLT5xdWV1 ZV9zdGF0cy5lbnF1ZXVlX2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+Pj4gKw0KPiA+Pj4gKwly ZXR1cm4gaTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyogRW5xdWV1ZSBlbmNvZGUgb3Bl cmF0aW9ucyBmb3IgQUNDMTAwIGRldmljZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4+PiArYWNj MTAwX2VucXVldWVfZW5jKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ Pj4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+ Pj4gKwlpZiAodW5saWtlbHkobnVtID09IDApKQ0KPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ID4+IG51 bSA9PSAwIGNoZWNrIHNob3VsZCBtb3ZlIGludG8gdGhlIHRiL2NiIGZ1bmN0aW9ucw0KPiA+IHNh bWUgY29tbWVudCBvbiBvdGhlciBwYXRjaCwgd2h5IG5vdCBjYXRjaCBpdCBlYXJseT8NCj4gPg0K PiA+Pj4gKwlpZiAob3BzWzBdLT50dXJib19lbmMuY29kZV9ibG9ja19tb2RlID09IDApDQo+ID4+ PiArCQlyZXR1cm4gYWNjMTAwX2VucXVldWVfZW5jX3RiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+ Pj4gKwllbHNlDQo+ID4+PiArCQlyZXR1cm4gYWNjMTAwX2VucXVldWVfZW5jX2NiKHFfZGF0YSwg b3BzLCBudW0pOyB9DQo+ID4+PiArDQo+ID4+PiAgLyogRW5xdWV1ZSBlbmNvZGUgb3BlcmF0aW9u cyBmb3IgQUNDMTAwIGRldmljZS4gKi8gIHN0YXRpYyB1aW50MTZfdA0KPiA+Pj4gYWNjMTAwX2Vu cXVldWVfbGRwY19lbmMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsIEBADQo+ ID4+PiAtMTk2Nyw3ICsyNjU3LDUxIEBAICB7DQo+ID4+PiAgCWlmICh1bmxpa2VseShudW0gPT0g MCkpDQo+ID4+PiAgCQlyZXR1cm4gMDsNCj4gPj4+IC0JcmV0dXJuIGFjYzEwMF9lbnF1ZXVlX2xk cGNfZW5jX2NiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+Pj4gKwlpZiAob3BzWzBdLT5sZHBjX2Vu Yy5jb2RlX2Jsb2NrX21vZGUgPT0gMCkNCj4gPj4+ICsJCXJldHVybiBhY2MxMDBfZW5xdWV1ZV9l bmNfdGIocV9kYXRhLCBvcHMsIG51bSk7DQo+ID4+PiArCWVsc2UNCj4gPj4+ICsJCXJldHVybiBh Y2MxMDBfZW5xdWV1ZV9sZHBjX2VuY19jYihxX2RhdGEsIG9wcywgbnVtKTsgfQ0KPiA+Pj4gKw0K PiA+Pj4gKw0KPiA+Pj4gKy8qIEVucXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBk ZXZpY2UgaW4gQ0IgbW9kZSAqLyBzdGF0aWMNCj4gPj4+ICt1aW50MTZfdCBhY2MxMDBfZW5xdWV1 ZV9kZWNfY2Ioc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhDQo+ID4+ICpxX2RhdGEsDQo+ID4+ PiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqKm9wcywgdWludDE2X3QgbnVtKSB7DQo+ID4+ IFNlZW1zIGxpa2UgdGhlIDEwdGggdmFyaWFudCBvZiBhIHNpbWlsYXIgZnVuY3Rpb24gY291bGQg dGhlc2UgYmUNCj4gPj4gY29tYmluZWQgdG8gZmV3ZXIgZnVuY3Rpb25zID8NCj4gPj4NCj4gPj4g TWF5YmUgYnkgcGFzc2luZyBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIGVucXVldWVfb25l X2RlY19vbmUqDQo+ID4+IHRoYXQgZG9lcyB0aGUgd29yayA/DQo+ID4gVGhleSBoYXZlIHNvbWUg dmFyaWFudHMgcmVsYXRlZCB0byB0aGUgYWN0dWFsIG9wZXJhdGlvbiBhbmQgY29uc3RyYWludHMu DQo+ID4gTm90IG9idmlvdXMgdG8gaGF2ZSBhIHZhbHVhYmxlIHJlZmFjdG9yLg0KPiA+DQo+IEFz IGFib3ZlIG5vdGhpbmcgZnVuY3Rpb25hbGx5IHdyb25nLCBqdXN0IHNvbWV0aGluZyB0byBjb25z aWRlcg0KPiANCj4gb2suDQoNCkkgYWdyZWUgaW4gcHJpbmNpcGxlIGFuZCB0aGlzIHdhcyBkb25l IHRvIGEgbnVtYmVyIG9mIHBsYWNlcyAoaWUuIGFjYzEwMF9kbWFfZmlsbF9ibGtfdHlwZV9vdXQo KSwgZXRjLi4uKS4gDQpJIHRoaW5rIHdlIGNhbiBsb29rIGluIHBhcmFsbGVsIGludG8gdGhhdCBp ZGVhIHlvdSBzdWdnZXN0ZWQgZWFybGllciBvZiAiY29tbW9uIGNvZGUiIGFuZCBmdXR1cmUgcmVm YWN0b3J5IGFyb3VuZCB0aGF0LCANCm5vdGFibHkgdG8gc3VwcG9ydCBmdXR1cmUgZ2VuZXJhdGlv biBvZiBkZXZpY2VzIGluIHRoYXQgZmFtaWx5IHdpdGggZmVhdHVyZSBvdmVybGFwIGFuZCBoZW5j ZSBhdm9pZC9saW1pdCBjb2RlIGR1cGxpY2F0aW9uIG1vdmluZyBmb3J3YXJkIGFjcm9zcyBkaWZm ZXJlbnQgUE1Ecy4gDQpNb3JlIHNvbWV0aGluZyBmb3IgMjAyMS4gVGhhbmtzDQoNCj4gDQo+IFRv bQ0KPiANCj4gPj4+ICsJc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSA9IHFfZGF0YS0+cXVldWVfcHJp dmF0ZTsNCj4gPj4+ICsJaW50MzJfdCBhdmFpbCA9IHEtPnN3X3JpbmdfZGVwdGggKyBxLT5zd19y aW5nX3RhaWwgLSBxLQ0KPiA+Pj4gc3dfcmluZ19oZWFkOw0KPiA+Pj4gKwl1aW50MTZfdCBpOw0K PiA+Pj4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2M7DQo+ID4+PiArCWludCByZXQ7DQo+ ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgew0KPiA+Pj4gKwkJLyog Q2hlY2sgaWYgdGhlcmUgYXJlIGF2YWlsYWJsZSBzcGFjZSBmb3IgZnVydGhlciBwcm9jZXNzaW5n ICovDQo+ID4+PiArCQlpZiAodW5saWtlbHkoYXZhaWwgLSAxIDwgMCkpDQo+ID4+PiArCQkJYnJl YWs7DQo+ID4+PiArCQlhdmFpbCAtPSAxOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJcmV0ID0gZW5xdWV1 ZV9kZWNfb25lX29wX2NiKHEsIG9wc1tpXSwgaSk7DQo+ID4+PiArCQlpZiAocmV0IDwgMCkNCj4g Pj4+ICsJCQlicmVhazsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAodW5saWtlbHko aSA9PSAwKSkNCj4gPj4+ICsJCXJldHVybiAwOyAvKiBOb3RoaW5nIHRvIGVucXVldWUgKi8NCj4g Pj4+ICsNCj4gPj4+ICsJLyogU2V0IFNEb25lIGluIGxhc3QgQ0IgaW4gZW5xdWV1ZWQgb3BzIGZv ciBDQiBtb2RlKi8NCj4gPj4+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ19o ZWFkICsgaSAtIDEpDQo+ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4+PiAr CWRlc2MtPnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+Pj4gKwlkZXNjLT5yZXEuaXJxX2VuYWJs ZSA9IHEtPmlycV9lbmFibGU7DQo+ID4+PiArDQo+ID4+PiArCWFjYzEwMF9kbWFfZW5xdWV1ZShx LCBpLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4+PiArDQo+ID4+PiArCS8qIFVwZGF0ZSBz dGF0cyAqLw0KPiA+Pj4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9IGk7 DQo+ID4+PiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZW5xdWV1ZV9lcnJfY291bnQgKz0gbnVtIC0g aTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIGk7DQo+ID4+PiAgfQ0KPiA+Pj4NCj4gPj4+ICAv KiBDaGVjayB3ZSBjYW4gbXV4IGVuY29kZSBvcGVyYXRpb25zIHdpdGggY29tbW9uIEZDVyAqLyBA QCAtDQo+ID4+IDIwNjUsNg0KPiA+Pj4gKzI3OTksNTMgQEANCj4gPj4+ICAJcmV0dXJuIGk7DQo+ ID4+PiAgfQ0KPiA+Pj4NCj4gPj4+ICsNCj4gPj4+ICsvKiBFbnF1ZXVlIGRlY29kZSBvcGVyYXRp b25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIFRCIG1vZGUgKi8gc3RhdGljDQo+ID4+PiArdWludDE2 X3QgYWNjMTAwX2VucXVldWVfZGVjX3RiKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YQ0KPiA+ PiAqcV9kYXRhLA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKipvcHMsIHVpbnQx Nl90IG51bSkgew0KPiA+PiAxMXRoIDspDQo+ID4+PiArCXN0cnVjdCBhY2MxMDBfcXVldWUgKnEg PSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4+PiArCWludDMyX3QgYXZhaWwgPSBxLT5zd19y aW5nX2RlcHRoICsgcS0+c3dfcmluZ190YWlsIC0gcS0NCj4gPj4+IHN3X3JpbmdfaGVhZDsNCj4g Pj4+ICsJdWludDE2X3QgaSwgZW5xdWV1ZWRfY2JzID0gMDsNCj4gPj4+ICsJdWludDhfdCBjYnNf aW5fdGI7DQo+ID4+PiArCWludCByZXQ7DQo+ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkg PCBudW07ICsraSkgew0KPiA+Pj4gKwkJY2JzX2luX3RiID0gZ2V0X251bV9jYnNfaW5fdGJfZGVj KCZvcHNbaV0tPnR1cmJvX2RlYyk7DQo+ID4+PiArCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYXZh aWxhYmxlIHNwYWNlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgKi8NCj4gPj4+ICsJCWlmICh1bmxp a2VseShhdmFpbCAtIGNic19pbl90YiA8IDApKQ0KPiA+Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwkJ YXZhaWwgLT0gY2JzX2luX3RiOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJcmV0ID0gZW5xdWV1ZV9kZWNf b25lX29wX3RiKHEsIG9wc1tpXSwgZW5xdWV1ZWRfY2JzLA0KPiA+PiBjYnNfaW5fdGIpOw0KPiA+ Pj4gKwkJaWYgKHJldCA8IDApDQo+ID4+PiArCQkJYnJlYWs7DQo+ID4+PiArCQllbnF1ZXVlZF9j YnMgKz0gcmV0Ow0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWFjYzEwMF9kbWFfZW5xdWV1 ZShxLCBlbnF1ZXVlZF9jYnMsICZxX2RhdGEtPnF1ZXVlX3N0YXRzKTsNCj4gPj4+ICsNCj4gPj4+ ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4+PiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZW5xdWV1 ZWRfY291bnQgKz0gaTsNCj4gPj4+ICsJcV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlX2Vycl9j b3VudCArPSBudW0gLSBpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gaTsNCj4gPj4+ICt9DQo+ ID4+PiArDQo+ID4+PiArLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRl dmljZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4+PiArYWNjMTAwX2VucXVldWVfZGVjKHN0cnVj dCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9iYmRl dl9kZWNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+Pj4gKwlpZiAodW5saWtlbHkobnVt ID09IDApKQ0KPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ID4+IHNpbWlsYXIgbW92ZSB0aGUgbnVtID09 IDAgY2hlY2sgdG8gdGhlIHRiL2NiIGZ1bmN0aW9ucy4NCj4gPiBzYW1lIGNvbW1lbnQNCj4gPg0K PiA+Pj4gKwlpZiAob3BzWzBdLT50dXJib19kZWMuY29kZV9ibG9ja19tb2RlID09IDApDQo+ID4+ PiArCQlyZXR1cm4gYWNjMTAwX2VucXVldWVfZGVjX3RiKHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+ Pj4gKwllbHNlDQo+ID4+PiArCQlyZXR1cm4gYWNjMTAwX2VucXVldWVfZGVjX2NiKHFfZGF0YSwg b3BzLCBudW0pOyB9DQo+ID4+PiArDQo+ID4+PiAgLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9u cyBmb3IgQUNDMTAwIGRldmljZS4gKi8gIHN0YXRpYyB1aW50MTZfdA0KPiA+Pj4gYWNjMTAwX2Vu cXVldWVfbGRwY19kZWMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsIEBADQo+ ID4+PiAtMjM4OCw2ICszMTY5LDUxIEBADQo+ID4+PiAgCXJldHVybiBjYl9pZHg7DQo+ID4+PiAg fQ0KPiA+Pj4NCj4gPj4+ICsvKiBEZXF1ZXVlIGVuY29kZSBvcGVyYXRpb25zIGZyb20gQUNDMTAw IGRldmljZS4gKi8gc3RhdGljIHVpbnQxNl90DQo+ID4+PiArYWNjMTAwX2RlcXVldWVfZW5jKHN0 cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9i YmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkgew0KPiA+Pj4gKwlzdHJ1Y3QgYWNjMTAw X3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+Pj4gKwl1aW50MTZfdCBkZXF1 ZXVlX251bTsNCj4gPj4+ICsJdWludDMyX3QgYXZhaWwgPSBxLT5zd19yaW5nX2hlYWQgLSBxLT5z d19yaW5nX3RhaWw7DQo+ID4+PiArCXVpbnQzMl90IGFxX2RlcXVldWVkID0gMDsNCj4gPj4+ICsJ dWludDE2X3QgaTsNCj4gPj4+ICsJdWludDE2X3QgZGVxdWV1ZWRfY2JzID0gMDsNCj4gPj4+ICsJ c3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKw0K PiA+Pj4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4+PiArCWlmICh1bmxpa2Vs eShvcHMgPT0gMCAmJiBxID09IE5VTEwpKQ0KPiA+PiBvcHMgaXMgYSBwb2ludGVyIHNvIHNob3Vs ZCBjb21wYXJlIHdpdGggTlVMTA0KPiA+Pg0KPiA+PiBUaGUgJiYgbGlrZWx5IG5lZWRzIHRvIGJl IHx8DQo+ID4+DQo+ID4+IE1heWJlIHByaW50IG91dCBhIG1lc3NhZ2Ugc28gY2FsbGVyIGtub3dz IHNvbWV0aGluZyB3cm9uZyBoYXBwZW5lZC4NCj4gPiBvaw0KPiA+DQo+ID4+PiArCQlyZXR1cm4g MDsNCj4gPj4+ICsjZW5kaWYNCj4gPj4+ICsNCj4gPj4+ICsJZGVxdWV1ZV9udW0gPSAoYXZhaWwg PCBudW0pID8gYXZhaWwgOiBudW07DQo+ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBk ZXF1ZXVlX251bTsgKytpKSB7DQo+ID4+PiArCQlvcCA9IChxLT5yaW5nX2FkZHIgKyAoKHEtPnN3 X3JpbmdfdGFpbCArIGRlcXVldWVkX2NicykNCj4gPj4+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9t YXNrKSktPnJlcS5vcF9hZGRyOw0KPiA+Pj4gKwkJaWYgKG9wLT50dXJib19lbmMuY29kZV9ibG9j a19tb2RlID09IDApDQo+ID4+PiArCQkJcmV0ID0gZGVxdWV1ZV9lbmNfb25lX29wX3RiKHEsICZv cHNbaV0sDQo+ID4+IGRlcXVldWVkX2NicywNCj4gPj4+ICsJCQkJCSZhcV9kZXF1ZXVlZCk7DQo+ ID4+PiArCQllbHNlDQo+ID4+PiArCQkJcmV0ID0gZGVxdWV1ZV9lbmNfb25lX29wX2NiKHEsICZv cHNbaV0sDQo+ID4+IGRlcXVldWVkX2NicywNCj4gPj4+ICsJCQkJCSZhcV9kZXF1ZXVlZCk7DQo+ ID4+PiArDQo+ID4+PiArCQlpZiAocmV0IDwgMCkNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsJ CWRlcXVldWVkX2NicyArPSByZXQ7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJcS0+YXFf ZGVxdWV1ZWQgKz0gYXFfZGVxdWV1ZWQ7DQo+ID4+PiArCXEtPnN3X3JpbmdfdGFpbCArPSBkZXF1 ZXVlZF9jYnM7DQo+ID4+PiArDQo+ID4+PiArCS8qIFVwZGF0ZSBlbnF1ZXVlIHN0YXRzICovDQo+ ID4+PiArCXFfZGF0YS0+cXVldWVfc3RhdHMuZGVxdWV1ZWRfY291bnQgKz0gaTsNCj4gPj4+ICsN Cj4gPj4+ICsJcmV0dXJuIGk7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gIC8qIERlcXVldWUg TERQQyBlbmNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzEwMCBkZXZpY2UuICovICBzdGF0aWMNCj4g Pj4+IHVpbnQxNl90ICBhY2MxMDBfZGVxdWV1ZV9sZHBjX2VuYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1 ZXVlX2RhdGENCj4gPj4gKnFfZGF0YSwNCj4gPj4+IEBAIC0yNDI2LDYgKzMyNTIsNTIgQEANCj4g Pj4+ICAJcmV0dXJuIGRlcXVldWVkX2NiczsNCj4gPj4+ICB9DQo+ID4+Pg0KPiA+Pj4gKw0KPiA+ Pj4gKy8qIERlcXVldWUgZGVjb2RlIG9wZXJhdGlvbnMgZnJvbSBBQ0MxMDAgZGV2aWNlLiAqLyBz dGF0aWMgdWludDE2X3QNCj4gPj4+ICthY2MxMDBfZGVxdWV1ZV9kZWMoc3RydWN0IHJ0ZV9iYmRl dl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4+PiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAq Km9wcywgdWludDE2X3QgbnVtKSB7DQo+ID4+IHZlcnkgc2ltaWxhciB0byBlbmMgZnVuY3Rpb24g YWJvdmUsIGNvbnNpZGVyIGhvdyB0byBjb21iaW5lIHRoZW0gdG8gYQ0KPiA+PiBzaW5nbGUgZnVu Y3Rpb24uDQo+ID4+DQo+ID4+IFRvbQ0KPiA+Pg0KPiA+Pj4gKwlzdHJ1Y3QgYWNjMTAwX3F1ZXVl ICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+Pj4gKwl1aW50MTZfdCBkZXF1ZXVlX251 bTsNCj4gPj4+ICsJdWludDMyX3QgYXZhaWwgPSBxLT5zd19yaW5nX2hlYWQgLSBxLT5zd19yaW5n X3RhaWw7DQo+ID4+PiArCXVpbnQzMl90IGFxX2RlcXVldWVkID0gMDsNCj4gPj4+ICsJdWludDE2 X3QgaTsNCj4gPj4+ICsJdWludDE2X3QgZGVxdWV1ZWRfY2JzID0gMDsNCj4gPj4+ICsJc3RydWN0 IHJ0ZV9iYmRldl9kZWNfb3AgKm9wOw0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKw0KPiA+Pj4g KyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4+PiArCWlmICh1bmxpa2VseShvcHMg PT0gMCAmJiBxID09IE5VTEwpKQ0KPiA+Pj4gKwkJcmV0dXJuIDA7DQo+ID4+PiArI2VuZGlmDQo+ ID4+PiArDQo+ID4+PiArCWRlcXVldWVfbnVtID0gKGF2YWlsIDwgbnVtKSA/IGF2YWlsIDogbnVt Ow0KPiA+Pj4gKw0KPiA+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgZGVxdWV1ZV9udW07ICsraSkgew0K PiA+Pj4gKwkJb3AgPSAocS0+cmluZ19hZGRyICsgKChxLT5zd19yaW5nX3RhaWwgKyBkZXF1ZXVl ZF9jYnMpDQo+ID4+PiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzaykpLT5yZXEub3BfYWRkcjsN Cj4gPj4+ICsJCWlmIChvcC0+dHVyYm9fZGVjLmNvZGVfYmxvY2tfbW9kZSA9PSAwKQ0KPiA+Pj4g KwkJCXJldCA9IGRlcXVldWVfZGVjX29uZV9vcF90YihxLCAmb3BzW2ldLA0KPiA+PiBkZXF1ZXVl ZF9jYnMsDQo+ID4+PiArCQkJCQkmYXFfZGVxdWV1ZWQpOw0KPiA+Pj4gKwkJZWxzZQ0KPiA+Pj4g KwkJCXJldCA9IGRlcXVldWVfZGVjX29uZV9vcF9jYihxX2RhdGEsIHEsICZvcHNbaV0sDQo+ID4+ PiArCQkJCQlkZXF1ZXVlZF9jYnMsICZhcV9kZXF1ZXVlZCk7DQo+ID4+PiArDQo+ID4+PiArCQlp ZiAocmV0IDwgMCkNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsJCWRlcXVldWVkX2NicyArPSBy ZXQ7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJcS0+YXFfZGVxdWV1ZWQgKz0gYXFfZGVx dWV1ZWQ7DQo+ID4+PiArCXEtPnN3X3JpbmdfdGFpbCArPSBkZXF1ZXVlZF9jYnM7DQo+ID4+PiAr DQo+ID4+PiArCS8qIFVwZGF0ZSBlbnF1ZXVlIHN0YXRzICovDQo+ID4+PiArCXFfZGF0YS0+cXVl dWVfc3RhdHMuZGVxdWV1ZWRfY291bnQgKz0gaTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIGk7 DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gIC8qIERlcXVldWUgZGVjb2RlIG9wZXJhdGlvbnMg ZnJvbSBBQ0MxMDAgZGV2aWNlLiAqLyAgc3RhdGljDQo+ID4+PiB1aW50MTZfdCBhY2MxMDBfZGVx dWV1ZV9sZHBjX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGENCj4gPj4+ICpxX2RhdGEs IEBADQo+ID4+PiAtMjQ3OSw2ICszMzUxLDEwIEBADQo+ID4+PiAgCXN0cnVjdCBydGVfcGNpX2Rl dmljZSAqcGNpX2RldiA9IFJURV9ERVZfVE9fUENJKGRldi0+ZGV2aWNlKTsNCj4gPj4+DQo+ID4+ PiAgCWRldi0+ZGV2X29wcyA9ICZhY2MxMDBfYmJkZXZfb3BzOw0KPiA+Pj4gKwlkZXYtPmVucXVl dWVfZW5jX29wcyA9IGFjYzEwMF9lbnF1ZXVlX2VuYzsNCj4gPj4+ICsJZGV2LT5lbnF1ZXVlX2Rl Y19vcHMgPSBhY2MxMDBfZW5xdWV1ZV9kZWM7DQo+ID4+PiArCWRldi0+ZGVxdWV1ZV9lbmNfb3Bz ID0gYWNjMTAwX2RlcXVldWVfZW5jOw0KPiA+Pj4gKwlkZXYtPmRlcXVldWVfZGVjX29wcyA9IGFj YzEwMF9kZXF1ZXVlX2RlYzsNCj4gPj4+ICAJZGV2LT5lbnF1ZXVlX2xkcGNfZW5jX29wcyA9IGFj YzEwMF9lbnF1ZXVlX2xkcGNfZW5jOw0KPiA+Pj4gIAlkZXYtPmVucXVldWVfbGRwY19kZWNfb3Bz ID0gYWNjMTAwX2VucXVldWVfbGRwY19kZWM7DQo+ID4+PiAgCWRldi0+ZGVxdWV1ZV9sZHBjX2Vu Y19vcHMgPSBhY2MxMDBfZGVxdWV1ZV9sZHBjX2VuYzsNCg0K