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 B2540A04B5; Wed, 30 Sep 2020 20:52:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D09D61D57A; Wed, 30 Sep 2020 20:52:30 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 8ED6B1D546 for ; Wed, 30 Sep 2020 20:52:28 +0200 (CEST) IronPort-SDR: ZOqfsXK0paToLbsjvvJ6B19UOkrPo3QDbTo7fpxcdDhQE+HBMkZCrcqlkd+aT8EuXNgI0wm3u1 WaqQ8cLClVwQ== X-IronPort-AV: E=McAfee;i="6000,8403,9760"; a="159906362" X-IronPort-AV: E=Sophos;i="5.77,322,1596524400"; d="scan'208";a="159906362" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Sep 2020 11:52:24 -0700 IronPort-SDR: HchDbkeQqr731NPyT+/ZVqALQpv692+mMIHxi1zrK0nSD6UGEpI1Xn5IAQn0h7cXD1Rgj5LDli /6ksQYBswA8g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,322,1596524400"; d="scan'208";a="294121887" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga007.fm.intel.com with ESMTP; 30 Sep 2020 11:52:24 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 30 Sep 2020 11:52:23 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 30 Sep 2020 11:52:23 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 30 Sep 2020 11:52:22 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.102) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Wed, 30 Sep 2020 11:52:22 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KcHlO9lFjFGUj8oVnORJY92iLr6k+OPGmLYtvoGQeb/YUoChJ1Rp93oOfeAn0JnPh/yttk9aTi+4eiV28YyC3NHTUBpy9XdMZFz31Uq5EPjcRZY6fuOJKv221p3+CXXlGKEC2dffAU8tFqae0a1C1+p2N+Un+Q1HthuSFP4iujbd9gpcMQe3DdxC7EfjFvpmNki6aqZOy7OwpZP5QIIEApR0E0tNzPPeKkilaz66NfLk0rNr34CdlOIJTGDLPKLpkk9JuYJ8fGaFN2phb/XELTOG/VNno0/yZpLmthrcomUCyl4PCdYY89T5+NOJho3WGDXh8FwLz4SW4JK+NVbZKw== 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=aZ8zFVjJC4fU8lCTXW8mEZrEXIiSgeobAq1rEBThx+w=; b=YejqUqaOvzuxXaOaQ7PpMy1N1gneJTzRlSgxf0oy9REvkP+c/D0lfgrsoyt89/NoaKIECCQslghe0vUYmTD8ORcwHRqSdK4uGKx72KA+ICCknhQ9pMavD0FIwieMWfoEe71guXTPeCn4ogOA1pwlbvh1KWtVNq9Uxd/qso856opVvrMqs6L3Kdbt8yANxBtip0rCI4lr9LfXXkamF20G10HXmu7YsWBG1Pqg0OVZHlpkQ5zA+RuevPTCYn5t04kew9Ie+G/Zn0wDf/424hTMtArveOw8MAHTcKDhh6p5fWhWKI8ctJvOuBbaBXHgTp8CBX0eKkq3RfHGxNS3cGllaA== 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=aZ8zFVjJC4fU8lCTXW8mEZrEXIiSgeobAq1rEBThx+w=; b=geU+fKslYYS11Tyf3iSa2bLm3IVf7t4tzXDKOXPueA5VQCct4l6HdwtqS31GjzzkD9M2LfYzNSkqkyzh23eIV3T1WfK5BGQCYyMsQCcmDdhqO3IFbyGXIdxoJ1+rxuCF4MhoNa7J/rz6JLxtE9UODZPTtsfJqehKuK52kaI5FPo= Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by BYAPR11MB2968.namprd11.prod.outlook.com (2603:10b6:a03:90::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3412.28; Wed, 30 Sep 2020 18:52:18 +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; Wed, 30 Sep 2020 18:52:18 +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 05/10] baseband/acc100: add LDPC processing functions Thread-Index: AQHWlffjcnrKi0+CTkazFpcIWNfE76mBaJyAgAAg+kA= Date: Wed, 30 Sep 2020 18:52:18 +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-6-git-send-email-nicolas.chautru@intel.com> <41639260-93fe-80fb-745c-9cf3a15db6f1@redhat.com> In-Reply-To: <41639260-93fe-80fb-745c-9cf3a15db6f1@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: 387d696f-fd78-4050-b6e3-08d86571f4eb x-ms-traffictypediagnostic: BYAPR11MB2968: 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:6108; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 4a+WzIUJ6gMnfTqcgSCXo8Y1Ki7EA7+jlL8sbLRcVmFqZK/mZLIxTpnoBs8NV+7YzPu7pOm3BnD492zQohPF/B/+f68/m8jULjAMZFTV0elfZ0oboQ+Yi+aOzto4L+4zOEgA8sYHLRpXBWMjJESp/NFmv/g+u5Urhde3olg0Ayr4NvfiUCoRTa+Rua+xywfzeLuK/Q5HUN86au4PamrstvbyoJsgwDO0Eyg8fYcXWptd5DsKYyHfIVED/3xXG1Mtqgt6gH3WWeR+5o/wdYL4FEH/QzHrIXz+cRfkG/HV92Kk8+bBKkg5cHZomXeQxiVnmtZvTBX759+kEPDG3QwpVM5Csui8Jy6dGeeYxDw+sDEs7d80xmBY6U2WCizalgg+vinmhB0AZs6615joVNntF+/IhD+yHv5SWeXnGwy8Gsc= 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)(346002)(376002)(366004)(396003)(39860400002)(136003)(5660300002)(66946007)(2906002)(86362001)(66446008)(66556008)(66476007)(64756008)(76116006)(9686003)(71200400001)(55016002)(7696005)(8676002)(30864003)(53546011)(6506007)(33656002)(8936002)(107886003)(54906003)(110136005)(316002)(26005)(52536014)(478600001)(186003)(83380400001)(4326008)(461764006)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: rz+UyvHkoaD8xtW4x2fbB1KDCxcyyhBVaHXb9ZXdu1Zib3fDWEo/xTJrb3yer8dKLrCaXX1m8BdLGx95tualUzWIXVAMEnMS1wiWSfVopO/8o8adCk2v9YfqJfJ92fhcsfkOtenZNQGBFlgfLgOHxNM57nE0zwLRldO2Zc3xL9RvXccsWiUJcfspLHxmnXeYhr0McWk+aXnYLFzlpj7CGZAqKeyuHi7woDIlBt7YbCK4VsPYh2zVt7coC7soJc0L9p30Ac3fR/pN1S1nfcL9L4dNX2SiuqT7Cd43Yu9vvKtU1A4UVKQF/dVDL32hTSKwC/jIgEWNFYNyv4CWGKBl9PpzCHx9rSzR8Dp3bD3eJkvzZBXbybdYgtX5qxmv94AjaHwnpaDXWMB3XIcfcUdHPQnIA4gbrK8A6IFZpdolDiSgfXx3y7wXQ1HlWZdD2upnUxPUqRL0+xzXiWdEbaBFxDLH10t+0aTrAoK90WHFk6cH6vk3/WuUhTg3pQWGrOadddz4UpGZLDMQ2T8vSTTBWz8KVQ3GJujasL86Li04ldXSxTkuXphwBI9cLp+P03REcRgTd18v0VhhYk0gMvmjDOMqDqz3vKPRRDqmWTdBBLu6GutAbkTjDbOQSekEkznEXttrhvMbeQky12WvCUIrLg== 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: 387d696f-fd78-4050-b6e3-08d86571f4eb X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2020 18:52:18.5174 (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: IVTWTRah0IVton7zO3nbAj/pd9Jwe/f9jEM7Cy9gRNWoBm0cmn1MVkW9FyLhK8U0BVQqGDeccyQMTgMpN22PicO3iyLsdMyRckw/U/q/9LQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB2968 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v9 05/10] baseband/acc100: add LDPC processing functions 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" SGkgVG9tLCANCg0KPiBGcm9tOiBUb20gUml4IDx0cml4QHJlZGhhdC5jb20+DQo+IE9uIDkvMjgv MjAgNToyOSBQTSwgTmljb2xhcyBDaGF1dHJ1IHdyb3RlOg0KPiA+IEFkZGluZyBMRFBDIGRlY29k ZSBhbmQgZW5jb2RlIHByb2Nlc3Npbmcgb3BlcmF0aW9ucw0KPiA+DQo+ID4gU2lnbmVkLW9mZi1i eTogTmljb2xhcyBDaGF1dHJ1IDxuaWNvbGFzLmNoYXV0cnVAaW50ZWwuY29tPg0KPiA+IEFja2Vk LWJ5OiBMaXUgVGlhbmppYW8gPFRpYW5qaWFvLmxpdUBpbnRlbC5jb20+DQo+ID4gQWNrZWQtYnk6 IERhdmUgQnVybGV5IDxkYXZlLmJ1cmxleUBhY2NlbGVyY29tbS5jb20+DQo+ID4gLS0tDQo+ID4g IGRvYy9ndWlkZXMvYmJkZXZzL2ZlYXR1cmVzL2FjYzEwMC5pbmkgICAgfCAgICA4ICstDQo+ID4g IGRyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMgfCAxNjI1DQo+ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICBkcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9y dGVfYWNjMTAwX3BtZC5oIHwgICAgMyArDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTYzMCBpbnNl cnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RvYy9ndWlk ZXMvYmJkZXZzL2ZlYXR1cmVzL2FjYzEwMC5pbmkNCj4gYi9kb2MvZ3VpZGVzL2JiZGV2cy9mZWF0 dXJlcy9hY2MxMDAuaW5pDQo+ID4gaW5kZXggYzg5YTRkNy4uNDBjN2FkYyAxMDA2NDQNCj4gPiAt LS0gYS9kb2MvZ3VpZGVzL2JiZGV2cy9mZWF0dXJlcy9hY2MxMDAuaW5pDQo+ID4gKysrIGIvZG9j L2d1aWRlcy9iYmRldnMvZmVhdHVyZXMvYWNjMTAwLmluaQ0KPiA+IEBAIC02LDkgKzYsOSBAQA0K PiA+ICBbRmVhdHVyZXNdDQo+ID4gIFR1cmJvIERlY29kZXIgKDRHKSAgICAgPSBODQo+ID4gIFR1 cmJvIEVuY29kZXIgKDRHKSAgICAgPSBODQo+ID4gLUxEUEMgRGVjb2RlciAoNUcpICAgICAgPSBO DQo+ID4gLUxEUEMgRW5jb2RlciAoNUcpICAgICAgPSBODQo+ID4gLUxMUi9IQVJRIENvbXByZXNz aW9uICAgPSBODQo+ID4gLUV4dGVybmFsIEREUiBBY2Nlc3MgICAgPSBODQo+ID4gK0xEUEMgRGVj b2RlciAoNUcpICAgICAgPSBZDQo+ID4gK0xEUEMgRW5jb2RlciAoNUcpICAgICAgPSBZDQo+ID4g K0xMUi9IQVJRIENvbXByZXNzaW9uICAgPSBZDQo+ID4gK0V4dGVybmFsIEREUiBBY2Nlc3MgICAg PSBZDQo+ID4gIEhXIEFjY2VsZXJhdGVkICAgICAgICAgPSBZDQo+ID4gIEJCREVWIEFQSSAgICAg ICAgICAgICAgPSBZDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0 ZV9hY2MxMDBfcG1kLmMNCj4gYi9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX3Bt ZC5jDQo+ID4gaW5kZXggN2EyMWM1Ny4uYjIyMzU0NyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz L2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX3BtZC5jDQo+ID4gKysrIGIvZHJpdmVycy9iYXNl YmFuZC9hY2MxMDAvcnRlX2FjYzEwMF9wbWQuYw0KPiA+IEBAIC0xNSw2ICsxNSw5IEBADQo+ID4g ICNpbmNsdWRlIDxydGVfaGV4ZHVtcC5oPg0KPiA+ICAjaW5jbHVkZSA8cnRlX3BjaS5oPg0KPiA+ ICAjaW5jbHVkZSA8cnRlX2J1c19wY2kuaD4NCj4gPiArI2lmZGVmIFJURV9CQkRFVl9PRkZMT0FE X0NPU1QNCj4gPiArI2luY2x1ZGUgPHJ0ZV9jeWNsZXMuaD4NCj4gPiArI2VuZGlmDQo+ID4NCj4g PiAgI2luY2x1ZGUgPHJ0ZV9iYmRldi5oPg0KPiA+ICAjaW5jbHVkZSA8cnRlX2JiZGV2X3BtZC5o Pg0KPiA+IEBAIC00NDksNyArNDUyLDYgQEANCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4N Cj4gPiAtDQo+ID4gIC8qKg0KPiA+ICAgKiBSZXBvcnQgYSBBQ0MxMDAgcXVldWUgaW5kZXggd2hp Y2ggaXMgZnJlZQ0KPiA+ICAgKiBSZXR1cm4gMCB0byAxNmsgZm9yIGEgdmFsaWQgcXVldWVfaWR4 IG9yIC0xIHdoZW4gbm8gcXVldWUgaXMgYXZhaWxhYmxlDQo+ID4gQEAgLTYzNCw2ICs2MzYsNDYg QEANCj4gPiAgCXN0cnVjdCBhY2MxMDBfZGV2aWNlICpkID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0 ZTsNCj4gPg0KPiA+ICAJc3RhdGljIGNvbnN0IHN0cnVjdCBydGVfYmJkZXZfb3BfY2FwIGJiZGV2 X2NhcGFiaWxpdGllc1tdID0gew0KPiA+ICsJCXsNCj4gPiArCQkJLnR5cGUgICA9IFJURV9CQkRF Vl9PUF9MRFBDX0VOQywNCj4gPiArCQkJLmNhcC5sZHBjX2VuYyA9IHsNCj4gPiArCQkJCS5jYXBh YmlsaXR5X2ZsYWdzID0NCj4gPiArCQkJCQlSVEVfQkJERVZfTERQQ19SQVRFX01BVENIIHwNCj4g PiArDQo+IAlSVEVfQkJERVZfTERQQ19DUkNfMjRCX0FUVEFDSCB8DQo+ID4gKw0KPiAJUlRFX0JC REVWX0xEUENfSU5URVJMRUFWRVJfQllQQVNTLA0KPiA+ICsJCQkJLm51bV9idWZmZXJzX3NyYyA9 DQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkJLm51 bV9idWZmZXJzX2RzdCA9DQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfTUFYX0NPREVfQkxPQ0tT LA0KPiA+ICsJCQl9DQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4gKwkJCS50eXBlICAgPSBSVEVf QkJERVZfT1BfTERQQ19ERUMsDQo+ID4gKwkJCS5jYXAubGRwY19kZWMgPSB7DQo+ID4gKwkJCS5j YXBhYmlsaXR5X2ZsYWdzID0NCj4gPiArCQkJCVJURV9CQkRFVl9MRFBDX0NSQ19UWVBFXzI0Ql9D SEVDSyB8DQo+ID4gKwkJCQlSVEVfQkJERVZfTERQQ19DUkNfVFlQRV8yNEJfRFJPUCB8DQo+ID4g Kw0KPiAJUlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9JTl9FTkFCTEUgfA0KPiA+ICsNCj4gCVJU RV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVfT1VUX0VOQUJMRSB8DQo+ID4gKyNpZmRlZiBBQ0MxMDBf RVhUX01FTQ0KPiANCj4gVGhpcyBpcyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCBpbiBydGVfYWNj MTAwX3BtZC5oIGJ1dCBpdCBzZWVtcw0KPiANCj4gbGlrZSBpdCBjb3VsZCBiZSBhIGh3IGNvbmZp Zy4gIFBsZWFzZSBhZGQgYSBjb21tZW50IGluIHRoZSAqLmgNCj4gDQoNCkl0IGlzIG5vdCByZWFs bHkgYW4gSFcgY29uZmlnLCBqdXN0IGEgcG90ZW50aWFsIGFsdGVybmF0ZSB3YXkgdG8gcnVuDQp0 aGUgZGV2aWNlIG5vdGFibHkgZm9yIHRyb3VibGVzaG9vdGluZy4NCkkgY2FuIGFkZCBhIGNvbW1l bnQgdGhvdWdoDQoNCj4gQ291bGQgYWxzbyBjaGFuZ2UgdG8NCj4gDQo+ICNpZiBBQ0MxMDBfRVhU X01FTQ0KPiANCj4gYW5kIGNoYW5nZSB0aGUgI2RlZmluZSBBQ0MxMDBfRVhUX01FTSAxDQoNCm9r DQoNCj4gDQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfSU5URVJOQUxfSEFSUV9NRU1PUllfSU5f RU5BQkxFIHwNCj4gPiArDQo+IAlSVEVfQkJERVZfTERQQ19JTlRFUk5BTF9IQVJRX01FTU9SWV9P VVRfRU5BQkxFIHwNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfSVRFUkFU SU9OX1NUT1BfRU5BQkxFIHwNCj4gPiArCQkJCVJURV9CQkRFVl9MRFBDX0RFSU5URVJMRUFWRVJf QllQQVNTDQo+IHwNCj4gPiArCQkJCVJURV9CQkRFVl9MRFBDX0RFQ09ERV9CWVBBU1MgfA0KPiA+ ICsJCQkJUlRFX0JCREVWX0xEUENfREVDX1NDQVRURVJfR0FUSEVSIHwNCj4gPiArDQo+IAlSVEVf QkJERVZfTERQQ19IQVJRXzZCSVRfQ09NUFJFU1NJT04gfA0KPiA+ICsJCQkJUlRFX0JCREVWX0xE UENfTExSX0NPTVBSRVNTSU9OLA0KPiA+ICsJCQkubGxyX3NpemUgPSA4LA0KPiA+ICsJCQkubGxy X2RlY2ltYWxzID0gMSwNCj4gPiArCQkJLm51bV9idWZmZXJzX3NyYyA9DQo+ID4gKw0KPiAJUlRF X0JCREVWX0xEUENfTUFYX0NPREVfQkxPQ0tTLA0KPiA+ICsJCQkubnVtX2J1ZmZlcnNfaGFyZF9v dXQgPQ0KPiA+ICsNCj4gCVJURV9CQkRFVl9MRFBDX01BWF9DT0RFX0JMT0NLUywNCj4gPiArCQkJ Lm51bV9idWZmZXJzX3NvZnRfb3V0ID0gMCwNCj4gPiArCQkJfQ0KPiA+ICsJCX0sDQo+ID4gIAkJ UlRFX0JCREVWX0VORF9PRl9DQVBBQklMSVRJRVNfTElTVCgpDQo+ID4gIAl9Ow0KPiA+DQo+ID4g QEAgLTY2OSw5ICs3MTEsMTQgQEANCj4gPiAgCWRldl9pbmZvLT5jcHVfZmxhZ19yZXFzID0gTlVM TDsNCj4gPiAgCWRldl9pbmZvLT5taW5fYWxpZ25tZW50ID0gNjQ7DQo+ID4gIAlkZXZfaW5mby0+ Y2FwYWJpbGl0aWVzID0gYmJkZXZfY2FwYWJpbGl0aWVzOw0KPiA+ICsjaWZkZWYgQUNDMTAwX0VY VF9NRU0NCj4gPiAgCWRldl9pbmZvLT5oYXJxX2J1ZmZlcl9zaXplID0gZC0+ZGRyX3NpemU7DQo+ ID4gKyNlbHNlDQo+ID4gKwlkZXZfaW5mby0+aGFycV9idWZmZXJfc2l6ZSA9IDA7DQo+ID4gKyNl bmRpZg0KPiA+ICB9DQo+ID4NCj4gPiArDQo+ID4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRlX2Ji ZGV2X29wcyBhY2MxMDBfYmJkZXZfb3BzID0gew0KPiA+ICAJLnNldHVwX3F1ZXVlcyA9IGFjYzEw MF9zZXR1cF9xdWV1ZXMsDQo+ID4gIAkuY2xvc2UgPSBhY2MxMDBfZGV2X2Nsb3NlLA0KPiA+IEBA IC02OTYsNiArNzQzLDE1NzcgQEANCj4gPiAgCXsuZGV2aWNlX2lkID0gMH0sDQo+ID4gIH07DQo+ ID4NCj4gPiArLyogUmVhZCBmbGFnIHZhbHVlIDAvMSBmcm9tIGJpdG1hcCAqLw0KPiA+ICtzdGF0 aWMgaW5saW5lIGJvb2wNCj4gPiArY2hlY2tfYml0KHVpbnQzMl90IGJpdG1hcCwgdWludDMyX3Qg Yml0bWFzaykNCj4gPiArew0KPiA+ICsJcmV0dXJuIGJpdG1hcCAmIGJpdG1hc2s7DQo+ID4gK30N Cj4gPiArDQo+IA0KPiBBbGwgdGhlIGJiZGV2IGhhdmUgdGhpcyBmdW5jdGlvbiwgaXRzIHByZXR0 eSB0cml2YWwgYnV0IGl0IHdvdWxkIGJlIGdvb2QgaWYNCj4gY29tbW9uIGJiZGV2DQo+IA0KPiBm dW5jdGlvbnMgZ290IG1vdmVkIHRvIGEgY29tbW9uIHBsYWNlLg0KDQpOb3RlZCBmb3IgZnV0dXJl IGNoYW5nZSBhZmZlY3RpbmcgYWxsIFBNRHMgb3V0c2lkZSBvZiB0aGF0IHNlcmllLiANCg0KPiAN Cj4gPiArc3RhdGljIGlubGluZSBjaGFyICoNCj4gPiArbWJ1Zl9hcHBlbmQoc3RydWN0IHJ0ZV9t YnVmICptX2hlYWQsIHN0cnVjdCBydGVfbWJ1ZiAqbSwgdWludDE2X3QNCj4gbGVuKQ0KPiA+ICt7 DQo+ID4gKwlpZiAodW5saWtlbHkobGVuID4gcnRlX3BrdG1idWZfdGFpbHJvb20obSkpKQ0KPiA+ ICsJCXJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiArCWNoYXIgKnRhaWwgPSAoY2hhciAqKW0tPmJ1 Zl9hZGRyICsgbS0+ZGF0YV9vZmYgKyBtLT5kYXRhX2xlbjsNCj4gPiArCW0tPmRhdGFfbGVuID0g KHVpbnQxNl90KShtLT5kYXRhX2xlbiArIGxlbik7DQo+ID4gKwltX2hlYWQtPnBrdF9sZW4gID0g KG1faGVhZC0+cGt0X2xlbiArIGxlbik7DQo+ID4gKwlyZXR1cm4gdGFpbDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyogQ29tcHV0ZSB2YWx1ZSBvZiBrMC4NCj4gPiArICogQmFzZWQgb24gM0dQUCAz OC4yMTIgVGFibGUgNS40LjIuMS0yDQo+ID4gKyAqIFN0YXJ0aW5nIHBvc2l0aW9uIG9mIGRpZmZl cmVudCByZWR1bmRhbmN5IHZlcnNpb25zLCBrMA0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlubGlu ZSB1aW50MTZfdA0KPiA+ICtnZXRfazAodWludDE2X3Qgbl9jYiwgdWludDE2X3Qgel9jLCB1aW50 OF90IGJnLCB1aW50OF90IHJ2X2luZGV4KQ0KPiA+ICt7DQo+ID4gKwlpZiAocnZfaW5kZXggPT0g MCkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCXVpbnQxNl90IG4gPSAoYmcgPT0gMSA/IE5fWkNf MSA6IE5fWkNfMikgKiB6X2M7DQo+ID4gKwlpZiAobl9jYiA9PSBuKSB7DQo+ID4gKwkJaWYgKHJ2 X2luZGV4ID09IDEpDQo+ID4gKwkJCXJldHVybiAoYmcgPT0gMSA/IEswXzFfMSA6IEswXzFfMikg KiB6X2M7DQo+ID4gKwkJZWxzZSBpZiAocnZfaW5kZXggPT0gMikNCj4gPiArCQkJcmV0dXJuIChi ZyA9PSAxID8gSzBfMl8xIDogSzBfMl8yKSAqIHpfYzsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXJl dHVybiAoYmcgPT0gMSA/IEswXzNfMSA6IEswXzNfMikgKiB6X2M7DQo+ID4gKwl9DQo+ID4gKwkv KiBMQlJNIGNhc2UgLSBpbmNsdWRlcyBhIGRpdmlzaW9uIGJ5IE4gKi8NCj4gPiArCWlmIChydl9p bmRleCA9PSAxKQ0KPiA+ICsJCXJldHVybiAoKChiZyA9PSAxID8gSzBfMV8xIDogSzBfMV8yKSAq IG5fY2IpDQo+ID4gKwkJCQkvIG4pICogel9jOw0KPiA+ICsJZWxzZSBpZiAocnZfaW5kZXggPT0g MikNCj4gPiArCQlyZXR1cm4gKCgoYmcgPT0gMSA/IEswXzJfMSA6IEswXzJfMikgKiBuX2NiKQ0K PiA+ICsJCQkJLyBuKSAqIHpfYzsNCj4gPiArCWVsc2UNCj4gPiArCQlyZXR1cm4gKCgoYmcgPT0g MSA/IEswXzNfMSA6IEswXzNfMikgKiBuX2NiKQ0KPiA+ICsJCQkJLyBuKSAqIHpfYzsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyogRmlsbCBpbiBhIGZyYW1lIGNvbnRyb2wgd29yZCBmb3IgTERQQyBl bmNvZGluZy4gKi8NCj4gPiArc3RhdGljIGlubGluZSB2b2lkDQo+ID4gK2FjYzEwMF9mY3dfbGVf ZmlsbChjb25zdCBzdHJ1Y3QgcnRlX2JiZGV2X2VuY19vcCAqb3AsDQo+ID4gKwkJc3RydWN0IGFj YzEwMF9mY3dfbGUgKmZjdywgaW50IG51bV9jYikNCj4gPiArew0KPiA+ICsJZmN3LT5xbSA9IG9w LT5sZHBjX2VuYy5xX207DQo+ID4gKwlmY3ctPm5maWxsZXIgPSBvcC0+bGRwY19lbmMubl9maWxs ZXI7DQo+ID4gKwlmY3ctPkJHID0gKG9wLT5sZHBjX2VuYy5iYXNlZ3JhcGggLSAxKTsNCj4gPiAr CWZjdy0+WmMgPSBvcC0+bGRwY19lbmMuel9jOw0KPiA+ICsJZmN3LT5uY2IgPSBvcC0+bGRwY19l bmMubl9jYjsNCj4gPiArCWZjdy0+azAgPSBnZXRfazAoZmN3LT5uY2IsIGZjdy0+WmMsIG9wLT5s ZHBjX2VuYy5iYXNlZ3JhcGgsDQo+ID4gKwkJCW9wLT5sZHBjX2VuYy5ydl9pbmRleCk7DQo+ID4g KwlmY3ctPnJtX2UgPSBvcC0+bGRwY19lbmMuY2JfcGFyYW1zLmU7DQo+ID4gKwlmY3ctPmNyY19z ZWxlY3QgPSBjaGVja19iaXQob3AtPmxkcGNfZW5jLm9wX2ZsYWdzLA0KPiA+ICsJCQlSVEVfQkJE RVZfTERQQ19DUkNfMjRCX0FUVEFDSCk7DQo+ID4gKwlmY3ctPmJ5cGFzc19pbnRsdiA9IGNoZWNr X2JpdChvcC0+bGRwY19lbmMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0lOVEVS TEVBVkVSX0JZUEFTUyk7DQo+ID4gKwlmY3ctPm1jYl9jb3VudCA9IG51bV9jYjsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyogRmlsbCBpbiBhIGZyYW1lIGNvbnRyb2wgd29yZCBmb3IgTERQQyBkZWNv ZGluZy4gKi8NCj4gPiArc3RhdGljIGlubGluZSB2b2lkDQo+ID4gK2FjYzEwMF9mY3dfbGRfZmls bChjb25zdCBzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3AsIHN0cnVjdA0KPiBhY2MxMDBfZmN3 X2xkICpmY3csDQo+ID4gKwkJdW5pb24gYWNjMTAwX2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5 b3V0KQ0KPiA+ICt7DQo+ID4gKwl1aW50MTZfdCBoYXJxX291dF9sZW5ndGgsIGhhcnFfaW5fbGVu Z3RoLCBuY2JfcCwgazBfcCwNCj4gcGFyaXR5X29mZnNldDsNCj4gPiArCXVpbnQxNl90IGhhcnFf aW5kZXg7DQo+ID4gKwl1aW50MzJfdCBsOw0KPiA+ICsJYm9vbCBoYXJxX3BydW4gPSBmYWxzZTsN Cj4gPiArDQo+ID4gKwlmY3ctPnFtID0gb3AtPmxkcGNfZGVjLnFfbTsNCj4gPiArCWZjdy0+bmZp bGxlciA9IG9wLT5sZHBjX2RlYy5uX2ZpbGxlcjsNCj4gPiArCWZjdy0+QkcgPSAob3AtPmxkcGNf ZGVjLmJhc2VncmFwaCAtIDEpOw0KPiA+ICsJZmN3LT5aYyA9IG9wLT5sZHBjX2RlYy56X2M7DQo+ ID4gKwlmY3ctPm5jYiA9IG9wLT5sZHBjX2RlYy5uX2NiOw0KPiA+ICsJZmN3LT5rMCA9IGdldF9r MChmY3ctPm5jYiwgZmN3LT5aYywgb3AtPmxkcGNfZGVjLmJhc2VncmFwaCwNCj4gPiArCQkJb3At PmxkcGNfZGVjLnJ2X2luZGV4KTsNCj4gPiArCWlmIChvcC0+bGRwY19kZWMuY29kZV9ibG9ja19t b2RlID09IDEpDQo+IDEgaXMgbWFnaWMsIGNvbnNpZGVyIGEgI2RlZmluZQ0KDQpUaGlzIHdvdWxk IGJlIGEgY2hhbmdlZCBub3QgcmVsYXRlZCB0byB0aGF0IFBNRCwgYnV0IG5vdGVkIGFuZCBhZ3Jl ZWQuIA0KDQo+ID4gKwkJZmN3LT5ybV9lID0gb3AtPmxkcGNfZGVjLmNiX3BhcmFtcy5lOw0KPiA+ ICsJZWxzZQ0KPiA+ICsJCWZjdy0+cm1fZSA9IChvcC0+bGRwY19kZWMudGJfcGFyYW1zLnIgPA0K PiA+ICsJCQkJb3AtPmxkcGNfZGVjLnRiX3BhcmFtcy5jYWIpID8NCj4gPiArCQkJCQkJb3AtPmxk cGNfZGVjLnRiX3BhcmFtcy5lYSA6DQo+ID4gKwkJCQkJCW9wLT5sZHBjX2RlYy50Yl9wYXJhbXMu ZWI7DQo+ID4gKw0KPiA+ICsJZmN3LT5oY2luX2VuID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5v cF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9JTl9FTkFCTEUpOw0K PiA+ICsJZmN3LT5oY291dF9lbiA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ ID4gKwkJCVJURV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVfT1VUX0VOQUJMRSk7DQo+ID4gKwlmY3ct PmNyY19zZWxlY3QgPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlS VEVfQkJERVZfTERQQ19DUkNfVFlQRV8yNEJfQ0hFQ0spOw0KPiA+ICsJZmN3LT5ieXBhc3NfZGVj ID0gY2hlY2tfYml0KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xE UENfREVDT0RFX0JZUEFTUyk7DQo+ID4gKwlmY3ctPmJ5cGFzc19pbnRsdiA9IGNoZWNrX2JpdChv cC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0RFSU5URVJMRUFW RVJfQllQQVNTKTsNCj4gPiArCWlmIChvcC0+bGRwY19kZWMucV9tID09IDEpIHsNCj4gPiArCQlm Y3ctPmJ5cGFzc19pbnRsdiA9IDE7DQo+ID4gKwkJZmN3LT5xbSA9IDI7DQo+ID4gKwl9DQo+IHNp bWlsYXIgbWFnaWMuDQoNClFtIGlzIGFuIGludGVnZXIgbnVtYmVyIGRlZmluZWQgaW4gM0dQUCwg bm90IGEgbWFnaWMgbnVtYmVyLiBUaGlzIGxpdGVyYWxseSBtZWFucyBxbSA9IDIuDQoNCj4gPiAr CWZjdy0+aGNpbl9kZWNvbXBfbW9kZSA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3Ms DQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0hBUlFfNkJJVF9DT01QUkVTU0lPTik7DQo+ID4gKwlm Y3ctPmhjb3V0X2NvbXBfbW9kZSA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ ID4gKwkJCVJURV9CQkRFVl9MRFBDX0hBUlFfNkJJVF9DT01QUkVTU0lPTik7DQo+ID4gKwlmY3ct Pmxscl9wYWNrX21vZGUgPSBjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJ CQlSVEVfQkJERVZfTERQQ19MTFJfQ09NUFJFU1NJT04pOw0KPiA+ICsJaGFycV9pbmRleCA9IG9w LT5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX291dHB1dC5vZmZzZXQgLw0KPiA+ICsJCQlBQ0MxMDBf SEFSUV9PRkZTRVQ7DQo+ID4gKyNpZmRlZiBBQ0MxMDBfRVhUX01FTQ0KPiA+ICsJLyogTGltaXQg Y2FzZXMgd2hlbiBIQVJRIHBydW5pbmcgaXMgdmFsaWQgKi8NCj4gPiArCWhhcnFfcHJ1biA9ICgo b3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lm9mZnNldCAlDQo+ID4gKwkJCUFDQzEw MF9IQVJRX09GRlNFVCkgPT0gMCkgJiYNCj4gPiArCQkJKG9wLT5sZHBjX2RlYy5oYXJxX2NvbWJp bmVkX291dHB1dC5vZmZzZXQgPD0NCj4gVUlOVDE2X01BWA0KPiA+ICsJCQkqIEFDQzEwMF9IQVJR X09GRlNFVCk7DQo+ID4gKyNlbmRpZg0KPiA+ICsJaWYgKGZjdy0+aGNpbl9lbiA+IDApIHsNCj4g PiArCQloYXJxX2luX2xlbmd0aCA9IG9wLQ0KPiA+bGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1 dC5sZW5ndGg7DQo+ID4gKwkJaWYgKGZjdy0+aGNpbl9kZWNvbXBfbW9kZSA+IDApDQo+ID4gKwkJ CWhhcnFfaW5fbGVuZ3RoID0gaGFycV9pbl9sZW5ndGggKiA4IC8gNjsNCj4gPiArCQloYXJxX2lu X2xlbmd0aCA9IFJURV9BTElHTihoYXJxX2luX2xlbmd0aCwgNjQpOw0KPiA+ICsJCWlmICgoaGFy cV9sYXlvdXRbaGFycV9pbmRleF0ub2Zmc2V0ID4gMCkgJiBoYXJxX3BydW4pIHsNCj4gPiArCQkJ cnRlX2JiZGV2X2xvZ19kZWJ1ZygiSEFSUSBJTiBvZmZzZXQgdW5leHBlY3RlZA0KPiBmb3Igbm93 XG4iKTsNCj4gPiArCQkJZmN3LT5oY2luX3NpemUwID0gaGFycV9sYXlvdXRbaGFycV9pbmRleF0u c2l6ZTA7DQo+ID4gKwkJCWZjdy0+aGNpbl9vZmZzZXQgPSBoYXJxX2xheW91dFtoYXJxX2luZGV4 XS5vZmZzZXQ7DQo+ID4gKwkJCWZjdy0+aGNpbl9zaXplMSA9IGhhcnFfaW5fbGVuZ3RoIC0NCj4g PiArCQkJCQloYXJxX2xheW91dFtoYXJxX2luZGV4XS5vZmZzZXQ7DQo+ID4gKwkJfSBlbHNlIHsN Cj4gPiArCQkJZmN3LT5oY2luX3NpemUwID0gaGFycV9pbl9sZW5ndGg7DQo+ID4gKwkJCWZjdy0+ aGNpbl9vZmZzZXQgPSAwOw0KPiA+ICsJCQlmY3ctPmhjaW5fc2l6ZTEgPSAwOw0KPiA+ICsJCX0N Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZmN3LT5oY2luX3NpemUwID0gMDsNCj4gPiArCQlmY3ct PmhjaW5fb2Zmc2V0ID0gMDsNCj4gPiArCQlmY3ctPmhjaW5fc2l6ZTEgPSAwOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWZjdy0+aXRtYXggPSBvcC0+bGRwY19kZWMuaXRlcl9tYXg7DQo+ID4gKwlm Y3ctPml0c3RvcCA9IGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJU RV9CQkRFVl9MRFBDX0lURVJBVElPTl9TVE9QX0VOQUJMRSk7DQo+ID4gKwlmY3ctPnN5bmRfcHJl Y29kZXIgPSBmY3ctPml0c3RvcDsNCj4gPiArCS8qDQo+ID4gKwkgKiBUaGVzZSBhcmUgYWxsIGlt cGxpY2l0bHkgc2V0DQo+ID4gKwkgKiBmY3ctPnN5bmRfcG9zdCA9IDA7DQo+ID4gKwkgKiBmY3ct PnNvX2VuID0gMDsNCj4gPiArCSAqIGZjdy0+c29fYnlwYXNzX3JtID0gMDsNCj4gPiArCSAqIGZj dy0+c29fYnlwYXNzX2ludGx2ID0gMDsNCj4gPiArCSAqIGZjdy0+ZGVjX2NvbnZsbHIgPSAwOw0K PiA+ICsJICogZmN3LT5oY291dF9jb252bGxyID0gMDsNCj4gPiArCSAqIGZjdy0+aGNvdXRfc2l6 ZTEgPSAwOw0KPiA+ICsJICogZmN3LT5zb19pdCA9IDA7DQo+ID4gKwkgKiBmY3ctPmhjb3V0X29m ZnNldCA9IDA7DQo+ID4gKwkgKiBmY3ctPm5lZ3N0b3BfdGggPSAwOw0KPiA+ICsJICogZmN3LT5u ZWdzdG9wX2l0ID0gMDsNCj4gPiArCSAqIGZjdy0+bmVnc3RvcF9lbiA9IDA7DQo+ID4gKwkgKiBm Y3ctPmdhaW5faSA9IDE7DQo+ID4gKwkgKiBmY3ctPmdhaW5faCA9IDE7DQo+ID4gKwkgKi8NCj4g PiArCWlmIChmY3ctPmhjb3V0X2VuID4gMCkgew0KPiA+ICsJCXBhcml0eV9vZmZzZXQgPSAob3At PmxkcGNfZGVjLmJhc2VncmFwaCA9PSAxID8gMjAgOiA4KQ0KPiA+ICsJCQkqIG9wLT5sZHBjX2Rl Yy56X2MgLSBvcC0+bGRwY19kZWMubl9maWxsZXI7DQo+ID4gKwkJazBfcCA9IChmY3ctPmswID4g cGFyaXR5X29mZnNldCkgPw0KPiA+ICsJCQkJZmN3LT5rMCAtIG9wLT5sZHBjX2RlYy5uX2ZpbGxl ciA6IGZjdy0+azA7DQo+ID4gKwkJbmNiX3AgPSBmY3ctPm5jYiAtIG9wLT5sZHBjX2RlYy5uX2Zp bGxlcjsNCj4gPiArCQlsID0gazBfcCArIGZjdy0+cm1fZTsNCj4gPiArCQloYXJxX291dF9sZW5n dGggPSAodWludDE2X3QpIGZjdy0+aGNpbl9zaXplMDsNCj4gPiArCQloYXJxX291dF9sZW5ndGgg PSBSVEVfTUlOKFJURV9NQVgoaGFycV9vdXRfbGVuZ3RoLCBsKSwNCj4gbmNiX3ApOw0KPiA+ICsJ CWhhcnFfb3V0X2xlbmd0aCA9IChoYXJxX291dF9sZW5ndGggKyAweDNGKSAmIDB4RkZDMDsNCj4g PiArCQlpZiAoKGswX3AgPiBmY3ctPmhjaW5fc2l6ZTAgKw0KPiBBQ0MxMDBfSEFSUV9PRkZTRVRf VEhSRVNIT0xEKSAmJg0KPiA+ICsJCQkJaGFycV9wcnVuKSB7DQo+ID4gKwkJCWZjdy0+aGNvdXRf c2l6ZTAgPSAodWludDE2X3QpIGZjdy0+aGNpbl9zaXplMDsNCj4gPiArCQkJZmN3LT5oY291dF9v ZmZzZXQgPSBrMF9wICYgMHhGRkMwOw0KPiA+ICsJCQlmY3ctPmhjb3V0X3NpemUxID0gaGFycV9v dXRfbGVuZ3RoIC0gZmN3LQ0KPiA+aGNvdXRfb2Zmc2V0Ow0KPiA+ICsJCX0gZWxzZSB7DQo+ID4g KwkJCWZjdy0+aGNvdXRfc2l6ZTAgPSBoYXJxX291dF9sZW5ndGg7DQo+ID4gKwkJCWZjdy0+aGNv dXRfc2l6ZTEgPSAwOw0KPiA+ICsJCQlmY3ctPmhjb3V0X29mZnNldCA9IDA7DQo+ID4gKwkJfQ0K PiA+ICsJCWhhcnFfbGF5b3V0W2hhcnFfaW5kZXhdLm9mZnNldCA9IGZjdy0+aGNvdXRfb2Zmc2V0 Ow0KPiA+ICsJCWhhcnFfbGF5b3V0W2hhcnFfaW5kZXhdLnNpemUwID0gZmN3LT5oY291dF9zaXpl MDsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZmN3LT5oY291dF9zaXplMCA9IDA7DQo+ID4gKwkJ ZmN3LT5oY291dF9zaXplMSA9IDA7DQo+ID4gKwkJZmN3LT5oY291dF9vZmZzZXQgPSAwOw0KPiA+ ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogRmlsbHMgZGVzY3JpcHRvciB3 aXRoIGRhdGEgcG9pbnRlcnMgb2Ygb25lIGJsb2NrIHR5cGUuDQo+ID4gKyAqDQo+ID4gKyAqIEBw YXJhbSBkZXNjDQo+ID4gKyAqICAgUG9pbnRlciB0byBETUEgZGVzY3JpcHRvci4NCj4gPiArICog QHBhcmFtIGlucHV0DQo+ID4gKyAqICAgUG9pbnRlciB0byBwb2ludGVyIHRvIGlucHV0IGRhdGEg d2hpY2ggd2lsbCBiZSBlbmNvZGVkLiBJdCBjYW4gYmUNCj4gY2hhbmdlZA0KPiA+ICsgKiAgIGFu ZCBwb2ludHMgdG8gbmV4dCBzZWdtZW50IGluIHNjYXR0ZXItZ2F0aGVyIGNhc2UuDQo+ID4gKyAq IEBwYXJhbSBvZmZzZXQNCj4gPiArICogICBJbnB1dCBvZmZzZXQgaW4gcnRlX21idWYgc3RydWN0 dXJlLiBJdCBpcyB1c2VkIGZvciBjYWxjdWxhdGluZyB0aGUgcG9pbnQNCj4gPiArICogICB3aGVy ZSBkYXRhIGlzIHN0YXJ0aW5nLg0KPiA+ICsgKiBAcGFyYW0gY2JfbGVuDQo+ID4gKyAqICAgTGVu Z3RoIG9mIGN1cnJlbnRseSBwcm9jZXNzZWQgQ29kZSBCbG9jaw0KPiA+ICsgKiBAcGFyYW0gc2Vn X3RvdGFsX2xlZnQNCj4gPiArICogICBJdCBpbmRpY2F0ZXMgaG93IG1hbnkgYnl0ZXMgc3RpbGwg bGVmdCBpbiBzZWdtZW50IChtYnVmKSBmb3IgZnVydGhlcg0KPiA+ICsgKiAgIHByb2Nlc3Npbmcu DQo+ID4gKyAqIEBwYXJhbSBvcF9mbGFncw0KPiA+ICsgKiAgIFN0b3JlIGluZm9ybWF0aW9uIGFi b3V0IGRldmljZSBjYXBhYmlsaXRpZXMNCj4gPiArICogQHBhcmFtIG5leHRfdHJpcGxldA0KPiA+ ICsgKiAgIEluZGV4IGZvciBBQ0MxMDAgRE1BIERlc2NyaXB0b3IgdHJpcGxldA0KPiA+ICsgKg0K PiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgUmV0dXJucyBpbmRleCBvZiBuZXh0IHRyaXBsZXQg b24gc3VjY2Vzcywgb3RoZXIgdmFsdWUgaWYgbGVuZ3RocyBvZg0KPiA+ICsgKiAgIHBrdCBhbmQg cHJvY2Vzc2VkIGNiIGRvIG5vdCBtYXRjaC4NCj4gPiArICoNCj4gPiArICovDQo+ID4gK3N0YXRp YyBpbmxpbmUgaW50DQo+ID4gK2FjYzEwMF9kbWFfZmlsbF9ibGtfdHlwZV9pbihzdHJ1Y3QgYWNj MTAwX2RtYV9yZXFfZGVzYyAqZGVzYywNCj4gPiArCQlzdHJ1Y3QgcnRlX21idWYgKippbnB1dCwg dWludDMyX3QgKm9mZnNldCwgdWludDMyX3QgY2JfbGVuLA0KPiA+ICsJCXVpbnQzMl90ICpzZWdf dG90YWxfbGVmdCwgaW50IG5leHRfdHJpcGxldCkNCj4gPiArew0KPiA+ICsJdWludDMyX3QgcGFy dF9sZW47DQo+ID4gKwlzdHJ1Y3QgcnRlX21idWYgKm0gPSAqaW5wdXQ7DQo+ID4gKw0KPiA+ICsJ cGFydF9sZW4gPSAoKnNlZ190b3RhbF9sZWZ0IDwgY2JfbGVuKSA/ICpzZWdfdG90YWxfbGVmdCA6 IGNiX2xlbjsNCj4gPiArCWNiX2xlbiAtPSBwYXJ0X2xlbjsNCj4gPiArCSpzZWdfdG90YWxfbGVm dCAtPSBwYXJ0X2xlbjsNCj4gPiArDQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0 XS5hZGRyZXNzID0NCj4gPiArCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQobSwgKm9mZnNldCk7 DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5ibGVuID0gcGFydF9sZW47DQo+ ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5ibGtpZCA9IEFDQzEwMF9ETUFfQkxL SURfSU47DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5sYXN0ID0gMDsNCj4g PiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmRtYV9leHQgPSAwOw0KPiA+ICsJKm9m ZnNldCArPSBwYXJ0X2xlbjsNCj4gPiArCW5leHRfdHJpcGxldCsrOw0KPiA+ICsNCj4gPiArCXdo aWxlIChjYl9sZW4gPiAwKSB7DQo+IA0KPiBTaW5jZSBjYl9sZW4gaXMgdW5zaWduZWQsIGEgYmV0 dGVyIGNoZWNrIHdvdWxkIGJlDQo+IA0KPiB3aGlsZSAoY2JfbGVuICE9IDApDQoNCldoeSB3b3Vs ZCB0aGlzIGJlIGJldHRlcj8NCg0KPiANCj4gPiArCQlpZiAobmV4dF90cmlwbGV0IDwgQUNDMTAw X0RNQV9NQVhfTlVNX1BPSU5URVJTICYmDQo+ID4gKwkJCQltLT5uZXh0ICE9IE5VTEwpIHsNCj4g PiArDQo+ID4gKwkJCW0gPSBtLT5uZXh0Ow0KPiA+ICsJCQkqc2VnX3RvdGFsX2xlZnQgPSBydGVf cGt0bWJ1Zl9kYXRhX2xlbihtKTsNCj4gPiArCQkJcGFydF9sZW4gPSAoKnNlZ190b3RhbF9sZWZ0 IDwgY2JfbGVuKSA/DQo+ID4gKwkJCQkJKnNlZ190b3RhbF9sZWZ0IDoNCj4gPiArCQkJCQljYl9s ZW47DQo+ID4gKwkJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3MgPQ0KPiA+ ICsJCQkJCXJ0ZV9wa3RtYnVmX2lvdmFfb2Zmc2V0KG0sIDApOw0KPiA+ICsJCQlkZXNjLT5kYXRh X3B0cnNbbmV4dF90cmlwbGV0XS5ibGVuID0gcGFydF9sZW47DQo+ID4gKwkJCWRlc2MtPmRhdGFf cHRyc1tuZXh0X3RyaXBsZXRdLmJsa2lkID0NCj4gPiArCQkJCQlBQ0MxMDBfRE1BX0JMS0lEX0lO Ow0KPiA+ICsJCQlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5sYXN0ID0gMDsNCj4gPiAr CQkJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uZG1hX2V4dCA9IDA7DQo+ID4gKwkJCWNi X2xlbiAtPSBwYXJ0X2xlbjsNCj4gPiArCQkJKnNlZ190b3RhbF9sZWZ0IC09IHBhcnRfbGVuOw0K PiANCj4gd2hlbiAqc2VjX3RvdGFsX2xlZnQgZ29lcyB0byB6ZXJvIGhlcmUsIHRoZXJlIHdpbGwg YmUgYSBsb3Qgb2YgaXRlcmF0aW9ucyBkb2luZw0KPiBub3RoaW5nLg0KPiANCj4gc2hvdWxkIHN0 b3AgZWFybHkuDQoNCk5vdCByZWFsbHksIGl0IHdvdWxkIHBpY2sgbmV4dCBtIGFueXdheSBhbmQg a2VlcCBhZGRpbmcgYnVmZmVyIGRlc2NyaXB0b3IgcG9pbnRlci4gDQoNCj4gDQo+ID4gKwkJCS8q IEluaXRpYWxpemluZyBvZmZzZXQgZm9yIG5leHQgc2VnbWVudCAobWJ1ZikgKi8NCj4gPiArCQkJ Km9mZnNldCA9IHBhcnRfbGVuOw0KPiA+ICsJCQluZXh0X3RyaXBsZXQrKzsNCj4gPiArCQl9IGVs c2Ugew0KPiA+ICsJCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPiArCQkJCSJTb21lIGRhdGEgc3Rp bGwgbGVmdCBmb3IgcHJvY2Vzc2luZzogIg0KPiA+ICsJCQkJImRhdGFfbGVmdDogJXUsIG5leHRf dHJpcGxldDogJXUsIG5leHRfbWJ1ZjoNCj4gJXAiLA0KPiA+ICsJCQkJY2JfbGVuLCBuZXh0X3Ry aXBsZXQsIG0tPm5leHQpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4g Kwl9DQo+ID4gKwkvKiBTdG9yaW5nIG5ldyBtYnVmIGFzIGl0IGNvdWxkIGJlIGNoYW5nZWQgaW4g c2NhdHRlci1nYXRoZXIgY2FzZSovDQo+ID4gKwkqaW5wdXQgPSBtOw0KPiA+ICsNCj4gPiArCXJl dHVybiBuZXh0X3RyaXBsZXQ7DQo+IA0KPiBjYWxsZXJzLCBhZnRlciBjaGVja2luZywgZGVjIHRo ZSByZXR1cm4uDQo+IA0KPiBNYXliZSBjaGFuZ2UgcmV0dXJuIHRvIG5leHRfdHJpcGxldC0tIGFu ZCBzYXZlIHRoZSBjYWxsZXJzIGZyb20gZG9pbmcgaXQuDQoNCkkgbWlzcyB5b3VyIHBvaW50DQoN Cj4gDQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEZpbGxzIGRlc2NyaXB0b3Igd2l0aCBkYXRhIHBv aW50ZXJzIG9mIG9uZSBibG9jayB0eXBlLg0KPiA+ICsgKiBSZXR1cm5zIGluZGV4IG9mIG5leHQg dHJpcGxldCBvbiBzdWNjZXNzLCBvdGhlciB2YWx1ZSBpZiBsZW5ndGhzIG9mDQo+ID4gKyAqIG91 dHB1dCBkYXRhIGFuZCBwcm9jZXNzZWQgbWJ1ZiBkbyBub3QgbWF0Y2guDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICthY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVfb3V0KHN0 cnVjdCBhY2MxMDBfZG1hX3JlcV9kZXNjICpkZXNjLA0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAq b3V0cHV0LCB1aW50MzJfdCBvdXRfb2Zmc2V0LA0KPiA+ICsJCXVpbnQzMl90IG91dHB1dF9sZW4s IGludCBuZXh0X3RyaXBsZXQsIGludCBibGtfaWQpDQo+ID4gK3sNCj4gPiArCWRlc2MtPmRhdGFf cHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3MgPQ0KPiA+ICsJCQlydGVfcGt0bWJ1Zl9pb3ZhX29m ZnNldChvdXRwdXQsIG91dF9vZmZzZXQpOw0KPiA+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJp cGxldF0uYmxlbiA9IG91dHB1dF9sZW47DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlw bGV0XS5ibGtpZCA9IGJsa19pZDsNCj4gPiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRd Lmxhc3QgPSAwOw0KPiA+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uZG1hX2V4dCA9 IDA7DQo+ID4gKwluZXh0X3RyaXBsZXQrKzsNCj4gDQo+IENhbGxlcnMgY2hlY2sgcmV0dXJuIGlz IDwgMCwgbGlrZSBhYm92ZSBidXQgdGhlcmUgaXMgbm8gc2ltaWxhciBsb2dpYyB0bw0KPiANCj4g Y2hlY2sgdGhlIGJvdW5kcyBvZiBuZXh0X3RyaXBsZXQgdG8gcmV0dXJuIC1FSU5WQUwNCj4gDQo+ IHNvIGFkZCB0aGlzIGNoZWNrIGhlcmUgb3IgcmVtb3ZlIHRoZSBpcyA8IDAgY2hlY2tzIGJ5IHRo ZSBjYWxsZXJzLg0KPiANCg0KZmFpciBlbm91Z2ggdGhhbmtzLiANCg0KPiA+ICsNCj4gPiArCXJl dHVybiBuZXh0X3RyaXBsZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50 DQo+ID4gK2FjYzEwMF9kbWFfZGVzY19sZV9maWxsKHN0cnVjdCBydGVfYmJkZXZfZW5jX29wICpv cCwNCj4gPiArCQlzdHJ1Y3QgYWNjMTAwX2RtYV9yZXFfZGVzYyAqZGVzYywgc3RydWN0IHJ0ZV9t YnVmICoqaW5wdXQsDQo+ID4gKwkJc3RydWN0IHJ0ZV9tYnVmICpvdXRwdXQsIHVpbnQzMl90ICpp bl9vZmZzZXQsDQo+ID4gKwkJdWludDMyX3QgKm91dF9vZmZzZXQsIHVpbnQzMl90ICpvdXRfbGVu Z3RoLA0KPiA+ICsJCXVpbnQzMl90ICptYnVmX3RvdGFsX2xlZnQsIHVpbnQzMl90ICpzZWdfdG90 YWxfbGVmdCkNCj4gPiArew0KPiA+ICsJaW50IG5leHRfdHJpcGxldCA9IDE7IC8qIEZDVyBhbHJl YWR5IGRvbmUgKi8NCj4gPiArCXVpbnQxNl90IEssIGluX2xlbmd0aF9pbl9iaXRzLCBpbl9sZW5n dGhfaW5fYnl0ZXM7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X29wX2xkcGNfZW5jICplbmMgPSAm b3AtPmxkcGNfZW5jOw0KPiA+ICsNCj4gPiArCWRlc2MtPndvcmQwID0gQUNDMTAwX0RNQV9ERVND X1RZUEU7DQo+ID4gKwlkZXNjLT53b3JkMSA9IDA7IC8qKjwgVGltZXN0YW1wIGNvdWxkIGJlIGRp c2FibGVkICovDQo+ID4gKwlkZXNjLT53b3JkMiA9IDA7DQo+ID4gKwlkZXNjLT53b3JkMyA9IDA7 DQo+ID4gKwlkZXNjLT5udW1DQnMgPSAxOw0KPiA+ICsNCj4gPiArCUsgPSAoZW5jLT5iYXNlZ3Jh cGggPT0gMSA/IDIyIDogMTApICogZW5jLT56X2M7DQo+ID4gKwlpbl9sZW5ndGhfaW5fYml0cyA9 IEsgLSBlbmMtPm5fZmlsbGVyOw0KPiBjYW4gdGhpcyBvdmVyZmxvdyA/IGVuYy0+bl9maWxsZXIg PiBLID8NCg0KSSB3b3VsZCBub3QgYWRkIHN1Y2ggY2hlY2tzIGluIHRoZSB0aW1lIGNyaXRpY2Fs IGZ1bmN0aW9uLiBGb3IgdmFsaWQgc2NlbmFyaW8gaXQgY2FuJ3QuDQpJdCBjb3VsZCBiZSBhZGRl ZCB0byB0aGUgdmFsaWRhdGVfbGRwY19kZWNfb3AoKSB3aGljaCBpcyBvbmx5IHJ1biBpbiBkZWJ1 ZyBtb2RlLg0KDQo+ID4gKwlpZiAoKGVuYy0+b3BfZmxhZ3MgJiBSVEVfQkJERVZfTERQQ19DUkNf MjRBX0FUVEFDSCkgfHwNCj4gPiArCQkJKGVuYy0+b3BfZmxhZ3MgJg0KPiBSVEVfQkJERVZfTERQ Q19DUkNfMjRCX0FUVEFDSCkpDQo+ID4gKwkJaW5fbGVuZ3RoX2luX2JpdHMgLT0gMjQ7DQo+ID4g Kwlpbl9sZW5ndGhfaW5fYnl0ZXMgPSBpbl9sZW5ndGhfaW5fYml0cyA+PiAzOw0KPiA+ICsNCj4g PiArCWlmICh1bmxpa2VseSgoKm1idWZfdG90YWxfbGVmdCA9PSAwKSB8fA0KPiBUaGlzIGNoZWNr IGlzIGNvdmVyZWQgYnkgdGhlIG5leHQgYW5kIGNhbiBiZSByZW1vdmVkLg0KDQpOb3QgbmVjZXNz YXJhbHksIHdvdWxkIGtlZXAgYXMgaXMuIA0KDQo+ID4gKwkJCSgqbWJ1Zl90b3RhbF9sZWZ0IDwg aW5fbGVuZ3RoX2luX2J5dGVzKSkpIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPiAr CQkJCSJNaXNtYXRjaCBiZXR3ZWVuIG1idWYgbGVuZ3RoIGFuZA0KPiBpbmNsdWRlZCBDQiBzaXpl czogbWJ1ZiBsZW4gJXUsIGNiIGxlbiAldSIsDQo+ID4gKwkJCQkqbWJ1Zl90b3RhbF9sZWZ0LCBp bl9sZW5ndGhfaW5fYnl0ZXMpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwluZXh0X3RyaXBsZXQgPSBhY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVfaW4oZGVzYywgaW5w dXQsIGluX29mZnNldCwNCj4gPiArCQkJaW5fbGVuZ3RoX2luX2J5dGVzLA0KPiA+ICsJCQlzZWdf dG90YWxfbGVmdCwgbmV4dF90cmlwbGV0KTsNCj4gPiArCWlmICh1bmxpa2VseShuZXh0X3RyaXBs ZXQgPCAwKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJCQkJIk1pc21hdGNo IGJldHdlZW4gZGF0YSB0byBwcm9jZXNzIGFuZA0KPiBtYnVmIGRhdGEgbGVuZ3RoIGluIGJiZGV2 X29wOiAlcCIsDQo+ID4gKwkJCQlvcCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldCAtIDFdLmxhc3QgPSAxOw0KPiA+ICsJZGVz Yy0+bTJkbGVuID0gbmV4dF90cmlwbGV0Ow0KPiA+ICsJKm1idWZfdG90YWxfbGVmdCAtPSBpbl9s ZW5ndGhfaW5fYnl0ZXM7DQo+IA0KPiBVcGRhdGluZyBvdXRwdXQgcG9pbnRlcnMgc2hvdWxkIGJl IGRlZmVycmVkIHVudGlsIHRoZSB0aGUgY2FsbCBpcyBrbm93biB0bw0KPiBiZSBzdWNjZXNzZnVs Lg0KPiANCj4gT3RoZXJ3aXNlIGNhbGxlciBpcyBsZWZ0IGluIGEgYmFkLCB1bmtub3duIHN0YXRl Lg0KDQpXZSBhbHJlYWR5IGhhZCB0byB0b3VjaCB0aGVtIGJ5IHRoYXQgcG9pbnQuDQoNCj4gDQo+ ID4gKw0KPiA+ICsJLyogU2V0IG91dHB1dCBsZW5ndGggKi8NCj4gPiArCS8qIEludGVnZXIgcm91 bmQgdXAgZGl2aXNpb24gYnkgOCAqLw0KPiA+ICsJKm91dF9sZW5ndGggPSAoZW5jLT5jYl9wYXJh bXMuZSArIDcpID4+IDM7DQo+ID4gKw0KPiA+ICsJbmV4dF90cmlwbGV0ID0gYWNjMTAwX2RtYV9m aWxsX2Jsa190eXBlX291dChkZXNjLCBvdXRwdXQsDQo+ICpvdXRfb2Zmc2V0LA0KPiA+ICsJCQkq b3V0X2xlbmd0aCwgbmV4dF90cmlwbGV0LA0KPiBBQ0MxMDBfRE1BX0JMS0lEX09VVF9FTkMpOw0K PiA+ICsJaWYgKHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7DQo+ID4gKwkJcnRlX2JiZGV2 X2xvZyhFUlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRhIHRvIHByb2Nlc3MgYW5k DQo+IG1idWYgZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwNCj4gPiArCQkJCW9wKTsNCj4g PiArCQlyZXR1cm4gLTE7DQo+ID4gKwl9DQo+ID4gKwlvcC0+bGRwY19lbmMub3V0cHV0Lmxlbmd0 aCArPSAqb3V0X2xlbmd0aDsNCj4gPiArCSpvdXRfb2Zmc2V0ICs9ICpvdXRfbGVuZ3RoOw0KPiA+ ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldCAtIDFdLmxhc3QgPSAxOw0KPiA+ICsJZGVz Yy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldCAtIDFdLmRtYV9leHQgPSAwOw0KPiA+ICsJZGVzYy0+ ZDJtbGVuID0gbmV4dF90cmlwbGV0IC0gZGVzYy0+bTJkbGVuOw0KPiA+ICsNCj4gPiArCWRlc2Mt Pm9wX2FkZHIgPSBvcDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGlubGluZSBpbnQNCj4gPiArYWNjMTAwX2RtYV9kZXNjX2xkX2ZpbGwoc3RydWN0 IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLA0KPiA+ICsJCXN0cnVjdCBhY2MxMDBfZG1hX3JlcV9kZXNj ICpkZXNjLA0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKmlucHV0LCBzdHJ1Y3QgcnRlX21idWYg Kmhfb3V0cHV0LA0KPiA+ICsJCXVpbnQzMl90ICppbl9vZmZzZXQsIHVpbnQzMl90ICpoX291dF9v ZmZzZXQsDQo+ID4gKwkJdWludDMyX3QgKmhfb3V0X2xlbmd0aCwgdWludDMyX3QgKm1idWZfdG90 YWxfbGVmdCwNCj4gPiArCQl1aW50MzJfdCAqc2VnX3RvdGFsX2xlZnQsDQo+ID4gKwkJc3RydWN0 IGFjYzEwMF9mY3dfbGQgKmZjdykNCj4gPiArew0KPiA+ICsJc3RydWN0IHJ0ZV9iYmRldl9vcF9s ZHBjX2RlYyAqZGVjID0gJm9wLT5sZHBjX2RlYzsNCj4gPiArCWludCBuZXh0X3RyaXBsZXQgPSAx OyAvKiBGQ1cgYWxyZWFkeSBkb25lICovDQo+ID4gKwl1aW50MzJfdCBpbnB1dF9sZW5ndGg7DQo+ ID4gKwl1aW50MTZfdCBvdXRwdXRfbGVuZ3RoLCBjcmMyNF9vdmVybGFwID0gMDsNCj4gPiArCXVp bnQxNl90IHN5c19jb2xzLCBLLCBoX3Bfc2l6ZSwgaF9ucF9zaXplOw0KPiA+ICsJYm9vbCBoX2Nv bXAgPSBjaGVja19iaXQoZGVjLT5vcF9mbGFncywNCj4gPiArCQkJUlRFX0JCREVWX0xEUENfSEFS UV82QklUX0NPTVBSRVNTSU9OKTsNCj4gPiArDQo+ID4gKwlkZXNjLT53b3JkMCA9IEFDQzEwMF9E TUFfREVTQ19UWVBFOw0KPiA+ICsJZGVzYy0+d29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3Vs ZCBiZSBkaXNhYmxlZCAqLw0KPiA+ICsJZGVzYy0+d29yZDIgPSAwOw0KPiA+ICsJZGVzYy0+d29y ZDMgPSAwOw0KPiA+ICsJZGVzYy0+bnVtQ0JzID0gMTsNCj4gVGhpcyBzZWVtcyB0byBiZSBhIGNv bW1vbiBzZXR1cCBsb2dpYywgbWF5YmUgdXNlIGEgbWFjcm8gb3IgaW5saW5lDQo+IGZ1bmN0aW9u Lg0KDQpmYWlyIGVub3VnaA0KDQo+ID4gKw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19k ZWMub3BfZmxhZ3MsDQo+ID4gKwkJCVJURV9CQkRFVl9MRFBDX0NSQ19UWVBFXzI0Ql9EUk9QKSkN Cj4gPiArCQljcmMyNF9vdmVybGFwID0gMjQ7DQo+ID4gKw0KPiA+ICsJLyogQ29tcHV0ZSBzb21l IExEUEMgQkcgbGVuZ3RocyAqLw0KPiA+ICsJaW5wdXRfbGVuZ3RoID0gZGVjLT5jYl9wYXJhbXMu ZTsNCj4gPiArCWlmIChjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdzLA0KPiA+ICsJCQlS VEVfQkJERVZfTERQQ19MTFJfQ09NUFJFU1NJT04pKQ0KPiA+ICsJCWlucHV0X2xlbmd0aCA9IChp bnB1dF9sZW5ndGggKiAzICsgMykgLyA0Ow0KPiA+ICsJc3lzX2NvbHMgPSAoZGVjLT5iYXNlZ3Jh cGggPT0gMSkgPyAyMiA6IDEwOw0KPiA+ICsJSyA9IHN5c19jb2xzICogZGVjLT56X2M7DQo+ID4g KwlvdXRwdXRfbGVuZ3RoID0gSyAtIGRlYy0+bl9maWxsZXIgLSBjcmMyNF9vdmVybGFwOw0KPiA+ ICsNCj4gPiArCWlmICh1bmxpa2VseSgoKm1idWZfdG90YWxfbGVmdCA9PSAwKSB8fA0KPiBzaW1p bGFyIHRvIGFib3ZlLCB0aGlzIGNoZWNrIGNhbiBiZSByZW1vdmVkLg0KDQpzYW1lIGNvbW1lbnQN Cg0KPiA+ICsJCQkoKm1idWZfdG90YWxfbGVmdCA8IGlucHV0X2xlbmd0aCkpKSB7DQo+ID4gKwkJ cnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBtYnVmIGxlbmd0 aCBhbmQNCj4gaW5jbHVkZWQgQ0Igc2l6ZXM6IG1idWYgbGVuICV1LCBjYiBsZW4gJXUiLA0KPiA+ ICsJCQkJKm1idWZfdG90YWxfbGVmdCwgaW5wdXRfbGVuZ3RoKTsNCj4gPiArCQlyZXR1cm4gLTE7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbmV4dF90cmlwbGV0ID0gYWNjMTAwX2RtYV9maWxsX2Js a190eXBlX2luKGRlc2MsIGlucHV0LA0KPiA+ICsJCQlpbl9vZmZzZXQsIGlucHV0X2xlbmd0aCwN Cj4gPiArCQkJc2VnX3RvdGFsX2xlZnQsIG5leHRfdHJpcGxldCk7DQo+ID4gKw0KPiA+ICsJaWYg KHVubGlrZWx5KG5leHRfdHJpcGxldCA8IDApKSB7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZyhFUlIs DQo+ID4gKwkJCQkiTWlzbWF0Y2ggYmV0d2VlbiBkYXRhIHRvIHByb2Nlc3MgYW5kDQo+IG1idWYg ZGF0YSBsZW5ndGggaW4gYmJkZXZfb3A6ICVwIiwNCj4gPiArCQkJCW9wKTsNCj4gPiArCQlyZXR1 cm4gLTE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19kZWMu b3BfZmxhZ3MsDQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9JTl9FTkFCTEUp KSB7DQo+ID4gKwkJaF9wX3NpemUgPSBmY3ctPmhjaW5fc2l6ZTAgKyBmY3ctPmhjaW5fc2l6ZTE7 DQo+ID4gKwkJaWYgKGhfY29tcCkNCj4gPiArCQkJaF9wX3NpemUgPSAoaF9wX3NpemUgKiAzICsg MykgLyA0Ow0KPiA+ICsJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3MgPQ0K PiA+ICsJCQkJZGVjLT5oYXJxX2NvbWJpbmVkX2lucHV0Lm9mZnNldDsNCj4gPiArCQlkZXNjLT5k YXRhX3B0cnNbbmV4dF90cmlwbGV0XS5ibGVuID0gaF9wX3NpemU7DQo+ID4gKwkJZGVzYy0+ZGF0 YV9wdHJzW25leHRfdHJpcGxldF0uYmxraWQgPQ0KPiBBQ0MxMDBfRE1BX0JMS0lEX0lOX0hBUlE7 DQo+ID4gKwkJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uZG1hX2V4dCA9IDE7DQo+ID4g KyNpZm5kZWYgQUNDMTAwX0VYVF9NRU0NCj4gPiArCQlhY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVf b3V0KA0KPiA+ICsJCQkJZGVzYywNCj4gPiArCQkJCW9wLT5sZHBjX2RlYy5oYXJxX2NvbWJpbmVk X2lucHV0LmRhdGEsDQo+ID4gKwkJCQlvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9pbnB1dC5v ZmZzZXQsDQo+ID4gKwkJCQloX3Bfc2l6ZSwNCj4gPiArCQkJCW5leHRfdHJpcGxldCwNCj4gPiAr CQkJCUFDQzEwMF9ETUFfQkxLSURfSU5fSEFSUSk7DQo+ID4gKyNlbmRpZg0KPiA+ICsJCW5leHRf dHJpcGxldCsrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3Ry aXBsZXQgLSAxXS5sYXN0ID0gMTsNCj4gPiArCWRlc2MtPm0yZGxlbiA9IG5leHRfdHJpcGxldDsN Cj4gPiArCSptYnVmX3RvdGFsX2xlZnQgLT0gaW5wdXRfbGVuZ3RoOw0KPiA+ICsNCj4gPiArCW5l eHRfdHJpcGxldCA9IGFjYzEwMF9kbWFfZmlsbF9ibGtfdHlwZV9vdXQoZGVzYywgaF9vdXRwdXQs DQo+ID4gKwkJCSpoX291dF9vZmZzZXQsIG91dHB1dF9sZW5ndGggPj4gMywgbmV4dF90cmlwbGV0 LA0KPiA+ICsJCQlBQ0MxMDBfRE1BX0JMS0lEX09VVF9IQVJEKTsNCj4gPiArCWlmICh1bmxpa2Vs eShuZXh0X3RyaXBsZXQgPCAwKSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJ CQkJIk1pc21hdGNoIGJldHdlZW4gZGF0YSB0byBwcm9jZXNzIGFuZA0KPiBtYnVmIGRhdGEgbGVu Z3RoIGluIGJiZGV2X29wOiAlcCIsDQo+ID4gKwkJCQlvcCk7DQo+ID4gKwkJcmV0dXJuIC0xOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChjaGVja19iaXQob3AtPmxkcGNfZGVjLm9wX2ZsYWdz LA0KPiA+ICsNCj4gCVJURV9CQkRFVl9MRFBDX0hRX0NPTUJJTkVfT1VUX0VOQUJMRSkpIHsNCj4g PiArCQkvKiBQcnVuZWQgc2l6ZSBvZiB0aGUgSEFSUSAqLw0KPiA+ICsJCWhfcF9zaXplID0gZmN3 LT5oY291dF9zaXplMCArIGZjdy0+aGNvdXRfc2l6ZTE7DQo+ID4gKwkJLyogTm9uLVBydW5lZCBz aXplIG9mIHRoZSBIQVJRICovDQo+ID4gKwkJaF9ucF9zaXplID0gZmN3LT5oY291dF9vZmZzZXQg PiAwID8NCj4gPiArCQkJCWZjdy0+aGNvdXRfb2Zmc2V0ICsgZmN3LT5oY291dF9zaXplMSA6DQo+ ID4gKwkJCQloX3Bfc2l6ZTsNCj4gPiArCQlpZiAoaF9jb21wKSB7DQo+ID4gKwkJCWhfbnBfc2l6 ZSA9IChoX25wX3NpemUgKiAzICsgMykgLyA0Ow0KPiA+ICsJCQloX3Bfc2l6ZSA9IChoX3Bfc2l6 ZSAqIDMgKyAzKSAvIDQ7DQo+IA0KPiAqIDQgLTEgKSAvIDQNCj4gDQo+IG1heSBwcm9kdWNlIGJl dHRlciBhc3NlbWJseS4NCg0KdGhhdCBpcyBub3QgdGhlIHNhbWUgYXJpdGhtZXRpYw0KDQo+IA0K PiA+ICsJCX0NCj4gPiArCQlkZWMtPmhhcnFfY29tYmluZWRfb3V0cHV0Lmxlbmd0aCA9IGhfbnBf c2l6ZTsNCj4gPiArCQlkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5hZGRyZXNzID0NCj4g PiArCQkJCWRlYy0+aGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0Ow0KPiA+ICsJCWRlc2MtPmRh dGFfcHRyc1tuZXh0X3RyaXBsZXRdLmJsZW4gPSBoX3Bfc2l6ZTsNCj4gPiArCQlkZXNjLT5kYXRh X3B0cnNbbmV4dF90cmlwbGV0XS5ibGtpZCA9DQo+IEFDQzEwMF9ETUFfQkxLSURfT1VUX0hBUlE7 DQo+ID4gKwkJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uZG1hX2V4dCA9IDE7DQo+ID4g KyNpZm5kZWYgQUNDMTAwX0VYVF9NRU0NCj4gPiArCQlhY2MxMDBfZG1hX2ZpbGxfYmxrX3R5cGVf b3V0KA0KPiA+ICsJCQkJZGVzYywNCj4gPiArCQkJCWRlYy0+aGFycV9jb21iaW5lZF9vdXRwdXQu ZGF0YSwNCj4gPiArCQkJCWRlYy0+aGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0LA0KPiA+ICsJ CQkJaF9wX3NpemUsDQo+ID4gKwkJCQluZXh0X3RyaXBsZXQsDQo+ID4gKwkJCQlBQ0MxMDBfRE1B X0JMS0lEX09VVF9IQVJRKTsNCj4gPiArI2VuZGlmDQo+ID4gKwkJbmV4dF90cmlwbGV0Kys7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJKmhfb3V0X2xlbmd0aCA9IG91dHB1dF9sZW5ndGggPj4gMzsN Cj4gPiArCWRlYy0+aGFyZF9vdXRwdXQubGVuZ3RoICs9ICpoX291dF9sZW5ndGg7DQo+ID4gKwkq aF9vdXRfb2Zmc2V0ICs9ICpoX291dF9sZW5ndGg7DQo+ID4gKwlkZXNjLT5kYXRhX3B0cnNbbmV4 dF90cmlwbGV0IC0gMV0ubGFzdCA9IDE7DQo+ID4gKwlkZXNjLT5kMm1sZW4gPSBuZXh0X3RyaXBs ZXQgLSBkZXNjLT5tMmRsZW47DQo+ID4gKw0KPiA+ICsJZGVzYy0+b3BfYWRkciA9IG9wOw0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZv aWQNCj4gPiArYWNjMTAwX2RtYV9kZXNjX2xkX3VwZGF0ZShzdHJ1Y3QgcnRlX2JiZGV2X2RlY19v cCAqb3AsDQo+ID4gKwkJc3RydWN0IGFjYzEwMF9kbWFfcmVxX2Rlc2MgKmRlc2MsDQo+ID4gKwkJ c3RydWN0IHJ0ZV9tYnVmICppbnB1dCwgc3RydWN0IHJ0ZV9tYnVmICpoX291dHB1dCwNCj4gPiAr CQl1aW50MzJfdCAqaW5fb2Zmc2V0LCB1aW50MzJfdCAqaF9vdXRfb2Zmc2V0LA0KPiA+ICsJCXVp bnQzMl90ICpoX291dF9sZW5ndGgsDQo+ID4gKwkJdW5pb24gYWNjMTAwX2hhcnFfbGF5b3V0X2Rh dGEgKmhhcnFfbGF5b3V0KQ0KPiA+ICt7DQo+ID4gKwlpbnQgbmV4dF90cmlwbGV0ID0gMTsgLyog RkNXIGFscmVhZHkgZG9uZSAqLw0KPiA+ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0u YWRkcmVzcyA9DQo+ID4gKwkJCXJ0ZV9wa3RtYnVmX2lvdmFfb2Zmc2V0KGlucHV0LCAqaW5fb2Zm c2V0KTsNCj4gPiArCW5leHRfdHJpcGxldCsrOw0KPiANCj4gTm8gb3ZlcmZsb3cgY2hlY2tzIG9u IG5leHRfdHJpcGxldA0KPiANCj4gVGhpcyBpcyBhIGdlbmVyYWwgcHJvYmxlbS4NCg0KSSBkb250 IHNlZSB0aGUgb3ZlcmZsb3cgcmlzay4NCg0KPiANCj4gPiArDQo+ID4gKwlpZiAoY2hlY2tfYml0 KG9wLT5sZHBjX2RlYy5vcF9mbGFncywNCj4gPiArDQo+IAlSVEVfQkJERVZfTERQQ19IUV9DT01C SU5FX0lOX0VOQUJMRSkpIHsNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X29wX2RhdGEgaGkgPSBv cC0NCj4gPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfaW5wdXQ7DQo+ID4gKwkJZGVzYy0+ZGF0YV9w dHJzW25leHRfdHJpcGxldF0uYWRkcmVzcyA9IGhpLm9mZnNldDsNCj4gPiArI2lmbmRlZiBBQ0Mx MDBfRVhUX01FTQ0KPiA+ICsJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3Mg PQ0KPiA+ICsJCQkJcnRlX3BrdG1idWZfaW92YV9vZmZzZXQoaGkuZGF0YSwgaGkub2Zmc2V0KTsN Cj4gPiArI2VuZGlmDQo+ID4gKwkJbmV4dF90cmlwbGV0Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJZGVzYy0+ZGF0YV9wdHJzW25leHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4gKwkJCXJ0ZV9w a3RtYnVmX2lvdmFfb2Zmc2V0KGhfb3V0cHV0LCAqaF9vdXRfb2Zmc2V0KTsNCj4gPiArCSpoX291 dF9sZW5ndGggPSBkZXNjLT5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5ibGVuOw0KPiA+ICsJbmV4 dF90cmlwbGV0Kys7DQo+ID4gKw0KPiA+ICsJaWYgKGNoZWNrX2JpdChvcC0+bGRwY19kZWMub3Bf ZmxhZ3MsDQo+ID4gKw0KPiAJUlRFX0JCREVWX0xEUENfSFFfQ09NQklORV9PVVRfRU5BQkxFKSkg ew0KPiA+ICsJCWRlc2MtPmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmFkZHJlc3MgPQ0KPiA+ICsJ CQkJb3AtPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lm9mZnNldDsNCj4gPiArCQkvKiBB ZGp1c3QgYmFzZWQgb24gcHJldmlvdXMgb3BlcmF0aW9uICovDQo+ID4gKwkJc3RydWN0IHJ0ZV9i YmRldl9kZWNfb3AgKnByZXZfb3AgPSBkZXNjLT5vcF9hZGRyOw0KPiA+ICsJCW9wLT5sZHBjX2Rl Yy5oYXJxX2NvbWJpbmVkX291dHB1dC5sZW5ndGggPQ0KPiA+ICsJCQkJcHJldl9vcC0NCj4gPmxk cGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lmxlbmd0aDsNCj4gPiArCQlpbnQxNl90IGhxX2lk eCA9IG9wLQ0KPiA+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQub2Zmc2V0IC8NCj4gPiAr CQkJCUFDQzEwMF9IQVJRX09GRlNFVDsNCj4gPiArCQlpbnQxNl90IHByZXZfaHFfaWR4ID0NCj4g PiArCQkJCXByZXZfb3AtDQo+ID5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX291dHB1dC5vZmZzZXQN Cj4gPiArCQkJCS8gQUNDMTAwX0hBUlFfT0ZGU0VUOw0KPiA+ICsJCWhhcnFfbGF5b3V0W2hxX2lk eF0udmFsID0gaGFycV9sYXlvdXRbcHJldl9ocV9pZHhdLnZhbDsNCj4gPiArI2lmbmRlZiBBQ0Mx MDBfRVhUX01FTQ0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfb3BfZGF0YSBobyA9DQo+ID4gKwkJ CQlvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQ7DQo+ID4gKwkJZGVzYy0+ZGF0YV9w dHJzW25leHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4gKwkJCQlydGVfcGt0bWJ1Zl9pb3ZhX29m ZnNldChoby5kYXRhLCBoby5vZmZzZXQpOw0KPiA+ICsjZW5kaWYNCj4gPiArCQluZXh0X3RyaXBs ZXQrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlvcC0+bGRwY19kZWMuaGFyZF9vdXRwdXQubGVu Z3RoICs9ICpoX291dF9sZW5ndGg7DQo+ID4gKwlkZXNjLT5vcF9hZGRyID0gb3A7DQo+ID4gK30N Cj4gPiArDQo+ID4gKw0KPiA+ICsvKiBFbnF1ZXVlIGEgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8g SFcgYW5kIHVwZGF0ZSBzb2Z0d2FyZSByaW5ncyAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQN Cj4gPiArYWNjMTAwX2RtYV9lbnF1ZXVlKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsIHVpbnQxNl90 IG4sDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9zdGF0cyAqcXVldWVfc3RhdHMpDQo+ID4gK3sN Cj4gPiArCXVuaW9uIGFjYzEwMF9lbnF1ZXVlX3JlZ19mbXQgZW5xX3JlcTsNCj4gPiArI2lmZGVm IFJURV9CQkRFVl9PRkZMT0FEX0NPU1QNCj4gPiArCXVpbnQ2NF90IHN0YXJ0X3RpbWUgPSAwOw0K PiA+ICsJcXVldWVfc3RhdHMtPmFjY19vZmZsb2FkX2N5Y2xlcyA9IDA7DQo+ID4gKwlSVEVfU0VU X1VTRUQocXVldWVfc3RhdHMpOw0KPiA+ICsjZWxzZQ0KPiA+ICsJUlRFX1NFVF9VU0VEKHF1ZXVl X3N0YXRzKTsNCj4gPiArI2VuZGlmDQo+IA0KPiBSVEVfU0VUX1VOVVNFRCguLi4gaXMgY29tbW9u IGluIHRoZSAjaWZkZWYvI2Vsc2UNCj4gDQo+IHNvIGl0IHNob3VsZCBiZSBtb3ZlZCBvdXQuDQoN Cm9rDQoNCj4gDQo+ID4gKw0KPiA+ICsJZW5xX3JlcS52YWwgPSAwOw0KPiA+ICsJLyogU2V0dGlu ZyBvZmZzZXQsIDEwMGIgZm9yIDI1NiBETUEgRGVzYyAqLw0KPiA+ICsJZW5xX3JlcS5hZGRyX29m ZnNldCA9IEFDQzEwMF9ERVNDX09GRlNFVDsNCj4gPiArDQo+IHNob3VsZCBuICE9IDAgYmUgY2hl Y2tlZCBoZXJlID8NCg0KVGhpcyBpcyBhbGwgY2hlY2tlZCBiZWZvcmUgdGhhdCBwb2ludC4gDQoN Cj4gPiArCS8qIFNwbGl0IG9wcyBpbnRvIGJhdGNoZXMgKi8NCj4gPiArCWRvIHsNCj4gPiArCQl1 bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2M7DQo+ID4gKwkJdWludDE2X3QgZW5xX2JhdGNoX3Np emU7DQo+ID4gKwkJdWludDY0X3Qgb2Zmc2V0Ow0KPiA+ICsJCXJ0ZV9pb3ZhX3QgcmVxX2VsZW1f YWRkcjsNCj4gPiArDQo+ID4gKwkJZW5xX2JhdGNoX3NpemUgPSBSVEVfTUlOKG4sIE1BWF9FTlFf QkFUQ0hfU0laRSk7DQo+ID4gKw0KPiA+ICsJCS8qIFNldCBmbGFnIG9uIGxhc3QgZGVzY3JpcHRv ciBpbiBhIGJhdGNoICovDQo+ID4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmlu Z19oZWFkICsgZW5xX2JhdGNoX3NpemUgLQ0KPiAxKSAmDQo+ID4gKwkJCQlxLT5zd19yaW5nX3dy YXBfbWFzayk7DQo+ID4gKwkJZGVzYy0+cmVxLmxhc3RfZGVzY19pbl9iYXRjaCA9IDE7DQo+ID4g Kw0KPiA+ICsJCS8qIENhbGN1bGF0ZSB0aGUgMXN0IGRlc2NyaXB0b3IncyBhZGRyZXNzICovDQo+ ID4gKwkJb2Zmc2V0ID0gKChxLT5zd19yaW5nX2hlYWQgJiBxLT5zd19yaW5nX3dyYXBfbWFzaykg Kg0KPiA+ICsJCQkJc2l6ZW9mKHVuaW9uIGFjYzEwMF9kbWFfZGVzYykpOw0KPiA+ICsJCXJlcV9l bGVtX2FkZHIgPSBxLT5yaW5nX2FkZHJfcGh5cyArIG9mZnNldDsNCj4gPiArDQo+ID4gKwkJLyog RmlsbCBlbnF1ZXVlIHN0cnVjdCAqLw0KPiA+ICsJCWVucV9yZXEubnVtX2VsZW0gPSBlbnFfYmF0 Y2hfc2l6ZTsNCj4gPiArCQkvKiBsb3cgNiBiaXRzIGFyZSBub3QgbmVlZGVkICovDQo+ID4gKwkJ ZW5xX3JlcS5yZXFfZWxlbV9hZGRyID0gKHVpbnQzMl90KShyZXFfZWxlbV9hZGRyID4+IDYpOw0K PiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPiArCQlydGVfbWVt ZHVtcChzdGRlcnIsICJSZXEgc2RvbmUiLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsNCj4gPiArI2Vu ZGlmDQo+ID4gKwkJcnRlX2JiZGV2X2xvZ19kZWJ1ZygNCj4gPiArCQkJCSJFbnF1ZXVlICV1IHJl cXMgKHBoeXMgJSMiUFJJeDY0IikgdG8gcmVnDQo+ICVwIiwNCj4gPiArCQkJCWVucV9iYXRjaF9z aXplLA0KPiA+ICsJCQkJcmVxX2VsZW1fYWRkciwNCj4gPiArCQkJCSh2b2lkICopcS0+bW1pb19y ZWdfZW5xdWV1ZSk7DQo+ID4gKw0KPiA+ICsJCXJ0ZV93bWIoKTsNCj4gPiArDQo+ID4gKyNpZmRl ZiBSVEVfQkJERVZfT0ZGTE9BRF9DT1NUDQo+ID4gKwkJLyogU3RhcnQgdGltZSBtZWFzdXJlbWVu dCBmb3IgZW5xdWV1ZSBmdW5jdGlvbiBvZmZsb2FkLiAqLw0KPiA+ICsJCXN0YXJ0X3RpbWUgPSBy dGVfcmR0c2NfcHJlY2lzZSgpOw0KPiA+ICsjZW5kaWYNCj4gPiArCQlydGVfYmJkZXZfbG9nKERF QlVHLCAiRGVidWcgOiBNTUlPIEVucXVldWUiKTsNCj4gDQo+IGxvZ2dpbmcgdGltZSB3aWxsIGJl IHRyYWNrZWQgd2l0aCB0aGUgbW1pb193cml0ZQ0KPiANCj4gc28gbG9nZ2luZyBzaG91bGQgYmUg bW92ZWQgYWJvdmUgdGhlIHN0YXJ0X3RpbWUgc2V0dGluZw0KDQpOb3QgcmVxdWlyZWQuIFJ1bm5p bmcgd2l0aCBkZWJ1ZyB0cmFjZXMgaXMgZXhwZWN0ZWQgdG8gbWFrZSByZWFsIHRpbWUgb2ZmbG9h ZCBtZWFzdXJlbWVudCBpcnJlbGV2YW50Lg0KDQo+IA0KPiA+ICsJCW1taW9fd3JpdGUocS0+bW1p b19yZWdfZW5xdWV1ZSwgZW5xX3JlcS52YWwpOw0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9CQkRF Vl9PRkZMT0FEX0NPU1QNCj4gPiArCQlxdWV1ZV9zdGF0cy0+YWNjX29mZmxvYWRfY3ljbGVzICs9 DQo+ID4gKwkJCQlydGVfcmR0c2NfcHJlY2lzZSgpIC0gc3RhcnRfdGltZTsNCj4gPiArI2VuZGlm DQo+ID4gKw0KPiA+ICsJCXEtPmFxX2VucXVldWVkKys7DQo+ID4gKwkJcS0+c3dfcmluZ19oZWFk ICs9IGVucV9iYXRjaF9zaXplOw0KPiA+ICsJCW4gLT0gZW5xX2JhdGNoX3NpemU7DQo+ID4gKw0K PiA+ICsJfSB3aGlsZSAobik7DQo+ID4gKw0KPiA+ICsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyog RW5xdWV1ZSBvbmUgZW5jb2RlIG9wZXJhdGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UgaW4gQ0IgbW9k ZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICtlbnF1ZXVlX2xkcGNfZW5jX25fb3Bf Y2Ioc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9lbmNfb3AgKipv cHMsDQo+ID4gKwkJdWludDE2X3QgdG90YWxfZW5xdWV1ZWRfY2JzLCBpbnQxNl90IG51bSkNCj4g PiArew0KPiA+ICsJdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjID0gTlVMTDsNCj4gPiArCXVp bnQzMl90IG91dF9sZW5ndGg7DQo+ID4gKwlzdHJ1Y3QgcnRlX21idWYgKm91dHB1dF9oZWFkLCAq b3V0cHV0Ow0KPiA+ICsJaW50IGksIG5leHRfdHJpcGxldDsNCj4gPiArCXVpbnQxNl90ICBpbl9s ZW5ndGhfaW5fYnl0ZXM7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X29wX2xkcGNfZW5jICplbmMg PSAmb3BzWzBdLT5sZHBjX2VuYzsNCj4gPiArDQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9ICgo cS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jp bmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4g PiArCWFjYzEwMF9mY3dfbGVfZmlsbChvcHNbMF0sICZkZXNjLT5yZXEuZmN3X2xlLCBudW0pOw0K PiA+ICsNCj4gPiArCS8qKiBUaGlzIGNvdWxkIGJlIGRvbmUgYXQgcG9sbGluZyAqLw0KPiA+ICsJ ZGVzYy0+cmVxLndvcmQwID0gQUNDMTAwX0RNQV9ERVNDX1RZUEU7DQo+ID4gKwlkZXNjLT5yZXEu d29yZDEgPSAwOyAvKio8IFRpbWVzdGFtcCBjb3VsZCBiZSBkaXNhYmxlZCAqLw0KPiA+ICsJZGVz Yy0+cmVxLndvcmQyID0gMDsNCj4gPiArCWRlc2MtPnJlcS53b3JkMyA9IDA7DQo+ID4gKwlkZXNj LT5yZXEubnVtQ0JzID0gbnVtOw0KPiA+ICsNCj4gPiArCWluX2xlbmd0aF9pbl9ieXRlcyA9IG9w c1swXS0+bGRwY19lbmMuaW5wdXQuZGF0YS0+ZGF0YV9sZW47DQo+ID4gKwlvdXRfbGVuZ3RoID0g KGVuYy0+Y2JfcGFyYW1zLmUgKyA3KSA+PiAzOw0KPiA+ICsJZGVzYy0+cmVxLm0yZGxlbiA9IDEg KyBudW07DQo+ID4gKwlkZXNjLT5yZXEuZDJtbGVuID0gbnVtOw0KPiA+ICsJbmV4dF90cmlwbGV0 ID0gMTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsNCj4gaSBpcyBu b3QgbmVlZGVkIGhlcmUsIGl0IGlzIG5leHRfdHJpcGxldCAtIDENCg0Kd291bGQgaW1wYWN0IHJl YWRhYmlsaXR5IGFzIHRoZXNlIHJlZmVyIHRvIGRpZmZlcmVudCBjb25jZXB0cyAoY29kZSBibG9j a3MgYW5kIGJkZXNjcykuDQpXb3VsZCBrZWVwIGFzIGlzDQoNCj4gPiArCQlkZXNjLT5yZXEuZGF0 YV9wdHJzW25leHRfdHJpcGxldF0uYWRkcmVzcyA9DQo+ID4gKwkJCXJ0ZV9wa3RtYnVmX2lvdmFf b2Zmc2V0KG9wc1tpXS0NCj4gPmxkcGNfZW5jLmlucHV0LmRhdGEsIDApOw0KPiA+ICsJCWRlc2Mt PnJlcS5kYXRhX3B0cnNbbmV4dF90cmlwbGV0XS5ibGVuID0gaW5fbGVuZ3RoX2luX2J5dGVzOw0K PiA+ICsJCW5leHRfdHJpcGxldCsrOw0KPiA+ICsJCWRlc2MtPnJlcS5kYXRhX3B0cnNbbmV4dF90 cmlwbGV0XS5hZGRyZXNzID0NCj4gPiArCQkJCXJ0ZV9wa3RtYnVmX2lvdmFfb2Zmc2V0KA0KPiA+ ICsJCQkJb3BzW2ldLT5sZHBjX2VuYy5vdXRwdXQuZGF0YSwgMCk7DQo+ID4gKwkJZGVzYy0+cmVx LmRhdGFfcHRyc1tuZXh0X3RyaXBsZXRdLmJsZW4gPSBvdXRfbGVuZ3RoOw0KPiA+ICsJCW5leHRf dHJpcGxldCsrOw0KPiA+ICsJCW9wc1tpXS0+bGRwY19lbmMub3V0cHV0Lmxlbmd0aCA9IG91dF9s ZW5ndGg7DQo+ID4gKwkJb3V0cHV0X2hlYWQgPSBvdXRwdXQgPSBvcHNbaV0tPmxkcGNfZW5jLm91 dHB1dC5kYXRhOw0KPiA+ICsJCW1idWZfYXBwZW5kKG91dHB1dF9oZWFkLCBvdXRwdXQsIG91dF9s ZW5ndGgpOw0KPiA+ICsJCW91dHB1dC0+ZGF0YV9sZW4gPSBvdXRfbGVuZ3RoOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWRlc2MtPnJlcS5vcF9hZGRyID0gb3BzWzBdOw0KPiA+ICsNCj4gPiArI2lm ZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZD VyIsICZkZXNjLT5yZXEuZmN3X2xlLA0KPiA+ICsJCQlzaXplb2YoZGVzYy0+cmVxLmZjd19sZSkg LSA4KTsNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVv ZigqZGVzYykpOw0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKwkvKiBPbmUgQ0IgKG9uZSBvcCkg d2FzIHN1Y2Nlc3NmdWxseSBwcmVwYXJlZCB0byBlbnF1ZXVlICovDQo+ID4gKwlyZXR1cm4gbnVt Ow0KPiANCj4gY2FsbGVyIGRvZXMgbm90IHVzZSBudW0sIG9ubHkgY2hlY2sgaWYgPCAwDQo+IA0K PiBTbyBjb3VsZCBjaGFuZ2UgdG8gcmV0dXJuIDANCg0Kd291bGQga2VlcCBhcyBpcyBmb3IgZGVi dWcNCg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRW5xdWV1ZSBvbmUgZW5jb2RlIG9wZXJh dGlvbnMgZm9yIEFDQzEwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5l IGludA0KPiA+ICtlbnF1ZXVlX2xkcGNfZW5jX29uZV9vcF9jYihzdHJ1Y3QgYWNjMTAwX3F1ZXVl ICpxLCBzdHJ1Y3QNCj4gcnRlX2JiZGV2X2VuY19vcCAqb3AsDQo+ID4gKwkJdWludDE2X3QgdG90 YWxfZW5xdWV1ZWRfY2JzKQ0KPiANCj4gcnRlX2ZwZ2FfNWducl9mZWMuYyBoYXMgdGhpcyBzYW1l IGZ1bmN0aW9uLiAgSXQgd291bGQgYmUgZ29vZCBpZiBjb21tb24NCj4gZnVuY3Rpb25zIGNvdWxk IGJlIGNvbGxlY3RlZCBhbmQgdXNlZCB0byBzdGFiaWxpemUgdGhlIGludGVybmFsIGJiZGV2DQo+ IGludGVyZmFjZS4NCj4gDQo+IFRoaXMgaXMgZ2VuZXJhbCBpc3N1ZQ0KDQpUaGlzIGlzIHRydWUg Zm9yIHNvbWUgcGFydCBvZiB0aGUgY29kZSBhbmQgbm90ZWQuDQpJbiB0aGF0IHZlcnkgY2FzZSB0 aGV5IGFyZSBkaXN0aW5jdCBpbXBsZW1lbnRhdGlvbiB3aXRoIEhXIHNwZWNpZmljcw0KQnV0IGFn cmVlZCB0byBsb29rIGludG8gc3VjaCByZWZhY3RvcnkgbGF0ZXIgb24uIA0KDQo+IA0KPiA+ICt7 DQo+ID4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiA+ICsJaW50IHJl dDsNCj4gPiArCXVpbnQzMl90IGluX29mZnNldCwgb3V0X29mZnNldCwgb3V0X2xlbmd0aCwgbWJ1 Zl90b3RhbF9sZWZ0LA0KPiA+ICsJCXNlZ190b3RhbF9sZWZ0Ow0KPiA+ICsJc3RydWN0IHJ0ZV9t YnVmICppbnB1dCwgKm91dHB1dF9oZWFkLCAqb3V0cHV0Ow0KPiA+ICsNCj4gPiArCXVpbnQxNl90 IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4g KwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciAr IGRlc2NfaWR4Ow0KPiA+ICsJYWNjMTAwX2Zjd19sZV9maWxsKG9wLCAmZGVzYy0+cmVxLmZjd19s ZSwgMSk7DQo+ID4gKw0KPiA+ICsJaW5wdXQgPSBvcC0+bGRwY19lbmMuaW5wdXQuZGF0YTsNCj4g PiArCW91dHB1dF9oZWFkID0gb3V0cHV0ID0gb3AtPmxkcGNfZW5jLm91dHB1dC5kYXRhOw0KPiA+ ICsJaW5fb2Zmc2V0ID0gb3AtPmxkcGNfZW5jLmlucHV0Lm9mZnNldDsNCj4gPiArCW91dF9vZmZz ZXQgPSBvcC0+bGRwY19lbmMub3V0cHV0Lm9mZnNldDsNCj4gPiArCW91dF9sZW5ndGggPSAwOw0K PiA+ICsJbWJ1Zl90b3RhbF9sZWZ0ID0gb3AtPmxkcGNfZW5jLmlucHV0Lmxlbmd0aDsNCj4gPiAr CXNlZ190b3RhbF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4ob3AtPmxkcGNfZW5jLmlucHV0 LmRhdGEpDQo+ID4gKwkJCS0gaW5fb2Zmc2V0Ow0KPiA+ICsNCj4gPiArCXJldCA9IGFjYzEwMF9k bWFfZGVzY19sZV9maWxsKG9wLCAmZGVzYy0+cmVxLCAmaW5wdXQsIG91dHB1dCwNCj4gPiArCQkJ JmluX29mZnNldCwgJm91dF9vZmZzZXQsICZvdXRfbGVuZ3RoLA0KPiAmbWJ1Zl90b3RhbF9sZWZ0 LA0KPiA+ICsJCQkmc2VnX3RvdGFsX2xlZnQpOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseShy ZXQgPCAwKSkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCW1idWZfYXBwZW5kKG91 dHB1dF9oZWFkLCBvdXRwdXQsIG91dF9sZW5ndGgpOw0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9M SUJSVEVfQkJERVZfREVCVUcNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNj LT5yZXEuZmN3X2xlLA0KPiA+ICsJCQlzaXplb2YoZGVzYy0+cmVxLmZjd19sZSkgLSA4KTsNCj4g PiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykp Ow0KPiA+ICsNCj4gPiArCS8qIENoZWNrIGlmIGFueSBkYXRhIGxlZnQgYWZ0ZXIgcHJvY2Vzc2lu ZyBvbmUgQ0IgKi8NCj4gPiArCWlmIChtYnVmX3RvdGFsX2xlZnQgIT0gMCkgew0KPiA+ICsJCXJ0 ZV9iYmRldl9sb2coRVJSLA0KPiA+ICsJCQkJIlNvbWUgZGF0ZSBzdGlsbCBsZWZ0IGFmdGVyIHBy b2Nlc3Npbmcgb25lIENCOg0KPiBtYnVmX3RvdGFsX2xlZnQgPSAldSIsDQo+ID4gKwkJCQltYnVm X3RvdGFsX2xlZnQpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsjZW5k aWYNCj4gPiArCS8qIE9uZSBDQiAob25lIG9wKSB3YXMgc3VjY2Vzc2Z1bGx5IHByZXBhcmVkIHRv IGVucXVldWUgKi8NCj4gPiArCXJldHVybiAxOw0KPiANCj4gQW5vdGhlciBjYXNlIHdoZXJlIGNh bGxlciBvbmx5IGNoZWNrIGZvciA8IDANCj4gDQo+IENvbnNpZGVyIGNoYW5nZXMgYWxsIHNpbWls YXIgdG8gcmV0dXJuIDAgb24gc3VjY2Vzcy4NCg0Kc2FtZSBjb21tZW50IGFzIGFib3ZlLCB3b3Vs ZCBrZWVwIGFzIGlzLiANCg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqIEVucXVldWUgb25l IGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIENCIG1vZGUgKi8NCj4gPiAr c3RhdGljIGlubGluZSBpbnQNCj4gPiArZW5xdWV1ZV9sZHBjX2RlY19vbmVfb3BfY2Ioc3RydWN0 IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9kZWNfb3AgKm9wLA0KPiA+ICsJ CXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgYm9vbCBzYW1lX29wKQ0KPiA+ICt7DQo+ID4g KwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYzsNCj4g PiArCXVpbnQxNl90IGRlc2NfaWR4ID0gKChxLT5zd19yaW5nX2hlYWQgKyB0b3RhbF9lbnF1ZXVl ZF9jYnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJZGVzYyA9IHEt PnJpbmdfYWRkciArIGRlc2NfaWR4Ow0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICppbnB1dCwgKmhf b3V0cHV0X2hlYWQsICpoX291dHB1dDsNCj4gPiArCXVpbnQzMl90IGluX29mZnNldCwgaF9vdXRf b2Zmc2V0LCBtYnVmX3RvdGFsX2xlZnQsIGhfb3V0X2xlbmd0aCA9IDA7DQo+ID4gKwlpbnB1dCA9 IG9wLT5sZHBjX2RlYy5pbnB1dC5kYXRhOw0KPiA+ICsJaF9vdXRwdXRfaGVhZCA9IGhfb3V0cHV0 ID0gb3AtPmxkcGNfZGVjLmhhcmRfb3V0cHV0LmRhdGE7DQo+ID4gKwlpbl9vZmZzZXQgPSBvcC0+ bGRwY19kZWMuaW5wdXQub2Zmc2V0Ow0KPiA+ICsJaF9vdXRfb2Zmc2V0ID0gb3AtPmxkcGNfZGVj LmhhcmRfb3V0cHV0Lm9mZnNldDsNCj4gPiArCW1idWZfdG90YWxfbGVmdCA9IG9wLT5sZHBjX2Rl Yy5pbnB1dC5sZW5ndGg7DQo+ID4gKyNpZmRlZiBSVEVfTElCUlRFX0JCREVWX0RFQlVHDQo+ID4g KwlpZiAodW5saWtlbHkoaW5wdXQgPT0gTlVMTCkpIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVS UiwgIkludmFsaWQgbWJ1ZiBwb2ludGVyIik7DQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4g Kwl9DQo+ID4gKyNlbmRpZg0KPiA+ICsJdW5pb24gYWNjMTAwX2hhcnFfbGF5b3V0X2RhdGEgKmhh cnFfbGF5b3V0ID0gcS0+ZC0+aGFycV9sYXlvdXQ7DQo+ID4gKw0KPiA+ICsJaWYgKHNhbWVfb3Ap IHsNCj4gPiArCQl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKnByZXZfZGVzYzsNCj4gPiArCQlkZXNj X2lkeCA9ICgocS0+c3dfcmluZ19oZWFkICsgdG90YWxfZW5xdWV1ZWRfY2JzIC0gMSkNCj4gPiAr CQkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsJCXByZXZfZGVzYyA9IHEtPnJpbmdf YWRkciArIGRlc2NfaWR4Ow0KPiA+ICsJCXVpbnQ4X3QgKnByZXZfcHRyID0gKHVpbnQ4X3QgKikg cHJldl9kZXNjOw0KPiA+ICsJCXVpbnQ4X3QgKm5ld19wdHIgPSAodWludDhfdCAqKSBkZXNjOw0K PiA+ICsJCS8qIENvcHkgZmlyc3QgNCB3b3JkcyBhbmQgQkRFU0NzICovDQo+ID4gKwkJcnRlX21l bWNweShuZXdfcHRyLCBwcmV2X3B0ciwgMTYpOw0KPiA+ICsJCXJ0ZV9tZW1jcHkobmV3X3B0ciAr IDM2LCBwcmV2X3B0ciArIDM2LCA0MCk7DQo+IFRoZXNlIG1hZ2ljIG51bWJlcnMgc2hvdWxkIGJl ICNkZWZpbmVzDQoNCnllcw0KDQo+ID4gKwkJZGVzYy0+cmVxLm9wX2FkZHIgPSBwcmV2X2Rlc2Mt PnJlcS5vcF9hZGRyOw0KPiA+ICsJCS8qIENvcHkgRkNXICovDQo+ID4gKwkJcnRlX21lbWNweShu ZXdfcHRyICsgQUNDMTAwX0RFU0NfRkNXX09GRlNFVCwNCj4gPiArCQkJCXByZXZfcHRyICsgQUND MTAwX0RFU0NfRkNXX09GRlNFVCwNCj4gPiArCQkJCUFDQzEwMF9GQ1dfTERfQkxFTik7DQo+ID4g KwkJYWNjMTAwX2RtYV9kZXNjX2xkX3VwZGF0ZShvcCwgJmRlc2MtPnJlcSwgaW5wdXQsDQo+IGhf b3V0cHV0LA0KPiA+ICsJCQkJJmluX29mZnNldCwgJmhfb3V0X29mZnNldCwNCj4gPiArCQkJCSZo X291dF9sZW5ndGgsIGhhcnFfbGF5b3V0KTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJc3RydWN0 IGFjYzEwMF9mY3dfbGQgKmZjdzsNCj4gPiArCQl1aW50MzJfdCBzZWdfdG90YWxfbGVmdDsNCj4g PiArCQlmY3cgPSAmZGVzYy0+cmVxLmZjd19sZDsNCj4gPiArCQlhY2MxMDBfZmN3X2xkX2ZpbGwo b3AsIGZjdywgaGFycV9sYXlvdXQpOw0KPiA+ICsNCj4gPiArCQkvKiBTcGVjaWFsIGhhbmRsaW5n IHdoZW4gb3ZlcnVzaW5nIG1idWYgKi8NCj4gPiArCQlpZiAoZmN3LT5ybV9lIDwgTUFYX0VfTUJV RikNCj4gPiArCQkJc2VnX3RvdGFsX2xlZnQgPSBydGVfcGt0bWJ1Zl9kYXRhX2xlbihpbnB1dCkN Cj4gPiArCQkJCQktIGluX29mZnNldDsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXNlZ190b3RhbF9s ZWZ0ID0gZmN3LT5ybV9lOw0KPiA+ICsNCj4gPiArCQlyZXQgPSBhY2MxMDBfZG1hX2Rlc2NfbGRf ZmlsbChvcCwgJmRlc2MtPnJlcSwgJmlucHV0LA0KPiBoX291dHB1dCwNCj4gPiArCQkJCSZpbl9v ZmZzZXQsICZoX291dF9vZmZzZXQsDQo+ID4gKwkJCQkmaF9vdXRfbGVuZ3RoLCAmbWJ1Zl90b3Rh bF9sZWZ0LA0KPiA+ICsJCQkJJnNlZ190b3RhbF9sZWZ0LCBmY3cpOw0KPiA+ICsJCWlmICh1bmxp a2VseShyZXQgPCAwKSkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwkvKiBIYXJkIG91dHB1dCAqLw0KPiA+ICsJbWJ1Zl9hcHBlbmQoaF9vdXRwdXRfaGVhZCwgaF9v dXRwdXQsIGhfb3V0X2xlbmd0aCk7DQo+ID4gKyNpZm5kZWYgQUNDMTAwX0VYVF9NRU0NCj4gPiAr CWlmIChvcC0+bGRwY19kZWMuaGFycV9jb21iaW5lZF9vdXRwdXQubGVuZ3RoID4gMCkgew0KPiA+ ICsJCS8qIFB1c2ggdGhlIEhBUlEgb3V0cHV0IGludG8gaG9zdCBtZW1vcnkgKi8NCj4gPiArCQlz dHJ1Y3QgcnRlX21idWYgKmhxX291dHB1dF9oZWFkLCAqaHFfb3V0cHV0Ow0KPiA+ICsJCWhxX291 dHB1dF9oZWFkID0gb3AtDQo+ID5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX291dHB1dC5kYXRhOw0K PiA+ICsJCWhxX291dHB1dCA9IG9wLT5sZHBjX2RlYy5oYXJxX2NvbWJpbmVkX291dHB1dC5kYXRh Ow0KPiA+ICsJCW1idWZfYXBwZW5kKGhxX291dHB1dF9oZWFkLCBocV9vdXRwdXQsDQo+ID4gKwkJ CQlvcC0NCj4gPmxkcGNfZGVjLmhhcnFfY29tYmluZWRfb3V0cHV0Lmxlbmd0aCk7DQo+ID4gKwl9 DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2lmZGVmIFJURV9MSUJSVEVfQkJERVZfREVCVUcN Cj4gPiArCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZDVyIsICZkZXNjLT5yZXEuZmN3X2xkLA0KPiA+ ICsJCQlzaXplb2YoZGVzYy0+cmVxLmZjd19sZCkgLSA4KTsNCj4gPiArCXJ0ZV9tZW1kdW1wKHN0 ZGVyciwgIlJlcSBEZXNjLiIsIGRlc2MsIHNpemVvZigqZGVzYykpOw0KPiA+ICsjZW5kaWYNCj4g PiArDQo+ID4gKwkvKiBPbmUgQ0IgKG9uZSBvcCkgd2FzIHN1Y2Nlc3NmdWxseSBwcmVwYXJlZCB0 byBlbnF1ZXVlICovDQo+ID4gKwlyZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4g Ky8qIEVucXVldWUgb25lIGRlY29kZSBvcGVyYXRpb25zIGZvciBBQ0MxMDAgZGV2aWNlIGluIFRC IG1vZGUgKi8NCj4gPiArc3RhdGljIGlubGluZSBpbnQNCj4gPiArZW5xdWV1ZV9sZHBjX2RlY19v bmVfb3BfdGIoc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0DQo+IHJ0ZV9iYmRldl9kZWNf b3AgKm9wLA0KPiA+ICsJCXVpbnQxNl90IHRvdGFsX2VucXVldWVkX2NicywgdWludDhfdCBjYnNf aW5fdGIpDQo+ID4gK3sNCj4gPiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYyA9IE5VTEw7 DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdWludDhfdCByLCBjOw0KPiA+ICsJdWludDMyX3QgaW5f b2Zmc2V0LCBoX291dF9vZmZzZXQsDQo+ID4gKwkJaF9vdXRfbGVuZ3RoLCBtYnVmX3RvdGFsX2xl ZnQsIHNlZ190b3RhbF9sZWZ0Ow0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICppbnB1dCwgKmhfb3V0 cHV0X2hlYWQsICpoX291dHB1dDsNCj4gPiArCXVpbnQxNl90IGN1cnJlbnRfZW5xdWV1ZWRfY2Jz ID0gMDsNCj4gPiArDQo+ID4gKwl1aW50MTZfdCBkZXNjX2lkeCA9ICgocS0+c3dfcmluZ19oZWFk ICsgdG90YWxfZW5xdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsN Cj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyBkZXNjX2lkeDsNCj4gPiArCXVpbnQ2NF90IGZj d19vZmZzZXQgPSAoZGVzY19pZHggPDwgOCkgKyBBQ0MxMDBfREVTQ19GQ1dfT0ZGU0VUOw0KPiA+ ICsJdW5pb24gYWNjMTAwX2hhcnFfbGF5b3V0X2RhdGEgKmhhcnFfbGF5b3V0ID0gcS0+ZC0+aGFy cV9sYXlvdXQ7DQo+ID4gKwlhY2MxMDBfZmN3X2xkX2ZpbGwob3AsICZkZXNjLT5yZXEuZmN3X2xk LCBoYXJxX2xheW91dCk7DQo+ID4gKw0KPiA+ICsJaW5wdXQgPSBvcC0+bGRwY19kZWMuaW5wdXQu ZGF0YTsNCj4gPiArCWhfb3V0cHV0X2hlYWQgPSBoX291dHB1dCA9IG9wLT5sZHBjX2RlYy5oYXJk X291dHB1dC5kYXRhOw0KPiA+ICsJaW5fb2Zmc2V0ID0gb3AtPmxkcGNfZGVjLmlucHV0Lm9mZnNl dDsNCj4gPiArCWhfb3V0X29mZnNldCA9IG9wLT5sZHBjX2RlYy5oYXJkX291dHB1dC5vZmZzZXQ7 DQo+ID4gKwloX291dF9sZW5ndGggPSAwOw0KPiA+ICsJbWJ1Zl90b3RhbF9sZWZ0ID0gb3AtPmxk cGNfZGVjLmlucHV0Lmxlbmd0aDsNCj4gPiArCWMgPSBvcC0+bGRwY19kZWMudGJfcGFyYW1zLmM7 DQo+ID4gKwlyID0gb3AtPmxkcGNfZGVjLnRiX3BhcmFtcy5yOw0KPiA+ICsNCj4gPiArCXdoaWxl IChtYnVmX3RvdGFsX2xlZnQgPiAwICYmIHIgPCBjKSB7DQo+ID4gKw0KPiA+ICsJCXNlZ190b3Rh bF9sZWZ0ID0gcnRlX3BrdG1idWZfZGF0YV9sZW4oaW5wdXQpIC0gaW5fb2Zmc2V0Ow0KPiA+ICsN Cj4gPiArCQkvKiBTZXQgdXAgRE1BIGRlc2NyaXB0b3IgKi8NCj4gPiArCQlkZXNjID0gcS0+cmlu Z19hZGRyICsgKChxLT5zd19yaW5nX2hlYWQgKw0KPiB0b3RhbF9lbnF1ZXVlZF9jYnMpDQo+ID4g KwkJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCQlkZXNjLT5yZXEuZGF0YV9wdHJz WzBdLmFkZHJlc3MgPSBxLT5yaW5nX2FkZHJfcGh5cyArDQo+IGZjd19vZmZzZXQ7DQo+ID4gKwkJ ZGVzYy0+cmVxLmRhdGFfcHRyc1swXS5ibGVuID0gQUNDMTAwX0ZDV19MRF9CTEVOOw0KPiA+ICsJ CXJldCA9IGFjYzEwMF9kbWFfZGVzY19sZF9maWxsKG9wLCAmZGVzYy0+cmVxLCAmaW5wdXQsDQo+ ID4gKwkJCQloX291dHB1dCwgJmluX29mZnNldCwgJmhfb3V0X29mZnNldCwNCj4gPiArCQkJCSZo X291dF9sZW5ndGgsDQo+ID4gKwkJCQkmbWJ1Zl90b3RhbF9sZWZ0LCAmc2VnX3RvdGFsX2xlZnQs DQo+ID4gKwkJCQkmZGVzYy0+cmVxLmZjd19sZCk7DQo+ID4gKw0KPiA+ICsJCWlmICh1bmxpa2Vs eShyZXQgPCAwKSkNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkJLyogSGFyZCBv dXRwdXQgKi8NCj4gPiArCQltYnVmX2FwcGVuZChoX291dHB1dF9oZWFkLCBoX291dHB1dCwgaF9v dXRfbGVuZ3RoKTsNCj4gPiArDQo+ID4gKwkJLyogU2V0IHRvdGFsIG51bWJlciBvZiBDQnMgaW4g VEIgKi8NCj4gPiArCQlkZXNjLT5yZXEuY2JzX2luX3RiID0gY2JzX2luX3RiOw0KPiA+ICsjaWZk ZWYgUlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+ICsJCXJ0ZV9tZW1kdW1wKHN0ZGVyciwgIkZD VyIsICZkZXNjLT5yZXEuZmN3X3RkLA0KPiA+ICsJCQkJc2l6ZW9mKGRlc2MtPnJlcS5mY3dfdGQp IC0gOCk7DQo+ID4gKwkJcnRlX21lbWR1bXAoc3RkZXJyLCAiUmVxIERlc2MuIiwgZGVzYywgc2l6 ZW9mKCpkZXNjKSk7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArCQlpZiAoc2VnX3RvdGFsX2xl ZnQgPT0gMCkgew0KPiA+ICsJCQkvKiBHbyB0byB0aGUgbmV4dCBtYnVmICovDQo+ID4gKwkJCWlu cHV0ID0gaW5wdXQtPm5leHQ7DQo+ID4gKwkJCWluX29mZnNldCA9IDA7DQo+ID4gKwkJCWhfb3V0 cHV0ID0gaF9vdXRwdXQtPm5leHQ7DQo+ID4gKwkJCWhfb3V0X29mZnNldCA9IDA7DQo+ID4gKwkJ fQ0KPiA+ICsJCXRvdGFsX2VucXVldWVkX2NicysrOw0KPiA+ICsJCWN1cnJlbnRfZW5xdWV1ZWRf Y2JzKys7DQo+ID4gKwkJcisrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseShk ZXNjID09IE5VTEwpKQ0KPiBIb3cgaXMgdGhpcyBwb3NzaWJsZSA/IGRlc2MgaGFzIGJlIGRlcmVm ZXJlbmNlZCBhbHJlYWR5Lg0KDQpyZWxhdGVkIHRvIHN0YXRpYyBjb2RlIGFuYWx5c2lzLCBhcmd1 YWJseSBhIGZhbHNlIGFsYXJtDQoNCj4gPiArCQlyZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7 DQo+ID4gKw0KPiA+ICsjaWZkZWYgUlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+ICsJLyogQ2hl Y2sgaWYgYW55IENCcyBsZWZ0IGZvciBwcm9jZXNzaW5nICovDQo+ID4gKwlpZiAobWJ1Zl90b3Rh bF9sZWZ0ICE9IDApIHsNCj4gPiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPiArCQkJCSJTb21l IGRhdGUgc3RpbGwgbGVmdCBmb3IgcHJvY2Vzc2luZzoNCj4gbWJ1Zl90b3RhbF9sZWZ0ID0gJXUi LA0KPiA+ICsJCQkJbWJ1Zl90b3RhbF9sZWZ0KTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArCX0NCj4gPiArI2VuZGlmDQo+ID4gKwkvKiBTZXQgU0RvbmUgb24gbGFzdCBDQiBkZXNjcmlw dG9yIGZvciBUQiBtb2RlICovDQo+ID4gKwlkZXNjLT5yZXEuc2RvbmVfZW5hYmxlID0gMTsNCj4g PiArCWRlc2MtPnJlcS5pcnFfZW5hYmxlID0gcS0+aXJxX2VuYWJsZTsNCj4gPiArDQo+ID4gKwly ZXR1cm4gY3VycmVudF9lbnF1ZXVlZF9jYnM7DQo+ID4gK30NCj4gPiArDQo+ID4gKw0KPiA+ICsv KiBDYWxjdWxhdGVzIG51bWJlciBvZiBDQnMgaW4gcHJvY2Vzc2VkIGVuY29kZXIgVEIgYmFzZWQg b24gJ3InIGFuZA0KPiBpbnB1dA0KPiA+ICsgKiBsZW5ndGguDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMgaW5saW5lIHVpbnQ4X3QNCj4gPiArZ2V0X251bV9jYnNfaW5fdGJfZW5jKHN0cnVjdCBydGVf YmJkZXZfb3BfdHVyYm9fZW5jICp0dXJib19lbmMpDQo+ID4gK3sNCj4gPiArCXVpbnQ4X3QgYywg Y19uZWcsIHIsIGNyYzI0X2JpdHMgPSAwOw0KPiA+ICsJdWludDE2X3Qgaywga19uZWcsIGtfcG9z Ow0KPiA+ICsJdWludDhfdCBjYnNfaW5fdGIgPSAwOw0KPiA+ICsJaW50MzJfdCBsZW5ndGg7DQo+ ID4gKw0KPiA+ICsJbGVuZ3RoID0gdHVyYm9fZW5jLT5pbnB1dC5sZW5ndGg7DQo+ID4gKwlyID0g dHVyYm9fZW5jLT50Yl9wYXJhbXMucjsNCj4gPiArCWMgPSB0dXJib19lbmMtPnRiX3BhcmFtcy5j Ow0KPiA+ICsJY19uZWcgPSB0dXJib19lbmMtPnRiX3BhcmFtcy5jX25lZzsNCj4gPiArCWtfbmVn ID0gdHVyYm9fZW5jLT50Yl9wYXJhbXMua19uZWc7DQo+ID4gKwlrX3BvcyA9IHR1cmJvX2VuYy0+ dGJfcGFyYW1zLmtfcG9zOw0KPiA+ICsJY3JjMjRfYml0cyA9IDA7DQo+ID4gKwlpZiAoY2hlY2tf Yml0KHR1cmJvX2VuYy0+b3BfZmxhZ3MsDQo+IFJURV9CQkRFVl9UVVJCT19DUkNfMjRCX0FUVEFD SCkpDQo+ID4gKwkJY3JjMjRfYml0cyA9IDI0Ow0KPiA+ICsJd2hpbGUgKGxlbmd0aCA+IDAgJiYg ciA8IGMpIHsNCj4gPiArCQlrID0gKHIgPCBjX25lZykgPyBrX25lZyA6IGtfcG9zOw0KPiA+ICsJ CWxlbmd0aCAtPSAoayAtIGNyYzI0X2JpdHMpID4+IDM7DQo+ID4gKwkJcisrOw0KPiA+ICsJCWNi c19pbl90YisrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBjYnNfaW5fdGI7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qIENhbGN1bGF0ZXMgbnVtYmVyIG9mIENCcyBpbiBwcm9jZXNzZWQg ZGVjb2RlciBUQiBiYXNlZCBvbiAncicgYW5kDQo+IGlucHV0DQo+ID4gKyAqIGxlbmd0aC4NCj4g PiArICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QNCj4gPiArZ2V0X251bV9jYnNfaW5f dGJfZGVjKHN0cnVjdCBydGVfYmJkZXZfb3BfdHVyYm9fZGVjICp0dXJib19kZWMpDQo+ID4gK3sN Cj4gPiArCXVpbnQ4X3QgYywgY19uZWcsIHIgPSAwOw0KPiA+ICsJdWludDE2X3Qga3csIGssIGtf bmVnLCBrX3BvcywgY2JzX2luX3RiID0gMDsNCj4gPiArCWludDMyX3QgbGVuZ3RoOw0KPiA+ICsN Cj4gPiArCWxlbmd0aCA9IHR1cmJvX2RlYy0+aW5wdXQubGVuZ3RoOw0KPiA+ICsJciA9IHR1cmJv X2RlYy0+dGJfcGFyYW1zLnI7DQo+ID4gKwljID0gdHVyYm9fZGVjLT50Yl9wYXJhbXMuYzsNCj4g PiArCWNfbmVnID0gdHVyYm9fZGVjLT50Yl9wYXJhbXMuY19uZWc7DQo+ID4gKwlrX25lZyA9IHR1 cmJvX2RlYy0+dGJfcGFyYW1zLmtfbmVnOw0KPiA+ICsJa19wb3MgPSB0dXJib19kZWMtPnRiX3Bh cmFtcy5rX3BvczsNCj4gPiArCXdoaWxlIChsZW5ndGggPiAwICYmIHIgPCBjKSB7DQo+ID4gKwkJ ayA9IChyIDwgY19uZWcpID8ga19uZWcgOiBrX3BvczsNCj4gPiArCQlrdyA9IFJURV9BTElHTl9D RUlMKGsgKyA0LCAzMikgKiAzOw0KPiA+ICsJCWxlbmd0aCAtPSBrdzsNCj4gPiArCQlyKys7DQo+ ID4gKwkJY2JzX2luX3RiKys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGNic19pbl90 YjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogQ2FsY3VsYXRlcyBudW1iZXIgb2YgQ0JzIGluIHBy b2Nlc3NlZCBkZWNvZGVyIFRCIGJhc2VkIG9uICdyJyBhbmQNCj4gaW5wdXQNCj4gPiArICogbGVu Z3RoLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlubGluZSB1aW50MTZfdA0KPiA+ICtnZXRfbnVt X2Nic19pbl90Yl9sZHBjX2RlYyhzdHJ1Y3QgcnRlX2JiZGV2X29wX2xkcGNfZGVjICpsZHBjX2Rl YykNCj4gPiArew0KPiA+ICsJdWludDE2X3QgciwgY2JzX2luX3RiID0gMDsNCj4gPiArCWludDMy X3QgbGVuZ3RoID0gbGRwY19kZWMtPmlucHV0Lmxlbmd0aDsNCj4gPiArCXIgPSBsZHBjX2RlYy0+ dGJfcGFyYW1zLnI7DQo+ID4gKwl3aGlsZSAobGVuZ3RoID4gMCAmJiByIDwgbGRwY19kZWMtPnRi X3BhcmFtcy5jKSB7DQo+ID4gKwkJbGVuZ3RoIC09ICAociA8IGxkcGNfZGVjLT50Yl9wYXJhbXMu Y2FiKSA/DQo+ID4gKwkJCQlsZHBjX2RlYy0+dGJfcGFyYW1zLmVhIDoNCj4gPiArCQkJCWxkcGNf ZGVjLT50Yl9wYXJhbXMuZWI7DQo+ID4gKwkJcisrOw0KPiA+ICsJCWNic19pbl90YisrOw0KPiA+ ICsJfQ0KPiA+ICsJcmV0dXJuIGNic19pbl90YjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogQ2hl Y2sgd2UgY2FuIG11eCBlbmNvZGUgb3BlcmF0aW9ucyB3aXRoIGNvbW1vbiBGQ1cgKi8NCj4gPiAr c3RhdGljIGlubGluZSBib29sDQo+ID4gK2NoZWNrX211eChzdHJ1Y3QgcnRlX2JiZGV2X2VuY19v cCAqKm9wcywgdWludDE2X3QgbnVtKSB7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ICsJaWYgKG51 bSA9PSAxKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gbGlrZWx5IHNob3VsZCBzdHJlbmd0aGVu IGNoZWNrIHRvIG51bSA8PSAxDQoNCm5vIGltcGFjdCwgYnV0IGRvZXNudCBodXJ0IHRvIGNoYW5n ZSBvay4gDQoNCj4gPiArCWZvciAoaSA9IDE7IGkgPCBudW07ICsraSkgew0KPiA+ICsJCS8qIE9u bHkgbXV4IGNvbXBhdGlibGUgY29kZSBibG9ja3MgKi8NCj4gPiArCQlpZiAobWVtY21wKCh1aW50 OF90ICopKCZvcHNbaV0tPmxkcGNfZW5jKSArIEVOQ19PRkZTRVQsDQo+ID4gKwkJCQkodWludDhf dCAqKSgmb3BzWzBdLT5sZHBjX2VuYykgKw0KPiBFTkNfT0ZGU0VULA0KPiBvcHNbMF0tPmxkcGNf ZW5jIHNob3VsZCBiZSBob2lzdGVkIG91dCBvZiBsb29wIGFzIGl0IGlzIGludmFyaWFudC4NCg0K Y29tcGlsZXIgdGFrZXMgY2FyZSBvZiB0aGlzIEkgYmVsaWV2ZQ0KDQo+ID4gKwkJCQlDTVBfRU5D X1NJWkUpICE9IDApDQo+ID4gKwkJCXJldHVybiBmYWxzZTsNCj4gPiArCX0NCj4gPiArCXJldHVy biB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiogRW5xdWV1ZSBlbmNvZGUgb3BlcmF0aW9u cyBmb3IgQUNDMTAwIGRldmljZSBpbiBDQiBtb2RlLiAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIHVp bnQxNl90DQo+ID4gK2FjYzEwMF9lbnF1ZXVlX2xkcGNfZW5jX2NiKHN0cnVjdCBydGVfYmJkZXZf cXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZW5jX29wICoqb3Bz LCB1aW50MTZfdCBudW0pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhY2MxMDBfcXVldWUgKnEgPSBx X2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwlpbnQzMl90IGF2YWlsID0gcS0+c3dfcmluZ19k ZXB0aCArIHEtPnN3X3JpbmdfdGFpbCAtIHEtDQo+ID5zd19yaW5nX2hlYWQ7DQo+ID4gKwl1aW50 MTZfdCBpID0gMDsNCj4gPiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVzYzsNCj4gPiArCWlu dCByZXQsIGRlc2NfaWR4ID0gMDsNCj4gPiArCWludDE2X3QgZW5xLCBsZWZ0ID0gbnVtOw0KPiA+ ICsNCj4gPiArCXdoaWxlIChsZWZ0ID4gMCkgew0KPiA+ICsJCWlmICh1bmxpa2VseShhdmFpbCAt IDEgPCAwKSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJYXZhaWwtLTsNCj4gPiArCQllbnEgPSBS VEVfTUlOKGxlZnQsIE1VWF81R0RMX0RFU0MpOw0KPiA+ICsJCWlmIChjaGVja19tdXgoJm9wc1tp XSwgZW5xKSkgew0KPiA+ICsJCQlyZXQgPSBlbnF1ZXVlX2xkcGNfZW5jX25fb3BfY2IocSwgJm9w c1tpXSwNCj4gPiArCQkJCQlkZXNjX2lkeCwgZW5xKTsNCj4gPiArCQkJaWYgKHJldCA8IDApDQo+ ID4gKwkJCQlicmVhazsNCj4gPiArCQkJaSArPSBlbnE7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiAr CQkJcmV0ID0gZW5xdWV1ZV9sZHBjX2VuY19vbmVfb3BfY2IocSwgb3BzW2ldLA0KPiBkZXNjX2lk eCk7DQo+ID4gKwkJCWlmIChyZXQgPCAwKQ0KPiA+ICsJCQkJYnJlYWs7DQo+IGZhaWx1cmUgaXMg bm90IGhhbmRsZWQgd2VsbCwgd2hhdCBoYXBwZW5zIGlmIHRoaXMgaXMgb25lIG9mIHNlcnZlcmFs DQoNCnRoZSBhaW0gaXMgdG8gZmxhZyB0aGUgZXJyb3IgYW5kIG1vdmUgb24gDQoNCg0KPiA+ICsJ CQlpKys7DQo+ID4gKwkJfQ0KPiA+ICsJCWRlc2NfaWR4Kys7DQo+ID4gKwkJbGVmdCA9IG51bSAt IGk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KGkgPT0gMCkpDQo+ID4gKwkJ cmV0dXJuIDA7IC8qIE5vdGhpbmcgdG8gZW5xdWV1ZSAqLw0KPiB0aGlzIGRvZXMgbm90IGxvb2sg Y29ycmVjdCBmb3IgYWxsIGNhc2VzDQoNCkkgbWlzcyB5b3VyIHBvaW50DQoNCj4gPiArDQo+ID4g KwkvKiBTZXQgU0RvbmUgaW4gbGFzdCBDQiBpbiBlbnF1ZXVlZCBvcHMgZm9yIENCIG1vZGUqLw0K PiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ19oZWFkICsgZGVzY19pZHgg LSAxKQ0KPiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWRlc2MtPnJlcS5z ZG9uZV9lbmFibGUgPSAxOw0KPiA+ICsJZGVzYy0+cmVxLmlycV9lbmFibGUgPSBxLT5pcnFfZW5h YmxlOw0KPiA+ICsNCj4gPiArCWFjYzEwMF9kbWFfZW5xdWV1ZShxLCBkZXNjX2lkeCwgJnFfZGF0 YS0+cXVldWVfc3RhdHMpOw0KPiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBzdGF0cyAqLw0KPiA+ICsJ cV9kYXRhLT5xdWV1ZV9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBpOw0KPiA+ICsJcV9kYXRhLT5x dWV1ZV9zdGF0cy5lbnF1ZXVlX2Vycl9jb3VudCArPSBudW0gLSBpOw0KPiA+ICsNCj4gPiArCXJl dHVybiBpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBFbnF1ZXVlIGVuY29kZSBvcGVyYXRpb25z IGZvciBBQ0MxMDAgZGV2aWNlLiAqLw0KPiA+ICtzdGF0aWMgdWludDE2X3QNCj4gPiArYWNjMTAw X2VucXVldWVfbGRwY19lbmMoc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKipvcHMsIHVpbnQxNl90IG51bSkNCj4gPiAr ew0KPiA+ICsJaWYgKHVubGlrZWx5KG51bSA9PSAwKSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gSGFu ZGxpbmcgbnVtID09IDAgc2hvdWxkIGJlIGluIGFjYzEwMF9lbnF1ZXVlX2xkcGNfZW5jX2NiDQoN CldoeSB3b3VsZCB0aGlzIGJlIGJldHRlciBub3QgdG8gY2F0Y2ggZWFybHkgZnJvbSB1c2VyIGFw aSBjYWxsPw0KDQo+ID4gKwlyZXR1cm4gYWNjMTAwX2VucXVldWVfbGRwY19lbmNfY2IocV9kYXRh LCBvcHMsIG51bSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIENoZWNrIHdlIGNhbiBtdXggZW5j b2RlIG9wZXJhdGlvbnMgd2l0aCBjb21tb24gRkNXICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9v bA0KPiA+ICtjbXBfbGRwY19kZWNfb3Aoc3RydWN0IHJ0ZV9iYmRldl9kZWNfb3AgKipvcHMpIHsN Cj4gPiArCS8qIE9ubHkgbXV4IGNvbXBhdGlibGUgY29kZSBibG9ja3MgKi8NCj4gPiArCWlmICht ZW1jbXAoKHVpbnQ4X3QgKikoJm9wc1swXS0+bGRwY19kZWMpICsgREVDX09GRlNFVCwNCj4gPiAr CQkJKHVpbnQ4X3QgKikoJm9wc1sxXS0+bGRwY19kZWMpICsNCj4gPiArCQkJREVDX09GRlNFVCwg Q01QX0RFQ19TSVpFKSAhPSAwKSB7DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJfSBlbHNl DQo+IGRvIG5vdCBuZWVkIHRoZSBlbHNlLCB0aGVyZSBhcmUgbm8gb3RoZXIgc3RhdGVtZW50cy4N Cg0KZGViYXRhYmxlLiBOb3QgY29uc2lkZXJpbmcgY2hhbmdlIGV4Y2VwdCBpZiB0aGF0IGJlY29t ZXMgYSBEUERLDQpjb2RpbmcgZ3VpZGVsaW5lLiANCg0KPiA+ICsJCXJldHVybiB0cnVlOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3Ig QUNDMTAwIGRldmljZSBpbiBUQiBtb2RlICovDQo+ID4gK3N0YXRpYyB1aW50MTZfdA0KPiA+ICth Y2MxMDBfZW5xdWV1ZV9sZHBjX2RlY190YihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFf ZGF0YSwNCj4gPiArCQlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqKm9wcywgdWludDE2X3QgbnVt KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjMTAwX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9w cml2YXRlOw0KPiA+ICsJaW50MzJfdCBhdmFpbCA9IHEtPnN3X3JpbmdfZGVwdGggKyBxLT5zd19y aW5nX3RhaWwgLSBxLQ0KPiA+c3dfcmluZ19oZWFkOw0KPiA+ICsJdWludDE2X3QgaSwgZW5xdWV1 ZWRfY2JzID0gMDsNCj4gPiArCXVpbnQ4X3QgY2JzX2luX3RiOw0KPiA+ICsJaW50IHJldDsNCj4g PiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsNCj4gPiArCQljYnNfaW5fdGIg PSBnZXRfbnVtX2Nic19pbl90Yl9sZHBjX2RlYygmb3BzW2ldLQ0KPiA+bGRwY19kZWMpOw0KPiA+ ICsJCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhdmFpbGFibGUgc3BhY2UgZm9yIGZ1cnRoZXIgcHJv Y2Vzc2luZyAqLw0KPiA+ICsJCWlmICh1bmxpa2VseShhdmFpbCAtIGNic19pbl90YiA8IDApKQ0K PiA+ICsJCQlicmVhazsNCj4gPiArCQlhdmFpbCAtPSBjYnNfaW5fdGI7DQo+ID4gKw0KPiA+ICsJ CXJldCA9IGVucXVldWVfbGRwY19kZWNfb25lX29wX3RiKHEsIG9wc1tpXSwNCj4gPiArCQkJCWVu cXVldWVkX2NicywgY2JzX2luX3RiKTsNCj4gPiArCQlpZiAocmV0IDwgMCkNCj4gPiArCQkJYnJl YWs7DQo+ID4gKwkJZW5xdWV1ZWRfY2JzICs9IHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlh Y2MxMDBfZG1hX2VucXVldWUocSwgZW5xdWV1ZWRfY2JzLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7 DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0 YXRzLmVucXVldWVkX2NvdW50ICs9IGk7DQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVl dWVfZXJyX2NvdW50ICs9IG51bSAtIGk7DQo+ID4gKwlyZXR1cm4gaTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0aW9ucyBmb3IgQUNDMTAwIGRldmljZSBpbiBD QiBtb2RlICovDQo+ID4gK3N0YXRpYyB1aW50MTZfdA0KPiA+ICthY2MxMDBfZW5xdWV1ZV9sZHBj X2RlY19jYihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4gPiArCQlzdHJ1 Y3QgcnRlX2JiZGV2X2RlY19vcCAqKm9wcywgdWludDE2X3QgbnVtKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgYWNjMTAwX3F1ZXVlICpxID0gcV9kYXRhLT5xdWV1ZV9wcml2YXRlOw0KPiA+ICsJaW50 MzJfdCBhdmFpbCA9IHEtPnN3X3JpbmdfZGVwdGggKyBxLT5zd19yaW5nX3RhaWwgLSBxLQ0KPiA+ c3dfcmluZ19oZWFkOw0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXVuaW9uIGFjYzEwMF9kbWFf ZGVzYyAqZGVzYzsNCj4gPiArCWludCByZXQ7DQo+ID4gKwlib29sIHNhbWVfb3AgPSBmYWxzZTsN Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgew0KPiA+ICsJCS8qIENoZWNrIGlmIHRo ZXJlIGFyZSBhdmFpbGFibGUgc3BhY2UgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLw0KPiA+ICsJ CWlmICh1bmxpa2VseShhdmFpbCAtIDEgPCAwKSkNCj4gDQo+IGNoYW5nZSB0byAoYXZhaWwgPCAx KQ0KPiANCj4gR2VuZXJhbGx5Lg0KDQpvaw0KDQo+IA0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlh dmFpbCAtPSAxOw0KPiA+ICsNCj4gPiArCQlpZiAoaSA+IDApDQo+ID4gKwkJCXNhbWVfb3AgPSBj bXBfbGRwY19kZWNfb3AoJm9wc1tpLTFdKTsNCj4gPiArCQlydGVfYmJkZXZfbG9nKElORk8sICJP cCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZA0KPiAlZCAlZFxuIiwNCj4gPiArCQkJaSwg b3BzW2ldLT5sZHBjX2RlYy5vcF9mbGFncywgb3BzW2ldLQ0KPiA+bGRwY19kZWMucnZfaW5kZXgs DQo+ID4gKwkJCW9wc1tpXS0+bGRwY19kZWMuaXRlcl9tYXgsIG9wc1tpXS0NCj4gPmxkcGNfZGVj Lml0ZXJfY291bnQsDQo+ID4gKwkJCW9wc1tpXS0+bGRwY19kZWMuYmFzZWdyYXBoLCBvcHNbaV0t PmxkcGNfZGVjLnpfYywNCj4gPiArCQkJb3BzW2ldLT5sZHBjX2RlYy5uX2NiLCBvcHNbaV0tPmxk cGNfZGVjLnFfbSwNCj4gPiArCQkJb3BzW2ldLT5sZHBjX2RlYy5uX2ZpbGxlciwgb3BzW2ldLQ0K PiA+bGRwY19kZWMuY2JfcGFyYW1zLmUsDQo+ID4gKwkJCXNhbWVfb3ApOw0KPiA+ICsJCXJldCA9 IGVucXVldWVfbGRwY19kZWNfb25lX29wX2NiKHEsIG9wc1tpXSwgaSwgc2FtZV9vcCk7DQo+ID4g KwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm ICh1bmxpa2VseShpID09IDApKQ0KPiA+ICsJCXJldHVybiAwOyAvKiBOb3RoaW5nIHRvIGVucXVl dWUgKi8NCj4gPiArDQo+ID4gKwkvKiBTZXQgU0RvbmUgaW4gbGFzdCBDQiBpbiBlbnF1ZXVlZCBv cHMgZm9yIENCIG1vZGUqLw0KPiA+ICsJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmlu Z19oZWFkICsgaSAtIDEpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFwX21hc2spOw0KPiA+ICsN Cj4gPiArCWRlc2MtPnJlcS5zZG9uZV9lbmFibGUgPSAxOw0KPiA+ICsJZGVzYy0+cmVxLmlycV9l bmFibGUgPSBxLT5pcnFfZW5hYmxlOw0KPiA+ICsNCj4gPiArCWFjYzEwMF9kbWFfZW5xdWV1ZShx LCBpLCAmcV9kYXRhLT5xdWV1ZV9zdGF0cyk7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHN0YXRz ICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVkX2NvdW50ICs9IGk7DQo+ID4g KwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmVucXVldWVfZXJyX2NvdW50ICs9IG51bSAtIGk7DQo+ID4g KwlyZXR1cm4gaTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRW5xdWV1ZSBkZWNvZGUgb3BlcmF0 aW9ucyBmb3IgQUNDMTAwIGRldmljZS4gKi8NCj4gPiArc3RhdGljIHVpbnQxNl90DQo+ID4gK2Fj YzEwMF9lbnF1ZXVlX2xkcGNfZGVjKHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRh LA0KPiA+ICsJCXN0cnVjdCBydGVfYmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBhY2MxMDBfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZh dGU7DQo+ID4gKwlpbnQzMl90IGFxX2F2YWlsID0gcS0+YXFfZGVwdGggKw0KPiA+ICsJCQkocS0+ YXFfZGVxdWV1ZWQgLSBxLT5hcV9lbnF1ZXVlZCkgLyAxMjg7DQo+ID4gKw0KPiA+ICsJaWYgKHVu bGlrZWx5KChhcV9hdmFpbCA9PSAwKSB8fCAobnVtID09IDApKSkNCj4gPiArCQlyZXR1cm4gMDsN Cj4gPiArDQo+ID4gKwlpZiAob3BzWzBdLT5sZHBjX2RlYy5jb2RlX2Jsb2NrX21vZGUgPT0gMCkN Cj4gPiArCQlyZXR1cm4gYWNjMTAwX2VucXVldWVfbGRwY19kZWNfdGIocV9kYXRhLCBvcHMsIG51 bSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmV0dXJuIGFjYzEwMF9lbnF1ZXVlX2xkcGNfZGVjX2Ni KHFfZGF0YSwgb3BzLCBudW0pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyogRGVxdWV1 ZSBvbmUgZW5jb2RlIG9wZXJhdGlvbnMgZnJvbSBBQ0MxMDAgZGV2aWNlIGluIENCIG1vZGUgKi8N Cj4gPiArc3RhdGljIGlubGluZSBpbnQNCj4gPiArZGVxdWV1ZV9lbmNfb25lX29wX2NiKHN0cnVj dCBhY2MxMDBfcXVldWUgKnEsIHN0cnVjdA0KPiBydGVfYmJkZXZfZW5jX29wICoqcmVmX29wLA0K PiA+ICsJCXVpbnQxNl90IHRvdGFsX2RlcXVldWVkX2NicywgdWludDMyX3QgKmFxX2RlcXVldWVk KQ0KPiA+ICt7DQo+ID4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MsIGF0b21fZGVzYzsN Cj4gPiArCXVuaW9uIGFjYzEwMF9kbWFfcnNwX2Rlc2MgcnNwOw0KPiA+ICsJc3RydWN0IHJ0ZV9i YmRldl9lbmNfb3AgKm9wOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZGVzYyA9IHEtPnJp bmdfYWRkciArICgocS0+c3dfcmluZ190YWlsICsgdG90YWxfZGVxdWV1ZWRfY2JzKQ0KPiA+ICsJ CQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWF0b21fZGVzYy5hdG9tX2hkciA9IF9f YXRvbWljX2xvYWRfbigodWludDY0X3QgKilkZXNjLA0KPiA+ICsJCQlfX0FUT01JQ19SRUxBWEVE KTsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayBmZG9uZSBiaXQgKi8NCj4gPiArCWlmICghKGF0b21f ZGVzYy5yc3AudmFsICYgQUNDMTAwX0ZET05FKSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0K PiA+ICsJcnNwLnZhbCA9IGF0b21fZGVzYy5yc3AudmFsOw0KPiA+ICsJcnRlX2JiZGV2X2xvZ19k ZWJ1ZygiUmVzcC4gZGVzYyAlcDogJXgiLCBkZXNjLCByc3AudmFsKTsNCj4gPiArDQo+ID4gKwkv KiBEZXF1ZXVlICovDQo+ID4gKwlvcCA9IGRlc2MtPnJlcS5vcF9hZGRyOw0KPiA+ICsNCj4gPiAr CS8qIENsZWFyaW5nIHN0YXR1cywgaXQgd2lsbCBiZSBzZXQgYmFzZWQgb24gcmVzcG9uc2UgKi8N Cj4gPiArCW9wLT5zdGF0dXMgPSAwOw0KPiA+ICsNCj4gPiArCW9wLT5zdGF0dXMgfD0gKChyc3Au aW5wdXRfZXJyKQ0KPiA+ICsJCQk/ICgxIDw8IFJURV9CQkRFVl9EQVRBX0VSUk9SKSA6IDApOw0K PiBjYW4gcmVtb3ZlIHRoZSA9IDAsIGlmIHw9IGlzIGNoYW5nZWQgdG8gPQ0KDQp5ZXMgaW4gcHJp bmNpcGxlLCBidXQgZWFzeSB0byBicmVhayBieSBtaXN0YWtlLCBzbyB3b3VsZCBrZWVwLiANCg0K PiA+ICsJb3AtPnN0YXR1cyB8PSAoKHJzcC5kbWFfZXJyKSA/ICgxIDw8IFJURV9CQkRFVl9EUlZf RVJST1IpIDogMCk7DQo+ID4gKwlvcC0+c3RhdHVzIHw9ICgocnNwLmZjd19lcnIpID8gKDEgPDwg UlRFX0JCREVWX0RSVl9FUlJPUikgOiAwKTsNCj4gPiArDQo+ID4gKwlpZiAoZGVzYy0+cmVxLmxh c3RfZGVzY19pbl9iYXRjaCkgew0KPiA+ICsJCSgqYXFfZGVxdWV1ZWQpKys7DQo+ID4gKwkJZGVz Yy0+cmVxLmxhc3RfZGVzY19pbl9iYXRjaCA9IDA7DQo+ID4gKwl9DQo+ID4gKwlkZXNjLT5yc3Au dmFsID0gQUNDMTAwX0RNQV9ERVNDX1RZUEU7DQo+ID4gKwlkZXNjLT5yc3AuYWRkX2luZm9fMCA9 IDA7IC8qUmVzZXJ2ZWQgYml0cyAqLw0KPiA+ICsJZGVzYy0+cnNwLmFkZF9pbmZvXzEgPSAwOyAv KlJlc2VydmVkIGJpdHMgKi8NCj4gPiArDQo+ID4gKwkvKiBGbGFnIHRoYXQgdGhlIG11eGluZyBj YXVzZSBsb3NzIG9mIG9wYXF1ZSBkYXRhICovDQo+ID4gKwlvcC0+b3BhcXVlX2RhdGEgPSAodm9p ZCAqKS0xOw0KPiBhcyBhIHB0ciwgc2hvdWxkbid0IG9wYXF1ZV9kYXRhIGJlIHBvaXNvbmVkIHdp dGggJzAnID8NCg0KbW9yZSBvYnZpb3VzIHRoaXMgd2F5IEkgdGhpbmsuIA0KDQo+ID4gKwlmb3Ig KGkgPSAwIDsgaSA8IGRlc2MtPnJlcS5udW1DQnM7IGkrKykNCj4gPiArCQlyZWZfb3BbaV0gPSBv cDsNCj4gPiArDQo+ID4gKwkvKiBPbmUgQ0IgKG9wKSB3YXMgc3VjY2Vzc2Z1bGx5IGRlcXVldWVk ICovDQo+ID4gKwlyZXR1cm4gZGVzYy0+cmVxLm51bUNCczsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyogRGVxdWV1ZSBvbmUgZW5jb2RlIG9wZXJhdGlvbnMgZnJvbSBBQ0MxMDAgZGV2aWNlIGluIFRC IG1vZGUgKi8NCj4gPiArc3RhdGljIGlubGluZSBpbnQNCj4gPiArZGVxdWV1ZV9lbmNfb25lX29w X3RiKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsIHN0cnVjdA0KPiBydGVfYmJkZXZfZW5jX29wICoq cmVmX29wLA0KPiA+ICsJCXVpbnQxNl90IHRvdGFsX2RlcXVldWVkX2NicywgdWludDMyX3QgKmFx X2RlcXVldWVkKQ0KPiA+ICt7DQo+ID4gKwl1bmlvbiBhY2MxMDBfZG1hX2Rlc2MgKmRlc2MsICps YXN0X2Rlc2MsIGF0b21fZGVzYzsNCj4gPiArCXVuaW9uIGFjYzEwMF9kbWFfcnNwX2Rlc2MgcnNw Ow0KPiA+ICsJc3RydWN0IHJ0ZV9iYmRldl9lbmNfb3AgKm9wOw0KPiA+ICsJdWludDhfdCBpID0g MDsNCj4gPiArCXVpbnQxNl90IGN1cnJlbnRfZGVxdWV1ZWRfY2JzID0gMCwgY2JzX2luX3RiOw0K PiA+ICsNCj4gPiArCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfdGFpbCArIHRv dGFsX2RlcXVldWVkX2NicykNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4g KwlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2FkX24oKHVpbnQ2NF90ICopZGVzYywN Cj4gPiArCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgZmRvbmUg Yml0ICovDQo+ID4gKwlpZiAoIShhdG9tX2Rlc2MucnNwLnZhbCAmIEFDQzEwMF9GRE9ORSkpDQo+ ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCS8qIEdldCBudW1iZXIgb2YgQ0JzIGluIGRl cXVldWVkIFRCICovDQo+ID4gKwljYnNfaW5fdGIgPSBkZXNjLT5yZXEuY2JzX2luX3RiOw0KPiA+ ICsJLyogR2V0IGxhc3QgQ0IgKi8NCj4gPiArCWxhc3RfZGVzYyA9IHEtPnJpbmdfYWRkciArICgo cS0+c3dfcmluZ190YWlsDQo+ID4gKwkJCSsgdG90YWxfZGVxdWV1ZWRfY2JzICsgY2JzX2luX3Ri IC0gMSkNCj4gPiArCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFzayk7DQo+ID4gKwkvKiBDaGVjayBp ZiBsYXN0IENCIGluIFRCIGlzIHJlYWR5IHRvIGRlcXVldWUgKGFuZCB0aHVzDQo+ID4gKwkgKiB0 aGUgd2hvbGUgVEIpIC0gY2hlY2tpbmcgc2RvbmUgYml0LiBJZiBub3QgcmV0dXJuLg0KPiA+ICsJ ICovDQo+ID4gKwlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2FkX24oKHVpbnQ2NF90 ICopbGFzdF9kZXNjLA0KPiA+ICsJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCWlmICghKGF0 b21fZGVzYy5yc3AudmFsICYgQUNDMTAwX1NET05FKSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4g Kw0KPiA+ICsJLyogRGVxdWV1ZSAqLw0KPiA+ICsJb3AgPSBkZXNjLT5yZXEub3BfYWRkcjsNCj4g PiArDQo+ID4gKwkvKiBDbGVhcmluZyBzdGF0dXMsIGl0IHdpbGwgYmUgc2V0IGJhc2VkIG9uIHJl c3BvbnNlICovDQo+ID4gKwlvcC0+c3RhdHVzID0gMDsNCj4gPiArDQo+ID4gKwl3aGlsZSAoaSA8 IGNic19pbl90Yikgew0KPiA+ICsJCWRlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3Jpbmdf dGFpbA0KPiA+ICsJCQkJKyB0b3RhbF9kZXF1ZXVlZF9jYnMpDQo+ID4gKwkJCQkmIHEtPnN3X3Jp bmdfd3JhcF9tYXNrKTsNCj4gPiArCQlhdG9tX2Rlc2MuYXRvbV9oZHIgPSBfX2F0b21pY19sb2Fk X24oKHVpbnQ2NF90ICopZGVzYywNCj4gPiArCQkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ICsJ CXJzcC52YWwgPSBhdG9tX2Rlc2MucnNwLnZhbDsNCj4gPiArCQlydGVfYmJkZXZfbG9nX2RlYnVn KCJSZXNwLiBkZXNjICVwOiAleCIsIGRlc2MsDQo+ID4gKwkJCQlyc3AudmFsKTsNCj4gPiArDQo+ ID4gKwkJb3AtPnN0YXR1cyB8PSAoKHJzcC5pbnB1dF9lcnIpDQo+ID4gKwkJCQk/ICgxIDw8IFJU RV9CQkRFVl9EQVRBX0VSUk9SKSA6IDApOw0KPiA+ICsJCW9wLT5zdGF0dXMgfD0gKChyc3AuZG1h X2VycikgPyAoMSA8PA0KPiBSVEVfQkJERVZfRFJWX0VSUk9SKSA6IDApOw0KPiA+ICsJCW9wLT5z dGF0dXMgfD0gKChyc3AuZmN3X2VycikgPyAoMSA8PCBSVEVfQkJERVZfRFJWX0VSUk9SKQ0KPiA6 IDApOw0KPiA+ICsNCj4gPiArCQlpZiAoZGVzYy0+cmVxLmxhc3RfZGVzY19pbl9iYXRjaCkgew0K PiA+ICsJCQkoKmFxX2RlcXVldWVkKSsrOw0KPiA+ICsJCQlkZXNjLT5yZXEubGFzdF9kZXNjX2lu X2JhdGNoID0gMDsNCj4gPiArCQl9DQo+ID4gKwkJZGVzYy0+cnNwLnZhbCA9IEFDQzEwMF9ETUFf REVTQ19UWVBFOw0KPiA+ICsJCWRlc2MtPnJzcC5hZGRfaW5mb18wID0gMDsNCj4gPiArCQlkZXNj LT5yc3AuYWRkX2luZm9fMSA9IDA7DQo+ID4gKwkJdG90YWxfZGVxdWV1ZWRfY2JzKys7DQo+ID4g KwkJY3VycmVudF9kZXF1ZXVlZF9jYnMrKzsNCj4gPiArCQlpKys7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJKnJlZl9vcCA9IG9wOw0KPiA+ICsNCj4gPiArCXJldHVybiBjdXJyZW50X2RlcXVldWVk X2NiczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRGVxdWV1ZSBvbmUgZGVjb2RlIG9wZXJhdGlv biBmcm9tIEFDQzEwMCBkZXZpY2UgaW4gQ0IgbW9kZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGlu dA0KPiA+ICtkZXF1ZXVlX2RlY19vbmVfb3BfY2Ioc3RydWN0IHJ0ZV9iYmRldl9xdWV1ZV9kYXRh ICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IGFjYzEwMF9xdWV1ZSAqcSwgc3RydWN0IHJ0ZV9iYmRl dl9kZWNfb3AgKipyZWZfb3AsDQo+ID4gKwkJdWludDE2X3QgZGVxdWV1ZWRfY2JzLCB1aW50MzJf dCAqYXFfZGVxdWV1ZWQpDQo+ID4gK3sNCj4gPiArCXVuaW9uIGFjYzEwMF9kbWFfZGVzYyAqZGVz YywgYXRvbV9kZXNjOw0KPiA+ICsJdW5pb24gYWNjMTAwX2RtYV9yc3BfZGVzYyByc3A7DQo+ID4g KwlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3A7DQo+ID4gKw0KPiA+ICsJZGVzYyA9IHEtPnJp bmdfYWRkciArICgocS0+c3dfcmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEt PnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWF0b21fZGVzYy5hdG9tX2hkciA9IF9fYXRvbWlj X2xvYWRfbigodWludDY0X3QgKilkZXNjLA0KPiA+ICsJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4g PiArDQo+ID4gKwkvKiBDaGVjayBmZG9uZSBiaXQgKi8NCj4gPiArCWlmICghKGF0b21fZGVzYy5y c3AudmFsICYgQUNDMTAwX0ZET05FKSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICsJ cnNwLnZhbCA9IGF0b21fZGVzYy5yc3AudmFsOw0KPiA+ICsJcnRlX2JiZGV2X2xvZ19kZWJ1Zygi UmVzcC4gZGVzYyAlcDogJXgiLCBkZXNjLCByc3AudmFsKTsNCj4gPiArDQo+ID4gKwkvKiBEZXF1 ZXVlICovDQo+ID4gKwlvcCA9IGRlc2MtPnJlcS5vcF9hZGRyOw0KPiA+ICsNCj4gPiArCS8qIENs ZWFyaW5nIHN0YXR1cywgaXQgd2lsbCBiZSBzZXQgYmFzZWQgb24gcmVzcG9uc2UgKi8NCj4gPiAr CW9wLT5zdGF0dXMgPSAwOw0KPiA+ICsJb3AtPnN0YXR1cyB8PSAoKHJzcC5pbnB1dF9lcnIpDQo+ ID4gKwkJCT8gKDEgPDwgUlRFX0JCREVWX0RBVEFfRVJST1IpIDogMCk7DQo+IA0KPiBzaW1pbGFy IHRvIGFib3ZlLCBjYW4gcmVtb3ZlIHRoZSA9IDANCj4gDQo+IFRoaXMgaXMgYSBnZW5lcmFsIGlz c3VlLg0KDQpzYW1lIGNvbW1lbnQgYWJvdmUNCg0KPiANCj4gPiArCW9wLT5zdGF0dXMgfD0gKChy c3AuZG1hX2VycikgPyAoMSA8PCBSVEVfQkJERVZfRFJWX0VSUk9SKSA6IDApOw0KPiA+ICsJb3At PnN0YXR1cyB8PSAoKHJzcC5mY3dfZXJyKSA/ICgxIDw8IFJURV9CQkRFVl9EUlZfRVJST1IpIDog MCk7DQo+ID4gKwlpZiAob3AtPnN0YXR1cyAhPSAwKQ0KPiA+ICsJCXFfZGF0YS0+cXVldWVfc3Rh dHMuZGVxdWV1ZV9lcnJfY291bnQrKzsNCj4gPiArDQo+ID4gKwkvKiBDUkMgaW52YWxpZCBpZiBl cnJvciBleGlzdHMgKi8NCj4gPiArCWlmICghb3AtPnN0YXR1cykNCj4gPiArCQlvcC0+c3RhdHVz IHw9IHJzcC5jcmNfc3RhdHVzIDw8IFJURV9CQkRFVl9DUkNfRVJST1I7DQo+ID4gKwlvcC0+dHVy Ym9fZGVjLml0ZXJfY291bnQgPSAodWludDhfdCkgcnNwLml0ZXJfY250IC8gMjsNCj4gPiArCS8q IENoZWNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgZGVzYyBpbiBiYXRjaCAoQXRvbWljIFF1ZXVlKSAq Lw0KPiA+ICsJaWYgKGRlc2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0Y2gpIHsNCj4gPiArCQkoKmFx X2RlcXVldWVkKSsrOw0KPiA+ICsJCWRlc2MtPnJlcS5sYXN0X2Rlc2NfaW5fYmF0Y2ggPSAwOw0K PiA+ICsJfQ0KPiA+ICsJZGVzYy0+cnNwLnZhbCA9IEFDQzEwMF9ETUFfREVTQ19UWVBFOw0KPiA+ ICsJZGVzYy0+cnNwLmFkZF9pbmZvXzAgPSAwOw0KPiA+ICsJZGVzYy0+cnNwLmFkZF9pbmZvXzEg PSAwOw0KPiA+ICsJKnJlZl9vcCA9IG9wOw0KPiA+ICsNCj4gPiArCS8qIE9uZSBDQiAob3ApIHdh cyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQgKi8NCj4gPiArCXJldHVybiAxOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKiBEZXF1ZXVlIG9uZSBkZWNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzEwMCBkZXZp Y2UgaW4gQ0IgbW9kZSAqLw0KPiA+ICtzdGF0aWMgaW5saW5lIGludA0KPiA+ICtkZXF1ZXVlX2xk cGNfZGVjX29uZV9vcF9jYihzdHJ1Y3QgcnRlX2JiZGV2X3F1ZXVlX2RhdGEgKnFfZGF0YSwNCj4g PiArCQlzdHJ1Y3QgYWNjMTAwX3F1ZXVlICpxLCBzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqKnJl Zl9vcCwNCj4gPiArCQl1aW50MTZfdCBkZXF1ZXVlZF9jYnMsIHVpbnQzMl90ICphcV9kZXF1ZXVl ZCkNCj4gPiArew0KPiA+ICsJdW5pb24gYWNjMTAwX2RtYV9kZXNjICpkZXNjLCBhdG9tX2Rlc2M7 DQo+ID4gKwl1bmlvbiBhY2MxMDBfZG1hX3JzcF9kZXNjIHJzcDsNCj4gPiArCXN0cnVjdCBydGVf YmJkZXZfZGVjX29wICpvcDsNCj4gPiArDQo+ID4gKwlkZXNjID0gcS0+cmluZ19hZGRyICsgKChx LT5zd19yaW5nX3RhaWwgKyBkZXF1ZXVlZF9jYnMpDQo+ID4gKwkJCSYgcS0+c3dfcmluZ193cmFw X21hc2spOw0KPiA+ICsJYXRvbV9kZXNjLmF0b21faGRyID0gX19hdG9taWNfbG9hZF9uKCh1aW50 NjRfdCAqKWRlc2MsDQo+ID4gKwkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ICsNCj4gPiArCS8q IENoZWNrIGZkb25lIGJpdCAqLw0KPiA+ICsJaWYgKCEoYXRvbV9kZXNjLnJzcC52YWwgJiBBQ0Mx MDBfRkRPTkUpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlyc3AudmFsID0gYXRv bV9kZXNjLnJzcC52YWw7DQo+ID4gKw0KPiA+ICsJLyogRGVxdWV1ZSAqLw0KPiA+ICsJb3AgPSBk ZXNjLT5yZXEub3BfYWRkcjsNCj4gPiArDQo+ID4gKwkvKiBDbGVhcmluZyBzdGF0dXMsIGl0IHdp bGwgYmUgc2V0IGJhc2VkIG9uIHJlc3BvbnNlICovDQo+ID4gKwlvcC0+c3RhdHVzID0gMDsNCj4g PiArCW9wLT5zdGF0dXMgfD0gcnNwLmlucHV0X2VyciA8PCBSVEVfQkJERVZfREFUQV9FUlJPUjsN Cj4gPiArCW9wLT5zdGF0dXMgfD0gcnNwLmRtYV9lcnIgPDwgUlRFX0JCREVWX0RSVl9FUlJPUjsN Cj4gPiArCW9wLT5zdGF0dXMgfD0gcnNwLmZjd19lcnIgPDwgUlRFX0JCREVWX0RSVl9FUlJPUjsN Cj4gPiArCWlmIChvcC0+c3RhdHVzICE9IDApDQo+ID4gKwkJcV9kYXRhLT5xdWV1ZV9zdGF0cy5k ZXF1ZXVlX2Vycl9jb3VudCsrOw0KPiA+ICsNCj4gPiArCW9wLT5zdGF0dXMgfD0gcnNwLmNyY19z dGF0dXMgPDwgUlRFX0JCREVWX0NSQ19FUlJPUjsNCj4gPiArCWlmIChvcC0+bGRwY19kZWMuaGFy ZF9vdXRwdXQubGVuZ3RoID4gMCAmJiAhcnNwLnN5bmRfb2spDQo+ID4gKwkJb3AtPnN0YXR1cyB8 PSAxIDw8IFJURV9CQkRFVl9TWU5EUk9NRV9FUlJPUjsNCj4gPiArCW9wLT5sZHBjX2RlYy5pdGVy X2NvdW50ID0gKHVpbnQ4X3QpIHJzcC5pdGVyX2NudDsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayBp ZiB0aGlzIGlzIHRoZSBsYXN0IGRlc2MgaW4gYmF0Y2ggKEF0b21pYyBRdWV1ZSkgKi8NCj4gPiAr CWlmIChkZXNjLT5yZXEubGFzdF9kZXNjX2luX2JhdGNoKSB7DQo+ID4gKwkJKCphcV9kZXF1ZXVl ZCkrKzsNCj4gPiArCQlkZXNjLT5yZXEubGFzdF9kZXNjX2luX2JhdGNoID0gMDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlkZXNjLT5yc3AudmFsID0gQUNDMTAwX0RNQV9ERVNDX1RZUEU7DQo+ID4g KwlkZXNjLT5yc3AuYWRkX2luZm9fMCA9IDA7DQo+ID4gKwlkZXNjLT5yc3AuYWRkX2luZm9fMSA9 IDA7DQo+ID4gKw0KPiA+ICsJKnJlZl9vcCA9IG9wOw0KPiA+ICsNCj4gPiArCS8qIE9uZSBDQiAo b3ApIHdhcyBzdWNjZXNzZnVsbHkgZGVxdWV1ZWQgKi8NCj4gPiArCXJldHVybiAxOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKiBEZXF1ZXVlIG9uZSBkZWNvZGUgb3BlcmF0aW9ucyBmcm9tIEFDQzEw MCBkZXZpY2UgaW4gVEIgbW9kZS4gKi8NCj4gPiArc3RhdGljIGlubGluZSBpbnQNCj4gPiArZGVx dWV1ZV9kZWNfb25lX29wX3RiKHN0cnVjdCBhY2MxMDBfcXVldWUgKnEsIHN0cnVjdA0KPiBydGVf YmJkZXZfZGVjX29wICoqcmVmX29wLA0KPiA+ICsJCXVpbnQxNl90IGRlcXVldWVkX2NicywgdWlu dDMyX3QgKmFxX2RlcXVldWVkKQ0KPiA+ICt7DQo+IHNpbWlsYXIgY2FsbCBhcyBmcGdhX2x0ZV9m ZWMNCg0KZGlzdGluY3QgdGhvdWdoIGFzIEhXIHNwZWNpZmljDQoNCj4gPiArCXVuaW9uIGFjYzEw MF9kbWFfZGVzYyAqZGVzYywgKmxhc3RfZGVzYywgYXRvbV9kZXNjOw0KPiA+ICsJdW5pb24gYWNj MTAwX2RtYV9yc3BfZGVzYyByc3A7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2X2RlY19vcCAqb3A7 DQo+ID4gKwl1aW50OF90IGNic19pbl90YiA9IDEsIGNiX2lkeCA9IDA7DQo+ID4gKw0KPiA+ICsJ ZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3dfcmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0K PiA+ICsJCQkmIHEtPnN3X3Jpbmdfd3JhcF9tYXNrKTsNCj4gPiArCWF0b21fZGVzYy5hdG9tX2hk ciA9IF9fYXRvbWljX2xvYWRfbigodWludDY0X3QgKilkZXNjLA0KPiA+ICsJCQlfX0FUT01JQ19S RUxBWEVEKTsNCj4gPiArDQo+ID4gKwkvKiBDaGVjayBmZG9uZSBiaXQgKi8NCj4gPiArCWlmICgh KGF0b21fZGVzYy5yc3AudmFsICYgQUNDMTAwX0ZET05FKSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ ID4gKw0KPiA+ICsJLyogRGVxdWV1ZSAqLw0KPiA+ICsJb3AgPSBkZXNjLT5yZXEub3BfYWRkcjsN Cj4gPiArDQo+ID4gKwkvKiBHZXQgbnVtYmVyIG9mIENCcyBpbiBkZXF1ZXVlZCBUQiAqLw0KPiA+ ICsJY2JzX2luX3RiID0gZGVzYy0+cmVxLmNic19pbl90YjsNCj4gPiArCS8qIEdldCBsYXN0IENC ICovDQo+ID4gKwlsYXN0X2Rlc2MgPSBxLT5yaW5nX2FkZHIgKyAoKHEtPnN3X3JpbmdfdGFpbA0K PiA+ICsJCQkrIGRlcXVldWVkX2NicyArIGNic19pbl90YiAtIDEpDQo+ID4gKwkJCSYgcS0+c3df cmluZ193cmFwX21hc2spOw0KPiA+ICsJLyogQ2hlY2sgaWYgbGFzdCBDQiBpbiBUQiBpcyByZWFk eSB0byBkZXF1ZXVlIChhbmQgdGh1cw0KPiA+ICsJICogdGhlIHdob2xlIFRCKSAtIGNoZWNraW5n IHNkb25lIGJpdC4gSWYgbm90IHJldHVybi4NCj4gPiArCSAqLw0KPiA+ICsJYXRvbV9kZXNjLmF0 b21faGRyID0gX19hdG9taWNfbG9hZF9uKCh1aW50NjRfdCAqKWxhc3RfZGVzYywNCj4gPiArCQkJ X19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKwlpZiAoIShhdG9tX2Rlc2MucnNwLnZhbCAmIEFDQzEw MF9TRE9ORSkpDQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCS8qIENsZWFyaW5nIHN0 YXR1cywgaXQgd2lsbCBiZSBzZXQgYmFzZWQgb24gcmVzcG9uc2UgKi8NCj4gPiArCW9wLT5zdGF0 dXMgPSAwOw0KPiA+ICsNCj4gPiArCS8qIFJlYWQgcmVtYWluaW5nIENCcyBpZiBleGlzdHMgKi8N Cj4gPiArCXdoaWxlIChjYl9pZHggPCBjYnNfaW5fdGIpIHsNCj4gT3RoZXIgc2ltaWxhciBjYWxs cyB1c2UgJ2knICwgJ2NiX2lkeCcgaXMgbW9yZSBtZWFuaW5nZnVsLCBjb25zaWRlciBjaGFuZ2lu ZyB0aGUNCj4gb3RoZXIgbG9vcHMuDQoNCk1vcmUgcmVsZXZhbnQgaGVyZSBkdWUgdG8gc3BsaXQg b2YgVEIgaW50byBDQnMuIA0KDQo+ID4gKwkJZGVzYyA9IHEtPnJpbmdfYWRkciArICgocS0+c3df cmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0KPiA+ICsJCQkJJiBxLT5zd19yaW5nX3dyYXBfbWFz ayk7DQo+ID4gKwkJYXRvbV9kZXNjLmF0b21faGRyID0gX19hdG9taWNfbG9hZF9uKCh1aW50NjRf dCAqKWRlc2MsDQo+ID4gKwkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCQlyc3AudmFsID0g YXRvbV9kZXNjLnJzcC52YWw7DQo+ID4gKwkJcnRlX2JiZGV2X2xvZ19kZWJ1ZygiUmVzcC4gZGVz YyAlcDogJXgiLCBkZXNjLA0KPiA+ICsJCQkJcnNwLnZhbCk7DQo+ID4gKw0KPiA+ICsJCW9wLT5z dGF0dXMgfD0gKChyc3AuaW5wdXRfZXJyKQ0KPiA+ICsJCQkJPyAoMSA8PCBSVEVfQkJERVZfREFU QV9FUlJPUikgOiAwKTsNCj4gPiArCQlvcC0+c3RhdHVzIHw9ICgocnNwLmRtYV9lcnIpID8gKDEg PDwNCj4gUlRFX0JCREVWX0RSVl9FUlJPUikgOiAwKTsNCj4gPiArCQlvcC0+c3RhdHVzIHw9ICgo cnNwLmZjd19lcnIpID8gKDEgPDwgUlRFX0JCREVWX0RSVl9FUlJPUikNCj4gOiAwKTsNCj4gPiAr DQo+ID4gKwkJLyogQ1JDIGludmFsaWQgaWYgZXJyb3IgZXhpc3RzICovDQo+ID4gKwkJaWYgKCFv cC0+c3RhdHVzKQ0KPiA+ICsJCQlvcC0+c3RhdHVzIHw9IHJzcC5jcmNfc3RhdHVzIDw8DQo+IFJU RV9CQkRFVl9DUkNfRVJST1I7DQo+ID4gKwkJb3AtPnR1cmJvX2RlYy5pdGVyX2NvdW50ID0gUlRF X01BWCgodWludDhfdCkgcnNwLml0ZXJfY250LA0KPiA+ICsJCQkJb3AtPnR1cmJvX2RlYy5pdGVy X2NvdW50KTsNCj4gPiArDQo+ID4gKwkJLyogQ2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFzdCBkZXNj IGluIGJhdGNoIChBdG9taWMgUXVldWUpICovDQo+ID4gKwkJaWYgKGRlc2MtPnJlcS5sYXN0X2Rl c2NfaW5fYmF0Y2gpIHsNCj4gPiArCQkJKCphcV9kZXF1ZXVlZCkrKzsNCj4gPiArCQkJZGVzYy0+ cmVxLmxhc3RfZGVzY19pbl9iYXRjaCA9IDA7DQo+ID4gKwkJfQ0KPiA+ICsJCWRlc2MtPnJzcC52 YWwgPSBBQ0MxMDBfRE1BX0RFU0NfVFlQRTsNCj4gPiArCQlkZXNjLT5yc3AuYWRkX2luZm9fMCA9 IDA7DQo+ID4gKwkJZGVzYy0+cnNwLmFkZF9pbmZvXzEgPSAwOw0KPiA+ICsJCWRlcXVldWVkX2Ni cysrOw0KPiA+ICsJCWNiX2lkeCsrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCSpyZWZfb3AgPSBv cDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gY2JfaWR4Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBE ZXF1ZXVlIExEUEMgZW5jb2RlIG9wZXJhdGlvbnMgZnJvbSBBQ0MxMDAgZGV2aWNlLiAqLw0KPiA+ ICtzdGF0aWMgdWludDE2X3QNCj4gPiArYWNjMTAwX2RlcXVldWVfbGRwY19lbmMoc3RydWN0IHJ0 ZV9iYmRldl9xdWV1ZV9kYXRhICpxX2RhdGEsDQo+ID4gKwkJc3RydWN0IHJ0ZV9iYmRldl9lbmNf b3AgKipvcHMsIHVpbnQxNl90IG51bSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjYzEwMF9xdWV1 ZSAqcSA9IHFfZGF0YS0+cXVldWVfcHJpdmF0ZTsNCj4gPiArCXVpbnQzMl90IGF2YWlsID0gcS0+ c3dfcmluZ19oZWFkIC0gcS0+c3dfcmluZ190YWlsOw0KPiA+ICsJdWludDMyX3QgYXFfZGVxdWV1 ZWQgPSAwOw0KPiA+ICsJdWludDE2X3QgZGVxdWV1ZV9udW0sIGksIGRlcXVldWVkX2NicyA9IDAs IGRlcXVldWVkX2Rlc2NzID0gMDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsjaWZkZWYg UlRFX0xJQlJURV9CQkRFVl9ERUJVRw0KPiA+ICsJaWYgKHVubGlrZWx5KG9wcyA9PSAwICYmIHEg PT0gTlVMTCkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArCWRl cXVldWVfbnVtID0gKGF2YWlsIDwgbnVtKSA/IGF2YWlsIDogbnVtOw0KPiANCj4gU2ltaWxhciB0 byBSVEVfTUlODQo+IA0KPiBnZW5lcmFsIGlzc3VlDQoNCm9rLCB3aWxsIGNoZWNrDQoNCj4gDQo+ ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGRlcXVldWVfbnVtOyBpKyspIHsNCj4gPiArCQly ZXQgPSBkZXF1ZXVlX2VuY19vbmVfb3BfY2IocSwgJm9wc1tkZXF1ZXVlZF9jYnNdLA0KPiA+ICsJ CQkJZGVxdWV1ZWRfZGVzY3MsICZhcV9kZXF1ZXVlZCk7DQo+ID4gKwkJaWYgKHJldCA8IDApDQo+ ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlcXVldWVkX2NicyArPSByZXQ7DQo+ID4gKwkJZGVxdWV1 ZWRfZGVzY3MrKzsNCj4gPiArCQlpZiAoZGVxdWV1ZWRfY2JzID49IG51bSkNCj4gPiArCQkJYnJl YWs7DQo+IGNvbmRpdGlvbiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGZvci1sb29wDQoNCnVuc3Vy ZSB0aGlzIHdvdWxkIGhlbHBzIHJlYWRhYmlsaXR5IHBlcnNvbm5hbHkNCg0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXEtPmFxX2RlcXVldWVkICs9IGFxX2RlcXVldWVkOw0KPiA+ICsJcS0+c3dfcmlu Z190YWlsICs9IGRlcXVldWVkX2Rlc2NzOw0KPiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBlbnF1ZXVl IHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmRlcXVldWVkX2NvdW50ICs9IGRl cXVldWVkX2NiczsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZGVxdWV1ZWRfY2JzOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKiBEZXF1ZXVlIGRlY29kZSBvcGVyYXRpb25zIGZyb20gQUNDMTAwIGRldmlj ZS4gKi8NCj4gPiArc3RhdGljIHVpbnQxNl90DQo+ID4gK2FjYzEwMF9kZXF1ZXVlX2xkcGNfZGVj KHN0cnVjdCBydGVfYmJkZXZfcXVldWVfZGF0YSAqcV9kYXRhLA0KPiA+ICsJCXN0cnVjdCBydGVf YmJkZXZfZGVjX29wICoqb3BzLCB1aW50MTZfdCBudW0pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBh Y2MxMDBfcXVldWUgKnEgPSBxX2RhdGEtPnF1ZXVlX3ByaXZhdGU7DQo+ID4gKwl1aW50MTZfdCBk ZXF1ZXVlX251bTsNCj4gPiArCXVpbnQzMl90IGF2YWlsID0gcS0+c3dfcmluZ19oZWFkIC0gcS0+ c3dfcmluZ190YWlsOw0KPiA+ICsJdWludDMyX3QgYXFfZGVxdWV1ZWQgPSAwOw0KPiA+ICsJdWlu dDE2X3QgaTsNCj4gPiArCXVpbnQxNl90IGRlcXVldWVkX2NicyA9IDA7DQo+ID4gKwlzdHJ1Y3Qg cnRlX2JiZGV2X2RlY19vcCAqb3A7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArI2lmZGVm IFJURV9MSUJSVEVfQkJERVZfREVCVUcNCj4gPiArCWlmICh1bmxpa2VseShvcHMgPT0gMCAmJiBx ID09IE5VTEwpKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKwlk ZXF1ZXVlX251bSA9IChhdmFpbCA8IG51bSkgPyBhdmFpbCA6IG51bTsNCj4gPiArDQo+ID4gKwlm b3IgKGkgPSAwOyBpIDwgZGVxdWV1ZV9udW07ICsraSkgew0KPiA+ICsJCW9wID0gKHEtPnJpbmdf YWRkciArICgocS0+c3dfcmluZ190YWlsICsgZGVxdWV1ZWRfY2JzKQ0KPiA+ICsJCQkmIHEtPnN3 X3Jpbmdfd3JhcF9tYXNrKSktPnJlcS5vcF9hZGRyOw0KPiA+ICsJCWlmIChvcC0+bGRwY19kZWMu Y29kZV9ibG9ja19tb2RlID09IDApDQo+IA0KPiAwIHNob3VsZCBiZSBhICNkZWZpbmUNCg0KbWVu dGlvbmVkIGluIHByZXZpb3VzIHJldmlldy4NCg0KVGhhbmtzDQoNCj4gDQo+IFRvbQ0KPiANCj4g PiArCQkJcmV0ID0gZGVxdWV1ZV9kZWNfb25lX29wX3RiKHEsICZvcHNbaV0sDQo+IGRlcXVldWVk X2NicywNCj4gPiArCQkJCQkmYXFfZGVxdWV1ZWQpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJcmV0 ID0gZGVxdWV1ZV9sZHBjX2RlY19vbmVfb3BfY2IoDQo+ID4gKwkJCQkJcV9kYXRhLCBxLCAmb3Bz W2ldLCBkZXF1ZXVlZF9jYnMsDQo+ID4gKwkJCQkJJmFxX2RlcXVldWVkKTsNCj4gPiArDQo+ID4g KwkJaWYgKHJldCA8IDApDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlcXVldWVkX2NicyArPSBy ZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcS0+YXFfZGVxdWV1ZWQgKz0gYXFfZGVxdWV1ZWQ7 DQo+ID4gKwlxLT5zd19yaW5nX3RhaWwgKz0gZGVxdWV1ZWRfY2JzOw0KPiA+ICsNCj4gPiArCS8q IFVwZGF0ZSBlbnF1ZXVlIHN0YXRzICovDQo+ID4gKwlxX2RhdGEtPnF1ZXVlX3N0YXRzLmRlcXVl dWVkX2NvdW50ICs9IGk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk7DQo+ID4gK30NCj4gPiArDQo+ ID4gIC8qIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9uICovDQo+ID4gIHN0YXRpYyB2b2lkDQo+ID4g IGFjYzEwMF9iYmRldl9pbml0KHN0cnVjdCBydGVfYmJkZXYgKmRldiwgc3RydWN0IHJ0ZV9wY2lf ZHJpdmVyICpkcnYpDQo+ID4gQEAgLTcwMyw2ICsyMzIxLDEwIEBADQo+ID4gIAlzdHJ1Y3QgcnRl X3BjaV9kZXZpY2UgKnBjaV9kZXYgPSBSVEVfREVWX1RPX1BDSShkZXYtPmRldmljZSk7DQo+ID4N Cj4gPiAgCWRldi0+ZGV2X29wcyA9ICZhY2MxMDBfYmJkZXZfb3BzOw0KPiA+ICsJZGV2LT5lbnF1 ZXVlX2xkcGNfZW5jX29wcyA9IGFjYzEwMF9lbnF1ZXVlX2xkcGNfZW5jOw0KPiA+ICsJZGV2LT5l bnF1ZXVlX2xkcGNfZGVjX29wcyA9IGFjYzEwMF9lbnF1ZXVlX2xkcGNfZGVjOw0KPiA+ICsJZGV2 LT5kZXF1ZXVlX2xkcGNfZW5jX29wcyA9IGFjYzEwMF9kZXF1ZXVlX2xkcGNfZW5jOw0KPiA+ICsJ ZGV2LT5kZXF1ZXVlX2xkcGNfZGVjX29wcyA9IGFjYzEwMF9kZXF1ZXVlX2xkcGNfZGVjOw0KPiA+ DQo+ID4gIAkoKHN0cnVjdCBhY2MxMDBfZGV2aWNlICopIGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGUp LT5wZl9kZXZpY2UgPQ0KPiA+ICAJCQkhc3RyY21wKGRydi0+ZHJpdmVyLm5hbWUsDQo+ID4gQEAg LTgxNSw0ICsyNDM3LDMgQEAgc3RhdGljIGludCBhY2MxMDBfcGNpX3JlbW92ZShzdHJ1Y3QNCj4g cnRlX3BjaV9kZXZpY2UgKnBjaV9kZXYpDQo+ID4gIFJURV9QTURfUkVHSVNURVJfUENJX1RBQkxF KEFDQzEwMFBGX0RSSVZFUl9OQU1FLA0KPiBwY2lfaWRfYWNjMTAwX3BmX21hcCk7DQo+ID4gIFJU RV9QTURfUkVHSVNURVJfUENJKEFDQzEwMFZGX0RSSVZFUl9OQU1FLA0KPiBhY2MxMDBfcGNpX3Zm X2RyaXZlcik7DQo+ID4gIFJURV9QTURfUkVHSVNURVJfUENJX1RBQkxFKEFDQzEwMFZGX0RSSVZF Ul9OQU1FLA0KPiBwY2lfaWRfYWNjMTAwX3ZmX21hcCk7DQo+ID4gLQ0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX3BtZC5oDQo+IGIvZHJpdmVycy9i YXNlYmFuZC9hY2MxMDAvcnRlX2FjYzEwMF9wbWQuaA0KPiA+IGluZGV4IDBlMmI3OWMuLjc4Njg2 YzEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9iYXNlYmFuZC9hY2MxMDAvcnRlX2FjYzEwMF9w bWQuaA0KPiA+ICsrKyBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmgN Cj4gPiBAQCAtODgsNiArODgsOCBAQA0KPiA+ICAjZGVmaW5lIFRNUExfUFJJXzMgICAgICAweDBm MGUwZDBjDQo+ID4gICNkZWZpbmUgUVVFVUVfRU5BQkxFICAgIDB4ODAwMDAwMDAgIC8qIEJpdCB0 byBtYXJrIFF1ZXVlIGFzIEVuYWJsZWQgKi8NCj4gPiAgI2RlZmluZSBXT1JEU19JTl9BUkFNX1NJ WkUgKDEyOCAqIDEwMjQgLyA0KQ0KPiA+ICsjZGVmaW5lIEFDQzEwMF9GRE9ORSAgICAweDgwMDAw MDAwDQo+ID4gKyNkZWZpbmUgQUNDMTAwX1NET05FICAgIDB4NDAwMDAwMDANCj4gPg0KPiA+ICAj ZGVmaW5lIEFDQzEwMF9OVU1fVE1QTCAgMzINCj4gPiAgI2RlZmluZSBWRl9PRkZTRVRfUU9TIDE2 IC8qIG9mZnNldCBpbiBNZW1vcnkgU3BhY2Ugc3BlY2lmaWMgdG8gUW9TDQo+IE1vbiAqLw0KPiA+ IEBAIC0zOTgsNiArNDAwLDcgQEAgc3RydWN0IF9fcnRlX3BhY2tlZCBhY2MxMDBfZG1hX3JlcV9k ZXNjIHsNCj4gPiAgdW5pb24gYWNjMTAwX2RtYV9kZXNjIHsNCj4gPiAgCXN0cnVjdCBhY2MxMDBf ZG1hX3JlcV9kZXNjIHJlcTsNCj4gPiAgCXVuaW9uIGFjYzEwMF9kbWFfcnNwX2Rlc2MgcnNwOw0K PiA+ICsJdWludDY0X3QgYXRvbV9oZHI7DQo+ID4gIH07DQo+ID4NCj4gPg0KDQo=