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 A61F4428C4; Mon, 3 Apr 2023 23:46:09 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3B1874067E; Mon, 3 Apr 2023 23:46:09 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on2083.outbound.protection.outlook.com [40.107.15.83]) by mails.dpdk.org (Postfix) with ESMTP id 0A68C40156 for ; Mon, 3 Apr 2023 23:46:07 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FooA8EAvDIidtrhsZcFdvrl3T4EuFzK19FwQmBTgw5e36grJ9kBNw6TrOawlepJoGA+vLVjIMAu67sASKeiTFNKrn2h0Vbh9uLfB6KwzRq04C0yRDbzCzX93LWsxumFM/NbycNDjf8ep7717nvWRQRiMZFKyAaGYU8W07w2qUgqDSw2V1qKekjiXYTMiS6n1HGfDtN4se10y+xzQ3cIZke5k5Hkcqx5uwrEMP3pHua7pokWUEK/k2PBTYu9i7s2xgbpXSr/YuBBZObQxZLJnc+W6f6uODF6exiUgmTbk0xYgyqfEpHJ22lPJ0HLWmg3M5d4yNdT0y7zv+l7Ufs7/4w== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7fe3T1qXEUGCXR3myF0MykEhD06o5KbKUi+oM43AMlQ=; b=Uc5sW6ZQG35JSazTJkc9UtHlJLTmyT0aitqtebfj/SmIXawy4S8VCTE3dlqWSfw7P/RTyggypn6z59a2V035Xcn4BuHr2o8+ilstMWAN+BqDrfdi6xPd922drdlYXoMzs0kL3fvLwnsaFXFhjKJCeR80zA4MRETpG1brQJELVzpi9N6O07lM/SsMTq7b82ED0T1FKsNUqh0zZr024Tq0nbgj8VvtNkuKT64z+y+uxW4IKhkBQuAQ8cNwzWs2LV1z0d1VeuGxiraAdACYzcYYDxBu7jfQOT5wkxhKY7y7O9A5XR19FPmXRis7srCyeX0Es/lV533Bu/t69BYuV/j+Tw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ericsson.com; dmarc=pass action=none header.from=ericsson.com; dkim=pass header.d=ericsson.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7fe3T1qXEUGCXR3myF0MykEhD06o5KbKUi+oM43AMlQ=; b=sH1u+8pZp4qUwmOfGr2LjKxsLuhtppk5jt+7g/Eo0PpICwf3jSIfee5xPR5RCZ97vRey8ZgHQIkf+N4daZh5dnTb6LGIEusBN5lpqSUr7eg7l6zmXz5NOii/RvFnS2tqOSOgpOYjua1AYX8w8czEH/GN3M2nZfyreQaq5Sjk2Lo= Received: from DB7PR07MB5978.eurprd07.prod.outlook.com (2603:10a6:10:80::15) by AS1PR07MB8710.eurprd07.prod.outlook.com (2603:10a6:20b:479::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.35; Mon, 3 Apr 2023 21:46:05 +0000 Received: from DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::bfd8:a4ad:aac6:896a]) by DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::bfd8:a4ad:aac6:896a%4]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 21:46:03 +0000 From: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= To: Tyler Retzlaff , "dev@dpdk.org" Subject: Re: [PATCH 1/2] eal: provide leading and trailing zero bit count abstraction Thread-Topic: [PATCH 1/2] eal: provide leading and trailing zero bit count abstraction Thread-Index: AQHY/4kLk5u4iJwnDkCJ8Q/kOzMZJa8a7EwA Date: Mon, 3 Apr 2023 21:46:03 +0000 Message-ID: References: <1669241687-18810-1-git-send-email-roretzla@linux.microsoft.com> <1669241687-18810-2-git-send-email-roretzla@linux.microsoft.com> In-Reply-To: <1669241687-18810-2-git-send-email-roretzla@linux.microsoft.com> Accept-Language: en-US, sv-SE Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ericsson.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB7PR07MB5978:EE_|AS1PR07MB8710:EE_ x-ms-office365-filtering-correlation-id: 4f174c3e-a12a-46a6-435f-08db348cd286 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pqH7eaWln5yT4oZdArRPj6zP2mYpx7uuJjL7RcXb7nlvLisWAF6OEVQdLTuS0KrhjOYltXK+5LNce0S0T0BEUINI0utHqCQIRxYVIc35E0Mz9PMEil8onktWSlr3/yH2Y7W/s+4MgUzvJR3yTqg02KtzObZdQWuvcNqbh2fC3qSNg9bTvD2b0liA+M4yAKd2Osdw2oGrETv5cfn/e3V5QeANH9aGHQRzSgOaO10Q/ZJrk3HqHubbZb21VczFrWqFIV5w/51+DRNJNO7YNWc4dgQjKwaN4Ht8QFyGilaz52bApaqawO0vSdAw9n5gGyK8oiYMT6CQVj4abHfWfCgihvrLzRkry+TPJUsphj9blorySHt3+kGGi00/04mL/KP+cpLLLuLfOtY1axf34obF25vgNKlzyGh/aSYBW+3tEJTxroMbNORpFXhXwY5wnmYUy07T8Ro1SxYuMCFfL9CNB2YDa/7ytdxFOBNzDcoUGKtKfdtt2NKTtJyJxSL1rx3i9+IjKiH0wRJeZxAv8BVszZLsZ7KWwpJvKsVoMOnsxsc5gmUJSHL0E3EjPVnVqZ6hzGk7HW34XrrwbOmgpGZ38iAKJxW0VhiaKDLG7Tuv3XdHpHdZ5GK14+ZbjQqyoerInx7INm/qHz+i05LFRBOfYE+Uxd7UM82FdZQIzBkCR78vP1ehCDewoFXh2APu58e0 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB7PR07MB5978.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(396003)(346002)(136003)(366004)(39860400002)(376002)(451199021)(5660300002)(83380400001)(8936002)(8676002)(85182001)(36756003)(38070700005)(38100700002)(86362001)(31696002)(122000001)(85202003)(82960400001)(2906002)(4001150100001)(31686004)(76116006)(91956017)(478600001)(6506007)(6512007)(26005)(45080400002)(110136005)(316002)(186003)(53546011)(2616005)(41300700001)(66556008)(71200400001)(64756008)(66446008)(66476007)(6486002)(66946007)(43740500002)(45980500001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?aWNYYlRNR2w0aDZFcGhOZkFNYStQLzFuUzhaRGtjalQ1REJhWVVQRnJqclR1?= =?utf-8?B?TmpEMHI2ZCtpanZYV0NUbFg0bUhrbVF3Q0hjdm5IK3A1TXFmSzMrTnRhOXhv?= =?utf-8?B?WFJ2OGpSZExDcHc0elZWN21QWGRNMXVSb2NETkNGNEJCNEpBdTFjVVArUDBR?= =?utf-8?B?WE9iVjBRVlBCdEtFd0ZjN3NTSGpad1hQUkk0TnkyRk00NGxxVys5R0tGTG14?= =?utf-8?B?YjUxT1c3Y2RXQithNXRWZm9wTUlEakJNMVpqUEJsWGtMNUljWDU4T2dYd3R4?= =?utf-8?B?V3dmV2JyZUFjMFNrZk8zTWFlQS8xZDNrajZtU2JHOUM2YTNZaDdOK3FnWEdZ?= =?utf-8?B?YW8xd01VMzJzK3JnOTBhcjJaaCszQ2dxbHV1dEpRb3BzRTZqMGxLUVBrLzhx?= =?utf-8?B?SlVVZmEvWWlzenYyTUJjWWVmWnFDVmlvNjNHUzRCYUJPL0lBNUYydXd3Mm9P?= =?utf-8?B?MFNjNFh1ajBvUnpPa1RybzUrbHJOWitKY0RlTXN3ZlcvUVVDUkNFT21FRmdG?= =?utf-8?B?czVyTTBSOTlrVHQ0ZnNMUFZUK05adEhUL0Fnc2IrMHZFY2c1cEpDU3hJTUIx?= =?utf-8?B?bjV1eGhER00rUjVoY3h2QlJsS2tZMUpjN2dFVlNycHNBeU9wWEgxa1Q3RWpX?= =?utf-8?B?MHlZTzNnSVowLzY0eUh0dUo0dStPVStoQ2tEcytHVUR3bUhWOVUwWVdocVlq?= =?utf-8?B?eVJkb3dCVFJJMjdRZ1BQOEtvYVdXWW5RdURBWHhOTGt0Z2c1em5hdXJoNi96?= =?utf-8?B?NUR3NW9Lc3F3dUV3Yk9meEhGbzdFcnFkSlF3MkhyU1k5K2VETEkzSUJqbUk2?= =?utf-8?B?dHNJMlhUbVoxQW9kc3NPbG1sSE8yajJOYm0zR3BMMll6bVE5WXAwUWZlcDdi?= =?utf-8?B?a2Uzb1MvWEZqOVBPaHlUdzRyaExJZnl3T2tZcVBLeXZBOXBxUWRPWWY2Q2VF?= =?utf-8?B?TUwxMUl0L0hLT3VBSVFibE1aeWxaMHpPRVp0Q2NhVzR2YlBzZnRCL1NpYjJs?= =?utf-8?B?bldRNTFvVS92WVM3SFM5MUtkSjVXbmFvSXFmcU5JSFR0cVk3RmZZMG1Fckd3?= =?utf-8?B?YVRjcFN6amZoRlVEUHFmUVBQaXZXYld2YWFXdE9tNDNzUnF2TVFsdHo4YWRq?= =?utf-8?B?czhuRmJHNmFOR0lrNFBOTU82cWRDTkNxTGd3b1ByZ0ZoQU1yODRGbXphUFMw?= =?utf-8?B?d1l6NjhJSEh3dm5HZWp3NGpWWS9EYnpZRHNnK2twSlVsdkxzeFN4Z2UzTDF0?= =?utf-8?B?S2VScldQZVpMZVFMUjE4K2RFSnc4N0VqT1hLT0o4UFR1aytxQWdXbFFDbWg5?= =?utf-8?B?WXVYaVp3WWszOERkMkZjM09DZHdpZnZ3eGh2QlB5d1dGMy9VdFR5SVg4eXJX?= =?utf-8?B?MVA2TTV3Y0dlZGhLMkFjUk1VbkpiYktyVEprZkNyT2dhenBmanZnbTErQmN0?= =?utf-8?B?RUVmUzB4bDhtYzdXK3ZnR0NVemFrdTI2c2VPb1ZhdS9vT0ZMem00QTNCN2po?= =?utf-8?B?SFd3azJBS2RnYzc4aFE2Njh2YlVMNlVDN2VNMWVEWFU4UzcwSHpTS0xkRmVW?= =?utf-8?B?aVd5ZSs3OFdGV2NGSXJXd2pLYlFVVzZuVE9yMFcyTEl0eElabVJLaFZGeHdi?= =?utf-8?B?NXh1UWVwUWk1WkU1ZzlBNG1VTE80VnFrSURsK05aY01aTTlsMk5JSHNZVGht?= =?utf-8?B?SnBTaFU4aVVtQzBhNGEzMTgyVnZGUzdSZXF4VzlwTmZoR2ExZTQ4dmVUcDBz?= =?utf-8?B?RjdBbEcyam5tUVdjUFNadHFsUS9tZ2J5YmZsWUNwTGNndVNicXJvZXM0NUdL?= =?utf-8?B?YnhBY3JibkFXWlJSWjNudklXdCtqN0ZMRFRMTkpQN29CYlZrOFBYa3pHSjh3?= =?utf-8?B?NDVKZ1BvbjBjVGF5cVMwL2JQbEd2QmN0b2hGNGNtdUdocTZKZkNnZXJmdWJu?= =?utf-8?B?R2NwK0NBeENwK2J0VDNTTlE3M2xwRnEzclpmeU1GVzRIa2hOMUxaUXRmc1RN?= =?utf-8?B?UUJXMmVOcmY0K1RQbU5WMG50MlJNc1B1U3VnVUdkcEdkdnY3cUg0elVsUUpI?= =?utf-8?B?Z0Y2UGpMaXRkZFM0S3htWVgwOW4rUDlHbXM5d3dxbjBETGxkS2JhbWdxRUxk?= =?utf-8?B?UGdzUWFHaGMzb0NKcUowS3hnbWM5ZmJDV01tcCtCRnByelE2VTQrekxOa3NE?= =?utf-8?B?cnc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <1938DBD4F2EAC044AAA6382D914BD49B@eurprd07.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB7PR07MB5978.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4f174c3e-a12a-46a6-435f-08db348cd286 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Apr 2023 21:46:03.4673 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: m7VXUru/yPBg64A4ZE3sCKe8Oyh9LIqHiaOzY9JEWbTw1DfzWTXMbFRtyFttHb+5cQU/q+iV3J7tg2lWelJMpy33xeyZ97JoL2Wm6Ld1K5Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR07MB8710 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 T24gMjAyMi0xMS0yMyAyMzoxNCwgVHlsZXIgUmV0emxhZmYgd3JvdGU6DQo+IFByb3ZpZGUgYW4g YWJzdHJhY3Rpb24gZm9yIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHplcm8gYml0IGNvdW50aW5nDQo+ IGZ1bmN0aW9ucyB0byBoaWRlIGNvbXBpbGVyIHNwZWNpZmljIGludHJpbnNpY3MgYW5kIGJ1aWx0 aW5zLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogVHlsZXIgUmV0emxhZmYgPHJvcmV0emxhQGxpbnV4 Lm1pY3Jvc29mdC5jb20+DQo+IC0tLQ0KPiAgIGxpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWlsZCAg ICB8ICAgMSArDQo+ICAgbGliL2VhbC9pbmNsdWRlL3J0ZV9iaXRjb3VudC5oIHwgMjU3ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICAgMiBmaWxlcyBjaGFuZ2Vk LCAyNTggaW5zZXJ0aW9ucygrKQ0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZWFsL2luY2x1 ZGUvcnRlX2JpdGNvdW50LmgNCj4gDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2luY2x1ZGUvbWVz b24uYnVpbGQgYi9saWIvZWFsL2luY2x1ZGUvbWVzb24uYnVpbGQNCj4gaW5kZXggY2ZjZDQwYS4u OGZmMWQ2NSAxMDA2NDQNCj4gLS0tIGEvbGliL2VhbC9pbmNsdWRlL21lc29uLmJ1aWxkDQo+ICsr KyBiL2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWlsZA0KPiBAQCAtNSw2ICs1LDcgQEAgaW5jbHVk ZXMgKz0gaW5jbHVkZV9kaXJlY3RvcmllcygnLicpDQo+ICAgDQo+ICAgaGVhZGVycyArPSBmaWxl cygNCj4gICAgICAgICAgICdydGVfYWxhcm0uaCcsDQo+ICsgICAgICAgICdydGVfYml0Y291bnQu aCcsDQoNCk1heWJlIHJ0ZV9iaXRvcHMuaCBzaG91bGQgYmUgdGhlIGhvbWUgb2YgdGhlc2UgbmV3 IHdyYXBwZXJzLg0KDQo+ICAgICAgICAgICAncnRlX2JpdG1hcC5oJywNCj4gICAgICAgICAgICdy dGVfYml0b3BzLmgnLA0KPiAgICAgICAgICAgJ3J0ZV9icmFuY2hfcHJlZGljdGlvbi5oJywNCj4g ZGlmZiAtLWdpdCBhL2xpYi9lYWwvaW5jbHVkZS9ydGVfYml0Y291bnQuaCBiL2xpYi9lYWwvaW5j bHVkZS9ydGVfYml0Y291bnQuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwLi4yZjRkZDM4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2VhbC9pbmNsdWRlL3J0 ZV9iaXRjb3VudC5oDQo+IEBAIC0wLDAgKzEsMjU3IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjIgTWljcm9zb2Z0 IENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBFQUxfQklUQ09VTlRfSA0KPiAr I2RlZmluZSBFQUxfQklUQ09VTlRfSA0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2NvbXBhdC5oPg0K PiArDQo+ICsjaWZkZWYgUlRFX1RPT0xDSEFJTl9NU1ZDDQo+ICsNCj4gKy8qKg0KPiArICogQHdh cm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUg cmVtb3ZlZCwgd2l0aG91dCBwcmlvciBub3RpY2UNCj4gKyAqDQo+ICsgKiBHZXQgdGhlIGNvdW50 IG9mIGxlYWRpbmcgMC1iaXRzIGluIHYuDQo+ICsgKg0KPiArICogQHBhcmFtIHYNCj4gKyAqICAg VGhlIHZhbHVlLg0KPiArICogQHJldHVybg0KPiArICogICBUaGUgY291bnQgb2YgbGVhZGluZyB6 ZXJvIGJpdHMuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGlu ZSB1bnNpZ25lZA0KDQp1bnNpZ25lZCBpbnQNCg0KSWYgeW91IHdhbnQgdG8gYmUgX19idWlsdGlu X2NseigpLWNvbXBhdGlibGUsIHlvdSBzaG91bGQgc3RheSB3aXRoICJpbnQiIA0KYXMgdGhlIHJl dHVybiB0eXBlLg0KDQpJZiB5b3UgZG9uJ3QsIHlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSBtb3Jl IHRoYW4ganVzdCB0aGUgcmV0dXJuIHR5cGUuIA0KSW4gcGFydGljdWxhciwgaXQgd291bGQgYmUg dXNlZnVsIHRvIGhhdmUgc2l6ZS1zcGVjaWZpYyB2YXJpYW50cyANCihhbHRob3VnaCBpbiBwcmFj dGljZSB0aGV5IGFyZSBvbiBtb3N0IFthbGw/XSBEUERLLXN1cHBvcnRlZCBwbGF0Zm9ybXMpLg0K DQp1bnNpZ25lZCBpbnQNCnJ0ZV9jbHoodWludDMyX3Qgdik7DQoNCm9yIHJ0ZV9jbHozMigpLCB0 byBmb2xsb3cgdGhlIG5hbWluZyBjb252ZW50aW9uIGZyb20gc29tZSBvdGhlciB3cmFwcGVyIA0K UkZDIHlvdSBwb3N0ZWQuDQoNCj4gK3J0ZV9jbHoodW5zaWduZWQgaW50IHYpDQo+ICt7DQo+ICsJ dW5zaWduZWQgbG9uZyBydjsNCj4gKw0KPiArCSh2b2lkKV9CaXRTY2FuUmV2ZXJzZSgmcnYsIHYp Ow0KPiArDQo+ICsJcmV0dXJuICh1bnNpZ25lZClydjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBv ciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiArICoNCj4gKyAqIEdldCB0aGUg Y291bnQgb2YgbGVhZGluZyAwLWJpdHMgaW4gdi4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gdg0KPiAr ICogICBUaGUgdmFsdWUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBjb3VudCBvZiBsZWFk aW5nIHplcm8gYml0cy4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMg aW5saW5lIHVuc2lnbmVkDQo+ICtydGVfY2x6bCh1bnNpZ25lZCBsb25nIHYpDQo+ICt7DQo+ICsJ dW5zaWduZWQgbG9uZyBydjsNCj4gKw0KPiArCSh2b2lkKV9CaXRTY2FuUmV2ZXJzZSgmcnYsIHYp Ow0KPiArDQo+ICsJcmV0dXJuICh1bnNpZ25lZClydjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBv ciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiArICoNCj4gKyAqIEdldCB0aGUg Y291bnQgb2YgbGVhZGluZyAwLWJpdHMgaW4gdi4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gdg0KPiAr ICogICBUaGUgdmFsdWUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBjb3VudCBvZiBsZWFk aW5nIHplcm8gYml0cy4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMg aW5saW5lIHVuc2lnbmVkDQo+ICtydGVfY2x6bGwodW5zaWduZWQgbG9uZyBsb25nIHYpDQo+ICt7 DQo+ICsJdW5zaWduZWQgbG9uZyBydjsNCj4gKw0KPiArCSh2b2lkKV9CaXRTY2FuUmV2ZXJzZTY0 KCZydiwgdik7DQo+ICsNCj4gKwlyZXR1cm4gKHVuc2lnbmVkKXJ2Ow0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ICsgKg0KPiArICog R2V0IHRoZSBjb3VudCBvZiB0cmFpbGluZyAwLWJpdHMgaW4gdi4NCj4gKyAqDQo+ICsgKiBAcGFy YW0gdg0KPiArICogICBUaGUgdmFsdWUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBjb3Vu dCBvZiB0cmFpbGluZyB6ZXJvIGJpdHMuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiArc3RhdGljIGlubGluZSB1bnNpZ25lZA0KPiArcnRlX2N0eih1bnNpZ25lZCBpbnQgdikNCj4g K3sNCj4gKwl1bnNpZ25lZCBsb25nIHJ2Ow0KPiArDQo+ICsJKHZvaWQpX0JpdFNjYW5Gb3J3YXJk KCZydiwgdik7DQo+ICsNCj4gKwlyZXR1cm4gKHVuc2lnbmVkKXJ2Ow0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ICsgKg0KPiArICog R2V0IHRoZSBjb3VudCBvZiB0cmFpbGluZyAwLWJpdHMgaW4gdi4NCj4gKyAqDQo+ICsgKiBAcGFy YW0gdg0KPiArICogICBUaGUgdmFsdWUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBjb3Vu dCBvZiB0cmFpbGluZyB6ZXJvIGJpdHMuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiArc3RhdGljIGlubGluZSB1bnNpZ25lZA0KPiArcnRlX2N0emwodW5zaWduZWQgbG9uZyB2KQ0K PiArew0KPiArCXVuc2lnbmVkIGxvbmcgcnY7DQo+ICsNCj4gKwkodm9pZClfQml0U2NhbkZvcndh cmQoJnJ2LCB2KTsNCj4gKw0KPiArCXJldHVybiAodW5zaWduZWQpcnY7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5 IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvciBub3RpY2UNCj4gKyAqDQo+ICsg KiBHZXQgdGhlIGNvdW50IG9mIHRyYWlsaW5nIDAtYml0cyBpbiB2Lg0KPiArICoNCj4gKyAqIEBw YXJhbSB2DQo+ICsgKiAgIFRoZSB2YWx1ZS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIGNv dW50IG9mIHRyYWlsaW5nIHplcm8gYml0cy4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFs DQo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkDQo+ICtydGVfY3R6bGwodW5zaWduZWQgbG9uZyBs b25nIHYpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBydjsNCj4gKw0KPiArCSh2b2lkKV9CaXRT Y2FuRm9yd2FyZDY0KCZydiwgdik7DQo+ICsNCj4gKwlyZXR1cm4gKHVuc2lnbmVkKXJ2Ow0KPiAr fQ0KPiArDQo+ICsjZWxzZQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBF WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQg cHJpb3Igbm90aWNlDQo+ICsgKg0KPiArICogR2V0IHRoZSBjb3VudCBvZiBsZWFkaW5nIDAtYml0 cyBpbiB2Lg0KPiArICoNCj4gKyAqIEBwYXJhbSB2DQo+ICsgKiAgIFRoZSB2YWx1ZS4NCj4gKyAq IEByZXR1cm4NCj4gKyAqICAgVGhlIGNvdW50IG9mIGxlYWRpbmcgemVybyBiaXRzLg0KPiArICov DQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQNCj4gK3J0 ZV9jbHoodW5zaWduZWQgaW50IHYpDQo+ICt7DQo+ICsJcmV0dXJuICh1bnNpZ25lZClfX2J1aWx0 aW5fY2x6KHYpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBF WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQg cHJpb3Igbm90aWNlDQo+ICsgKg0KPiArICogR2V0IHRoZSBjb3VudCBvZiBsZWFkaW5nIDAtYml0 cyBpbiB2Lg0KPiArICoNCj4gKyAqIEBwYXJhbSB2DQo+ICsgKiAgIFRoZSB2YWx1ZS4NCj4gKyAq IEByZXR1cm4NCj4gKyAqICAgVGhlIGNvdW50IG9mIGxlYWRpbmcgemVybyBiaXRzLg0KPiArICov DQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQNCj4gK3J0 ZV9jbHpsKHVuc2lnbmVkIGxvbmcgdikNCj4gK3sNCj4gKwlyZXR1cm4gKHVuc2lnbmVkKV9fYnVp bHRpbl9jbHpsKHYpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBA YiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhv dXQgcHJpb3Igbm90aWNlDQo+ICsgKg0KPiArICogR2V0IHRoZSBjb3VudCBvZiBsZWFkaW5nIDAt Yml0cyBpbiB2Lg0KPiArICoNCj4gKyAqIEBwYXJhbSB2DQo+ICsgKiAgIFRoZSB2YWx1ZS4NCj4g KyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIGNvdW50IG9mIGxlYWRpbmcgemVybyBiaXRzLg0KPiAr ICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQNCj4g K3J0ZV9jbHpsbCh1bnNpZ25lZCBsb25nIHYpDQo+ICt7DQo+ICsJcmV0dXJuICh1bnNpZ25lZClf X2J1aWx0aW5fY2x6bGwodik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4g KyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwg d2l0aG91dCBwcmlvciBub3RpY2UNCj4gKyAqDQo+ICsgKiBHZXQgdGhlIGNvdW50IG9mIHRyYWls aW5nIDAtYml0cyBpbiB2Lg0KPiArICoNCj4gKyAqIEBwYXJhbSB2DQo+ICsgKiAgIFRoZSB2YWx1 ZS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIGNvdW50IG9mIHRyYWlsaW5nIHplcm8gYml0 cy4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgaW5saW5lIHVuc2ln bmVkDQo+ICtydGVfY3R6KHVuc2lnbmVkIGludCB2KQ0KPiArew0KPiArCXJldHVybiAodW5zaWdu ZWQpX19idWlsdGluX2N0eih2KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0K PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVk LCB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiArICoNCj4gKyAqIEdldCB0aGUgY291bnQgb2YgdHJh aWxpbmcgMC1iaXRzIGluIHYuDQo+ICsgKg0KPiArICogQHBhcmFtIHYNCj4gKyAqICAgVGhlIHZh bHVlLg0KPiArICogQHJldHVybg0KPiArICogICBUaGUgY291bnQgb2YgdHJhaWxpbmcgemVybyBi aXRzLg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdW5z aWduZWQNCj4gK3J0ZV9jdHpsKHVuc2lnbmVkIGxvbmcgdikNCj4gK3sNCj4gKwlyZXR1cm4gKHVu c2lnbmVkKV9fYnVpbHRpbl9jdHpsKHYpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJu aW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJl bW92ZWQsIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ICsgKg0KPiArICogR2V0IHRoZSBjb3VudCBv ZiB0cmFpbGluZyAwLWJpdHMgaW4gdi4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gdg0KPiArICogICBU aGUgdmFsdWUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBjb3VudCBvZiB0cmFpbGluZyB6 ZXJvIGJpdHMuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGlu ZSB1bnNpZ25lZA0KPiArcnRlX2N0emxsKHVuc2lnbmVkIGxvbmcgdikNCj4gK3sNCj4gKwlyZXR1 cm4gKHVuc2lnbmVkKV9fYnVpbHRpbl9jdHpsbCh2KTsNCj4gK30NCj4gKw0KPiArI2VuZGlmDQo+ ICsNCj4gKyNlbmRpZiAvKiBFQUxfQklUQ09VTlRfSCAqLw0KPiArDQoNCg==