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 E8958C83F09 for ; Wed, 9 Jul 2025 11:50:11 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uZTIO-0006HO-A5; Wed, 09 Jul 2025 07:49:05 -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 1uZTIA-0006Dc-9U for grub-devel@gnu.org; Wed, 09 Jul 2025 07:48:51 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uZTI4-0006tj-GU for grub-devel@gnu.org; Wed, 09 Jul 2025 07:48:49 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5698TIFD011882; Wed, 9 Jul 2025 11:48:41 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=w4Ska3LQEOWiz+yZ6 8Y8SL/PLzgIJLwUn/TGt1bKcvk=; b=n2ipRZBpjkNYCJihzVtANOW7jC1rGJWEd ocbQiJEwct5a9pVBBSE9/XXa0vvuvdCyNBWE/a68/fqR0qooTuPi7hQsxlLm2Kuu zwAC1/Zguu9uF3sZoJ0RV15tsSKG5SqJLBlfVxzhLsoWbFS+y1M4W0SlD5ZfvTuk nlB/sWaKb6WdeI5AQJT5aFG2G4ki00AdQg3cCxzx9wFrYH9WcfHCLMaV4FUNVIR7 ocFKHavriYuf1VRiWJCjGdGrDROQoL2xuZTvUxhFE0crq00BYWAEPV4z9zUTlDwD 4XqUKMsx9pvP7U8MFJv4oGGNpqqcWjHmB7ZQwRr77x5Vs0YuOu8AQ== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47ptjr58bk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jul 2025 11:48:41 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5697o0Hm013602; Wed, 9 Jul 2025 11:48:40 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 47qgkkyrq0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jul 2025 11:48:40 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 569BmaIU19661268 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 9 Jul 2025 11:48:36 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 900A62004B; Wed, 9 Jul 2025 11:48:36 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BB62B20040; Wed, 9 Jul 2025 11:48:33 +0000 (GMT) Received: from localhost.localdomain (unknown [9.39.27.9]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 9 Jul 2025 11:48:33 +0000 (GMT) From: Sudhakar Kuppusamy To: grub-devel@gnu.org Cc: jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, nayna@linux.ibm.com, ltcgcw@linux.vnet.ibm.com, ssrish@linux.ibm.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, Sudhakar Kuppusamy , dja@axtens.net, Javier Martinez Canillas , Daniel Kiper Subject: [PATCH v4 11/23] appended signatures: Parse X.509 certificates Date: Wed, 9 Jul 2025 17:15:28 +0530 Message-Id: <20250709114540.58608-12-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250709114540.58608-1-sudhakar@linux.ibm.com> References: <20250709114540.58608-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=GL8IEvNK c=1 sm=1 tr=0 ts=686e5719 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Wb1JkmetP80A: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-ORIG-GUID: d1pUKSN07wjQjUkXmBv97EyrvVbVNbaJ X-Proofpoint-GUID: d1pUKSN07wjQjUkXmBv97EyrvVbVNbaJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzA5MDEwNiBTYWx0ZWRfXxJ1Wl2tstn8a Rry/WHl1kU78ZWrgs0wE4L0HvEVDZ7k8tuCMyS5yxmAWdeD6x72eAfTwiy7ox1mrJJIf6MPkeDY 9UXAnuwdzRzCvvZLkxg0dt8g+uFBGOCmp0knzdOi0vKusUgTsGxAR+LsKn24ZrQ8XeOPu3hIAk4 vEW/FoLM417/ZjsZmLQqpDXMASRIxUdsDblP0fhdB0F6wBbMMTt44AY8qk0nT/z3zxB0Xpu3/X7 Iq28tjD5/omunfVF5h8wtWvh0qXxHX1Q4N0sE1fAovrqJS5VLAWfSP4Bdc/RBpaz7H8BrmAhY8b zwdbMZTTWEcAI3gSrYJbS2erWUHMLKw5zErbtgI1Cz1E41TeJVd+1fJ1Sj6VRChhaw5UdlWUAeo kqmTkMuKd1v2vErtxiTnlQEqOXEj2ZEAQiCLoLeYWacCL2kKZGIQFyorOL5gk3KBP8ut4y1M X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-09_02,2025-07-08_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 bulkscore=0 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 mlxlogscore=999 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507090106 Received-SPF: pass client-ip=148.163.158.5; envelope-from=sudhakar@linux.ibm.com; helo=mx0b-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_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-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 cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICAzMCArCiBncnVi LWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jICAgICAgICB8IDk1MyArKysrKysrKysr KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDk4MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYwoKZGlmZiAtLWdp dCBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oIGIvZ3J1Yi1j b3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKaW5kZXggY2FjN2ZiMDJjLi4y ODkxMjFhNGQgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBl bmRlZHNpZy5oCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNp Zy5oCkBAIC0yNSw2ICsyNSwyMSBAQCBleHRlcm4gYXNuMV9ub2RlIGdydWJfZ251dGxzX3BraXhf YXNuOwogCiAjZGVmaW5lIE1BWF9PSURfTEVOIDMyCiAKKy8qCisgKiBPbmUgb3IgbW9yZSB4NTA5 IGNlcnRpZmljYXRlcy4KKyAqIFdlIGRvIGxpbWl0ZWQgcGFyc2luZzogZXh0cmFjdGluZyBvbmx5 IHRoZSBzZXJpYWwsIENOIGFuZCBSU0EgcHVibGljIGtleS4KKyAqLworc3RydWN0IHg1MDlfY2Vy dGlmaWNhdGUKK3sKKyAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKm5leHQ7CisgIGdydWJfdWlu dDhfdCAqc2VyaWFsOworICBncnViX3NpemVfdCBzZXJpYWxfbGVuOworICBjaGFyICpzdWJqZWN0 OworICBncnViX3NpemVfdCBzdWJqZWN0X2xlbjsKKyAgLyogV2Ugb25seSBzdXBwb3J0IFJTQSBw dWJsaWMga2V5cy4gVGhpcyBlbmNvZGVzIFttb2R1bHVzLCBwdWJsaWNFeHBvbmVudF0uICovCisg IGdjcnlfbXBpX3QgbXBpc1syXTsKK307CisKIC8qIEEgUEtDUyM3IHNpZ25lZERhdGEgc2lnbmVy SW5mby4gKi8KIHN0cnVjdCBwa2NzN19zaWduZXJJbmZvCiB7CkBAIC00Myw2ICs1OCwyMSBAQCBz dHJ1Y3QgcGtjczdfc2lnbmVkRGF0YQogICBzdHJ1Y3QgcGtjczdfc2lnbmVySW5mbyAqc2lnbmVy SW5mb3M7CiB9OwogCisvKgorICogSW1wb3J0IGEgREVSLWVuY29kZWQgY2VydGlmaWNhdGUgYXQg J2RhdGEnLCBvZiBzaXplICdzaXplJy4KKyAqIFBsYWNlIHRoZSByZXN1bHRzIGludG8gJ3Jlc3Vs dHMnLCB3aGljaCBtdXN0IGJlIGFscmVhZHkgYWxsb2NhdGVkLgorICovCitleHRlcm4gZ3J1Yl9l cnJfdAorcGFyc2VfeDUwOV9jZXJ0aWZpY2F0ZSAoY29uc3Qgdm9pZCAqZGF0YSwgZ3J1Yl9zaXpl X3Qgc2l6ZSwgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKnJlc3VsdHMpOworCisvKgorICogUmVs ZWFzZSBhbGwgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSB4NTA5IGNlcnRpZmljYXRl LgorICogSWYgdGhlIGNhbGxlciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGhlIGNlcnRpZmljYXRl LCBpdCBtdXN0IGZyZWUgaXQuCisgKiBUaGUgY2FsbGVyIGlzIGFsc28gcmVzcG9uc2libGUgZm9y IG1haW50ZW5hbmNlIG9mIHRoZSBsaW5rZWQgbGlzdC4KKyAqLworZXh0ZXJuIHZvaWQKK2NlcnRp ZmljYXRlX3JlbGVhc2UgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0KTsKKwogLyoKICAq IFBhcnNlIGEgUEtDUyM3IG1lc3NhZ2UsIHdoaWNoIG11c3QgYmUgYSBzaWduZWREYXRhIG1lc3Nh Z2UuCiAgKiBUaGUgbWVzc2FnZSBtdXN0IGJlIGluICdzaWdidWYnIGFuZCBvZiBzaXplICdkYXRh X3NpemUnLiBUaGUgcmVzdWx0IGlzCmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBw ZW5kZWRzaWcveDUwOS5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjA1YjIyZjY2ZgotLS0gL2Rldi9u dWxsCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKQEAgLTAsMCAr MSw5NTMgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICog IENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIsIDIwMjUgSUJNIENvcnBvcmF0aW9uCisgKgor ICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpYnRhc24xLmg+CisjaW5jbHVkZSA8 Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdydWIvZXJyLmg+CisjaW5jbHVkZSA8Z3J1Yi9tbS5o PgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+CisjaW5j bHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+CisKKyNpbmNsdWRlICJhcHBlbmRlZHNpZy5oIgor CitzdGF0aWMgY2hhciBhc24xX2Vycm9yW0FTTjFfTUFYX0VSUk9SX0RFU0NSSVBUSU9OX1NJWkVd OworCisKKy8qIFJGQyAzMjc5IDIuMy4xICBSU0EgS2V5cyAqLworc3RhdGljIGNvbnN0IGNoYXIg KnJzYUVuY3J5cHRpb25fb2lkID0gIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjsKKworLyogUkZDIDUy ODAgQXBwZW5kaXggQSAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbW1vbk5hbWVfb2lkID0gIjIu NS40LjMiOworCisvKiBSRkMgNTI4MCA0LjIuMS4zIEtleSBVc2FnZSAqLworc3RhdGljIGNvbnN0 IGNoYXIgKmtleVVzYWdlX29pZCA9ICIyLjUuMjkuMTUiOworCitzdGF0aWMgY29uc3QgZ3J1Yl91 aW50OF90IGRpZ2l0YWxTaWduYXR1cmVVc2FnZSA9IDB4ODA7CisKKy8qIFJGQyA1MjgwIDQuMi4x LjkgQmFzaWMgQ29uc3RyYWludHMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpiYXNpY0NvbnN0cmFp bnRzX29pZCA9ICIyLjUuMjkuMTkiOworCisvKiBSRkMgNTI4MCA0LjIuMS4xMiBFeHRlbmRlZCBL ZXkgVXNhZ2UgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpleHRlbmRlZEtleVVzYWdlX29pZCA9ICIy LjUuMjkuMzciOworc3RhdGljIGNvbnN0IGNoYXIgKmNvZGVTaWduaW5nVXNhZ2Vfb2lkID0gIjEu My42LjEuNS41LjcuMy4zIjsKKworLyoKKyAqIFJGQyAzMjc5IDIuMy4xCisgKgorICogIFRoZSBS U0EgcHVibGljIGtleSBNVVNUIGJlIGVuY29kZWQgdXNpbmcgdGhlIEFTTi4xIHR5cGUgUlNBUHVi bGljS2V5OgorICoKKyAqICAgICBSU0FQdWJsaWNLZXkgOjo9IFNFUVVFTkNFIHsKKyAqICAgICAg ICBtb2R1bHVzICAgICAgICAgICAgSU5URUdFUiwgICAgLS0gbgorICogICAgICAgIHB1YmxpY0V4 cG9uZW50ICAgICBJTlRFR0VSICB9ICAtLSBlCisgKgorICogIHdoZXJlIG1vZHVsdXMgaXMgdGhl IG1vZHVsdXMgbiwgYW5kIHB1YmxpY0V4cG9uZW50IGlzIHRoZSBwdWJsaWMKKyAqICBleHBvbmVu dCBlLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9wYXJzZV9yc2FfcHVia2V5IChncnVi X3VpbnQ4X3QgKmRlciwgaW50IGRlcnNpemUsIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0 aWZpY2F0ZSkKK3sKKyAgaW50IHJlc3VsdDsKKyAgYXNuMV9ub2RlIHNwayA9IE5VTEw7CisgIGdy dWJfdWludDhfdCAqbV9kYXRhLCAqZV9kYXRhOworICBpbnQgbV9zaXplLCBlX3NpemU7CisgIGdy dWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgZ2NyeV9lcnJvcl90IGdjcnlfZXJyOwor CisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX2dudXRsc19hc24s ICJHTlVUTFMuUlNBUHVibGljS2V5IiwgJnNwayk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUND RVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAg ICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNyZWF0ZSBzdG9yYWdlIGZvciBwdWJsaWMga2V5 IEFTTi4xIGRhdGEuIik7CisKKyAgcmVzdWx0ID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmc3BrLCBk ZXIsICZkZXJzaXplLCBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOwor ICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImNh bm5vdCBkZWNvZGUgY2VydGlmaWNhdGUgcHVibGljIGtleSBERVI6ICVzIiwgYXNuMV9lcnJvcik7 CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIG1fZGF0YSA9IGdydWJfYXNuMV9hbGxv Y2F0ZV9hbmRfcmVhZCAoc3BrLCAibW9kdWx1cyIsICJSU0EgbW9kdWx1cyIsICZtX3NpemUpOwor ICBpZiAobV9kYXRhID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAg ICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgZV9kYXRhID0gZ3J1Yl9hc24xX2FsbG9jYXRl X2FuZF9yZWFkIChzcGssICJwdWJsaWNFeHBvbmVudCIsICJSU0EgcHVibGljIGV4cG9uZW50Iiwg JmVfc2l6ZSk7CisgIGlmIChlX2RhdGEgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnVi X2Vycm5vOworICAgICAgZ290byBjbGVhbnVwX21fZGF0YTsKKyAgICB9CisKKyAgLyoKKyAgICog Q29udmVydCBtLCBlIHRvIG1waQorICAgKgorICAgKiBuc2Nhbm5lZCBpcyBub3Qgc2V0IGZvciBG TVRfVVNHLCBpdCdzIG9ubHkgc2V0IGZvciBGTVRfUEdQLAorICAgKiBzbyB3ZSBjYW4ndCB2ZXJp ZnkgaXQuCisgICAqLworICBnY3J5X2VyciA9IGdjcnlfbXBpX3NjYW4gKCZjZXJ0aWZpY2F0ZS0+ bXBpc1swXSwgR0NSWU1QSV9GTVRfVVNHLCBtX2RhdGEsIG1fc2l6ZSwgTlVMTCk7CisgIGlmIChn Y3J5X2VyciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJy b3IgbG9hZGluZyBSU0EgbW9kdWx1cyBpbnRvIE1QSSBzdHJ1Y3R1cmU6ICVkIiwgZ2NyeV9lcnIp OworICAgICAgZ290byBjbGVhbnVwX2VfZGF0YTsKKyAgICB9CisKKyAgZ2NyeV9lcnIgPSBnY3J5 X21waV9zY2FuICgmY2VydGlmaWNhdGUtPm1waXNbMV0sIEdDUllNUElfRk1UX1VTRywgZV9kYXRh LCBlX3NpemUsIE5VTEwpOworICBpZiAoZ2NyeV9lcnIgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAg ICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAg ICAgICAgICAgICAgICAgICAgICAgImVycm9yIGxvYWRpbmcgUlNBIGV4cG9uZW50IGludG8gTVBJ IHN0cnVjdHVyZTogJWQiLCBnY3J5X2Vycik7CisgICAgICBnb3RvIGNsZWFudXBfbV9tcGk7Cisg ICAgfQorCisgIGdydWJfZnJlZSAoZV9kYXRhKTsKKyAgZ3J1Yl9mcmVlIChtX2RhdGEpOworICBh c24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZzcGspOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOwor CisgY2xlYW51cF9tX21waToKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoY2VydGlmaWNhdGUtPm1waXNb MF0pOworIGNsZWFudXBfZV9kYXRhOgorICBncnViX2ZyZWUgKGVfZGF0YSk7CisgY2xlYW51cF9t X2RhdGE6CisgIGdydWJfZnJlZSAobV9kYXRhKTsKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9z dHJ1Y3R1cmUgKCZzcGspOworCisgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSRkMgNTI4MDoK KyAqICAgU3ViamVjdFB1YmxpY0tleUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsKKyAqICAgICAgIGFs Z29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgKiAgICAgICBzdWJqZWN0 UHVibGljS2V5ICAgICBCSVQgU1RSSU5HICB9CisgKgorICogQWxnb3JpdGhtSWRlbnRpZmllcnMg Y29tZSBmcm9tIFJGQyAzMjc5LCB3ZSBhcmUgbm90IHN0cmljdGx5IGNvbXBpbGFudCBhcyB3ZQor ICogb25seSBzdXBwb3J0IFJTQSBFbmNyeXB0aW9uLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAor Z3J1Yl94NTA5X3JlYWRfc3ViamVjdF9wdWJsaWNfa2V5IChhc24xX25vZGUgYXNuLCBzdHJ1Y3Qg eDUwOV9jZXJ0aWZpY2F0ZSAqcmVzdWx0cykKK3sKKyAgaW50IHJlc3VsdDsKKyAgZ3J1Yl9lcnJf dCBlcnI7CisgIGNvbnN0IGNoYXIgKmFsZ29fbmFtZSA9ICJ0YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0 UHVibGljS2V5SW5mby5hbGdvcml0aG0uYWxnb3JpdGhtIjsKKyAgY29uc3QgY2hhciAqcGFyYW1z X25hbWUgPSAidGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm8uYWxnb3JpdGhtLnBh cmFtZXRlcnMiOworICBjb25zdCBjaGFyICpwa19uYW1lID0gInRic0NlcnRpZmljYXRlLnN1Ympl Y3RQdWJsaWNLZXlJbmZvLnN1YmplY3RQdWJsaWNLZXkiOworICBjaGFyIGFsZ29fb2lkW01BWF9P SURfTEVOXTsKKyAgaW50IGFsZ29fc2l6ZSA9IHNpemVvZiAoYWxnb19vaWQpOworICBjaGFyIHBh cmFtc192YWx1ZVsyXTsKKyAgaW50IHBhcmFtc19zaXplID0gc2l6ZW9mIChwYXJhbXNfdmFsdWUp OworICBncnViX3VpbnQ4X3QgKmtleV9kYXRhID0gTlVMTDsKKyAgaW50IGtleV9zaXplID0gMDsK KyAgdW5zaWduZWQgaW50IGtleV90eXBlOworCisgIC8qIEFsZ29yaXRobTogc2VlIG5vdGVzIGZv ciByc2FFbmNyeXB0aW9uX29pZC4gKi8KKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChhc24s IGFsZ29fbmFtZSwgYWxnb19vaWQsICZhbGdvX3NpemUpOworICBpZiAocmVzdWx0ICE9IEFTTjFf U1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg ImVycm9yIHJlYWRpbmcgeDUwOSBwdWJsaWMga2V5IGFsZ29yaXRobTogJXMiLAorICAgICAgICAg ICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKworICBpZiAoZ3J1Yl9zdHJu Y21wIChhbGdvX29pZCwgcnNhRW5jcnlwdGlvbl9vaWQsIHNpemVvZiAocnNhRW5jcnlwdGlvbl9v aWQpKSAhPSAwKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5U RURfWUVULAorICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgeDUwOSBwdWJsaWMg a2V5IGFsZ29yaXRobTogJXMiLCBhbGdvX29pZCk7CisKKyAgLyoKKyAgICogUkZDIDMyNzkgMi4z LjEKKyAgICogVGhlIHJzYUVuY3J5cHRpb24gT0lEIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4g dGhlIGFsZ29yaXRobSBmaWVsZAorICAgKiBvZiBhIHZhbHVlIG9mIHR5cGUgQWxnb3JpdGhtSWRl bnRpZmllci4gIFRoZSBwYXJhbWV0ZXJzIGZpZWxkIE1VU1QKKyAgICogaGF2ZSBBU04uMSB0eXBl IE5VTEwgZm9yIHRoaXMgYWxnb3JpdGhtIGlkZW50aWZpZXIuCisgICAqLworICByZXN1bHQgPSBh c24xX3JlYWRfdmFsdWUgKGFzbiwgcGFyYW1zX25hbWUsIHBhcmFtc192YWx1ZSwgJnBhcmFtc19z aXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHg1MDkgcHVibGljIGtl eSBwYXJhbWV0ZXJzOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3Ig KHJlc3VsdCkpOworCisgIGlmIChwYXJhbXNfdmFsdWVbMF0gIT0gQVNOMV9UQUdfTlVMTCkKKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgImludmFsaWQgeDUwOSBwdWJsaWMga2V5IHBhcmFtZXRlcnM6IGV4cGVjdGVk IE5VTEwuIik7CisKKyAgLyoKKyAgICogUkZDIDMyNzkgMi4zLjE6ICBUaGUgREVSIGVuY29kZWQg UlNBUHVibGljS2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgQklUCisgICAqIFNUUklORyBzdWJqZWN0 UHVibGljS2V5LgorICAgKi8KKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlX3R5cGUgKGFzbiwg cGtfbmFtZSwgTlVMTCwgJmtleV9zaXplLCAma2V5X3R5cGUpOworICBpZiAocmVzdWx0ICE9IEFT TjFfTUVNX0VSUk9SKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9U WVBFLCAiZXJyb3IgcmVhZGluZyBzaXplIG9mIHg1MDkgcHVibGljIGtleTogJXMiLAorICAgICAg ICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgaWYgKGtleV90eXBl ICE9IEFTTjFfRVRZUEVfQklUX1NUUklORykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX0ZJTEVfVFlQRSwgInVuZXhwZWN0ZWQgQVNOLjEgdHlwZSB3aGVuIHJlYWRpbmcgeDUw OSBwdWJsaWMga2V5OiAleCIsCisgICAgICAgICAgICAgICAgICAgICAgIGtleV90eXBlKTsKKwor ICAvKiBMZW5ndGggaXMgaW4gYml0cy4gKi8KKyAga2V5X3NpemUgPSAoa2V5X3NpemUgKyA3KSAv IDg7CisKKyAga2V5X2RhdGEgPSBncnViX21hbGxvYyAoa2V5X3NpemUpOworICBpZiAoa2V5X2Rh dGEgPT0gTlVMTCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9S WSwgIm91dCBvZiBtZW1vcnkgZm9yIHg1MDkgcHVibGljIGtleS4iKTsKKworICByZXN1bHQgPSBh c24xX3JlYWRfdmFsdWUgKGFzbiwgcGtfbmFtZSwga2V5X2RhdGEsICZrZXlfc2l6ZSk7CisgIGlm IChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGdydWJfZnJlZSAoa2V5X2Rh dGEpOworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJl cnJvciByZWFkaW5nIHB1YmxpYyBrZXkgZGF0YS4iKTsKKyAgICB9CisKKyAga2V5X3NpemUgPSAo a2V5X3NpemUgKyA3KSAvIDg7CisgIGVyciA9IGdydWJfcGFyc2VfcnNhX3B1YmtleSAoa2V5X2Rh dGEsIGtleV9zaXplLCByZXN1bHRzKTsKKyAgZ3J1Yl9mcmVlIChrZXlfZGF0YSk7CisKKyAgcmV0 dXJuIGVycjsKK30KKworLyogRGVjb2RlIGEgc3RyaW5nIGFzIGRlZmluZWQgaW4gQXBwZW5kaXgg QS4gKi8KK3N0YXRpYyBncnViX2Vycl90CitkZWNvZGVfc3RyaW5nIChjaGFyICpkZXIsIGludCBk ZXJfc2l6ZSwgY2hhciAqKnN0cmluZywgZ3J1Yl9zaXplX3QgKnN0cmluZ19zaXplKQoreworICBh c24xX25vZGUgc3RyYXNuOworICBpbnQgcmVzdWx0OworICBjaGFyICpjaG9pY2U7CisgIGludCBj aG9pY2Vfc2l6ZSA9IDA7CisgIGludCB0bXBfc2l6ZSA9IDA7CisgIGdydWJfZXJyX3QgZXJyID0g R1JVQl9FUlJfTk9ORTsKKworICByZXN1bHQgPSBhc24xX2NyZWF0ZV9lbGVtZW50IChncnViX2du dXRsc19wa2l4X2FzbiwgIlBLSVgxLkRpcmVjdG9yeVN0cmluZyIsICZzdHJhc24pOworICBpZiAo cmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf T1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUg QVNOLjEgc3RydWN0dXJlIGZvciBjZXJ0aWZpY2F0ZTogJXMiLAorICAgICAgICAgICAgICAgICAg ICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNv ZGluZzIgKCZzdHJhc24sIGRlciwgJmRlcl9zaXplLCBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9E RVIsIGFzbjFfZXJyb3IpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7Cisg ICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAg ICAgICAgICAgICAgICAgImNvdWxkIG5vdCBwYXJzZSBERVIgZm9yIERpcmVjdG9yeVN0cmluZzog JXMiLCBhc24xX2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgY2hvaWNl ID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChzdHJhc24sICIiLCAiRGlyZWN0b3J5U3Ry aW5nIGNob2ljZSIsICZjaG9pY2Vfc2l6ZSk7CisgIGlmIChjaG9pY2UgPT0gTlVMTCkKKyAgICB7 CisgICAgICBlcnIgPSBncnViX2Vycm5vOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKwor ICBpZiAoZ3J1Yl9zdHJuY21wICgidXRmOFN0cmluZyIsIGNob2ljZSwgY2hvaWNlX3NpemUpID09 IDApCisgICAgeworICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChzdHJhc24sICJ1dGY4 U3RyaW5nIiwgTlVMTCwgJnRtcF9zaXplKTsKKyAgICAgIGlmIChyZXN1bHQgIT0gQVNOMV9NRU1f RVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBzaXplIG9mIFVURi04IHN0cmluZzogJXMiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAg ICAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYg KGdydWJfc3RybmNtcCAoInByaW50YWJsZVN0cmluZyIsIGNob2ljZSwgY2hvaWNlX3NpemUpID09 IDApCisgICAgeworICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChzdHJhc24sICJwcmlu dGFibGVTdHJpbmciLCBOVUxMLCAmdG1wX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04x X01FTV9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHNpemUgb2YgcHJpbnRhYmxlU3RyaW5n OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0 KSk7CisgICAgICAgICAgZ290byBjbGVhbnVwX2Nob2ljZTsKKyAgICAgICAgfQorICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBMRU1F TlRFRF9ZRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAib25seSBVVEYtOCBhbmQgcHJpbnRh YmxlIERpcmVjdG9yeVN0cmluZ3MgYXJlIHN1cHBvcnRlZCwgZ290ICVzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNob2ljZSk7CisgICAgICBnb3RvIGNsZWFudXBfY2hvaWNlOworICAgIH0K KworICAvKiBSZWFkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0cmFpbGluZyBOVUwuICovCisgIHRt cF9zaXplKys7CisKKyAgKnN0cmluZyA9IGdydWJfbWFsbG9jICh0bXBfc2l6ZSk7CisgIGlmICgq c3RyaW5nID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf T1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYWxsb2NhdGUg bWVtb3J5IGZvciBEaXJlY3RvcnlTdHJpbmcgY29udGVudHMuIik7CisgICAgICBnb3RvIGNsZWFu dXBfY2hvaWNlOworICAgIH0KKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwg Y2hvaWNlLCAqc3RyaW5nLCAmdG1wX3NpemUpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VT UykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBF LCAiZXJyb3IgcmVhZGluZyBvdXQgJXMgaW4gRGlyZWN0b3J5U3RyaW5nOiAlcyIsCisgICAgICAg ICAgICAgICAgICAgICAgICBjaG9pY2UsIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAg Z3J1Yl9mcmVlICgqc3RyaW5nKTsKKyAgICAgICpzdHJpbmcgPSBOVUxMOworICAgICAgZ290byBj bGVhbnVwX2Nob2ljZTsKKyAgICB9CisKKyAgKnN0cmluZ19zaXplID0gdG1wX3NpemUgKyAxOwor ICAoKnN0cmluZylbdG1wX3NpemVdID0gJ1wwJzsKKworIGNsZWFudXBfY2hvaWNlOgorICBncnVi X2ZyZWUgKGNob2ljZSk7CisgY2xlYW51cDoKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmc3Ry YXNuKTsKKworICByZXR1cm4gZXJyOworfQorCisvKgorICogVEJTQ2VydGlmaWNhdGUgIDo6PSAg U0VRVUVOQ0UgIHsKKyAqICAgICAgIHZlcnNpb24gICAgICAgICBbMF0gIEVYUExJQ0lUIFZlcnNp b24gREVGQVVMVCB2MSwKKyAqIC4uLgorICoKKyAqIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgeyAg djEoMCksIHYyKDEpLCB2MygyKSAgfQorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAorY2hlY2tfdmVy c2lvbiAoYXNuMV9ub2RlIGNlcnRpZmljYXRlKQoreworICBpbnQgcmM7CisgIGNvbnN0IGNoYXIg Km5hbWUgPSAidGJzQ2VydGlmaWNhdGUudmVyc2lvbiI7CisgIGdydWJfdWludDhfdCB2ZXJzaW9u OworICBpbnQgbGVuID0gc2l6ZW9mICh2ZXJzaW9uKTsKKworICByYyA9IGFzbjFfcmVhZF92YWx1 ZSAoY2VydGlmaWNhdGUsIG5hbWUsICZ2ZXJzaW9uLCAmbGVuKTsKKworICAvKiBSZXF1aXJlIHZl cnNpb24gMy4gKi8KKyAgaWYgKHJjICE9IEFTTjFfU1VDQ0VTUyB8fCBsZW4gIT0gMSkKKyAgICBy ZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcg Y2VydGlmaWNhdGUgdmVyc2lvbi4iKTsKKworICBpZiAodmVyc2lvbiAhPSAweDAyKQorICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAg ICAgICAgICAiaW52YWxpZCB4NTA5IGNlcnRpZmljYXRlIHZlcnNpb24sIGV4cGVjdGVkIHYzICgw eDAyKSwgZ290IDB4JTAyeC4iLAorICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKTsKKwor ICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyoKKyAqIFRoaXMgaXMgYW4gWC41MDEgTmFt ZSwgd2hpY2ggaXMgY29tcGxleC4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2UgZXh0cmFjdCBv bmx5IHRoZSBDTi4KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3JlYWRfbmFtZSAoYXNuMV9ub2Rl IGFzbiwgY29uc3QgY2hhciAqbmFtZV9wYXRoLCBjaGFyICoqbmFtZSwgZ3J1Yl9zaXplX3QgKm5h bWVfc2l6ZSkKK3sKKyAgaW50IHNlcV9jb21wb25lbnRzLCBzZXRfY29tcG9uZW50czsKKyAgaW50 IHJlc3VsdDsKKyAgaW50IGksIGo7CisgIGNoYXIgKnRvcF9wYXRoLCAqc2V0X3BhdGgsICp0eXBl X3BhdGgsICp2YWxfcGF0aDsKKyAgY2hhciB0eXBlW01BWF9PSURfTEVOXTsKKyAgaW50IHR5cGVf bGVuID0gc2l6ZW9mICh0eXBlKTsKKyAgaW50IHN0cmluZ19zaXplID0gMDsKKyAgY2hhciAqc3Ry aW5nX2RlcjsKKyAgZ3J1Yl9lcnJfdCBlcnI7CisKKyAgKm5hbWUgPSBOVUxMOworCisgIHRvcF9w YXRoID0gZ3J1Yl94YXNwcmludGYgKCIlcy5yZG5TZXF1ZW5jZSIsIG5hbWVfcGF0aCk7CisgIGlm ICh0b3BfcGF0aCA9PSBOVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRf T0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIG1l bW9yeSBmb3IgJXMgbmFtZSBwYXJzaW5nIHBhdGguIiwgbmFtZV9wYXRoKTsKKworICByZXN1bHQg PSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoYXNuLCB0b3BfcGF0aCwgJnNlcV9jb21wb25lbnRz KTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIGNvdW50aW5nIG5hbWUgY29t cG9uZW50czogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVz dWx0KSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGZvciAoaSA9IDE7IGkgPD0g c2VxX2NvbXBvbmVudHM7IGkrKykKKyAgICB7CisgICAgICBzZXRfcGF0aCA9IGdydWJfeGFzcHJp bnRmICgiJXMuPyVkIiwgdG9wX3BhdGgsIGkpOworICAgICAgaWYgKHNldF9wYXRoID09IE5VTEwp CisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0Zf TUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUg bWVtb3J5IGZvciAlcyBuYW1lIHNldCBwYXJzaW5nIHBhdGguIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuYW1lX3BhdGgpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zZXQ7CisgICAg ICAgIH0KKyAgICAgIC8qIFRoaXMgYnJpbmdzIHVzLCBob3BlZnVsbHksIHRvIGEgc2V0LiAqLwor ICAgICAgcmVzdWx0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGFzbiwgc2V0X3BhdGgsICZz ZXRfY29tcG9uZW50cyk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAg ICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGNvdW50aW5nIG5hbWUgc3ViLWNv bXBvbmVudHMgY29tcG9uZW50cyAoZWxlbWVudCAlZCk6ICVzIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNs ZWFudXBfc2V0OworICAgICAgICB9CisgICAgICBmb3IgKGogPSAxOyBqIDw9IHNldF9jb21wb25l bnRzOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICB0eXBlX3BhdGggPSBncnViX3hhc3ByaW50 ZiAoIiVzLj8lZC4/JWQudHlwZSIsIHRvcF9wYXRoLCBpLCBqKTsKKyAgICAgICAgICBpZiAodHlw ZV9wYXRoID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1lIGNvbXBvbmVudCB0 eXBlIHBhdGguIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9wYXRoKTsK KyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3NldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICB0eXBlX2xlbiA9IHNpemVvZiAodHlwZSk7CisgICAgICAgICAgcmVzdWx0ID0gYXNuMV9yZWFk X3ZhbHVlIChhc24sIHR5cGVfcGF0aCwgdHlwZSwgJnR5cGVfbGVuKTsKKyAgICAgICAgICBpZiAo cmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJy ID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgJXMg bmFtZSBjb21wb25lbnQgdHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lX3BhdGgsIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgICAgICAgICBnb3Rv IGNsZWFudXBfdHlwZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChncnViX3N0cm5j bXAgKHR5cGUsIGNvbW1vbk5hbWVfb2lkLCB0eXBlX2xlbikgIT0gMCkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgZ3J1Yl9mcmVlICh0eXBlX3BhdGgpOworICAgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHZhbF9wYXRoID0gZ3J1Yl94YXNwcmlu dGYgKCIlcy4/JWQuPyVkLnZhbHVlIiwgdG9wX3BhdGgsIGksIGopOworICAgICAgICAgIGlmICh2 YWxfcGF0aCA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnVi X2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMgbmFtZSBjb21wb25lbnQg dmFsdWUgcGF0aC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3BhdGgp OworICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfdHlwZTsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgIHN0cmluZ19kZXIgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGFzbiwgdmFs X3BhdGgsIG5hbWVfcGF0aCwgJnN0cmluZ19zaXplKTsKKyAgICAgICAgICBpZiAoc3RyaW5nX2Rl ciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm5v OworICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsX3BhdGg7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICBlcnIgPSBkZWNvZGVfc3RyaW5nIChzdHJpbmdfZGVyLCBzdHJpbmdfc2l6ZSwg bmFtZSwgbmFtZV9zaXplKTsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZ290byBj bGVhbnVwX3N0cmluZzsKKworICAgICAgICAgIGdydWJfZnJlZSAoc3RyaW5nX2Rlcik7CisgICAg ICAgICAgZ3J1Yl9mcmVlICh0eXBlX3BhdGgpOworICAgICAgICAgIGdydWJfZnJlZSAodmFsX3Bh dGgpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIGdydWJfZnJlZSAoc2V0 X3BhdGgpOworICAgICAgaWYgKCpuYW1lKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgZ3J1 Yl9mcmVlICh0b3BfcGF0aCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVw X3N0cmluZzoKKyAgZ3J1Yl9mcmVlIChzdHJpbmdfZGVyKTsKKyBjbGVhbnVwX3ZhbF9wYXRoOgor ICBncnViX2ZyZWUgKHZhbF9wYXRoKTsKKyBjbGVhbnVwX3R5cGU6CisgIGdydWJfZnJlZSAodHlw ZV9wYXRoKTsKKyBjbGVhbnVwX3NldDoKKyAgZ3J1Yl9mcmVlIChzZXRfcGF0aCk7CisgY2xlYW51 cDoKKyAgZ3J1Yl9mcmVlICh0b3BfcGF0aCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAq IFZlcmlmeSB0aGUgS2V5IFVzYWdlIGV4dGVuc2lvbi4KKyAqIFdlIHJlcXVpcmUgdGhlIERpZ2l0 YWwgU2lnbmF0dXJlIHVzYWdlLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2tleV91 c2FnZSAoZ3J1Yl91aW50OF90ICp2YWx1ZSwgaW50IHZhbHVlX3NpemUpCit7CisgIGFzbjFfbm9k ZSB1c2FnZWFzbjsKKyAgaW50IHJlc3VsdDsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9O T05FOworICBncnViX3VpbnQ4X3QgdXNhZ2UgPSAweGZmOworICBpbnQgdXNhZ2Vfc2l6ZSA9IHNp emVvZiAodXNhZ2Vfc2l6ZSk7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1 Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5LZXlVc2FnZSIsICZ1c2FnZWFzbik7CisgIGlmIChy ZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9P VVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBB U04uMSBzdHJ1Y3R1cmUgZm9yIGtleSB1c2FnZS4iKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9k ZWNvZGluZzIgKCZ1c2FnZWFzbiwgdmFsdWUsICZ2YWx1ZV9zaXplLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7 CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAi ZXJyb3IgcGFyc2luZyBERVIgZm9yIEtleSBVc2FnZTogJXMiLCBhc24xX2Vycm9yKTsKKyAgICAg IGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlICh1c2Fn ZWFzbiwgIiIsICZ1c2FnZSwgJnVzYWdlX3NpemUpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VD Q0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9U WVBFLCAiZXJyb3IgcmVhZGluZyBLZXkgVXNhZ2UgdmFsdWU6ICVzIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgZ290byBjbGVhbnVwOwor ICAgIH0KKworICBpZiAoISh1c2FnZSAmIGRpZ2l0YWxTaWduYXR1cmVVc2FnZSkpCisgICAgewor ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICJrZXkgdXNhZ2UgKDB4JXgpIG1pc3NpbmcgRGlnaXRhbCBTaWduYXR1 cmUgdXNhZ2UuIiwgdXNhZ2UpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworIGNsZWFu dXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnVzYWdlYXNuKTsKKworICByZXR1cm4gZXJy OworfQorCisvKgorICogQmFzaWNDb25zdHJhaW50cyA6Oj0gU0VRVUVOQ0UgeworICogICAgICAg Y0EgICAgICAgICAgICAgICAgICAgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAorICogICAgICAg cGF0aExlbkNvbnN0cmFpbnQgICAgICAgSU5URUdFUiAoMC4uTUFYKSBPUFRJT05BTCB9CisgKi8K K3N0YXRpYyBncnViX2Vycl90Cit2ZXJpZnlfYmFzaWNfY29uc3RyYWludHMgKGdydWJfdWludDhf dCAqdmFsdWUsIGludCB2YWx1ZV9zaXplKQoreworICBhc24xX25vZGUgYmFzaWNhc247CisgIGlu dCByZXN1bHQ7CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hhciBjQVs2 XTsgLyogRkFMU0Ugb3IgVFJVRS4gKi8KKyAgaW50IGNBX3NpemUgPSBzaXplb2YgKGNBKTsKKwor ICByZXN1bHQgPSBhc24xX2NyZWF0ZV9lbGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBL SVgxLkJhc2ljQ29uc3RyYWludHMiLCAmYmFzaWNhc24pOworICBpZiAocmVzdWx0ICE9IEFTTjFf U1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwK KyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJl IGZvciBCYXNpYyBDb25zdHJhaW50cy4iKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGlu ZzIgKCZiYXNpY2FzbiwgdmFsdWUsICZ2YWx1ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlm IChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3Ig cGFyc2luZyBERVIgZm9yIEJhc2ljIENvbnN0cmFpbnRzOiAlcyIsIGFzbjFfZXJyb3IpOworICAg ICAgZ290byBjbGVhbnVwOworICAgIH0KKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGJh c2ljYXNuLCAiY0EiLCBjQSwgJmNBX3NpemUpOworICBpZiAocmVzdWx0ID09IEFTTjFfRUxFTUVO VF9OT1RfRk9VTkQpCisgICAgeworICAgICAgLyogTm90IHByZXNlbnQsIGRlZmF1bHQgaXMgRmFs c2UsIHNvIHRoaXMgaXMgT0suICovCisgICAgICBlcnIgPSBHUlVCX0VSUl9OT05FOworICAgICAg Z290byBjbGVhbnVwOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykK KyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi ZXJyb3IgcmVhZGluZyBCYXNpYyBDb25zdHJhaW50cyBjQSB2YWx1ZTogJXMiLAorICAgICAgICAg ICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICBnb3RvIGNsZWFu dXA7CisgICAgfQorCisgIC8qIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IG5vdCBiZSBhIENBIGNlcnRp ZmljYXRlLiAqLworICBpZiAoZ3J1Yl9zdHJuY21wICgiRkFMU0UiLCBjQSwgY0Ffc2l6ZSkgIT0g MCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBF LCAidW5leHBlY3RlZCBDQSB2YWx1ZTogJXMiLCBjQSk7CisgICAgICBnb3RvIGNsZWFudXA7Cisg ICAgfQorCisgY2xlYW51cDoKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmYmFzaWNhc24pOwor CisgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhlIEV4dGVuZGVkIEtleSBVc2Fn ZSBleHRlbnNpb24uCisgKiBXZSByZXF1aXJlIHRoZSBDb2RlIFNpZ25pbmcgdXNhZ2UuCisgKgor ICogRXh0S2V5VXNhZ2VTeW50YXggOjo9IFNFUVVFTkNFIFNJWkUgKDEuLk1BWCkgT0YgS2V5UHVy cG9zZUlkCisgKgorICogS2V5UHVycG9zZUlkIDo6PSBPQkpFQ1QgSURFTlRJRklFUgorICovCitz dGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2V4dGVuZGVkX2tleV91c2FnZSAoZ3J1Yl91aW50OF90 ICp2YWx1ZSwgaW50IHZhbHVlX3NpemUpCit7CisgIGFzbjFfbm9kZSBleHRlbmRlZGFzbjsKKyAg aW50IHJlc3VsdCwgY291bnQsIGkgPSAwOworICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05P TkU7CisgIGNoYXIgdXNhZ2VbTUFYX09JRF9MRU5dLCBuYW1lWzNdOworICBpbnQgdXNhZ2Vfc2l6 ZSA9IHNpemVvZiAodXNhZ2UpOworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdy dWJfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEuRXh0S2V5VXNhZ2VTeW50YXgiLCAmZXh0ZW5kZWRh c24pOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxk IG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZvciBFeHRlbmRlZCBLZXkgVXNhZ2UuIik7CisK KyAgcmVzdWx0ID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmZXh0ZW5kZWRhc24sIHZhbHVlLCAmdmFs dWVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU04xX0RFQ09ERV9GTEFH X1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykK KyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAor ICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNpbmcgREVSIGZvciBFeHRlbmRlZCBL ZXkgVXNhZ2U6ICVzIiwgYXNuMV9lcnJvcik7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQor CisgIC8qIElmIEVLVXMgYXJlIHByZXNlbnQsIGl0IGNoZWNrcyB0aGUgcHJlc2VudHMgb2YgQ29k ZSBTaWduaW5nIHVzYWdlLiAqLworICByZXN1bHQgPSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAo ZXh0ZW5kZWRhc24sICIiLCAmY291bnQpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykK KyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi ZXJyb3IgY291bnRpbmcgbnVtYmVyIG9mIEV4dGVuZGVkIEtleSBVc2FnZXM6ICVzIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgZ290byBj bGVhbnVwOworICAgIH0KKworICBmb3IgKGkgPSAxOyBpIDwgY291bnQgKyAxOyBpKyspCisgICAg eworICAgICAgZ3J1Yl9tZW1zZXQgKG5hbWUsIDAsIHNpemVvZiAobmFtZSkpOworICAgICAgZ3J1 Yl9zbnByaW50ZiAobmFtZSwgc2l6ZW9mIChuYW1lKSwgIj8lZCIsIGkpOworICAgICAgcmVzdWx0 ID0gYXNuMV9yZWFkX3ZhbHVlIChleHRlbmRlZGFzbiwgbmFtZSwgdXNhZ2UsICZ1c2FnZV9zaXpl KTsKKyAgICAgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAg ICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRp bmcgRXh0ZW5kZWQgS2V5IFVzYWdlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAg ICB9CisKKyAgICAgIGlmIChncnViX3N0cm5jbXAgKGNvZGVTaWduaW5nVXNhZ2Vfb2lkLCB1c2Fn ZSwgdXNhZ2Vfc2l6ZSkgPT0gMCkKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBl cnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXh0ZW5kZWQga2V5IHVz YWdlIG1pc3NpbmcgQ29kZSBTaWduaW5nIHVzYWdlLiIpOworCisgY2xlYW51cDoKKyAgYXNuMV9k ZWxldGVfc3RydWN0dXJlICgmZXh0ZW5kZWRhc24pOworCisgIHJldHVybiBlcnI7Cit9CisKKy8q CisgKiBFeHRlbnNpb25zICA6Oj0gIFNFUVVFTkNFIFNJWkUgKDEuLk1BWCkgT0YgRXh0ZW5zaW9u CisgKgorICogRXh0ZW5zaW9uICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgIGV4dG5JRCAgICAg IE9CSkVDVCBJREVOVElGSUVSLAorICogICAgICBjcml0aWNhbCAgICBCT09MRUFOIERFRkFVTFQg RkFMU0UsCisgKiAgICAgIGV4dG5WYWx1ZSAgIE9DVEVUIFNUUklORworICogICAgICAgICAgICAg ICAgICAtLSBjb250YWlucyB0aGUgREVSIGVuY29kaW5nIG9mIGFuIEFTTi4xIHZhbHVlCisgKiAg ICAgICAgICAgICAgICAgIC0tIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbiB0eXBlIGlk ZW50aWZpZWQKKyAqICAgICAgICAgICAgICAgICAgLS0gYnkgZXh0bklECisgKiB9CisgKgorICog QSBjZXJ0aWZpY2F0ZSBtdXN0OgorICogIC0gY29udGFpbiB0aGUgRGlnaXRhbCBTaWduYXR1cmUg dXNhZ2UKKyAqICAtIG5vdCBiZSBhIENBCisgKiAgLSBjb250YWluIG5vIGV4dGVuZGVkIHVzYWdl cywgb3IgY29udGFpbiB0aGUgQ29kZSBTaWduaW5nIGV4dGVuZGVkIHVzYWdlCisgKiAgLSBub3Qg Y29udGFpbiBhbnkgb3RoZXIgY3JpdGljYWwgZXh0ZW5zaW9ucyAoUkZDIDUyODAgcyA0LjIpCisg Ki8KK3N0YXRpYyBncnViX2Vycl90Cit2ZXJpZnlfZXh0ZW5zaW9ucyAoYXNuMV9ub2RlIGNlcnQp Cit7CisgIGludCByZXN1bHQ7CisgIGludCBleHQsIG51bV9leHRlbnNpb25zID0gMDsKKyAgaW50 IHVzYWdlX3ByZXNlbnQgPSAwLCBjb25zdHJhaW50c19wcmVzZW50ID0gMCwgZXh0ZW5kZWRfdXNh Z2VfcHJlc2VudCA9IDA7CisgIGNoYXIgKm9pZF9wYXRoLCAqY3JpdGljYWxfcGF0aCwgKnZhbHVl X3BhdGg7CisgIGNoYXIgZXh0bklEW01BWF9PSURfTEVOXTsKKyAgaW50IGV4dG5JRF9zaXplOwor ICBncnViX2Vycl90IGVycjsKKyAgY2hhciBjcml0aWNhbFs2XTsgLyogV2UgZ2V0IGVpdGhlciAi VFJVRSIgb3IgIkZBTFNFIi4gKi8KKyAgaW50IGNyaXRpY2FsX3NpemU7CisgIGdydWJfdWludDhf dCAqdmFsdWU7CisgIGludCB2YWx1ZV9zaXplOworCisgIHJlc3VsdCA9IGFzbjFfbnVtYmVyX29m X2VsZW1lbnRzIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9ucyIsICZudW1fZXh0ZW5z aW9ucyk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgY291bnRpbmcgbnVtYmVyIG9mIGV4 dGVuc2lvbnM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVz dWx0KSk7CisKKyAgaWYgKG51bV9leHRlbnNpb25zIDwgMikKKyAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgImluc3Vm ZmljaWVudCBudW1iZXIgb2YgZXh0ZW5zaW9ucyBmb3IgY2VydGlmaWNhdGUsIG5lZWQgYXQgbGVh c3QgMiwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbnVtX2V4dGVuc2lvbnMpOwor CisgIGZvciAoZXh0ID0gMTsgZXh0IDw9IG51bV9leHRlbnNpb25zOyBleHQrKykKKyAgICB7Cisg ICAgICBvaWRfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgidGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9u cy4/JWQuZXh0bklEIiwgZXh0KTsKKyAgICAgIGlmIChvaWRfcGF0aCA9PSBOVUxMKQorICAgICAg ICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg ImVycm9yIGV4dGVuc2lvbiBPSUQgcGF0aCBpcyBlbXB0eS4iKTsKKyAgICAgICAgICByZXR1cm4g ZXJyOworICAgICAgICB9CisKKyAgICAgIGV4dG5JRF9zaXplID0gc2l6ZW9mIChleHRuSUQpOwor ICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChjZXJ0LCBvaWRfcGF0aCwgZXh0bklELCAm ZXh0bklEX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAg IHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi ZXJyb3IgcmVhZGluZyBleHRlbnNpb24gT0lEOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgZ290byBjbGVhbnVwX29p ZF9wYXRoOworICAgICAgICB9CisKKyAgICAgIGNyaXRpY2FsX3BhdGggPSBncnViX3hhc3ByaW50 ZiAoInRic0NlcnRpZmljYXRlLmV4dGVuc2lvbnMuPyVkLmNyaXRpY2FsIiwgZXh0KTsKKyAgICAg IGlmIChjcml0aWNhbF9wYXRoID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgY3JpdGljYWwgcGF0aCBp cyBlbXB0eS4iKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfb2lkX3BhdGg7CisgICAgICAgIH0K KworICAgICAgY3JpdGljYWxfc2l6ZSA9IHNpemVvZiAoY3JpdGljYWwpOworICAgICAgcmVzdWx0 ID0gYXNuMV9yZWFkX3ZhbHVlIChjZXJ0LCBjcml0aWNhbF9wYXRoLCBjcml0aWNhbCwgJmNyaXRp Y2FsX3NpemUpOworICAgICAgaWYgKHJlc3VsdCA9PSBBU04xX0VMRU1FTlRfTk9UX0ZPVU5EKQor ICAgICAgICBjcml0aWNhbFswXSA9ICdcMCc7CisgICAgICBlbHNlIGlmIChyZXN1bHQgIT0gQVNO MV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgZXh0ZW5zaW9uIGNyaXRpY2FsaXR5OiAl cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7 CisgICAgICAgICAgZ290byBjbGVhbnVwX2NyaXRpY2FsX3BhdGg7CisgICAgICAgIH0KKworICAg ICAgdmFsdWVfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgidGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9u cy4/JWQuZXh0blZhbHVlIiwgZXh0KTsKKyAgICAgIGlmICh2YWx1ZV9wYXRoID09IE5VTEwpCisg ICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9U WVBFLCAiZXJyb3IgZXh0blZhbHVlIHBhdGggaXMgZW1wdHkuIik7CisgICAgICAgICAgZ290byBj bGVhbnVwX2NyaXRpY2FsX3BhdGg7CisgICAgICAgIH0KKworICAgICAgdmFsdWUgPSBncnViX2Fz bjFfYWxsb2NhdGVfYW5kX3JlYWQgKGNlcnQsIHZhbHVlX3BhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIGV4dGVuc2lvbiB2YWx1ZSIs ICZ2YWx1ZV9zaXplKTsKKyAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICB7CisgICAg ICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWVfcGF0 aDsKKyAgICAgICAgfQorCisgICAgICAvKgorICAgICAgICogTm93IHdlIG11c3Qgc2VlIGlmIHdl IHJlY29nbmlzZSB0aGUgT0lELgorICAgICAgICogSWYgd2UgaGF2ZSBhbiB1bnJlY29nbmlzZWQg Y3JpdGljYWwgZXh0ZW5zaW9uIHdlIE1VU1QgYmFpbC4KKyAgICAgICAqLworICAgICAgaWYgKGdy dWJfc3RybmNtcCAoa2V5VXNhZ2Vfb2lkLCBleHRuSUQsIGV4dG5JRF9zaXplKSA9PSAwKQorICAg ICAgICB7CisgICAgICAgICAgZXJyID0gdmVyaWZ5X2tleV91c2FnZSAodmFsdWUsIHZhbHVlX3Np emUpOworICAgICAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgICAgIGdv dG8gY2xlYW51cF92YWx1ZTsKKworICAgICAgICAgIHVzYWdlX3ByZXNlbnQrKzsKKyAgICAgICAg fQorICAgICAgZWxzZSBpZiAoZ3J1Yl9zdHJuY21wIChiYXNpY0NvbnN0cmFpbnRzX29pZCwgZXh0 bklELCBleHRuSURfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IHZlcmlm eV9iYXNpY19jb25zdHJhaW50cyAodmFsdWUsIHZhbHVlX3NpemUpOworICAgICAgICAgIGlmIChl cnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cF92YWx1ZTsKKwor ICAgICAgICAgIGNvbnN0cmFpbnRzX3ByZXNlbnQrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBp ZiAoZ3J1Yl9zdHJuY21wIChleHRlbmRlZEtleVVzYWdlX29pZCwgZXh0bklELCBleHRuSURfc2l6 ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IHZlcmlmeV9leHRlbmRlZF9rZXlf dXNhZ2UgKHZhbHVlLCB2YWx1ZV9zaXplKTsKKyAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJS X05PTkUpCisgICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisKKyAgICAgICAgICBleHRl bmRlZF91c2FnZV9wcmVzZW50Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3Ry bmNtcCAoIlRSVUUiLCBjcml0aWNhbCwgY3JpdGljYWxfc2l6ZSkgPT0gMCkKKyAgICAgICAgewor ICAgICAgICAgIC8qCisgICAgICAgICAgICogUGVyIHRoZSBSRkMsIHdlIG11c3Qgbm90IHByb2Nl c3MgYSBjZXJ0aWZpY2F0ZSB3aXRoCisgICAgICAgICAgICogYSBjcml0aWNhbCBleHRlbnNpb24g d2UgZG8gbm90IHVuZGVyc3RhbmQuCisgICAgICAgICAgICovCisgICAgICAgICAgZXJyID0gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAidW5oYW5kbGVkIGNyaXRpY2FsIHg1MDkgZXh0ZW5zaW9uIHdpdGggT0lEICVzIiwgZXh0 bklEKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisgICAgICAgIH0KKworICAgICAg Z3J1Yl9mcmVlICh2YWx1ZSk7CisgICAgICBncnViX2ZyZWUgKHZhbHVlX3BhdGgpOworICAgICAg Z3J1Yl9mcmVlIChjcml0aWNhbF9wYXRoKTsKKyAgICAgIGdydWJfZnJlZSAob2lkX3BhdGgpOwor ICAgIH0KKworICBpZiAodXNhZ2VfcHJlc2VudCAhPSAxKQorICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAidW5leHBl Y3RlZCBudW1iZXIgb2YgS2V5IFVzYWdlIGV4dGVuc2lvbnMgLSBleHBlY3RlZCAxLCBnb3QgJWQi LAorICAgICAgICAgICAgICAgICAgICAgICB1c2FnZV9wcmVzZW50KTsKKworICBpZiAoY29uc3Ry YWludHNfcHJlc2VudCAhPSAxKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBudW1iZXIgb2Yg YmFzaWMgY29uc3RyYWludHMgZXh0ZW5zaW9ucyAtIGV4cGVjdGVkIDEsIGdvdCAlZCIsCisgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzX3ByZXNlbnQpOworCisgIGlmIChleHRlbmRl ZF91c2FnZV9wcmVzZW50ID4gMSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgbnVtYmVyIG9m IEV4dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb25zIC0gZXhwZWN0ZWQgMCBvciAxLCBnb3QgJWQi LAorICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRlZF91c2FnZV9wcmVzZW50KTsKKworICBy ZXR1cm4gR1JVQl9FUlJfTk9ORTsKKworIGNsZWFudXBfdmFsdWU6CisgIGdydWJfZnJlZSAodmFs dWUpOworIGNsZWFudXBfdmFsdWVfcGF0aDoKKyAgZ3J1Yl9mcmVlICh2YWx1ZV9wYXRoKTsKKyBj bGVhbnVwX2NyaXRpY2FsX3BhdGg6CisgIGdydWJfZnJlZSAoY3JpdGljYWxfcGF0aCk7CisgY2xl YW51cF9vaWRfcGF0aDoKKyAgZ3J1Yl9mcmVlIChvaWRfcGF0aCk7CisKKyAgcmV0dXJuIGVycjsK K30KKworLyoKKyAqIFBhcnNlIGEgY2VydGlmaWNhdGUgd2hvc2UgREVSLWVuY29kZWQgZm9ybSBp cyBpbiBAZGF0YSwgb2Ygc2l6ZSBAZGF0YV9zaXplLgorICogUmV0dXJuIHRoZSByZXN1bHRzIGlu IEByZXN1bHRzLCB3aGljaCBtdXN0IHBvaW50IHRvIGFuIGFsbG9jYXRlZCB4NTA5IGNlcnRpZmlj YXRlLgorICovCitncnViX2Vycl90CitwYXJzZV94NTA5X2NlcnRpZmljYXRlIChjb25zdCB2b2lk ICpkYXRhLCBncnViX3NpemVfdCBkYXRhX3NpemUsIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpy ZXN1bHRzKQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgYXNuMV9ub2RlIGNlcnQ7CisgIGdydWJf ZXJyX3QgZXJyOworICBpbnQgc2l6ZTsKKyAgaW50IHRtcF9zaXplOworCisgIGlmIChkYXRhX3Np emUgPiBHUlVCX0lOVF9NQVgpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9P Rl9SQU5HRSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBwYXJzZSBhIGNlcnRpZmlj YXRlIHdoZXJlIGRhdGEgc2l6ZSA+IElOVF9NQVguIik7CisgIHNpemUgPSAoaW50KSBkYXRhX3Np emU7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9h c24sICJQS0lYMS5DZXJ0aWZpY2F0ZSIsICZjZXJ0KTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NV Q0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisg ICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBm b3IgY2VydGlmaWNhdGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJv ciAocmVzdWx0KSk7CisKKyAgcmVzdWx0ID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmY2VydCwgZGF0 YSwgJnNpemUsIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlm IChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQg bm90IHBhcnNlIERFUiBmb3IgY2VydGlmaWNhdGU6ICVzIiwgYXNuMV9lcnJvcik7CisgICAgICBn b3RvIGNsZWFudXA7CisgICAgfQorCisgIC8qCisgICAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNF UVVFTkNFIHsKKyAgICogICAgIHZlcnNpb24gICAgICAgICBbMF0gIEVYUExJQ0lUIFZlcnNpb24g REVGQVVMVCB2MQorICAgKi8KKyAgZXJyID0gY2hlY2tfdmVyc2lvbiAoY2VydCk7CisgIGlmIChl cnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGNsZWFudXA7CisKKyAgLyoKKyAgICogc2Vy aWFsTnVtYmVyICAgICAgICAgQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIsCisgICAqCisgICAqIENl cnRpZmljYXRlU2VyaWFsTnVtYmVyICA6Oj0gIElOVEVHRVIKKyAgICovCisgIHJlc3VsdHMtPnNl cmlhbCA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoY2VydCwgInRic0NlcnRpZmljYXRl LnNlcmlhbE51bWJlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImNlcnRpZmljYXRlIHNlcmlhbCBudW1iZXIiLCAmdG1wX3NpemUpOworICBpZiAo cmVzdWx0cy0+c2VyaWFsID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJubzsK KyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgIC8qCisgICAqIEl0J3Mgc2FmZSB0byBjYXN0 IHRoZSBzaWduZWQgaW50IHRvIGFuIHVuc2lnbmVkIGhlcmUsIHdlIGtub3cKKyAgICogbGVuZ3Ro IGlzIG5vbi1uZWdhdGl2ZS4KKyAgICovCisgIHJlc3VsdHMtPnNlcmlhbF9sZW4gPSB0bXBfc2l6 ZTsKKworICAvKgorICAgKiBzaWduYXR1cmUgICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVy LAorICAgKgorICAgKiBXZSBkb24ndCBsb2FkIHRoZSBzaWduYXR1cmUgb3IgaXNzdWVyIGF0IHRo ZSBtb21lbnQsCisgICAqIGFzIHdlIGRvbid0IGF0dGVtcHQgeDUwOSB2ZXJpZmljYXRpb24uCisg ICAqLworCisgIC8qCisgICAqIGlzc3VlciAgICAgICAgICAgICAgIE5hbWUsCisgICAqCisgICAq IFRoZSBSRkMgb25seSByZXF1aXJlcyB0aGUgc2VyaWFsIG51bWJlciB0byBiZSB1bmlxdWUgd2l0 aGluCisgICAqIGlzc3VlcnMsIHNvIHRvIGF2b2lkIGFtYmlndWl0eSB3ZSBfdGVjaG5pY2FsbHlf IG91Z2h0IHRvIG1ha2UKKyAgICogdGhpcyBhdmFpbGFibGUuCisgICAqLworCisgIC8qCisgICAq IHZhbGlkaXR5ICAgICAgICAgICAgIFZhbGlkaXR5LAorICAgKgorICAgKiBWYWxpZGl0eSA6Oj0g U0VRVUVOQ0UgeworICAgKiAgICAgbm90QmVmb3JlICAgICAgVGltZSwKKyAgICogICAgIG5vdEFm dGVyICAgICAgIFRpbWUgfQorICAgKgorICAgKiBXZSBjYW4ndCB2YWxpZGF0ZSB0aGlzIHJlYXNv bmFibHksIHdlIGhhdmUgbm8gdHJ1ZSB0aW1lIHNvdXJjZSBvbiBzZXZlcmFsCisgICAqIHBsYXRm b3Jtcy4gRm9yIG5vdyB3ZSBkbyBub3QgcGFyc2UgdGhlbS4KKyAgICovCisKKyAgLyoKKyAgICog c3ViamVjdCAgICAgICAgICAgICAgTmFtZSwKKyAgICoKKyAgICogVGhpcyBpcyBhbiBYNTAxIG5h bWUsIHdlIHBhcnNlIG91dCBqdXN0IHRoZSBDTi4KKyAgICovCisgIGVyciA9IHJlYWRfbmFtZSAo Y2VydCwgInRic0NlcnRpZmljYXRlLnN1YmplY3QiLCAmcmVzdWx0cy0+c3ViamVjdCwgJnJlc3Vs dHMtPnN1YmplY3RfbGVuKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8g Y2xlYW51cF9zZXJpYWw7CisKKyAgLyoKKyAgICogVEJTQ2VydGlmaWNhdGUgIDo6PSAgU0VRVUVO Q0UgIHsKKyAgICogICAgLi4uCisgICAqICAgIHN1YmplY3RQdWJsaWNLZXlJbmZvIFN1YmplY3RQ dWJsaWNLZXlJbmZvLAorICAgKiAgICAuLi4KKyAgICovCisgIGVyciA9IGdydWJfeDUwOV9yZWFk X3N1YmplY3RfcHVibGljX2tleSAoY2VydCwgcmVzdWx0cyk7CisgIGlmIChlcnIgIT0gR1JVQl9F UlJfTk9ORSkKKyAgICBnb3RvIGNsZWFudXBfbmFtZTsKKworICAvKgorICAgKiBUQlNDZXJ0aWZp Y2F0ZSAgOjo9ICBTRVFVRU5DRSAgeworICAgKiAgICAuLi4KKyAgICogICAgZXh0ZW5zaW9ucyAg ICAgIFszXSAgRVhQTElDSVQgRXh0ZW5zaW9ucyBPUFRJT05BTAorICAgKiAgICAgICAgICAgICAg ICAgICAgICAgICAtLSBJZiBwcmVzZW50LCB2ZXJzaW9uIE1VU1QgYmUgdjMKKyAgICogfQorICAg Ki8KKyAgZXJyID0gdmVyaWZ5X2V4dGVuc2lvbnMgKGNlcnQpOworICBpZiAoZXJyICE9IEdSVUJf RVJSX05PTkUpCisgICAgZ290byBjbGVhbnVwX21waXM7CisKKyAgLyoKKyAgICogV2UgZG8gbm90 IHJlYWQgb3IgY2hlY2sgdGhlIHNpZ25hdHVyZSBvbiB0aGUgY2VydGlmaWNhdGU6CisgICAqIGFz IGRpc2N1c3NlZCB3ZSBkbyBub3QgdHJ5IHRvIHZhbGlkYXRlIHRoZSBjZXJ0aWZpY2F0ZSBidXQg dHJ1c3QKKyAgICogaXQgaW1wbGljdGx5LgorICAgKi8KKyAgYXNuMV9kZWxldGVfc3RydWN0dXJl ICgmY2VydCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVwX21waXM6Cisg IGdjcnlfbXBpX3JlbGVhc2UgKHJlc3VsdHMtPm1waXNbMF0pOworICBnY3J5X21waV9yZWxlYXNl IChyZXN1bHRzLT5tcGlzWzFdKTsKKyBjbGVhbnVwX25hbWU6CisgIGdydWJfZnJlZSAocmVzdWx0 cy0+c3ViamVjdCk7CisgY2xlYW51cF9zZXJpYWw6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+c2Vy aWFsKTsKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZjZXJ0KTsKKworICBy ZXR1cm4gZXJyOworfQorCisvKgorICogUmVsZWFzZSBhbGwgdGhlIHN0b3JhZ2UgYXNzb2NpYXRl ZCB3aXRoIHRoZSB4NTA5IGNlcnRpZmljYXRlLgorICogSWYgdGhlIGNhbGxlciBkeW5hbWljYWxs eSBhbGxvY2F0ZWQgdGhlIGNlcnRpZmljYXRlLCBpdCBtdXN0IGZyZWUgaXQuCisgKiBUaGUgY2Fs bGVyIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIG1haW50ZW5hbmNlIG9mIHRoZSBsaW5rZWQgbGlz dC4KKyAqLwordm9pZAorY2VydGlmaWNhdGVfcmVsZWFzZSAoc3RydWN0IHg1MDlfY2VydGlmaWNh dGUgKmNlcnQpCit7CisgIGdydWJfZnJlZSAoY2VydC0+c3ViamVjdCk7CisgIGdydWJfZnJlZSAo Y2VydC0+c2VyaWFsKTsKKyAgZ2NyeV9tcGlfcmVsZWFzZSAoY2VydC0+bXBpc1swXSk7CisgIGdj cnlfbXBpX3JlbGVhc2UgKGNlcnQtPm1waXNbMV0pOworfQotLSAKMi4zOS41IChBcHBsZSBHaXQt MTU0KQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkdy dWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdu dS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==