From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D5D0D41C7E; Mon, 13 Feb 2023 00:15:55 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6F1BE40EE7; Mon, 13 Feb 2023 00:15:55 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id CBB3F40E09 for ; Mon, 13 Feb 2023 00:15:54 +0100 (CET) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH v8] mempool cache: add zero-copy get and put functions Date: Mon, 13 Feb 2023 00:15:49 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D87732@smartserver.smartshare.dk> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v8] mempool cache: add zero-copy get and put functions Thread-Index: AQHZPJcD9sYo5/g2OkuXWuiIQOI8vK7LuNhggAAtOjA= References: <98CBD80474FA8B44BF855DF32C47DC35D87488@smartserver.smartshare.dk> <20230209145833.129986-1-mb@smartsharesystems.com> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Honnappa Nagarahalli" , , , "Kamalakshitha Aligeri" , , , Cc: "nd" , , "nd" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org PiBGcm9tOiBIb25uYXBwYSBOYWdhcmFoYWxsaSBbbWFpbHRvOkhvbm5hcHBhLk5hZ2FyYWhhbGxp QGFybS5jb21dDQo+IFNlbnQ6IFN1bmRheSwgMTIgRmVicnVhcnkgMjAyMyAyMC41Nw0KPiANCj4g SGkgTW9ydGVuLA0KPiAJQXBvbG9naWVzIGZvciB0aGUgbGF0ZSBjb21tZW50cy4NCg0KQmV0dGVy IGxhdGUgdGhhbiBuZXZlci4gOi0pDQoNCj4gDQo+ID4gRnJvbTogTW9ydGVuIEJyw7hydXAgPG1i QHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gPiBTZW50OiBUaHVyc2RheSwgRmVicnVhcnkgOSwg MjAyMyA4OjU5IEFNDQo+ID4NCj4gPiBaZXJvLWNvcHkgYWNjZXNzIHRvIG1lbXBvb2wgY2FjaGVz IGlzIGJlbmVmaWNpYWwgZm9yIFBNRCBwZXJmb3JtYW5jZSwNCj4gYW5kDQo+ID4gbXVzdCBiZSBw cm92aWRlZCBieSB0aGUgbWVtcG9vbCBsaWJyYXJ5IHRvIGZpeCBbQnVnIDEwNTJdIHdpdGhvdXQg YQ0KPiA+IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uDQo+ID4NCj4gPiBbQnVnIDEwNTJdOiBodHRw czovL2J1Z3MuZHBkay5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTINCj4gPg0KPiA+IEJ1Z3ppbGxh IElEOiAxMDUyDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21h cnRzaGFyZXN5c3RlbXMuY29tPg0KPiA+IEFja2VkLWJ5OiBLb25zdGFudGluIEFuYW55ZXYgPGtv bnN0YW50aW4udi5hbmFueWV2QHlhbmRleC5ydT4NCj4gPg0KPiA+IHY4Og0KPiA+ICogQWN0dWFs bHkgaW5jbHVkZSB0aGUgcnRlX2Vycm5vIGhlYWRlciBmaWxlLg0KPiA+ICAgTm90ZSB0byBzZWxm OiBUaGUgY2hhbmdlcyBvbmx5IHRha2UgZWZmZWN0IG9uIHRoZSBkaXNrIGFmdGVyIHRoZQ0KPiBm aWxlIGluDQo+ID4gICB0aGUgdGV4dCBlZGl0b3IgaGFzIGJlZW4gc2F2ZWQuDQo+ID4gdjc6DQo+ ID4gKiBGaXggdHlwbyBpbiBmdW5jdGlvbiBkZXNjcmlwdGlvbi4gKGNoZWNrcGF0Y2gpDQo+ID4g KiBaZXJvLWNvcHkgZnVuY3Rpb25zIG1heSBzZXQgcnRlX2Vycm5vOyBpbmNsdWRlIHJ0ZV9lcnJu byBoZWFkZXINCj4gZmlsZS4NCj4gPiAgIChjaS9sb29uZ2FyY2gtY29tcGlsYXRpb24pDQo+ID4g djY6DQo+ID4gKiBJbXByb3ZlIGRlc2NyaXB0aW9uIG9mIHRoZSAnbicgcGFyYW1ldGVyIHRvIHRo ZSB6ZXJvLWNvcHkgZ2V0DQo+IGZ1bmN0aW9uLg0KPiA+ICAgKEtvbnN0YW50aW4sIEJydWNlKQ0K PiA+ICogVGhlIGNhY2hlcyB1c2VkIGZvciB6ZXJvLWNvcHkgbWF5IG5vdCBiZSB1c2VyLW93bmVk LCBzbyByZW1vdmUgdGhpcw0KPiB3b3JkDQo+ID4gICBmcm9tIHRoZSBmdW5jdGlvbiBkZXNjcmlw dGlvbnMuIChLYW1hbGFrc2hpdGhhKQ0KPiA+IHY1Og0KPiA+ICogQnVnZml4OiBDb21wYXJlIHpl cm8tY29weSBnZXQgcmVxdWVzdCB0byB0aGUgY2FjaGUgc2l6ZSBpbnN0ZWFkIG9mDQo+IHRoZQ0K PiA+ICAgZmx1c2ggdGhyZXNob2xkOyBvdGhlcndpc2UgcmVmaWxsIGNvdWxkIG92ZXJmbG93IHRo ZSBtZW1vcnkNCj4gYWxsb2NhdGVkDQo+ID4gICBmb3IgdGhlIGNhY2hlLiAoQW5kcmV3KQ0KPiA+ ICogU3BsaXQgdGhlIHplcm8tY29weSBwdXQgZnVuY3Rpb24gaW50byBhbiBpbnRlcm5hbCBmdW5j dGlvbiBkb2luZw0KPiB0aGUNCj4gPiAgIHdvcmssIGFuZCBhIHB1YmxpYyBmdW5jdGlvbiB3aXRo IHRyYWNlLg0KPiA+ICogQXZvaWQgY29kZSBkdXBsaWNhdGlvbiBieSByZXdyaXRpbmcgcnRlX21l bXBvb2xfZG9fZ2VuZXJpY19wdXQoKSB0bw0KPiB1c2UNCj4gPiAgIHRoZSBpbnRlcm5hbCB6ZXJv LWNvcHkgcHV0IGZ1bmN0aW9uLiAoQW5kcmV3KQ0KPiA+ICogQ29ycmVjdGVkIHRoZSByZXR1cm4g dHlwZSBvZiBydGVfbWVtcG9vbF9jYWNoZV96Y19wdXRfYnVsaygpIGZyb20NCj4gdm9pZA0KPiA+ ICoNCj4gPiAgIHRvIHZvaWQgKio7IGl0IHJldHVybnMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9m IG9iamVjdHMuDQo+ID4gKiBGaXggY29kaW5nIHN0eWxlOiBBZGQgbWlzc2luZyBjdXJseSBicmFj a2V0cy4gKEFuZHJldykNCj4gPiB2NDoNCj4gPiAqIEZpeCBjaGVja3BhdGNoIHdhcm5pbmdzLg0K PiA+IHYzOg0KPiA+ICogQnVnZml4OiBSZXNwZWN0IHRoZSBjYWNoZSBzaXplOyBjb21wYXJlIHRv IHRoZSBmbHVzaCB0aHJlc2hvbGQNCj4gaW5zdGVhZA0KPiA+ICAgb2YgUlRFX01FTVBPT0xfQ0FD SEVfTUFYX1NJWkUuDQo+ID4gKiBBZGRlZCAncmV3aW5kJyBmdW5jdGlvbiBmb3IgaW5jb21wbGV0 ZSAncHV0JyBvcGVyYXRpb25zLg0KPiAoS29uc3RhbnRpbikNCj4gPiAqIFJlcGxhY2UgUlRFX0FT U0VSVHMgd2l0aCBydW50aW1lIGNoZWNrcyBvZiB0aGUgcmVxdWVzdCBzaXplLg0KPiA+ICAgSW5z dGVhZCBvZiBmYWlsaW5nLCByZXR1cm4gTlVMTCBpZiB0aGUgcmVxdWVzdCBpcyB0b28gYmlnLg0K PiAoS29uc3RhbnRpbikNCj4gPiAqIE1vZGlmaWVkIGNvbXBhcmlzb24gdG8gcHJldmVudCBvdmVy ZmxvdyBpZiBuIGlzIHJlYWxseSBodWdlIGFuZCBsZW4NCj4gaXMNCj4gPiAgIG5vbi16ZXJvLg0K PiA+ICogVXBkYXRlZCB0aGUgY29tbWVudHMgaW4gdGhlIGNvZGUuDQo+ID4gdjI6DQo+ID4gKiBG aXggY2hlY2twYXRjaCB3YXJuaW5ncy4NCj4gPiAqIEZpeCBtaXNzaW5nIHJlZ2lzdHJhdGlvbiBv ZiB0cmFjZSBwb2ludHMuDQo+ID4gKiBUaGUgZnVuY3Rpb25zIGFyZSBpbmxpbmUsIHNvIHRoZXkg ZG9uJ3QgZ28gaW50byB0aGUgbWFwIGZpbGUuDQo+ID4gdjEgY2hhbmdlcyBmcm9tIHRoZSBSRkM6 DQo+ID4gKiBSZW1vdmVkIHJ1bi10aW1lIHBhcmFtZXRlciBjaGVja3MuIChIb25uYXBwYSkNCj4g PiAgIFRoaXMgaXMgYSBob3QgZmFzdCBwYXRoIGZ1bmN0aW9uOyByZXF1aXJpbmcgY29ycmVjdCBh cHBsaWNhdGlvbg0KPiA+ICAgYmVoYXZpb3VyLCBpLmUuIGZ1bmN0aW9uIHBhcmFtZXRlcnMgbXVz dCBiZSB2YWxpZC4NCj4gPiAqIEFkZGVkIFJURV9BU1NFUlQgZm9yIHBhcmFtZXRlcnMgaW5zdGVh ZC4NCj4gPiAgIENvZGUgZm9yIHRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgYnVpbHQgd2l0aCBS VEVfRU5BQkxFX0FTU0VSVC4NCj4gPiAqIFJlbW92ZWQgZmFsbGJhY2sgd2hlbiAnY2FjaGUnIHBh cmFtZXRlciBpcyBub3Qgc2V0LiAoSG9ubmFwcGEpDQo+ID4gKiBDaG9zZSB0aGUgc2ltcGxlIGdl dCBmdW5jdGlvbjsgaS5lLiBkbyBub3QgbW92ZSB0aGUgZXhpc3RpbmcNCj4gb2JqZWN0cyBpbg0K PiA+ICAgdGhlIGNhY2hlIHRvIHRoZSB0b3Agb2YgdGhlIG5ldyBzdGFjaywganVzdCBsZWF2ZSB0 aGVtIGF0IHRoZQ0KPiBib3R0b20uDQo+ID4gKiBSZW5hbWVkIHRoZSBmdW5jdGlvbnMuIE90aGVy IHN1Z2dlc3Rpb25zIGFyZSB3ZWxjb21lLCBvZiBjb3Vyc2UuIDstDQo+ICkNCj4gPiAqIFVwZGF0 ZWQgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0aW9ucy4NCj4gPiAqIEFkZGVkIHRoZSBmdW5jdGlvbnMg dG8gdHJhY2VfZnAgYW5kIHZlcnNpb24ubWFwLg0KPiA+IC0tLQ0KPiA+ICBsaWIvbWVtcG9vbC9t ZW1wb29sX3RyYWNlX3BvaW50cy5jIHwgICA5ICsrDQo+ID4gIGxpYi9tZW1wb29sL3J0ZV9tZW1w b29sLmggICAgICAgICAgfCAyMzggKysrKysrKysrKysrKysrKysrKysrKysrKy0tDQo+IC0tDQo+ ID4gIGxpYi9tZW1wb29sL3J0ZV9tZW1wb29sX3RyYWNlX2ZwLmggfCAgMjMgKysrDQo+ID4gIGxp Yi9tZW1wb29sL3ZlcnNpb24ubWFwICAgICAgICAgICAgfCAgIDUgKw0KPiA+ICA0IGZpbGVzIGNo YW5nZWQsIDI0NiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9saWIvbWVtcG9vbC9tZW1wb29sX3RyYWNlX3BvaW50cy5jDQo+ID4gYi9saWIvbWVt cG9vbC9tZW1wb29sX3RyYWNlX3BvaW50cy5jDQo+ID4gaW5kZXggNGFkNzZkZWIzNC4uODNkMzUz YTc2NCAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbWVtcG9vbC9tZW1wb29sX3RyYWNlX3BvaW50cy5j DQo+ID4gKysrIGIvbGliL21lbXBvb2wvbWVtcG9vbF90cmFjZV9wb2ludHMuYw0KPiA+IEBAIC03 NywzICs3NywxMiBAQA0KPiA+IFJURV9UUkFDRV9QT0lOVF9SRUdJU1RFUihydGVfbWVtcG9vbF90 cmFjZV9vcHNfZnJlZSwNCj4gPg0KPiA+ICBSVEVfVFJBQ0VfUE9JTlRfUkVHSVNURVIocnRlX21l bXBvb2xfdHJhY2Vfc2V0X29wc19ieW5hbWUsDQo+ID4gIAlsaWIubWVtcG9vbC5zZXQub3BzLmJ5 bmFtZSkNCj4gPiArDQo+ID4gK1JURV9UUkFDRV9QT0lOVF9SRUdJU1RFUihydGVfbWVtcG9vbF90 cmFjZV9jYWNoZV96Y19wdXRfYnVsaywNCj4gPiArCWxpYi5tZW1wb29sLmNhY2hlLnpjLnB1dC5i dWxrKQ0KPiA+ICsNCj4gPiArUlRFX1RSQUNFX1BPSU5UX1JFR0lTVEVSKHJ0ZV9tZW1wb29sX3Ry YWNlX2NhY2hlX3pjX3B1dF9yZXdpbmQsDQo+ID4gKwlsaWIubWVtcG9vbC5jYWNoZS56Yy5wdXQu cmV3aW5kKQ0KPiA+ICsNCj4gPiArUlRFX1RSQUNFX1BPSU5UX1JFR0lTVEVSKHJ0ZV9tZW1wb29s X3RyYWNlX2NhY2hlX3pjX2dldF9idWxrLA0KPiA+ICsJbGliLm1lbXBvb2wuY2FjaGUuemMuZ2V0 LmJ1bGspDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmggYi9saWIv bWVtcG9vbC9ydGVfbWVtcG9vbC5oDQo+ID4gaW5kZXggOWY1MzBkYjI0Yi4uNzExYTlkMWMxNiAx MDA2NDQNCj4gPiAtLS0gYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5oDQo+ID4gKysrIGIvbGli L21lbXBvb2wvcnRlX21lbXBvb2wuaA0KPiA+IEBAIC00Miw2ICs0Miw3IEBADQo+ID4gICNpbmNs dWRlIDxydGVfY29uZmlnLmg+DQo+ID4gICNpbmNsdWRlIDxydGVfc3BpbmxvY2suaD4NCj4gPiAg I2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX2Vycm5vLmg+DQo+ID4g ICNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gPiAgI2luY2x1ZGUgPHJ0ZV9icmFuY2hfcHJlZGlj dGlvbi5oPg0KPiA+ICAjaW5jbHVkZSA8cnRlX3JpbmcuaD4NCj4gPiBAQCAtMTM0Niw2ICsxMzQ3 LDE5OCBAQCBydGVfbWVtcG9vbF9jYWNoZV9mbHVzaChzdHJ1Y3QNCj4gPiBydGVfbWVtcG9vbF9j YWNoZSAqY2FjaGUsDQo+ID4gIAljYWNoZS0+bGVuID0gMDsNCj4gPiAgfQ0KPiA+DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogQGludGVybmFsIHVzZWQgYnkgcnRlX21lbXBvb2xfY2FjaGVfemNf cHV0X2J1bGsoKSBhbmQNCj4gPiBydGVfbWVtcG9vbF9kb19nZW5lcmljX3B1dCgpLg0KPiA+ICsg Kg0KPiA+ICsgKiBaZXJvLWNvcHkgcHV0IG9iamVjdHMgaW4gYSBtZW1wb29sIGNhY2hlIGJhY2tl ZCBieSB0aGUgc3BlY2lmaWVkDQo+ID4gbWVtcG9vbC4NCj4gPiArICoNCj4gPiArICogQHBhcmFt IGNhY2hlDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ICsg KiBAcGFyYW0gbXANCj4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIG1lbXBvb2wuDQo+ID4gKyAq IEBwYXJhbSBuDQo+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGJlIHB1dCBpbiB0 aGUgbWVtcG9vbCBjYWNoZS4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIFRoZSBwb2ludGVy IHRvIHdoZXJlIHRvIHB1dCB0aGUgb2JqZWN0cyBpbiB0aGUgbWVtcG9vbCBjYWNoZS4NCj4gPiAr ICogICBOVUxMIGlmIHRoZSByZXF1ZXN0IGl0c2VsZiBpcyB0b28gYmlnIGZvciB0aGUgY2FjaGUs IGkuZS4NCj4gPiArICogICBleGNlZWRzIHRoZSBjYWNoZSBmbHVzaCB0aHJlc2hvbGQuDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkICoqDQo+ID4gK19fcnRl X21lbXBvb2xfY2FjaGVfemNfcHV0X2J1bGsoc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICpjYWNo ZSwNCj4gPiArCQlzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLA0KPiA+ICsJCXVuc2lnbmVkIGludCBu KQ0KPiA+ICt7DQo+ID4gKwl2b2lkICoqY2FjaGVfb2JqczsNCj4gPiArDQo+ID4gKwlSVEVfQVNT RVJUKGNhY2hlICE9IE5VTEwpOw0KPiA+ICsJUlRFX0FTU0VSVChtcCAhPSBOVUxMKTsNCj4gPiAr DQo+ID4gKwlpZiAobiA8PSBjYWNoZS0+Zmx1c2h0aHJlc2ggLSBjYWNoZS0+bGVuKSB7DQo+ID4g KwkJLyoNCj4gPiArCQkgKiBUaGUgb2JqZWN0cyBjYW4gYmUgYWRkZWQgdG8gdGhlIGNhY2hlIHdp dGhvdXQgY3Jvc3NpbmcNCj4gdGhlDQo+ID4gKwkJICogZmx1c2ggdGhyZXNob2xkLg0KPiA+ICsJ CSAqLw0KPiA+ICsJCWNhY2hlX29ianMgPSAmY2FjaGUtPm9ianNbY2FjaGUtPmxlbl07DQo+ID4g KwkJY2FjaGUtPmxlbiArPSBuOw0KPiA+ICsJfSBlbHNlIGlmIChsaWtlbHkobiA8PSBjYWNoZS0+ Zmx1c2h0aHJlc2gpKSB7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBUaGUgcmVxdWVzdCBpdHNlbGYg Zml0cyBpbnRvIHRoZSBjYWNoZS4NCj4gPiArCQkgKiBCdXQgZmlyc3QsIHRoZSBjYWNoZSBtdXN0 IGJlIGZsdXNoZWQgdG8gdGhlIGJhY2tlbmQsIHNvDQo+ID4gKwkJICogYWRkaW5nIHRoZSBvYmpl Y3RzIGRvZXMgbm90IGNyb3NzIHRoZSBmbHVzaCB0aHJlc2hvbGQuDQo+ID4gKwkJICovDQo+ID4g KwkJY2FjaGVfb2JqcyA9ICZjYWNoZS0+b2Jqc1swXTsNCj4gPiArCQlydGVfbWVtcG9vbF9vcHNf ZW5xdWV1ZV9idWxrKG1wLCBjYWNoZV9vYmpzLCBjYWNoZS0NCj4gPiA+bGVuKTsNCj4gVGhpcyBp cyBhIGZsdXNoIG9mIHRoZSBjYWNoZS4gSXQgaXMgcHJvYmFibHkgd29ydGggaGF2aW5nIGEgY291 bnRlciBmb3INCj4gdGhpcy4NCg0KV2Ugc29tZXdoYXQgYWxyZWFkeSBkby4gVGhlIHB1dF9jb21t b25fcG9vbF9idWxrIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgaW4gcnRlX21lbXBvb2xfb3BzX2Vu cXVldWVfYnVsaygpIFsxXS4NCg0KWzFdOiBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9kcGRr L3YyMi4xMS4xL3NvdXJjZS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5oI0w4MjQNCg0KVGhpcyBj b3VudGVyIGRvZXNuJ3QgZXhhY3RseSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWNo ZSB3YXMgZmx1c2hlZCwgYmVjYXVzZSBpdCBhbHNvIGNvdW50cyBidWxrIHB1dCB0cmFuc2FjdGlv bnMgbm90IGdvaW5nIHZpYSB0aGUgY2FjaGUuDQoNClRoaW5raW5nIGZ1cnRoZXIgYWJvdXQgaXQs IEkgYWdyZWUgdGhhdCBzcGVjaWZpYyBjb3VudGVycyBmb3IgY2FjaGUgZmx1c2ggYW5kIGNhY2hl IHJlZmlsbCBjb3VsZCBiZSB1c2VmdWwsIGFuZCBzaG91bGQgYmUgYWRkZWQuIEhvd2V2ZXIsIGJl aW5nIHRoaXMgbGF0ZSwgSSB3b3VsZCBwcmVmZXIgcG9zdHBvbmluZyB0aGVtIGZvciBhIHNlcGFy YXRlIHBhdGNoLg0KDQo+IA0KPiA+ICsJCWNhY2hlLT5sZW4gPSBuOw0KPiA+ICsJfSBlbHNlIHsN Cj4gPiArCQkvKiBUaGUgcmVxdWVzdCBpdHNlbGYgaXMgdG9vIGJpZyBmb3IgdGhlIGNhY2hlLiAq Lw0KPiBUaGlzIGlzIHBvc3NpYmx5IGFuIGVycm9yIGNvbmRpdGlvbi4gRG8gd2UgbmVlZCB0byBz ZXQgcnRlX2Vycm5vPw0KDQpJIGNvbnNpZGVyZWQgdGhpcyB3aGVuIEkgd3JvdGUgdGhlIGZ1bmN0 aW9uLCBhbmQgY29uY2x1ZGVkIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IHJldHVybnMgTlVMTCBh cyBub3JtYWwgYmVoYXZpb3IsIG5ldmVyIGJlY2F1c2Ugb2YgZmFpbHVyZS4gRS5nLiBpZiBhIGNh Y2hlIGNhbiBvbmx5IGhvbGQgNCBtYnVmcywgYW5kIHRoZSBQTUQgdHJpZXMgdG8gc3RvcmUgMzIg bWJ1ZnMsIGl0IGlzIGNvcnJlY3QgYmVoYXZpb3Igb2YgdGhlIFBNRCB0byBjYWxsIHRoaXMgZnVu Y3Rpb24gYW5kIGxlYXJuIHRoYXQgdGhlIGNhY2hlIGlzIHRvbyBzbWFsbCBmb3IgZGlyZWN0IGFj Y2VzczsgaXQgaXMgbm90IGEgZmFpbHVyZSBpbiB0aGUgUE1EIG5vciBpbiB0aGUgY2FjaGUuDQoN CklmIGl0IGNvdWxkIHJldHVybiBOVUxMIGR1ZSB0byBhIHZhcmlldHkgb2YgcmVhc29ucywgSSB3 b3VsZCBwcm9iYWJseSBhZ3JlZSB0aGF0IHdlICpuZWVkKiB0byBzZXQgcnRlX2Vycm5vLCBzbyB0 aGUgYXBwbGljYXRpb24gY291bGQgZGV0ZXJtaW5lIHRoZSByZWFzb24uDQoNCkJ1dCBzaW5jZSBp dCBjYW4gb25seSByZXR1cm4gTlVMTCBkdWUgdG8gb25lIHJlYXNvbiAod2hpY2ggaW52b2x2ZXMg Y29ycmVjdCB1c2Ugb2YgdGhlIGZ1bmN0aW9uKSwgSSBjb252aW5jZWQgbXlzZWxmIHRoYXQgc2V0 dGluZyBydGVfZXJybm8gd291bGQgbm90IGNvbnZleSBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlv biB0aGFuIHRoZSBOVUxMIHJldHVybiB2YWx1ZSBpdHNlbGYsIGFuZCBiZSBhIHdhc3RlIG9mIHBl cmZvcm1hbmNlIGluIHRoZSBmYXN0IHBhdGguIElmIHlvdSBkaXNhZ3JlZSwgdGhlbiBpdCBzaG91 bGQgYmUgc2V0IHRvIEVJTlZBTCwgbGlrZSB3aGVuIHJ0ZV9tZW1wb29sX2NhY2hlX3pjX2dldF9i dWxrKCkgaXMgY2FsbGVkIHdpdGggYSByZXF1ZXN0IHRvbyBiaWcgZm9yIHRoZSBjYWNoZS4NCg0K PiBEbyB3ZSBuZWVkIGEgY291bnRlciBoZXJlIHRvIGNhcHR1cmUgdGhhdD8NCg0KR29vZCBxdWVz dGlvbi4gSSBkb24ndCBrbm93LiBJdCB3b3VsZCBpbmRpY2F0ZSB0aGF0IGEgY2FjaGUgaXMgc21h bGxlciB0aGFuIGV4cGVjdGVkIGJ5IHRoZSB1c2VycyB0cnlpbmcgdG8gYWNjZXNzIHRoZSBjYWNo ZSBkaXJlY3RseS4NCg0KQW5kIGlmIHdlIGFkZCBzdWNoIGEgY291bnRlciwgd2Ugc2hvdWxkIHBy b2JhYmx5IGFkZCBhIHNpbWlsYXIgY291bnRlciBmb3IgdGhlIGNhY2hlIGdldCBmdW5jdGlvbiB0 b28uDQoNCkJ1dCBhZ2FpbiwgYmVpbmcgdGhpcyBsYXRlLCBJIHdvdWxkIHBvc3Rwb25lIHN1Y2gg Y291bnRlcnMgZm9yIGEgc2VwYXJhdGUgcGF0Y2guIEFuZCB0aGV5IHNob3VsZCB0cmlnZ2VyIG1v cmUgZGlzY3Vzc2lvbnMgYWJvdXQgcmVxdWlyZWQvdXNlZnVsIGNvdW50ZXJzLg0KDQpGb3IgcmVm ZXJlbmNlLCB0aGUgcnRlX21lbXBvb2xfZGVidWdfc3RhdHMgaXMgY2FjaGUgYWxpZ25lZCBhbmQg Y3VycmVudGx5IGhvbGRzIDEyIDY0LWJpdCBjb3VudGVycywgc28gd2UgY2FuIGFkZCA0IG1vcmUg LSB3aGljaCBpcyBleGFjdGx5IHRoZSBudW1iZXIgZGlzY3Vzc2VkIGhlcmUgLSB3aXRob3V0IGNo YW5naW5nIGl0cyBzaXplLiBTbyB0aGlzIGlzIG5vdCBhIGJhcnJpZXIgdG8gYWRkaW5nIHRob3Nl IGNvdW50ZXJzLg0KDQpGdXJ0aGVybW9yZSwgSSBzdXBwb3NlIHRoYXQgd2Ugb25seSB3YW50IHRv IGluY3JlYXNlIHRoZSBjb3VudGVyIHdoZW4gdGhlIGNhbGxlZCB0aHJvdWdoIHRoZSBtZW1wb29s IGNhY2hlIEFQSSwgbm90IHdoZW4gY2FsbGVkIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgbWVtcG9v bCBBUEkuIFRoaXMgd291bGQgbWVhbiB0aGF0IHRoZSBvcmRpbmFyeSBtZW1wb29sIGZ1bmN0aW9u cyBjYW5ub3QgY2FsbCB0aGUgbWVtcG9vbCBjYWNoZSBmdW5jdGlvbnMsIG9yIHRoZSB3cm9uZyBj b3VudGVycyB3b3VsZCBpbmNyZWFzZS4gU28gYWRkaW5nIHN1Y2ggY291bnRlcnMgaXMgbm90IGNv bXBsZXRlbHkgdHJpdmlhbC4NCg0KPiANCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgcHV0X2J1bGssIDEp Ow0KPiA+ICsJUlRFX01FTVBPT0xfQ0FDSEVfU1RBVF9BREQoY2FjaGUsIHB1dF9vYmpzLCBuKTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gY2FjaGVfb2JqczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogVGhpcyBBUEkgbWF5 IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dA0KPiBwcmlvcg0KPiA+IG5vdGljZS4NCj4g PiArICoNCj4gPiArICogWmVyby1jb3B5IHB1dCBvYmplY3RzIGluIGEgbWVtcG9vbCBjYWNoZSBi YWNrZWQgYnkgdGhlIHNwZWNpZmllZA0KPiA+IG1lbXBvb2wuDQo+ID4gKyAqDQo+ID4gKyAqIEBw YXJhbSBjYWNoZQ0KPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgbWVtcG9vbCBjYWNoZS4NCj4g PiArICogQHBhcmFtIG1wDQo+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1wb29sLg0KPiA+ ICsgKiBAcGFyYW0gbg0KPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBiZSBwdXQg aW4gdGhlIG1lbXBvb2wgY2FjaGUuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBUaGUgcG9p bnRlciB0byB3aGVyZSB0byBwdXQgdGhlIG9iamVjdHMgaW4gdGhlIG1lbXBvb2wgY2FjaGUuDQo+ ID4gKyAqICAgTlVMTCBpZiB0aGUgcmVxdWVzdCBpdHNlbGYgaXMgdG9vIGJpZyBmb3IgdGhlIGNh Y2hlLCBpLmUuDQo+ID4gKyAqICAgZXhjZWVkcyB0aGUgY2FjaGUgZmx1c2ggdGhyZXNob2xkLg0K PiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdh eXNfaW5saW5lIHZvaWQgKioNCj4gPiArcnRlX21lbXBvb2xfY2FjaGVfemNfcHV0X2J1bGsoc3Ry dWN0IHJ0ZV9tZW1wb29sX2NhY2hlICpjYWNoZSwNCj4gPiArCQlzdHJ1Y3QgcnRlX21lbXBvb2wg Km1wLA0KPiA+ICsJCXVuc2lnbmVkIGludCBuKQ0KPiA+ICt7DQo+ID4gKwlSVEVfQVNTRVJUKGNh Y2hlICE9IE5VTEwpOw0KPiA+ICsJUlRFX0FTU0VSVChtcCAhPSBOVUxMKTsNCj4gPiArDQo+ID4g KwlydGVfbWVtcG9vbF90cmFjZV9jYWNoZV96Y19wdXRfYnVsayhjYWNoZSwgbXAsIG4pOw0KPiA+ ICsJcmV0dXJuIF9fcnRlX21lbXBvb2xfY2FjaGVfemNfcHV0X2J1bGsoY2FjaGUsIG1wLCBuKTsg fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1F TlRBTDogVGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dA0KPiBwcmlv cg0KPiA+IG5vdGljZS4NCj4gPiArICoNCj4gPiArICogWmVyby1jb3B5IHVuLXB1dCBvYmplY3Rz IGluIGEgbWVtcG9vbCBjYWNoZS4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIGNhY2hlDQo+ID4g KyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ICsgKiBAcGFyYW0gbg0K PiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBub3QgcHV0IGluIHRoZSBtZW1wb29sIGNh Y2hlIGFmdGVyDQo+IGNhbGxpbmcNCj4gPiArICogICBydGVfbWVtcG9vbF9jYWNoZV96Y19wdXRf YnVsaygpLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiArcnRlX21lbXBvb2xfY2FjaGVfemNfcHV0X3Jl d2luZChzdHJ1Y3QgcnRlX21lbXBvb2xfY2FjaGUgKmNhY2hlLA0KPiA+ICsJCXVuc2lnbmVkIGlu dCBuKQ0KPiA+ICt7DQo+ID4gKwlSVEVfQVNTRVJUKGNhY2hlICE9IE5VTEwpOw0KPiA+ICsJUlRF X0FTU0VSVChuIDw9IGNhY2hlLT5sZW4pOw0KPiA+ICsNCj4gPiArCXJ0ZV9tZW1wb29sX3RyYWNl X2NhY2hlX3pjX3B1dF9yZXdpbmQoY2FjaGUsIG4pOw0KPiA+ICsNCj4gPiArCWNhY2hlLT5sZW4g LT0gbjsNCj4gPiArDQo+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgcHV0 X29ianMsIChpbnQpLW4pOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4g PiArICogQGIgRVhQRVJJTUVOVEFMOiBUaGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVk LCB3aXRob3V0DQo+IHByaW9yDQo+ID4gbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBaZXJvLWNv cHkgZ2V0IG9iamVjdHMgZnJvbSBhIG1lbXBvb2wgY2FjaGUgYmFja2VkIGJ5IHRoZQ0KPiBzcGVj aWZpZWQNCj4gPiBtZW1wb29sLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gY2FjaGUNCj4gPiAr ICogICBBIHBvaW50ZXIgdG8gdGhlIG1lbXBvb2wgY2FjaGUuDQo+ID4gKyAqIEBwYXJhbSBtcA0K PiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgbWVtcG9vbC4NCj4gPiArICogQHBhcmFtIG4NCj4g PiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYmUgbWFkZSBhdmFpbGFibGUgZm9yIGV4 dHJhY3Rpb24gZnJvbQ0KPiB0aGUNCj4gPiBtZW1wb29sIGNhY2hlLg0KPiA+ICsgKiBAcmV0dXJu DQo+ID4gKyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIG9iamVjdHMgaW4gdGhlIG1lbXBvb2wgY2Fj aGUuDQo+ID4gKyAqICAgTlVMTCBvbiBlcnJvcjsgaS5lLiB0aGUgY2FjaGUgKyB0aGUgcG9vbCBk b2VzIG5vdCBjb250YWluICduJw0KPiBvYmplY3RzLg0KPiA+ICsgKiAgIFdpdGggcnRlX2Vycm5v IHNldCB0byB0aGUgZXJyb3IgY29kZSBvZiB0aGUgbWVtcG9vbCBkZXF1ZXVlDQo+IGZ1bmN0aW9u LA0KPiA+ICsgKiAgIG9yIEVJTlZBTCBpZiB0aGUgcmVxdWVzdCBpdHNlbGYgaXMgdG9vIGJpZyBm b3IgdGhlIGNhY2hlLCBpLmUuDQo+ID4gKyAqICAgZXhjZWVkcyB0aGUgY2FjaGUgZmx1c2ggdGhy ZXNob2xkLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgKg0KPiA+ICtydGVfbWVtcG9vbF9jYWNoZV96Y19nZXRf YnVsayhzdHJ1Y3QgcnRlX21lbXBvb2xfY2FjaGUgKmNhY2hlLA0KPiA+ICsJCXN0cnVjdCBydGVf bWVtcG9vbCAqbXAsDQo+ID4gKwkJdW5zaWduZWQgaW50IG4pDQo+ID4gK3sNCj4gPiArCXVuc2ln bmVkIGludCBsZW4sIHNpemU7DQo+ID4gKw0KPiA+ICsJUlRFX0FTU0VSVChjYWNoZSAhPSBOVUxM KTsNCj4gPiArCVJURV9BU1NFUlQobXAgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsJcnRlX21lbXBv b2xfdHJhY2VfY2FjaGVfemNfZ2V0X2J1bGsoY2FjaGUsIG1wLCBuKTsNCj4gPiArDQo+ID4gKwls ZW4gPSBjYWNoZS0+bGVuOw0KPiA+ICsJc2l6ZSA9IGNhY2hlLT5zaXplOw0KPiA+ICsNCj4gPiAr CWlmIChuIDw9IGxlbikgew0KPiA+ICsJCS8qIFRoZSByZXF1ZXN0IGNhbiBiZSBzYXRpc2ZpZWQg ZnJvbSB0aGUgY2FjaGUgYXMgaXMuICovDQo+ID4gKwkJbGVuIC09IG47DQo+ID4gKwl9IGVsc2Ug aWYgKGxpa2VseShuIDw9IHNpemUpKSB7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBUaGUgcmVxdWVz dCBpdHNlbGYgY2FuIGJlIHNhdGlzZmllZCBmcm9tIHRoZSBjYWNoZS4NCj4gPiArCQkgKiBCdXQg Zmlyc3QsIHRoZSBjYWNoZSBtdXN0IGJlIGZpbGxlZCBmcm9tIHRoZSBiYWNrZW5kOw0KPiA+ICsJ CSAqIGZldGNoIHNpemUgKyByZXF1ZXN0ZWQgLSBsZW4gb2JqZWN0cy4NCj4gPiArCQkgKi8NCj4g PiArCQlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCQlyZXQgPSBydGVfbWVtcG9vbF9vcHNfZGVxdWV1 ZV9idWxrKG1wLCAmY2FjaGUtDQo+ID4gPm9ianNbbGVuXSwgc2l6ZSArIG4gLSBsZW4pOw0KPiA+ ICsJCWlmICh1bmxpa2VseShyZXQgPCAwKSkgew0KPiA+ICsJCQkvKg0KPiA+ICsJCQkgKiBXZSBh cmUgYnVmZmVyIGNvbnN0cmFpbmVkLg0KPiA+ICsJCQkgKiBEbyBub3QgZmlsbCB0aGUgY2FjaGUs IGp1c3Qgc2F0aXNmeSB0aGUgcmVxdWVzdC4NCj4gPiArCQkJICovDQo+ID4gKwkJCXJldCA9IHJ0 ZV9tZW1wb29sX29wc19kZXF1ZXVlX2J1bGsobXAsICZjYWNoZS0NCj4gPiA+b2Jqc1tsZW5dLCBu IC0gbGVuKTsNCj4gPiArCQkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7DQo+ID4gKwkJCQkvKiBV bmFibGUgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdC4gKi8NCj4gPiArDQo+ID4gKwkJCQlSVEVfTUVN UE9PTF9TVEFUX0FERChtcCwNCj4gPiBnZXRfZmFpbF9idWxrLCAxKTsNCj4gPiArCQkJCVJURV9N RU1QT09MX1NUQVRfQUREKG1wLA0KPiA+IGdldF9mYWlsX29ianMsIG4pOw0KPiA+ICsNCj4gPiAr CQkJCXJ0ZV9lcnJubyA9IC1yZXQ7DQo+ID4gKwkJCQlyZXR1cm4gTlVMTDsNCj4gPiArCQkJfQ0K PiA+ICsNCj4gPiArCQkJbGVuID0gMDsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlsZW4gPSBz aXplOw0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJLyogVGhlIHJlcXVlc3QgaXRz ZWxmIGlzIHRvbyBiaWcgZm9yIHRoZSBjYWNoZS4gKi8NCj4gPiArCQlydGVfZXJybm8gPSBFSU5W QUw7DQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY2FjaGUtPmxl biA9IGxlbjsNCj4gPiArDQo+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwg Z2V0X3N1Y2Nlc3NfYnVsaywgMSk7DQo+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChj YWNoZSwgZ2V0X3N1Y2Nlc3Nfb2Jqcywgbik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuICZjYWNoZS0+ b2Jqc1tsZW5dOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKioNCj4gPiAgICogQGludGVybmFsIFB1 dCBzZXZlcmFsIG9iamVjdHMgYmFjayBpbiB0aGUgbWVtcG9vbDsgdXNlZA0KPiBpbnRlcm5hbGx5 Lg0KPiA+ICAgKiBAcGFyYW0gbXANCj4gPiBAQCAtMTM2NCwzMiArMTU1NywyNSBAQCBydGVfbWVt cG9vbF9kb19nZW5lcmljX3B1dChzdHJ1Y3QNCj4gPiBydGVfbWVtcG9vbCAqbXAsIHZvaWQgKiBj b25zdCAqb2JqX3RhYmxlLCAgew0KPiA+ICAJdm9pZCAqKmNhY2hlX29ianM7DQo+ID4NCj4gPiAt CS8qIE5vIGNhY2hlIHByb3ZpZGVkICovDQo+ID4gLQlpZiAodW5saWtlbHkoY2FjaGUgPT0gTlVM TCkpDQo+ID4gLQkJZ290byBkcml2ZXJfZW5xdWV1ZTsNCj4gPiArCS8qIE5vIGNhY2hlIHByb3Zp ZGVkPyAqLw0KPiA+ICsJaWYgKHVubGlrZWx5KGNhY2hlID09IE5VTEwpKSB7DQo+ID4gKwkJLyog SW5jcmVtZW50IHN0YXRzIG5vdywgYWRkaW5nIGluIG1lbXBvb2wgYWx3YXlzIHN1Y2NlZWRzLg0K PiA+ICovDQo+ID4gKwkJUlRFX01FTVBPT0xfU1RBVF9BREQobXAsIHB1dF9idWxrLCAxKTsNCj4g PiArCQlSVEVfTUVNUE9PTF9TVEFUX0FERChtcCwgcHV0X29ianMsIG4pOw0KPiA+DQo+ID4gLQkv KiBpbmNyZW1lbnQgc3RhdCBub3csIGFkZGluZyBpbiBtZW1wb29sIGFsd2F5cyBzdWNjZXNzICov DQo+ID4gLQlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgcHV0X2J1bGssIDEpOw0K PiA+IC0JUlRFX01FTVBPT0xfQ0FDSEVfU1RBVF9BREQoY2FjaGUsIHB1dF9vYmpzLCBuKTsNCj4g PiArCQlnb3RvIGRyaXZlcl9lbnF1ZXVlOw0KPiA+ICsJfQ0KPiA+DQo+ID4gLQkvKiBUaGUgcmVx dWVzdCBpdHNlbGYgaXMgdG9vIGJpZyBmb3IgdGhlIGNhY2hlICovDQo+ID4gLQlpZiAodW5saWtl bHkobiA+IGNhY2hlLT5mbHVzaHRocmVzaCkpDQo+ID4gLQkJZ290byBkcml2ZXJfZW5xdWV1ZV9z dGF0c19pbmNyZW1lbnRlZDsNCj4gPiArCS8qIFByZXBhcmUgdG8gYWRkIHRoZSBvYmplY3RzIHRv IHRoZSBjYWNoZS4gKi8NCj4gPiArCWNhY2hlX29ianMgPSBfX3J0ZV9tZW1wb29sX2NhY2hlX3pj X3B1dF9idWxrKGNhY2hlLCBtcCwgbik7DQo+ID4NCj4gPiAtCS8qDQo+ID4gLQkgKiBUaGUgY2Fj aGUgZm9sbG93cyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToNCj4gPiAtCSAqICAgMS4gSWYgdGhl IG9iamVjdHMgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjYWNoZSB3aXRob3V0DQo+IGNyb3NzaW5n DQo+ID4gLQkgKiAgICAgIHRoZSBmbHVzaCB0aHJlc2hvbGQsIGZsdXNoIHRoZSBjYWNoZSB0byB0 aGUgYmFja2VuZC4NCj4gPiAtCSAqICAgMi4gQWRkIHRoZSBvYmplY3RzIHRvIHRoZSBjYWNoZS4N Cj4gPiAtCSAqLw0KPiA+ICsJLyogVGhlIHJlcXVlc3QgaXRzZWxmIGlzIHRvbyBiaWcgZm9yIHRo ZSBjYWNoZT8gKi8NCj4gPiArCWlmICh1bmxpa2VseShjYWNoZV9vYmpzID09IE5VTEwpKSB7DQo+ ID4gKwkJLyogSW5jcmVtZW50IHN0YXRzIG5vdywgYWRkaW5nIGluIG1lbXBvb2wgYWx3YXlzIHN1 Y2NlZWRzLg0KPiA+ICovDQo+ID4gKwkJUlRFX01FTVBPT0xfQ0FDSEVfU1RBVF9BREQoY2FjaGUs IHB1dF9idWxrLCAxKTsNCj4gPiArCQlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwg cHV0X29ianMsIG4pOw0KPiA+DQo+ID4gLQlpZiAoY2FjaGUtPmxlbiArIG4gPD0gY2FjaGUtPmZs dXNodGhyZXNoKSB7DQo+ID4gLQkJY2FjaGVfb2JqcyA9ICZjYWNoZS0+b2Jqc1tjYWNoZS0+bGVu XTsNCj4gPiAtCQljYWNoZS0+bGVuICs9IG47DQo+ID4gLQl9IGVsc2Ugew0KPiA+IC0JCWNhY2hl X29ianMgPSAmY2FjaGUtPm9ianNbMF07DQo+ID4gLQkJcnRlX21lbXBvb2xfb3BzX2VucXVldWVf YnVsayhtcCwgY2FjaGVfb2JqcywgY2FjaGUtDQo+ID4gPmxlbik7DQo+ID4gLQkJY2FjaGUtPmxl biA9IG47DQo+ID4gKwkJZ290byBkcml2ZXJfZW5xdWV1ZTsNCj4gPiAgCX0NCj4gPg0KPiA+ICAJ LyogQWRkIHRoZSBvYmplY3RzIHRvIHRoZSBjYWNoZS4gKi8NCj4gPiBAQCAtMTM5OSwxMyArMTU4 NSw3IEBAIHJ0ZV9tZW1wb29sX2RvX2dlbmVyaWNfcHV0KHN0cnVjdA0KPiA+IHJ0ZV9tZW1wb29s ICptcCwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ID4NCj4gPiAgZHJpdmVyX2VucXVldWU6 DQo+ID4NCj4gPiAtCS8qIGluY3JlbWVudCBzdGF0IG5vdywgYWRkaW5nIGluIG1lbXBvb2wgYWx3 YXlzIHN1Y2Nlc3MgKi8NCj4gPiAtCVJURV9NRU1QT09MX1NUQVRfQUREKG1wLCBwdXRfYnVsaywg MSk7DQo+ID4gLQlSVEVfTUVNUE9PTF9TVEFUX0FERChtcCwgcHV0X29ianMsIG4pOw0KPiA+IC0N Cj4gPiAtZHJpdmVyX2VucXVldWVfc3RhdHNfaW5jcmVtZW50ZWQ6DQo+ID4gLQ0KPiA+IC0JLyog cHVzaCBvYmplY3RzIHRvIHRoZSBiYWNrZW5kICovDQo+ID4gKwkvKiBQdXNoIHRoZSBvYmplY3Rz IHRvIHRoZSBiYWNrZW5kLiAqLw0KPiA+ICAJcnRlX21lbXBvb2xfb3BzX2VucXVldWVfYnVsayht cCwgb2JqX3RhYmxlLCBuKTsgIH0NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9saWIvbWVtcG9vbC9y dGVfbWVtcG9vbF90cmFjZV9mcC5oDQo+ID4gYi9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbF90cmFj ZV9mcC5oDQo+ID4gaW5kZXggZWQwNjBlODg3Yy4uMTQ2NjY0NTdmNyAxMDA2NDQNCj4gPiAtLS0g YS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbF90cmFjZV9mcC5oDQo+ID4gKysrIGIvbGliL21lbXBv b2wvcnRlX21lbXBvb2xfdHJhY2VfZnAuaA0KPiA+IEBAIC0xMDksNiArMTA5LDI5IEBAIFJURV9U UkFDRV9QT0lOVF9GUCgNCj4gPiAgCXJ0ZV90cmFjZV9wb2ludF9lbWl0X3B0cihtZW1wb29sKTsN Cj4gPiAgKQ0KPiA+DQo+ID4gK1JURV9UUkFDRV9QT0lOVF9GUCgNCj4gPiArCXJ0ZV9tZW1wb29s X3RyYWNlX2NhY2hlX3pjX3B1dF9idWxrLA0KPiA+ICsJUlRFX1RSQUNFX1BPSU5UX0FSR1Modm9p ZCAqY2FjaGUsIHZvaWQgKm1lbXBvb2wsIHVpbnQzMl90DQo+ID4gbmJfb2JqcyksDQo+ID4gKwly dGVfdHJhY2VfcG9pbnRfZW1pdF9wdHIoY2FjaGUpOw0KPiA+ICsJcnRlX3RyYWNlX3BvaW50X2Vt aXRfcHRyKG1lbXBvb2wpOw0KPiA+ICsJcnRlX3RyYWNlX3BvaW50X2VtaXRfdTMyKG5iX29ianMp Ow0KPiA+ICspDQo+ID4gKw0KPiA+ICtSVEVfVFJBQ0VfUE9JTlRfRlAoDQo+ID4gKwlydGVfbWVt cG9vbF90cmFjZV9jYWNoZV96Y19wdXRfcmV3aW5kLA0KPiA+ICsJUlRFX1RSQUNFX1BPSU5UX0FS R1Modm9pZCAqY2FjaGUsIHVpbnQzMl90IG5iX29ianMpLA0KPiA+ICsJcnRlX3RyYWNlX3BvaW50 X2VtaXRfcHRyKGNhY2hlKTsNCj4gPiArCXJ0ZV90cmFjZV9wb2ludF9lbWl0X3UzMihuYl9vYmpz KTsNCj4gPiArKQ0KPiA+ICsNCj4gPiArUlRFX1RSQUNFX1BPSU5UX0ZQKA0KPiA+ICsJcnRlX21l bXBvb2xfdHJhY2VfY2FjaGVfemNfZ2V0X2J1bGssDQo+ID4gKwlSVEVfVFJBQ0VfUE9JTlRfQVJH Uyh2b2lkICpjYWNoZSwgdm9pZCAqbWVtcG9vbCwgdWludDMyX3QNCj4gPiBuYl9vYmpzKSwNCj4g PiArCXJ0ZV90cmFjZV9wb2ludF9lbWl0X3B0cihjYWNoZSk7DQo+ID4gKwlydGVfdHJhY2VfcG9p bnRfZW1pdF9wdHIobWVtcG9vbCk7DQo+ID4gKwlydGVfdHJhY2VfcG9pbnRfZW1pdF91MzIobmJf b2Jqcyk7DQo+ID4gKykNCj4gPiArDQo+ID4gICNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ICB9DQo+ ID4gICNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9saWIvbWVtcG9vbC92ZXJzaW9uLm1hcCBiL2xp Yi9tZW1wb29sL3ZlcnNpb24ubWFwIGluZGV4DQo+ID4gYjY3ZDdhYWNlNy4uMTM4M2FlNmRiMiAx MDA2NDQNCj4gPiAtLS0gYS9saWIvbWVtcG9vbC92ZXJzaW9uLm1hcA0KPiA+ICsrKyBiL2xpYi9t ZW1wb29sL3ZlcnNpb24ubWFwDQo+ID4gQEAgLTYzLDYgKzYzLDExIEBAIEVYUEVSSU1FTlRBTCB7 DQo+ID4gIAlfX3J0ZV9tZW1wb29sX3RyYWNlX29wc19hbGxvYzsNCj4gPiAgCV9fcnRlX21lbXBv b2xfdHJhY2Vfb3BzX2ZyZWU7DQo+ID4gIAlfX3J0ZV9tZW1wb29sX3RyYWNlX3NldF9vcHNfYnlu YW1lOw0KPiA+ICsNCj4gPiArCSMgYWRkZWQgaW4gMjMuMDMNCj4gPiArCV9fcnRlX21lbXBvb2xf dHJhY2VfY2FjaGVfemNfcHV0X2J1bGs7DQo+ID4gKwlfX3J0ZV9tZW1wb29sX3RyYWNlX2NhY2hl X3pjX3B1dF9yZXdpbmQ7DQo+ID4gKwlfX3J0ZV9tZW1wb29sX3RyYWNlX2NhY2hlX3pjX2dldF9i dWxrOw0KPiA+ICB9Ow0KPiA+DQo+ID4gIElOVEVSTkFMIHsNCj4gPiAtLQ0KPiA+IDIuMTcuMQ0K DQo=