From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 52CABA00D7; Thu, 31 Oct 2019 19:59:23 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 20A751D17B; Thu, 31 Oct 2019 19:59:23 +0100 (CET) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20067.outbound.protection.outlook.com [40.107.2.67]) by dpdk.org (Postfix) with ESMTP id 43AE51D175 for ; Thu, 31 Oct 2019 19:59:21 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QpX4MyDI0aMxFb6/d7TeDczjhXWOm0NU94Kanho8fg/3CxxsJ0hs6i5nLnhNtn0NYydljGHTKFey1vlViCwOhLiDFg7Z8U3raVbl5vGBj/tx+OV72yqVC4H7WsffFwHmEEpstyHUeBfhKCGc3d/BNUpCMX2Y2P3SCo/CsXS58NvPzQh3yEzVOzTuxTrGX+9kIyb0zjZ10HM9gWBXKoVrOjUlC1uYB11bHxHFzXJmD8JAI0tjUqg7YXQ9zf7HCefKNQD4PO6IGAvMZtsxSYS9J8Q41dV+bZd9P4YOqM0wJZ+oATY41bUrvXTV8d4KVshC2IszAoZhZSvvo9Pv4oz8mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yh4ExIHUdKGiek3wcbZ9ycKLMys5cgm1v1fMXNWfFAg=; b=LCsbrBhSk3RgGh9xDAzsfG70jiFJIpiGgJz6A0VZdKGGxIq+oU+YkFSkGH5NUlQQX+eq1GMf0bwxjx/d6rcJW5GHhkrD0UHeIgzMH+j9FeNNIVR66rm33TEosuZ2cBGutB0bYhrqpGsgpuStr5bGGy05Dxvfv216jM67rHp7X3wVTr/9W4iw41BFJBOwhfaiifCS56Z9tPQiGEj8fsDxp9SAjTuTbwjmGZNlm9zmNpYvEfZZI23cC6W39ytOIsXPEUjpGTxbAM6bcDB+bKXyND5CR/eSvQwRjAVwOKhlKE8KhNge6TB8z3OdpMqSfrLdghwr7cck3XcwtMsjzbRj8w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yh4ExIHUdKGiek3wcbZ9ycKLMys5cgm1v1fMXNWfFAg=; b=nCL//Fi2zeV3+snF823E1IOg708qh0XIXAsKvPMzWlF+tU/JmGazyDGNyjCN7CrmbYstI60ZPxKmBqCBQvOqx3haZ5ZjweMJFRvFxjjcyaf5YX7eWZUPlgPZsvU387mP2/12y3yjqFFreZPOvCGY9zerKHjN+X9i3dcaH7gzujA= Received: from AM4PR05MB3425.eurprd05.prod.outlook.com (10.171.190.15) by AM4PR05MB3218.eurprd05.prod.outlook.com (10.170.125.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2408.17; Thu, 31 Oct 2019 18:59:20 +0000 Received: from AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::70a7:a312:cbc6:d178]) by AM4PR05MB3425.eurprd05.prod.outlook.com ([fe80::70a7:a312:cbc6:d178%7]) with mapi id 15.20.2387.028; Thu, 31 Oct 2019 18:59:20 +0000 From: Ori Kam To: Ferruh Yigit , Wenzhuo Lu , Jingjing Wu , Bernard Iremonger CC: "dev@dpdk.org" , "stephen@networkplumber.org" Thread-Topic: [dpdk-dev] [PATCH v7 08/14] app/testpmd: add hairpin support Thread-Index: AQHVj31OWD1cQ7O1P0KiLGCiof6K2qd0/ZQAgAAEGGCAAAfxgIAABsOQ Date: Thu, 31 Oct 2019 18:59:20 +0000 Message-ID: References: <1569479349-36962-1-git-send-email-orika@mellanox.com> <1572479604-178752-1-git-send-email-orika@mellanox.com> <1572479604-178752-9-git-send-email-orika@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=orika@mellanox.com; x-originating-ip: [185.175.35.255] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 6b73339d-885d-4592-23a3-08d75e346fe0 x-ms-traffictypediagnostic: AM4PR05MB3218: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:162; x-forefront-prvs: 02070414A1 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(346002)(376002)(396003)(366004)(136003)(39860400002)(13464003)(189003)(199004)(66446008)(76176011)(478600001)(81166006)(64756008)(71190400001)(305945005)(52536014)(74316002)(6436002)(66556008)(66476007)(8676002)(81156014)(102836004)(3846002)(7696005)(33656002)(8936002)(71200400001)(7736002)(25786009)(5660300002)(66066001)(229853002)(99286004)(476003)(110136005)(6246003)(256004)(316002)(6506007)(55016002)(6116002)(9686003)(86362001)(54906003)(186003)(4326008)(14454004)(446003)(66946007)(26005)(486006)(2906002)(11346002)(53546011)(76116006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3218; H:AM4PR05MB3425.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jN6rvxHOczLDtqGS5hTp9pKM7oCaXxOGSEqmAq40xYzKq79j1PT7fi9PR/lRDNyms2KNrW0qOad1KaZzrNnGKiMa0FYhz9xinbBYBT7D10XQxq/tzuAONdJSS6CEVTYpENJoKBc+zanDrZsGU/zaWy4Cw50JiRj2KurhPi1DKMsL6o05ZeFDu+RcKuZKmItlb0ImrU2OCWzRPe0lvz87QHzLSPxjIxtmeBdwNoglvTlDRUUIqmREub026/NrSHm+wpIphxYuikVNymXnDHuuzBdSlm8+ZbUFmmqEDSZH6sm7WNmg+TSIRr+Lj7qqm226zX9vyv2Dc074Ox98PWAm9p9AysvtlyA9+1RvXcsmQecmvoDtHygodYbQj5SAV+PNFzgQbjn4BGWRo0F6CP9koL9KIOdZ0SSe7ssw49j8YL9mbiiDxPkRxVZUWXLCuqa2 x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b73339d-885d-4592-23a3-08d75e346fe0 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Oct 2019 18:59:20.2516 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: myfuwCbZ8Toruj9rjmXBHdk6s04YVgKk92f+s3OsAEm3nU5lJRbu+Wc41LqoXfi8sCDpWdjMC2HFfizFmGsjEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3218 Subject: Re: [dpdk-dev] [PATCH v7 08/14] app/testpmd: add hairpin support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogRmVycnVoIFlpZ2l0IDxm ZXJydWgueWlnaXRAaW50ZWwuY29tPg0KPiBTZW50OiBUaHVyc2RheSwgT2N0b2JlciAzMSwgMjAx OSA3OjU1IFBNDQo+IFRvOiBPcmkgS2FtIDxvcmlrYUBtZWxsYW5veC5jb20+OyBXZW56aHVvIEx1 IDx3ZW56aHVvLmx1QGludGVsLmNvbT47DQo+IEppbmdqaW5nIFd1IDxqaW5namluZy53dUBpbnRl bC5jb20+OyBCZXJuYXJkIElyZW1vbmdlcg0KPiA8YmVybmFyZC5pcmVtb25nZXJAaW50ZWwuY29t Pg0KPiBDYzogZGV2QGRwZGsub3JnOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZw0KPiBTdWJq ZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0ggdjcgMDgvMTRdIGFwcC90ZXN0cG1kOiBhZGQgaGFp cnBpbiBzdXBwb3J0DQo+IA0KPiBPbiAxMC8zMS8yMDE5IDU6MzYgUE0sIE9yaSBLYW0gd3JvdGU6 DQo+ID4gSGkgRmVycnVoLA0KPiA+DQo+ID4gVGhhbmtzLCBmb3IgdGhlIGNvbW1lbnRzIFBTQiwN Cj4gPg0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBGZXJydWgg WWlnaXQgPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+DQo+ID4+IFNlbnQ6IFRodXJzZGF5LCBPY3Rv YmVyIDMxLCAyMDE5IDc6MTIgUE0NCj4gPj4gVG86IE9yaSBLYW0gPG9yaWthQG1lbGxhbm94LmNv bT47IFdlbnpodW8gTHUgPHdlbnpodW8ubHVAaW50ZWwuY29tPjsNCj4gPj4gSmluZ2ppbmcgV3Ug PGppbmdqaW5nLnd1QGludGVsLmNvbT47IEJlcm5hcmQgSXJlbW9uZ2VyDQo+ID4+IDxiZXJuYXJk LmlyZW1vbmdlckBpbnRlbC5jb20+DQo+ID4+IENjOiBkZXZAZHBkay5vcmc7IHN0ZXBoZW5AbmV0 d29ya3BsdW1iZXIub3JnDQo+ID4+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2NyAw OC8xNF0gYXBwL3Rlc3RwbWQ6IGFkZCBoYWlycGluIHN1cHBvcnQNCj4gPj4NCj4gPj4gT24gMTAv MzAvMjAxOSAxMTo1MyBQTSwgT3JpIEthbSB3cm90ZToNCj4gPj4+IFRoaXMgY29tbWl0IGludHJv ZHVjZSB0aGUgaGFpcnBpbiBxdWV1ZXMgdG8gdGhlIHRlc3RwbWQuDQo+ID4+PiB0aGUgaGFpcnBp biBxdWV1ZSBpcyBjb25maWd1cmVkIHVzaW5nIC0taGFpcnBpbnE9PG4+DQo+ID4+PiB0aGUgaGFp cnBpbiBxdWV1ZSBhZGRzIG4gcXVldWUgb2JqZWN0cyBmb3IgYm90aCB0aGUgdG90YWwgbnVtYmVy DQo+ID4+PiBvZiBUWCBxdWV1ZXMgYW5kIFJYIHF1ZXVlcy4NCj4gPj4+IFRoZSBjb25uZWN0aW9u IGJldHdlZW4gdGhlIHF1ZXVlcyBhcmUgMSB0byAxLCBmaXJzdCBSeCBoYWlycGluIHF1ZXVlDQo+ ID4+PiB3aWxsIGJlIGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgVHggaGFpcnBpbiBxdWV1ZQ0KPiA+ Pj4NCj4gPj4+IFNpZ25lZC1vZmYtYnk6IE9yaSBLYW0gPG9yaWthQG1lbGxhbm94LmNvbT4NCj4g Pj4+IEFja2VkLWJ5OiBWaWFjaGVzbGF2IE92c2lpZW5rbyA8dmlhY2hlc2xhdm9AbWVsbGFub3gu Y29tPg0KPiA+Pj4gLS0tDQo+ID4+PiAgYXBwL3Rlc3QtcG1kL3BhcmFtZXRlcnMuYyB8ICAyOCAr KysrKysrKysrKysNCj4gPj4+ICBhcHAvdGVzdC1wbWQvdGVzdHBtZC5jICAgIHwgMTA5DQo+ID4+ ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gPj4+ICBh cHAvdGVzdC1wbWQvdGVzdHBtZC5oICAgIHwgICAzICsrDQo+ID4+DQo+ID4+IE5ldyBwYXJhbWV0 ZXIgc2hvdWxkIGJlIGRvY3VtZW50ZWQgaW4NCj4gPj4gJ2RvYy9ndWlkZXMvdGVzdHBtZF9hcHBf dWcvcnVuX2FwcC5yc3QnLA0KPiA+PiBjYW4geW91IHBsZWFzZSBkZXNjcmliZSBiZWZpZWZseSBo b3cgaXQgd29ya3MsIHdoYXQgdGhlIG1hcHBpbmcgd2lsbCBsaWtlIGJ5DQo+ID4+IGRlZmF1bHQg ZXRjLi4NCj4gPj4NCj4gPg0KPiA+IFRoZSBkZWZhdWx0IGlzIG5vIGhhaXJwaW4gcXVldWVzLA0K PiA+IElmIGhhaXJwaW5xID0geCBpcyBzcGVjaWZpZWQgdGhlbiB3ZSBhcmUgYWRkaW5nIHggcXVl dWVzIHRvIHRoZSBSeCBxdWV1ZSBsaXN0DQo+IGFuZCB4IHF1ZXVlcyB0byB0aGUgVHgsIGFuZCBi aW5kIHRoZW0gb25lDQo+ID4gUnggcXVldWUgdG8gb24gVHggcXVldWUuDQo+ID4NCj4gPiBGb3Ig ZXhhbXBsZTogdGVzdCBwbWQgcGFyYW1ldGVycyBhcmU6DQo+ID4gLS1yeHE9MyAtLXR4cT0yIC0t aGFpcnBpbnE9NCB0aGUgcmVzdWx0IHdpbGwgYmU6DQo+ID4NCj4gPiAzIG5vcm1hbCBUeHEgKHF1 ZXVlcyAwLDEsMikNCj4gPiAyIG5vcm1hbCBUeHEgKHF1ZXVlcyAwLDEpDQo+ID4gNCBoYWlycGlu IHF1ZXVlcyAoUnhxIDMsNCw1LDYgVHhxIDIsMyw0LDUpIHdoaWxlIFJ4cSgzKSB3aWxsIGJlIGNv bm5lY3RlZCB0bw0KPiBUeHEoMiksIFJ4cSg0KSB3aWxsIGJlIGNvbm5lY3RlZCB0byBUeHEoMykg YW5kIHNvIG9uLg0KPiANCj4gVGhhbmtzLCBjYW4geW91IHBsZWFzZSBwdXQgdGhlbSBpbnRvIGRv Y3VtZW50YXRpb24gaW4gbmV4dCB2ZXJzaW9uPw0KPiANCg0KU3VyZSBubyBwcm9ibGVtLA0KDQo+ ID4NCj4gPj4gPC4uLj4NCj4gPj4NCj4gPj4+IEBAIC0yMDI4LDYgKzIwNzYsMTEgQEAgc3RydWN0 IGV4dG1lbV9wYXJhbSB7DQo+ID4+PiAgCXF1ZXVlaWRfdCBxaTsNCj4gPj4+ICAJc3RydWN0IHJ0 ZV9wb3J0ICpwb3J0Ow0KPiA+Pj4gIAlzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIgbWFjX2FkZHI7DQo+ ID4+PiArCXN0cnVjdCBydGVfZXRoX2hhaXJwaW5fY29uZiBoYWlycGluX2NvbmYgPSB7DQo+ID4+ PiArCQkucGVlcl9jb3VudCA9IDEsDQo+ID4+PiArCX07DQo+ID4+PiArCWludCBpOw0KPiA+Pj4g KwlzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NhcCBjYXA7DQo+ID4+Pg0KPiA+Pj4gIAlpZiAocG9y dF9pZF9pc19pbnZhbGlkKHBpZCwgRU5BQkxFRF9XQVJOKSkNCj4gPj4+ICAJCXJldHVybiAwOw0K PiA+Pj4gQEAgLTIwNjAsOSArMjExMywxNiBAQCBzdHJ1Y3QgZXh0bWVtX3BhcmFtIHsNCj4gPj4+ ICAJCQljb25maWd1cmVfcnh0eF9kdW1wX2NhbGxiYWNrcygwKTsNCj4gPj4+ICAJCQlwcmludGYo IkNvbmZpZ3VyaW5nIFBvcnQgJWQgKHNvY2tldCAldSlcbiIsIHBpLA0KPiA+Pj4gIAkJCQkJcG9y dC0+c29ja2V0X2lkKTsNCj4gPj4+ICsJCQlpZiAobmJfaGFpcnBpbnEgPiAwICYmDQo+ID4+PiAr CQkJICAgIHJ0ZV9ldGhfZGV2X2hhaXJwaW5fY2FwYWJpbGl0eV9nZXQocGksICZjYXApKSB7DQo+ ID4+PiArCQkJCXByaW50ZigiUG9ydCAlZCBkb2Vzbid0IHN1cHBvcnQgaGFpcnBpbiAiDQo+ID4+ PiArCQkJCSAgICAgICAicXVldWVzXG4iLCBwaSk7DQo+ID4+PiArCQkJCXJldHVybiAtMTsNCj4g Pj4+ICsJCQl9DQo+ID4+PiAgCQkJLyogY29uZmlndXJlIHBvcnQgKi8NCj4gPj4+IC0JCQlkaWFn ID0gcnRlX2V0aF9kZXZfY29uZmlndXJlKHBpLCBuYl9yeHEsIG5iX3R4cSwNCj4gPj4+IC0JCQkJ CQkmKHBvcnQtPmRldl9jb25mKSk7DQo+ID4+PiArCQkJZGlhZyA9IHJ0ZV9ldGhfZGV2X2NvbmZp Z3VyZShwaSwgbmJfcnhxICsNCj4gPj4gbmJfaGFpcnBpbnEsDQo+ID4+PiArCQkJCQkJICAgICBu Yl90eHEgKyBuYl9oYWlycGlucSwNCj4gPj4+ICsJCQkJCQkgICAgICYocG9ydC0+ZGV2X2NvbmYp KTsNCj4gPj4+ICAJCQlpZiAoZGlhZyAhPSAwKSB7DQo+ID4+PiAgCQkJCWlmIChydGVfYXRvbWlj MTZfY21wc2V0KCYocG9ydC0+cG9ydF9zdGF0dXMpLA0KPiA+Pj4gIAkJCQlSVEVfUE9SVF9IQU5E TElORywgUlRFX1BPUlRfU1RPUFBFRCkNCj4gPj4gPT0gMCkNCj4gPj4+IEBAIC0yMTU1LDYgKzIy MTUsNTEgQEAgc3RydWN0IGV4dG1lbV9wYXJhbSB7DQo+ID4+PiAgCQkJCXBvcnQtPm5lZWRfcmVj b25maWdfcXVldWVzID0gMTsNCj4gPj4+ICAJCQkJcmV0dXJuIC0xOw0KPiA+Pj4gIAkJCX0NCj4g Pj4+ICsJCQkvKiBzZXR1cCBoYWlycGluIHF1ZXVlcyAqLw0KPiA+Pj4gKwkJCWkgPSAwOw0KPiA+ Pj4gKwkJCWZvciAocWkgPSBuYl90eHE7IHFpIDwgbmJfaGFpcnBpbnEgKyBuYl90eHE7IHFpKysp IHsNCj4gPj4+ICsJCQkJaGFpcnBpbl9jb25mLnBlZXJzWzBdLnBvcnQgPSBwaTsNCj4gPj4+ICsJ CQkJaGFpcnBpbl9jb25mLnBlZXJzWzBdLnF1ZXVlID0gaSArIG5iX3J4cTsNCj4gPj4+ICsJCQkJ ZGlhZyA9IHJ0ZV9ldGhfdHhfaGFpcnBpbl9xdWV1ZV9zZXR1cA0KPiA+Pj4gKwkJCQkJKHBpLCBx aSwgbmJfdHhkLCAmaGFpcnBpbl9jb25mKTsNCj4gPj4+ICsJCQkJaSsrOw0KPiA+Pj4gKwkJCQlp ZiAoZGlhZyA9PSAwKQ0KPiA+Pj4gKwkJCQkJY29udGludWU7DQo+ID4+PiArDQo+ID4+PiArCQkJ CS8qIEZhaWwgdG8gc2V0dXAgcnggcXVldWUsIHJldHVybiAqLw0KPiA+Pj4gKwkJCQlpZiAocnRl X2F0b21pYzE2X2NtcHNldCgmKHBvcnQtPnBvcnRfc3RhdHVzKSwNCj4gPj4+ICsNCj4gPj4gCVJU RV9QT1JUX0hBTkRMSU5HLA0KPiA+Pj4gKwkJCQkJCQlSVEVfUE9SVF9TVE9QUEVEKQ0KPiA+PiA9 PSAwKQ0KPiA+Pj4gKwkJCQkJcHJpbnRmKCJQb3J0ICVkIGNhbiBub3QgYmUgc2V0IGJhY2sgIg0K PiA+Pj4gKwkJCQkJCQkidG8gc3RvcHBlZFxuIiwgcGkpOw0KPiA+Pj4gKwkJCQlwcmludGYoIkZh aWwgdG8gY29uZmlndXJlIHBvcnQgJWQgaGFpcnBpbiAiDQo+ID4+PiArCQkJCSAgICAgICAicXVl dWVzXG4iLCBwaSk7DQo+ID4+PiArCQkJCS8qIHRyeSB0byByZWNvbmZpZ3VyZSBxdWV1ZXMgbmV4 dCB0aW1lICovDQo+ID4+PiArCQkJCXBvcnQtPm5lZWRfcmVjb25maWdfcXVldWVzID0gMTsNCj4g Pj4+ICsJCQkJcmV0dXJuIC0xOw0KPiA+Pj4gKwkJCX0NCj4gPj4+ICsJCQlpID0gMDsNCj4gPj4+ ICsJCQlmb3IgKHFpID0gbmJfcnhxOyBxaSA8IG5iX2hhaXJwaW5xICsgbmJfcnhxOyBxaSsrKSB7 DQo+ID4+PiArCQkJCWhhaXJwaW5fY29uZi5wZWVyc1swXS5wb3J0ID0gcGk7DQo+ID4+PiArCQkJ CWhhaXJwaW5fY29uZi5wZWVyc1swXS5xdWV1ZSA9IGkgKyBuYl90eHE7DQo+ID4+PiArCQkJCWRp YWcgPSBydGVfZXRoX3J4X2hhaXJwaW5fcXVldWVfc2V0dXANCj4gPj4+ICsJCQkJCShwaSwgcWks IG5iX3J4ZCwgJmhhaXJwaW5fY29uZik7DQo+ID4+PiArCQkJCWkrKzsNCj4gPj4+ICsJCQkJaWYg KGRpYWcgPT0gMCkNCj4gPj4+ICsJCQkJCWNvbnRpbnVlOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJCQkv KiBGYWlsIHRvIHNldHVwIHJ4IHF1ZXVlLCByZXR1cm4gKi8NCj4gPj4+ICsJCQkJaWYgKHJ0ZV9h dG9taWMxNl9jbXBzZXQoJihwb3J0LT5wb3J0X3N0YXR1cyksDQo+ID4+PiArDQo+ID4+IAlSVEVf UE9SVF9IQU5ETElORywNCj4gPj4+ICsJCQkJCQkJUlRFX1BPUlRfU1RPUFBFRCkNCj4gPj4gPT0g MCkNCj4gPj4+ICsJCQkJCXByaW50ZigiUG9ydCAlZCBjYW4gbm90IGJlIHNldCBiYWNrICINCj4g Pj4+ICsJCQkJCQkJInRvIHN0b3BwZWRcbiIsIHBpKTsNCj4gPj4+ICsJCQkJcHJpbnRmKCJGYWls IHRvIGNvbmZpZ3VyZSBwb3J0ICVkIGhhaXJwaW4gIg0KPiA+Pj4gKwkJCQkgICAgICAgInF1ZXVl c1xuIiwgcGkpOw0KPiA+Pj4gKwkJCQkvKiB0cnkgdG8gcmVjb25maWd1cmUgcXVldWVzIG5leHQg dGltZSAqLw0KPiA+Pj4gKwkJCQlwb3J0LT5uZWVkX3JlY29uZmlnX3F1ZXVlcyA9IDE7DQo+ID4+ PiArCQkJCXJldHVybiAtMTsNCj4gPj4+ICsJCQl9DQo+ID4+DQo+ID4+ICdzdGFydF9wb3J0KCkn IGZ1bmN0aW9uIGlzIGFscmVhZHkgaHVnZSwgd2hhdCBkbyB5b3UgdGhpbmsgbW92aW5nIGhhaXJw aW4NCj4gPj4gcmVsYXRlZCBzZXR1cCBpbnRvIGEgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIGNhbGwg aXQgd2hlbiAibmJfaGFpcnBpbnEgPiAwIg0KPiBvbmx5Pw0KPiA+PiBUaGlzIG1ha2VzIHRoZSBo YWlycGluIHJlbGF0ZWQgY29uZmlnIG1vcmUgY2xlYXIgYW5kICdzdGFydF9wb3J0KCknIGZ1bmN0 aW9uDQo+ID4+IHNpbXBsZXIuDQo+ID4+IEkgdGhpbmsgYWxsIGhhaXJwaW4gcmVsYXRlZCBvcGVy YXRpb25zIGNhbiBiZSBleHRyYWN0ZWQsIGxpa2UgY2FwYWJpbGl0eSBjaGVjaywNCj4gPj4gJ3J0 ZV9ldGhfZGV2X2NvbmZpZ3VyZScgJiBoYWlycGluIHF1ZXVlIHNldHVwLg0KPiA+DQo+ID4gSSBo YXZlIG5vIHN0cm9uZyBmZWVsaW5nLCBJIGp1c3Qgd2FudGVkIHRvIGtlZXAgdGhlIGZ1bmN0aW9u IHdpdGggdGhlIHNhbWUNCj4gZm9ybWF0IHRoYXQgYWxsIGFjdGlvbnMgYXJlIGRvbmUgaW5zaWRl DQo+ID4gdGhlIGZ1bmN0aW9uLCBhbHNvIGl0IHdhcyBteSBpbnRlbnRpb24gdG8gZWFzaWx5IHNo b3cgdGhlIGNvbm5lY3Rpb24gYmV0d2Vlbg0KPiB0aGUgdHdvIHR5cGVzIG9mIHF1ZXVlcy4NCj4g Pg0KPiA+IEJlc3QsDQo+ID4gT3JpDQo+ID4NCg0KVGhhbmtzLA0KT3JpDQo=