From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (NAM12-DM6-obe.outbound.protection.outlook.com [40.107.243.51]) by mx.groups.io with SMTP id smtpd.web10.6853.1681190996794145014 for ; Mon, 10 Apr 2023 22:29:57 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=q+Q513Qp; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.243.51, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YMJlXnvxPFlq6JTAKpJmdllmGEloWQgHMHj/npIhUrDNxNBa1qkZcLyqnbyvQ4LLOjWvOJ2m1LI6Ai8aEQ9t8PbYqmnGjO926UvPc+9V8YK2QoakDAw4afiCNdsNzdN916LLdJweoxz3QPRQeYnWa9mBdq6yBpGr7TozB1BYxf2Y3ml3tiBIXRzA+hq7wf/cXScqTBznnM5Nt90fsXiu5In68CWAExC72cRsHJX/cRN33KKhC7D+mnr1jzVUqANBo25+DFxehpgOlPwBM52C6KdU7Dd8PkBmINYzaJlmQOUgD1fRaq2mvQ1ikG6iA5Iencb9RZAl9IVHJN/YbRIm2A== 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=oK6ClaKfQXIixPXRsNyztjhf0fARQjlLwlEEr3MEKdc=; b=PL7qJFpvxlvm4B9JCQwSAD4FHIXIHVdnvou+DoFBWcWnbZTjYQYazhPemjt033exe+4VhoFGFx+ZDoqzpm/LOMRnVfmnBLXfLxiJ0Xs701AZrKmM/qiB3YaHpd3KtpaoJ1Q8DecFTui0pLlJK4vFayqFbVo68i1tb+ueid/rOAsyAsMaOSIfHpGbs8s4jgJ15qoJUXWJKjFmFRC4v4iRJFCUlH0ESG3vylbqXNYWMfEpmDKQB70OrcpOTIrQ3E+ivkNRRCcLpeFcoiDAV4W10r8mGCjw/IcVYdhIBWiIFmHyYDl3TCQu5jQ19oE6KOExMpr+eaCHAyYi8lqRHKY7vw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oK6ClaKfQXIixPXRsNyztjhf0fARQjlLwlEEr3MEKdc=; b=q+Q513QpLpfhPaSn5O6Xk5Oke9Y6LutiOLNoggn56zCPksVlw0YSKclrHLkPdMUy+0rqsFPRzBnXOJWoDpiRITiq2qIr1SeyKHGna6NvbffLgJaUFECAY6ZVaPwlm/GVIU7DNsxGYK81TwI+O4+RMZNYl1JGcZxV2vYCToCRdIo= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by DS7PR12MB6190.namprd12.prod.outlook.com (2603:10b6:8:99::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6277.36; Tue, 11 Apr 2023 05:29:54 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::30f:bd83:40dd:8f1]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::30f:bd83:40dd:8f1%3]) with mapi id 15.20.6277.036; Tue, 11 Apr 2023 05:29:54 +0000 From: "Chang, Abner" To: Tinh Nguyen , "devel@edk2.groups.io" CC: Isaac Oram , "Attar, AbdulLateef (Abdul Lateef)" , Nickle Wang , Igor Kulchytskyy Subject: Re: [edk2-devel] [edk2-platforms][PATCH 01/14] ManageabilityPkg: Add more helper functions Thread-Topic: [edk2-devel] [edk2-platforms][PATCH 01/14] ManageabilityPkg: Add more helper functions Thread-Index: AQHZa9E68YgaRIVyYEub2scWQCduKK8llHmA Date: Tue, 11 Apr 2023 05:29:54 +0000 Message-ID: References: <20230403150459.925-1-abner.chang@amd.com> <20230403150459.925-2-abner.chang@amd.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-04-11T05:29:52Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=ea2a1209-7420-4c94-9f3d-01f81c846a13; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB3966:EE_|DS7PR12MB6190:EE_ x-ms-office365-filtering-correlation-id: 9850b26d-519f-47e4-62ef-08db3a4dc7e3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: oeK1Io+rWWYNudJqmYci2FHG+Ni8vw0HFsTeFJcvsIgcsSVFOSh/bG4LLI0dfbHCgvYEgMDXyBCck5cW0a0ao07L/h3pKn5tB0q0YVnQpY9FSUYosMLt2hOMqfIYwqIY2nMPs8s6uLAQ+tH3mE6+bVNHSiLtej38xtHp1O//TqiOUcHeOQfI65MK456frhfZAMb2y2gRmr1rMRuXOLYkRtYUI9mz0cSJNCrE6+50dLCkeaNqjEn8Kaa5yeo3jbEWJmLk7J1tfljlwKdBR22QHqvUWGymgyME/dqy0OLcBvKk4hKuQVm6YhjuOHwwgSynHDBi6y/S+Xu19VOOSqodPYKTZsMYUuY8muEbyf7/7Dhc5PbHZ4pjiozjx0utzDEt3EnuKVnOQATr0iiGyIGKvhMTlsPvXCJDb1NW/0r38nKrP4bwM/vOqpW1VVpjCeGC8ho4vHHzw7HdJJISx0256c28V/5QBemq3x2NaGAoiQf4i0HeYifpjIMwAI6pGM2vNEJMkmphzmYlOmD9SsKUzfioKdgd+mLxnhHZc8FYwlQ6D+ch/RZl9UPSKoXVJEbHcX+3mE9H3vypnUMiFuzp4L8CkNLH+OkTukb2/OJ5ZtQ6bXJenYky+kXrQE5HZKmy x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(396003)(376002)(366004)(39860400002)(136003)(451199021)(71200400001)(7696005)(478600001)(316002)(110136005)(53546011)(9686003)(26005)(6506007)(186003)(54906003)(2906002)(30864003)(296002)(5660300002)(4326008)(66946007)(76116006)(66446008)(41300700001)(8676002)(66476007)(64756008)(52536014)(8936002)(66556008)(38100700002)(38070700005)(122000001)(55016003)(86362001)(83380400001)(33656002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?S3VuWmdWQVBMSWo2MmRiVlBISGJwM3VFemdlaHhRaTA4elVlY2haUE9lLzNn?= =?utf-8?B?c1JNeW5IMjZVQjBpbDVHYk0xbUljUEhVdGE3Q0NNZHZONXdVUmh0T3hadXYz?= =?utf-8?B?d0srcU56Wmd6MDhZQkUraGxYd1orZTV4aVpFQTUyWkZIQlpJR1NZYWNYeWFB?= =?utf-8?B?OWJrRmV6Vm1SNlk2K2hoaWw4aGN3VGxrYUNIQjVvVHZxZXNmN0VzTzRZaHV5?= =?utf-8?B?dzNPT2V1MWVxMXpLUkwzSTQxRUtFcFZHdmt5Y3hwdFgvajlzQmZjMURpQ0Jt?= =?utf-8?B?MHJHYVZ6SjhQakhHUlFoU3VtRnVtWWFqQmlJNWIvWGFtN3ZIczBLbU1tRzQx?= =?utf-8?B?M1lWUEpianBXYzN1THVKR29zQXM4SDJMYjF0dHpSWkI3bjgwWlBpd0RaZ1Q1?= =?utf-8?B?Y0ZvcDBKOTBsbGExVk1PcVNsNUhlbEVhejhEL2t3Rk1GbkExbDJGMEJQNjNY?= =?utf-8?B?Y3V4blVPL0Ivbks2Y0o3amtCZjRTMW15UW5yY21vOUdpQ0hEVzIveWM4bTlO?= =?utf-8?B?dkFhOGRGdnh0QkR0cDkvaklZUkhRdGkxMjlpaWN0Qjc0RDJzVHJva09zVElX?= =?utf-8?B?d0NQVzVlWUNqVnh5aEZiUUZrdlQ5NHF2bDBMdVp0Q2FETWVONm1VU0tzZXRk?= =?utf-8?B?MlRGWVg1dC9SQXRhUUVWOXpHdEVwZUtSU054WFFhOTY3NkxOK1N0cXl1UVZz?= =?utf-8?B?STdtK3cwMGxraGY5K2loT2RtV0xPTU5VMk1vOHJLc0FnTmlxa1lvWitlVGFF?= =?utf-8?B?Q1F1QUhqRmFtOFV2U0RGUVBlY1BmM3hmZ0c3dWVmUjB4bWNVeEU2WmJqZHc2?= =?utf-8?B?TnhTWjVvR1dSWlZoRElJVk9VTW90Q09vZlo5VlhkNEtDZExVUnRCZ0Yxd0Ir?= =?utf-8?B?OTQyRUJpbFZoclh0YjVFenJNWmVpOUlxS2F0MUxNK0d5NzVMUFZZSDRWQmVH?= =?utf-8?B?YVhwdGZrSEd0ZjJHaTZRaDl1akg0ODRFa1ltby9KbEN5YVFjWE9RcmN2R1hI?= =?utf-8?B?NEtIcmxiYUFJb1NvVkdiUzNSbDFnYlRMQTNDdEhMSE9BSlVBeWlQejdYT0x0?= =?utf-8?B?N242VDcrVVU5WjN2UzdQZ1JqdzZBV3V3ZnRtNkozTncvRnEyS3RCTGY3MWNL?= =?utf-8?B?eDEzbllmTGRwRDg4KzhiQ1RZQ0ZFaTV2NlU5U2dCemNjY21LWFozWEpqS0xR?= =?utf-8?B?Z2c0OUVnZEhIclk4allZM3VYWklLSkx2Rks2RDd0VEQ4emJDSTZ0eGZiS096?= =?utf-8?B?UzkrbnZsc2Z1N1R0N1p0dGFBT0wxU0dWTjZmRk8vNmZ4bEZVUE1VVm1Id1pF?= =?utf-8?B?MUFIWm8xaWJIdTFrbGE0UFMyM1JsVDdSSnZHM1FvV2EzZld2ZjRNNkRVQ0sv?= =?utf-8?B?aUpvTkc2UmRmWmR2SHR0SmcvalVQVTJSNmszMlY5NWgrZDhzb1ZOc0hjc1Qr?= =?utf-8?B?ekRKMytKRHVxUDlRVTBCYTVWOEpGaFhua1hCeTdYT2dGN1JCd3RpQm15U0ZY?= =?utf-8?B?cVBPS2RaaFVBOW4zT01FZzZSZlJ3TlBJVjlaeTJLZTRLZklqVm8yM2JQMjhT?= =?utf-8?B?VjFwVGU1L3JjVXZnZXdubGtJdkJidXh4YURGL3BGTmZEUmUwY3JBTUI3ajNG?= =?utf-8?B?YW1xc1JHN0t1aTU3MjRINjNkWlpBWURwWFROdkVSZmFxSGVPb285bXRJR1o0?= =?utf-8?B?UFo4OUVTZGxmaldkK0hkTmZkL0p3SHJmdzlYeGk3bTczaGJzT2kvRVhUME1j?= =?utf-8?B?aFZ2OTU1dUw3UGFMUklMQlZNYmsvU0EyMnAzeURLWUdZQVd0eG9YQSsxWmwz?= =?utf-8?B?MXU1aElPTUNCSFNCcElnUTdqM0FzYVJNemhRVWRvSUtFeFhtSERFMUV3TXVo?= =?utf-8?B?bHNGenVLSjNOVkVHQWxUaHhNb2lCVlhxbEd6Y2RHYWZNN0QvR0hqOG14Skpt?= =?utf-8?B?bzUzZU5qbkVlN1p5MFRyWVA4UmR4eGZMbW42TXY0SVhNYXdZNk9qK29mNjRI?= =?utf-8?B?cjlMRWxmaFNGRm15VC8wWDd0dFRib09PZUxzZmNsamppRW96ak1FQnFCc3lM?= =?utf-8?B?M09ISjh4UXh1NkU5WVUzeW10aU1TM3k4QWZiT0hOU0g3clRPNDFMdTNseW8y?= =?utf-8?Q?zxW4=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9850b26d-519f-47e4-62ef-08db3a4dc7e3 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Apr 2023 05:29:54.2957 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: tLVQYunGo2RCmrTI/7IAvj9umoEIf37XWQnU5uVQbMcGIWjFYvk/yeZ4+QtGy/61moOYkUqBYcnBvFOcKPqA7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6190 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 W0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEdlbmVyYWxdDQoNCg0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IFRpbmggTmd1eWVuIDx0aW5obmd1eWVuQGFtcGVyZW1haWwu b25taWNyb3NvZnQuY29tPg0KPiBTZW50OiBUdWVzZGF5LCBBcHJpbCAxMSwgMjAyMyAxOjI0IEFN DQo+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgQ2hhbmcsIEFibmVyIDxBYm5lci5DaGFuZ0Bh bWQuY29tPg0KPiBDYzogSXNhYWMgT3JhbSA8aXNhYWMudy5vcmFtQGludGVsLmNvbT47IEF0dGFy LCBBYmR1bExhdGVlZiAoQWJkdWwgTGF0ZWVmKQ0KPiA8QWJkdWxMYXRlZWYuQXR0YXJAYW1kLmNv bT47IE5pY2tsZSBXYW5nIDxuaWNrbGV3QG52aWRpYS5jb20+OyBJZ29yDQo+IEt1bGNoeXRza3l5 IDxpZ29ya0BhbWkuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtlZGsyLXBsYXRm b3Jtc11bUEFUQ0ggMDEvMTRdIE1hbmFnZWFiaWxpdHlQa2c6DQo+IEFkZCBtb3JlIGhlbHBlciBm dW5jdGlvbnMNCj4gDQo+IENhdXRpb246IFRoaXMgbWVzc2FnZSBvcmlnaW5hdGVkIGZyb20gYW4g RXh0ZXJuYWwgU291cmNlLiBVc2UgcHJvcGVyDQo+IGNhdXRpb24gd2hlbiBvcGVuaW5nIGF0dGFj aG1lbnRzLCBjbGlja2luZyBsaW5rcywgb3IgcmVzcG9uZGluZy4NCj4gDQo+IA0KPiBQbGVhc2Ug ZmluZCBteSBpbmxpbmUgY29tbWVudCBiZWxvdw0KPiANCj4gT24gNC8zLzIwMjMgMTA6MDQgUE0s IENoYW5nLCBBYm5lciB2aWEgZ3JvdXBzLmlvIHdyb3RlOg0KPiA+IEZyb206IEFibmVyIENoYW5n IDxhYm5lci5jaGFuZ0BhbWQuY29tPg0KPiA+DQo+ID4gMS4gQWRkIGEgaGVscGVyIGZ1bmN0aW9u IHRvIG91dHB1dCBwYXlsb2FkIGJpbmFyeQ0KPiA+ICAgICB0byBkZWJ1ZyBvdXRwdXQgZGV2aWNl Lg0KPiA+IDIuIEFkZCBhIGhlbHBlciBmdW5jdGlvbiB0byBzcGxpdCBwYXlsb2FkIGludG8NCj4g PiAgICAgcGFja2FnZXMgYWNjb3JkaW5nIHRvIG1heGltdW0gdHJhbnNmZXIgdW5pdA0KPiA+ICAg ICBvZiB0cmFuc3BvcnQgaW50ZXJmYWNlLg0KPiA+IDMuIEFkZCBhIGhlbHBlciBmdW5jdGlvbiB0 byBnZW5lcmF0ZSBDUkM4Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogQWJuZXIgQ2hhbmcgPGFi bmVyLmNoYW5nQGFtZC5jb20+DQo+ID4gQ2M6IElzYWFjIE9yYW0gPGlzYWFjLncub3JhbUBpbnRl bC5jb20+DQo+ID4gQ2M6IEFiZHVsIExhdGVlZiBBdHRhciA8YWJkYXR0YXJAYW1kLmNvbT4NCj4g PiBDYzogTmlja2xlIFdhbmcgPG5pY2tsZXdAbnZpZGlhLmNvbT4NCj4gPiBDYzogSWdvciBLdWxj aHl0c2t5eSA8aWdvcmtAYW1pLmNvbT4NCj4gPiAtLS0NCj4gPiAgIC4uLi9CYXNlTWFuYWdlYWJp bGl0eVRyYW5zcG9ydEhlbHBlci5pbmYgICAgICB8ICAgMSArDQo+ID4gICAuLi4vTGlicmFyeS9N YW5hZ2VhYmlsaXR5VHJhbnNwb3J0SGVscGVyTGliLmggfCAgOTggKysrKysrKysNCj4gPiAgIC4u Li9CYXNlTWFuYWdlYWJpbGl0eVRyYW5zcG9ydEhlbHBlci5jICAgICAgICB8IDIxOCArKysrKysr KysrKysrKysrKy0NCj4gPiAgIDMgZmlsZXMgY2hhbmdlZCwgMzEwIGluc2VydGlvbnMoKyksIDcg ZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9GZWF0dXJlcy9NYW5hZ2Vh YmlsaXR5UGtnL0xpYnJhcnkvQmFzZU1hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwZXJMaQ0KPiA+ IGIvQmFzZU1hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwZXIuaW5mDQo+ID4gYi9GZWF0dXJlcy9N YW5hZ2VhYmlsaXR5UGtnL0xpYnJhcnkvQmFzZU1hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwZXJM aQ0KPiA+IGIvQmFzZU1hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwZXIuaW5mDQo+ID4gaW5kZXgg OTVjMzM2MmRkYi4uYzMxYTg5YWE0OSAxMDA2NDQNCj4gPiAtLS0NCj4gPiBhL0ZlYXR1cmVzL01h bmFnZWFiaWxpdHlQa2cvTGlicmFyeS9CYXNlTWFuYWdlYWJpbGl0eVRyYW5zcG9ydEhlbHBlckxp DQo+ID4gYi9CYXNlTWFuYWdlYWJpbGl0eVRyYW5zcG9ydEhlbHBlci5pbmYNCj4gPiArKysNCj4g Yi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL0xpYnJhcnkvQmFzZU1hbmFnZWFiaWxpdHlUcmFu c3BvcnRIZWxwDQo+ID4gKysrIGVyTGliL0Jhc2VNYW5hZ2VhYmlsaXR5VHJhbnNwb3J0SGVscGVy LmluZg0KPiA+IEBAIC0yNSw2ICsyNSw3IEBADQo+ID4gICBbTGlicmFyeUNsYXNzZXNdDQo+ID4g ICAgIEJhc2VNZW1vcnlMaWINCj4gPiAgICAgRGVidWdMaWINCj4gPiArICBNZW1vcnlBbGxvY2F0 aW9uTGliDQo+ID4NCj4gPiAgIFtQYWNrYWdlc10NCj4gPiAgICAgTWFuYWdlYWJpbGl0eVBrZy9N YW5hZ2VhYmlsaXR5UGtnLmRlYw0KPiA+IGRpZmYgLS1naXQNCj4gPiBhL0ZlYXR1cmVzL01hbmFn ZWFiaWxpdHlQa2cvSW5jbHVkZS9MaWJyYXJ5L01hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwDQo+ ID4gZXJMaWIuaA0KPiA+IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9JbmNsdWRlL0xpYnJh cnkvTWFuYWdlYWJpbGl0eVRyYW5zcG9ydEhlbHANCj4gPiBlckxpYi5oDQo+ID4gaW5kZXggNzE4 YWMzNGExZi4uMGRiZjVjY2IzYyAxMDA2NDQNCj4gPiAtLS0NCj4gPiBhL0ZlYXR1cmVzL01hbmFn ZWFiaWxpdHlQa2cvSW5jbHVkZS9MaWJyYXJ5L01hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwDQo+ ID4gZXJMaWIuaA0KPiA+ICsrKyBiL0ZlYXR1cmVzL01hbmFnZWFiaWxpdHlQa2cvSW5jbHVkZS9M aWJyYXJ5L01hbmFnZWFiaWxpdHlUcmFuc3BvcnQNCj4gPiArKysgSGVscGVyTGliLmgNCj4gPiBA QCAtMTEsOCArMTEsMjQgQEANCj4gPg0KPiA+ICAgI2luY2x1ZGUgPExpYnJhcnkvTWFuYWdlYWJp bGl0eVRyYW5zcG9ydExpYi5oPg0KPiA+DQo+ID4gKyNkZWZpbmUgREVCVUdfTUFOQUdFQUJJTElU WV9JTkZPICBERUJVR19JTkZPDQo+IFdoeSBkaWQgeW91IHJlZGVmaW5lIHRoaXMgbWFjcm8/DQo+ IEkgc2F3IHRoYXQgeW91IHVzZWQgYm90aCBERUJVR19JTkZPIGFuZCBERUJVR19NQU5BR0VBQklM SVRZX0lORk8NCj4gdGhyb3VnaG91dCB0aGlzIGxpYnJhcnkuIFBsZWFzZSB1c2UgdGhlbSBjb25z aXN0ZW50bHkuDQpUaGFua3MgZm9yIHJlbWluZGluZyBtZSB0aGlzLiBJIHdpbGwgdXBkYXRlIHRo b3NlIGZpbGVzLg0KDQo+IA0KPiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlYnVnIGxldmVs IGZvciBhbGwgc3RhdGVtZW50cyBpbiBhIGZ1bmN0aW9uLCB5b3UNCj4gY2FuIGRlY2xhcmUgYW4g YXJndW1lbnQgYXMgdGhlIGRlYnVnIGxldmVsLg0KV2Ugd291bGQgbGlrZSB0byBwcm9wb3NlIGEg ZGVidWcgbGV2ZWwgZm9yIE1hbmFnZWFiaWxpdHksIHRoYXQgY292ZXJzIGJvdGggTWFuYWdlYWJp bGl0eVBrZyBhbmQgUmVkZmlzaFBrZy4NCg0KVGhhbmtzDQpBYm5lcg0KDQoNCj4gPiArDQo+ID4g ICB0eXBlZGVmIHN0cnVjdCBfTUFOQUdFQUJJTElUWV9QUk9UT0NPTF9OQU1FDQo+ID4gTUFOQUdF QUJJTElUWV9QUk9UT0NPTF9OQU1FOw0KPiA+DQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiAr ICBVSU5UOCAgICAgKlBheWxvYWRQb2ludGVyOw0KPiA+ICsgIFVJTlQzMiAgICBQYXlsb2FkU2l6 ZTsNCj4gPiArfSBNQU5BR0VBQklMSVRZX1RSQU5TTUlTU0lPTl9QQUNLQUdFX0FUVFI7DQo+ID4g Kw0KPiA+ICsvLw0KPiA+ICsvLyBUaGUgaW5mb3JtYXRpb24gb2YgbXVsdGkgcG9ydGlvbnMgb2Yg cGF5bG9hZCBpdCBpcyAvLyBzcGxpdHRlZA0KPiA+ICthY2NvcmRpbmcgdG8gdHJhbnNwb3J0IGlu dGVyZmFjZSBNYXhpbXVtIC8vIFRyYW5zZmVyIFVuaXQuDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVy T2ZQYWNrYWdlczsgLy8vPCBOdW1iZXIgb2YgcGFja2FnZXMNCj4gaW4gTXVsdGlQYWNrYWdlcy4N Cj4gPiArICBNQU5BR0VBQklMSVRZX1RSQU5TTUlTU0lPTl9QQUNLQUdFX0FUVFIgICAgTXVsdGlQ YWNrYWdlc1tdOw0KPiA+ICt9IE1BTkFHRUFCSUxJVFlfVFJBTlNNSVNTSU9OX01VTFRJX1BBQ0tB R0VTOw0KPiA+ICsNCj4gPiAgIC8qKg0KPiA+ICAgICBIZWxwZXIgZnVuY3Rpb24gcmV0dXJucyB0 aGUgaHVtYW4gcmVhZGFibGUgbmFtZSBvZiBNYW5hZ2VhYmlsaXR5DQo+IHNwZWNpZmljYXRpb24u DQo+ID4NCj4gPiBAQCAtOTAsNCArMTA2LDg2IEBAIEhlbHBlckluaXRNYW5hZ2VhYmlsaXR5VHJh bnNwb3J0ICgNCj4gPiAgICAgT1VUIE1BTkFHRUFCSUxJVFlfVFJBTlNQT1JUX0FERElUSU9OQUxf U1RBVFVTDQo+ICpUcmFuc3BvcnRBZGRpdGlvbmFsU3RhdHVzIE9QVElPTkFMDQo+ID4gICAgICk7 DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBzcGxpdHMgcGF5bG9hZCBpbnRv IG11bHRpcGxlIHBhY2thZ2VzIGFjY29yZGluZyB0bw0KPiA+ICsgIHRoZSBnaXZlbiB0cmFuc3Bv cnQgaW50ZXJmYWNlIE1heGltdW0gVHJhbnNmZXIgVW5pdCAoTVRVKS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgUHJlYW1ibGVTaXplICAgICAgICAgVGhlIGFkZGl0aW9uYWwgZGF0YSBzaXpl IHByZWNlZGVzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBw YWNrYWdlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBvc3RhbWJsZVNpemUgICAgICAgIFRoZSBhZGRp dGlvbmFsIGRhdGEgc2l6ZSBzdWNjZWVkcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVhY2ggcGFja2FnZS4NCj4gPiArICBAcGFyYW1baW5dICBQYXlsb2FkICAgICAg ICAgICAgICBQb2ludGVyIHRvIHBheWxvYWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgUGF5bG9hZFNp emUgICAgICAgICAgUGF5bG9hZCBzaXplIGluIGJ5dGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgTWF4 aW11bVRyYW5zZmVyVW5pdCAgTVRVIG9mIHRyYW5zcG9ydCBpbnRlcmZhY2UuDQo+ID4gKyAgQHBh cmFtW291dF0gTXVsdGlwbGVQYWNrYWdlcyAgICAgUG9pbnRlciB0byByZWNlaXZlDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFOQUdFQUJJTElUWV9UUkFOU01JU1NJ T05fTVVMVElfUEFDS0FHRVMNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3R1cmUuIENhbGxlciBoYXMgdG8gZnJlZSB0aGUgbWVtb3J5DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIGZvcg0KPiBNQU5BR0VBQklMSVRZ X1RSQU5TTUlTU0lPTl9NVUxUSV9QQUNLQUdFUy4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgIEVG SV9TVUNDRVNTDQo+IE1BTkFHRUFCSUxJVFlfVFJBTlNNSVNTSU9OX01VTFRJX1BBQ0tBR0VTIHN0 cnVjdHVyZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXR1cm5l ZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCAgIEVGSV9PVVRfT0ZfUkVTT1VSQ0UgIE5v dCBlbm91Z2ggcmVzb3VyY2UgdG8gY3JlYXRlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1BTkFHRUFCSUxJVFlfVFJBTlNNSVNTSU9OX01VTFRJX1BBQ0tBR0VTDQo+IHN0 cnVjdHVyZS4NCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSGVscGVyTWFuYWdlYWJp bGl0eVNwbGl0UGF5bG9hZCAoDQo+ID4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQcmVhbWJsZVNpemUsDQo+ID4gKyAgSU4gVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3N0YW1ibGVTaXplLA0KPiA+ICsgIElOIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBheWxvYWQsDQo+ID4g KyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXlsb2Fk U2l6ZSwNCj4gPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1heGltdW1UcmFuc2ZlclVuaXQsDQo+ID4gKyAgT1VUIE1BTkFHRUFCSUxJVFlfVFJBTlNN SVNTSU9OX01VTFRJX1BBQ0tBR0VTDQo+ICoqTXVsdGlwbGVQYWNrYWdlcw0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBDUkM4IHdpdGgg Z2l2ZW4gcG9seW5vbWlhbC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgUG9seW5vbWlhbCAg ICAgICBQb2x5bm9taWFsIGluIDgtYml0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIENyY0luaXRpYWxW YWx1ZSAgQ1JDIGluaXRpYWwgdmFsdWUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQnVmZmVyU3RhcnQg ICAgICBQb2ludGVyIHRvIGJ1ZmZlciBzdGFydHMgdGhlIENSQyBjYWxjdWxhdGlvbi4NCj4gPiAr ICBAcGFyYW1baW5dICBCdWZmZXJTaXplICAgICAgIFNpemUgb2YgYnVmZmVyLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsICBVSU5UOCBDUkMgdmFsdWUuDQo+ID4gKyoqLw0KPiA+ICtVSU5UOA0KPiA+ ICtIZWxwZXJNYW5hZ2VhYmlsaXR5R2VuZXJhdGVDcmM4ICgNCj4gPiArICBJTiBVSU5UOCAgIFBv bHlub21pYWwsDQo+ID4gKyAgSU4gVUlOVDggICBDcmNJbml0aWFsVmFsdWUsDQo+ID4gKyAgSU4g VUlOVDggICAqQnVmZmVyU3RhcnQsDQo+ID4gKyAgSU4gVUlOVDMyICBCdWZmZXJTaXplDQo+ID4g KyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFByaW50IG91dCBtYW5hZ2VhYmlsaXR5IHRy YW5zbWl0IHBheWxvYWQgdG8gdGhlIGRlYnVnIG91dHB1dCBkZXZpY2UuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIFBheWxvYWQgICAgICBQYXlsb2FkIHRvIHByaW50Lg0KPiA+ICsgIEBwYXJh bVtpbl0gIFBheWxvYWRTaXplICBQYXlsb2FkIHNpemUuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr Vk9JRA0KPiA+ICtFRklBUEkNCj4gPiArSGVscGVyTWFuYWdlYWJpbGl0eVBheUxvYWREZWJ1Z1By aW50ICgNCj4gPiArICBJTiAgVk9JRCAgICAqUGF5bG9hZCwNCj4gPiArICBJTiAgVUlOVDMyICBQ YXlsb2FkU2l6ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBQcmludHMgYSBk ZWJ1ZyBtZXNzYWdlIGFuZCBtYW5hZ2VhYmlsaXR5IHBheWxvYWQgdG8gdGhlIGRlYnVnIG91dHB1 dA0KPiBkZXZpY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFBheWxvYWQgICAgICBQYXls b2FkIHRvIHByaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBheWxvYWRTaXplICBQYXlsb2FkIHNp emUuDQo+ID4gKyAgQHBhcmFtW2luXSAgRm9ybWF0ICAgICAgIFRoZSBmb3JtYXQgc3RyaW5nIGZv ciB0aGUgZGVidWcgbWVzc2FnZSB0byBwcmludC4NCj4gPiArICBAcGFyYW1baW5dICAuLi4gICAg ICAgICAgVGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Qgd2hvc2UgY29udGVudHMgYXJlDQo+IGFj Y2Vzc2VkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBmb3Jt YXQgc3RyaW5nIHNwZWNpZmllZCBieSBGb3JtYXQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9J RA0KPiA+ICtFRklBUEkNCj4gPiArSGVscGVyTWFuYWdlYWJpbGl0eURlYnVnUHJpbnQgKA0KPiA+ ICsgIElOICBWT0lEICAgICAgICAgKlBheWxvYWQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgICAgICBQ YXlsb2FkU2l6ZSwNCj4gPiArICBJTiAgQ09OU1QgQ0hBUjggICpGb3JtYXQsDQo+ID4gKyAgLi4u DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9G ZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL0xpYnJhcnkvQmFzZU1hbmFnZWFiaWxpdHlUcmFuc3Bv cnRIZWxwZXJMaQ0KPiA+IGIvQmFzZU1hbmFnZWFiaWxpdHlUcmFuc3BvcnRIZWxwZXIuYw0KPiA+ IGIvRmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9MaWJyYXJ5L0Jhc2VNYW5hZ2VhYmlsaXR5VHJh bnNwb3J0SGVscGVyTGkNCj4gPiBiL0Jhc2VNYW5hZ2VhYmlsaXR5VHJhbnNwb3J0SGVscGVyLmMN Cj4gPiBpbmRleCA4MWRhMjA5NzY0Li45ZDIwZWQ0OWZmIDEwMDY0NA0KPiA+IC0tLQ0KPiA+IGEv RmVhdHVyZXMvTWFuYWdlYWJpbGl0eVBrZy9MaWJyYXJ5L0Jhc2VNYW5hZ2VhYmlsaXR5VHJhbnNw b3J0SGVscGVyTGkNCj4gPiBiL0Jhc2VNYW5hZ2VhYmlsaXR5VHJhbnNwb3J0SGVscGVyLmMNCj4g PiArKysNCj4gYi9GZWF0dXJlcy9NYW5hZ2VhYmlsaXR5UGtnL0xpYnJhcnkvQmFzZU1hbmFnZWFi aWxpdHlUcmFuc3BvcnRIZWxwDQo+ID4gKysrIGVyTGliL0Jhc2VNYW5hZ2VhYmlsaXR5VHJhbnNw b3J0SGVscGVyLmMNCj4gPiBAQCAtOCwxMSArOCwxMiBAQA0KPiA+ICAgI2luY2x1ZGUgPFVlZmku aD4NCj4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiAgICNpbmNs dWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFs bG9jYXRpb25MaWIuaD4NCj4gPiAgICNpbmNsdWRlIDxMaWJyYXJ5L01hbmFnZWFiaWxpdHlUcmFu c3BvcnRIZWxwZXJMaWIuaD4NCj4gPg0KPiA+ICAgLy8NCj4gPiAgIC8vIEJhc2VNYW5hZ2VhYmls aXR5VHJhbnNwb3J0SGVscGVyIGlzIHVzZWQgYnkgUEVJLCBEWEUgYW5kIFNNTS4NCj4gPiAtLy8g TWFrZSBzdXJlIHRoZSBnbG9iYWwgdmFyaWFibGVzIGFkZGVkIGhlcmUgc2hvdWxkIGJlIHVuY2hh bmdhYmxlLg0KPiA+ICsvLyBNYWtlIHN1cmUgdGhlIGdsb2JhbCB2YXJpYWJsZXMgYWRkZWQgaGVy ZSBzaG91bGQgYmUgdW5jaGFuZ2VhYmxlLg0KPiA+ICAgLy8NCj4gPiAgIE1BTkFHRUFCSUxJVFlf U1BFQ0lGSUNBVElPTl9OQU1FICBNYW5hZ2VhYmlsaXR5U3BlY05hbWVUYWJsZVtdDQo+ID0gew0K PiA+ICAgICB7ICZnTWFuYWdlYWJpbGl0eVRyYW5zcG9ydEtjc0d1aWQsICAgIEwiS0NTIiAgICAg fSwNCj4gPiBAQCAtNDcsOCArNDgsOCBAQCBIZWxwZXJNYW5hZ2VhYmlsaXR5U3BlY05hbWUgKA0K PiA+ICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICAgICB9DQo+ID4NCj4gPiAtICBpZiAoU3BlY2lm aWNhdGlvbkd1aWQgPT0gTlVMTCB8fCBJc1plcm9HdWlkIChTcGVjaWZpY2F0aW9uR3VpZCkpIHsN Cj4gPiAtICAgIERFQlVHKChERUJVR19FUlJPUiwgIiVhOiBJbXByb3BlciBpbnB1dCBHVUlEcywg Y291bGQgYmUgTlVMTCBvcg0KPiB6ZXJvIEdVSUQuXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gPiAr ICBpZiAoKFNwZWNpZmljYXRpb25HdWlkID09IE5VTEwpIHx8IElzWmVyb0d1aWQgKFNwZWNpZmlj YXRpb25HdWlkKSkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBJbXByb3Bl ciBpbnB1dCBHVUlEcywgY291bGQgYmUgTlVMTCBvcg0KPiA+ICsgemVybyBHVUlELlxuIiwgX19G VU5DVElPTl9fKSk7DQo+ID4gICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gICAgIH0NCj4gPg0KPiA+ IEBAIC05OSwxMiArMTAwLDEzIEBAIEhlbHBlck1hbmFnZWFiaWxpdHlDaGVja1N1cHBvcnRlZFNw ZWMgKA0KPiA+ICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgIH0N Cj4gPg0KPiA+IC0gIGlmIChUcmFuc3BvcnRHdWlkID09IE5VTEwgfHwNCj4gPiArICBpZiAoKFRy YW5zcG9ydEd1aWQgPT0gTlVMTCkgfHwNCj4gPiAgICAgICAgIElzWmVyb0d1aWQgKFRyYW5zcG9y dEd1aWQpIHx8DQo+ID4gLSAgICAgIE1hbmFnZWFiaWxpdHlQcm90b2NvbFRvQ2hlY2sgPT0gTlVM TCB8fA0KPiA+ICsgICAgICAoTWFuYWdlYWJpbGl0eVByb3RvY29sVG9DaGVjayA9PSBOVUxMKSB8 fA0KPiA+ICAgICAgICAgSXNaZXJvR3VpZCAoTWFuYWdlYWJpbGl0eVByb3RvY29sVG9DaGVjaykN Cj4gPiAtICAgICAgKSB7DQo+ID4gLSAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIiVhOiBJbXBy b3BlciBpbnB1dCBHVUlEcywgY291bGQgYmUgTlVMTCBvcg0KPiB6ZXJvIEdVSUQuXG4iLCBfX0ZV TkNUSU9OX18pKTsNCj4gPiArICAgICAgKQ0KPiA+ICsgIHsNCj4gPiArICAgIERFQlVHICgoREVC VUdfRVJST1IsICIlYTogSW1wcm9wZXIgaW5wdXQgR1VJRHMsIGNvdWxkIGJlIE5VTEwgb3INCj4g PiArIHplcm8gR1VJRC5cbiIsIF9fRlVOQ1RJT05fXykpOw0KPiA+ICAgICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgIH0NCj4gPg0KPiA+IEBAIC0yNTksMyArMjYxLDIw NSBAQCBIZWxwZXJJbml0TWFuYWdlYWJpbGl0eVRyYW5zcG9ydCAoDQo+ID4NCj4gPiAgICAgcmV0 dXJuIFN0YXR1czsNCj4gPiAgIH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rp b24gZ2VuZXJhdGVzIENSQzggd2l0aCBnaXZlbiBwb2x5bm9taWFsLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBQb2x5bm9taWFsICAgICAgIFBvbHlub21pYWwgaW4gOC1iaXQuDQo+ID4gKyAg QHBhcmFtW2luXSAgQ3JjSW5pdGlhbFZhbHVlICBDUkMgaW5pdGlhbCB2YWx1ZS4NCj4gPiArICBA cGFyYW1baW5dICBCdWZmZXJTdGFydCAgICAgIFBvaW50ZXIgdG8gYnVmZmVyIHN0YXJ0cyB0aGUg Q1JDIGNhbGN1bGF0aW9uLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJ1ZmZlclNpemUgICAgICAgU2l6 ZSBvZiBidWZmZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgIFVJTlQ4IENSQyB2YWx1ZS4NCj4g PiArKiovDQo+ID4gK1VJTlQ4DQo+ID4gK0hlbHBlck1hbmFnZWFiaWxpdHlHZW5lcmF0ZUNyYzgg KA0KPiA+ICsgIElOIFVJTlQ4ICAgUG9seW5vbWlhbCwNCj4gPiArICBJTiBVSU5UOCAgIENyY0lu aXRpYWxWYWx1ZSwNCj4gPiArICBJTiBVSU5UOCAgICpCdWZmZXJTdGFydCwNCj4gPiArICBJTiBV SU5UMzIgIEJ1ZmZlclNpemUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UOCAgIEJpdElu ZGV4Ow0KPiA+ICsgIFVJTlQzMiAgQnVmZmVySW5kZXg7DQo+ID4gKw0KPiA+ICsgIEJ1ZmZlcklu ZGV4ID0gMDsNCj4gPiArICB3aGlsZSAoQnVmZmVySW5kZXggPCBCdWZmZXJTaXplKSB7DQo+ID4g KyAgICBDcmNJbml0aWFsVmFsdWUgPSBDcmNJbml0aWFsVmFsdWUgXiAqKEJ1ZmZlclN0YXJ0ICsg QnVmZmVySW5kZXgpOw0KPiA+ICsgICAgQnVmZmVySW5kZXgrKzsNCj4gPiArDQo+ID4gKyAgICBm b3IgKEJpdEluZGV4ID0gMDsgQml0SW5kZXggPCA4OyBCaXRJbmRleCsrKSB7DQo+ID4gKyAgICAg IGlmICgoQ3JjSW5pdGlhbFZhbHVlICYgMHg4MCkgIT0gMCkgew0KPiA+ICsgICAgICAgIENyY0lu aXRpYWxWYWx1ZSA9IChDcmNJbml0aWFsVmFsdWUgPDwgMSkgXiBQb2x5bm9taWFsOw0KPiA+ICsg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIENyY0luaXRpYWxWYWx1ZSA8PD0gMTsNCj4gPiAr ICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIENyY0lu aXRpYWxWYWx1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlv biBzcGxpdHMgcGF5bG9hZCBpbnRvIG11bHRpcGxlIHBhY2thZ2VzIGFjY29yZGluZyB0bw0KPiA+ ICsgIHRoZSBnaXZlbiB0cmFuc3BvcnQgaW50ZXJmYWNlIE1heGltdW0gVHJhbnNmZXIgVW5pdCAo TVRVKS4NCj4gPiArDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFByZWFtYmxlU2l6ZSAgICAg ICAgIFRoZSBhZGRpdGlvbmFsIGRhdGEgc2l6ZSBwcmVjZWRlcw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVhY2ggcGFja2FnZS4NCj4gPiArICBAcGFyYW1baW5dICBQ b3N0YW1ibGVTaXplICAgICAgICBUaGUgYWRkaXRpb25hbCBkYXRhIHNpemUgc3VjY2VlZHMNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHBhY2thZ2UuDQo+ID4g KyAgQHBhcmFtW2luXSAgUGF5bG9hZCAgICAgICAgICAgICAgUG9pbnRlciB0byBwYXlsb2FkLg0K PiA+ICsgIEBwYXJhbVtpbl0gIFBheWxvYWRTaXplICAgICAgICAgIFBheWxvYWQgc2l6ZSBpbiBi eXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE1heGltdW1UcmFuc2ZlclVuaXQgIE1UVSBvZiB0cmFu c3BvcnQgaW50ZXJmYWNlLg0KPiA+ICsgIEBwYXJhbVtvdXRdIE11bHRpcGxlUGFja2FnZXMgICAg IFBvaW50ZXIgdG8gcmVjZWl2ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1BTkFHRUFCSUxJVFlfVFJBTlNNSVNTSU9OX01VTFRJX1BBQ0tBR0VTDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLiBDYWxsZXIgaGFzIHRvIGZy ZWUgdGhlIG1lbW9yeQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs bG9jYXRlZCBmb3INCj4gTUFOQUdFQUJJTElUWV9UUkFOU01JU1NJT05fTVVMVElfUEFDS0FHRVMu DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICBFRklfU1VDQ0VTUw0KPiBNQU5BR0VBQklMSVRZX1RS QU5TTUlTU0lPTl9NVUxUSV9QQUNLQUdFUyBzdHJ1Y3R1cmUNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaXMgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2 YWwgICBFRklfT1VUX09GX1JFU09VUkNFICBOb3QgZW5vdWdoIHJlc291cmNlIHRvIGNyZWF0ZQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQU5BR0VBQklMSVRZX1RSQU5T TUlTU0lPTl9NVUxUSV9QQUNLQUdFUw0KPiBzdHJ1Y3R1cmUuDQo+ID4gKyoqLw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0hlbHBlck1hbmFnZWFiaWxpdHlTcGxpdFBheWxvYWQgKA0KPiA+ICsgIElO IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGVTaXpl LA0KPiA+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UG9zdGFtYmxlU2l6ZSwNCj4gPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpQYXlsb2FkLA0KPiA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUGF5bG9hZFNpemUsDQo+ID4gKyAgSU4gVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtVHJhbnNmZXJVbml0LA0KPiA+ ICsgIE9VVCBNQU5BR0VBQklMSVRZX1RSQU5TTUlTU0lPTl9NVUxUSV9QQUNLQUdFUw0KPiAqKk11 bHRpcGxlUGFja2FnZXMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UMTYgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQYWNrYWdlczsNCj4gPiArICBVSU5U MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhPZlBhY2thZ2U7DQo+ ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VQ YXlsb2FkU2l6ZTsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVG90YWxQYXlsb2FkUmVtYWluaW5nOw0KPiA+ICsgIE1BTkFHRUFCSUxJVFlfVFJBTlNN SVNTSU9OX01VTFRJX1BBQ0tBR0VTDQo+ICpUaGlzTXVsdGlwbGVQYWNrYWdlczsNCj4gPiArICBN QU5BR0VBQklMSVRZX1RSQU5TTUlTU0lPTl9QQUNLQUdFX0FUVFIgICAgKlRoaXNQYWNrYWdlOw0K PiA+ICsNCj4gPiArICBpZiAoKElOVDE2KShNYXhpbXVtVHJhbnNmZXJVbml0IC0gUHJlYW1ibGVT aXplIC0gUG9zdGFtYmxlU2l6ZSkgPCAwKSB7DQo+ID4gKyAgICBERUJVRyAoKA0KPiA+ICsgICAg ICBERUJVR19FUlJPUiwNCj4gPiArICAgICAgIiVhOiAoUHJlYW1ibGUgMHgleCArIFBvc3RhbWJs ZVNpemUgMHgleCkgaXMgZ3JlYXRlciB0aGFuDQo+IE1heGltdW1UcmFuc2ZlclVuaXQgMHgleC5c biIsDQo+ID4gKyAgICAgIF9fRlVOQ1RJT05fXywNCj4gPiArICAgICAgUHJlYW1ibGVTaXplLA0K PiA+ICsgICAgICBQb3N0YW1ibGVTaXplLA0KPiA+ICsgICAgICBNYXhpbXVtVHJhbnNmZXJVbml0 DQo+ID4gKyAgICAgICkpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFBhY2thZ2VQYXlsb2FkU2l6ZSAgID0gTWF4aW11bVRy YW5zZmVyVW5pdCAtUHJlYW1ibGVTaXplIC0NCj4gUG9zdGFtYmxlU2l6ZTsNCj4gPiArICBOdW1i ZXJPZlBhY2thZ2VzICAgICA9IChVSU5UMTYpKChQYXlsb2FkU2l6ZSArIChQYWNrYWdlUGF5bG9h ZFNpemUgLQ0KPiAxKSkgLyBQYWNrYWdlUGF5bG9hZFNpemUpOw0KPiA+ICsgIFRoaXNNdWx0aXBs ZVBhY2thZ2VzID0NCj4gKE1BTkFHRUFCSUxJVFlfVFJBTlNNSVNTSU9OX01VTFRJX1BBQ0tBR0VT ICopQWxsb2NhdGVaZXJvUG9vbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZg0KPiAoTUFO QUdFQUJJTElUWV9UUkFOU01JU1NJT05fTVVMVElfUEFDS0FHRVMpICsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mDQo+IChNQU5BR0VBQklMSVRZX1RSQU5TTUlTU0lPTl9QQUNLQUdFX0FUVFIp ICogTnVtYmVyT2ZQYWNrYWdlcw0KPiA+ICsNCj4gPiArICk7ICBpZiAoVGhpc011bHRpcGxlUGFj a2FnZXMgPT0gTlVMTCkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBOb3Qg ZW5vdWdoIG1lbW9yeSBmb3INCj4gTUFOQUdFQUJJTElUWV9UUkFOU01JU1NJT05fTVVMVElfUEFD S0FHRVNcbiIpKTsNCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBUaGlzTXVsdGlwbGVQYWNrYWdlcy0+TnVtYmVyT2ZQYWNrYWdl cyA9IE51bWJlck9mUGFja2FnZXM7DQo+ID4gKyAgVGhpc1BhY2thZ2UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPQ0KPiAoTUFOQUdFQUJJTElUWV9UUkFOU01JU1NJT05fUEFDS0FHRV9BVFRS ICopKFRoaXNNdWx0aXBsZVBhY2thZ2VzDQo+ICsgMSk7DQo+ID4gKyAgVG90YWxQYXlsb2FkUmVt YWluaW5nICAgICAgICAgICAgICAgICAgPSBQYXlsb2FkU2l6ZTsNCj4gPiArICBmb3IgKEluZGV4 T2ZQYWNrYWdlID0gMDsgSW5kZXhPZlBhY2thZ2UgPCBOdW1iZXJPZlBhY2thZ2VzOw0KPiBJbmRl eE9mUGFja2FnZSsrKSB7DQo+ID4gKyAgICBUaGlzUGFja2FnZS0+UGF5bG9hZFBvaW50ZXIgPSBQ YXlsb2FkICsgKEluZGV4T2ZQYWNrYWdlICoNCj4gUGFja2FnZVBheWxvYWRTaXplKTsNCj4gPiAr ICAgIFRoaXNQYWNrYWdlLT5QYXlsb2FkU2l6ZSAgICA9IE1JTiAoVG90YWxQYXlsb2FkUmVtYWlu aW5nLA0KPiBQYWNrYWdlUGF5bG9hZFNpemUpOw0KPiA+ICsgICAgVG90YWxQYXlsb2FkUmVtYWlu aW5nICAgICAgLT0gVGhpc1BhY2thZ2UtPlBheWxvYWRTaXplOw0KPiA+ICsgICAgVGhpc1BhY2th Z2UrKzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChUb3RhbFBheWxvYWRSZW1haW5pbmcg IT0gMCkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBFcnJvciBwcm9jZXNz aW5nIG11bHRpcGxlIHBhY2thZ2VzDQo+IChUb3RhbFBheWxvYWRSZW1haW5pbmcgIT0gMClcbiIs IF9fRlVOQ1RJT05fXykpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpNdWx0aXBsZVBhY2thZ2VzID0gVGhpc011bHRpcGxl UGFja2FnZXM7DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBQcmludCBvdXQgbWFuYWdlYWJpbGl0eSB0cmFuc21pdCBwYXlsb2FkIHRv IHRoZSBkZWJ1ZyBvdXRwdXQgZGV2aWNlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBQYXls b2FkICAgICAgUGF5bG9hZCB0byBwcmludC4NCj4gPiArICBAcGFyYW1baW5dICBQYXlsb2FkU2l6 ZSAgUGF5bG9hZCBzaXplLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJ DQo+ID4gK0hlbHBlck1hbmFnZWFiaWxpdHlQYXlMb2FkRGVidWdQcmludCAoDQo+ID4gKyAgSU4g IFZPSUQgICAgKlBheWxvYWQsDQo+ID4gKyAgSU4gIFVJTlQzMiAgUGF5bG9hZFNpemUNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBVSU5UMTYgIFBhZ2UyNTY7DQo+ID4gKyAgVUlOVDE2ICBSb3cx NjsNCj4gPiArICBVSU5UMTYgIENvbHVtbjE2Ow0KPiA+ICsgIFVJTlQzMiAgUmVtYWluaW5nQnl0 ZXM7DQo+ID4gKyAgVUlOVDMyICBUb3RhbEJ5dGVQcmludGVkOw0KPiA+ICsNCj4gPiArICBSZW1h aW5pbmdCeXRlcyAgID0gUGF5bG9hZFNpemU7DQo+ID4gKyAgVG90YWxCeXRlUHJpbnRlZCA9IDA7 DQo+ID4gKyAgd2hpbGUgKFRSVUUpIHsNCj4gPiArICAgIGlmIChUb3RhbEJ5dGVQcmludGVkICUg MjU2ID09IDApIHsNCj4gPiArICAgICAgUGFnZTI1NiA9IChVSU5UMTYpVG90YWxCeXRlUHJpbnRl ZCAvIDI1NjsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19NQU5BR0VBQklMSVRZX0lORk8sICI9 PT09PT09PSBNYW5hZ2VhYmlsaXR5DQo+IFBheWxvYWQgJTA0eEggLSAlMDR4SCA9PT09PT09PT1c biIsIFBhZ2UyNTYgKiAyNTYsIFBhZ2UyNTYgKiAyNTYgKyBNSU4NCj4gKFJlbWFpbmluZ0J5dGVz LCAyNTYpIC0gMSkpOw0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX01BTkFHRUFCSUxJVFlfSU5G TywgIiAgICAgICAiKSk7DQo+ID4gKyAgICAgIGZvciAoQ29sdW1uMTYgPSAwOyBDb2x1bW4xNiA8 IDE2OyBDb2x1bW4xNisrKSB7DQo+ID4gKyAgICAgICAgREVCVUcgKChERUJVR19NQU5BR0VBQklM SVRZX0lORk8sICIlMDJ4ICIsIENvbHVtbjE2KSk7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgIERFQlVHICgoREVCVUdfTUFOQUdFQUJJTElUWV9JTkZPLCAiXG4gICAgICAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKSk7DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgICAgZm9yIChSb3cxNiA9IDA7IFJvdzE2IDwgMTY7IFJvdzE2 KyspIHsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19NQU5BR0VBQklMSVRZX0lORk8sICIlMDR4 IHwgIiwgUGFnZTI1NiAqIDI1NiArDQo+IFJvdzE2ICogMTYpKTsNCj4gPiArICAgICAgZm9yIChD b2x1bW4xNiA9IDA7IENvbHVtbjE2IDwgTUlOIChSZW1haW5pbmdCeXRlcywgMTYpOyBDb2x1bW4x NisrKQ0KPiB7DQo+ID4gKyAgICAgICAgREVCVUcgKChERUJVR19NQU5BR0VBQklMSVRZX0lORk8s ICIlMDJ4ICIsICooKFVJTlQ4DQo+ICopUGF5bG9hZCArIFBhZ2UyNTYgKiAyNTYgKyBSb3cxNiAq IDE2ICsgQ29sdW1uMTYpKSk7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIFJlbWFp bmluZ0J5dGVzICAgLT0gQ29sdW1uMTY7DQo+ID4gKyAgICAgIFRvdGFsQnl0ZVByaW50ZWQgKz0g Q29sdW1uMTY7DQo+ID4gKyAgICAgIGlmIChSZW1haW5pbmdCeXRlcyA9PSAwKSB7DQo+ID4gKyAg ICAgICAgREVCVUcgKChERUJVR19NQU5BR0VBQklMSVRZX0lORk8sICJcblxuIikpOw0KPiA+ICsg ICAgICAgIHJldHVybjsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBERUJVRygoREVCVUdfTUFO QUdFQUJJTElUWV9JTkZPLCAiXG4iKSk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgREVC VUcgKChERUJVR19NQU5BR0VBQklMSVRZX0lORk8sICJcbiIpKTsgIH0NCj4gPiArDQo+ID4gKyAg REVCVUcgKChERUJVR19NQU5BR0VBQklMSVRZX0lORk8sICJcblxuIikpOyB9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBQcmludHMgYSBkZWJ1ZyBtZXNzYWdlIGFuZCBtYW5hZ2VhYmlsaXR5IHBh eWxvYWQgdG8gdGhlIGRlYnVnIG91dHB1dA0KPiBkZXZpY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gIFBheWxvYWQgICAgICBQYXlsb2FkIHRvIHByaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0g IFBheWxvYWRTaXplICBQYXlsb2FkIHNpemUuDQo+ID4gKyAgQHBhcmFtW2luXSAgRm9ybWF0ICAg ICAgIFRoZSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgZGVidWcgbWVzc2FnZSB0byBwcmludC4NCj4g PiArICBAcGFyYW1baW5dICAuLi4gICAgICAgICAgVGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Qg d2hvc2UgY29udGVudHMgYXJlDQo+IGFjY2Vzc2VkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJhc2VkIG9uIHRoZSBmb3JtYXQgc3RyaW5nIHNwZWNpZmllZCBieSBGb3JtYXQuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArSGVscGVyTWFuYWdl YWJpbGl0eURlYnVnUHJpbnQgKA0KPiA+ICsgIElOICBWT0lEICAgICAgICAgKlBheWxvYWQsDQo+ ID4gKyAgSU4gIFVJTlQzMiAgICAgICBQYXlsb2FkU2l6ZSwNCj4gPiArICBJTiAgQ09OU1QgQ0hB UjggICpGb3JtYXQsDQo+ID4gKyAgLi4uDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVkFfTElT VCAgTWFya2VyOw0KPiA+ICsNCj4gPiArICBWQV9TVEFSVCAoTWFya2VyLCBGb3JtYXQpOw0KPiA+ ICsgIERFQlVHICgoREVCVUdfTUFOQUdFQUJJTElUWV9JTkZPLCAiTWFuYWdlYWJpbGl0eSBUcmFu c21pc3Npb246DQo+ICIpKTsNCj4gPiArICBEZWJ1Z1ZQcmludCAoKFVJTlROKURFQlVHX01BTkFH RUFCSUxJVFlfSU5GTywgRm9ybWF0LCBNYXJrZXIpOw0KPiA+ICsgIEhlbHBlck1hbmFnZWFiaWxp dHlQYXlMb2FkRGVidWdQcmludCAoUGF5bG9hZCwgUGF5bG9hZFNpemUpOw0KPiA+ICsgIFZBX0VO RCAoTWFya2VyKTsNCj4gPiArfQ0K