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 2B21CCA0FE1 for ; Mon, 25 Aug 2025 11:18:40 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uqVAf-0007Th-QP; Mon, 25 Aug 2025 07:15:29 -0400 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 1uqVAc-0007T0-8B for grub-devel@gnu.org; Mon, 25 Aug 2025 07:15:26 -0400 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 1uqVAW-0003eE-Jf for grub-devel@gnu.org; Mon, 25 Aug 2025 07:15:25 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57P9Puvh027809; Mon, 25 Aug 2025 11:15:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=fxr/tAW344imaWIg+ YNbNhziVoZlVvAbkkwhNcMn834=; b=FW7eCJYukSPnj3wkoE2sNt3caTzcFpWzZ mOFrOnJJ2romMSnk2Gz190UEJnd3gBtdGsazBLHep/bZJW9y2bP7Sa/fCwfaB2hL JQ3Zw3t+PNuNKubExJmkThTkWmsSXvquIWE0CcMn/YmBRdbcs/5JX8O+95QjbR3k f9JHeB2ilxhFRI/BMrFK9loansh0i7S6qdq2FVD24mUABugpYLYX+e/pcMX0dNgU +fPqaqcVsZ8VKpgFwSUkbdoO9trjvwjQukH0YFz6owjzRQRm3H4nLrBQ3EK2kjP1 bzp8+Z2e9Zw2vDUoGhFY0T0WxSuOBefJatYSDLrFUGjRcKBto1g6w== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 48q974yvc6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 25 Aug 2025 11:15:16 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 57P7NEw9018009; Mon, 25 Aug 2025 11:15:15 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 48qtp357a8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 25 Aug 2025 11:15:15 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 57PBFBvn59441454 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 25 Aug 2025 11:15:11 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1D52D2004B; Mon, 25 Aug 2025 11:15:11 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C725420040; Mon, 25 Aug 2025 11:15:06 +0000 (GMT) Received: from localhost.localdomain (unknown [9.39.23.29]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 25 Aug 2025 11:15:06 +0000 (GMT) From: Sudhakar Kuppusamy To: grub-devel@gnu.org Cc: dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com, Sudhakar Kuppusamy , sridharm@linux.ibm.com, Javier Martinez Canillas , Daniel Kiper Subject: [PATCH v9 08/21] appended signatures: Parse X.509 certificates Date: Mon, 25 Aug 2025 16:38:30 +0530 Message-Id: <20250825110843.82675-9-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250825110843.82675-1-sudhakar@linux.ibm.com> References: <20250825110843.82675-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: MQgkmMfBpk119ct9YSKrAQA4NF2eQRke X-Proofpoint-ORIG-GUID: MQgkmMfBpk119ct9YSKrAQA4NF2eQRke X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODIzMDA3MSBTYWx0ZWRfX2dP8ejdfJFUv PO5/s/ejzaGNeUqE2toa1q51ZKoBOlMGSZ2YtDUzifB4rMKqWoCKXK2xttBmXS/GjSK5R+ESnrH RksqYUqbwHuPCkNK7yaBhWn1JfgLvusVh/cyebFRUhlf/D/E3DH9SyhhvMV0iGpLYG5nTxfW/nm syq8XYUFOXPsOj7spIvgHOdr+en/RIoOxGj812oHyM1ZvJKq3F1EPME1XnCKASh6rJYRsVgdzRa FkjiqfX6kUSHkDRWrIbh1io7lpG0eiDdVViiw/X4sgRB+XavKAjJaw3zjl63206a8TeFa03X6BE oLtPdRnU3pFCu8jBgJna+8p28NPWHqihPUecZt5vxQ1AGA5vj5Zsv+uOTf6R7hKgBBOjU0lfERT V3BhKrTS X-Authority-Analysis: v=2.4 cv=RtDFLDmK c=1 sm=1 tr=0 ts=68ac45c4 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=2OwXVqhp2XgA:10 a=mDV3o1hIAAAA:8 a=20KFwNOVAAAA:8 a=iox4zFpeAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=jJ3KTT9Sk_ckzuZ4kIYA:9 a=WzC6qhA0u3u7Ye7llzcV:22 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-25_05,2025-08-20_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 malwarescore=0 spamscore=0 priorityscore=1501 bulkscore=0 clxscore=1015 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508230071 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFguNTA5IGNlcnRpZmljYXRlczogYXQg bGVhc3QgZW5vdWdoIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlcyBvbiB0aGUKICAgUEtDUyM3IG1l c3NhZ2VzLiBXZSBleHBlY3QgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGVtYmVkZGVkIGluIEdSVUIg d2lsbAogICBiZSBsZWFmIGNlcnRpZmljYXRlcywgbm90IENBIGNlcnRpZmljYXRlcy4gVGhlIHBh cnNlciBlbmZvcmNlcyB0aGlzLgoKIC0gWC41MDkgY2VydGlmaWNhdGVzIHN1cHBvcnQgdGhlIEV4 dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb24gYW5kIGhhbmRsZQogICBpdCBieSB2ZXJpZnlpbmcg dGhhdCB0aGUgY2VydGlmaWNhdGUgaGFzIGEgQ29kZSBTaWduaW5nIHVzYWdlLgoKU2lnbmVkLW9m Zi1ieTogSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJtQHJlZGhhdC5jb20+ICMgRUtV IHN1cHBvcnQKUmVwb3J0ZWQtYnk6IE1pY2hhbCBTdWNoYW5layA8bXN1Y2hhbmVrQHN1c2UuY29t PiAjIGtleSB1c2FnZSBpc3N1ZQpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0 ZW5zLm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51 eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEJlcmdlciA8c3RlZmFuYkBsaW51eC5pYm0u Y29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4gPGF2bmlzaEBsaW51eC5pYm0uY29tPgpS ZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4KLS0tCiBn cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICAzOCArCiBncnVi LWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jICAgICAgICB8IDk2MiArKysrKysrKysr KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDEwMDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKCmRpZmYgLS1n aXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCBiL2dydWIt Y29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oCmluZGV4IGNhYzdmYjAyYy4u ZWYxNzJjYzQwIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBw ZW5kZWRzaWcuaAorKysgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRz aWcuaApAQCAtMjUsNiArMjUsMjkgQEAgZXh0ZXJuIGFzbjFfbm9kZSBncnViX2dudXRsc19wa2l4 X2FzbjsKIAogI2RlZmluZSBNQVhfT0lEX0xFTiAzMgogCisvKgorICogT25lIG9yIG1vcmUgeDUw OSBjZXJ0aWZpY2F0ZXMuCisgKiBXZSBkbyBsaW1pdGVkIHBhcnNpbmc6CisgKiBleHRyYWN0aW5n IG9ubHkgdGhlIHZlcnNpb24sIHNlcmlhbCwgaXNzdWVyLCBzdWJqZWN0LCBSU0EgcHVibGljIGtl eQorICogYW5kIGtleSBzaXplLgorICogQWxzbywgaG9sZCB0aGUgc2hhMjU2LCBzaGEzODQsIGFu ZCBzaGE1MTIgZmluZ2VycHJpbnQgb2YgdGhlIGNlcnRpZmljYXRlLgorICovCitzdHJ1Y3QgeDUw OV9jZXJ0aWZpY2F0ZQoreworICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqbmV4dDsKKyAgZ3J1 Yl91aW50OF90IHZlcnNpb247CisgIGdydWJfdWludDhfdCAqc2VyaWFsOworICBncnViX3NpemVf dCBzZXJpYWxfbGVuOworICBjaGFyICppc3N1ZXI7CisgIGdydWJfc2l6ZV90IGlzc3Vlcl9sZW47 CisgIGNoYXIgKnN1YmplY3Q7CisgIGdydWJfc2l6ZV90IHN1YmplY3RfbGVuOworICAvKiBXZSBv bmx5IHN1cHBvcnQgUlNBIHB1YmxpYyBrZXlzLiBUaGlzIGVuY29kZXMgW21vZHVsdXMsIHB1Ymxp Y0V4cG9uZW50XS4gKi8KKyAgZ2NyeV9tcGlfdCBtcGlzWzJdOworICBpbnQgbW9kdWx1c19zaXpl OworICBjaGFyIGZpbmdlcnByaW50WzNdWzY0XTsKK307CisKIC8qIEEgUEtDUyM3IHNpZ25lZERh dGEgc2lnbmVySW5mby4gKi8KIHN0cnVjdCBwa2NzN19zaWduZXJJbmZvCiB7CkBAIC00Myw2ICs2 NiwyMSBAQCBzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0YQogICBzdHJ1Y3QgcGtjczdfc2lnbmVySW5m byAqc2lnbmVySW5mb3M7CiB9OwogCisvKgorICogSW1wb3J0IGEgREVSLWVuY29kZWQgY2VydGlm aWNhdGUgYXQgJ2RhdGEnLCBvZiBzaXplICdzaXplJy4KKyAqIFBsYWNlIHRoZSByZXN1bHRzIGlu dG8gJ3Jlc3VsdHMnLCB3aGljaCBtdXN0IGJlIGFscmVhZHkgYWxsb2NhdGVkLgorICovCitleHRl cm4gZ3J1Yl9lcnJfdAorcGFyc2VfeDUwOV9jZXJ0aWZpY2F0ZSAoY29uc3Qgdm9pZCAqZGF0YSwg Z3J1Yl9zaXplX3Qgc2l6ZSwgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKnJlc3VsdHMpOworCisv KgorICogUmVsZWFzZSBhbGwgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSB4NTA5IGNl cnRpZmljYXRlLgorICogSWYgdGhlIGNhbGxlciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGhlIGNl cnRpZmljYXRlLCBpdCBtdXN0IGZyZWUgaXQuCisgKiBUaGUgY2FsbGVyIGlzIGFsc28gcmVzcG9u c2libGUgZm9yIG1haW50ZW5hbmNlIG9mIHRoZSBsaW5rZWQgbGlzdC4KKyAqLworZXh0ZXJuIHZv aWQKK2NlcnRpZmljYXRlX3JlbGVhc2UgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0KTsK KwogLyoKICAqIFBhcnNlIGEgUEtDUyM3IG1lc3NhZ2UsIHdoaWNoIG11c3QgYmUgYSBzaWduZWRE YXRhIG1lc3NhZ2UuCiAgKiBUaGUgbWVzc2FnZSBtdXN0IGJlIGluICdzaWdidWYnIGFuZCBvZiBz aXplICdkYXRhX3NpemUnLiBUaGUgcmVzdWx0IGlzCmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29t bWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2ln L3g1MDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmE2OWQzMGE0YQot LS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMK QEAgLTAsMCArMSw5NjIgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxv YWRlcgorICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIsIDIwMjUgSUJNIENvcnBvcmF0 aW9uCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpYnRhc24xLmg+Cisj aW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdydWIvZXJyLmg+CisjaW5jbHVkZSA8 Z3J1Yi9tbS5oPgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisjaW5jbHVkZSA8Z3J1Yi9taXNj Lmg+CisjaW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+CisKKyNpbmNsdWRlICJhcHBlbmRl ZHNpZy5oIgorCitzdGF0aWMgY2hhciBhc24xX2Vycm9yW0FTTjFfTUFYX0VSUk9SX0RFU0NSSVBU SU9OX1NJWkVdOworCisKKy8qIFJGQyAzMjc5IDIuMy4xICBSU0EgS2V5cy4gKi8KK3N0YXRpYyBj b25zdCBjaGFyICpyc2FFbmNyeXB0aW9uX29pZCA9ICIxLjIuODQwLjExMzU0OS4xLjEuMSI7CisK Ky8qIFJGQyA1MjgwIEFwcGVuZGl4IEEuICovCitzdGF0aWMgY29uc3QgY2hhciAqY29tbW9uTmFt ZV9vaWQgPSAiMi41LjQuMyI7CisKKy8qIFJGQyA1MjgwIDQuMi4xLjMgS2V5IFVzYWdlLiAqLwor c3RhdGljIGNvbnN0IGNoYXIgKmtleVVzYWdlX29pZCA9ICIyLjUuMjkuMTUiOworCitzdGF0aWMg Y29uc3QgZ3J1Yl91aW50OF90IGRpZ2l0YWxTaWduYXR1cmVVc2FnZSA9IDB4ODA7CisKKy8qIFJG QyA1MjgwIDQuMi4xLjkgQmFzaWMgQ29uc3RyYWludHMuICovCitzdGF0aWMgY29uc3QgY2hhciAq YmFzaWNDb25zdHJhaW50c19vaWQgPSAiMi41LjI5LjE5IjsKKworLyogUkZDIDUyODAgNC4yLjEu MTIgRXh0ZW5kZWQgS2V5IFVzYWdlLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVuZGVkS2V5 VXNhZ2Vfb2lkID0gIjIuNS4yOS4zNyI7CitzdGF0aWMgY29uc3QgY2hhciAqY29kZVNpZ25pbmdV c2FnZV9vaWQgPSAiMS4zLjYuMS41LjUuNy4zLjMiOworCisvKgorICogUkZDIDMyNzkgMi4zLjEK KyAqCisgKiAgVGhlIFJTQSBwdWJsaWMga2V5IE1VU1QgYmUgZW5jb2RlZCB1c2luZyB0aGUgQVNO LjEgdHlwZSBSU0FQdWJsaWNLZXk6CisgKgorICogICAgIFJTQVB1YmxpY0tleSA6Oj0gU0VRVUVO Q0UgeworICogICAgICAgIG1vZHVsdXMgICAgICAgICAgICBJTlRFR0VSLCAgICAtLSBuCisgKiAg ICAgICAgcHVibGljRXhwb25lbnQgICAgIElOVEVHRVIgIH0gIC0tIGUKKyAqCisgKiAgd2hlcmUg bW9kdWx1cyBpcyB0aGUgbW9kdWx1cyBuLCBhbmQgcHVibGljRXhwb25lbnQgaXMgdGhlIHB1Ymxp YworICogIGV4cG9uZW50IGUuCisgKi8KK3N0YXRpYyBncnViX2Vycl90CitncnViX3BhcnNlX3Jz YV9wdWJrZXkgKGdydWJfdWludDhfdCAqZGVyLCBpbnQgZGVyc2l6ZSwgc3RydWN0IHg1MDlfY2Vy dGlmaWNhdGUgKmNlcnRpZmljYXRlKQoreworICBpbnQgcmVzdWx0OworICBhc24xX25vZGUgc3Br ID0gTlVMTDsKKyAgZ3J1Yl91aW50OF90ICptX2RhdGEsICplX2RhdGE7CisgIGludCBtX3NpemUs IGVfc2l6ZTsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOworICBnY3J5X2Vycm9y X3QgZ2NyeV9lcnI7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0 bHNfZ251dGxzX2FzbiwgIkdOVVRMUy5SU0FQdWJsaWNLZXkiLCAmc3BrKTsKKyAgaWYgKHJlc3Vs dCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9P Rl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY3JlYXRlIHN0b3JhZ2Ug Zm9yIHB1YmxpYyBrZXkgQVNOLjEgZGF0YSIpOworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29k aW5nMiAoJnNwaywgZGVyLCAmZGVyc2l6ZSwgQVNOMV9ERUNPREVfRkxBR19TVFJJQ1RfREVSLCBh c24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAg ZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICJjYW5ub3QgZGVjb2RlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXkgREVSOiAlcyIs IGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBtX2RhdGEgPSBn cnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKHNwaywgIm1vZHVsdXMiLCAiUlNBIG1vZHVsdXMi LCAmbV9zaXplKTsKKyAgaWYgKG1fZGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGdy dWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGVfZGF0YSA9IGdydWJf YXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoc3BrLCAicHVibGljRXhwb25lbnQiLCAiUlNBIHB1Ymxp YyBleHBvbmVudCIsICZlX3NpemUpOworICBpZiAoZV9kYXRhID09IE5VTEwpCisgICAgeworICAg ICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgIGdvdG8gY2xlYW51cF9tX2RhdGE7CisgICAgfQor CisgIC8qCisgICAqIENvbnZlcnQgbSwgZSB0byBtcGkKKyAgICoKKyAgICogbnNjYW5uZWQgaXMg bm90IHNldCBmb3IgRk1UX1VTRywgaXQncyBvbmx5IHNldCBmb3IgRk1UX1BHUCwKKyAgICogc28g d2UgY2FuJ3QgdmVyaWZ5IGl0LgorICAgKi8KKyAgZ2NyeV9lcnIgPSBfZ2NyeV9tcGlfc2NhbiAo JmNlcnRpZmljYXRlLT5tcGlzWzBdLCBHQ1JZTVBJX0ZNVF9VU0csIG1fZGF0YSwgbV9zaXplLCBO VUxMKTsKKyAgaWYgKGdjcnlfZXJyICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgeworICAgICAg ZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICJlcnJvciBsb2FkaW5nIFJTQSBtb2R1bHVzIGludG8gTVBJIHN0cnVjdHVyZTog JWQiLCBnY3J5X2Vycik7CisgICAgICBnb3RvIGNsZWFudXBfZV9kYXRhOworICAgIH0KKworICBn Y3J5X2VyciA9IF9nY3J5X21waV9zY2FuICgmY2VydGlmaWNhdGUtPm1waXNbMV0sIEdDUllNUElf Rk1UX1VTRywgZV9kYXRhLCBlX3NpemUsIE5VTEwpOworICBpZiAoZ2NyeV9lcnIgIT0gR1BHX0VS Ul9OT19FUlJPUikKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGxvYWRpbmcgUlNBIGV4 cG9uZW50IGludG8gTVBJIHN0cnVjdHVyZTogJWQiLCBnY3J5X2Vycik7CisgICAgICBnb3RvIGNs ZWFudXBfbV9tcGk7CisgICAgfQorCisgIC8qIFJTQSBrZXkgc2l6ZSBpbiBiaXRzLiAqLworICBj ZXJ0aWZpY2F0ZS0+bW9kdWx1c19zaXplID0gKG1fc2l6ZSAqIDgpIC0gODsKKworICBncnViX2Zy ZWUgKGVfZGF0YSk7CisgIGdydWJfZnJlZSAobV9kYXRhKTsKKyAgYXNuMV9kZWxldGVfc3RydWN0 dXJlICgmc3BrKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKworIGNsZWFudXBfbV9tcGk6 CisgIF9nY3J5X21waV9yZWxlYXNlIChjZXJ0aWZpY2F0ZS0+bXBpc1swXSk7CisgY2xlYW51cF9l X2RhdGE6CisgIGdydWJfZnJlZSAoZV9kYXRhKTsKKyBjbGVhbnVwX21fZGF0YToKKyAgZ3J1Yl9m cmVlIChtX2RhdGEpOworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnNwayk7 CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJGQyA1MjgwOgorICogICBTdWJqZWN0UHVi bGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeworICogICAgICAgYWxnb3JpdGhtICAgICAgICAg ICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAqICAgICAgIHN1YmplY3RQdWJsaWNLZXkgICAgIEJJ VCBTVFJJTkcgIH0KKyAqCisgKiBBbGdvcml0aG1JZGVudGlmaWVycyBjb21lIGZyb20gUkZDIDMy NzksIHdlIGFyZSBub3Qgc3RyaWN0bHkgY29tcGlsYW50IGFzIHdlCisgKiBvbmx5IHN1cHBvcnQg UlNBIEVuY3J5cHRpb24uCisgKi8KK3N0YXRpYyBncnViX2Vycl90CitncnViX3g1MDlfcmVhZF9z dWJqZWN0X3B1YmxpY19rZXkgKGFzbjFfbm9kZSBhc24sIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRl ICpyZXN1bHRzKQoreworICBpbnQgcmVzdWx0OworICBncnViX2Vycl90IGVycjsKKyAgY29uc3Qg Y2hhciAqYWxnb19uYW1lID0gInRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvLmFs Z29yaXRobS5hbGdvcml0aG0iOworICBjb25zdCBjaGFyICpwYXJhbXNfbmFtZSA9ICJ0YnNDZXJ0 aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mby5hbGdvcml0aG0ucGFyYW1ldGVycyI7CisgIGNv bnN0IGNoYXIgKnBrX25hbWUgPSAidGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm8u c3ViamVjdFB1YmxpY0tleSI7CisgIGNoYXIgYWxnb19vaWRbTUFYX09JRF9MRU5dOworICBpbnQg YWxnb19zaXplID0gc2l6ZW9mIChhbGdvX29pZCk7CisgIGNoYXIgcGFyYW1zX3ZhbHVlWzJdOwor ICBpbnQgcGFyYW1zX3NpemUgPSBzaXplb2YgKHBhcmFtc192YWx1ZSk7CisgIGdydWJfdWludDhf dCAqa2V5X2RhdGEgPSBOVUxMOworICBpbnQga2V5X3NpemUgPSAwOworICB1bnNpZ25lZCBpbnQg a2V5X3R5cGU7CisKKyAgLyogQWxnb3JpdGhtOiBzZWUgbm90ZXMgZm9yIHJzYUVuY3J5cHRpb25f b2lkLiAqLworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgYWxnb19uYW1lLCBhbGdv X29pZCwgJmFsZ29fc2l6ZSk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyB4 NTA5IHB1YmxpYyBrZXkgYWxnb3JpdGhtOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFz bjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIGlmIChncnViX3N0cm5jbXAgKGFsZ29fb2lkLCBy c2FFbmNyeXB0aW9uX29pZCwgc2l6ZW9mIChyc2FFbmNyeXB0aW9uX29pZCkpICE9IDApCisgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsCisgICAgICAg ICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB4NTA5IHB1YmxpYyBrZXkgYWxnb3JpdGhtOiAl cyIsIGFsZ29fb2lkKTsKKworICAvKgorICAgKiBSRkMgMzI3OSAyLjMuMQorICAgKiBUaGUgcnNh RW5jcnlwdGlvbiBPSUQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiB0aGUgYWxnb3JpdGhtIGZp ZWxkCisgICAqIG9mIGEgdmFsdWUgb2YgdHlwZSBBbGdvcml0aG1JZGVudGlmaWVyLiAgVGhlIHBh cmFtZXRlcnMgZmllbGQgTVVTVAorICAgKiBoYXZlIEFTTi4xIHR5cGUgTlVMTCBmb3IgdGhpcyBh bGdvcml0aG0gaWRlbnRpZmllci4KKyAgICovCisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAo YXNuLCBwYXJhbXNfbmFtZSwgcGFyYW1zX3ZhbHVlLCAmcGFyYW1zX3NpemUpOworICBpZiAocmVz dWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgeDUwOSBwdWJsaWMga2V5IHBhcmFtZXRlcnM6ICVz IiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisKKyAg aWYgKHBhcmFtc192YWx1ZVswXSAhPSBBU04xX1RBR19OVUxMKQorICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAiaW52 YWxpZCB4NTA5IHB1YmxpYyBrZXkgcGFyYW1ldGVyczogZXhwZWN0ZWQgTlVMTCIpOworCisgIC8q CisgICAqIFJGQyAzMjc5IDIuMy4xOiAgVGhlIERFUiBlbmNvZGVkIFJTQVB1YmxpY0tleSBpcyB0 aGUgdmFsdWUgb2YgdGhlIEJJVAorICAgKiBTVFJJTkcgc3ViamVjdFB1YmxpY0tleS4KKyAgICov CisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZV90eXBlIChhc24sIHBrX25hbWUsIE5VTEwsICZr ZXlfc2l6ZSwgJmtleV90eXBlKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX01FTV9FUlJPUikKKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRp bmcgc2l6ZSBvZiB4NTA5IHB1YmxpYyBrZXk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg YXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgIGlmIChrZXlfdHlwZSAhPSBBU04xX0VUWVBFX0JJ VF9TVFJJTkcpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUs ICJ1bmV4cGVjdGVkIEFTTi4xIHR5cGUgd2hlbiByZWFkaW5nIHg1MDkgcHVibGljIGtleTogJXgi LAorICAgICAgICAgICAgICAgICAgICAgICBrZXlfdHlwZSk7CisKKyAgLyogTGVuZ3RoIGlzIGlu IGJpdHMuICovCisgIGtleV9zaXplID0gKGtleV9zaXplICsgNykgLyA4OworCisgIGtleV9kYXRh ID0gZ3J1Yl9tYWxsb2MgKGtleV9zaXplKTsKKyAgaWYgKGtleV9kYXRhID09IE5VTEwpCisgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJvdXQgb2YgbWVtb3J5 IGZvciB4NTA5IHB1YmxpYyBrZXkiKTsKKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFz biwgcGtfbmFtZSwga2V5X2RhdGEsICZrZXlfc2l6ZSk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9T VUNDRVNTKQorICAgIHsKKyAgICAgIGdydWJfZnJlZSAoa2V5X2RhdGEpOworICAgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHB1Ymxp YyBrZXkgZGF0YSIpOworICAgIH0KKworICBrZXlfc2l6ZSA9IChrZXlfc2l6ZSArIDcpIC8gODsK KyAgZXJyID0gZ3J1Yl9wYXJzZV9yc2FfcHVia2V5IChrZXlfZGF0YSwga2V5X3NpemUsIHJlc3Vs dHMpOworICBncnViX2ZyZWUgKGtleV9kYXRhKTsKKworICByZXR1cm4gZXJyOworfQorCisvKiBE ZWNvZGUgYSBzdHJpbmcgYXMgZGVmaW5lZCBpbiBBcHBlbmRpeCBBLiAqLworc3RhdGljIGdydWJf ZXJyX3QKK2RlY29kZV9zdHJpbmcgKGNoYXIgKmRlciwgaW50IGRlcl9zaXplLCBjaGFyICoqc3Ry aW5nLCBncnViX3NpemVfdCAqc3RyaW5nX3NpemUpCit7CisgIGFzbjFfbm9kZSBzdHJhc247Cisg IGludCByZXN1bHQ7CisgIGNoYXIgKmNob2ljZTsKKyAgaW50IGNob2ljZV9zaXplID0gMDsKKyAg aW50IHRtcF9zaXplID0gMDsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOworCisg IHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhfYXNuLCAiUEtJ WDEuRGlyZWN0b3J5U3RyaW5nIiwgJnN0cmFzbik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUND RVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAg ICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9y IGNlcnRpZmljYXRlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3Ig KHJlc3VsdCkpOworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnN0cmFzbiwgZGVy LCAmZGVyX3NpemUsIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7Cisg IGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiY291 bGQgbm90IHBhcnNlIERFUiBmb3IgRGlyZWN0b3J5U3RyaW5nOiAlcyIsIGFzbjFfZXJyb3IpOwor ICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBjaG9pY2UgPSBncnViX2FzbjFfYWxsb2Nh dGVfYW5kX3JlYWQgKHN0cmFzbiwgIiIsICJEaXJlY3RvcnlTdHJpbmcgY2hvaWNlIiwgJmNob2lj ZV9zaXplKTsKKyAgaWYgKGNob2ljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJf ZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGlmIChncnViX3N0cm5jbXAg KCJ1dGY4U3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6ZSkgPT0gMCkKKyAgICB7CisgICAgICBy ZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwgInV0ZjhTdHJpbmciLCBOVUxMLCAmdG1w X3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX01FTV9FUlJPUikKKyAgICAgICAgewor ICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJv ciByZWFkaW5nIHNpemUgb2YgVVRGLTggc3RyaW5nOiAlcyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgZ290byBjbGVhbnVw X2Nob2ljZTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoZ3J1Yl9zdHJuY21wICgicHJp bnRhYmxlU3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6ZSkgPT0gMCkKKyAgICB7CisgICAgICBy ZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwgInByaW50YWJsZVN0cmluZyIsIE5VTEws ICZ0bXBfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfTUVNX0VSUk9SKQorICAgICAg ICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg ImVycm9yIHJlYWRpbmcgc2l6ZSBvZiBwcmludGFibGVTdHJpbmc6ICVzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBnb3Rv IGNsZWFudXBfY2hvaWNlOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg ZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICJvbmx5IFVURi04IGFuZCBwcmludGFibGUgRGlyZWN0b3J5U3RyaW5n cyBhcmUgc3VwcG9ydGVkLCBnb3QgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNl KTsKKyAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7CisgICAgfQorCisgIC8qIFJlYWQgc2l6ZSBk b2VzIG5vdCBpbmNsdWRlIHRyYWlsaW5nIE5VTC4gKi8KKyAgdG1wX3NpemUrKzsKKworICAqc3Ry aW5nID0gZ3J1Yl9tYWxsb2MgKHRtcF9zaXplKTsKKyAgaWYgKCpzdHJpbmcgPT0gTlVMTCkKKyAg ICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAg ICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIERpcmVjdG9y eVN0cmluZyBjb250ZW50cyIpOworICAgICAgZ290byBjbGVhbnVwX2Nob2ljZTsKKyAgICB9CisK KyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChzdHJhc24sIGNob2ljZSwgKnN0cmluZywgJnRt cF9zaXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAgZXJy ID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgb3V0 ICVzIGluIERpcmVjdG9yeVN0cmluZzogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hv aWNlLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgIGdydWJfZnJlZSAoKnN0cmluZyk7 CisgICAgICAqc3RyaW5nID0gTlVMTDsKKyAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7CisgICAg fQorCisgICpzdHJpbmdfc2l6ZSA9IHRtcF9zaXplICsgMTsKKyAgKCpzdHJpbmcpW3RtcF9zaXpl XSA9ICdcMCc7CisKKyBjbGVhbnVwX2Nob2ljZToKKyAgZ3J1Yl9mcmVlIChjaG9pY2UpOworIGNs ZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnN0cmFzbik7CisKKyAgcmV0dXJuIGVy cjsKK30KKworLyoKKyAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAg ICB2ZXJzaW9uICAgICAgICAgWzBdICBFWFBMSUNJVCBWZXJzaW9uIERFRkFVTFQgdjEsCisgKiAu Li4KKyAqCisgKiBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYxKDApLCB2MigxKSwgdjMoMikg IH0KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK2NoZWNrX3ZlcnNpb24gKGFzbjFfbm9kZSBjZXJ0 aWZpY2F0ZSwgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKnJlc3VsdHMpCit7CisgIGludCByYzsK KyAgY29uc3QgY2hhciAqbmFtZSA9ICJ0YnNDZXJ0aWZpY2F0ZS52ZXJzaW9uIjsKKyAgZ3J1Yl91 aW50OF90IHZlcnNpb247CisgIGludCBsZW4gPSBzaXplb2YgKHZlcnNpb24pOworCisgIHJjID0g YXNuMV9yZWFkX3ZhbHVlIChjZXJ0aWZpY2F0ZSwgbmFtZSwgJnZlcnNpb24sICZsZW4pOworCisg IC8qIFJlcXVpcmUgdmVyc2lvbiAzLiAqLworICBpZiAocmMgIT0gQVNOMV9TVUNDRVNTIHx8IGxl biAhPSAxKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi ZXJyb3IgcmVhZGluZyBjZXJ0aWZpY2F0ZSB2ZXJzaW9uIik7CisKKyAgaWYgKHZlcnNpb24gIT0g MHgwMikKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgeDUwOSBjZXJ0aWZpY2F0ZSB2ZXJzaW9uLCBl eHBlY3RlZCB2MyAoMHgwMiksIGdvdCAweCUwMnguIiwKKyAgICAgICAgICAgICAgICAgICAgICAg dmVyc2lvbik7CisKKyAgcmVzdWx0cy0+dmVyc2lvbiA9IHZlcnNpb247CisKKyAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cit9CisKKy8qCisgKiBUaGlzIGlzIGFuIFguNTAxIE5hbWUsIHdoaWNoIGlz IGNvbXBsZXguCisgKgorICogRm9yIHNpbXBsaWNpdHksIHdlIGV4dHJhY3Qgb25seSB0aGUgQ04u CisgKi8KK3N0YXRpYyBncnViX2Vycl90CityZWFkX25hbWUgKGFzbjFfbm9kZSBhc24sIGNvbnN0 IGNoYXIgKm5hbWVfcGF0aCwgY2hhciAqKm5hbWUsIGdydWJfc2l6ZV90ICpuYW1lX3NpemUpCit7 CisgIGludCBzZXFfY29tcG9uZW50cywgc2V0X2NvbXBvbmVudHM7CisgIGludCByZXN1bHQ7Cisg IGludCBpLCBqOworICBjaGFyICp0b3BfcGF0aCwgKnNldF9wYXRoLCAqdHlwZV9wYXRoLCAqdmFs X3BhdGg7CisgIGNoYXIgdHlwZVtNQVhfT0lEX0xFTl07CisgIGludCB0eXBlX2xlbiA9IHNpemVv ZiAodHlwZSk7CisgIGludCBzdHJpbmdfc2l6ZSA9IDA7CisgIGNoYXIgKnN0cmluZ19kZXI7Cisg IGdydWJfZXJyX3QgZXJyOworCisgICpuYW1lID0gTlVMTDsKKworICB0b3BfcGF0aCA9IGdydWJf eGFzcHJpbnRmICgiJXMucmRuU2VxdWVuY2UiLCBuYW1lX3BhdGgpOworICBpZiAodG9wX3BhdGgg PT0gTlVMTCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwK KyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVz IG5hbWUgcGFyc2luZyBwYXRoIiwgbmFtZV9wYXRoKTsKKworICByZXN1bHQgPSBhc24xX251bWJl cl9vZl9lbGVtZW50cyAoYXNuLCB0b3BfcGF0aCwgJnNlcV9jb21wb25lbnRzKTsKKyAgaWYgKHJl c3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIGNvdW50aW5nIG5hbWUgY29tcG9uZW50czogJXMi LAorICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAg ICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGZvciAoaSA9IDE7IGkgPD0gc2VxX2NvbXBvbmVu dHM7IGkrKykKKyAgICB7CisgICAgICBzZXRfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgiJXMuPyVk IiwgdG9wX3BhdGgsIGkpOworICAgICAgaWYgKHNldF9wYXRoID09IE5VTEwpCisgICAgICAgIHsK KyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAl cyBuYW1lIHNldCBwYXJzaW5nIHBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h bWVfcGF0aCk7CisgICAgICAgICAgZ290byBjbGVhbnVwX3NldDsKKyAgICAgICAgfQorICAgICAg LyogVGhpcyBicmluZ3MgdXMsIGhvcGVmdWxseSwgdG8gYSBzZXQuICovCisgICAgICByZXN1bHQg PSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoYXNuLCBzZXRfcGF0aCwgJnNldF9jb21wb25lbnRz KTsKKyAgICAgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAg ICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZXJyb3IgY291bnRpbmcgbmFtZSBzdWItY29tcG9uZW50cyBjb21w b25lbnRzIChlbGVtZW50ICVkKTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGks IGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zZXQ7Cisg ICAgICAgIH0KKyAgICAgIGZvciAoaiA9IDE7IGogPD0gc2V0X2NvbXBvbmVudHM7IGorKykKKyAg ICAgICAgeworICAgICAgICAgIHR5cGVfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgiJXMuPyVkLj8l ZC50eXBlIiwgdG9wX3BhdGgsIGksIGopOworICAgICAgICAgIGlmICh0eXBlX3BhdGggPT0gTlVM TCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxk IG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzIG5hbWUgY29tcG9uZW50IHR5cGUgcGF0aCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfcGF0aCk7CisgICAgICAgICAgICAg IGdvdG8gY2xlYW51cF9zZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgdHlwZV9sZW4gPSBz aXplb2YgKHR5cGUpOworICAgICAgICAgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYXNuLCB0 eXBlX3BhdGgsIHR5cGUsICZ0eXBlX2xlbik7CisgICAgICAgICAgaWYgKHJlc3VsdCAhPSBBU04x X1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nICVzIG5hbWUgY29tcG9uZW50 IHR5cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9wYXRoLCBh c24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3R5cGU7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoZ3J1Yl9zdHJuY21wICh0eXBlLCBjb21t b25OYW1lX29pZCwgdHlwZV9sZW4pICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGdydWJfZnJlZSAodHlwZV9wYXRoKTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICB2YWxfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgiJXMuPyVkLj8l ZC52YWx1ZSIsIHRvcF9wYXRoLCBpLCBqKTsKKyAgICAgICAgICBpZiAodmFsX3BhdGggPT0gTlVM TCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxk IG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzIG5hbWUgY29tcG9uZW50IHZhbHVlIHBhdGgiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3BhdGgpOworICAgICAgICAgICAg ICBnb3RvIGNsZWFudXBfdHlwZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHN0cmluZ19k ZXIgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGFzbiwgdmFsX3BhdGgsIG5hbWVfcGF0 aCwgJnN0cmluZ19zaXplKTsKKyAgICAgICAgICBpZiAoc3RyaW5nX2RlciA9PSBOVUxMKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm5vOworICAgICAgICAgICAg ICBnb3RvIGNsZWFudXBfdmFsX3BhdGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBlcnIg PSBkZWNvZGVfc3RyaW5nIChzdHJpbmdfZGVyLCBzdHJpbmdfc2l6ZSwgbmFtZSwgbmFtZV9zaXpl KTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZ290byBjbGVhbnVwX3N0cmluZzsK KworICAgICAgICAgIGdydWJfZnJlZSAoc3RyaW5nX2Rlcik7CisgICAgICAgICAgZ3J1Yl9mcmVl ICh0eXBlX3BhdGgpOworICAgICAgICAgIGdydWJfZnJlZSAodmFsX3BhdGgpOworICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisKKyAgICAgIGdydWJfZnJlZSAoc2V0X3BhdGgpOworICAgICAg aWYgKCpuYW1lKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgZ3J1Yl9mcmVlICh0b3BfcGF0 aCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVwX3N0cmluZzoKKyAgZ3J1 Yl9mcmVlIChzdHJpbmdfZGVyKTsKKyBjbGVhbnVwX3ZhbF9wYXRoOgorICBncnViX2ZyZWUgKHZh bF9wYXRoKTsKKyBjbGVhbnVwX3R5cGU6CisgIGdydWJfZnJlZSAodHlwZV9wYXRoKTsKKyBjbGVh bnVwX3NldDoKKyAgZ3J1Yl9mcmVlIChzZXRfcGF0aCk7CisgY2xlYW51cDoKKyAgZ3J1Yl9mcmVl ICh0b3BfcGF0aCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFZlcmlmeSB0aGUgS2V5 IFVzYWdlIGV4dGVuc2lvbi4KKyAqIFdlIHJlcXVpcmUgdGhlIERpZ2l0YWwgU2lnbmF0dXJlIHVz YWdlLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2tleV91c2FnZSAoZ3J1Yl91aW50 OF90ICp2YWx1ZSwgaW50IHZhbHVlX3NpemUpCit7CisgIGFzbjFfbm9kZSB1c2FnZWFzbjsKKyAg aW50IHJlc3VsdDsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOworICBncnViX3Vp bnQ4X3QgdXNhZ2UgPSAweGZmOworICBpbnQgdXNhZ2Vfc2l6ZSA9IHNpemVvZiAodXNhZ2Vfc2l6 ZSk7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9h c24sICJQS0lYMS5LZXlVc2FnZSIsICZ1c2FnZWFzbik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9T VUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAor ICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUg Zm9yIGtleSB1c2FnZSIpOworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnVzYWdl YXNuLCB2YWx1ZSwgJnZhbHVlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVNOMV9ERUNPREVfRkxBR19TVFJJQ1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAh PSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIERF UiBmb3IgS2V5IFVzYWdlOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOwor ICAgIH0KKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHVzYWdlYXNuLCAiIiwgJnVzYWdl LCAmdXNhZ2Vfc2l6ZSk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFk aW5nIEtleSBVc2FnZSB2YWx1ZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9z dHJlcnJvciAocmVzdWx0KSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGlmICgh KHVzYWdlICYgZGlnaXRhbFNpZ25hdHVyZVVzYWdlKSkKKyAgICB7CisgICAgICBlcnIgPSBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAg ImtleSB1c2FnZSAoMHgleCkgbWlzc2luZyBEaWdpdGFsIFNpZ25hdHVyZSB1c2FnZSIsIHVzYWdl KTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0 ZV9zdHJ1Y3R1cmUgKCZ1c2FnZWFzbik7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEJh c2ljQ29uc3RyYWludHMgOjo9IFNFUVVFTkNFIHsKKyAqICAgICAgIGNBICAgICAgICAgICAgICAg ICAgICAgIEJPT0xFQU4gREVGQVVMVCBGQUxTRSwKKyAqICAgICAgIHBhdGhMZW5Db25zdHJhaW50 ICAgICAgIElOVEVHRVIgKDAuLk1BWCkgT1BUSU9OQUwgfQorICovCitzdGF0aWMgZ3J1Yl9lcnJf dAordmVyaWZ5X2Jhc2ljX2NvbnN0cmFpbnRzIChncnViX3VpbnQ4X3QgKnZhbHVlLCBpbnQgdmFs dWVfc2l6ZSkKK3sKKyAgYXNuMV9ub2RlIGJhc2ljYXNuOworICBpbnQgcmVzdWx0OworICBncnVi X2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7CisgIGNoYXIgY0FbNl07IC8qIEZBTFNFIG9yIFRS VUUuICovCisgIGludCBjQV9zaXplID0gc2l6ZW9mIChjQSk7CisKKyAgcmVzdWx0ID0gYXNuMV9j cmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5CYXNpY0NvbnN0cmFp bnRzIiwgJmJhc2ljYXNuKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAg ICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgQmFzaWMgQ29uc3Ry YWludHMiKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZiYXNpY2FzbiwgdmFs dWUsICZ2YWx1ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFfREVD T0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9T VUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxF X1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBERVIgZm9yIEJh c2ljIENvbnN0cmFpbnRzOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOwor ICAgIH0KKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGJhc2ljYXNuLCAiY0EiLCBjQSwg JmNBX3NpemUpOworICBpZiAocmVzdWx0ID09IEFTTjFfRUxFTUVOVF9OT1RfRk9VTkQpCisgICAg eworICAgICAgLyogTm90IHByZXNlbnQsIGRlZmF1bHQgaXMgRmFsc2UsIHNvIHRoaXMgaXMgT0su ICovCisgICAgICBlcnIgPSBHUlVCX0VSUl9OT05FOworICAgICAgZ290byBjbGVhbnVwOworICAg IH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIg PSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBCYXNp YyBDb25zdHJhaW50cyBjQSB2YWx1ZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNu MV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIC8q IFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IG5vdCBiZSBhIENBIGNlcnRpZmljYXRlLiAqLworICBpZiAo Z3J1Yl9zdHJuY21wICgiRkFMU0UiLCBjQSwgY0Ffc2l6ZSkgIT0gMCkKKyAgICB7CisgICAgICBl cnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAidW5leHBlY3RlZCBDQSB2 YWx1ZTogJXMiLCBjQSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgY2xlYW51cDoK KyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmYmFzaWNhc24pOworCisgIHJldHVybiBlcnI7Cit9 CisKKy8qCisgKiBWZXJpZnkgdGhlIEV4dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb24uCisgKiBX ZSByZXF1aXJlIHRoZSBDb2RlIFNpZ25pbmcgdXNhZ2UuCisgKgorICogRXh0S2V5VXNhZ2VTeW50 YXggOjo9IFNFUVVFTkNFIFNJWkUgKDEuLk1BWCkgT0YgS2V5UHVycG9zZUlkCisgKgorICogS2V5 UHVycG9zZUlkIDo6PSBPQkpFQ1QgSURFTlRJRklFUgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAor dmVyaWZ5X2V4dGVuZGVkX2tleV91c2FnZSAoZ3J1Yl91aW50OF90ICp2YWx1ZSwgaW50IHZhbHVl X3NpemUpCit7CisgIGFzbjFfbm9kZSBleHRlbmRlZGFzbjsKKyAgaW50IHJlc3VsdCwgY291bnQs IGkgPSAwOworICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7CisgIGNoYXIgdXNhZ2Vb TUFYX09JRF9MRU5dLCBuYW1lWzNdOworICBpbnQgdXNhZ2Vfc2l6ZSA9IHNpemVvZiAodXNhZ2Up OworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhfYXNu LCAiUEtJWDEuRXh0S2V5VXNhZ2VTeW50YXgiLCAmZXh0ZW5kZWRhc24pOworICBpZiAocmVzdWx0 ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09G X01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgQVNOLjEg c3RydWN0dXJlIGZvciBFeHRlbmRlZCBLZXkgVXNhZ2UiKTsKKworICByZXN1bHQgPSBhc24xX2Rl cl9kZWNvZGluZzIgKCZleHRlbmRlZGFzbiwgdmFsdWUsICZ2YWx1ZV9zaXplLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9l cnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAg ICAgICAiZXJyb3IgcGFyc2luZyBERVIgZm9yIEV4dGVuZGVkIEtleSBVc2FnZTogJXMiLCBhc24x X2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyogSWYgRUtVcyBhcmUg cHJlc2VudCwgaXQgY2hlY2tzIHRoZSBwcmVzZW50cyBvZiBDb2RlIFNpZ25pbmcgdXNhZ2UuICov CisgIHJlc3VsdCA9IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChleHRlbmRlZGFzbiwgIiIsICZj b3VudCk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBjb3VudGluZyBudW1i ZXIgb2YgRXh0ZW5kZWQgS2V5IFVzYWdlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAg YXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisg IGZvciAoaSA9IDE7IGkgPCBjb3VudCArIDE7IGkrKykKKyAgICB7CisgICAgICBncnViX21lbXNl dCAobmFtZSwgMCwgc2l6ZW9mIChuYW1lKSk7CisgICAgICBncnViX3NucHJpbnRmIChuYW1lLCBz aXplb2YgKG5hbWUpLCAiPyVkIiwgaSk7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUg KGV4dGVuZGVkYXNuLCBuYW1lLCB1c2FnZSwgJnVzYWdlX3NpemUpOworICAgICAgaWYgKHJlc3Vs dCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBFeHRlbmRlZCBLZXkgVXNh Z2U6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1 bHQpKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgaWYgKGdy dWJfc3RybmNtcCAoY29kZVNpZ25pbmdVc2FnZV9vaWQsIHVzYWdlLCB1c2FnZV9zaXplKSA9PSAw KQorICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGVyciA9IGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9GSUxFX1RZUEUsICJleHRlbmRlZCBrZXkgdXNhZ2UgbWlzc2luZyBDb2RlIFNp Z25pbmcgdXNhZ2UiKTsKKworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmV4 dGVuZGVkYXNuKTsKKworICByZXR1cm4gZXJyOworfQorCisvKgorICogRXh0ZW5zaW9ucyAgOjo9 ICBTRVFVRU5DRSBTSVpFICgxLi5NQVgpIE9GIEV4dGVuc2lvbgorICoKKyAqIEV4dGVuc2lvbiAg Ojo9ICBTRVFVRU5DRSAgeworICogICAgICBleHRuSUQgICAgICBPQkpFQ1QgSURFTlRJRklFUiwK KyAqICAgICAgY3JpdGljYWwgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAorICogICAgICBleHRu VmFsdWUgICBPQ1RFVCBTVFJJTkcKKyAqICAgICAgICAgICAgICAgICAgLS0gY29udGFpbnMgdGhl IERFUiBlbmNvZGluZyBvZiBhbiBBU04uMSB2YWx1ZQorICogICAgICAgICAgICAgICAgICAtLSBj b3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24gdHlwZSBpZGVudGlmaWVkCisgKiAgICAgICAg ICAgICAgICAgIC0tIGJ5IGV4dG5JRAorICogfQorICoKKyAqIEEgY2VydGlmaWNhdGUgbXVzdDoK KyAqICAtIGNvbnRhaW4gdGhlIERpZ2l0YWwgU2lnbmF0dXJlIHVzYWdlCisgKiAgLSBub3QgYmUg YSBDQQorICogIC0gY29udGFpbiBubyBleHRlbmRlZCB1c2FnZXMsIG9yIGNvbnRhaW4gdGhlIENv ZGUgU2lnbmluZyBleHRlbmRlZCB1c2FnZQorICogIC0gbm90IGNvbnRhaW4gYW55IG90aGVyIGNy aXRpY2FsIGV4dGVuc2lvbnMgKFJGQyA1MjgwIHMgNC4yKQorICovCitzdGF0aWMgZ3J1Yl9lcnJf dAordmVyaWZ5X2V4dGVuc2lvbnMgKGFzbjFfbm9kZSBjZXJ0KQoreworICBpbnQgcmVzdWx0Owor ICBpbnQgZXh0LCBudW1fZXh0ZW5zaW9ucyA9IDA7CisgIGludCB1c2FnZV9wcmVzZW50ID0gMCwg Y29uc3RyYWludHNfcHJlc2VudCA9IDAsIGV4dGVuZGVkX3VzYWdlX3ByZXNlbnQgPSAwOworICBj aGFyICpvaWRfcGF0aCwgKmNyaXRpY2FsX3BhdGgsICp2YWx1ZV9wYXRoOworICBjaGFyIGV4dG5J RFtNQVhfT0lEX0xFTl07CisgIGludCBleHRuSURfc2l6ZTsKKyAgZ3J1Yl9lcnJfdCBlcnI7Cisg IGNoYXIgY3JpdGljYWxbNl07IC8qIFdlIGdldCBlaXRoZXIgIlRSVUUiIG9yICJGQUxTRSIuICov CisgIGludCBjcml0aWNhbF9zaXplOworICBncnViX3VpbnQ4X3QgKnZhbHVlOworICBpbnQgdmFs dWVfc2l6ZTsKKworICByZXN1bHQgPSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoY2VydCwgInRi c0NlcnRpZmljYXRlLmV4dGVuc2lvbnMiLCAmbnVtX2V4dGVuc2lvbnMpOworICBpZiAocmVzdWx0 ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJ TEVfVFlQRSwgImVycm9yIGNvdW50aW5nIG51bWJlciBvZiBleHRlbnNpb25zOiAlcyIsCisgICAg ICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIGlmIChudW1f ZXh0ZW5zaW9ucyA8IDIpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxF X1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICJpbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGV4 dGVuc2lvbnMgZm9yIGNlcnRpZmljYXRlLCBuZWVkIGF0IGxlYXN0IDIsIGdvdCAlZCIsCisgICAg ICAgICAgICAgICAgICAgICAgIG51bV9leHRlbnNpb25zKTsKKworICBmb3IgKGV4dCA9IDE7IGV4 dCA8PSBudW1fZXh0ZW5zaW9uczsgZXh0KyspCisgICAgeworICAgICAgb2lkX3BhdGggPSBncnVi X3hhc3ByaW50ZiAoInRic0NlcnRpZmljYXRlLmV4dGVuc2lvbnMuPyVkLmV4dG5JRCIsIGV4dCk7 CisgICAgICBpZiAob2lkX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBleHRlbnNpb24gT0lE IHBhdGggaXMgZW1wdHkiKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisKKyAg ICAgIGV4dG5JRF9zaXplID0gc2l6ZW9mIChleHRuSUQpOworICAgICAgcmVzdWx0ID0gYXNuMV9y ZWFkX3ZhbHVlIChjZXJ0LCBvaWRfcGF0aCwgZXh0bklELCAmZXh0bklEX3NpemUpOworICAgICAg aWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBleHRlbnNp b24gT0lEOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAo cmVzdWx0KSk7CisgICAgICAgICAgZ290byBjbGVhbnVwX29pZF9wYXRoOworICAgICAgICB9CisK KyAgICAgIGNyaXRpY2FsX3BhdGggPSBncnViX3hhc3ByaW50ZiAoInRic0NlcnRpZmljYXRlLmV4 dGVuc2lvbnMuPyVkLmNyaXRpY2FsIiwgZXh0KTsKKyAgICAgIGlmIChjcml0aWNhbF9wYXRoID09 IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRklMRV9UWVBFLCAiZXJyb3IgY3JpdGljYWwgcGF0aCBpcyBlbXB0eSIpOworICAgICAgICAg IGdvdG8gY2xlYW51cF9vaWRfcGF0aDsKKyAgICAgICAgfQorCisgICAgICBjcml0aWNhbF9zaXpl ID0gc2l6ZW9mIChjcml0aWNhbCk7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGNl cnQsIGNyaXRpY2FsX3BhdGgsIGNyaXRpY2FsLCAmY3JpdGljYWxfc2l6ZSk7CisgICAgICBpZiAo cmVzdWx0ID09IEFTTjFfRUxFTUVOVF9OT1RfRk9VTkQpCisgICAgICAgIGNyaXRpY2FsWzBdID0g J1wwJzsKKyAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsK KyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJy b3IgcmVhZGluZyBleHRlbnNpb24gY3JpdGljYWxpdHk6ICVzIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNsZWFu dXBfY3JpdGljYWxfcGF0aDsKKyAgICAgICAgfQorCisgICAgICB2YWx1ZV9wYXRoID0gZ3J1Yl94 YXNwcmludGYgKCJ0YnNDZXJ0aWZpY2F0ZS5leHRlbnNpb25zLj8lZC5leHRuVmFsdWUiLCBleHQp OworICAgICAgaWYgKHZhbHVlX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVy ciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBleHRuVmFsdWUg cGF0aCBpcyBlbXB0eSIpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9jcml0aWNhbF9wYXRoOwor ICAgICAgICB9CisKKyAgICAgIHZhbHVlID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChj ZXJ0LCB2YWx1ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJjZXJ0aWZpY2F0ZSBleHRlbnNpb24gdmFsdWUiLCAmdmFsdWVfc2l6ZSk7CisgICAgICBp ZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJybm87 CisgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbHVlX3BhdGg7CisgICAgICAgIH0KKworICAgICAg LyoKKyAgICAgICAqIE5vdyB3ZSBtdXN0IHNlZSBpZiB3ZSByZWNvZ25pc2UgdGhlIE9JRC4KKyAg ICAgICAqIElmIHdlIGhhdmUgYW4gdW5yZWNvZ25pc2VkIGNyaXRpY2FsIGV4dGVuc2lvbiB3ZSBN VVNUIGJhaWwuCisgICAgICAgKi8KKyAgICAgIGlmIChncnViX3N0cm5jbXAgKGtleVVzYWdlX29p ZCwgZXh0bklELCBleHRuSURfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9 IHZlcmlmeV9rZXlfdXNhZ2UgKHZhbHVlLCB2YWx1ZV9zaXplKTsKKyAgICAgICAgICBpZiAoZXJy ICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisKKyAg ICAgICAgICB1c2FnZV9wcmVzZW50Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJf c3RybmNtcCAoYmFzaWNDb25zdHJhaW50c19vaWQsIGV4dG5JRCwgZXh0bklEX3NpemUpID09IDAp CisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSB2ZXJpZnlfYmFzaWNfY29uc3RyYWludHMgKHZh bHVlLCB2YWx1ZV9zaXplKTsKKyAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisg ICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisKKyAgICAgICAgICBjb25zdHJhaW50c19w cmVzZW50Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoZXh0ZW5k ZWRLZXlVc2FnZV9vaWQsIGV4dG5JRCwgZXh0bklEX3NpemUpID09IDApCisgICAgICAgIHsKKyAg ICAgICAgICBlcnIgPSB2ZXJpZnlfZXh0ZW5kZWRfa2V5X3VzYWdlICh2YWx1ZSwgdmFsdWVfc2l6 ZSk7CisgICAgICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgICAgICAgICAgZ290 byBjbGVhbnVwX3ZhbHVlOworCisgICAgICAgICAgZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCsrOwor ICAgICAgICB9CisgICAgICBlbHNlIGlmIChncnViX3N0cm5jbXAgKCJUUlVFIiwgY3JpdGljYWws IGNyaXRpY2FsX3NpemUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKgorICAgICAgICAg ICAqIFBlciB0aGUgUkZDLCB3ZSBtdXN0IG5vdCBwcm9jZXNzIGEgY2VydGlmaWNhdGUgd2l0aAor ICAgICAgICAgICAqIGEgY3JpdGljYWwgZXh0ZW5zaW9uIHdlIGRvIG5vdCB1bmRlcnN0YW5kLgor ICAgICAgICAgICAqLworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9G SUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaGFuZGxlZCBjcml0aWNh bCB4NTA5IGV4dGVuc2lvbiB3aXRoIE9JRCAlcyIsIGV4dG5JRCk7CisgICAgICAgICAgZ290byBj bGVhbnVwX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgIGdydWJfZnJlZSAodmFsdWUpOworICAg ICAgZ3J1Yl9mcmVlICh2YWx1ZV9wYXRoKTsKKyAgICAgIGdydWJfZnJlZSAoY3JpdGljYWxfcGF0 aCk7CisgICAgICBncnViX2ZyZWUgKG9pZF9wYXRoKTsKKyAgICB9CisKKyAgaWYgKHVzYWdlX3By ZXNlbnQgIT0gMSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQ RSwKKyAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIEtleSBVc2Fn ZSBleHRlbnNpb25zIC0gZXhwZWN0ZWQgMSwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgdXNhZ2VfcHJlc2VudCk7CisKKyAgaWYgKGNvbnN0cmFpbnRzX3ByZXNlbnQgIT0gMSkKKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIGJhc2ljIGNvbnN0cmFpbnRzIGV4dGVu c2lvbnMgLSBleHBlY3RlZCAxLCBnb3QgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z dHJhaW50c19wcmVzZW50KTsKKworICBpZiAoZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCA+IDEpCisg ICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAg ICAgICAgICAgICAgICJ1bmV4cGVjdGVkIG51bWJlciBvZiBFeHRlbmRlZCBLZXkgVXNhZ2UgZXh0 ZW5zaW9ucyAtIGV4cGVjdGVkIDAgb3IgMSwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisK KyBjbGVhbnVwX3ZhbHVlOgorICBncnViX2ZyZWUgKHZhbHVlKTsKKyBjbGVhbnVwX3ZhbHVlX3Bh dGg6CisgIGdydWJfZnJlZSAodmFsdWVfcGF0aCk7CisgY2xlYW51cF9jcml0aWNhbF9wYXRoOgor ICBncnViX2ZyZWUgKGNyaXRpY2FsX3BhdGgpOworIGNsZWFudXBfb2lkX3BhdGg6CisgIGdydWJf ZnJlZSAob2lkX3BhdGgpOworCisgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBQYXJzZSBhIGNl cnRpZmljYXRlIHdob3NlIERFUi1lbmNvZGVkIGZvcm0gaXMgaW4gQGRhdGEsIG9mIHNpemUgQGRh dGFfc2l6ZS4KKyAqIFJldHVybiB0aGUgcmVzdWx0cyBpbiBAcmVzdWx0cywgd2hpY2ggbXVzdCBw b2ludCB0byBhbiBhbGxvY2F0ZWQgeDUwOSBjZXJ0aWZpY2F0ZS4KKyAqLworZ3J1Yl9lcnJfdAor cGFyc2VfeDUwOV9jZXJ0aWZpY2F0ZSAoY29uc3Qgdm9pZCAqZGF0YSwgZ3J1Yl9zaXplX3QgZGF0 YV9zaXplLCBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqcmVzdWx0cykKK3sKKyAgaW50IHJlc3Vs dCA9IDA7CisgIGFzbjFfbm9kZSBjZXJ0OworICBncnViX2Vycl90IGVycjsKKyAgaW50IHNpemU7 CisgIGludCB0bXBfc2l6ZTsKKworICBpZiAoZGF0YV9zaXplID4gR1JVQl9JTlRfTUFYKQorICAg IHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsCisgICAgICAgICAgICAg ICAgICAgICAgICJjYW5ub3QgcGFyc2UgYSBjZXJ0aWZpY2F0ZSB3aGVyZSBkYXRhIHNpemUgPiBH UlVCX0lOVF9NQVgiKTsKKyAgc2l6ZSA9IChpbnQpIGRhdGFfc2l6ZTsKKworICByZXN1bHQgPSBh c24xX2NyZWF0ZV9lbGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLkNlcnRpZmlj YXRlIiwgJmNlcnQpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAg ICAgImNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZvciBjZXJ0aWZpY2F0ZTogJXMi LAorICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKworICBy ZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZjZXJ0LCBkYXRhLCAmc2l6ZSwgQVNOMV9ERUNP REVfRkxBR19TVFJJQ1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NV Q0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVf VFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgREVSIGZvciBj ZXJ0aWZpY2F0ZTogJXMiLCBhc24xX2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9 CisKKyAgLyoKKyAgICogVEJTQ2VydGlmaWNhdGUgIDo6PSAgU0VRVUVOQ0UgeworICAgKiAgICAg dmVyc2lvbiAgICAgICAgIFswXSAgRVhQTElDSVQgVmVyc2lvbiBERUZBVUxUIHYxCisgICAqLwor ICBlcnIgPSBjaGVja192ZXJzaW9uIChjZXJ0LCByZXN1bHRzKTsKKyAgaWYgKGVyciAhPSBHUlVC X0VSUl9OT05FKQorICAgIGdvdG8gY2xlYW51cDsKKworICAvKgorICAgKiBzZXJpYWxOdW1iZXIg ICAgICAgICBDZXJ0aWZpY2F0ZVNlcmlhbE51bWJlciwKKyAgICoKKyAgICogQ2VydGlmaWNhdGVT ZXJpYWxOdW1iZXIgIDo6PSAgSU5URUdFUgorICAgKi8KKyAgcmVzdWx0cy0+c2VyaWFsID0gZ3J1 Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuc2VyaWFsTnVt YmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Y2VydGlmaWNhdGUgc2VyaWFsIG51bWJlciIsICZ0bXBfc2l6ZSk7CisgIGlmIChyZXN1bHRzLT5z ZXJpYWwgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm5vOworICAgICAgZ290 byBjbGVhbnVwOworICAgIH0KKyAgLyoKKyAgICogSXQncyBzYWZlIHRvIGNhc3QgdGhlIHNpZ25l ZCBpbnQgdG8gYW4gdW5zaWduZWQgaGVyZSwgd2Uga25vdworICAgKiBsZW5ndGggaXMgbm9uLW5l Z2F0aXZlLgorICAgKi8KKyAgcmVzdWx0cy0+c2VyaWFsX2xlbiA9IHRtcF9zaXplOworCisgIC8q CisgICAqIHNpZ25hdHVyZSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAqCisg ICAqIFdlIGRvbid0IGxvYWQgdGhlIHNpZ25hdHVyZSBvciBpc3N1ZXIgYXQgdGhlIG1vbWVudCwK KyAgICogYXMgd2UgZG9uJ3QgYXR0ZW1wdCB4NTA5IHZlcmlmaWNhdGlvbi4KKyAgICovCisKKyAg LyoKKyAgICogdmFsaWRpdHkgICAgICAgICAgICAgVmFsaWRpdHksCisgICAqCisgICAqIFZhbGlk aXR5IDo6PSBTRVFVRU5DRSB7CisgICAqICAgICBub3RCZWZvcmUgICAgICBUaW1lLAorICAgKiAg ICAgbm90QWZ0ZXIgICAgICAgVGltZSB9CisgICAqCisgICAqIFdlIGNhbid0IHZhbGlkYXRlIHRo aXMgcmVhc29uYWJseSwgd2UgaGF2ZSBubyB0cnVlIHRpbWUgc291cmNlIG9uIHNldmVyYWwKKyAg ICogcGxhdGZvcm1zLiBGb3Igbm93IHdlIGRvIG5vdCBwYXJzZSB0aGVtLgorICAgKi8KKworICAv KgorICAgKiBpc3N1ZXIgICAgICAgICAgICAgIE5hbWUsCisgICAqCisgICAqIFRoaXMgaXMgYW4g WDUwMSBuYW1lLCB3ZSBwYXJzZSBvdXQganVzdCB0aGUgQ04uCisgICAqLworICBlcnIgPSByZWFk X25hbWUgKGNlcnQsICJ0YnNDZXJ0aWZpY2F0ZS5pc3N1ZXIiLCAmcmVzdWx0cy0+aXNzdWVyLCAm cmVzdWx0cy0+aXNzdWVyX2xlbik7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBn b3RvIGNsZWFudXBfc2VyaWFsOworCisgIC8qCisgICAqIHN1YmplY3QgICAgICAgICAgICAgIE5h bWUsCisgICAqCisgICAqIFRoaXMgaXMgYW4gWDUwMSBuYW1lLCB3ZSBwYXJzZSBvdXQganVzdCB0 aGUgQ04uCisgICAqLworICBlcnIgPSByZWFkX25hbWUgKGNlcnQsICJ0YnNDZXJ0aWZpY2F0ZS5z dWJqZWN0IiwgJnJlc3VsdHMtPnN1YmplY3QsICZyZXN1bHRzLT5zdWJqZWN0X2xlbik7CisgIGlm IChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGNsZWFudXBfaXNzdWVyOworCisgIC8q CisgICAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7CisgICAqICAgIC4uLgorICAg KiAgICBzdWJqZWN0UHVibGljS2V5SW5mbyBTdWJqZWN0UHVibGljS2V5SW5mbywKKyAgICogICAg Li4uCisgICAqLworICBlcnIgPSBncnViX3g1MDlfcmVhZF9zdWJqZWN0X3B1YmxpY19rZXkgKGNl cnQsIHJlc3VsdHMpOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgZ290byBjbGVh bnVwX25hbWU7CisKKyAgLyoKKyAgICogVEJTQ2VydGlmaWNhdGUgIDo6PSAgU0VRVUVOQ0UgIHsK KyAgICogICAgLi4uCisgICAqICAgIGV4dGVuc2lvbnMgICAgICBbM10gIEVYUExJQ0lUIEV4dGVu c2lvbnMgT1BUSU9OQUwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgLS0gSWYgcHJlc2Vu dCwgdmVyc2lvbiBNVVNUIGJlIHYzCisgICAqIH0KKyAgICovCisgIGVyciA9IHZlcmlmeV9leHRl bnNpb25zIChjZXJ0KTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8gY2xl YW51cF9tcGlzOworCisgIC8qCisgICAqIFdlIGRvIG5vdCByZWFkIG9yIGNoZWNrIHRoZSBzaWdu YXR1cmUgb24gdGhlIGNlcnRpZmljYXRlOgorICAgKiBhcyBkaXNjdXNzZWQgd2UgZG8gbm90IHRy eSB0byB2YWxpZGF0ZSB0aGUgY2VydGlmaWNhdGUgYnV0IHRydXN0CisgICAqIGl0IGltcGxpY3Rs eS4KKyAgICovCisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmNlcnQpOworCisgIHJldHVybiBH UlVCX0VSUl9OT05FOworCisgY2xlYW51cF9tcGlzOgorICBfZ2NyeV9tcGlfcmVsZWFzZSAocmVz dWx0cy0+bXBpc1swXSk7CisgIF9nY3J5X21waV9yZWxlYXNlIChyZXN1bHRzLT5tcGlzWzFdKTsK KyBjbGVhbnVwX25hbWU6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+c3ViamVjdCk7CisgY2xlYW51 cF9pc3N1ZXI6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+aXNzdWVyKTsKKyBjbGVhbnVwX3Nlcmlh bDoKKyAgZ3J1Yl9mcmVlIChyZXN1bHRzLT5zZXJpYWwpOworIGNsZWFudXA6CisgIGFzbjFfZGVs ZXRlX3N0cnVjdHVyZSAoJmNlcnQpOworCisgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWxl YXNlIGFsbCB0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIHg1MDkgY2VydGlmaWNhdGUu CisgKiBJZiB0aGUgY2FsbGVyIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0aGUgY2VydGlmaWNhdGUs IGl0IG11c3QgZnJlZSBpdC4KKyAqIFRoZSBjYWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZSBmb3Ig bWFpbnRlbmFuY2Ugb2YgdGhlIGxpbmtlZCBsaXN0LgorICovCit2b2lkCitjZXJ0aWZpY2F0ZV9y ZWxlYXNlIChzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydCkKK3sKKyAgZ3J1Yl9mcmVlIChj ZXJ0LT5pc3N1ZXIpOworICBncnViX2ZyZWUgKGNlcnQtPnN1YmplY3QpOworICBncnViX2ZyZWUg KGNlcnQtPnNlcmlhbCk7CisgIF9nY3J5X21waV9yZWxlYXNlIChjZXJ0LT5tcGlzWzBdKTsKKyAg X2djcnlfbXBpX3JlbGVhc2UgKGNlcnQtPm1waXNbMV0pOworfQotLSAKMi4zOS41IChBcHBsZSBH aXQtMTU0KQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3Rz LmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==