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 893D841DB3; Thu, 2 Mar 2023 07:31:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7C41C40E09; Thu, 2 Mar 2023 07:31:44 +0100 (CET) Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2076.outbound.protection.outlook.com [40.107.104.76]) by mails.dpdk.org (Postfix) with ESMTP id 9383340DFB for ; Thu, 2 Mar 2023 07:31:42 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UePYZIxx+rIvGtKu9Q1hoGTI+OW3npnRfyRK5XFNw+DpIs9uZ7NwBumeMW9q1/YXtO40cAtfXesUaY35vR/LmpuNY2jtoF00oNpRt8myEup3c+RlbfnWfkA5OvGqwGj/SsMMWpJnko+Z1z2jwpe/WOysrLbOtjDemGJZYEFGGht9yhf2mKUnOxaLD4uTcBTA9wTDSG4uGyP76yJjhaHP/R9qojZ7gTwUk4rSlrSplWsHjhzeKzzIV/xI2plsDSlFFNyuK4tDNLoq+izU77s+rFfp3o10pF/K0lBGjVf4cwiN7S+4fc0PVVyh4xWP7QWhItwsimm68w30a5ll5q2jMw== 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=BHwi/0UMPmlyyOdaTN1Jinkt7vo+eKY2IinYaD+z+Iw=; b=XYs9OKCTT6d9NZChUpCVX6OA3puYn4nNPO5NVA1qnEYAO9oKSJjqKllqTjEkWvRUMYERGWRd1228tVjVvFJCo01E8oh2m4dD4yOJjjw754qkoKezjXmJYcukuXlGEvYalFm5jijtHIAYGqKgAlG91LGeCxnye+kwX6z/x38RWGEB8ssNN/pF8UncHS1xNbzMIOyC2fjfKCCejZ1RHZdXY9GIylzHwccARs/VdA+OzbEbzTy3owmLhXJ+n/qIPrXP8BbiaT0Nr7ImourkSpoiGnrVN//0vkN+cPvAmaF49lgGnLxtPweu0ma46uTl6DwrRCx2evWY3elmaGFtBlRvbw== 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=BHwi/0UMPmlyyOdaTN1Jinkt7vo+eKY2IinYaD+z+Iw=; b=cWgNyiBptRy0xvhbPRgpP3yQwtpOSdRgCpiDiUk8TXwaonMCbMY6D0F1hao4tVI/ZsPF0BvQaxrRPr6XBrXGtMrmV42DwLbFJ+C22E8LqCBDGnPfaAyQ3EkqyFt7uLx9hrIM5xeCSB4LGpUCGM/2R9WzsssenKAO5VYZcbn0efI= Received: from DB7PR07MB5978.eurprd07.prod.outlook.com (2603:10a6:10:80::15) by DBBPR07MB7660.eurprd07.prod.outlook.com (2603:10a6:10:1f0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.19; Thu, 2 Mar 2023 06:31:41 +0000 Received: from DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::2c84:74bd:b6e6:7ffb]) by DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::2c84:74bd:b6e6:7ffb%4]) with mapi id 15.20.6156.018; Thu, 2 Mar 2023 06:31:41 +0000 From: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= To: Tyler Retzlaff CC: "dev@dpdk.org" , Erik Gabriel Carrillo , David Marchand , Maria Lingemark , Stefan Sundkvist Subject: Re: [RFC 1/2] eal: add bitset type Thread-Topic: [RFC 1/2] eal: add bitset type Thread-Index: AQHZS1lVU1yzuZuJLk2UC+45pdeG367ks1YAgAJXQgA= Date: Thu, 2 Mar 2023 06:31:40 +0000 Message-ID: <9a341748-7daf-2d66-6d5c-4dc2be86dddb@ericsson.com> References: <20230228093916.87206-1-mattias.ronnblom@ericsson.com> <20230228093916.87206-2-mattias.ronnblom@ericsson.com> <20230228184650.GA10925@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> In-Reply-To: <20230228184650.GA10925@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> 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.6.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_|DBBPR07MB7660:EE_ x-ms-office365-filtering-correlation-id: 9b30b89a-540b-4798-9f55-08db1ae7c87c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rRNRCRfmRKyTUHjKQxIX5qEgxMrlgfZiZKWbCxsi8olNTElgNqQmK9bBMFOYMdnsbulj//hFV22PkWrRBQUSi285GQCJcRpJKo/SExAKLfKVAXtoy7ddsI0/AubIhqelHBqGxs4eS7NWsdUjLRFvHqhKxl76ZJY/DCP9pqTmjEvdBD4MP49X9ovtBKMfsAKHRiFIwYIwUpv0/cJWJBFhE7pdNLcVC1yL6aTz74Ic+n/P4oMzCUMrFmRhHBTm4uiO0bXcXjMIwO0NwRnWJmxHri0Ik0dEvxWbu3KzNUIklp3TSAG1b5P4rto+xSjwiSlUogUzmhNs00GSES+pJI+ChAVu/GWBFfYDGYxo7ytFwlv//sadWz8g20SMiE3GtjoGDNzbgJwnNmQbOi5c9ios3Anhz5j4Urzv5DevBXwUy1Lrvbse7gc4EjyofUPSpfINVgBvYGKgsi3gX3OpZjMIb5kZ8ODyIYEiwucrWgJ5LHGWFAvbZOg/bGnukT2/uu/Mq+14+6x3q8+eVxVsAM+kiLwc1qtOmSmtTCfmvIm3wYG9EORXIjAXq2vfPKj93igVqJvNlWR54uyoc60J6A4p3Otp8mXKzwQFSNwkVctOm0La+geyNnF5GgY1xYd30rem5/2LbaULeIDcjyXsuaIcH2PcQaDbxLnOnQ/hXo7cOImsqGhzQpVFuPEVokntldcqgm4axBo5ZpHVm8DgvqzURYBxzktvtlz0UNx6mA+i67H+ZZhWMEE6uwPCB4vu2aTBS4l0wmdmn0WHhC2NZxMIZHMhTvVqfTY2liW6TSUxUNANAI0JqokiKAfZeFkLq+j2yzb8hmFKbBvNJBU9THGfwg== 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:(13230025)(4636009)(376002)(136003)(366004)(346002)(39860400002)(396003)(451199018)(31686004)(85182001)(85202003)(36756003)(41300700001)(8936002)(2616005)(6512007)(54906003)(66446008)(66476007)(66556008)(66946007)(6916009)(8676002)(64756008)(53546011)(186003)(4326008)(76116006)(31696002)(86362001)(2906002)(66574015)(83380400001)(30864003)(91956017)(6506007)(26005)(5660300002)(316002)(107886003)(478600001)(122000001)(6486002)(71200400001)(38100700002)(38070700005)(82960400001)(21314003)(43740500002)(45980500001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dHUvcDlTclNvb2JzN0V3MjBTVjdnMkx1amtRTEoxVnFXN3lVVk1RWHJiU3ZL?= =?utf-8?B?SzhyMU5WWTczMkJtd05iVUo0MmlISXZYY3NPQWk1TmJEbmlZdHRseHFhYUcw?= =?utf-8?B?Yml4T2cvWUNuOE85Um95NkNtNVRUUmFSM3h3T2xWN3RDeHZDTzczMUpvSmRp?= =?utf-8?B?UlVuTlJLR09RTXltZm1xSFJINERubWhpSW9WQ0tkaFFnc0NrOVprbHY4U3Jp?= =?utf-8?B?cXpuRjJ5WEc2MTk5N2xDZzVnUktuRWdwUmJ1ZlV4azdoL2VMaVFkZHRvMFdZ?= =?utf-8?B?NHZ5MmVlRzFFNi9KNFIrbnZhVCs5VldobVBzNFlORjRyREtTSkZmRm11SG9V?= =?utf-8?B?MjltVjVHcVk4bTZWaVZqV3gva25TVnlaWDdvOVhjdk8xRkUrZkM1VGFnaTVI?= =?utf-8?B?NnpKdUh5V09KVDFIZWI0V0phcUpnODVCY2gzMFpiVytZQmtTSEZNTkREOUgz?= =?utf-8?B?TEVrUjJkSWI0VFhsd0FaTFFzcnJBNGtiTW1tRW1EbU1VZW1NbU5tOGNFUWFa?= =?utf-8?B?VERLUVlMU2VjQXZ1MU1TNWc0djRFWTdyUExIM2l0aGlBV3d0MDBEUVluaDdi?= =?utf-8?B?bXFIazEwb2xsMmhzeFJvZGR5bFJmYVA1V0pCNVVtWDhqek9TeHNLVEp2b2cr?= =?utf-8?B?cjNtZWVFTHFSUzR0VE9vNmNpQmRSSk93SXAxcno0d1UyZFZ1UnhEMVhyWTNq?= =?utf-8?B?N3YxL2xxTTZZaklKQkRQdEdFaXZVYjgwY1RUcjZZdWMySm9Zb1Y2eklsbUtU?= =?utf-8?B?V1creUhNejU2WDIwVHBMT29ia09wZkpkeXlNN05vNFNuQStxVUxzckhkMEdW?= =?utf-8?B?VnpxQnNWVzUyb2kvcFRrU3VWWW00N2xIU3U4NzhyOC80TnhNcE0xNkxSUkFW?= =?utf-8?B?SERWdCswNFpPRGx4NHR6VUUxL1RHdjJIbG84QWpKN0hGR1A4OE1JaDJscFlm?= =?utf-8?B?TDdEMFZRS3Y4QklyTmR5K3FDRElqLzhDNzhBemNSNE9NYmlPTGRJelYwUWQy?= =?utf-8?B?RjVFanhtT0cwK1NuemY2eHcxc1h3NnFpMTlMYmVkcWpqcnpJT0tOOGl5ZnlH?= =?utf-8?B?OUVNNkFQQTRLeE5pUlVEblQ2MGU5OExLTkhockRRa0Zic0JwNk55bGlVTk0r?= =?utf-8?B?RTZ3NFROMXVFRmNtb0pRbUpWWGdBY1pEWXZKVDJneE90MHR3MEVIZ1NvbGJj?= =?utf-8?B?Y05Nd0hlY3ZJS0wva3JNa0UxNzVlWkRSZ3VHaU12UzdIRVY2bExTSmJ4bTly?= =?utf-8?B?V3J4dWgxTkc4TE5selNFRUY3T3hncG1jK0VjeXNWdUtPY1Y1QjlvK3lTNmti?= =?utf-8?B?aEVjbFkzRXRyQzBjT1N1U1h4MXByQjlyRjBBdll0Tkt3Tm5kTHNxV3huR1Zz?= =?utf-8?B?RXpVNVd5Yzh5WVVidHE5WnhBWXpRVjljdU8xNklsVFB6SXNBMVlpM0ZHbjN2?= =?utf-8?B?WEV3NU9iQ3NvQ0hBc3dadllubjRkSjAzTVpYdEFvNVFhQzRkOVFPWWlzSjU4?= =?utf-8?B?aHlzV0QrOHdMRVFoMWV3RWVGNWFjd2NZeGpqL0VFaldDUTFlaWphcXBOZ2V6?= =?utf-8?B?VmZEM01obVNsZmowZkFCWWtNQVl1MW8ydk5oYmE0NnJhSDBBd0tNTkxObnVK?= =?utf-8?B?bElXLzlnS2RjQkhSQnpKYUZ5dWh6d0pRWTBGN3VZZXhOYU5BUE9zczR4VVZQ?= =?utf-8?B?cGRtUU9OZzVlYnZYU3IrMzNJZk0wUHdONFhuVENsSEhhekxDckgzQ0NmNHJT?= =?utf-8?B?K3A3UExWaDJvb2JkS3NMQWg1M0FpS1FwUzl3c2tpNjBsMVdLSmY3UVgzbHRz?= =?utf-8?B?WCt1UXBvaVpISVYvK1FCbzJTazZOa1VWRjRKVVVUd1pEUm5XSHlvMjY2eE9Q?= =?utf-8?B?N1JKUERheGZWWTZaQmtMNDFoR2REaW5EUElKQVJxenJHcjZEd0hDWjhDSkU5?= =?utf-8?B?VjNGblNyYUNwWkU2alVYTExmTzN5SlFyZ3h0S25yV2RsRzZTZS9vMTMxZHcw?= =?utf-8?B?Yk9LTjN6citXbm56TzVUbzUyREtjZkM5ek9qWWN0NmhldlA2UkpkRHlaWEVW?= =?utf-8?B?WFZpWXkzdVN3YTJtdGJjMXVNSjFYYUs0S09rTitkSkhzWHhBdnVBVW95TEdE?= =?utf-8?B?VExJRkJENTV5cklSbi9BUUlTc3lXdkFZYUphQWcydnNacWtaMUVMOEQ0aEFl?= =?utf-8?B?Qmc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: 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: 9b30b89a-540b-4798-9f55-08db1ae7c87c X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Mar 2023 06:31:40.5810 (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: 3R5ON7B0OTySHPWiU0DWauaYv32Qq0gwNFgJ2qOvM4ZBbqrL78ARhLVKKUVOd+M1ce1SSoERk2uFFSlYKTAxsBRKTZxDYTGypcFbFcapx64= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR07MB7660 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 T24gMjAyMy0wMi0yOCAxOTo0NiwgVHlsZXIgUmV0emxhZmYgd3JvdGU6DQo+IE9uIFR1ZSwgRmVi IDI4LCAyMDIzIGF0IDEwOjM5OjE1QU0gKzAxMDAsIE1hdHRpYXMgUsO2bm5ibG9tIHdyb3RlOg0K Pj4gSW50cm9kdWNlIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIHRoYXQgb3BlcmF0ZSBv biBzZXRzIG9mIGJpdHMsDQo+PiBrZXB0IGluIGFycmF5cyBvZiA2NC1iaXQgZWxlbWVudHMuDQo+ Pg0KPj4gUlRFIGJpdHNldCBpcyBkZXNpZ25lZCBmb3IgYml0c2V0cyB3aGljaCBhcmUgbGFyZ2Vy IHRoYW4gd2hhdCBmaXRzIGluDQo+PiBhIHNpbmdsZSBtYWNoaW5lIHdvcmQgKGkuZS4sIDY0IGJp dHMpLiBGb3IgdmVyeSBsYXJnZSBiaXRzZXRzLCB0aGUNCj4+IDxydGVfYml0bWFwLmg+IEFQSSBt YXkgYmUgYSBtb3JlIGFwcHJvcHJpYXRlIGNob2ljZS4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBN YXR0aWFzIFLDtm5uYmxvbSA8bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb20+DQo+PiAtLS0N Cj4gDQo+IC4uLg0KPiANCj4+IGRpZmYgLS1naXQgYS9saWIvZWFsL2luY2x1ZGUvcnRlX2JpdHNl dC5oIGIvbGliL2VhbC9pbmNsdWRlL3J0ZV9iaXRzZXQuaA0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAuLmUzMzNlNTI3ZTUNCj4+IC0tLSAvZGV2L251bGwNCj4+ ICsrKyBiL2xpYi9lYWwvaW5jbHVkZS9ydGVfYml0c2V0LmgNCj4+IEBAIC0wLDAgKzEsODc4IEBA DQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPj4gKyAqIENv cHlyaWdodChjKSAyMDIzIEVyaWNzc29uIEFCDQo+PiArICovDQo+PiArDQo+PiArI2lmbmRlZiBf UlRFX0JJVFNFVF9IXw0KPj4gKyNkZWZpbmUgX1JURV9CSVRTRVRfSF8NCj4+ICsNCj4+ICsvKioN Cj4+ICsgKiBAZmlsZQ0KPj4gKyAqIFJURSBCaXRzZXQNCj4+ICsgKg0KPj4gKyAqIFRoaXMgZmls ZSBwcm92aWRlcyBmdW5jdGlvbnMgYW5kIG1hY3JvcyBmb3IgcXVlcnlpbmcgYW5kDQo+PiArICog bWFuaXB1bGF0aW5nIHNldHMgb2YgYml0cyBrZXB0IGluIGFycmF5cyBvZiBAYyB1aW50NjRfdC1z aXplZA0KPj4gKyAqIGVsZW1lbnRzLg0KPj4gKyAqDQo+PiArICogVGhlIGJpdHMgaW4gYSBiaXRz ZXQgYXJlIG51bWJlcmVkIGZyb20gMCB0byBAYyBzaXplIC0gMSwgd2l0aCB0aGUNCj4+ICsgKiBs b3dlc3QgaW5kZXggYmVpbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4NCj4+ICsgKg0KPj4g KyAqIFRoZSBiaXRzZXQgYXJyYXkgbXVzdCBiZSBwcm9wZXJseSBhbGlnbmVkLg0KPj4gKyAqDQo+ PiArICogRm9yIG9wdGltYWwgcGVyZm9ybWFuY2UsIHRoZSBAYyBzaXplIHBhcmFtZXRlciwgcmVx dWlyZWQgYnkNCj4+ICsgKiBtYW55IG9mIHRoZSBBUEkncyBmdW5jdGlvbnMsIHNob3VsZCBiZSBh IGNvbXBpbGUtdGltZSBjb25zdGFudC4NCj4+ICsgKg0KPj4gKyAqIEZvciBsYXJnZSBiaXRzZXRz LCB0aGUgcnRlX2JpdG1hcC5oIEFQSSBtYXkgYmUgbW9yZSBhcHByb3ByaWF0ZS4NCj4+ICsgKg0K Pj4gKyAqIEB3YXJuaW5nDQo+PiArICogQWxsIGZ1bmN0aW9ucyBtb2RpZnlpbmcgYSBiaXRzZXQg bWF5IG92ZXJ3cml0ZSBhbnkgdW51c2VkIGJpdHMgb2YNCj4+ICsgKiB0aGUgbGFzdCB3b3JkLiBT dWNoIHVudXNlZCBiaXRzIGFyZSBpZ25vcmVkIGJ5IGFsbCBmdW5jdGlvbnMgcmVhZGluZw0KPj4g KyAqIGJpdHMuDQo+PiArICoNCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGltaXRzLmg+ DQo+PiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCj4+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+PiAr I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KPiANCj4gd2luZG93cyBoYXMgbm8gc3lzL3R5cGVzLmgg aWYgdGhlcmUgaXMgYSBzaGltIGJlaW5nIHBpY2tlZCB1cCBzb21ld2hlcmUNCj4gcG9ydGFibGUg Y29kZSBzaG91bGRuJ3QgZGVwZW5kIG9uIHN5cy90eXBlcy5oDQo+IA0KDQpUaGF0IGluY2x1ZGUg d2FzIGEgbWlzZGlyZWN0ZWQgYXR0ZW1wdCB0byBnZXQgdGhlICdzaXplX3QnIGRlZmluaXRpb24u IEkgDQp3aWxsIHJlcGxhY2VkIGl0IHdpdGggPHN0ZGRlZi5oPi4gVGhhbmtzLg0KDQo+PiArDQo+ PiArI2luY2x1ZGUgPHJ0ZV9icmFuY2hfcHJlZGljdGlvbi5oPg0KPj4gKyNpbmNsdWRlIDxydGVf Y29tbW9uLmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPg0KPj4gKyNpbmNsdWRlIDxydGVf bWVtY3B5Lmg+DQo+PiArDQo+PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+PiArZXh0ZXJuICJDIiB7 DQo+PiArI2VuZGlmDQo+PiArDQo+PiArLyoqDQo+PiArICogVGhlIHNpemUgKGluIGJ5dGVzKSBv ZiBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHVzZWQgdG8gcmVwcmVzZW50DQo+PiArICogYSBi aXRzZXQuDQo+PiArICovDQo+PiArI2RlZmluZSBSVEVfQklUU0VUX1dPUkRfU0laRSAoc2l6ZW9m KHVpbnQ2NF90KSkNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBUaGUgc2l6ZSAoaW4gYml0cykgb2Yg ZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSB1c2VkIHRvIHJlcHJlc2VudA0KPj4gKyAqIGEgYml0 c2V0Lg0KPj4gKyAqLw0KPj4gKyNkZWZpbmUgUlRFX0JJVFNFVF9XT1JEX0JJVFMgKFJURV9CSVRT RVRfV09SRF9TSVpFICogQ0hBUl9CSVQpDQo+PiArDQo+PiArLyoqDQo+PiArICogQ29tcHV0ZXMg dGhlIG51bWJlciBvZiB3b3JkcyByZXF1aXJlZCB0byBzdG9yZSBAYyBzaXplIGJpdHMuDQo+PiAr ICovDQo+PiArI2RlZmluZSBSVEVfQklUU0VUX05VTV9XT1JEUyhzaXplKQkJCSAgICAgICBcDQo+ PiArCSgoc2l6ZSArIFJURV9CSVRTRVRfV09SRF9CSVRTIC0gMSkgLyBSVEVfQklUU0VUX1dPUkRf QklUUykNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBDb21wdXRlcyB0aGUgYW1vdW50IG9mIG1lbW9y eSAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGZpdCBhIGJpdHNldA0KPj4gKyAqIGhvbGRpbmcgQGMg c2l6ZSBiaXRzLg0KPj4gKyAqLw0KPj4gKyNkZWZpbmUgUlRFX0JJVFNFVF9TSVpFKHNpemUpCQkJ CQlcDQo+PiArCSgoc2l6ZV90KShSVEVfQklUU0VUX05VTV9XT1JEUyhzaXplKSAqIFJURV9CSVRT RVRfV09SRF9TSVpFKSkNCj4+ICsNCj4+ICsjZGVmaW5lIF9fUlRFX0JJVFNFVF9XT1JEX0lEWChi aXRfbnVtKSAoKGJpdF9udW0pIC8gUlRFX0JJVFNFVF9XT1JEX0JJVFMpDQo+PiArI2RlZmluZSBf X1JURV9CSVRTRVRfQklUX09GRlNFVChiaXRfbnVtKSAoKGJpdF9udW0pICUgUlRFX0JJVFNFVF9X T1JEX0JJVFMpDQo+PiArI2RlZmluZSBfX1JURV9CSVRTRVRfVU5VU0VEKHNpemUpCQkJCVwNCj4+ ICsJKChSVEVfQklUU0VUX05VTV9XT1JEUyhzaXplKSAqIFJURV9CSVRTRVRfV09SRF9CSVRTKSBc DQo+PiArCSAtIChzaXplKSkNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4gKyAq IEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGlj ZS4NCj4+ICsgKg0KPj4gKyAqIERlY2xhcmUgYSBiaXRzZXQuDQo+PiArICoNCj4+ICsgKiBEZWNs YXJlIChlLmcuLCBhcyBhIHN0cnVjdCBmaWVsZCkgb3IgZGVmaW5lIChlLmcuLCBhcyBhIHN0YWNr DQo+PiArICogdmFyaWFibGUpIGEgYml0c2V0IG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4NCj4+ICsg Kg0KPj4gKyAqIEBwYXJhbSBzaXplDQo+PiArICogICBUaGUgbnVtYmVyIG9mIGJpdHMgdGhlIGJp dHNldCBtdXN0IGJlIGFibGUgdG8gcmVwcmVzZW50LiBNdXN0IGJlDQo+PiArICogICBhIGNvbXBp bGUtdGltZSBjb25zdGFudC4NCj4+ICsgKiBAcGFyYW0gbmFtZQ0KPj4gKyAqICAgVGhlIGZpZWxk IG9yIHZhcmlhYmxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyBkZWZpbml0aW9uLg0KPj4gKyAqLw0K Pj4gKyNkZWZpbmUgUlRFX0JJVFNFVF9ERUNMQVJFKG5hbWUsIHNpemUpCQlcDQo+PiArCXVpbnQ2 NF90IG5hbWVbUlRFX0JJVFNFVF9OVU1fV09SRFMoc2l6ZSldDQo+PiArDQo+PiArLyogWFhYOiBz aG91bGQgb25lIGluY2x1ZGUgZmxhZ3MgaGVyZSBhbmQgdXNlIHRvIGF2b2lkIGEgY29tcGFyaXNv bj8gKi8NCj4+ICsvKiBYWFg6IHdvdWxkIHRoaXMgYmUgYmV0dGVyIG9mZiBhcyBhIGZ1bmN0aW9u PyAqLw0KPj4gKw0KPj4gKyNkZWZpbmUgX19SVEVfQklUU0VUX0ZPUkVBQ0hfTEVGVCh2YXIsIHNp emUsIHN0YXJ0X2JpdCwgbGVuKQlcDQo+PiArCSgobGVuKSAtIDEgLSAoKHZhcikgPj0gKHN0YXJ0 X2JpdCkgPyAodmFyKSAtIChzdGFydF9iaXQpIDoJXA0KPj4gKwkJICAoc2l6ZSkgLSAoc3RhcnRf Yml0KSArICh2YXIpKSkNCj4+ICsNCj4+ICsjZGVmaW5lIF9fUlRFX0JJVFNFVF9GT1JFQUNIKHZh ciwgYml0c2V0LCBzaXplLCBzdGFydF9iaXQsIGxlbiwgZmxhZ3MpIFwNCj4+ICsJZm9yICgodmFy KSA9IF9fcnRlX2JpdHNldF9maW5kKGJpdHNldCwgc2l6ZSwgc3RhcnRfYml0LCBsZW4sIFwNCj4+ ICsJCQkJICAgICAgIGZsYWdzKTsJCQkJXA0KPj4gKwkgICAgICh2YXIpICE9IC0xOwkJCQkJCVwN Cj4+ICsJICAgICAodmFyKSA9IF9fUlRFX0JJVFNFVF9GT1JFQUNIX0xFRlQodmFyLCBzaXplLCBz dGFydF9iaXQsIFwNCj4+ICsJCQkJCSAgICAgICBsZW4pID4gMAk/CQlcDQo+PiArCQkgICAgIF9f cnRlX2JpdHNldF9maW5kKGJpdHNldCwgc2l6ZSwJCVwNCj4+ICsJCQkJICAgICAgICgodmFyKSAr IDEpICUgKHNpemUpLAlcDQo+PiArCQkJCSAgICAgICBfX1JURV9CSVRTRVRfRk9SRUFDSF9MRUZU KHZhciwJXA0KPj4gKwkJCQkJCQkJIHNpemUsIFwNCj4+ICsJCQkJCQkJCSBzdGFydF9iaXQsIFwN Cj4+ICsJCQkJCQkJCSBsZW4pLAlcDQo+PiArCQkJCSAgICAgICBmbGFncykgOiAtMSkNCj4+ICsN Cj4+ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4+ICsgKg0KPj4gKyAqIEl0ZXJh dGUgb3ZlciBhbGwgYml0cyBzZXQuDQo+PiArICoNCj4+ICsgKiBUaGlzIG1hY3JvIGl0ZXJhdGVz IG92ZXIgYWxsIGJpdHMgc2V0IChpLmUuLCBhbGwgb25lcykgaW4gdGhlDQo+PiArICogYml0c2V0 LCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24gKGkuZS4sIHN0YXJ0aW5nIHdpdGggdGhlIGxlYXN0 DQo+PiArICogc2lnbmlmaWNhbnQgJzEnKS4NCj4+ICsgKg0KPj4gKyAqIEBwYXJhbSB2YXINCj4+ ICsgKiAgIEFuIGl0ZXJhdG9yIHZhcmlhYmxlIG9mIHR5cGUgQGMgc3NpemVfdC4gRm9yIGVhY2gg c3VjZXNzaXZlIGl0ZXJhdGlvbiwNCj4+ICsgKiAgIHRoaXMgdmFyaWFibGUgd2lsbCBob2xkIHRo ZSBiaXQgaW5kZXggb2YgYSBzZXQgYml0Lg0KPj4gKyAqIEBwYXJhbSBiaXRzZXQNCj4+ICsgKiAg IEEgPHR0PmNvbnN0IHVpbnQ2NF90ICo8L3R0PiBwb2ludGVyIHRvIHRoZSBiaXRzZXQgYXJyYXku DQo+PiArICogQHBhcmFtIHNpemUNCj4+ICsgKiAgIFRoZSBzaXplIG9mIHRoZSBiaXRzZXQgKGlu IGJpdHMpLg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNkZWZpbmUgUlRFX0JJVFNFVF9GT1JFQUNIX1NF VCh2YXIsIGJpdHNldCwgc2l6ZSkJCQlcDQo+PiArCV9fUlRFX0JJVFNFVF9GT1JFQUNIKHZhciwg Yml0c2V0LCBzaXplLCAwLCBzaXplLCAwKQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEB3YXJuaW5n DQo+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJp b3Igbm90aWNlLg0KPj4gKyAqDQo+PiArICogSXRlcmF0ZSBvdmVyIGFsbCBiaXRzIGNsZWFyZWQu DQo+PiArICoNCj4+ICsgKiBUaGlzIG1hY3JvIGl0ZXJhdGVzIG92ZXIgYWxsIGJpdHMgY2xlYXJl ZCBpbiB0aGUgYml0c2V0LCBpbiB0aGUNCj4+ICsgKiBmb3J3YXJkIGRpcmVjdGlvbiAoaS5lLiwg c3RhcnRpbmcgd2l0aCB0aGUgbG93ZXN0LWluZGV4ZWQgc2V0IGJpdCkuDQo+PiArICoNCj4+ICsg KiBAcGFyYW0gdmFyDQo+PiArICogICBBbiBpdGVyYXRvciB2YXJpYWJsZSBvZiB0eXBlIEBjIHNz aXplX3QuIEZvciBlYWNoIHN1Y2Nlc3NpdmUgaXRlcmF0aW9uLA0KPj4gKyAqICAgdGhpcyB2YXJp YWJsZSB3aWxsIGhvbGQgdGhlIGJpdCBpbmRleCBvZiBhIGNsZWFyZWQgYml0Lg0KPj4gKyAqIEBw YXJhbSBiaXRzZXQNCj4+ICsgKiAgIEEgPHR0PmNvbnN0IHVpbnQ2NF90ICo8L3R0PiBwb2ludGVy IHRvIHRoZSBiaXRzZXQgYXJyYXkuDQo+PiArICogQHBhcmFtIHNpemUNCj4+ICsgKiAgIFRoZSBz aXplIG9mIHRoZSBiaXRzZXQgKGluIGJpdHMpLg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNkZWZpbmUg UlRFX0JJVFNFVF9GT1JFQUNIX0NMRUFSKHZhciwgYml0c2V0LCBzaXplKQkJCVwNCj4+ICsJX19S VEVfQklUU0VUX0ZPUkVBQ0godmFyLCBiaXRzZXQsIHNpemUsIDAsIHNpemUsCVwNCj4+ICsJCQkg ICAgIF9fUlRFX0JJVFNFVF9GSU5EX0ZMQUdfRklORF9DTEVBUikNCj4+ICsNCj4+ICsvKioNCj4+ ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4+ICsgKg0KPj4gKyAqIEl0ZXJhdGUgb3ZlciBhbGwg Yml0cyBzZXQgd2l0aGluIGEgcmFuZ2UuDQo+PiArICoNCj4+ICsgKiBUaGlzIG1hY3JvIGl0ZXJh dGVzIG92ZXIgYWxsIGJpdHMgc2V0IChpLmUuLCBhbGwgb25lcykgaW4gdGhlDQo+PiArICogc3Bl Y2lmaWVkIHJhbmdlLCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24gKGkuZS4sIHN0YXJ0aW5nIHdp dGggdGhlDQo+PiArICogbGVhc3Qgc2lnbmlmaWNhbnQgJzEnKS4NCj4+ICsgKg0KPj4gKyAqIEBw YXJhbSB2YXINCj4+ICsgKiAgIEFuIGl0ZXJhdG9yIHZhcmlhYmxlIG9mIHR5cGUgQGMgc3NpemVf dC4gRm9yIGVhY2ggc3VjZXNzaXZlIGl0ZXJhdGlvbiwNCj4+ICsgKiAgIHRoaXMgdmFyaWFibGUg d2lsbCBob2xkIHRoZSBiaXQgaW5kZXggb2YgYSBzZXQgYml0Lg0KPj4gKyAqIEBwYXJhbSBiaXRz ZXQNCj4+ICsgKiAgIEEgPHR0PmNvbnN0IHVpbnQ2NF90ICo8L3R0PiBwb2ludGVyIHRvIHRoZSBi aXRzZXQgYXJyYXkuDQo+PiArICogQHBhcmFtIHNpemUNCj4+ICsgKiAgIFRoZSBzaXplIG9mIHRo ZSBiaXRzZXQgKGluIGJpdHMpLg0KPj4gKyAqIEBwYXJhbSBzdGFydF9iaXQNCj4+ICsgKiAgIFRo ZSBpbmRleCBvZiB0aGUgZmlyc3QgYml0IHRvIGNoZWNrLiBNdXN0IGJlIGxlc3MgdGhhbiBAYyBz aXplLg0KPj4gKyAqIEBwYXJhbSBsZW4NCj4+ICsgKiAgIFRoZSBsZW5ndGggKGluIGJpdHMpIG9m IHRoZSByYW5nZS4gQGMgc3RhcnRfYml0ICsgQGMgbGVuIG11c3QgYmUgbGVzcw0KPj4gKyAqICAg dGhhbiBvciBlcXVhbCB0byBAYyBzaXplLg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNkZWZpbmUgUlRF X0JJVFNFVF9GT1JFQUNIX1NFVF9SQU5HRSh2YXIsIGJpdHNldCwgc2l6ZSwgc3RhcnRfYml0LCBc DQo+PiArCQkJCSAgICAgbGVuKQkJCSAgICAgICBcDQo+PiArCV9fUlRFX0JJVFNFVF9GT1JFQUNI KHZhciwgYml0c2V0LCBzaXplLCBzdGFydF9iaXQsIGxlbiwgMCkNCj4+ICsNCj4+ICsvKioNCj4+ ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4+ICsgKg0KPj4gKyAqIEl0ZXJhdGUgb3ZlciBhbGwg Y2xlYXJlZCBiaXRzIHdpdGhpbiBhIHJhbmdlLg0KPj4gKyAqDQo+PiArICogVGhpcyBtYWNybyBp dGVyYXRlcyBvdmVyIGFsbCBiaXRzIGNsZWFyZWQgKGkuZS4sIGFsbCB6ZXJvZXMpIGluIHRoZQ0K Pj4gKyAqIHNwZWNpZmllZCByYW5nZSwgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uIChpLmUuLCBz dGFydGluZyB3aXRoIHRoZQ0KPj4gKyAqIGxlYXN0IHNpZ25pZmljYW50ICcwJykuDQo+PiArICoN Cj4+ICsgKiBAcGFyYW0gdmFyDQo+PiArICogICBBbiBpdGVyYXRvciB2YXJpYWJsZSBvZiB0eXBl IEBjIHNzaXplX3QuIEZvciBlYWNoIHN1Y2Vzc2l2ZSBpdGVyYXRpb24sDQo+PiArICogICB0aGlz IHZhcmlhYmxlIHdpbGwgaG9sZCB0aGUgYml0IGluZGV4IG9mIGEgc2V0IGJpdC4NCj4+ICsgKiBA cGFyYW0gYml0c2V0DQo+PiArICogICBBIDx0dD5jb25zdCB1aW50NjRfdCAqPC90dD4gcG9pbnRl ciB0byB0aGUgYml0c2V0IGFycmF5Lg0KPj4gKyAqIEBwYXJhbSBzaXplDQo+PiArICogICBUaGUg c2l6ZSBvZiB0aGUgYml0c2V0IChpbiBiaXRzKS4NCj4+ICsgKiBAcGFyYW0gc3RhcnRfYml0DQo+ PiArICogICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGJpdCB0byBjaGVjay4gTXVzdCBiZSBsZXNz IHRoYW4gQGMgc2l6ZS4NCj4+ICsgKiBAcGFyYW0gbGVuDQo+PiArICogICBUaGUgbGVuZ3RoIChp biBiaXRzKSBvZiB0aGUgcmFuZ2UuIEBjIHN0YXJ0X2JpdCArIEBjIGxlbiBtdXN0IGJlIGxlc3MN Cj4+ICsgKiAgIHRoYW4gb3IgZXF1YWwgdG8gQGMgc2l6ZS4NCj4+ICsgKi8NCj4+ICsNCj4+ICsj ZGVmaW5lIFJURV9CSVRTRVRfRk9SRUFDSF9DTEVBUl9SQU5HRSh2YXIsIGJpdHNldCwgc2l6ZSwg c3RhcnRfYml0LAlcDQo+PiArCQkJCSAgICAgICBsZW4pCQkJCVwNCj4+ICsJX19SVEVfQklUU0VU X0ZPUkVBQ0godmFyLCBiaXRzZXQsIHNpemUsIHN0YXJ0X2JpdCwgbGVuLAlcDQo+PiArCQkJICAg ICBfX1JURV9CSVRTRVRfRklORF9GTEFHX0ZJTkRfQ0xFQVIpDQo+PiArDQo+PiArI2RlZmluZSBS VEVfQklUU0VUX0ZPUkVBQ0hfU0VUX1dSQVAodmFyLCBiaXRzZXQsIHNpemUsIHN0YXJ0X2JpdCwg IFwNCj4+ICsJCQkJICAgIGxlbikJCQkgICAgICAgXA0KPj4gKwlfX1JURV9CSVRTRVRfRk9SRUFD SCh2YXIsIGJpdHNldCwgc2l6ZSwgc3RhcnRfYml0LCBsZW4sICAgIFwNCj4+ICsJCQkgICAgIF9f UlRFX0JJVFNFVF9GSU5EX0ZMQUdfV1JBUCkNCj4+ICsNCj4+ICsjZGVmaW5lIFJURV9CSVRTRVRf Rk9SRUFDSF9DTEVBUl9XUkFQKHZhciwgYml0c2V0LCBzaXplLCBzdGFydF9iaXQsIFwNCj4+ICsJ CQkJICAgICAgIGxlbikJCQkJXA0KPj4gKwlfX1JURV9CSVRTRVRfRk9SRUFDSCh2YXIsIGJpdHNl dCwgc2l6ZSwgc3RhcnRfYml0LCBsZW4sCVwNCj4+ICsJCQkgICAgIF9fUlRFX0JJVFNFVF9GSU5E X0ZMQUdfV1JBUCB8CQlcDQo+PiArCQkJICAgICBfX1JURV9CSVRTRVRfRklORF9GTEFHX0ZJTkRf Q0xFQVIpDQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBFWFBFUklN RU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+PiArICoN Cj4+ICsgKiBJbml0aWFsaXplcyBhIGJpdHNldC4NCj4+ICsgKg0KPj4gKyAqIEFsbCBiaXRzIGFy ZSBjbGVhcmVkLg0KPj4gKyAqDQo+PiArICogQHBhcmFtIGJpdHNldA0KPj4gKyAqICAgQSBwb2lu dGVyIHRvIHRoZSBhcnJheSBvZiBiaXRzZXQgNjQtYml0IHdvcmRzLg0KPj4gKyAqIEBwYXJhbSBz aXplDQo+PiArICogICBUaGUgc2l6ZSBvZiB0aGUgYml0c2V0IChpbiBiaXRzKS4NCj4+ICsgKi8N Cj4+ICsNCj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4+ ICtydGVfYml0c2V0X2luaXQodWludDY0X3QgKmJpdHNldCwgc2l6ZV90IHNpemUpDQo+PiArew0K Pj4gKwltZW1zZXQoYml0c2V0LCAwLCBSVEVfQklUU0VUX1NJWkUoc2l6ZSkpOw0KPj4gK30NCj4+ ICsNCj4+ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhp cyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4+ICsgKg0KPj4gKyAqIFNl dCBhIGJpdCBpbiB0aGUgYml0c2V0Lg0KPj4gKyAqDQo+PiArICogQml0cyBhcmUgbnVtYmVyZWQg ZnJvbSAwIHRvIChzaXplIC0gMSkgKGluY2x1c2l2ZSkuDQo+PiArICoNCj4+ICsgKiBAcGFyYW0g Yml0c2V0DQo+PiArICogICBBIHBvaW50ZXIgdG8gdGhlIGFycmF5IHdvcmRzIG1ha2luZyB1cCB0 aGUgYml0c2V0Lg0KPj4gKyAqIEBwYXJhbSBiaXRfbnVtDQo+PiArICogICBUaGUgaW5kZXggb2Yg dGhlIGJpdCB0byBiZSBzZXQuDQo+PiArICovDQo+PiArDQo+PiArX19ydGVfZXhwZXJpbWVudGFs DQo+PiArc3RhdGljIGlubGluZSB2b2lkDQo+PiArcnRlX2JpdHNldF9zZXQodWludDY0X3QgKmJp dHNldCwgc2l6ZV90IGJpdF9udW0pDQo+PiArew0KPj4gKwlzaXplX3Qgd29yZDsNCj4+ICsJc2l6 ZV90IG9mZnNldDsNCj4+ICsJdWludDY0X3QgbWFzazsNCj4+ICsNCj4+ICsJd29yZCA9IF9fUlRF X0JJVFNFVF9XT1JEX0lEWChiaXRfbnVtKTsNCj4+ICsJb2Zmc2V0ID0gX19SVEVfQklUU0VUX0JJ VF9PRkZTRVQoYml0X251bSk7DQo+PiArCW1hc2sgPSBVSU5UNjRfQygxKSA8PCBvZmZzZXQ7DQo+ PiArDQo+PiArCWJpdHNldFt3b3JkXSB8PSBtYXNrOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4+ICsgKg0KPj4gKyAqIENsZWFyIGEgYml0IGluIHRo ZSBiaXRzZXQuDQo+PiArICoNCj4+ICsgKiBCaXRzIGFyZSBudW1iZXJlZCAwIHRvIChzaXplIC0g MSkgKGluY2x1c2l2ZSkuDQo+PiArICoNCj4+ICsgKiBAcGFyYW0gYml0c2V0DQo+PiArICogICBB IHBvaW50ZXIgdG8gdGhlIGFycmF5IHdvcmRzIG1ha2luZyB1cCB0aGUgYml0c2V0Lg0KPj4gKyAq IEBwYXJhbSBiaXRfbnVtDQo+PiArICogICBUaGUgaW5kZXggb2YgdGhlIGJpdCB0byBiZSBjbGVh cmVkLg0KPj4gKyAqLw0KPj4gKw0KPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4gK3N0YXRpYyBp bmxpbmUgdm9pZA0KPj4gK3J0ZV9iaXRzZXRfY2xlYXIodWludDY0X3QgKmJpdHNldCwgc2l6ZV90 IGJpdF9udW0pDQo+PiArew0KPj4gKwlzaXplX3Qgd29yZDsNCj4+ICsJc2l6ZV90IG9mZnNldDsN Cj4+ICsJdWludDY0X3QgbWFzazsNCj4+ICsNCj4+ICsJd29yZCA9IF9fUlRFX0JJVFNFVF9XT1JE X0lEWChiaXRfbnVtKTsNCj4+ICsJb2Zmc2V0ID0gX19SVEVfQklUU0VUX0JJVF9PRkZTRVQoYml0 X251bSk7DQo+PiArCW1hc2sgPSB+KFVJTlQ2NF9DKDEpIDw8IG9mZnNldCk7DQo+PiArDQo+PiAr CWJpdHNldFt3b3JkXSAmPSBtYXNrOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAd2Fy bmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0 IHByaW9yIG5vdGljZS4NCj4+ICsgKg0KPj4gKyAqIFNldCBhbGwgYml0cyBpbiB0aGUgYml0c2V0 Lg0KPj4gKyAqDQo+PiArICogQHBhcmFtIGJpdHNldA0KPj4gKyAqICAgQSBwb2ludGVyIHRvIHRo ZSBhcnJheSBvZiB3b3JkcyBtYWtpbmcgdXAgdGhlIGJpdHNldC4NCj4+ICsgKiBAcGFyYW0gc2l6 ZQ0KPj4gKyAqICAgVGhlIHNpemUgb2YgdGhlIGJpdHNldCAoaW4gYml0cykuDQo+PiArICovDQo+ PiArDQo+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIGlubGluZSB2b2lkDQo+PiAr cnRlX2JpdHNldF9zZXRfYWxsKHVpbnQ2NF90ICpiaXRzZXQsIHNpemVfdCBzaXplKQ0KPj4gK3sN Cj4+ICsJbWVtc2V0KGJpdHNldCwgMHhGRiwgUlRFX0JJVFNFVF9TSVpFKHNpemUpKTsNCj4+ICt9 DQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6 IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+PiArICoNCj4+ICsg KiBDbGVhciBhbGwgYml0cyBpbiB0aGUgYml0c2V0Lg0KPj4gKyAqDQo+PiArICogQHBhcmFtIGJp dHNldA0KPj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiB3b3JkcyBtYWtpbmcgdXAg dGhlIGJpdHNldC4NCj4+ICsgKiBAcGFyYW0gc2l6ZQ0KPj4gKyAqICAgVGhlIHNpemUgb2YgdGhl IGJpdHNldCAoaW4gYml0cykuDQo+PiArICovDQo+PiArDQo+PiArX19ydGVfZXhwZXJpbWVudGFs DQo+PiArc3RhdGljIGlubGluZSB2b2lkDQo+PiArcnRlX2JpdHNldF9jbGVhcl9hbGwodWludDY0 X3QgKmJpdHNldCwgc2l6ZV90IHNpemUpDQo+PiArew0KPj4gKwlydGVfYml0c2V0X2luaXQoYml0 c2V0LCBzaXplKTsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsg KiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3Rp Y2UuDQo+PiArICoNCj4+ICsgKiBDb3VudCBhbGwgc2V0IGJpdHMuDQo+PiArICoNCj4+ICsgKiBA cGFyYW0gYml0c2V0DQo+PiArICogICBBIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIHdvcmRzIG1h a2luZyB1cCB0aGUgYml0c2V0Lg0KPj4gKyAqIEBwYXJhbSBzaXplDQo+PiArICogICBUaGUgc2l6 ZSBvZiB0aGUgYml0c2V0IChpbiBiaXRzKS4NCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICBSZXR1 cm5zIHRoZSBudW1iZXIgb2YgJzEnIGJpdHMgaW4gdGhlIGJpdHNldC4NCj4+ICsgKi8NCj4+ICsN Cj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ICtzdGF0aWMgaW5saW5lIHNpemVfdA0KPj4gK3J0 ZV9iaXRzZXRfY291bnRfc2V0KGNvbnN0IHVpbnQ2NF90ICpiaXRzZXQsIHNpemVfdCBzaXplKQ0K Pj4gK3sNCj4+ICsJc2l6ZV90IGk7DQo+PiArCXNpemVfdCB0b3RhbCA9IDA7DQo+PiArCXVpbnQ2 NF90IHVudXNlZF9tYXNrOw0KPj4gKw0KPj4gKwkvKg0KPj4gKwkgKiBVbnVzZWQgYml0cyBpbiBh IHJ0ZV9iaXRzZXQgYXJlIGFsd2F5cyAnMCcsIGFuZCB0aHVzIGFyZQ0KPj4gKwkgKiBub3QgaW5j bHVkZWQgaW4gdGhpcyBjb3VudC4NCj4+ICsJICovDQo+PiArCWZvciAoaSA9IDA7IGkgPCBSVEVf QklUU0VUX05VTV9XT1JEUyhzaXplKSAtIDE7IGkrKykNCj4+ICsJCXRvdGFsICs9IF9fYnVpbHRp bl9wb3Bjb3VudGxsKGJpdHNldFtpXSk7DQo+PiArDQo+PiArCXVudXNlZF9tYXNrID0gVUlOVDY0 X01BWCA+PiBfX1JURV9CSVRTRVRfVU5VU0VEKHNpemUpOw0KPj4gKwl0b3RhbCArPSBfX2J1aWx0 aW5fcG9wY291bnRsbChiaXRzZXRbaV0gJiB1bnVzZWRfbWFzayk7DQo+PiArDQo+PiArCXJldHVy biB0b3RhbDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBA YiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2Uu DQo+PiArICoNCj4+ICsgKiBDb3VudCBhbGwgY2xlYXJlZCBiaXRzLg0KPj4gKyAqDQo+PiArICog QHBhcmFtIGJpdHNldA0KPj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiB3b3JkcyBt YWtpbmcgdXAgdGhlIGJpdHNldC4NCj4+ICsgKiBAcGFyYW0gc2l6ZQ0KPj4gKyAqICAgVGhlIHNp emUgb2YgdGhlIGJpdHNldCAoaW4gYml0cykuDQo+PiArICogQHJldHVybg0KPj4gKyAqICAgUmV0 dXJucyB0aGUgbnVtYmVyIG9mICcwJyBiaXRzIGluIHRoZSBiaXRzZXQuDQo+PiArICovDQo+PiAr DQo+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIGlubGluZSBzaXplX3QNCj4+ICty dGVfYml0c2V0X2NvdW50X2NsZWFyKGNvbnN0IHVpbnQ2NF90ICpiaXRzZXQsIHNpemVfdCBzaXpl KQ0KPj4gK3sNCj4+ICsJcmV0dXJuIHNpemUgLSBydGVfYml0c2V0X2NvdW50X3NldChiaXRzZXQs IHNpemUpOw0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4gKyAqIEBi IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4N Cj4+ICsgKg0KPj4gKyAqIFRlc3QgaWYgYSBiaXQgaXMgc2V0Lg0KPj4gKyAqDQo+PiArICogQHBh cmFtIGJpdHNldA0KPj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiB3b3JkcyBtYWtp bmcgdXAgdGhlIGJpdHNldC4NCj4+ICsgKiBAcGFyYW0gYml0X251bQ0KPj4gKyAqICAgSW5kZXgg b2YgdGhlIGJpdCB0byB0ZXN0LiBJbmRleCAwIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQu DQo+PiArICogQHJldHVybg0KPj4gKyAqICAgUmV0dXJucyB0cnVlIGlmIHRoZSBiaXQgaXMgJzEn LCBhbmQgZmFsc2UgaWYgdGhlIGJpdCBpcyAnMCcuDQo+PiArICovDQo+PiArDQo+PiArX19ydGVf ZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIGlubGluZSBib29sDQo+PiArcnRlX2JpdHNldF90ZXN0 KGNvbnN0IHVpbnQ2NF90ICpiaXRzZXQsIHNpemVfdCBiaXRfbnVtKQ0KPj4gK3sNCj4+ICsJc2l6 ZV90IHdvcmQ7DQo+PiArCXNpemVfdCBvZmZzZXQ7DQo+PiArDQo+PiArCXdvcmQgPSBfX1JURV9C SVRTRVRfV09SRF9JRFgoYml0X251bSk7DQo+PiArCW9mZnNldCA9IF9fUlRFX0JJVFNFVF9CSVRf T0ZGU0VUKGJpdF9udW0pOw0KPj4gKw0KPj4gKwlyZXR1cm4gKGJpdHNldFt3b3JkXSA+PiBvZmZz ZXQpICYgMTsNCj4+ICt9DQo+PiArDQo+PiArI2RlZmluZSBfX1JURV9CSVRTRVRfRklORF9GTEFH X0ZJTkRfQ0xFQVIgKDFVIDw8IDApDQo+PiArI2RlZmluZSBfX1JURV9CSVRTRVRfRklORF9GTEFH X1dSQVAgKDFVIDw8IDEpDQo+PiArDQo+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGlj IGlubGluZSBzc2l6ZV90DQo+PiArX19ydGVfYml0c2V0X2ZpbmRfbm93cmFwKGNvbnN0IHVpbnQ2 NF90ICpiaXRzZXQsIHNpemVfdCBfX3J0ZV91bnVzZWQgc2l6ZSwNCj4+ICsJCQkgc2l6ZV90IHN0 YXJ0X2JpdCwgc2l6ZV90IGxlbiwgYm9vbCBmaW5kX2NsZWFyKQ0KPiANCj4gICAgIF5eIHNlZW1z IGxpa2UgdGhlIGludGVudCBoZXJlIGlzIGZvciB0aGlzIHRvIGJlIGludGVybmFsIChub3QgcGFy dCBvZg0KPiAgICAgICAgcHVibGljIGFwaSkgaSB3b25kZXIgZG8gd2UgaGF2ZSB0byBtYXJrIGl0 IF9fcnRlX2V4cGVyaW1lbnRhbD8NCj4gDQo+ICAgICAgICBvciBiZXR0ZXIgY2FuIHdlIHByZXZl bnQgdmlzaWJpbGl0eSAvIGNvbnN1bXB0aW9uIG91dHNpZGUgb2YgdGhlDQo+ICAgICAgICBpbmxp bmUgZnVuY3Rpb25zIGluIHRoaXMgaGVhZGVyPw0KPiANCg0KSXQgaXMgc3VwcG9zZWQgdG8gYmUg aW50ZXJuYWwgKGFsdGhvdWdoIHlvdSBjYW4gcXVlc3Rpb24gdGhlIERQREsgaGFiaXQgDQpvZiB1 c2luZyB0aGUgcmVzZXJ2ZWQgX18gbmFtZXNwYWNlIGZvciBzdWNoIHN5bWJvbHMpLg0KDQpJIGRv bid0IGtub3cgb2YgYW55IHdheSB0byBwcmV2ZW50IGl0cyB1c2UuIEknbSBub3Qgc3VyZSBpdCdz IG5lZWRlZC4gDQpUaG9zZSB3aG8gZG9uJ3QgaGVlZCB0aGUgIl9fXyIgcHJlZml4IHdhcm5pbmcs IGFyZSBvbiB0aGVpciBvd24uDQoNCj4+ICt7DQo+PiArCXNpemVfdCB3b3JkX2lkeDsNCj4+ICsJ c2l6ZV90IG9mZnNldDsNCj4+ICsJc2l6ZV90IGVuZF9iaXQgPSBzdGFydF9iaXQgKyBsZW47DQo+ PiArDQo+PiArCVJURV9BU1NFUlQoZW5kX2JpdCA8PSBzaXplKTsNCj4+ICsNCj4+ICsJaWYgKHVu bGlrZWx5KGxlbiA9PSAwKSkNCj4+ICsJCXJldHVybiAtMTsNCj4+ICsNCj4+ICsJd29yZF9pZHgg PSBfX1JURV9CSVRTRVRfV09SRF9JRFgoc3RhcnRfYml0KTsNCj4+ICsJb2Zmc2V0ID0gX19SVEVf QklUU0VUX0JJVF9PRkZTRVQoc3RhcnRfYml0KTsNCj4+ICsNCj4+ICsJd2hpbGUgKHdvcmRfaWR4 IDw9IF9fUlRFX0JJVFNFVF9XT1JEX0lEWChlbmRfYml0IC0gMSkpIHsNCj4+ICsJCXVpbnQ2NF90 IHdvcmQ7DQo+PiArCQlpbnQgd29yZF9mZnM7DQo+PiArDQo+PiArCQl3b3JkID0gYml0c2V0W3dv cmRfaWR4XTsNCj4+ICsJCWlmIChmaW5kX2NsZWFyKQ0KPj4gKwkJCXdvcmQgPSB+d29yZDsNCj4+ ICsNCj4+ICsJCXdvcmQgPj49IG9mZnNldDsNCj4+ICsNCj4+ICsJCXdvcmRfZmZzID0gX19idWls dGluX2Zmc2xsKHdvcmQpOw0KPj4gKw0KPj4gKwkJaWYgKHdvcmRfZmZzICE9IDApIHsNCj4+ICsJ CQlzc2l6ZV90IGZmcyA9IHN0YXJ0X2JpdCArIHdvcmRfZmZzIC0gMTsNCj4+ICsNCj4+ICsJCQkv Kg0KPj4gKwkJCSAqIENoZWNrIGlmIHNldCBiaXQgd2VyZSBhbW9uZyB0aGUgbGFzdCwNCj4+ICsJ CQkgKiB1bnVzZWQgYml0cywgaW4gdGhlIGxhc3Qgd29yZC4NCj4+ICsJCQkgKi8NCj4+ICsJCQlp ZiAodW5saWtlbHkoZmZzID49IChzc2l6ZV90KWVuZF9iaXQpKQ0KPj4gKwkJCQlyZXR1cm4gLTE7 DQo+PiArDQo+PiArCQkJcmV0dXJuIGZmczsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCXN0YXJ0X2Jp dCArPSAoUlRFX0JJVFNFVF9XT1JEX0JJVFMgLSBvZmZzZXQpOw0KPj4gKwkJd29yZF9pZHgrKzsN Cj4+ICsJCW9mZnNldCA9IDA7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIC0xOw0KPj4gKw0K Pj4gK30NCj4+ICsNCg0K