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 CABC3A0351; Mon, 10 Jan 2022 11:55:40 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 566AF4115D; Mon, 10 Jan 2022 11:55:40 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 2309D4013F for ; Mon, 10 Jan 2022 11:55:39 +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] mempool: optimize incomplete cache handling Date: Mon, 10 Jan 2022 11:55:37 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D86DF2@smartserver.smartshare.dk> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH] mempool: optimize incomplete cache handling Thread-Index: AdgF83dYUbbJLm5dQGC4QA1I8ufPPgAE8u1Q References: <98CBD80474FA8B44BF855DF32C47DC35D86DB2@smartserver.smartshare.dk> <20220106122345.82740-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35D86DE7@smartserver.smartshare.dk> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Jerin Jacob" , "Bruce Richardson" Cc: "Olivier Matz" , "Andrew Rybchenko" , "dpdk-dev" 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 K0JydWNlOyB5b3Ugc2VlbWVkIGludGVyZXN0ZWQgaW4gbXkgd29yayBpbiB0aGlzIGFyZWEuDQoN Cj4gRnJvbTogSmVyaW4gSmFjb2IgW21haWx0bzpqZXJpbmphY29ia0BnbWFpbC5jb21dDQo+IFNl bnQ6IE1vbmRheSwgMTAgSmFudWFyeSAyMDIyIDA4LjI3DQo+IA0KPiBPbiBGcmksIEphbiA3LCAy MDIyIGF0IDI6MTYgUE0gTW9ydGVuIEJyw7hydXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4N Cj4gd3JvdGU6DQo+ID4NCj4gPiA+IEZyb206IEplcmluIEphY29iIFttYWlsdG86amVyaW5qYWNv YmtAZ21haWwuY29tXQ0KPiA+ID4gU2VudDogVGh1cnNkYXksIDYgSmFudWFyeSAyMDIyIDE3LjU1 DQo+ID4gPg0KPiA+ID4gT24gVGh1LCBKYW4gNiwgMjAyMiBhdCA1OjU0IFBNIE1vcnRlbiBCcsO4 cnVwDQo+IDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+ID4gPiB3cm90ZToNCj4gPiA+ID4N Cj4gPiA+ID4gQSBmbHVzaCB0aHJlc2hvbGQgZm9yIHRoZSBtZW1wb29sIGNhY2hlIHdhcyBpbnRy b2R1Y2VkIGluIERQREsNCj4gPiA+IHZlcnNpb24NCj4gPiA+ID4gMS4zLCBidXQgcnRlX21lbXBv b2xfZG9fZ2VuZXJpY19nZXQoKSB3YXMgbm90IGNvbXBsZXRlbHkgdXBkYXRlZA0KPiBiYWNrDQo+ ID4gPiA+IHRoZW4uDQo+ID4gPiA+DQo+ID4gPiA+IFRoZSBpbmNvbXBsZXRlbmVzcyBkaWQgbm90 IGNhdXNlIGFueSBmdW5jdGlvbmFsIGJ1Z3MsIHNvIHRoaXMNCj4gcGF0Y2gNCj4gPiA+ID4gY291 bGQgYmUgY29uc2lkZXJlZCByZWZhY3RvcmluZyBmb3IgdGhlIHB1cnBvc2Ugb2YgY2xlYW5pbmcg dXAuDQo+ID4gPiA+DQo+ID4gPiA+IFRoaXMgcGF0Y2ggY29tcGxldGVzIHRoZSB1cGRhdGUgb2Yg cnRlX21lbXBvb2xfZG9fZ2VuZXJpY19nZXQoKQ0KPiBhcw0KPiA+ID4gPiBmb2xsb3dzOg0KPiA+ ID4gPg0KPiA+ID4gPiAxLiBBIGZldyBjb21tZW50cyB3ZXJlIG1hbHBsYWNlZCBvciBubyBsb25n ZXIgY29ycmVjdC4NCj4gPiA+ID4gU29tZSBjb21tZW50cyBoYXZlIGJlZW4gdXBkYXRlZC9hZGRl ZC9jb3JyZWN0ZWQuDQo+ID4gPiA+DQo+ID4gPiA+IDIuIFRoZSBjb2RlIHRoYXQgaW5pdGlhbGx5 IHNjcmVlbnMgdGhlIGNhY2hlIHJlcXVlc3Qgd2FzIG5vdA0KPiB1cGRhdGVkLg0KPiA+ID4gPiBU aGUgaW5pdGlhbCBzY3JlZW5pbmcgY29tcGFyZWQgdGhlIHJlcXVlc3QgbGVuZ3RoIHRvIHRoZSBj YWNoZQ0KPiBzaXplLA0KPiA+ID4gPiB3aGljaCB3YXMgY29ycmVjdCBiZWZvcmUsIGJ1dCBiZWNh bWUgaXJyZWxldmFudCB3aXRoIHRoZQ0KPiBpbnRyb2R1Y3Rpb24NCj4gPiA+IG9mDQo+ID4gPiA+ IHRoZSBmbHVzaCB0aHJlc2hvbGQuIEUuZy4gdGhlIGNhY2hlIGNhbiBob2xkIHVwIHRvIGZsdXNo dGhyZXNoDQo+ID4gPiBvYmplY3RzLA0KPiA+ID4gPiB3aGljaCBpcyBtb3JlIHRoYW4gaXRzIHNp emUsIHNvIHNvbWUgcmVxdWVzdHMgd2VyZSBub3Qgc2VydmVkDQo+IGZyb20NCj4gPiA+IHRoZQ0K PiA+ID4gPiBjYWNoZSwgZXZlbiB0aG91Z2ggdGhleSBjb3VsZCBiZS4NCj4gPiA+ID4gVGhlIGlu aXRpYWwgc2NyZWVuaW5nIGhhcyBub3cgYmVlbiBjb3JyZWN0ZWQgdG8gbWF0Y2ggdGhlIGluaXRp YWwNCj4gPiA+ID4gc2NyZWVuaW5nIGluIHJ0ZV9tZW1wb29sX2RvX2dlbmVyaWNfcHV0KCksIHdo aWNoIHZlcmlmaWVzIHRoYXQgYQ0KPiA+ID4gY2FjaGUNCj4gPiA+ID4gaXMgcHJlc2VudCwgYW5k IHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdCBkb2VzIG5vdCBvdmVyZmxvdw0KPiB0aGUN Cj4gPiA+ID4gbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGNhY2hlLg0KPiA+ID4gPg0KPiA+ID4g PiAzLiBUaGUgY29kZSBmbG93IGZvciBzYXRpc2Z5aW5nIHRoZSByZXF1ZXN0IGZyb20gdGhlIGNh Y2hlIHdhcw0KPiB3ZWlyZC4NCj4gPiA+ID4gVGhlIGxpa2VseSBjb2RlIHBhdGggd2hlcmUgdGhl IG9iamVjdHMgYXJlIHNpbXBseSBzZXJ2ZWQgZnJvbSB0aGUNCj4gPiA+IGNhY2hlDQo+ID4gPiA+ IHdhcyB0cmVhdGVkIGFzIHVubGlrZWx5OyBub3cgaXQgaXMgdHJlYXRlZCBhcyBsaWtlbHkuDQo+ ID4gPiA+IEFuZCBpbiB0aGUgY29kZSBwYXRoIHdoZXJlIHRoZSBjYWNoZSB3YXMgYmFja2ZpbGxl ZCBmaXJzdCwNCj4gbnVtYmVycw0KPiA+ID4gd2VyZQ0KPiA+ID4gPiBhZGRlZCBhbmQgc3VidHJh Y3RlZCBmcm9tIHRoZSBjYWNoZSBsZW5ndGg7IG5vdyB0aGlzIGNvZGUgcGF0aA0KPiBzaW1wbHkN Cj4gPiA+ID4gc2V0cyB0aGUgY2FjaGUgbGVuZ3RoIHRvIGl0cyBmaW5hbCB2YWx1ZS4NCj4gPiA+ ID4NCj4gPiA+ID4gNC4gVGhlIG9iamVjdHMgd2VyZSByZXR1cm5lZCBpbiByZXZlcnNlIG9yZGVy Lg0KPiA+ID4gPiBSZXR1cm5pbmcgdGhlIG9iamVjdHMgaW4gcmV2ZXJzZSBvcmRlciBpcyBub3Qg bmVjZXNzYXJ5LCBzbw0KPiA+ID4gcnRlX21lbWNweSgpDQo+ID4gPiA+IGlzIG5vdyB1c2VkIGlu c3RlYWQuDQo+ID4gPg0KPiA+ID4gSGF2ZSB5b3UgY2hlY2tlZCB0aGUgcGVyZm9ybWFuY2Ugd2l0 aCBuZXR3b3JrIHdvcmtsb2FkPw0KPiA+ID4gSU1PLCByZXZlcnNlIG9yZGVyIG1ha2VzIHNlbnNl KExJRk8gdnMgRklGTykuDQo+ID4gPiBUaGUgTElGTyBtYWtlcyB0aGUgY2FjaGUgd2FybSBhcyB0 aGUgc2FtZSBidWZmZXJzIGFyZSByZXVzZWQNCj4gPiA+IGZyZXF1ZW50bHkuDQo+ID4NCj4gPiBJ IGhhdmUgbm90IGRvbmUgYW55IHBlcmZvcm1hbmNlIHRlc3RpbmcuIFdlIHByb2JhYmx5IGFncmVl IHRoYXQgdGhlDQo+IG9ubHkgbWFqb3IgZGlmZmVyZW5jZSBsaWVzIGluIGhvdyB0aGUgb2JqZWN0 cyBhcmUgcmV0dXJuZWQuIEFuZCB3ZQ0KPiBwcm9iYWJseSBhbHNvIGFncmVlIHRoYXQgcnRlX21l bWNweSgpIGlzIGZhc3RlciB0aGFuIHRoZSBjb3B5IGxvb3AgaXQNCj4gcmVwbGFjZWQsIGVzcGVj aWFsbHkgd2hlbiBuIGlzIGNvbnN0YW50IGF0IGNvbXBpbGUgdGltZS4gU28gdGhlDQo+IHBlcmZv cm1hbmNlIGRpZmZlcmVuY2UgbWFpbmx5IGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLCB3aGlj aCBJIHdpbGwNCj4gZGlzY3VzcyBiZWxvdy4NCj4gPg0KPiA+IExldCdzIGZpcnN0IGNvbnNpZGVy IExJRk8gdnMuIEZJRk8uDQo+ID4NCj4gPiBUaGUga2V5IGFyZ3VtZW50IGZvciB0aGUgcnRlX21l bWNweSgpIG9wdGltaXphdGlvbiBpcyB0aGF0IHdlIGFyZQ0KPiBzdGlsbCBnZXR0aW5nIHRoZSBi dXJzdCBvZiBvYmplY3RzIGZyb20gdGhlIHRvcCBvZiB0aGUgc3RhY2sgKExJRk8pOw0KPiBvbmx5 IHRoZSBvcmRlciBvZiB0aGUgb2JqZWN0cyBpbnNpZGUgdGhlIGJ1cnN0IGlzIG5vdCByZXZlcnNl IGFueW1vcmUuDQo+ID4NCj4gPiBIZXJlIGlzIGFuIGV4YW1wbGU6DQo+ID4NCj4gPiBUaGUgY2Fj aGUgaW5pdGlhbGx5IGNvbnRhaW5zIDggb2JqZWN0czogMDEyMzQ1NjcuDQo+ID4NCj4gPiA4IG1v cmUgb2JqZWN0cyBhcmUgcHV0IGludG8gdGhlIGNhY2hlOiA4OUFCQ0RFRi4NCj4gPg0KPiA+IFRo ZSBjYWNoZSBub3cgaG9sZHM6IDAxMjM0NTY3ODlBQkNERUYuDQo+IA0KPiBBZ3JlZS4gSG93ZXZl ciBJIHRoaW5rLCBpdCBtYXkgbWF0dGVyIHdpdGggbGVzcyBzaXplZCBMMSBjYWNoZQ0KPiBtYWNo aW5lcyBhbmQgYnVyc3Qgc2l6ZSBpcyBtb3JlIHdoZXJlIGl0IHBsYXlzIHJvbGUgd2hhdCBjYW4g YmUgaW4gTDENCj4gd2l0aCB0aGUgc2NoZW1lLg0KDQpHb29kIHBvaW50ISBUaGlua2luZyBmdXJ0 aGVyIGFib3V0IGl0IG1hZGUgbWUgcmVhbGl6ZSB0aGF0IHRoZSBtZW1wb29sIGNhY2hlIGZsdXNo aW5nIGFsZ29yaXRobSBpcyBmdW5kYW1lbnRhbGx5IGZsYXdlZCwgYXQgbGVhc3QgaW4gc29tZSBj YXNlcy4uLg0KDQoNCnJ0ZV9tZW1wb29sX2RvX2dlbmVyaWNfcHV0KCk6DQoNCldoZW4gcHV0dGlu ZyBvYmplY3RzIGludG8gdGhlIGNhY2hlLCBhbmQgdGhlIGNhY2hlIGxlbmd0aCBleGNlZWRzIHRo ZSBmbHVzaCB0aHJlc2hvbGQsIHRoZSBtb3N0IHJlY2VudCAoaG90KSBvYmplY3RzIGFyZSBmbHVz aGVkIHRvIHRoZSByaW5nLCB0aHVzIGxlYXZpbmcgdGhlIGxlc3MgcmVjZW50IChjb2xkZXIpIG9i amVjdHMgYXQgdGhlIHRvcCBvZiB0aGUgY2FjaGUgc3RhY2suDQoNCkV4YW1wbGUgKGNhY2hlIHNp emU6IDgsIGZsdXNoIHRocmVzaG9sZDogMTIsIHB1dCA4IG9iamVjdHMpOg0KDQpJbml0aWFsIGNh Y2hlOiAwMTIzNDU2Nw0KDQpDYWNoZSBhZnRlciBwdXR0aW5nIChob3QpIG9iamVjdHMgODlBQkNE RUY6IDAxMjM0NTY3ODlBQkNERUYNCg0KQ2FjaGUgZmx1c2ggdGhyZXNob2xkIHJlYWNoZWQuIFJl c3VsdGluZyBjYWNoZTogMDEyMzQ1NjcNCg0KRnVydGhlcm1vcmUsIHRoZSBjYWNoZSBoYXMgdG8g YmUgY29tcGxldGVseSBkZXBsZXRlZCBiZWZvcmUgdGhlIGhvdCBvYmplY3RzIHRoYXQgd2VyZSBm bHVzaGVkIHRvIHRoZSByaW5nIGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUgcmluZyBhZ2Fpbi4NCg0K DQpydGVfbWVtcG9vbF9kb19nZW5lcmljX2dldCgpOg0KDQpXaGVuIGdldHRpbmcgb2JqZWN0cyBm cm9tIHRoZSBjYWNoZSwgYW5kIHRoZSBjYWNoZSBkb2VzIG5vdCBob2xkIHRoZSByZXF1ZXN0ZWQg bnVtYmVyIG9mIG9iamVjdHMsIHRoZSBjYWNoZSB3aWxsIGZpcnN0IGJlIGJhY2tmaWxsZWQgZnJv bSB0aGUgcmluZywgdGh1cyBwdXR0aW5nIGNvbGRlciBvYmplY3RzIGF0IHRoZSB0b3Agb2YgdGhl IGNhY2hlIHN0YWNrLCBhbmQgdGhlbiB0aGUgb2JqZWN0cyB3aWxsIGJlIHJldHVybmVkIGZyb20g dGhlIHRvcCBvZiB0aGUgY2FjaGUgc3RhY2ssIGkuZS4gdGhlIGJhY2tmaWxsZWQgKGNvbGQpIG9i amVjdHMgd2lsbCBiZSByZXR1cm5lZCBmaXJzdC4NCg0KRXhhbXBsZSAoY2FjaGUgc2l6ZTogOCwg Z2V0IDggb2JqZWN0cyk6DQoNCkluaXRpYWwgY2FjaGU6IDAxMjMgKGhvdCBvciBsdWtld2FybSkN Cg0KQ2FjaGUgYWZ0ZXIgYmFja2ZpbGwgdG8gc2l6ZSArIHJlcXVlc3RlZCBvYmplY3RzOiAwMTIz NDU2Nzg5QUJDREVGDQoNClJldHVybmVkIG9iamVjdHM6IEZFRENCQTk4IChjb2xkKQ0KDQpDYWNo ZSBhZnRlciByZXR1cm5pbmcgb2JqZWN0czogMDEyMzQ1Njc4IChpLmUuIGNvbGQgb2JqZWN0cyBh dCB0aGUgdG9wKQ0KDQoNCj4gDQo+IEkgd291bGQgc3VnZ2VzdCBzcGxpdHRpbmcgZWFjaCBwZXJm b3JtYW5jZSBpbXByb3ZlbWVudCBhcyBhIHNlcGFyYXRlDQo+IHBhdGNoIGZvciBiZXR0ZXIgdHJh Y2tpbmcgYW5kIHF1YW50aXR5IG9mIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4NCg0KV2l0 aCB0aGUgbmV3IHJlYWxpemF0aW9ucyBhYm92ZSwgSSBzaG91bGQgcmVjb25zaWRlciBteSBwYXRj aCBmcm9tIHNjcmF0Y2guDQoNCkkgaGF2ZSBhbHNvIGJlZW4gd29uZGVyaW5nIGlmIHRoZSBtZW1w b29sIGNhY2hlIHNpemUgcmVhbGx5IG5lZWRzIHRvIGJlIGNvbmZpZ3VyYWJsZSwgb3IgaXQgY291 bGQgYmUgZml4ZWQgc2l6ZT8NCg0KQnJ1Y2UgbWVudGlvbmVkIGluIGFub3RoZXIgdGhyZWFkICho dHRwOi8vaW5ib3guZHBkay5vcmcvZGV2L1lkdiUyRklNejhlSVJQU2d1WUBicmljaGEzLU1PQkwu Z2VyLmNvcnAuaW50ZWwuY29tL1QvI20wMmNhYmIyNTY1NWMwOGEwOTgwODg4ZGY4YzQxYWJhOWFj OGRkNmZmKSB0aGF0IHRoZSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNhY2hlIHNpemUg aXMgUlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUuDQoNCkkgd291bGQgZGFyZSB0byBzYXkgdGhh dCBpdCBwcm9iYWJseSBzdWZmaWNlcyB0byBjb25maWd1cmUgaWYgdGhlIG1lbXBvb2wgaGFzIGEg Y2FjaGUgb3Igbm90ISBUaGUgY2FjaGVfc2l6ZSBwYXJhbWV0ZXIgb2YgcnRlX21lbXBvb2xfY3Jl YXRlKCkgaXMgbm90IHJlc3BlY3RlZCAxOjEgYW55d2F5IChiZWNhdXNlIGVhY2ggcGVyLWxjb3Jl IGNhY2hlIG1heSBjb25zdW1lIHVwIHRvIDEuNSB4IGNhY2hlX3NpemUgb2JqZWN0cyBmcm9tIHRo ZSBtZW1wb29sIGJhY2tpbmcgc3RvcmUpLCBzbyB0aGUgY2FjaGVfc2l6ZSBwYXJhbWV0ZXIgY291 bGQgYmUgcGFyc2VkIGFzIG5vbi16ZXJvIHZzLiB6ZXJvIHRvIGRldGVybWluZSBpZiBhIGNhY2hl IGlzIHdhbnRlZCBvciBub3QuDQoNCj4gDQo+IEkgdGhpbmssIG1lbXBvb2wgcGVyZm9ybWFuY2Ug dGVzdCBhbmQgdHggb25seSBzdHJlYW0gbW9kZSBpbiB0ZXN0cG1kDQo+IGNhbiBxdWFudGlmeSBw YXRjaGVzLg0KPiANCj4gDQo+IA0KPiA+DQo+ID4gR2V0dGluZyA0IG9iamVjdHMgZnJvbSB0aGUg Y2FjaGUgZ2l2ZXMgdXMgQ0RFRiBpbnN0ZWFkIG9mIEZFREMsIGkuZS4NCj4gd2UgYXJlIHN0aWxs IGdldHRpbmcgdGhlIDQgb2JqZWN0cyBtb3N0IHJlY2VudGx5IHB1dCBpbnRvIHRoZSBjYWNoZS4N Cj4gPg0KPiA+IEZ1cnRoZXJtb3JlLCBpZiB0aGUgYXBwbGljYXRpb24gaXMgd29ya2luZyB3aXRo IGZpeGVkIHNpemUgYnVyc3RzLCBpdA0KPiB3aWxsIHVzdWFsbHkgcHV0IGFuZCBnZXQgdGhlIHNh bWUgc2l6ZSBidXJzdCwgaS5lLiBwdXQgdGhlIGJ1cnN0DQo+IDg5QUJDREVGIGludG8gdGhlIGNh Y2hlLCBhbmQgdGhlbiBnZXQgdGhlIGJ1cnN0IDg5QUJDREVGIGZyb20gdGhlIGNhY2hlDQo+IGFn YWluLg0KPiA+DQo+ID4NCj4gPiBIZXJlIGlzIGFuIGV4YW1wbGUgdW5mYXZvcmFibGUgc2NlbmFy aW86DQo+ID4NCj4gPiBUaGUgY2FjaGUgaW5pdGlhbGx5IGNvbnRhaW5zIDQgb2JqZWN0cywgd2hp Y2ggaGF2ZSBnb25lIGNvbGQ6IDAxMjMuDQo+ID4NCj4gPiA0IG1vcmUgb2JqZWN0cywgd2hpY2gg aGFwcGVuIHRvIGJlIGhvdCwgYXJlIHB1dCBpbnRvIHRoZSBjYWNoZTogNDU2Ny4NCj4gPg0KPiA+ IEdldHRpbmcgOCBvYmplY3RzIGZyb20gdGhlIGNhY2hlIGdpdmVzIHVzIDAxMjM0NTY3IGluc3Rl YWQgb2YNCj4gNzY1NDMyMTAuDQo+ID4NCj4gPiBOb3csIGlmIHRoZSBhcHBsaWNhdGlvbiBvbmx5 IHByb2Nlc3NlcyB0aGUgZmlyc3QgNCBvZiB0aGUgOCBvYmplY3RzDQo+IGluIHRoZSBidXJzdCwg aXQgd291bGQgaGF2ZSBiZW5lZml0dGVkIGZyb20gdGhvc2Ugb2JqZWN0cyBiZWluZyB0aGUgaG90 DQo+IDc2NTQgb2JqZWN0cyBpbnN0ZWFkIG9mIHRoZSBjb2xkIDAxMjMgb2JqZWN0cy4NCj4gPg0K PiA+IEhvd2V2ZXIsIEkgdGhpbmsgdGhhdCBtb3N0IGFwcGxpY2F0aW9ucyBwcm9jZXNzIHRoZSBj b21wbGV0ZSBidXJzdCwNCj4gc28gSSBkbyBjb25zaWRlciB0aGlzIHNjZW5hcmlvIHVubGlrZWx5 Lg0KPiA+DQo+ID4gU2ltaWxhcmx5LCBhIHBpcGVsaW5lZCBhcHBsaWNhdGlvbiBkb2Vzbid0IHBy b2Nlc3Mgb2JqZWN0cyBpbiByZXZlcnNlDQo+IG9yZGVyIGF0IGV2ZXJ5IG90aGVyIHN0ZXAgaW4g dGhlIHBpcGVsaW5lLCBldmVuIHRob3VnaCB0aGUgcHJldmlvdXMNCj4gc3RlcCBpbiB0aGUgcGlw ZWxpbmUgbW9zdCByZWNlbnRseSB0b3VjaGVkIHRoZSBsYXN0IG9iamVjdCBvZiB0aGUNCj4gYnVy c3QuDQo+ID4NCj4gPg0KPiA+IE15IG92ZXJhbGwgY29uY2x1c2lvbiB3YXMgdGhhdCB0aGUgYmVu ZWZpdCBvZiB1c2luZyBydGVfbWVtY3B5KCkNCj4gb3V0d2VpZ2hzIHRoZSBkaXNhZHZhbnRhZ2Ug b2YgdGhlIHVuZmF2b3JhYmxlIHNjZW5hcmlvLCBiZWNhdXNlIEkNCj4gY29uc2lkZXIgdGhlIHBy b2JhYmlsaXR5IG9mIHRoZSB1bmZhdm9yYWJsZSBzY2VuYXJpbyBvY2N1cnJpbmcgdmVyeQ0KPiBs b3cuIEJ1dCBhZ2FpbjogaXQgbWFpbmx5IGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLg0KPiA+ DQo+ID4gSWYgYW55b25lIGRpc2FncmVlcyB3aXRoIHRoZSByaXNrIGFuYWx5c2lzIGRlc2NyaWJl ZCBhYm92ZSwgSSB3aWxsDQo+IGhhcHBpbHkgcHJvdmlkZSBhIHZlcnNpb24gMiBvZiB0aGUgcGF0 Y2gsIHdoZXJlIHRoZSBvYmplY3RzIGFyZSBzdGlsbA0KPiByZXR1cm5lZCBpbiByZXZlcnNlIG9y ZGVyLiBBZnRlciBhbGwsIHRoZSBydGVfbWVtY3B5KCkgYmVuZWZpdCBpcw0KPiByZWxhdGl2ZWx5 IHNtYWxsIGNvbXBhcmVkIHRvIHRoZSBpbXBhY3QgaWYgdGhlIHVubGlrZWx5IHNjZW5hcmlvDQo+ IG9jY3Vycy4NCj4gPg0KDQo=