From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id OClJFCaX62NYnzIAWB0awg (envelope-from ) for ; Tue, 14 Feb 2023 09:13:58 -0500 Received: by simark.ca (Postfix, from userid 112) id 4FAAE1E221; Tue, 14 Feb 2023 09:13:58 -0500 (EST) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=I/tMz4Tl; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-8.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 511361E110 for ; Tue, 14 Feb 2023 09:13:57 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id ED2FC3858412 for ; Tue, 14 Feb 2023 14:13:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ED2FC3858412 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1676384037; bh=/G/uib8jELjNaIYHEPpnoa+MiupNwaSYvM7s9LZkVj4=; h=To:CC:Subject:Date:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=I/tMz4TlIzEULCLOmyPzk3irY8jLwdkbgoEJjkIg+TdeXRAd4nKQFLDCci8mI8aQy Emc+COHVQIjzDm+Nr8QB53h+dxXFR66Z9tc0+Nvy8oTXqcXRsW/Mg7SnIGZ03vnDqL TpbaUyJg8AbklnzwoeZc3IUe4PVhI3/JIyYlCxAM= Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id D7BC93858434 for ; Tue, 14 Feb 2023 14:13:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D7BC93858434 Received: from pps.filterd (m0127361.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31EDxnoA034999; Tue, 14 Feb 2023 14:13:31 GMT Received: from nam02-bn1-obe.outbound.protection.outlook.com (mail-bn1nam02lp2047.outbound.protection.outlook.com [104.47.51.47]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nr9gemm65-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 14 Feb 2023 14:13:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N41I0O+zcI5GAYbXsgCul1crrQsD9raS/iv3UskhiVejCNxAFqciyjL016qC5SnNCbLWKzS7nmAaqgyhsRI5MQu4v2T6nRKKc2Gp5Fkwm1KCOjLZC+y4nQHpDTKMAXtp/ytLrEDVchUxxxuCgeei9RjAfe41M8/rQ3ekzfPCKDjUFjy/TFFU+ZPuRh2v3PbNzbGZps8DbSIdiIl/c3VhCCm6arnZpzWCU1smpDL1f+E0uEjqJvBVXFN3NufkyZe04oe+1McJ7NWe+fFgbDcfhT+D81z6IY4WI+E76jV5LlgCu6q5iCZWKa57JKoKVb/4ZnyDKX20FPEXUllh4KwdcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Qyq1O2uSU+aetMSE/q8evx1jJC9o3YLvLgywYtmP7ck=; b=ny/zc8PTRos1lTF1XCGUge8INQ7HGBMDpaAPlncye67uKhyd9KNAuM0KCND4lXNMh+BTuSWq8dh4MlYejuN1XmDnEFwV4Eu6cNUVhyvkxcPbZW+uGGpaR4vcYDeAyUD4wJIR0SkjkZCBqJGQOd7iDGP8L2gCMeWt7AXQWo859IwXBI0bymQi3ovvbpnpye/Ch2gJWKInHJreczpjuldisymlJGDB+lCLP/d7vmq1xDajnF1RbJimtckFiLDXilmvaZFKh2h14d/mzcJLYrs9UYWpZfxCLY3hcOysdcc244YFs+RlszzFE17zq5iRRfNJ6raDJYsT2mUJEOyQFte4rA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from CH2PR15MB3544.namprd15.prod.outlook.com (2603:10b6:610:5::26) by PH7PR15MB5937.namprd15.prod.outlook.com (2603:10b6:510:244::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.24; Tue, 14 Feb 2023 14:13:28 +0000 Received: from CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880]) by CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880%5]) with mapi id 15.20.6086.024; Tue, 14 Feb 2023 14:13:28 +0000 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" CC: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Topic: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Index: AQHY6DximDPpCqTL9kGyFvcEZokFBq4jlIiAgBFljYeAAA2HgIAIORaygAMrdQCACMPAdYADi8KAgAAbf+aAABUYgIAADhDtgAjHItiAAgYnAIACq/WKgAVsGwCABC6K8oAAZcYAgAq8WQ+AADoMgIAFnB/fgAUxEICABkBkK4AWHiQAgAFvY+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXOAALszAIABIz5JgAU9kgCAARgy1IACBimAgAL6kLSABOXQgIABOu4P Date: Tue, 14 Feb 2023 14:13:28 +0000 Message-ID: References: <09f2433177505899c9bd31347af9b43118e4f890.camel@de.ibm.com> <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> <10cb526ef81fd8a63fd776e51bf9505c8dff1e33.camel@de.ibm.com> In-Reply-To: <10cb526ef81fd8a63fd776e51bf9505c8dff1e33.camel@de.ibm.com> Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR15MB3544:EE_|PH7PR15MB5937:EE_ x-ms-office365-filtering-correlation-id: 404e5e10-90b9-4cd5-0013-08db0e95a4ec x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: IGlgIvmVNds6BJm8YBIfWgf5Ofzs7bXoK1BX1bSBPYhsLCV529jIt9m7c+qOBxQA+7vIsnl9ru0MKnhPHbPQDFdW/b9YwXb+EbrNf8bLudlhZOXvNSSqXXAWWKewWtf1mnumGyiGpzC877Klf8394pfe9032S+Qzk3wLWhuy9/H/+y7+Vy4Nkoo5+gDfcau4DmsX8wus09AlyjDZbMyh1F94JTesN3RLHxFJF4YG8jI9aadxINX47yJOb0WwzhdR4NHm2IETjVQfIYITYhnrbX0ymavRakTJSiMCP2BTQaVDBqD9cVLK9pWLNbFVpXqgrKEko1sFA18j5sSSJStlLAcrPcBIcAoRuSgU8aR2a474NzzJCuyeFuteck8a9cuMp5sSUC55lcFMK8u6Iijvp6K8S/62jnbB78QIzLls0pbh2NMNqhvUaQ1EbfPqHlcMW1K2Xd/skwmfwBiMfHz9xIbLnyuevlmzuoqCiD20jx4yz9YZqURIAZta78AY1tHzbxTlhdGoLBOoLh/EBe+ra7V0qmIR7qRGOucy9bRttKWuK6FhpjTdocXWP7464qPsVZgJkavmzBv8FS0ifVaWG+gE5y9NVblTj1LnWxqDjusbzFcQ08gdH3jqmXfJTBkywlkCg0OYcgeqhtEW/0BIjKalXrUf1a0m2m6jxDR3FQnK5tfhoovWfMPev06uPIVEfdO/km7VhdVncOdsxz84UA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR15MB3544.namprd15.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(376002)(396003)(346002)(366004)(39860400002)(136003)(451199018)(30864003)(2906002)(5660300002)(83380400001)(55016003)(26005)(38070700005)(186003)(6506007)(9686003)(53546011)(99936003)(91956017)(38100700002)(66446008)(4326008)(76116006)(122000001)(8936002)(8676002)(64756008)(66946007)(316002)(66476007)(66556008)(52536014)(41300700001)(478600001)(33656002)(86362001)(71200400001)(7696005)(19627405001)(110136005)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?Windows-1252?Q?F9xXu4A+QHOsvVEWQCL5p9m++w03g1Z1cKBER9X1qaC0mHc+ODB8hxnV?= =?Windows-1252?Q?yMF9lPVMiZrO/wEqrm0SD9xgePhXwCmuVYVDaRvd9jEqv0lKZ9PHdaAo?= =?Windows-1252?Q?EV/sb0w1GFC8stj1hy/3VgMYlzNOD9m3A3JmtgJMb7dBQeCSplAA30mq?= =?Windows-1252?Q?HH1/YnnydwMGDtH5g/C16Zz0UC3A5MoGvdYEN4Qn3UJ2EF8BXOJGwRqP?= =?Windows-1252?Q?i5gVxA9qrlztZ7E9bg2dzwAMCHFz7ae0fIK+6hRMf0JVgEPXTevqsGAs?= =?Windows-1252?Q?E6ab+amxtYkHeVW2MVuZSG3BCYRY4eSbYhuXsjJYdGM+ShL92syxoF84?= =?Windows-1252?Q?kiBbUyXy01Ki0twaHXp31DsJVa/72jWbdi59uJMa9ZzdmDlXX5/TFsIM?= =?Windows-1252?Q?iH9/tKiIEy4QcRyRC0O3xdTGqIL2puE7XkB3xa8xNDRrxFHGfkWiExn1?= =?Windows-1252?Q?jukzIpqvP1XGxsCPPRm3wVQajG5baEJPyvUxM0fzPsBSyQnAAdrur4xI?= =?Windows-1252?Q?SND/onKhbAoLp19rtsni5ziQqFoNvoWZmU+2ettpOfm6YDR1euPCVYP7?= =?Windows-1252?Q?+ThYhutaY13qlSM7i3Jx+NNFNDrzANvgU2THyos9P07wYnKdpO9PCcUt?= =?Windows-1252?Q?zp/cGFtQZ+Z39TuGgC/J4ilC68TuviAAPwrCYyS2XnBb56cBXvPeM7WU?= =?Windows-1252?Q?DSL4srU2TUIk/LVK9jDy+naK/c7l+dUhIO3wVRP1NP+tC3Sd5eW7EHLL?= =?Windows-1252?Q?zq2K41IUm9RmcVxbdLKNAcmpWrVnKfSTTeP936KFDL8fsK/DEKOjQ4gu?= =?Windows-1252?Q?ZG51g+IsYF2Sk3fqlO2D2vn7Xagu/xKiDXrhmgfU3+mVrvEuBG2r9/Ll?= =?Windows-1252?Q?XXg5LPIfC8RImw3elhQF1bO/FppMIl27rpG5TCCK46wnUY96HD/dQkO5?= =?Windows-1252?Q?7lPnpnhs7ehZ8q4bTaQTJUsaJj6pO3tR8QwEpmBHEbDYlpvYou3FQ03O?= =?Windows-1252?Q?UGa2Gm8wBMzz/1VgKohcUsjfTydbjkuBgYq3U2Foo8M1V0RQ13JTOhpl?= =?Windows-1252?Q?CZ7V/mF/+yZhFxuq5uNgkrPQSSpuJh8H1yUdJBENAHxNbzObr7Gxrj/3?= =?Windows-1252?Q?FFRD5TsfLRr9NJMm53TwL6HWs5KJeDs2VQP572IRQ+jI8yMqj+Tgr91g?= =?Windows-1252?Q?tDj1/dvKgaspZ2lTE6Nksr9wEktaJl3azRL0/T9rahYzeUctrdiIwaZe?= =?Windows-1252?Q?Xv/BfcYekruifveOKNaYxKq5GrYStJSiepmeEeqoM2C23QW2zRfNGKny?= =?Windows-1252?Q?I+W8pMrHqd5RpstjfLgxgP6pincVY4QSFWFAZs93mRf2fF1Wrd2WhsEw?= =?Windows-1252?Q?5CwLaJGZrD0QT9qDBaDkZ7j/lih+pyqMXRiE7dYxnMAeo/iJ9pAYaF9I?= =?Windows-1252?Q?bAnesL0n3x8IohEKH3Rzsd9LQX5MwmsRy2XeEIpFwS00bghs0oFxUdqa?= =?Windows-1252?Q?t/g9Hwa/HHUsPJ+BjMoMMc3ukkiSPZzssosA/SxZLnkJLquRVBnfJeKv?= =?Windows-1252?Q?iqR2WC8/8W6Xz+QhPNeV5umyVExo6+i+CuCF/ScvqpJDssYHT0I5b1wx?= =?Windows-1252?Q?CCjaN9DUtX+rDHaLbAia7U1X/DkMwapLTSqj9XW1loU3E0Tytysf4xAy?= =?Windows-1252?Q?Q+k1bDz9RmNVIjK++Ragr5ROAgxSS1L3?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_" MIME-Version: 1.0 X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR15MB3544.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 404e5e10-90b9-4cd5-0013-08db0e95a4ec X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Feb 2023 14:13:28.2434 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xUJzNaRfFxtkaChChmj6pkRPnidLsJKTLBsF2aQnbbZGNDKvBqtOmQxPbWKhz15bHefz/bK4tlRaZXycYoIX1w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR15MB5937 X-Proofpoint-GUID: 56vPhbU3c58JnstR8BEf1xvjWIGRIN-K X-Proofpoint-ORIG-GUID: 56vPhbU3c58JnstR8BEf1xvjWIGRIN-K X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-14_07,2023-02-14_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302140120 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Aditya Kamath1 via Gdb-patches Reply-To: Aditya Kamath1 Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" --_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi Ulrich, Tom and community, Thank you for all the guidance in this bug fix so far. So we have two problems to fix when we follow the child process before we c= ommit which I felt needed a discussion before we make any adjustments in ou= r AIX target code. Kindly find attached the patch where I have the latest v= ersion with me. I have removed the thread_info parameter in the call backs = since you mentioned that pthdb_user_t is what is defined in the OS. Consider the program below and the output as well for the explanation. So what is happening is that the when after a new process is born, its pthr= ead library is getting intialised and we have changed its ptid from ptid (p= id, 0, 0) to ptid (pid, 0, tid). Since we follow fork the code in inferior.= c file will switch to the thread child where the child is reported as ptid = (pid, 0, 0) but exists as ptid (pid, 0, tid). This leads to this crash. We = did try with two variables if you recall in the previous patch. But your po= int of pd_active being there for it was valid. So somehow something isn't c= orrect that I did not understand. We have pd_activate () in only two places= . So is follow_fork () is expecting us to switch to child process and then = change the ptid of the child?? If yes, how do we go?? And if not where are = we going wrong here. Also this ptid_t (pid, 0, 0) and our main thread being ptid_t (pid, 0, tid)= might need a smarted way to switch to the main thread's process space and = set the right current inferior process in pdc_read_memory. Kindly check it = in this patch and let me know if we can do it better. I have done a nicer w= ay in fetch_registers (). That is why I had changed the first parameter in = previous patch version of pdc_read_memory (). So these are the only places that is blocking us from committing this chang= e. Rest are same as before and remaing cases work correctly. -------------------------- >If you no longer use switch_to_thread, can't you then continue to >use ptid_t (user_current_pid)? So the reason is stated in the first paragraph of this email. >B.t.w. the fact that the message is now getting so long is >actually an indicator that it might be preferable to break >the patch out into multiple commits - the solib change is >one obvious stand-alone patch, and maybe it would make sense >to split off the aix-thread changes also needed for single- >inferior debugging from the multi-inferior support changes. >Given that we've already spent a long time on this patch, >I'm not insisting on this change - but something to keep >in mind for future patches. Yes, I have changed the commit message. Thank you. Sure will learn the art = of splitting patches. -------------------------- Waiting for a reply soon. Have a nice day ahead. With curiosity and regards, Aditya. ----------------------------------------- Code :- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ----------------------------------------- problematic output:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set follow-fork-mode child (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [Attaching after Thread 515 fork to child process 14090746] [New inferior 2 (process 14090746)] thread.c:1337: internal-error: switch_to_thread: Assertion `thr !=3D NULL' = failed. A problem internal to GDB has been detected, ----------------------------------------- Procstack for the crash. ---------- tid# 33554919 (pthread ID: 1) ---------- 0x090000000016a474 __fd_poll(??, ??, ??) + 0xb4 0x0000000100674954 poll(0x1104b6e70, 0x4, 0xffffffffffffffff) + 0x2c 0x0000000100675f5c gdb_wait_for_event(int)(0x1ffffe9c8) + 0xd0 0x0000000100674df8 gdb_do_one_event(int)(0xffffffff1072b9d0) + 0x1d4 0x00000001000093b4 gdb_readline_wrapper(char const*)(0x11072b9d0) + 0xec 0x0000000100038e2c defaulted_query(char const*, char, char*)(0x101742c80, = 0x101ab0850, 0xfffffffffffeca8) + 0x370 0x0000000100039218 query(char const*, ...)(0x101742c80) + 0x4c 0x00000001000375b0 internal_vproblem(internal_problem*, char const*, int, = char const*, char*)(0x110002540, 0x10190eb30, 0x53910166090, 0x10190ea30, 0= xfffffffffffef08) + 0x378 0x0000000100037a14 internal_verror(char const*, int, char const*, char*)(0= x10190eb30, 0x539ffffed10, 0x10190ea30, 0xfffffffffffef08) + 0x40 0x00000001000365b0 internal_error_loc(char const*, int, char const*, ...)(= 0x10190eb30, 0x53900000000, 0x10190ea30) + 0x58 0x00000001005a6ddc switch_to_thread(thread_info*)(0x0) + 0x48 0x00000001003767cc follow_fork()() + 0x4c8 0x0000000100385f68 handle_inferior_event(execution_control_state*)(0xfffff= fffffff3a8) + 0xda8 0x0000000100380e40 fetch_inferior_event()() + 0x2f8 0x0000000100a1ef04 inferior_event_handler(inferior_event_type)(0x10207830)= + 0x38 0x00000001003926fc infrun_async_inferior_event_handler(void*)(0x0) + 0x30 0x00000001006786c4 check_async_event_handlers()() + 0x94 0x0000000100674cd8 gdb_do_one_event(int)(0xfffffffffffff840) + 0xb4 0x0000000100001dcc start_event_loop()() + 0x28 0x0000000100001fd4 captured_command_loop()() + 0x58 0x000000010000414c captured_main(void*)(0xffffffffffffa60) + 0x2c 0x0000000100004220 gdb_main(captured_main_args*)(0xffffffffffffa60) + 0x20 0x0000000100000a9c main(0x200000000, 0xffffffffffffb00) + 0x58 ________________________________ From: Ulrich Weigand Sent: 14 February 2023 00:31 To: simark@simark.ca ; Aditya Kamath1 ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Aditya Kamath1 wrote: >Also find attached a document that I have proposed as a commit message. Thanks for the details. However, this is too much detail for a commit message - you don't need to include full debug sessions documenting how you found a bug; instead, please concisely summarize *what* the bug *is*, and how (at a high level) the patch fixes the bug. To be more specific, I'd write a commit message for this patch somewhat along these lines: Fix multi-threaded debugging under AIX Multi-threaded debugging using the libpthdebug debug interface is currently broken due to multiple issues. When debugging a single inferior, we were getting assertion failures in get_aix_thread_info as no tp->priv structure was allocated for the main thread. Fix this by switching the main thread from a (pid, 0, 0) ptid_t to a (pid, 0, tid) ptid_t and allocaing the tp->priv structure in sync_threadlists. As a result, the switch_to_thread call in pdc_read_data could now fail since the main thread no longer uses (pid, 0, 0). Replace the call by only switching inferior_ptid, the current inferior, and the current address space (like proc-service.c). Add similar switching to pdc_write_data where it was missing completely. When debugging multiple inferiors, an additional set of problems prevented correct multi-threaded debugging: First of all, aix-thread.c used to have a number of global variables holding per-inferior information. Switch these to a per-inferior data structure instead. Also, sync_threadlists was getting confused as we were comparing the list of threads returned by libpthdebug for *one* process with GDB's list of threads for *all* processes. Only use the GDB threads of the current inferior instead. Finally, the presence of the thread library in any but the first inferior was not correctly detected due to a bug in solib-aix.c, where the BFD file name for shared library members was changed when the library was loaded for the first time, which caused the library to no longer be recognized by name when loaded a second time, (I'm not saying you need to use this exact message - maybe I'm missing something or getting some details wrong. But this is the style you should be roughly going for.) B.t.w. the fact that the message is now getting so long is actually an indicator that it might be preferable to break the patch out into multiple commits - the solib change is one obvious stand-alone patch, and maybe it would make sense to split off the aix-thread changes also needed for single- inferior debugging from the multi-inferior support changes. Given that we've already spent a long time on this patch, I'm not insisting on this change - but something to keep in mind for future patches. Some additional comments on your latest changes: >However, we also need to keep in mind that before we think this will >work, our libpthread library is only ready when the following condition >in the wait () of aix-thread.c is satisfied. > >/* Check whether libpthdebug might be ready to be initialized. */ > if (!data->pd_active && status->kind () =3D=3D TARGET_WAITKIND_STOPPED > && status->sig () =3D=3D GDB_SIGNAL_TRAP) > >Until then changing the =93process =94 to =93thread =94 is incor= rect. >Even though the session is ready and initalised via pd_enable () and >pd_activate () >functions respectively. Therfore this made us to keep >a variable pthdebugready in all functions that lead to sync_threadlists () >so that we change the process thread to a thread with private data only >when libpthdebug is initialised for a particular process. I do not understand this change. The ->pd_active flag is supposed to track exactly that information, why do we need to duplicate it into yet another flag? Note that the point of the the "if" block above is that *it is calling pd_activacte()*, which will set ->pd_active if the library is in fact ready to be used. If there's anything wrong that causes pd_active to be set when the thread library is, in fact, not yet active, that's a bug we need to find and fix. Also, as long as the thread library is not ready, we should not be calling sync_threadlists in the first place. >So why did we make this change >- if (user_current_pid !=3D 0) >- switch_to_thread (current_inferior ()->process_target (), >- ptid_t (user_current_pid)); > in pdc_read_data and change our user variable which was the process > ID to a thread? Wasn=92t it already doing the job? >This now will use the ptid_t (user_current_pid) to switch the thread (). >However, our parent process or main thread of it, is threaded i.e is ptid_= t >(user_current_pid, 0, tid). Hence, we will crash with an assertion >failure that thread ptid_t (user_current_pid) has not been found. Ah, I see. That makes sense. >-static int pdc_read_data (pthdb_user_t, void *, pthdb_addr_t, size_t); >-static int pdc_write_data (pthdb_user_t, void *, pthdb_addr_t, size_t); >+static int pdc_read_data (thread_info*, void *, pthdb_addr_t, size_t); >+static int pdc_write_data (thread_info*, void *, pthdb_addr_t, size_t); These changes are also confusing. First of all, my understanding has been that the signature of these functions is fixed by the OS, since they are passed as callbacks to pthdb_session_init. This means you cannot just go and change them arbitrarily ... In addition, I'm not sure the change makes sense semantically. Note that you create one pd_session object *per inferior*, not one per thread. The pthdb_user_t identifies the pd_session, so it doesn't make sense to use the thread_info pointer as pthdb_user_t, even if that were possible from an API perspective. What was the reason for not just continuing to use the PID here? >+ scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_= ptid); > /* Before the first inferior is added, we pass inferior_ptid.pid () > from pd_enable () which is 0. There is no need to switch threads > during first initialisation. In the rest of the callbacks the > current thread needs to be correct. */ >- if (user_current_pid !=3D 0) >- switch_to_thread (current_inferior ()->process_target (), >- ptid_t (user_current_pid)); >+ inferior_ptid =3D user_current_thread->ptid; If you no longer use switch_to_thread, can't you then continue to use ptid_t (user_current_pid)? This is only used during the target_read_memory call, which should go down to the process target, which doesn't require TIDs. >+ tp =3D find_thread_ptid (proc_target, ptid_t (pid)); >+ >+ /* If the pthreadlibrary is not ready to debug >+ then this is just a main process which needs >+ a priv to be set. The if condition below does >+ the same. Otherwise we go to the for loop to >+ sync the pthread and GDB thread lists. */ This goes back to my question above, if the library is not yet ready, first of all we should never even get here, and second, all PTIDs should still be PID-only and nobody should ever look for any aix_thread_info ... > static ptid_t >-pd_activate (int pid) >+pd_activate (pid_t pid, int pthdebugready) I don't understand this flag - the point of this function is to *find out whether* the library is ready - either pthdb_session_init succeeds (and thus the library is ready) or it fails (and thus the library is not ready). > /* If we're debugging a core file or an attached inferior, the > pthread library may already have been initialized, so try to > activate thread debugging. */ >- pd_activate (inferior_ptid.pid ()); >+ pd_activate (inferior_ptid.pid (), 0); I guess this is the point? As the comment says, this should only ever make any difference for core files or attaching to an already running inferior, never for starting up an inferior under GDB. If this isn't correct, we need to understand why. Bye, Ulrich --_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_ Content-Type: application/octet-stream; name="0001-Fix-multi-thread-debug-bug-in-AIX.patch" Content-Description: 0001-Fix-multi-thread-debug-bug-in-AIX.patch Content-Disposition: attachment; filename="0001-Fix-multi-thread-debug-bug-in-AIX.patch"; size=30371; creation-date="Tue, 14 Feb 2023 14:12:36 GMT"; modification-date="Tue, 14 Feb 2023 14:13:27 GMT" Content-Transfer-Encoding: base64 RnJvbSAxM2M3MDM3YTA1OGE2M2IwNzljOWUyNzBiZWJmNGUwYTI3YWQyZGQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFkaGFyIEthbWF0aCA8QWRpdHlhLkthbWF0 aDFAaWJtLmNvbT4KRGF0ZTogVHVlLCAxNCBGZWIgMjAyMyAwNzo0NTowNSAtMDYwMApTdWJqZWN0 OiBbUEFUQ0hdIEZpeCBtdWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcgdW5kZXIgQUlYCgpNdWx0aS10 aHJlYWRlZCBkZWJ1Z2dpbmcgdXNpbmcgdGhlIGxpYnB0aGRlYnVnIGRlYnVnIGludGVyZmFjZQpp cyBjdXJyZW50bHkgYnJva2VuIGR1ZSB0byBtdWx0aXBsZSBpc3N1ZXMuCgpXaGVuIGRlYnVnZ2lu ZyBhIHNpbmdsZSBpbmZlcmlvciwgd2Ugd2VyZSBnZXR0aW5nIGFzc2VydGlvbgpmYWlsdXJlcyBp biBnZXRfYWl4X3RocmVhZF9pbmZvIGFzIG5vIHRwLT5wcml2IHN0cnVjdHVyZSB3YXMKYWxsb2Nh dGVkIGZvciB0aGUgbWFpbiB0aHJlYWQuCgpXZSBmaXhlZCB0aGlzIGJ5IHN3aXRjaGluZyB0aGUg bWFpbgp0aHJlYWQgZnJvbSBhIChwaWQsIDAsIDApIHB0aWRfdCB0byBhIChwaWQsIDAsIHRpZCkg cHRpZF90IGFuZAphbGxvY2FpbmcgdGhlIHRwLT5wcml2IHN0cnVjdHVyZSBpbiBzeW5jX3RocmVh ZGxpc3RzLgoKQXMgYSByZXN1bHQsIHRoZSBzd2l0Y2hfdG9fdGhyZWFkIGNhbGwgaW4gcGRjX3Jl YWRfZGF0YSBjb3VsZApub3cgZmFpbCBzaW5jZSB0aGUgbWFpbiB0aHJlYWQgbm8gbG9uZ2VyIHVz ZXMgKHBpZCwgMCwgMCkuCgpTbyB3ZSByZXBsYWNlZCB0aGUgY2FsbCBieSBvbmx5IHN3aXRjaGlu ZyBpbmZlcmlvcl9wdGlkLCB0aGUgY3VycmVudAppbmZlcmlvciwgYW5kIHRoZSBjdXJyZW50IGFk ZHJlc3Mgc3BhY2UgKGxpa2UgcHJvYy1zZXJ2aWNlLmMpLgpBZGQgc2ltaWxhciBzd2l0Y2hpbmcg dG8gcGRjX3dyaXRlX2RhdGEgd2hlcmUgaXQgd2FzIG1pc3NpbmcKY29tcGxldGVseS4KCldoZW4g ZGVidWdnaW5nIG11bHRpcGxlIGluZmVyaW9ycywgYW4gYWRkaXRpb25hbCBzZXQgb2YKcHJvYmxl bXMgcHJldmVudGVkIGNvcnJlY3QgbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nOgoKRmlyc3Qgb2Yg YWxsLCBhaXgtdGhyZWFkLmMgdXNlZCB0byBoYXZlIGEgbnVtYmVyIG9mIGdsb2JhbAp2YXJpYWJs ZXMgaG9sZGluZyBwZXItaW5mZXJpb3IgaW5mb3JtYXRpb24uCgpXZSBzd2l0Y2hlZCBoZXNlCnRv IGEgcGVyLWluZmVyaW9yIGRhdGEgc3RydWN0dXJlIGluc3RlYWQuCgpBbHNvLCBzeW5jX3RocmVh ZGxpc3RzIHdhcyBnZXR0aW5nIGNvbmZ1c2VkIGFzIHdlIHdlcmUKY29tcGFyaW5nIHRoZSBsaXN0 IG9mIHRocmVhZHMgcmV0dXJuZWQgYnkgbGlicHRoZGVidWcKZm9yICpvbmUqIHByb2Nlc3Mgd2l0 aCBHREIncyBsaXN0IG9mIHRocmVhZHMgZm9yICphbGwqCnByb2Nlc3Nlcy4gTm93IHdlIG9ubHkg dXNlIGhlIEdEQiB0aHJlYWRzIG9mIHRoZSBjdXJyZW50CmluZmVyaW9yIGluc3RlYWQuCgpGaW5h bGx5LCB0aGUgcHJlc2VuY2Ugb2YgdGhlIHRocmVhZCBsaWJyYXJ5IGluIGFueSBidXQKdGhlIGZp cnN0IGluZmVyaW9yIHdhcyBub3QgY29ycmVjdGx5IGRldGVjdGVkIGR1ZSB0byBhCmJ1ZyBpbiBz b2xpYi1haXguYywgd2hlcmUgdGhlIEJGRCBmaWxlIG5hbWUgZm9yIHNoYXJlZApsaWJyYXJ5IG1l bWJlcnMgd2FzIGNoYW5nZWQgd2hlbiB0aGUgbGlicmFyeSB3YXMgbG9hZGVkCmZvciB0aGUgZmly c3QgdGltZSwgd2hpY2ggY2F1c2VkIHRoZSBsaWJyYXJ5IHRvIG5vIGxvbmdlcgpiZSByZWNvZ25p emVkIGJ5IG5hbWUgd2hlbiBsb2FkZWQgYSBzZWNvbmQgdGltZSwKLS0tCiBnZGIvYWl4LXRocmVh ZC5jIHwgMzkxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t CiBnZGIvc29saWItYWl4LmMgIHwgIDE0ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDI2MyBpbnNlcnRp b25zKCspLCAxNDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2RiL2FpeC10aHJlYWQuYyBi L2dkYi9haXgtdGhyZWFkLmMKaW5kZXggZTU1NmMxNTM1NzYuLmM5MDBiZTUzZWU1IDEwMDY0NAot LS0gYS9nZGIvYWl4LXRocmVhZC5jCisrKyBiL2dkYi9haXgtdGhyZWFkLmMKQEAgLTY4LDEwICs2 OCw2IEBAIHN0YXRpYyBib29sIGRlYnVnX2FpeF90aHJlYWQ7CiAjZGVmaW5lIHB0aGRiX3RpZF90 CXRpZF90CiAjZW5kaWYKIAotLyogUmV0dXJuIHdoZXRoZXIgdG8gdHJlYXQgUElEIGFzIGEgZGVi dWdnYWJsZSB0aHJlYWQgaWQuICAqLwotCi0jZGVmaW5lIFBEX1RJRChwdGlkKQkocGRfYWN0aXZl ICYmIHB0aWQudGlkICgpICE9IDApCi0KIC8qIFN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWVzIHJl dHVybmVkIGJ5IHB0aGRiIGNhbGxiYWNrcy4gICovCiAKICNkZWZpbmUgUERDX1NVQ0NFU1MJUFRI REJfU1VDQ0VTUwpAQCAtMTQ0LDI0ICsxNDAsNiBAQCBjbGFzcyBhaXhfdGhyZWFkX3RhcmdldCBm aW5hbCA6IHB1YmxpYyB0YXJnZXRfb3BzCiAKIHN0YXRpYyBhaXhfdGhyZWFkX3RhcmdldCBhaXhf dGhyZWFkX29wczsKIAotLyogQWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBsaWJwdGhyZWFk IHdpbGwgY2FsbCB3aGVuIGxpYnB0aGRlYnVnCi0gICBpcyByZWFkeSB0byBiZSBpbml0aWFsaXpl ZC4gICovCi0KLXN0YXRpYyBDT1JFX0FERFIgcGRfYnJrX2FkZHI7Ci0KLS8qIFdoZXRoZXIgdGhl IGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdnYWJsZSBieSBwdGhkYi4gICovCi0KLXN0YXRp YyBpbnQgcGRfYWJsZSA9IDA7Ci0KLS8qIFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlvbiBp cyBiZWluZyBkZWJ1Z2dlZC4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWN0aXZlID0gMDsKLQotLyog V2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMgNjQtYml0LiAgCi0gICBPbmx5IHZh bGlkIHdoZW4gcGRfYWJsZSBpcyB0cnVlLiAgKi8KLQotc3RhdGljIGludCBhcmNoNjQ7Ci0KIC8q IEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBwdGhkYiBjYWxsYmFja3MuICAqLwogCiBzdGF0aWMg aW50IHBkY19zeW1ib2xfYWRkcnMgKHB0aGRiX3VzZXJfdCwgcHRoZGJfc3ltYm9sX3QgKiwgaW50 KTsKQEAgLTE5MSw5ICsxNjksNjYgQEAgc3RhdGljIHB0aGRiX2NhbGxiYWNrc190IHBkX2NhbGxi YWNrcyA9IHsKICAgTlVMTAogfTsKIAotLyogQ3VycmVudCBwdGhkYiBzZXNzaW9uLiAgKi8KKy8q IEFpeCB2YXJpYWJsZSBzdHJ1Y3R1cmUuICAqLworc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz IAoreworICAvKiBXaGV0aGVyIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGlzIGRlYnVnZ2FibGUg YnkgcHRoZGIuICAqLworICBpbnQgcGRfYWJsZTsKKworICAvKiBXaGV0aGVyIGEgdGhyZWFkZWQg YXBwbGljYXRpb24gaXMgYmVpbmcgZGVidWdnZWQuICAqLworICBpbnQgcGRfYWN0aXZlOworCisg IC8qIEN1cnJlbnQgcHRoZGIgc2Vzc2lvbi4gICovCisgIHB0aGRiX3Nlc3Npb25fdCBwZF9zZXNz aW9uOworCisgIC8qIEFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgbGlicHRocmVhZCB3aWxs IGNhbGwgd2hlbiBsaWJwdGhkZWJ1ZworICAgaXMgcmVhZHkgdG8gYmUgaW5pdGlhbGl6ZWQuICAq LworICBDT1JFX0FERFIgcGRfYnJrX2FkZHI7CisKKyAgLyogV2hldGhlciB0aGUgY3VycmVudCBh cmNoaXRlY3R1cmUgaXMgNjQtYml0LgorICAgT25seSB2YWxpZCB3aGVuIHBkX2FibGUgaXMgdHJ1 ZS4gICovCisgIGludCBhcmNoNjQ7Cit9OworCisvKiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBk YXRhLiAgKi8KK3N0YXRpYyBjb25zdCByZWdpc3RyeTxpbmZlcmlvcj46OmtleTxhaXhfdGhyZWFk X3ZhcmlhYmxlcz4KKyAgYWl4X3RocmVhZF92YXJpYWJsZXNfaGFuZGxlOworCisvKiBGdW5jdGlv biB0byBHZXQgYWl4X3RocmVhZF92YXJpYWJsZXMgZGF0YS4gICovCitzdGF0aWMgc3RydWN0IGFp eF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKHN0cnVj dCBpbmZlcmlvciAqaW5mKQoreworICBpZiAoaW5mID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7 CisKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKiBkYXRhOwogCi1zdGF0aWMgcHRoZGJf c2Vzc2lvbl90IHBkX3Nlc3Npb247CisgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5k bGUuZ2V0IChpbmYpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIGRhdGEgPSBhaXhfdGhyZWFk X3ZhcmlhYmxlc19oYW5kbGUuZW1wbGFjZSAoaW5mKTsKKworICByZXR1cm4gZGF0YTsKK30KKwor LyogSGVscGVyIHRvIGdldCBkYXRhIGZvciBwdGlkIGluIGEgZnVuY3Rpb24uICAqLworCitzdGF0 aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9m b3JfcHRpZCAocHRpZF90IHB0aWQpCit7CisgIGluZmVyaW9yICppbmYgPSBmaW5kX2luZmVyaW9y X3B0aWQgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpLAorCQkJCQlwdGlk KTsKKyAgcmV0dXJuIGdldF9haXhfdGhyZWFkX3ZhcmlhYmxlc19kYXRhIChpbmYpOworfQorCisv KiBIZWxwZXIgdG8gZ2V0IGRhdGEgZm9yIHBpZCBpbiBhIGZ1bmN0aW9uLiAgKi8KKworc3RhdGlj IHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyoKK2dldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9y X3BpZCAocGlkX3QgcGlkKQoreworICBpbmZlcmlvciAqaW5mID0gZmluZF9pbmZlcmlvcl9waWQg KGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCk7CisgIHJldHVybiBnZXRfYWl4X3RocmVhZF92 YXJpYWJsZXNfZGF0YSAoaW5mKTsKK30KIAogLyogUmV0dXJuIGEgcHJpbnRhYmxlIHJlcHJlc2Vu dGF0aW9uIG9mIHB0aGRlYnVnIGZ1bmN0aW9uIHJldHVybgogICAgU1RBVFVTLiAgKi8KQEAgLTMx OCw3ICszNTMsNyBAQCBwaWRfdG9fcHJjIChwdGlkX3QgKnB0aWRwKQogICBwdGlkX3QgcHRpZDsK IAogICBwdGlkID0gKnB0aWRwOwotICBpZiAoUERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlk ICgpICE9IDApCiAgICAgKnB0aWRwID0gcHRpZF90IChwdGlkLnBpZCAoKSk7CiB9CiAKQEAgLTM4 OSw2ICs0MjQsOSBAQCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3Bp ZCwKICAgZG91YmxlIGZwcnNbcHBjX251bV9mcHJzXTsKICAgc3RydWN0IHB0eHNwcnMgc3ByczY0 OwogICBzdHJ1Y3QgcHRzcHJzIHNwcnMzMjsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz ICpkYXRhOworICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAodXNl cl9jdXJyZW50X3BpZCk7CiAgIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLCAicGRjX3JlYWRfcmVncyB0aWQ9JWQgZmxhZ3M9JXNcbiIsCkBAIC0z OTcsNyArNDM1LDcgQEAgcGRjX3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9w aWQsCiAgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQ VEhEQl9GTEFHX0dQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRh LT5hcmNoNjQpCiAJewogCSAgaWYgKCFwdHJhY2U2NGFpeCAoUFRUX1JFQURfR1BSUywgdGlkLCAK IAkJCSAgICAodW5zaWduZWQgbG9uZykgZ3ByczY0LCAwLCBOVUxMKSkKQEAgLTQyMyw3ICs0NjEs NyBAQCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwKICAgLyog U3BlY2lhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAgIGlmIChmbGFncyAmIFBUSERCX0ZMQUdf U1BSUykKICAgICB7Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkK IAl7CiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsIAogCQkJICAgICh1 bnNpZ25lZCBsb25nKSAmc3ByczY0LCAwLCBOVUxMKSkKQEAgLTQ1Niw2ICs0OTQsMTAgQEAgcGRj X3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAgICB0aGlzIGlz IG5lZWRlZCwgSSBoYXZlIGltcGxlbWVudGVkIHdoYXQgSSB0aGluayBpdCBzaG91bGQgZG8sCiAg ICAgIGhvd2V2ZXIgdGhpcyBjb2RlIGlzIHVudGVzdGVkLiAgKi8KIAorICBzdHJ1Y3QgYWl4X3Ro cmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBl cl9mb3JfcGlkICh1c2VyX2N1cnJlbnRfcGlkKTsKKwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkK ICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAicGRjX3dyaXRlX3JlZ3MgdGlkPSVkIGZsYWdz PSVzXG4iLAogCQkoaW50KSB0aWQsIGhleF9zdHJpbmcgKGZsYWdzKSk7CkBAIC00NjMsNyArNTA1 LDcgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAv KiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxB R19HUFJTKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0 KQogCXB0cmFjZTY0YWl4IChQVFRfV1JJVEVfR1BSUywgdGlkLCAKIAkJICAgICAodW5zaWduZWQg bG9uZykgY29udGV4dC0+Z3ByLCAwLCBOVUxMKTsKICAgICAgIGVsc2UKQEAgLTQ3OSw3ICs1MjEs NyBAQCBwZGNfd3JpdGVfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8q IFNwZWNpYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFH X1NQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQp CiAJewogCSAgcHRyYWNlNjRhaXggKFBUVF9XUklURV9TUFJTLCB0aWQsIAogCQkgICAgICAgKHVu c2lnbmVkIGxvbmcpICZjb250ZXh0LT5tc3IsIDAsIE5VTEwpOwpAQCAtNDk5LDYgKzU0MSwyMCBA QCBwZGNfcmVhZF9kYXRhIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwgdm9pZCAqYnVm LAogCSAgICAgICBwdGhkYl9hZGRyX3QgYWRkciwgc2l6ZV90IGxlbikKIHsKICAgaW50IHN0YXR1 cywgcmV0OworICB0aHJlYWRfaW5mbyAqdGhyZWFkID0gZmluZF90aHJlYWRfcHRpZCAoY3VycmVu dF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCksIHB0aWRfdCAodXNlcl9jdXJyZW50X3Bp ZCkpOworICAvKiBJZiB0aGUgcHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGlzIGxvYWRlZCwgdGhlbiB3 ZSBuZWVkIHRoZSBwdGlkX3QgKHBpZCwgMCAsdGlkKS4KKyAgICAgU2luY2UgdGhlIG1haW4gdGhy ZWFkIGluIHRoZSBiZWxvdyBmb3IgbG9vcCB3aWxsIGJlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24K KyAgICAgd2Ugd2lsbCBicmVhay4gICovCisKKyAgaWYgKCF0aHJlYWQpCisgIHsKKyAgICBmb3Ig KHRocmVhZF9pbmZvICp0cDogYWxsX3RocmVhZHMgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nl c3NfdGFyZ2V0ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0 aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpKQorICAgICAgeworCXRocmVhZCA9IHRwOyAKKwlicmVh azsKKyAgICAgIH0gCisgIH0KIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLApAQCAtNTA4LDE0ICs1NjQsMTcgQEAgcGRjX3JlYWRfZGF0YSAocHRo ZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQgKmJ1ZiwKICAgLyogVGhpcyBpcyBuZWVk ZWQgdG8gZWxpbWluYXRlIHRoZSBkZXBlbmRlbmN5IG9mIGN1cnJlbnQgdGhyZWFkCiAgICAgIHdo aWNoIGlzIG51bGwgc28gdGhhdCB0aHJlYWQgcmVhZHMgdGhlIGNvcnJlY3QgdGFyZ2V0IG1lbW9y eS4gICovCiAgIHsKLSAgICBzY29wZWRfcmVzdG9yZV9jdXJyZW50X3RocmVhZCByZXN0b3JlX2N1 cnJlbnRfdGhyZWFkOworICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1h a2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAgICAvKiBCZWZvcmUgdGhlIGZp cnN0IGluZmVyaW9yIGlzIGFkZGVkLCB3ZSBwYXNzIGluZmVyaW9yX3B0aWQucGlkICgpCiAgICAg ICAgZnJvbSBwZF9lbmFibGUgKCkgd2hpY2ggaXMgMC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3dp dGNoIHRocmVhZHMKICAgICAgICBkdXJpbmcgZmlyc3QgaW5pdGlhbGlzYXRpb24uICBJbiB0aGUg cmVzdCBvZiB0aGUgY2FsbGJhY2tzIHRoZQogICAgICAgIGN1cnJlbnQgdGhyZWFkIG5lZWRzIHRv IGJlIGNvcnJlY3QuICAqLwotICAgIGlmICh1c2VyX2N1cnJlbnRfcGlkICE9IDApCi0gICAgICBz d2l0Y2hfdG9fdGhyZWFkIChjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwK LQkJCXB0aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpOworICAgIGluZmVyaW9yX3B0aWQgPSBwdGlk X3QgKHVzZXJfY3VycmVudF9waWQpOworICAgIHNjb3BlZF9yZXN0b3JlX2N1cnJlbnRfaW5mZXJp b3IgcmVzdG9yZV9pbmZlcmlvcjsKKyAgICBzZXRfY3VycmVudF9pbmZlcmlvciAodGhyZWFkLT5p bmYpOworCisgICAgc2NvcGVkX3Jlc3RvcmVfY3VycmVudF9wcm9ncmFtX3NwYWNlIHJlc3RvcmVf Y3VycmVudF9wcm9nc3BhY2U7CisgICAgc2V0X2N1cnJlbnRfcHJvZ3JhbV9zcGFjZSAodGhyZWFk LT5pbmYtPnBzcGFjZSk7CiAgICAgc3RhdHVzID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChhZGRyLCAo Z2RiX2J5dGUgKikgYnVmLCBsZW4pOwogICB9CiAgIHJldCA9IHN0YXR1cyA9PSAwID8gUERDX1NV Q0NFU1MgOiBQRENfRkFJTFVSRTsKQEAgLTUzMywxMyArNTkyLDM3IEBAIHBkY193cml0ZV9kYXRh IChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwgdm9pZCAqYnVmLAogCQlwdGhkYl9hZGRy X3QgYWRkciwgc2l6ZV90IGxlbikKIHsKICAgaW50IHN0YXR1cywgcmV0OworICB0aHJlYWRfaW5m byAqdGhyZWFkID0gZmluZF90aHJlYWRfcHRpZCAoY3VycmVudF9pbmZlcmlvciAoKSwgCisJCQkJ CSAgcHRpZF90ICh1c2VyX2N1cnJlbnRfcGlkKSk7CisgIC8qIElmIHRoZSBwdGhyZWFkIGRlYnVn IGxpYnJhcnkgaXMgbG9hZGVkLCB0aGVuIHdlIG5lZWQgdGhlIHB0aWRfdCAocGlkLCAwICx0aWQp LgorICAgICBTaW5jZSB0aGUgbWFpbiB0aHJlYWQgaW4gdGhlIGJlbG93IGZvciBsb29wIHdpbGwg YmUgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbgorICAgICB3ZSB3aWxsIGJyZWFrLiAgKi8gCisgIGlm ICghdGhyZWFkKQorICB7CisgICAgZm9yICh0aHJlYWRfaW5mbyAqdHA6IGFsbF90aHJlYWRzIChj dXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwgCisJCQkJCXB0aWRfdCAodXNl cl9jdXJyZW50X3BpZCkpKQorICAgICAgeworICAgICAgICB0aHJlYWQgPSB0cDsKKyAgICAgICAg YnJlYWs7CisgICAgICB9CisgIH0KIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJf cHJpbnRmIChnZGJfc3RkbG9nLAogCQkicGRjX3dyaXRlX2RhdGEgKHVzZXJfY3VycmVudF9waWQg PSAlbGQsIGJ1ZiA9IDB4JWx4LCBhZGRyID0gJXMsIGxlbiA9ICVsZClcbiIsCiAJCXVzZXJfY3Vy cmVudF9waWQsIChsb25nKSBidWYsIGhleF9zdHJpbmcgKGFkZHIpLCBsZW4pOwogCi0gIHN0YXR1 cyA9IHRhcmdldF93cml0ZV9tZW1vcnkgKGFkZHIsIChnZGJfYnl0ZSAqKSBidWYsIGxlbik7Cisg IHsKKyAgICBzY29wZWRfcmVzdG9yZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9y ZXN0b3JlICgmaW5mZXJpb3JfcHRpZCk7CisgICAgaW5mZXJpb3JfcHRpZCA9IHB0aWRfdCAodXNl cl9jdXJyZW50X3BpZCk7CisgICAgc2NvcGVkX3Jlc3RvcmVfY3VycmVudF9pbmZlcmlvciByZXN0 b3JlX2luZmVyaW9yOworICAgIHNldF9jdXJyZW50X2luZmVyaW9yICh0aHJlYWQtPmluZik7CisK KyAgICBzY29wZWRfcmVzdG9yZV9jdXJyZW50X3Byb2dyYW1fc3BhY2UgcmVzdG9yZV9jdXJyZW50 X3Byb2dzcGFjZTsKKyAgICBzZXRfY3VycmVudF9wcm9ncmFtX3NwYWNlICh0aHJlYWQtPmluZi0+ cHNwYWNlKTsKKyAgICBzdGF0dXMgPSB0YXJnZXRfd3JpdGVfbWVtb3J5IChhZGRyLCAoZ2RiX2J5 dGUgKikgYnVmLCBsZW4pOworICB9CisKICAgcmV0ID0gc3RhdHVzID09IDAgPyBQRENfU1VDQ0VT UyA6IFBEQ19GQUlMVVJFOwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQpAQCAtNjM5LDM5ICs3 MjIsNiBAQCBwY21wIChjb25zdCB2b2lkICpwMXYsIGNvbnN0IHZvaWQgKnAydikKICAgcmV0dXJu IHAxLT5wdGhpZCA8IHAyLT5wdGhpZCA/IC0xIDogcDEtPnB0aGlkID4gcDItPnB0aGlkOwogfQog Ci0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBjb3VudGluZyBHREIgdGhy ZWFkcy4KLQotICAgRG8gbm90IGNvdW50IHRoZSBtYWluIHRocmVhZCAod2hvc2UgdGlkIGlzIHpl cm8pLiAgVGhpcyBtYXRjaGVzCi0gICB0aGUgbGlzdCBvZiB0aHJlYWRzIHByb3ZpZGVkIGJ5IHRo ZSBwdGhyZWFkZGVidWcgbGlicmFyeSwgd2hpY2gKLSAgIGRvZXMgbm90IGluY2x1ZGUgdGhhdCBt YWluIHRocmVhZCBlaXRoZXIsIGFuZCB0aHVzIGFsbG93cyB1cwotICAgdG8gY29tcGFyZSB0aGUg dHdvIGxpc3RzLiAgKi8KLQotc3RhdGljIGludAotZ2l0ZXJfY291bnQgKHN0cnVjdCB0aHJlYWRf aW5mbyAqdGhyZWFkLCB2b2lkICpjb3VudHApCi17Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+cHRp ZCkpCi0gICAgKCooaW50ICopIGNvdW50cCkrKzsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIGl0ZXJh dGVfb3Zlcl90aHJlYWRzKCkgY2FsbGJhY2sgZm9yIGFjY3VtdWxhdGluZyBHREIgdGhyZWFkIHBp ZHMuCi0KLSAgIERvIG5vdCBpbmNsdWRlIHRoZSBtYWluIHRocmVhZCAod2hvc2UgdGlkIGlzIHpl cm8pLiAgVGhpcyBtYXRjaGVzCi0gICB0aGUgbGlzdCBvZiB0aHJlYWRzIHByb3ZpZGVkIGJ5IHRo ZSBwdGhyZWFkZGVidWcgbGlicmFyeSwgd2hpY2gKLSAgIGRvZXMgbm90IGluY2x1ZGUgdGhhdCBt YWluIHRocmVhZCBlaXRoZXIsIGFuZCB0aHVzIGFsbG93cyB1cwotICAgdG8gY29tcGFyZSB0aGUg dHdvIGxpc3RzLiAgKi8KLQotc3RhdGljIGludAotZ2l0ZXJfYWNjdW0gKHN0cnVjdCB0aHJlYWRf aW5mbyAqdGhyZWFkLCB2b2lkICpidWZwKQotewotICBpZiAoUERfVElEICh0aHJlYWQtPnB0aWQp KQotICAgIHsKLSAgICAgICoqKHN0cnVjdCB0aHJlYWRfaW5mbyAqKiopIGJ1ZnAgPSB0aHJlYWQ7 Ci0gICAgICAoKihzdHJ1Y3QgdGhyZWFkX2luZm8gKioqKSBidWZwKSsrOwotICAgIH0KLSAgcmV0 dXJuIDA7Ci19Ci0KIC8qIHB0aWQgY29tcGFyaXNvbiBmdW5jdGlvbiAqLwogCiBzdGF0aWMgaW50 CkBAIC03MTksNyArNzY5LDEwIEBAIGdldF9zaWduYWxlZF90aHJlYWQgKGludCBwaWQpCiAJCSAg ICBzaXplb2YgKHRocmluZiksICZrdGlkLCAxKSAhPSAxKQogCWJyZWFrOwogCi0gICAgICBpZiAo dGhyaW5mLnRpX2N1cnNpZyA9PSBTSUdUUkFQKQorICAgICAgLyogV2UgYWxzbyBuZWVkIHRvIGtl ZXAgaW4gbWluZCBUcmFwIGFuZCBpbnRlcnJ1cHQgb3IgYW55CisgICAgICAgICBzaWduYWwgdGhh dCBuZWVkcyB0byBiZSBoYW5kbGVkIGluIHBkX3VwZGF0ZSAoKS4gICovCisKKyAgICAgIGlmICh0 aHJpbmYudGlfY3Vyc2lnKQogCXJldHVybiB0aHJpbmYudGlfdGlkOwogICAgIH0KIApAQCAtNzQx LDcgKzc5NCw3IEBAIGdldF9zaWduYWxlZF90aHJlYWQgKGludCBwaWQpCiAgICAgICAgaGF2ZSBk aWZmaWN1bHR5IHdpdGggY2VydGFpbiBjYWxsIHBhdHRlcm5zICovCiAKIHN0YXRpYyB2b2lkCi1z eW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQorc3luY190aHJlYWRsaXN0cyAocGlkX3QgcGlkKSAK IHsKICAgaW50IGNtZCwgc3RhdHVzOwogICBpbnQgcGNvdW50LCBwc2l6ZSwgcGksIGdjb3VudCwg Z2k7CkBAIC03NTAsNiArODAzLDExIEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAgIHB0 aGRiX3B0aHJlYWRfdCBwZHRpZDsKICAgcHRocmVhZF90IHB0aGlkOwogICBwdGhkYl90aWRfdCB0 aWQ7CisgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2NfdGFyZ2V0CisgICAgICAgICAgICA9 IGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpOworICB0aHJlYWRfaW5mbyAg KnRwOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRf dGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQgKHBpZCk7CiAKICAgLyogQWNjdW11bGF0ZSBhbiBh cnJheSBvZiBsaWJwdGhkZWJ1ZyB0aHJlYWRzIHNvcnRlZCBieSBwdGhyZWFkIGlkLiAgKi8KIApA QCAtNzU5LDExICs4MTcsMTEgQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAogICBmb3Ig KGNtZCA9IFBUSERCX0xJU1RfRklSU1Q7OyBjbWQgPSBQVEhEQl9MSVNUX05FWFQpCiAgICAgewot ICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZCAocGRfc2Vzc2lvbiwgJnBkdGlkLCBjbWQpOwor ICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZCAoZGF0YS0+cGRfc2Vzc2lvbiwgJnBkdGlkLCBj bWQpOwogICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTIHx8IHBkdGlkID09IFBUSERC X0lOVkFMSURfUFRIUkVBRCkKIAlicmVhazsKIAotICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVh ZF9wdGlkIChwZF9zZXNzaW9uLCBwZHRpZCwgJnB0aGlkKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRi X3B0aHJlYWRfcHRpZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZwdGhpZCk7CiAgICAgICBp ZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MgfHwgcHRoaWQgPT0gUFRIREJfSU5WQUxJRF9QVElE KQogCWNvbnRpbnVlOwogCkBAIC03ODAsNyArODM4LDcgQEAgc3luY190aHJlYWRsaXN0cyAoaW50 IHBpZCkKIAogICBmb3IgKHBpID0gMDsgcGkgPCBwY291bnQ7IHBpKyspCiAgICAgewotICAgICAg c3RhdHVzID0gcHRoZGJfcHRocmVhZF90aWQgKHBkX3Nlc3Npb24sIHBidWZbcGldLnBkdGlkLCAm dGlkKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfdGlkIChkYXRhLT5wZF9zZXNzaW9u LCBwYnVmW3BpXS5wZHRpZCwgJnRpZCk7CiAgICAgICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NF U1MpCiAJdGlkID0gUFRIREJfSU5WQUxJRF9USUQ7CiAgICAgICBwYnVmW3BpXS50aWQgPSB0aWQ7 CkBAIC03OTAsMTMgKzg0OCwyNiBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQogCiAgIC8q IEFjY3VtdWxhdGUgYW4gYXJyYXkgb2YgR0RCIHRocmVhZHMgc29ydGVkIGJ5IHBpZC4gICovCiAK KyAgLyogZ2NvdW50IGlzIEdEQiB0aHJlYWQgY291bnQgYW5kIHBjb3VudCBpcyBwdGhyZWFkbGli IHRocmVhZCBjb3VudC4gICovCisKICAgZ2NvdW50ID0gMDsKLSAgaXRlcmF0ZV9vdmVyX3RocmVh ZHMgKGdpdGVyX2NvdW50LCAmZ2NvdW50KTsKKyAgZm9yICh0aHJlYWRfaW5mbyAqdHAgOiBhbGxf dGhyZWFkcyAocHJvY190YXJnZXQsIHB0aWRfdCAocGlkKSkpCisgICAgZ2NvdW50Kys7CiAgIGcg PSBnYnVmID0gWE5FV1ZFQyAoc3RydWN0IHRocmVhZF9pbmZvICosIGdjb3VudCk7Ci0gIGl0ZXJh dGVfb3Zlcl90aHJlYWRzIChnaXRlcl9hY2N1bSwgJmcpOworICBmb3IgKHRocmVhZF9pbmZvICp0 cCA6IGFsbF90aHJlYWRzIChwcm9jX3RhcmdldCwgcHRpZF90IChwaWQpKSkKKyAgICAqZysrID0g dHA7CiAgIHFzb3J0IChnYnVmLCBnY291bnQsIHNpemVvZiAqZ2J1ZiwgZ2NtcCk7CiAKKyAgdHAg PSBmaW5kX3RocmVhZF9wdGlkIChwcm9jX3RhcmdldCwgcHRpZF90IChwaWQpKTsKKworICAvKiBJ ZiB0aGUgcHRocmVhZGxpYnJhcnkgaXMgbm90IHJlYWR5IHRvIGRlYnVnIAorICAgICB0aGVuIHRo aXMgaXMganVzdCBhIG1haW4gcHJvY2VzcyB3aGljaCBuZWVkcyAKKyAgICAgYSBwcml2IHRvIGJl IHNldC4gIFRoZSBpZiBjb25kaXRpb24gYmVsb3cgZG9lcyAKKyAgICAgdGhlIHNhbWUuICBPdGhl cndpc2Ugd2UgZ28gdG8gdGhlIGZvciBsb29wIHRvIAorICAgICBzeW5jIHRoZSBwdGhyZWFkIGFu ZCBHREIgdGhyZWFkIGxpc3RzLiAgKi8KKwogICAvKiBBcHBseSBkaWZmZXJlbmNlcyBiZXR3ZWVu IHRoZSB0d28gYXJyYXlzIHRvIEdEQidzIHRocmVhZCBsaXN0LiAgKi8KKwogICBmb3IgKHBpID0g Z2kgPSAwOyBwaSA8IHBjb3VudCB8fCBnaSA8IGdjb3VudDspCiAgICAgewogICAgICAgaWYgKHBp ID09IHBjb3VudCkKQEAgLTgxMCw4ICs4ODEsNiBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlk KQogCSAgcHJpdi0+cGR0aWQgPSBwYnVmW3BpXS5wZHRpZDsKIAkgIHByaXYtPnRpZCA9IHBidWZb cGldLnRpZDsKIAotCSAgcHJvY2Vzc19zdHJhdHVtX3RhcmdldCAqcHJvY190YXJnZXQKLQkgICAg PSBjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKTsKIAkgIHRocmVhZCA9IGFk ZF90aHJlYWRfd2l0aF9pbmZvIChwcm9jX3RhcmdldCwKIAkJCQkJIHB0aWRfdCAocGlkLCAwLCBw YnVmW3BpXS5wdGhpZCksCiAJCQkJCSBwcml2KTsKQEAgLTg0MSwxMyArOTEwLDI3IEBAIHN5bmNf dGhyZWFkbGlzdHMgKGludCBwaWQpCiAJICAgIH0KIAkgIGVsc2UgaWYgKGNtcF9yZXN1bHQgPiAw KQogCSAgICB7Ci0JICAgICAgZGVsZXRlX3RocmVhZCAoZ2J1ZltnaV0pOwotCSAgICAgIGdpKys7 CisJICAgICAgLyogVGhpcyBpcyB0byBtYWtlIHRoZSBtYWluIHByb2Nlc3MgdGhyZWFkIG5vdyBs b29rCisgICAgICAgICAgICAgICAgIGxpa2UgYSB0aHJlYWQuICAqLworCisJICAgICAgaWYgKGdw dGlkLmlzX3BpZCAoKSkKKwkJeworCQkgIHRocmVhZF9jaGFuZ2VfcHRpZCAocHJvY190YXJnZXQs IGdwdGlkLCBwcHRpZCk7CisJCSAgYWl4X3RocmVhZF9pbmZvICpwcml2ID0gbmV3IGFpeF90aHJl YWRfaW5mbzsKKyAgICAgICAgICAgICAgICAgIHByaXYtPnBkdGlkID0gcGJ1ZltwaV0ucGR0aWQ7 CisgICAgICAgICAgICAgICAgICBwcml2LT50aWQgPSBwYnVmW3BpXS50aWQ7CisJCSAgdHAtPnBy aXYucmVzZXQgKHByaXYpOworCQkgIGdpKys7CisJCSAgcGkrKzsKKwkJfQorCSAgICAgIGVsc2UK KwkJeworCQkgIGRlbGV0ZV90aHJlYWQgKGdidWZbZ2ldKTsKKwkJICBnaSsrOworCQl9CiAJICAg IH0KIAkgIGVsc2UKIAkgICAgewotCSAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2Nf dGFyZ2V0Ci0JCT0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCk7CiAJICAg ICAgdGhyZWFkID0gYWRkX3RocmVhZCAocHJvY190YXJnZXQsIHBwdGlkKTsKIAogCSAgICAgIGFp eF90aHJlYWRfaW5mbyAqcHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87CkBAIC04ODEsMTcgKzk2 NCwyMCBAQCBpdGVyX3RpZCAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZvaWQgKnRpZHAp CiAgICByZXR1cm4gYSBwaWQtb25seSBwdGlkIHdpdGggUElELiAgKi8KIAogc3RhdGljIHB0aWRf dAotcGRfdXBkYXRlIChpbnQgcGlkKQorcGRfdXBkYXRlIChwaWRfdCBwaWQpCiB7CiAgIGludCBz dGF0dXM7CiAgIHB0aWRfdCBwdGlkOwogICBwdGhkYl90aWRfdCB0aWQ7CiAgIHN0cnVjdCB0aHJl YWRfaW5mbyAqdGhyZWFkID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpk YXRhOworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQgKHBpZCk7CiAK LSAgaWYgKCFwZF9hY3RpdmUpCisgIGlmICghZGF0YS0+cGRfYWN0aXZlKQogICAgIHJldHVybiBw dGlkX3QgKHBpZCk7CiAKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUgKHBkX3Nlc3Np b24pOworICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX3VwZGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbik7 CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICByZXR1cm4gcHRpZF90IChwaWQp OwogCkBAIC05MTUsMzQgKzEwMDEsMjMgQEAgcGRfdXBkYXRlIChpbnQgcGlkKQogICAgZm9yIHRo YXQgdGhyZWFkLiAgT3RoZXJ3aXNlLCByZXR1cm4gYSBwdGlkLW9ubHkgcHRpZCB1c2luZyBQSUQu ICAqLwogCiBzdGF0aWMgcHRpZF90Ci1wZF9hY3RpdmF0ZSAoaW50IHBpZCkKK3BkX2FjdGl2YXRl IChwaWRfdCBwaWQpCiB7CiAgIGludCBzdGF0dXM7Ci0JCQotICBzdGF0dXMgPSBwdGhkYl9zZXNz aW9uX2luaXQgKHBpZCwgYXJjaDY0ID8gUEVNXzY0QklUIDogUEVNXzMyQklULAorICBzdHJ1Y3Qg YWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVs cGVyX2Zvcl9waWQgKHBpZCk7CisgIAorICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX2luaXQgKHBp ZCwgZGF0YS0+YXJjaDY0ID8gUEVNXzY0QklUIDogUEVNXzMyQklULAogCQkJICAgICAgIFBUSERC X0ZMQUdfUkVHUywgJnBkX2NhbGxiYWNrcywgCi0JCQkgICAgICAgJnBkX3Nlc3Npb24pOworCQkJ ICAgICAgICZkYXRhLT5wZF9zZXNzaW9uKTsKICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNT KQogICAgIHsKICAgICAgIHJldHVybiBwdGlkX3QgKHBpZCk7CiAgICAgfQotICBwZF9hY3RpdmUg PSAxOworICBkYXRhLT5wZF9hY3RpdmUgPSAxOwogICByZXR1cm4gcGRfdXBkYXRlIChwaWQpOwog fQogCi0vKiBVbmRvIHRoZSBlZmZlY3RzIG9mIHBkX2FjdGl2YXRlKCkuICAqLwotCi1zdGF0aWMg dm9pZAotcGRfZGVhY3RpdmF0ZSAodm9pZCkKLXsKLSAgaWYgKCFwZF9hY3RpdmUpCi0gICAgcmV0 dXJuOwotICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKHBkX3Nlc3Npb24pOwotICAKLSAgcGlkX3Rv X3ByYyAoJmluZmVyaW9yX3B0aWQpOwotICBwZF9hY3RpdmUgPSAwOwotfQotCiAvKiBBbiBvYmpl Y3QgZmlsZSBoYXMganVzdCBiZWVuIGxvYWRlZC4gIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQK ICAgIGFwcGxpY2F0aW9uIGlzIHB0aHJlYWRlZCwgYW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJl YWQgZGVidWdnaW5nLiAgKi8KIApAQCAtOTUyLDEzICsxMDI3LDE5IEBAIHBkX2VuYWJsZSAodm9p ZCkKICAgaW50IHN0YXR1czsKICAgY2hhciAqc3R1Yl9uYW1lOwogICBzdHJ1Y3QgYm91bmRfbWlu aW1hbF9zeW1ib2wgbXM7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKwor ICBpZiAoIWluZmVyaW9yX3B0aWQucGlkICgpKQorICAgIHJldHVybjsKKyAgCisgIGRhdGEgPSBn ZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsKIAogICAvKiBE b24ndCBpbml0aWFsaXplIHR3aWNlLiAgKi8KLSAgaWYgKHBkX2FibGUpCisgIGlmIChkYXRhLT5w ZF9hYmxlKQogICAgIHJldHVybjsKIAogICAvKiBDaGVjayBhcHBsaWNhdGlvbiB3b3JkIHNpemUu ICAqLwotICBhcmNoNjQgPSByZWdpc3Rlcl9zaXplICh0YXJnZXRfZ2RiYXJjaCAoKSwgMCkgPT0g ODsKKyAgZGF0YS0+YXJjaDY0ID0gcmVnaXN0ZXJfc2l6ZSAodGFyZ2V0X2dkYmFyY2ggKCksIDAp ID09IDg7CiAKICAgLyogQ2hlY2sgd2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgcHRocmVhZGVk LiAgKi8KICAgc3R1Yl9uYW1lID0gTlVMTDsKQEAgLTk3MiwxMyArMTA1MywxMyBAQCBwZF9lbmFi bGUgKHZvaWQpCiAgIG1zID0gbG9va3VwX21pbmltYWxfc3ltYm9sIChzdHViX25hbWUsIE5VTEws IE5VTEwpOwogICBpZiAobXMubWluc3ltID09IE5VTEwpCiAgICAgcmV0dXJuOwotICBwZF9icmtf YWRkciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7Ci0gIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9i cmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgcGRfYnJrX2FkZHIpKQorICBkYXRhLT5wZF9i cmtfYWRkciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7CisgIGlmICghY3JlYXRlX3RocmVhZF9ldmVu dF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgZGF0YS0+cGRfYnJrX2FkZHIpKQogICAg IHJldHVybjsKIAogICAvKiBQcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KICAgY3Vy cmVudF9pbmZlcmlvciAoKS0+cHVzaF90YXJnZXQgKCZhaXhfdGhyZWFkX29wcyk7Ci0gIHBkX2Fi bGUgPSAxOworICBkYXRhLT5wZF9hYmxlID0gMTsgCiAKICAgLyogSWYgd2UncmUgZGVidWdnaW5n IGEgY29yZSBmaWxlIG9yIGFuIGF0dGFjaGVkIGluZmVyaW9yLCB0aGUKICAgICAgcHRocmVhZCBs aWJyYXJ5IG1heSBhbHJlYWR5IGhhdmUgYmVlbiBpbml0aWFsaXplZCwgc28gdHJ5IHRvCkBAIC05 OTEsMjggKzEwNzIsMzEgQEAgcGRfZW5hYmxlICh2b2lkKQogc3RhdGljIHZvaWQKIHBkX2Rpc2Fi bGUgKHZvaWQpCiB7Ci0gIGlmICghcGRfYWJsZSkKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5m ZXJpb3JfcHRpZCk7CisKKyAgaWYgKCFkYXRhLT5wZF9hYmxlKQogICAgIHJldHVybjsKLSAgaWYg KHBkX2FjdGl2ZSkKLSAgICBwZF9kZWFjdGl2YXRlICgpOwotICBwZF9hYmxlID0gMDsKKyAgaWYg KCFkYXRhLT5wZF9hY3RpdmUpCisgICAgcmV0dXJuOworICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kg KGRhdGEtPnBkX3Nlc3Npb24pOworIAorICBwaWRfdG9fcHJjICgmaW5mZXJpb3JfcHRpZCk7Cisg IGRhdGEtPnBkX2FjdGl2ZSA9IDA7CisgIGRhdGEtPnBkX2FibGUgPSAwOwogICBjdXJyZW50X2lu ZmVyaW9yICgpLT51bnB1c2hfdGFyZ2V0ICgmYWl4X3RocmVhZF9vcHMpOwogfQogCiAvKiBuZXdf b2JqZmlsZSBvYnNlcnZlciBjYWxsYmFjay4KIAogICAgSWYgT0JKRklMRSBpcyBub24tbnVsbCwg Y2hlY2sgd2hldGhlciBhIHRocmVhZGVkIGFwcGxpY2F0aW9uIGlzCi0gICBiZWluZyBkZWJ1Z2dl ZCwgYW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLgotCi0gICBJZiBPQkpG SUxFIGlzIG51bGwsIHN0b3AgZGVidWdnaW5nIHRocmVhZHMuICAqLworICAgYmVpbmcgZGVidWdn ZWQsIGFuZCBpZiBzbywgcHJlcGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAKIHN0YXRp YyB2b2lkCiBuZXdfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCiB7CiAgIGlmIChv YmpmaWxlKQogICAgIHBkX2VuYWJsZSAoKTsKLSAgZWxzZQotICAgIHBkX2Rpc2FibGUgKCk7CiB9 CiAKIC8qIEF0dGFjaCB0byBwcm9jZXNzIHNwZWNpZmllZCBieSBBUkdTLiAgKi8KQEAgLTEwNDIs OCArMTEyNiwxMSBAQCBhaXhfdGhyZWFkX3RhcmdldDo6cmVzdW1lIChwdGlkX3QgcHRpZCwgaW50 IHN0ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiB7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhy ZWFkOwogICBwdGhkYl90aWRfdCB0aWRbMl07CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxl cyAqZGF0YTsKKyAgCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChw dGlkKTsKIAotICBpZiAoIVBEX1RJRCAocHRpZCkpCisgIGlmIChwdGlkLnRpZCAoKSA9PSAwKQog ICAgIHsKICAgICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2Nv cGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAgICAgIApAQCAtMTA2NSw3ICsxMTUyLDcg QEAgYWl4X3RocmVhZF90YXJnZXQ6OnJlc3VtZSAocHRpZF90IHB0aWQsIGludCBzdGVwLCBlbnVt IGdkYl9zaWduYWwgc2lnKQogCSAgICAgICBwdGlkLmx3cCAoKSk7CiAgICAgICB0aWRbMV0gPSAw OwogCi0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAlwdHJhY2U2 NGFpeCAoUFRUX0NPTlRJTlVFLCB0aWRbMF0sIChsb25nIGxvbmcpIDEsCiAJCSAgICAgZ2RiX3Np Z25hbF90b19ob3N0IChzaWcpLCAoUFRSQUNFX1RZUEVfQVJHNSkgdGlkKTsKICAgICAgIGVsc2UK QEAgLTEwODIsNiArMTE2OSw3IEBAIHB0aWRfdAogYWl4X3RocmVhZF90YXJnZXQ6OndhaXQgKHB0 aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywKIAkJCSB0YXJnZXRf d2FpdF9mbGFncyBvcHRpb25zKQogeworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRh dGE7CiAgIHsKICAgICBwaWRfdG9fcHJjICgmcHRpZCk7CiAKQEAgLTEwOTUsOCArMTE4MywxMCBA QCBhaXhfdGhyZWFkX3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2Fp dHN0YXR1cyAqc3RhdHVzLAogICAgICBwaWQtb25seSBwdGlkcy4gICovCiAgIGdkYl9hc3NlcnQg KHB0aWQuaXNfcGlkICgpKTsKIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3Jf cHRpZCAocHRpZCk7CisKICAgLyogQ2hlY2sgd2hldGhlciBsaWJwdGhkZWJ1ZyBtaWdodCBiZSBy ZWFkeSB0byBiZSBpbml0aWFsaXplZC4gICovCi0gIGlmICghcGRfYWN0aXZlICYmIHN0YXR1cy0+ a2luZCAoKSA9PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRAorICBpZiAoIWRhdGEtPnBkX2FjdGl2 ZSAmJiBzdGF0dXMtPmtpbmQgKCkgPT0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQKICAgICAgICYm IHN0YXR1cy0+c2lnICgpID09IEdEQl9TSUdOQUxfVFJBUCkKICAgICB7CiAgICAgICBwcm9jZXNz X3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldApAQCAtMTEwNSw3ICsxMTk1LDcgQEAgYWl4X3Ro cmVhZF90YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMg KnN0YXR1cywKICAgICAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFyY2gg KCk7CiAKICAgICAgIGlmIChyZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSkKLQkgIC0gZ2RiYXJj aF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNoKSA9PSBwZF9icmtfYWRkcikKKwkgIC0gZ2Ri YXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNoKSA9PSBkYXRhLT5wZF9icmtfYWRkcikK IAlyZXR1cm4gcGRfYWN0aXZhdGUgKHB0aWQucGlkICgpKTsKICAgICB9CiAKQEAgLTEyMjksMTgg KzEzMTksMjAgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwcGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0g Z2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKICAgaW50IHN0YXR1cywg aTsKICAgcHRoZGJfY29udGV4dF90IGN0eDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz ICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJp b3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywgCiAJCSJmZXRjaF9yZWdzX3VzZXJfdGhyZWFkICVseFxuIiwgKGxvbmcpIHBkdGlk KTsKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwg JmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29udGV4dCAoZGF0YS0+cGRfc2Vzc2lv biwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJy b3IgKF8oImFpeC10aHJlYWQ6IGZldGNoX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0 IHJldHVybmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CiAKICAgLyogR2Vu ZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAKLSAgaWYgKGFyY2g2NCkKKyAgaWYgKGRhdGEt PmFyY2g2NCkKICAgICBzdXBwbHlfZ3ByczY0IChyZWdjYWNoZSwgY3R4Lmdwcik7CiAgIGVsc2UK ICAgICBmb3IgKGkgPSAwOyBpIDwgcHBjX251bV9ncHJzOyBpKyspCkBAIC0xMjUzLDcgKzEzNDUs NyBAQCBmZXRjaF9yZWdzX3VzZXJfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBw dGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogU3BlY2lhbCByZWdpc3RlcnMuICAqLwogCi0g IGlmIChhcmNoNjQpCisgIGlmIChkYXRhLT5hcmNoNjQpCiAgICAgc3VwcGx5X3NwcnM2NCAocmVn Y2FjaGUsIGN0eC5pYXIsIGN0eC5tc3IsIGN0eC5jciwgY3R4LmxyLCBjdHguY3RyLAogCQkJICAg ICBjdHgueGVyLCBjdHguZnBzY3IpOwogICBlbHNlCkBAIC0xMjg4LDE4ICsxMzgwLDIxIEBAIGZl dGNoX3JlZ3Nfa2VybmVsX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJl Z25vLAogICBzdHJ1Y3QgcHR4c3BycyBzcHJzNjQ7CiAgIHN0cnVjdCBwdHNwcnMgc3ByczMyOwog ICBpbnQgaTsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0 YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHJlZ2NhY2hlLT5wdGlkICgpKTsK IAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAog CQkiZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFkIHRpZD0lbHggcmVnbm89JWQgYXJjaDY0PSVkXG4i LAotCQkobG9uZykgdGlkLCByZWdubywgYXJjaDY0KTsKKwkJKGxvbmcpIHRpZCwgcmVnbm8sIGRh dGEtPmFyY2g2NCk7CiAKICAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAgIGlm IChyZWdubyA9PSAtMQogICAgICAgfHwgKHRkZXAtPnBwY19ncDBfcmVnbnVtIDw9IHJlZ25vCiAJ ICAmJiByZWdubyA8IHRkZXAtPnBwY19ncDBfcmVnbnVtICsgcHBjX251bV9ncHJzKSkKICAgICB7 Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAl7CiAJICBpZiAo IXB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsIAogCQkJICAgICh1bnNpZ25lZCBsb25n KSBncHJzNjQsIDAsIE5VTEwpKQpAQCAtMTMzMSw3ICsxNDI2LDcgQEAgZmV0Y2hfcmVnc19rZXJu ZWxfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYg KHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAg IHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIGlm ICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQUlMsIHRpZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxv bmcpICZzcHJzNjQsIDAsIE5VTEwpKQpAQCAtMTM2MiwxMiArMTQ1NywxNiBAQCBhaXhfdGhyZWFk X3RhcmdldDo6ZmV0Y2hfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQg cmVnbm8pCiB7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkOwogICBwdGhkYl90aWRfdCB0 aWQ7CisgIHRocmVhZCA9IGZpbmRfdGhyZWFkX3B0aWQgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnBy b2Nlc3NfdGFyZ2V0ICgpLCBwdGlkX3QgKHJlZ2NhY2hlLT5wdGlkICgpLnBpZCAoKSwgMCwgcmVn Y2FjaGUtPnB0aWQgKCkudGlkICgpKSk7CisKKyAgLyogSWYgYSBuZXcgaW5mZXJpb3IgaXMgYm9y biwgdGhlbiBpdHMgcHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGlzIHlldCB0bworICAgICBpbml0aWFs aXNlZCBhbmQgaGVuY2UgaGFzIG5vIHByaXZhdGUgZGF0YS4gU28gdGhlIGJlbG93IGlmIGNvbmRp dGlvbgorICAgICBleGlzdHMuICAqLwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAo KSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgp LT5mZXRjaF9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7Ci0gICAg ICB0aHJlYWQgPSBmaW5kX3RocmVhZF9wdGlkIChjdXJyZW50X2luZmVyaW9yICgpLCByZWdjYWNo ZS0+cHRpZCAoKSk7CiAgICAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYgPSBnZXRfYWl4X3RocmVh ZF9pbmZvICh0aHJlYWQpOwogICAgICAgdGlkID0gcHJpdi0+dGlkOwogCkBAIC0xNTExLDYgKzE2 MTAsOCBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAgIHB0aGRiX2NvbnRleHRfdCBjdHg7CiAg IHVpbnQzMl90IGludDMyOwogICB1aW50NjRfdCBpbnQ2NDsKKyAgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRp ZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3By aW50ZiAoZ2RiX3N0ZGxvZywgCkBAIC0xNTE4LDcgKzE2MTksNyBAQCBzdG9yZV9yZWdzX3VzZXJf dGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3Qg cGR0aWQpCiAKICAgLyogUmV0cmlldmUgdGhlIHRocmVhZCdzIGN1cnJlbnQgY29udGV4dCBmb3Ig aXRzIG5vbi1yZWdpc3RlcgogICAgICB2YWx1ZXMuICAqLwotICBzdGF0dXMgPSBwdGhkYl9wdGhy ZWFkX2NvbnRleHQgKHBkX3Nlc3Npb24sIHBkdGlkLCAmY3R4KTsKKyAgc3RhdHVzID0gcHRoZGJf cHRocmVhZF9jb250ZXh0IChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CiAgIGlmIChz dGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBlcnJvciAoXygiYWl4LXRocmVhZDogc3RvcmVf cmVnaXN0ZXJzOiBwdGhkYl9wdGhyZWFkX2NvbnRleHQgcmV0dXJuZWQgJXMiKSwKIAkgICBwZF9z dGF0dXMyc3RyIChzdGF0dXMpKTsKQEAgLTE1MjgsNyArMTYyOSw3IEBAIHN0b3JlX3JlZ3NfdXNl cl90aHJlYWQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRf dCBwZHRpZCkKICAgZm9yIChpID0gMDsgaSA8IHBwY19udW1fZ3ByczsgaSsrKQogICAgIGlmIChS RUdfVkFMSUQgPT0gcmVnY2FjaGUtPmdldF9yZWdpc3Rlcl9zdGF0dXMgKHRkZXAtPnBwY19ncDBf cmVnbnVtICsgaSkpCiAgICAgICB7Ci0JaWYgKGFyY2g2NCkKKwlpZiAoZGF0YS0+YXJjaDY0KQog CSAgewogCSAgICByZWdjYWNoZS0+cmF3X2NvbGxlY3QgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsg aSwgKHZvaWQgKikgJmludDY0KTsKIAkgICAgY3R4LmdwcltpXSA9IGludDY0OwpAQCAtMTU0NSw3 ICsxNjQ2LDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICAgIGZpbGxfZnBycyAocmVnY2Fj aGUsIGN0eC5mcHIpOwogCiAgIC8qIFNwZWNpYWwgcmVnaXN0ZXJzIChhbHdheXMga2VwdCBpbiBj dHggYXMgNjQgYml0cykuICAqLwotICBpZiAoYXJjaDY0KQorICBpZiAoZGF0YS0+YXJjaDY0KQog ICAgIHsKICAgICAgIGZpbGxfc3ByczY0IChyZWdjYWNoZSwgJmN0eC5pYXIsICZjdHgubXNyLCAm Y3R4LmNyLCAmY3R4LmxyLCAmY3R4LmN0ciwKIAkJCSAgICAgJmN0eC54ZXIsICZjdHguZnBzY3Ip OwpAQCAtMTU3Niw3ICsxNjc3LDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogCWN0eC5mcHNj ciA9IHRtcF9mcHNjcjsKICAgICB9CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zZXRjb250 ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRf c2V0Y29udGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVz ICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6IHN0b3JlX3JlZ2lz dGVyczogIgogCSAgICAgInB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCByZXR1cm5lZCAlcyIpLApA QCAtMTYwMiw2ICsxNzAzLDkgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAgIGRvdWJsZSBmcHJzW3BwY19udW1f ZnByc107CiAgIHN0cnVjdCBwdHhzcHJzIHNwcnM2NDsKICAgc3RydWN0IHB0c3BycyAgc3ByczMy OworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0 X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocmVnY2FjaGUtPnB0aWQgKCkpOwogCiAgIGlm IChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIApAQCAtMTYx Myw3ICsxNzE3LDcgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAgICAgICB8fCAodGRlcC0+cHBjX2dwMF9yZWdu dW0gPD0gcmVnbm8KIAkgICYmIHJlZ25vIDwgdGRlcC0+cHBjX2dwMF9yZWdudW0gKyBwcGNfbnVt X2ZwcnMpKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0 KQogCXsKIAkgIC8qIFByZS1mZXRjaDogc29tZSByZWdzIG1heSBub3QgYmUgaW4gdGhlIGNhY2hl LiAgKi8KIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsICh1bnNpZ25lZCBsb25n KSBncHJzNjQsIDAsIE5VTEwpOwpAQCAtMTY0Niw3ICsxNzUwLDcgQEAgc3RvcmVfcmVnc19rZXJu ZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAK ICAgaWYgKHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8p KQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsK IAkgIC8qIFByZS1mZXRjaDogc29tZSByZWdpc3RlcnMgd29uJ3QgYmUgaW4gdGhlIGNhY2hlLiAg Ki8KIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsIApAQCAtMTcwMyw3ICsxODA3 LDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6OnN0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgaW50IHJlZ25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAg cHRoZGJfdGlkX3QgdGlkOwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSkpCisg IGlmIChyZWdjYWNoZS0+cHRpZCAoKS50aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5zdG9y ZV9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNzQxLDcg KzE4NDUsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6bW91cm5faW5mZXJpb3IgKCkKIHsKICAgdGFy Z2V0X29wcyAqYmVuZWF0aCA9IHRoaXMtPmJlbmVhdGggKCk7CiAKLSAgcGRfZGVhY3RpdmF0ZSAo KTsKKyAgcGRfZGlzYWJsZSAoKTsKICAgYmVuZWF0aC0+bW91cm5faW5mZXJpb3IgKCk7CiB9CiAK QEAgLTE3NTAsNyArMTg1NCw3IEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojptb3Vybl9pbmZlcmlvciAo KQogYm9vbAogYWl4X3RocmVhZF90YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCiB7 Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0 dXJuIGJlbmVhdGggKCktPnRocmVhZF9hbGl2ZSAocHRpZCk7CiAKICAgLyogV2UgdXBkYXRlIHRo ZSB0aHJlYWQgbGlzdCBldmVyeSB0aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxsCkBAIC0xNzY2 LDcgKzE4NzAsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6dGhyZWFkX2FsaXZlIChwdGlkX3QgcHRp ZCkKIHN0ZDo6c3RyaW5nCiBhaXhfdGhyZWFkX3RhcmdldDo6cGlkX3RvX3N0ciAocHRpZF90IHB0 aWQpCiB7Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAg ICAgcmV0dXJuIGJlbmVhdGggKCktPnBpZF90b19zdHIgKHB0aWQpOwogCiAgIHJldHVybiBzdHJp bmdfcHJpbnRmIChfKCJUaHJlYWQgJXMiKSwgcHVsb25nZXN0IChwdGlkLnRpZCAoKSkpOwpAQCAt MTc4Niw4ICsxODkwLDExIEBAIGFpeF90aHJlYWRfdGFyZ2V0OjpleHRyYV90aHJlYWRfaW5mbyAo c3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCiAgIHB0aGRiX2RldGFjaHN0YXRlX3QgZGV0YWNo c3RhdGU7CiAgIGludCBjYW5jZWxwZW5kOwogICBzdGF0aWMgY2hhciAqcmV0ID0gTlVMTDsKKyAg c3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworCisgIGRhdGEgPSBnZXRfdGhyZWFk X2RhdGFfaGVscGVyX2Zvcl9wdGlkICh0aHJlYWQtPnB0aWQpOwogCi0gIGlmICghUERfVElEICh0 aHJlYWQtPnB0aWQpKQorICBpZiAodGhyZWFkLT5wdGlkLnRpZCAoKSA9PSAwKQogICAgIHJldHVy biBOVUxMOwogCiAgIHN0cmluZ19maWxlIGJ1ZjsKQEAgLTE4MDAsMjQgKzE5MDcsMjQgQEAgYWl4 X3RocmVhZF90YXJnZXQ6OmV4dHJhX3RocmVhZF9pbmZvIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRo cmVhZCkKICAgICAvKiBpMThuOiBMaWtlICJ0aHJlYWQtaWRlbnRpZmllciAlZCwgW3N0YXRlXSBy dW5uaW5nLCBzdXNwZW5kZWQiICovCiAgICAgYnVmLnByaW50ZiAoXygidGlkICVkIiksIChpbnQp dGlkKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3N0YXRlIChwZF9zZXNzaW9uLCBwZHRp ZCwgJnN0YXRlKTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zdGF0ZSAoZGF0YS0+cGRfc2Vz c2lvbiwgcGR0aWQsICZzdGF0ZSk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAg ICBzdGF0ZSA9IFBTVF9OT1RTVVA7CiAgIGJ1Zi5wcmludGYgKCIsICVzIiwgc3RhdGUyc3RyIChz dGF0ZSkpOwogCi0gIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChwZF9zZXNz aW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChkYXRh LT5wZF9zZXNzaW9uLCBwZHRpZCwgCiAJCQkJICAgICAgICZzdXNwZW5kc3RhdGUpOwogICBpZiAo c3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgc3VzcGVuZHN0YXRlID09IFBTU19TVVNQRU5ERUQp CiAgICAgLyogaTE4bjogTGlrZSAiVGhyZWFkLUlkICVkLCBbc3RhdGVdIHJ1bm5pbmcsIHN1c3Bl bmRlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIsIHN1c3BlbmRlZCIpKTsKIAotICBzdGF0dXMg PSBwdGhkYl9wdGhyZWFkX2RldGFjaHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1 cyA9IHB0aGRiX3B0aHJlYWRfZGV0YWNoc3RhdGUgKGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAK IAkJCQkgICAgICAmZGV0YWNoc3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1Mg JiYgZGV0YWNoc3RhdGUgPT0gUERTX0RFVEFDSEVEKQogICAgIC8qIGkxOG46IExpa2UgIlRocmVh ZC1JZCAlZCwgW3N0YXRlXSBydW5uaW5nLCBkZXRhY2hlZCIgKi8KICAgICBidWYucHJpbnRmIChf KCIsIGRldGFjaGVkIikpOwogCi0gIHB0aGRiX3B0aHJlYWRfY2FuY2VscGVuZCAocGRfc2Vzc2lv biwgcGR0aWQsICZjYW5jZWxwZW5kKTsKKyAgcHRoZGJfcHRocmVhZF9jYW5jZWxwZW5kIChkYXRh LT5wZF9zZXNzaW9uLCBwZHRpZCwgJmNhbmNlbHBlbmQpOwogICBpZiAoc3RhdHVzID09IFBUSERC X1NVQ0NFU1MgJiYgY2FuY2VscGVuZCkKICAgICAvKiBpMThuOiBMaWtlICJUaHJlYWQtSWQgJWQs IFtzdGF0ZV0gcnVubmluZywgY2FuY2VsIHBlbmRpbmciICovCiAgICAgYnVmLnByaW50ZiAoXygi LCBjYW5jZWwgcGVuZGluZyIpKTsKZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1haXguYyBiL2dkYi9z b2xpYi1haXguYwppbmRleCBmNDgzZjU0ZGUxMy4uNmJlODEwNjRlYmQgMTAwNjQ0Ci0tLSBhL2dk Yi9zb2xpYi1haXguYworKysgYi9nZGIvc29saWItYWl4LmMKQEAgLTYxOCw2ICs2MTgsMjAgQEAg c29saWJfYWl4X2JmZF9vcGVuIChjb25zdCBjaGFyICpwYXRobmFtZSkKICAgICAgIGlmIChtZW1i ZXJfbmFtZSA9PSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSkpCiAJYnJlYWs7 CiAKKyAgICAgIHN0ZDo6c3RyaW5nIHMgPSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdl dCAoKSk7CisKKyAgICAgIC8qIEZvciBldmVyeSBpbmZlcmlvciBhZnRlciBmaXJzdCBpbnQgYmZk IHN5c3RlbSB3ZSAKKwkgd2lsbCBoYXZlIHRoZSBwYXRobmFtZSBpbnN0ZWFkIG9mIHRoZSBtZW1i ZXIgbmFtZQorCSByZWdpc3RlcmVkLiBIZW5jZSB0aGUgYmVsb3cgY29uZGl0aW9uIGV4aXN0cy4g ICovCisKKyAgICAgIGlmIChzLmZpbmQgKCcoJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisJewor CSAgaW50IHBvcyA9IHMuZmluZCAoJygnKTsKKwkgIGludCBsZW4gPSBzLmZpbmQgKCcpJykgLSBz LmZpbmQgKCcoJyk7CisJICBpZiAocy5zdWJzdHIgKHBvcysxLCBsZW4tMSkgPT0gbWVtYmVyX25h bWUpIAorCSAgICByZXR1cm4gb2JqZWN0X2JmZDsKKwl9CisKICAgICAgIG9iamVjdF9iZmQgPSBn ZGJfYmZkX29wZW5yX25leHRfYXJjaGl2ZWRfZmlsZSAoYXJjaGl2ZV9iZmQuZ2V0ICgpLAogCQkJ CQkJICAgICBvYmplY3RfYmZkLmdldCAoKSk7CiAgICAgfQotLSAKMi4zMS4xCgo= --_004_CH2PR15MB35444D2E4EC3340265427F47D6A29CH2PR15MB3544namp_--