From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web10.699.1597440839168524759 for ; Fri, 14 Aug 2020 14:33:59 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=eBL7GbJr; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: christopher.j.zurcher@intel.com) IronPort-SDR: 8qA7MrZX3o0SRuax8RYocoV3MEJ5wDvFSqjhys+iZCrZ61qOoDUrYH/QgM+WVnA2jKVZEqq+v4 BHRQkRcqR5kw== X-IronPort-AV: E=McAfee;i="6000,8403,9713"; a="152142340" X-IronPort-AV: E=Sophos;i="5.76,313,1592895600"; d="scan'208";a="152142340" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Aug 2020 14:33:58 -0700 IronPort-SDR: HpvSfjC89usEmte4cus2o7ArdUQ6jGQpnE+5xCKQ/nX2lVdbHpAUd6xBSwhzBG3kxHaXCrGAah bbWthyZxkDzg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,313,1592895600"; d="scan'208";a="333518564" Received: from fmsmsx603-2.cps.intel.com (HELO fmsmsx603.amr.corp.intel.com) ([10.18.84.213]) by FMSMGA003.fm.intel.com with ESMTP; 14 Aug 2020 14:33:58 -0700 Received: from fmsmsx606.amr.corp.intel.com (10.18.126.86) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 14 Aug 2020 14:33:57 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Fri, 14 Aug 2020 14:33:57 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.101) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 14 Aug 2020 14:33:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YZ6pix6U8y9towJ9IuCmJ3eKdwXii2L6JUCvgVgW7MPA1QU+Effn1cd9VVSh/uT57hRdusXo++yNoQ0JL851SC7au7F+4N+EeCBxm27loigvCz5luzO8aekCt/bzza6hvXRfLkem0OMRGZshVW6oiEhqp9LP1FO97jwPZHYEB1ORAGNVkoD88K/35FNQCtbsWtMXacgfvEeebE5UyS86FcnEieVB+URPCjmeygIqah2BuIDyEnwuJTzPwy1X5csBO5axjdDQk1/tBhXjkv0eM9Rkoqp6ZWwgwnjohFvLiHqqER2mHlfl633CPrbuj1hgSlN7kO8aBJmn3mxks+AxmQ== 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-SenderADCheck; bh=1fF1QRkjI0UX9qj3j38tnOf9N7DRxGi961Hs13MdS1A=; b=W9Ce9JoUcg/Vjy4T5hHhByIXx1r1OeSA8Cj+etTcSObP9EXyqsU8YLlxlKz+g3feoHXzTe1BaawnqnJ810o7SWGM90HMlr6vRlUJNljiJqSonmTSTeDsgsceHHdQ5O+SjZ/OhlEcaLEgFAQNXukQvIurcE5JUKGX2lJFAzdEOBhDMfQoQZgPedJJ++gA3RObFd+At3RU1ELJbjBVGx1922+GCOz7pCTMPKuPuoImiVqaxcbLjSFzNQXcC/8/3KiHq5psoJGKdmmzLuZ1xYv5/zQj2Cwk2bx5rREaPM1Xe6qe1AosS6VE7QoMcZ8x5gJhfIXUXhKG+Pqd1c48aQTqnw== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1fF1QRkjI0UX9qj3j38tnOf9N7DRxGi961Hs13MdS1A=; b=eBL7GbJrGk9vT3AF2V2yLW7iX7HUl2CPT98ZvisKN4J5eJZ/laQ7L0mPrwURVsdtrfDgBWzLoXVsvXgl7d4uehKucZboW2uI6HHKbnmLLQ2ZzQ0uGRurhtwNabMiU9YDKbDuClAiTHz7A0A/DlX+yVILup11MPW2YGzSBNwBICo= Received: from MWHPR1101MB2125.namprd11.prod.outlook.com (2603:10b6:301:4d::10) by MWHPR11MB1406.namprd11.prod.outlook.com (2603:10b6:300:23::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.15; Fri, 14 Aug 2020 21:33:55 +0000 Received: from MWHPR1101MB2125.namprd11.prod.outlook.com ([fe80::981f:c28b:8c49:3aaf]) by MWHPR1101MB2125.namprd11.prod.outlook.com ([fe80::981f:c28b:8c49:3aaf%8]) with mapi id 15.20.3283.015; Fri, 14 Aug 2020 21:33:55 +0000 From: "Zurcher, Christopher J" To: "Yao, Jiewen" , Laszlo Ersek , "devel@edk2.groups.io" CC: "Wang, Jian J" , "Lu, XiaoyuX" Subject: Re: [edk2-devel] [PATCH 1/1] CryptoPkg/BaseCryptLib: Add EVP (Envelope) Digest interface Thread-Topic: [edk2-devel] [PATCH 1/1] CryptoPkg/BaseCryptLib: Add EVP (Envelope) Digest interface Thread-Index: AQHWcVafuEXhBxPCMEOvmaQ5sR60oak2HAYAgAHw1rA= Date: Fri, 14 Aug 2020 21:33:55 +0000 Message-ID: References: <20200813012049.7402-1-christopher.j.zurcher@intel.com> <20200813012049.7402-2-christopher.j.zurcher@intel.com> <15d6f379-9dd2-e6d7-5901-4b23e78c7794@redhat.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-reaction: no-action dlp-product: dlpe-windows authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [50.39.184.212] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 357f3c4f-235e-47fe-9969-08d84099bf42 x-ms-traffictypediagnostic: MWHPR11MB1406: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rcCNbuHu2rMtX0ZYG0Nsr0wljSP6PQzgUEPQkx+vwwydq3uduTxNcmn5AoAJo2pU1xroa/3sFC0YiWlhqQHxQlY8KvT229AtghGFX2TGFJxQqMCMhTwP9X/TcpRcJ868UDq98r5ly0PqzFAgnS24dx8X24U7xTDPWHzG9PAYUGM7jDsqP5DycJI/ZKl/eZ85ZJZShMETciCy9/mwXUktUrkTpXBECuf3Od79d/gaCGdQm0Q12wkQAFGo2s5FHdHlPcxRlhZ61Hg7rUu67GM6AZEW5ytVaBbhY0FOsjTz6bAYbGwyOgV+FUZVFGn9G+/7qJJ6PJkppdoPCy0K8PBH7xKID1QAv+e4UTQaVeeOc+L1slkE57PjvyZldyc+Cq675WaeMGSn8ImlCCuMj+ELtA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR1101MB2125.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(346002)(396003)(366004)(39860400002)(136003)(76116006)(6506007)(53546011)(107886003)(478600001)(30864003)(66476007)(86362001)(52536014)(33656002)(83380400001)(66446008)(64756008)(966005)(66556008)(66946007)(316002)(8676002)(8936002)(55016002)(7696005)(9686003)(186003)(4326008)(5660300002)(54906003)(110136005)(26005)(2906002)(71200400001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: ajydZ6z5EeAfiro8uxoVBMuW8UaNFarE6FMTUpmFh/6mf5fft6BgusLETyBIkSv+qRhOVxLKwpWKQ3HdhAvjG6wYumZA4/1ovlHuxcl5YQEF7OQVd+/evssZEWEDVU+xEEin3Rof+/nW61Du5lL/rwILij+b7d/zeXCwrkBjddhP93mpu8EpDg81eo7alTpYnCODYIkuawTTN85vXKva+HpFs1nU09j2D5W5c9IkvAkUmAAiyiC7kfmQ2/L5YoQk06t8rDQLnDhHWUAzS/jNbf2u1F6zH6nCCaC0uRPnC1nH4t0UboMCwRSfkIoycwpbx7PwAyyFkm/uYYtQoEaSvWVG+G7tTXZ06Yhvob9wfEJX3aqoSIwWpiwh+BYxKGbRPTuLWNi6mLq76tZMTVyxmxttpKHOPN3MVHnl6LlLDKkVu3Ahspyj7jvIySnN2JZMLGVKsrLEZYfWSTLeKa1g+HvUuGVGLuoBPSUCF2xZg4GnDXnAvisLBSFS3Gfb71XRsjtWGAwGELyQ0XU56Q9XGDVTOhl5ll0woNEf5omsNMuGiSxhRJnSBzYz+4czx0qv89kGMILspNVp4fm0X7mj3OhDIDzdIhO2Ewq4V2/AraxmBHp0N3dnhH5ZYTudObiWlftjYP/+qKcrf27sse0d0w== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR1101MB2125.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 357f3c4f-235e-47fe-9969-08d84099bf42 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Aug 2020 21:33:55.3123 (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: YtPmMj9tsrGVUL3JAHw1SwYm9MqaqjbANjv/pNtu29Rq92ycHvQCRWWS5npHsQRxbiFD0tbna/lqqMIbPicPvetDOQhGeX1r/LTqoNC4eI4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1406 Return-Path: christopher.j.zurcher@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SSByZXBsYWNlZCB0aGUgTUQ1IGFuZCBTSEF4IGZ1bmN0aW9ucyB3aXRoIEVWUCBmdW5jdGlvbnMg aW4gSGFzaDJEeGVDcnlwdG8sIGFuZCBpdCBncmV3IGZyb20gfjI2ayB0byB+MjUzay4NCg0KLS0N CkNocmlzdG9waGVyIFp1cmNoZXINCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBG cm9tOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IFNlbnQ6IFRodXJzZGF5 LCBBdWd1c3QgMTMsIDIwMjAgMDc6MzgNCj4gVG86IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhh dC5jb20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgWnVyY2hlciwNCj4gQ2hyaXN0b3BoZXIgSiA8 Y2hyaXN0b3BoZXIuai56dXJjaGVyQGludGVsLmNvbT4NCj4gQ2M6IFdhbmcsIEppYW4gSiA8amlh bi5qLndhbmdAaW50ZWwuY29tPjsgTHUsIFhpYW95dVggPHhpYW95dXgubHVAaW50ZWwuY29tPg0K PiBTdWJqZWN0OiBSRTogW2VkazItZGV2ZWxdIFtQQVRDSCAxLzFdIENyeXB0b1BrZy9CYXNlQ3J5 cHRMaWI6IEFkZCBFVlANCj4gKEVudmVsb3BlKSBEaWdlc3QgaW50ZXJmYWNlDQo+IA0KPiAxKSBB Z3JlZSB3aXRoIExhc3psby4NCj4gV2UgbmVlZCBleHRlbmQgaW50ZXJuYWwgcHJvdG9jb2wvcHBp IGZvciB0aGlzIG5ldyBBUEkuDQo+IA0KPiAyKSBEbyB5b3UgaGF2ZSBhbnkgZGF0YSBvbiB0aGUg c2l6ZSBkaWZmZXJlbmNlIGJldHdlZW4gb2xkIFNIQSBpbXBsZW1lbnRhdGlvbg0KPiBvciBuZXcg TUQgaW1wbGVtZW50YXRpb24/DQo+IA0KPiBUaGFuayB5b3UNCj4gWWFvIEppZXdlbg0KPiANCj4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IExhc3psbyBFcnNlayA8bGVy c2VrQHJlZGhhdC5jb20+DQo+ID4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCAxMywgMjAyMCA1OjQ3 IFBNDQo+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBadXJjaGVyLCBDaHJpc3RvcGhlciBK DQo+ID4gPGNocmlzdG9waGVyLmouenVyY2hlckBpbnRlbC5jb20+DQo+ID4gQ2M6IFlhbywgSmll d2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFdhbmcsIEppYW4gSg0KPiA8amlhbi5qLndhbmdA aW50ZWwuY29tPjsNCj4gPiBMdSwgWGlhb3l1WCA8eGlhb3l1eC5sdUBpbnRlbC5jb20+DQo+ID4g U3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggMS8xXSBDcnlwdG9Qa2cvQmFzZUNyeXB0 TGliOiBBZGQgRVZQDQo+ID4gKEVudmVsb3BlKSBEaWdlc3QgaW50ZXJmYWNlDQo+ID4NCj4gPiBI aSBDaHJpc3RvcGhlciwNCj4gPg0KPiA+ICgrTWlrZSwNCj4gPg0KPiA+IE9uIDA4LzEzLzIwIDAz OjIwLCBadXJjaGVyLCBDaHJpc3RvcGhlciBKIHdyb3RlOg0KPiA+ID4gQlo6IGh0dHBzOi8vYnVn emlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU0NQ0KPiA+ID4NCj4gPiA+IFRo ZSBFVlAgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGluIHBsYWNlIG9mIGRpc2NyZXRlIGRpZ2Vz dCBmdW5jdGlvbg0KPiA+ID4gY2FsbHMuDQo+ID4gPg0KPiA+ID4gQ2M6IEppZXdlbiBZYW8gPGpp ZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+ID4gQ2M6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0Bp bnRlbC5jb20+DQo+ID4gPiBDYzogWGlhb3l1IEx1IDx4aWFveXV4Lmx1QGludGVsLmNvbT4NCj4g PiA+IFNpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIEogWnVyY2hlciA8Y2hyaXN0b3BoZXIuai56 dXJjaGVyQGludGVsLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gIENyeXB0b1BrZy9MaWJyYXJ5L0Jh c2VDcnlwdExpYi9CYXNlQ3J5cHRMaWIuaW5mICAgIHwgICAxICsNCj4gPiA+ICBDcnlwdG9Qa2cv TGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mICAgICB8ICAgMSArDQo+ID4gPiAg Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1J1bnRpbWVDcnlwdExpYi5pbmYgfCAgIDEg Kw0KPiA+ID4gIENyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYg ICAgIHwgICAxICsNCj4gPiA+ICBDcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi5oICAgICAgICAgICB8IDEyMiArKysrKysrKysrKw0KPiA+ID4gIENyeXB0b1BrZy9MaWJyYXJ5 L0Jhc2VDcnlwdExpYi9FdnAvQ3J5cHRFdnBNZC5jICAgIHwgMjI4DQo+ID4gKysrKysrKysrKysr KysrKysrKysNCj4gPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDM1NCBpbnNlcnRpb25zKCspDQo+ID4N Cj4gPiAoMSkgVGhpcyBwYXRjaCBleHRlbmRzIHRoZSBsaWJyYXJ5IGNsYXNzIGhlYWRlciwgYnV0 IHVwZGF0ZXMgb25seSBvbmUNCj4gPiAqc2V0KiBvZiB0aGUgdGhyZWUgbGlicmFyeSBpbnN0YW5j ZSAqc2V0cyouIFRoZSBvdGhlciB0d28gaW5zdGFuY2UNCj4gPiAqc2V0cyogYXJlOg0KPiA+DQo+ ID4gLSBCYXNlQ3J5cHRMaWJOdWxsIChqdXN0IG9uZSBpbnN0YW5jZSksIGZvciB3aGljaCBpdCBz aG91bGQgbm90IGJlIGhhcmQNCj4gPiB0byBwcm92aWRlIE51bGwgaW1wbGVtZW50YXRpb25zIG9m IHRoZSBuZXcgZnVuY3Rpb25zOw0KPiA+DQo+ID4gLSBCYXNlQ3J5cHRMaWJPblByb3RvY29sUHBp ICh0aHJlZSBpbnN0YW5jZXMgLS0gUGVpLCBEeGUsIFNtbSkuDQo+ID4NCj4gPg0KPiA+IEJhc2VD cnlwdExpYk9uUHJvdG9jb2xQcGkgaXMgYSB0b3VnaCBudXQsIGJlY2F1c2UgaXQgc2VlbXMgdG8g cmVxdWlyZQ0KPiA+IGV4dGVuZGluZzoNCj4gPg0KPiA+IC0gdGhlIGNyeXB0byBzZXJ2aWNlIGRy aXZlciBhdCBDcnlwdG9Qa2cvRHJpdmVyLywNCj4gPg0KPiA+IC0gdGhlIGludGVyZmFjZSB0byB0 aGF0IGRyaXZlciAoQ3J5cHRvUGtnL1ByaXZhdGUvUHJvdG9jb2wvQ3J5cHRvLmggLS0NCj4gPiBy ZXVzZWQgYnkgYm90aCAiQ3J5cHRvUGtnL1ByaXZhdGUvUHBpL0NyeXB0by5oIiBhbmQNCj4gPiAi Q3J5cHRvUGtnL1ByaXZhdGUvUHJvdG9jb2wvU21tQ3J5cHRvLmgiKSwNCj4gPg0KPiA+IC0gdGhl IFBDRF9DUllQVE9fU0VSVklDRV9GQU1JTFlfRU5BQkxFIHN0cnVjdHVyZSBhdA0KPiA+ICJDcnlw dG9Qa2cvSW5jbHVkZS9QY2QvUGNkQ3J5cHRvU2VydmljZUZhbWlseUVuYWJsZS5oIiwgZm9yIGNv bmZpZ3VyaW5nDQo+ID4gdGhlIGRyaXZlciwNCj4gPg0KPiA+IC0gdGhlIHZhcmlvdXMgUGNkQ3J5 cHRvU2VydmljZUZhbWlseUVuYWJsZSBzZXR0aW5ncyAvIGJ1aWxkIHByb2ZpbGVzIGluDQo+ID4g Q3J5cHRvUGtnL0NyeXB0b1BrZy5kc2MuDQo+ID4NCj4gPg0KPiA+ID4NCj4gPiA+IGRpZmYgLS1n aXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiA+ IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gPiA+ IGluZGV4IDRhYWUyYWJhOTUuLjM5NjhmMjk0MTIgMTAwNjQ0DQo+ID4gPiAtLS0gYS9DcnlwdG9Q a2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiA+ID4gKysrIGIvQ3J5 cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gPiA+IEBAIC01 MCw2ICs1MCw3IEBADQo+ID4gPiAgICBQay9DcnlwdEF1dGhlbnRpY29kZS5jDQo+ID4gPiAgICBQ ay9DcnlwdFRzLmMNCj4gPiA+ICAgIFBlbS9DcnlwdFBlbS5jDQo+ID4gPiArICBFdnAvQ3J5cHRF dnBNZC5jDQo+ID4gPg0KPiA+ID4gICAgU3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4gPiA+ICAgIFN5 c0NhbGwvVGltZXJXcmFwcGVyLmMNCj4gPiA+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFy eS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ID4gYi9DcnlwdG9Qa2cvTGlicmFyeS9C YXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ID4gPiBpbmRleCBkYzI4ZTNhMTFkLi5kMGI5 MTcxNmQwIDEwMDY0NA0KPiA+ID4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGli L1BlaUNyeXB0TGliLmluZg0KPiA+ID4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0 TGliL1BlaUNyeXB0TGliLmluZg0KPiA+ID4gQEAgLTU3LDYgKzU3LDcgQEANCj4gPiA+ICAgIFBr L0NyeXB0VHNOdWxsLmMNCj4gPiA+ICAgIFBlbS9DcnlwdFBlbU51bGwuYw0KPiA+ID4gICAgUmFu ZC9DcnlwdFJhbmROdWxsLmMNCj4gPiA+ICsgIEV2cC9DcnlwdEV2cE1kLmMNCj4gPiA+DQo+ID4g PiAgICBTeXNDYWxsL0NydFdyYXBwZXIuYw0KPiA+ID4gICAgU3lzQ2FsbC9Db25zdGFudFRpbWVD bG9jay5jDQo+ID4gPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGli L1J1bnRpbWVDcnlwdExpYi5pbmYNCj4gPiBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi9SdW50aW1lQ3J5cHRMaWIuaW5mDQo+ID4gPiBpbmRleCA1MDA1YmVlZDAyLi45ZjNhY2NkMzVi IDEwMDY0NA0KPiA+ID4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1J1bnRp bWVDcnlwdExpYi5pbmYNCj4gPiA+ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi9SdW50aW1lQ3J5cHRMaWIuaW5mDQo+ID4gPiBAQCAtNTYsNiArNTYsNyBAQA0KPiA+ID4gICAg UGsvQ3J5cHRBdXRoZW50aWNvZGVOdWxsLmMNCj4gPiA+ICAgIFBrL0NyeXB0VHNOdWxsLmMNCj4g PiA+ICAgIFBlbS9DcnlwdFBlbS5jDQo+ID4gPiArICBFdnAvQ3J5cHRFdnBNZC5jDQo+ID4gPg0K PiA+ID4gICAgU3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4gPiA+ICAgIFN5c0NhbGwvVGltZXJXcmFw cGVyLmMNCj4gPiA+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIv U21tQ3J5cHRMaWIuaW5mDQo+ID4gYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21t Q3J5cHRMaWIuaW5mDQo+ID4gPiBpbmRleCA5MWVjM2UwM2JmLi40MjA2MjNjZGM2IDEwMDY0NA0K PiA+ID4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmlu Zg0KPiA+ID4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGli LmluZg0KPiA+ID4gQEAgLTU0LDYgKzU0LDcgQEANCj4gPiA+ICAgIFBrL0NyeXB0QXV0aGVudGlj b2RlTnVsbC5jDQo+ID4gPiAgICBQay9DcnlwdFRzTnVsbC5jDQo+ID4gPiAgICBQZW0vQ3J5cHRQ ZW0uYw0KPiA+ID4gKyAgRXZwL0NyeXB0RXZwTWQuYw0KPiA+ID4NCj4gPiA+ICAgIFN5c0NhbGwv Q3J0V3JhcHBlci5jDQo+ID4gPiAgICBTeXNDYWxsL0NvbnN0YW50VGltZUNsb2NrLmMNCj4gPiA+ IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ ID4gYi9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ID4gPiBpbmRl eCBhZTliZGU5ZTM3Li5mM2JmOGFhYzBjIDEwMDY0NA0KPiA+ID4gLS0tIGEvQ3J5cHRvUGtnL0lu Y2x1ZGUvTGlicmFyeS9CYXNlQ3J5cHRMaWIuaA0KPiA+ID4gKysrIGIvQ3J5cHRvUGtnL0luY2x1 ZGUvTGlicmFyeS9CYXNlQ3J5cHRMaWIuaA0KPiA+ID4gQEAgLTEwMTIsNiArMTAxMiwxMjggQEAg SG1hY1NoYTI1NkZpbmFsICgNCj4gPiA+ICAgIE9VVCAgICAgVUlOVDggICpIbWFjVmFsdWUNCj4g PiA+ICAgICk7DQo+ID4gPg0KPiA+ID4NCj4gPiArLy89PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ID09PT09PT09PT09PT09 PT09PT09PT09DQo+ID4gPiArLy8gICAgRVZQIChFbnZlbG9wZSkgUHJpbWl0aXZlDQo+ID4gPg0K PiA+ICsvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQo+ID4gPT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiA+ICsNCj4gPiA+ ICsvKioNCj4gPiA+ICsgIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb25lIEVWUF9NRF9DVFgg Y29udGV4dCBmb3Igc3Vic2VxdWVudCBFVlBfTUQNCj4gPiB1c2UuDQo+ID4gPiArDQo+ID4gPiAr ICBAcmV0dXJuICBQb2ludGVyIHRvIHRoZSBFVlBfTURfQ1RYIGNvbnRleHQgdGhhdCBoYXMgYmVl biBpbml0aWFsaXplZC4NCj4gPiA+ICsgICAgICAgICAgIElmIHRoZSBhbGxvY2F0aW9ucyBmYWls cywgRXZwTWROZXcoKSByZXR1cm5zIE5VTEwuDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiAr Vk9JRCAqDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArRXZwTWROZXcgKA0KPiA+ID4gKyAgVk9JRA0K PiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFJlbGVhc2UgdGhlIHNw ZWNpZmllZCBFVlBfTURfQ1RYIGNvbnRleHQuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5d ICBFdnBNZENvbnRleHQgIFBvaW50ZXIgdG8gdGhlIEVWUF9NRF9DVFggY29udGV4dCB0byBiZQ0K PiA+IHJlbGVhc2VkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1ZPSUQNCj4gPiA+ICtF RklBUEkNCj4gPiA+ICtFdnBNZEZyZWUgKA0KPiA+ID4gKyAgSU4gIFZPSUQgICpFdnBNZENvbnRl eHQNCj4gPiA+ICsgICk7DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBJbml0aWFsaXpl cyB1c2VyLXN1cHBsaWVkIG1lbW9yeSBwb2ludGVkIHRvIGJ5IEV2cE1kQ29udGV4dCBhcw0KPiA+ IEVWUF9NRF9DVFgNCj4gPiA+ICsgIGNvbnRleHQgZm9yIHN1YnNlcXVlbnQgdXNlLg0KPiA+ID4g Kw0KPiA+ID4gKyAgSWYgRXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0K PiA+ID4gKyAgSWYgRGlnZXN0TmFtZSBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiA+ ICsNCj4gPiA+ICsgIEBwYXJhbVtvdXRdICAgRXZwTWRDb250ZXh0ICBQb2ludGVyIHRvIEVWUF9N RF9DVFggY29udGV4dCBiZWluZw0KPiA+IGluaXRpYWxpemVkLg0KPiA+ID4gKyAgQHBhcmFtW2lu XSAgICBEaWdlc3ROYW1lICAgIFBvaW50ZXIgdG8gdGhlIGRpZ2VzdCBuYW1lLg0KPiA+ID4gKw0K PiA+ID4gKyAgQHJldHZhbCBUUlVFICAgRVZQX01EX0NUWCBjb250ZXh0IGluaXRpYWxpemF0aW9u IHN1Y2NlZWRlZC4NCj4gPiA+ICsgIEByZXR2YWwgRkFMU0UgIEVWUF9NRF9DVFggY29udGV4dCBp bml0aWFsaXphdGlvbiBmYWlsZWQuDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArQk9PTEVB Tg0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0V2cE1kSW5pdCAoDQo+ID4gPiArICBPVVQgVk9JRCAg ICAgICAgICAqRXZwTWRDb250ZXh0LA0KPiA+ID4gKyAgSU4gIENPTlNUIENIQVI4ICAgKkRpZ2Vz dE5hbWUNCj4gPiA+ICsgICk7DQo+ID4NCj4gPiAoMikgSSBzdWdnZXN0IG1lcmdpbmcgdGhlIE5l dygpIGFuZCBJbml0KCkgZnVuY3Rpb25zIGludG8gb25lIC0tIHdlDQo+ID4gc2hvdWxkIG9ubHkg aGF2ZSBhIE5ldygpIGZ1bmN0aW9uOg0KPiA+DQo+ID4gVk9JRCAqDQo+ID4gRUZJQVBJDQo+ID4g RXZwTWROZXcgKA0KPiA+ICAgSU4gIENPTlNUIENIQVI4ICpEaWdlc3ROYW1lDQo+ID4gICApOw0K PiA+DQo+ID4gQW5kIHRoaXMgZnVuY3Rpb24gd291bGQgY29sbGVjdCB0aGUgYWN0aW9ucyBmcm9t IGJvdGggdGhlIGN1cnJlbnQgTmV3KCkNCj4gPiBhbmQgSW5pdCgpIGZ1bmN0aW9ucy4NCj4gPg0K PiA+IEknbSBwcm9wb3NpbmcgdGhpcyBiZWNhdXNlOg0KPiA+DQo+ID4gKDJhKSBJbml0KCkgaXMg bm90IHJlYWxseSB1c2VmdWwuIEluIHRoZW9yeSB3ZSBtaWdodCBiZSBhYmxlIHRvIGNhbGwNCj4g PiBJbml0KCkgcmlnaHQgYWZ0ZXIgRmluYWwoKSwgYnV0IHRoYXQgc2VlbXMgbGlrZSBhIHZlcnkg b2JzY3VyZSB1c2UgY2FzZS4NCj4gPg0KPiA+ICgyYikgTmV3KCkgaXMgdXNlbGVzcyB3aXRob3V0 IEluaXQoKTsgaXQgbWFrZXMgbm8gc2Vuc2UgZm9yIGEgY29udGV4dCB0bw0KPiA+IGV4aXN0LCBz b21ld2hlcmUgaW4gdGhlIGVkazIgY29kZWJhc2UsICpiZXR3ZWVuKiBOZXcoKSBhbmQgSW5pdCgp Lg0KPiA+DQo+ID4gKDJjKSBJbml0KCkgdXNlZCB0byBlbmNvdXJhZ2UgYSB1c2FnZSBwYXR0ZXJu IChhdCBsZWFzdCB3aXRoIEhNQUNzKQ0KPiA+IHdoZXJlIHRoZSBjYWxsZXIgd291bGQgYWxsb2Nh dGUgaXRzIG93biBjb250ZXh0IHN0b3JhZ2UgZmlyc3QuIFRoaXMNCj4gPiB1c2FnZSB3YXMgZnJh dWdodCB3aXRoIGEgbWVtb3J5IGxlYWsNCj4gPiA8aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUu b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk1I2M3Pi4gVGhpcyBpc24ndCBhDQo+ID4gcHJhY3RpY2Fs IHByb2JsZW0gaW4gdGhpcyBjYXNlLCBiZWNhdXNlIHdlJ3JlIC0tIGNvcnJlY3RseSAtLSBub3QN Cj4gPiBvZmZlcmluZyBhIEdldENvbnRleHRTaXplKCkgaW4gdGhpcyBwYXRjaCwgYnV0IEluaXQo KSBpcyBzdGlsbCBhIHZlc3RpZ2UNCj4gPiBvZiBhIGJhZCBwYXR0ZXJuLg0KPiA+DQo+ID4gQmFz aWNhbGx5IGEgY2FsbGVyIHNob3VsZCBnbyB0aHJvdWdoIE5ldyAtPiBVcGRhdGVbbl0gLT4gRmlu YWwgLT4gRnJlZSwNCj4gPiBwb3NzaWJseSBjYWxsaW5nIER1cGxpY2F0ZSBiZWZvcmUgb3IgYWZ0 ZXIgVXBkYXRlLg0KPiA+DQo+ID4gLi4uIEkgY291bGQgZXZlbiBlbnRlcnRhaW4gbWVyZ2luZyAi RmluYWwiIGludG8gIkZyZWUiLCBhcyB0aGVyZSBzZWVtcw0KPiA+IHRvIGJlIG5vIHBvaW50IGZv ciBhIGNvbnRleHQgdG8gZXhpc3QsIGluIGVkazIsIGJldHdlZW4gRmluYWwgYW5kIEZyZWUuDQo+ ID4gVGhhdCB3b3VsZCBtYWtlIGZvciBOZXcgLT4gVXBkYXRlW25dIC0+IEZyZWUuDQo+ID4NCj4g PiBJIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHdvdWxkIGRpdmVyZ2UgZnJvbSB0aGUgY3VycmVudCBt b2RlbCBvZiB0aGUNCj4gPiAiZGlnZXN0IGZ1bmN0aW9uIGZhbWlseSIsIGJ1dCBJIHNlZSBpdCBh cyBhbiBpbXByb3ZlbWVudC4NCj4gPg0KPiA+DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiAr ICBNYWtlcyBhIGNvcHkgb2YgYW4gZXhpc3RpbmcgRVZQX01EIGNvbnRleHQuDQo+ID4gPiArDQo+ ID4gPiArICBJZiBFdnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4g PiArICBJZiBOZXdFdnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4g PiArDQo+ID4gPiArICBAcGFyYW1baW5dICBFdnBNZENvbnRleHQgICAgIFBvaW50ZXIgdG8gRVZQ X01EIGNvbnRleHQgYmVpbmcgY29waWVkLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gTmV3RXZwTWRD b250ZXh0ICBQb2ludGVyIHRvIG5ldyBFVlBfTUQgY29udGV4dC4NCj4gPiA+ICsNCj4gPiA+ICsg IEByZXR2YWwgVFJVRSAgIEVWUF9NRCBjb250ZXh0IGNvcHkgc3VjY2VlZGVkLg0KPiA+ID4gKyAg QHJldHZhbCBGQUxTRSAgRVZQX01EIGNvbnRleHQgY29weSBmYWlsZWQuDQo+ID4gPiArDQo+ID4g PiArKiovDQo+ID4gPiArQk9PTEVBTg0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0V2cE1kRHVwbGlj YXRlICgNCj4gPiA+ICsgIElOICBDT05TVCBWT0lEICAgICpFdnBNZENvbnRleHQsDQo+ID4gPiAr ICBPVVQgVk9JRCAgICAgICAgICAqTmV3RXZwTWRDb250ZXh0DQo+ID4gPiArICApOw0KPiA+ID4g Kw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgRGlnZXN0cyB0aGUgaW5wdXQgZGF0YSBhbmQgdXBkYXRl cyBFVlBfTUQgY29udGV4dC4NCj4gPiA+ICsNCj4gPiA+ICsgIFRoaXMgZnVuY3Rpb24gcGVyZm9y bXMgRVZQIGRpZ2VzdCBvbiBhIGRhdGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQNCj4gc2l6ZS4N Cj4gPiA+ICsgIEl0IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gY29tcHV0ZSB0aGUg ZGlnZXN0IG9mIGxvbmcgb3INCj4gPiBkaXNjb250aW51b3VzIGRhdGEgc3RyZWFtcy4NCj4gPiA+ ICsgIEVWUF9NRCBjb250ZXh0IHNob3VsZCBiZSBhbHJlYWR5IGNvcnJlY3RseSBpbml0aWFsaXpl ZCBieSBFdnBNZEluaXQoKSwNCj4gYW5kDQo+ID4gc2hvdWxkIG5vdA0KPiA+ID4gKyAgYmUgZmlu YWxpemVkIGJ5IEV2cE1kRmluYWwoKS4gQmVoYXZpb3Igd2l0aCBpbnZhbGlkIGNvbnRleHQgaXMN Cj4gdW5kZWZpbmVkLg0KPiA+ID4gKw0KPiA+ID4gKyAgSWYgRXZwTWRDb250ZXh0IGlzIE5VTEws IHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBF dnBNZENvbnRleHQgICAgICAgUG9pbnRlciB0byB0aGUgRVZQX01EIGNvbnRleHQuDQo+ID4gPiAr ICBAcGFyYW1baW5dICAgICAgIERhdGEgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZm ZXIgY29udGFpbmluZw0KPiB0aGUgZGF0YSB0byBiZQ0KPiA+IGRpZ2VzdGVkLg0KPiA+ID4gKyAg QHBhcmFtW2luXSAgICAgICBEYXRhU2l6ZSAgICAgICAgICAgU2l6ZSBvZiBEYXRhIGJ1ZmZlciBp biBieXRlcy4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgVFJVRSAgIEVWUCBkYXRhIGRpZ2Vz dCBzdWNjZWVkZWQuDQo+ID4gPiArICBAcmV0dmFsIEZBTFNFICBFVlAgZGF0YSBkaWdlc3QgZmFp bGVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK0JPT0xFQU4NCj4gPiA+ICtFRklBUEkN Cj4gPiA+ICtFdnBNZFVwZGF0ZSAoDQo+ID4gPiArICBJTiBPVVQgIFZPSUQgICAgICAgICpFdnBN ZENvbnRleHQsDQo+ID4gPiArICBJTiAgICAgIENPTlNUIFZPSUQgICpEYXRhLA0KPiA+ID4gKyAg SU4gICAgICBVSU5UTiAgICAgICBEYXRhU2l6ZQ0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ ICsvKioNCj4gPiA+ICsgIENvbXBsZXRlcyBjb21wdXRhdGlvbiBvZiB0aGUgRVZQIGRpZ2VzdCB2 YWx1ZS4NCj4gPiA+ICsNCj4gPiA+ICsgIFRoaXMgZnVuY3Rpb24gY29tcGxldGVzIEVWUCBoYXNo IGNvbXB1dGF0aW9uIGFuZCByZXRyaWV2ZXMgdGhlIGRpZ2VzdA0KPiA+IHZhbHVlIGludG8NCj4g PiA+ICsgIHRoZSBzcGVjaWZpZWQgbWVtb3J5LiBBZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVu IGNhbGxlZCwgdGhlIEVWUA0KPiBjb250ZXh0DQo+ID4gY2Fubm90DQo+ID4gPiArICBiZSB1c2Vk IGFnYWluLg0KPiA+ID4gKyAgRVZQIGNvbnRleHQgc2hvdWxkIGJlIGFscmVhZHkgY29ycmVjdGx5 IGluaXRpYWxpemVkIGJ5IEV2cE1kSW5pdCgpLA0KPiBhbmQNCj4gPiBzaG91bGQNCj4gPiA+ICsg IG5vdCBiZSBmaW5hbGl6ZWQgYnkgRXZwTWRGaW5hbCgpLiBCZWhhdmlvciB3aXRoIGludmFsaWQg RVZQIGNvbnRleHQgaXMNCj4gPiB1bmRlZmluZWQuDQo+ID4gPiArDQo+ID4gPiArICBJZiBFdnBN ZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gPiArICBJZiBEaWdlc3Qg aXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW4s IG91dF0gIEV2cE1kQ29udGV4dCAgIFBvaW50ZXIgdG8gdGhlIEVWUCBjb250ZXh0Lg0KPiA+ID4g KyAgQHBhcmFtW291dF0gICAgICBEaWdlc3QgICAgICAgICBQb2ludGVyIHRvIGEgYnVmZmVyIHRo YXQgcmVjZWl2ZXMgdGhlDQo+IEVWUCBkaWdlc3QNCj4gPiB2YWx1ZS4NCj4gPiA+ICsNCj4gPiA+ ICsgIEByZXR2YWwgVFJVRSAgIEVWUCBkaWdlc3QgY29tcHV0YXRpb24gc3VjY2VlZGVkLg0KPiA+ ID4gKyAgQHJldHZhbCBGQUxTRSAgRVZQIGRpZ2VzdCBjb21wdXRhdGlvbiBmYWlsZWQuDQo+ID4g PiArDQo+ID4gPiArKiovDQo+ID4gPiArQk9PTEVBTg0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0V2 cE1kRmluYWwgKA0KPiA+ID4gKyAgSU4gT1VUICBWT0lEICAgKkV2cE1kQ29udGV4dCwNCj4gPiA+ ICsgIE9VVCAgICAgVUlOVDggICpEaWdlc3RWYWx1ZQ0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4g PiA+DQo+ID4gLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCj4gPiA9PT09PT09PT09PT09PT09PT09PT09DQo+ID4gPiAgLy8g ICAgU3ltbWV0cmljIENyeXB0b2dyYXBoeSBQcmltaXRpdmUNCj4gPiA+DQo+ID4gLy89PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Cj4gPiA9PT09PT09PT09PT09PT09PT09PT09DQo+ID4gPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtn L0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9DcnlwdEV2cE1kLmMNCj4gPiBiL0NyeXB0b1BrZy9M aWJyYXJ5L0Jhc2VDcnlwdExpYi9FdnAvQ3J5cHRFdnBNZC5jDQo+ID4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uYTM4YzMwMGViOA0KPiA+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ID4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9D cnlwdEV2cE1kLmMNCj4gPiA+IEBAIC0wLDAgKzEsMjI4IEBADQo+ID4gPiArLyoqIEBmaWxlDQo+ ID4gPiArICBFVlAgTUQgV3JhcHBlciBJbXBsZW1lbnRhdGlvbiBmb3IgT3BlblNTTC4NCj4gPiA+ ICsNCj4gPiA+ICtDb3B5cmlnaHQgKGMpIDIwMjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gKw0KPiA+ID4gKyNpbmNs dWRlICJJbnRlcm5hbENyeXB0TGliLmgiDQo+ID4gPiArI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVz IG9uZSBFVlBfTURfQ1RYIGNvbnRleHQgZm9yIHN1YnNlcXVlbnQgRVZQX01EDQo+ID4gdXNlLg0K PiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiAgUG9pbnRlciB0byB0aGUgRVZQX01EX0NUWCBjb250 ZXh0IHRoYXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuDQo+ID4gPiArICAgICAgICAgICBJZiB0aGUg YWxsb2NhdGlvbnMgZmFpbHMsIEV2cE1kTmV3KCkgcmV0dXJucyBOVUxMLg0KPiA+ID4gKw0KPiA+ ID4gKyoqLw0KPiA+ID4gK1ZPSUQgKg0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0V2cE1kTmV3ICgN Cj4gPiA+ICsgIFZPSUQNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICAvLw0KPiA+ID4g KyAgLy8gQWxsb2NhdGVzICYgSW5pdGlhbGl6ZXMgRVZQX01EX0NUWCBDb250ZXh0IGJ5IE9wZW5T U0wNCj4gPiBFVlBfTURfQ1RYX25ldygpDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgcmV0dXJuIChW T0lEICopIEVWUF9NRF9DVFhfbmV3ICgpOw0KPiA+ID4gK30NCj4gPg0KPiA+ICgzKSBUaGlzIChW T0lEKikgY2FzdCBpcyBub3QgbmVlZGVkLCBhbmQgbWFrZXMgdGhlIGNvZGUgaGFyZGVyIHRvIHJl YWQsDQo+ID4gaW4gbXkgb3Bpbmlvbi4NCj4gPg0KPiA+DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ ID4gPiArICBSZWxlYXNlIHRoZSBzcGVjaWZpZWQgRVZQX01EX0NUWCBjb250ZXh0Lg0KPiA+ID4g Kw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgRXZwTWRDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBFVlBf TURfQ1RYIGNvbnRleHQgdG8gYmUNCj4gPiByZWxlYXNlZC4NCj4gPiA+ICsNCj4gPiA+ICsqKi8N Cj4gPiA+ICtWT0lEDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArRXZwTWRGcmVlICgNCj4gPiA+ICsg IElOICBWT0lEICAqRXZwTWRDb250ZXh0DQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAg Ly8NCj4gPiA+ICsgIC8vIEZyZWUgT3BlblNTTCBFVlBfTURfQ1RYIENvbnRleHQNCj4gPiA+ICsg IC8vDQo+ID4gPiArICBFVlBfTURfQ1RYX2ZyZWUgKChFVlBfTURfQ1RYICopRXZwTWRDb250ZXh0 KTsNCj4gPiA+ICt9DQo+ID4NCj4gPiAoNCkgU2FtZSBhcyAoMyksIGp1c3QgaW4gdGhlIHJldmVy c2UgZGlyZWN0aW9uIC0tIEkgc3VnZ2VzdCBkcm9wcGluZyB0aGUNCj4gPiAoRVZQX01EX0NUWCAq KSBjYXN0Lg0KPiA+DQo+ID4gKFBvaW50cyAoMykgYW5kICg0KSBhcHBseSB0byBzb21lIG1vcmUg bG9jYXRpb25zIGluIHRoaXMgcGF0Y2g7IGlmIHlvdQ0KPiA+IGFncmVlIHdpdGggbXkgY29tbWVu dHMsIHBsZWFzZSByZXZpZXcgdGhlIHJlc3QgZm9yIHRoZXNlIHN1cGVyZmx1b3VzDQo+IGNhc3Rz LikNCj4gPg0KPiA+DQo+ID4gKDUpIElmIHBvc3NpYmxlLCBJJ2Qgc3VnZ2VzdCBhcHBlbmRpbmcg YXQgbGVhc3Qgb25lIG90aGVyIHBhdGNoIHRvIHRoaXMNCj4gPiBzZXJpZXMsIGZvciBwdXR0aW5n IHRoZSBuZXcgaW50ZXJmYWNlcyB0byB1c2UgYXQgb25jZS4gV2Ugc2hvdWxkIHBpY2sgYQ0KPiA+ IGxpYnJhcnkgb3IgZHJpdmVyIGluIGVkazIgdGhhdCBjdXJyZW50bHkgY29uc3VtZXMgU2hhMjU2 SW5pdCgpIGFuZCBpdHMNCj4gPiBmcmllbmRzLCBhbmQgY29udmVydCB0aG9zZSBjYWxscyB0byBF dnBNZCooKS4NCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBMYXN6bG8NCj4gPg0KPiA+ID4gKw0KPiA+ ID4gKy8qKg0KPiA+ID4gKyAgSW5pdGlhbGl6ZXMgdXNlci1zdXBwbGllZCBtZW1vcnkgcG9pbnRl ZCB0byBieSBFdnBNZENvbnRleHQgYXMNCj4gPiBFVlBfTURfQ1RYDQo+ID4gPiArICBjb250ZXh0 IGZvciBzdWJzZXF1ZW50IHVzZS4NCj4gPiA+ICsNCj4gPiA+ICsgIElmIEV2cE1kQ29udGV4dCBp cyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiA+ICsgIElmIERpZ2VzdE5hbWUgaXMgTlVM TCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1bb3V0XSAgIEV2 cE1kQ29udGV4dCAgUG9pbnRlciB0byBFVlBfTURfQ1RYIGNvbnRleHQgYmVpbmcNCj4gPiBpbml0 aWFsaXplZC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gICAgRGlnZXN0TmFtZSAgICBQb2ludGVyIHRv IHRoZSBkaWdlc3QgbmFtZS4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgVFJVRSAgIEVWUF9N RF9DVFggY29udGV4dCBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQuDQo+ID4gPiArICBAcmV0dmFs IEZBTFNFICBFVlBfTURfQ1RYIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLg0KPiA+ID4g Kw0KPiA+ID4gKyoqLw0KPiA+ID4gK0JPT0xFQU4NCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtFdnBN ZEluaXQgKA0KPiA+ID4gKyAgT1VUIFZPSUQgICAgICAgICAgKkV2cE1kQ29udGV4dCwNCj4gPiA+ ICsgIElOICBDT05TVCBDSEFSOCAgICpEaWdlc3ROYW1lDQo+ID4gPiArICApDQo+ID4gPiArew0K PiA+ID4gKyAgQ09OU1QgRVZQX01EICAgICpEaWdlc3Q7DQo+ID4gPiArDQo+ID4gPiArICAvLw0K PiA+ID4gKyAgLy8gQ2hlY2sgaW5wdXQgcGFyYW1ldGVycy4NCj4gPiA+ICsgIC8vDQo+ID4gPiAr ICBpZiAoRXZwTWRDb250ZXh0ID09IE5VTEwgfHwgRGlnZXN0TmFtZSA9PSBOVUxMKSB7DQo+ID4g PiArICAgIHJldHVybiBGQUxTRTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ ID4gPiArICAvLyBPcGVuU1NMIEVWUF9NRCBDb250ZXh0IEluaXRpYWxpemF0aW9uDQo+ID4gPiAr ICAvLw0KPiA+ID4gKyAgaWYgKEVWUF9NRF9DVFhfcmVzZXQgKChFVlBfTURfQ1RYICopRXZwTWRD b250ZXh0KSAhPSAxKSB7DQo+ID4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiA+ICsgIH0NCj4g PiA+ICsNCj4gPiA+ICsgIERpZ2VzdCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lIChEaWdlc3ROYW1l KTsNCj4gPiA+ICsgIGlmIChEaWdlc3QgPT0gTlVMTCkgew0KPiA+ID4gKyAgICByZXR1cm4gRkFM U0U7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBpZiAoRVZQX0RpZ2VzdEluaXRfZXgg KChFVlBfTURfQ1RYICopRXZwTWRDb250ZXh0LCBEaWdlc3QsIE5VTEwpICE9IDEpDQo+IHsNCj4g PiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0 dXJuIFRSVUU7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgTWFrZXMg YSBjb3B5IG9mIGFuIGV4aXN0aW5nIEVWUF9NRCBjb250ZXh0Lg0KPiA+ID4gKw0KPiA+ID4gKyAg SWYgRXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ID4gKyAgSWYg TmV3RXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ID4gKw0KPiA+ ID4gKyAgQHBhcmFtW2luXSAgRXZwTWRDb250ZXh0ICAgICBQb2ludGVyIHRvIEVWUF9NRCBjb250 ZXh0IGJlaW5nIGNvcGllZC4NCj4gPiA+ICsgIEBwYXJhbVtvdXRdIE5ld0V2cE1kQ29udGV4dCAg UG9pbnRlciB0byBuZXcgRVZQX01EIGNvbnRleHQuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFs IFRSVUUgICBFVlBfTUQgY29udGV4dCBjb3B5IHN1Y2NlZWRlZC4NCj4gPiA+ICsgIEByZXR2YWwg RkFMU0UgIEVWUF9NRCBjb250ZXh0IGNvcHkgZmFpbGVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0K PiA+ID4gK0JPT0xFQU4NCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtFdnBNZER1cGxpY2F0ZSAoDQo+ ID4gPiArICBJTiAgQ09OU1QgVk9JRCAgICAqRXZwTWRDb250ZXh0LA0KPiA+ID4gKyAgT1VUIFZP SUQgICAgICAgICAgKk5ld0V2cE1kQ29udGV4dA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ ICsgIC8vDQo+ID4gPiArICAvLyBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzLg0KPiA+ID4gKyAgLy8N Cj4gPiA+ICsgIGlmIChFdnBNZENvbnRleHQgPT0gTlVMTCB8fCBOZXdFdnBNZENvbnRleHQgPT0g TlVMTCkgew0KPiA+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICBpZiAoRVZQX01EX0NUWF9jb3B5ICgoRVZQX01EX0NUWCAqKU5ld0V2cE1kQ29udGV4 dCwgKEVWUF9NRF9DVFgNCj4gPiAqKUV2cE1kQ29udGV4dCkgIT0gMSkgew0KPiA+ID4gKyAgICBy ZXR1cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gVFJVRTsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBEaWdlc3RzIHRoZSBpbnB1 dCBkYXRhIGFuZCB1cGRhdGVzIEVWUF9NRCBjb250ZXh0Lg0KPiA+ID4gKw0KPiA+ID4gKyAgVGhp cyBmdW5jdGlvbiBwZXJmb3JtcyBFVlAgZGlnZXN0IG9uIGEgZGF0YSBidWZmZXIgb2YgdGhlIHNw ZWNpZmllZA0KPiBzaXplLg0KPiA+ID4gKyAgSXQgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1l cyB0byBjb21wdXRlIHRoZSBkaWdlc3Qgb2YgbG9uZyBvcg0KPiA+IGRpc2NvbnRpbnVvdXMgZGF0 YSBzdHJlYW1zLg0KPiA+ID4gKyAgRVZQX01EIGNvbnRleHQgc2hvdWxkIGJlIGFscmVhZHkgY29y cmVjdGx5IGluaXRpYWxpemVkIGJ5IEV2cE1kSW5pdCgpLA0KPiBhbmQNCj4gPiBzaG91bGQgbm90 DQo+ID4gPiArICBiZSBmaW5hbGl6ZWQgYnkgRXZwTWRGaW5hbCgpLiBCZWhhdmlvciB3aXRoIGlu dmFsaWQgY29udGV4dCBpcw0KPiB1bmRlZmluZWQuDQo+ID4gPiArDQo+ID4gPiArICBJZiBFdnBN ZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gPiArDQo+ID4gPiArICBA cGFyYW1baW4sIG91dF0gIEV2cE1kQ29udGV4dCAgICAgICBQb2ludGVyIHRvIHRoZSBFVlBfTUQg Y29udGV4dC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgRGF0YSAgICAgICAgICAgICAgIFBv aW50ZXIgdG8gdGhlIGJ1ZmZlciBjb250YWluaW5nDQo+IHRoZSBkYXRhIHRvIGJlDQo+ID4gZGln ZXN0ZWQuDQo+ID4gPiArICBAcGFyYW1baW5dICAgICAgIERhdGFTaXplICAgICAgICAgICBTaXpl IG9mIERhdGEgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBUUlVF ICAgRVZQIGRhdGEgZGlnZXN0IHN1Y2NlZWRlZC4NCj4gPiA+ICsgIEByZXR2YWwgRkFMU0UgIEVW UCBkYXRhIGRpZ2VzdCBmYWlsZWQuDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArQk9PTEVB Tg0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0V2cE1kVXBkYXRlICgNCj4gPiA+ICsgIElOIE9VVCAg Vk9JRCAgICAgICAgKkV2cE1kQ29udGV4dCwNCj4gPiA+ICsgIElOICAgICAgQ09OU1QgVk9JRCAg KkRhdGEsDQo+ID4gPiArICBJTiAgICAgIFVJTlROICAgICAgIERhdGFTaXplDQo+ID4gPiArICAp DQo+ID4gPiArew0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIENoZWNrIGlucHV0IHBhcmFtZXRl cnMuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgaWYgKEV2cE1kQ29udGV4dCA9PSBOVUxMKSB7DQo+ ID4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8v DQo+ID4gPiArICAvLyBDaGVjayBpbnZhbGlkIHBhcmFtZXRlcnMsIGluIGNhc2Ugb25seSBEYXRh TGVuZ3RoIHdhcyBjaGVja2VkIGluDQo+ID4gT3BlblNTTA0KPiA+ID4gKyAgLy8NCj4gPiA+ICsg IGlmIChEYXRhID09IE5VTEwgJiYgRGF0YVNpemUgIT0gMCkgew0KPiA+ID4gKyAgICByZXR1cm4g RkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gT3Bl blNTTCBFVlAgZGlnZXN0IHVwZGF0ZQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIGlmIChFVlBfRGln ZXN0VXBkYXRlICgoRVZQX01EX0NUWCAqKUV2cE1kQ29udGV4dCwgRGF0YSwgRGF0YVNpemUpICE9 DQo+IDEpDQo+ID4gew0KPiA+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4g PiArDQo+ID4gPiArICByZXR1cm4gVFJVRTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoq DQo+ID4gPiArICBDb21wbGV0ZXMgY29tcHV0YXRpb24gb2YgdGhlIEVWUCBkaWdlc3QgdmFsdWUu DQo+ID4gPiArDQo+ID4gPiArICBUaGlzIGZ1bmN0aW9uIGNvbXBsZXRlcyBFVlAgaGFzaCBjb21w dXRhdGlvbiBhbmQgcmV0cmlldmVzIHRoZSBkaWdlc3QNCj4gPiB2YWx1ZSBpbnRvDQo+ID4gPiAr ICB0aGUgc3BlY2lmaWVkIG1lbW9yeS4gQWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxs ZWQsIHRoZSBFVlANCj4gY29udGV4dA0KPiA+IGNhbm5vdA0KPiA+ID4gKyAgYmUgdXNlZCBhZ2Fp bi4NCj4gPiA+ICsgIEVWUCBjb250ZXh0IHNob3VsZCBiZSBhbHJlYWR5IGNvcnJlY3RseSBpbml0 aWFsaXplZCBieSBFdnBNZEluaXQoKSwNCj4gYW5kDQo+ID4gc2hvdWxkDQo+ID4gPiArICBub3Qg YmUgZmluYWxpemVkIGJ5IEV2cE1kRmluYWwoKS4gQmVoYXZpb3Igd2l0aCBpbnZhbGlkIEVWUCBj b250ZXh0IGlzDQo+ID4gdW5kZWZpbmVkLg0KPiA+ID4gKw0KPiA+ID4gKyAgSWYgRXZwTWRDb250 ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ID4gKyAgSWYgRGlnZXN0IGlzIE5V TEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luLCBvdXRd ICBFdnBNZENvbnRleHQgICBQb2ludGVyIHRvIHRoZSBFVlAgY29udGV4dC4NCj4gPiA+ICsgIEBw YXJhbVtvdXRdICAgICAgRGlnZXN0ICAgICAgICAgUG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IHJl Y2VpdmVzIHRoZQ0KPiBFVlAgZGlnZXN0DQo+ID4gdmFsdWUuDQo+ID4gPiArDQo+ID4gPiArICBA cmV0dmFsIFRSVUUgICBFVlAgZGlnZXN0IGNvbXB1dGF0aW9uIHN1Y2NlZWRlZC4NCj4gPiA+ICsg IEByZXR2YWwgRkFMU0UgIEVWUCBkaWdlc3QgY29tcHV0YXRpb24gZmFpbGVkLg0KPiA+ID4gKw0K PiA+ID4gKyoqLw0KPiA+ID4gK0JPT0xFQU4NCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtFdnBNZEZp bmFsICgNCj4gPiA+ICsgIElOIE9VVCAgVk9JRCAgICpFdnBNZENvbnRleHQsDQo+ID4gPiArICBP VVQgICAgIFVJTlQ4ICAqRGlnZXN0VmFsdWUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiAr ICBVSU5UMzIgIExlbmd0aDsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBDaGVj ayBpbnB1dCBwYXJhbWV0ZXJzLg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIGlmIChFdnBNZENvbnRl eHQgPT0gTlVMTCB8fCBEaWdlc3RWYWx1ZSA9PSBOVUxMKSB7DQo+ID4gPiArICAgIHJldHVybiBG QUxTRTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBPcGVu U1NMIEVWUCBkaWdlc3QgZmluYWxpemF0aW9uDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgaWYgKEVW UF9EaWdlc3RGaW5hbF9leCAoKEVWUF9NRF9DVFggKilFdnBNZENvbnRleHQsIERpZ2VzdFZhbHVl LA0KPiA+ICZMZW5ndGgpICE9IDEpIHsNCj4gPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKyAgaWYgKEVWUF9NRF9DVFhfcmVzZXQgKChFVlBfTURfQ1RYICopRXZwTWRD b250ZXh0KSAhPSAxKSB7DQo+ID4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiA+ICsgIH0NCj4g PiA+ICsNCj4gPiA+ICsgIHJldHVybiBUUlVFOw0KPiA+ID4gK30NCj4gPiA+DQoNCg==