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 C74FCCD1292 for ; Mon, 1 Apr 2024 10:24:58 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rrEpx-0002CZ-2d; Mon, 01 Apr 2024 06:24:21 -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 1rrEpu-0002CG-Vb; Mon, 01 Apr 2024 06:24:19 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rrEpr-0006uB-Aq; Mon, 01 Apr 2024 06:24:18 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 4319tUFT019730; Mon, 1 Apr 2024 09:59:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=date : from : to : cc : subject : in-reply-to : references : message-id : content-type : content-transfer-encoding : mime-version; s=pp1; bh=jG/fKrqOkjxRXzD3J370VTcnkq54Ks6V/6MQOix03H4=; b=RkZ+Y99ipeKqdzUsShC6ZVMamJiWOlTzqAD79E63cO2oUQ3p5gGS/3KaQByJaKGh3LgF UgNVLzOjDQJ9LrCBOrL68w/GGUTBB/5No5dgCHqW3wOIk6fC807sJdBbS2jKq0ZJa5pn 29NXjQoqEUz/1OGfxuwSLLpM1mXHz89c4vuO/QVJuUOa9rTYRvCiKx73HcksQvYZXgM2 8X/46FuDVIeVgsnJViMRPLtesFUJX/iwh7drBBUvGTSBCiidxIBtPGfCGNm2xVw1ZKjp O9tAAdmcYzuvWQsqdfz6h6JY1l65ZqWgTxaoHvnSveyg4PrpCVfu6W5mWtFTfjVoJltF cA== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3x7tqgr09a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 01 Apr 2024 09:59:15 +0000 Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 43193d7r015234; Mon, 1 Apr 2024 09:59:15 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 3x6y9kq4tu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 01 Apr 2024 09:59:14 +0000 Received: from smtpav01.dal12v.mail.ibm.com (smtpav01.dal12v.mail.ibm.com [10.241.53.100]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 4319xCY729163780 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 1 Apr 2024 09:59:14 GMT Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7A72C58057; Mon, 1 Apr 2024 09:59:12 +0000 (GMT) Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3A62558058; Mon, 1 Apr 2024 09:59:12 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav01.dal12v.mail.ibm.com (Postfix) with ESMTP; Mon, 1 Apr 2024 09:59:12 +0000 (GMT) Date: Mon, 01 Apr 2024 15:29:12 +0530 From: avnish To: grub-devel@gnu.org, ross.lagerwall@citrix.com Cc: grub-devel-request@gnu.org, dkiper@net-space.pl Subject: Re: [PATCH v2 2/3] multiboot2: Add PE load support In-Reply-To: References: Message-ID: <425905b94d81bb40953eacdf57627230@imap.linux.ibm.com> X-Sender: avnish@imap.linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: iybBlaLfbwBIUiKstj8vMPSoZdBrEzV_ X-Proofpoint-GUID: iybBlaLfbwBIUiKstj8vMPSoZdBrEzV_ X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-01_06,2024-03-28_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 mlxlogscore=999 malwarescore=0 bulkscore=0 spamscore=0 adultscore=0 impostorscore=0 mlxscore=0 clxscore=1034 lowpriorityscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2403210000 definitions=main-2404010070 Received-SPF: none client-ip=148.163.158.5; envelope-from=avnish@imap.linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_NXDOMAIN=0.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, NO_DNS_FOR_FROM=0.001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no 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 PiBEYXRlOiBUaHUsIDI4IE1hciAyMDI0IDE1OjEzOjAxICswMDAwCj4gRnJvbTogUm9zcyBMYWdl cndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+Cj4gVG86IGdydWItZGV2ZWxAZ251Lm9y Zwo+IENjOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcsIFJvc3MgTGFnZXJ3YWxsCj4g CTxyb3NzLmxhZ2Vyd2FsbEBjaXRyaXguY29tPiwgRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJA b3JhY2xlLmNvbT4sCj4gCURhbmllbCBLaXBlciA8ZGtpcGVyQG5ldC1zcGFjZS5wbD4sIEFuZHJl dyBDb29wZXIKPiAJPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+LCBSb2dlciBQYXUgTW9ubsOp IDxyb2dlci5wYXVAY2l0cml4LmNvbT4KPiBTdWJqZWN0OiBbUEFUQ0ggdjIgMi8zXSBtdWx0aWJv b3QyOiBBZGQgUEUgbG9hZCBzdXBwb3J0Cj4gTWVzc2FnZS1JRDogPDIwMjQwMzI4MTUxMzAyLjE0 NTExNTgtMy1yb3NzLmxhZ2Vyd2FsbEBjaXRyaXguY29tPgo+IAo+IEFkZCB0aGUgYWJpbGl0eSB0 byBsb2FkIG11bHRpYm9vdCBiaW5hcmllcyBpbiBQRSBmb3JtYXQuIFRoaXMgYWxsb3dzIAo+IHRo ZQo+IGJpbmFyaWVzIHRvIGJlIHNpZ25lZCBhbmQgdmVyaWZpZWQuCj4gCj4gU2lnbmVkLW9mZi1i eTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+Cj4gLS0tCj4gIGdy dWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZiAgICAgICB8ICAgMSArCj4gIGdydWItY29yZS9sb2Fk ZXIvbXVsdGlib290LmMgICAgICB8ICAgNyArCj4gIGdydWItY29yZS9sb2FkZXIvbXVsdGlib290 X21iaTIuYyB8ICAxMSArLQo+ICBncnViLWNvcmUvbG9hZGVyL211bHRpYm9vdF9wZS5jICAgfCA3 MDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvZ3J1Yi9lZmkvcGUz Mi5oICAgICAgICAgICB8ICA2NCArKysKPiAgaW5jbHVkZS9ncnViL211bHRpYm9vdC5oICAgICAg ICAgIHwgICAzICsKPiAgaW5jbHVkZS9ncnViL211bHRpYm9vdDIuaCAgICAgICAgIHwgICA5ICsK PiAgNyBmaWxlcyBjaGFuZ2VkLCA3OTYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2xvYWRlci9tdWx0aWJvb3RfcGUuYwo+IAo+IGRp ZmYgLS1naXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUvTWFrZWZp bGUuY29yZS5kZWYKPiBpbmRleCAxNTcxNDIxZDdlODQuLjM0Njk3YmE1ODE3MSAxMDA2NDQKPiAt LS0gYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKPiArKysgYi9ncnViLWNvcmUvTWFrZWZp bGUuY29yZS5kZWYKPiBAQCAtMTgxNSw2ICsxODE1LDcgQEAgbW9kdWxlID0gewo+IAo+ICAgIGNv bW1vbiA9IGxvYWRlci9tdWx0aWJvb3QuYzsKPiAgICBjb21tb24gPSBsb2FkZXIvbXVsdGlib290 X21iaTIuYzsKPiArICBjb21tb24gPSBsb2FkZXIvbXVsdGlib290X3BlLmM7Cj4gICAgZW5hYmxl ID0geDg2Owo+ICAgIGVuYWJsZSA9IGkzODZfeGVuX3B2aDsKPiAgICBlbmFibGUgPSBtaXBzOwo+ IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvbG9hZGVyL211bHRpYm9vdC5jIAo+IGIvZ3J1Yi1jb3Jl L2xvYWRlci9tdWx0aWJvb3QuYwo+IGluZGV4IDk0YmU1MTJjNGQwYy4uODIyMGE3NGU2ZjE5IDEw MDY0NAo+IC0tLSBhL2dydWItY29yZS9sb2FkZXIvbXVsdGlib290LmMKPiArKysgYi9ncnViLWNv cmUvbG9hZGVyL211bHRpYm9vdC5jCj4gQEAgLTIyMCw2ICsyMjAsMTMgQEAgc3RhdGljIGdydWJf dWludDY0X3QgaGlnaGVzdF9sb2FkOwo+ICAjaW5jbHVkZSAibXVsdGlib290X2VsZnh4LmMiCj4g ICN1bmRlZiBNVUxUSUJPT1RfTE9BRF9FTEYzMgo+IAo+ICtib29sCj4gK0dSVUJfTVVMVElCT09U IChpc19lbGYpIChtYmlfbG9hZF9kYXRhX3QgKm1sZCkKPiArewo+ICsgIHJldHVybiBncnViX211 bHRpYm9vdF9pc19lbGYzMiAobWxkLT5idWZmZXIpIHx8Cj4gKyAgICAgICAgIGdydWJfbXVsdGli b290X2lzX2VsZjY0IChtbGQtPmJ1ZmZlcik7Cj4gK30KPiArCj4gIC8qIExvYWQgRUxGMzIgb3Ig RUxGNjQuICAqLwo+ICBncnViX2Vycl90Cj4gIEdSVUJfTVVMVElCT09UIChsb2FkX2VsZikgKG1i aV9sb2FkX2RhdGFfdCAqbWxkKQo+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvbG9hZGVyL211bHRp Ym9vdF9tYmkyLmMKPiBiL2dydWItY29yZS9sb2FkZXIvbXVsdGlib290X21iaTIuYwo+IGluZGV4 IDAwYTQ4NDEzYzAxMy4uNjAxZjM4MTYxZTExIDEwMDY0NAo+IC0tLSBhL2dydWItY29yZS9sb2Fk ZXIvbXVsdGlib290X21iaTIuYwo+ICsrKyBiL2dydWItY29yZS9sb2FkZXIvbXVsdGlib290X21i aTIuYwo+IEBAIC0zNDksNyArMzQ5LDE2IEBAIGdydWJfbXVsdGlib290Ml9sb2FkIChncnViX2Zp bGVfdCBmaWxlLCBjb25zdAo+IGNoYXIgKmZpbGVuYW1lKQo+ICAgICAgICBtbGQuZmlsZSA9IGZp bGU7Cj4gICAgICAgIG1sZC5maWxlbmFtZSA9IGZpbGVuYW1lOwo+ICAgICAgICBtbGQuYXZvaWRf ZWZpX2Jvb3Rfc2VydmljZXMgPSBrZWVwX2JzOwo+IC0gICAgICBlcnIgPSBncnViX211bHRpYm9v dDJfbG9hZF9lbGYgKCZtbGQpOwo+ICsgICAgICBpZiAoZ3J1Yl9tdWx0aWJvb3QyX2lzX3BlICgm bWxkKSkKPiArICAgICAgICAgIGVyciA9IGdydWJfbXVsdGlib290Ml9sb2FkX3BlICgmbWxkKTsK PiArICAgICAgZWxzZSBpZiAoZ3J1Yl9tdWx0aWJvb3QyX2lzX2VsZiAoJm1sZCkpCj4gKyAgICAg ICAgICBlcnIgPSBncnViX211bHRpYm9vdDJfbG9hZF9lbGYgKCZtbGQpOwo+ICsgICAgICBlbHNl Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgZ3J1Yl9mcmVlIChtbGQuYnVmZmVyKTsKPiArICAg ICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9VTktOT1dOX09TLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIGltYWdlIHR5cGUgYW5kIGFkZHJlc3MgdGFn IG5vdAo+IHNwZWNpZmllZCIpOwo+ICsgICAgICAgIH0KPiAgICAgICAgaWYgKGVycikKPiAgCXsK PiAgCSAgZ3J1Yl9mcmVlIChtbGQuYnVmZmVyKTsKPiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2xv YWRlci9tdWx0aWJvb3RfcGUuYyAKPiBiL2dydWItY29yZS9sb2FkZXIvbXVsdGlib290X3BlLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMWMxOTRmODliNzlj Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2dydWItY29yZS9sb2FkZXIvbXVsdGlib290X3BlLmMK PiBAQCAtMCwwICsxLDcwMiBAQAo+ICsvKgo+ICsgKiBTaWduaWZpY2FudCBwb3J0aW9ucyBvZiB0 aGlzIGNvZGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgRmVkb3JhIEdSVUIgCj4gcGF0Y2gKPiArICog IjAwMDctQWRkLXNlY3VyZWJvb3Qtc3VwcG9ydC1vbi1lZmktY2hhaW5sb2FkZXIucGF0Y2giIHdo aWNoIGlzIGluIAo+IHR1cm4KPiArICogZGVyaXZlZCBmcm9tIHRoZSBQRSBsb2FkaW5nIGNvZGUg aW4gU2hpbS4gVGhlIGxpY2Vuc2UgaXMgcmVwcm9kdWNlZCAKPiBiZWxvdzoKPiArICoKPiArICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAo+ICsgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICog ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCj4g KyAqIGRpc3RyaWJ1dGlvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwo+ICsgKiAiQVMgSVMiIEFO RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAo+ ICsgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUwo+ICsgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQo+ICsgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCj4gKyAqIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwo+ICsgKiAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IKPiArICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCj4gKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKPiArICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECj4gKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiAr ICoKPiArICogQ29weXJpZ2h0IFBldGVyIEpvbmVzIDxwam9uZXNAcmVkaGF0LmNvbT4KPiArICoK PiArICogTW9kaWZpY2F0aW9uczoKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDI0LiBDbG91 ZCBTb2Z0d2FyZSBHcm91cCwgSW5jLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxncnViL211bHRp Ym9vdDIuaD4KPiArI2luY2x1ZGUgPGdydWIvaTM4Ni9yZWxvY2F0b3IuaD4KPiArI2luY2x1ZGUg PGdydWIvZWZpL3BlMzIuaD4KPiArCj4gK3N0YXRpYyBpbnQKPiAraW1hZ2VfaXNfNjRfYml0IChn cnViX3BlX2hlYWRlcl90ICpwZV9oZHIpCj4gK3sKPiArICAvKiAuTWFnaWMgaXMgdGhlIHNhbWUg b2Zmc2V0IGluIGFsbCBjYXNlcyAqLwo+ICsgIHJldHVybiBwZV9oZHItPnBlMzJwbHVzLm9wdGlv bmFsX2hlYWRlci5tYWdpYyA9PSAKPiBHUlVCX1BFMzJfUEU2NF9NQUdJQzsKPiArfQo+ICsKPiAr c3RhdGljIGNvbnN0IGdydWJfdWludDE2X3QgbWFjaGluZV90eXBlIF9fYXR0cmlidXRlX18oKF9f dW51c2VkX18pKSA9Cj4gKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCj4gKyAgR1JVQl9QRTMyX01B Q0hJTkVfWDg2XzY0Owo+ICsjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQo+ICsgIEdSVUJfUEUz Ml9NQUNISU5FX0FSTTY0Owo+ICsjZWxpZiBkZWZpbmVkKF9fYXJtX18pCj4gKyAgR1JVQl9QRTMy X01BQ0hJTkVfQVJNVEhVTUJfTUlYRUQ7Cj4gKyNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRl ZmluZWQoX19pNDg2X18pIHx8IGRlZmluZWQoX19pNjg2X18pCj4gKyAgR1JVQl9QRTMyX01BQ0hJ TkVfSTM4NjsKPiArI2VsaWYgZGVmaW5lZChfX2lhNjRfXykKPiArICBHUlVCX1BFMzJfTUFDSElO RV9JQTY0Owo+ICsjZWxpZiBkZWZpbmVkKF9fcmlzY3YpICYmIChfX3Jpc2N2X3hsZW4gPT0gMzIp Cj4gKyAgR1JVQl9QRTMyX01BQ0hJTkVfUklTQ1YzMjsKPiArI2VsaWYgZGVmaW5lZChfX3Jpc2N2 KSAmJiAoX19yaXNjdl94bGVuID09IDY0KQo+ICsgIEdSVUJfUEUzMl9NQUNISU5FX1JJU0NWNjQ7 Cj4gKyNlbHNlCj4gKyNlcnJvciB0aGlzIGFyY2hpdGVjdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5 IGdydWIyCj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIGludAo+ICtpbWFnZV9pc19sb2FkYWJsZShn cnViX3BlX2hlYWRlcl90ICpwZV9oZHIpCj4gK3sKPiArICAvKgo+ICsgICAqIENoZWNrIHRoZSBt YWNoaW5lIHR5cGUgbWF0Y2hlcyB0aGUgYmluYXJ5IGFuZCB0aGF0IHdlIHJlY29nbml6ZQo+ICsg ICAqIHRoZSBtYWdpYyBudW1iZXIuCj4gKyAgICovCj4gKyAgICByZXR1cm4gKHBlX2hkci0+cGUz Mi5jb2ZmX2hlYWRlci5tYWNoaW5lID09IG1hY2hpbmVfdHlwZSB8fAo+ICsgICAgICAgICAgICAo cGVfaGRyLT5wZTMyLmNvZmZfaGVhZGVyLm1hY2hpbmUgPT0gCj4gR1JVQl9QRTMyX01BQ0hJTkVf WDg2XzY0ICYmCj4gKyAgICAgICAgICAgICBtYWNoaW5lX3R5cGUgPT0gR1JVQl9QRTMyX01BQ0hJ TkVfSTM4NikpICYmCj4gKyAgICAgICAgICAgKHBlX2hkci0+cGUzMnBsdXMub3B0aW9uYWxfaGVh ZGVyLm1hZ2ljID09IAo+IEdSVUJfUEUzMl9QRTMyX01BR0lDIHx8Cj4gKyAgICAgICAgICAgIHBl X2hkci0+cGUzMnBsdXMub3B0aW9uYWxfaGVhZGVyLm1hZ2ljID09IAo+IEdSVUJfUEUzMl9QRTY0 X01BR0lDKTsKPiArfQo+ICsKPiArLyoKPiArICogUmVhZCB0aGUgYmluYXJ5IGhlYWRlciBhbmQg Z3JhYiBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbiBmcm9tIGl0Cj4gKyAqLwo+ICtzdGF0aWMgZ3J1 Yl9lcnJfdAo+ICtyZWFkX2hlYWRlcih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YXNpemUs Cj4gKyAgICAgICAgICAgIHBlX2NvZmZfbG9hZGVyX2ltYWdlX2NvbnRleHRfdCAqY29udGV4dCkK PiArewo+ICsgIGdydWJfcGUzMl9tc2Rvc19oZWFkZXJfdCAqZG9zX2hkciA9IGRhdGE7Cj4gKyAg Z3J1Yl9wZV9oZWFkZXJfdCAqcGVfaGRyID0gZGF0YTsKPiArICB1bnNpZ25lZCBsb25nIGhlYWRl cl93aXRob3V0X2RhdGFfZGlyLCBzZWN0aW9uX2hlYWRlcl9vZmZzZXQsCj4gb3B0X2hlYWRlcl9z aXplOwo+ICsgIHVuc2lnbmVkIGxvbmcgZmlsZV9hbGlnbm1lbnQgPSAwOwo+ICsKPiArICBpZiAo ZGF0YXNpemUgPCBzaXplb2YgKHBlX2hkci0+cGUzMikpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJf ZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwgIkludmFsaWQgaW1hZ2UiKTsKPiArICAgICAg cmV0dXJuIEdSVUJfRVJSX09VVF9PRl9SQU5HRTsKPiArICAgIH0KPiArCj4gKyAgaWYgKGRvc19o ZHItPmVfbWFnaWMgPT0gR1JVQl9QRTMyX01BR0lDKQo+ICsgICAgcGVfaGRyID0gKGdydWJfcGVf aGVhZGVyX3QgKikoKGNoYXIgKilkYXRhICsgZG9zX2hkci0+ZV9sZmFuZXcpOwo+ICsKPiArICBp ZiAoIWltYWdlX2lzX2xvYWRhYmxlKHBlX2hkcikpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJy b3IgKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsICJQbGF0Zm9ybSBkb2VzIG5vdAo+IHN1 cHBvcnQgdGhpcyBpbWFnZSIpOwo+ICsgICAgICByZXR1cm4gR1JVQl9FUlJfTk9UX0lNUExFTUVO VEVEX1lFVDsKPiArICAgIH0KPiArCj4gKyAgaWYgKGltYWdlX2lzXzY0X2JpdChwZV9oZHIpKQo+ ICsgICAgewo+ICsgICAgICBjb250ZXh0LT5udW1iZXJfb2ZfcnZhX2FuZF9zaXplcyA9Cj4gcGVf aGRyLT5wZTMycGx1cy5vcHRpb25hbF9oZWFkZXIubnVtX2RhdGFfZGlyZWN0b3JpZXM7Cj4gKyAg ICAgIGNvbnRleHQtPnNpemVfb2ZfaGVhZGVycyA9IAo+IHBlX2hkci0+cGUzMnBsdXMub3B0aW9u YWxfaGVhZGVyLmhlYWRlcl9zaXplOwo+ICsgICAgICBjb250ZXh0LT5pbWFnZV9zaXplID0gCj4g cGVfaGRyLT5wZTMycGx1cy5vcHRpb25hbF9oZWFkZXIuaW1hZ2Vfc2l6ZTsKPiArICAgICAgY29u dGV4dC0+c2VjdGlvbl9hbGlnbm1lbnQgPQo+IHBlX2hkci0+cGUzMnBsdXMub3B0aW9uYWxfaGVh ZGVyLnNlY3Rpb25fYWxpZ25tZW50Owo+ICsgICAgICBmaWxlX2FsaWdubWVudCA9IAo+IHBlX2hk ci0+cGUzMnBsdXMub3B0aW9uYWxfaGVhZGVyLmZpbGVfYWxpZ25tZW50Owo+ICsgICAgICBvcHRf aGVhZGVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGdydWJfcGU2NF9vcHRpb25hbF9oZWFkZXIpOwo+ ICsgICAgfQo+ICsgIGVsc2UKPiArICAgIHsKPiArICAgICAgY29udGV4dC0+bnVtYmVyX29mX3J2 YV9hbmRfc2l6ZXMgPQo+IHBlX2hkci0+cGUzMi5vcHRpb25hbF9oZWFkZXIubnVtX2RhdGFfZGly ZWN0b3JpZXM7Cj4gKyAgICAgIGNvbnRleHQtPnNpemVfb2ZfaGVhZGVycyA9IAo+IHBlX2hkci0+ cGUzMi5vcHRpb25hbF9oZWFkZXIuaGVhZGVyX3NpemU7Cj4gKyAgICAgIGNvbnRleHQtPmltYWdl X3NpemUgPQo+IChncnViX3VpbnQ2NF90KXBlX2hkci0+cGUzMi5vcHRpb25hbF9oZWFkZXIuaW1h Z2Vfc2l6ZTsKPiArICAgICAgY29udGV4dC0+c2VjdGlvbl9hbGlnbm1lbnQgPQo+IHBlX2hkci0+ cGUzMi5vcHRpb25hbF9oZWFkZXIuc2VjdGlvbl9hbGlnbm1lbnQ7Cj4gKyAgICAgIGZpbGVfYWxp Z25tZW50ID0gcGVfaGRyLT5wZTMyLm9wdGlvbmFsX2hlYWRlci5maWxlX2FsaWdubWVudDsKPiAr ICAgICAgb3B0X2hlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBncnViX3BlMzJfb3B0aW9uYWxf aGVhZGVyKTsKPiArICAgIH0KPiArCj4gKyAgaWYgKGZpbGVfYWxpZ25tZW50ICUgMiAhPSAwKQo+ ICsgICAgewo+ICsgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJGaWxl IEFsaWdubWVudCBpcyBpbnZhbGlkCj4gKCVsZCkiLCBmaWxlX2FsaWdubWVudCk7Cj4gKyAgICAg IHJldHVybiBHUlVCX0VSUl9PVVRfT0ZfUkFOR0U7Cj4gKyAgICB9Cj4gKyAgaWYgKGZpbGVfYWxp Z25tZW50ID09IDApCj4gKyAgICBmaWxlX2FsaWdubWVudCA9IDB4MjAwOwo+ICsgIGlmIChjb250 ZXh0LT5zZWN0aW9uX2FsaWdubWVudCA9PSAwKQo+ICsgICAgY29udGV4dC0+c2VjdGlvbl9hbGln bm1lbnQgPSBHUlVCX0VGSV9QQUdFX1NJWkU7Cj4gKyAgaWYgKGNvbnRleHQtPnNlY3Rpb25fYWxp Z25tZW50IDwgZmlsZV9hbGlnbm1lbnQpCj4gKyAgICBjb250ZXh0LT5zZWN0aW9uX2FsaWdubWVu dCA9IGZpbGVfYWxpZ25tZW50Owo+ICsKPiArICBjb250ZXh0LT5udW1iZXJfb2Zfc2VjdGlvbnMg PSBwZV9oZHItPnBlMzIuY29mZl9oZWFkZXIubnVtX3NlY3Rpb25zOwo+ICsKPiArICBpZiAoRUZJ X0lNQUdFX05VTUJFUl9PRl9ESVJFQ1RPUllfRU5UUklFUyA8IAo+IGNvbnRleHQtPm51bWJlcl9v Zl9ydmFfYW5kX3NpemVzKQo+ICsgICAgewo+ICsgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9P VVRfT0ZfUkFOR0UsICJJbWFnZSBoZWFkZXIgdG9vIHNtYWxsIik7Cj4gKyAgICAgIHJldHVybiBH UlVCX0VSUl9PVVRfT0ZfUkFOR0U7Cj4gKyAgICB9Cj4gKwo+ICsgIGhlYWRlcl93aXRob3V0X2Rh dGFfZGlyID0gb3B0X2hlYWRlcl9zaXplCj4gKyAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mIChz dHJ1Y3QgZ3J1Yl9wZTMyX2RhdGFfZGlyZWN0b3J5KSAqCj4gRUZJX0lNQUdFX05VTUJFUl9PRl9E SVJFQ1RPUllfRU5UUklFUzsKPiArICBpZiAoKChncnViX3VpbnQzMl90KXBlX2hkci0+cGUzMi5j b2ZmX2hlYWRlci5vcHRpb25hbF9oZWFkZXJfc2l6ZSAtCj4gaGVhZGVyX3dpdGhvdXRfZGF0YV9k aXIpICE9Cj4gKyAgICAgICAgICAgICAgICAgIGNvbnRleHQtPm51bWJlcl9vZl9ydmFfYW5kX3Np emVzICogc2l6ZW9mIChzdHJ1Y3QKPiBncnViX3BlMzJfZGF0YV9kaXJlY3RvcnkpKQo+ICsgICAg ewo+ICsgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJJbWFnZSBoZWFk ZXIgb3ZlcmZsb3dzIGRhdGEKPiBkaXJlY3RvcnkiKTsKPiArICAgICAgcmV0dXJuIEdSVUJfRVJS X09VVF9PRl9SQU5HRTsKPiArICAgIH0KPiArCj4gKyAgc2VjdGlvbl9oZWFkZXJfb2Zmc2V0ID0g ZG9zX2hkci0+ZV9sZmFuZXcKPiArICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZiAo Z3J1Yl91aW50MzJfdCkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZiAoc3Ry dWN0IGdydWJfcGUzMl9jb2ZmX2hlYWRlcikKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAr IAo+IHBlX2hkci0+cGUzMi5jb2ZmX2hlYWRlci5vcHRpb25hbF9oZWFkZXJfc2l6ZTsKPiArICBp ZiAoKChncnViX3VpbnQzMl90KWNvbnRleHQtPmltYWdlX3NpemUgLSBzZWN0aW9uX2hlYWRlcl9v ZmZzZXQpIC8KPiBzaXplb2Yoc3RydWN0IGdydWJfcGUzMl9zZWN0aW9uX3RhYmxlKQo+ICsgICAg ICAgICAgICAgICAgICA8PSBjb250ZXh0LT5udW1iZXJfb2Zfc2VjdGlvbnMpCj4gKyAgICB7Cj4g KyAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwgIkltYWdlIHNlY3Rpb25z IG92ZXJmbG93IAo+IGltYWdlIHNpemUiKTsKPiArICAgICAgcmV0dXJuIEdSVUJfRVJSX09VVF9P Rl9SQU5HRTsKPiArICAgIH0KPiArCj4gKyAgaWYgKChjb250ZXh0LT5zaXplX29mX2hlYWRlcnMg LSBzZWN0aW9uX2hlYWRlcl9vZmZzZXQpIC8KPiBzaXplb2Yoc3RydWN0IGdydWJfcGUzMl9zZWN0 aW9uX3RhYmxlKQo+ICsgICAgICAgICAgICAgICAgICA8IChncnViX3VpbnQzMl90KWNvbnRleHQt Pm51bWJlcl9vZl9zZWN0aW9ucykKPiArICAgIHsKPiArICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9F UlJfT1VUX09GX1JBTkdFLCAiSW1hZ2Ugc2VjdGlvbnMgb3ZlcmZsb3cKPiBzZWN0aW9uIGhlYWRl cnMiKTsKPiArICAgICAgcmV0dXJuIEdSVUJfRVJSX09VVF9PRl9SQU5HRTsKPiArICAgIH0KPiAr Cj4gKyAgaWYgKCgoKGdydWJfdWludDhfdCAqKXBlX2hkciAtIChncnViX3VpbnQ4X3QgKilkYXRh KSArCj4gc2l6ZW9mKGdydWJfcGVfaGVhZGVyX3QpKSA+IGRhdGFzaXplKQo+ICsgICAgewo+ICsg ICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJJbnZhbGlkIGltYWdlIik7 Cj4gKyAgICAgIHJldHVybiBHUlVCX0VSUl9PVVRfT0ZfUkFOR0U7Cj4gKyAgICB9Cj4gKwo+ICsg IGlmIChwZV9oZHItPnBlMzIuc2lnbmF0dXJlWzBdICE9ICdQJyB8fAo+ICsgICAgICAgICAgICAg IHBlX2hkci0+cGUzMi5zaWduYXR1cmVbMV0gIT0gJ0UnIHx8Cj4gKyAgICAgICAgICAgICAgcGVf aGRyLT5wZTMyLnNpZ25hdHVyZVsyXSAhPSAweDAwIHx8Cj4gKyAgICAgICAgICAgICAgcGVfaGRy LT5wZTMyLnNpZ25hdHVyZVszXSAhPSAweDAwKQo+ICsgICAgewo+ICsgICAgICBncnViX2Vycm9y IChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULCAiVW5zdXBwb3J0ZWQgaW1hZ2UgCj4gdHlw ZSIpOwo+ICsgICAgICByZXR1cm4gR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVDsKPiArICAg IH0KPiArCj4gKyAgY29udGV4dC0+cGVfaGRyID0gcGVfaGRyOwo+ICsKPiArICBpZiAoaW1hZ2Vf aXNfNjRfYml0KHBlX2hkcikpCj4gKyAgICB7Cj4gKyAgICAgIGNvbnRleHQtPmltYWdlX2FkZHJl c3MgPSAKPiBwZV9oZHItPnBlMzJwbHVzLm9wdGlvbmFsX2hlYWRlci5pbWFnZV9iYXNlOwo+ICsg ICAgICBjb250ZXh0LT5lbnRyeV9wb2ludCA9IAo+IHBlX2hkci0+cGUzMnBsdXMub3B0aW9uYWxf aGVhZGVyLmVudHJ5X2FkZHI7Cj4gKyAgICAgIGNvbnRleHQtPnJlbG9jX2RpciA9Cj4gJnBlX2hk ci0+cGUzMnBsdXMub3B0aW9uYWxfaGVhZGVyLmJhc2VfcmVsb2NhdGlvbl90YWJsZTsKPiArICAg ICAgY29udGV4dC0+c2VjX2RpciA9IAo+ICZwZV9oZHItPnBlMzJwbHVzLm9wdGlvbmFsX2hlYWRl ci5jZXJ0aWZpY2F0ZV90YWJsZTsKPiArICAgIH0KPiArICBlbHNlCj4gKyAgICB7Cj4gKyAgICAg IGNvbnRleHQtPmltYWdlX2FkZHJlc3MgPSAKPiBwZV9oZHItPnBlMzIub3B0aW9uYWxfaGVhZGVy LmltYWdlX2Jhc2U7Cj4gKyAgICAgIGNvbnRleHQtPmVudHJ5X3BvaW50ID0gcGVfaGRyLT5wZTMy Lm9wdGlvbmFsX2hlYWRlci5lbnRyeV9hZGRyOwo+ICsgICAgICBjb250ZXh0LT5yZWxvY19kaXIg PSAKPiAmcGVfaGRyLT5wZTMyLm9wdGlvbmFsX2hlYWRlci5iYXNlX3JlbG9jYXRpb25fdGFibGU7 Cj4gKyAgICAgIGNvbnRleHQtPnNlY19kaXIgPSAKPiAmcGVfaGRyLT5wZTMyLm9wdGlvbmFsX2hl YWRlci5jZXJ0aWZpY2F0ZV90YWJsZTsKPiArICAgIH0KPiArCj4gKyAgY29udGV4dC0+Zmlyc3Rf c2VjdGlvbiA9IChzdHJ1Y3QgZ3J1Yl9wZTMyX3NlY3Rpb25fdGFibGUgKikoKGNoYXIgCj4gKilw ZV9oZHIgKwo+ICsgICAgICAgICAgcGVfaGRyLT5wZTMyLmNvZmZfaGVhZGVyLm9wdGlvbmFsX2hl YWRlcl9zaXplICsKPiArICAgICAgICAgIHNpemVvZihncnViX3VpbnQzMl90KSArIHNpemVvZihz dHJ1Y3QgCj4gZ3J1Yl9wZTMyX2NvZmZfaGVhZGVyKSk7Cj4gKwo+ICsgIGlmIChjb250ZXh0LT5p bWFnZV9zaXplIDwgY29udGV4dC0+c2l6ZV9vZl9oZWFkZXJzKQo+ICsgICAgewo+ICsgICAgICBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJJbnZhbGlkIGltYWdlIik7Cj4gKyAg ICAgIHJldHVybiBHUlVCX0VSUl9PVVRfT0ZfUkFOR0U7Cj4gKyAgICB9Cj4gKwo+ICsgIGlmICgo dW5zaWduZWQgbG9uZykoKGdydWJfdWludDhfdCAqKWNvbnRleHQtPnNlY19kaXIgLQo+IChncnVi X3VpbnQ4X3QgKilkYXRhKSA+Cj4gKyAgICAgIChkYXRhc2l6ZSAtIHNpemVvZihzdHJ1Y3QgZ3J1 Yl9wZTMyX2RhdGFfZGlyZWN0b3J5KSkpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJyb3IgKEdS VUJfRVJSX09VVF9PRl9SQU5HRSwgIkludmFsaWQgaW1hZ2UiKTsKPiArICAgICAgcmV0dXJuIEdS VUJfRVJSX09VVF9PRl9SQU5HRTsKPiArICAgIH0KPiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsK PiArfQo+ICsKPiArc3RhdGljIGdydWJfcGh5c19hZGRyX3QKPiAraW1hZ2VfYWRkcmVzcyAoZ3J1 Yl9waHlzX2FkZHJfdCBpbWFnZSwgZ3J1Yl91aW50NjRfdCBzeiwgZ3J1Yl91aW50NjRfdCAKPiBh ZGRyKQo+ICt7Cj4gKyAgaWYgKGFkZHIgPiBzeikKPiArICAgIHJldHVybiAwOwo+ICsKPiArICBy ZXR1cm4gaW1hZ2UgKyBhZGRyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtyZWxv Y2F0ZV9jb2ZmIChwZV9jb2ZmX2xvYWRlcl9pbWFnZV9jb250ZXh0X3QgKmNvbnRleHQsCj4gKyAg ICAgICAgICAgICAgIHN0cnVjdCBncnViX3BlMzJfc2VjdGlvbl90YWJsZSAqc2VjdGlvbiwKPiAr ICAgICAgICAgICAgICAgZ3J1Yl9waHlzX2FkZHJfdCBwaHlzX2FkZHIsIGdydWJfdWludDhfdCAq dmlydF9hZGRyLAo+ICsgICAgICAgICAgICAgICBtYmlfbG9hZF9kYXRhX3QgKm1sZCkKPiArewo+ ICsgIHN0cnVjdCBncnViX3BlMzJfZGF0YV9kaXJlY3RvcnkgKnJlbG9jX2Jhc2UsICpyZWxvY19i YXNlX2VuZDsKPiArICBncnViX3VpbnQ4X3QgKnJlbG9jX2J1ZmZlcjsKPiArICBncnViX3VpbnQ2 NF90IGFkanVzdDsKPiArICBzdHJ1Y3QgZ3J1Yl9wZTMyX2ZpeHVwX2Jsb2NrICpyZWxvYywgKnJl bG9jX2VuZDsKPiArICBncnViX3VpbnQ4X3QgKmZpeHVwLCAqZml4dXBfYmFzZTsKPiArICBncnVi X3VpbnQxNl90ICpmaXh1cF8xNjsKPiArICBncnViX3VpbnQzMl90ICpmaXh1cF8zMjsKPiArICBn cnViX3VpbnQ2NF90ICpmaXh1cF82NDsKPiArICBpbnQgbiA9IDA7Cj4gKyAgZ3J1Yl9lcnJfdCBy ZXQgPSBHUlVCX0VSUl9OT05FOwo+ICsKPiArICBpZiAoaW1hZ2VfaXNfNjRfYml0IChjb250ZXh0 LT5wZV9oZHIpKQo+ICsgICAgY29udGV4dC0+cGVfaGRyLT5wZTMycGx1cy5vcHRpb25hbF9oZWFk ZXIuaW1hZ2VfYmFzZSA9Cj4gKyAgICAgIChncnViX3VpbnQ2NF90KSh1bnNpZ25lZCBsb25nKXBo eXNfYWRkcjsKPiArICBlbHNlCj4gKyAgICBjb250ZXh0LT5wZV9oZHItPnBlMzIub3B0aW9uYWxf aGVhZGVyLmltYWdlX2Jhc2UgPQo+ICsgICAgICAoZ3J1Yl91aW50MzJfdCkodW5zaWduZWQgbG9u ZylwaHlzX2FkZHI7Cj4gKwo+ICsgIC8qIEFscmlnaHQsIHNvIGhlcmUncyBob3cgdGhpcyB3b3Jr czoKPiArICAgKgo+ICsgICAqIGNvbnRleHQtPnJlbG9jX2RpciBnaXZlcyB1cyB0d28gdGhpbmdz Ogo+ICsgICAqIC0gdGhlIFZBIHRoZSB0YWJsZSBvZiBiYXNlIHJlbG9jYXRpb24gYmxvY2tzIGFy ZSAobWF5YmUpIHRvIGJlCj4gKyAgICogICBtYXBwZWQgYXQgKHJlbG9jX2Rpci0+cnZhKQo+ICsg ICAqIC0gdGhlIHZpcnR1YWwgc2l6ZSAocmVsb2NfZGlyLT5zaXplKQo+ICsgICAqCj4gKyAgICog VGhlIC5yZWxvYyBzZWN0aW9uIChzZWN0aW9uIGhlcmUpIGdpdmVzIHVzIHNvbWUgb3RoZXIgdGhp bmdzOgo+ICsgICAqIC0gdGhlIG5hbWUhIGtpbmQgb2YuIChzZWN0aW9uLT5uYW1lKQo+ICsgICAq IC0gdGhlIHZpcnR1YWwgc2l6ZSAoc2VjdGlvbi0+dmlydHVhbF9zaXplKSwgd2hpY2ggc2hvdWxk IGJlIHRoZSAKPiBzYW1lCj4gKyAgICogICBhcyBSZWxvY0Rpci0+U2l6ZQo+ICsgICAqIC0gdGhl IHZpcnR1YWwgYWRkcmVzcyAoc2VjdGlvbi0+dmlydHVhbF9hZGRyZXNzKQo+ICsgICAqIC0gdGhl IGZpbGUgc2VjdGlvbiBzaXplIChzZWN0aW9uLT5yYXdfZGF0YV9zaXplKSwgd2hpY2ggaXMKPiAr ICAgKiAgIGEgbXVsdGlwbGUgb2Ygb3B0aW9uYWxfaGVhZGVyLT5maWxlX2FsaWdubWVudC4gIE9u bHkgdXNlZnVsIGZvciAKPiBpbWFnZQo+ICsgICAqICAgdmFsaWRhdGlvbiwgbm90IHJlYWxseSB1 c2VmdWwgZm9yIGl0ZXJhdGlvbiBib3VuZHMuCj4gKyAgICogLSB0aGUgZmlsZSBhZGRyZXNzIChz ZWN0aW9uLT5yYXdfZGF0YV9vZmZzZXQpCj4gKyAgICogLSBhIGJ1bmNoIG9mIHN0dWZmIHdlIGRv bid0IHVzZSB0aGF0J3MgMCBpbiBvdXIgYmluYXJpZXMgdXN1YWxseQo+ICsgICAqIC0gRmxhZ3Mg KHNlY3Rpb24tPmNoYXJhY3RlcmlzdGljcykKPiArICAgKgo+ICsgICAqIGFuZCB0aGVuIHRoZSB0 aGluZyB0aGF0J3MgYWN0dWFsbHkgYXQgdGhlIGZpbGUgYWRkcmVzcyBpcyBhbiAKPiBhcnJheQo+ ICsgICAqIG9mIHN0cnVjdCBncnViX3BlMzJfZml4dXBfYmxvY2sgc3RydWN0cyB3aXRoIHNvbWUg dmFsdWVzIHBhY2tlZCAKPiBiZWhpbmQKPiArICAgKiB0aGVtLiAgVGhlIGJsb2NrX3NpemUgZmll bGQgb2YgdGhpcyBzdHJ1Y3R1cmUgaW5jbHVkZXMgdGhlCj4gKyAgICogc3RydWN0dXJlIGl0c2Vs ZiwgYW5kIGFkZGluZyBpdCB0byB0aGF0IHN0cnVjdHVyZSdzIGFkZHJlc3Mgd2lsbAo+ICsgICAq IHlpZWxkIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBhcnJheS4KPiArICAgKi8KPiArCj4gKyAgcmVs b2NfYnVmZmVyID0gZ3J1Yl9tYWxsb2MgKHNlY3Rpb24tPnZpcnR1YWxfc2l6ZSk7Cj4gKyAgaWYg KCFyZWxvY19idWZmZXIpCj4gKyAgICAgIHJldHVybiBncnViX2Vycm5vOwo+ICsKPiArICBpZiAo Z3J1Yl9maWxlX3NlZWsgKG1sZC0+ZmlsZSwgc2VjdGlvbi0+cmF3X2RhdGFfb2Zmc2V0KSA9PSAK PiAoZ3J1Yl9vZmZfdCkgLTEpCj4gKyAgICB7Cj4gKyAgICAgIHJldCA9IGdydWJfZXJybm87Cj4g KyAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICBpZiAoZ3J1Yl9maWxlX3JlYWQgKG1s ZC0+ZmlsZSwgcmVsb2NfYnVmZmVyLCBzZWN0aW9uLT52aXJ0dWFsX3NpemUpCj4gKyAgICAgICE9 IChncnViX3NzaXplX3QpIHNlY3Rpb24tPnZpcnR1YWxfc2l6ZSkKPiArICAgIHsKPiArICAgICAg aWYgKCFncnViX2Vycm5vKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgIGdydWJfZXJyb3IgKEdS VUJfRVJSX0ZJTEVfUkVBRF9FUlJPUiwgInByZW1hdHVyZSBlbmQgb2YgZmlsZSAKPiAlcyIsCj4g KyAgICAgICAgICAgICAgICAgICAgICBtbGQtPmZpbGVuYW1lKTsKPiArICAgICAgICAgIHJldCA9 IEdSVUJfRVJSX0ZJTEVfUkVBRF9FUlJPUjsKPiArICAgICAgICB9Cj4gKyAgICAgIGVsc2UKPiAr ICAgICAgICAgIHJldCA9IGdydWJfZXJybm87Cj4gKyAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ ICsKPiArICByZWxvY19iYXNlID0gKHN0cnVjdCBncnViX3BlMzJfZGF0YV9kaXJlY3RvcnkgKily ZWxvY19idWZmZXI7Cj4gKyAgcmVsb2NfYmFzZV9lbmQgPSAoc3RydWN0IGdydWJfcGUzMl9kYXRh X2RpcmVjdG9yeSAqKShyZWxvY19idWZmZXIgKwo+IHNlY3Rpb24tPnZpcnR1YWxfc2l6ZSk7Cj4g Kwo+ICsgIGdydWJfZHByaW50ZiAoIm11bHRpYm9vdF9sb2FkZXIiLCAicmVsb2NhdGVfY29mZigp OiByZWxvY19iYXNlICVwCj4gcmVsb2NfYmFzZV9lbmQgJXBcbiIsCj4gKyAgICAgICAgICAgICAg ICByZWxvY19iYXNlLCByZWxvY19iYXNlX2VuZCk7Cj4gKwo+ICsgIGlmICghcmVsb2NfYmFzZSAm JiAhcmVsb2NfYmFzZV9lbmQpCj4gKyAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPiArCj4gKyAg aWYgKCFyZWxvY19iYXNlIHx8ICFyZWxvY19iYXNlX2VuZCkKPiArICAgIHsKPiArICAgICAgZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiUmVsb2MgdGFibGUgb3ZlcmZsb3dzIAo+ IGJpbmFyeSIpOwo+ICsgICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwoKSGkgUm9z cywKCklzIHJlbG9jX2Jhc2UgbWVtb3J5IGdvaW5nIHRvIGJlIHVzZWQgYWZ0ZXIgcmV0dXJuaW5n IGZyb20gaGVyZT8gSWYgbm90LCAKdGhlbiB3ZSBuZWVkIHRvIGZyZWUgcmVsb2NfYnVmZmVyIQpT b21ldGhpbmcgbGlrZSBiZWxvdywgc2ltaWxhcmlseSB1c2VkIGluIHRoZSBvdGhlciBwYXJ0cyBv ZiB0aGUgY29kZToKCnJldCA9IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKICAgICBnb3RvIG91dDsK Cj4gKyAgICB9Cj4gKwo+ICsgIGFkanVzdCA9IChncnViX3VpbnQ2NF90KShncnViX2VmaV91aW50 bl90KXBoeXNfYWRkciAtIAo+IGNvbnRleHQtPmltYWdlX2FkZHJlc3M7Cj4gKyAgaWYgKGFkanVz dCA9PSAwKQo+ICsgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gKwo+ICsgIHdoaWxlIChyZWxv Y19iYXNlIDwgcmVsb2NfYmFzZV9lbmQpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfdWludDE2X3Qg KmVudHJ5Owo+ICsgICAgICByZWxvYyA9IChzdHJ1Y3QgZ3J1Yl9wZTMyX2ZpeHVwX2Jsb2NrICop KChjaGFyKilyZWxvY19iYXNlKTsKPiArCj4gKyAgICAgIGlmICgocmVsb2NfYmFzZS0+c2l6ZSA9 PSAwKSB8fAo+ICsgICAgICAgICAgKHJlbG9jX2Jhc2UtPnNpemUgPiBjb250ZXh0LT5yZWxvY19k aXItPnNpemUpKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9BUkdVTUVOVCwKPiArICAgICAgICAgICAgICAgICAgICAgICJSZWxvYyAlZCBibG9jayBz aXplICVkIGlzIGludmFsaWRcbiIsIG4sCj4gKyAgICAgICAgICAgICAgICAgICAgICByZWxvY19i YXNlLT5zaXplKTsKPiArICAgICAgICAgIHJldCA9IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKPiAr ICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgIGVudHJ5ID0gJnJl bG9jLT5lbnRyaWVzWzBdOwo+ICsgICAgICByZWxvY19lbmQgPSAoc3RydWN0IGdydWJfcGUzMl9m aXh1cF9ibG9jayAqKQo+ICsgICAgICAgICgoY2hhciAqKXJlbG9jX2Jhc2UgKyByZWxvY19iYXNl LT5zaXplKTsKPiArCj4gKyAgICAgIGlmICgoZ3J1Yl91aW50OF90ICopcmVsb2NfZW5kIDwgcmVs b2NfYnVmZmVyIHx8Cj4gKyAgICAgICAgICAoZ3J1Yl91aW50OF90ICopcmVsb2NfZW5kID4gKHJl bG9jX2J1ZmZlciArIAo+IHNlY3Rpb24tPnZpcnR1YWxfc2l6ZSkpCj4gKyAgICAgICAgewo+ICsg ICAgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiUmVsb2MgZW50cnkg JWQgb3ZlcmZsb3dzIAo+IGJpbmFyeSIsCj4gKyAgICAgICAgICAgICAgICAgICAgICBuKTsKPiAr ICAgICAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CgpTYW1lIGFzIGZpcnN0IGNv bW1lbnQhIHdlIG5lZWQgdG8gZnJlZSByZWxvY19idWZmZXIhCgpUaGFuayB5b3UsCkF2bmlzaCBD aG91aGFuCgo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgIGZpeHVwX2Jhc2UgPSB2aXJ0X2FkZHIg KyByZWxvY19iYXNlLT5ydmE7Cj4gKyAgICAgIGlmICghZml4dXBfYmFzZSkKPiArICAgICAgICB7 Cj4gKyAgICAgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJSZWxvYyAl ZCBJbnZhbGlkIAo+IGZpeHVwYmFzZSIsIG4pOwo+ICsgICAgICAgICAgcmV0ID0gR1JVQl9FUlJf QkFEX0FSR1VNRU5UOwo+ICsgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgfQo+ICsKPiAr ICAgICAgd2hpbGUgKCh2b2lkICopZW50cnkgPCAodm9pZCAqKXJlbG9jX2VuZCkKPiArICAgICAg ICB7Cj4gKyAgICAgICAgICBmaXh1cCA9IGZpeHVwX2Jhc2UgKyAoKmVudHJ5ICYgMHhGRkYpOwo+ ICsgICAgICAgICAgc3dpdGNoICgoKmVudHJ5KSA+PiAxMikKPiArICAgICAgICAgICAgewo+ICsg ICAgICAgICAgICAgIGNhc2UgR1JVQl9QRTMyX1JFTF9CQVNFRF9BQlNPTFVURToKPiArICAgICAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgIGNhc2UgR1JVQl9QRTMyX1JFTF9CQVNF RF9ISUdIOgo+ICsgICAgICAgICAgICAgICAgZml4dXBfMTYgPSAoZ3J1Yl91aW50MTZfdCAqKWZp eHVwOwo+ICsgICAgICAgICAgICAgICAgKmZpeHVwXzE2ID0gKGdydWJfdWludDE2X3QpCj4gKyAg ICAgICAgICAgICAgICAgICgqZml4dXBfMTYgKyAoKGdydWJfdWludDE2X3QpKChncnViX3VpbnQz Ml90KWFkanVzdCAKPiA+PiAxNikpKTsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgICAgICAgIGNhc2UgR1JVQl9QRTMyX1JFTF9CQVNFRF9MT1c6Cj4gKyAgICAgICAgICAgICAg ICBmaXh1cF8xNiA9IChncnViX3VpbnQxNl90ICopZml4dXA7Cj4gKyAgICAgICAgICAgICAgICAq Zml4dXBfMTYgPSAoZ3J1Yl91aW50MTZfdCkgKCpmaXh1cF8xNiArCj4gKGdydWJfdWludDE2X3Qp YWRqdXN0KTsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgIGNhc2Ug R1JVQl9QRTMyX1JFTF9CQVNFRF9ISUdITE9XOgo+ICsgICAgICAgICAgICAgICAgZml4dXBfMzIg PSAoZ3J1Yl91aW50MzJfdCAqKWZpeHVwOwo+ICsgICAgICAgICAgICAgICAgKmZpeHVwXzMyID0g KmZpeHVwXzMyICsgKGdydWJfdWludDMyX3QpYWRqdXN0Owo+ICsgICAgICAgICAgICAgICAgYnJl YWs7Cj4gKyAgICAgICAgICAgICAgY2FzZSBHUlVCX1BFMzJfUkVMX0JBU0VEX0RJUjY0Ogo+ICsg ICAgICAgICAgICAgICAgZml4dXBfNjQgPSAoZ3J1Yl91aW50NjRfdCAqKWZpeHVwOwo+ICsgICAg ICAgICAgICAgICAgKmZpeHVwXzY0ID0gKmZpeHVwXzY0ICsgKGdydWJfdWludDY0X3QpYWRqdXN0 Owo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgZGVmYXVsdDoKPiAr ICAgICAgICAgICAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxvYyAlZCB1bmtub3duIHJlbG9jYXRpb24gdHlw ZSAlZCIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLCAoKmVudHJ5KSA+PiAxMik7 Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7Cj4gKyAgICAg ICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgZW50cnkg Kz0gMTsKPiArICAgICAgICB9Cj4gKyAgICAgIHJlbG9jX2Jhc2UgPSAoc3RydWN0IGdydWJfcGUz Ml9kYXRhX2RpcmVjdG9yeSAqKXJlbG9jX2VuZDsKPiArICAgICAgbisrOwo+ICsgICAgfQo+ICsK PiArb3V0Ogo+ICsgIGdydWJfZnJlZShyZWxvY19idWZmZXIpOwo+ICsKPiArICByZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtncnViX2Vycl90Cj4gK2dydWJfbXVsdGlib290Ml9sb2FkX3BlIChtYmlf bG9hZF9kYXRhX3QgKm1sZCkKPiArewo+ICsgIGludCBpOwo+ICsgIGdydWJfdWludDhfdCAqdmly dF9hZGRyOwo+ICsgIGdydWJfcGh5c19hZGRyX3QgcGh5c19hZGRyLCByZWxvY19iYXNlLCByZWxv Y19iYXNlX2VuZCwgYmFzZSwgZW5kOwo+ICsgIHN0cnVjdCBncnViX3BlMzJfc2VjdGlvbl90YWJs ZSAqcmVsb2Nfc2VjdGlvbiA9IE5VTEwsIAo+IGZha2VfcmVsb2Nfc2VjdGlvbjsKPiArICBzdHJ1 Y3QgZ3J1Yl9wZTMyX3NlY3Rpb25fdGFibGUgKnNlY3Rpb247Cj4gKyAgZ3J1Yl9yZWxvY2F0b3Jf Y2h1bmtfdCBjaDsKPiArICBwZV9jb2ZmX2xvYWRlcl9pbWFnZV9jb250ZXh0X3QgY29udGV4dDsK PiArICBncnViX2Vycl90IHJldCA9IEdSVUJfRVJSX05PTkU7Cj4gKyAgZ3J1Yl91aW50MzJfdCBz ZWN0aW9uX2FsaWdubWVudDsKPiArICBpbnQgZm91bmRfZW50cnlfcG9pbnQgPSAwOwo+ICsKPiAr ICByZXQgPSByZWFkX2hlYWRlcihtbGQtPmJ1ZmZlciwgTVVMVElCT09UX1NFQVJDSCwgJmNvbnRl eHQpOwo+ICsgIGlmIChyZXQpCj4gKyAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgIC8qCj4gKyAg ICogVGhlIHNwZWMgc2F5cywgdXNlbGVzc2x5LCBvZiBTZWN0aW9uQWxpZ25tZW50Ogo+ICsgICAq ID09PT09Cj4gKyAgICogVGhlIGFsaWdubWVudCAoaW4gYnl0ZXMpIG9mIHNlY3Rpb25zIHdoZW4g dGhleSBhcmUgbG9hZGVkIGludG8KPiArICAgKiBtZW1vcnkuIEl0IG11c3QgYmUgZ3JlYXRlciB0 aGFuIG9yIGVxdWFsIHRvIEZpbGVBbGlnbm1lbnQuIFRoZQo+ICsgICAqIGRlZmF1bHQgaXMgdGhl IHBhZ2Ugc2l6ZSBmb3IgdGhlIGFyY2hpdGVjdHVyZS4KPiArICAgKiA9PT09PQo+ICsgICAqIFdo aWNoIGRvZXNuJ3QgdGVsbCB5b3Ugd2hvc2UgcmVzcG9uc2liaWxpdHkgaXQgaXMgdG8gZW5mb3Jj ZSB0aGUKPiArICAgKiAiZGVmYXVsdCIsIG9yIHdoZW4uICBJdCBpbXBsaWVzIHRoYXQgdGhlIHZh bHVlIGluIHRoZSBmaWVsZCBtdXN0Cj4gKyAgICogYmUgPiBGaWxlQWxpZ25tZW50IChhbHNvIHBv b3JseSBkZWZpbmVkKSwgYnV0IGl0IGFwcGVhcnMgdmlzdWFsCj4gKyAgICogc3R1ZGlvIHdpbGwg aGFwcGlseSB3cml0ZSA1MTIgZm9yIEZpbGVBbGlnbm1lbnQgKGl0cyBkZWZhdWx0KSBhbmQKPiAr ICAgKiAwIGZvciBTZWN0aW9uQWxpZ25tZW50LCBpbnRlbmRpbmcgdG8gaW1wbHkgUEFHRV9TSVpF Lgo+ICsgICAqCj4gKyAgICogV2Ugb25seSBzdXBwb3J0IG9uZSBwYWdlIHNpemUsIHNvIGlmIGl0 J3MgemVybywgbmVyZiBpdCB0byA0MDk2Lgo+ICsgICAqLwo+ICsgIHNlY3Rpb25fYWxpZ25tZW50 ID0gY29udGV4dC5zZWN0aW9uX2FsaWdubWVudDsKPiArICBpZiAoc2VjdGlvbl9hbGlnbm1lbnQg PT0gMCkKPiArICAgIHNlY3Rpb25fYWxpZ25tZW50ID0gNDA5NjsKPiArCj4gKyAgc2VjdGlvbl9h bGlnbm1lbnQgPSBncnViX21heChzZWN0aW9uX2FsaWdubWVudCwgbWxkLT5hbGlnbik7Cj4gKwo+ ICsgIHJldCA9IGdydWJfcmVsb2NhdG9yX2FsbG9jX2NodW5rX2FsaWduX3NhZmUgCj4gKGdydWJf bXVsdGlib290Ml9yZWxvY2F0b3IsICZjaCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtbGQtPm1pbl9hZGRyLCAKPiBtbGQtPm1heF9hZGRyLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuaW1h Z2Vfc2l6ZSwKPiBzZWN0aW9uX2FsaWdubWVudCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtbGQtPnByZWZlcmVuY2UsCj4gbWxkLT5hdm9pZF9lZmlf Ym9vdF9zZXJ2aWNlcyk7Cj4gKwo+ICsgIGlmIChyZXQpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJf ZHByaW50ZiAoIm11bHRpYm9vdF9sb2FkZXIiLCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IK PiBPUyBpbWFnZVxuIik7Cj4gKyAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgIHZp cnRfYWRkciA9IGdldF92aXJ0dWFsX2N1cnJlbnRfYWRkcmVzcyAoY2gpOwo+ICsgIHBoeXNfYWRk ciA9IGdldF9waHlzaWNhbF90YXJnZXRfYWRkcmVzcyAoY2gpOwo+ICsKPiArICBpZiAoZ3J1Yl9m aWxlX3NlZWsgKG1sZC0+ZmlsZSwgMCkgPT0gKGdydWJfb2ZmX3QpIC0xKSB7Cj4gKyAgICAgIHJl dCA9IGdydWJfZXJybm87Cj4gKyAgICAgIGdvdG8gb3V0Owo+ICsgIH0KPiArCj4gKyAgaWYgKGdy dWJfZmlsZV9yZWFkIChtbGQtPmZpbGUsIHZpcnRfYWRkciwgY29udGV4dC5zaXplX29mX2hlYWRl cnMpCj4gKyAgICAgICE9IChncnViX3NzaXplX3QpIGNvbnRleHQuc2l6ZV9vZl9oZWFkZXJzKQo+ ICsgICAgewo+ICsgICAgICBpZiAoIWdydWJfZXJybm8pCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfRklMRV9SRUFEX0VSUk9SLCAicHJlbWF0dXJlIGVuZCBv ZiBmaWxlIAo+ICVzIiwKPiArICAgICAgICAgICAgICAgICAgICAgIG1sZC0+ZmlsZW5hbWUpOwo+ ICsgICAgICAgICAgcmV0ID0gR1JVQl9FUlJfRklMRV9SRUFEX0VSUk9SOwo+ICsgICAgICAgIH0K PiArICAgICAgZWxzZQo+ICsgICAgICAgICAgcmV0ID0gZ3J1Yl9lcnJubzsKPiArICAgICAgZ290 byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgIG1sZC0+bG9hZF9iYXNlX2FkZHIgPSBwaHlzX2FkZHI7 Cj4gKyAgbWxkLT5saW5rX2Jhc2VfYWRkciA9IGNvbnRleHQuaW1hZ2VfYWRkcmVzczsKPiArCj4g KyAgZ3J1Yl9kcHJpbnRmICgibXVsdGlib290X2xvYWRlciIsICJsb2FkX2Jhc2VfYWRkcjogMHgl MDh4Cj4gbGlua19iYXNlX2FkZHIgMHglMDh4XG4iLAo+ICsgICAgICAgICAgICAgICAgbWxkLT5s b2FkX2Jhc2VfYWRkciwgbWxkLT5saW5rX2Jhc2VfYWRkcik7Cj4gKwo+ICsgIGdydWJfbXVsdGli b290Ml9wYXlsb2FkX2VpcCA9IGNvbnRleHQuZW50cnlfcG9pbnQ7Cj4gKyAgZ3J1Yl9kcHJpbnRm ICgibXVsdGlib290X2xvYWRlciIsICJlbnRyeV9wb2ludDogMHglMDh4XG4iLAo+IGdydWJfbXVs dGlib290Ml9wYXlsb2FkX2VpcCk7Cj4gKyAgaWYgKCFncnViX211bHRpYm9vdDJfcGF5bG9hZF9l aXApCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwg ImludmFsaWQgZW50cnkgcG9pbnQiKTsKPiArICAgICAgcmV0ID0gR1JVQl9FUlJfQkFEX0FSR1VN RU5UOwo+ICsgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgZ3J1Yl9kcHJpbnRmICgi bXVsdGlib290X2xvYWRlciIsICJyZWxvY19kaXI6ICVwIHJlbG9jX3NpemU6IAo+IDB4JTA4eFxu IiwKPiArICAgICAgICAgICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY29udGV4dC5yZWxv Y19kaXItPnJ2YSwKPiArICAgICAgICAgICAgICAgIGNvbnRleHQucmVsb2NfZGlyLT5zaXplKTsK PiArICByZWxvY19iYXNlID0gaW1hZ2VfYWRkcmVzcyAocGh5c19hZGRyLCBjb250ZXh0LmltYWdl X3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVsb2NfZGly LT5ydmEpOwo+ICsgIC8qIFJlbG9jQmFzZUVuZCBoZXJlIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBs YXN0IGJ5dGUgb2YgdGhlIHRhYmxlICovCj4gKyAgcmVsb2NfYmFzZV9lbmQgPSBpbWFnZV9hZGRy ZXNzIChwaHlzX2FkZHIsIGNvbnRleHQuaW1hZ2Vfc2l6ZSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRleHQucmVsb2NfZGlyLT5ydmEKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsgY29udGV4dC5yZWxvY19kaXItPnNpemUgLSAxKTsKPiArICBn cnViX2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVyIiwgInJlbG9jX2Jhc2U6IDB4JTAxNmx4Cj4g cmVsb2NfYmFzZV9lbmQ6IDB4JTAxNmx4XG4iLAo+ICsgICAgICAgICAgICAgICAgcmVsb2NfYmFz ZSwgcmVsb2NfYmFzZV9lbmQpOwo+ICsKPiArICBzZWN0aW9uID0gY29udGV4dC5maXJzdF9zZWN0 aW9uOwo+ICsgIGZvciAoaSA9IDA7IGkgPCBjb250ZXh0Lm51bWJlcl9vZl9zZWN0aW9uczsgaSsr LCBzZWN0aW9uKyspCj4gKyAgICB7Cj4gKyAgICAgIGNoYXIgbmFtZVs5XTsKPiArCj4gKyAgICAg IGJhc2UgPSBpbWFnZV9hZGRyZXNzIChwaHlzX2FkZHIsIGNvbnRleHQuaW1hZ2Vfc2l6ZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24tPnZpcnR1YWxfYWRkcmVzcyk7Cj4g KyAgICAgIGVuZCA9IGltYWdlX2FkZHJlc3MgKHBoeXNfYWRkciwgY29udGV4dC5pbWFnZV9zaXpl LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT52aXJ0dWFsX2FkZHJlc3Mg Kwo+IHNlY3Rpb24tPnZpcnR1YWxfc2l6ZSAtMSk7Cj4gKwo+ICsgICAgICBncnViX3N0cm5jcHko bmFtZSwgc2VjdGlvbi0+bmFtZSwgOSk7Cj4gKyAgICAgIG5hbWVbOF0gPSAnXDAnOwo+ICsgICAg ICBncnViX2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVyIiwgIlNlY3Rpb24gJWQgXCIlc1wiIGF0 Cj4gMHglMDE2bHguLjB4JTAxNmx4XG4iLCBpLAo+ICsgICAgICAgICAgICAgICAgICAgbmFtZSwg YmFzZSwgZW5kKTsKPiArCj4gKyAgICAgIGlmIChlbmQgPCBiYXNlKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgIGdydWJfZHByaW50ZiAoIm11bHRpYm9vdF9sb2FkZXIiLCAiIGJhc2UgaXMgMHgl MDE2bHggYnV0Cj4gZW5kIGlzIDB4JTAxNmx4Li4uIGJhZC5cbiIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgYmFzZSwgZW5kKTsKPiArICAgICAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9BUkdVTUVOVCwKPiArICAgICAgICAgICAgICAgICAgICAgICJJbWFnZSBoYXMgaW52YWxpZCBu ZWdhdGl2ZSBzaXplIik7Cj4gKyAgICAgICAgICByZXQgPSBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7 Cj4gKyAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICBpZiAoc2Vj dGlvbi0+dmlydHVhbF9hZGRyZXNzIDw9IGNvbnRleHQuZW50cnlfcG9pbnQgJiYKPiArICAgICAg ICAgIChzZWN0aW9uLT52aXJ0dWFsX2FkZHJlc3MgKyBzZWN0aW9uLT5yYXdfZGF0YV9zaXplIC0g MSkKPiArICAgICAgICAgID4gY29udGV4dC5lbnRyeV9wb2ludCkKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICBmb3VuZF9lbnRyeV9wb2ludCsrOwo+ICsgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgi bXVsdGlib290X2xvYWRlciIsICIgc2VjdGlvbiBjb250YWlucyBlbnRyeSAKPiBwb2ludFxuIik7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgLyogV2UgZG8gd2FudCB0byBwcm9jZXNzIC5yZWxv YywgYnV0IGl0J3Mgb2Z0ZW4gbWFya2VkCj4gKyAgICAgICAqIGRpc2NhcmRhYmxlLCBzbyB3ZSBk b24ndCB3YW50IHRvIG1lbWNweSBpdC4gKi8KPiArICAgICAgaWYgKGdydWJfbWVtY21wIChzZWN0 aW9uLT5uYW1lLCAiLnJlbG9jXDBcMCIsIDgpID09IDApCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgaWYgKHJlbG9jX3NlY3Rpb24pCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIkltYWdlIGhhcyBtdWx0aXBsZSByZWxvY2F0aW9uIHNlY3Rpb25zIik7Cj4gKyAgICAg ICAgICAgICAgcmV0ID0gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwo+ICsgICAgICAgICAgICAgIGdv dG8gb3V0Owo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgLyogSWYgaXQgaGFzIG5v bnplcm8gc2l6ZXMsIGFuZCBvdXIgYm91bmRzIGNoZWNrCj4gKyAgICAgICAgICAgKiBtYWRlIHNl bnNlLCBhbmQgdGhlIFZBIGFuZCBzaXplIG1hdGNoIFJlbG9jRGlyJ3MKPiArICAgICAgICAgICAq IHZlcnNpb25zLCB0aGVuIHdlIGJlbGlldmUgaW4gdGhpcyBzZWN0aW9uIHRhYmxlLiAqLwo+ICsg ICAgICAgICAgaWYgKHNlY3Rpb24tPnJhd19kYXRhX3NpemUgJiYgc2VjdGlvbi0+dmlydHVhbF9z aXplICYmCj4gKyAgICAgICAgICAgICAgYmFzZSAmJiBlbmQgJiYgcmVsb2NfYmFzZSA9PSBiYXNl KQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgaWYgKHJlbG9jX2Jhc2VfZW5kID09 IGVuZCkKPiArICAgICAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgICAgZ3J1Yl9kcHJp bnRmICgibXVsdGlib290X2xvYWRlciIsICIgc2VjdGlvbiBpcwo+IHJlbG9jYXRpb24gc2VjdGlv blxuIik7Cj4gKyAgICAgICAgICAgICAgICAgIHJlbG9jX3NlY3Rpb24gPSBzZWN0aW9uOwo+ICsg ICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgIGVsc2UgaWYgKHJlbG9jX2Jhc2VfZW5k ICYmIHJlbG9jX2Jhc2VfZW5kIDwgZW5kKQo+ICsgICAgICAgICAgICAgICAgewo+ICsgICAgICAg ICAgICAgICAgICAvKiBCb2d1cyB2aXJ0dWFsIHNpemUgaW4gdGhlIHJlbG9jIHNlY3Rpb24gLS0g Cj4gUmVsb2NEaXIKPiArICAgICAgICAgICAgICAgICAgICogcmVwb3J0ZWQgYSBzbWFsbGVyIEJh c2UgUmVsb2NhdGlvbiBEaXJlY3RvcnkuIAo+IERlY3JlYXNlCj4gKyAgICAgICAgICAgICAgICAg ICAqIHRoZSBzZWN0aW9uJ3MgdmlydHVhbCBzaXplIHNvIHRoYXQgaXQgZXF1YWwgCj4gUmVsb2NE aXIncwo+ICsgICAgICAgICAgICAgICAgICAgKiBpZGVhLCBidXQgb25seSBmb3IgdGhlIHB1cnBv c2VzIG9mIAo+IHJlbG9jYXRlX2NvZmYoKS4gKi8KPiArICAgICAgICAgICAgICAgICAgZ3J1Yl9k cHJpbnRmICgibXVsdGlib290X2xvYWRlciIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiBzZWN0aW9uIGlzIChvdmVybG9uZykgcmVsb2NhdGlvbiAKPiBzZWN0aW9uXG4iKTsK PiArICAgICAgICAgICAgICAgICAgZ3J1Yl9tZW1jcHkgKCZmYWtlX3JlbG9jX3NlY3Rpb24sIHNl Y3Rpb24sIHNpemVvZiAKPiAqc2VjdGlvbik7Cj4gKyAgICAgICAgICAgICAgICAgIGZha2VfcmVs b2Nfc2VjdGlvbi52aXJ0dWFsX3NpemUgLT0gKGVuZCAtIAo+IHJlbG9jX2Jhc2VfZW5kKTsKPiAr ICAgICAgICAgICAgICAgICAgcmVsb2Nfc2VjdGlvbiA9ICZmYWtlX3JlbG9jX3NlY3Rpb247Cj4g KyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICBpZiAo IXJlbG9jX3NlY3Rpb24pCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICBncnViX2Rw cmludGYgKCJtdWx0aWJvb3RfbG9hZGVyIiwgIiBzZWN0aW9uIGlzIG5vdAo+IHJlbG9jIHNlY3Rp b24/XG4iKTsKPiArICAgICAgICAgICAgICBncnViX2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVy IiwgIiByZHM6IDB4JTA4eCwgdnM6IAo+ICUwOHhcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWN0aW9uLT5yYXdfZGF0YV9zaXplLCAKPiBzZWN0aW9uLT52aXJ0dWFsX3NpemUp Owo+ICsgICAgICAgICAgICAgIGdydWJfZHByaW50ZiAoIm11bHRpYm9vdF9sb2FkZXIiLCAiIGJh c2U6IDB4JTAxNmx4IGVuZDoKPiAweCUwMTZseFxuIiwgYmFzZSwgZW5kKTsKPiArICAgICAgICAg ICAgICBncnViX2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVyIiwgIiByZWxvY19iYXNlOgo+IDB4 JTAxNmx4IHJlbG9jX2Jhc2VfZW5kOiAweCUwMTZseFxuIiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlbG9jX2Jhc2UsIHJlbG9jX2Jhc2VfZW5kKTsKPiArICAgICAgICAgICAgfQo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgIGdydWJfZHByaW50ZiAoIm11bHRpYm9vdF9sb2FkZXIi LCAiIFNlY3Rpb24gY2hhcmFjdGVyaXN0aWNzIGFyZSAKPiAlMDh4XG4iLAo+ICsgICAgICAgICAg ICAgICAgICAgc2VjdGlvbi0+Y2hhcmFjdGVyaXN0aWNzKTsKPiArICAgICAgZ3J1Yl9kcHJpbnRm ICgibXVsdGlib290X2xvYWRlciIsICIgU2VjdGlvbiB2aXJ0dWFsIHNpemU6IAo+ICUwOHhcbiIs Cj4gKyAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT52aXJ0dWFsX3NpemUpOwo+ICsgICAgICBn cnViX2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVyIiwgIiBTZWN0aW9uIHJhd19kYXRhIHNpemU6 IAo+ICUwOHhcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5yYXdfZGF0YV9zaXpl KTsKPiArICAgICAgaWYgKHNlY3Rpb24tPmNoYXJhY3RlcmlzdGljcyAmIEdSVUJfUEUzMl9TQ05f TUVNX0RJU0NBUkRBQkxFKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgIGdydWJfZHByaW50ZiAo Im11bHRpYm9vdF9sb2FkZXIiLCAiIERpc2NhcmRpbmcgc2VjdGlvblxuIik7Cj4gKyAgICAgICAg ICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICBpZiAoIWJhc2UgfHwgIWVuZCkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICBncnViX2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVy IiwgIiBzZWN0aW9uIGlzIGludmFsaWRcbiIpOwo+ICsgICAgICAgICAgZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX0FSR1VNRU5ULCAiSW52YWxpZCBzZWN0aW9uIHNpemUiKTsKPiArICAgICAgICAg IHJldCA9IEdSVUJfRVJSX0JBRF9BUkdVTUVOVDsKPiArICAgICAgICAgIGdvdG8gb3V0Owo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgIGlmIChzZWN0aW9uLT5jaGFyYWN0ZXJpc3RpY3MgJiAKPiBH UlVCX1BFMzJfU0NOX0NOVF9VTklOSVRJQUxJWkVEX0RBVEEpCj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgaWYgKHNlY3Rpb24tPnJhd19kYXRhX3NpemUgIT0gMCkKPiArICAgICAgICAgICAgZ3J1 Yl9kcHJpbnRmICgibXVsdGlib290X2xvYWRlciIsICIgVU5JTklUSUFMSVpFRF9EQVRBCj4gc2Vj dGlvbiBoYXMgZGF0YT9cbiIpOwo+ICsgICAgICAgIH0KPiArICAgICAgZWxzZSBpZiAoc2VjdGlv bi0+dmlydHVhbF9hZGRyZXNzIDwgY29udGV4dC5zaXplX29mX2hlYWRlcnMgfHwKPiArICAgICAg ICAgICAgICAgc2VjdGlvbi0+cmF3X2RhdGFfb2Zmc2V0IDwgY29udGV4dC5zaXplX29mX2hlYWRl cnMpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FS R1VNRU5ULAo+ICsgICAgICAgICAgICAgICAgICAgICAgIlNlY3Rpb24gJWQgaXMgaW5zaWRlIGlt YWdlIGhlYWRlcnMiLCBpKTsKPiArICAgICAgICAgIHJldCA9IEdSVUJfRVJSX0JBRF9BUkdVTUVO VDsKPiArICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgIGlmIChz ZWN0aW9uLT5yYXdfZGF0YV9zaXplID4gMCkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICBncnVi X2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVyIiwgIiBjb3B5aW5nIDB4JTA4eCBieXRlcyB0bwo+ IDB4JTAxNmx4XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5yYXdfZGF0 YV9zaXplLCBiYXNlKTsKPiArCj4gKyAgICAgICAgICBpZiAoZ3J1Yl9maWxlX3NlZWsgKG1sZC0+ ZmlsZSwgc2VjdGlvbi0+cmF3X2RhdGFfb2Zmc2V0KSA9PQo+IChncnViX29mZl90KSAtMSkKPiAr ICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgIHJldCA9IGdydWJfZXJybm87Cj4gKyAgICAg ICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICBpZiAo Z3J1Yl9maWxlX3JlYWQgKG1sZC0+ZmlsZSwgdmlydF9hZGRyICsgKGJhc2UgLQo+IHBoeXNfYWRk ciksIHNlY3Rpb24tPnJhd19kYXRhX3NpemUpCj4gKyAgICAgICAgICAgICAgIT0gKGdydWJfc3Np emVfdCkgc2VjdGlvbi0+cmF3X2RhdGFfc2l6ZSkKPiArICAgICAgICAgICAgewo+ICsgICAgICAg ICAgICAgIGlmICghZ3J1Yl9lcnJubykKPiArICAgICAgICAgICAgICAgIHsKPiArICAgICAgICAg ICAgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfRklMRV9SRUFEX0VSUk9SLCAicHJlbWF0dXJl Cj4gZW5kIG9mIGZpbGUgJXMiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbGQt PmZpbGVuYW1lKTsKPiArICAgICAgICAgICAgICAgICAgcmV0ID0gR1JVQl9FUlJfRklMRV9SRUFE X0VSUk9SOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgIGVsc2UKPiArICAg ICAgICAgICAgICAgICAgcmV0ID0gZ3J1Yl9lcnJubzsKPiArICAgICAgICAgICAgICBnb3RvIG91 dDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgIGlmIChzZWN0aW9u LT5yYXdfZGF0YV9zaXplIDwgc2VjdGlvbi0+dmlydHVhbF9zaXplKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgIGdydWJfZHByaW50ZiAoIm11bHRpYm9vdF9sb2FkZXIiLCAiIHBhZGRpbmcgd2l0 aCAweCUwOHgKPiBieXRlcyBhdCAweCUwMTZseFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgc2VjdGlvbi0+dmlydHVhbF9zaXplIC0gCj4gc2VjdGlvbi0+cmF3X2RhdGFfc2l6ZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlY3Rpb24tPnJhd19kYXRhX3NpemUpOwo+ ICsgICAgICAgICAgZ3J1Yl9tZW1zZXQgKHZpcnRfYWRkciArIChiYXNlIC0gcGh5c19hZGRyKSAr Cj4gc2VjdGlvbi0+cmF3X2RhdGFfc2l6ZSwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICBz ZWN0aW9uLT52aXJ0dWFsX3NpemUgLSAKPiBzZWN0aW9uLT5yYXdfZGF0YV9zaXplKTsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICBncnViX2RwcmludGYgKCJtdWx0aWJvb3RfbG9hZGVyIiwgIiBm aW5pc2hlZCBzZWN0aW9uICVzXG4iLCAKPiBuYW1lKTsKPiArICAgIH0KPiArCj4gKyAgLyogNSA9 PSBFRklfSU1BR0VfRElSRUNUT1JZX0VOVFJZX0JBU0VSRUxPQyAqLwo+ICsgIGlmIChjb250ZXh0 Lm51bWJlcl9vZl9ydmFfYW5kX3NpemVzIDw9IDUpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgImltYWdlIGhhcyBubyByZWxvY2F0aW9uIAo+IGVu dHJ5XG4iKTsKPiArICAgICAgcmV0ID0gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwo+ICsgICAgICBn b3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgaWYgKGNvbnRleHQucmVsb2NfZGlyLT5zaXplICYm IHJlbG9jX3NlY3Rpb24pCj4gKyAgICB7Cj4gKyAgICAgIC8qIHJ1biB0aGUgcmVsb2NhdGlvbiBm aXh1cHMgKi8KPiArICAgICAgcmV0ID0gcmVsb2NhdGVfY29mZiAoJmNvbnRleHQsIHJlbG9jX3Nl Y3Rpb24sIHBoeXNfYWRkciwgCj4gdmlydF9hZGRyLCBtbGQpOwo+ICsKPiArICAgICAgaWYgKHJl dCkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJH VU1FTlQsICJyZWxvY2F0aW9uIGZhaWxlZCIpOwo+ICsgICAgICAgICAgZ290byBvdXQ7Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsKPiArICBpZiAoIWZvdW5kX2VudHJ5X3BvaW50KQo+ICsgICAg ewo+ICsgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJlbnRyeSBwb2lu dCBpcyBub3Qgd2l0aGluIAo+IHNlY3Rpb25zIik7Cj4gKyAgICAgIHJldCA9IEdSVUJfRVJSX0JB RF9BUkdVTUVOVDsKPiArICAgICAgZ290byBvdXQ7Cj4gKyAgICB9Cj4gKyAgaWYgKGZvdW5kX2Vu dHJ5X3BvaW50ID4gMSkKPiArICAgIHsKPiArICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0FSR1VNRU5ULCAiJWQgc2VjdGlvbnMgY29udGFpbiBlbnRyeSAKPiBwb2ludCIsCj4gKyAgICAg ICAgICAgICAgICAgIGZvdW5kX2VudHJ5X3BvaW50KTsKPiArICAgICAgcmV0ID0gR1JVQl9FUlJf QkFEX0FSR1VNRU5UOwo+ICsgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gK291dDoKPiAr ICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtib29sCj4gK2dydWJfbXVsdGlib290Ml9pc19wZSAo bWJpX2xvYWRfZGF0YV90ICptbGQpCj4gK3sKPiArICBncnViX3BlMzJfbXNkb3NfaGVhZGVyX3Qg KmRvc19oZHIgPSBtbGQtPmJ1ZmZlcjsKPiArCj4gKyAgcmV0dXJuIGRvc19oZHItPmVfbWFnaWMg PT0gR1JVQl9QRTMyX01BR0lDOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3J1Yi9lZmkv cGUzMi5oIGIvaW5jbHVkZS9ncnViL2VmaS9wZTMyLmgKPiBpbmRleCA0ZTZlOWQyNTRiZDMuLjJj OGY3YzNiODVhNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2dydWIvZWZpL3BlMzIuaAo+ICsrKyBi L2luY2x1ZGUvZ3J1Yi9lZmkvcGUzMi5oCj4gQEAgLTIwLDYgKzIwLDcgQEAKPiAgI2RlZmluZSBH UlVCX0VGSV9QRTMyX0hFQURFUgkxCj4gCj4gICNpbmNsdWRlIDxncnViL3R5cGVzLmg+Cj4gKyNp bmNsdWRlIDxncnViL2VmaS9hcGkuaD4KPiAgI2luY2x1ZGUgPGdydWIvZWZpL21lbW9yeS5oPgo+ IAo+ICAvKiBUaGUgTVNET1MgY29tcGF0aWJpbGl0eSBzdHViLiBUaGlzIHdhcyBjb3BpZWQgZnJv bSB0aGUgb3V0cHV0IG9mCj4gQEAgLTQ2LDYgKzQ3LDI4IEBACj4gCj4gICNkZWZpbmUgR1JVQl9Q RTMyX01TRE9TX1NUVUJfU0laRQkweDgwCj4gCj4gK3R5cGVkZWYgc3RydWN0IHsKPiArICBncnVi X3VpbnQxNl90ICBlX21hZ2ljOyAgICAvLy88IE1hZ2ljIG51bWJlci4KPiArICBncnViX3VpbnQx Nl90ICBlX2NibHA7ICAgICAvLy88IEJ5dGVzIG9uIGxhc3QgcGFnZSBvZiBmaWxlLgo+ICsgIGdy dWJfdWludDE2X3QgIGVfY3A7ICAgICAgIC8vLzwgUGFnZXMgaW4gZmlsZS4KPiArICBncnViX3Vp bnQxNl90ICBlX2NybGM7ICAgICAvLy88IFJlbG9jYXRpb25zLgo+ICsgIGdydWJfdWludDE2X3Qg IGVfY3BhcmhkcjsgIC8vLzwgU2l6ZSBvZiBoZWFkZXIgaW4gcGFyYWdyYXBocy4KPiArICBncnVi X3VpbnQxNl90ICBlX21pbmFsbG9jOyAvLy88IE1pbmltdW0gZXh0cmEgcGFyYWdyYXBocyBuZWVk ZWQuCj4gKyAgZ3J1Yl91aW50MTZfdCAgZV9tYXhhbGxvYzsgLy8vPCBNYXhpbXVtIGV4dHJhIHBh cmFncmFwaHMgbmVlZGVkLgo+ICsgIGdydWJfdWludDE2X3QgIGVfc3M7ICAgICAgIC8vLzwgSW5p dGlhbCAocmVsYXRpdmUpIFNTIHZhbHVlLgo+ICsgIGdydWJfdWludDE2X3QgIGVfc3A7ICAgICAg IC8vLzwgSW5pdGlhbCBTUCB2YWx1ZS4KPiArICBncnViX3VpbnQxNl90ICBlX2NzdW07ICAgICAv Ly88IENoZWNrc3VtLgo+ICsgIGdydWJfdWludDE2X3QgIGVfaXA7ICAgICAgIC8vLzwgSW5pdGlh bCBJUCB2YWx1ZS4KPiArICBncnViX3VpbnQxNl90ICBlX2NzOyAgICAgICAvLy88IEluaXRpYWwg KHJlbGF0aXZlKSBDUyB2YWx1ZS4KPiArICBncnViX3VpbnQxNl90ICBlX2xmYXJsYzsgICAvLy88 IEZpbGUgYWRkcmVzcyBvZiByZWxvY2F0aW9uIHRhYmxlLgo+ICsgIGdydWJfdWludDE2X3QgIGVf b3ZubzsgICAgIC8vLzwgT3ZlcmxheSBudW1iZXIuCj4gKyAgZ3J1Yl91aW50MTZfdCAgZV9yZXNb NF07ICAgLy8vPCBSZXNlcnZlZCB3b3Jkcy4KPiArICBncnViX3VpbnQxNl90ICBlX29lbWlkOyAg ICAvLy88IE9FTSBpZGVudGlmaWVyIChmb3IgZV9vZW1pbmZvKS4KPiArICBncnViX3VpbnQxNl90 ICBlX29lbWluZm87ICAvLy88IE9FTSBpbmZvcm1hdGlvbjsgZV9vZW1pZCBzcGVjaWZpYy4KPiAr ICBncnViX3VpbnQxNl90ICBlX3JlczJbMTBdOyAvLy88IFJlc2VydmVkIHdvcmRzLgo+ICsgIGdy dWJfdWludDMyX3QgIGVfbGZhbmV3OyAgIC8vLzwgRmlsZSBhZGRyZXNzIG9mIG5ldyBleGUgaGVh ZGVyLgo+ICt9IGdydWJfcGUzMl9tc2Rvc19oZWFkZXJfdDsKPiArCj4gICNkZWZpbmUgR1JVQl9Q RTMyX01BR0lDCQkJMHg1YTRkCj4gCj4gIHN0cnVjdCBncnViX21zZG9zX2ltYWdlX2hlYWRlcgo+ IEBAIC0yNDksNiArMjcyLDcgQEAgc3RydWN0IGdydWJfcGUzMl9zZWN0aW9uX3RhYmxlCj4gCj4g ICNkZWZpbmUgR1JVQl9QRTMyX1NDTl9DTlRfQ09ERQkJCTB4MDAwMDAwMjAKPiAgI2RlZmluZSBH UlVCX1BFMzJfU0NOX0NOVF9JTklUSUFMSVpFRF9EQVRBCTB4MDAwMDAwNDAKPiArI2RlZmluZSBH UlVCX1BFMzJfU0NOX0NOVF9VTklOSVRJQUxJWkVEX0RBVEEJMHgwMDAwMDA4MAo+ICAjZGVmaW5l IEdSVUJfUEUzMl9TQ05fTUVNX0RJU0NBUkRBQkxFCQkweDAyMDAwMDAwCj4gICNkZWZpbmUgR1JV Ql9QRTMyX1NDTl9NRU1fRVhFQ1VURQkJMHgyMDAwMDAwMAo+ICAjZGVmaW5lIEdSVUJfUEUzMl9T Q05fTUVNX1JFQUQJCQkweDQwMDAwMDAwCj4gQEAgLTM0OSw0ICszNzMsNDQgQEAgc3RydWN0IGdy dWJfcGUzMl9yZWxvYwo+ICAjZGVmaW5lIEdSVUJfUEUzMl9SRUxfSTM4Nl9ESVIzMgkweDYKPiAg I2RlZmluZSBHUlVCX1BFMzJfUkVMX0kzODZfUkVMMzIJMHgxNAo+IAo+ICtzdHJ1Y3QgZ3J1Yl9w ZTMyX2hlYWRlcl8zMgo+ICt7Cj4gKyAgY2hhciBzaWduYXR1cmVbR1JVQl9QRTMyX1NJR05BVFVS RV9TSVpFXTsKPiArICBzdHJ1Y3QgZ3J1Yl9wZTMyX2NvZmZfaGVhZGVyIGNvZmZfaGVhZGVyOwo+ ICsgIHN0cnVjdCBncnViX3BlMzJfb3B0aW9uYWxfaGVhZGVyIG9wdGlvbmFsX2hlYWRlcjsKPiAr fTsKPiArCj4gK3N0cnVjdCBncnViX3BlMzJfaGVhZGVyXzY0Cj4gK3sKPiArICBjaGFyIHNpZ25h dHVyZVtHUlVCX1BFMzJfU0lHTkFUVVJFX1NJWkVdOwo+ICsgIHN0cnVjdCBncnViX3BlMzJfY29m Zl9oZWFkZXIgY29mZl9oZWFkZXI7Cj4gKyAgc3RydWN0IGdydWJfcGU2NF9vcHRpb25hbF9oZWFk ZXIgb3B0aW9uYWxfaGVhZGVyOwo+ICt9Owo+ICsKPiArdHlwZWRlZiB1bmlvbgo+ICt7Cj4gKyAg c3RydWN0IGdydWJfcGUzMl9oZWFkZXJfMzIgcGUzMjsKPiArICBzdHJ1Y3QgZ3J1Yl9wZTMyX2hl YWRlcl82NCBwZTMycGx1czsKPiArfSBncnViX3BlX2hlYWRlcl90Owo+ICsKPiArc3RydWN0IHBl X2NvZmZfbG9hZGVyX2ltYWdlX2NvbnRleHQKPiArewo+ICsgIGdydWJfZWZpX3VpbnQ2NF90IGlt YWdlX2FkZHJlc3M7Cj4gKyAgZ3J1Yl9lZmlfdWludDY0X3QgaW1hZ2Vfc2l6ZTsKPiArICBncnVi X2VmaV91aW50NjRfdCBlbnRyeV9wb2ludDsKPiArICBncnViX2VmaV91aW50bl90IHNpemVfb2Zf aGVhZGVyczsKPiArICBncnViX2VmaV91aW50MTZfdCBpbWFnZV90eXBlOwo+ICsgIGdydWJfZWZp X3VpbnQxNl90IG51bWJlcl9vZl9zZWN0aW9uczsKPiArICBncnViX2VmaV91aW50MzJfdCBzZWN0 aW9uX2FsaWdubWVudDsKPiArICBzdHJ1Y3QgZ3J1Yl9wZTMyX3NlY3Rpb25fdGFibGUgKmZpcnN0 X3NlY3Rpb247Cj4gKyAgc3RydWN0IGdydWJfcGUzMl9kYXRhX2RpcmVjdG9yeSAqcmVsb2NfZGly Owo+ICsgIHN0cnVjdCBncnViX3BlMzJfZGF0YV9kaXJlY3RvcnkgKnNlY19kaXI7Cj4gKyAgZ3J1 Yl9lZmlfdWludDY0X3QgbnVtYmVyX29mX3J2YV9hbmRfc2l6ZXM7Cj4gKyAgZ3J1Yl9wZV9oZWFk ZXJfdCAqcGVfaGRyOwo+ICt9Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgcGVfY29mZl9sb2FkZXJf aW1hZ2VfY29udGV4dCAKPiBwZV9jb2ZmX2xvYWRlcl9pbWFnZV9jb250ZXh0X3Q7Cj4gKwo+ICsj ZGVmaW5lIEVGSV9JTUFHRV9OVU1CRVJfT0ZfRElSRUNUT1JZX0VOVFJJRVMgMTYKPiArCj4gICNl bmRpZiAvKiAhIEdSVUJfRUZJX1BFMzJfSEVBREVSICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUv Z3J1Yi9tdWx0aWJvb3QuaCBiL2luY2x1ZGUvZ3J1Yi9tdWx0aWJvb3QuaAo+IGluZGV4IGQ4ODQ3 Zjc1MzFkMy4uYzZhZjVjNzFiNGU4IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZ3J1Yi9tdWx0aWJv b3QuaAo+ICsrKyBiL2luY2x1ZGUvZ3J1Yi9tdWx0aWJvb3QuaAo+IEBAIC0xMDAsNiArMTAwLDkg QEAgc3RydWN0IG1iaV9sb2FkX2RhdGEKPiAgfTsKPiAgdHlwZWRlZiBzdHJ1Y3QgbWJpX2xvYWRf ZGF0YSBtYmlfbG9hZF9kYXRhX3Q7Cj4gCj4gK2Jvb2wKPiArZ3J1Yl9tdWx0aWJvb3RfaXNfZWxm IChtYmlfbG9hZF9kYXRhX3QgKm1sZCk7Cj4gKwo+ICAvKiBMb2FkIEVMRjMyIG9yIEVMRjY0LiAg Ki8KPiAgZ3J1Yl9lcnJfdAo+ICBncnViX211bHRpYm9vdF9sb2FkX2VsZiAobWJpX2xvYWRfZGF0 YV90ICptbGQpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2dydWIvbXVsdGlib290Mi5oIGIvaW5j bHVkZS9ncnViL211bHRpYm9vdDIuaAo+IGluZGV4IGI5MGFhNjk4OTY3NC4uNjE2OWNiNDQ3MmE3 IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZ3J1Yi9tdWx0aWJvb3QyLmgKPiArKysgYi9pbmNsdWRl L2dydWIvbXVsdGlib290Mi5oCj4gQEAgLTkyLDEwICs5MiwxOSBAQCBzdHJ1Y3QgbWJpX2xvYWRf ZGF0YQo+ICB9Owo+ICB0eXBlZGVmIHN0cnVjdCBtYmlfbG9hZF9kYXRhIG1iaV9sb2FkX2RhdGFf dDsKPiAKPiArYm9vbAo+ICtncnViX211bHRpYm9vdDJfaXNfZWxmIChtYmlfbG9hZF9kYXRhX3Qg Km1sZCk7Cj4gKwo+ICAvKiBMb2FkIEVMRjMyIG9yIEVMRjY0LiAgKi8KPiAgZ3J1Yl9lcnJfdAo+ ICBncnViX211bHRpYm9vdDJfbG9hZF9lbGYgKG1iaV9sb2FkX2RhdGFfdCAqbWxkKTsKPiAKPiAr Z3J1Yl9lcnJfdAo+ICtncnViX211bHRpYm9vdDJfbG9hZF9wZSAobWJpX2xvYWRfZGF0YV90ICpt bGQpOwo+ICsKPiArYm9vbAo+ICtncnViX211bHRpYm9vdDJfaXNfcGUgKG1iaV9sb2FkX2RhdGFf dCAqbWxkKTsKPiArCj4gIGV4dGVybiBncnViX3NpemVfdCBncnViX211bHRpYm9vdDJfcHVyZV9z aXplOwo+ICBleHRlcm4gZ3J1Yl9zaXplX3QgZ3J1Yl9tdWx0aWJvb3QyX2FsbG9jX21iaTsKPiAg ZXh0ZXJuIGdydWJfdWludDMyX3QgZ3J1Yl9tdWx0aWJvb3QyX3BheWxvYWRfZWlwOwo+IC0tCj4g Mi40My4wCj4gCj4gCj4gCj4gCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4g U3ViamVjdDogRGlnZXN0IEZvb3Rlcgo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKPiBHcnViLWRldmVs QGdudS5vcmcKPiBodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRl dmVsCj4gCj4gCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4gRW5kIG9mIEdy dWItZGV2ZWwgRGlnZXN0LCBWb2wgMjQxLCBJc3N1ZSAyOAo+ICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9y ZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==