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 371DBC19F2E for ; Thu, 27 Feb 2025 15:22:30 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tnfhr-0008DF-1w; Thu, 27 Feb 2025 10:21:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tnfho-0008CR-Cv for grub-devel@gnu.org; Thu, 27 Feb 2025 10:21:44 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tnfhk-0007uz-4T for grub-devel@gnu.org; Thu, 27 Feb 2025 10:21:44 -0500 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 51RFBxmR020285; Thu, 27 Feb 2025 15:21:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=03zww2 WSNHvY41B9uKjjkMcJ9rjiDkBHI8nz5aJL1aY=; b=BmI1NjquzUuP9HgSduHT9j O9a0n2qBk9c0W9TqLsLUHdvZ6p8yEaCQ3GMTaAHuEiNn8HTwOKIzVkbrFWkGYx0e x45LjtWhXWrA1vcYqT0LYO0o8BJf+O5RfzhLSvInj8zogoj8HYe2Tgmjb0BfvM9S LSafBYRloxKk4Nm2o4qD5JpSaW0V+LMttfLl4wt82414cHriLaqhh/9I3yCnCVCb d3SiXj3xgCMhFrf/Ar1tZgMCZZFKTYE79gkoVu0HAj/5Hav0rVkvNbOYJdBRzAo5 +B5BNoVsrRlPE6NFuWjAK63iR1bQDQ3aKBS8y0lVAKFNE1sNh7vaCXdRyEvsDbDw == Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 452hv8tuhn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 27 Feb 2025 15:21:33 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 51RFA8L0012100; Thu, 27 Feb 2025 15:21:32 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 44ys9ysgcf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 27 Feb 2025 15:21:32 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 51RFLVQJ13632056 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 27 Feb 2025 15:21:31 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2D23458059; Thu, 27 Feb 2025 15:21:31 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6044C5804B; Thu, 27 Feb 2025 15:21:30 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Thu, 27 Feb 2025 15:21:30 +0000 (GMT) MIME-Version: 1.0 Date: Thu, 27 Feb 2025 20:51:30 +0530 From: sudhakar To: Stefan Berger Cc: grub-devel@gnu.org, dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com Subject: Re: [PATCH v1 16/21] appendedsig: The creation of trusted and distrusted lists In-Reply-To: <1ef663fc-16f9-4b07-b835-a5853985e7e0@linux.ibm.com> References: <20241218145647.1390837-1-sudhakar@linux.ibm.com> <20241218145647.1390837-17-sudhakar@linux.ibm.com> <1ef663fc-16f9-4b07-b835-a5853985e7e0@linux.ibm.com> Message-ID: <32e4c8eb3361ca4ea929a0d3f91c49fd@linux.ibm.com> X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: mNHupc4-vop9bLnFUKmE6NVfifA8EJeG X-Proofpoint-GUID: mNHupc4-vop9bLnFUKmE6NVfifA8EJeG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_06,2025-02-27_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2502100000 definitions=main-2502270114 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_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org T24gMjAyNC0xMi0zMSAyMjo1MSwgU3RlZmFuIEJlcmdlciB3cm90ZToKPiBPbiAxMi8xOC8yNCA5 OjU2IEFNLCBTdWRoYWthciBLdXBwdXNhbXkgd3JvdGU6Cj4+IFRoZSB0cnVzdGVkIGNlcnRpZmlj YXRlcyBhbmQgYmluYXJ5IGhhc2hlcywgZGlzdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgCj4+IGFuZAo+ PiBiaW5hcnkvY2VydGlmaWNhdGUgaGFzaGVzIHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBs YXRmb3JtIGtleXN0b3JlIAo+PiBidWZmZXIKPj4gaWYgU2VjdXJlIEJvb3QgaXMgZW5hYmxlZCB3 aXRoIFBLUy4KPj4gSW4gb3JkZXIgdG8gdmVyaWZ5IHRoZSBpbnRlZ2VyaXR5IG9mIHRoZSBrZXJu ZWwsIHRoZSBleHRyYWN0ZWQgZGF0YQo+IAo+IGludGVncml0eQo+IAo+PiB3b3VsZCBiZSBzdG9y ZWQgaW4gdGhlIGJ1ZmZlciBkYiBhbmQgZGJ4Lgo+IAo+IG5lZWRzIHRvIGJlIHN0b3JlZD8KPiAK Pj4gCj4+IFRoZSB0cnVzdGVkIGNlcnRpZmljYXRlcyB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRo ZSBncnViIEVMRk5PVEUgaWYgCj4+IFNlY3VyZSBCb290IGlzCj4+IGVuYWJsZWQgd2l0aCBzdGF0 aWMga2V5LiBJbiBvcmRlciB0byB2ZXJpZnkgdGhlIGludGVnZXJpdHkgb2YgdGhlIAo+PiBrZXJu ZWwsCj4gCj4gaW50ZWdyaXR5Cj4gCj4+IHRoZSBleHRyYWN0ZWQgZGF0YSB3b3VsZCBiZSBzdG9y ZWQgaW4gdGhlIGJ1ZmZlciBkYi4KPiAKPiBuZWVkcyB0byBiZSBzdG9yZWQ/Cj4gCj4+IAo+PiBO b3RlOi0KPj4gCj4+IGlmIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlIG5vciBiaW5hcnkgaGFzaCBl eGlzdHMgaW4gdGhlIGRpc3RydXN0ZWQgCj4+IGxpc3QgKERCWCksCj4gCj4gSWYgbmVpdGhlciB0 aGUgLi4uIG5vciAuLi4KPiAKPj4gcmVqZWN0ZWQgaXQgd2hpbGUgZXh0cmFjdGluZyBpdCBmcm9t IHRoZSBwbGF0Zm9ybSBrZXlzdG9yZSBidWZmZXIuCj4gCj4gd2hhdCBpcyAnaXQnIGluIHRoaXMg Y29udGV4dAo+IAo+PiAKPj4gU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRo YWthckBsaW51eC5pYm0uY29tPgo+PiAtLS0KPj4gICBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5k ZWRzaWcvYXBwZW5kZWRzaWcuYyB8IDYzNiAKPj4gKysrKysrKysrKysrKysrKystLQo+PiAgIDEg ZmlsZSBjaGFuZ2VkLCA1OTIgaW5zZXJ0aW9ucygrKSwgNDQgZGVsZXRpb25zKC0pCj4+IAo+PiBk aWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMg Cj4+IGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMKPj4gaW5k ZXggNWM4MmI5NmE0Li4zMTY0OWU4MDAgMTAwNjQ0Cj4+IC0tLSBhL2dydWItY29yZS9jb21tYW5k cy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCj4+ICsrKyBiL2dydWItY29yZS9jb21tYW5kcy9h cHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCj4+IEBAIC0zNCw3ICszNCw3IEBACj4+ICAgI2luY2x1 ZGUgPGxpYnRhc24xLmg+Cj4+ICAgI2luY2x1ZGUgPGdydWIvZW52Lmg+Cj4+ICAgI2luY2x1ZGUg PGdydWIvbG9ja2Rvd24uaD4KPj4gLQo+PiArI2luY2x1ZGUgPGdydWIvcGxhdGZvcm1fa2V5c3Rv cmUuaD4KPj4gICAjaW5jbHVkZSAiYXBwZW5kZWRzaWcuaCIKPj4gICAgIEdSVUJfTU9EX0xJQ0VO U0UgKCJHUEx2MysiKTsKPj4gQEAgLTY0LDkgKzY0LDIzIEBAIHN0cnVjdCBncnViX2FwcGVuZGVk X3NpZ25hdHVyZQo+PiAgICAgc3RydWN0IHBrY3M3X3NpZ25lZERhdGEgcGtjczc7ICAgICAgICAv KiBQYXJzZWQgUEtDUyM3IGRhdGEgKi8KPj4gICB9Owo+PiAgIC0vKiBUcnVzdGVkIGNlcnRpZmlj YXRlcyBmb3IgdmVyaWZ5aW5nIGFwcGVuZGVkIHNpZ25hdHVyZXMgKi8KPj4gLXN0cnVjdCB4NTA5 X2NlcnRpZmljYXRlICpncnViX3RydXN0ZWRfa2V5Owo+PiArLyogVGhpcyByZXByZXNlbnRzIGEg dHJ1c3RlZC9kaXN0cnVzdGVkIGxpc3QqLwo+PiArc3RydWN0IGdydWJfZGF0YWJhc2UKPj4gK3sK Pj4gKyAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmtleXM7IC8qIENlcnRpZmljYXRlcyAqLwo+ PiArICBncnViX3NpemVfdCBrZXlfZW50cmllczsgICAgICAgLyogTnVtYmVyIG9mIGNlcnRpZmlj YXRlcyAqLwo+PiArICBncnViX3VpbnQ4X3QgKipzaWduYXR1cmVzOyAgICAgLyogQ2VydGlmaWNh dGUvYmluYXJ5IGhhc2hlcyAqLwo+PiArICBncnViX3NpemVfdCAqc2lnbmF0dXJlX3NpemU7ICAg LyogU2l6ZSBvZiBjZXJ0aWZpY2F0ZS9iaW5hcnkgaGFzaGVzIAo+PiAqLwo+PiArICBncnViX3Np emVfdCBzaWduYXR1cmVfZW50cmllczsgLyogTnVtYmVyIG9mIGNlcnRpZmljYXRlL2JpbmFyeSAK Pj4gaGFzaGVzICovCj4+ICt9Owo+PiArCj4+ICsvKiBUcnVzdGVkIGxpc3QgKi8KPj4gK3N0cnVj dCBncnViX2RhdGFiYXNlIGdydWJfZGIgPSB7LmtleXMgPSBOVUxMLCAua2V5X2VudHJpZXMgPSAw LCAKPj4gLnNpZ25hdHVyZXMgPSBOVUxMLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuc2lnbmF0dXJlX3NpemUgPSBOVUxMLCAKPj4gLnNpZ25hdHVyZV9lbnRyaWVzID0gMH07 Cj4+ICAgKy8qIERpc3RydXN0ZWQgbGlzdCAqLwo+PiArc3RydWN0IGdydWJfZGF0YWJhc2UgZ3J1 Yl9kYnggPSB7LnNpZ25hdHVyZXMgPSBOVUxMLCAuc2lnbmF0dXJlX3NpemUgCj4+ID0gTlVMTCwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaWduYXR1cmVfZW50cmllcyA9 IDB9Owo+PiAgIC8qCj4+ICAgICogRm9yY2UgZ2NyeV9yc2EgdG8gYmUgYSBtb2R1bGUgZGVwZW5k ZW5jeS4KPj4gICAgKgo+PiBAQCAtODcsNiArMTAxLDEzIEBAIHN0cnVjdCB4NTA5X2NlcnRpZmlj YXRlICpncnViX3RydXN0ZWRfa2V5Owo+PiAgICAqIGFsc28gcmVzb2x2ZXMgb3VyIGNvbmNlcm5z IGFib3V0IGxvYWRpbmcgZnJvbSB0aGUgZmlsZXN5c3RlbS4KPj4gICAgKi8KPj4gICBleHRlcm4g Z2NyeV9wa19zcGVjX3QgX2djcnlfcHVia2V5X3NwZWNfcnNhOwo+PiArZXh0ZXJuIGdjcnlfbWRf c3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTIyNDsKPj4gK2V4dGVybiBnY3J5X21kX3NwZWNf dCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEzODQ7Cj4+ICsKPj4gKy8qIHJlbGVhc2luZyB0cnVzdGVk IGxpc3QgbWVtb3J5ICovCj4gCj4gVHlwaWNhbGx5IHRoZXNlIGZ1bmN0aW9ucyBzdGFydCB3aXRo ICdmcmVlJy4gRnJlZSB0cnVzdGVkIGxpc3QgbWVtb3J5Lgo+IAo+PiArc3RhdGljIHZvaWQgZ3J1 Yl9yZWxlYXNlX3RydXN0ZWRfbGlzdCAodm9pZCk7Cj4+ICsvKiByZWxlYXNpbmcgZGlzdHJ1c3Rl ZCBsaXN0IG1lbW9yeSAqLwo+PiArc3RhdGljIHZvaWQgZ3J1Yl9yZWxlYXNlX2Rpc3RydXN0ZWRf bGlzdCAodm9pZCk7Cj4gCj4gSSBhbSBub3Qgc3VyZSB3aGV0aGVyIGxvY2FsIGZ1bmN0aW9ucyBh bmQgdmFyaWFibGVzIHNob3VsZCBiZSBwcmVmaXhlZAo+IHdpdGggZ3J1Yl8gc2luY2UgdHlwaWNh bGx5IHRob3NlIHByZWZpeGVkIHdpdCBncnViXyBhcmUgZ2xvYmFsCj4gZnVuY3Rpb25zLiBUaGlz IGNvbW1lbnQgYXBwbGllcyB0byBhbGwgZnVuY3Rpb25zIGluIHRoaXMgcGF0Y2ggYW5kCj4gc2Vy aWVzLgo+IAo+PiAgICAgc3RhdGljIGVudW0KPj4gICB7Cj4+IEBAIC05NSw2ICsxMTYsMjQ4IEBA IHN0YXRpYyBlbnVtCj4+ICAgICBjaGVja19zaWdzX2ZvcmNlZCA9IDIKPj4gICB9IGNoZWNrX3Np Z3MgPSBjaGVja19zaWdzX25vOwo+PiAgICsvKgo+PiArICogR1VJRCBjYW4gYmUgdXNlZCB0byBk ZXRlcm1pbmUgdGhlIGhhc2hpbmcgZnVuY3Rpb24gYW5kCj4+ICsgKiBnZW5lcmF0ZSB0aGUgaGFz aCB1c2luZyBkZXRlcm1pbmVkIGhhc2hpbmcgZnVuY3Rpb24uCj4+ICsgKi8KPj4gK3N0YXRpYyBn cnViX2Vycl90Cj4+ICtncnViX2dldF9oYXNoIChjb25zdCBncnViX3V1aWRfdCAqZ3VpZCwgY29u c3QgZ3J1Yl91aW50OF90ICpkYXRhLCAKPj4gY29uc3QgZ3J1Yl9zaXplX3QgZGF0YV9zaXplLAo+ PiArICAgICAgICAgICAgICAgZ3J1Yl91aW50OF90ICpoYXNoLCBncnViX3NpemVfdCAqaGFzaF9z aXplKQo+PiArewo+PiArICBnY3J5X21kX3NwZWNfdCAqaGFzaF9mdW5jID0gTlVMTDsKPj4gKwo+ PiArICBpZiAoZ3VpZCA9PSBOVUxMKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9PVVRfT0ZfUkFOR0UsICJHVUlEIGlzIG51bGwiKTsKPj4gKwo+PiArICBpZiAoZ3J1Yl9tZW1j bXAgKGd1aWQsICZHUlVCX1BLU19DRVJUX1NIQTI1Nl9HVUlELCBHUlVCX1VVSURfU0laRSkgCj4+ ID09IDAgfHwKPj4gKyAgICAgICAgICAgZ3J1Yl9tZW1jbXAgKGd1aWQsICZHUlVCX1BLU19DRVJU X1g1MDlfU0hBMjU2X0dVSUQsIAo+PiBHUlVCX1VVSURfU0laRSkgPT0gMCkKPj4gKyAgICBoYXNo X2Z1bmMgPSAmX2djcnlfZGlnZXN0X3NwZWNfc2hhMjU2Owo+PiArICBlbHNlIGlmIChncnViX21l bWNtcCAoZ3VpZCwgJkdSVUJfUEtTX0NFUlRfU0hBMzg0X0dVSUQsIAo+PiBHUlVCX1VVSURfU0la RSkgPT0gMCB8fAo+PiArICAgICAgICAgICBncnViX21lbWNtcCAoZ3VpZCwgJkdSVUJfUEtTX0NF UlRfWDUwOV9TSEEzODRfR1VJRCwgCj4+IEdSVUJfVVVJRF9TSVpFKSA9PSAwKQo+PiArICAgIGhh c2hfZnVuYyA9ICZfZ2NyeV9kaWdlc3Rfc3BlY19zaGEzODQ7Cj4+ICsgIGVsc2UgaWYgKGdydWJf bWVtY21wIChndWlkLCAmR1JVQl9QS1NfQ0VSVF9TSEE1MTJfR1VJRCwgCj4+IEdSVUJfVVVJRF9T SVpFKSA9PSAwIHx8Cj4+ICsgICAgICAgICAgIGdydWJfbWVtY21wIChndWlkLCAmR1JVQl9QS1Nf Q0VSVF9YNTA5X1NIQTUxMl9HVUlELCAKPj4gR1JVQl9VVUlEX1NJWkUpID09IDApCj4+ICsgICAg aGFzaF9mdW5jID0gJl9nY3J5X2RpZ2VzdF9zcGVjX3NoYTUxMjsKPj4gKyAgZWxzZQo+PiArICAg IHJldHVybiBHUlVCX0VSUl9VTktOT1dOX0NPTU1BTkQ7Cj4gCj4gcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9SQU5HRSwgIlVuc3VwcG9ydGVkIEdVSUQgZm9yIGhhc2giKQo+IAo+ PiArCj4+ICsgIGdydWJfbWVtc2V0IChoYXNoLCAweDAwLCBHUlVCX01BWF9IQVNIX1NJWkUpOwo+ PiArICBncnViX2NyeXB0b19oYXNoIChoYXNoX2Z1bmMsIGhhc2gsIGRhdGEsIGRhdGFfc2l6ZSk7 Cj4+ICsgICpoYXNoX3NpemUgPSAgaGFzaF9mdW5jLT5tZGxlbjsKPiAKPiBncnViX21lbXNldCho YXNoLCAwLCAqaGFzaF9zaXplKTsKPiAKPj4gKwo+PiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsK Pj4gK30KPj4gKwo+PiArLyogYWRkaW5nIHRoZSBjZXJ0aWZpY2F0ZS9iaW5hcnkgaGFzaCBpbnRv IHRoZSB0cnVzdGVkL2Rpc3RydXN0ZWQgCj4+IGxpc3QgKi8KPiAKPiBBZGQgdGhlIC4uLgo+IAo+ PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJfYWRkX2hhc2ggKGNvbnN0IGdydWJfdWludDhf dCAqKmRhdGEsIGNvbnN0IGdydWJfc2l6ZV90IAo+PiBkYXRhX3NpemUsCj4+ICsgICAgICAgICAg ICAgICBncnViX3VpbnQ4X3QgKioqc2lnbmF0dXJlX2xpc3QsIGdydWJfc2l6ZV90IAo+PiAqKnNp Z25hdHVyZV9zaXplX2xpc3QsCj4+ICsgICAgICAgICAgICAgICBncnViX3NpemVfdCAqc2lnbmF0 dXJlX2xpc3RfZW50cmllcykKPj4gK3sKPj4gKyAgZ3J1Yl91aW50OF90ICoqc2lnbmF0dXJlcyA9 ICpzaWduYXR1cmVfbGlzdDsKPj4gKyAgZ3J1Yl9zaXplX3QgKnNpZ25hdHVyZV9zaXplID0gKnNp Z25hdHVyZV9zaXplX2xpc3Q7Cj4+ICsgIGdydWJfc2l6ZV90IHNpZ25hdHVyZV9lbnRyaWVzID0g KnNpZ25hdHVyZV9saXN0X2VudHJpZXM7Cj4+ICsKPj4gKyAgaWYgKCpkYXRhID09IE5VTEwgfHwg ZGF0YV9zaXplID09IDApCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9P Rl9SQU5HRSwgImNlcnRpZmljYXRlL2JpbmFyeSAKPj4gaGFzaCBkYXRhL3NpemUgaXMgbnVsbCIp Owo+PiArCj4+ICsgIGlmIChzaWduYXR1cmVzID09IE5VTEwgJiYgc2lnbmF0dXJlX3NpemUgPT0g TlVMTCkKPj4gKyAgICB7Cj4+ICsgICAgICBzaWduYXR1cmVzID0gZ3J1Yl96YWxsb2MgKHNpemVv ZiAoZ3J1Yl91aW50OF90ICopKTsKPj4gKyAgICAgIHNpZ25hdHVyZV9zaXplID0gZ3J1Yl96YWxs b2MgKHNpemVvZiAoZ3J1Yl9zaXplX3QpKTsKPj4gKyAgICB9Cj4+ICsgIGVsc2UKPj4gKyAgICB7 Cj4+ICsgICAgICBzaWduYXR1cmVzID0gZ3J1Yl9yZWFsbG9jIChzaWduYXR1cmVzLCBzaXplb2Yg KGdydWJfdWludDhfdCAqKSAKPj4gKiAoc2lnbmF0dXJlX2VudHJpZXMgKyAxKSk7Cj4+ICsgICAg ICBzaWduYXR1cmVfc2l6ZSA9IGdydWJfcmVhbGxvYyAoc2lnbmF0dXJlX3NpemUsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChncnViX3NpemVfdCkgKiAK Pj4gKHNpZ25hdHVyZV9lbnRyaWVzICsgMSkpOwo+PiArICAgIH0KPiAKPiBBbHNvIGluIHRoaXMg Y2FzZSBncnViX3JlYWxsb2MgY2FuIGJlIHVzZWQgZm9yIGZpcnN0IHBhcmFtZXRlciBiZWluZwo+ IE5VTEwgYnV0IG1heSBuZWVkIGEgMm5kIHZhcmlhYmxlIHRvIGhhbmRsZSBhbGxvY2F0aW9uIGZh aWx1cmVzLgo+IAoKSSBob3BlIG5vIG5lZWQgb25lIG1vcmUgdmFyaWFibGUgaGVyZSBiZWNhdXNl IHdlIHVzZWQgcmVmZXJlbmNlIG9mIApzaWduYXR1cmVfbGlzdCBhbmQgc2lnbmF0dXJlX3NpemVf bGlzdApzbywgaXQgd29uJ3QgbWFrZSBhbnkgaW1wYWN0IGhlcmUuCgo+PiArCj4+ICsgIGlmIChz aWduYXR1cmVzID09IE5VTEwgfHwgc2lnbmF0dXJlX3NpemUgPT0gTlVMTCkKPj4gKyAgICB7Cj4+ ICsgICAgICAvKgo+PiArICAgICAgICogYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlIGZyZWVkIGJ5 Cj4+ICsgICAgICAgKiBncnViX3JlbGVhc2VfdHJ1c3RlZF9saXN0L2dydWJfcmVsZWFzZV9kaXN0 cnVzdGVkX2xpc3QKPj4gKyAgICAgICAqLwo+PiArICAgICAgaWYgKHNpZ25hdHVyZXMgIT0gTlVM TCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICpzaWduYXR1cmVfbGlzdCA9IHNpZ25hdHVy ZXM7Cj4+ICsgICAgICAgICAgKnNpZ25hdHVyZV9saXN0X2VudHJpZXMgPSBzaWduYXR1cmVfZW50 cmllcyArIDE7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgaWYgKHNpZ25hdHVyZV9zaXpl ICE9IE5VTEwpCj4+ICsgICAgICAgICpzaWduYXR1cmVfc2l6ZV9saXN0ID0gc2lnbmF0dXJlX3Np emU7Cj4+ICsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLCAib3V0IG9mIG1lbW9yeSIpOwo+PiArICAgIH0KPj4gKwo+PiArICBzaWduYXR1cmVzW3Np Z25hdHVyZV9lbnRyaWVzXSA9IChncnViX3VpbnQ4X3QgKikgKmRhdGE7Cj4+ICsgIHNpZ25hdHVy ZV9zaXplW3NpZ25hdHVyZV9lbnRyaWVzXSA9IGRhdGFfc2l6ZTsKPj4gKyAgc2lnbmF0dXJlX2Vu dHJpZXMrKzsKPj4gKyAgKmRhdGEgPSBOVUxMOwo+PiArCj4+ICsgICpzaWduYXR1cmVfbGlzdCA9 IHNpZ25hdHVyZXM7Cj4+ICsgICpzaWduYXR1cmVfc2l6ZV9saXN0ID0gc2lnbmF0dXJlX3NpemU7 Cj4+ICsgICpzaWduYXR1cmVfbGlzdF9lbnRyaWVzID0gc2lnbmF0dXJlX2VudHJpZXM7Cj4+ICsK Pj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vy cl90Cj4+ICtncnViX2lzX3g1MDkgKGNvbnN0IGdydWJfdXVpZF90ICpndWlkKQo+IAo+IFJldHVy biBpbnQgbGlrZSBtYW55IG90aGVyICpfaXNfeHl6IGZ1bmN0aW9ucyBkbyA/Cj4gCj4+ICt7Cj4+ ICsgIGlmIChncnViX21lbWNtcCAoZ3VpZCwgJkdSVUJfUEtTX0NFUlRfWDUwOV9HVUlELCBHUlVC X1VVSURfU0laRSkgPT0gCj4+IDApCj4+ICsgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICsK Pj4gKyAgcmV0dXJuIEdSVUJfRVJSX1VOS05PV05fQ09NTUFORDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGdydWJfZXJyX3QKPj4gK2dydWJfaXNfY2VydF9tYXRjaCAoY29uc3Qgc3RydWN0IHg1MDlf Y2VydGlmaWNhdGUgKmRpc3RydXN0ZWRfY2VydCwKPj4gKyAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmRiX2NlcnQpCj4gCj4gUmV0dXJuIGludCA/Cj4g Cj4+ICt7Cj4+ICsKPj4gKyAgaWYgKGdydWJfbWVtY21wIChkaXN0cnVzdGVkX2NlcnQtPnN1Ympl Y3QsIGRiX2NlcnQtPnN1YmplY3QsIAo+PiBkYl9jZXJ0LT5zdWJqZWN0X2xlbikgPT0gMAo+PiAr ICAgICAgJiYgZ3J1Yl9tZW1jbXAgKGRpc3RydXN0ZWRfY2VydC0+c2VyaWFsLCBkYl9jZXJ0LT5z ZXJpYWwsIAo+PiBkYl9jZXJ0LT5zZXJpYWxfbGVuKSA9PSAwCj4+ICsgICAgICAmJiBncnViX21l bWNtcCAoZGlzdHJ1c3RlZF9jZXJ0LT5tcGlzWzBdLCBkYl9jZXJ0LT5tcGlzWzBdLCAKPj4gc2l6 ZW9mIChkYl9jZXJ0LT5tcGlzWzBdKSkgPT0gMAo+PiArICAgICAgJiYgZ3J1Yl9tZW1jbXAgKGRp c3RydXN0ZWRfY2VydC0+bXBpc1sxXSwgZGJfY2VydC0+bXBpc1sxXSwgCj4+IHNpemVvZiAoZGJf Y2VydC0+bXBpc1sxXSkpID09IDApCj4+ICsgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICsK Pj4gKyAgcmV0dXJuIEdSVUJfRVJSX1VOS05PV05fQ09NTUFORDsKPj4gK30KPj4gKwo+PiArLyoK Pj4gKyAqIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgYWdhaW5zdCB0aGUgY2VydGlmaWNhdGUgZnJv bSBwbGF0Zm9ybSAKPj4ga2V5c3RvcmUgYnVmZmVyJ3MKPiAKPiBWZXJpZnkgLS0gY2FwaXRhbGl6 ZSBldmVyeXdoZXJlLgo+IAo+PiArICogZGlzdHJ1c3RlZCBsaXN0LCBpZiBpdCBpcyBwcmVzZW50 LCByZXR1cm4gYSBiYWQgc2lnbmF0dXJlLgo+IAo+IFlvdSB3b24ndCBjb25zdHJ1Y3QgYSBiYWQg c2lnbnR1cmUgYnV0IHlvdSByZXR1cm4gCj4gR1JVQl9FUlJfQkFEX1NJR05BVFVSRS4KPiAKPj4g KyAqIGVsc2UsIG5vIGVycm9ycy4KPiAKPiBPdGhlcndpc2Ugbm8gZXJyb3IgaXMgcmV0dXJuZWQu IC0tIG9yIG9taXQgZW50aXJlbHkuIEFsc28gaW4gb3RoZXIgCj4gY2FzZXMuCj4gCj4gSXQgbG9v a3MgbGlrZSBpdCBjYW4gcmV0dXJuIEdSVUJfRVJSX09VVF9PRl9NRU1PUlkgYXMgd2VsbC4KPiAK PiAKPj4gKyAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJfaXNfZGlzdHJ1c3RlZF9j ZXJ0IChjb25zdCBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqZGJfY2VydCkKPiAKPiBTbyB0aGlz IG9uZSBoZXJlIGNhbiBoYXZlIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIHNob3VsZCByZXR1cm4K PiBncnViX2Vycl90IGJ1dCBjYWxscyB0aGUgb3RoZXIgdHdvIHdpdGhvdXQgcHJvcGFnYXRpbmcg dGhlaXIgZXJyb3JzLgo+IAo+PiArewo+PiArICBncnViX2Vycl90IHJjID0gR1JVQl9FUlJfTk9O RTsKPj4gKyAgZ3J1Yl9zaXplX3QgaSA9IDA7Cj4+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRl ICpkaXN0cnVzdGVkX2NlcnQgPSBOVUxMOwo+PiArCj4+ICsgIGZvciAoaSA9IDA7IGkgPCBncnVi X3BsYXRmb3JtX2tleXN0b3JlLmRieF9lbnRyaWVzOyBpKyspCj4+ICsgICAgewo+PiArICAgICAg aWYgKGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLmRhdGEgPT0gTlVMTCAmJgo+IAo+IAo+ IHNob3VsZCBiZSBhICd8fCcgb3Igc2ltcGx5IHJlbW92ZSBkYXRhX3NpemUgPT0gMCBjaGVjaz8K PiAKPj4gKyAgICAgICAgICBncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieFtpXS5kYXRhX3NpemUg PT0gMCkKPj4gKyAgICAgICAgY29udGludWU7Cj4+ICsKPj4gKyAgICAgIGlmIChncnViX2lzX3g1 MDkgKCZncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieFtpXS5ndWlkKSA9PSAKPj4gR1JVQl9FUlJf Tk9ORSkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGRpc3RydXN0ZWRfY2VydCA9IGdydWJf emFsbG9jIChzaXplb2YgKHN0cnVjdCAKPj4geDUwOV9jZXJ0aWZpY2F0ZSkpOwo+PiArICAgICAg ICAgIGlmIChkaXN0cnVzdGVkX2NlcnQgPT0gTlVMTCkKPj4gKyAgICAgICAgICAgIHJldHVybiBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAib3V0IG9mIAo+PiBtZW1vcnkiKTsK Pj4gKwo+PiArICAgICAgICAgIHJjID0gcGFyc2VfeDUwOV9jZXJ0aWZpY2F0ZSAKPj4gKGdydWJf cGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLmRhdGEsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKPj4gZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0uZGF0YV9z aXplLCBkaXN0cnVzdGVkX2NlcnQpOwo+PiArICAgICAgICAgIGlmIChyYyAhPSBHUlVCX0VSUl9O T05FKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICBncnViX2ZyZWUgKGRpc3Ry dXN0ZWRfY2VydCk7Cj4+ICsgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArICAgICAgICAgICAg fQo+PiArCj4+ICsgICAgICAgICAgaWYgKGdydWJfaXNfY2VydF9tYXRjaCAoZGlzdHJ1c3RlZF9j ZXJ0LCBkYl9jZXJ0KSA9PSAKPj4gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICAgICAgICAgIHsKPj4g KyAgICAgICAgICAgICAgZ3J1Yl9wcmludGYgKCJXYXJuaW5nOiBhIHRydXN0ZWQgY2VydGlmaWNh dGUgQ049JyVzJyBpcyAKPj4gaWdub3JlZCAiCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAiYmVjYXVzZSBpdCBpcyBvbiB0aGUgZGlzdHJ1c3RlZCBsaXN0IAo+PiAoZGJ4KS5cbiIsIGRi X2NlcnQtPnN1YmplY3QpOwo+PiArICAgICAgICAgICAgICBncnViX2ZyZWUgKGdydWJfcGxhdGZv cm1fa2V5c3RvcmUuZGJ4W2ldLmRhdGEpOwo+PiArICAgICAgICAgICAgICBncnViX21lbXNldCAo JmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLCAweDAwLCAKPj4gc2l6ZW9mIChncnViX3Br c19zZF90KSk7Cj4gCj4gcy8weDAwLzAKPiAKPj4gKyAgICAgICAgICAgICAgY2VydGlmaWNhdGVf cmVsZWFzZSAoZGlzdHJ1c3RlZF9jZXJ0KTsKPj4gKyAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChk aXN0cnVzdGVkX2NlcnQpOwo+PiArICAgICAgICAgICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX1NJ R05BVFVSRTsKPj4gKyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgIGNlcnRpZmljYXRl X3JlbGVhc2UgKGRpc3RydXN0ZWRfY2VydCk7Cj4+ICsgICAgICAgICAgZ3J1Yl9mcmVlIChkaXN0 cnVzdGVkX2NlcnQpOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJldHVybiBH UlVCX0VSUl9OT05FOwo+PiArfQo+PiArCj4+ICsvKiBhZGRpbmcgdGhlIGNlcnRpZmljYXRlIGlu dG8gdGhlIHRydXN0ZWQvZGlzdHJ1c3RlZCBsaXN0ICovCj4gCj4gQWRkIHRoZSAuLgo+IAo+PiAr c3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJfYWRkX2NlcnRpZmljYXRlIChjb25zdCBncnViX3Vp bnQ4X3QgKmRhdGEsIGNvbnN0IGdydWJfc2l6ZV90IAo+PiBkYXRhX3NpemUsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGdydWJfZGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCAKPj4g Z3J1Yl9zaXplX3QgaXNfZGIpCj4+ICt7Cj4+ICsgIGdydWJfZXJyX3QgcmMgPSBHUlVCX0VSUl9O T05FOwo+PiArICBncnViX3NpemVfdCBrZXlfZW50cmllcyA9IGRhdGFiYXNlLT5rZXlfZW50cmll czsKPj4gKyAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQgPSBOVUxMOwo+PiArCj4+ICsg IGlmIChkYXRhID09IE5VTEwgfHwgZGF0YV9zaXplID09IDApCj4+ICsgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwgImNlcnRpZmljYXRlIGRhdGEvc2l6ZSAKPj4g aXMgbnVsbCIpOwo+PiArCj4+ICsgIGNlcnQgPSBncnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qg eDUwOV9jZXJ0aWZpY2F0ZSkpOwo+PiArICBpZiAoY2VydCA9PSBOVUxMKQo+PiArICAgIHJldHVy biBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAib3V0IG9mIG1lbW9yeSIpOwo+ PiArCj4+ICsgIHJjID0gcGFyc2VfeDUwOV9jZXJ0aWZpY2F0ZSAoZGF0YSwgZGF0YV9zaXplLCBj ZXJ0KTsKPj4gKyAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgewo+PiArICAgICAg Z3J1Yl9wcmludGYgKCJXYXJuaW5nOiBza2lwcGluZyAlcyBjZXJ0aWZpY2F0ZSAoJWQpXG4iLAo+ PiArICAgICAgICAgICAgICAgICAgIChpc19kYiA/ICJ0cnVzdGVkIjoiZGlzdHJ1c2VkIiksIHJj KTsKPj4gKyAgICAgIGdydWJfZnJlZSAoY2VydCk7Cj4+ICsgICAgICByZXR1cm4gcmM7Cj4+ICsg ICAgfQo+PiArCj4+ICsgIGlmIChpc19kYikKPj4gKyAgICB7Cj4+ICsgICAgICByYyA9IGdydWJf aXNfZGlzdHJ1c3RlZF9jZXJ0IChjZXJ0KTsKPj4gKyAgICAgIGlmIChyYyAhPSBHUlVCX0VSUl9O T05FKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgY2VydGlmaWNhdGVfcmVsZWFzZSAoY2Vy dCk7Cj4+ICsgICAgICAgICAgZ3J1Yl9mcmVlIChjZXJ0KTsKPj4gKyAgICAgICAgICByZXR1cm4g cmM7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgiYXBw ZW5kZWRzaWciLCAiYWRkIGEgJXMgY2VydGlmaWNhdGUgQ049JyVzJ1xuIiwKPj4gKyAgICAgICAg ICAgICAgICAoaXNfZGIgPyAidHJ1c3RlZCI6ImRpc3RydXNlZCIpLCBjZXJ0LT5zdWJqZWN0KTsK PiAKPiBkaXN0cnVzdGVkCj4gCj4+ICsKPj4gKyAga2V5X2VudHJpZXMrKzsKPj4gKyAgY2VydC0+ bmV4dCA9IGRhdGFiYXNlLT5rZXlzOwo+PiArICBkYXRhYmFzZS0+a2V5cyA9IGNlcnQ7Cj4+ICsg IGRhdGFiYXNlLT5rZXlfZW50cmllcyA9IGtleV9lbnRyaWVzOwo+PiArCj4+ICsgIHJldHVybiBy YzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJfcmVhZF9maWxlIChj b25zdCBncnViX2ZpbGVfdCBmaWxlLCBncnViX3VpbnQ4X3QgKipkYXRhLCAKPj4gZ3J1Yl9zc2l6 ZV90ICpkYXRhX3NpemUpCj4gCj4gVGhpcyBmdW5jdGlvbiBzb3VuZHMgc28gZ2VuZXJpYyB0aGF0 IGl0IGNvdWxkIGJlIHVzZWQgaW4gb3RoZXIgcGxhY2VzCj4gYXMgd2VsbC4gSXQgd291bGQgd2Ug Z29vb2QgdG8gbW92ZSBpdCB0byB0aGUgc2FtZSBmaWxlIGFzCj4gZ3J1Yl9maWxlX3JlYWQuCj4g Cj4+ICt7Cj4+ICsgIGdydWJfdWludDhfdCAqYnVmZmVyID0gTlVMTDsKPj4gKyAgZ3J1Yl9zc2l6 ZV90IHJlYWRfc2l6ZSA9IDA7Cj4+ICsgIGdydWJfb2ZmX3QgdG90YWxfcmVhZF9zaXplID0gMDsK Pj4gKyAgZ3J1Yl9vZmZfdCBmaWxlX3NpemUgPSBncnViX2ZpbGVfc2l6ZSAoZmlsZSk7Cj4+ICsK Pj4gKyAgaWYgKGZpbGVfc2l6ZSA9PSBHUlVCX0ZJTEVfU0laRV9VTktOT1dOKQo+PiArICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIE5fKCJjb3VsZCBub3QgcGFyc2UgdGhlIHVua25vd24gc2l6ZSBvZiB0aGUgCj4+ IGZpbGUuIikpOwo+IAo+IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGZpbGUK PiAKPj4gKwo+PiArICBidWZmZXIgPSBncnViX3phbGxvYyAoZmlsZV9zaXplKTsKPj4gKyAgaWYg KGJ1ZmZlciA9PSBOVUxMKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRf T0ZfTUVNT1JZLCBOXygib3V0IG9mIG1lbW9yeSIpKTsKPj4gKwo+PiArICB3aGlsZSAodG90YWxf cmVhZF9zaXplIDwgZmlsZV9zaXplKQo+PiArICAgIHsKPj4gKyAgICAgIHJlYWRfc2l6ZSA9IGdy dWJfZmlsZV9yZWFkIChmaWxlLCAmYnVmZmVyW3RvdGFsX3JlYWRfc2l6ZV0sIAo+PiBmaWxlX3Np emUgLSB0b3RhbF9yZWFkX3NpemUpOwo+PiArICAgICAgaWYgKHJlYWRfc2l6ZSA8IDApCj4+ICsg ICAgICAgIHsKPj4gKyAgICAgICAgICBncnViX2ZyZWUgKGJ1ZmZlcik7Cj4+ICsgICAgICAgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX1JFQURfRVJST1IsIE5fKCJ1bmFibGUgdG8gcmVh ZCAKPj4gdGhlIGZpbGUiKSk7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgdG90YWxfcmVh ZF9zaXplICs9IHJlYWRfc2l6ZTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgKmRhdGEgPSBidWZmZXI7 Cj4+ICsgICpkYXRhX3NpemUgPSB0b3RhbF9yZWFkX3NpemU7Cj4+ICsKPj4gKyAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cj4+ICt9Cj4+ICsKPj4gICBzdGF0aWMgY29uc3QgY2hhciAqCj4+ICAgZ3J1 Yl9lbnZfcmVhZF9zZWMgKHN0cnVjdCBncnViX2Vudl92YXIgKnZhciBfX2F0dHJpYnV0ZV9fIAo+ PiAoKHVudXNlZCkpLAo+PiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWwgX19h dHRyaWJ1dGVfXyAoKHVudXNlZCkpKQo+PiBAQCAtMjQ4LDcgKzUxMSw3IEBAIGdydWJfdmVyaWZ5 X2FwcGVuZGVkX3NpZ25hdHVyZSAoY29uc3QgZ3J1Yl91aW50OF90IAo+PiAqYnVmLCBncnViX3Np emVfdCBidWZzaXplKQo+PiAgICAgc3RydWN0IHBrY3M3X3NpZ25lckluZm8gKnNpOwo+PiAgICAg aW50IGk7Cj4+ICAgLSAgaWYgKCFncnViX3RydXN0ZWRfa2V5KQo+PiArICBpZiAoIWdydWJfZGIu a2V5X2VudHJpZXMpCj4+ICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lH TkFUVVJFLCBOXygiTm8gdHJ1c3RlZCBrZXlzIAo+PiB0byB2ZXJpZnkgYWdhaW5zdCIpKTsKPj4g ICAgICAgZXJyID0gZXh0cmFjdF9hcHBlbmRlZF9zaWduYXR1cmUgKGJ1ZiwgYnVmc2l6ZSwgJnNp Zyk7Cj4+IEBAIC0yNzksNyArNTQyLDcgQEAgZ3J1Yl92ZXJpZnlfYXBwZW5kZWRfc2lnbmF0dXJl IChjb25zdCBncnViX3VpbnQ4X3QgCj4+ICpidWYsIGdydWJfc2l6ZV90IGJ1ZnNpemUpCj4+ICAg ICAgICAgICAgICAgICAgICAgICBkYXRhc2l6ZSwgaSwgaGFzaFswXSwgaGFzaFsxXSwgaGFzaFsy XSwgCj4+IGhhc2hbM10pOwo+PiAgICAgICAgICAgZXJyID0gR1JVQl9FUlJfQkFEX1NJR05BVFVS RTsKPj4gLSAgICAgIGZvciAocGsgPSBncnViX3RydXN0ZWRfa2V5OyBwazsgcGsgPSBway0+bmV4 dCkKPj4gKyAgICAgIGZvciAocGsgPSBncnViX2RiLmtleXM7IHBrOyBwayA9IHBrLT5uZXh0KQo+ PiAgICAgICAgICAgewo+PiAgICAgICAgICAgICByYyA9IGdydWJfY3J5cHRvX3JzYV9wYWQgKCZo YXNobXBpLCBoYXNoLCBzaS0+aGFzaCwgCj4+IHBrLT5tcGlzWzBdKTsKPj4gICAgICAgICAgICAg aWYgKHJjKQo+PiBAQCAtMzc2LDE2ICs2MzksMTYgQEAgZ3J1Yl9jbWRfZGlzdHJ1c3QgKGdydWJf Y29tbWFuZF90IGNtZCAKPj4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgYXJnYywgY2hh ciAqCj4+ICAgICAgIGlmIChjZXJ0X251bSA9PSAxKQo+PiAgICAgICB7Cj4+IC0gICAgICBjZXJ0 ID0gZ3J1Yl90cnVzdGVkX2tleTsKPj4gLSAgICAgIGdydWJfdHJ1c3RlZF9rZXkgPSBjZXJ0LT5u ZXh0Owo+PiArICAgICAgY2VydCA9IGdydWJfZGIua2V5czsKPj4gKyAgICAgIGdydWJfZGIua2V5 cyA9IGNlcnQtPm5leHQ7Cj4+ICAgICAgICAgICBjZXJ0aWZpY2F0ZV9yZWxlYXNlIChjZXJ0KTsK Pj4gICAgICAgICBncnViX2ZyZWUgKGNlcnQpOwo+PiAgICAgICAgIHJldHVybiBHUlVCX0VSUl9O T05FOwo+PiAgICAgICB9Cj4+ICAgICBpID0gMjsKPj4gLSAgcHJldiA9IGdydWJfdHJ1c3RlZF9r ZXk7Cj4+IC0gIGNlcnQgPSBncnViX3RydXN0ZWRfa2V5LT5uZXh0Owo+PiArICBwcmV2ID0gZ3J1 Yl9kYi5rZXlzOwo+PiArICBjZXJ0ID0gZ3J1Yl9kYi5rZXlzLT5uZXh0Owo+PiAgICAgd2hpbGUg KGNlcnQpCj4+ICAgICAgIHsKPj4gICAgICAgICBpZiAoaSA9PSBjZXJ0X251bSkKPj4gQEAgLTQz Miw4ICs2OTUsOCBAQCBncnViX2NtZF90cnVzdCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmli dXRlX18gCj4+ICgodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoqYXIKPj4gICAgICAgfQo+PiAg ICAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAiTG9hZGVkIGNlcnRpZmljYXRlIHdpdGgg Q046ICVzXG4iLCAKPj4gY2VydC0+c3ViamVjdCk7Cj4+ICAgLSAgY2VydC0+bmV4dCA9IGdydWJf dHJ1c3RlZF9rZXk7Cj4+IC0gIGdydWJfdHJ1c3RlZF9rZXkgPSBjZXJ0Owo+PiArICBjZXJ0LT5u ZXh0ID0gZ3J1Yl9kYi5rZXlzOwo+PiArICBncnViX2RiLmtleXMgPSBjZXJ0Owo+PiAgICAgICBy ZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gICB9Cj4+IEBAIC00NDYsNyArNzA5LDcgQEAgZ3J1Yl9j bWRfbGlzdCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18gCj4+ICgodW51c2VkKSks IGludCBhcmdjIF9fYXR0cmlidXRlCj4+ICAgICBpbnQgY2VydF9udW0gPSAxOwo+PiAgICAgZ3J1 Yl9zaXplX3QgaTsKPj4gICAtICBmb3IgKGNlcnQgPSBncnViX3RydXN0ZWRfa2V5OyBjZXJ0OyBj ZXJ0ID0gY2VydC0+bmV4dCkKPj4gKyAgZm9yIChjZXJ0ID0gZ3J1Yl9kYi5rZXlzOyBjZXJ0OyBj ZXJ0ID0gY2VydC0+bmV4dCkKPj4gICAgICAgewo+PiAgICAgICAgIGdydWJfcHJpbnRmIChOXygi Q2VydGlmaWNhdGUgJWQ6XG4iKSwgY2VydF9udW0pOwo+PiAgIEBAIC01MzksNiArODAyLDI4MCBA QCBzdGF0aWMgc3RydWN0IGdydWJfZnMgcHNldWRvX2ZzID0geyAubmFtZSA9IAo+PiAicHNldWRv IiwgLmZzX3JlYWQgPSBwc2V1ZG9fcmVhZCB9Owo+PiAgICAgc3RhdGljIGdydWJfY29tbWFuZF90 IGNtZF92ZXJpZnksIGNtZF9saXN0LCBjbWRfZGlzdHJ1c3QsIAo+PiBjbWRfdHJ1c3Q7Cj4+ICAg Ky8qCj4+ICsgKiB2ZXJpZnkgdGhlIHRydXN0ZWQgY2VydGlmaWNhdGUgYWdhaW5zdCB0aGUgY2Vy dGlmaWNhdGUgaGFzaGVzIGZyb20gCj4+IHBsYXRmb3JtIGtleXN0b3JlIGJ1ZmZlcidzCj4gCj4g VmVyaWZ5Cj4gCj4+ICsgKiBkaXN0cnVzdGVkIGxpc3QsIGlmIGl0IGlzIHByZXNlbnQsIHJldHVy biBhIGJhZCBzaWduYXR1cmUuCj4gCj4gU2FtZSBjb21tZW50cyBhcyBhYm92ZS4KPiAKPj4gKyAq IGVsc2UsIG5vIGVycm9ycy4KPiAKPiAKPj4gKyAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4g K2dydWJfaXNfZGlzdHJ1c3RlZF9jZXJ0X2hhc2ggKGNvbnN0IGdydWJfdWludDhfdCAqZGF0YSwg Y29uc3QgCj4+IGdydWJfc2l6ZV90IGRhdGFfc2l6ZSkKPj4gK3sKPj4gKyAgZ3J1Yl9lcnJfdCBy YyA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgIGdydWJfc2l6ZV90IGkgPSAwLCBjZXJ0X2hhc2hfc2l6 ZSA9IDA7Cj4+ICsgIGdydWJfdWludDhfdCBjZXJ0X2hhc2hbR1JVQl9NQVhfSEFTSF9TSVpFXSA9 IHsgMCB9Owo+PiArCj4+ICsgIGlmIChkYXRhID09IE5VTEwgfHwgZGF0YV9zaXplID09IDApCj4+ ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwgInRydXN0ZWQg Y2VydGlmaWNhdGUgCj4+IGRhdGEvc2l6ZSBpcyBudWxsIik7Cj4+ICsKPj4gKyAgZm9yIChpID0g MDsgaSA8IGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4X2VudHJpZXM7IGkrKykKPj4gKyAgICB7 Cj4+ICsgICAgICBpZiAoZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0uZGF0YSA9PSBOVUxM ICYmCj4gCj4gJ3x8JyA/Cj4gCj4+ICsgICAgICAgICAgZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5k YnhbaV0uZGF0YV9zaXplID09IDApCj4+ICsgICAgICAgIGNvbnRpbnVlOwo+PiArCj4+ICsgICAg ICByYyA9IGdydWJfZ2V0X2hhc2ggKCZncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieFtpXS5ndWlk LCBkYXRhLCAKPj4gZGF0YV9zaXplLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0 X2hhc2gsICZjZXJ0X2hhc2hfc2l6ZSk7Cj4+ICsgICAgICBpZiAocmMgIT0gR1JVQl9FUlJfTk9O RSkKPj4gKyAgICAgICAgY29udGludWU7Cj4+ICsKPj4gKyAgICAgIGlmIChjZXJ0X2hhc2hfc2l6 ZSA9PSBncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieFtpXS5kYXRhX3NpemUgCj4+ICYmCj4+ICsg ICAgICAgICAgZ3J1Yl9tZW1jbXAgKGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLmRhdGEs IGNlcnRfaGFzaCwgCj4+IGNlcnRfaGFzaF9zaXplKSA9PSAwKQo+PiArICAgICAgICB7Cj4+ICsg ICAgICAgICAgZ3J1Yl9wcmludGYgKCJXYXJuaW5nOiBhIHRydXN0ZWQgY2VydGlmaWNhdGUgCj4+ ICglMDJ4JTAyeCUwMnglMDJ4KSBpcyBpZ25vcmVkICIKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgImJlY2F1c2UgdGhpcyBjZXJ0aWZpY2F0ZSBoYXNoIGlzIG9uIHRoZSAKPj4gZGlzdHJ1c3Rl ZCBsaXN0IChkYngpLlxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY2VydF9oYXNoWzBd LCBjZXJ0X2hhc2hbMV0sIGNlcnRfaGFzaFsyXSwgCj4+IGNlcnRfaGFzaFszXSk7Cj4+ICsgICAg ICAgICAgZ3J1Yl9mcmVlIChncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieFtpXS5kYXRhKTsKPj4g KyAgICAgICAgICBncnViX21lbXNldCAoJmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLCAw eDAwLCBzaXplb2YgCj4+IChncnViX3Brc19zZF90KSk7Cj4gCj4gcy8weDAwLzAKPiAKPiBzaXpl b2YoZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0pIC0tIHNvIHdlIGRvbid0IG5lZWQgdG8g a25vdyB0aGUKPiB0eXBlIG9mIHRoaXMgYXJyYXkKPiAKPj4gKyAgICAgICAgICByZXR1cm4gR1JV Ql9FUlJfQkFEX1NJR05BVFVSRTsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICBy ZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIHZlcmlmeSB0aGUg dHJ1c3RlZCBiaW5hcnkgaGFzaCBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSBrZXlzdG9yZSAKPj4gYnVm ZmVyJ3MKPiAKPiBWZXJpZnkuCj4gCj4+ICsgKiBkaXN0cnVzdGVkIGxpc3QsIGlmIGl0IGlzIHBy ZXNlbnQsIHJldHVybiBhIGJhZCBzaWduYXR1cmUuCj4gCj4gU2FtZSBjb21tZW50cyBhcyBhYm92 ZS4KPiAKPj4gKyAqIGVsc2UsIG5vIGVycm9ycy4KPj4gKyAqLwo+PiArc3RhdGljIGdydWJfZXJy X3QKPj4gK2dydWJfaXNfZGlzdHJ1c3RlZF9iaW5hcnlfaGFzaCAoY29uc3QgZ3J1Yl91aW50OF90 ICpiaW5hcnlfaGFzaCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Z3J1Yl9zaXplX3QgYmluYXJ5X2hhc2hfc2l6ZSkKPj4gK3sKPj4gKyAgZ3J1Yl9zaXplX3QgaSA9 IDA7Cj4+ICsKPj4gKyAgZm9yIChpID0gMDsgaSA8IGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4 X2VudHJpZXM7IGkrKykKPj4gKyAgICB7Cj4+ICsgICAgICBpZiAoZ3J1Yl9wbGF0Zm9ybV9rZXlz dG9yZS5kYnhbaV0uZGF0YSA9PSBOVUxMICYmCj4gCj4gJ3x8JyA/Cj4gCj4+ICsgICAgICAgICAg Z3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0uZGF0YV9zaXplID09IDApCj4+ICsgICAgICAg IGNvbnRpbnVlOwo+PiArCj4+ICsgICAgICBpZiAoYmluYXJ5X2hhc2hfc2l6ZSA9PSBncnViX3Bs YXRmb3JtX2tleXN0b3JlLmRieFtpXS5kYXRhX3NpemUgCj4+ICYmCj4+ICsgICAgICAgICAgZ3J1 Yl9tZW1jbXAgKGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLmRhdGEsIAo+PiBiaW5hcnlf aGFzaCwgYmluYXJ5X2hhc2hfc2l6ZSkgPT0gMCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAg IGdydWJfcHJpbnRmICgiV2FybmluZzogYSB0cnVzdGVkIGJpbmFyeSBoYXNoIAo+PiAoJTAyeCUw MnglMDJ4JTAyeCkgaXMgaWdub3JlZCIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIiBiZWNh dXNlIGl0IGlzIG9uIHRoZSBkaXN0cnVzdGVkIGxpc3QgCj4+IChkYngpLlxuIiwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgYmluYXJ5X2hhc2hbMF0sIGJpbmFyeV9oYXNoWzFdLCAKPj4gYmlu YXJ5X2hhc2hbMl0sIGJpbmFyeV9oYXNoWzNdKTsKPj4gKyAgICAgICAgICBncnViX2ZyZWUgKGdy dWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLmRhdGEpOwo+PiArICAgICAgICAgIGdydWJfbWVt c2V0ICgmZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0sIDB4MDAsIHNpemVvZiAKPj4gKGdy dWJfcGtzX3NkX3QpKTsKPiAKPiBzYW1lIGNvbW1lbnRzIGFzIGFib3ZlCj4gCj4+ICsgICAgICAg ICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9TSUdOQVRVUkU7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9 Cj4+ICsKPj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsg KiBleHRyYWN0cyB0aGUgYmluYXJ5IGhhc2hlcyBmcm9tIHRoZSBwbGF0Zm9ybSBrZXlzdG9yZSBi dWZmZXIsCj4gCj4gRXh0cmFjdCB0aGUgLi4uCj4gCj4+ICsgKiBhbmQgYWRkcyBpdCB0byB0aGUg dHJ1c3RlZCBsaXN0IGlmIG5vdCBleGlzdHMgaW4gZGlzdHJ1c3RlZCBsaXN0Lgo+IAo+IGFuZCBh ZGQgaXQgLi4gaWYgaXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRpc3RydXN0ZWQgbGlzdC4KPiAK Pj4gKyAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2dydWJfYWRkX3RydXN0ZWRfYmluYXJ5 X2hhc2ggKGNvbnN0IGdydWJfdWludDhfdCAqKmRhdGEsIGNvbnN0IAo+PiBncnViX3NpemVfdCBk YXRhX3NpemUpCj4+ICt7Cj4+ICsgIGdydWJfZXJyX3QgcmMgPSBHUlVCX0VSUl9OT05FOwo+PiAr Cj4+ICsgIGlmICgqZGF0YSA9PSBOVUxMIHx8IGRhdGFfc2l6ZSA9PSAwKQo+IAo+IEhlcmUgeW91 IGhhdmUgdGhlICd8fCcuLi4KPiAKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf T1VUX09GX1JBTkdFLCAidHJ1c3RlZCBiaW5hcnkgaGFzaCAKPj4gZGF0YS9zaXplIGlzIG51bGwi KTsKPj4gKwo+PiArICByYyA9IGdydWJfaXNfZGlzdHJ1c3RlZF9iaW5hcnlfaGFzaCAoKmRhdGEs IGRhdGFfc2l6ZSk7Cj4+ICsgIGlmIChyYyAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgIHJldHVy biByYzsKPj4gKwo+PiArICByYyA9IGdydWJfYWRkX2hhc2ggKGRhdGEsIGRhdGFfc2l6ZSwgJmdy dWJfZGIuc2lnbmF0dXJlcywgCj4+ICZncnViX2RiLnNpZ25hdHVyZV9zaXplLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICZncnViX2RiLnNpZ25hdHVyZV9lbnRyaWVzKTsKPj4gKyAgcmV0dXJu IHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl9pc19oYXNoIChj b25zdCBncnViX3V1aWRfdCAqZ3VpZCkKPiAKPiBTYW1lIGNvbW1lbnRzIGFzIHdpdGggb3RoZXIg ZnVuY3Rpb25zIGFzIGFib3ZlLgo+IAo+PiArewo+PiArICAvKiBHVUlEIHR5cGUgb2YgdGhlIGJp bmFyeSBoYXNoICovCj4+ICsgIGlmIChncnViX21lbWNtcCAoZ3VpZCwgJkdSVUJfUEtTX0NFUlRf U0hBMjU2X0dVSUQsIEdSVUJfVVVJRF9TSVpFKSAKPj4gPT0gMCB8fAo+PiArICAgICAgZ3J1Yl9t ZW1jbXAgKGd1aWQsICZHUlVCX1BLU19DRVJUX1NIQTM4NF9HVUlELCBHUlVCX1VVSURfU0laRSkg Cj4+ID09IDAgfHwKPj4gKyAgICAgIGdydWJfbWVtY21wIChndWlkLCAmR1JVQl9QS1NfQ0VSVF9T SEE1MTJfR1VJRCwgR1JVQl9VVUlEX1NJWkUpIAo+PiA9PSAwKQo+PiArICAgIHJldHVybiBHUlVC X0VSUl9OT05FOwo+PiArCj4+ICsgIC8qIEdVSUQgdHlwZSBvZiB0aGUgY2VydGlmaWNhdGUgaGFz aCAqLwo+PiArICBpZiAoZ3J1Yl9tZW1jbXAgKGd1aWQsICZHUlVCX1BLU19DRVJUX1g1MDlfU0hB MjU2X0dVSUQsIAo+PiBHUlVCX1VVSURfU0laRSkgPT0gMCB8fAo+PiArICAgICAgZ3J1Yl9tZW1j bXAgKGd1aWQsICZHUlVCX1BLU19DRVJUX1g1MDlfU0hBMzg0X0dVSUQsIAo+PiBHUlVCX1VVSURf U0laRSkgPT0gMCB8fAo+PiArICAgICAgZ3J1Yl9tZW1jbXAgKGd1aWQsICZHUlVCX1BLU19DRVJU X1g1MDlfU0hBNTEyX0dVSUQsIAo+PiBHUlVCX1VVSURfU0laRSkgPT0gMCkKPj4gKyAgICByZXR1 cm4gR1JVQl9FUlJfTk9ORTsKPj4gKwo+PiArICByZXR1cm4gR1JVQl9FUlJfVU5LTk9XTl9DT01N QU5EOwo+PiArfQo+PiArCj4+ICsvKj4gKyAqIGV4dHJhY3RzIHRoZSB4NTA5IGNlcnRpZmljYXRl cy9iaW5hcnkgaGFzaGVzIGZyb20gdGhlIAo+PiBwbGF0Zm9ybSBrZXlzdG9yZSBidWZmZXIsCj4g Cj4gRXh0cmFjdCB0aGUgeDUwOS4uLgo+IAo+PiArICogcGFyc2VzIGl0LCBhbmQgYWRkcyBpdCB0 byB0aGUgdHJ1c3RlZCBsaXN0Lgo+IAo+IHBhcnNlIGl0LCBhbmQgYWRkIGl0IHRvIHRoZSB0cnVz dGVkIGxpc3QuCj4gCj4+ICsgKi8KPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtncnViX2NyZWF0 ZV90cnVzdGVkX2xpc3QgKHZvaWQpCj4+ICt7Cj4+ICsgIGdydWJfZXJyX3QgcmMgPSBHUlVCX0VS Ul9OT05FOwo+PiArICBncnViX3NpemVfdCBpID0gMDsKPj4gKwo+PiArICBmb3IgKGkgPSAwOyBp IDwgZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYl9lbnRyaWVzOyBpKyspCj4+ICsgICAgewo+PiAr ICAgICAgaWYgKGdydWJfaXNfaGFzaCAoJmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJbaV0uZ3Vp ZCkgPT0gCj4+IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICByYyA9 IGdydWJfYWRkX3RydXN0ZWRfYmluYXJ5X2hhc2ggKChjb25zdCBncnViX3VpbnQ4X3QgKiopCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPj4gJmdydWJf cGxhdGZvcm1fa2V5c3RvcmUuZGJbaV0uZGF0YSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAo+PiBncnViX3BsYXRmb3JtX2tleXN0b3JlLmRiW2ldLmRh dGFfc2l6ZSk7Cj4+ICsgICAgICAgICAgaWYgKHJjID09IEdSVUJfRVJSX09VVF9PRl9NRU1PUlkp Cj4+ICsgICAgICAgICAgICByZXR1cm4gcmM7Cj4+ICsKPj4gKyAgICAgICAgICBjb250aW51ZTsK PiAKPiAnY29udGludWUnIG5vdCBuZWVkZWQKPiAKPj4gKyAgICAgICAgfQo+PiArICAgICAgZWxz ZSBpZiAoZ3J1Yl9pc194NTA5ICgmZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYltpXS5ndWlkKSA9 PSAKPj4gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICAgICAgewo+PiArCj4gCj4gc3RyYXkgZW1wdHkg bGluZQo+IAo+PiArICAgICAgICAgIHJjID0gZ3J1Yl9pc19kaXN0cnVzdGVkX2NlcnRfaGFzaCAK Pj4gKGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJbaV0uZGF0YSwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+PiBncnViX3BsYXRmb3JtX2tleXN0b3Jl LmRiW2ldLmRhdGFfc2l6ZSk7Cj4+ICsgICAgICAgICAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUp PiArICAgICAgICAgICAgY29udGludWU7Cj4+ICsKPj4gKyAgICAgICAgICByYyA9IGdydWJfYWRk X2NlcnRpZmljYXRlIAo+PiAoZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYltpXS5kYXRhLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+PiBncnViX3BsYXRmb3JtX2tl eXN0b3JlLmRiW2ldLmRhdGFfc2l6ZSwgJmdydWJfZGIsIDEpOwo+PiArICAgICAgICAgIGlmIChy YyA9PSBHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZKQo+PiArICAgICAgICAgICAgcmV0dXJuIHJjOwo+ PiArICAgICAgICAgIGVsc2UgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgICAgICAg ICBjb250aW51ZTsKPj4gKyAgICAgICAgfQo+PiArICAgICAgZWxzZQo+PiArICAgICAgICBncnVi X3ByaW50ZiAoIldhcm5pbmc6IHVuc3VwcG9ydGVkIHNpZ25hdHVyZSBkYXRhIHR5cGUgYW5kICIK Pj4gKyAgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyB0cnVzdGVkIGRhdGEgKCUiIFBSSXVH UlVCX1NJWkUgIilcbiIsIAo+PiBpICsgMSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJldHVybiBH UlVCX0VSUl9OT05FOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogZXh0cmFjdHMgdGhlIGNlcnRp ZmljYXRlcywgY2VydGlmaWNhdGUvYmluYXJ5IGhhc2hlcyBvdXQgb2YgdGhlIAo+PiBwbGF0Zm9y bSBrZXlzdG9yZSBidWZmZXIsCj4+ICsgKiBhbmQgYWRkcyBpdCB0byB0aGUgZGlzdHJ1c3RlZCBs aXN0Lgo+PiArICovCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl9jcmVhdGVfZGlzdHJ1 c3RlZF9saXN0ICh2b2lkKQo+PiArewo+PiArICBncnViX2Vycl90IHJjID0gR1JVQl9FUlJfTk9O RTsKPj4gKyAgZ3J1Yl9zaXplX3QgaSA9IDA7Cj4+ICsKPj4gKyAgZm9yIChpID0gMDsgaSA8IGdy dWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4X2VudHJpZXM7IGkrKykKPj4gKyAgICB7Cj4+ICsgICAg ICBpZiAoZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0uZGF0YSAhPSBOVUxMICYmCj4gCj4g J3x8Jz8KPiAKPj4gKyAgICAgICAgICBncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieFtpXS5kYXRh X3NpemUgPiAwKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgaWYgKGdydWJfaXNfeDUwOSAo JmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLmd1aWQpID09IAo+PiBHUlVCX0VSUl9OT05F KQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICByYyA9IGdydWJfYWRkX2NlcnRp ZmljYXRlIAo+PiAoZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0uZGF0YSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4+IGdydWJfcGxhdGZvcm1fa2V5 c3RvcmUuZGJ4W2ldLmRhdGFfc2l6ZSwgJmdydWJfZGJ4LCAwKTsKPj4gKyAgICAgICAgICAgICAg aWYgKHJjID09IEdSVUJfRVJSX09VVF9PRl9NRU1PUlkpCj4+ICsgICAgICAgICAgICAgICAgcmV0 dXJuIHJjOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgIGVsc2UgaWYgKGdydWJfaXNf aGFzaCAoJmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4W2ldLmd1aWQpIAo+PiA9PSBHUlVCX0VS Ul9OT05FKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICByYyA9IGdydWJfYWRk X2hhc2ggKChjb25zdCBncnViX3VpbnQ4X3QgKiopIAo+PiAmZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9y ZS5kYnhbaV0uZGF0YSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPj4g Z3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhbaV0uZGF0YV9zaXplLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZncnViX2RieC5zaWduYXR1cmVzLCAKPj4gJmdydWJfZGJ4 LnNpZ25hdHVyZV9zaXplLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZn cnViX2RieC5zaWduYXR1cmVfZW50cmllcyk7Cj4+ICsgICAgICAgICAgICAgIGlmIChyYyAhPSBH UlVCX0VSUl9OT05FKQo+PiArICAgICAgICAgICAgICAgIHJldHVybiByYzsKPj4gKyAgICAgICAg ICAgIH0KPj4gKyAgICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICBncnViX3ByaW50ZiAoIldh cm5pbmc6IHVuc3VwcG9ydGVkIHNpZ25hdHVyZSBkYXRhIHR5cGUgCj4+IGFuZCAiCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgInNraXBwaW5nIGRpc3RydXN0ZWQgZGF0YSAoJSIgUFJJdUdS VUJfU0laRSAKPj4gIilcbiIsIGkgKyAxKTsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+ PiArICByZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBleHRyYWN0cyB0aGUgeDUw OSBjZXJ0aWZpY2F0ZXMgZnJvbSB0aGUgRUxGIG5vdGUgaGVhZGVyLAo+PiArICogcGFyc2VzIGl0 LCBhbmQgYWRkcyBpdCB0byB0aGUgdHJ1c3RlZCBsaXN0Lgo+PiArICovCj4+ICtzdGF0aWMgZ3J1 Yl9lcnJfdAo+PiArZ3J1Yl9idWlsZF9zdGF0aWNfdHJ1c3RlZF9saXN0IChjb25zdCBzdHJ1Y3Qg Z3J1Yl9tb2R1bGVfaGVhZGVyIAo+PiAqaGVhZGVyKQo+PiArewo+PiArICBncnViX2Vycl90IGVy ciA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgIHN0cnVjdCBncnViX2ZpbGUgcHNldWRvX2ZpbGU7Cj4+ ICsgIGdydWJfdWludDhfdCAqY2VydF9kYXRhID0gTlVMTDsKPj4gKyAgZ3J1Yl9zc2l6ZV90IGNl cnRfZGF0YV9zaXplID0gMDsKPj4gKwo+PiArICBncnViX21lbXNldCAoJnBzZXVkb19maWxlLCAw LCBzaXplb2YgKHBzZXVkb19maWxlKSk7Cj4gCj4gYWgsICcwJwo+IAo+PiArICBwc2V1ZG9fZmls ZS5mcyA9ICZwc2V1ZG9fZnM7Cj4+ICsgIHBzZXVkb19maWxlLnNpemUgPSBoZWFkZXItPnNpemUg LSBzaXplb2YgKHN0cnVjdCAKPj4gZ3J1Yl9tb2R1bGVfaGVhZGVyKTsKPj4gKyAgcHNldWRvX2Zp bGUuZGF0YSA9IChjaGFyICopIGhlYWRlciArIHNpemVvZiAoc3RydWN0IAo+PiBncnViX21vZHVs ZV9oZWFkZXIpOwo+PiArCj4+ICsgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgImZvdW5k IGFuIHg1MDkga2V5LCBzaXplPSUiIAo+PiBQUkl1R1JVQl9VSU5UNjRfVCAiXG4iLAo+PiArICAg ICAgICAgICAgICAgIHBzZXVkb19maWxlLnNpemUpOwo+PiArCj4+ICsgIGVyciA9IGdydWJfcmVh ZF9maWxlICgmcHNldWRvX2ZpbGUsICZjZXJ0X2RhdGEsICZjZXJ0X2RhdGFfc2l6ZSk7Cj4+ICsg IGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICByZXR1cm4gZXJyOwo+PiArCj4+ICsg IGVyciA9IGdydWJfYWRkX2NlcnRpZmljYXRlIChjZXJ0X2RhdGEsIGNlcnRfZGF0YV9zaXplLCAm Z3J1Yl9kYiwgCj4+IDEpOwo+PiArICBpZiAoY2VydF9kYXRhICE9IE5VTEwpCj4+ICsgICAgZ3J1 Yl9mcmVlIChjZXJ0X2RhdGEpOwo+IAo+IG5vIG5lZWQgdG8gY2hlY2sgZm9yIGNlcnRfZGF0YSAh PSBOVUxMCj4+ICsKPj4gKyAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiArLyogcmVsZWFzaW5n IG1lbW9yeSAqLwo+PiArc3RhdGljIHZvaWQKPj4gK2dydWJfcmVsZWFzZV90cnVzdGVkX2xpc3Qg KHZvaWQpCj4+ICt7Cj4+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0Owo+PiArICBn cnViX3NpemVfdCBpID0gMDsKPj4gKwo+PiArICB3aGlsZSAoZ3J1Yl9kYi5rZXlzICE9IE5VTEwp Cj4+ICsgICAgewo+PiArICAgICAgY2VydCA9IGdydWJfZGIua2V5czsKPj4gKyAgICAgIGdydWJf ZGIua2V5cyA9IGdydWJfZGIua2V5cy0+bmV4dDsKPj4gKyAgICAgIGNlcnRpZmljYXRlX3JlbGVh c2UgKGNlcnQpOwo+PiArICAgICAgZ3J1Yl9mcmVlIChjZXJ0KTsKPj4gKyAgICB9Cj4+ICsKPj4g KyAgZm9yIChpID0gMDsgaSA8IGdydWJfZGIuc2lnbmF0dXJlX2VudHJpZXM7IGkrKykKPj4gKyAg ICBncnViX2ZyZWUgKGdydWJfZGIuc2lnbmF0dXJlc1tpXSk7Cj4+ICsKPj4gKyAgZ3J1Yl9mcmVl IChncnViX2RiLnNpZ25hdHVyZXMpOwo+PiArICBncnViX2ZyZWUgKGdydWJfZGIuc2lnbmF0dXJl X3NpemUpOwo+PiArICBncnViX21lbXNldCAoJmdydWJfZGIsIDB4MDAsIHNpemVvZiAoZ3J1Yl9k YikpOwo+IAo+IHMvMHgwMC8wCj4gCj4+ICt9Cj4+ICsKPj4gKy8qIHJlbGVhc2luZyBtZW1vcnkg Ki8KPj4gK3N0YXRpYyB2b2lkCj4+ICtncnViX3JlbGVhc2VfZGlzdHJ1c3RlZF9saXN0ICh2b2lk KQo+PiArewo+PiArICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydDsKPj4gKyAgZ3J1Yl9z aXplX3QgaSA9IDA7Cj4+ICsKPj4gKyAgd2hpbGUgKGdydWJfZGJ4LmtleXMgIT0gTlVMTCkKPj4g KyAgICB7Cj4+ICsgICAgICBjZXJ0ID0gZ3J1Yl9kYngua2V5czsKPj4gKyAgICAgIGdydWJfZGJ4 LmtleXMgPSBncnViX2RieC5rZXlzLT5uZXh0Owo+PiArICAgICAgY2VydGlmaWNhdGVfcmVsZWFz ZSAoY2VydCk7Cj4+ICsgICAgICBncnViX2ZyZWUgKGNlcnQpOwo+PiArICAgIH0KPj4gKwo+PiAr ICBmb3IgKGkgPSAwOyBpIDwgZ3J1Yl9kYnguc2lnbmF0dXJlX2VudHJpZXM7IGkrKykKPj4gKyAg ICBncnViX2ZyZWUgKGdydWJfZGJ4LnNpZ25hdHVyZXNbaV0pOwo+PiArCj4+ICsgIGdydWJfZnJl ZSAoZ3J1Yl9kYnguc2lnbmF0dXJlcyk7Cj4+ICsgIGdydWJfZnJlZSAoZ3J1Yl9kYnguc2lnbmF0 dXJlX3NpemUpOwo+PiArICBncnViX21lbXNldCAoJmdydWJfZGJ4LCAweDAwLCBzaXplb2YgKGdy dWJfZGJ4KSk7Cj4gCj4gcy8weDAwLjAKPiAKPj4gK30KPj4gKwo+PiAgIEdSVUJfTU9EX0lOSVQg KGFwcGVuZGVkc2lnKQo+PiAgIHsKPj4gICAgIGludCByYzsKPj4gQEAgLTU0OCw3ICsxMDg1LDYg QEAgR1JVQl9NT0RfSU5JVCAoYXBwZW5kZWRzaWcpCj4+ICAgICBpZiAoZ3J1Yl9pc19sb2NrZG93 biAoKSA9PSBHUlVCX0xPQ0tET1dOX0VOQUJMRUQpCj4+ICAgICAgIGNoZWNrX3NpZ3MgPSBjaGVj a19zaWdzX2ZvcmNlZDsKPj4gICAtICBncnViX3RydXN0ZWRfa2V5ID0gTlVMTDsKPj4gICAgIGdy dWJfcmVnaXN0ZXJfdmFyaWFibGVfaG9vayAoImNoZWNrX2FwcGVuZGVkX3NpZ25hdHVyZXMiLCAK Pj4gZ3J1Yl9lbnZfcmVhZF9zZWMsIGdydWJfZW52X3dyaXRlX3NlYyk7Cj4+ICAgICBncnViX2Vu dl9leHBvcnQgKCJjaGVja19hcHBlbmRlZF9zaWduYXR1cmVzIik7Cj4+ICAgQEAgLTU1NiwzOSAr MTA5Miw1MSBAQCBHUlVCX01PRF9JTklUIChhcHBlbmRlZHNpZykKPj4gICAgIGlmIChyYykKPj4g ICAgICAgZ3J1Yl9mYXRhbCAoIkVycm9yIGluaXRpbmcgQVNOLjEgZGF0YSBzdHJ1Y3R1cmVzOiAl ZDogJXNcbiIsIHJjLCAKPj4gYXNuMV9zdHJlcnJvciAocmMpKTsKPj4gICAtICBGT1JfTU9EVUxF UyAoaGVhZGVyKQo+PiAtICB7Cj4+IC0gICAgc3RydWN0IGdydWJfZmlsZSBwc2V1ZG9fZmlsZTsK Pj4gLSAgICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqcGsgPSBOVUxMOwo+PiAtICAgIGdydWJf ZXJyX3QgZXJyOwo+PiAtCj4+IC0gICAgLyogTm90IGFuIFguNTA5IGNlcnRpZmljYXRlLCBza2lw LiAqLwo+PiAtICAgIGlmIChoZWFkZXItPnR5cGUgIT0gT0JKX1RZUEVfWDUwOV9QVUJLRVkpCj4+ IC0gICAgICBjb250aW51ZTsKPj4gLQo+PiAtICAgIGdydWJfbWVtc2V0ICgmcHNldWRvX2ZpbGUs IDAsIHNpemVvZiAocHNldWRvX2ZpbGUpKTsKPj4gLSAgICBwc2V1ZG9fZmlsZS5mcyA9ICZwc2V1 ZG9fZnM7Cj4+IC0gICAgcHNldWRvX2ZpbGUuc2l6ZSA9IGhlYWRlci0+c2l6ZSAtIHNpemVvZiAo c3RydWN0IAo+PiBncnViX21vZHVsZV9oZWFkZXIpOwo+PiAtICAgIHBzZXVkb19maWxlLmRhdGEg PSAoY2hhciAqKSBoZWFkZXIgKyBzaXplb2YgKHN0cnVjdCAKPj4gZ3J1Yl9tb2R1bGVfaGVhZGVy KTsKPj4gLQo+PiAtICAgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgIkZvdW5kIGFuIHg1 MDkga2V5LCBzaXplPSUiIAo+PiBQUkl1R1JVQl9VSU5UNjRfVCAiXG4iLAo+PiAtICAgICAgICAg ICAgICAgICAgcHNldWRvX2ZpbGUuc2l6ZSk7Cj4+IC0KPj4gLSAgICBwayA9IGdydWJfemFsbG9j IChzaXplb2YgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlKSk7Cj4+IC0gICAgaWYgKCFwaykKPj4g LSAgICAgIHsKPj4gLSAgICAgICAgZ3J1Yl9mYXRhbCAoIk91dCBvZiBtZW1vcnkgbG9hZGluZyBp bml0aWFsIGNlcnRpZmljYXRlcyIpOwo+PiAtICAgICAgfQo+PiAtCj4+IC0gICAgZXJyID0gcmVh ZF9jZXJ0X2Zyb21fZmlsZSAoJnBzZXVkb19maWxlLCBwayk7Cj4+IC0gICAgaWYgKGVyciAhPSBH UlVCX0VSUl9OT05FKQo+PiAtICAgICAgZ3J1Yl9mYXRhbCAoIkVycm9yIGxvYWRpbmcgaW5pdGlh bCBrZXk6ICVzIiwgZ3J1Yl9lcnJtc2cpOwo+PiArICBpZiAoIWdydWJfdXNlX3BsYXRmb3JtX2tl eXN0b3JlICYmIGNoZWNrX3NpZ3MgPT0gY2hlY2tfc2lnc19mb3JjZWQpCj4+ICsgICAgewo+PiAr ICAgICAgRk9SX01PRFVMRVMgKGhlYWRlcikKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIC8q IE5vdCBhbiBFTEYgbW9kdWxlLCBza2lwLiAgKi8KPj4gKyAgICAgICAgICBpZiAoaGVhZGVyLT50 eXBlICE9IE9CSl9UWVBFX1g1MDlfUFVCS0VZKQo+PiArICAgICAgICAgICAgY29udGludWU7Cj4+ ICAgLSAgICBncnViX2RwcmludGYgKCJhcHBlbmRlZHNpZyIsICJsb2FkZWQgY2VydGlmaWNhdGUg Q049JyVzJ1xuIiwgCj4+IHBrLT5zdWJqZWN0KTsKPj4gKyAgICAgICAgICByYyA9IGdydWJfYnVp bGRfc3RhdGljX3RydXN0ZWRfbGlzdCAoaGVhZGVyKTsKPj4gKyAgICAgICAgICBpZiAocmMgIT0g R1JVQl9FUlJfTk9ORSkKPj4gKyAgICAgICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgZ3J1Yl9y ZWxlYXNlX3RydXN0ZWRfbGlzdCAoKTsKPj4gKyAgICAgICAgICAgICAgZ3J1Yl9lcnJvciAocmMs ICJzdGF0aWMgdHJ1c3RlZCBsaXN0IGNyZWF0aW9uIGZhaWxlZCIpOwo+PiArICAgICAgICAgICAg fQo+PiArICAgICAgICAgIGVsc2UKPj4gKyAgICAgICAgICAgIGdydWJfcHJpbnRmICgiYXBwZW5k ZWRzaWc6IHRoZSB0cnVzdGVkIGxpc3Qgbm93IGhhcyAlIiAKPj4gUFJJdUdSVUJfU0laRSAiIHN0 YXRpYyBrZXlzXG4iLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfZGIua2V5X2Vu dHJpZXMpOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArICBlbHNlIGlmIChncnViX3VzZV9w bGF0Zm9ybV9rZXlzdG9yZSAmJiBjaGVja19zaWdzID09IAo+PiBjaGVja19zaWdzX2ZvcmNlZCkK Pj4gKyAgICB7Cj4+ICsgICAgICByYyA9IGdydWJfY3JlYXRlX3RydXN0ZWRfbGlzdCAoKTsKPj4g KyAgICAgIGlmIChyYyAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAg ICAgZ3J1Yl9yZWxlYXNlX3RydXN0ZWRfbGlzdCAoKTsKPj4gKyAgICAgICAgICBncnViX2Vycm9y IChyYywgInRydXN0ZWQgbGlzdCBjcmVhdGlvbiBmYWlsZWQiKTsKPj4gKyAgICAgICAgfQo+PiAr ICAgICAgZWxzZQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgcmMgPSBncnViX2NyZWF0ZV9k aXN0cnVzdGVkX2xpc3QgKCk7Cj4+ICsgICAgICAgICAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUp Cj4+ICsgICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgIGdydWJfcmVsZWFzZV90cnVzdGVk X2xpc3QgKCk7Cj4+ICsgICAgICAgICAgICAgIGdydWJfcmVsZWFzZV9kaXN0cnVzdGVkX2xpc3Qg KCk7Cj4+ICsgICAgICAgICAgICAgIGdydWJfZXJyb3IgKHJjLCAiZGlzdHJ1c3RlZCBsaXN0IGNy ZWF0aW9uIGZhaWxlZCIpOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgIGVsc2UKPj4g KyAgICAgICAgICAgIGdydWJfcHJpbnRmICgiYXBwZW5kZWRzaWc6IHRoZSB0cnVzdGVkIGxpc3Qg bm93IGhhcyAlIiAKPj4gUFJJdUdSVUJfU0laRSAiIGtleXMuXG4iCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgImFwcGVuZGVkc2lnOiB0aGUgZGlzdHJ1c3RlZCBsaXN0IG5vdyBoYXMgJSIg Cj4+IFBSSXVHUlVCX1NJWkUgIiBrZXlzLlxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBncnViX2RiLnNpZ25hdHVyZV9lbnRyaWVzICsgCj4+IGdydWJfZGIua2V5X2VudHJpZXMsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9kYnguc2lnbmF0dXJlX2VudHJpZXMpOwo+ PiArICAgICAgICB9Cj4+ICAgLSAgICBway0+bmV4dCA9IGdydWJfdHJ1c3RlZF9rZXk7Cj4+IC0g ICAgZ3J1Yl90cnVzdGVkX2tleSA9IHBrOwo+PiAtICB9Cj4+ICsgICAgICBncnViX3JlbGVhc2Vf cGxhdGZvcm1fa2V5c3RvcmUgKCk7Cj4+ICsgICAgfQo+PiAgICAgICBjbWRfdHJ1c3QgPSBncnVi X3JlZ2lzdGVyX2NvbW1hbmQgKCJ0cnVzdF9jZXJ0aWZpY2F0ZSIsIAo+PiBncnViX2NtZF90cnVz dCwgTl8oIlg1MDlfQ0VSVElGSUNBVEUiKSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTl8oIkFkZCBYNTA5X0NFUlRJRklDQVRFIHRvIAo+PiB0cnVzdGVkIGNlcnRp ZmljYXRlcy4iKSk7CgphZGRyZXNzZWQgYWxsIHRoZSBjb21tZW50cy4gVGhhbmsgeW91IHN0ZWZh bi4KClRoYW5rcywKU3VkaGFrYXIgS3VwcHVzYW15CgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVs QGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZl bAo=