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 5C15F46472; Tue, 25 Mar 2025 08:15:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 461B340E17; Tue, 25 Mar 2025 08:15:13 +0100 (CET) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id ECDE640B9C for ; Tue, 25 Mar 2025 08:15:11 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id C39AB204FE; Tue, 25 Mar 2025 08:15:11 +0100 (CET) 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 perf test: test random bulk sizes X-MimeOLE: Produced By Microsoft Exchange V6.5 Date: Tue, 25 Mar 2025 08:15:12 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9FB69@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35E9FAF7@smartserver.smartshare.dk> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH] mempool perf test: test random bulk sizes Thread-Index: AduKAK1JzH5PyT0JQPae8K3OaSGMPwJ76x3QAllHbaA= References: <20250228164858.274204-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35E9FAF7@smartserver.smartshare.dk> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Andrew Rybchenko" , "Bruce Richardson" , , "Artem V. Andreev" , "Ashwin Sekhar T K" , "Pavan Nikhilesh" , "Harman Kalra" , "Hemant Agrawal" , "Sachin Saxena" 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 U2Vjb25kIFBJTkcgZm9yIHJldmlldy4NCg0KTWVkIHZlbmxpZyBoaWxzZW4gLyBLaW5kIHJlZ2Fy ZHMsDQotTW9ydGVuIEJyw7hydXANCg0KDQo+IEZyb206IE1vcnRlbiBCcsO4cnVwIFttYWlsdG86 bWJAc21hcnRzaGFyZXN5c3RlbXMuY29tXQ0KPiBTZW50OiBUaHVyc2RheSwgMTMgTWFyY2ggMjAy NSAwOS4yMw0KPiANCj4gUElORyBmb3IgcmV2aWV3Lg0KPiANCj4gVGhpcyBjb3VsZCBzdGlsbCBt YWtlIGl0IGludG8gMjUuMDMtcmMzIChkZWFkbGluZTogMTQgTWFyY2ggMjAyNSkuDQo+IA0KPiBN ZWQgdmVubGlnIGhpbHNlbiAvIEtpbmQgcmVnYXJkcywNCj4gLU1vcnRlbiBCcsO4cnVwDQo+IA0K PiANCj4gPiBGcm9tOiBNb3J0ZW4gQnLDuHJ1cCBbbWFpbHRvOm1iQHNtYXJ0c2hhcmVzeXN0ZW1z LmNvbV0NCj4gPiBTZW50OiBGcmlkYXksIDI4IEZlYnJ1YXJ5IDIwMjUgMTcuNDkNCj4gPg0KPiA+ IEJ1bGsgcmVxdWVzdHMgdG8gZ2V0IG9yIHB1dCBvYmplY3RzIGluIGEgbWVtcG9vbCBvZnRlbiB2 YXJ5IGluIHNpemUuDQo+ID4gQSBzZXJpZXMgb2YgdGVzdHMgd2l0aCBwc2V1ZG8gcmFuZG9tIHJl cXVlc3Qgc2l6ZXMsIHRvIG1pdGlnYXRlIHRoZQ0KPiA+IGJlbmVmaXRzIG9mIHRoZSBDUFUncyBk eW5hbWljIGJyYW5jaCBwcmVkaWN0b3IsIHdhcyBhZGRlZC4NCj4gPg0KPiA+IEFsc28sIHZhcmlv dXMgb3RoZXIgbWlub3IgY2hhbmdlczoNCj4gPiAtIEltcHJvdmVkIHRoZSBvdXRwdXQgZm9ybWF0 dGluZyBmb3IgcmVhZGFiaWxpdHkuDQo+ID4gLSBBZGRlZCB0ZXN0IGZvciB0aGUgImRlZmF1bHQi IG1lbXBvb2wgd2l0aCBjYWNoZS4NCj4gPiAtIFNraXAgdGhlIHRlc3RzIGZvciB0aGUgImRlZmF1 bHQiIG1lbXBvb2wsIGlmIGl0IGhhcHBlbnMgdG8gdXNlIHRoZQ0KPiA+IHNhbWUNCj4gPiAgIGRy aXZlciAoaS5lLiBvcGVyYXRpb25zKSBhcyBhbHJlYWR5IHRlc3RlZC4NCj4gPiAtIFJlcGxhY2Vk IGJhcmUgdXNlIG9mICJ1bnNpZ25lZCIgd2l0aCAidW5zaWduZWQgaW50IiwNCj4gPiAgIHRvIG1h a2UgY2hlY2twYXRjaGVzIGhhcHB5Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTW9ydGVuIEJy w7hydXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gPiAtLS0NCj4gPiAgYXBwL3Rlc3Qv dGVzdF9tZW1wb29sX3BlcmYuYyB8IDIxOSArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0NCj4gLS0NCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDE3MiBpbnNlcnRpb25zKCspLCA0NyBkZWxl dGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC90ZXN0X21lbXBvb2xfcGVy Zi5jDQo+ID4gYi9hcHAvdGVzdC90ZXN0X21lbXBvb2xfcGVyZi5jDQo+ID4gaW5kZXggNGRkNzRl Zjc1YS4uNWUyOTc5N2YwMiAxMDA2NDQNCj4gPiAtLS0gYS9hcHAvdGVzdC90ZXN0X21lbXBvb2xf cGVyZi5jDQo+ID4gKysrIGIvYXBwL3Rlc3QvdGVzdF9tZW1wb29sX3BlcmYuYw0KPiA+IEBAIC0z Myw2ICszMywxMyBAQA0KPiA+ICAgKiBNZW1wb29sIHBlcmZvcm1hbmNlDQo+ID4gICAqID09PT09 PT0NCj4gPiAgICoNCj4gPiArICogICAgRWFjaCBjb3JlIGdldCAqbl9rZWVwKiBvYmplY3RzIHBl ciBidWxrIG9mIGEgcHNldWRvcmFuZG9tDQo+IG51bWJlcg0KPiA+ICsgKiAgICBiZXR3ZWVuIDEg YW5kICpuX21heF9idWxrKi4NCj4gPiArICogICAgT2JqZWN0cyBhcmUgcHV0IGJhY2sgaW4gdGhl IHBvb2wgcGVyIGJ1bGsgb2YgYSBzaW1pbGFyDQo+ID4gcHNldWRvcmFuZG9tIG51bWJlci4NCj4g PiArICogICAgTm90ZTogVGhlIHZlcnkgbG93IGVudHJvcHkgb2YgdGhlIHJhbmRvbWl6YXRpb24g YWxnb3JpdGhtIGlzDQo+ID4gaGFybWxlc3MsIGJlY2F1c2UNCj4gPiArICogICAgICAgICAgdGhl IHNvbGUgcHVycG9zZSBvZiByYW5kb21pemF0aW9uIGlzIHRvIHByZXZlbnQgdGhlDQo+IENQVSdz DQo+ID4gZHluYW1pYyBicmFuY2gNCj4gPiArICogICAgICAgICAgcHJlZGljdG9yIGZyb20gZW5o YW5jaW5nIHRoZSB0ZXN0IHJlc3VsdHMuDQo+ID4gKyAqDQo+ID4gICAqICAgIEVhY2ggY29yZSBn ZXQgKm5fa2VlcCogb2JqZWN0cyBwZXIgYnVsayBvZiAqbl9nZXRfYnVsayouIFRoZW4sDQo+ID4g ICAqICAgIG9iamVjdHMgYXJlIHB1dCBiYWNrIGluIHRoZSBwb29sIHBlciBidWxrIG9mICpuX3B1 dF9idWxrKi4NCj4gPiAgICoNCj4gPiBAQCAtNTIsNyArNTksMTIgQEANCj4gPiAgICogICAgICAt IFR3byBjb3JlcyB3aXRoIHVzZXItb3duZWQgY2FjaGUNCj4gPiAgICogICAgICAtIE1heC4gY29y ZXMgd2l0aCB1c2VyLW93bmVkIGNhY2hlDQo+ID4gICAqDQo+ID4gLSAqICAgIC0gQnVsayBzaXpl ICgqbl9nZXRfYnVsayosICpuX3B1dF9idWxrKikNCj4gPiArICogICAgLSBQc2V1ZG9yYW5kb20g bWF4IGJ1bGsgc2l6ZSAoKm5fbWF4X2J1bGsqKQ0KPiA+ICsgKg0KPiA+ICsgKiAgICAgIC0gTWF4 IGJ1bGsgZnJvbSBDQUNIRV9MSU5FX0JVUlNUIHRvIDI1NiwgYW5kDQo+ID4gUlRFX01FTVBPT0xf Q0FDSEVfTUFYX1NJWkUsDQo+ID4gKyAqICAgICAgICB3aGVyZSBDQUNIRV9MSU5FX0JVUlNUIGlz IHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgZml0dGluZw0KPiA+IGludG8gb25lIENQVSBjYWNoZSBs aW5lLg0KPiA+ICsgKg0KPiA+ICsgKiAgICAtIEZpeGVkIGJ1bGsgc2l6ZSAoKm5fZ2V0X2J1bGsq LCAqbl9wdXRfYnVsayopDQo+ID4gICAqDQo+ID4gICAqICAgICAgLSBCdWxrIGdldCBmcm9tIDEg dG8gMjU2LCBhbmQgUlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUNCj4gPiAgICogICAgICAtIEJ1 bGsgcHV0IGZyb20gMSB0byAyNTYsIGFuZCBSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRQ0KPiA+ IEBAIC04OSwxNiArMTAxLDE5IEBADQo+ID4gIAl9IHdoaWxlICgwKQ0KPiA+DQo+ID4gIHN0YXRp YyBpbnQgdXNlX2V4dGVybmFsX2NhY2hlOw0KPiA+IC1zdGF0aWMgdW5zaWduZWQgZXh0ZXJuYWxf Y2FjaGVfc2l6ZSA9IFJURV9NRU1QT09MX0NBQ0hFX01BWF9TSVpFOw0KPiA+ICtzdGF0aWMgdW5z aWduZWQgaW50IGV4dGVybmFsX2NhY2hlX3NpemUgPQ0KPiBSVEVfTUVNUE9PTF9DQUNIRV9NQVhf U0laRTsNCj4gPg0KPiA+ICBzdGF0aWMgUlRFX0FUT01JQyh1aW50MzJfdCkgc3luY2hybzsNCj4g Pg0KPiA+ICsvKiBtYXggcmFuZG9tIG51bWJlciBvZiBvYmplY3RzIGluIG9uZSBidWxrIG9wZXJh dGlvbiAoZ2V0IGFuZCBwdXQpDQo+ICovDQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbl9tYXhf YnVsazsNCj4gPiArDQo+ID4gIC8qIG51bWJlciBvZiBvYmplY3RzIGluIG9uZSBidWxrIG9wZXJh dGlvbiAoZ2V0IG9yIHB1dCkgKi8NCj4gPiAtc3RhdGljIHVuc2lnbmVkIG5fZ2V0X2J1bGs7DQo+ ID4gLXN0YXRpYyB1bnNpZ25lZCBuX3B1dF9idWxrOw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50 IG5fZ2V0X2J1bGs7DQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbl9wdXRfYnVsazsNCj4gPg0K PiA+ICAvKiBudW1iZXIgb2Ygb2JqZWN0cyByZXRyaWV2ZWQgZnJvbSBtZW1wb29sIGJlZm9yZSBw dXR0aW5nIHRoZW0gYmFjaw0KPiA+ICovDQo+ID4gLXN0YXRpYyB1bnNpZ25lZCBuX2tlZXA7DQo+ ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbl9rZWVwOw0KPiA+DQo+ID4gIC8qIHRydWUgaWYgd2Ug d2FudCB0byB0ZXN0IHdpdGggY29uc3RhbnQgbl9nZXRfYnVsayBhbmQgbl9wdXRfYnVsaw0KPiAq Lw0KPiA+ICBzdGF0aWMgaW50IHVzZV9jb25zdGFudF92YWx1ZXM7DQo+ID4gQEAgLTExOCw3ICsx MzMsNyBAQCBzdGF0aWMgc3RydWN0IG1lbXBvb2xfdGVzdF9zdGF0cw0KPiA+IHN0YXRzW1JURV9N QVhfTENPUkVdOw0KPiA+ICAgKi8NCj4gPiAgc3RhdGljIHZvaWQNCj4gPiAgbXlfb2JqX2luaXQo c3RydWN0IHJ0ZV9tZW1wb29sICptcCwgX19ydGVfdW51c2VkIHZvaWQgKmFyZywNCj4gPiAtCSAg ICB2b2lkICpvYmosIHVuc2lnbmVkIGkpDQo+ID4gKwkgICAgdm9pZCAqb2JqLCB1bnNpZ25lZCBp bnQgaSkNCj4gPiAgew0KPiA+ICAJdWludDMyX3QgKm9iam51bSA9IG9iajsNCj4gPiAgCW1lbXNl dChvYmosIDAsIG1wLT5lbHRfc2l6ZSk7DQo+ID4gQEAgLTE1OSwxMSArMTc0LDU1IEBAIHRlc3Rf bG9vcChzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLCBzdHJ1Y3QNCj4gPiBydGVfbWVtcG9vbF9jYWNo ZSAqY2FjaGUsDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+DQo+ID4gK3N0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ICt0ZXN0X2xvb3BfcmFuZG9tKHN0cnVjdCBydGVfbWVt cG9vbCAqbXAsIHN0cnVjdCBydGVfbWVtcG9vbF9jYWNoZQ0KPiA+ICpjYWNoZSwNCj4gPiArCSAg dW5zaWduZWQgaW50IHhfa2VlcCwgdW5zaWduZWQgaW50IHhfbWF4X2J1bGspDQo+ID4gK3sNCj4g PiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgdm9pZCAqb2JqX3RhYmxlW01BWF9LRUVQ XTsNCj4gPiArCXVuc2lnbmVkIGludCBpZHg7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiAr CXVuc2lnbmVkIGludCByID0gMDsNCj4gPiArCXVuc2lnbmVkIGludCB4X2J1bGs7DQo+ID4gKwlp bnQgcmV0Ow0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGxpa2VseShpIDwgKE4gLyB4X2tlZXAp KTsgaSsrKSB7DQo+ID4gKwkJLyogZ2V0IHhfa2VlcCBvYmplY3RzIGJ5IGJ1bGsgb2YgcmFuZG9t IFsxIC4uIHhfbWF4X2J1bGtdDQo+ID4gKi8NCj4gPiArCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHhf a2VlcDsgaWR4ICs9IHhfYnVsaywgcisrKSB7DQo+ID4gKwkJCS8qIEdlbmVyYXRlIGEgcHNldWRv cmFuZG9tIG51bWJlciBbMSAuLiB4X21heF9idWxrXS4NCj4gPiAqLw0KPiA+ICsJCQl4X2J1bGsg PSAoKHIgXiAociA+PiAyKSBeIChyIDw8IDMpKSAmICh4X21heF9idWxrIC0NCj4gPiAxKSkgKyAx Ow0KPiA+ICsJCQlpZiAodW5saWtlbHkoaWR4ICsgeF9idWxrID4geF9rZWVwKSkNCj4gPiArCQkJ CXhfYnVsayA9IHhfa2VlcCAtIGlkeDsNCj4gPiArCQkJcmV0ID0gcnRlX21lbXBvb2xfZ2VuZXJp Y19nZXQobXAsDQo+ID4gKwkJCQkJCSAgICAgICZvYmpfdGFibGVbaWR4XSwNCj4gPiArCQkJCQkJ ICAgICAgeF9idWxrLA0KPiA+ICsJCQkJCQkgICAgICBjYWNoZSk7DQo+ID4gKwkJCWlmICh1bmxp a2VseShyZXQgPCAwKSkgew0KPiA+ICsJCQkJcnRlX21lbXBvb2xfZHVtcChzdGRvdXQsIG1wKTsN Cj4gPiArCQkJCXJldHVybiByZXQ7DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJ CS8qIHB1dCB0aGUgb2JqZWN0cyBiYWNrIGJ5IGJ1bGsgb2YgcmFuZG9tIFsxIC4uIHhfbWF4X2J1 bGtdDQo+ID4gKi8NCj4gPiArCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHhfa2VlcDsgaWR4ICs9IHhf YnVsaywgcisrKSB7DQo+ID4gKwkJCS8qIEdlbmVyYXRlIGEgcHNldWRvcmFuZG9tIG51bWJlciBb MSAuLiB4X21heF9idWxrXS4NCj4gPiAqLw0KPiA+ICsJCQl4X2J1bGsgPSAoKHIgXiAociA+PiAy KSBeIChyIDw8IDMpKSAmICh4X21heF9idWxrIC0NCj4gPiAxKSkgKyAxOw0KPiA+ICsJCQlpZiAo dW5saWtlbHkoaWR4ICsgeF9idWxrID4geF9rZWVwKSkNCj4gPiArCQkJCXhfYnVsayA9IHhfa2Vl cCAtIGlkeDsNCj4gPiArCQkJcnRlX21lbXBvb2xfZ2VuZXJpY19wdXQobXAsDQo+ID4gKwkJCQkJ CSZvYmpfdGFibGVbaWR4XSwNCj4gPiArCQkJCQkJeF9idWxrLA0KPiA+ICsJCQkJCQljYWNoZSk7 DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICBzdGF0aWMgaW50DQo+ID4gIHBlcl9sY29yZV9tZW1wb29sX3Rlc3Qodm9pZCAqYXJn KQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wID0gYXJnOw0KPiA+IC0JdW5z aWduZWQgbGNvcmVfaWQgPSBydGVfbGNvcmVfaWQoKTsNCj4gPiArCXVuc2lnbmVkIGludCBsY29y ZV9pZCA9IHJ0ZV9sY29yZV9pZCgpOw0KPiA+ICAJaW50IHJldCA9IDA7DQo+ID4gIAl1aW50NjRf dCBzdGFydF9jeWNsZXMsIGVuZF9jeWNsZXM7DQo+ID4gIAl1aW50NjRfdCB0aW1lX2RpZmYgPSAw LCBoeiA9IHJ0ZV9nZXRfdGltZXJfaHooKTsNCj4gPiBAQCAtMTgxLDkgKzI0MCw5IEBAIHBlcl9s Y29yZV9tZW1wb29sX3Rlc3Qodm9pZCAqYXJnKQ0KPiA+ICAJfQ0KPiA+DQo+ID4gIAkvKiBuX2dl dF9idWxrIGFuZCBuX3B1dF9idWxrIG11c3QgYmUgZGl2aXNvcnMgb2Ygbl9rZWVwICovDQo+ID4g LQlpZiAoKChuX2tlZXAgLyBuX2dldF9idWxrKSAqIG5fZ2V0X2J1bGspICE9IG5fa2VlcCkNCj4g PiArCWlmICghbl9tYXhfYnVsayAmJiAoKChuX2tlZXAgLyBuX2dldF9idWxrKSAqIG5fZ2V0X2J1 bGspICE9DQo+ID4gbl9rZWVwKSkNCj4gPiAgCQlHT1RPX0VSUihyZXQsIG91dCk7DQo+ID4gLQlp ZiAoKChuX2tlZXAgLyBuX3B1dF9idWxrKSAqIG5fcHV0X2J1bGspICE9IG5fa2VlcCkNCj4gPiAr CWlmICghbl9tYXhfYnVsayAmJiAoKChuX2tlZXAgLyBuX3B1dF9idWxrKSAqIG5fcHV0X2J1bGsp ICE9DQo+ID4gbl9rZWVwKSkNCj4gPiAgCQlHT1RPX0VSUihyZXQsIG91dCk7DQo+ID4gIAkvKiBm b3IgY29uc3RhbnQgbiwgbl9nZXRfYnVsayBhbmQgbl9wdXRfYnVsayBtdXN0IGJlIHRoZSBzYW1l ICovDQo+ID4gIAlpZiAodXNlX2NvbnN0YW50X3ZhbHVlcyAmJiBuX3B1dF9idWxrICE9IG5fZ2V0 X2J1bGspDQo+ID4gQEAgLTIwMCw3ICsyNTksOSBAQCBwZXJfbGNvcmVfbWVtcG9vbF90ZXN0KHZv aWQgKmFyZykNCj4gPiAgCXN0YXJ0X2N5Y2xlcyA9IHJ0ZV9nZXRfdGltZXJfY3ljbGVzKCk7DQo+ ID4NCj4gPiAgCXdoaWxlICh0aW1lX2RpZmYvaHogPCBUSU1FX1MpIHsNCj4gPiAtCQlpZiAoIXVz ZV9jb25zdGFudF92YWx1ZXMpDQo+ID4gKwkJaWYgKG5fbWF4X2J1bGspDQo+ID4gKwkJCXJldCA9 IHRlc3RfbG9vcF9yYW5kb20obXAsIGNhY2hlLCBuX2tlZXAsDQo+ID4gbl9tYXhfYnVsayk7DQo+ ID4gKwkJZWxzZSBpZiAoIXVzZV9jb25zdGFudF92YWx1ZXMpDQo+ID4gIAkJCXJldCA9IHRlc3Rf bG9vcChtcCwgY2FjaGUsIG5fa2VlcCwgbl9nZXRfYnVsaywNCj4gPiBuX3B1dF9idWxrKTsNCj4g PiAgCQllbHNlIGlmIChuX2dldF9idWxrID09IDEpDQo+ID4gIAkJCXJldCA9IHRlc3RfbG9vcCht cCwgY2FjaGUsIG5fa2VlcCwgMSwgMSk7DQo+ID4gQEAgLTI0NiwxMCArMzA3LDEwIEBAIHBlcl9s Y29yZV9tZW1wb29sX3Rlc3Qodm9pZCAqYXJnKQ0KPiA+ICBzdGF0aWMgaW50DQo+ID4gIGxhdW5j aF9jb3JlcyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLCB1bnNpZ25lZCBpbnQgY29yZXMpDQo+ID4g IHsNCj4gPiAtCXVuc2lnbmVkIGxjb3JlX2lkOw0KPiA+ICsJdW5zaWduZWQgaW50IGxjb3JlX2lk Ow0KPiA+ICAJdWludDY0X3QgcmF0ZTsNCj4gPiAgCWludCByZXQ7DQo+ID4gLQl1bnNpZ25lZCBj b3Jlc19zYXZlID0gY29yZXM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgY29yZXNfc2F2ZSA9IGNvcmVz Ow0KPiA+ICAJZG91YmxlIGh6ID0gcnRlX2dldF90aW1lcl9oeigpOw0KPiA+DQo+ID4gIAlydGVf YXRvbWljX3N0b3JlX2V4cGxpY2l0KCZzeW5jaHJvLCAwLCBydGVfbWVtb3J5X29yZGVyX3JlbGF4 ZWQpOw0KPiA+IEBAIC0yNTcsMTEgKzMxOCwxOCBAQCBsYXVuY2hfY29yZXMoc3RydWN0IHJ0ZV9t ZW1wb29sICptcCwgdW5zaWduZWQNCj4gaW50DQo+ID4gY29yZXMpDQo+ID4gIAkvKiByZXNldCBz dGF0cyAqLw0KPiA+ICAJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsNCj4gPg0KPiA+ IC0JcHJpbnRmKCJtZW1wb29sX2F1dG90ZXN0IGNhY2hlPSV1IGNvcmVzPSV1IG5fZ2V0X2J1bGs9 JXUgIg0KPiA+IC0JICAgICAgICJuX3B1dF9idWxrPSV1IG5fa2VlcD0ldSBjb25zdGFudF9uPSV1 ICIsDQo+ID4gKwlwcmludGYoIm1lbXBvb2xfYXV0b3Rlc3QgY2FjaGU9JXUgY29yZXM9JXUgbl9r ZWVwPSU1dSAiLA0KPiA+ICAJICAgICAgIHVzZV9leHRlcm5hbF9jYWNoZSA/DQo+ID4gIAkJICAg ZXh0ZXJuYWxfY2FjaGVfc2l6ZSA6ICh1bnNpZ25lZCkgbXAtPmNhY2hlX3NpemUsDQo+ID4gLQkg ICAgICAgY29yZXMsIG5fZ2V0X2J1bGssIG5fcHV0X2J1bGssIG5fa2VlcCwNCj4gPiB1c2VfY29u c3RhbnRfdmFsdWVzKTsNCj4gPiArCSAgICAgICBjb3JlcywNCj4gPiArCSAgICAgICBuX2tlZXAp Ow0KPiA+ICsJaWYgKG5fbWF4X2J1bGspDQo+ID4gKwkJcHJpbnRmKCJuX21heF9idWxrPSUzdSAi LA0KPiA+ICsJCSAgICAgICBuX21heF9idWxrKTsNCj4gPiArCWVsc2UNCj4gPiArCQlwcmludGYo Im5fZ2V0X2J1bGs9JTN1IG5fcHV0X2J1bGs9JTN1IGNvbnN0YW50X249JXUgIiwNCj4gPiArCQkg ICAgICAgbl9nZXRfYnVsaywgbl9wdXRfYnVsaywNCj4gPiArCQkgICAgICAgdXNlX2NvbnN0YW50 X3ZhbHVlcyk7DQo+ID4NCj4gPiAgCWlmIChydGVfbWVtcG9vbF9hdmFpbF9jb3VudChtcCkgIT0g TUVNUE9PTF9TSVpFKSB7DQo+ID4gIAkJcHJpbnRmKCJtZW1wb29sIGlzIG5vdCBmdWxsXG4iKTsN Cj4gPiBAQCAtMzAxLDcgKzM2OSw3IEBAIGxhdW5jaF9jb3JlcyhzdHJ1Y3QgcnRlX21lbXBvb2wg Km1wLCB1bnNpZ25lZCBpbnQNCj4gPiBjb3JlcykNCj4gPiAgCQkJcmF0ZSArPSAoZG91YmxlKXN0 YXRzW2xjb3JlX2lkXS5lbnFfY291bnQgKiBoeiAvDQo+ID4gIAkJCQkJKGRvdWJsZSlzdGF0c1ts Y29yZV9pZF0uZHVyYXRpb25fY3ljbGVzOw0KPiA+DQo+ID4gLQlwcmludGYoInJhdGVfcGVyc2Vj PSUiIFBSSXU2NCAiXG4iLCByYXRlKTsNCj4gPiArCXByaW50ZigicmF0ZV9wZXJzZWM9JTEwIiBQ Ukl1NjQgIlxuIiwgcmF0ZSk7DQo+ID4NCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4gQEAg LTMxMCwyNSArMzc4LDQ3IEBAIGxhdW5jaF9jb3JlcyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLCB1 bnNpZ25lZA0KPiBpbnQNCj4gPiBjb3JlcykNCj4gPiAgc3RhdGljIGludA0KPiA+ICBkb19vbmVf bWVtcG9vbF90ZXN0KHN0cnVjdCBydGVfbWVtcG9vbCAqbXAsIHVuc2lnbmVkIGludCBjb3Jlcywg aW50DQo+ID4gZXh0ZXJuYWxfY2FjaGUpDQo+ID4gIHsNCj4gPiArCXVuc2lnbmVkIGludCBidWxr X3RhYl9tYXhbXSA9IHsgQ0FDSEVfTElORV9CVVJTVCwgMzIsIDY0LCAxMjgsDQo+ID4gMjU2LA0K PiA+ICsJCQlSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRSwgMCB9Ow0KPiA+ICAJdW5zaWduZWQg aW50IGJ1bGtfdGFiX2dldFtdID0geyAxLCA0LCBDQUNIRV9MSU5FX0JVUlNULCAzMiwgNjQsDQo+ ID4gMTI4LCAyNTYsDQo+ID4gIAkJCVJURV9NRU1QT09MX0NBQ0hFX01BWF9TSVpFLCAwIH07DQo+ ID4gIAl1bnNpZ25lZCBpbnQgYnVsa190YWJfcHV0W10gPSB7IDEsIDQsIENBQ0hFX0xJTkVfQlVS U1QsIDMyLCA2NCwNCj4gPiAxMjgsIDI1NiwNCj4gPiAgCQkJUlRFX01FTVBPT0xfQ0FDSEVfTUFY X1NJWkUsIDAgfTsNCj4gPiAgCXVuc2lnbmVkIGludCBrZWVwX3RhYltdID0geyAzMiwgMTI4LCA1 MTIsIDIwNDgsIDgxOTIsIDMyNzY4LCAwIH07DQo+ID4gLQl1bnNpZ25lZCAqZ2V0X2J1bGtfcHRy Ow0KPiA+IC0JdW5zaWduZWQgKnB1dF9idWxrX3B0cjsNCj4gPiAtCXVuc2lnbmVkICprZWVwX3B0 cjsNCj4gPiArCXVuc2lnbmVkIGludCAqbWF4X2J1bGtfcHRyOw0KPiA+ICsJdW5zaWduZWQgaW50 ICpnZXRfYnVsa19wdHI7DQo+ID4gKwl1bnNpZ25lZCBpbnQgKnB1dF9idWxrX3B0cjsNCj4gPiAr CXVuc2lnbmVkIGludCAqa2VlcF9wdHI7DQo+ID4gIAlpbnQgcmV0Ow0KPiA+DQo+ID4gLQlmb3Ig KGdldF9idWxrX3B0ciA9IGJ1bGtfdGFiX2dldDsgKmdldF9idWxrX3B0cjsgZ2V0X2J1bGtfcHRy KyspDQo+ID4gew0KPiA+IC0JCWZvciAocHV0X2J1bGtfcHRyID0gYnVsa190YWJfcHV0OyAqcHV0 X2J1bGtfcHRyOw0KPiA+IHB1dF9idWxrX3B0cisrKSB7DQo+ID4gLQkJCWZvciAoa2VlcF9wdHIg PSBrZWVwX3RhYjsgKmtlZXBfcHRyOyBrZWVwX3B0cisrKSB7DQo+ID4gKwlmb3IgKGtlZXBfcHRy ID0ga2VlcF90YWI7ICprZWVwX3B0cjsga2VlcF9wdHIrKykgew0KPiA+ICsJCWZvciAobWF4X2J1 bGtfcHRyID0gYnVsa190YWJfbWF4OyAqbWF4X2J1bGtfcHRyOw0KPiA+IG1heF9idWxrX3B0cisr KSB7DQo+ID4gKw0KPiA+ICsJCQlpZiAoKmtlZXBfcHRyIDwgKm1heF9idWxrX3B0cikNCj4gPiAr CQkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQkJdXNlX2V4dGVybmFsX2NhY2hlID0gZXh0ZXJu YWxfY2FjaGU7DQo+ID4gKwkJCXVzZV9jb25zdGFudF92YWx1ZXMgPSAwOw0KPiA+ICsJCQluX21h eF9idWxrID0gKm1heF9idWxrX3B0cjsNCj4gPiArCQkJbl9nZXRfYnVsayA9IDA7DQo+ID4gKwkJ CW5fcHV0X2J1bGsgPSAwOw0KPiA+ICsJCQluX2tlZXAgPSAqa2VlcF9wdHI7DQo+ID4gKwkJCXJl dCA9IGxhdW5jaF9jb3JlcyhtcCwgY29yZXMpOw0KPiA+ICsJCQlpZiAocmV0IDwgMCkNCj4gPiAr CQkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm9yIChrZWVw X3B0ciA9IGtlZXBfdGFiOyAqa2VlcF9wdHI7IGtlZXBfcHRyKyspIHsNCj4gPiArCQlmb3IgKGdl dF9idWxrX3B0ciA9IGJ1bGtfdGFiX2dldDsgKmdldF9idWxrX3B0cjsNCj4gPiBnZXRfYnVsa19w dHIrKykgew0KPiA+ICsJCQlmb3IgKHB1dF9idWxrX3B0ciA9IGJ1bGtfdGFiX3B1dDsgKnB1dF9i dWxrX3B0cjsNCj4gPiBwdXRfYnVsa19wdHIrKykgew0KPiA+DQo+ID4gIAkJCQlpZiAoKmtlZXBf cHRyIDwgKmdldF9idWxrX3B0ciB8fCAqa2VlcF9wdHIgPA0KPiA+ICpwdXRfYnVsa19wdHIpDQo+ ID4gIAkJCQkJY29udGludWU7DQo+ID4NCj4gPiAgCQkJCXVzZV9leHRlcm5hbF9jYWNoZSA9IGV4 dGVybmFsX2NhY2hlOw0KPiA+ICAJCQkJdXNlX2NvbnN0YW50X3ZhbHVlcyA9IDA7DQo+ID4gKwkJ CQluX21heF9idWxrID0gMDsNCj4gPiAgCQkJCW5fZ2V0X2J1bGsgPSAqZ2V0X2J1bGtfcHRyOw0K PiA+ICAJCQkJbl9wdXRfYnVsayA9ICpwdXRfYnVsa19wdHI7DQo+ID4gIAkJCQluX2tlZXAgPSAq a2VlcF9wdHI7DQo+ID4gQEAgLTM0Niw2ICs0MzYsNyBAQCBkb19vbmVfbWVtcG9vbF90ZXN0KHN0 cnVjdCBydGVfbWVtcG9vbCAqbXAsDQo+ID4gdW5zaWduZWQgaW50IGNvcmVzLCBpbnQgZXh0ZXJu YWxfY2FjDQo+ID4gIAkJCX0NCj4gPiAgCQl9DQo+ID4gIAl9DQo+ID4gKw0KPiA+ICAJcmV0dXJu IDA7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC0zNTQsNyArNDQ1LDEwIEBAIGRvX2FsbF9tZW1wb29s X3BlcmZfdGVzdHModW5zaWduZWQgaW50IGNvcmVzKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgcnRl X21lbXBvb2wgKm1wX2NhY2hlID0gTlVMTDsNCj4gPiAgCXN0cnVjdCBydGVfbWVtcG9vbCAqbXBf bm9jYWNoZSA9IE5VTEw7DQo+ID4gLQlzdHJ1Y3QgcnRlX21lbXBvb2wgKmRlZmF1bHRfcG9vbCA9 IE5VTEw7DQo+ID4gKwlzdHJ1Y3QgcnRlX21lbXBvb2wgKmRlZmF1bHRfcG9vbF9jYWNoZSA9IE5V TEw7DQo+ID4gKwlzdHJ1Y3QgcnRlX21lbXBvb2wgKmRlZmF1bHRfcG9vbF9ub2NhY2hlID0gTlVM TDsNCj4gPiArCWNvbnN0IGNoYXIgKm1wX2NhY2hlX29wczsNCj4gPiArCWNvbnN0IGNoYXIgKm1w X25vY2FjaGVfb3BzOw0KPiA+ICAJY29uc3QgY2hhciAqZGVmYXVsdF9wb29sX29wczsNCj4gPiAg CWludCByZXQgPSAtMTsNCj4gPg0KPiA+IEBAIC0zNjgsNiArNDYyLDcgQEAgZG9fYWxsX21lbXBv b2xfcGVyZl90ZXN0cyh1bnNpZ25lZCBpbnQgY29yZXMpDQo+ID4gIAkJcHJpbnRmKCJjYW5ub3Qg YWxsb2NhdGUgbWVtcG9vbCAod2l0aG91dCBjYWNoZSlcbiIpOw0KPiA+ICAJCWdvdG8gZXJyOw0K PiA+ICAJfQ0KPiA+ICsJbXBfbm9jYWNoZV9vcHMgPSBydGVfbWVtcG9vbF9nZXRfb3BzKG1wX25v Y2FjaGUtPm9wc19pbmRleCktDQo+ID4gPm5hbWU7DQo+ID4NCj4gPiAgCS8qIGNyZWF0ZSBhIG1l bXBvb2wgKHdpdGggY2FjaGUpICovDQo+ID4gIAltcF9jYWNoZSA9IHJ0ZV9tZW1wb29sX2NyZWF0 ZSgicGVyZl90ZXN0X2NhY2hlIiwgTUVNUE9PTF9TSVpFLA0KPiA+IEBAIC0zODAsNDcgKzQ3NSw3 NiBAQCBkb19hbGxfbWVtcG9vbF9wZXJmX3Rlc3RzKHVuc2lnbmVkIGludCBjb3JlcykNCj4gPiAg CQlwcmludGYoImNhbm5vdCBhbGxvY2F0ZSBtZW1wb29sICh3aXRoIGNhY2hlKVxuIik7DQo+ID4g IAkJZ290byBlcnI7DQo+ID4gIAl9DQo+ID4gKwltcF9jYWNoZV9vcHMgPSBydGVfbWVtcG9vbF9n ZXRfb3BzKG1wX2NhY2hlLT5vcHNfaW5kZXgpLT5uYW1lOw0KPiA+DQo+ID4gIAlkZWZhdWx0X3Bv b2xfb3BzID0gcnRlX21idWZfYmVzdF9tZW1wb29sX29wcygpOw0KPiA+IC0JLyogQ3JlYXRlIGEg bWVtcG9vbCBiYXNlZCBvbiBEZWZhdWx0IGhhbmRsZXIgKi8NCj4gPiAtCWRlZmF1bHRfcG9vbCA9 IHJ0ZV9tZW1wb29sX2NyZWF0ZV9lbXB0eSgiZGVmYXVsdF9wb29sIiwNCj4gPiAtCQkJCQkJTUVN UE9PTF9TSVpFLA0KPiA+IC0JCQkJCQlNRU1QT09MX0VMVF9TSVpFLA0KPiA+IC0JCQkJCQkwLCAw LA0KPiA+IC0JCQkJCQlTT0NLRVRfSURfQU5ZLCAwKTsNCj4gPiAtDQo+ID4gLQlpZiAoZGVmYXVs dF9wb29sID09IE5VTEwpIHsNCj4gPiAtCQlwcmludGYoImNhbm5vdCBhbGxvY2F0ZSAlcyBtZW1w b29sXG4iLCBkZWZhdWx0X3Bvb2xfb3BzKTsNCj4gPiArDQo+ID4gKwkvKiBDcmVhdGUgYSBtZW1w b29sICh3aXRob3V0IGNhY2hlKSBiYXNlZCBvbiBEZWZhdWx0IGhhbmRsZXIgKi8NCj4gPiArCWRl ZmF1bHRfcG9vbF9ub2NhY2hlID0NCj4gPiBydGVfbWVtcG9vbF9jcmVhdGVfZW1wdHkoImRlZmF1 bHRfcG9vbF9ub2NhY2hlIiwNCj4gPiArCQkJTUVNUE9PTF9TSVpFLA0KPiA+ICsJCQlNRU1QT09M X0VMVF9TSVpFLA0KPiA+ICsJCQkwLCAwLA0KPiA+ICsJCQlTT0NLRVRfSURfQU5ZLCAwKTsNCj4g PiArCWlmIChkZWZhdWx0X3Bvb2xfbm9jYWNoZSA9PSBOVUxMKSB7DQo+ID4gKwkJcHJpbnRmKCJj YW5ub3QgYWxsb2NhdGUgJXMgbWVtcG9vbCAod2l0aG91dCBjYWNoZSlcbiIsDQo+ID4gZGVmYXVs dF9wb29sX29wcyk7DQo+ID4gIAkJZ290byBlcnI7DQo+ID4gIAl9DQo+ID4gLQ0KPiA+IC0JaWYg KHJ0ZV9tZW1wb29sX3NldF9vcHNfYnluYW1lKGRlZmF1bHRfcG9vbCwgZGVmYXVsdF9wb29sX29w cywNCj4gPiBOVUxMKQ0KPiA+IC0JCQkJICAgICAgIDwgMCkgew0KPiA+ICsJaWYgKHJ0ZV9tZW1w b29sX3NldF9vcHNfYnluYW1lKGRlZmF1bHRfcG9vbF9ub2NhY2hlLA0KPiA+IGRlZmF1bHRfcG9v bF9vcHMsIE5VTEwpIDwgMCkgew0KPiA+ICAJCXByaW50ZigiY2Fubm90IHNldCAlcyBoYW5kbGVy XG4iLCBkZWZhdWx0X3Bvb2xfb3BzKTsNCj4gPiAgCQlnb3RvIGVycjsNCj4gPiAgCX0NCj4gPiAt DQo+ID4gLQlpZiAocnRlX21lbXBvb2xfcG9wdWxhdGVfZGVmYXVsdChkZWZhdWx0X3Bvb2wpIDwg MCkgew0KPiA+ICsJaWYgKHJ0ZV9tZW1wb29sX3BvcHVsYXRlX2RlZmF1bHQoZGVmYXVsdF9wb29s X25vY2FjaGUpIDwgMCkgew0KPiA+ICAJCXByaW50ZigiY2Fubm90IHBvcHVsYXRlICVzIG1lbXBv b2xcbiIsIGRlZmF1bHRfcG9vbF9vcHMpOw0KPiA+ICAJCWdvdG8gZXJyOw0KPiA+ICAJfQ0KPiA+ ICsJcnRlX21lbXBvb2xfb2JqX2l0ZXIoZGVmYXVsdF9wb29sX25vY2FjaGUsIG15X29ial9pbml0 LCBOVUxMKTsNCj4gPiArDQo+ID4gKwkvKiBDcmVhdGUgYSBtZW1wb29sICh3aXRoIGNhY2hlKSBi YXNlZCBvbiBEZWZhdWx0IGhhbmRsZXIgKi8NCj4gPiArCWRlZmF1bHRfcG9vbF9jYWNoZSA9DQo+ ID4gcnRlX21lbXBvb2xfY3JlYXRlX2VtcHR5KCJkZWZhdWx0X3Bvb2xfY2FjaGUiLA0KPiA+ICsJ CQlNRU1QT09MX1NJWkUsDQo+ID4gKwkJCU1FTVBPT0xfRUxUX1NJWkUsDQo+ID4gKwkJCVJURV9N RU1QT09MX0NBQ0hFX01BWF9TSVpFLCAwLA0KPiA+ICsJCQlTT0NLRVRfSURfQU5ZLCAwKTsNCj4g PiArCWlmIChkZWZhdWx0X3Bvb2xfY2FjaGUgPT0gTlVMTCkgew0KPiA+ICsJCXByaW50ZigiY2Fu bm90IGFsbG9jYXRlICVzIG1lbXBvb2wgKHdpdGggY2FjaGUpXG4iLA0KPiA+IGRlZmF1bHRfcG9v bF9vcHMpOw0KPiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKHJ0ZV9tZW1wb29s X3NldF9vcHNfYnluYW1lKGRlZmF1bHRfcG9vbF9jYWNoZSwNCj4gPiBkZWZhdWx0X3Bvb2xfb3Bz LCBOVUxMKSA8IDApIHsNCj4gPiArCQlwcmludGYoImNhbm5vdCBzZXQgJXMgaGFuZGxlclxuIiwg ZGVmYXVsdF9wb29sX29wcyk7DQo+ID4gKwkJZ290byBlcnI7DQo+ID4gKwl9DQo+ID4gKwlpZiAo cnRlX21lbXBvb2xfcG9wdWxhdGVfZGVmYXVsdChkZWZhdWx0X3Bvb2xfY2FjaGUpIDwgMCkgew0K PiA+ICsJCXByaW50ZigiY2Fubm90IHBvcHVsYXRlICVzIG1lbXBvb2xcbiIsIGRlZmF1bHRfcG9v bF9vcHMpOw0KPiA+ICsJCWdvdG8gZXJyOw0KPiA+ICsJfQ0KPiA+ICsJcnRlX21lbXBvb2xfb2Jq X2l0ZXIoZGVmYXVsdF9wb29sX2NhY2hlLCBteV9vYmpfaW5pdCwgTlVMTCk7DQo+ID4NCj4gPiAt CXJ0ZV9tZW1wb29sX29ial9pdGVyKGRlZmF1bHRfcG9vbCwgbXlfb2JqX2luaXQsIE5VTEwpOw0K PiA+IC0NCj4gPiAtCXByaW50Zigic3RhcnQgcGVyZm9ybWFuY2UgdGVzdCAod2l0aG91dCBjYWNo ZSlcbiIpOw0KPiA+ICsJcHJpbnRmKCJzdGFydCBwZXJmb3JtYW5jZSB0ZXN0ICh1c2luZyAlcywg d2l0aG91dCBjYWNoZSlcbiIsDQo+ID4gKwkgICAgICAgbXBfbm9jYWNoZV9vcHMpOw0KPiA+ICAJ aWYgKGRvX29uZV9tZW1wb29sX3Rlc3QobXBfbm9jYWNoZSwgY29yZXMsIDApIDwgMCkNCj4gPiAg CQlnb3RvIGVycjsNCj4gPg0KPiA+IC0JcHJpbnRmKCJzdGFydCBwZXJmb3JtYW5jZSB0ZXN0IGZv ciAlcyAod2l0aG91dCBjYWNoZSlcbiIsDQo+ID4gLQkgICAgICAgZGVmYXVsdF9wb29sX29wcyk7 DQo+ID4gLQlpZiAoZG9fb25lX21lbXBvb2xfdGVzdChkZWZhdWx0X3Bvb2wsIGNvcmVzLCAwKSA8 IDApDQo+ID4gLQkJZ290byBlcnI7DQo+ID4gKwlpZiAoc3RyY21wKGRlZmF1bHRfcG9vbF9vcHMs IG1wX25vY2FjaGVfb3BzKSAhPSAwKSB7DQo+ID4gKwkJcHJpbnRmKCJzdGFydCBwZXJmb3JtYW5j ZSB0ZXN0IGZvciAlcyAod2l0aG91dCBjYWNoZSlcbiIsDQo+ID4gKwkJICAgICAgIGRlZmF1bHRf cG9vbF9vcHMpOw0KPiA+ICsJCWlmIChkb19vbmVfbWVtcG9vbF90ZXN0KGRlZmF1bHRfcG9vbF9u b2NhY2hlLCBjb3JlcywgMCkgPA0KPiA+IDApDQo+ID4gKwkJCWdvdG8gZXJyOw0KPiA+ICsJfQ0K PiA+DQo+ID4gLQlwcmludGYoInN0YXJ0IHBlcmZvcm1hbmNlIHRlc3QgKHdpdGggY2FjaGUpXG4i KTsNCj4gPiArCXByaW50Zigic3RhcnQgcGVyZm9ybWFuY2UgdGVzdCAodXNpbmcgJXMsIHdpdGgg Y2FjaGUpXG4iLA0KPiA+ICsJICAgICAgIG1wX2NhY2hlX29wcyk7DQo+ID4gIAlpZiAoZG9fb25l X21lbXBvb2xfdGVzdChtcF9jYWNoZSwgY29yZXMsIDApIDwgMCkNCj4gPiAgCQlnb3RvIGVycjsN Cj4gPg0KPiA+IC0JcHJpbnRmKCJzdGFydCBwZXJmb3JtYW5jZSB0ZXN0ICh3aXRoIHVzZXItb3du ZWQgY2FjaGUpXG4iKTsNCj4gPiArCWlmIChzdHJjbXAoZGVmYXVsdF9wb29sX29wcywgbXBfY2Fj aGVfb3BzKSAhPSAwKSB7DQo+ID4gKwkJcHJpbnRmKCJzdGFydCBwZXJmb3JtYW5jZSB0ZXN0IGZv ciAlcyAod2l0aCBjYWNoZSlcbiIsDQo+ID4gKwkJICAgICAgIGRlZmF1bHRfcG9vbF9vcHMpOw0K PiA+ICsJCWlmIChkb19vbmVfbWVtcG9vbF90ZXN0KGRlZmF1bHRfcG9vbF9jYWNoZSwgY29yZXMs IDApIDwgMCkNCj4gPiArCQkJZ290byBlcnI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcHJpbnRm KCJzdGFydCBwZXJmb3JtYW5jZSB0ZXN0ICh1c2luZyAlcywgd2l0aCB1c2VyLW93bmVkDQo+ID4g Y2FjaGUpXG4iLA0KPiA+ICsJICAgICAgIG1wX25vY2FjaGVfb3BzKTsNCj4gPiAgCWlmIChkb19v bmVfbWVtcG9vbF90ZXN0KG1wX25vY2FjaGUsIGNvcmVzLCAxKSA8IDApDQo+ID4gIAkJZ290byBl cnI7DQo+ID4NCj4gPiBAQCAtNDMxLDcgKzU1NSw4IEBAIGRvX2FsbF9tZW1wb29sX3BlcmZfdGVz dHModW5zaWduZWQgaW50IGNvcmVzKQ0KPiA+ICBlcnI6DQo+ID4gIAlydGVfbWVtcG9vbF9mcmVl KG1wX2NhY2hlKTsNCj4gPiAgCXJ0ZV9tZW1wb29sX2ZyZWUobXBfbm9jYWNoZSk7DQo+ID4gLQly dGVfbWVtcG9vbF9mcmVlKGRlZmF1bHRfcG9vbCk7DQo+ID4gKwlydGVfbWVtcG9vbF9mcmVlKGRl ZmF1bHRfcG9vbF9jYWNoZSk7DQo+ID4gKwlydGVfbWVtcG9vbF9mcmVlKGRlZmF1bHRfcG9vbF9u b2NhY2hlKTsNCj4gPiAgCXJldHVybiByZXQ7DQo+ID4gIH0NCj4gPg0KPiA+IC0tDQo+ID4gMi40 My4wDQoNCg==