From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 129A0C352A9 for ; Thu, 26 Sep 2019 15:06:30 +0000 (UTC) Received: from dpdk.org (dpdk.org [92.243.14.124]) by mail.kernel.org (Postfix) with ESMTP id 6F29B206E0 for ; Thu, 26 Sep 2019 15:06:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6F29B206E0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9BE4C2C39; Thu, 26 Sep 2019 17:06:28 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id F05BC2C36 for ; Thu, 26 Sep 2019 17:06:26 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Sep 2019 08:06:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,552,1559545200"; d="scan'208";a="214504701" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga004.fm.intel.com with ESMTP; 26 Sep 2019 08:06:25 -0700 Received: from fmsmsx102.amr.corp.intel.com (10.18.124.200) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 26 Sep 2019 08:06:25 -0700 Received: from shsmsx105.ccr.corp.intel.com (10.239.4.158) by FMSMSX102.amr.corp.intel.com (10.18.124.200) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 26 Sep 2019 08:06:25 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.92]) by SHSMSX105.ccr.corp.intel.com ([169.254.11.23]) with mapi id 14.03.0439.000; Thu, 26 Sep 2019 23:06:23 +0800 From: "Yu, Jin" To: "Bie, Tiwei" CC: "dev@dpdk.org" , "Liu, Changpeng" , "maxime.coquelin@redhat.com" , "Wang, Zhihong" , Lin Li , Xun Ni , Yu Zhang Thread-Topic: [PATCH v7 04/10] vhost: add two new messages to support a shared buffer Thread-Index: AQHVb2p1VwYttlBj10uIlKXH7yfrSqc9FgCAgAD8frA= Date: Thu, 26 Sep 2019 15:06:22 +0000 Message-ID: References: <20190917145234.16951> <20190920120102.29828-1-jin.yu@intel.com> <20190920120102.29828-5-jin.yu@intel.com> <20190926073905.GA12440@___> In-Reply-To: <20190926073905.GA12440@___> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjFjNTM5ZDUtODY0ZS00Yzc0LTgyN2YtOTlkMDc5M2UzNjU3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiaUpnc1JUcnE3V2xudzVXSDAyYWpoOEI3UUY3TXRvTDZ6TkF4MzVDQys5NFVIaUhDRURRdXVCRHY3cEFyNFBlOSJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v7 04/10] vhost: add two new messages to support a shared buffer 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" PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBCaWUsIFRpd2VpDQo+IFNlbnQ6 IFRodXJzZGF5LCBTZXB0ZW1iZXIgMjYsIDIwMTkgMzozOSBQTQ0KPiBUbzogWXUsIEppbiA8amlu Lnl1QGludGVsLmNvbT4NCj4gQ2M6IGRldkBkcGRrLm9yZzsgTGl1LCBDaGFuZ3BlbmcgPGNoYW5n cGVuZy5saXVAaW50ZWwuY29tPjsNCj4gbWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb207IFdhbmcs IFpoaWhvbmcgPHpoaWhvbmcud2FuZ0BpbnRlbC5jb20+OyBMaW4NCj4gTGkgPGxpbGluMjRAYmFp ZHUuY29tPjsgWHVuIE5pIDxuaXh1bkBiYWlkdS5jb20+OyBZdSBaaGFuZw0KPiA8emhhbmd5dTMx QGJhaWR1LmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2NyAwNC8xMF0gdmhvc3Q6IGFkZCB0 d28gbmV3IG1lc3NhZ2VzIHRvIHN1cHBvcnQgYSBzaGFyZWQNCj4gYnVmZmVyDQo+IA0KPiBPbiBG cmksIFNlcCAyMCwgMjAxOSBhdCAwODowMDo1NlBNICswODAwLCBKaW4gWXUgd3JvdGU6DQo+ID4g VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgbWVzc2FnZXMgVkhPU1RfVVNFUl9HRVRfSU5G TElHSFRfRkQgYW5kDQo+ID4gVkhPU1RfVVNFUl9TRVRfSU5GTElHSFRfRkQgdG8gc3VwcG9ydCB0 cmFuc2ZlcnJpbmcgYSBzaGFyZWQgYnVmZmVyDQo+ID4gYmV0d2VlbiBxZW11IGFuZCBiYWNrZW5k Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTGluIExpIDxsaWxpbjI0QGJhaWR1LmNvbT4NCj4g PiBTaWduZWQtb2ZmLWJ5OiBYdW4gTmkgPG5peHVuQGJhaWR1LmNvbT4NCj4gPiBTaWduZWQtb2Zm LWJ5OiBZdSBaaGFuZyA8emhhbmd5dTMxQGJhaWR1LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBK aW4gWXUgPGppbi55dUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGxpYi9saWJydGVfdmhvc3Qv dmhvc3QuaCAgICAgIHwgICA3ICsNCj4gPiAgbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmMg fCAyNjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICBsaWIvbGlicnRl X3Zob3N0L3Zob3N0X3VzZXIuaCB8ICAgNCArLQ0KPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDI2OSBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9s aWJydGVfdmhvc3Qvdmhvc3QuaCBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaCBpbmRleA0KPiA+ IDg4NGJlZmE4NS4uZDY3YmE4NDlhIDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfdmhvc3Qv dmhvc3QuaA0KPiA+ICsrKyBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaA0KPiA+IEBAIC0yODYs NiArMjg2LDEyIEBAIHN0cnVjdCBndWVzdF9wYWdlIHsNCj4gPiAgCXVpbnQ2NF90IHNpemU7DQo+ ID4gIH07DQo+ID4NCj4gPiArc3RydWN0IGluZmxpZ2h0X21lbV9pbmZvIHsNCj4gPiArCWludAkJ ZmQ7DQo+ID4gKwl2b2lkCQkqYWRkcjsNCj4gPiArCXVpbnQ2NF90CXNpemU7DQo+ID4gK307DQo+ ID4gKw0KPiA+ICAvKioNCj4gPiAgICogRGV2aWNlIHN0cnVjdHVyZSBjb250YWlucyBhbGwgY29u ZmlndXJhdGlvbiBpbmZvcm1hdGlvbiByZWxhdGluZw0KPiA+ICAgKiB0byB0aGUgZGV2aWNlLg0K PiA+IEBAIC0zMDMsNiArMzA5LDcgQEAgc3RydWN0IHZpcnRpb19uZXQgew0KPiA+ICAJdWludDMy X3QJCW5yX3ZyaW5nOw0KPiA+ICAJaW50CQkJZGVxdWV1ZV96ZXJvX2NvcHk7DQo+ID4gIAlzdHJ1 Y3Qgdmhvc3RfdmlydHF1ZXVlCSp2aXJ0cXVldWVbVkhPU1RfTUFYX1FVRVVFX1BBSVJTICogMl07 DQo+ID4gKwlzdHJ1Y3QgaW5mbGlnaHRfbWVtX2luZm8gKmluZmxpZ2h0X2luZm87DQo+ID4gICNk ZWZpbmUgSUZfTkFNRV9TWiAoUEFUSF9NQVggPiBJRk5BTVNJWiA/IFBBVEhfTUFYIDogSUZOQU1T SVopDQo+ID4gIAljaGFyCQkJaWZuYW1lW0lGX05BTUVfU1pdOw0KPiA+ICAJdWludDY0X3QJCWxv Z19zaXplOw0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYw0K PiA+IGIvbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmMgaW5kZXggYzllMjllY2U4Li42NjU4 MmEzMGYgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmMNCj4g PiArKysgYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYw0KPiA+IEBAIC0zNyw2ICszNywx MCBAQA0KPiA+ICAjaWZkZWYgUlRFX0xJQlJURV9WSE9TVF9QT1NUQ09QWQ0KPiA+ICAjaW5jbHVk ZSA8bGludXgvdXNlcmZhdWx0ZmQuaD4NCj4gPiAgI2VuZGlmDQo+ID4gKyNpZmRlZiBGX0FERF9T RUFMUyAvKiBpZiBmaWxlIHNlYWxpbmcgaXMgc3VwcG9ydGVkLCBzbyBpcyBtZW1mZCAqLw0KPiA+ ICsjaW5jbHVkZSA8bGludXgvbWVtZmQuaD4gI2RlZmluZSBNRU1GRF9TVVBQT1JURUQgI2VuZGlm DQo+ID4NCj4gPiAgI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4gPiAgI2luY2x1ZGUgPHJ0ZV9t YWxsb2MuaD4NCj4gPiBAQCAtNDksNiArNTMsMTUgQEANCj4gPiAgI2RlZmluZSBWSVJUSU9fTUlO X01UVSA2OA0KPiA+ICAjZGVmaW5lIFZJUlRJT19NQVhfTVRVIDY1NTM1DQo+ID4NCj4gPiArI2Rl ZmluZSBJTkZMSUdIVF9BTElHTk1FTlQJNjQNCj4gPiArI2RlZmluZSBJTkZMSUdIVF9WRVJTSU9O CTB4YWJjZA0KPiANCj4gV2h5IHRoZSB2ZXJzaW9uIGlzIDB4YWJjZD8gU2hvdWxkbid0IGl0IGJl IDE/DQo+IA0KPiBodHRwczovL2dpdC5xZW11Lm9yZy8/cD1xZW11LmdpdDthPWJsb2I7Zj1kb2Nz L2ludGVyb3Avdmhvc3QtDQo+IHVzZXIucnN0O2g9NzgyN2I3MTBhYTBhMjIzZjZmMTg0YjIyOWY0 YjVjZWQ2NDIwYjYzODtoYj1IRUFEI2w1NTENCj4gaHR0cHM6Ly9naXQucWVtdS5vcmcvP3A9cWVt dS5naXQ7YT1ibG9iO2Y9ZG9jcy9pbnRlcm9wL3Zob3N0LQ0KPiB1c2VyLnJzdDtoPTc4MjdiNzEw YWEwYTIyM2Y2ZjE4NGIyMjlmNGI1Y2VkNjQyMGI2Mzg7aGI9SEVBRCNsNjU4DQpZZWFoLCBJIGRp ZG4ndCBmaXggaXQuIFdpbGwgZml4IGl0IGluIG5leHQgdmVyc2lvbi4NCj4gDQo+ID4gKyNkZWZp bmUgVklSVFFVRVVFX01BWF9TSVpFCTEwMjQNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0xPRVhFQwkJ MHgwMDAxVQ0KPiA+ICsNCj4gPiArI2RlZmluZSBBTElHTl9ET1dOKG4sIG0pICgobikgLyAobSkg KiAobSkpICNkZWZpbmUgQUxJR05fVVAobiwgbSkNCj4gPiArQUxJR05fRE9XTigobikgKyAobSkg LSAxLCAobSkpDQo+ID4gKw0KPiA+ICBzdGF0aWMgY29uc3QgY2hhciAqdmhvc3RfbWVzc2FnZV9z dHJbVkhPU1RfVVNFUl9NQVhdID0gew0KPiA+ICAJW1ZIT1NUX1VTRVJfTk9ORV0gPSAiVkhPU1Rf VVNFUl9OT05FIiwNCj4gPiAgCVtWSE9TVF9VU0VSX0dFVF9GRUFUVVJFU10gPSAiVkhPU1RfVVNF Ul9HRVRfRkVBVFVSRVMiLCBAQA0KPiAtNzgsNg0KPiA+ICs5MSw4IEBAIHN0YXRpYyBjb25zdCBj aGFyICp2aG9zdF9tZXNzYWdlX3N0cltWSE9TVF9VU0VSX01BWF0gPSB7DQo+ID4gIAlbVkhPU1Rf VVNFUl9QT1NUQ09QWV9BRFZJU0VdICA9DQo+ICJWSE9TVF9VU0VSX1BPU1RDT1BZX0FEVklTRSIs DQo+ID4gIAlbVkhPU1RfVVNFUl9QT1NUQ09QWV9MSVNURU5dICA9DQo+ICJWSE9TVF9VU0VSX1BP U1RDT1BZX0xJU1RFTiIsDQo+ID4gIAlbVkhPU1RfVVNFUl9QT1NUQ09QWV9FTkRdICA9ICJWSE9T VF9VU0VSX1BPU1RDT1BZX0VORCIsDQo+ID4gKwlbVkhPU1RfVVNFUl9HRVRfSU5GTElHSFRfRkRd ID0gIlZIT1NUX1VTRVJfR0VUX0lORkxJR0hUX0ZEIiwNCj4gPiArCVtWSE9TVF9VU0VSX1NFVF9J TkZMSUdIVF9GRF0gPSAiVkhPU1RfVVNFUl9TRVRfSU5GTElHSFRfRkQiLA0KPiA+ICB9Ow0KPiA+ DQo+ID4gIHN0YXRpYyBpbnQgc2VuZF92aG9zdF9yZXBseShpbnQgc29ja2ZkLCBzdHJ1Y3QgVmhv c3RVc2VyTXNnICptc2cpOyBAQA0KPiA+IC0xNjAsNiArMTc1LDIxIEBAIHZob3N0X2JhY2tlbmRf Y2xlYW51cChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2KQ0KPiA+ICAJCWRldi0+bG9nX2FkZHIgPSAw Ow0KPiA+ICAJfQ0KPiA+DQo+ID4gKwlpZiAoZGV2LT5pbmZsaWdodF9pbmZvLT5hZGRyKSB7DQo+ ID4gKwkJbXVubWFwKGRldi0+aW5mbGlnaHRfaW5mby0+YWRkciwgZGV2LT5pbmZsaWdodF9pbmZv LT5zaXplKTsNCj4gPiArCQlkZXYtPmluZmxpZ2h0X2luZm8tPmFkZHIgPSBOVUxMOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWlmIChkZXYtPmluZmxpZ2h0X2luZm8tPmZkID4gMCkgew0KPiA+ICsJ CWNsb3NlKGRldi0+aW5mbGlnaHRfaW5mby0+ZmQpOw0KPiA+ICsJCWRldi0+aW5mbGlnaHRfaW5m by0+ZmQgPSAtMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZGV2LT5pbmZsaWdodF9pbmZv KSB7DQo+ID4gKwkJZnJlZShkZXYtPmluZmxpZ2h0X2luZm8pOw0KPiA+ICsJCWRldi0+aW5mbGln aHRfaW5mbyA9IE5VTEw7DQo+ID4gKwl9DQo+IA0KPiBZb3Ugc2hvdWxkIGNoZWNrIGRldi0+aW5m bGlnaHRfaW5mbyBmaXJzdCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4NCkdvdCBpdC4gVGhhbmtz Lg0KPiANCj4gPiArDQo+ID4gIAlpZiAoZGV2LT5zbGF2ZV9yZXFfZmQgPj0gMCkgew0KPiA+ICAJ CWNsb3NlKGRldi0+c2xhdmVfcmVxX2ZkKTsNCj4gPiAgCQlkZXYtPnNsYXZlX3JlcV9mZCA9IC0x Ow0KPiA+IEBAIC0xMTY1LDYgKzExOTUsMjMzIEBAIHZpcnRpb19pc19yZWFkeShzdHJ1Y3Qgdmly dGlvX25ldCAqZGV2KQ0KPiA+ICAJcmV0dXJuIDE7DQo+ID4gIH0NCj4gPg0KPiA+ICtzdGF0aWMg aW50DQo+ID4gK21lbV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdz KSB7ICNpZmRlZg0KPiA+ICtNRU1GRF9TVVBQT1JURUQNCj4gPiArCXJldHVybiBtZW1mZF9jcmVh dGUobmFtZSwgZmxhZ3MpOw0KPiA+ICsjZWxzZQ0KPiA+ICsJUlRFX0xPRyhFUlIsIFZIT1NUX0NP TkZJRywNCj4gPiArCQkiZG9lc24ndCBzdXBwb3J0IG1lbWZkLS1uYW1lOiVzIGFuZCBmbGFnOiV4 XG4iLA0KPiA+ICsJCW5hbWUsIGZsYWdzKTsNCj4gDQo+IFlvdSBwcm9iYWJseSBkb24ndCB3YW50 IHRvIGFsd2F5cyBwcmludCBhbiBlcnJvciB3aGVuIG1lbWZkIGlzbid0IGF2YWlsYWJsZS4NCkkg c2F3IGJlbG93IGVycm9yIG1lc3NhZ2UgZnJvbSBjaS9JbnRlbC1jb21waWxhdGlvbi4gDQouLi9s aWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYzoxMjAyOjI0OiBlcnJvcjogdW51c2VkIHBhcmFt ZXRlciDigJhuYW1l4oCZIFstV2Vycm9yPXVudXNlZC1wYXJhbWV0ZXJdDQogbWVtX2NyZWF0ZShj b25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpDQogICAgICAgICAgICAgICAgICAg ICAgICBefn5+DQouLi9saWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYzoxMjAyOjQzOiBlcnJv cjogdW51c2VkIHBhcmFtZXRlciDigJhmbGFnc+KAmSBbLVdlcnJvcj11bnVzZWQtcGFyYW1ldGVy XQ0KIG1lbV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKQ0KDQpU aGF0J3Mgd2h5IEkgYWRkIHRoaXMgcHJpbnQuU2hvdWxkIEkgaWdub3JlIHRoaXM/DQpUaGFua3Mu DQoNCj4gDQo+ID4gKwlyZXR1cm4gLTE7DQo+ID4gKyNlbmRpZg0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCAqDQo+ID4gK2luZmxpZ2h0X21lbV9hbGxvYyhjb25zdCBjaGFyICpuYW1l LCBzaXplX3Qgc2l6ZSwgaW50ICpmZCkgew0KPiA+ICsJdm9pZCAqcHRyOw0KPiA+ICsJaW50IG1m ZCA9IC0xOw0KPiA+ICsJY2hhciBmbmFtZVsyMF0gPSAiL3RtcC9tZW1mZC1YWFhYWFgiOw0KPiA+ ICsNCj4gPiArCSpmZCA9IC0xOw0KPiA+ICsJbWZkID0gbWVtX2NyZWF0ZShuYW1lLCBDTE9FWEVD KTsNCj4gPiArCWlmIChtZmQgIT0gLTEpIHsNCj4gPiArCQlpZiAoZnRydW5jYXRlKG1mZCwgc2l6 ZSkgPT0gLTEpIHsNCj4gPiArCQkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywNCj4gPiArCQkJ CSJmdHJ1bmNhdGUgZmFpbCBmb3IgYWxsb2MgaW5mbGlnaHQgYnVmZmVyXG4iKTsNCj4gPiArCQkJ Y2xvc2UobWZkKTsNCj4gPiArCQkJcmV0dXJuIE5VTEw7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNl IHsNCj4gPiArCQltZmQgPSBta3N0ZW1wKGZuYW1lKTsNCj4gPiArCQl1bmxpbmsoZm5hbWUpOw0K PiA+ICsNCj4gPiArCQlpZiAobWZkID09IC0xKSB7DQo+ID4gKwkJCVJURV9MT0coRVJSLCBWSE9T VF9DT05GSUcsDQo+ID4gKwkJCQkibWtzdGVtcCBmYWlsIGZvciBhbGxvYyBpbmZsaWdodCBidWZm ZXJcbiIpOw0KPiA+ICsJCQlyZXR1cm4gTlVMTDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlm IChmdHJ1bmNhdGUobWZkLCBzaXplKSA9PSAtMSkgew0KPiA+ICsJCQlSVEVfTE9HKEVSUiwgVkhP U1RfQ09ORklHLA0KPiA+ICsJCQkJImZ0cnVuY2F0ZSBmYWlsIGZvciBhbGxvYyBpbmZsaWdodCBi dWZmZXJcbiIpOw0KPiA+ICsJCQljbG9zZShtZmQpOw0KPiA+ICsJCQlyZXR1cm4gTlVMTDsNCj4g PiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcHRyID0gbW1hcCgwLCBzaXplLCBQUk9UX1JF QUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBtZmQsIDApOw0KPiA+ICsJaWYgKHB0ciA9PSBN QVBfRkFJTEVEKSB7DQo+ID4gKwkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywNCj4gPiArCQkJ Im1tYXAgZmFpbCBmb3IgYWxsb2MgaW5mbGlnaHQgYnVmZmVyXG4iKTsNCj4gPiArCQljbG9zZSht ZmQpOw0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCSpmZCA9IG1m ZDsNCj4gPiArCXJldHVybiBwdHI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1aW50MzJf dA0KPiA+ICtnZXRfcGVydnFfc2htX3NpemVfc3BsaXQodWludDE2X3QgcXVldWVfc2l6ZSkgew0K PiA+ICsJcmV0dXJuIEFMSUdOX1VQKHNpemVvZihzdHJ1Y3QgcnRlX3Zob3N0X2luZmxpZ2h0X2Rl c2Nfc3BsaXQpICoNCj4gPiArCQkJcXVldWVfc2l6ZSArIHNpemVvZih1aW50NjRfdCkgKyBzaXpl b2YodWludDE2X3QpICogNCwNCj4gPiArCQkJSU5GTElHSFRfQUxJR05NRU5UKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHVpbnQzMl90DQo+ID4gK2dldF9wZXJ2cV9zaG1fc2l6ZV9wYWNr ZWQodWludDE2X3QgcXVldWVfc2l6ZSkgew0KPiA+ICsJcmV0dXJuIEFMSUdOX1VQKHNpemVvZihz dHJ1Y3QgcnRlX3Zob3N0X2luZmxpZ2h0X2Rlc2NfcGFja2VkKSAqDQo+ID4gKwkJCXF1ZXVlX3Np emUgKyBzaXplb2YodWludDY0X3QpICsgc2l6ZW9mKHVpbnQxNl90KSAqIDYgKw0KPiA+ICsJCQlz aXplb2YodWludDhfdCkgKiA5LCBJTkZMSUdIVF9BTElHTk1FTlQpOyB9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50DQo+ID4gK3Zob3N0X3VzZXJfZ2V0X2luZmxpZ2h0X2ZkKHN0cnVjdCB2aXJ0aW9f bmV0ICoqcGRldiwNCj4gPiArCQkJCSAgICAgVmhvc3RVc2VyTXNnICptc2csDQo+ID4gKwkJCQkg ICAgIGludCBtYWluX2ZkIF9fcnRlX3VudXNlZCkNCj4gPiArew0KPiA+ICsJaW50IGZkLCBpLCBq Ow0KPiA+ICsJdWludDY0X3QgcGVydnFfaW5mbGlnaHRfc2l6ZSwgbW1hcF9zaXplOw0KPiA+ICsJ dm9pZCAqYWRkcjsNCj4gPiArCXVpbnQxNl90IG51bV9xdWV1ZXMsIHF1ZXVlX3NpemU7DQo+ID4g KwlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gKnBkZXY7DQo+ID4gKwlzdHJ1Y3QgcnRlX3Zob3N0 X2luZmxpZ2h0X2luZm9fcGFja2VkICppbmZsaWdodF9wYWNrZWQgPSBOVUxMOw0KPiA+ICsNCj4g PiArCWlmIChtc2ctPnNpemUgIT0gc2l6ZW9mKG1zZy0+cGF5bG9hZC5pbmZsaWdodCkpIHsNCj4g PiArCQlSVEVfTE9HKEVSUiwgVkhPU1RfQ09ORklHLA0KPiA+ICsJCQkiSW52YWxpZCBnZXRfaW5m bGlnaHRfZmQgbWVzc2FnZSBzaXplIGlzICVkIiwNCj4gPiArCQkJbXNnLT5zaXplKTsNCj4gPiAr CQlyZXR1cm4gUlRFX1ZIT1NUX01TR19SRVNVTFRfRVJSOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWRldi0+aW5mbGlnaHRfaW5mbyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGluZmxpZ2h0X21l bV9pbmZvKSk7DQo+IA0KPiBZb3UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGRldi0+aW5mbGlnaHRf aW5mbyBoYXMgYmVlbiBhbGxvY2F0ZWQsIG90aGVyd2lzZQ0KPiBtZW1vcnkgbWF5IGxlYWsuDQpZ ZWFoLCBUaGFua3MuIFdpbGwgZml4IGl0Lg0KPiANCj4gPiArCWlmICghZGV2LT5pbmZsaWdodF9p bmZvKSB7DQo+ID4gKwkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywNCj4gPiArCQkJIkZhaWxl ZCB0byBhbGxvYyBkZXYgaW5mbGlnaHQgYXJlYSIpOw0KPiA+ICsJCXJldHVybiBSVEVfVkhPU1Rf TVNHX1JFU1VMVF9FUlI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbnVtX3F1ZXVlcyA9IG1zZy0+ cGF5bG9hZC5pbmZsaWdodC5udW1fcXVldWVzOw0KPiA+ICsJcXVldWVfc2l6ZSA9IG1zZy0+cGF5 bG9hZC5pbmZsaWdodC5xdWV1ZV9zaXplOw0KPiA+ICsNCj4gPiArCVJURV9MT0coSU5GTywgVkhP U1RfQ09ORklHLCAiZ2V0X2luZmxpZ2h0X2ZkIG51bV9xdWV1ZXM6ICV1XG4iLA0KPiA+ICsJCW1z Zy0+cGF5bG9hZC5pbmZsaWdodC5udW1fcXVldWVzKTsNCj4gPiArCVJURV9MT0coSU5GTywgVkhP U1RfQ09ORklHLCAiZ2V0X2luZmxpZ2h0X2ZkIHF1ZXVlX3NpemU6ICV1XG4iLA0KPiA+ICsJCW1z Zy0+cGF5bG9hZC5pbmZsaWdodC5xdWV1ZV9zaXplKTsNCj4gPiArDQo+ID4gKwlpZiAodnFfaXNf cGFja2VkKGRldikpDQo+ID4gKwkJcGVydnFfaW5mbGlnaHRfc2l6ZSA9IGdldF9wZXJ2cV9zaG1f c2l6ZV9wYWNrZWQocXVldWVfc2l6ZSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJcGVydnFfaW5mbGln aHRfc2l6ZSA9IGdldF9wZXJ2cV9zaG1fc2l6ZV9zcGxpdChxdWV1ZV9zaXplKTsNCj4gPiArDQo+ ID4gKwltbWFwX3NpemUgPSBudW1fcXVldWVzICogcGVydnFfaW5mbGlnaHRfc2l6ZTsNCj4gPiAr CWFkZHIgPSBpbmZsaWdodF9tZW1fYWxsb2MoInZob3N0LWluZmxpZ2h0IiwgbW1hcF9zaXplLCAm ZmQpOw0KPiA+ICsJaWYgKCFhZGRyKSB7DQo+ID4gKwkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJ RywNCj4gPiArCQkJIkZhaWxlZCB0byBhbGxvYyB2aG9zdCBpbmZsaWdodCBhcmVhIik7DQo+ID4g KwkJCW1zZy0+cGF5bG9hZC5pbmZsaWdodC5tbWFwX3NpemUgPSAwOw0KPiA+ICsJCXJldHVybiBS VEVfVkhPU1RfTVNHX1JFU1VMVF9FUlI7DQo+ID4gKwl9DQo+ID4gKwltZW1zZXQoYWRkciwgMCwg bW1hcF9zaXplKTsNCj4gPiArDQo+ID4gKwlkZXYtPmluZmxpZ2h0X2luZm8tPmFkZHIgPSBhZGRy Ow0KPiA+ICsJZGV2LT5pbmZsaWdodF9pbmZvLT5zaXplID0gbXNnLT5wYXlsb2FkLmluZmxpZ2h0 Lm1tYXBfc2l6ZSA9DQo+IG1tYXBfc2l6ZTsNCj4gPiArCWRldi0+aW5mbGlnaHRfaW5mby0+ZmQg PSBtc2ctPmZkc1swXSA9IGZkOw0KPiA+ICsJbXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm1tYXBfb2Zm c2V0ID0gMDsNCj4gPiArCW1zZy0+ZmRfbnVtID0gMTsNCj4gPiArDQo+ID4gKwlpZiAodnFfaXNf cGFja2VkKGRldikpIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3F1ZXVlczsgaSsrKSB7 DQo+ID4gKwkJCWluZmxpZ2h0X3BhY2tlZCA9DQo+ID4gKwkJCQkoc3RydWN0IHJ0ZV92aG9zdF9p bmZsaWdodF9pbmZvX3BhY2tlZCAqKWFkZHI7DQo+ID4gKwkJCWluZmxpZ2h0X3BhY2tlZC0+dXNl ZF93cmFwX2NvdW50ZXIgPSAxOw0KPiA+ICsJCQlpbmZsaWdodF9wYWNrZWQtPm9sZF91c2VkX3dy YXBfY291bnRlciA9IDE7DQo+ID4gKwkJCWZvciAoaiA9IDA7IGogPCBxdWV1ZV9zaXplOyBqKysp DQo+ID4gKwkJCQlpbmZsaWdodF9wYWNrZWQtPmRlc2Nbal0ubmV4dCA9IGogKyAxOw0KPiA+ICsJ CQlhZGRyID0gKHZvaWQgKikoKGNoYXIgKilhZGRyICsgcGVydnFfaW5mbGlnaHRfc2l6ZSk7DQo+ ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCVJURV9MT0coSU5GTywgVkhPU1RfQ09ORklH LA0KPiA+ICsJCSJzZW5kIGluZmxpZ2h0IG1tYXBfc2l6ZTogJSJQUkl1NjQiXG4iLA0KPiA+ICsJ CW1zZy0+cGF5bG9hZC5pbmZsaWdodC5tbWFwX3NpemUpOw0KPiA+ICsJUlRFX0xPRyhJTkZPLCBW SE9TVF9DT05GSUcsDQo+ID4gKwkJInNlbmQgaW5mbGlnaHQgbW1hcF9vZmZzZXQ6ICUiUFJJdTY0 IlxuIiwNCj4gPiArCQltc2ctPnBheWxvYWQuaW5mbGlnaHQubW1hcF9vZmZzZXQpOw0KPiA+ICsJ UlRFX0xPRyhJTkZPLCBWSE9TVF9DT05GSUcsDQo+ID4gKwkJInNlbmQgaW5mbGlnaHQgZmQ6ICVk XG4iLCBtc2ctPmZkc1swXSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIFJURV9WSE9TVF9NU0dfUkVT VUxUX1JFUExZOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK3Zob3N0X3Vz ZXJfc2V0X2luZmxpZ2h0X2ZkKHN0cnVjdCB2aXJ0aW9fbmV0ICoqcGRldiwgVmhvc3RVc2VyTXNn ICptc2csDQo+ID4gKwkJaW50IG1haW5fZmQgX19ydGVfdW51c2VkKQ0KPiA+ICt7DQo+ID4gKwlp bnQgZmQ7DQo+ID4gKwl1aW50NjRfdCBtbWFwX3NpemUsIG1tYXBfb2Zmc2V0Ow0KPiA+ICsJdWlu dDE2X3QgbnVtX3F1ZXVlcywgcXVldWVfc2l6ZTsNCj4gPiArCXVpbnQzMl90IHBlcnZxX2luZmxp Z2h0X3NpemU7DQo+ID4gKwl2b2lkICphZGRyOw0KPiA+ICsJc3RydWN0IHZpcnRpb19uZXQgKmRl diA9ICpwZGV2Ow0KPiA+ICsNCj4gPiArCWZkID0gbXNnLT5mZHNbMF07DQo+ID4gKwlpZiAobXNn LT5zaXplICE9IHNpemVvZihtc2ctPnBheWxvYWQuaW5mbGlnaHQpIHx8IGZkIDwgMCkgew0KPiA+ ICsJCVJURV9MT0coRVJSLCBWSE9TVF9DT05GSUcsDQo+ID4gKwkJCSJJbnZhbGlkIHNldF9pbmZs aWdodF9mZCBtZXNzYWdlIHNpemUgaXMgJWQsZmQgaXMgJWRcbiIsDQo+ID4gKwkJCW1zZy0+c2l6 ZSwgZmQpOw0KPiA+ICsJCXJldHVybiBSVEVfVkhPU1RfTVNHX1JFU1VMVF9FUlI7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJbW1hcF9zaXplID0gbXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm1tYXBfc2l6 ZTsNCj4gPiArCW1tYXBfb2Zmc2V0ID0gbXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm1tYXBfb2Zmc2V0 Ow0KPiA+ICsJbnVtX3F1ZXVlcyA9IG1zZy0+cGF5bG9hZC5pbmZsaWdodC5udW1fcXVldWVzOw0K PiA+ICsJcXVldWVfc2l6ZSA9IG1zZy0+cGF5bG9hZC5pbmZsaWdodC5xdWV1ZV9zaXplOw0KPiA+ ICsNCj4gPiArCWlmICh2cV9pc19wYWNrZWQoZGV2KSkNCj4gPiArCQlwZXJ2cV9pbmZsaWdodF9z aXplID0gZ2V0X3BlcnZxX3NobV9zaXplX3BhY2tlZChxdWV1ZV9zaXplKTsNCj4gPiArCWVsc2UN Cj4gPiArCQlwZXJ2cV9pbmZsaWdodF9zaXplID0gZ2V0X3BlcnZxX3NobV9zaXplX3NwbGl0KHF1 ZXVlX3NpemUpOw0KPiA+ICsNCj4gPiArCVJURV9MT0coSU5GTywgVkhPU1RfQ09ORklHLA0KPiA+ ICsJCSJzZXRfaW5mbGlnaHRfZmQgbW1hcF9zaXplOiAlIlBSSXU2NCJcbiIsIG1tYXBfc2l6ZSk7 DQo+ID4gKwlSVEVfTE9HKElORk8sIFZIT1NUX0NPTkZJRywNCj4gPiArCQkic2V0X2luZmxpZ2h0 X2ZkIG1tYXBfb2Zmc2V0OiAlIlBSSXU2NCJcbiIsIG1tYXBfb2Zmc2V0KTsNCj4gPiArCVJURV9M T0coSU5GTywgVkhPU1RfQ09ORklHLA0KPiA+ICsJCSJzZXRfaW5mbGlnaHRfZmQgbnVtX3F1ZXVl czogJXVcbiIsIG51bV9xdWV1ZXMpOw0KPiA+ICsJUlRFX0xPRyhJTkZPLCBWSE9TVF9DT05GSUcs DQo+ID4gKwkJInNldF9pbmZsaWdodF9mZCBxdWV1ZV9zaXplOiAldVxuIiwgcXVldWVfc2l6ZSk7 DQo+ID4gKwlSVEVfTE9HKElORk8sIFZIT1NUX0NPTkZJRywNCj4gPiArCQkic2V0X2luZmxpZ2h0 X2ZkIGZkOiAlZFxuIiwgZmQpOw0KPiA+ICsJUlRFX0xPRyhJTkZPLCBWSE9TVF9DT05GSUcsDQo+ ID4gKwkJInNldF9pbmZsaWdodF9mZCBwZXJ2cV9pbmZsaWdodF9zaXplOiAlZFxuIiwNCj4gPiAr CQlwZXJ2cV9pbmZsaWdodF9zaXplKTsNCj4gPiArDQo+ID4gKwlpZiAoIWRldi0+aW5mbGlnaHRf aW5mbykgew0KPiA+ICsJCWRldi0+aW5mbGlnaHRfaW5mbyA9IGNhbGxvYygxLA0KPiA+ICsJCQkJ CSAgICBzaXplb2Yoc3RydWN0IGluZmxpZ2h0X21lbV9pbmZvKSk7DQo+ID4gKwkJaWYgKGRldi0+ aW5mbGlnaHRfaW5mbyA9PSBOVUxMKSB7DQo+ID4gKwkJCVJURV9MT0coRVJSLCBWSE9TVF9DT05G SUcsDQo+ID4gKwkJCQkiRmFpbGVkIHRvIGFsbG9jIGRldiBpbmZsaWdodCBhcmVhIik7DQo+ID4g KwkJCXJldHVybiBSVEVfVkhPU1RfTVNHX1JFU1VMVF9FUlI7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWlmIChkZXYtPmluZmxpZ2h0X2luZm8tPmFkZHIpDQo+ID4gKwkJbXVubWFw KGRldi0+aW5mbGlnaHRfaW5mby0+YWRkciwgZGV2LT5pbmZsaWdodF9pbmZvLT5zaXplKTsNCj4g DQo+IGRldi0+aW5mbGlnaHRfaW5mby0+YWRkciB3b24ndCBiZSB6ZXJvZWQgd2hlbiBiZWxvdyBt bWFwKCkgZmFpbHMuDQpJIHRoaW5rIGl0IHNob3VsZCBiZSB6ZXJvIHdoZW4gYmVsb3cgbW1hcCgp IGZhaWxzIGFzIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIGRpcmVjdGx5LCBzbw0KVGhlIGRl di0+aW5mbGlnaHRfaW5mby0+YWRkciB3b3VsZCBub3QgYmVlbiBzZXQuDQo+IA0KPiA+ICsNCj4g PiArCWFkZHIgPSBtbWFwKDAsIG1tYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQ X1NIQVJFRCwNCj4gPiArCQkJZmQsIG1tYXBfb2Zmc2V0KTsNCj4gPiArCWlmIChhZGRyID09IE1B UF9GQUlMRUQpIHsNCj4gPiArCQlSVEVfTE9HKEVSUiwgVkhPU1RfQ09ORklHLCAiZmFpbGVkIHRv IG1tYXAgc2hhcmUNCj4gbWVtb3J5LlxuIik7DQo+ID4gKwkJcmV0dXJuIFJURV9WSE9TVF9NU0df UkVTVUxUX0VSUjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZGV2LT5pbmZsaWdodF9pbmZv LT5mZCkNCj4gPiArCQljbG9zZShkZXYtPmluZmxpZ2h0X2luZm8tPmZkKTsNCj4gPiArDQo+ID4g KwlkZXYtPmluZmxpZ2h0X2luZm8tPmZkID0gZmQ7DQo+ID4gKwlkZXYtPmluZmxpZ2h0X2luZm8t PmFkZHIgPSBhZGRyOw0KPiA+ICsJZGV2LT5pbmZsaWdodF9pbmZvLT5zaXplID0gbW1hcF9zaXpl Ow0KPiA+ICsNCj4gPiArCXJldHVybiBSVEVfVkhPU1RfTVNHX1JFU1VMVF9PSzsNCj4gPiArfQ0K PiA+ICsNCj4gPiAgc3RhdGljIGludA0KPiA+ICB2aG9zdF91c2VyX3NldF92cmluZ19jYWxsKHN0 cnVjdCB2aXJ0aW9fbmV0ICoqcGRldiwgc3RydWN0IFZob3N0VXNlck1zZw0KPiAqbXNnLA0KPiA+ ICAJCQlpbnQgbWFpbl9mZCBfX3J0ZV91bnVzZWQpDQo+ID4gQEAgLTE3NjIsOSArMjAxOSwxMCBA QCBzdGF0aWMgdmhvc3RfbWVzc2FnZV9oYW5kbGVyX3QNCj4gdmhvc3RfbWVzc2FnZV9oYW5kbGVy c1tWSE9TVF9VU0VSX01BWF0gPSB7DQo+ID4gIAlbVkhPU1RfVVNFUl9QT1NUQ09QWV9BRFZJU0Vd ID0gdmhvc3RfdXNlcl9zZXRfcG9zdGNvcHlfYWR2aXNlLA0KPiA+ICAJW1ZIT1NUX1VTRVJfUE9T VENPUFlfTElTVEVOXSA9IHZob3N0X3VzZXJfc2V0X3Bvc3Rjb3B5X2xpc3RlbiwNCj4gPiAgCVtW SE9TVF9VU0VSX1BPU1RDT1BZX0VORF0gPSB2aG9zdF91c2VyX3Bvc3Rjb3B5X2VuZCwNCj4gPiAr CVtWSE9TVF9VU0VSX0dFVF9JTkZMSUdIVF9GRF0gPSB2aG9zdF91c2VyX2dldF9pbmZsaWdodF9m ZCwNCj4gPiArCVtWSE9TVF9VU0VSX1NFVF9JTkZMSUdIVF9GRF0gPSB2aG9zdF91c2VyX3NldF9p bmZsaWdodF9mZCwNCj4gPiAgfTsNCj4gPg0KPiA+IC0NCj4gPiAgLyogcmV0dXJuIGJ5dGVzIyBv ZiByZWFkIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgdmFsIG9uIGZhaWx1cmUuICovDQo+ID4gc3Rh dGljIGludCAgcmVhZF92aG9zdF9tZXNzYWdlKGludCBzb2NrZmQsIHN0cnVjdCBWaG9zdFVzZXJN c2cgKm1zZykNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmgN Cj4gPiBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5oIGluZGV4IDE3YTFkN2JjYS4uNjU2 M2Y3MzE1IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5oDQo+ ID4gKysrIGIvbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmgNCj4gPiBAQCAtNTQsNyArNTQs OSBAQCB0eXBlZGVmIGVudW0gVmhvc3RVc2VyUmVxdWVzdCB7DQo+ID4gIAlWSE9TVF9VU0VSX1BP U1RDT1BZX0FEVklTRSA9IDI4LA0KPiA+ICAJVkhPU1RfVVNFUl9QT1NUQ09QWV9MSVNURU4gPSAy OSwNCj4gPiAgCVZIT1NUX1VTRVJfUE9TVENPUFlfRU5EID0gMzAsDQo+ID4gLQlWSE9TVF9VU0VS X01BWCA9IDMxDQo+ID4gKwlWSE9TVF9VU0VSX0dFVF9JTkZMSUdIVF9GRCA9IDMxLA0KPiA+ICsJ VkhPU1RfVVNFUl9TRVRfSU5GTElHSFRfRkQgPSAzMiwNCj4gPiArCVZIT1NUX1VTRVJfTUFYID0g MzMNCj4gPiAgfSBWaG9zdFVzZXJSZXF1ZXN0Ow0KPiA+DQo+ID4gIHR5cGVkZWYgZW51bSBWaG9z dFVzZXJTbGF2ZVJlcXVlc3Qgew0KPiA+IC0tDQo+ID4gMi4xNy4yDQo+ID4NCg==