From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 237A3C02196 for ; Thu, 6 Feb 2025 06:11:22 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tfv67-0004MS-KS; Thu, 06 Feb 2025 01:10:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tfv66-0004M8-05 for grub-devel@gnu.org; Thu, 06 Feb 2025 01:10:46 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tfv62-0004IW-9R for grub-devel@gnu.org; Thu, 06 Feb 2025 01:10:45 -0500 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51618sXE008312; Thu, 6 Feb 2025 06:10:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=RP0UhZ d4LBiUc8SOduXRo8wmRsMCo/OHzcdgO/t8ASw=; b=K7UV0jEA6ZJysNtYKRYIwF fKn97tr0N+MOqUn1xzSIdryijxa9Eakqraq920bMSiorC2/JCgp3+LzcrHDn23XK C+K04OhbNIAjVRC4cbXTJLzt4nctpamXnxADxtsJ1Mz334lC+CwyJek08tNvZUry /hG9rqMRpiivJn1LiNlisu7RmSGFQdGWPdMKdgYIjuZr7DfaICP0IvK+gua1XXBl CnxJcY6SgeLK+RQXyyqrPXlZ8Zwz3/hPoNiGnoHcjAcWoGoTDTuUytELVGBtzKAw RVmUUSWN7I4p2u2+CCfql9xeWtXwZtZS23kjwwhhbKdceoWsBd3ZQZGDe1q6N9hg == Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44mk5a1362-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 Feb 2025 06:10:35 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5162vGLB007127; Thu, 6 Feb 2025 06:10:34 GMT Received: from smtprelay06.dal12v.mail.ibm.com ([172.16.1.8]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 44hxayvu8n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 Feb 2025 06:10:34 +0000 Received: from smtpav02.wdc07v.mail.ibm.com (smtpav02.wdc07v.mail.ibm.com [10.39.53.229]) by smtprelay06.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 5166AWmu31719938 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 6 Feb 2025 06:10:33 GMT Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C74365805B; Thu, 6 Feb 2025 06:10:32 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F0CE75805C; Thu, 6 Feb 2025 06:10:31 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav02.wdc07v.mail.ibm.com (Postfix) with ESMTP; Thu, 6 Feb 2025 06:10:31 +0000 (GMT) MIME-Version: 1.0 Date: Thu, 06 Feb 2025 11:40:31 +0530 From: Avnish Chouhan To: Sudhakar Kuppusamy Cc: grub-devel@gnu.org, dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, stefanb@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com, daniel.kiper@oracle.com Subject: Re: [PATCH v1 10/21] appended signatures: support verifying appended signatures In-Reply-To: <20241218145647.1390837-11-sudhakar@linux.ibm.com> References: <20241218145647.1390837-1-sudhakar@linux.ibm.com> <20241218145647.1390837-11-sudhakar@linux.ibm.com> Message-ID: X-Sender: avnish@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-GUID: A39dg1VTUiLNaWbmDdkPdJPJ4MEuinEl X-Proofpoint-ORIG-GUID: A39dg1VTUiLNaWbmDdkPdJPJ4MEuinEl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-06_01,2025-02-05_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 mlxlogscore=999 mlxscore=0 malwarescore=0 suspectscore=0 clxscore=1015 impostorscore=0 spamscore=0 adultscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502060048 Received-SPF: pass client-ip=148.163.156.1; envelope-from=avnish@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org T24gMjAyNC0xMi0xOCAyMDoyNiwgU3VkaGFrYXIgS3VwcHVzYW15IHdyb3RlOgo+IEZyb206IERh bmllbCBBeHRlbnMgPGRqYUBheHRlbnMubmV0Pgo+IAo+IEJ1aWxkaW5nIG9uIHRoZSBwYXJzZXJz IGFuZCB0aGUgYWJpbGl0eSB0byBlbWJlZCB4NTA5IGNlcnRpZmljYXRlcywgYXMKPiB3ZWxsIGFz IHRoZSBleGlzdGluZyBnY3J5cHQgZnVuY3Rpb25hbGl0eSwgYWRkIGEgbW9kdWxlIGZvciB2ZXJp ZnlpbmcKPiBhcHBlbmRlZCBzaWduYXR1cmVzLgo+IAo+IFRoaXMgaW5jbHVkZXMgYSB2ZXJpZmll ciB0aGF0IHJlcXVpcmVzIHRoYXQgTGludXgga2VybmVscyBhbmQgZ3J1YiAKPiBtb2R1bGVzCj4g aGF2ZSBhcHBlbmRlZCBzaWduYXR1cmVzLCBhbmQgY29tbWFuZHMgdG8gbWFuYWdlIHRoZSBsaXN0 IG9mIHRydXN0ZWQKPiBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmaWNhdGlvbi4KPiAKPiBWZXJpZmlj YXRpb24gbXVzdCBiZSBlbmFibGVkIGJ5IHNldHRpbmcgY2hlY2tfYXBwZW5kZWRfc2lnbmF0dXJl cy4gSWYKPiBHUlVCIGlzIGxvY2tlZCBkb3duIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQsIHZl cmlmaWNhdGlvbiB3aWxsIGJlCj4gZW5hYmxlZCBhbmQgbG9ja2VkIGF1dG9tYXRpY2FsbHkuCj4g Cj4gQXMgd2l0aCB0aGUgUEdQIHZlcmlmaWVyLCBpdCBpcyBub3QgYSBjb21wbGV0ZSBzZWN1cmUt Ym9vdCBzb2x1dGlvbjoKPiBvdGhlciBtZWNoYW5pc21zLCBzdWNoIGFzIGEgcGFzc3dvcmQgb3Ig bG9ja2Rvd24sIG11c3QgYmUgdXNlZCB0byAKPiBlbnN1cmUKPiB0aGF0IGEgdXNlciBjYW5ub3Qg ZHJvcCB0byB0aGUgZ3J1YiBzaGVsbCBhbmQgZGlzYWJsZSB2ZXJpZmljYXRpb24uCj4gCj4gU2ln bmVkLW9mZi1ieTogRGFuaWVsIEF4dGVucyA8ZGphQGF4dGVucy5uZXQ+Cj4gU2lnbmVkLW9mZi1i eTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51eC5pYm0uY29tPgo+IC0tLQo+ICBn cnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgICAgICAgICAgICAgICAgICAgfCAgMTQgKwo+ICBn cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuYyAgfCA2MjAgKysrKysr KysrKysrKysrKysrCj4gIGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNp Zy5oICB8ICAgMiArLQo+ICBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXNuMXV0aWwu YyAgICAgfCAgIDIgKy0KPiAgLi4uL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2dudXRsc19hc24xX3Rh Yi5jICAgIHwgICAyICstCj4gIC4uLi9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2l4X2FzbjFfdGFi LmMgICAgICB8ICAgMiArLQo+ICBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5j ICAgICAgICAgfCAgIDIgKy0KPiAgaW5jbHVkZS9ncnViL2ZpbGUuaCAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAyICsKPiAgOCBmaWxlcyBjaGFuZ2VkLCA2NDEgaW5zZXJ0aW9ucygrKSwg NSBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9h cHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCj4gCj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9NYWtl ZmlsZS5jb3JlLmRlZiBiL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+IGluZGV4IDYwZGIy YWRjNS4uZDY5Mzk4NmM2IDEwMDY0NAo+IC0tLSBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRl Zgo+ICsrKyBiL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+IEBAIC05NzksNiArOTc5LDIw IEBAIG1vZHVsZSA9IHsKPiAgICBjcHBmbGFncyA9ICctSSQoc3JjZGlyKS9saWIvcG9zaXhfd3Jh cCc7Cj4gIH07Cj4gCj4gK21vZHVsZSA9IHsKPiArICBuYW1lID0gYXBwZW5kZWRzaWc7Cj4gKyAg Y29tbW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuYzsKPiArICBjb21tb24g PSBjb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmM7Cj4gKyAgY29tbW9uID0gY29tbWFuZHMvYXBw ZW5kZWRzaWcvcGtjczcuYzsKPiArICBjb21tb24gPSBjb21tYW5kcy9hcHBlbmRlZHNpZy9hc24x dXRpbC5jOwo+ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL2dudXRsc19hc24xX3Rh Yi5jOwo+ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL3BraXhfYXNuMV90YWIuYzsK PiArCj4gKyAgLy8gcG9zaXggd3JhcHBlciByZXF1aXJlZCBmb3IgZ2NyeSB0byBnZXQgc3lzL3R5 cGVzLmgKPiArICBjZmxhZ3MgPSAnJChDRkxBR1NfUE9TSVgpJzsKPiArICBjcHBmbGFncyA9ICct SSQoc3JjZGlyKS9saWIvcG9zaXhfd3JhcCAKPiAtSSQoc3JjZGlyKS9saWIvbGlidGFzbjEtZ3J1 Yic7Cj4gK307Cj4gKwo+ICBtb2R1bGUgPSB7Cj4gICAgbmFtZSA9IGhkcGFybTsKPiAgICBjb21t b24gPSBjb21tYW5kcy9oZHBhcm0uYzsKPiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRz L2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMKPiBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRl ZHNpZy9hcHBlbmRlZHNpZy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAuLjVjODJiOTZhNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9ncnViLWNvcmUvY29tbWFuZHMv YXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuYwo+IEBAIC0wLDAgKzEsNjIwIEBACj4gKy8qCj4gKyAq ICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCj4gKyAqICBDb3B5cmlnaHQgKEMp IDIwMjAsIDIwMjEsIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCj4gKyAqICBD b3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEsIDIwMjIgSUJNIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAq ICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKPiArICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIAo+IGJ5Cj4gKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo+ICsgKiAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogIEdSVUIgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCj4gKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+ICsgKgo+ICsgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiArICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8Z3J1Yi90eXBlcy5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+Cj4gKyNpbmNsdWRl IDxncnViL21tLmg+Cj4gKyNpbmNsdWRlIDxncnViL2Vyci5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9k bC5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9maWxlLmg+Cj4gKyNpbmNsdWRlIDxncnViL2NvbW1hbmQu aD4KPiArI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+Cj4gKyNpbmNsdWRlIDxncnViL3BrY3MxX3Yx NS5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9pMThuLmg+Cj4gKyNpbmNsdWRlIDxncnViL2djcnlwdC9n Y3J5cHQuaD4KPiArI2luY2x1ZGUgPGdydWIva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxncnViL2V4 dGNtZC5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi92ZXJpZnkuaD4KPiArI2luY2x1ZGUgPGxpYnRhc24x Lmg+Cj4gKyNpbmNsdWRlIDxncnViL2Vudi5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9sb2NrZG93bi5o Pgo+ICsKPiArI2luY2x1ZGUgImFwcGVuZGVkc2lnLmgiCj4gKwo+ICtHUlVCX01PRF9MSUNFTlNF ICgiR1BMdjMrIik7Cj4gKwo+ICtjb25zdCBjaGFyIG1hZ2ljW10gPSAifk1vZHVsZSBzaWduYXR1 cmUgYXBwZW5kZWR+XG4iOwo+ICsKPiArLyoKPiArICogVGhpcyBzdHJ1Y3R1cmUgaXMgZXh0cmFj dGVkIGZyb20gc2NyaXB0cy9zaWduLWZpbGUuYyBpbiB0aGUgbGludXggCj4ga2VybmVsCj4gKyAq IHNvdXJjZS4gSXQgd2FzIGxpY2Vuc2VkIGFzIExHUEx2Mi4xKywgd2hpY2ggaXMgR1BMdjMrIGNv bXBhdGlibGUuCj4gKyAqLwo+ICtzdHJ1Y3QgbW9kdWxlX3NpZ25hdHVyZQo+ICt7Cj4gKyAgZ3J1 Yl91aW50OF90IGFsZ287ICAgICAgIC8qIFB1YmxpYy1rZXkgY3J5cHRvIGFsZ29yaXRobSBbMF0g Ki8KPiArICBncnViX3VpbnQ4X3QgaGFzaDsgICAgICAgLyogRGlnZXN0IGFsZ29yaXRobSBbMF0g Ki8KPiArICBncnViX3VpbnQ4X3QgaWRfdHlwZTsgICAgLyogS2V5IGlkZW50aWZpZXIgdHlwZSBb UEtFWV9JRF9QS0NTN10gKi8KPiArICBncnViX3VpbnQ4X3Qgc2lnbmVyX2xlbjsgLyogTGVuZ3Ro IG9mIHNpZ25lcidzIG5hbWUgWzBdICovCj4gKyAgZ3J1Yl91aW50OF90IGtleV9pZF9sZW47IC8q IExlbmd0aCBvZiBrZXkgaWRlbnRpZmllciBbMF0gKi8KPiArICBncnViX3VpbnQ4X3QgX19wYWRb M107Cj4gKyAgZ3J1Yl91aW50MzJfdCBzaWdfbGVuOyAgIC8qIExlbmd0aCBvZiBzaWduYXR1cmUg ZGF0YSAqLwo+ICt9IEdSVUJfUEFDS0VEOwo+ICsKPiArLyogVGhpcyByZXByZXNlbnRzIGFuIGVu dGlyZSwgcGFyc2VkLCBhcHBlbmRlZCBzaWduYXR1cmUgKi8KPiArc3RydWN0IGdydWJfYXBwZW5k ZWRfc2lnbmF0dXJlCj4gK3sKPiArICBncnViX3NpemVfdCBzaWduYXR1cmVfbGVuOyAgICAgICAg ICAgIC8qIExlbmd0aCBvZiBQS0NTIzcgZGF0YSArCj4gbWV0YWRhdGEgKyBtYWdpYyAqLwo+ICsg IHN0cnVjdCBtb2R1bGVfc2lnbmF0dXJlIHNpZ19tZXRhZGF0YTsgLyogTW9kdWxlIHNpZ25hdHVy ZSBtZXRhZGF0YSAKPiAqLwo+ICsgIHN0cnVjdCBwa2NzN19zaWduZWREYXRhIHBrY3M3OyAgICAg ICAgLyogUGFyc2VkIFBLQ1MjNyBkYXRhICovCj4gK307Cj4gKwo+ICsvKiBUcnVzdGVkIGNlcnRp ZmljYXRlcyBmb3IgdmVyaWZ5aW5nIGFwcGVuZGVkIHNpZ25hdHVyZXMgKi8KPiArc3RydWN0IHg1 MDlfY2VydGlmaWNhdGUgKmdydWJfdHJ1c3RlZF9rZXk7Cj4gKwo+ICsvKgo+ICsgKiBGb3JjZSBn Y3J5X3JzYSB0byBiZSBhIG1vZHVsZSBkZXBlbmRlbmN5Lgo+ICsgKgo+ICsgKiBJZiB3ZSB1c2Ug Z3J1Yl9jcnlwdG9fcGtfcnNhLCB0aGVuIHRoZW4gdGhlIGdjcnlfcnNhIG1vZHVsZSB3b24ndCAK PiBiZSBidWlsdAo+ICsgKiBpbiBpZiB5b3UgYWRkICdhcHBlbmRlZHNpZycgdG8gZ3J1Yi1pbnN0 YWxsIC0tbW9kdWxlcy4gWW91IHdvdWxkIAo+IG5lZWQgdG8KPiArICogYWRkICdnY3J5X3JzYScg dG9vLiBUaGF0J3MgY29uZnVzaW5nIGFuZCBzZWVtcyBzdWJvcHRpbWFsLCAKPiBlc3BlY2lhbGx5 IHdoZW4KPiArICogd2Ugb25seSBzdXBwb3J0IFJTQS4KPiArICoKPiArICogRHluYW1pYyBsb2Fk aW5nIGFsc28gY2F1c2VzIHNvbWUgY29uY2VybnMuIFdlIGNhbid0IGxvYWQgZ2NyeV9yc2EgCj4g ZnJvbSB0aGUKPiArICogdGhlIGZpbGVzeXN0ZW0gYWZ0ZXIgd2UgaW5zdGFsbCB0aGUgdmVyaWZp ZXIgLSB3ZSB3b24ndCBiZSBhYmxlIHRvIAo+IHZlcmlmeQo+ICsgKiBpdCB3aXRob3V0IGhhdmlu ZyBpdCBhbHJlYWR5IHByZXNlbnQuIFdlIGFsc28gc2hvdWxkbid0IGxvYWQgaXQgCj4gYmVmb3Jl IHdlCj4gKyAqIGluc3RhbGwgdGhlIHZlcmlmaWVyLCBiZWNhdXNlIHRoYXQgd291bGQgbWVhbiBp dCB3b3VsZG4ndCBiZSAKPiB2ZXJpZmllZCAtIGFuCj4gKyAqIGF0dGFja2VyIGNvdWxkIGluc2Vy dCBhbnkgY29kZSB0aGV5IHdhbnRlZCBpbnRvIHRoZSBtb2R1bGUuCj4gKyAqCj4gKyAqIFNvIGlu c3RlYWQsIHJlZmVyZW5jZSB0aGUgaW50ZXJuYWwgc3ltYm9sIGZyb20gZ2NyeV9yc2EuIFRoYXQg Cj4gY3JlYXRlcyBhCj4gKyAqIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGdjcnlfcnNhLCBzbyBpdCB3 aWxsIGJlIGJ1aWx0IGluIHdoZW4gdGhpcyAKPiBtb2R1bGUKPiArICogaXMgYnVpbHQgaW4uIEJl aW5nIGJ1aWx0IGluIChhc3N1bWluZyB0aGUgY29yZSBpbWFnZSBpcyBpdHNlbGYgCj4gc2lnbmVk ISkKPiArICogYWxzbyByZXNvbHZlcyBvdXIgY29uY2VybnMgYWJvdXQgbG9hZGluZyBmcm9tIHRo ZSBmaWxlc3lzdGVtLgo+ICsgKi8KPiArZXh0ZXJuIGdjcnlfcGtfc3BlY190IF9nY3J5X3B1Ymtl eV9zcGVjX3JzYTsKPiArCj4gK3N0YXRpYyBlbnVtCj4gK3sKPiArICBjaGVja19zaWdzX25vID0g MCwKPiArICBjaGVja19zaWdzX2VuZm9yY2UgPSAxLAo+ICsgIGNoZWNrX3NpZ3NfZm9yY2VkID0g Mgo+ICt9IGNoZWNrX3NpZ3MgPSBjaGVja19zaWdzX25vOwo+ICsKPiArc3RhdGljIGNvbnN0IGNo YXIgKgo+ICtncnViX2Vudl9yZWFkX3NlYyAoc3RydWN0IGdydWJfZW52X3ZhciAqdmFyIF9fYXR0 cmlidXRlX18gKCh1bnVzZWQpKSwKPiArICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZh bCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCj4gK3sKPiArICBpZiAoY2hlY2tfc2lncyA9PSBj aGVja19zaWdzX2ZvcmNlZCkKPiArICAgIHJldHVybiAiZm9yY2VkIjsKPiArICBlbHNlIGlmIChj aGVja19zaWdzID09IGNoZWNrX3NpZ3NfZW5mb3JjZSkKPiArICAgIHJldHVybiAiZW5mb3JjZSI7 Cj4gKyAgZWxzZQo+ICsgICAgcmV0dXJuICJubyI7Cj4gK30KPiArCj4gK3N0YXRpYyBjaGFyICoK PiArZ3J1Yl9lbnZfd3JpdGVfc2VjIChzdHJ1Y3QgZ3J1Yl9lbnZfdmFyICp2YXIgX19hdHRyaWJ1 dGVfXwo+ICgodW51c2VkKSksIGNvbnN0IGNoYXIgKnZhbCkKPiArewo+ICsgIC8qIERvIG5vdCBh bGxvdyB0aGUgdmFsdWUgdG8gYmUgY2hhbmdlZCBpZiBzZXQgdG8gZm9yY2VkICovCj4gKyAgaWYg KGNoZWNrX3NpZ3MgPT0gY2hlY2tfc2lnc19mb3JjZWQpCj4gKyAgICByZXR1cm4gZ3J1Yl9zdHJk dXAgKCJmb3JjZWQiKTsKPiArCj4gKyAgaWYgKCgqdmFsID09ICcyJykgfHwgKCp2YWwgPT0gJ2Yn KSkKPiArICAgIGNoZWNrX3NpZ3MgPSBjaGVja19zaWdzX2ZvcmNlZDsKPiArICBlbHNlIGlmICgo KnZhbCA9PSAnMScpIHx8ICgqdmFsID09ICdlJykpCj4gKyAgICBjaGVja19zaWdzID0gY2hlY2tf c2lnc19lbmZvcmNlOwo+ICsgIGVsc2UgaWYgKCgqdmFsID09ICcwJykgfHwgKCp2YWwgPT0gJ24n KSkKPiArICAgIGNoZWNrX3NpZ3MgPSBjaGVja19zaWdzX25vOwo+ICsKPiArICByZXR1cm4gZ3J1 Yl9zdHJkdXAgKGdydWJfZW52X3JlYWRfc2VjIChOVUxMLCBOVUxMKSk7Cj4gK30KPiArCj4gK3N0 YXRpYyBncnViX2Vycl90Cj4gK2ZpbGVfcmVhZF9hbGwgKGdydWJfZmlsZV90IGZpbGUsIGdydWJf dWludDhfdCAqKmJ1ZiwgZ3J1Yl9zaXplX3QgKmxlbikKPiArewo+ICsgIGdydWJfb2ZmX3QgZnVs bF9maWxlX3NpemU7Cj4gKyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplLCB0b3RhbF9yZWFkX3NpemUg PSAwOwo+ICsgIGdydWJfc3NpemVfdCByZWFkX3NpemU7Cj4gKwo+ICsgIGZ1bGxfZmlsZV9zaXpl ID0gZ3J1Yl9maWxlX3NpemUgKGZpbGUpOwo+ICsgIGlmIChmdWxsX2ZpbGVfc2l6ZSA9PSBHUlVC X0ZJTEVfU0laRV9VTktOT1dOKQo+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9BUkdVTUVOVCwKPiArICAgICAgICAgICAgICAgICAgICAgICBOXygiQ2Fubm90IHJlYWQgYSBm aWxlIG9mIHVua25vd24gc2l6ZSBpbnRvIGEgCj4gYnVmZmVyIikpOwo+ICsKPiArICBpZiAoZnVs bF9maWxlX3NpemUgPiBHUlVCX1NJWkVfTUFYKQo+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdS VUJfRVJSX09VVF9PRl9SQU5HRSwKPiArICAgICAgICAgICAgICAgICAgICAgICBOXygiRmlsZSBp cyB0b28gbGFyZ2UgdG8gcmVhZDogJSIKPiBQUkl1R1JVQl9VSU5UNjRfVCAiIGJ5dGVzIiksCj4g KyAgICAgICAgICAgICAgICAgICAgICAgZnVsbF9maWxlX3NpemUpOwo+ICsKPiArICBmaWxlX3Np emUgPSAoZ3J1Yl9zaXplX3QpIGZ1bGxfZmlsZV9zaXplOwo+ICsKPiArICAqYnVmID0gZ3J1Yl9t YWxsb2MgKGZpbGVfc2l6ZSk7Cj4gKyAgaWYgKCEqYnVmKQo+ICsgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgTl8o IkNvdWxkIG5vdCBhbGxvY2F0ZSBmaWxlIGRhdGEgYnVmZmVyIHNpemUKPiAlIiBQUkl1R1JVQl9T SVpFKSwKPiArICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUpOwo+ICsKPiArICB3aGls ZSAodG90YWxfcmVhZF9zaXplIDwgZmlsZV9zaXplKQo+ICsgICAgewo+ICsgICAgICByZWFkX3Np emUgPSBncnViX2ZpbGVfcmVhZCAoZmlsZSwgKmJ1ZiArIHRvdGFsX3JlYWRfc2l6ZSwKPiBmaWxl X3NpemUgLSB0b3RhbF9yZWFkX3NpemUpOwo+ICsKPiArICAgICAgaWYgKHJlYWRfc2l6ZSA8IDAp Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgZ3J1Yl9mcmVlICgqYnVmKTsKPiArICAgICAgICAg IHJldHVybiBncnViX2Vycm5vOwo+ICsgICAgICAgIH0KPiArICAgICAgZWxzZSBpZiAocmVhZF9z aXplID09IDApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgZ3J1Yl9mcmVlICgqYnVmKTsKPiAr ICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9JTywKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOXygiQ291bGQgbm90IHJlYWQgZnVsbCBmaWxlIHNpemUgIgo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJSIgUFJJdUdSVUJfU0laRSAiKSwgb25s eSAlIgo+IFBSSXVHUlVCX1NJWkUgIiBieXRlcyByZWFkIiksCgpIaSwKCkluZGVudGF0aW9uIHNl ZW1zIG9mZiBoZXJlIQoKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUs IHRvdGFsX3JlYWRfc2l6ZSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgdG90YWxfcmVhZF9z aXplICs9IHJlYWRfc2l6ZTsKPiArICAgIH0KPiArICAqbGVuID0gZmlsZV9zaXplOwo+ICsgIHJl dHVybiBHUlVCX0VSUl9OT05FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtyZWFk X2NlcnRfZnJvbV9maWxlIChncnViX2ZpbGVfdCBmLCBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAK PiAqY2VydGlmaWNhdGUpCj4gK3sKPiArICBncnViX2Vycl90IGVycjsKPiArICBncnViX3VpbnQ4 X3QgKmJ1ZjsKPiArICBncnViX3NpemVfdCBmaWxlX3NpemU7Cj4gKwo+ICsgIGVyciA9IGZpbGVf cmVhZF9hbGwgKGYsICZidWYsICZmaWxlX3NpemUpOwo+ICsgIGlmIChlcnIgIT0gR1JVQl9FUlJf Tk9ORSkKPiArICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgIGVyciA9IHBhcnNlX3g1MDlfY2VydGlm aWNhdGUgKGJ1ZiwgZmlsZV9zaXplLCBjZXJ0aWZpY2F0ZSk7Cj4gKyAgZ3J1Yl9mcmVlIChidWYp Owo+ICsKPiArICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtl eHRyYWN0X2FwcGVuZGVkX3NpZ25hdHVyZSAoY29uc3QgZ3J1Yl91aW50OF90ICpidWYsIGdydWJf c2l6ZV90IAo+IGJ1ZnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg Z3J1Yl9hcHBlbmRlZF9zaWduYXR1cmUgKnNpZykKPiArewo+ICsgIGdydWJfc2l6ZV90IHBrY3M3 X3NpemU7Cj4gKyAgZ3J1Yl9zaXplX3QgcmVtYWluaW5nX2xlbjsKPiArICBjb25zdCBncnViX3Vp bnQ4X3QgKmFwcHNpZ2RhdGEgPSBidWYgKyBidWZzaXplIC0gZ3J1Yl9zdHJsZW4gCj4gKG1hZ2lj KTsKPiArCj4gKyAgaWYgKGJ1ZnNpemUgPCBncnViX3N0cmxlbiAobWFnaWMpKQo+ICsgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsIE5fKCJGaWxlIHRvbyBzaG9y dCBmb3IKPiBzaWduYXR1cmUgbWFnaWMiKSk7Cj4gKwo+ICsgIGlmIChncnViX21lbWNtcCAoYXBw c2lnZGF0YSwgKGdydWJfdWludDhfdCAqKSBtYWdpYywgZ3J1Yl9zdHJsZW4gCj4gKG1hZ2ljKSkp Cj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgTl8oIk1p c3Npbmcgb3IgaW52YWxpZAo+IHNpZ25hdHVyZSBtYWdpYyIpKTsKPiArCj4gKyAgcmVtYWluaW5n X2xlbiA9IGJ1ZnNpemUgLSBncnViX3N0cmxlbiAobWFnaWMpOwo+ICsKPiArICBpZiAocmVtYWlu aW5nX2xlbiA8IHNpemVvZiAoc3RydWN0IG1vZHVsZV9zaWduYXR1cmUpKQo+ICsgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsIE5fKCJGaWxlIHRvbyBzaG9ydCBm b3IKPiBzaWduYXR1cmUgbWV0YWRhdGEiKSk7Cj4gKwo+ICsgIGFwcHNpZ2RhdGEgLT0gc2l6ZW9m IChzdHJ1Y3QgbW9kdWxlX3NpZ25hdHVyZSk7Cj4gKwo+ICsgIC8qIGV4dHJhY3QgdGhlIG1ldGFk YXRhICovCj4gKyAgZ3J1Yl9tZW1jcHkgKCYoc2lnLT5zaWdfbWV0YWRhdGEpLCBhcHBzaWdkYXRh LCBzaXplb2YgKHN0cnVjdAo+IG1vZHVsZV9zaWduYXR1cmUpKTsKPiArCj4gKyAgcmVtYWluaW5n X2xlbiAtPSBzaXplb2YgKHN0cnVjdCBtb2R1bGVfc2lnbmF0dXJlKTsKPiArCj4gKyAgaWYgKHNp Zy0+c2lnX21ldGFkYXRhLmlkX3R5cGUgIT0gMikKPiArICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfU0lHTkFUVVJFLCBOXygiV3Jvbmcgc2lnbmF0dXJlIAo+IHR5cGUiKSk7Cj4g Kwo+ICsgIHBrY3M3X3NpemUgPSBncnViX2JlX3RvX2NwdTMyIChzaWctPnNpZ19tZXRhZGF0YS5z aWdfbGVuKTsKPiArCj4gKyAgaWYgKHBrY3M3X3NpemUgPiByZW1haW5pbmdfbGVuKQo+ICsgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsIE5fKCJGaWxlIHRvbyBz aG9ydCBmb3IKPiBQS0NTIzcgbWVzc2FnZSIpKTsKPiArCj4gKyAgZ3J1Yl9kcHJpbnRmICgiYXBw ZW5kZWRzaWciLCAic2lnIGxlbiAlIiBQUkl1R1JVQl9TSVpFICJcbiIsIAo+IHBrY3M3X3NpemUp Owo+ICsKPiArICBzaWctPnNpZ25hdHVyZV9sZW4gPSBncnViX3N0cmxlbiAobWFnaWMpICsgc2l6 ZW9mIChzdHJ1Y3QKPiBtb2R1bGVfc2lnbmF0dXJlKSArIHBrY3M3X3NpemU7Cj4gKwo+ICsgIC8q IHJld2luZCBwb2ludGVyIGFuZCBwYXJzZSBwa2NzNyBkYXRhICovCj4gKyAgYXBwc2lnZGF0YSAt PSBwa2NzN19zaXplOwo+ICsKPiArICByZXR1cm4gcGFyc2VfcGtjczdfc2lnbmVkRGF0YSAoYXBw c2lnZGF0YSwgcGtjczdfc2l6ZSwgJnNpZy0+cGtjczcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1 Yl9lcnJfdAo+ICtncnViX3ZlcmlmeV9hcHBlbmRlZF9zaWduYXR1cmUgKGNvbnN0IGdydWJfdWlu dDhfdCAqYnVmLCBncnViX3NpemVfdCAKPiBidWZzaXplKQo+ICt7Cj4gKyAgZ3J1Yl9lcnJfdCBl cnIgPSBHUlVCX0VSUl9OT05FOwo+ICsgIGdydWJfc2l6ZV90IGRhdGFzaXplOwo+ICsgIHZvaWQg KmNvbnRleHQ7Cj4gKyAgdW5zaWduZWQgY2hhciAqaGFzaDsKPiArICBnY3J5X21waV90IGhhc2ht cGk7Cj4gKyAgZ2NyeV9lcnJfY29kZV90IHJjOwo+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRl ICpwazsKPiArICBzdHJ1Y3QgZ3J1Yl9hcHBlbmRlZF9zaWduYXR1cmUgc2lnOwo+ICsgIHN0cnVj dCBwa2NzN19zaWduZXJJbmZvICpzaTsKPiArICBpbnQgaTsKPiArCj4gKyAgaWYgKCFncnViX3Ry dXN0ZWRfa2V5KQo+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRV UkUsIE5fKCJObyB0cnVzdGVkIGtleXMgdG8KPiB2ZXJpZnkgYWdhaW5zdCIpKTsKPiArCj4gKyAg ZXJyID0gZXh0cmFjdF9hcHBlbmRlZF9zaWduYXR1cmUgKGJ1ZiwgYnVmc2l6ZSwgJnNpZyk7Cj4g KyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+ICsgICAgcmV0dXJuIGVycjsKPiArCj4gKyAg ZGF0YXNpemUgPSBidWZzaXplIC0gc2lnLnNpZ25hdHVyZV9sZW47Cj4gKwo+ICsgIGZvciAoaSA9 IDA7IGkgPCBzaWcucGtjczcuc2lnbmVySW5mb19jb3VudDsgaSsrKQo+ICsgICAgewo+ICsgICAg ICAvKgo+ICsgICAgICAgKiBUaGlzIGNvdWxkIGJlIG9wdGltaXNlZCBpbiBhIGNvdXBsZSBvZiB3 YXlzOgo+ICsgICAgICAgKiAtIHdlIGNvdWxkIG9ubHkgY29tcHV0ZSBoYXNoZXMgb25jZSBwZXIg aGFzaCB0eXBlCj4gKyAgICAgICAqIC0gd2UgY291bGQgdHJhY2sgc2lnbmVyIGluZm9ybWF0aW9u IGFuZCBvbmx5IHZlcmlmeSB3aGVyZSBJRHMgCj4gbWF0Y2gKPiArICAgICAgICogRm9yIG5vdyB3 ZSBkbyB0aGUgbmFpdmUgTyh0cnVzdGVkIGtleXMgKiBwa2NzNyBzaWduZXJzKSAKPiBhcHByb2Fj aC4KPiArICAgICAgICovCj4gKyAgICAgIHNpID0gJnNpZy5wa2NzNy5zaWduZXJJbmZvc1tpXTsK PiArICAgICAgY29udGV4dCA9IGdydWJfemFsbG9jIChzaS0+aGFzaC0+Y29udGV4dHNpemUpOwo+ ICsgICAgICBpZiAoIWNvbnRleHQpCj4gKyAgICAgICAgcmV0dXJuIGdydWJfZXJybm87Cj4gKwo+ ICsgICAgICBzaS0+aGFzaC0+aW5pdCAoY29udGV4dCk7Cj4gKyAgICAgIHNpLT5oYXNoLT53cml0 ZSAoY29udGV4dCwgYnVmLCBkYXRhc2l6ZSk7Cj4gKyAgICAgIHNpLT5oYXNoLT5maW5hbCAoY29u dGV4dCk7Cj4gKyAgICAgIGhhc2ggPSBzaS0+aGFzaC0+cmVhZCAoY29udGV4dCk7Cj4gKwo+ICsg ICAgICBncnViX2RwcmludGYgKCJhcHBlbmRlZHNpZyIsICJkYXRhIHNpemUgJSIgUFJJeEdSVUJf U0laRSAiLAo+IHNpZ25lciAlZCBoYXNoICUwMnglMDJ4JTAyeCUwMnguLi5cbiIsCj4gKyAgICAg ICAgICAgICAgICAgICAgZGF0YXNpemUsIGksIGhhc2hbMF0sIGhhc2hbMV0sIGhhc2hbMl0sIGhh c2hbM10pOwo+ICsKPiArICAgICAgZXJyID0gR1JVQl9FUlJfQkFEX1NJR05BVFVSRTsKPiArICAg ICAgZm9yIChwayA9IGdydWJfdHJ1c3RlZF9rZXk7IHBrOyBwayA9IHBrLT5uZXh0KQo+ICsgICAg ICAgIHsKPiArICAgICAgICAgIHJjID0gZ3J1Yl9jcnlwdG9fcnNhX3BhZCAoJmhhc2htcGksIGhh c2gsIHNpLT5oYXNoLCAKPiBway0+bXBpc1swXSk7Cj4gKyAgICAgICAgICBpZiAocmMpCj4gKyAg ICAgICAgICAgIHsKPiArICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfU0lHTkFUVVJFLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJFcnJv ciBwYWRkaW5nIGhhc2ggZm9yIFJTQQo+IHZlcmlmaWNhdGlvbjogJWQiKSwgcmMpOwo+ICsgICAg ICAgICAgICAgIGdydWJfZnJlZSAoY29udGV4dCk7Cj4gKyAgICAgICAgICAgICAgZ290byBjbGVh bnVwOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgcmMgPSBfZ2NyeV9wdWJrZXlf c3BlY19yc2EudmVyaWZ5ICgwLCBoYXNobXBpLAo+ICZzaS0+c2lnX21waSwgcGstPm1waXMsIE5V TEwsIE5VTEwpOwo+ICsgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoaGFzaG1waSk7Cj4gKwo+ ICsgICAgICAgICAgaWYgKHJjID09IDApCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAg ICBncnViX2RwcmludGYgKCJhcHBlbmRlZHNpZyIsICJ2ZXJpZnkgc2lnbmVyICVkIHdpdGgga2V5 Cj4gJyVzJyBzdWNjZWVkZWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBw ay0+c3ViamVjdCk7Cj4gKyAgICAgICAgICAgICAgZXJyID0gR1JVQl9FUlJfTk9ORTsKPiArICAg ICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgIGdydWJf ZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgInZlcmlmeSBzaWduZXIgJWQgd2l0aCBrZXkKPiAnJXMn IGZhaWxlZCB3aXRoICVkXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBpLCBway0+c3Vi amVjdCwgcmMpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgIGdydWJfZnJlZSAoY29udGV4dCk7 Cj4gKwo+ICsgICAgICBpZiAoZXJyID09IEdSVUJfRVJSX05PTkUpCj4gKyAgICAgICAgYnJlYWs7 Cj4gKyAgICB9Cj4gKwo+ICsgIC8qIElmIHdlIGRpZG4ndCB2ZXJpZnksIHByb3ZpZGUgYSBuZWF0 IG1lc3NhZ2UgKi8KPiArICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4gKyAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgTl8oIkZhaWxlZCB0byB2ZXJpZnkgc2lnbmF0dXJlIGFnYWluc3QgYSB0cnVzdGVkIAo+IGtl eSIpKTsKPiArCj4gK2NsZWFudXA6Cj4gKyAgcGtjczdfc2lnbmVkRGF0YV9yZWxlYXNlICgmc2ln LnBrY3M3KTsKPiArCj4gKyAgcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGdydWJfZXJy X3QKPiArZ3J1Yl9jbWRfdmVyaWZ5X3NpZ25hdHVyZSAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0 cmlidXRlX18KPiAoKHVudXNlZCkpLCBpbnQgYXJnYywgY2hhciAqKmFyZ3MpCj4gK3sKPiArICBn cnViX2ZpbGVfdCBmOwo+ICsgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKPiArICBn cnViX3VpbnQ4X3QgKmRhdGE7Cj4gKyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplOwo+ICsKPiArICBp ZiAoYXJnYyA8IDEpCj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VN RU5ULCBOXygib25lIGFyZ3VtZW50IAo+IGV4cGVjdGVkIikpOwo+ICsKPiArICBncnViX2Rwcmlu dGYgKCJhcHBlbmRlZHNpZyIsICJ2ZXJpZnlpbmcgJXNcbiIsIGFyZ3NbMF0pOwo+ICsKPiArICBm ID0gZ3J1Yl9maWxlX29wZW4gKGFyZ3NbMF0sIEdSVUJfRklMRV9UWVBFX1ZFUklGWV9TSUdOQVRV UkUpOwo+ICsgIGlmICghZikKPiArICAgIHsKPiArICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKPiAr ICAgICAgZ290byBjbGVhbnVwOwo+ICsgICAgfQo+ICsKPiArICBlcnIgPSBmaWxlX3JlYWRfYWxs IChmLCAmZGF0YSwgJmZpbGVfc2l6ZSk7Cj4gKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+ ICsgICAgZ290byBjbGVhbnVwOwo+ICsKPiArICBlcnIgPSBncnViX3ZlcmlmeV9hcHBlbmRlZF9z aWduYXR1cmUgKGRhdGEsIGZpbGVfc2l6ZSk7Cj4gKwo+ICsgIGdydWJfZnJlZSAoZGF0YSk7Cj4g Kwo+ICtjbGVhbnVwOgo+ICsgIGlmIChmKQo+ICsgICAgZ3J1Yl9maWxlX2Nsb3NlIChmKTsKPiAr ICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtncnViX2NtZF9k aXN0cnVzdCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50 Cj4gYXJnYywgY2hhciAqKmFyZ3MpCj4gK3sKPiArICB1bnNpZ25lZCBsb25nIGNlcnRfbnVtLCBp Owo+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0LCAqcHJldjsKPiArCj4gKyAgaWYg KGFyZ2MgIT0gMSkKPiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1F TlQsIE5fKCJPbmUgYXJndW1lbnQgCj4gZXhwZWN0ZWQiKSk7Cj4gKwo+ICsgIGdydWJfZXJybm8g PSBHUlVCX0VSUl9OT05FOwo+ICsgIGNlcnRfbnVtID0gZ3J1Yl9zdHJ0b3VsIChhcmdzWzBdLCBO VUxMLCAxMCk7Cj4gKyAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkKPiArICAgIHJl dHVybiBncnViX2Vycm5vOwo+ICsKPiArICBpZiAoY2VydF9udW0gPCAxKQo+ICsgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwKPiArICAgICAgICAgICAgICAgICAg ICAgICBOXygiQ2VydGlmaWNhdGUgbnVtYmVyIHRvbyBzbWFsbCAtIG51bWJlcnMKPiBzdGFydCBh dCAxIikpOwo+ICsKPiArICBpZiAoY2VydF9udW0gPT0gMSkKPiArICAgIHsKPiArICAgICAgY2Vy dCA9IGdydWJfdHJ1c3RlZF9rZXk7Cj4gKyAgICAgIGdydWJfdHJ1c3RlZF9rZXkgPSBjZXJ0LT5u ZXh0Owo+ICsKPiArICAgICAgY2VydGlmaWNhdGVfcmVsZWFzZSAoY2VydCk7Cj4gKyAgICAgIGdy dWJfZnJlZSAoY2VydCk7Cj4gKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICsgICAgfQo+ ICsgIGkgPSAyOwo+ICsgIHByZXYgPSBncnViX3RydXN0ZWRfa2V5Owo+ICsgIGNlcnQgPSBncnVi X3RydXN0ZWRfa2V5LT5uZXh0Owo+ICsgIHdoaWxlIChjZXJ0KQo+ICsgICAgewo+ICsgICAgICBp ZiAoaSA9PSBjZXJ0X251bSkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICBwcmV2LT5uZXh0ID0g Y2VydC0+bmV4dDsKPiArICAgICAgICAgIGNlcnRpZmljYXRlX3JlbGVhc2UgKGNlcnQpOwo+ICsg ICAgICAgICAgZ3J1Yl9mcmVlIChjZXJ0KTsKPiArICAgICAgICAgIHJldHVybiBHUlVCX0VSUl9O T05FOwo+ICsgICAgICAgIH0KPiArICAgICAgaSsrOwo+ICsgICAgICBwcmV2ID0gY2VydDsKPiAr ICAgICAgY2VydCA9IGNlcnQtPm5leHQ7Cj4gKyAgICB9Cj4gKwo+ICsgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCj4gKyAgICAgICAgICAgICAgICAgICAgIE5fKCJO byBjZXJ0aWZpY2F0ZSBudW1iZXIgJWx1IGZvdW5kIC0gb25seSAlbHUKPiBjZXJ0aWZpY2F0ZXMg aW4gdGhlIHN0b3JlIiksCj4gKyAgICAgICAgICAgICAgICAgICAgIGNlcnRfbnVtLCBpIC0gMSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBncnViX2Vycl90Cj4gK2dydWJfY21kX3RydXN0IChncnViX2Nv bW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQKPiBhcmdjLCBjaGFyICoq YXJncykKPiArewo+ICsgIGdydWJfZmlsZV90IGNlcnRmOwo+ICsgIHN0cnVjdCB4NTA5X2NlcnRp ZmljYXRlICpjZXJ0ID0gTlVMTDsKPiArICBncnViX2Vycl90IGVycjsKPiArCj4gKyAgaWYgKGFy Z2MgIT0gMSkKPiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQs IE5fKCJvbmUgYXJndW1lbnQgCj4gZXhwZWN0ZWQiKSk7Cj4gKwo+ICsgIGNlcnRmID0gZ3J1Yl9m aWxlX29wZW4gKGFyZ3NbMF0sIEdSVUJfRklMRV9UWVBFX0NFUlRJRklDQVRFX1RSVVNUIHwKPiBH UlVCX0ZJTEVfVFlQRV9OT19ERUNPTVBSRVNTKTsKPiArICBpZiAoIWNlcnRmKQo+ICsgICAgcmV0 dXJuIGdydWJfZXJybm87Cj4gKwo+ICsgIGNlcnQgPSBncnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1 Y3QgeDUwOV9jZXJ0aWZpY2F0ZSkpOwo+ICsgIGlmICghY2VydCkKPiArICAgIHJldHVybiBncnVi X2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCBOXygiQ291bGQgbm90IGFsbG9jYXRlCj4g bWVtb3J5IGZvciBjZXJ0aWZpY2F0ZSIpKTsKPiArCj4gKyAgZXJyID0gcmVhZF9jZXJ0X2Zyb21f ZmlsZSAoY2VydGYsIGNlcnQpOwo+ICsgIGdydWJfZmlsZV9jbG9zZSAoY2VydGYpOwo+ICsgIGlm IChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKPiArICAgIHsKPiArICAgICAgZ3J1Yl9mcmVlIChjZXJ0 KTsKPiArICAgICAgcmV0dXJuIGVycjsKPiArICAgIH0KPiArICBncnViX2RwcmludGYgKCJhcHBl bmRlZHNpZyIsICJMb2FkZWQgY2VydGlmaWNhdGUgd2l0aCBDTjogJXNcbiIsCj4gY2VydC0+c3Vi amVjdCk7Cj4gKwo+ICsgIGNlcnQtPm5leHQgPSBncnViX3RydXN0ZWRfa2V5Owo+ICsgIGdydWJf dHJ1c3RlZF9rZXkgPSBjZXJ0Owo+ICsKPiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPiArfQo+ ICsKPiArc3RhdGljIGdydWJfZXJyX3QKPiArZ3J1Yl9jbWRfbGlzdCAoZ3J1Yl9jb21tYW5kX3Qg Y21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IGFyZ2MKPiBfX2F0dHJpYnV0ZV9fICgo dW51c2VkKSksCj4gKyAgICAgICAgICAgICAgIGNoYXIgKiphcmdzIF9fYXR0cmlidXRlX18gKCh1 bnVzZWQpKSkKPiArewo+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0Owo+ICsgIGlu dCBjZXJ0X251bSA9IDE7Cj4gKyAgZ3J1Yl9zaXplX3QgaTsKPiArCj4gKyAgZm9yIChjZXJ0ID0g Z3J1Yl90cnVzdGVkX2tleTsgY2VydDsgY2VydCA9IGNlcnQtPm5leHQpCj4gKyAgICB7Cj4gKyAg ICAgIGdydWJfcHJpbnRmIChOXygiQ2VydGlmaWNhdGUgJWQ6XG4iKSwgY2VydF9udW0pOwo+ICsK PiArICAgICAgZ3J1Yl9wcmludGYgKE5fKCJcdFNlcmlhbDogIikpOwo+ICsgICAgICBmb3IgKGkg PSAwOyBpIDwgY2VydC0+c2VyaWFsX2xlbiAtIDE7IGkrKykKPiArICAgICAgICB7Cj4gKyAgICAg ICAgICBncnViX3ByaW50ZiAoIiUwMng6IiwgY2VydC0+c2VyaWFsW2ldKTsKPiArICAgICAgICB9 Cj4gKyAgICAgIGdydWJfcHJpbnRmICgiJTAyeFxuIiwgY2VydC0+c2VyaWFsW2NlcnQtPnNlcmlh bF9sZW4gLSAxXSk7Cj4gKwo+ICsgICAgICBncnViX3ByaW50ZiAoIlx0Q046ICVzXG5cbiIsIGNl cnQtPnN1YmplY3QpOwo+ICsgICAgICBjZXJ0X251bSsrOwo+ICsgICAgfQo+ICsKPiArICByZXR1 cm4gR1JVQl9FUlJfTk9ORTsKPiArfQo+ICsKPiArc3RhdGljIGdydWJfZXJyX3QKPiArYXBwZW5k ZWRzaWdfaW5pdCAoZ3J1Yl9maWxlX3QgaW8gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBlbnVt Cj4gZ3J1Yl9maWxlX3R5cGUgdHlwZSwKPiArICAgICAgICAgICAgICAgICAgdm9pZCAqKmNvbnRl eHQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBlbnVtCj4gZ3J1Yl92ZXJpZnlfZmxhZ3MgKmZs YWdzKQo+ICt7Cj4gKyAgaWYgKGNoZWNrX3NpZ3MgPT0gY2hlY2tfc2lnc19ubykKPiArICAgIHsK PiArICAgICAgKmZsYWdzID0gR1JVQl9WRVJJRllfRkxBR1NfU0tJUF9WRVJJRklDQVRJT047Cj4g KyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICsgICAgfQo+ICsKPiArICBzd2l0Y2ggKHR5 cGUgJiBHUlVCX0ZJTEVfVFlQRV9NQVNLKQo+ICsgICAgewo+ICsgICAgICBjYXNlIEdSVUJfRklM RV9UWVBFX0NFUlRJRklDQVRFX1RSVVNUOgo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogVGhp cyBpcyBhIGNlcnRpZmljYXRlIHRvIGFkZCB0byB0cnVzdGVkIGtleWNoYWluLgo+ICsgICAgICAg ICAqCj4gKyAgICAgICAgICogVGhpcyBuZWVkcyB0byBiZSB2ZXJpZmllZCBvciBibG9ja2VkLiBJ ZGVhbGx5IHdlJ2Qgd3JpdGUgYW4gCj4geDUwOQo+ICsgICAgICAgICAqIHZlcmlmaWVyLCBidXQg d2UgbGFjayB0aGUgaHVicmlzIHJlcXVpcmVkIHRvIHRha2UgdGhpcyBvbi4gCj4gSW5zdGVhZCwK PiArICAgICAgICAgKiByZXF1aXJlIHRoYXQgaXQgaGF2ZSBhbiBhcHBlbmRlZCBzaWduYXR1cmUu Cj4gKyAgICAgICAgICovCj4gKwo+ICsgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLwo+ICsKPiAr ICAgICAgY2FzZSBHUlVCX0ZJTEVfVFlQRV9MSU5VWF9LRVJORUw6Cj4gKyAgICAgIGNhc2UgR1JV Ql9GSUxFX1RZUEVfR1JVQl9NT0RVTEU6Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiBBcHBl bmRlZCBzaWduYXR1cmVzIGFyZSBvbmx5IGRlZmluZWQgZm9yIEVMRiBiaW5hcmllcy4KPiArICAg ICAgICAgKiBPdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIGNhdXRpb24sIHdlIG9ubHkgdmVyaWZ5IExp bnV4IAo+IGtlcm5lbHMgYW5kCj4gKyAgICAgICAgICogR1JVQiBtb2R1bGVzIGF0IHRoaXMgcG9p bnQuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgKmZsYWdzID0gR1JVQl9WRVJJRllfRkxBR1Nf U0lOR0xFX0NIVU5LOwo+ICsgICAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICsKPiArICAg ICAgY2FzZSBHUlVCX0ZJTEVfVFlQRV9BQ1BJX1RBQkxFOgo+ICsgICAgICBjYXNlIEdSVUJfRklM RV9UWVBFX0RFVklDRV9UUkVFX0lNQUdFOgo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogSXQg aXMgcG9zc2libGUgdG8gdXNlIGFwcGVuZGVkIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gCj4gd2l0 aG91dAo+ICsgICAgICAgICAqIGxvY2tkb3duIC0gbGlrZSB0aGUgUEdQIHZlcmlmaWVyLiBXaGVu IGNvbWJpbmVkIHdpdGggYW4gCj4gZW1iZWRkZWQKPiArICAgICAgICAgKiBjb25maWcgZmlsZSBp biBhIHNpZ25lZCBncnViIGJpbmFyeSwgdGhpcyBjb3VsZCBzdGlsbCBiZSBhCj4gbWVhbmluZ2Z1 bAo+ICsgICAgICAgICAqIHNlY3VyZS1ib290IGNoYWluIC0gc28gbG9uZyBhcyBpdCBpc24ndCBz dWJ2ZXJ0ZWQgYnkKPiBzb21ldGhpbmcgbGlrZSBhCj4gKyAgICAgICAgICogcm91Z2UgQUNQSSB0 YWJsZSBvciBEVCBpbWFnZS4gRGVmZXIgdGhlbSBleHBsaWNpdGx5Lgo+ICsgICAgICAgICAqLwo+ ICsgICAgICAgICpmbGFncyA9IEdSVUJfVkVSSUZZX0ZMQUdTX0RFRkVSX0FVVEg7Cj4gKyAgICAg ICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gKwo+ICsgICAgICBkZWZhdWx0Ogo+ICsgICAgICAg ICpmbGFncyA9IEdSVUJfVkVSSUZZX0ZMQUdTX1NLSVBfVkVSSUZJQ0FUSU9OOwo+ICsgICAgICAg IHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9l cnJfdAo+ICthcHBlbmRlZHNpZ193cml0ZSAodm9pZCAqY3R4dCBfX2F0dHJpYnV0ZV9fICgodW51 c2VkKSksIHZvaWQgKmJ1ZiwKPiBncnViX3NpemVfdCBzaXplKQo+ICt7Cj4gKyAgcmV0dXJuIGdy dWJfdmVyaWZ5X2FwcGVuZGVkX3NpZ25hdHVyZSAoYnVmLCBzaXplKTsKPiArfQo+ICsKPiArc3Ry dWN0IGdydWJfZmlsZV92ZXJpZmllciBncnViX2FwcGVuZGVkc2lnX3ZlcmlmaWVyID0gewo+ICsg IC5uYW1lID0gImFwcGVuZGVkc2lnIiwKPiArICAuaW5pdCA9IGFwcGVuZGVkc2lnX2luaXQsCj4g KyAgLndyaXRlID0gYXBwZW5kZWRzaWdfd3JpdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9z c2l6ZV90Cj4gK3BzZXVkb19yZWFkIChzdHJ1Y3QgZ3J1Yl9maWxlICpmaWxlLCBjaGFyICpidWYs IGdydWJfc2l6ZV90IGxlbikKPiArewo+ICsgIGdydWJfbWVtY3B5IChidWYsIChncnViX3VpbnQ4 X3QgKikgZmlsZS0+ZGF0YSArIGZpbGUtPm9mZnNldCwgbGVuKTsKPiArICByZXR1cm4gbGVuOwo+ ICt9Cj4gKwo+ICsvKiBGaWxlc3lzdGVtIGRlc2NyaXB0b3IuICAqLwo+ICtzdGF0aWMgc3RydWN0 IGdydWJfZnMgcHNldWRvX2ZzID0geyAubmFtZSA9ICJwc2V1ZG8iLCAuZnNfcmVhZCA9IAo+IHBz ZXVkb19yZWFkIH07Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9jb21tYW5kX3QgY21kX3ZlcmlmeSwgY21k X2xpc3QsIGNtZF9kaXN0cnVzdCwgY21kX3RydXN0Owo+ICsKPiArR1JVQl9NT0RfSU5JVCAoYXBw ZW5kZWRzaWcpCj4gK3sKPiArICBpbnQgcmM7Cj4gKyAgc3RydWN0IGdydWJfbW9kdWxlX2hlYWRl ciAqaGVhZGVyOwo+ICsKPiArICAvKiBJZiBpbiBsb2NrZG93biwgaW1tZWRpYXRlbHkgZW50ZXIg Zm9yY2VkIG1vZGUgKi8KPiArICBpZiAoZ3J1Yl9pc19sb2NrZG93biAoKSA9PSBHUlVCX0xPQ0tE T1dOX0VOQUJMRUQpCj4gKyAgICBjaGVja19zaWdzID0gY2hlY2tfc2lnc19mb3JjZWQ7Cj4gKwo+ ICsgIGdydWJfdHJ1c3RlZF9rZXkgPSBOVUxMOwo+ICsgIGdydWJfcmVnaXN0ZXJfdmFyaWFibGVf aG9vayAoImNoZWNrX2FwcGVuZGVkX3NpZ25hdHVyZXMiLAo+IGdydWJfZW52X3JlYWRfc2VjLCBn cnViX2Vudl93cml0ZV9zZWMpOwo+ICsgIGdydWJfZW52X2V4cG9ydCAoImNoZWNrX2FwcGVuZGVk X3NpZ25hdHVyZXMiKTsKPiArCj4gKyAgcmMgPSBhc24xX2luaXQgKCk7Cj4gKyAgaWYgKHJjKQo+ ICsgICAgZ3J1Yl9mYXRhbCAoIkVycm9yIGluaXRpbmcgQVNOLjEgZGF0YSBzdHJ1Y3R1cmVzOiAl ZDogJXNcbiIsIHJjLAo+IGFzbjFfc3RyZXJyb3IgKHJjKSk7Cj4gKwo+ICsgIEZPUl9NT0RVTEVT IChoZWFkZXIpCj4gKyAgewo+ICsgICAgc3RydWN0IGdydWJfZmlsZSBwc2V1ZG9fZmlsZTsKPiAr ICAgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpwayA9IE5VTEw7Cj4gKyAgICBncnViX2Vycl90 IGVycjsKPiArCj4gKyAgICAvKiBOb3QgYW4gWC41MDkgY2VydGlmaWNhdGUsIHNraXAuICovCj4g KyAgICBpZiAoaGVhZGVyLT50eXBlICE9IE9CSl9UWVBFX1g1MDlfUFVCS0VZKQo+ICsgICAgICBj b250aW51ZTsKPiArCj4gKyAgICBncnViX21lbXNldCAoJnBzZXVkb19maWxlLCAwLCBzaXplb2Yg KHBzZXVkb19maWxlKSk7Cj4gKyAgICBwc2V1ZG9fZmlsZS5mcyA9ICZwc2V1ZG9fZnM7Cj4gKyAg ICBwc2V1ZG9fZmlsZS5zaXplID0gaGVhZGVyLT5zaXplIC0gc2l6ZW9mIChzdHJ1Y3QgCj4gZ3J1 Yl9tb2R1bGVfaGVhZGVyKTsKPiArICAgIHBzZXVkb19maWxlLmRhdGEgPSAoY2hhciAqKSBoZWFk ZXIgKyBzaXplb2YgKHN0cnVjdCAKPiBncnViX21vZHVsZV9oZWFkZXIpOwo+ICsKPiArICAgIGdy dWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgIkZvdW5kIGFuIHg1MDkga2V5LCBzaXplPSUiCj4g UFJJdUdSVUJfVUlOVDY0X1QgIlxuIiwKPiArICAgICAgICAgICAgICAgICAgcHNldWRvX2ZpbGUu c2l6ZSk7Cj4gKwo+ICsgICAgcGsgPSBncnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgeDUwOV9j ZXJ0aWZpY2F0ZSkpOwo+ICsgICAgaWYgKCFwaykKPiArICAgICAgewo+ICsgICAgICAgIGdydWJf ZmF0YWwgKCJPdXQgb2YgbWVtb3J5IGxvYWRpbmcgaW5pdGlhbCBjZXJ0aWZpY2F0ZXMiKTsKPiAr ICAgICAgfQoKU3VnZ2VzdGlvbiA6IEdvb2QgdG8gaGF2ZSB3aXRob3V0IGJyYWNrZXRzIGlmIGp1 c3Qgb25lIGxpbmUgY29uZGl0aW9uIQpUaGFuayB5b3UhCgpSZXZpZXdlZC1ieTrCoEF2bmlzaMKg Q2hvdWhhbsKgPGF2bmlzaEBsaW51eC5pYm0uY29tPgoKPiArCj4gKyAgICBlcnIgPSByZWFkX2Nl cnRfZnJvbV9maWxlICgmcHNldWRvX2ZpbGUsIHBrKTsKPiArICAgIGlmIChlcnIgIT0gR1JVQl9F UlJfTk9ORSkKPiArICAgICAgZ3J1Yl9mYXRhbCAoIkVycm9yIGxvYWRpbmcgaW5pdGlhbCBrZXk6 ICVzIiwgZ3J1Yl9lcnJtc2cpOwo+ICsKPiArICAgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2ln IiwgImxvYWRlZCBjZXJ0aWZpY2F0ZSBDTj0nJXMnXG4iLCAKPiBway0+c3ViamVjdCk7Cj4gKwo+ ICsgICAgcGstPm5leHQgPSBncnViX3RydXN0ZWRfa2V5Owo+ICsgICAgZ3J1Yl90cnVzdGVkX2tl eSA9IHBrOwo+ICsgIH0KPiArCj4gKyAgY21kX3RydXN0ID0gZ3J1Yl9yZWdpc3Rlcl9jb21tYW5k ICgidHJ1c3RfY2VydGlmaWNhdGUiLAo+IGdydWJfY21kX3RydXN0LCBOXygiWDUwOV9DRVJUSUZJ Q0FURSIpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkFkZCBY NTA5X0NFUlRJRklDQVRFIHRvCj4gdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMuIikpOwo+ICsgIGNtZF9s aXN0ID0gZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgibGlzdF9jZXJ0aWZpY2F0ZXMiLCAKPiBncnVi X2NtZF9saXN0LCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygi U2hvdyB0aGUgbGlzdCBvZiB0cnVzdGVkIHg1MDkKPiBjZXJ0aWZpY2F0ZXMuIikpOwo+ICsgIGNt ZF92ZXJpZnkgPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJ2ZXJpZnlfYXBwZW5kZWQiLAo+IGdy dWJfY21kX3ZlcmlmeV9zaWduYXR1cmUsIE5fKCJGSUxFIiksCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTl8oIlZlcmlmeSBGSUxFIGFnYWluc3QgdGhlCj4gdHJ1c3Rl ZCB4NTA5IGNlcnRpZmljYXRlcy4iKSk7Cj4gKyAgY21kX2Rpc3RydXN0ID0gZ3J1Yl9yZWdpc3Rl cl9jb21tYW5kICgiZGlzdHJ1c3RfY2VydGlmaWNhdGUiLAo+IGdydWJfY21kX2Rpc3RydXN0LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkNFUlRfTlVNQkVS IiksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygiUmVtb3Zl IENFUlRfTlVNQkVSIChhcwo+IGxpc3RlZCBieSBsaXN0X2NlcnRpZmljYXRlcykiCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZyb20gdHJ1c3RlZCAKPiBj ZXJ0aWZpY2F0ZXMuIikpOwo+ICsKPiArICBncnViX3ZlcmlmaWVyX3JlZ2lzdGVyICgmZ3J1Yl9h cHBlbmRlZHNpZ192ZXJpZmllcik7Cj4gKyAgZ3J1Yl9kbF9zZXRfcGVyc2lzdGVudCAobW9kKTsK PiArfQo+ICsKPiArR1JVQl9NT0RfRklOSSAoYXBwZW5kZWRzaWcpCj4gK3sKPiArICAvKgo+ICsg ICAqIGdydWJfZGxfc2V0X3BlcnNpc3RlbnQgc2hvdWxkIHByZXZlbnQgdGhpcyBmcm9tIGFjdHVh bGx5IHJ1bm5pbmcsIAo+IGJ1dAo+ICsgICAqIGl0IGRvZXMgc3RpbGwgcnVuIHVuZGVyIGVtdS4K PiArICAgKi8KPiArCj4gKyAgZ3J1Yl92ZXJpZmllcl91bnJlZ2lzdGVyICgmZ3J1Yl9hcHBlbmRl ZHNpZ192ZXJpZmllcik7Cj4gKyAgZ3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKGNtZF92ZXJpZnkp Owo+ICsgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChjbWRfbGlzdCk7Cj4gKyAgZ3J1Yl91bnJl Z2lzdGVyX2NvbW1hbmQgKGNtZF90cnVzdCk7Cj4gKyAgZ3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQg KGNtZF9kaXN0cnVzdCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2Fw cGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKPiBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNp Zy9hcHBlbmRlZHNpZy5oCj4gaW5kZXggZmE1OTMwMmM4Li42MGVlMGYyZmEgMTAwNjQ0Cj4gLS0t IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKPiArKysgYi9n cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaAo+IEBAIC0xOCw3ICsx OCw3IEBACj4gICAqLwo+IAo+ICAjaW5jbHVkZSA8Z3J1Yi9jcnlwdG8uaD4KPiAtI2luY2x1ZGUg PGdydWIvbGlidGFzbjEuaD4KPiArI2luY2x1ZGUgPGxpYnRhc24xLmg+Cj4gCj4gIGV4dGVybiBh c24xX25vZGUgX2dudXRsc19nbnV0bHNfYXNuOwo+ICBleHRlcm4gYXNuMV9ub2RlIF9nbnV0bHNf cGtpeF9hc247Cj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9h c24xdXRpbC5jCj4gYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXNuMXV0aWwuYwo+ IGluZGV4IDYwOWQwZWNmMi4uYTJjNDY3MjRhIDEwMDY0NAo+IC0tLSBhL2dydWItY29yZS9jb21t YW5kcy9hcHBlbmRlZHNpZy9hc24xdXRpbC5jCj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2Fw cGVuZGVkc2lnL2FzbjF1dGlsLmMKPiBAQCAtMTcsNyArMTcsNyBAQAo+ICAgKiAgYWxvbmcgd2l0 aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+ICAg Ki8KPiAKPiAtI2luY2x1ZGUgPGdydWIvbGlidGFzbjEuaD4KPiArI2luY2x1ZGUgPGxpYnRhc24x Lmg+Cj4gICNpbmNsdWRlIDxncnViL3R5cGVzLmg+Cj4gICNpbmNsdWRlIDxncnViL2Vyci5oPgo+ ICAjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMv YXBwZW5kZWRzaWcvZ251dGxzX2FzbjFfdGFiLmMKPiBiL2dydWItY29yZS9jb21tYW5kcy9hcHBl bmRlZHNpZy9nbnV0bHNfYXNuMV90YWIuYwo+IGluZGV4IGRkZDEzMTRlNi4uOGM0ZWI4MWQ3IDEw MDY0NAo+IC0tLSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9nbnV0bHNfYXNuMV90 YWIuYwo+ICsrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9nbnV0bHNfYXNuMV90 YWIuYwo+IEBAIC0xLDUgKzEsNSBAQAo+ICAjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+IC0jaW5jbHVk ZSA8Z3J1Yi9saWJ0YXNuMS5oPgo+ICsjaW5jbHVkZSA8bGlidGFzbjEuaD4KPiAKPiAgY29uc3Qg YXNuMV9zdGF0aWNfbm9kZSBnbnV0bHNfYXNuMV90YWJbXSA9IHsKPiAgICB7ICJHTlVUTFMiLCA1 MzY4NzI5NzYsIE5VTEwgfSwKPiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVu ZGVkc2lnL3BraXhfYXNuMV90YWIuYwo+IGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2ln L3BraXhfYXNuMV90YWIuYwo+IGluZGV4IGFkZWY2OWQ5NS4uOGVlZWFjMDQ3IDEwMDY0NAo+IC0t LSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2l4X2FzbjFfdGFiLmMKPiArKysg Yi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtpeF9hc24xX3RhYi5jCj4gQEAgLTEs NSArMSw1IEBACj4gICNpbmNsdWRlIDxncnViL21tLmg+Cj4gLSNpbmNsdWRlIDxncnViL2xpYnRh c24xLmg+Cj4gKyNpbmNsdWRlIDxsaWJ0YXNuMS5oPgo+IAo+ICBjb25zdCBhc24xX3N0YXRpY19u b2RlIHBraXhfYXNuMV90YWJbXSA9IHsKPiAgICB7ICJQS0lYMSIsIDUzNjg3NTAyNCwgTlVMTCB9 LAo+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jCj4g Yi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jCj4gaW5kZXggZWI5YTFjYTBm Li5iMTEzYWMzOGIgMTAwNjQ0Cj4gLS0tIGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2ln L3g1MDkuYwo+ICsrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKPiBA QCAtMTcsNyArMTcsNyBAQAo+ICAgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+ICAgKi8KPiAKPiAtI2luY2x1ZGUgPGdydWIv bGlidGFzbjEuaD4KPiArI2luY2x1ZGUgPGxpYnRhc24xLmg+Cj4gICNpbmNsdWRlIDxncnViL3R5 cGVzLmg+Cj4gICNpbmNsdWRlIDxncnViL2Vyci5oPgo+ICAjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2dydWIvZmlsZS5oIGIvaW5jbHVkZS9ncnViL2ZpbGUuaAo+ IGluZGV4IGE1YmYzYTc5Mi4uZDY3OGRlMDYzIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZ3J1Yi9m aWxlLmgKPiArKysgYi9pbmNsdWRlL2dydWIvZmlsZS5oCj4gQEAgLTgwLDYgKzgwLDggQEAgZW51 bSBncnViX2ZpbGVfdHlwZQo+ICAgICAgR1JVQl9GSUxFX1RZUEVfUFVCTElDX0tFWSwKPiAgICAg IC8qIEZpbGUgaG9sZGluZyBwdWJsaWMga2V5IHRvIGFkZCB0byB0cnVzZWQga2V5cy4gICovCj4g ICAgICBHUlVCX0ZJTEVfVFlQRV9QVUJMSUNfS0VZX1RSVVNULAo+ICsgICAgLyogRmlsZSBob2xk aW5nIHg1MDkgY2VydGlmaWNpYXRlIHRvIGFkZCB0byB0cnVzdGVkIGtleXMuICAqLwo+ICsgICAg R1JVQl9GSUxFX1RZUEVfQ0VSVElGSUNBVEVfVFJVU1QsCj4gICAgICAvKiBGaWxlIG9mIHdoaWNo IHdlIGludGVuZCB0byBwcmludCBhIGJsb2NrbGlzdCB0byB0aGUgdXNlci4gICovCj4gICAgICBH UlVCX0ZJTEVfVFlQRV9QUklOVF9CTE9DS0xJU1QsCj4gICAgICAvKiBGaWxlIHdlIGludGVuZCB0 byB1c2UgZm9yIHRlc3QgbG9hZGluZyBvciB0ZXN0aW5nIHNwZWVkLiAgKi8KCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBs aXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0 aW5mby9ncnViLWRldmVsCg==