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 42FB6486A7 for ; Mon, 15 Apr 2024 08:43:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 714FB68D380; Mon, 15 Apr 2024 11:43:02 +0300 (EEST) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CB99B68D32E for ; Mon, 15 Apr 2024 11:42:53 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713170579; x=1744706579; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=EI2muvJFGOlkYmvsZaTE/XhxIfjBiN6EBP8+Lmox1T0=; b=HIl8RegmCfb6CqBom9KRJZu9bXop/rqWz/UHY7HwW19USfLKshu692yJ P6whuoJCVzWy9b+B++h/kqjEW+q2JYqQkthQu6cm0mSARf+R0A8LU1Phw 8yDIkxp7iIDGOZFJF4bt6slTMJgmEQfxJnUc+e/nU8Qe/9AXB2hRikRRb itveLmgwWKSvOwQB6dR+MzQlGs9PQ97iOwT6o7N50cYdHnEuNsAl0jn3j bi/yW4xNQi/eA6CGWrP2FYwOHHrMIjOUylGLvKLIu/Vsjtx0TQN3RY3Qz gebjyu2sgfrvlR6hM/yE42X8BqL+L4IPOfjQT1VP5ZOQWVHj3bgnsyFoW g==; X-CSE-ConnectionGUID: GXU+B5ieRoOpIjVXKXwwRw== X-CSE-MsgGUID: 6wQG4USORmiHc8m9FlrRzw== X-IronPort-AV: E=McAfee;i="6600,9927,11044"; a="8768266" X-IronPort-AV: E=Sophos;i="6.07,202,1708416000"; d="scan'208";a="8768266" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Apr 2024 01:42:31 -0700 X-CSE-ConnectionGUID: ++xJxrG2T0Odcu6oyWRaVg== X-CSE-MsgGUID: Xa/QzYayT/CC+rTFIdscYw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,202,1708416000"; d="scan'208";a="26485064" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmviesa004.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 15 Apr 2024 01:42:32 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 15 Apr 2024 01:42:30 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 15 Apr 2024 01:42:30 -0700 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; Mon, 15 Apr 2024 01:42:30 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.168) 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; Mon, 15 Apr 2024 01:42:29 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=USLR2uTV/tfCY9wgE95K4nExcjuj2kaUOR5AxRLi23TvkUpvACcb9xnsByVJgfnEHhZryl2Uf4zXRzpZRBZy5uPh6L245W7aZMhf40K6UQ0Zu58tEnXzO8FaFlVK01fEr5S8f2crzj6ctbSPYUTTV4iIm2/BlFKraEa4ZAVDZ+wFlqMr+E253wQ4SNnFI5jQZrr15iwrJRA4FRvJqTeq1ikiJGrUxEhoVa9/yzmz5i43jlmNcyuiih/t6PovnoPTSZgdx7jd90mdaQKQO5108/af4y/ZS4S0GqxiPcJLjykKz+8HgesN9VGhMpkKcCSE5fDEuDtlbmoZdsXKDhX7zA== 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=EI2muvJFGOlkYmvsZaTE/XhxIfjBiN6EBP8+Lmox1T0=; b=MuYDf+NKcfgomj0q195/rznWCEt3MM17XRy6/Jy7/piXb3p9RLal/hnfxkO+s3xxEbv0tMxfxrVd3Bawnpa218ZEBIQqU7mUqWKEULRGgMQjYw9y56p57CwpPFDdNrDfwq8WcvNTVHpjLY1aJaMYvHcVQRZm+IeSKhyri4MLZX6vpiGr2pY72gK06JCUuy6rxFRwCXstoZjC+ehH3ed2iKd8T3pRCyq4LIIAvhc/JVpa/Ahh0PIfDVSCFRqzBJJ1knwhxG3vpUG/P6a9UCyn4bRK6lTveujtFwdX5IHIfxdFuvO9wWy85qisJ1JNH3FE8zpbMngM8bo3OJFyCWE+Xg== 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 MN2PR11MB4613.namprd11.prod.outlook.com (2603:10b6:208:26d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.31; Mon, 15 Apr 2024 08:42:25 +0000 Received: from DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::103a:9795:6ae2:7c96]) by DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::103a:9795:6ae2:7c96%4]) with mapi id 15.20.7430.045; Mon, 15 Apr 2024 08:42:24 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v7 11/12] avcodec: add D3D12VA hardware HEVC encoder Thread-Index: AQHadeglwLIFCtgZ5kStCyaai6XUKbFpNdoA Date: Mon, 15 Apr 2024 08:42:24 +0000 Message-ID: <296f81396eb3da1bdc41b79fa935f2f51cc05da0.camel@intel.com> References: <20240314081456.379-1-tong1.wu@intel.com> <20240314081456.379-11-tong1.wu@intel.com> In-Reply-To: <20240314081456.379-11-tong1.wu@intel.com> 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_|MN2PR11MB4613:EE_ x-ms-office365-filtering-correlation-id: 447821f7-5cd2-442d-6442-08dc5d27f966 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wQ3v+QwmtMT2UQCuzW7MRFrTxzSmINuy7I2uk5R1tRInFYNnCAdA3JOLlcFpaEtMUyFElmkLCluy5ajLB9K9ABjQ6+q5FUdx6SHre98bc8Gxnwf8keOM18atLV8XGuqTe++6VzuRKQa3WYOnh+82nNOcNr4bIO6nDfn+31vrssWiFQYs8opJpALARLXk+1FzRUZpYDRE3QrL0sGoIoxCefuNyRC0TGxjwHwoi6s4W4aQCg1GkFitLTHpUDkc27IE8cTwTjTncVnaLWUIYHdhJLxVHdEpY01MUXrM5q7/vxCfH/TOMHBxLagk6uenBv9cV1UCL6vqlfUeXODJIyOtd2S9bSzbMdZT0WZWZZbmZ7Q5xFnHzXqzaJG2p76tcAdDQ67W6jy6iaX59KBHxGX0KVL8oFx/r8No8CmummG7ckmfOXewMGr77OxhO+mwGiuXo3o//QHXLJXz/CQkeLUUnmvdtBorFw8+7F+xw3OVWILXWnj8nKCHAX6IKwwbm+V8XPA9GP84YNhyhm0zLjaPUMnC5UEjZqp+A2K9kSealSV6NiFfXG3Jf965yyVNCv04LvTOGPpwLSTu5A2iey8ItoRxnJOmX0MomMeO3jxhMs68fidifKcvgwyM/b4pMyRY1FZwX0YWqJ6hdkPuJ+O8ihRVUplFLJn+OXBZKAr7VpwtpXGvSAwX8yL/cas39PQG 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)(376005)(1800799015)(366007)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NTE2Q2MxcnNISk5wZE9hYkRzZXNXL1ZibUZXUUY3MFdiSnJYNGRVZlQ0Ym5a?= =?utf-8?B?akpRcWg4VzFzVFpkUFFOUW9aSk9QVCtRK3FZbm1LV2tjaEgwMzBkbGp0bENu?= =?utf-8?B?cnkzZ2NnOUlDS1BzYW9VYUdTTmxRbVdOZmxqNy9FbUFBd0NrNHA3eDgza3Y5?= =?utf-8?B?Vm8vTmUwK1ZubFExWTU3eGNoeTlzRG16dkEwdXJhdU5raHNDYUcwa2FSemVH?= =?utf-8?B?MitpMTVXTEgrZ0R0UVRVMlZPYldwV2x5UTFRR0NLZjMxcmlEUVYreGlnUUxC?= =?utf-8?B?SGhROHduMTNBcjhPZW1HNWNXd1Fld3hqMlNHS24wNC90R0lPK25GaTRvY1Iw?= =?utf-8?B?ZnUwak1kdTJBV0dzYjQzTjZjYU5EcDdpL1Q3Y2poRVZjZFRWRmRiUXJPZyts?= =?utf-8?B?UThsT1FkYlZiNDJhSWp1NUh6aVZ5YjNYam5ENDFVODJ4c2ZpandQNUJKM2sw?= =?utf-8?B?alFTdDZtb0RZcW9LZ0U3MFc2aklXcDQ1SHhSeERiTVdueXk5U3ZiZUFTMDRk?= =?utf-8?B?STUyYmtDbUJ2Q29SdnFhODYxdEk1L2FuQWZJNnR2eUovQWM1NG0venpUTVZz?= =?utf-8?B?c1QzWURZeDV1NFY3UTE3WWJncC9sbE4vWWpleEtPVmV1WXM4c00wSTZmRERt?= =?utf-8?B?MS9kU3F5WXZpNWlUUXNsWGQxdWNMRXU3S0NvdEJoVlAvTkxZTG04SFRuOUQy?= =?utf-8?B?M0tzMGF6VEZjcVhhUlhSMGtiUXBubjN0aEgwa2xZQnZPNS8yZWRQY1VVSmlN?= =?utf-8?B?UDFBMjJhSDQ3dnJkeVVHSzNmQ29RSlFxTGdDbll3cE0vd0VYV3lsblA3Wlc5?= =?utf-8?B?d2diSnhrUEFRcmxDWFFWdUlqQUlmUUNIUW0wUlIxVFdoTkVDNjVKMlNVTWVL?= =?utf-8?B?YW1GeGNZcG1yODQvZWptVmMxTnh2cWk5Y1pJVXYvbnp5Nkh1MWVDZ2UvSEls?= =?utf-8?B?MFpJWk5aM0tkREY5bmNzTE9uTmcwVm95U2ljd3cyUWNUQnBMM0xFU0xPcGRT?= =?utf-8?B?UTRtVzl1UWlJYitEUS9uVTZidm5GcWh5M3prcG9TZmJjZCttSFRXKzQvdllU?= =?utf-8?B?cGVHRExQQ3RHcVZ1UkhNdFdjWTRGVythUEVZWjBMZm9IQzRwZXdMSjFwODZQ?= =?utf-8?B?NWxWR1hzUzltRm9CT1U4MEk4RnorMnZ5R2FaYzZyS25iKzcwVWRkTFRuNHFE?= =?utf-8?B?dFJWQlYwM2ZReVlLemFvRW01eVRlcG1xYUIyN2xlSmJxZFJwL2xNT2FUQmZY?= =?utf-8?B?U0hobDAwYmd2WklRb0ZvZHY4bzV1SXhpRXJkd2FVQ29vMHIzSmc3N3QyZ3F0?= =?utf-8?B?UVBvVWxOTWVOcTdYOEtHSVlBUC8vS2ZTVHIvbzg3ZlB4N21yZ2h2eC9ONEpw?= =?utf-8?B?SnBDTzFrdnZNbURqS2dJMjVhemtpZUdXN2VkZGNqUGxDMHd1YmJYcHhCN0Zs?= =?utf-8?B?MzJsVkxiRjNXSytvMnBrMU5jSVo2Z0xDdWNlVDRQdXZNM0JEMVlxMHlMS1Ni?= =?utf-8?B?aGtWVzAyUEppLzVVUzdyVmZEM2RvWDM4V0VoSEJGdzBGUnhkU0toM1I1L2JF?= =?utf-8?B?dlF4cFNpMmpwSmttNVBTajgyV1FYYWhWOFVnVm1xUyt4K0pCcER1OEYzcGdh?= =?utf-8?B?OVhFdnJhSi9pZU42Nmd4MHRHQjFFSWpEd1oycWJSTlJyQzBFUjArZVphT3lQ?= =?utf-8?B?d3o2ZzFhT0dqRjhNSU9tcGxYUVhQRlFKampSVmpSYUlwY3NrcTBGK1UrckpU?= =?utf-8?B?eGsvMTZPV3ViODNTRG5JZ1ZkQUdxTDBoWmNLUG8zcUt4UGZIdmFDU0FHbzFD?= =?utf-8?B?L0hNdVVlS3JjUG0rbDlHNjJzckRUYkZWanVIaEtCc2ZWZ2RmakdLbnA4RWF0?= =?utf-8?B?WG5tV3h2KzdEdlNSVnBzZXNmMTNtOEtNRWxwSXRoMVFac1lRSGIwYnJ0SWU2?= =?utf-8?B?Wk1JZmxnTGpaclhEaGZoZUI5TjNvSDJPSXo3eXAzSkdpL20yUWNhTDVWK2ll?= =?utf-8?B?R0d4TUc1dUJEaW02QUpOWG1IQkhDTUZJOGY0bldtUms0U29udEpQUmxwR0tu?= =?utf-8?B?SEZSRDVDZU51Mldha1VyVFkxRnFGRExXcGJ5NUNGVkMwM0p4dGQzQ28yUWpN?= =?utf-8?B?UDlpTHA2UVdXazlGRUF0NE5iWlBYd1hQYjRIaE83UWJLeFNjbkNTbW93MGhZ?= =?utf-8?B?QUE9PQ==?= Content-ID: <8489D99EFB0DD248A76E974E2A063622@namprd11.prod.outlook.com> 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: 447821f7-5cd2-442d-6442-08dc5d27f966 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2024 08:42:24.8980 (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: cYV68R8X5nE6coiKvs3jP9ZTAsd4jRp9XSdSI6dXUFSaQOQqRSP9svYGClJt50Voq8kOBHVtKvreyh3LNFO8Fg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4613 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v7 11/12] avcodec: add D3D12VA hardware HEVC encoder 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" 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: T24gRG8sIDIwMjQtMDMtMTQgYXQgMTY6MTQgKzA4MDAsIHRvbmcxLnd1LWF0LWludGVsLmNvbUBm Zm1wZWcub3JnIHdyb3RlOgo+IEZyb206IFRvbmcgV3UgPHRvbmcxLnd1QGludGVsLmNvbT4KPiAK PiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIEQzRDEyIFZpZGVvIEVuY29kaW5nIFNw ZWM6Cj4gaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL0RpcmVjdFgtU3BlY3MvZDNkL0QzRDEy VmlkZW9FbmNvZGluZy5odG1sCj4gCj4gU2FtcGxlIGNvbW1hbmQgbGluZSBmb3IgdHJhbnNjb2Rp bmc6Cj4gZmZtcGVnLmV4ZSAtaHdhY2NlbCBkM2QxMnZhIC1od2FjY2VsX291dHB1dF9mb3JtYXQg ZDNkMTIgLWkgaW5wdXQubXA0Cj4gLWM6diBoZXZjX2QzZDEydmEgb3V0cHV0Lm1wNAo+IAo+IFNp Z25lZC1vZmYtYnk6IFRvbmcgV3UgPHRvbmcxLnd1QGludGVsLmNvbT4KPiAtLS0KPiDCoGNvbmZp Z3VyZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDC oCA2ICsKPiDCoGxpYmF2Y29kZWMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoMKgIDQgKy0KPiDCoGxpYmF2Y29kZWMvYWxsY29kZWNzLmPCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqDCoMKgIDEgKwo+IMKgbGliYXZjb2RlYy9kM2QxMnZhX2VuY29kZS5jwqDCoMKgwqDCoCB8 IDE1NTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gwqBsaWJhdmNvZGVjL2QzZDEy dmFfZW5jb2RlLmjCoMKgwqDCoMKgIHzCoCAzMjEgKysrKysrKwo+IMKgbGliYXZjb2RlYy9kM2Qx MnZhX2VuY29kZV9oZXZjLmMgfMKgIDk1NyArKysrKysrKysrKysrKysrKysKPiDCoDYgZmlsZXMg Y2hhbmdlZCwgMjgzOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gwqBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliYXZjb2RlYy9kM2QxMnZhX2VuY29kZS5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliYXZjb2RlYy9kM2QxMnZhX2VuY29kZS5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZjb2RlYy9kM2QxMnZhX2VuY29kZV9oZXZjLmMKPiAKPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJl IGIvY29uZmlndXJlCj4gaW5kZXggYzM0YmRkMTNmNS4uNTMwNzZmYmYyMiAxMDA3NTUKPiAtLS0g YS9jb25maWd1cmUKPiArKysgYi9jb25maWd1cmUKPiBAQCAtMjU3MCw2ICsyNTcwLDcgQEAgQ09O RklHX0VYVFJBPSIKPiDCoMKgwqDCoCB0cGVsZHNwCj4gwqDCoMKgwqAgdmFhcGlfMQo+IMKgwqDC oMKgIHZhYXBpX2VuY29kZQo+ICvCoMKgwqAgZDNkMTJ2YV9lbmNvZGUKClBsZWFzZSBhZGQgdGhl IGVudHJ5IGluIGFscGhhYmV0aWMgb3JkZXIKCgo+IMKgwqDCoMKgIHZjMWRzcAo+IMKgwqDCoMKg IHZpZGVvZHNwCj4gwqDCoMKgwqAgdnAzZHNwCj4gQEAgLTMyMTQsNiArMzIxNSw3IEBAIHdtdjNf dmFhcGlfaHdhY2NlbF9zZWxlY3Q9InZjMV92YWFwaV9od2FjY2VsIgo+IMKgd212M192ZHBhdV9o d2FjY2VsX3NlbGVjdD0idmMxX3ZkcGF1X2h3YWNjZWwiCj4gwqAKPiDCoCMgaGFyZHdhcmUtYWNj ZWxlcmF0ZWQgY29kZWNzCj4gK2QzZDEydmFfZW5jb2RlX2RlcHM9ImQzZDEydmEgSUQzRDEyVmlk ZW9FbmNvZGVyIGQzZDEyX2VuY29kZXJfZmVhdHVyZSIKPiDCoG1lZGlhZm91bmRhdGlvbl9kZXBz PSJtZnRyYW5zZm9ybV9oIE1GQ3JlYXRlQWxpZ25lZE1lbW9yeUJ1ZmZlciIKPiDCoG9teF9kZXBz PSJsaWJkbCBwdGhyZWFkcyIKPiDCoG9teF9ycGlfc2VsZWN0PSJvbXgiCj4gQEAgLTMyODAsNiAr MzI4Miw3IEBAIGgyNjRfdjRsMm0ybV9lbmNvZGVyX2RlcHM9InY0bDJfbTJtIGgyNjRfdjRsMl9t Mm0iCj4gwqBoZXZjX2FtZl9lbmNvZGVyX2RlcHM9ImFtZiIKPiDCoGhldmNfY3V2aWRfZGVjb2Rl cl9kZXBzPSJjdXZpZCIKPiDCoGhldmNfY3V2aWRfZGVjb2Rlcl9zZWxlY3Q9ImhldmNfbXA0dG9h bm5leGJfYnNmIgo+ICtoZXZjX2QzZDEydmFfZW5jb2Rlcl9zZWxlY3Q9ImNic19oMjY1IGQzZDEy dmFfZW5jb2RlIgo+IMKgaGV2Y19tZWRpYWNvZGVjX2RlY29kZXJfZGVwcz0ibWVkaWFjb2RlYyIK PiDCoGhldmNfbWVkaWFjb2RlY19kZWNvZGVyX3NlbGVjdD0iaGV2Y19tcDR0b2FubmV4Yl9ic2Yg aGV2Y19wYXJzZXIiCj4gwqBoZXZjX21lZGlhY29kZWNfZW5jb2Rlcl9kZXBzPSJtZWRpYWNvZGVj Igo+IEBAIC02NjIwLDYgKzY2MjMsOSBAQCBjaGVja190eXBlICJ3aW5kb3dzLmggZDNkMTEuaCIg IklEM0QxMVZpZGVvRGVjb2RlciIKPiDCoGNoZWNrX3R5cGUgIndpbmRvd3MuaCBkM2QxMS5oIiAi SUQzRDExVmlkZW9Db250ZXh0Igo+IMKgY2hlY2tfdHlwZSAid2luZG93cy5oIGQzZDEyLmgiICJJ RDNEMTJEZXZpY2UiCj4gwqBjaGVja190eXBlICJ3aW5kb3dzLmggZDNkMTJ2aWRlby5oIiAiSUQz RDEyVmlkZW9EZWNvZGVyIgo+ICtjaGVja190eXBlICJ3aW5kb3dzLmggZDNkMTJ2aWRlby5oIiAi SUQzRDEyVmlkZW9FbmNvZGVyIgo+ICt0ZXN0X2NvZGUgY2MgIndpbmRvd3MuaCBkM2QxMnZpZGVv LmgiICJEM0QxMl9GRUFUVVJFX1ZJREVPIGZlYXR1cmUgPQo+IEQzRDEyX0ZFQVRVUkVfVklERU9f RU5DT0RFUl9DT0RFQyIgJiYgXAo+ICt0ZXN0X2NvZGUgY2MgIndpbmRvd3MuaCBkM2QxMnZpZGVv LmgiCj4gIkQzRDEyX0ZFQVRVUkVfREFUQV9WSURFT19FTkNPREVSX1JFU09VUkNFX1JFUVVJUkVN RU5UUyByZXEiICYmIGVuYWJsZQo+IGQzZDEyX2VuY29kZXJfZmVhdHVyZQo+IMKgY2hlY2tfdHlw ZSAid2luZG93cy5oIiAiRFBJX0FXQVJFTkVTU19DT05URVhUIiAtRF9XSU4zMl9XSU5OVD0weDBB MDAKPiDCoGNoZWNrX3R5cGUgImQzZDkuaCBkeHZhMmFwaS5oIiBEWFZBMl9Db25maWdQaWN0dXJl RGVjb2RlIC0KPiBEX1dJTjMyX1dJTk5UPTB4MDYwMgo+IMKgY2hlY2tfZnVuY19oZWFkZXJzIG1m YXBpLmggTUZDcmVhdGVBbGlnbmVkTWVtb3J5QnVmZmVyIC1sbWZwbGF0Cj4gZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gaW5kZXggY2JmYWU1 ZjE4Mi4uY2RkYTNmMGQwYSAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4gKysr IGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IEBAIC04NCw2ICs4NCw3IEBAIE9CSlMtJChDT05GSUdf Q0JTX0pQRUcpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGNic19qcGVnLm8KPiDC oE9CSlMtJChDT05GSUdfQ0JTX01QRUcyKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0g Y2JzX21wZWcyLm8KPiDCoE9CSlMtJChDT05GSUdfQ0JTX1ZQOCnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArPSBjYnNfdnA4Lm8gdnA4ZGF0YS5vCj4gwqBPQkpTLSQoQ09ORklHX0NC U19WUDkpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gY2JzX3ZwOS5vCj4gK09C SlMtJChDT05GSUdfRDNEMTJWQV9FTkNPREUpwqDCoMKgwqDCoMKgwqDCoMKgICs9IGQzZDEydmFf ZW5jb2RlLm8gaHdfYmFzZV9lbmNvZGUubwo+IMKgT0JKUy0kKENPTkZJR19ERUZMQVRFX1dSQVBQ RVIpwqDCoMKgwqDCoMKgwqDCoCArPSB6bGliX3dyYXBwZXIubwo+IMKgT0JKUy0kKENPTkZJR19E T1ZJX1JQVSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZG92aV9ycHUubwo+IMKg T0JKUy0kKENPTkZJR19FUlJPUl9SRVNJTElFTkNFKcKgwqDCoMKgwqDCoMKgICs9IGVycm9yX3Jl c2lsaWVuY2Uubwo+IEBAIC00MzUsNiArNDM2LDcgQEAgT0JKUy0kKENPTkZJR19IRVZDX0RFQ09E RVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBoZXZjZGVjLm8KPiBoZXZjX212cy5vIFwKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaDI3NC5vCj4gwqBPQkpTLSQoQ09ORklHX0hFVkNf QU1GX0VOQ09ERVIpwqDCoMKgwqDCoMKgwqAgKz0gYW1mZW5jX2hldmMubwo+IMKgT0JKUy0kKENP TkZJR19IRVZDX0NVVklEX0RFQ09ERVIpwqDCoMKgwqDCoCArPSBjdXZpZGRlYy5vCj4gK09CSlMt JChDT05GSUdfSEVWQ19EM0QxMlZBX0VOQ09ERVIpwqDCoMKgICs9IGQzZDEydmFfZW5jb2RlX2hl dmMubwo+IMKgT0JKUy0kKENPTkZJR19IRVZDX01FRElBQ09ERUNfREVDT0RFUikgKz0gbWVkaWFj b2RlY2RlYy5vCj4gwqBPQkpTLSQoQ09ORklHX0hFVkNfTUVESUFDT0RFQ19FTkNPREVSKSArPSBt ZWRpYWNvZGVjZW5jLm8KPiDCoE9CSlMtJChDT05GSUdfSEVWQ19NRl9FTkNPREVSKcKgwqDCoMKg wqDCoMKgwqAgKz0gbWZlbmMubyBtZl91dGlscy5vCj4gQEAgLTEyNjMsNyArMTI2NSw3IEBAIFNL SVBIRUFERVJTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICs9Cj4gJV90YWJsZWdlbi5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBcCj4gwqAKPiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX0FNRinCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCArPSBhbWZlbmMuaAo+IMKgU0tJUEhFQURFUlMtJChDT05GSUdfRDNEMTFWQSnCoMKg wqDCoMKgwqDCoMKgwqAgKz0gZDNkMTF2YS5oIGR4dmEyX2ludGVybmFsLmgKPiAtU0tJUEhFQURF UlMtJChDT05GSUdfRDNEMTJWQSnCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZDNkMTJ2YV9kZWNvZGUu aAo+ICtTS0lQSEVBREVSUy0kKENPTkZJR19EM0QxMlZBKcKgwqDCoMKgwqDCoMKgwqDCoCArPSBk M2QxMnZhX2RlY29kZS5oIGQzZDEydmFfZW5jb2RlLmgKPiDCoFNLSVBIRUFERVJTLSQoQ09ORklH X0RYVkEyKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZHh2YTIuaCBkeHZhMl9pbnRlcm5hbC5o Cj4gwqBTS0lQSEVBREVSUy0kKENPTkZJR19KTkkpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Kz0gZmZqbmkuaAo+IMKgU0tJUEhFQURFUlMtJChDT05GSUdfTENNUzIpwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCArPSBmZmxjbXMyLmgKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxjb2RlY3Mu YyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiBpbmRleCAyMzg2YjQ1MGE2Li43YjUwOTMyMzNj IDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiArKysgYi9saWJhdmNvZGVj L2FsbGNvZGVjcy5jCj4gQEAgLTg1NSw2ICs4NTUsNyBAQCBleHRlcm4gY29uc3QgRkZDb2RlYyBm Zl9oMjY0X3ZhYXBpX2VuY29kZXI7Cj4gwqBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oMjY0X3Zp ZGVvdG9vbGJveF9lbmNvZGVyOwo+IMKgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaGV2Y19hbWZf ZW5jb2RlcjsKPiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfY3V2aWRfZGVjb2RlcjsK PiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaGV2Y19kM2QxMnZhX2VuY29kZXI7Cj4gwqBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9oZXZjX21lZGlhY29kZWNfZGVjb2RlcjsKPiDCoGV4dGVybiBj b25zdCBGRkNvZGVjIGZmX2hldmNfbWVkaWFjb2RlY19lbmNvZGVyOwo+IMKgZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfaGV2Y19tZl9lbmNvZGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2Qz ZDEydmFfZW5jb2RlLmMgYi9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjg4YTA4ZWZhNzYKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvbGliYXZjb2RlYy9kM2QxMnZhX2VuY29kZS5jCj4gQEAgLTAsMCArMSwxNTUwIEBA Cj4gKy8qCj4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlvbiB2aWRlbyBlbmNvZGVyCj4g KyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBH TlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K PiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQo+IFVT QQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9jb21tb24uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5o Igo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2xvZy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3Bp eGRlc2MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YV9pbnRlcm5h bC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgiCj4gKwo+ICsj aW5jbHVkZSAiYXZjb2RlYy5oIgo+ICsjaW5jbHVkZSAiZDNkMTJ2YV9lbmNvZGUuaCIKPiArI2lu Y2x1ZGUgImVuY29kZS5oIgo+ICsKPiArY29uc3QgQVZDb2RlY0hXQ29uZmlnSW50ZXJuYWwgKmNv bnN0IGZmX2QzZDEydmFfZW5jb2RlX2h3X2NvbmZpZ3NbXSA9IHsKPiArwqDCoMKgIEhXX0NPTkZJ R19FTkNPREVSX0ZSQU1FUyhEM0QxMiwgRDNEMTJWQSksCj4gK8KgwqDCoCBOVUxMLAo+ICt9Owo+ ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2ZlbmNlX2NvbXBsZXRpb24oQVZEM0QxMlZBU3luY0Nv bnRleHQgKnBzeW5jX2N0eCkKPiArewo+ICvCoMKgwqAgdWludDY0X3QgY29tcGxldGlvbiA9IElE M0QxMkZlbmNlX0dldENvbXBsZXRlZFZhbHVlKHBzeW5jX2N0eC0+ZmVuY2UpOwo+ICvCoMKgwqAg aWYgKGNvbXBsZXRpb24gPCBwc3luY19jdHgtPmZlbmNlX3ZhbHVlKSB7Cj4gK8KgwqDCoMKgwqDC oMKgIGlmIChGQUlMRUQoSUQzRDEyRmVuY2VfU2V0RXZlbnRPbkNvbXBsZXRpb24ocHN5bmNfY3R4 LT5mZW5jZSwKPiBwc3luY19jdHgtPmZlbmNlX3ZhbHVlLCBwc3luY19jdHgtPmV2ZW50KSkpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgIFdhaXRGb3JTaW5nbGVPYmplY3RFeChwc3luY19jdHgtPmV2ZW50LCBJTkZJ TklURSwgRkFMU0UpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGQzZDEydmFfc3luY193aXRoX2dwdShBVkNvZGVjQ29udGV4dCAqYXZj dHgpCj4gK3sKPiArwqDCoMKgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICsKPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkNvbW1hbmRRdWV1ZV9TaWduYWwo Y3R4LT5jb21tYW5kX3F1ZXVlLCBjdHgtCj4gPnN5bmNfY3R4LmZlbmNlLCArK2N0eC0+c3luY19j dHguZmVuY2VfdmFsdWUpKTsKPiArwqDCoMKgIHJldHVybiBkM2QxMnZhX2ZlbmNlX2NvbXBsZXRp b24oJmN0eC0+c3luY19jdHgpOwo+ICsKPiArZmFpbDoKPiArwqDCoMKgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Cj4gK30KPiArCj4gK3R5cGVkZWYgc3RydWN0IENvbW1hbmRBbGxvY2F0b3Igewo+ ICvCoMKgwqAgSUQzRDEyQ29tbWFuZEFsbG9jYXRvciAqY29tbWFuZF9hbGxvY2F0b3I7Cj4gK8Kg wqDCoCB1aW50NjRfdCBmZW5jZV92YWx1ZTsKPiArfSBDb21tYW5kQWxsb2NhdG9yOwo+ICsKPiAr c3RhdGljIGludCBkM2QxMnZhX2dldF92YWxpZF9jb21tYW5kX2FsbG9jYXRvcihBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCj4gSUQzRDEyQ29tbWFuZEFsbG9jYXRvciAqKnBwQWxsb2NhdG9yKQo+ICt7 Cj4gK8KgwqDCoCBIUkVTVUxUIGhyOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRleHQgKmN0 eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBDb21tYW5kQWxsb2NhdG9yIGFsbG9jYXRv cjsKPiArCj4gK8KgwqDCoCBpZiAoYXZfZmlmb19wZWVrKGN0eC0+YWxsb2NhdG9yX3F1ZXVlLCAm YWxsb2NhdG9yLCAxLCAwKSA+PSAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHVpbnQ2NF90IGNvbXBs ZXRpb24gPSBJRDNEMTJGZW5jZV9HZXRDb21wbGV0ZWRWYWx1ZShjdHgtCj4gPnN5bmNfY3R4LmZl bmNlKTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGNvbXBsZXRpb24gPj0gYWxsb2NhdG9yLmZlbmNl X3ZhbHVlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnBwQWxsb2NhdG9yID0gYWxsb2Nh dG9yLmNvbW1hbmRfYWxsb2NhdG9yOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2ZpZm9f cmVhZChjdHgtPmFsbG9jYXRvcl9xdWV1ZSwgJmFsbG9jYXRvciwgMSk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiAr Cj4gK8KgwqDCoCBociA9IElEM0QxMkRldmljZV9DcmVhdGVDb21tYW5kQWxsb2NhdG9yKGN0eC0+ aHdjdHgtPmRldmljZSwKPiBEM0QxMl9DT01NQU5EX0xJU1RfVFlQRV9WSURFT19FTkNPREUsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJklJRF9JRDNEMTJDb21tYW5kQWxsb2Nh dG9yLAo+ICh2b2lkICoqKXBwQWxsb2NhdG9yKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IGNyZWF0ZSBhIG5ldyBjb21tYW5kCj4gYWxsb2NhdG9yIVxuIik7Cj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9kaXNjYXJkX2NvbW1hbmRfYWxsb2Nh dG9yKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiBJRDNEMTJDb21tYW5kQWxsb2NhdG9yICpwQWxs b2NhdG9yLCB1aW50NjRfdCBmZW5jZV92YWx1ZSkKPiArewo+ICvCoMKgwqAgRDNEMTJWQUVuY29k ZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKwo+ICvCoMKgwqAgQ29tbWFuZEFs bG9jYXRvciBhbGxvY2F0b3IgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5jb21tYW5kX2FsbG9jYXRv ciA9IHBBbGxvY2F0b3IsCj4gK8KgwqDCoMKgwqDCoMKgIC5mZW5jZV92YWx1ZSA9IGZlbmNlX3Zh bHVlLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBhdl9maWZvX3dyaXRlKGN0eC0+YWxsb2Nh dG9yX3F1ZXVlLCAmYWxsb2NhdG9yLCAxKTsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2VuY29kZV93YWl0KEFWQ29kZWNDb250ZXh0ICphdmN0 eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEQzRDEyVkFFbmNvZGVQaWN0dXJlICpwaWMpCj4gK3sKPiArwqDCoMKgIEQzRDEy VkFFbmNvZGVDb250ZXh0ICpjdHjCoMKgwqDCoCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDC oCBIV0Jhc2VFbmNvZGVQaWN0dXJlICpiYXNlX3BpYyA9IChIV0Jhc2VFbmNvZGVQaWN0dXJlICop cGljOwo+ICvCoMKgwqAgdWludDY0X3QgY29tcGxldGlvbjsKPiArCj4gK8KgwqDCoCBhdl9hc3Nl cnQwKGJhc2VfcGljLT5lbmNvZGVfaXNzdWVkKTsKPiArCj4gK8KgwqDCoCBpZiAoYmFzZV9waWMt PmVuY29kZV9jb21wbGV0ZSkgewo+ICvCoMKgwqDCoMKgwqDCoCAvLyBBbHJlYWR5IHdhaXRlZCBm b3IgdGhpcyBwaWN0dXJlLgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiArwqDCoMKgIH0K PiArCj4gK8KgwqDCoCBjb21wbGV0aW9uID0gSUQzRDEyRmVuY2VfR2V0Q29tcGxldGVkVmFsdWUo Y3R4LT5zeW5jX2N0eC5mZW5jZSk7Cj4gK8KgwqDCoCBpZiAoY29tcGxldGlvbiA8IHBpYy0+ZmVu Y2VfdmFsdWUpIHsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKEZBSUxFRChJRDNEMTJGZW5jZV9TZXRF dmVudE9uQ29tcGxldGlvbihjdHgtPnN5bmNfY3R4LmZlbmNlLCBwaWMtCj4gPmZlbmNlX3ZhbHVl LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5z eW5jX2N0eC5ldmVudCkpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoY3R4 LT5zeW5jX2N0eC5ldmVudCwgSU5GSU5JVEUsIEZBTFNFKTsKPiArwqDCoMKgIH0KPiArCj4gK8Kg wqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlN5bmMgdG8gcGljICUiUFJJZDY0Ii8l IlBSSWQ2NCIgIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAiKGlucHV0IHN1cmZhY2UgJXApLlxu IiwgYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2Vf cGljLT5lbmNvZGVfb3JkZXIsIHBpYy0+aW5wdXRfc3VyZmFjZS0+dGV4dHVyZSk7Cj4gKwo+ICvC oMKgwqAgYXZfZnJhbWVfZnJlZSgmYmFzZV9waWMtPmlucHV0X2ltYWdlKTsKPiArCj4gK8KgwqDC oCBiYXNlX3BpYy0+ZW5jb2RlX2NvbXBsZXRlID0gMTsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2NyZWF0ZV9tZXRhZGF0YV9idWZmZXJz KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgRDNEMTJWQUVuY29kZVBpY3R1cmUgKnBpYykKPiArewo+ICvCoMKgwqAgRDNE MTJWQUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBpbnQg d2lkdGggPSBzaXplb2YoRDNEMTJfVklERU9fRU5DT0RFUl9PVVRQVVRfTUVUQURBVEEpICsKPiBz aXplb2YoRDNEMTJfVklERU9fRU5DT0RFUl9GUkFNRV9TVUJSRUdJT05fTUVUQURBVEEpOwo+ICvC oMKgwqAgRDNEMTJfSEVBUF9QUk9QRVJUSUVTIGVuY29kZWRfbWV0YV9wcm9wcyA9IHsgLlR5cGUg PQo+IEQzRDEyX0hFQVBfVFlQRV9ERUZBVUxUIH0sIHJlc29sdmVkX21ldGFfcHJvcHM7Cj4gK8Kg wqDCoCBEM0QxMl9IRUFQX1RZUEUgcmVzb2x2ZWRfaGVhcF90eXBlID0gRDNEMTJfSEVBUF9UWVBF X1JFQURCQUNLOwo+ICvCoMKgwqAgSFJFU1VMVCBocjsKPiArCj4gK8KgwqDCoCBEM0QxMl9SRVNP VVJDRV9ERVNDIG1ldGFfZGVzYyA9IHsKPiArwqDCoMKgwqDCoMKgwqAgLkRpbWVuc2lvbsKgwqDC oMKgwqDCoMKgID0gRDNEMTJfUkVTT1VSQ0VfRElNRU5TSU9OX0JVRkZFUiwKPiArwqDCoMKgwqDC oMKgwqAgLkFsaWdubWVudMKgwqDCoMKgwqDCoMKgID0gMCwKPiArwqDCoMKgwqDCoMKgwqAgLldp ZHRowqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+cmVxLk1heEVuY29kZXJPdXRwdXRNZXRh ZGF0YUJ1ZmZlclNpemUsCj4gK8KgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDCoMKg wqDCoCA9IDEsCj4gK8KgwqDCoMKgwqDCoMKgIC5EZXB0aE9yQXJyYXlTaXplID0gMSwKPiArwqDC oMKgwqDCoMKgwqAgLk1pcExldmVsc8KgwqDCoMKgwqDCoMKgID0gMSwKPiArwqDCoMKgwqDCoMKg wqAgLkZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRFhHSV9GT1JNQVRfVU5LTk9XTiwKPiAr wqDCoMKgwqDCoMKgwqAgLlNhbXBsZURlc2PCoMKgwqDCoMKgwqAgPSB7IC5Db3VudCA9IDEsIC5R dWFsaXR5ID0gMCB9LAo+ICvCoMKgwqDCoMKgwqDCoCAuTGF5b3V0wqDCoMKgwqDCoMKgwqDCoMKg wqAgPSBEM0QxMl9URVhUVVJFX0xBWU9VVF9ST1dfTUFKT1IsCj4gK8KgwqDCoMKgwqDCoMKgIC5G bGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9SRVNPVVJDRV9GTEFHX05PTkUsCj4g K8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIGhyID0gSUQzRDEyRGV2aWNlX0NyZWF0ZUNvbW1pdHRl ZFJlc291cmNlKGN0eC0+aHdjdHgtPmRldmljZSwKPiAmZW5jb2RlZF9tZXRhX3Byb3BzLCBEM0Qx Ml9IRUFQX0ZMQUdfTk9ORSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZt ZXRhX2Rlc2MsCj4gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLCBOVUxMLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJklJRF9JRDNEMTJSZXNvdXJjZSwgKHZvaWQKPiAq KikmcGljLT5lbmNvZGVkX21ldGFkYXRhKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNy ZWF0ZSBtZXRhZGF0YSBidWZmZXIuXG4iKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJS T1JfVU5LTk9XTjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBjdHgtPmh3Y3R4LT5kZXZpY2Ut PmxwVnRibC0+R2V0Q3VzdG9tSGVhcFByb3BlcnRpZXMoY3R4LT5od2N0eC0+ZGV2aWNlLAo+ICZy ZXNvbHZlZF9tZXRhX3Byb3BzLCAwLCByZXNvbHZlZF9oZWFwX3R5cGUpOwo+ICsKPiArwqDCoMKg IG1ldGFfZGVzYy5XaWR0aCA9IHdpZHRoOwo+ICsKPiArwqDCoMKgIGhyID0gSUQzRDEyRGV2aWNl X0NyZWF0ZUNvbW1pdHRlZFJlc291cmNlKGN0eC0+aHdjdHgtPmRldmljZSwKPiAmcmVzb2x2ZWRf bWV0YV9wcm9wcywgRDNEMTJfSEVBUF9GTEFHX05PTkUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmbWV0YV9kZXNjLAo+IEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTiwg TlVMTCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZJSURfSUQzRDEyUmVz b3VyY2UsICh2b2lkCj4gKiopJnBpYy0+cmVzb2x2ZWRfbWV0YWRhdGEpOwo+ICsKPiArwqDCoMKg IGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgbWV0YWRhdGEKPiBidWZmZXIuXG4iKTsK PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfVU5LTk9XTjsKPiArwqDCoMKgIH0KPiAr Cj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2VuY29k ZV9pc3N1ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IEhXQmFzZUVuY29k ZVBpY3R1cmUgKmJhc2VfcGljKQo+ICt7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpi YXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlQ29udGV4 dMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgQVZEM0QxMlZBRnJh bWVzQ29udGV4dCAqZnJhbWVzX2h3Y3R4ID0gYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+aHdjdHg7 Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlUGljdHVyZSAqcGljID0gKEQzRDEyVkFFbmNvZGVQaWN0 dXJlICopYmFzZV9waWM7Cj4gK8KgwqDCoCBpbnQgZXJyLCBpLCBqOwo+ICvCoMKgwqAgSFJFU1VM VCBocjsKPiArwqDCoMKgIGNoYXIgZGF0YVtNQVhfUEFSQU1fQlVGRkVSX1NJWkVdOwo+ICvCoMKg wqAgdm9pZCAqcHRyOwo+ICvCoMKgwqAgc2l6ZV90IGJpdF9sZW47Cj4gK8KgwqDCoCBJRDNEMTJD b21tYW5kQWxsb2NhdG9yICpjb21tYW5kX2FsbG9jYXRvciA9IE5VTEw7Cj4gK8KgwqDCoCBJRDNE MTJWaWRlb0VuY29kZUNvbW1hbmRMaXN0MiAqY21kX2xpc3QgPSBjdHgtPmNvbW1hbmRfbGlzdDsK PiArwqDCoMKgIEQzRDEyX1JFU09VUkNFX0JBUlJJRVIgYmFycmllcnNbMzJdID0geyAwIH07Cj4g K8KgwqDCoCBEM0QxMl9WSURFT19FTkNPREVfUkVGRVJFTkNFX0ZSQU1FUyBkM2QxMl9yZWZzID0g eyAwIH07Cj4gKwo+ICvCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9FTkNPREVGUkFNRV9JTlBV VF9BUkdVTUVOVFMgaW5wdXRfYXJncyA9IHsKPiArwqDCoMKgwqDCoMKgwqAgLlNlcXVlbmNlQ29u dHJvbERlc2MgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkZsYWdzID0gRDNEMTJfVklE RU9fRU5DT0RFUl9TRVFVRU5DRV9DT05UUk9MX0ZMQUdfTk9ORSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAuSW50cmFSZWZyZXNoQ29uZmlnID0geyAwIH0sCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgLlJhdGVDb250cm9sID0gY3R4LT5yYywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAu UGljdHVyZVRhcmdldFJlc29sdXRpb24gPSBjdHgtPnJlc29sdXRpb24sCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLlNlbGVjdGVkTGF5b3V0TW9kZSA9Cj4gRDNEMTJfVklERU9fRU5DT0RFUl9G UkFNRV9TVUJSRUdJT05fTEFZT1VUX01PREVfRlVMTF9GUkFNRSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAuRnJhbWVTdWJyZWdpb25zTGF5b3V0RGF0YSA9IHsgMCB9LAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC5Db2RlY0dvcFNlcXVlbmNlID0gY3R4LT5nb3AsCj4gK8KgwqDCoMKgwqDC oMKgIH0sCj4gK8KgwqDCoMKgwqDCoMKgIC5wSW5wdXRGcmFtZSA9IHBpYy0+aW5wdXRfc3VyZmFj ZS0+dGV4dHVyZSwKPiArwqDCoMKgwqDCoMKgwqAgLklucHV0RnJhbWVTdWJyZXNvdXJjZSA9IDAs Cj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfRU5DT0RFRlJB TUVfT1VUUFVUX0FSR1VNRU5UUyBvdXRwdXRfYXJncyA9IHsgMCB9Owo+ICsKPiArwqDCoMKgIEQz RDEyX1ZJREVPX0VOQ09ERVJfUkVTT0xWRV9NRVRBREFUQV9JTlBVVF9BUkdVTUVOVFMgaW5wdXRf bWV0YWRhdGEgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5FbmNvZGVyQ29kZWMgPSBjdHgtPmNvZGVj LT5kM2QxMl9jb2RlYywKPiArwqDCoMKgwqDCoMKgwqAgLkVuY29kZXJQcm9maWxlID0gY3R4LT5w cm9maWxlLT5kM2QxMl9wcm9maWxlLAo+ICvCoMKgwqDCoMKgwqDCoCAuRW5jb2RlcklucHV0Rm9y bWF0ID0gZnJhbWVzX2h3Y3R4LT5mb3JtYXQsCj4gK8KgwqDCoMKgwqDCoMKgIC5FbmNvZGVkUGlj dHVyZUVmZmVjdGl2ZVJlc29sdXRpb24gPSBjdHgtPnJlc29sdXRpb24sCj4gK8KgwqDCoCB9Owo+ ICsKPiArwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfUkVTT0xWRV9NRVRBREFUQV9PVVRQVVRf QVJHVU1FTlRTIG91dHB1dF9tZXRhZGF0YSA9IHsKPiAwIH07Cj4gKwo+ICvCoMKgwqAgbWVtc2V0 KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7Cj4gKwo+ICvCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfREVCVUcsICJJc3N1aW5nIGVuY29kZSBmb3IgcGljICUiUFJJZDY0Ii8lIlBSSWQ2NCIgIgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAiYXMgdHlwZSAlcy5cbiIsIGJhc2VfcGljLT5kaXNwbGF5 X29yZGVyLCBiYXNlX3BpYy0+ZW5jb2RlX29yZGVyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBm Zl9od19iYXNlX2VuY29kZV9nZXRfcGljdHlwZV9uYW1lKGJhc2VfcGljLT50eXBlKSk7Cj4gK8Kg wqDCoCBpZiAoYmFzZV9waWMtPm5iX3JlZnNbMF0gPT0gMCAmJiBiYXNlX3BpYy0+bmJfcmVmc1sx XSA9PSAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi Tm8gcmVmZXJlbmNlIHBpY3R1cmVzLlxuIik7Cj4gK8KgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDC oMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkwwIHJlZmVycyB0byIpOwo+ICvC oMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMF07IGkrKykg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi ICUiUFJJZDY0Ii8lIlBSSWQ2NCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJhc2VfcGljLT5yZWZzWzBdW2ldLT5kaXNwbGF5X29yZGVyLCBiYXNlX3BpYy0+cmVmc1sw XVtpXS0KPiA+ZW5jb2RlX29yZGVyKTsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKg wqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIi5cbiIpOwo+ICsKPiArwqDCoMKgwqDC oMKgwqAgaWYgKGJhc2VfcGljLT5uYl9yZWZzWzFdKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJMMSByZWZlcnMgdG8iKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGkr Kykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfREVCVUcsICIgJSJQUklkNjQiLyUiUFJJZDY0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlX3BpYy0+cmVmc1sxXVtpXS0+ZGlzcGxheV9vcmRl ciwgYmFzZV9waWMtCj4gPnJlZnNbMV1baV0tPmVuY29kZV9vcmRlcik7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0RFQlVHLCAiLlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiArCj4g K8KgwqDCoCBhdl9hc3NlcnQwKCFiYXNlX3BpYy0+ZW5jb2RlX2lzc3VlZCk7Cj4gK8KgwqDCoCBm b3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMF07IGkrKykgewo+ICvCoMKgwqDCoMKg wqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT5yZWZzWzBdW2ldKTsKPiArwqDCoMKgwqDCoMKgwqAg YXZfYXNzZXJ0MChiYXNlX3BpYy0+cmVmc1swXVtpXS0+ZW5jb2RlX2lzc3VlZCk7Cj4gK8KgwqDC oCB9Cj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGkrKykg ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKGJhc2VfcGljLT5yZWZzWzFdW2ldKTsKPiAr wqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+cmVmc1sxXVtpXS0+ZW5jb2RlX2lz c3VlZCk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVC VUcsICJJbnB1dCBzdXJmYWNlIGlzICVwLlxuIiwgcGljLT5pbnB1dF9zdXJmYWNlLQo+ID50ZXh0 dXJlKTsKPiArCj4gK8KgwqDCoCBlcnIgPSBhdl9od2ZyYW1lX2dldF9idWZmZXIoYmFzZV9jdHgt PnJlY29uX2ZyYW1lc19yZWYsIGJhc2VfcGljLQo+ID5yZWNvbl9pbWFnZSwgMCk7Cj4gK8KgwqDC oCBpZiAoZXJyIDwgMCkgewo+ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSBBVkVSUk9SKEVOT01FTSk7 Cj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBw aWMtPnJlY29uX3N1cmZhY2UgPSAoQVZEM0QxMlZBRnJhbWUgKiliYXNlX3BpYy0+cmVjb25faW1h Z2UtPmRhdGFbMF07Cj4gK8KgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlJlY29u IHN1cmZhY2UgaXMgJXAuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPnJlY29uX3N1 cmZhY2UtPnRleHR1cmUpOwo+ICsKPiArwqDCoMKgIHBpYy0+b3V0cHV0X2J1ZmZlcl9yZWYgPSBh dl9idWZmZXJfcG9vbF9nZXQoY3R4LT5vdXRwdXRfYnVmZmVyX3Bvb2wpOwo+ICvCoMKgwqAgaWYg KCFwaWMtPm91dHB1dF9idWZmZXJfcmVmKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJS T1IoRU5PTUVNKTsKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqAgfQo+ICvC oMKgwqAgcGljLT5vdXRwdXRfYnVmZmVyID0gKElEM0QxMlJlc291cmNlICopcGljLT5vdXRwdXRf YnVmZmVyX3JlZi0+ZGF0YTsKPiArwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi T3V0cHV0IGJ1ZmZlciBpcyAlcC5cbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHBpYy0+b3V0 cHV0X2J1ZmZlcik7Cj4gKwo+ICvCoMKgwqAgZXJyID0gZDNkMTJ2YV9lbmNvZGVfY3JlYXRlX21l dGFkYXRhX2J1ZmZlcnMoYXZjdHgsIHBpYyk7Cj4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiArwqDC oMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiArwqDCoMKgIGlmIChjdHgtPmNvZGVjLT5pbml0 X3BpY3R1cmVfcGFyYW1zKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IGN0eC0+Y29kZWMtPmlu aXRfcGljdHVyZV9wYXJhbXMoYXZjdHgsIHBpYyk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChlcnIg PCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJGYWlsZWQgdG8gaW5pdGlhbGlzZSBwaWN0dXJlICIKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICJwYXJhbWV0ZXJzOiAlZC5cbiIsIGVycik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9 Cj4gKwo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpIHsK PiArwqDCoMKgwqDCoMKgwqAgaWYgKGN0eC0+Y29kZWMtPndyaXRlX3NlcXVlbmNlX2hlYWRlcikg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJpdF9sZW4gPSA4ICogc2l6ZW9mKGRhdGEpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IGN0eC0+Y29kZWMtPndyaXRlX3NlcXVlbmNl X2hlYWRlcihhdmN0eCwgZGF0YSwgJmJpdF9sZW4pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChlcnIgPCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byB3cml0ZSBwZXItc2VxdWVuY2UgIgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaGVhZGVyOiAlZC5c biIsIGVycik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoCBwaWMtPmhlYWRlcl9zaXplID0gKGludCliaXRfbGVuIC8gODsKPiArwqDCoMKg wqDCoMKgwqAgcGljLT5oZWFkZXJfc2l6ZSA9IHBpYy0+aGVhZGVyX3NpemUgJSBjdHgtCj4gPnJl cS5Db21wcmVzc2VkQml0c3RyZWFtQnVmZmVyQWNjZXNzQWxpZ25tZW50ID8KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGRkFMSUdOKHBpYy0+ aGVhZGVyX3NpemUsIGN0eC0KPiA+cmVxLkNvbXByZXNzZWRCaXRzdHJlYW1CdWZmZXJBY2Nlc3NB bGlnbm1lbnQpIDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwaWMtPmhlYWRlcl9zaXplOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaHIgPSBJ RDNEMTJSZXNvdXJjZV9NYXAocGljLT5vdXRwdXRfYnVmZmVyLCAwLCBOVUxMLCAodm9pZCAqKikm cHRyKTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKEZBSUxFRChocikpIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlcnIgPSBBVkVSUk9SX1VOS05PV047Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ290byBmYWlsOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBt ZW1jcHkocHRyLCBkYXRhLCBwaWMtPmhlYWRlcl9zaXplKTsKPiArwqDCoMKgwqDCoMKgwqAgSUQz RDEyUmVzb3VyY2VfVW5tYXAocGljLT5vdXRwdXRfYnVmZmVyLCAwLCBOVUxMKTsKPiArwqDCoMKg IH0KPiArCj4gK8KgwqDCoCBkM2QxMl9yZWZzLk51bVRleHR1cmUyRHMgPSBiYXNlX3BpYy0+bmJf cmVmc1swXSArIGJhc2VfcGljLT5uYl9yZWZzWzFdOwo+ICvCoMKgwqAgaWYgKGQzZDEyX3JlZnMu TnVtVGV4dHVyZTJEcykgewo+ICvCoMKgwqDCoMKgwqDCoCBkM2QxMl9yZWZzLnBwVGV4dHVyZTJE cyA9IGF2X2NhbGxvYyhkM2QxMl9yZWZzLk51bVRleHR1cmUyRHMsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgCj4gc2l6ZW9mKCpkM2QxMl9yZWZzLnBwVGV4dHVyZTJEcykpOwo+ICvC oMKgwqDCoMKgwqDCoCBpZiAoIWQzZDEyX3JlZnMucHBUZXh0dXJlMkRzKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gZmFpbDsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgwqDCoMKg wqAgaSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaiA9IDA7IGogPCBiYXNlX3BpYy0+bmJf cmVmc1swXTsgaisrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGQzZDEyX3JlZnMucHBUZXh0 dXJlMkRzW2krK10gPSAoKEQzRDEyVkFFbmNvZGVQaWN0dXJlICopYmFzZV9waWMtCj4gPnJlZnNb MF1bal0pLT5yZWNvbl9zdXJmYWNlLT50ZXh0dXJlOwo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGog PSAwOyBqIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGorKykKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkM2QxMl9yZWZzLnBwVGV4dHVyZTJEc1tpKytdID0gKChEM0QxMlZBRW5jb2RlUGljdHVy ZSAqKWJhc2VfcGljLQo+ID5yZWZzWzFdW2pdKS0+cmVjb25fc3VyZmFjZS0+dGV4dHVyZTsKPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpbnB1dF9hcmdzLlBpY3R1cmVDb250cm9sRGVzYy5JbnRy YVJlZnJlc2hGcmFtZUluZGV4wqAgPSAwOwo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT5pc19yZWZl cmVuY2UpCj4gK8KgwqDCoMKgwqDCoMKgIGlucHV0X2FyZ3MuUGljdHVyZUNvbnRyb2xEZXNjLkZs YWdzIHw9Cj4gRDNEMTJfVklERU9fRU5DT0RFUl9QSUNUVVJFX0NPTlRST0xfRkxBR19VU0VEX0FT X1JFRkVSRU5DRV9QSUNUVVJFOwo+ICsKPiArwqDCoMKgIGlucHV0X2FyZ3MuUGljdHVyZUNvbnRy b2xEZXNjLlBpY3R1cmVDb250cm9sQ29kZWNEYXRhID0gcGljLT5waWNfY3RsOwo+ICvCoMKgwqAg aW5wdXRfYXJncy5QaWN0dXJlQ29udHJvbERlc2MuUmVmZXJlbmNlRnJhbWVzwqDCoMKgwqDCoMKg wqDCoCA9IGQzZDEyX3JlZnM7Cj4gK8KgwqDCoCBpbnB1dF9hcmdzLkN1cnJlbnRGcmFtZUJpdHN0 cmVhbU1ldGFkYXRhU2l6ZcKgwqDCoMKgwqDCoMKgwqDCoCA9IHBpYy0+aGVhZGVyX3NpemU7Cj4g Kwo+ICvCoMKgwqAgb3V0cHV0X2FyZ3MuQml0c3RyZWFtLnBCdWZmZXLCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0g cGljLQo+ID5vdXRwdXRfYnVmZmVyOwo+ICvCoMKgwqAgb3V0cHV0X2FyZ3MuQml0c3RyZWFtLkZy YW1lU3RhcnRPZmZzZXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgID0gcGljLQo+ID5oZWFkZXJfc2l6ZTsKPiArwqDCoMKgIG91dHB1dF9hcmdzLlJl Y29uc3RydWN0ZWRQaWN0dXJlLnBSZWNvbnN0cnVjdGVkUGljdHVyZcKgwqDCoMKgwqDCoMKgwqDC oMKgID0gcGljLQo+ID5yZWNvbl9zdXJmYWNlLT50ZXh0dXJlOwo+ICvCoMKgwqAgb3V0cHV0X2Fy Z3MuUmVjb25zdHJ1Y3RlZFBpY3R1cmUuUmVjb25zdHJ1Y3RlZFBpY3R1cmVTdWJyZXNvdXJjZSA9 IDA7Cj4gK8KgwqDCoCBvdXRwdXRfYXJncy5FbmNvZGVyT3V0cHV0TWV0YWRhdGEucEJ1ZmZlcsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBwaWMtCj4gPmVu Y29kZWRfbWV0YWRhdGE7Cj4gK8KgwqDCoCBvdXRwdXRfYXJncy5FbmNvZGVyT3V0cHV0TWV0YWRh dGEuT2Zmc2V0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID0gMDsKPiArCj4gK8KgwqDCoCBpbnB1dF9tZXRhZGF0YS5IV0xheW91dE1ldGFkYXRhLnBCdWZm ZXIgPSBwaWMtPmVuY29kZWRfbWV0YWRhdGE7Cj4gK8KgwqDCoCBpbnB1dF9tZXRhZGF0YS5IV0xh eW91dE1ldGFkYXRhLk9mZnNldMKgID0gMDsKPiArCj4gK8KgwqDCoCBvdXRwdXRfbWV0YWRhdGEu UmVzb2x2ZWRMYXlvdXRNZXRhZGF0YS5wQnVmZmVyID0gcGljLT5yZXNvbHZlZF9tZXRhZGF0YTsK PiArwqDCoMKgIG91dHB1dF9tZXRhZGF0YS5SZXNvbHZlZExheW91dE1ldGFkYXRhLk9mZnNldMKg ID0gMDsKPiArCj4gK8KgwqDCoCBlcnIgPSBkM2QxMnZhX2dldF92YWxpZF9jb21tYW5kX2FsbG9j YXRvcihhdmN0eCwgJmNvbW1hbmRfYWxsb2NhdG9yKTsKPiArwqDCoMKgIGlmIChlcnIgPCAwKQo+ ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gKwo+ICvCoMKgwqAgaHIgPSBJRDNEMTJDb21t YW5kQWxsb2NhdG9yX1Jlc2V0KGNvbW1hbmRfYWxsb2NhdG9yKTsKPiArwqDCoMKgIGlmIChGQUlM RUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1JfVU5LTk9XTjsKPiArwqDC oMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGhyID0gSUQz RDEyVmlkZW9FbmNvZGVDb21tYW5kTGlzdDJfUmVzZXQoY21kX2xpc3QsIGNvbW1hbmRfYWxsb2Nh dG9yKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9 IEFWRVJST1JfVU5LTk9XTjsKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqAg fQo+ICsKPiArI2RlZmluZSBUUkFOU0lUSU9OX0JBUlJJRVIocmVzLCBiZWZvcmUsIGFmdGVyKcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gK8KgwqDCoCAoRDNE MTJfUkVTT1VSQ0VfQkFSUklFUikge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiArwqDCoMKgwqDCoMKg wqAgLlR5cGXCoCA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfVFlQRV9UUkFOU0lUSU9OLMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgXAo+ICvCoMKgwqDCoMKgwqDCoCAuRmxhZ3MgPSBEM0QxMl9SRVNP VVJDRV9CQVJSSUVSX0ZMQUdfTk9ORSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFwKPiArwqDCoMKgwqDCoMKgwqAgLlRyYW5zaXRpb24gPSB7wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnBSZXNvdXJjZcKgwqAgPSBy ZXMswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuU3VicmVzb3Vy Y2UgPSBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSX0FMTF9TVUJSRVNPVVJDRVMsIFwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAuU3RhdGVCZWZvcmUgPSBiZWZvcmUswqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAuU3RhdGVBZnRlcsKgID0gYWZ0ZXIswqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ ICvCoMKgwqDCoMKgwqDCoCB9LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgYmFycmllcnNb MF0gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5pbnB1dF9zdXJmYWNlLT50ZXh0dXJlLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fRU5DT0RFX1JFQUQpOwo+ICvCoMKgwqAg YmFycmllcnNbMV0gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5vdXRwdXRfYnVmZmVyLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAKPiBEM0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfV1JJVEUpOwo+ICvCoMKg wqAgYmFycmllcnNbMl0gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5yZWNvbl9zdXJmYWNlLT50 ZXh0dXJlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAKPiBEM0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfV1JJ VEUpOwo+ICvCoMKgwqAgYmFycmllcnNbM10gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5lbmNv ZGVkX21ldGFkYXRhLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09N TU9OLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiBEM0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNP REVfV1JJVEUpOwo+ICvCoMKgwqAgYmFycmllcnNbNF0gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGlj LT5yZXNvbHZlZF9tZXRhZGF0YSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEyX1JFU09VUkNFX1NU QVRFX0NPTU1PTiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklE RU9fRU5DT0RFX1dSSVRFKTsKPiArCj4gK8KgwqDCoCBJRDNEMTJWaWRlb0VuY29kZUNvbW1hbmRM aXN0Ml9SZXNvdXJjZUJhcnJpZXIoY21kX2xpc3QsIDUsIGJhcnJpZXJzKTsKPiArCj4gK8KgwqDC oCBpZiAoZDNkMTJfcmVmcy5OdW1UZXh0dXJlMkRzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEy X1JFU09VUkNFX0JBUlJJRVIgcmVmc19iYXJyaWVyc1szXTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg IGZvciAoaSA9IDA7IGkgPCBkM2QxMl9yZWZzLk51bVRleHR1cmUyRHM7IGkrKykKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZWZzX2JhcnJpZXJzW2ldID0gVFJBTlNJVElPTl9CQVJSSUVSKGQz ZDEyX3JlZnMucHBUZXh0dXJlMkRzW2ldLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoAo+IEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiBEM0QxMl9SRVNPVVJDRV9TVEFURV9W SURFT19FTkNPREVfUkVBRCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJWaWRlb0VuY29k ZUNvbW1hbmRMaXN0Ml9SZXNvdXJjZUJhcnJpZXIoY21kX2xpc3QsCj4gZDNkMTJfcmVmcy5OdW1U ZXh0dXJlMkRzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJlZnNfYmFycmllcnMpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIElEM0QxMlZp ZGVvRW5jb2RlQ29tbWFuZExpc3QyX0VuY29kZUZyYW1lKGNtZF9saXN0LCBjdHgtPmVuY29kZXIs IGN0eC0KPiA+ZW5jb2Rlcl9oZWFwLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJmlucHV0X2FyZ3MsICZvdXRwdXRfYXJncyk7Cj4gKwo+ICvCoMKgwqAgYmFycmllcnNbM10g PSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5lbmNvZGVkX21ldGFkYXRhLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fRU5DT0RFX1dSSVRFLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fRU5DT0RFX1JFQUQpOwo+ICsKPiAr wqDCoMKgIElEM0QxMlZpZGVvRW5jb2RlQ29tbWFuZExpc3QyX1Jlc291cmNlQmFycmllcihjbWRf bGlzdCwgMSwgJmJhcnJpZXJzWzNdKTsKPiArCj4gK8KgwqDCoCBJRDNEMTJWaWRlb0VuY29kZUNv bW1hbmRMaXN0Ml9SZXNvbHZlRW5jb2Rlck91dHB1dE1ldGFkYXRhKGNtZF9saXN0LAo+ICZpbnB1 dF9tZXRhZGF0YSwgJm91dHB1dF9tZXRhZGF0YSk7Cj4gKwo+ICvCoMKgwqAgaWYgKGQzZDEyX3Jl ZnMuTnVtVGV4dHVyZTJEcykgewo+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9SRVNPVVJDRV9CQVJS SUVSIHJlZnNfYmFycmllcnNbM107Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgZDNkMTJfcmVmcy5OdW1UZXh0dXJlMkRzOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJlZnNfYmFycmllcnNbaV0gPQo+IFRSQU5TSVRJT05fQkFSUklF UihkM2QxMl9yZWZzLnBwVGV4dHVyZTJEc1tpXSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gRDNEMTJfUkVTT1VSQ0VfU1RBVEVf VklERU9fRU5DT0RFX1JFQUQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTik7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJWaWRlb0VuY29kZUNvbW1hbmRMaXN0Ml9SZXNvdXJj ZUJhcnJpZXIoY21kX2xpc3QsCj4gZDNkMTJfcmVmcy5OdW1UZXh0dXJlMkRzLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZnNfYmFycmllcnMp Owo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGJhcnJpZXJzWzBdID0gVFJBTlNJVElPTl9CQVJS SUVSKHBpYy0+aW5wdXRfc3VyZmFjZS0+dGV4dHVyZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEy X1JFU09VUkNFX1NUQVRFX1ZJREVPX0VOQ09ERV9SRUFELAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNE MTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OKTsKPiArwqDCoMKgIGJhcnJpZXJzWzFdID0gVFJBTlNJ VElPTl9CQVJSSUVSKHBpYy0+b3V0cHV0X2J1ZmZlciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEy X1JFU09VUkNFX1NUQVRFX1ZJREVPX0VOQ09ERV9XUklURSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQz RDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTik7Cj4gK8KgwqDCoCBiYXJyaWVyc1syXSA9IFRSQU5T SVRJT05fQkFSUklFUihwaWMtPnJlY29uX3N1cmZhY2UtPnRleHR1cmUsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBEM0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfV1JJVEUsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT04pOwo+ICvCoMKgwqAgYmFycmllcnNb M10gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5lbmNvZGVkX21ldGFkYXRhLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fRU5DT0RFX1JFQUQsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT04pOwo+ICvCoMKgwqAgYmFycmll cnNbNF0gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5yZXNvbHZlZF9tZXRhZGF0YSwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEQzRDEyX1JFU09VUkNFX1NUQVRFX1ZJREVPX0VOQ09ERV9XUklURSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTik7Cj4gKwo+ICvCoMKg wqAgSUQzRDEyVmlkZW9FbmNvZGVDb21tYW5kTGlzdDJfUmVzb3VyY2VCYXJyaWVyKGNtZF9saXN0 LCA1LCBiYXJyaWVycyk7Cj4gKwo+ICvCoMKgwqAgaHIgPSBJRDNEMTJWaWRlb0VuY29kZUNvbW1h bmRMaXN0Ml9DbG9zZShjbWRfbGlzdCk7Cj4gK8KgwqDCoCBpZiAoRkFJTEVEKGhyKSkgewo+ICvC oMKgwqDCoMKgwqDCoCBlcnIgPSBBVkVSUk9SX1VOS05PV047Cj4gK8KgwqDCoMKgwqDCoMKgIGdv dG8gZmFpbDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBociA9IElEM0QxMkNvbW1hbmRRdWV1 ZV9XYWl0KGN0eC0+Y29tbWFuZF9xdWV1ZSwgcGljLT5pbnB1dF9zdXJmYWNlLQo+ID5zeW5jX2N0 eC5mZW5jZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPmlucHV0X3N1cmZhY2UtPnN5bmNfY3R4LmZlbmNlX3Zh bHVlKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9 IEFWRVJST1JfVU5LTk9XTjsKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqAg fQo+ICsKPiArwqDCoMKgIElEM0QxMkNvbW1hbmRRdWV1ZV9FeGVjdXRlQ29tbWFuZExpc3RzKGN0 eC0+Y29tbWFuZF9xdWV1ZSwgMSwKPiAoSUQzRDEyQ29tbWFuZExpc3QgKiopJmN0eC0+Y29tbWFu ZF9saXN0KTsKPiArCj4gK8KgwqDCoCBociA9IElEM0QxMkNvbW1hbmRRdWV1ZV9TaWduYWwoY3R4 LT5jb21tYW5kX3F1ZXVlLCBwaWMtPmlucHV0X3N1cmZhY2UtCj4gPnN5bmNfY3R4LmZlbmNlLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArK3BpYy0+aW5wdXRfc3VyZmFjZS0KPiA+c3luY19jdHguZmVuY2VfdmFs dWUpOwo+ICvCoMKgwqAgaWYgKEZBSUxFRChocikpIHsKPiArwqDCoMKgwqDCoMKgwqAgZXJyID0g QVZFUlJPUl9VTktOT1dOOwo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gK8KgwqDCoCB9 Cj4gKwo+ICvCoMKgwqAgaHIgPSBJRDNEMTJDb21tYW5kUXVldWVfU2lnbmFsKGN0eC0+Y29tbWFu ZF9xdWV1ZSwgY3R4LT5zeW5jX2N0eC5mZW5jZSwKPiArK2N0eC0+c3luY19jdHguZmVuY2VfdmFs dWUpOwo+ICvCoMKgwqAgaWYgKEZBSUxFRChocikpIHsKPiArwqDCoMKgwqDCoMKgwqAgZXJyID0g QVZFUlJPUl9VTktOT1dOOwo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gK8KgwqDCoCB9 Cj4gKwo+ICvCoMKgwqAgZXJyID0gZDNkMTJ2YV9kaXNjYXJkX2NvbW1hbmRfYWxsb2NhdG9yKGF2 Y3R4LCBjb21tYW5kX2FsbG9jYXRvciwgY3R4LQo+ID5zeW5jX2N0eC5mZW5jZV92YWx1ZSk7Cj4g K8KgwqDCoCBpZiAoZXJyIDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiAr wqDCoMKgIHBpYy0+ZmVuY2VfdmFsdWUgPSBjdHgtPnN5bmNfY3R4LmZlbmNlX3ZhbHVlOwo+ICsK PiArwqDCoMKgIGlmIChkM2QxMl9yZWZzLnBwVGV4dHVyZTJEcykKPiArwqDCoMKgwqDCoMKgwqAg YXZfZnJlZXAoJmQzZDEyX3JlZnMucHBUZXh0dXJlMkRzKTsKPiArCj4gK8KgwqDCoCByZXR1cm4g MDsKPiArCj4gK2ZhaWw6Cj4gK8KgwqDCoCBpZiAoY29tbWFuZF9hbGxvY2F0b3IpCj4gK8KgwqDC oMKgwqDCoMKgIGQzZDEydmFfZGlzY2FyZF9jb21tYW5kX2FsbG9jYXRvcihhdmN0eCwgY29tbWFu ZF9hbGxvY2F0b3IsIGN0eC0KPiA+c3luY19jdHguZmVuY2VfdmFsdWUpOwo+ICsKPiArwqDCoMKg IGlmIChkM2QxMl9yZWZzLnBwVGV4dHVyZTJEcykKPiArwqDCoMKgwqDCoMKgwqAgYXZfZnJlZXAo JmQzZDEyX3JlZnMucHBUZXh0dXJlMkRzKTsKPiArCj4gK8KgwqDCoCBpZiAoY3R4LT5jb2RlYy0+ ZnJlZV9waWN0dXJlX3BhcmFtcykKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5jb2RlYy0+ZnJlZV9w aWN0dXJlX3BhcmFtcyhwaWMpOwo+ICsKPiArwqDCoMKgIGF2X2J1ZmZlcl91bnJlZigmcGljLT5v dXRwdXRfYnVmZmVyX3JlZik7Cj4gK8KgwqDCoCBwaWMtPm91dHB1dF9idWZmZXIgPSBOVUxMOwo+ ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UocGljLT5lbmNvZGVkX21ldGFkYXRhKTsKPiAr wqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHBpYy0+cmVzb2x2ZWRfbWV0YWRhdGEpOwo+ICvC oMKgwqAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2VuY29kZV9k aXNjYXJkKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEyVkFFbmNvZGVQ aWN0dXJlICpwaWMpCj4gK3sKPiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGlj ID0gKEhXQmFzZUVuY29kZVBpY3R1cmUgKilwaWM7Cj4gK8KgwqDCoCBkM2QxMnZhX2VuY29kZV93 YWl0KGF2Y3R4LCBwaWMpOwo+ICsKPiArwqDCoMKgIGlmIChwaWMtPm91dHB1dF9idWZmZXJfcmVm KSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRGlzY2Fy ZCBvdXRwdXQgZm9yIHBpYyAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiUiUFJJ ZDY0Ii8lIlBSSWQ2NCIuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhc2Vf cGljLT5kaXNwbGF5X29yZGVyLCBiYXNlX3BpYy0+ZW5jb2RlX29yZGVyKTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgIGF2X2J1ZmZlcl91bnJlZigmcGljLT5vdXRwdXRfYnVmZmVyX3JlZik7Cj4gK8Kg wqDCoMKgwqDCoMKgIHBpYy0+b3V0cHV0X2J1ZmZlciA9IE5VTEw7Cj4gK8KgwqDCoCB9Cj4gKwo+ ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UocGljLT5lbmNvZGVkX21ldGFkYXRhKTsKPiAr wqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHBpYy0+cmVzb2x2ZWRfbWV0YWRhdGEpOwo+ICsK PiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2Rl X2ZyZWVfcmNfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICvCoMKgwqAgRDNE MTJWQUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKwo+ICvCoMKgwqAg c3dpdGNoIChjdHgtPnJjLk1vZGUpCj4gK8KgwqDCoCB7Cj4gK8KgwqDCoCBjYXNlIEQzRDEyX1ZJ REVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01PREVfQ1FQOgo+ICvCoMKgwqDCoMKgwqDCoCBhdl9m cmVlcCgmY3R4LT5yYy5Db25maWdQYXJhbXMucENvbmZpZ3VyYXRpb25fQ1FQKTsKPiArwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBjYXNlIEQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9D T05UUk9MX01PREVfQ0JSOgo+ICvCoMKgwqDCoMKgwqDCoCBhdl9mcmVlcCgmY3R4LT5yYy5Db25m aWdQYXJhbXMucENvbmZpZ3VyYXRpb25fQ0JSKTsKPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4g K8KgwqDCoCBjYXNlIEQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01PREVfVkJSOgo+ ICvCoMKgwqDCoMKgwqDCoCBhdl9mcmVlcCgmY3R4LT5yYy5Db25maWdQYXJhbXMucENvbmZpZ3Vy YXRpb25fVkJSKTsKPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBjYXNlIEQzRDEy X1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01PREVfUVZCUjoKPiArwqDCoMKgwqDCoMKgwqAg YXZfZnJlZXAoJmN0eC0+cmMuQ29uZmlnUGFyYW1zLnBDb25maWd1cmF0aW9uX1FWQlIpOwo+ICvC oMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgIGRlZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKg IGJyZWFrOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgSFdCYXNlRW5jb2RlUGljdHVyZSAqZDNkMTJ2YV9lbmNvZGVfYWxsb2MoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjb25zdCBBVkZyYW1lICpmcmFtZSkKPiArewo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRl eHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlUGljdHVy ZSAqcGljOwo+ICsKPiArwqDCoMKgIHBpYyA9IGF2X21hbGxvY3ooc2l6ZW9mKCpwaWMpKTsKPiAr wqDCoMKgIGlmICghcGljKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPiArCj4gK8Kg wqDCoCBpZiAoY3R4LT5jb2RlYy0+cGljdHVyZV9wcml2X2RhdGFfc2l6ZSA+IDApIHsKPiArwqDC oMKgwqDCoMKgwqAgcGljLT5iYXNlLnByaXZfZGF0YSA9IGF2X21hbGxvY3ooY3R4LT5jb2RlYy0+ cGljdHVyZV9wcml2X2RhdGFfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcGljLT5iYXNl LnByaXZfZGF0YSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2ZyZWVwKCZwaWMpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoCB9 Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcGljLT5pbnB1dF9zdXJmYWNlID0gKEFWRDNEMTJW QUZyYW1lICopZnJhbWUtPmRhdGFbMF07Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIChIV0Jhc2VFbmNv ZGVQaWN0dXJlICopcGljOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2Zy ZWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFz ZV9waWMpCj4gK3sKPiArwqDCoMKgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZVBpY3R1cmUgKnBpYyA9IChEM0QxMlZB RW5jb2RlUGljdHVyZSAqKWJhc2VfcGljOwo+ICsKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+ZW5j b2RlX2lzc3VlZCkKPiArwqDCoMKgwqDCoMKgwqAgZDNkMTJ2YV9lbmNvZGVfZGlzY2FyZChhdmN0 eCwgcGljKTsKPiArCj4gK8KgwqDCoCBpZiAoY3R4LT5jb2RlYy0+ZnJlZV9waWN0dXJlX3BhcmFt cykKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5jb2RlYy0+ZnJlZV9waWN0dXJlX3BhcmFtcyhwaWMp Owo+ICsKPiArwqDCoMKgIGZmX2h3X2Jhc2VfZW5jb2RlX2ZyZWUoYXZjdHgsIGJhc2VfcGljKTsK PiArCj4gK8KgwqDCoCBhdl9mcmVlKHBpYyk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfZ2V0X2J1ZmZlcl9zaXplKEFWQ29kZWND b250ZXh0ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEM0QxMlZBRW5jb2Rl UGljdHVyZSAqcGljLCBzaXplX3QKPiAqc2l6ZSkKPiArewo+ICvCoMKgwqAgRDNEMTJfVklERU9f RU5DT0RFUl9PVVRQVVRfTUVUQURBVEEgKm1ldGEgPSBOVUxMOwo+ICvCoMKgwqAgdWludDhfdCAq ZGF0YTsKPiArwqDCoMKgIEhSRVNVTFQgaHI7Cj4gK8KgwqDCoCBpbnQgZXJyOwo+ICsKPiArwqDC oMKgIGhyID0gSUQzRDEyUmVzb3VyY2VfTWFwKHBpYy0+cmVzb2x2ZWRfbWV0YWRhdGEsIDAsIE5V TEwsICh2b2lkICoqKSZkYXRhKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDC oMKgwqDCoMKgIGVyciA9IEFWRVJST1JfVU5LTk9XTjsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IGVycjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBtZXRhID0gKEQzRDEyX1ZJREVPX0VOQ09E RVJfT1VUUFVUX01FVEFEQVRBICopZGF0YTsKPiArCj4gK8KgwqDCoCBpZiAobWV0YS0+RW5jb2Rl RXJyb3JGbGFncyAhPQo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfRU5DT0RFX0VSUk9SX0ZMQUdfTk9f RVJST1IpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJF bmNvZGUgZmFpbGVkICUiUFJJdTY0IlxuIiwgbWV0YS0KPiA+RW5jb2RlRXJyb3JGbGFncyk7Cj4g K8KgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGVycjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAobWV0YS0+RW5jb2RlZEJp dHN0cmVhbVdyaXR0ZW5CeXRlc0NvdW50ID09IDApIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJObyBieXRlcyB3ZXJlIHdyaXR0ZW4gdG8gZW5jb2RlZAo+ IGJpdHN0cmVhbVxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1IoRUlOVkFMKTsK PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCAq c2l6ZSA9IG1ldGEtPkVuY29kZWRCaXRzdHJlYW1Xcml0dGVuQnl0ZXNDb3VudDsKPiArCj4gK8Kg wqDCoCBJRDNEMTJSZXNvdXJjZV9Vbm1hcChwaWMtPnJlc29sdmVkX21ldGFkYXRhLCAwLCBOVUxM KTsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZh X2VuY29kZV9nZXRfY29kZWRfZGF0YShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEQzRDEyVkFFbmNvZGVQaWN0dXJlICpwaWMsIEFWUGFja2V0Cj4gKnBr dCkKPiArewo+ICvCoMKgwqAgaW50IGVycjsKPiArwqDCoMKgIHVpbnQ4X3QgKnB0ciwgKm1hcHBl ZF9kYXRhOwo+ICvCoMKgwqAgc2l6ZV90IHRvdGFsX3NpemUgPSAwOwo+ICvCoMKgwqAgSFJFU1VM VCBocjsKPiArCj4gK8KgwqDCoCBlcnIgPSBkM2QxMnZhX2VuY29kZV9nZXRfYnVmZmVyX3NpemUo YXZjdHgsIHBpYywgJnRvdGFsX3NpemUpOwo+ICvCoMKgwqAgaWYgKGVyciA8IDApCj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gZW5kOwo+ICsKPiArwqDCoMKgIHRvdGFsX3NpemUgKz0gcGljLT5oZWFk ZXJfc2l6ZTsKPiArwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiT3V0cHV0IGJ1 ZmZlciBzaXplICUiUFJJZDY0IlxuIiwKPiB0b3RhbF9zaXplKTsKPiArCj4gK8KgwqDCoCBociA9 IElEM0QxMlJlc291cmNlX01hcChwaWMtPm91dHB1dF9idWZmZXIsIDAsIE5VTEwsICh2b2lkCj4g KiopJm1hcHBlZF9kYXRhKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKg wqDCoMKgIGVyciA9IEFWRVJST1JfVU5LTk9XTjsKPiArwqDCoMKgwqDCoMKgwqAgZ290byBlbmQ7 Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZj dHgsIHBrdCwgdG90YWxfc2l6ZSwgMCk7Cj4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiArwqDCoMKg wqDCoMKgwqAgZ290byBlbmQ7Cj4gK8KgwqDCoCBwdHIgPSBwa3QtPmRhdGE7Cj4gKwo+ICvCoMKg wqAgbWVtY3B5KHB0ciwgbWFwcGVkX2RhdGEsIHRvdGFsX3NpemUpOwo+ICsKPiArwqDCoMKgIElE M0QxMlJlc291cmNlX1VubWFwKHBpYy0+b3V0cHV0X2J1ZmZlciwgMCwgTlVMTCk7Cj4gKwo+ICtl bmQ6Cj4gK8KgwqDCoCBhdl9idWZmZXJfdW5yZWYoJnBpYy0+b3V0cHV0X2J1ZmZlcl9yZWYpOwo+ ICvCoMKgwqAgcGljLT5vdXRwdXRfYnVmZmVyID0gTlVMTDsKPiArwqDCoMKgIHJldHVybiBlcnI7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfb3V0cHV0KEFWQ29kZWNDb250 ZXh0ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBIV0Jhc2VFbmNvZGVQaWN0dXJlICpiYXNlX3Bp YywKPiBBVlBhY2tldCAqcGt0KQo+ICt7Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlQ29udGV4dCAq Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQzRDEyVkFFbmNvZGVQaWN0dXJlICpw aWMgPSAoRDNEMTJWQUVuY29kZVBpY3R1cmUgKiliYXNlX3BpYzsKPiArwqDCoMKgIEFWUGFja2V0 ICpwa3RfcHRyID0gcGt0Owo+ICvCoMKgwqAgaW50IGVycjsKPiArCj4gK8KgwqDCoCBlcnIgPSBk M2QxMnZhX2VuY29kZV93YWl0KGF2Y3R4LCBwaWMpOwo+ICvCoMKgwqAgaWYgKGVyciA8IDApCj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4gKwo+ICvCoMKgwqAgZXJyID0gZDNkMTJ2YV9l bmNvZGVfZ2V0X2NvZGVkX2RhdGEoYXZjdHgsIHBpYywgcGt0KTsKPiArwqDCoMKgIGlmIChlcnIg PCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+ICsKPiArwqDCoMKgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0RFQlVHLCAiT3V0cHV0IHJlYWQgZm9yIHBpYyAlIlBSSWQ2NCIvJSJQUklk NjQiLlxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIs IGJhc2VfcGljLT5lbmNvZGVfb3JkZXIpOwo+ICsKPiArwqDCoMKgIGZmX2h3X2Jhc2VfZW5jb2Rl X3NldF9vdXRwdXRfcHJvcGVydHkoYXZjdHgsIChIV0Jhc2VFbmNvZGVQaWN0dXJlCj4gKiliYXNl X3BpYywgcGt0X3B0ciwgMCk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfc2V0X3Byb2ZpbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQo+ICt7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2Y3R4LT5w cml2X2RhdGE7Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlQ29udGV4dCAqY3R4wqDCoMKgwqAgPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgY29uc3QgRDNEMTJWQUVuY29kZVByb2ZpbGUgKnBy b2ZpbGU7Cj4gK8KgwqDCoCBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2M7Cj4gK8KgwqDC oCBpbnQgaSwgZGVwdGg7Cj4gKwo+ICvCoMKgwqAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQo YmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsKPiArwqDCoMKgIGlmICghZGVzYykg ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQg aW5wdXQgcGl4Zm10ICglZCkuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJh c2VfY3R4LT5pbnB1dF9mcmFtZXMtPnN3X2Zvcm1hdCk7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgZGVwdGggPSBkZXNj LT5jb21wWzBdLmRlcHRoOwo+ICvCoMKgwqAgZm9yIChpID0gMTsgaSA8IGRlc2MtPm5iX2NvbXBv bmVudHM7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZGVzYy0+Y29tcFtpXS5kZXB0aCAh PSBkZXB0aCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCBpbnB1dCBwaXhmbXQgKCVzKS5cbiIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLT5uYW1lKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDC oCB9Cj4gK8KgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiSW5wdXQgc3VyZmFj ZSBmb3JtYXQgaXMgJXMuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLT5uYW1lKTsK PiArCj4gK8KgwqDCoCBhdl9hc3NlcnQwKGN0eC0+Y29kZWMtPnByb2ZpbGVzKTsKPiArwqDCoMKg IGZvciAoaSA9IDA7IChjdHgtPmNvZGVjLT5wcm9maWxlc1tpXS5hdl9wcm9maWxlICE9Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX1BST0ZJTEVfVU5LTk9XTik7IGkrKykg ewo+ICvCoMKgwqDCoMKgwqDCoCBwcm9maWxlID0gJmN0eC0+Y29kZWMtPnByb2ZpbGVzW2ldOwo+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoZGVwdGjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICE9 IHByb2ZpbGUtPmRlcHRoIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzYy0+bmJfY29t cG9uZW50cyAhPSBwcm9maWxlLT5uYl9jb21wb25lbnRzKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZGVzYy0+bmJfY29tcG9uZW50cyA+ IDEgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZGVzYy0+bG9nMl9jaHJvbWFfdyAhPSBw cm9maWxlLT5sb2cyX2Nocm9tYV93IHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNj LT5sb2cyX2Nocm9tYV9oICE9IHByb2ZpbGUtPmxvZzJfY2hyb21hX2gpKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPnByb2Zp bGUgIT0gcHJvZmlsZS0+YXZfcHJvZmlsZSAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 Y3R4LT5wcm9maWxlICE9IEFWX1BST0ZJTEVfVU5LTk9XTikKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb250aW51ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGN0eC0+cHJvZmlsZSA9IHByb2Zp bGU7Cj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgaWYgKCFj dHgtPnByb2ZpbGUpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJObyB1c2FibGUgZW5jb2RpbmcgcHJvZmlsZSBmb3VuZC5cbiIpOwo+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGF2 Y3R4LT5wcm9maWxlID0gcHJvZmlsZS0+YXZfcHJvZmlsZTsKPiArwqDCoMKgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgRDNEMTJWQUVuY29kZVJDTW9kZSBkM2QxMnZhX2VuY29k ZV9yY19tb2Rlc1tdID0gewo+ICvCoMKgwqAgLy/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEJpdHJhdGXCoMKgIFF1YWxpdHkKPiArwqDCoMKgIC8vwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IE1heHJhdGUgfCBIUkQvVkJWCj4g K8KgwqDCoCB7IDAgfSwgLy/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoCB8wqDCoMKg IHzCoMKgwqAgfAo+ICvCoMKgwqAgeyBSQ19NT0RFX0NRUCzCoCAiQ1FQIizCoCAwLMKgwqAgMCzC oMKgIDEswqDCoCAwLCAxLAo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01PREVf Q1FQIH0sCj4gK8KgwqDCoCB7IFJDX01PREVfQ0JSLMKgICJDQlIiLMKgIDEswqDCoCAwLMKgwqAg MCzCoMKgIDEsIDEsCj4gRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfTU9ERV9DQlIg fSwKPiArwqDCoMKgIHsgUkNfTU9ERV9WQlIswqAgIlZCUiIswqAgMSzCoMKgIDEswqDCoCAwLMKg wqAgMSwgMSwKPiBEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9NT0RFX1ZCUiB9LAo+ ICvCoMKgwqAgeyBSQ19NT0RFX1FWQlIsICJRVkJSIiwgMSzCoMKgIDEswqDCoCAxLMKgwqAgMSwg MSwKPiBEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9NT0RFX1FWQlIgfSwKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgY2hlY2tfcmF0ZV9jb250cm9sX3N1cHBvcnQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCBjb25zdAo+IEQzRDEyVkFFbmNvZGVSQ01vZGUgKnJjX21vZGUpCj4gK3sKPiAr wqDCoMKgIEhSRVNVTFQgaHI7Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlQ29udGV4dCAqY3R4ID0g YXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQzRDEyX0ZFQVRVUkVfREFUQV9WSURFT19FTkNP REVSX1JBVEVfQ09OVFJPTF9NT0RFIGQzZDEyX3JjX21vZGUgPSB7Cj4gK8KgwqDCoMKgwqDCoMKg IC5Db2RlYyA9IGN0eC0+Y29kZWMtPmQzZDEyX2NvZGVjLAo+ICvCoMKgwqAgfTsKPiArCj4gK8Kg wqDCoCBpZiAoIXJjX21vZGUtPmQzZDEyX21vZGUpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAw Owo+ICsKPiArwqDCoMKgIGQzZDEyX3JjX21vZGUuSXNTdXBwb3J0ZWQgPSAwOwo+ICvCoMKgwqAg ZDNkMTJfcmNfbW9kZS5SYXRlQ29udHJvbE1vZGUgPSByY19tb2RlLT5kM2QxMl9tb2RlOwo+ICsK PiArwqDCoMKgIGhyID0gSUQzRDEyVmlkZW9EZXZpY2UzX0NoZWNrRmVhdHVyZVN1cHBvcnQoY3R4 LT52aWRlb19kZXZpY2UzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Cj4gRDNEMTJfRkVBVFVSRV9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9NT0RFLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZkM2QxMl9yY19tb2RlLAo+IHNpemVv ZihkM2QxMl9yY19tb2RlKSk7Cj4gK8KgwqDCoCBpZiAoRkFJTEVEKGhyKSkgewo+ICvCoMKgwqDC oMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjaGVjayByYXRl IGNvbnRyb2wKPiBzdXBwb3J0LlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ICvC oMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiBkM2QxMl9yY19tb2RlLklzU3VwcG9ydGVkOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2luaXRfcmF0ZV9jb250cm9sKEFW Q29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAq YmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRl eHTCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIGludDY0X3QgcmNf dGFyZ2V0X2JpdHJhdGU7Cj4gK8KgwqDCoCBpbnQ2NF90IHJjX3BlYWtfYml0cmF0ZTsKPiArwqDC oMKgIGludMKgwqDCoMKgIHJjX3F1YWxpdHk7Cj4gK8KgwqDCoCBpbnQ2NF90IGhyZF9idWZmZXJf c2l6ZTsKPiArwqDCoMKgIGludDY0X3QgaHJkX2luaXRpYWxfYnVmZmVyX2Z1bGxuZXNzOwo+ICvC oMKgwqAgaW50IGZyX251bSwgZnJfZGVuOwo+ICvCoMKgwqAgY29uc3QgRDNEMTJWQUVuY29kZVJD TW9kZSAqcmNfbW9kZTsKPiArCj4gK8KgwqDCoCAvLyBSYXRlIGNvbnRyb2wgbW9kZSBzZWxlY3Rp b246Cj4gK8KgwqDCoCAvLyAqIElmIHRoZSB1c2VyIGhhcyBzZXQgYSBtb2RlIGV4cGxpY2l0bHkg d2l0aCB0aGUgcmNfbW9kZSBvcHRpb24sCj4gK8KgwqDCoCAvL8KgwqAgdXNlIGl0IGFuZCBmYWls IGlmIGl0IGlzIG5vdCBhdmFpbGFibGUuCj4gK8KgwqDCoCAvLyAqIElmIGFuIGV4cGxpY2l0IFFQ IG9wdGlvbiBoYXMgYmVlbiBzZXQsIHVzZSBDUVAuCj4gK8KgwqDCoCAvLyAqIElmIHRoZSBjb2Rl YyBpcyBDUS1vbmx5LCB1c2UgQ1FQLgo+ICvCoMKgwqAgLy8gKiBJZiB0aGUgUVNDQUxFIGF2Y29k ZWMgb3B0aW9uIGlzIHNldCwgdXNlIENRUC4KPiArwqDCoMKgIC8vICogSWYgYml0cmF0ZSBhbmQg cXVhbGl0eSBhcmUgYm90aCBzZXQsIHRyeSBRVkJSLgo+ICvCoMKgwqAgLy8gKiBJZiBxdWFsaXR5 IGlzIHNldCwgdHJ5IENRUC4KPiArwqDCoMKgIC8vICogSWYgYml0cmF0ZSBhbmQgbWF4cmF0ZSBh cmUgc2V0IGFuZCBoYXZlIHRoZSBzYW1lIHZhbHVlLCB0cnkgQ0JSLgo+ICvCoMKgwqAgLy8gKiBJ ZiBhIGJpdHJhdGUgaXMgc2V0LCB0cnkgVkJSLCB0aGVuIENCUi4KPiArwqDCoMKgIC8vICogSWYg bm8gYml0cmF0ZSBpcyBzZXQsIHRyeSBDUVAuCj4gKwo+ICsjZGVmaW5lIFRSWV9SQ19NT0RFKG1v ZGUsIGZhaWwpIGRvIHsgXAo+ICvCoMKgwqDCoMKgwqDCoCByY19tb2RlID0gJmQzZDEydmFfZW5j b2RlX3JjX21vZGVzW21vZGVdOyBcCj4gK8KgwqDCoMKgwqDCoMKgIGlmICghKHJjX21vZGUtPmQz ZDEyX21vZGUgJiYgY2hlY2tfcmF0ZV9jb250cm9sX3N1cHBvcnQoYXZjdHgsCj4gcmNfbW9kZSkp KSB7IFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZmFpbCkgeyBcCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRyaXZl ciBkb2VzIG5vdCBzdXBwb3J0ICVzICIgXAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAiUkMgbW9kZS5cbiIsIHJjX21vZGUtPm5hbWUpOyBcCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOyBcCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJEcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCAlcyAiIFwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJSQyBtb2RlLlxuIiwgcmNfbW9k ZS0+bmFtZSk7IFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByY19tb2RlID0gTlVMTDsgXAo+ ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UgeyBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290 byByY19tb2RlX2ZvdW5kOyBcCj4gK8KgwqDCoMKgwqDCoMKgIH0gXAo+ICvCoMKgwqAgfSB3aGls ZSAoMCkKPiArCj4gK8KgwqDCoCBpZiAoYmFzZV9jdHgtPmV4cGxpY2l0X3JjX21vZGUpCj4gK8Kg wqDCoMKgwqDCoMKgIFRSWV9SQ19NT0RFKGJhc2VfY3R4LT5leHBsaWNpdF9yY19tb2RlLCAxKTsK PiArCj4gK8KgwqDCoCBpZiAoYmFzZV9jdHgtPmV4cGxpY2l0X3FwKQo+ICvCoMKgwqDCoMKgwqDC oCBUUllfUkNfTU9ERShSQ19NT0RFX0NRUCwgMSk7Cj4gKwo+ICvCoMKgwqAgaWYgKGN0eC0+Y29k ZWMtPmZsYWdzICYgRkxBR19DT05TVEFOVF9RVUFMSVRZX09OTFkpCj4gK8KgwqDCoMKgwqDCoMKg IFRSWV9SQ19NT0RFKFJDX01PREVfQ1FQLCAxKTsKPiArCj4gK8KgwqDCoCBpZiAoYXZjdHgtPmZs YWdzICYgQVZfQ09ERUNfRkxBR19RU0NBTEUpCj4gK8KgwqDCoMKgwqDCoMKgIFRSWV9SQ19NT0RF KFJDX01PREVfQ1FQLCAxKTsKPiArCj4gK8KgwqDCoCBpZiAoYXZjdHgtPmJpdF9yYXRlID4gMCAm JiBhdmN0eC0+Z2xvYmFsX3F1YWxpdHkgPiAwKQo+ICvCoMKgwqDCoMKgwqDCoCBUUllfUkNfTU9E RShSQ19NT0RFX1FWQlIsIDApOwo+ICsKPiArwqDCoMKgIGlmIChhdmN0eC0+Z2xvYmFsX3F1YWxp dHkgPiAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIFRSWV9SQ19NT0RFKFJDX01PREVfQ1FQLCAwKTsK PiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoYXZjdHgtPmJpdF9yYXRlID4gMCAmJiBhdmN0 eC0+cmNfbWF4X3JhdGUgPT0gYXZjdHgtPmJpdF9yYXRlKQo+ICvCoMKgwqDCoMKgwqDCoCBUUllf UkNfTU9ERShSQ19NT0RFX0NCUiwgMCk7Cj4gKwo+ICvCoMKgwqAgaWYgKGF2Y3R4LT5iaXRfcmF0 ZSA+IDApIHsKPiArwqDCoMKgwqDCoMKgwqAgVFJZX1JDX01PREUoUkNfTU9ERV9WQlIsIDApOwo+ ICvCoMKgwqDCoMKgwqDCoCBUUllfUkNfTU9ERShSQ19NT0RFX0NCUiwgMCk7Cj4gK8KgwqDCoCB9 IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoCBUUllfUkNfTU9ERShSQ19NT0RFX0NRUCwgMCk7Cj4g K8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEcml2 ZXIgZG9lcyBub3Qgc3VwcG9ydCBhbnkgIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAiUkMgbW9k ZSBjb21wYXRpYmxlIHdpdGggc2VsZWN0ZWQgb3B0aW9ucy5cbiIpOwo+ICvCoMKgwqAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKPiArCj4gK3JjX21vZGVfZm91bmQ6Cj4gK8KgwqDCoCBpZiAocmNf bW9kZS0+Yml0cmF0ZSkgewo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPmJpdF9yYXRlIDw9 IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkJpdHJhdGUgbXVzdCBiZSBzZXQgZm9yICVzICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICJSQyBtb2RlLlxuIiwgcmNfbW9kZS0+bmFtZSk7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqAg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJjX21vZGUtPm1heHJhdGUpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPnJjX21heF9yYXRlID4gMCkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGF2Y3R4LT5yY19tYXhfcmF0ZSA8IGF2Y3R4LT5i aXRfcmF0ZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYml0cmF0ZSBzZXR0aW5nczogIgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJiaXRy YXRlICglIlBSSWQ2NCIpIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiAiCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIm1heHJhdGUgKCUiUFJJ ZDY0IikuXG4iLCBhdmN0eC0+Yml0X3JhdGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPnJjX21heF9yYXRlKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJjX3RhcmdldF9iaXRyYXRlID0gYXZjdHgtPmJpdF9yYXRlOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmNfcGVha19iaXRyYXRlwqDCoCA9IGF2Y3R4LT5y Y19tYXhfcmF0ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gV2Ugb25seSBoYXZlIGEgdGFyZ2V0IGJpdHJhdGUs IGJ1dCB0aGlzIG1vZGUgcmVxdWlyZXMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8vIHRoYXQgYSBtYXhpbXVtIHJhdGUgYmUgc3VwcGxpZWQgYXMgd2VsbC7CoCBTaW5jZSB0aGUK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIHVzZXIgZG9lcyBub3Qgd2FudCB0 aGlzIHRvIGJlIGEgY29uc3RyYWludCwgYXJiaXRyYXJpbHkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC8vIHBpY2sgYSBtYXhpbXVtIHJhdGUgb2YgZG91YmxlIHRoZSB0YXJnZXQg cmF0ZS4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJjX3RhcmdldF9iaXRyYXRl ID0gYXZjdHgtPmJpdF9yYXRlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmNf cGVha19iaXRyYXRlwqDCoCA9IDIgKiBhdmN0eC0+Yml0X3JhdGU7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChhdmN0eC0+cmNfbWF4X3JhdGUgPiBhdmN0eC0+Yml0X3JhdGUpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcs ICJNYXggYml0cmF0ZSBpcyBpZ25vcmVkICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgImluICVzIFJDIG1vZGUuXG4iLCByY19tb2RlLT5uYW1lKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmNfdGFy Z2V0X2JpdHJhdGUgPSBhdmN0eC0+Yml0X3JhdGU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmNfcGVha19iaXRyYXRlwqDCoCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0g ZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHJjX3RhcmdldF9iaXRyYXRlID0gMDsKPiArwqDCoMKg wqDCoMKgwqAgcmNfcGVha19iaXRyYXRlwqDCoCA9IDA7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKg wqAgaWYgKHJjX21vZGUtPnF1YWxpdHkpIHsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGJhc2VfY3R4 LT5leHBsaWNpdF9xcCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJjX3F1YWxpdHkgPSBi YXNlX2N0eC0+ZXhwbGljaXRfcXA7Cj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoYXZjdHgt Pmdsb2JhbF9xdWFsaXR5ID4gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJjX3F1YWxp dHkgPSBhdmN0eC0+Z2xvYmFsX3F1YWxpdHk7CgpXaGVuIEFWX0NPREVDX0ZMQUdfUVNDQUxFIGlz IHNldCwgYXZjdHgtPmdsb2JhbF9xdWFsaXR5IGlzIGxhbWJkYSwgeW91J2QgY29udmVydApsYW1i ZGEgdG8gcXAuIAoKCj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmNfcXVhbGl0eSA9IGN0eC0+Y29kZWMtPmRlZmF1bHRfcXVhbGl0eTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiTm8gcXVh bGl0eSBsZXZlbCBzZXQ7ICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICJ1c2luZyBkZWZhdWx0ICglZCkuXG4iLCByY19xdWFsaXR5KTsKPiArwqDCoMKgwqDCoMKgwqAg fQo+ICvCoMKgwqAgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqAgcmNfcXVhbGl0eSA9IDA7Cj4g K8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgaWYgKHJjX21vZGUtPmhyZCkgewo+ICvCoMKgwqDCoMKg wqDCoCBpZiAoYXZjdHgtPnJjX2J1ZmZlcl9zaXplKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGhyZF9idWZmZXJfc2l6ZSA9IGF2Y3R4LT5yY19idWZmZXJfc2l6ZTsKPiArwqDCoMKgwqDCoMKg wqAgZWxzZSBpZiAoYXZjdHgtPnJjX21heF9yYXRlID4gMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBocmRfYnVmZmVyX3NpemUgPSBhdmN0eC0+cmNfbWF4X3JhdGU7Cj4gK8KgwqDCoMKgwqDC oMKgIGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocmRfYnVmZmVyX3NpemUgPSBhdmN0 eC0+Yml0X3JhdGU7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChhdmN0eC0+cmNfaW5pdGlhbF9idWZm ZXJfb2NjdXBhbmN5KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGF2Y3R4LT5yY19p bml0aWFsX2J1ZmZlcl9vY2N1cGFuY3kgPiBocmRfYnVmZmVyX3NpemUpIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxp ZCBSQyBidWZmZXIgc2V0dGluZ3M6ICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgIm11c3QgaGF2ZSBpbml0aWFsIGJ1ZmZlciBzaXplICglZCkgPD0gIgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiYnVmZmVyIHNp emUgKCUiUFJJZDY0IikuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJfb2NjdXBhbmN5LCBocmRfYnVmZmVy X3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaHJkX2luaXRpYWxfYnVmZmVyX2Z1bGxuZXNzID0gYXZjdHgtPnJjX2luaXRpYWxfYnVm ZmVyX29jY3VwYW5jeTsKPiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBocmRfaW5pdGlhbF9idWZmZXJfZnVsbG5lc3MgPSBocmRfYnVmZmVyX3NpemUg KiAzIC8gNDsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfSBlbHNlIHsKPiArwqDCoMKg wqDCoMKgwqAgaWYgKGF2Y3R4LT5yY19idWZmZXJfc2l6ZSB8fCBhdmN0eC0+cmNfaW5pdGlhbF9i dWZmZXJfb2NjdXBhbmN5KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfV0FSTklORywgIkJ1ZmZlcmluZyBzZXR0aW5ncyBhcmUgaWdub3JlZCAiCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaW4gJXMgUkMgbW9kZS5cbiIsIHJj X21vZGUtPm5hbWUpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBo cmRfYnVmZmVyX3NpemXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAwOwo+ICvCoMKgwqDCoMKg wqDCoCBocmRfaW5pdGlhbF9idWZmZXJfZnVsbG5lc3MgPSAwOwo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIGlmIChyY190YXJnZXRfYml0cmF0ZcKgwqDCoMKgwqDCoMKgwqDCoCA+IFVJTlQzMl9N QVggfHwKPiArwqDCoMKgwqDCoMKgwqAgaHJkX2J1ZmZlcl9zaXplwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID4gVUlOVDMyX01BWCB8fAo+ICvCoMKgwqDCoMKgwqDCoCBocmRfaW5pdGlhbF9idWZm ZXJfZnVsbG5lc3MgPiBVSU5UMzJfTUFYKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiUkMgcGFyYW1ldGVycyBvZiAyXjMyIG9yICIKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAiZ3JlYXRlciBhcmUgbm90IHN1cHBvcnRlZCBieSBEM0QxMi5c biIpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqAg fQo+ICsKPiArwqDCoMKgIGJhc2VfY3R4LT5yY19xdWFsaXR5wqAgPSByY19xdWFsaXR5Owo+ICsK PiArwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJSQyBtb2RlOiAlcy5cbiIs IHJjX21vZGUtPm5hbWUpOwo+ICsKPiArwqDCoMKgIGlmIChyY19tb2RlLT5xdWFsaXR5KQo+ICvC oMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiUkMgcXVhbGl0eTog JWQuXG4iLCByY19xdWFsaXR5KTsKPiArCj4gK8KgwqDCoCBpZiAocmNfbW9kZS0+aHJkKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJSQyBidWZmZXI6 ICUiUFJJZDY0IiBiaXRzLCAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImluaXRp YWwgZnVsbG5lc3MgJSJQUklkNjQiIGJpdHMuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGhyZF9idWZmZXJfc2l6ZSwgaHJkX2luaXRpYWxfYnVmZmVyX2Z1bGxuZXNzKTsKPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwICYmIGF2 Y3R4LT5mcmFtZXJhdGUuZGVuID4gMCkKPiArwqDCoMKgwqDCoMKgwqAgYXZfcmVkdWNlKCZmcl9u dW0sICZmcl9kZW4sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgt PmZyYW1lcmF0ZS5udW0sIGF2Y3R4LT5mcmFtZXJhdGUuZGVuLCA2NTUzNSk7Cj4gK8KgwqDCoCBl bHNlCj4gK8KgwqDCoMKgwqDCoMKgIGF2X3JlZHVjZSgmZnJfbnVtLCAmZnJfZGVuLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT50aW1lX2Jhc2UuZGVuLCBhdmN0 eC0+dGltZV9iYXNlLm51bSwgNjU1MzUpOwo+ICsKPiArwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX1ZFUkJPU0UsICJSQyBmcmFtZXJhdGU6ICVkLyVkICglLjJmIGZwcykuXG4iLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoCBmcl9udW0sIGZyX2RlbiwgKGRvdWJsZSlmcl9udW0gLyBmcl9kZW4p Owo+ICsKPiArwqDCoMKgIGN0eC0+cmMuRmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA9Cj4gRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfRkxB R19OT05FOwo+ICvCoMKgwqAgY3R4LT5yYy5UYXJnZXRGcmFtZVJhdGUuTnVtZXJhdG9ywqDCoCA9 IGZyX251bTsKPiArwqDCoMKgIGN0eC0+cmMuVGFyZ2V0RnJhbWVSYXRlLkRlbm9taW5hdG9yID0g ZnJfZGVuOwo+ICvCoMKgwqAgY3R4LT5yYy5Nb2RlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCA9IHJjX21vZGUtPmQzZDEyX21vZGU7Cj4gKwo+ICvCoMKgwqAg c3dpdGNoIChyY19tb2RlLT5tb2RlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgUkNfTU9ERV9D UVA6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gY3FwIENvbmZpZ1BhcmFtcyB3aWxsIGJl IHVwZGF0ZWQgaW4gY3R4LT5jb2RlYy0+Y29uZmlndXJlLgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBSQ19NT0RFX0NCUjoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9DQlIg KmNicl9jdGw7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cmMuQ29uZmlnUGFy YW1zLkRhdGFTaXplID0KPiBzaXplb2YoRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xf Q0JSKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYnJfY3RsID0gYXZfbWFsbG9jeihjdHgt PnJjLkNvbmZpZ1BhcmFtcy5EYXRhU2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KCFjYnJfY3RsKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2JyX2N0bC0+VGFyZ2V0 Qml0UmF0ZcKgwqDCoMKgwqAgPSByY190YXJnZXRfYml0cmF0ZTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjYnJfY3RsLT5WQlZDYXBhY2l0ecKgwqDCoMKgwqDCoMKgID0gaHJkX2J1ZmZlcl9z aXplOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNicl9jdGwtPkluaXRpYWxWQlZGdWxsbmVz cyA9IGhyZF9pbml0aWFsX2J1ZmZlcl9mdWxsbmVzczsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjdHgtPnJjLkZsYWdzIHw9Cj4gRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfRkxB R19FTkFCTEVfVkJWX1NJWkVTOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXZj dHgtPnFtaW4gPiAwIHx8IGF2Y3R4LT5xbWF4ID4gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2JyX2N0bC0+TWluUVAgPSBhdmN0eC0+cW1pbjsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNicl9jdGwtPk1heFFQID0gYXZjdHgtPnFtYXg7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnJjLkZsYWdzIHw9Cj4gRDNEMTJfVklERU9f RU5DT0RFUl9SQVRFX0NPTlRST0xfRkxBR19FTkFCTEVfUVBfUkFOR0U7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnJjLkNvbmZp Z1BhcmFtcy5wQ29uZmlndXJhdGlvbl9DQlIgPSBjYnJfY3RsOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJyZWFrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBSQ19NT0RFX1ZCUjoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9W QlIgKnZicl9jdGw7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cmMuQ29uZmln UGFyYW1zLkRhdGFTaXplID0KPiBzaXplb2YoRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRS T0xfVkJSKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YnJfY3RsID0gYXZfbWFsbG9jeihj dHgtPnJjLkNvbmZpZ1BhcmFtcy5EYXRhU2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKCF2YnJfY3RsKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmJyX2N0bC0+VGFy Z2V0QXZnQml0UmF0ZcKgwqAgPSByY190YXJnZXRfYml0cmF0ZTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB2YnJfY3RsLT5QZWFrQml0UmF0ZcKgwqDCoMKgwqDCoMKgID0gcmNfcGVha19iaXRy YXRlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZicl9jdGwtPlZCVkNhcGFjaXR5wqDCoMKg wqDCoMKgwqAgPSBocmRfYnVmZmVyX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmJy X2N0bC0+SW5pdGlhbFZCVkZ1bGxuZXNzID0gaHJkX2luaXRpYWxfYnVmZmVyX2Z1bGxuZXNzOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cmMuRmxhZ3MgfD0KPiBEM0QxMl9WSURFT19F TkNPREVSX1JBVEVfQ09OVFJPTF9GTEFHX0VOQUJMRV9WQlZfU0laRVM7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChhdmN0eC0+cW1pbiA+IDAgfHwgYXZjdHgtPnFtYXggPiAwKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YnJfY3RsLT5NaW5RUCA9IGF2Y3R4 LT5xbWluOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmJyX2N0bC0+TWF4UVAg PSBhdmN0eC0+cW1heDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cmMu RmxhZ3MgfD0KPiBEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9GTEFHX0VOQUJMRV9R UF9SQU5HRTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGN0eC0+cmMuQ29uZmlnUGFyYW1zLnBDb25maWd1cmF0aW9uX1ZCUiA9IHZicl9j dGw7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oCBjYXNlIFJDX01PREVfUVZCUjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEM0QxMl9WSURF T19FTkNPREVSX1JBVEVfQ09OVFJPTF9RVkJSICpxdmJyX2N0bDsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY3R4LT5yYy5Db25maWdQYXJhbXMuRGF0YVNpemUgPQo+IHNpemVvZihEM0Qx Ml9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9RVkJSKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBxdmJyX2N0bCA9IGF2X21hbGxvY3ooY3R4LT5yYy5Db25maWdQYXJhbXMuRGF0YVNpemUp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghcXZicl9jdGwpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBxdmJyX2N0bC0+VGFyZ2V0QXZnQml0UmF0ZcKgwqDCoMKgwqAgPSBy Y190YXJnZXRfYml0cmF0ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBxdmJyX2N0bC0+UGVh a0JpdFJhdGXCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHJjX3BlYWtfYml0cmF0ZTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBxdmJyX2N0bC0+Q29uc3RhbnRRdWFsaXR5VGFyZ2V0ID0gcmNfcXVh bGl0eTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGF2Y3R4LT5xbWluID4gMCB8 fCBhdmN0eC0+cW1heCA+IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHF2 YnJfY3RsLT5NaW5RUCA9IGF2Y3R4LT5xbWluOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcXZicl9jdGwtPk1heFFQID0gYXZjdHgtPnFtYXg7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjdHgtPnJjLkZsYWdzIHw9Cj4gRDNEMTJfVklERU9fRU5DT0RFUl9SQVRF X0NPTlRST0xfRkxBR19FTkFCTEVfUVBfUkFOR0U7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnJjLkNvbmZpZ1BhcmFtcy5wQ29u ZmlndXJhdGlvbl9RVkJSID0gcXZicl9jdGw7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaW5pdF9nb3Bfc3RydWN0dXJlKEFWQ29kZWNDb250ZXh0 ICphdmN0eCkKPiArewo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRleHTCoMKgwqDCoCAq Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIHVpbnQzMl90IHJlZl9sMCwgcmVmX2wx Owo+ICvCoMKgwqAgaW50IGVycjsKPiArwqDCoMKgIEhSRVNVTFQgaHI7Cj4gK8KgwqDCoCBEM0Qx Ml9GRUFUVVJFX0RBVEFfVklERU9fRU5DT0RFUl9DT0RFQ19QSUNUVVJFX0NPTlRST0xfU1VQUE9S VCBzdXBwb3J0Owo+ICvCoMKgwqAgdW5pb24gewo+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9WSURF T19FTkNPREVSX0NPREVDX1BJQ1RVUkVfQ09OVFJPTF9TVVBQT1JUX0gyNjQgaDI2NDsKPiArwqDC oMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19QSUNUVVJFX0NPTlRST0xfU1VQ UE9SVF9IRVZDIGhldmM7Cj4gK8KgwqDCoCB9IGNvZGVjX3N1cHBvcnQ7Cj4gKwo+ICvCoMKgwqAg c3VwcG9ydC5Ob2RlSW5kZXggPSAwOwo+ICvCoMKgwqAgc3VwcG9ydC5Db2RlY8KgwqDCoMKgID0g Y3R4LT5jb2RlYy0+ZDNkMTJfY29kZWM7Cj4gK8KgwqDCoCBzdXBwb3J0LlByb2ZpbGXCoMKgID0g Y3R4LT5wcm9maWxlLT5kM2QxMl9wcm9maWxlOwo+ICsKPiArwqDCoMKgIHN3aXRjaCAoY3R4LT5j b2RlYy0+ZDNkMTJfY29kZWMpIHsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBEM0QxMl9WSURFT19F TkNPREVSX0NPREVDX0gyNjQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3VwcG9ydC5QaWN0 dXJlU3VwcG9ydC5EYXRhU2l6ZSA9IHNpemVvZihjb2RlY19zdXBwb3J0LmgyNjQpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN1cHBvcnQuUGljdHVyZVN1cHBvcnQucEgyNjRTdXBwb3J0ID0g JmNvZGVjX3N1cHBvcnQuaDI2NDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19IRVZDOgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN1cHBvcnQuUGljdHVyZVN1cHBvcnQuRGF0YVNpemUg PSBzaXplb2YoY29kZWNfc3VwcG9ydC5oZXZjKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dXBwb3J0LlBpY3R1cmVTdXBwb3J0LnBIRVZDU3VwcG9ydCA9ICZjb2RlY19zdXBwb3J0LmhldmM7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKg wqAgaHIgPSBJRDNEMTJWaWRlb0RldmljZTNfQ2hlY2tGZWF0dXJlU3VwcG9ydChjdHgtPnZpZGVv X2RldmljZTMsCj4gRDNEMTJfRkVBVFVSRV9WSURFT19FTkNPREVSX0NPREVDX1BJQ1RVUkVfQ09O VFJPTF9TVVBQT1JULAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnN1cHBvcnQsIHNpemVv ZihzdXBwb3J0KSk7Cj4gK8KgwqDCoCBpZiAoRkFJTEVEKGhyKSkKPiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArCj4gK8KgwqDCoCBpZiAoc3VwcG9ydC5Jc1N1cHBv cnRlZCkgewo+ICvCoMKgwqDCoMKgwqDCoCBzd2l0Y2ggKGN0eC0+Y29kZWMtPmQzZDEyX2NvZGVj KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSBEM0QxMl9WSURFT19FTkNPREVSX0NP REVDX0gyNjQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWZfbDAgPSBGRk1J TihzdXBwb3J0LlBpY3R1cmVTdXBwb3J0LnBIMjY0U3VwcG9ydC0KPiA+TWF4TDBSZWZlcmVuY2Vz Rm9yUCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN1cHBvcnQuUGljdHVyZVN1cHBvcnQucEgyNjRTdXBwb3J0LQo+ID5NYXhM MVJlZmVyZW5jZXNGb3JCKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZl9s MSA9IHN1cHBvcnQuUGljdHVyZVN1cHBvcnQucEgyNjRTdXBwb3J0LQo+ID5NYXhMMVJlZmVyZW5j ZXNGb3JCOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNhc2UgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19IRVZD Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVmX2wwID0gRkZNSU4oc3VwcG9y dC5QaWN0dXJlU3VwcG9ydC5wSEVWQ1N1cHBvcnQtCj4gPk1heEwwUmVmZXJlbmNlc0ZvclAsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdXBwb3J0LlBpY3R1cmVTdXBwb3J0LnBIRVZDU3VwcG9ydC0KPiA+TWF4TDFSZWZlcmVu Y2VzRm9yQik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWZfbDEgPSBzdXBw b3J0LlBpY3R1cmVTdXBwb3J0LnBIRVZDU3VwcG9ydC0KPiA+TWF4TDFSZWZlcmVuY2VzRm9yQjsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDC oCB9Cj4gK8KgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoCByZWZfbDAgPSByZWZfbDEg PSAwOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGlmIChyZWZfbDAgPiAwICYmIHJlZl9sMSA+ IDAgJiYgY3R4LT5iaV9ub3RfZW1wdHkpIHsKPiArwqDCoMKgwqDCoMKgwqAgYmFzZV9jdHgtPnBf dG9fZ3BiID0gMTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIkRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IFAtZnJhbWVzLCAiCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgInJlcGxhY2luZyB0aGVtIHdpdGggQi1mcmFtZXMuXG4iKTsKPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCBlcnIgPSBmZl9od19iYXNlX2luaXRfZ29wX3N0cnVjdHVyZShh dmN0eCwgcmVmX2wwLCByZWZfbDEsIGN0eC0+Y29kZWMtCj4gPmZsYWdzLCAwKTsKPiArwqDCoMKg IGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+ICsKPiArwqDCoMKg IHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGQzZDEydmFfY3JlYXRlX2VuY29kZXIo QVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0 wqDCoMKgICpiYXNlX2N0eMKgwqDCoMKgID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQz RDEyVkFFbmNvZGVDb250ZXh0wqDCoCAqY3R4wqDCoMKgwqDCoMKgwqDCoMKgID0gYXZjdHgtPnBy aXZfZGF0YTsKPiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZyYW1lc19od2N0eCA9 IGJhc2VfY3R4LT5pbnB1dF9mcmFtZXMtPmh3Y3R4Owo+ICvCoMKgwqAgSFJFU1VMVCBocjsKPiAr Cj4gK8KgwqDCoCBEM0QxMl9WSURFT19FTkNPREVSX0RFU0MgZGVzYyA9IHsKPiArwqDCoMKgwqDC oMKgwqAgLk5vZGVNYXNrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9WSURFT19FTkNPREVSX0ZMQUdfTk9ORSwKPiArwqDC oMKgwqDCoMKgwqAgLkVuY29kZUNvZGVjwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9IGN0eC0+Y29kZWMtPmQzZDEyX2NvZGVjLAo+ICvCoMKgwqDCoMKgwqDCoCAuRW5jb2RlUHJv ZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+cHJvZmlsZS0+ZDNkMTJf cHJvZmlsZSwKPiArwqDCoMKgwqDCoMKgwqAgLklucHV0Rm9ybWF0wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA9IGZyYW1lc19od2N0eC0+Zm9ybWF0LAo+ICvCoMKgwqDCoMKgwqDC oCAuQ29kZWNDb25maWd1cmF0aW9uwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmNvZGVjX2Nv bmYsCj4gK8KgwqDCoMKgwqDCoMKgIC5NYXhNb3Rpb25Fc3RpbWF0aW9uUHJlY2lzaW9uID0KPiBE M0QxMl9WSURFT19FTkNPREVSX01PVElPTl9FU1RJTUFUSU9OX1BSRUNJU0lPTl9NT0RFX01BWElN VU0sCj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIGhyID0gSUQzRDEyVmlkZW9EZXZpY2UzX0Ny ZWF0ZVZpZGVvRW5jb2RlcihjdHgtPnZpZGVvX2RldmljZTMsICZkZXNjLAo+ICZJSURfSUQzRDEy VmlkZW9FbmNvZGVyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodm9p ZCAqKikmY3R4LT5lbmNvZGVyKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDC oMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBl bmNvZGVyLlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4g K8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZDNkMTJ2YV9jcmVhdGVfZW5jb2Rlcl9oZWFwKEFWQ29kZWNDb250ZXh0KiBhdmN0eCkKPiArewo+ ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4g K8KgwqDCoCBIUkVTVUxUIGhyOwo+ICsKPiArwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfSEVB UF9ERVNDIGRlc2MgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5Ob2RlTWFza8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IEQzRDEyX1ZJREVPX0VOQ09ERVJfRkxBR19OT05FLAo+ICvCoMKgwqDC oMKgwqDCoCAuRW5jb2RlQ29kZWPCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmNvZGVjLT5kM2Qx Ml9jb2RlYywKPiArwqDCoMKgwqDCoMKgwqAgLkVuY29kZVByb2ZpbGXCoMKgwqDCoMKgwqDCoCA9 IGN0eC0+cHJvZmlsZS0+ZDNkMTJfcHJvZmlsZSwKPiArwqDCoMKgwqDCoMKgwqAgLkVuY29kZUxl dmVswqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5sZXZlbCwKPiArwqDCoMKgwqDCoMKgwqAgLlJl c29sdXRpb25zTGlzdENvdW50ID0gMSwKPiArwqDCoMKgwqDCoMKgwqAgLnBSZXNvbHV0aW9uTGlz dMKgwqDCoMKgwqAgPSAmY3R4LT5yZXNvbHV0aW9uLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDC oCBociA9IElEM0QxMlZpZGVvRGV2aWNlM19DcmVhdGVWaWRlb0VuY29kZXJIZWFwKGN0eC0+dmlk ZW9fZGV2aWNlMywgJmRlc2MsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAKPiAmSUlEX0lEM0QxMlZpZGVvRW5jb2RlckhlYXAsICh2b2lkICoqKSZjdHgtPmVu Y29kZXJfaGVhcCk7Cj4gK8KgwqDCoCBpZiAoRkFJTEVEKGhyKSkgewo+ICvCoMKgwqDCoMKgwqDC oCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgZW5jb2RlciBo ZWFwLlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK8Kg wqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGQz ZDEydmFfZW5jb2RlX2ZyZWVfYnVmZmVyKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkKPiAr ewo+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2UgKnBSZXNvdXJjZTsKPiArCj4gK8KgwqDCoCBwUmVz b3VyY2UgPSAoSUQzRDEyUmVzb3VyY2UgKilkYXRhOwo+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JF TEVBU0UocFJlc291cmNlKTsKPiArfQo+ICsKPiArc3RhdGljIEFWQnVmZmVyUmVmICpkM2QxMnZh X2VuY29kZV9hbGxvY19vdXRwdXRfYnVmZmVyKHZvaWQgKm9wYXF1ZSwgc2l6ZV90Cj4gc2l6ZSkK PiArewo+ICvCoMKgwqAgQVZDb2RlY0NvbnRleHTCoMKgwqDCoCAqYXZjdHggPSBvcGFxdWU7Cj4g K8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlQ29udGV4dMKgwqDCoMKgICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2UgKnBSZXNvdXJjZSA9IE5VTEw7Cj4gK8Kg wqDCoCBIUkVTVUxUIGhyOwo+ICvCoMKgwqAgQVZCdWZmZXJSZWYgKnJlZjsKPiArwqDCoMKgIEQz RDEyX0hFQVBfUFJPUEVSVElFUyBoZWFwX3Byb3BzOwo+ICvCoMKgwqAgRDNEMTJfSEVBUF9UWVBF IGhlYXBfdHlwZSA9IEQzRDEyX0hFQVBfVFlQRV9SRUFEQkFDSzsKPiArCj4gK8KgwqDCoCBEM0Qx Ml9SRVNPVVJDRV9ERVNDIGRlc2MgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5EaW1lbnNpb27CoMKg wqDCoMKgwqDCoCA9IEQzRDEyX1JFU09VUkNFX0RJTUVOU0lPTl9CVUZGRVIsCj4gK8KgwqDCoMKg wqDCoMKgIC5BbGlnbm1lbnTCoMKgwqDCoMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5X aWR0aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBGRkFMSUdOKDMgKiBiYXNlX2N0eC0+c3VyZmFj ZV93aWR0aCAqIGJhc2VfY3R4LQo+ID5zdXJmYWNlX2hlaWdodCArICgxIDw8IDE2KSwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBEM0QxMl9URVhUVVJFX0RBVEFfUExBQ0VNRU5UX0FMSUdOTUVOVCksCj4gK8Kg wqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IDEsCj4gK8KgwqDCoMKg wqDCoMKgIC5EZXB0aE9yQXJyYXlTaXplID0gMSwKPiArwqDCoMKgwqDCoMKgwqAgLk1pcExldmVs c8KgwqDCoMKgwqDCoMKgID0gMSwKPiArwqDCoMKgwqDCoMKgwqAgLkZvcm1hdMKgwqDCoMKgwqDC oMKgwqDCoMKgID0gRFhHSV9GT1JNQVRfVU5LTk9XTiwKPiArwqDCoMKgwqDCoMKgwqAgLlNhbXBs ZURlc2PCoMKgwqDCoMKgwqAgPSB7IC5Db3VudCA9IDEsIC5RdWFsaXR5ID0gMCB9LAo+ICvCoMKg wqDCoMKgwqDCoCAuTGF5b3V0wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0xB WU9VVF9ST1dfTUFKT1IsCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBEM0QxMl9SRVNPVVJDRV9GTEFHX05PTkUsCj4gK8KgwqDCoCB9Owo+ICsKPiArwqDC oMKgIGN0eC0+aHdjdHgtPmRldmljZS0+bHBWdGJsLT5HZXRDdXN0b21IZWFwUHJvcGVydGllcyhj dHgtPmh3Y3R4LT5kZXZpY2UsCj4gJmhlYXBfcHJvcHMsIDAsIGhlYXBfdHlwZSk7Cj4gKwo+ICvC oMKgwqAgaHIgPSBJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWl0dGVkUmVzb3VyY2UoY3R4LT5od2N0 eC0+ZGV2aWNlLAo+ICZoZWFwX3Byb3BzLCBEM0QxMl9IRUFQX0ZMQUdfTk9ORSwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZkZXNjLAo+IEQzRDEyX1JFU09VUkNFX1NUQVRF X0NPTU1PTiwgTlVMTCwgJklJRF9JRDNEMTJSZXNvdXJjZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICh2b2lkICoqKSZwUmVzb3VyY2UpOwo+ICsKPiArwqDCoMKgIGlmIChG QUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIGNyZWF0ZSBkM2QxMiBidWZmZXIuXG4iKTsKPiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIE5VTEw7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmVmID0gYXZfYnVmZmVyX2Ny ZWF0ZSgodWludDhfdCAqKSh1aW50cHRyX3QpcFJlc291cmNlLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihwUmVzb3VyY2UpLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZk M2QxMnZhX2VuY29kZV9mcmVlX2J1ZmZlciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmN0eCwgQVZfQlVGRkVSX0ZMQUdfUkVBRE9OTFkp Owo+ICvCoMKgwqAgaWYgKCFyZWYpIHsKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfT0JKRUNUX1JF TEVBU0UocFJlc291cmNlKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gK8KgwqDC oCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIHJlZjsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2Qx MnZhX2VuY29kZV9wcmVwYXJlX291dHB1dF9idWZmZXJzKEFWQ29kZWNDb250ZXh0ICphdmN0eCkK PiArewo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHjCoMKgwqDCoMKgID0g YXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICpjdHjCoMKg wqDCoMKgwqDCoMKgwqAgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgQVZEM0QxMlZBRnJh bWVzQ29udGV4dCAqZnJhbWVzX2N0eCA9IGJhc2VfY3R4LT5pbnB1dF9mcmFtZXMtPmh3Y3R4Owo+ ICvCoMKgwqAgSFJFU1VMVCBocjsKPiArCj4gK8KgwqDCoCBjdHgtPnJlcS5Ob2RlSW5kZXjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMDsKPiArwqDCoMKgIGN0eC0+cmVxLkNvZGVjwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5jb2RlYy0+ZDNkMTJfY29k ZWM7Cj4gK8KgwqDCoCBjdHgtPnJlcS5Qcm9maWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBjdHgtPnByb2ZpbGUtPmQzZDEyX3Byb2ZpbGU7Cj4gK8KgwqDCoCBjdHgtPnJlcS5J bnB1dEZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGZyYW1lc19jdHgtPmZvcm1hdDsK PiArwqDCoMKgIGN0eC0+cmVxLlBpY3R1cmVUYXJnZXRSZXNvbHV0aW9uID0gY3R4LT5yZXNvbHV0 aW9uOwo+ICsKPiArwqDCoMKgIGhyID0gSUQzRDEyVmlkZW9EZXZpY2UzX0NoZWNrRmVhdHVyZVN1 cHBvcnQoY3R4LT52aWRlb19kZXZpY2UzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgCj4gRDNEMTJfRkVBVFVSRV9WSURFT19FTkNPREVSX1JFU09VUkNFX1JFUVVJUkVN RU5UUywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY3R4LT5yZXEs IHNpemVvZihjdHgtPnJlcSkpOwo+ICvCoMKgwqAgaWYgKEZBSUxFRChocikpIHsKPiArwqDCoMKg wqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY2hlY2sgZW5j b2RlciByZXNvdXJjZQo+IHJlcXVpcmVtZW50cyBzdXBwb3J0LlxuIik7Cj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgaWYg KCFjdHgtPnJlcS5Jc1N1cHBvcnRlZCkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkVuY29kZXIgcmVzb3VyY2UgcmVxdWlyZW1lbnRzCj4gdW5zdXBwb3J0 ZWQuXG4iKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCBjdHgtPm91dHB1dF9idWZmZXJfcG9vbCA9IGF2X2J1ZmZlcl9w b29sX2luaXQyKHNpemVvZihJRDNEMTJSZXNvdXJjZSAqKSwKPiBhdmN0eCwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ICZkM2QxMnZhX2VuY29kZV9hbGxv Y19vdXRwdXRfYnVmZmVyLCBOVUxMKTsKPiArwqDCoMKgIGlmICghY3R4LT5vdXRwdXRfYnVmZmVy X3Bvb2wpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvC oMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfY3Jl YXRlX2NvbW1hbmRfb2JqZWN0cyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArwqDCoMKg IEQzRDEyVkFFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAg SUQzRDEyQ29tbWFuZEFsbG9jYXRvciAqY29tbWFuZF9hbGxvY2F0b3IgPSBOVUxMOwo+ICvCoMKg wqAgaW50IGVycjsKPiArwqDCoMKgIEhSRVNVTFQgaHI7Cj4gKwo+ICvCoMKgwqAgRDNEMTJfQ09N TUFORF9RVUVVRV9ERVNDIHF1ZXVlX2Rlc2MgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDC oMKgwqAgPSBEM0QxMl9DT01NQU5EX0xJU1RfVFlQRV9WSURFT19FTkNPREUsCj4gK8KgwqDCoMKg wqDCoMKgIC5Qcmlvcml0eSA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoCA9IEQz RDEyX0NPTU1BTkRfUVVFVUVfRkxBR19OT05FLAo+ICvCoMKgwqDCoMKgwqDCoCAuTm9kZU1hc2sg PSAwLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBjdHgtPmFsbG9jYXRvcl9xdWV1ZSA9IGF2 X2ZpZm9fYWxsb2MyKEQzRDEyVkFfVklERU9fRU5DX0FTWU5DX0RFUFRILAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNpemVvZihDb21tYW5kQWxsb2NhdG9yKSwKPiBBVl9GSUZPX0ZMQUdf QVVUT19HUk9XKTsKPiArwqDCoMKgIGlmICghY3R4LT5hbGxvY2F0b3JfcXVldWUpCj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgaHIgPSBJRDNE MTJEZXZpY2VfQ3JlYXRlRmVuY2UoY3R4LT5od2N0eC0+ZGV2aWNlLCAwLAo+IEQzRDEyX0ZFTkNF X0ZMQUdfTk9ORSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZJSURfSUQzRDEyRmVuY2UsICh2b2lkICoqKSZjdHgt Cj4gPnN5bmNfY3R4LmZlbmNlKTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDC oMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBm ZW5jZSglbHgpXG4iLAo+IChsb25nKWhyKTsKPiArwqDCoMKgwqDCoMKgwqAgZXJyID0gQVZFUlJP Ul9VTktOT1dOOwo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gK8KgwqDCoCB9Cj4gKwo+ ICvCoMKgwqAgY3R4LT5zeW5jX2N0eC5ldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIEZBTFNFLCBG QUxTRSwgTlVMTCk7Cj4gK8KgwqDCoCBpZiAoIWN0eC0+c3luY19jdHguZXZlbnQpCj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gZmFpbDsKPiArCj4gK8KgwqDCoCBlcnIgPSBkM2QxMnZhX2dldF92YWxp ZF9jb21tYW5kX2FsbG9jYXRvcihhdmN0eCwgJmNvbW1hbmRfYWxsb2NhdG9yKTsKPiArwqDCoMKg IGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gKwo+ICvCoMKgwqAg aHIgPSBJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWFuZFF1ZXVlKGN0eC0+aHdjdHgtPmRldmljZSwg JnF1ZXVlX2Rlc2MsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZJSURfSUQzRDEyQ29tbWFu ZFF1ZXVlLCAodm9pZAo+ICoqKSZjdHgtPmNvbW1hbmRfcXVldWUpOwo+ICvCoMKgwqAgaWYgKEZB SUxFRChocikpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJGYWlsZWQgdG8gY3JlYXRlIGNvbW1hbmQgcXVldWUoJWx4KVxuIiwKPiAobG9uZylocik7Cj4g K8KgwqDCoMKgwqDCoMKgIGVyciA9IEFWRVJST1JfVU5LTk9XTjsKPiArwqDCoMKgwqDCoMKgwqAg Z290byBmYWlsOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGhyID0gSUQzRDEyRGV2aWNlX0Ny ZWF0ZUNvbW1hbmRMaXN0KGN0eC0+aHdjdHgtPmRldmljZSwgMCwKPiBxdWV1ZV9kZXNjLlR5cGUs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb21tYW5kX2FsbG9jYXRvciwgTlVMTCwKPiAmSUlE X0lEM0QxMkNvbW1hbmRMaXN0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHZvaWQgKiopJmN0 eC0+Y29tbWFuZF9saXN0KTsKPiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKg wqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBjb21t YW5kIGxpc3QoJWx4KVxuIiwKPiAobG9uZylocik7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IEFW RVJST1JfVU5LTk9XTjsKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqAgfQo+ ICsKPiArwqDCoMKgIGhyID0gSUQzRDEyVmlkZW9FbmNvZGVDb21tYW5kTGlzdDJfQ2xvc2UoY3R4 LT5jb21tYW5kX2xpc3QpOwo+ICvCoMKgwqAgaWYgKEZBSUxFRChocikpIHsKPiArwqDCoMKgwqDC oMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY2xvc2UgdGhlIGNv bW1hbmQKPiBsaXN0KCVseClcbiIsIChsb25nKWhyKTsKPiArwqDCoMKgwqDCoMKgwqAgZXJyID0g QVZFUlJPUl9VTktOT1dOOwo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gK8KgwqDCoCB9 Cj4gKwo+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVlX0V4ZWN1dGVDb21tYW5kTGlzdHMoY3R4 LT5jb21tYW5kX3F1ZXVlLCAxLAo+IChJRDNEMTJDb21tYW5kTGlzdCAqKikmY3R4LT5jb21tYW5k X2xpc3QpOwo+ICsKPiArwqDCoMKgIGVyciA9IGQzZDEydmFfc3luY193aXRoX2dwdShhdmN0eCk7 Cj4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsK PiArwqDCoMKgIGVyciA9IGQzZDEydmFfZGlzY2FyZF9jb21tYW5kX2FsbG9jYXRvcihhdmN0eCwg Y29tbWFuZF9hbGxvY2F0b3IsIGN0eC0KPiA+c3luY19jdHguZmVuY2VfdmFsdWUpOwo+ICvCoMKg wqAgaWYgKGVyciA8IDApCj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiArCj4gK8KgwqDC oCByZXR1cm4gMDsKPiArCj4gK2ZhaWw6Cj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShj b21tYW5kX2FsbG9jYXRvcik7Cj4gK8KgwqDCoCByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGQzZDEydmFfZW5jb2RlX2NyZWF0ZV9yZWNvbl9mcmFtZXMoQVZDb2RlY0NvbnRleHQg KmF2Y3R4KQo+ICt7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2 Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICpod2N0eDsK PiArwqDCoMKgIGVudW0gQVZQaXhlbEZvcm1hdCByZWNvbl9mb3JtYXQ7Cj4gK8KgwqDCoCBpbnQg ZXJyOwo+ICsKPiArwqDCoMKgIGVyciA9IGZmX2h3X2Jhc2VfZ2V0X3JlY29uX2Zvcm1hdChhdmN0 eCwgTlVMTCwgJnJlY29uX2Zvcm1hdCk7Cj4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIGVycjsKPiArCj4gK8KgwqDCoCBiYXNlX2N0eC0+cmVjb25fZnJhbWVz X3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKGJhc2VfY3R4LT5kZXZpY2VfcmVmKTsKPiArwqDC oMKgIGlmICghYmFzZV9jdHgtPnJlY29uX2ZyYW1lc19yZWYpCj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgYmFzZV9jdHgtPnJlY29uX2ZyYW1l cyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWJhc2VfY3R4LT5yZWNvbl9mcmFtZXNfcmVmLQo+ID5k YXRhOwo+ICvCoMKgwqAgaHdjdHggPSAoQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqKWJhc2VfY3R4 LT5yZWNvbl9mcmFtZXMtPmh3Y3R4Owo+ICsKPiArwqDCoMKgIGJhc2VfY3R4LT5yZWNvbl9mcmFt ZXMtPmZvcm1hdMKgwqDCoCA9IEFWX1BJWF9GTVRfRDNEMTI7Cj4gK8KgwqDCoCBiYXNlX2N0eC0+ cmVjb25fZnJhbWVzLT5zd19mb3JtYXQgPSByZWNvbl9mb3JtYXQ7Cj4gK8KgwqDCoCBiYXNlX2N0 eC0+cmVjb25fZnJhbWVzLT53aWR0aMKgwqDCoMKgID0gYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGg7 Cj4gK8KgwqDCoCBiYXNlX2N0eC0+cmVjb25fZnJhbWVzLT5oZWlnaHTCoMKgwqAgPSBiYXNlX2N0 eC0+c3VyZmFjZV9oZWlnaHQ7Cj4gKwo+ICvCoMKgwqAgaHdjdHgtPmZsYWdzID0gRDNEMTJfUkVT T1VSQ0VfRkxBR19WSURFT19FTkNPREVfUkVGRVJFTkNFX09OTFkgfAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfRkxBR19ERU5ZX1NIQURFUl9S RVNPVVJDRTsKPiArCj4gK8KgwqDCoCBlcnIgPSBhdl9od2ZyYW1lX2N0eF9pbml0KGJhc2VfY3R4 LT5yZWNvbl9mcmFtZXNfcmVmKTsKPiArwqDCoMKgIGlmIChlcnIgPCAwKSB7Cj4gK8KgwqDCoMKg wqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGluaXRpYWxpc2Ug cmVjb25zdHJ1Y3RlZCAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImZyYW1lIGNv bnRleHQ6ICVkLlxuIiwgZXJyKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IEhX RW5jb2RlUGljdHVyZU9wZXJhdGlvbiBkM2QxMnZhX3R5cGUgPSB7Cj4gK8KgwqDCoCAuYWxsb2PC oCA9ICZkM2QxMnZhX2VuY29kZV9hbGxvYywKPiArCj4gK8KgwqDCoCAuaXNzdWXCoCA9ICZkM2Qx MnZhX2VuY29kZV9pc3N1ZSwKPiArCj4gK8KgwqDCoCAub3V0cHV0ID0gJmQzZDEydmFfZW5jb2Rl X291dHB1dCwKPiArCj4gK8KgwqDCoCAuZnJlZcKgwqAgPSAmZDNkMTJ2YV9lbmNvZGVfZnJlZSwK PiArfTsKPiArCj4gK2ludCBmZl9kM2QxMnZhX2VuY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICph dmN0eCkKPiArewo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0 eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRleHTCoMKgwqDCoCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQzRDEyX0ZFQVRVUkVfREFUQV9WSURFT19G RUFUVVJFX0FSRUFfU1VQUE9SVCBzdXBwb3J0ID0geyAwIH07Cj4gK8KgwqDCoCBpbnQgZXJyOwo+ ICvCoMKgwqAgSFJFU1VMVCBocjsKPiArCj4gK8KgwqDCoCBlcnIgPSBmZl9od19iYXNlX2VuY29k ZV9pbml0KGF2Y3R4KTsKPiArwqDCoMKgIGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCBn b3RvIGZhaWw7Cj4gKwo+ICvCoMKgwqAgYmFzZV9jdHgtPm9wID0gJmQzZDEydmFfdHlwZTsKPiAr Cj4gK8KgwqDCoCBjdHgtPmh3Y3R4ID0gYmFzZV9jdHgtPmRldmljZS0+aHdjdHg7Cj4gKwo+ICvC oMKgwqAgY3R4LT5yZXNvbHV0aW9uLldpZHRowqAgPSBiYXNlX2N0eC0+aW5wdXRfZnJhbWVzLT53 aWR0aDsKPiArwqDCoMKgIGN0eC0+cmVzb2x1dGlvbi5IZWlnaHQgPSBiYXNlX2N0eC0+aW5wdXRf ZnJhbWVzLT5oZWlnaHQ7Cj4gKwo+ICvCoMKgwqAgaHIgPSBJRDNEMTJEZXZpY2VfUXVlcnlJbnRl cmZhY2UoY3R4LT5od2N0eC0+ZGV2aWNlLCAmSUlEX0lEM0QxMkRldmljZTMsCj4gKHZvaWQgKiop JmN0eC0+ZGV2aWNlMyk7Cj4gK8KgwqDCoCBpZiAoRkFJTEVEKGhyKSkgewo+ICvCoMKgwqDCoMKg wqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIklEM0QxMkRldmljZTMgaW50ZXJmYWNl IGlzIG5vdAo+IHN1cHBvcnRlZC5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSBBVkVSUk9S X1VOS05PV047Cj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiArwqDCoMKgIH0KPiArCj4g K8KgwqDCoCBociA9IElEM0QxMkRldmljZTNfUXVlcnlJbnRlcmZhY2UoY3R4LT5kZXZpY2UzLCAm SUlEX0lEM0QxMlZpZGVvRGV2aWNlMywKPiAodm9pZCAqKikmY3R4LT52aWRlb19kZXZpY2UzKTsK PiArwqDCoMKgIGlmIChGQUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiSUQzRDEyVmlkZW9EZXZpY2UzIGludGVyZmFjZSBpcyBub3QKPiBz dXBwb3J0ZWQuXG4iKTsKPiArwqDCoMKgwqDCoMKgwqAgZXJyID0gQVZFUlJPUl9VTktOT1dOOwo+ ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgaWYg KEZBSUxFRChJRDNEMTJWaWRlb0RldmljZTNfQ2hlY2tGZWF0dXJlU3VwcG9ydChjdHgtPnZpZGVv X2RldmljZTMsCj4gRDNEMTJfRkVBVFVSRV9WSURFT19GRUFUVVJFX0FSRUFfU1VQUE9SVCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3VwcG9y dCwKPiBzaXplb2Yoc3VwcG9ydCkpKSAmJiAhc3VwcG9ydC5WaWRlb0VuY29kZVN1cHBvcnQpIHsK PiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEM0QxMiB2aWRl byBkZXZpY2UgaGFzIG5vIHZpZGVvIGVuY29kZXIKPiBzdXBwb3J0LlxuIik7Cj4gK8KgwqDCoMKg wqDCoMKgIGVyciA9IEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWls Owo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGVyciA9IGQzZDEydmFfZW5jb2RlX3NldF9wcm9m aWxlKGF2Y3R4KTsKPiArwqDCoMKgIGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCBnb3Rv IGZhaWw7Cj4gKwo+ICvCoMKgwqAgaWYgKGN0eC0+Y29kZWMtPmdldF9lbmNvZGVyX2NhcHMpIHsK PiArwqDCoMKgwqDCoMKgwqAgZXJyID0gY3R4LT5jb2RlYy0+Z2V0X2VuY29kZXJfY2FwcyhhdmN0 eCk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGdvdG8gZmFpbDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBlcnIgPSBkM2QxMnZhX2Vu Y29kZV9pbml0X3JhdGVfY29udHJvbChhdmN0eCk7Cj4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiAr wqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiArwqDCoMKgIGVyciA9IGQzZDEydmFfZW5j b2RlX2luaXRfZ29wX3N0cnVjdHVyZShhdmN0eCk7Cj4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiAr wqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiArwqDCoMKgIGlmICghKGN0eC0+Y29kZWMt PmZsYWdzICYgRkxBR19TTElDRV9DT05UUk9MKSAmJiBhdmN0eC0+c2xpY2VzID4gMCkgewo+ICvC oMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiTXVsdGlwbGUgc2xp Y2VzIHdlcmUgcmVxdWVzdGVkICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiYnV0 IHRoaXMgY29kZWMgZG9lcyBub3Qgc3VwcG9ydCBjb250cm9sbGluZyBzbGljZXMuXG4iKTsKPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCBlcnIgPSBkM2QxMnZhX2VuY29kZV9jcmVhdGVfY29tbWFu ZF9vYmplY3RzKGF2Y3R4KTsKPiArwqDCoMKgIGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDC oCBnb3RvIGZhaWw7Cj4gKwo+ICvCoMKgwqAgZXJyID0gZDNkMTJ2YV9lbmNvZGVfY3JlYXRlX3Jl Y29uX2ZyYW1lcyhhdmN0eCk7Cj4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiArwqDCoMKgwqDCoMKg wqAgZ290byBmYWlsOwo+ICsKPiArwqDCoMKgIGVyciA9IGQzZDEydmFfZW5jb2RlX3ByZXBhcmVf b3V0cHV0X2J1ZmZlcnMoYXZjdHgpOwo+ICvCoMKgwqAgaWYgKGVyciA8IDApCj4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gZmFpbDsKPiArCj4gK8KgwqDCoCBpZiAoY3R4LT5jb2RlYy0+Y29uZmlndXJl KSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IGN0eC0+Y29kZWMtPmNvbmZpZ3VyZShhdmN0eCk7 Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gZmFpbDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoY3R4LT5jb2RlYy0+aW5p dF9zZXF1ZW5jZV9wYXJhbXMpIHsKPiArwqDCoMKgwqDCoMKgwqAgZXJyID0gY3R4LT5jb2RlYy0+ aW5pdF9zZXF1ZW5jZV9wYXJhbXMoYXZjdHgpOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZXJyIDwg MCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiQ29kZWMgc2VxdWVuY2UgaW5pdGlhbGlzYXRpb24gIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgImZhaWxlZDogJWQuXG4iLCBlcnIpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gZmFpbDsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfQo+ICsK PiArwqDCoMKgIGlmIChjdHgtPmNvZGVjLT5zZXRfbGV2ZWwpIHsKPiArwqDCoMKgwqDCoMKgwqAg ZXJyID0gY3R4LT5jb2RlYy0+c2V0X2xldmVsKGF2Y3R4KTsKPiArwqDCoMKgwqDCoMKgwqAgaWYg KGVyciA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqAg fQo+ICsKPiArwqDCoMKgIGJhc2VfY3R4LT5vdXRwdXRfZGVsYXkgPSBiYXNlX2N0eC0+Yl9wZXJf cDsKPiArwqDCoMKgIGJhc2VfY3R4LT5kZWNvZGVfZGVsYXkgPSBiYXNlX2N0eC0+bWF4X2JfZGVw dGg7Cj4gKwo+ICvCoMKgwqAgZXJyID0gZDNkMTJ2YV9jcmVhdGVfZW5jb2RlcihhdmN0eCk7Cj4g K8KgwqDCoCBpZiAoZXJyIDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiAr wqDCoMKgIGVyciA9IGQzZDEydmFfY3JlYXRlX2VuY29kZXJfaGVhcChhdmN0eCk7Cj4gK8KgwqDC oCBpZiAoZXJyIDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiArwqDCoMKg IGJhc2VfY3R4LT5hc3luY19lbmNvZGUgPSAxOwo+ICvCoMKgwqAgYmFzZV9jdHgtPmVuY29kZV9m aWZvID0gYXZfZmlmb19hbGxvYzIoYmFzZV9jdHgtPmFzeW5jX2RlcHRoLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKEQzRDEyVkFFbmNvZGVQaWN0dXJlICopLAo+IDApOwo+ ICvCoMKgwqAgaWYgKCFiYXNlX2N0eC0+ZW5jb2RlX2ZpZm8pCj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gKwo+ICtmYWls Ogo+ICvCoMKgwqAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IGZmX2QzZDEydmFfZW5jb2Rl X2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICvCoMKgwqAgaW50IG51bV9hbGxv Y2F0b3IgPSAwOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0 eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRleHTCoMKgwqDCoCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYywg Km5leHQ7Cj4gK8KgwqDCoCBDb21tYW5kQWxsb2NhdG9yIGFsbG9jYXRvcjsKPiArCj4gK8KgwqDC oCBpZiAoIWJhc2VfY3R4LT5mcmFtZSkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gKwo+ ICvCoMKgwqAgZm9yIChwaWMgPSBiYXNlX2N0eC0+cGljX3N0YXJ0OyBwaWM7IHBpYyA9IG5leHQp IHsKPiArwqDCoMKgwqDCoMKgwqAgbmV4dCA9IHBpYy0+bmV4dDsKPiArwqDCoMKgwqDCoMKgwqAg ZDNkMTJ2YV9lbmNvZGVfZnJlZShhdmN0eCwgcGljKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDC oCBkM2QxMnZhX2VuY29kZV9mcmVlX3JjX3BhcmFtcyhhdmN0eCk7Cj4gKwo+ICvCoMKgwqAgYXZf YnVmZmVyX3Bvb2xfdW5pbml0KCZjdHgtPm91dHB1dF9idWZmZXJfcG9vbCk7Cj4gKwo+ICvCoMKg wqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5jb21tYW5kX2xpc3QpOwo+ICvCoMKgwqAgRDNE MTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5jb21tYW5kX3F1ZXVlKTsKPiArCj4gK8KgwqDCoCBpZiAo Y3R4LT5hbGxvY2F0b3JfcXVldWUpIHsKPiArwqDCoMKgwqDCoMKgwqAgd2hpbGUgKGF2X2ZpZm9f cmVhZChjdHgtPmFsbG9jYXRvcl9xdWV1ZSwgJmFsbG9jYXRvciwgMSkgPj0gMCkgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG51bV9hbGxvY2F0b3IrKzsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShhbGxvY2F0b3IuY29tbWFuZF9hbGxvY2F0b3IpOwo+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFW X0xPR19WRVJCT1NFLCAiVG90YWwgbnVtYmVyIG9mIGNvbW1hbmQgYWxsb2NhdG9ycwo+IHJldXNl ZDogJWRcbiIsIG51bV9hbGxvY2F0b3IpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGF2X2Zp Zm9fZnJlZXAyKCZjdHgtPmFsbG9jYXRvcl9xdWV1ZSk7Cj4gKwo+ICvCoMKgwqAgRDNEMTJfT0JK RUNUX1JFTEVBU0UoY3R4LT5zeW5jX2N0eC5mZW5jZSk7Cj4gK8KgwqDCoCBpZiAoY3R4LT5zeW5j X2N0eC5ldmVudCkKPiArwqDCoMKgwqDCoMKgwqAgQ2xvc2VIYW5kbGUoY3R4LT5zeW5jX2N0eC5l dmVudCk7Cj4gKwo+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5lbmNvZGVyX2hl YXApOwo+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5lbmNvZGVyKTsKPiArwqDC oMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGN0eC0+dmlkZW9fZGV2aWNlMyk7Cj4gK8KgwqDCoCBE M0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgtPmRldmljZTMpOwo+ICsKPiArwqDCoMKgIGZmX2h3X2Jh c2VfZW5jb2RlX2Nsb3NlKGF2Y3R4KTsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+IGRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlLmggYi9saWJhdmNvZGVjL2QzZDEy dmFfZW5jb2RlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjEw ZTJkODcwMzUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy9kM2QxMnZhX2VuY29k ZS5oCj4gQEAgLTAsMCArMSwzMjEgQEAKPiArLyoKPiArICogRGlyZWN0M0QgMTIgSFcgYWNjZWxl cmF0aW9uIHZpZGVvIGVuY29kZXIKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDI0IEludGVs IENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiAr ICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZt cGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS7CoCBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiAr ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxCj4gVVNBCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBBVkNPREVDX0Qz RDEyVkFfRU5DT0RFX0gKPiArI2RlZmluZSBBVkNPREVDX0QzRDEyVkFfRU5DT0RFX0gKPiArCj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvZmlmby5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29u dGV4dC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhX2ludGVybmFs LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaCIKPiArI2luY2x1 ZGUgImF2Y29kZWMuaCIKPiArI2luY2x1ZGUgImludGVybmFsLmgiCj4gKyNpbmNsdWRlICJod2Nv bmZpZy5oIgo+ICsjaW5jbHVkZSAiaHdfYmFzZV9lbmNvZGUuaCIKPiArCj4gK3N0cnVjdCBEM0Qx MlZBRW5jb2RlVHlwZTsKPiArCj4gK2V4dGVybiBjb25zdCBBVkNvZGVjSFdDb25maWdJbnRlcm5h bCAqY29uc3QgZmZfZDNkMTJ2YV9lbmNvZGVfaHdfY29uZmlnc1tdOwo+ICsKPiArI2RlZmluZSBN QVhfUEFSQU1fQlVGRkVSX1NJWkUgNDA5Ngo+ICsjZGVmaW5lIEQzRDEyVkFfVklERU9fRU5DX0FT WU5DX0RFUFRIIDgKPiArCj4gK3R5cGVkZWYgc3RydWN0IEQzRDEyVkFFbmNvZGVQaWN0dXJlIHsK PiArwqDCoMKgIEhXQmFzZUVuY29kZVBpY3R1cmUgYmFzZTsKPiArCj4gK8KgwqDCoCBpbnTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaGVhZGVyX3NpemU7Cj4gKwo+ICvCoMKgwqAgQVZEM0QxMlZB RnJhbWUgKmlucHV0X3N1cmZhY2U7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZSAqcmVjb25fc3Vy ZmFjZTsKPiArCj4gK8KgwqDCoCBBVkJ1ZmZlclJlZsKgwqDCoCAqb3V0cHV0X2J1ZmZlcl9yZWY7 Cj4gK8KgwqDCoCBJRDNEMTJSZXNvdXJjZSAqb3V0cHV0X2J1ZmZlcjsKPiArCj4gK8KgwqDCoCBJ RDNEMTJSZXNvdXJjZSAqZW5jb2RlZF9tZXRhZGF0YTsKPiArwqDCoMKgIElEM0QxMlJlc291cmNl ICpyZXNvbHZlZF9tZXRhZGF0YTsKPiArCj4gK8KgwqDCoCBEM0QxMl9WSURFT19FTkNPREVSX1BJ Q1RVUkVfQ09OVFJPTF9DT0RFQ19EQVRBIHBpY19jdGw7Cj4gKwo+ICvCoMKgwqAgaW50wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGZlbmNlX3ZhbHVlOwo+ICt9IEQzRDEyVkFFbmNvZGVQaWN0dXJl Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRDNEMTJWQUVuY29kZVByb2ZpbGUgewo+ICvCoMKgwqAg LyoqCj4gK8KgwqDCoMKgICogbGF2YyBwcm9maWxlIHZhbHVlIChBVl9QUk9GSUxFXyopLgo+ICvC oMKgwqDCoCAqLwo+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgIGF2X3Byb2ZpbGU7Cj4gKwo+ICvC oMKgwqAgLyoqCj4gK8KgwqDCoMKgICogU3VwcG9ydGVkIGJpdCBkZXB0aC4KPiArwqDCoMKgwqAg Ki8KPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoCBkZXB0aDsKPiArCj4gK8KgwqDCoCAvKioKPiAr wqDCoMKgwqAgKiBOdW1iZXIgb2YgY29tcG9uZW50cy4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKg IGludMKgwqDCoMKgwqDCoCBuYl9jb21wb25lbnRzOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKg wqDCoCAqIENocm9tYSBzdWJzYW1wbGluZyBpbiB3aWR0aCBkaW1lbnNpb24uCj4gK8KgwqDCoMKg ICovCj4gK8KgwqDCoCBpbnTCoMKgwqDCoMKgwqAgbG9nMl9jaHJvbWFfdzsKPiArCj4gK8KgwqDC oCAvKioKPiArwqDCoMKgwqAgKiBDaHJvbWEgc3Vic2FtcGxpbmcgaW4gaGVpZ2h0IGRpbWVuc2lv bi4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoCBsb2cyX2Nocm9tYV9o Owo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIEQzRDEyIHByb2ZpbGUgdmFsdWUuCj4g K8KgwqDCoMKgICovCj4gK8KgwqDCoCBEM0QxMl9WSURFT19FTkNPREVSX1BST0ZJTEVfREVTQyBk M2QxMl9wcm9maWxlOwo+ICt9IEQzRDEyVkFFbmNvZGVQcm9maWxlOwo+ICsKPiArZW51bSB7Cj4g K8KgwqDCoCBSQ19NT0RFX0FVVE8sCj4gK8KgwqDCoCBSQ19NT0RFX0NRUCwKPiArwqDCoMKgIFJD X01PREVfQ0JSLAo+ICvCoMKgwqAgUkNfTU9ERV9WQlIsCj4gK8KgwqDCoCBSQ19NT0RFX1FWQlIs Cj4gK8KgwqDCoCBSQ19NT0RFX01BWCA9IFJDX01PREVfUVZCUiwKPiArfTsKPiArCj4gKwo+ICt0 eXBlZGVmIHN0cnVjdCBEM0QxMlZBRW5jb2RlUkNNb2RlIHsKPiArwqDCoMKgIC8qKgo+ICvCoMKg wqDCoCAqIE1vZGUgZnJvbSBhYm92ZSBlbnVtIChSQ19NT0RFXyopLgo+ICvCoMKgwqDCoCAqLwo+ ICvCoMKgwqAgaW50IG1vZGU7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogTmFtZS4K PiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgY29uc3QgY2hhciAqbmFtZTsK PiArCj4gK8KgwqDCoCAvKioKPiArwqDCoMKgwqAgKiBVc2VzIGJpdHJhdGUgcGFyYW1ldGVycy4K PiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgaW50IGJpdHJhdGU7Cj4gKwo+ ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogU3VwcG9ydHMgbWF4cmF0ZSBkaXN0aW5jdCBmcm9t IGJpdHJhdGUuCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIGludCBtYXhy YXRlOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIFVzZXMgcXVhbGl0eSB2YWx1ZS4K PiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgaW50IHF1YWxpdHk7Cj4gKwo+ ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogU3VwcG9ydHMgSFJEL1ZCViBwYXJhbWV0ZXJzLgo+ ICvCoMKgwqDCoCAqCj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBpbnQgaHJkOwo+ICsKPiArwqDC oMKgIC8qKgo+ICvCoMKgwqDCoCAqIFN1cHBvcnRlZCBieSBEM0QxMiBIVy4KPiArwqDCoMKgwqAg Ki8KPiArwqDCoMKgIGludCBzdXBwb3J0ZWQ7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKg ICogRDNEMTIgbW9kZSB2YWx1ZS4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIEQzRDEyX1ZJREVP X0VOQ09ERVJfUkFURV9DT05UUk9MX01PREUgZDNkMTJfbW9kZTsKPiArfSBEM0QxMlZBRW5jb2Rl UkNNb2RlOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRDNEMTJWQUVuY29kZUNvbnRleHQgewo+ICvC oMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dCBiYXNlOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKg wqDCoCAqIENvZGVjLXNwZWNpZmljIGhvb2tzLgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgY29u c3Qgc3RydWN0IEQzRDEyVkFFbmNvZGVUeXBlICpjb2RlYzsKPiArCj4gK8KgwqDCoCAvKioKPiAr wqDCoMKgwqAgKiBDaG9zZW4gZW5jb2RpbmcgcHJvZmlsZSBkZXRhaWxzLgo+ICvCoMKgwqDCoCAq Lwo+ICvCoMKgwqAgY29uc3QgRDNEMTJWQUVuY29kZVByb2ZpbGUgKnByb2ZpbGU7Cj4gKwo+ICvC oMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqaHdjdHg7Cj4gKwo+ICvCoMKgwqAgLyoqCj4g K8KgwqDCoMKgICogSUQzRDEyRGV2aWNlMyBpbnRlcmZhY2UuCj4gK8KgwqDCoMKgICovCj4gK8Kg wqDCoCBJRDNEMTJEZXZpY2UzICpkZXZpY2UzOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDC oCAqIElEM0QxMlZpZGVvRGV2aWNlMyBpbnRlcmZhY2UuCj4gK8KgwqDCoMKgICovCj4gK8KgwqDC oCBJRDNEMTJWaWRlb0RldmljZTMgKnZpZGVvX2RldmljZTM7Cj4gKwo+ICvCoMKgwqAgLyoqCj4g K8KgwqDCoMKgICogUG9vbCBvZiAocmV1c2FibGUpIGJpdHN0cmVhbSBvdXRwdXQgYnVmZmVycy4K PiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIEFWQnVmZmVyUG9vbMKgwqAgKm91dHB1dF9idWZmZXJf cG9vbDsKPiArCj4gK8KgwqDCoCAvKioKPiArwqDCoMKgwqAgKiBEM0QxMiB2aWRlbyBlbmNvZGVy Lgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgQVZCdWZmZXJSZWYgKmVuY29kZXJfcmVmOwo+ICsK PiArwqDCoMKgIElEM0QxMlZpZGVvRW5jb2RlciAqZW5jb2RlcjsKPiArCj4gK8KgwqDCoCAvKioK PiArwqDCoMKgwqAgKiBEM0QxMiB2aWRlbyBlbmNvZGVyIGhlYXAuCj4gK8KgwqDCoMKgICovCj4g K8KgwqDCoCBJRDNEMTJWaWRlb0VuY29kZXJIZWFwICplbmNvZGVyX2hlYXA7Cj4gKwo+ICvCoMKg wqAgLyoqCj4gK8KgwqDCoMKgICogQSBjYWNoZWQgcXVldWUgZm9yIHJldXNpbmcgdGhlIEQzRDEy IGNvbW1hbmQgYWxsb2NhdG9ycy4KPiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqIEBzZWUKPiBo dHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9kaXJlY3QzZDEy L3JlY29yZGluZy1jb21tYW5kLWxpc3RzLWFuZC1idW5kbGVzI2lkM2QxMmNvbW1hbmRhbGxvY2F0 b3IKPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIEFWRmlmbyAqYWxsb2NhdG9yX3F1ZXVlOwo+ICsK PiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIEQzRDEyIGNvbW1hbmQgcXVldWUuCj4gK8KgwqDC oMKgICovCj4gK8KgwqDCoCBJRDNEMTJDb21tYW5kUXVldWUgKmNvbW1hbmRfcXVldWU7Cj4gKwo+ ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogRDNEMTIgdmlkZW8gZW5jb2RlIGNvbW1hbmQgbGlz dC4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIElEM0QxMlZpZGVvRW5jb2RlQ29tbWFuZExpc3Qy ICpjb21tYW5kX2xpc3Q7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogVGhlIHN5bmMg Y29udGV4dCB1c2VkIHRvIHN5bmMgY29tbWFuZCBxdWV1ZS4KPiArwqDCoMKgwqAgKi8KPiArwqDC oMKgIEFWRDNEMTJWQVN5bmNDb250ZXh0IHN5bmNfY3R4Owo+ICsKPiArwqDCoMKgIC8qKgo+ICvC oMKgwqDCoCAqIFRoZSBiaV9ub3RfZW1wdHkgZmVhdHVyZS4KPiArwqDCoMKgwqAgKi8KPiArwqDC oMKgIGludCBiaV9ub3RfZW1wdHk7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogRDNE MTJfRkVBVFVSRSBzdHJ1Y3R1cmVzLgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgRDNEMTJfRkVB VFVSRV9EQVRBX1ZJREVPX0VOQ09ERVJfUkVTT1VSQ0VfUkVRVUlSRU1FTlRTIHJlcTsKPiArCj4g K8KgwqDCoCBEM0QxMl9GRUFUVVJFX0RBVEFfVklERU9fRU5DT0RFUl9SRVNPTFVUSU9OX1NVUFBP UlRfTElNSVRTIHJlc19saW1pdHM7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogRDNE MTJfVklERU9fRU5DT0RFUiBzdHJ1Y3R1cmVzLgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgRDNE MTJfVklERU9fRU5DT0RFUl9QSUNUVVJFX1JFU09MVVRJT05fREVTQyByZXNvbHV0aW9uOwo+ICsK PiArwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTiBjb2RlY19j b25mOwo+ICsKPiArwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MIHJjOwo+ ICsKPiArwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfU0VRVUVOQ0VfR09QX1NUUlVDVFVSRSBn b3A7Cj4gKwo+ICvCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9MRVZFTF9TRVRUSU5HIGxldmVs Owo+ICt9IEQzRDEyVkFFbmNvZGVDb250ZXh0Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRDNEMTJW QUVuY29kZVR5cGUgewo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogTGlzdCBvZiBzdXBwb3J0 ZWQgcHJvZmlsZXMuCj4gK8KgwqDCoMKgICovCj4gK8KgwqAgY29uc3QgRDNEMTJWQUVuY29kZVBy b2ZpbGUgKnByb2ZpbGVzOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIEQzRDEyIGNv ZGVjIG5hbWUuCj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBEM0QxMl9WSURFT19FTkNPREVSX0NP REVDIGQzZDEyX2NvZGVjOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIENvZGVjIGZl YXR1cmUgZmxhZ3MuCj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBpbnQgZmxhZ3M7Cj4gKwo+ICvC oMKgwqAgLyoqCj4gK8KgwqDCoMKgICogRGVmYXVsdCBxdWFsaXR5IGZvciB0aGlzIGNvZGVjIC0g dXNlZCBhcyBxdWFudGlzZXIgb3IgUkMgcXVhbGl0eQo+ICvCoMKgwqDCoCAqIGZhY3RvciBkZXBl bmRpbmcgb24gUkMgbW9kZS4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIGludCBkZWZhdWx0X3F1 YWxpdHk7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogUXVlcnkgY29kZWMgY29uZmln dXJhdGlvbiBhbmQgZGV0ZXJtaW5lIGVuY29kZSBwYXJhbWV0ZXJzIGxpa2UKPiArwqDCoMKgwqAg KiBibG9jayBzaXplcyBmb3Igc3VyZmFjZSBhbGlnbm1lbnQgYW5kIHNsaWNlcy4gSWYgbm90IHNl dCwgYXNzdW1lCj4gK8KgwqDCoMKgICogdGhhdCBhbGwgYmxvY2tzIGFyZSAxNngxNiBhbmQgdGhh dCBzdXJmYWNlcyBzaG91bGQgYmUgYWxpZ25lZCB0byBtYXRjaAo+ICvCoMKgwqDCoCAqIHRoaXMu Cj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBpbnQgKCpnZXRfZW5jb2Rlcl9jYXBzKShBVkNvZGVj Q29udGV4dCAqYXZjdHgpOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIFBlcmZvcm0g YW55IGV4dHJhIGNvZGVjLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCj4gK8KgwqDCoMKgICovCj4g K8KgwqDCoCBpbnQgKCpjb25maWd1cmUpKEFWQ29kZWNDb250ZXh0ICphdmN0eCk7Cj4gKwo+ICvC oMKgwqAgLyoqCj4gK8KgwqDCoMKgICogU2V0IGNvZGVjLXNwZWNpZmljIGxldmVsIHNldHRpbmcu Cj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBpbnQgKCpzZXRfbGV2ZWwpKEFWQ29kZWNDb250ZXh0 ICphdmN0eCk7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogVGhlIHNpemUgb2YgYW55 IHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGVhY2gKPiArwqDCoMKgwqAg KiBwaWN0dXJlIChjYW4gYmUgemVybyBpZiBub3QgcmVxdWlyZWQpLgo+ICvCoMKgwqDCoCAqLwo+ ICvCoMKgwqAgc2l6ZV90IHBpY3R1cmVfcHJpdl9kYXRhX3NpemU7Cj4gKwo+ICvCoMKgwqAgLyoq Cj4gK8KgwqDCoMKgICogRmlsbCB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXJzLgo+ICvCoMKg wqDCoCAqLwo+ICvCoMKgwqAgaW50ICgqaW5pdF9zZXF1ZW5jZV9wYXJhbXMpKEFWQ29kZWNDb250 ZXh0ICphdmN0eCk7Cj4gKwo+ICvCoMKgwqAgaW50ICgqaW5pdF9waWN0dXJlX3BhcmFtcykoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJWQUVuY29kZVBpY3R1cmUgKnBpYyk7Cj4g Kwo+ICvCoMKgwqAgdm9pZCAoKmZyZWVfcGljdHVyZV9wYXJhbXMpKEQzRDEyVkFFbmNvZGVQaWN0 dXJlICpwaWMpOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIFdyaXRlIHRoZSBwYWNr ZWQgaGVhZGVyIGRhdGEgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KPiArwqDCoMKgwqAgKi8KPiAr wqDCoMKgIGludCAoKndyaXRlX3NlcXVlbmNlX2hlYWRlcikoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNoYXIgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4pOwo+ICt9IEQzRDEyVkFF bmNvZGVUeXBlOwo+ICsKPiAraW50IGZmX2QzZDEydmFfZW5jb2RlX2luaXQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4KTsKPiAraW50IGZmX2QzZDEydmFfZW5jb2RlX2Nsb3NlKEFWQ29kZWNDb250ZXh0 ICphdmN0eCk7Cj4gKwo+ICsjZGVmaW5lIEQzRDEyVkFfRU5DT0RFX1JDX01PREUobmFtZSwgZGVz YykgXAo+ICvCoMKgwqAgeyAjbmFtZSwgZGVzYywgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2 NCA9IFJDX01PREVfICMjIG5hbWUgfSwgXAo+ICvCoMKgwqDCoMKgIDAsIDAsIEZMQUdTLCAudW5p dCA9ICJyY19tb2RlIiB9Cj4gKyNkZWZpbmUgRDNEMTJWQV9FTkNPREVfUkNfT1BUSU9OUyBcCj4g K8KgwqDCoCB7ICJyY19tb2RlIixcCj4gK8KgwqDCoMKgwqAgIlNldCByYXRlIGNvbnRyb2wgbW9k ZSIsIFwKPiArwqDCoMKgwqDCoCBPRkZTRVQoY29tbW9uLmJhc2UuZXhwbGljaXRfcmNfbW9kZSks IEFWX09QVF9UWVBFX0lOVCwgXAo+ICvCoMKgwqDCoMKgIHsgLmk2NCA9IFJDX01PREVfQVVUTyB9 LCBSQ19NT0RFX0FVVE8sIFJDX01PREVfTUFYLCBGTEFHUywgLnVuaXQgPQo+ICJyY19tb2RlIiB9 LCBcCj4gK8KgwqDCoCB7ICJhdXRvIiwgIkNob29zZSBtb2RlIGF1dG9tYXRpY2FsbHkgYmFzZWQg b24gb3RoZXIgcGFyYW1ldGVycyIsIFwKPiArwqDCoMKgwqDCoCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgeyAuaTY0ID0gUkNfTU9ERV9BVVRPIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9Cj4gInJjX21v ZGUiIH0sIFwKPiArwqDCoMKgIEQzRDEyVkFfRU5DT0RFX1JDX01PREUoQ1FQLMKgICJDb25zdGFu dC1xdWFsaXR5IiksIFwKPiArwqDCoMKgIEQzRDEyVkFfRU5DT0RFX1JDX01PREUoQ0JSLMKgICJD b25zdGFudC1iaXRyYXRlIiksIFwKPiArwqDCoMKgIEQzRDEyVkFfRU5DT0RFX1JDX01PREUoVkJS LMKgICJWYXJpYWJsZS1iaXRyYXRlIiksIFwKPiArwqDCoMKgIEQzRDEyVkFfRU5DT0RFX1JDX01P REUoUVZCUiwgIlF1YWxpdHktZGVmaW5lZCB2YXJpYWJsZS1iaXRyYXRlIikKPiArCj4gKyNlbmRp ZiAvKiBBVkNPREVDX0QzRDEyVkFfRU5DT0RFX0ggKi8KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2Rl Yy9kM2QxMnZhX2VuY29kZV9oZXZjLmMKPiBiL2xpYmF2Y29kZWMvZDNkMTJ2YV9lbmNvZGVfaGV2 Yy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5hZWMwZDlkY2Vj Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvZDNkMTJ2YV9lbmNvZGVfaGV2Yy5j Cj4gQEAgLTAsMCArMSw5NTcgQEAKPiArLyoKPiArICogRGlyZWN0M0QgMTIgSFcgYWNjZWxlcmF0 aW9uIHZpZGVvIGVuY29kZXIKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDI0IEludGVsIENv cnBvcmF0aW9uCj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoK PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS7CoCBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxCj4gVVNBCj4gKyAqLwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5o Igo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGls L3BpeGRlc2MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YV9pbnRl cm5hbC5oIgo+ICsKPiArI2luY2x1ZGUgImF2Y29kZWMuaCIKPiArI2luY2x1ZGUgImNicy5oIgo+ ICsjaW5jbHVkZSAiY2JzX2gyNjUuaCIKPiArI2luY2x1ZGUgImgyNjQ1ZGF0YS5oIgo+ICsjaW5j bHVkZSAiaDI2NV9wcm9maWxlX2xldmVsLmgiCj4gKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5o Igo+ICsjaW5jbHVkZSAiZDNkMTJ2YV9lbmNvZGUuaCIKPiArCj4gK3R5cGVkZWYgc3RydWN0IEQz RDEyVkFFbmNvZGVIRVZDUGljdHVyZSB7Cj4gK8KgwqDCoCBpbnQgcGljX29yZGVyX2NudDsKPiAr wqDCoMKgIGludDY0X3QgbGFzdF9pZHJfZnJhbWU7Cj4gK30gRDNEMTJWQUVuY29kZUhFVkNQaWN0 dXJlOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRDNEMTJWQUVuY29kZUhFVkNDb250ZXh0IHsKPiAr wqDCoMKgIEQzRDEyVkFFbmNvZGVDb250ZXh0IGNvbW1vbjsKPiArCj4gK8KgwqDCoCAvLyBVc2Vy IG9wdGlvbnMuCj4gK8KgwqDCoCBpbnQgcXA7Cj4gK8KgwqDCoCBpbnQgcHJvZmlsZTsKPiArwqDC oMKgIGludCB0aWVyOwo+ICvCoMKgwqAgaW50IGxldmVsOwo+ICsKPiArwqDCoMKgIC8vIFdyaXRl ciBzdHJ1Y3R1cmVzLgo+ICvCoMKgwqAgSDI2NVJhd1ZQU8KgwqAgcmF3X3ZwczsKPiArwqDCoMKg IEgyNjVSYXdTUFPCoMKgIHJhd19zcHM7Cj4gK8KgwqDCoCBIMjY1UmF3UFBTwqDCoCByYXdfcHBz Owo+ICsKPiArwqDCoMKgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JjOwo+ICvCoMKgwqAgQ29k ZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50X2FjY2Vzc191bml0Owo+ICt9IEQzRDEyVkFFbmNv ZGVIRVZDQ29udGV4dDsKPiArCj4gK3R5cGVkZWYgc3RydWN0IEQzRDEyVkFFbmNvZGVIRVZDTGV2 ZWwgewo+ICvCoMKgwqAgaW50IGxldmVsOwo+ICvCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9M RVZFTFNfSEVWQyBkM2QxMl9sZXZlbDsKPiArfSBEM0QxMlZBRW5jb2RlSEVWQ0xldmVsOwo+ICsK PiArc3RhdGljIGNvbnN0IEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9T VVBQT1JUX0hFVkMKPiBoZXZjX2NvbmZpZ19zdXBwb3J0X3NldHNbXSA9Cj4gK3sKPiArwqDCoMKg IHsKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFU SU9OX1NVUFBPUlRfSEVWQ19GTEFHX05PTkUsCj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX1ZJREVP X0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV84eDgsCj4gK8KgwqDCoMKg wqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0la RV8zMngzMiwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05G SUdVUkFUSU9OX0hFVkNfVFVTSVpFXzR4NCwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9f RU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzMyeDMyLAo+ICvCoMKgwqDC oMKgwqDCoCAzLAo+ICvCoMKgwqDCoMKgwqDCoCAzLAo+ICvCoMKgwqAgfSwKPiArwqDCoMKgIHsK PiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9O X1NVUFBPUlRfSEVWQ19GTEFHX05PTkUsCj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX1ZJREVPX0VO Q09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV84eDgsCj4gK8KgwqDCoMKgwqDC oMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV8z MngzMiwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdV UkFUSU9OX0hFVkNfVFVTSVpFXzR4NCwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5D T0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzMyeDMyLAo+ICvCoMKgwqDCoMKg wqDCoCAwLAo+ICvCoMKgwqDCoMKgwqDCoCAwLAo+ICvCoMKgwqAgfSwKPiArwqDCoMKgIHsKPiAr wqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NV UFBPUlRfSEVWQ19GTEFHX05PTkUsCj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09E RVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV84eDgsCj4gK8KgwqDCoMKgwqDCoMKg IEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV8zMngz MiwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFU SU9OX0hFVkNfVFVTSVpFXzR4NCwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RF Ul9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzMyeDMyLAo+ICvCoMKgwqDCoMKgwqDC oCAyLAo+ICvCoMKgwqDCoMKgwqDCoCAyLAo+ICvCoMKgwqAgfSwKPiArwqDCoMKgIHsKPiArwqDC oMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NVUFBP UlRfSEVWQ19GTEFHX05PTkUsCj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJf Q09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV84eDgsCj4gK8KgwqDCoMKgwqDCoMKgIEQz RDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV82NHg2NCwK PiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9O X0hFVkNfVFVTSVpFXzR4NCwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9D T0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzMyeDMyLAo+ICvCoMKgwqDCoMKgwqDCoCAy LAo+ICvCoMKgwqDCoMKgwqDCoCAyLAo+ICvCoMKgwqAgfSwKPiArwqDCoMKgIHsKPiArwqDCoMKg wqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NVUFBPUlRf SEVWQ19GTEFHX05PTkUsCj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09E RUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV84eDgsCj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEy X1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV82NHg2NCwKPiAr wqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hF VkNfVFVTSVpFXzR4NCwKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RF Q19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzMyeDMyLAo+ICvCoMKgwqDCoMKgwqDCoCA0LAo+ ICvCoMKgwqDCoMKgwqDCoCA0LAo+ICvCoMKgwqAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBEM0QxMlZBRW5jb2RlSEVWQ0xldmVsIGhldmNfbGV2ZWxzW10gPSB7Cj4gK8KgwqDCoCB7IDMw LMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfMcKgIH0sCj4gK8KgwqDCoCB7IDYw LMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfMsKgIH0sCj4gK8KgwqDCoCB7IDYz LMKgIEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfMjEgfSwKPiArwqDCoMKgIHsgOTAs wqAgRDNEMTJfVklERU9fRU5DT0RFUl9MRVZFTFNfSEVWQ18zwqAgfSwKPiArwqDCoMKgIHsgOTMs wqAgRDNEMTJfVklERU9fRU5DT0RFUl9MRVZFTFNfSEVWQ18zMSB9LAo+ICvCoMKgwqAgeyAxMjAs IEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfNMKgIH0sCj4gK8KgwqDCoCB7IDEyMywg RDNEMTJfVklERU9fRU5DT0RFUl9MRVZFTFNfSEVWQ180MSB9LAo+ICvCoMKgwqAgeyAxNTAsIEQz RDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfNcKgIH0sCj4gK8KgwqDCoCB7IDE1MywgRDNE MTJfVklERU9fRU5DT0RFUl9MRVZFTFNfSEVWQ181MSB9LAo+ICvCoMKgwqAgeyAxNTYsIEQzRDEy X1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfNTIgfSwKPiArwqDCoMKgIHsgMTgwLCBEM0QxMl9W SURFT19FTkNPREVSX0xFVkVMU19IRVZDXzbCoCB9LAo+ICvCoMKgwqAgeyAxODMsIEQzRDEyX1ZJ REVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfNjEgfSwKPiArwqDCoMKgIHsgMTg2LCBEM0QxMl9WSURF T19FTkNPREVSX0xFVkVMU19IRVZDXzYyIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgRDNE MTJfVklERU9fRU5DT0RFUl9QUk9GSUxFX0hFVkMgcHJvZmlsZV9tYWluwqDCoCA9Cj4gRDNEMTJf VklERU9fRU5DT0RFUl9QUk9GSUxFX0hFVkNfTUFJTjsKPiArc3RhdGljIGNvbnN0IEQzRDEyX1ZJ REVPX0VOQ09ERVJfUFJPRklMRV9IRVZDIHByb2ZpbGVfbWFpbjEwID0KPiBEM0QxMl9WSURFT19F TkNPREVSX1BST0ZJTEVfSEVWQ19NQUlOMTA7Cj4gKwo+ICsjZGVmaW5lIEQzRF9QUk9GSUxFX0RF U0MobmFtZSkgXAo+ICvCoMKgwqAgeyBzaXplb2YoRDNEMTJfVklERU9fRU5DT0RFUl9QUk9GSUxF X0hFVkMpLCB7IC5wSEVWQ1Byb2ZpbGUgPQo+IChEM0QxMl9WSURFT19FTkNPREVSX1BST0ZJTEVf SEVWQyAqKSZwcm9maWxlXyAjIyBuYW1lIH0gfQo+ICtzdGF0aWMgY29uc3QgRDNEMTJWQUVuY29k ZVByb2ZpbGUgZDNkMTJ2YV9lbmNvZGVfaGV2Y19wcm9maWxlc1tdID0gewo+ICvCoMKgwqAgeyBB Vl9QUk9GSUxFX0hFVkNfTUFJTizCoMKgwqDCoCA4LCAzLCAxLCAxLCBEM0RfUFJPRklMRV9ERVND KG1haW4pwqDCoCB9LAo+ICvCoMKgwqAgeyBBVl9QUk9GSUxFX0hFVkNfTUFJTl8xMCwgMTAsIDMs IDEsIDEsIEQzRF9QUk9GSUxFX0RFU0MobWFpbjEwKSB9LAo+ICvCoMKgwqAgeyBBVl9QUk9GSUxF X1VOS05PV04gfSwKPiArfTsKPiArCj4gK3N0YXRpYyB1aW50OF90Cj4gZDNkMTJ2YV9lbmNvZGVf aGV2Y19tYXBfY3VzaXplKEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9I RVZDX0NVCj4gU0laRSBjdXNpemUpCj4gK3sKPiArwqDCoMKgIHN3aXRjaCAoY3VzaXplKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIGNhc2UgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFU SU9OX0hFVkNfQ1VTSVpFXzh4ODrCoMKgCj4gcmV0dXJuIDg7Cj4gK8KgwqDCoMKgwqDCoMKgIGNh c2UgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfQ1VTSVpFXzE2 eDE2Ogo+IHJldHVybiAxNjsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBEM0QxMl9WSURFT19FTkNP REVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19DVVNJWkVfMzJ4MzI6Cj4gcmV0dXJuIDMyOwo+ ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJB VElPTl9IRVZDX0NVU0laRV82NHg2NDoKPiByZXR1cm4gNjQ7Cj4gK8KgwqDCoMKgwqDCoMKgIGRl ZmF1bHQ6IGF2X2Fzc2VydDAoMCk7Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCByZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHVpbnQ4X3QKPiBkM2QxMnZhX2VuY29kZV9oZXZjX21hcF90dXNpemUo RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFUKPiBTSVpFIHR1 c2l6ZSkKPiArewo+ICvCoMKgwqAgc3dpdGNoICh0dXNpemUpIHsKPiArwqDCoMKgwqDCoMKgwqAg Y2FzZSBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19UVVNJWkVf NHg0OsKgwqAKPiByZXR1cm4gNDsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBEM0QxMl9WSURFT19F TkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19UVVNJWkVfOHg4OsKgwqAKPiByZXR1cm4g ODsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJ R1VSQVRJT05fSEVWQ19UVVNJWkVfMTZ4MTY6Cj4gcmV0dXJuIDE2Owo+ICvCoMKgwqDCoMKgwqDC oCBjYXNlIEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX1RVU0la RV8zMngzMjoKPiByZXR1cm4gMzI7Cj4gK8KgwqDCoMKgwqDCoMKgIGRlZmF1bHQ6IGF2X2Fzc2Vy dDAoMCk7Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBkM2QxMnZhX2VuY29kZV9oZXZjX3dyaXRlX2FjY2Vzc191bml0KEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIg KmRhdGEsIHNpemVfdAo+ICpkYXRhX2xlbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgKmF1KQo+ICt7Cj4gK8KgwqDCoCBE M0QxMlZBRW5jb2RlSEVWQ0NvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKg wqAgaW50IGVycjsKPiArCj4gK8KgwqDCoCBlcnIgPSBmZl9jYnNfd3JpdGVfZnJhZ21lbnRfZGF0 YShwcml2LT5jYmMsIGF1KTsKPiArwqDCoMKgIGlmIChlcnIgPCAwKSB7Cj4gK8KgwqDCoMKgwqDC oMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHdyaXRlIHBhY2tlZCBo ZWFkZXIuXG4iKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiArwqDCoMKgIH0KPiAr Cj4gK8KgwqDCoCBpZiAoKmRhdGFfbGVuIDwgOCAqIGF1LT5kYXRhX3NpemUgLSBhdS0+ZGF0YV9i aXRfcGFkZGluZykgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkFjY2VzcyB1bml0IHRvbyBsYXJnZTogIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICIlenUgPCAlenUuXG4iLCAqZGF0YV9sZW4sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgOCAqIGF1LT5kYXRhX3NpemUgLSBhdS0+ZGF0YV9iaXRfcGFkZGluZyk7Cj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT1NQQyk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKg wqAgbWVtY3B5KGRhdGEsIGF1LT5kYXRhLCBhdS0+ZGF0YV9zaXplKTsKPiArwqDCoMKgICpkYXRh X2xlbiA9IDggKiBhdS0+ZGF0YV9zaXplIC0gYXUtPmRhdGFfYml0X3BhZGRpbmc7Cj4gKwo+ICvC oMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaGV2 Y19hZGRfbmFsKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBD b2RlZEJpdHN0cmVhbUZyYWdtZW50ICphdSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2b2lkICpu YWxfdW5pdCkKPiArewo+ICvCoMKgwqAgSDI2NVJhd05BTFVuaXRIZWFkZXIgKmhlYWRlciA9IG5h bF91bml0Owo+ICvCoMKgwqAgaW50IGVycjsKPiArCj4gK8KgwqDCoCBlcnIgPSBmZl9jYnNfaW5z ZXJ0X3VuaXRfY29udGVudChhdSwgLTEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoZWFkZXItPm5hbF91 bml0X3R5cGUsIG5hbF91bml0LCBOVUxMKTsKPiArwqDCoMKgIGlmIChlcnIgPCAwKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFkZCBO QUwgdW5pdDogIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJ0eXBlID0gJWQuXG4i LCBoZWFkZXItPm5hbF91bml0X3R5cGUpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+ ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGQzZDEydmFfZW5jb2RlX2hldmNfd3JpdGVfc2VxdWVuY2VfaGVhZGVyKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY2hhciAqZGF0YSwgc2l6ZV90Cj4gKmRhdGFfbGVuKQo+ICt7Cj4gK8KgwqDCoCBEM0QxMlZB RW5jb2RlSEVWQ0NvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgQ29k ZWRCaXRzdHJlYW1GcmFnbWVudMKgwqAgKmF1wqDCoCA9ICZwcml2LT5jdXJyZW50X2FjY2Vzc191 bml0Owo+ICvCoMKgwqAgaW50IGVycjsKPiArCj4gK8KgwqDCoCBlcnIgPSBkM2QxMnZhX2VuY29k ZV9oZXZjX2FkZF9uYWwoYXZjdHgsIGF1LCAmcHJpdi0+cmF3X3Zwcyk7Cj4gK8KgwqDCoCBpZiAo ZXJyIDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiArwqDCoMKgIGVyciA9 IGQzZDEydmFfZW5jb2RlX2hldmNfYWRkX25hbChhdmN0eCwgYXUsICZwcml2LT5yYXdfc3BzKTsK PiArwqDCoMKgIGlmIChlcnIgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4gKwo+ ICvCoMKgwqAgZXJyID0gZDNkMTJ2YV9lbmNvZGVfaGV2Y19hZGRfbmFsKGF2Y3R4LCBhdSwgJnBy aXYtPnJhd19wcHMpOwo+ICvCoMKgwqAgaWYgKGVyciA8IDApCj4gK8KgwqDCoMKgwqDCoMKgIGdv dG8gZmFpbDsKPiArCj4gK8KgwqDCoCBlcnIgPSBkM2QxMnZhX2VuY29kZV9oZXZjX3dyaXRlX2Fj Y2Vzc191bml0KGF2Y3R4LCBkYXRhLCBkYXRhX2xlbiwgYXUpOwo+ICtmYWlsOgo+ICvCoMKgwqAg ZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KGF1KTsKPiArwqDCoMKgIHJldHVybiBlcnI7Cj4gKwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2hldmNfaW5pdF9zZXF1ZW5jZV9wYXJh bXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250 ZXh0wqAgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQzRDEyVkFFbmNv ZGVDb250ZXh0wqDCoMKgwqAgKmN0eMKgID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQz RDEyVkFFbmNvZGVIRVZDQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDC oCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0wqAgKmh3Y3R4ID0gYmFzZV9jdHgtPmlucHV0X2ZyYW1l cy0+aHdjdHg7Cj4gK8KgwqDCoCBIMjY1UmF3VlBTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqdnBzwqAgPSAmcHJpdi0+cmF3X3ZwczsKPiArwqDCoMKgIEgyNjVSYXdTUFPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICpzcHPCoCA9ICZwcml2LT5yYXdfc3BzOwo+ICvCoMKgwqAgSDI2 NVJhd1BQU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnBwc8KgID0gJnByaXYtPnJhd19w cHM7Cj4gK8KgwqDCoCBIMjY1UmF3UHJvZmlsZVRpZXJMZXZlbMKgICpwdGzCoCA9ICZ2cHMtPnBy b2ZpbGVfdGllcl9sZXZlbDsKPiArwqDCoMKgIEgyNjVSYXdWVUnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICp2dWnCoCA9ICZzcHMtPnZ1aTsKPiArwqDCoMKgIEQzRDEyX1ZJREVPX0VOQ09E RVJfUFJPRklMRV9IRVZDIHByb2ZpbGUgPQo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfUFJPRklMRV9I RVZDX01BSU47Cj4gK8KgwqDCoCBEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMX1RJRVJfQ09OU1RS QUlOVFNfSEVWQyBsZXZlbCA9IHsgMCB9Owo+ICvCoMKgwqAgY29uc3QgQVZQaXhGbXREZXNjcmlw dG9yICpkZXNjOwo+ICvCoMKgwqAgdWludDhfdCBtaW5fY3Vfc2l6ZSwgbWF4X2N1X3NpemUsIG1p bl90dV9zaXplLCBtYXhfdHVfc2l6ZTsKPiArwqDCoMKgIGludCBjaHJvbWFfZm9ybWF0LCBiaXRf ZGVwdGg7Cj4gK8KgwqDCoCBIUkVTVUxUIGhyOwo+ICvCoMKgwqAgaW50IGk7Cj4gKwo+ICvCoMKg wqAgRDNEMTJfRkVBVFVSRV9EQVRBX1ZJREVPX0VOQ09ERVJfU1VQUE9SVCBzdXBwb3J0ID0gewo+ ICvCoMKgwqDCoMKgwqDCoCAuTm9kZUluZGV4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5Db2RlY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEQzRDEyX1ZJREVP X0VOQ09ERVJfQ09ERUNfSEVWQywKPiArwqDCoMKgwqDCoMKgwqAgLklucHV0Rm9ybWF0wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gaHdjdHgtPmZvcm1hdCwKPiAr wqDCoMKgwqDCoMKgwqAgLlJhdGVDb250cm9swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gY3R4LT5yYywKPiArwqDCoMKgwqDCoMKgwqAgLkludHJhUmVmcmVzaMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPQo+IEQzRDEyX1ZJREVPX0VO Q09ERVJfSU5UUkFfUkVGUkVTSF9NT0RFX05PTkUsCj4gK8KgwqDCoMKgwqDCoMKgIC5TdWJyZWdp b25GcmFtZUVuY29kaW5nwqDCoMKgwqDCoMKgwqDCoMKgwqAgPQo+IEQzRDEyX1ZJREVPX0VOQ09E RVJfRlJBTUVfU1VCUkVHSU9OX0xBWU9VVF9NT0RFX0ZVTExfRlJBTUUsCj4gK8KgwqDCoMKgwqDC oMKgIC5SZXNvbHV0aW9uc0xpc3RDb3VudMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IDEsCj4g K8KgwqDCoMKgwqDCoMKgIC5wUmVzb2x1dGlvbkxpc3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgID0gJmN0eC0+cmVzb2x1dGlvbiwKPiArwqDCoMKgwqDCoMKgwqAgLkNvZGVjR29w U2VxdWVuY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+Z29wLAo+ICvC oMKgwqDCoMKgwqDCoCAuTWF4UmVmZXJlbmNlRnJhbWVzSW5EUELCoMKgwqDCoMKgwqDCoMKgwqAg PSBNQVhfRFBCX1NJWkUgLSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuQ29kZWNDb25maWd1cmF0aW9u wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+Y29kZWNfY29uZiwKPiArwqDCoMKg wqDCoMKgwqAgLlN1Z2dlc3RlZFByb2ZpbGUuRGF0YVNpemXCoMKgwqDCoMKgwqDCoCA9Cj4gc2l6 ZW9mKEQzRDEyX1ZJREVPX0VOQ09ERVJfUFJPRklMRV9IRVZDKSwKPiArwqDCoMKgwqDCoMKgwqAg LlN1Z2dlc3RlZFByb2ZpbGUucEhFVkNQcm9maWxlwqDCoMKgID0gJnByb2ZpbGUsCj4gK8KgwqDC oMKgwqDCoMKgIC5TdWdnZXN0ZWRMZXZlbC5EYXRhU2l6ZcKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4g c2l6ZW9mKEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxfVElFUl9DT05TVFJBSU5UU19IRVZDKSwK PiArwqDCoMKgwqDCoMKgwqAgLlN1Z2dlc3RlZExldmVsLnBIRVZDTGV2ZWxTZXR0aW5nID0gJmxl dmVsLAo+ICvCoMKgwqDCoMKgwqDCoCAucFJlc29sdXRpb25EZXBlbmRlbnRTdXBwb3J0wqDCoMKg wqDCoCA9ICZjdHgtPnJlc19saW1pdHMsCj4gK8KgwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgaHIg PSBJRDNEMTJWaWRlb0RldmljZTNfQ2hlY2tGZWF0dXJlU3VwcG9ydChjdHgtPnZpZGVvX2Rldmlj ZTMsCj4gRDNEMTJfRkVBVFVSRV9WSURFT19FTkNPREVSX1NVUFBPUlQsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnN1cHBvcnQsIHNpemVvZihzdXBwb3J0KSk7Cj4g Kwo+ICvCoMKgwqAgaWYgKEZBSUxFRChocikpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY2hlY2sgZW5jb2Rlcgo+IHN1cHBvcnQoJWx4 KS5cbiIsIChsb25nKWhyKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoIShzdXBwb3J0LlN1cHBvcnRGbGFncyAm Cj4gRDNEMTJfVklERU9fRU5DT0RFUl9TVVBQT1JUX0ZMQUdfR0VORVJBTF9TVVBQT1JUX09LKSkg ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRyaXZlciBk b2VzIG5vdCBzdXBwb3J0IHNvbWUgcmVxdWVzdAo+IGZlYXR1cmVzLiAlI3hcbiIsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3VwcG9ydC5WYWxpZGF0aW9uRmxhZ3MpOwo+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDC oMKgIGlmIChzdXBwb3J0LlN1cHBvcnRGbGFncyAmCj4gRDNEMTJfVklERU9fRU5DT0RFUl9TVVBQ T1JUX0ZMQUdfUkVDT05TVFJVQ1RFRF9GUkFNRVNfUkVRVUlSRV9URVhUVVJFX0FSUkFZUykKPiB7 Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRDNEMTIgdmlk ZW8gZW5jb2RlIG9uIHRoaXMgZGV2aWNlCj4gcmVxdWlyZXMgdGV4dHVyZSBhcnJheSBzdXBwb3J0 LCAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImJ1dCBpdCdzIG5vdCBpbXBsZW1l bnRlZC5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7 Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgbWVtc2V0KHZwcywgMCwgc2l6ZW9mKCp2cHMpKTsK PiArwqDCoMKgIG1lbXNldChzcHMsIDAsIHNpemVvZigqc3BzKSk7Cj4gK8KgwqDCoCBtZW1zZXQo cHBzLCAwLCBzaXplb2YoKnBwcykpOwo+ICsKPiArwqDCoMKgIGRlc2MgPSBhdl9waXhfZm10X2Rl c2NfZ2V0KGJhc2VfY3R4LT5pbnB1dF9mcmFtZXMtPnN3X2Zvcm1hdCk7Cj4gK8KgwqDCoCBhdl9h c3NlcnQwKGRlc2MpOwo+ICvCoMKgwqAgaWYgKGRlc2MtPm5iX2NvbXBvbmVudHMgPT0gMSkgewo+ ICvCoMKgwqDCoMKgwqDCoCBjaHJvbWFfZm9ybWF0ID0gMDsKPiArwqDCoMKgIH0gZWxzZSB7Cj4g K8KgwqDCoMKgwqDCoMKgIGlmIChkZXNjLT5sb2cyX2Nocm9tYV93ID09IDEgJiYgZGVzYy0+bG9n Ml9jaHJvbWFfaCA9PSAxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hyb21hX2Zvcm1h dCA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoZGVzYy0+bG9nMl9jaHJvbWFfdyA9 PSAxICYmIGRlc2MtPmxvZzJfY2hyb21hX2ggPT0gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNocm9tYV9mb3JtYXQgPSAyOwo+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGRlc2Mt PmxvZzJfY2hyb21hX3cgPT0gMCAmJiBkZXNjLT5sb2cyX2Nocm9tYV9oID09IDApIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjaHJvbWFfZm9ybWF0ID0gMzsKPiArwqDCoMKgwqDCoMKgwqAg fSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkNocm9tYSBmb3JtYXQgb2YgaW5wdXQgcGl4ZWwgZm9ybWF0Cj4gIgo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVzIGlzIG5vdCBzdXBwb3J0ZWQuXG4iLCBk ZXNjLT5uYW1lKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCBiaXRfZGVwdGgg PSBkZXNjLT5jb21wWzBdLmRlcHRoOwo+ICsKPiArwqDCoMKgIG1pbl9jdV9zaXplID0gZDNkMTJ2 YV9lbmNvZGVfaGV2Y19tYXBfY3VzaXplKGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0KPiA+ TWluTHVtYUNvZGluZ1VuaXRTaXplKTsKPiArwqDCoMKgIG1heF9jdV9zaXplID0gZDNkMTJ2YV9l bmNvZGVfaGV2Y19tYXBfY3VzaXplKGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0KPiA+TWF4 THVtYUNvZGluZ1VuaXRTaXplKTsKPiArwqDCoMKgIG1pbl90dV9zaXplID0gZDNkMTJ2YV9lbmNv ZGVfaGV2Y19tYXBfdHVzaXplKGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0KPiA+TWluTHVt YVRyYW5zZm9ybVVuaXRTaXplKTsKPiArwqDCoMKgIG1heF90dV9zaXplID0gZDNkMTJ2YV9lbmNv ZGVfaGV2Y19tYXBfdHVzaXplKGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0KPiA+TWF4THVt YVRyYW5zZm9ybVVuaXRTaXplKTsKPiArCj4gK8KgwqDCoCAvLyBWUFMKPiArCj4gK8KgwqDCoCB2 cHMtPm5hbF91bml0X2hlYWRlciA9IChIMjY1UmF3TkFMVW5pdEhlYWRlcikgewo+ICvCoMKgwqDC oMKgwqDCoCAubmFsX3VuaXRfdHlwZcKgwqDCoMKgwqDCoMKgwqAgPSBIRVZDX05BTF9WUFMsCj4g K8KgwqDCoMKgwqDCoMKgIC5udWhfbGF5ZXJfaWTCoMKgwqDCoMKgwqDCoMKgwqAgPSAwLAo+ICvC oMKgwqDCoMKgwqDCoCAubnVoX3RlbXBvcmFsX2lkX3BsdXMxID0gMSwKPiArwqDCoMKgIH07Cj4g Kwo+ICvCoMKgwqAgdnBzLT52cHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZCA9IDA7Cj4gKwo+ICvC oMKgwqAgdnBzLT52cHNfYmFzZV9sYXllcl9pbnRlcm5hbF9mbGFnwqAgPSAxOwo+ICvCoMKgwqAg dnBzLT52cHNfYmFzZV9sYXllcl9hdmFpbGFibGVfZmxhZyA9IDE7Cj4gK8KgwqDCoCB2cHMtPnZw c19tYXhfbGF5ZXJzX21pbnVzMcKgwqDCoMKgwqDCoMKgwqAgPSAwOwo+ICvCoMKgwqAgdnBzLT52 cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxwqDCoMKgwqAgPSAwOwo+ICvCoMKgwqAgdnBzLT52cHNf dGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnwqAgPSAxOwo+ICsKPiArwqDCoMKgIHB0bC0+Z2VuZXJh bF9wcm9maWxlX3NwYWNlID0gMDsKPiArwqDCoMKgIHB0bC0+Z2VuZXJhbF9wcm9maWxlX2lkY8Kg wqAgPSBhdmN0eC0+cHJvZmlsZTsKPiArwqDCoMKgIHB0bC0+Z2VuZXJhbF90aWVyX2ZsYWfCoMKg wqDCoCA9IHByaXYtPnRpZXI7Cj4gKwo+ICvCoMKgwqAgcHRsLT5nZW5lcmFsX3Byb2ZpbGVfY29t cGF0aWJpbGl0eV9mbGFnW3B0bC0+Z2VuZXJhbF9wcm9maWxlX2lkY10gPSAxOwo+ICsKPiArwqDC oMKgIHB0bC0+Z2VuZXJhbF9wcm9ncmVzc2l2ZV9zb3VyY2VfZmxhZ8KgwqDCoCA9IDE7Cj4gK8Kg wqDCoCBwdGwtPmdlbmVyYWxfaW50ZXJsYWNlZF9zb3VyY2VfZmxhZ8KgwqDCoMKgID0gMDsKPiAr wqDCoMKgIHB0bC0+Z2VuZXJhbF9ub25fcGFja2VkX2NvbnN0cmFpbnRfZmxhZyA9IDE7Cj4gK8Kg wqDCoCBwdGwtPmdlbmVyYWxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgPSAxOwo+ICsKPiAr wqDCoMKgIHB0bC0+Z2VuZXJhbF9tYXhfMTRiaXRfY29uc3RyYWludF9mbGFnID0gYml0X2RlcHRo IDw9IDE0Owo+ICvCoMKgwqAgcHRsLT5nZW5lcmFsX21heF8xMmJpdF9jb25zdHJhaW50X2ZsYWcg PSBiaXRfZGVwdGggPD0gMTI7Cj4gK8KgwqDCoCBwdGwtPmdlbmVyYWxfbWF4XzEwYml0X2NvbnN0 cmFpbnRfZmxhZyA9IGJpdF9kZXB0aCA8PSAxMDsKPiArwqDCoMKgIHB0bC0+Z2VuZXJhbF9tYXhf OGJpdF9jb25zdHJhaW50X2ZsYWfCoCA9IGJpdF9kZXB0aCA9PcKgIDg7Cj4gKwo+ICvCoMKgwqAg cHRsLT5nZW5lcmFsX21heF80MjJjaHJvbWFfY29uc3RyYWludF9mbGFnwqAgPSBjaHJvbWFfZm9y bWF0IDw9IDI7Cj4gK8KgwqDCoCBwdGwtPmdlbmVyYWxfbWF4XzQyMGNocm9tYV9jb25zdHJhaW50 X2ZsYWfCoCA9IGNocm9tYV9mb3JtYXQgPD0gMTsKPiArwqDCoMKgIHB0bC0+Z2VuZXJhbF9tYXhf bW9ub2Nocm9tZV9jb25zdHJhaW50X2ZsYWcgPSBjaHJvbWFfZm9ybWF0ID09IDA7Cj4gKwo+ICvC oMKgwqAgcHRsLT5nZW5lcmFsX2ludHJhX2NvbnN0cmFpbnRfZmxhZyA9IGJhc2VfY3R4LT5nb3Bf c2l6ZSA9PSAxOwo+ICvCoMKgwqAgcHRsLT5nZW5lcmFsX29uZV9waWN0dXJlX29ubHlfY29uc3Ry YWludF9mbGFnID0gMDsKPiArCj4gK8KgwqDCoCBwdGwtPmdlbmVyYWxfbG93ZXJfYml0X3JhdGVf Y29uc3RyYWludF9mbGFnID0gMTsKPiArCj4gK8KgwqDCoCBpZiAoYXZjdHgtPmxldmVsICE9IEZG X0xFVkVMX1VOS05PV04pIHsKPiArwqDCoMKgwqDCoMKgwqAgcHRsLT5nZW5lcmFsX2xldmVsX2lk YyA9IGF2Y3R4LT5sZXZlbDsKPiArwqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGNv bnN0IEgyNjVMZXZlbERlc2NyaXB0b3IgKmxldmVsOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgbGV2 ZWwgPSBmZl9oMjY1X2d1ZXNzX2xldmVsKHB0bCwgYXZjdHgtPmJpdF9yYXRlLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoLCBiYXNlX2N0eC0KPiA+c3VyZmFjZV9oZWln aHQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgMSwgMSwgMSwgKGJhc2VfY3R4LT5iX3Blcl9wID4gMCkgKyAx KTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGxldmVsKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIGxldmVsICVzLlxuIiwgbGV2 ZWwtPm5hbWUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0bC0+Z2VuZXJhbF9sZXZlbF9p ZGMgPSBsZXZlbC0+bGV2ZWxfaWRjOwo+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJTdHJlYW0g d2lsbCBub3QgY29uZm9ybSB0byAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiYW55IG5vcm1hbCBsZXZlbDsgdXNpbmcgbGV2ZWwgOC41LlxuIik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcHRsLT5nZW5lcmFsX2xldmVsX2lkYyA9IDI1NTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvLyBUaGUgdGllciBmbGFnIG11c3QgYmUgc2V0IGluIGxldmVsIDguNS4K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdGwtPmdlbmVyYWxfdGllcl9mbGFnID0gMTsKPiAr wqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCBhdmN0eC0+bGV2ZWwgPSBwdGwtPmdl bmVyYWxfbGV2ZWxfaWRjOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHZwcy0+dnBzX3N1Yl9s YXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRfZmxhZyA9IDA7Cj4gK8KgwqDCoCB2cHMtPnZwc19t YXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMxWzBdwqDCoMKgwqDCoCA9IGJhc2VfY3R4LT5tYXhf Yl9kZXB0aCArCj4gMTsKPiArwqDCoMKgIHZwcy0+dnBzX21heF9udW1fcmVvcmRlcl9waWNzWzBd wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBiYXNlX2N0eC0+bWF4X2JfZGVwdGg7Cj4gK8Kg wqDCoCB2cHMtPnZwc19tYXhfbGF0ZW5jeV9pbmNyZWFzZV9wbHVzMVswXcKgwqDCoMKgwqDCoMKg ID0gMDsKPiArCj4gK8KgwqDCoCB2cHMtPnZwc19tYXhfbGF5ZXJfaWTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPSAwOwo+ICvCoMKgwqAgdnBzLT52cHNfbnVtX2xheWVyX3NldHNfbWludXMxwqDC oMKgID0gMDsKPiArwqDCoMKgIHZwcy0+bGF5ZXJfaWRfaW5jbHVkZWRfZmxhZ1swXVswXSA9IDE7 Cj4gKwo+ICvCoMKgwqAgdnBzLT52cHNfdGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gMDsKPiAr Cj4gK8KgwqDCoCAvLyBTUFMKPiArCj4gK8KgwqDCoCBzcHMtPm5hbF91bml0X2hlYWRlciA9IChI MjY1UmF3TkFMVW5pdEhlYWRlcikgewo+ICvCoMKgwqDCoMKgwqDCoCAubmFsX3VuaXRfdHlwZcKg wqDCoMKgwqDCoMKgwqAgPSBIRVZDX05BTF9TUFMsCj4gK8KgwqDCoMKgwqDCoMKgIC5udWhfbGF5 ZXJfaWTCoMKgwqDCoMKgwqDCoMKgwqAgPSAwLAo+ICvCoMKgwqDCoMKgwqDCoCAubnVoX3RlbXBv cmFsX2lkX3BsdXMxID0gMSwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgc3BzLT5zcHNfdmlk ZW9fcGFyYW1ldGVyX3NldF9pZCA9IHZwcy0+dnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQ7Cj4g Kwo+ICvCoMKgwqAgc3BzLT5zcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxwqDCoMKgID0gdnBzLT52 cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxOwo+ICvCoMKgwqAgc3BzLT5zcHNfdGVtcG9yYWxfaWRf bmVzdGluZ19mbGFnID0gdnBzLT52cHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnOwo+ICsKPiAr wqDCoMKgIHNwcy0+cHJvZmlsZV90aWVyX2xldmVsID0gdnBzLT5wcm9maWxlX3RpZXJfbGV2ZWw7 Cj4gKwo+ICvCoMKgwqAgc3BzLT5zcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgPSAwOwo+ICsKPiAr wqDCoMKgIHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGPCoMKgwqDCoMKgwqDCoMKgwqAgPSBjaHJvbWFf Zm9ybWF0Owo+ICvCoMKgwqAgc3BzLT5zZXBhcmF0ZV9jb2xvdXJfcGxhbmVfZmxhZyA9IDA7Cj4g Kwo+ICvCoMKgwqAgYXZfYXNzZXJ0MChjdHgtPnJlc19saW1pdHMuU3VicmVnaW9uQmxvY2tQaXhl bHNTaXplICUgbWluX2N1X3NpemUgPT0gMCk7Cj4gKwo+ICvCoMKgwqAgc3BzLT5waWNfd2lkdGhf aW5fbHVtYV9zYW1wbGVzwqAgPSBGRkFMSUdOKGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LQo+ID5yZXNfbGltaXRzLlN1YnJl Z2lvbkJsb2NrUGl4ZWxzU2l6ZSk7Cj4gK8KgwqDCoCBzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9z YW1wbGVzID0gRkZBTElHTihiYXNlX2N0eC0+c3VyZmFjZV9oZWlnaHQsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtCj4gPnJlc19saW1pdHMuU3VicmVnaW9uQmxvY2tQ aXhlbHNTaXplKTsKPiArCj4gK8KgwqDCoCBpZiAoYXZjdHgtPndpZHRowqAgIT0gc3BzLT5waWNf d2lkdGhfaW5fbHVtYV9zYW1wbGVzIHx8Cj4gK8KgwqDCoMKgwqDCoMKgIGF2Y3R4LT5oZWlnaHQg IT0gc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcykgewo+ICvCoMKgwqDCoMKgwqDCoCBz cHMtPmNvbmZvcm1hbmNlX3dpbmRvd19mbGFnID0gMTsKPiArwqDCoMKgwqDCoMKgwqAgc3BzLT5j b25mX3dpbl9sZWZ0X29mZnNldMKgwqAgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoCBzcHMtPmNvbmZf d2luX3JpZ2h0X29mZnNldMKgID0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc3BzLT5waWNf d2lkdGhfaW5fbHVtYV9zYW1wbGVzIC0gYXZjdHgtPndpZHRoKSA+PiBkZXNjLQo+ID5sb2cyX2No cm9tYV93Owo+ICvCoMKgwqDCoMKgwqDCoCBzcHMtPmNvbmZfd2luX3RvcF9vZmZzZXTCoMKgwqAg PSAwOwo+ICvCoMKgwqDCoMKgwqDCoCBzcHMtPmNvbmZfd2luX2JvdHRvbV9vZmZzZXQgPQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzIC0g YXZjdHgtPmhlaWdodCkgPj4gZGVzYy0KPiA+bG9nMl9jaHJvbWFfaDsKPiArwqDCoMKgIH0gZWxz ZSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHNwcy0+Y29uZm9ybWFuY2Vfd2luZG93X2ZsYWcgPSAwOwo+ ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHNwcy0+Yml0X2RlcHRoX2x1bWFfbWludXM4wqDCoCA9 IGJpdF9kZXB0aCAtIDg7Cj4gK8KgwqDCoCBzcHMtPmJpdF9kZXB0aF9jaHJvbWFfbWludXM4ID0g Yml0X2RlcHRoIC0gODsKPiArCj4gK8KgwqDCoCBzcHMtPmxvZzJfbWF4X3BpY19vcmRlcl9jbnRf bHNiX21pbnVzNCA9IGN0eC0+Z29wLnBIRVZDR3JvdXBPZlBpY3R1cmVzLQo+ID5sb2cyX21heF9w aWNfb3JkZXJfY250X2xzYl9taW51czQ7Cj4gKwo+ICvCoMKgwqAgc3BzLT5zcHNfc3ViX2xheWVy X29yZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnID0KPiArwqDCoMKgwqDCoMKgwqAgdnBzLT52cHNf c3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnOwo+ICvCoMKgwqAgZm9yIChpID0g MDsgaSA8PSBzcHMtPnNwc19tYXhfc3ViX2xheWVyc19taW51czE7IGkrKykgewo+ICvCoMKgwqDC oMKgwqDCoCBzcHMtPnNwc19tYXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMxW2ldID0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB2cHMtPnZwc19tYXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMx W2ldOwo+ICvCoMKgwqDCoMKgwqDCoCBzcHMtPnNwc19tYXhfbnVtX3Jlb3JkZXJfcGljc1tpXSA9 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnBzLT52cHNfbWF4X251bV9yZW9yZGVyX3BpY3Nb aV07Cj4gK8KgwqDCoMKgwqDCoMKgIHNwcy0+c3BzX21heF9sYXRlbmN5X2luY3JlYXNlX3BsdXMx W2ldID0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2cHMtPnZwc19tYXhfbGF0ZW5jeV9pbmNy ZWFzZV9wbHVzMVtpXTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBzcHMtPmxvZzJfbWluX2x1 bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzwqDCoMKgwqDCoCA9Cj4gKHVpbnQ4X3QpKGF2X2xv ZzIobWluX2N1X3NpemUpIC0gMyk7Cj4gK8KgwqDCoCBzcHMtPmxvZzJfZGlmZl9tYXhfbWluX2x1 bWFfY29kaW5nX2Jsb2NrX3NpemXCoMKgwqAgPQo+ICh1aW50OF90KShhdl9sb2cyKG1heF9jdV9z aXplKSAtIGF2X2xvZzIobWluX2N1X3NpemUpKTsKPiArwqDCoMKgIHNwcy0+bG9nMl9taW5fbHVt YV90cmFuc2Zvcm1fYmxvY2tfc2l6ZV9taW51czLCoMKgID0KPiAodWludDhfdCkoYXZfbG9nMiht aW5fdHVfc2l6ZSkgLSAyKTsKPiArwqDCoMKgIHNwcy0+bG9nMl9kaWZmX21heF9taW5fbHVtYV90 cmFuc2Zvcm1fYmxvY2tfc2l6ZSA9Cj4gKHVpbnQ4X3QpKGF2X2xvZzIobWF4X3R1X3NpemUpIC0g YXZfbG9nMihtaW5fdHVfc2l6ZSkpOwo+ICsKPiArwqDCoMKgIHNwcy0+bWF4X3RyYW5zZm9ybV9o aWVyYXJjaHlfZGVwdGhfaW50ZXIgPSBjdHgtPmNvZGVjX2NvbmYucEhFVkNDb25maWctCj4gPm1h eF90cmFuc2Zvcm1faGllcmFyY2h5X2RlcHRoX2ludGVyOwo+ICvCoMKgwqAgc3BzLT5tYXhfdHJh bnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRyYSA9IGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZp Zy0KPiA+bWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmE7Cj4gKwo+ICvCoMKgwqAg c3BzLT5hbXBfZW5hYmxlZF9mbGFnID0gISEoY3R4LT5jb2RlY19jb25mLnBIRVZDQ29uZmlnLQo+ ID5Db25maWd1cmF0aW9uRmxhZ3MgJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiBEM0QxMl9WSURFT19FTkNPREVSX0NPREVD X0NPTkZJR1VSQVRJT05fSEVWQ19GTEFHX1VTRV9BU1lNRVRSSUNfTU9USU9OX1BBUlRJVEkKPiBP Tik7Cj4gK8KgwqDCoCBzcHMtPnNhbXBsZV9hZGFwdGl2ZV9vZmZzZXRfZW5hYmxlZF9mbGFnID0g ISEoY3R4LQo+ID5jb2RlY19jb25mLnBIRVZDQ29uZmlnLT5Db25maWd1cmF0aW9uRmxhZ3MgJgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IEQzRDEyX1ZJREVP X0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfRU5BQkxFX1NBT19GSUxURVIp Owo+ICvCoMKgwqAgc3BzLT5zcHNfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZyA9IDA7Cj4gK8Kg wqDCoCBzcHMtPnBjbV9lbmFibGVkX2ZsYWcgPSAwOwo+ICsKPiArwqDCoMKgIHNwcy0+dnVpX3Bh cmFtZXRlcnNfcHJlc2VudF9mbGFnID0gMTsKPiArCj4gK8KgwqDCoCAvLyB2dWkgZGVmYXVsdCBw YXJhbWV0ZXJzCj4gK8KgwqDCoCB2dWktPmFzcGVjdF9yYXRpb19pZGPCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMDsKPiArwqDCoMKgIHZ1aS0+dmlkZW9f Zm9ybWF0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgID0gNTsKPiArwqDCoMKgIHZ1aS0+dmlkZW9fZnVsbF9yYW5nZV9mbGFnwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMDsKPiArwqDCoMKgIHZ1aS0+Y29sb3VyX3ByaW1h cmllc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAyOwo+ ICvCoMKgwqAgdnVpLT50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3PCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgPSAyOwo+ICvCoMKgwqAgdnVpLT5tYXRyaXhfY29lZmZpY2llbnRzwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IDI7Cj4gK8KgwqDCoCB2dWktPmNo cm9tYV9zYW1wbGVfbG9jX3R5cGVfdG9wX2ZpZWxkwqDCoMKgwqDCoMKgwqAgPSAwOwo+ICvCoMKg wqAgdnVpLT5jaHJvbWFfc2FtcGxlX2xvY190eXBlX2JvdHRvbV9maWVsZMKgwqDCoMKgID0gMDsK PiArwqDCoMKgIHZ1aS0+dGlsZXNfZml4ZWRfc3RydWN0dXJlX2ZsYWfCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA9IDA7Cj4gK8KgwqDCoCB2dWktPm1vdGlvbl92ZWN0b3JzX292ZXJfcGljX2Jv dW5kYXJpZXNfZmxhZyA9IDE7Cj4gK8KgwqDCoCB2dWktPm1pbl9zcGF0aWFsX3NlZ21lbnRhdGlv bl9pZGPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMDsKPiArwqDCoMKgIHZ1aS0+bWF4X2J5dGVz X3Blcl9waWNfZGVub23CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IDI7Cj4gK8Kg wqDCoCB2dWktPm1heF9iaXRzX3Blcl9taW5fY3VfZGVub23CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID0gMTsKPiArwqDCoMKgIHZ1aS0+bG9nMl9tYXhfbXZfbGVuZ3RoX2hvcml6b250YWzC oMKgwqDCoMKgwqDCoMKgwqDCoCA9IDE1Owo+ICvCoMKgwqAgdnVpLT5sb2cyX21heF9tdl9sZW5n dGhfdmVydGljYWzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAxNTsKClRoZSBpbnB1dCBpbWFn ZSBtaWdodCBoYXZlIGRpZmZlcmVudCB2YWx1ZXMuIAoKVGhhbmtzCkhhaWhhbwoKCj4gKwo+ICvC oMKgwqAgLy8gUFBTCj4gKwo+ICvCoMKgwqAgcHBzLT5uYWxfdW5pdF9oZWFkZXIgPSAoSDI2NVJh d05BTFVuaXRIZWFkZXIpIHsKPiArwqDCoMKgwqDCoMKgwqAgLm5hbF91bml0X3R5cGXCoMKgwqDC oMKgwqDCoMKgID0gSEVWQ19OQUxfUFBTLAo+ICvCoMKgwqDCoMKgwqDCoCAubnVoX2xheWVyX2lk wqDCoMKgwqDCoMKgwqDCoMKgID0gMCwKPiArwqDCoMKgwqDCoMKgwqAgLm51aF90ZW1wb3JhbF9p ZF9wbHVzMSA9IDEsCj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIHBwcy0+cHBzX3BpY19wYXJh bWV0ZXJfc2V0X2lkID0gMDsKPiArwqDCoMKgIHBwcy0+cHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lk ID0gc3BzLT5zcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ7Cj4gKwo+ICvCoMKgwqAgcHBzLT5jYWJh Y19pbml0X3ByZXNlbnRfZmxhZyA9IDE7Cj4gKwo+ICvCoMKgwqAgcHBzLT5udW1fcmVmX2lkeF9s MF9kZWZhdWx0X2FjdGl2ZV9taW51czEgPSAwOwo+ICvCoMKgwqAgcHBzLT5udW1fcmVmX2lkeF9s MV9kZWZhdWx0X2FjdGl2ZV9taW51czEgPSAwOwo+ICsKPiArwqDCoMKgIHBwcy0+aW5pdF9xcF9t aW51czI2ID0gMDsKPiArCj4gK8KgwqDCoCBwcHMtPnRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxh ZyA9ICEhKGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0KPiA+Q29uZmlndXJhdGlvbkZsYWdz ICYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09E RUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfRU5BQkxFX1RSQU5TRk9STV9TS0lQUElORyk7Cj4g Kwo+ICvCoMKgwqAgLy8gY3VfcXBfZGVsdGEgYWx3YXlzIHJlcXVpcmVkIHRvIGJlIDEgaW4KPiBo dHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L0RpcmVjdFgtU3BlY3MvYmxvYi9tYXN0ZXIvZDNk L0QzRDEyVmlkZW9FbmNvZGluZy5tZAo+ICvCoMKgwqAgcHBzLT5jdV9xcF9kZWx0YV9lbmFibGVk X2ZsYWcgPSAxOwo+ICsKPiArwqDCoMKgIHBwcy0+ZGlmZl9jdV9xcF9kZWx0YV9kZXB0aMKgwqAg PSAwOwo+ICsKPiArwqDCoMKgIHBwcy0+cHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNl bnRfZmxhZyA9IDE7Cj4gKwo+ICvCoMKgwqAgcHBzLT50aWxlc19lbmFibGVkX2ZsYWcgPSAwOyAv LyBubyB0aWxpbmcgaW4gRDNEMTIKPiArCj4gK8KgwqDCoCBwcHMtPnBwc19sb29wX2ZpbHRlcl9h Y3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyA9ICEoY3R4LQo+ID5jb2RlY19jb25mLnBIRVZDQ29u ZmlnLT5Db25maWd1cmF0aW9uRmxhZ3MgJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09O RklHVVJBVElPTl9IRVZDX0ZMQUdfRElTQUJMRV9MT09QX0ZJTFRFUl9BQ1JPU1NfUwo+IExJQ0VT KTsKPiArwqDCoMKgIHBwcy0+ZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9wcmVzZW50X2ZsYWcg PSAxOwo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGQzZDEy dmFfZW5jb2RlX2hldmNfZ2V0X2VuY29kZXJfY2FwcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4g K3sKPiArwqDCoMKgIGludCBpOwo+ICvCoMKgwqAgSFJFU1VMVCBocjsKPiArwqDCoMKgIHVpbnQ4 X3QgbWluX2N1X3NpemUsIG1heF9jdV9zaXplOwo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4 dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNv bnRleHTCoMKgwqDCoCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQzRDEyX1ZJ REVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDICpjb25maWc7Cj4gK8KgwqDCoCBE M0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fU1VQUE9SVF9IRVZDIGhldmNf Y2FwczsKPiArCj4gK8KgwqDCoCBEM0QxMl9GRUFUVVJFX0RBVEFfVklERU9fRU5DT0RFUl9DT0RF Q19DT05GSUdVUkFUSU9OX1NVUFBPUlQgY29kZWNfY2FwcyA9Cj4gewo+ICvCoMKgwqDCoMKgwqDC oCAuTm9kZUluZGV4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMCwKPiAr wqDCoMKgwqDCoMKgwqAgLkNvZGVjwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPSBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0hFVkMsCj4gK8KgwqDCoMKgwqDC oMKgIC5Qcm9maWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0 eC0+cHJvZmlsZS0+ZDNkMTJfcHJvZmlsZSwKPiArwqDCoMKgwqDCoMKgwqAgLkNvZGVjU3VwcG9y dExpbWl0cy5EYXRhU2l6ZSA9Cj4gc2l6ZW9mKEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09O RklHVVJBVElPTl9TVVBQT1JUX0hFVkMpLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBmb3Ig KGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoaGV2Y19jb25maWdfc3VwcG9ydF9zZXRzKTsgaSsr KSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGhldmNfY2FwcyA9IGhldmNfY29uZmlnX3N1cHBvcnRfc2V0 c1tpXTsKPiArwqDCoMKgwqDCoMKgwqAgY29kZWNfY2Fwcy5Db2RlY1N1cHBvcnRMaW1pdHMucEhF VkNTdXBwb3J0ID0gJmhldmNfY2FwczsKPiArwqDCoMKgwqDCoMKgwqAgaHIgPSBJRDNEMTJWaWRl b0RldmljZTNfQ2hlY2tGZWF0dXJlU3VwcG9ydChjdHgtPnZpZGVvX2RldmljZTMsCj4gRDNEMTJf RkVBVFVSRV9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fU1VQUE9SVCwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjb2RlY19jYXBzLAo+ IHNpemVvZihjb2RlY19jYXBzKSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChTVUNDRUVERUQoaHIp ICYmIGNvZGVjX2NhcHMuSXNTdXBwb3J0ZWQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgaWYgKGkgPT0gRkZfQVJSQVlfRUxFTVMoaGV2 Y19jb25maWdfc3VwcG9ydF9zZXRzKSkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIGNvZGVjIGNvbmZpZ3VyYXRpb25cbiIpOwo+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIGN0eC0+Y29kZWNfY29uZi5EYXRhU2l6ZSA9Cj4gc2l6ZW9mKEQzRDEyX1ZJREVPX0VO Q09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDKTsKPiArwqDCoMKgIGN0eC0+Y29kZWNfY29u Zi5wSEVWQ0NvbmZpZyA9IGF2X21hbGxvY3ooY3R4LT5jb2RlY19jb25mLkRhdGFTaXplKTsKPiAr wqDCoMKgIGlmICghY3R4LT5jb2RlY19jb25mLnBIRVZDQ29uZmlnKQo+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArwqDCoMKgIGNvbmZpZyA9IGN0eC0+Y29k ZWNfY29uZi5wSEVWQ0NvbmZpZzsKPiArCj4gK8KgwqDCoCBjb25maWctPkNvbmZpZ3VyYXRpb25G bGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPQo+IEQzRDEyX1ZJREVPX0VO Q09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfTk9ORTsKPiArwqDCoMKgIGNvbmZp Zy0+TWluTHVtYUNvZGluZ1VuaXRTaXplwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4g aGV2Y19jYXBzLk1pbkx1bWFDb2RpbmdVbml0U2l6ZTsKPiArwqDCoMKgIGNvbmZpZy0+TWF4THVt YUNvZGluZ1VuaXRTaXplwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4gaGV2Y19jYXBz Lk1heEx1bWFDb2RpbmdVbml0U2l6ZTsKPiArwqDCoMKgIGNvbmZpZy0+TWluTHVtYVRyYW5zZm9y bVVuaXRTaXplwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4gaGV2Y19jYXBzLk1pbkx1bWFUcmFu c2Zvcm1Vbml0U2l6ZTsKPiArwqDCoMKgIGNvbmZpZy0+TWF4THVtYVRyYW5zZm9ybVVuaXRTaXpl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9Cj4gaGV2Y19jYXBzLk1heEx1bWFUcmFuc2Zvcm1Vbml0 U2l6ZTsKPiArwqDCoMKgIGNvbmZpZy0+bWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50 ZXIgPQo+IGhldmNfY2Fwcy5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRlcjsKPiAr wqDCoMKgIGNvbmZpZy0+bWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmEgPQo+IGhl dmNfY2Fwcy5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRyYTsKPiArCj4gK8KgwqDC oCBpZiAoaGV2Y19jYXBzLlN1cHBvcnRGbGFncyAmCj4gRDNEMTJfVklERU9fRU5DT0RFUl9DT0RF Q19DT05GSUdVUkFUSU9OX1NVUFBPUlRfSEVWQ19GTEFHX0FTWU1FVFJJQ19NT1RJT05fUEFSCj4g VElUSU9OX1NVUFBPUlQgfHwKPiArwqDCoMKgwqDCoMKgwqAgaGV2Y19jYXBzLlN1cHBvcnRGbGFn cyAmCj4gRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NVUFBPUlRfSEVW Q19GTEFHX0FTWU1FVFJJQ19NT1RJT05fUEFSCj4gVElUSU9OX1JFUVVJUkVEKQo+ICvCoMKgwqDC oMKgwqDCoCBjb25maWctPkNvbmZpZ3VyYXRpb25GbGFncyB8PQo+IEQzRDEyX1ZJREVPX0VOQ09E RVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfVVNFX0FTWU1FVFJJQ19NT1RJT05fUEFS VElUSQo+IE9OOwo+ICsKPiArwqDCoMKgIGlmIChoZXZjX2NhcHMuU3VwcG9ydEZsYWdzICYKPiBE M0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fU1VQUE9SVF9IRVZDX0ZMQUdf U0FPX0ZJTFRFUl9TVVBQT1JUKQo+ICvCoMKgwqDCoMKgwqDCoCBjb25maWctPkNvbmZpZ3VyYXRp b25GbGFncyB8PQo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZD X0ZMQUdfRU5BQkxFX1NBT19GSUxURVI7Cj4gKwo+ICvCoMKgwqAgaWYgKGhldmNfY2Fwcy5TdXBw b3J0RmxhZ3MgJgo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9TVVBQ T1JUX0hFVkNfRkxBR19ESVNBQkxJTkdfTE9PUF9GSUxURQo+IFJfQUNST1NTX1NMSUNFU19TVVBQ T1JUKQo+ICvCoMKgwqDCoMKgwqDCoCBjb25maWctPkNvbmZpZ3VyYXRpb25GbGFncyB8PQo+IEQz RDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfRElTQUJMRV9M T09QX0ZJTFRFUl9BQ1JPU1NfUwo+IExJQ0VTOwo+ICsKPiArwqDCoMKgIGlmIChoZXZjX2NhcHMu U3VwcG9ydEZsYWdzICYKPiBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05f U1VQUE9SVF9IRVZDX0ZMQUdfVFJBTlNGT1JNX1NLSVBfU1VQUE8KPiBSVCkKPiArwqDCoMKgwqDC oMKgwqAgY29uZmlnLT5Db25maWd1cmF0aW9uRmxhZ3MgfD0KPiBEM0QxMl9WSURFT19FTkNPREVS X0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19GTEFHX0VOQUJMRV9UUkFOU0ZPUk1fU0tJUFBJTkc7 Cj4gKwo+ICvCoMKgwqAgaWYgKGhldmNfY2Fwcy5TdXBwb3J0RmxhZ3MgJgo+IEQzRDEyX1ZJREVP X0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9TVVBQT1JUX0hFVkNfRkxBR19QX0ZSQU1FU19J TVBMRU1FTlRFRAo+IF9BU19MT1dfREVMQVlfQl9GUkFNRVMpCj4gK8KgwqDCoMKgwqDCoMKgIGN0 eC0+Ymlfbm90X2VtcHR5ID0gMTsKPiArCj4gK8KgwqDCoCAvLyBibG9jayBzaXplcwo+ICvCoMKg wqAgbWluX2N1X3NpemUgPQo+IGQzZDEydmFfZW5jb2RlX2hldmNfbWFwX2N1c2l6ZShoZXZjX2Nh cHMuTWluTHVtYUNvZGluZ1VuaXRTaXplKTsKPiArwqDCoMKgIG1heF9jdV9zaXplID0KPiBkM2Qx MnZhX2VuY29kZV9oZXZjX21hcF9jdXNpemUoaGV2Y19jYXBzLk1heEx1bWFDb2RpbmdVbml0U2l6 ZSk7Cj4gKwo+ICvCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIENU VSBzaXplICVkeCVkLCAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICJtaW4gQ0Igc2l6ZSAlZHgl ZC5cbiIsIG1heF9jdV9zaXplLCBtYXhfY3Vfc2l6ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg bWluX2N1X3NpemUsIG1pbl9jdV9zaXplKTsKPiArCj4gK8KgwqDCoCBiYXNlX2N0eC0+c3VyZmFj ZV93aWR0aMKgID0gRkZBTElHTihhdmN0eC0+d2lkdGgswqAgbWluX2N1X3NpemUpOwo+ICvCoMKg wqAgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVpZ2h0LCBtaW5f Y3Vfc2l6ZSk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZDNkMTJ2YV9lbmNvZGVfaGV2Y19jb25maWd1cmUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7 Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVDb250ZXh0wqAgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZf ZGF0YTsKPiArwqDCoMKgIEQzRDEyVkFFbmNvZGVDb250ZXh0wqDCoMKgwqDCoCAqY3R4ID0gYXZj dHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIEQzRDEyVkFFbmNvZGVIRVZDQ29udGV4dCAqcHJpdiA9 IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBpbnQgZml4ZWRfcXBfaWRyLCBmaXhlZF9xcF9w LCBmaXhlZF9xcF9iOwo+ICvCoMKgwqAgaW50IGVycjsKPiArCj4gK8KgwqDCoCBlcnIgPSBmZl9j YnNfaW5pdCgmcHJpdi0+Y2JjLCBBVl9DT0RFQ19JRF9IRVZDLCBhdmN0eCk7Cj4gK8KgwqDCoCBp ZiAoZXJyIDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiArCj4gK8KgwqDCoCAv LyBSYXRlIGNvbnRyb2wKPiArwqDCoMKgIGlmIChjdHgtPnJjLk1vZGUgPT0gRDNEMTJfVklERU9f RU5DT0RFUl9SQVRFX0NPTlRST0xfTU9ERV9DUVApIHsKPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJf VklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfQ1FQICpjcXBfY3RsOwo+ICvCoMKgwqDCoMKgwqDC oCBmaXhlZF9xcF9wID0gYXZfY2xpcChiYXNlX2N0eC0+cmNfcXVhbGl0eSwgMSwgNTEpOwo+ICvC oMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPmlfcXVhbnRfZmFjdG9yID4gMC4wKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGZpeGVkX3FwX2lkciA9IGF2X2NsaXAoKGF2Y3R4LT5pX3F1YW50X2Zh Y3RvciAqIGZpeGVkX3FwX3AgKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT5pX3F1YW50X29mZnNl dCkgKyAwLjUsIDEsIDUxKTsKPiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZpeGVkX3FwX2lkciA9IGZpeGVkX3FwX3A7Cj4gK8KgwqDCoMKgwqDCoMKgIGlm IChhdmN0eC0+Yl9xdWFudF9mYWN0b3IgPiAwLjApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Zml4ZWRfcXBfYiA9IGF2X2NsaXAoKGF2Y3R4LT5iX3F1YW50X2ZhY3RvciAqIGZpeGVkX3FwX3Ag Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXZjdHgtPmJfcXVhbnRfb2Zmc2V0KSArIDAuNSwgMSwgNTEpOwo+ICvC oMKgwqDCoMKgwqDCoCBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZml4ZWRfcXBfYiA9 IGZpeGVkX3FwX3A7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19E RUJVRywgIlVzaW5nIGZpeGVkIFFQID0gIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICIlZCAvICVkIC8gJWQgZm9yIElEUi0gLyBQLSAvIEItZnJhbWVzLlxuIiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBmaXhlZF9xcF9pZHIsIGZpeGVkX3FwX3AsIGZpeGVkX3FwX2Ip Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5yYy5Db25maWdQYXJhbXMuRGF0YVNpemUgPQo+ IHNpemVvZihEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9DUVApOwo+ICvCoMKgwqDC oMKgwqDCoCBjcXBfY3RsID0gYXZfbWFsbG9jeihjdHgtPnJjLkNvbmZpZ1BhcmFtcy5EYXRhU2l6 ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICghY3FwX2N0bCkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgY3FwX2N0 bC0+Q29uc3RhbnRRUF9GdWxsSW50cmFjb2RlZEZyYW1lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA9Cj4gZml4ZWRfcXBfaWRyOwo+ICvCoMKgwqDCoMKgwqDCoCBjcXBfY3RsLT5D b25zdGFudFFQX0ludGVyUHJlZGljdGVkRnJhbWVfUHJldlJlZk9ubHnCoMKgwqDCoMKgID0KPiBm aXhlZF9xcF9wOwo+ICvCoMKgwqDCoMKgwqDCoCBjcXBfY3RsLT5Db25zdGFudFFQX0ludGVyUHJl ZGljdGVkRnJhbWVfQmlEaXJlY3Rpb25hbFJlZiA9Cj4gZml4ZWRfcXBfYjsKPiArCj4gK8KgwqDC oMKgwqDCoMKgIGN0eC0+cmMuQ29uZmlnUGFyYW1zLnBDb25maWd1cmF0aW9uX0NRUCA9IGNxcF9j dGw7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgLy8gR09QCj4gK8KgwqDCoCBjdHgtPmdvcC5E YXRhU2l6ZSA9Cj4gc2l6ZW9mKEQzRDEyX1ZJREVPX0VOQ09ERVJfU0VRVUVOQ0VfR09QX1NUUlVD VFVSRV9IRVZDKTsKPiArwqDCoMKgIGN0eC0+Z29wLnBIRVZDR3JvdXBPZlBpY3R1cmVzID0gYXZf bWFsbG9jeihjdHgtPmdvcC5EYXRhU2l6ZSk7Cj4gK8KgwqDCoCBpZiAoIWN0eC0+Z29wLnBIRVZD R3JvdXBPZlBpY3R1cmVzKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0p Owo+ICsKPiArwqDCoMKgIGN0eC0+Z29wLnBIRVZDR3JvdXBPZlBpY3R1cmVzLT5HT1BMZW5ndGjC oMKgwqDCoMKgID0gYmFzZV9jdHgtPmdvcF9zaXplOwo+ICvCoMKgwqAgY3R4LT5nb3AucEhFVkNH cm91cE9mUGljdHVyZXMtPlBQaWN0dXJlUGVyaW9kID0gYmFzZV9jdHgtPmJfcGVyX3AgKyAxOwo+ ICvCoMKgwqAgLy8gUG93ZXIgb2YgMgo+ICvCoMKgwqAgaWYgKGJhc2VfY3R4LT5nb3Bfc2l6ZSAm IGJhc2VfY3R4LT5nb3Bfc2l6ZSAtIDEgPT0gMCkKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5nb3Au cEhFVkNHcm91cE9mUGljdHVyZXMtPmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCA9 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRkZNQVgoYXZfbG9nMihiYXNlX2N0eC0+Z29wX3Np emUpIC0gNCwgMCk7Cj4gK8KgwqDCoCBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgIGN0eC0+Z29wLnBI RVZDR3JvdXBPZlBpY3R1cmVzLT5sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51czQgPQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZGTUFYKGF2X2xvZzIoYmFzZV9jdHgtPmdvcF9zaXpl KSAtIDMsIDApOwo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGQzZDEydmFfZW5jb2RlX2hldmNfc2V0X2xldmVsKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiAr ewo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUNvbnRleHTCoMKgwqDCoMKgICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOwo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUhFVkNDb250ZXh0ICpwcml2ID0gYXZj dHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIGludCBpOwo+ICsKPiArwqDCoMKgIGN0eC0+bGV2ZWwu RGF0YVNpemUgPQo+IHNpemVvZihEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMX1RJRVJfQ09OU1RS QUlOVFNfSEVWQyk7Cj4gK8KgwqDCoCBjdHgtPmxldmVsLnBIRVZDTGV2ZWxTZXR0aW5nID0gYXZf bWFsbG9jeihjdHgtPmxldmVsLkRhdGFTaXplKTsKPiArwqDCoMKgIGlmICghY3R4LT5sZXZlbC5w SEVWQ0xldmVsU2V0dGluZykKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiArCj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoaGV2Y19sZXZl bHMpOyBpKyspIHsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGF2Y3R4LT5sZXZlbCA9PSBoZXZjX2xl dmVsc1tpXS5sZXZlbCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+bGV2ZWwucEhF VkNMZXZlbFNldHRpbmctPkxldmVsID0gaGV2Y19sZXZlbHNbaV0uZDNkMTJfbGV2ZWw7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKg IH0KPiArCj4gK8KgwqDCoCBpZiAoaSA9PSBGRl9BUlJBWV9FTEVNUyhoZXZjX2xldmVscykpIHsK PiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGxl dmVsICVkLlxuIiwgYXZjdHgtPmxldmVsKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJS T1IoRUlOVkFMKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBjdHgtPmxldmVsLnBIRVZDTGV2 ZWxTZXR0aW5nLT5UaWVyID0gcHJpdi0KPiA+cmF3X3Zwcy5wcm9maWxlX3RpZXJfbGV2ZWwuZ2Vu ZXJhbF90aWVyX2ZsYWcgPT0gMCA/Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEyX1ZJ REVPX0VOQ09ERVJfVElFUl9IRVZDX01BSU4gOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBE M0QxMl9WSURFT19FTkNPREVSX1RJRVJfSEVWQ19ISUdIOwo+ICsKPiArwqDCoMKgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkM2QxMnZhX2VuY29kZV9oZXZjX2ZyZWVfcGljdHVy ZV9wYXJhbXMoRDNEMTJWQUVuY29kZVBpY3R1cmUKPiAqcGljKQo+ICt7Cj4gK8KgwqDCoCBpZiAo IXBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPiAr Cj4gK8KgwqDCoCBhdl9mcmVlcCgmcGljLT5waWNfY3RsLnBIRVZDUGljRGF0YS0+cExpc3QwUmVm ZXJlbmNlRnJhbWVzKTsKPiArwqDCoMKgIGF2X2ZyZWVwKCZwaWMtPnBpY19jdGwucEhFVkNQaWNE YXRhLT5wTGlzdDFSZWZlcmVuY2VGcmFtZXMpOwo+ICvCoMKgwqAgYXZfZnJlZXAoJnBpYy0+cGlj X2N0bC5wSEVWQ1BpY0RhdGEtCj4gPnBSZWZlcmVuY2VGcmFtZXNSZWNvblBpY3R1cmVEZXNjcmlw dG9ycyk7Cj4gK8KgwqDCoCBhdl9mcmVlcCgmcGljLT5waWNfY3RsLnBIRVZDUGljRGF0YSk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaGV2Y19pbml0X3BpY3R1cmVfcGFy YW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBEM0QxMlZBRW5jb2RlUGljdHVyZSAqcGljKQo+ICt7Cj4gK8KgwqDC oCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKmJhc2VfcGljID0KPiAoSFdCYXNlRW5jb2RlUGljdHVyZSAq KXBpYzsKPiArwqDCoMKgIEQzRDEyVkFFbmNvZGVIRVZDUGljdHVyZcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqaHBpYyA9IGJhc2VfcGljLQo+ ID5wcml2X2RhdGE7Cj4gK8KgwqDCoCBIV0Jhc2VFbmNvZGVQaWN0dXJlwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqcHJldiA9 IGJhc2VfcGljLQo+ID5wcmV2Owo+ICvCoMKgwqAgRDNEMTJWQUVuY29kZUhFVkNQaWN0dXJlwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqaHByZXYg PSBwcmV2ID8gcHJldi0KPiA+cHJpdl9kYXRhIDogTlVMTDsKPiArwqDCoMKgIEQzRDEyX1ZJREVP X0VOQ09ERVJfUkVGRVJFTkNFX1BJQ1RVUkVfREVTQ1JJUFRPUl9IRVZDICpwZCA9IE5VTEw7Cj4g K8KgwqDCoCBVSU5UwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpyZWZfbGlzdDAgPSBOVUxM LAo+ICpyZWZfbGlzdDEgPSBOVUxMOwo+ICvCoMKgwqAgaW50IGksIGlkeCA9IDA7Cj4gKwo+ICvC oMKgwqAgcGljLT5waWNfY3RsLkRhdGFTaXplID0KPiBzaXplb2YoRDNEMTJfVklERU9fRU5DT0RF Ul9QSUNUVVJFX0NPTlRST0xfQ09ERUNfREFUQV9IRVZDKTsKPiArwqDCoMKgIHBpYy0+cGljX2N0 bC5wSEVWQ1BpY0RhdGEgPSBhdl9tYWxsb2N6KHBpYy0+cGljX2N0bC5EYXRhU2l6ZSk7Cj4gK8Kg wqDCoCBpZiAoIXBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEpCj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgaWYgKGJhc2VfcGljLT50eXBlID09 IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChiYXNlX3Bp Yy0+ZGlzcGxheV9vcmRlciA9PSBiYXNlX3BpYy0+ZW5jb2RlX29yZGVyKTsKPiArwqDCoMKgwqDC oMKgwqAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlcjsKPiAr wqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAocHJldik7Cj4gK8Kg wqDCoMKgwqDCoMKgIGhwaWMtPmxhc3RfaWRyX2ZyYW1lID0gaHByZXYtPmxhc3RfaWRyX2ZyYW1l Owo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgaHBpYy0+cGljX29yZGVyX2NudCA9IGJhc2VfcGljLT5k aXNwbGF5X29yZGVyIC0gaHBpYy0+bGFzdF9pZHJfZnJhbWU7Cj4gKwo+ICvCoMKgwqAgc3dpdGNo KGJhc2VfcGljLT50eXBlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgUElDVFVSRV9UWVBFX0lE UjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5G cmFtZVR5cGUgPQo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfRlJBTUVfVFlQRV9IRVZDX0lEUl9GUkFN RTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAgY2Fz ZSBQSUNUVVJFX1RZUEVfSToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWMtPnBpY19jdGwu cEhFVkNQaWNEYXRhLT5GcmFtZVR5cGUgPQo+IEQzRDEyX1ZJREVPX0VOQ09ERVJfRlJBTUVfVFlQ RV9IRVZDX0lfRlJBTUU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDC oMKgwqDCoMKgIGNhc2UgUElDVFVSRV9UWVBFX1A6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGljLT5waWNfY3RsLnBIRVZDUGljRGF0YS0+RnJhbWVUeXBlID0KPiBEM0QxMl9WSURFT19FTkNP REVSX0ZSQU1FX1RZUEVfSEVWQ19QX0ZSQU1FOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIFBJQ1RVUkVfVFlQRV9COgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEtPkZyYW1lVHlwZSA9Cj4gRDNE MTJfVklERU9fRU5DT0RFUl9GUkFNRV9UWVBFX0hFVkNfQl9GUkFNRTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAgZGVmYXVsdDoKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKDAgJiYgImludmFsaWQgcGljdHVyZSB0eXBlIik7Cj4g K8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcGljLT5waWNfY3RsLnBIRVZDUGljRGF0YS0+c2xpY2Vf cGljX3BhcmFtZXRlcl9zZXRfaWQgPSAwOwo+ICvCoMKgwqAgcGljLT5waWNfY3RsLnBIRVZDUGlj RGF0YS0+UGljdHVyZU9yZGVyQ291bnROdW1iZXLCoMKgwqAgPSBocGljLQo+ID5waWNfb3JkZXJf Y250Owo+ICsKPiArwqDCoMKgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCB8 fCBiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfQikKPiB7Cj4gK8KgwqDCoMKgwqDCoMKg IHBkID0gYXZfY2FsbG9jKE1BWF9QSUNUVVJFX1JFRkVSRU5DRVMsIHNpemVvZigqcGQpKTsKPiAr wqDCoMKgwqDCoMKgwqAgaWYgKCFwZCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g QVZFUlJPUihFTk9NRU0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgcmVmX2xpc3QwID0gYXZfY2Fs bG9jKE1BWF9QSUNUVVJFX1JFRkVSRU5DRVMsIHNpemVvZigqcmVmX2xpc3QwKSk7Cj4gK8KgwqDC oMKgwqDCoMKgIGlmICghcmVmX2xpc3QwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBwaWMtPnBpY19jdGwucEhF VkNQaWNEYXRhLT5MaXN0MFJlZmVyZW5jZUZyYW1lc0NvdW50ID0gYmFzZV9waWMtCj4gPm5iX3Jl ZnNbMF07Cj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBiYXNlX3BpYy0+bmJfcmVm c1swXTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVy ZcKgwqDCoMKgwqAgKnJlZiA9IGJhc2VfcGljLT5yZWZzWzBdW2ldOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEQzRDEyVkFFbmNvZGVIRVZDUGljdHVyZSAqaHJlZjsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChyZWYgJiYgcmVmLT5lbmNvZGVfb3JkZXIgPCBiYXNl X3BpYy0+ZW5jb2RlX29yZGVyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocmVmID0gcmVm LT5wcml2X2RhdGE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZl9saXN0MFtpXSA9 IGlkeDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwZFtpZHhdLlJlY29uc3RydWN0ZWRQaWN0 dXJlUmVzb3VyY2VJbmRleCA9IGlkeDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwZFtpZHhd LklzUmVmVXNlZEJ5Q3VycmVudFBpYyA9IFRSVUU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGRbaWR4XS5QaWN0dXJlT3JkZXJDb3VudE51bWJlciA9IGhyZWYtPnBpY19vcmRlcl9jbnQ7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWR4Kys7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoYmFzZV9waWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX0Ip IHsKPiArwqDCoMKgwqDCoMKgwqAgcmVmX2xpc3QxID0gYXZfY2FsbG9jKE1BWF9QSUNUVVJFX1JF RkVSRU5DRVMsIHNpemVvZigqcmVmX2xpc3QxKSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcmVm X2xpc3QxKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5MaXN0MVJl ZmVyZW5jZUZyYW1lc0NvdW50ID0gYmFzZV9waWMtCj4gPm5iX3JlZnNbMV07Cj4gK8KgwqDCoMKg wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBiYXNlX3BpYy0+bmJfcmVmc1sxXTsgaSsrKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdCYXNlRW5jb2RlUGljdHVyZcKgwqDCoMKgwqAgKnJlZiA9 IGJhc2VfcGljLT5yZWZzWzFdW2ldOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEyVkFF bmNvZGVIRVZDUGljdHVyZSAqaHJlZjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZf YXNzZXJ0MChyZWYgJiYgcmVmLT5lbmNvZGVfb3JkZXIgPCBiYXNlX3BpYy0+ZW5jb2RlX29yZGVy KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBocmVmID0gcmVmLT5wcml2X2RhdGE7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZl9saXN0MVtpXSA9IGlkeDsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwZFtpZHhdLlJlY29uc3RydWN0ZWRQaWN0dXJlUmVzb3VyY2VJbmRleCA9 IGlkeDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwZFtpZHhdLklzUmVmVXNlZEJ5Q3VycmVu dFBpYyA9IFRSVUU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGRbaWR4XS5QaWN0dXJlT3Jk ZXJDb3VudE51bWJlciA9IGhyZWYtPnBpY19vcmRlcl9jbnQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWR4Kys7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiArCj4gK8KgwqDC oCBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5wTGlzdDBSZWZlcmVuY2VGcmFtZXMgPSByZWZf bGlzdDA7Cj4gK8KgwqDCoCBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5wTGlzdDFSZWZlcmVu Y2VGcmFtZXMgPSByZWZfbGlzdDE7Cj4gK8KgwqDCoCBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRh LT5SZWZlcmVuY2VGcmFtZXNSZWNvblBpY3R1cmVEZXNjcmlwdG9yc0NvdW50ID0KPiBpZHg7Cj4g K8KgwqDCoCBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5wUmVmZXJlbmNlRnJhbWVzUmVjb25Q aWN0dXJlRGVzY3JpcHRvcnMgPSBwZDsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IEQzRDEyVkFFbmNvZGVUeXBlIGQzZDEydmFfZW5jb2RlX3R5cGVfaGV2 YyA9IHsKPiArwqDCoMKgIC5wcm9maWxlc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBk M2QxMnZhX2VuY29kZV9oZXZjX3Byb2ZpbGVzLAo+ICsKPiArwqDCoMKgIC5kM2QxMl9jb2RlY8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0hFVkMsCj4g Kwo+ICvCoMKgwqAgLmZsYWdzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEZM QUdfQl9QSUNUVVJFUyB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRkxBR19CX1BJQ1RVUkVfUkVGRVJFTkNFUyB8Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRkxB R19OT05fSURSX0tFWV9QSUNUVVJFUywKPiArCj4gK8KgwqDCoCAuZGVmYXVsdF9xdWFsaXR5wqDC oMKgwqDCoMKgwqAgPSAyNSwKPiArCj4gK8KgwqDCoCAuZ2V0X2VuY29kZXJfY2Fwc8KgwqDCoMKg wqDCoCA9ICZkM2QxMnZhX2VuY29kZV9oZXZjX2dldF9lbmNvZGVyX2NhcHMsCj4gKwo+ICvCoMKg wqAgLmNvbmZpZ3VyZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gJmQzZDEydmFfZW5jb2Rl X2hldmNfY29uZmlndXJlLAo+ICsKPiArwqDCoMKgIC5zZXRfbGV2ZWzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA9ICZkM2QxMnZhX2VuY29kZV9oZXZjX3NldF9sZXZlbCwKPiArCj4gK8KgwqDC oCAucGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihEM0QxMlZBRW5jb2RlSEVWQ1BpY3R1 cmUpLAo+ICsKPiArwqDCoMKgIC5pbml0X3NlcXVlbmNlX3BhcmFtc8KgwqAgPSAmZDNkMTJ2YV9l bmNvZGVfaGV2Y19pbml0X3NlcXVlbmNlX3BhcmFtcywKPiArCj4gK8KgwqDCoCAuaW5pdF9waWN0 dXJlX3BhcmFtc8KgwqDCoCA9ICZkM2QxMnZhX2VuY29kZV9oZXZjX2luaXRfcGljdHVyZV9wYXJh bXMsCj4gKwo+ICvCoMKgwqAgLmZyZWVfcGljdHVyZV9wYXJhbXPCoMKgwqAgPSAmZDNkMTJ2YV9l bmNvZGVfaGV2Y19mcmVlX3BpY3R1cmVfcGFyYW1zLAo+ICsKPiArwqDCoMKgIC53cml0ZV9zZXF1 ZW5jZV9oZWFkZXLCoCA9ICZkM2QxMnZhX2VuY29kZV9oZXZjX3dyaXRlX3NlcXVlbmNlX2hlYWRl ciwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaGV2Y19pbml0KEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICvCoMKgwqAgSFdCYXNlRW5jb2RlQ29udGV4dMKgICpi YXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBEM0QxMlZBRW5jb2RlQ29udGV4 dMKgwqDCoMKgwqAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBEM0QxMlZBRW5j b2RlSEVWQ0NvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsKPiArwqDCoMKgIGN0 eC0+Y29kZWMgPSAmZDNkMTJ2YV9lbmNvZGVfdHlwZV9oZXZjOwo+ICsKPiArwqDCoMKgIGlmIChh dmN0eC0+cHJvZmlsZSA9PSBBVl9QUk9GSUxFX1VOS05PV04pCj4gK8KgwqDCoMKgwqDCoMKgIGF2 Y3R4LT5wcm9maWxlID0gcHJpdi0+cHJvZmlsZTsKPiArwqDCoMKgIGlmIChhdmN0eC0+bGV2ZWwg PT0gRkZfTEVWRUxfVU5LTk9XTikKPiArwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmxldmVsID0gcHJp di0+bGV2ZWw7Cj4gKwo+ICvCoMKgwqAgaWYgKGF2Y3R4LT5sZXZlbCAhPSBGRl9MRVZFTF9VTktO T1dOICYmIGF2Y3R4LT5sZXZlbCAmIH4weGZmKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBsZXZlbCAlZDogbXVzdCBmaXQgIgo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJpbiA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLlxuIiwg YXZjdHgtPmxldmVsKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK PiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAocHJpdi0+cXAgPiAwKQo+ICvCoMKgwqDCoMKg wqDCoCBiYXNlX2N0eC0+ZXhwbGljaXRfcXAgPSBwcml2LT5xcDsKPiArCj4gK8KgwqDCoCByZXR1 cm4gZmZfZDNkMTJ2YV9lbmNvZGVfaW5pdChhdmN0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZDNkMTJ2YV9lbmNvZGVfaGV2Y19jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiAr wqDCoMKgIEQzRDEyVkFFbmNvZGVIRVZDQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7 Cj4gKwo+ICvCoMKgwqAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJnByaXYtPmN1cnJlbnRfYWNjZXNz X3VuaXQpOwo+ICvCoMKgwqAgZmZfY2JzX2Nsb3NlKCZwcml2LT5jYmMpOwo+ICsKPiArwqDCoMKg IGF2X2ZyZWVwKCZwcml2LT5jb21tb24uY29kZWNfY29uZi5wSEVWQ0NvbmZpZyk7Cj4gK8KgwqDC oCBhdl9mcmVlcCgmcHJpdi0+Y29tbW9uLmdvcC5wSEVWQ0dyb3VwT2ZQaWN0dXJlcyk7Cj4gK8Kg wqDCoCBhdl9mcmVlcCgmcHJpdi0+Y29tbW9uLmxldmVsLnBIRVZDTGV2ZWxTZXR0aW5nKTsKPiAr Cj4gK8KgwqDCoCByZXR1cm4gZmZfZDNkMTJ2YV9lbmNvZGVfY2xvc2UoYXZjdHgpOwo+ICt9Cj4g Kwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihEM0QxMlZBRW5jb2RlSEVWQ0NvbnRleHQs IHgpCj4gKyNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZM QUdfRU5DT0RJTkdfUEFSQU0pCj4gK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBkM2QxMnZhX2VuY29k ZV9oZXZjX29wdGlvbnNbXSA9IHsKPiArwqDCoMKgIEhXX0JBU0VfRU5DT0RFX0NPTU1PTl9PUFRJ T05TLAo+ICvCoMKgwqAgRDNEMTJWQV9FTkNPREVfUkNfT1BUSU9OUywKPiArCj4gK8KgwqDCoCB7 ICJxcCIsICJDb25zdGFudCBRUCAoZm9yIFAtZnJhbWVzOyBzY2FsZWQgYnkgcWZhY3Rvci9xb2Zm c2V0IGZvciBJL0IpIiwKPiArwqDCoMKgwqDCoCBPRkZTRVQocXApLCBBVl9PUFRfVFlQRV9JTlQs IHsgLmk2NCA9IDAgfSwgMCwgNTIsIEZMQUdTIH0sCj4gKwo+ICvCoMKgwqAgeyAicHJvZmlsZSIs ICJTZXQgcHJvZmlsZSAoZ2VuZXJhbF9wcm9maWxlX2lkYykiLAo+ICvCoMKgwqDCoMKgIE9GRlNF VChwcm9maWxlKSwgQVZfT1BUX1RZUEVfSU5ULAo+ICvCoMKgwqDCoMKgIHsgLmk2NCA9IEFWX1BS T0ZJTEVfVU5LTk9XTiB9LCBBVl9QUk9GSUxFX1VOS05PV04sIDB4ZmYsIEZMQUdTLAo+ICJwcm9m aWxlIiB9LAo+ICsKPiArI2RlZmluZSBQUk9GSUxFKG5hbWUsIHZhbHVlKcKgIG5hbWUsIE5VTEws IDAsIEFWX09QVF9UWVBFX0NPTlNULCBcCj4gK8KgwqDCoMKgwqAgeyAuaTY0ID0gdmFsdWUgfSwg MCwgMCwgRkxBR1MsICJwcm9maWxlIgo+ICvCoMKgwqAgeyBQUk9GSUxFKCJtYWluIizCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX1BST0ZJTEVfSEVWQ19NQUlOKSB9LAo+ICvCoMKgwqAg eyBQUk9GSUxFKCJtYWluMTAiLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBVl9QUk9GSUxFX0hF VkNfTUFJTl8xMCkgfSwKPiArwqDCoMKgIHsgUFJPRklMRSgicmV4dCIswqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBBVl9QUk9GSUxFX0hFVkNfUkVYVCkgfSwKPiArI3VuZGVmIFBST0ZJTEUK PiArCj4gK8KgwqDCoCB7ICJ0aWVyIiwgIlNldCB0aWVyIChnZW5lcmFsX3RpZXJfZmxhZykiLAo+ ICvCoMKgwqDCoMKgIE9GRlNFVCh0aWVyKSwgQVZfT1BUX1RZUEVfSU5ULAo+ICvCoMKgwqDCoMKg IHsgLmk2NCA9IDAgfSwgMCwgMSwgRkxBR1MsICJ0aWVyIiB9LAo+ICvCoMKgwqAgeyAibWFpbiIs IE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULAo+ICvCoMKgwqDCoMKgIHsgLmk2NCA9IDAgfSwg MCwgMCwgRkxBR1MsICJ0aWVyIiB9LAo+ICvCoMKgwqAgeyAiaGlnaCIsIE5VTEwsIDAsIEFWX09Q VF9UWVBFX0NPTlNULAo+ICvCoMKgwqDCoMKgIHsgLmk2NCA9IDEgfSwgMCwgMCwgRkxBR1MsICJ0 aWVyIiB9LAo+ICsKPiArwqDCoMKgIHsgImxldmVsIiwgIlNldCBsZXZlbCAoZ2VuZXJhbF9sZXZl bF9pZGMpIiwKPiArwqDCoMKgwqDCoCBPRkZTRVQobGV2ZWwpLCBBVl9PUFRfVFlQRV9JTlQsCj4g K8KgwqDCoMKgwqAgeyAuaTY0ID0gRkZfTEVWRUxfVU5LTk9XTiB9LCBGRl9MRVZFTF9VTktOT1dO LCAweGZmLCBGTEFHUywgImxldmVsIiB9LAo+ICsKPiArI2RlZmluZSBMRVZFTChuYW1lLCB2YWx1 ZSkgbmFtZSwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIFwKPiArwqDCoMKgwqDCoCB7IC5p NjQgPSB2YWx1ZSB9LCAwLCAwLCBGTEFHUywgImxldmVsIgo+ICvCoMKgwqAgeyBMRVZFTCgiMSIs wqDCoMKgIDMwKSB9LAo+ICvCoMKgwqAgeyBMRVZFTCgiMiIswqDCoMKgIDYwKSB9LAo+ICvCoMKg wqAgeyBMRVZFTCgiMi4xIizCoCA2MykgfSwKPiArwqDCoMKgIHsgTEVWRUwoIjMiLMKgwqDCoCA5 MCkgfSwKPiArwqDCoMKgIHsgTEVWRUwoIjMuMSIswqAgOTMpIH0sCj4gK8KgwqDCoCB7IExFVkVM KCI0IizCoMKgIDEyMCkgfSwKPiArwqDCoMKgIHsgTEVWRUwoIjQuMSIsIDEyMykgfSwKPiArwqDC oMKgIHsgTEVWRUwoIjUiLMKgwqAgMTUwKSB9LAo+ICvCoMKgwqAgeyBMRVZFTCgiNS4xIiwgMTUz KSB9LAo+ICvCoMKgwqAgeyBMRVZFTCgiNS4yIiwgMTU2KSB9LAo+ICvCoMKgwqAgeyBMRVZFTCgi NiIswqDCoCAxODApIH0sCj4gK8KgwqDCoCB7IExFVkVMKCI2LjEiLCAxODMpIH0sCj4gK8KgwqDC oCB7IExFVkVMKCI2LjIiLCAxODYpIH0sCj4gKyN1bmRlZiBMRVZFTAo+ICsKPiArwqDCoMKgIHsg TlVMTCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEZGQ29kZWNEZWZhdWx0IGQzZDEydmFf ZW5jb2RlX2hldmNfZGVmYXVsdHNbXSA9IHsKPiArwqDCoMKgIHsgImIiLMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICIwIsKgwqAgfSwKPiArwqDCoMKgIHsgImJmIizCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIjIiwqDCoCB9LAo+ICvCoMKgwqAgeyAiZyIswqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIjEyMCIgfSwKPiArwqDCoMKgIHsgImlfcWZhY3RvciIswqDCoMKgwqDCoCAiMSLCoMKg IH0sCj4gK8KgwqDCoCB7ICJpX3FvZmZzZXQiLMKgwqDCoMKgwqAgIjAiwqDCoCB9LAo+ICvCoMKg wqAgeyAiYl9xZmFjdG9yIizCoMKgwqDCoMKgICIxIiB9LAo+ICvCoMKgwqAgeyAiYl9xb2Zmc2V0 IizCoMKgwqDCoMKgICIwIsKgwqAgfSwKPiArwqDCoMKgIHsgInFtaW4iLMKgwqDCoMKgwqDCoMKg wqDCoMKgICItMSLCoCB9LAo+ICvCoMKgwqAgeyAicW1heCIswqDCoMKgwqDCoMKgwqDCoMKgwqAg Ii0xIsKgIH0sCj4gK8KgwqDCoCB7IE5VTEwgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBB VkNsYXNzIGQzZDEydmFfZW5jb2RlX2hldmNfY2xhc3MgPSB7Cj4gK8KgwqDCoCAuY2xhc3NfbmFt ZSA9ICJoZXZjX2QzZDEydmEiLAo+ICvCoMKgwqAgLml0ZW1fbmFtZcKgID0gYXZfZGVmYXVsdF9p dGVtX25hbWUsCj4gK8KgwqDCoCAub3B0aW9uwqDCoMKgwqAgPSBkM2QxMnZhX2VuY29kZV9oZXZj X29wdGlvbnMsCj4gK8KgwqDCoCAudmVyc2lvbsKgwqDCoCA9IExJQkFWVVRJTF9WRVJTSU9OX0lO VCwKPiArfTsKPiArCj4gK2NvbnN0IEZGQ29kZWMgZmZfaGV2Y19kM2QxMnZhX2VuY29kZXIgPSB7 Cj4gK8KgwqDCoCAucC5uYW1lwqDCoMKgwqDCoMKgwqDCoCA9ICJoZXZjX2QzZDEydmEiLAo+ICvC oMKgwqAgQ09ERUNfTE9OR19OQU1FKCJEM0QxMlZBIGhldmMgZW5jb2RlciIpLAo+ICvCoMKgwqAg LnAudHlwZcKgwqDCoMKgwqDCoMKgwqAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gK8KgwqDCoCAu cC5pZMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gQVZfQ09ERUNfSURfSEVWQywKPiArwqDCoMKgIC5w cml2X2RhdGFfc2l6ZSA9IHNpemVvZihEM0QxMlZBRW5jb2RlSEVWQ0NvbnRleHQpLAo+ICvCoMKg wqAgLmluaXTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9ICZkM2QxMnZhX2VuY29kZV9oZXZjX2luaXQs Cj4gK8KgwqDCoCBGRl9DT0RFQ19SRUNFSVZFX1BBQ0tFVF9DQigmZmZfaHdfYmFzZV9lbmNvZGVf cmVjZWl2ZV9wYWNrZXQpLAo+ICvCoMKgwqAgLmNsb3NlwqDCoMKgwqDCoMKgwqDCoMKgID0gJmQz ZDEydmFfZW5jb2RlX2hldmNfY2xvc2UsCj4gK8KgwqDCoCAucC5wcml2X2NsYXNzwqDCoCA9ICZk M2QxMnZhX2VuY29kZV9oZXZjX2NsYXNzLAo+ICvCoMKgwqAgLnAuY2FwYWJpbGl0aWVzID0gQVZf Q09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0hBUkRXQVJFIHwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX0NPREVDX0NBUF9EUjEgfAo+IEFWX0NP REVDX0NBUF9FTkNPREVSX1JFT1JERVJFRF9PUEFRVUUsCj4gK8KgwqDCoCAuY2Fwc19pbnRlcm5h bMKgID0gRkZfQ09ERUNfQ0FQX05PVF9JTklUX1RIUkVBRFNBRkUgfAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRkZfQ09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCwK PiArwqDCoMKgIC5kZWZhdWx0c8KgwqDCoMKgwqDCoCA9IGQzZDEydmFfZW5jb2RlX2hldmNfZGVm YXVsdHMsCj4gK8KgwqDCoCAucC5waXhfZm10cyA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXRb XSkgewo+ICvCoMKgwqDCoMKgwqDCoCBBVl9QSVhfRk1UX0QzRDEyLAo+ICvCoMKgwqDCoMKgwqDC oCBBVl9QSVhfRk1UX05PTkUsCj4gK8KgwqDCoCB9LAo+ICvCoMKgwqAgLmh3X2NvbmZpZ3PCoMKg wqDCoCA9IGZmX2QzZDEydmFfZW5jb2RlX2h3X2NvbmZpZ3MsCj4gK8KgwqDCoCAucC53cmFwcGVy X25hbWUgPSAiZDNkMTJ2YSIsCj4gK307CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBm Zm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZl bAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZl bC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==