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 E879E42553; Sat, 9 Sep 2023 13:23:12 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5F75F4029E; Sat, 9 Sep 2023 13:23:12 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id CF34740295 for ; Sat, 9 Sep 2023 13:23:10 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id C128020433; Sat, 9 Sep 2023 13:23:09 +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] random: use per lcore state Date: Sat, 9 Sep 2023 13:23:05 +0200 X-MimeOLE: Produced By Microsoft Exchange V6.5 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D87B91@smartserver.smartshare.dk> In-Reply-To: <4d00a500-a054-b11b-6135-49e4ef7965f2@lysator.liu.se> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [RFC] random: use per lcore state Thread-Index: Adni6TZu3cfXUFq9QbWI8pT8RHPVoQAIxjNA References: <20230906172013.169846-1-stephen@networkplumber.org> <741c94a4-65f9-c044-b3fc-3b8c28922d48@yandex.ru> <4d00a500-a054-b11b-6135-49e4ef7965f2@lysator.liu.se> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , "Konstantin Ananyev" , "Stephen Hemminger" , Cc: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= 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 Cj4gU2VudDogU2F0dXJkYXksIDkgU2VwdGVtYmVyIDIwMjMgMDguNDUNCj4gDQo+IE9uIDIwMjMt MDktMDkgMDI6MTMsIEtvbnN0YW50aW4gQW5hbnlldiB3cm90ZToNCj4gPiAwNi8wOS8yMDIzIDIx OjAyLCBNYXR0aWFzIFLDtm5uYmxvbSDQv9C40YjQtdGCOg0KPiA+PiBPbiAyMDIzLTA5LTA2IDE5 OjIwLCBTdGVwaGVuIEhlbW1pbmdlciB3cm90ZToNCj4gPj4+IE1vdmUgdGhlIHJhbmRvbSBudW1i ZXIgc3RhdGUgaW50byB0aHJlYWQgbG9jYWwgc3RvcmFnZS4NCj4gPj4NCj4gPj4gTWUgYW5kIE1v cnRlbiBkaXNjdXNzZWQgVExTIHZlcnN1cyBvdGhlciBhbHRlcm5hdGl2ZXMgaW4gc29tZSBvdGhl cg0KPiA+PiB0aHJlYWQuIFRoZSBkb3duc2lkZSBvZiBUTFMgdGhhdCBNb3J0ZW4gcG9pbnRlZCBv dXQsIGZyb20gd2hhdCBJDQo+ID4+IHJlY2FsbCwgaXMgdGhhdCBsYXp5IGluaXRpYWxpemF0aW9u IGlzICpyZXF1aXJlZCogKHNpbmNlIHRoZSBudW1iZXINCj4gb2YNCj4gPj4gdGhyZWFkcyBpcyBv cGVuLWVuZGVkKSwgYW5kIHRoZSBkYXRhIGVuZHMgdXAgaW4gbm9uLWh1Z2UgcGFnZSBtZW1vcnku DQo+ID4NCj4gPiBIbW0uLiBjb3JyZWN0IG1lIGlmIEkgYW0gd3JvbmcsIGJ1dCB3aXRoIGN1cnJl bnQgaW1wbGVtZW50YXRpb24sDQo+ID4gcmFuZCBzdGF0ZSBpcyBhbHNvIGluIG5vbi1odWdlIG1l bW9yeToNCj4gPiBzdGF0aWMgc3RydWN0IHJ0ZV9yYW5kX3N0YXRlIHJhbmRfc3RhdGVzW1JURV9N QVhfTENPUkUgKyAxXTsNCj4gPg0KPiANCj4gWWVzLiBUaGUgY3VycmVudCBwYXR0ZXJuIGlzIGNl cnRhaW5seSBub3QgcGVyZmVjdC4NCj4gDQo+ID4NCj4gPj4gSXQgd2FzIGFsc28gdW5jbGVhciB0 byBtZSB3aGF0IHRoZSBtZW1vcnkgZm9vdHByaW50IGltcGxpY2F0aW9ucw0KPiB3b3VsZA0KPiA+ PiBiZSxoIHdvdWxkIGxhcmdlIHBlci1sY29yZSBkYXRhIHN0cnVjdHVyZXMgYmUgcHV0IGluIFRM Uy4gTW9yZQ0KPiA+PiBzcGVjaWZpY2FsbHksIGlmIHRoZXkgd291bGQgYmUgZHVwbGljYXRlZCBh Y3Jvc3MgYWxsIHRocmVhZHMsIGV2ZW4NCj4gPj4gbm9uLWxjb3JlIHRocmVhZHMuDQo+ID4+DQo+ ID4+IE5vbmUgb2YgdGhlc2UgaXNzdWVzIGFmZmVjdCBydGVfcmFuZG9tLmMncyBwb3RlbnRpYWwg dXNhZ2Ugb2YgVExTDQo+ID4+IChleGNlcHQgbGF6eSBbcmUtXWluaXRpYWxpemF0aW9uIG1ha2Vz IHRoaW5ncyBtb3JlIGNvbXBsaWNhdGVkKS4NCj4gPj4NCj4gPj4gUHJlZmVyYWJseSwgdGhlcmUg c2hvdWxkIGJlIG9uZSBwYXR0ZXJuIHRoYXQgaXMgdXNhYmxlIGFjcm9zcyBhbGwgb3INCj4gPj4g YXQgbGVhc3QgbW9zdCBEUERLIG1vZHVsZXMgcmVxdWlyaW5nIHBlci1sY29yZSBzdGF0ZS4NCj4g Pj4NCj4gPj4+IFRoaXMgaGFzIGEgc2V2ZXJhbCBiZW5lZml0cy4NCj4gPj4+IMKgIC0gbm8gZmFs c2UgY2FjaGUgc2hhcmluZyBmcm9tIGNwdSBwcmVmZXRjaGluZw0KPiA+Pj4gwqAgLSBmaXhlcyBp bml0aWFsaXphdGlvbiBvZiByYW5kb20gc3RhdGUgZm9yIG5vbi1EUERLIHRocmVhZHMNCj4gPj4N Cj4gPj4gVGhpcyBzZWVtcyBsaWtlIGEgbm9uLXJlYXNvbiB0byBtZS4gVGhhdCBidWcgaXMgZWFz aWx5IGZpeGVkLCBpZiBpdA0KPiA+PiBpc24ndCBhbHJlYWR5Lg0KPiA+Pg0KPiA+Pj4gwqAgLSBm aXhlcyB1bnNhZmUgdXNhZ2Ugb2YgcmFuZG9tIHN0YXRlIGJ5IG5vbi1EUERLIHRocmVhZHMNCj4g Pj4+DQo+ID4+DQo+ID4+ICJNYWtlcyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gTVQgc2FmZSBm cm9tIGFsbCB0aHJlYWRzIChpbmNsdWRpbmcNCj4gPj4gdW5yZWdpc3RlcmVkIG5vbi1FQUwgdGhy ZWFkcykuIg0KPiA+Pg0KPiA+PiBXaXRoIGN1cnJlbnQgQVBJIHNlbWFudGljcyB5b3UgbWF5IHN0 aWxsIHJlZ2lzdGVyIGFuIG5vbi1FQUwgdGhyZWFkLA0KPiA+PiB0byBnZXQgTVQgc2FmZSBhY2Nl c3MgdG8gdGhpcyBBUEksIHNvIEkgZ3Vlc3MgaXQncyBtb3JlIGFib3V0IGJlaW5nDQo+ID4+IG1v cmUgY29udmVuaWVudCBhbmQgbGVzcyBlcnJvciBwcm9uZSwgdGhhbiBhbnl0aGluZyBlbHNlLg0K PiA+DQo+ID4gSSB1bmRlcnN0YW5kIHRoYXQgd2UgbmV2ZXIgZ3VhcmFudGVlZCBNVCBzYWZldHkg Zm9yIG5vbi1FQUwgdGhyZWFkcw0KPiBoZXJlLA0KPiANCj4gDQo+IFJlZ2lzdGVyZWQgbm9uLUVB TCB0aHJlYWRzIGhhdmUgYSBsY29yZSBpZCBhbmQgdGh1cyBtYXkgc2FmZWx5IGNhbGwNCj4gcnRl X3JhbmQoKS4gTXVsdGlwbGUgdW5yZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFkcyBtYXkgbm90IGRv IHNvLCBpbg0KPiBwYXJhbGxlbC4NCj4gDQo+IA0KPiA+IGJ1dCBhcyBhIHVzZXIgb2YgcnRlX3Jh bmQoKSAtIGl0IHdvdWxkIGJlIG11Y2ggbW9yZSBjb252ZW5pZW50LCBpZiBJDQo+IGNhbg0KPiA+ IHVzZSBpdA0KPiA+IGZyb20gYW55IHRocmVhZCB3dGhvdXQgd29ycmluZyBpcyBpdCBhIEVBTCB0 aHJlYWQgb3Igbm90Lg0KPiANCj4gU3VyZSwgZXNwZWNpYWxseSBpZiBpdCBjb21lcyBmb3IgZnJl ZS4gVGhlIGZvci1mcmVlIHNvbHV0aW9uIGhhcyB5ZXQgdG8NCj4gcmV2ZWFsIGl0c2VsZiB0aG91 Z2guDQoNCldlIGNvdWxkIG9mZmVyIHJlLWVudHJhbnQgZnVuY3Rpb24gdmFyaWFudHMgZm9yIG5v bi1FQUwgdGhyZWFkczoNCg0KdWludDY0X3QgcnRlX3JhbmRfcihzdHJ1Y3QgcnRlX3JhbmRfc3Rh dGUgKiBjb25zdCBzdGF0ZSk7DQp2b2lkIHJ0ZV9zcmFuZF9yKHN0cnVjdCBydGVfcmFuZF9zdGF0 ZSAqIGNvbnN0IHN0YXRlLCB1aW50NjRfdCBzZWVkKTsNCnVpbnQ2NF90IHJ0ZV9yYW5kX21heF9y KHN0cnVjdCBydGVfcmFuZF9zdGF0ZSAqIGNvbnN0IHN0YXRlLCB1aW50NjRfdCB1cHBlcl9ib3Vu ZCk7DQpkb3VibGUgcnRlX2RyYW5kX3Ioc3RydWN0IHJ0ZV9yYW5kX3N0YXRlICogY29uc3Qgc3Rh dGUsIHZvaWQpOw0KDQpGb3IgdGhpcyB0byB3b3JrLCB3ZSB3b3VsZCBoYXZlIHRvIG1ha2Ugc3Ry dWN0IHJ0ZV9yYW5kX3N0YXRlIHB1YmxpYywgYW5kIHRoZSBhcHBsaWNhdGlvbiB3b3VsZCBuZWVk IHRvIGFsbG9jYXRlIGl0LiAoQXQgbGVhc3Qgb25lIGluc3RhbmNlIHBlciB0aHJlYWQgdGhhdCB1 c2VzIGl0LCBvYnZpb3VzbHkuKQ0KDQo+IA0KPiA+DQo+ID4gQWJvdXQgVGxTIHVzYWdlIGFuZCBy ZS1zZWVkaW5nIC0gY2FuIHdlIHVzZSBzb21lIHNvcnQgb2YgbWlkZGxlLQ0KPiBncm91bmQ6DQo+ ID4gZXh0ZW5kIHJ0ZV9yYW5kX3N0YXRlIHdpdGggc29tZSBnZW4tY291bnRlci4NCj4gPiBNYWtl IGEgJ21hc3RlcicgY29weSBvZiBydGVfcmFuZF9zdGF0ZSB0aGF0IHdpbGwgYmUgdXBkYXRlZCBi eQ0KPiBydGVfc3JhbmQoKSwNCj4gPiBhbmQgVExTIGNvcGllcyBvZiBydGVfcmFuZF9zdGF0ZSwg c28gcnRlX3JhbmQoKSBjYW4gZmlzdCBjb21wYXJlDQo+ID4gaXRzIGdlbi1jb3VudGVyIHZhbHVl IHdpdGggbWFzdGVyIGNvcHkgdG8gZGVjaWRlLA0KPiA+IGRvZXMgaXQgbmVlZCB0byBjb3B5IG5l dyBzdGF0ZSBmcm9tIG1hc3RlciBvciBub3QuDQo+ID4NCj4gDQo+IENhbGxpbmcgdGhyZWFkcyBz aG91bGRuJ3QgYWxsIHByb2R1Y2UgdGhlIHNhbWUgc2VxdWVuY2UuIFRoYXQgd291bGQgYmUNCj4g c2lsbHkgYW5kIG5vdCB2ZXJ5IHJhbmRvbS4gVGhlIGdlbmVyYXRpb24gbnVtYmVyIHNob3VsZCBi ZSB0aWVkIHRvIHRoZQ0KPiBzZWVkLg0KDQpJIHByZXZpb3VzbHkgdGhvdWdodCBhYm91dCBzZWVk aW5nLi4uDQoNCldlIGFyZSB0cnlpbmcgdG8gYmUgcmFuZG9tLCB3ZSBhcmUgbm90IGV4cGxpY2l0 bHkgcHNldWRvLXJhbmRvbS4NCg0KU28gSSBjYW1lIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhl IGFiaWxpdHkgdG8gcmVwcm9kdWNlIGRhdGEgKHR5cGljYWxseSBmb3IgdmVyaWZpY2F0aW9uIHB1 cnBvc2VzKSBpcyBub3QgYSByZXF1aXJlbWVudCBoZXJlLg0KDQo+IA0KPiA+DQo+ID4+IFRoZSBu ZXcgTVQgc2FmZXR5IGd1YXJhbnRlZXMgc2hvdWxkIGJlIGluIHRoZSBBUEkgZG9jcyBhcyB3ZWxs Lg0KPiA+DQo+ID4gWWVzLCBpdCBpcyBhbiBleHRlbnNpb24gdG8gdGhlIGN1cnJlbnQgQVBJLCBu b3QgYSBmaXguDQo+ID4NCj4gPj4NCj4gPj4+IFRoZSBpbml0aWFsaXphdGlvbiBvZiByYW5kb20g bnVtYmVyIHN0YXRlIGlzIGRvbmUgYnkgdGhlDQo+ID4+PiBsY29yZSAobGF6eSBpbml0aWFsaXph dGlvbikuDQo+ID4+Pg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogU3RlcGhlbiBIZW1taW5nZXIgPHN0 ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnPg0KPiA+Pj4gLS0tDQo+ID4+PiDCoCBsaWIvZWFsL2Nv bW1vbi9ydGVfcmFuZG9tLmMgfCAzOCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0N Cj4gLS0tLQ0KPiA+Pj4gwqAgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE4IGRl bGV0aW9ucygtKQ0KPiA+Pj4NCj4gPj4+IGRpZmYgLS1naXQgYS9saWIvZWFsL2NvbW1vbi9ydGVf cmFuZG9tLmMNCj4gYi9saWIvZWFsL2NvbW1vbi9ydGVfcmFuZG9tLmMNCj4gPj4+IGluZGV4IDUz NjM2MzMxYTI3Yi4uOTY1N2FkZjZhZDNiIDEwMDY0NA0KPiA+Pj4gLS0tIGEvbGliL2VhbC9jb21t b24vcnRlX3JhbmRvbS5jDQo+ID4+PiArKysgYi9saWIvZWFsL2NvbW1vbi9ydGVfcmFuZG9tLmMN Cj4gPj4+IEBAIC0xOSwxMyArMTksMTQgQEAgc3RydWN0IHJ0ZV9yYW5kX3N0YXRlIHsNCj4gPj4+ IMKgwqDCoMKgwqAgdWludDY0X3QgejM7DQo+ID4+PiDCoMKgwqDCoMKgIHVpbnQ2NF90IHo0Ow0K PiA+Pj4gwqDCoMKgwqDCoCB1aW50NjRfdCB6NTsNCj4gPj4+IC19IF9fcnRlX2NhY2hlX2FsaWdu ZWQ7DQo+ID4+PiArwqDCoMKgIHVpbnQ2NF90IHNlZWQ7DQo+ID4+PiArfTsNCj4gPj4+IC0vKiBP bmUgaW5zdGFuY2UgZWFjaCBmb3IgZXZlcnkgbGNvcmUgaWQtZXF1aXBwZWQgdGhyZWFkLCBhbmQg b25lDQo+ID4+PiAtICogYWRkaXRpb25hbCBpbnN0YW5jZSB0byBiZSBzaGFyZWQgYnkgYWxsIG90 aGVycyB0aHJlYWRzIChpLmUuLA0KPiBhbGwNCj4gPj4+IC0gKiB1bnJlZ2lzdGVyZWQgbm9uLUVB TCB0aHJlYWRzKS4NCj4gPj4+IC0gKi8NCj4gPj4+IC1zdGF0aWMgc3RydWN0IHJ0ZV9yYW5kX3N0 YXRlIHJhbmRfc3RhdGVzW1JURV9NQVhfTENPUkUgKyAxXTsNCj4gPj4+ICsvKiBHbG9iYWwgcmFu ZG9tIHNlZWQgKi8NCj4gPj4+ICtzdGF0aWMgdWludDY0X3QgcnRlX3JhbmRfc2VlZDsNCj4gPj4+ ICsNCj4gPj4+ICsvKiBQZXIgbGNvcmUgcmFuZG9tIHN0YXRlLiAqLw0KPiA+Pj4gK3N0YXRpYyBS VEVfREVGSU5FX1BFUl9MQ09SRShzdHJ1Y3QgcnRlX3JhbmRfc3RhdGUsIHJ0ZV9yYW5kX3N0YXRl KTsNCj4gPj4+IMKgIHN0YXRpYyB1aW50MzJfdA0KPiA+Pj4gwqAgX19ydGVfcmFuZF9sY2czMih1 aW50MzJfdCAqc2VlZCkNCj4gPj4+IEBAIC04MSwxMSArODIsNyBAQCBfX3J0ZV9zcmFuZF9sZnNy MjU4KHVpbnQ2NF90IHNlZWQsIHN0cnVjdA0KPiA+Pj4gcnRlX3JhbmRfc3RhdGUgKnN0YXRlKQ0K PiA+Pj4gwqAgdm9pZA0KPiA+Pj4gwqAgcnRlX3NyYW5kKHVpbnQ2NF90IHNlZWQpDQo+ID4+PiDC oCB7DQo+ID4+PiAtwqDCoMKgIHVuc2lnbmVkIGludCBsY29yZV9pZDsNCj4gPj4+IC0NCj4gPj4+ IC3CoMKgwqAgLyogYWRkIGxjb3JlX2lkIHRvIHNlZWQgdG8gYXZvaWQgaGF2aW5nIHRoZSBzYW1l IHNlcXVlbmNlICovDQo+ID4+PiAtwqDCoMKgIGZvciAobGNvcmVfaWQgPSAwOyBsY29yZV9pZCA8 IFJURV9NQVhfTENPUkU7IGxjb3JlX2lkKyspDQo+ID4+PiAtwqDCoMKgwqDCoMKgwqAgX19ydGVf c3JhbmRfbGZzcjI1OChzZWVkICsgbGNvcmVfaWQsDQo+ICZyYW5kX3N0YXRlc1tsY29yZV9pZF0p Ow0KPiA+Pj4gK8KgwqDCoCBfX2F0b21pY19zdG9yZV9uKCZydGVfcmFuZF9zZWVkLCBzZWVkLCBf X0FUT01JQ19SRUxBWEVEKTsNCj4gPj4+IMKgIH0NCj4gPj4+IMKgIHN0YXRpYyBfX3J0ZV9hbHdh eXNfaW5saW5lIHVpbnQ2NF90DQo+ID4+PiBAQCAtMTE5LDE1ICsxMTYsMTggQEAgX19ydGVfcmFu ZF9sZnNyMjU4KHN0cnVjdCBydGVfcmFuZF9zdGF0ZQ0KPiAqc3RhdGUpDQo+ID4+PiDCoCBzdGF0 aWMgX19ydGVfYWx3YXlzX2lubGluZQ0KPiA+Pj4gwqAgc3RydWN0IHJ0ZV9yYW5kX3N0YXRlICpf X3J0ZV9yYW5kX2dldF9zdGF0ZSh2b2lkKQ0KPiA+Pj4gwqAgew0KPiA+Pj4gLcKgwqDCoCB1bnNp Z25lZCBpbnQgaWR4Ow0KPiA+Pj4gK8KgwqDCoCBzdHJ1Y3QgcnRlX3JhbmRfc3RhdGUgKnJhbmRf c3RhdGUgPQ0KPiAmUlRFX1BFUl9MQ09SRShydGVfcmFuZF9zdGF0ZSk7DQo+ID4+DQo+ID4+IFRo ZXJlIHNob3VsZCByZWFsbHkgYmUgYSBSVEVfUEVSX1RIUkVBRCwgYW4gYWxpYXMgdG8gUlRFX1BF Ul9MQ09SRSwNCj4gdG8NCj4gPj4gY292ZXIgdGhpcyB1c2FnZS4gT3IganVzdCB1c2UgX190aHJl YWQgKG9yIF9UaHJlYWRfbG9jYWw/KS4NCj4gPj4NCj4gPj4+ICvCoMKgwqAgdWludDY0X3Qgc2Vl ZDsNCj4gPj4+IC3CoMKgwqAgaWR4ID0gcnRlX2xjb3JlX2lkKCk7DQo+ID4+PiArwqDCoMKgIHNl ZWQgPSBfX2F0b21pY19sb2FkX24oJnJ0ZV9yYW5kX3NlZWQsIF9fQVRPTUlDX1JFTEFYRUQpOw0K PiA+Pj4gK8KgwqDCoCBpZiAodW5saWtlbHkoc2VlZCAhPSByYW5kX3N0YXRlLT5zZWVkKSkgew0K PiA+Pj4gK8KgwqDCoMKgwqDCoMKgIHJhbmRfc3RhdGUtPnNlZWQgPSBzZWVkOw0KPiA+Pg0KPiA+ PiBSZS1zZWVkaW5nIHNob3VsZCByZXN0YXJ0IHRoZSBzZXJpZXMsIG9uIGFsbCBsY29yZXMuIFRo ZXJlJ3Mgbm90aGluZw0KPiA+PiBwcmV2ZW50aW5nIHRoZSB1c2VyIGZyb20gcmUtc2VlZGluZyB0 aGUgbWFjaGluZXJ5IHJlcGVhdGVkbHksIHdpdGgNCj4gdGhlDQo+ID4+IHNhbWUgc2VlZC4gU2Vl bXMgbGlrZSBhbiB1bnVzdWFsLCBidXQgc3RpbGwgdmFsaWQsIHVzZSBjYXNlLCBpZiB5b3UNCj4g Pj4gcnVuIHJlcGVhdGVkIHRlc3RzIG9mIHNvbWUgc29ydC4NCj4gPj4NCj4gPj4gVXNlIGEgc2Vx bG9jaz8gOikgSSBndWVzcyB5b3UgbmVlZCBhIHNlZWQgZ2VuZXJhdGlvbiBudW1iZXIgYXMgd2Vs bA0KPiA+PiAoZS5nLiwgaXMgdGhpcyB0aGUgZmlyc3QgdGltZSB5b3Ugc2VlZCB3aXRoIFgsIG9y IHRoZSBzZWNvbmQgb25lLA0KPiBldGMuKQ0KPiA+Pg0KPiA+Pj4gLcKgwqDCoCAvKiBsYXN0IGlu c3RhbmNlIHJlc2VydmVkIGZvciB1bnJlZ2lzdGVyZWQgbm9uLUVBTCB0aHJlYWRzICovDQo+ID4+ PiAtwqDCoMKgIGlmICh1bmxpa2VseShpZHggPT0gTENPUkVfSURfQU5ZKSkNCj4gPj4+IC3CoMKg wqDCoMKgwqDCoCBpZHggPSBSVEVfTUFYX0xDT1JFOw0KPiA+Pj4gK8KgwqDCoMKgwqDCoMKgIHNl ZWQgKz0gcnRlX3RocmVhZF9zZWxmKCkub3BhcXVlX2lkOw0KPiA+Pj4gK8KgwqDCoMKgwqDCoMKg IF9fcnRlX3NyYW5kX2xmc3IyNTgoc2VlZCwgcmFuZF9zdGF0ZSk7DQo+ID4+PiArwqDCoMKgIH0N Cj4gPj4+IC3CoMKgwqAgcmV0dXJuICZyYW5kX3N0YXRlc1tpZHhdOw0KPiA+Pj4gK8KgwqDCoCBy ZXR1cm4gcmFuZF9zdGF0ZTsNCj4gPj4+IMKgIH0NCj4gPj4+IMKgIHVpbnQ2NF90DQo+ID4+PiBA QCAtMjI3LDcgKzIyNyw5IEBAIFJURV9JTklUKHJ0ZV9yYW5kX2luaXQpDQo+ID4+PiDCoCB7DQo+ ID4+PiDCoMKgwqDCoMKgIHVpbnQ2NF90IHNlZWQ7DQo+ID4+PiAtwqDCoMKgIHNlZWQgPSBfX3J0 ZV9yYW5kb21faW5pdGlhbF9zZWVkKCk7DQo+ID4+PiArwqDCoMKgIGRvDQo+ID4+PiArwqDCoMKg wqDCoMKgwqAgc2VlZCA9IF9fcnRlX3JhbmRvbV9pbml0aWFsX3NlZWQoKTsNCj4gPj4+ICvCoMKg wqAgd2hpbGUgKHNlZWQgPT0gMCk7DQo+ID4+DQo+ID4+IE1pZ2h0IGJlIHdvcnRoIGEgY29tbWVu dCB3aHkgc2VlZCAwIGlzIG5vdCBhbGxvd2VkLiBBbHRlcm5hdGl2ZWx5LA0KPiB1c2UNCj4gPj4g c29tZSBvdGhlciB3YXkgb2Ygc2lnbmFsaW5nIF9fcnRlX3NyYW5kX2xmc3IyNTgoKSBtdXN0IGJl IGNhbGxlZC4NCj4gPj4NCj4gPj4+IMKgwqDCoMKgwqAgcnRlX3NyYW5kKHNlZWQpOw0KPiA+Pj4g wqAgfQ0KPiA+DQo=