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 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 ; 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 To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , "dev@dpdk.org" CC: "thomas@monjalon.net" , David Marchand , "onar.olsen@ericsson.com" , nd , "konstantin.ananyev@intel.com" , "mb@smartsharesystems.com" , "stephen@networkplumber.org" , Ola Liljedahl , nd 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: References: <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: 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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