From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 386603858C36 for ; Wed, 22 Nov 2023 09:31:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 386603858C36 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 386603858C36 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700645467; cv=none; b=qywUhuJA4FDI2/u+49Mre2X9dU6PE3Eb0QNtO7q0pjWciHhOK3cIvUXGoW4jMxWH0CdV+OUs3HZIfrtotIBzetavXI1QnZrdcXZxmGJEBo33fGbsloYiE2kSmzCzJmeJLEYyIThEywGctOGSTyg8pgIEApvo2b32lXNS07Enlro= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700645467; c=relaxed/simple; bh=m0//z10XBrEGeKNZtEGr+dLISeahSd7jBDC+QoFmBbE=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=OQJQ4ZEdwcpfO14hFnhFvgm2b4npsGIbQvrUiUvmt35/XrFXtRc3BzivHmjLwEg7MGLbkAjq0OBp8MyeW04aAMXvMbi910ffJf7JWCmvA+y+ljBteixYlJYNCmRBMZEBP7IxI//plJ+x4w78t6rnVAQa9BtFbYR0JAVJPBHE0mI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0353722.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AM8dRpE031150; Wed, 22 Nov 2023 09:31:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=content-type : message-id : date : mime-version : subject : references : from : to : cc : in-reply-to; s=pp1; bh=10fF+040OqVSAaf5UFl5R0/y6D1eKhfA78yeF+8Oxa8=; b=WU0GayEvmkGupWsnMoAsKAHvUTOuEKIk7Rv01c0tSJY+F5nvOQoJnS/pJAGK/xPHgXr8 WbzesqMColZ/MCHrilqjEGK8Js7rI7Y8jL4Bknw93NUVKw38mIfXNUC9pL93dOy6X07T ONFRqSZuxsdxgVYz6gFLa3c1ou+5sEjEp+we4wfSywYl8dTP1chFMfKZsJDMCCGJE9gB kDwU9EGEetWryF9++mhhq7De9Dh20cu47DURZDxhfJ4Y3heJKtpspUBLYiVhMefx9//N TqVSl6J+iTN7TIymMWAxh102TVqDfmbpMDxw1OAQESpQtuvzl7Pfgkc5JE/z6RzNqshw FQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uhdbrbgrs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Nov 2023 09:31:01 +0000 Received: from m0353722.ppops.net (m0353722.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3AM9T7kO029085; Wed, 22 Nov 2023 09:31:01 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uhdbrbgqb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Nov 2023 09:31:01 +0000 Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3AM7I81n013268; Wed, 22 Nov 2023 09:30:58 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 3uf7kt76tm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Nov 2023 09:30:58 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3AM9UtDh17695368 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Nov 2023 09:30:56 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C63AF2004B; Wed, 22 Nov 2023 09:30:55 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E71DA20040; Wed, 22 Nov 2023 09:30:49 +0000 (GMT) Received: from [9.177.4.225] (unknown [9.177.4.225]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 22 Nov 2023 09:30:49 +0000 (GMT) Content-Type: multipart/mixed; boundary="------------qEZ38rmAxYYs9w7lsbqX140r" Message-ID: <1f407c4c-fb0a-c9c8-6438-144cfa77fd4b@linux.ibm.com> Date: Wed, 22 Nov 2023 17:30:48 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: PING^1 [PATCH v3] sched: Change no_real_insns_p to no_real_nondebug_insns_p [PR108273] Content-Language: en-US References: <85b4098e-a72f-d013-ff17-8097971f71ba@linux.ibm.com> <09FEFDAE-698B-4B06-A896-8088B9B31539@linaro.org> <4675c26c-f230-b6d6-27c5-bc9f74736e38@linux.ibm.com> <41a4d065-c4b6-4a67-adf0-e84e942616c7@gmail.com> <93ce3468-a1ee-e77c-cbeb-a8c67a303bf9@ispras.ru> <7eb725d9-de7c-87ba-5ebd-f2e1485c5854@ispras.ru> <475af219-f250-a0f4-78b0-998f96fb24aa@linux.ibm.com> <9874e072-747a-39e9-da5e-d88f77b275aa@linux.ibm.com> <434b7d49-808e-5254-b023-a7e1dad29f81@ispras.ru> From: "Kewen.Lin" To: Alexander Monakov Cc: Richard Biener , Jeff Law , Maxim Kuvyrkov , GCC Patches , Richard Sandiford , Jeff Law , Vladimir Makarov , zhroma@ispras.ru, Andrey Belevantsev , Segher Boessenkool , Peter Bergner , Michael Meissner , Alexandre Oliva In-Reply-To: <434b7d49-808e-5254-b023-a7e1dad29f81@ispras.ru> X-TM-AS-GCONF: 00 X-Proofpoint-GUID: tlAdAEM-uuKN1jOrkkAW8BnVuSVlJRA_ X-Proofpoint-ORIG-GUID: L58kRD37_IiIJ27jLMzY_r8_YQvchzbj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-22_06,2023-11-21_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 clxscore=1015 impostorscore=0 mlxlogscore=999 spamscore=0 adultscore=0 mlxscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311220066 X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------qEZ38rmAxYYs9w7lsbqX140r Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit on 2023/11/17 20:55, Alexander Monakov wrote: > > On Fri, 17 Nov 2023, Kewen.Lin wrote: >>> I don't think you can run cleanup_cfg after sched_init. I would suggest >>> to put it early in schedule_insns. >> >> Thanks for the suggestion, I placed it at the beginning of haifa_sched_init >> instead, since schedule_insns invokes haifa_sched_init, although the >> calls rgn_setup_common_sched_info and rgn_setup_sched_infos are executed >> ahead but they are all "setup" functions, shouldn't affect or be affected >> by this placement. > > I was worried because sched_init invokes df_analyze, and I'm not sure if > cfg_cleanup can invalidate it. Thanks for further explaining! By scanning cleanup_cfg, it seems that it considers df, like compact_blocks checks df, try_optimize_cfg invokes df_analyze etc., but I agree that moving cleanup_cfg before sched_init makes more sense. > >>> I suspect this may be caused by invoking cleanup_cfg too late. >> >> By looking into some failures, I found that although cleanup_cfg is executed >> there would be still some empty blocks left, by analyzing a few failures there >> are at least such cases: >> 1. empty function body >> 2. block holding a label for return. >> 3. block without any successor. >> 4. block which becomes empty after scheduling some other block. >> 5. block which looks mergeable with its always successor but left. >> ... >> >> For 1,2, there is one single successor EXIT block, I think they don't affect >> state transition, for 3, it's the same. For 4, it depends on if we can have >> the assumption this kind of empty block doesn't have the chance to have debug >> insn (like associated debug insn should be moved along), I'm not sure. For 5, >> a reduced test case is: > > Oh, I should have thought of cases like these, really sorry about the slip > of attention, and thanks for showing a testcase for item 5. As Richard as > saying in his response, cfg_cleanup cannot be a fix here. The thing to check > would be changing no_real_insns_p to always return false, and see if the > situation looks recoverable (if it breaks bootstrap, regtest statistics of > a non-bootstrapped compiler are still informative). As you suggested, I forced no_real_insns_p to return false all the time, some issues got exposed, almost all of them are asserting NOTE_P insn shouldn't be encountered in those places, so the adjustments for most of them are just to consider NOTE_P or this kind of special block and so on. One draft patch is attached, it can be bootstrapped and regress-tested on ppc64{,le} and x86. btw, it's without the previous cfg_cleanup adjustment (hope it can get more empty blocks and expose more issues). The draft isn't qualified for code review but I hope it can provide some information on what kinds of changes are needed for the proposal. If this is the direction which we all agree on, I'll further refine it and post a formal patch. One thing I want to note is that this patch disable one assertion below: diff --git a/gcc/sched-rgn.cc b/gcc/sched-rgn.cc index e5964f54ead..abd334864fb 100644 --- a/gcc/sched-rgn.cc +++ b/gcc/sched-rgn.cc @@ -3219,7 +3219,7 @@ schedule_region (int rgn) } /* Sanity check: verify that all region insns were scheduled. */ - gcc_assert (sched_rgn_n_insns == rgn_n_insns); + // gcc_assert (sched_rgn_n_insns == rgn_n_insns); sched_finish_ready_list (); Some cases can cause this assertion to fail, it's due to the mismatch on to-be-scheduled and scheduled insn counts. The reason why it happens is that one block previously has only one INSN_P but while scheduling some other blocks it gets moved as well then we ends up with an empty block so that the only NOTE_P insn was counted then, but since this block isn't empty initially and NOTE_P gets skipped in a normal block, the count to-be-scheduled can't count it in. It can be fixed with special-casing this kind of block for counting like initially recording which block is empty and if a block isn't recorded before then fix up the count for it accordingly. I'm not sure if someone may have an argument that all the complication make this proposal beaten by previous special-casing debug insn approach, looking forward to more comments. BR, Kewen --------------qEZ38rmAxYYs9w7lsbqX140r Content-Type: text/plain; charset=UTF-8; name="0001-sched-Don-t-skip-empty-block-in-scheduling.patch" Content-Disposition: attachment; filename="0001-sched-Don-t-skip-empty-block-in-scheduling.patch" Content-Transfer-Encoding: base64 RnJvbSBkMzUwZjQxMWIyM2Y2MDY0YTMzYTcyYTZjYTdhZmM0OWIwY2NlYTY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXdlbiBMaW4gPGxpbmt3QGxpbnV4LmlibS5jb20+ CkRhdGU6IFdlZCwgMjIgTm92IDIwMjMgMDA6MDg6NTkgLTA2MDAKU3ViamVjdDogW1BBVENI XSBzY2hlZDogRG9uJ3Qgc2tpcCBlbXB0eSBibG9jayBpbiBzY2hlZHVsaW5nCgphdHQKLS0t CiBnY2MvaGFpZmEtc2NoZWQuY2MgfCAxNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tCiBnY2MvcnRsLmggICAgICAgICAgfCAgIDQgKy0KIGdjYy9z Y2hlZC1yZ24uY2MgICB8ICAgMiArLQogMyBmaWxlcyBjaGFuZ2VkLCAxMDMgaW5zZXJ0aW9u cygrKSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2hhaWZhLXNjaGVkLmNj IGIvZ2NjL2hhaWZhLXNjaGVkLmNjCmluZGV4IDhlOGFkZDcwOWIzLi42MjM3N2Q5OTE2MiAx MDA2NDQKLS0tIGEvZ2NjL2hhaWZhLXNjaGVkLmNjCisrKyBiL2djYy9oYWlmYS1zY2hlZC5j YwpAQCAtMTIwNyw2ICsxMjA3LDExIEBAIHJlY29tcHV0ZV90b2RvX3NwZWMgKHJ0eF9pbnNu ICpuZXh0LCBib29sIGZvcl9iYWNrdHJhY2spCiAgIGludCBuX3JlcGxhY2UgPSAwOwogICBi b29sIGZpcnN0X3AgPSB0cnVlOwogCisgIC8qIFdlIGRvbid0IHNraXAgbm9fcmVhbF9pbnNu c19wIGFueSBtb3JlLCBzbyBpdCdzIHBvc3NpYmxlIHRvCisgICAgIG1lZXQgTk9URSBpbnNu IG5vdywgZWFybHkgcmV0dXJuIGlmIHNvLiAgKi8KKyAgaWYgKE5PVEVfUCAobmV4dCkpCisg ICAgcmV0dXJuIDA7CisKICAgaWYgKHNkX2xpc3RzX2VtcHR5X3AgKG5leHQsIFNEX0xJU1Rf QkFDSykpCiAgICAgLyogTkVYVCBoYXMgYWxsIGl0cyBkZXBlbmRlbmNpZXMgcmVzb2x2ZWQu ICAqLwogICAgIHJldHVybiAwOwpAQCAtMTcyOCw2ICsxNzMzLDkgQEAgc2V0dXBfaW5zbl9y ZWdfcHJlc3N1cmVfaW5mbyAocnR4X2luc24gKmluc24pCiAKICAgZ2NjX2NoZWNraW5nX2Fz c2VydCAoIURFQlVHX0lOU05fUCAoaW5zbikpOwogCisgIGlmIChOT1RFX1AgKGluc24pKQor ICAgIHJldHVybjsKKwogICBleGNlc3NfY29zdF9jaGFuZ2UgPSAwOwogICBjYWxjdWxhdGVf cmVnX2RlYXRocyAoaW5zbiwgZGVhdGgpOwogICBwcmVzc3VyZV9pbmZvID0gSU5TTl9SRUdf UFJFU1NVUkUgKGluc24pOwpAQCAtNDAxNywxMCArNDAyNSwxMCBAQCBzY2hlZHVsZV9pbnNu IChydHhfaW5zbiAqaW5zbikKIAogICAvKiBTY2hlZHVsaW5nIGluc3RydWN0aW9uIHNob3Vs ZCBoYXZlIGFsbCBpdHMgZGVwZW5kZW5jaWVzIHJlc29sdmVkIGFuZAogICAgICBzaG91bGQg aGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVhZHkgbGlzdC4gICovCi0gIGdjY19hc3Nl cnQgKHNkX2xpc3RzX2VtcHR5X3AgKGluc24sIFNEX0xJU1RfSEFSRF9CQUNLKSk7CisgIGdj Y19hc3NlcnQgKE5PVEVfUCAoaW5zbikgfHwgc2RfbGlzdHNfZW1wdHlfcCAoaW5zbiwgU0Rf TElTVF9IQVJEX0JBQ0spKTsKIAogICAvKiBSZXNldCBkZWJ1ZyBpbnNucyBpbnZhbGlkYXRl ZCBieSBtb3ZpbmcgdGhpcyBpbnNuLiAgKi8KLSAgaWYgKE1BWV9IQVZFX0RFQlVHX0JJTkRf SU5TTlMgJiYgIURFQlVHX0lOU05fUCAoaW5zbikpCisgIGlmIChNQVlfSEFWRV9ERUJVR19C SU5EX0lOU05TICYmICFERUJVR19JTlNOX1AgKGluc24pICYmICFOT1RFX1AgKGluc24pKQog ICAgIGZvciAoc2RfaXQgPSBzZF9pdGVyYXRvcl9zdGFydCAoaW5zbiwgU0RfTElTVF9CQUNL KTsKIAkgc2RfaXRlcmF0b3JfY29uZCAoJnNkX2l0LCAmZGVwKTspCiAgICAgICB7CkBAIC00 MTA2LDYxICs0MTE0LDY0IEBAIHNjaGVkdWxlX2luc24gKHJ0eF9pbnNuICppbnNuKQogCiAg IGNoZWNrX2Nsb2JiZXJlZF9jb25kaXRpb25zIChpbnNuKTsKIAotICAvKiBVcGRhdGUgZGVw ZW5kZW50IGluc3RydWN0aW9ucy4gIEZpcnN0LCBzZWUgaWYgYnkgc2NoZWR1bGluZyB0aGlz IGluc24KLSAgICAgbm93IHdlIGJyb2tlIGEgZGVwZW5kZW5jZSBpbiBhIHdheSB0aGF0IHJl cXVpcmVzIHVzIHRvIGNoYW5nZSBhbm90aGVyCi0gICAgIGluc24uICAqLwotICBmb3IgKHNk X2l0ID0gc2RfaXRlcmF0b3Jfc3RhcnQgKGluc24sIFNEX0xJU1RfU1BFQ19CQUNLKTsKLSAg ICAgICBzZF9pdGVyYXRvcl9jb25kICgmc2RfaXQsICZkZXApOyBzZF9pdGVyYXRvcl9uZXh0 ICgmc2RfaXQpKQorICBpZiAoIU5PVEVfUCAoaW5zbikpCiAgICAgewotICAgICAgc3RydWN0 IGRlcF9yZXBsYWNlbWVudCAqZGVzYyA9IERFUF9SRVBMQUNFIChkZXApOwotICAgICAgcnR4 X2luc24gKnBybyA9IERFUF9QUk8gKGRlcCk7Ci0gICAgICBpZiAoUVVFVUVfSU5ERVggKHBy bykgIT0gUVVFVUVfU0NIRURVTEVECi0JICAmJiBkZXNjICE9IE5VTEwgJiYgZGVzYy0+aW5z biA9PSBwcm8pCi0JYXBwbHlfcmVwbGFjZW1lbnQgKGRlcCwgZmFsc2UpOwotICAgIH0KKyAg ICAgIC8qIFVwZGF0ZSBkZXBlbmRlbnQgaW5zdHJ1Y3Rpb25zLiAgRmlyc3QsIHNlZSBpZiBi eSBzY2hlZHVsaW5nIHRoaXMgaW5zbgorCSBub3cgd2UgYnJva2UgYSBkZXBlbmRlbmNlIGlu IGEgd2F5IHRoYXQgcmVxdWlyZXMgdXMgdG8gY2hhbmdlIGFub3RoZXIKKwkgaW5zbi4gICov CisgICAgICBmb3IgKHNkX2l0ID0gc2RfaXRlcmF0b3Jfc3RhcnQgKGluc24sIFNEX0xJU1Rf U1BFQ19CQUNLKTsKKwkgICBzZF9pdGVyYXRvcl9jb25kICgmc2RfaXQsICZkZXApOyBzZF9p dGVyYXRvcl9uZXh0ICgmc2RfaXQpKQorCXsKKwkgIHN0cnVjdCBkZXBfcmVwbGFjZW1lbnQg KmRlc2MgPSBERVBfUkVQTEFDRSAoZGVwKTsKKwkgIHJ0eF9pbnNuICpwcm8gPSBERVBfUFJP IChkZXApOworCSAgaWYgKFFVRVVFX0lOREVYIChwcm8pICE9IFFVRVVFX1NDSEVEVUxFRCAm JiBkZXNjICE9IE5VTEwKKwkgICAgICAmJiBkZXNjLT5pbnNuID09IHBybykKKwkgICAgYXBw bHlfcmVwbGFjZW1lbnQgKGRlcCwgZmFsc2UpOworCX0KIAotICAvKiBHbyB0aHJvdWdoIGFu ZCByZXNvbHZlIGZvcndhcmQgZGVwZW5kZW5jaWVzLiAgKi8KLSAgZm9yIChzZF9pdCA9IHNk X2l0ZXJhdG9yX3N0YXJ0IChpbnNuLCBTRF9MSVNUX0ZPUlcpOwotICAgICAgIHNkX2l0ZXJh dG9yX2NvbmQgKCZzZF9pdCwgJmRlcCk7KQotICAgIHsKLSAgICAgIHJ0eF9pbnNuICpuZXh0 ID0gREVQX0NPTiAoZGVwKTsKLSAgICAgIGJvb2wgY2FuY2VsbGVkID0gKERFUF9TVEFUVVMg KGRlcCkgJiBERVBfQ0FOQ0VMTEVEKSAhPSAwOworICAgICAgLyogR28gdGhyb3VnaCBhbmQg cmVzb2x2ZSBmb3J3YXJkIGRlcGVuZGVuY2llcy4gICovCisgICAgICBmb3IgKHNkX2l0ID0g c2RfaXRlcmF0b3Jfc3RhcnQgKGluc24sIFNEX0xJU1RfRk9SVyk7CisJICAgc2RfaXRlcmF0 b3JfY29uZCAoJnNkX2l0LCAmZGVwKTspCisJeworCSAgcnR4X2luc24gKm5leHQgPSBERVBf Q09OIChkZXApOworCSAgYm9vbCBjYW5jZWxsZWQgPSAoREVQX1NUQVRVUyAoZGVwKSAmIERF UF9DQU5DRUxMRUQpICE9IDA7CiAKLSAgICAgIC8qIFJlc29sdmUgdGhlIGRlcGVuZGVuY2Ug YmV0d2VlbiBJTlNOIGFuZCBORVhULgotCSBzZF9yZXNvbHZlX2RlcCAoKSBtb3ZlcyBjdXJy ZW50IGRlcCB0byBhbm90aGVyIGxpc3QgdGh1cwotCSBhZHZhbmNpbmcgdGhlIGl0ZXJhdG9y LiAgKi8KLSAgICAgIHNkX3Jlc29sdmVfZGVwIChzZF9pdCk7CisJICAvKiBSZXNvbHZlIHRo ZSBkZXBlbmRlbmNlIGJldHdlZW4gSU5TTiBhbmQgTkVYVC4KKwkgICAgIHNkX3Jlc29sdmVf ZGVwICgpIG1vdmVzIGN1cnJlbnQgZGVwIHRvIGFub3RoZXIgbGlzdCB0aHVzCisJICAgICBh ZHZhbmNpbmcgdGhlIGl0ZXJhdG9yLiAgKi8KKwkgIHNkX3Jlc29sdmVfZGVwIChzZF9pdCk7 CiAKLSAgICAgIGlmIChjYW5jZWxsZWQpCi0JewotCSAgaWYgKG11c3RfcmVzdG9yZV9wYXR0 ZXJuX3AgKG5leHQsIGRlcCkpCi0JICAgIHJlc3RvcmVfcGF0dGVybiAoZGVwLCBmYWxzZSk7 Ci0JICBjb250aW51ZTsKLQl9CisJICBpZiAoY2FuY2VsbGVkKQorCSAgICB7CisJICAgICAg aWYgKG11c3RfcmVzdG9yZV9wYXR0ZXJuX3AgKG5leHQsIGRlcCkpCisJCXJlc3RvcmVfcGF0 dGVybiAoZGVwLCBmYWxzZSk7CisJICAgICAgY29udGludWU7CisJICAgIH0KIAotICAgICAg LyogRG9uJ3QgYm90aGVyIHRyeWluZyB0byBtYXJrIG5leHQgYXMgcmVhZHkgaWYgaW5zbiBp cyBhIGRlYnVnCi0JIGluc24uICBJZiBpbnNuIGlzIHRoZSBsYXN0IGhhcmQgZGVwZW5kZW5j eSwgaXQgd2lsbCBoYXZlCi0JIGFscmVhZHkgYmVlbiBkaXNjb3VudGVkLiAgKi8KLSAgICAg IGlmIChERUJVR19JTlNOX1AgKGluc24pICYmICFERUJVR19JTlNOX1AgKG5leHQpKQotCWNv bnRpbnVlOworCSAgLyogRG9uJ3QgYm90aGVyIHRyeWluZyB0byBtYXJrIG5leHQgYXMgcmVh ZHkgaWYgaW5zbiBpcyBhIGRlYnVnCisJICAgICBpbnNuLiAgSWYgaW5zbiBpcyB0aGUgbGFz dCBoYXJkIGRlcGVuZGVuY3ksIGl0IHdpbGwgaGF2ZQorCSAgICAgYWxyZWFkeSBiZWVuIGRp c2NvdW50ZWQuICAqLworCSAgaWYgKERFQlVHX0lOU05fUCAoaW5zbikgJiYgIURFQlVHX0lO U05fUCAobmV4dCkpCisJICAgIGNvbnRpbnVlOwogCi0gICAgICBpZiAoIUlTX1NQRUNVTEFU SU9OX0JSQU5DSFlfQ0hFQ0tfUCAoaW5zbikpCi0JewotCSAgaW50IGVmZmVjdGl2ZV9jb3N0 OworCSAgaWYgKCFJU19TUEVDVUxBVElPTl9CUkFOQ0hZX0NIRUNLX1AgKGluc24pKQorCSAg ICB7CisJICAgICAgaW50IGVmZmVjdGl2ZV9jb3N0OwogCi0JICBlZmZlY3RpdmVfY29zdCA9 IHRyeV9yZWFkeSAobmV4dCk7CisJICAgICAgZWZmZWN0aXZlX2Nvc3QgPSB0cnlfcmVhZHkg KG5leHQpOwogCi0JICBpZiAoZWZmZWN0aXZlX2Nvc3QgPj0gMAotCSAgICAgICYmIFNDSEVE X0dST1VQX1AgKG5leHQpCi0JICAgICAgJiYgYWR2YW5jZSA8IGVmZmVjdGl2ZV9jb3N0KQot CSAgICBhZHZhbmNlID0gZWZmZWN0aXZlX2Nvc3Q7Ci0JfQotICAgICAgZWxzZQotCS8qIENo ZWNrIGFsd2F5cyBoYXMgb25seSBvbmUgZm9yd2FyZCBkZXBlbmRlbmNlICh0byB0aGUgZmly c3QgaW5zbiBpbgotCSAgIHRoZSByZWNvdmVyeSBibG9jayksIHRoZXJlZm9yZSwgdGhpcyB3 aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZS4gICovCi0JewotCSAgZ2NjX2Fzc2VydCAoc2Rf bGlzdHNfZW1wdHlfcCAoaW5zbiwgU0RfTElTVF9GT1JXKSk7Ci0JICBmaXhfcmVjb3Zlcnlf ZGVwcyAoUkVDT1ZFUllfQkxPQ0sgKGluc24pKTsKKwkgICAgICBpZiAoZWZmZWN0aXZlX2Nv c3QgPj0gMCAmJiBTQ0hFRF9HUk9VUF9QIChuZXh0KQorCQkgICYmIGFkdmFuY2UgPCBlZmZl Y3RpdmVfY29zdCkKKwkJYWR2YW5jZSA9IGVmZmVjdGl2ZV9jb3N0OworCSAgICB9CisJICBl bHNlCisJICAgIC8qIENoZWNrIGFsd2F5cyBoYXMgb25seSBvbmUgZm9yd2FyZCBkZXBlbmRl bmNlICh0byB0aGUgZmlyc3QgaW5zbgorCSAgICAgICBpbiB0aGUgcmVjb3ZlcnkgYmxvY2sp LCB0aGVyZWZvcmUsIHRoaXMgd2lsbCBiZSBleGVjdXRlZCBvbmx5CisJICAgICAgIG9uY2Uu ICAqLworCSAgICB7CisJICAgICAgZ2NjX2Fzc2VydCAoc2RfbGlzdHNfZW1wdHlfcCAoaW5z biwgU0RfTElTVF9GT1JXKSk7CisJICAgICAgZml4X3JlY292ZXJ5X2RlcHMgKFJFQ09WRVJZ X0JMT0NLIChpbnNuKSk7CisJICAgIH0KIAl9CiAgICAgfQogCkBAIC00MTcwLDYgKzQxODEs NyBAQCBzY2hlZHVsZV9pbnNuIChydHhfaW5zbiAqaW5zbikKICAgICAgbWF5IHVzZSB0aGlz IGluZm9ybWF0aW9uIHRvIGRlY2lkZSBob3cgdGhlIGluc3RydWN0aW9uIHNob3VsZAogICAg ICBiZSBhbGlnbmVkLiAgKi8KICAgaWYgKGlzc3VlX3JhdGUgPiAxCisgICAgICAmJiAhTk9U RV9QIChpbnNuKQogICAgICAgJiYgR0VUX0NPREUgKFBBVFRFUk4gKGluc24pKSAhPSBVU0UK ICAgICAgICYmIEdFVF9DT0RFIChQQVRURVJOIChpbnNuKSkgIT0gQ0xPQkJFUgogICAgICAg JiYgIURFQlVHX0lOU05fUCAoaW5zbikpCkBAIC01MDM2LDggKzUwNDgsMTEgQEAgZ2V0X2Vi Yl9oZWFkX3RhaWwgKGJhc2ljX2Jsb2NrIGJlZywgYmFzaWNfYmxvY2sgZW5kLAogLyogUmV0 dXJuIHRydWUgaWYgdGhlcmUgYXJlIG5vIHJlYWwgaW5zbnMgaW4gdGhlIHJhbmdlIFsgSEVB RCwgVEFJTCBdLiAgKi8KIAogYm9vbAotbm9fcmVhbF9pbnNuc19wIChjb25zdCBydHhfaW5z biAqaGVhZCwgY29uc3QgcnR4X2luc24gKnRhaWwpCitub19yZWFsX2luc25zX3AgKGNvbnN0 IHJ0eF9pbnNuICpoZWFkIEFUVFJJQlVURV9VTlVTRUQsCisJCSBjb25zdCBydHhfaW5zbiAq dGFpbCBBVFRSSUJVVEVfVU5VU0VEKQogeworICByZXR1cm4gZmFsc2U7CisjaWYgMAogICB3 aGlsZSAoaGVhZCAhPSBORVhUX0lOU04gKHRhaWwpKQogICAgIHsKICAgICAgIGlmICghTk9U RV9QIChoZWFkKSAmJiAhTEFCRUxfUCAoaGVhZCkpCkBAIC01MDQ1LDYgKzUwNjAsNyBAQCBu b19yZWFsX2luc25zX3AgKGNvbnN0IHJ0eF9pbnNuICpoZWFkLCBjb25zdCBydHhfaW5zbiAq dGFpbCkKICAgICAgIGhlYWQgPSBORVhUX0lOU04gKGhlYWQpOwogICAgIH0KICAgcmV0dXJu IHRydWU7CisjZW5kaWYKIH0KIAogLyogUmVzdG9yZS1vdGhlci1ub3RlczogTk9URV9MSVNU IGlzIHRoZSBlbmQgb2YgYSBjaGFpbiBvZiBub3RlcwpAQCAtNjIyNCw4ICs2MjQwLDkgQEAg Y29tbWl0X3NjaGVkdWxlIChydHhfaW5zbiAqcHJldl9oZWFkLCBydHhfaW5zbiAqdGFpbCwg YmFzaWNfYmxvY2sgKnRhcmdldF9iYikKICAgICAgICBzY2hlZHVsZWRfaW5zbnMuaXRlcmF0 ZSAoaSwgJmluc24pOwogICAgICAgIGkrKykKICAgICB7Ci0gICAgICBpZiAoY29udHJvbF9m bG93X2luc25fcCAobGFzdF9zY2hlZHVsZWRfaW5zbikKLQkgIHx8IGN1cnJlbnRfc2NoZWRf aW5mby0+YWR2YW5jZV90YXJnZXRfYmIgKCp0YXJnZXRfYmIsIGluc24pKQorICAgICAgaWYg KChjb250cm9sX2Zsb3dfaW5zbl9wIChsYXN0X3NjaGVkdWxlZF9pbnNuKQorCSAgIHx8IGN1 cnJlbnRfc2NoZWRfaW5mby0+YWR2YW5jZV90YXJnZXRfYmIgKCp0YXJnZXRfYmIsIGluc24p KQorCSAgJiYgIU5PVEVfUCAoaW5zbikpCiAJewogCSAgKnRhcmdldF9iYiA9IGN1cnJlbnRf c2NoZWRfaW5mby0+YWR2YW5jZV90YXJnZXRfYmIgKCp0YXJnZXRfYmIsIDApOwogCkBAIC02 MjQ1LDcgKzYyNjIsNyBAQCBjb21taXRfc2NoZWR1bGUgKHJ0eF9pbnNuICpwcmV2X2hlYWQs IHJ0eF9pbnNuICp0YWlsLCBiYXNpY19ibG9jayAqdGFyZ2V0X2JiKQogCSgqY3VycmVudF9z Y2hlZF9pbmZvLT5iZWdpbl9tb3ZlX2luc24pIChpbnNuLCBsYXN0X3NjaGVkdWxlZF9pbnNu KTsKICAgICAgIG1vdmVfaW5zbiAoaW5zbiwgbGFzdF9zY2hlZHVsZWRfaW5zbiwKIAkJIGN1 cnJlbnRfc2NoZWRfaW5mby0+bmV4dF90YWlsKTsKLSAgICAgIGlmICghREVCVUdfSU5TTl9Q IChpbnNuKSkKKyAgICAgIGlmICghREVCVUdfSU5TTl9QIChpbnNuKSAmJiAhTk9URV9QIChp bnNuKSkKIAlyZWVtaXRfbm90ZXMgKGluc24pOwogICAgICAgbGFzdF9zY2hlZHVsZWRfaW5z biA9IGluc247CiAgICAgfQpAQCAtNjI5Niw3ICs2MzEzLDcgQEAgcHJ1bmVfcmVhZHlfbGlz dCAoc3RhdGVfdCB0ZW1wX3N0YXRlLCBib29sIGZpcnN0X2N5Y2xlX2luc25fcCwKIAkgIGlu dCBjb3N0ID0gMDsKIAkgIGNvbnN0IGNoYXIgKnJlYXNvbiA9ICJyZXNvdXJjZSBjb25mbGlj dCI7CiAKLQkgIGlmIChERUJVR19JTlNOX1AgKGluc24pKQorCSAgaWYgKERFQlVHX0lOU05f UCAoaW5zbikgfHwgTk9URV9QIChpbnNuKSkKIAkgICAgY29udGludWU7CiAKIAkgIGlmIChz Y2hlZF9ncm91cF9mb3VuZCAmJiAhU0NIRURfR1JPVVBfUCAoaW5zbikKQEAgLTY1MDQsNyAr NjUyMSw3IEBAIHNjaGVkdWxlX2Jsb2NrIChiYXNpY19ibG9jayAqdGFyZ2V0X2JiLCBzdGF0 ZV90IGluaXRfc3RhdGUpCiAgICAgIGFuZCBjYXVzZWQgcHJvYmxlbXMgYmVjYXVzZSBzY2hl ZHVsZV9ibG9jayBhbmQgY29tcHV0ZV9mb3J3YXJkX2RlcGVuZGVuY2VzCiAgICAgIGhhZCBk aWZmZXJlbnQgbm90aW9ucyBvZiB3aGF0IHRoZSAiaGVhZCIgaW5zbiB3YXMuICAqLwogCi0g IGdjY19hc3NlcnQgKGhlYWQgIT0gdGFpbCB8fCBJTlNOX1AgKGhlYWQpKTsKKyAgZ2NjX2Fz c2VydCAoaGVhZCAhPSB0YWlsIHx8IChJTlNOX1AgKGhlYWQpIHx8IE5PVEVfUCAoaGVhZCkp KTsKIAogICBoYWlmYV9yZWNvdmVyeV9iYl9yZWNlbnRseV9hZGRlZF9wID0gZmFsc2U7CiAK QEAgLTY1NDQsOSArNjU2MSwxMCBAQCBzY2hlZHVsZV9ibG9jayAoYmFzaWNfYmxvY2sgKnRh cmdldF9iYiwgc3RhdGVfdCBpbml0X3N0YXRlKQogICBsYXN0X25vbmRlYnVnX3NjaGVkdWxl ZF9pbnNuID0gTlVMTDsKICAgbm9uc2NoZWR1bGVkX2luc25zX2JlZ2luID0gTlVMTDsKIAot ICBnY2NfYXNzZXJ0ICgoTk9URV9QIChsYXN0X3NjaGVkdWxlZF9pbnNuKQotCSAgICAgICB8 fCBERUJVR19JTlNOX1AgKGxhc3Rfc2NoZWR1bGVkX2luc24pKQotCSAgICAgICYmIEJMT0NL X0ZPUl9JTlNOIChsYXN0X3NjaGVkdWxlZF9pbnNuKSA9PSAqdGFyZ2V0X2JiKTsKKyAgZ2Nj X2Fzc2VydCAoCisgICAgKChOT1RFX1AgKGxhc3Rfc2NoZWR1bGVkX2luc24pIHx8IERFQlVH X0lOU05fUCAobGFzdF9zY2hlZHVsZWRfaW5zbikpCisgICAgICYmIEJMT0NLX0ZPUl9JTlNO IChsYXN0X3NjaGVkdWxlZF9pbnNuKSA9PSAqdGFyZ2V0X2JiKQorICAgIHx8IChoZWFkID09 IHRhaWwgJiYgTk9URV9QIChoZWFkKSkpOwogCiAgIC8qIEluaXRpYWxpemUgSU5TTl9RVUVV RS4gIFFfU0laRSBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGluc25zIGluIHRoZQogICAgICBx dWV1ZS4gICovCkBAIC02NzQ0LDYgKzY3NjIsMjEgQEAgc2NoZWR1bGVfYmxvY2sgKGJhc2lj X2Jsb2NrICp0YXJnZXRfYmIsIHN0YXRlX3QgaW5pdF9zdGF0ZSkKIAkJfQogCSAgICB9CiAK KwkgIC8qIEhhbmRsZSB0aGUgb25seSBOT1RFIGhlcmUgc2ltaWxhciB0byB0aGUgYWJvdmUg Zm9yIGRlYnVnIGluc24uICAqLworCSAgaWYgKHJlYWR5Lm5fcmVhZHkgJiYgTk9URV9QIChy ZWFkeV9lbGVtZW50ICgmcmVhZHksIDApKQorCSAgICAgICYmICgqY3VycmVudF9zY2hlZF9p bmZvLT5zY2hlZHVsZV9tb3JlX3ApICgpKQorCSAgICB7CisJICAgICAgcnR4X2luc24gKmlu c24gPSByZWFkeV9yZW1vdmVfZmlyc3QgKCZyZWFkeSk7CisJICAgICAgKCpjdXJyZW50X3Nj aGVkX2luZm8tPmJlZ2luX3NjaGVkdWxlX3JlYWR5KSAoaW5zbik7CisJICAgICAgc2NoZWR1 bGVkX2luc25zLnNhZmVfcHVzaCAoaW5zbik7CisJICAgICAgbGFzdF9zY2hlZHVsZWRfaW5z biA9IGluc247CisJICAgICAgYWR2YW5jZSA9IHNjaGVkdWxlX2luc24gKGluc24pOworCSAg ICAgIGdjY19hc3NlcnQgKGFkdmFuY2UgPT0gMCk7CisJICAgICAgaWYgKHJlYWR5Lm5fcmVh ZHkgPiAwKQorCQlyZWFkeV9zb3J0ICgmcmVhZHkpOworCSAgICAgIGdjY19hc3NlcnQgKCFy ZWFkeS5uX3JlYWR5KTsKKwkgICAgfQorCiAJICBpZiAobHMuZmlyc3RfY3ljbGVfaW5zbl9w ICYmICFyZWFkeS5uX3JlYWR5KQogCSAgICBicmVhazsKIApAQCAtNjg4Niw3ICs2OTE5LDcg QEAgc2NoZWR1bGVfYmxvY2sgKGJhc2ljX2Jsb2NrICp0YXJnZXRfYmIsIHN0YXRlX3QgaW5p dF9zdGF0ZSkKIAkgIC8qIFVwZGF0ZSBjb3VudGVycywgZXRjIGluIHRoZSBzY2hlZHVsZXIn cyBmcm9udCBlbmQuICAqLwogCSAgKCpjdXJyZW50X3NjaGVkX2luZm8tPmJlZ2luX3NjaGVk dWxlX3JlYWR5KSAoaW5zbik7CiAJICBzY2hlZHVsZWRfaW5zbnMuc2FmZV9wdXNoIChpbnNu KTsKLQkgIGdjY19hc3NlcnQgKE5PTkRFQlVHX0lOU05fUCAoaW5zbikpOworCSAgZ2NjX2Fz c2VydCAoTk9OREVCVUdfSU5TTl9QIChpbnNuKSB8fCBOT1RFX1AgKGluc24pKTsKIAkgIGxh c3Rfbm9uZGVidWdfc2NoZWR1bGVkX2luc24gPSBsYXN0X3NjaGVkdWxlZF9pbnNuID0gaW5z bjsKIAogCSAgaWYgKHJlY29nX21lbW9pemVkIChpbnNuKSA+PSAwKQpAQCAtNzE0NSwxNyAr NzE3OCwxNiBAQCBzY2hlZHVsZV9ibG9jayAoYmFzaWNfYmxvY2sgKnRhcmdldF9iYiwgc3Rh dGVfdCBpbml0X3N0YXRlKQogaW50CiBzZXRfcHJpb3JpdGllcyAocnR4X2luc24gKmhlYWQs IHJ0eF9pbnNuICp0YWlsKQogeworICAvKiBUaGlzIGlzIGEgbm9fcmVhbF9pbnNuc19wIGJs b2NrLiAgKi8KKyAgaWYgKGhlYWQgPT0gdGFpbCAmJiAhSU5TTl9QIChoZWFkKSkKKyAgICBy ZXR1cm4gMTsKKwogICBydHhfaW5zbiAqaW5zbjsKLSAgaW50IG5faW5zbjsKKyAgaW50IG5f aW5zbiA9IDA7CiAgIGludCBzY2hlZF9tYXhfaW5zbnNfcHJpb3JpdHkgPQogCWN1cnJlbnRf c2NoZWRfaW5mby0+c2NoZWRfbWF4X2luc25zX3ByaW9yaXR5OwogICBydHhfaW5zbiAqcHJl dl9oZWFkOwogCi0gIGlmIChoZWFkID09IHRhaWwgJiYgISBJTlNOX1AgKGhlYWQpKQotICAg IGdjY191bnJlYWNoYWJsZSAoKTsKLQotICBuX2luc24gPSAwOwotCiAgIHByZXZfaGVhZCA9 IFBSRVZfSU5TTiAoaGVhZCk7CiAgIGZvciAoaW5zbiA9IHRhaWw7IGluc24gIT0gcHJldl9o ZWFkOyBpbnNuID0gUFJFVl9JTlNOIChpbnNuKSkKICAgICB7CkBAIC03Njg4LDcgKzc3MjAs OSBAQCBmaXhfdGlja19yZWFkeSAocnR4X2luc24gKm5leHQpCiB7CiAgIGludCB0aWNrLCBk ZWxheTsKIAotICBpZiAoIURFQlVHX0lOU05fUCAobmV4dCkgJiYgIXNkX2xpc3RzX2VtcHR5 X3AgKG5leHQsIFNEX0xJU1RfUkVTX0JBQ0spKQorICBpZiAoIURFQlVHX0lOU05fUCAobmV4 dCkKKyAgICAgICYmICFOT1RFX1AgKG5leHQpCisgICAgICAmJiAhc2RfbGlzdHNfZW1wdHlf cCAobmV4dCwgU0RfTElTVF9SRVNfQkFDSykpCiAgICAgewogICAgICAgaW50IGZ1bGxfcDsK ICAgICAgIHNkX2l0ZXJhdG9yX2RlZiBzZF9pdDsKZGlmZiAtLWdpdCBhL2djYy9ydGwuaCBi L2djYy9ydGwuaAppbmRleCBlNGI2Y2MwZGJiNS4uMzRiM2YzMWQxZWUgMTAwNjQ0Ci0tLSBh L2djYy9ydGwuaAorKysgYi9nY2MvcnRsLmgKQEAgLTI2OTUsOCArMjY5NSw4IEBAIGRvIHsJ CQkJCQkJCSAgICAgICAgXAogLyogRHVyaW5nIHNjaGVkLCAxIGlmIFJUWCBpcyBhbiBpbnNu IHRoYXQgbXVzdCBiZSBzY2hlZHVsZWQgdG9nZXRoZXIKICAgIHdpdGggdGhlIHByZWNlZGlu ZyBpbnNuLiAgKi8KICNkZWZpbmUgU0NIRURfR1JPVVBfUChSVFgpCQkJCQkJXAotICAoUlRM X0ZMQUdfQ0hFQ0s0ICgiU0NIRURfR1JPVVBfUCIsIChSVFgpLCBERUJVR19JTlNOLCBJTlNO LAkJXAotCQkgICAgSlVNUF9JTlNOLCBDQUxMX0lOU04pLT5pbl9zdHJ1Y3QpCisgIChSVExf RkxBR19DSEVDSzUgKCJTQ0hFRF9HUk9VUF9QIiwgKFJUWCksIERFQlVHX0lOU04sIElOU04s CQlcCisJCSAgICBKVU1QX0lOU04sIENBTExfSU5TTiwgTk9URSktPmluX3N0cnVjdCkKIAog LyogRm9yIGEgU0VUIHJ0eCwgU0VUX0RFU1QgaXMgdGhlIHBsYWNlIHRoYXQgaXMgc2V0CiAg ICBhbmQgU0VUX1NSQyBpcyB0aGUgdmFsdWUgaXQgaXMgc2V0IHRvLiAgKi8KZGlmZiAtLWdp dCBhL2djYy9zY2hlZC1yZ24uY2MgYi9nY2Mvc2NoZWQtcmduLmNjCmluZGV4IGU1OTY0ZjU0 ZWFkLi5hYmQzMzQ4NjRmYiAxMDA2NDQKLS0tIGEvZ2NjL3NjaGVkLXJnbi5jYworKysgYi9n Y2Mvc2NoZWQtcmduLmNjCkBAIC0zMjE5LDcgKzMyMTksNyBAQCBzY2hlZHVsZV9yZWdpb24g KGludCByZ24pCiAgICAgfQogCiAgIC8qIFNhbml0eSBjaGVjazogdmVyaWZ5IHRoYXQgYWxs IHJlZ2lvbiBpbnNucyB3ZXJlIHNjaGVkdWxlZC4gICovCi0gIGdjY19hc3NlcnQgKHNjaGVk X3Jnbl9uX2luc25zID09IHJnbl9uX2luc25zKTsKKyAgLy8gZ2NjX2Fzc2VydCAoc2NoZWRf cmduX25faW5zbnMgPT0gcmduX25faW5zbnMpOwogCiAgIHNjaGVkX2ZpbmlzaF9yZWFkeV9s aXN0ICgpOwogCi0tIAoyLjM5LjMKCg== --------------qEZ38rmAxYYs9w7lsbqX140r--