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 3FCBC45AEE; Wed, 9 Oct 2024 09:48:28 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2F10740A75; Wed, 9 Oct 2024 09:48:28 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) by mails.dpdk.org (Postfix) with ESMTP id 123AF40653 for ; Wed, 9 Oct 2024 09:48:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1728460106; x=1759996106; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=t8p4tOk0plrTi7EOrcI+qLCly2W2jB3h02fvLJ94dJI=; b=baV1J1XfBjC8vHWAQ/+T3gNIl5f/LIV1ozaBsrioWFlMGLc+eimk9TRw GSHxVtyYooiPm0jlXaUunXXMvRD+rVyLWlaYs+FSciFbqFE1SyyEj6NDv zXGnL2urCAzfjqvnLQ0/dvty1ZcqTB8C5C6DVXBsb3HbZ2897iBqYV8GM UyQQBs9gOBqUDeCcpbFrM95COFjbLz8m3oSB6Qht2NRmglF6cANHQE4a3 KsBCE39TgDY+f22COylkdtPvrGvOjWeS8CMnnJuZKLFcnmos5/oWd2vg2 DXj7TgoNVaWUWu/0k2vjU327e63DTCP8siZTJYpcC1yqB3FlgvgnbiwCW w==; X-CSE-ConnectionGUID: jXwaD5Y4S8mMBrGkH7GL9w== X-CSE-MsgGUID: VKCHAO54SsCnwF30LfdYJQ== X-IronPort-AV: E=McAfee;i="6700,10204,11219"; a="27622149" X-IronPort-AV: E=Sophos;i="6.11,189,1725346800"; d="scan'208";a="27622149" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Oct 2024 00:48:25 -0700 X-CSE-ConnectionGUID: GagqYUcRQ3Cz5aGvkB1onA== X-CSE-MsgGUID: o+N2h0pCSSSy535e/65+zQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,189,1725346800"; d="scan'208";a="99487284" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmviesa002.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 09 Oct 2024 00:48:25 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 9 Oct 2024 00:48:24 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Wed, 9 Oct 2024 00:48:24 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.47) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 9 Oct 2024 00:48:24 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mhRUcMKEHbJdugHpkn+KhOw3jhLWoDSrqmBsLPH3op2416e4jjfDFxE/iA/tDAarJjVAgwtOae7X9TsGMUSHmsShFOLlevLjykzMrUqZTS8KrqyT7Jh6Qrut1NDry3He2uwN91xjrqqrXxJNvF11E/+wTETd0SV3SVv+bpWWN9hbhaAGdoFOmWOL/tjWJwWxxnkxhCvaM0oj7BvuPufJ8xRPXgNziE9NOc4NmyZfg8Quc8eazyQTXIjQGE0kIbtBrifvI2xVd/g9y/1cfCstqgHzvt+1o7KG1YQ8YLatqBwCbb67LlBW0usbd4wAFlszsSyVqClRnS1JH2Gvhi1OPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=t8p4tOk0plrTi7EOrcI+qLCly2W2jB3h02fvLJ94dJI=; b=RgFvEQr1Zs0BjQnpWmrzmNiXBotvuN6zv8QMYZ5YdUbbnqBSX5MDNon/lf+Jd5HuAx/zLlVxDLEd+R5ljde5DgmEePhINDK/P7Y9lr/ozvXP/HAti8b6dJFDburDLAwZV7SkNNfhv1PBqJ5SvPnZIbXfkhNS/WQLPAIXnXbQAQIfrAbRi4zh9Vk/6w3rWs8z0Uc5SEuaLFYJOryvoKWqcrXMBNc35FYMsBP3+46GugGetteXBCXdFEPDkQzHgmSbBEsWU7CyYSLsKhPSOoX11TsTqoMucurk5Ts3Hbtad7FlRRuhMcLKQKrWYxwCN1iwwPg/Q70LqlrnxErJx8aYiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH0PR11MB5013.namprd11.prod.outlook.com (2603:10b6:510:30::21) by SJ0PR11MB5069.namprd11.prod.outlook.com (2603:10b6:a03:2ad::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8026.23; Wed, 9 Oct 2024 07:48:21 +0000 Received: from PH0PR11MB5013.namprd11.prod.outlook.com ([fe80::1c54:1589:8882:d22b]) by PH0PR11MB5013.namprd11.prod.outlook.com ([fe80::1c54:1589:8882:d22b%3]) with mapi id 15.20.8048.013; Wed, 9 Oct 2024 07:48:21 +0000 From: "Kusztal, ArkadiuszX" To: Ferruh Yigit , "Marchand, David" CC: "dev@dpdk.org" , "Ji, Kai" , "Dooley, Brian" Subject: RE: [PATCH v2 1/3] net: add thread-safe crc api Thread-Topic: [PATCH v2 1/3] net: add thread-safe crc api Thread-Index: AQHbFDfxcqxwzXrsXkKcW53MSd7bMrJ8P9kAgAETofCAAFIWgIAAcGzQ Date: Wed, 9 Oct 2024 07:48:20 +0000 Message-ID: References: <20241001181150.43506-1-arkadiuszx.kusztal@intel.com> <20241001181150.43506-2-arkadiuszx.kusztal@intel.com> <31a2db2a-1983-479e-ab96-5609cf9c18bb@amd.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR11MB5013:EE_|SJ0PR11MB5069:EE_ x-ms-office365-filtering-correlation-id: 43630ef4-2f17-420d-00df-08dce836bef7 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?NmtRTlRMMU44YzcrMEhXQU9rLzlqcEZORjg0NlRpWnV6emN3dEFuTThmVkRE?= =?utf-8?B?REs5UDdsbHczaG9KdENjSVhSRnlFL291V3RyVS9lbTBlNUswQ2k4c3FyNE1N?= =?utf-8?B?LzBLdHdXT1BaRjE3TVJYQXcxLy8wWnArblM3a1BuNTdzc2x2bVFRdUtvbjlQ?= =?utf-8?B?eERTdmRnOVlrdEpQbUtoRFp2bjY5NVRhZ25NR2UvMWdYRTUrM0daY1lQQk5x?= =?utf-8?B?a2k0OWE5S2YyUU5mR2lMT2k5U1pLMjhiUFc4cG5qQ1NHQ1BuYzJMdlJDVE9N?= =?utf-8?B?b2ZiQzlpZGNBcmZVR055OHRDeHJFVUNrWHprVGFWSnVoZlhqeXdWTzZsZFU1?= =?utf-8?B?OXVudmkwWnpYTzZJblpFNEVjZWVKSkR1M1dtbnRjU3IycVI1OUFnWUVVR1Rj?= =?utf-8?B?NVFZeTAxWVk5aU44c3plTFlLbzVGOHFVRk5qeW1uaVBLeFd3WHVrK0xEa0hM?= =?utf-8?B?bjIrcFVUVXpFU3NrbHU2TEF0eWhzNitQRDl4MjFtZTZ3WkpXM2VPV1YyOTRp?= =?utf-8?B?NGJFQXNmNFUxSTJxbnh1V3pRTURGbVN3Vm0vYTRhaUFqTHBGK3JCYXhHNHl0?= =?utf-8?B?Q1JwdnlkT1JpZ3JsRG5zb0pFemd5ZVFLbmhvc2o0WFkxRUs4NnFsdCs3NVMr?= =?utf-8?B?WXgvT1o2cDRYbFNlaUsxbW5RQ2lzVGJVMWNxNFROV0Mra3ZIRm4rNjI4ZjFq?= =?utf-8?B?VzhZWjMzaVRvVUJtMUlBZUZwN1ZDa2RqaTVYd2JpYXhpbzdtS2ZRYUpnNUhE?= =?utf-8?B?RWpkcEd6Q1dxRmJMd1BjemQ2NnNHdVY1SzJUNFBtQlNLdlZHVkp0YjNaV24w?= =?utf-8?B?UnppLzVZRmFVVE42SkhPOVNKQlQxdnV3eFQwK2FJajEzUUtkNk0yK1B1a1dV?= =?utf-8?B?MXNiUklCQ2QzUHZOeFh4elVwVWkwTUJGaEdEQmErcktmSmIzdFNiZXJpRWMv?= =?utf-8?B?RGZhWXkvczgweVMyZGdyZWZ2MUMwanpOcjkreEhEMkNsWDlkUXBtSGQrSG42?= =?utf-8?B?eU1BbDVEYUFoTmZOa1pPVS9jZDlLU1luSkdWM2FoTm4wU1I0NnRlem5tcTdR?= =?utf-8?B?QTZncWtOanMwMnY3aDV6eDFIa0Y4UmZ5dlZ1UjNHSXpjS3pmRGR5Ti9vZUpU?= =?utf-8?B?U0JaaDZnMjhUWVNiVS95NDRPKzNvOGhaa1FaUE5ZbkRmRXNmRm8yRU5HR091?= =?utf-8?B?bnpWeFV0am1QaGVpZHFlRXgwUTI5Yk1CSDlVZTR2Z3VIbFQ1clplbGVWQUpW?= =?utf-8?B?U005V25LMHkrSUtnUTJUWHVweVc2QWZCSmg0NC9NLzhUdlFuN1piWDc4NW5X?= =?utf-8?B?eTFQc3EvQldlQU4wbDdwek54TkNwSWZneEc2Q3hkelNVQmZjL0xIelg2UzAr?= =?utf-8?B?WFhCZENqOXhEQ3dGa1R5OUxVTkRZVnlEeUlmYTdSMVJJUEpUN3MxWC96TjNP?= =?utf-8?B?cHlKRnNMSVJnVzJlN1plc2dnQkpIMTl1WDVhSTFuY2YxZEU5Q0ZOcnNuV205?= =?utf-8?B?QzBVTDVDWFh4cG9TbXJPQTM1OEE1bVludnZPdm1sUHY1Y21jWWMzcGdURXhx?= =?utf-8?B?V2M3UWV2QU9zckQ3Z0RDcnZ0L2xNUG9MejIrd29sdUdET0owWUk0TDRLOVkz?= =?utf-8?B?VGUyZDFRU2VTMmt1UkZxdzRHQ0ZVUkduNmFPN01yTFJURngrOE1IRkVRRE5R?= =?utf-8?B?NTNjSE1Pb2tDWXJtYTNENHJGRmJPUm81QW13UUx2VDI1Wjh0MkNaUmowY05i?= =?utf-8?B?clA1MVpIdHRSN2swQTZxUjh4Q1F4MUhFM2ZWbFMwTHRkM0xlZ0FZZ0xqREJ4?= =?utf-8?B?MTY4ZEhFWWVGUkR4Rnhsdz09?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR11MB5013.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?QkYzaTJ1N2VIWU52bnJlTm5xWXloMDRSV055RTFaMFFnWFdJc3Mwb1BuL2N2?= =?utf-8?B?SlVSK3hUTGxHR2VkYjZQOWViUWpIMU51UUpRenM3eFBIOTE2aTVrcUJOa2d4?= =?utf-8?B?amNKd2tuU0t2eDArRkZ6aDB4dmJRSmFaKzY5TTQ1RFFjUHMrK29WMmcxZHFZ?= =?utf-8?B?aDdRUVA2NUYxNURXY1g4T3k0T01BcW14NmNhdWxOLy9QaXVwVXROditLYmdP?= =?utf-8?B?eXNEa2wvMWdDZHlyQ01LTmc2YzI3OWVEOXVDMFJxSGorM2VaMDArZnI2UC9N?= =?utf-8?B?YVJGbXBCUm1PM0ozeFFiREQybm1VWEpkclVLOVRKNUhIY0NTVEJtT05OMkdt?= =?utf-8?B?dVlrdlBrWGo2RE02b1A0S1B1NGFVUGRxMExkN2E2bWdXaXY4b0tJWVdhVURs?= =?utf-8?B?cTZuVS90aFREbVFzT0VabGc0dTh2NCtKd2lsTkhNU3NObHgyTEZJdGpaM1ly?= =?utf-8?B?U1BXVTl6V2tTdWNYWTRXU1pZT2lFQkc1aW1LNW1rMnh2eWhLUTdlc3pWNnJI?= =?utf-8?B?bGZ6c3dTbXlHcnhybzhQRjJDL3BBN21MSGdyTzl2b25PRHpBWG5HelpXRHlP?= =?utf-8?B?WXNBRkppcUExZ2NEVzB2RE5LZ1ZOcFQ3WGEyMHhDOUNJdzFGeUhIaVZSUnU3?= =?utf-8?B?RzhZVXh5RGdnbVdLY0FFQmNvQnVLU1IwWU94c09kYU44NTliQUhFZHRTN0ZS?= =?utf-8?B?TUhBUElFcGR3RXRwd3dKSkRKaEhWMHR5UldvckdzektXR1VFdTlFaTZaQWcr?= =?utf-8?B?WHpqd2JsVWRMNlBjWDMxWGhKNThMSVVMN1dNSFUyUkZzUUlDZW9VQ3ZRQTZM?= =?utf-8?B?eFJaNGFYK2NRSVJ4TmNtbDhCS0pPMkRhUE5jdGdLaS93eGc1VmU0cGkrbENl?= =?utf-8?B?OC82WHZMdi96dTlrMzVoVmd6UjIwcy9OZm5Kb3dyWXF2VlVONzdKS1dkZDN1?= =?utf-8?B?b1NwbGo5US8vYmthMVVuaW54S2dKL0J0cUN2SmphWmwrMGlTTnV5N21ScGQ2?= =?utf-8?B?Z3pxMVdNa2NCT20rUEFnb1RNaHlZd1lUZ05DUkliUzIwc0pZVDVMQXBkWk9h?= =?utf-8?B?RENUUGFwUmgvOGVBSGRTQWRUaEk4WHJBcDJKVUtUM1JKTk9hVGFidG5VMlIy?= =?utf-8?B?Um91dEl5UUJGOXY4V0gwZmx0N2ZVTWVlVEp6TXdZMHhtUFc0TlQ1L0lucFg5?= =?utf-8?B?TmhQeUFCOHFRY0ZjT2d1WldNb2puYTdmVFlUUjZYTXp3WlB6UkM1b2ZhMmZL?= =?utf-8?B?am0vcHZQcGVEK1VENVJYZkdSL1dCZk51bEYybk1BUEY2NmlOZ3F3LzRYcFM4?= =?utf-8?B?Z0syRWtOeUhFSGR0ZkM5UGw4Q3ZWTEd2UEswTmNpM1JhR2laelovaXFUTFAv?= =?utf-8?B?RXFXckJtU0NzSXZLR1orWmlseTBmYW04UjFFOVNMdG1aTmJqL29PSmdGQmM0?= =?utf-8?B?aWxIMk1uTzZvWDR4WDdMcGVZa25EUlEwaEQyLzV0c0J2NDV3aE9zQjgzbERZ?= =?utf-8?B?NVBFQys2V0JwOTBvVXpld2Z4MFlrMDFqTzdlVElpQnlFODk3WmM5RFRNYnY0?= =?utf-8?B?MVhFci9nV1FaUmVwc3RqM3VoS0VOVitudWE1VGlFQWY1S2FHNGV0LzY1T054?= =?utf-8?B?ZFV2czNib2R2NVc0WXo4ZXlRc1dZTkxEWHFNblZ6MUs5Slk3b3I2MkVhdWZD?= =?utf-8?B?Y1RBaEVxNVNTb3gwY3F3WTQxRHY3YmtUazFCbUdNUFRBQXYxT2t6RU1ZZkNC?= =?utf-8?B?ZE5hWjMzL1RpV1A2ZVo3WUhJSTZJYSs1ME16SlQ2UCtJTWNyc2hWUHJUM1ZW?= =?utf-8?B?Z081MGZVUzNIckw3cnlLWTdEU2NYWkljK255M0JsZ2xXOTRXQTZwWFBtME5u?= =?utf-8?B?RGszcWhnRGVjRzUwQVlRNXBEVUw0R2FlNGtCcWMrYU0rVEJXWG9rQy9mdXBv?= =?utf-8?B?bmdqcXRUL2wxampiUmpkemtYTElnbW8vS0NiUTc2b3NlWXUxRmp5aDZFMjc1?= =?utf-8?B?NXM4S3YwcytnZGhIbk40Y0FZRU1ReVNtN3llMG9Ha2F2NnJ2Z2x2cEZaMHkv?= =?utf-8?B?TVZxa0R2TDNBZHA2ZzFKY3QxbFdmUEdHbG1VZ3NJbzYvN2R3Zi9lMG5WamhF?= =?utf-8?B?cWlYUWJKMGtMTnVyL3VJTmZXMlN0cnVWT0Jwb0NKRjlqbWNxL3dMZnRmZGti?= =?utf-8?B?bWc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5013.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43630ef4-2f17-420d-00df-08dce836bef7 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2024 07:48:20.9006 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 02nSkzTxPJ/i7HpU9zY/PLPCXAdtZvu5QKHV39fStmrbFzu1OMHs4xynDk50jsOSbxjtnEvnLwWDwbBSeCpTcJZ/xWXMhDjJUIFObirftxo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB5069 X-OriginatorOrg: intel.com 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 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogRmVycnVoIFlpZ2l0IDxm ZXJydWgueWlnaXRAYW1kLmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBPY3RvYmVyIDksIDIwMjQg MzowMyBBTQ0KPiBUbzogS3VzenRhbCwgQXJrYWRpdXN6WCA8YXJrYWRpdXN6eC5rdXN6dGFsQGlu dGVsLmNvbT47IE1hcmNoYW5kLCBEYXZpZA0KPiA8ZGF2aWQubWFyY2hhbmRAcmVkaGF0LmNvbT4N Cj4gQ2M6IGRldkBkcGRrLm9yZzsgSmksIEthaSA8a2FpLmppQGludGVsLmNvbT47IERvb2xleSwg QnJpYW4NCj4gPGJyaWFuLmRvb2xleUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg djIgMS8zXSBuZXQ6IGFkZCB0aHJlYWQtc2FmZSBjcmMgYXBpDQo+IA0KPiBPbiAxMC84LzIwMjQg OTo1MSBQTSwgS3VzenRhbCwgQXJrYWRpdXN6WCB3cm90ZToNCj4gPiBIaSBGZXJydWgsDQo+ID4g VGhhbmtzIGZvciB0aGUgcmV2aWV3LCBjb21tZW50cyBpbmxpbmUsDQo+ID4NCj4gPj4gLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogRmVycnVoIFlpZ2l0IDxmZXJydWgueWln aXRAYW1kLmNvbT4NCj4gPj4gU2VudDogVHVlc2RheSwgT2N0b2JlciA4LCAyMDI0IDU6NDMgQU0N Cj4gPj4gVG86IEt1c3p0YWwsIEFya2FkaXVzelggPGFya2FkaXVzengua3VzenRhbEBpbnRlbC5j b20+OyBNYXJjaGFuZCwNCj4gPj4gRGF2aWQgPGRhdmlkLm1hcmNoYW5kQHJlZGhhdC5jb20+DQo+ ID4+IENjOiBkZXZAZHBkay5vcmc7IEppLCBLYWkgPGthaS5qaUBpbnRlbC5jb20+OyBEb29sZXks IEJyaWFuDQo+ID4+IDxicmlhbi5kb29sZXlAaW50ZWwuY29tPg0KPiA+PiBTdWJqZWN0OiBSZTog W1BBVENIIHYyIDEvM10gbmV0OiBhZGQgdGhyZWFkLXNhZmUgY3JjIGFwaQ0KPiA+Pg0KPiA+PiBP biAxMC8xLzIwMjQgNzoxMSBQTSwgQXJrYWRpdXN6IEt1c3p0YWwgd3JvdGU6DQo+ID4+PiBUaGUg Y3VycmVudCBuZXQgQ1JDIEFQSSBpcyBub3QgdGhyZWFkLXNhZmUsIHRoaXMgcGF0Y2ggc29sdmVz IHRoaXMNCj4gPj4+IGJ5IGFkZGluZyBhbm90aGVyLCB0aHJlYWQtc2FmZSBBUEkgZnVuY3Rpb25z Lg0KPiA+Pj4gVGhpcyBBUEkgaXMgYWxzbyBzYWZlIHRvIHVzZSBhY3Jvc3MgbXVsdGlwbGUgcHJv Y2Vzc2VzLCB5ZXQgd2l0aA0KPiA+Pj4gbGltaXRhdGlvbnMgb24gbWF4LXNpbWQtYml0d2lkdGgs IHdoaWNoIHdpbGwgYmUgY2hlY2tlZCBvbmx5IGJ5IHRoZQ0KPiA+Pj4gcHJvY2VzcyB0aGF0IGNy ZWF0ZWQgdGhlIENSQyBjb250ZXh0OyBhbGwgb3RoZXIgcHJvY2Vzc2VzIHdpbGwgdXNlDQo+ID4+ PiB0aGUgc2FtZSBDUkMgZnVuY3Rpb24gd2hlbiB1c2VkIHdpdGggdGhlIHNhbWUgQ1JDIGNvbnRl eHQuDQo+ID4+PiBJdCBpcyBhbiB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBwcm9jZXNzIGJpbmFy aWVzIGFyZSBjb21waWxlZCB3aXRoDQo+ID4+PiBkaWZmZXJlbnQgU0lNRCBjYXBhYmlsaXRpZXMg d2hlbiB0aGUgc2FtZSBDUkMgY29udGV4dCBpcyB1c2VkLg0KPiA+Pj4NCj4gPj4+IFNpZ25lZC1v ZmYtYnk6IEFya2FkaXVzeiBLdXN6dGFsIDxhcmthZGl1c3p4Lmt1c3p0YWxAaW50ZWwuY29tPg0K PiA+Pg0KPiA+PiA8Li4uPg0KPiA+Pg0KPiA+Pj4gK3N0YXRpYyBzdHJ1Y3QNCj4gPj4+ICt7DQo+ ID4+PiArCXVpbnQzMl90ICgqZltSVEVfTkVUX0NSQ19SRVFTXSkNCj4gPj4+ICsJCShjb25zdCB1 aW50OF90ICpkYXRhLCB1aW50MzJfdCBkYXRhX2xlbik7DQo+ID4+Pg0KPiA+Pg0KPiA+PiBJdCBp bmNyZWFzZXMgcmVhZGFiaWxpdHkgdG8gdHlwZWRlZiBmdW5jdGlvbiBwb2ludGVycy4NCj4gPg0K PiA+IEFncmVlLCB0aG91Z2ggdGhpcyB0eXBlZGVmIHdvdWxkIGJlIHVzZWQgaGVyZSBvbmx5LCB0 aGF04oCZcyB3aHkgSSBsZWZ0IGl0IG91dC4NCj4gPiBCdXQgSSBjYW4gYWRkIGl0IHRoZW4uDQo+ ID4NCj4gPj4NCj4gPj4NCj4gPj4+ICt9IGhhbmRsZXJzW1JURV9ORVRfQ1JDX0FWWDUxMiArIDFd Ow0KPiA+Pj4NCj4gPj4+IC0vKioNCj4gPj4+IC0gKiBSZWZsZWN0IHRoZSBiaXRzIGFib3V0IHRo ZSBtaWRkbGUNCj4gPj4+IC0gKg0KPiA+Pj4gLSAqIEBwYXJhbSB2YWwNCj4gPj4+IC0gKiAgIHZh bHVlIHRvIGJlIHJlZmxlY3RlZA0KPiA+Pj4gLSAqDQo+ID4+PiAtICogQHJldHVybg0KPiA+Pj4g LSAqICAgcmVmbGVjdGVkIHZhbHVlDQo+ID4+PiAtICovDQo+ID4+PiAtc3RhdGljIHVpbnQzMl90 DQo+ID4+PiArc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiA+Pj4NCj4gPj4NCj4gPj4gRG9lcyBj aGFuZ2luZyB0byAnaW5saW5lJyByZXF1aXJlZCwgYXMgZnVuY3Rpb24gaXMgc3RhdGljIGNvbXBp bGVyDQo+ID4+IGNhbiBkbyB0aGUgc2FtZS4NCj4gPg0KPiA+IFRydWUsIHRob3VnaCBpdCBtYXkg YmUgbW9yZSByZWFkYWJsZSBzb21ldGltZXMuDQo+ID4gT2YgY291cnNlIHRoZXJlIGlzIG5vIHdh eSB0aGF0IGluIE8zIHRoZXNlIGZ1bmN0aW9ucyB3b3VsZCBub3QgYmUgaW5saW5lZCBieQ0KPiB0 aGUgY29tcGlsZXIsIHJlZ2FyZGxlc3MgaWYgdGhlIGlubGluZSBoaW50IGlzIHByZXNlbnQgb3Ig bm90Lg0KPiA+DQo+ID4+DQo+ID4+PiAgcmVmbGVjdF8zMmJpdHModWludDMyX3QgdmFsKQ0KPiA+ Pj4gIHsNCj4gPj4+ICAJdWludDMyX3QgaSwgcmVzID0gMDsNCj4gPj4+IEBAIC05OSwyNiArNDMs NyBAQCByZWZsZWN0XzMyYml0cyh1aW50MzJfdCB2YWwpDQo+ID4+PiAgCXJldHVybiByZXM7DQo+ ID4+PiAgfQ0KPiA+Pj4NCj4gPj4+IC1zdGF0aWMgdm9pZA0KPiA+Pj4gLWNyYzMyX2V0aF9pbml0 X2x1dCh1aW50MzJfdCBwb2x5LA0KPiA+Pj4gLQl1aW50MzJfdCAqbHV0KQ0KPiA+Pj4gLXsNCj4g Pj4+IC0JdWludDMyX3QgaSwgajsNCj4gPj4+IC0NCj4gPj4+IC0JZm9yIChpID0gMDsgaSA8IENS Q19MVVRfU0laRTsgaSsrKSB7DQo+ID4+PiAtCQl1aW50MzJfdCBjcmMgPSByZWZsZWN0XzMyYml0 cyhpKTsNCj4gPj4+IC0NCj4gPj4+IC0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsNCj4gPj4+ IC0JCQlpZiAoY3JjICYgMHg4MDAwMDAwMEwpDQo+ID4+PiAtCQkJCWNyYyA9IChjcmMgPDwgMSkg XiBwb2x5Ow0KPiA+Pj4gLQkJCWVsc2UNCj4gPj4+IC0JCQkJY3JjIDw8PSAxOw0KPiA+Pj4gLQkJ fQ0KPiA+Pj4gLQkJbHV0W2ldID0gcmVmbGVjdF8zMmJpdHMoY3JjKTsNCj4gPj4+IC0JfQ0KPiA+ Pj4gLX0NCj4gPj4+IC0NCj4gPj4+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50MzJf dA0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QNCj4gPj4+DQo+ID4+DQo+ID4+IFdoeSBu b3QgZm9yY2luZyBpbmxpbmUgYW55bW9yZT8NCj4gPj4gQXJlIHRoZXNlIGlubGluZSBjaGFuZ2Vz IHJlbGF0ZWQgdG8gdGhlIHRocmVhZC1zYWZldHk/DQo+ID4NCj4gPiBPMyB3aWxsIGlubGluZSBp dCBhbnl3YXksIGFuZCB3aXRoIGFsd2F5c19pbmxpbmUgaXQgd2lsbCBiZSBpbmxpbmUgZXZlbiBp biBkZWJ1Zw0KPiBtb2RlLiBJIGp1c3Qgc2VlIG5vIHJlYXNvbiBmb3JjaW5nIGl0IHVwb24gdGhl IGNvbXBpbGVyLg0KPiA+DQo+ID4+DQo+ID4+PiAgY3JjMzJfZXRoX2NhbGNfbHV0KGNvbnN0IHVp bnQ4X3QgKmRhdGEsDQo+ID4+PiAgCXVpbnQzMl90IGRhdGFfbGVuLA0KPiA+Pj4gIAl1aW50MzJf dCBjcmMsDQo+ID4+PiBAQCAtMTMwLDIwICs1NSw5IEBAIGNyYzMyX2V0aF9jYWxjX2x1dChjb25z dCB1aW50OF90ICpkYXRhLA0KPiA+Pj4gIAlyZXR1cm4gY3JjOw0KPiA+Pj4gIH0NCj4gPj4+DQo+ ID4+PiAtc3RhdGljIHZvaWQNCj4gPj4+IC1ydGVfbmV0X2NyY19zY2FsYXJfaW5pdCh2b2lkKQ0K PiA+Pj4gLXsNCj4gPj4+IC0JLyogMzItYml0IGNyYyBpbml0ICovDQo+ID4+PiAtCWNyYzMyX2V0 aF9pbml0X2x1dChDUkMzMl9FVEhfUE9MWU5PTUlBTCwgY3JjMzJfZXRoX2x1dCk7DQo+ID4+PiAt DQo+ID4+PiAtCS8qIDE2LWJpdCBDUkMgaW5pdCAqLw0KPiA+Pj4gLQljcmMzMl9ldGhfaW5pdF9s dXQoQ1JDMTZfQ0NJVFRfUE9MWU5PTUlBTCA8PCAxNiwgY3JjMTZfY2NpdHRfbHV0KTsNCj4gPj4+ IC19DQo+ID4+PiAtDQo+ID4+PiAgc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiA+Pj4gLXJ0ZV9j cmMxNl9jY2l0dF9oYW5kbGVyKGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IGRhdGFfbGVu KQ0KPiA+Pj4gK2NyYzE2X2NjaXR0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IGRhdGFf bGVuKQ0KPiA+Pj4gIHsNCj4gPj4+IC0JLyogcmV0dXJuIDE2LWJpdCBDUkMgdmFsdWUgKi8NCj4g Pj4+DQo+ID4+DQo+ID4+IFdoeSBub3Qga2VlcCBjb21tZW50cz8gQXJlIHRoZXkgd3Jvbmc/DQo+ ID4NCj4gPiBGdW5jdGlvbnMgbmFtZXMgYXJlIHZlcnkgc2VsZi1leHBsYW5hdG9yeSwgdGhhdOKA mXMgd2h5IEkgZHJvcHBlZCBjb21tZW50cy4gSQ0KPiBjYW4gYWRkIGNvbW1lbnRzIGlmIG5lZWRl ZC4NCj4gPg0KPiANCj4gSSBhbSBmb3IgcmVzdHJpY3RpbmcgY2hhbmdlcyB0byB0aGUgdGFyZ2V0 IG9mIHRoZSBwYXRjaCB3aGljaCBpcyBtYWtpbmcgQ1JDDQo+IGNhbGN1bGF0aW9uIHRocmVhZCBz YWZlLCB1bmxlc3MgY29kZSBjaGFuZ2VzIGludmFsaWRhdGVzIHRoZSBjb21tZW50cywgbGV0cw0K PiBrZWVwIHRoZW0uIFNhbWUgZ29lcyB3aXRoIGlubGluZSByZWxhdGVkIG1vZGlmaWNhdGlvbnMu DQo+IA0KPiA+Pg0KPiA+PiA8Li4uPg0KPiA+Pg0KPiA+Pj4gK3N0YXRpYyB2b2lkDQo+ID4+PiAr Y3JjX3NjYWxhcl9pbml0KHZvaWQpDQo+ID4+PiArew0KPiA+Pj4gKwljcmMzMl9ldGhfaW5pdF9s dXQoQ1JDMzJfRVRIX1BPTFlOT01JQUwsIGNyYzMyX2V0aF9sdXQpOw0KPiA+Pj4gKwljcmMzMl9l dGhfaW5pdF9sdXQoQ1JDMTZfQ0NJVFRfUE9MWU5PTUlBTCA8PCAxNiwgY3JjMTZfY2NpdHRfbHV0 KTsNCj4gPj4+ICsNCj4gPj4+ICsJaGFuZGxlcnNbUlRFX05FVF9DUkNfU0NBTEFSXS5mW1JURV9O RVRfQ1JDMTZfQ0NJVFRdID0NCj4gPj4gY3JjMTZfY2NpdHQ7DQo+ID4+PiArCWhhbmRsZXJzW1JU RV9ORVRfQ1JDX1NDQUxBUl0uZltSVEVfTkVUX0NSQzMyX0VUSF0gPSBjcmMzMl9ldGg7DQo+ID4+ Pg0KPiA+Pg0KPiA+PiArMSB0byByZW1vdmUgZ2xvYmFsIGhhbmRsZXJzIHBvaW50ZXIgYW5kIGFk ZCBjb250ZXh0LA0KPiA+Pg0KPiA+PiBCdXQgY3VycmVudCBoYW5kbGVycyBhcnJheSBjb250ZW50 IGlzIHN0YXRpYywgaXQgY2FuIGJlIHNldCB3aGVuDQo+ID4+IGRlZmluZWQsIGluc3RlYWQgb2Yg ZnVuY3Rpb25zLg0KPiA+DQo+ID4gQ2FuIGRvIGl0IGZvciBzY2FsYXJzLCBidXQgZm9yIFNJTUQg dGhlcmUgaXMgdGhpcyBydW50aW1lIGNoZWNrIGxpa2UgdGhpczoNCj4gPiAJaWYgKEFWWDUxMl9W UENMTVVMUURRX0NQVV9TVVBQT1JURUQpIHsgU28gY29tcGlsZWQgYmluYXJ5IG9uDQo+IEFWWDUx Mg0KPiA+IG1hY2hpbmUgY291bGQgZmlsdGVyIGl0IG91dCBvbiB0aGUgbWFjaGluZSB3aGljaCBk b2VzIG5vdCBzdXBwb3J0IGl0Lg0KPiA+IFRoZXJlIGlzIG5vIE5VTEwgY2hlY2sgaW4gY3JjIGZ1 bmN0aW9uIHNvIGl0IHdvdWxkIG5vdCBjaGFuZ2UgbXVjaCB3aGVuDQo+IGNhbGxlZCAtPiBJbnZh bGlkIGFkZHJlc3MgdnMgSW52YWxpZCBpbnN0cnVjdGlvbi4NCj4gPiBUaGVyZSBhcmUgbm90IG1h bnkgY2hlY2tzIHRoZXJlLCBhcyB0aGlzIGlzIENSQyBhZnRlciBhbGwsIGl0IHNob3VsZCBiZSBh IHNtYWxsIGFzDQo+IHBvc3NpYmxlLCB5ZXQgcHJvYmFibHkgTlVMTCBjaGVjayBjb3VsZCBiZSBh ZHZpc2FibGUgaW4gY3JjIGZ1bmN0aW9uIHRoZW4uDQo+ID4NCj4gDQo+IFRoZXJlIGlzIGFscmVh ZHkgQVZYNTEyX1ZQQ0xNVUxRRFFfQ1BVX1NVUFBPUlRFRCBldGMgY2hlY2tzIGluDQo+ICdydGVf bmV0X2NyY19zZXQoKScuDQo+IFNvIGRvZXMgaXQgd29yayB0byB1cGRhdGUgJ2hhbmRsZXJzJyBz dGF0aWNhbGx5LCB3aXRob3V0IGNvbmRpdGlvbiwgYnV0IGhhdmUNCj4gY29uZGl0aW9ucyB3aGVu IHVzZSB0aGVtLg0KPiANCj4gPg0KPiA+Pg0KPiA+PiA8Li4uPg0KPiA+Pg0KPiA+Pj4gLXN0YXRp YyB1aW50MzJfdA0KPiA+Pj4gLXJ0ZV9jcmMzMl9ldGhfZGVmYXVsdF9oYW5kbGVyKGNvbnN0IHVp bnQ4X3QgKmRhdGEsIHVpbnQzMl90DQo+ID4+PiBkYXRhX2xlbikNCj4gPj4+ICtzdHJ1Y3QgcnRl X25ldF9jcmMgcnRlX25ldF9jcmNfc2V0KGVudW0gcnRlX25ldF9jcmNfYWxnIGFsZywNCj4gPj4+ ICsJZW51bSBydGVfbmV0X2NyY190eXBlIHR5cGUpDQo+ID4+PiAgew0KPiA+Pj4gLQloYW5kbGVy cyA9IE5VTEw7DQo+ID4+PiAtCWlmIChtYXhfc2ltZF9iaXR3aWR0aCA9PSAwKQ0KPiA+Pj4gLQkJ bWF4X3NpbWRfYml0d2lkdGggPSBydGVfdmVjdF9nZXRfbWF4X3NpbWRfYml0d2lkdGgoKTsNCj4g Pj4+IC0NCj4gPj4+IC0JaGFuZGxlcnMgPSBhdng1MTJfdnBjbG11bHFkcV9nZXRfaGFuZGxlcnMo KTsNCj4gPj4+IC0JaWYgKGhhbmRsZXJzICE9IE5VTEwpDQo+ID4+PiAtCQlyZXR1cm4gaGFuZGxl cnNbUlRFX05FVF9DUkMzMl9FVEhdKGRhdGEsIGRhdGFfbGVuKTsNCj4gPj4+IC0JaGFuZGxlcnMg PSBzc2U0Ml9wY2xtdWxxZHFfZ2V0X2hhbmRsZXJzKCk7DQo+ID4+PiAtCWlmIChoYW5kbGVycyAh PSBOVUxMKQ0KPiA+Pj4gLQkJcmV0dXJuIGhhbmRsZXJzW1JURV9ORVRfQ1JDMzJfRVRIXShkYXRh LCBkYXRhX2xlbik7DQo+ID4+PiAtCWhhbmRsZXJzID0gbmVvbl9wbXVsbF9nZXRfaGFuZGxlcnMo KTsNCj4gPj4+IC0JaWYgKGhhbmRsZXJzICE9IE5VTEwpDQo+ID4+PiAtCQlyZXR1cm4gaGFuZGxl cnNbUlRFX05FVF9DUkMzMl9FVEhdKGRhdGEsIGRhdGFfbGVuKTsNCj4gPj4+IC0JaGFuZGxlcnMg PSBoYW5kbGVyc19zY2FsYXI7DQo+ID4+PiAtCXJldHVybiBoYW5kbGVyc1tSVEVfTkVUX0NSQzMy X0VUSF0oZGF0YSwgZGF0YV9sZW4pOw0KPiA+Pj4gLX0NCj4gPj4+ICsJdWludDE2X3QgbWF4X3Np bWRfYml0d2lkdGg7DQo+ID4+Pg0KPiA+Pj4gLS8qIFB1YmxpYyBBUEkgKi8NCj4gPj4+IC0NCj4g Pj4+IC12b2lkDQo+ID4+PiAtcnRlX25ldF9jcmNfc2V0X2FsZyhlbnVtIHJ0ZV9uZXRfY3JjX2Fs ZyBhbGcpIC17DQo+ID4+PiAtCWhhbmRsZXJzID0gTlVMTDsNCj4gPj4+IC0JaWYgKG1heF9zaW1k X2JpdHdpZHRoID09IDApDQo+ID4+PiAtCQltYXhfc2ltZF9iaXR3aWR0aCA9IHJ0ZV92ZWN0X2dl dF9tYXhfc2ltZF9iaXR3aWR0aCgpOw0KPiA+Pj4gKwltYXhfc2ltZF9iaXR3aWR0aCA9IHJ0ZV92 ZWN0X2dldF9tYXhfc2ltZF9iaXR3aWR0aCgpOw0KPiA+Pj4NCj4gPj4+ICAJc3dpdGNoIChhbGcp IHsNCj4gPj4+ICAJY2FzZSBSVEVfTkVUX0NSQ19BVlg1MTI6DQo+ID4+PiAtCQloYW5kbGVycyA9 IGF2eDUxMl92cGNsbXVscWRxX2dldF9oYW5kbGVycygpOw0KPiA+Pj4gLQkJaWYgKGhhbmRsZXJz ICE9IE5VTEwpDQo+ID4+PiAtCQkJYnJlYWs7DQo+ID4+PiArI2lmZGVmIENDX1g4Nl82NF9BVlg1 MTJfVlBDTE1VTFFEUV9TVVBQT1JUDQo+ID4+PiArCQlpZiAoQVZYNTEyX1ZQQ0xNVUxRRFFfQ1BV X1NVUFBPUlRFRCAmJg0KPiA+Pj4gKwkJCQltYXhfc2ltZF9iaXR3aWR0aCA+PSBSVEVfVkVDVF9T SU1EXzUxMikgew0KPiA+Pj4gKwkJCXJldHVybiAoc3RydWN0IHJ0ZV9uZXRfY3JjKXsgUlRFX05F VF9DUkNfQVZYNTEyLA0KPiA+PiB0eXBlIH07DQo+ID4+PiArCQl9DQo+ID4+PiArI2VuZGlmDQo+ ID4+PiAgCQkvKiBmYWxsLXRocm91Z2ggKi8NCj4gPj4+ICAJY2FzZSBSVEVfTkVUX0NSQ19TU0U0 MjoNCj4gPj4+IC0JCWhhbmRsZXJzID0gc3NlNDJfcGNsbXVscWRxX2dldF9oYW5kbGVycygpOw0K PiA+Pj4gLQkJYnJlYWs7IC8qIGZvciB4ODYsIGFsd2F5cyBicmVhayBoZXJlICovDQo+ID4+PiAr I2lmZGVmIENDX1g4Nl82NF9TU0U0Ml9QQ0xNVUxRRFFfU1VQUE9SVA0KPiA+Pj4gKwkJaWYgKFNT RTQyX1BDTE1VTFFEUV9DUFVfU1VQUE9SVEVEICYmDQo+ID4+PiArCQkJCW1heF9zaW1kX2JpdHdp ZHRoID49IFJURV9WRUNUX1NJTURfMTI4KSB7DQo+ID4+PiArCQkJcmV0dXJuIChzdHJ1Y3QgcnRl X25ldF9jcmMpeyBSVEVfTkVUX0NSQ19TU0U0MiwgdHlwZQ0KPiA+PiB9Ow0KPiA+Pj4gKwkJfQ0K PiA+Pj4gKyNlbmRpZg0KPiA+Pj4gKwkJYnJlYWs7DQo+ID4+PiAgCWNhc2UgUlRFX05FVF9DUkNf TkVPTjoNCj4gPj4+IC0JCWhhbmRsZXJzID0gbmVvbl9wbXVsbF9nZXRfaGFuZGxlcnMoKTsNCj4g Pj4+IC0JCS8qIGZhbGwtdGhyb3VnaCAqLw0KPiA+Pj4gLQljYXNlIFJURV9ORVRfQ1JDX1NDQUxB UjoNCj4gPj4+IC0JCS8qIGZhbGwtdGhyb3VnaCAqLw0KPiA+Pj4gKyNpZmRlZiBDQ19BUk02NF9O RU9OX1BNVUxMX1NVUFBPUlQNCj4gPj4+ICsJCWlmIChORU9OX1BNVUxMX0NQVV9TVVBQT1JURUQg JiYNCj4gPj4+ICsJCQkJbWF4X3NpbWRfYml0d2lkdGggPj0gUlRFX1ZFQ1RfU0lNRF8xMjgpIHsN Cj4gPj4+ICsJCQlyZXR1cm4gKHN0cnVjdCBydGVfbmV0X2NyYyl7IFJURV9ORVRfQ1JDX05FT04s IHR5cGUNCj4gPj4gfTsNCj4gPj4+ICsJCX0NCj4gPj4+ICsjZW5kaWYNCj4gPj4+DQo+ID4+DQo+ ID4+IElzIGl0IG1vcmUgcmVhZGFibGUgYXMgZm9sbG93aW5nLCB1cCB0byB5b3U6DQo+ID4NCj4g PiBBZ3JlZSwgSSB3aWxsIGNoYW5nZSBpdC4NCj4gPg0KPiA+Pg0KPiA+PiBgYGANCj4gPj4gcnRl X25ldF9jcmNfc2V0KGFsZywgdHlwZSkgew0KPiA+PiAgIGVudW0gcnRlX25ldF9jcmNfYWxnIG5l d19hbGcgPSBSVEVfTkVUX0NSQ19TQ0FMQVI7DQo+ID4+ICAgc3dpdGNoIChhbGcpIHsNCj4gPj4g ICBjYXNlIEFWWDUxMjoNCj4gPj4gICAgIG5ld19hbGcgPSAuLg0KPiA+PiAgIGNhc2UgTkVPTjoN Cj4gPj4gICAgIG5ld19hbGcgPSAuLg0KPiA+PiAgIH0NCj4gPj4gICByZXR1cm4gc3RydWN0IHJ0 ZV9uZXRfY3JjKXsgbmV3X2FsZywgdHlwZSB9OyBgYGANCj4gPj4NCj4gPj4NCj4gPj4NCj4gPj4N Cj4gPj4+ICsJCWJyZWFrOw0KPiA+Pj4gIAlkZWZhdWx0Og0KPiA+Pj4gIAkJYnJlYWs7DQo+ID4+ PiAgCX0NCj4gPj4+IC0NCj4gPj4+IC0JaWYgKGhhbmRsZXJzID09IE5VTEwpDQo+ID4+PiAtCQlo YW5kbGVycyA9IGhhbmRsZXJzX3NjYWxhcjsNCj4gPj4+ICsJcmV0dXJuIChzdHJ1Y3QgcnRlX25l dF9jcmMpeyBSVEVfTkVUX0NSQ19TQ0FMQVIsIHR5cGUgfTsNCj4gPj4+ICB9DQo+ID4+Pg0KPiA+ Pj4gLXVpbnQzMl90DQo+ID4+PiAtcnRlX25ldF9jcmNfY2FsYyhjb25zdCB2b2lkICpkYXRhLA0K PiA+Pj4gLQl1aW50MzJfdCBkYXRhX2xlbiwNCj4gPj4+IC0JZW51bSBydGVfbmV0X2NyY190eXBl IHR5cGUpDQo+ID4+PiArdWludDMyX3QgcnRlX25ldF9jcmMoY29uc3Qgc3RydWN0IHJ0ZV9uZXRf Y3JjICpjdHgsDQo+ID4+PiArCWNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHVpbnQzMl90IGRhdGFf bGVuKQ0KPiA+Pj4gIHsNCj4gPj4+IC0JdWludDMyX3QgcmV0Ow0KPiA+Pj4gLQlydGVfbmV0X2Ny Y19oYW5kbGVyIGZfaGFuZGxlOw0KPiA+Pj4gLQ0KPiA+Pj4gLQlmX2hhbmRsZSA9IGhhbmRsZXJz W3R5cGVdOw0KPiA+Pj4gLQlyZXQgPSBmX2hhbmRsZShkYXRhLCBkYXRhX2xlbik7DQo+ID4+PiAt DQo+ID4+PiAtCXJldHVybiByZXQ7DQo+ID4+PiArCXJldHVybiBoYW5kbGVyc1tjdHgtPmFsZ10u ZltjdHgtPnR5cGVdKGRhdGEsIGRhdGFfbGVuKTsNCj4gPj4+DQo+ID4+DQo+ID4+ICdydGVfbmV0 X2NyYygpJyBnZXRzIGlucHV0IGZyb20gdXNlciBhbmQgInN0cnVjdCBydGVfbmV0X2NyYyIgaXMg bm90DQo+ID4+IG9wYXF1ZSwgc28gdXNlciBjYW4gcHJvdmlkZSBpbnZhbGlkIGlucHV0LCBjdHgt PmFsZyAmIGN0eC0+dHlwZS4NCj4gPj4gVG8gcHJvdGVjdCBhZ2FpbnN0IGl0IGlucHV0IHZhbHVl cyBzaG91bGQgYmUgY2hlY2tlZCBiZWZvcmUgdXNpbmcuDQo+ID4+DQo+ID4+IE9yIEkgdGhpbmsg dXNlciBub3QgbmVlZCB0byBrbm93IHRoZSBkZXRhaWxzIG9mIHRoZSAic3RydWN0DQo+ID4+IHJ0 ZV9uZXRfY3JjIiwgc28gaXQgY2FuIGJlIGFuIG9wYXF1ZSB2YXJpYWJsZSBmb3IgdXNlci4NCj4g Pg0KPiA+IEkgd291bGQgbG92ZSBpdCB0byBiZSBvcGFxdWUsIGJ1dCB0aGVuIEkgd291bGQgaGF2 ZSB0byByZXR1cm4gYSBwb2ludGVyLCB3aGljaA0KPiB0aGVuIHdvdWxkIGludm9sdmUgc29tZSBh bGxvY2F0aW9ucy9kZWFsbG9jYXRpb25zIGFuZCBJIHdhbnRlZCB0byBrZWVwIGlzIGFzDQo+IHNp bXBsZSBhcyBwb3NzaWJsZS4NCj4gPiBTbyBwcm9iYWJseSB0aGUgY2hlY2tzIHdvdWxkIGJlIGEg d2F5IHRvIGdvLg0KPiA+DQo+IA0KPiBUcnVlLCArMSBmb3Igc2ltcGxpY2l0eS4NCj4gDQo+ID4+ DQo+ID4+IDwuLi4+DQo+ID4+DQo+ID4+PiAtLyoqDQo+ID4+PiAtICogQ1JDIGNvbXB1dGUgQVBJ DQo+ID4+PiAtICoNCj4gPj4+IC0gKiBAcGFyYW0gZGF0YQ0KPiA+Pj4gLSAqICAgUG9pbnRlciB0 byB0aGUgcGFja2V0IGRhdGEgZm9yIENSQyBjb21wdXRhdGlvbg0KPiA+Pj4gLSAqIEBwYXJhbSBk YXRhX2xlbg0KPiA+Pj4gLSAqICAgRGF0YSBsZW5ndGggZm9yIENSQyBjb21wdXRhdGlvbg0KPiA+ Pj4gLSAqIEBwYXJhbSB0eXBlDQo+ID4+PiAtICogICBDUkMgdHlwZSAoZW51bSBydGVfbmV0X2Ny Y190eXBlKQ0KPiA+Pj4gLSAqDQo+ID4+PiAtICogQHJldHVybg0KPiA+Pj4gLSAqICAgQ1JDIHZh bHVlDQo+ID4+PiAtICovDQo+ID4+PiAtdWludDMyX3QNCj4gPj4+IC1ydGVfbmV0X2NyY19jYWxj KGNvbnN0IHZvaWQgKmRhdGEsDQo+ID4+PiAtCXVpbnQzMl90IGRhdGFfbGVuLA0KPiA+Pj4gK3N0 cnVjdCBydGVfbmV0X2NyYyBydGVfbmV0X2NyY19zZXQoZW51bSBydGVfbmV0X2NyY19hbGcgYWxn LA0KPiA+Pj4gIAllbnVtIHJ0ZV9uZXRfY3JjX3R5cGUgdHlwZSk7DQo+ID4+Pg0KPiA+Pj4gK3Vp bnQzMl90IHJ0ZV9uZXRfY3JjKGNvbnN0IHN0cnVjdCBydGVfbmV0X2NyYyAqY3R4LA0KPiA+Pj4g Kwljb25zdCB2b2lkICpkYXRhLCBjb25zdCB1aW50MzJfdCBkYXRhX2xlbik7DQo+ID4+PiArDQo+ ID4+Pg0KPiA+Pg0KPiA+PiBBcyB0aGVzZSBhcmUgQVBJcywgY2FuIHlvdSBwbGVhc2UgYWRkIGRv eHlnZW4gY29tbWVudHMgdG8gdGhlbT8NCj4gPiArMQ0KPiA+IEkgdGhpbmsgdGhpcyBjaGFuZ2Ug Y291bGQgYmUgZGVmZXJyZWQgdG8gMjUuMDMuDQo+ID4gQWRkaW5nIHRoaXMgQVBJIHdpdGhvdXQg cmVtb3ZpbmcgdGhlIG9sZCBvbmUgc2hvdWxkIGJlIHBvc3NpYmxlIHdpdGhvdXQgYW55DQo+IHVu d2FudGVkIGNvbnNlcXVlbmNlcz8NCj4gPg0KPiANCj4gVGhpcyBpcyBub3QgYSBuZXcgZnVuY3Rp b25hbGl0eSBidXQgcmVwbGFjZW1lbnQgb2YgZXhpc3Rpbmcgb25lLCBzbyBpdCB3aWxsIGJlDQo+ IGNvbmZ1c2luZyB0byBoYXZlIHR3byBzZXQgb2YgQVBJcyBmb3Igc2FtZSBmdW5jdGlvbmFsaXR5 IHdpdGggc2ltaWxhciBuYW1lczoNCj4gcnRlX25ldF9jcmNfY2FsYygpICAgIGFuZCAgIHJ0ZV9u ZXRfY3JjKCkNCj4gcnRlX25ldF9jcmNfc2V0X2FsZygpIGFuZCAgIHJ0ZV9uZXRfY3JjX3NldCgp DQo+IA0KPiBBbHNvIHRoZXJlIGFyZSBzb21lIGludGVybmFsIGZ1bmN0aW9ucyB1c2VkIGJ5IHRo ZXNlIEFQSXMgYW5kIHN1cHBvcnRpbmcgYm90aA0KPiBuZXcgYW5kIG9sZCBtYXkgZm9yY2UgdG8g aGF2ZSB0d28gdmVyc2lvbiBvZiB0aGVzZSBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGl0IHdpbGwN Cj4gY3JlYXRlIGNvbXBsZXhpdHkvbm9pc2UuDQo+IA0KPiBBcyB0aGlzIHJlbGVhc2UgaXMgQUJJ IGJyZWFrIHJlbGVhc2UsIGl0IGlzIGVhc2llciB0byB1cGRhdGUgQVBJcyAoYWx0aG91Z2gNCj4g ZGVwcmVjYXRpb24gbm90aWNlIGlzIG1pc3NpbmcgZm9yIHRoaXMgY2hhbmdlKS4NCj4gDQo+IA0K PiBBcyBhbiBhbHRlcm5hdGl2ZSBvcHRpb24sIGRvIHlvdSB0aGluayBhcHBseWluZyBBQkkgdmVy c2lvbmluZyBpbiAyNS4wMyB3b3JrcyBmb3INCj4gdGhlc2UgQVBJcz8NCj4gSWYgc28sIG9sZCB2 ZXJzaW9uIGNhbiBiZSBjbGVhbmVkIGluIHYyNS4xMS4NCg0KSSB3b3VsZCBnbyB3aXRoIHZlcnNp b25pbmcuIEkgY2FuIHByZXNlcnZlIG9sZCBmdW5jdGlvbiBuYW1lcyBhcyBpdCdzIGJhc2ljYWxs eSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LiANCg0KPiANCj4gDQo+ID4gSSBzdGlsbCBoYXZlIHNv bWUgc2Vjb25kIHRob3VnaHRzIGFib3V0IHRoaXMgbWF4LXNpbWQtd2lkdGguIERQREsgZG9lcw0K PiA+IG5vdCBpbXBvc2UgYW55IHJlc3RyaWN0aW9ucyBvbiB0aGlzIHBhcmFtZXRlciBpbiB0aGUg bXVsdGktcHJvY2VzcyB1c2FnZSwgdGhlcmUNCj4gbWF5IGJlIHNvbWUgcm9vbSB0byBhbHRlciBz b21lIHRoaW5ncyB0aGVyZS4NCj4gPg0KPiA+Pg0KPiA+Pj4gICNpZmRlZiBfX2NwbHVzcGx1cw0K PiA+Pj4gIH0NCj4gPj4+ICAjZW5kaWYNCj4gPj4+IGRpZmYgLS1naXQgYS9saWIvbmV0L3ZlcnNp b24ubWFwIGIvbGliL25ldC92ZXJzaW9uLm1hcCBpbmRleA0KPiA+Pj4gYmVjNGNlMjNlYS4uNDdk YWYxNDY0YSAxMDA2NDQNCj4gPj4+IC0tLSBhL2xpYi9uZXQvdmVyc2lvbi5tYXANCj4gPj4+ICsr KyBiL2xpYi9uZXQvdmVyc2lvbi5tYXANCj4gPj4+IEBAIC00LDExICs0LDI1IEBAIERQREtfMjUg ew0KPiA+Pj4gIAlydGVfZXRoX3JhbmRvbV9hZGRyOw0KPiA+Pj4gIAlydGVfZXRoZXJfZm9ybWF0 X2FkZHI7DQo+ID4+PiAgCXJ0ZV9ldGhlcl91bmZvcm1hdF9hZGRyOw0KPiA+Pj4gLQlydGVfbmV0 X2NyY19jYWxjOw0KPiA+Pj4gLQlydGVfbmV0X2NyY19zZXRfYWxnOw0KPiA+Pj4gIAlydGVfbmV0 X2dldF9wdHlwZTsNCj4gPj4+ICAJcnRlX25ldF9tYWtlX3JhcnBfcGFja2V0Ow0KPiA+Pj4gIAly dGVfbmV0X3NraXBfaXA2X2V4dDsNCj4gPj4+ICsJcnRlX25ldF9jcmM7DQo+ID4+PiArCXJ0ZV9u ZXRfY3JjX3NldDsNCj4gPj4+DQo+ID4+PiAgCWxvY2FsOiAqOw0KPiA+Pj4gIH07DQo+ID4+PiAr DQo+ID4+PiArSU5URVJOQUwgew0KPiA+Pj4gKwlnbG9iYWw6DQo+ID4+PiArDQo+ID4+PiArCXJ0 ZV9uZXRfY3JjX3NzZTQyX2luaXQ7DQo+ID4+PiArCXJ0ZV9jcmMxNl9jY2l0dF9zc2U0Ml9oYW5k bGVyOw0KPiA+Pj4gKwlydGVfY3JjMzJfZXRoX3NzZTQyX2hhbmRsZXI7DQo+ID4+PiArCXJ0ZV9u ZXRfY3JjX2F2eDUxMl9pbml0Ow0KPiA+Pj4gKwlydGVfY3JjMTZfY2NpdHRfYXZ4NTEyX2hhbmRs ZXI7DQo+ID4+PiArCXJ0ZV9jcmMzMl9ldGhfYXZ4NTEyX2hhbmRsZXI7DQo+ID4+PiArCXJ0ZV9u ZXRfY3JjX25lb25faW5pdDsNCj4gPj4+ICsJcnRlX2NyYzE2X2NjaXR0X25lb25faGFuZGxlcjsN Cj4gPj4+ICsJcnRlX2NyYzMyX2V0aF9uZW9uX2hhbmRsZXI7DQo+ID4+PiArfTsNCj4gPj4+DQo+ ID4+DQo+ID4+ICsxIHRvIERhdmlkJ3MgY29tbWVudCwgdGhlc2UgYXJlIHVzZWQgb25seSB3aXRo aW4gY29tcG9uZW50LCBubyBuZWVkDQo+ID4+ICt0bw0KPiA+PiBleHBvcnQuDQo+ID4+DQo+ID4N Cg0K