From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 3549A7803D8 for ; Wed, 29 May 2024 11:52:01 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=CR14I2wqT3q4WsIEWSQ6QrtGCZcOfk/paJOOod+U4xE=; c=relaxed/simple; d=groups.io; h=Received-SPF:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:Authentication-Results-Original:nodisclaimer:MIME-Version:Original-Authentication-Results:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type; s=20240206; t=1716983521; v=1; b=kuHJ7teoMlCsouACJrN2Ttcfazj3UKdnPBTWU/Iavc0dYMgH6/GsC4a8UHhevYLxJp8MV4nU q7VrbuOLDVanp2ezmZAl/4lfilqMP5+jTGOPPZ4BQCEWlSIzNBY6F0L4lrzA9lttgD8CvoGWlnp vvT8KUXJzdrhEBxq/bJFJO/in4ifT9gXa9SrX5QXOOlu7j92xKdCLKLhHyTISkCX7vbwLXJvho7 usl+JMh5S4dsQLF8rTCiblTsQgtD85K8Gmljc7yvbK6cOVZd5gKoGpqDPWz8F3av0HTUhxHE/hq vUMEMQKqufs6vXdo0ro8YE9LMfby7hPhLDOoM6SpzZ37g== X-Received: by 127.0.0.2 with SMTP id uSKJYY7687511xYXgMPqWSaD; Wed, 29 May 2024 04:52:00 -0700 X-Received: from EUR05-DB8-obe.outbound.protection.outlook.com (EUR05-DB8-obe.outbound.protection.outlook.com [40.107.20.81]) by mx.groups.io with SMTP id smtpd.web10.11859.1716983519194976356 for ; Wed, 29 May 2024 04:51:59 -0700 X-Received: from AS9PR05CA0091.eurprd05.prod.outlook.com (2603:10a6:20b:498::6) by AS2PR08MB9619.eurprd08.prod.outlook.com (2603:10a6:20b:608::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.22; Wed, 29 May 2024 11:51:52 +0000 X-Received: from AMS0EPF000001A3.eurprd05.prod.outlook.com (2603:10a6:20b:498:cafe::fa) by AS9PR05CA0091.outlook.office365.com (2603:10a6:20b:498::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.30 via Frontend Transport; Wed, 29 May 2024 11:51:51 +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=arm.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; pr=C X-Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AMS0EPF000001A3.mail.protection.outlook.com (10.167.16.228) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7633.15 via Frontend Transport; Wed, 29 May 2024 11:51:51 +0000 X-Received: ("Tessian outbound fffbb209f6c2:v327"); Wed, 29 May 2024 11:51:51 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 83a4f4e174f22acd X-CR-MTA-TID: 64aa7808 X-Received: from 52aa3dfdf3c2.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 1573C067-A8C1-4EFF-A024-DEFC0FFBA1CB.1; Wed, 29 May 2024 11:51:39 +0000 X-Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 52aa3dfdf3c2.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 May 2024 11:51:39 +0000 X-Received: from PA6PR08MB10767.eurprd08.prod.outlook.com (2603:10a6:102:3d1::5) by PAVPR08MB9081.eurprd08.prod.outlook.com (2603:10a6:102:32a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.29; Wed, 29 May 2024 11:51:36 +0000 X-Received: from PA6PR08MB10767.eurprd08.prod.outlook.com ([fe80::fbc:e472:44e7:766e]) by PA6PR08MB10767.eurprd08.prod.outlook.com ([fe80::fbc:e472:44e7:766e%3]) with mapi id 15.20.7611.016; Wed, 29 May 2024 11:51:36 +0000 From: "Sahil Kaushal" To: Sami Mujawar , "devel@edk2.groups.io" CC: Ard Biesheuvel , =?utf-8?B?TGVpZiBMaW5kaG9sbSDCoA==?= , nd Subject: Re: [edk2-devel] [edk2-platforms][PATCH V4 15/17] Platform/ARM: Add CadenceQspiNorFlashDeviceLib for NorFlashDxe Thread-Topic: [edk2-platforms][PATCH V4 15/17] Platform/ARM: Add CadenceQspiNorFlashDeviceLib for NorFlashDxe Thread-Index: AQHasaYRKBu7JZ+Smk+++dZ9tC2rfbGuFXEAgAADHQI= Date: Wed, 29 May 2024 11:51:36 +0000 Message-ID: References: <20240529085517.1074417-1-Sahil.Kaushal@arm.com> <20240529085517.1074417-16-Sahil.Kaushal@arm.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PA6PR08MB10767:EE_|PAVPR08MB9081:EE_|AMS0EPF000001A3:EE_|AS2PR08MB9619:EE_ X-MS-Office365-Filtering-Correlation-Id: a7f0c824-3a38-4e18-ee39-08dc7fd5ba9f x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230031|1800799015|376005|366007|38070700009; X-Microsoft-Antispam-Message-Info-Original: =?us-ascii?Q?wrEcNRGrP1QPmeKvBSyybCMMuMHf5WoT5RBqHzJpQDW97EYuSu1A9z3UlP6D?= =?us-ascii?Q?Vj7krVfQwNOuRmizdtWySpz752cgZGRiYE3HRuWpw2Axmb/zi0yiPPd+ufeg?= =?us-ascii?Q?aoMVXg+Ohs79gJ7nsVQ72LFLqvu/k7Y3ebXu/z+TQLey4urzO+5uiy0W8HyQ?= =?us-ascii?Q?J+pBtj8Nzmx2fCBqy7DeObhiqZjTKLQ3u/+6fqwIVVuw0P9/bYhtVwymKHb5?= =?us-ascii?Q?r2Z3Wy2jFqyMVWGZgXLHH+CiXOrkMJXC3nAOe0GiGHJm7OHY4GvYtUozDidk?= =?us-ascii?Q?LbmVRNr7M2SsLxxJhxCcaKsJfWIfDwQ+cOgWUaIkWn3Jaq+IJ3wMH8QhpwGV?= =?us-ascii?Q?VVKiEBxMYO5wlozdYFO9fYs5QDXT+c44av1AQ6oTKKHYEZIJdFcIAmtoWSVL?= =?us-ascii?Q?QK4kFIHcpX0wOFAx8+OGdtxE3snfZatiSvBe5QpZhoUoUpgd2QaYI45rhjAV?= =?us-ascii?Q?gt8fR66tkbLIfs9Xugb8ouTtQ9C6WKFcgGlZt2/00uK5XF4CBtcsE4QuuRt/?= =?us-ascii?Q?WVYB9prQbeTIULotNstwuSJ/YvIj0GXjRf8OOk3JbEqd5TWVHDA3oE6vBShO?= =?us-ascii?Q?nvpITg2Nmj8dnAmlu4oqPfxS9m/iDLt8VCBkDoR1gPazU+I/uRhemP3RXvLL?= =?us-ascii?Q?fLdNw/HC7RSLIjQUsTMN7NhqKu4i5uNJSE30pATTsSLcdCMQRtFuImSKvUc+?= =?us-ascii?Q?K8WhHI1FE5cCJcDWA/rClvpOa4oKFt1J3GoO92as0QHiQFDzqJgBzNQxh0Hc?= =?us-ascii?Q?SkW5wQftjjFS1rVjsnMgjOge2HvqNMivaNacGh9VIe/7hEcDarAHIbA3TjVR?= =?us-ascii?Q?YtBLzcdxurWxl8jOh2D+KbbFk4DwOIUhEFj2seXDCZG1h5k0U3o/mn0a7lP7?= =?us-ascii?Q?t9zUCOCSFM99PWv5LdCuZ9FDCVpk6yVRVI3OWLc5pxza7BB7ND+kwszZVius?= =?us-ascii?Q?l85izA3u1SGISwyMtDa2WLJjtPMOTwpvbPEykzanI2/WV1Ydpwe5PVKR/WoL?= =?us-ascii?Q?bGIpv3Hl3Kqvi+OxrN1rtK8pns/wJY5umC1txLzn50b8Yrj4OBg8PpRkH1pU?= =?us-ascii?Q?j6rUXqTneRjteodYZT83CLKAtJekDtzAipm6BLIdxelEBQG6BiSwi3FtfFyl?= =?us-ascii?Q?DEQj0AFY9QnnL/7bjyzsVtraawifbS2jxhfJTEGx64kSXxaje6McnYXPSgPa?= =?us-ascii?Q?VhJr38uBqfGXe5o/XQwY265KKT/5D3jYEtZBS3b+IhEhQFseGn1Hs6fvbHva?= =?us-ascii?Q?canU3Iq71bsayWru/XFJhwM6alyV6BlP20Atxqvg09gjZHIsDMIgs1mNy3XV?= =?us-ascii?Q?hQqE1SEme19PwJbQ2cbENlL3xwnVuCOIkjUEUT7Ek1t19g=3D=3D?= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA6PR08MB10767.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(1800799015)(376005)(366007)(38070700009);DIR:OUT;SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9081 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: AMS0EPF000001A3.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 3d2f7095-1b3b-476a-bb57-08dc7fd5b178 X-Microsoft-Antispam-Message-Info: =?utf-8?B?cEd3Y1pReUlLdURBT2NrQVBDZXM0OVFqcjF6a2kyZjU1L0laUjQ1YkZ3Zzhx?= =?utf-8?B?UWErSHplSS9PemREQVhyUU9UT1VuWWhXcktVd29OOWNFeUxCb0szTERGYjRu?= =?utf-8?B?eXMrZlZOQmRFY2FqS05FS0lXakhCWFJPZys2Z3BGSUN6dTVXRHlyeXRIano1?= =?utf-8?B?OTE2N1ROSnprbXltUzRqaFFRQlJuNFdkdW5CdkRBR21sby81amhFU3JucGtO?= =?utf-8?B?WW5OUEVJcEEzMDkyeXlqbXQxLzE1YnBNMmFyVWJodjZGeVNOTHdybWhRU3Jo?= =?utf-8?B?aTVwdFRjMlphbDNtREMvV3BreWc1SGtlU2R1UGRLWlZ3N0wxeWVxeVc3bFM5?= =?utf-8?B?SXYrM3dKSEVqejlHdXlhclFpaVh1QWNYYnFzalMyN2tFaHV4dGt2M3d0ZTF0?= =?utf-8?B?SjBtMHlZOCt3ZENJalVmL0pVRWg5Unl5dmgrNTZEQ2dIMHNaZ0FWUkhubC9D?= =?utf-8?B?ZFV1Nk5HSUxKZEltUVRVdWg2V0ptUitJM3JvZ1RONnhNc25nUWNjSGpGT1Rz?= =?utf-8?B?V0NWSFlTNkt6djNJVDJzODJtRUpHSEp2UzVpaWxUTzdCOTNOUjZDQ2RTQWpm?= =?utf-8?B?dmJ2S1BUZjVVOU1MMmFsdStKL2RXdldUYXhZL0FmZE9QbWNBV1M4UUN0c01n?= =?utf-8?B?ZkJ6emZQN21uN3lNQVBNSDd6cXB4czlucU5wb00rRGxEU2ZHWXRYVnd0c0lq?= =?utf-8?B?ZXUwNTY1ZEhobUI4NU1JbTBqMEFUY0Z0Y2F2Z2hiMnU2SVFaS1piV2t1NFV5?= =?utf-8?B?b0dqeFBOZGtwS3BSWWF2SENqVFlnTUpGRlR5VGhGVnA1Z25jSWpXWXp0dmd1?= =?utf-8?B?TUM5c2J4YXI4V3JHNVdBSmdSNS8wUXUvem54RWVXZmw0VHBiNmR6eld5YUtC?= =?utf-8?B?cXNEMldrMzZaNWUvbk13N0dDckRrdlhES1huc0U0TEY5cDc5bFRZMWtPa2V5?= =?utf-8?B?UHZSVmpmSTY2aHpJTGVFL1d1VWtYLzBSWEVndCtPaFpxSmQ2ZkhFMWZPUmdG?= =?utf-8?B?OWc5YTB3UzlaN21uL0F1WU9Lem4vMWpkYlVpZFlVTGVaVzVUOEtlZm9Qb3or?= =?utf-8?B?c0RGaWdnQjRRT0daWkFjSVBUa3ZHNFdOb3R1QXFMOXNZbHFrWXAxSmdaMi92?= =?utf-8?B?cTY2anZvS0dqemRVSThoNEQrNkJKWERUNVp5bHk2dGQ2UHY3Yk1IbHBVQjRZ?= =?utf-8?B?eXdPZmNOdDZITkJEckVWOFV2QllNLy9hbytwM3lxQXk5T1E5TW9ZZmRnNGh2?= =?utf-8?B?SkF6RTkrdlYyV005ZlN6Q2tKZEx2RzhNTHVicG5TWlNRVk9ZbFpjRzlsY1Vi?= =?utf-8?B?b2F0SFU5UWd2d2p1MHYzSGl1dk5ZVnUzMUdSaVVxLzNRM21oVXdjRkV4bVJa?= =?utf-8?B?bjdpY3hiazY1OTdTdFNPYWNVSld1Mm03dVJLQXhGbHNoU2ZXWDFxZkpZYVRx?= =?utf-8?B?c3VTaEk1UWJuVWd6VjMzdkRucVJ4WDlIVjVzM3ZnS3hvaUxTUlplUlUzcmZB?= =?utf-8?B?ZWxmb2hwd3ZyZFQyRUtsRHNOK1hzcU9XcmxyMzFPS0lLWURQeE9ENlNnVHpL?= =?utf-8?B?ZzE4NXBNZ2ppT2l3NEJFTFZWU1A2ME40S2Nlc2lxK1FScE5haXRNVlBqQTE1?= =?utf-8?B?dHhYRkVaWlNSWjBtMnZjWjR3UW1peGM1VGZHWUF2YVBOQ2JtZHZmTGlXU21y?= =?utf-8?B?YlNCR2hMcDg3eTc1WXFuU1BGV2Vmb1RJeFI4WGhzOUVhTnNwTnhBT1JiNHBw?= =?utf-8?B?blA5TFJjdC9VVC80anlJVDhuVy85OEhJbHgvaVR6T0xuV0xjYkVmS3RGYXRG?= =?utf-8?B?d1Q2N2pSTzBXeDVwZ0NFa2crcDNzMS96dmZVZGJ1NFFyVDVRdG1KT1dIWDRP?= =?utf-8?Q?Pkc5Z5k8I7+P0?= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2024 11:51:51.4635 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a7f0c824-3a38-4e18-ee39-08dc7fd5ba9f 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: AMS0EPF000001A3.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB9619 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Wed, 29 May 2024 04:51:59 -0700 Resent-From: sahil.kaushal@arm.com Reply-To: devel@edk2.groups.io,sahil.kaushal@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: IkBDxzjr8CbWNVzpsgGFGBe2x7686176AA= Content-Language: en-IN Content-Type: multipart/alternative; boundary="_000_PA6PR08MB10767A90D63165ED348C969C6F3F22PA6PR08MB10767eu_" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=kuHJ7teo; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io --_000_PA6PR08MB10767A90D63165ED348C969C6F3F22PA6PR08MB10767eu_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgU2FtaSwNClRoYW5rIHlvdSBmb3IgcmV2aWV3aW5nIHRoZSBwYXRjaC4NCllvdSBhcmUgcmln aHQuIFRoZSBkby13aGlsZSBsb29wIGlzIHJlZHVuZGFudCBhbmQgaGVuY2UgY2FuIGJlIHJlbW92 ZWQuDQpUaGFua3MsDQpTYWhpbA0KDQpGcm9tOiBTYW1pIE11amF3YXIgPFNhbWkuTXVqYXdhckBh cm0uY29tPg0KRGF0ZTogV2VkbmVzZGF5LCAyOSBNYXkgMjAyNCBhdCA1OjA24oCvUE0NClRvOiBT YWhpbCBLYXVzaGFsIDxTYWhpbC5LYXVzaGFsQGFybS5jb20+LCBkZXZlbEBlZGsyLmdyb3Vwcy5p byA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+DQpDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZGIrdGlhbm9j b3JlQGtlcm5lbC5vcmc+LCBMZWlmIExpbmRob2xtICAgPHF1aWNfbGxpbmRob2xAcXVpY2luYy5j b20+LCBuZCA8bmRAYXJtLmNvbT4NClN1YmplY3Q6IFJlOiBbZWRrMi1wbGF0Zm9ybXNdW1BBVENI IFY0IDE1LzE3XSBQbGF0Zm9ybS9BUk06IEFkZCBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGli IGZvciBOb3JGbGFzaER4ZQ0KSGkgU2FoaWwsDQoNClBsZWFzZSBmaW5kIG15IGZlZWRiYWNrIGlu bGluZSBtYXJrZWQgW1NBTUldLg0KDQpSZWdhcmRzLA0KDQpTYW1pIE11amF3YXINCg0K77u/T24g MjkvMDUvMjAyNCwgMDk6NTYsICJTYWhpbCBLYXVzaGFsIiA8U2FoaWwuS2F1c2hhbEBhcm0uY29t IDxtYWlsdG86U2FoaWwuS2F1c2hhbEBhcm0uY29tPj4gd3JvdGU6DQoNCg0KRnJvbTogc2FoaWwg PHNhaGlsQGFybS5jb20gPG1haWx0bzpzYWhpbEBhcm0uY29tPj4NCg0KDQpJbiBOMVNkcCBwbGF0 Zm9ybSwgdGhlIFNvQyBpcyBjb25uZWN0ZWQgdG8gSU9GUEdBIHdoaWNoIGhhcyBhDQpDYWRlbmNl IFF1YWQgU1BJIChRU1BJKSBjb250cm9sbGVyLiBUaGlzIFFTUEkgY29udHJvbGxlciBtYW5hZ2Vz DQp0aGUgZmxhc2ggY2hpcCBkZXZpY2UgdmlhIFFTUEkgYnVzLg0KDQoNClRoaXMgcGF0Y2ggYWRk cyBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliIHdoaWNoIGlzIHVzZWQgdG8NCm1hbmFnZSBh bmQgYWNjZXNzIHRoZSBhYm92ZSBjb25maWd1cmF0aW9uLg0KDQoNClNpZ25lZC1vZmYtYnk6IHNh aGlsIDxzYWhpbEBhcm0uY29tIDxtYWlsdG86c2FoaWxAYXJtLmNvbT4+DQotLS0NClBsYXRmb3Jt L0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JG bGFzaERldmljZUxpYi5pbmYgfCAzMiArDQpQbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNw aU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaCB8IDQ2ICsN ClBsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5j ZVFzcGlOb3JGbGFzaERldmljZUxpYi5jIHwgMTAzNCArKysrKysrKysrKysrKysrKysrKw0KMyBm aWxlcyBjaGFuZ2VkLCAxMTEyIGluc2VydGlvbnMoKykNCg0KDQpkaWZmIC0tZ2l0IGEvUGxhdGZv cm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5v ckZsYXNoRGV2aWNlTGliLmluZiBiL1BsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9y Rmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5pbmYNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjUwNjg3NmI2MjI4NQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmlj ZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmluZg0KQEAgLTAsMCArMSwzMiBAQA0K KyMvKiogQGZpbGUNCisjDQorIyBDb21wb25lbnQgZGVzY3JpcHRpb24gZmlsZSBmb3IgQ2FkZW5j ZVFzcGlOb3JGbGFzaERldmljZUxpYiBMaWJyYXJ5DQorIw0KKyMgQ29weXJpZ2h0IChjKSAyMDI0 LCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorIw0KKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyoqLw0KKw0KK1tEZWZp bmVzXQ0KKyBJTkZfVkVSU0lPTiA9IDB4MDAwMTAwMDUNCisgQkFTRV9OQU1FID0gQ2FkZW5jZVFz cGlOb3JGbGFzaERldmljZUxpYg0KKyBGSUxFX0dVSUQgPSBlZDE3MjM2Ni0wNjZiLTQ5OTgtOWI1 ZS1jYTdmMzg1YTE3MGINCisgTU9EVUxFX1RZUEUgPSBEWEVfUlVOVElNRV9EUklWRVINCisgVkVS U0lPTl9TVFJJTkcgPSAxLjANCisgTElCUkFSWV9DTEFTUyA9IE5vckZsYXNoRGV2aWNlTGliDQor DQorW1NvdXJjZXMuY29tbW9uXQ0KKyBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmMNCisg Q2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5oDQorDQorW1BhY2thZ2VzXQ0KKyBNZGVQa2cv TWRlUGtnLmRlYw0KKyBQbGF0Zm9ybS9BUk0vQVJNLmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10N CisgQmFzZUxpYg0KKyBCYXNlTWVtb3J5TGliDQorIERlYnVnTGliDQorIElvTGliDQorIFRpbWVy TGliDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFz aERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmggYi9QbGF0Zm9ybS9BUk0v TGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hE ZXZpY2VMaWIuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uOTUx YTkzNDgxZGQxDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRl bmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaA0K QEAgLTAsMCArMSw0NiBAQA0KKy8qKiBAZmlsZQ0KKw0KKyBDb3B5cmlnaHQgKGMpIDIwMjQsIEFS TSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisNCisgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisNCisqKi8NCisNCisjaWZuZGVmIENBREVO Q0VfUVNQSV9OT1JfRkxBU0hfREVWSUNFX0xJQl9IXw0KKyNkZWZpbmUgQ0FERU5DRV9RU1BJX05P Ul9GTEFTSF9ERVZJQ0VfTElCX0hfDQorDQorI2RlZmluZSBOT1JfRkxBU0hfRVJBU0VfUkVUUlkg MTANCisNCisvLyBRU1BJIENvbnRyb2xsZXIgZGVmaW5lcw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZM QVNIX0NNRF9DVFJMX1JFR19PRkZTRVQgMHg5MA0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NN RF9DVFJMX1JFR19FWEVDVVRFIDB4MDENCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RS TF9SRUdfQUREUl9FTkFCTEUgMHgwMQ0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJM X1JFR19BRERSX0JJVF9QT1MgMTkNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9S RUdfQUREUl9CWVRFX0JJVF9QT1MgMTYNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RS TF9SRUdfU1RBVFVTX0JJVCAweDAyDQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxf UkVHX09QQ09ERV9CSVRfUE9TIDI0DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxf UkVHX1JFQURfRU5BQkxFIDB4MDENCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9S RUdfUkVBRF9CWVRFXzNCIDB4MDINCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9S RUdfUkVBREVOX0JJVF9QT1MgMjMNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9S RUdfUkVBREJZVEVfQklUX1BPUyAyMA0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJM X1JFR19EVU1NWV84QyAweDgNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdf RFVNTVlfQklUX1BPUyA3DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05V TV9EQVRBX0JZVEVTKHgpICgoeCAtIDEpIDw8IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdf UkVBREJZVEVfQklUX1BPUykNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdf TlVNX0FERFJfQllURVMoeCkgKCh4IC0gMSkgPDwgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JF R19BRERSX0JZVEVfQklUX1BPUykNCisNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfUkVB RF9EQVRBX1JFR19PRkZTRVQgMHhBMA0KKw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9B RERSX1JFR19PRkZTRVQgMHg5NA0KKw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9TVEFU VVNfUE9MTF9USU1FT1VUX01TIDEwMDB1IC8vIENvbW1hbmQgU3RhdHVzIFJlZ2lzdGVyIHJlYWQg dGltZW91dA0KKw0KKyNkZWZpbmUgU1BJTk9SX1NSX1dJUCBCSVQwIC8vIFdyaXRlIGluIHByb2dy ZXNzDQorDQorI2RlZmluZSBTUElOT1JfT1BfV1JFTiAweDA2IC8vIFdyaXRlIGVuYWJsZQ0KKyNk ZWZpbmUgU1BJTk9SX09QX0JFXzRLIDB4MjAgLy8gRXJhc2UgNEtpQiBibG9jaw0KKyNkZWZpbmUg U1BJTk9SX09QX1JESUQgMHg5ZiAvLyBSZWFkIEpFREVDIElEDQorI2RlZmluZSBTUElOT1JfT1Bf UkRTUiAweDA1IC8vIFJlYWQgc3RhdHVzIHJlZ2lzdGVyDQorDQorI2RlZmluZSBTUElOT1JfU1Jf V0lQX1BPTExfVElNRU9VVF9NUyAxMDAwdSAvLyBTdGF0dXMgUmVnaXN0ZXIgcmVhZCB0aW1lb3V0 DQorDQorI2VuZGlmIC8qIENBREVOQ0VfUVNQSV9OT1JfRkxBU0hfREVWSUNFX0xJQl9IXyAqLw0K ZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZp Y2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5jIGIvUGxhdGZvcm0vQVJNL0xpYnJh cnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNl TGliLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmY5N2M4ZDUx ZmQ0OA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFz cGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmMNCkBAIC0w LDAgKzEsMTAzNCBAQA0KKy8qKiBAZmlsZQ0KKw0KKyBDb3B5cmlnaHQgKGMpIDIwMjQgQVJNIExp bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5 L0Jhc2VNZW1vcnlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L0lvTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlv bkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L05vckZsYXNoRGV2aWNlTGliLmg+DQorI2luY2x1 ZGUgPExpYnJhcnkvVGltZXJMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQor DQorI2luY2x1ZGUgIkNhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaCINCisNCisvKioNCisg Q29udmVydHMgbWlsbGlzZWNvbmRzIGludG8gbnVtYmVyIG9mIHRpY2tzIG9mIHRoZSBwZXJmb3Jt YW5jZSBjb3VudGVyLg0KKw0KKyBAcGFyYW1baW5dIE1pbGxpc2Vjb25kcyBNaWxsaXNlY29uZHMg dG8gY29udmVydCBpbnRvIHRpY2tzLg0KKw0KKyBAcmV0dmFsIE1pbGxpc2Vjb25kcyBleHByZXNz ZWQgYXMgbnVtYmVyIG9mIHRpY2tzLg0KKw0KKyoqLw0KK1NUQVRJQw0KK1VJTlQ2NA0KK01pbGxp U2Vjb25kc1RvVGlja3MgKA0KKyBJTiBVSU5UTiBNaWxsaXNlY29uZHMNCisgKQ0KK3sNCisgVUlO VDY0IE5hbm9TZWNvbmRzUGVyVGljazsNCisgVUlOVDY0IE5hbm9TZWNvbmRzOw0KKw0KKyBOYW5v U2Vjb25kc1BlclRpY2sgPSBHZXRUaW1lSW5OYW5vU2Vjb25kICgxKTsNCisgTmFub1NlY29uZHMg PSBNdWx0VTY0eDMyIChNaWxsaXNlY29uZHMsIDEwMDAwMDApOw0KKw0KKyByZXR1cm4gRGl2VTY0 eDY0UmVtYWluZGVyIChOYW5vU2Vjb25kcywgTmFub1NlY29uZHNQZXJUaWNrLCBOVUxMKTsNCit9 DQorDQorLyoqDQorIEV4ZWN1dGUgRmxhc2ggY21kIGN0cmwgYW5kIFJlYWQgU3RhdHVzLg0KKw0K KyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZS4NCisgQHBhcmFtW2luXSBW YWwgVmFsdWUgdG8gYmUgd3JpdHRlbiB0byBGbGFzaCBjbWQgY3RybCBSZWdpc3Rlci4NCisNCisg QHJldHZhbCBFRklfU1VDQ0VTUyBSZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisg QHJldHZhbCBFRklfVElNRU9VVCBDb21tYW5kIGV4ZWN1dGlvbiB0aW1lZCBvdXQuDQorDQorKiov DQorU1RBVElDDQorRUZJX1NUQVRVUw0KK0NkbnNRc3BpRXhlY3V0ZUNvbW1hbmQgKA0KKyBJTiBO T1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBVSU5UMzIgVmFsDQorICkNCit7DQor IC8vIFNldCB0aGUgY29tbWFuZA0KKyBNbWlvV3JpdGUzMiAoDQorIEluc3RhbmNlLT5Ib3N0Q29u dHJvbGxlckJhc2VBZGRyZXNzICsgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19PRkZTRVQs DQorIFZhbA0KKyApOw0KKyAvLyBFeGVjdXRlIHRoZSBjb21tYW5kDQorIE1taW9Xcml0ZTMyICgN CisgSW5zdGFuY2UtPkhvc3RDb250cm9sbGVyQmFzZUFkZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hf Q01EX0NUUkxfUkVHX09GRlNFVCwNCisgVmFsIHwgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JF R19FWEVDVVRFDQorICk7DQorDQorIENPTlNUIFVJTlQ2NCBUaWNrT3V0ID0NCisgR2V0UGVyZm9y bWFuY2VDb3VudGVyICgpICsNCisgTWlsbGlTZWNvbmRzVG9UaWNrcyAoQ0ROU19RU1BJX0ZMQVNI X0NNRF9TVEFUVVNfUE9MTF9USU1FT1VUX01TKTsNCisNCisgLy8gV2FpdCB1bnRpbCBjb21tYW5k IGhhcyBiZWVuIGV4ZWN1dGVkDQorIGRvIHsNCisgaWYgKEdldFBlcmZvcm1hbmNlQ291bnRlciAo KSA+IFRpY2tPdXQpIHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJDZG5zUXNwaUV4 ZWN1dGVDb21tYW5kOiBUaW1lb3V0IHdhaXRpbmcgZm9yIGNvbW1hbmQgZXhlY3V0aW9uLlxuIg0K KyApKTsNCisgcmV0dXJuIEVGSV9USU1FT1VUOw0KKyB9DQorIH0gd2hpbGUgKChNbWlvUmVhZDMy ICgNCisgSW5zdGFuY2UtPkhvc3RDb250cm9sbGVyQmFzZUFkZHJlc3MgKw0KKyBDRE5TX1FTUElf RkxBU0hfQ01EX0NUUkxfUkVHX09GRlNFVA0KKyApICYNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9D VFJMX1JFR19TVEFUVVNfQklUKSA9PQ0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1NU QVRVU19CSVQNCisgKTsNCisNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisg UG9sbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIE5PUiBmbGFzaCBlcmFzZS93cml0ZSBjb21wbGV0aW9u Lg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZS4NCisNCisgQHJl dHZhbCBFRklfU1VDQ0VTUyBSZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgQHJl dHZhbCBFRklfVElNRU9VVCBPcGVyYXRpb24gdGltZWQgb3V0Lg0KKyBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgQ29udHJvbGxlciBvcGVyYXRpb24gZmFpbGVkLg0KKw0KKyoqLw0KK1NUQVRJQw0K K0VGSV9TVEFUVVMNCitOb3JGbGFzaFBvbGxTdGF0dXNSZWdpc3RlciAoDQorIElOIE5PUl9GTEFT SF9JTlNUQU5DRSAqSW5zdGFuY2UNCisgKQ0KK3sNCisgQk9PTEVBTiBTUmVnRG9uZTsNCisgVUlO VDMyIHZhbDsNCisNCisgdmFsID0gKFNQSU5PUl9PUF9SRFNSIDw8IENETlNfUVNQSV9GTEFTSF9D TURfQ1RSTF9SRUdfT1BDT0RFX0JJVF9QT1MpIHwNCisgKENETlNfUVNQSV9GTEFTSF9DTURfQ1RS TF9SRUdfUkVBRF9FTkFCTEUgPDwNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19SRUFE RU5fQklUX1BPUykgfA0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9EQVRBX0JZ VEVTICgxKSB8DQorIChDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX0RVTU1ZXzhDIDw8DQor IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfRFVNTVlfQklUX1BPUyk7DQorDQorIENPTlNU IFVJTlQ2NCBUaWNrT3V0ID0NCisgR2V0UGVyZm9ybWFuY2VDb3VudGVyICgpICsNCisgTWlsbGlT ZWNvbmRzVG9UaWNrcyAoU1BJTk9SX1NSX1dJUF9QT0xMX1RJTUVPVVRfTVMpOw0KKw0KKyBkbyB7 DQorIGlmIChHZXRQZXJmb3JtYW5jZUNvdW50ZXIgKCkgPiBUaWNrT3V0KSB7DQorIERFQlVHICgo DQorIERFQlVHX0VSUk9SLA0KKyAiTm9yRmxhc2hQb2xsU3RhdHVzUmVnaXN0ZXI6IFRpbWVvdXQg d2FpdGluZyBmb3IgZXJhc2Uvd3JpdGUuXG4iDQorICkpOw0KKyByZXR1cm4gRUZJX1RJTUVPVVQ7 DQorIH0NCisNCisgaWYgKEVGSV9FUlJPUiAoQ2Ruc1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFu Y2UsIHZhbCkpKSB7DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIFNSZWdE b25lID0NCisgKE1taW9SZWFkOCAoDQorIEluc3RhbmNlLT5Ib3N0Q29udHJvbGxlckJhc2VBZGRy ZXNzICsNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9SRUFEX0RBVEFfUkVHX09GRlNFVA0KKyApDQor ICYgU1BJTk9SX1NSX1dJUA0KKyApID09IDA7DQorIH0gd2hpbGUgKCFTUmVnRG9uZSk7DQorDQor IHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorIENoZWNrIHdoZXRoZXIgTk9SIGZs YXNoIG9wZXJhdGlvbnMgYXJlIExvY2tlZC4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1Ig Zmxhc2ggSW5zdGFuY2UuDQorIEBwYXJhbVtpbl0gQmxvY2tBZGRyZXNzIEJsb2NrQWRkcmVzcyBp biBOT1IgZmxhc2ggZGV2aWNlLg0KKw0KKyBAcmV0dmFsIEZBTFNFIElmIE5PUiBmbGFzaCBpcyBu b3QgbG9ja2VkLg0KKyoqLw0KK1NUQVRJQw0KK0JPT0xFQU4NCitOb3JGbGFzaEJsb2NrSXNMb2Nr ZWQgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBVSU5UTiBCbG9j a0FkZHJlc3MNCisgKQ0KK3sNCisgcmV0dXJuIEZBTFNFOw0KK30NCisNCisvKioNCisgVW5sb2Nr IE5PUiBmbGFzaCBvcGVyYXRpb25zIG9uIGdpdmVuIGJsb2NrLg0KKw0KKyBAcGFyYW1baW5dIElu c3RhbmNlIE5PUiBmbGFzaCBpbnN0YW5jZS4NCisgQHBhcmFtW2luXSBCbG9ja0FkZHJlc3MgQmxv Y2tBZGRyZXNzIGluIE5PUiBmbGFzaCBkZXZpY2UuDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1Mg Tk9SIGZsYXNoIG9wZXJhdGlvbnMgdW5sb2NrZWQuDQorKiovDQorRUZJX1NUQVRVUw0KK05vckZs YXNoVW5sb2NrU2luZ2xlQmxvY2sgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNl LA0KKyBJTiBVSU5UTiBCbG9ja0FkZHJlc3MNCisgKQ0KK3sNCisgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KK30NCisNCisvKioNCisgVW5sb2NrIE5PUiBmbGFzaCBvcGVyYXRpb25zIGlmIGl0IGlzIG5l Y2Vzc2FyeS4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggaW5zdGFuY2UuDQor IEBwYXJhbVtpbl0gQmxvY2tBZGRyZXNzIEJsb2NrQWRkcmVzcyBpbiBOT1IgZmxhc2ggZGV2aWNl Lg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlcXVlc3QgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFzaFVubG9ja1NpbmdsZUJsb2NrSWZOZWNl c3NhcnkgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBVSU5UTiBC bG9ja0FkZHJlc3MNCisgKQ0KK3sNCisgRUZJX1NUQVRVUyBTdGF0dXM7DQorDQorIFN0YXR1cyA9 IEVGSV9TVUNDRVNTOw0KKw0KKyBpZiAoIU5vckZsYXNoQmxvY2tJc0xvY2tlZCAoSW5zdGFuY2Us IEJsb2NrQWRkcmVzcykpIHsNCisgU3RhdHVzID0gTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9jayAo SW5zdGFuY2UsIEJsb2NrQWRkcmVzcyk7DQorIH0NCisNCisgcmV0dXJuIFN0YXR1czsNCit9DQor DQorLyoqDQorIEVuYWJsZSB3cml0ZSB0byBOT1IgZmxhc2ggZGV2aWNlLg0KKw0KKyBAcGFyYW1b aW5dIEluc3RhbmNlIE5PUiBmbGFzaCBpbnN0YW5jZS4NCisNCisgQHJldHZhbCBFRklfU1VDQ0VT UyBSZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SIFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuDQorKiovDQorU1RBVElDDQorRUZJ X1NUQVRVUw0KK05vckZsYXNoRW5hYmxlV3JpdGUgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0Ug Kkluc3RhbmNlDQorICkNCit7DQorIFVJTlQzMiB2YWw7DQorDQorIERFQlVHICgoREVCVUdfSU5G TywgIk5vckZsYXNoRW5hYmxlV3JpdGUoKVxuIikpOw0KKyB2YWwgPSAoU1BJTk9SX09QX1dSRU4g PDwgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19PUENPREVfQklUX1BPUyk7DQorIGlmIChF RklfRVJST1IgKENkbnNRc3BpRXhlY3V0ZUNvbW1hbmQgKEluc3RhbmNlLCB2YWwpKSkgew0KKyBy ZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQor fQ0KKw0KKy8qKg0KKyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHByZXN1bWVzIHRoYXQgdGhlIGJs b2NrIGhhcyBhbHJlYWR5IGJlZW4gdW5sb2NrZWQuDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2Ug Tk9SIGZsYXNoIGluc3RhbmNlLg0KKyBAcGFyYW1baW5dIEJsb2NrQWRkcmVzcyBCbG9jayBhZGRy ZXNzIHdpdGhpbiB0aGUgdmFyaWFibGUgcmVnaW9uLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNT IFJlcXVlc3QgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci4NCisgKiovDQorRUZJX1NUQVRVUw0K K05vckZsYXNoRXJhc2VTaW5nbGVCbG9jayAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5z dGFuY2UsDQorIElOIFVJTlROIEJsb2NrQWRkcmVzcw0KKyApDQorew0KKyBVSU5UMzIgRGV2Q29u ZmlnVmFsOw0KKyBVSU5UMzIgRXJhc2VPZmZzZXQ7DQorDQorIEVyYXNlT2Zmc2V0ID0gMHgwOw0K Kw0KKyBERUJVRyAoKA0KKyBERUJVR19JTkZPLA0KKyAiTm9yRmxhc2hFcmFzZVNpbmdsZUJsb2Nr KEJsb2NrQWRkcmVzcz0weCUwOHgpXG4iLA0KKyBCbG9ja0FkZHJlc3MNCisgKSk7DQorDQorIGlm IChFRklfRVJST1IgKE5vckZsYXNoRW5hYmxlV3JpdGUgKEluc3RhbmNlKSkpIHsNCisgcmV0dXJu IEVGSV9ERVZJQ0VfRVJST1I7DQorIH0NCisNCisgRXJhc2VPZmZzZXQgPSBCbG9ja0FkZHJlc3Mg LSBJbnN0YW5jZS0+RGV2aWNlQmFzZUFkZHJlc3M7DQorDQorIE1taW9Xcml0ZTMyICgNCisgSW5z dGFuY2UtPkhvc3RDb250cm9sbGVyQmFzZUFkZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hfQ01EX0FE RFJfUkVHX09GRlNFVCwNCisgRXJhc2VPZmZzZXQNCisgKTsNCisNCisgRGV2Q29uZmlnVmFsID0g KFNQSU5PUl9PUF9CRV80SyA8PCBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9C SVRfUE9TKSB8DQorIChDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX0FERFJfRU5BQkxFIDw8 DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfQUREUl9CSVRfUE9TKSB8DQorIENETlNf UVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfTlVNX0FERFJfQllURVMgKDMpOw0KKw0KKyBpZiAoRUZJ X0VSUk9SIChDZG5zUXNwaUV4ZWN1dGVDb21tYW5kIChJbnN0YW5jZSwgRGV2Q29uZmlnVmFsKSkp IHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorIH0NCisNCisgaWYgKEVGSV9FUlJPUiAo Tm9yRmxhc2hQb2xsU3RhdHVzUmVnaXN0ZXIgKEluc3RhbmNlKSkpIHsNCisgcmV0dXJuIEVGSV9E RVZJQ0VfRVJST1I7DQorIH0NCisNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioN CisgVGhpcyBmdW5jdGlvbiB1bmxvY2tzIGFuZCBlcmFzZXMgYW4gZW50aXJlIE5PUiBGbGFzaCBi bG9jay4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFy aWFibGUgc3RvcmUgcmVnaW9uLg0KKyBAcGFyYW1baW5dIEJsb2NrQWRkcmVzcyBCbG9jayBhZGRy ZXNzIHdpdGhpbiB0aGUgdmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKw0KKyBAcmV0dmFsIEVGSV9T VUNDRVNTIEVyYXNlIGFuZCB1bmxvY2sgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4NCisgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SIFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuDQorKiovDQor RUZJX1NUQVRVUw0KK05vckZsYXNoVW5sb2NrQW5kRXJhc2VTaW5nbGVCbG9jayAoDQorIElOIE5P Ul9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsDQorIElOIFVJTlROIEJsb2NrQWRkcmVzcw0KKyAp DQorew0KKyBFRklfU1RBVFVTIFN0YXR1czsNCisgVUlOVE4gSW5kZXg7DQorIEVGSV9UUEwgT3Jp Z2luYWxUUEw7DQorDQorIE5vckZsYXNoTG9jayAoJk9yaWdpbmFsVFBMKTsNCisNCisgSW5kZXgg PSAwOw0KKyBkbyB7DQorIC8vIFVubG9jayB0aGUgYmxvY2sgaWYgd2UgaGF2ZSB0bw0KKyBTdGF0 dXMgPSBOb3JGbGFzaFVubG9ja1NpbmdsZUJsb2NrSWZOZWNlc3NhcnkgKEluc3RhbmNlLCBCbG9j a0FkZHJlc3MpOw0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIGJyZWFrOw0KKyB9DQor DQorIFN0YXR1cyA9IE5vckZsYXNoRXJhc2VTaW5nbGVCbG9jayAoSW5zdGFuY2UsIEJsb2NrQWRk cmVzcyk7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgYnJlYWs7DQorIH0NCisNCisg SW5kZXgrKzsNCisgfSB3aGlsZSAoKEluZGV4IDwgTk9SX0ZMQVNIX0VSQVNFX1JFVFJZKSAmJiAo U3RhdHVzICE9IEVGSV9TVUNDRVNTKSk7DQpbU0FNSV0gSSB0aGluayB0aGVyZSBpcyBzb21ldGhp bmcgd3Jvbmcgd2l0aCB0aGUgbG9vcCBjb25kaXRpb24uDQpJZiBJIGFtIG5vdCB3cm9uZywgdGhl IGNoZWNrIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhbnkg ZWZmZWN0IGFzIHRoZSBjb2RlIGluIHRoZSB3aGlsZSBsb29wIHdpbGwgYnJlYWsgb3V0IG9mIHRo ZXJlIGlzIGFuIGVycm9yLg0KQ2FuIHlvdSBjaGVjaywgcGxlYXNlPw0KWy9TQU1JXQ0KDQoNCisN CisgaWYgKEluZGV4ID09IE5PUl9GTEFTSF9FUkFTRV9SRVRSWSkgew0KKyBERUJVRyAoKA0KKyBE RUJVR19FUlJPUiwNCisgIkVyYXNlU2luZ2xlQmxvY2soQmxvY2tBZGRyZXNzPTB4JTA4eDogQmxv Y2sgTG9ja2VkIEVycm9yICINCisgIih0cnkgdG8gZXJhc2UgJWQgdGltZXMpXG4iLA0KKyBCbG9j a0FkZHJlc3MsDQorIEluZGV4DQorICkpOw0KKyB9DQorDQorIE5vckZsYXNoVW5sb2NrIChPcmln aW5hbFRQTCk7DQorDQorIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyBXcml0ZSBhIHNp bmdsZSB3b3JkIHRvIGdpdmVuIGxvY2F0aW9uLg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5P UiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uDQorIEBwYXJhbVtpbl0g V29yZEFkZHJlc3MgVGhlIGFkZHJlc3MgaW4gTk9SIGZsYXNoIHRvIHdyaXRlIGdpdmVuIHdvcmQu DQorIEBwYXJhbVtpbl0gV3JpdGVEYXRhIFRoZSBkYXRhIHRvIHdyaXRlIGludG8gTk9SIGZsYXNo IGxvY2F0aW9uLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFdyaXRlIGlzIGNvbXBsZXRlLg0K KyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci4N CisqKi8NCitFRklfU1RBVFVTDQorTm9yRmxhc2hXcml0ZVNpbmdsZVdvcmQgKA0KKyBJTiBOT1Jf RkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBVSU5UTiBXb3JkQWRkcmVzcywNCisgSU4g VUlOVDMyIFdyaXRlRGF0YQ0KKyApDQorew0KKyBERUJVRyAoKA0KKyBERUJVR19JTkZPLA0KKyAi Tm9yRmxhc2hXcml0ZVNpbmdsZVdvcmQoV29yZEFkZHJlc3M9MHglMDh4LCBXcml0ZURhdGE9MHgl MDh4KVxuIiwNCisgV29yZEFkZHJlc3MsDQorIFdyaXRlRGF0YQ0KKyApKTsNCisNCisgaWYgKEVG SV9FUlJPUiAoTm9yRmxhc2hFbmFibGVXcml0ZSAoSW5zdGFuY2UpKSkgew0KKyByZXR1cm4gRUZJ X0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyBNbWlvV3JpdGUzMiAoV29yZEFkZHJlc3MsIFdyaXRl RGF0YSk7DQorIGlmIChFRklfRVJST1IgKE5vckZsYXNoUG9sbFN0YXR1c1JlZ2lzdGVyIChJbnN0 YW5jZSkpKSB7DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIHJldHVybiBF RklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorIFdyaXRlIGEgZnVsbCBibG9jayB0byBnaXZlbiBs b2NhdGlvbi4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2Yg dmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKyBAcGFyYW1baW5dIExiYSBUaGUgbG9naWNhbCBibG9j ayBhZGRyZXNzIGluIE5PUiBmbGFzaC4NCisgQHBhcmFtW2luXSBEYXRhQnVmZmVyIFRoZSBkYXRh IHRvIHdyaXRlIGludG8gTk9SIGZsYXNoIGxvY2F0aW9uLg0KKyBAcGFyYW1baW5dIEJsb2NrU2l6 ZUluV29yZHMgVGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZS4NCisNCisgQHJldHZhbCBFRklf U1VDQ0VTUyBXcml0ZSBpcyBjb21wbGV0ZS4NCisgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SIFRo ZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuDQorKiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNo V3JpdGVGdWxsQmxvY2sgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJ TiBFRklfTEJBIExiYSwNCisgSU4gVUlOVDMyICpEYXRhQnVmZmVyLA0KKyBJTiBVSU5UMzIgQmxv Y2tTaXplSW5Xb3Jkcw0KKyApDQorew0KKyBFRklfU1RBVFVTIFN0YXR1czsNCisgVUlOVE4gV29y ZEFkZHJlc3M7DQorIFVJTlQzMiBXb3JkSW5kZXg7DQorIFVJTlROIEJsb2NrQWRkcmVzczsNCisg RUZJX1RQTCBPcmlnaW5hbFRQTDsNCisNCisgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQorDQorIC8v IEdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYmxvY2sNCisgQmxvY2tBZGRyZXNzID0g R0VUX05PUl9CTE9DS19BRERSRVNTICgNCisgSW5zdGFuY2UtPlJlZ2lvbkJhc2VBZGRyZXNzLA0K KyBMYmEsDQorIEJsb2NrU2l6ZUluV29yZHMgKiA0DQorICk7DQorDQorIC8vIFN0YXJ0IHdyaXRp bmcgZnJvbSB0aGUgZmlyc3QgYWRkcmVzcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGJsb2NrDQorIFdv cmRBZGRyZXNzID0gQmxvY2tBZGRyZXNzOw0KKw0KKyBOb3JGbGFzaExvY2sgKCZPcmlnaW5hbFRQ TCk7DQorDQorIFN0YXR1cyA9IE5vckZsYXNoVW5sb2NrQW5kRXJhc2VTaW5nbGVCbG9jayAoSW5z dGFuY2UsIEJsb2NrQWRkcmVzcyk7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgREVC VUcgKCgNCisgREVCVUdfRVJST1IsDQorICJXcml0ZVNpbmdsZUJsb2NrOiBFUlJPUiAtIEZhaWxl ZCB0byBVbmxvY2sgYW5kIEVyYXNlIHRoZSBzaW5nbGUgIg0KKyAiYmxvY2sgYXQgMHglWFxuIiwN CisgQmxvY2tBZGRyZXNzDQorICkpOw0KKyBnb3RvIGV4aXRfaGFuZGxlcjsNCisgfQ0KKw0KKyBm b3IgKFdvcmRJbmRleCA9IDA7DQorIFdvcmRJbmRleCA8IEJsb2NrU2l6ZUluV29yZHM7DQorIFdv cmRJbmRleCsrLCBEYXRhQnVmZmVyKyssIFdvcmRBZGRyZXNzICs9IDQpDQorIHsNCisgU3RhdHVz ID0gTm9yRmxhc2hXcml0ZVNpbmdsZVdvcmQgKEluc3RhbmNlLCBXb3JkQWRkcmVzcywgKkRhdGFC dWZmZXIpOw0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIGdvdG8gZXhpdF9oYW5kbGVy Ow0KKyB9DQorIH0NCisNCitleGl0X2hhbmRsZXI6DQorIE5vckZsYXNoVW5sb2NrIChPcmlnaW5h bFRQTCk7DQorDQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgREVCVUcgKCgNCisgREVC VUdfRVJST1IsDQorICJOT1IgRkxBU0ggUHJvZ3JhbW1pbmcgW1dyaXRlU2luZ2xlQmxvY2tdIGZh aWxlZCBhdCBhZGRyZXNzIDB4JTA4eC4gIg0KKyAiRXhpdCBTdGF0dXMgPSAlci5cbiIsDQorIFdv cmRBZGRyZXNzLA0KKyBTdGF0dXMNCisgKSk7DQorIH0NCisNCisgcmV0dXJuIFN0YXR1czsNCit9 DQorDQorLyoqDQorIFdyaXRlIG11bHRpcGxlIGJsb2Nrcy4NCisNCisgQHBhcmFtW2luXSBJbnN0 YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKyBAcGFy YW1baW5dIExiYSBUaGUgc3RhcnRpbmcgbG9naWNhbCBibG9jayBpbmRleC4NCisgQHBhcmFtW2lu XSBCdWZmZXJTaXplSW5CeXRlcyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLg0KKyBAcGFy YW1baW5dIEJ1ZmZlciBUaGUgcG9pbnRlciB0byBhIGNhbGxlci1hbGxvY2F0ZWQgYnVmZmVyIHRo YXQNCisgY29udGFpbnMgdGhlIHNvdXJjZSBmb3IgdGhlIHdyaXRlLg0KKw0KKyBAcmV0dmFsIEVG SV9TVUNDRVNTIFdyaXRlIGlzIGNvbXBsZXRlLg0KKyBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLg0KKyBAcmV0dmFsIEVGSV9CQURfQlVGRkVS X1NJWkUgSW52YWxpZCBidWZmZXIgc2l6ZSBwYXNzZWQuDQorKiovDQorRUZJX1NUQVRVUw0KK05v ckZsYXNoV3JpdGVCbG9ja3MgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0K KyBJTiBFRklfTEJBIExiYSwNCisgSU4gVUlOVE4gQnVmZmVyU2l6ZUluQnl0ZXMsDQorIElOIFZP SUQgKkJ1ZmZlcg0KKyApDQorew0KKyBVSU5UMzIgKldyaXRlQnVmZmVyOw0KKyBFRklfU1RBVFVT IFN0YXR1czsNCisgRUZJX0xCQSBDdXJyZW50QmxvY2s7DQorIFVJTlQzMiBCbG9ja1NpemVJbldv cmRzOw0KKyBVSU5UMzIgTnVtQmxvY2tzOw0KKyBVSU5UMzIgQmxvY2tDb3VudDsNCisNCisgU3Rh dHVzID0gRUZJX1NVQ0NFU1M7DQorIC8vIFRoZSBidWZmZXIgbXVzdCBiZSB2YWxpZA0KKyBpZiAo QnVmZmVyID09IE5VTEwpIHsNCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgfQ0K Kw0KKyAvLyBXZSBtdXN0IGhhdmUgc29tZSBieXRlcyB0byByZWFkDQorIERFQlVHICgoDQorIERF QlVHX0lORk8sDQorICJOb3JGbGFzaFdyaXRlQmxvY2tzOiBCdWZmZXJTaXplSW5CeXRlcz0weCV4 XG4iLA0KKyBCdWZmZXJTaXplSW5CeXRlcw0KKyApKTsNCisgaWYgKEJ1ZmZlclNpemVJbkJ5dGVz ID09IDApIHsNCisgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7DQorIH0NCisNCisgLy8gVGhl IHNpemUgb2YgdGhlIGJ1ZmZlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUN CisgREVCVUcgKCgNCisgREVCVUdfSU5GTywNCisgIk5vckZsYXNoV3JpdGVCbG9ja3M6IEJsb2Nr U2l6ZSBpbiBieXRlcyA9MHgleFxuIiwNCisgSW5zdGFuY2UtPk1lZGlhLkJsb2NrU2l6ZQ0KKyAp KTsNCisgaWYgKChCdWZmZXJTaXplSW5CeXRlcyAlIEluc3RhbmNlLT5NZWRpYS5CbG9ja1NpemUp ICE9IDApIHsNCisgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7DQorIH0NCisNCisgLy8gQWxs IGJsb2NrcyBtdXN0IGJlIHdpdGhpbiB0aGUgZGV2aWNlDQorIE51bUJsb2NrcyA9ICgoVUlOVDMy KUJ1ZmZlclNpemVJbkJ5dGVzKSAvIEluc3RhbmNlLT5NZWRpYS5CbG9ja1NpemU7DQorDQorIERF QlVHICgoDQorIERFQlVHX0lORk8sDQorICJOb3JGbGFzaFdyaXRlQmxvY2tzOiBOdW1CbG9ja3M9 JWQsIExhc3RCbG9jaz0lbGQsIExiYT0lbGQuXG4iLA0KKyBOdW1CbG9ja3MsDQorIEluc3RhbmNl LT5NZWRpYS5MYXN0QmxvY2ssDQorIExiYQ0KKyApKTsNCisNCisgaWYgKChMYmEgKyBOdW1CbG9j a3MpID4gKEluc3RhbmNlLT5NZWRpYS5MYXN0QmxvY2sgKyAxKSkgew0KKyBERUJVRyAoKA0KKyBE RUJVR19FUlJPUiwNCisgIk5vckZsYXNoV3JpdGVCbG9ja3M6IEVSUk9SIC0gV3JpdGUgd2lsbCBl eGNlZWQgbGFzdCBibG9jay5cbiINCisgKSk7DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQorIH0NCisNCisgQmxvY2tTaXplSW5Xb3JkcyA9IEluc3RhbmNlLT5NZWRpYS5CbG9ja1Np emUgLyA0Ow0KKw0KKyAvLyBCZWNhdXNlIHRoZSB0YXJnZXQgKkJ1ZmZlciBpcyBhIHBvaW50ZXIg dG8gVk9JRCwgd2UgbXVzdCBwdXQNCisgLy8gYWxsIHRoZSBkYXRhIGludG8gYSBwb2ludGVyIHRv IGEgcHJvcGVyIGRhdGEgdHlwZSwgc28gdXNlICpXcml0ZUJ1ZmZlcg0KKyBXcml0ZUJ1ZmZlciA9 IChVSU5UMzIgKilCdWZmZXI7DQorDQorIEN1cnJlbnRCbG9jayA9IExiYTsNCisgZm9yIChCbG9j a0NvdW50ID0gMDsNCisgQmxvY2tDb3VudCA8IE51bUJsb2NrczsNCisgQmxvY2tDb3VudCsrLCBD dXJyZW50QmxvY2srKywgV3JpdGVCdWZmZXIgKz0gQmxvY2tTaXplSW5Xb3JkcykNCisgew0KKyBE RUJVRyAoKA0KKyBERUJVR19JTkZPLA0KKyAiTm9yRmxhc2hXcml0ZUJsb2NrczogV3JpdGluZyBi bG9jayAjJWRcbiIsDQorIChVSU5UTilDdXJyZW50QmxvY2sNCisgKSk7DQorDQorIFN0YXR1cyA9 IE5vckZsYXNoV3JpdGVGdWxsQmxvY2sgKA0KKyBJbnN0YW5jZSwNCisgQ3VycmVudEJsb2NrLA0K KyBXcml0ZUJ1ZmZlciwNCisgQmxvY2tTaXplSW5Xb3Jkcw0KKyApOw0KKw0KKyBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorIGJyZWFrOw0KKyB9DQorIH0NCisNCisgREVCVUcgKChERUJVR19J TkZPLCAiTm9yRmxhc2hXcml0ZUJsb2NrczogRXhpdCBTdGF0dXMgPSAlci5cbiIsIFN0YXR1cykp Ow0KKyByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgUmVhZCBtdWx0aXBsZSBibG9ja3Mu DQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlIG9mIHZhcmlhYmxl IHN0b3JlIHJlZ2lvbi4NCisgQHBhcmFtW2luXSBMYmEgVGhlIHN0YXJ0aW5nIGxvZ2ljYWwgYmxv Y2sgaW5kZXggdG8gcmVhZCBmcm9tLg0KKyBAcGFyYW1baW5dIEJ1ZmZlclNpemVJbkJ5dGVzIFRo ZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4NCisgQHBhcmFtW291dF0gQnVmZmVyIFRoZSBwb2lu dGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRlZCBidWZmZXIgdGhhdA0KKyBzaG91bGQgYmUgY29waWVk IHdpdGggcmVhZCBkYXRhLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlYWQgaXMgY29tcGxl dGUuDQorIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEludmFsaWQgcGFyYW1ldGVycyBw YXNzZWQuDQorIEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0laRSBJbnZhbGlkIGJ1ZmZlciBzaXpl IHBhc3NlZC4NCisqKi8NCitFRklfU1RBVFVTDQorTm9yRmxhc2hSZWFkQmxvY2tzICgNCisgSU4g Tk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSwNCisgSU4gRUZJX0xCQSBMYmEsDQorIElOIFVJ TlROIEJ1ZmZlclNpemVJbkJ5dGVzLA0KKyBPVVQgVk9JRCAqQnVmZmVyDQorICkNCit7DQorIFVJ TlQzMiBOdW1CbG9ja3M7DQorIFVJTlROIFN0YXJ0QWRkcmVzczsNCisNCisgREVCVUcgKCgNCisg REVCVUdfSU5GTywNCisgIk5vckZsYXNoUmVhZEJsb2NrczogQnVmZmVyU2l6ZT0weCV4QiBCbG9j a1NpemU9MHgleEIgTGFzdEJsb2NrPSVsZCwgIg0KKyAiTGJhPSVsZC5cbiIsDQorIEJ1ZmZlclNp emVJbkJ5dGVzLA0KKyBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplLA0KKyBJbnN0YW5jZS0+TWVk aWEuTGFzdEJsb2NrLA0KKyBMYmENCisgKSk7DQorDQorIC8vIFRoZSBidWZmZXIgbXVzdCBiZSB2 YWxpZA0KKyBpZiAoQnVmZmVyID09IE5VTEwpIHsNCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCisgfQ0KKw0KKyAvLyBSZXR1cm4gaWYgd2UgZG8gbm90IGhhdmUgYW55IGJ5dGUgdG8g cmVhZA0KKyBpZiAoQnVmZmVyU2l6ZUluQnl0ZXMgPT0gMCkgew0KKyByZXR1cm4gRUZJX1NVQ0NF U1M7DQorIH0NCisNCisgLy8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBtdXN0IGJlIGEgbXVsdGlw bGUgb2YgdGhlIGJsb2NrIHNpemUNCisgaWYgKChCdWZmZXJTaXplSW5CeXRlcyAlIEluc3RhbmNl LT5NZWRpYS5CbG9ja1NpemUpICE9IDApIHsNCisgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7 DQorIH0NCisNCisgTnVtQmxvY2tzID0gKChVSU5UMzIpQnVmZmVyU2l6ZUluQnl0ZXMpIC8gSW5z dGFuY2UtPk1lZGlhLkJsb2NrU2l6ZTsNCisNCisgaWYgKChMYmEgKyBOdW1CbG9ja3MpID4gKElu c3RhbmNlLT5NZWRpYS5MYXN0QmxvY2sgKyAxKSkgew0KKyBERUJVRyAoKA0KKyBERUJVR19FUlJP UiwNCisgIk5vckZsYXNoUmVhZEJsb2NrczogRVJST1IgLSBSZWFkIHdpbGwgZXhjZWVkIGxhc3Qg YmxvY2tcbiINCisgKSk7DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorIH0NCisN CisgLy8gR2V0IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbQ0KKyBTdGFydEFkZHJl c3MgPSBHRVRfTk9SX0JMT0NLX0FERFJFU1MgKA0KKyBJbnN0YW5jZS0+UmVnaW9uQmFzZUFkZHJl c3MsDQorIExiYSwNCisgSW5zdGFuY2UtPk1lZGlhLkJsb2NrU2l6ZQ0KKyApOw0KKw0KKyAvLyBS ZWFkb3V0IHRoZSBkYXRhDQorIENvcHlNZW0gKEJ1ZmZlciwgKFVJTlROICopU3RhcnRBZGRyZXNz LCBCdWZmZXJTaXplSW5CeXRlcyk7DQorDQorIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQor LyoqDQorIFJlYWQgZnJvbSBOT1IgZmxhc2guDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9S IGZsYXNoIEluc3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi4NCisgQHBhcmFtW2luXSBM YmEgVGhlIHN0YXJ0aW5nIGxvZ2ljYWwgYmxvY2sgaW5kZXggdG8gcmVhZCBmcm9tLg0KKyBAcGFy YW1baW5dIE9mZnNldCBPZmZzZXQgaW50byB0aGUgYmxvY2sgYXQgd2hpY2ggdG8gYmVnaW4gcmVh ZGluZy4NCisgQHBhcmFtW2luXSBCdWZmZXJTaXplSW5CeXRlcyBUaGUgbnVtYmVyIG9mIGJ5dGVz IHRvIHJlYWQuDQorIEBwYXJhbVtvdXRdIEJ1ZmZlciBUaGUgcG9pbnRlciB0byBhIGNhbGxlci1h bGxvY2F0ZWQgYnVmZmVyIHRoYXQNCisgc2hvdWxkIGJlIGNvcGllZCB3aXRoIHJlYWQgZGF0YS4N CisNCisgQHJldHZhbCBFRklfU1VDQ0VTUyBSZWFkIGlzIGNvbXBsZXRlLg0KKyBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLg0KKyoqLw0KK0VG SV9TVEFUVVMNCitOb3JGbGFzaFJlYWQgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3Rh bmNlLA0KKyBJTiBFRklfTEJBIExiYSwNCisgSU4gVUlOVE4gT2Zmc2V0LA0KKyBJTiBVSU5UTiBC dWZmZXJTaXplSW5CeXRlcywNCisgT1VUIFZPSUQgKkJ1ZmZlcg0KKyApDQorew0KKyBVSU5UTiBT dGFydEFkZHJlc3M7DQorDQorIC8vIFRoZSBidWZmZXIgbXVzdCBiZSB2YWxpZA0KKyBpZiAoQnVm ZmVyID09IE5VTEwpIHsNCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgfQ0KKw0K KyAvLyBSZXR1cm4gaWYgd2UgZG8gbm90IGhhdmUgYW55IGJ5dGUgdG8gcmVhZA0KKyBpZiAoQnVm ZmVyU2l6ZUluQnl0ZXMgPT0gMCkgew0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQorIH0NCisNCisg aWYgKCgoTGJhICogSW5zdGFuY2UtPk1lZGlhLkJsb2NrU2l6ZSkgKyBPZmZzZXQgKyBCdWZmZXJT aXplSW5CeXRlcykgPg0KKyBJbnN0YW5jZS0+U2l6ZSkNCisgew0KKyBERUJVRyAoKA0KKyBERUJV R19FUlJPUiwNCisgIk5vckZsYXNoUmVhZDogRVJST1IgLSBSZWFkIHdpbGwgZXhjZWVkIGRldmlj ZSBzaXplLlxuIg0KKyApKTsNCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgfQ0K Kw0KKyAvLyBHZXQgdGhlIGFkZHJlc3MgdG8gc3RhcnQgcmVhZGluZyBmcm9tDQorIFN0YXJ0QWRk cmVzcyA9IEdFVF9OT1JfQkxPQ0tfQUREUkVTUyAoDQorIEluc3RhbmNlLT5SZWdpb25CYXNlQWRk cmVzcywNCisgTGJhLA0KKyBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplDQorICk7DQorDQorIC8v IFJlYWRvdXQgdGhlIGRhdGENCisgQ29weU1lbSAoQnVmZmVyLCAoVUlOVE4gKikoU3RhcnRBZGRy ZXNzICsgT2Zmc2V0KSwgQnVmZmVyU2l6ZUluQnl0ZXMpOw0KKw0KKyByZXR1cm4gRUZJX1NVQ0NF U1M7DQorfQ0KKw0KKy8qKg0KKyBXcml0ZSBhIGZ1bGwgb3IgcG9ydGlvbiBvZiBhIGJsb2NrLg0K Kw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJsZSBz dG9yZSByZWdpb24uDQorIEBwYXJhbVtpbl0gTGJhIFRoZSBzdGFydGluZyBsb2dpY2FsIGJsb2Nr IGluZGV4IHRvIHdyaXRlIHRvLg0KKyBAcGFyYW1baW5dIE9mZnNldCBPZmZzZXQgaW50byB0aGUg YmxvY2sgYXQgd2hpY2ggdG8gYmVnaW4gd3JpdGluZy4NCisgQHBhcmFtW2luLCBvdXRdIE51bUJ5 dGVzIFRoZSB0b3RhbCBzaXplIG9mIHRoZSBidWZmZXIuDQorIEBwYXJhbVtpbl0gQnVmZmVyIFRo ZSBwb2ludGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRlZCBidWZmZXIgdGhhdA0KKyBjb250YWlucyB0 aGUgc291cmNlIGZvciB0aGUgd3JpdGUuDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgV3JpdGUg aXMgY29tcGxldGUuDQorIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEludmFsaWQgcGFy YW1ldGVycyBwYXNzZWQuDQorIEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0laRSBCdWZmZXIgc2l6 ZSBub3QgZW5vdWdoLg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSByZXBv cnRlZCBhbiBlcnJvci4NCisqKi8NCitFRklfU1RBVFVTDQorTm9yRmxhc2hXcml0ZVNpbmdsZUJs b2NrICgNCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSwNCisgSU4gRUZJX0xCQSBM YmEsDQorIElOIFVJTlROIE9mZnNldCwNCisgSU4gT1VUIFVJTlROICpOdW1CeXRlcywNCisgSU4g VUlOVDggKkJ1ZmZlcg0KKyApDQorew0KKyBFRklfU1RBVFVTIFN0YXR1czsNCisgVUlOVDMyIFRt cDsNCisgVUlOVDMyIFRtcEJ1ZjsNCisgVUlOVDMyIFdvcmRUb1dyaXRlOw0KKyBVSU5UMzIgTWFz azsNCisgQk9PTEVBTiBEb0VyYXNlOw0KKyBVSU5UTiBCeXRlc1RvV3JpdGU7DQorIFVJTlROIEN1 ck9mZnNldDsNCisgVUlOVE4gV29yZEFkZHI7DQorIFVJTlROIEJsb2NrU2l6ZTsNCisgVUlOVE4g QmxvY2tBZGRyZXNzOw0KKyBVSU5UTiBQcmV2QmxvY2tBZGRyZXNzOw0KKw0KKyBpZiAoQnVmZmVy ID09IE5VTEwpIHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJOb3JGbGFzaFdyaXRl U2luZ2xlQmxvY2s6IEVSUk9SIC0gQnVmZmVyIGlzIGludmFsaWRcbiINCisgKSk7DQorIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorIH0NCisNCisgaWYgKE51bUJ5dGVzID09IE5VTEwp IHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJOb3JGbGFzaFdyaXRlU2luZ2xlQmxv Y2s6IEVSUk9SIC0gTnVtQnl0ZXMgaXMgaW52YWxpZFxuIg0KKyApKTsNCisgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCisgfQ0KKw0KKyBQcmV2QmxvY2tBZGRyZXNzID0gMDsNCisNCisg REVCVUcgKCgNCisgREVCVUdfSU5GTywNCisgIk5vckZsYXNoV3JpdGVTaW5nbGVCbG9jayhQYXJh bWV0ZXJzOiBMYmE9JWxkLCBPZmZzZXQ9MHgleCwgIg0KKyAiKk51bUJ5dGVzPTB4JXgsIEJ1ZmZl ciBAIDB4JTA4eClcbiIsDQorIExiYSwNCisgT2Zmc2V0LA0KKyAqTnVtQnl0ZXMsDQorIEJ1ZmZl cg0KKyApKTsNCisNCisgLy8gTG9jYXRlIHRoZSBibG9jayBzaXplIHRvIGF2b2lkIGRlLXJlZmVy ZW5jaW5nIHBvaW50ZXJzIGFsbCB0aGUgdGltZQ0KKyBCbG9ja1NpemUgPSBJbnN0YW5jZS0+TWVk aWEuQmxvY2tTaXplOw0KKw0KKyAvLyBUaGUgd3JpdGUgbXVzdCBub3Qgc3BhbiBibG9jayBib3Vu ZGFyaWVzLg0KKyAvLyBXZSBuZWVkIHRvIGNoZWNrIGVhY2ggdmFyaWFibGUgaW5kaXZpZHVhbGx5 IGJlY2F1c2UgYWRkaW5nIHR3byBsYXJnZQ0KKyAvLyB2YWx1ZXMgdG9nZXRoZXIgb3ZlcmZsb3dz Lg0KKyBpZiAoKE9mZnNldCA+PSBCbG9ja1NpemUpIHx8DQorICgqTnVtQnl0ZXMgPiBCbG9ja1Np emUpIHx8DQorICgoT2Zmc2V0ICsgKk51bUJ5dGVzKSA+IEJsb2NrU2l6ZSkpDQorIHsNCisgREVC VUcgKCgNCisgREVCVUdfRVJST1IsDQorICJOb3JGbGFzaFdyaXRlU2luZ2xlQmxvY2s6IEVSUk9S IC0gRUZJX0JBRF9CVUZGRVJfU0laRTogIg0KKyAiKE9mZnNldD0weCV4ICsgTnVtQnl0ZXM9MHgl eCkgPiBCbG9ja1NpemU9MHgleFxuIiwNCisgT2Zmc2V0LA0KKyAqTnVtQnl0ZXMsDQorIEJsb2Nr U2l6ZQ0KKyApKTsNCisgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7DQorIH0NCisNCisgLy8g V2UgbXVzdCBoYXZlIHNvbWUgYnl0ZXMgdG8gd3JpdGUNCisgaWYgKCpOdW1CeXRlcyA9PSAwKSB7 DQorIERFQlVHICgoDQorIERFQlVHX0VSUk9SLA0KKyAiTm9yRmxhc2hXcml0ZVNpbmdsZUJsb2Nr OiBFUlJPUiAtIEVGSV9CQURfQlVGRkVSX1NJWkU6ICINCisgIihPZmZzZXQ9MHgleCArIE51bUJ5 dGVzPTB4JXgpID4gQmxvY2tTaXplPTB4JXhcbiIsDQorIE9mZnNldCwNCisgKk51bUJ5dGVzLA0K KyBCbG9ja1NpemUNCisgKSk7DQorIHJldHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOw0KKyB9DQor DQorIC8vIFBpY2sgMTI4Ynl0ZXMgYXMgYSBnb29kIHN0YXJ0IGZvciB3b3JkIG9wZXJhdGlvbnMg YXMgb3Bwb3NlZCB0byBlcmFzaW5nIHRoZQ0KKyAvLyBibG9jayBhbmQgd3JpdGluZyB0aGUgZGF0 YSByZWdhcmRsZXNzIGlmIGFuIGVyYXNlIGlzIHJlYWxseSBuZWVkZWQuDQorIC8vIEl0IGxvb2tz IGxpa2UgbW9zdCBpbmRpdmlkdWFsIE5WIHZhcmlhYmxlIHdyaXRlcyBhcmUgc21hbGxlciB0aGFu IDEyOGJ5dGVzLg0KKyBpZiAoKk51bUJ5dGVzIDw9IDEyOCkgew0KKyAvLyBDaGVjayB0byBzZWUg aWYgd2UgbmVlZCB0byBlcmFzZSBiZWZvcmUgcHJvZ3JhbW1pbmcgdGhlIGRhdGEgaW50byBOT1Iu DQorIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBiaXRzIGFyZSBvbmx5IGNoYW5naW5nIGZyb20gMXMg dG8gMHMgd2UgY2FuIGp1c3Qgd3JpdGUuDQorIC8vIEFmdGVyIGEgYmxvY2sgaXMgZXJhc2VkIGFs bCBiaXRzIGluIHRoZSBibG9jayBpcyBzZXQgdG8gMS4NCisgLy8gSWYgYW55IGJ5dGUgcmVxdWly ZXMgdXMgdG8gZXJhc2Ugd2UganVzdCBnaXZlIHVwIGFuZCByZXdyaXRlIGFsbCBvZiBpdC4NCisg RG9FcmFzZSA9IEZBTFNFOw0KKyBCeXRlc1RvV3JpdGUgPSAqTnVtQnl0ZXM7DQorIEN1ck9mZnNl dCA9IE9mZnNldDsNCisNCisgd2hpbGUgKEJ5dGVzVG9Xcml0ZSA+IDApIHsNCisgLy8gUmVhZCBm dWxsIHdvcmQgZnJvbSBOT1IsIHNwbGljZSBhcyByZXF1aXJlZC4gQSB3b3JkIGlzIHRoZSBzbWFs bGVzdA0KKyAvLyB1bml0IHdlIGNhbiB3cml0ZS4NCisgU3RhdHVzID0gTm9yRmxhc2hSZWFkICgN CisgSW5zdGFuY2UsDQorIExiYSwNCisgQ3VyT2Zmc2V0ICYgfigweDMpLA0KKyBzaXplb2YgKFRt cCksDQorICZUbXANCisgKTsNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyByZXR1cm4g RUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyAvLyBQaHlzaWNhbCBhZGRyZXNzIG9mIHdvcmQg aW4gTk9SIHRvIHdyaXRlLg0KKyBXb3JkQWRkciA9IChDdXJPZmZzZXQgJiB+KDB4MykpICsNCisg R0VUX05PUl9CTE9DS19BRERSRVNTICgNCisgSW5zdGFuY2UtPlJlZ2lvbkJhc2VBZGRyZXNzLA0K KyBMYmEsDQorIEJsb2NrU2l6ZQ0KKyApOw0KKw0KKyAvLyBUaGUgd29yZCBvZiBkYXRhIHRoYXQg aXMgdG8gYmUgd3JpdHRlbi4NCisgVG1wQnVmID0gUmVhZFVuYWxpZ25lZDMyICgNCisgKFVJTlQz MiAqKShCdWZmZXIgKyAoKk51bUJ5dGVzIC0gQnl0ZXNUb1dyaXRlKSkNCisgKTsNCisNCisgLy8g Rmlyc3QgZG8gd29yZCBhbGlnbmVkIGNodW5rcy4NCisgaWYgKChDdXJPZmZzZXQgJiAweDMpID09 IDApIHsNCisgaWYgKEJ5dGVzVG9Xcml0ZSA+PSA0KSB7DQorIC8vIElzIHRoZSBkZXN0aW5hdGlv biBzdGlsbCBpbiAnZXJhc2VkJyBzdGF0ZT8NCisgaWYgKH5UbXAgIT0gMCkgew0KKyAvLyBDaGVj ayB0byBzZWUgaWYgd2UgYXJlIG9ubHkgY2hhbmdpbmcgYml0cyB0byB6ZXJvLg0KKyBpZiAoKFRt cCBeIFRtcEJ1ZikgJiBUbXBCdWYpIHsNCisgRG9FcmFzZSA9IFRSVUU7DQorIGJyZWFrOw0KKyB9 DQorIH0NCisNCisgLy8gV3JpdGUgdGhpcyB3b3JkIHRvIE5PUg0KKyBXb3JkVG9Xcml0ZSA9IFRt cEJ1ZjsNCisgQ3VyT2Zmc2V0ICs9IHNpemVvZiAoVG1wQnVmKTsNCisgQnl0ZXNUb1dyaXRlIC09 IHNpemVvZiAoVG1wQnVmKTsNCisgfSBlbHNlIHsNCisgLy8gQnl0ZXNUb1dyaXRlIDwgNC4gRG8g c21hbGwgd3JpdGVzIGFuZCBsZWZ0LW92ZXJzDQorIE1hc2sgPSB+KCh+MCkgPDwgKEJ5dGVzVG9X cml0ZSAqIDgpKTsNCisgLy8gTWFzayBvdXQgdGhlIGJ5dGVzIHdlIHdhbnQuDQorIFRtcEJ1ZiAm PSBNYXNrOw0KKyAvLyBJcyB0aGUgZGVzdGluYXRpb24gc3RpbGwgaW4gJ2VyYXNlZCcgc3RhdGU/ DQorIGlmICgoVG1wICYgTWFzaykgIT0gTWFzaykgew0KKyAvLyBDaGVjayB0byBzZWUgaWYgd2Ug YXJlIG9ubHkgY2hhbmdpbmcgYml0cyB0byB6ZXJvLg0KKyBpZiAoKFRtcCBeIFRtcEJ1ZikgJiBU bXBCdWYpIHsNCisgRG9FcmFzZSA9IFRSVUU7DQorIGJyZWFrOw0KKyB9DQorIH0NCisNCisgLy8g TWVyZ2Ugb2xkIGFuZCBuZXcgZGF0YS4gV3JpdGUgbWVyZ2VkIHdvcmQgdG8gTk9SDQorIFdvcmRU b1dyaXRlID0gKFRtcCAmIH5NYXNrKSB8IFRtcEJ1ZjsNCisgQ3VyT2Zmc2V0ICs9IEJ5dGVzVG9X cml0ZTsNCisgQnl0ZXNUb1dyaXRlID0gMDsNCisgfQ0KKyB9IGVsc2Ugew0KKyAvLyBEbyBtdWx0 aXBsZSB3b3JkcywgYnV0IHN0YXJ0aW5nIHVuYWxpZ25lZC4NCisgaWYgKEJ5dGVzVG9Xcml0ZSA+ ICg0IC0gKEN1ck9mZnNldCAmIDB4MykpKSB7DQorIE1hc2sgPSAoKH4wKSA8PCAoKEN1ck9mZnNl dCAmIDB4MykgKiA4KSk7DQorIC8vIE1hc2sgb3V0IHRoZSBieXRlcyB3ZSB3YW50Lg0KKyBUbXBC dWYgJj0gTWFzazsNCisgLy8gSXMgdGhlIGRlc3RpbmF0aW9uIHN0aWxsIGluICdlcmFzZWQnIHN0 YXRlPw0KKyBpZiAoKFRtcCAmIE1hc2spICE9IE1hc2spIHsNCisgLy8gQ2hlY2sgdG8gc2VlIGlm IHdlIGFyZSBvbmx5IGNoYW5naW5nIGJpdHMgdG8gemVyby4NCisgaWYgKChUbXAgXiBUbXBCdWYp ICYgVG1wQnVmKSB7DQorIERvRXJhc2UgPSBUUlVFOw0KKyBicmVhazsNCisgfQ0KKyB9DQorDQor IC8vIE1lcmdlIG9sZCBhbmQgbmV3IGRhdGEuIFdyaXRlIG1lcmdlZCB3b3JkIHRvIE5PUg0KKyBX b3JkVG9Xcml0ZSA9IChUbXAgJiB+TWFzaykgfCBUbXBCdWY7DQorIEJ5dGVzVG9Xcml0ZSAtPSAo NCAtIChDdXJPZmZzZXQgJiAweDMpKTsNCisgQ3VyT2Zmc2V0ICs9ICg0IC0gKEN1ck9mZnNldCAm IDB4MykpOw0KKyB9IGVsc2Ugew0KKyAvLyBVbmFsaWduZWQgYW5kIGZpdHMgaW4gb25lIHdvcmQu DQorIE1hc2sgPSAofigofjApIDw8IChCeXRlc1RvV3JpdGUgKiA4KSkpIDw8ICgoQ3VyT2Zmc2V0 ICYgMHgzKSAqIDgpOw0KKyAvLyBNYXNrIG91dCB0aGUgYnl0ZXMgd2Ugd2FudC4NCisgVG1wQnVm ID0gKFRtcEJ1ZiA8PCAoKEN1ck9mZnNldCAmIDB4MykgKiA4KSkgJiBNYXNrOw0KKyAvLyBJcyB0 aGUgZGVzdGluYXRpb24gc3RpbGwgaW4gJ2VyYXNlZCcgc3RhdGU/DQorIGlmICgoVG1wICYgTWFz aykgIT0gTWFzaykgew0KKyAvLyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIG9ubHkgY2hhbmdpbmcg Yml0cyB0byB6ZXJvLg0KKyBpZiAoKFRtcCBeIFRtcEJ1ZikgJiBUbXBCdWYpIHsNCisgRG9FcmFz ZSA9IFRSVUU7DQorIGJyZWFrOw0KKyB9DQorIH0NCisNCisgLy8gTWVyZ2Ugb2xkIGFuZCBuZXcg ZGF0YS4gV3JpdGUgbWVyZ2VkIHdvcmQgdG8gTk9SDQorIFdvcmRUb1dyaXRlID0gKFRtcCAmIH5N YXNrKSB8IFRtcEJ1ZjsNCisgQ3VyT2Zmc2V0ICs9IEJ5dGVzVG9Xcml0ZTsNCisgQnl0ZXNUb1dy aXRlID0gMDsNCisgfQ0KKyB9DQorDQorIEJsb2NrQWRkcmVzcyA9IEdFVF9OT1JfQkxPQ0tfQURE UkVTUyAoDQorIEluc3RhbmNlLT5SZWdpb25CYXNlQWRkcmVzcywNCisgTGJhLA0KKyBCbG9ja1Np emUNCisgKTsNCisgaWYgKEJsb2NrQWRkcmVzcyAhPSBQcmV2QmxvY2tBZGRyZXNzKSB7DQorIFN0 YXR1cyA9IE5vckZsYXNoVW5sb2NrU2luZ2xlQmxvY2tJZk5lY2Vzc2FyeSAoSW5zdGFuY2UsIEJs b2NrQWRkcmVzcyk7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgcmV0dXJuIEVGSV9E RVZJQ0VfRVJST1I7DQorIH0NCisNCisgUHJldkJsb2NrQWRkcmVzcyA9IEJsb2NrQWRkcmVzczsN CisgfQ0KKw0KKyBTdGF0dXMgPSBOb3JGbGFzaFdyaXRlU2luZ2xlV29yZCAoSW5zdGFuY2UsIFdv cmRBZGRyLCBXb3JkVG9Xcml0ZSk7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgcmV0 dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorIH0NCisgfQ0KKw0KKyAvLyBFeGl0IGlmIHdlIGdvdCBo ZXJlIGFuZCBjb3VsZCB3cml0ZSBhbGwgdGhlIGRhdGEuIE90aGVyd2lzZSBkbyB0aGUNCisgLy8g RXJhc2UtV3JpdGUgY3ljbGUuDQorIGlmICghRG9FcmFzZSkgew0KKyByZXR1cm4gRUZJX1NVQ0NF U1M7DQorIH0NCisgfQ0KKw0KKyAvLyBDaGVjayB3ZSBkaWQgZ2V0IHNvbWUgbWVtb3J5LiBCdWZm ZXIgaXMgQmxvY2tTaXplLg0KKyBpZiAoSW5zdGFuY2UtPlNoYWRvd0J1ZmZlciA9PSBOVUxMKSB7 DQorIERFQlVHICgoREVCVUdfRVJST1IsICJGdmJXcml0ZTogRVJST1IgLSBCdWZmZXIgbm90IHJl YWR5XG4iKSk7DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIC8vIFJlYWQg Tk9SIEZsYXNoIGRhdGEgaW50byBzaGFkb3cgYnVmZmVyDQorIFN0YXR1cyA9IE5vckZsYXNoUmVh ZEJsb2NrcyAoDQorIEluc3RhbmNlLA0KKyBMYmEsDQorIEJsb2NrU2l6ZSwNCisgSW5zdGFuY2Ut PlNoYWRvd0J1ZmZlcg0KKyApOw0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIC8vIFJl dHVybiBvbmUgb2YgdGhlIHByZS1hcHByb3ZlZCBlcnJvciBzdGF0dXNlcw0KKyByZXR1cm4gRUZJ X0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyAvLyBQdXQgdGhlIGRhdGEgYXQgdGhlIGFwcHJvcHJp YXRlIGxvY2F0aW9uIGluc2lkZSB0aGUgYnVmZmVyIGFyZWENCisgQ29weU1lbSAoDQorIChWT0lE ICopKChVSU5UTilJbnN0YW5jZS0+U2hhZG93QnVmZmVyICsgT2Zmc2V0KSwNCisgQnVmZmVyLA0K KyAqTnVtQnl0ZXMNCisgKTsNCisNCisgLy8gV3JpdGUgdGhlIG1vZGlmaWVkIGJ1ZmZlciBiYWNr IHRvIHRoZSBOb3JGbGFzaA0KKyBTdGF0dXMgPSBOb3JGbGFzaFdyaXRlQmxvY2tzICgNCisgSW5z dGFuY2UsDQorIExiYSwNCisgQmxvY2tTaXplLA0KKyBJbnN0YW5jZS0+U2hhZG93QnVmZmVyDQor ICk7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgLy8gUmV0dXJuIG9uZSBvZiB0aGUg cHJlLWFwcHJvdmVkIGVycm9yIHN0YXR1c2VzDQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0K KyB9DQorDQorIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorIFJlYWQgSkVERUMg SUQgb2YgTk9SIGZsYXNoIGRldmljZS4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxh c2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKyBAcGFyYW1bb3V0XSBKZWRl Y0lkIEpFREVDIElEIG9mIE5PUiBmbGFzaCBkZXZpY2UuDQorIE1heGltdW0gbGVuZ3RoIG9mIEpl ZGVjSWQgY2FuIGJlIHVwdG8gNiBieXRlcw0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFRoZSB3 cml0ZSBpcyBjb21wbGV0ZWQuDQorIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiBGYWlsZWQgdG8g ZmV0Y2ggSkVERUMgSUQuDQorIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEludmFsaWQg cGFyYW1ldGVycyBwYXNzZWQuDQorKiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNoUmVhZElkICgN CisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSwNCisgT1VUIFVJTlQ4ICpKZWRlY0lk DQorICkNCit7DQorIFVJTlQzMiB2YWw7DQorDQorIGlmICgoSW5zdGFuY2UgPT0gTlVMTCkgfHwg KEplZGVjSWQgPT0gTlVMTCkpIHsNCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisg fQ0KKw0KKyB2YWwgPSAoU1BJTk9SX09QX1JESUQgPDwNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9D VFJMX1JFR19PUENPREVfQklUX1BPUykgfA0KKyAoQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JF R19SRUFEX0VOQUJMRSA8PA0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1JFQURFTl9C SVRfUE9TKSB8DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfTlVNX0RBVEFfQllURVMg KDMpOw0KKw0KKyBpZiAoRUZJX0VSUk9SIChDZG5zUXNwaUV4ZWN1dGVDb21tYW5kIChJbnN0YW5j ZSwgdmFsKSkpIHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorIH0NCisNCisgdmFsID0g TW1pb1JlYWQzMiAoDQorIEluc3RhbmNlLT5Ib3N0Q29udHJvbGxlckJhc2VBZGRyZXNzICsgQ0RO U19RU1BJX0ZMQVNIX0NNRF9SRUFEX0RBVEFfUkVHX09GRlNFVA0KKyApOw0KKw0KKyAvLyBNYW51 ZmFjdHVyZXIgSUQgZmllbGQNCisgSmVkZWNJZFswXSA9IChVSU5UOCl2YWw7DQorIC8vIFR5cGUg ZmllbGQNCisgSmVkZWNJZFsxXSA9IChVSU5UOCkodmFsID4+IDgpOw0KKyAvLyBDYXBhY2l0eSBm aWVsZA0KKyBKZWRlY0lkWzJdID0gKFVJTlQ4KSh2YWwgPj4gMTYpOw0KKw0KKyBERUJVRyAoKA0K KyBERUJVR19JTkZPLA0KKyAiTm9yIGZsYXNoIGRldGVjdGVkLCBKZWRlYyBJRCwgTWFudWZhY3R1 cmVyIElkPSV4IFR5cGU9JXggQ2FwYWNpdHk9JXggXG4iLA0KKyBKZWRlY0lkWzBdLA0KKyBKZWRl Y0lkWzFdLA0KKyBKZWRlY0lkWzJdDQorICkpOw0KKw0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQor fQ0KKw0KKy8qKg0KKyBOT1IgRmxhc2ggUmVzZXQNCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBO T1IgZmxhc2ggaW5zdGFuY2UuDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgUmV0dXJuIHN1Y2Nl c3Mgb24gZXZlcnkgY2FsbC4NCisqKi8NCitFRklfU1RBVFVTDQorTm9yRmxhc2hSZXNldCAoDQor IElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UNCisgKQ0KK3sNCisgcmV0dXJuIEVGSV9T VUNDRVNTOw0KK30NCi0tDQoyLjI1LjENCg0KDQoNCg0KDQoKLT0tPS09LT0tPS09LT0tPS09LT0t PS0KR3JvdXBzLmlvIExpbmtzOiBZb3UgcmVjZWl2ZSBhbGwgbWVzc2FnZXMgc2VudCB0byB0aGlz IGdyb3VwLgpWaWV3L1JlcGx5IE9ubGluZSAoIzExOTM0MCk6IGh0dHBzOi8vZWRrMi5ncm91cHMu aW8vZy9kZXZlbC9tZXNzYWdlLzExOTM0MApNdXRlIFRoaXMgVG9waWM6IGh0dHBzOi8vZ3JvdXBz LmlvL210LzEwNjM2NTQ2Ni83Njg2MTc2Ckdyb3VwIE93bmVyOiBkZXZlbCtvd25lckBlZGsyLmdy b3Vwcy5pbwpVbnN1YnNjcmliZTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3Vuc3Vi IFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09LT0tPS09LT0tPS09LT0tPS0KCg0K --_000_PA6PR08MB10767A90D63165ED348C969C6F3F22PA6PR08MB10767eu_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4 bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l dGEgbmFtZT0iR2VuZXJhdG9yIiBjb250ZW50PSJNaWNyb3NvZnQgV29yZCAxNSAoZmlsdGVyZWQg bWVkaXVtKSI+DQo8c3R5bGU+PCEtLQ0KLyogRm9udCBEZWZpbml0aW9ucyAqLw0KQGZvbnQtZmFj ZQ0KCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2 IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsNCglwYW5vc2UtMToy IDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkFwdG9zOw0K CXBhbm9zZS0xOjIgMTEgMCA0IDIgMiAyIDIgMiA0O30NCi8qIFN0eWxlIERlZmluaXRpb25zICov DQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJe21hcmdpbjowY207 DQoJZm9udC1zaXplOjEyLjBwdDsNCglmb250LWZhbWlseToiQXB0b3MiLHNhbnMtc2VyaWY7fQ0K YTpsaW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29s b3I6Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCnNwYW4uRW1haWxTdHlsZTE5 DQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsLXJlcGx5Ow0KCWZvbnQtZmFtaWx5OiJBcHRvcyIs c2Fucy1zZXJpZjsNCgljb2xvcjp3aW5kb3d0ZXh0O30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1z dHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0KCWZvbnQtc2l6ZToxMC4wcHQ7DQoJbXNvLWxpZ2F0dXJl czpub25lO30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjYxMi4wcHQgNzkyLjBwdDsNCglt YXJnaW46NzIuMHB0IDcyLjBwdCA3Mi4wcHQgNzIuMHB0O30NCmRpdi5Xb3JkU2VjdGlvbjENCgl7 cGFnZTpXb3JkU2VjdGlvbjE7fQ0KLS0+PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkVO LUlOIiBsaW5rPSJibHVlIiB2bGluaz0icHVycGxlIiBzdHlsZT0id29yZC13cmFwOmJyZWFrLXdv cmQiPg0KPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj5I aSBTYW1pLDxicj4NClRoYW5rIHlvdSBmb3IgcmV2aWV3aW5nIHRoZSBwYXRjaC48bzpwPjwvbzpw Pjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+WW91IGFyZSByaWdodC4gVGhlIGRv LXdoaWxlIGxvb3AgaXMgcmVkdW5kYW50IGFuZCBoZW5jZSBjYW4gYmUgcmVtb3ZlZC48bzpwPjwv bzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+VGhhbmtzLDxicj4NClNhaGls PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMS4wcHQ7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPjxvOnA+Jm5ic3A7 PC9vOnA+PC9zcGFuPjwvcD4NCjxkaXYgaWQ9Im1haWwtZWRpdG9yLXJlZmVyZW5jZS1tZXNzYWdl LWNvbnRhaW5lciI+DQo8ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpz b2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGNtIDBjbSAwY20iPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTIuMHB0Ij48Yj48c3BhbiBzdHlsZT0i Y29sb3I6YmxhY2siPkZyb206DQo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+ U2FtaSBNdWphd2FyICZsdDtTYW1pLk11amF3YXJAYXJtLmNvbSZndDs8YnI+DQo8Yj5EYXRlOiA8 L2I+V2VkbmVzZGF5LCAyOSBNYXkgMjAyNCBhdCA1OjA2PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250 LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrIj7igK88L3Nw YW4+PHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrIj5QTTxicj4NCjxiPlRvOiA8L2I+U2FoaWwgS2F1 c2hhbCAmbHQ7U2FoaWwuS2F1c2hhbEBhcm0uY29tJmd0OywgZGV2ZWxAZWRrMi5ncm91cHMuaW8g Jmx0O2RldmVsQGVkazIuZ3JvdXBzLmlvJmd0Ozxicj4NCjxiPkNjOiA8L2I+QXJkIEJpZXNoZXV2 ZWwgJmx0O2FyZGIrdGlhbm9jb3JlQGtlcm5lbC5vcmcmZ3Q7LCBMZWlmIExpbmRob2xtICZuYnNw OyAmbHQ7cXVpY19sbGluZGhvbEBxdWljaW5jLmNvbSZndDssIG5kICZsdDtuZEBhcm0uY29tJmd0 Ozxicj4NCjxiPlN1YmplY3Q6IDwvYj5SZTogW2VkazItcGxhdGZvcm1zXVtQQVRDSCBWNCAxNS8x N10gUGxhdGZvcm0vQVJNOiBBZGQgQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYiBmb3IgTm9y Rmxhc2hEeGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxhIG5hbWU9IkJNX0JFR0lO Ij48L2E+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7VGlt ZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmIj5IaSBTYWhpbCw8YnI+DQo8YnI+DQpQbGVhc2UgZmlu ZCBteSBmZWVkYmFjayBpbmxpbmUgbWFya2VkIFtTQU1JXS48YnI+DQo8YnI+DQpSZWdhcmRzLDxi cj4NCjxicj4NClNhbWkgTXVqYXdhcjxicj4NCjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYi Pu+7vzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVv dDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWYiPk9uIDI5LzA1LzIwMjQsIDA5OjU2LCAmcXVv dDtTYWhpbCBLYXVzaGFsJnF1b3Q7ICZsdDtTYWhpbC5LYXVzaGFsQGFybS5jb20gJmx0OzxhIGhy ZWY9Im1haWx0bzpTYWhpbC5LYXVzaGFsQGFybS5jb20iPm1haWx0bzpTYWhpbC5LYXVzaGFsQGFy bS5jb208L2E+Jmd0OyZndDsNCiB3cm90ZTo8YnI+DQo8YnI+DQo8YnI+DQpGcm9tOiBzYWhpbCAm bHQ7c2FoaWxAYXJtLmNvbSAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNhaGlsQGFybS5jb20iPm1haWx0 bzpzYWhpbEBhcm0uY29tPC9hPiZndDsmZ3Q7PGJyPg0KPGJyPg0KPGJyPg0KSW4gTjFTZHAgcGxh dGZvcm0sIHRoZSBTb0MgaXMgY29ubmVjdGVkIHRvIElPRlBHQSB3aGljaCBoYXMgYTxicj4NCkNh ZGVuY2UgUXVhZCBTUEkgKFFTUEkpIGNvbnRyb2xsZXIuIFRoaXMgUVNQSSBjb250cm9sbGVyIG1h bmFnZXM8YnI+DQp0aGUgZmxhc2ggY2hpcCBkZXZpY2UgdmlhIFFTUEkgYnVzLjxicj4NCjxicj4N Cjxicj4NClRoaXMgcGF0Y2ggYWRkcyBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliIHdoaWNo IGlzIHVzZWQgdG88YnI+DQptYW5hZ2UgYW5kIGFjY2VzcyB0aGUgYWJvdmUgY29uZmlndXJhdGlv bi48YnI+DQo8YnI+DQo8YnI+DQpTaWduZWQtb2ZmLWJ5OiBzYWhpbCAmbHQ7c2FoaWxAYXJtLmNv bSAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNhaGlsQGFybS5jb20iPm1haWx0bzpzYWhpbEBhcm0uY29t PC9hPiZndDsmZ3Q7PGJyPg0KLS0tPGJyPg0KUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFz cGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmluZiB8IDMy ICs8YnI+DQpQbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGli L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaCB8IDQ2ICs8YnI+DQpQbGF0Zm9ybS9BUk0v TGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hE ZXZpY2VMaWIuYyB8IDEwMzQgKysrKysrKysrKysrKysrKysrKys8YnI+DQozIGZpbGVzIGNoYW5n ZWQsIDExMTIgaW5zZXJ0aW9ucygrKTxicj4NCjxicj4NCjxicj4NCmRpZmYgLS1naXQgYS9QbGF0 Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3Bp Tm9yRmxhc2hEZXZpY2VMaWIuaW5mIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlO b3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmluZjxicj4NCm5l dyBmaWxlIG1vZGUgMTAwNjQ0PGJyPg0KaW5kZXggMDAwMDAwMDAwMDAwLi41MDY4NzZiNjIyODU8 YnI+DQotLS0gL2Rldi9udWxsPGJyPg0KKysrIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5j ZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmluZjxi cj4NCkBAIC0wLDAgKzEsMzIgQEA8YnI+DQorIy8qKiBAZmlsZTxicj4NCisjPGJyPg0KKyMgQ29t cG9uZW50IGRlc2NyaXB0aW9uIGZpbGUgZm9yIENhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIg TGlicmFyeTxicj4NCisjPGJyPg0KKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBBcm0gTGltaXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4mbHQ7QlImZ3Q7PGJyPg0KKyM8YnI+DQorIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudDxicj4NCisjPGJyPg0KKyMqKi88YnI+ DQorPGJyPg0KK1tEZWZpbmVzXTxicj4NCisgSU5GX1ZFUlNJT04gPSAweDAwMDEwMDA1PGJyPg0K KyBCQVNFX05BTUUgPSBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliPGJyPg0KKyBGSUxFX0dV SUQgPSBlZDE3MjM2Ni0wNjZiLTQ5OTgtOWI1ZS1jYTdmMzg1YTE3MGI8YnI+DQorIE1PRFVMRV9U WVBFID0gRFhFX1JVTlRJTUVfRFJJVkVSPGJyPg0KKyBWRVJTSU9OX1NUUklORyA9IDEuMDxicj4N CisgTElCUkFSWV9DTEFTUyA9IE5vckZsYXNoRGV2aWNlTGliPGJyPg0KKzxicj4NCitbU291cmNl cy5jb21tb25dPGJyPg0KKyBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmM8YnI+DQorIENh ZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaDxicj4NCis8YnI+DQorW1BhY2thZ2VzXTxicj4N CisgTWRlUGtnL01kZVBrZy5kZWM8YnI+DQorIFBsYXRmb3JtL0FSTS9BUk0uZGVjPGJyPg0KKzxi cj4NCitbTGlicmFyeUNsYXNzZXNdPGJyPg0KKyBCYXNlTGliPGJyPg0KKyBCYXNlTWVtb3J5TGli PGJyPg0KKyBEZWJ1Z0xpYjxicj4NCisgSW9MaWI8YnI+DQorIFRpbWVyTGliPGJyPg0KZGlmZiAt LWdpdCBhL1BsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIv Q2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5oIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2Fk ZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmg8 YnI+DQpuZXcgZmlsZSBtb2RlIDEwMDY0NDxicj4NCmluZGV4IDAwMDAwMDAwMDAwMC4uOTUxYTkz NDgxZGQxPGJyPg0KLS0tIC9kZXYvbnVsbDxicj4NCisrKyBiL1BsYXRmb3JtL0FSTS9MaWJyYXJ5 L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxp Yi5oPGJyPg0KQEAgLTAsMCArMSw0NiBAQDxicj4NCisvKiogQGZpbGU8YnI+DQorPGJyPg0KKyBD b3B5cmlnaHQgKGMpIDIwMjQsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLiZsdDtC UiZndDs8YnI+DQorPGJyPg0KKyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudDxicj4NCis8YnI+DQorKiovPGJyPg0KKzxicj4NCisjaWZuZGVmIENBREVOQ0VfUVNQ SV9OT1JfRkxBU0hfREVWSUNFX0xJQl9IXzxicj4NCisjZGVmaW5lIENBREVOQ0VfUVNQSV9OT1Jf RkxBU0hfREVWSUNFX0xJQl9IXzxicj4NCis8YnI+DQorI2RlZmluZSBOT1JfRkxBU0hfRVJBU0Vf UkVUUlkgMTA8YnI+DQorPGJyPg0KKy8vIFFTUEkgQ29udHJvbGxlciBkZWZpbmVzPGJyPg0KKyNk ZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19PRkZTRVQgMHg5MDxicj4NCisjZGVm aW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfRVhFQ1VURSAweDAxPGJyPg0KKyNkZWZp bmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19BRERSX0VOQUJMRSAweDAxPGJyPg0KKyNk ZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19BRERSX0JJVF9QT1MgMTk8YnI+DQor I2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX0FERFJfQllURV9CSVRfUE9TIDE2 PGJyPg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19TVEFUVVNfQklUIDB4 MDI8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9CSVRf UE9TIDI0PGJyPg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19SRUFEX0VO QUJMRSAweDAxPGJyPg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19SRUFE X0JZVEVfM0IgMHgwMjxicj4NCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdf UkVBREVOX0JJVF9QT1MgMjM8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxf UkVHX1JFQURCWVRFX0JJVF9QT1MgMjA8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01E X0NUUkxfUkVHX0RVTU1ZXzhDIDB4ODxicj4NCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURf Q1RSTF9SRUdfRFVNTVlfQklUX1BPUyA3PGJyPg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NN RF9DVFJMX1JFR19OVU1fREFUQV9CWVRFUyh4KSAoKHggLSAxKSAmbHQ7Jmx0OyBDRE5TX1FTUElf RkxBU0hfQ01EX0NUUkxfUkVHX1JFQURCWVRFX0JJVF9QT1MpPGJyPg0KKyNkZWZpbmUgQ0ROU19R U1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19OVU1fQUREUl9CWVRFUyh4KSAoKHggLSAxKSAmbHQ7Jmx0 OyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX0FERFJfQllURV9CSVRfUE9TKTxicj4NCis8 YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX1JFQURfREFUQV9SRUdfT0ZGU0VUIDB4 QTA8YnI+DQorPGJyPg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9BRERSX1JFR19PRkZT RVQgMHg5NDxicj4NCis8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX1NUQVRVU19Q T0xMX1RJTUVPVVRfTVMgMTAwMHUgLy8gQ29tbWFuZCBTdGF0dXMgUmVnaXN0ZXIgcmVhZCB0aW1l b3V0PGJyPg0KKzxicj4NCisjZGVmaW5lIFNQSU5PUl9TUl9XSVAgQklUMCAvLyBXcml0ZSBpbiBw cm9ncmVzczxicj4NCis8YnI+DQorI2RlZmluZSBTUElOT1JfT1BfV1JFTiAweDA2IC8vIFdyaXRl IGVuYWJsZTxicj4NCisjZGVmaW5lIFNQSU5PUl9PUF9CRV80SyAweDIwIC8vIEVyYXNlIDRLaUIg YmxvY2s8YnI+DQorI2RlZmluZSBTUElOT1JfT1BfUkRJRCAweDlmIC8vIFJlYWQgSkVERUMgSUQ8 YnI+DQorI2RlZmluZSBTUElOT1JfT1BfUkRTUiAweDA1IC8vIFJlYWQgc3RhdHVzIHJlZ2lzdGVy PGJyPg0KKzxicj4NCisjZGVmaW5lIFNQSU5PUl9TUl9XSVBfUE9MTF9USU1FT1VUX01TIDEwMDB1 IC8vIFN0YXR1cyBSZWdpc3RlciByZWFkIHRpbWVvdXQ8YnI+DQorPGJyPg0KKyNlbmRpZiAvKiBD QURFTkNFX1FTUElfTk9SX0ZMQVNIX0RFVklDRV9MSUJfSF8gKi88YnI+DQpkaWZmIC0tZ2l0IGEv UGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNl UXNwaU5vckZsYXNoRGV2aWNlTGliLmMgYi9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNw aU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuYzxicj4NCm5l dyBmaWxlIG1vZGUgMTAwNjQ0PGJyPg0KaW5kZXggMDAwMDAwMDAwMDAwLi5mOTdjOGQ1MWZkNDg8 YnI+DQotLS0gL2Rldi9udWxsPGJyPg0KKysrIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5j ZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmM8YnI+ DQpAQCAtMCwwICsxLDEwMzQgQEA8YnI+DQorLyoqIEBmaWxlPGJyPg0KKzxicj4NCisgQ29weXJp Z2h0IChjKSAyMDI0IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLiZsdDtCUiZndDs8 YnI+DQorPGJyPg0KKyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dDxicj4NCis8YnI+DQorKiovPGJyPg0KKzxicj4NCisjaW5jbHVkZSAmbHQ7TGlicmFyeS9CYXNl TWVtb3J5TGliLmgmZ3Q7PGJyPg0KKyNpbmNsdWRlICZsdDtMaWJyYXJ5L0RlYnVnTGliLmgmZ3Q7 PGJyPg0KKyNpbmNsdWRlICZsdDtMaWJyYXJ5L0lvTGliLmgmZ3Q7PGJyPg0KKyNpbmNsdWRlICZs dDtMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaCZndDs8YnI+DQorI2luY2x1ZGUgJmx0O0xp YnJhcnkvTm9yRmxhc2hEZXZpY2VMaWIuaCZndDs8YnI+DQorI2luY2x1ZGUgJmx0O0xpYnJhcnkv VGltZXJMaWIuaCZndDs8YnI+DQorI2luY2x1ZGUgJmx0O0xpYnJhcnkvVWVmaUxpYi5oJmd0Ozxi cj4NCis8YnI+DQorI2luY2x1ZGUgJnF1b3Q7Q2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5o JnF1b3Q7PGJyPg0KKzxicj4NCisvKio8YnI+DQorIENvbnZlcnRzIG1pbGxpc2Vjb25kcyBpbnRv IG51bWJlciBvZiB0aWNrcyBvZiB0aGUgcGVyZm9ybWFuY2UgY291bnRlci48YnI+DQorPGJyPg0K KyBAcGFyYW1baW5dIE1pbGxpc2Vjb25kcyBNaWxsaXNlY29uZHMgdG8gY29udmVydCBpbnRvIHRp Y2tzLjxicj4NCis8YnI+DQorIEByZXR2YWwgTWlsbGlzZWNvbmRzIGV4cHJlc3NlZCBhcyBudW1i ZXIgb2YgdGlja3MuPGJyPg0KKzxicj4NCisqKi88YnI+DQorU1RBVElDPGJyPg0KK1VJTlQ2NDxi cj4NCitNaWxsaVNlY29uZHNUb1RpY2tzICg8YnI+DQorIElOIFVJTlROIE1pbGxpc2Vjb25kczxi cj4NCisgKTxicj4NCit7PGJyPg0KKyBVSU5UNjQgTmFub1NlY29uZHNQZXJUaWNrOzxicj4NCisg VUlOVDY0IE5hbm9TZWNvbmRzOzxicj4NCis8YnI+DQorIE5hbm9TZWNvbmRzUGVyVGljayA9IEdl dFRpbWVJbk5hbm9TZWNvbmQgKDEpOzxicj4NCisgTmFub1NlY29uZHMgPSBNdWx0VTY0eDMyIChN aWxsaXNlY29uZHMsIDEwMDAwMDApOzxicj4NCis8YnI+DQorIHJldHVybiBEaXZVNjR4NjRSZW1h aW5kZXIgKE5hbm9TZWNvbmRzLCBOYW5vU2Vjb25kc1BlclRpY2ssIE5VTEwpOzxicj4NCit9PGJy Pg0KKzxicj4NCisvKio8YnI+DQorIEV4ZWN1dGUgRmxhc2ggY21kIGN0cmwgYW5kIFJlYWQgU3Rh dHVzLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNl Ljxicj4NCisgQHBhcmFtW2luXSBWYWwgVmFsdWUgdG8gYmUgd3JpdHRlbiB0byBGbGFzaCBjbWQg Y3RybCBSZWdpc3Rlci48YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlcXVlc3Qg aXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Ljxicj4NCisgQHJldHZhbCBFRklfVElNRU9VVCBDb21t YW5kIGV4ZWN1dGlvbiB0aW1lZCBvdXQuPGJyPg0KKzxicj4NCisqKi88YnI+DQorU1RBVElDPGJy Pg0KK0VGSV9TVEFUVVM8YnI+DQorQ2Ruc1FzcGlFeGVjdXRlQ29tbWFuZCAoPGJyPg0KKyBJTiBO T1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLDxicj4NCisgSU4gVUlOVDMyIFZhbDxicj4NCisg KTxicj4NCit7PGJyPg0KKyAvLyBTZXQgdGhlIGNvbW1hbmQ8YnI+DQorIE1taW9Xcml0ZTMyICg8 YnI+DQorIEluc3RhbmNlLSZndDtIb3N0Q29udHJvbGxlckJhc2VBZGRyZXNzICsgQ0ROU19RU1BJ X0ZMQVNIX0NNRF9DVFJMX1JFR19PRkZTRVQsPGJyPg0KKyBWYWw8YnI+DQorICk7PGJyPg0KKyAv LyBFeGVjdXRlIHRoZSBjb21tYW5kPGJyPg0KKyBNbWlvV3JpdGUzMiAoPGJyPg0KKyBJbnN0YW5j ZS0mZ3Q7SG9zdENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIENETlNfUVNQSV9GTEFTSF9DTURfQ1RS TF9SRUdfT0ZGU0VULDxicj4NCisgVmFsIHwgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19F WEVDVVRFPGJyPg0KKyApOzxicj4NCis8YnI+DQorIENPTlNUIFVJTlQ2NCBUaWNrT3V0ID08YnI+ DQorIEdldFBlcmZvcm1hbmNlQ291bnRlciAoKSArPGJyPg0KKyBNaWxsaVNlY29uZHNUb1RpY2tz IChDRE5TX1FTUElfRkxBU0hfQ01EX1NUQVRVU19QT0xMX1RJTUVPVVRfTVMpOzxicj4NCis8YnI+ DQorIC8vIFdhaXQgdW50aWwgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZDxicj4NCisgZG8gezxi cj4NCisgaWYgKEdldFBlcmZvcm1hbmNlQ291bnRlciAoKSAmZ3Q7IFRpY2tPdXQpIHs8YnI+DQor IERFQlVHICgoPGJyPg0KKyBERUJVR19FUlJPUiw8YnI+DQorICZxdW90O0NkbnNRc3BpRXhlY3V0 ZUNvbW1hbmQ6IFRpbWVvdXQgd2FpdGluZyBmb3IgY29tbWFuZCBleGVjdXRpb24uXG4mcXVvdDs8 YnI+DQorICkpOzxicj4NCisgcmV0dXJuIEVGSV9USU1FT1VUOzxicj4NCisgfTxicj4NCisgfSB3 aGlsZSAoKE1taW9SZWFkMzIgKDxicj4NCisgSW5zdGFuY2UtJmd0O0hvc3RDb250cm9sbGVyQmFz ZUFkZHJlc3MgKzxicj4NCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19PRkZTRVQ8YnI+ DQorICkgJmFtcDs8YnI+DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfU1RBVFVTX0JJ VCkgPT08YnI+DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfU1RBVFVTX0JJVDxicj4N CisgKTs8YnI+DQorPGJyPg0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7PGJyPg0KK308YnI+DQorPGJy Pg0KKy8qKjxicj4NCisgUG9sbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIE5PUiBmbGFzaCBlcmFzZS93 cml0ZSBjb21wbGV0aW9uLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZs YXNoIEluc3RhbmNlLjxicj4NCis8YnI+DQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgUmVxdWVzdCBp cyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuPGJyPg0KKyBAcmV0dmFsIEVGSV9USU1FT1VUIE9wZXJh dGlvbiB0aW1lZCBvdXQuPGJyPg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgQ29udHJvbGxl ciBvcGVyYXRpb24gZmFpbGVkLjxicj4NCis8YnI+DQorKiovPGJyPg0KK1NUQVRJQzxicj4NCitF RklfU1RBVFVTPGJyPg0KK05vckZsYXNoUG9sbFN0YXR1c1JlZ2lzdGVyICg8YnI+DQorIElOIE5P Ul9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2U8YnI+DQorICk8YnI+DQorezxicj4NCisgQk9PTEVB TiBTUmVnRG9uZTs8YnI+DQorIFVJTlQzMiB2YWw7PGJyPg0KKzxicj4NCisgdmFsID0gKFNQSU5P Ul9PUF9SRFNSICZsdDsmbHQ7IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfT1BDT0RFX0JJ VF9QT1MpIHw8YnI+DQorIChDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1JFQURfRU5BQkxF ICZsdDsmbHQ7PGJyPg0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1JFQURFTl9CSVRf UE9TKSB8PGJyPg0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9EQVRBX0JZVEVT ICgxKSB8PGJyPg0KKyAoQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19EVU1NWV84QyAmbHQ7 Jmx0Ozxicj4NCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19EVU1NWV9CSVRfUE9TKTs8 YnI+DQorPGJyPg0KKyBDT05TVCBVSU5UNjQgVGlja091dCA9PGJyPg0KKyBHZXRQZXJmb3JtYW5j ZUNvdW50ZXIgKCkgKzxicj4NCisgTWlsbGlTZWNvbmRzVG9UaWNrcyAoU1BJTk9SX1NSX1dJUF9Q T0xMX1RJTUVPVVRfTVMpOzxicj4NCis8YnI+DQorIGRvIHs8YnI+DQorIGlmIChHZXRQZXJmb3Jt YW5jZUNvdW50ZXIgKCkgJmd0OyBUaWNrT3V0KSB7PGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVC VUdfRVJST1IsPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFBvbGxTdGF0dXNSZWdpc3RlcjogVGltZW91 dCB3YWl0aW5nIGZvciBlcmFzZS93cml0ZS5cbiZxdW90Ozxicj4NCisgKSk7PGJyPg0KKyByZXR1 cm4gRUZJX1RJTUVPVVQ7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgaWYgKEVGSV9FUlJPUiAoQ2Ru c1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFuY2UsIHZhbCkpKSB7PGJyPg0KKyByZXR1cm4gRUZJ X0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyBTUmVnRG9uZSA9PGJyPg0KKyAo TW1pb1JlYWQ4ICg8YnI+DQorIEluc3RhbmNlLSZndDtIb3N0Q29udHJvbGxlckJhc2VBZGRyZXNz ICs8YnI+DQorIENETlNfUVNQSV9GTEFTSF9DTURfUkVBRF9EQVRBX1JFR19PRkZTRVQ8YnI+DQor ICk8YnI+DQorICZhbXA7IFNQSU5PUl9TUl9XSVA8YnI+DQorICkgPT0gMDs8YnI+DQorIH0gd2hp bGUgKCFTUmVnRG9uZSk7PGJyPg0KKzxicj4NCisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCit9 PGJyPg0KKzxicj4NCisvKio8YnI+DQorIENoZWNrIHdoZXRoZXIgTk9SIGZsYXNoIG9wZXJhdGlv bnMgYXJlIExvY2tlZC48YnI+DQorPGJyPg0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFz aCBJbnN0YW5jZS48YnI+DQorIEBwYXJhbVtpbl0gQmxvY2tBZGRyZXNzIEJsb2NrQWRkcmVzcyBp biBOT1IgZmxhc2ggZGV2aWNlLjxicj4NCis8YnI+DQorIEByZXR2YWwgRkFMU0UgSWYgTk9SIGZs YXNoIGlzIG5vdCBsb2NrZWQuPGJyPg0KKyoqLzxicj4NCitTVEFUSUM8YnI+DQorQk9PTEVBTjxi cj4NCitOb3JGbGFzaEJsb2NrSXNMb2NrZWQgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNF ICpJbnN0YW5jZSw8YnI+DQorIElOIFVJTlROIEJsb2NrQWRkcmVzczxicj4NCisgKTxicj4NCit7 PGJyPg0KKyByZXR1cm4gRkFMU0U7PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgVW5s b2NrIE5PUiBmbGFzaCBvcGVyYXRpb25zIG9uIGdpdmVuIGJsb2NrLjxicj4NCis8YnI+DQorIEBw YXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIGluc3RhbmNlLjxicj4NCisgQHBhcmFtW2luXSBC bG9ja0FkZHJlc3MgQmxvY2tBZGRyZXNzIGluIE5PUiBmbGFzaCBkZXZpY2UuPGJyPg0KKzxicj4N CisgQHJldHZhbCBFRklfU1VDQ0VTUyBOT1IgZmxhc2ggb3BlcmF0aW9ucyB1bmxvY2tlZC48YnI+ DQorKiovPGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9jayAo PGJyPg0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLDxicj4NCisgSU4gVUlOVE4g QmxvY2tBZGRyZXNzPGJyPg0KKyApPGJyPg0KK3s8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8 YnI+DQorfTxicj4NCis8YnI+DQorLyoqPGJyPg0KKyBVbmxvY2sgTk9SIGZsYXNoIG9wZXJhdGlv bnMgaWYgaXQgaXMgbmVjZXNzYXJ5Ljxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2Ug Tk9SIGZsYXNoIGluc3RhbmNlLjxicj4NCisgQHBhcmFtW2luXSBCbG9ja0FkZHJlc3MgQmxvY2tB ZGRyZXNzIGluIE5PUiBmbGFzaCBkZXZpY2UuPGJyPg0KKzxicj4NCisgQHJldHZhbCBFRklfU1VD Q0VTUyBSZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS48YnI+DQorKiovPGJyPg0KK0VG SV9TVEFUVVM8YnI+DQorTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9ja0lmTmVjZXNzYXJ5ICg8YnI+ DQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsPGJyPg0KKyBJTiBVSU5UTiBCbG9j a0FkZHJlc3M8YnI+DQorICk8YnI+DQorezxicj4NCisgRUZJX1NUQVRVUyBTdGF0dXM7PGJyPg0K Kzxicj4NCisgU3RhdHVzID0gRUZJX1NVQ0NFU1M7PGJyPg0KKzxicj4NCisgaWYgKCFOb3JGbGFz aEJsb2NrSXNMb2NrZWQgKEluc3RhbmNlLCBCbG9ja0FkZHJlc3MpKSB7PGJyPg0KKyBTdGF0dXMg PSBOb3JGbGFzaFVubG9ja1NpbmdsZUJsb2NrIChJbnN0YW5jZSwgQmxvY2tBZGRyZXNzKTs8YnI+ DQorIH08YnI+DQorPGJyPg0KKyByZXR1cm4gU3RhdHVzOzxicj4NCit9PGJyPg0KKzxicj4NCisv Kio8YnI+DQorIEVuYWJsZSB3cml0ZSB0byBOT1IgZmxhc2ggZGV2aWNlLjxicj4NCis8YnI+DQor IEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIGluc3RhbmNlLjxicj4NCis8YnI+DQorIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgUmVxdWVzdCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuPGJyPg0K KyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci48 YnI+DQorKiovPGJyPg0KK1NUQVRJQzxicj4NCitFRklfU1RBVFVTPGJyPg0KK05vckZsYXNoRW5h YmxlV3JpdGUgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZTxicj4NCisg KTxicj4NCit7PGJyPg0KKyBVSU5UMzIgdmFsOzxicj4NCis8YnI+DQorIERFQlVHICgoREVCVUdf SU5GTywgJnF1b3Q7Tm9yRmxhc2hFbmFibGVXcml0ZSgpXG4mcXVvdDspKTs8YnI+DQorIHZhbCA9 IChTUElOT1JfT1BfV1JFTiAmbHQ7Jmx0OyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09Q Q09ERV9CSVRfUE9TKTs8YnI+DQorIGlmIChFRklfRVJST1IgKENkbnNRc3BpRXhlY3V0ZUNvbW1h bmQgKEluc3RhbmNlLCB2YWwpKSkgezxicj4NCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7PGJy Pg0KKyB9PGJyPg0KKzxicj4NCisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCit9PGJyPg0KKzxi cj4NCisvKio8YnI+DQorIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcHJlc3VtZXMgdGhhdCB0aGUg YmxvY2sgaGFzIGFscmVhZHkgYmVlbiB1bmxvY2tlZC48YnI+DQorPGJyPg0KKyBAcGFyYW1baW5d IEluc3RhbmNlIE5PUiBmbGFzaCBpbnN0YW5jZS48YnI+DQorIEBwYXJhbVtpbl0gQmxvY2tBZGRy ZXNzIEJsb2NrIGFkZHJlc3Mgd2l0aGluIHRoZSB2YXJpYWJsZSByZWdpb24uPGJyPg0KKzxicj4N CisgQHJldHZhbCBFRklfU1VDQ0VTUyBSZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS48 YnI+DQorIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiBUaGUgZGV2aWNlIHJlcG9ydGVkIGFuIGVy cm9yLjxicj4NCisgKiovPGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9yRmxhc2hFcmFzZVNpbmds ZUJsb2NrICg8YnI+DQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsPGJyPg0KKyBJ TiBVSU5UTiBCbG9ja0FkZHJlc3M8YnI+DQorICk8YnI+DQorezxicj4NCisgVUlOVDMyIERldkNv bmZpZ1ZhbDs8YnI+DQorIFVJTlQzMiBFcmFzZU9mZnNldDs8YnI+DQorPGJyPg0KKyBFcmFzZU9m ZnNldCA9IDB4MDs8YnI+DQorPGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVCVUdfSU5GTyw8YnI+ DQorICZxdW90O05vckZsYXNoRXJhc2VTaW5nbGVCbG9jayhCbG9ja0FkZHJlc3M9MHglMDh4KVxu JnF1b3Q7LDxicj4NCisgQmxvY2tBZGRyZXNzPGJyPg0KKyApKTs8YnI+DQorPGJyPg0KKyBpZiAo RUZJX0VSUk9SIChOb3JGbGFzaEVuYWJsZVdyaXRlIChJbnN0YW5jZSkpKSB7PGJyPg0KKyByZXR1 cm4gRUZJX0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyBFcmFzZU9mZnNldCA9 IEJsb2NrQWRkcmVzcyAtIEluc3RhbmNlLSZndDtEZXZpY2VCYXNlQWRkcmVzczs8YnI+DQorPGJy Pg0KKyBNbWlvV3JpdGUzMiAoPGJyPg0KKyBJbnN0YW5jZS0mZ3Q7SG9zdENvbnRyb2xsZXJCYXNl QWRkcmVzcyArIENETlNfUVNQSV9GTEFTSF9DTURfQUREUl9SRUdfT0ZGU0VULDxicj4NCisgRXJh c2VPZmZzZXQ8YnI+DQorICk7PGJyPg0KKzxicj4NCisgRGV2Q29uZmlnVmFsID0gKFNQSU5PUl9P UF9CRV80SyAmbHQ7Jmx0OyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9CSVRf UE9TKSB8PGJyPg0KKyAoQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19BRERSX0VOQUJMRSAm bHQ7Jmx0Ozxicj4NCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19BRERSX0JJVF9QT1Mp IHw8YnI+DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfTlVNX0FERFJfQllURVMgKDMp Ozxicj4NCis8YnI+DQorIGlmIChFRklfRVJST1IgKENkbnNRc3BpRXhlY3V0ZUNvbW1hbmQgKElu c3RhbmNlLCBEZXZDb25maWdWYWwpKSkgezxicj4NCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7 PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgaWYgKEVGSV9FUlJPUiAoTm9yRmxhc2hQb2xsU3RhdHVz UmVnaXN0ZXIgKEluc3RhbmNlKSkpIHs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxi cj4NCisgfTxicj4NCis8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8YnI+DQorfTxicj4NCis8 YnI+DQorLyoqPGJyPg0KKyBUaGlzIGZ1bmN0aW9uIHVubG9ja3MgYW5kIGVyYXNlcyBhbiBlbnRp cmUgTk9SIEZsYXNoIGJsb2NrLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9S IGZsYXNoIEluc3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi48YnI+DQorIEBwYXJhbVtp bl0gQmxvY2tBZGRyZXNzIEJsb2NrIGFkZHJlc3Mgd2l0aGluIHRoZSB2YXJpYWJsZSBzdG9yZSBy ZWdpb24uPGJyPg0KKzxicj4NCisgQHJldHZhbCBFRklfU1VDQ0VTUyBFcmFzZSBhbmQgdW5sb2Nr IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuPGJyPg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1Ig VGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci48YnI+DQorKiovPGJyPg0KK0VGSV9TVEFUVVM8 YnI+DQorTm9yRmxhc2hVbmxvY2tBbmRFcmFzZVNpbmdsZUJsb2NrICg8YnI+DQorIElOIE5PUl9G TEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsPGJyPg0KKyBJTiBVSU5UTiBCbG9ja0FkZHJlc3M8YnI+ DQorICk8YnI+DQorezxicj4NCisgRUZJX1NUQVRVUyBTdGF0dXM7PGJyPg0KKyBVSU5UTiBJbmRl eDs8YnI+DQorIEVGSV9UUEwgT3JpZ2luYWxUUEw7PGJyPg0KKzxicj4NCisgTm9yRmxhc2hMb2Nr ICgmYW1wO09yaWdpbmFsVFBMKTs8YnI+DQorPGJyPg0KKyBJbmRleCA9IDA7PGJyPg0KKyBkbyB7 PGJyPg0KKyAvLyBVbmxvY2sgdGhlIGJsb2NrIGlmIHdlIGhhdmUgdG88YnI+DQorIFN0YXR1cyA9 IE5vckZsYXNoVW5sb2NrU2luZ2xlQmxvY2tJZk5lY2Vzc2FyeSAoSW5zdGFuY2UsIEJsb2NrQWRk cmVzcyk7PGJyPg0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7PGJyPg0KKyBicmVhazs8YnI+ DQorIH08YnI+DQorPGJyPg0KKyBTdGF0dXMgPSBOb3JGbGFzaEVyYXNlU2luZ2xlQmxvY2sgKElu c3RhbmNlLCBCbG9ja0FkZHJlc3MpOzxicj4NCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxi cj4NCisgYnJlYWs7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgSW5kZXgrKzs8YnI+DQorIH0gd2hp bGUgKChJbmRleCAmbHQ7IE5PUl9GTEFTSF9FUkFTRV9SRVRSWSkgJmFtcDsmYW1wOyAoU3RhdHVz ICE9IEVGSV9TVUNDRVNTKSk7PGJyPg0KW1NBTUldIEkgdGhpbmsgdGhlcmUgaXMgc29tZXRoaW5n IHdyb25nIHdpdGggdGhlIGxvb3AgY29uZGl0aW9uLiA8YnI+DQpJZiBJIGFtIG5vdCB3cm9uZywg dGhlIGNoZWNrIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBh bnkgZWZmZWN0IGFzIHRoZSBjb2RlIGluIHRoZSB3aGlsZSBsb29wIHdpbGwgYnJlYWsgb3V0IG9m IHRoZXJlIGlzIGFuIGVycm9yLjxicj4NCkNhbiB5b3UgY2hlY2ssIHBsZWFzZT88YnI+DQpbL1NB TUldPGJyPg0KPGJyPg0KPGJyPg0KKzxicj4NCisgaWYgKEluZGV4ID09IE5PUl9GTEFTSF9FUkFT RV9SRVRSWSkgezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VSUk9SLDxicj4NCisgJnF1 b3Q7RXJhc2VTaW5nbGVCbG9jayhCbG9ja0FkZHJlc3M9MHglMDh4OiBCbG9jayBMb2NrZWQgRXJy b3IgJnF1b3Q7PGJyPg0KKyAmcXVvdDsodHJ5IHRvIGVyYXNlICVkIHRpbWVzKVxuJnF1b3Q7LDxi cj4NCisgQmxvY2tBZGRyZXNzLDxicj4NCisgSW5kZXg8YnI+DQorICkpOzxicj4NCisgfTxicj4N Cis8YnI+DQorIE5vckZsYXNoVW5sb2NrIChPcmlnaW5hbFRQTCk7PGJyPg0KKzxicj4NCisgcmV0 dXJuIFN0YXR1czs8YnI+DQorfTxicj4NCis8YnI+DQorLyoqPGJyPg0KKyBXcml0ZSBhIHNpbmds ZSB3b3JkIHRvIGdpdmVuIGxvY2F0aW9uLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFu Y2UgTk9SIGZsYXNoIEluc3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi48YnI+DQorIEBw YXJhbVtpbl0gV29yZEFkZHJlc3MgVGhlIGFkZHJlc3MgaW4gTk9SIGZsYXNoIHRvIHdyaXRlIGdp dmVuIHdvcmQuPGJyPg0KKyBAcGFyYW1baW5dIFdyaXRlRGF0YSBUaGUgZGF0YSB0byB3cml0ZSBp bnRvIE5PUiBmbGFzaCBsb2NhdGlvbi48YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNT IFdyaXRlIGlzIGNvbXBsZXRlLjxicj4NCisgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SIFRoZSBk ZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuPGJyPg0KKyoqLzxicj4NCitFRklfU1RBVFVTPGJyPg0K K05vckZsYXNoV3JpdGVTaW5nbGVXb3JkICg8YnI+DQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAq SW5zdGFuY2UsPGJyPg0KKyBJTiBVSU5UTiBXb3JkQWRkcmVzcyw8YnI+DQorIElOIFVJTlQzMiBX cml0ZURhdGE8YnI+DQorICk8YnI+DQorezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0lO Rk8sPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFdyaXRlU2luZ2xlV29yZChXb3JkQWRkcmVzcz0weCUw OHgsIFdyaXRlRGF0YT0weCUwOHgpXG4mcXVvdDssPGJyPg0KKyBXb3JkQWRkcmVzcyw8YnI+DQor IFdyaXRlRGF0YTxicj4NCisgKSk7PGJyPg0KKzxicj4NCisgaWYgKEVGSV9FUlJPUiAoTm9yRmxh c2hFbmFibGVXcml0ZSAoSW5zdGFuY2UpKSkgezxicj4NCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJS T1I7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgTW1pb1dyaXRlMzIgKFdvcmRBZGRyZXNzLCBXcml0 ZURhdGEpOzxicj4NCisgaWYgKEVGSV9FUlJPUiAoTm9yRmxhc2hQb2xsU3RhdHVzUmVnaXN0ZXIg KEluc3RhbmNlKSkpIHs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxicj4NCisgfTxi cj4NCis8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8YnI+DQorfTxicj4NCis8YnI+DQorLyoq PGJyPg0KKyBXcml0ZSBhIGZ1bGwgYmxvY2sgdG8gZ2l2ZW4gbG9jYXRpb24uPGJyPg0KKzxicj4N CisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3Rv cmUgcmVnaW9uLjxicj4NCisgQHBhcmFtW2luXSBMYmEgVGhlIGxvZ2ljYWwgYmxvY2sgYWRkcmVz cyBpbiBOT1IgZmxhc2guPGJyPg0KKyBAcGFyYW1baW5dIERhdGFCdWZmZXIgVGhlIGRhdGEgdG8g d3JpdGUgaW50byBOT1IgZmxhc2ggbG9jYXRpb24uPGJyPg0KKyBAcGFyYW1baW5dIEJsb2NrU2l6 ZUluV29yZHMgVGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZS48YnI+DQorPGJyPg0KKyBAcmV0 dmFsIEVGSV9TVUNDRVNTIFdyaXRlIGlzIGNvbXBsZXRlLjxicj4NCisgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SIFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuPGJyPg0KKyoqLzxicj4NCitF RklfU1RBVFVTPGJyPg0KK05vckZsYXNoV3JpdGVGdWxsQmxvY2sgKDxicj4NCisgSU4gTk9SX0ZM QVNIX0lOU1RBTkNFICpJbnN0YW5jZSw8YnI+DQorIElOIEVGSV9MQkEgTGJhLDxicj4NCisgSU4g VUlOVDMyICpEYXRhQnVmZmVyLDxicj4NCisgSU4gVUlOVDMyIEJsb2NrU2l6ZUluV29yZHM8YnI+ DQorICk8YnI+DQorezxicj4NCisgRUZJX1NUQVRVUyBTdGF0dXM7PGJyPg0KKyBVSU5UTiBXb3Jk QWRkcmVzczs8YnI+DQorIFVJTlQzMiBXb3JkSW5kZXg7PGJyPg0KKyBVSU5UTiBCbG9ja0FkZHJl c3M7PGJyPg0KKyBFRklfVFBMIE9yaWdpbmFsVFBMOzxicj4NCis8YnI+DQorIFN0YXR1cyA9IEVG SV9TVUNDRVNTOzxicj4NCis8YnI+DQorIC8vIEdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0 aGUgYmxvY2s8YnI+DQorIEJsb2NrQWRkcmVzcyA9IEdFVF9OT1JfQkxPQ0tfQUREUkVTUyAoPGJy Pg0KKyBJbnN0YW5jZS0mZ3Q7UmVnaW9uQmFzZUFkZHJlc3MsPGJyPg0KKyBMYmEsPGJyPg0KKyBC bG9ja1NpemVJbldvcmRzICogNDxicj4NCisgKTs8YnI+DQorPGJyPg0KKyAvLyBTdGFydCB3cml0 aW5nIGZyb20gdGhlIGZpcnN0IGFkZHJlc3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBibG9jazxicj4N CisgV29yZEFkZHJlc3MgPSBCbG9ja0FkZHJlc3M7PGJyPg0KKzxicj4NCisgTm9yRmxhc2hMb2Nr ICgmYW1wO09yaWdpbmFsVFBMKTs8YnI+DQorPGJyPg0KKyBTdGF0dXMgPSBOb3JGbGFzaFVubG9j a0FuZEVyYXNlU2luZ2xlQmxvY2sgKEluc3RhbmNlLCBCbG9ja0FkZHJlc3MpOzxicj4NCisgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VSUk9S LDxicj4NCisgJnF1b3Q7V3JpdGVTaW5nbGVCbG9jazogRVJST1IgLSBGYWlsZWQgdG8gVW5sb2Nr IGFuZCBFcmFzZSB0aGUgc2luZ2xlICZxdW90Ozxicj4NCisgJnF1b3Q7YmxvY2sgYXQgMHglWFxu JnF1b3Q7LDxicj4NCisgQmxvY2tBZGRyZXNzPGJyPg0KKyApKTs8YnI+DQorIGdvdG8gZXhpdF9o YW5kbGVyOzxicj4NCisgfTxicj4NCis8YnI+DQorIGZvciAoV29yZEluZGV4ID0gMDs8YnI+DQor IFdvcmRJbmRleCAmbHQ7IEJsb2NrU2l6ZUluV29yZHM7PGJyPg0KKyBXb3JkSW5kZXgrKywgRGF0 YUJ1ZmZlcisrLCBXb3JkQWRkcmVzcyArPSA0KTxicj4NCisgezxicj4NCisgU3RhdHVzID0gTm9y Rmxhc2hXcml0ZVNpbmdsZVdvcmQgKEluc3RhbmNlLCBXb3JkQWRkcmVzcywgKkRhdGFCdWZmZXIp Ozxicj4NCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4NCisgZ290byBleGl0X2hhbmRs ZXI7PGJyPg0KKyB9PGJyPg0KKyB9PGJyPg0KKzxicj4NCitleGl0X2hhbmRsZXI6PGJyPg0KKyBO b3JGbGFzaFVubG9jayAoT3JpZ2luYWxUUEwpOzxicj4NCis8YnI+DQorIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHs8YnI+DQorIERFQlVHICgoPGJyPg0KKyBERUJVR19FUlJPUiw8YnI+DQorICZx dW90O05PUiBGTEFTSCBQcm9ncmFtbWluZyBbV3JpdGVTaW5nbGVCbG9ja10gZmFpbGVkIGF0IGFk ZHJlc3MgMHglMDh4LiAmcXVvdDs8YnI+DQorICZxdW90O0V4aXQgU3RhdHVzID0gJXIuXG4mcXVv dDssPGJyPg0KKyBXb3JkQWRkcmVzcyw8YnI+DQorIFN0YXR1czxicj4NCisgKSk7PGJyPg0KKyB9 PGJyPg0KKzxicj4NCisgcmV0dXJuIFN0YXR1czs8YnI+DQorfTxicj4NCis8YnI+DQorLyoqPGJy Pg0KKyBXcml0ZSBtdWx0aXBsZSBibG9ja3MuPGJyPg0KKzxicj4NCisgQHBhcmFtW2luXSBJbnN0 YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLjxicj4NCisg QHBhcmFtW2luXSBMYmEgVGhlIHN0YXJ0aW5nIGxvZ2ljYWwgYmxvY2sgaW5kZXguPGJyPg0KKyBA cGFyYW1baW5dIEJ1ZmZlclNpemVJbkJ5dGVzIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUu PGJyPg0KKyBAcGFyYW1baW5dIEJ1ZmZlciBUaGUgcG9pbnRlciB0byBhIGNhbGxlci1hbGxvY2F0 ZWQgYnVmZmVyIHRoYXQ8YnI+DQorIGNvbnRhaW5zIHRoZSBzb3VyY2UgZm9yIHRoZSB3cml0ZS48 YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFdyaXRlIGlzIGNvbXBsZXRlLjxicj4N CisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW52YWxpZCBwYXJhbWV0ZXJzIHBhc3Nl ZC48YnI+DQorIEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0laRSBJbnZhbGlkIGJ1ZmZlciBzaXpl IHBhc3NlZC48YnI+DQorKiovPGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9yRmxhc2hXcml0ZUJs b2NrcyAoPGJyPg0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLDxicj4NCisgSU4g RUZJX0xCQSBMYmEsPGJyPg0KKyBJTiBVSU5UTiBCdWZmZXJTaXplSW5CeXRlcyw8YnI+DQorIElO IFZPSUQgKkJ1ZmZlcjxicj4NCisgKTxicj4NCit7PGJyPg0KKyBVSU5UMzIgKldyaXRlQnVmZmVy Ozxicj4NCisgRUZJX1NUQVRVUyBTdGF0dXM7PGJyPg0KKyBFRklfTEJBIEN1cnJlbnRCbG9jazs8 YnI+DQorIFVJTlQzMiBCbG9ja1NpemVJbldvcmRzOzxicj4NCisgVUlOVDMyIE51bUJsb2Nrczs8 YnI+DQorIFVJTlQzMiBCbG9ja0NvdW50Ozxicj4NCis8YnI+DQorIFN0YXR1cyA9IEVGSV9TVUND RVNTOzxicj4NCisgLy8gVGhlIGJ1ZmZlciBtdXN0IGJlIHZhbGlkPGJyPg0KKyBpZiAoQnVmZmVy ID09IE5VTEwpIHs8YnI+DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7PGJyPg0KKyB9 PGJyPg0KKzxicj4NCisgLy8gV2UgbXVzdCBoYXZlIHNvbWUgYnl0ZXMgdG8gcmVhZDxicj4NCisg REVCVUcgKCg8YnI+DQorIERFQlVHX0lORk8sPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFdyaXRlQmxv Y2tzOiBCdWZmZXJTaXplSW5CeXRlcz0weCV4XG4mcXVvdDssPGJyPg0KKyBCdWZmZXJTaXplSW5C eXRlczxicj4NCisgKSk7PGJyPg0KKyBpZiAoQnVmZmVyU2l6ZUluQnl0ZXMgPT0gMCkgezxicj4N CisgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8g VGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNp emU8YnI+DQorIERFQlVHICgoPGJyPg0KKyBERUJVR19JTkZPLDxicj4NCisgJnF1b3Q7Tm9yRmxh c2hXcml0ZUJsb2NrczogQmxvY2tTaXplIGluIGJ5dGVzID0weCV4XG4mcXVvdDssPGJyPg0KKyBJ bnN0YW5jZS0mZ3Q7TWVkaWEuQmxvY2tTaXplPGJyPg0KKyApKTs8YnI+DQorIGlmICgoQnVmZmVy U2l6ZUluQnl0ZXMgJSBJbnN0YW5jZS0mZ3Q7TWVkaWEuQmxvY2tTaXplKSAhPSAwKSB7PGJyPg0K KyByZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0laRTs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBB bGwgYmxvY2tzIG11c3QgYmUgd2l0aGluIHRoZSBkZXZpY2U8YnI+DQorIE51bUJsb2NrcyA9ICgo VUlOVDMyKUJ1ZmZlclNpemVJbkJ5dGVzKSAvIEluc3RhbmNlLSZndDtNZWRpYS5CbG9ja1NpemU7 PGJyPg0KKzxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0lORk8sPGJyPg0KKyAmcXVvdDtO b3JGbGFzaFdyaXRlQmxvY2tzOiBOdW1CbG9ja3M9JWQsIExhc3RCbG9jaz0lbGQsIExiYT0lbGQu XG4mcXVvdDssPGJyPg0KKyBOdW1CbG9ja3MsPGJyPg0KKyBJbnN0YW5jZS0mZ3Q7TWVkaWEuTGFz dEJsb2NrLDxicj4NCisgTGJhPGJyPg0KKyApKTs8YnI+DQorPGJyPg0KKyBpZiAoKExiYSArIE51 bUJsb2NrcykgJmd0OyAoSW5zdGFuY2UtJmd0O01lZGlhLkxhc3RCbG9jayArIDEpKSB7PGJyPg0K KyBERUJVRyAoKDxicj4NCisgREVCVUdfRVJST1IsPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFdyaXRl QmxvY2tzOiBFUlJPUiAtIFdyaXRlIHdpbGwgZXhjZWVkIGxhc3QgYmxvY2suXG4mcXVvdDs8YnI+ DQorICkpOzxicj4NCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjs8YnI+DQorIH08YnI+ DQorPGJyPg0KKyBCbG9ja1NpemVJbldvcmRzID0gSW5zdGFuY2UtJmd0O01lZGlhLkJsb2NrU2l6 ZSAvIDQ7PGJyPg0KKzxicj4NCisgLy8gQmVjYXVzZSB0aGUgdGFyZ2V0ICpCdWZmZXIgaXMgYSBw b2ludGVyIHRvIFZPSUQsIHdlIG11c3QgcHV0PGJyPg0KKyAvLyBhbGwgdGhlIGRhdGEgaW50byBh IHBvaW50ZXIgdG8gYSBwcm9wZXIgZGF0YSB0eXBlLCBzbyB1c2UgKldyaXRlQnVmZmVyPGJyPg0K KyBXcml0ZUJ1ZmZlciA9IChVSU5UMzIgKilCdWZmZXI7PGJyPg0KKzxicj4NCisgQ3VycmVudEJs b2NrID0gTGJhOzxicj4NCisgZm9yIChCbG9ja0NvdW50ID0gMDs8YnI+DQorIEJsb2NrQ291bnQg Jmx0OyBOdW1CbG9ja3M7PGJyPg0KKyBCbG9ja0NvdW50KyssIEN1cnJlbnRCbG9jaysrLCBXcml0 ZUJ1ZmZlciArPSBCbG9ja1NpemVJbldvcmRzKTxicj4NCisgezxicj4NCisgREVCVUcgKCg8YnI+ DQorIERFQlVHX0lORk8sPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFdyaXRlQmxvY2tzOiBXcml0aW5n IGJsb2NrICMlZFxuJnF1b3Q7LDxicj4NCisgKFVJTlROKUN1cnJlbnRCbG9jazxicj4NCisgKSk7 PGJyPg0KKzxicj4NCisgU3RhdHVzID0gTm9yRmxhc2hXcml0ZUZ1bGxCbG9jayAoPGJyPg0KKyBJ bnN0YW5jZSw8YnI+DQorIEN1cnJlbnRCbG9jayw8YnI+DQorIFdyaXRlQnVmZmVyLDxicj4NCisg QmxvY2tTaXplSW5Xb3Jkczxicj4NCisgKTs8YnI+DQorPGJyPg0KKyBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7PGJyPg0KKyBicmVhazs8YnI+DQorIH08YnI+DQorIH08YnI+DQorPGJyPg0KKyBE RUJVRyAoKERFQlVHX0lORk8sICZxdW90O05vckZsYXNoV3JpdGVCbG9ja3M6IEV4aXQgU3RhdHVz ID0gJXIuXG4mcXVvdDssIFN0YXR1cykpOzxicj4NCisgcmV0dXJuIFN0YXR1czs8YnI+DQorfTxi cj4NCis8YnI+DQorLyoqPGJyPg0KKyBSZWFkIG11bHRpcGxlIGJsb2Nrcy48YnI+DQorPGJyPg0K KyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9y ZSByZWdpb24uPGJyPg0KKyBAcGFyYW1baW5dIExiYSBUaGUgc3RhcnRpbmcgbG9naWNhbCBibG9j ayBpbmRleCB0byByZWFkIGZyb20uPGJyPg0KKyBAcGFyYW1baW5dIEJ1ZmZlclNpemVJbkJ5dGVz IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC48YnI+DQorIEBwYXJhbVtvdXRdIEJ1ZmZlciBU aGUgcG9pbnRlciB0byBhIGNhbGxlci1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQ8YnI+DQorIHNob3Vs ZCBiZSBjb3BpZWQgd2l0aCByZWFkIGRhdGEuPGJyPg0KKzxicj4NCisgQHJldHZhbCBFRklfU1VD Q0VTUyBSZWFkIGlzIGNvbXBsZXRlLjxicj4NCisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgSW52YWxpZCBwYXJhbWV0ZXJzIHBhc3NlZC48YnI+DQorIEByZXR2YWwgRUZJX0JBRF9CVUZG RVJfU0laRSBJbnZhbGlkIGJ1ZmZlciBzaXplIHBhc3NlZC48YnI+DQorKiovPGJyPg0KK0VGSV9T VEFUVVM8YnI+DQorTm9yRmxhc2hSZWFkQmxvY2tzICg8YnI+DQorIElOIE5PUl9GTEFTSF9JTlNU QU5DRSAqSW5zdGFuY2UsPGJyPg0KKyBJTiBFRklfTEJBIExiYSw8YnI+DQorIElOIFVJTlROIEJ1 ZmZlclNpemVJbkJ5dGVzLDxicj4NCisgT1VUIFZPSUQgKkJ1ZmZlcjxicj4NCisgKTxicj4NCit7 PGJyPg0KKyBVSU5UMzIgTnVtQmxvY2tzOzxicj4NCisgVUlOVE4gU3RhcnRBZGRyZXNzOzxicj4N Cis8YnI+DQorIERFQlVHICgoPGJyPg0KKyBERUJVR19JTkZPLDxicj4NCisgJnF1b3Q7Tm9yRmxh c2hSZWFkQmxvY2tzOiBCdWZmZXJTaXplPTB4JXhCIEJsb2NrU2l6ZT0weCV4QiBMYXN0QmxvY2s9 JWxkLCAmcXVvdDs8YnI+DQorICZxdW90O0xiYT0lbGQuXG4mcXVvdDssPGJyPg0KKyBCdWZmZXJT aXplSW5CeXRlcyw8YnI+DQorIEluc3RhbmNlLSZndDtNZWRpYS5CbG9ja1NpemUsPGJyPg0KKyBJ bnN0YW5jZS0mZ3Q7TWVkaWEuTGFzdEJsb2NrLDxicj4NCisgTGJhPGJyPg0KKyApKTs8YnI+DQor PGJyPg0KKyAvLyBUaGUgYnVmZmVyIG11c3QgYmUgdmFsaWQ8YnI+DQorIGlmIChCdWZmZXIgPT0g TlVMTCkgezxicj4NCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjs8YnI+DQorIH08YnI+ DQorPGJyPg0KKyAvLyBSZXR1cm4gaWYgd2UgZG8gbm90IGhhdmUgYW55IGJ5dGUgdG8gcmVhZDxi cj4NCisgaWYgKEJ1ZmZlclNpemVJbkJ5dGVzID09IDApIHs8YnI+DQorIHJldHVybiBFRklfU1VD Q0VTUzs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG11 c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZTxicj4NCisgaWYgKChCdWZmZXJTaXpl SW5CeXRlcyAlIEluc3RhbmNlLSZndDtNZWRpYS5CbG9ja1NpemUpICE9IDApIHs8YnI+DQorIHJl dHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOzxicj4NCisgfTxicj4NCis8YnI+DQorIE51bUJsb2Nr cyA9ICgoVUlOVDMyKUJ1ZmZlclNpemVJbkJ5dGVzKSAvIEluc3RhbmNlLSZndDtNZWRpYS5CbG9j a1NpemU7PGJyPg0KKzxicj4NCisgaWYgKChMYmEgKyBOdW1CbG9ja3MpICZndDsgKEluc3RhbmNl LSZndDtNZWRpYS5MYXN0QmxvY2sgKyAxKSkgezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVH X0VSUk9SLDxicj4NCisgJnF1b3Q7Tm9yRmxhc2hSZWFkQmxvY2tzOiBFUlJPUiAtIFJlYWQgd2ls bCBleGNlZWQgbGFzdCBibG9ja1xuJnF1b3Q7PGJyPg0KKyApKTs8YnI+DQorIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8gR2V0IHRoZSBhZGRy ZXNzIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbTxicj4NCisgU3RhcnRBZGRyZXNzID0gR0VUX05PUl9C TE9DS19BRERSRVNTICg8YnI+DQorIEluc3RhbmNlLSZndDtSZWdpb25CYXNlQWRkcmVzcyw8YnI+ DQorIExiYSw8YnI+DQorIEluc3RhbmNlLSZndDtNZWRpYS5CbG9ja1NpemU8YnI+DQorICk7PGJy Pg0KKzxicj4NCisgLy8gUmVhZG91dCB0aGUgZGF0YTxicj4NCisgQ29weU1lbSAoQnVmZmVyLCAo VUlOVE4gKilTdGFydEFkZHJlc3MsIEJ1ZmZlclNpemVJbkJ5dGVzKTs8YnI+DQorPGJyPg0KKyBy ZXR1cm4gRUZJX1NVQ0NFU1M7PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgUmVhZCBm cm9tIE5PUiBmbGFzaC48YnI+DQorPGJyPg0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFz aCBJbnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uPGJyPg0KKyBAcGFyYW1baW5dIExi YSBUaGUgc3RhcnRpbmcgbG9naWNhbCBibG9jayBpbmRleCB0byByZWFkIGZyb20uPGJyPg0KKyBA cGFyYW1baW5dIE9mZnNldCBPZmZzZXQgaW50byB0aGUgYmxvY2sgYXQgd2hpY2ggdG8gYmVnaW4g cmVhZGluZy48YnI+DQorIEBwYXJhbVtpbl0gQnVmZmVyU2l6ZUluQnl0ZXMgVGhlIG51bWJlciBv ZiBieXRlcyB0byByZWFkLjxicj4NCisgQHBhcmFtW291dF0gQnVmZmVyIFRoZSBwb2ludGVyIHRv IGEgY2FsbGVyLWFsbG9jYXRlZCBidWZmZXIgdGhhdDxicj4NCisgc2hvdWxkIGJlIGNvcGllZCB3 aXRoIHJlYWQgZGF0YS48YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlYWQgaXMg Y29tcGxldGUuPGJyPg0KKyBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBh cmFtZXRlcnMgcGFzc2VkLjxicj4NCisqKi88YnI+DQorRUZJX1NUQVRVUzxicj4NCitOb3JGbGFz aFJlYWQgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSw8YnI+DQorIElO IEVGSV9MQkEgTGJhLDxicj4NCisgSU4gVUlOVE4gT2Zmc2V0LDxicj4NCisgSU4gVUlOVE4gQnVm ZmVyU2l6ZUluQnl0ZXMsPGJyPg0KKyBPVVQgVk9JRCAqQnVmZmVyPGJyPg0KKyApPGJyPg0KK3s8 YnI+DQorIFVJTlROIFN0YXJ0QWRkcmVzczs8YnI+DQorPGJyPg0KKyAvLyBUaGUgYnVmZmVyIG11 c3QgYmUgdmFsaWQ8YnI+DQorIGlmIChCdWZmZXIgPT0gTlVMTCkgezxicj4NCisgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBSZXR1cm4gaWYg d2UgZG8gbm90IGhhdmUgYW55IGJ5dGUgdG8gcmVhZDxicj4NCisgaWYgKEJ1ZmZlclNpemVJbkJ5 dGVzID09IDApIHs8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8YnI+DQorIH08YnI+DQorPGJy Pg0KKyBpZiAoKChMYmEgKiBJbnN0YW5jZS0mZ3Q7TWVkaWEuQmxvY2tTaXplKSArIE9mZnNldCAr IEJ1ZmZlclNpemVJbkJ5dGVzKSAmZ3Q7PGJyPg0KKyBJbnN0YW5jZS0mZ3Q7U2l6ZSk8YnI+DQor IHs8YnI+DQorIERFQlVHICgoPGJyPg0KKyBERUJVR19FUlJPUiw8YnI+DQorICZxdW90O05vckZs YXNoUmVhZDogRVJST1IgLSBSZWFkIHdpbGwgZXhjZWVkIGRldmljZSBzaXplLlxuJnF1b3Q7PGJy Pg0KKyApKTs8YnI+DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7PGJyPg0KKyB9PGJy Pg0KKzxicj4NCisgLy8gR2V0IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbTxicj4N CisgU3RhcnRBZGRyZXNzID0gR0VUX05PUl9CTE9DS19BRERSRVNTICg8YnI+DQorIEluc3RhbmNl LSZndDtSZWdpb25CYXNlQWRkcmVzcyw8YnI+DQorIExiYSw8YnI+DQorIEluc3RhbmNlLSZndDtN ZWRpYS5CbG9ja1NpemU8YnI+DQorICk7PGJyPg0KKzxicj4NCisgLy8gUmVhZG91dCB0aGUgZGF0 YTxicj4NCisgQ29weU1lbSAoQnVmZmVyLCAoVUlOVE4gKikoU3RhcnRBZGRyZXNzICsgT2Zmc2V0 KSwgQnVmZmVyU2l6ZUluQnl0ZXMpOzxicj4NCis8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8 YnI+DQorfTxicj4NCis8YnI+DQorLyoqPGJyPg0KKyBXcml0ZSBhIGZ1bGwgb3IgcG9ydGlvbiBv ZiBhIGJsb2NrLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIElu c3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi48YnI+DQorIEBwYXJhbVtpbl0gTGJhIFRo ZSBzdGFydGluZyBsb2dpY2FsIGJsb2NrIGluZGV4IHRvIHdyaXRlIHRvLjxicj4NCisgQHBhcmFt W2luXSBPZmZzZXQgT2Zmc2V0IGludG8gdGhlIGJsb2NrIGF0IHdoaWNoIHRvIGJlZ2luIHdyaXRp bmcuPGJyPg0KKyBAcGFyYW1baW4sIG91dF0gTnVtQnl0ZXMgVGhlIHRvdGFsIHNpemUgb2YgdGhl IGJ1ZmZlci48YnI+DQorIEBwYXJhbVtpbl0gQnVmZmVyIFRoZSBwb2ludGVyIHRvIGEgY2FsbGVy LWFsbG9jYXRlZCBidWZmZXIgdGhhdDxicj4NCisgY29udGFpbnMgdGhlIHNvdXJjZSBmb3IgdGhl IHdyaXRlLjxicj4NCis8YnI+DQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgV3JpdGUgaXMgY29tcGxl dGUuPGJyPg0KKyBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRl cnMgcGFzc2VkLjxicj4NCisgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpFIEJ1ZmZlciBzaXpl IG5vdCBlbm91Z2guPGJyPg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSBy ZXBvcnRlZCBhbiBlcnJvci48YnI+DQorKiovPGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9yRmxh c2hXcml0ZVNpbmdsZUJsb2NrICg8YnI+DQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFu Y2UsPGJyPg0KKyBJTiBFRklfTEJBIExiYSw8YnI+DQorIElOIFVJTlROIE9mZnNldCw8YnI+DQor IElOIE9VVCBVSU5UTiAqTnVtQnl0ZXMsPGJyPg0KKyBJTiBVSU5UOCAqQnVmZmVyPGJyPg0KKyAp PGJyPg0KK3s8YnI+DQorIEVGSV9TVEFUVVMgU3RhdHVzOzxicj4NCisgVUlOVDMyIFRtcDs8YnI+ DQorIFVJTlQzMiBUbXBCdWY7PGJyPg0KKyBVSU5UMzIgV29yZFRvV3JpdGU7PGJyPg0KKyBVSU5U MzIgTWFzazs8YnI+DQorIEJPT0xFQU4gRG9FcmFzZTs8YnI+DQorIFVJTlROIEJ5dGVzVG9Xcml0 ZTs8YnI+DQorIFVJTlROIEN1ck9mZnNldDs8YnI+DQorIFVJTlROIFdvcmRBZGRyOzxicj4NCisg VUlOVE4gQmxvY2tTaXplOzxicj4NCisgVUlOVE4gQmxvY2tBZGRyZXNzOzxicj4NCisgVUlOVE4g UHJldkJsb2NrQWRkcmVzczs8YnI+DQorPGJyPg0KKyBpZiAoQnVmZmVyID09IE5VTEwpIHs8YnI+ DQorIERFQlVHICgoPGJyPg0KKyBERUJVR19FUlJPUiw8YnI+DQorICZxdW90O05vckZsYXNoV3Jp dGVTaW5nbGVCbG9jazogRVJST1IgLSBCdWZmZXIgaXMgaW52YWxpZFxuJnF1b3Q7PGJyPg0KKyAp KTs8YnI+DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7PGJyPg0KKyB9PGJyPg0KKzxi cj4NCisgaWYgKE51bUJ5dGVzID09IE5VTEwpIHs8YnI+DQorIERFQlVHICgoPGJyPg0KKyBERUJV R19FUlJPUiw8YnI+DQorICZxdW90O05vckZsYXNoV3JpdGVTaW5nbGVCbG9jazogRVJST1IgLSBO dW1CeXRlcyBpcyBpbnZhbGlkXG4mcXVvdDs8YnI+DQorICkpOzxicj4NCisgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyBQcmV2QmxvY2tBZGRyZXNz ID0gMDs8YnI+DQorPGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVCVUdfSU5GTyw8YnI+DQorICZx dW90O05vckZsYXNoV3JpdGVTaW5nbGVCbG9jayhQYXJhbWV0ZXJzOiBMYmE9JWxkLCBPZmZzZXQ9 MHgleCwgJnF1b3Q7PGJyPg0KKyAmcXVvdDsqTnVtQnl0ZXM9MHgleCwgQnVmZmVyIEAgMHglMDh4 KVxuJnF1b3Q7LDxicj4NCisgTGJhLDxicj4NCisgT2Zmc2V0LDxicj4NCisgKk51bUJ5dGVzLDxi cj4NCisgQnVmZmVyPGJyPg0KKyApKTs8YnI+DQorPGJyPg0KKyAvLyBMb2NhdGUgdGhlIGJsb2Nr IHNpemUgdG8gYXZvaWQgZGUtcmVmZXJlbmNpbmcgcG9pbnRlcnMgYWxsIHRoZSB0aW1lPGJyPg0K KyBCbG9ja1NpemUgPSBJbnN0YW5jZS0mZ3Q7TWVkaWEuQmxvY2tTaXplOzxicj4NCis8YnI+DQor IC8vIFRoZSB3cml0ZSBtdXN0IG5vdCBzcGFuIGJsb2NrIGJvdW5kYXJpZXMuPGJyPg0KKyAvLyBX ZSBuZWVkIHRvIGNoZWNrIGVhY2ggdmFyaWFibGUgaW5kaXZpZHVhbGx5IGJlY2F1c2UgYWRkaW5n IHR3byBsYXJnZTxicj4NCisgLy8gdmFsdWVzIHRvZ2V0aGVyIG92ZXJmbG93cy48YnI+DQorIGlm ICgoT2Zmc2V0ICZndDs9IEJsb2NrU2l6ZSkgfHw8YnI+DQorICgqTnVtQnl0ZXMgJmd0OyBCbG9j a1NpemUpIHx8PGJyPg0KKyAoKE9mZnNldCArICpOdW1CeXRlcykgJmd0OyBCbG9ja1NpemUpKTxi cj4NCisgezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VSUk9SLDxicj4NCisgJnF1b3Q7 Tm9yRmxhc2hXcml0ZVNpbmdsZUJsb2NrOiBFUlJPUiAtIEVGSV9CQURfQlVGRkVSX1NJWkU6ICZx dW90Ozxicj4NCisgJnF1b3Q7KE9mZnNldD0weCV4ICsgTnVtQnl0ZXM9MHgleCkgJmd0OyBCbG9j a1NpemU9MHgleFxuJnF1b3Q7LDxicj4NCisgT2Zmc2V0LDxicj4NCisgKk51bUJ5dGVzLDxicj4N CisgQmxvY2tTaXplPGJyPg0KKyApKTs8YnI+DQorIHJldHVybiBFRklfQkFEX0JVRkZFUl9TSVpF Ozxicj4NCisgfTxicj4NCis8YnI+DQorIC8vIFdlIG11c3QgaGF2ZSBzb21lIGJ5dGVzIHRvIHdy aXRlPGJyPg0KKyBpZiAoKk51bUJ5dGVzID09IDApIHs8YnI+DQorIERFQlVHICgoPGJyPg0KKyBE RUJVR19FUlJPUiw8YnI+DQorICZxdW90O05vckZsYXNoV3JpdGVTaW5nbGVCbG9jazogRVJST1Ig LSBFRklfQkFEX0JVRkZFUl9TSVpFOiAmcXVvdDs8YnI+DQorICZxdW90OyhPZmZzZXQ9MHgleCAr IE51bUJ5dGVzPTB4JXgpICZndDsgQmxvY2tTaXplPTB4JXhcbiZxdW90Oyw8YnI+DQorIE9mZnNl dCw8YnI+DQorICpOdW1CeXRlcyw8YnI+DQorIEJsb2NrU2l6ZTxicj4NCisgKSk7PGJyPg0KKyBy ZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0laRTs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBQaWNr IDEyOGJ5dGVzIGFzIGEgZ29vZCBzdGFydCBmb3Igd29yZCBvcGVyYXRpb25zIGFzIG9wcG9zZWQg dG8gZXJhc2luZyB0aGU8YnI+DQorIC8vIGJsb2NrIGFuZCB3cml0aW5nIHRoZSBkYXRhIHJlZ2Fy ZGxlc3MgaWYgYW4gZXJhc2UgaXMgcmVhbGx5IG5lZWRlZC48YnI+DQorIC8vIEl0IGxvb2tzIGxp a2UgbW9zdCBpbmRpdmlkdWFsIE5WIHZhcmlhYmxlIHdyaXRlcyBhcmUgc21hbGxlciB0aGFuIDEy OGJ5dGVzLjxicj4NCisgaWYgKCpOdW1CeXRlcyAmbHQ7PSAxMjgpIHs8YnI+DQorIC8vIENoZWNr IHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGVyYXNlIGJlZm9yZSBwcm9ncmFtbWluZyB0aGUgZGF0YSBp bnRvIE5PUi48YnI+DQorIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBiaXRzIGFyZSBvbmx5IGNoYW5n aW5nIGZyb20gMXMgdG8gMHMgd2UgY2FuIGp1c3Qgd3JpdGUuPGJyPg0KKyAvLyBBZnRlciBhIGJs b2NrIGlzIGVyYXNlZCBhbGwgYml0cyBpbiB0aGUgYmxvY2sgaXMgc2V0IHRvIDEuPGJyPg0KKyAv LyBJZiBhbnkgYnl0ZSByZXF1aXJlcyB1cyB0byBlcmFzZSB3ZSBqdXN0IGdpdmUgdXAgYW5kIHJl d3JpdGUgYWxsIG9mIGl0Ljxicj4NCisgRG9FcmFzZSA9IEZBTFNFOzxicj4NCisgQnl0ZXNUb1dy aXRlID0gKk51bUJ5dGVzOzxicj4NCisgQ3VyT2Zmc2V0ID0gT2Zmc2V0Ozxicj4NCis8YnI+DQor IHdoaWxlIChCeXRlc1RvV3JpdGUgJmd0OyAwKSB7PGJyPg0KKyAvLyBSZWFkIGZ1bGwgd29yZCBm cm9tIE5PUiwgc3BsaWNlIGFzIHJlcXVpcmVkLiBBIHdvcmQgaXMgdGhlIHNtYWxsZXN0PGJyPg0K KyAvLyB1bml0IHdlIGNhbiB3cml0ZS48YnI+DQorIFN0YXR1cyA9IE5vckZsYXNoUmVhZCAoPGJy Pg0KKyBJbnN0YW5jZSw8YnI+DQorIExiYSw8YnI+DQorIEN1ck9mZnNldCAmYW1wOyB+KDB4Myks PGJyPg0KKyBzaXplb2YgKFRtcCksPGJyPg0KKyAmYW1wO1RtcDxicj4NCisgKTs8YnI+DQorIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxi cj4NCisgfTxicj4NCis8YnI+DQorIC8vIFBoeXNpY2FsIGFkZHJlc3Mgb2Ygd29yZCBpbiBOT1Ig dG8gd3JpdGUuPGJyPg0KKyBXb3JkQWRkciA9IChDdXJPZmZzZXQgJmFtcDsgfigweDMpKSArPGJy Pg0KKyBHRVRfTk9SX0JMT0NLX0FERFJFU1MgKDxicj4NCisgSW5zdGFuY2UtJmd0O1JlZ2lvbkJh c2VBZGRyZXNzLDxicj4NCisgTGJhLDxicj4NCisgQmxvY2tTaXplPGJyPg0KKyApOzxicj4NCis8 YnI+DQorIC8vIFRoZSB3b3JkIG9mIGRhdGEgdGhhdCBpcyB0byBiZSB3cml0dGVuLjxicj4NCisg VG1wQnVmID0gUmVhZFVuYWxpZ25lZDMyICg8YnI+DQorIChVSU5UMzIgKikoQnVmZmVyICsgKCpO dW1CeXRlcyAtIEJ5dGVzVG9Xcml0ZSkpPGJyPg0KKyApOzxicj4NCis8YnI+DQorIC8vIEZpcnN0 IGRvIHdvcmQgYWxpZ25lZCBjaHVua3MuPGJyPg0KKyBpZiAoKEN1ck9mZnNldCAmYW1wOyAweDMp ID09IDApIHs8YnI+DQorIGlmIChCeXRlc1RvV3JpdGUgJmd0Oz0gNCkgezxicj4NCisgLy8gSXMg dGhlIGRlc3RpbmF0aW9uIHN0aWxsIGluICdlcmFzZWQnIHN0YXRlPzxicj4NCisgaWYgKH5UbXAg IT0gMCkgezxicj4NCisgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBvbmx5IGNoYW5naW5nIGJp dHMgdG8gemVyby48YnI+DQorIGlmICgoVG1wIF4gVG1wQnVmKSAmYW1wOyBUbXBCdWYpIHs8YnI+ DQorIERvRXJhc2UgPSBUUlVFOzxicj4NCisgYnJlYWs7PGJyPg0KKyB9PGJyPg0KKyB9PGJyPg0K Kzxicj4NCisgLy8gV3JpdGUgdGhpcyB3b3JkIHRvIE5PUjxicj4NCisgV29yZFRvV3JpdGUgPSBU bXBCdWY7PGJyPg0KKyBDdXJPZmZzZXQgKz0gc2l6ZW9mIChUbXBCdWYpOzxicj4NCisgQnl0ZXNU b1dyaXRlIC09IHNpemVvZiAoVG1wQnVmKTs8YnI+DQorIH0gZWxzZSB7PGJyPg0KKyAvLyBCeXRl c1RvV3JpdGUgJmx0OyA0LiBEbyBzbWFsbCB3cml0ZXMgYW5kIGxlZnQtb3ZlcnM8YnI+DQorIE1h c2sgPSB+KCh+MCkgJmx0OyZsdDsgKEJ5dGVzVG9Xcml0ZSAqIDgpKTs8YnI+DQorIC8vIE1hc2sg b3V0IHRoZSBieXRlcyB3ZSB3YW50Ljxicj4NCisgVG1wQnVmICZhbXA7PSBNYXNrOzxicj4NCisg Ly8gSXMgdGhlIGRlc3RpbmF0aW9uIHN0aWxsIGluICdlcmFzZWQnIHN0YXRlPzxicj4NCisgaWYg KChUbXAgJmFtcDsgTWFzaykgIT0gTWFzaykgezxicj4NCisgLy8gQ2hlY2sgdG8gc2VlIGlmIHdl IGFyZSBvbmx5IGNoYW5naW5nIGJpdHMgdG8gemVyby48YnI+DQorIGlmICgoVG1wIF4gVG1wQnVm KSAmYW1wOyBUbXBCdWYpIHs8YnI+DQorIERvRXJhc2UgPSBUUlVFOzxicj4NCisgYnJlYWs7PGJy Pg0KKyB9PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8gTWVyZ2Ugb2xkIGFuZCBuZXcgZGF0YS4g V3JpdGUgbWVyZ2VkIHdvcmQgdG8gTk9SPGJyPg0KKyBXb3JkVG9Xcml0ZSA9IChUbXAgJmFtcDsg fk1hc2spIHwgVG1wQnVmOzxicj4NCisgQ3VyT2Zmc2V0ICs9IEJ5dGVzVG9Xcml0ZTs8YnI+DQor IEJ5dGVzVG9Xcml0ZSA9IDA7PGJyPg0KKyB9PGJyPg0KKyB9IGVsc2Ugezxicj4NCisgLy8gRG8g bXVsdGlwbGUgd29yZHMsIGJ1dCBzdGFydGluZyB1bmFsaWduZWQuPGJyPg0KKyBpZiAoQnl0ZXNU b1dyaXRlICZndDsgKDQgLSAoQ3VyT2Zmc2V0ICZhbXA7IDB4MykpKSB7PGJyPg0KKyBNYXNrID0g KCh+MCkgJmx0OyZsdDsgKChDdXJPZmZzZXQgJmFtcDsgMHgzKSAqIDgpKTs8YnI+DQorIC8vIE1h c2sgb3V0IHRoZSBieXRlcyB3ZSB3YW50Ljxicj4NCisgVG1wQnVmICZhbXA7PSBNYXNrOzxicj4N CisgLy8gSXMgdGhlIGRlc3RpbmF0aW9uIHN0aWxsIGluICdlcmFzZWQnIHN0YXRlPzxicj4NCisg aWYgKChUbXAgJmFtcDsgTWFzaykgIT0gTWFzaykgezxicj4NCisgLy8gQ2hlY2sgdG8gc2VlIGlm IHdlIGFyZSBvbmx5IGNoYW5naW5nIGJpdHMgdG8gemVyby48YnI+DQorIGlmICgoVG1wIF4gVG1w QnVmKSAmYW1wOyBUbXBCdWYpIHs8YnI+DQorIERvRXJhc2UgPSBUUlVFOzxicj4NCisgYnJlYWs7 PGJyPg0KKyB9PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8gTWVyZ2Ugb2xkIGFuZCBuZXcgZGF0 YS4gV3JpdGUgbWVyZ2VkIHdvcmQgdG8gTk9SPGJyPg0KKyBXb3JkVG9Xcml0ZSA9IChUbXAgJmFt cDsgfk1hc2spIHwgVG1wQnVmOzxicj4NCisgQnl0ZXNUb1dyaXRlIC09ICg0IC0gKEN1ck9mZnNl dCAmYW1wOyAweDMpKTs8YnI+DQorIEN1ck9mZnNldCArPSAoNCAtIChDdXJPZmZzZXQgJmFtcDsg MHgzKSk7PGJyPg0KKyB9IGVsc2Ugezxicj4NCisgLy8gVW5hbGlnbmVkIGFuZCBmaXRzIGluIG9u ZSB3b3JkLjxicj4NCisgTWFzayA9ICh+KCh+MCkgJmx0OyZsdDsgKEJ5dGVzVG9Xcml0ZSAqIDgp KSkgJmx0OyZsdDsgKChDdXJPZmZzZXQgJmFtcDsgMHgzKSAqIDgpOzxicj4NCisgLy8gTWFzayBv dXQgdGhlIGJ5dGVzIHdlIHdhbnQuPGJyPg0KKyBUbXBCdWYgPSAoVG1wQnVmICZsdDsmbHQ7ICgo Q3VyT2Zmc2V0ICZhbXA7IDB4MykgKiA4KSkgJmFtcDsgTWFzazs8YnI+DQorIC8vIElzIHRoZSBk ZXN0aW5hdGlvbiBzdGlsbCBpbiAnZXJhc2VkJyBzdGF0ZT88YnI+DQorIGlmICgoVG1wICZhbXA7 IE1hc2spICE9IE1hc2spIHs8YnI+DQorIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgb25seSBj aGFuZ2luZyBiaXRzIHRvIHplcm8uPGJyPg0KKyBpZiAoKFRtcCBeIFRtcEJ1ZikgJmFtcDsgVG1w QnVmKSB7PGJyPg0KKyBEb0VyYXNlID0gVFJVRTs8YnI+DQorIGJyZWFrOzxicj4NCisgfTxicj4N CisgfTxicj4NCis8YnI+DQorIC8vIE1lcmdlIG9sZCBhbmQgbmV3IGRhdGEuIFdyaXRlIG1lcmdl ZCB3b3JkIHRvIE5PUjxicj4NCisgV29yZFRvV3JpdGUgPSAoVG1wICZhbXA7IH5NYXNrKSB8IFRt cEJ1Zjs8YnI+DQorIEN1ck9mZnNldCArPSBCeXRlc1RvV3JpdGU7PGJyPg0KKyBCeXRlc1RvV3Jp dGUgPSAwOzxicj4NCisgfTxicj4NCisgfTxicj4NCis8YnI+DQorIEJsb2NrQWRkcmVzcyA9IEdF VF9OT1JfQkxPQ0tfQUREUkVTUyAoPGJyPg0KKyBJbnN0YW5jZS0mZ3Q7UmVnaW9uQmFzZUFkZHJl c3MsPGJyPg0KKyBMYmEsPGJyPg0KKyBCbG9ja1NpemU8YnI+DQorICk7PGJyPg0KKyBpZiAoQmxv Y2tBZGRyZXNzICE9IFByZXZCbG9ja0FkZHJlc3MpIHs8YnI+DQorIFN0YXR1cyA9IE5vckZsYXNo VW5sb2NrU2luZ2xlQmxvY2tJZk5lY2Vzc2FyeSAoSW5zdGFuY2UsIEJsb2NrQWRkcmVzcyk7PGJy Pg0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7PGJyPg0KKyByZXR1cm4gRUZJX0RFVklDRV9F UlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyBQcmV2QmxvY2tBZGRyZXNzID0gQmxvY2tBZGRy ZXNzOzxicj4NCisgfTxicj4NCis8YnI+DQorIFN0YXR1cyA9IE5vckZsYXNoV3JpdGVTaW5nbGVX b3JkIChJbnN0YW5jZSwgV29yZEFkZHIsIFdvcmRUb1dyaXRlKTs8YnI+DQorIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxicj4NCisgfTxi cj4NCisgfTxicj4NCis8YnI+DQorIC8vIEV4aXQgaWYgd2UgZ290IGhlcmUgYW5kIGNvdWxkIHdy aXRlIGFsbCB0aGUgZGF0YS4gT3RoZXJ3aXNlIGRvIHRoZTxicj4NCisgLy8gRXJhc2UtV3JpdGUg Y3ljbGUuPGJyPg0KKyBpZiAoIURvRXJhc2UpIHs8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8 YnI+DQorIH08YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBDaGVjayB3ZSBkaWQgZ2V0IHNvbWUg bWVtb3J5LiBCdWZmZXIgaXMgQmxvY2tTaXplLjxicj4NCisgaWYgKEluc3RhbmNlLSZndDtTaGFk b3dCdWZmZXIgPT0gTlVMTCkgezxicj4NCisgREVCVUcgKChERUJVR19FUlJPUiwgJnF1b3Q7RnZi V3JpdGU6IEVSUk9SIC0gQnVmZmVyIG5vdCByZWFkeVxuJnF1b3Q7KSk7PGJyPg0KKyByZXR1cm4g RUZJX0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBSZWFkIE5PUiBGbGFz aCBkYXRhIGludG8gc2hhZG93IGJ1ZmZlcjxicj4NCisgU3RhdHVzID0gTm9yRmxhc2hSZWFkQmxv Y2tzICg8YnI+DQorIEluc3RhbmNlLDxicj4NCisgTGJhLDxicj4NCisgQmxvY2tTaXplLDxicj4N CisgSW5zdGFuY2UtJmd0O1NoYWRvd0J1ZmZlcjxicj4NCisgKTs8YnI+DQorIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHs8YnI+DQorIC8vIFJldHVybiBvbmUgb2YgdGhlIHByZS1hcHByb3ZlZCBl cnJvciBzdGF0dXNlczxicj4NCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7PGJyPg0KKyB9PGJy Pg0KKzxicj4NCisgLy8gUHV0IHRoZSBkYXRhIGF0IHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbiBp bnNpZGUgdGhlIGJ1ZmZlciBhcmVhPGJyPg0KKyBDb3B5TWVtICg8YnI+DQorIChWT0lEICopKChV SU5UTilJbnN0YW5jZS0mZ3Q7U2hhZG93QnVmZmVyICsgT2Zmc2V0KSw8YnI+DQorIEJ1ZmZlciw8 YnI+DQorICpOdW1CeXRlczxicj4NCisgKTs8YnI+DQorPGJyPg0KKyAvLyBXcml0ZSB0aGUgbW9k aWZpZWQgYnVmZmVyIGJhY2sgdG8gdGhlIE5vckZsYXNoPGJyPg0KKyBTdGF0dXMgPSBOb3JGbGFz aFdyaXRlQmxvY2tzICg8YnI+DQorIEluc3RhbmNlLDxicj4NCisgTGJhLDxicj4NCisgQmxvY2tT aXplLDxicj4NCisgSW5zdGFuY2UtJmd0O1NoYWRvd0J1ZmZlcjxicj4NCisgKTs8YnI+DQorIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHs8YnI+DQorIC8vIFJldHVybiBvbmUgb2YgdGhlIHByZS1h cHByb3ZlZCBlcnJvciBzdGF0dXNlczxicj4NCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7PGJy Pg0KKyB9PGJyPg0KKzxicj4NCisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCit9PGJyPg0KKzxi cj4NCisvKio8YnI+DQorIFJlYWQgSkVERUMgSUQgb2YgTk9SIGZsYXNoIGRldmljZS48YnI+DQor PGJyPg0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJs ZSBzdG9yZSByZWdpb24uPGJyPg0KKyBAcGFyYW1bb3V0XSBKZWRlY0lkIEpFREVDIElEIG9mIE5P UiBmbGFzaCBkZXZpY2UuPGJyPg0KKyBNYXhpbXVtIGxlbmd0aCBvZiBKZWRlY0lkIGNhbiBiZSB1 cHRvIDYgYnl0ZXM8YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFRoZSB3cml0ZSBp cyBjb21wbGV0ZWQuPGJyPg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgRmFpbGVkIHRvIGZl dGNoIEpFREVDIElELjxicj4NCisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW52YWxp ZCBwYXJhbWV0ZXJzIHBhc3NlZC48YnI+DQorKiovPGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9y Rmxhc2hSZWFkSWQgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSw8YnI+ DQorIE9VVCBVSU5UOCAqSmVkZWNJZDxicj4NCisgKTxicj4NCit7PGJyPg0KKyBVSU5UMzIgdmFs Ozxicj4NCis8YnI+DQorIGlmICgoSW5zdGFuY2UgPT0gTlVMTCkgfHwgKEplZGVjSWQgPT0gTlVM TCkpIHs8YnI+DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7PGJyPg0KKyB9PGJyPg0K Kzxicj4NCisgdmFsID0gKFNQSU5PUl9PUF9SRElEICZsdDsmbHQ7PGJyPg0KKyBDRE5TX1FTUElf RkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9CSVRfUE9TKSB8PGJyPg0KKyAoQ0ROU19RU1BJX0ZM QVNIX0NNRF9DVFJMX1JFR19SRUFEX0VOQUJMRSAmbHQ7Jmx0Ozxicj4NCisgQ0ROU19RU1BJX0ZM QVNIX0NNRF9DVFJMX1JFR19SRUFERU5fQklUX1BPUykgfDxicj4NCisgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19OVU1fREFUQV9CWVRFUyAoMyk7PGJyPg0KKzxicj4NCisgaWYgKEVGSV9F UlJPUiAoQ2Ruc1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFuY2UsIHZhbCkpKSB7PGJyPg0KKyBy ZXR1cm4gRUZJX0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyB2YWwgPSBNbWlv UmVhZDMyICg8YnI+DQorIEluc3RhbmNlLSZndDtIb3N0Q29udHJvbGxlckJhc2VBZGRyZXNzICsg Q0ROU19RU1BJX0ZMQVNIX0NNRF9SRUFEX0RBVEFfUkVHX09GRlNFVDxicj4NCisgKTs8YnI+DQor PGJyPg0KKyAvLyBNYW51ZmFjdHVyZXIgSUQgZmllbGQ8YnI+DQorIEplZGVjSWRbMF0gPSAoVUlO VDgpdmFsOzxicj4NCisgLy8gVHlwZSBmaWVsZDxicj4NCisgSmVkZWNJZFsxXSA9IChVSU5UOCko dmFsICZndDsmZ3Q7IDgpOzxicj4NCisgLy8gQ2FwYWNpdHkgZmllbGQ8YnI+DQorIEplZGVjSWRb Ml0gPSAoVUlOVDgpKHZhbCAmZ3Q7Jmd0OyAxNik7PGJyPg0KKzxicj4NCisgREVCVUcgKCg8YnI+ DQorIERFQlVHX0lORk8sPGJyPg0KKyAmcXVvdDtOb3IgZmxhc2ggZGV0ZWN0ZWQsIEplZGVjIElE LCBNYW51ZmFjdHVyZXIgSWQ9JXggVHlwZT0leCBDYXBhY2l0eT0leCBcbiZxdW90Oyw8YnI+DQor IEplZGVjSWRbMF0sPGJyPg0KKyBKZWRlY0lkWzFdLDxicj4NCisgSmVkZWNJZFsyXTxicj4NCisg KSk7PGJyPg0KKzxicj4NCisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCit9PGJyPg0KKzxicj4N CisvKio8YnI+DQorIE5PUiBGbGFzaCBSZXNldDxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5z dGFuY2UgTk9SIGZsYXNoIGluc3RhbmNlLjxicj4NCis8YnI+DQorIEByZXR2YWwgRUZJX1NVQ0NF U1MgUmV0dXJuIHN1Y2Nlc3Mgb24gZXZlcnkgY2FsbC48YnI+DQorKiovPGJyPg0KK0VGSV9TVEFU VVM8YnI+DQorTm9yRmxhc2hSZXNldCAoPGJyPg0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKklu c3RhbmNlPGJyPg0KKyApPGJyPg0KK3s8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8YnI+DQor fTxicj4NCi0tIDxicj4NCjIuMjUuMTxicj4NCjxicj4NCjxicj4NCjxicj4NCjxicj4NCjwvc3Bh bj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNl cmlmIj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rp dj4NCjwvYm9keT4NCjwvaHRtbD4NCg0KCjxkaXYgd2lkdGg9IjEiIHN0eWxlPSJjb2xvcjp3aGl0 ZTtjbGVhcjpib3RoIj5fLl8sXy5fLF88L2Rpdj4KPGhyPgoKCkdyb3Vwcy5pbyBMaW5rczo8cD4K CgogIAogICAgWW91IHJlY2VpdmUgYWxsIG1lc3NhZ2VzIHNlbnQgdG8gdGhpcyBncm91cC4KICAK ICAKCgo8cD4KPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91cHMuaW8v Zy9kZXZlbC9tZXNzYWdlLzExOTM0MCI+Vmlldy9SZXBseSBPbmxpbmUgKCMxMTkzNDApPC9hPiB8 CgoKICAKCnwKCiAgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vZ3JvdXBzLmlvL210 LzEwNjM2NTQ2Ni83Njg2MTc2Ij5NdXRlIFRoaXMgVG9waWM8L2E+CgoKfCA8YSBocmVmPSJodHRw czovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvcG9zdCI+TmV3IFRvcGljPC9hPgoKPGJyPgoKCgoK PGEgaHJlZj0iaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL2VkaXRzdWIvNzY4NjE3NiI+ WW91ciBTdWJzY3JpcHRpb248L2E+IHwKPGEgaHJlZj0ibWFpbHRvOmRldmVsK293bmVyQGVkazIu Z3JvdXBzLmlvIj5Db250YWN0IEdyb3VwIE93bmVyPC9hPiB8Cgo8YSBocmVmPSJodHRwczovL2Vk azIuZ3JvdXBzLmlvL2cvZGV2ZWwvdW5zdWIiPlVuc3Vic2NyaWJlPC9hPgoKIFtyZWJlY2NhQG9w ZW5mdy5pb108YnI+CjxkaXYgd2lkdGg9IjEiIHN0eWxlPSJjb2xvcjp3aGl0ZTtjbGVhcjpib3Ro Ij5fLl8sXy5fLF88L2Rpdj4KDQo= --_000_PA6PR08MB10767A90D63165ED348C969C6F3F22PA6PR08MB10767eu_--