NetBSD Problem Report #30756

From wiz@dmath5.geometrie.tuwien.ac.at  Fri Jul 15 22:21:35 2005
Return-Path: <wiz@dmath5.geometrie.tuwien.ac.at>
Received: from dmath5.geometrie.tuwien.ac.at (dmath5.geometrie.tuwien.ac.at [128.130.42.105])
	by narn.netbsd.org (Postfix) with ESMTP id 19E1463B11A
	for <gnats-bugs@gnats.NetBSD.org>; Fri, 15 Jul 2005 22:21:35 +0000 (UTC)
Message-Id: <20050715222133.1C8B22951C@dmath5.geometrie.tuwien.ac.at>
Date: Sat, 16 Jul 2005 00:21:33 +0200 (CEST)
From: Thomas Klausner <wiz@NetBSD.org>
Reply-To: Thomas Klausner <wiz@NetBSD.org>
To: gnats-bugs@netbsd.org
Subject: gdb not usable for live debugging of threaded programs
X-Send-Pr-Version: 3.95

>Number:         30756
>Category:       bin
>Synopsis:       gdb not usable for live debugging of threaded programs
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    skrll
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jul 15 22:22:00 +0000 2005
>Closed-Date:    Tue Jul 22 15:51:59 +0000 2014
>Last-Modified:  Tue Jul 22 15:51:59 +0000 2014
>Originator:     Thomas Klausner
>Release:        NetBSD 3.99.7
>Organization:

>Environment:


Architecture: i386
Machine: i386
>Description:
Debugging threaded programs currently looks like this:
 # gdb /usr/pkg/bin/amarokapp
 GNU gdb 5.3nb1
 Copyright 2002 Free Software Foundation, Inc.
 GDB is free software, covered by the GNU General Public License, and you are
 welcome to change it and/or distribute copies of it under certain conditions.
 Type "show copying" to see the conditions.
 There is absolutely no warranty for GDB.  Type "show warranty" for details.
 This GDB was configured as "i386--netbsdelf"...(no debugging symbols found)...
 (gdb) r
 Starting program: /usr/pkg/bin/amarokapp
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...(no debugging symbols found)...
 (no debugging symbols found)...thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error.
 [Switching to LWP 1]
 Stopped due to shared library event
 (gdb) c
 Continuing.
 thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error.
 0xbdbf7444 in _rtld_debug_state () from /usr/libexec/ld.elf_so
 (gdb) c
 Continuing.
 thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error.
 0xbdbf7444 in _rtld_debug_state () from /usr/libexec/ld.elf_so
 (gdb)

In the thread starting at
	http://mail-index.netbsd.org/current-users/2005/06/23/0017.html
Nathan J. Williams suggests reverting 1.15 of
src/gnu/dist/gdb/gdb/nbsd-thread.c
which fixes this particular problem.

However, 1.15 was a fix for another real problem, and reverting it
is not a good solution. So we need another one :)
>How-To-Repeat:
See above.
>Fix:
Sorry, above my head.

>Release-Note:

>Audit-Trail:
From: Rui Paulo <rpaulo@NetBSD.org>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: bin/30756
Date: Sat, 13 Aug 2005 16:37:22 +0100

 BTW, you can attach to a running threadead application and it works fine.
 The same applies for core files.

 Related discussion on tech-userlevel@:
 http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0000.html
 http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0001.html
 http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0002.html
 http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0003.html

 		-- Rui Paulo

From: Matthias Drochner <M.Drochner@fz-juelich.de>
To: gnats-bugs@netbsd.org
Cc: gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: bin/30756 
Date: Mon, 15 Aug 2005 19:11:04 +0200

 This is a multipart MIME message.

 --==_Exmh_53492548679310
 Content-Type: text/plain; charset=us-ascii


 rpaulo@NetBSD.org said:
 > thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error

 The appended patch helps for this problem.
 It seems that the thread debugging stuff needs some cleanup...

 best regards
 Matthias



 --==_Exmh_53492548679310
 Content-Type: text/plain ; name="pthgdb.txt"; charset=us-ascii
 Content-Description: pthgdb.txt
 Content-Disposition: attachment; filename="pthgdb.txt"

 --- nbsd-thread.c.~1.15.~	Wed Oct 13 14:37:17 2004
 +++ nbsd-thread.c	Mon Aug 15 19:00:32 2005
 @@ -222,7 +222,7 @@ thread_resume_suspend_cb (td_thread_t *t
    if (td_thr_info (th, &ti) != 0)
        return -1;

 -  if ((ti.thread_id != GET_THREAD (*pt)) &&
 +  if ((ti.thread_id != GET_THREAD (*pt) + 1) &&
        (ti.thread_type == TD_TYPE_USER) &&
        (ti.thread_state != TD_STATE_SUSPENDED) &&
        (ti.thread_state != TD_STATE_ZOMBIE))

 --==_Exmh_53492548679310--


From: "Nathan J. Williams" <nathanw@wasabisystems.com>
To: M.Drochner@fz-juelich.de
Cc: gnats-bugs@NetBSD.org, gnats-admin@NetBSD.org,
	netbsd-bugs@NetBSD.org
Subject: Re: bin/30756
Date: 16 Aug 2005 18:07:15 -0400

 Matthias Drochner <M.Drochner@fz-juelich.de> writes:

 > rpaulo@NetBSD.org said:
 > > thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error
 > 
 > The appended patch helps for this problem.
 > It seems that the thread debugging stuff needs some cleanup...

 That happens to work but it's not right at all. nbsd_thread_resume()
 is being called with a ptid argument of {<pid>, 1, 0}; that is, the
 upper levels are trying to single-step an LWP rather than a thread (we
 don't currently have a mechanism for that in the ptrace
 interface). This causes thread_resume_suspend_cb() to try to suspend
 the only thread in the program... which is a bad enough idea, but it
 happens early enough that the idle queue isn't even set up, and so
 there's no thread to replace the suspended thread in the register
 set. This causes td_thr_suspend() to bail out with the error seen
 above.

 However, this does point out a partial solution, which I've gone ahead
 and committed:

 Index: nbsd-thread.c
 ===================================================================
 RCS file: /cvsroot/src/gnu/dist/gdb/gdb/nbsd-thread.c,v
 retrieving revision 1.15
 diff -p -u -r1.15 nbsd-thread.c
 --- nbsd-thread.c	12 Oct 2004 22:16:34 -0000	1.15
 +++ nbsd-thread.c	16 Aug 2005 22:02:38 -0000
 @@ -262,11 +262,14 @@ static void
  nbsd_thread_resume (ptid_t ptid, int step, enum target_signal signo)
  {

 -  /* If a particular ptid is specified, then gdb wants to resume or
 +  /* If a particular thread is specified, then gdb wants to resume or
       step just that thread. If it isn't on a processor, then it needs
 -     to be put on one, and nothing else can be on the runnable
 -     list. */
 -  if (GET_PID (ptid) != -1)
 +     to be put on one, and nothing else can be on the runnable list.
 +     XXX If GDB asks us to step a LWP rather than a thread, there
 +     isn't anything we can do but pass it down to the ptrace call;
 +     given the flexibility of the LWP-to-thread mapping, this might or
 +     might not accomplish what the user wanted. */
 +  if (GET_PID (ptid) != -1 && IS_THREAD (ptid))
      {
        int val;



 This seems to get things limping along again.

         - Nathan

From: Rui Paulo <rpaulo@NetBSD.org>
To: "Nathan J. Williams" <nathanw@wasabisystems.com>
Cc: M.Drochner@fz-juelich.de, gnats-bugs@NetBSD.org,
	gnats-admin@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: bin/30756
Date: Wed, 17 Aug 2005 01:55:10 +0100

 --+QahgC5+KEYLbs62
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 Content-Transfer-Encoding: quoted-printable

 On 2005.08.16 18:07:15 +0000, Nathan J. Williams wrote:
 | That happens to work but it's not right at all. nbsd_thread_resume()
 | is being called with a ptid argument of {<pid>, 1, 0}; that is, the
 | upper levels are trying to single-step an LWP rather than a thread (we
 | don't currently have a mechanism for that in the ptrace
 | interface). This causes thread_resume_suspend_cb() to try to suspend
 | the only thread in the program... which is a bad enough idea, but it
 | happens early enough that the idle queue isn't even set up, and so
 | there's no thread to replace the suspended thread in the register
 | set. This causes td_thr_suspend() to bail out with the error seen
 | above.
 |=20
 | However, this does point out a partial solution, which I've gone ahead
 | and committed:

 I've tested it and while it works for simple cases, it doesn't work for
 debugging large programs, like jvm.

 proton> ./gdb -q ~/java/jdk/bin/java_g                      [usr.bin/gdb53/=
 gdb]
 (gdb) run -jar ~/java/jdk/demo/jfc/Java2D/Java2Demo.jar
 Starting program: /home/rpaulo/java/jdk-1_5_0/control/build/bsd-i586/bin/ja=
 va_g -jar ~/java/jdk/demo/jfc/Java2D/Java2Demo.jar

 Program received signal SIGTRAP, Trace/breakpoint trap.
 [Switching to LWP 1]
 0xbdbf5530 in .rtld_start () from /usr/libexec/ld.elf_so
 (gdb)=20

 If you need more information, please tell me.
 I don't know if you are already aware of this since you pointed out that
 it is a "partial solution".

 		-- Rui Paulo

 --+QahgC5+KEYLbs62
 Content-Type: application/pgp-signature
 Content-Disposition: inline

 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.1 (NetBSD)

 iD8DBQFDAoruZPqyxs9FH4QRAoumAJ9oGuJHLtqSYuKWtFcuRHaWxsJa/gCfQ53p
 EJJNUeA/PvH+fh+0+ycMtHI=
 =iz5l
 -----END PGP SIGNATURE-----

 --+QahgC5+KEYLbs62--

From: "Paul Koning" <Paul_Koning@Dell.com>
To: <gnats-bugs@NetBSD.org>
Cc: <tech-kern@NetBSD.org>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Mon, 19 Apr 2010 15:02:03 -0400

 This is a multi-part message in MIME format.

 ------_=_NextPart_001_01CADFF2.CC0C5CAC
 Content-Type: text/plain;
 	charset="us-ascii"
 Content-Transfer-Encoding: quoted-printable

 The fix for kern/43128 adds the missing kernel bits for GDB to support
 threaded program debugging.  The other part needed is changes to GDB
 itself.

 Attached is a patch that does this, tested on i386 against the GDB 6.5
 sources that are in NetBSD 5.0.  I intend to submit this to the GDB
 project as well but was asked to provide a patch against the GDB rev
 that is currently in NetBSD.

 There is a patched mipsnbsd-nat.c as well as common and i386 specific
 files, but I did not make the build file changes for that so that file
 is untested.  I also did not look at any other platforms.  The changes
 should be straightforward using the mips and i386 examples as the
 starting point, but since I have no way to test them I did not want to
 attempt changes for any other targets.

 Comments appreciated.

 	paul


 ------_=_NextPart_001_01CADFF2.CC0C5CAC
 Content-Type: application/octet-stream;
 	name="gdbthreads-650.diff"
 Content-Transfer-Encoding: base64
 Content-Description: gdbthreads-650.diff
 Content-Disposition: attachment;
 	filename="gdbthreads-650.diff"

 LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL2kzODYvbmJzZGVsZi5taC5vcmlnCTIwMDYt
 MTEtMjUgMTE6Mzg6NTEuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2Nv
 bmZpZy9pMzg2L25ic2RlbGYubWgJMjAxMC0wNC0xOSAxMjowNzoyMC4wMDAwMDAwMDAgLTA0MDAK
 QEAgLTEsNiArMSw2IEBACiAjIEhvc3Q6IE5ldEJTRC9pMzg2IEVMRgogTkFUREVQRklMRVM9IGZv
 cmstY2hpbGQubyBpbmYtcHRyYWNlLm8gXAotCW5ic2QtbmF0Lm8gaTM4NmJzZC1uYXQubyBpMzg2
 bmJzZC1uYXQubyBic2Qta3ZtLm8KKwluYnNkLW5hdC5vIGkzODZic2QtbmF0Lm8gaTM4Nm5ic2Qt
 bmF0Lm8gYnNkLWt2bS5vIG5ic2QtdGhyZWFkLm8KIE5BVF9GSUxFPSBzb2xpYi5oCiAKIExPQURM
 SUJFUz0gLWxrdm0KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL21pcHMvbmJzZC5taC5v
 cmlnCTIwMDYtMTItMDYgMTM6MjU6MjkuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dk
 YjYvZ2RiL2NvbmZpZy9taXBzL25ic2QubWgJMjAxMC0wNC0xOSAxMzo1NTozOC4wMDAwMDAwMDAg
 LTA0MDAKQEAgLTEsMiArMSwyIEBACiAjIEhvc3Q6IE5ldEJTRC9taXBzCi1OQVRERVBGSUxFUz0g
 Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5hdC5vCitOQVRE
 RVBGSUxFUz0gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5h
 dC5vIG5ic2QtdGhyZWFkLm8KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbWlwc25ic2QtbmF0LmMu
 b3JpZwkyMDA2LTEyLTA2IDEzOjI1OjI5LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9n
 ZGI2L2dkYi9taXBzbmJzZC1uYXQuYwkyMDEwLTA0LTE5IDEzOjU4OjI1LjAwMDAwMDAwMCAtMDQw
 MApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImluZmVyaW9yLmgiCiAjaW5jbHVkZSAicmVn
 Y2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
 Y2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KQEAgLTMyLDYgKzMz
 LDcgQEAKICNpbmNsdWRlICJtaXBzLXRkZXAuaCIKICNpbmNsdWRlICJtaXBzbmJzZC10ZGVwLmgi
 CiAjaW5jbHVkZSAiaW5mLXB0cmFjZS5oIgorI2luY2x1ZGUgIm5ic2QtdGhyZWFkLmgiCiAKIC8q
 IERldGVybWluZSBpZiBQVF9HRVRSRUdTIGZldGNoZXMgdGhpcyByZWdpc3Rlci4gICovCiBzdGF0
 aWMgaW50CkBAIC00OCw3ICs1MCw3IEBACiAgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CiAKICAgICAg
 IGlmIChwdHJhY2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
 UkFDRV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykg
 JnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUg
 KF8oIkNvdWxkbid0IGdldCByZWdpc3RlcnMiKSk7CiAgICAgICAKICAgICAgIG1pcHNuYnNkX3N1
 cHBseV9yZWcgKChjaGFyICopICZyZWdzLCByZWdubyk7CkBAIC02MSw3ICs2Myw3IEBACiAgICAg
 ICBzdHJ1Y3QgZnByZWcgZnByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
 IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3Ms
 IDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVy
 aW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxv
 YXRpbmcgcG9pbnQgc3RhdHVzIikpOwogCiAgICAgICBtaXBzbmJzZF9zdXBwbHlfZnByZWcgKChj
 aGFyICopICZmcHJlZ3MsIHJlZ25vKTsKQEAgLTc2LDEzICs3OCwxMyBAQAogICAgICAgc3RydWN0
 IHJlZyByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVy
 aW9yX3B0aWQpLAotCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmcmVncywgMCkgPT0gLTEpCisJCSAg
 KFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkK
 IAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikpOwogCiAgICAg
 ICBtaXBzbmJzZF9maWxsX3JlZyAoKGNoYXIgKikgJnJlZ3MsIHJlZ25vKTsKIAogICAgICAgaWYg
 KHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgCi0JCSAgKFBUUkFD
 RV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJl
 Z3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUgKF8o
 IkNvdWxkbid0IHdyaXRlIHJlZ2lzdGVycyIpKTsKIAogICAgICAgaWYgKHJlZ25vICE9IC0xKQpA
 QCAtOTQsMTMgKzk2LDEzIEBACiAgICAgICBzdHJ1Y3QgZnByZWcgZnByZWdzOyAKIAogICAgICAg
 aWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAotCQkgIChQ
 VFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJH
 MykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCiAJcGVycm9yX3dpdGhf
 bmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKIAogICAgICAg
 bWlwc25ic2RfZmlsbF9mcHJlZyAoKGNoYXIgKikgJmZwcmVncywgcmVnbm8pOwogCiAgICAgICBp
 ZiAocHRyYWNlIChQVF9TRVRGUFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
 UkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkcz
 KSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9u
 YW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CiAgICAgfQog
 fQpAQCAtMTE1LDYgKzExNyw3IEBACiAgIHN0cnVjdCB0YXJnZXRfb3BzICp0OwogCiAgIHQgPSBp
 bmZfcHRyYWNlX3RhcmdldCAoKTsKKyAgaW5pdF9uYnNkX3RocmVhZF9vcHMgKHQpOwogICB0LT50
 b19mZXRjaF9yZWdpc3RlcnMgPSBtaXBzbmJzZF9mZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnM7CiAg
 IHQtPnRvX3N0b3JlX3JlZ2lzdGVycyA9IG1pcHNuYnNkX3N0b3JlX2luZmVyaW9yX3JlZ2lzdGVy
 czsKICAgdC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKLS0t
 IC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuYy5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6
 MDUuMDAwMDAwMDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmMJ
 MjAxMC0wNC0xOSAxNDo1MDowMi4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSw3MTEgQEAKKy8q
 IFRocmVhZHMgc3VwcG9ydCBmb3IgTmV0QlNEIDUuMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDEw
 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBQYXVs
 IEtvbmluZywgRGVsbCwgaW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg
 IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
 bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
 dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w
 dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
 ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
 IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
 QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
 KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
 dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
 aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
 RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
 aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1
 ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj
 aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0
 aHJlYWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
 Y2x1ZGUgIm5ic2QtdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxz
 eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu
 aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRGF0YSBz
 dHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBOZXRCU0QgdGhyZWFkIHN0YXRlLiAgVGhlcmUgaXMgYSAK
 KyAgIHZlY3RvciBvZiB0aGVzZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIExXUCBJRC4gICovCisK
 K3N0cnVjdCBsd3BfaW5mbworeworICAvKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgTFdQLiAgVGhp
 cyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm9jZXNzCisgICAgIElEIGFuZCB0aGUgTFdQIElE
 LiAgKi8KKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBOb24temVybyBpZiB3ZSB0aGlzIExXUCB3
 YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2lnbmFsbGVkCisgICAgIGJ5IHRoZSBQVF9MV1BJ
 TkZPIHB0cmFjZSgpIGNhbGwuICAqLworICBpbnQgc2lnbmFsbGVkOworICAKKyAgLyogVGhlIHdh
 aXRzdGF0dXMgZm9yIHRoaXMgTFdQJ3MgbGFzdCBldmVudC4gICovCisgIHN0cnVjdCB0YXJnZXRf
 d2FpdHN0YXR1cyB3YWl0c3RhdHVzOworfTsKKworLyogVGhlIGx3cF9pbmZvIGJ1ZmZlciBhbmQg
 aXRzIGNvbnRyb2wgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgbHdwX2luZm8gKmx3cF9i
 dWZmZXI7CitzdGF0aWMgaW50IGx3cF9jb3VudDsKK3N0YXRpYyBpbnQgbHdwX2J1ZnNpemU7CisK
 Ky8qIENvdW50IG9mIHNpZ25hbHMgc3RpbGwgcGVuZGluZyBkZWxpdmVyeSB0byBHREIuICBUaGVz
 ZSBhcmUgdGhyZWFkcworICAgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIHN0b3BwZWQgYW5kIG5vdCBi
 cmVha3BvaW50cy4gIEZvciB0aHJlYWRzIHRoYXQKKyAgIGhpdCBhIGJyZWFrcG9pbnQsIHdlIHNp
 bXBseSBwdXNoIGJhY2sgdGhlIHRocmVhZCBzbyBpdCB3aWxsIGhpdCB0aGUKKyAgIGJyZWFrIGFn
 YWluIChpZiBpdCBpc24ndCByZW1vdmVkIGJlZm9yZSB0aGVuKSBidXQgZm9yIG90aGVyIHNpZ25h
 bHMsCisgICBmb3IgZXhhbXBsZSBmYXVsdHMsIHRoZSBzaWduYWwgcmVtYWlucyBwZW5kaW5nLCB0
 aGUgInRvX3Jlc3VtZSIgdGhhdAorICAgcmVzdW1lcyB0aGUgd2hvbGUgcHJvY2VzcyBpcyBza2lw
 cGVkLCBhbmQgdGhlbiB0aGUgInRvX3dhaXQiIHJldHVybnMKKyAgIHRoZSBpbmZvcm1hdGlvbiBh
 Ym91dCBvbmUgb2YgdGhlIHBlbmRpbmcgc2lnbmFscyBpbnN0ZWFkLiAgKi8KK3N0YXRpYyBpbnQg
 cGVuZGluZ19zaWdzOworCisvKiBUaGUgTFdQIElEIG9mIHRoZSB0aHJlYWQgYmVpbmcgc3RlcHBl
 ZCwgb3IgMCBpZiBub25lLiAgKi8KK3N0YXRpYyBpbnQgc3RlcF9sd3BpZDsKKworLyogRmxhZyB0
 byBpbmRpY2F0ZSB3aGV0aGVyIGxhc3QgcmVzdW1lIHdhcyBhIHJlc3VtZSBhbGwgdGhyZWFkcyBv
 cgorICAgYSByZXN1bWUgc2luZ2xlIHRocmVhZC4gICovCitzdGF0aWMgaW50IHJlc3VtZV9hbGw7
 CisKKy8qIE5vbi16ZXJvIGlmIHRoZSBuZXRic2QtdGhyZWFkIGxheWVyIGlzIGFjdGl2ZS4gICov
 CitzdGF0aWMgaW50IG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDA7CisKKy8qIFRoZSBuZXRic2QtdGhy
 ZWFkIHRhcmdldF9vcHMgc3RydWN0dXJlLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBu
 YnNkX3RocmVhZF9vcHM7CisKK2ludCBkZWJ1Z19uYnNkX3RocmVhZDsKK3N0YXRpYyB2b2lkCitz
 aG93X2RlYnVnX25ic2RfdGhyZWFkIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5
 LAorCQkgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUp
 Cit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBOZXRCU0QgdGhy
 ZWFkIG1vZHVsZSBpcyAlcy5cbiIpLAorCQkgICAgdmFsdWUpOworfQorCisKKy8qIEFjdGl2YXRl
 IHRocmVhZCBzdXBwb3J0IGlmIGFwcHJvcHJpYXRlLiAgRG8gbm90aGluZyBpZiB0aHJlYWQKKyAg
 IHN1cHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUuICAqLworCitzdGF0aWMgdm9pZAorZW5hYmxlX25i
 c2RfdGhyZWFkICh2b2lkKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW07CisgIHZv
 aWQqIGNhbGxlcl9jb250ZXh0OworICBpbnQgc3RhdHVzOworCisgIC8qIElmIGFscmVhZHkgYWN0
 aXZlLCBub3RoaW5nIG1vcmUgdG8gZG8uICAqLworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQor
 ICAgIHJldHVybjsKKworICBpZiAobHdwX2J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHhm
 cmVlIChsd3BfYnVmZmVyKTsKKyAgICAgIGx3cF9idWZmZXIgPSBOVUxMOworICAgICAgbHdwX2Nv
 dW50ID0gbHdwX2J1ZnNpemUgPSAwOworICAgIH0KKyAgCisgIC8qIHB1c2hfdGFyZ2V0ICgmbmJz
 ZF90aHJlYWRfb3BzKTsgKi8KKyAgbmJzZF90aHJlYWRfYWN0aXZlID0gMTsKK30KKworLyogRGVh
 Y3RpdmF0ZSB0aHJlYWQgc3VwcG9ydC4gIERvIG5vdGhpbmcgaXMgdGhyZWFkIHN1cHBvcnQgaXMK
 KyAgIGFscmVhZHkgaW5hY3RpdmUuICAqLworCisjaWYgMAorc3RhdGljIHZvaWQKK2Rpc2FibGVf
 bmJzZF90aHJlYWQgKHZvaWQpCit7CisgIGlmICghbmJzZF90aHJlYWRfYWN0aXZlKQorICAgIHJl
 dHVybjsKKworICB1bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKKyAgbmJzZF90aHJl
 YWRfYWN0aXZlID0gMDsKK30KKyNlbmRpZgorCisvKiBVcGRhdGUgb3VyIGx3cF9pbmZvIGJ1ZmZl
 ciwgYW5kIHRlbGwgR0RCIGFib3V0IGFkZHMgb3IgZGVsZXRlcy4KKworICAgQnkgZG9pbmcgdGhl
 IHRocmVhZCBhZGQgYW5kIHRocmVhZCBkZWxldGUgb3BlcmF0aW9ucyBoZXJlIGFzIHdlCisgICBs
 ZWFybiBhYm91dCB0aHJlYWRzLCB3ZSBhbGxvdyB1c2VycyB0byBydW4gdGhyZWFkLXNwZWNpZmlj
 IGNvbW1hbmRzCisgICB3aXRob3V0IG5lZWRpbmcgdG8gcnVuICJpbmZvIHRocmVhZHMiIGZpcnN0
 LiAKKworICAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgd2FpdHN0YXR1cyBzdHJ1
 Y3QsIHdoaWNoCisgICBpcyBjb3BpZWQgaW50byB0aGUgd2FpdHN0YXR1cyBmb3IgdGhlIHRocmVh
 ZCB3ZSBmaW5kIGFzIHRoZSBzaWduYWxsZWQKKyAgIHRocmVhZC4gICovCisKK3N0YXRpYyB2b2lk
 Cit1cGRhdGVfbHdwYnVmIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAg
 aW50IHBpOworICBsd3BpZF90IGx3cF9pZCwgc2lnX2x3cGlkOworICBzdHJ1Y3QgcHRyYWNlX2x3
 cGluZm8gcHRfaW5mbzsKKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBBY2N1bXVsYXRlIGFuIGFy
 cmF5IG9mIE5ldEJTRCB0aHJlYWRzLCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIExXUCBpZC4KKwor
 ICAgICBUaGUgcmVhc29uIGZvciB1c2luZyBkZXNjZW5kaW5nIG9yZGVyIGlzIHRoYXQgdGhpcyBp
 cyB0aGUgb3JkZXIKKyAgICAgaW4gd2hpY2ggTFdQcyBhcmUgcmV0dXJuZWQgYnkgdGhlIHB0cmFj
 ZSgpIFBUX0xXUElORk8gZnVuY3Rpb24sCisgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGVtIGlu
 IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0IGluIHRoZQorICAgICBwX2x3cHMgbGlzdCBm
 b3IgdGhlIHByb2Nlc3MsIGFuZCBuZXcgZW50cmllcyBhcmUgYXNzaWduZWQgYXNjZW5kaW5nCisg
 ICAgIExXUCBJRHMgYW5kIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGF0IGxpc3QuICAqLwor
 CisgIGx3cF9pZCA9IHNpZ19sd3BpZCA9IDA7CisgIHBpID0gMDsKKyAgCisgIHdoaWxlICgxKQor
 ICAgIHsKKyAgICAgIHB0X2luZm8ucGxfbHdwaWQgPSBsd3BfaWQ7CisgICAgICBlcnJubyA9IDA7
 CisgICAgICBpZiAocHRyYWNlIChQVF9MV1BJTkZPLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
 CQkgICZwdF9pbmZvLCBzaXplb2YgKHB0X2luZm8pKSA9PSAtMSkKKwl7CisJICBpZiAoZXJybm8g
 PT0gRVNSQ0gpCisJICAgIGJyZWFrOworCSAgZWxzZSBpZiAoZXJybm8gIT0gMCkKKwkgICAgcGVy
 cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHRocmVhZCBpbmZvcm1hdGlvbiIpKTsKKwl9
 CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdk
 Yl9zdGRsb2csCisJCQkgICAgIk5UVVA6IGx3cGluZm8gb24gJWQgcmV0dXJucyBsd3AgJWQsIHBs
 X2V2ZW50ICVkXG4iLAorCQkJICAgIGx3cF9pZCwgcHRfaW5mby5wbF9sd3BpZCwgcHRfaW5mby5w
 bF9ldmVudCk7CisJICAKKyAgICAgIC8qIFJldHJpZXZlIHRoZSBMV1AgSUQgdGhhdCB3YXMgZm91
 bmQuICBUaGlzIGFsc28gc2V0cyB0aGUgSUQgdG8KKwkgc3RhcnQgZnJvbSB0aGUgbmV4dCB0aW1l
 IGFyb3VuZCB0aGUgbG9vcC4gICovCisgICAgICBsd3BfaWQgPSBwdF9pbmZvLnBsX2x3cGlkOwor
 CisgICAgICAvKiBMV1AgaWQgMCBpcyBlbmQgb2YgbGlzdC4gICovCisgICAgICBpZiAobHdwX2lk
 ID09IDApCisJYnJlYWs7CisgICAgICAKKyAgICAgIC8qIElmIHRoZSBMV1Agd2UgZm91bmQgaGFz
 IGFuIElEIGxlc3MgdGhhbiB0aGUgSUQgb2YgdGhlIGN1cnJlbnQKKwkgYnVmZmVyIGVudHJ5LCB0
 aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBlbnRyeSBpcyBhIGRlbGV0ZWQgdGhyZWFkLgorCSBUZWxs
 IEdEQiBhYm91dCBpdHMgZGVtaXNlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBidWZmZXIuIAor
 CSAgCisJIFdlIGhhdmUgdG8gZG8gdGhpcyBpbiBhIGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiB0
 aHJlYWRzCisJIHRvIGJlIHJlbW92ZWQuICAqLworICAgICAgd2hpbGUgKHBpIDwgbHdwX2NvdW50
 ICYmIGx3cF9pZCA8IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJeworCSAgaWYgKGRl
 YnVnX25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ
 CQkJIk5UVVA6IHRocmVhZCBwdGlkICVkLCVsZCBoYXMgZGlzYXBwZWFyZWRcbiIsCisJCQkJUElE
 R0VUIChsd3BfYnVmZmVyW3BpXS5wdGlkKSwKKwkJCQlUSURHRVQgKGx3cF9idWZmZXJbcGldLnB0
 aWQpKTsKKworCSAgLyogVGVsbCBHREIuICAqLworCSAgZGVsZXRlX3RocmVhZCAobHdwX2J1ZmZl
 cltwaV0ucHRpZCk7CisKKwkgIC8qIFJlbW92ZSB0aGUgZGVsZXRlZCBlbnRyeS4gICovCisJICBp
 ZiAocGkgPCBsd3BfY291bnQpCisJICAgIG1lbW1vdmUgKGx3cF9idWZmZXIgKyBwaSArIDEsIGx3
 cF9idWZmZXIgKyBwaSwgCisJCSAgICAgKGx3cF9jb3VudCAtIHBpKSAqIHNpemVvZiAoc3RydWN0
 IGx3cF9pbmZvKSk7CisJICBsd3BfY291bnQtLTsKKwl9CisKKyAgICAgIC8qIElmIHdlJ3JlIG5v
 dyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgb3IgdGhlIExXUCBmb3VuZAorCSBo
 YXMgYW4gTFdQIElEIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgYnVmZmVy
 LCB0aGlzCisJIGlzIGEgbmV3IHRocmVhZC4gIEFsbG9jYXRlIG1vcmUgYnVmZmVyIHNwYWNlIGlm
 IG5lZWQgYmUsCisJIG1ha2Ugcm9vbSBmb3IgdGhpcyBlbnRyeSwgYW5kIHN0b3JlIGl0LiAgVGhl
 biB0ZWxsIEdEQiBhYm91dAorCSB0aGUgbmV3IHRocmVhZC4gICovCisgICAgICBpZiAocGkgPj0g
 bHdwX2NvdW50IHx8IGx3cF9pZCA+IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJewor
 CSAgLyogQWxsb2NhdGUgbW9yZSBzcGFjZSwgaWYgd2UgbmVlZCBpdC4gICovCisJICBpZiAobHdw
 X2NvdW50ID09IGx3cF9idWZzaXplKQorCSAgICB7CisJICAgICAgaWYgKGx3cF9idWZzaXplKQor
 CQlsd3BfYnVmc2l6ZSAqPSAyOworCSAgICAgIGVsc2UKKwkJbHdwX2J1ZnNpemUgPSAxOworCSAg
 ICAgIGx3cF9idWZmZXIgPSAoc3RydWN0IGx3cF9pbmZvICopIHhyZWFsbG9jIChsd3BfYnVmZmVy
 LCAKKwkJCQkJCQkgbHdwX2J1ZnNpemUgKiBzaXplb2YgKHN0cnVjdCBsd3BfaW5mbykpOworCSAg
 ICB9CisKKwkgIC8qIFB1c2ggY3VycmVudCBhbmQgbGF0ZXIgZW50cmllcywgaWYgYW55LCBvdmVy
 LiAgKi8KKwkgIGlmIChwaSA8IGx3cF9jb3VudCkKKwkgICAgbWVtbW92ZSAobHdwX2J1ZmZlciAr
 IHBpICsgMSwgbHdwX2J1ZmZlciArIHBpLCAKKwkJICAgICAobHdwX2NvdW50IC0gcGkpICogc2l6
 ZW9mIChzdHJ1Y3QgbHdwX2luZm8pKTsKKworCSAgLyogVXBkYXRlIHRoZSBjb3VudCBvZiBMV1Bz
 LiAgKi8KKwkgIGx3cF9jb3VudCsrOworCisJICAvKiBJbml0aWFsaXplIHRoZSBuZXcgZW50cnku
 ICAqLworCSAgbHdwX2J1ZmZlcltwaV0ucHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9y
 X3B0aWQpLCBsd3BfaWQpOworCSAgaWYgKHB0X2luZm8ucGxfZXZlbnQgPT0gUExfRVZFTlRfU0lH
 TkFMKQorCSAgICB7CisJICAgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVkID0gMTsKKwkgICAg
 ICBsd3BfYnVmZmVyW3BpXS53YWl0c3RhdHVzID0gKnN0YXR1czsKKwkgICAgICBzaWdfbHdwaWQg
 PSBsd3BfaWQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVk
 ID0gMDsKKworCSAgLyogQWR2YW5jZSB0aGUgTFdQIGJ1ZmZlciBwb2ludGVyLiAgKi8KKwkgIHBp
 Kys7CisJICAKKwkgIC8qIFRlbGwgR0RCIGFib3V0IHRoZSBuZXcgdGhyZWFkLiAgKi8KKwkgIGlm
 IChsd3BfY291bnQgPT0gMSkKKwkgICAgeworCSAgICAgIC8qIFNlZSBpZiBHREIgc3RpbGwgaGFz
 IFRJRCB6ZXJvLCBpZiBzbyBzZXQgdGhlIFRJRC4gICovCisJICAgICAgaWYgKFRJREdFVCAoaW5m
 ZXJpb3JfcHRpZCkgPT0gMCkKKwkJeworCQkgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7CisJCSAg
 CisJCSAgcHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3BfaWQpOwor
 CQkgIC8qIHRocmVhZF9jaGFuZ2VfcHRpZCAoaW5mZXJpb3JfcHRpZCwgcHRpZCk7ICovCisJCSAg
 dHAgPSBmaW5kX3RocmVhZF9waWQgKGluZmVyaW9yX3B0aWQpOworCQkgIGlmICh0cCAhPSBOVUxM
 KQorCQkgICAgeworCQkgICAgICB0cC0+cHRpZCA9IHB0aWQ7CisJCSAgICAgIGluZmVyaW9yX3B0
 aWQgPSBwdGlkOworCQkgIAorCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJp
 bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogc2V0dGluZyBtYWlu
 IHRocmVhZCBwdGlkIHRvICVkLCVsZFxuIiwKKwkJCQkJICAgIFBJREdFVCAocHRpZCksIFRJREdF
 VCAocHRpZCkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogTmV3IHRo
 cmVhZCAoZmlyc3QgdGhyZWFkKSwgYWRkIGl0IHRvIEdEQi4gICovCisJCSAgICAgIGluZmVyaW9y
 X3B0aWQgPSBwdGlkOworCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJpbnRm
 X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogYWRkaW5nIGZpcnN0IHRo
 cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCQkgICAgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgbHdw
 X2lkKTsKKwkJICAgICAgYWRkX3RocmVhZCAocHRpZCk7CisJCSAgICB9CisJCX0KKwkgICAgfQor
 CSAgZWxzZQorCSAgICB7CisJICAgICAgLyogTmV3IHRocmVhZCBidXQgbm90IHRoZSBmaXJzdCwg
 YWRkIGl0IHRvIEdEQi4gICovCisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJp
 bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFVQOiBhZGRpbmcgbmV3IHRo
 cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCSAgICBQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3Bf
 aWQpOworCSAgICAgIGFkZF90aHJlYWQgKE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQp
 LCBsd3BfaWQpKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3VuZCBhbiBl
 eGlzdGluZyB0aHJlYWQuICBVcGRhdGUgaXRzIHN0YXR1cyBpbiB0aGUgYnVmZmVyLgorCSAgICAg
 Tm90ZSB0aGF0IHdlIGNsZWFyIHRoZSBzaWduYWxsZWQgZmxhZyBpZiB0aGlzIGlzIHRoZSBmaXJz
 dAorCSAgICAgY2FsbCBhbmQgdGhpcyB0aHJlYWQgd2Fzbid0IHRoZSBzaWduYWxsZWQgdGhyZWFk
 LCBidXQgd2UgCisJICAgICBsZWF2ZSBpdCBhbG9uZSBvbiBzdWJzZXF1ZW50IGNhbGxzLiAgVGhh
 dCB3YXkgdGhlIHN1YnNlcXVlbnQKKwkgICAgIGNhbGxzIHdpbGwgYWNjdW11bGF0ZSB0aGUgc2V0
 IG9mIHNpZ25hbGxlZCB0aHJlYWRzLiAgKi8KKwkgIGlmIChwdF9pbmZvLnBsX2V2ZW50ID09IFBM
 X0VWRU5UX1NJR05BTCkKKwkgICAgeworCSAgICAgIGx3cF9idWZmZXJbcGldLnNpZ25hbGxlZCA9
 IDE7CisJICAgICAgbHdwX2J1ZmZlcltwaV0ud2FpdHN0YXR1cyA9ICpzdGF0dXM7CisJICAgICAg
 c2lnX2x3cGlkID0gbHdwX2lkOworCSAgICB9CisJICAKKwkgIC8qIEFkdmFuY2UgdGhlIExXUCBi
 dWZmZXIgcG9pbnRlci4gICovCisJICBwaSsrOworCX0KKyAgICB9CisgIGlmIChkZWJ1Z19uYnNk
 X3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiTlRVUDog
 c2lnbmFsbGVkIHRocmVhZCBsd3BpZCBpcyAlZFxuIiwgc2lnX2x3cGlkKTsKKworfQorCisjaWYg
 MAorLyogVGhlICJ0b19kZXRhY2giIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8K
 Kworc3RhdGljIHZvaWQKK25ic2RfdGhyZWFkX2RldGFjaCAoY2hhciAqYXJncywgaW50IGZyb21f
 dHR5KQoreyAgIAorICBzdHJ1Y3QgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IGZpbmRfdGFyZ2V0X2Jl
 bmVhdGggKCZuYnNkX3RocmVhZF9vcHMpOworCisgIGRpc2FibGVfbmJzZF90aHJlYWQgKCk7Cisg
 IGJlbmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorI2VuZGlmCisKKy8qIFJl
 c3VtZSBleGVjdXRpb24gb2YgdGhyZWFkIFBUSUQsIG9yIGFsbCB0aHJlYWRzIGlmIFBUSUQgaXMg
 LTEuICBJZgorICAgU1RFUCBpcyBub256ZXJvLCBzaW5nbGUtc3RlcCBpdC4gIElmIFNJR05BTCBp
 cyBub256ZXJvLCBnaXZlIGl0CisgICB0aGF0IHNpZ25hbC4gICovCisKK3N0YXRpYyB2b2lkCitu
 YnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSB0YXJnZXRfc2ln
 bmFsIHNpZ25hbCkKK3sKKyAgcGlkX3QgcGlkOworICBpbnQgcmVxdWVzdDsKKyAgCisgIC8qIEEg
 c3BlY2lmaWMgUFRJRCBtZWFucyBgc3RlcCBvbmx5IHRoaXMgcHJvY2VzcyBpZCcuICAqLworICBp
 ZiAocHRpZF9lcXVhbCAobWludXNfb25lX3B0aWQsIHB0aWQpIHx8IFRJREdFVCAocHRpZCkgPD0g
 MCkKKyAgICB7CisgICAgICByZXN1bWVfYWxsID0gMTsKKyAgICAgIHB0aWQgPSBpbmZlcmlvcl9w
 dGlkOworICAgIH0KKyAgZWxzZQorICAgIHJlc3VtZV9hbGwgPSAwOworICAKKyAgcGlkID0gcHRp
 ZF9nZXRfcGlkIChwdGlkKTsKKworI2lmIDAKKyAgaWYgKGNhdGNoX3N5c2NhbGxfZW5hYmxlZCAo
 KSA+IDApCisgICAgcmVxdWVzdCA9IFBUX1NZU0NBTEw7CisgIGVsc2UKKyNlbmRpZgorICAgIHJl
 cXVlc3QgPSBQVF9DT05USU5VRTsKKworI2lmZGVmIFBUX1NURVAKKyAgaWYgKHN0ZXApCisgICAg
 eworICAgICAgLyogSWYgdGhpcyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQVF9TVEVQLCBhIGhp
 Z2hlciBsZXZlbAorICAgICAgICAgZnVuY3Rpb24gd2lsbCBoYXZlIGNhbGxlZCBzaW5nbGVfc3Rl
 cCgpIHRvIHRyYW5zbXV0ZSB0aGUgc3RlcAorICAgICAgICAgcmVxdWVzdCBpbnRvIGEgY29udGlu
 dWUgcmVxdWVzdCAoYnkgc2V0dGluZyBicmVha3BvaW50cyBvbgorICAgICAgICAgYWxsIHBvc3Np
 YmxlIHN1Y2Nlc3NvciBpbnN0cnVjdGlvbnMpLCBzbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAg
 ICB3b3JyeSBhYm91dCB0aGF0IGhlcmUuICAqLworICAgICAgcmVxdWVzdCA9IFBUX1NURVA7Cisg
 ICAgfQorI2VuZGlmCisKKyAgLyogQW4gYWRkcmVzcyBvZiAoUFRSQUNFX1RZUEVfQVJHMykxIHRl
 bGxzIHB0cmFjZSB0byBjb250aW51ZSBmcm9tCisgICAgIHdoZXJlIGl0IHdhcy4gIElmIEdEQiB3
 YW50ZWQgaXQgdG8gc3RhcnQgc29tZSBvdGhlciB3YXksIHdlIGhhdmUKKyAgICAgYWxyZWFkeSB3
 cml0dGVuIGEgbmV3IHByb2dyYW0gY291bnRlciB2YWx1ZSB0byB0aGUgY2hpbGQuICAqLworICBl
 cnJubyA9IDA7CisgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVy
 ZWQgKGdkYl9zdGRsb2csCisJCQkiTlRSOiAlcyBwdGlkICVkLCVsZCwgJXMsIHNpZ25hbCAlZFxu
 IiwKKwkJCShzdGVwID8gInN0ZXBwaW5nIiA6ICJyZXN1bWluZyIpLAorCQkJUElER0VUIChwdGlk
 KSwgVElER0VUIChwdGlkKSwKKwkJCShyZXN1bWVfYWxsID8gImFsbCB0aHJlYWRzIiA6ICJzaW5n
 bGUgdGhyZWFkIiksCisJCQlzaWduYWwpOworCisgIC8qIEFzc3VtZSBub3Qgc3RlcHBpbmcgc29t
 ZSBMV1AgSUQuICAqLworICBzdGVwX2x3cGlkID0gMDsKKyAgaWYgKHN0ZXApCisgICAgeworICAg
 ICAgc3RlcF9sd3BpZCA9IFRJREdFVCAocHRpZCk7CisgICAgICBpZiAoc3RlcF9sd3BpZCA8IDAp
 CisJc3RlcF9sd3BpZCA9IC1zdGVwX2x3cGlkOworICAgIH0JCisgIAorICBpZiAocmVzdW1lX2Fs
 bCkKKyAgICB7CisgICAgICBpZiAocGVuZGluZ19zaWdzID4gMCkKKwl7CisJICAvKiBXZSBoYXZl
 IHBlbmRpbmcgc2lnbmFscyBmcm9tIHRoZSBwcmV2aW91cyB3YWl0IHN0aWxsIAorCSAgICAgbmVl
 ZGluZyB0byBiZSBkZWxpdmVyZWQuICBTbyBkb24ndCByZXN1bWUgdGhlIHByb2Nlc3MsCisJICAg
 ICBpbnN0ZWFkIHRha2Ugbm8gYWN0aW9uIGFuZCB3ZSdsbCBkZWxpdmVyIG9uZSBvZiB0aG9zZQor
 CSAgICAgcGVuZGluZyBzaWduYWxzIGF0IHRoZSBuZXh0IHdhaXQuICAqLworCSAgaWYgKGRlYnVn
 X25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
 Ik5UUjogcHRpZCAlZCwlbGQgaGFzICVkIHBlbmRpbmcgc2lnbmFscywgc2tpcHBpbmcgcmVzdW1l
 XG4iLAorCQkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCksIHBlbmRpbmdfc2lncyk7CisJ
 ICByZXR1cm47CisJfQorICAgICAgaWYgKHN0ZXApCisJcHRyYWNlIChyZXF1ZXN0LCBwaWQsICh2
 b2lkICopIDEsIFRJREdFVCAocHRpZCkpOworICAgICAgZWxzZQorCXB0cmFjZSAocmVxdWVzdCwg
 cGlkLCAodm9pZCAqKSAxLAorCQl0YXJnZXRfc2lnbmFsX3RvX2hvc3QgKHNpZ25hbCkpOworICAg
 IH0KKyAgZWxzZQorICAgIHB0cmFjZSAocmVxdWVzdCwgcGlkLCAodm9pZCAqKSAxLCAtVElER0VU
 IChwdGlkKSk7CisgIAorICBpZiAoZXJybm8gIT0gMCkKKyAgICBwZXJyb3Jfd2l0aF9uYW1lICgo
 InB0cmFjZSIpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNoaWxkIHNwZWNpZmllZCBieSBQVElE
 IHRvIGRvIHNvbWV0aGluZy4gIFJldHVybiB0aGUKKyAgIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxk
 LCBvciBNSU5VU19PTkVfUFRJRCBpbiBjYXNlIG9mIGVycm9yOyBzdG9yZQorICAgdGhlIHN0YXR1
 cyBpbiAqT1VSU1RBVFVTLiAgKi8KKworc3RhdGljIHB0aWRfdAorbmJzZF90aHJlYWRfd2FpdDIg
 KHB0aWRfdCBwdGlkLAorCQkgICBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywg
 aW50IG9wdGlvbnMpCit7CisgIHBpZF90IHBpZDsKKyAgaW50IHN0YXR1cywgc2F2ZV9lcnJubzsK
 KworICBkbworICAgIHsKKyAgICAgIHNldF9zaWdpbnRfdHJhcCAoKTsKKworICAgICAgZG8KKwl7
 CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri
 X3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdGluZyBmb3IgcHRpZCAlZCwlbGQsIG9wdCAlZFxuIiwK
 KwkJCQlQSURHRVQgKHB0aWQpLCBUSURHRVQgKHB0aWQpLCBvcHRpb25zKTsKKworCSAgcGlkID0g
 d2FpdHBpZCAocHRpZF9nZXRfcGlkIChwdGlkKSwgJnN0YXR1cywgb3B0aW9ucyk7CisJICBzYXZl
 X2Vycm5vID0gZXJybm87CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZf
 dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdHBpZCBlcnJubyBpcyAlZCwg
 cGlkICVkLCBzdGF0dXMgJXhcbiIsCisJCQkJc2F2ZV9lcnJubywgcGlkLCBzdGF0dXMpOworCX0K
 KyAgICAgIHdoaWxlIChwaWQgPT0gLTEgJiYgc2F2ZV9lcnJubyA9PSBFSU5UUik7CisKKyAgICAg
 IGNsZWFyX3NpZ2ludF90cmFwICgpOworCisgICAgICAvKiBJZiBub3RoaW5nIGZvdW5kIGluIHRo
 ZSBubyB3YWl0IGNhc2UsIHJlcG9ydCB0aGF0LiAgKi8KKyAgICAgIGlmIChvcHRpb25zID09IFdO
 T0hBTkcgJiYgcGlkID09IDApCisJcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisgICAgICAKKyAg
 ICAgIGlmIChwaWQgPT0gLTEpCisJeworCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJy
 LAorCQkJICAgICAgXygiQ2hpbGQgcHJvY2VzcyB1bmV4cGVjdGVkbHkgbWlzc2luZzogJXMuXG4i
 KSwKKwkJCSAgICAgIHNhZmVfc3RyZXJyb3IgKHNhdmVfZXJybm8pKTsKKworCSAgLyogQ2xhaW0g
 aXQgZXhpdGVkIHdpdGggdW5rbm93biBzaWduYWwuICAqLworCSAgb3Vyc3RhdHVzLT5raW5kID0g
 VEFSR0VUX1dBSVRLSU5EX1NJR05BTExFRDsKKwkgIG91cnN0YXR1cy0+dmFsdWUuc2lnID0gVEFS
 R0VUX1NJR05BTF9VTktOT1dOOworCSAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7CisJfQorCisgICAg
 ICAvKiBJZ25vcmUgdGVybWluYXRlZCBkZXRhY2hlZCBjaGlsZCBwcm9jZXNzZXMuICAqLworICAg
 ICAgaWYgKCFXSUZTVE9QUEVEIChzdGF0dXMpICYmIHBpZCAhPSBwdGlkX2dldF9waWQgKGluZmVy
 aW9yX3B0aWQpKQorCXBpZCA9IC0xOworICAgIH0KKyAgd2hpbGUgKHBpZCA9PSAtMSk7CisKKyAg
 c3RvcmVfd2FpdHN0YXR1cyAob3Vyc3RhdHVzLCBzdGF0dXMpOworICByZXR1cm4gcGlkX3RvX3B0
 aWQgKHBpZCk7Cit9CisKK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX2NhbmNlbF9icmVha3BvaW50
 IChzdHJ1Y3QgbHdwX2luZm8gKmxwKQoreworICAvKiBBcnJhbmdlIGZvciBhIGJyZWFrcG9pbnQg
 dG8gYmUgaGl0IGFnYWluIGxhdGVyLiAgV2UgZG9uJ3Qga2VlcAorICAgICB0aGUgU0lHVFJBUCBz
 dGF0dXMgYW5kIGRvbid0IGZvcndhcmQgdGhlIFNJR1RSQVAgc2lnbmFsIHRvIHRoZQorICAgICBM
 V1AuICBXZSB3aWxsIGhhbmRsZSB0aGUgY3VycmVudCBldmVudCwgZXZlbnR1YWxseSB3ZSB3aWxs
 IHJlc3VtZQorICAgICB0aGlzIExXUCwgYW5kIHRoaXMgYnJlYWtwb2ludCB3aWxsIHRyYXAgYWdh
 aW4uCisKKyAgICAgSWYgd2UgZG8gbm90IGRvIHRoaXMsIHRoZW4gd2UgcnVuIHRoZSByaXNrIHRo
 YXQgdGhlIHVzZXIgd2lsbAorICAgICBkZWxldGUgb3IgZGlzYWJsZSB0aGUgYnJlYWtwb2ludCwg
 YnV0IHRoZSBMV1Agd2lsbCBoYXZlIGFscmVhZHkKKyAgICAgdHJpcHBlZCBvbiBpdC4gICovCisK
 KyAgaWYgKGxwLT53YWl0c3RhdHVzLmtpbmQgID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECisg
 ICAgICAmJiBscC0+d2FpdHN0YXR1cy52YWx1ZS5zaWcgPT0gU0lHVFJBUAorICAgICAgJiYgYnJl
 YWtwb2ludF9pbnNlcnRlZF9oZXJlX3AgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLQorCQkJCSAg
 ICAgREVDUl9QQ19BRlRFUl9CUkVBSykpCisgICAgeworICAgICAgaWYgKGRlYnVnX25ic2RfdGhy
 ZWFkKQorCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgICAiTlRDQjogUHVz
 aCBiYWNrIGJyZWFrcG9pbnQgZm9yIHB0aWQgJWQsJWxkXG4iLAorCQkJICAgIFBJREdFVCAobHAt
 PnB0aWQpLCBUSURHRVQgKGxwLT5wdGlkKSk7CisKKyAgICAgIC8qIEJhY2sgdXAgdGhlIFBDIGlm
 IG5lY2Vzc2FyeS4gICovCisgICAgICBpZiAoREVDUl9QQ19BRlRFUl9CUkVBSykKKwl3cml0ZV9w
 Y19waWQgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLSBERUNSX1BDX0FGVEVSX0JSRUFLLCBscC0+
 cHRpZCk7CisKKyAgICAgIC8qIFdlIG5vIGxvbmdlciBoYXZlIGEgcGVuZGluZyBzaWduYWwgZm9y
 IHRoaXMgdGhyZWFkLiAgKi8KKyAgICAgIGxwLT5zaWduYWxsZWQgPSAwOworCisgICAgICAvKiBO
 b3QgYSBwZW5kaW5nIHNpZ25hbCBhbnltb3JlLiAgKi8KKyAgICAgIHJldHVybiAxOworICAgIH0K
 KyAgcmV0dXJuIDA7Cit9CisKKy8qIFRoZSAidG9fd2FpdCIgbWV0aG9kIG9mIHRoZSBuYnNkX3Ro
 cmVhZF9vcHMuICAqLworCitzdGF0aWMgcHRpZF90CituYnNkX3RocmVhZF93YWl0IChwdGlkX3Qg
 cHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMpCit7CisgIHB0aWRfdCBhY3Rp
 dmVfcHRpZDsKKyAgc3RydWN0IGx3cF9pbmZvICpzZWxfdGhyZWFkOworICBpbnQgc2lnX3RocmVh
 ZHMsIGk7CisgIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyB0c3RhdHVzOworCisgIC8qIElmIHRo
 ZXJlIHdlcmUgcGVuZGluZyBzaWduYWxzIGFuZCBhIHJlc3VtZSBhbGwgdGhyZWFkcyB3YXMgZG9u
 ZSwKKyAgICAgdGhlIHByb2Nlc3Mgd2Fzbid0IGFjdHVhbGx5IHJlc3VtZWQgc28gZG9uJ3Qgd2Fp
 dCBvbiBpdC4gIEp1c3QKKyAgICAgZ28gb24gdG8gcGljayBhIHRocmVhZCB0byByZXBvcnQgb24u
 ICAqLworICBpZiAoIShwZW5kaW5nX3NpZ3MgPiAwICYmIHJlc3VtZV9hbGwpKQorICAgIHsKKyAg
 ICAgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMsIDApOworCisgICAg
 ICAvKiBEZWZhdWx0IHN0YXR1cyByZXR1cm5lZCBpcyB0aGUgb25lIHdlIGp1c3QgZ290LiAgKi8K
 KyAgICAgICpzdGF0dXMgPSB0c3RhdHVzOworICAgICAgCisgICAgICAvKiBUaGUgcHRpZCByZXR1
 cm5lZCBieSB0aGUgdGFyZ2V0IGJlbmVhdGggdXMgaXMgdGhlIHB0aWQgb2YgdGhlIHByb2Nlc3Mu
 CisJIFdlIG5lZWQgdG8gZmluZCB3aGljaCB0aHJlYWQgaXMgY3VycmVudGx5IGFjdGl2ZSBhbmQg
 cmV0dXJuIAorCSBpdHMgcHRpZC4gICovCisgICAgICB1cGRhdGVfbHdwYnVmICgmdHN0YXR1cyk7
 CisgIAorICAgICAgLyogTG9vcCBjaGVja2luZyBmb3IgYWRkaXRpb25hbCB0aHJlYWRzIHRoYXQg
 YXJlIHdhaXRpbmcsIGFuZCBnYXRoZXIKKwkgdXAgdGhlaXIgc3RhdHVzLiAgKi8KKyAgICAgIHdo
 aWxlICgxKQorCXsKKwkgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMs
 IFdOT0hBTkcpOworCSAgaWYgKFBJREdFVCAocHRpZCkgPT0gLTEpCisJICAgIGJyZWFrOworCSAg
 dXBkYXRlX2x3cGJ1ZiAoJnRzdGF0dXMpOworCX0KKyAgICB9CisgIAorICAvKiBGaW5kIGEgc3Vp
 dGFibGUgc2lnbmFsbGVkIHRocmVhZC4gIFBpY2sgdGhlIHN0ZXBwZWQgb25lLCBpZiB0aGVyZQor
 ICAgICBpcyBvbmU7IG90aGVyd2lzZSBwaWNrIGEgcmFuZG9tIG9uZS4gICovCisgIHNlbF90aHJl
 YWQgPSBOVUxMOworICBzaWdfdGhyZWFkcyA9IDA7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgbHdw
 X2NvdW50OyBpKyspCisgICAgeworICAgICAgaWYgKGx3cF9idWZmZXJbaV0uc2lnbmFsbGVkKQor
 CXsKKwkgIHNpZ190aHJlYWRzKys7CisJICBpZiAoVElER0VUIChsd3BfYnVmZmVyW2ldLnB0aWQp
 ID09IHN0ZXBfbHdwaWQpCisJICAgIHsKKwkgICAgICAvKiBJZiB0aGVyZSBpcyBhIHN0ZXBwZWQg
 dGhyZWFkLCBwaWNrIHRoYXQgb25lLiAgKi8KKwkgICAgICBzZWxfdGhyZWFkID0gJmx3cF9idWZm
 ZXJbaV07CisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJpbnRmX3VuZmlsdGVy
 ZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFc6IFBpY2tpbmcgcHRpZCAlZCwlbGQgYmVjYXVz
 ZSBpdCBpcyBzdGVwcGVkXG4iLAorCQkJCSAgICBQSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpLAor
 CQkJCSAgICBUSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpKTsKKwkgICAgICBicmVhazsKKwkgICAg
 fQorCSAgLyogUmFuZG9tbHkgcGljayB0aGlzIG9uZSBvciBrZWVwIHRoZSBwcmV2aW91cyBjaG9p
 Y2UsCisJICAgICBzdWNoIHRoYXQgYWxsIG9mIHRoZSBzaWduYWxsZWQgdGhyZWFkcyBoYXZlIGFu
 IGVxdWFsCisJICAgICBwcm9iYWJpbGl0eSBvZiBiZWluZyBwaWNrZWQuICAqLworCSAgaWYgKHNl
 bF90aHJlYWQgPT0gTlVMTCB8fCAKKwkgICAgICAoKChkb3VibGUpIHJhbmQgKCkpIC8gKFJBTkRf
 TUFYICsgMS4wKSkgPCAoMS4wIC8gc2lnX3RocmVhZHMpKQorCSAgICB7CisJICAgICAgc2VsX3Ro
 cmVhZCA9ICZsd3BfYnVmZmVyW2ldOworCSAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwkJ
 ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiTlRXOiBQaWNraW5nIHB0
 aWQgJWQsJWxkIG91dCBvZiAlZFxuIiwKKwkJCQkgICAgUElER0VUIChzZWxfdGhyZWFkLT5wdGlk
 KSwKKwkJCQkgICAgVElER0VUIChzZWxfdGhyZWFkLT5wdGlkKSwgc2lnX3RocmVhZHMpOworCSAg
 ICB9CisJfQorICAgIH0KKyAgCisgIC8qIFNjYW4gdGhlIExXUCB0YWJsZSBhZ2Fpbi4gIEZvciBl
 YWNoIHNpZ25hbGxlZCBMV1Agb3RoZXIgdGhhbiB0aGUKKyAgICAgY2hvc2VuIG9uZSwgYmFjayBp
 dCB1cCB0byB0aGUgYnJlYWtwb2ludCBpZiBpdCB3YXMgc3RvcHBlZCBieSBhCisgICAgIGJyZWFr
 cG9pbnQgYW5kIG1hcmsgaXQgYXMgbm90IHNpZ25hbGxlZCAoaXQgd2lsbCByZS1icmVhayBuZXh0
 CisgICAgIHRpbWUgd2UgcnVuIHRoZSB3aG9sZSBwcm9jZXNzKS4gIE90aGVyIExXUHMgKHRob3Nl
 IHdpdGggc2lnbmFscworICAgICBvdGhlciB0aGFuIGJyZWFrcG9pbnQgc3RvcCkgYXJlIGNvdW50
 ZWQgYnV0IG5vdCBiYWNrZWQgdXA7IGlmIHdlCisgICAgIGZpbmQgYW55IG9mIHRob3NlIHRoZW4g
 dGhvc2Ugd2lsbCBiZSBkZWxpdmVyZWQgbmV4dC4gICovCisgIHBlbmRpbmdfc2lncyA9IDA7Cisg
 IGlmIChzaWdfdGhyZWFkcyA+IDEpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IGx3cF9j
 b3VudDsgaSsrKQorCXsKKwkgIC8qIFNraXAgdGhlIHNlbGVjdGVkIExXUC4gICovCisJICBpZiAo
 Jmx3cF9idWZmZXJbaV0gPT0gc2VsX3RocmVhZCkKKwkgICAgY29udGludWU7CisJICAKKwkgIGlm
 IChsd3BfYnVmZmVyW2ldLnNpZ25hbGxlZCkKKwkgICAgeworCSAgICAgIGlmIChXSUZTVE9QUEVE
 IChsd3BfYnVmZmVyW2ldLndhaXRzdGF0dXMpKQorCQl7CisJCSAgaWYgKCFuYnNkX3RocmVhZF9j
 YW5jZWxfYnJlYWtwb2ludCAoJmx3cF9idWZmZXJbaV0pKQorCQkgICAgcGVuZGluZ19zaWdzKys7
 CisJCX0KKwkgICAgICBlbHNlCisJCXBlbmRpbmdfc2lncysrOworCSAgICB9CisJfQorICAgIH0K
 KyAgCisgIHB0aWQgPSBpbmZlcmlvcl9wdGlkOworICBpZiAoc2VsX3RocmVhZCAhPSBOVUxMKQor
 ICAgIHsKKyAgICAgIHB0aWQgPSAgTUVSR0VQSUQgKFBJREdFVCAocHRpZCksIFRJREdFVCAoc2Vs
 X3RocmVhZC0+cHRpZCkpOworICAgICAgKnN0YXR1cyA9IHRzdGF0dXM7CisgICAgICAKKyAgICAg
 IC8qIFRoZSBzaWduYWwgZm9yIHRoaXMgdGhyZWFkIGlzIG5vdyBiZWluZyByZXBvcnRlZCwgc28g
 Y2xlYXIKKwkgdGhlIGZsYWcgdGhhdCBzYXlzIGl0IGhhc24ndCBiZWVuIHJlcG9ydGVkIHlldC4g
 ICovCisgICAgICBzZWxfdGhyZWFkLT5zaWduYWxsZWQgPSAwOworICAgIH0KKyAgZWxzZSBpZiAo
 ZGVidWdfbmJzZF90aHJlYWQpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor
 CQkJIk5UVzogbm8gc2lnbmFsbGVkIHRocmVhZFxuIik7CisKKyAgaWYgKGRlYnVnX25ic2RfdGhy
 ZWFkKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSJOVFc6IHJldHVy
 bmluZyBwdGlkICVkLCVsZFxuIiwKKwkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCkpOwor
 CisgIHJldHVybiBwdGlkOworfQorCisvKiBUaGUgInRvX21vdXJuX2luZmVyaW9yIiBtZXRob2Qg
 b2YgdGhlIG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9t
 b3Vybl9pbmZlcmlvciAodm9pZCkKK3sKKyAgaW50IHN0YXR1czsKKworICAvKiBXYWl0IGp1c3Qg
 b25lIG1vcmUgdGltZSB0byBjb2xsZWN0IHRoZSBpbmZlcmlvcidzIGV4aXQgc3RhdHVzLgorICAg
 ICBEbyBub3QgY2hlY2sgd2hldGhlciB0aGlzIHN1Y2NlZWRzIHRob3VnaCwgc2luY2Ugd2UgbWF5
 IGJlCisgICAgIGRlYWxpbmcgd2l0aCBhIHByb2Nlc3MgdGhhdCB3ZSBhdHRhY2hlZCB0by4gIFN1
 Y2ggYSBwcm9jZXNzIHdpbGwKKyAgICAgb25seSByZXBvcnQgaXRzIGV4aXQgc3RhdHVzIHRvIGl0
 cyBvcmlnaW5hbCBwYXJlbnQuICAqLworICB3YWl0cGlkIChwdGlkX2dldF9waWQgKGluZmVyaW9y
 X3B0aWQpLCAmc3RhdHVzLCBXTk9IQU5HKTsKKworICBnZW5lcmljX21vdXJuX2luZmVyaW9yICgp
 OworCisgIC8qIGlmICghaGF2ZV9pbmZlcmlvcnMgKCkpICovCisgICAgdW5wdXNoX3RhcmdldCAo
 Jm5ic2RfdGhyZWFkX29wcyk7Cit9CisKKworLyogVGhlICJ0b190aHJlYWRfYWxpdmUiIG1ldGhv
 ZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Ro
 cmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCit7CisgIC8qIFRoZSB0aHJlYWQgbGlzdCBtYWludGFp
 bmVkIGJ5IEdEQiBpcyB1cCB0byBkYXRlLCBzaW5jZSB3ZSB1cGRhdGUKKyAgICAgaXQgZXZlcnl0
 aW1lIHdlIHN0b3AuICAgU28gY2hlY2sgdGhpcyBsaXN0LiAgKi8KKyAgcmV0dXJuIGluX3RocmVh
 ZF9saXN0IChwdGlkKTsKK30KKworLyogVGhlICJ0b19waWRfdG9fc3RyIiBtZXRob2Qgb2YgdGhl
 IG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyBjaGFyICoKK25ic2RfdGhyZWFkX3BpZF90
 b19zdHIgKHB0aWRfdCBwdGlkKQoreworICBpZiAoVElER0VUIChwdGlkKSA9PSAwKQorICAgIHsK
 KyAgICAgIHJldHVybiBub3JtYWxfcGlkX3RvX3N0ciAocHRpZCk7CisgICAgfQorICByZXR1cm4g
 eHN0cnByaW50ZiAoXygiVGhyZWFkICVsZCIpLCBUSURHRVQgKHB0aWQpKTsKK30KKworLyogVXBk
 YXRlIHRoZSB0YXJnZXRfb3BzIHdpdGggb3VyIHRocmVhZCBtYWNoaW5lcnkuICAqLworCit2b2lk
 Citpbml0X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpCit7CisgIC8qIHQt
 PnRvX2RldGFjaCAgICAgICAgICAgICA9IG5ic2RfdGhyZWFkX2RldGFjaDsgKi8KKyAgdC0+dG9f
 cmVzdW1lICAgICAgICAgICAgID0gbmJzZF90aHJlYWRfcmVzdW1lOworICB0LT50b193YWl0ICAg
 ICAgICAgICAgICAgPSBuYnNkX3RocmVhZF93YWl0OworICB0LT50b19tb3Vybl9pbmZlcmlvciAg
 ICAgPSBuYnNkX3RocmVhZF9tb3Vybl9pbmZlcmlvcjsKKyAgdC0+dG9fdGhyZWFkX2FsaXZlICAg
 ICAgID0gbmJzZF90aHJlYWRfdGhyZWFkX2FsaXZlOworICB0LT50b19waWRfdG9fc3RyICAgICAg
 ICAgPSBuYnNkX3RocmVhZF9waWRfdG9fc3RyOworCisgIGVuYWJsZV9uYnNkX3RocmVhZCAoKTsK
 K30KKwordm9pZAorX2luaXRpYWxpemVfbmJzZF90aHJlYWQgKHZvaWQpCit7CisjaWYgMAorICBp
 bml0X25ic2RfdGhyZWFkX29wcyAoKTsKKyAgYWRkX3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7
 CisjZW5kaWYKKworICBhZGRfc2V0c2hvd196aW50ZWdlcl9jbWQgKCJuYnNkLXRocmVhZCIsIGNs
 YXNzX21haW50ZW5hbmNlLAorCQkJICAgICZkZWJ1Z19uYnNkX3RocmVhZCwgXygiXAorU2V0IGRl
 YnVnZ2luZyBvZiBOZXRCU0QgdGhyZWFkIG1vZHVsZS4iKSwgXygiXAorU2hvdyBkZWJ1Z2dpbmcg
 b2YgTmV0QlNEIHRocmVhZCBtb2R1bGUuIiksIF8oIlwKK0VuYWJsZXMgcHJpbnRmIGRlYnVnZ2lu
 ZyBvdXRwdXQuIiksCisJCQkgICAgTlVMTCwKKwkJCSAgICBzaG93X2RlYnVnX25ic2RfdGhyZWFk
 LAorCQkJICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsKK30KLS0tIC4vZ251L2Rp
 c3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuaC5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6MDUuMDAwMDAw
 MDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmgJMjAxMC0wNC0x
 OSAxMTo0MzowNS4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSwyNSBAQAorLyogVGhyZWFkcyBz
 dXBwb3J0IGZvciBOZXRCU0QgNS4wLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0
 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvbnRyaWJ1dGVkIGJ5IFBhdWwgS29uaW5nLCBE
 ZWxsLCBpbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9n
 cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
 ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
 c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
 ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
 bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
 b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
 IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl
 bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo
 YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
 IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
 YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
 LAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCitleHRlcm4gdm9pZCBpbml0
 X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpOworCi0tLSAuL2dudS9kaXN0
 L2dkYjYvZ2RiL2kzODZic2QtbmF0LmMub3JpZwkyMDA3LTAyLTI0IDA4OjA1OjE4LjAwMDAwMDAw
 MCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5jCTIwMTAtMDQtMTkg
 MTI6NDU6MDEuMDAwMDAwMDAwIC0wNDAwCkBAIC05MCw3ICs5MCw3IEBACiAKIC8qIFN1cHBseSB0
 aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBHUkVHUywgdG8gUkVHQ0FDSEUuICAqLwog
 Ci1zdGF0aWMgdm9pZAordm9pZAogaTM4NmJzZF9zdXBwbHlfZ3JlZ3NldCAoc3RydWN0IHJlZ2Nh
 Y2hlICpyZWdjYWNoZSwgY29uc3Qgdm9pZCAqZ3JlZ3MpCiB7CiAgIGNvbnN0IGNoYXIgKnJlZ3Mg
 PSBncmVnczsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgR1JFR1MuICBJZiBSRUdOVU0gaXMgLTEs
 IGNvbGxlY3QgYW5kIHN0b3JlIGFsbCBhcHByb3ByaWF0ZQogICAgcmVnaXN0ZXJzLiAgKi8KIAot
 c3RhdGljIHZvaWQKK3ZvaWQKIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChjb25zdCBzdHJ1Y3Qg
 cmVnY2FjaGUgKnJlZ2NhY2hlLAogCQkJIHZvaWQgKmdyZWdzLCBpbnQgcmVnbnVtKQogewotLS0g
 Li9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5oLm9yaWcJMjAwNi0wNy0wMiAxNjoxNDox
 NS4wMDAwMDAwMDAgLTA0MDAKKysrIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4NmJzZC1uYXQuaAky
 MDEwLTA0LTE5IDExOjQzOjA1LjAwMDAwMDAwMCAtMDQwMApAQCAtMjcsNCArMjcsMTEgQEAKIAog
 ZXh0ZXJuIHN0cnVjdCB0YXJnZXRfb3BzICppMzg2YnNkX3RhcmdldCAodm9pZCk7CiAKK2V4dGVy
 biB2b2lkIGkzODZic2Rfc3VwcGx5X2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs
 IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZ3JlZ3Mp
 OworCitleHRlcm4gdm9pZCBpMzg2YnNkX2NvbGxlY3RfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJl
 Z2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
 b2lkICpncmVncywgaW50IHJlZ251bSk7CisKKwogI2VuZGlmIC8qIGkzODZic2QtbmF0LmggKi8K
 LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4Nm5ic2QtbmF0LmMub3JpZwkyMDA4LTAxLTI1IDA3
 OjM1OjQ4LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2bmJzZC1u
 YXQuYwkyMDEwLTA0LTE5IDE0OjM1OjE2LjAwMDAwMDAwMCAtMDQwMApAQCAtMjAsMjIgKzIwLDI5
 IEBACiAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCiAKICNpbmNsdWRlICJkZWZz
 LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKICNpbmNsdWRlICJnZGJjb3JlLmgiCiAjaW5jbHVk
 ZSAicmVnY2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKIAogI2luY2x1ZGUgImkzODYtdGRl
 cC5oIgorI2luY2x1ZGUgImkzODctdGRlcC5oIgogI2luY2x1ZGUgImkzODZic2QtbmF0LmgiCisj
 aW5jbHVkZSAibmJzZC10aHJlYWQuaCIKIAogLyogU3VwcG9ydCBmb3IgZGVidWdnaW5nIGtlcm5l
 bCB2aXJ0dWFsIG1lbW9yeSBpbWFnZXMuICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
 aW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+CiAjaW5jbHVk
 ZSA8bWFjaGluZS9mcmFtZS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvcGNiLmg+CiAKICNpbmNsdWRl
 ICJuYnNkLW5hdC5oIgogI2luY2x1ZGUgImJzZC1rdm0uaCIKIAorZXh0ZXJuIGludCBkZWJ1Z19u
 YnNkX3RocmVhZDsKKwogc3RhdGljIGludAogaTM4Nm5ic2Rfc3VwcGx5X3BjYiAoc3RydWN0IHJl
 Z2NhY2hlICpyZWdjYWNoZSwgc3RydWN0IHBjYiAqcGNiKQogewpAQCAtOTksNiArMTA2LDE1OSBA
 QAogfQogDAogCisKKy8qIE1hY3JvIHRvIGRldGVybWluZSBpZiBhIHJlZ2lzdGVyIGlzIGZldGNo
 ZWQgd2l0aCBQVF9HRVRSRUdTLiAgKi8KKyNkZWZpbmUgR0VUUkVHU19TVVBQTElFUyhyZWdudW0p
 IFwKKyAgKCgwIDw9IChyZWdudW0pICYmIChyZWdudW0pIDw9IDE1KSkKKworI2lmZGVmIEhBVkVf
 UFRfR0VUWE1NUkVHUworLyogU2V0IHRvIDEgaWYgdGhlIGtlcm5lbCBzdXBwb3J0cyBQVF9HRVRY
 TU1SRUdTLiAgSW5pdGlhbGl6ZWQgdG8gLTEKKyAgIHNvIHRoYXQgd2UgdHJ5IFBUX0dFVFhNTVJF
 R1MgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiAgKi8KK3N0YXRpYyBpbnQgaGF2ZV9wdHJhY2VfeG1t
 cmVncyA9IC0xOworI2VuZGlmCisgDAorIAorLyogRmV0Y2ggcmVnaXN0ZXIgUkVHTlVNIGZyb20g
 dGhlIGluZmVyaW9yLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzCisgICBmb3IgYWxsIHJlZ2lz
 dGVycyAoaW5jbHVkaW5nIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMpLiAgKi8KKworc3Rh
 dGljIHZvaWQKK2kzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVycyAoaW50IHJlZ251bSkK
 K3sKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCBHRVRSRUdTX1NVUFBMSUVTIChyZWdudW0pKQorICAg
 IHsKKyAgICAgIHN0cnVjdCByZWcgcmVnczsKKworICAgICAgaWYgKHB0cmFjZSAoUFRfR0VUUkVH
 UywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3Ms
 IFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQorCXBlcnJvcl93aXRoX25hbWUgKF8oIkNv
 dWxkbid0IGdldCByZWdpc3RlcnMiKSk7CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkK
 Kwl7CisJICBpZiAocmVnbnVtID09IC0xKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z
 dGRsb2csCisJCQkJIk5GSVI6IHB0aWQgJWQsJWxkLCByZWdudW0gJWRcbiIsCisJCQkJUElER0VU
 IChpbmZlcmlvcl9wdGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0pOwor
 CSAgZWxzZQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIk5GSVI6
 IHB0aWQgJWQsJWxkLCByZWdudW0gJWQ6ICV4XG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRp
 ZCksIFRJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtLCAoKGludCAqKSAmcmVncylb
 cmVnbnVtXSk7CisJfQorCisgICAgICBpMzg2YnNkX3N1cHBseV9ncmVnc2V0IChjdXJyZW50X3Jl
 Z2NhY2hlLCAmcmVncyk7CisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9
 CisKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAg
 IHsKKyAgICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdT
 CisgICAgICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJl
 Z3MgIT0gMAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRp
 ZCksCisJCSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9w
 dGlkKSkgPT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKwkgIGkzODdfc3Vw
 cGx5X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgLTEsIHhtbXJlZ3MpOworCX0KKyAgICAgIGVs
 c2UKKwl7CisgICAgICAgICAgaWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVy
 aW9yX3B0aWQpLAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJmZwcmVncywgVElER0VUIChp
 bmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNvdWxkbid0
 IGdldCBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CisKKwkgIGkzODdfc3VwcGx5X2ZzYXZlIChj
 dXJyZW50X3JlZ2NhY2hlLCAtMSwgJmZwcmVncyk7CisJfQorI2Vsc2UKKyAgICAgIGlmIChwdHJh
 Y2UgKFBUX0dFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZ
 UEVfQVJHMykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJcGVycm9y
 X3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKwor
 ICAgICAgaTM4N19zdXBwbHlfZnNhdmUgKGN1cnJlbnRfcmVnY2FjaGUsIC0xLCAmZnByZWdzKTsK
 KyNlbmRpZgorICAgIH0KK30KKworLyogU3RvcmUgcmVnaXN0ZXIgUkVHTlVNIGJhY2sgaW50byB0
 aGUgaW5mZXJpb3IuICBJZiBSRUdOVU0gaXMgLTEsIGRvCisgICB0aGlzIGZvciBhbGwgcmVnaXN0
 ZXJzIChpbmNsdWRpbmcgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycykuICAqLworCitzdGF0
 aWMgdm9pZAoraTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzIChpbnQgcmVnbnVtKQor
 eworICBpZiAocmVnbnVtID09IC0xIHx8IEdFVFJFR1NfU1VQUExJRVMgKHJlZ251bSkpCisgICAg
 eworICAgICAgc3RydWN0IHJlZyByZWdzOworCisgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdT
 LCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAorICAgICAgICAgICAgICAgICAgKFBUUkFDRV9UWVBF
 X0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKyAgICAgICAgcGVy
 cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHJlZ2lzdGVycyIpKTsKKworICAgICAgaTM4
 NmJzZF9jb2xsZWN0X2dyZWdzZXQgKGN1cnJlbnRfcmVnY2FjaGUsICZyZWdzLCByZWdudW0pOwor
 CisgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJeworCSAgaWYgKHJlZ251bSA9PSAtMSkK
 KwkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVk
 LCVsZCwgcmVnbnVtICVkXG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRpZCksIFRJREdFVCAo
 aW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtKTsKKwkgIGVsc2UKKwkgICAgZnByaW50Zl91bmZp
 bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVkLCVsZCwgcmVnbnVtICVkOiAl
 eFxuIiwKKwkJCQlQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBUSURHRVQgKGluZmVyaW9yX3B0aWQp
 LAorCQkJCXJlZ251bSwgKChpbnQgKikgJnJlZ3MpW3JlZ251bV0pOworCX0KKyAgICAgIAorICAg
 ICAgaWYgKHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkgICAg
 ICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9
 PSAtMSkKKyAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgcmVnaXN0
 ZXJzIikpOworCisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9CisKKyAg
 aWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAgIHsKKyAg
 ICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAg
 ICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJlZ3MgIT0g
 MAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJ
 CSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkg
 PT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKworCSAgaTM4N19jb2xsZWN0
 X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCB4bW1yZWdzKTsKKworCSAgaWYgKHB0
 cmFjZSAoUFRfU0VUWE1NUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAgICAgKFBU
 UkFDRV9UWVBFX0FSRzMpIHhtbXJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQor
 ICAgICAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgWE1NIHJlZ2lz
 dGVycyIpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaGF2ZV9wdHJhY2VfeG1tcmVncyA9IDA7
 CisjZW5kaWYKKyAgICAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1MsIFBJREdFVCAoaW5m
 ZXJpb3JfcHRpZCksCisJCSAgICAgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQg
 KGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKwkgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRu
 J3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKworICAgICAgICAgIGkzODdfY29sbGVj
 dF9mc2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCAmZnByZWdzKTsKKworICAgICAgICAg
 IGlmIChwdHJhY2UgKFBUX1NFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAg
 ICAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09
 IC0xKQorCSAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBw
 b2ludCBzdGF0dXMiKSk7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAgICAgIH0KKyNl
 bmRpZgorICAgIH0KK30KKworDAorCiAvKiBQcm92aWRlIGEgcHJvdG90eXBlIHRvIHNpbGVuY2Ug
 LVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwogdm9pZCBfaW5pdGlhbGl6ZV9pMzg2bmJzZF9uYXQg
 KHZvaWQpOwogCkBAIC0xMDksNyArMjY5LDEwIEBACiAKICAgLyogQWRkIHNvbWUgZXh0cmEgZmVh
 dHVyZXMgdG8gdGhlIGNvbW1vbiAqQlNEL2kzODYgdGFyZ2V0LiAgKi8KICAgdCA9IGkzODZic2Rf
 dGFyZ2V0ICgpOworICBpbml0X25ic2RfdGhyZWFkX29wcyAodCk7CiAgIHQtPnRvX3BpZF90b19l
 eGVjX2ZpbGUgPSBuYnNkX3BpZF90b19leGVjX2ZpbGU7CisgIHQtPnRvX2ZldGNoX3JlZ2lzdGVy
 cyA9IGkzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVyczsKKyAgdC0+dG9fc3RvcmVfcmVn
 aXN0ZXJzID0gaTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzOyAgCiAgIGFkZF90YXJn
 ZXQgKHQpOwogCiAgIC8qIFN1cHBvcnQgZGVidWdnaW5nIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBp
 bWFnZXMuICAqLwotLS0gLi9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvaTM4Ni9kZWZzLm1rLm9yaWcJ
 MjAwNi0xMS0yNSAxMTozODo1MS4wMDAwMDAwMDAgLTA1MDAKKysrIC4vZ251L3Vzci5iaW4vZ2Ri
 Ni9hcmNoL2kzODYvZGVmcy5tawkyMDEwLTA0LTE5IDEzOjQ1OjExLjAwMDAwMDAwMCAtMDQwMApA
 QCAtMyw1ICszLDUgQEAKICMgR2VuZXJhdGVkIGZyb206IE5ldEJTRDogbWtuYXRpdmUuY29tbW9u
 LHYgMS44IDIwMDYvMDUvMjYgMTk6MTc6MjEgbXJnIEV4cCAKICMKIEdfSU5URVJOQUxfQ0ZMQUdT
 PSAgICAgLUkuIC1JJHtHTlVIT1NURElTVH0vZ2RiIC1JJHtHTlVIT1NURElTVH0vZ2RiL2NvbmZp
 ZyAtRExPQ0FMRURJUj0iXCIvdXNyL3NoYXJlL2xvY2FsZVwiIiAtREhBVkVfQ09ORklHX0ggLUkk
 e0dOVUhPU1RESVNUfS9nZGIvLi4vaW5jbHVkZS9vcGNvZGUgLUkke0dOVUhPU1RESVNUfS9nZGIv
 Li4vcmVhZGxpbmUvLi4gIC1JLi4vYmZkIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2JmZCAtSSR7
 R05VSE9TVERJU1R9L2dkYi8uLi9pbmNsdWRlICAtSS4uL2ludGwgLUkke0dOVUhPU1RESVNUfS9n
 ZGIvLi4vaW50bCAgLURNSV9PVVQ9MSAtRFRVST0xIC1XaW1wbGljaXQgLVdyZXR1cm4tdHlwZSAt
 V2NvbW1lbnQgLVd0cmlncmFwaHMgLVdmb3JtYXQgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJp
 dGggLVdmb3JtYXQtbm9ubGl0ZXJhbCAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1mdW5jdGlvbiAt
 V25vLXBvaW50ZXItc2lnbiAKLUdfTElCR0RCX09CUz1pMzg2LXRkZXAubyBpMzg3LXRkZXAubyBp
 Mzg2YnNkLXRkZXAubyBpMzg2bmJzZC10ZGVwLm8gbmJzZC10ZGVwLm8gIGNvcmVsb3cubyBzb2xp
 Yi5vIHNvbGliLXN2cjQubyBzZXItYmFzZS5vIHNlci11bml4Lm8gc2VyLXBpcGUubyBzZXItdGNw
 Lm8gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyAgbmJzZC1uYXQubyBpMzg2YnNkLW5hdC5vIGkz
 ODZuYnNkLW5hdC5vIGJzZC1rdm0ubyAgcmVtb3RlLm8gZGNhY2hlLm8gcmVtb3RlLXV0aWxzLm8g
 dHJhY2Vwb2ludC5vIGF4LWdlbmVyYWwubyBheC1nZGIubyByZW1vdGUtZmlsZWlvLm8gIGNsaS1k
 dW1wLm8gIGNsaS1kZWNvZGUubyBjbGktc2NyaXB0Lm8gY2xpLWNtZHMubyBjbGktc2V0c2hvdy5v
 IGNsaS11dGlscy5vICBjbGktbG9nZ2luZy5vICBjbGktaW50ZXJwLm8gbWktb3V0Lm8gbWktY29u
 c29sZS5vICBtaS1jbWRzLm8gbWktY21kLWVudi5vIG1pLWNtZC12YXIubyBtaS1jbWQtYnJlYWsu
 byBtaS1jbWQtc3RhY2subyAgbWktY21kLWZpbGUubyBtaS1jbWQtZGlzYXMubyBtaS1zeW1ib2wt
 Y21kcy5vICBtaS1pbnRlcnAubyAgbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0b3B0Lm8gbWkt
 Y29tbW9uLm8gcG9zaXgtaGRlcC5vIHR1aS1jb21tYW5kLm8gIHR1aS1kYXRhLm8gIHR1aS1kaXNh
 c20ubyAgdHVpLWZpbGUubyB0dWkubyAgdHVpLWhvb2tzLm8gIHR1aS1pbnRlcnAubyAgdHVpLWlv
 Lm8gIHR1aS1sYXlvdXQubyAgdHVpLW91dC5vICB0dWktcmVncy5vICB0dWktc291cmNlLm8gIHR1
 aS1zdGFjay5vICB0dWktd2luLm8gIHR1aS13aW5kYXRhLm8gIHR1aS13aW5nZW5lcmFsLm8gIHR1
 aS13aW5zb3VyY2UubyBjLWV4cC5vICBjcC1uYW1lLXBhcnNlci5vICBvYmpjLWV4cC5vICBhZGEt
 ZXhwLm8gIGp2LWV4cC5vICBmLWV4cC5vIG0yLWV4cC5vIHAtZXhwLm8gIHZlcnNpb24ubyAgYW5u
 b3RhdGUubyAgYXV4di5vICBiZmQtdGFyZ2V0Lm8gIGJsb2NrZnJhbWUubyBicmVha3BvaW50Lm8g
 ZmluZHZhci5vIHJlZ2NhY2hlLm8gIGNoYXJzZXQubyBkaXNhc20ubyBkdW1teS1mcmFtZS5vICBz
 b3VyY2UubyB2YWx1ZS5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJp
 bnRjbWQubyAgYmxvY2subyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGxpbmVzcGVjLm8g
 ZGljdGlvbmFyeS5vICBpbmZjYWxsLm8gIGluZmNtZC5vIGluZnJ1bi5vICBleHBwcmludC5vIGVu
 dmlyb24ubyBzdGFjay5vIHRocmVhZC5vICBleGNlcHRpb25zLm8gIGluZi1jaGlsZC5vICBpbnRl
 cnBzLm8gIG1haW4ubyAgbWFjcm90YWIubyBtYWNyb2NtZC5vIG1hY3JvZXhwLm8gbWFjcm9zY29w
 ZS5vICBldmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIubyAgZ2Ri
 YXJjaC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJpLm8gY29weWluZy5vICBtZW1hdHRy
 Lm8gbWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gIHN0
 ZC1yZWdzLm8gIHNpZ25hbHMubyAga29kLm8ga29kLWNpc2NvLm8gIGdkYi1ldmVudHMubyAgZXhl
 Yy5vIGJjYWNoZS5vIG9iamZpbGVzLm8gb2JzZXJ2ZXIubyBtaW5zeW1zLm8gbWFpbnQubyBkZW1h
 bmdsZS5vICBkYnhyZWFkLm8gY29mZnJlYWQubyBjb2ZmLXBlLXJlYWQubyBlbGZyZWFkLm8gIGR3
 YXJmcmVhZC5vIGR3YXJmMnJlYWQubyBtaXBzcmVhZC5vIHN0YWJzcmVhZC5vIGNvcmVmaWxlLm8g
 IGR3YXJmMmV4cHIubyBkd2FyZjJsb2MubyBkd2FyZjItZnJhbWUubyAgYWRhLWxhbmcubyBjLWxh
 bmcubyBmLWxhbmcubyBvYmpjLWxhbmcubyAgdWktb3V0Lm8gY2xpLW91dC5vICB2YXJvYmoubyB3
 cmFwcGVyLm8gIGp2LWxhbmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vICBtMi1sYW5n
 Lm8gcC1sYW5nLm8gcC10eXBlcHJpbnQubyBwLXZhbHByaW50Lm8gIHNjbS1leHAubyBzY20tbGFu
 Zy5vIHNjbS12YWxwcmludC5vICBzZW50aW5lbC1mcmFtZS5vICBjb21wbGFpbnRzLm8gdHlwZXBy
 aW50Lm8gIGFkYS10eXBlcHJpbnQubyBjLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlw
 ZXByaW50Lm8gIGFkYS12YWxwcmludC5vIGMtdmFscHJpbnQubyBjcC12YWxwcmludC5vIGYtdmFs
 cHJpbnQubyBtMi12YWxwcmludC5vICBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIHRv
 cC5vIHV0aWxzLm8gIHVpLWZpbGUubyAgdXNlci1yZWdzLm8gIGZyYW1lLm8gZnJhbWUtdW53aW5k
 Lm8gZG91Ymxlc3QubyAgZnJhbWUtYmFzZS5vICBnbnUtdjItYWJpLm8gZ251LXYzLWFiaS5vIGhw
 YWNjLWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyAgY3AtbmFtZXNwYWNlLm8gIHJlZ2dyb3Vw
 cy5vIHJlZ3NldC5vICB0cmFkLWZyYW1lLm8gIHRyYW1wLWZyYW1lLm8gIHNvbGliLm8gc29saWIt
 bnVsbC5vICBwcm9sb2d1ZS12YWx1ZS5vIGluZmxvdy5vICAgIGluaXQubworR19MSUJHREJfT0JT
 PWkzODYtdGRlcC5vIGkzODctdGRlcC5vIGkzODZic2QtdGRlcC5vIGkzODZuYnNkLXRkZXAubyBu
 YnNkLXRkZXAubyAgY29yZWxvdy5vIHNvbGliLm8gc29saWItc3ZyNC5vIHNlci1iYXNlLm8gc2Vy
 LXVuaXgubyBzZXItcGlwZS5vIHNlci10Y3AubyBmb3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vICBu
 YnNkLW5hdC5vIG5ic2QtdGhyZWFkLm8gaTM4NmJzZC1uYXQubyBpMzg2bmJzZC1uYXQubyBic2Qt
 a3ZtLm8gIHJlbW90ZS5vIGRjYWNoZS5vIHJlbW90ZS11dGlscy5vIHRyYWNlcG9pbnQubyBheC1n
 ZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vICBjbGktZHVtcC5vICBjbGktZGVjb2Rl
 Lm8gY2xpLXNjcmlwdC5vIGNsaS1jbWRzLm8gY2xpLXNldHNob3cubyBjbGktdXRpbHMubyAgY2xp
 LWxvZ2dpbmcubyAgY2xpLWludGVycC5vIG1pLW91dC5vIG1pLWNvbnNvbGUubyAgbWktY21kcy5v
 IG1pLWNtZC1lbnYubyBtaS1jbWQtdmFyLm8gbWktY21kLWJyZWFrLm8gbWktY21kLXN0YWNrLm8g
 IG1pLWNtZC1maWxlLm8gbWktY21kLWRpc2FzLm8gbWktc3ltYm9sLWNtZHMubyAgbWktaW50ZXJw
 Lm8gIG1pLW1haW4ubyBtaS1wYXJzZS5vIG1pLWdldG9wdC5vIG1pLWNvbW1vbi5vIHBvc2l4LWhk
 ZXAubyB0dWktY29tbWFuZC5vICB0dWktZGF0YS5vICB0dWktZGlzYXNtLm8gIHR1aS1maWxlLm8g
 dHVpLm8gIHR1aS1ob29rcy5vICB0dWktaW50ZXJwLm8gIHR1aS1pby5vICB0dWktbGF5b3V0Lm8g
 IHR1aS1vdXQubyAgdHVpLXJlZ3MubyAgdHVpLXNvdXJjZS5vICB0dWktc3RhY2subyAgdHVpLXdp
 bi5vICB0dWktd2luZGF0YS5vICB0dWktd2luZ2VuZXJhbC5vICB0dWktd2luc291cmNlLm8gYy1l
 eHAubyAgY3AtbmFtZS1wYXJzZXIubyAgb2JqYy1leHAubyAgYWRhLWV4cC5vICBqdi1leHAubyAg
 Zi1leHAubyBtMi1leHAubyBwLWV4cC5vICB2ZXJzaW9uLm8gIGFubm90YXRlLm8gIGF1eHYubyAg
 YmZkLXRhcmdldC5vICBibG9ja2ZyYW1lLm8gYnJlYWtwb2ludC5vIGZpbmR2YXIubyByZWdjYWNo
 ZS5vICBjaGFyc2V0Lm8gZGlzYXNtLm8gZHVtbXktZnJhbWUubyAgc291cmNlLm8gdmFsdWUubyBl
 dmFsLm8gdmFsb3BzLm8gdmFsYXJpdGgubyB2YWxwcmludC5vIHByaW50Y21kLm8gIGJsb2NrLm8g
 c3ltdGFiLm8gc3ltZmlsZS5vIHN5bW1pc2MubyBsaW5lc3BlYy5vIGRpY3Rpb25hcnkubyAgaW5m
 Y2FsbC5vICBpbmZjbWQubyBpbmZydW4ubyAgZXhwcHJpbnQubyBlbnZpcm9uLm8gc3RhY2subyB0
 aHJlYWQubyAgZXhjZXB0aW9ucy5vICBpbmYtY2hpbGQubyAgaW50ZXJwcy5vICBtYWluLm8gIG1h
 Y3JvdGFiLm8gbWFjcm9jbWQubyBtYWNyb2V4cC5vIG1hY3Jvc2NvcGUubyAgZXZlbnQtbG9vcC5v
 IGV2ZW50LXRvcC5vIGluZi1sb29wLm8gY29tcGxldGVyLm8gIGdkYmFyY2gubyBhcmNoLXV0aWxz
 Lm8gZ2RidHlwZXMubyBvc2FiaS5vIGNvcHlpbmcubyAgbWVtYXR0ci5vIG1lbS1icmVhay5vIHRh
 cmdldC5vIHBhcnNlLm8gbGFuZ3VhZ2UubyBidWlsZHN5bS5vICBzdGQtcmVncy5vICBzaWduYWxz
 Lm8gIGtvZC5vIGtvZC1jaXNjby5vICBnZGItZXZlbnRzLm8gIGV4ZWMubyBiY2FjaGUubyBvYmpm
 aWxlcy5vIG9ic2VydmVyLm8gbWluc3ltcy5vIG1haW50Lm8gZGVtYW5nbGUubyAgZGJ4cmVhZC5v
 IGNvZmZyZWFkLm8gY29mZi1wZS1yZWFkLm8gZWxmcmVhZC5vICBkd2FyZnJlYWQubyBkd2FyZjJy
 ZWFkLm8gbWlwc3JlYWQubyBzdGFic3JlYWQubyBjb3JlZmlsZS5vICBkd2FyZjJleHByLm8gZHdh
 cmYybG9jLm8gZHdhcmYyLWZyYW1lLm8gIGFkYS1sYW5nLm8gYy1sYW5nLm8gZi1sYW5nLm8gb2Jq
 Yy1sYW5nLm8gIHVpLW91dC5vIGNsaS1vdXQubyAgdmFyb2JqLm8gd3JhcHBlci5vICBqdi1sYW5n
 Lm8ganYtdmFscHJpbnQubyBqdi10eXBlcHJpbnQubyAgbTItbGFuZy5vIHAtbGFuZy5vIHAtdHlw
 ZXByaW50Lm8gcC12YWxwcmludC5vICBzY20tZXhwLm8gc2NtLWxhbmcubyBzY20tdmFscHJpbnQu
 byAgc2VudGluZWwtZnJhbWUubyAgY29tcGxhaW50cy5vIHR5cGVwcmludC5vICBhZGEtdHlwZXBy
 aW50Lm8gYy10eXBlcHJpbnQubyBmLXR5cGVwcmludC5vIG0yLXR5cGVwcmludC5vICBhZGEtdmFs
 cHJpbnQubyBjLXZhbHByaW50Lm8gY3AtdmFscHJpbnQubyBmLXZhbHByaW50Lm8gbTItdmFscHJp
 bnQubyAgbmxtcmVhZC5vIHNlcmlhbC5vIG1kZWJ1Z3JlYWQubyB0b3AubyB1dGlscy5vICB1aS1m
 aWxlLm8gIHVzZXItcmVncy5vICBmcmFtZS5vIGZyYW1lLXVud2luZC5vIGRvdWJsZXN0Lm8gIGZy
 YW1lLWJhc2UubyAgZ251LXYyLWFiaS5vIGdudS12My1hYmkubyBocGFjYy1hYmkubyBjcC1hYmku
 byBjcC1zdXBwb3J0Lm8gIGNwLW5hbWVzcGFjZS5vICByZWdncm91cHMubyByZWdzZXQubyAgdHJh
 ZC1mcmFtZS5vICB0cmFtcC1mcmFtZS5vICBzb2xpYi5vIHNvbGliLW51bGwubyAgcHJvbG9ndWUt
 dmFsdWUubyBpbmZsb3cubyAgICBpbml0Lm8KIEdfU0lNX09CUz0K

 ------_=_NextPart_001_01CADFF2.CC0C5CAC--

From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, 
	Thomas Klausner <wiz@NetBSD.org>
Cc: 
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Mon, 19 Apr 2010 15:24:09 -0400

 On Apr 19,  7:05pm, Paul_Koning@Dell.com ("Paul Koning") wrote:
 -- Subject: RE: bin/30756: gdb not usable for live debugging of threaded prog

 |  The fix for kern/43128 adds the missing kernel bits for GDB to support
 |  threaded program debugging.  The other part needed is changes to GDB
 |  itself.
 |  
 |  Attached is a patch that does this, tested on i386 against the GDB 6.5
 |  sources that are in NetBSD 5.0.  I intend to submit this to the GDB
 |  project as well but was asked to provide a patch against the GDB rev
 |  that is currently in NetBSD.
 |  
 |  There is a patched mipsnbsd-nat.c as well as common and i386 specific
 |  files, but I did not make the build file changes for that so that file
 |  is untested.  I also did not look at any other platforms.  The changes
 |  should be straightforward using the mips and i386 examples as the
 |  starting point, but since I have no way to test them I did not want to
 |  attempt changes for any other targets.
 |  
 |  Comments appreciated.

 Looks good to me.

 christos

From: "Paul Koning" <Paul_Koning@Dell.com>
To: <gnats-bugs@NetBSD.org>
Cc: <tech-kern@NetBSD.org>,
	"Antti Kantee" <pooka@cs.hut.fi>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Thu, 22 Apr 2010 11:18:14 -0400

 This is a multi-part message in MIME format.

 ------_=_NextPart_001_01CAE22F.094CA314
 Content-Type: text/plain;
 	charset="us-ascii"
 Content-Transfer-Encoding: quoted-printable

 Antti pointed out a problem in the patch I originally submitted which
 causes gdb to go into a loop if the child process exits.  The attached
 updated patch corrects that problem.

 	paul


 ------_=_NextPart_001_01CAE22F.094CA314
 Content-Type: application/octet-stream;
 	name="gdbthreads-650a.diff"
 Content-Transfer-Encoding: base64
 Content-Description: gdbthreads-650a.diff
 Content-Disposition: attachment;
 	filename="gdbthreads-650a.diff"

 LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL2kzODYvbmJzZGVsZi5taC5vcmlnCTIwMDYt
 MTEtMjUgMTE6Mzg6NTEuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2Nv
 bmZpZy9pMzg2L25ic2RlbGYubWgJMjAxMC0wNC0xOSAxMjowNzoyMC4wMDAwMDAwMDAgLTA0MDAK
 QEAgLTEsNiArMSw2IEBACiAjIEhvc3Q6IE5ldEJTRC9pMzg2IEVMRgogTkFUREVQRklMRVM9IGZv
 cmstY2hpbGQubyBpbmYtcHRyYWNlLm8gXAotCW5ic2QtbmF0Lm8gaTM4NmJzZC1uYXQubyBpMzg2
 bmJzZC1uYXQubyBic2Qta3ZtLm8KKwluYnNkLW5hdC5vIGkzODZic2QtbmF0Lm8gaTM4Nm5ic2Qt
 bmF0Lm8gYnNkLWt2bS5vIG5ic2QtdGhyZWFkLm8KIE5BVF9GSUxFPSBzb2xpYi5oCiAKIExPQURM
 SUJFUz0gLWxrdm0KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL21pcHMvbmJzZC5taC5v
 cmlnCTIwMDYtMTItMDYgMTM6MjU6MjkuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dk
 YjYvZ2RiL2NvbmZpZy9taXBzL25ic2QubWgJMjAxMC0wNC0xOSAxMzo1NTozOC4wMDAwMDAwMDAg
 LTA0MDAKQEAgLTEsMiArMSwyIEBACiAjIEhvc3Q6IE5ldEJTRC9taXBzCi1OQVRERVBGSUxFUz0g
 Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5hdC5vCitOQVRE
 RVBGSUxFUz0gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5h
 dC5vIG5ic2QtdGhyZWFkLm8KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbWlwc25ic2QtbmF0LmMu
 b3JpZwkyMDA2LTEyLTA2IDEzOjI1OjI5LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9n
 ZGI2L2dkYi9taXBzbmJzZC1uYXQuYwkyMDEwLTA0LTE5IDEzOjU4OjI1LjAwMDAwMDAwMCAtMDQw
 MApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImluZmVyaW9yLmgiCiAjaW5jbHVkZSAicmVn
 Y2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
 Y2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KQEAgLTMyLDYgKzMz
 LDcgQEAKICNpbmNsdWRlICJtaXBzLXRkZXAuaCIKICNpbmNsdWRlICJtaXBzbmJzZC10ZGVwLmgi
 CiAjaW5jbHVkZSAiaW5mLXB0cmFjZS5oIgorI2luY2x1ZGUgIm5ic2QtdGhyZWFkLmgiCiAKIC8q
 IERldGVybWluZSBpZiBQVF9HRVRSRUdTIGZldGNoZXMgdGhpcyByZWdpc3Rlci4gICovCiBzdGF0
 aWMgaW50CkBAIC00OCw3ICs1MCw3IEBACiAgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CiAKICAgICAg
 IGlmIChwdHJhY2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
 UkFDRV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykg
 JnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUg
 KF8oIkNvdWxkbid0IGdldCByZWdpc3RlcnMiKSk7CiAgICAgICAKICAgICAgIG1pcHNuYnNkX3N1
 cHBseV9yZWcgKChjaGFyICopICZyZWdzLCByZWdubyk7CkBAIC02MSw3ICs2Myw3IEBACiAgICAg
 ICBzdHJ1Y3QgZnByZWcgZnByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
 IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3Ms
 IDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVy
 aW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxv
 YXRpbmcgcG9pbnQgc3RhdHVzIikpOwogCiAgICAgICBtaXBzbmJzZF9zdXBwbHlfZnByZWcgKChj
 aGFyICopICZmcHJlZ3MsIHJlZ25vKTsKQEAgLTc2LDEzICs3OCwxMyBAQAogICAgICAgc3RydWN0
 IHJlZyByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVy
 aW9yX3B0aWQpLAotCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmcmVncywgMCkgPT0gLTEpCisJCSAg
 KFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkK
 IAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikpOwogCiAgICAg
 ICBtaXBzbmJzZF9maWxsX3JlZyAoKGNoYXIgKikgJnJlZ3MsIHJlZ25vKTsKIAogICAgICAgaWYg
 KHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgCi0JCSAgKFBUUkFD
 RV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJl
 Z3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUgKF8o
 IkNvdWxkbid0IHdyaXRlIHJlZ2lzdGVycyIpKTsKIAogICAgICAgaWYgKHJlZ25vICE9IC0xKQpA
 QCAtOTQsMTMgKzk2LDEzIEBACiAgICAgICBzdHJ1Y3QgZnByZWcgZnByZWdzOyAKIAogICAgICAg
 aWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAotCQkgIChQ
 VFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJH
 MykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCiAJcGVycm9yX3dpdGhf
 bmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKIAogICAgICAg
 bWlwc25ic2RfZmlsbF9mcHJlZyAoKGNoYXIgKikgJmZwcmVncywgcmVnbm8pOwogCiAgICAgICBp
 ZiAocHRyYWNlIChQVF9TRVRGUFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
 UkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkcz
 KSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9u
 YW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CiAgICAgfQog
 fQpAQCAtMTE1LDYgKzExNyw3IEBACiAgIHN0cnVjdCB0YXJnZXRfb3BzICp0OwogCiAgIHQgPSBp
 bmZfcHRyYWNlX3RhcmdldCAoKTsKKyAgaW5pdF9uYnNkX3RocmVhZF9vcHMgKHQpOwogICB0LT50
 b19mZXRjaF9yZWdpc3RlcnMgPSBtaXBzbmJzZF9mZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnM7CiAg
 IHQtPnRvX3N0b3JlX3JlZ2lzdGVycyA9IG1pcHNuYnNkX3N0b3JlX2luZmVyaW9yX3JlZ2lzdGVy
 czsKICAgdC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKLS0t
 IC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuYy5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6
 MDUuMDAwMDAwMDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmMJ
 MjAxMC0wNC0yMiAxMDo1Nzo1My4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSw3MTQgQEAKKy8q
 IFRocmVhZHMgc3VwcG9ydCBmb3IgTmV0QlNEIDUuMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDEw
 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBQYXVs
 IEtvbmluZywgRGVsbCwgaW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg
 IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
 bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
 dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w
 dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
 ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
 IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
 QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
 KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
 dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
 aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
 RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
 aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1
 ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj
 aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0
 aHJlYWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
 Y2x1ZGUgIm5ic2QtdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxz
 eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu
 aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRGF0YSBz
 dHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBOZXRCU0QgdGhyZWFkIHN0YXRlLiAgVGhlcmUgaXMgYSAK
 KyAgIHZlY3RvciBvZiB0aGVzZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIExXUCBJRC4gICovCisK
 K3N0cnVjdCBsd3BfaW5mbworeworICAvKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgTFdQLiAgVGhp
 cyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm9jZXNzCisgICAgIElEIGFuZCB0aGUgTFdQIElE
 LiAgKi8KKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBOb24temVybyBpZiB3ZSB0aGlzIExXUCB3
 YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2lnbmFsbGVkCisgICAgIGJ5IHRoZSBQVF9MV1BJ
 TkZPIHB0cmFjZSgpIGNhbGwuICAqLworICBpbnQgc2lnbmFsbGVkOworICAKKyAgLyogVGhlIHdh
 aXRzdGF0dXMgZm9yIHRoaXMgTFdQJ3MgbGFzdCBldmVudC4gICovCisgIHN0cnVjdCB0YXJnZXRf
 d2FpdHN0YXR1cyB3YWl0c3RhdHVzOworfTsKKworLyogVGhlIGx3cF9pbmZvIGJ1ZmZlciBhbmQg
 aXRzIGNvbnRyb2wgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgbHdwX2luZm8gKmx3cF9i
 dWZmZXI7CitzdGF0aWMgaW50IGx3cF9jb3VudDsKK3N0YXRpYyBpbnQgbHdwX2J1ZnNpemU7CisK
 Ky8qIENvdW50IG9mIHNpZ25hbHMgc3RpbGwgcGVuZGluZyBkZWxpdmVyeSB0byBHREIuICBUaGVz
 ZSBhcmUgdGhyZWFkcworICAgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIHN0b3BwZWQgYW5kIG5vdCBi
 cmVha3BvaW50cy4gIEZvciB0aHJlYWRzIHRoYXQKKyAgIGhpdCBhIGJyZWFrcG9pbnQsIHdlIHNp
 bXBseSBwdXNoIGJhY2sgdGhlIHRocmVhZCBzbyBpdCB3aWxsIGhpdCB0aGUKKyAgIGJyZWFrIGFn
 YWluIChpZiBpdCBpc24ndCByZW1vdmVkIGJlZm9yZSB0aGVuKSBidXQgZm9yIG90aGVyIHNpZ25h
 bHMsCisgICBmb3IgZXhhbXBsZSBmYXVsdHMsIHRoZSBzaWduYWwgcmVtYWlucyBwZW5kaW5nLCB0
 aGUgInRvX3Jlc3VtZSIgdGhhdAorICAgcmVzdW1lcyB0aGUgd2hvbGUgcHJvY2VzcyBpcyBza2lw
 cGVkLCBhbmQgdGhlbiB0aGUgInRvX3dhaXQiIHJldHVybnMKKyAgIHRoZSBpbmZvcm1hdGlvbiBh
 Ym91dCBvbmUgb2YgdGhlIHBlbmRpbmcgc2lnbmFscyBpbnN0ZWFkLiAgKi8KK3N0YXRpYyBpbnQg
 cGVuZGluZ19zaWdzOworCisvKiBUaGUgTFdQIElEIG9mIHRoZSB0aHJlYWQgYmVpbmcgc3RlcHBl
 ZCwgb3IgMCBpZiBub25lLiAgKi8KK3N0YXRpYyBpbnQgc3RlcF9sd3BpZDsKKworLyogRmxhZyB0
 byBpbmRpY2F0ZSB3aGV0aGVyIGxhc3QgcmVzdW1lIHdhcyBhIHJlc3VtZSBhbGwgdGhyZWFkcyBv
 cgorICAgYSByZXN1bWUgc2luZ2xlIHRocmVhZC4gICovCitzdGF0aWMgaW50IHJlc3VtZV9hbGw7
 CisKKy8qIE5vbi16ZXJvIGlmIHRoZSBuZXRic2QtdGhyZWFkIGxheWVyIGlzIGFjdGl2ZS4gICov
 CitzdGF0aWMgaW50IG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDA7CisKKy8qIFRoZSBuZXRic2QtdGhy
 ZWFkIHRhcmdldF9vcHMgc3RydWN0dXJlLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBu
 YnNkX3RocmVhZF9vcHM7CisKK2ludCBkZWJ1Z19uYnNkX3RocmVhZDsKK3N0YXRpYyB2b2lkCitz
 aG93X2RlYnVnX25ic2RfdGhyZWFkIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5
 LAorCQkgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUp
 Cit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBOZXRCU0QgdGhy
 ZWFkIG1vZHVsZSBpcyAlcy5cbiIpLAorCQkgICAgdmFsdWUpOworfQorCisKKy8qIEFjdGl2YXRl
 IHRocmVhZCBzdXBwb3J0IGlmIGFwcHJvcHJpYXRlLiAgRG8gbm90aGluZyBpZiB0aHJlYWQKKyAg
 IHN1cHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUuICAqLworCitzdGF0aWMgdm9pZAorZW5hYmxlX25i
 c2RfdGhyZWFkICh2b2lkKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW07CisgIHZv
 aWQqIGNhbGxlcl9jb250ZXh0OworICBpbnQgc3RhdHVzOworCisgIC8qIElmIGFscmVhZHkgYWN0
 aXZlLCBub3RoaW5nIG1vcmUgdG8gZG8uICAqLworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQor
 ICAgIHJldHVybjsKKworICBpZiAobHdwX2J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHhm
 cmVlIChsd3BfYnVmZmVyKTsKKyAgICAgIGx3cF9idWZmZXIgPSBOVUxMOworICAgICAgbHdwX2Nv
 dW50ID0gbHdwX2J1ZnNpemUgPSAwOworICAgIH0KKyAgCisgIC8qIHB1c2hfdGFyZ2V0ICgmbmJz
 ZF90aHJlYWRfb3BzKTsgKi8KKyAgbmJzZF90aHJlYWRfYWN0aXZlID0gMTsKK30KKworLyogRGVh
 Y3RpdmF0ZSB0aHJlYWQgc3VwcG9ydC4gIERvIG5vdGhpbmcgaXMgdGhyZWFkIHN1cHBvcnQgaXMK
 KyAgIGFscmVhZHkgaW5hY3RpdmUuICAqLworCisjaWYgMAorc3RhdGljIHZvaWQKK2Rpc2FibGVf
 bmJzZF90aHJlYWQgKHZvaWQpCit7CisgIGlmICghbmJzZF90aHJlYWRfYWN0aXZlKQorICAgIHJl
 dHVybjsKKworICB1bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKKyAgbmJzZF90aHJl
 YWRfYWN0aXZlID0gMDsKK30KKyNlbmRpZgorCisvKiBVcGRhdGUgb3VyIGx3cF9pbmZvIGJ1ZmZl
 ciwgYW5kIHRlbGwgR0RCIGFib3V0IGFkZHMgb3IgZGVsZXRlcy4KKworICAgQnkgZG9pbmcgdGhl
 IHRocmVhZCBhZGQgYW5kIHRocmVhZCBkZWxldGUgb3BlcmF0aW9ucyBoZXJlIGFzIHdlCisgICBs
 ZWFybiBhYm91dCB0aHJlYWRzLCB3ZSBhbGxvdyB1c2VycyB0byBydW4gdGhyZWFkLXNwZWNpZmlj
 IGNvbW1hbmRzCisgICB3aXRob3V0IG5lZWRpbmcgdG8gcnVuICJpbmZvIHRocmVhZHMiIGZpcnN0
 LiAKKworICAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgd2FpdHN0YXR1cyBzdHJ1
 Y3QsIHdoaWNoCisgICBpcyBjb3BpZWQgaW50byB0aGUgd2FpdHN0YXR1cyBmb3IgdGhlIHRocmVh
 ZCB3ZSBmaW5kIGFzIHRoZSBzaWduYWxsZWQKKyAgIHRocmVhZC4gICovCisKK3N0YXRpYyB2b2lk
 Cit1cGRhdGVfbHdwYnVmIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAg
 aW50IHBpOworICBsd3BpZF90IGx3cF9pZCwgc2lnX2x3cGlkOworICBzdHJ1Y3QgcHRyYWNlX2x3
 cGluZm8gcHRfaW5mbzsKKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBBY2N1bXVsYXRlIGFuIGFy
 cmF5IG9mIE5ldEJTRCB0aHJlYWRzLCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIExXUCBpZC4KKwor
 ICAgICBUaGUgcmVhc29uIGZvciB1c2luZyBkZXNjZW5kaW5nIG9yZGVyIGlzIHRoYXQgdGhpcyBp
 cyB0aGUgb3JkZXIKKyAgICAgaW4gd2hpY2ggTFdQcyBhcmUgcmV0dXJuZWQgYnkgdGhlIHB0cmFj
 ZSgpIFBUX0xXUElORk8gZnVuY3Rpb24sCisgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGVtIGlu
 IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0IGluIHRoZQorICAgICBwX2x3cHMgbGlzdCBm
 b3IgdGhlIHByb2Nlc3MsIGFuZCBuZXcgZW50cmllcyBhcmUgYXNzaWduZWQgYXNjZW5kaW5nCisg
 ICAgIExXUCBJRHMgYW5kIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGF0IGxpc3QuICAqLwor
 CisgIGx3cF9pZCA9IHNpZ19sd3BpZCA9IDA7CisgIHBpID0gMDsKKyAgCisgIHdoaWxlICgxKQor
 ICAgIHsKKyAgICAgIHB0X2luZm8ucGxfbHdwaWQgPSBsd3BfaWQ7CisgICAgICBlcnJubyA9IDA7
 CisgICAgICBpZiAocHRyYWNlIChQVF9MV1BJTkZPLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
 CQkgICZwdF9pbmZvLCBzaXplb2YgKHB0X2luZm8pKSA9PSAtMSkKKwl7CisJICBpZiAoZXJybm8g
 PT0gRVNSQ0gpCisJICAgIGJyZWFrOworCSAgZWxzZSBpZiAoZXJybm8gIT0gMCkKKwkgICAgcGVy
 cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHRocmVhZCBpbmZvcm1hdGlvbiIpKTsKKwl9
 CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdk
 Yl9zdGRsb2csCisJCQkgICAgIk5UVVA6IGx3cGluZm8gb24gJWQgcmV0dXJucyBsd3AgJWQsIHBs
 X2V2ZW50ICVkXG4iLAorCQkJICAgIGx3cF9pZCwgcHRfaW5mby5wbF9sd3BpZCwgcHRfaW5mby5w
 bF9ldmVudCk7CisJICAKKyAgICAgIC8qIFJldHJpZXZlIHRoZSBMV1AgSUQgdGhhdCB3YXMgZm91
 bmQuICBUaGlzIGFsc28gc2V0cyB0aGUgSUQgdG8KKwkgc3RhcnQgZnJvbSB0aGUgbmV4dCB0aW1l
 IGFyb3VuZCB0aGUgbG9vcC4gICovCisgICAgICBsd3BfaWQgPSBwdF9pbmZvLnBsX2x3cGlkOwor
 CisgICAgICAvKiBMV1AgaWQgMCBpcyBlbmQgb2YgbGlzdC4gICovCisgICAgICBpZiAobHdwX2lk
 ID09IDApCisJYnJlYWs7CisgICAgICAKKyAgICAgIC8qIElmIHRoZSBMV1Agd2UgZm91bmQgaGFz
 IGFuIElEIGxlc3MgdGhhbiB0aGUgSUQgb2YgdGhlIGN1cnJlbnQKKwkgYnVmZmVyIGVudHJ5LCB0
 aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBlbnRyeSBpcyBhIGRlbGV0ZWQgdGhyZWFkLgorCSBUZWxs
 IEdEQiBhYm91dCBpdHMgZGVtaXNlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBidWZmZXIuIAor
 CSAgCisJIFdlIGhhdmUgdG8gZG8gdGhpcyBpbiBhIGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiB0
 aHJlYWRzCisJIHRvIGJlIHJlbW92ZWQuICAqLworICAgICAgd2hpbGUgKHBpIDwgbHdwX2NvdW50
 ICYmIGx3cF9pZCA8IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJeworCSAgaWYgKGRl
 YnVnX25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ
 CQkJIk5UVVA6IHRocmVhZCBwdGlkICVkLCVsZCBoYXMgZGlzYXBwZWFyZWRcbiIsCisJCQkJUElE
 R0VUIChsd3BfYnVmZmVyW3BpXS5wdGlkKSwKKwkJCQlUSURHRVQgKGx3cF9idWZmZXJbcGldLnB0
 aWQpKTsKKworCSAgLyogVGVsbCBHREIuICAqLworCSAgZGVsZXRlX3RocmVhZCAobHdwX2J1ZmZl
 cltwaV0ucHRpZCk7CisKKwkgIC8qIFJlbW92ZSB0aGUgZGVsZXRlZCBlbnRyeS4gICovCisJICBp
 ZiAocGkgPCBsd3BfY291bnQpCisJICAgIG1lbW1vdmUgKGx3cF9idWZmZXIgKyBwaSArIDEsIGx3
 cF9idWZmZXIgKyBwaSwgCisJCSAgICAgKGx3cF9jb3VudCAtIHBpKSAqIHNpemVvZiAoc3RydWN0
 IGx3cF9pbmZvKSk7CisJICBsd3BfY291bnQtLTsKKwl9CisKKyAgICAgIC8qIElmIHdlJ3JlIG5v
 dyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgb3IgdGhlIExXUCBmb3VuZAorCSBo
 YXMgYW4gTFdQIElEIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgYnVmZmVy
 LCB0aGlzCisJIGlzIGEgbmV3IHRocmVhZC4gIEFsbG9jYXRlIG1vcmUgYnVmZmVyIHNwYWNlIGlm
 IG5lZWQgYmUsCisJIG1ha2Ugcm9vbSBmb3IgdGhpcyBlbnRyeSwgYW5kIHN0b3JlIGl0LiAgVGhl
 biB0ZWxsIEdEQiBhYm91dAorCSB0aGUgbmV3IHRocmVhZC4gICovCisgICAgICBpZiAocGkgPj0g
 bHdwX2NvdW50IHx8IGx3cF9pZCA+IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJewor
 CSAgLyogQWxsb2NhdGUgbW9yZSBzcGFjZSwgaWYgd2UgbmVlZCBpdC4gICovCisJICBpZiAobHdw
 X2NvdW50ID09IGx3cF9idWZzaXplKQorCSAgICB7CisJICAgICAgaWYgKGx3cF9idWZzaXplKQor
 CQlsd3BfYnVmc2l6ZSAqPSAyOworCSAgICAgIGVsc2UKKwkJbHdwX2J1ZnNpemUgPSAxOworCSAg
 ICAgIGx3cF9idWZmZXIgPSAoc3RydWN0IGx3cF9pbmZvICopIHhyZWFsbG9jIChsd3BfYnVmZmVy
 LCAKKwkJCQkJCQkgbHdwX2J1ZnNpemUgKiBzaXplb2YgKHN0cnVjdCBsd3BfaW5mbykpOworCSAg
 ICB9CisKKwkgIC8qIFB1c2ggY3VycmVudCBhbmQgbGF0ZXIgZW50cmllcywgaWYgYW55LCBvdmVy
 LiAgKi8KKwkgIGlmIChwaSA8IGx3cF9jb3VudCkKKwkgICAgbWVtbW92ZSAobHdwX2J1ZmZlciAr
 IHBpICsgMSwgbHdwX2J1ZmZlciArIHBpLCAKKwkJICAgICAobHdwX2NvdW50IC0gcGkpICogc2l6
 ZW9mIChzdHJ1Y3QgbHdwX2luZm8pKTsKKworCSAgLyogVXBkYXRlIHRoZSBjb3VudCBvZiBMV1Bz
 LiAgKi8KKwkgIGx3cF9jb3VudCsrOworCisJICAvKiBJbml0aWFsaXplIHRoZSBuZXcgZW50cnku
 ICAqLworCSAgbHdwX2J1ZmZlcltwaV0ucHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9y
 X3B0aWQpLCBsd3BfaWQpOworCSAgaWYgKHB0X2luZm8ucGxfZXZlbnQgPT0gUExfRVZFTlRfU0lH
 TkFMKQorCSAgICB7CisJICAgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVkID0gMTsKKwkgICAg
 ICBsd3BfYnVmZmVyW3BpXS53YWl0c3RhdHVzID0gKnN0YXR1czsKKwkgICAgICBzaWdfbHdwaWQg
 PSBsd3BfaWQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVk
 ID0gMDsKKworCSAgLyogQWR2YW5jZSB0aGUgTFdQIGJ1ZmZlciBwb2ludGVyLiAgKi8KKwkgIHBp
 Kys7CisJICAKKwkgIC8qIFRlbGwgR0RCIGFib3V0IHRoZSBuZXcgdGhyZWFkLiAgKi8KKwkgIGlm
 IChsd3BfY291bnQgPT0gMSkKKwkgICAgeworCSAgICAgIC8qIFNlZSBpZiBHREIgc3RpbGwgaGFz
 IFRJRCB6ZXJvLCBpZiBzbyBzZXQgdGhlIFRJRC4gICovCisJICAgICAgaWYgKFRJREdFVCAoaW5m
 ZXJpb3JfcHRpZCkgPT0gMCkKKwkJeworCQkgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7CisJCSAg
 CisJCSAgcHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3BfaWQpOwor
 CQkgIC8qIHRocmVhZF9jaGFuZ2VfcHRpZCAoaW5mZXJpb3JfcHRpZCwgcHRpZCk7ICovCisJCSAg
 dHAgPSBmaW5kX3RocmVhZF9waWQgKGluZmVyaW9yX3B0aWQpOworCQkgIGlmICh0cCAhPSBOVUxM
 KQorCQkgICAgeworCQkgICAgICB0cC0+cHRpZCA9IHB0aWQ7CisJCSAgICAgIGluZmVyaW9yX3B0
 aWQgPSBwdGlkOworCQkgIAorCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJp
 bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogc2V0dGluZyBtYWlu
 IHRocmVhZCBwdGlkIHRvICVkLCVsZFxuIiwKKwkJCQkJICAgIFBJREdFVCAocHRpZCksIFRJREdF
 VCAocHRpZCkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogTmV3IHRo
 cmVhZCAoZmlyc3QgdGhyZWFkKSwgYWRkIGl0IHRvIEdEQi4gICovCisJCSAgICAgIGluZmVyaW9y
 X3B0aWQgPSBwdGlkOworCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJpbnRm
 X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogYWRkaW5nIGZpcnN0IHRo
 cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCQkgICAgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgbHdw
 X2lkKTsKKwkJICAgICAgYWRkX3RocmVhZCAocHRpZCk7CisJCSAgICB9CisJCX0KKwkgICAgfQor
 CSAgZWxzZQorCSAgICB7CisJICAgICAgLyogTmV3IHRocmVhZCBidXQgbm90IHRoZSBmaXJzdCwg
 YWRkIGl0IHRvIEdEQi4gICovCisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJp
 bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFVQOiBhZGRpbmcgbmV3IHRo
 cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCSAgICBQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3Bf
 aWQpOworCSAgICAgIGFkZF90aHJlYWQgKE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQp
 LCBsd3BfaWQpKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3VuZCBhbiBl
 eGlzdGluZyB0aHJlYWQuICBVcGRhdGUgaXRzIHN0YXR1cyBpbiB0aGUgYnVmZmVyLgorCSAgICAg
 Tm90ZSB0aGF0IHdlIGNsZWFyIHRoZSBzaWduYWxsZWQgZmxhZyBpZiB0aGlzIGlzIHRoZSBmaXJz
 dAorCSAgICAgY2FsbCBhbmQgdGhpcyB0aHJlYWQgd2Fzbid0IHRoZSBzaWduYWxsZWQgdGhyZWFk
 LCBidXQgd2UgCisJICAgICBsZWF2ZSBpdCBhbG9uZSBvbiBzdWJzZXF1ZW50IGNhbGxzLiAgVGhh
 dCB3YXkgdGhlIHN1YnNlcXVlbnQKKwkgICAgIGNhbGxzIHdpbGwgYWNjdW11bGF0ZSB0aGUgc2V0
 IG9mIHNpZ25hbGxlZCB0aHJlYWRzLiAgKi8KKwkgIGlmIChwdF9pbmZvLnBsX2V2ZW50ID09IFBM
 X0VWRU5UX1NJR05BTCkKKwkgICAgeworCSAgICAgIGx3cF9idWZmZXJbcGldLnNpZ25hbGxlZCA9
 IDE7CisJICAgICAgbHdwX2J1ZmZlcltwaV0ud2FpdHN0YXR1cyA9ICpzdGF0dXM7CisJICAgICAg
 c2lnX2x3cGlkID0gbHdwX2lkOworCSAgICB9CisJICAKKwkgIC8qIEFkdmFuY2UgdGhlIExXUCBi
 dWZmZXIgcG9pbnRlci4gICovCisJICBwaSsrOworCX0KKyAgICB9CisgIGlmIChkZWJ1Z19uYnNk
 X3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiTlRVUDog
 c2lnbmFsbGVkIHRocmVhZCBsd3BpZCBpcyAlZFxuIiwgc2lnX2x3cGlkKTsKKworfQorCisjaWYg
 MAorLyogVGhlICJ0b19kZXRhY2giIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8K
 Kworc3RhdGljIHZvaWQKK25ic2RfdGhyZWFkX2RldGFjaCAoY2hhciAqYXJncywgaW50IGZyb21f
 dHR5KQoreyAgIAorICBzdHJ1Y3QgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IGZpbmRfdGFyZ2V0X2Jl
 bmVhdGggKCZuYnNkX3RocmVhZF9vcHMpOworCisgIGRpc2FibGVfbmJzZF90aHJlYWQgKCk7Cisg
 IGJlbmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorI2VuZGlmCisKKy8qIFJl
 c3VtZSBleGVjdXRpb24gb2YgdGhyZWFkIFBUSUQsIG9yIGFsbCB0aHJlYWRzIGlmIFBUSUQgaXMg
 LTEuICBJZgorICAgU1RFUCBpcyBub256ZXJvLCBzaW5nbGUtc3RlcCBpdC4gIElmIFNJR05BTCBp
 cyBub256ZXJvLCBnaXZlIGl0CisgICB0aGF0IHNpZ25hbC4gICovCisKK3N0YXRpYyB2b2lkCitu
 YnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSB0YXJnZXRfc2ln
 bmFsIHNpZ25hbCkKK3sKKyAgcGlkX3QgcGlkOworICBpbnQgcmVxdWVzdDsKKyAgCisgIC8qIEEg
 c3BlY2lmaWMgUFRJRCBtZWFucyBgc3RlcCBvbmx5IHRoaXMgcHJvY2VzcyBpZCcuICAqLworICBp
 ZiAocHRpZF9lcXVhbCAobWludXNfb25lX3B0aWQsIHB0aWQpIHx8IFRJREdFVCAocHRpZCkgPD0g
 MCkKKyAgICB7CisgICAgICByZXN1bWVfYWxsID0gMTsKKyAgICAgIHB0aWQgPSBpbmZlcmlvcl9w
 dGlkOworICAgIH0KKyAgZWxzZQorICAgIHJlc3VtZV9hbGwgPSAwOworICAKKyAgcGlkID0gcHRp
 ZF9nZXRfcGlkIChwdGlkKTsKKworI2lmIDAKKyAgaWYgKGNhdGNoX3N5c2NhbGxfZW5hYmxlZCAo
 KSA+IDApCisgICAgcmVxdWVzdCA9IFBUX1NZU0NBTEw7CisgIGVsc2UKKyNlbmRpZgorICAgIHJl
 cXVlc3QgPSBQVF9DT05USU5VRTsKKworI2lmZGVmIFBUX1NURVAKKyAgaWYgKHN0ZXApCisgICAg
 eworICAgICAgLyogSWYgdGhpcyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQVF9TVEVQLCBhIGhp
 Z2hlciBsZXZlbAorICAgICAgICAgZnVuY3Rpb24gd2lsbCBoYXZlIGNhbGxlZCBzaW5nbGVfc3Rl
 cCgpIHRvIHRyYW5zbXV0ZSB0aGUgc3RlcAorICAgICAgICAgcmVxdWVzdCBpbnRvIGEgY29udGlu
 dWUgcmVxdWVzdCAoYnkgc2V0dGluZyBicmVha3BvaW50cyBvbgorICAgICAgICAgYWxsIHBvc3Np
 YmxlIHN1Y2Nlc3NvciBpbnN0cnVjdGlvbnMpLCBzbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAg
 ICB3b3JyeSBhYm91dCB0aGF0IGhlcmUuICAqLworICAgICAgcmVxdWVzdCA9IFBUX1NURVA7Cisg
 ICAgfQorI2VuZGlmCisKKyAgLyogQW4gYWRkcmVzcyBvZiAoUFRSQUNFX1RZUEVfQVJHMykxIHRl
 bGxzIHB0cmFjZSB0byBjb250aW51ZSBmcm9tCisgICAgIHdoZXJlIGl0IHdhcy4gIElmIEdEQiB3
 YW50ZWQgaXQgdG8gc3RhcnQgc29tZSBvdGhlciB3YXksIHdlIGhhdmUKKyAgICAgYWxyZWFkeSB3
 cml0dGVuIGEgbmV3IHByb2dyYW0gY291bnRlciB2YWx1ZSB0byB0aGUgY2hpbGQuICAqLworICBl
 cnJubyA9IDA7CisgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVy
 ZWQgKGdkYl9zdGRsb2csCisJCQkiTlRSOiAlcyBwdGlkICVkLCVsZCwgJXMsIHNpZ25hbCAlZFxu
 IiwKKwkJCShzdGVwID8gInN0ZXBwaW5nIiA6ICJyZXN1bWluZyIpLAorCQkJUElER0VUIChwdGlk
 KSwgVElER0VUIChwdGlkKSwKKwkJCShyZXN1bWVfYWxsID8gImFsbCB0aHJlYWRzIiA6ICJzaW5n
 bGUgdGhyZWFkIiksCisJCQlzaWduYWwpOworCisgIC8qIEFzc3VtZSBub3Qgc3RlcHBpbmcgc29t
 ZSBMV1AgSUQuICAqLworICBzdGVwX2x3cGlkID0gMDsKKyAgaWYgKHN0ZXApCisgICAgeworICAg
 ICAgc3RlcF9sd3BpZCA9IFRJREdFVCAocHRpZCk7CisgICAgICBpZiAoc3RlcF9sd3BpZCA8IDAp
 CisJc3RlcF9sd3BpZCA9IC1zdGVwX2x3cGlkOworICAgIH0JCisgIAorICBpZiAocmVzdW1lX2Fs
 bCkKKyAgICB7CisgICAgICBpZiAocGVuZGluZ19zaWdzID4gMCkKKwl7CisJICAvKiBXZSBoYXZl
 IHBlbmRpbmcgc2lnbmFscyBmcm9tIHRoZSBwcmV2aW91cyB3YWl0IHN0aWxsIAorCSAgICAgbmVl
 ZGluZyB0byBiZSBkZWxpdmVyZWQuICBTbyBkb24ndCByZXN1bWUgdGhlIHByb2Nlc3MsCisJICAg
 ICBpbnN0ZWFkIHRha2Ugbm8gYWN0aW9uIGFuZCB3ZSdsbCBkZWxpdmVyIG9uZSBvZiB0aG9zZQor
 CSAgICAgcGVuZGluZyBzaWduYWxzIGF0IHRoZSBuZXh0IHdhaXQuICAqLworCSAgaWYgKGRlYnVn
 X25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
 Ik5UUjogcHRpZCAlZCwlbGQgaGFzICVkIHBlbmRpbmcgc2lnbmFscywgc2tpcHBpbmcgcmVzdW1l
 XG4iLAorCQkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCksIHBlbmRpbmdfc2lncyk7CisJ
 ICByZXR1cm47CisJfQorICAgICAgaWYgKHN0ZXApCisJcHRyYWNlIChyZXF1ZXN0LCBwaWQsICh2
 b2lkICopIDEsIFRJREdFVCAocHRpZCkpOworICAgICAgZWxzZQorCXB0cmFjZSAocmVxdWVzdCwg
 cGlkLCAodm9pZCAqKSAxLAorCQl0YXJnZXRfc2lnbmFsX3RvX2hvc3QgKHNpZ25hbCkpOworICAg
 IH0KKyAgZWxzZQorICAgIHB0cmFjZSAocmVxdWVzdCwgcGlkLCAodm9pZCAqKSAxLCAtVElER0VU
 IChwdGlkKSk7CisgIAorICBpZiAoZXJybm8gIT0gMCkKKyAgICBwZXJyb3Jfd2l0aF9uYW1lICgo
 InB0cmFjZSIpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNoaWxkIHNwZWNpZmllZCBieSBQVElE
 IHRvIGRvIHNvbWV0aGluZy4gIFJldHVybiB0aGUKKyAgIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxk
 LCBvciBNSU5VU19PTkVfUFRJRCBpbiBjYXNlIG9mIGVycm9yOyBzdG9yZQorICAgdGhlIHN0YXR1
 cyBpbiAqT1VSU1RBVFVTLiAgKi8KKworc3RhdGljIHB0aWRfdAorbmJzZF90aHJlYWRfd2FpdDIg
 KHB0aWRfdCBwdGlkLAorCQkgICBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywg
 aW50IG9wdGlvbnMpCit7CisgIHBpZF90IHBpZDsKKyAgaW50IHN0YXR1cywgc2F2ZV9lcnJubzsK
 KworICBkbworICAgIHsKKyAgICAgIHNldF9zaWdpbnRfdHJhcCAoKTsKKworICAgICAgZG8KKwl7
 CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri
 X3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdGluZyBmb3IgcHRpZCAlZCwlbGQsIG9wdCAlZFxuIiwK
 KwkJCQlQSURHRVQgKHB0aWQpLCBUSURHRVQgKHB0aWQpLCBvcHRpb25zKTsKKworCSAgcGlkID0g
 d2FpdHBpZCAocHRpZF9nZXRfcGlkIChwdGlkKSwgJnN0YXR1cywgb3B0aW9ucyk7CisJICBzYXZl
 X2Vycm5vID0gZXJybm87CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZf
 dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdHBpZCBlcnJubyBpcyAlZCwg
 cGlkICVkLCBzdGF0dXMgJXhcbiIsCisJCQkJc2F2ZV9lcnJubywgcGlkLCBzdGF0dXMpOworCX0K
 KyAgICAgIHdoaWxlIChwaWQgPT0gLTEgJiYgc2F2ZV9lcnJubyA9PSBFSU5UUik7CisKKyAgICAg
 IGNsZWFyX3NpZ2ludF90cmFwICgpOworCisgICAgICAvKiBJZiBub3RoaW5nIGZvdW5kIGluIHRo
 ZSBubyB3YWl0IGNhc2UsIHJlcG9ydCB0aGF0LiAgKi8KKyAgICAgIGlmIChvcHRpb25zID09IFdO
 T0hBTkcgJiYgcGlkID09IDApCisJcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisgICAgICAKKyAg
 ICAgIGlmIChwaWQgPT0gLTEpCisJeworCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJy
 LAorCQkJICAgICAgXygiQ2hpbGQgcHJvY2VzcyB1bmV4cGVjdGVkbHkgbWlzc2luZzogJXMuXG4i
 KSwKKwkJCSAgICAgIHNhZmVfc3RyZXJyb3IgKHNhdmVfZXJybm8pKTsKKworCSAgLyogSWYgZmly
 c3Qgd2FpdCwgY2xhaW0gaXQgZXhpdGVkIHdpdGggdW5rbm93biBzaWduYWw7IAorCSAgICAgZWxz
 ZSBjbGFpbSB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gd2FpdCBmb3IuICAqLworCSAgaWYgKG9w
 dGlvbnMgPT0gV05PSEFORykKKwkgICAgcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisJICBvdXJz
 dGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfU0lHTkFMTEVEOworCSAgb3Vyc3RhdHVzLT52
 YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFMX1VOS05PV047CisJICByZXR1cm4gaW5mZXJpb3JfcHRp
 ZDsKKwl9CisKKyAgICAgIC8qIElnbm9yZSB0ZXJtaW5hdGVkIGRldGFjaGVkIGNoaWxkIHByb2Nl
 c3Nlcy4gICovCisgICAgICBpZiAoIVdJRlNUT1BQRUQgKHN0YXR1cykgJiYgcGlkICE9IHB0aWRf
 Z2V0X3BpZCAoaW5mZXJpb3JfcHRpZCkpCisJcGlkID0gLTE7CisgICAgfQorICB3aGlsZSAocGlk
 ID09IC0xKTsKKworICBzdG9yZV93YWl0c3RhdHVzIChvdXJzdGF0dXMsIHN0YXR1cyk7CisgIHJl
 dHVybiBwaWRfdG9fcHRpZCAocGlkKTsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfY2Fu
 Y2VsX2JyZWFrcG9pbnQgKHN0cnVjdCBsd3BfaW5mbyAqbHApCit7CisgIC8qIEFycmFuZ2UgZm9y
 IGEgYnJlYWtwb2ludCB0byBiZSBoaXQgYWdhaW4gbGF0ZXIuICBXZSBkb24ndCBrZWVwCisgICAg
 IHRoZSBTSUdUUkFQIHN0YXR1cyBhbmQgZG9uJ3QgZm9yd2FyZCB0aGUgU0lHVFJBUCBzaWduYWwg
 dG8gdGhlCisgICAgIExXUC4gIFdlIHdpbGwgaGFuZGxlIHRoZSBjdXJyZW50IGV2ZW50LCBldmVu
 dHVhbGx5IHdlIHdpbGwgcmVzdW1lCisgICAgIHRoaXMgTFdQLCBhbmQgdGhpcyBicmVha3BvaW50
 IHdpbGwgdHJhcCBhZ2Fpbi4KKworICAgICBJZiB3ZSBkbyBub3QgZG8gdGhpcywgdGhlbiB3ZSBy
 dW4gdGhlIHJpc2sgdGhhdCB0aGUgdXNlciB3aWxsCisgICAgIGRlbGV0ZSBvciBkaXNhYmxlIHRo
 ZSBicmVha3BvaW50LCBidXQgdGhlIExXUCB3aWxsIGhhdmUgYWxyZWFkeQorICAgICB0cmlwcGVk
 IG9uIGl0LiAgKi8KKworICBpZiAobHAtPndhaXRzdGF0dXMua2luZCAgPT0gVEFSR0VUX1dBSVRL
 SU5EX1NUT1BQRUQKKyAgICAgICYmIGxwLT53YWl0c3RhdHVzLnZhbHVlLnNpZyA9PSBTSUdUUkFQ
 CisgICAgICAmJiBicmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAocmVhZF9wY19waWQgKGxwLT5w
 dGlkKSAtCisJCQkJICAgICBERUNSX1BDX0FGVEVSX0JSRUFLKSkKKyAgICB7CisgICAgICBpZiAo
 ZGVidWdfbmJzZF90aHJlYWQpCisJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJ
 ICAgICJOVENCOiBQdXNoIGJhY2sgYnJlYWtwb2ludCBmb3IgcHRpZCAlZCwlbGRcbiIsCisJCQkg
 ICAgUElER0VUIChscC0+cHRpZCksIFRJREdFVCAobHAtPnB0aWQpKTsKKworICAgICAgLyogQmFj
 ayB1cCB0aGUgUEMgaWYgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIGlmIChERUNSX1BDX0FGVEVSX0JS
 RUFLKQorCXdyaXRlX3BjX3BpZCAocmVhZF9wY19waWQgKGxwLT5wdGlkKSAtIERFQ1JfUENfQUZU
 RVJfQlJFQUssIGxwLT5wdGlkKTsKKworICAgICAgLyogV2Ugbm8gbG9uZ2VyIGhhdmUgYSBwZW5k
 aW5nIHNpZ25hbCBmb3IgdGhpcyB0aHJlYWQuICAqLworICAgICAgbHAtPnNpZ25hbGxlZCA9IDA7
 CisKKyAgICAgIC8qIE5vdCBhIHBlbmRpbmcgc2lnbmFsIGFueW1vcmUuICAqLworICAgICAgcmV0
 dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogVGhlICJ0b193YWl0IiBtZXRob2Qg
 b2YgdGhlIG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyBwdGlkX3QKK25ic2RfdGhyZWFk
 X3dhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sK
 KyAgcHRpZF90IGFjdGl2ZV9wdGlkOworICBzdHJ1Y3QgbHdwX2luZm8gKnNlbF90aHJlYWQ7Cisg
 IGludCBzaWdfdGhyZWFkcywgaTsKKyAgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzIHRzdGF0dXM7
 CisKKyAgLyogSWYgdGhlcmUgd2VyZSBwZW5kaW5nIHNpZ25hbHMgYW5kIGEgcmVzdW1lIGFsbCB0
 aHJlYWRzIHdhcyBkb25lLAorICAgICB0aGUgcHJvY2VzcyB3YXNuJ3QgYWN0dWFsbHkgcmVzdW1l
 ZCBzbyBkb24ndCB3YWl0IG9uIGl0LiAgSnVzdAorICAgICBnbyBvbiB0byBwaWNrIGEgdGhyZWFk
 IHRvIHJlcG9ydCBvbi4gICovCisgIGlmICghKHBlbmRpbmdfc2lncyA+IDAgJiYgcmVzdW1lX2Fs
 bCkpCisgICAgeworICAgICAgcHRpZCA9IG5ic2RfdGhyZWFkX3dhaXQyIChwdGlkLCAmdHN0YXR1
 cywgMCk7CisKKyAgICAgIC8qIERlZmF1bHQgc3RhdHVzIHJldHVybmVkIGlzIHRoZSBvbmUgd2Ug
 anVzdCBnb3QuICAqLworICAgICAgKnN0YXR1cyA9IHRzdGF0dXM7CisgICAgICAKKyAgICAgIC8q
 IFRoZSBwdGlkIHJldHVybmVkIGJ5IHRoZSB0YXJnZXQgYmVuZWF0aCB1cyBpcyB0aGUgcHRpZCBv
 ZiB0aGUgcHJvY2Vzcy4KKwkgV2UgbmVlZCB0byBmaW5kIHdoaWNoIHRocmVhZCBpcyBjdXJyZW50
 bHkgYWN0aXZlIGFuZCByZXR1cm4gCisJIGl0cyBwdGlkLiAgKi8KKyAgICAgIHVwZGF0ZV9sd3Bi
 dWYgKCZ0c3RhdHVzKTsKKyAgCisgICAgICAvKiBMb29wIGNoZWNraW5nIGZvciBhZGRpdGlvbmFs
 IHRocmVhZHMgdGhhdCBhcmUgd2FpdGluZywgYW5kIGdhdGhlcgorCSB1cCB0aGVpciBzdGF0dXMu
 ICAqLworICAgICAgd2hpbGUgKDEpCisJeworCSAgcHRpZCA9IG5ic2RfdGhyZWFkX3dhaXQyIChw
 dGlkLCAmdHN0YXR1cywgV05PSEFORyk7CisJICBpZiAoUElER0VUIChwdGlkKSA9PSAtMSkKKwkg
 ICAgYnJlYWs7CisJICB1cGRhdGVfbHdwYnVmICgmdHN0YXR1cyk7CisJfQorICAgIH0KKyAgCisg
 IC8qIEZpbmQgYSBzdWl0YWJsZSBzaWduYWxsZWQgdGhyZWFkLiAgUGljayB0aGUgc3RlcHBlZCBv
 bmUsIGlmIHRoZXJlCisgICAgIGlzIG9uZTsgb3RoZXJ3aXNlIHBpY2sgYSByYW5kb20gb25lLiAg
 Ki8KKyAgc2VsX3RocmVhZCA9IE5VTEw7CisgIHNpZ190aHJlYWRzID0gMDsKKyAgCisgIGZvciAo
 aSA9IDA7IGkgPCBsd3BfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAobHdwX2J1ZmZlcltp
 XS5zaWduYWxsZWQpCisJeworCSAgc2lnX3RocmVhZHMrKzsKKwkgIGlmIChUSURHRVQgKGx3cF9i
 dWZmZXJbaV0ucHRpZCkgPT0gc3RlcF9sd3BpZCkKKwkgICAgeworCSAgICAgIC8qIElmIHRoZXJl
 IGlzIGEgc3RlcHBlZCB0aHJlYWQsIHBpY2sgdGhhdCBvbmUuICAqLworCSAgICAgIHNlbF90aHJl
 YWQgPSAmbHdwX2J1ZmZlcltpXTsKKwkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCWZw
 cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgIk5UVzogUGlja2luZyBwdGlk
 ICVkLCVsZCBiZWNhdXNlIGl0IGlzIHN0ZXBwZWRcbiIsCisJCQkJICAgIFBJREdFVCAoc2VsX3Ro
 cmVhZC0+cHRpZCksCisJCQkJICAgIFRJREdFVCAoc2VsX3RocmVhZC0+cHRpZCkpOworCSAgICAg
 IGJyZWFrOworCSAgICB9CisJICAvKiBSYW5kb21seSBwaWNrIHRoaXMgb25lIG9yIGtlZXAgdGhl
 IHByZXZpb3VzIGNob2ljZSwKKwkgICAgIHN1Y2ggdGhhdCBhbGwgb2YgdGhlIHNpZ25hbGxlZCB0
 aHJlYWRzIGhhdmUgYW4gZXF1YWwKKwkgICAgIHByb2JhYmlsaXR5IG9mIGJlaW5nIHBpY2tlZC4g
 ICovCisJICBpZiAoc2VsX3RocmVhZCA9PSBOVUxMIHx8IAorCSAgICAgICgoKGRvdWJsZSkgcmFu
 ZCAoKSkgLyAoUkFORF9NQVggKyAxLjApKSA8ICgxLjAgLyBzaWdfdGhyZWFkcykpCisJICAgIHsK
 KwkgICAgICBzZWxfdGhyZWFkID0gJmx3cF9idWZmZXJbaV07CisJICAgICAgaWYgKGRlYnVnX25i
 c2RfdGhyZWFkKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJO
 VFc6IFBpY2tpbmcgcHRpZCAlZCwlbGQgb3V0IG9mICVkXG4iLAorCQkJCSAgICBQSURHRVQgKHNl
 bF90aHJlYWQtPnB0aWQpLAorCQkJCSAgICBUSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpLCBzaWdf
 dGhyZWFkcyk7CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgLyogU2NhbiB0aGUgTFdQIHRhYmxl
 IGFnYWluLiAgRm9yIGVhY2ggc2lnbmFsbGVkIExXUCBvdGhlciB0aGFuIHRoZQorICAgICBjaG9z
 ZW4gb25lLCBiYWNrIGl0IHVwIHRvIHRoZSBicmVha3BvaW50IGlmIGl0IHdhcyBzdG9wcGVkIGJ5
 IGEKKyAgICAgYnJlYWtwb2ludCBhbmQgbWFyayBpdCBhcyBub3Qgc2lnbmFsbGVkIChpdCB3aWxs
 IHJlLWJyZWFrIG5leHQKKyAgICAgdGltZSB3ZSBydW4gdGhlIHdob2xlIHByb2Nlc3MpLiAgT3Ro
 ZXIgTFdQcyAodGhvc2Ugd2l0aCBzaWduYWxzCisgICAgIG90aGVyIHRoYW4gYnJlYWtwb2ludCBz
 dG9wKSBhcmUgY291bnRlZCBidXQgbm90IGJhY2tlZCB1cDsgaWYgd2UKKyAgICAgZmluZCBhbnkg
 b2YgdGhvc2UgdGhlbiB0aG9zZSB3aWxsIGJlIGRlbGl2ZXJlZCBuZXh0LiAgKi8KKyAgcGVuZGlu
 Z19zaWdzID0gMDsKKyAgaWYgKHNpZ190aHJlYWRzID4gMSkKKyAgICB7CisgICAgICBmb3IgKGkg
 PSAwOyBpIDwgbHdwX2NvdW50OyBpKyspCisJeworCSAgLyogU2tpcCB0aGUgc2VsZWN0ZWQgTFdQ
 LiAgKi8KKwkgIGlmICgmbHdwX2J1ZmZlcltpXSA9PSBzZWxfdGhyZWFkKQorCSAgICBjb250aW51
 ZTsKKwkgIAorCSAgaWYgKGx3cF9idWZmZXJbaV0uc2lnbmFsbGVkKQorCSAgICB7CisJICAgICAg
 aWYgKFdJRlNUT1BQRUQgKGx3cF9idWZmZXJbaV0ud2FpdHN0YXR1cykpCisJCXsKKwkJICBpZiAo
 IW5ic2RfdGhyZWFkX2NhbmNlbF9icmVha3BvaW50ICgmbHdwX2J1ZmZlcltpXSkpCisJCSAgICBw
 ZW5kaW5nX3NpZ3MrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJcGVuZGluZ19zaWdzKys7CisJICAg
 IH0KKwl9CisgICAgfQorICAKKyAgcHRpZCA9IGluZmVyaW9yX3B0aWQ7CisgIGlmIChzZWxfdGhy
 ZWFkICE9IE5VTEwpCisgICAgeworICAgICAgcHRpZCA9ICBNRVJHRVBJRCAoUElER0VUIChwdGlk
 KSwgVElER0VUIChzZWxfdGhyZWFkLT5wdGlkKSk7CisgICAgICAqc3RhdHVzID0gdHN0YXR1czsK
 KyAgICAgIAorICAgICAgLyogVGhlIHNpZ25hbCBmb3IgdGhpcyB0aHJlYWQgaXMgbm93IGJlaW5n
 IHJlcG9ydGVkLCBzbyBjbGVhcgorCSB0aGUgZmxhZyB0aGF0IHNheXMgaXQgaGFzbid0IGJlZW4g
 cmVwb3J0ZWQgeWV0LiAgKi8KKyAgICAgIHNlbF90aHJlYWQtPnNpZ25hbGxlZCA9IDA7CisgICAg
 fQorICBlbHNlIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQg
 KGdkYl9zdGRsb2csCisJCQkiTlRXOiBubyBzaWduYWxsZWQgdGhyZWFkXG4iKTsKKworICBpZiAo
 ZGVidWdfbmJzZF90aHJlYWQpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor
 CQkJIk5UVzogcmV0dXJuaW5nIHB0aWQgJWQsJWxkXG4iLAorCQkJUElER0VUIChwdGlkKSwgVElE
 R0VUIChwdGlkKSk7CisKKyAgcmV0dXJuIHB0aWQ7Cit9CisKKy8qIFRoZSAidG9fbW91cm5faW5m
 ZXJpb3IiIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KKworc3RhdGljIHZvaWQK
 K25ic2RfdGhyZWFkX21vdXJuX2luZmVyaW9yICh2b2lkKQoreworICBpbnQgc3RhdHVzOworCisg
 IC8qIFdhaXQganVzdCBvbmUgbW9yZSB0aW1lIHRvIGNvbGxlY3QgdGhlIGluZmVyaW9yJ3MgZXhp
 dCBzdGF0dXMuCisgICAgIERvIG5vdCBjaGVjayB3aGV0aGVyIHRoaXMgc3VjY2VlZHMgdGhvdWdo
 LCBzaW5jZSB3ZSBtYXkgYmUKKyAgICAgZGVhbGluZyB3aXRoIGEgcHJvY2VzcyB0aGF0IHdlIGF0
 dGFjaGVkIHRvLiAgU3VjaCBhIHByb2Nlc3Mgd2lsbAorICAgICBvbmx5IHJlcG9ydCBpdHMgZXhp
 dCBzdGF0dXMgdG8gaXRzIG9yaWdpbmFsIHBhcmVudC4gICovCisgIHdhaXRwaWQgKHB0aWRfZ2V0
 X3BpZCAoaW5mZXJpb3JfcHRpZCksICZzdGF0dXMsIFdOT0hBTkcpOworCisgIGdlbmVyaWNfbW91
 cm5faW5mZXJpb3IgKCk7CisKKyAgLyogaWYgKCFoYXZlX2luZmVyaW9ycyAoKSkgKi8KKyAgICB1
 bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKK30KKworCisvKiBUaGUgInRvX3RocmVh
 ZF9hbGl2ZSIgbWV0aG9kIG9mIHRoZSBuYnNkX3RocmVhZF9vcHMuICAqLworc3RhdGljIGludAor
 bmJzZF90aHJlYWRfdGhyZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkKK3sKKyAgLyogVGhlIHRocmVh
 ZCBsaXN0IG1haW50YWluZWQgYnkgR0RCIGlzIHVwIHRvIGRhdGUsIHNpbmNlIHdlIHVwZGF0ZQor
 ICAgICBpdCBldmVyeXRpbWUgd2Ugc3RvcC4gICBTbyBjaGVjayB0aGlzIGxpc3QuICAqLworICBy
 ZXR1cm4gaW5fdGhyZWFkX2xpc3QgKHB0aWQpOworfQorCisvKiBUaGUgInRvX3BpZF90b19zdHIi
 IG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KKworc3RhdGljIGNoYXIgKgorbmJz
 ZF90aHJlYWRfcGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCit7CisgIGlmIChUSURHRVQgKHB0aWQp
 ID09IDApCisgICAgeworICAgICAgcmV0dXJuIG5vcm1hbF9waWRfdG9fc3RyIChwdGlkKTsKKyAg
 ICB9CisgIHJldHVybiB4c3RycHJpbnRmIChfKCJUaHJlYWQgJWxkIiksIFRJREdFVCAocHRpZCkp
 OworfQorCisvKiBVcGRhdGUgdGhlIHRhcmdldF9vcHMgd2l0aCBvdXIgdGhyZWFkIG1hY2hpbmVy
 eS4gICovCisKK3ZvaWQKK2luaXRfbmJzZF90aHJlYWRfb3BzIChzdHJ1Y3QgdGFyZ2V0X29wcyAq
 dCkKK3sKKyAgLyogdC0+dG9fZGV0YWNoICAgICAgICAgICAgID0gbmJzZF90aHJlYWRfZGV0YWNo
 OyAqLworICB0LT50b19yZXN1bWUgICAgICAgICAgICAgPSBuYnNkX3RocmVhZF9yZXN1bWU7Cisg
 IHQtPnRvX3dhaXQgICAgICAgICAgICAgICA9IG5ic2RfdGhyZWFkX3dhaXQ7CisgIHQtPnRvX21v
 dXJuX2luZmVyaW9yICAgICA9IG5ic2RfdGhyZWFkX21vdXJuX2luZmVyaW9yOworICB0LT50b190
 aHJlYWRfYWxpdmUgICAgICAgPSBuYnNkX3RocmVhZF90aHJlYWRfYWxpdmU7CisgIHQtPnRvX3Bp
 ZF90b19zdHIgICAgICAgICA9IG5ic2RfdGhyZWFkX3BpZF90b19zdHI7CisKKyAgZW5hYmxlX25i
 c2RfdGhyZWFkICgpOworfQorCit2b2lkCitfaW5pdGlhbGl6ZV9uYnNkX3RocmVhZCAodm9pZCkK
 K3sKKyNpZiAwCisgIGluaXRfbmJzZF90aHJlYWRfb3BzICgpOworICBhZGRfdGFyZ2V0ICgmbmJz
 ZF90aHJlYWRfb3BzKTsKKyNlbmRpZgorCisgIGFkZF9zZXRzaG93X3ppbnRlZ2VyX2NtZCAoIm5i
 c2QtdGhyZWFkIiwgY2xhc3NfbWFpbnRlbmFuY2UsCisJCQkgICAgJmRlYnVnX25ic2RfdGhyZWFk
 LCBfKCJcCitTZXQgZGVidWdnaW5nIG9mIE5ldEJTRCB0aHJlYWQgbW9kdWxlLiIpLCBfKCJcCitT
 aG93IGRlYnVnZ2luZyBvZiBOZXRCU0QgdGhyZWFkIG1vZHVsZS4iKSwgXygiXAorRW5hYmxlcyBw
 cmludGYgZGVidWdnaW5nIG91dHB1dC4iKSwKKwkJCSAgICBOVUxMLAorCQkJICAgIHNob3dfZGVi
 dWdfbmJzZF90aHJlYWQsCisJCQkgICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3QpOwor
 fQotLS0gLi9nbnUvZGlzdC9nZGI2L2dkYi9uYnNkLXRocmVhZC5oLm9yaWcJMjAxMC0wNC0xOSAx
 MTo0MzowNS4wMDAwMDAwMDAgLTA0MDAKKysrIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJl
 YWQuaAkyMDEwLTA0LTE5IDExOjQzOjA1LjAwMDAwMDAwMCAtMDQwMApAQCAtMCwwICsxLDI1IEBA
 CisvKiBUaHJlYWRzIHN1cHBvcnQgZm9yIE5ldEJTRCA1LjAuCisKKyAgIENvcHlyaWdodCAoQykg
 MjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29udHJpYnV0ZWQgYnkg
 UGF1bCBLb25pbmcsIERlbGwsIGluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor
 CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
 aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
 bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
 dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91
 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
 YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU
 IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN
 RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
 dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
 ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
 aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
 dGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
 dCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKK2V4
 dGVybiB2b2lkIGluaXRfbmJzZF90aHJlYWRfb3BzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqdCk7CisK
 LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4NmJzZC1uYXQuYy5vcmlnCTIwMDctMDItMjQgMDg6
 MDU6MTguMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2kzODZic2QtbmF0
 LmMJMjAxMC0wNC0xOSAxMjo0NTowMS4wMDAwMDAwMDAgLTA0MDAKQEAgLTkwLDcgKzkwLDcgQEAK
 IAogLyogU3VwcGx5IHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIEdSRUdTLCB0byBS
 RUdDQUNIRS4gICovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBpMzg2YnNkX3N1cHBseV9ncmVnc2V0
 IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjb25zdCB2b2lkICpncmVncykKIHsKICAgY29u
 c3QgY2hhciAqcmVncyA9IGdyZWdzOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICBHUkVHUy4gIElm
 IFJFR05VTSBpcyAtMSwgY29sbGVjdCBhbmQgc3RvcmUgYWxsIGFwcHJvcHJpYXRlCiAgICByZWdp
 c3RlcnMuICAqLwogCi1zdGF0aWMgdm9pZAordm9pZAogaTM4NmJzZF9jb2xsZWN0X2dyZWdzZXQg
 KGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCiAJCQkgdm9pZCAqZ3JlZ3MsIGludCBy
 ZWdudW0pCiB7Ci0tLSAuL2dudS9kaXN0L2dkYjYvZ2RiL2kzODZic2QtbmF0Lmgub3JpZwkyMDA2
 LTA3LTAyIDE2OjE0OjE1LjAwMDAwMDAwMCAtMDQwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9p
 Mzg2YnNkLW5hdC5oCTIwMTAtMDQtMTkgMTE6NDM6MDUuMDAwMDAwMDAwIC0wNDAwCkBAIC0yNyw0
 ICsyNywxMSBAQAogCiBleHRlcm4gc3RydWN0IHRhcmdldF9vcHMgKmkzODZic2RfdGFyZ2V0ICh2
 b2lkKTsKIAorZXh0ZXJuIHZvaWQgaTM4NmJzZF9zdXBwbHlfZ3JlZ3NldCAoc3RydWN0IHJlZ2Nh
 Y2hlICpyZWdjYWNoZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
 dCB2b2lkICpncmVncyk7CisKK2V4dGVybiB2b2lkIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChj
 b25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIHZvaWQgKmdyZWdzLCBpbnQgcmVnbnVtKTsKKworCiAjZW5kaWYgLyogaTM4
 NmJzZC1uYXQuaCAqLwotLS0gLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2bmJzZC1uYXQuYy5vcmln
 CTIwMDgtMDEtMjUgMDc6MzU6NDguMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYv
 Z2RiL2kzODZuYnNkLW5hdC5jCTIwMTAtMDQtMTkgMTQ6MzU6MTYuMDAwMDAwMDAwIC0wNDAwCkBA
 IC0yMCwyMiArMjAsMjkgQEAKICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KIAog
 I2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgogI2luY2x1ZGUgImdkYmNv
 cmUuaCIKICNpbmNsdWRlICJyZWdjYWNoZS5oIgogI2luY2x1ZGUgInRhcmdldC5oIgogCiAjaW5j
 bHVkZSAiaTM4Ni10ZGVwLmgiCisjaW5jbHVkZSAiaTM4Ny10ZGVwLmgiCiAjaW5jbHVkZSAiaTM4
 NmJzZC1uYXQuaCIKKyNpbmNsdWRlICJuYnNkLXRocmVhZC5oIgogCiAvKiBTdXBwb3J0IGZvciBk
 ZWJ1Z2dpbmcga2VybmVsIHZpcnR1YWwgbWVtb3J5IGltYWdlcy4gICovCiAKICNpbmNsdWRlIDxz
 eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9y
 ZWcuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1lLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9wY2Iu
 aD4KIAogI2luY2x1ZGUgIm5ic2QtbmF0LmgiCiAjaW5jbHVkZSAiYnNkLWt2bS5oIgogCitleHRl
 cm4gaW50IGRlYnVnX25ic2RfdGhyZWFkOworCiBzdGF0aWMgaW50CiBpMzg2bmJzZF9zdXBwbHlf
 cGNiIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBzdHJ1Y3QgcGNiICpwY2IpCiB7CkBAIC05
 OSw2ICsxMDYsMTU5IEBACiB9CiAMCiAKKworLyogTWFjcm8gdG8gZGV0ZXJtaW5lIGlmIGEgcmVn
 aXN0ZXIgaXMgZmV0Y2hlZCB3aXRoIFBUX0dFVFJFR1MuICAqLworI2RlZmluZSBHRVRSRUdTX1NV
 UFBMSUVTKHJlZ251bSkgXAorICAoKDAgPD0gKHJlZ251bSkgJiYgKHJlZ251bSkgPD0gMTUpKQor
 CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisvKiBTZXQgdG8gMSBpZiB0aGUga2VybmVsIHN1
 cHBvcnRzIFBUX0dFVFhNTVJFR1MuICBJbml0aWFsaXplZCB0byAtMQorICAgc28gdGhhdCB3ZSB0
 cnkgUFRfR0VUWE1NUkVHUyB0aGUgZmlyc3QgdGltZSBhcm91bmQuICAqLworc3RhdGljIGludCBo
 YXZlX3B0cmFjZV94bW1yZWdzID0gLTE7CisjZW5kaWYKKyAMCisgCisvKiBGZXRjaCByZWdpc3Rl
 ciBSRUdOVU0gZnJvbSB0aGUgaW5mZXJpb3IuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMKKyAg
 IGZvciBhbGwgcmVnaXN0ZXJzIChpbmNsdWRpbmcgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVy
 cykuICAqLworCitzdGF0aWMgdm9pZAoraTM4Nm5ic2RfZmV0Y2hfaW5mZXJpb3JfcmVnaXN0ZXJz
 IChpbnQgcmVnbnVtKQoreworICBpZiAocmVnbnVtID09IC0xIHx8IEdFVFJFR1NfU1VQUExJRVMg
 KHJlZ251bSkpCisgICAgeworICAgICAgc3RydWN0IHJlZyByZWdzOworCisgICAgICBpZiAocHRy
 YWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAorCQkgIChQVFJBQ0VfVFlQ
 RV9BUkczKSAmcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJcGVycm9yX3dp
 dGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHJlZ2lzdGVycyIpKTsKKworICAgICAgaWYgKGRlYnVn
 X25ic2RfdGhyZWFkKQorCXsKKwkgIGlmIChyZWdudW0gPT0gLTEpCisJICAgIGZwcmludGZfdW5m
 aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTkZJUjogcHRpZCAlZCwlbGQsIHJlZ251bSAlZFxu
 IiwKKwkJCQlQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
 CQkJCXJlZ251bSk7CisJICBlbHNlCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv
 ZywKKwkJCQkiTkZJUjogcHRpZCAlZCwlbGQsIHJlZ251bSAlZDogJXhcbiIsCisJCQkJUElER0VU
 IChpbmZlcmlvcl9wdGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0sICgo
 aW50ICopICZyZWdzKVtyZWdudW1dKTsKKwl9CisKKyAgICAgIGkzODZic2Rfc3VwcGx5X2dyZWdz
 ZXQgKGN1cnJlbnRfcmVnY2FjaGUsICZyZWdzKTsKKyAgICAgIGlmIChyZWdudW0gIT0gLTEpCisJ
 cmV0dXJuOworICAgIH0KKworICBpZiAocmVnbnVtID09IC0xIHx8IHJlZ251bSA+PSBJMzg2X1NU
 MF9SRUdOVU0pCisgICAgeworICAgICAgc3RydWN0IGZwcmVnIGZwcmVnczsKKyNpZmRlZiBIQVZF
 X1BUX0dFVFhNTVJFR1MKKyAgICAgIGNoYXIgeG1tcmVnc1s1MTJdOworCisgICAgICBpZiAoaGF2
 ZV9wdHJhY2VfeG1tcmVncyAhPSAwCisJICAmJiBwdHJhY2UoUFRfR0VUWE1NUkVHUywgUElER0VU
 IChpbmZlcmlvcl9wdGlkKSwKKwkJICAgIChQVFJBQ0VfVFlQRV9BUkczKSB4bW1yZWdzLCBUSURH
 RVQgKGluZmVyaW9yX3B0aWQpKSA9PSAwKQorCXsKKwkgIGhhdmVfcHRyYWNlX3htbXJlZ3MgPSAx
 OworCSAgaTM4N19zdXBwbHlfZnhzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCAtMSwgeG1tcmVncyk7
 CisJfQorICAgICAgZWxzZQorCXsKKyAgICAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
 IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJCSAgICAgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnBy
 ZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKwkgICAgcGVycm9yX3dpdGhfbmFt
 ZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKworCSAgaTM4N19z
 dXBwbHlfZnNhdmUgKGN1cnJlbnRfcmVnY2FjaGUsIC0xLCAmZnByZWdzKTsKKwl9CisjZWxzZQor
 ICAgICAgaWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
 CQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9
 PSAtMSkKKwlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxvYXRpbmcgcG9pbnQg
 c3RhdHVzIikpOworCisgICAgICBpMzg3X3N1cHBseV9mc2F2ZSAoY3VycmVudF9yZWdjYWNoZSwg
 LTEsICZmcHJlZ3MpOworI2VuZGlmCisgICAgfQorfQorCisvKiBTdG9yZSByZWdpc3RlciBSRUdO
 VU0gYmFjayBpbnRvIHRoZSBpbmZlcmlvci4gIElmIFJFR05VTSBpcyAtMSwgZG8KKyAgIHRoaXMg
 Zm9yIGFsbCByZWdpc3RlcnMgKGluY2x1ZGluZyB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJz
 KS4gICovCisKK3N0YXRpYyB2b2lkCitpMzg2bmJzZF9zdG9yZV9pbmZlcmlvcl9yZWdpc3RlcnMg
 KGludCByZWdudW0pCit7CisgIGlmIChyZWdudW0gPT0gLTEgfHwgR0VUUkVHU19TVVBQTElFUyAo
 cmVnbnVtKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CisKKyAgICAgIGlmIChwdHJh
 Y2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisgICAgICAgICAgICAgICAg
 ICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0x
 KQorICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikp
 OworCisgICAgICBpMzg2YnNkX2NvbGxlY3RfZ3JlZ3NldCAoY3VycmVudF9yZWdjYWNoZSwgJnJl
 Z3MsIHJlZ251bSk7CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwl7CisJICBpZiAo
 cmVnbnVtID09IC0xKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
 Ik5TSVI6IHB0aWQgJWQsJWxkLCByZWdudW0gJWRcbiIsCisJCQkJUElER0VUIChpbmZlcmlvcl9w
 dGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0pOworCSAgZWxzZQorCSAg
 ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIk5TSVI6IHB0aWQgJWQsJWxk
 LCByZWdudW0gJWQ6ICV4XG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRpZCksIFRJREdFVCAo
 aW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtLCAoKGludCAqKSAmcmVncylbcmVnbnVtXSk7CisJ
 fQorICAgICAgCisgICAgICBpZiAocHRyYWNlIChQVF9TRVRSRUdTLCBQSURHRVQgKGluZmVyaW9y
 X3B0aWQpLAorCSAgICAgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3MsIFRJREdFVCAoaW5m
 ZXJpb3JfcHRpZCkpID09IC0xKQorICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4n
 dCB3cml0ZSByZWdpc3RlcnMiKSk7CisKKyAgICAgIGlmIChyZWdudW0gIT0gLTEpCisJcmV0dXJu
 OworICAgIH0KKworICBpZiAocmVnbnVtID09IC0xIHx8IHJlZ251bSA+PSBJMzg2X1NUMF9SRUdO
 VU0pCisgICAgeworICAgICAgc3RydWN0IGZwcmVnIGZwcmVnczsKKyNpZmRlZiBIQVZFX1BUX0dF
 VFhNTVJFR1MKKyAgICAgIGNoYXIgeG1tcmVnc1s1MTJdOworCisgICAgICBpZiAoaGF2ZV9wdHJh
 Y2VfeG1tcmVncyAhPSAwCisJICAmJiBwdHJhY2UoUFRfR0VUWE1NUkVHUywgUElER0VUIChpbmZl
 cmlvcl9wdGlkKSwKKwkJICAgIChQVFJBQ0VfVFlQRV9BUkczKSB4bW1yZWdzLCBUSURHRVQgKGlu
 ZmVyaW9yX3B0aWQpKSA9PSAwKQorCXsKKwkgIGhhdmVfcHRyYWNlX3htbXJlZ3MgPSAxOworCisJ
 ICBpMzg3X2NvbGxlY3RfZnhzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sIHhtbXJlZ3Mp
 OworCisJICBpZiAocHRyYWNlIChQVF9TRVRYTU1SRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQp
 LAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9w
 dGlkKSkgPT0gLTEpCisgICAgICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCB3
 cml0ZSBYTU0gcmVnaXN0ZXJzIikpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBoYXZlX3B0cmFj
 ZV94bW1yZWdzID0gMDsKKyNlbmRpZgorICAgICAgICAgIGlmIChwdHJhY2UgKFBUX0dFVEZQUkVH
 UywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpICZm
 cHJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQorCSAgICBwZXJyb3Jfd2l0aF9u
 YW1lIChfKCJDb3VsZG4ndCBnZXQgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIikpOworCisgICAgICAg
 ICAgaTM4N19jb2xsZWN0X2ZzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sICZmcHJlZ3Mp
 OworCisgICAgICAgICAgaWYgKHB0cmFjZSAoUFRfU0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9y
 X3B0aWQpLAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJmZwcmVncywgVElER0VUIChpbmZl
 cmlvcl9wdGlkKSkgPT0gLTEpCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNvdWxkbid0IHdy
 aXRlIGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKyNpZmRlZiBIQVZFX1BUX0dFVFhNTVJFR1MK
 KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCisMCisKIC8qIFByb3ZpZGUgYSBwcm90b3R5
 cGUgdG8gc2lsZW5jZSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCiB2b2lkIF9pbml0aWFsaXpl
 X2kzODZuYnNkX25hdCAodm9pZCk7CiAKQEAgLTEwOSw3ICsyNjksMTAgQEAKIAogICAvKiBBZGQg
 c29tZSBleHRyYSBmZWF0dXJlcyB0byB0aGUgY29tbW9uICpCU0QvaTM4NiB0YXJnZXQuICAqLwog
 ICB0ID0gaTM4NmJzZF90YXJnZXQgKCk7CisgIGluaXRfbmJzZF90aHJlYWRfb3BzICh0KTsKICAg
 dC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKKyAgdC0+dG9f
 ZmV0Y2hfcmVnaXN0ZXJzID0gaTM4Nm5ic2RfZmV0Y2hfaW5mZXJpb3JfcmVnaXN0ZXJzOworICB0
 LT50b19zdG9yZV9yZWdpc3RlcnMgPSBpMzg2bmJzZF9zdG9yZV9pbmZlcmlvcl9yZWdpc3RlcnM7
 ICAKICAgYWRkX3RhcmdldCAodCk7CiAKICAgLyogU3VwcG9ydCBkZWJ1Z2dpbmcga2VybmVsIHZp
 cnR1YWwgbWVtb3J5IGltYWdlcy4gICovCi0tLSAuL2dudS91c3IuYmluL2dkYjYvYXJjaC9pMzg2
 L2RlZnMubWsub3JpZwkyMDA2LTExLTI1IDExOjM4OjUxLjAwMDAwMDAwMCAtMDUwMAorKysgLi9n
 bnUvdXNyLmJpbi9nZGI2L2FyY2gvaTM4Ni9kZWZzLm1rCTIwMTAtMDQtMTkgMTM6NDU6MTEuMDAw
 MDAwMDAwIC0wNDAwCkBAIC0zLDUgKzMsNSBAQAogIyBHZW5lcmF0ZWQgZnJvbTogTmV0QlNEOiBt
 a25hdGl2ZS5jb21tb24sdiAxLjggMjAwNi8wNS8yNiAxOToxNzoyMSBtcmcgRXhwIAogIwogR19J
 TlRFUk5BTF9DRkxBR1M9ICAgICAtSS4gLUkke0dOVUhPU1RESVNUfS9nZGIgLUkke0dOVUhPU1RE
 SVNUfS9nZGIvY29uZmlnIC1ETE9DQUxFRElSPSJcIi91c3Ivc2hhcmUvbG9jYWxlXCIiIC1ESEFW
 RV9DT05GSUdfSCAtSSR7R05VSE9TVERJU1R9L2dkYi8uLi9pbmNsdWRlL29wY29kZSAtSSR7R05V
 SE9TVERJU1R9L2dkYi8uLi9yZWFkbGluZS8uLiAgLUkuLi9iZmQgLUkke0dOVUhPU1RESVNUfS9n
 ZGIvLi4vYmZkIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2luY2x1ZGUgIC1JLi4vaW50bCAtSSR7
 R05VSE9TVERJU1R9L2dkYi8uLi9pbnRsICAtRE1JX09VVD0xIC1EVFVJPTEgLVdpbXBsaWNpdCAt
 V3JldHVybi10eXBlIC1XY29tbWVudCAtV3RyaWdyYXBocyAtV2Zvcm1hdCAtV3BhcmVudGhlc2Vz
 IC1XcG9pbnRlci1hcml0aCAtV2Zvcm1hdC1ub25saXRlcmFsIC1XdW51c2VkLWxhYmVsIC1XdW51
 c2VkLWZ1bmN0aW9uIC1Xbm8tcG9pbnRlci1zaWduIAotR19MSUJHREJfT0JTPWkzODYtdGRlcC5v
 IGkzODctdGRlcC5vIGkzODZic2QtdGRlcC5vIGkzODZuYnNkLXRkZXAubyBuYnNkLXRkZXAubyAg
 Y29yZWxvdy5vIHNvbGliLm8gc29saWItc3ZyNC5vIHNlci1iYXNlLm8gc2VyLXVuaXgubyBzZXIt
 cGlwZS5vIHNlci10Y3AubyBmb3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vICBuYnNkLW5hdC5vIGkz
 ODZic2QtbmF0Lm8gaTM4Nm5ic2QtbmF0Lm8gYnNkLWt2bS5vICByZW1vdGUubyBkY2FjaGUubyBy
 ZW1vdGUtdXRpbHMubyB0cmFjZXBvaW50Lm8gYXgtZ2VuZXJhbC5vIGF4LWdkYi5vIHJlbW90ZS1m
 aWxlaW8ubyAgY2xpLWR1bXAubyAgY2xpLWRlY29kZS5vIGNsaS1zY3JpcHQubyBjbGktY21kcy5v
 IGNsaS1zZXRzaG93Lm8gY2xpLXV0aWxzLm8gIGNsaS1sb2dnaW5nLm8gIGNsaS1pbnRlcnAubyBt
 aS1vdXQubyBtaS1jb25zb2xlLm8gIG1pLWNtZHMubyBtaS1jbWQtZW52Lm8gbWktY21kLXZhci5v
 IG1pLWNtZC1icmVhay5vIG1pLWNtZC1zdGFjay5vICBtaS1jbWQtZmlsZS5vIG1pLWNtZC1kaXNh
 cy5vIG1pLXN5bWJvbC1jbWRzLm8gIG1pLWludGVycC5vICBtaS1tYWluLm8gbWktcGFyc2UubyBt
 aS1nZXRvcHQubyBtaS1jb21tb24ubyBwb3NpeC1oZGVwLm8gdHVpLWNvbW1hbmQubyAgdHVpLWRh
 dGEubyAgdHVpLWRpc2FzbS5vICB0dWktZmlsZS5vIHR1aS5vICB0dWktaG9va3MubyAgdHVpLWlu
 dGVycC5vICB0dWktaW8ubyAgdHVpLWxheW91dC5vICB0dWktb3V0Lm8gIHR1aS1yZWdzLm8gIHR1
 aS1zb3VyY2UubyAgdHVpLXN0YWNrLm8gIHR1aS13aW4ubyAgdHVpLXdpbmRhdGEubyAgdHVpLXdp
 bmdlbmVyYWwubyAgdHVpLXdpbnNvdXJjZS5vIGMtZXhwLm8gIGNwLW5hbWUtcGFyc2VyLm8gIG9i
 amMtZXhwLm8gIGFkYS1leHAubyAganYtZXhwLm8gIGYtZXhwLm8gbTItZXhwLm8gcC1leHAubyAg
 dmVyc2lvbi5vICBhbm5vdGF0ZS5vICBhdXh2Lm8gIGJmZC10YXJnZXQubyAgYmxvY2tmcmFtZS5v
 IGJyZWFrcG9pbnQubyBmaW5kdmFyLm8gcmVnY2FjaGUubyAgY2hhcnNldC5vIGRpc2FzbS5vIGR1
 bW15LWZyYW1lLm8gIHNvdXJjZS5vIHZhbHVlLm8gZXZhbC5vIHZhbG9wcy5vIHZhbGFyaXRoLm8g
 dmFscHJpbnQubyBwcmludGNtZC5vICBibG9jay5vIHN5bXRhYi5vIHN5bWZpbGUubyBzeW1taXNj
 Lm8gbGluZXNwZWMubyBkaWN0aW9uYXJ5Lm8gIGluZmNhbGwubyAgaW5mY21kLm8gaW5mcnVuLm8g
 IGV4cHByaW50Lm8gZW52aXJvbi5vIHN0YWNrLm8gdGhyZWFkLm8gIGV4Y2VwdGlvbnMubyAgaW5m
 LWNoaWxkLm8gIGludGVycHMubyAgbWFpbi5vICBtYWNyb3RhYi5vIG1hY3JvY21kLm8gbWFjcm9l
 eHAubyBtYWNyb3Njb3BlLm8gIGV2ZW50LWxvb3AubyBldmVudC10b3AubyBpbmYtbG9vcC5vIGNv
 bXBsZXRlci5vICBnZGJhcmNoLm8gYXJjaC11dGlscy5vIGdkYnR5cGVzLm8gb3NhYmkubyBjb3B5
 aW5nLm8gIG1lbWF0dHIubyBtZW0tYnJlYWsubyB0YXJnZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8g
 YnVpbGRzeW0ubyAgc3RkLXJlZ3MubyAgc2lnbmFscy5vICBrb2QubyBrb2QtY2lzY28ubyAgZ2Ri
 LWV2ZW50cy5vICBleGVjLm8gYmNhY2hlLm8gb2JqZmlsZXMubyBvYnNlcnZlci5vIG1pbnN5bXMu
 byBtYWludC5vIGRlbWFuZ2xlLm8gIGRieHJlYWQubyBjb2ZmcmVhZC5vIGNvZmYtcGUtcmVhZC5v
 IGVsZnJlYWQubyAgZHdhcmZyZWFkLm8gZHdhcmYycmVhZC5vIG1pcHNyZWFkLm8gc3RhYnNyZWFk
 Lm8gY29yZWZpbGUubyAgZHdhcmYyZXhwci5vIGR3YXJmMmxvYy5vIGR3YXJmMi1mcmFtZS5vICBh
 ZGEtbGFuZy5vIGMtbGFuZy5vIGYtbGFuZy5vIG9iamMtbGFuZy5vICB1aS1vdXQubyBjbGktb3V0
 Lm8gIHZhcm9iai5vIHdyYXBwZXIubyAganYtbGFuZy5vIGp2LXZhbHByaW50Lm8ganYtdHlwZXBy
 aW50Lm8gIG0yLWxhbmcubyBwLWxhbmcubyBwLXR5cGVwcmludC5vIHAtdmFscHJpbnQubyAgc2Nt
 LWV4cC5vIHNjbS1sYW5nLm8gc2NtLXZhbHByaW50Lm8gIHNlbnRpbmVsLWZyYW1lLm8gIGNvbXBs
 YWludHMubyB0eXBlcHJpbnQubyAgYWRhLXR5cGVwcmludC5vIGMtdHlwZXByaW50Lm8gZi10eXBl
 cHJpbnQubyBtMi10eXBlcHJpbnQubyAgYWRhLXZhbHByaW50Lm8gYy12YWxwcmludC5vIGNwLXZh
 bHByaW50Lm8gZi12YWxwcmludC5vIG0yLXZhbHByaW50Lm8gIG5sbXJlYWQubyBzZXJpYWwubyBt
 ZGVidWdyZWFkLm8gdG9wLm8gdXRpbHMubyAgdWktZmlsZS5vICB1c2VyLXJlZ3MubyAgZnJhbWUu
 byBmcmFtZS11bndpbmQubyBkb3VibGVzdC5vICBmcmFtZS1iYXNlLm8gIGdudS12Mi1hYmkubyBn
 bnUtdjMtYWJpLm8gaHBhY2MtYWJpLm8gY3AtYWJpLm8gY3Atc3VwcG9ydC5vICBjcC1uYW1lc3Bh
 Y2UubyAgcmVnZ3JvdXBzLm8gcmVnc2V0Lm8gIHRyYWQtZnJhbWUubyAgdHJhbXAtZnJhbWUubyAg
 c29saWIubyBzb2xpYi1udWxsLm8gIHByb2xvZ3VlLXZhbHVlLm8gaW5mbG93Lm8gICAgaW5pdC5v
 CitHX0xJQkdEQl9PQlM9aTM4Ni10ZGVwLm8gaTM4Ny10ZGVwLm8gaTM4NmJzZC10ZGVwLm8gaTM4
 Nm5ic2QtdGRlcC5vIG5ic2QtdGRlcC5vICBjb3JlbG93Lm8gc29saWIubyBzb2xpYi1zdnI0Lm8g
 c2VyLWJhc2UubyBzZXItdW5peC5vIHNlci1waXBlLm8gc2VyLXRjcC5vIGZvcmstY2hpbGQubyBp
 bmYtcHRyYWNlLm8gIG5ic2QtbmF0Lm8gbmJzZC10aHJlYWQubyBpMzg2YnNkLW5hdC5vIGkzODZu
 YnNkLW5hdC5vIGJzZC1rdm0ubyAgcmVtb3RlLm8gZGNhY2hlLm8gcmVtb3RlLXV0aWxzLm8gdHJh
 Y2Vwb2ludC5vIGF4LWdlbmVyYWwubyBheC1nZGIubyByZW1vdGUtZmlsZWlvLm8gIGNsaS1kdW1w
 Lm8gIGNsaS1kZWNvZGUubyBjbGktc2NyaXB0Lm8gY2xpLWNtZHMubyBjbGktc2V0c2hvdy5vIGNs
 aS11dGlscy5vICBjbGktbG9nZ2luZy5vICBjbGktaW50ZXJwLm8gbWktb3V0Lm8gbWktY29uc29s
 ZS5vICBtaS1jbWRzLm8gbWktY21kLWVudi5vIG1pLWNtZC12YXIubyBtaS1jbWQtYnJlYWsubyBt
 aS1jbWQtc3RhY2subyAgbWktY21kLWZpbGUubyBtaS1jbWQtZGlzYXMubyBtaS1zeW1ib2wtY21k
 cy5vICBtaS1pbnRlcnAubyAgbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0b3B0Lm8gbWktY29t
 bW9uLm8gcG9zaXgtaGRlcC5vIHR1aS1jb21tYW5kLm8gIHR1aS1kYXRhLm8gIHR1aS1kaXNhc20u
 byAgdHVpLWZpbGUubyB0dWkubyAgdHVpLWhvb2tzLm8gIHR1aS1pbnRlcnAubyAgdHVpLWlvLm8g
 IHR1aS1sYXlvdXQubyAgdHVpLW91dC5vICB0dWktcmVncy5vICB0dWktc291cmNlLm8gIHR1aS1z
 dGFjay5vICB0dWktd2luLm8gIHR1aS13aW5kYXRhLm8gIHR1aS13aW5nZW5lcmFsLm8gIHR1aS13
 aW5zb3VyY2UubyBjLWV4cC5vICBjcC1uYW1lLXBhcnNlci5vICBvYmpjLWV4cC5vICBhZGEtZXhw
 Lm8gIGp2LWV4cC5vICBmLWV4cC5vIG0yLWV4cC5vIHAtZXhwLm8gIHZlcnNpb24ubyAgYW5ub3Rh
 dGUubyAgYXV4di5vICBiZmQtdGFyZ2V0Lm8gIGJsb2NrZnJhbWUubyBicmVha3BvaW50Lm8gZmlu
 ZHZhci5vIHJlZ2NhY2hlLm8gIGNoYXJzZXQubyBkaXNhc20ubyBkdW1teS1mcmFtZS5vICBzb3Vy
 Y2UubyB2YWx1ZS5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJpbnRj
 bWQubyAgYmxvY2subyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGxpbmVzcGVjLm8gZGlj
 dGlvbmFyeS5vICBpbmZjYWxsLm8gIGluZmNtZC5vIGluZnJ1bi5vICBleHBwcmludC5vIGVudmly
 b24ubyBzdGFjay5vIHRocmVhZC5vICBleGNlcHRpb25zLm8gIGluZi1jaGlsZC5vICBpbnRlcnBz
 Lm8gIG1haW4ubyAgbWFjcm90YWIubyBtYWNyb2NtZC5vIG1hY3JvZXhwLm8gbWFjcm9zY29wZS5v
 ICBldmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIubyAgZ2RiYXJj
 aC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJpLm8gY29weWluZy5vICBtZW1hdHRyLm8g
 bWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gIHN0ZC1y
 ZWdzLm8gIHNpZ25hbHMubyAga29kLm8ga29kLWNpc2NvLm8gIGdkYi1ldmVudHMubyAgZXhlYy5v
 IGJjYWNoZS5vIG9iamZpbGVzLm8gb2JzZXJ2ZXIubyBtaW5zeW1zLm8gbWFpbnQubyBkZW1hbmds
 ZS5vICBkYnhyZWFkLm8gY29mZnJlYWQubyBjb2ZmLXBlLXJlYWQubyBlbGZyZWFkLm8gIGR3YXJm
 cmVhZC5vIGR3YXJmMnJlYWQubyBtaXBzcmVhZC5vIHN0YWJzcmVhZC5vIGNvcmVmaWxlLm8gIGR3
 YXJmMmV4cHIubyBkd2FyZjJsb2MubyBkd2FyZjItZnJhbWUubyAgYWRhLWxhbmcubyBjLWxhbmcu
 byBmLWxhbmcubyBvYmpjLWxhbmcubyAgdWktb3V0Lm8gY2xpLW91dC5vICB2YXJvYmoubyB3cmFw
 cGVyLm8gIGp2LWxhbmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vICBtMi1sYW5nLm8g
 cC1sYW5nLm8gcC10eXBlcHJpbnQubyBwLXZhbHByaW50Lm8gIHNjbS1leHAubyBzY20tbGFuZy5v
 IHNjbS12YWxwcmludC5vICBzZW50aW5lbC1mcmFtZS5vICBjb21wbGFpbnRzLm8gdHlwZXByaW50
 Lm8gIGFkYS10eXBlcHJpbnQubyBjLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlwZXBy
 aW50Lm8gIGFkYS12YWxwcmludC5vIGMtdmFscHJpbnQubyBjcC12YWxwcmludC5vIGYtdmFscHJp
 bnQubyBtMi12YWxwcmludC5vICBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIHRvcC5v
 IHV0aWxzLm8gIHVpLWZpbGUubyAgdXNlci1yZWdzLm8gIGZyYW1lLm8gZnJhbWUtdW53aW5kLm8g
 ZG91Ymxlc3QubyAgZnJhbWUtYmFzZS5vICBnbnUtdjItYWJpLm8gZ251LXYzLWFiaS5vIGhwYWNj
 LWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyAgY3AtbmFtZXNwYWNlLm8gIHJlZ2dyb3Vwcy5v
 IHJlZ3NldC5vICB0cmFkLWZyYW1lLm8gIHRyYW1wLWZyYW1lLm8gIHNvbGliLm8gc29saWItbnVs
 bC5vICBwcm9sb2d1ZS12YWx1ZS5vIGluZmxvdy5vICAgIGluaXQubwogR19TSU1fT0JTPQo=

 ------_=_NextPart_001_01CAE22F.094CA314--

Responsible-Changed-From-To: bin-bug-people->skrll
Responsible-Changed-By: skrll@NetBSD.org
Responsible-Changed-When: Thu, 22 Apr 2010 19:56:02 +0000
Responsible-Changed-Why:
I'll look to commit Paul's work


From: Antti Kantee <pooka@cs.hut.fi>
To: Paul Koning <Paul_Koning@Dell.com>
Cc: gnats-bugs@NetBSD.org, tech-kern@NetBSD.org
Subject: Re: bin/30756: gdb not usable for live debugging of threaded programs
Date: Fri, 23 Apr 2010 22:04:35 +0300

 On Thu Apr 22 2010 at 11:18:14 -0400, Paul Koning wrote:
 > Antti pointed out a problem in the patch I originally submitted which
 > causes gdb to go into a loop if the child process exits.  The attached
 > updated patch corrects that problem.

 Yup, your new patch seems to fix that.  Thanks again.

 Just one cosmetic issue now.  After finishing, gdb always says:
 Couldn't get registers: Operation not permitted.

From: Nick Hudson <nick.hudson@gmx.co.uk>
To: gnats-bugs@netbsd.org,
 pkoning@netbsd.org
Cc: gnats-admin@netbsd.org,
 netbsd-bugs@netbsd.org,
 Thomas Klausner <wiz@netbsd.org>
Subject: Re: bin/30756: gdb not usable for live debugging of threaded programs
Date: Fri, 4 Jun 2010 11:49:20 +0100

 --Boundary-00=_woNCMfd6ODsW23f
 Content-Type: text/plain;
   charset="iso-8859-1"
 Content-Transfer-Encoding: 7bit

 On Thursday 22 April 2010 16:20:04 Paul Koning wrote:
 >  Antti pointed out a problem in the patch I originally submitted which
 >  causes gdb to go into a loop if the child process exits.  The attached
 >  updated patch corrects that problem.

 This, unfortunately, still has cosmetic issues. See the attached log and the 
 "Couldn't get registers: Operation not permitted." at the end of the session

 Nick

 --Boundary-00=_woNCMfd6ODsW23f
 Content-Type: text/x-log;
   charset="iso-8859-1";
   name="gdb-attach.log"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment;
 	filename="gdb-attach.log"

 (gdb) set debug nbsd-thread 1
 (gdb) attach 1049
 Attaching to process 1049
 NTW2: waiting for ptid -1,0, opt 0
 NTW2: waitpid errno is 0, pid 1049, status 117f
 NTUP: lwpinfo on 0 returns lwp 1, pl_event 0
 NTUP: adding first thread ptid 1049,1
 NTUP: lwpinfo on 1 returns lwp 0, pl_event 0
 NTUP: signalled thread lwpid is 0
 NTW2: waiting for ptid 1049,0, opt 1
 NTW2: waitpid errno is 0, pid 0, status 0
 NTW: no signalled thread
 NTW: returning ptid 1049,1
 NFIR: ptid 1049,1, regnum 8: 804865a
 Reading symbols from /home/nick/gdb/obj/gdb/testsuite/gdb.base/attach...done.
 NFIR: ptid 1049,1, regnum 8: 804865a
 Reading symbols from /usr/lib/libm.so.0...done.
 Loaded symbols for /usr/lib/libm.so.0
 Reading symbols from /usr/lib/libc.so.12...done.
 Loaded symbols for /usr/lib/libc.so.12
 Reading symbols from /usr/libexec/ld.elf_so...done.
 Loaded symbols for /usr/libexec/ld.elf_so
 [Switching to Thread 1]
 main () at ../../../src/gdb/testsuite/gdb.base/attach.c:17
 17            local_i++;
 (gdb) print should_exit
 $1 = 0
 (gdb) detach
 Detaching from program: /home/nick/gdb/obj/gdb/testsuite/gdb.base/attach, process 1049
 (gdb) attach 1049
 Attaching to program: /home/nick/gdb/obj/gdb/testsuite/gdb.base/attach, process 1049
 NTW2: waiting for ptid -1,0, opt 0
 NTW2: waitpid errno is 0, pid 1049, status 117f
 NTUP: lwpinfo on 0 returns lwp 1, pl_event 0
 NTUP: lwpinfo on 1 returns lwp 0, pl_event 0
 NTUP: signalled thread lwpid is 0
 NTW2: waiting for ptid 1049,0, opt 1
 NTW2: waitpid errno is 0, pid 0, status 117f
 NTW: no signalled thread
 NTW: returning ptid 1049,0
 NFIR: ptid 1049,0, regnum 8: 804865d
 Loaded symbols for /usr/lib/libm.so.0
 Loaded symbols for /usr/lib/libc.so.12
 Loaded symbols for /usr/libexec/ld.elf_so
 main () at ../../../src/gdb/testsuite/gdb.base/attach.c:15
 15        while (! should_exit)
 (gdb) set should_exit=1
 (gdb) tbreak 19
 Breakpoint 1 at 0x8048666: file ../../../src/gdb/testsuite/gdb.base/attach.c, line 19.
 (gdb) c
 Continuing.
 NTR: resuming ptid 1049,0, all threads, signal 0
 NTW2: waiting for ptid -1,0, opt 0
 NTW2: waitpid errno is 0, pid 1049, status 57f
 NTUP: lwpinfo on 0 returns lwp 1, pl_event 1
 NTUP: lwpinfo on 1 returns lwp 0, pl_event 0
 NTUP: signalled thread lwpid is 1
 NTW2: waiting for ptid 1049,0, opt 1
 NTW2: waitpid errno is 0, pid 0, status 57f
 NTW: Picking ptid 1049,1 out of 1
 NTW: returning ptid 1049,1
 NFIR: ptid 1049,1, regnum 8: 8048667
 NSIR: ptid 1049,1, regnum 8: 8048666
 [Switching to Thread 1]
 main () at ../../../src/gdb/testsuite/gdb.base/attach.c:19
 19        return 0;
 (gdb) c
 Continuing.
 NTR: resuming ptid 1049,1, all threads, signal 0
 NTW2: waiting for ptid -1,0, opt 0
 NTW2: waitpid errno is 0, pid 1049, status 0
 NTUP: signalled thread lwpid is 0
 NTW2: waiting for ptid 1049,0, opt 1
 NTW2: waitpid errno is 10, pid -1, status 0
 NTW: no signalled thread
 NTW: returning ptid 1049,1

 Program exited normally.
 Couldn't get registers: Operation not permitted.
 (gdb)

 --Boundary-00=_woNCMfd6ODsW23f--

From: "Paul Koning" <Paul_Koning@Dell.com>
To: "Nick Hudson" <nick.hudson@gmx.co.uk>,
	<gnats-bugs@netbsd.org>,
	<pkoning@netbsd.org>
Cc: <gnats-admin@netbsd.org>,
	<netbsd-bugs@netbsd.org>,
	"Thomas Klausner" <wiz@netbsd.org>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Fri, 4 Jun 2010 06:51:50 -0400

 Sorry for the delay, I'll take a look shortly.

 	paul

 > -----Original Message-----
 > From: Nick Hudson [mailto:nick.hudson@gmx.co.uk]
 > Sent: Friday, June 04, 2010 6:49 AM
 > To: gnats-bugs@netbsd.org; pkoning@netbsd.org
 > Cc: gnats-admin@netbsd.org; netbsd-bugs@netbsd.org; Thomas Klausner
 > Subject: Re: bin/30756: gdb not usable for live debugging of threaded
 > programs
 >=20
 > On Thursday 22 April 2010 16:20:04 Paul Koning wrote:
 > >  Antti pointed out a problem in the patch I originally submitted
 > which
 > >  causes gdb to go into a loop if the child process exits.  The
 > attached
 > >  updated patch corrects that problem.
 >=20
 > This, unfortunately, still has cosmetic issues. See the attached log
 > and the
 > "Couldn't get registers: Operation not permitted." at the end of the
 > session
 >=20
 > Nick

State-Changed-From-To: open->feedback
State-Changed-By: skrll@NetBSD.org
State-Changed-When: Thu, 20 Sep 2012 11:46:19 +0000
State-Changed-Why:
Is this still a problem?


From: Thomas Klausner <wiz@NetBSD.org>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: bin/30756 (gdb not usable for live debugging of threaded
 programs)
Date: Thu, 20 Sep 2012 13:58:26 +0200

 I tried a simple example, firefox ;)
 It was already started with two open tabs.

 # gdb /usr/pkg/lib/xulrunner/xulrunner 27334
 ...
 Reading symbols from /usr/libexec/ld.elf_so...done.
 Loaded symbols for /usr/libexec/ld.elf_so
 /archive/cvs/src/external/gpl3/gdb/dist/gdb/thread.c:81: internal-error: inferior_thread: Assertion `tp' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) y
 /archive/cvs/src/external/gpl3/gdb/dist/gdb/thread.c:81: internal-error: inferior_thread: Assertion `tp' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Create a core file of GDB? (y or n) y
 sorry, pid 27334 was killed: orphaned traced process
 zsh: abort (core dumped)  gdb /usr/pkg/lib/xulrunner/xulrunner 27334

 So, probably a different problem, but Subject is still correct :(
  Thomas

From: Thomas Klausner <wiz@NetBSD.org>
To: NetBSD bugtracking <gnats-bugs@NetBSD.org>
Cc: 
Subject: Re: bin/30756 (gdb not usable for live debugging of threaded
 programs)
Date: Thu, 20 Sep 2012 14:02:55 +0200

 Oh, here's the backtrace:
 # gdb gdb gdb.core
 ...
 [New process 1]
 Core was generated by `gdb'.
 Program terminated with signal 6, Aborted.
 #0  0x00007f7ff590657a in _lwp_kill () from /usr/lib/libc.so.12
 (gdb) bt
 #0  0x00007f7ff590657a in _lwp_kill () from /usr/lib/libc.so.12
 #1  0x00007f7ff59061e2 in abort () at /archive/cvs/src/lib/libc/stdlib/abort.c:74
 #2  0x00000000004995db in dump_core () at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1053
 #3  0x000000000049a3d2 in internal_vproblem (problem=0x9dc980, file=<optimized out>, line=<optimized out>, fmt=<optimized out>, ap=<optimized out>)
     at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1221
 #4  0x000000000049a5de in internal_verror (file=<optimized out>, line=<optimized out>, fmt=<optimized out>, ap=<optimized out>)
     at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1236
 #5  0x000000000049a669 in internal_error (file=0x1 <Address 0x1 out of bounds>, line=6, string=0x0) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1246
 #6  0x0000000000407edf in inferior_thread () at /archive/cvs/src/external/gpl3/gdb/dist/gdb/thread.c:81
 #7  0x00000000004103a1 in normal_stop () at /archive/cvs/src/external/gpl3/gdb/dist/gdb/infrun.c:5647
 #8  0x0000000000418bab in attach_command_post_wait (from_tty=1, async_exec=0, args=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/infcmd.c:2399
 #9  0x0000000000418dce in attach_command (args=0x7f7ffffff885 "27334", from_tty=1) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/infcmd.c:2532
 #10 0x0000000000407966 in catch_command_errors (command=0x418cb7 <attach_command>, arg=0x7f7ffffff885 "27334", from_tty=1, mask=<optimized out>)
     at /archive/cvs/src/external/gpl3/gdb/dist/gdb/exceptions.c:537
 #11 0x0000000000406628 in captured_main (data=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/main.c:875
 #12 0x00000000004078db in catch_errors (func=0x40593d <captured_main>, func_args=0x7f7fffffd590, errstring=0x657fd2 "", mask=<optimized out>)
     at /archive/cvs/src/external/gpl3/gdb/dist/gdb/exceptions.c:521
 #13 0x0000000000406700 in gdb_main (args=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/main.c:945
 #14 0x000000000040576a in main (argc=<optimized out>, argv=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/gdb.c:35

  Thomas

State-Changed-From-To: feedback->open
State-Changed-By: wiz@NetBSD.org
State-Changed-When: Fri, 05 Oct 2012 08:59:33 +0000
State-Changed-Why:
Feedback supplied.


State-Changed-From-To: open->feedback
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Sat, 12 Jul 2014 20:11:29 +0000
State-Changed-Why:
How does this look after the last round of updates?


From: "Christos Zoulas" <christos@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/30756 CVS commit: src/external/gpl3/gdb/dist/gdb
Date: Wed, 16 Jul 2014 07:48:37 -0400

 Module Name:	src
 Committed By:	christos
 Date:		Wed Jul 16 11:48:37 UTC 2014

 Modified Files:
 	src/external/gpl3/gdb/dist/gdb: nbsd-thread.c

 Log Message:
 PR/30756: Thomas Klausner: Deactivate threads after detaching the main thread.


 To generate a diff of this commit:
 cvs rdiff -u -r1.20 -r1.21 src/external/gpl3/gdb/dist/gdb/nbsd-thread.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: feedback->closed
State-Changed-By: wiz@NetBSD.org
State-Changed-When: Tue, 22 Jul 2014 15:51:59 +0000
State-Changed-Why:
I've just tried my firefox test case again and it worked.
Thanks for fixing this!


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.