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 13875A04C3; Mon, 28 Sep 2020 13:14:33 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DFBD71D932; Mon, 28 Sep 2020 13:14:31 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id B665B1D932 for ; Mon, 28 Sep 2020 13:14:28 +0200 (CEST) IronPort-SDR: 1ya3VmwRWoZtZ/LNwgdLGmE7PWdKNr9NEXOi4YUVA/B+FD/fYpbsmZjrS8UTOWW0oRZe+zCNsw moCU7VkP8KvA== X-IronPort-AV: E=McAfee;i="6000,8403,9757"; a="149639221" X-IronPort-AV: E=Sophos;i="5.77,313,1596524400"; d="scan'208";a="149639221" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Sep 2020 04:14:26 -0700 IronPort-SDR: MpbrRSxCLuJpaT29vFnGmfOOChIqiJ7ohaAM7gWFEpSxWwjLRPv895AXHXRbaFPhL8EU+5UQgg B/vHizaUiu3w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,313,1596524400"; d="scan'208";a="514216526" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga005.fm.intel.com with ESMTP; 28 Sep 2020 04:14:26 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) 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; Mon, 28 Sep 2020 04:14:26 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 28 Sep 2020 04:14:25 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 28 Sep 2020 04:14:25 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.176) 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; Mon, 28 Sep 2020 04:14:24 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n7UXVPLsuz8aZZFeRBpTq9skzd4VnciLTZnUBMGVveoh+NzsCDJK8rzbGA9w4kQgd+/u1TFdgyRVRlUynAFDgcArMknRtO9y2MvlPeCvf4DWakTlqNh9FADst3fLtT8QsTTkzm29o32ZO0C+5H43iYUX9967jqI4ywpWBRZm2Uo/sbGIbJwuOeEoaSq/L1c+uxJV9O6yysIamzPpjkxsraTADSM8R4aS8JbhlM9zCc9Uxz6CDLUvYF6nQtB1rGyZOge9YQRTxITXx4BUIL8gyRqItUZq+gmXSBCDKfGkRPdL6lcXmkUDsf67Tn8LpGitCs1yCzpih0f3QBFXFQSQXg== 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=16rrb2Jp+DhSCobW2IaHtFs42jpWqfi/O/y5q4ISKfQ=; b=R87/pBz/ktRq8frCJ6/JJwcWaXiLoS+sYY3VWQXHQoxbF28PCYCEAaxuEBjw4yTcNetPeg5YgIe/gdA4wj4aMJORZDSCpnKroXf1hpuSzuj6AMcE3vDkdvaX1Swtv6l4cu7YBmUWcW3WNY2M79u8DneqWTsFu72XC549Yfm0GHiEvfhEoxHzZRrJUWT/FOHhHmUwsePpQBg+FTHjxp6UrxgkXXHoGRqf7zgnbNlHYqqcu3euiLCeaXjy34H1WcDKScWXh+UPJLvZhl79f+NWNy7qKJmoEZqb+JYbXg/WEhPDphRtWneOlKocPgBZ949BYI2i/bEjgqBZ51X4kwqalQ== 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=16rrb2Jp+DhSCobW2IaHtFs42jpWqfi/O/y5q4ISKfQ=; b=l0erLdG+0J5T54p6AiEX8mnkD6cFZl7wBHD/gKtZcg3T3FVFG2N5gRjN7F1smo+psGBapS3Rfi69PFc67lyGYBAhh/V0oR6crUQx4i8cRefYOfMmAjCcH9bst+V30sCCKVQrZEMM7sxeGbVXND8hbTocax4dZVHjqhE42fmuCqI= Received: from BY5PR11MB4055.namprd11.prod.outlook.com (2603:10b6:a03:18b::28) by BYAPR11MB3432.namprd11.prod.outlook.com (2603:10b6:a03:8a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.24; Mon, 28 Sep 2020 11:14:21 +0000 Received: from BY5PR11MB4055.namprd11.prod.outlook.com ([fe80::141e:cfe8:cc72:5847]) by BY5PR11MB4055.namprd11.prod.outlook.com ([fe80::141e:cfe8:cc72:5847%7]) with mapi id 15.20.3412.025; Mon, 28 Sep 2020 11:14:21 +0000 From: "Xia, Chenbo" To: Maxime Coquelin , "dev@dpdk.org" , "Stokes, Ian" Thread-Topic: [PATCH v2 4/4] vhost: remove dequeue zero-copy support Thread-Index: AQHWlXg7YLGG205ukUOjxueJNN/USql95FDg Date: Mon, 28 Sep 2020 11:14:21 +0000 Message-ID: References: <20200928091712.7946-1-maxime.coquelin@redhat.com> <20200928091712.7946-5-maxime.coquelin@redhat.com> In-Reply-To: <20200928091712.7946-5-maxime.coquelin@redhat.com> Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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: [192.55.46.46] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b4924b24-e64c-4717-a233-08d8639fa69d x-ms-traffictypediagnostic: BYAPR11MB3432: 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:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mMH/KAz0dgAMbigF1kYTEDX/p3rJar+S2wc4E9y0BJeYrL2dfZ9lsdKv1PRdDpZDVMjBlt0K6UGqaIHtrlJe06sb2oNKQmDhLrfDpMwwIKnr5lQ51pUVpfLkp/BPYAhrcHb0ylfsUGVynuCUtNG9rSGtScYPH+ZSEwGwAjhrWVdVO/sU1MKs7TgHXbo1d4I0onnUGXmYi7q9Q6UTYUzW5F+Kj08BY7QYyme08VYCY3Pu/Vhd1RKIRZvKDqfytq0EoUATHq+31CfhZ7bxCUrDI4DyF4QG7cPutatHo1RDfuASkas0aUHpAiBvKijIfuJeTwwfjZAKsiQRguoOuC2Pk9E8TvYDcur8b34JXZ7aOG3uZ/WglBffyHUK17Ss0zC1 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB4055.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(376002)(136003)(39860400002)(396003)(71200400001)(5660300002)(66476007)(64756008)(76116006)(110136005)(8676002)(9686003)(66446008)(66946007)(6506007)(33656002)(53546011)(55016002)(52536014)(8936002)(7696005)(2906002)(86362001)(83380400001)(66556008)(6636002)(26005)(478600001)(30864003)(186003)(316002)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: 9m4J4VHNpLogpxiUvIPvgbOV5pvTU7uF5K4ty6YsQ3XpjEibgAv9ZAoWu2Y6+GNzemP6SnMhPVSzR0IKR+FmntFh8mtgx9LeJcXhFPXakZwglOQsFEMmd16uWtL6PmJirVypIOA9890/1XUBE4jLTVA2plXCcyw2VchxJsToFBPrEDczzmSWSf7j/EmJYj/B6GeODrAkUyuWgRsIOQpAm8rv4a2k3CwzzIknBULeeF3SKqAL80owPM3FJwbMF3X2Rti8KacMFORcQMhxhGF2MJiDx8iAJzq0qyx8J+T1SJPubgZsDv8yY8UH62LgSV8FntzqBXxon5XA7Ig+W7AOU3yguzyt0rkm7lNDLVEevwTaXXcThd9zOMSCIZuOxDQ78yTGppxkZBFzNzl+609d9L9THAcpXOoBnDH44IrAaClp6O9qXtRa5jH8pDj5wdCAfIwzRaK5ifJqs7piL81FQry09+zWsP1AXQlhoRt9gzARdQdNaWmFpt/KkZfYO1PQywCTdqyCXjsp3BOoy1C5LFAsHeSG7DdPum08aBpgFydF0b2IF6FN3C7NJqq/XOArfc3IuNEcygIHDPEWGeYvPJui98MxiFc5h6kM4oAzcct5tsmHYvstvtB3tq2Ah71Gr9kcRRDG7gb5VARaOXWUQw== 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: BY5PR11MB4055.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b4924b24-e64c-4717-a233-08d8639fa69d X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Sep 2020 11:14:21.6545 (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: OTuyM4yVuJGPMBq8INjTcJkM9hrMqjawMX2rUARQisQvr68xJqHHoxgNeNWKYKHeTvynYNvuFUV5fqTA0smCXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB3432 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v2 4/4] vhost: remove dequeue zero-copy support 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" PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNYXhpbWUgQ29xdWVsaW4gPG1h eGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPg0KPiBTZW50OiBNb25kYXksIFNlcHRlbWJlciAyOCwg MjAyMCA1OjE3IFBNDQo+IFRvOiBkZXZAZHBkay5vcmc7IFhpYSwgQ2hlbmJvIDxjaGVuYm8ueGlh QGludGVsLmNvbT47IFN0b2tlcywgSWFuDQo+IDxpYW4uc3Rva2VzQGludGVsLmNvbT4NCj4gQ2M6 IE1heGltZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IFN1YmplY3Q6 IFtQQVRDSCB2MiA0LzRdIHZob3N0OiByZW1vdmUgZGVxdWV1ZSB6ZXJvLWNvcHkgc3VwcG9ydA0K PiANCj4gRGVxdWV1ZSB6ZXJvLWNvcHkgcmVtb3ZhbCB3YXMgYW5ub3VuY2VkIGluIERQREsgdjIw LjA4Lg0KPiBUaGlzIGZlYXR1cmUgYnJpbmdzIGNvbnN0cmFpbnRzIHdoaWNoIG1ha2VzIHRoZSBt YWludGVuYW5jZQ0KPiBvZiB0aGUgVmhvc3QgbGlicmFyeSBkaWZmaWN1bHQuIEl0cyBsaW1pdGF0 aW9ucyBtYWtlcyBpdCBhbHNvDQo+IGRpZmZpY3VsdCB0byB1c2UgYnkgdGhlIGFwcGxpY2F0aW9u cyAoVHggdnJpbmcgc3RhcnZhdGlvbikuDQo+IA0KPiBSZW1vdmluZyBpdCBtYWtlcyBpdCBlYXNp ZXIgdG8gYWRkIG5ldyBmZWF0dXJlcywgYW5kIGFsc28gcmVtb3ZlDQo+IHNvbWUgY29kZSBpbiB0 aGUgaG90IHBhdGgsIHdoaWNoIHNob3VsZCBicmluZyBhIHBlcmZvcm1hbmNlDQo+IGltcHJvdmVt ZW50IGZvciB0aGUgc3RhbmRhcmQgcGF0aC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IE1heGltZSBD b3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IC0tLQ0KPiAgZG9jL2d1aWRl cy9wcm9nX2d1aWRlL3Zob3N0X2xpYi5yc3QgfCAgNTIgKy0tLS0NCj4gIGxpYi9saWJydGVfdmhv c3QvcnRlX3Zob3N0LmggICAgICAgIHwgICAyICstDQo+ICBsaWIvbGlicnRlX3Zob3N0L3NvY2tl dC5jICAgICAgICAgICB8ICA0NyAtLS0tDQo+ICBsaWIvbGlicnRlX3Zob3N0L3Zob3N0LmMgICAg ICAgICAgICB8ICAxNCAtLQ0KPiAgbGliL2xpYnJ0ZV92aG9zdC92aG9zdC5oICAgICAgICAgICAg fCAgMjggLS0tDQo+ICBsaWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYyAgICAgICB8ICA4MCAr LS0tLS0tDQo+ICBsaWIvbGlicnRlX3Zob3N0L3ZpcnRpb19uZXQuYyAgICAgICB8IDMyNiArKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICA3IGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlv bnMoKyksIDUxNiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kb2MvZ3VpZGVzL3By b2dfZ3VpZGUvdmhvc3RfbGliLnJzdA0KPiBiL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS92aG9zdF9s aWIucnN0DQo+IGluZGV4IGI4OTJlZWM2N2EuLmJhNGM2MmFlYjggMTAwNjQ0DQo+IC0tLSBhL2Rv Yy9ndWlkZXMvcHJvZ19ndWlkZS92aG9zdF9saWIucnN0DQo+ICsrKyBiL2RvYy9ndWlkZXMvcHJv Z19ndWlkZS92aG9zdF9saWIucnN0DQo+IEBAIC01MSw1MCArNTEsNiBAQCBUaGUgZm9sbG93aW5n IGlzIGFuIG92ZXJ2aWV3IG9mIHNvbWUga2V5IFZob3N0IEFQSQ0KPiBmdW5jdGlvbnM6DQo+ICAg ICAgVGhpcyByZWNvbm5lY3Qgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSG93ZXZlciwg aXQgY2FuIGJlDQo+IHR1cm5lZCBvZmYNCj4gICAgICBieSBzZXR0aW5nIHRoaXMgZmxhZy4NCj4g DQo+IC0gIC0gYGBSVEVfVkhPU1RfVVNFUl9ERVFVRVVFX1pFUk9fQ09QWWBgDQo+IC0NCj4gLSAg ICBEZXF1ZXVlIHplcm8gY29weSB3aWxsIGJlIGVuYWJsZWQgd2hlbiB0aGlzIGZsYWcgaXMgc2V0 LiBJdCBpcw0KPiBkaXNhYmxlZCBieQ0KPiAtICAgIGRlZmF1bHQuDQo+IC0NCj4gLSAgICBUaGVy ZSBhcmUgc29tZSB0cnV0aHMgKGluY2x1ZGluZyBsaW1pdGF0aW9ucykgeW91IG1pZ2h0IHdhbnQg dG8ga25vdw0KPiB3aGlsZQ0KPiAtICAgIHNldHRpbmcgdGhpcyBmbGFnOg0KPiAtDQo+IC0gICAg KiB6ZXJvIGNvcHkgaXMgbm90IGdvb2QgZm9yIHNtYWxsIHBhY2tldHMgKHR5cGljYWxseSBmb3Ig cGFja2V0IHNpemUNCj4gYmVsb3cNCj4gLSAgICAgIDUxMikuDQo+IC0NCj4gLSAgICAqIHplcm8g Y29weSBpcyByZWFsbHkgZ29vZCBmb3IgVk0yVk0gY2FzZS4gRm9yIGlwZXJmIGJldHdlZW4gdHdv IFZNcywNCj4gdGhlDQo+IC0gICAgICBib29zdCBjb3VsZCBiZSBhYm92ZSA3MCUgKHdoZW4gVFNP IGlzIGVuYWJsZWQpLg0KPiAtDQo+IC0gICAgKiBGb3IgemVybyBjb3B5IGluIFZNMk5JQyBjYXNl LCBndWVzdCBUeCB1c2VkIHZyaW5nIG1heSBiZSBzdGFydmVkIGlmDQo+IHRoZQ0KPiAtICAgICAg UE1EIGRyaXZlciBjb25zdW1lIHRoZSBtYnVmIGJ1dCBub3QgcmVsZWFzZSB0aGVtIHRpbWVseS4N Cj4gLQ0KPiAtICAgICAgRm9yIGV4YW1wbGUsIGk0MGUgZHJpdmVyIGhhcyBhbiBvcHRpbWl6YXRp b24gdG8gbWF4aW11bSBOSUMNCj4gcGlwZWxpbmUgd2hpY2gNCj4gLSAgICAgIHBvc3Rwb25lcyBy ZXR1cm5pbmcgdHJhbnNtaXR0ZWQgbWJ1ZiB1bnRpbCBvbmx5IHR4X2ZyZWVfdGhyZXNob2xkDQo+ IGZyZWUNCj4gLSAgICAgIGRlc2NzIGxlZnQuIFRoZSB2aXJ0aW8gVFggdXNlZCByaW5nIHdpbGwg YmUgc3RhcnZlZCBpZiB0aGUgZm9ybXVsYQ0KPiAtICAgICAgKG51bV9pNDBlX3R4X2Rlc2MgLSBu dW1fdmlydGlvX3R4X2Rlc2MgPiB0eF9mcmVlX3RocmVzaG9sZCkgaXMgdHJ1ZSwNCj4gc2luY2UN Cj4gLSAgICAgIGk0MGUgd2lsbCBub3QgcmV0dXJuIGJhY2sgbWJ1Zi4NCj4gLQ0KPiAtICAgICAg QSBwZXJmb3JtYW5jZSB0aXAgZm9yIHR1bmluZyB6ZXJvIGNvcHkgaW4gVk0yTklDIGNhc2UgaXMg dG8gYWRqdXN0DQo+IHRoZQ0KPiAtICAgICAgZnJlcXVlbmN5IG9mIG1idWYgZnJlZSAoaS5lLiBh ZGp1c3QgdHhfZnJlZV90aHJlc2hvbGQgb2YgaTQwZQ0KPiBkcml2ZXIpIHRvDQo+IC0gICAgICBi YWxhbmNlIGNvbnN1bWVyIGFuZCBwcm9kdWNlci4NCj4gLQ0KPiAtICAgICogR3Vlc3QgbWVtb3J5 IHNob3VsZCBiZSBiYWNrZW5kZWQgd2l0aCBodWdlIHBhZ2VzIHRvIGFjaGlldmUgYmV0dGVyDQo+ IC0gICAgICBwZXJmb3JtYW5jZS4gVXNpbmcgMUcgcGFnZSBzaXplIGlzIHRoZSBiZXN0Lg0KPiAt DQo+IC0gICAgICBXaGVuIGRlcXVldWUgemVybyBjb3B5IGlzIGVuYWJsZWQsIHRoZSBndWVzdCBw aHlzIGFkZHJlc3MgYW5kIGhvc3QNCj4gcGh5cw0KPiAtICAgICAgYWRkcmVzcyBtYXBwaW5nIGhh cyB0byBiZSBlc3RhYmxpc2hlZC4gVXNpbmcgbm9uLWh1Z2UgcGFnZXMgbWVhbnMNCj4gZmFyDQo+ IC0gICAgICBtb3JlIHBhZ2Ugc2VnbWVudHMuIFRvIG1ha2UgaXQgc2ltcGxlLCBEUERLIHZob3N0 IGRvZXMgYSBsaW5lYXINCj4gc2VhcmNoDQo+IC0gICAgICBvZiB0aG9zZSBzZWdtZW50cywgdGh1 cyB0aGUgZmV3ZXIgdGhlIHNlZ21lbnRzLCB0aGUgcXVpY2tlciB3ZSB3aWxsDQo+IGdldA0KPiAt ICAgICAgdGhlIG1hcHBpbmcuIE5PVEU6IHdlIG1heSBzcGVlZCBpdCBieSB1c2luZyB0cmVlIHNl YXJjaGluZyBpbg0KPiBmdXR1cmUuDQo+IC0NCj4gLSAgICAqIHplcm8gY29weSBjYW4gbm90IHdv cmsgd2hlbiB1c2luZyB2ZmlvLXBjaSB3aXRoIGlvbW11IG1vZGUNCj4gY3VycmVudGx5LCB0aGlz DQo+IC0gICAgICBpcyBiZWNhdXNlIHdlIGRvbid0IHNldHVwIGlvbW11IGRtYSBtYXBwaW5nIGZv ciBndWVzdCBtZW1vcnkuIElmDQo+IHlvdSBoYXZlDQo+IC0gICAgICB0byB1c2UgdmZpby1wY2kg ZHJpdmVyLCBwbGVhc2UgaW5zZXJ0IHZmaW8tcGNpIGtlcm5lbCBtb2R1bGUgaW4NCj4gbm9pb21t dQ0KPiAtICAgICAgbW9kZS4NCj4gLQ0KPiAtICAgICogVGhlIGNvbnN1bWVyIG9mIHplcm8gY29w eSBtYnVmcyBzaG91bGQgY29uc3VtZSB0aGVzZSBtYnVmcyBhcyBzb29uDQo+IGFzDQo+IC0gICAg ICBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0IG1heSBibG9jayB0aGUgb3BlcmF0aW9ucyBpbiB2aG9z dC4NCj4gLQ0KPiAgICAtIGBgUlRFX1ZIT1NUX1VTRVJfSU9NTVVfU1VQUE9SVGBgDQo+IA0KPiAg ICAgIElPTU1VIHN1cHBvcnQgd2lsbCBiZSBlbmFibGVkIHdoZW4gdGhpcyBmbGFnIGlzIHNldC4g SXQgaXMgZGlzYWJsZWQNCj4gYnkNCj4gQEAgLTM2MiwxNiArMzE4LDE2IEBAIEd1ZXN0IG1lbW9y eSByZXF1aXJlbWVudA0KPiANCj4gICogTWVtb3J5IHByZS1hbGxvY2F0aW9uDQo+IA0KPiAtICBG b3Igbm9uLXplcm9jb3B5IG5vbi1hc3luYyBkYXRhIHBhdGgsIGd1ZXN0IG1lbW9yeSBwcmUtYWxs b2NhdGlvbiBpcw0KPiBub3QgYQ0KPiArICBGb3Igbm9uLWFzeW5jIGRhdGEgcGF0aCwgZ3Vlc3Qg bWVtb3J5IHByZS1hbGxvY2F0aW9uIGlzIG5vdCBhDQo+ICAgIG11c3QuIFRoaXMgY2FuIGhlbHAg c2F2ZSBvZiBtZW1vcnkuIElmIHVzZXJzIHJlYWxseSB3YW50IHRoZSBndWVzdA0KPiBtZW1vcnkN Cj4gICAgdG8gYmUgcHJlLWFsbG9jYXRlZCAoZS5nLiwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiks IHdlIGNhbiBhZGQgb3B0aW9uDQo+ICAgIGBgLW1lbS1wcmVhbGxvY2BgIHdoZW4gc3RhcnRpbmcg UUVNVS4gT3IsIHdlIGNhbiBsb2NrIGFsbCBtZW1vcnkgYXQNCj4gdmhvc3QNCj4gICAgc2lkZSB3 aGljaCB3aWxsIGZvcmNlIG1lbW9yeSB0byBiZSBhbGxvY2F0ZWQgd2hlbiBtbWFwIGF0IHZob3N0 IHNpZGU7DQo+ICAgIG9wdGlvbiAtLW1sb2NrYWxsIGluIG92cy1kcGRrIGlzIGFuIGV4YW1wbGUg aW4gaGFuZC4NCj4gDQo+IC0gIEZvciBhc3luYyBhbmQgemVyb2NvcHkgZGF0YSBwYXRoLCB3ZSBm b3JjZSB0aGUgVk0gbWVtb3J5IHRvIGJlDQo+IC0gIHByZS1hbGxvY2F0ZWQgYXQgdmhvc3QgbGli IHdoZW4gbWFwcGluZyB0aGUgZ3Vlc3QgbWVtb3J5OyBhbmQgYWxzbyB3ZQ0KPiBuZWVkDQo+IC0g IHRvIGxvY2sgdGhlIG1lbW9yeSB0byBwcmV2ZW50IHBhZ2VzIGJlaW5nIHN3YXBwZWQgb3V0IHRv IGRpc2suDQo+ICsgIEZvciBhc3luYyBkYXRhIHBhdGgsIHdlIGZvcmNlIHRoZSBWTSBtZW1vcnkg dG8gYmUgcHJlLWFsbG9jYXRlZCBhdA0KPiB2aG9zdA0KPiArICBsaWIgd2hlbiBtYXBwaW5nIHRo ZSBndWVzdCBtZW1vcnk7IGFuZCBhbHNvIHdlIG5lZWQgdG8gbG9jayB0aGUgbWVtb3J5DQo+IHRv DQo+ICsgIHByZXZlbnQgcGFnZXMgYmVpbmcgc3dhcHBlZCBvdXQgdG8gZGlzay4NCj4gDQo+ICAq IE1lbW9yeSBzaGFyaW5nDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV92aG9zdC9ydGVf dmhvc3QuaCBiL2xpYi9saWJydGVfdmhvc3QvcnRlX3Zob3N0LmgNCj4gaW5kZXggYTk0Yzg0MTM0 ZC4uNDYwMTlkZjZmZSAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV92aG9zdC9ydGVfdmhvc3Qu aA0KPiArKysgYi9saWIvbGlicnRlX3Zob3N0L3J0ZV92aG9zdC5oDQo+IEBAIC0yOCw3ICsyOCw3 IEBAIGV4dGVybiAiQyIgew0KPiANCj4gICNkZWZpbmUgUlRFX1ZIT1NUX1VTRVJfQ0xJRU5UCQko MVVMTCA8PCAwKQ0KPiAgI2RlZmluZSBSVEVfVkhPU1RfVVNFUl9OT19SRUNPTk5FQ1QJKDFVTEwg PDwgMSkNCj4gLSNkZWZpbmUgUlRFX1ZIT1NUX1VTRVJfREVRVUVVRV9aRVJPX0NPUFkJKDFVTEwg PDwgMikNCj4gKyNkZWZpbmUgUlRFX1ZIT1NUX1VTRVJfUkVTRVJWRURfMQkoMVVMTCA8PCAyKQ0K PiAgI2RlZmluZSBSVEVfVkhPU1RfVVNFUl9JT01NVV9TVVBQT1JUCSgxVUxMIDw8IDMpDQo+ICAj ZGVmaW5lIFJURV9WSE9TVF9VU0VSX1BPU1RDT1BZX1NVUFBPUlQJCSgxVUxMIDw8IDQpDQo+ICAv KiBzdXBwb3J0IG1idWYgd2l0aCBleHRlcm5hbCBidWZmZXIgYXR0YWNoZWQgKi8NCj4gZGlmZiAt LWdpdCBhL2xpYi9saWJydGVfdmhvc3Qvc29ja2V0LmMgYi9saWIvbGlicnRlX3Zob3N0L3NvY2tl dC5jDQo+IGluZGV4IDczZTFkY2E5NWUuLjAxNjlkMzY0ODEgMTAwNjQ0DQo+IC0tLSBhL2xpYi9s aWJydGVfdmhvc3Qvc29ja2V0LmMNCj4gKysrIGIvbGliL2xpYnJ0ZV92aG9zdC9zb2NrZXQuYw0K PiBAQCAtMzcsNyArMzcsNiBAQCBzdHJ1Y3Qgdmhvc3RfdXNlcl9zb2NrZXQgew0KPiAgCXN0cnVj dCBzb2NrYWRkcl91biB1bjsNCj4gIAlib29sIGlzX3NlcnZlcjsNCj4gIAlib29sIHJlY29ubmVj dDsNCj4gLQlib29sIGRlcXVldWVfemVyb19jb3B5Ow0KPiAgCWJvb2wgaW9tbXVfc3VwcG9ydDsN Cj4gIAlib29sIHVzZV9idWlsdGluX3ZpcnRpb19uZXQ7DQo+ICAJYm9vbCBleHRidWY7DQo+IEBA IC0yMjksOSArMjI4LDYgQEAgdmhvc3RfdXNlcl9hZGRfY29ubmVjdGlvbihpbnQgZmQsIHN0cnVj dA0KPiB2aG9zdF91c2VyX3NvY2tldCAqdnNvY2tldCkNCj4gDQo+ICAJdmhvc3RfYXR0YWNoX3Zk cGFfZGV2aWNlKHZpZCwgdnNvY2tldC0+dmRwYV9kZXYpOw0KPiANCj4gLQlpZiAodnNvY2tldC0+ ZGVxdWV1ZV96ZXJvX2NvcHkpDQo+IC0JCXZob3N0X2VuYWJsZV9kZXF1ZXVlX3plcm9fY29weSh2 aWQpOw0KPiAtDQo+ICAJaWYgKHZzb2NrZXQtPmV4dGJ1ZikNCj4gIAkJdmhvc3RfZW5hYmxlX2V4 dGJ1Zih2aWQpOw0KPiANCj4gQEAgLTg3OCwxOCArODc0LDggQEAgcnRlX3Zob3N0X2RyaXZlcl9y ZWdpc3Rlcihjb25zdCBjaGFyICpwYXRoLCB1aW50NjRfdA0KPiBmbGFncykNCj4gIAkJZ290byBv dXRfZnJlZTsNCj4gIAl9DQo+ICAJdnNvY2tldC0+dmRwYV9kZXYgPSBOVUxMOw0KPiAtCXZzb2Nr ZXQtPmRlcXVldWVfemVyb19jb3B5ID0gZmxhZ3MgJg0KPiBSVEVfVkhPU1RfVVNFUl9ERVFVRVVF X1pFUk9fQ09QWTsNCj4gIAl2c29ja2V0LT5leHRidWYgPSBmbGFncyAmIFJURV9WSE9TVF9VU0VS X0VYVEJVRl9TVVBQT1JUOw0KPiAgCXZzb2NrZXQtPmxpbmVhcmJ1ZiA9IGZsYWdzICYgUlRFX1ZI T1NUX1VTRVJfTElORUFSQlVGX1NVUFBPUlQ7DQo+IC0NCj4gLQlpZiAodnNvY2tldC0+ZGVxdWV1 ZV96ZXJvX2NvcHkgJiYNCj4gLQkgICAgKGZsYWdzICYgUlRFX1ZIT1NUX1VTRVJfSU9NTVVfU1VQ UE9SVCkpIHsNCj4gLQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsDQo+IC0JCQkiZXJyb3I6IGVuYWJs aW5nIGRlcXVldWUgemVybyBjb3B5IGFuZCBJT01NVSBmZWF0dXJlcyAiDQo+IC0JCQkic2ltdWx0 YW5lb3VzbHkgaXMgbm90IHN1cHBvcnRlZFxuIik7DQo+IC0JCWdvdG8gb3V0X211dGV4Ow0KPiAt CX0NCj4gLQ0KPiAgCXZzb2NrZXQtPmFzeW5jX2NvcHkgPSBmbGFncyAmIFJURV9WSE9TVF9VU0VS X0FTWU5DX0NPUFk7DQo+IA0KPiAgCWlmICh2c29ja2V0LT5hc3luY19jb3B5ICYmDQo+IEBAIC05 MTgsMzkgKzkwNCw2IEBAIHJ0ZV92aG9zdF9kcml2ZXJfcmVnaXN0ZXIoY29uc3QgY2hhciAqcGF0 aCwgdWludDY0X3QNCj4gZmxhZ3MpDQo+ICAJdnNvY2tldC0+ZmVhdHVyZXMgICAgICAgICAgID0g VklSVElPX05FVF9TVVBQT1JURURfRkVBVFVSRVM7DQo+ICAJdnNvY2tldC0+cHJvdG9jb2xfZmVh dHVyZXMgID0gVkhPU1RfVVNFUl9QUk9UT0NPTF9GRUFUVVJFUzsNCj4gDQo+IC0JLyoNCj4gLQkg KiBEZXF1ZXVlIHplcm8gY29weSBjYW4ndCBhc3N1cmUgZGVzY3JpcHRvcnMgcmV0dXJuZWQgaW4g b3JkZXIuDQo+IC0JICogQWxzbywgaXQgcmVxdWlyZXMgdGhhdCB0aGUgZ3Vlc3QgbWVtb3J5IGlz IHBvcHVsYXRlZCwgd2hpY2ggaXMNCj4gLQkgKiBub3QgY29tcGF0aWJsZSB3aXRoIHBvc3Rjb3B5 Lg0KPiAtCSAqLw0KPiAtCWlmICh2c29ja2V0LT5kZXF1ZXVlX3plcm9fY29weSkgew0KPiAtCQlp ZiAodnNvY2tldC0+ZXh0YnVmKSB7DQo+IC0JCQlWSE9TVF9MT0dfQ09ORklHKEVSUiwNCj4gLQkJ CSJlcnJvcjogemVybyBjb3B5IGlzIGluY29tcGF0aWJsZSB3aXRoIGV4dGVybmFsDQo+IGJ1ZmZl cnNcbiIpOw0KPiAtCQkJcmV0ID0gLTE7DQo+IC0JCQlnb3RvIG91dF9tdXRleDsNCj4gLQkJfQ0K PiAtCQlpZiAodnNvY2tldC0+bGluZWFyYnVmKSB7DQo+IC0JCQlWSE9TVF9MT0dfQ09ORklHKEVS UiwNCj4gLQkJCSJlcnJvcjogemVybyBjb3B5IGlzIGluY29tcGF0aWJsZSB3aXRoIGxpbmVhcg0K PiBidWZmZXJzXG4iKTsNCj4gLQkJCXJldCA9IC0xOw0KPiAtCQkJZ290byBvdXRfbXV0ZXg7DQo+ IC0JCX0NCj4gLQkJaWYgKChmbGFncyAmIFJURV9WSE9TVF9VU0VSX0NMSUVOVCkgIT0gMCkgew0K PiAtCQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsDQo+IC0JCQkiZXJyb3I6IHplcm8gY29weSBpcyBp bmNvbXBhdGlibGUgd2l0aCB2aG9zdCBjbGllbnQNCj4gbW9kZVxuIik7DQo+IC0JCQlyZXQgPSAt MTsNCj4gLQkJCWdvdG8gb3V0X211dGV4Ow0KPiAtCQl9DQo+IC0JCXZzb2NrZXQtPnN1cHBvcnRl ZF9mZWF0dXJlcyAmPSB+KDFVTEwgPDwgVklSVElPX0ZfSU5fT1JERVIpOw0KPiAtCQl2c29ja2V0 LT5mZWF0dXJlcyAmPSB+KDFVTEwgPDwgVklSVElPX0ZfSU5fT1JERVIpOw0KPiAtDQo+IC0JCVZI T1NUX0xPR19DT05GSUcoSU5GTywNCj4gLQkJCSJEZXF1ZXVlIHplcm8gY29weSByZXF1ZXN0ZWQs IGRpc2FibGluZyBwb3N0Y29weQ0KPiBzdXBwb3J0XG4iKTsNCj4gLQkJdnNvY2tldC0+cHJvdG9j b2xfZmVhdHVyZXMgJj0NCj4gLQkJCX4oMVVMTCA8PCBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfUEFH RUZBVUxUKTsNCj4gLQl9DQo+IC0NCj4gIAlpZiAodnNvY2tldC0+YXN5bmNfY29weSkgew0KPiAg CQl2c29ja2V0LT5zdXBwb3J0ZWRfZmVhdHVyZXMgJj0gfigxVUxMIDw8IFZIT1NUX0ZfTE9HX0FM TCk7DQo+ICAJCXZzb2NrZXQtPmZlYXR1cmVzICY9IH4oMVVMTCA8PCBWSE9TVF9GX0xPR19BTEwp Ow0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV92aG9zdC92aG9zdC5jIGIvbGliL2xpYnJ0ZV92 aG9zdC92aG9zdC5jDQo+IGluZGV4IDhmMjBhMDgxOGYuLmM3Y2QzNGU0MmIgMTAwNjQ0DQo+IC0t LSBhL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuYw0KPiArKysgYi9saWIvbGlicnRlX3Zob3N0L3Zo b3N0LmMNCj4gQEAgLTUzOSw4ICs1MzksNiBAQCBpbml0X3ZyaW5nX3F1ZXVlKHN0cnVjdCB2aXJ0 aW9fbmV0ICpkZXYsIHVpbnQzMl90DQo+IHZyaW5nX2lkeCkNCj4gIAl2aG9zdF91c2VyX2lvdGxi X2luaXQoZGV2LCB2cmluZ19pZHgpOw0KPiAgCS8qIEJhY2tlbmRzIGFyZSBzZXQgdG8gLTEgaW5k aWNhdGluZyBhbiBpbmFjdGl2ZSBkZXZpY2UuICovDQo+ICAJdnEtPmJhY2tlbmQgPSAtMTsNCj4g LQ0KPiAtCVRBSUxRX0lOSVQoJnZxLT56bWJ1Zl9saXN0KTsNCj4gIH0NCj4gDQo+ICBzdGF0aWMg dm9pZA0KPiBAQCAtNzA0LDE4ICs3MDIsNiBAQCB2aG9zdF9zZXRfaWZuYW1lKGludCB2aWQsIGNv bnN0IGNoYXIgKmlmX25hbWUsDQo+IHVuc2lnbmVkIGludCBpZl9sZW4pDQo+ICAJZGV2LT5pZm5h bWVbc2l6ZW9mKGRldi0+aWZuYW1lKSAtIDFdID0gJ1wwJzsNCj4gIH0NCj4gDQo+IC12b2lkDQo+ IC12aG9zdF9lbmFibGVfZGVxdWV1ZV96ZXJvX2NvcHkoaW50IHZpZCkNCj4gLXsNCj4gLQlzdHJ1 Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiAtDQo+IC0JaWYgKGRldiA9 PSBOVUxMKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlkZXYtPmRlcXVldWVfemVyb19jb3B5ID0g MTsNCj4gLQlWSE9TVF9MT0dfQ09ORklHKElORk8sICJkZXF1ZXVlIHplcm8gY29weSBpcyBlbmFi bGVkXG4iKTsNCj4gLX0NCj4gLQ0KPiAgdm9pZA0KPiAgdmhvc3Rfc2V0X2J1aWx0aW5fdmlydGlv X25ldChpbnQgdmlkLCBib29sIGVuYWJsZSkNCj4gIHsNCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJy dGVfdmhvc3Qvdmhvc3QuaCBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaA0KPiBpbmRleCA3M2Ex ZWQ4ODk1Li4yMGNjZGM5YmRjIDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX3Zob3N0L3Zob3N0 LmgNCj4gKysrIGIvbGliL2xpYnJ0ZV92aG9zdC92aG9zdC5oDQo+IEBAIC05NCwyMCArOTQsNiBA QCBzdHJ1Y3QgYnVmX3ZlY3RvciB7DQo+ICAJdWludDMyX3QgZGVzY19pZHg7DQo+ICB9Ow0KPiAN Cj4gLS8qDQo+IC0gKiBBIHN0cnVjdHVyZSB0byBob2xkIHNvbWUgZmllbGRzIG5lZWRlZCBpbiB6 ZXJvIGNvcHkgY29kZSBwYXRoLA0KPiAtICogbWFpbmx5IGZvciBhc3NvY2lhdGluZyBhbiBtYnVm IHdpdGggdGhlIHJpZ2h0IGRlc2NfaWR4Lg0KPiAtICovDQo+IC1zdHJ1Y3QgemNvcHlfbWJ1ZiB7 DQo+IC0Jc3RydWN0IHJ0ZV9tYnVmICptYnVmOw0KPiAtCXVpbnQzMl90IGRlc2NfaWR4Ow0KPiAt CXVpbnQxNl90IGRlc2NfY291bnQ7DQo+IC0JdWludDE2X3QgaW5fdXNlOw0KPiAtDQo+IC0JVEFJ TFFfRU5UUlkoemNvcHlfbWJ1ZikgbmV4dDsNCj4gLX07DQo+IC1UQUlMUV9IRUFEKHpjb3B5X21i dWZfbGlzdCwgemNvcHlfbWJ1Zik7DQo+IC0NCj4gIC8qDQo+ICAgKiBTdHJ1Y3R1cmUgY29udGFp bnMgdGhlIGluZm8gZm9yIGVhY2ggYmF0Y2hlZCBtZW1vcnkgY29weS4NCj4gICAqLw0KPiBAQCAt MTg1LDEyICsxNzEsNiBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHsNCj4gIAlzdHJ1Y3QgcnRl X3Zob3N0X3Jlc3VibWl0X2luZm8gKnJlc3VibWl0X2luZmxpZ2h0Ow0KPiAgCXVpbnQ2NF90CQln bG9iYWxfY291bnRlcjsNCj4gDQo+IC0JdWludDE2X3QJCW5yX3ptYnVmOw0KPiAtCXVpbnQxNl90 CQl6bWJ1Zl9zaXplOw0KPiAtCXVpbnQxNl90CQlsYXN0X3ptYnVmX2lkeDsNCj4gLQlzdHJ1Y3Qg emNvcHlfbWJ1Zgkqem1idWZzOw0KPiAtCXN0cnVjdCB6Y29weV9tYnVmX2xpc3QJem1idWZfbGlz dDsNCj4gLQ0KPiAgCXVuaW9uIHsNCj4gIAkJc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAgKnNoYWRv d191c2VkX3NwbGl0Ow0KPiAgCQlzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCAqc2hhZG93 X3VzZWRfcGFja2VkOw0KPiBAQCAtMzgwLDcgKzM2MCw2IEBAIHN0cnVjdCB2aXJ0aW9fbmV0IHsN Cj4gIAkvKiB0byB0ZWxsIGlmIHdlIG5lZWQgYnJvYWRjYXN0IHJhcnAgcGFja2V0ICovDQo+ICAJ aW50MTZfdAkJCWJyb2FkY2FzdF9yYXJwOw0KPiAgCXVpbnQzMl90CQlucl92cmluZzsNCj4gLQlp bnQJCQlkZXF1ZXVlX3plcm9fY29weTsNCj4gIAlpbnQJCQlhc3luY19jb3B5Ow0KPiAgCWludAkJ CWV4dGJ1ZjsNCj4gIAlpbnQJCQlsaW5lYXJidWY7DQo+IEBAIC03MTgsNyArNjk3LDYgQEAgaW50 IGFsbG9jX3ZyaW5nX3F1ZXVlKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHVpbnQzMl90DQo+IHZy aW5nX2lkeCk7DQo+ICB2b2lkIHZob3N0X2F0dGFjaF92ZHBhX2RldmljZShpbnQgdmlkLCBzdHJ1 Y3QgcnRlX3ZkcGFfZGV2aWNlICpkZXYpOw0KPiANCj4gIHZvaWQgdmhvc3Rfc2V0X2lmbmFtZShp bnQsIGNvbnN0IGNoYXIgKmlmX25hbWUsIHVuc2lnbmVkIGludCBpZl9sZW4pOw0KPiAtdm9pZCB2 aG9zdF9lbmFibGVfZGVxdWV1ZV96ZXJvX2NvcHkoaW50IHZpZCk7DQo+ICB2b2lkIHZob3N0X3Nl dF9idWlsdGluX3ZpcnRpb19uZXQoaW50IHZpZCwgYm9vbCBlbmFibGUpOw0KPiAgdm9pZCB2aG9z dF9lbmFibGVfZXh0YnVmKGludCB2aWQpOw0KPiAgdm9pZCB2aG9zdF9lbmFibGVfbGluZWFyYnVm KGludCB2aWQpOw0KPiBAQCAtODk4LDEwICs4NzYsNCBAQCBtYnVmX2lzX2NvbnN1bWVkKHN0cnVj dCBydGVfbWJ1ZiAqbSkNCj4gIAlyZXR1cm4gdHJ1ZTsNCj4gIH0NCj4gDQo+IC1zdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB2b2lkDQo+IC1wdXRfem1idWYoc3RydWN0IHpjb3B5X21idWYgKnpt YnVmKQ0KPiAtew0KPiAtCXptYnVmLT5pbl91c2UgPSAwOw0KPiAtfQ0KPiAtDQo+ICAjZW5kaWYg LyogX1ZIT1NUX05FVF9DREVWX0hfICovDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Zob3N0 L3Zob3N0X3VzZXIuYyBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jDQo+IGluZGV4IDUw MTIxOGUxOTIuLjMxOTYzOTFjMzIgMTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJydGVfdmhvc3Qvdmhv c3RfdXNlci5jDQo+ICsrKyBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jDQo+IEBAIC0x MzQsNDcgKzEzNCwxNSBAQCBnZXRfYmxrX3NpemUoaW50IGZkKQ0KPiAgCXJldHVybiByZXQgPT0g LTEgPyAodWludDY0X3QpLTEgOiAodWludDY0X3Qpc3RhdC5zdF9ibGtzaXplOw0KPiAgfQ0KPiAN Cj4gLS8qDQo+IC0gKiBSZWNsYWltIGFsbCB0aGUgb3V0c3RhbmRpbmcgem1idWZzIGZvciBhIHZp cnRxdWV1ZS4NCj4gLSAqLw0KPiAtc3RhdGljIHZvaWQNCj4gLWRyYWluX3ptYnVmX2xpc3Qoc3Ry dWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpDQo+IC17DQo+IC0Jc3RydWN0IHpjb3B5X21idWYgKnpt YnVmLCAqbmV4dDsNCj4gLQ0KPiAtCWZvciAoem1idWYgPSBUQUlMUV9GSVJTVCgmdnEtPnptYnVm X2xpc3QpOw0KPiAtCSAgICAgem1idWYgIT0gTlVMTDsgem1idWYgPSBuZXh0KSB7DQo+IC0JCW5l eHQgPSBUQUlMUV9ORVhUKHptYnVmLCBuZXh0KTsNCj4gLQ0KPiAtCQl3aGlsZSAoIW1idWZfaXNf Y29uc3VtZWQoem1idWYtPm1idWYpKQ0KPiAtCQkJdXNsZWVwKDEwMDApOw0KPiAtDQo+IC0JCVRB SUxRX1JFTU9WRSgmdnEtPnptYnVmX2xpc3QsIHptYnVmLCBuZXh0KTsNCj4gLQkJcmVzdG9yZV9t YnVmKHptYnVmLT5tYnVmKTsNCj4gLQkJcnRlX3BrdG1idWZfZnJlZSh6bWJ1Zi0+bWJ1Zik7DQo+ IC0JCXB1dF96bWJ1Zih6bWJ1Zik7DQo+IC0JCXZxLT5ucl96bWJ1ZiAtPSAxOw0KPiAtCX0NCj4g LX0NCj4gLQ0KPiAgc3RhdGljIHZvaWQNCj4gIGZyZWVfbWVtX3JlZ2lvbihzdHJ1Y3QgdmlydGlv X25ldCAqZGV2KQ0KPiAgew0KPiAgCXVpbnQzMl90IGk7DQo+ICAJc3RydWN0IHJ0ZV92aG9zdF9t ZW1fcmVnaW9uICpyZWc7DQo+IC0Jc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7DQo+IA0KPiAg CWlmICghZGV2IHx8ICFkZXYtPm1lbSkNCj4gIAkJcmV0dXJuOw0KPiANCj4gLQlpZiAoZGV2LT5k ZXF1ZXVlX3plcm9fY29weSkgew0KPiAtCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5ucl92cmluZzsg aSsrKSB7DQo+IC0JCQl2cSA9IGRldi0+dmlydHF1ZXVlW2ldOw0KPiAtCQkJaWYgKHZxKQ0KPiAt CQkJCWRyYWluX3ptYnVmX2xpc3QodnEpOw0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+ICAJZm9yIChp ID0gMDsgaSA8IGRldi0+bWVtLT5ucmVnaW9uczsgaSsrKSB7DQo+ICAJCXJlZyA9ICZkZXYtPm1l bS0+cmVnaW9uc1tpXTsNCj4gIAkJaWYgKHJlZy0+aG9zdF91c2VyX2FkZHIpIHsNCj4gQEAgLTQ1 NCwyMyArNDIyLDYgQEAgdmhvc3RfdXNlcl9zZXRfdnJpbmdfbnVtKHN0cnVjdCB2aXJ0aW9fbmV0 ICoqcGRldiwNCj4gIAkJcmV0dXJuIFJURV9WSE9TVF9NU0dfUkVTVUxUX0VSUjsNCj4gIAl9DQo+ IA0KPiAtCWlmIChkZXYtPmRlcXVldWVfemVyb19jb3B5KSB7DQo+IC0JCXZxLT5ucl96bWJ1ZiA9 IDA7DQo+IC0JCXZxLT5sYXN0X3ptYnVmX2lkeCA9IDA7DQo+IC0JCXZxLT56bWJ1Zl9zaXplID0g dnEtPnNpemU7DQo+IC0JCWlmICh2cS0+em1idWZzKQ0KPiAtCQkJcnRlX2ZyZWUodnEtPnptYnVm cyk7DQo+IC0JCXZxLT56bWJ1ZnMgPSBydGVfem1hbGxvYyhOVUxMLCB2cS0+em1idWZfc2l6ZSAq DQo+IC0JCQkJCSBzaXplb2Yoc3RydWN0IHpjb3B5X21idWYpLCAwKTsNCj4gLQkJaWYgKHZxLT56 bWJ1ZnMgPT0gTlVMTCkgew0KPiAtCQkJVkhPU1RfTE9HX0NPTkZJRyhXQVJOSU5HLA0KPiAtCQkJ CSJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtIGZvciB6ZXJvIGNvcHk7ICINCj4gLQkJCQkiemVybyBj b3B5IGlzIGZvcmNlIGRpc2FibGVkXG4iKTsNCj4gLQkJCWRldi0+ZGVxdWV1ZV96ZXJvX2NvcHkg PSAwOw0KPiAtCQl9DQo+IC0JCVRBSUxRX0lOSVQoJnZxLT56bWJ1Zl9saXN0KTsNCj4gLQl9DQo+ IC0NCj4gIAlpZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4gIAkJaWYgKHZxLT5zaGFkb3dfdXNl ZF9wYWNrZWQpDQo+ICAJCQlydGVfZnJlZSh2cS0+c2hhZG93X3VzZWRfcGFja2VkKTsNCj4gQEAg LTUyNCw3ICs0NzUsNiBAQCBudW1hX3JlYWxsb2Moc3RydWN0IHZpcnRpb19uZXQgKmRldiwgaW50 IGluZGV4KQ0KPiAgCWludCBvbGRub2RlLCBuZXdub2RlOw0KPiAgCXN0cnVjdCB2aXJ0aW9fbmV0 ICpvbGRfZGV2Ow0KPiAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKm9sZF92cSwgKnZxOw0KPiAt CXN0cnVjdCB6Y29weV9tYnVmICpuZXdfem1idWY7DQo+ICAJc3RydWN0IHZyaW5nX3VzZWRfZWxl bSAqbmV3X3NoYWRvd191c2VkX3NwbGl0Ow0KPiAgCXN0cnVjdCB2cmluZ191c2VkX2VsZW1fcGFj a2VkICpuZXdfc2hhZG93X3VzZWRfcGFja2VkOw0KPiAgCXN0cnVjdCBiYXRjaF9jb3B5X2VsZW0g Km5ld19iYXRjaF9jb3B5X2VsZW1zOw0KPiBAQCAtNTU1LDE2ICs1MDUsNiBAQCBudW1hX3JlYWxs b2Moc3RydWN0IHZpcnRpb19uZXQgKmRldiwgaW50IGluZGV4KQ0KPiAgCQkJcmV0dXJuIGRldjsN Cj4gDQo+ICAJCW1lbWNweSh2cSwgb2xkX3ZxLCBzaXplb2YoKnZxKSk7DQo+IC0JCVRBSUxRX0lO SVQoJnZxLT56bWJ1Zl9saXN0KTsNCj4gLQ0KPiAtCQlpZiAoZGV2LT5kZXF1ZXVlX3plcm9fY29w eSkgew0KPiAtCQkJbmV3X3ptYnVmID0gcnRlX21hbGxvY19zb2NrZXQoTlVMTCwgdnEtPnptYnVm X3NpemUgKg0KPiAtCQkJCQlzaXplb2Yoc3RydWN0IHpjb3B5X21idWYpLCAwLCBuZXdub2RlKTsN Cj4gLQkJCWlmIChuZXdfem1idWYpIHsNCj4gLQkJCQlydGVfZnJlZSh2cS0+em1idWZzKTsNCj4g LQkJCQl2cS0+em1idWZzID0gbmV3X3ptYnVmOw0KPiAtCQkJfQ0KPiAtCQl9DQo+IA0KPiAgCQlp ZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4gIAkJCW5ld19zaGFkb3dfdXNlZF9wYWNrZWQgPSBy dGVfbWFsbG9jX3NvY2tldChOVUxMLA0KPiBAQCAtMTE3OSw4ICsxMTE5LDcgQEAgdmhvc3RfdXNl cl9zZXRfbWVtX3RhYmxlKHN0cnVjdCB2aXJ0aW9fbmV0ICoqcGRldiwNCj4gc3RydWN0IFZob3N0 VXNlck1zZyAqbXNnLA0KPiAgCQkJZ290byBlcnJfbW1hcDsNCj4gIAkJfQ0KPiANCj4gLQkJcG9w dWxhdGUgPSAoZGV2LT5kZXF1ZXVlX3plcm9fY29weSB8fCBkZXYtPmFzeW5jX2NvcHkpID8NCj4g LQkJCU1BUF9QT1BVTEFURSA6IDA7DQo+ICsJCXBvcHVsYXRlID0gZGV2LT5hc3luY19jb3B5ID8g TUFQX1BPUFVMQVRFIDogMDsNCj4gIAkJbW1hcF9hZGRyID0gbW1hcChOVUxMLCBtbWFwX3NpemUs IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsDQo+ICAJCQkJIE1BUF9TSEFSRUQgfCBwb3B1bGF0ZSwg ZmQsIDApOw0KPiANCj4gQEAgLTExOTUsNyArMTEzNCw3IEBAIHZob3N0X3VzZXJfc2V0X21lbV90 YWJsZShzdHJ1Y3QgdmlydGlvX25ldCAqKnBkZXYsDQo+IHN0cnVjdCBWaG9zdFVzZXJNc2cgKm1z ZywNCj4gIAkJcmVnLT5ob3N0X3VzZXJfYWRkciA9ICh1aW50NjRfdCkodWludHB0cl90KW1tYXBf YWRkciArDQo+ICAJCQkJICAgICAgbW1hcF9vZmZzZXQ7DQo+IA0KPiAtCQlpZiAoZGV2LT5kZXF1 ZXVlX3plcm9fY29weSB8fCBkZXYtPmFzeW5jX2NvcHkpDQo+ICsJCWlmIChkZXYtPmFzeW5jX2Nv cHkpDQo+ICAJCQlpZiAoYWRkX2d1ZXN0X3BhZ2VzKGRldiwgcmVnLCBhbGlnbm1lbnQpIDwgMCkg ew0KPiAgCQkJCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiAgCQkJCQkiYWRkaW5nIGd1ZXN0IHBh Z2VzIHRvIHJlZ2lvbiAldSBmYWlsZWQuXG4iLA0KPiBAQCAtMTkzMywxNSArMTg3Miw2IEBAIHZo b3N0X3VzZXJfc2V0X3ZyaW5nX2tpY2soc3RydWN0IHZpcnRpb19uZXQgKipwZGV2LA0KPiBzdHJ1 Y3QgVmhvc3RVc2VyTXNnICptc2csDQo+ICAJcmV0dXJuIFJURV9WSE9TVF9NU0dfUkVTVUxUX09L Ow0KPiAgfQ0KPiANCj4gLXN0YXRpYyB2b2lkDQo+IC1mcmVlX3ptYnVmcyhzdHJ1Y3Qgdmhvc3Rf dmlydHF1ZXVlICp2cSkNCj4gLXsNCj4gLQlkcmFpbl96bWJ1Zl9saXN0KHZxKTsNCj4gLQ0KPiAt CXJ0ZV9mcmVlKHZxLT56bWJ1ZnMpOw0KPiAtCXZxLT56bWJ1ZnMgPSBOVUxMOw0KPiAtfQ0KPiAt DQo+ICAvKg0KPiAgICogd2hlbiB2aXJ0aW8gaXMgc3RvcHBlZCwgcWVtdSB3aWxsIHNlbmQgdXMg dGhlIEdFVF9WUklOR19CQVNFIG1lc3NhZ2UuDQo+ICAgKi8NCj4gQEAgLTE5OTYsOCArMTkyNiw2 IEBAIHZob3N0X3VzZXJfZ2V0X3ZyaW5nX2Jhc2Uoc3RydWN0IHZpcnRpb19uZXQgKipwZGV2LA0K PiANCj4gIAl2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTsNCj4gDQo+IC0JaWYgKGRl di0+ZGVxdWV1ZV96ZXJvX2NvcHkpDQo+IC0JCWZyZWVfem1idWZzKHZxKTsNCj4gIAlpZiAodnFf aXNfcGFja2VkKGRldikpIHsNCj4gIAkJcnRlX2ZyZWUodnEtPnNoYWRvd191c2VkX3BhY2tlZCk7 DQo+ICAJCXZxLT5zaGFkb3dfdXNlZF9wYWNrZWQgPSBOVUxMOw0KPiBAQCAtMjA1MSwxMCArMTk3 OSw2IEBAIHZob3N0X3VzZXJfc2V0X3ZyaW5nX2VuYWJsZShzdHJ1Y3QgdmlydGlvX25ldA0KPiAq KnBkZXYsDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCS8qIE9uIGRpc2FibGUsIHJpbmdzIGhhdmUg dG8gYmUgc3RvcHBlZCBiZWluZyBwcm9jZXNzZWQuICovDQo+IC0JaWYgKCFlbmFibGUgJiYgZGV2 LT5kZXF1ZXVlX3plcm9fY29weSkNCj4gLQkJZHJhaW5fem1idWZfbGlzdChkZXYtPnZpcnRxdWV1 ZVtpbmRleF0pOw0KPiAtDQo+ICAJZGV2LT52aXJ0cXVldWVbaW5kZXhdLT5lbmFibGVkID0gZW5h YmxlOw0KPiANCj4gIAlyZXR1cm4gUlRFX1ZIT1NUX01TR19SRVNVTFRfT0s7DQo+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX3Zob3N0L3ZpcnRpb19uZXQuYyBiL2xpYi9saWJydGVfdmhvc3Qvdmly dGlvX25ldC5jDQo+IGluZGV4IGJkOTMwM2M4YTkuLjBhMGJlYTFhNWEgMTAwNjQ0DQo+IC0tLSBh L2xpYi9saWJydGVfdmhvc3QvdmlydGlvX25ldC5jDQo+ICsrKyBiL2xpYi9saWJydGVfdmhvc3Qv dmlydGlvX25ldC5jDQo+IEBAIC0xOTQ2LDcgKzE5NDYsNyBAQCBjb3B5X2Rlc2NfdG9fbWJ1Zihz dHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3QNCj4gdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4g IAkJICBzdHJ1Y3QgcnRlX21idWYgKm0sIHN0cnVjdCBydGVfbWVtcG9vbCAqbWJ1Zl9wb29sKQ0K PiAgew0KPiAgCXVpbnQzMl90IGJ1Zl9hdmFpbCwgYnVmX29mZnNldDsNCj4gLQl1aW50NjRfdCBi dWZfYWRkciwgYnVmX2lvdmEsIGJ1Zl9sZW47DQo+ICsJdWludDY0X3QgYnVmX2FkZHIsIGJ1Zl9s ZW47DQo+ICAJdWludDMyX3QgbWJ1Zl9hdmFpbCwgbWJ1Zl9vZmZzZXQ7DQo+ICAJdWludDMyX3Qg Y3B5X2xlbjsNCj4gIAlzdHJ1Y3QgcnRlX21idWYgKmN1ciA9IG0sICpwcmV2ID0gbTsNCj4gQEAg LTE5NTgsNyArMTk1OCw2IEBAIGNvcHlfZGVzY190b19tYnVmKHN0cnVjdCB2aXJ0aW9fbmV0ICpk ZXYsIHN0cnVjdA0KPiB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiAgCWludCBlcnJvciA9IDA7DQo+ IA0KPiAgCWJ1Zl9hZGRyID0gYnVmX3ZlY1t2ZWNfaWR4XS5idWZfYWRkcjsNCj4gLQlidWZfaW92 YSA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVmX2lvdmE7DQo+ICAJYnVmX2xlbiA9IGJ1Zl92ZWNbdmVj X2lkeF0uYnVmX2xlbjsNCj4gDQo+ICAJaWYgKHVubGlrZWx5KGJ1Zl9sZW4gPCBkZXYtPnZob3N0 X2hsZW4gJiYgbnJfdmVjIDw9IDEpKSB7DQo+IEBAIC0xOTg4LDE0ICsxOTg3LDEyIEBAIGNvcHlf ZGVzY190b19tYnVmKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHN0cnVjdA0KPiB2aG9zdF92aXJ0 cXVldWUgKnZxLA0KPiAgCQlidWZfb2Zmc2V0ID0gZGV2LT52aG9zdF9obGVuIC0gYnVmX2xlbjsN Cj4gIAkJdmVjX2lkeCsrOw0KPiAgCQlidWZfYWRkciA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVmX2Fk ZHI7DQo+IC0JCWJ1Zl9pb3ZhID0gYnVmX3ZlY1t2ZWNfaWR4XS5idWZfaW92YTsNCj4gIAkJYnVm X2xlbiA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVmX2xlbjsNCj4gIAkJYnVmX2F2YWlsICA9IGJ1Zl9s ZW4gLSBidWZfb2Zmc2V0Ow0KPiAgCX0gZWxzZSBpZiAoYnVmX2xlbiA9PSBkZXYtPnZob3N0X2hs ZW4pIHsNCj4gIAkJaWYgKHVubGlrZWx5KCsrdmVjX2lkeCA+PSBucl92ZWMpKQ0KPiAgCQkJZ290 byBvdXQ7DQo+ICAJCWJ1Zl9hZGRyID0gYnVmX3ZlY1t2ZWNfaWR4XS5idWZfYWRkcjsNCj4gLQkJ YnVmX2lvdmEgPSBidWZfdmVjW3ZlY19pZHhdLmJ1Zl9pb3ZhOw0KPiAgCQlidWZfbGVuID0gYnVm X3ZlY1t2ZWNfaWR4XS5idWZfbGVuOw0KPiANCj4gIAkJYnVmX29mZnNldCA9IDA7DQo+IEBAIC0y MDEyLDQ4ICsyMDA5LDIzIEBAIGNvcHlfZGVzY190b19tYnVmKHN0cnVjdCB2aXJ0aW9fbmV0ICpk ZXYsIHN0cnVjdA0KPiB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiAgCW1idWZfb2Zmc2V0ID0gMDsN Cj4gIAltYnVmX2F2YWlsICA9IG0tPmJ1Zl9sZW4gLSBSVEVfUEtUTUJVRl9IRUFEUk9PTTsNCj4g IAl3aGlsZSAoMSkgew0KPiAtCQl1aW50NjRfdCBocGE7DQo+IC0NCj4gIAkJY3B5X2xlbiA9IFJU RV9NSU4oYnVmX2F2YWlsLCBtYnVmX2F2YWlsKTsNCj4gDQo+IC0JCS8qDQo+IC0JCSAqIEEgZGVz YyBidWYgbWlnaHQgYWNyb3NzIHR3byBob3N0IHBoeXNpY2FsIHBhZ2VzIHRoYXQgYXJlDQo+IC0J CSAqIG5vdCBjb250aW51b3VzLiBJbiBzdWNoIGNhc2UgKGdwYV90b19ocGEgcmV0dXJucyAwKSwg ZGF0YQ0KPiAtCQkgKiB3aWxsIGJlIGNvcGllZCBldmVuIHRob3VnaCB6ZXJvIGNvcHkgaXMgZW5h YmxlZC4NCj4gLQkJICovDQo+IC0JCWlmICh1bmxpa2VseShkZXYtPmRlcXVldWVfemVyb19jb3B5 ICYmIChocGEgPSBncGFfdG9faHBhKGRldiwNCj4gLQkJCQkJYnVmX2lvdmEgKyBidWZfb2Zmc2V0 LCBjcHlfbGVuKSkpKSB7DQo+IC0JCQljdXItPmRhdGFfbGVuID0gY3B5X2xlbjsNCj4gLQkJCWN1 ci0+ZGF0YV9vZmYgPSAwOw0KPiAtCQkJY3VyLT5idWZfYWRkciA9DQo+IC0JCQkJKHZvaWQgKiko dWludHB0cl90KShidWZfYWRkciArIGJ1Zl9vZmZzZXQpOw0KPiAtCQkJY3VyLT5idWZfaW92YSA9 IGhwYTsNCj4gLQ0KPiAtCQkJLyoNCj4gLQkJCSAqIEluIHplcm8gY29weSBtb2RlLCBvbmUgbWJ1 ZiBjYW4gb25seSByZWZlcmVuY2UgZGF0YQ0KPiAtCQkJICogZm9yIG9uZSBvciBwYXJ0aWFsIG9m IG9uZSBkZXNjIGJ1ZmYuDQo+IC0JCQkgKi8NCj4gLQkJCW1idWZfYXZhaWwgPSBjcHlfbGVuOw0K PiAtCQl9IGVsc2Ugew0KPiAtCQkJaWYgKGxpa2VseShjcHlfbGVuID4gTUFYX0JBVENIX0xFTiB8 fA0KPiAtCQkJCSAgIHZxLT5iYXRjaF9jb3B5X25iX2VsZW1zID49IHZxLT5zaXplIHx8DQo+IC0J CQkJICAgKGhkciAmJiBjdXIgPT0gbSkpKSB7DQo+IC0JCQkJcnRlX21lbWNweShydGVfcGt0bWJ1 Zl9tdG9kX29mZnNldChjdXIsIHZvaWQgKiwNCj4gLQkJCQkJCQkJICAgbWJ1Zl9vZmZzZXQpLA0K PiAtCQkJCQkgICAodm9pZCAqKSgodWludHB0cl90KShidWZfYWRkciArDQo+IC0JCQkJCQkJICAg YnVmX29mZnNldCkpLA0KPiAtCQkJCQkgICBjcHlfbGVuKTsNCj4gLQkJCX0gZWxzZSB7DQo+IC0J CQkJYmF0Y2hfY29weVt2cS0+YmF0Y2hfY29weV9uYl9lbGVtc10uZHN0ID0NCj4gLQkJCQkJcnRl X3BrdG1idWZfbXRvZF9vZmZzZXQoY3VyLCB2b2lkICosDQo+IC0JCQkJCQkJCW1idWZfb2Zmc2V0 KTsNCj4gLQkJCQliYXRjaF9jb3B5W3ZxLT5iYXRjaF9jb3B5X25iX2VsZW1zXS5zcmMgPQ0KPiAr CQlpZiAobGlrZWx5KGNweV9sZW4gPiBNQVhfQkFUQ0hfTEVOIHx8DQo+ICsJCQkJCXZxLT5iYXRj aF9jb3B5X25iX2VsZW1zID49IHZxLT5zaXplIHx8DQo+ICsJCQkJCShoZHIgJiYgY3VyID09IG0p KSkgew0KPiArCQkJcnRlX21lbWNweShydGVfcGt0bWJ1Zl9tdG9kX29mZnNldChjdXIsIHZvaWQg KiwNCj4gKwkJCQkJCW1idWZfb2Zmc2V0KSwNCj4gIAkJCQkJKHZvaWQgKikoKHVpbnRwdHJfdCko YnVmX2FkZHIgKw0KPiAtCQkJCQkJCQlidWZfb2Zmc2V0KSk7DQo+IC0JCQkJYmF0Y2hfY29weVt2 cS0+YmF0Y2hfY29weV9uYl9lbGVtc10ubGVuID0NCj4gLQkJCQkJY3B5X2xlbjsNCj4gLQkJCQl2 cS0+YmF0Y2hfY29weV9uYl9lbGVtcysrOw0KPiAtCQkJfQ0KPiArCQkJCQkJCWJ1Zl9vZmZzZXQp KSwgY3B5X2xlbik7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQliYXRjaF9jb3B5W3ZxLT5iYXRjaF9j b3B5X25iX2VsZW1zXS5kc3QgPQ0KPiArCQkJCXJ0ZV9wa3RtYnVmX210b2Rfb2Zmc2V0KGN1ciwg dm9pZCAqLA0KPiArCQkJCQkJbWJ1Zl9vZmZzZXQpOw0KPiArCQkJYmF0Y2hfY29weVt2cS0+YmF0 Y2hfY29weV9uYl9lbGVtc10uc3JjID0NCj4gKwkJCQkodm9pZCAqKSgodWludHB0cl90KShidWZf YWRkciArIGJ1Zl9vZmZzZXQpKTsNCj4gKwkJCWJhdGNoX2NvcHlbdnEtPmJhdGNoX2NvcHlfbmJf ZWxlbXNdLmxlbiA9IGNweV9sZW47DQo+ICsJCQl2cS0+YmF0Y2hfY29weV9uYl9lbGVtcysrOw0K PiAgCQl9DQo+IA0KPiAgCQltYnVmX2F2YWlsICAtPSBjcHlfbGVuOw0KPiBAQCAtMjA2Nyw3ICsy MDM5LDYgQEAgY29weV9kZXNjX3RvX21idWYoc3RydWN0IHZpcnRpb19uZXQgKmRldiwgc3RydWN0 DQo+IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+ICAJCQkJYnJlYWs7DQo+IA0KPiAgCQkJYnVmX2Fk ZHIgPSBidWZfdmVjW3ZlY19pZHhdLmJ1Zl9hZGRyOw0KPiAtCQkJYnVmX2lvdmEgPSBidWZfdmVj W3ZlY19pZHhdLmJ1Zl9pb3ZhOw0KPiAgCQkJYnVmX2xlbiA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVm X2xlbjsNCj4gDQo+ICAJCQlidWZfb2Zmc2V0ID0gMDsNCj4gQEAgLTIwODksOCArMjA2MCw2IEBA IGNvcHlfZGVzY190b19tYnVmKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHN0cnVjdA0KPiB2aG9z dF92aXJ0cXVldWUgKnZxLA0KPiAgCQkJCWVycm9yID0gLTE7DQo+ICAJCQkJZ290byBvdXQ7DQo+ ICAJCQl9DQo+IC0JCQlpZiAodW5saWtlbHkoZGV2LT5kZXF1ZXVlX3plcm9fY29weSkpDQo+IC0J CQkJcnRlX21idWZfcmVmY250X3VwZGF0ZShjdXIsIDEpOw0KPiANCj4gIAkJCXByZXYtPm5leHQg PSBjdXI7DQo+ICAJCQlwcmV2LT5kYXRhX2xlbiA9IG1idWZfb2Zmc2V0Ow0KPiBAQCAtMjExNCwz NyArMjA4Myw2IEBAIGNvcHlfZGVzY190b19tYnVmKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHN0 cnVjdA0KPiB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiAgCXJldHVybiBlcnJvcjsNCj4gIH0NCj4g DQo+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBzdHJ1Y3QgemNvcHlfbWJ1ZiAqDQo+IC1n ZXRfem1idWYoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpDQo+IC17DQo+IC0JdWludDE2X3Qg aTsNCj4gLQl1aW50MTZfdCBsYXN0Ow0KPiAtCWludCB0cmllcyA9IDA7DQo+IC0NCj4gLQkvKiBz ZWFyY2ggW2xhc3Rfem1idWZfaWR4LCB6bWJ1Zl9zaXplKSAqLw0KPiAtCWkgPSB2cS0+bGFzdF96 bWJ1Zl9pZHg7DQo+IC0JbGFzdCA9IHZxLT56bWJ1Zl9zaXplOw0KPiAtDQo+IC1hZ2FpbjoNCj4g LQlmb3IgKDsgaSA8IGxhc3Q7IGkrKykgew0KPiAtCQlpZiAodnEtPnptYnVmc1tpXS5pbl91c2Ug PT0gMCkgew0KPiAtCQkJdnEtPmxhc3Rfem1idWZfaWR4ID0gaSArIDE7DQo+IC0JCQl2cS0+em1i dWZzW2ldLmluX3VzZSA9IDE7DQo+IC0JCQlyZXR1cm4gJnZxLT56bWJ1ZnNbaV07DQo+IC0JCX0N Cj4gLQl9DQo+IC0NCj4gLQl0cmllcysrOw0KPiAtCWlmICh0cmllcyA9PSAxKSB7DQo+IC0JCS8q IHNlYXJjaCBbMCwgbGFzdF96bWJ1Zl9pZHgpICovDQo+IC0JCWkgPSAwOw0KPiAtCQlsYXN0ID0g dnEtPmxhc3Rfem1idWZfaWR4Ow0KPiAtCQlnb3RvIGFnYWluOw0KPiAtCX0NCj4gLQ0KPiAtCXJl dHVybiBOVUxMOw0KPiAtfQ0KPiAtDQo+ICBzdGF0aWMgdm9pZA0KPiAgdmlydGlvX2Rldl9leHRi dWZfZnJlZSh2b2lkICphZGRyIF9fcnRlX3VudXNlZCwgdm9pZCAqb3BhcXVlKQ0KPiAgew0KPiBA QCAtMjI0NCwzMCArMjE4Miw2IEBAIHZpcnRpb19kZXZfdHhfc3BsaXQoc3RydWN0IHZpcnRpb19u ZXQgKmRldiwgc3RydWN0DQo+IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+ICAJdWludDE2X3QgZHJv cHBlZCA9IDA7DQo+ICAJc3RhdGljIGJvb2wgYWxsb2NlcnJfd2FybmVkOw0KPiANCj4gLQlpZiAo dW5saWtlbHkoZGV2LT5kZXF1ZXVlX3plcm9fY29weSkpIHsNCj4gLQkJc3RydWN0IHpjb3B5X21i dWYgKnptYnVmLCAqbmV4dDsNCj4gLQ0KPiAtCQlmb3IgKHptYnVmID0gVEFJTFFfRklSU1QoJnZx LT56bWJ1Zl9saXN0KTsNCj4gLQkJICAgICB6bWJ1ZiAhPSBOVUxMOyB6bWJ1ZiA9IG5leHQpIHsN Cj4gLQkJCW5leHQgPSBUQUlMUV9ORVhUKHptYnVmLCBuZXh0KTsNCj4gLQ0KPiAtCQkJaWYgKG1i dWZfaXNfY29uc3VtZWQoem1idWYtPm1idWYpKSB7DQo+IC0JCQkJdXBkYXRlX3NoYWRvd191c2Vk X3Jpbmdfc3BsaXQodnEsDQo+IC0JCQkJCQl6bWJ1Zi0+ZGVzY19pZHgsIDApOw0KPiAtCQkJCVRB SUxRX1JFTU9WRSgmdnEtPnptYnVmX2xpc3QsIHptYnVmLCBuZXh0KTsNCj4gLQkJCQlyZXN0b3Jl X21idWYoem1idWYtPm1idWYpOw0KPiAtCQkJCXJ0ZV9wa3RtYnVmX2ZyZWUoem1idWYtPm1idWYp Ow0KPiAtCQkJCXB1dF96bWJ1Zih6bWJ1Zik7DQo+IC0JCQkJdnEtPm5yX3ptYnVmIC09IDE7DQo+ IC0JCQl9DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAobGlrZWx5KHZxLT5zaGFkb3dfdXNlZF9pZHgp KSB7DQo+IC0JCQlmbHVzaF9zaGFkb3dfdXNlZF9yaW5nX3NwbGl0KGRldiwgdnEpOw0KPiAtCQkJ dmhvc3RfdnJpbmdfY2FsbF9zcGxpdChkZXYsIHZxKTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAg CS8qDQo+ICAJICogVGhlIG9yZGVyaW5nIGJldHdlZW4gYXZhaWwgaW5kZXggYW5kDQo+ICAJICog ZGVzYyByZWFkcyBuZWVkcyB0byBiZSBlbmZvcmNlZC4NCj4gQEAgLTIzMDAsOCArMjIxNCw3IEBA IHZpcnRpb19kZXZfdHhfc3BsaXQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwgc3RydWN0DQo+IHZo b3N0X3ZpcnRxdWV1ZSAqdnEsDQo+ICAJCQkJCQlWSE9TVF9BQ0NFU1NfUk8pIDwgMCkpDQo+ICAJ CQlicmVhazsNCj4gDQo+IC0JCWlmIChsaWtlbHkoZGV2LT5kZXF1ZXVlX3plcm9fY29weSA9PSAw KSkNCj4gLQkJCXVwZGF0ZV9zaGFkb3dfdXNlZF9yaW5nX3NwbGl0KHZxLCBoZWFkX2lkeCwgMCk7 DQo+ICsJCXVwZGF0ZV9zaGFkb3dfdXNlZF9yaW5nX3NwbGl0KHZxLCBoZWFkX2lkeCwgMCk7DQo+ IA0KPiAgCQlwa3RzW2ldID0gdmlydGlvX2Rldl9wa3RtYnVmX2FsbG9jKGRldiwgbWJ1Zl9wb29s LCBidWZfbGVuKTsNCj4gIAkJaWYgKHVubGlrZWx5KHBrdHNbaV0gPT0gTlVMTCkpIHsNCj4gQEAg LTIzMzUsNDIgKzIyNDgsMTYgQEAgdmlydGlvX2Rldl90eF9zcGxpdChzdHJ1Y3QgdmlydGlvX25l dCAqZGV2LCBzdHJ1Y3QNCj4gdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gIAkJCWkrKzsNCj4gIAkJ CWJyZWFrOw0KPiAgCQl9DQo+IC0NCj4gLQkJaWYgKHVubGlrZWx5KGRldi0+ZGVxdWV1ZV96ZXJv X2NvcHkpKSB7DQo+IC0JCQlzdHJ1Y3QgemNvcHlfbWJ1ZiAqem1idWY7DQo+IC0NCj4gLQkJCXpt YnVmID0gZ2V0X3ptYnVmKHZxKTsNCj4gLQkJCWlmICghem1idWYpIHsNCj4gLQkJCQlydGVfcGt0 bWJ1Zl9mcmVlKHBrdHNbaV0pOw0KPiAtCQkJCWRyb3BwZWQgKz0gMTsNCj4gLQkJCQlpKys7DQo+ IC0JCQkJYnJlYWs7DQo+IC0JCQl9DQo+IC0JCQl6bWJ1Zi0+bWJ1ZiA9IHBrdHNbaV07DQo+IC0J CQl6bWJ1Zi0+ZGVzY19pZHggPSBoZWFkX2lkeDsNCj4gLQ0KPiAtCQkJLyoNCj4gLQkJCSAqIFBp biBsb2NrIHRoZSBtYnVmOyB3ZSB3aWxsIGNoZWNrIGxhdGVyIHRvIHNlZQ0KPiAtCQkJICogd2hl dGhlciB0aGUgbWJ1ZiBpcyBmcmVlZCAod2hlbiB3ZSBhcmUgdGhlIGxhc3QNCj4gLQkJCSAqIHVz ZXIpIG9yIG5vdC4gSWYgdGhhdCdzIHRoZSBjYXNlLCB3ZSB0aGVuIGNvdWxkDQo+IC0JCQkgKiB1 cGRhdGUgdGhlIHVzZWQgcmluZyBzYWZlbHkuDQo+IC0JCQkgKi8NCj4gLQkJCXJ0ZV9tYnVmX3Jl ZmNudF91cGRhdGUocGt0c1tpXSwgMSk7DQo+IC0NCj4gLQkJCXZxLT5ucl96bWJ1ZiArPSAxOw0K PiAtCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnZxLT56bWJ1Zl9saXN0LCB6bWJ1ZiwgbmV4dCk7DQo+ IC0JCX0NCj4gIAl9DQo+ICsNCj4gIAl2cS0+bGFzdF9hdmFpbF9pZHggKz0gaTsNCj4gDQo+IC0J aWYgKGxpa2VseShkZXYtPmRlcXVldWVfemVyb19jb3B5ID09IDApKSB7DQo+IC0JCWRvX2RhdGFf Y29weV9kZXF1ZXVlKHZxKTsNCj4gLQkJaWYgKHVubGlrZWx5KGkgPCBjb3VudCkpDQo+IC0JCQl2 cS0+c2hhZG93X3VzZWRfaWR4ID0gaTsNCj4gLQkJaWYgKGxpa2VseSh2cS0+c2hhZG93X3VzZWRf aWR4KSkgew0KPiAtCQkJZmx1c2hfc2hhZG93X3VzZWRfcmluZ19zcGxpdChkZXYsIHZxKTsNCj4g LQkJCXZob3N0X3ZyaW5nX2NhbGxfc3BsaXQoZGV2LCB2cSk7DQo+IC0JCX0NCj4gKwlkb19kYXRh X2NvcHlfZGVxdWV1ZSh2cSk7DQo+ICsJaWYgKHVubGlrZWx5KGkgPCBjb3VudCkpDQo+ICsJCXZx LT5zaGFkb3dfdXNlZF9pZHggPSBpOw0KPiArCWlmIChsaWtlbHkodnEtPnNoYWRvd191c2VkX2lk eCkpIHsNCj4gKwkJZmx1c2hfc2hhZG93X3VzZWRfcmluZ19zcGxpdChkZXYsIHZxKTsNCj4gKwkJ dmhvc3RfdnJpbmdfY2FsbF9zcGxpdChkZXYsIHZxKTsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAo aSAtIGRyb3BwZWQpOw0KPiBAQCAtMjU3MCwxNjIgKzI0NTcsNiBAQCB2aXJ0aW9fZGV2X3R4X3Np bmdsZV9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gIAlyZXR1cm4gcmV0Ow0KPiAg fQ0KPiANCj4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiAtdmlydGlvX2Rldl90 eF9iYXRjaF9wYWNrZWRfem1idWYoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gLQkJCQkgc3Ry dWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+IC0JCQkJIHN0cnVjdCBydGVfbWVtcG9vbCAqbWJ1 Zl9wb29sLA0KPiAtCQkJCSBzdHJ1Y3QgcnRlX21idWYgKipwa3RzKQ0KPiAtew0KPiAtCXN0cnVj dCB6Y29weV9tYnVmICp6bWJ1ZnNbUEFDS0VEX0JBVENIX1NJWkVdOw0KPiAtCXVpbnRwdHJfdCBk ZXNjX2FkZHJzW1BBQ0tFRF9CQVRDSF9TSVpFXTsNCj4gLQl1aW50MTZfdCBpZHNbUEFDS0VEX0JB VENIX1NJWkVdOw0KPiAtCXVpbnQxNl90IGk7DQo+IC0NCj4gLQl1aW50MTZfdCBhdmFpbF9pZHgg PSB2cS0+bGFzdF9hdmFpbF9pZHg7DQo+IC0NCj4gLQlpZiAodmhvc3RfcmVzZXJ2ZV9hdmFpbF9i YXRjaF9wYWNrZWQoZGV2LCB2cSwgbWJ1Zl9wb29sLCBwa3RzLA0KPiAtCQkJCQkgICAgIGF2YWls X2lkeCwgZGVzY19hZGRycywgaWRzKSkNCj4gLQkJcmV0dXJuIC0xOw0KPiAtDQo+IC0Jdmhvc3Rf Zm9yX2VhY2hfdHJ5X3Vucm9sbChpLCAwLCBQQUNLRURfQkFUQ0hfU0laRSkNCj4gLQkJem1idWZz W2ldID0gZ2V0X3ptYnVmKHZxKTsNCj4gLQ0KPiAtCXZob3N0X2Zvcl9lYWNoX3RyeV91bnJvbGwo aSwgMCwgUEFDS0VEX0JBVENIX1NJWkUpIHsNCj4gLQkJaWYgKCF6bWJ1ZnNbaV0pDQo+IC0JCQln b3RvIGZyZWVfcGt0Ow0KPiAtCX0NCj4gLQ0KPiAtCXZob3N0X2Zvcl9lYWNoX3RyeV91bnJvbGwo aSwgMCwgUEFDS0VEX0JBVENIX1NJWkUpIHsNCj4gLQkJem1idWZzW2ldLT5tYnVmID0gcGt0c1tp XTsNCj4gLQkJem1idWZzW2ldLT5kZXNjX2lkeCA9IGlkc1tpXTsNCj4gLQkJem1idWZzW2ldLT5k ZXNjX2NvdW50ID0gMTsNCj4gLQl9DQo+IC0NCj4gLQl2aG9zdF9mb3JfZWFjaF90cnlfdW5yb2xs KGksIDAsIFBBQ0tFRF9CQVRDSF9TSVpFKQ0KPiAtCQlydGVfbWJ1Zl9yZWZjbnRfdXBkYXRlKHBr dHNbaV0sIDEpOw0KPiAtDQo+IC0Jdmhvc3RfZm9yX2VhY2hfdHJ5X3Vucm9sbChpLCAwLCBQQUNL RURfQkFUQ0hfU0laRSkNCj4gLQkJVEFJTFFfSU5TRVJUX1RBSUwoJnZxLT56bWJ1Zl9saXN0LCB6 bWJ1ZnNbaV0sIG5leHQpOw0KPiAtDQo+IC0JdnEtPm5yX3ptYnVmICs9IFBBQ0tFRF9CQVRDSF9T SVpFOw0KPiAtCXZxX2luY19sYXN0X2F2YWlsX3BhY2tlZCh2cSwgUEFDS0VEX0JBVENIX1NJWkUp Ow0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC0NCj4gLWZyZWVfcGt0Og0KPiAtCXZob3N0X2Zvcl9l YWNoX3RyeV91bnJvbGwoaSwgMCwgUEFDS0VEX0JBVENIX1NJWkUpDQo+IC0JCXJ0ZV9wa3RtYnVm X2ZyZWUocGt0c1tpXSk7DQo+IC0NCj4gLQlyZXR1cm4gLTE7DQo+IC19DQo+IC0NCj4gLXN0YXRp YyBfX3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiAtdmlydGlvX2Rldl90eF9zaW5nbGVfcGFja2Vk X3ptYnVmKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsDQo+IC0JCQkJICBzdHJ1Y3Qgdmhvc3Rfdmly dHF1ZXVlICp2cSwNCj4gLQkJCQkgIHN0cnVjdCBydGVfbWVtcG9vbCAqbWJ1Zl9wb29sLA0KPiAt CQkJCSAgc3RydWN0IHJ0ZV9tYnVmICoqcGt0cykNCj4gLXsNCj4gLQl1aW50MTZfdCBidWZfaWQs IGRlc2NfY291bnQ7DQo+IC0Jc3RydWN0IHpjb3B5X21idWYgKnptYnVmOw0KPiAtDQo+IC0JaWYg KHZob3N0X2RlcXVldWVfc2luZ2xlX3BhY2tlZChkZXYsIHZxLCBtYnVmX3Bvb2wsIHBrdHMsICZi dWZfaWQsDQo+IC0JCQkJCSZkZXNjX2NvdW50KSkNCj4gLQkJcmV0dXJuIC0xOw0KPiAtDQo+IC0J em1idWYgPSBnZXRfem1idWYodnEpOw0KPiAtCWlmICghem1idWYpIHsNCj4gLQkJcnRlX3BrdG1i dWZfZnJlZSgqcGt0cyk7DQo+IC0JCXJldHVybiAtMTsNCj4gLQl9DQo+IC0Jem1idWYtPm1idWYg PSAqcGt0czsNCj4gLQl6bWJ1Zi0+ZGVzY19pZHggPSBidWZfaWQ7DQo+IC0Jem1idWYtPmRlc2Nf Y291bnQgPSBkZXNjX2NvdW50Ow0KPiAtDQo+IC0JcnRlX21idWZfcmVmY250X3VwZGF0ZSgqcGt0 cywgMSk7DQo+IC0NCj4gLQl2cS0+bnJfem1idWYgKz0gMTsNCj4gLQlUQUlMUV9JTlNFUlRfVEFJ TCgmdnEtPnptYnVmX2xpc3QsIHptYnVmLCBuZXh0KTsNCj4gLQ0KPiAtCXZxX2luY19sYXN0X2F2 YWlsX3BhY2tlZCh2cSwgZGVzY19jb3VudCk7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4g LXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gLWZyZWVfem1idWYoc3RydWN0IHZo b3N0X3ZpcnRxdWV1ZSAqdnEpDQo+IC17DQo+IC0Jc3RydWN0IHpjb3B5X21idWYgKm5leHQgPSBO VUxMOw0KPiAtCXN0cnVjdCB6Y29weV9tYnVmICp6bWJ1ZjsNCj4gLQ0KPiAtCWZvciAoem1idWYg PSBUQUlMUV9GSVJTVCgmdnEtPnptYnVmX2xpc3QpOw0KPiAtCSAgICAgem1idWYgIT0gTlVMTDsg em1idWYgPSBuZXh0KSB7DQo+IC0JCW5leHQgPSBUQUlMUV9ORVhUKHptYnVmLCBuZXh0KTsNCj4g LQ0KPiAtCQl1aW50MTZfdCBsYXN0X3VzZWRfaWR4ID0gdnEtPmxhc3RfdXNlZF9pZHg7DQo+IC0N Cj4gLQkJaWYgKG1idWZfaXNfY29uc3VtZWQoem1idWYtPm1idWYpKSB7DQo+IC0JCQl1aW50MTZf dCBmbGFnczsNCj4gLQkJCWZsYWdzID0gdnEtPmRlc2NfcGFja2VkW2xhc3RfdXNlZF9pZHhdLmZs YWdzOw0KPiAtCQkJaWYgKHZxLT51c2VkX3dyYXBfY291bnRlcikgew0KPiAtCQkJCWZsYWdzIHw9 IFZSSU5HX0RFU0NfRl9VU0VEOw0KPiAtCQkJCWZsYWdzIHw9IFZSSU5HX0RFU0NfRl9BVkFJTDsN Cj4gLQkJCX0gZWxzZSB7DQo+IC0JCQkJZmxhZ3MgJj0gflZSSU5HX0RFU0NfRl9VU0VEOw0KPiAt CQkJCWZsYWdzICY9IH5WUklOR19ERVNDX0ZfQVZBSUw7DQo+IC0JCQl9DQo+IC0NCj4gLQkJCXZx LT5kZXNjX3BhY2tlZFtsYXN0X3VzZWRfaWR4XS5pZCA9IHptYnVmLT5kZXNjX2lkeDsNCj4gLQkJ CXZxLT5kZXNjX3BhY2tlZFtsYXN0X3VzZWRfaWR4XS5sZW4gPSAwOw0KPiAtDQo+IC0JCQlydGVf c21wX3dtYigpOw0KPiAtCQkJdnEtPmRlc2NfcGFja2VkW2xhc3RfdXNlZF9pZHhdLmZsYWdzID0g ZmxhZ3M7DQo+IC0NCj4gLQkJCXZxX2luY19sYXN0X3VzZWRfcGFja2VkKHZxLCB6bWJ1Zi0+ZGVz Y19jb3VudCk7DQo+IC0NCj4gLQkJCVRBSUxRX1JFTU9WRSgmdnEtPnptYnVmX2xpc3QsIHptYnVm LCBuZXh0KTsNCj4gLQkJCXJlc3RvcmVfbWJ1Zih6bWJ1Zi0+bWJ1Zik7DQo+IC0JCQlydGVfcGt0 bWJ1Zl9mcmVlKHptYnVmLT5tYnVmKTsNCj4gLQkJCXB1dF96bWJ1Zih6bWJ1Zik7DQo+IC0JCQl2 cS0+bnJfem1idWYgLT0gMTsNCj4gLQkJfQ0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIF9f cnRlX25vaW5saW5lIHVpbnQxNl90DQo+IC12aXJ0aW9fZGV2X3R4X3BhY2tlZF96bWJ1ZihzdHJ1 Y3QgdmlydGlvX25ldCAqZGV2LA0KPiAtCQkJICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqX19y dGVfcmVzdHJpY3QgdnEsDQo+IC0JCQkgICBzdHJ1Y3QgcnRlX21lbXBvb2wgKm1idWZfcG9vbCwN Cj4gLQkJCSAgIHN0cnVjdCBydGVfbWJ1ZiAqKl9fcnRlX3Jlc3RyaWN0IHBrdHMsDQo+IC0JCQkg ICB1aW50MzJfdCBjb3VudCkNCj4gLXsNCj4gLQl1aW50MzJfdCBwa3RfaWR4ID0gMDsNCj4gLQl1 aW50MzJfdCByZW1haW5lZCA9IGNvdW50Ow0KPiAtDQo+IC0JZnJlZV96bWJ1Zih2cSk7DQo+IC0N Cj4gLQlkbyB7DQo+IC0JCWlmIChyZW1haW5lZCA+PSBQQUNLRURfQkFUQ0hfU0laRSkgew0KPiAt CQkJaWYgKCF2aXJ0aW9fZGV2X3R4X2JhdGNoX3BhY2tlZF96bWJ1ZihkZXYsIHZxLA0KPiAtCQkJ CW1idWZfcG9vbCwgJnBrdHNbcGt0X2lkeF0pKSB7DQo+IC0JCQkJcGt0X2lkeCArPSBQQUNLRURf QkFUQ0hfU0laRTsNCj4gLQkJCQlyZW1haW5lZCAtPSBQQUNLRURfQkFUQ0hfU0laRTsNCj4gLQkJ CQljb250aW51ZTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiAtDQo+IC0JCWlmICh2aXJ0aW9fZGV2X3R4 X3NpbmdsZV9wYWNrZWRfem1idWYoZGV2LCB2cSwgbWJ1Zl9wb29sLA0KPiAtCQkJCQkJICAgICAg JnBrdHNbcGt0X2lkeF0pKQ0KPiAtCQkJYnJlYWs7DQo+IC0JCXBrdF9pZHgrKzsNCj4gLQkJcmVt YWluZWQtLTsNCj4gLQ0KPiAtCX0gd2hpbGUgKHJlbWFpbmVkKTsNCj4gLQ0KPiAtCWlmIChwa3Rf aWR4KQ0KPiAtCQl2aG9zdF92cmluZ19jYWxsX3BhY2tlZChkZXYsIHZxKTsNCj4gLQ0KPiAtCXJl dHVybiBwa3RfaWR4Ow0KPiAtfQ0KPiAtDQo+ICBzdGF0aWMgX19ydGVfbm9pbmxpbmUgdWludDE2 X3QNCj4gIHZpcnRpb19kZXZfdHhfcGFja2VkKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsDQo+ICAJ CSAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqX19ydGVfcmVzdHJpY3QgdnEsDQo+IEBAIC0y ODQxLDE0ICsyNTcyLDkgQEAgcnRlX3Zob3N0X2RlcXVldWVfYnVyc3QoaW50IHZpZCwgdWludDE2 X3QgcXVldWVfaWQsDQo+ICAJCWNvdW50IC09IDE7DQo+ICAJfQ0KPiANCj4gLQlpZiAodnFfaXNf cGFja2VkKGRldikpIHsNCj4gLQkJaWYgKHVubGlrZWx5KGRldi0+ZGVxdWV1ZV96ZXJvX2NvcHkp KQ0KPiAtCQkJY291bnQgPSB2aXJ0aW9fZGV2X3R4X3BhY2tlZF96bWJ1ZihkZXYsIHZxLCBtYnVm X3Bvb2wsDQo+IC0JCQkJCQkJICAgcGt0cywgY291bnQpOw0KPiAtCQllbHNlDQo+IC0JCQljb3Vu dCA9IHZpcnRpb19kZXZfdHhfcGFja2VkKGRldiwgdnEsIG1idWZfcG9vbCwgcGt0cywNCj4gLQkJ CQkJCSAgICAgY291bnQpOw0KPiAtCX0gZWxzZQ0KPiArCWlmICh2cV9pc19wYWNrZWQoZGV2KSkN Cj4gKwkJY291bnQgPSB2aXJ0aW9fZGV2X3R4X3BhY2tlZChkZXYsIHZxLCBtYnVmX3Bvb2wsIHBr dHMsIGNvdW50KTsNCj4gKwllbHNlDQo+ICAJCWNvdW50ID0gdmlydGlvX2Rldl90eF9zcGxpdChk ZXYsIHZxLCBtYnVmX3Bvb2wsIHBrdHMsIGNvdW50KTsNCj4gDQo+ICBvdXQ6DQo+IC0tDQo+IDIu MjYuMg0KDQpSZXZpZXdlZC1ieTogQ2hlbmJvIFhpYSA8Y2hlbmJvLnhpYUBpbnRlbC5jb20+DQo=