From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010047.outbound.protection.outlook.com [52.101.61.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBBA5224AFB; Mon, 6 Oct 2025 17:56:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.47 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759773388; cv=fail; b=KVSmbR74yxue2odbWb8ILwGkVjiafI4ctQgg346+GsKFLkyhtJONsYrlZTx/XOSeHPojoj2DGknK/UX9cav8SDrAaPrDUK9bRuZrdIaiE8e3HC1NGCB6oAvw3/87S3HktA/bax5UxBWlGXSBVKRCT0mcGDP46gdNqssMfyeFV0g= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759773388; c=relaxed/simple; bh=YxxdKvVHSMmnmSiX+ujDKUWQ3LYAJEselnoi7xTxbDs=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=BLqTKLIGOon4tWoHVHXmo4NxjRlshwObkCtGviJyVgQRjA2C8jjZuIaee42Lddq5JzaX5bfHr4Rr5CMVNP4tiuX8cBIWBbTkwRflKj6S6POTcU/c+n/7iS/8FoGiaqrmIcOXaa3awtdb1WqcOH5dBxaRjrQ7gyC9DsdWGhEMP34= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=hBFwcImI; arc=fail smtp.client-ip=52.101.61.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="hBFwcImI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xelUPfujn2tNmPKbwbG8PYWIqk7fXOrHFzTBJAPRKekTTh6E9Je0CrBg2N2k2Pbk4IsUIfB4yL2fLiZZf8gEXnR/7D9GSL3MaQr+0/kwiYYr4y5OwA4nKeKqx3LlBr3mrrF1cvS6wptGJiow/wuU2fwmNAwEBIw1/96a2hFlvxQpVLk3j1IHXNa2nwrLWty6nbla6UD5E9zNBO/kmkyBQw2Im+B7sQ1M/kjcgl9Hfae+Ycq7hfKxTBgMZZ+R1+8qaNBp4BrmrbRkCzPqMOCTRDsTbwNN/KYLBsg+fSo1rAZfxF7btFOlFHX2jKqqjRD/zl19EZtZaVQSRHMiYtzzqQ== 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=YxxdKvVHSMmnmSiX+ujDKUWQ3LYAJEselnoi7xTxbDs=; b=RU1aI7wuiDXEuMwcnOFqqUW/mXdnN4/noFKrf+FlErNPVD76mVvDNVI9AV6QvgNVaQG75K40+YMC21wnmDnIFr3LexMv/T113OoxPw/ba0Huw7ucenECqJIYrKs17py1NpBMubhhxqlGgATyW97nQu7ZoEmxiKmg+Jx2uQMpfYS3to9E2SdutohivOx/RuDCZz88Lsv8cuWuY64TrhZGyqwqWSEctgFzWTjxe+RaiPFjGXxo0saTu1KIEB8GZDnKO2P8c4t3Sz2dizewYozydPjyGWta1PL1rphS/0rG3C6WBq2A/EfSvOoZRv1Djx+inglmVsQZcwuM5gUE4wd4LQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YxxdKvVHSMmnmSiX+ujDKUWQ3LYAJEselnoi7xTxbDs=; b=hBFwcImIOxdCa7yzJ6BVMXFM8jKG3oJCmvHviWkbUt1QDDUDBSOVC1KSyKYsfbzh8wqtpjrOLM1htsJf8gKz+UdMD+m9GbynZpAqBZQfFmkmjhNaJ6bkJGzDoR5FuaNdRO4i+G8c05/OCQgB2iDuV3AZXWG4VtAP7xSZkJozM+LtQb1rWsNs0BVkZbtEYZ9jT3oi1iVbPOm2zGEcVeJzL24r+rexgupso412ixt6qxFkg06L0a9hT2/hew/4pACiWlRsxY6EptsohSpdccuAFt4CAbRq63T9e+vkGEzQScDH+JVn5Dl59m0kDrMc+7ygdhOlbn0FDPmvmsPrMQIvJw== Received: from DM4PR12MB5182.namprd12.prod.outlook.com (2603:10b6:5:395::24) by SJ0PR12MB6806.namprd12.prod.outlook.com (2603:10b6:a03:478::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9182.20; Mon, 6 Oct 2025 17:56:11 +0000 Received: from DM4PR12MB5182.namprd12.prod.outlook.com ([fe80::e73f:7d5f:7a1a:f363]) by DM4PR12MB5182.namprd12.prod.outlook.com ([fe80::e73f:7d5f:7a1a:f363%7]) with mapi id 15.20.9182.017; Mon, 6 Oct 2025 17:56:11 +0000 From: Edwin Peer To: Joel Fernandes CC: "linux-kernel@vger.kernel.org" , "rust-for-linux@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "dakr@kernel.org" , Alexandre Courbot , Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , "bjorn3_gh@protonmail.com" , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Timur Tabi , "joel@joelfernandes.org" , Elle Rhumsaa , Yury Norov , Daniel Almeida , Andrea Righi , "nouveau@lists.freedesktop.org" Subject: Re: [PATCH v6 1/5] nova-core: bitfield: Move bitfield-specific code from register! into new macro Thread-Topic: [PATCH v6 1/5] nova-core: bitfield: Move bitfield-specific code from register! into new macro Thread-Index: AQHcNH0sRhydU4lhnEeS9zI7wU7+CbS1a/gA Date: Mon, 6 Oct 2025 17:56:11 +0000 Message-ID: References: <20251003154748.1687160-1-joelagnelf@nvidia.com> <20251003154748.1687160-2-joelagnelf@nvidia.com> In-Reply-To: <20251003154748.1687160-2-joelagnelf@nvidia.com> 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=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR12MB5182:EE_|SJ0PR12MB6806:EE_ x-ms-office365-filtering-correlation-id: 7e67033d-c37e-4576-d8c2-08de0501a284 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?RG9tWnZscTRVM2dSeHh6V1hlNlhWUi9KeXJkSWk4bjN2cmJLaVRYWXRFZHRU?= =?utf-8?B?TjE4bFBHN0dqQVNBc05qWUw3cnp6YzByL2JHeHZjSkVtaHZXOFZ2V0dNRGRn?= =?utf-8?B?dTUrR3h0N0RkSzZSKzFMamxIelhUclBVNDRpeVJDZndYT1hDbjRmNmhwZ21T?= =?utf-8?B?QlVoTUxyRHBDc1U5MWxkOWI5QVVuNVgveFBTTTMxMG9wTTJtYktzc1MyY3NL?= =?utf-8?B?Q05wMDhIOE1qS2JBSGlpaU5xMFplZk1mSU9CYXhDRmpXeFNmZlpFbEZnNmlE?= =?utf-8?B?RGowV09BcUMyWnIzVGs1ZCtGRHhaOUZRaEc5K3E3TzFnVEM5WVZoTHdOYjNL?= =?utf-8?B?U2RadFdGU245ZlVqN3dJK250Ly8vM0VmYitMbHcybWNvbUE1SmgvckMwOFoz?= =?utf-8?B?bE9Ub1Awcm9jaEloeFk2RXNUZDF5TkdRWUd0UVJIbTRMaDczU1V1OUlDemV5?= =?utf-8?B?aGRCS1AxdTVPazlGYkhJbnNWZndjWGxoWWsrK3pnbE1ZRkxYaEc2TlNvTFJ3?= =?utf-8?B?L3dIUjMweW81R21UVEFGelZXWGR1RjkrTGhNWTFySWgwWGF3OUwwbzY5Q04r?= =?utf-8?B?SFhFQkdHcFdSNUk3eU1vdTFaVHY2RDJ2YkR6eDVCSjdnMmZmZkZlb3REWTYr?= =?utf-8?B?RVUwTWttRUE1L1NVMHZCR3dlSWN5R3RCcjVrc2gvTS8xcHhUMWZlQzRRUkRF?= =?utf-8?B?UWJhd21JSzZyUmJxMW9Hd1Y2cjdUYVB2Y01vVkVaSHlHaDFSL1lVMmUvZGQ2?= =?utf-8?B?T1l4V1FjTTdwVXBydjNPTHhIaXM5VlZ4TXFucytyODJ6cnFWeHc1azZHdzNG?= =?utf-8?B?bE90Zk5rbE1PanpLUUw2UlBPR1QxWjgxUlFPUWdmYTlXYnk5Q2hMZVg5Y0k5?= =?utf-8?B?Q1NqREFoYUN3NzZvb0VZVnVVYXNIeHNiMCtTc1FmSjN3QXUzNWliNkFZU0Ft?= =?utf-8?B?R1dtNVZrdXJYWVp1TWJ1SEZZd1ZOZXpoelo2NTV3L0FOYm1hUVN0M29QTG9M?= =?utf-8?B?UTVPZ2pSQ3FhUVpuSGNZRVUyUmFQcFNYNHNsU2RyZVZCSEhGV3dyZGsyelFI?= =?utf-8?B?anczQUVRMS82VFlaN2dBU3oweGtTdnRyaEdSVWZFWHJoYmZiS3hFM2I5NFJw?= =?utf-8?B?UmNiMC94RjJPMUh6UU1ueC9PVUxXcmVuOTJNU0NoYzZhOVkwNWRCS3k2MFZ1?= =?utf-8?B?U1hvU1cwOUlvNmNhbEhPQkZMS2EySmkzdVZudzMzSEFLcUE0b1ZncDl5YS81?= =?utf-8?B?ZHBtMnM0d0NIcmFBL0pBUUczaWxRT1hrTERzc1QrMUhHd1RWdlFXejJKMHcz?= =?utf-8?B?elVsaitCTEljUnE0N0RrZmFzRXBycHVuTStCd2lOdENhUW1TMGxmeXZIVmUz?= =?utf-8?B?RGZjRWtodXhnakQxNy9zaGw2ekNHL3UwWHh1cmZzb2dpb2ZDVEY4cHMrNGlS?= =?utf-8?B?WDR5VEloK2M5d1B2YlVjUzNrS2VGQXp2VjFUejF4VmRDQk5ML3Z1dGdubXN1?= =?utf-8?B?U090ZXl4eUQwZGdTTy8ybkZzRDUxV2pxbWE1SUdWMW1TYU1SeStpdEdiUmFG?= =?utf-8?B?RFdISzdMK3pNMGt3R2RKeE9tZE1kZFN0WnU0aGZJdDlLclo0WG1MaXFIQ29C?= =?utf-8?B?RmRrWDdJckhSMnpnZGxqQys2NFRNSHQwU1FqbmE2b0lObHNQVFFsSVl0bjJZ?= =?utf-8?B?OWxkOUVqMlRURzRuUVcrMk9lQzRtS2l4cWlqNlU1elBVRCs2d1JJWmRkRmJC?= =?utf-8?B?NmQrcmdQVXNRdVk3ZTJ1V1ZLdDJBeEhOT2VwSUdVNm9qb2o2VnFnKytHRGZV?= =?utf-8?B?TjdaaXJVZ29QcjVlSzNrcWZtVGNQRGlLMWNSOHFXMGMzczA5ME9PWXp5RkZF?= =?utf-8?B?SkFJRHNUVmtlZkt2eVNUdStlOUR6MlU1aTNRK29IMlVRalNKbFN6NXdjOXdy?= =?utf-8?B?aGpmQXhkTFdlV1lhUzFCSVlCOE4wR0hpejk1dDB1S0IxdFJhSVFmMnlWRUkr?= =?utf-8?B?Qjk5cDlKS0tVUGdxeHg1d3p6Wk9ZNDlWcms0T3ZtQTFNbStRVEZ6MGtmSzJ0?= =?utf-8?Q?FIODT1?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5182.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Tm5TckhVYU9ZYzBIU3pnOWRCbUZyZnZGOWpoYWIxczBzeGN0cEdhTkQ1NHkz?= =?utf-8?B?djlUclRjcVlkS2JWZjJqZklOUWpUMFRCSUxDYXJ3MnQ3RWRMSXJDWGR2Z2Ns?= =?utf-8?B?T1UrUkhhUkMrUkkwb3k2bjkxVk9adEI2V3lwTFl4RklnQU43OGVrRkhPaDV3?= =?utf-8?B?REIvNWtFb0ZsS0dFU29QRTBhZ0RvZEZjMHNwUVUwYlpLZFNwSVV1eGxNNjRu?= =?utf-8?B?Qk1PcTM3VlBpdG0rN2kyMXpydm5Vb09PalpQeFdIQjFuK2o0YW95WkFMQzlR?= =?utf-8?B?YTNzTDFyRGRUM0tPQ0h1VDNPWVM5NTUxTm1RWkxDYldWOUUyYURmcDEySG1F?= =?utf-8?B?WlMzbEIwS1VCNFRSTElLYzZvVGQ5dGgrdWUzenNuTVRLVnkycHdmZk45N3M4?= =?utf-8?B?UHlnZkZ0VGs2TTByR2Zrb1dMTXRBRURPdkR5cjhDMmhuem1maWlGQVNVQmdi?= =?utf-8?B?clQ0WXowRndlbHRIbWd4Z0pHUm5EQjJTd002OUhlUmxFSzZWeTJOa3RQYUNO?= =?utf-8?B?ZXRacWRKNDcwTXp2V0hUUEM2OHM4K25XVzNXUExuNGFaL0xldVU4VjZxbnJK?= =?utf-8?B?K2o4dzE3cFYzK1VkMk1uMW03V2NVWjRleXVjN1hGcVdVVlQwcHl3N2dncmVM?= =?utf-8?B?Q0tWNC9EeGRKMTNqZUFjUHZvWXRWdmFRUkxZSGFZV3dneno5VjJ4c2FxMmph?= =?utf-8?B?MVRzZUJ0eDl5YnZMNmRzeit0SjYvU1JZSUNVdmI4d2FQS0hzK3owT1llK2xn?= =?utf-8?B?Ymt2K0Zvc3ZIYmgrN1NmOW9saVBsZ3dObWErUitEMVRpaUlITHRhNTBSY0ti?= =?utf-8?B?WDU2WjczaUtkOW1pSUFUYndnb2VIY3JqaVNxYU95VnlFbHl1TUlwZS8rNjc3?= =?utf-8?B?SFUxeFBZY3pHYmZRamdJUS9nNHIxMlMyRGRpNkFDcG9lMVRZaHUyWlBsa2RZ?= =?utf-8?B?OFpXSW44bXdvdzVQcGw4cWVjRi9YWmZRUlgwU3JEUUJBWkF1VzFieEU4WmRM?= =?utf-8?B?SmNMRlc3U0lDK0JHbDA2eXR3RjFkV3hlWC9yS0RWWGZPK2Y2c2dIR25TWklk?= =?utf-8?B?bDh3Qjk5a2RNbXJwOHJxdzVEaXByYTdTSDM2dGU4WkREOW9zakdxVHIvK0Va?= =?utf-8?B?S2ltRkY4WDdDSHRwY1krcTFBTThkMXlUcE1tc2F6YmQwSmhIQ2tQenlJZFYz?= =?utf-8?B?Y0orUWgwYTNRZEJLT0JOMmsySHlhWE5qRUFta2lBMXY5TWh0M2lsbzB6TFNk?= =?utf-8?B?enkyMEhVUElrdmlFQzAxdmg0YXpjZWZYOWNmZk1GUXdHeXJSUkNnRmhxenlU?= =?utf-8?B?NmpmTjNGSkZ1N0ZxWjEwQlZySXdUU3JZUXlBZVNGMGI4bEkwNTBVSFZtTEhN?= =?utf-8?B?OFVBWEo3VHk4V1RYaGEvOWJ1WS94SU9LKzVpOEJncTMya0UyZnlFTndqaUp3?= =?utf-8?B?bHR3RFRZaUVnVEVaczlWV3c0c3h1aXZFNUVKRWlHaHMzekJYWUx6UUo0cXdo?= =?utf-8?B?OTZuSGd5R3JaNDNhTEF2MkoyWXZrZjZjOElZbzBpclNxSUpOaUlTaDhqb3dy?= =?utf-8?B?REN0WURPQ3JhYUZIRURBVHJlQ0Nwak5EcDRQd3Z6ODMrc2RYc0dqNDNXbGxC?= =?utf-8?B?enRWOHZ1b0FuM1BjdE5DUXFtclF6RHp3NW9yV1NYMGUxMHZReGRrUWlYYlo1?= =?utf-8?B?T2htSVVFTmJkdEhhS2E5Mys5ZXZGOEJaQmxRa3BZV1pBRjBTSFdVN2dhUjVI?= =?utf-8?B?S25MVGxvaFd1ekorVEV3ejZ0V0NzUUZ5QzFWNWN6ZkptTzFHTnY1cU9xOTJD?= =?utf-8?B?TEhkZ1lsdVRFbzVCZG5jMXllUGkzV2pGenY0WG5mM2x1T2p2MjFXSkNFUzI3?= =?utf-8?B?T1gvVDRTVDZ2Y3FTb2Z4YXZOU2hWM2IwbEVtWktjMWd3NENzdDBPMVJ5Ujh1?= =?utf-8?B?cnNueFFLcXZGMmFlbG13b1pTN2VSdjBPSFJ5Q2xQaXhHODNhUnpwMWRHclBw?= =?utf-8?B?RmYrT0xxbkJVRkVhNVF5di93cUwyRFhuNStnQW1DWjhiSmtkYnpmR05MZzFh?= =?utf-8?B?bkNDWWFGdUNzV3ZLbUJaZWJPdzVtL1R2bFArWEx1UHdYK3J5a2dIN1FjSnFV?= =?utf-8?Q?tO2wt+nR63fORB7OoUve8S64P?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5182.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e67033d-c37e-4576-d8c2-08de0501a284 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Oct 2025 17:56:11.2321 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yX5HgG/yfdjayE72iBXEajJYNqWbNfDKMMxjglfEBZHcUyvhUYma76fcam0ewfCshE6u5H2xS1F6B3eg7rLTHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6806 SGkgSm9lbCwNCg0KSSByZWNvZ25pemUgdGhhdCB0aGlzIHBhdGNoIGlzIGludGVuZGVkIHRvIGJl IGEgY29kZSBtb3ZlLCBidXQgSeKAmW0gc2VlaW5nIHRoaXMgY29kZSBmb3IgdGhlIGZpcnN0IHRp bWUsIGhlbmNlIHRoZSBjb21tZW50cyByZWdhcmRpbmcgdGhlIGNvbnRlbnQgYmVsb3cuDQoNCk9u IE9jdCAzLCAyMDI1LCBhdCA4OjQ34oCvQU0sIEpvZWwgRmVybmFuZGVzIDxqb2VsYWduZWxmQG52 aWRpYS5jb20+IHdyb3RlOg0KDQo+IFRoZSBiaXRmaWVsZC1zcGVjaWZpYyBpbnRvIG5ldyBtYWNy by4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gZGVmaW5lDQo+IHN0cnVjdHMgd2l0aCBiaXRmaWVsZHMs IHNpbWlsYXIgdG8gQyBsYW5ndWFnZS4NCj4gDQo+IFJldmlld2VkLWJ5OiBFbGxlIFJodW1zYWEg PGVsbGVAd2VhdGhlcmVkLXN0ZWVsLmRldj4NCj4gUmV2aWV3ZWQtYnk6IEFsZXhhbmRyZSBDb3Vy Ym90IDxhY291cmJvdEBudmlkaWEuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBKb2VsIEZlcm5hbmRl cyA8am9lbGFnbmVsZkBudmlkaWEuY29tPg0KPiAtLS0NCj4gZHJpdmVycy9ncHUvbm92YS1jb3Jl L2JpdGZpZWxkLnJzICAgIHwgMzE2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiBkcml2 ZXJzL2dwdS9ub3ZhLWNvcmUvbm92YV9jb3JlLnJzICAgfCAgIDMgKw0KPiBkcml2ZXJzL2dwdS9u b3ZhLWNvcmUvcmVncy9tYWNyb3MucnMgfCAyNTkgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAz IGZpbGVzIGNoYW5nZWQsIDMyOSBpbnNlcnRpb25zKCspLCAyNDkgZGVsZXRpb25zKC0pDQo+IGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9ub3ZhLWNvcmUvYml0ZmllbGQucnMNCj4gDQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ub3ZhLWNvcmUvYml0ZmllbGQucnMgYi9kcml2ZXJz L2dwdS9ub3ZhLWNvcmUvYml0ZmllbGQucnMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMDAwLi5kZDBlZjIwMTZmZjgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9k cml2ZXJzL2dwdS9ub3ZhLWNvcmUvYml0ZmllbGQucnMNCj4gQEAgLTAsMCArMSwzMTYgQEANCj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ICsNCj4gKy8vISBCaXRmaWVs ZCBsaWJyYXJ5IGZvciBSdXN0IHN0cnVjdHVyZXMNCj4gKy8vIQ0KPiArLy8hIFN1cHBvcnQgZm9y IGRlZmluaW5nIGJpdGZpZWxkcyBpbiBSdXN0IHN0cnVjdHVyZXMuIEFsc28gdXNlZCBieSB0aGUg W2ByZWdpc3RlciFgXSBtYWNyby4NCj4gKw0KPiArLy8vIERlZmluZXMgYSBzdHJ1Y3Qgd2l0aCBh Y2Nlc3NvcnMgdG8gYWNjZXNzIGJpdHMgd2l0aGluIGFuIGlubmVyIHVuc2lnbmVkIGludGVnZXIu DQo+ICsvLy8NCj4gKy8vLyAjIFN5bnRheA0KPiArLy8vDQo+ICsvLy8gYGBgcnVzdA0KPiArLy8v IHVzZSBub3ZhX2NvcmU6OmJpdGZpZWxkOw0KPiArLy8vDQo+ICsvLy8gI1tkZXJpdmUoRGVidWcs IENsb25lLCBDb3B5LCBEZWZhdWx0KV0NCj4gKy8vLyBlbnVtIE1vZGUgew0KPiArLy8vICAgICAj W2RlZmF1bHRdDQo+ICsvLy8gICAgIExvdyA9IDAsDQo+ICsvLy8gICAgIEhpZ2ggPSAxLA0KPiAr Ly8vICAgICBBdXRvID0gMiwNCj4gKy8vLyB9DQo+ICsvLy8NCj4gKy8vLyBpbXBsIFRyeUZyb208 dTg+IGZvciBNb2RlIHsNCj4gKy8vLyAgICAgdHlwZSBFcnJvciA9IHU4Ow0KPiArLy8vICAgICBm biB0cnlfZnJvbSh2YWx1ZTogdTgpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnJvcj4gew0KPiAr Ly8vICAgICAgICAgbWF0Y2ggdmFsdWUgew0KPiArLy8vICAgICAgICAgICAgIDAgPT4gT2soTW9k ZTo6TG93KSwNCj4gKy8vLyAgICAgICAgICAgICAxID0+IE9rKE1vZGU6OkhpZ2gpLA0KPiArLy8v ICAgICAgICAgICAgIDIgPT4gT2soTW9kZTo6QXV0byksDQo+ICsvLy8gICAgICAgICAgICAgXyA9 PiBFcnIodmFsdWUpLA0KPiArLy8vICAgICAgICAgfQ0KPiArLy8vICAgICB9DQo+ICsvLy8gfQ0K PiArLy8vDQo+ICsvLy8gaW1wbCBGcm9tPE1vZGU+IGZvciB1MzIgew0KPiArLy8vICAgICBmbiBm cm9tKG1vZGU6IE1vZGUpIC0+IHUzMiB7DQo+ICsvLy8gICAgICAgICBtb2RlIGFzIHUzMg0KPiAr Ly8vICAgICB9DQo+ICsvLy8gfQ0KDQpJcyB0aGVyZSBhIHJlYXNvbiBmb3IgdGhlIGFzeW1tZXRy eSBpbiB0aGUgRnJvbSBjb252ZXJzaW9ucyBmb3IgdGhlIHVzZXIgZmFjaW5nIGVudW0gdHlwZT8g SGVyZSB3ZSBoYXZlIHU4IGluIHRoZSBvbmUgZGlyZWN0aW9uIGFuZCB1MzIgaW4gdGhlIG90aGVy LiBJdCBsb29rcyBsaWtlIHRoZSBsYXR0ZXIgaXMgcmVxdWlyZWQgYnkgdGhlIHVzZSBvZiB1MzI6 ZnJvbSgpIGluIHRoZSBzZXRfPGZpZWxkPigpIGFjY2Vzc29yLCBidXQgdGhlIG1hY3JvIHdvdWxk IGJlIG1vcmUgZXJnb25vbWljIGlmIGl0IGhhbmRsZWQgdGhlIG5lY2Vzc2FyeSB1cGNhc3QgY29u dmVyc2lvbnMgaW50ZXJuYWxseSB0b28uDQoNCj4gKy8vLw0KPiArLy8vICNbZGVyaXZlKERlYnVn LCBDbG9uZSwgQ29weSwgRGVmYXVsdCldDQo+ICsvLy8gZW51bSBTdGF0ZSB7DQo+ICsvLy8gICAg ICNbZGVmYXVsdF0NCj4gKy8vLyAgICAgSW5hY3RpdmUgPSAwLA0KPiArLy8vICAgICBBY3RpdmUg PSAxLA0KPiArLy8vIH0NCj4gKy8vLw0KPiArLy8vIGltcGwgRnJvbTxib29sPiBmb3IgU3RhdGUg ew0KPiArLy8vICAgICBmbiBmcm9tKHZhbHVlOiBib29sKSAtPiBTZWxmIHsNCj4gKy8vLyAgICAg ICAgIGlmIHZhbHVlIHsgU3RhdGU6OkFjdGl2ZSB9IGVsc2UgeyBTdGF0ZTo6SW5hY3RpdmUgfQ0K PiArLy8vICAgICB9DQo+ICsvLy8gfQ0KPiArLy8vDQo+ICsvLy8gaW1wbCBGcm9tPFN0YXRlPiBm b3IgdTMyIHsNCj4gKy8vLyAgICAgZm4gZnJvbShzdGF0ZTogU3RhdGUpIC0+IHUzMiB7DQo+ICsv Ly8gICAgICAgICBzdGF0ZSBhcyB1MzINCj4gKy8vLyAgICAgfQ0KPiArLy8vIH0NCg0KU2ltaWxh cmx5IGZvciBib29sIHZzIHUzMi4NCg0KPiArLy8vDQo+ICsvLy8gYml0ZmllbGQhIHsNCj4gKy8v LyAgICAgc3RydWN0IENvbnRyb2xSZWcgew0KPiArLy8vICAgICAgICAgMzowIG1vZGUgYXMgdTgg Pz0+IE1vZGU7DQo+ICsvLy8gICAgICAgICA3Ojcgc3RhdGUgYXMgYm9vbCA9PiBTdGF0ZTsNCj4g Ky8vLyAgICAgfQ0KPiArLy8vIH0NCj4gKy8vLyBgYGANCj4gKy8vLw0KPiArLy8vIFRoaXMgZ2Vu ZXJhdGVzIGEgc3RydWN0IHdpdGg6DQo+ICsvLy8gLSBGaWVsZCBhY2Nlc3NvcnM6IGBtb2RlKClg LCBgc3RhdGUoKWAsIGV0Yy4NCj4gKy8vLyAtIEZpZWxkIHNldHRlcnM6IGBzZXRfbW9kZSgpYCwg YHNldF9zdGF0ZSgpYCwgZXRjLiAoc3VwcG9ydHMgY2hhaW5pbmcgd2l0aCBidWlsZGVyIHBhdHRl cm4pLg0KPiArLy8vIC0gRGVidWcgYW5kIERlZmF1bHQgaW1wbGVtZW50YXRpb25zLg0KPiArLy8v DQo+ICsvLy8gRmllbGRzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6DQo+ICsvLy8NCj4gKy8vLyAt IGBhcyA8dHlwZT5gIHNpbXBseSByZXR1cm5zIHRoZSBmaWVsZCB2YWx1ZSBjYXN0ZWQgdG8gPHR5 cGU+LCB0eXBpY2FsbHkgYHUzMmAsIGB1MTZgLCBgdThgIG9yDQo+ICsvLy8gICBgYm9vbGAuIE5v dGUgdGhhdCBgYm9vbGAgZmllbGRzIG11c3QgaGF2ZSBhIHJhbmdlIG9mIDEgYml0Lg0KPiArLy8v IC0gYGFzIDx0eXBlPiA9PiA8aW50b190eXBlPmAgY2FsbHMgYDxpbnRvX3R5cGU+YCdzIGBGcm9t Ojo8PHR5cGU+PmAgaW1wbGVtZW50YXRpb24gYW5kIHJldHVybnMNCj4gKy8vLyAgIHRoZSByZXN1 bHQuDQo+ICsvLy8gLSBgYXMgPHR5cGU+ID89PiA8dHJ5X2ludG9fdHlwZT5gIGNhbGxzIGA8dHJ5 X2ludG9fdHlwZT5gJ3MgYFRyeUZyb206Ojw8dHlwZT4+YCBpbXBsZW1lbnRhdGlvbg0KPiArLy8v ICAgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4gVGhpcyBpcyB1c2VmdWwgd2l0aCBmaWVsZHMgZm9y IHdoaWNoIG5vdCBhbGwgdmFsdWVzIGFyZSB2YWxpZC4NCj4gK21hY3JvX3J1bGVzISBiaXRmaWVs ZCB7DQo+ICsgICAgLy8gTWFpbiBlbnRyeSBwb2ludCAtIGRlZmluZXMgdGhlIGJpdGZpZWxkIHN0 cnVjdCB3aXRoIGZpZWxkcw0KPiArICAgIChzdHJ1Y3QgJG5hbWU6aWRlbnQgJCgsICRjb21tZW50 OmxpdGVyYWwpPyB7ICQoJGZpZWxkczp0dCkqIH0pID0+IHsNCj4gKyAgICAgICAgYml0ZmllbGQh KEBjb3JlICRuYW1lICQoLCAkY29tbWVudCk/IHsgJCgkZmllbGRzKSogfSk7DQo+ICsgICAgfTsN Cj4gKw0KPiArICAgIC8vIEFsbCBydWxlcyBiZWxvdyBhcmUgaGVscGVycy4NCj4gKw0KPiArICAg IC8vIERlZmluZXMgdGhlIHdyYXBwZXIgYCRuYW1lYCB0eXBlLCBhcyB3ZWxsIGFzIGl0cyByZWxl dmFudCBpbXBsZW1lbnRhdGlvbnMgKGBEZWJ1Z2AsDQo+ICsgICAgLy8gYERlZmF1bHRgLCBgQml0 T3JgLCBhbmQgY29udmVyc2lvbiB0byB0aGUgdmFsdWUgdHlwZSkgYW5kIGZpZWxkIGFjY2Vzc29y IG1ldGhvZHMuDQo+ICsgICAgKEBjb3JlICRuYW1lOmlkZW50ICQoLCAkY29tbWVudDpsaXRlcmFs KT8geyAkKCRmaWVsZHM6dHQpKiB9KSA9PiB7DQo+ICsgICAgICAgICQoDQo+ICsgICAgICAgICNb ZG9jPSRjb21tZW50XQ0KPiArICAgICAgICApPw0KPiArICAgICAgICAjW3JlcHIodHJhbnNwYXJl bnQpXQ0KPiArICAgICAgICAjW2Rlcml2ZShDbG9uZSwgQ29weSldDQo+ICsgICAgICAgIHB1Yihj cmF0ZSkgc3RydWN0ICRuYW1lKHUzMik7DQo+ICsNCj4gKyAgICAgICAgaW1wbCA6OmNvcmU6Om9w czo6Qml0T3IgZm9yICRuYW1lIHsNCj4gKyAgICAgICAgICAgIHR5cGUgT3V0cHV0ID0gU2VsZjsN Cj4gKw0KPiArICAgICAgICAgICAgZm4gYml0b3Ioc2VsZiwgcmhzOiBTZWxmKSAtPiBTZWxmOjpP dXRwdXQgew0KPiArICAgICAgICAgICAgICAgIFNlbGYoc2VsZi4wIHwgcmhzLjApDQo+ICsgICAg ICAgICAgICB9DQo+ICsgICAgICAgIH0NCg0KV2h5IGRvIHdlIGltcGxlbWVudCBCaXRPciBmb3Ig dGhlIHJlZ2lzdGVyIHR5cGU/IFNlZW1zIGEgYml0IG91dCBvZiBwbGFjZSBmb3IgYW4gYWJzdHJh Y3Rpb24gdGhhdCBpcyB0cnlpbmcgdG8gcHJvdmlkZSBhIHNhZmVyIGZpZWxkIGxldmVsIGFjY2Vz cyBBUEkuDQoNCj4gKw0KPiArICAgICAgICBpbXBsIDo6Y29yZTo6Y29udmVydDo6RnJvbTwkbmFt ZT4gZm9yIHUzMiB7DQo+ICsgICAgICAgICAgICBmbiBmcm9tKHZhbDogJG5hbWUpIC0+IHUzMiB7 DQo+ICsgICAgICAgICAgICAgICAgdmFsLjANCj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAgICAg fQ0KPiArDQo+ICsgICAgICAgIGJpdGZpZWxkIShAZmllbGRzX2Rpc3BhdGNoZXIgJG5hbWUgeyAk KCRmaWVsZHMpKiB9KTsNCj4gKyAgICB9Ow0KPiArDQo+ICsgICAgLy8gQ2FwdHVyZXMgdGhlIGZp ZWxkcyBhbmQgcGFzc2VzIHRoZW0gdG8gYWxsIHRoZSBpbXBsZW1lbnRlcnMgdGhhdCByZXF1aXJl IGZpZWxkIGluZm9ybWF0aW9uLg0KPiArICAgIC8vDQo+ICsgICAgLy8gVXNlZCB0byBzaW1wbGlm eSB0aGUgbWF0Y2hpbmcgcnVsZXMgZm9yIGltcGxlbWVudGVycywgc28gdGhleSBkb24ndCBuZWVk IHRvIG1hdGNoIHRoZSBlbnRpcmUNCj4gKyAgICAvLyBjb21wbGV4IGZpZWxkcyBydWxlIGV2ZW4g dGhvdWdoIHRoZXkgb25seSBtYWtlIHVzZSBvZiBwYXJ0IG9mIGl0Lg0KPiArICAgIChAZmllbGRz X2Rpc3BhdGNoZXIgJG5hbWU6aWRlbnQgew0KPiArICAgICAgICAkKCRoaTp0dDokbG86dHQgJGZp ZWxkOmlkZW50IGFzICR0eXBlOnR0DQo+ICsgICAgICAgICAgICAkKD89PiAkdHJ5X2ludG9fdHlw ZTp0eSk/DQo+ICsgICAgICAgICAgICAkKD0+ICRpbnRvX3R5cGU6dHkpPw0KPiArICAgICAgICAg ICAgJCgsICRjb21tZW50OmxpdGVyYWwpPw0KPiArICAgICAgICA7DQo+ICsgICAgICAgICkqDQo+ ICsgICAgfQ0KPiArICAgICkgPT4gew0KPiArICAgICAgICBiaXRmaWVsZCEoQGZpZWxkX2FjY2Vz c29ycyAkbmFtZSB7DQo+ICsgICAgICAgICAgICAkKA0KPiArICAgICAgICAgICAgICAgICRoaTok bG8gJGZpZWxkIGFzICR0eXBlDQo+ICsgICAgICAgICAgICAgICAgJCg/PT4gJHRyeV9pbnRvX3R5 cGUpPw0KPiArICAgICAgICAgICAgICAgICQoPT4gJGludG9fdHlwZSk/DQo+ICsgICAgICAgICAg ICAgICAgJCgsICRjb21tZW50KT8NCj4gKyAgICAgICAgICAgIDsNCj4gKyAgICAgICAgICAgICkq DQo+ICsgICAgICAgIH0pOw0KPiArICAgICAgICBiaXRmaWVsZCEoQGRlYnVnICRuYW1lIHsgJCgk ZmllbGQ7KSogfSk7DQo+ICsgICAgICAgIGJpdGZpZWxkIShAZGVmYXVsdCAkbmFtZSB7ICQoJGZp ZWxkOykqIH0pOw0KPiArICAgIH07DQo+ICsNCj4gKyAgICAvLyBEZWZpbmVzIGFsbCB0aGUgZmll bGQgZ2V0dGVyL3NldHRlciBtZXRob2RzIGZvciBgJG5hbWVgLg0KPiArICAgICgNCj4gKyAgICAg ICAgQGZpZWxkX2FjY2Vzc29ycyAkbmFtZTppZGVudCB7DQo+ICsgICAgICAgICQoJGhpOnR0OiRs bzp0dCAkZmllbGQ6aWRlbnQgYXMgJHR5cGU6dHQNCj4gKyAgICAgICAgICAgICQoPz0+ICR0cnlf aW50b190eXBlOnR5KT8NCj4gKyAgICAgICAgICAgICQoPT4gJGludG9fdHlwZTp0eSk/DQo+ICsg ICAgICAgICAgICAkKCwgJGNvbW1lbnQ6bGl0ZXJhbCk/DQo+ICsgICAgICAgIDsNCj4gKyAgICAg ICAgKSoNCj4gKyAgICAgICAgfQ0KPiArICAgICkgPT4gew0KPiArICAgICAgICAkKA0KPiArICAg ICAgICAgICAgYml0ZmllbGQhKEBjaGVja19maWVsZF9ib3VuZHMgJGhpOiRsbyAkZmllbGQgYXMg JHR5cGUpOw0KPiArICAgICAgICApKg0KPiArDQo+ICsgICAgICAgICNbYWxsb3coZGVhZF9jb2Rl KV0NCj4gKyAgICAgICAgaW1wbCAkbmFtZSB7DQo+ICsgICAgICAgICAgICAkKA0KPiArICAgICAg ICAgICAgYml0ZmllbGQhKEBmaWVsZF9hY2Nlc3NvciAkbmFtZSAkaGk6JGxvICRmaWVsZCBhcyAk dHlwZQ0KPiArICAgICAgICAgICAgICAgICQoPz0+ICR0cnlfaW50b190eXBlKT8NCj4gKyAgICAg ICAgICAgICAgICAkKD0+ICRpbnRvX3R5cGUpPw0KPiArICAgICAgICAgICAgICAgICQoLCAkY29t bWVudCk/DQo+ICsgICAgICAgICAgICAgICAgOw0KPiArICAgICAgICAgICAgKTsNCj4gKyAgICAg ICAgICAgICkqDQo+ICsgICAgICAgIH0NCj4gKyAgICB9Ow0KPiArDQo+ICsgICAgLy8gQm9vbGVh biBmaWVsZHMgbXVzdCBoYXZlIGAkaGkgPT0gJGxvYC4NCj4gKyAgICAoQGNoZWNrX2ZpZWxkX2Jv dW5kcyAkaGk6dHQ6JGxvOnR0ICRmaWVsZDppZGVudCBhcyBib29sKSA9PiB7DQo+ICsgICAgICAg ICNbYWxsb3coY2xpcHB5OjplcV9vcCldDQo+ICsgICAgICAgIGNvbnN0IF86ICgpID0gew0KPiAr ICAgICAgICAgICAgOjprZXJuZWw6OmJ1aWxkX2Fzc2VydCEoDQo+ICsgICAgICAgICAgICAgICAg JGhpID09ICRsbywNCj4gKyAgICAgICAgICAgICAgICBjb25jYXQhKCJib29sZWFuIGZpZWxkIGAi LCBzdHJpbmdpZnkhKCRmaWVsZCksICJgIGNvdmVycyBtb3JlIHRoYW4gb25lIGJpdCIpDQo+ICsg ICAgICAgICAgICApOw0KPiArICAgICAgICB9Ow0KPiArICAgIH07DQo+ICsNCj4gKyAgICAvLyBO b24tYm9vbGVhbiBmaWVsZHMgbXVzdCBoYXZlIGAkaGkgPj0gJGxvYC4NCj4gKyAgICAoQGNoZWNr X2ZpZWxkX2JvdW5kcyAkaGk6dHQ6JGxvOnR0ICRmaWVsZDppZGVudCBhcyAkdHlwZTp0dCkgPT4g ew0KPiArICAgICAgICAjW2FsbG93KGNsaXBweTo6ZXFfb3ApXQ0KPiArICAgICAgICBjb25zdCBf OiAoKSA9IHsNCj4gKyAgICAgICAgICAgIDo6a2VybmVsOjpidWlsZF9hc3NlcnQhKA0KPiArICAg ICAgICAgICAgICAgICRoaSA+PSAkbG8sDQo+ICsgICAgICAgICAgICAgICAgY29uY2F0ISgiZmll bGQgYCIsIHN0cmluZ2lmeSEoJGZpZWxkKSwgImAncyBNU0IgaXMgc21hbGxlciB0aGFuIGl0cyBM U0IiKQ0KPiArICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgfTsNCj4gKyAgICB9Ow0KDQpJdCB3 b3VsZCBhbHNvIGJlIGdvb2QgdG8gZmluZCBhIHdheSB0byBjYXRjaCBvdmVybGFwcGluZyBmaWVs ZCBkZWZpbml0aW9ucy4NCg0KPiArDQo+ICsgICAgLy8gQ2F0Y2hlcyBmaWVsZHMgZGVmaW5lZCBh cyBgYm9vbGAgYW5kIGNvbnZlcnQgdGhlbSBpbnRvIGEgYm9vbGVhbiB2YWx1ZS4NCj4gKyAgICAo DQo+ICsgICAgICAgIEBmaWVsZF9hY2Nlc3NvciAkbmFtZTppZGVudCAkaGk6dHQ6JGxvOnR0ICRm aWVsZDppZGVudCBhcyBib29sID0+ICRpbnRvX3R5cGU6dHkNCj4gKyAgICAgICAgICAgICQoLCAk Y29tbWVudDpsaXRlcmFsKT87DQo+ICsgICAgKSA9PiB7DQo+ICsgICAgICAgIGJpdGZpZWxkISgN Cj4gKyAgICAgICAgICAgIEBsZWFmX2FjY2Vzc29yICRuYW1lICRoaTokbG8gJGZpZWxkDQo+ICsg ICAgICAgICAgICB7IHxmfCA8JGludG9fdHlwZT46OmZyb20oaWYgZiAhPSAwIHsgdHJ1ZSB9IGVs c2UgeyBmYWxzZSB9KSB9DQoNCmlmIGYgIT0gMCB7IHRydWUgfSBlbHNlIHtmYWxzZX0gPT4gZiAh PSAwDQoNCj4gKyAgICAgICAgICAgICRpbnRvX3R5cGUgPT4gJGludG9fdHlwZSAkKCwgJGNvbW1l bnQpPzsNCj4gKyAgICAgICAgKTsNCj4gKyAgICB9Ow0KPiArDQo+ICsgICAgLy8gU2hvcnRjdXQg Zm9yIGZpZWxkcyBkZWZpbmVkIGFzIGBib29sYCB3aXRob3V0IHRoZSBgPT5gIHN5bnRheC4NCj4g KyAgICAoDQo+ICsgICAgICAgIEBmaWVsZF9hY2Nlc3NvciAkbmFtZTppZGVudCAkaGk6dHQ6JGxv OnR0ICRmaWVsZDppZGVudCBhcyBib29sICQoLCAkY29tbWVudDpsaXRlcmFsKT87DQo+ICsgICAg KSA9PiB7DQo+ICsgICAgICAgIGJpdGZpZWxkIShAZmllbGRfYWNjZXNzb3IgJG5hbWUgJGhpOiRs byAkZmllbGQgYXMgYm9vbCA9PiBib29sICQoLCAkY29tbWVudCk/Oyk7DQo+ICsgICAgfTsNCj4g Kw0KPiArICAgIC8vIENhdGNoZXMgdGhlIGA/PT5gIHN5bnRheCBmb3Igbm9uLWJvb2xlYW4gZmll bGRzLg0KPiArICAgICgNCj4gKyAgICAgICAgQGZpZWxkX2FjY2Vzc29yICRuYW1lOmlkZW50ICRo aTp0dDokbG86dHQgJGZpZWxkOmlkZW50IGFzICR0eXBlOnR0ID89PiAkdHJ5X2ludG9fdHlwZTp0 eQ0KPiArICAgICAgICAgICAgJCgsICRjb21tZW50OmxpdGVyYWwpPzsNCj4gKyAgICApID0+IHsN Cj4gKyAgICAgICAgYml0ZmllbGQhKEBsZWFmX2FjY2Vzc29yICRuYW1lICRoaTokbG8gJGZpZWxk DQo+ICsgICAgICAgICAgICB7IHxmfCA8JHRyeV9pbnRvX3R5cGU+Ojp0cnlfZnJvbShmIGFzICR0 eXBlKSB9ICR0cnlfaW50b190eXBlID0+DQo+ICsgICAgICAgICAgICA6OmNvcmU6OnJlc3VsdDo6 UmVzdWx0PA0KPiArICAgICAgICAgICAgICAgICR0cnlfaW50b190eXBlLA0KPiArICAgICAgICAg ICAgICAgIDwkdHJ5X2ludG9fdHlwZSBhcyA6OmNvcmU6OmNvbnZlcnQ6OlRyeUZyb208JHR5cGU+ Pjo6RXJyb3INCj4gKyAgICAgICAgICAgID4NCj4gKyAgICAgICAgICAgICQoLCAkY29tbWVudCk/ Oyk7DQo+ICsgICAgfTsNCj4gKw0KPiArICAgIC8vIENhdGNoZXMgdGhlIGA9PmAgc3ludGF4IGZv ciBub24tYm9vbGVhbiBmaWVsZHMuDQo+ICsgICAgKA0KPiArICAgICAgICBAZmllbGRfYWNjZXNz b3IgJG5hbWU6aWRlbnQgJGhpOnR0OiRsbzp0dCAkZmllbGQ6aWRlbnQgYXMgJHR5cGU6dHQgPT4g JGludG9fdHlwZTp0eQ0KPiArICAgICAgICAgICAgJCgsICRjb21tZW50OmxpdGVyYWwpPzsNCj4g KyAgICApID0+IHsNCj4gKyAgICAgICAgYml0ZmllbGQhKEBsZWFmX2FjY2Vzc29yICRuYW1lICRo aTokbG8gJGZpZWxkDQo+ICsgICAgICAgICAgICB7IHxmfCA8JGludG9fdHlwZT46OmZyb20oZiBh cyAkdHlwZSkgfSAkaW50b190eXBlID0+ICRpbnRvX3R5cGUgJCgsICRjb21tZW50KT87KTsNCj4g KyAgICB9Ow0KPiArDQo+ICsgICAgLy8gU2hvcnRjdXQgZm9yIG5vbi1ib29sZWFuIGZpZWxkcyBk ZWZpbmVkIHdpdGhvdXQgdGhlIGA9PmAgb3IgYD89PmAgc3ludGF4Lg0KPiArICAgICgNCj4gKyAg ICAgICAgQGZpZWxkX2FjY2Vzc29yICRuYW1lOmlkZW50ICRoaTp0dDokbG86dHQgJGZpZWxkOmlk ZW50IGFzICR0eXBlOnR0DQo+ICsgICAgICAgICAgICAkKCwgJGNvbW1lbnQ6bGl0ZXJhbCk/Ow0K PiArICAgICkgPT4gew0KPiArICAgICAgICBiaXRmaWVsZCEoQGZpZWxkX2FjY2Vzc29yICRuYW1l ICRoaTokbG8gJGZpZWxkIGFzICR0eXBlID0+ICR0eXBlICQoLCAkY29tbWVudCk/Oyk7DQo+ICsg ICAgfTsNCg0KSSByZWFsaXplIHRoYXQgdGhlIGFkZGl0aW9uYWwgRnJvbSBjb252ZXJzaW9uIGFu ZCBjbG9zdXJlIGludm9jYXRpb24gdGhpcyBwcm9kdWNlcyB3aWxsIGxpa2VseSBiZSBvcHRpbWl6 ZWQgb3V0IHdoZW4gY29tcGlsaW5nIGF0IGEgc3VpdGFibGUgb3B0aW1pemF0aW9uIGxldmVsLCBi dXQgdGhpcyBpcyBpbmVmZmljaWVudCBmb3IgcmVnaXN0ZXIgYWNjZXNzZXMgaW4gbm9uLW9wdGlt aXplZCBkZWJ1ZyBidWlsZHM6DQoNCmh0dHBzOi8vZ29kYm9sdC5vcmcvei9ZY1RHaDl4b3INCg0K SXQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHRvIGhhdmUgdGhlIG1hY3Jv IGNvbnN0cnVjdCBhcHByb3ByaWF0ZSB3cmFwcGVycyBmb3IgYW4gaW5saW5lIGFjY2Vzc29yIGZ1 bmN0aW9uIG9ubHkgd2hlbiB0aGUgY29udmVyc2lvbnMgYXJlIG5lZWRlZCwgd2hpY2ggd291bGQg Y29tcGlsZSB0byBzb21ldGhpbmcgbW9yZSBlZmZpY2llbnQgYnkgY29uc3RydWN0aW9uLg0KDQo+ ICsNCj4gKyAgICAvLyBHZW5lcmF0ZXMgdGhlIGFjY2Vzc29yIG1ldGhvZHMgZm9yIGEgc2luZ2xl IGZpZWxkLg0KPiArICAgICgNCj4gKyAgICAgICAgQGxlYWZfYWNjZXNzb3IgJG5hbWU6aWRlbnQg JGhpOnR0OiRsbzp0dCAkZmllbGQ6aWRlbnQNCj4gKyAgICAgICAgICAgIHsgJHByb2Nlc3M6ZXhw ciB9ICR0b190eXBlOnR5ID0+ICRyZXNfdHlwZTp0eSAkKCwgJGNvbW1lbnQ6bGl0ZXJhbCk/Ow0K PiArICAgICkgPT4gew0KPiArICAgICAgICA6Omtlcm5lbDo6bWFjcm9zOjpwYXN0ZSEoDQo+ICsg ICAgICAgIGNvbnN0IFs8JGZpZWxkOnVwcGVyIF9SQU5HRT5dOiA6OmNvcmU6Om9wczo6UmFuZ2VJ bmNsdXNpdmU8dTg+ID0gJGxvLi49JGhpOw0KPiArICAgICAgICBjb25zdCBbPCRmaWVsZDp1cHBl ciBfTUFTSz5dOiB1MzIgPSAoKCgoMSA8PCAkaGkpIC0gMSkgPDwgMSkgKyAxKSAtICgoMSA8PCAk bG8pIC0gMSk7DQoNCkkgbm90ZSB0aGF0IGdlbm1hc2ssIGludHJvZHVjZWQgaW4gYSBzdWJzZXF1 ZW50IHBhdGNoLCBhbHNvIHVzZXMgdGhpcyBjb25zdHJ1Y3Rpb24gKGJhc2VkIG9uIHRoZSByYW5n ZSwgd2hpY2ggZG9lcyBub3QgYXBwZWFyIHRvIGJlIHVzZWQgYnkgY3VycmVudCBjb2RlKS4NCg0K VXNpbmcgY29uc3QgTUFTSzogdTMyID0gKDEgPDwgJGhpIC0gJGxvICsgMSkgLSAxIDw8ICRsbyB3 b3VsZCBiZSBtb3JlIGNsZWFyLg0KDQpJdCBjYW4gYWxzbyBiZSBhIGdvb2QgaWRlYSB0byBmaXJz dCByaWdodCBzaGlmdCB0aGUgdmFsdWUgaW4gdGhlIGFjY2Vzc29yIGFuZCB0aGVuIHV0aWxpemUg YW4gdW5zaGlmdGVkIG1hc2ssIHNpbmNlIHNtYWxsZXIgY29uc3RhbnQgbWFza3MgY2FuIGxlbmQg dGhlbXNlbHZlcyB0byBtb3JlIGVmZmljaWVudCBpbW1lZGlhdGUgaW5zdHJ1Y3Rpb25zIChhcyBp biB0aGUgZ29kYm9sdCBsaW5rIGFib3ZlKS4NCg0KPiArICAgICAgICBjb25zdCBbPCRmaWVsZDp1 cHBlciBfU0hJRlQ+XTogdTMyID0gU2VsZjo6WzwkZmllbGQ6dXBwZXIgX01BU0s+XS50cmFpbGlu Z196ZXJvcygpOw0KDQpjb25zdCBTSElGVDogdTMyID0gJGxvOw0KDQo+ICsgICAgICAgICk7DQo+ ICsNCj4gKyAgICAgICAgJCgNCj4gKyAgICAgICAgI1tkb2M9IlJldHVybnMgdGhlIHZhbHVlIG9m IHRoaXMgZmllbGQ6Il0NCj4gKyAgICAgICAgI1tkb2M9JGNvbW1lbnRdDQo+ICsgICAgICAgICk/ DQo+ICsgICAgICAgICNbaW5saW5lKGFsd2F5cyldDQo+ICsgICAgICAgIHB1YihjcmF0ZSkgZm4g JGZpZWxkKHNlbGYpIC0+ICRyZXNfdHlwZSB7DQo+ICsgICAgICAgICAgICA6Omtlcm5lbDo6bWFj cm9zOjpwYXN0ZSEoDQo+ICsgICAgICAgICAgICBjb25zdCBNQVNLOiB1MzIgPSAkbmFtZTo6Wzwk ZmllbGQ6dXBwZXIgX01BU0s+XTsNCj4gKyAgICAgICAgICAgIGNvbnN0IFNISUZUOiB1MzIgPSAk bmFtZTo6WzwkZmllbGQ6dXBwZXIgX1NISUZUPl07DQo+ICsgICAgICAgICAgICApOw0KPiArICAg ICAgICAgICAgbGV0IGZpZWxkID0gKChzZWxmLjAgJiBNQVNLKSA+PiBTSElGVCk7DQo+ICsNCj4g KyAgICAgICAgICAgICRwcm9jZXNzKGZpZWxkKQ0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAg ICAgOjprZXJuZWw6Om1hY3Jvczo6cGFzdGUhKA0KPiArICAgICAgICAkKA0KPiArICAgICAgICAj W2RvYz0iU2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZDoiXQ0KPiArICAgICAgICAjW2RvYz0k Y29tbWVudF0NCj4gKyAgICAgICAgKT8NCj4gKyAgICAgICAgI1tpbmxpbmUoYWx3YXlzKV0NCj4g KyAgICAgICAgcHViKGNyYXRlKSBmbiBbPHNldF8gJGZpZWxkPl0obXV0IHNlbGYsIHZhbHVlOiAk dG9fdHlwZSkgLT4gU2VsZiB7DQo+ICsgICAgICAgICAgICBjb25zdCBNQVNLOiB1MzIgPSAkbmFt ZTo6WzwkZmllbGQ6dXBwZXIgX01BU0s+XTsNCj4gKyAgICAgICAgICAgIGNvbnN0IFNISUZUOiB1 MzIgPSAkbmFtZTo6WzwkZmllbGQ6dXBwZXIgX1NISUZUPl07DQo+ICsgICAgICAgICAgICBsZXQg dmFsdWUgPSAodTMyOjpmcm9tKHZhbHVlKSA8PCBTSElGVCkgJiBNQVNLOw0KPiArICAgICAgICAg ICAgc2VsZi4wID0gKHNlbGYuMCAmICFNQVNLKSB8IHZhbHVlOw0KPiArDQo+ICsgICAgICAgICAg ICBzZWxmDQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgKTsNCj4gKyAgICB9Ow0KPiArDQo+ICsg ICAgLy8gR2VuZXJhdGVzIHRoZSBgRGVidWdgIGltcGxlbWVudGF0aW9uIGZvciBgJG5hbWVgLg0K PiArICAgIChAZGVidWcgJG5hbWU6aWRlbnQgeyAkKCRmaWVsZDppZGVudDspKiB9KSA9PiB7DQo+ ICsgICAgICAgIGltcGwgOjpjb3JlOjpmbXQ6OkRlYnVnIGZvciAkbmFtZSB7DQo+ICsgICAgICAg ICAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgOjpjb3JlOjpmbXQ6OkZvcm1hdHRlcjwnXz4pIC0+ IDo6Y29yZTo6Zm10OjpSZXN1bHQgew0KPiArICAgICAgICAgICAgICAgIGYuZGVidWdfc3RydWN0 KHN0cmluZ2lmeSEoJG5hbWUpKQ0KPiArICAgICAgICAgICAgICAgICAgICAuZmllbGQoIjxyYXc+ IiwgJmZvcm1hdF9hcmdzISgiezojeH0iLCAmc2VsZi4wKSkNCj4gKyAgICAgICAgICAgICAgICAk KA0KPiArICAgICAgICAgICAgICAgICAgICAuZmllbGQoc3RyaW5naWZ5ISgkZmllbGQpLCAmc2Vs Zi4kZmllbGQoKSkNCj4gKyAgICAgICAgICAgICAgICApKg0KPiArICAgICAgICAgICAgICAgICAg ICAuZmluaXNoKCkNCj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgIH07DQo+ ICsNCj4gKyAgICAvLyBHZW5lcmF0ZXMgdGhlIGBEZWZhdWx0YCBpbXBsZW1lbnRhdGlvbiBmb3Ig YCRuYW1lYC4NCj4gKyAgICAoQGRlZmF1bHQgJG5hbWU6aWRlbnQgeyAkKCRmaWVsZDppZGVudDsp KiB9KSA9PiB7DQo+ICsgICAgICAgIC8vLyBSZXR1cm5zIGEgdmFsdWUgZm9yIHRoZSBiaXRmaWVs ZCB3aGVyZSBhbGwgZmllbGRzIGFyZSBzZXQgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZS4NCj4gKyAg ICAgICAgaW1wbCA6OmNvcmU6OmRlZmF1bHQ6OkRlZmF1bHQgZm9yICRuYW1lIHsNCj4gKyAgICAg ICAgICAgIGZuIGRlZmF1bHQoKSAtPiBTZWxmIHsNCj4gKyAgICAgICAgICAgICAgICAjW2FsbG93 KHVudXNlZF9tdXQpXQ0KPiArICAgICAgICAgICAgICAgIGxldCBtdXQgdmFsdWUgPSBTZWxmKERl ZmF1bHQ6OmRlZmF1bHQoKSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICA6Omtlcm5lbDo6bWFj cm9zOjpwYXN0ZSEoDQo+ICsgICAgICAgICAgICAgICAgJCgNCj4gKyAgICAgICAgICAgICAgICB2 YWx1ZS5bPHNldF8gJGZpZWxkPl0oRGVmYXVsdDo6ZGVmYXVsdCgpKTsNCj4gKyAgICAgICAgICAg ICAgICApKg0KPiArICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICB2 YWx1ZQ0KPiArICAgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgfTsNCj4gK30NCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L25vdmEtY29yZS9ub3ZhX2NvcmUucnMgYi9kcml2ZXJz L2dwdS9ub3ZhLWNvcmUvbm92YV9jb3JlLnJzDQo+IGluZGV4IGZmZmNhZWUyMjQ5Zi4uMTEyMjc3 Yzc5MjFlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9ub3ZhLWNvcmUvbm92YV9jb3JlLnJz DQo+ICsrKyBiL2RyaXZlcnMvZ3B1L25vdmEtY29yZS9ub3ZhX2NvcmUucnMNCj4gQEAgLTIsNiAr Miw5IEBADQo+IA0KPiAvLyEgTm92YSBDb3JlIEdQVSBEcml2ZXINCj4gDQo+ICsjW21hY3JvX3Vz ZV0NCj4gK21vZCBiaXRmaWVsZDsNCj4gKw0KPiBtb2QgZG1hOw0KPiBtb2QgZHJpdmVyOw0KPiBt b2QgZmFsY29uOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvbm92YS1jb3JlL3JlZ3MvbWFj cm9zLnJzIGIvZHJpdmVycy9ncHUvbm92YS1jb3JlL3JlZ3MvbWFjcm9zLnJzDQo+IGluZGV4IDc1 NGMxNGVlN2Y0MC4uOTQ1ZDE1YTJjNTI5IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9ub3Zh LWNvcmUvcmVncy9tYWNyb3MucnMNCj4gKysrIGIvZHJpdmVycy9ncHUvbm92YS1jb3JlL3JlZ3Mv bWFjcm9zLnJzDQo+IEBAIC04LDcgKzgsOCBAQA0KPiAvLyENCj4gLy8hIFRoZSBgcmVnaXN0ZXIh YCBtYWNybyBpbiB0aGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnR1aXRpdmUgYW5kIHJlYWRhYmxl IHN5bnRheCBmb3IgZGVmaW5pbmcgYQ0KPiAvLyEgZGVkaWNhdGVkIHR5cGUgZm9yIGVhY2ggcmVn aXN0ZXIuIEVhY2ggc3VjaCB0eXBlIGNvbWVzIHdpdGggaXRzIG93biBmaWVsZCBhY2Nlc3NvcnMg dGhhdCBjYW4NCj4gLS8vISByZXR1cm4gYW4gZXJyb3IgaWYgYSBmaWVsZCdzIHZhbHVlIGlzIGlu dmFsaWQuDQo+ICsvLyEgcmV0dXJuIGFuIGVycm9yIGlmIGEgZmllbGQncyB2YWx1ZSBpcyBpbnZh bGlkLiBQbGVhc2UgbG9vayBhdCB0aGUgW2BiaXRmaWVsZGBdIG1hY3JvIGZvciB0aGUNCj4gKy8v ISBjb21wbGV0ZSBzeW50YXggb2YgZmllbGRzIGRlZmluaXRpb25zLg0KPiANCj4gLy8vIFRyYWl0 IHByb3ZpZGluZyBhIGJhc2UgYWRkcmVzcyB0byBiZSBhZGRlZCB0byB0aGUgb2Zmc2V0IG9mIGEg cmVsYXRpdmUgcmVnaXN0ZXIgdG8gb2J0YWluDQo+IC8vLyBpdHMgYWN0dWFsIG9mZnNldC4NCj4g QEAgLTU0LDE1ICs1NSw2IEBAIHB1YihjcmF0ZSkgdHJhaXQgUmVnaXN0ZXJCYXNlPFQ+IHsNCj4g Ly8vIEJPT1RfMDo6YWx0ZXIoJmJhciwgfHJ8IHIuc2V0X21ham9yX3JldmlzaW9uKDMpLnNldF9t aW5vcl9yZXZpc2lvbigxMCkpOw0KPiAvLy8gYGBgDQo+IC8vLw0KPiAtLy8vIEZpZWxkcyBhcmUg ZGVmaW5lZCBhcyBmb2xsb3dzOg0KPiAtLy8vDQo+IC0vLy8gLSBgYXMgPHR5cGU+YCBzaW1wbHkg cmV0dXJucyB0aGUgZmllbGQgdmFsdWUgY2FzdGVkIHRvIDx0eXBlPiwgdHlwaWNhbGx5IGB1MzJg LCBgdTE2YCwgYHU4YCBvcg0KPiAtLy8vICAgYGJvb2xgLiBOb3RlIHRoYXQgYGJvb2xgIGZpZWxk cyBtdXN0IGhhdmUgYSByYW5nZSBvZiAxIGJpdC4NCj4gLS8vLyAtIGBhcyA8dHlwZT4gPT4gPGlu dG9fdHlwZT5gIGNhbGxzIGA8aW50b190eXBlPmAncyBgRnJvbTo6PDx0eXBlPj5gIGltcGxlbWVu dGF0aW9uIGFuZCByZXR1cm5zDQo+IC0vLy8gICB0aGUgcmVzdWx0Lg0KPiAtLy8vIC0gYGFzIDx0 eXBlPiA/PT4gPHRyeV9pbnRvX3R5cGU+YCBjYWxscyBgPHRyeV9pbnRvX3R5cGU+YCdzIGBUcnlG cm9tOjo8PHR5cGU+PmAgaW1wbGVtZW50YXRpb24NCj4gLS8vLyAgIGFuZCByZXR1cm5zIHRoZSBy ZXN1bHQuIFRoaXMgaXMgdXNlZnVsIHdpdGggZmllbGRzIGZvciB3aGljaCBub3QgYWxsIHZhbHVl cyBhcmUgdmFsaWQuDQo+IC0vLy8NCj4gLy8vIFRoZSBkb2N1bWVudGF0aW9uIHN0cmluZ3MgYXJl IG9wdGlvbmFsLiBJZiBwcmVzZW50LCB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHR5cGUncw0K PiAvLy8gZGVmaW5pdGlvbiwgb3IgdGhlIGZpZWxkIGdldHRlciBhbmQgc2V0dGVyIG1ldGhvZHMg dGhleSBhcmUgYXR0YWNoZWQgdG8uDQo+IC8vLw0KPiBAQCAtMjg0LDI1ICsyNzYsMjUgQEAgcHVi KGNyYXRlKSB0cmFpdCBSZWdpc3RlckJhc2U8VD4gew0KPiBtYWNyb19ydWxlcyEgcmVnaXN0ZXIg ew0KPiAgICAgLy8gQ3JlYXRlcyBhIHJlZ2lzdGVyIGF0IGEgZml4ZWQgb2Zmc2V0IG9mIHRoZSBN TUlPIHNwYWNlLg0KPiAgICAgKCRuYW1lOmlkZW50IEAgJG9mZnNldDpsaXRlcmFsICQoLCAkY29t bWVudDpsaXRlcmFsKT8geyAkKCRmaWVsZHM6dHQpKiB9ICkgPT4gew0KPiAtICAgICAgICByZWdp c3RlciEoQGNvcmUgJG5hbWUgJCgsICRjb21tZW50KT8geyAkKCRmaWVsZHMpKiB9ICk7DQo+ICsg ICAgICAgIGJpdGZpZWxkIShzdHJ1Y3QgJG5hbWUgJCgsICRjb21tZW50KT8geyAkKCRmaWVsZHMp KiB9ICk7DQo+ICAgICAgICAgcmVnaXN0ZXIhKEBpb19maXhlZCAkbmFtZSBAICRvZmZzZXQpOw0K PiAgICAgfTsNCj4gDQo+ICAgICAvLyBDcmVhdGVzIGFuIGFsaWFzIHJlZ2lzdGVyIG9mIGZpeGVk IG9mZnNldCByZWdpc3RlciBgYWxpYXNgIHdpdGggaXRzIG93biBmaWVsZHMuDQo+ICAgICAoJG5h bWU6aWRlbnQgPT4gJGFsaWFzOmlkZW50ICQoLCAkY29tbWVudDpsaXRlcmFsKT8geyAkKCRmaWVs ZHM6dHQpKiB9ICkgPT4gew0KPiAtICAgICAgICByZWdpc3RlciEoQGNvcmUgJG5hbWUgJCgsICRj b21tZW50KT8geyAkKCRmaWVsZHMpKiB9ICk7DQo+ICsgICAgICAgIGJpdGZpZWxkIShzdHJ1Y3Qg JG5hbWUgJCgsICRjb21tZW50KT8geyAkKCRmaWVsZHMpKiB9ICk7DQo+ICAgICAgICAgcmVnaXN0 ZXIhKEBpb19maXhlZCAkbmFtZSBAICRhbGlhczo6T0ZGU0VUKTsNCj4gICAgIH07DQo+IA0KPiAg ICAgLy8gQ3JlYXRlcyBhIHJlZ2lzdGVyIGF0IGEgcmVsYXRpdmUgb2Zmc2V0IGZyb20gYSBiYXNl IGFkZHJlc3MgcHJvdmlkZXIuDQo+ICAgICAoJG5hbWU6aWRlbnQgQCAkYmFzZTp0eSBbICRvZmZz ZXQ6bGl0ZXJhbCBdICQoLCAkY29tbWVudDpsaXRlcmFsKT8geyAkKCRmaWVsZHM6dHQpKiB9ICkg PT4gew0KPiAtICAgICAgICByZWdpc3RlciEoQGNvcmUgJG5hbWUgJCgsICRjb21tZW50KT8geyAk KCRmaWVsZHMpKiB9ICk7DQo+ICsgICAgICAgIGJpdGZpZWxkIShzdHJ1Y3QgJG5hbWUgJCgsICRj b21tZW50KT8geyAkKCRmaWVsZHMpKiB9ICk7DQo+ICAgICAgICAgcmVnaXN0ZXIhKEBpb19yZWxh dGl2ZSAkbmFtZSBAICRiYXNlIFsgJG9mZnNldCBdKTsNCj4gICAgIH07DQo+IA0KPiAgICAgLy8g Q3JlYXRlcyBhbiBhbGlhcyByZWdpc3RlciBvZiByZWxhdGl2ZSBvZmZzZXQgcmVnaXN0ZXIgYGFs aWFzYCB3aXRoIGl0cyBvd24gZmllbGRzLg0KPiAgICAgKCRuYW1lOmlkZW50ID0+ICRiYXNlOnR5 IFsgJGFsaWFzOmlkZW50IF0gJCgsICRjb21tZW50OmxpdGVyYWwpPyB7ICQoJGZpZWxkczp0dCkq IH0pID0+IHsNCj4gLSAgICAgICAgcmVnaXN0ZXIhKEBjb3JlICRuYW1lICQoLCAkY29tbWVudCk/ IHsgJCgkZmllbGRzKSogfSApOw0KPiArICAgICAgICBiaXRmaWVsZCEoc3RydWN0ICRuYW1lICQo LCAkY29tbWVudCk/IHsgJCgkZmllbGRzKSogfSApOw0KPiAgICAgICAgIHJlZ2lzdGVyIShAaW9f cmVsYXRpdmUgJG5hbWUgQCAkYmFzZSBbICRhbGlhczo6T0ZGU0VUIF0pOw0KPiAgICAgfTsNCj4g DQo+IEBAIC0zMTMsNyArMzA1LDcgQEAgbWFjcm9fcnVsZXMhIHJlZ2lzdGVyIHsNCj4gICAgICAg ICB9DQo+ICAgICApID0+IHsNCj4gICAgICAgICBzdGF0aWNfYXNzZXJ0ISg6OmNvcmU6Om1lbTo6 c2l6ZV9vZjo6PHUzMj4oKSA8PSAkc3RyaWRlKTsNCj4gLSAgICAgICAgcmVnaXN0ZXIhKEBjb3Jl ICRuYW1lICQoLCAkY29tbWVudCk/IHsgJCgkZmllbGRzKSogfSApOw0KPiArICAgICAgICBiaXRm aWVsZCEoc3RydWN0ICRuYW1lICQoLCAkY29tbWVudCk/IHsgJCgkZmllbGRzKSogfSApOw0KPiAg ICAgICAgIHJlZ2lzdGVyIShAaW9fYXJyYXkgJG5hbWUgQCAkb2Zmc2V0IFsgJHNpemUgOyAkc3Ry aWRlIF0pOw0KPiAgICAgfTsNCj4gDQo+IEBAIC0zMzQsNyArMzI2LDcgQEAgbWFjcm9fcnVsZXMh IHJlZ2lzdGVyIHsNCj4gICAgICAgICAgICAgJCgsICRjb21tZW50OmxpdGVyYWwpPyB7ICQoJGZp ZWxkczp0dCkqIH0NCj4gICAgICkgPT4gew0KPiAgICAgICAgIHN0YXRpY19hc3NlcnQhKDo6Y29y ZTo6bWVtOjpzaXplX29mOjo8dTMyPigpIDw9ICRzdHJpZGUpOw0KPiAtICAgICAgICByZWdpc3Rl ciEoQGNvcmUgJG5hbWUgJCgsICRjb21tZW50KT8geyAkKCRmaWVsZHMpKiB9ICk7DQo+ICsgICAg ICAgIGJpdGZpZWxkIShzdHJ1Y3QgJG5hbWUgJCgsICRjb21tZW50KT8geyAkKCRmaWVsZHMpKiB9 ICk7DQo+ICAgICAgICAgcmVnaXN0ZXIhKEBpb19yZWxhdGl2ZV9hcnJheSAkbmFtZSBAICRiYXNl IFsgJG9mZnNldCBbICRzaXplIDsgJHN0cmlkZSBdIF0pOw0KPiAgICAgfTsNCj4gDQo+IEBAIC0z NTYsNyArMzQ4LDcgQEAgbWFjcm9fcnVsZXMhIHJlZ2lzdGVyIHsNCj4gICAgICAgICB9DQo+ICAg ICApID0+IHsNCj4gICAgICAgICBzdGF0aWNfYXNzZXJ0ISgkaWR4IDwgJGFsaWFzOjpTSVpFKTsN Cj4gLSAgICAgICAgcmVnaXN0ZXIhKEBjb3JlICRuYW1lICQoLCAkY29tbWVudCk/IHsgJCgkZmll bGRzKSogfSApOw0KPiArICAgICAgICBiaXRmaWVsZCEoc3RydWN0ICRuYW1lICQoLCAkY29tbWVu dCk/IHsgJCgkZmllbGRzKSogfSApOw0KPiAgICAgICAgIHJlZ2lzdGVyIShAaW9fcmVsYXRpdmUg JG5hbWUgQCAkYmFzZSBbICRhbGlhczo6T0ZGU0VUICsgJGlkeCAqICRhbGlhczo6U1RSSURFIF0g KTsNCj4gICAgIH07DQo+IA0KPiBAQCAtMzY1LDI0MSArMzU3LDEwIEBAIG1hY3JvX3J1bGVzISBy ZWdpc3RlciB7DQo+ICAgICAvLyB0byBhdm9pZCBpdCBiZWluZyBpbnRlcnByZXRlZCBpbiBwbGFj ZSBvZiB0aGUgcmVsYXRpdmUgcmVnaXN0ZXIgYXJyYXkgYWxpYXMgcnVsZS4NCj4gICAgICgkbmFt ZTppZGVudCA9PiAkYWxpYXM6aWRlbnQgWyAkaWR4OmV4cHIgXSAkKCwgJGNvbW1lbnQ6bGl0ZXJh bCk/IHsgJCgkZmllbGRzOnR0KSogfSkgPT4gew0KPiAgICAgICAgIHN0YXRpY19hc3NlcnQhKCRp ZHggPCAkYWxpYXM6OlNJWkUpOw0KPiAtICAgICAgICByZWdpc3RlciEoQGNvcmUgJG5hbWUgJCgs ICRjb21tZW50KT8geyAkKCRmaWVsZHMpKiB9ICk7DQo+ICsgICAgICAgIGJpdGZpZWxkIShzdHJ1 Y3QgJG5hbWUgJCgsICRjb21tZW50KT8geyAkKCRmaWVsZHMpKiB9ICk7DQo+ICAgICAgICAgcmVn aXN0ZXIhKEBpb19maXhlZCAkbmFtZSBAICRhbGlhczo6T0ZGU0VUICsgJGlkeCAqICRhbGlhczo6 U1RSSURFICk7DQo+ICAgICB9Ow0KPiANCj4gLSAgICAvLyBBbGwgcnVsZXMgYmVsb3cgYXJlIGhl bHBlcnMuDQo+IC0NCj4gLSAgICAvLyBEZWZpbmVzIHRoZSB3cmFwcGVyIGAkbmFtZWAgdHlwZSwg YXMgd2VsbCBhcyBpdHMgcmVsZXZhbnQgaW1wbGVtZW50YXRpb25zIChgRGVidWdgLA0KPiAtICAg IC8vIGBEZWZhdWx0YCwgYEJpdE9yYCwgYW5kIGNvbnZlcnNpb24gdG8gdGhlIHZhbHVlIHR5cGUp IGFuZCBmaWVsZCBhY2Nlc3NvciBtZXRob2RzLg0KPiAtICAgIChAY29yZSAkbmFtZTppZGVudCAk KCwgJGNvbW1lbnQ6bGl0ZXJhbCk/IHsgJCgkZmllbGRzOnR0KSogfSkgPT4gew0KPiAtICAgICAg ICAkKA0KPiAtICAgICAgICAjW2RvYz0kY29tbWVudF0NCj4gLSAgICAgICAgKT8NCj4gLSAgICAg ICAgI1tyZXByKHRyYW5zcGFyZW50KV0NCj4gLSAgICAgICAgI1tkZXJpdmUoQ2xvbmUsIENvcHkp XQ0KPiAtICAgICAgICBwdWIoY3JhdGUpIHN0cnVjdCAkbmFtZSh1MzIpOw0KPiAtDQo+IC0gICAg ICAgIGltcGwgOjpjb3JlOjpvcHM6OkJpdE9yIGZvciAkbmFtZSB7DQo+IC0gICAgICAgICAgICB0 eXBlIE91dHB1dCA9IFNlbGY7DQo+IC0NCj4gLSAgICAgICAgICAgIGZuIGJpdG9yKHNlbGYsIHJo czogU2VsZikgLT4gU2VsZjo6T3V0cHV0IHsNCj4gLSAgICAgICAgICAgICAgICBTZWxmKHNlbGYu MCB8IHJocy4wKQ0KPiAtICAgICAgICAgICAgfQ0KPiAtICAgICAgICB9DQo+IC0NCj4gLSAgICAg ICAgaW1wbCA6OmNvcmU6OmNvbnZlcnQ6OkZyb208JG5hbWU+IGZvciB1MzIgew0KPiAtICAgICAg ICAgICAgZm4gZnJvbShyZWc6ICRuYW1lKSAtPiB1MzIgew0KPiAtICAgICAgICAgICAgICAgIHJl Zy4wDQo+IC0gICAgICAgICAgICB9DQo+IC0gICAgICAgIH0NCj4gLQ0KPiAtICAgICAgICByZWdp c3RlciEoQGZpZWxkc19kaXNwYXRjaGVyICRuYW1lIHsgJCgkZmllbGRzKSogfSk7DQo+IC0gICAg fTsNCj4gLQ0KPiAtICAgIC8vIENhcHR1cmVzIHRoZSBmaWVsZHMgYW5kIHBhc3NlcyB0aGVtIHRv IGFsbCB0aGUgaW1wbGVtZW50ZXJzIHRoYXQgcmVxdWlyZSBmaWVsZCBpbmZvcm1hdGlvbi4NCj4g LSAgICAvLw0KPiAtICAgIC8vIFVzZWQgdG8gc2ltcGxpZnkgdGhlIG1hdGNoaW5nIHJ1bGVzIGZv ciBpbXBsZW1lbnRlcnMsIHNvIHRoZXkgZG9uJ3QgbmVlZCB0byBtYXRjaCB0aGUgZW50aXJlDQo+ IC0gICAgLy8gY29tcGxleCBmaWVsZHMgcnVsZSBldmVuIHRob3VnaCB0aGV5IG9ubHkgbWFrZSB1 c2Ugb2YgcGFydCBvZiBpdC4NCj4gLSAgICAoQGZpZWxkc19kaXNwYXRjaGVyICRuYW1lOmlkZW50 IHsNCj4gLSAgICAgICAgJCgkaGk6dHQ6JGxvOnR0ICRmaWVsZDppZGVudCBhcyAkdHlwZTp0dA0K PiAtICAgICAgICAgICAgJCg/PT4gJHRyeV9pbnRvX3R5cGU6dHkpPw0KPiAtICAgICAgICAgICAg JCg9PiAkaW50b190eXBlOnR5KT8NCj4gLSAgICAgICAgICAgICQoLCAkY29tbWVudDpsaXRlcmFs KT8NCj4gLSAgICAgICAgOw0KPiAtICAgICAgICApKg0KPiAtICAgIH0NCj4gLSAgICApID0+IHsN Cj4gLSAgICAgICAgcmVnaXN0ZXIhKEBmaWVsZF9hY2Nlc3NvcnMgJG5hbWUgew0KPiAtICAgICAg ICAgICAgJCgNCj4gLSAgICAgICAgICAgICAgICAkaGk6JGxvICRmaWVsZCBhcyAkdHlwZQ0KPiAt ICAgICAgICAgICAgICAgICQoPz0+ICR0cnlfaW50b190eXBlKT8NCj4gLSAgICAgICAgICAgICAg ICAkKD0+ICRpbnRvX3R5cGUpPw0KPiAtICAgICAgICAgICAgICAgICQoLCAkY29tbWVudCk/DQo+ IC0gICAgICAgICAgICA7DQo+IC0gICAgICAgICAgICApKg0KPiAtICAgICAgICB9KTsNCj4gLSAg ICAgICAgcmVnaXN0ZXIhKEBkZWJ1ZyAkbmFtZSB7ICQoJGZpZWxkOykqIH0pOw0KPiAtICAgICAg ICByZWdpc3RlciEoQGRlZmF1bHQgJG5hbWUgeyAkKCRmaWVsZDspKiB9KTsNCj4gLSAgICB9Ow0K PiAtDQo+IC0gICAgLy8gRGVmaW5lcyBhbGwgdGhlIGZpZWxkIGdldHRlci9tZXRob2RzIG1ldGhv ZHMgZm9yIGAkbmFtZWAuDQo+IC0gICAgKA0KPiAtICAgICAgICBAZmllbGRfYWNjZXNzb3JzICRu YW1lOmlkZW50IHsNCj4gLSAgICAgICAgJCgkaGk6dHQ6JGxvOnR0ICRmaWVsZDppZGVudCBhcyAk dHlwZTp0dA0KPiAtICAgICAgICAgICAgJCg/PT4gJHRyeV9pbnRvX3R5cGU6dHkpPw0KPiAtICAg ICAgICAgICAgJCg9PiAkaW50b190eXBlOnR5KT8NCj4gLSAgICAgICAgICAgICQoLCAkY29tbWVu dDpsaXRlcmFsKT8NCj4gLSAgICAgICAgOw0KPiAtICAgICAgICApKg0KPiAtICAgICAgICB9DQo+ IC0gICAgKSA9PiB7DQo+IC0gICAgICAgICQoDQo+IC0gICAgICAgICAgICByZWdpc3RlciEoQGNo ZWNrX2ZpZWxkX2JvdW5kcyAkaGk6JGxvICRmaWVsZCBhcyAkdHlwZSk7DQo+IC0gICAgICAgICkq DQo+IC0NCj4gLSAgICAgICAgI1thbGxvdyhkZWFkX2NvZGUpXQ0KPiAtICAgICAgICBpbXBsICRu YW1lIHsNCj4gLSAgICAgICAgICAgICQoDQo+IC0gICAgICAgICAgICByZWdpc3RlciEoQGZpZWxk X2FjY2Vzc29yICRuYW1lICRoaTokbG8gJGZpZWxkIGFzICR0eXBlDQo+IC0gICAgICAgICAgICAg ICAgJCg/PT4gJHRyeV9pbnRvX3R5cGUpPw0KPiAtICAgICAgICAgICAgICAgICQoPT4gJGludG9f dHlwZSk/DQo+IC0gICAgICAgICAgICAgICAgJCgsICRjb21tZW50KT8NCj4gLSAgICAgICAgICAg ICAgICA7DQo+IC0gICAgICAgICAgICApOw0KPiAtICAgICAgICAgICAgKSoNCj4gLSAgICAgICAg fQ0KPiAtICAgIH07DQo+IC0NCj4gLSAgICAvLyBCb29sZWFuIGZpZWxkcyBtdXN0IGhhdmUgYCRo aSA9PSAkbG9gLg0KPiAtICAgIChAY2hlY2tfZmllbGRfYm91bmRzICRoaTp0dDokbG86dHQgJGZp ZWxkOmlkZW50IGFzIGJvb2wpID0+IHsNCj4gLSAgICAgICAgI1thbGxvdyhjbGlwcHk6OmVxX29w KV0NCj4gLSAgICAgICAgY29uc3QgXzogKCkgPSB7DQo+IC0gICAgICAgICAgICA6Omtlcm5lbDo6 YnVpbGRfYXNzZXJ0ISgNCj4gLSAgICAgICAgICAgICAgICAkaGkgPT0gJGxvLA0KPiAtICAgICAg ICAgICAgICAgIGNvbmNhdCEoImJvb2xlYW4gZmllbGQgYCIsIHN0cmluZ2lmeSEoJGZpZWxkKSwg ImAgY292ZXJzIG1vcmUgdGhhbiBvbmUgYml0IikNCj4gLSAgICAgICAgICAgICk7DQo+IC0gICAg ICAgIH07DQo+IC0gICAgfTsNCj4gLQ0KPiAtICAgIC8vIE5vbi1ib29sZWFuIGZpZWxkcyBtdXN0 IGhhdmUgYCRoaSA+PSAkbG9gLg0KPiAtICAgIChAY2hlY2tfZmllbGRfYm91bmRzICRoaTp0dDok bG86dHQgJGZpZWxkOmlkZW50IGFzICR0eXBlOnR0KSA9PiB7DQo+IC0gICAgICAgICNbYWxsb3co Y2xpcHB5OjplcV9vcCldDQo+IC0gICAgICAgIGNvbnN0IF86ICgpID0gew0KPiAtICAgICAgICAg ICAgOjprZXJuZWw6OmJ1aWxkX2Fzc2VydCEoDQo+IC0gICAgICAgICAgICAgICAgJGhpID49ICRs bywNCj4gLSAgICAgICAgICAgICAgICBjb25jYXQhKCJmaWVsZCBgIiwgc3RyaW5naWZ5ISgkZmll bGQpLCAiYCdzIE1TQiBpcyBzbWFsbGVyIHRoYW4gaXRzIExTQiIpDQo+IC0gICAgICAgICAgICAp Ow0KPiAtICAgICAgICB9Ow0KPiAtICAgIH07DQo+IC0NCj4gLSAgICAvLyBDYXRjaGVzIGZpZWxk cyBkZWZpbmVkIGFzIGBib29sYCBhbmQgY29udmVydCB0aGVtIGludG8gYSBib29sZWFuIHZhbHVl Lg0KPiAtICAgICgNCj4gLSAgICAgICAgQGZpZWxkX2FjY2Vzc29yICRuYW1lOmlkZW50ICRoaTp0 dDokbG86dHQgJGZpZWxkOmlkZW50IGFzIGJvb2wgPT4gJGludG9fdHlwZTp0eQ0KPiAtICAgICAg ICAgICAgJCgsICRjb21tZW50OmxpdGVyYWwpPzsNCj4gLSAgICApID0+IHsNCj4gLSAgICAgICAg cmVnaXN0ZXIhKA0KPiAtICAgICAgICAgICAgQGxlYWZfYWNjZXNzb3IgJG5hbWUgJGhpOiRsbyAk ZmllbGQNCj4gLSAgICAgICAgICAgIHsgfGZ8IDwkaW50b190eXBlPjo6ZnJvbShpZiBmICE9IDAg eyB0cnVlIH0gZWxzZSB7IGZhbHNlIH0pIH0NCj4gLSAgICAgICAgICAgICRpbnRvX3R5cGUgPT4g JGludG9fdHlwZSAkKCwgJGNvbW1lbnQpPzsNCj4gLSAgICAgICAgKTsNCj4gLSAgICB9Ow0KPiAt DQo+IC0gICAgLy8gU2hvcnRjdXQgZm9yIGZpZWxkcyBkZWZpbmVkIGFzIGBib29sYCB3aXRob3V0 IHRoZSBgPT5gIHN5bnRheC4NCj4gLSAgICAoDQo+IC0gICAgICAgIEBmaWVsZF9hY2Nlc3NvciAk bmFtZTppZGVudCAkaGk6dHQ6JGxvOnR0ICRmaWVsZDppZGVudCBhcyBib29sICQoLCAkY29tbWVu dDpsaXRlcmFsKT87DQo+IC0gICAgKSA9PiB7DQo+IC0gICAgICAgIHJlZ2lzdGVyIShAZmllbGRf YWNjZXNzb3IgJG5hbWUgJGhpOiRsbyAkZmllbGQgYXMgYm9vbCA9PiBib29sICQoLCAkY29tbWVu dCk/Oyk7DQo+IC0gICAgfTsNCj4gLQ0KPiAtICAgIC8vIENhdGNoZXMgdGhlIGA/PT5gIHN5bnRh eCBmb3Igbm9uLWJvb2xlYW4gZmllbGRzLg0KPiAtICAgICgNCj4gLSAgICAgICAgQGZpZWxkX2Fj Y2Vzc29yICRuYW1lOmlkZW50ICRoaTp0dDokbG86dHQgJGZpZWxkOmlkZW50IGFzICR0eXBlOnR0 ID89PiAkdHJ5X2ludG9fdHlwZTp0eQ0KPiAtICAgICAgICAgICAgJCgsICRjb21tZW50OmxpdGVy YWwpPzsNCj4gLSAgICApID0+IHsNCj4gLSAgICAgICAgcmVnaXN0ZXIhKEBsZWFmX2FjY2Vzc29y ICRuYW1lICRoaTokbG8gJGZpZWxkDQo+IC0gICAgICAgICAgICB7IHxmfCA8JHRyeV9pbnRvX3R5 cGU+Ojp0cnlfZnJvbShmIGFzICR0eXBlKSB9ICR0cnlfaW50b190eXBlID0+DQo+IC0gICAgICAg ICAgICA6OmNvcmU6OnJlc3VsdDo6UmVzdWx0PA0KPiAtICAgICAgICAgICAgICAgICR0cnlfaW50 b190eXBlLA0KPiAtICAgICAgICAgICAgICAgIDwkdHJ5X2ludG9fdHlwZSBhcyA6OmNvcmU6OmNv bnZlcnQ6OlRyeUZyb208JHR5cGU+Pjo6RXJyb3INCj4gLSAgICAgICAgICAgID4NCj4gLSAgICAg ICAgICAgICQoLCAkY29tbWVudCk/Oyk7DQo+IC0gICAgfTsNCj4gLQ0KPiAtICAgIC8vIENhdGNo ZXMgdGhlIGA9PmAgc3ludGF4IGZvciBub24tYm9vbGVhbiBmaWVsZHMuDQo+IC0gICAgKA0KPiAt ICAgICAgICBAZmllbGRfYWNjZXNzb3IgJG5hbWU6aWRlbnQgJGhpOnR0OiRsbzp0dCAkZmllbGQ6 aWRlbnQgYXMgJHR5cGU6dHQgPT4gJGludG9fdHlwZTp0eQ0KPiAtICAgICAgICAgICAgJCgsICRj b21tZW50OmxpdGVyYWwpPzsNCj4gLSAgICApID0+IHsNCj4gLSAgICAgICAgcmVnaXN0ZXIhKEBs ZWFmX2FjY2Vzc29yICRuYW1lICRoaTokbG8gJGZpZWxkDQo+IC0gICAgICAgICAgICB7IHxmfCA8 JGludG9fdHlwZT46OmZyb20oZiBhcyAkdHlwZSkgfSAkaW50b190eXBlID0+ICRpbnRvX3R5cGUg JCgsICRjb21tZW50KT87KTsNCj4gLSAgICB9Ow0KPiAtDQo+IC0gICAgLy8gU2hvcnRjdXQgZm9y IG5vbi1ib29sZWFuIGZpZWxkcyBkZWZpbmVkIHdpdGhvdXQgdGhlIGA9PmAgb3IgYD89PmAgc3lu dGF4Lg0KPiAtICAgICgNCj4gLSAgICAgICAgQGZpZWxkX2FjY2Vzc29yICRuYW1lOmlkZW50ICRo aTp0dDokbG86dHQgJGZpZWxkOmlkZW50IGFzICR0eXBlOnR0DQo+IC0gICAgICAgICAgICAkKCwg JGNvbW1lbnQ6bGl0ZXJhbCk/Ow0KPiAtICAgICkgPT4gew0KPiAtICAgICAgICByZWdpc3RlciEo QGZpZWxkX2FjY2Vzc29yICRuYW1lICRoaTokbG8gJGZpZWxkIGFzICR0eXBlID0+ICR0eXBlICQo LCAkY29tbWVudCk/Oyk7DQo+IC0gICAgfTsNCj4gLQ0KPiAtICAgIC8vIEdlbmVyYXRlcyB0aGUg YWNjZXNzb3IgbWV0aG9kcyBmb3IgYSBzaW5nbGUgZmllbGQuDQo+IC0gICAgKA0KPiAtICAgICAg ICBAbGVhZl9hY2Nlc3NvciAkbmFtZTppZGVudCAkaGk6dHQ6JGxvOnR0ICRmaWVsZDppZGVudA0K PiAtICAgICAgICAgICAgeyAkcHJvY2VzczpleHByIH0gJHRvX3R5cGU6dHkgPT4gJHJlc190eXBl OnR5ICQoLCAkY29tbWVudDpsaXRlcmFsKT87DQo+IC0gICAgKSA9PiB7DQo+IC0gICAgICAgIDo6 a2VybmVsOjptYWNyb3M6OnBhc3RlISgNCj4gLSAgICAgICAgY29uc3QgWzwkZmllbGQ6dXBwZXIg X1JBTkdFPl06IDo6Y29yZTo6b3BzOjpSYW5nZUluY2x1c2l2ZTx1OD4gPSAkbG8uLj0kaGk7DQo+ IC0gICAgICAgIGNvbnN0IFs8JGZpZWxkOnVwcGVyIF9NQVNLPl06IHUzMiA9ICgoKCgxIDw8ICRo aSkgLSAxKSA8PCAxKSArIDEpIC0gKCgxIDw8ICRsbykgLSAxKTsNCj4gLSAgICAgICAgY29uc3Qg WzwkZmllbGQ6dXBwZXIgX1NISUZUPl06IHUzMiA9IFNlbGY6Ols8JGZpZWxkOnVwcGVyIF9NQVNL Pl0udHJhaWxpbmdfemVyb3MoKTsNCj4gLSAgICAgICAgKTsNCj4gLQ0KPiAtICAgICAgICAkKA0K PiAtICAgICAgICAjW2RvYz0iUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZDoiXQ0KPiAt ICAgICAgICAjW2RvYz0kY29tbWVudF0NCj4gLSAgICAgICAgKT8NCj4gLSAgICAgICAgI1tpbmxp bmUoYWx3YXlzKV0NCj4gLSAgICAgICAgcHViKGNyYXRlKSBmbiAkZmllbGQoc2VsZikgLT4gJHJl c190eXBlIHsNCj4gLSAgICAgICAgICAgIDo6a2VybmVsOjptYWNyb3M6OnBhc3RlISgNCj4gLSAg ICAgICAgICAgIGNvbnN0IE1BU0s6IHUzMiA9ICRuYW1lOjpbPCRmaWVsZDp1cHBlciBfTUFTSz5d Ow0KPiAtICAgICAgICAgICAgY29uc3QgU0hJRlQ6IHUzMiA9ICRuYW1lOjpbPCRmaWVsZDp1cHBl ciBfU0hJRlQ+XTsNCj4gLSAgICAgICAgICAgICk7DQo+IC0gICAgICAgICAgICBsZXQgZmllbGQg PSAoKHNlbGYuMCAmIE1BU0spID4+IFNISUZUKTsNCj4gLQ0KPiAtICAgICAgICAgICAgJHByb2Nl c3MoZmllbGQpDQo+IC0gICAgICAgIH0NCj4gLQ0KPiAtICAgICAgICA6Omtlcm5lbDo6bWFjcm9z OjpwYXN0ZSEoDQo+IC0gICAgICAgICQoDQo+IC0gICAgICAgICNbZG9jPSJTZXRzIHRoZSB2YWx1 ZSBvZiB0aGlzIGZpZWxkOiJdDQo+IC0gICAgICAgICNbZG9jPSRjb21tZW50XQ0KPiAtICAgICAg ICApPw0KPiAtICAgICAgICAjW2lubGluZShhbHdheXMpXQ0KPiAtICAgICAgICBwdWIoY3JhdGUp IGZuIFs8c2V0XyAkZmllbGQ+XShtdXQgc2VsZiwgdmFsdWU6ICR0b190eXBlKSAtPiBTZWxmIHsN Cj4gLSAgICAgICAgICAgIGNvbnN0IE1BU0s6IHUzMiA9ICRuYW1lOjpbPCRmaWVsZDp1cHBlciBf TUFTSz5dOw0KPiAtICAgICAgICAgICAgY29uc3QgU0hJRlQ6IHUzMiA9ICRuYW1lOjpbPCRmaWVs ZDp1cHBlciBfU0hJRlQ+XTsNCj4gLSAgICAgICAgICAgIGxldCB2YWx1ZSA9ICh1MzI6OmZyb20o dmFsdWUpIDw8IFNISUZUKSAmIE1BU0s7DQo+IC0gICAgICAgICAgICBzZWxmLjAgPSAoc2VsZi4w ICYgIU1BU0spIHwgdmFsdWU7DQo+IC0NCj4gLSAgICAgICAgICAgIHNlbGYNCj4gLSAgICAgICAg fQ0KPiAtICAgICAgICApOw0KPiAtICAgIH07DQo+IC0NCj4gLSAgICAvLyBHZW5lcmF0ZXMgdGhl IGBEZWJ1Z2AgaW1wbGVtZW50YXRpb24gZm9yIGAkbmFtZWAuDQo+IC0gICAgKEBkZWJ1ZyAkbmFt ZTppZGVudCB7ICQoJGZpZWxkOmlkZW50OykqIH0pID0+IHsNCj4gLSAgICAgICAgaW1wbCA6OmNv cmU6OmZtdDo6RGVidWcgZm9yICRuYW1lIHsNCj4gLSAgICAgICAgICAgIGZuIGZtdCgmc2VsZiwg ZjogJm11dCA6OmNvcmU6OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gOjpjb3JlOjpmbXQ6OlJlc3Vs dCB7DQo+IC0gICAgICAgICAgICAgICAgZi5kZWJ1Z19zdHJ1Y3Qoc3RyaW5naWZ5ISgkbmFtZSkp DQo+IC0gICAgICAgICAgICAgICAgICAgIC5maWVsZCgiPHJhdz4iLCAmZm9ybWF0X2FyZ3MhKCJ7 OiN4fSIsICZzZWxmLjApKQ0KPiAtICAgICAgICAgICAgICAgICQoDQo+IC0gICAgICAgICAgICAg ICAgICAgIC5maWVsZChzdHJpbmdpZnkhKCRmaWVsZCksICZzZWxmLiRmaWVsZCgpKQ0KPiAtICAg ICAgICAgICAgICAgICkqDQo+IC0gICAgICAgICAgICAgICAgICAgIC5maW5pc2goKQ0KPiAtICAg ICAgICAgICAgfQ0KPiAtICAgICAgICB9DQo+IC0gICAgfTsNCj4gLQ0KPiAtICAgIC8vIEdlbmVy YXRlcyB0aGUgYERlZmF1bHRgIGltcGxlbWVudGF0aW9uIGZvciBgJG5hbWVgLg0KPiAtICAgIChA ZGVmYXVsdCAkbmFtZTppZGVudCB7ICQoJGZpZWxkOmlkZW50OykqIH0pID0+IHsNCj4gLSAgICAg ICAgLy8vIFJldHVybnMgYSB2YWx1ZSBmb3IgdGhlIHJlZ2lzdGVyIHdoZXJlIGFsbCBmaWVsZHMg YXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLg0KPiAtICAgICAgICBpbXBsIDo6Y29yZTo6 ZGVmYXVsdDo6RGVmYXVsdCBmb3IgJG5hbWUgew0KPiAtICAgICAgICAgICAgZm4gZGVmYXVsdCgp IC0+IFNlbGYgew0KPiAtICAgICAgICAgICAgICAgICNbYWxsb3codW51c2VkX211dCldDQo+IC0g ICAgICAgICAgICAgICAgbGV0IG11dCB2YWx1ZSA9IFNlbGYoRGVmYXVsdDo6ZGVmYXVsdCgpKTsN Cj4gLQ0KPiAtICAgICAgICAgICAgICAgIDo6a2VybmVsOjptYWNyb3M6OnBhc3RlISgNCj4gLSAg ICAgICAgICAgICAgICAkKA0KPiAtICAgICAgICAgICAgICAgIHZhbHVlLls8c2V0XyAkZmllbGQ+ XShEZWZhdWx0OjpkZWZhdWx0KCkpOw0KPiAtICAgICAgICAgICAgICAgICkqDQo+IC0gICAgICAg ICAgICAgICAgKTsNCj4gLQ0KPiAtICAgICAgICAgICAgICAgIHZhbHVlDQo+IC0gICAgICAgICAg ICB9DQo+IC0gICAgICAgIH0NCj4gLSAgICB9Ow0KPiAtDQo+ICAgICAvLyBHZW5lcmF0ZXMgdGhl IElPIGFjY2Vzc29ycyBmb3IgYSBmaXhlZCBvZmZzZXQgcmVnaXN0ZXIuDQo+ICAgICAoQGlvX2Zp eGVkICRuYW1lOmlkZW50IEAgJG9mZnNldDpleHByKSA9PiB7DQo+ICAgICAgICAgI1thbGxvdyhk ZWFkX2NvZGUpXQ0KPiAtLQ0KPiAyLjM0LjENCg0KUmVnYXJkcywNCkVkd2luIFBlZXINCj4gDQoN Cg==