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 71EA2CCA470 for ; Tue, 30 Sep 2025 11:48:42 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v3Yoh-0000yo-4o; Tue, 30 Sep 2025 07:46:49 -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 1v3YoO-0000pj-B8 for grub-devel@gnu.org; Tue, 30 Sep 2025 07:46:31 -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 1v3YoC-000694-WB for grub-devel@gnu.org; Tue, 30 Sep 2025 07:46:26 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58TMRpuQ008510; Tue, 30 Sep 2025 11:46:10 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=P7GPVjt1oZFEaz8yH nqfFF6Co7ONd9vTsx9UK74mxKg=; b=JKq9DyTRryUr2L/CLeuzTrHkS71+SFpFB ONTykw3YtR8IYUCUEareCrQT47Cs1d9QbNgGgDUcV/QjLPlUJCByVSpf3w7bQdgT zD/4suEm9XAU2l3UJy7w51Ngw3DulgQC2fOa2XjUPQn5RSauOWHyDz5pwWA7rPXw 46E0qp/Epzytka50SmLDzlarDP9bo/1B+agWXOBondD5MDL1Emze13SakQ8jpFsb lBYIWMKQ8eJaTDLkVhC/d8k/4DzsJNGffAX2Lapjv8xSr07Q3iLc2+M38V5Gm/jc 6yLIgjDKDZ73sTdmnWoDGCvFohuyzAQd1R0CiHu6RkAZhoyZDKOTQ== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 49e7ku8m47-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 30 Sep 2025 11:46:09 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 58U8pNxU007293; Tue, 30 Sep 2025 11:46:08 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 49eurju351-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 30 Sep 2025 11:46:08 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 58UBk4H935848564 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 30 Sep 2025 11:46:04 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 16FD42004B; Tue, 30 Sep 2025 11:46:04 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3A8A120040; Tue, 30 Sep 2025 11:46:00 +0000 (GMT) Received: from localhost.localdomain (unknown [9.39.16.143]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 30 Sep 2025 11:46:00 +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 v13 08/20] appended signatures: Parse X.509 certificates Date: Tue, 30 Sep 2025 17:10:02 +0530 Message-ID: <20250930114018.78215-9-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250930114018.78215-1-sudhakar@linux.ibm.com> References: <20250930114018.78215-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=T7WBjvKQ c=1 sm=1 tr=0 ts=68dbc301 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=yJojWOMRYYMA:10 a=mDV3o1hIAAAA:8 a=20KFwNOVAAAA:8 a=iox4zFpeAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=1v2ztiOKZ6MkV5qvpLgA:9 a=WzC6qhA0u3u7Ye7llzcV:22 a=WlT8qwTXB_Kj6um4hl3b:22 a=cPQSjfK2_nFv0Q5t_7PE:22 X-Proofpoint-GUID: 00Vjlvb8NAOk1tmL0Ft8asOKKeQSYYIM X-Proofpoint-ORIG-GUID: 00Vjlvb8NAOk1tmL0Ft8asOKKeQSYYIM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTI3MDAyNSBTYWx0ZWRfXxBQtxAna8ynR W9uEqvgQUM2n09PNDsdCLLDAIBPuOOY+llFzY7CP97EDsLVSKJu0SbQfjpBzeombJ7O/Mc7kDa2 rz2Wnqgx1YXxadTUjESRS+A0eZHPCh6NQO8QpQLikEyaMfMVB4+CsmVw8sx5iL9jGAvXWeiGkXn EpsorwRaSo+bJfNIyEwsl/ehaSnwceJOgi+sWloFfFo78RWdMgF8UsmmcT8TUopOUcj8vM8S60A 9LquqorryvfKBHmjfvZ+hODUMX4acexL9uZwPTjaiTPEQ6kZAbMUXOcDEVdypL7e6d0zXu4ipjG vLeaRfOVUhM/brOycwQlqCYlAvrH9u3nc9v3chQZBcNxWPmig1YrAsYDJAlkI0Tfd9Ugh4tcfcz wNJj80xHIkeDnKWxqsW+33b4PI4KJg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-30_01,2025-09-29_04,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 spamscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 adultscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2509150000 definitions=main-2509270025 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_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 bGVhc3QgZW5vdWdoIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlcyBvbiB0aGUgUEtDUyM3CiAgIG1l c3NhZ2VzLiBXZSBleHBlY3QgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGVtYmVkZGVkIGluIEdSVUIg d2lsbCBiZSBsZWFmCiAgIGNlcnRpZmljYXRlcywgbm90IENBIGNlcnRpZmljYXRlcy4gVGhlIHBh cnNlciBlbmZvcmNlcyB0aGlzLgoKIC0gWC41MDkgY2VydGlmaWNhdGVzIHN1cHBvcnQgdGhlIEV4 dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb24gYW5kIGhhbmRsZSBpdCBieQogICB2ZXJpZnlpbmcg dGhhdCB0aGUgY2VydGlmaWNhdGUgaGFzIGEgQ29kZSBTaWduaW5nIHVzYWdlLgoKU2lnbmVkLW9m Zi1ieTogSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJtQHJlZGhhdC5jb20+ICMgRUtV IHN1cHBvcnQKUmVwb3J0ZWQtYnk6IE1pY2hhbCBTdWNoYW5layA8bXN1Y2hhbmVrQHN1c2UuY29t PiAjIGtleSB1c2FnZSBpc3N1ZQpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0 ZW5zLm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51 eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEJlcmdlciA8c3RlZmFuYkBsaW51eC5pYm0u Y29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4gPGF2bmlzaEBsaW51eC5pYm0uY29tPgpS ZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4KLS0tCiBn cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICA1MiArCiBncnVi LWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jICAgICAgICB8IDk3MCArKysrKysrKysr KysrKysrKysrCiBpbmNsdWRlL2dydWIvY3J5cHRvLmggICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDEwMjMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKCmRpZmYgLS1naXQg YS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCBiL2dydWItY29y ZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oCmluZGV4IGIwYmViODkzNS4uYzg3 NDY1NDRlIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5k ZWRzaWcuaAorKysgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcu aApAQCAtMjUsNiArMjUsNDMgQEAgZXh0ZXJuIGFzbjFfbm9kZSBncnViX2dudXRsc19wa2l4X2Fz bjsKIAogI2RlZmluZSBHUlVCX01BWF9PSURfTEVOICAgICAgICAgMzIKIAorLyogUlNBIHB1Ymxp YyBrZXkuICovCisjZGVmaW5lIEdSVUJfTUFYX01QSSAgICAgICAgICAgICAyCisjZGVmaW5lIEdS VUJfUlNBX1BLX01PRFVMVVMgICAgICAwCisjZGVmaW5lIEdSVUJfUlNBX1BLX0VYUE9ORU5UICAg ICAxCisKKy8qIENlcnRpZmljYXRlIGZpbmdlcnByaW50LiAqLworI2RlZmluZSBHUlVCX01BWF9G SU5HRVJQUklOVCAgICAgMworI2RlZmluZSBHUlVCX0ZJTkdFUlBSSU5UX1NIQTI1NiAgMAorI2Rl ZmluZSBHUlVCX0ZJTkdFUlBSSU5UX1NIQTM4NCAgMQorI2RlZmluZSBHUlVCX0ZJTkdFUlBSSU5U X1NIQTUxMiAgMgorCisvKiBNYXggc2l6ZSBvZiBoYXNoIGRhdGEuICovCisjZGVmaW5lIEdSVUJf TUFYX0hBU0hfTEVOICAgICAgICA2NAorCisvKgorICogT25lIG9yIG1vcmUgeDUwOSBjZXJ0aWZp Y2F0ZXMuIFdlIGRvIGxpbWl0ZWQgcGFyc2luZzoKKyAqIGV4dHJhY3Rpbmcgb25seSB0aGUgdmVy c2lvbiwgc2VyaWFsLCBpc3N1ZXIsIHN1YmplY3QsIFJTQSBwdWJsaWMga2V5CisgKiBhbmQga2V5 IHNpemUuCisgKiBBbHNvLCBob2xkIHRoZSBzaGEyNTYsIHNoYTM4NCwgYW5kIHNoYTUxMiBmaW5n ZXJwcmludCBvZiB0aGUgY2VydGlmaWNhdGUuCisgKi8KK3N0cnVjdCB4NTA5X2NlcnRpZmljYXRl Cit7CisgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpuZXh0OworICBncnViX3VpbnQ4X3QgdmVy c2lvbjsKKyAgZ3J1Yl91aW50OF90ICpzZXJpYWw7CisgIGdydWJfc2l6ZV90IHNlcmlhbF9sZW47 CisgIGNoYXIgKmlzc3VlcjsKKyAgZ3J1Yl9zaXplX3QgaXNzdWVyX2xlbjsKKyAgY2hhciAqc3Vi amVjdDsKKyAgZ3J1Yl9zaXplX3Qgc3ViamVjdF9sZW47CisgIC8qIFdlIG9ubHkgc3VwcG9ydCBS U0EgcHVibGljIGtleXMuIFRoaXMgZW5jb2RlcyBbbW9kdWx1cywgcHVibGljRXhwb25lbnRdLiAq LworICBnY3J5X21waV90IG1waXNbR1JVQl9NQVhfTVBJXTsKKyAgZ3J1Yl9pbnQzMl90IG1vZHVs dXNfc2l6ZTsKKyAgZ3J1Yl91aW50OF90IGZpbmdlcnByaW50W0dSVUJfTUFYX0ZJTkdFUlBSSU5U XVtHUlVCX01BWF9IQVNIX0xFTl07Cit9OwordHlwZWRlZiBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0 ZSBncnViX3g1MDlfY2VydF90OworCiAvKiBBIFBLQ1MjNyBzaWduZWQgZGF0YSBzaWduZXIgaW5m by4gKi8KIHN0cnVjdCBwa2NzN19zaWduZXIKIHsKQEAgLTQ0LDYgKzgxLDIxIEBAIHN0cnVjdCBw a2NzN19kYXRhCiB9OwogdHlwZWRlZiBzdHJ1Y3QgcGtjczdfZGF0YSBncnViX3BrY3M3X2RhdGFf dDsKIAorLyoKKyAqIEltcG9ydCBhIERFUi1lbmNvZGVkIGNlcnRpZmljYXRlIGF0ICdkYXRhJywg b2Ygc2l6ZSAnc2l6ZScuIFBsYWNlIHRoZSByZXN1bHRzCisgKiBpbnRvICdyZXN1bHRzJywgd2hp Y2ggbXVzdCBiZSBhbHJlYWR5IGFsbG9jYXRlZC4KKyAqLworZXh0ZXJuIGdydWJfZXJyX3QKK2dy dWJfeDUwOV9jZXJ0X3BhcnNlIChjb25zdCB2b2lkICpkYXRhLCBncnViX3NpemVfdCBzaXplLCBn cnViX3g1MDlfY2VydF90ICpyZXN1bHRzKTsKKworLyoKKyAqIFJlbGVhc2UgYWxsIHRoZSBzdG9y YWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgeDUwOSBjZXJ0aWZpY2F0ZS4gSWYgdGhlIGNhbGxlcgor ICogZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBjZXJ0aWZpY2F0ZSwgaXQgbXVzdCBmcmVlIGl0 LiBUaGUgY2FsbGVyIGlzIGFsc28KKyAqIHJlc3BvbnNpYmxlIGZvciBtYWludGVuYW5jZSBvZiB0 aGUgbGlua2VkIGxpc3QuCisgKi8KK2V4dGVybiB2b2lkCitncnViX3g1MDlfY2VydF9yZWxlYXNl IChncnViX3g1MDlfY2VydF90ICpjZXJ0KTsKKwogLyoKICAqIFBhcnNlIGEgUEtDUyM3IG1lc3Nh Z2UsIHdoaWNoIG11c3QgYmUgYSBzaWduZWQgZGF0YSBtZXNzYWdlLiBUaGUgbWVzc2FnZSBtdXN0 CiAgKiBiZSBpbiAnc2lnYnVmJyBhbmQgb2Ygc2l6ZSAnZGF0YV9zaXplJy4gVGhlIHJlc3VsdCBp cyBwbGFjZWQgaW4gJ21zZycsIHdoaWNoCmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMv YXBwZW5kZWRzaWcveDUwOS5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDku YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmJjMTUyNjYzYQotLS0gL2Rl di9udWxsCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKQEAgLTAs MCArMSw5NzAgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgor ICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIsIDIwMjUgSUJNIENvcnBvcmF0aW9uCisg KgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpYnRhc24xLmg+CisjaW5jbHVk ZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdydWIvZXJyLmg+CisjaW5jbHVkZSA8Z3J1Yi9t bS5oPgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+Cisj aW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+CisKKyNpbmNsdWRlICJhcHBlbmRlZHNpZy5o IgorCitzdGF0aWMgY2hhciBhc24xX2Vycm9yW0FTTjFfTUFYX0VSUk9SX0RFU0NSSVBUSU9OX1NJ WkVdOworCisKKy8qIFJGQyAzMjc5IDIuMy4xICBSU0EgS2V5cy4gKi8KK3N0YXRpYyBjb25zdCBj aGFyICpyc2FFbmNyeXB0aW9uX29pZCA9ICIxLjIuODQwLjExMzU0OS4xLjEuMSI7CisKKy8qIFJG QyA1MjgwIEFwcGVuZGl4IEEuICovCitzdGF0aWMgY29uc3QgY2hhciAqY29tbW9uTmFtZV9vaWQg PSAiMi41LjQuMyI7CisKKy8qIFJGQyA1MjgwIDQuMi4xLjMgS2V5IFVzYWdlLiAqLworc3RhdGlj IGNvbnN0IGNoYXIgKmtleVVzYWdlX29pZCA9ICIyLjUuMjkuMTUiOworCitzdGF0aWMgY29uc3Qg Z3J1Yl91aW50OF90IGRpZ2l0YWxTaWduYXR1cmVVc2FnZSA9IDB4ODA7CisKKy8qIFJGQyA1Mjgw IDQuMi4xLjkgQmFzaWMgQ29uc3RyYWludHMuICovCitzdGF0aWMgY29uc3QgY2hhciAqYmFzaWND b25zdHJhaW50c19vaWQgPSAiMi41LjI5LjE5IjsKKworLyogUkZDIDUyODAgNC4yLjEuMTIgRXh0 ZW5kZWQgS2V5IFVzYWdlLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVuZGVkS2V5VXNhZ2Vf b2lkID0gIjIuNS4yOS4zNyI7CitzdGF0aWMgY29uc3QgY2hhciAqY29kZVNpZ25pbmdVc2FnZV9v aWQgPSAiMS4zLjYuMS41LjUuNy4zLjMiOworCisvKgorICogUkZDIDMyNzkgMi4zLjEKKyAqCisg KiAgVGhlIFJTQSBwdWJsaWMga2V5IE1VU1QgYmUgZW5jb2RlZCB1c2luZyB0aGUgQVNOLjEgdHlw ZSBSU0FQdWJsaWNLZXk6CisgKgorICogICAgIFJTQVB1YmxpY0tleSA6Oj0gU0VRVUVOQ0Ugewor ICogICAgICAgIG1vZHVsdXMgICAgICAgICAgICBJTlRFR0VSLCAgICAtLSBuCisgKiAgICAgICAg cHVibGljRXhwb25lbnQgICAgIElOVEVHRVIgIH0gIC0tIGUKKyAqCisgKiAgd2hlcmUgbW9kdWx1 cyBpcyB0aGUgbW9kdWx1cyBuLCBhbmQgcHVibGljRXhwb25lbnQgaXMgdGhlIHB1YmxpYyBleHBv bmVudCBlLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9wYXJzZV9yc2FfcHVia2V5IChn cnViX3VpbnQ4X3QgKmRlciwgZ3J1Yl9pbnQzMl90IGRlcnNpemUsIGdydWJfeDUwOV9jZXJ0X3Qg KmNlcnRpZmljYXRlKQoreworICBncnViX2ludDMyX3QgcmVzdWx0OworICBhc24xX25vZGUgc3Br ID0gTlVMTDsKKyAgZ3J1Yl91aW50OF90ICptX2RhdGEsICplX2RhdGE7CisgIGdydWJfaW50MzJf dCBtX3NpemUsIGVfc2l6ZTsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOworICBn Y3J5X2Vycm9yX3QgZ2NyeV9lcnI7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAo Z3J1Yl9nbnV0bHNfZ251dGxzX2FzbiwgIkdOVVRMUy5SU0FQdWJsaWNLZXkiLCAmc3BrKTsKKyAg aWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY3JlYXRl IHN0b3JhZ2UgZm9yIHB1YmxpYyBrZXkgQVNOLjEgZGF0YSIpOworCisgIHJlc3VsdCA9IGFzbjFf ZGVyX2RlY29kaW5nMiAoJnNwaywgZGVyLCAmZGVyc2l6ZSwgQVNOMV9ERUNPREVfRkxBR19TVFJJ Q1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAg eworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZGVjb2RlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXkg REVSOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBt X2RhdGEgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKHNwaywgIm1vZHVsdXMiLCAiUlNB IG1vZHVsdXMiLCAmbV9zaXplKTsKKyAgaWYgKG1fZGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAg IGVyciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGVfZGF0 YSA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoc3BrLCAicHVibGljRXhwb25lbnQiLCAi UlNBIHB1YmxpYyBleHBvbmVudCIsICZlX3NpemUpOworICBpZiAoZV9kYXRhID09IE5VTEwpCisg ICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgIGdvdG8gY2xlYW51cF9tX2RhdGE7 CisgICAgfQorCisgIC8qCisgICAqIENvbnZlcnQgbSwgZSB0byBtcGkKKyAgICoKKyAgICogbnNj YW5uZWQgaXMgbm90IHNldCBmb3IgRk1UX1VTRywgaXQncyBvbmx5IHNldCBmb3IgRk1UX1BHUCwg c28gd2UgY2FuJ3QKKyAgICogdmVyaWZ5IGl0LgorICAgKi8KKyAgZ2NyeV9lcnIgPSBfZ2NyeV9t cGlfc2NhbiAoJmNlcnRpZmljYXRlLT5tcGlzWzBdLCBHQ1JZTVBJX0ZNVF9VU0csIG1fZGF0YSwg bV9zaXplLCBOVUxMKTsKKyAgaWYgKGdjcnlfZXJyICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAg eworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICJlcnJvciBsb2FkaW5nIFJTQSBtb2R1bHVzIGludG8gTVBJIHN0 cnVjdHVyZTogJWQiLCBnY3J5X2Vycik7CisgICAgICBnb3RvIGNsZWFudXBfZV9kYXRhOworICAg IH0KKworICBnY3J5X2VyciA9IF9nY3J5X21waV9zY2FuICgmY2VydGlmaWNhdGUtPm1waXNbMV0s IEdDUllNUElfRk1UX1VTRywgZV9kYXRhLCBlX3NpemUsIE5VTEwpOworICBpZiAoZ2NyeV9lcnIg IT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGxvYWRp bmcgUlNBIGV4cG9uZW50IGludG8gTVBJIHN0cnVjdHVyZTogJWQiLCBnY3J5X2Vycik7CisgICAg ICBnb3RvIGNsZWFudXBfbV9tcGk7CisgICAgfQorCisgIC8qIFJTQSBrZXkgc2l6ZSBpbiBiaXRz LiAqLworICBjZXJ0aWZpY2F0ZS0+bW9kdWx1c19zaXplID0gKG1fc2l6ZSAqIDgpIC0gODsKKwor ICBncnViX2ZyZWUgKGVfZGF0YSk7CisgIGdydWJfZnJlZSAobV9kYXRhKTsKKyAgYXNuMV9kZWxl dGVfc3RydWN0dXJlICgmc3BrKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKworIGNsZWFu dXBfbV9tcGk6CisgIF9nY3J5X21waV9yZWxlYXNlIChjZXJ0aWZpY2F0ZS0+bXBpc1swXSk7Cisg Y2xlYW51cF9lX2RhdGE6CisgIGdydWJfZnJlZSAoZV9kYXRhKTsKKyBjbGVhbnVwX21fZGF0YToK KyAgZ3J1Yl9mcmVlIChtX2RhdGEpOworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVy ZSAoJnNwayk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJGQyA1MjgwOgorICogICBT dWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeworICogICAgICAgYWxnb3JpdGht ICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAqICAgICAgIHN1YmplY3RQdWJsaWNL ZXkgICAgIEJJVCBTVFJJTkcgIH0KKyAqCisgKiBBbGdvcml0aG1JZGVudGlmaWVycyBjb21lIGZy b20gUkZDIDMyNzksIHdlIGFyZSBub3Qgc3RyaWN0bHkgY29tcGlsYW50IGFzIHdlCisgKiBvbmx5 IHN1cHBvcnQgUlNBIEVuY3J5cHRpb24uCisgKi8KK3N0YXRpYyBncnViX2Vycl90CitncnViX3g1 MDlfcmVhZF9zdWJqZWN0X3B1YmxpY19rZXkgKGFzbjFfbm9kZSBhc24sIGdydWJfeDUwOV9jZXJ0 X3QgKnJlc3VsdHMpCit7CisgIGdydWJfaW50MzJfdCByZXN1bHQ7CisgIGdydWJfZXJyX3QgZXJy OworICBjb25zdCBjaGFyICphbGdvX25hbWUgPSAidGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1Ymxp Y0tleUluZm8uYWxnb3JpdGhtLmFsZ29yaXRobSI7CisgIGNvbnN0IGNoYXIgKnBhcmFtc19uYW1l ID0gInRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvLmFsZ29yaXRobS5wYXJhbWV0 ZXJzIjsKKyAgY29uc3QgY2hhciAqcGtfbmFtZSA9ICJ0YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVi bGljS2V5SW5mby5zdWJqZWN0UHVibGljS2V5IjsKKyAgY2hhciBhbGdvX29pZFtHUlVCX01BWF9P SURfTEVOXTsKKyAgZ3J1Yl9pbnQzMl90IGFsZ29fc2l6ZSA9IHNpemVvZiAoYWxnb19vaWQpOwor ICBjaGFyIHBhcmFtc192YWx1ZVsyXTsKKyAgZ3J1Yl9pbnQzMl90IHBhcmFtc19zaXplID0gc2l6 ZW9mIChwYXJhbXNfdmFsdWUpOworICBncnViX3VpbnQ4X3QgKmtleV9kYXRhID0gTlVMTDsKKyAg Z3J1Yl9pbnQzMl90IGtleV9zaXplID0gMDsKKyAgZ3J1Yl91aW50MzJfdCBrZXlfdHlwZTsKKwor ICAvKiBBbGdvcml0aG06IHNlZSBub3RlcyBmb3IgcnNhRW5jcnlwdGlvbl9vaWQuICovCisgIHJl c3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYXNuLCBhbGdvX25hbWUsIGFsZ29fb2lkLCAmYWxnb19z aXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHg1MDkgcHVibGljIGtl eSBhbGdvcml0aG06ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAo cmVzdWx0KSk7CisKKyAgaWYgKGdydWJfc3RybmNtcCAoYWxnb19vaWQsIHJzYUVuY3J5cHRpb25f b2lkLCBzaXplb2YgKHJzYUVuY3J5cHRpb25fb2lkKSkgIT0gMCkKKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAgICAgICAgICAg ICAgInVuc3VwcG9ydGVkIHg1MDkgcHVibGljIGtleSBhbGdvcml0aG06ICVzIiwgYWxnb19vaWQp OworCisgIC8qCisgICAqIFJGQyAzMjc5IDIuMy4xIDogVGhlIHJzYUVuY3J5cHRpb24gT0lEIGlz IGludGVuZGVkIHRvIGJlIHVzZWQgaW4gdGhlCisgICAqIGFsZ29yaXRobSBmaWVsZCBvZiBhIHZh bHVlIG9mIHR5cGUgQWxnb3JpdGhtSWRlbnRpZmllci4gVGhlIHBhcmFtZXRlcnMKKyAgICogZmll bGQgTVVTVCBoYXZlIEFTTi4xIHR5cGUgTlVMTCBmb3IgdGhpcyBhbGdvcml0aG0gaWRlbnRpZmll ci4KKyAgICovCisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYXNuLCBwYXJhbXNfbmFtZSwg cGFyYW1zX3ZhbHVlLCAmcGFyYW1zX3NpemUpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VT UykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9y IHJlYWRpbmcgeDUwOSBwdWJsaWMga2V5IHBhcmFtZXRlcnM6ICVzIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisKKyAgaWYgKHBhcmFtc192YWx1ZVsw XSAhPSBBU04xX1RBR19OVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB4NTA5IHB1YmxpYyBr ZXkgcGFyYW1ldGVyczogZXhwZWN0ZWQgTlVMTCIpOworCisgIC8qCisgICAqIFJGQyAzMjc5IDIu My4xOiAgVGhlIERFUiBlbmNvZGVkIFJTQVB1YmxpY0tleSBpcyB0aGUgdmFsdWUgb2YgdGhlIEJJ VAorICAgKiBTVFJJTkcgc3ViamVjdFB1YmxpY0tleS4KKyAgICovCisgIHJlc3VsdCA9IGFzbjFf cmVhZF92YWx1ZV90eXBlIChhc24sIHBrX25hbWUsIE5VTEwsICZrZXlfc2l6ZSwgJmtleV90eXBl KTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX01FTV9FUlJPUikKKyAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiB4NTA5IHB1 YmxpYyBrZXk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVz dWx0KSk7CisgIGlmIChrZXlfdHlwZSAhPSBBU04xX0VUWVBFX0JJVF9TVFJJTkcpCisgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJ1bmV4cGVjdGVkIEFTTi4x IHR5cGUgd2hlbiByZWFkaW5nIHg1MDkgcHVibGljIGtleTogJXgiLAorICAgICAgICAgICAgICAg ICAgICAgICBrZXlfdHlwZSk7CisKKyAgLyogTGVuZ3RoIGlzIGluIGJpdHMuICovCisgIGtleV9z aXplID0gKGtleV9zaXplICsgNykgLyA4OworCisgIGtleV9kYXRhID0gZ3J1Yl9tYWxsb2MgKGtl eV9zaXplKTsKKyAgaWYgKGtleV9kYXRhID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJvdXQgb2YgbWVtb3J5IGZvciB4NTA5IHB1YmxpYyBr ZXkiKTsKKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgcGtfbmFtZSwga2V5X2Rh dGEsICZrZXlfc2l6ZSk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAg ICAgIGdydWJfZnJlZSAoa2V5X2RhdGEpOworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHB1YmxpYyBrZXkgZGF0YSIpOworICAg IH0KKworICBrZXlfc2l6ZSA9IChrZXlfc2l6ZSArIDcpIC8gODsKKyAgZXJyID0gZ3J1Yl9wYXJz ZV9yc2FfcHVia2V5IChrZXlfZGF0YSwga2V5X3NpemUsIHJlc3VsdHMpOworICBncnViX2ZyZWUg KGtleV9kYXRhKTsKKworICByZXR1cm4gZXJyOworfQorCisvKiBEZWNvZGUgYSBzdHJpbmcgYXMg ZGVmaW5lZCBpbiBBcHBlbmRpeCBBLiAqLworc3RhdGljIGdydWJfZXJyX3QKK2RlY29kZV9zdHJp bmcgKGNoYXIgKmRlciwgZ3J1Yl9pbnQzMl90IGRlcl9zaXplLCBjaGFyICoqc3RyaW5nLCBncnVi X3NpemVfdCAqc3RyaW5nX3NpemUpCit7CisgIGFzbjFfbm9kZSBzdHJhc247CisgIGdydWJfaW50 MzJfdCByZXN1bHQ7CisgIGNoYXIgKmNob2ljZTsKKyAgZ3J1Yl9pbnQzMl90IGNob2ljZV9zaXpl ID0gMDsKKyAgZ3J1Yl9pbnQzMl90IHRtcF9zaXplID0gMDsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBH UlVCX0VSUl9OT05FOworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251 dGxzX3BraXhfYXNuLCAiUEtJWDEuRGlyZWN0b3J5U3RyaW5nIiwgJnN0cmFzbik7CisgIGlmIChy ZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9P VVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBB U04uMSBzdHJ1Y3R1cmUgZm9yIGNlcnRpZmljYXRlOiAlcyIsCisgICAgICAgICAgICAgICAgICAg ICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29k aW5nMiAoJnN0cmFzbiwgZGVyLCAmZGVyX3NpemUsIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RF UiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAg ICAgICAgICAgICAgICAiY291bGQgbm90IHBhcnNlIERFUiBmb3IgRGlyZWN0b3J5U3RyaW5nOiAl cyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBjaG9pY2Ug PSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKHN0cmFzbiwgIiIsICJEaXJlY3RvcnlTdHJp bmcgY2hvaWNlIiwgJmNob2ljZV9zaXplKTsKKyAgaWYgKGNob2ljZSA9PSBOVUxMKQorICAgIHsK KyAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisg IGlmIChncnViX3N0cm5jbXAgKCJ1dGY4U3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6ZSkgPT0g MCkKKyAgICB7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwgInV0ZjhT dHJpbmciLCBOVUxMLCAmdG1wX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX01FTV9F UlJPUikKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHNpemUgb2YgVVRGLTggc3RyaW5nOiAlcyIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAg ICAgICAgZ290byBjbGVhbnVwX2Nob2ljZTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAo Z3J1Yl9zdHJuY21wICgicHJpbnRhYmxlU3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6ZSkgPT0g MCkKKyAgICB7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwgInByaW50 YWJsZVN0cmluZyIsIE5VTEwsICZ0bXBfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFf TUVNX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiBwcmludGFibGVTdHJpbmc6 ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQp KTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfY2hvaWNlOworICAgICAgICB9CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVO VEVEX1lFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IFVURi04IGFuZCBwcmludGFi bGUgRGlyZWN0b3J5U3RyaW5ncyBhcmUgc3VwcG9ydGVkLCBnb3QgJXMiLAorICAgICAgICAgICAg ICAgICAgICAgICAgY2hvaWNlKTsKKyAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7CisgICAgfQor CisgIC8qIFJlYWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRyYWlsaW5nIE5VTC4gKi8KKyAgdG1w X3NpemUrKzsKKworICAqc3RyaW5nID0gZ3J1Yl9tYWxsb2MgKHRtcF9zaXplKTsKKyAgaWYgKCpz dHJpbmcgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9P VVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBhbGxvY2F0ZSBt ZW1vcnkgZm9yIERpcmVjdG9yeVN0cmluZyBjb250ZW50cyIpOworICAgICAgZ290byBjbGVhbnVw X2Nob2ljZTsKKyAgICB9CisKKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChzdHJhc24sIGNo b2ljZSwgKnN0cmluZywgJnRtcF9zaXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1Mp CisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg ImVycm9yIHJlYWRpbmcgb3V0ICVzIGluIERpcmVjdG9yeVN0cmluZzogJXMiLAorICAgICAgICAg ICAgICAgICAgICAgICAgY2hvaWNlLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgIGdy dWJfZnJlZSAoKnN0cmluZyk7CisgICAgICAqc3RyaW5nID0gTlVMTDsKKyAgICAgIGdvdG8gY2xl YW51cF9jaG9pY2U7CisgICAgfQorCisgICpzdHJpbmdfc2l6ZSA9IHRtcF9zaXplICsgMTsKKyAg KCpzdHJpbmcpW3RtcF9zaXplXSA9ICdcMCc7CisKKyBjbGVhbnVwX2Nob2ljZToKKyAgZ3J1Yl9m cmVlIChjaG9pY2UpOworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnN0cmFz bik7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNF UVVFTkNFICB7CisgKiAgICAgICB2ZXJzaW9uICAgICAgICAgWzBdICBFWFBMSUNJVCBWZXJzaW9u IERFRkFVTFQgdjEsCisgKiAuLi4KKyAqCisgKiBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYx KDApLCB2MigxKSwgdjMoMikgIH0KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK2NoZWNrX3ZlcnNp b24gKGFzbjFfbm9kZSBjZXJ0aWZpY2F0ZSwgZ3J1Yl94NTA5X2NlcnRfdCAqcmVzdWx0cykKK3sK KyAgZ3J1Yl9pbnQzMl90IHJjOworICBjb25zdCBjaGFyICpuYW1lID0gInRic0NlcnRpZmljYXRl LnZlcnNpb24iOworICBncnViX3VpbnQ4X3QgdmVyc2lvbjsKKyAgZ3J1Yl9pbnQzMl90IGxlbiA9 IHNpemVvZiAodmVyc2lvbik7CisKKyAgcmMgPSBhc24xX3JlYWRfdmFsdWUgKGNlcnRpZmljYXRl LCBuYW1lLCAmdmVyc2lvbiwgJmxlbik7CisKKyAgLyogUmVxdWlyZSB2ZXJzaW9uIDMuICovCisg IGlmIChyYyAhPSBBU04xX1NVQ0NFU1MgfHwgbGVuICE9IDEpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIGNlcnRpZmljYXRlIHZl cnNpb24iKTsKKworICBpZiAodmVyc2lvbiAhPSAweDAyKQorICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxp ZCB4NTA5IGNlcnRpZmljYXRlIHZlcnNpb24sIGV4cGVjdGVkIHYzICgweDAyKSwgZ290IDB4JTAy eC4iLAorICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKTsKKworICByZXN1bHRzLT52ZXJz aW9uID0gdmVyc2lvbjsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyogd2UgZXh0 cmFjdCBvbmx5IHRoZSBDTiBhbmQgaXNzdWVyLiAqLworc3RhdGljIGdydWJfZXJyX3QKK3JlYWRf bmFtZSAoYXNuMV9ub2RlIGFzbiwgY29uc3QgY2hhciAqbmFtZV9wYXRoLCBjaGFyICoqbmFtZSwg Z3J1Yl9zaXplX3QgKm5hbWVfc2l6ZSkKK3sKKyAgZ3J1Yl9pbnQzMl90IHNlcV9jb21wb25lbnRz LCBzZXRfY29tcG9uZW50czsKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1Yl9pbnQzMl90 IGksIGo7CisgIGNoYXIgKnRvcF9wYXRoLCAqc2V0X3BhdGgsICp0eXBlX3BhdGgsICp2YWxfcGF0 aDsKKyAgY2hhciB0eXBlW0dSVUJfTUFYX09JRF9MRU5dOworICBncnViX2ludDMyX3QgdHlwZV9s ZW4gPSBzaXplb2YgKHR5cGUpOworICBncnViX2ludDMyX3Qgc3RyaW5nX3NpemUgPSAwOworICBj aGFyICpzdHJpbmdfZGVyOworICBncnViX2Vycl90IGVycjsKKworICAqbmFtZSA9IE5VTEw7CisK KyAgdG9wX3BhdGggPSBncnViX3hhc3ByaW50ZiAoIiVzLnJkblNlcXVlbmNlIiwgbmFtZV9wYXRo KTsKKyAgaWYgKHRvcF9wYXRoID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxs b2NhdGUgbWVtb3J5IGZvciAlcyBuYW1lIHBhcnNpbmcgcGF0aCIsIG5hbWVfcGF0aCk7CisKKyAg cmVzdWx0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGFzbiwgdG9wX3BhdGgsICZzZXFfY29t cG9uZW50cyk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVy ciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBjb3VudGluZyBu YW1lIGNvbXBvbmVudHM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJy b3IgKHJlc3VsdCkpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBmb3IgKGkgPSAx OyBpIDw9IHNlcV9jb21wb25lbnRzOyBpKyspCisgICAgeworICAgICAgc2V0X3BhdGggPSBncnVi X3hhc3ByaW50ZiAoIiVzLj8lZCIsIHRvcF9wYXRoLCBpKTsKKyAgICAgIGlmIChzZXRfcGF0aCA9 PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf T1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGFs bG9jYXRlIG1lbW9yeSBmb3IgJXMgbmFtZSBzZXQgcGFyc2luZyBwYXRoIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuYW1lX3BhdGgpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zZXQ7 CisgICAgICAgIH0KKyAgICAgIC8qIFRoaXMgYnJpbmdzIHVzLCBob3BlZnVsbHksIHRvIGEgc2V0 LiAqLworICAgICAgcmVzdWx0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGFzbiwgc2V0X3Bh dGgsICZzZXRfY29tcG9uZW50cyk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykK KyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxF X1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGNvdW50aW5nIG5hbWUg c3ViLWNvbXBvbmVudHMgY29tcG9uZW50cyAoZWxlbWVudCAlZCk6ICVzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBn b3RvIGNsZWFudXBfc2V0OworICAgICAgICB9CisgICAgICBmb3IgKGogPSAxOyBqIDw9IHNldF9j b21wb25lbnRzOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICB0eXBlX3BhdGggPSBncnViX3hh c3ByaW50ZiAoIiVzLj8lZC4/JWQudHlwZSIsIHRvcF9wYXRoLCBpLCBqKTsKKyAgICAgICAgICBp ZiAodHlwZV9wYXRoID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1lIGNvbXBv bmVudCB0eXBlIHBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3Bh dGgpOworICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2V0OworICAgICAgICAgICAgfQorICAg ICAgICAgIHR5cGVfbGVuID0gc2l6ZW9mICh0eXBlKTsKKyAgICAgICAgICByZXN1bHQgPSBhc24x X3JlYWRfdmFsdWUgKGFzbiwgdHlwZV9wYXRoLCB0eXBlLCAmdHlwZV9sZW4pOworICAgICAgICAg IGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGlu ZyAlcyBuYW1lIGNvbXBvbmVudCB0eXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5hbWVfcGF0aCwgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgICAg IGdvdG8gY2xlYW51cF90eXBlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGdydWJf c3RybmNtcCAodHlwZSwgY29tbW9uTmFtZV9vaWQsIHR5cGVfbGVuKSAhPSAwKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICBncnViX2ZyZWUgKHR5cGVfcGF0aCk7CisgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgdmFsX3BhdGggPSBncnViX3hh c3ByaW50ZiAoIiVzLj8lZC4/JWQudmFsdWUiLCB0b3BfcGF0aCwgaSwgaik7CisgICAgICAgICAg aWYgKHZhbF9wYXRoID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1lIGNvbXBv bmVudCB2YWx1ZSBwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9w YXRoKTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3R5cGU7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICBzdHJpbmdfZGVyID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChhc24s IHZhbF9wYXRoLCBuYW1lX3BhdGgsICZzdHJpbmdfc2l6ZSk7CisgICAgICAgICAgaWYgKHN0cmlu Z19kZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gZ3J1Yl9l cnJubzsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbF9wYXRoOworICAgICAgICAgICAg fQorCisgICAgICAgICAgZXJyID0gZGVjb2RlX3N0cmluZyAoc3RyaW5nX2Rlciwgc3RyaW5nX3Np emUsIG5hbWUsIG5hbWVfc2l6ZSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIGdv dG8gY2xlYW51cF9zdHJpbmc7CisKKyAgICAgICAgICBncnViX2ZyZWUgKHN0cmluZ19kZXIpOwor ICAgICAgICAgIGdydWJfZnJlZSAodHlwZV9wYXRoKTsKKyAgICAgICAgICBncnViX2ZyZWUgKHZh bF9wYXRoKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICBncnViX2ZyZWUg KHNldF9wYXRoKTsKKyAgICAgIGlmICgqbmFtZSkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg IGdydWJfZnJlZSAodG9wX3BhdGgpOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworCisgY2xl YW51cF9zdHJpbmc6CisgIGdydWJfZnJlZSAoc3RyaW5nX2Rlcik7CisgY2xlYW51cF92YWxfcGF0 aDoKKyAgZ3J1Yl9mcmVlICh2YWxfcGF0aCk7CisgY2xlYW51cF90eXBlOgorICBncnViX2ZyZWUg KHR5cGVfcGF0aCk7CisgY2xlYW51cF9zZXQ6CisgIGdydWJfZnJlZSAoc2V0X3BhdGgpOworIGNs ZWFudXA6CisgIGdydWJfZnJlZSAodG9wX3BhdGgpOworCisgIHJldHVybiBlcnI7Cit9CisKKy8q IFZlcmlmeSB0aGUgS2V5IFVzYWdlIGV4dGVuc2lvbi4gV2UgcmVxdWlyZSB0aGUgRGlnaXRhbCBT aWduYXR1cmUgdXNhZ2UuICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2tleV91c2FnZSAo Z3J1Yl91aW50OF90ICp2YWx1ZSwgZ3J1Yl9pbnQzMl90IHZhbHVlX3NpemUpCit7CisgIGFzbjFf bm9kZSB1c2FnZWFzbjsKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1Yl9lcnJfdCBlcnIg PSBHUlVCX0VSUl9OT05FOworICBncnViX3VpbnQ4X3QgdXNhZ2UgPSAweGZmOworICBncnViX2lu dDMyX3QgdXNhZ2Vfc2l6ZSA9IHNpemVvZiAodXNhZ2Vfc2l6ZSk7CisKKyAgcmVzdWx0ID0gYXNu MV9jcmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5LZXlVc2FnZSIs ICZ1c2FnZWFzbik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAg ICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIGtleSB1c2FnZSIpOworCisg IHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnVzYWdlYXNuLCB2YWx1ZSwgJnZhbHVlX3Np emUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9ERUNPREVfRkxBR19TVFJJ Q1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAg eworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIERFUiBmb3IgS2V5IFVzYWdlOiAlcyIs IGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICByZXN1bHQgPSBh c24xX3JlYWRfdmFsdWUgKHVzYWdlYXNuLCAiIiwgJnVzYWdlLCAmdXNhZ2Vfc2l6ZSk7CisgIGlm IChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIEtleSBVc2FnZSB2YWx1ZTog JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cisg ICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGlmICghKHVzYWdlICYgZGlnaXRhbFNpZ25h dHVyZVVzYWdlKSkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImtleSB1c2FnZSAoMHgleCkgbWlz c2luZyBEaWdpdGFsIFNpZ25hdHVyZSB1c2FnZSIsIHVzYWdlKTsKKyAgICAgIGdvdG8gY2xlYW51 cDsKKyAgICB9CisKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZ1c2FnZWFz bik7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEJhc2ljQ29uc3RyYWludHMgOjo9IFNF UVVFTkNFIHsKKyAqICAgICAgIGNBICAgICAgICAgICAgICAgICAgICAgIEJPT0xFQU4gREVGQVVM VCBGQUxTRSwKKyAqICAgICAgIHBhdGhMZW5Db25zdHJhaW50ICAgICAgIElOVEVHRVIgKDAuLk1B WCkgT1BUSU9OQUwgfQorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2Jhc2ljX2NvbnN0 cmFpbnRzIChncnViX3VpbnQ4X3QgKnZhbHVlLCBncnViX2ludDMyX3QgdmFsdWVfc2l6ZSkKK3sK KyAgYXNuMV9ub2RlIGJhc2ljYXNuOworICBncnViX2ludDMyX3QgcmVzdWx0OworICBncnViX2Vy cl90IGVyciA9IEdSVUJfRVJSX05PTkU7CisgIGNoYXIgY0FbNl07IC8qIEZBTFNFIG9yIFRSVUUu ICovCisgIGdydWJfaW50MzJfdCBjQV9zaXplID0gc2l6ZW9mIChjQSk7CisKKyAgcmVzdWx0ID0g YXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5CYXNpY0Nv bnN0cmFpbnRzIiwgJmJhc2ljYXNuKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisg ICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAg ICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgQmFzaWMg Q29uc3RyYWludHMiKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZiYXNpY2Fz biwgdmFsdWUsICZ2YWx1ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT TjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1bHQgIT0g QVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBERVIg Zm9yIEJhc2ljIENvbnN0cmFpbnRzOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVh bnVwOworICAgIH0KKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGJhc2ljYXNuLCAiY0Ei LCBjQSwgJmNBX3NpemUpOworICBpZiAocmVzdWx0ID09IEFTTjFfRUxFTUVOVF9OT1RfRk9VTkQp CisgICAgeworICAgICAgLyogTm90IHByZXNlbnQsIGRlZmF1bHQgaXMgRmFsc2UsIHNvIHRoaXMg aXMgT0suICovCisgICAgICBlcnIgPSBHUlVCX0VSUl9OT05FOworICAgICAgZ290byBjbGVhbnVw OworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAg ICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGlu ZyBCYXNpYyBDb25zdHJhaW50cyBjQSB2YWx1ZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQor CisgIC8qIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IG5vdCBiZSBhIENBIGNlcnRpZmljYXRlLiAqLwor ICBpZiAoZ3J1Yl9zdHJuY21wICgiRkFMU0UiLCBjQSwgY0Ffc2l6ZSkgIT0gMCkKKyAgICB7Cisg ICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAidW5leHBlY3Rl ZCBDQSB2YWx1ZTogJXMiLCBjQSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgY2xl YW51cDoKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmYmFzaWNhc24pOworCisgIHJldHVybiBl cnI7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhlIEV4dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb24u IFdlIHJlcXVpcmUgdGhlIENvZGUgU2lnbmluZyB1c2FnZS4KKyAqCisgKiBFeHRLZXlVc2FnZVN5 bnRheCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uTUFYKSBPRiBLZXlQdXJwb3NlSWQKKyAqCisgKiBL ZXlQdXJwb3NlSWQgOjo9IE9CSkVDVCBJREVOVElGSUVSCisgKi8KK3N0YXRpYyBncnViX2Vycl90 Cit2ZXJpZnlfZXh0ZW5kZWRfa2V5X3VzYWdlIChncnViX3VpbnQ4X3QgKnZhbHVlLCBncnViX2lu dDMyX3QgdmFsdWVfc2l6ZSkKK3sKKyAgYXNuMV9ub2RlIGV4dGVuZGVkYXNuOworICBncnViX2lu dDMyX3QgcmVzdWx0LCBjb3VudCwgaSA9IDA7CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJf Tk9ORTsKKyAgY2hhciB1c2FnZVtHUlVCX01BWF9PSURfTEVOXSwgbmFtZVszXTsKKyAgZ3J1Yl9p bnQzMl90IHVzYWdlX3NpemUgPSBzaXplb2YgKHVzYWdlKTsKKworICByZXN1bHQgPSBhc24xX2Ny ZWF0ZV9lbGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLkV4dEtleVVzYWdlU3lu dGF4IiwgJmV4dGVuZGVkYXNuKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAg ICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgRXh0ZW5kZWQg S2V5IFVzYWdlIik7CisKKyAgcmVzdWx0ID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmZXh0ZW5kZWRh c24sIHZhbHVlLCAmdmFsdWVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB U04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOworICBpZiAocmVzdWx0ICE9 IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNpbmcgREVS IGZvciBFeHRlbmRlZCBLZXkgVXNhZ2U6ICVzIiwgYXNuMV9lcnJvcik7CisgICAgICBnb3RvIGNs ZWFudXA7CisgICAgfQorCisgIC8qIElmIEVLVXMgYXJlIHByZXNlbnQsIGl0IGNoZWNrcyB0aGUg cHJlc2VudHMgb2YgQ29kZSBTaWduaW5nIHVzYWdlLiAqLworICByZXN1bHQgPSBhc24xX251bWJl cl9vZl9lbGVtZW50cyAoZXh0ZW5kZWRhc24sICIiLCAmY291bnQpOworICBpZiAocmVzdWx0ICE9 IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRklMRV9UWVBFLCAiZXJyb3IgY291bnRpbmcgbnVtYmVyIG9mIEV4dGVuZGVkIEtleSBVc2Fn ZXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkp OworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBmb3IgKGkgPSAxOyBpIDwgY291bnQg KyAxOyBpKyspCisgICAgeworICAgICAgZ3J1Yl9tZW1zZXQgKG5hbWUsIDAsIHNpemVvZiAobmFt ZSkpOworICAgICAgZ3J1Yl9zbnByaW50ZiAobmFtZSwgc2l6ZW9mIChuYW1lKSwgIj8lZCIsIGkp OworICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChleHRlbmRlZGFzbiwgbmFtZSwgdXNh Z2UsICZ1c2FnZV9zaXplKTsKKyAgICAgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAg ICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQ RSwgImVycm9yIHJlYWRpbmcgRXh0ZW5kZWQgS2V5IFVzYWdlOiAlcyIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgZ290byBj bGVhbnVwOworICAgICAgICB9CisKKyAgICAgIGlmIChncnViX3N0cm5jbXAgKGNvZGVTaWduaW5n VXNhZ2Vfb2lkLCB1c2FnZSwgdXNhZ2Vfc2l6ZSkgPT0gMCkKKyAgICAgICAgZ290byBjbGVhbnVw OworICAgIH0KKworICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi ZXh0ZW5kZWQga2V5IHVzYWdlIG1pc3NpbmcgQ29kZSBTaWduaW5nIHVzYWdlIik7CisKKyBjbGVh bnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZleHRlbmRlZGFzbik7CisKKyAgcmV0dXJu IGVycjsKK30KKworLyoKKyAqIEV4dGVuc2lvbnMgIDo6PSAgU0VRVUVOQ0UgU0laRSAoMS4uTUFY KSBPRiBFeHRlbnNpb24KKyAqCisgKiBFeHRlbnNpb24gIDo6PSAgU0VRVUVOQ0UgIHsKKyAqICAg ICAgZXh0bklEICAgICAgT0JKRUNUIElERU5USUZJRVIsCisgKiAgICAgIGNyaXRpY2FsICAgIEJP T0xFQU4gREVGQVVMVCBGQUxTRSwKKyAqICAgICAgZXh0blZhbHVlICAgT0NURVQgU1RSSU5HCisg KiAgICAgICAgICAgICAgICAgIC0tIGNvbnRhaW5zIHRoZSBERVIgZW5jb2Rpbmcgb2YgYW4gQVNO LjEgdmFsdWUKKyAqICAgICAgICAgICAgICAgICAgLS0gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0 ZW5zaW9uIHR5cGUgaWRlbnRpZmllZAorICogICAgICAgICAgICAgICAgICAtLSBieSBleHRuSUQK KyAqIH0KKyAqCisgKiBBIGNlcnRpZmljYXRlIG11c3Q6CisgKiAgLSBjb250YWluIHRoZSBEaWdp dGFsIFNpZ25hdHVyZSB1c2FnZQorICogIC0gbm90IGJlIGEgQ0EKKyAqICAtIGNvbnRhaW4gbm8g ZXh0ZW5kZWQgdXNhZ2VzLCBvciBjb250YWluIHRoZSBDb2RlIFNpZ25pbmcgZXh0ZW5kZWQgdXNh Z2UKKyAqICAtIG5vdCBjb250YWluIGFueSBvdGhlciBjcml0aWNhbCBleHRlbnNpb25zIChSRkMg NTI4MCBzIDQuMikKKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3ZlcmlmeV9leHRlbnNpb25zIChh c24xX25vZGUgY2VydCkKK3sKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1Yl9pbnQzMl90 IGV4dCwgbnVtX2V4dGVuc2lvbnMgPSAwOworICBncnViX2ludDMyX3QgdXNhZ2VfcHJlc2VudCA9 IDAsIGNvbnN0cmFpbnRzX3ByZXNlbnQgPSAwLCBleHRlbmRlZF91c2FnZV9wcmVzZW50ID0gMDsK KyAgY2hhciAqb2lkX3BhdGgsICpjcml0aWNhbF9wYXRoLCAqdmFsdWVfcGF0aDsKKyAgY2hhciBl eHRuSURbR1JVQl9NQVhfT0lEX0xFTl07CisgIGdydWJfaW50MzJfdCBleHRuSURfc2l6ZTsKKyAg Z3J1Yl9lcnJfdCBlcnI7CisgIGNoYXIgY3JpdGljYWxbNl07IC8qIFdlIGdldCBlaXRoZXIgIlRS VUUiIG9yICJGQUxTRSIuICovCisgIGdydWJfaW50MzJfdCBjcml0aWNhbF9zaXplOworICBncnVi X3VpbnQ4X3QgKnZhbHVlOworICBncnViX2ludDMyX3QgdmFsdWVfc2l6ZTsKKworICByZXN1bHQg PSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoY2VydCwgInRic0NlcnRpZmljYXRlLmV4dGVuc2lv bnMiLCAmbnVtX2V4dGVuc2lvbnMpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIGNvdW50 aW5nIG51bWJlciBvZiBleHRlbnNpb25zOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFz bjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIGlmIChudW1fZXh0ZW5zaW9ucyA8IDIpCisgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAg ICAgICAgICAgICJpbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGV4dGVuc2lvbnMgZm9yIGNlcnRpZmlj YXRlLCBuZWVkIGF0IGxlYXN0IDIsIGdvdCAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIG51 bV9leHRlbnNpb25zKTsKKworICBmb3IgKGV4dCA9IDE7IGV4dCA8PSBudW1fZXh0ZW5zaW9uczsg ZXh0KyspCisgICAgeworICAgICAgb2lkX3BhdGggPSBncnViX3hhc3ByaW50ZiAoInRic0NlcnRp ZmljYXRlLmV4dGVuc2lvbnMuPyVkLmV4dG5JRCIsIGV4dCk7CisgICAgICBpZiAob2lkX3BhdGgg PT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9GSUxFX1RZUEUsICJlcnJvciBleHRlbnNpb24gT0lEIHBhdGggaXMgZW1wdHkiKTsKKyAg ICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisKKyAgICAgIGV4dG5JRF9zaXplID0gc2l6 ZW9mIChleHRuSUQpOworICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChjZXJ0LCBvaWRf cGF0aCwgZXh0bklELCAmZXh0bklEX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX1NV Q0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBleHRlbnNpb24gT0lEOiAlcyIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAg Z290byBjbGVhbnVwX29pZF9wYXRoOworICAgICAgICB9CisKKyAgICAgIGNyaXRpY2FsX3BhdGgg PSBncnViX3hhc3ByaW50ZiAoInRic0NlcnRpZmljYXRlLmV4dGVuc2lvbnMuPyVkLmNyaXRpY2Fs IiwgZXh0KTsKKyAgICAgIGlmIChjcml0aWNhbF9wYXRoID09IE5VTEwpCisgICAgICAgIHsKKyAg ICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3Ig Y3JpdGljYWwgcGF0aCBpcyBlbXB0eSIpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9vaWRfcGF0 aDsKKyAgICAgICAgfQorCisgICAgICBjcml0aWNhbF9zaXplID0gc2l6ZW9mIChjcml0aWNhbCk7 CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGNlcnQsIGNyaXRpY2FsX3BhdGgsIGNy aXRpY2FsLCAmY3JpdGljYWxfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ID09IEFTTjFfRUxFTUVO VF9OT1RfRk9VTkQpCisgICAgICAgIGNyaXRpY2FsWzBdID0gJ1wwJzsKKyAgICAgIGVsc2UgaWYg KHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBleHRlbnNpb24g Y3JpdGljYWxpdHk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVy cm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfY3JpdGljYWxfcGF0aDsKKyAg ICAgICAgfQorCisgICAgICB2YWx1ZV9wYXRoID0gZ3J1Yl94YXNwcmludGYgKCJ0YnNDZXJ0aWZp Y2F0ZS5leHRlbnNpb25zLj8lZC5leHRuVmFsdWUiLCBleHQpOworICAgICAgaWYgKHZhbHVlX3Bh dGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBleHRuVmFsdWUgcGF0aCBpcyBlbXB0eSIpOworICAg ICAgICAgIGdvdG8gY2xlYW51cF9jcml0aWNhbF9wYXRoOworICAgICAgICB9CisKKyAgICAgIHZh bHVlID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChjZXJ0LCB2YWx1ZV9wYXRoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjZXJ0aWZpY2F0ZSBleHRl bnNpb24gdmFsdWUiLCAmdmFsdWVfc2l6ZSk7CisgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAg ICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICAgICAgZ290byBjbGVh bnVwX3ZhbHVlX3BhdGg7CisgICAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIE5vdyB3ZSBt dXN0IHNlZSBpZiB3ZSByZWNvZ25pc2UgdGhlIE9JRC4gSWYgd2UgaGF2ZSBhbiB1bnJlY29nbmlz ZWQKKyAgICAgICAqIGNyaXRpY2FsIGV4dGVuc2lvbiB3ZSBNVVNUIGJhaWwuCisgICAgICAgKi8K KyAgICAgIGlmIChncnViX3N0cm5jbXAgKGtleVVzYWdlX29pZCwgZXh0bklELCBleHRuSURfc2l6 ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IHZlcmlmeV9rZXlfdXNhZ2UgKHZh bHVlLCB2YWx1ZV9zaXplKTsKKyAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisg ICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisKKyAgICAgICAgICB1c2FnZV9wcmVzZW50 Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoYmFzaWNDb25zdHJh aW50c19vaWQsIGV4dG5JRCwgZXh0bklEX3NpemUpID09IDApCisgICAgICAgIHsKKyAgICAgICAg ICBlcnIgPSB2ZXJpZnlfYmFzaWNfY29uc3RyYWludHMgKHZhbHVlLCB2YWx1ZV9zaXplKTsKKyAg ICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAgICAgICBnb3RvIGNsZWFu dXBfdmFsdWU7CisKKyAgICAgICAgICBjb25zdHJhaW50c19wcmVzZW50Kys7CisgICAgICAgIH0K KyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoZXh0ZW5kZWRLZXlVc2FnZV9vaWQsIGV4dG5J RCwgZXh0bklEX3NpemUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSB2ZXJpZnlf ZXh0ZW5kZWRfa2V5X3VzYWdlICh2YWx1ZSwgdmFsdWVfc2l6ZSk7CisgICAgICAgICAgaWYgKGVy ciAhPSBHUlVCX0VSUl9OT05FKQorICAgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbHVlOworCisg ICAgICAgICAgZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCsrOworICAgICAgICB9CisgICAgICBlbHNl IGlmIChncnViX3N0cm5jbXAgKCJUUlVFIiwgY3JpdGljYWwsIGNyaXRpY2FsX3NpemUpID09IDAp CisgICAgICAgIHsKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIFBlciB0aGUgUkZDLCB3ZSBt dXN0IG5vdCBwcm9jZXNzIGEgY2VydGlmaWNhdGUgd2l0aCBhIGNyaXRpY2FsCisgICAgICAgICAg ICogZXh0ZW5zaW9uIHdlIGRvIG5vdCB1bmRlcnN0YW5kLgorICAgICAgICAgICAqLworICAgICAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgInVuaGFuZGxlZCBjcml0aWNhbCB4NTA5IGV4dGVuc2lvbiB3aXRo IE9JRCAlcyIsIGV4dG5JRCk7CisgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbHVlOworICAgICAg ICB9CisKKyAgICAgIGdydWJfZnJlZSAodmFsdWUpOworICAgICAgZ3J1Yl9mcmVlICh2YWx1ZV9w YXRoKTsKKyAgICAgIGdydWJfZnJlZSAoY3JpdGljYWxfcGF0aCk7CisgICAgICBncnViX2ZyZWUg KG9pZF9wYXRoKTsKKyAgICB9CisKKyAgaWYgKHVzYWdlX3ByZXNlbnQgIT0gMSkKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAg ICAgICAgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIEtleSBVc2FnZSBleHRlbnNpb25zIC0gZXhwZWN0 ZWQgMSwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2VfcHJlc2VudCk7CisK KyAgaWYgKGNvbnN0cmFpbnRzX3ByZXNlbnQgIT0gMSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0 ZWQgbnVtYmVyIG9mIGJhc2ljIGNvbnN0cmFpbnRzIGV4dGVuc2lvbnMgLSBleHBlY3RlZCAxLCBn b3QgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50c19wcmVzZW50KTsKKwor ICBpZiAoZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCA+IDEpCisgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVj dGVkIG51bWJlciBvZiBFeHRlbmRlZCBLZXkgVXNhZ2UgZXh0ZW5zaW9ucyAtIGV4cGVjdGVkIDAg b3IgMSwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfdXNhZ2VfcHJl c2VudCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVwX3ZhbHVlOgorICBn cnViX2ZyZWUgKHZhbHVlKTsKKyBjbGVhbnVwX3ZhbHVlX3BhdGg6CisgIGdydWJfZnJlZSAodmFs dWVfcGF0aCk7CisgY2xlYW51cF9jcml0aWNhbF9wYXRoOgorICBncnViX2ZyZWUgKGNyaXRpY2Fs X3BhdGgpOworIGNsZWFudXBfb2lkX3BhdGg6CisgIGdydWJfZnJlZSAob2lkX3BhdGgpOworCisg IHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCithZGRfY2VydF9maW5nZXJwcmludCAoY29u c3Qgdm9pZCAqZGF0YSwgY29uc3QgZ3J1Yl9zaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAg ICAgICAgICAgIGdydWJfeDUwOV9jZXJ0X3QgKmNvbnN0IGNlcnQpCit7CisgIC8qIEFkZCBTSEEy NTYgaGFzaCBvZiBjZXJ0aWZpY2F0ZS4gKi8KKyAgZ3J1Yl9jcnlwdG9faGFzaCAoKGdjcnlfbWRf c3BlY190ICopICZfZ2NyeV9kaWdlc3Rfc3BlY19zaGEyNTYsCisgICAgICAgICAgICAgICAgICAg ICZjZXJ0LT5maW5nZXJwcmludFtHUlVCX0ZJTkdFUlBSSU5UX1NIQTI1Nl0sIGRhdGEsIGRhdGFf c2l6ZSk7CisgIC8qIEFkZCBTSEEzODQgaGFzaCBvZiBjZXJ0aWZpY2F0ZS4gKi8KKyAgZ3J1Yl9j cnlwdG9faGFzaCAoKGdjcnlfbWRfc3BlY190ICopICZfZ2NyeV9kaWdlc3Rfc3BlY19zaGEzODQs CisgICAgICAgICAgICAgICAgICAgICZjZXJ0LT5maW5nZXJwcmludFtHUlVCX0ZJTkdFUlBSSU5U X1NIQTM4NF0sIGRhdGEsIGRhdGFfc2l6ZSk7CisgIC8qIEFkZCBTSEE1MTIgaGFzaCBvZiBjZXJ0 aWZpY2F0ZS4gKi8KKyAgZ3J1Yl9jcnlwdG9faGFzaCAoKGdjcnlfbWRfc3BlY190ICopICZfZ2Ny eV9kaWdlc3Rfc3BlY19zaGE1MTIsCisgICAgICAgICAgICAgICAgICAgICZjZXJ0LT5maW5nZXJw cmludFtHUlVCX0ZJTkdFUlBSSU5UX1NIQTUxMl0sIGRhdGEsIGRhdGFfc2l6ZSk7Cit9CisKKy8q CisgKiBQYXJzZSBhIGNlcnRpZmljYXRlIHdob3NlIERFUi1lbmNvZGVkIGZvcm0gaXMgaW4gQGRh dGEsIG9mIHNpemUgQGRhdGFfc2l6ZS4KKyAqIFJldHVybiB0aGUgcmVzdWx0cyBpbiBAcmVzdWx0 cywgd2hpY2ggbXVzdCBwb2ludCB0byBhbiBhbGxvY2F0ZWQgeDUwOQorICogY2VydGlmaWNhdGUu CisgKi8KK2dydWJfZXJyX3QKK2dydWJfeDUwOV9jZXJ0X3BhcnNlIChjb25zdCB2b2lkICpkYXRh LCBncnViX3NpemVfdCBkYXRhX3NpemUsIGdydWJfeDUwOV9jZXJ0X3QgKnJlc3VsdHMpCit7Cisg IGdydWJfaW50MzJfdCByZXN1bHQgPSAwOworICBhc24xX25vZGUgY2VydDsKKyAgZ3J1Yl9lcnJf dCBlcnI7CisgIGdydWJfaW50MzJfdCB0bXBfc2l6ZTsKKyAgZ3J1Yl9pbnQzMl90IHNpemUgPSAo Z3J1Yl9pbnQzMl90KSBkYXRhX3NpemU7CisKKyAgaWYgKGRhdGFfc2l6ZSA+IEdSVUJfVUlOVF9N QVgpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwKKyAgICAg ICAgICAgICAgICAgICAgICAgImNhbm5vdCBwYXJzZSBhIGNlcnRpZmljYXRlIHdoZXJlIGRhdGEg c2l6ZSA+IEdSVUJfVUlOVF9NQVgiKTsKKworICByZXN1bHQgPSBhc24xX2NyZWF0ZV9lbGVtZW50 IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLkNlcnRpZmljYXRlIiwgJmNlcnQpOworICBp ZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVh dGUgQVNOLjEgc3RydWN0dXJlIGZvciBjZXJ0aWZpY2F0ZTogJXMiLAorICAgICAgICAgICAgICAg ICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9k ZWNvZGluZzIgKCZjZXJ0LCBkYXRhLCAmc2l6ZSwgQVNOMV9ERUNPREVfRkxBR19TVFJJQ1RfREVS LCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAg ICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgREVSIGZvciBjZXJ0aWZpY2F0ZTogJXMiLCBh c24xX2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyoKKyAgICogVEJT Q2VydGlmaWNhdGUgIDo6PSAgU0VRVUVOQ0UgeworICAgKiAgICAgdmVyc2lvbiAgICAgICAgIFsw XSAgRVhQTElDSVQgVmVyc2lvbiBERUZBVUxUIHYxCisgICAqLworICBlcnIgPSBjaGVja192ZXJz aW9uIChjZXJ0LCByZXN1bHRzKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdv dG8gY2xlYW51cDsKKworICAvKgorICAgKiBzZXJpYWxOdW1iZXIgICAgICAgICBDZXJ0aWZpY2F0 ZVNlcmlhbE51bWJlciwKKyAgICoKKyAgICogQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIgIDo6PSAg SU5URUdFUgorICAgKi8KKyAgcmVzdWx0cy0+c2VyaWFsID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2Fu ZF9yZWFkIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuc2VyaWFsTnVtYmVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaWNhdGUgc2VyaWFs IG51bWJlciIsICZ0bXBfc2l6ZSk7CisgIGlmIChyZXN1bHRzLT5zZXJpYWwgPT0gTlVMTCkKKyAg ICB7CisgICAgICBlcnIgPSBncnViX2Vycm5vOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0K KyAgLyoKKyAgICogSXQncyBzYWZlIHRvIGNhc3QgdGhlIHNpZ25lZCBpbnQgdG8gYW4gdW5zaWdu ZWQgaGVyZSwgd2Uga25vdworICAgKiBsZW5ndGggaXMgbm9uLW5lZ2F0aXZlLgorICAgKi8KKyAg cmVzdWx0cy0+c2VyaWFsX2xlbiA9IHRtcF9zaXplOworCisgIC8qCisgICAqIHNpZ25hdHVyZSAg ICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAqCisgICAqIFdlIGRvbid0IGxvYWQg dGhlIHNpZ25hdHVyZSBvciBpc3N1ZXIgYXQgdGhlIG1vbWVudCwKKyAgICogYXMgd2UgZG9uJ3Qg YXR0ZW1wdCB4NTA5IHZlcmlmaWNhdGlvbi4KKyAgICovCisKKyAgLyoKKyAgICogdmFsaWRpdHkg ICAgICAgICAgICAgVmFsaWRpdHksCisgICAqCisgICAqIFZhbGlkaXR5IDo6PSBTRVFVRU5DRSB7 CisgICAqICAgICBub3RCZWZvcmUgICAgICBUaW1lLAorICAgKiAgICAgbm90QWZ0ZXIgICAgICAg VGltZSB9CisgICAqCisgICAqIFdlIGNhbid0IHZhbGlkYXRlIHRoaXMgcmVhc29uYWJseSwgd2Ug aGF2ZSBubyB0cnVlIHRpbWUgc291cmNlIG9uIHNldmVyYWwKKyAgICogcGxhdGZvcm1zLiBGb3Ig bm93IHdlIGRvIG5vdCBwYXJzZSB0aGVtLgorICAgKi8KKworICAvKgorICAgKiBpc3N1ZXIgICAg ICAgICAgICAgIE5hbWUsCisgICAqCisgICAqIFRoaXMgaXMgYW4gWDUwMSBuYW1lLCB3ZSBwYXJz ZSBvdXQganVzdCB0aGUgaXNzdWVyLgorICAgKi8KKyAgZXJyID0gcmVhZF9uYW1lIChjZXJ0LCAi dGJzQ2VydGlmaWNhdGUuaXNzdWVyIiwgJnJlc3VsdHMtPmlzc3VlciwgJnJlc3VsdHMtPmlzc3Vl cl9sZW4pOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgZ290byBjbGVhbnVwX3Nl cmlhbDsKKworICAvKgorICAgKiBzdWJqZWN0ICAgICAgICAgICAgICBOYW1lLAorICAgKgorICAg KiBUaGlzIGlzIGFuIFg1MDEgbmFtZSwgd2UgcGFyc2Ugb3V0IGp1c3QgdGhlIENOLgorICAgKi8K KyAgZXJyID0gcmVhZF9uYW1lIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuc3ViamVjdCIsICZyZXN1 bHRzLT5zdWJqZWN0LCAmcmVzdWx0cy0+c3ViamVjdF9sZW4pOworICBpZiAoZXJyICE9IEdSVUJf RVJSX05PTkUpCisgICAgZ290byBjbGVhbnVwX2lzc3VlcjsKKworICAvKgorICAgKiBUQlNDZXJ0 aWZpY2F0ZSAgOjo9ICBTRVFVRU5DRSAgeworICAgKiAgICAuLi4KKyAgICogICAgc3ViamVjdFB1 YmxpY0tleUluZm8gU3ViamVjdFB1YmxpY0tleUluZm8sCisgICAqICAgIC4uLgorICAgKi8KKyAg ZXJyID0gZ3J1Yl94NTA5X3JlYWRfc3ViamVjdF9wdWJsaWNfa2V5IChjZXJ0LCByZXN1bHRzKTsK KyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8gY2xlYW51cF9uYW1lOworCisg IC8qCisgICAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7CisgICAqICAgIC4uLgor ICAgKiAgICBleHRlbnNpb25zICAgICAgWzNdICBFWFBMSUNJVCBFeHRlbnNpb25zIE9QVElPTkFM CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0tIElmIHByZXNlbnQsIHZlcnNpb24gTVVT VCBiZSB2MworICAgKiB9CisgICAqLworICBlcnIgPSB2ZXJpZnlfZXh0ZW5zaW9ucyAoY2VydCk7 CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGNsZWFudXBfbXBpczsKKwor ICAvKgorICAgKiBXZSBkbyBub3QgcmVhZCBvciBjaGVjayB0aGUgc2lnbmF0dXJlIG9uIHRoZSBj ZXJ0aWZpY2F0ZToKKyAgICogYXMgZGlzY3Vzc2VkIHdlIGRvIG5vdCB0cnkgdG8gdmFsaWRhdGUg dGhlIGNlcnRpZmljYXRlIGJ1dCB0cnVzdAorICAgKiBpdCBpbXBsaWN0bHkuCisgICAqLworICBh c24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZjZXJ0KTsKKworICAvKiBBZGQgdGhlIGZpbmdlcnByaW50 IG9mIHRoZSBjZXJ0aWZpY2F0ZS4gKi8KKyAgYWRkX2NlcnRfZmluZ2VycHJpbnQgKGRhdGEsIGRh dGFfc2l6ZSwgcmVzdWx0cyk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVw X21waXM6CisgIF9nY3J5X21waV9yZWxlYXNlIChyZXN1bHRzLT5tcGlzW0dSVUJfUlNBX1BLX01P RFVMVVNdKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHJlc3VsdHMtPm1waXNbR1JVQl9SU0FfUEtf RVhQT05FTlRdKTsKKyBjbGVhbnVwX25hbWU6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+c3ViamVj dCk7CisgY2xlYW51cF9pc3N1ZXI6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+aXNzdWVyKTsKKyBj bGVhbnVwX3NlcmlhbDoKKyAgZ3J1Yl9mcmVlIChyZXN1bHRzLT5zZXJpYWwpOworIGNsZWFudXA6 CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmNlcnQpOworCisgIHJldHVybiBlcnI7Cit9CisK Ky8qCisgKiBSZWxlYXNlIGFsbCB0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIHg1MDkg Y2VydGlmaWNhdGUuIElmIHRoZSBjYWxsZXIKKyAqIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0aGUg Y2VydGlmaWNhdGUsIGl0IG11c3QgZnJlZSBpdC4gVGhlIGNhbGxlciBpcyBhbHNvCisgKiByZXNw b25zaWJsZSBmb3IgbWFpbnRlbmFuY2Ugb2YgdGhlIGxpbmtlZCBsaXN0LgorICovCit2b2lkCitn cnViX3g1MDlfY2VydF9yZWxlYXNlIChncnViX3g1MDlfY2VydF90ICpjZXJ0KQoreworICBncnVi X2ZyZWUgKGNlcnQtPmlzc3Vlcik7CisgIGdydWJfZnJlZSAoY2VydC0+c3ViamVjdCk7CisgIGdy dWJfZnJlZSAoY2VydC0+c2VyaWFsKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGNlcnQtPm1waXNb R1JVQl9SU0FfUEtfTU9EVUxVU10pOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoY2VydC0+bXBpc1tH UlVCX1JTQV9QS19FWFBPTkVOVF0pOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL2NyeXB0 by5oIGIvaW5jbHVkZS9ncnViL2NyeXB0by5oCmluZGV4IDZhYjAyMWNiOC4uZTRlMmJkMWE3IDEw MDY0NAotLS0gYS9pbmNsdWRlL2dydWIvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9ncnViL2NyeXB0 by5oCkBAIC01MTgsNiArNTE4LDcgQEAgZ3J1Yl9jcnlwdG9faG1hY19idWZmZXIgKGNvbnN0IHN0 cnVjdCBnY3J5X21kX3NwZWMgKm1kLAogZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2Vz dF9zcGVjX21kNTsKIGV4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEx OwogZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTI1NjsKK2V4dGVy biBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEzODQ7CiBleHRlcm4gZ2NyeV9t ZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfc2hhNTEyOwogZXh0ZXJuIGdjcnlfbWRfc3BlY190 IF9nY3J5X2RpZ2VzdF9zcGVjX2NyYzMyOwogZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2Ny eV9jaXBoZXJfc3BlY19hZXM7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5n IGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xp c3RpbmZvL2dydWItZGV2ZWwK