From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 9CCDAA0501;
	Sat,  2 Apr 2022 02:22:23 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 6313840E03;
	Sat,  2 Apr 2022 02:22:22 +0200 (CEST)
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-eopbgr70041.outbound.protection.outlook.com [40.107.7.41])
 by mails.dpdk.org (Postfix) with ESMTP id 2D3784067E
 for <dev@dpdk.org>; Sat,  2 Apr 2022 02:22:21 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=LE7KDaVGWLIi5biEdStlGeV1G7IaU+oghSMZKVKH5Mk=;
 b=W45LeTPXckTDVXBHEjN71RW2XQx5hhIYgeFQgEwMCTqIPVMEMPYZFxa1AQf9G2zOYXSdb4ivWT1i37i3gQf709rFNFsx4Wxqg2YbPyfzYdmsKg9lHOOQbcCZIMiF+FL0HL/TdFr9Ej8e+ff+eGYBqwGBLTYtWumizMjMShhI3OA=
Received: from AM6P191CA0054.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:7f::31)
 by AM0PR08MB3923.eurprd08.prod.outlook.com (2603:10a6:208:123::19) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.25; Sat, 2 Apr
 2022 00:22:14 +0000
Received: from AM5EUR03FT060.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:209:7f:cafe::b) by AM6P191CA0054.outlook.office365.com
 (2603:10a6:209:7f::31) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.30 via Frontend
 Transport; Sat, 2 Apr 2022 00:22:14 +0000
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT060.mail.protection.outlook.com (10.152.16.160) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.5123.19 via Frontend Transport; Sat, 2 Apr 2022 00:22:14 +0000
Received: ("Tessian outbound ab7864ef57f2:v118");
 Sat, 02 Apr 2022 00:22:13 +0000
X-CR-MTA-TID: 64aa7808
Received: from b030573a3554.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 6928E964-F5AC-47BA-B9E3-BBFEF0B7E733.1; 
 Sat, 02 Apr 2022 00:22:04 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b030573a3554.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Sat, 02 Apr 2022 00:22:04 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AH/w85UV3R/mekVaLpP4yl9kw2fbD/LN++U0hzcGpsz1xINLIzZOXzySmt4PP3atKl1S6tW4qq9F8x2clGGhIJOy+TzgM7aIATlWu23MnrRcuf1MB13cZcNouL/H9lFzbkc2R9zOUy0cobiob+DhSE+FTVfH0gaCQK7TF2eIzdFbdHsPtZfj44c5egeZmg5BqrhvfS8YXtkFQZ3W9vLVU5+GgDSGTJ7oUhLhh49jQraRmMnEqPtCSqALimOUjxHz4aLhJriVK6DrfaDYUhyflYYvUiXs5m5bUbUl5T6HopxriJmmo9kMXYSibK5FJAAIOKF1+D3FG1IwkGMro8dGQA==
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=LE7KDaVGWLIi5biEdStlGeV1G7IaU+oghSMZKVKH5Mk=;
 b=Ui/dgchQ6du1Bc3GbB8fYSiDL9vUJu523/fZ5NtztNG8fSYF7HHWlhtRFhT+RWyOaObpZzlWa0LYitw92M5R6LjW3IgOcJeavJanrvyjhvjiqg8sMDvfrjJeuIc23n0modqvsWWkslD2KRGcBp6W6/C6iqc8baQp6NL0RQGEbKX+zfWfnN6J/BjqoxQk+42SUd9YTdMjjc5+zwyuO+1D/s6PO95bwuWPJIDMC9L1ayNCP91awV2JDYSKjwwT3TJ5tXilmw6JYwkjv31sszOrI4FQqCC8i3qr4eAlIy3iexba5E2JC2oQ9a1tszTMHZ4ybh3k1BiWDKsmbBOdtr+agw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=LE7KDaVGWLIi5biEdStlGeV1G7IaU+oghSMZKVKH5Mk=;
 b=W45LeTPXckTDVXBHEjN71RW2XQx5hhIYgeFQgEwMCTqIPVMEMPYZFxa1AQf9G2zOYXSdb4ivWT1i37i3gQf709rFNFsx4Wxqg2YbPyfzYdmsKg9lHOOQbcCZIMiF+FL0HL/TdFr9Ej8e+ff+eGYBqwGBLTYtWumizMjMShhI3OA=
Received: from DBAPR08MB5814.eurprd08.prod.outlook.com (2603:10a6:10:1b1::6)
 by DB7PR08MB3850.eurprd08.prod.outlook.com (2603:10a6:10:7b::29) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.29; Sat, 2 Apr
 2022 00:21:53 +0000
Received: from DBAPR08MB5814.eurprd08.prod.outlook.com
 ([fe80::bdab:41f9:79b1:be0d]) by DBAPR08MB5814.eurprd08.prod.outlook.com
 ([fe80::bdab:41f9:79b1:be0d%4]) with mapi id 15.20.5123.029; Sat, 2 Apr 2022
 00:21:53 +0000
From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= <mattias.ronnblom@ericsson.com>,
 "dev@dpdk.org" <dev@dpdk.org>
CC: "thomas@monjalon.net" <thomas@monjalon.net>, David Marchand
 <david.marchand@redhat.com>, "onar.olsen@ericsson.com"
 <onar.olsen@ericsson.com>, nd <nd@arm.com>, "konstantin.ananyev@intel.com"
 <konstantin.ananyev@intel.com>, "mb@smartsharesystems.com"
 <mb@smartsharesystems.com>, "stephen@networkplumber.org"
 <stephen@networkplumber.org>, Ola Liljedahl <Ola.Liljedahl@arm.com>, nd
 <nd@arm.com>
Subject: RE: [PATCH v3] eal: add seqlock
Thread-Topic: [PATCH v3] eal: add seqlock
Thread-Index: AQHYRdpxyd0NqRrCTky+5vY5RMVxBKzbWEaA
Date: Sat, 2 Apr 2022 00:21:51 +0000
Message-ID: <DBAPR08MB5814D447DD823DE97339533C98E39@DBAPR08MB5814.eurprd08.prod.outlook.com>
References: <a0ec9df7-1af7-708e-fef0-49cb4e147a2e@ericsson.com>
 <20220401150749.136921-1-mattias.ronnblom@ericsson.com>
In-Reply-To: <20220401150749.136921-1-mattias.ronnblom@ericsson.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: C3FAE45EE7C12B4FA6A9663E6DFCFF20.0
x-checkrecipientchecked: true
Authentication-Results-Original: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=arm.com;
X-MS-Office365-Filtering-Correlation-Id: faa839ab-1a3f-491f-e299-08da143ed642
x-ms-traffictypediagnostic: DB7PR08MB3850:EE_|AM5EUR03FT060:EE_|AM0PR08MB3923:EE_
x-ld-processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr
X-Microsoft-Antispam-PRVS: <AM0PR08MB392315DD6B8E76EAE756566A98E39@AM0PR08MB3923.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original: i79xBF+bjvWxktUmYhg5RSWS+XR4XoM1FmVtkGMBGPsGuf4oENA9DtZV/XV8JnD2tQhTaLEWCwU6gX7dRt9CvJEZxAT3ldD7NiI7M1dGOTTYtOuWJLwASYMrY8mOpVsAob67lQIFeHguUknJeiGTD3HCtNbqLorlWWn1scEsnvnhPhQNc0T6mxGsSkg/MqYiuznamyTASW5uQb7vbcNOrXuhcvG5feSMcsKcBS+mPFen0qzPQtbsClU4xv51K/pMUIixTnXTKPSPk5H2PoG3J6k0IbD7rrfswGtcsF5yOQyyfCO5cgSZ+nrDSpKemjhLLIR5ZXOCyhIMLImI+ACWZBd5vPema2xUuXc3B9xcweC+yA+Eq79zYaxwOmZveZxtnvhI+2jnk9+3LO9vKDx6zhuHq2XMereA7RB10VjDCqvl4mvkctExQf9fpMAPbv84zoCLL2ItzwfQwY9qUsyYtbViSFvwC+rZeKxt9Rg56ngKuz2lCqUIpPMBVQpHSVyZcB8PZ8qLzHkdhCC4W2Jic/tV6FndSlsFQf+OaHlVXpSZ8viGHyXe3P7xmWEwZSjUUj2QqlJ2BgT+6pfpDon3023n2OerSW9uCHDqKBMlP4bKK3aIds/E9UQLLCaE87+SE1kyQhwlkMTIwFbE7YHSgEjxacHGmN4RGN4UK/D1BNMDavZf/UWlXZ7Q+B6JuxcRPblML2tOagQKKOmipl/0EpOPjFhFR7HzabVxoNQyAXcXUBzHjnxT0JvOJ7N9LozFWI5zdlDfch51fsa816ncOcPBhu8TLhk97j7D3b8nsnM=
X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en;
 SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBAPR08MB5814.eurprd08.prod.outlook.com;
 PTR:; CAT:NONE;
 SFS:(13230001)(4636009)(366004)(66476007)(76116006)(66946007)(66446008)(66556008)(26005)(186003)(4326008)(8676002)(71200400001)(64756008)(38100700002)(86362001)(9686003)(316002)(122000001)(8936002)(38070700005)(2906002)(52536014)(54906003)(110136005)(5660300002)(53546011)(6506007)(7696005)(55016003)(66574015)(30864003)(83380400001)(508600001)(33656002)(966005)(579004)(559001);
 DIR:OUT; SFP:1101; 
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3850
Original-Authentication-Results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT060.eop-EUR03.prod.protection.outlook.com
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id-Prvs: 5cb62748-37f4-4598-651d-08da143ec9c2
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: OssxB1sbo6tpNwgy1dBkmmj/1YFXFtcOx8RNAw6NOAsW4ZHD6yyOu7ir2N1bUgzdR9f91UXy3hSi1b71ufPmv+Z7jXVabvz/QhQiEJoeGF5TlwxqsQbgrQSjgAiyjsodTZXpAk+bXgFW6m56X/3IZkxIVUuQzG6DFa94bFBGVlqjDAEmgX81/nTBoUaUrE7lQQBODLL/H2BdcVefC32XprRu3NUJNgH5DwXLb7dGlRIsQ4FeH8vAaUk7fR69OgYsdDrYXNwZCX+cr5bIXtXx8nef1GCbQCXvozcLd9Wpml7d7XGI00Dm8NZJdd0x2snOBEGu/x1rlBewEV6sjm3nzp0QiuTWLy26Oho9eszMrJr7lZ+QjRVNvUVH24KwNLwRttqpN1fY7JahjxsUdNKA9JgWUFmSq/tf+1nvCXaPxqBCOSWdO71kzjcma7YYWU+CCEm9CwPuqVOpnQ81qaXnWUTyaYVUyxxoYpkU09U3n5SPA8nGJjhSAtGTqGocVd3pxkGpte94NSPB1kTardHeHkCsdz8XAi7vuio9Lepmli5s6t5eG1oEUyKPf/saSz1/sCedvMJ49LJtN88l+rfwifR9VmMUEFSU6oowHhn/dgOe8kFm3jMat7d7LilNWKNk606QNOWj1CUP/JI9JJKmvpKx1DlW9RBrkpYIb+HDfA3GMSzAcRXzJF8rjlEch0Lzvi3ramgaVVtFFFGHVPGt2bunNO8azNL6uqzi8S1H1bLrkZZ/vLzE4mpgzgcLlS+g
X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:;
 IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE;
 SFS:(13230001)(4636009)(46966006)(36840700001)(40470700004)(8676002)(4326008)(82310400004)(966005)(70206006)(86362001)(508600001)(356005)(110136005)(54906003)(316002)(70586007)(336012)(40460700003)(26005)(66574015)(186003)(47076005)(53546011)(83380400001)(6506007)(2906002)(7696005)(9686003)(81166007)(8936002)(36860700001)(30864003)(33656002)(52536014)(55016003)(5660300002);
 DIR:OUT; SFP:1101; 
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Apr 2022 00:22:14.0768 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: faa839ab-1a3f-491f-e299-08da143ed642
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT060.eop-EUR03.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3923
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

SGkgTWF0dGlhcywNCglGZXcgY29tbWVudHMgaW5saW5lLg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+IEZyb206IE1hdHRpYXMgUsO2bm5ibG9tIDxtYXR0aWFzLnJvbm5ibG9tQGVy
aWNzc29uLmNvbT4NCj4gU2VudDogRnJpZGF5LCBBcHJpbCAxLCAyMDIyIDEwOjA4IEFNDQo+IFRv
OiBkZXZAZHBkay5vcmcNCj4gQ2M6IHRob21hc0Btb25qYWxvbi5uZXQ7IERhdmlkIE1hcmNoYW5k
IDxkYXZpZC5tYXJjaGFuZEByZWRoYXQuY29tPjsNCj4gb25hci5vbHNlbkBlcmljc3Nvbi5jb207
IEhvbm5hcHBhIE5hZ2FyYWhhbGxpDQo+IDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tPjsg
bmQgPG5kQGFybS5jb20+Ow0KPiBrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tOyBtYkBzbWFy
dHNoYXJlc3lzdGVtcy5jb207DQo+IHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnOyBNYXR0aWFz
IFLDtm5uYmxvbQ0KPiA8bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb20+OyBPbGEgTGlsamVk
YWhsIDxPbGEuTGlsamVkYWhsQGFybS5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2M10gZWFsOiBh
ZGQgc2VxbG9jaw0KPiANCj4gQSBzZXF1ZW5jZSBsb2NrIChzZXFsb2NrKSBpcyBzeW5jaHJvbml6
YXRpb24gcHJpbWl0aXZlIHdoaWNoIGFsbG93cyBmb3IgZGF0YS0NCj4gcmFjZSBmcmVlLCBsb3ct
b3ZlcmhlYWQsIGhpZ2gtZnJlcXVlbmN5IHJlYWRzLCBlc3BlY2lhbGx5IGZvciBkYXRhIHN0cnVj
dHVyZXMNCj4gc2hhcmVkIGFjcm9zcyBtYW55IGNvcmVzIGFuZCB3aGljaCBhcmUgdXBkYXRlZCB3
aXRoIHJlbGF0aXZlbHkgaW5mcmVxdWVudGx5Lg0KPiANCj4gQSBzZXFsb2NrIHBlcm1pdHMgbXVs
dGlwbGUgcGFyYWxsZWwgcmVhZGVycy4gVGhlIHZhcmlhbnQgb2Ygc2VxbG9jayBpbXBsZW1lbnRl
ZA0KPiBpbiB0aGlzIHBhdGNoIHN1cHBvcnRzIG11bHRpcGxlIHdyaXRlcnMgYXMgd2VsbC4gQSBz
cGlubG9jayBpcyB1c2VkIGZvciB3cml0ZXItDQo+IHdyaXRlciBzZXJpYWxpemF0aW9uLg0KPiAN
Cj4gVG8gYXZvaWQgcmVzb3VyY2UgcmVjbGFtYXRpb24gYW5kIG90aGVyIGlzc3VlcywgdGhlIGRh
dGEgcHJvdGVjdGVkIGJ5IGEgc2VxbG9jaw0KPiBpcyBiZXN0IG9mZiBiZWluZyBzZWxmLWNvbnRh
aW5lZCAoaS5lLiwgbm8gcG9pbnRlcnMgW2V4Y2VwdCB0byBjb25zdGFudCBkYXRhXSkuDQo+IA0K
PiBPbmUgd2F5IHRvIHRoaW5rIGFib3V0IHNlcWxvY2tzIGlzIHRoYXQgdGhleSBwcm92aWRlIG1l
YW5zIHRvIHBlcmZvcm0gYXRvbWljDQo+IG9wZXJhdGlvbnMgb24gZGF0YSBvYmplY3RzIGxhcmdl
ciB3aGF0IHRoZSBuYXRpdmUgYXRvbWljIG1hY2hpbmUgaW5zdHJ1Y3Rpb25zDQo+IGFsbG93IGZv
ci4NCj4gDQo+IERQREsgc2VxbG9ja3MgYXJlIG5vdCBwcmVlbXB0aW9uIHNhZmUgb24gdGhlIHdy
aXRlciBzaWRlLiBBIHRocmVhZCBwcmVlbXB0aW9uDQo+IGFmZmVjdHMgcGVyZm9ybWFuY2UsIG5v
dCBjb3JyZWN0bmVzcy4NCj4gDQo+IEEgc2VxbG9jayBjb250YWlucyBhIHNlcXVlbmNlIG51bWJl
ciwgd2hpY2ggY2FuIGJlIHRob3VnaHQgb2YgYXMgdGhlDQo+IGdlbmVyYXRpb24gb2YgdGhlIGRh
dGEgaXQgcHJvdGVjdHMuDQo+IA0KPiBBIHJlYWRlciB3aWxsDQo+ICAgMS4gTG9hZCB0aGUgc2Vx
dWVuY2UgbnVtYmVyIChzbikuDQo+ICAgMi4gTG9hZCwgaW4gYXJiaXRyYXJ5IG9yZGVyLCB0aGUg
c2VxbG9jay1wcm90ZWN0ZWQgZGF0YS4NCj4gICAzLiBMb2FkIHRoZSBzbiBhZ2Fpbi4NCj4gICA0
LiBDaGVjayBpZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBzbiBhcmUgZXF1YWwsIGFuZCBldmVuIG51
bWJlcmVkLg0KPiAgICAgIElmIHRoZXkgYXJlIG5vdCwgZGlzY2FyZCB0aGUgbG9hZGVkIGRhdGEs
IGFuZCByZXN0YXJ0IGZyb20gMS4NCj4gDQo+IFRoZSBmaXJzdCB0aHJlZSBzdGVwcyBuZWVkIHRv
IGJlIG9yZGVyZWQgdXNpbmcgc3VpdGFibGUgbWVtb3J5IGZlbmNlcy4NCj4gDQo+IEEgd3JpdGVy
IHdpbGwNCj4gICAxLiBUYWtlIHRoZSBzcGlubG9jaywgdG8gc2VyaWFsaXplIHdyaXRlciBhY2Nl
c3MuDQo+ICAgMi4gTG9hZCB0aGUgc24uDQo+ICAgMy4gU3RvcmUgdGhlIG9yaWdpbmFsIHNuICsg
MSBhcyB0aGUgbmV3IHNuLg0KPiAgIDQuIFBlcmZvcm0gbG9hZCBhbmQgc3RvcmVzIHRvIHRoZSBz
ZXFsb2NrLXByb3RlY3RlZCBkYXRhLg0KPiAgIDUuIFN0b3JlIHRoZSBvcmlnaW5hbCBzbiArIDIg
YXMgdGhlIG5ldyBzbi4NCj4gICA2LiBSZWxlYXNlIHRoZSBzcGlubG9jay4NCj4gDQo+IFByb3Bl
ciBtZW1vcnkgZmVuY2luZyBpcyByZXF1aXJlZCB0byBtYWtlIHN1cmUgdGhlIGZpcnN0IHNuIHN0
b3JlLCB0aGUgZGF0YQ0KPiBzdG9yZXMsIGFuZCB0aGUgc2Vjb25kIHNuIHN0b3JlIGFwcGVhciB0
byB0aGUgcmVhZGVyIGluIHRoZSBtZW50aW9uZWQgb3JkZXIuDQo+IA0KPiBUaGUgc24gbG9hZHMg
YW5kIHN0b3JlcyBtdXN0IGJlIGF0b21pYywgYnV0IHRoZSBkYXRhIGxvYWRzIGFuZCBzdG9yZXMg
bmVlZCBub3QNCj4gYmUuDQo+IA0KPiBUaGUgb3JpZ2luYWwgc2VxbG9jayBkZXNpZ24gYW5kIGlt
cGxlbWVudGF0aW9uIHdhcyBkb25lIGJ5IFN0ZXBoZW4NCj4gSGVtbWluZ2VyLiBUaGlzIGlzIGFu
IGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9uLCB1c2luZyBDMTEgYXRvbWljcy4NCj4gDQo+IEZv
ciBtb3JlIGluZm9ybWF0aW9uIG9uIHNlcWxvY2tzLCBzZWUNCj4gaHR0cHM6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvU2VxbG9jaw0KPiANCj4gUEFUQ0ggdjM6DQo+ICAgKiBSZW5hbWVkIGJvdGgg
cmVhZCBhbmQgd3JpdGUtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGJlZ2luL2VuZCBmdW5jdGlvbnMN
Cj4gICAgIHRvIGJldHRlciBtYXRjaCByd2xvY2sgbmFtaW5nLCBwZXIgT2xhIExpbGplZGFobCdz
IHN1Z2dlc3Rpb24uDQo+ICAgKiBBZGRlZCAnZXh0ZXJuICJDIicgZ3VhcmRzIGZvciBDKysgY29t
cGF0aWJpbGl0eS4NCj4gICAqIFJlZmVyIHRvIHRoZSBtYWluIGxjb3JlIGFzIHRoZSBtYWluLCBh
bmQgbm90IHRoZSBtYXN0ZXIuDQo+IA0KPiBQQVRDSCB2MjoNCj4gICAqIFNraXAgaW5zdGVhZCBv
ZiBmYWlsIHVuaXQgdGVzdCBpbiBjYXNlIHRvbyBmZXcgbGNvcmVzIGFyZSBhdmFpbGFibGUuDQo+
ICAgKiBVc2UgbWFpbiBsY29yZSBmb3IgdGVzdGluZywgcmVkdWNpbmcgdGhlIG1pbmltdW0gbnVt
YmVyIG9mIGxjb3Jlcw0KPiAgICAgcmVxdWlyZWQgdG8gcnVuIHRoZSB1bml0IHRlc3RzIHRvIGZv
dXIuDQo+ICAgKiBDb25zaXN0ZW50bHkgcmVmZXIgdG8gc24gZmllbGQgYXMgdGhlICJzZXF1ZW5j
ZSBudW1iZXIiIGluIHRoZQ0KPiAgICAgZG9jdW1lbnRhdGlvbi4NCj4gICAqIEZpeGVkIHNwZWxs
aW5nIG1pc3Rha2VzIGluIGRvY3VtZW50YXRpb24uDQo+IA0KPiBVcGRhdGVzIHNpbmNlIFJGQzoN
Cj4gICAqIEFkZGVkIEFQSSBkb2N1bWVudGF0aW9uLg0KPiAgICogQWRkZWQgbGluayB0byBXaWtp
cGVkaWEgYXJ0aWNsZSBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuDQo+ICAgKiBDaGFuZ2VkIHNlcWxv
Y2sgc2VxdWVuY2UgbnVtYmVyIGZpZWxkIGZyb20gdWludDY0X3QgKHdoaWNoIHdhcw0KPiAgICAg
b3ZlcmtpbGwpIHRvIHVpbnQzMl90LiBUaGUgc24gdHlwZSBuZWVkcyB0byBiZSBzdWZmaWNpZW50
bHkgbGFyZ2UNCj4gICAgIHRvIGFzc3VyZSBubyByZWFkZXIgd2lsbCByZWFkIGEgc24sIGFjY2Vz
cyB0aGUgZGF0YSwgYW5kIHRoZW4gcmVhZA0KPiAgICAgdGhlIHNhbWUgc24sIGJ1dCB0aGUgc24g
aGFzIGJlZW4gdXBkYXRlZCB0byBtYW55IHRpbWVzIGR1cmluZyB0aGUNCj4gICAgIHJlYWQsIHNv
IGl0IGhhcyB3cmFwcGVkLg0KPiAgICogQWRkZWQgUlRFX1NFUUxPQ0tfSU5JVElBTElaRVIgbWFj
cm8gZm9yIHN0YXRpYyBpbml0aWFsaXphdGlvbi4NCj4gICAqIFJlbW92ZWQgdGhlIHJ0ZV9zZXFs
b2NrIHN0cnVjdCArIHNlcGFyYXRlIHJ0ZV9zZXFsb2NrX3QgdHlwZWRlZg0KPiAgICAgd2l0aCBh
biBhbm9ueW1vdXMgc3RydWN0IHR5cGVkZWY6ZWQgdG8gcnRlX3NlcWxvY2tfdC4NCj4gDQo+IEFj
a2VkLWJ5OiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMuY29tPg0KPiBSZXZp
ZXdlZC1ieTogT2xhIExpbGplZGFobCA8b2xhLmxpbGplZGFobEBhcm0uY29tPg0KPiBTaWduZWQt
b2ZmLWJ5OiBNYXR0aWFzIFLDtm5uYmxvbSA8bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb20+
DQo+IC0tLQ0KPiAgYXBwL3Rlc3QvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDIgKw0KPiAgYXBw
L3Rlc3QvdGVzdF9zZXFsb2NrLmMgICAgICAgfCAyMDIgKysrKysrKysrKysrKysrKysrKysrKysN
Cj4gIGxpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkICAgIHwgICAxICsNCj4gIGxpYi9lYWwvY29t
bW9uL3J0ZV9zZXFsb2NrLmMgIHwgIDEyICsrDQo+ICBsaWIvZWFsL2luY2x1ZGUvbWVzb24uYnVp
bGQgICB8ICAgMSArDQo+ICBsaWIvZWFsL2luY2x1ZGUvcnRlX3NlcWxvY2suaCB8IDMwMiArKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBsaWIvZWFsL3ZlcnNpb24ubWFwICAg
ICAgICAgICB8ICAgMyArDQo+ICA3IGZpbGVzIGNoYW5nZWQsIDUyMyBpbnNlcnRpb25zKCspDQo+
ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXBwL3Rlc3QvdGVzdF9zZXFsb2NrLmMgIGNyZWF0ZSBtb2Rl
IDEwMDY0NA0KPiBsaWIvZWFsL2NvbW1vbi9ydGVfc2VxbG9jay5jICBjcmVhdGUgbW9kZSAxMDA2
NDQNCj4gbGliL2VhbC9pbmNsdWRlL3J0ZV9zZXFsb2NrLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9h
cHAvdGVzdC9tZXNvbi5idWlsZCBiL2FwcC90ZXN0L21lc29uLmJ1aWxkIGluZGV4DQo+IDVmYzFk
ZDFiN2IuLjVlNDE4ZTg3NjYgMTAwNjQ0DQo+IC0tLSBhL2FwcC90ZXN0L21lc29uLmJ1aWxkDQo+
ICsrKyBiL2FwcC90ZXN0L21lc29uLmJ1aWxkDQo+IEBAIC0xMjUsNiArMTI1LDcgQEAgdGVzdF9z
b3VyY2VzID0gZmlsZXMoDQo+ICAgICAgICAgICd0ZXN0X3J3bG9jay5jJywNCj4gICAgICAgICAg
J3Rlc3Rfc2NoZWQuYycsDQo+ICAgICAgICAgICd0ZXN0X3NlY3VyaXR5LmMnLA0KPiArICAgICAg
ICAndGVzdF9zZXFsb2NrLmMnLA0KPiAgICAgICAgICAndGVzdF9zZXJ2aWNlX2NvcmVzLmMnLA0K
PiAgICAgICAgICAndGVzdF9zcGlubG9jay5jJywNCj4gICAgICAgICAgJ3Rlc3Rfc3RhY2suYycs
DQo+IEBAIC0yMTQsNiArMjE1LDcgQEAgZmFzdF90ZXN0cyA9IFsNCj4gICAgICAgICAgWydyd2xv
Y2tfcmRlX3dyb19hdXRvdGVzdCcsIHRydWVdLA0KPiAgICAgICAgICBbJ3NjaGVkX2F1dG90ZXN0
JywgdHJ1ZV0sDQo+ICAgICAgICAgIFsnc2VjdXJpdHlfYXV0b3Rlc3QnLCBmYWxzZV0sDQo+ICsg
ICAgICAgIFsnc2VxbG9ja19hdXRvdGVzdCcsIHRydWVdLA0KPiAgICAgICAgICBbJ3NwaW5sb2Nr
X2F1dG90ZXN0JywgdHJ1ZV0sDQo+ICAgICAgICAgIFsnc3RhY2tfYXV0b3Rlc3QnLCBmYWxzZV0s
DQo+ICAgICAgICAgIFsnc3RhY2tfbGZfYXV0b3Rlc3QnLCBmYWxzZV0sDQo+IGRpZmYgLS1naXQg
YS9hcHAvdGVzdC90ZXN0X3NlcWxvY2suYyBiL2FwcC90ZXN0L3Rlc3Rfc2VxbG9jay5jIG5ldyBm
aWxlIG1vZGUNCj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjU0ZmFkZjgwMjUNCj4gLS0tIC9k
ZXYvbnVsbA0KPiArKysgYi9hcHAvdGVzdC90ZXN0X3NlcWxvY2suYw0KPiBAQCAtMCwwICsxLDIw
MiBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICog
Q29weXJpZ2h0KGMpIDIwMjIgRXJpY3Nzb24gQUINCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8
cnRlX3NlcWxvY2suaD4NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9jeWNsZXMuaD4NCj4gKyNpbmNs
dWRlIDxydGVfbWFsbG9jLmg+DQo+ICsjaW5jbHVkZSA8cnRlX3JhbmRvbS5oPg0KPiArDQo+ICsj
aW5jbHVkZSA8aW50dHlwZXMuaD4NCj4gKw0KPiArI2luY2x1ZGUgInRlc3QuaCINCj4gKw0KPiAr
c3RydWN0IGRhdGEgew0KPiArCXJ0ZV9zZXFsb2NrX3QgbG9jazsNCj4gKw0KPiArCXVpbnQ2NF90
IGE7DQo+ICsJdWludDY0X3QgYiBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiArCXVpbnQ2NF90IGMg
X19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gK30gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gKw0KPiAr
c3RydWN0IHJlYWRlciB7DQo+ICsJc3RydWN0IGRhdGEgKmRhdGE7DQo+ICsJdWludDhfdCBzdG9w
Ow0KPiArfTsNCj4gKw0KPiArI2RlZmluZSBXUklURVJfUlVOVElNRSAoMi4wKSAvKiBzICovDQo+
ICsNCj4gKyNkZWZpbmUgV1JJVEVSX01BWF9ERUxBWSAoMTAwKSAvKiB1cyAqLw0KPiArDQo+ICsj
ZGVmaW5lIElOVEVSUlVQVEVEX1dSSVRFUl9GUkVRVUVOQ1kgKDEwMDApICNkZWZpbmUNCj4gK1dS
SVRFUl9JTlRFUlJVUFRfVElNRSAoMSkgLyogdXMgKi8NCj4gKw0KPiArc3RhdGljIGludA0KPiAr
d3JpdGVyX3J1bih2b2lkICphcmcpDQo+ICt7DQo+ICsJc3RydWN0IGRhdGEgKmRhdGEgPSBhcmc7
DQo+ICsJdWludDY0X3QgZGVhZGxpbmU7DQo+ICsNCj4gKwlkZWFkbGluZSA9IHJ0ZV9nZXRfdGlt
ZXJfY3ljbGVzKCkgKw0KPiArCQlXUklURVJfUlVOVElNRSAqIHJ0ZV9nZXRfdGltZXJfaHooKTsN
Cj4gKw0KPiArCXdoaWxlIChydGVfZ2V0X3RpbWVyX2N5Y2xlcygpIDwgZGVhZGxpbmUpIHsNCj4g
KwkJYm9vbCBpbnRlcnJ1cHRlZDsNCj4gKwkJdWludDY0X3QgbmV3X3ZhbHVlOw0KPiArCQl1bnNp
Z25lZCBpbnQgZGVsYXk7DQo+ICsNCj4gKwkJbmV3X3ZhbHVlID0gcnRlX3JhbmQoKTsNCj4gKw0K
PiArCQlpbnRlcnJ1cHRlZCA9DQo+IHJ0ZV9yYW5kX21heChJTlRFUlJVUFRFRF9XUklURVJfRlJF
UVVFTkNZKSA9PSAwOw0KPiArDQo+ICsJCXJ0ZV9zZXFsb2NrX3dyaXRlX2xvY2soJmRhdGEtPmxv
Y2spOw0KPiArDQo+ICsJCWRhdGEtPmMgPSBuZXdfdmFsdWU7DQo+ICsNCj4gKwkJLyogVGhlc2Ug
Y29tcGlsZXIgYmFycmllcnMgKGJvdGggb24gdGhlIHRlc3QgcmVhZGVyDQo+ICsJCSAqIGFuZCB0
aGUgdGVzdCB3cml0ZXIgc2lkZSkgYXJlIGhlcmUgdG8gZW5zdXJlIHRoYXQNCj4gKwkJICogbG9h
ZHMvc3RvcmVzICp1c3VhbGx5KiBoYXBwZW4gaW4gdGVzdCBwcm9ncmFtIG9yZGVyDQo+ICsJCSAq
IChhbHdheXMgb24gYSBUU08gbWFjaGluZSkuIFRoZXkgYXJlIGFycmFuZ2UgaW4gc3VjaA0KPiAr
CQkgKiBhIHdheSB0aGF0IHRoZSB3cml0ZXIgc3RvcmVzIGluIGEgZGlmZmVyZW50IG9yZGVyDQo+
ICsJCSAqIHRoYW4gdGhlIHJlYWRlciBsb2FkcywgdG8gZW11bGF0ZSBhbiBhcmJpdHJhcnkNCj4g
KwkJICogb3JkZXIuIEEgcmVhbCBhcHBsaWNhdGlvbiB1c2luZyBhIHNlcWxvY2sgZG9lcyBub3QN
Cj4gKwkJICogcmVxdWlyZSBhbnkgY29tcGlsZXIgYmFycmllcnMuDQo+ICsJCSAqLw0KPiArCQly
dGVfY29tcGlsZXJfYmFycmllcigpOw0KVGhlIGNvbXBpbGVyIGJhcnJpZXJzIGFyZSBub3Qgc3Vm
ZmljaWVudCBvbiBhbGwgYXJjaGl0ZWN0dXJlcyAoaWYgdGhlIGludGVudGlvbiBpcyB0byBtYWlu
dGFpbiB0aGUgcHJvZ3JhbSBvcmRlcikuDQoNCj4gKwkJZGF0YS0+YiA9IG5ld192YWx1ZTsNCj4g
Kw0KPiArCQlpZiAoaW50ZXJydXB0ZWQpDQo+ICsJCQlydGVfZGVsYXlfdXNfYmxvY2soV1JJVEVS
X0lOVEVSUlVQVF9USU1FKTsNCj4gKw0KPiArCQlydGVfY29tcGlsZXJfYmFycmllcigpOw0KPiAr
CQlkYXRhLT5hID0gbmV3X3ZhbHVlOw0KPiArDQo+ICsJCXJ0ZV9zZXFsb2NrX3dyaXRlX3VubG9j
aygmZGF0YS0+bG9jayk7DQo+ICsNCj4gKwkJZGVsYXkgPSBydGVfcmFuZF9tYXgoV1JJVEVSX01B
WF9ERUxBWSk7DQo+ICsNCj4gKwkJcnRlX2RlbGF5X3VzX2Jsb2NrKGRlbGF5KTsNCj4gKwl9DQo+
ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArI2RlZmluZSBJTlRFUlJVUFRFRF9SRUFE
RVJfRlJFUVVFTkNZICgxMDAwKSAjZGVmaW5lDQo+ICtSRUFERVJfSU5URVJSVVBUX1RJTUUgKDEw
MDApIC8qIHVzICovDQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3JlYWRlcl9ydW4odm9pZCAqYXJn
KQ0KPiArew0KPiArCXN0cnVjdCByZWFkZXIgKnIgPSBhcmc7DQo+ICsJaW50IHJjID0gMDsNCj4g
Kw0KPiArCXdoaWxlIChfX2F0b21pY19sb2FkX24oJnItPnN0b3AsIF9fQVRPTUlDX1JFTEFYRUQp
ID09IDAgJiYgcmMgPT0NCj4gMCkgew0KPiArCQlzdHJ1Y3QgZGF0YSAqZGF0YSA9IHItPmRhdGE7
DQo+ICsJCWJvb2wgaW50ZXJydXB0ZWQ7DQo+ICsJCXVpbnQ2NF90IGE7DQo+ICsJCXVpbnQ2NF90
IGI7DQo+ICsJCXVpbnQ2NF90IGM7DQo+ICsJCXVpbnQzMl90IHNuOw0KPiArDQo+ICsJCWludGVy
cnVwdGVkID0NCj4gcnRlX3JhbmRfbWF4KElOVEVSUlVQVEVEX1JFQURFUl9GUkVRVUVOQ1kpID09
IDA7DQo+ICsNCj4gKwkJc24gPSBydGVfc2VxbG9ja19yZWFkX2xvY2soJmRhdGEtPmxvY2spOw0K
PiArDQo+ICsJCWRvIHsNCj4gKwkJCWEgPSBkYXRhLT5hOw0KPiArCQkJLyogU2VlIHdyaXRlcl9y
dW4oKSBmb3IgYW4gZXhwbGFuYXRpb24gd2h5DQo+ICsJCQkgKiB0aGVzZSBiYXJyaWVycyBhcmUg
aGVyZS4NCj4gKwkJCSAqLw0KPiArCQkJcnRlX2NvbXBpbGVyX2JhcnJpZXIoKTsNCj4gKw0KPiAr
CQkJaWYgKGludGVycnVwdGVkKQ0KPiArDQo+IAlydGVfZGVsYXlfdXNfYmxvY2soUkVBREVSX0lO
VEVSUlVQVF9USU1FKTsNCj4gKw0KPiArCQkJYyA9IGRhdGEtPmM7DQo+ICsNCj4gKwkJCXJ0ZV9j
b21waWxlcl9iYXJyaWVyKCk7DQo+ICsJCQliID0gZGF0YS0+YjsNCj4gKw0KPiArCQl9IHdoaWxl
ICghcnRlX3NlcWxvY2tfcmVhZF90cnl1bmxvY2soJmRhdGEtPmxvY2ssICZzbikpOw0KPiArDQo+
ICsJCWlmIChhICE9IGIgfHwgYiAhPSBjKSB7DQo+ICsJCQlwcmludGYoIlJlYWRlciBvYnNlcnZl
ZCBpbmNvbnNpc3RlbnQgZGF0YSB2YWx1ZXMgIg0KPiArCQkJICAgICAgICIlIiBQUkl1NjQgIiAl
IiBQUkl1NjQgIiAlIiBQUkl1NjQgIlxuIiwNCj4gKwkJCSAgICAgICBhLCBiLCBjKTsNCj4gKwkJ
CXJjID0gLTE7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmM7DQo+ICt9DQo+ICsN
Cj4gK3N0YXRpYyB2b2lkDQo+ICtyZWFkZXJfc3RvcChzdHJ1Y3QgcmVhZGVyICpyZWFkZXIpDQo+
ICt7DQo+ICsJX19hdG9taWNfc3RvcmVfbigmcmVhZGVyLT5zdG9wLCAxLCBfX0FUT01JQ19SRUxB
WEVEKTsgfQ0KPiArDQo+ICsjZGVmaW5lIE5VTV9XUklURVJTICgyKSAvKiBtYWluIGxjb3JlICsg
b25lIHdvcmtlciAqLyAjZGVmaW5lDQo+ICtNSU5fTlVNX1JFQURFUlMgKDIpICNkZWZpbmUgTUFY
X1JFQURFUlMgKFJURV9NQVhfTENPUkUgLQ0KPiBOVU1fV1JJVEVSUyAtDQo+ICsxKSAjZGVmaW5l
IE1JTl9MQ09SRV9DT1VOVCAoTlVNX1dSSVRFUlMgKyBNSU5fTlVNX1JFQURFUlMpDQo+ICsNCj4g
Ky8qIE9ubHkgYSBjb21waWxlLXRpbWUgdGVzdCAqLw0KPiArc3RhdGljIHJ0ZV9zZXFsb2NrX3Qg
X19ydGVfdW51c2VkIHN0YXRpY19pbml0X2xvY2sgPQ0KPiArUlRFX1NFUUxPQ0tfSU5JVElBTEla
RVI7DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3Rlc3Rfc2VxbG9jayh2b2lkKQ0KPiArew0KPiAr
CXN0cnVjdCByZWFkZXIgcmVhZGVyc1tNQVhfUkVBREVSU107DQo+ICsJdW5zaWduZWQgaW50IG51
bV9yZWFkZXJzOw0KPiArCXVuc2lnbmVkIGludCBudW1fbGNvcmVzOw0KPiArCXVuc2lnbmVkIGlu
dCBpOw0KPiArCXVuc2lnbmVkIGludCBsY29yZV9pZDsNCj4gKwl1bnNpZ25lZCBpbnQgcmVhZGVy
X2xjb3JlX2lkc1tNQVhfUkVBREVSU107DQo+ICsJdW5zaWduZWQgaW50IHdvcmtlcl93cml0ZXJf
bGNvcmVfaWQgPSAwOw0KPiArCWludCByYyA9IDA7DQo+ICsNCj4gKwludW1fbGNvcmVzID0gcnRl
X2xjb3JlX2NvdW50KCk7DQo+ICsNCj4gKwlpZiAobnVtX2xjb3JlcyA8IE1JTl9MQ09SRV9DT1VO
VCkgew0KPiArCQlwcmludGYoIlRvbyBmZXcgY29yZXMgdG8gcnVuIHRlc3QuIFNraXBwaW5nLlxu
Iik7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCW51bV9yZWFkZXJzID0gbnVtX2xj
b3JlcyAtIE5VTV9XUklURVJTOw0KPiArDQo+ICsJc3RydWN0IGRhdGEgKmRhdGEgPSBydGVfem1h
bGxvYyhOVUxMLCBzaXplb2Yoc3RydWN0IGRhdGEpLCAwKTsNCj4gKw0KPiArCWkgPSAwOw0KPiAr
CVJURV9MQ09SRV9GT1JFQUNIX1dPUktFUihsY29yZV9pZCkgew0KPiArCQlpZiAoaSA9PSAwKSB7
DQo+ICsJCQlydGVfZWFsX3JlbW90ZV9sYXVuY2god3JpdGVyX3J1biwgZGF0YSwgbGNvcmVfaWQp
Ow0KPiArCQkJd29ya2VyX3dyaXRlcl9sY29yZV9pZCA9IGxjb3JlX2lkOw0KPiArCQl9IGVsc2Ug
ew0KPiArCQkJdW5zaWduZWQgaW50IHJlYWRlcl9pZHggPSBpIC0gMTsNCj4gKwkJCXN0cnVjdCBy
ZWFkZXIgKnJlYWRlciA9ICZyZWFkZXJzW3JlYWRlcl9pZHhdOw0KPiArDQo+ICsJCQlyZWFkZXIt
PmRhdGEgPSBkYXRhOw0KPiArCQkJcmVhZGVyLT5zdG9wID0gMDsNCj4gKw0KPiArCQkJcnRlX2Vh
bF9yZW1vdGVfbGF1bmNoKHJlYWRlcl9ydW4sIHJlYWRlciwgbGNvcmVfaWQpOw0KPiArCQkJcmVh
ZGVyX2xjb3JlX2lkc1tyZWFkZXJfaWR4XSA9IGxjb3JlX2lkOw0KPiArCQl9DQo+ICsJCWkrKzsN
Cj4gKwl9DQo+ICsNCj4gKwlpZiAod3JpdGVyX3J1bihkYXRhKSAhPSAwIHx8DQo+ICsJICAgIHJ0
ZV9lYWxfd2FpdF9sY29yZSh3b3JrZXJfd3JpdGVyX2xjb3JlX2lkKSAhPSAwKQ0KPiArCQlyYyA9
IC0xOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9yZWFkZXJzOyBpKyspIHsNCj4gKwkJ
cmVhZGVyX3N0b3AoJnJlYWRlcnNbaV0pOw0KPiArCQlpZiAocnRlX2VhbF93YWl0X2xjb3JlKHJl
YWRlcl9sY29yZV9pZHNbaV0pICE9IDApDQo+ICsJCQlyYyA9IC0xOw0KPiArCX0NCj4gKw0KPiAr
CXJldHVybiByYzsNCj4gK30NCj4gKw0KPiArUkVHSVNURVJfVEVTVF9DT01NQU5EKHNlcWxvY2tf
YXV0b3Rlc3QsIHRlc3Rfc2VxbG9jayk7DQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2NvbW1vbi9t
ZXNvbi5idWlsZCBiL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkIGluZGV4DQo+IDkxNzc1OGNj
NjUuLmE0MTM0M2JmZWQgMTAwNjQ0DQo+IC0tLSBhL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxk
DQo+ICsrKyBiL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+IEBAIC0zNSw2ICszNSw3IEBA
IHNvdXJjZXMgKz0gZmlsZXMoDQo+ICAgICAgICAgICdydGVfbWFsbG9jLmMnLA0KPiAgICAgICAg
ICAncnRlX3JhbmRvbS5jJywNCj4gICAgICAgICAgJ3J0ZV9yZWNpcHJvY2FsLmMnLA0KPiArCSdy
dGVfc2VxbG9jay5jJywNCj4gICAgICAgICAgJ3J0ZV9zZXJ2aWNlLmMnLA0KPiAgICAgICAgICAn
cnRlX3ZlcnNpb24uYycsDQo+ICApDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2NvbW1vbi9ydGVf
c2VxbG9jay5jIGIvbGliL2VhbC9jb21tb24vcnRlX3NlcWxvY2suYyBuZXcNCj4gZmlsZSBtb2Rl
IDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwLi5kNGZlNjQ4Nzk5DQo+IC0tLSAvZGV2L251bGwNCj4g
KysrIGIvbGliL2VhbC9jb21tb24vcnRlX3NlcWxvY2suYw0KPiBAQCAtMCwwICsxLDEyIEBADQo+
ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmln
aHQoYykgMjAyMiBFcmljc3NvbiBBQg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfc2Vx
bG9jay5oPg0KPiArDQo+ICt2b2lkDQo+ICtydGVfc2VxbG9ja19pbml0KHJ0ZV9zZXFsb2NrX3Qg
KnNlcWxvY2spIHsNCj4gKwlzZXFsb2NrLT5zbiA9IDA7DQo+ICsJcnRlX3NwaW5sb2NrX2luaXQo
JnNlcWxvY2stPmxvY2spOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC9pbmNsdWRlL21l
c29uLmJ1aWxkIGIvbGliL2VhbC9pbmNsdWRlL21lc29uLmJ1aWxkIGluZGV4DQo+IDk3MDA0OTQ4
MTYuLjQ4ZGY1ZjFhMjEgMTAwNjQ0DQo+IC0tLSBhL2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWls
ZA0KPiArKysgYi9saWIvZWFsL2luY2x1ZGUvbWVzb24uYnVpbGQNCj4gQEAgLTM2LDYgKzM2LDcg
QEAgaGVhZGVycyArPSBmaWxlcygNCj4gICAgICAgICAgJ3J0ZV9wZXJfbGNvcmUuaCcsDQo+ICAg
ICAgICAgICdydGVfcmFuZG9tLmgnLA0KPiAgICAgICAgICAncnRlX3JlY2lwcm9jYWwuaCcsDQo+
ICsgICAgICAgICdydGVfc2VxbG9jay5oJywNCj4gICAgICAgICAgJ3J0ZV9zZXJ2aWNlLmgnLA0K
PiAgICAgICAgICAncnRlX3NlcnZpY2VfY29tcG9uZW50LmgnLA0KPiAgICAgICAgICAncnRlX3N0
cmluZ19mbnMuaCcsDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2luY2x1ZGUvcnRlX3NlcWxvY2su
aCBiL2xpYi9lYWwvaW5jbHVkZS9ydGVfc2VxbG9jay5oIG5ldyBmaWxlDQpPdGhlciBsb2NrIGlt
cGxlbWVudGF0aW9ucyBhcmUgaW4gbGliL2VhbC9pbmNsdWRlL2dlbmVyaWMuDQoNCj4gbW9kZSAx
MDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uNDRlYWNkNjZlOA0KPiAtLS0gL2Rldi9udWxsDQo+ICsr
KyBiL2xpYi9lYWwvaW5jbHVkZS9ydGVfc2VxbG9jay5oDQo+IEBAIC0wLDAgKzEsMzAyIEBADQo+
ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmln
aHQoYykgMjAyMiBFcmljc3NvbiBBQg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX1JURV9TRVFM
T0NLX0hfDQo+ICsjZGVmaW5lIF9SVEVfU0VRTE9DS19IXw0KPiArDQo+ICsjaWZkZWYgX19jcGx1
c3BsdXMNCj4gK2V4dGVybiAiQyIgew0KPiArI2VuZGlmDQo+ICsNCj4gKy8qKg0KPiArICogQGZp
bGUNCj4gKyAqIFJURSBTZXFsb2NrDQo+ICsgKg0KPiArICogQSBzZXF1ZW5jZSBsb2NrIChzZXFs
b2NrKSBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgYWxsb3dpbmcNCj4gKyAqIG11bHRp
cGxlLCBwYXJhbGxlbCwgcmVhZGVycyB0byBlZmZpY2llbnRseSBhbmQgc2FmZWx5IChpLmUuLCBp
biBhDQo+ICsgKiBkYXRhLXJhY2UgZnJlZSBtYW5uZXIpIGFjY2VzcyB0aGUgbG9jay1wcm90ZWN0
ZWQgZGF0YS4gVGhlIFJURQ0KPiArICogc2VxbG9jayBwZXJtaXRzIG11bHRpcGxlIHdyaXRlcnMg
YXMgd2VsbC4gQSBzcGlubG9jayBpcyB1c2VkIHRvDQo+ICsgKiB3cml0ZXItd3JpdGVyIHN5bmNo
cm9uaXphdGlvbi4NCj4gKyAqDQo+ICsgKiBBIHJlYWRlciBuZXZlciBibG9ja3MgYSB3cml0ZXIu
IFZlcnkgaGlnaCBmcmVxdWVuY3kgd3JpdGVzIG1heQ0KPiArICogcHJldmVudCByZWFkZXJzIGZy
b20gbWFraW5nIHByb2dyZXNzLg0KPiArICoNCj4gKyAqIEEgc2VxbG9jayBpcyBub3QgcHJlZW1w
dGlvbi1zYWZlIG9uIHRoZSB3cml0ZXIgc2lkZS4gSWYgYSB3cml0ZXIgaXMNCj4gKyAqIHByZWVt
cHRlZCwgaXQgbWF5IGJsb2NrIHJlYWRlcnMgdW50aWwgdGhlIHdyaXRlciB0aHJlYWQgaXMgYWdh
aW4NCj4gKyAqIGFsbG93ZWQgdG8gZXhlY3V0ZS4gSGVhdnkgY29tcHV0YXRpb25zIHNob3VsZCBi
ZSBrZXB0IG91dCBvZiB0aGUNCj4gKyAqIHdyaXRlci1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHRv
IGF2b2lkIGRlbGF5aW5nIHJlYWRlcnMuDQo+ICsgKg0KPiArICogU2VxbG9ja3MgYXJlIHVzZWZ1
bCBmb3IgZGF0YSB3aGljaCBhcmUgcmVhZCBieSBtYW55IGNvcmVzLCBhdCBhDQo+ICsgKiBoaWdo
IGZyZXF1ZW5jeSwgYW5kIHJlbGF0aXZlbHkgaW5mcmVxdWVudGx5IHdyaXR0ZW4gdG8uDQo+ICsg
Kg0KPiArICogT25lIHdheSB0byB0aGluayBhYm91dCBzZXFsb2NrcyBpcyB0aGF0IHRoZXkgcHJv
dmlkZSBtZWFucyB0bw0KPiArICogcGVyZm9ybSBhdG9taWMgb3BlcmF0aW9ucyBvbiBvYmplY3Rz
IGxhcmdlciB0aGFuIHdoYXQgdGhlIG5hdGl2ZQ0KPiArICogbWFjaGluZSBpbnN0cnVjdGlvbnMg
YWxsb3cgZm9yLg0KPiArICoNCj4gKyAqIFRvIGF2b2lkIHJlc291cmNlIHJlY2xhbWF0aW9uIGlz
c3VlcywgdGhlIGRhdGEgcHJvdGVjdGVkIGJ5IGENCj4gKyAqIHNlcWxvY2sgc2hvdWxkIHR5cGlj
YWxseSBiZSBrZXB0IHNlbGYtY29udGFpbmVkIChlLmcuLCBubyBwb2ludGVycw0KPiArICogdG8g
bXV0YWJsZSwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEpLg0KPiArICoNCj4gKyAqIEV4YW1w
bGUgdXNhZ2U6DQo+ICsgKiBAY29kZXsuY30NCj4gKyAqICNkZWZpbmUgTUFYX1lfTEVOICgxNikN
Cj4gKyAqIC8vIEFwcGxpY2F0aW9uLWRlZmluZWQgZXhhbXBsZSBkYXRhIHN0cnVjdHVyZSwgcHJv
dGVjdGVkIGJ5IGEgc2VxbG9jay4NCj4gKyAqIHN0cnVjdCBjb25maWcgew0KPiArICogICAgICAg
ICBydGVfc2VxbG9ja190IGxvY2s7DQo+ICsgKiAgICAgICAgIGludCBwYXJhbV94Ow0KPiArICog
ICAgICAgICBjaGFyIHBhcmFtX3lbTUFYX1lfTEVOXTsNCj4gKyAqIH07DQo+ICsgKg0KPiArICog
Ly8gQWNjZXNzb3IgZnVuY3Rpb24gZm9yIHJlYWRpbmcgY29uZmlnIGZpZWxkcy4NCj4gKyAqIHZv
aWQNCj4gKyAqIGNvbmZpZ19yZWFkKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZywgaW50ICpw
YXJhbV94LCBjaGFyDQo+ICsqcGFyYW1feSkNCj4gKyAqIHsNCj4gKyAqICAgICAgICAgLy8gVGVt
cG9yYXJ5IHZhcmlhYmxlcywganVzdCB0byBpbXByb3ZlIHJlYWRhYmlsaXR5Lg0KSSB0aGluayB0
aGUgYWJvdmUgY29tbWVudCBpcyBub3QgbmVjZXNzYXJ5LiBJdCBpcyBiZW5lZmljaWFsIHRvIGNv
cHkgdGhlIHByb3RlY3RlZCBkYXRhIHRvIGtlZXAgdGhlIHJlYWQgc2lkZSBjcml0aWNhbCBzZWN0
aW9uIHNtYWxsLg0KDQo+ICsgKiAgICAgICAgIGludCB0ZW50YXRpdmVfeDsNCj4gKyAqICAgICAg
ICAgY2hhciB0ZW50YXRpdmVfeVtNQVhfWV9MRU5dOw0KPiArICogICAgICAgICB1aW50MzJfdCBz
bjsNCj4gKyAqDQo+ICsgKiAgICAgICAgIHNuID0gcnRlX3NlcWxvY2tfcmVhZF9sb2NrKCZjb25m
aWctPmxvY2spOw0KPiArICogICAgICAgICBkbyB7DQo+ICsgKiAgICAgICAgICAgICAgICAgLy8g
TG9hZHMgbWF5IGJlIGF0b21pYyBvciBub24tYXRvbWljLCBhcyBpbiB0aGlzIGV4YW1wbGUuDQo+
ICsgKiAgICAgICAgICAgICAgICAgdGVudGF0aXZlX3ggPSBjb25maWctPnBhcmFtX3g7DQo+ICsg
KiAgICAgICAgICAgICAgICAgc3RyY3B5KHRlbnRhdGl2ZV95LCBjb25maWctPnBhcmFtX3kpOw0K
PiArICogICAgICAgICB9IHdoaWxlICghcnRlX3NlcWxvY2tfcmVhZF90cnl1bmxvY2soJmNvbmZp
Zy0+bG9jaywgJnNuKSk7DQo+ICsgKiAgICAgICAgIC8vIEFuIGFwcGxpY2F0aW9uIGNvdWxkIHNr
aXAgcmV0cnlpbmcsIGFuZCB0cnkgYWdhaW4gbGF0ZXIsIGlmDQo+ICsgKiAgICAgICAgIC8vIHBy
b2dyZXNzIGlzIHBvc3NpYmxlIHdpdGhvdXQgdGhlIGRhdGEuDQo+ICsgKg0KPiArICogICAgICAg
ICAqcGFyYW1feCA9IHRlbnRhdGl2ZV94Ow0KPiArICogICAgICAgICBzdHJjcHkocGFyYW1feSwg
dGVudGF0aXZlX3kpOw0KPiArICogfQ0KPiArICoNCj4gKyAqIC8vIEFjY2Vzc29yIGZ1bmN0aW9u
IGZvciB3cml0aW5nIGNvbmZpZyBmaWVsZHMuDQo+ICsgKiB2b2lkDQo+ICsgKiBjb25maWdfdXBk
YXRlKHN0cnVjdCBjb25maWcgKmNvbmZpZywgaW50IHBhcmFtX3gsIGNvbnN0IGNoYXINCj4gKypw
YXJhbV95KQ0KPiArICogew0KPiArICogICAgICAgICBydGVfc2VxbG9ja193cml0ZV9sb2NrKCZj
b25maWctPmxvY2spOw0KPiArICogICAgICAgICAvLyBTdG9yZXMgbWF5IGJlIGF0b21pYyBvciBu
b24tYXRvbWljLCBhcyBpbiB0aGlzIGV4YW1wbGUuDQo+ICsgKiAgICAgICAgIGNvbmZpZy0+cGFy
YW1feCA9IHBhcmFtX3g7DQo+ICsgKiAgICAgICAgIHN0cmNweShjb25maWctPnBhcmFtX3ksIHBh
cmFtX3kpOw0KPiArICogICAgICAgICBydGVfc2VxbG9ja193cml0ZV91bmxvY2soJmNvbmZpZy0+
bG9jayk7DQo+ICsgKiB9DQo+ICsgKiBAZW5kY29kZQ0KPiArICoNCj4gKyAqIEBzZWUNCj4gKyAq
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NlcWxvY2suDQo+ICsgKi8NCj4gKw0KPiAr
I2luY2x1ZGUgPHN0ZGJvb2wuaD4NCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKw0KPiArI2lu
Y2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gKyNpbmNsdWRlIDxydGVfYnJhbmNoX3ByZWRpY3Rpb24u
aD4NCj4gKyNpbmNsdWRlIDxydGVfc3BpbmxvY2suaD4NCj4gKw0KPiArLyoqDQo+ICsgKiBUaGUg
UlRFIHNlcWxvY2sgdHlwZS4NCj4gKyAqLw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArCXVpbnQz
Ml90IHNuOyAvKio8IEEgc2VxdWVuY2UgbnVtYmVyIGZvciB0aGUgcHJvdGVjdGVkIGRhdGEuICov
DQo+ICsJcnRlX3NwaW5sb2NrX3QgbG9jazsgLyoqPCBTcGlubG9jayB1c2VkIHRvIHNlcmlhbGl6
ZSB3cml0ZXJzLiAgKi8gfQ0KU3VnZ2VzdCB1c2luZyB0aWNrZXQgbG9jayBmb3IgdGhlIHdyaXRl
ciBzaWRlLiBJdCBzaG91bGQgaGF2ZSBsb3cgb3ZlcmhlYWQgd2hlbiB0aGVyZSBpcyBhIHNpbmds
ZSB3cml0ZXIsIGJ1dCBwcm92aWRlcyBiZXR0ZXIgZnVuY3Rpb25hbGl0eSB3aGVuIHRoZXJlIGFy
ZSBtdWx0aXBsZSB3cml0ZXJzLiANCg0KPiArcnRlX3NlcWxvY2tfdDsNCj4gKw0KPiArLyoqDQo+
ICsgKiBBIHN0YXRpYyBzZXFsb2NrIGluaXRpYWxpemVyLg0KPiArICovDQo+ICsjZGVmaW5lIFJU
RV9TRVFMT0NLX0lOSVRJQUxJWkVSIHsgMCwgUlRFX1NQSU5MT0NLX0lOSVRJQUxJWkVSIH0NCj4g
Kw0KPiArLyoqDQo+ICsgKiBJbml0aWFsaXplIHRoZSBzZXFsb2NrLg0KPiArICoNCj4gKyAqIFRo
aXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNlcWxvY2ssIGFuZCBsZWF2ZXMgdGhlIHdyaXRl
ci1zaWRlDQo+ICsgKiBzcGlubG9jayB1bmxvY2tlZC4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gc2Vx
bG9jaw0KPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHNlcWxvY2suDQo+ICsgKi8NCj4gK19fcnRl
X2V4cGVyaW1lbnRhbA0KPiArdm9pZA0KPiArcnRlX3NlcWxvY2tfaW5pdChydGVfc2VxbG9ja190
ICpzZXFsb2NrKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBCZWdpbiBhIHJlYWQtc2lkZSBjcml0aWNh
bCBzZWN0aW9uLg0KPiArICoNCj4gKyAqIEEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIG1hcmtzIHRo
ZSBiZWdpbm5pbmcgb2YgYSByZWFkLXNpZGUgY3JpdGljYWwNCj4gKyAqIHNlY3Rpb24sIGZvciBA
cCBzZXFsb2NrLg0KPiArICoNCj4gKyAqIHJ0ZV9zZXFsb2NrX3JlYWRfbG9jaygpIHJldHVybnMg
YSBzZXF1ZW5jZSBudW1iZXIsIHdoaWNoIGlzIGxhdGVyDQo+ICsgKiB1c2VkIGluIHJ0ZV9zZXFs
b2NrX3JlYWRfdHJ5dW5sb2NrKCkgdG8gY2hlY2sgaWYgdGhlIHByb3RlY3RlZCBkYXRhDQo+ICsg
KiB1bmRlcndlbnQgYW55IG1vZGlmaWNhdGlvbnMgZHVyaW5nIHRoZSByZWFkIHRyYW5zYWN0aW9u
Lg0KPiArICoNCj4gKyAqIEFmdGVyIChpbiBwcm9ncmFtIG9yZGVyKSBydGVfc2VxbG9ja19yZWFk
X2xvY2soKSBoYXMgYmVlbiBjYWxsZWQsDQo+ICsgKiB0aGUgY2FsbGluZyB0aHJlYWQgcmVhZHMg
dGhlIHByb3RlY3RlZCBkYXRhLCBmb3IgbGF0ZXIgdXNlLiBUaGUNCj4gKyAqIHByb3RlY3RlZCBk
YXRhIHJlYWQgKm11c3QqIGJlIGNvcGllZCAoZWl0aGVyIGluIHByaXN0aW5lIGZvcm0sIG9yDQo+
ICsgKiBpbiB0aGUgZm9ybSBvZiBzb21lIGRlcml2YXRpdmUpLCBzaW5jZSB0aGUgY2FsbGVyIG1h
eSBvbmx5IHJlYWQgdGhlDQo+ICsgKiBkYXRhIGZyb20gd2l0aGluIHRoZSByZWFkLXNpZGUgY3Jp
dGljYWwgc2VjdGlvbiAoaS5lLiwgYWZ0ZXINCj4gKyAqIHJ0ZV9zZXFsb2NrX3JlYWRfbG9jaygp
IGFuZCBiZWZvcmUgcnRlX3NlcWxvY2tfcmVhZF90cnl1bmxvY2soKSksDQo+ICsgKiBidXQgbXVz
dCBub3QgYWN0IHVwb24gdGhlIHJldHJpZXZlZCBkYXRhIHdoaWxlIGluIHRoZSBjcml0aWNhbA0K
PiArICogc2VjdGlvbiwgc2luY2UgaXQgZG9lcyBub3QgeWV0IGtub3cgaWYgaXQgaXMgY29uc2lz
dGVudC4NCj4gKyAqDQo+ICsgKiBUaGUgcHJvdGVjdGVkIGRhdGEgbWF5IGJlIHJlYWQgdXNpbmcg
YXRvbWljIGFuZC9vciBub24tYXRvbWljDQo+ICsgKiBvcGVyYXRpb25zLg0KPiArICoNCj4gKyAq
IEFmdGVyIChpbiBwcm9ncmFtIG9yZGVyKSBhbGwgcmVxdWlyZWQgZGF0YSBsb2FkcyBoYXZlIGJl
ZW4NCj4gKyAqIHBlcmZvcm1lZCwgcnRlX3NlcWxvY2tfcmVhZF90cnl1bmxvY2soKSBzaG91bGQg
YmUgY2FsbGVkLCBtYXJraW5nDQo+ICsgKiB0aGUgZW5kIG9mIHRoZSByZWFkLXNpZGUgY3JpdGlj
YWwgc2VjdGlvbi4NCj4gKyAqDQo+ICsgKiBJZiBydGVfc2VxbG9ja19yZWFkX3RyeXVubG9jaygp
IHJldHVybnMgdHJ1ZSwgdGhlIGRhdGEgd2FzIHJlYWQNCj4gKyAqIGF0b21pY2FsbHkgYW5kIHRo
ZSBjb3BpZWQgZGF0YSBpcyBjb25zaXN0ZW50Lg0KPiArICoNCj4gKyAqIElmIHJ0ZV9zZXFsb2Nr
X3JlYWRfdHJ5dW5sb2NrKCkgcmV0dXJucyBmYWxzZSwgdGhlIGp1c3QtcmVhZCBkYXRhDQo+ICsg
KiBpcyBpbmNvbnNpc3RlbnQgYW5kIHNob3VsZCBiZSBkaXNjYXJkZWQuIFRoZSBjYWxsZXIgaGFz
IHRoZSBvcHRpb24NCj4gKyAqIHRvIGVpdGhlciByZS1yZWFkIHRoZSBkYXRhIGFuZCBjYWxsIHJ0
ZV9zZXFsb2NrX3JlYWRfdHJ5dW5sb2NrKCkNCj4gKyAqIGFnYWluLCBvciB0byByZXN0YXJ0IHRo
ZSB3aG9sZSBwcm9jZWR1cmUgKGkuZS4sIGZyb20NCj4gKyAqIHJ0ZV9zZXFsb2NrX3JlYWRfbG9j
aygpKSBhdCBzb21lIGxhdGVyIHRpbWUuDQo+ICsgKg0KPiArICogQHBhcmFtIHNlcWxvY2sNCj4g
KyAqICAgQSBwb2ludGVyIHRvIHRoZSBzZXFsb2NrLg0KPiArICogQHJldHVybg0KPiArICogICBU
aGUgc2VxbG9jayBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgY3JpdGljYWwgc2VjdGlvbiwgdG8N
Cj4gKyAqICAgbGF0ZXIgYmUgcGFzc2VkIHRvIHJ0ZV9zZXFsb2NrX3JlYWRfdHJ5dW5sb2NrKCku
DQo+ICsgKg0KPiArICogQHNlZSBydGVfc2VxbG9ja19yZWFkX3RyeXVubG9jaygpDQo+ICsgKi8N
Cj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiArcnRl
X3NlcWxvY2tfcmVhZF9sb2NrKGNvbnN0IHJ0ZV9zZXFsb2NrX3QgKnNlcWxvY2spIHsNCj4gKwkv
KiBfX0FUT01JQ19BQ1FVSVJFIHRvIHByZXZlbnQgbG9hZHMgYWZ0ZXIgKGluIHByb2dyYW0gb3Jk
ZXIpDQo+ICsJICogZnJvbSBoYXBwZW5pbmcgYmVmb3JlIHRoZSBzbiBsb2FkLiBTeW5jaHJvbml6
ZXMtd2l0aCB0aGUNCj4gKwkgKiBzdG9yZSByZWxlYXNlIGluIHJ0ZV9zZXFsb2NrX3dyaXRlX3Vu
bG9jaygpLg0KPiArCSAqLw0KPiArCXJldHVybiBfX2F0b21pY19sb2FkX24oJnNlcWxvY2stPnNu
LCBfX0FUT01JQ19BQ1FVSVJFKTsgfQ0KPiArDQo+ICsvKioNCj4gKyAqIEVuZCBhIHJlYWQtc2lk
ZSBjcml0aWNhbCBzZWN0aW9uLg0KPiArICoNCj4gKyAqIEEgY2FsbCB0byB0aGlzIGZ1bmN0aW9u
IG1hcmtzIHRoZSBlbmQgb2YgYSByZWFkLXNpZGUgY3JpdGljYWwNClNob3VsZCB3ZSBjYXB0dXJl
IHRoYXQgaXQgYWxzbyBiZWdpbnMgYSBuZXcgY3JpdGljYWwtc2VjdGlvbiBmb3IgdGhlIHN1YnNl
cXVlbnQgY2FsbHMgdG8gcnRlX3NlcWxvY2tfdHJ5dW5sb2NrKCk/DQoNCj4gKyAqIHNlY3Rpb24s
IGZvciBAcCBzZXFsb2NrLiBUaGUgYXBwbGljYXRpb24gbXVzdCBzdXBwbHkgdGhlIHNlcXVlbmNl
DQo+ICsgKiBudW1iZXIgcHJvZHVjZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcnRlX3NlcWxvY2tf
cmVhZF9sb2NrKCkgKG9yLA0KPiArICogaW4gY2FzZSBvZiBhIHJldHJ5LCB0aGUgcnRlX3NlcWxv
Y2tfdHJ5dW5sb2NrKCkpIGNhbGwuDQo+ICsgKg0KPiArICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBo
YXMgYmVlbiBjYWxsZWQsIHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBhY2Nlc3MNCj4gKyAqIHRoZSBw
cm90ZWN0ZWQgZGF0YS4NCkkgdW5kZXJzdGFuZCB3aGF0IHlvdSBtZWFuIGhlcmUuIEJ1dCwgSSB0
aGluayB0aGlzIG5lZWRzIGNsYXJpdHkuDQpJbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgcnRlX3Nl
cWxvY2tfcmVhZF9sb2NrKCkgeW91IGhhdmUgbWVudGlvbmVkLCBpZiBydGVfc2VxbG9ja19yZWFk
X3RyeXVubG9jaygpIHJldHVybnMgZmFsc2UsIG9uZSBjb3VsZCByZS1yZWFkIHRoZSBkYXRhLg0K
TWF5IGJlIHRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG86DQoiIEFmdGVyIHRoaXMgZnVuY3Rpb24g
cmV0dXJucyB0cnVlLCB0aGUgY2FsbGVyIHNob3VsZCBub3QgYWNjZXNzIHRoZSBwcm90ZWN0ZWQg
ZGF0YS4iPw0KT3IgbWF5IGJlIGNvbWJpbmUgaXQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmEuDQoN
Cj4gKyAqDQo+ICsgKiBJbiBjYXNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUganVz
dC1yZWFkIGRhdGEgd2FzDQo+ICsgKiBjb25zaXN0ZW50IGFuZCB0aGUgc2V0IG9mIGF0b21pYyBh
bmQgbm9uLWF0b21pYyBsb2FkIG9wZXJhdGlvbnMNCj4gKyAqIHBlcmZvcm1lZCBiZXR3ZWVuIHJ0
ZV9zZXFsb2NrX3JlYWRfbG9jaygpIGFuZA0KPiArICogcnRlX3NlcWxvY2tfcmVhZF90cnl1bmxv
Y2soKSB3ZXJlIGF0b21pYywgYXMgYSB3aG9sZS4NCj4gKyAqDQo+ICsgKiBJbiBjYXNlIHJ0ZV9z
ZXFsb2NrX3JlYWRfdHJ5dW5sb2NrKCkgcmV0dXJucyBmYWxzZSwgdGhlIGRhdGEgd2FzDQo+ICsg
KiBtb2RpZmllZCBhcyBpdCB3YXMgYmVpbmcgcmVhZCBhbmQgbWF5IGJlIGluY29uc2lzdGVudCwg
YW5kIHRodXMNCj4gKyAqIHNob3VsZCBiZSBkaXNjYXJkZWQuIFRoZSBAcCBiZWdpbl9zbiBpcyB1
cGRhdGVkIHdpdGggdGhlDQo+ICsgKiBub3ctY3VycmVudCBzZXF1ZW5jZSBudW1iZXIuDQpNYXkg
YmUNCiIgVGhlIEBwIGJlZ2luX3NuIGlzIHVwZGF0ZWQgd2l0aCB0aGUgc2VxdWVuY2UgbnVtYmVy
IGZvciB0aGUgbmV4dCBjcml0aWNhbCBzZWN0aW9uLiINCg0KPiArICoNCj4gKyAqIEBwYXJhbSBz
ZXFsb2NrDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgc2VxbG9jay4NCj4gKyAqIEBwYXJhbSBi
ZWdpbl9zbg0KPiArICogICBUaGUgc2VxbG9jayBzZXF1ZW5jZSBudW1iZXIgcmV0dXJuZWQgYnkN
Cj4gKyAqICAgcnRlX3NlcWxvY2tfcmVhZF9sb2NrKCkgKHBvdGVudGlhbGx5IHVwZGF0ZWQgaW4g
c3Vic2VxdWVudA0KPiArICogICBydGVfc2VxbG9ja19yZWFkX3RyeXVubG9jaygpIGNhbGxzKSBm
b3IgdGhpcyBjcml0aWNhbCBzZWN0aW9uLg0KPiArICogQHJldHVybg0KPiArICogICB0cnVlIG9y
IGZhbHNlLCBpZiB0aGUganVzdC1yZWFkIHNlcWxvY2stcHJvdGVjdGVkIGRhdGEgd2FzIGNvbnNp
c3RlbnQNCj4gKyAqICAgb3IgaW5jb25zaXN0ZW50LCByZXNwZWN0aXZlbHksIGF0IHRoZSB0aW1l
IGl0IHdhcyByZWFkLg0KdHJ1ZSAtIGp1c3QgcmVhZCBwcm90ZWN0ZWQgZGF0YSB3YXMgY29uc2lz
dGVudA0KZmFsc2UgLSBqdXN0IHJlYWQgcHJvdGVjdGVkIGRhdGEgd2FzIGluY29uc2lzdGVudA0K
DQo+ICsgKg0KPiArICogQHNlZSBydGVfc2VxbG9ja19yZWFkX2xvY2soKQ0KPiArICovDQo+ICtf
X3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgYm9vbA0KPiArcnRlX3NlcWxvY2tf
cmVhZF90cnl1bmxvY2soY29uc3QgcnRlX3NlcWxvY2tfdCAqc2VxbG9jaywgdWludDMyX3QNCj4g
KypiZWdpbl9zbikgew0KPiArCXVpbnQzMl90IGVuZF9zbjsNCj4gKw0KPiArCS8qIG1ha2Ugc3Vy
ZSB0aGUgZGF0YSBsb2FkcyBoYXBwZW5zIGJlZm9yZSB0aGUgc24gbG9hZCAqLw0KPiArCXJ0ZV9h
dG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX0FDUVVJUkUpOw0KPiArDQo+ICsJZW5kX3NuID0g
X19hdG9taWNfbG9hZF9uKCZzZXFsb2NrLT5zbiwgX19BVE9NSUNfUkVMQVhFRCk7DQo+ICsNCj4g
KwlpZiAodW5saWtlbHkoZW5kX3NuICYgMSB8fCAqYmVnaW5fc24gIT0gZW5kX3NuKSkgew0KPiAr
CQkqYmVnaW5fc24gPSBlbmRfc247DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4g
KwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBCZWdpbiBhIHdyaXRlLXNp
ZGUgY3JpdGljYWwgc2VjdGlvbi4NCj4gKyAqDQo+ICsgKiBBIGNhbGwgdG8gdGhpcyBmdW5jdGlv
biBhY3F1aXJlcyB0aGUgd3JpdGUgbG9jayBhc3NvY2lhdGVkIEBwDQo+ICsgKiBzZXFsb2NrLCBh
bmQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIHdyaXRlLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4N
Cj4gKyAqDQo+ICsgKiBBZnRlciBoYXZpbmcgY2FsbGVkIHRoaXMgZnVuY3Rpb24sIHRoZSBjYWxs
ZXIgbWF5IGdvIG9uIHRvIG1vZGlmeQ0KPiArICogKGJvdGggcmVhZCBhbmQgd3JpdGUpIHRoZSBw
cm90ZWN0ZWQgZGF0YSwgaW4gYW4gYXRvbWljIG9yDQo+ICsgKiBub24tYXRvbWljIG1hbm5lci4N
Cj4gKyAqDQo+ICsgKiBBZnRlciB0aGUgbmVjZXNzYXJ5IHVwZGF0ZXMgaGF2ZSBiZWVuIHBlcmZv
cm1lZCwgdGhlIGFwcGxpY2F0aW9uDQo+ICsgKiBjYWxscyBydGVfc2VxbG9ja193cml0ZV91bmxv
Y2soKS4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwcmVlbXB0aW9uLXNhZmUg
aW4gdGhlIHNlbnNlIHRoYXQgcHJlZW1wdGlvbg0KPiArICogb2YgdGhlIGNhbGxpbmcgdGhyZWFk
IG1heSBibG9jayByZWFkZXIgcHJvZ3Jlc3MgdW50aWwgdGhlIHdyaXRlcg0KPiArICogdGhyZWFk
IGlzIHJlc2NoZWR1bGVkLg0KPiArICoNCj4gKyAqIFVubGlrZSBydGVfc2VxbG9ja19yZWFkX2xv
Y2soKSwgZWFjaCBjYWxsIG1hZGUgdG8NCj4gKyAqIHJ0ZV9zZXFsb2NrX3dyaXRlX2xvY2soKSBt
dXN0IGJlIG1hdGNoZWQgd2l0aCBhbiB1bmxvY2sgY2FsbC4NCj4gKyAqDQo+ICsgKiBAcGFyYW0g
c2VxbG9jaw0KPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHNlcWxvY2suDQo+ICsgKg0KPiArICog
QHNlZSBydGVfc2VxbG9ja193cml0ZV91bmxvY2soKQ0KPiArICovDQo+ICtfX3J0ZV9leHBlcmlt
ZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArcnRlX3NlcWxvY2tfd3JpdGVfbG9jayhy
dGVfc2VxbG9ja190ICpzZXFsb2NrKSB7DQo+ICsJdWludDMyX3Qgc247DQo+ICsNCj4gKwkvKiB0
byBzeW5jaHJvbml6ZSB3aXRoIG90aGVyIHdyaXRlcnMgKi8NCj4gKwlydGVfc3BpbmxvY2tfbG9j
aygmc2VxbG9jay0+bG9jayk7DQo+ICsNCj4gKwlzbiA9IHNlcWxvY2stPnNuICsgMTsNClRoZSBs
b2FkIG9mIHNlcWxvY2stPnNuIGNvdWxkIHVzZSBfX2F0b21pY19sb2FkX24gdG8gYmUgY29uc2lz
dGVudC4NCg0KPiArDQo+ICsJX19hdG9taWNfc3RvcmVfbigmc2VxbG9jay0+c24sIHNuLCBfX0FU
T01JQ19SRUxBWEVEKTsNCj4gKw0KPiArCS8qIF9fQVRPTUlDX1JFTEVBU0UgdG8gcHJldmVudCBz
dG9yZXMgYWZ0ZXIgKGluIHByb2dyYW0gb3JkZXIpDQo+ICsJICogZnJvbSBoYXBwZW5pbmcgYmVm
b3JlIHRoZSBzbiBzdG9yZS4NCj4gKwkgKi8NCj4gKwlydGVfYXRvbWljX3RocmVhZF9mZW5jZShf
X0FUT01JQ19SRUxFQVNFKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBFbmQgYSB3cml0ZS1z
aWRlIGNyaXRpY2FsIHNlY3Rpb24uDQo+ICsgKg0KPiArICogQSBjYWxsIHRvIHRoaXMgZnVuY3Rp
b24gbWFya3MgdGhlIGVuZCBvZiB0aGUgd3JpdGUtc2lkZSBjcml0aWNhbA0KPiArICogc2VjdGlv
biwgZm9yIEBwIHNlcWxvY2suIEFmdGVyIHRoaXMgY2FsbCBoYXMgYmVlbiBtYWRlLCB0aGUNCj4g
K3Byb3RlY3RlZA0KPiArICogZGF0YSBtYXkgbm8gbG9uZ2VyIGJlIG1vZGlmaWVkLg0KPiArICoN
Cj4gKyAqIEBwYXJhbSBzZXFsb2NrDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgc2VxbG9jay4N
Cj4gKyAqDQo+ICsgKiBAc2VlIHJ0ZV9zZXFsb2NrX3dyaXRlX2xvY2soKQ0KPiArICovDQo+ICtf
X3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArcnRlX3NlcWxvY2tf
d3JpdGVfdW5sb2NrKHJ0ZV9zZXFsb2NrX3QgKnNlcWxvY2spIHsNCj4gKwl1aW50MzJfdCBzbjsN
Cj4gKw0KPiArCXNuID0gc2VxbG9jay0+c24gKyAxOw0KU2FtZSBoZXJlLCB0aGUgbG9hZCBvZiBz
ZXFsb2NrLT5zbiBjb3VsZCB1c2UgX19hdG9taWNfbG9hZF9uDQoNCj4gKw0KPiArCS8qIHN5bmNo
cm9uaXplcy13aXRoIHRoZSBsb2FkIGFjcXVpcmUgaW4gcnRlX3NlcWxvY2tfcmVhZF9sb2NrKCkg
Ki8NCj4gKwlfX2F0b21pY19zdG9yZV9uKCZzZXFsb2NrLT5zbiwgc24sIF9fQVRPTUlDX1JFTEVB
U0UpOw0KPiArDQo+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmc2VxbG9jay0+bG9jayk7DQo+ICt9
DQo+ICsNCj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiArfQ0KPiArI2VuZGlmDQo+ICsNCj4gKyNl
bmRpZiAgLyogX1JURV9TRVFMT0NLX0hfICovDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL3ZlcnNp
b24ubWFwIGIvbGliL2VhbC92ZXJzaW9uLm1hcCBpbmRleA0KPiBiNTNlZWIzMGQ3Li40YTlkMGVk
ODk5IDEwMDY0NA0KPiAtLS0gYS9saWIvZWFsL3ZlcnNpb24ubWFwDQo+ICsrKyBiL2xpYi9lYWwv
dmVyc2lvbi5tYXANCj4gQEAgLTQyMCw2ICs0MjAsOSBAQCBFWFBFUklNRU5UQUwgew0KPiAgCXJ0
ZV9pbnRyX2luc3RhbmNlX2ZyZWU7DQo+ICAJcnRlX2ludHJfdHlwZV9nZXQ7DQo+ICAJcnRlX2lu
dHJfdHlwZV9zZXQ7DQo+ICsNCj4gKwkjIGFkZGVkIGluIDIyLjA3DQo+ICsJcnRlX3NlcWxvY2tf
aW5pdDsNCj4gIH07DQo+IA0KPiAgSU5URVJOQUwgew0KPiAtLQ0KPiAyLjI1LjENCg0K