From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web08.4115.1609910911179600326 for ; Tue, 05 Jan 2021 21:28:31 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=Cq5wpORO; spf=pass (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=0640cd062b=abner.chang@hpe.com) Received: from pps.filterd (m0134422.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 1065SUxQ013912; Wed, 6 Jan 2021 05:28:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=NUmVrfgwn84prcBSqTABQEOwMloudFeo8I5nOSeNtMA=; b=Cq5wpORO9l5LdjWz2j7Douu8nf/VABOKwf8PDMk2rRl+ee1Sy8RLWlRHX4hH0hXUlBwV RncdkYq2Ukx2Wgz6QadU7+AOpDyYCrPbiWSfEQ0NOyPme3aIn0vWYWldIcWfjmF53Rgp IC1jS4XF2qUArD/ut/IkixrwW0LEBnG2rmoWHyuczbhM8ZsGxb8NDz5Tbl8QDDxuCMbc sVbi2E6UWdv0z5ULYb1nWw9GFEiqITd4KpUOqJN8QEQPLeUWEKxJ2NyerrNWW9ncEALg 7fCanCaLJgRn7cRZnzCWV2Fpr5A3mJx2ahzd8GxRHWPcI8I81DIbAVzVDG+j8fnpyal6 Jw== Received: from g4t3426.houston.hpe.com (g4t3426.houston.hpe.com [15.241.140.75]) by mx0b-002e3701.pphosted.com with ESMTP id 35vw093d5a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 06 Jan 2021 05:28:29 +0000 Received: from G1W8106.americas.hpqcorp.net (g1w8106.austin.hp.com [16.193.72.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3426.houston.hpe.com (Postfix) with ESMTPS id 19C3860; Wed, 6 Jan 2021 05:28:28 +0000 (UTC) Received: from G9W8670.americas.hpqcorp.net (16.220.49.29) by G1W8106.americas.hpqcorp.net (16.193.72.61) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 6 Jan 2021 05:28:24 +0000 Received: from G4W10205.americas.hpqcorp.net (2002:10cf:520f::10cf:520f) by G9W8670.americas.hpqcorp.net (2002:10dc:311d::10dc:311d) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 6 Jan 2021 05:28:24 +0000 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (15.241.52.13) by G4W10205.americas.hpqcorp.net (16.207.82.15) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 6 Jan 2021 05:28:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mEW+8TxqkaqgS/482xS4hyogpS50xZe4DkH04ETDxz8nab5X8sGsyHQ6wJFvyjfRRTOjSFfb+alkJIpTL3D8PY3MrMX6aszNnkQ8aSa7CxlhMV9Kv8CEY/QAczaL7zePKNRAjkjztLHMeHOcLF5efeDwNTNThhe2cXPs54LkYQn+KfZgPTnuYVNV0w7puFPP38inG1GGl1dHKTYntDujulwIAb2PRmDiCgYKLkd68IKyeYrr14qPXi2RFJxJiPKCeW/3QoeS8yIxDZj4c6Md7AX18YF/TNVtZ5NtrzJxsTTWj+ofN9A6L4s4A+gmM5RJQY2Ov/Iw8EL23LXTMul+QQ== 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=NUmVrfgwn84prcBSqTABQEOwMloudFeo8I5nOSeNtMA=; b=kVRxgQMbirUUygB9Qi4kP62cEjFCayFEsoLffGTg2DuY7cnYb3TmUk6WPYYVVV0X61W/kDDVkKxcoGsNSakQVcyv/EIiKprIeI8ErFMiq6Bo439iSO0HGtvW6rX19zor1kcDymLWBVgAIp4v+eQBRIILAIyRnxK86p77MorPb3X6B+hVwTfZPyyittHOozwTvIJFWO2sxq9cMrRTjkCLBqqZfrEP4jPkdCOcGfsZKsoGruevCMdN39mGmb+nzBRtEloJtW+Fvol5O0GqOM9kAZcBb/5RslzStPFJpCWc94IN8lq69DjZhQioopBuAeshdLbgxgx9WVwMbxBSbs92JA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0421.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Wed, 6 Jan 2021 05:28:22 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e%10]) with mapi id 15.20.3721.024; Wed, 6 Jan 2021 05:28:22 +0000 From: "Abner Chang" To: "Rabeda, Maciej" , "devel@edk2.groups.io" CC: Jiaxin Wu , Siyuan Fu , Fan Wang , Jiewen Yao , "Wang, Nickle (HPS SW)" , "O'Hanley, Peter (EXL)" Subject: Re: [edk2-devel] [PATCH] NetworkPkg/DxeHttpLib: Migrate HTTP header manipulation APIs Thread-Topic: [edk2-devel] [PATCH] NetworkPkg/DxeHttpLib: Migrate HTTP header manipulation APIs Thread-Index: AQHW43Hnh3wG8Szk2Ui+gGq3/bdr5aoaERag Date: Wed, 6 Jan 2021 05:28:22 +0000 Message-ID: References: <20201218023931.20445-1-abner.chang@hpe.com> <34fdd782-b2b7-d64d-8852-9a792db3c023@linux.intel.com> In-Reply-To: <34fdd782-b2b7-d64d-8852-9a792db3c023@linux.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: linux.intel.com; dkim=none (message not signed) header.d=none;linux.intel.com; dmarc=none action=none header.from=hpe.com; x-originating-ip: [165.225.116.159] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 6ed1c1a8-9922-4ee2-d69a-08d8b203e26e x-ms-traffictypediagnostic: CS1PR8401MB0421: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: CZ/qjriUNSCxCsMPx9jbFZCS9Mzo+fjhT+6C+4+vqlxyPEDFwweZda5gAnhLRXqGnaGRyK6+G1PNiX8lM2okl4bQD6HkNrJLSgndfYNunzoRPiFQ0sKjXny9Rjx3TuD8omUyUASm/IGiexU8W6gBCuAa4EtJZIwveTJChDFS3WxDUD1G9w9Dl5GeLJMU1lCCZWJz6xCLmwvoMOdPgKPC3U1eAkp/3mI+sWd534UnhifThmWfGjH1FV+RXn5WdV5D9gtHNE2wVkLVX4567YfP64g8BSsSG0+ZPjS2zotRsgFjAw/7hSyIZCnsIoor5WAjlXd2BkcHclxJuA6jRChh/IZn0lMe3pLK56a7iX1uKF6xBdhL/N3JjnA2RiGsHWIMzYx97ECqh1IEBIuSToeZdQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(136003)(346002)(396003)(376002)(366004)(39860400002)(55016002)(186003)(66446008)(71200400001)(4326008)(2906002)(52536014)(26005)(7696005)(9686003)(86362001)(478600001)(66946007)(8676002)(316002)(66556008)(66476007)(64756008)(54906003)(55236004)(53546011)(110136005)(83380400001)(30864003)(8936002)(76116006)(33656002)(6506007)(5660300002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?RFV2MGlob1d4WC9JSVZ0TEN1UDNEUWJxM2FmUERuSmdlaSt4ZlEzazV0dDgw?= =?utf-8?B?UDNJVjQramhhNDZlKy9sREd5dU5tK3B5WEVQNEMra0lzNzFDSC9mK0FvQys5?= =?utf-8?B?R1ZWVHFxRnZNc1Q3Q05QNmwybTZ6eGduRlNLemFWYW9Dak9LcWNxc21rdzE5?= =?utf-8?B?MEFuakd4Qm44M1VmRGdGUVRtdkVVZnY0QmtyRGNMV2hIU1V5V1k4VVRBT0N3?= =?utf-8?B?bjRBazF2SXJTa3J5K2hhUkx6eDNvZEF1amQzR1dwd2drRGMxSDZPeDdzZTBR?= =?utf-8?B?ZE5OYXpieStvRVlJUDRaV0JzaENQU29YT2JiaXpJRE5KL2l4dlZpaU4zYk5w?= =?utf-8?B?UUdnN0g4eEJraUVQNGViZk51bnRXT28zaEMycGMwQ3R2aGxpZld2UGNhcUtu?= =?utf-8?B?VC9aSWxJVi8wWkZXUm5jNTJjU053ekNHQ3c4QnVtZ2RYOUFlazdubE5FUlFV?= =?utf-8?B?Q1k1OWlvOEdsU0xQem51MjFWV240cjRQeXdza3FEbTBwSlE1Rlg4RlhDM3Q3?= =?utf-8?B?ODBWOHdFL0R2QXdVQVdTSzd0WU9QV2N1aGU5NlFUblRkYXpPQ3hyZzlNNncv?= =?utf-8?B?UURkcXdPUEhBN0x4a1B4bFBBWlR5MFpvOHpOSEh1dVBzalM0T0FLYkdKbHpu?= =?utf-8?B?bGdKYmV3YzkzWlBHZXUvWXN5UUJWUUVuS3BIenBNV21BczhXelhyTzlLVjE2?= =?utf-8?B?VmNNdnlzRHpTT1o1UGJrRkphY2xEZkxNMFg4QUQvQTVIU1JXTHJiYWhhcG54?= =?utf-8?B?TmloMVRyTVR6ZEkyczdURzNyWkljV2NFaFZqUGVsaXZ5dEZ0bytKNkVCaVdr?= =?utf-8?B?c1k1UUNxZVNWcjJBcXBWRHVXak5weUlJcTVUSFF3NnJzUk8rYTMxcmhpdHhx?= =?utf-8?B?Y2ZyUWlsU20wdGd1MmtXVzJCVXBhMVUrM2pZRUtJVXIyRWxFSk0wbnl4VTNO?= =?utf-8?B?bmQwZTRpaGhqK1FoTUw1aWpncDBpUWFVYllxd0JHZXNDdFJkRTh3RytmVENC?= =?utf-8?B?Q0s5NVJQWnVPMnB0T3N3UnUyYVlpajc3WUJYUHFXMi9oNmF4MDBvaWFnY3FR?= =?utf-8?B?NWpkQ0lESTJHRmtCU3hSaGhiQ3BYUDRIUkRaQm8zZ0R1MGFVQit1eUFLRnkz?= =?utf-8?B?bkxFZmFHMUxPLzNmWkZEb2UyUFVXSDB5L3lNa0lNS1BBV2d4eWtRY2FGVXFx?= =?utf-8?B?d3pMeG5YZ2dzeEhmcWNQL0lTbXl2SGJGSk9RRUh2WFJzOS9ETFNVR3VZWXd4?= =?utf-8?B?Yjg1UWRHN25hTXhRZGZJeEhlU05keFl5UXpZSVZsQUR6TVRmL0YvempTNWRC?= =?utf-8?Q?fJ/rY43KQZW5A=3D?= X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 6ed1c1a8-9922-4ee2-d69a-08d8b203e26e X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jan 2021 05:28:22.5176 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +1eIZyNbqLpTHkYSs5qe0NmEKUkW+Cm5Zn+yPw6i/MFcVrKE0wn9xpJQcU4qz2Qq4apTSHRsxD0cciuHnmRBsg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0421 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-06_03:2021-01-06,2021-01-06 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 spamscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 mlxscore=0 lowpriorityscore=0 adultscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101060033 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmFiZWRhLCBNYWNpZWog W21haWx0bzptYWNpZWoucmFiZWRhQGxpbnV4LmludGVsLmNvbV0NCj4gU2VudDogVHVlc2RheSwg SmFudWFyeSA1LCAyMDIxIDEwOjQ5IFBNDQo+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgQ2hh bmcsIEFibmVyIChIUFMgU1cvRlcgVGVjaG5vbG9naXN0KQ0KPiA8YWJuZXIuY2hhbmdAaHBlLmNv bT4NCj4gQ2M6IEppYXhpbiBXdSA8amlheGluLnd1QGludGVsLmNvbT47IFNpeXVhbiBGdSA8c2l5 dWFuLmZ1QGludGVsLmNvbT47IEZhbg0KPiBXYW5nIDxmYW4ud2FuZ0BpbnRlbC5jb20+OyBKaWV3 ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFdhbmcsDQo+IE5pY2tsZSAoSFBTIFNXKSA8 bmlja2xlLndhbmdAaHBlLmNvbT47IE8nSGFubGV5LCBQZXRlciAoRVhMKQ0KPiA8cGV0ZXIub2hh bmxleUBocGUuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSF0gTmV0d29y a1BrZy9EeGVIdHRwTGliOiBNaWdyYXRlIEhUVFANCj4gaGVhZGVyIG1hbmlwdWxhdGlvbiBBUElz DQo+IA0KPiBIaSBBYm5lciwNCj4gDQo+IFNvcnJ5IGZvciB0aGUgbGF0ZSByZXNwb25zZSwgSSB3 YXMgb24gdmFjYXRpb24uDQo+IE9uZSBxdWljayB0aGluZzogSSBjYW4gc2VlIHRoYXQgdGhlIGZ1 bmN0aW9ucyBhcmUgc2ltcGx5IGJlaW5nIG1vdmVkIGZyb20NCj4gb25lIHBsYWNlIHRvIHRoZSBv dGhlciBhbmQgcmVuYW1lZCB0byBIdHRwSW9fX18oKS4NCj4gVGhlIG9ubHkgaXNzdWUgSSBoYXZl IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCByZW1vdmUgSHR0cEJvb3RfX18oKQ0KPiBmdW5j dGlvbnMgZnJvbSBIdHRwRHhlL0h0dHBCb290U3VwcG9ydC5jIFVwb24gcmVtb3ZpbmcgdGhvc2Us IEkgd2lsbCBnaXZlDQo+IG15IGFwcHJvdmFsIDopDQpJIHdhcyBvcmlnaW5hbGx5IHRob3VnaHQg dG8gaGF2ZSBhIEJ1Z3ppbGxhIGZvciBIdHRwQm9vdFN1cHBvcnQgYW5kIGxldCBvd25lciB0byBk ZWFsIHdpdGggdGhhdC4gOi0pDQpXaWxsIHNlbmQgdGhlIHBhdGNoIGZvciB0aGlzLg0KDQpUaGFu a3MNCkFibmVyDQo+IA0KPiBUaGFua3MsDQo+IE1hY2llag0KPiANCj4gT24gMTgtRGVjLTIwIDAz OjM5LCBBYm5lciBDaGFuZyB3cm90ZToNCj4gPiBNb3ZlIEhUVFAgaGVhZGVyIG1hbmlwdWxhdGlv biBmdW5jdGlvbnMgdG8gRHhlSHR0cExpYiBmcm9tDQo+ID4gSHR0cEJvb3RTdXBwb3J0LmMuIFRo ZXNlIGdlbmVyYWwgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IGJvdGggSHR0cCBCT09UDQo+ID4gYW5k IFJlZGZpc2hMaWIgKHBhdGNoZXMgd2lsbCBiZSBzZW50IGxhdGVyKS4NCj4gPg0KPiA+IFNpZ25l ZC1vZmYtYnk6IEFibmVyIENoYW5nIDxhYm5lci5jaGFuZ0BocGUuY29tPg0KPiA+DQo+ID4gQ2M6 IE1hY2llaiBSYWJlZGEgPG1hY2llai5yYWJlZGFAbGludXguaW50ZWwuY29tPg0KPiA+IENjOiBK aWF4aW4gV3UgPGppYXhpbi53dUBpbnRlbC5jb20+DQo+ID4gQ2M6IFNpeXVhbiBGdSA8c2l5dWFu LmZ1QGludGVsLmNvbT4NCj4gPiBDYzogRmFuIFdhbmcgPGZhbi53YW5nQGludGVsLmNvbT4NCj4g PiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IE5pY2tsZSBX YW5nIDxuaWNrbGUud2FuZ0BocGUuY29tPg0KPiA+IENjOiBQZXRlciBPJ0hhbmxleSA8cGV0ZXIu b2hhbmxleUBocGUuY29tPg0KPiA+IC0tLQ0KPiA+ICAgTmV0d29ya1BrZy9IdHRwQm9vdER4ZS9I dHRwQm9vdFN1cHBvcnQuaCAgIHwgIDUzIC0tLS0tLS0tDQo+ID4gICBOZXR3b3JrUGtnL0luY2x1 ZGUvTGlicmFyeS9IdHRwTGliLmggICAgICAgfCAgNTMgKysrKysrKysNCj4gPiAgIE5ldHdvcmtQ a2cvSHR0cEJvb3REeGUvSHR0cEJvb3RDbGllbnQuYyAgICB8ICAxMCArLQ0KPiA+ICAgTmV0d29y a1BrZy9MaWJyYXJ5L0R4ZUh0dHBMaWIvRHhlSHR0cExpYi5jIHwgMTM1DQo+ICsrKysrKysrKysr KysrKysrKysrLQ0KPiA+ICAgNCBmaWxlcyBjaGFuZ2VkLCAxOTIgaW5zZXJ0aW9ucygrKSwgNTkg ZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9IdHRwQm9vdER4 ZS9IdHRwQm9vdFN1cHBvcnQuaA0KPiA+IGIvTmV0d29ya1BrZy9IdHRwQm9vdER4ZS9IdHRwQm9v dFN1cHBvcnQuaA0KPiA+IGluZGV4IDFhMmQzMmRkNWEuLmMyYWMxYjc4NWEgMTAwNjQ0DQo+ID4g LS0tIGEvTmV0d29ya1BrZy9IdHRwQm9vdER4ZS9IdHRwQm9vdFN1cHBvcnQuaA0KPiA+ICsrKyBi L05ldHdvcmtQa2cvSHR0cEJvb3REeGUvSHR0cEJvb3RTdXBwb3J0LmgNCj4gPiBAQCAtODcsNTkg Kzg3LDYgQEAgSHR0cEJvb3RQcmludEVycm9yTWVzc2FnZSAoDQo+ID4gICAgIEVGSV9IVFRQX1NU QVRVU19DT0RFICAgICAgICAgICAgU3RhdHVzQ29kZQ0KPiA+ICAgICApOw0KPiA+DQo+ID4gLS8v DQo+ID4gLS8vIEEgd3JhcHBlciBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgSFRUUCBoZWFkZXJzLg0K PiA+IC0vLw0KPiA+IC10eXBlZGVmIHN0cnVjdCB7DQo+ID4gLSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgIE1heEhlYWRlckNvdW50Ow0KPiA+IC0gIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICBIZWFkZXJDb3VudDsNCj4gPiAtICBFRklfSFRUUF9IRUFERVIgICAgICAgICAgICAgKkhl YWRlcnM7DQo+ID4gLX0gSFRUUF9JT19IRUFERVI7DQo+ID4gLQ0KPiA+IC0vKioNCj4gPiAtICBD cmVhdGUgYSBIVFRQX0lPX0hFQURFUiB0byBob2xkIHRoZSBIVFRQIGhlYWRlciBpdGVtcy4NCj4g PiAtDQo+ID4gLSAgQHBhcmFtW2luXSAgTWF4SGVhZGVyQ291bnQgICAgICAgICBUaGUgbWF4aW11 bSBudW1iZXIgb2YgSFRUUA0KPiBoZWFkZXIgaW4gdGhpcyBob2xkZXIuDQo+ID4gLQ0KPiA+IC0g IEByZXR1cm4gICAgQSBwb2ludGVyIG9mIHRoZSBIVFRQIGhlYWRlciBob2xkZXIgb3IgTlVMTCBp ZiBmYWlsZWQuDQo+ID4gLQ0KPiA+IC0qKi8NCj4gPiAtSFRUUF9JT19IRUFERVIgKg0KPiA+IC1I dHRwQm9vdENyZWF0ZUhlYWRlciAoDQo+ID4gLSAgSU4gIFVJTlROICAgICAgICAgICAgICAgIE1h eEhlYWRlckNvdW50DQo+ID4gLSAgKTsNCj4gPiAtDQo+ID4gLS8qKg0KPiA+IC0gIERlc3Ryb3kg dGhlIEhUVFBfSU9fSEVBREVSIGFuZCByZWxlYXNlIHRoZSByZXNvdXJjZXMuDQo+ID4gLQ0KPiA+ IC0gIEBwYXJhbVtpbl0gIEh0dHBJb0hlYWRlciAgICAgICBQb2ludCB0byB0aGUgSFRUUCBoZWFk ZXIgaG9sZGVyIHRvIGJlDQo+IGRlc3Ryb3llZC4NCj4gPiAtDQo+ID4gLSoqLw0KPiA+IC1WT0lE DQo+ID4gLUh0dHBCb290RnJlZUhlYWRlciAoDQo+ID4gLSAgSU4gIEhUVFBfSU9fSEVBREVSICAg ICAgICpIdHRwSW9IZWFkZXINCj4gPiAtICApOw0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAgU2V0 IG9yIHVwZGF0ZSBhIEhUVFAgaGVhZGVyIHdpdGggdGhlIGZpZWxkIG5hbWUgYW5kIGNvcnJlc3Bv bmRpbmcNCj4gdmFsdWUuDQo+ID4gLQ0KPiA+IC0gIEBwYXJhbVtpbl0gIEh0dHBJb0hlYWRlciAg ICAgICBQb2ludCB0byB0aGUgSFRUUCBoZWFkZXIgaG9sZGVyLg0KPiA+IC0gIEBwYXJhbVtpbl0g IEZpZWxkTmFtZSAgICAgICAgICBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHdoaWNoIGRlc2NyaWJl cyBhIGZpZWxkDQo+IG5hbWUuDQo+ID4gLSAgQHBhcmFtW2luXSAgRmllbGRWYWx1ZSAgICAgICAg IE51bGwgdGVybWluYXRlZCBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIHRoZQ0KPiBjb3JyZXNwb25k aW5nIGZpZWxkIHZhbHVlLg0KPiA+IC0NCj4gPiAtICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIEhUVFAgaGVhZGVyIGhhcyBiZWVuIHNldCBvciB1cGRhdGVkLg0KPiA+IC0gIEBy ZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBBbnkgaW5wdXQgcGFyYW1ldGVyIGlzIGludmFs aWQuDQo+ID4gLSAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEluc3VmZmljaWVudCBy ZXNvdXJjZSB0byBjb21wbGV0ZSB0aGUNCj4gb3BlcmF0aW9uLg0KPiA+IC0gIEByZXR2YWwgIE90 aGVyICAgICAgICAgICAgICAgICBVbmV4cGVjdGVkIGVycm9yIGhhcHBlbmVkLg0KPiA+IC0NCj4g PiAtKiovDQo+ID4gLUVGSV9TVEFUVVMNCj4gPiAtSHR0cEJvb3RTZXRIZWFkZXIgKA0KPiA+IC0g IElOICBIVFRQX0lPX0hFQURFUiAgICAgICAqSHR0cElvSGVhZGVyLA0KPiA+IC0gIElOICBDSEFS OCAgICAgICAgICAgICAgICAqRmllbGROYW1lLA0KPiA+IC0gIElOICBDSEFSOCAgICAgICAgICAg ICAgICAqRmllbGRWYWx1ZQ0KPiA+IC0gICk7DQo+ID4gLQ0KPiA+ICAgLyoqDQo+ID4gICAgIFJl dHJpZXZlIHRoZSBob3N0IGFkZHJlc3MgdXNpbmcgdGhlIEVGSV9ETlM2X1BST1RPQ09MLg0KPiA+ DQo+ID4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvSW5jbHVkZS9MaWJyYXJ5L0h0dHBMaWIuaA0K PiA+IGIvTmV0d29ya1BrZy9JbmNsdWRlL0xpYnJhcnkvSHR0cExpYi5oDQo+ID4gaW5kZXggYTkw NjEyNmIzZC4uMmMzMzY3ZmIwMSAxMDA2NDQNCj4gPiAtLS0gYS9OZXR3b3JrUGtnL0luY2x1ZGUv TGlicmFyeS9IdHRwTGliLmgNCj4gPiArKysgYi9OZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9I dHRwTGliLmgNCj4gPiBAQCAtNDc2LDYgKzQ3Niw1OSBAQCBIdHRwSXNWYWxpZEh0dHBIZWFkZXIg KA0KPiA+ICAgICBJTiAgQ0hBUjggICAgICAgICAgICAqRmllbGROYW1lDQo+ID4gICAgICk7DQo+ ID4NCj4gPiArLy8NCj4gPiArLy8gQSB3cmFwcGVyIHN0cnVjdHVyZSB0byBob2xkIHRoZSBIVFRQ IGhlYWRlcnMuDQo+ID4gKy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgTWF4SGVhZGVyQ291bnQ7DQo+ID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgIEhlYWRlckNvdW50Ow0KPiA+ICsgIEVGSV9IVFRQX0hFQURFUiAgICAg ICAgICAgICAqSGVhZGVyczsNCj4gPiArfSBIVFRQX0lPX0hFQURFUjsNCj4gPiArDQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBDcmVhdGUgYSBIVFRQX0lPX0hFQURFUiB0byBob2xkIHRoZSBIVFRQ IGhlYWRlciBpdGVtcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgTWF4SGVhZGVyQ291bnQg ICAgICAgICBUaGUgbWF4aW11biBudW1iZXIgb2YgSFRUUA0KPiBoZWFkZXIgaW4gdGhpcyBob2xk ZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gICAgQSBwb2ludGVyIG9mIHRoZSBIVFRQIGhlYWRl ciBob2xkZXIgb3IgTlVMTCBpZiBmYWlsZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArSFRUUF9J T19IRUFERVIgKg0KPiA+ICtIdHRwSW9DcmVhdGVIZWFkZXIgKA0KPiA+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgTWF4SGVhZGVyQ291bnQNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgRGVzdHJveSB0aGUgSFRUUF9JT19IRUFERVIgYW5kIHJlbGVhc2UgdGhlIHJlc291 cmNlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgSHR0cElvSGVhZGVyICAgICAgIFBvaW50 IHRvIHRoZSBIVFRQIGhlYWRlciBob2xkZXIgdG8gYmUNCj4gZGVzdHJveWVkLg0KPiA+ICsNCj4g PiArKiovDQo+ID4gK1ZPSUQNCj4gPiArSHR0cElvRnJlZUhlYWRlciAoDQo+ID4gKyAgSU4gIEhU VFBfSU9fSEVBREVSICAgICAgICpIdHRwSW9IZWFkZXINCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgU2V0IG9yIHVwZGF0ZSBhIEhUVFAgaGVhZGVyIHdpdGggdGhlIGZpZWxkIG5h bWUgYW5kIGNvcnJlc3BvbmRpbmcNCj4gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g IEh0dHBJb0hlYWRlciAgICAgICBQb2ludCB0byB0aGUgSFRUUCBoZWFkZXIgaG9sZGVyLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIEZpZWxkTmFtZSAgICAgICAgICBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5n IHdoaWNoIGRlc2NyaWJlcyBhDQo+IGZpZWxkIG5hbWUuDQo+ID4gKyAgQHBhcmFtW2luXSAgRmll bGRWYWx1ZSAgICAgICAgIE51bGwgdGVybWluYXRlZCBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIHRo ZQ0KPiBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIEhUVFAgaGVhZGVyIGhhcyBiZWVuIHNldCBvciB1cGRh dGVkLg0KPiA+ICsgIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBBbnkgaW5wdXQgcGFy YW1ldGVyIGlzIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMg IEluc3VmZmljaWVudCByZXNvdXJjZSB0byBjb21wbGV0ZSB0aGUNCj4gb3BlcmF0aW9uLg0KPiA+ ICsgIEByZXR2YWwgIE90aGVyICAgICAgICAgICAgICAgICBVbmV4cGVjdGVkIGVycm9yIGhhcHBl bmVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSHR0cElvU2V0SGVh ZGVyICgNCj4gPiArICBJTiAgSFRUUF9JT19IRUFERVIgICAgICAgKkh0dHBJb0hlYWRlciwNCj4g PiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgKkZpZWxkTmFtZSwNCj4gPiArICBJTiAgQ0hB UjggICAgICAgICAgICAgICAgKkZpZWxkVmFsdWUNCj4gPiArICApOw0KPiA+DQo+ID4gICAjZW5k aWYNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0h0dHBCb290RHhlL0h0dHBCb290 Q2xpZW50LmMNCj4gPiBiL05ldHdvcmtQa2cvSHR0cEJvb3REeGUvSHR0cEJvb3RDbGllbnQuYw0K PiA+IGluZGV4IDMwYWMxNTg4OWIuLjhmMjFmNzc2NmUgMTAwNjQ0DQo+ID4gLS0tIGEvTmV0d29y a1BrZy9IdHRwQm9vdER4ZS9IdHRwQm9vdENsaWVudC5jDQo+ID4gKysrIGIvTmV0d29ya1BrZy9I dHRwQm9vdER4ZS9IdHRwQm9vdENsaWVudC5jDQo+ID4gQEAgLTk3Nyw3ICs5NzcsNyBAQCBIdHRw Qm9vdEdldEJvb3RGaWxlICgNCj4gPiAgICAgLy8gICAgICAgQWNjZXB0DQo+ID4gICAgIC8vICAg ICAgIFVzZXItQWdlbnQNCj4gPiAgICAgLy8NCj4gPiAtICBIdHRwSW9IZWFkZXIgPSBIdHRwQm9v dENyZWF0ZUhlYWRlciAoMyk7DQo+ID4gKyAgSHR0cElvSGVhZGVyID0gSHR0cElvQ3JlYXRlSGVh ZGVyICgzKTsNCj4gPiAgICAgaWYgKEh0dHBJb0hlYWRlciA9PSBOVUxMKSB7DQo+ID4gICAgICAg U3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgICAgZ290byBFUlJPUl8yOw0K PiA+IEBAIC05OTUsNyArOTk1LDcgQEAgSHR0cEJvb3RHZXRCb290RmlsZSAoDQo+ID4gICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgICBnb3RvIEVSUk9SXzM7DQo+ID4gICAg IH0NCj4gPiAtICBTdGF0dXMgPSBIdHRwQm9vdFNldEhlYWRlciAoDQo+ID4gKyAgU3RhdHVzID0g SHR0cElvU2V0SGVhZGVyICgNCj4gPiAgICAgICAgICAgICAgICBIdHRwSW9IZWFkZXIsDQo+ID4g ICAgICAgICAgICAgICAgSFRUUF9IRUFERVJfSE9TVCwNCj4gPiAgICAgICAgICAgICAgICBIb3N0 TmFtZQ0KPiA+IEBAIC0xMDA4LDcgKzEwMDgsNyBAQCBIdHRwQm9vdEdldEJvb3RGaWxlICgNCj4g PiAgICAgLy8NCj4gPiAgICAgLy8gQWRkIEhUVFAgaGVhZGVyIGZpZWxkIDI6IEFjY2VwdA0KPiA+ ICAgICAvLw0KPiA+IC0gIFN0YXR1cyA9IEh0dHBCb290U2V0SGVhZGVyICgNCj4gPiArICBTdGF0 dXMgPSBIdHRwSW9TZXRIZWFkZXIgKA0KPiA+ICAgICAgICAgICAgICAgIEh0dHBJb0hlYWRlciwN Cj4gPiAgICAgICAgICAgICAgICBIVFRQX0hFQURFUl9BQ0NFUFQsDQo+ID4gICAgICAgICAgICAg ICAgIiovKiINCj4gPiBAQCAtMTAyMCw3ICsxMDIwLDcgQEAgSHR0cEJvb3RHZXRCb290RmlsZSAo DQo+ID4gICAgIC8vDQo+ID4gICAgIC8vIEFkZCBIVFRQIGhlYWRlciBmaWVsZCAzOiBVc2VyLUFn ZW50DQo+ID4gICAgIC8vDQo+ID4gLSAgU3RhdHVzID0gSHR0cEJvb3RTZXRIZWFkZXIgKA0KPiA+ ICsgIFN0YXR1cyA9IEh0dHBJb1NldEhlYWRlciAoDQo+ID4gICAgICAgICAgICAgICAgSHR0cElv SGVhZGVyLA0KPiA+ICAgICAgICAgICAgICAgIEhUVFBfSEVBREVSX1VTRVJfQUdFTlQsDQo+ID4g ICAgICAgICAgICAgICAgSFRUUF9VU0VSX0FHRU5UX0VGSV9IVFRQX0JPT1QgQEAgLTEyOTEsNyAr MTI5MSw3IEBADQo+ID4gRVJST1JfNDoNCj4gPiAgICAgICBGcmVlUG9vbCAoUmVxdWVzdERhdGEp Ow0KPiA+ICAgICB9DQo+ID4gICBFUlJPUl8zOg0KPiA+IC0gIEh0dHBCb290RnJlZUhlYWRlciAo SHR0cElvSGVhZGVyKTsNCj4gPiArICBIdHRwSW9GcmVlSGVhZGVyIChIdHRwSW9IZWFkZXIpOw0K PiA+ICAgRVJST1JfMjoNCj4gPiAgICAgaWYgKENhY2hlICE9IE5VTEwpIHsNCj4gPiAgICAgICBG cmVlUG9vbCAoQ2FjaGUpOw0KPiA+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0xpYnJhcnkvRHhl SHR0cExpYi9EeGVIdHRwTGliLmMNCj4gPiBiL05ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwTGli L0R4ZUh0dHBMaWIuYw0KPiA+IGluZGV4IGRhZWMxZTAyMjYuLjczNTRlMDE3MGYgMTAwNjQ0DQo+ ID4gLS0tIGEvTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBMaWIvRHhlSHR0cExpYi5jDQo+ID4g KysrIGIvTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBMaWIvRHhlSHR0cExpYi5jDQo+ID4gQEAg LTMsNyArMyw3IEBADQo+ID4gICAgIEl0IHByb3ZpZGVzIHRoZSBoZWxwZXIgcm91dGluZXMgdG8g cGFyc2UgdGhlIEhUVFAgbWVzc2FnZSBieXRlIHN0cmVhbS4NCj4gPg0KPiA+ICAgQ29weXJpZ2h0 IChjKSAyMDE1IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMNCj4gPiByZXNl cnZlZC48QlI+DQo+ID4gLShDKSBDb3B5cmlnaHQgMjAxNiBIZXdsZXR0IFBhY2thcmQgRW50ZXJw cmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArKEMpIENvcHlyaWdodCAyMDE2IC0gMjAyMCAg SGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQNCj4gPiArTFA8QlI+DQo+ID4g ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+DQo+ID4g ICAqKi8NCj4gPiBAQCAtMjA5NSwzICsyMDk1LDEzNiBAQCBIdHRwSXNWYWxpZEh0dHBIZWFkZXIg KA0KPiA+ICAgICByZXR1cm4gVFJVRTsNCj4gPiAgIH0NCj4gPg0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgQ3JlYXRlIGEgSFRUUF9JT19IRUFERVIgdG8gaG9sZCB0aGUgSFRUUCBoZWFkZXIgaXRl bXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1heEhlYWRlckNvdW50ICAgICAgICAgVGhl IG1heGltdW4gbnVtYmVyIG9mIEhUVFANCj4gaGVhZGVyIGluIHRoaXMgaG9sZGVyLg0KPiA+ICsN Cj4gPiArICBAcmV0dXJuICAgIEEgcG9pbnRlciBvZiB0aGUgSFRUUCBoZWFkZXIgaG9sZGVyIG9y IE5VTEwgaWYgZmFpbGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0hUVFBfSU9fSEVBREVSICoN Cj4gPiArSHR0cElvQ3JlYXRlSGVhZGVyICgNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIE1heEhlYWRlckNvdW50DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgSFRUUF9JT19IRUFE RVIgICAgICAgICpIdHRwSW9IZWFkZXI7DQo+ID4gKw0KPiA+ICsgIGlmIChNYXhIZWFkZXJDb3Vu dCA9PSAwKSB7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IEh0dHBJb0hlYWRlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoSFRUUF9JT19IRUFERVIp ICsNCj4gPiArIE1heEhlYWRlckNvdW50ICogc2l6ZW9mIChFRklfSFRUUF9IRUFERVIpKTsgIGlm IChIdHRwSW9IZWFkZXIgPT0NCj4gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBIdHRwSW9IZWFkZXItPk1heEhlYWRlckNvdW50ID0gTWF4SGVh ZGVyQ291bnQ7DQo+ID4gKyBIdHRwSW9IZWFkZXItPkhlYWRlcnMgPSAoRUZJX0hUVFBfSEVBREVS ICopIChIdHRwSW9IZWFkZXIgKyAxKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIEh0dHBJb0hlYWRl cjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRGVzdHJveSB0aGUgSFRUUF9JT19I RUFERVIgYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgSHR0cElvSGVhZGVyICAgICAgIFBvaW50IHRvIHRoZSBIVFRQIGhlYWRlciBob2xkZXIgdG8g YmUNCj4gZGVzdHJveWVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArSHR0cElv RnJlZUhlYWRlciAoDQo+ID4gKyAgSU4gIEhUVFBfSU9fSEVBREVSICAgICAgICpIdHRwSW9IZWFk ZXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UTiAgICAgIEluZGV4Ow0KPiA+ICsNCj4g PiArICBpZiAoSHR0cElvSGVhZGVyICE9IE5VTEwpIHsNCj4gPiArICAgIGlmIChIdHRwSW9IZWFk ZXItPkhlYWRlckNvdW50ICE9IDApIHsNCj4gPiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgSHR0cElvSGVhZGVyLT5IZWFkZXJDb3VudDsgSW5kZXgrKykgew0KPiA+ICsgICAgICAgIEZy ZWVQb29sIChIdHRwSW9IZWFkZXItPkhlYWRlcnNbSW5kZXhdLkZpZWxkTmFtZSk7DQo+ID4gKyAg ICAgICAgWmVyb01lbSAoSHR0cElvSGVhZGVyLT5IZWFkZXJzW0luZGV4XS5GaWVsZFZhbHVlLCBB c2NpaVN0clNpemUNCj4gKEh0dHBJb0hlYWRlci0+SGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSkp Ow0KPiA+ICsgICAgICAgIEZyZWVQb29sIChIdHRwSW9IZWFkZXItPkhlYWRlcnNbSW5kZXhdLkZp ZWxkVmFsdWUpOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgICBGcmVlUG9vbCAo SHR0cElvSGVhZGVyKTsNCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFNldCBvciB1cGRhdGUgYSBIVFRQIGhlYWRlciB3aXRoIHRoZSBmaWVsZCBuYW1lIGFuZCBjb3Jy ZXNwb25kaW5nDQo+IHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBIdHRwSW9IZWFk ZXIgICAgICAgUG9pbnQgdG8gdGhlIEhUVFAgaGVhZGVyIGhvbGRlci4NCj4gPiArICBAcGFyYW1b aW5dICBGaWVsZE5hbWUgICAgICAgICAgTnVsbCB0ZXJtaW5hdGVkIHN0cmluZyB3aGljaCBkZXNj cmliZXMgYQ0KPiBmaWVsZCBuYW1lLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEZpZWxkVmFsdWUgICAg ICAgICBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyB0aGUNCj4gY29ycmVz cG9uZGluZyBmaWVsZCB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBIVFRQIGhlYWRlciBoYXMgYmVlbiBzZXQgb3IgdXBkYXRlZC4NCj4gPiAr ICBAcmV0dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgQW55IGlucHV0IHBhcmFtZXRlciBpcyBp bnZhbGlkLg0KPiA+ICsgIEByZXR2YWwgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBJbnN1ZmZpY2ll bnQgcmVzb3VyY2UgdG8gY29tcGxldGUgdGhlDQo+IG9wZXJhdGlvbi4NCj4gPiArICBAcmV0dmFs ICBPdGhlciAgICAgICAgICAgICAgICAgVW5leHBlY3RlZCBlcnJvciBoYXBwZW5lZC4NCj4gPiAr DQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0h0dHBJb1NldEhlYWRlciAoDQo+ID4g KyAgSU4gIEhUVFBfSU9fSEVBREVSICAgICAgICpIdHRwSW9IZWFkZXIsDQo+ID4gKyAgSU4gIENI QVI4ICAgICAgICAgICAgICAgICpGaWVsZE5hbWUsDQo+ID4gKyAgSU4gIENIQVI4ICAgICAgICAg ICAgICAgICpGaWVsZFZhbHVlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX0hUVFBfSEVB REVSICAgICAgICpIZWFkZXI7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgIFN0clNpemU7 DQo+ID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICpOZXdGaWVsZFZhbHVlOw0KPiA+ICsNCj4g PiArICBpZiAoSHR0cElvSGVhZGVyID09IE5VTEwgfHwgRmllbGROYW1lID09IE5VTEwgfHwgRmll bGRWYWx1ZSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgSGVhZGVyID0gSHR0cEZpbmRIZWFkZXIgKEh0dHBJ b0hlYWRlci0+SGVhZGVyQ291bnQsDQo+ID4gKyBIdHRwSW9IZWFkZXItPkhlYWRlcnMsIEZpZWxk TmFtZSk7ICBpZiAoSGVhZGVyID09IE5VTEwpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBB ZGQgYSBuZXcgaGVhZGVyLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIGlmIChIdHRwSW9IZWFkZXIt PkhlYWRlckNvdW50ID49IEh0dHBJb0hlYWRlci0+TWF4SGVhZGVyQ291bnQpIHsNCj4gPiArICAg ICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgSGVh ZGVyID0gJkh0dHBJb0hlYWRlci0+SGVhZGVyc1tIdHRwSW9IZWFkZXItPkhlYWRlckNvdW50XTsN Cj4gPiArDQo+ID4gKyAgICBTdHJTaXplID0gQXNjaWlTdHJTaXplIChGaWVsZE5hbWUpOw0KPiA+ ICsgICAgSGVhZGVyLT5GaWVsZE5hbWUgPSBBbGxvY2F0ZVBvb2wgKFN0clNpemUpOw0KPiA+ICsg ICAgaWYgKEhlYWRlci0+RmllbGROYW1lID09IE5VTEwpIHsNCj4gPiArICAgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgQ29weU1lbSAoSGVhZGVy LT5GaWVsZE5hbWUsIEZpZWxkTmFtZSwgU3RyU2l6ZSk7DQo+ID4gKyAgICBIZWFkZXItPkZpZWxk TmFtZVtTdHJTaXplIC0xXSA9ICdcMCc7DQo+ID4gKw0KPiA+ICsgICAgU3RyU2l6ZSA9IEFzY2lp U3RyU2l6ZSAoRmllbGRWYWx1ZSk7DQo+ID4gKyAgICBIZWFkZXItPkZpZWxkVmFsdWUgPSBBbGxv Y2F0ZVBvb2wgKFN0clNpemUpOw0KPiA+ICsgICAgaWYgKEhlYWRlci0+RmllbGRWYWx1ZSA9PSBO VUxMKSB7DQo+ID4gKyAgICAgIEZyZWVQb29sIChIZWFkZXItPkZpZWxkTmFtZSk7DQo+ID4gKyAg ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgIH0NCj4gPiArICAgIENv cHlNZW0gKEhlYWRlci0+RmllbGRWYWx1ZSwgRmllbGRWYWx1ZSwgU3RyU2l6ZSk7DQo+ID4gKyAg ICBIZWFkZXItPkZpZWxkVmFsdWVbU3RyU2l6ZSAtMV0gPSAnXDAnOw0KPiA+ICsNCj4gPiArICAg IEh0dHBJb0hlYWRlci0+SGVhZGVyQ291bnQrKzsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAg Ly8NCj4gPiArICAgIC8vIFVwZGF0ZSBhbiBleGlzdGluZyBvbmUuDQo+ID4gKyAgICAvLw0KPiA+ ICsgICAgU3RyU2l6ZSA9IEFzY2lpU3RyU2l6ZSAoRmllbGRWYWx1ZSk7DQo+ID4gKyAgICBOZXdG aWVsZFZhbHVlID0gQWxsb2NhdGVQb29sIChTdHJTaXplKTsNCj4gPiArICAgIGlmIChOZXdGaWVs ZFZhbHVlID09IE5VTEwpIHsNCj4gPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiA+ICsgICAgfQ0KPiA+ICsgICAgQ29weU1lbSAoTmV3RmllbGRWYWx1ZSwgRmllbGRWYWx1 ZSwgU3RyU2l6ZSk7DQo+ID4gKyAgICBOZXdGaWVsZFZhbHVlW1N0clNpemUgLTFdID0gJ1wwJzsN Cj4gPiArDQo+ID4gKyAgICBpZiAoSGVhZGVyLT5GaWVsZFZhbHVlICE9IE5VTEwpIHsNCj4gPiAr ICAgICAgRnJlZVBvb2wgKEhlYWRlci0+RmllbGRWYWx1ZSk7DQo+ID4gKyAgICB9DQo+ID4gKyAg ICBIZWFkZXItPkZpZWxkVmFsdWUgPSBOZXdGaWVsZFZhbHVlOyAgfQ0KPiA+ICsNCj4gPiArICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQoNCg==