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 Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20445C4345F for ; Mon, 29 Apr 2024 07:24:49 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8CD76402A3; Mon, 29 Apr 2024 09:24:48 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id A312F4025C; Mon, 29 Apr 2024 09:24:46 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id 87366209B2; Mon, 29 Apr 2024 09:24:45 +0200 (CEST) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [RFC v2 5/6] eal: add atomic bit operations Date: Mon, 29 Apr 2024 09:24:42 +0200 X-MimeOLE: Produced By Microsoft Exchange V6.5 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F400@smartserver.smartshare.dk> In-Reply-To: <93464b2a-f454-4b4f-ba10-94701ee4ef72@lysator.liu.se> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [RFC v2 5/6] eal: add atomic bit operations Thread-Index: AdqZggUFQYspTKY2ShGV3RyOfLmCegAfJLbg References: <20240302135328.531940-2-mattias.ronnblom@ericsson.com> <20240425085853.97888-1-mattias.ronnblom@ericsson.com> <20240425085853.97888-6-mattias.ronnblom@ericsson.com> <98CBD80474FA8B44BF855DF32C47DC35E9F3E8@smartserver.smartshare.dk> <98CBD80474FA8B44BF855DF32C47DC35E9F3EF@smartserver.smartshare.dk> <7e469926-0c09-42a4-aa8f-8cde0578690b@lysator.liu.se> <98CBD80474FA8B44BF855DF32C47DC35E9F3F6@smartserver.smartshare.dk> <93464b2a-f454-4b4f-ba10-94701ee4ef72@lysator.liu.se> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , , "Tyler Retzlaff" Cc: "Heng Wang" , "Stephen Hemminger" , 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 PiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSBbbWFpbHRvOmhvZm9yc0BseXNhdG9yLmxpdS5zZV0N Cj4gU2VudDogU3VuZGF5LCAyOCBBcHJpbCAyMDI0IDE3LjM4DQo+IA0KPiBPbiAyMDI0LTA0LTI2 IDE0OjAwLCBNb3J0ZW4gQnLDuHJ1cCB3cm90ZToNCj4gPj4gRnJvbTogTWF0dGlhcyBSw7ZubmJs b20gW21haWx0bzpob2ZvcnNAbHlzYXRvci5saXUuc2VdDQo+ID4+IFNlbnQ6IEZyaWRheSwgMjYg QXByaWwgMjAyNCAxMS4zOQ0KPiA+Pg0KPiA+PiBPbiAyMDI0LTA0LTI1IDE4OjE4LCBNb3J0ZW4g QnLDuHJ1cCB3cm90ZToNCj4gPj4+PiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSBbbWFpbHRvOmhv Zm9yc0BseXNhdG9yLmxpdS5zZV0NCj4gPj4+PiBTZW50OiBUaHVyc2RheSwgMjUgQXByaWwgMjAy NCAxNi4zNg0KPiA+Pj4+DQo+ID4+Pj4gT24gMjAyNC0wNC0yNSAxMjoyNSwgTW9ydGVuIEJyw7hy dXAgd3JvdGU6DQo+ID4+Pj4+PiArI2RlZmluZSBydGVfYml0X2F0b21pY190ZXN0KGFkZHIsIG5y LCBtZW1vcnlfb3JkZXIpDQo+ID4+Pj4gCVwNCj4gPj4+Pj4+ICsJX0dlbmVyaWMoKGFkZHIpLAkJ CQkJCVwNCj4gPj4+Pj4+ICsJCSB1aW50MzJfdCAqOiBfX3J0ZV9iaXRfYXRvbWljX3Rlc3QzMiwJ CQlcDQo+ID4+Pj4+PiArCQkgdWludDY0X3QgKjogX19ydGVfYml0X2F0b21pY190ZXN0NjQpKGFk ZHIsIG5yLA0KPiA+Pj4+IG1lbW9yeV9vcmRlcikNCj4gPj4+Pj4NCj4gPj4+Pj4gSSB3b25kZXIg aWYgdGhlc2Ugc2hvdWxkIGhhdmUgUlRFX0FUT01JQyBxdWFsaWZpZXI6DQo+ID4+Pj4+DQo+ID4+ Pj4+ICsJCSBSVEVfQVRPTUlDKHVpbnQzMl90KSAqOiBfX3J0ZV9iaXRfYXRvbWljX3Rlc3QzMiwN Cj4gPj4+PiAJCVwNCj4gPj4+Pj4gKwkJIFJURV9BVE9NSUModWludDY0X3QpICo6IF9fcnRlX2Jp dF9hdG9taWNfdGVzdDY0KShhZGRyLA0KPiBuciwNCj4gPj4+PiBtZW1vcnlfb3JkZXIpDQo+ID4+ Pj4+DQo+ID4+Pj4+DQo+ID4+Pj4+PiArI2RlZmluZSBfX1JURV9HRU5fQklUX0FUT01JQ19URVNU KHNpemUpDQo+ID4+Pj4gCVwNCj4gPj4+Pj4+ICsJc3RhdGljIGlubGluZSBib29sCQkJCQkJXA0K PiA+Pj4+Pj4gKwlfX3J0ZV9iaXRfYXRvbWljX3Rlc3QgIyMgc2l6ZShjb25zdCB1aW50ICMjIHNp emUgIyMgX3QgKmFkZHIsDQo+ID4+Pj4gCVwNCj4gPj4+Pj4NCj4gPj4+Pj4gSSB3b25kZXIgaWYg dGhlICJhZGRyIiBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgUlRFX0FUT01JQyBxdWFsaWZpZXI6DQo+ ID4+Pj4+DQo+ID4+Pj4+ICsJX19ydGVfYml0X2F0b21pY190ZXN0ICMjIHNpemUoY29uc3QgUlRF X0FUT01JQyh1aW50ICMjIHNpemUgIyMNCj4gX3QpDQo+ID4+Pj4gKmFkZHIsCVwNCj4gPj4+Pj4N Cj4gPj4+Pj4gaW5zdGVhZCBvZiBjYXN0aW5nIGludG8gYV9hZGRyLg0KPiA+Pj4+Pg0KPiA+Pj4+ DQo+ID4+Pj4gQ2hlY2sgdGhlIGNvdmVyIGxldHRlciBmb3IgdGhlIHJhdGlvbmFsZSBmb3IgdGhl IGNhc3QuDQo+ID4+Pg0KPiA+Pj4gVGhhbmtzLCB0aGF0IGNsYXJpZmllcyBpdC4gVGhlbi4uLg0K PiA+Pj4gRm9yIHRoZSBzZXJpZXM6DQo+ID4+PiBBY2tlZC1ieTogTW9ydGVuIEJyw7hydXAgPG1i QHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gPj4+DQo+ID4+Pj4NCj4gPj4+PiBXaGVyZSBJJ20g YXQgbm93IGlzIHRoYXQgSSB0aGluayBDMTEgX0F0b21pYyBpcyByYXRoZXIgcG9vciBkZXNpZ24u IFRoZQ0KPiA+Pj4+IGFzc3VtcHRpb24gdGhhdCBhbiBvYmplY3Qgd2hpY2ggYWxsb3dzIGZvciBh dG9taWMgYWNjZXNzIGFsd2F5cyBzaG91bGQNCj4gPj4+PiByZXF1aXJlIGFsbCBvcGVyYXRpb25z IHVwb24gaXQgdG8gYmUgYXRvbWljLCByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGlzDQo+ID4+Pj4g aW4gaXRzIGxpZmV0aW1lLCBhbmQgd2hpY2ggdGhyZWFkIGlzIGFjY2Vzc2luZyBpdCwgZG9lcyBu b3QgaG9sZCwgaW4gdGhlDQo+ID4+Pj4gZ2VuZXJhbCBjYXNlLg0KPiA+Pj4NCj4gPj4+IEl0IG1p Z2h0IGJlIHNsb3csIGJ1dCBJIHN1cHBvc2UgdGhlIEMxMSBzdGFuZGFyZCBwcmlvcml0aXplcyBj b3JyZWN0bmVzcw0KPiA+PiBvdmVyIHBlcmZvcm1hbmNlLg0KPiA+Pj4NCj4gPj4NCj4gPj4gVGhh dCdzIGEgZmFsc2UgZGljaG90b215LCBpbiB0aGlzIGNhc2UuIFlvdSBjYW4gaGF2ZSBib3RoLg0K PiA+DQo+ID4gSW4gdGhlb3J5IHlvdSBzaG91bGRuJ3QgbmVlZCBub24tYXRvbWljIGFjY2VzcyB0 byBhdG9taWMgdmFyaWFibGVzLg0KPiA+IEluIHJlYWxpdHksIHdlIHdhbnQgaXQgYW55d2F5LCBi ZWNhdXNlIHJlYWwgQ1BVcyBhcmUgZmFzdGVyIGF0IG5vbi1hdG9taWMNCj4gb3BlcmF0aW9ucy4N Cj4gPg0KPiA+Pg0KPiA+Pj4gSXQgc2VlbXMgbG9ja3MgYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQg dG8gX0F0b21pYyB0eXBlcyBsYXJnZXIgdGhhbiB3aGF0DQo+IGlzDQo+ID4+IG5hdGl2ZWx5IHN1 cHBvcnRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLg0KPiA+Pj4gRS5nLiBNU1ZDIGFkZHMgbG9ja3Mg dG8gX0F0b21pYyB0eXBlcyBsYXJnZXIgdGhhbiA4IGJ5dGUuIFsxXQ0KPiA+Pj4NCj4gPj4+IFsx XTogaHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL2NwcGJsb2cvYzExLWF0b21pY3MtaW4t dmlzdWFsLXN0dWRpby0NCj4gPj4gMjAyMi12ZXJzaW9uLTE3LTUtcHJldmlldy0yLw0KPiA+Pj4N Cj4gPj4+Pg0KPiA+Pj4+IFRoZSBvbmx5IHJlYXNvbiBmb3IgX0F0b21pYyBiZWluZyBhcyBpdCBp cywgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgdG8NCj4gPj4+PiBhY2NvbW1vZGF0ZSBmb3IgSVNB cyB3aGljaCBkb2VzIG5vdCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBhdG9taWMgbWFjaGluZQ0KPiA+ Pj4+IGluc3RydWN0aW9ucywgYW5kIHRodXMgcmVxdWlyZSBhIGxvY2sgb3Igc29tZSBvdGhlciBk YXRhIGFzc29jaWF0ZWQgd2l0aA0KPiA+Pj4+IHRoZSBhY3R1YWwgdXNlci1kYXRhLWNhcnJ5aW5n IGJpdHMuIE5laXRoZXIgR0NDIG5vciBEUERLIHN1cHBvcnRzIGFueQ0KPiA+Pj4+IHN1Y2ggSVNB cywgdG8gbXkga25vd2xlZGdlLiBJIHN1c3BlY3QgbmVpdGhlciBuZXZlciB3aWxsLiBTbyB0aGUg Y2FzdA0KPiA+Pj4+IHdpbGwgY29udGludWUgdG8gd29yay4NCj4gPj4+DQo+ID4+PiBJIHRlbmQg dG8gYWdyZWUgd2l0aCB5b3Ugb24gdGhpcy4NCj4gPj4+DQo+ID4+PiBXZSBzaG91bGQgb2ZmaWNp YWxseSBkZWNpZGUgdGhhdCBEUERLIHRyZWF0cyBSVEVfQVRPTUlDIHR5cGVzIGFzIGEgdW5pb24N Cj4gb2YNCj4gPj4gX0F0b21pYyBhbmQgbm9uLWF0b21pYywgaS5lLiBvcGVyYXRpb25zIG9uIFJU RV9BVE9NSUMgdHlwZXMgY2FuIGJlIGJvdGgNCj4gYXRvbWljDQo+ID4+IGFuZCBub24tYXRvbWlj Lg0KPiA+Pj4NCj4gPj4NCj4gPj4gSSB0aGluayB0aGlzIGlzIGEgc3ViamVjdCB3aGljaCBuZWVk cyB0byBiZSBmdXJ0aGVyIGV4cGxvcmVkLg0KPiA+DQo+ID4gWWVzLiBJdCdzIGVhc2llciBleHBs b3JpbmcgYW5kIGRlY2lkaW5nIG5vdywgd2hlbiBvdXIgb3B0aW9ucyBhcmUgb3BlbiwgdGhhbg0K PiBhZnRlciB3ZSBoYXZlIGxvY2tlZCBkb3duIHRoZSBhZmZlY3RlZCBBUElzLg0KPiA+DQo+ID4+ DQo+ID4+IE9iamVjdHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYm90aCBhdG9taWNhbGx5IGFuZCBu b24tYXRvbWljYWxseSBzaG91bGQNCj4gPj4gYmUgd2l0aG91dCBfQXRvbWljLiBXaXRoIG15IGN1 cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGlzc3VlLCB0aGF0DQo+ID4+IHNlZW1zIGxpa2Ug dGhlIGJlc3Qgb3B0aW9uLg0KPiA+DQo+ID4gQWdyZWUuDQo+ID4NCj4gPiBUaGUgYWx0ZXJhdGl2 ZSBkZXNjcmliZWQgYmVsb3cgaXMgY2VydGFpbmx5IG5vIGdvb2QhDQo+ID4NCj4gPiBJdCB3b3Vs ZCBiZSBuaWNlIGlmIHRoZXkgd2VyZSBtYXJrZWQgYXMgc29tZXRpbWVzLWF0b21pYyBieSBhIHF1 YWxpZmllciBvcg0KPiBzcGVjaWFsIHR5cGUsIGxpa2UgcnRlX2JlMzJfdCBtYXJrcyB0aGUgbmV0 d29yayBieXRlIG9yZGVyIHZhcmlhbnQgb2YgYW4NCj4gdWludDMyX3QuDQo+ID4NCj4gPiBGdXJ0 aGVybW9yZSwgbGFyZ2UgYXRvbWljIG9iamVjdHMgbmVlZCB0aGUgX0F0b21pYyBxdWFsaWZpZXIg Zm9yIHRoZQ0KPiBjb21waWxlciB0byBhZGQgKGFuZCB1c2UpIHRoZSBhc3NvY2lhdGVkIGxvY2su DQo+IA0KPiBJZiB5b3UgaGF2ZSBsYXJnZXIgb2JqZWN0cyB0aGFuIHRoZSBJU0EgY2FuIGhhbmRs ZSwgeW91IHdvdWxkbid0IHdhbnQgdG8NCj4gbGVhdmUgdGhlIGNob2ljZSBvZiB0aGUgc3luY2hy b25pemF0aW9uIHByaW1pdGl2ZSB0byB1c2UgdG8gdGhlDQo+IGNvbXBpbGVyLiBJIGRvbid0IHNl ZSBob3cgaXQgY291bGQgcG9zc2libHkga25vdywgd2hpY2ggb25lIGlzIHRoZSBtb3N0DQo+IGFw cHJvcHJpYXRlLCBlc3BlY2lhbGx5IGluIGEgRFBESyBjb250ZXh0LiBJdCB3b3VsZCBmb3IgZXhh bXBsZSBuZWVkIHRvDQo+IGtub3cgaWYgdGhlIGNvbnRlbmRpbmcgdGhyZWFkcyBhcmUgbm9uLXBy ZWVtcHRhYmxlIG9yIG5vdC4NCj4gDQo+IEluIHNvbWUgc2l0dWF0aW9ucyBhIHNlcXVlbmNlIGxv Y2sgbWF5IHdlbGwgYmUgeW91ciBiZXN0IG9wdGlvbi4gV2lsbA0KPiB0aGUgY29tcGlsZXIgZ2Vu ZXJhdGUgb25lIGZvciB5b3U/DQo+IA0KPiBJZiAibG9jayIgbWVhbnMgc3RkOjptdXRleCwgaXQg d291bGQgYmUgYSBkaXNhc3RlciwgcGVyZm9ybWFuY2Utd2lzZS4NCg0KQ29uc2lkZXJpbmcgdGhh dCB0aGUgYXRvbWljIGZ1bmN0aW9ucywgZS5nLiBhdG9taWNfZmV0Y2hfYWRkKCksIHdpdGhvdXQg X2V4cGxpY2l0KC4uLiwgbWVtb3J5X29yZGVyKSBtZWFucyBtZW1vcnlfb3JkZXJfc2VxX2NzdCwg SSB0aGluayBpdCBkb2VzLiBUaGlzIG1ha2VzIGl0IHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk IHRvIHVzZSBhdG9taWMgdHlwZXMsIGF0IHRoZSBjb3N0IG9mIHBlcmZvcm1hbmNlLg0KDQpUaGVy ZSdzIGEgZ29vZCBkZXNjcmlwdGlvbiBoZXJlOg0KaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29t L3cvYy9sYW5ndWFnZS9hdG9taWMNCg0KTm90ZSB0aGF0IGFjY2Vzc2luZyBtZW1iZXJzIG9mIGFu IF9BdG9taWMgc3RydWN0L3VuaW9uIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4NCkZvciB0aG9zZSwg eW91IG5lZWQgdG8gaGF2ZSBhIG5vbi1hdG9taWMgdHlwZSwgdXNlZCBhcyAidmFsdWUiIHRvIHZv aWQgYXRvbWljX3N0b3JlKCB2b2xhdGlsZSBfQXRvbWljIHN0cnVjdCBteXR5cGUgKiBvYmosIGNv bnN0IHN0cnVjdCBteXR5cGUgdmFsdWUgKSwgYW5kIHJldHVybiB2YWx1ZSBmcm9tIGF0b21pY19s b2FkKCBjb25zdCB2b2xhdGlsZSBfQXRvbWljIHN0cnVjdCBteXR5cGUgKiBvYmogKS4NCg0KSW4g b3RoZXIgd29yZHMsIGZvciBzdHJ1Y3RzL3VuaW9ucywgX0F0b21pYyB2YXJpYWJsZXMgYXJlIG9u bHkgYWNjZXNzZWQgdGhyb3VnaCBhY2Nlc3NvciBmdW5jdGlvbnMgdGFraW5nIHBvaW50ZXJzIHRv IHRoZW0sIGFuZCB0aGVyZWJ5IHRyYW5zZm9ybWVkIGZyb20vdG8gdmFsdWVzIG9mIHNpbWlsYXIg bm9uLWF0b21pYyB0eXBlLg0KSSB0aGluayB0aGF0IHRoaXMgY29uY2VwdCBhbHNvIHN1cHBvcnRz IHlvdXIgc3VnZ2VzdGlvbiBhYm92ZTogT2JqZWN0cyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBib3Ro IGF0b21pY2FsbHkgYW5kIG5vbi1hdG9taWNhbGx5IHNob3VsZCBiZSB3aXRob3V0IF9BdG9taWMu DQoNCkJ1dCBJIHN0aWxsIHRoaW5rIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIG1hcmsgdGhl bSBhcyBzb21ldGltZXMtYXRvbWljLCBmb3Igc291cmNlIGNvZGUgcmVhZGFiaWxpdHkvcmV2aWV3 IHB1cnBvc2VzLg0KDQpFLmcuIHRoZSBtYnVmJ3MgcmVmY250IGZpZWxkIGlzIG9mIHRoZSB0eXBl IFJURV9BVE9NSUModWludDE2X3QpLiBJZiBpdCBpcyBub3Qgb25seSBhY2Nlc3NlZCB0aHJvdWdo IGF0b21pY18gYWNjZXNzb3IgZnVuY3Rpb25zLCBzaG91bGQgaXQgc3RpbGwgYmUgbWFya2VkIFJU RV9BVE9NSUMoKT8NCg0KSW4gdGhlIGZ1dHVyZSwgY29tcGlsZXJzIG1pZ2h0IHdhcm4gb3IgZXJy b3Igd2hlbiBhbiBfQXRvbWljIHZhcmlhYmxlIChvZiBhbnkgdHlwZSkgaXMgYmVpbmcgYWNjZXNz ZWQgZGlyZWN0bHkuDQpUaGUgZXh0cmVtZSBzb2x1dGlvbiB3b3VsZCBiZSBub3QgdG8gbWl4IGF0 b21pYyBhbmQgbm9uLWF0b21pYyBhY2Nlc3MgdG8gdmFyaWFibGVzLiBCdXQgdGhhdCBzZWVtcyB1 bnJlYWxpc3RpYyAoYXQgdGhpcyB0aW1lKS4NCg0KSWYgd2UgdHJ1bHkgd2FudCB0byBzdXBwb3J0 IEMxMSBhdG9taWNzLCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgYW5kIGZvbGxvdyB0aGUgY29uY2Vw dHMgaW4gdGhlIHN0YW5kYXJkLg0KDQo+IA0KPiA+IEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHNw ZWNpZnkgdGhhdCBzb21ldGltZXMtYXRvbWljIG9iamVjdHMgY2Fubm90IGJlDQo+IGxhcmdlciB0 aGFuIDggYnl0ZSwgd2hpY2ggaXMgd2hhdCBNU1ZDIGNhbiBoYW5kbGUgd2l0aG91dCBsb2NraW5n Lg0KPiA+DQo+ID4+DQo+ID4+IFlvdSBjb3VsZCB0dXJuIGl0IGFyb3VuZCBhcyB3ZWxsLCBhbmQg aGF2ZSBzdWNoIG1hcmtlZCBfQXRvbWljIGFuZCBoYXZlDQo+ID4+IGV4cGxpY2l0IGNhc3RzIHRv IHRoZWlyIG5vbi1fQXRvbWljIGNvdXNpbnMgd2hlbiBvcGVyYXRlZCB1cG9uIGJ5DQo+ID4+IG5v bi1hdG9taWMgZnVuY3Rpb25zLiBOb3Qgc3VyZSBob3cgcmVhbGlzdGljIHRoYXQgaXMsIHNpbmNl DQo+ID4+IG5vbi1hdG9taWNpdHkgaXMgdGhlIG5vcm0uIEFsbCBnZW5lcmljIHNlbGVjdGlvbi1i YXNlZCAiZnVuY3Rpb25zIiBtdXN0DQo+ID4+IHRha2UgdGhpcyBpbnRvIGFjY291bnQuDQo+ID4+ DQo+ID4+Pj4NCj4gPj4+Pj4+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IG5yLCBpbnQgbWVtb3J5 X29yZGVyKSBcDQo+ID4+Pj4+PiArCXsJCQkJCQkJCVwNCj4gPj4+Pj4+ICsJCVJURV9BU1NFUlQo bnIgPCBzaXplKTsJCQkJCVwNCj4gPj4+Pj4+ICsJCQkJCQkJCQlcDQo+ID4+Pj4+PiArCQljb25z dCBSVEVfQVRPTUlDKHVpbnQgIyMgc2l6ZSAjIyBfdCkgKmFfYWRkciA9CQlcDQo+ID4+Pj4+PiAr CQkJKGNvbnN0IFJURV9BVE9NSUModWludCAjIyBzaXplICMjIF90KSAqKWFkZHI7CVwNCj4gPj4+ Pj4+ICsJCXVpbnQgIyMgc2l6ZSAjIyBfdCBtYXNrID0gKHVpbnQgIyMgc2l6ZSAjIyBfdCkxIDw8 IG5yOw0KPiAJXA0KPiA+Pj4+Pj4gKwkJcmV0dXJuIHJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdChh X2FkZHIsIG1lbW9yeV9vcmRlcikgJg0KPiA+Pj4+IG1hc2s7IFwNCj4gPj4+Pj4+ICsJfQ0KPiA+ Pj4+Pg0KPiA+Pj4+Pg0KPiA+Pj4+PiBTaW1pbGFyIGNvbnNpZGVyYXRpb25zIHJlZ2FyZGluZyB2 b2xhdGlsZSBxdWFsaWZpZXIgZm9yIHRoZSAib25jZSINCj4gPj4+PiBvcGVyYXRpb25zLg0KPiA+ Pj4+Pg0K