From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smarthost3.eviden.com (smarthost3.eviden.com [80.78.11.84]) (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 E33932192EB; Mon, 24 Feb 2025 13:35:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=80.78.11.84 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740404143; cv=fail; b=XGVjibYr7E4LB++u0YmYfmp8kOMU8qUWNx7IWb70L4VQ1H5Qj95Vca6CfE/Betmd3Z6HL40rsa9V/iNNYF6CmZsdQ8awYqTN8VEDMbCl5D289YEGasygNdd2Kwt4SOPnG7fMWimbHmG0jX0wsOVmQAxf26GeXeFc78iK1NIZe60= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740404143; c=relaxed/simple; bh=oKwOt+oxrh7n6lARBCwKIc+bXAFvmDsCaOKuSTx9+5A=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=I5lyHYLn9fu9cZgJYseb0IaB8GGYnGJEj1YeP2JzO58boMzC8r/UiiC/6oB60m0kxR2/0zISr9wn/qS+JhmXxqHAxMlL4bkZNs6vw+od5zROZOnNRpubDJADWjq10XjFhH0G75KMWENMCUgry8dQg+zfeO2irMYqUfOdHpAyKFI= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=eviden.com; spf=pass smtp.mailfrom=eviden.com; dkim=pass (2048-bit key) header.d=eviden.com header.i=@eviden.com header.b=ZOqXo1Ug; dkim=pass (2048-bit key) header.d=Eviden.com header.i=@Eviden.com header.b=EDOoKdBN; arc=fail smtp.client-ip=80.78.11.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=eviden.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=eviden.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=eviden.com header.i=@eviden.com header.b="ZOqXo1Ug"; dkim=pass (2048-bit key) header.d=Eviden.com header.i=@Eviden.com header.b="EDOoKdBN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1740404139; x=1771940139; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=oKwOt+oxrh7n6lARBCwKIc+bXAFvmDsCaOKuSTx9+5A=; b=ZOqXo1UgC+WJnBc8Uh9tMWsx2A9JwPmiVFDc6h4Id8jyzXuaJtkR7v8q RKTKht5QcvaoqG5kdjqfcFQtEZZqeuOgBrHvd32Tu77vBHynUnHQtX7n1 64TlROByNBfj4y9Fpgud6KLbmj2oRee1OuZjTI6mO+uyeNUiz5BtWtlmM 1IzOMwUbPwmXFt1hbr1TArpZGQSfBP+URx0eqM16j9QuKEDBViRS1UHeD Is7qRjJhMJ7sEZZpmFFccIKvU2ZRPX3jmovmekvaw+4TbuTuIkYzT9E80 Ihjyj5MtKS4D8fPCsepB/SpO30m/lcVvDPEoh5EbRXA6YBpHrWkujj67E w==; X-CSE-ConnectionGUID: GC0rQ7MhRky/x4/XZaO5Mg== X-CSE-MsgGUID: V0naOY7RQxmQxRt664nNcQ== X-IronPort-AV: E=Sophos;i="6.13,309,1732575600"; d="scan'208";a="31585934" X-MGA-submission: =?us-ascii?q?MDFJS0Dgt7IdUq8dxtPZfX3w98I1F3JPY5OESV?= =?us-ascii?q?IeA0fHd9vCVQZMPYMNimX0XQsfeY1BS2vorAbaGKBkppS+lwjSTB1jmf?= =?us-ascii?q?aCTP4f4o2DAy0JuLH5v9Fu6P4T4HyBpC9d5MgNVFwgfiV9y0yOxvrYPR?= =?us-ascii?q?du+1Pl+fyJWYJl6TVTJtaYeQ=3D=3D?= Received: from mail-norwayeastazlp17013076.outbound.protection.outlook.com (HELO OSPPR02CU001.outbound.protection.outlook.com) ([40.93.81.76]) by smarthost3.eviden.com with ESMTP/TLS/TLS_AES_256_GCM_SHA384; 24 Feb 2025 14:30:26 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UaBbuVL2hcQZJYYetPZdf4fXek1Mr0tS6P9elVPgcuf1QNY3Q6P7CxDryqwAaABzMwehdXojLs5W4qDTyx63ECxtI6y9QbmTisCfj0P0vgDAtjalCMGsOJJZ8aPgH2mUZa98OosT3lih1t14G0CJSRwCrsvScQjnEY1OdhqytpmCbg4GtnIf6AsFFgZ+2azpTAVXZR+UXrAk0E8pKWgMwSC04JVy6rYLIAyuBwi9kGHr13+9w+fQ+HvzTPrmaBE5JZlLsUq94UNRWORcJAxLTZMfFOpqvep1tcwuf5XcHjnuAX29S+znaf8W++aQdD15k2K3B6zUasNY1RobP1ILTw== 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=oKwOt+oxrh7n6lARBCwKIc+bXAFvmDsCaOKuSTx9+5A=; b=PmmXddPzGt1AIVGlCxCgLmp41/iBRAuR2gY4y7Kt5ztIsqUkty54gE1GPz7b8XZNq+XyXPECMYH0fpokdKgQiE9+7Z3ipcsNduRihIcRFzDni+APl7dK30MLWohMmYxIzvWpCuS1/+bBaQ5nbkBoq9OATAYKqJlBA/tGONo0t29gb6w1POIfJgNVLO9JSVH97cP0uz3oOmw2Da94wh/yO0sOR4WPEb+6/KM/mmEGwWooDcdGxVoGBdaJZ3eX0hd/9tj4Tm3vf8aqmvi1VikZhnvJfz19iqGi92kG2IFO+dRmAKXv9mc3WPohZDHFF9AC5v3rUhnWM+bvLN7OSts0uQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=eviden.com; dmarc=pass action=none header.from=eviden.com; dkim=pass header.d=eviden.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Eviden.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oKwOt+oxrh7n6lARBCwKIc+bXAFvmDsCaOKuSTx9+5A=; b=EDOoKdBNiGIkJq9ZMOS2IsoaQdjpDxGa8r2Ldzsmn5oWacS/MUA3gfCES3rnS5sUb3z2L09cfJfn3RruYuNCtmdk1NjhryYeJ35r2MCoBwPTf8XWvGQYyq7XWn8/4a3+qjKOHrT+yoJqfjF+osYakXQ62r2Xyp282nmdYFL1flEM6XobjiLlpFEHUZfglOAbwvabAu0/RPm24FJxw0HNhBOVP84B+MRq4I9MuB/s1kQE0sr6S3iSZCNzJ3qdrgW9S1KAwUcgSp4bxiNJSVx+aqDNxYjzbjRazRSadeBypb1HH1/kU+PEZL2er+dSYnFuC5T0mnsIBeTFNX59KDFySw== Received: from DB6PR07MB3368.eurprd07.prod.outlook.com (2603:10a6:6:21::23) by DB9PR07MB7307.eurprd07.prod.outlook.com (2603:10a6:10:216::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.19; Mon, 24 Feb 2025 13:30:24 +0000 Received: from DB6PR07MB3368.eurprd07.prod.outlook.com ([fe80::46ae:eb82:d26b:d963]) by DB6PR07MB3368.eurprd07.prod.outlook.com ([fe80::46ae:eb82:d26b:d963%7]) with mapi id 15.20.8445.017; Mon, 24 Feb 2025 13:30:23 +0000 From: QUENTIN BOYER To: Abdiel Janulgue , "aliceryhl@google.com" , "dakr@kernel.org" , "robin.murphy@arm.com" , "daniel.almeida@collabora.com" , "rust-for-linux@vger.kernel.org" CC: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?B?QmrDtnJuIFJveSBCYXJvbg==?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Valentin Obst , open list , Christoph Hellwig , Marek Szyprowski , "airlied@redhat.com" , "open list:DMA MAPPING HELPERS" Subject: Re: [PATCH v12 2/3] rust: add dma coherent allocator abstraction. Thread-Topic: [PATCH v12 2/3] rust: add dma coherent allocator abstraction. Thread-Index: AQHbhrSJGcA4QJNwMU2V0qNQjadQu7NWcxqA Date: Mon, 24 Feb 2025 13:30:23 +0000 Message-ID: References: <20250224115007.2072043-1-abdiel.janulgue@gmail.com> <20250224115007.2072043-3-abdiel.janulgue@gmail.com> In-Reply-To: <20250224115007.2072043-3-abdiel.janulgue@gmail.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=eviden.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB6PR07MB3368:EE_|DB9PR07MB7307:EE_ x-ms-office365-filtering-correlation-id: 82d2d1b1-a454-4518-f551-08dd54d76476 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?enNIZTFaenJDUmw5V1czL1pWZHJnam1sZ1p4Q2t6WmVLOHR1TXNaMFUyL0V4?= =?utf-8?B?SXpLdVBSNTFjZ000TzBUQkxiWkwrNUFFekVSSE45bkFGMkVKSlUvRzRLdnpr?= =?utf-8?B?bTlpR3NpMVVwU0JkL29DODVaWnppSXZybXk5d0dCRVFueXVKcENGU3BwUFRH?= =?utf-8?B?OG9FUFhVd0tQOEpsY3hBZmlqZTdSTytteGxGMnUzTFBOWm94aHMvbjBseHAw?= =?utf-8?B?YzZwMmZ1Ry84NGRuRkdMZkxNRzFvWlEvQXpyTE9MY1NoY21NZWgxTDkrY1pl?= =?utf-8?B?d2RQNGU5VU9RYzRQNkg1NXpDUEF2OStNT2p6T0lURFR3RDlqV3kyWG85L0Rj?= =?utf-8?B?aWdVeWxjb2ozVzBFOVR4OXdIcTc2dkZvV0NYZXFhU2pCdlpJMk5RUVdDNkMz?= =?utf-8?B?SGV0Vkk1YUpvU1NrODIyNjM1RTVZT0F1TzZtZmZDdmsxM2o2YVp4YmFjeHhv?= =?utf-8?B?Y2o4RjNCQjF1VE43b2JmZzRUenN5VU9maEdGeHpzcWNHZ1dGY3prNTNWNkhW?= =?utf-8?B?OUVmMS9VUFhTVjdWUHRyUkZsUGY3WkUxQU1VV1Z6VDBkWlJGL2FCYmRpYkNW?= =?utf-8?B?eWZFTkFEOUdaQjd4N3Q2WXVEeExaNWJ0VUh0ZnFwOUpoU0RBQjZnK2RoNE9j?= =?utf-8?B?aEhNUzJRU0FGQVYxRmdGRjVPT0dzTFlycWMrTVRNRy9BbnlYbGlZam1YRFU4?= =?utf-8?B?Mmp0UmZsNlFzTjRWRGUzM3grZ0svbGNNbzFjak01NFdTa3crV1NmZGY3UWlG?= =?utf-8?B?SGVjUmVjbUZUQm1MYkRJMEw0T0RacUJSb2hXL0FFSkR1MVE1R2NOOWRrWXVG?= =?utf-8?B?SnZ4dTJPMWJ0Q1ptdnBXS2tvWEF4NzBpMkVYWHVmZEdNUUxlUmowRzBXOGZK?= =?utf-8?B?WDZUUTNZWkdRZkdIb3E1cWNyakQxTy9OSndBT0FNY3VUUEh3VTBxL2I0TDUx?= =?utf-8?B?eGtXSnI0Q1dLcWNCZlJhQ0RiZnhlNUFtUEsyTGVaclFGME9rNk1ZRUxsNjlT?= =?utf-8?B?c0J4cDNKWVJhdHVvTGNJZ0pmN3dHL0M0eW1odjhyekVoc1BTTVRLaklpNkF1?= =?utf-8?B?VWN6OHREYTR4TWlFYnBCdm1kdlZ5SitUYWxjY0hLR2F2clF5K2pUazVlUkRV?= =?utf-8?B?RGFsVjV5UGFDLzh0SFRFRDZxVDdqcjNaUmptL2tlMlVWMTJIV3dqMElaclNP?= =?utf-8?B?SWFORTc0T0VtbVh3RlhjRTdkekZJVWFoc0xhWkxxL2E2M3JwQ3dzVXFvYU5K?= =?utf-8?B?THh5NnI2UEh2S2o0REthUUNoZHZDeDNOVVhSeUNzL1FVQlMrTTNnRDcrdW0z?= =?utf-8?B?TkdPakFQdGI2Q0I2dXZRKzJTL09YaVB6aldOZmxOTkhLbEIvRWpZaTlST2g0?= =?utf-8?B?Tk9UOE5OeEFMZnlDTlJkK2prSktLODlsNXdkbk9EVmU2MnM0dWpwVzI3VXFj?= =?utf-8?B?OEE1aFBxTkluZXJ6eUhTTzV0TldKOGQyWEdqZm41WjNkeTVndk95bXgyV3ZL?= =?utf-8?B?b2x4Q0V1cEhBa0g0aENWTnl2WHhDd28rTUNNc3dwT1BQS0NveXd1alhKM3FT?= =?utf-8?B?T1poQm52cU1obnpxdHpBb3RHVVR5dmlYQ1NCemY0K2d6VFB1Q2FuVjlJN2dF?= =?utf-8?B?RUtRNnFrejVkK3VCdFovM0thTjluYkZTY0ZCK1NWbE42RDZzcEZPV0FjMDNh?= =?utf-8?B?NHFwaGhkZUI2ZGFXVG51TlZzZ1Mxd05reW9lbEFFSUp3WnpWRzJCcFNBUjZ2?= =?utf-8?B?L1JWYmNlb29vcTRSRmwyZjJqcmRGbUdyTUFSU2VQdHg3YUlMM0RmWmhsNWNj?= =?utf-8?B?d1lxK3NOYldnaHQ4UjVIMU1UaGZWaURtcmhBNTk3Q0VKSlVEWS93ZnJsWjJk?= =?utf-8?B?ZmhBMmQ4MDBmM1k0dXN0MkZhRDVFRFpiOTBlN0lRMnVTQzc1VHlLK05SclAv?= =?utf-8?Q?m8IWTfHrVpJTfrmGXn6f0Sk/aao64muM?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB6PR07MB3368.eurprd07.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z08yVjc2SmdhZkJIaW9WZE55a1ZqTHJoa1BHTndnZUdUOTB3N3J1cVhFQXVo?= =?utf-8?B?UHc4OGtRMGFYRmdVVUQvZUZPWFRQOGdxakx0SHlCWnU2cDJmbTdkUTViRU9J?= =?utf-8?B?aTJKWWhYRjVtOVF6MjZTRkNxejc3T24yY0lvcWdnTEZCR0lWWDVaSGkxOEQr?= =?utf-8?B?VzM4a0pvKzlmMmllZE1peVZId010bjZwakpRZngvWjJ4N0pYNndQSmVzR0tJ?= =?utf-8?B?OFRFR0lrNUYxZVB5YUVNMzltdzE3V0dZOGpCWjdGSGI3amtHYmlROFRycktG?= =?utf-8?B?eEM1ODBka3ZmSkl5RWxzZWdBNmNlQUwzbVF5L25yWjNoM3p6TEpJZ3habVZV?= =?utf-8?B?NmNsNHBRbWF4MnNSYTI2dkV5WkNsMGxUZDU3YWhKMVdkYkthSnM0YUxtT2lL?= =?utf-8?B?RUFkajgyTHVVY21MQTZtVWQza1NTeFhqNUJYRkZac3ZsMTVKSGNKT29ZWFBS?= =?utf-8?B?K1duUm81T1lqSW14SHkzZDFtZ2xsUk9td2ZYL2ZDa2NmL0t3UnZjU1VGekd5?= =?utf-8?B?L1RMMjVCMDd4RktRbGtoVzNPa3dIUmhTamNqalBVSm9DZVg1b1VGVHA1eHFi?= =?utf-8?B?TGcvZTk4VUtNV1dLZlp0RHErTFpKV1h2bVBwakVvTlpSMitCSVBOWUI1a0lv?= =?utf-8?B?ZkdDeEpZRGlDNGlBcHhjeXJvZFlVN1k1bk1oOGlLa1pCYVRkT1dQcENVWHNX?= =?utf-8?B?OGMwMTg0RWtNMHhSajRUdzlmSzVZT2p1TWM2RHZMbTRRQk93b2FsNWVHZm54?= =?utf-8?B?RjdzUzZZbFo1Z1pkS3pRVnZLK2tsUFFpV3hQMjFIQ3lnRzQ1eG0rdWRuZFFP?= =?utf-8?B?QW5rK2xsSkFmbkUzNUx1NlVUckUrRWNSYkJMY09LR2xqeFBKdUphTlZSSDJp?= =?utf-8?B?TlRhNGUzVm8wTkRvdHRPSHQyclZQMnJvNU9saEJSbGRuUDY0ZlREeFF5VUhU?= =?utf-8?B?aUR5VU56blV4bGFhMlZsRUQ4aE1vNHZRQTcyQVdESG91d2ZoWFFzQVU3bU1G?= =?utf-8?B?NlpUVmorSGtXYjVNbjd1QzFLckpob2VYclJETnRJVGR0M0NvRkVaVGZvMFRJ?= =?utf-8?B?ck9tdnhtTHBFMks2eGlaQkNyak5hMjYwSkFjSGVMc0NxcmpuSW9CZE9leCtO?= =?utf-8?B?aWV1RlZ5a3hySTZNTTVuOTVjOVFHRTN1ZmVRS2daUXRGQmhpUTRDenhVZnpD?= =?utf-8?B?alZBWDR2NXorOGNhdStHQUxObDBuN3VNaW42b1h5K05UaE1nTkxMTTRId29D?= =?utf-8?B?S21iMTZIdm1TTk13R3Z6TVh1RHpaREZrbFdVaUwzL09PSldTcktsSEllWnhx?= =?utf-8?B?SkJUWEVCU25raEI0aW9NK3JTRzQ4Q2dtenJCdnl2dXlDOFpwekpoa0ZRb1Q3?= =?utf-8?B?clY1NW1WQ3dJS0VQZDZWd2g1Uzl1U1FFb3NHNVo2NFFPTkFyZFk0Yk5sZWhh?= =?utf-8?B?WWJ0UWRlYWltNDhxdDlIRytjQmdSajAyZWwvN05JOE9hd0FDZzR1cURSTUVa?= =?utf-8?B?aWxmL1BlVlQ4VHE2d2pTQytldysxS2c2SS81MmdXb2tWeGRoWVNKRzh2U3l5?= =?utf-8?B?cWV5UXRDSUdCSzMvMkt0TER2c2JhVVRxWlJJUFZMZUJGeUFiZ2JmZ0F6dHVP?= =?utf-8?B?dzJrbGhoSlpNcmhpN3JZV05kNDNkdUgyZERlNnhIYmllUGNMWStyZkVWYm1n?= =?utf-8?B?UGFhY2VUNy92SGRjU25RZmtab042UmhGREdYeWtGM2o1aGNGcmgzWVdnb3ZN?= =?utf-8?B?TlpSQXNJeEI4cUllNFdrREVqRHp5MWsrazEvekZWWURQREcyZDlucTI5Q3Yw?= =?utf-8?B?T01hMU9pT2JZYXJoazdDNFl5Q25BSFBQclJUcWRpbEJBRHRxRlVFVlRDZXBN?= =?utf-8?B?Vm5kbVZSRXErQitiZThKM3Q4cVRMZXV3eW9MNVpEaG15Yzh4czNaN2o5M05B?= =?utf-8?B?VEp4d2I4QTZGZG9xL0w2RXlWdUFaODdoem5aYmN0OUljUy9Db2p5RjQzZ3Vs?= =?utf-8?B?MkpBQ3BYbTNyNVJoRU8wZStuOU52dnd4VFRvZ0hxVWZ1Z3d3TlVMSExIY2tD?= =?utf-8?B?WWw4ZXh5TjFHSDA5MmVkNjdjSENBSGtzRFVobnVOQU9IeThNWnFyY1RVanZD?= =?utf-8?B?WFcrdmZUUndoY0t0MWFXZXNoTjRQdFdCRDBuWnFYWmRndnF1dldwbFFyUUpD?= =?utf-8?B?OXc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: rust-for-linux@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: eviden.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB6PR07MB3368.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 82d2d1b1-a454-4518-f551-08dd54d76476 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2025 13:30:23.6310 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 7d1c7785-2d8a-437d-b842-1ed5d8fbe00a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 8Qh+4Hjh20XNCCoCOPVM0PBx+HWepNx8e6pI62wrv4HjJWn3sCE85dxxNcR+RmZ0RYNx+waLj2oqh9Qt8j79Zzimc5Nl33uJomK29AiTVf0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR07MB7307 V291bGRuJ3QgaXQgYmUgc2FmZXIgaWYgdGhlIGBhc19zbGljZV9tdXRgIGZ1bmN0aW9uIHRvb2sg YSBgJm11dCBzZWxmYCwNCmFsbG93aW5nIHRoZSBjb21waWxlciB0byBjb3JyZWN0bHkgY2hlY2sg dGhlIGJvcnJvd3MgKGxpa2UgYHN0YXJ0X3B0cl9tdXRgKQ0KDQpRdWVudGluDQoNCk9uIE1vbiBG ZWIgMjQsIDIwMjUgYXQgMTI6NDkgUE0gQ0VULCBBYmRpZWwgSmFudWxndWUgd3JvdGU6DQo+IENh dXRpb246IEV4dGVybmFsIGVtYWlsLiBEbyBub3Qgb3BlbiBhdHRhY2htZW50cyBvciBjbGljayBs aW5rcywgdW5sZXNzIHRoaXMgZW1haWwgY29tZXMgZnJvbSBhIGtub3duIHNlbmRlciBhbmQgeW91 IGtub3cgdGhlIGNvbnRlbnQgaXMgc2FmZS4NCj4NCj4NCj4gQWRkIGEgc2ltcGxlIGRtYSBjb2hl cmVudCBhbGxvY2F0b3IgcnVzdCBhYnN0cmFjdGlvbi4gQmFzZWQgb24NCj4gQW5kcmVhcyBIaW5k Ym9yZydzIGRtYSBhYnN0cmFjdGlvbnMgZnJvbSB0aGUgcm52bWUgZHJpdmVyLCB3aGljaA0KPiB3 YXMgYWxzbyBiYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgV2Vkc29uIEFsbWVpZGEgRmlsaG8uDQo+ DQo+IE5hY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQo+IFNpZ25lZC1v ZmYtYnk6IEFiZGllbCBKYW51bGd1ZSA8YWJkaWVsLmphbnVsZ3VlQGdtYWlsLmNvbT4NCj4gLS0t DQo+ICBydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oIHwgICAxICsNCj4gIHJ1c3QvaGVs cGVycy9kbWEuYyAgICAgICAgICAgICAgfCAgMTMgKw0KPiAgcnVzdC9oZWxwZXJzL2hlbHBlcnMu YyAgICAgICAgICB8ICAgMSArDQo+ICBydXN0L2tlcm5lbC9kbWEucnMgICAgICAgICAgICAgIHwg NDIxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBydXN0L2tlcm5lbC9saWIu cnMgICAgICAgICAgICAgIHwgICAxICsNCj4gIDUgZmlsZXMgY2hhbmdlZCwgNDM3IGluc2VydGlv bnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBydXN0L2hlbHBlcnMvZG1hLmMNCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBydXN0L2tlcm5lbC9kbWEucnMNCj4NCj4gZGlmZiAtLWdpdCBhL3J1c3Qv YmluZGluZ3MvYmluZGluZ3NfaGVscGVyLmggYi9ydXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBl ci5oDQo+IGluZGV4IDU1MzU0ZTRkZWMxNC4uZjY5YjA1MDI1ZTUyIDEwMDY0NA0KPiAtLS0gYS9y dXN0L2JpbmRpbmdzL2JpbmRpbmdzX2hlbHBlci5oDQo+ICsrKyBiL3J1c3QvYmluZGluZ3MvYmlu ZGluZ3NfaGVscGVyLmgNCj4gQEAgLTExLDYgKzExLDcgQEANCj4gICNpbmNsdWRlIDxsaW51eC9i bGtfdHlwZXMuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4NCj4gICNpbmNsdWRlIDxs aW51eC9jcmVkLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4gICNpbmNs dWRlIDxsaW51eC9lcnJuYW1lLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPg0KPiAg I2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4NCj4gZGlmZiAtLWdpdCBhL3J1c3QvaGVscGVycy9kbWEu YyBiL3J1c3QvaGVscGVycy9kbWEuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw MDAwMDAwMDAwMDAuLjMwZGEwNzlkMzY2Yw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL3J1c3Qv aGVscGVycy9kbWEuYw0KPiBAQCAtMCwwICsxLDEzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMA0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4N Cj4gKw0KPiAraW50IHJ1c3RfaGVscGVyX2RtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoc3RydWN0 IGRldmljZSAqZGV2LCB1NjQgbWFzaykNCj4gK3sNCj4gKyAgICAgICByZXR1cm4gZG1hX3NldF9t YXNrX2FuZF9jb2hlcmVudChkZXYsIG1hc2spOw0KPiArfQ0KPiArDQo+ICtpbnQgcnVzdF9oZWxw ZXJfZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spDQo+ICt7DQo+ICsg ICAgICAgcmV0dXJuIGRtYV9zZXRfbWFzayhkZXYsIG1hc2spOw0KPiArfQ0KPiBkaWZmIC0tZ2l0 IGEvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmMNCj4gaW5k ZXggMDY0MGI3ZTExNWJlLi44ZjM4MDhjOGI3ZmUgMTAwNjQ0DQo+IC0tLSBhL3J1c3QvaGVscGVy cy9oZWxwZXJzLmMNCj4gKysrIGIvcnVzdC9oZWxwZXJzL2hlbHBlcnMuYw0KPiBAQCAtMTMsNiAr MTMsNyBAQA0KPiAgI2luY2x1ZGUgImJ1aWxkX2J1Zy5jIg0KPiAgI2luY2x1ZGUgImNyZWQuYyIN Cj4gICNpbmNsdWRlICJkZXZpY2UuYyINCj4gKyNpbmNsdWRlICJkbWEuYyINCj4gICNpbmNsdWRl ICJlcnIuYyINCj4gICNpbmNsdWRlICJmcy5jIg0KPiAgI2luY2x1ZGUgImlvLmMiDQo+IGRpZmYg LS1naXQgYS9ydXN0L2tlcm5lbC9kbWEucnMgYi9ydXN0L2tlcm5lbC9kbWEucnMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iNGRkNWQ0MTE3MTENCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9ydXN0L2tlcm5lbC9kbWEucnMNCj4gQEAgLTAsMCArMSw0MjEg QEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ICsNCj4gKy8vISBE aXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKS4NCj4gKy8vIQ0KPiArLy8hIEMgaGVhZGVyOiBbYGlu Y2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaGBdKHNyY3RyZWUvaW5jbHVkZS9saW51eC9kbWEtbWFw cGluZy5oKQ0KPiArDQo+ICt1c2UgY3JhdGU6OnsNCj4gKyAgICBiaW5kaW5ncywgYnVpbGRfYXNz ZXJ0LA0KPiArICAgIGRldmljZTo6RGV2aWNlLA0KPiArICAgIGVycm9yOjpjb2RlOjoqLA0KPiAr ICAgIGVycm9yOjpSZXN1bHQsDQo+ICsgICAgdHJhbnNtdXRlOjp7QXNCeXRlcywgRnJvbUJ5dGVz fSwNCj4gKyAgICB0eXBlczo6QVJlZiwNCj4gK307DQo+ICsNCj4gKy8vLyBJbmZvcm0gdGhlIGtl cm5lbCBhYm91dCB0aGUgZGV2aWNlJ3MgRE1BIGFkZHJlc3NpbmcgY2FwYWJpbGl0aWVzLiBUaGlz IHdpbGwgc2V0IHRoZSBtYXNrIGZvcg0KPiArLy8vIGJvdGggc3RyZWFtaW5nIGFuZCBjb2hlcmVu dCBBUElzIHRvZ2V0aGVyLg0KPiArcHViIGZuIGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2 OiAmRGV2aWNlLCBtYXNrOiB1NjQpIC0+IGkzMiB7DQo+ICsgICAgLy8gU0FGRVRZOiBkZXZpY2Ug cG9pbnRlciBpcyBndWFyYW50ZWVkIGFzIHZhbGlkIGJ5IGludmFyaWFudCBvbiBgRGV2aWNlYC4N Cj4gKyAgICB1bnNhZmUgeyBiaW5kaW5nczo6ZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYu YXNfcmF3KCksIG1hc2spIH0NCj4gK30NCj4gKw0KPiArLy8vIFNhbWUgYXMgYGRtYV9zZXRfbWFz a19hbmRfY29oZXJlbnRgLCBidXQgc2V0IHRoZSBtYXNrIG9ubHkgZm9yIHN0cmVhbWluZyBtYXBw aW5ncy4NCj4gK3B1YiBmbiBkbWFfc2V0X21hc2soZGV2OiAmRGV2aWNlLCBtYXNrOiB1NjQpIC0+ IGkzMiB7DQo+ICsgICAgLy8gU0FGRVRZOiBkZXZpY2UgcG9pbnRlciBpcyBndWFyYW50ZWVkIGFz IHZhbGlkIGJ5IGludmFyaWFudCBvbiBgRGV2aWNlYC4NCj4gKyAgICB1bnNhZmUgeyBiaW5kaW5n czo6ZG1hX3NldF9tYXNrKGRldi5hc19yYXcoKSwgbWFzaykgfQ0KPiArfQ0KPiArDQo+ICsvLy8g UG9zc2libGUgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggYSBETUEgbWFwcGluZy4NCj4gKy8v Lw0KPiArLy8vIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIG9wZXJhdG9ycyBgfGAsIGAm YCwgYW5kIGAhYC4NCj4gKy8vLw0KPiArLy8vIFZhbHVlcyBjYW4gYmUgdXNlZCBmcm9tIHRoZSBb YGF0dHJzYF0gbW9kdWxlLg0KPiArI1tkZXJpdmUoQ2xvbmUsIENvcHksIFBhcnRpYWxFcSldDQo+ ICsjW3JlcHIodHJhbnNwYXJlbnQpXQ0KPiArcHViIHN0cnVjdCBBdHRycyh1MzIpOw0KPiArDQo+ ICtpbXBsIEF0dHJzIHsNCj4gKyAgICAvLy8gR2V0IHRoZSByYXcgcmVwcmVzZW50YXRpb24gb2Yg dGhpcyBhdHRyaWJ1dGUuDQo+ICsgICAgcHViKGNyYXRlKSBmbiBhc19yYXcoc2VsZikgLT4gY3Jh dGU6OmZmaTo6Y191bG9uZyB7DQo+ICsgICAgICAgIHNlbGYuMCBhcyBfDQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgLy8vIENoZWNrIHdoZXRoZXIgYGZsYWdzYCBpcyBjb250YWluZWQgaW4gYHNlbGZg Lg0KPiArICAgIHB1YiBmbiBjb250YWlucyhzZWxmLCBmbGFnczogQXR0cnMpIC0+IGJvb2wgew0K PiArICAgICAgICAoc2VsZiAmIGZsYWdzKSA9PSBmbGFncw0KPiArICAgIH0NCj4gK30NCj4gKw0K PiAraW1wbCBjb3JlOjpvcHM6OkJpdE9yIGZvciBBdHRycyB7DQo+ICsgICAgdHlwZSBPdXRwdXQg PSBTZWxmOw0KPiArICAgIGZuIGJpdG9yKHNlbGYsIHJoczogU2VsZikgLT4gU2VsZjo6T3V0cHV0 IHsNCj4gKyAgICAgICAgU2VsZihzZWxmLjAgfCByaHMuMCkNCj4gKyAgICB9DQo+ICt9DQo+ICsN Cj4gK2ltcGwgY29yZTo6b3BzOjpCaXRBbmQgZm9yIEF0dHJzIHsNCj4gKyAgICB0eXBlIE91dHB1 dCA9IFNlbGY7DQo+ICsgICAgZm4gYml0YW5kKHNlbGYsIHJoczogU2VsZikgLT4gU2VsZjo6T3V0 cHV0IHsNCj4gKyAgICAgICAgU2VsZihzZWxmLjAgJiByaHMuMCkNCj4gKyAgICB9DQo+ICt9DQo+ ICsNCj4gK2ltcGwgY29yZTo6b3BzOjpOb3QgZm9yIEF0dHJzIHsNCj4gKyAgICB0eXBlIE91dHB1 dCA9IFNlbGY7DQo+ICsgICAgZm4gbm90KHNlbGYpIC0+IFNlbGY6Ok91dHB1dCB7DQo+ICsgICAg ICAgIFNlbGYoIXNlbGYuMCkNCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8vLyBETUEgbWFwcGlu ZyBhdHRycmlidXRlcy4NCj4gK3B1YiBtb2QgYXR0cnMgew0KPiArICAgIHVzZSBzdXBlcjo6QXR0 cnM7DQo+ICsNCj4gKyAgICAvLy8gU3BlY2lmaWVzIHRoYXQgcmVhZHMgYW5kIHdyaXRlcyB0byB0 aGUgbWFwcGluZyBtYXkgYmUgd2Vha2x5IG9yZGVyZWQsIHRoYXQgaXMgdGhhdCByZWFkcw0KPiAr ICAgIC8vLyBhbmQgd3JpdGVzIG1heSBwYXNzIGVhY2ggb3RoZXIuDQo+ICsgICAgcHViIGNvbnN0 IERNQV9BVFRSX1dFQUtfT1JERVJJTkc6IEF0dHJzID0gQXR0cnMoYmluZGluZ3M6OkRNQV9BVFRS X1dFQUtfT1JERVJJTkcpOw0KPiArDQo+ICsgICAgLy8vIFNwZWNpZmllcyB0aGF0IHdyaXRlcyB0 byB0aGUgbWFwcGluZyBtYXkgYmUgYnVmZmVyZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4NCj4g KyAgICBwdWIgY29uc3QgRE1BX0FUVFJfV1JJVEVfQ09NQklORTogQXR0cnMgPSBBdHRycyhiaW5k aW5nczo6RE1BX0FUVFJfV1JJVEVfQ09NQklORSk7DQo+ICsNCj4gKyAgICAvLy8gTGV0cyB0aGUg cGxhdGZvcm0gdG8gYXZvaWQgY3JlYXRpbmcgYSBrZXJuZWwgdmlydHVhbCBtYXBwaW5nIGZvciB0 aGUgYWxsb2NhdGVkIGJ1ZmZlci4NCj4gKyAgICBwdWIgY29uc3QgRE1BX0FUVFJfTk9fS0VSTkVM X01BUFBJTkc6IEF0dHJzID0gQXR0cnMoYmluZGluZ3M6OkRNQV9BVFRSX05PX0tFUk5FTF9NQVBQ SU5HKTsNCj4gKw0KPiArICAgIC8vLyBBbGxvd3MgcGxhdGZvcm0gY29kZSB0byBza2lwIHN5bmNo cm9uaXphdGlvbiBvZiB0aGUgQ1BVIGNhY2hlIGZvciB0aGUgZ2l2ZW4gYnVmZmVyIGFzc3VtaW5n DQo+ICsgICAgLy8vIHRoYXQgaXQgaGFzIGJlZW4gYWxyZWFkeSB0cmFuc2ZlcnJlZCB0byAnZGV2 aWNlJyBkb21haW4uDQo+ICsgICAgcHViIGNvbnN0IERNQV9BVFRSX1NLSVBfQ1BVX1NZTkM6IEF0 dHJzID0gQXR0cnMoYmluZGluZ3M6OkRNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpOw0KPiArDQo+ICsg ICAgLy8vIEZvcmNlcyBjb250aWd1b3VzIGFsbG9jYXRpb24gb2YgdGhlIGJ1ZmZlciBpbiBwaHlz aWNhbCBtZW1vcnkuDQo+ICsgICAgcHViIGNvbnN0IERNQV9BVFRSX0ZPUkNFX0NPTlRJR1VPVVM6 IEF0dHJzID0gQXR0cnMoYmluZGluZ3M6OkRNQV9BVFRSX0ZPUkNFX0NPTlRJR1VPVVMpOw0KPiAr DQo+ICsgICAgLy8vIFRoaXMgaXMgYSBoaW50IHRvIHRoZSBETUEtbWFwcGluZyBzdWJzeXN0ZW0g dGhhdCBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUgdGltZSB0byB0cnkNCj4gKyAgICAvLy8g dG8gYWxsb2NhdGUgbWVtb3J5IHRvIGluIGEgd2F5IHRoYXQgZ2l2ZXMgYmV0dGVyIFRMQiBlZmZp Y2llbmN5Lg0KPiArICAgIHB1YiBjb25zdCBETUFfQVRUUl9BTExPQ19TSU5HTEVfUEFHRVM6IEF0 dHJzID0gQXR0cnMoYmluZGluZ3M6OkRNQV9BVFRSX0FMTE9DX1NJTkdMRV9QQUdFUyk7DQo+ICsN Cj4gKyAgICAvLy8gVGhpcyB0ZWxscyB0aGUgRE1BLW1hcHBpbmcgc3Vic3lzdGVtIHRvIHN1cHBy ZXNzIGFsbG9jYXRpb24gZmFpbHVyZSByZXBvcnRzIChzaW1pbGFybHkgdG8NCj4gKyAgICAvLy8g X19HRlBfTk9XQVJOKS4NCj4gKyAgICBwdWIgY29uc3QgRE1BX0FUVFJfTk9fV0FSTjogQXR0cnMg PSBBdHRycyhiaW5kaW5nczo6RE1BX0FUVFJfTk9fV0FSTik7DQo+ICsNCj4gKyAgICAvLy8gVXNl ZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbHkgYWNjZXNzaWJsZSBhdCBhbiBl bGV2YXRlZCBwcml2aWxlZ2UgbGV2ZWwgKGFuZA0KPiArICAgIC8vLyBpZGVhbGx5IGluYWNjZXNz aWJsZSBvciBhdCBsZWFzdCByZWFkLW9ubHkgYXQgbGVzc2VyLXByaXZpbGVnZWQgbGV2ZWxzKS4N Cj4gKyAgICBwdWIgY29uc3QgRE1BX0FUVFJfUFJJVklMRUdFRDogQXR0cnMgPSBBdHRycyhiaW5k aW5nczo6RE1BX0FUVFJfUFJJVklMRUdFRCk7DQo+ICt9DQo+ICsNCj4gKy8vLyBBbiBhYnN0cmFj dGlvbiBvZiB0aGUgYGRtYV9hbGxvY19jb2hlcmVudGAgQVBJLg0KPiArLy8vDQo+ICsvLy8gVGhp cyBpcyBhbiBhYnN0cmFjdGlvbiBhcm91bmQgdGhlIGBkbWFfYWxsb2NfY29oZXJlbnRgIEFQSSB3 aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIGFuZCBtYXANCj4gKy8vLyBsYXJnZSBjb25zaXN0ZW50 IERNQSByZWdpb25zLg0KPiArLy8vDQo+ICsvLy8gQSBbYENvaGVyZW50QWxsb2NhdGlvbmBdIGlu c3RhbmNlIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIHJlZ2lvbiAoaW4gdGhl DQo+ICsvLy8gcHJvY2Vzc29yJ3MgdmlydHVhbCBhZGRyZXNzIHNwYWNlKSBhbmQgdGhlIGRldmlj ZSBhZGRyZXNzIHdoaWNoIGNhbiBiZSBnaXZlbiB0byB0aGUgZGV2aWNlDQo+ICsvLy8gYXMgdGhl IERNQSBhZGRyZXNzIGJhc2Ugb2YgdGhlIHJlZ2lvbi4gVGhlIHJlZ2lvbiBpcyByZWxlYXNlZCBv bmNlIFtgQ29oZXJlbnRBbGxvY2F0aW9uYF0NCj4gKy8vLyBpcyBkcm9wcGVkLg0KPiArLy8vDQo+ ICsvLy8gIyBJbnZhcmlhbnRzDQo+ICsvLy8NCj4gKy8vLyBGb3IgdGhlIGxpZmV0aW1lIG9mIGFu IGluc3RhbmNlIG9mIFtgQ29oZXJlbnRBbGxvY2F0aW9uYF0sIHRoZSBjcHUgYWRkcmVzcyBpcyBh IHZhbGlkIHBvaW50ZXINCj4gKy8vLyB0byBhbiBhbGxvY2F0ZWQgcmVnaW9uIG9mIGNvbnNpc3Rl bnQgbWVtb3J5IGFuZCB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2UuDQo+ICtwdWIg c3RydWN0IENvaGVyZW50QWxsb2NhdGlvbjxUOiBBc0J5dGVzICsgRnJvbUJ5dGVzPiB7DQo+ICsg ICAgZGV2OiBBUmVmPERldmljZT4sDQo+ICsgICAgZG1hX2hhbmRsZTogYmluZGluZ3M6OmRtYV9h ZGRyX3QsDQo+ICsgICAgY291bnQ6IHVzaXplLA0KPiArICAgIGNwdV9hZGRyOiAqbXV0IFQsDQo+ ICsgICAgZG1hX2F0dHJzOiBBdHRycywNCj4gK30NCj4gKw0KPiAraW1wbDxUOiBBc0J5dGVzICsg RnJvbUJ5dGVzPiBDb2hlcmVudEFsbG9jYXRpb248VD4gew0KPiArICAgIC8vLyBBbGxvY2F0ZXMg YSByZWdpb24gb2YgYHNpemVfb2Y6OjxUPiAqIGNvdW50YCBvZiBjb25zaXN0ZW50IG1lbW9yeS4N Cj4gKyAgICAvLy8NCj4gKyAgICAvLy8gIyBFeGFtcGxlcw0KPiArICAgIC8vLw0KPiArICAgIC8v LyBgYGANCj4gKyAgICAvLy8gdXNlIGtlcm5lbDo6ZGV2aWNlOjpEZXZpY2U7DQo+ICsgICAgLy8v IHVzZSBrZXJuZWw6OmRtYTo6e2F0dHJzOjoqLCBDb2hlcmVudEFsbG9jYXRpb259Ow0KPiArICAg IC8vLw0KPiArICAgIC8vLyAjIGZuIHRlc3QoZGV2OiAmRGV2aWNlKSAtPiBSZXN1bHQgew0KPiAr ICAgIC8vLyBsZXQgYzogQ29oZXJlbnRBbGxvY2F0aW9uPHU2ND4gPSBDb2hlcmVudEFsbG9jYXRp b246OmFsbG9jX2F0dHJzKGRldi5pbnRvKCksIDQsIEdGUF9LRVJORUwsDQo+ICsgICAgLy8vICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRE1BX0FUVFJfTk9fV0FSTik/Ow0KPiArICAgIC8vLyAjIE9rOjo8KCksIEVycm9yPigo KSkgfQ0KPiArICAgIC8vLyBgYGANCj4gKyAgICBwdWIgZm4gYWxsb2NfYXR0cnMoDQo+ICsgICAg ICAgIGRldjogQVJlZjxEZXZpY2U+LA0KPiArICAgICAgICBjb3VudDogdXNpemUsDQo+ICsgICAg ICAgIGdmcF9mbGFnczoga2VybmVsOjphbGxvYzo6RmxhZ3MsDQo+ICsgICAgICAgIGRtYV9hdHRy czogQXR0cnMsDQo+ICsgICAgKSAtPiBSZXN1bHQ8Q29oZXJlbnRBbGxvY2F0aW9uPFQ+PiB7DQo+ ICsgICAgICAgIGJ1aWxkX2Fzc2VydCEoDQo+ICsgICAgICAgICAgICBjb3JlOjptZW06OnNpemVf b2Y6OjxUPigpID4gMCwNCj4gKyAgICAgICAgICAgICJJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9y IHRoZSBhbGxvY2F0ZWQgdHlwZSB0byBiZSBhIFpTVCINCj4gKyAgICAgICAgKTsNCj4gKw0KPiAr ICAgICAgICBsZXQgc2l6ZSA9IGNvdW50DQo+ICsgICAgICAgICAgICAuY2hlY2tlZF9tdWwoY29y ZTo6bWVtOjpzaXplX29mOjo8VD4oKSkNCj4gKyAgICAgICAgICAgIC5va19vcihFT1ZFUkZMT1cp PzsNCj4gKyAgICAgICAgbGV0IG11dCBkbWFfaGFuZGxlID0gMDsNCj4gKyAgICAgICAgLy8gU0FG RVRZOiBkZXZpY2UgcG9pbnRlciBpcyBndWFyYW50ZWVkIGFzIHZhbGlkIGJ5IGludmFyaWFudCBv biBgRGV2aWNlYC4NCj4gKyAgICAgICAgLy8gV2UgZW5zdXJlIHRoYXQgd2UgY2F0Y2ggdGhlIGZh aWx1cmUgb24gdGhpcyBmdW5jdGlvbiBhbmQgdGhyb3cgYW4gRU5PTUVNDQo+ICsgICAgICAgIGxl dCByZXQgPSB1bnNhZmUgew0KPiArICAgICAgICAgICAgYmluZGluZ3M6OmRtYV9hbGxvY19hdHRy cygNCj4gKyAgICAgICAgICAgICAgICBkZXYuYXNfcmF3KCksDQo+ICsgICAgICAgICAgICAgICAg c2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAmbXV0IGRtYV9oYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgZ2ZwX2ZsYWdzLmFzX3JhdygpLA0KPiArICAgICAgICAgICAgICAgIGRtYV9hdHRycy5h c19yYXcoKSwNCj4gKyAgICAgICAgICAgICkNCj4gKyAgICAgICAgfTsNCj4gKyAgICAgICAgaWYg cmV0LmlzX251bGwoKSB7DQo+ICsgICAgICAgICAgICByZXR1cm4gRXJyKEVOT01FTSk7DQo+ICsg ICAgICAgIH0NCj4gKyAgICAgICAgLy8gSU5WQVJJQU5UOiBXZSBqdXN0IHN1Y2Nlc3NmdWxseSBh bGxvY2F0ZWQgYSBjb2hlcmVudCByZWdpb24gd2hpY2ggaXMgYWNjZXNzaWJsZSBmb3INCj4gKyAg ICAgICAgLy8gYGNvdW50YCBlbGVtZW50cywgaGVuY2UgdGhlIGNwdSBhZGRyZXNzIGlzIHZhbGlk LiBXZSBhbHNvIGhvbGQgYSByZWZjb3VudGVkIHJlZmVyZW5jZQ0KPiArICAgICAgICAvLyB0byB0 aGUgZGV2aWNlLg0KPiArICAgICAgICBPayhTZWxmIHsNCj4gKyAgICAgICAgICAgIGRldiwNCj4g KyAgICAgICAgICAgIGRtYV9oYW5kbGUsDQo+ICsgICAgICAgICAgICBjb3VudCwNCj4gKyAgICAg ICAgICAgIGNwdV9hZGRyOiByZXQgYXMgKm11dCBULA0KPiArICAgICAgICAgICAgZG1hX2F0dHJz LA0KPiArICAgICAgICB9KQ0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vLyBQZXJmb3JtcyB0aGUg c2FtZSBmdW5jdGlvbmFsaXR5IGFzIGBhbGxvY19hdHRyc2AsIGV4Y2VwdCB0aGUgYGRtYV9hdHRy c2AgaXMgMCBieSBkZWZhdWx0Lg0KPiArICAgIHB1YiBmbiBhbGxvY19jb2hlcmVudCgNCj4gKyAg ICAgICAgZGV2OiBBUmVmPERldmljZT4sDQo+ICsgICAgICAgIGNvdW50OiB1c2l6ZSwNCj4gKyAg ICAgICAgZ2ZwX2ZsYWdzOiBrZXJuZWw6OmFsbG9jOjpGbGFncywNCj4gKyAgICApIC0+IFJlc3Vs dDxDb2hlcmVudEFsbG9jYXRpb248VD4+IHsNCj4gKyAgICAgICAgQ29oZXJlbnRBbGxvY2F0aW9u OjphbGxvY19hdHRycyhkZXYsIGNvdW50LCBnZnBfZmxhZ3MsIEF0dHJzKDApKQ0KPiArICAgIH0N Cj4gKw0KPiArICAgIC8vLyBDcmVhdGUgYSBkdXBsaWNhdGUgb2YgdGhlIGBDb2hlcmVudEFsbG9j YXRpb25gIG9iamVjdCBidXQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGRyb3BwZWQuDQo+ICsgICAg cHViIGZuIHNraXBfZHJvcChzZWxmKSAtPiBDb2hlcmVudEFsbG9jYXRpb248VD4gew0KPiArICAg ICAgICBsZXQgbWUgPSBjb3JlOjptZW06Ok1hbnVhbGx5RHJvcDo6bmV3KHNlbGYpOw0KPiArICAg ICAgICBTZWxmIHsNCj4gKyAgICAgICAgICAgIC8vIFNBRkVUWTogVGhlIHJlZmNvdW50IG9mIGBk ZXZgIHdpbGwgbm90IGJlIGRlY3JlbWVudGVkIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGFjdHVhbGx5 DQo+ICsgICAgICAgICAgICAvLyBkdXBsaWNhZmUgYEFSZWZgIGFuZCB0aGUgdXNlIG9mIGBNYW51 YWxseURyb3BgIGZvcmdldHMgdGhlIG9yaWdpbmFscy4NCj4gKyAgICAgICAgICAgIGRldjogdW5z YWZlIHsgY29yZTo6cHRyOjpyZWFkKCZtZS5kZXYpIH0sDQo+ICsgICAgICAgICAgICBkbWFfaGFu ZGxlOiBtZS5kbWFfaGFuZGxlLA0KPiArICAgICAgICAgICAgY291bnQ6IG1lLmNvdW50LA0KPiAr ICAgICAgICAgICAgY3B1X2FkZHI6IG1lLmNwdV9hZGRyLA0KPiArICAgICAgICAgICAgZG1hX2F0 dHJzOiBtZS5kbWFfYXR0cnMsDQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICAv Ly8gUmV0dXJucyB0aGUgYmFzZSBhZGRyZXNzIHRvIHRoZSBhbGxvY2F0ZWQgcmVnaW9uIGluIHRo ZSBDUFUncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuDQo+ICsgICAgcHViIGZuIHN0YXJ0X3B0cigm c2VsZikgLT4gKmNvbnN0IFQgew0KPiArICAgICAgICBzZWxmLmNwdV9hZGRyDQo+ICsgICAgfQ0K PiArDQo+ICsgICAgLy8vIFJldHVybnMgdGhlIGJhc2UgYWRkcmVzcyB0byB0aGUgYWxsb2NhdGVk IHJlZ2lvbiBpbiB0aGUgQ1BVJ3MgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGFzDQo+ICsgICAgLy8v IGEgbXV0YWJsZSBwb2ludGVyLg0KPiArICAgIHB1YiBmbiBzdGFydF9wdHJfbXV0KCZtdXQgc2Vs ZikgLT4gKm11dCBUIHsNCj4gKyAgICAgICAgc2VsZi5jcHVfYWRkcg0KPiArICAgIH0NCj4gKw0K PiArICAgIC8vLyBSZXR1cm5zIGEgRE1BIGhhbmRsZSB3aGljaCBtYXkgZ2l2ZW4gdG8gdGhlIGRl dmljZSBhcyB0aGUgRE1BIGFkZHJlc3MgYmFzZSBvZg0KPiArICAgIC8vLyB0aGUgcmVnaW9uLg0K PiArICAgIHB1YiBmbiBkbWFfaGFuZGxlKCZzZWxmKSAtPiBiaW5kaW5nczo6ZG1hX2FkZHJfdCB7 DQo+ICsgICAgICAgIHNlbGYuZG1hX2hhbmRsZQ0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vLyBS ZXR1cm5zIHRoZSBkYXRhIGZyb20gdGhlIHJlZ2lvbiBzdGFydGluZyBmcm9tIGBvZmZzZXRgIGFz IGEgc2xpY2UuDQo+ICsgICAgLy8vIGBvZmZzZXRgIGFuZCBgY291bnRgIGFyZSBpbiB1bml0cyBv ZiBgVGAsIG5vdCB0aGUgbnVtYmVyIG9mIGJ5dGVzLg0KPiArICAgIC8vLw0KPiArICAgIC8vLyBE dWUgdG8gdGhlIHNhZmV0eSByZXF1aXJlbWVudHMgb2Ygc2xpY2UsIHRoZSBjYWxsZXIgc2hvdWxk IGNvbnNpZGVyIHRoYXQgdGhlIHJlZ2lvbiBjb3VsZA0KPiArICAgIC8vLyBiZSBtb2RpZmllZCBi eSB0aGUgZGV2aWNlIGF0IGFueXRpbWUgKHNlZSB0aGUgc2FmZXR5IGJsb2NrIGJlbG93KS4gRm9y IHJpbmdidWZmZXIgdHlwZSBvZg0KPiArICAgIC8vLyByL3cgYWNjZXNzIG9yIHVzZS1jYXNlcyB3 aGVyZSB0aGUgcG9pbnRlciB0byB0aGUgbGl2ZSBkYXRhIGlzIG5lZWRlZCwgYHN0YXJ0X3B0cigp YCBvcg0KPiArICAgIC8vLyBgc3RhcnRfcHRyX211dCgpYCBjb3VsZCBiZSB1c2VkIGluc3RlYWQu DQo+ICsgICAgLy8vDQo+ICsgICAgLy8vICMgU2FmZXR5DQo+ICsgICAgLy8vDQo+ICsgICAgLy8v IENhbGxlcnMgbXVzdCBlbnN1cmUgdGhhdCBubyBoYXJkd2FyZSBvcGVyYXRpb25zIHRoYXQgaW52 b2x2ZSB0aGUgYnVmZmVyIGFyZSBjdXJyZW50bHkNCj4gKyAgICAvLy8gdGFraW5nIHBsYWNlIHdo aWxlIHRoZSByZXR1cm5lZCBzbGljZSBpcyBsaXZlLg0KPiArICAgIHB1YiB1bnNhZmUgZm4gYXNf c2xpY2UoJnNlbGYsIG9mZnNldDogdXNpemUsIGNvdW50OiB1c2l6ZSkgLT4gUmVzdWx0PCZbVF0+ IHsNCj4gKyAgICAgICAgbGV0IGVuZCA9IG9mZnNldC5jaGVja2VkX2FkZChjb3VudCkub2tfb3Io RU9WRVJGTE9XKT87DQo+ICsgICAgICAgIGlmIGVuZCA+PSBzZWxmLmNvdW50IHsNCj4gKyAgICAg ICAgICAgIHJldHVybiBFcnIoRUlOVkFMKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICAvLyBT QUZFVFk6DQo+ICsgICAgICAgIC8vIC0gVGhlIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHR5cGUg aW52YXJpYW50IG9uIGBDb2hlcmVudEFsbG9jYXRpb25gLA0KPiArICAgICAgICAvLyB3ZSd2ZSBq dXN0IGNoZWNrZWQgdGhhdCB0aGUgcmFuZ2UgYW5kIGluZGV4IGlzIHdpdGhpbiBib3VuZHMuIFRo ZSBpbW11dGFiaWxpdHkgb2YgdGhlDQo+ICsgICAgICAgIC8vIG9mIGRhdGEgaXMgYWxzbyBndWFy YW50ZWVkIGJ5IHRoZSBzYWZldHkgcmVxdWlyZW1lbnRzIG9mIHRoZSBmdW5jdGlvbi4NCj4gKyAg ICAgICAgLy8gLSBgb2Zmc2V0YCBjYW4ndCBvdmVyZmxvdyBzaW5jZSBpdCBpcyBzbWFsbGVyIHRo YW4gYHNlbGYuY291bnRgIGFuZCB3ZSd2ZSBjaGVja2VkDQo+ICsgICAgICAgIC8vIHRoYXQgYHNl bGYuY291bnRgIHdvbid0IG92ZXJmbG93IGVhcmx5IGluIHRoZSBjb25zdHJ1Y3Rvci4NCj4gKyAg ICAgICAgT2sodW5zYWZlIHsgY29yZTo6c2xpY2U6OmZyb21fcmF3X3BhcnRzKHNlbGYuY3B1X2Fk ZHIuYWRkKG9mZnNldCksIGNvdW50KSB9KQ0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vLyBQZXJm b3JtcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIGBhc19zbGljZWAsIGV4Y2VwdCB0aGF0IGEg bXV0YWJsZSBzbGljZSBpcyByZXR1cm5lZC4NCj4gKyAgICAvLy8gU2VlIHRoYXQgbWV0aG9kIGZv ciBkb2N1bWVudGF0aW9uIGFuZCBzYWZldHkgcmVxdWlyZW1lbnRzLg0KPiArICAgIC8vLw0KPiAr ICAgIC8vLyAjIFNhZmV0eQ0KPiArICAgIC8vLw0KPiArICAgIC8vLyBJdCBpcyB0aGUgY2FsbGVy cyByZXNwb25zaWJpbGl0eSB0byBhdm9pZCBzZXBhcmF0ZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3Nl cyB0byB0aGUgcmVnaW9uDQo+ICsgICAgLy8vIHdoaWxlIHRoZSByZXR1cm5lZCBzbGljZSBpcyBs aXZlLg0KPiArICAgIHB1YiB1bnNhZmUgZm4gYXNfc2xpY2VfbXV0KCZzZWxmLCBvZmZzZXQ6IHVz aXplLCBjb3VudDogdXNpemUpIC0+IFJlc3VsdDwmbXV0IFtUXT4gew0KPiArICAgICAgICBsZXQg ZW5kID0gb2Zmc2V0LmNoZWNrZWRfYWRkKGNvdW50KS5va19vcihFT1ZFUkZMT1cpPzsNCj4gKyAg ICAgICAgaWYgZW5kID49IHNlbGYuY291bnQgew0KPiArICAgICAgICAgICAgcmV0dXJuIEVycihF SU5WQUwpOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIC8vIFNBRkVUWToNCj4gKyAgICAgICAg Ly8gLSBUaGUgcG9pbnRlciBpcyB2YWxpZCBkdWUgdG8gdHlwZSBpbnZhcmlhbnQgb24gYENvaGVy ZW50QWxsb2NhdGlvbmAsDQo+ICsgICAgICAgIC8vIHdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHRo ZSByYW5nZSBhbmQgaW5kZXggaXMgd2l0aGluIGJvdW5kcy4gVGhlIGltbXV0YWJpbGl0eSBvZiB0 aGUNCj4gKyAgICAgICAgLy8gb2YgZGF0YSBpcyBhbHNvIGd1YXJhbnRlZWQgYnkgdGhlIHNhZmV0 eSByZXF1aXJlbWVudHMgb2YgdGhlIGZ1bmN0aW9uLg0KPiArICAgICAgICAvLyAtIGBvZmZzZXRg IGNhbid0IG92ZXJmbG93IHNpbmNlIGl0IGlzIHNtYWxsZXIgdGhhbiBgc2VsZi5jb3VudGAgYW5k IHdlJ3ZlIGNoZWNrZWQNCj4gKyAgICAgICAgLy8gdGhhdCBgc2VsZi5jb3VudGAgd29uJ3Qgb3Zl cmZsb3cgZWFybHkgaW4gdGhlIGNvbnN0cnVjdG9yLg0KPiArICAgICAgICBPayh1bnNhZmUgeyBj b3JlOjpzbGljZTo6ZnJvbV9yYXdfcGFydHNfbXV0KHNlbGYuY3B1X2FkZHIuYWRkKG9mZnNldCks IGNvdW50KSB9KQ0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vLyBXcml0ZXMgZGF0YSB0byB0aGUg cmVnaW9uIHN0YXJ0aW5nIGZyb20gYG9mZnNldGAuIGBvZmZzZXRgIGlzIGluIHVuaXRzIG9mIGBU YCwgbm90IHRoZQ0KPiArICAgIC8vLyBudW1iZXIgb2YgYnl0ZXMuDQo+ICsgICAgLy8vDQo+ICsg ICAgLy8vICMgRXhhbXBsZXMNCj4gKyAgICAvLy8NCj4gKyAgICAvLy8gYGBgDQo+ICsgICAgLy8v ICMgZm4gdGVzdChhbGxvYzogJm11dCBrZXJuZWw6OmRtYTo6Q29oZXJlbnRBbGxvY2F0aW9uPHU4 PikgLT4gUmVzdWx0IHsNCj4gKyAgICAvLy8gbGV0IHNvbWVkYXRhOiBbdTg7IDRdID0gWzB4Zjsg NF07DQo+ICsgICAgLy8vIGxldCBidWY6ICZbdThdID0gJnNvbWVkYXRhOw0KPiArICAgIC8vLyBh bGxvYy53cml0ZShidWYsIDApPzsNCj4gKyAgICAvLy8gIyBPazo6PCgpLCBFcnJvcj4oKCkpIH0N Cj4gKyAgICAvLy8gYGBgDQo+ICsgICAgcHViIGZuIHdyaXRlKCZzZWxmLCBzcmM6ICZbVF0sIG9m ZnNldDogdXNpemUpIC0+IFJlc3VsdCB7DQo+ICsgICAgICAgIGxldCBlbmQgPSBvZmZzZXQuY2hl Y2tlZF9hZGQoc3JjLmxlbigpKS5va19vcihFT1ZFUkZMT1cpPzsNCj4gKyAgICAgICAgaWYgZW5k ID49IHNlbGYuY291bnQgew0KPiArICAgICAgICAgICAgcmV0dXJuIEVycihFSU5WQUwpOw0KPiAr ICAgICAgICB9DQo+ICsgICAgICAgIC8vIFNBRkVUWToNCj4gKyAgICAgICAgLy8gLSBUaGUgcG9p bnRlciBpcyB2YWxpZCBkdWUgdG8gdHlwZSBpbnZhcmlhbnQgb24gYENvaGVyZW50QWxsb2NhdGlv bmANCj4gKyAgICAgICAgLy8gYW5kIHdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHRoZSByYW5nZSBh bmQgaW5kZXggaXMgd2l0aGluIGJvdW5kcy4NCj4gKyAgICAgICAgLy8gLSBgb2Zmc2V0YCBjYW4n dCBvdmVyZmxvdyBzaW5jZSBpdCBpcyBzbWFsbGVyIHRoYW4gYHNlbGYuY291bnRgIGFuZCB3ZSd2 ZSBjaGVja2VkDQo+ICsgICAgICAgIC8vIHRoYXQgYHNlbGYuY291bnRgIHdvbid0IG92ZXJmbG93 IGVhcmx5IGluIHRoZSBjb25zdHJ1Y3Rvci4NCj4gKyAgICAgICAgdW5zYWZlIHsNCj4gKyAgICAg ICAgICAgIGNvcmU6OnB0cjo6Y29weV9ub25vdmVybGFwcGluZyhzcmMuYXNfcHRyKCksIHNlbGYu Y3B1X2FkZHIuYWRkKG9mZnNldCksIHNyYy5sZW4oKSkNCj4gKyAgICAgICAgfTsNCj4gKyAgICAg ICAgT2soKCkpDQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8vIFJldHJpZXZlIGEgc2luZ2xlIGVu dHJ5IGZyb20gdGhlIHJlZ2lvbiB3aXRoIGJvdW5kcyBjaGVja2luZy4gYG9mZnNldGAgaXMgaW4g dW5pdHMgb2YgYFRgLA0KPiArICAgIC8vLyBub3QgdGhlIG51bWJlciBvZiBieXRlcy4NCj4gKyAg ICBwdWIgZm4gaXRlbV9mcm9tX2luZGV4KCZzZWxmLCBvZmZzZXQ6IHVzaXplKSAtPiBSZXN1bHQ8 Km11dCBUPiB7DQo+ICsgICAgICAgIGlmIG9mZnNldCA+PSBzZWxmLmNvdW50IHsNCj4gKyAgICAg ICAgICAgIHJldHVybiBFcnIoRUlOVkFMKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICAvLyBT QUZFVFk6DQo+ICsgICAgICAgIC8vIC0gVGhlIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHR5cGUg aW52YXJpYW50IG9uIGBDb2hlcmVudEFsbG9jYXRpb25gDQo+ICsgICAgICAgIC8vIGFuZCB3ZSd2 ZSBqdXN0IGNoZWNrZWQgdGhhdCB0aGUgcmFuZ2UgYW5kIGluZGV4IGlzIHdpdGhpbiBib3VuZHMu DQo+ICsgICAgICAgIC8vIC0gYG9mZnNldGAgY2FuJ3Qgb3ZlcmZsb3cgc2luY2UgaXQgaXMgc21h bGxlciB0aGFuIGBzZWxmLmNvdW50YCBhbmQgd2UndmUgY2hlY2tlZA0KPiArICAgICAgICAvLyB0 aGF0IGBzZWxmLmNvdW50YCB3b24ndCBvdmVyZmxvdyBlYXJseSBpbiB0aGUgY29uc3RydWN0b3Iu DQo+ICsgICAgICAgIE9rKHVuc2FmZSB7ICZtdXQgKnNlbGYuY3B1X2FkZHIuYWRkKG9mZnNldCkg fSkNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLy8gUmVhZHMgdGhlIHZhbHVlIG9mIGBmaWVsZGAg YW5kIGVuc3VyZXMgdGhhdCBpdHMgdHlwZSBpcyBgRnJvbUJ5dGVzYA0KPiArICAgIC8vLw0KPiAr ICAgIC8vLyAjIFNhZmV0eToNCj4gKyAgICAvLy8NCj4gKyAgICAvLy8gVGhpcyBtdXN0IGJlIGNh bGxlZCBmcm9tIHRoZSBgZG1hX3JlYWRgIG1hY3JvIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgYGZp ZWxkYCBwb2ludGVyIGlzDQo+ICsgICAgLy8vIHZhbGlkYXRlZCBiZWZvcmVoYW5kLg0KPiArICAg IC8vLw0KPiArICAgIC8vLyBQdWJsaWMgYnV0IGhpZGRlbiBzaW5jZSBpdCBzaG91bGQgb25seSBi ZSB1c2VkIGZyb20gYGRtYV9yZWFkYCBtYWNyby4NCj4gKyAgICAjW2RvYyhoaWRkZW4pXQ0KPiAr ICAgIHB1YiB1bnNhZmUgZm4gZmllbGRfcmVhZDxGOiBGcm9tQnl0ZXM+KCZzZWxmLCBmaWVsZDog KmNvbnN0IEYpIC0+IEYgew0KPiArICAgICAgICAvLyBTQUZFVFk6IEJ5IHRoZSBzYWZldHkgcmVx dWlyZW1lbnRzIGZpZWxkIGlzIHZhbGlkDQo+ICsgICAgICAgIHVuc2FmZSB7IGZpZWxkLnJlYWQo KSB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8vIFdyaXRlcyBhIHZhbHVlIHRvIGBmaWVsZGAg YW5kIGVuc3VyZXMgdGhhdCBpdHMgdHlwZSBpcyBgQXNCeXRlc2ANCj4gKyAgICAvLy8NCj4gKyAg ICAvLy8gIyBTYWZldHk6DQo+ICsgICAgLy8vDQo+ICsgICAgLy8vIFRoaXMgbXVzdCBiZSBjYWxs ZWQgZnJvbSB0aGUgYGRtYV93cml0ZWAgbWFjcm8gd2hpY2ggZW5zdXJlcyB0aGF0IHRoZSBgZmll bGRgIHBvaW50ZXIgaXMNCj4gKyAgICAvLy8gdmFsaWRhdGVkIGJlZm9yZWhhbmQuDQo+ICsgICAg Ly8vDQo+ICsgICAgLy8vIFB1YmxpYyBidXQgaGlkZGVuIHNpbmNlIGl0IHNob3VsZCBvbmx5IGJl IHVzZWQgZnJvbSBgZG1hX3dyaXRlYCBtYWNyby4NCj4gKyAgICAjW2RvYyhoaWRkZW4pXQ0KPiAr ICAgIHB1YiB1bnNhZmUgZm4gZmllbGRfd3JpdGU8RjogQXNCeXRlcz4oJnNlbGYsIGZpZWxkOiAq bXV0IEYsIHZhbDogRikgew0KPiArICAgICAgICAvLyBTQUZFVFk6IEJ5IHRoZSBzYWZldHkgcmVx dWlyZW1lbnRzIGZpZWxkIGlzIHZhbGlkDQo+ICsgICAgICAgIHVuc2FmZSB7IGZpZWxkLndyaXRl KHZhbCkgfQ0KPiArICAgIH0NCj4gK30NCj4gKw0KPiArLy8vIFJlYWRzIGEgZmllbGQgb2YgYW4g aXRlbSBmcm9tIGFuIGFsbG9jYXRlZCByZWdpb24gb2Ygc3RydWN0cy4NCj4gKy8vLyAjIEV4YW1w bGVzDQo+ICsvLy8NCj4gKy8vLyBgYGANCj4gKy8vLyBzdHJ1Y3QgTXlTdHJ1Y3QgeyBmaWVsZDog dTMyLCB9DQo+ICsvLy8gLy8gU0FGRVRZOiBBbGwgYml0IHBhdHRlcm5zIGFyZSBhY2NlcHRhYmxl IHZhbHVlcyBmb3IgTXlTdHJ1Y3QuDQo+ICsvLy8gdW5zYWZlIGltcGwga2VybmVsOjp0cmFuc211 dGU6OkZyb21CeXRlcyBmb3IgTXlTdHJ1Y3R7fTsNCj4gKy8vLyAvLyBTQUZFVFk6IEluc3RhbmNl cyBvZiBNeVN0cnVjdCBoYXZlIG5vIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbnMuDQo+ICsvLy8gdW5z YWZlIGltcGwga2VybmVsOjp0cmFuc211dGU6OkFzQnl0ZXMgZm9yIE15U3RydWN0e307DQo+ICsv Ly8NCj4gKy8vLyAjIGZuIHRlc3QoYWxsb2M6ICZrZXJuZWw6OmRtYTo6Q29oZXJlbnRBbGxvY2F0 aW9uPE15U3RydWN0PikgLT4gUmVzdWx0IHsNCj4gKy8vLyBsZXQgd2hvbGUgPSBrZXJuZWw6OmRt YV9yZWFkIShhbGxvY1syXSk7DQo+ICsvLy8gbGV0IGZpZWxkID0ga2VybmVsOjpkbWFfcmVhZCEo YWxsb2NbMV0uZmllbGQpOw0KPiArLy8vICMgT2s6OjwoKSwgRXJyb3I+KCgpKSB9DQo+ICsvLy8g YGBgDQo+ICsjW21hY3JvX2V4cG9ydF0NCj4gK21hY3JvX3J1bGVzISBkbWFfcmVhZCB7DQo+ICsg ICAgKCRkbWE6aWRlbnQgWyAkaWR4OmV4cHIgXSAkKCRmaWVsZDp0dCkqICkgPT4ge3sNCj4gKyAg ICAgICAgbGV0IGl0ZW0gPSAkZG1hLml0ZW1fZnJvbV9pbmRleCgkaWR4KT87DQo+ICsgICAgICAg IC8vIFNBRkVUWTogYGl0ZW1fZnJvbV9pbmRleGAgZW5zdXJlcyB0aGF0IGBpdGVtYCBpcyBhbHdh eXMgYSB2YWxpZCBwb2ludGVyIGFuZCBjYW4gYmUNCj4gKyAgICAgICAgLy8gZGVyZWZlcmVuY2Vk LiBUaGUgY29tcGlsZXIgYWxzbyBmdXJ0aGVyIHZhbGlkYXRlcyB0aGUgZXhwcmVzc2lvbiBvbiB3 aGV0aGVyIGBmaWVsZGANCj4gKyAgICAgICAgLy8gaXMgYSBtZW1iZXIgb2YgYGl0ZW1gIHdoZW4g ZXhwYW5kZWQgYnkgdGhlIG1hY3JvLg0KPiArICAgICAgICB1bnNhZmUgew0KPiArICAgICAgICAg ICAgbGV0IHB0cl9maWVsZCA9IDo6Y29yZTo6cHRyOjphZGRyX29mISgoKml0ZW0pICQoJGZpZWxk KSopOw0KPiArICAgICAgICAgICAgJGRtYS5maWVsZF9yZWFkKHB0cl9maWVsZCkNCj4gKyAgICAg ICAgfQ0KPiArICAgIH19Ow0KPiArfQ0KPiArDQo+ICsvLy8gV3JpdGVzIHRvIGEgZmllbGQgb2Yg YW4gaXRlbSBmcm9tIGFuIGFsbG9jYXRlZCByZWdpb24gb2Ygc3RydWN0cy4NCj4gKy8vLyAjIEV4 YW1wbGVzDQo+ICsvLy8NCj4gKy8vLyBgYGANCj4gKy8vLyBzdHJ1Y3QgTXlTdHJ1Y3QgeyBtZW1i ZXI6IHUzMiwgfQ0KPiArLy8vIC8vIFNBRkVUWTogQWxsIGJpdCBwYXR0ZXJucyBhcmUgYWNjZXB0 YWJsZSB2YWx1ZXMgZm9yIE15U3RydWN0Lg0KPiArLy8vIHVuc2FmZSBpbXBsIGtlcm5lbDo6dHJh bnNtdXRlOjpGcm9tQnl0ZXMgZm9yIE15U3RydWN0e307DQo+ICsvLy8gLy8gU0FGRVRZOiBJbnN0 YW5jZXMgb2YgTXlTdHJ1Y3QgaGF2ZSBubyB1bmluaXRpYWxpemVkIHBvcnRpb25zLg0KPiArLy8v IHVuc2FmZSBpbXBsIGtlcm5lbDo6dHJhbnNtdXRlOjpBc0J5dGVzIGZvciBNeVN0cnVjdHt9Ow0K PiArLy8vDQo+ICsvLy8gIyBmbiB0ZXN0KGFsbG9jOiAmbXV0IGtlcm5lbDo6ZG1hOjpDb2hlcmVu dEFsbG9jYXRpb248TXlTdHJ1Y3Q+KSAtPiBSZXN1bHQgew0KPiArLy8vIGtlcm5lbDo6ZG1hX3dy aXRlIShhbGxvY1syXS5tZW1iZXIgPSAweGYpOw0KPiArLy8vIGtlcm5lbDo6ZG1hX3dyaXRlIShh bGxvY1sxXSA9IE15U3RydWN0IHsgbWVtYmVyOiAweGYgfSk7DQo+ICsvLy8gIyBPazo6PCgpLCBF cnJvcj4oKCkpIH0NCj4gKy8vLyBgYGANCj4gKyNbbWFjcm9fZXhwb3J0XQ0KPiArbWFjcm9fcnVs ZXMhIGRtYV93cml0ZSB7DQo+ICsgICAgKCRkbWE6aWRlbnQgWyAkaWR4OmV4cHIgXSAkKCRmaWVs ZDp0dCkqKSA9PiB7ew0KPiArICAgICAgICBrZXJuZWw6OmRtYV93cml0ZSEoJGRtYSwgJGlkeCwg JCgkZmllbGQpKik7DQo+ICsgICAgfX07DQo+ICsgICAgKCRkbWE6aWRlbnQsICRpZHg6IGV4cHIs ID0gJHZhbDpleHByKSA9PiB7DQo+ICsgICAgICAgIGxldCBpdGVtID0gJGRtYS5pdGVtX2Zyb21f aW5kZXgoJGlkeCk/Ow0KPiArICAgICAgICAvLyBTQUZFVFk6IGBpdGVtX2Zyb21faW5kZXhgIGVu c3VyZXMgdGhhdCBgaXRlbWAgaXMgYWx3YXlzIGEgdmFsaWQgaXRlbS4NCj4gKyAgICAgICAgdW5z YWZlIHsgJGRtYS5maWVsZF93cml0ZShpdGVtLCAkdmFsKSB9DQo+ICsgICAgfTsNCj4gKyAgICAo JGRtYTppZGVudCwgJGlkeDogZXhwciwgJCguJGZpZWxkOmlkZW50KSogPSAkdmFsOmV4cHIpID0+ IHsNCj4gKyAgICAgICAgbGV0IGl0ZW0gPSAkZG1hLml0ZW1fZnJvbV9pbmRleCgkaWR4KT87DQo+ ICsgICAgICAgIC8vIFNBRkVUWTogYGl0ZW1fZnJvbV9pbmRleGAgZW5zdXJlcyB0aGF0IGBpdGVt YCBpcyBhbHdheXMgYSB2YWxpZCBwb2ludGVyIGFuZCBjYW4gYmUNCj4gKyAgICAgICAgLy8gZGVy ZWZlcmVuY2VkLiBUaGUgY29tcGlsZXIgYWxzbyBmdXJ0aGVyIHZhbGlkYXRlcyB0aGUgZXhwcmVz c2lvbiBvbiB3aGV0aGVyIGBmaWVsZGANCj4gKyAgICAgICAgLy8gaXMgYSBtZW1iZXIgb2YgYGl0 ZW1gIHdoZW4gZXhwYW5kZWQgYnkgdGhlIG1hY3JvLg0KPiArICAgICAgICB1bnNhZmUgew0KPiAr ICAgICAgICAgICAgbGV0IHB0cl9maWVsZCA9IDo6Y29yZTo6cHRyOjphZGRyX29mX211dCEoKCpp dGVtKSAkKC4kZmllbGQpKik7DQo+ICsgICAgICAgICAgICAkZG1hLmZpZWxkX3dyaXRlKHB0cl9m aWVsZCwgJHZhbCkNCj4gKyAgICAgICAgfQ0KPiArICAgIH07DQo+ICt9DQo+ICsNCj4gK2ltcGw8 VDogQXNCeXRlcyArIEZyb21CeXRlcz4gRHJvcCBmb3IgQ29oZXJlbnRBbGxvY2F0aW9uPFQ+IHsN Cj4gKyAgICBmbiBkcm9wKCZtdXQgc2VsZikgew0KPiArICAgICAgICBsZXQgc2l6ZSA9IHNlbGYu Y291bnQgKiBjb3JlOjptZW06OnNpemVfb2Y6OjxUPigpOw0KPiArICAgICAgICAvLyBTQUZFVFk6 IHRoZSBkZXZpY2UsIGNwdSBhZGRyZXNzLCBhbmQgdGhlIGRtYSBoYW5kbGUgaXMgdmFsaWQgZHVl IHRvIHRoZQ0KPiArICAgICAgICAvLyB0eXBlIGludmFyaWFudHMgb24gYENvaGVyZW50QWxsb2Nh dGlvbmAuDQo+ICsgICAgICAgIHVuc2FmZSB7DQo+ICsgICAgICAgICAgICBiaW5kaW5nczo6ZG1h X2ZyZWVfYXR0cnMoDQo+ICsgICAgICAgICAgICAgICAgc2VsZi5kZXYuYXNfcmF3KCksDQo+ICsg ICAgICAgICAgICAgICAgc2l6ZSwNCj4gKyAgICAgICAgICAgICAgICBzZWxmLmNwdV9hZGRyIGFz IF8sDQo+ICsgICAgICAgICAgICAgICAgc2VsZi5kbWFfaGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgIHNlbGYuZG1hX2F0dHJzLmFzX3JhdygpLA0KPiArICAgICAgICAgICAgKQ0KPiArICAgICAg ICB9DQo+ICsgICAgfQ0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvbGliLnJzIGIv cnVzdC9rZXJuZWwvbGliLnJzDQo+IGluZGV4IDQ5NmVkMzJiMDkxMS4uNTA4MWNiNjZiMmY5IDEw MDY0NA0KPiAtLS0gYS9ydXN0L2tlcm5lbC9saWIucnMNCj4gKysrIGIvcnVzdC9rZXJuZWwvbGli LnJzDQo+IEBAIC00NCw2ICs0NCw3IEBADQo+ICBwdWIgbW9kIGRldmljZTsNCj4gIHB1YiBtb2Qg ZGV2aWNlX2lkOw0KPiAgcHViIG1vZCBkZXZyZXM7DQo+ICtwdWIgbW9kIGRtYTsNCj4gIHB1YiBt b2QgZHJpdmVyOw0KPiAgcHViIG1vZCBlcnJvcjsNCj4gICNbY2ZnKENPTkZJR19SVVNUX0ZXX0xP QURFUl9BQlNUUkFDVElPTlMpXQ0KPiAtLQ0KPiAyLjQzLjANCg==