From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id C0F97482C1 for ; Thu, 21 Dec 2023 08:30:57 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8926368D07E; Thu, 21 Dec 2023 10:30:54 +0200 (EET) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3D67868CDBE for ; Thu, 21 Dec 2023 10:30:47 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1703147452; x=1734683452; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=6Zf4OzbZXR+5myRj1fpQhnrj83U2oKxxR+CldZ2LI6g=; b=eenNVc3bYPh8iD1yASae8wf1i/F3cn1vg5vPRhFFoEQOXNJuw1lkIYso Ib1kPUWceBCDj3ducR7Qyjs2Zi8zMlQxN3Y3kXFD6gt/1G5buWxr/dFBi 8/q6cln8tGGL9hgtTuBC9ykII4GnIv1rtlcJLA9+NMimz0Yqm9TKxAYqb fPPw82jX9a+hT/t9gX3wbxyP1s9tpq0WEYAHVA2Y0Q5JYyBivWUM9iiCw bWrqjg6WfzEw6k7gU3JWulLP7G7c/+mwKamwwR14eXT+ftRrIE+SwKera c4VOqucBhgnXYzIePMU6C62EwtVFF3eiUaKtELUyN01UD2tFgXskN+v/s g==; X-IronPort-AV: E=McAfee;i="6600,9927,10930"; a="386367130" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="386367130" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Dec 2023 00:30:44 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10930"; a="726365205" X-IronPort-AV: E=Sophos;i="6.04,293,1695711600"; d="scan'208";a="726365205" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga003.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 21 Dec 2023 00:30:44 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 21 Dec 2023 00:30:44 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Thu, 21 Dec 2023 00:30:44 -0800 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.40) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Thu, 21 Dec 2023 00:30:43 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RgfENWOfqeE699VZiyUT6zmTp2cioBLTEiCY0c4+dvw1iOof4MnWu6Wlp5hMB5RLTTUMqXVNg1g7w3bQy5dof/MHUEXp0VZfefOkUZCJRLvj+lyGtvRdqh2UWKVxk9CGxc8NPdzpWuxeqyUwgHJHDgF9BunHoZvmSaVBjAy07l0qQxYvafodV4JMh5ALVJ194C8GAIJXfaRTi2C14KYbUUrRTHHuND2Pn1xEWRNsR2NgHO1TRgrsu3+pi05VpWul/RduTyDF4dCfdhJ8r1AxuC4tP8bbKuNQ+Z4InaV8xqkJoRleOCDjrHxWnx39PiGRaGfgyRpTV3S3thjAkm7Prg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6Zf4OzbZXR+5myRj1fpQhnrj83U2oKxxR+CldZ2LI6g=; b=Qga5mSNiTCuCfhMVD10lXvbDFWbIp+D/Cd23kydgSM+dMo6YD4Fpbiuodvi9Yj5DY5j5BRSC56uo0o786Fwv7aaFGQEScOPlgTv1tw7rSBShlm7pYCkT2e3J9d+dzDzWw6O3jAJOKjATLc82QMkyhTmz3MoyNZmpxRZWRqn8TeBprtDU3RNMRdhSj+7y3mLVMPgBrBdIS7Vh/BjUmPO9MIvpxGWN1xNAQ4vPPZWyyTrgrsFDA12tYG7ABcT/qTMjZ5nMB+ZXMRFi1c/T/oTM8K1zdptIyAarQwPll+BqQbKyZ85E3EL6plR2wL1SfAQ1RpyTk13YFI1Yo4fuV1KbAQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM3PR11MB8757.namprd11.prod.outlook.com (2603:10b6:8:1af::7) by PH0PR11MB4935.namprd11.prod.outlook.com (2603:10b6:510:35::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.21; Thu, 21 Dec 2023 08:30:40 +0000 Received: from DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::4c5:6fdf:6d9:7ac2]) by DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::4c5:6fdf:6d9:7ac2%4]) with mapi id 15.20.7113.016; Thu, 21 Dec 2023 08:30:40 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v12 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 Thread-Index: AQHaJ0eRJLcdofFW/UmSN2NDDV0IlrCuqCOAgATZQIA= Date: Thu, 21 Dec 2023 08:30:39 +0000 Message-ID: References: <20231205065034.1621-1-tong1.wu@intel.com> In-Reply-To: Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM3PR11MB8757:EE_|PH0PR11MB4935:EE_ x-ms-office365-filtering-correlation-id: 81741aa0-86df-4540-1b0f-08dc01ff1d26 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 6PSpynX13YPgJXOdf9c3mU41xxuaU28+PV93Kacc/zkPNfn0CHkHdZuKLBSKnmiG2nGtcoziootVWKHi/gZ0JlqM4gnrIb8HQJcv1eqTSr1WnFcu6z7VvJ0QwZh6u/dt6iCXjPvYsllAhKvUZFXOhJ0OjRUVl1K8hgX7JIhPbgnpTX5i+cfCZTRTqMPzdyBVd7RO5xviCxYMblGNn4gFNwxQkjkN6Wqq2F5xIWi9Rf+p1juY6qZ6ht08Yyq+2pIBhxvhtqk4Ez0yii0+Nxbmj9UI01pXpL0m0bY5opodtTg0qKCYrruziYrH6Q9L43Z8xNgYH9+9RBB3ovAoy3bV6qBZ/dJg3yQin1c10eulRP/Up3tIpHFgQq7+OjGYnwJYm2Us5g8RktwDjBWCVP2yKG5HR82Dt77yRBTJ68reO41k/DOOxBNCj9rjRqzGRccxEcSM0owRE0KyG98bvelBq8s8t7oumNtD2fd9TtGmOSDtBO61XL43aPKS4SF9kZQdgfawZh8vZKS+PdZgmbUdnrMxahN+4bY8xy5LseM88GdfKSj2undAT12RTzSr3Qe1Gvjneb3oI4uDDop46uk7oDAj63rZHfqdzQe9dldHcnCFH8tb0ZYZksu208DMZHqplCCUy5m/KrNEmTwONxGsmWgpYOY8pQ4ZbIl33ZGJXXdfyy3Pz4HWHHw/L1RFmmgM x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM3PR11MB8757.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(346002)(39860400002)(366004)(396003)(136003)(230922051799003)(230173577357003)(230273577357003)(1800799012)(64100799003)(186009)(451199024)(66899024)(26005)(2616005)(6512007)(6506007)(71200400001)(107886003)(36756003)(86362001)(82960400001)(38070700009)(38100700002)(5660300002)(45080400002)(83380400001)(8936002)(8676002)(4326008)(41300700001)(30864003)(122000001)(66476007)(66446008)(64756008)(54906003)(66946007)(66556008)(6916009)(91956017)(76116006)(6486002)(966005)(2906002)(4001150100001)(316002)(19627235002)(478600001)(2004002)(579004)(559001)(309714004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VHFOZWpCUE1oWE9ydHlvSERwUHNBbmRBV0pHWVNObDR3YXFmQVBuVlQ4Y3FW?= =?utf-8?B?VGZiQXB4SkNPRk1SVEUyWitneDNoT2lGOVc1Q0d6R2lxVWVCcHlTdGU1M1Qv?= =?utf-8?B?Y29JaWJpRk1kbmczWHQ5cnFkYmhUVTY3eXhXU2pvdE5MZFlmb0d6TXZTUVFL?= =?utf-8?B?YVhxK0k5SGVFUFRjMGJsaW9zSXlZdmZ4b2dwZitURytScE9PTmMzRExGN1Vk?= =?utf-8?B?djNmeUExenh1V2ptVTZYTS9nbTZGQWNKdUsvNUdQMkM3clA2TzFYci9yZUZ4?= =?utf-8?B?QXAxTkNvRHpZYUw4b0JlMEVEY2F6UTlQVnc2aHdGdFhHZnEzQjBLMy8wVDhM?= =?utf-8?B?WThjbzVqdlFISTlZY0VOTzNSdzNRbzdkbzdsY3JhNTErWktDOXVCWFQ5eGcr?= =?utf-8?B?N3RlS0VPRmNxdWhCUk9PK2xpQ3d4eUdicGdGU1RVWFdiR0pPR05FN2RhWStj?= =?utf-8?B?WGw0a3lIcmhaMW15RFduK1lGdkFwZXB4cGN0MmFRUzM0MUpLZ0JoZDZlNDVx?= =?utf-8?B?UFN6b0p4aTl5a1hHZFRYeUQrbXA4MXVEWjNHaU0yeFZBbW05bTlSRHRlT0dI?= =?utf-8?B?Vzc5SXZodjE3REptZ3N5MzVGZVdpRmozd2taMEtFcnRmVU1GVnRaNmNOSDFV?= =?utf-8?B?RGd5SDFWeGY5ZDFUK2hDOVNzUldNcUN3NHBsckZhdm1VWFhmam5jMjBWWWZT?= =?utf-8?B?NmpKK1RWeWpJSUlWMWZ0ZGs4cGlOS0w0SWZsZDd1OU5IcURKOWpxSHNpMVBx?= =?utf-8?B?QlB0bEs1L2c4b2Q1S1h1Tm5uYkNqWFVUQ1BweVZqRGNNRjR0REkvUk10eVFv?= =?utf-8?B?dklqOXFjZ3UwU084UVhBeVp0d2tTYzRrcUtoajU2MjRGQnNUa2x4MVRjSzR1?= =?utf-8?B?ZlZrM25oY2g3a1h3aTQ5eXVHRnYwRktsRDA5T2I5N094bFpUZWlQdTNOR0lm?= =?utf-8?B?QjVHQ2xXSGxKYTEyQzRIa3hDMGFaUDNIOTZxV3R6dmxmTGRMd0gzK1I5Vk5W?= =?utf-8?B?OWdIWjJHY3BnWE5DaDduWnNzRUx1NVd3a2d1a0ZXZXg3OFdqYXJTREovcGFC?= =?utf-8?B?OWhPbXpJT2JjRmh1UitVN080K3I2RDFTYVkxa1NtMmpVVzdQYXRMUDN3eEdB?= =?utf-8?B?aDBiMm1KeFoxK3cvaDk5d09HdUlsQ3pycCsycnhYSkdrekRMZDhJakV6QVlm?= =?utf-8?B?Snd2dGxwQ2tWYmNkUlUxTlMwdHkxZnoycFVHanMrM01ONUxiaU02YnM4dWNY?= =?utf-8?B?Y2ZHMXVuNXMrSWtRd3FKY0wvYSt4WG94clVsWkVFVy8vMFN6dXdlbUFGRHlW?= =?utf-8?B?bmxxUHoyWisrUHVKdGtvS2ZtVE5QYkZBRWlQUDdRMVA4NUxhcTBLUWcyeGpX?= =?utf-8?B?Wm1ZWlExT0Rla2JhZEc2UDVUS0dhdG9DOWJVN2ovWGlTRnVpMVJucDIzejJY?= =?utf-8?B?ZmFOL24rYUg0dHFrU2VKYVQ2L25GQ2pneXd5RkJocjY2UjVjSmR6Q2ZrYnJN?= =?utf-8?B?eGtQNXN0TUZ4aGxZZHdUUFRLdTFPMGZzQVNkc25sVkxXYUVtNGdLQjFIUW1O?= =?utf-8?B?Um8zOG5oZlU4b2UyS0JPdlFHK3hZOEdVRXQvRTBzekNaNkppYzRONVVwRXJs?= =?utf-8?B?NG1jYlNua3pEZFpxUGlUZzRRZnpyUmorak5jaTZPbTdNSnBhdURPQVo0ck5k?= =?utf-8?B?ZUtsTlo4Z21Bd0FWVnF2Mlo5YkR2bHZsQXFEbVFGTVp0RU8vcXR3RHh6SXdC?= =?utf-8?B?MVJTcXVqb01sVmFZV282LzBYcXp4ZFdaNTl0bHFFZ1BDOWU4VjZVYm9UTktj?= =?utf-8?B?WHhvRGFaK1crRWQ2aWVsbmU3TDlaVTR4ZHlaODJ3VkJqWGl0VE4yek4wWURS?= =?utf-8?B?TlN5TGVydThOZTVadXBwS1BHQm5vUGtLdzl1OWdTU2FDWDRWT2U1UW5uUUt2?= =?utf-8?B?V1hIeFpMcjdEOWZXUW41blllV1duV3h3dG1tQjNoNk9meThXMDc1MUNPbGV5?= =?utf-8?B?WVB3MjhyMzRQRGJoOEFwT0VTdnlTeHdTTU1xTWQzTHRrRTE2aDV1MkNCNStx?= =?utf-8?B?cUx0cUd6Zk9UbzI4dW9wbml3ZS9vdFJrRUU5K1BDNlRtT2R3dFBuVlVqeGt4?= =?utf-8?B?UnRDR3hxTFQ2OVhTMXV1WElWOGdMUFdTS3VnanFZVnhtQ1dHV0plYUtONTRw?= =?utf-8?B?SUE9PQ==?= Content-ID: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM3PR11MB8757.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81741aa0-86df-4540-1b0f-08dc01ff1d26 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Dec 2023 08:30:39.6967 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 6z0m8X3hBgq3IDDimNb4qXNADS2meZqZ6Lfy4f7dF16G9g49gd5Gj7L/rBvpZ3tmEFEmv0QlIeJn8DpNtOygrg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB4935 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v12 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: "Wu, Tong1" , "toqsxw@outlook.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gTWEsIDIwMjMtMTItMTggYXQgMDY6MjggKzAwMDAsIFhpYW5nLCBIYWloYW8gd3JvdGU6Cj4g T24gRGksIDIwMjMtMTItMDUgYXQgMTQ6NDYgKzA4MDAsIFRvbmcgV3Ugd3JvdGU6Cj4gPiBGcm9t OiBXdSBKaWFuaHVhIDx0b3FzeHdAb3V0bG9vay5jb20+Cj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IFd1IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFRvbmcg V3UgPHRvbmcxLnd1QGludGVsLmNvbT4KPiA+IC0tLQo+ID4gCj4gPiBDb21wYXJlZCB0byB2MTEs IHYxMiBzZXQgdGhlIGluaXRpYWwgdmFsdWUgdG8gMCBmb3IgdGhlIGZlbmNlIHZhbHVlLAo+ID4g Zml4aW5nIGEgcG90ZW50aWFsIGR5bmFtaWMgcG9vbCBzeW5jIGlzc3VlLiBIZW5jZSByZW1vdmVk IHRoZSBub24gemVybwo+ID4gaW5pdGlhbF9wb29sX3NpemUgZm9yCj4gPiBkM2QxMnZhIGRlY29k ZXIuIAo+ID4gCj4gPiBTb21lIG90aGVyIG1pbm9yIGVycm9yIG1lc3NhZ2UgY2hhbmdlcy4KPiA+ IAo+ID4gCj4gPiAKPiA+IMKgY29uZmlndXJlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA1ICsKPiA+IMKgZG9jL0FQSWNoYW5n ZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAg NSArCj4gPiDCoGxpYmF2dXRpbC9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgwqAgMyArCj4gPiDCoGxpYmF2dXRpbC9od2NvbnRleHQuY8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArCj4gPiDCoGxpYmF2dXRpbC9od2Nv bnRleHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gPiDC oGxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5jwqDCoMKgwqDCoMKgwqDCoMKgIHwgNzAzICsr KysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKgbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZh LmjCoMKgwqDCoMKgwqDCoMKgwqAgfCAxMzQgKysrKysKPiA+IMKgbGliYXZ1dGlsL2h3Y29udGV4 dF9kM2QxMnZhX2ludGVybmFsLmggfMKgIDU5ICsrKwo+ID4gwqBsaWJhdnV0aWwvaHdjb250ZXh0 X2ludGVybmFsLmjCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ID4gwqBsaWJhdnV0aWwvcGl4 ZGVzYy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArCj4g PiDCoGxpYmF2dXRpbC9waXhmbXQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfMKgwqAgNyArCj4gPiDCoGxpYmF2dXRpbC90ZXN0cy9od2RldmljZS5jwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKwo+ID4gwqBsaWJhdnV0aWwvdmVyc2lvbi5owqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArLQo+ID4gwqAxMyBmaWxl cyBjaGFuZ2VkLCA5MjkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4gwqBjcmVhdGUg bW9kZSAxMDA2NDQgbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMKPiA+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5oCj4gPiDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmFfaW50ZXJuYWwuaAo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gPiBpbmRleCBkNzdjMDUzMjI2Li4x YTM0M2FjNmI5IDEwMDc1NQo+ID4gLS0tIGEvY29uZmlndXJlCj4gPiArKysgYi9jb25maWd1cmUK PiA+IEBAIC0zMzYsNiArMzM2LDcgQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0Ogo+ID4gwqDC oCAtLWRpc2FibGUtY3VkYS1sbHZtwqDCoMKgwqDCoCBkaXNhYmxlIENVREEgY29tcGlsYXRpb24g dXNpbmcgY2xhbmcKPiA+IFthdXRvZGV0ZWN0XQo+ID4gwqDCoCAtLWRpc2FibGUtY3V2aWTCoMKg wqDCoMKgwqDCoMKgwqAgZGlzYWJsZSBOdmlkaWEgQ1VWSUQgc3VwcG9ydCBbYXV0b2RldGVjdF0K PiA+IMKgwqAgLS1kaXNhYmxlLWQzZDExdmHCoMKgwqDCoMKgwqDCoCBkaXNhYmxlIE1pY3Jvc29m dCBEaXJlY3QzRCAxMSB2aWRlbyBhY2NlbGVyYXRpb24KPiA+IGNvZGUgW2F1dG9kZXRlY3RdCj4g PiArwqAgLS1kaXNhYmxlLWQzZDEydmHCoMKgwqDCoMKgwqDCoCBkaXNhYmxlIE1pY3Jvc29mdCBE aXJlY3QzRCAxMiB2aWRlbyBhY2NlbGVyYXRpb24KPiA+IGNvZGUgW2F1dG9kZXRlY3RdCj4gPiDC oMKgIC0tZGlzYWJsZS1keHZhMsKgwqDCoMKgwqDCoMKgwqDCoCBkaXNhYmxlIE1pY3Jvc29mdCBE aXJlY3RYIDkgdmlkZW8gYWNjZWxlcmF0aW9uCj4gPiBjb2RlIFthdXRvZGV0ZWN0XQo+ID4gwqDC oCAtLWRpc2FibGUtZmZudmNvZGVjwqDCoMKgwqDCoCBkaXNhYmxlIGR5bmFtaWNhbGx5IGxpbmtl ZCBOdmlkaWEgY29kZQo+ID4gW2F1dG9kZXRlY3RdCj4gPiDCoMKgIC0tZW5hYmxlLWxpYmRybcKg wqDCoMKgwqDCoMKgwqDCoCBlbmFibGUgRFJNIGNvZGUgKExpbnV4KSBbbm9dCj4gPiBAQCAtMTky Niw2ICsxOTI3LDcgQEAgSFdBQ0NFTF9BVVRPREVURUNUX0xJQlJBUllfTElTVD0iCj4gPiDCoMKg wqDCoCBjdWRhX2xsdm0KPiA+IMKgwqDCoMKgIGN1dmlkCj4gPiDCoMKgwqDCoCBkM2QxMXZhCj4g PiArwqDCoMKgIGQzZDEydmEKPiA+IMKgwqDCoMKgIGR4dmEyCj4gPiDCoMKgwqDCoCBmZm52Y29k ZWMKPiA+IMKgwqDCoMKgIG52ZGVjCj4gPiBAQCAtMzA0OCw2ICszMDUwLDcgQEAgY3J5c3RhbGhk X2RlcHM9ImxpYmNyeXN0YWxoZF9saWJjcnlzdGFsaGRfaWZfaCIKPiA+IMKgY3VkYV9kZXBzPSJm Zm52Y29kZWMiCj4gPiDCoGN1dmlkX2RlcHM9ImZmbnZjb2RlYyIKPiA+IMKgZDNkMTF2YV9kZXBz PSJkeHZhX2ggSUQzRDExVmlkZW9EZWNvZGVyIElEM0QxMVZpZGVvQ29udGV4dCIKPiA+ICtkM2Qx MnZhX2RlcHM9ImR4dmFfaCBJRDNEMTJEZXZpY2UgSUQzRDEyVmlkZW9EZWNvZGVyIgo+ID4gwqBk eHZhMl9kZXBzPSJkeHZhMmFwaV9oIERYVkEyX0NvbmZpZ1BpY3R1cmVEZWNvZGUgb2xlMzIgdXNl cjMyIgo+ID4gwqBmZm52Y29kZWNfZGVwc19hbnk9ImxpYmRsIExvYWRMaWJyYXJ5Igo+ID4gwqBt ZWRpYWNvZGVjX2RlcHM9ImFuZHJvaWQiCj4gPiBAQCAtNjU3NSw2ICs2NTc4LDggQEAgY2hlY2tf dHlwZSAid2luZG93cy5oIGR4Z2kxXzIuaCIgIklEWEdJT3V0cHV0MSIKPiA+IMKgY2hlY2tfdHlw ZSAid2luZG93cy5oIGR4Z2kxXzUuaCIgIklEWEdJT3V0cHV0NSIKPiA+IMKgY2hlY2tfdHlwZSAi d2luZG93cy5oIGQzZDExLmgiICJJRDNEMTFWaWRlb0RlY29kZXIiCj4gPiDCoGNoZWNrX3R5cGUg IndpbmRvd3MuaCBkM2QxMS5oIiAiSUQzRDExVmlkZW9Db250ZXh0Igo+ID4gK2NoZWNrX3R5cGUg IndpbmRvd3MuaCBkM2QxMi5oIiAiSUQzRDEyRGV2aWNlIgo+ID4gK2NoZWNrX3R5cGUgIndpbmRv d3MuaCBkM2QxMnZpZGVvLmgiICJJRDNEMTJWaWRlb0RlY29kZXIiCj4gPiDCoGNoZWNrX3R5cGUg IndpbmRvd3MuaCIgIkRQSV9BV0FSRU5FU1NfQ09OVEVYVCIgLURfV0lOMzJfV0lOTlQ9MHgwQTAw Cj4gPiDCoGNoZWNrX3R5cGUgImQzZDkuaCBkeHZhMmFwaS5oIiBEWFZBMl9Db25maWdQaWN0dXJl RGVjb2RlIC0KPiA+IERfV0lOMzJfV0lOTlQ9MHgwNjAyCj4gPiDCoGNoZWNrX2Z1bmNfaGVhZGVy cyBtZmFwaS5oIE1GQ3JlYXRlQWxpZ25lZE1lbW9yeUJ1ZmZlciAtbG1mcGxhdAo+ID4gZGlmZiAt LWdpdCBhL2RvYy9BUEljaGFuZ2VzIGIvZG9jL0FQSWNoYW5nZXMKPiA+IGluZGV4IDRhMmRjMWM0 NGYuLjA0MzU5MjZkODAgMTAwNjQ0Cj4gPiAtLS0gYS9kb2MvQVBJY2hhbmdlcwo+ID4gKysrIGIv ZG9jL0FQSWNoYW5nZXMKPiA+IEBAIC0yLDYgKzIsMTEgQEAgVGhlIGxhc3QgdmVyc2lvbiBpbmNy ZWFzZXMgb2YgYWxsIGxpYnJhcmllcyB3ZXJlIG9uIDIwMjMtCj4gPiAwMi0KPiA+IDA5Cj4gPiDC oAo+ID4gwqBBUEkgY2hhbmdlcywgbW9zdCByZWNlbnQgZmlyc3Q6Cj4gPiDCoAo+ID4gKzIwMjMt MTEtMDcgLSB4eHh4eHh4eHh4IC0gbGF2dSA1OC4zMy4xMDAgLSBwaXhmbXQuaCBod2NvbnRleHQu aAo+ID4gaHdjb250ZXh0X2QzZDEydmEuaAo+ID4gK8KgIEFkZCBBVl9IV0RFVklDRV9UWVBFX0Qz RDEyVkEgYW5kIEFWX1BJWF9GTVRfRDNEMTIuCj4gPiArwqAgQWRkIEFWRDNEMTJWQURldmljZUNv bnRleHQsIEFWRDNEMTJWQVN5bmNDb250ZXh0LCBBVkQzRDEyVkFGcmFtZSBhbmQKPiA+ICvCoCBB VkQzRDEyVkFGcmFtZXNDb250ZXh0Lgo+ID4gKwo+ID4gwqAyMDIzLTExLTA4IC0gYjgyOTU3YTY2 YTcgLSBsYXZ1IDU4LjMyLjEwMCAtIGNoYW5uZWxfbGF5b3V0LmgKPiA+IMKgwqAgQWRkIEFWX0NI X0xBWU9VVF83UE9JTlQyUE9JTlQzIGFuZCBBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQyUE9JTlQz Lgo+ID4gwqDCoCBBZGQgQVZfQ0hfTEFZT1VUXzlQT0lOVDFQT0lOVDRfQkFDSyBhbmQKPiA+IEFW X0NIQU5ORUxfTEFZT1VUXzlQT0lOVDFQT0lOVDRfQkFDSy4KPiA+IGRpZmYgLS1naXQgYS9saWJh dnV0aWwvTWFrZWZpbGUgYi9saWJhdnV0aWwvTWFrZWZpbGUKPiA+IGluZGV4IDQ3MTFmOGNkZTgu LjZhODU2NmYxZDkgMTAwNjQ0Cj4gPiAtLS0gYS9saWJhdnV0aWwvTWFrZWZpbGUKPiA+ICsrKyBi L2xpYmF2dXRpbC9NYWtlZmlsZQo+ID4gQEAgLTQyLDYgKzQyLDcgQEAgSEVBREVSUyA9Cj4gPiBh ZGxlcjMyLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBc Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2NvbnRleHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdjb250 ZXh0X2N1ZGEuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoCBod2NvbnRleHRfZDNkMTF2YS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgaHdjb250ZXh0X2QzZDEydmEuaMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2NvbnRleHRf ZHJtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoCBod2NvbnRleHRfZHh2YTIuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgXAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdjb250ZXh0X3Fzdi5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ID4gQEAgLTE5MCw2ICsxOTEsNyBAQCBPQkpTID0K PiA+IGFkbGVyMzIub8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFwKPiA+IMKgCj4gPiDCoE9CSlMtJChDT05GSUdfQ1VEQSnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9jdWRhLm8KPiA+IMKgT0JK Uy0kKENPTkZJR19EM0QxMVZBKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0g aHdjb250ZXh0X2QzZDExdmEubwo+ID4gK09CSlMtJChDT05GSUdfRDNEMTJWQSnCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9kM2QxMnZhLm8KPiA+IMKgT0JK Uy0kKENPTkZJR19EWFZBMinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAr PSBod2NvbnRleHRfZHh2YTIubwo+ID4gwqBPQkpTLSQoQ09ORklHX0xJQkRSTSnCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2RybS5vCj4gPiDCoE9CSlMt JChDT05GSUdfTUFDT1NfS1BFUkYpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gbWFjb3Nf a3BlcmYubwo+ID4gQEAgLTIxMyw2ICsyMTUsNyBAQCBTS0lQSEVBREVSUy0kKEhBVkVfQ1VEQV9I KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPQo+ID4gaHdjb250ZXh0X2N1ZGEuaAo+ID4gwqBT S0lQSEVBREVSUy0kKENPTkZJR19DVURBKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2Nv bnRleHRfY3VkYV9pbnRlcm5hbC5owqDCoMKgwqAgXAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGN1ZGFfY2hlY2suaAo+ID4gwqBTS0lQSEVBREVSUy0kKENPTkZJR19EM0QxMVZBKcKg wqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfZDNkMTF2YS5oCj4gPiArU0tJUEhFQURFUlMt JChDT05GSUdfRDNEMTJWQSnCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2QzZDEydmEu aAo+ID4gwqBTS0lQSEVBREVSUy0kKENPTkZJR19EWFZBMinCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICs9IGh3Y29udGV4dF9keHZhMi5oCj4gPiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX1FTVinCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfcXN2LmgKPiA+IMKgU0tJUEhFQURF UlMtJChDT05GSUdfT1BFTkNMKcKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9vcGVu Y2wuaAo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9od2NvbnRleHQuYyBiL2xpYmF2dXRpbC9o d2NvbnRleHQuYwo+ID4gaW5kZXggMzY1MGQ0NjUzYS4uZTIzYmFkMjMwZiAxMDA2NDQKPiA+IC0t LSBhL2xpYmF2dXRpbC9od2NvbnRleHQuYwo+ID4gKysrIGIvbGliYXZ1dGlsL2h3Y29udGV4dC5j Cj4gPiBAQCAtMzYsNiArMzYsOSBAQCBzdGF0aWMgY29uc3QgSFdDb250ZXh0VHlwZSAqIGNvbnN0 IGh3X3RhYmxlW10gPSB7Cj4gPiDCoCNpZiBDT05GSUdfRDNEMTFWQQo+ID4gwqDCoMKgwqAgJmZm X2h3Y29udGV4dF90eXBlX2QzZDExdmEsCj4gPiDCoCNlbmRpZgo+ID4gKyNpZiBDT05GSUdfRDNE MTJWQQo+ID4gK8KgwqDCoCAmZmZfaHdjb250ZXh0X3R5cGVfZDNkMTJ2YSwKPiA+ICsjZW5kaWYK PiA+IMKgI2lmIENPTkZJR19MSUJEUk0KPiA+IMKgwqDCoMKgICZmZl9od2NvbnRleHRfdHlwZV9k cm0sCj4gPiDCoCNlbmRpZgo+ID4gQEAgLTcxLDYgKzc0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIg KmNvbnN0IGh3X3R5cGVfbmFtZXNbXSA9IHsKPiA+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBF X0RSTV3CoMKgwqAgPSAiZHJtIiwKPiA+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX0RYVkEy XcKgID0gImR4dmEyIiwKPiA+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX0QzRDExVkFdID0g ImQzZDExdmEiLAo+ID4gK8KgwqDCoCBbQVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBXSA9ICJkM2Qx MnZhIiwKPiA+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX09QRU5DTF0gPSAib3BlbmNsIiwK PiA+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX1FTVl3CoMKgwqAgPSAicXN2IiwKPiA+IMKg wqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX1ZBQVBJXcKgID0gInZhYXBpIiwKPiA+IGRpZmYgLS1n aXQgYS9saWJhdnV0aWwvaHdjb250ZXh0LmggYi9saWJhdnV0aWwvaHdjb250ZXh0LmgKPiA+IGlu ZGV4IDdmZjA4Yzg2MDguLjJiMzM3MjFhOTcgMTAwNjQ0Cj4gPiAtLS0gYS9saWJhdnV0aWwvaHdj b250ZXh0LmgKPiA+ICsrKyBiL2xpYmF2dXRpbC9od2NvbnRleHQuaAo+ID4gQEAgLTM3LDYgKzM3 LDcgQEAgZW51bSBBVkhXRGV2aWNlVHlwZSB7Cj4gPiDCoMKgwqDCoCBBVl9IV0RFVklDRV9UWVBF X09QRU5DTCwKPiA+IMKgwqDCoMKgIEFWX0hXREVWSUNFX1RZUEVfTUVESUFDT0RFQywKPiA+IMKg wqDCoMKgIEFWX0hXREVWSUNFX1RZUEVfVlVMS0FOLAo+ID4gK8KgwqDCoCBBVl9IV0RFVklDRV9U WVBFX0QzRDEyVkEsCj4gPiDCoH07Cj4gPiDCoAo+ID4gwqB0eXBlZGVmIHN0cnVjdCBBVkhXRGV2 aWNlSW50ZXJuYWwgQVZIV0RldmljZUludGVybmFsOwo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2dXRp bC9od2NvbnRleHRfZDNkMTJ2YS5jIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMKPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi4xNjAwZDk0Y2IwCj4g PiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuYwo+ ID4gQEAgLTAsMCArMSw3MDMgQEAKPiA+ICsvKgo+ID4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2Vs ZXJhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIGNvcHlyaWdodCAoYykgMjAyMi0yMDIzIFd1IEppYW5o dWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KPiA+ICsgKgo+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiA+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gPiArICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS7CoCBTZWUgdGhlIEdO VQo+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4gPiArICoKPiA+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMQo+ID4gVVNBCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgImNvbmZpZy5oIgo+ID4g KyNpbmNsdWRlICJjb21tb24uaCIKPiA+ICsjaW5jbHVkZSAiaHdjb250ZXh0LmgiCj4gPiArI2lu Y2x1ZGUgImh3Y29udGV4dF9pbnRlcm5hbC5oIgo+ID4gKyNpbmNsdWRlICJod2NvbnRleHRfZDNk MTJ2YV9pbnRlcm5hbC5oIgo+ID4gKyNpbmNsdWRlICJod2NvbnRleHRfZDNkMTJ2YS5oIgo+ID4g KyNpbmNsdWRlICJpbWd1dGlscy5oIgo+ID4gKyNpbmNsdWRlICJwaXhkZXNjLmgiCj4gPiArI2lu Y2x1ZGUgInBpeGZtdC5oIgo+ID4gKyNpbmNsdWRlICJ0aHJlYWQuaCIKPiA+ICsjaW5jbHVkZSAi Y29tcGF0L3czMmRsZmNuLmgiCj4gPiArI2luY2x1ZGUgPGR4Z2kxXzMuaD4KPiA+ICsKPiA+ICt0 eXBlZGVmIEhSRVNVTFQoV0lOQVBJICpQRk5fQ1JFQVRFX0RYR0lfRkFDVE9SWTIpKFVJTlQgRmxh Z3MsIFJFRklJRCByaWlkLAo+ID4gdm9pZCAqKnBwRmFjdG9yeSk7Cj4gPiArCj4gPiArdHlwZWRl ZiBzdHJ1Y3QgRDNEMTJWQUZyYW1lc0NvbnRleHQgewo+ID4gK8KgwqDCoCBJRDNEMTJSZXNvdXJj ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnN0YWdpbmdfZG93bmxvYWRfYnVmZmVyOwo+ID4gK8Kg wqDCoCBJRDNEMTJSZXNvdXJjZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnN0YWdpbmdfdXBsb2Fk X2J1ZmZlcjsKPiA+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVlwqDCoMKgwqDCoMKgwqAgKmNv bW1hbmRfcXVldWU7Cj4gPiArwqDCoMKgIElEM0QxMkNvbW1hbmRBbGxvY2F0b3LCoMKgwqAgKmNv bW1hbmRfYWxsb2NhdG9yOwo+ID4gK8KgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0ICpj b21tYW5kX2xpc3Q7Cj4gPiArwqDCoMKgIEFWRDNEMTJWQVN5bmNDb250ZXh0wqDCoMKgwqDCoMKg IHN5bmNfY3R4Owo+ID4gK8KgwqDCoCBVSU5UwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbHVtYV9jb21wb25lbnRfc2l6ZTsKPiA+ICt9IEQzRDEyVkFGcmFtZXND b250ZXh0Owo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IEQzRDEyVkFEZXZpY2VQcml2IHsKPiA+ ICvCoMKgwqAgSEFORExFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkM2QxMmxpYjsKPiA+ICvCoMKgwqAgSEFORExFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkeGdpbGliOwo+ID4gK8KgwqDCoCBQRk5fQ1JFQVRFX0RY R0lfRkFDVE9SWTLCoMKgwqDCoMKgIGNyZWF0ZV9keGdpX2ZhY3RvcnkyOwo+ID4gK8KgwqDCoCBQ Rk5fRDNEMTJfQ1JFQVRFX0RFVklDRcKgwqDCoMKgwqDCoCBjcmVhdGVfZGV2aWNlOwo+ID4gK8Kg wqDCoCBQRk5fRDNEMTJfR0VUX0RFQlVHX0lOVEVSRkFDRSBnZXRfZGVidWdfaW50ZXJmYWNlOwo+ ID4gK30gRDNEMTJWQURldmljZVByaXY7Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB7 Cj4gPiArwqDCoMKgIERYR0lfRk9STUFUIGQzZF9mb3JtYXQ7Cj4gPiArwqDCoMKgIGVudW0gQVZQ aXhlbEZvcm1hdCBwaXhfZm10Owo+ID4gK30gc3VwcG9ydGVkX2Zvcm1hdHNbXSA9IHsKPiA+ICvC oMKgwqAgeyBEWEdJX0ZPUk1BVF9OVjEyLCBBVl9QSVhfRk1UX05WMTIgfSwKPiA+ICvCoMKgwqAg eyBEWEdJX0ZPUk1BVF9QMDEwLCBBVl9QSVhfRk1UX1AwMTAgfSwKPiA+ICt9Owo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIGQzZDEydmFfZGVmYXVsdF9sb2NrKHZvaWQgKmN0eCkKPiA+ICt7Cj4gPiAr wqDCoMKgIFdhaXRGb3JTaW5nbGVPYmplY3RFeChjdHgsIElORklOSVRFLCBGQUxTRSk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGQzZDEydmFfZGVmYXVsdF91bmxvY2sodm9pZCAqY3R4 KQo+ID4gK3sKPiA+ICvCoMKgwqAgUmVsZWFzZU11dGV4KGN0eCk7Cj4gPiArfQo+ID4gKwo+ID4g K0RYR0lfRk9STUFUIGF2X2QzZDEydmFfbWFwX3N3X3RvX2h3X2Zvcm1hdChlbnVtIEFWUGl4ZWxG b3JtYXQgcGl4X2ZtdCkKPiA+ICt7Cj4gPiArwqDCoMKgIHN3aXRjaCAocGl4X2ZtdCkgewo+ID4g K8KgwqDCoCBjYXNlIEFWX1BJWF9GTVRfTlYxMjpyZXR1cm4gRFhHSV9GT1JNQVRfTlYxMjsKPiA+ ICvCoMKgwqAgY2FzZSBBVl9QSVhfRk1UX1AwMTA6cmV0dXJuIERYR0lfRk9STUFUX1AwMTA7Cj4g PiArwqDCoMKgIGRlZmF1bHQ6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBEWEdJX0ZP Uk1BVF9VTktOT1dOOwo+ID4gK8KgwqDCoCB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg ZDNkMTJ2YV9mZW5jZV9jb21wbGV0aW9uKEFWRDNEMTJWQVN5bmNDb250ZXh0ICpwc3luY19jdHgp Cj4gPiArewo+ID4gK8KgwqDCoCB1aW50NjRfdCBjb21wbGV0aW9uID0gSUQzRDEyRmVuY2VfR2V0 Q29tcGxldGVkVmFsdWUocHN5bmNfY3R4LT5mZW5jZSk7Cj4gPiArwqDCoMKgIGlmIChjb21wbGV0 aW9uIDwgcHN5bmNfY3R4LT5mZW5jZV92YWx1ZSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgIGlmIChG QUlMRUQoSUQzRDEyRmVuY2VfU2V0RXZlbnRPbkNvbXBsZXRpb24ocHN5bmNfY3R4LT5mZW5jZSwK PiA+IHBzeW5jX2N0eC0+ZmVuY2VfdmFsdWUsIHBzeW5jX2N0eC0+ZXZlbnQpKSkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqAgV2FpdEZvclNpbmdsZU9iamVjdEV4KHBzeW5jX2N0eC0+ZXZlbnQsIElORklO SVRFLCBGQUxTRSk7Cj4gPiArwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IGQzZDEydmFfd2FpdF9xdWV1ZV9pZGxl KEFWRDNEMTJWQVN5bmNDb250ZXh0ICpwc3luY19jdHgsCj4gPiBJRDNEMTJDb21tYW5kUXVldWUg KmNvbW1hbmRfcXVldWUpCj4gPiArewo+ID4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21tYW5k UXVldWVfU2lnbmFsKGNvbW1hbmRfcXVldWUsIHBzeW5jX2N0eC0+ZmVuY2UsCj4gPiArK3BzeW5j X2N0eC0+ZmVuY2VfdmFsdWUpKTsKPiA+ICvCoMKgwqAgcmV0dXJuIGQzZDEydmFfZmVuY2VfY29t cGxldGlvbihwc3luY19jdHgpOwo+ID4gKwo+ID4gK2ZhaWw6Cj4gPiArwqDCoMKgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9jcmVh dGVfc3RhZ2luZ19idWZmZXJfcmVzb3VyY2UoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCwKPiA+IEQz RDEyX1JFU09VUkNFX1NUQVRFUyBzdGF0ZXMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgSUQzRDEyUmVzb3VyY2UKPiA+ICoqcHBSZXNvdXJjZSwgaW50IGRv d25sb2FkKQo+ID4gK3sKPiA+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNl X2h3Y3R4ID0gY3R4LT5kZXZpY2VfY3R4LT5od2N0eDsKPiA+ICvCoMKgwqAgRDNEMTJWQUZyYW1l c0NvbnRleHTCoMKgICpzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnBy aXY7Cj4gPiArwqDCoMKgIEQzRDEyX0hFQVBfUFJPUEVSVElFUyBwcm9wcyA9IHsgLlR5cGUgPSBk b3dubG9hZCA/Cj4gPiBEM0QxMl9IRUFQX1RZUEVfUkVBREJBQ0sgOiBEM0QxMl9IRUFQX1RZUEVf VVBMT0FEIH07Cj4gPiArwqDCoMKgIEQzRDEyX1JFU09VUkNFX0RFU0MgZGVzYyA9IHsKPiA+ICvC oMKgwqDCoMKgwqDCoCAuRGltZW5zaW9uwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfUkVTT1VS Q0VfRElNRU5TSU9OX0JVRkZFUiwKPiA+ICvCoMKgwqDCoMKgwqDCoCAuQWxpZ25tZW50wqDCoMKg wqDCoMKgwqDCoMKgID0gMCwKPiA+ICvCoMKgwqDCoMKgwqDCoCAuV2lkdGjCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IHMtPmx1bWFfY29tcG9uZW50X3NpemUgKyAocy0KPiA+ID4gbHVtYV9j b21wb25lbnRfc2l6ZSA+PiAxKSwKPiA+ICvCoMKgwqDCoMKgwqDCoCAuSGVpZ2h0wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgID0gMSwKPiA+ICvCoMKgwqDCoMKgwqDCoCAuRGVwdGhPckFycmF5U2l6 ZcKgwqAgPSAxLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5NaXBMZXZlbHPCoMKgwqDCoMKgwqDCoMKg wqAgPSAxLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5Gb3JtYXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgPSBEWEdJX0ZPUk1BVF9VTktOT1dOLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNj wqDCoMKgwqDCoMKgwqDCoCA9IHsgLkNvdW50ID0gMSwgLlF1YWxpdHkgPSAwIH0sCj4gPiArwqDC oMKgwqDCoMKgwqAgLkxheW91dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEQzRDEyX1RFWFRV UkVfTEFZT1VUX1JPV19NQUpPUiwKPiA+ICvCoMKgwqDCoMKgwqDCoCAuRmxhZ3PCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA9IEQzRDEyX1JFU09VUkNFX0ZMQUdfTk9ORSwKPiA+ICvCoMKgwqAg fTsKPiA+ICsKPiA+ICvCoMKgwqAgaWYgKEZBSUxFRChJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWl0 dGVkUmVzb3VyY2UoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsCj4gPiAmcHJvcHMsIEQzRDEyX0hFQVBf RkxBR19OT05FLCAmZGVzYywKPiA+ICvCoMKgwqDCoMKgwqDCoCBzdGF0ZXMsIE5VTEwsICZJSURf SUQzRDEyUmVzb3VyY2UsICh2b2lkICoqKXBwUmVzb3VyY2UpKSkgewo+ID4gK8KgwqDCoMKgwqDC oMKgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIHN0YWdp bmcgYnVmZmVyCj4gPiByZXNvdXJjZVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFW RVJST1JfVU5LTk9XTjsKPiA+ICvCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoCByZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkM2QxMnZhX2NyZWF0ZV9oZWxwZXJfb2JqZWN0 cyhBVkhXRnJhbWVzQ29udGV4dCAqY3R4KQo+ID4gK3sKPiA+ICvCoMKgwqAgQVZEM0QxMlZBRGV2 aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gY3R4LT5kZXZpY2VfY3R4LT5od2N0eDsKPiA+ICvC oMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3Y3R4ID0gY3R4LT5od2N0eDsK PiA+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHTCoMKgICpzwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gPiArCj4gPiArwqDCoMKgIEQzRDEyX0NPTU1B TkRfUVVFVUVfREVTQyBxdWV1ZV9kZXNjID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDC oMKgwqAgPSBEM0QxMl9DT01NQU5EX0xJU1RfVFlQRV9DT1BZLAo+ID4gK8KgwqDCoMKgwqDCoMKg IC5Qcmlvcml0eSA9IDAsCj4gPiArwqDCoMKgwqDCoMKgwqAgLk5vZGVNYXNrID0gMCwKPiA+ICvC oMKgwqAgfTsKPiA+ICsKPiA+ICvCoMKgwqAgcy0+bHVtYV9jb21wb25lbnRfc2l6ZSA9IEZGQUxJ R04oY3R4LT53aWR0aCAqIChmcmFtZXNfaHdjdHgtPmZvcm1hdCA9PQo+ID4gRFhHSV9GT1JNQVRf UDAxMCA/IDIgOiAxKSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJfVEVYVFVSRV9EQVRBX1BJ VENIX0FMSUdOTUVOVCkgKgo+ID4gY3R4LT5oZWlnaHQ7Cj4gPiArCj4gPiArwqDCoMKgIERYX0NI RUNLKElEM0QxMkRldmljZV9DcmVhdGVGZW5jZShkZXZpY2VfaHdjdHgtPmRldmljZSwgMCwKPiA+ IEQzRDEyX0ZFTkNFX0ZMQUdfTk9ORSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmSUlEX0lEM0Qx MkZlbmNlLCAodm9pZCAqKikmcy0KPiA+ID4gc3luY19jdHguZmVuY2UpKTsKPiA+ICsKPiA+ICvC oMKgwqAgcy0+c3luY19jdHguZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0Us IE5VTEwpOwo+ID4gK8KgwqDCoCBpZiAoIXMtPnN5bmNfY3R4LmV2ZW50KQo+ID4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gZmFpbDsKPiA+ICsKPiA+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyRGV2aWNl X0NyZWF0ZUNvbW1hbmRRdWV1ZShkZXZpY2VfaHdjdHgtPmRldmljZSwKPiA+ICZxdWV1ZV9kZXNj LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmSUlEX0lEM0QxMkNvbW1hbmRRdWV1ZSwg KHZvaWQgKiopJnMtPmNvbW1hbmRfcXVldWUpKTsKPiA+ICsKPiA+ICvCoMKgwqAgRFhfQ0hFQ0so SUQzRDEyRGV2aWNlX0NyZWF0ZUNvbW1hbmRBbGxvY2F0b3IoZGV2aWNlX2h3Y3R4LT5kZXZpY2Us Cj4gPiBxdWV1ZV9kZXNjLlR5cGUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZJSURf SUQzRDEyQ29tbWFuZEFsbG9jYXRvciwgKHZvaWQgKiopJnMtPmNvbW1hbmRfYWxsb2NhdG9yKSk7 Cj4gPiArCj4gPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVDb21tYW5kTGlz dChkZXZpY2VfaHdjdHgtPmRldmljZSwgMCwKPiA+IHF1ZXVlX2Rlc2MuVHlwZSwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+Y29tbWFuZF9hbGxvY2F0b3IsIE5VTEwsICZJSURfSUQz RDEyR3JhcGhpY3NDb21tYW5kTGlzdCwKPiA+ICh2b2lkICoqKSZzLT5jb21tYW5kX2xpc3QpKTsK PiA+ICsKPiA+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9DbG9z ZShzLT5jb21tYW5kX2xpc3QpKTsKPiA+ICsKPiA+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVl X0V4ZWN1dGVDb21tYW5kTGlzdHMocy0+Y29tbWFuZF9xdWV1ZSwgMSwKPiA+IChJRDNEMTJDb21t YW5kTGlzdCAqKikmcy0+Y29tbWFuZF9saXN0KTsKPiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJuIGQz ZDEydmFfd2FpdF9xdWV1ZV9pZGxlKCZzLT5zeW5jX2N0eCwgcy0+Y29tbWFuZF9xdWV1ZSk7Cj4g PiArCj4gPiArZmFpbDoKPiA+ICvCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZDNkMTJ2YV9mcmFtZXNfdW5pbml0KEFWSFdGcmFtZXND b250ZXh0ICpjdHgpCj4gPiArewo+ID4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICpm cmFtZXNfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ID4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4 dMKgwqAgKnPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5pbnRlcm5hbC0+cHJpdjsKPiA+ ICsKPiA+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0Uocy0+c3luY19jdHguZmVuY2UpOwo+ ID4gK8KgwqDCoCBpZiAocy0+c3luY19jdHguZXZlbnQpCj4gPiArwqDCoMKgwqDCoMKgwqAgQ2xv c2VIYW5kbGUocy0+c3luY19jdHguZXZlbnQpOwo+ID4gKwo+ID4gK8KgwqDCoCBEM0QxMl9PQkpF Q1RfUkVMRUFTRShzLT5zdGFnaW5nX2Rvd25sb2FkX2J1ZmZlcik7Cj4gPiArwqDCoMKgIEQzRDEy X09CSkVDVF9SRUxFQVNFKHMtPnN0YWdpbmdfdXBsb2FkX2J1ZmZlcik7Cj4gPiArwqDCoMKgIEQz RDEyX09CSkVDVF9SRUxFQVNFKHMtPmNvbW1hbmRfYWxsb2NhdG9yKTsKPiA+ICvCoMKgwqAgRDNE MTJfT0JKRUNUX1JFTEVBU0Uocy0+Y29tbWFuZF9saXN0KTsKPiA+ICvCoMKgwqAgRDNEMTJfT0JK RUNUX1JFTEVBU0Uocy0+Y29tbWFuZF9xdWV1ZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgZDNkMTJ2YV9mcmFtZXNfZ2V0X2NvbnN0cmFpbnRzKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgs IGNvbnN0Cj4gPiB2b2lkCj4gPiAqaHdjb25maWcsIEFWSFdGcmFtZXNDb25zdHJhaW50cyAqY29u c3RyYWludHMpCj4gPiArewo+ID4gK8KgwqDCoCBIUkVTVUxUIGhyOwo+ID4gK8KgwqDCoCBpbnQg bmJfc3dfZm9ybWF0cyA9IDA7Cj4gPiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQgKmRl dmljZV9od2N0eCA9IGN0eC0+aHdjdHg7Cj4gPiArCj4gPiArwqDCoMKgIGNvbnN0cmFpbnRzLT52 YWxpZF9zd19mb3JtYXRzID0KPiA+IGF2X21hbGxvY19hcnJheShGRl9BUlJBWV9FTEVNUyhzdXBw b3J0ZWRfZm9ybWF0cykgKyAxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzaXplb2YoKmNvbnN0cmFpbnRzLQo+ID4gPiB2YWxpZF9zd19mb3JtYXRz KSk7Cj4gPiArwqDCoMKgIGlmICghY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHMpCj4gPiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsKPiA+ICvCoMKgwqAg Zm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzdXBwb3J0ZWRfZm9ybWF0cyk7IGkr Kykgewo+ID4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX0ZFQVRVUkVfREFUQV9GT1JNQVRfU1VQUE9S VCBmb3JtYXRfc3VwcG9ydCA9IHsKPiA+IHN1cHBvcnRlZF9mb3JtYXRzW2ldLmQzZF9mb3JtYXQg fTsKPiA+ICvCoMKgwqDCoMKgwqDCoCBociA9IElEM0QxMkRldmljZV9DaGVja0ZlYXR1cmVTdXBw b3J0KGRldmljZV9od2N0eC0+ZGV2aWNlLAo+ID4gRDNEMTJfRkVBVFVSRV9GT1JNQVRfU1VQUE9S VCwgJmZvcm1hdF9zdXBwb3J0LCBzaXplb2YoZm9ybWF0X3N1cHBvcnQpKTsKPiA+ICvCoMKgwqDC oMKgwqDCoCBpZiAoU1VDQ0VFREVEKGhyKSAmJiAoZm9ybWF0X3N1cHBvcnQuU3VwcG9ydDEgJgo+ ID4gRDNEMTJfRk9STUFUX1NVUFBPUlQxX1RFWFRVUkUyRCkpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0c1tuYl9zd19mb3JtYXRzKytdID0K PiA+IHN1cHBvcnRlZF9mb3JtYXRzW2ldLnBpeF9mbXQ7Cj4gPiArwqDCoMKgIH0KPiA+ICvCoMKg wqAgY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHNbbmJfc3dfZm9ybWF0c10gPSBBVl9QSVhf Rk1UX05PTkU7Cj4gPiArCj4gPiArwqDCoMKgIGNvbnN0cmFpbnRzLT52YWxpZF9od19mb3JtYXRz ID0gYXZfbWFsbG9jX2FycmF5KDIsIHNpemVvZigqY29uc3RyYWludHMtCj4gPiA+IHZhbGlkX2h3 X2Zvcm1hdHMpKTsKPiA+ICvCoMKgwqAgaWYgKCFjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0 cykKPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKwo+ID4g K8KgwqDCoCBjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0c1swXSA9IEFWX1BJWF9GTVRfRDNE MTI7Cj4gPiArwqDCoMKgIGNvbnN0cmFpbnRzLT52YWxpZF9od19mb3JtYXRzWzFdID0gQVZfUElY X0ZNVF9OT05FOwo+ID4gKwo+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgZnJlZV90ZXh0dXJlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkKPiA+ ICt7Cj4gPiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lICpmcmFtZSA9IChBVkQzRDEyVkFGcmFtZSAq KWRhdGE7Cj4gPiArCj4gPiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGZyYW1lLT50ZXh0 dXJlKTsKPiA+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoZnJhbWUtPnN5bmNfY3R4LmZl bmNlKTsKPiA+ICvCoMKgwqAgaWYgKGZyYW1lLT5zeW5jX2N0eC5ldmVudCkKPiA+ICvCoMKgwqDC oMKgwqDCoCBDbG9zZUhhbmRsZShmcmFtZS0+c3luY19jdHguZXZlbnQpOwo+ID4gKwo+ID4gK8Kg wqDCoCBhdl9mcmVlcCgmZGF0YSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBBVkJ1ZmZlclJl ZiAqZDNkMTJ2YV9wb29sX2FsbG9jKHZvaWQgKm9wYXF1ZSwgc2l6ZV90IHNpemUpCj4gPiArewo+ ID4gK8KgwqDCoCBBVkhXRnJhbWVzQ29udGV4dMKgwqDCoMKgwqAgKmN0eMKgwqDCoMKgwqDCoMKg wqDCoCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKW9wYXF1ZTsKPiA+ICvCoMKgwqAgQVZEM0QxMlZB RnJhbWVzQ29udGV4dCAqaHdjdHjCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aHdjdHg7Cj4gPiArwqDC oMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQgKmRldmljZV9od2N0eCA9IGN0eC0+ZGV2aWNlX2N0 eC0+aHdjdHg7Cj4gPiArCj4gPiArwqDCoMKgIEFWQnVmZmVyUmVmICpidWY7Cj4gPiArwqDCoMKg IEFWRDNEMTJWQUZyYW1lICpmcmFtZTsKPiA+ICvCoMKgwqAgRDNEMTJfSEVBUF9QUk9QRVJUSUVT IHByb3BzID0geyAuVHlwZSA9IEQzRDEyX0hFQVBfVFlQRV9ERUZBVUxUIH07Cj4gPiArwqDCoMKg IEQzRDEyX1JFU09VUkNFX0RFU0MgZGVzYyA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoCAuRGltZW5z aW9uwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9SRVNPVVJDRV9ESU1FTlNJT05fVEVYVFVSRTJELAo+ ID4gK8KgwqDCoMKgwqDCoMKgIC5BbGlnbm1lbnTCoMKgwqDCoMKgwqDCoCA9IDAsCj4gPiArwqDC oMKgwqDCoMKgwqAgLldpZHRowqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+d2lkdGgsCj4g PiArwqDCoMKgwqDCoMKgwqAgLkhlaWdodMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5oZWln aHQsCj4gPiArwqDCoMKgwqDCoMKgwqAgLkRlcHRoT3JBcnJheVNpemUgPSAxLAo+ID4gK8KgwqDC oMKgwqDCoMKgIC5NaXBMZXZlbHPCoMKgwqDCoMKgwqDCoCA9IDEsCj4gPiArwqDCoMKgwqDCoMKg wqAgLkZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gaHdjdHgtPmZvcm1hdCwKPiA+ICvCoMKg wqDCoMKgwqDCoCAuU2FtcGxlRGVzY8KgwqDCoMKgwqDCoCA9IHsuQ291bnQgPSAxLCAuUXVhbGl0 eSA9IDAgfSwKPiA+ICvCoMKgwqDCoMKgwqDCoCAuTGF5b3V0wqDCoMKgwqDCoMKgwqDCoMKgwqAg PSBEM0QxMl9URVhUVVJFX0xBWU9VVF9VTktOT1dOLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5GbGFn c8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9SRVNPVVJDRV9GTEFHX05PTkUsCj4gPiAr wqDCoMKgIH07Cj4gPiArCj4gPiArwqDCoMKgIGZyYW1lID0gYXZfbWFsbG9jeihzaXplb2YoQVZE M0QxMlZBRnJhbWUpKTsKPiA+ICvCoMKgwqAgaWYgKCFmcmFtZSkKPiA+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gTlVMTDsKPiA+ICsKPiA+ICvCoMKgwqAgaWYgKEZBSUxFRChJRDNEMTJEZXZpY2Vf Q3JlYXRlQ29tbWl0dGVkUmVzb3VyY2UoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsCj4gPiAmcHJvcHMs IEQzRDEyX0hFQVBfRkxBR19OT05FLCAmZGVzYywKPiA+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9S RVNPVVJDRV9TVEFURV9DT01NT04sIE5VTEwsICZJSURfSUQzRDEyUmVzb3VyY2UsICh2b2lkCj4g PiAqKikmZnJhbWUtPnRleHR1cmUpKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIHRleHR1cmVcbiIpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiA+ICvCoMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoCBE WF9DSEVDSyhJRDNEMTJEZXZpY2VfQ3JlYXRlRmVuY2UoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsIDAs Cj4gPiBEM0QxMl9GRU5DRV9GTEFHX05PTkUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJklJRF9J RDNEMTJGZW5jZSwgKHZvaWQgKiopJmZyYW1lLQo+ID4gPiBzeW5jX2N0eC5mZW5jZSkpOwo+ID4g Kwo+ID4gK8KgwqDCoCBmcmFtZS0+c3luY19jdHguZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBG QUxTRSwgRkFMU0UsIE5VTEwpOwo+ID4gK8KgwqDCoCBpZiAoIWZyYW1lLT5zeW5jX2N0eC5ldmVu dCkKPiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gPiArCj4gPiArwqDCoMKgIGJ1ZiA9 IGF2X2J1ZmZlcl9jcmVhdGUoKHVpbnQ4X3QgKilmcmFtZSwgc2l6ZW9mKGZyYW1lKSwgZnJlZV90 ZXh0dXJlLAo+ID4gTlVMTCwgMCk7Cj4gPiArwqDCoMKgIGlmICghYnVmKQo+ID4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gZmFpbDsKPiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJuIGJ1ZjsKPiA+ICsKPiA+ ICtmYWlsOgo+ID4gK8KgwqDCoCBmcmVlX3RleHR1cmUoTlVMTCwgKHVpbnQ4X3QgKilmcmFtZSk7 Cj4gPiArwqDCoMKgIHJldHVybiBOVUxMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGQz ZDEydmFfZnJhbWVzX2luaXQoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCkKPiA+ICt7Cj4gPiArwqDC oMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmh3Y3R4wqDCoMKgwqDCoMKgwqAgPSBjdHgtPmh3 Y3R4Owo+ID4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBj dHgtPmRldmljZV9jdHgtPmh3Y3R4Owo+ID4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4dMKg wqAgKnPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5pbnRlcm5hbC0+cHJpdjsKPiA+ICvC oMKgwqAgaW50IGk7Cj4gPiArCj4gPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9F TEVNUyhzdXBwb3J0ZWRfZm9ybWF0cyk7IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgIGlmIChj dHgtPnN3X2Zvcm1hdCA9PSBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5waXhfZm10KSB7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaHdjdHgtPmZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktO T1dOICYmCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y3R4LT5mb3JtYXQg IT0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0uZDNkX2Zvcm1hdCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbmNvbXBhdGlibGUg RFhHSSBmb3JtYXQKPiA+IHByb3ZpZGVkIGJ5IHVzZXIsIHdpbGwgYmUgb3ZlcmlkZWRcbiIpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdjdHgtPmZvcm1hdCA9IHN1cHBvcnRlZF9mb3Jt YXRzW2ldLmQzZF9mb3JtYXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4gPiArwqDCoMKgIH0KPiA+ICvCoMKgwqAgaWYgKGkgPT0gRkZf QVJSQVlfRUxFTVMoc3VwcG9ydGVkX2Zvcm1hdHMpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2dldF9waXhfZm10X25hbWUoY3R4 LT5zd19mb3JtYXQpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwp Owo+ID4gK8KgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgIGN0eC0+aW50ZXJuYWwtPnBvb2xfaW50 ZXJuYWwgPQo+ID4gYXZfYnVmZmVyX3Bvb2xfaW5pdDIoc2l6ZW9mKEFWRDNEMTJWQUZyYW1lKSwK PiA+ICvCoMKgwqDCoMKgwqDCoCBjdHgsIGQzZDEydmFfcG9vbF9hbGxvYywgTlVMTCk7Cj4gPiAr Cj4gPiArwqDCoMKgIGlmICghY3R4LT5pbnRlcm5hbC0+cG9vbF9pbnRlcm5hbCkKPiA+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKwo+ID4gK8KgwqDCoCByZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkM2QxMnZhX2dldF9idWZmZXIoQVZI V0ZyYW1lc0NvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpCj4gPiArewo+ID4gK8KgwqDCoCBp bnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoCBmcmFtZS0+YnVmWzBdID0gYXZfYnVmZmVyX3Bvb2xf Z2V0KGN0eC0+cG9vbCk7Cj4gPiArwqDCoMKgIGlmICghZnJhbWUtPmJ1ZlswXSkKPiA+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKwo+ID4gK8KgwqDCoCByZXQg PSBhdl9pbWFnZV9maWxsX2FycmF5cyhmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCBOVUxM LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT53aWR0aCwgY3R4LT5oZWlnaHQsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEQzRDEyX1RFWFRVUkVfREFUQV9QSVRDSF9BTElHTk1FTlQpOwo+ID4gK8KgwqDCoCBpZiAo cmV0IDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDC oCBmcmFtZS0+ZGF0YVswXSA9IGZyYW1lLT5idWZbMF0tPmRhdGE7Cj4gPiArwqDCoMKgIGZyYW1l LT5mb3JtYXTCoCA9IEFWX1BJWF9GTVRfRDNEMTI7Cj4gPiArwqDCoMKgIGZyYW1lLT53aWR0aMKg wqAgPSBjdHgtPndpZHRoOwo+ID4gK8KgwqDCoCBmcmFtZS0+aGVpZ2h0wqAgPSBjdHgtPmhlaWdo dDsKPiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgZDNkMTJ2YV90cmFuc2Zlcl9nZXRfZm9ybWF0cyhBVkhXRnJhbWVzQ29udGV4dCAqY3R4LAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIEFWSFdGcmFtZVRyYW5zZmVyRGlyZWN0aW9u Cj4gPiBkaXIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gQVZQaXhlbEZvcm1hdCAq KmZvcm1hdHMpCj4gPiArewo+ID4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4dCAqcyA9IGN0 eC0+aW50ZXJuYWwtPnByaXY7Cj4gPiArwqDCoMKgIGVudW0gQVZQaXhlbEZvcm1hdCAqZm10czsK PiA+ICsKPiA+ICvCoMKgwqAgZm10cyA9IGF2X21hbGxvY19hcnJheSgyLCBzaXplb2YoKmZtdHMp KTsKPiA+ICvCoMKgwqAgaWYgKCFmbXRzKQo+ID4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Cj4gPiArCj4gPiArwqDCoMKgIGZtdHNbMF0gPSBjdHgtPnN3X2Zvcm1hdDsK PiA+ICvCoMKgwqAgZm10c1sxXSA9IEFWX1BJWF9GTVRfTk9ORTsKPiA+ICsKPiA+ICvCoMKgwqAg KmZvcm1hdHMgPSBmbXRzOwo+ID4gKwo+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBkM2QxMnZhX3RyYW5zZmVyX2RhdGEoQVZIV0ZyYW1lc0NvbnRleHQg KmN0eCwgQVZGcmFtZSAqZHN0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgQVZGcmFtZSAqc3JjKQo+ID4g K3sKPiA+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqaHdjdHjCoMKgwqDCoMKgwqDC oCA9IGN0eC0+ZGV2aWNlX2N0eC0+aHdjdHg7Cj4gPiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lc0Nv bnRleHQgKmZyYW1lc19od2N0eCA9IGN0eC0+aHdjdHg7Cj4gPiArwqDCoMKgIEQzRDEyVkFGcmFt ZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5w cml2Owo+ID4gKwo+ID4gK8KgwqDCoCBpbnQgcmV0Owo+ID4gK8KgwqDCoCBpbnQgZG93bmxvYWQg PSBzcmMtPmZvcm1hdCA9PSBBVl9QSVhfRk1UX0QzRDEyOwo+ID4gK8KgwqDCoCBjb25zdCBBVkZy YW1lICpmcmFtZSA9IGRvd25sb2FkID8gc3JjIDogZHN0Owo+ID4gK8KgwqDCoCBjb25zdCBBVkZy YW1lICpvdGhlciA9IGRvd25sb2FkID8gZHN0IDogc3JjOwo+ID4gKwo+ID4gK8KgwqDCoCBBVkQz RDEyVkFGcmFtZSAqZiA9IChBVkQzRDEyVkFGcmFtZSAqKWZyYW1lLT5kYXRhWzBdOwo+ID4gK8Kg wqDCoCBJRDNEMTJSZXNvdXJjZSAqdGV4dHVyZSA9IChJRDNEMTJSZXNvdXJjZSAqKWYtPnRleHR1 cmU7Cj4gPiArCj4gPiArwqDCoMKgIHVpbnQ4X3QgKm1hcHBlZF9kYXRhOwo+ID4gK8KgwqDCoCB1 aW50OF90ICpkYXRhWzRdOwo+ID4gK8KgwqDCoCBpbnQgbGluZXNpemVzWzRdOwo+ID4gKwo+ID4g K8KgwqDCoCBEM0QxMl9URVhUVVJFX0NPUFlfTE9DQVRJT04gc3RhZ2luZ195X2xvY2F0aW9uwqAg PSB7IDAgfTsKPiA+ICvCoMKgwqAgRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OIHN0YWdpbmdf dXZfbG9jYXRpb24gPSB7IDAgfTsKPiA+ICsKPiA+ICvCoMKgwqAgRDNEMTJfVEVYVFVSRV9DT1BZ X0xPQ0FUSU9OIHRleHR1cmVfeV9sb2NhdGlvbiA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoCAucFJl c291cmNlwqDCoMKgwqDCoMKgwqAgPSB0ZXh0dXJlLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5UeXBl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfU1VCUkVT T1VSQ0VfSU5ERVgsCj4gPiArwqDCoMKgwqDCoMKgwqAgLlN1YnJlc291cmNlSW5kZXggPSAwLAo+ ID4gK8KgwqDCoCB9Owo+ID4gKwo+ID4gK8KgwqDCoCBEM0QxMl9URVhUVVJFX0NPUFlfTE9DQVRJ T04gdGV4dHVyZV91dl9sb2NhdGlvbiA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoCAucFJlc291cmNl wqDCoMKgwqDCoMKgwqAgPSB0ZXh0dXJlLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfU1VCUkVTT1VSQ0Vf SU5ERVgsCj4gPiArwqDCoMKgwqDCoMKgwqAgLlN1YnJlc291cmNlSW5kZXggPSAxLAo+ID4gK8Kg wqDCoCB9Owo+ID4gKwo+ID4gK8KgwqDCoCBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSIGJhcnJpZXIg PSB7Cj4gPiArwqDCoMKgwqDCoMKgwqAgLlR5cGXCoCA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJf VFlQRV9UUkFOU0lUSU9OLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5GbGFncyA9IEQzRDEyX1JFU09V UkNFX0JBUlJJRVJfRkxBR19OT05FLAo+ID4gK8KgwqDCoMKgwqDCoMKgIC5UcmFuc2l0aW9uID0g ewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnBSZXNvdXJjZcKgwqAgPSB0ZXh0dXJlLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN0YXRlQmVmb3JlID0gRDNEMTJfUkVTT1VSQ0Vf U1RBVEVfQ09NTU9OLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN0YXRlQWZ0ZXLCoCA9 IGRvd25sb2FkID8gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09QWV9TT1VSQ0UgOgo+ID4gRDNEMTJf UkVTT1VSQ0VfU1RBVEVfQ09QWV9ERVNULAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN1 YnJlc291cmNlID0gRDNEMTJfUkVTT1VSQ0VfQkFSUklFUl9BTExfU1VCUkVTT1VSQ0VTLAo+ID4g K8KgwqDCoMKgwqDCoMKgIH0sCj4gPiArwqDCoMKgIH07Cj4gPiArCj4gPiArwqDCoMKgIGlmIChm cmFtZS0+aHdfZnJhbWVzX2N0eC0+ZGF0YSAhPSAodWludDhfdCAqKWN0eCB8fCBvdGhlci0+Zm9y bWF0ICE9Cj4gPiBjdHgtCj4gPiA+IHN3X2Zvcm1hdCkKPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOwo+ID4gKwo+ID4gK8KgwqDCoCBod2N0eC0+bG9jayhod2N0eC0+ bG9ja19jdHgpOwo+ID4gKwo+ID4gK8KgwqDCoCBpZiAoIXMtPmNvbW1hbmRfcXVldWUpIHsKPiA+ ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBkM2QxMnZhX2NyZWF0ZV9oZWxwZXJfb2JqZWN0cyhjdHgp Owo+ID4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBmYWlsOwo+ID4gK8KgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgIGZvciAoaW50 IGkgPSAwOyBpIDwgNDsgaSsrKQo+ID4gK8KgwqDCoMKgwqDCoMKgIGxpbmVzaXplc1tpXSA9IEZG QUxJR04oZnJhbWUtPndpZHRoICogKGZyYW1lc19od2N0eC0+Zm9ybWF0ID09Cj4gPiBEWEdJX0ZP Uk1BVF9QMDEwID8gMiA6IDEpLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEM0QxMl9URVhUVVJFX0RBVEFfUElUQ0hfQUxJ R05NRU5UKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCBzdGFnaW5nX3lfbG9jYXRpb24gPSAo RDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAuVHlwZcKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0NPUFlfVFlQRV9QTEFDRURfRk9PVFBS SU5ULAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlBsYWNlZEZvb3RwcmludCA9IHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLk9mZnNldCA9IDAsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Gb290cHJpbnQgPSB7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkZvcm1hdMKgwqAgPSBmcmFtZXNfaHdjdHgtPmZv cm1hdCA9PSBEWEdJX0ZPUk1BVF9QMDEwID8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNCj4g PiA6IERYR0lfRk9STUFUX1I4X1VOT1JNLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC5XaWR0aMKgwqDCoCA9IGN0eC0+d2lkdGgsCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkhlaWdodMKgwqAgPSBjdHgtPmhlaWdodCwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuRGVwdGjCoMKgwqAgPSAx LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Sb3dQaXRjaCA9 IGxpbmVzaXplc1swXSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0sCj4gPiArwqDCoMKgwqDCoMKgwqAgfTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoCBzdGFnaW5nX3V2X2xvY2F0aW9uID0gKEQzRDEyX1RFWFRVUkVf Q09QWV9MT0NBVElPTikgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlR5cGXCoMKgwqDC oMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfUExBQ0VEX0ZPT1RQUklOVCwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC5QbGFjZWRGb290cHJpbnQgPSB7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC5PZmZzZXQgPSBzLT5sdW1hX2NvbXBvbmVudF9zaXplLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuRm9vdHByaW50ID0gewo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Gb3JtYXTCoMKgID0gZnJhbWVzX2h3 Y3R4LT5mb3JtYXQgPT0gRFhHSV9GT1JNQVRfUDAxMCA/Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IERYR0lfRk9STUFUX1IxNkcx Nl9VTk9STSA6IERYR0lfRk9STUFUX1I4RzhfVU5PUk0sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLldpZHRowqDCoMKgID0gY3R4LT53aWR0aMKgID4+IDEsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkhlaWdodMKgwqAgPSBj dHgtPmhlaWdodCA+PiAxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC5EZXB0aMKgwqDCoCA9IDEsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLlJvd1BpdGNoID0gbGluZXNpemVzWzBdLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSwKPiA+ICvCoMKg wqDCoMKgwqDCoCB9Owo+ID4gKwo+ID4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21tYW5kQWxs b2NhdG9yX1Jlc2V0KHMtPmNvbW1hbmRfYWxsb2NhdG9yKSk7Cj4gPiArCj4gPiArwqDCoMKgIERY X0NIRUNLKElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfUmVzZXQocy0+Y29tbWFuZF9saXN0LCBz LQo+ID4gPiBjb21tYW5kX2FsbG9jYXRvciwgTlVMTCkpOwo+ID4gKwo+ID4gK8KgwqDCoCBpZiAo ZG93bmxvYWQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXMtPnN0YWdpbmdfZG93bmxvYWRf YnVmZmVyKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBkM2QxMnZhX2NyZWF0 ZV9zdGFnaW5nX2J1ZmZlcl9yZXNvdXJjZShjdHgsCj4gPiBEM0QxMl9SRVNPVVJDRV9TVEFURV9D T1BZX0RFU1QsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmcy0KPiA+ID4gc3RhZ2luZ19kb3dubG9hZF9idWZmZXIsIDEpOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+ID4gK8KgwqDCoMKgwqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCBzdGFnaW5n X3lfbG9jYXRpb24ucFJlc291cmNlID0gc3RhZ2luZ191dl9sb2NhdGlvbi5wUmVzb3VyY2UgPSBz LQo+ID4gPiBzdGFnaW5nX2Rvd25sb2FkX2J1ZmZlcjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X1Jlc291cmNlQmFycmllcihzLT5jb21tYW5kX2xp c3QsIDEsCj4gPiAmYmFycmllcik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyR3Jh cGhpY3NDb21tYW5kTGlzdF9Db3B5VGV4dHVyZVJlZ2lvbihzLT5jb21tYW5kX2xpc3QsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzdGFnaW5nX3lf bG9jYXRpb24sIDAsCj4gPiAwLCAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmdGV4dHVyZV95X2xvY2F0aW9uLAo+ID4gTlVMTCk7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9Db3B5VGV4dHVyZVJl Z2lvbihzLT5jb21tYW5kX2xpc3QsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZzdGFnaW5nX3V2X2xvY2F0aW9uLAo+ID4gMCwKPiA+IDAsIDAsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZ0ZXh0dXJl X3V2X2xvY2F0aW9uLAo+ID4gTlVMTCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgYmFycmll ci5UcmFuc2l0aW9uLlN0YXRlQmVmb3JlID0gYmFycmllci5UcmFuc2l0aW9uLlN0YXRlQWZ0ZXI7 Cj4gPiArwqDCoMKgwqDCoMKgwqAgYmFycmllci5UcmFuc2l0aW9uLlN0YXRlQWZ0ZXLCoCA9IEQz RDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTjsKPiA+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJHcmFw aGljc0NvbW1hbmRMaXN0X1Jlc291cmNlQmFycmllcihzLT5jb21tYW5kX2xpc3QsIDEsCj4gPiAm YmFycmllcik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyR3JhcGhp Y3NDb21tYW5kTGlzdF9DbG9zZShzLT5jb21tYW5kX2xpc3QpKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21tYW5kUXVldWVfV2FpdChzLT5jb21tYW5kX3F1ZXVl LCBmLQo+ID4gPnN5bmNfY3R4LmZlbmNlLAo+ID4gZi0+c3luY19jdHguZmVuY2VfdmFsdWUpKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJDb21tYW5kUXVldWVfRXhlY3V0ZUNvbW1h bmRMaXN0cyhzLT5jb21tYW5kX3F1ZXVlLCAxLAo+ID4gKElEM0QxMkNvbW1hbmRMaXN0ICoqKSZz LT5jb21tYW5kX2xpc3QpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGQzZDEydmFf d2FpdF9xdWV1ZV9pZGxlKCZzLT5zeW5jX2N0eCwgcy0+Y29tbWFuZF9xdWV1ZSk7Cj4gPiArwqDC oMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3Rv IGZhaWw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyUmVzb3VyY2Vf TWFwKHMtPnN0YWdpbmdfZG93bmxvYWRfYnVmZmVyLCAwLCBOVUxMLAo+ID4gKHZvaWQgKiopJm1h cHBlZF9kYXRhKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqAgYXZfaW1hZ2VfZmlsbF9wb2ludGVycyhk YXRhLCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT5oZWlnaHQsCj4gPiBtYXBwZWRfZGF0YSwgbGluZXNp emVzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCBhdl9pbWFnZV9jb3B5KGRzdC0+ZGF0YSwg ZHN0LT5saW5lc2l6ZSwgZGF0YSwgbGluZXNpemVzLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT53aWR0aCwgY3R4LT5o ZWlnaHQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMlJlc291cmNlX1VubWFwKHMt PnN0YWdpbmdfZG93bmxvYWRfYnVmZmVyLCAwLCBOVUxMKTsKPiA+ICvCoMKgwqAgfSBlbHNlIHsK PiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXMtPnN0YWdpbmdfdXBsb2FkX2J1ZmZlcikgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gZDNkMTJ2YV9jcmVhdGVfc3RhZ2luZ19idWZm ZXJfcmVzb3VyY2UoY3R4LAo+ID4gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfR0VORVJJQ19SRUFELAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICZzLQo+ID4gPiBzdGFnaW5nX3VwbG9hZF9idWZmZXIsIDApOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKHJldCA8IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ290byBmYWlsOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8KgwqDCoMKg wqDCoMKgIH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCBzdGFnaW5nX3lfbG9jYXRpb24ucFJl c291cmNlID0gc3RhZ2luZ191dl9sb2NhdGlvbi5wUmVzb3VyY2UgPSBzLQo+ID4gPiBzdGFnaW5n X3VwbG9hZF9idWZmZXI7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgRFhfQ0hFQ0soSUQzRDEy UmVzb3VyY2VfTWFwKHMtPnN0YWdpbmdfdXBsb2FkX2J1ZmZlciwgMCwgTlVMTCwKPiA+ICh2b2lk Cj4gPiAqKikmbWFwcGVkX2RhdGEpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoCBhdl9pbWFnZV9maWxs X3BvaW50ZXJzKGRhdGEsIGN0eC0+c3dfZm9ybWF0LCBjdHgtPmhlaWdodCwKPiA+IG1hcHBlZF9k YXRhLCBsaW5lc2l6ZXMpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgIGF2X2ltYWdlX2NvcHko ZGF0YSwgbGluZXNpemVzLCBzcmMtPmRhdGEsIHNyYy0+bGluZXNpemUsCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+c3dfZm9ybWF0LCBjdHgtPndp ZHRoLCBjdHgtPmhlaWdodCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyUmVzb3Vy Y2VfVW5tYXAocy0+c3RhZ2luZ191cGxvYWRfYnVmZmVyLCAwLCBOVUxMKTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X1Jlc291cmNlQmFycmllcihz LT5jb21tYW5kX2xpc3QsIDEsCj4gPiAmYmFycmllcik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqAgSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9Db3B5VGV4dHVyZVJlZ2lvbihzLT5jb21tYW5k X2xpc3QsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICZ0ZXh0dXJlX3lfbG9jYXRpb24sIDAsCj4gPiAwLCAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3RhZ2luZ195X2xvY2F0aW9uLAo+ID4gTlVM TCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9D b3B5VGV4dHVyZVJlZ2lvbihzLT5jb21tYW5kX2xpc3QsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZ0ZXh0dXJlX3V2X2xvY2F0aW9uLAo+ID4gMCwK PiA+IDAsIDAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICZzdGFnaW5nX3V2X2xvY2F0aW9uLAo+ID4gTlVMTCk7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqAgYmFycmllci5UcmFuc2l0aW9uLlN0YXRlQmVmb3JlID0gYmFycmllci5UcmFuc2l0aW9u LlN0YXRlQWZ0ZXI7Cj4gPiArwqDCoMKgwqDCoMKgwqAgYmFycmllci5UcmFuc2l0aW9uLlN0YXRl QWZ0ZXIgPSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT047Cj4gPiArwqDCoMKgwqDCoMKgwqAg SUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9SZXNvdXJjZUJhcnJpZXIocy0+Y29tbWFuZF9saXN0 LCAxLAo+ID4gJmJhcnJpZXIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgIERYX0NIRUNLKElE M0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfQ2xvc2Uocy0+Y29tbWFuZF9saXN0KSk7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVlX0V4ZWN1dGVDb21tYW5kTGlzdHMo cy0+Y29tbWFuZF9xdWV1ZSwgMSwKPiA+IChJRDNEMTJDb21tYW5kTGlzdCAqKikmcy0+Y29tbWFu ZF9saXN0KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBkM2QxMnZhX3dhaXRfcXVl dWVfaWRsZSgmcy0+c3luY19jdHgsIHMtPmNvbW1hbmRfcXVldWUpOwo+ID4gK8KgwqDCoMKgwqDC oMKgIGlmIChyZXQgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ ID4gK8KgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgIGh3Y3R4LT51bmxvY2soaHdjdHgtPmxvY2tf Y3R4KTsKPiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiArCj4gPiArZmFpbDoKPiA+ICvC oMKgwqAgaHdjdHgtPnVubG9jayhod2N0eC0+bG9ja19jdHgpOwo+ID4gK8KgwqDCoCByZXR1cm4g QVZFUlJPUihFSU5WQUwpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGQzZDEydmFfbG9h ZF9mdW5jdGlvbnMoQVZIV0RldmljZUNvbnRleHQgKmh3ZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqAg RDNEMTJWQURldmljZVByaXYgKnByaXYgPSBod2Rldi0+aW50ZXJuYWwtPnByaXY7Cj4gPiArCj4g PiArI2lmICFIQVZFX1VXUAo+ID4gK8KgwqDCoCBwcml2LT5kM2QxMmxpYiA9IGRsb3BlbigiZDNk MTIuZGxsIiwgMCk7Cj4gPiArwqDCoMKgIHByaXYtPmR4Z2lsaWLCoCA9IGRsb3BlbigiZHhnaS5k bGwiLCAwKTsKPiA+ICsKPiA+ICvCoMKgwqAgaWYgKCFwcml2LT5kM2QxMmxpYiB8fCAhcHJpdi0+ ZHhnaWxpYikKPiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gPiArCj4gPiArwqDCoMKg IHByaXYtPmNyZWF0ZV9kZXZpY2UgPSAoUEZOX0QzRDEyX0NSRUFURV9ERVZJQ0UpR2V0UHJvY0Fk ZHJlc3MocHJpdi0KPiA+ID4gZDNkMTJsaWIsICJEM0QxMkNyZWF0ZURldmljZSIpOwo+ID4gK8Kg wqDCoCBpZiAoIXByaXYtPmNyZWF0ZV9kZXZpY2UpCj4gPiArwqDCoMKgwqDCoMKgwqAgZ290byBm YWlsOwo+ID4gKwo+ID4gK8KgwqDCoCBwcml2LT5jcmVhdGVfZHhnaV9mYWN0b3J5MiA9Cj4gPiAo UEZOX0NSRUFURV9EWEdJX0ZBQ1RPUlkyKUdldFByb2NBZGRyZXNzKHByaXYtPmR4Z2lsaWIsCj4g PiAiQ3JlYXRlRFhHSUZhY3RvcnkyIik7Cj4gPiArwqDCoMKgIGlmICghcHJpdi0+Y3JlYXRlX2R4 Z2lfZmFjdG9yeTIpCj4gPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ID4gKwo+ID4gK8Kg wqDCoCBwcml2LT5nZXRfZGVidWdfaW50ZXJmYWNlwqAgPQo+ID4gKFBGTl9EM0QxMl9HRVRfREVC VUdfSU5URVJGQUNFKUdldFByb2NBZGRyZXNzKHByaXYtPmQzZDEybGliLAo+ID4gIkQzRDEyR2V0 RGVidWdJbnRlcmZhY2UiKTsKPiA+ICsjZWxzZQo+ID4gK8KgwqDCoCBwcml2LT5jcmVhdGVfZGV2 aWNlwqDCoMKgwqDCoMKgwqAgPSAoUEZOX0QzRDEyX0NSRUFURV9ERVZJQ0UpCj4gPiBEM0QxMkNy ZWF0ZURldmljZTsKPiA+ICvCoMKgwqAgcHJpdi0+Y3JlYXRlX2R4Z2lfZmFjdG9yeTIgPSAoUEZO X0NSRUFURV9EWEdJX0ZBQ1RPUlkyKQo+ID4gQ3JlYXRlRFhHSUZhY3RvcnkyOwo+ID4gK8KgwqDC oCBwcml2LT5nZXRfZGVidWdfaW50ZXJmYWNlwqAgPSAoUEZOX0QzRDEyX0dFVF9ERUJVR19JTlRF UkZBQ0UpCj4gPiBEM0QxMkdldERlYnVnSW50ZXJmYWNlOwo+ID4gKyNlbmRpZgo+ID4gK8KgwqDC oCByZXR1cm4gMDsKPiA+ICsKPiA+ICtmYWlsOgo+ID4gK8KgwqDCoCBhdl9sb2coaHdkZXYsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBsb2FkIEQzRDEyIGxpYnJhcnkgb3IgaXRzCj4gPiBmdW5j dGlvbnNcbiIpOwo+ID4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUl9VTktOT1dOOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBkM2QxMnZhX2RldmljZV9mcmVlKEFWSFdEZXZpY2VDb250ZXh0 ICpod2RldikKPiA+ICt7Cj4gPiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQgKmN0eMKg ID0gaHdkZXYtPmh3Y3R4Owo+ID4gK8KgwqDCoCBEM0QxMlZBRGV2aWNlUHJpdsKgwqDCoMKgwqAg KnByaXYgPSBod2Rldi0+aW50ZXJuYWwtPnByaXY7Cj4gPiArCj4gPiArwqDCoMKgIEQzRDEyX09C SkVDVF9SRUxFQVNFKGN0eC0+ZGV2aWNlKTsKPiA+ICsKPiA+ICvCoMKgwqAgaWYgKHByaXYtPmQz ZDEybGliKQo+ID4gK8KgwqDCoMKgwqDCoMKgIGRsY2xvc2UocHJpdi0+ZDNkMTJsaWIpOwo+ID4g Kwo+ID4gK8KgwqDCoCBpZiAocHJpdi0+ZHhnaWxpYikKPiA+ICvCoMKgwqDCoMKgwqDCoCBkbGNs b3NlKHByaXYtPmR4Z2lsaWIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGQzZDEydmFf ZGV2aWNlX2luaXQoQVZIV0RldmljZUNvbnRleHQgKmh3ZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqAg QVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqY3R4ID0gaHdkZXYtPmh3Y3R4Owo+ID4gKwo+ID4gK8Kg wqDCoCBpZiAoIWN0eC0+bG9jaykgewo+ID4gK8KgwqDCoMKgwqDCoMKgIGN0eC0+bG9ja19jdHgg PSBDcmVhdGVNdXRleChOVUxMLCAwLCBOVUxMKTsKPiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY3R4 LT5sb2NrX2N0eCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgYSBt dXRleFxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgIH0KPiA+ICvCoMKgwqDCoMKgwqDCoCBjdHgtPmxvY2vC oMKgID0gZDNkMTJ2YV9kZWZhdWx0X2xvY2s7Cj4gPiArwqDCoMKgwqDCoMKgwqAgY3R4LT51bmxv Y2sgPSBkM2QxMnZhX2RlZmF1bHRfdW5sb2NrOwo+ID4gK8KgwqDCoCB9Cj4gPiArCj4gPiArwqDC oMKgIGlmICghY3R4LT52aWRlb19kZXZpY2UpCj4gPiArwqDCoMKgwqDCoMKgwqAgRFhfQ0hFQ0so SUQzRDEyRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlKGN0eC0+ZGV2aWNlLAo+ID4gJklJRF9JRDNEMTJW aWRlb0RldmljZSwgKHZvaWQgKiopJmN0eC0+dmlkZW9fZGV2aWNlKSk7Cj4gPiArCj4gPiArwqDC oMKgIHJldHVybiAwOwo+ID4gKwo+ID4gK2ZhaWw6Cj4gPiArwqDCoMKgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGQzZDEydmFfZGV2aWNlX3Vu aW5pdChBVkhXRGV2aWNlQ29udGV4dCAqaHdkZXYpCj4gPiArewo+ID4gK8KgwqDCoCBBVkQzRDEy VkFEZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBod2Rldi0+aHdjdHg7Cj4gPiArCj4gPiAr wqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGRldmljZV9od2N0eC0+dmlkZW9fZGV2aWNlKTsK PiA+ICsKPiA+ICvCoMKgwqAgaWYgKGRldmljZV9od2N0eC0+bG9jayA9PSBkM2QxMnZhX2RlZmF1 bHRfbG9jaykgewo+ID4gK8KgwqDCoMKgwqDCoMKgIENsb3NlSGFuZGxlKGRldmljZV9od2N0eC0+ bG9ja19jdHgpOwo+ID4gK8KgwqDCoMKgwqDCoMKgIGRldmljZV9od2N0eC0+bG9ja19jdHggPSBJ TlZBTElEX0hBTkRMRV9WQUxVRTsKPiA+ICvCoMKgwqDCoMKgwqDCoCBkZXZpY2VfaHdjdHgtPmxv Y2sgPSBOVUxMOwo+ID4gK8KgwqDCoCB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZDNk MTJ2YV9kZXZpY2VfY3JlYXRlKEFWSFdEZXZpY2VDb250ZXh0ICpod2RldiwgY29uc3QgY2hhcgo+ ID4gKmRldmljZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWRGljdGlvbmFyeSAqb3B0cywgaW50IGZsYWdzKQo+ ID4gK3sKPiA+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqY3R4wqAgPSBod2Rldi0+ aHdjdHg7Cj4gPiArwqDCoMKgIEQzRDEyVkFEZXZpY2VQcml2wqDCoMKgwqDCoCAqcHJpdiA9IGh3 ZGV2LT5pbnRlcm5hbC0+cHJpdjsKPiA+ICsKPiA+ICvCoMKgwqAgSFJFU1VMVCBocjsKPiA+ICvC oMKgwqAgVUlOVCBjcmVhdGVfZmxhZ3MgPSAwOwo+ID4gK8KgwqDCoCBJRFhHSUFkYXB0ZXIgKnBB ZGFwdGVyID0gTlVMTDsKPiA+ICsKPiA+ICvCoMKgwqAgaW50IHJldDsKPiA+ICvCoMKgwqAgaW50 IGlzX2RlYnVnID0gISFhdl9kaWN0X2dldChvcHRzLCAiZGVidWciLCBOVUxMLCAwKTsKPiA+ICsK PiA+ICvCoMKgwqAgaHdkZXYtPmZyZWUgPSBkM2QxMnZhX2RldmljZV9mcmVlOwo+ID4gKwo+ID4g K8KgwqDCoCByZXQgPSBkM2QxMnZhX2xvYWRfZnVuY3Rpb25zKGh3ZGV2KTsKPiA+ICvCoMKgwqAg aWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvC oMKgwqAgaWYgKGlzX2RlYnVnKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyRGVidWcgKnBE ZWJ1ZzsKPiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAocHJpdi0+Z2V0X2RlYnVnX2ludGVyZmFjZSAm JiBTVUNDRUVERUQocHJpdi0KPiA+ID4gZ2V0X2RlYnVnX2ludGVyZmFjZSgmSUlEX0lEM0QxMkRl YnVnLCAodm9pZCAqKikmcERlYnVnKSkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNy ZWF0ZV9mbGFncyB8PSBEWEdJX0NSRUFURV9GQUNUT1JZX0RFQlVHOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgSUQzRDEyRGVidWdfRW5hYmxlRGVidWdMYXllcihwRGVidWcpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UocERlYnVnKTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhod2RldiwgQVZfTE9HX0lORk8sICJEM0QxMiBk ZWJ1ZyBsYXllciBpcyBlbmFibGVkIVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqAgfQo+ID4gK8Kg wqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgIGlmICghY3R4LT5kZXZpY2UpIHsKPiA+ICvCoMKgwqDC oMKgwqDCoCBJRFhHSUZhY3RvcnkyICpwRFhHSUZhY3RvcnkgPSBOVUxMOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgIGhyID0gcHJpdi0+Y3JlYXRlX2R4Z2lfZmFjdG9yeTIoY3JlYXRlX2ZsYWdz LCAmSUlEX0lEWEdJRmFjdG9yeTIsCj4gPiAodm9pZCAqKikmcERYR0lGYWN0b3J5KTsKPiA+ICvC oMKgwqDCoMKgwqDCoCBpZiAoU1VDQ0VFREVEKGhyKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaW50IGFkYXB0ZXIgPSBkZXZpY2UgPyBhdG9pKGRldmljZSkgOiAwOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKEZBSUxFRChJRFhHSUZhY3RvcnkyX0VudW1BZGFwdGVycyhw RFhHSUZhY3RvcnksIGFkYXB0ZXIsCj4gPiAmcEFkYXB0ZXIpKSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcEFkYXB0ZXIgPSBOVUxMOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgSURYR0lGYWN0b3J5Ml9SZWxlYXNlKHBEWEdJRmFjdG9yeSk7Cj4gPiArwqDCoMKgwqDC oMKgwqAgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgIGlmIChwQWRhcHRlcikgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRFhHSV9BREFQVEVSX0RFU0MgZGVzYzsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGhyID0gSURYR0lBZGFwdGVyMl9HZXREZXNjKHBBZGFwdGVyLCAmZGVz Yyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIUZBSUxFRChocikpIHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJV c2luZyBkZXZpY2UgJTA0eDolMDR4ICglbHMpLlxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLlZlbmRvcklkLCBkZXNjLkRldmljZUlkLCBk ZXNjLkRlc2NyaXB0aW9uKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICvCoMKg wqDCoMKgwqDCoCB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAgaHIgPSBwcml2LT5jcmVhdGVf ZGV2aWNlKChJVW5rbm93biAqKXBBZGFwdGVyLAo+ID4gRDNEX0ZFQVRVUkVfTEVWRUxfMTJfMCwg JklJRF9JRDNEMTJEZXZpY2UsICh2b2lkICoqKSZjdHgtPmRldmljZSk7Cj4gPiArwqDCoMKgwqDC oMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UocEFkYXB0ZXIpOwo+ID4gK8KgwqDCoMKgwqDCoMKg IGlmIChGQUlMRUQoaHIpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIERpcmVjdCAzRCAxMiBkZXZpY2UKPiA+ ICglbHgpXG4iLCAobG9uZylocik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g QVZFUlJPUl9VTktOT1dOOwo+ID4gK8KgwqDCoMKgwqDCoMKgIH0KPiA+ICvCoMKgwqAgfQo+ID4g Kwo+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArY29uc3QgSFdDb250ZXh0 VHlwZSBmZl9od2NvbnRleHRfdHlwZV9kM2QxMnZhID0gewo+ID4gK8KgwqDCoCAudHlwZcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEFWX0hXREVWSUNFX1RZUEVfRDNEMTJW QSwKPiA+ICvCoMKgwqAgLm5hbWXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg PSAiRDNEMTJWQSIsCj4gPiArCj4gPiArwqDCoMKgIC5kZXZpY2VfaHdjdHhfc2l6ZcKgwqDCoMKg wqAgPSBzaXplb2YoQVZEM0QxMlZBRGV2aWNlQ29udGV4dCksCj4gPiArwqDCoMKgIC5kZXZpY2Vf cHJpdl9zaXplwqDCoMKgwqDCoMKgID0gc2l6ZW9mKEQzRDEyVkFEZXZpY2VQcml2KSwKPiA+ICvC oMKgwqAgLmZyYW1lc19od2N0eF9zaXplwqDCoMKgwqDCoCA9IHNpemVvZihBVkQzRDEyVkFGcmFt ZXNDb250ZXh0KSwKPiA+ICvCoMKgwqAgLmZyYW1lc19wcml2X3NpemXCoMKgwqDCoMKgwqAgPSBz aXplb2YoRDNEMTJWQUZyYW1lc0NvbnRleHQpLAo+ID4gKwo+ID4gK8KgwqDCoCAuZGV2aWNlX2Ny ZWF0ZcKgwqDCoMKgwqDCoMKgwqDCoCA9IGQzZDEydmFfZGV2aWNlX2NyZWF0ZSwKPiA+ICvCoMKg wqAgLmRldmljZV9pbml0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGQzZDEydmFfZGV2aWNlX2lu aXQsCj4gPiArwqDCoMKgIC5kZXZpY2VfdW5pbml0wqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2 YV9kZXZpY2VfdW5pbml0LAo+ID4gK8KgwqDCoCAuZnJhbWVzX2dldF9jb25zdHJhaW50cyA9IGQz ZDEydmFfZnJhbWVzX2dldF9jb25zdHJhaW50cywKPiA+ICvCoMKgwqAgLmZyYW1lc19pbml0wqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA9IGQzZDEydmFfZnJhbWVzX2luaXQsCj4gPiArwqDCoMKgIC5m cmFtZXNfdW5pbml0wqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9mcmFtZXNfdW5pbml0LAo+ ID4gK8KgwqDCoCAuZnJhbWVzX2dldF9idWZmZXLCoMKgwqDCoMKgID0gZDNkMTJ2YV9nZXRfYnVm ZmVyLAo+ID4gK8KgwqDCoCAudHJhbnNmZXJfZ2V0X2Zvcm1hdHPCoMKgID0gZDNkMTJ2YV90cmFu c2Zlcl9nZXRfZm9ybWF0cywKPiA+ICvCoMKgwqAgLnRyYW5zZmVyX2RhdGFfdG/CoMKgwqDCoMKg wqAgPSBkM2QxMnZhX3RyYW5zZmVyX2RhdGEsCj4gPiArwqDCoMKgIC50cmFuc2Zlcl9kYXRhX2Zy b23CoMKgwqDCoCA9IGQzZDEydmFfdHJhbnNmZXJfZGF0YSwKPiA+ICsKPiA+ICvCoMKgwqAgLnBp eF9mbXRzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IChjb25zdCBlbnVtIEFWUGl4ZWxG b3JtYXRbXSl7Cj4gPiBBVl9QSVhfRk1UX0QzRDEyLAo+ID4gQVZfUElYX0ZNVF9OT05FIH0sCj4g PiArfTsKPiA+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaCBiL2xp YmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g aW5kZXggMDAwMDAwMDAwMC4uZmYwNmU2ZjJlZgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIv bGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgKPiA+IEBAIC0wLDAgKzEsMTM0IEBACj4gPiAr LyoKPiA+ICsgKiBEaXJlY3QzRCAxMiBIVyBhY2NlbGVyYXRpb24uCj4gPiArICoKPiA+ICsgKiBj b3B5cmlnaHQgKGMpIDIwMjItMjAyMyBXdSBKaWFuaHVhIDx0b3FzeHdAb3V0bG9vay5jb20+Cj4g PiArICoKPiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gPiArICoKPiA+ICsg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y Cj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ID4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ID4gKyAqCj4gPiArICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Cj4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPiA+ICsgKiBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gKyAqCj4gPiArICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ ID4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKPiA+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKPiA+IFVTQQo+ID4gKyAqLwo+ID4g Kwo+ID4gKyNpZm5kZWYgQVZVVElMX0hXQ09OVEVYVF9EM0QxMlZBX0gKPiA+ICsjZGVmaW5lIEFW VVRJTF9IV0NPTlRFWFRfRDNEMTJWQV9ICj4gPiArCj4gPiArLyoqCj4gPiArICogQGZpbGUKPiA+ ICsgKiBBbiBBUEktc3BlY2lmaWMgaGVhZGVyIGZvciBBVl9IV0RFVklDRV9UWVBFX0QzRDEyVkEu Cj4gPiArICoKPiA+ICsgKiBBVkhXRnJhbWVzQ29udGV4dC5wb29sIG11c3QgY29udGFpbiBBVkJ1 ZmZlclJlZnMgd2hvc2UKPiA+ICsgKiBkYXRhIHBvaW50ZXIgcG9pbnRzIHRvIGFuIEFWRDNEMTJW QUZyYW1lIHN0cnVjdC4KPiA+ICsgKi8KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gPiArI2lu Y2x1ZGUgPGluaXRndWlkLmg+Cj4gPiArI2luY2x1ZGUgPGQzZDEyLmg+Cj4gPiArI2luY2x1ZGUg PGQzZDEyc2RrbGF5ZXJzLmg+Cj4gPiArI2luY2x1ZGUgPGQzZDEydmlkZW8uaD4KPiA+ICsKPiA+ ICsvKioKPiA+ICsgKiBAYnJpZWYgVGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFzIEFWSFdEZXZp Y2VDb250ZXh0Lmh3Y3R4Cj4gPiArICoKPiA+ICsgKi8KPiA+ICt0eXBlZGVmIHN0cnVjdCBBVkQz RDEyVkFEZXZpY2VDb250ZXh0IHsKPiA+ICvCoMKgwqAgLyoqCj4gPiArwqDCoMKgwqAgKiBEZXZp Y2UgdXNlZCBmb3Igb2JqZWN0cyBjcmVhdGlvbiBhbmQgYWNjZXNzLiBUaGlzIGNhbiBhbHNvIGJl Cj4gPiArwqDCoMKgwqAgKiB1c2VkIHRvIHNldCB0aGUgbGliYXZjb2RlYyBkZWNvZGluZyBkZXZp Y2UuCj4gPiArwqDCoMKgwqAgKgo+ID4gK8KgwqDCoMKgICogQ2FuIGJlIHNldCBieSB0aGUgdXNl ci4gVGhpcyBpcyB0aGUgb25seSBtYW5kYXRvcnkgZmllbGQgLSB0aGUgb3RoZXIKPiA+ICvCoMKg wqDCoCAqIGRldmljZSBjb250ZXh0IGZpZWxkcyBhcmUgc2V0IGZyb20gdGhpcyBhbmQgYXJlIGF2 YWlsYWJsZSBmb3IKPiA+IGNvbnZlbmllbmNlLgo+ID4gK8KgwqDCoMKgICoKPiA+ICvCoMKgwqDC oCAqIERlYWxsb2NhdGluZyB0aGUgQVZIV0RldmljZUNvbnRleHQgd2lsbCBhbHdheXMgcmVsZWFz ZSB0aGlzCj4gPiBpbnRlcmZhY2UsCj4gPiArwqDCoMKgwqAgKiBhbmQgaXQgZG9lcyBub3QgbWF0 dGVyIHdoZXRoZXIgaXQgd2FzIHVzZXItYWxsb2NhdGVkLgo+ID4gK8KgwqDCoMKgICovCj4gPiAr wqDCoMKgIElEM0QxMkRldmljZSAqZGV2aWNlOwo+ID4gKwo+ID4gK8KgwqDCoCAvKioKPiA+ICvC oMKgwqDCoCAqIElmIHVuc2V0LCB0aGlzIHdpbGwgYmUgc2V0IGZyb20gdGhlIGRldmljZSBmaWVs ZCBvbiBpbml0Lgo+ID4gK8KgwqDCoMKgICoKPiA+ICvCoMKgwqDCoCAqIERlYWxsb2NhdGluZyB0 aGUgQVZIV0RldmljZUNvbnRleHQgd2lsbCBhbHdheXMgcmVsZWFzZSB0aGlzCj4gPiBpbnRlcmZh Y2UsCj4gPiArwqDCoMKgwqAgKiBhbmQgaXQgZG9lcyBub3QgbWF0dGVyIHdoZXRoZXIgaXQgd2Fz IHVzZXItYWxsb2NhdGVkLgo+ID4gK8KgwqDCoMKgICovCj4gPiArwqDCoMKgIElEM0QxMlZpZGVv RGV2aWNlICp2aWRlb19kZXZpY2U7Cj4gPiArCj4gPiArwqDCoMKgIC8qKgo+ID4gK8KgwqDCoMKg ICogQ2FsbGJhY2tzIGZvciBsb2NraW5nLiBUaGV5IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBpbnRl cm5hbCBzdGFnaW5nCj4gPiArwqDCoMKgwqAgKiB0ZXh0dXJlIChmb3IgYXZfaHdmcmFtZV90cmFu c2Zlcl9kYXRhKCkgY2FsbHMpLiBUaGV5IGRvIE5PVCBwcm90ZWN0Cj4gPiArwqDCoMKgwqAgKiBh Y2Nlc3MgdG8gaHdjb250ZXh0IG9yIGRlY29kZXIgc3RhdGUgaW4gZ2VuZXJhbC4KPiA+ICvCoMKg wqDCoCAqCj4gPiArwqDCoMKgwqAgKiBJZiB1bnNldCBvbiBpbml0LCB0aGUgaHdjb250ZXh0IGlt cGxlbWVudGF0aW9uIHdpbGwgc2V0IHRoZW0gdG8gdXNlCj4gPiBhbgo+ID4gK8KgwqDCoMKgICog aW50ZXJuYWwgbXV0ZXguCj4gPiArwqDCoMKgwqAgKgo+ID4gK8KgwqDCoMKgICogVGhlIHVuZGVy bHlpbmcgbG9jayBtdXN0IGJlIHJlY3Vyc2l2ZS4gbG9ja19jdHggaXMgZm9yIGZyZWUgdXNlIGJ5 Cj4gPiB0aGUKPiA+ICvCoMKgwqDCoCAqIGxvY2tpbmcgaW1wbGVtZW50YXRpb24uCj4gPiArwqDC oMKgwqAgKi8KPiA+ICvCoMKgwqAgdm9pZCAoKmxvY2spKHZvaWQgKmxvY2tfY3R4KTsKPiA+ICvC oMKgwqAgdm9pZCAoKnVubG9jaykodm9pZCAqbG9ja19jdHgpOwo+ID4gK8KgwqDCoCB2b2lkICps b2NrX2N0eDsKPiA+ICt9IEFWRDNEMTJWQURldmljZUNvbnRleHQ7Cj4gPiArCj4gPiArLyoqCj4g PiArICogQGJyaWVmIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gc3luYyBkM2QxMiBleGVjdXRpb24K PiA+ICsgKgo+ID4gKyAqLwo+ID4gK3R5cGVkZWYgc3RydWN0IEFWRDNEMTJWQVN5bmNDb250ZXh0 IHsKPiA+ICvCoMKgwqAgLyoqCj4gPiArwqDCoMKgwqAgKiBEM0QxMiBmZW5jZSBvYmplY3QKPiA+ ICvCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoCBJRDNEMTJGZW5jZSAqZmVuY2U7Cj4gPiArCj4gPiAr wqDCoMKgIC8qKgo+ID4gK8KgwqDCoMKgICogQSBoYW5kbGUgdG8gdGhlIGV2ZW50IG9iamVjdCB0 aGF0J3MgcmFpc2VkIHdoZW4gdGhlIGZlbmNlCj4gPiArwqDCoMKgwqAgKiByZWFjaGVzIGEgY2Vy dGFpbiB2YWx1ZS4KPiA+ICvCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoCBIQU5ETEUgZXZlbnQ7Cj4g PiArCj4gPiArwqDCoMKgIC8qKgo+ID4gK8KgwqDCoMKgICogVGhlIGZlbmNlIHZhbHVlIHVzZWQg Zm9yIHN5bmMKPiA+ICvCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoCB1aW50NjRfdCBmZW5jZV92YWx1 ZTsKPiA+ICt9IEFWRDNEMTJWQVN5bmNDb250ZXh0Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIEBi cmllZiBEM0QxMlZBIGZyYW1lIGRlc2NyaXB0b3IgZm9yIHBvb2wgYWxsb2NhdGlvbi4KPiA+ICsg Kgo+ID4gKyAqLwo+ID4gK3R5cGVkZWYgc3RydWN0IEFWRDNEMTJWQUZyYW1lIHsKPiA+ICvCoMKg wqAgLyoqCj4gPiArwqDCoMKgwqAgKiBUaGUgdGV4dHVyZSBpbiB3aGljaCB0aGUgZnJhbWUgaXMg bG9jYXRlZC4gVGhlIHJlZmVyZW5jZSBjb3VudCBpcwo+ID4gK8KgwqDCoMKgICogbWFuYWdlZCBi eSB0aGUgQVZCdWZmZXJSZWYsIGFuZCBkZXN0cm95aW5nIHRoZSByZWZlcmVuY2Ugd2lsbAo+ID4g cmVsZWFzZQo+ID4gK8KgwqDCoMKgICogdGhlIGludGVyZmFjZS4KPiA+ICvCoMKgwqDCoCAqLwo+ ID4gK8KgwqDCoCBJRDNEMTJSZXNvdXJjZSAqdGV4dHVyZTsKPiA+ICsKPiA+ICvCoMKgwqAgLyoq Cj4gPiArwqDCoMKgwqAgKiBUaGUgc3luYyBjb250ZXh0IGZvciB0aGUgdGV4dHVyZQo+ID4gK8Kg wqDCoMKgICoKPiA+ICvCoMKgwqDCoCAqIEBzZWU6Cj4gPiBodHRwczovL2xlYXJuLm1pY3Jvc29m dC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9tZWRmb3VuZC9kaXJlY3QzZC0xMi12aWRlby1vdmVy dmlldyNkaXJlY3R4LTEyLWZlbmNlcwo+ID4gK8KgwqDCoMKgICovCj4gPiArwqDCoMKgIEFWRDNE MTJWQVN5bmNDb250ZXh0IHN5bmNfY3R4Owo+ID4gK30gQVZEM0QxMlZBRnJhbWU7Cj4gPiArCj4g PiArLyoqCj4gPiArICogQGJyaWVmIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCBhcyBBVkhXRnJh bWVzQ29udGV4dC5od2N0eAo+ID4gKyAqCj4gPiArICovCj4gPiArdHlwZWRlZiBzdHJ1Y3QgQVZE M0QxMlZBRnJhbWVzQ29udGV4dCB7Cj4gPiArwqDCoMKgIC8qKgo+ID4gK8KgwqDCoMKgICogRFhH SV9GT1JNQVQgZm9ybWF0LiBNVVNUIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgcGl4ZWwgZm9ybWF0 Lgo+ID4gK8KgwqDCoMKgICogSWYgdW5zZXQsIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZXQuCj4g PiArwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqAgRFhHSV9GT1JNQVQgZm9ybWF0Owo+ID4gK30gQVZE M0QxMlZBRnJhbWVzQ29udGV4dDsKPiA+ICsKPiA+ICsjZW5kaWYgLyogQVZVVElMX0hXQ09OVEVY VF9EM0QxMlZBX0ggKi8KPiA+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDEy dmFfaW50ZXJuYWwuaAo+ID4gYi9saWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmFfaW50ZXJuYWwu aAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAuLmJmZDg5YjM1 NDUKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2 YV9pbnRlcm5hbC5oCj4gPiBAQCAtMCwwICsxLDU5IEBACj4gPiArLyoKPiA+ICsgKiBEaXJlY3Qz RCAxMiBIVyBhY2NlbGVyYXRpb24uCj4gPiArICoKPiA+ICsgKiBjb3B5cmlnaHQgKGMpIDIwMjIt MjAyMyBXdSBKaWFuaHVhIDx0b3FzeHdAb3V0bG9vay5jb20+Cj4gPiArICoKPiA+ICsgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgo+ID4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu wqAgU2VlIHRoZSBHTlUKPiA+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+ID4gKyAqCj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEKPiA+IFVTQQo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgQVZV VElMX0hXQ09OVEVYVF9EM0QxMlZBX0lOVEVSTkFMX0gKPiA+ICsjZGVmaW5lIEFWVVRJTF9IV0NP TlRFWFRfRDNEMTJWQV9JTlRFUk5BTF9ICj4gPiArCj4gPiArLyoqCj4gPiArICogQGRlZiBDT0JK TUFDUk9TCj4gPiArICoKPiA+ICsgKiBAYnJpZWYgRW5hYmxlIEMgc3R5bGUgaW50ZXJmYWNlIGZv ciBEM0QxMgo+ID4gKyAqLwo+ID4gKyNpZm5kZWYgQ09CSk1BQ1JPUwo+ID4gKyNkZWZpbmUgQ09C Sk1BQ1JPUwo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIEBkZWYgRFhfQ0hFQ0sK PiA+ICsgKgo+ID4gKyAqIEBicmllZiBBIGNoZWNrIG1hY3JvIHVzZWQgYnkgRDNEMTIgZnVuY3Rp b25zIGhpZ2hseSBmcmVxdWVudGx5Cj4gPiArICovCj4gPiArI2RlZmluZSBEWF9DSEVDSyhocinC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFwKPiA+ICvCoMKgwqAgZG8ge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ID4gK8KgwqDC oMKgwqDCoMKgIGlmIChGQUlMRUQoaHIpKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBm YWlsO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBcCj4gPiArwqDCoMKgIH0gd2hpbGUgKDApCj4gPiArCj4gPiArLyoqCj4gPiArICogQGRlZiBE M0QxMl9PQkpFQ1RfUkVMRUFTRQo+ID4gKyAqCj4gPiArICogQGJyaWVmIEEgcmVsZWFzZSBtYWNy byB1c2VkIGJ5IEQzRDEyIG9iamVjdHMgaGlnaGx5IGZyZXF1ZW50bHkKPiA+ICsgKi8KPiA+ICsj ZGVmaW5lIEQzRDEyX09CSkVDVF9SRUxFQVNFKHBJbnRlcmZhY2UpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgXAo+ID4gK8KgwqDCoCBkbyB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFwKPiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAocEludGVyZmFjZSkge8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIElVbmtub3duX1JlbGVhc2UoKElVbmtub3duICopcEludGVyZmFjZSk7 IFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBJbnRlcmZhY2UgPSBOVUxMO8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ID4gK8KgwqDCoMKgwqDC oMKgIH3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiA+ICvCoMKgwqAgfSB3aGls ZSAoMCkKPiA+ICsKPiA+ICsjZW5kaWYgLyogQVZVVElMX0hXQ09OVEVYVF9EM0QxMlZBX0lOVEVS TkFMX0ggKi8KPiA+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo+ID4gZGlmZiAtLWdpdCBh L2xpYmF2dXRpbC9od2NvbnRleHRfaW50ZXJuYWwuaCBiL2xpYmF2dXRpbC9od2NvbnRleHRfaW50 ZXJuYWwuaAo+ID4gaW5kZXggZTYyNjY0OTRhYy4uNGRmNTE2ZWU2YSAxMDA2NDQKPiA+IC0tLSBh L2xpYmF2dXRpbC9od2NvbnRleHRfaW50ZXJuYWwuaAo+ID4gKysrIGIvbGliYXZ1dGlsL2h3Y29u dGV4dF9pbnRlcm5hbC5oCj4gPiBAQCAtMTY1LDYgKzE2NSw3IEBAIGludCBmZl9od2ZyYW1lX21h cF9yZXBsYWNlKEFWRnJhbWUgKmRzdCwgY29uc3QgQVZGcmFtZQo+ID4gKnNyYyk7Cj4gPiDCoAo+ ID4gwqBleHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9jdWRhOwo+ ID4gwqBleHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9kM2QxMXZh Owo+ID4gK2V4dGVybiBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2QzZDEy dmE7Cj4gPiDCoGV4dGVybiBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2Ry bTsKPiA+IMKgZXh0ZXJuIGNvbnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfZHh2 YTI7Cj4gPiDCoGV4dGVybiBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX29w ZW5jbDsKPiA+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvcGl4ZGVzYy5jIGIvbGliYXZ1dGlsL3Bp eGRlc2MuYwo+ID4gaW5kZXggNGU0YTYzZTI4Ny4uMGRiNDE2NzkzNCAxMDA2NDQKPiA+IC0tLSBh L2xpYmF2dXRpbC9waXhkZXNjLmMKPiA+ICsrKyBiL2xpYmF2dXRpbC9waXhkZXNjLmMKPiA+IEBA IC0yMzExLDYgKzIzMTEsMTAgQEAgc3RhdGljIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvcgo+ID4g YXZfcGl4X2ZtdF9kZXNjcmlwdG9yc1tBVl9QSVhfRk1UX05CXSA9IHsKPiA+IMKgwqDCoMKgwqDC oMKgwqAgLm5hbWUgPSAiZDNkMTEiLAo+ID4gwqDCoMKgwqDCoMKgwqDCoCAuZmxhZ3MgPSBBVl9Q SVhfRk1UX0ZMQUdfSFdBQ0NFTCwKPiA+IMKgwqDCoMKgIH0sCj4gPiArwqDCoMKgIFtBVl9QSVhf Rk1UX0QzRDEyXSA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoCAubmFtZSA9ICJkM2QxMiIsCj4gPiAr wqDCoMKgwqDCoMKgwqAgLmZsYWdzID0gQVZfUElYX0ZNVF9GTEFHX0hXQUNDRUwsCj4gPiArwqDC oMKgIH0sCj4gPiDCoMKgwqDCoCBbQVZfUElYX0ZNVF9HQlJQRjMyQkVdID0gewo+ID4gwqDCoMKg wqDCoMKgwqDCoCAubmFtZSA9ICJnYnJwZjMyYmUiLAo+ID4gwqDCoMKgwqDCoMKgwqDCoCAubmJf Y29tcG9uZW50cyA9IDMsCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3BpeGZtdC5oIGIvbGli YXZ1dGlsL3BpeGZtdC5oCj4gPiBpbmRleCBhMjZjNzJkNTZiLi41OGY5YWQyOGJkIDEwMDY0NAo+ ID4gLS0tIGEvbGliYXZ1dGlsL3BpeGZtdC5oCj4gPiArKysgYi9saWJhdnV0aWwvcGl4Zm10LmgK PiA+IEBAIC00MjksNiArNDI5LDEzIEBAIGVudW0gQVZQaXhlbEZvcm1hdCB7Cj4gPiDCoMKgwqDC oCBBVl9QSVhfRk1UX0dCUkFQMTRCRSzCoCAvLy88IHBsYW5hciBHQlIgNDo0OjQ6NCA1NmJwcCwg YmlnLWVuZGlhbgo+ID4gwqDCoMKgwqAgQVZfUElYX0ZNVF9HQlJBUDE0TEUswqAgLy8vPCBwbGFu YXIgR0JSIDQ6NDo0OjQgNTZicHAsIGxpdHRsZS1lbmRpYW4KPiA+IMKgCj4gPiArwqDCoMKgIC8q Kgo+ID4gK8KgwqDCoMKgICogSGFyZHdhcmUgc3VyZmFjZXMgZm9yIERpcmVjdDNEIDEyLgo+ID4g K8KgwqDCoMKgICoKPiA+ICvCoMKgwqDCoCAqIGRhdGFbMF0gcG9pbnRzIHRvIGFuIEFWRDNEMTJW QUZyYW1lCj4gPiArwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqAgQVZfUElYX0ZNVF9EM0QxMiwKPiA+ ICsKPiA+IMKgwqDCoMKgIEFWX1BJWF9GTVRfTkLCoMKgwqDCoMKgwqDCoMKgIC8vLzwgbnVtYmVy IG9mIHBpeGVsIGZvcm1hdHMsIERPIE5PVCBVU0UgVEhJUyBpZgo+ID4geW91IHdhbnQgdG8gbGlu ayB3aXRoIHNoYXJlZCBsaWJhdiogYmVjYXVzZSB0aGUgbnVtYmVyIG9mIGZvcm1hdHMgbWlnaHQK PiA+IGRpZmZlcgo+ID4gYmV0d2VlbiB2ZXJzaW9ucwo+ID4gwqB9Owo+ID4gwqAKPiA+IGRpZmYg LS1naXQgYS9saWJhdnV0aWwvdGVzdHMvaHdkZXZpY2UuYyBiL2xpYmF2dXRpbC90ZXN0cy9od2Rl dmljZS5jCj4gPiBpbmRleCBjNTc1ODY2MTNhLi45ZDc5NjRmOWVlIDEwMDY0NAo+ID4gLS0tIGEv bGliYXZ1dGlsL3Rlc3RzL2h3ZGV2aWNlLmMKPiA+ICsrKyBiL2xpYmF2dXRpbC90ZXN0cy9od2Rl dmljZS5jCj4gPiBAQCAtMTM3LDYgKzEzNyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ID4g wqDCoMKgwqDCoMKgIHsgIjAiLCAiMSIsICIyIiB9IH0sCj4gPiDCoMKgwqDCoCB7IEFWX0hXREVW SUNFX1RZUEVfRDNEMTFWQSwKPiA+IMKgwqDCoMKgwqDCoCB7ICIwIiwgIjEiLCAiMiIgfSB9LAo+ ID4gK8KgwqDCoCB7IEFWX0hXREVWSUNFX1RZUEVfRDNEMTJWQSwKPiA+ICvCoMKgwqDCoMKgIHsg IjAiLCAiMSIsICIyIiB9IH0sCj4gPiDCoMKgwqDCoCB7IEFWX0hXREVWSUNFX1RZUEVfT1BFTkNM LAo+ID4gwqDCoMKgwqDCoMKgIHsgIjAuMCIsICIwLjEiLCAiMS4wIiwgIjEuMSIgfSB9LAo+ID4g wqDCoMKgwqAgeyBBVl9IV0RFVklDRV9UWVBFX1ZBQVBJLAo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2 dXRpbC92ZXJzaW9uLmggYi9saWJhdnV0aWwvdmVyc2lvbi5oCj4gPiBpbmRleCBjNWZhN2MzNjky Li4wNjg0OTk2YmYyIDEwMDY0NAo+ID4gLS0tIGEvbGliYXZ1dGlsL3ZlcnNpb24uaAo+ID4gKysr IGIvbGliYXZ1dGlsL3ZlcnNpb24uaAo+ID4gQEAgLTc5LDcgKzc5LDcgQEAKPiA+IMKgICovCj4g PiDCoAo+ID4gwqAjZGVmaW5lIExJQkFWVVRJTF9WRVJTSU9OX01BSk9SwqAgNTgKPiA+IC0jZGVm aW5lIExJQkFWVVRJTF9WRVJTSU9OX01JTk9SwqAgMzIKPiA+ICsjZGVmaW5lIExJQkFWVVRJTF9W RVJTSU9OX01JTk9SwqAgMzMKPiA+IMKgI2RlZmluZSBMSUJBVlVUSUxfVkVSU0lPTl9NSUNSTyAx MDAKPiA+IMKgCj4gPiDCoCNkZWZpbmUgTElCQVZVVElMX1ZFUlNJT05fSU5UwqDCoCBBVl9WRVJT SU9OX0lOVChMSUJBVlVUSUxfVkVSU0lPTl9NQUpPUiwgXAo+IAo+IAo+IHYxMiBMR1RNLCBhbmQg d29ya3Mgd2VsbCBpbiBteSB0ZXN0aW5nLiBJJ2xsIG1lcmdlIHYxMiBpZiB0aGVyZSBhcmUgbm8K PiBvYmplY3Rpb25zIC8gY29tbWVudHMuCgpGaXhlZCBjb25mbGljdHMgaW4gQ2hhbmdlbG9nIC8g dmVyc2lvbi5oIC8gQVBJQ2hhbmdlIGFuZCBwdXNoZWQuIAoKVGhhbmtzCkhhaWhhbwoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBt YWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1Ympl Y3QgInVuc3Vic2NyaWJlIi4K