From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 05F4BA05D3 for ; Fri, 29 Mar 2019 19:23:00 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9D6FF4C99; Fri, 29 Mar 2019 19:22:59 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 7331C4C96; Fri, 29 Mar 2019 19:22:57 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Mar 2019 11:22:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,285,1549958400"; d="scan'208";a="157029980" Received: from irsmsx152.ger.corp.intel.com ([163.33.192.66]) by fmsmga004.fm.intel.com with ESMTP; 29 Mar 2019 11:22:55 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.210]) by IRSMSX152.ger.corp.intel.com ([169.254.6.139]) with mapi id 14.03.0415.000; Fri, 29 Mar 2019 18:22:54 +0000 From: "Ananyev, Konstantin" To: Akhil Goyal , "dev@dpdk.org" CC: "stable@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH] examples/ipsec-secgw: fix SPD no-match is misinterpreted Thread-Index: AQHU5WR0j0FJr5hzE0meqNlext9dx6YicJsAgAB33MA= Date: Fri, 29 Mar 2019 18:22:53 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772580136561F21@irsmsx105.ger.corp.intel.com> References: <20190328124733.25580-1-konstantin.ananyev@intel.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOWE4YzU5YzItMzFlZC00YjE5LTk4ZjItNGMxZWVjZDc4MWI0IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiY2FhN0tXZVdoWXgwU2ZpdmIyem81Mlc1Qnk1Nnk2bjFhR0VGellRWnhhOWJWUys2SXlnRit3M0tHWlFYWm84aCJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] examples/ipsec-secgw: fix SPD no-match is misinterpreted 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" Message-ID: <20190329182253.mYJjmDz1PkyRBnHldvnQ-bFy8XWMHf92br_k3AcSz9Q@z> SGkgQWtoaWwsDQoNCj4gDQo+IE9uIDMvMjgvMjAxOSA2OjE3IFBNLCBLb25zdGFudGluIEFuYW55 ZXYgd3JvdGU6DQo+ID4gYWNsX2NsYXNzaWZ5KCkgcmV0dXJucyB6ZXJvIHZhbHVlIHdoZW4gbm8g bWF0Y2hpbmcgcnVsZSB3YXMgZm91bmQuDQo+ID4gQ3VycmVudGx5IGlwc2VjLXNlY2d3IHRyZWF0 cyBpdCBhcyBhIHZhbGlkIFNQSSB2YWx1ZSwgdGhvdWdoIGl0IGhhcw0KPiA+IHRvIGRpc2NhcmQg c3VjaCBwYWNrZXRzLg0KPiA+IEVycm9yIGNvdWxkIGJlIGVhc2lseSBvYnNlcnZlZCBieSBzZW5k aW5nIG91dGJvdW5kIHVubWF0Y2hlZCBwYWNrZXRzLA0KPiA+IHVzZXIgd2lsbCBzZWUgc29tZXRo aW5nIGxpa2UgdGhhdCBpbiB0aGUgbG9nOg0KPiA+IElQU0VDOiBObyBjcnlwdG9kZXY6IGNvcmUg NywgY2lwaGVyX2FsZ28gMCwgYXV0aF9hbGdvIDAsIGFlYWRfYWxnbyAwDQo+ID4NCj4gPiBUbyBm aXggaXQgd2UgbmVlZCB0byB0cmVhdCBwYWNrZXRzIHdpdGggemVybyByZXN1bHQgZnJvbSBhY2xf Y2xhc3NpZnkoKQ0KPiA+IGFzIGludmFsaWQgb25lcy4gQWxzbyB3ZSBjYW4gY2hhbmdlIERJU0NB UkQgYW5kIEJZUEFTUyB2YWx1ZXMgdG8NCj4gPiBzaW1wbGlmeSBjaGVja3MgYW5kIHNhdmUgc29t ZSBleHRyYSBzcGFjZSBmb3IgdmFsaWQgU1BJIHZhbHVlcy4NCj4gc3BpIHZhbHVlID0wIGlzIGlu dmFsaWQgYnV0IHplcm8gcmVzdWx0IG1heSBoYXZlIGEgdmFsaWQgcGFja2V0Lg0KPiBjb25zaWRl ciBhIGNhc2U6DQo+IFNQSSA9IDEyOCBvciAyNTYgb3IgNTEyIGFuZCBzbyBvbsKgID0+IHNhX2lk eCA9IDAgYW5kIHJlc3VsdCB3aWxsIGNvbWUgYXMNCj4gemVybywgYW5kIHRoaXMgd291bGQgYmUg YSB2YWxpZCBwYWNrZXQuDQo+IA0KPiBJIHNlZSB0aGF0IHRoZSBzYV9pZHjCoCBjYWxjdWxhdGlv biBsb2dpYyBpcyBub3QgY29ycmVjdCBpbiBmaXJzdCBwbGFjZS4NCj4gVGhlcmUgd2lsbCBiZSBt dWx0aXBsZSBzcGkgdmFsdWVzIGZvciBzYW1lIHNhX2lkeCB3aGljaCBpcyBub3QgY29ycmVjdC4N Cj4gU28gd2UgaGF2ZSAyIGlzc3VlcyBoZXJlOg0KPiAxLiByZXN1bHQgPSAwLCBtZWFucyBzYV9p ZHggPTAgd2hpY2ggbWF5IGJlIGNvcnJlY3QsIGJ1dCBhcyB5b3Ugc2FpZCBpZg0KPiBhY2xfY2xh c3NpZnkgZmFpbHMsIGl0IGFsc28gcmV0dXJuIDAuDQo+IDIuIFNQSSB2YWx1ZXMgd2hpY2ggYXJl IElQU0VDX1NBX01BWF9FTlRSSUVTIGFwYXJ0IHdpbGwgaGF2ZSBzYW1lIHNhX2lkeA0KPiBhbmQg d2lsbCBrZWVwIG9uIG92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyBvbmVzLg0KPiANCg0KT2sgSSBz ZWUgd2hhdCB5b3UgbWVhbi4NClRoZSBlYXNpZXN0IGZpeCBmb3IgdGhhdCAodGlsbCB3ZSdsbCBo YXZlIHByb3BlciBTQUQpIHdvdWxkIGJlIG5vdCB0byBhbGxvdyANClNQSXMgYmlnZ2VyIHRoYW4g SVBTRUNfU0FfTUFYX0VOVFJJRVMuDQpBcmUgeW91IG9rIHdpdGggdGhhdD8NCktvbnN0YW50aW4N Cg0KDQo+IFNvIEkgYmVsaWV2ZSB0aGUgZml4IGluIHRoaXMgcGF0Y2ggaXMgbm90IGVub3VnaCB0 byByZXNvbHZlIHRoZXNlDQo+IGlzc3Vlcy4gSXQgd2lsbCB3b3JrIG9uIHNvbWUgdmFsdWVzIGFu ZCB3aWxsIGJyZWFrIG9uIG90aGVyIHZhbHVlcyBvZiBzcGkuDQo+IA0KPiAtQWtoaWwNCj4gDQo+ ID4NCj4gPiBGaXhlczogOTA2MjU3ZTk2NWI3ICgiZXhhbXBsZXMvaXBzZWMtc2VjZ3c6IHN1cHBv cnQgSVB2NiIpDQo+ID4gRml4ZXM6IDJhNTEwNmFmMTMyYiAoImV4YW1wbGVzL2lwc2VjLXNlY2d3 OiBmaXggY29ybmVyIGNhc2UgZm9yIFNQSSB2YWx1ZSIpDQo+ID4gQ2M6IHN0YWJsZUBkcGRrLm9y Zw0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogS29uc3RhbnRpbiBBbmFueWV2IDxrb25zdGFudGlu LmFuYW55ZXZAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICAgZXhhbXBsZXMvaXBzZWMtc2VjZ3cv aXBzZWMtc2VjZ3cuYyB8IDEyICsrKysrKy0tLS0tLQ0KPiA+ICAgZXhhbXBsZXMvaXBzZWMtc2Vj Z3cvaXBzZWMuaCAgICAgICB8ICA2ICsrLS0tLQ0KPiA+ICAgZXhhbXBsZXMvaXBzZWMtc2VjZ3cv c3A0LmMgICAgICAgICB8IDExICsrKysrKysrLS0tDQo+ID4gICBleGFtcGxlcy9pcHNlYy1zZWNn dy9zcDYuYyAgICAgICAgIHwgMTEgKysrKysrKystLS0NCj4gPiAgIDQgZmlsZXMgY2hhbmdlZCwg MjQgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEv ZXhhbXBsZXMvaXBzZWMtc2VjZ3cvaXBzZWMtc2VjZ3cuYyBiL2V4YW1wbGVzL2lwc2VjLXNlY2d3 L2lwc2VjLXNlY2d3LmMNCj4gPiBpbmRleCBmZmJkMDBiMDguLjU5ZTA4NDIzNCAxMDA2NDQNCj4g PiAtLS0gYS9leGFtcGxlcy9pcHNlYy1zZWNndy9pcHNlYy1zZWNndy5jDQo+ID4gKysrIGIvZXhh bXBsZXMvaXBzZWMtc2VjZ3cvaXBzZWMtc2VjZ3cuYw0KPiA+IEBAIC00MzgsMTEgKzQzOCwxMSBA QCBpbmJvdW5kX3NwX3NhKHN0cnVjdCBzcF9jdHggKnNwLCBzdHJ1Y3Qgc2FfY3R4ICpzYSwgc3Ry dWN0IHRyYWZmaWNfdHlwZSAqaXAsDQo+ID4gICAJZm9yIChpID0gMDsgaSA8IGlwLT5udW07IGkr Kykgew0KPiA+ICAgCQltID0gaXAtPnBrdHNbaV07DQo+ID4gICAJCXJlcyA9IGlwLT5yZXNbaV07 DQo+ID4gLQkJaWYgKHJlcyAmIEJZUEFTUykgew0KPiA+ICsJCWlmIChyZXMgPT0gQllQQVNTKSB7 DQo+ID4gICAJCQlpcC0+cGt0c1tqKytdID0gbTsNCj4gPiAgIAkJCWNvbnRpbnVlOw0KPiA+ICAg CQl9DQo+ID4gLQkJaWYgKHJlcyAmIERJU0NBUkQpIHsNCj4gPiArCQlpZiAocmVzID09IERJU0NB UkQpIHsNCj4gPiAgIAkJCXJ0ZV9wa3RtYnVmX2ZyZWUobSk7DQo+ID4gICAJCQljb250aW51ZTsN Cj4gPiAgIAkJfQ0KPiA+IEBAIC00NTMsNyArNDUzLDcgQEAgaW5ib3VuZF9zcF9zYShzdHJ1Y3Qg c3BfY3R4ICpzcCwgc3RydWN0IHNhX2N0eCAqc2EsIHN0cnVjdCB0cmFmZmljX3R5cGUgKmlwLA0K PiA+ICAgCQkJY29udGludWU7DQo+ID4gICAJCX0NCj4gPg0KPiA+IC0JCXNhX2lkeCA9IGlwLT5y ZXNbaV0gJiBQUk9URUNUX01BU0s7DQo+ID4gKwkJc2FfaWR4ID0gaXAtPnJlc1tpXTsNCj4gPiAg IAkJaWYgKHNhX2lkeCA+PSBJUFNFQ19TQV9NQVhfRU5UUklFUyB8fA0KPiA+ICAgCQkJCSFpbmJv dW5kX3NhX2NoZWNrKHNhLCBtLCBzYV9pZHgpKSB7DQo+ID4gICAJCQlydGVfcGt0bWJ1Zl9mcmVl KG0pOw0KPiA+IEBAIC01NDEsMTAgKzU0MSwxMCBAQCBvdXRib3VuZF9zcChzdHJ1Y3Qgc3BfY3R4 ICpzcCwgc3RydWN0IHRyYWZmaWNfdHlwZSAqaXAsDQo+ID4gICAJaiA9IDA7DQo+ID4gICAJZm9y IChpID0gMDsgaSA8IGlwLT5udW07IGkrKykgew0KPiA+ICAgCQltID0gaXAtPnBrdHNbaV07DQo+ ID4gLQkJc2FfaWR4ID0gaXAtPnJlc1tpXSAmIFBST1RFQ1RfTUFTSzsNCj4gPiAtCQlpZiAoaXAt PnJlc1tpXSAmIERJU0NBUkQpDQo+ID4gKwkJc2FfaWR4ID0gaXAtPnJlc1tpXTsNCj4gPiArCQlp ZiAoc2FfaWR4ID09IERJU0NBUkQpDQo+ID4gICAJCQlydGVfcGt0bWJ1Zl9mcmVlKG0pOw0KPiA+ IC0JCWVsc2UgaWYgKGlwLT5yZXNbaV0gJiBCWVBBU1MpDQo+ID4gKwkJZWxzZSBpZiAoc2FfaWR4 ID09IEJZUEFTUykNCj4gPiAgIAkJCWlwLT5wa3RzW2orK10gPSBtOw0KPiA+ICAgCQllbHNlIGlm IChzYV9pZHggPCBJUFNFQ19TQV9NQVhfRU5UUklFUykgew0KPiA+ICAgCQkJaXBzZWMtPnJlc1tp cHNlYy0+bnVtXSA9IHNhX2lkeDsNCj4gPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvaXBzZWMtc2Vj Z3cvaXBzZWMuaCBiL2V4YW1wbGVzL2lwc2VjLXNlY2d3L2lwc2VjLmgNCj4gPiBpbmRleCA5OWY0 OWQ2NWYuLjQ0ZGFmMzg0YiAxMDA2NDQNCj4gPiAtLS0gYS9leGFtcGxlcy9pcHNlYy1zZWNndy9p cHNlYy5oDQo+ID4gKysrIGIvZXhhbXBsZXMvaXBzZWMtc2VjZ3cvaXBzZWMuaA0KPiA+IEBAIC00 MSwxMCArNDEsOCBAQA0KPiA+ICAgI2RlZmluZSBTUEkySURYKHNwaSkgKHNwaSAmIChJUFNFQ19T QV9NQVhfRU5UUklFUyAtIDEpKQ0KPiA+ICAgI2RlZmluZSBJTlZBTElEX1NQSSAoMCkNCj4gPg0K PiA+IC0jZGVmaW5lIERJU0NBUkQgKDB4ODAwMDAwMDApDQo+ID4gLSNkZWZpbmUgQllQQVNTICgw eDQwMDAwMDAwKQ0KPiA+IC0jZGVmaW5lIFBST1RFQ1RfTUFTSyAoMHgzZmZmZmZmZikNCj4gPiAt I2RlZmluZSBQUk9URUNUKHNhX2lkeCkgKFNQSTJJRFgoc2FfaWR4KSAmIFBST1RFQ1RfTUFTSykg LyogU0EgaWR4IDMwIGJpdHMgKi8NCj4gPiArI2RlZmluZSBESVNDQVJECUlOVkFMSURfU1BJDQo+ ID4gKyNkZWZpbmUgQllQQVNTCVVJTlQzMl9NQVgNCj4gPg0KPiA+ICAgI2RlZmluZSBJUFNFQ19Y Rk9STV9NQVggMg0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2lwc2VjLXNlY2d3L3Nw NC5jIGIvZXhhbXBsZXMvaXBzZWMtc2VjZ3cvc3A0LmMNCj4gPiBpbmRleCBkMWRjNjRiYWQuLmJm YWRkYzUyZSAxMDA2NDQNCj4gPiAtLS0gYS9leGFtcGxlcy9pcHNlYy1zZWNndy9zcDQuYw0KPiA+ ICsrKyBiL2V4YW1wbGVzL2lwc2VjLXNlY2d3L3NwNC5jDQo+ID4gQEAgLTk5LDYgKzk5LDcgQEAg cGFyc2Vfc3A0X3Rva2VucyhjaGFyICoqdG9rZW5zLCB1aW50MzJfdCBuX3Rva2VucywNCj4gPg0K PiA+ICAgCXVpbnQzMl90ICpyaSA9IE5VTEw7IC8qIHJ1bGUgaW5kZXggKi8NCj4gPiAgIAl1aW50 MzJfdCB0aSA9IDA7IC8qIHRva2VuIGluZGV4ICovDQo+ID4gKwl1aW50MzJfdCB0djsNCj4gPg0K PiA+ICAgCXVpbnQzMl90IGVzcF9wID0gMDsNCj4gPiAgIAl1aW50MzJfdCBwcm90ZWN0X3AgPSAw Ow0KPiA+IEBAIC0xNjksOCArMTcwLDEyIEBAIHBhcnNlX3NwNF90b2tlbnMoY2hhciAqKnRva2Vu cywgdWludDMyX3Qgbl90b2tlbnMsDQo+ID4gICAJCQlpZiAoc3RhdHVzLT5zdGF0dXMgPCAwKQ0K PiA+ICAgCQkJCXJldHVybjsNCj4gPg0KPiA+IC0JCQlydWxlX2lwdjQtPmRhdGEudXNlcmRhdGEg PQ0KPiA+IC0JCQkJUFJPVEVDVChhdG9pKHRva2Vuc1t0aV0pKTsNCj4gPiArCQkJdHYgPSBhdG9p KHRva2Vuc1t0aV0pOw0KPiA+ICsJCQlBUFBfQ0hFQ0sodHYgIT0gRElTQ0FSRCAmJiB0diAhPSBC WVBBU1MsIHN0YXR1cywNCj4gPiArCQkJCSJpbnZhbGlkIFNQSTogJXMiLCB0b2tlbnNbdGldKTsN Cj4gPiArCQkJaWYgKHN0YXR1cy0+c3RhdHVzIDwgMCkNCj4gPiArCQkJCXJldHVybjsNCj4gPiAr CQkJcnVsZV9pcHY0LT5kYXRhLnVzZXJkYXRhID0gdHY7DQo+ID4NCj4gPiAgIAkJCXByb3RlY3Rf cCA9IDE7DQo+ID4gICAJCQljb250aW51ZTsNCj4gPiBAQCAtNTIzLDcgKzUyOCw3IEBAIHNwNF9z cGlfcHJlc2VudCh1aW50MzJfdCBzcGksIGludCBpbmJvdW5kKQ0KPiA+ICAgCX0NCj4gPg0KPiA+ ICAgCWZvciAoaSA9IDA7IGkgIT0gbnVtOyBpKyspIHsNCj4gPiAtCQlpZiAoYWNyW2ldLmRhdGEu dXNlcmRhdGEgPT0gUFJPVEVDVChzcGkpKQ0KPiA+ICsJCWlmIChhY3JbaV0uZGF0YS51c2VyZGF0 YSA9PSBzcGkpDQo+ID4gICAJCQlyZXR1cm4gaTsNCj4gPiAgIAl9DQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvZXhhbXBsZXMvaXBzZWMtc2VjZ3cvc3A2LmMgYi9leGFtcGxlcy9pcHNlYy1zZWNndy9z cDYuYw0KPiA+IGluZGV4IGU2N2Q4NWFhZi4uYjdmY2Y3YzE2IDEwMDY0NA0KPiA+IC0tLSBhL2V4 YW1wbGVzL2lwc2VjLXNlY2d3L3NwNi5jDQo+ID4gKysrIGIvZXhhbXBsZXMvaXBzZWMtc2VjZ3cv c3A2LmMNCj4gPiBAQCAtMTMwLDYgKzEzMCw3IEBAIHBhcnNlX3NwNl90b2tlbnMoY2hhciAqKnRv a2VucywgdWludDMyX3Qgbl90b2tlbnMsDQo+ID4NCj4gPiAgIAl1aW50MzJfdCAqcmkgPSBOVUxM OyAvKiBydWxlIGluZGV4ICovDQo+ID4gICAJdWludDMyX3QgdGkgPSAwOyAvKiB0b2tlbiBpbmRl eCAqLw0KPiA+ICsJdWludDMyX3QgdHY7DQo+ID4NCj4gPiAgIAl1aW50MzJfdCBlc3BfcCA9IDA7 DQo+ID4gICAJdWludDMyX3QgcHJvdGVjdF9wID0gMDsNCj4gPiBAQCAtMjAyLDggKzIwMywxMiBA QCBwYXJzZV9zcDZfdG9rZW5zKGNoYXIgKip0b2tlbnMsIHVpbnQzMl90IG5fdG9rZW5zLA0KPiA+ ICAgCQkJaWYgKHN0YXR1cy0+c3RhdHVzIDwgMCkNCj4gPiAgIAkJCQlyZXR1cm47DQo+ID4NCj4g PiAtCQkJcnVsZV9pcHY2LT5kYXRhLnVzZXJkYXRhID0NCj4gPiAtCQkJCVBST1RFQ1QoYXRvaSh0 b2tlbnNbdGldKSk7DQo+ID4gKwkJCXR2ID0gYXRvaSh0b2tlbnNbdGldKTsNCj4gPiArCQkJQVBQ X0NIRUNLKHR2ICE9IERJU0NBUkQgJiYgdHYgIT0gQllQQVNTLCBzdGF0dXMsDQo+ID4gKwkJCQki aW52YWxpZCBTUEk6ICVzIiwgdG9rZW5zW3RpXSk7DQo+ID4gKwkJCWlmIChzdGF0dXMtPnN0YXR1 cyA8IDApDQo+ID4gKwkJCQlyZXR1cm47DQo+ID4gKwkJCXJ1bGVfaXB2Ni0+ZGF0YS51c2VyZGF0 YSA9IHR2Ow0KPiA+DQo+ID4gICAJCQlwcm90ZWN0X3AgPSAxOw0KPiA+ICAgCQkJY29udGludWU7 DQo+ID4gQEAgLTYzNyw3ICs2NDIsNyBAQCBzcDZfc3BpX3ByZXNlbnQodWludDMyX3Qgc3BpLCBp bnQgaW5ib3VuZCkNCj4gPiAgIAl9DQo+ID4NCj4gPiAgIAlmb3IgKGkgPSAwOyBpICE9IG51bTsg aSsrKSB7DQo+ID4gLQkJaWYgKGFjcltpXS5kYXRhLnVzZXJkYXRhID09IFBST1RFQ1Qoc3BpKSkN Cj4gPiArCQlpZiAoYWNyW2ldLmRhdGEudXNlcmRhdGEgPT0gc3BpKQ0KPiA+ICAgCQkJcmV0dXJu IGk7DQo+ID4gICAJfQ0KPiA+DQoNCg==