From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.devel Subject: xnrealloc: How and when to properly use it. Date: Sat, 27 Apr 2019 17:26:53 -0700 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Sat_Apr_27_17:26:52_2019-1" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="5138"; mail-complaints-to="usenet@blaine.gmane.org" To: Emacs Devel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Apr 28 03:06:05 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hKYGX-0015w5-Oa for ged-emacs-devel@m.gmane.org; Sun, 28 Apr 2019 03:06:04 +0200 Original-Received: from localhost ([127.0.0.1]:38001 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hKYGW-0003JZ-Hj for ged-emacs-devel@m.gmane.org; Sat, 27 Apr 2019 21:06:00 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:37022) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hKXez-0006kf-ML for emacs-devel@gnu.org; Sat, 27 Apr 2019 20:27:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hKXex-0000L3-Vy for emacs-devel@gnu.org; Sat, 27 Apr 2019 20:27:13 -0400 Original-Received: from gateway36.websitewelcome.com ([192.185.185.36]:23880) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hKXew-0000Fy-0b for emacs-devel@gnu.org; Sat, 27 Apr 2019 20:27:11 -0400 Original-Received: from cm13.websitewelcome.com (cm13.websitewelcome.com [100.42.49.6]) by gateway36.websitewelcome.com (Postfix) with ESMTP id 8EFC0400CA61F for ; Sat, 27 Apr 2019 18:45:31 -0500 (CDT) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id KXeihUVrlYTGMKXeihZulJ; Sat, 27 Apr 2019 19:26:57 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lawlist.com ; s=default; h=Content-Type:MIME-Version:Subject:To:From:Message-ID:Date: Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=PW67lOrygC/7sd+AxO/qeut6fc02YvIZvli3TgFnCy0=; b=J5FLA3CzVLhFu4y6mAb587HyQT KBwnSgyGiYdLcc6eZG4JGoISnoo+CjbcTsQTUNctHkO9RshoyWSyXs0z/BIzVLltRSIMvYxusUeKl O9HAknJznEuMRH7vJtTAvoXNyQDdHu8eRukAUtVI1V0JlktcVU8CI6TofGBRU7bnpfUehz6LX3vQ0 TbXmlg5+XESYQJ+09eYeu8YyXbU0TyD4Kp9AwoKp1oBRgmGy6yEXdUfM3o6DkDk7GfsK7aaEtUypY 7TuQu4ile9MQ6YDLnHiglpPPUvRfZdqiywmn3+0Scjko2u8Jz6ZMeDcOto2uevQmoMhaTwqAPz7aN RPdvM8aA==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:55054 helo=server.local) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.91) (envelope-from ) id 1hKXef-002asZ-Kl for emacs-devel@gnu.org; Sat, 27 Apr 2019 19:26:56 -0500 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3053.hostgator.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lawlist.com X-BWhitelist: no X-Source-IP: 45.48.239.195 X-Source-L: No X-Exim-ID: 1hKXef-002asZ-Kl X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.local) [45.48.239.195]:55054 X-Source-Auth: lawlist X-Email-Count: 1 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 192.185.185.36 X-Mailman-Approved-At: Sat, 27 Apr 2019 21:04:45 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:235995 Archived-At: --Multipart_Sat_Apr_27_17:26:52_2019-1 Content-Type: text/plain; charset=US-ASCII I am working on feature requests 22873 (multiple fake cursors) and 17684 (crosshairs that track the cursor position). On a W32 build of Emacs (built with MinGW_32 and ezwinports downloaded a few years ago), my usage of xnrealloc (more often than not) causes Emacs to crash when _not_ running under gdb. When running under gdb, however, everything seems to work well. I do not experience any problems on the NS port of Emacs. I have not done sufficient testing to know whether an X11 build of Emacs suffers from this issue. I looked around for a core dump named emacs_backtrace.txt, but did not find it anywhere on the hard drive of the Windows XP SP-3 machine. I tried following the instructions of the message in the quit dialog window that told me to launch gdb -p [Emacs PID], but I did not find anything that looked particularly helpful to my untrained eye. At this point in time, I am assuming the following: (1) I should not be using xnrealloc; or, (2) I am using xnrealloc incorrectly? I envision a few scenarios where the window cache of fake cursors needs to be modified: A. If the window got deleted, then I need to loop through the live windows and free the memory allocation for the dead window cache of fake cursors. B. If the window still exists and the fake cursors feature is turned off, then do one of two things: (1) free the memory for the cache entirely; or, (2) reduce the size of the cache to a size of just one. C. When the fake cursors feature is active, increase the size of the cache as needed. When the cache needs to be reset, only reset the counter and leave the cache as-is (it will contain outdated information / garbage). As far as I can tell, this is working well and needs no changes that I am aware of. Attached is a patch.diff that applies to the master branch as of 04/08/2019 (a038df77de7b1aa2d73a6478493b8838b59e4982). It is the latest version of the fake cursors features (containing several bug fixes), which has not yet been posted to the bug trackers for 22873 / 16784. Below are simplified versions of the functions responsible to populate the cache and reset the cache. static void mc_populate_cache (struct window *w, enum type_of_cache cache_type) { switch (cache_type) { case NO_CACHE: { return; } case MC_CACHE: { if (BUFFERP (w->contents) && !NILP (BVAR (XBUFFER (w->contents), crosshairs))) { int max_elts = 25000; /* Example assumes there is one (1) new elt each window update. */ ++w->mc_elts.used; /* Maybe increase the size of the array. */ if (w->mc_elts.allocated < w->mc_elts.used && w->mc_elts.used < max_elts) { int old_alloc = w->mc_elts.allocated; int new_elts = w->mc_elts.used - w->mc_elts.allocated; w->mc_elts.caches = xpalloc (w->mc_elts.caches, &w->mc_elts.allocated, new_elts, INT_MAX, sizeof *w->mc_elts.caches); memset (w->mc_elts.caches + old_alloc, 0, (w->mc_elts.allocated - old_alloc) * sizeof *w->mc_elts.caches); } int nth = w->mc_elts.used - 1; for (int elt = 0; elt < w->mc_elts.used; ++elt) { if (elt == nth) { w->mc_elts.caches[nth].x = elt; double red = elt; w->mc_elts.caches[elt].foreground.red = red; fprintf (stderr, "w->mc_elts.used (%d) | w->mc_elts.allocated (%d)\n", w->mc_elts.used, w->mc_elts.allocated); } } } break; } case CH_CACHE: { break; } case FC_CACHE: { break; } } } static void mc_reset_cache (struct window *w, enum type_of_cache cache_type) { switch (cache_type) { case NO_CACHE: { return; } case MC_CACHE: { if (BUFFERP (w->contents) && NILP (BVAR (XBUFFER (w->contents), crosshairs)) && w->mc_elts.used > 1) { /* Decrease the size of the array to a bare minimum. */ xnrealloc (w->mc_elts.caches, 1, sizeof *w->mc_elts.caches); w->mc_elts.used = 0; w->mc_elts.allocated = 1; } else if (BUFFERP (w->contents) && !NILP (BVAR (XBUFFER (w->contents), crosshairs))) w->mc_elts.used = 0; break; } case CH_CACHE: { break; } case FC_CACHE: { break; } } } --Multipart_Sat_Apr_27_17:26:52_2019-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="2019_04_27__12_14_48_598.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvY3Jvc3NoYWlycy5lbCBiL2xpc3AvY3Jvc3NoYWlycy5lbApuZXcg ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTIwZGZiCi0tLSAvZGV2L251bGwKKysr IGIvbGlzcC9jcm9zc2hhaXJzLmVsCkBAIC0wLDAgKzEsMTI0OCBAQAorOzs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Cis7OzsgQkVHSU4gbW9kaWZpY2F0aW9uIG9mIHRoZSBNdWx0aXBsZSBDdXJzb3Jz IGxpYnJhcnkgd3JpdHRlbiBieSAgTWFnbmFyIFN2ZWVuLgorCisoZGVmdmFyIHBhY2thZ2UtYXJj aGl2ZXMpCisKKyhkZWZ2YXIgbWMtLW1heC1jdXJzb3JzLW9yaWdpbmFsKQorKGRlZnZhciBtYy9t YXgtY3Vyc29ycykKKyhkZWZ2YXIgbWMtLW1heC1jdXJzb3JzLW9yaWdpbmFsKQorKGRlZnZhciBt Yy9tYXgtY3Vyc29ycykKKyhkZWZ2YXIgbWMvYWx3YXlzLXJ1bi1mb3ItYWxsKQorKGRlZnZhciBt Yy0tdGhpcy1jb21tYW5kKQorKGRlZnZhciBtYy9jbWRzLXRvLXJ1bi1vbmNlKQorKGRlZnZhciBt Yy0tZGVmYXVsdC1jbWRzLXRvLXJ1bi1mb3ItYWxsKQorKGRlZnZhciBtYy9jbWRzLXRvLXJ1bi1m b3ItYWxsKQorKGRlZnZhciBtYy0tZGVmYXVsdC1jbWRzLXRvLXJ1bi1vbmNlKQorKGRlZnZhciBt Yy0tZXhlY3V0aW5nLWNvbW1hbmQtZm9yLWZha2UtY3Vyc29yKQorCisoZGVjbGFyZS1mdW5jdGlv biBtYy9tYWtlLWN1cnNvci1vdmVybGF5LWF0LXBvaW50ICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1j b3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG11bHRpcGxlLWN1cnNvcnMtbW9kZSAiZXh0Om11bHRp cGxlLWN1cnNvcnMtY29yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBtYy9udW0tY3Vyc29ycyAiZXh0 Om11bHRpcGxlLWN1cnNvcnMtY29yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBtYy9yZW1vdmUtZmFr ZS1jdXJzb3JzICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9u IG1jL2NyZWF0ZS1jdXJzb3ItaWQgImV4dDptdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQorKGRlY2xh cmUtZnVuY3Rpb24gbWMvc3RvcmUtY3VycmVudC1zdGF0ZS1pbi1vdmVybGF5ICJleHQ6bXVsdGlw bGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG1jL21ha2UtcmVnaW9uLW92ZXJs YXktYmV0d2Vlbi1wb2ludC1hbmQtbWFyayAiZXh0Om11bHRpcGxlLWN1cnNvcnMtY29yZSIpCiso ZGVjbGFyZS1mdW5jdGlvbiBtYy9leGVjdXRlLWNvbW1hbmQtZm9yLWFsbC1mYWtlLWN1cnNvcnMg ImV4dDptdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbWMvcHJvbXB0 LWZvci1pbmNsdXNpb24taW4td2hpdGVsaXN0ICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1jb3JlIikK KyhkZWNsYXJlLWZ1bmN0aW9uIG1jL2FsbC1mYWtlLWN1cnNvcnMgImV4dDptdWx0aXBsZS1jdXJz b3JzLWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbWMvbWFyay1uZXh0LWxpa2UtdGhpcyAiZXh0 Om1jLW1hcmstbW9yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBtYy9tYXJrLXByZXZpb3VzLWxpa2Ut dGhpcyAgImV4dDptYy1tYXJrLW1vcmUiKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIG1jL2J1 aWx0LWluLWN1cnNvcnMgKCkKKyJMb2FkIHRoZSBtb2RpZmljYXRpb25zIHRoYXQgZW5hYmxlIHRo ZSBtdWx0aXBsZS1jdXJzb3JzIHBhY2thZ2UgKE1hZ25hciBTdmVlbikKK3RvIHRha2UgYWR2YW50 YWdlIG9mIHRoZSBidWlsdC1pbiBmYWtlIGN1cnNvcnMuIgorCisgIChkZWZpbmUta2V5IGdsb2Jh bC1tYXAgW1MtbW91c2UtMV0gJ21jL2FkZC1jdXJzb3Itb24tY2xpY2spCisgIChkZWZpbmUta2V5 IGdsb2JhbC1tYXAgWz9cTS1kXSAnbWMvbWFyay1uZXh0LWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJk KQorICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIFs/XE0tRF0gJ21jL21hcmstcHJldmlvdXMtbGlr ZS10aGlzLWN5Y2xlLWZvcndhcmQpCisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgWz9ccy1kXSAn bWMvbWFyay1uZXh0LWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkKQorICAoZGVmaW5lLWtleSBnbG9i YWwtbWFwIFs/XHMtRF0gJ21jL21hcmstcHJldmlvdXMtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQp CisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgKGtiZCAiPEMtcy0yNjg2MzIwNzE+IikgJ21jL21h cmstYWxsLWxpa2UtdGhpcykKKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCAoa2JkICJDLXMtZyIp ICdtYy9tYXJrLWFsbC1saWtlLXRoaXMpCisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgKGtiZCAi Uy1zLWQiKSAnbWMvbWFyay1wcmV2aW91cy1saWtlLXRoaXMtY3ljbGUtZm9yd2FyZCkKKyAgKGRl ZmluZS1rZXkgZ2xvYmFsLW1hcCAoa2JkICJDLWwiKSAnbWMvZWRpdC1lbmRzLW9mLWxpbmVzKQor ICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIChrYmQgIkMtUy1sIikgJ21jL2VkaXQtYmVnaW5uaW5n cy1vZi1saW5lcykKKworICAoYWRkLWhvb2sgJ211bHRpcGxlLWN1cnNvcnMtbW9kZS1kaXNhYmxl ZC1ob29rCisgICAgICAgICAgICAobGFtYmRhICgpIChraWxsLWxvY2FsLXZhcmlhYmxlICdtYy1j b25mKSkpCisKKyAgKGRlZnZhciBtYy91c2UtYnVpbHQtaW4tY3Vyc29ycyB0CisgICJXaGV0aGVy IHRvIHVzZSB0aGUgYnVpbHQtaW4gZmFrZSBjdXJzb3JzLiIpCisKKyAgKGRlZnVuIG1jL2NyZWF0 ZS1mYWtlLWN1cnNvci1hdC1wb2ludCAoJm9wdGlvbmFsIGlkKQorICAgICJBZGQgYSBmYWtlIGN1 cnNvciBhbmQgcG9zc2libHkgYSBmYWtlIGFjdGl2ZSByZWdpb24gb3ZlcmxheSBiYXNlZCBvbiBw b2ludCBhbmQgbWFyay4KKyAgU2F2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIG92ZXJsYXkg dG8gYmUgcmVzdG9yZWQgbGF0ZXIuIgorICAgICh1bmxlc3MgbWMtLW1heC1jdXJzb3JzLW9yaWdp bmFsCisgICAgICAoc2V0cSBtYy0tbWF4LWN1cnNvcnMtb3JpZ2luYWwgbWMvbWF4LWN1cnNvcnMp KQorICAgICh3aGVuIG1jL21heC1jdXJzb3JzCisgICAgICAodW5sZXNzICg8IChtYy9udW0tY3Vy c29ycykgbWMvbWF4LWN1cnNvcnMpCisgICAgICAgIChpZiAoeWVzLW9yLW5vLXAgKGZvcm1hdCAi JWQgYWN0aXZlIGN1cnNvcnMuIENvbnRpbnVlPyAiIChtYy9udW0tY3Vyc29ycykpKQorICAgICAg ICAgICAgKHNldHEgbWMvbWF4LWN1cnNvcnMgKHJlYWQtbnVtYmVyICJFbnRlciBhIG5ldywgdGVt cG9yYXJ5IG1heGltdW06ICIpKQorICAgICAgICAgIChtYy9yZW1vdmUtZmFrZS1jdXJzb3JzKQor ICAgICAgICAgIChlcnJvciAiQWJvcnRlZDogdG9vIG1hbnkgY3Vyc29ycyIpKSkpCisgICAgKGxl dCAoKG92ZXJsYXkKKyAgICAgICAgICAgIChpZiBtYy91c2UtYnVpbHQtaW4tY3Vyc29ycworICAg ICAgICAgICAgICAobWFrZS1vdmVybGF5IChwb2ludCkgKHBvaW50KSkKKyAgICAgICAgICAgICAg KG1jL21ha2UtY3Vyc29yLW92ZXJsYXktYXQtcG9pbnQpKSkpCisgICAgICAob3ZlcmxheS1wdXQg b3ZlcmxheSAnbWMtaWQgKG9yIGlkIChtYy9jcmVhdGUtY3Vyc29yLWlkKSkpCisgICAgICAob3Zl cmxheS1wdXQgb3ZlcmxheSAndHlwZSAnZmFrZS1jdXJzb3IpCisgICAgICAob3ZlcmxheS1wdXQg b3ZlcmxheSAncHJpb3JpdHkgMTAwKQorICAgICAgKG1jL3N0b3JlLWN1cnJlbnQtc3RhdGUtaW4t b3ZlcmxheSBvdmVybGF5KQorICAgICAgKHdoZW4gKHVzZS1yZWdpb24tcCkKKyAgICAgICAgKG92 ZXJsYXktcHV0IG92ZXJsYXkgJ3JlZ2lvbi1vdmVybGF5CisgICAgICAgICAgICAgICAgICAgICAo bWMvbWFrZS1yZWdpb24tb3ZlcmxheS1iZXR3ZWVuLXBvaW50LWFuZC1tYXJrKSkpCisgICAgICBv dmVybGF5KSkKKworICAoZGVmdW4gbWMvZXhlY3V0ZS10aGlzLWNvbW1hbmQtZm9yLWFsbC1jdXJz b3JzLTEgKCkKKyAgICAiVXNlZCB3aXRoIHBvc3QtY29tbWFuZC1ob29rIHRvIGV4ZWN1dGUgc3Vw cG9ydGVkIGNvbW1hbmRzIGZvciBhbGwgY3Vyc29ycy4KKyAgLSAgSXQgdXNlcyB0d28gbGlzdHMg b2YgY29tbWFuZHMgdG8ga25vdyB3aGF0IHRvIGRvOiB0aGUgcnVuLW9uY2UKKyAgbGlzdCBhbmQg dGhlIHJ1bi1mb3ItYWxsIGxpc3QuIElmIGEgY29tbWFuZCBpcyBpbiBuZWl0aGVyIG9mIHRoZXNl IGxpc3RzLAorICBpdCB3aWxsIHByb21wdCBmb3IgdGhlIHByb3BlciBhY3Rpb24gYW5kIHRoZW4g c2F2ZSB0aGF0IHByZWZlcmVuY2UuCisgIC0gIFNvbWUgY29tbWFuZHMgYXJlIHNvIHVuc3VwcG9y dGVkIHRoYXQgdGhleSBhcmUgZXZlbiBwcmV2ZW50ZWQgZm9yCisgIHRoZSBvcmlnaW5hbCBjdXJz b3IsIHRvIGluZm9ybSBhYm91dCB0aGUgbGFjayBvZiBzdXBwb3J0LiIKKyAgICAodW5sZXNzIG1j LS1leGVjdXRpbmctY29tbWFuZC1mb3ItZmFrZS1jdXJzb3IKKyAgICAgIChpZiAoZXEgMSAobWMv bnVtLWN1cnNvcnMpKSA7OyBubyBmYWtlIGN1cnNvcnM/IGRpc2FibGUgbWMtbW9kZQorICAgICAg ICAgIChtdWx0aXBsZS1jdXJzb3JzLW1vZGUgMCkKKyAgICAgICAgKHdoZW4gdGhpcy1vcmlnaW5h bC1jb21tYW5kCisgICAgICAgICAgKGxldCAoKG9yaWdpbmFsLWNvbW1hbmQgKG9yIG1jLS10aGlz LWNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1hbmQt cmVtYXBwaW5nIHRoaXMtb3JpZ2luYWwtY29tbWFuZCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy1vcmlnaW5hbC1jb21tYW5kKSkpCisgICAgICAgICAgICA7OyBz a2lwIGtleWJvYXJkIG1hY3Jvcywgc2luY2UgdGhleSB3aWxsIGdlbmVyYXRlIGFjdHVhbCBjb21t YW5kcyB0aGF0IGFyZQorICAgICAgICAgICAgOzsgYWxzbyBydW4gaW4gdGhlIGNvbW1hbmQgbG9v cCAtIHdlJ2xsIGhhbmRsZSB0aG9zZSBsYXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgKHdoZW4g KGZ1bmN0aW9ucCBvcmlnaW5hbC1jb21tYW5kKQorICAgICAgICAgICAgICA7OyBpZiBpdCdzIGEg bGFtYmRhLCB3ZSBjYW4ndCBrbm93IGlmIGl0J3Mgc3VwcG9ydGVkIG9yIG5vdAorICAgICAgICAg ICAgICA7OyAtIHNvIGdvIGFoZWFkIGFuZCBhc3N1bWUgaXQncyBvaywgYmVjYXVzZSB3ZSdyZSBq dXN0IG9wdGltaXN0aWMgbGlrZSB0aGF0CisgICAgICAgICAgICAgIChpZiAob3IgKG5vdCAoc3lt Ym9scCBvcmlnaW5hbC1jb21tYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICA7OyBsYW1iZGEg cmVnaXN0ZXJlZCBieSBzbWFydHJlcAorICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcHJl Zml4LXAgIigiIChzeW1ib2wtbmFtZSBvcmlnaW5hbC1jb21tYW5kKSkpCisgICAgICAgICAgICAg ICAgICAobWMvZXhlY3V0ZS1jb21tYW5kLWZvci1hbGwtZmFrZS1jdXJzb3JzIG9yaWdpbmFsLWNv bW1hbmQpCisgICAgICAgICAgICAgICAgOzsgc21hcnRyZXAgYGludGVybidzIGNvbW1hbmRzIGlu dG8gb3duIG9iYXJyYXkgdG8gaGVscAorICAgICAgICAgICAgICAgIDs7IGBkZXNjcmliZS1iaW5k aW5ncycuICBTbywgbGV0J3MgcmUtYGludGVybicgaGVyZSB0bworICAgICAgICAgICAgICAgIDs7 IG1ha2UgdGhlIGNvbW1hbmQgY29tcGFyYWJsZSBieSBgZXEnLgorICAgICAgICAgICAgICAgIChz ZXRxIG9yaWdpbmFsLWNvbW1hbmQgKGludGVybiAoc3ltYm9sLW5hbWUgb3JpZ2luYWwtY29tbWFu ZCkpKQorICAgICAgICAgICAgICAgIDs7IG90aGVyd2lzZSBpdCdzIGEgc3ltYm9sLCBhbmQgd2Ug Y2FuIGJlIG1vcmUgdGhvcm91Z2gKKyAgICAgICAgICAgICAgICAoaWYgKGdldCBvcmlnaW5hbC1j b21tYW5kICdtYy0tdW5zdXBwb3J0ZWQpCisgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlICIl UyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgY3Vyc29ycyVzIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvcmlnaW5hbC1jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChnZXQgb3JpZ2luYWwtY29tbWFuZCAnbWMtLXVuc3VwcG9ydGVkKSkKKyAgICAgICAg ICAgICAgICAgICh3aGVuIChhbmQgb3JpZ2luYWwtY29tbWFuZAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobm90IChtZW1xIG9yaWdpbmFsLWNvbW1hbmQgbWMtLWRlZmF1bHQtY21kcy10 by1ydW4tb25jZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKG1lbXEgb3Jp Z2luYWwtY29tbWFuZCBtYy9jbWRzLXRvLXJ1bi1vbmNlKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKG9yIG1jL2Fsd2F5cy1ydW4tZm9yLWFsbAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG1lbXEgb3JpZ2luYWwtY29tbWFuZCBtYy0tZGVmYXVsdC1jbWRzLXRvLXJ1 bi1mb3ItYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lbXEgb3JpZ2lu YWwtY29tbWFuZCBtYy9jbWRzLXRvLXJ1bi1mb3ItYWxsKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG1jL3Byb21wdC1mb3ItaW5jbHVzaW9uLWluLXdoaXRlbGlzdCBvcmlnaW5h bC1jb21tYW5kKSkpCisgICAgICAgICAgICAgICAgICAgIChtYy9leGVjdXRlLWNvbW1hbmQtZm9y LWFsbC1mYWtlLWN1cnNvcnMgb3JpZ2luYWwtY29tbWFuZCkpKSkKKyAgICAgICAgICAgICAgKHdo ZW4gbWMvdXNlLWJ1aWx0LWluLWN1cnNvcnMKKyAgICAgICAgICAgICAgICAoc2V0cSBtYy1jb25m CisgICAgICAgICAgICAgICAgICAgICAgICAobWFwY2FyCisgICAgICAgICAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKHgpIChsaXN0IChvdmVybGF5LXN0YXJ0IHgpICJiYXIiIG5pbCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgIChtYy9hbGwtZmFrZS1jdXJzb3JzKSkpKSkpKSkpKQorCisg IChkZWZ1biBtYy9tYXJrLW5leHQtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQgKCkKKyAgIk1hcmtz IG5leHQgb2NjdXJlbmNlIG9mIHdvcmQgbGlrZSB0aGlzIGFuZCBhZHZhbmNlcyBjdXJzb3IgdG8g dGhpcyBvY2N1cnJlbmNlIgorICAoaW50ZXJhY3RpdmUpCisgICAgKG1jL21hcmstbmV4dC1saWtl LXRoaXMgMSkpCisKKyAgKGRlZnVuIG1jL21hcmstcHJldmlvdXMtbGlrZS10aGlzLWN5Y2xlLWZv cndhcmQgKCkKKyAgIk1hcmtzIG5leHQgb2NjdXJyZW5jZSBvZiB3b3JkIGxpa2UgdGhpcyBhbmQg YWR2YW5jZXMgY3Vyc29yIHRvIHRoaXMgb2NjdXJyZW5jZSIKKyAgKGludGVyYWN0aXZlKQorICAg IChtYy9tYXJrLXByZXZpb3VzLWxpa2UtdGhpcyAxKSkKKworICAoYWRkLXRvLWxpc3QgJ21jLS1k ZWZhdWx0LWNtZHMtdG8tcnVuLW9uY2UgJ21jL21hcmstbmV4dC1saWtlLXRoaXMtY3ljbGUtZm9y d2FyZCkKKworICAoYWRkLXRvLWxpc3QgJ21jLS1kZWZhdWx0LWNtZHMtdG8tcnVuLW9uY2UgJ21j L21hcmstcHJldmlvdXMtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQpKQorCisoZXZhbC1hZnRlci1s b2FkICJtdWx0aXBsZS1jdXJzb3JzLWNvcmUiCisgICcocHJvZ24KKyAgICAgKG1jL2J1aWx0LWlu LWN1cnNvcnMpKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBtYy1pbnN0YWxsICgpCisiVG8g dXNlIG11bHRpcGxlLWN1cnNvcnMgYWZ0ZXIgcmVzdGFydGluZyBFbWFjcywgbWFrZSBzdXJlIHRo YXQgdGhlIGZvbGxvd2luZyBsaW5lCithcHBlYXJzIHNvbWV3aGVyZSBpbiB0aGUgLmVtYWNzL2lu aXQuZWw6ICAocGFja2FnZS1pbml0aWFsaXplKSIKKyhpbnRlcmFjdGl2ZSkKKyAgKHJlcXVpcmUg J3BhY2thZ2UpCisgIChhZGQtdG8tbGlzdCAncGFja2FnZS1hcmNoaXZlcyAnKCJtZWxwYSIgLiAi aHR0cDovL21lbHBhLm1pbGtib3gubmV0L3BhY2thZ2VzLyIpIHQpCisgIChwYWNrYWdlLWluaXRp YWxpemUpCisgIChwYWNrYWdlLXJlZnJlc2gtY29udGVudHMpCisgIChpZiAobG9jYXRlLWxpYnJh cnkgIm11bHRpcGxlLWN1cnNvcnMtY29yZSIpCisgICAgKHVubGVzcyAoZmVhdHVyZXAgJ211bHRp cGxlLWN1cnNvcnMtY29yZSkKKyAgICAgIChyZXF1aXJlICdtdWx0aXBsZS1jdXJzb3JzLWNvcmUp KQorICAgIChwYWNrYWdlLWluc3RhbGwgJ211bHRpcGxlLWN1cnNvcnMpKQorICAobWMvYnVpbHQt aW4tY3Vyc29ycykpCisKKzs7OyBFTkQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNdWx0aXBsZSBDdXJz b3JzIGxpYnJhcnkgd3JpdHRlbiBieSAgTWFnbmFyIFN2ZWVuLgorCis7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7OzsKKzs7OyBCRUdJTiBjcm9zc2hhaXJzLmVsCisKKzs7OyBCdWlsdC1pbiBidWZmZXIt bG9jYWwgdmFyaWFibGVzIGRlZmluZWQgaW4gYGJ1ZmZlci5jYDoKKworOzs7ICBgbWMtcmVhbC1m YWtlLWN1cnNvcicKKzs7OyAgYG1jLWNvbmYnCis7OzsgIGBtYy1pbmFjdGl2ZS13aW5kb3dzJwor Ozs7ICBgY3Jvc3NoYWlycycKKzs7OyAgYGNoLWhvcml6b250YWwtcnVsZXInCis7OzsgIGBjaC12 ZXJ0aWNhbC1ydWxlcicKKzs7OyAgYGNoLWluYWN0aXZlLXdpbmRvd3MnCis7OzsgIGBtYy1zdGRl cnInCis7OzsgIGBmYy12aXNpYmxlJworOzs7ICBgZmMtaW5hY3RpdmUtd2luZG93JworCis7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBGQUNFUworCisoZGVmZ3JvdXAgKy1tb2RlIG5pbAor ICAiRmFjZXMgZm9yIHRoZSB2ZXJ0aWNhbCBydWxlci4iCisgIDpncm91cCAnY29udmVuaWVuY2Up CisKKyhkZWZmYWNlICstZm9ybS1mZWVkLWZhY2UKKyAgKGNvbmQKKyAgICAoKGVxIHN5c3RlbS10 eXBlICdkYXJ3aW4pCisgICAgICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkpCisgICAg KChlcSBzeXN0ZW0tdHlwZSAnd2luZG93cy1udCkKKyAgICAgICcoKHQgKDpmb3JlZ3JvdW5kICJt YWdlbnRhIikpKSkpCisgICJGYWNlIGZvciBgKy1mb3JtLWZlZWQtZmFjZScuIgorICA6Z3JvdXAg JystbW9kZSkKKworKGRlZmZhY2UgKy1uZXdsaW5lLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQg IiM1NTU1NTUiKSkpCisgICJGYWNlIGZvciBgKy1uZXdsaW5lLWZhY2UnLiIKKyAgOmdyb3VwICcr LW1vZGUpCisKKyhkZWZmYWNlICstc3BhY2UtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiRGFy a1JlZCIpKSkKKyAgIkZhY2UgZm9yIGArLXNwYWNlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUp CisKKyhkZWZmYWNlICstdGFiLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCisg ICJGYWNlIGZvciBgKy10YWItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky10YWItc3BhY2VyLWZhY2UKKyAgJygodCAoOmJhY2tncm91bmQgImdyZXkyNSIpKSkKKyAgIkZh Y2UgZm9yIGArLXRhYi1zcGFjZXItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZh Y2UgKy1sZWZ0LWZyaW5nZS1jdXJyZW50LWxpbmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAi Z3JlZW4iKSkpCisgICJGYWNlIGZvciBgKy1sZWZ0LWZyaW5nZS1jdXJyZW50LWxpbmUtZmFjZScu IgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0 LW9uZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJibHVlIikpKQorICAiRmFjZSBmb3IgYCst bGVmdC1mcmluZ2UtY3Vyc29yLWFsdC1vbmUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKwor KGRlZmZhY2UgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LXR3by1mYWNlCisgICcoKHQgKDpmb3Jl Z3JvdW5kICJyZWQiKSkpCisgICJGYWNlIGZvciBgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LXR3 by1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWhvbGxvdy1yZWN0YW5n bGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIpKSkKKyAgIkZhY2UgZm9y IGArLWhvbGxvdy1yZWN0YW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZh Y2UgKy1iYWNrc2xhc2gtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JleTI1IikpKQorICAi RmFjZSBmb3IgYCstYmFja3NsYXNoLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZm YWNlICstZnJpbmdlLXF1ZXN0aW9uLW1hcmstZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3Jl ZW4iKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtcXVlc3Rpb24tbWFyay1mYWNlJy4iCisgIDpn cm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrLWZhY2UK KyAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtZXhj bGFtYXRpb24tbWFyay1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZy aW5nZS1sZWZ0LWFycm93LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgInB1cnBsZSIpKSkKKyAg IkZhY2UgZm9yIGArLWZyaW5nZS1sZWZ0LWFycm93LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUp CisKKyhkZWZmYWNlICstZnJpbmdlLXJpZ2h0LWFycm93LWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgIk9yYW5nZVJlZCIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1yaWdodC1hcnJvdy1mYWNl Jy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS11cC1hcnJvdy1mYWNl CisgICcoKHQgKDpmb3JlZ3JvdW5kICJSb3lhbEJsdWUiKSkpCisgICJGYWNlIGZvciBgKy1mcmlu Z2UtdXAtYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmlu Z2UtZG93bi1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQorICAiRmFj ZSBmb3IgYCstZnJpbmdlLWRvd24tYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKwor KGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3Jv dW5kICJncmV5MjUiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdy1m YWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1yaWdodC1jdXJs eS1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICIjM2MzYzNjIikpKQorICAiRmFjZSBm b3IgYCstZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUp CisKKyhkZWZmYWNlICstZnJpbmdlLWxlZnQtdHJpYW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdy b3VuZCAicmVkIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtdHJpYW5nbGUtZmFjZScu IgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUt ZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAieWVsbG93IikpKQorICAiRmFjZSBmb3IgYCstZnJp bmdlLXJpZ2h0LXRyaWFuZ2xlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNl ICstZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIm1hZ2Vu dGEiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUtZmFjZScuIgorICA6 Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlLWZhY2UK KyAgJygodCAoOmZvcmVncm91bmQgIm9yYW5nZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS10 b3AtcmlnaHQtYW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1m cmluZ2UtYm90dG9tLWxlZnQtYW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50 YSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1ib3R0b20tbGVmdC1hbmdsZS1mYWNlJy4iCisg IDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1ib3R0b20tcmlnaHQtYW5nbGUt ZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKKyAgIkZhY2UgZm9yIGArLWZy aW5nZS1ib3R0b20tcmlnaHQtYW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgInll bGxvdyIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1sZWZ0LWJyYWNrZXQtZmFjZScuIgorICA6 Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlCisg ICcoKHQgKDpmb3JlZ3JvdW5kICJncmVlbiIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1yaWdo dC1icmFja2V0LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdl LWZpbGxlZC1yZWN0YW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIp KSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UnLiIKKyAgOmdy b3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWhvbGxvdy1zcXVhcmUtZmFjZQorICAn KCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1o b2xsb3ctc3F1YXJlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJp bmdlLWZpbGxlZC1zcXVhcmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIp KSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UnLiIKKyAgOmdyb3Vw ICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWhvcml6b250YWwtYmFyLWZhY2UKKyAgJygo dCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtaG9y aXpvbnRhbC1iYXItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmlu Z2UtZW1wdHktbGluZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJEYXJrR3JlZW4iKSkpCisg ICJGYWNlIGZvciBgKy1mcmluZ2UtZW1wdHktbGluZS1mYWNlJy4iCisgIDpncm91cCAnKy1tb2Rl KQorCisoZGVmZmFjZSArLXBhcmVucy1vbmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFn ZW50YSIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy1vbmUtZmFjZScuIgorICA6Z3JvdXAgJyst bW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtdHdvLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQg InJlZCIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy10d28tZmFjZScuIgorICA6Z3JvdXAgJyst bW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtdGhyZWUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3Vu ZCAieWVsbG93IikpKQorICAiRmFjZSBmb3IgYCstcGFyZW5zLXRocmVlLWZhY2UnLiIKKyAgOmdy b3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcGFyZW5zLWZvdXItZmFjZQorICAnKCh0ICg6Zm9y ZWdyb3VuZCAiZ3JlZW4iKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtZm91ci1mYWNlJy4iCisg IDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1maXZlLWZhY2UKKyAgJygodCAo OmZvcmVncm91bmQgImN5YW4iKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtZml2ZS1mYWNlJy4i CisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1zaXgtZmFjZQorICAnKCh0 ICg6Zm9yZWdyb3VuZCAib3JhbmdlIikpKQorICAiRmFjZSBmb3IgYCstcGFyZW5zLXNpeC1mYWNl Jy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1zZXZlbi1mYWNlCisg ICcoKHQgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtc2V2 ZW4tZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtZWlnaHQt ZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVu cy1laWdodC1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1u aW5lLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImJyb3duIikpKQorICAiRmFjZSBmb3IgYCst cGFyZW5zLW5pbmUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJl bnMtdGVuLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIndoaXRlIikpKQorICAiRmFjZSBmb3Ig YCstcGFyZW5zLXRlbi1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCis7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7OzsKKzs7OyBWQVJJQUJMRVMKKworKGRlZnZhciArLW1vZGUpCisKKyhkZWZ2YXIg Ky1maWxsLWNvbHVtbiB0CisiV2hlbiBub24tbmlsLCBkaXNwbGF5IGEgdmlzaWJsZSBmaWxsIGNv bHVtbiBpbmRpY2F0b3IuICBJZiBgZmMtbW9kZScKK2lzIGFjdGl2YXRlIHdoZW4gYCstbW9kZScg aXMgdHVybmVkIG9uLCB0aGUgZm9ybWVyIHdpbGwgYmUgdHVybmVkIG9mZi4iKQorCisoZGVmdmFy ICstYnVmZmVyLWRpc3BsYXktdGFibGUKKyAgKGxldCogKChmZi1jaGFyID9cdTAwNDYpCisgICAg ICAgICAoZGlzcGxheS10YWJsZSAobWFrZS1kaXNwbGF5LXRhYmxlKSkKKyAgICAgICAgIChnbHlw aC1mb3JtLWZlZWQgKG1ha2UtZ2x5cGgtY29kZSBmZi1jaGFyICcrLWZvcm0tZmVlZC1mYWNlKSkK KyAgICAgICAgIChnbHlwaC1waWxjcm93IChtYWtlLWdseXBoLWNvZGUgP1x1MDBCNiAnKy1uZXds aW5lLWZhY2UpKQorICAgICAgICAgKGdseXBoLXNwYWNlIChtYWtlLWdseXBoLWNvZGUgP1x1MDBC NyAnKy1zcGFjZS1mYWNlKSkKKyAgICAgICAgIChnbHlwaC10YWIgKG1ha2UtZ2x5cGgtY29kZSA/ XHUwMEJCICcrLXRhYi1mYWNlKSkKKyAgICAgICAgIChnbHlwaC10YWItc3BhY2VyIChtYWtlLWds eXBoLWNvZGUgP1x0ICcrLXRhYi1zcGFjZXItZmFjZSkpKQorICAgIChhc2V0IGRpc3BsYXktdGFi bGUgP1xuIGBbLGdseXBoLXBpbGNyb3cgP1xuXSkKKyAgICAoYXNldCBkaXNwbGF5LXRhYmxlID9c ZiBgWyxnbHlwaC1mb3JtLWZlZWQgLGdseXBoLWZvcm0tZmVlZF0pCisgICAgOzs7IG1pbmltdW0g dGFiLXdpZHRoIGlzIGAyYAorICAgIDs7IChhc2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBo LXRhYiA/XHRdKQorICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBoLXRhYiAsZ2x5 cGgtdGFiLXNwYWNlcl0pCisgICAgOzs7IHRhYi13aWR0aCBhbHdheXMgZXF1YWxzIGAxYAorICAg IDs7IChhc2V0IGRpc3BsYXktdGFibGUgP1x0IGBbLGdseXBoLXRhYl0pCisgICAgKGFzZXQgZGlz cGxheS10YWJsZSA/XHMgYFssZ2x5cGgtc3BhY2VdKQorICAgIGRpc3BsYXktdGFibGUpCisgICJU aGUgYGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyB0aGF0IGlzIHVzZWQgd2hlbiBgKy1tb2RlJyBpcyBh Y3RpdmUuIikKKworKGRlZnZhciArLWZvcnRod2l0aCBuaWwKKyAgIklmIG5vbi1uaWwsIHRoZW4g dGhlIGZ1bmN0aW9ucyB3aWxsIHJ1biBvbiB0aGUgYHBvc3QtY29tbWFuZC1ob29rJzsKK290aGVy d2lzZSwgdGhlIGZ1bmN0aW9ucyB3aWxsIHJ1biBvbiB0aGUgaWRsZS10aW1lci4iKQorKG1ha2Ut dmFyaWFibGUtYnVmZmVyLWxvY2FsICcrLWZvcnRod2l0aCkKKworKGRlZnZhciArLXRpbWVyLXZh ciBuaWwKKyJUaW1lciB1c2VkIHRvIGhpZ2hsaWdodCBjdXJyZW50IGNvbHVtbiB3aGVuZXZlciBF bWFjcyBpcyBpZGxlLiIpCisKKyhkZWZ2YXIgKy1pZGxlLXRpbWVyLXNlY29uZHMgMC41CisgICJU aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHRoZSBmdW5jdGlvbnMgYXR0YWNo ZWQgdG8gdGhlIGlkbGUtdGltZXIKK2lmIGArLWZvcnRod2l0aCcgaXMgbm9uLW5pbC4iKQorKG1h a2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICcrLWlkbGUtdGltZXItc2Vjb25kcykKKworKGRlZnZh ciArLXRydW5jYXRlLWxpbmVzLW1ham9yLW1vZGVzICcoKQorICAiTGlzdCBvZiBtYWpvciBtb2Rl cyB3ZXJlIHRydW5jYXRlIGxpbmVzIHNoYWxsIGJlIGVuYWJsZWQuIikKKworKGRlZnZhciArLXRy dW5jYXRlLWxpbmVzLWRlcml2ZWQtbW9kZXMgJyhwcm9nLW1vZGUpCisgICJMaXN0IG9mIGRlcml2 ZWQgbW9kZXMgd2VyZSB0cnVuY2F0ZSBsaW5lcyBzaGFsbCBiZSBlbmFibGVkLiIpCisKKyhkZWZ2 YXIgKy0tc2F2ZWQtc3RhdGUgbmlsCisgICJVc2VkIHRvIHN0b3JlL3Jlc3RvcmUgY2VydGFpbiBi dWZmZXItbG9jYWwgdmFyaWFibGVzIHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nKQorYCstbW9kZScu IikKKworKGRlZnZhciArLXBhcmVucy1wIHQKKyAgIkRyYXcvZXJhc2UgbWF0Y2hpbmcgcGFyZW50 aGVzZXMgd2hlbiBub24tbmlsLiIpCisobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJystcGFy ZW5zLXApCisKKyhkZWZ2YXIgKy1wYXJlbnMtaW5hY3RpdmUtd2luZG93cyB0CisgICJXaGVuIG5v bi1uaWwsIGRpc3BsYXkgbWF0Y2hpbmcgcGFyZW50aGVzZXMgaW4gdGhlIGluYWN0aXZlIHdpbmRv dy4iKQorKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICcrLXBhcmVucy1pbmFjdGl2ZS13aW5k b3dzKQorCisoZGVmdmFyICstcGFyZW5zLWV4Y2x1c2lvbnMgJyhtd2hlZWwtc2Nyb2xsKQorICAi TGlzdCBvZiBmdW5jdGlvbnMgdGhhdCB3aWxsIHByZXZlbnQgbWF0Y2hpbmcgcGFyZW50aGVzZXMg ZnJvbSB1cGRhdGluZy4iKQorCisoZGVmdmFyICstcGFyZW5zLWZyb20tZm4gbmlsCisgICJDdXN0 b20gZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGhvdyBmYXIgYmFjayB0b3dhcmRzIHRoZSBiZWdpbm5p bmcgb2YgdGhlIGZpbGUKK3Nob3VsZCBgKy1wYXJlbnMtZm4nIHNlYXJjaCBmb3IgbWF0Y2hpbmcg cGFyZW50aGVzZXMgLS0gdGhlIHJlc3VsdCB0aHJvd24gZnJvbQordGhpcyBjdXN0b20gZnVuY3Rp b24gbXVzdCBiZSBhIGJ1ZmZlciBwb2ludC4gIElmIG5vIGN1c3RvbSBmdW5jdGlvbiBpcyBkZWZp bmVkLAordGhlbiBgKy1wYXJlbnMtZm4nIHdpbGwgdXNlIGBwb2ludC1taW4nLiIpCisKKyhkZWZ2 YXIgKy1wYXJlbnMtb3ZlcmxheXMtZXhpc3QtcCBuaWwKKyJTaW1wbGUgdGVzdCB0byBzZWUgd2hl dGhlciB0aGUgcGFyZW5zIG92ZXJsYXlzIGhhdmUgYmVlbiBwbGFjZWQuCitUaGlzIGNvdWxkIGJl IGEgZGlmZmVyZW50IGtpbmQgb2YgdGVzdCAtLSBlLmcuLCBzY2FubmluZyBmb3IgdGhlCitwcmVz ZW5jZSBvZiBzcGVjaWZpYyBvdmVybGF5cywgYnV0IHBlcmhhcHMgdGhhdCBpcyBvdmVya2lsbC4i KQorKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICcrLXBhcmVucy1vdmVybGF5cy1leGlzdC1w KQorCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBGVU5DVElPTlMKKworKGRlZnZhciBj b21waWxhdGlvbi1zY3JvbGwtb3V0cHV0KQorCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIG1jLWhl bGxvLXdvcmxkICgpCisoaW50ZXJhY3RpdmUpCisgIChzZXRxIGNvbXBpbGF0aW9uLXNjcm9sbC1v dXRwdXQgdCkKKyAgKGNvbXBpbGUgIndoaWxlIDo7IGRvIGVjaG8gXCJIZWxsby1Xb3JsZFwiOyBz bGVlcCAxOyBkb25lIikpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gbWMtdGVzdCAoKQorIkRy YXcgZmFrZSBjdXJzb3JzIGF0IGFsbCBQT1MgZGVmaW5lZCBpbiB0aGUgYG1jLWNvbmYnLiAgTXVs dGlwbGUgZmFrZSBjdXJzb3JzCithcmUgc3VwcG9ydGVkIGJ5IEdVSSB2ZXJzaW9ucyBvZiBFbWFj cyBidWlsdCBmb3IgWCwgV2luZG93cyBhbmQgT1NYLgorUG9wdWxhciBmb3JtcyBvZiBzcGVjaWZ5 aW5nIGNvbG9ycyBzdWNoIGFzIFwicmVkXCIgYW5kIFwiI0ZGMDAwMFwiIGFyZSBub3cKK3N1cHBv cnRlZCwgYXMgd2VsbCBhcyBMU0wgY29sb3IgdmVjdG9ycyBzdWNoIGFzIFsxLjAgMC4wIDAuMF0u ICBGb3IgdGhvc2UgdXNlcnMKK3dobyBjaG9vc2UgdGhlIGZvcm1lciBmYW1pbGlhciBtZXRob2Rz IG9mIHNwZWNpZnlpbmcgY29sb3JzIHdpdGggc3RyaW5ncywKK2BtY19jb2xvcl92ZWN0b3JfY2Fs Yycgd2lsbCBjb252ZXJ0IHRob3NlIHN0cmluZ3MgdG8gTFNMIGNvbG9yIHZlY3RvcnMuCitUaGUg Y29sb3IgdmVjdG9ycyBhcmUgY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgTFNMIChUaGUgTGluZGVu IFNjcmlwdGluZyBMYW5ndWFnZSkuCitgbnN0ZXJtLm0nIHVzZXMgYE5TQ29sb3InLCB3aGljaCB3 b3JrcyB3ZWxsIHdpdGggTFNMLiAgYHczMnRlcm0uYycgdXNlcworYFBBTEVUVEVSR0InIG9yIGBS R0InLCBhbmQgdGhlIGNvbnZlcnNpb24gZnJvbSBMU0wgaXMgZG9uZSBpbnRlcm5hbGx5IGJ5Citt dWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIExTTCBjb2xvciB2ZWN0b3IgYnkgMjU1LiAg YHh0ZXJtLmMnIHVzZXMKK2B4X21ha2VfdHJ1ZWNvbG9yX3BpeGVsJywgd2hpY2ggdXNlcyAxNi1i aXQgUkdCIC0tIHRoZSBjb252ZXJzaW9uIGZyb20gTFNMCitoYXBwZW5zIGludGVybmFsbHkgYnkg bXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBMU0wgY29sb3IgdmVjdG9yIGJ5IDY1NTM1 LiIKKyhpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKGJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipN Qy1URVNUKiIpKSkKKyAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKyAgICAgIChlcmFz ZS1idWZmZXIpCisgICAgICAoaW5zZXJ0ICJUaGlzIGlzIGEgdGVzdCEiKQorICAgICAgKHNldHEg bWMtY29uZiAnKCgxICJoYmFyIiAibWFnZW50YSIpCisgICAgICAgICAgICAgICAgICAgICAgKDIg ImJhciIgInB1cnBsZSIpCisgICAgICAgICAgICAgICAgICAgICAgKDMgImJveCIgIiMwMEZGMDAi KQorICAgICAgICAgICAgICAgICAgICAgICg0ICJob2xsb3ciICIjMDAwMEZGIikKKyAgICAgICAg ICAgICAgICAgICAgICAoNSAoImhiYXIiIDMpIFsxLjAgMC4wIDEuMF0pCisgICAgICAgICAgICAg ICAgICAgICAgKDYgKCJiYXIiIDMpIFswLjAgMS4wIDEuMF0pCisgICAgICAgICAgICAgICAgICAg ICAgKDcgImZyYW1lZCIgIk9yYW5nZVJlZCIpCisgICAgICAgICAgICAgICAgICAgICAgKDggImJv eCIgImdyZXkyNSIpCisgICAgICAgICAgICAgICAgICAgICAgKDkgImJveCIgImdyZXk3NSIpKSkp CisgICAgKHNlbGVjdC13aW5kb3cgKGRpc3BsYXktYnVmZmVyIGJ1ZmZlcikpKSkKKworKGRlZnVu ICstdGltZXItZm4gKCkKKyJTaW5jZSB0aGlzIGZpcmVzIGdsb2JhbGx5LCB3ZSBtdXN0IGNvbnRy b2wgd2hpY2ggYnVmZmVycyBjcm9zc2hhaXJzIGFwcGVhciBpbi4iCisgICh3aGVuICstbW9kZQor ICAgICh1bmxlc3MgKG9yIChtZW1xIGxhc3QtY29tbWFuZCArLXBhcmVucy1leGNsdXNpb25zKQor ICAgICAgICAgICAgICAgIChudWxsICstcGFyZW5zLXApKQorICAgICAgKCstcGFyZW5zLWZuKSkK KyAgICAod2hlbiArLXRpbWVyLXZhcgorICAgICAgKHNldHEgdGltZXItaWRsZS1saXN0IChkZWxx ICstdGltZXItdmFyIHRpbWVyLWlkbGUtbGlzdCkpCisgICAgICAoc2V0cSArLXRpbWVyLXZhciBu aWwpKSkpCisKKyhkZWZ1biArLWRyYXctZm9ydGh3aXRoICgpCisiSW1tZWRpYXRlbHkgZGVsZXRl L2RyYXcgbWF0Y2hpbmcgcGFyZW50aGVzZXMuIgorICAoKy1kcmF3LWNyb3NzaGFpcnMgJ2ZvcmNl KSkKKworKGRlZnVuICstZHJhdy1jcm9zc2hhaXJzICgmb3B0aW9uYWwgZm9yY2UpCisiSW1tZWRp YXRlbHkgZGVsZXRlIG1hdGNoaW5nIHBhcmVudGhlc2VzLiAgSWYgRk9SQ0UgaXMgbm9uLW5pbCwg dGhlbiBpbW1lZGlhdGVseQorZHJhdyBtYXRjaGluZyBwYXJlbnRoZXNpczsgb3RoZXJ3aXNlLCBk cmF3IHRoZW0gb24gYW4gaWRsZS10aWVyLiIKKyAgKHdoZW4gKy1tb2RlCisgICAgKHdoZW4gKy10 aW1lci12YXIKKyAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAoZGVscSArLXRpbWVyLXZhciB0 aW1lci1pZGxlLWxpc3QpKQorICAgICAgKHNldHEgKy10aW1lci12YXIgbmlsKSkKKyAgICAodW5s ZXNzIChvciAobWVtcSB0aGlzLWNvbW1hbmQgKy1wYXJlbnMtZXhjbHVzaW9ucykKKyAgICAgICAg ICAgICAgICAoYW5kIChudWxsICstcGFyZW5zLXApCisgICAgICAgICAgICAgICAgICAgICAobnVs bCArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wKSkpCisgICAgICAoKy1kZWxldGUtcGFyZW5zLW92 ZXJsYXlzKSkKKyAgICAoaWYgZm9yY2UKKyAgICAgIChwcm9nbgorICAgICAgICAod2hlbiArLXBh cmVucy1wCisgICAgICAgICAgKCstcGFyZW5zLWZuKSkpCisgICAgICAoc2V0cSArLXRpbWVyLXZh ciAocnVuLXdpdGgtaWRsZS10aW1lciArLWlkbGUtdGltZXItc2Vjb25kcyBuaWwgIycrLXRpbWVy LWZuKSkpKSkKKworKGRlZnZhciBmYy1tb2RlKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZmluZS1t aW5vci1tb2RlICstbW9kZQorIk1pbm9yIG1vZGUgZm9yIGRpc3BsYXlpbmcgYSBob3Jpem9udGFs IHJ1bGVyLiIKKyAgOmluaXQtdmFsdWUgbmlsCisgIDpsaWdodGVyICIgKyIKKyAgOmtleW1hcCBu aWwKKyAgOmdsb2JhbCBuaWwKKyAgOmdyb3VwICcrLW1vZGUKKyAgKGNvbmQKKyAgICAoKy1tb2Rl CisgICAgICA7OzsgYCstbW9kZScgaGFzIHRoZSBhYmlsaXR5IHRvIGFsc28gZGlzcGxheSBhIGZp bGwgY29sdW1uIGluZGljYXRvci4KKyAgICAgIDs7OyBTZWUgdGhlIHZhcmlhYmxlIGArLWZpbGwt Y29sdW1uJy4KKyAgICAgICh3aGVuIGZjLW1vZGUKKyAgICAgICAgKGZjLW1vZGUgLTEpKQorICAg ICAgKHdoZW4gKGFuZCBnbG9iYWwtZWxkb2MtbW9kZQorICAgICAgICAgICAgICAgICAoY2FsbGVk LWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAgICAgICAgICAoZXF1YWwgY3VycmVudC1w cmVmaXgtYXJnICcoNCkpKQorICAgICAgICAoZ2xvYmFsLWVsZG9jLW1vZGUgLTEpKQorICAgICAg KHdoZW4gKGFuZCBqaXQtbG9jay1jb250ZXh0LXRpbWVyCisgICAgICAgICAgICAgICAgIChjYWxs ZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAgICAgICAgIChlcXVhbCBjdXJyZW50 LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgICh3aGVuICh0aW1lcnAgaml0LWxvY2stY29udGV4 dC10aW1lcikKKyAgICAgICAgICAoY2FuY2VsLXRpbWVyIGppdC1sb2NrLWNvbnRleHQtdGltZXIp KQorICAgICAgICA7OyAoc2V0cSBqaXQtbG9jay1jb250ZXh0LXRpbWVyIChydW4td2l0aC1pZGxl LXRpbWVyIDUuMCAncmVwZWF0ICdqaXQtbG9jay1jb250ZXh0LWZvbnRpZnkpKQorICAgICAgICAo c2V0cSBqaXQtbG9jay1jb250ZXh0LXRpbWVyIG5pbCkpCisgICAgICAod2hlbiAoYW5kIChjYWxs ZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAgICAgICAgIChlcXVhbCBjdXJyZW50 LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgICh3aGVuICh0aW1lcnAgdW5kby1hdXRvLWN1cnJl bnQtYm91bmRhcnktdGltZXIpCisgICAgICAgICAgKGNhbmNlbC10aW1lciB1bmRvLWF1dG8tY3Vy cmVudC1ib3VuZGFyeS10aW1lcikpCisgICAgICAgIChmc2V0ICd1bmRvLWF1dG8tLXVuZG9hYmxl LWNoYW5nZQorICAgICAgICAgICAgICAobGFtYmRhICgpIChhZGQtdG8tbGlzdCAndW5kby1hdXRv LS11bmRvYWJseS1jaGFuZ2VkLWJ1ZmZlcnMgKGN1cnJlbnQtYnVmZmVyKSkpKQorICAgICAgICAo ZnNldCAndW5kby1hdXRvLWFtYWxnYW1hdGUgJ2lnbm9yZSkpCisgICAgICAod2hlbiBibGluay1j dXJzb3ItbW9kZQorICAgICAgICAoYmxpbmstY3Vyc29yLW1vZGUgLTEpCisgICAgICAgICh3aGVu IChtZW1xICdibGluay1jdXJzb3ItY2hlY2sgcG9zdC1jb21tYW5kLWhvb2spCisgICAgICAgICAg KHJlbW92ZS1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnYmxpbmstY3Vyc29yLWNoZWNrKSkpCisg ICAgICAoc2V0cSBjcm9zc2hhaXJzIHQpCisgICAgICAod2hlbiArLWZpbGwtY29sdW1uCisgICAg ICAgIChzZXRxIGZjLXZpc2libGUgdCkpCisgICAgICA7OzsgYGF1dG8tY29tcG9zaXRpb24tbW9k ZScgaXMgbmVlZGVkIGZvciBjcm9zc2hhaXJzIHRvIHByb3Blcmx5IGNhbGN1bGF0ZQorICAgICAg Ozs7IGNvb3JkaW5hdGVzIG9mIGNvbXBvc2l0aW9uIGNoYXJhY3RlcnMuICBBdXRvbWF0aWNhbGx5 IGJlY29tZXMgcGVybWFuZW50bHkKKyAgICAgIDs7OyBidWZmZXItbG9jYWwgd2hlbiBzZXQuCisg ICAgICAodW5sZXNzIGF1dG8tY29tcG9zaXRpb24tbW9kZQorICAgICAgICAoc2V0cSBhdXRvLWNv bXBvc2l0aW9uLW1vZGUgdCkpCisgICAgICA7OzsgQGxhd2xpc3QgaXMgZm9jdXNpbmcgdGhlIGlu aXRpYWwgZGV2ZWxvcG1lbnQgb2YgZmVhdHVyZSByZXF1ZXN0cyAjMTc2ODQKKyAgICAgIDs7OyBh bmQgIzIyODczIG9uIEwyUiBsYW5ndWFnZXMuICBUaGUgZmVhdHVyZSB0ZXN0IGZpbGUgdXNlZCBi eSBAbGF3bGlzdAorICAgICAgOzs7IGJvZ3MgRW1hY3MgZG93biB1bmxlc3MgYGJpZGktZGlzcGxh eS1yZW9yZGVyaW5nJyBpcyBzZXQgdG8gYSBuaWwgdmFsdWUuCisgICAgICA7OzsgSG93ZXZlciwg bW9zdCB1c2VycyB3aWxsIHByb2JhYmx5IG5vdCB3YW50IHRoaXMgcGFydGljdWxhciBzZXR0aW5n LgorICAgICAgKHVubGVzcyAobnVsbCBiaWRpLWRpc3BsYXktcmVvcmRlcmluZykKKyAgICAgICAg KHNldHEgYmlkaS1kaXNwbGF5LXJlb3JkZXJpbmcgbmlsKSkKKyAgICAgIChzZXQgKG1ha2UtbG9j YWwtdmFyaWFibGUgJystLXNhdmVkLXN0YXRlKSBuaWwpCisgICAgICAoZG9saXN0ICh2YXIgJyhi dWZmZXItZGlzcGxheS10YWJsZQorICAgICAgICAgICAgICAgICAgICAgZnJpbmdlLWluZGljYXRv ci1hbGlzdAorICAgICAgICAgICAgICAgICAgICAgdGFiLXdpZHRoCisgICAgICAgICAgICAgICAg ICAgICBsaW5lLW1vdmUtdmlzdWFsCisgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZS1saW5l cworICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGUtcGFydGlhbC13aWR0aC13aW5kb3dzCisg ICAgICAgICAgICAgICAgICAgICB3b3JkLXdyYXApKQorICAgICAgICAod2hlbiAobG9jYWwtdmFy aWFibGUtcCB2YXIpCisgICAgICAgICAgKHB1c2ggKGNvbnMgdmFyIChzeW1ib2wtdmFsdWUgdmFy KSkgKy0tc2F2ZWQtc3RhdGUpKSkKKyAgICAgIChzZXRxIGZpbGwtY29sdW1uIDgwKQorICAgICAg KHNldHEgZGlzcGxheS1saW5lLW51bWJlcnMgdCkKKyAgICAgIChzZXRxLWxvY2FsIGF1dG8taHNj cm9sbC1tb2RlICdjdXJyZW50LWxpbmUpCisgICAgICAoc2V0cS1sb2NhbCBoc2Nyb2xsLXN0ZXAg NSkKKyAgICAgIChzZXRxIGJ1ZmZlci1kaXNwbGF5LXRhYmxlICstYnVmZmVyLWRpc3BsYXktdGFi bGUpCisgICAgICAoc2V0cSB0YWItd2lkdGggNCkKKyAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFy aWFibGUgJ2xpbmUtbW92ZS12aXN1YWwpIHQpCisgICAgICAoc2V0cSB0cnVuY2F0ZS1saW5lcwor ICAgICAgICAoY29uZAorICAgICAgICAgICgobGV0ICgobHN0ICstdHJ1bmNhdGUtbGluZXMtZGVy aXZlZC1tb2RlcykKKyAgICAgICAgICAgICAgICAgIG1vZGUpCisgICAgICAgICAgICAoY2F0Y2gg J2ZvdW5kCisgICAgICAgICAgICAgICh3aGlsZSAoc2V0cSBtb2RlIChwb3AgbHN0KSkKKyAgICAg ICAgICAgICAgICAod2hlbiAoZGVyaXZlZC1tb2RlLXAgbW9kZSkKKyAgICAgICAgICAgICAgICAg ICh0aHJvdyAnZm91bmQgdCkpKSkpKQorICAgICAgICAgICAoKG1lbXEgbWFqb3ItbW9kZSArLXRy dW5jYXRlLWxpbmVzLW1ham9yLW1vZGVzKSkKKyAgICAgICAgICAgKHQKKyAgICAgICAgICAgICBu aWwpKSkKKyAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3RydW5jYXRlLXBhcnRpYWwt d2lkdGgtd2luZG93cykgbmlsKQorICAgICAgKHNldHEgd29yZC13cmFwIHQpCisgICAgICAoc2V0 cSBpbmRpY2F0ZS1lbXB0eS1saW5lcyB0KQorICAgICAgKHNldHEgaW5kaWNhdGUtYnVmZmVyLWJv dW5kYXJpZXMgJ2xlZnQpCisgICAgICAoc2V0cSBmcmluZ2UtaW5kaWNhdG9yLWFsaXN0CisgICAg ICAgICAgOzs7IGhzY2xfYWxsX3RlbXBfcCB8IGhzY2xfdGVtcF9wCisgICAgICAgICcoKCstaHNj bC10ZW1wIC4gKCstc2luZ2xlLWFuZ2xlLWxlZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Ky1kb3VibGUtYW5nbGUtbGVmdCkpCisgICAgICAgICAgOzs7IGhzY2xfYWxsX3Blcm1fMF9wIHwg aHNjbF9hbGxfcGVybV8xX3AgfCBoc2NsX2FsbF9wZXJtXzJfcCB8IGhzY2xfcGVybV9wCisgICAg ICAgICAgKCstaHNjbC1wZXJtIC4gKCstc2luZ2xlLWFuZ2xlLXVwCisgICAgICAgICAgICAgICAg ICAgICAgICAgICstZG91YmxlLWFuZ2xlLXVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICst dHJpcGxlLWFuZ2xlLXVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICstcXVhZHJ1cGxlLWFu Z2xlLXVwKSkKKyAgICAgICAgICAoKy1vdmVybGF5LWFycm93IC4gKCstZnJpbmdlLWxlZnQtYXJy b3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXJpZ2h0LWFycm93KSkK KyAgICAgICAgICAodHJ1bmNhdGlvbiAuICgrLWZyaW5nZS1sZWZ0LWFycm93CisgICAgICAgICAg ICAgICAgICAgICAgICAgKy1mcmluZ2UtcmlnaHQtYXJyb3cpKQorICAgICAgICAgIChjb250aW51 YXRpb24gLiAoKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdworICAgICAgICAgICAgICAgICAgICAg ICAgICAgKy1iYWNrc2xhc2gpKQorICAgICAgICAgIChvdmVybGF5LWFycm93IC4gKy1mcmluZ2Ut cmlnaHQtdHJpYW5nbGUpCisgICAgICAgICAgKHVwIC4gKy1mcmluZ2UtdXAtYXJyb3cpCisgICAg ICAgICAgKGRvd24gLiArLWZyaW5nZS1kb3duLWFycm93KQorICAgICAgICAgICh0b3AgLiArLWZy aW5nZS10b3AtbGVmdC1hbmdsZSkKKyAgICAgICAgICAoYm90dG9tIC4gKy1mcmluZ2UtYm90dG9t LXJpZ2h0LWFuZ2xlKQorICAgICAgICAgICh0b3AtYm90dG9tIC4gKCstZnJpbmdlLWxlZnQtYnJh Y2tldAorICAgICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXJpZ2h0LWJyYWNrZXQKKyAg ICAgICAgICAgICAgICAgICAgICAgICArLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICArLWZyaW5nZS10b3AtbGVmdC1hbmdsZSkpCisgICAgICAgICAgKGVt cHR5LWxpbmUgLiArLWZyaW5nZS1lbXB0eS1saW5lKQorICAgICAgICAgICh1bmtub3duIC4gKy1m cmluZ2UtcXVlc3Rpb24tbWFyaykpKQorICAgICAgKHNldHEgZnJpbmdlLWN1cnNvci1hbGlzdCAn KChib3ggLiArLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChob2xsb3cgLiArLWhvbGxvdy1yZWN0YW5nbGUpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGJhciAuICstdmVydGljYWwtYmFyKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChoYmFyIC4gKy1mcmluZ2UtaG9yaXpvbnRhbC1iYXIpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhvbGxvdy1zbWFsbCAuICstZnJpbmdlLWhv bGxvdy1zcXVhcmUpKSkKKyAgICAgIChpZiAob3IgKy1mb3J0aHdpdGgKKyAgICAgICAgICAgICAg KGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAgKGFkZC1ob29rICdwb3N0 LWNvbW1hbmQtaG9vayAnKy1kcmF3LWZvcnRod2l0aCAnYXBwZW5kICdsb2NhbCkKKyAgICAgICAg KGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnKy1kcmF3LWNyb3NzaGFpcnMgJ2FwcGVuZCAn bG9jYWwpKQorICAgICAgKHdoZW4gKy1mb3J0aHdpdGgKKyAgICAgICAgKGFkZC1ob29rICd3aW5k b3ctY29uZmlndXJhdGlvbi1jaGFuZ2UtaG9vayAnKy1kcmF3LWZvcnRod2l0aCBuaWwgJ2xvY2Fs KSkKKyAgICAgIChhZGQtaG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9vayAndHVybi1vZmYtKy1t b2RlIG5pbCAnbG9jYWwpCisgICAgICAod2hlbiAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55 KQorICAgICAgICAoY29uZAorICAgICAgICAgICgrLWZvcnRod2l0aAorICAgICAgICAgICAgKG1l c3NhZ2UgIlR1cm5lZCBPTiBgKy1tb2RlJyAtLSBEcmF3IG1hdGNoaW5nIHBhcmVudGhlc2VzIGlt bWVkaWF0ZWx5LiIpKQorICAgICAgICAgICgoZXF1YWwgY3VycmVudC1wcmVmaXgtYXJnICcoNCkp CisgICAgICAgICAgICA7OzsgTWF0Y2hpbmcgcGFyZW50aGVzZXMgd2lsbCBiZSBkcmF3biBpbW1l ZGlhdGVseS4KKyAgICAgICAgICAgIChtZXNzYWdlICJUdXJuZWQgT04gYCstbW9kZScgLS0gT3B0 aW1pemVkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIikpCisgICAgICAgICAgKHQKKyAgICAgICAg ICAgIChtZXNzYWdlICJUdXJuZWQgT04gYCstbW9kZScuIikpKSkpCisgICAgKHQKKyAgICAgIChr aWxsLWxvY2FsLXZhcmlhYmxlICdmaWxsLWNvbHVtbikKKyAgICAgIChraWxsLWxvY2FsLXZhcmlh YmxlICdhdXRvLWhzY3JvbGwtbW9kZSkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdoc2Ny b2xsLXN0ZXApCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnY3Jvc3NoYWlycykKKyAgICAg IChraWxsLWxvY2FsLXZhcmlhYmxlICdmYy12aXNpYmxlKQorICAgICAgKGtpbGwtbG9jYWwtdmFy aWFibGUgJ2Rpc3BsYXktbGluZS1udW1iZXJzKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUg J2Rpc3BsYXktbGluZS1udW1iZXJzLXdpZHRoKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUg J21jLWNvbmYpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnYnVmZmVyLWRpc3BsYXktdGFi bGUpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAndGFiLXdpZHRoKQorICAgICAgKGtpbGwt bG9jYWwtdmFyaWFibGUgJ2xpbmUtbW92ZS12aXN1YWwpCisgICAgICAoa2lsbC1sb2NhbC12YXJp YWJsZSAndHJ1bmNhdGUtbGluZXMpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAndHJ1bmNh dGUtcGFydGlhbC13aWR0aC13aW5kb3dzKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3dv cmQtd3JhcCkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdpbmRpY2F0ZS1lbXB0eS1saW5l cykKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdpbmRpY2F0ZS1idWZmZXItYm91bmRhcmll cykKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdmcmluZ2UtaW5kaWNhdG9yLWFsaXN0KQor ICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2ZyaW5nZS1jdXJzb3ItYWxpc3QpCisgICAgICAo a2lsbC1sb2NhbC12YXJpYWJsZSAnK2ZvcnRod2l0aCkKKyAgICAgIChkb2xpc3QgKHNhdmVkICst LXNhdmVkLXN0YXRlKQorICAgICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlIChjYXIgc2F2 ZWQpKSAoY2RyIHNhdmVkKSkpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnKy0tc2F2ZWQt c3RhdGUpCisgICAgICAoKy1kZWxldGUtcGFyZW5zLW92ZXJsYXlzKQorICAgICAgKHdoZW4gKG1l bXEgJystZHJhdy1mb3J0aHdpdGggcG9zdC1jb21tYW5kLWhvb2spCisgICAgICAgIChyZW1vdmUt aG9vayAncG9zdC1jb21tYW5kLWhvb2sgJystZHJhdy1mb3J0aHdpdGggJ2xvY2FsKSkKKyAgICAg ICh3aGVuIChtZW1xICcrLWRyYXctY3Jvc3NoYWlycyBwb3N0LWNvbW1hbmQtaG9vaykKKyAgICAg ICAgKHJlbW92ZS1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnKy1kcmF3LWNyb3NzaGFpcnMgJ2xv Y2FsKSkKKyAgICAgICh3aGVuIChtZW1xICcrLWRyYXctZm9ydGh3aXRoIHdpbmRvdy1jb25maWd1 cmF0aW9uLWNoYW5nZS1ob29rKQorICAgICAgICAocmVtb3ZlLWhvb2sgJ3dpbmRvdy1jb25maWd1 cmF0aW9uLWNoYW5nZS1ob29rICcrLWRyYXctZm9ydGh3aXRoICdsb2NhbCkpCisgICAgICAocmVt b3ZlLWhvb2sgJ2NoYW5nZS1tYWpvci1tb2RlLWhvb2sgJ3R1cm4tb2ZmLSstbW9kZSAnbG9jYWwp CisgICAgICAod2hlbiArLXRpbWVyLXZhcgorICAgICAgICAoc2V0cSB0aW1lci1pZGxlLWxpc3Qg KGRlbHEgKy10aW1lci12YXIgdGltZXItaWRsZS1saXN0KSkKKyAgICAgICAgKHNldHEgKy10aW1l ci12YXIgbmlsKSkKKyAgICAgICh3aGVuIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisg ICAgICAgIChtZXNzYWdlICJUdXJuZWQgT0ZGIGArLW1vZGUnLiIpKSkpKQorCisoZGVmdW4gdHVy bi1vZmYtKy1tb2RlICgpCisgICgrLW1vZGUgLTEpKQorCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 OzsKKworKGRlZnVuICstcGFyZW5zLWZuICgpCisgICJEb2Mtc3RyaW5nLiIKKyAgKGxldCogKChv cG9pbnQgKHBvaW50KSkKKyAgICAgICAgIChmcm9tIChpZiArLXBhcmVucy1mcm9tLWZuCisgICAg ICAgICAgICAgICAgIChmdW5jYWxsICstcGFyZW5zLWZyb20tZm4pCisgICAgICAgICAgICAgICAg IChwb2ludC1taW4pKSkKKyAgICAgICAgICh3aW4gKHNlbGVjdGVkLXdpbmRvdykpCisgICAgICAg ICAoaSAwKQorICAgICAgICAgKHByZWNlZGluZy1jaGFyIChwcmVjZWRpbmctY2hhcikpCisgICAg ICAgICAob2NoYXIgKGNoYXItYWZ0ZXIgb3BvaW50KSkKKyAgICAgICAgIChwb3MxCisgICAgICAg ICAgIChjb25kCisgICAgICAgICAgICAgKChhbmQgb2NoYXIKKyAgICAgICAgICAgICAgICAgICAo b3IgOzs7IChjaGFyLXRvLXN0cmluZyA0MCkgPT4gb3BlbmluZyBwYXJlbnRoZXNpcworICAgICAg ICAgICAgICAgICAgICAgICAoPSBvY2hhciA0MCkKKyAgICAgICAgICAgICAgICAgICAgICAgOzs7 IChjaGFyLXRvLXN0cmluZyA5MSkgPT4gb3BlbmluZyBzcXVhcmUgYnJhY2tldAorICAgICAgICAg ICAgICAgICAgICAgICAoPSBvY2hhciA5MSkKKyAgICAgICAgICAgICAgICAgICAgICAgOzs7IChj aGFyLXRvLXN0cmluZyAxMjMpID0+IG9wZW5pbmcgd2F2eSBicmFja2V0CisgICAgICAgICAgICAg ICAgICAgICAgICg9IG9jaGFyIDEyMykpKQorICAgICAgICAgICAgICAgIChtaW4gKDErIG9wb2lu dCkgKHBvaW50LW1heCkpKQorICAgICAgICAgICAgICgob3IgOzs7IChjaGFyLXRvLXN0cmluZyA0 MSkgPT4gY2xvc2luZyBwYXJlbnRoZXNpcworICAgICAgICAgICAgICAgICAgKD0gcHJlY2VkaW5n LWNoYXIgNDEpCisgICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDkzKSA9PiBj bG9zaW5nIHNxdWFyZSBicmFja2V0CisgICAgICAgICAgICAgICAgICAoPSBwcmVjZWRpbmctY2hh ciA5MykKKyAgICAgICAgICAgICAgICAgIDs7OyAoY2hhci10by1zdHJpbmcgMTI1KSA9PiBjbG9z aW5nIHdhdnkgYnJhY2tldAorICAgICAgICAgICAgICAgICAgKD0gcHJlY2VkaW5nLWNoYXIgMTI1 KSkKKyAgICAgICAgICAgICAgICAobWF4IChwb2ludC1taW4pICgxLSBvcG9pbnQpKSkKKyAgICAg ICAgICAgICAodAorICAgICAgICAgICAgICAgIG9wb2ludCkpKQorICAgICAgICAgcG9zMgorICAg ICAgICAgc2VsZWN0ZWQtZmFjZSkKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIChjb25kaXRp b24tY2FzZSBuaWwKKyAgICAgICAgKHdoaWxlIChzZXRxIHBvczEgKG50aCAxIChwYXJzZS1wYXJ0 aWFsLXNleHAgZnJvbSBwb3MxKSkpCisgICAgICAgICAgKHNldHEgcG9zMiAoc2Nhbi1zZXhwcyBw b3MxIDEpKQorICAgICAgICAgIChpZiAoPSBpIDEwKQorICAgICAgICAgICAgKHNldHEgaSAxKQor ICAgICAgICAgICAgKHNldHEgaSAoMSsgaSkpKQorICAgICAgICAgIChzZXRxIHNlbGVjdGVkLWZh Y2UgKGNvbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgMSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtb25lLWZhY2UpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDIpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJystcGFyZW5zLXR3by1mYWNlKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKD0gaSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBh cmVucy10aHJlZS1mYWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSA0 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy1mb3VyLWZhY2Up CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLWZpdmUtZmFjZSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCg9IGkgNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnKy1wYXJlbnMtc2l4LWZhY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgoPSBpIDcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXNl dmVuLWZhY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDgpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLWVpZ2h0LWZhY2UpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJystcGFyZW5zLW5pbmUtZmFjZSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCg9IGkgMTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JystcGFyZW5zLXRlbi1mYWNlKSkpCisgICAgICAgICAgKGxldCAoKG92IChtYWtlLW92ZXJsYXkg cG9zMSAoMSsgcG9zMSkpKSkKKyAgICAgICAgICAgICh1bmxlc3MgKy1wYXJlbnMtaW5hY3RpdmUt d2luZG93cworICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ3dpbmRvdyB3aW4pKQorICAg ICAgICAgICAgKG92ZXJsYXktcHV0IG92ICdmYWNlIHNlbGVjdGVkLWZhY2UpKQorICAgICAgICAg ICh3aGVuIHBvczIKKyAgICAgICAgICAgIChsZXQgKChvdiAobWFrZS1vdmVybGF5ICgxLSBwb3My KSBwb3MyKSkpCisgICAgICAgICAgICAgICh1bmxlc3MgKy1wYXJlbnMtaW5hY3RpdmUtd2luZG93 cworICAgICAgICAgICAgICAgIChvdmVybGF5LXB1dCBvdiAnd2luZG93IHdpbikpCisgICAgICAg ICAgICAgIChvdmVybGF5LXB1dCBvdiAnZmFjZSBzZWxlY3RlZC1mYWNlKSkpKQorICAgICAgICAo ZXJyb3IgbmlsKSkpCisgICAgKHNldHEgKy1wYXJlbnMtb3ZlcmxheXMtZXhpc3QtcCB0KSkpCisK KyhkZWZ1biArLXJlbW92ZS1vdmVybGF5cyAoYmVnIGVuZCBuYW1lIHZhbCkKKyJSZW1vdmUgdGhl IG92ZXJsYXlzIHRoYXQgYXJlIGBlcXVhbC1pbmNsdWRpbmctcHJvcGVydGllc2AuCitJbmNsdWRl cyBhIHVuaXF1ZSBzaXR1YXRpb24gd2hlbiBhbiBvdmVybGF5IHdpdGggYW4gYCdhZnRlci1zdHJp bmdgIHByb3BlcnR5CitpcyBhdCB0aGUgdmVyeSBlbmQgb2YgYSBuYXJyb3dlZC1idWZmZXIuIgor ICAobGV0KiAoKHBvaW50LW1heCAocG9pbnQtbWF4KSkKKyAgICAgICAgIChwb2ludC1taW4gKHBv aW50LW1pbikpCisgICAgICAgICAobmFycm93ZWQtcCAoYnVmZmVyLW5hcnJvd2VkLXApKQorICAg ICAgICAgKGJlZyAoaWYgYmVnIGJlZyBwb2ludC1taW4pKQorICAgICAgICAgKGVuZAorICAgICAg ICAgICAoY29uZAorICAgICAgICAgICAgICgoYW5kCisgICAgICAgICAgICAgICAgIChub3QgbmFy cm93ZWQtcCkKKyAgICAgICAgICAgICAgICAgZW5kKQorICAgICAgICAgICAgICAgZW5kKQorICAg ICAgICAgICAgICgoYW5kCisgICAgICAgICAgICAgICAgIChub3QgbmFycm93ZWQtcCkKKyAgICAg ICAgICAgICAgICAgKG51bGwgZW5kKSkKKyAgICAgICAgICAgICAgIHBvaW50LW1heCkKKyAgICAg ICAgICAgICAoKGFuZAorICAgICAgICAgICAgICAgICBuYXJyb3dlZC1wCisgICAgICAgICAgICAg ICAgIGVuZAorICAgICAgICAgICAgICAgICAoPCBlbmQgcG9pbnQtbWF4KSkKKyAgICAgICAgICAg ICAgIGVuZCkKKyAgICAgICAgICAgICAoKGFuZAorICAgICAgICAgICAgICAgICBuYXJyb3dlZC1w CisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAoPSBlbmQgcG9pbnQtbWF4 KSkKKyAgICAgICAgICAgICAgICgxKyBlbmQpKQorICAgICAgICAgICAgICgoYW5kCisgICAgICAg ICAgICAgICAgIG5hcnJvd2VkLXAKKyAgICAgICAgICAgICAgICAgKG51bGwgZW5kKSkKKyAgICAg ICAgICAgICAgICgxKyBwb2ludC1tYXgpKSApKQorICAgICAgICAgKG92ZXJsYXlzCisgICAgICAg ICAgIChwcm9nbgorICAgICAgICAgICAgIChvdmVybGF5LXJlY2VudGVyIGVuZCkKKyAgICAgICAg ICAgICAob3ZlcmxheXMtaW4gYmVnIGVuZCkpKSkKKyAgICAod2hlbiAoYW5kIGJlZyBlbmQgbmFt ZSB2YWwpCisgICAgICAoZG9saXN0IChvIG92ZXJsYXlzKQorICAgICAgICAoY29uZAorICAgICAg ICAgICgoYW5kIChlcSBuYW1lICdmYWNlKQorICAgICAgICAgICAgICAgIChlcSAob3ZlcmxheS1n ZXQgbyBuYW1lKSB2YWwpKQorICAgICAgICAgICAgOzsgRWl0aGVyIHB1c2ggdGhpcyBvdmVybGF5 IG91dHNpZGUgYmVnLi4uZW5kCisgICAgICAgICAgICA7OyBvciBzcGxpdCBpdCB0byBleGNsdWRl IGJlZy4uLmVuZAorICAgICAgICAgICAgOzsgb3IgZGVsZXRlIGl0IGVudGlyZWx5IChpZiBpdCBp cyBjb250YWluZWQgaW4gYmVnLi4uZW5kKS4KKyAgICAgICAgICAgIChpZiAoPCAob3ZlcmxheS1z dGFydCBvKSBiZWcpCisgICAgICAgICAgICAgICAgKGlmICg+IChvdmVybGF5LWVuZCBvKSBlbmQp CisgICAgICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgICAgIChtb3ZlLW92ZXJsYXkgKGNv cHktb3ZlcmxheSBvKQorICAgICAgICAgICAgICAgICAgKG92ZXJsYXktc3RhcnQgbykgYmVnKQor ICAgICAgICAgICAgICAgIChtb3ZlLW92ZXJsYXkgbyBlbmQgKG92ZXJsYXktZW5kIG8pKSkKKyAg ICAgICAgICAgICAgICAgIChtb3ZlLW92ZXJsYXkgbyAob3ZlcmxheS1zdGFydCBvKSBiZWcpKQor ICAgICAgICAgICAgICAoaWYgKD4gKG92ZXJsYXktZW5kIG8pIGVuZCkKKyAgICAgICAgICAgICAg ICAgIChtb3ZlLW92ZXJsYXkgbyBlbmQgKG92ZXJsYXktZW5kIG8pKQorICAgICAgICAgICAgICAg IChkZWxldGUtb3ZlcmxheSBvKSkpKQorICAgICAgICAgICgoYW5kIChub3QgKGVxIG5hbWUgJ2Zh Y2UpKQorICAgICAgICAgICAgICAgIChlcXVhbC1pbmNsdWRpbmctcHJvcGVydGllcyAob3Zlcmxh eS1nZXQgbyBuYW1lKSB2YWwpKQorICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG8pKSkpKSkp CisKKyhkZWZ1biArLWRlbGV0ZS1wYXJlbnMtb3ZlcmxheXMgKCkKKyAgKHdoZW4gKy1wYXJlbnMt b3ZlcmxheXMtZXhpc3QtcAorICAgIChkb2xpc3QgKGZhY2UgJygrLXBhcmVucy1vbmUtZmFjZQor ICAgICAgICAgICAgICAgICAgICArLXBhcmVucy10d28tZmFjZQorICAgICAgICAgICAgICAgICAg ICArLXBhcmVucy10aHJlZS1mYWNlCisgICAgICAgICAgICAgICAgICAgICstcGFyZW5zLWZvdXIt ZmFjZQorICAgICAgICAgICAgICAgICAgICArLXBhcmVucy1maXZlLWZhY2UKKyAgICAgICAgICAg ICAgICAgICAgKy1wYXJlbnMtc2l4LWZhY2UKKyAgICAgICAgICAgICAgICAgICAgKy1wYXJlbnMt c2V2ZW4tZmFjZQorICAgICAgICAgICAgICAgICAgICArLXBhcmVucy1laWdodC1mYWNlCisgICAg ICAgICAgICAgICAgICAgICstcGFyZW5zLW5pbmUtZmFjZQorICAgICAgICAgICAgICAgICAgICAr LXBhcmVucy10ZW4tZmFjZSkpCisgICAgICAoKy1yZW1vdmUtb3ZlcmxheXMgbmlsIG5pbCAnZmFj ZSBmYWNlKSkKKyAgICAoc2V0cSArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wIG5pbCkpKQorCis7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKworOzs7IEFVVEhPUjogIE5pa29sYWogU2NodW1hY2hl ciAtLSBodHRwczovL2dpdGh1Yi5jb20vbnNjaHVtL2ZyaW5nZS1oZWxwZXIuZWwKKyhkZWZ1biAr LWZyaW5nZS1oZWxwZXItZGVjaW1hbCAoJnJlc3Qgc3RyaW5ncykKKyJDb252ZXJ0IFNUUklOR1Mg aW50byBhIHZlY3RvciB1c2FibGUgZm9yIGBkZWZpbmUtZnJpbmdlLWJpdG1hcCcuCitFYWNoIHN0 cmluZyBpbiBTVFJJTkdTIHJlcHJlc2VudHMgYSBsaW5lIG9mIHRoZSBmcmluZ2UgYml0bWFwLgor UGVyaW9kcyAoLikgYXJlIGJhY2tncm91bmQtY29sb3JlZCBwaXhlbDsgWHMgYXJlIGZvcmVncm91 bmQtY29sb3JlZC4gVGhlCitmcmluZ2UgYml0bWFwIGFsd2F5cyBpcyBhbGlnbmVkIHRvIHRoZSBy aWdodC4gSWYgdGhlIGZyaW5nZSBoYXMgaGFsZgord2lkdGgsIG9ubHkgdGhlIGxlZnQgNCBwaXhl bHMgb2YgYW4gOCBwaXhlbCBiaXRtYXAgd2lsbCBiZSBzaG93bi4KK0ZvciBleGFtcGxlLCB0aGUg Zm9sbG93aW5nIGNvZGUgZGVmaW5lcyBhIGRpYWdvbmFsIGxpbmUuCitcKCstZnJpbmdlLWhlbHBl ci1kZWNpbWFsCitcIlhYLi4uLi4uXCIKK1wiLi5YWC4uLi5cIgorXCIuLi4uWFguLlwiCitcIi4u Li4uLlhYXCJcKSIKKyAgKHVubGVzcyAoY2RyIHN0cmluZ3MpCisgICAgKHNldHEgc3RyaW5ncyAo c3BsaXQtc3RyaW5nIChjYXIgc3RyaW5ncykgIlxuIikpKQorICAoYXBwbHkgJ3ZlY3RvcgorICAg IChtYXBjYXIKKyAgICAgIChsYW1iZGEgKHN0cikKKyAgICAgICAgKGxldCAoKG51bSAwKSkKKyAg ICAgICAgICAoZG9saXN0IChjIChzdHJpbmctdG8tbGlzdCBzdHIpKQorICAgICAgICAgICAgKHNl dHEgbnVtICgrICgqIG51bSAyKSAoaWYgKGVxIGMgPy4pIDAgMSkpKSkKKyAgICAgICAgICBudW0p KQorICAgICAgc3RyaW5ncykpKQorCis7OzsgTW9kaWZpY2F0aW9uIGJ5IEBsYXdsaXN0IG9mIGAr LWZyaW5nZS1oZWxwZXItZGVjaW1hbCcgd3JpdHRlbiBieQorOzs7IE5pa29sYWogU2NodW1hY2hl ciAtLSBodHRwczovL2dpdGh1Yi5jb20vbnNjaHVtL2ZyaW5nZS1oZWxwZXIuZWwKKyhkZWZ1biAr LWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwgKCZyZXN0IHN0cmluZ3MpCisiQ29udmVydCBTVFJJ TkdTIGludG8gYSB2ZWN0b3IgdXNhYmxlIGZvciBgZGVmaW5lLWZyaW5nZS1iaXRtYXAnLgorRWFj aCBzdHJpbmcgaW4gU1RSSU5HUyByZXByZXNlbnRzIGEgbGluZSBvZiB0aGUgZnJpbmdlIGJpdG1h cC4KK1BlcmlvZHMgKC4pIGFyZSBiYWNrZ3JvdW5kLWNvbG9yZWQgcGl4ZWw7IFhzIGFyZSBmb3Jl Z3JvdW5kLWNvbG9yZWQuIFRoZQorZnJpbmdlIGJpdG1hcCBhbHdheXMgaXMgYWxpZ25lZCB0byB0 aGUgcmlnaHQuIElmIHRoZSBmcmluZ2UgaGFzIGhhbGYKK3dpZHRoLCBvbmx5IHRoZSBsZWZ0IDQg cGl4ZWxzIG9mIGFuIDggcGl4ZWwgYml0bWFwIHdpbGwgYmUgc2hvd24uCitGb3IgZXhhbXBsZSwg dGhlIGZvbGxvd2luZyBjb2RlIGRlZmluZXMgYSBkaWFnb25hbCBsaW5lLgorXCgrLWZyaW5nZS1o ZWxwZXItaGV4YWRlY2ltYWwKK1wiWFguLi4uLi5cIgorXCIuLlhYLi4uLlwiCitcIi4uLi5YWC4u XCIKK1wiLi4uLi4uWFhcIlwpIgorICAodW5sZXNzIChjZHIgc3RyaW5ncykKKyAgICAoc2V0cSBz dHJpbmdzIChzcGxpdC1zdHJpbmcgKGNhciBzdHJpbmdzKSAiXG4iKSkpCisgIChtYXBjb25jYXQg J2lkZW50aXR5CisgICAgKG1hcGNhcgorICAgICAgKGxhbWJkYSAoc3RyKQorICAgICAgICAobGV0 ICgobnVtIDApCisgICAgICAgICAgICAgIHJlc3VsdCkKKyAgICAgICAgICAoZG9saXN0IChjIChz dHJpbmctdG8tbGlzdCBzdHIpKQorICAgICAgICAgICAgKHNldHEgbnVtICgrICgqIG51bSAyKSAo aWYgKGVxIGMgPy4pIDAgMSkpKSkKKyAgICAgICAgICAoaWYgKD0gbnVtIDApCisgICAgICAgICAg ICAiMHgwMCIKKyAgICAgICAgICAgIChmb3JtYXQgIiUjLXgiIG51bSkpKSkKKyAgICAgIHN0cmlu Z3MpCisgICAgIiwgIikpCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOzs7IEZSSU5HRSBC SVRNQVBTCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtcXVlc3Rpb24tbWFyayAo Ky1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLnh4eHguLiIKKyIueHh4eHh4LiIKKyJ4eC4uLi54 eCIKKyJ4eC4uLi54eCIKKyIuLi4ueHguLiIKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIKKyIuLi4u Li4uLiIKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmlu ZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrICgrLWZyaW5nZS1oZWxw ZXItZGVjaW1hbAorIi4uLlhYLi4uIgorIi4uLlhYLi4uIgorIi4uLlhYLi4uIgorIi4uLlhYLi4u IgorIi4uLlhYLi4uIgorIi4uLlhYLi4uIgorIi4uLlhYLi4uIgorIi4uLi4uLi4uIgorIi4uLlhY Li4uIgorIi4uLlhYLi4uIikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRt YXAgJystZnJpbmdlLWxlZnQtYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4ueHgu Li4iCisiLi54eC4uLi4iCisiLnh4Li4uLi4iCisieHh4eHh4Li4iCisieHh4eHh4Li4iCisiLnh4 Li4uLi4iCisiLi54eC4uLi4iCisiLi4ueHguLi4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZp bmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtcmlnaHQtYXJyb3cgKCstZnJpbmdlLWhlbHBlci1k ZWNpbWFsCisiLi4ueHguLi4iCisiLi4uLnh4Li4iCisiLi4uLi54eC4iCisiLi54eHh4eHgiCisi Li54eHh4eHgiCisiLi4uLi54eC4iCisiLi4uLnh4Li4iCisiLi4ueHguLi4iKSBuaWwgbmlsICdj ZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtdXAtYXJyb3cgKCstZnJp bmdlLWhlbHBlci1kZWNpbWFsCisiLi4ueHguLi4iCisiLi54eHh4Li4iCisiLnh4eHh4eC4iCisi eHh4eHh4eHgiCisiLi4ueHguLi4iCisiLi4ueHguLi4iCisiLi4ueHguLi4iCisiLi4ueHguLi4i KSBuaWwgbmlsICd0b3ApCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtZG93bi1h cnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIKKyIu Li54eC4uLiIKKyIuLi54eC4uLiIKKyJ4eHh4eHh4eCIKKyIueHh4eHh4LiIKKyIuLnh4eHguLiIK KyIuLi54eC4uLiIpIG5pbCBuaWwgJ2JvdHRvbSkKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcr LWZyaW5nZS1sZWZ0LWN1cmx5LWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4uLnh4 eHguIgorIi4ueHh4eHguIgorIi54eC4uLi4uIgorIi54eHguLnguIgorIi54eHh4eHguIgorIi4u eHh4eHguIgorIi4uLnh4eHguIgorIi4ueHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVm aW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93ICgrLWZyaW5nZS1o ZWxwZXItZGVjaW1hbAorIi54eHh4Li4uIgorIi54eHh4eC4uIgorIi4uLi4ueHguIgorIi54Li54 eHguIgorIi54eHh4eHguIgorIi54eHh4eC4uIgorIi54eHh4Li4uIgorIi54eHh4eC4uIikgbmls IG5pbCAnY2VudGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtdHJp YW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4uLi4ueHgiCisiLi4uLnh4eHgiCisi Li4ueHh4eHgiCisiLi54eHh4eHgiCisiLi54eHh4eHgiCisiLi4ueHh4eHgiCisiLi4uLnh4eHgi CisiLi4uLi4ueHgiKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAn Ky1mcmluZ2UtcmlnaHQtdHJpYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisieHguLi4u Li4iCisieHh4eC4uLi4iCisieHh4eHguLi4iCisieHh4eHh4Li4iCisieHh4eHh4Li4iCisieHh4 eHguLi4iCisieHh4eC4uLi4iCisieHguLi4uLi4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZp bmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUgKCstZnJpbmdlLWhlbHBl ci1kZWNpbWFsCisieHh4eHh4Li4iCisieHh4eHh4Li4iCisieHguLi4uLi4iCisieHguLi4uLi4i CisieHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisiLi4uLi4uLi4iKSBuaWwgbmls ICd0b3ApCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xl ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4ueHh4eHh4IgorIi4ueHh4eHh4IgorIi4uLi4u Lnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4u Li4uLi4uIikgbmlsIG5pbCAndG9wKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdl LWJvdHRvbS1sZWZ0LWFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorInh4Li4uLi4uIgor Inh4Li4uLi4uIgorInh4Li4uLi4uIgorInh4Li4uLi4uIgorInh4Li4uLi4uIgorInh4eHh4eC4u IgorInh4eHh4eC4uIikgbmlsIG5pbCAnYm90dG9tKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAg JystZnJpbmdlLWJvdHRvbS1yaWdodC1hbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIu Li4uLi54eCIKKyIuLi4uLi54eCIKKyIuLi4uLi54eCIKKyIuLi4uLi54eCIKKyIuLi4uLi54eCIK KyIuLnh4eHh4eCIKKyIuLnh4eHh4eCIpIG5pbCBuaWwgJ2JvdHRvbSkKKworKGRlZmluZS1mcmlu Z2UtYml0bWFwICcrLWZyaW5nZS1sZWZ0LWJyYWNrZXQgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFs CisieHh4eHh4Li4iCisieHh4eHh4Li4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4u Li4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHh4eHh4Li4iCisieHh4 eHh4Li4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmlu Z2UtcmlnaHQtYnJhY2tldCAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLnh4eHh4eCIKKyIu Lnh4eHh4eCIKKyIuLi4uLi54eCIKKyIuLi4uLi54eCIKKyIuLi4uLi54eCIKKyIuLi4uLi54eCIK KyIuLi4uLi54eCIKKyIuLi4uLi54eCIKKyIuLnh4eHh4eCIKKyIuLnh4eHh4eCIpIG5pbCBuaWwg J2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1maWxsZWQtcmVjdGFu Z2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorInh4eHh4eHguIgorInh4eHh4eHguIgorInh4 eHh4eHguIgorInh4eHh4eHguIgorInh4eHh4eHguIgorInh4eHh4eHguIgorInh4eHh4eHguIgor Inh4eHh4eHguIgorInh4eHh4eHguIgorInh4eHh4eHguIgorInh4eHh4eHguIgorInh4eHh4eHgu IgorInh4eHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAg JystZnJpbmdlLWhvbGxvdy1zcXVhcmUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLnh4eHh4 eC4iCisiLnguLi4ueC4iCisiLnguLi4ueC4iCisiLnguLi4ueC4iCisiLnguLi4ueC4iCisiLnh4 eHh4eC4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmlu Z2UtZmlsbGVkLXNxdWFyZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIueHh4eHh4LiIKKyIu eHh4eHh4LiIKKyIueHh4eHh4LiIKKyIueHh4eHh4LiIKKyIueHh4eHh4LiIKKyIueHh4eHh4LiIp IG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1ob3Jp em9udGFsLWJhciAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4eHh4eHh4LiIKKyJ4eHh4eHh4 LiIpIG5pbCBuaWwgJ2JvdHRvbSkKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1l bXB0eS1saW5lICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4uLi4uLi4uIgorIi4ueHh4eC4u IgorIi4uLi4uLi4uIgorIi4uLi4uLi4uIgorIi4ueHh4eC4uIgorIi4uLi4uLi4uIikgbmlsIG5p bCAnKHRvcCB0KSkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgYHNldC1mcmluZ2Ut Yml0bWFwLWZhY2UnCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLXNtaWxleS1mYWNlICcr LWxlZnQtZnJpbmdlLWN1cnJlbnQtbGluZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFj ZSAnKy1ob2xsb3ctcmVjdGFuZ2xlICcrLWhvbGxvdy1yZWN0YW5nbGUtZmFjZSkKKworKHNldC1m cmluZ2UtYml0bWFwLWZhY2UgJystYmFja3NsYXNoICcrLWJhY2tzbGFzaC1mYWNlKQorCisoc2V0 LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcXVlc3Rpb24tbWFyayAnKy1mcmluZ2UtcXVl c3Rpb24tbWFyay1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtZXhj bGFtYXRpb24tbWFyayAnKy1mcmluZ2UtZXhjbGFtYXRpb24tbWFyay1mYWNlKQorCisoc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC1hcnJvdyAnKy1mcmluZ2UtbGVmdC1hcnJv dy1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcmlnaHQtYXJyb3cg JystZnJpbmdlLXJpZ2h0LWFycm93LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcr LWZyaW5nZS11cC1hcnJvdyAnKy1mcmluZ2UtdXAtYXJyb3ctZmFjZSkKKworKHNldC1mcmluZ2Ut Yml0bWFwLWZhY2UgJystZnJpbmdlLWRvd24tYXJyb3cgJystZnJpbmdlLWRvd24tYXJyb3ctZmFj ZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWxlZnQtY3VybHktYXJyb3cg JystZnJpbmdlLWxlZnQtY3VybHktYXJyb3ctZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZh Y2UgJystZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93ICcrLWZyaW5nZS1yaWdodC1jdXJseS1hcnJv dy1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC10cmlhbmds ZSAnKy1mcmluZ2UtbGVmdC10cmlhbmdsZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFj ZSAnKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUgJystZnJpbmdlLXJpZ2h0LXRyaWFuZ2xlLWZhY2Up CisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS10b3AtbGVmdC1hbmdsZSAnKy1m cmluZ2UtdG9wLWxlZnQtYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJyst ZnJpbmdlLXRvcC1yaWdodC1hbmdsZSAnKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlLWZhY2UpCisK KyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ib3R0b20tbGVmdC1hbmdsZSAnKy1m cmluZ2UtYm90dG9tLWxlZnQtYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2Ug JystZnJpbmdlLWJvdHRvbS1yaWdodC1hbmdsZSAnKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xl LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1sZWZ0LWJyYWNrZXQg JystZnJpbmdlLWxlZnQtYnJhY2tldC1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAn Ky1mcmluZ2UtcmlnaHQtYnJhY2tldCAnKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlKQorCiso c2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtZmlsbGVkLXJlY3RhbmdsZSAnKy1mcmlu Z2UtZmlsbGVkLXJlY3RhbmdsZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1m cmluZ2UtaG9sbG93LXNxdWFyZSAnKy1mcmluZ2UtaG9sbG93LXNxdWFyZS1mYWNlKQorCisoc2V0 LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtZmlsbGVkLXNxdWFyZSAnKy1mcmluZ2UtZmls bGVkLXNxdWFyZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtaG9y aXpvbnRhbC1iYXIgJystZnJpbmdlLWhvcml6b250YWwtYmFyLWZhY2UpCisKKyhzZXQtZnJpbmdl LWJpdG1hcC1mYWNlICcrLWZyaW5nZS1lbXB0eS1saW5lICcrLWZyaW5nZS1lbXB0eS1saW5lLWZh Y2UpCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOzs7IEZJTEwtQ09MVU1OLU1PREUKKwor KGRlZnZhciBmYy1tb2RlKQorCisoZGVmdmFyIGZjLXRpbWVyLXZhciBuaWwKKyJUaW1lciB1c2Vk IHRvIGhpZ2hsaWdodCBjdXJyZW50IGNvbHVtbiB3aGVuZXZlciBFbWFjcyBpcyBpZGxlLiIpCisK Kzs7OyMjI2F1dG9sb2FkCisoZGVmaW5lLW1pbm9yLW1vZGUgZmMtbW9kZQorIk1pbm9yIG1vZGUg Zm9yIGRpc3BsYXlpbmcgYSB2aXN1YWwgZmlsbCBjb2x1bW4uIgorICA6aW5pdC12YWx1ZSBuaWwK KyAgOmxpZ2h0ZXIgIiBGQyIKKyAgOmtleW1hcCBuaWwKKyAgOmdsb2JhbCBuaWwKKyAgOmdyb3Vw ICdmYy1tb2RlCisgIChjb25kCisgICAgOzs7IGArLW1vZGUnIGhhcyB0aGUgYWJpbGl0eSB0byBh bHNvIGRpc3BsYXkgYSBmaWxsIGNvbHVtbiBpbmRpY2F0b3IuCisgICAgOzs7IFNlZSB0aGUgdmFy aWFibGUgYCstZmlsbC1jb2x1bW4nLgorICAgICgoYW5kIGZjLW1vZGUgKy1tb2RlKQorICAgICAg KHNldHEgZmMtbW9kZSBuaWwpCisgICAgICAobWVzc2FnZSAiVHVybmVkIE9GRiBgZmMtbW9kZScg KCVzKSAtLSBzZWUgdGhlIHZhcmlhYmxlIGArLWZpbGwtY29sdW1uJy4iIChjdXJyZW50LWJ1ZmZl cikpKQorICAgIChmYy1tb2RlCisgICAgICAod2hlbiAoYW5kIGdsb2JhbC1lbGRvYy1tb2RlCisg ICAgICAgICAgICAgICAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAg ICAgICAgIChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgIChnbG9iYWwt ZWxkb2MtbW9kZSAtMSkpCisgICAgICAod2hlbiAoYW5kIGppdC1sb2NrLWNvbnRleHQtdGltZXIK KyAgICAgICAgICAgICAgICAgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAg ICAgICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAgKHdoZW4g KHRpbWVycCBqaXQtbG9jay1jb250ZXh0LXRpbWVyKQorICAgICAgICAgIChjYW5jZWwtdGltZXIg aml0LWxvY2stY29udGV4dC10aW1lcikpCisgICAgICAgIDs7IChzZXRxIGppdC1sb2NrLWNvbnRl eHQtdGltZXIgKHJ1bi13aXRoLWlkbGUtdGltZXIgNS4wICdyZXBlYXQgJ2ppdC1sb2NrLWNvbnRl eHQtZm9udGlmeSkpCisgICAgICAgIChzZXRxIGppdC1sb2NrLWNvbnRleHQtdGltZXIgbmlsKSkK KyAgICAgICh3aGVuIChhbmQgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAg ICAgICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAgKHdoZW4g KHRpbWVycCB1bmRvLWF1dG8tY3VycmVudC1ib3VuZGFyeS10aW1lcikKKyAgICAgICAgICAoY2Fu Y2VsLXRpbWVyIHVuZG8tYXV0by1jdXJyZW50LWJvdW5kYXJ5LXRpbWVyKSkKKyAgICAgICAgKGZz ZXQgJ3VuZG8tYXV0by0tdW5kb2FibGUtY2hhbmdlCisgICAgICAgICAgICAgIChsYW1iZGEgKCkg KGFkZC10by1saXN0ICd1bmRvLWF1dG8tLXVuZG9hYmx5LWNoYW5nZWQtYnVmZmVycyAoY3VycmVu dC1idWZmZXIpKSkpCisgICAgICAgIChmc2V0ICd1bmRvLWF1dG8tYW1hbGdhbWF0ZSAnaWdub3Jl KSkKKyAgICAgICh3aGVuIGJsaW5rLWN1cnNvci1tb2RlCisgICAgICAgIChibGluay1jdXJzb3It bW9kZSAtMSkKKyAgICAgICAgKHdoZW4gKG1lbXEgJ2JsaW5rLWN1cnNvci1jaGVjayBwb3N0LWNv bW1hbmQtaG9vaykKKyAgICAgICAgICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdi bGluay1jdXJzb3ItY2hlY2spKSkKKyAgICAgIChzZXRxIGZjLXZpc2libGUgdCkKKyAgICAgIDs7 OyBgYXV0by1jb21wb3NpdGlvbi1tb2RlJyBpcyBuZWVkZWQgZm9yIGNyb3NzaGFpcnMgdG8gcHJv cGVybHkgY2FsY3VsYXRlCisgICAgICA7OzsgY29vcmRpbmF0ZXMgb2YgY29tcG9zaXRpb24gY2hh cmFjdGVycy4gIEF1dG9tYXRpY2FsbHkgYmVjb21lcyBwZXJtYW5lbnRseQorICAgICAgOzs7IGJ1 ZmZlci1sb2NhbCB3aGVuIHNldC4KKyAgICAgICh1bmxlc3MgYXV0by1jb21wb3NpdGlvbi1tb2Rl CisgICAgICAgIChzZXRxIGF1dG8tY29tcG9zaXRpb24tbW9kZSB0KSkKKyAgICAgIDs7OyBAbGF3 bGlzdCBpcyBmb2N1c2luZyB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBvZiBmZWF0dXJlIHJlcXVl c3RzICMxNzY4NAorICAgICAgOzs7IGFuZCAjMjI4NzMgb24gTDJSIGxhbmd1YWdlcy4gIFRoZSBm ZWF0dXJlIHRlc3QgZmlsZSB1c2VkIGJ5IEBsYXdsaXN0CisgICAgICA7OzsgYm9ncyBFbWFjcyBk b3duIHVubGVzcyBgYmlkaS1kaXNwbGF5LXJlb3JkZXJpbmcnIGlzIHNldCB0byBhIG5pbCB2YWx1 ZS4KKyAgICAgIDs7OyBIb3dldmVyLCBtb3N0IHVzZXJzIHdpbGwgcHJvYmFibHkgbm90IHdhbnQg dGhpcyBwYXJ0aWN1bGFyIHNldHRpbmcuCisgICAgICAodW5sZXNzIChudWxsIGJpZGktZGlzcGxh eS1yZW9yZGVyaW5nKQorICAgICAgICAoc2V0cSBiaWRpLWRpc3BsYXktcmVvcmRlcmluZyBuaWwp KQorICAgICAgKHVubGVzcyAoYW5kIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAg ICAgICAgICAgICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAg KHNldHEgZmlsbC1jb2x1bW4gODApCisgICAgICAgIChhZGQtaG9vayAnY2hhbmdlLW1ham9yLW1v ZGUtaG9vayAndHVybi1vZmYtZmMtbW9kZSBuaWwgJ2xvY2FsKSkKKyAgICAgICh3aGVuIChjYWxs ZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgIChpZiAoZXF1YWwgY3VycmVudC1wcmVm aXgtYXJnICcoNCkpCisgICAgICAgICAgKG1lc3NhZ2UgIlR1cm5lZCBPTiBgZmMtbW9kZScgLS0g ZGVidWdnaW5nIG1vZGUuIikKKyAgICAgICAgICAobWVzc2FnZSAiVHVybmVkIE9OIGBmYy1tb2Rl Jy4iKSkpKQorICAgICh0CisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnZmlsbC1jb2x1bW4p CisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnZmMtdmlzaWJsZSkKKyAgICAgIChyZW1vdmUt aG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9vayAndHVybi1vZmYtZmMtbW9kZSAnbG9jYWwpCisg ICAgICAod2hlbiAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAobWVzc2Fn ZSAiVHVybmVkIE9GRiBgZmMtbW9kZScuIikpKSkpCisKKyhkZWZ1biB0dXJuLW9mZi1mYy1tb2Rl ICgpCisgIChmYy1tb2RlIC0xKSkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CisKKyhwcm92 aWRlICdjcm9zc2hhaXJzKQpkaWZmIC0tZ2l0IGEvbGlzcC9mYWNlcy5lbCBiL2xpc3AvZmFjZXMu ZWwKaW5kZXggZmE1MjZjMy4uOWU1ZDUxZSAxMDA2NDQKLS0tIGEvbGlzcC9mYWNlcy5lbAorKysg Yi9saXNwL2ZhY2VzLmVsCkBAIC0yNTAwLDYgKzI1MDAsMzEwIEBAIHVud2FudGVkIGVmZmVjdHMu IgogICA6Z3JvdXAgJ2Jhc2ljLWZhY2VzCiAgIDpncm91cCAnZGlzcGxheS1saW5lLW51bWJlcnMp CiAKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgYmVnaW4gTVVMVElQTEUtQ1VSU09S UworCisoZGVmZmFjZSArLWRlYnVnZ2luZy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJPcmFu Z2VSZWQiKSkpCisgICJGYWNlIGZvciBgKy1kZWJ1Z2dpbmctZmFjZScuICBVc2VkIGluIGB4ZGlz cC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXNwZWNpYWwtY2hhcmFjdGVy LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCisgICJGYWNlIGZvciBgKy1zcGVj aWFsLWNoYXJhY3Rlci1mYWNlJy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1v ZGUpCisKKyhkZWZmYWNlICstdmVydGljYWwtYmFyLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQg Im1hZ2VudGEiKSkpCisgICJGYWNlIGZvciBgKy12ZXJ0aWNhbC1iYXItZmFjZScuICBVc2VkIGlu IGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXJldmVyc2VkLXZl cnRpY2FsLWJhci1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQorICAiRmFjZSBm b3IgYCstcmV2ZXJzZWQtdmVydGljYWwtYmFyLWZhY2UnLiAgVXNlZCBpbiBgeGRpc3AuYycuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1mYWNl CisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkK KyAgICAgOmZvcmVncm91bmQgInllbGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkgKHR5cGUgZ3RrKSkKKyAgICAgOmZvcmVncm91bmQg IkRhcmtDeWFuIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3Jv dW5kIGxpZ2h0KSAodHlwZSBucykpCisgICAgIDpmb3JlZ3JvdW5kICJEYXJrQ3lhbiIpCisgICAg KCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAg IDpmb3JlZ3JvdW5kICJEYXJrQ3lhbiIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3Jz IDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInllbGxvdyIpCisgICAg KCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAg IDpmb3JlZ3JvdW5kICJvcmFuZ2UiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4 KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1v bm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikp CisgICJGYWNlIGZvciBgKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1mYWNlJy4gIFVzZWQgaW4gYHhk aXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstb2RkLW51bWJlcmVkLWNv bHVtbi1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInJlZCIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkgKHR5cGUgZ3RrKSkKKyAgICAgOmZvcmVn cm91bmQgInJlZCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBsaWdodCkgKHR5cGUgbnMpKQorICAgICA6Zm9yZWdyb3VuZCAicmVkIikKKyAgICAoKChj bGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZv cmVncm91bmQgInJlZCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFj a2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInllbGxvdyIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3Jv dW5kICJvcmFuZ2UiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAg OmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAg ICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNl IGZvciBgKy1vZGQtbnVtYmVyZWQtY29sdW1uLWZhY2UnLiAgVXNlZCBpbiBgeGRpc3AuYycuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1pbmFj dGl2ZS1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgIiNlZWU4YWEiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIGd0aykpCisgICAgIDpm b3JlZ3JvdW5kICJibHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChi YWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBucykpCisgICAgIDpmb3JlZ3JvdW5kICJibHVlIikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAg ICAgOmZvcmVncm91bmQgImJsdWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAx NikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKQorICAgICgo KGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6 Zm9yZWdyb3VuZCAib3JhbmdlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkp CisgICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25v KSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIpKQor ICAiRmFjZSBmb3IgYCstZXZlbi1udW1iZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFjZScuICBVc2Vk IGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLW9kZC1udW1i ZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9y cyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICIjZmY2MzQ3IikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlw ZSBndGspKQorICAgICA6Zm9yZWdyb3VuZCAib3JhbmdlIikKKyAgICAoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBucykpCisgICAgIDpmb3Jl Z3JvdW5kICJvcmFuZ2UiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJh Y2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAib3JhbmdlIikKKyAgICAoKChjbGFz cyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdy b3VuZCAieWVsbG93IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNr Z3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIm9yYW5nZSIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgo KHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQg OmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLW9kZC1udW1iZXJlZC1jb2x1bW4t aW5hY3RpdmUtZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQor CisoZGVmZmFjZSArLWJleW9uZC1maWxsLWNvbHVtbi1mYWNlCisgICcoKCgoY2xhc3MgY29sb3Ip IChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgImdy ZWVuIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxp Z2h0KSAodHlwZSBndGspKQorICAgICA6Zm9yZWdyb3VuZCAiZ3JlZW4iKQorICAgICgoKGNsYXNz IGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIG5zKSkKKyAg ICAgOmZvcmVncm91bmQgImdyZWVuIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMg ODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgImdyZWVuIikKKyAgICAo KChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6 Zm9yZWdyb3VuZCAieWVsbG93IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYp IChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIm9yYW5nZSIpCisgICAgKCgo Y2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQor ICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisg ICAgKHQgOmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLWJleW9uZC1maWxsLWNv bHVtbi1mYWNlJy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhk ZWZmYWNlICstYmV5b25kLWZpbGwtY29sdW1uLWluYWN0aXZlLWZhY2UKKyAgJygoKChjbGFzcyBj b2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3Vu ZCAiIzJlOGI1NyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBsaWdodCkgKHR5cGUgZ3RrKSkKKyAgICAgOmZvcmVncm91bmQgIiMyZThiNTciKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBl IG5zKSkKKyAgICAgOmZvcmVncm91bmQgIiMyZThiNTciKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiIzJl OGI1NyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBk YXJrKSkKKyAgICAgOmZvcmVncm91bmQgInllbGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJvcmFu Z2UiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91 bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJz ZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1i ZXlvbmQtZmlsbC1jb2x1bW4taW5hY3RpdmUtZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4iCisg IDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXJlYWwtZmFrZS1jdXJzb3ItZmFjZQorICAn KCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAg IDpmb3JlZ3JvdW5kICJjeWFuIiA6YmFja2dyb3VuZCAiRGFya0JsdWUiKQorICAgICgoKGNsYXNz IGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIGd0aykpCisg ICAgIDpmb3JlZ3JvdW5kICJtYWdlbnRhIiA6YmFja2dyb3VuZCAiTGlnaHRTa3lCbHVlIikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlw ZSBucykpCisgICAgIDpmb3JlZ3JvdW5kICJtYWdlbnRhIiA6YmFja2dyb3VuZCAiTGlnaHRTa3lC bHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxp Z2h0KSkKKyAgICAgOmZvcmVncm91bmQgIm1hZ2VudGEiIDpiYWNrZ3JvdW5kICJMaWdodFNreUJs dWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFy aykpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxsb3ciIDpiYWNrZ3JvdW5kICJibHVlMyIpCisgICAg KCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAg IDpmb3JlZ3JvdW5kICJvcmFuZ2UiIDpiYWNrZ3JvdW5kICJsaWdodGdvbGRlbnJvZDIiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRl IiA6YmFja2dyb3VuZCAiYmx1ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAg ICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91 bmQgImdyYXkiKSkKKyAgIkZhY2UgZm9yIGArLXJlYWwtZmFrZS1jdXJzb3ItZmFjZScuICBVc2Vk IGluIGB4ZGlzcC5jJy4KK0FzIHRvIGEgaG9sbG93IHN0eWxlIGN1cnNvciwgdGhlIDpmb3JlZ3Jv dW5kIHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgYm9yZGVyIGFuZAordGhlIDpiYWNrZ3JvdW5k IHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgaW5uZXIgZmlsbGVkIHNoYWRpbmcuICBUaGUgY2hh cmFjdGVyCityZXRhaW5zIGl0cyBvd24gZm9yZWdyb3VuZCBjb2xvciBhbmQgaXMgdW5hZmZlY3Rl ZCBieSB0aGlzIHBhcnRpY3VsYXIgZmFjZS4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFj ZSArLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICIjZmYw MGZmIiA6YmFja2dyb3VuZCAiRm9yZXN0R3JlZW4iKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIGd0aykpCisgICAgIDpmb3JlZ3Jv dW5kICJPcmFuZ2VSZWQiIDpiYWNrZ3JvdW5kICJncmV5NzAiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIG5zKSkKKyAgICAgOmZv cmVncm91bmQgIk9yYW5nZVJlZCIgOmJhY2tncm91bmQgImdyZXk3MCIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3Jv dW5kICJPcmFuZ2VSZWQiIDpiYWNrZ3JvdW5kICJncmV5NzAiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJ5 ZWxsb3ciIDpiYWNrZ3JvdW5kICJibHVlMyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJvcmFuZ2UiIDpi YWNrZ3JvdW5kICJsaWdodGdvbGRlbnJvZDIiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNv bG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIiA6YmFja2dyb3VuZCAiYmx1ZSIpCisg ICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAg ICAodCA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQgImdyYXkiKSkKKyAgIkZhY2UgZm9y IGArLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4K K0FzIHRvIGEgaG9sbG93IHN0eWxlIGN1cnNvciwgdGhlIDpmb3JlZ3JvdW5kIHBhcmFtZXRlciBp cyB1c2VkIGZvciB0aGUgYm9yZGVyIGFuZAordGhlIDpiYWNrZ3JvdW5kIHBhcmFtZXRlciBpcyB1 c2VkIGZvciB0aGUgaW5uZXIgZmlsbGVkIHNoYWRpbmcuICBUaGUgY2hhcmFjdGVyCityZXRhaW5z IGl0cyBvd24gZm9yZWdyb3VuZCBjb2xvciBhbmQgaXMgdW5hZmZlY3RlZCBieSB0aGlzIHBhcnRp Y3VsYXIgZmFjZS4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXJlYWwtZmFrZS1j dXJzb3ItcmVnaW9uLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChi YWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiY2hvY29sYXRlNCIgOmJhY2tncm91 bmQgIiM4Yjc5NWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tn cm91bmQgbGlnaHQpICh0eXBlIGd0aykpCisgICAgIDpmb3JlZ3JvdW5kICJwaW5rIiA6YmFja2dy b3VuZCAiYmxhY2siKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tn cm91bmQgbGlnaHQpICh0eXBlIG5zKSkKKyAgICAgOmZvcmVncm91bmQgInBpbmsiIDpiYWNrZ3Jv dW5kICJibGFjayIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJwaW5rIiA6YmFja2dyb3VuZCAiYmxhY2si KQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykp CisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxsb3ciIDpiYWNrZ3JvdW5kICJibHVlMyIpCisgICAgKCgo Y2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpm b3JlZ3JvdW5kICJvcmFuZ2UiIDpiYWNrZ3JvdW5kICJsaWdodGdvbGRlbnJvZDIiKQorICAgICgo KGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIiA6 YmFja2dyb3VuZCAiYmx1ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAg OmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQg ImdyYXkiKSkKKyAgIkZhY2UgZm9yIGArLXJlYWwtZmFrZS1jdXJzb3ItcmVnaW9uLWZhY2UnLiAg VXNlZCBpbiBgeGRpc3AuYycuCitBcyB0byBhIGhvbGxvdyBzdHlsZSBjdXJzb3IsIHRoZSA6Zm9y ZWdyb3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGlubmVyCitmaWxsZWQgc2hhZGluZyB3 aGVuIFBUIGlzIF9ub3RfIHdpdGhpbiB0aGUgYWN0aXZlIHJlZ2lvbjsgYW5kLCB0aGUgOmJhY2tn cm91bmQKK3BhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgaW5uZXIgZmlsbGVkIHNoYWRpbmcgd2hl biBQVCBfaXNfIHdpdGhpbiB0aGUgYWN0aXZlCityZWdpb24uICBUaGUgY2hhcmFjdGVyIHJldGFp bnMgaXRzIG93biBmb3JlZ3JvdW5kIGNvbG9yIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IHRoaXMKK3Bh cnRpY3VsYXIgZmFjZS4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLW92ZXJsYXkt YXJyb3ctZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQorICAiRmFjZSBmb3IgYCst b3ZlcmxheS1hcnJvdy1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLW92 ZXJsYXktYXJyb3ctaW5hY3RpdmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiRGFya1NsYXRl R3JleSIpKSkKKyAgIkZhY2UgZm9yIGArLW92ZXJsYXktYXJyb3ctaW5hY3RpdmUtZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1vdmVybGF5LWFycm93LWhzY2wtZmFjZQor ICAnKCh0ICg6Zm9yZWdyb3VuZCAiRGFya0dyZWVuIikpKQorICAiRmFjZSBmb3IgYCstb3Zlcmxh eS1hcnJvdy1oc2NsLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstb3Zl cmxheS1hcnJvdy1oc2NsLWluYWN0aXZlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIkRhcmtT bGF0ZUdyZXkiKSkpCisgICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93LWhzY2wtaW5hY3RpdmUt ZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgZmMtZmFjZQorICAnKCgoKGNs YXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykgKHR5cGUgbnMpKQor ICAgICA6Zm9yZWdyb3VuZCAiZ3JleTE1IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xv cnMgODgpIChiYWNrZ3JvdW5kIGRhcmspICh0eXBlIGd0aykpCisgICAgICAgICA6Zm9yZWdyb3Vu ZCAiZ3JleTE1IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3Jv dW5kIGRhcmspICh0eXBlIHczMikpCisgICAgICAgICA6Zm9yZWdyb3VuZCAiZ3JleTI1IikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlw ZSBndGspKQorICAgICA6Zm9yZWdyb3VuZCAicHVycGxlIikKKyAgICAoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBucykpCisgICAgIDpmb3Jl Z3JvdW5kICJwdXJwbGUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJh Y2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAicHVycGxlIikKKyAgICAoKChjbGFz cyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdy b3VuZCAieWVsbG93IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNr Z3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIm9yYW5nZSIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgo KHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQg OmZvcmVncm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGBmYy1mYWNlJyBpbiB0aGUgYWN0aXZl IHdpbmRvdy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZm YWNlIGZjLWluYWN0aXZlLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgp IChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiRGFya0JsdWUiKQorICAgICgo KGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIGd0 aykpCisgICAgIDpmb3JlZ3JvdW5kICJncmV5MTUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIG5zKSkKKyAgICAgOmZvcmVncm91 bmQgImdyZXkxNSIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJncmV5MTUiKQorICAgICgoKGNsYXNzIGNv bG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5k ICJ5ZWxsb3ciKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91 bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAib3JhbmdlIikKKyAgICAoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIpCisgICAgKCgodHlw ZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9y ZWdyb3VuZCAicGluayIpKQorICAiRmFjZSBmb3IgYGZjLWluYWN0aXZlLWZhY2UnIGluIHRoZSBp bmFjdGl2ZSB3aW5kb3cuICBVc2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQor CisoZGVmZmFjZSBmYy1vcG9pbnQtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIp KSkKKyAgIkZhY2UgZm9yIGBmYy1vcG9pbnQtZmFjZScgaW4gdGhlIGFjdGl2ZSB3aW5kb3cuICBV c2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSBmYy1vcG9p bnQtaW5hY3RpdmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIpKSkKKyAgIkZhY2Ug Zm9yIGBmYy1vcG9pbnQtaW5hY3RpdmUtZmFjZScgaW4gdGhlIGluYWN0aXZlIHdpbmRvdy4gIFVz ZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKzs7OyBlbmQgTVVMVElQTEUt Q1VSU09SUworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CisKKwogKGRlZmZhY2UgZXNjYXBlLWds eXBoCiAgICcoKCgoYmFja2dyb3VuZCBkYXJrKSkgOmZvcmVncm91bmQgImN5YW4iKQogICAgIDs7 IFNlZSB0aGUgY29tbWVudCBpbiBtaW5pYnVmZmVyLXByb21wdCBmb3IKZGlmZiAtLWdpdCBhL3Ny Yy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCBhYjQ3NzQ4Li40YWE3NDVhIDEwMDY0NAot LS0gYS9zcmMvYnVmZmVyLmMKKysrIGIvc3JjL2J1ZmZlci5jCkBAIC0xMzMsNiArMTMzLDY5IEBA IENIRUNLX09WRVJMQVkgKExpc3BfT2JqZWN0IHgpCiAKIC8qIFRoZXNlIHNldHRlcnMgYXJlIHVz ZWQgb25seSBpbiB0aGlzIGZpbGUsIHNvIHRoZXkgY2FuIGJlIHByaXZhdGUuCiAgICBUaGUgcHVi bGljIHNldHRlcnMgYXJlIGlubGluZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiBidWZmZXIuaC4gICov CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JT ICovCisKK3N0YXRpYyB2b2lkCitic2V0X21jX3JlYWxfZmFrZV9jdXJzb3IgKHN0cnVjdCBidWZm ZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+bWNfcmVhbF9mYWtlX2N1cnNvcl8gPSB2 YWw7Cit9CisKK3N0YXRpYyB2b2lkCitic2V0X21jX2NvbmYgKHN0cnVjdCBidWZmZXIgKmIsIExp c3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+bWNfY29uZl8gPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lk Citic2V0X21jX2luYWN0aXZlX3dpbmRvd3MgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0 IHZhbCkKK3sKKyAgYi0+bWNfaW5hY3RpdmVfd2luZG93c18gPSB2YWw7Cit9CisKK3N0YXRpYyB2 b2lkCitic2V0X2Nyb3NzaGFpcnMgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkK K3sKKyAgYi0+Y3Jvc3NoYWlyc18gPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitic2V0X2NoX2hv cml6b250YWxfcnVsZXIgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAg Yi0+Y2hfaG9yaXpvbnRhbF9ydWxlcl8gPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitic2V0X2No X3ZlcnRpY2FsX3J1bGVyIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7Cisg IGItPmNoX3ZlcnRpY2FsX3J1bGVyXyA9IHZhbDsKK30KKworc3RhdGljIHZvaWQKK2JzZXRfY2hf aW5hY3RpdmVfd2luZG93cyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQorewor ICBiLT5jaF9pbmFjdGl2ZV93aW5kb3dzXyA9IHZhbDsKK30KKworc3RhdGljIHZvaWQKK2JzZXRf ZmNfdmlzaWJsZSAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5m Y192aXNpYmxlXyA9IHZhbDsKK30KKworc3RhdGljIHZvaWQKK2JzZXRfZmNfaW5hY3RpdmVfd2lu ZG93cyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5mY19pbmFj dGl2ZV93aW5kb3dzXyA9IHZhbDsKK30KKworLyogZW5kIE1VTFRJUExFLUNVUlNPUlMgKi8KKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworCisKIHN0YXRpYyB2b2lkCiBic2V0X2FiYnJldl9tb2Rl IChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCiB7CkBAIC01MTQyLDYgKzUyMDUs MjQgQEAgaW5pdF9idWZmZXJfb25jZSAodm9pZCkKICAgYnNldF9sYXN0X3NlbGVjdGVkX3dpbmRv dyAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgbWFrZV9maXhudW0gKDApKTsKIAogICBpZHggPSAxOwor CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisg IFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBtY19yZWFsX2Zha2VfY3Vy c29yKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2Zs YWdzLCBtY19jb25mKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVy X2xvY2FsX2ZsYWdzLCBtY19pbmFjdGl2ZV93aW5kb3dzKSwgaWR4KTsgKytpZHg7CisgIFhTRVRG QVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBjcm9zc2hhaXJzKSwgaWR4KTsgKytp ZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBjaF9ob3Jpem9u dGFsX3J1bGVyKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xv Y2FsX2ZsYWdzLCBjaF92ZXJ0aWNhbF9ydWxlciksIGlkeCk7ICsraWR4OworICBYU0VURkFTVElO VCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgY2hfaW5hY3RpdmVfd2luZG93cyksIGlkeCk7 ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgZmNfdmlz aWJsZSksIGlkeCk7ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9m bGFncywgZmNfaW5hY3RpdmVfd2luZG93cyksIGlkeCk7ICsraWR4OworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdz LCBtb2RlX2xpbmVfZm9ybWF0KSwgaWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChCVkFSICgm YnVmZmVyX2xvY2FsX2ZsYWdzLCBhYmJyZXZfbW9kZSksIGlkeCk7ICsraWR4OwogICBYU0VURkFT VElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgb3ZlcndyaXRlX21vZGUpLCBpZHgpOyAr K2lkeDsKQEAgLTUyMjgsNiArNTMwOSwyNCBAQCBpbml0X2J1ZmZlcl9vbmNlICh2b2lkKQogICAv KiBNdXN0IGRvIHRoZXNlIGJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IGJ1ZmZlciEgKi8KIAogICAv KiByZWFsIHNldHVwIGlzIGRvbmUgaW4gYmluZGluZ3MuZWwgKi8KKworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBic2V0X21jX3JlYWxfZmFr ZV9jdXJzb3IgKCZidWZmZXJfZGVmYXVsdHMsIFFob2xsb3cpOworICBic2V0X21jX2NvbmYgKCZi dWZmZXJfZGVmYXVsdHMsIFFuaWwpOworICBic2V0X21jX2luYWN0aXZlX3dpbmRvd3MgKCZidWZm ZXJfZGVmYXVsdHMsIFF0KTsKKyAgYnNldF9jcm9zc2hhaXJzICgmYnVmZmVyX2RlZmF1bHRzLCBR bmlsKTsKKyAgYnNldF9jaF9ob3Jpem9udGFsX3J1bGVyICgmYnVmZmVyX2RlZmF1bHRzLCBRdCk7 CisgIGJzZXRfY2hfdmVydGljYWxfcnVsZXIgKCZidWZmZXJfZGVmYXVsdHMsIFF0KTsKKyAgYnNl dF9jaF9pbmFjdGl2ZV93aW5kb3dzICgmYnVmZmVyX2RlZmF1bHRzLCBRdCk7CisgIGJzZXRfZmNf dmlzaWJsZSAoJmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7CisgIGJzZXRfZmNfaW5hY3RpdmVfd2lu ZG93cyAoJmJ1ZmZlcl9kZWZhdWx0cywgUXQpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K KworCiAgIGJzZXRfbW9kZV9saW5lX2Zvcm1hdCAoJmJ1ZmZlcl9kZWZhdWx0cywgYnVpbGRfcHVy ZV9jX3N0cmluZyAoIiUtIikpOwogICBic2V0X2hlYWRlcl9saW5lX2Zvcm1hdCAoJmJ1ZmZlcl9k ZWZhdWx0cywgUW5pbCk7CiAgIGJzZXRfYWJicmV2X21vZGUgKCZidWZmZXJfZGVmYXVsdHMsIFFu aWwpOwpAQCAtNTQ1OCw2ICs1NTU3LDUxIEBAIGRlZnZhcl9wZXJfYnVmZmVyIChzdHJ1Y3QgTGlz cF9CdWZmZXJfT2JqZndkICpib19md2QsIGNvbnN0IGNoYXIgKm5hbWVzdHJpbmcsCiB2b2lkCiBz eW1zX29mX2J1ZmZlciAodm9pZCkKIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBERUZTWU0gKFFtY19yZWFsX2Zha2VfY3Vyc29yLCAi bWMtcmVhbC1mYWtlLWN1cnNvciIpOworICBERUZWQVJfUEVSX0JVRkZFUiAoIm1jLXJlYWwtZmFr ZS1jdXJzb3IiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX3JlYWxfZmFrZV9jdXJzb3IpLCBR bmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJpYWJsZSB0byBzZXQgdGhlIGN1cnNv ciB0eXBlIG9mIHRoZSByZWFsIGZha2UgY3Vyc29yLiAqLyk7CisKKyAgREVGU1lNIChRbWNfY29u ZiwgIm1jLWNvbmYiKTsKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJtYy1jb25mIiwgJkJWQVIgKGN1 cnJlbnRfYnVmZmVyLCBtY19jb25mKSwgUW5pbCwKKyAgICBkb2M6IC8qIEEgYnVmZXItbG9jYWwg dmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBtdWx0aXBsZSBjdXJzb3JzIHRvIGJl IGRpc3BsYXllZAorZHVyaW5nIHRoZSBuZXh0IHJlZGlzcGxheS4gKi8pOworCisgIERFRlNZTSAo UW1jX2luYWN0aXZlX3dpbmRvd3MsICJtYy1pbmFjdGl2ZS13aW5kb3dzIik7CisgIERFRlZBUl9Q RVJfQlVGRkVSICgibWMtaW5hY3RpdmUtd2luZG93cyIsICZCVkFSIChjdXJyZW50X2J1ZmZlciwg bWNfaW5hY3RpdmVfd2luZG93cyksIFFuaWwsCisgICAgZG9jOiAvKiBXaGVuIG5vbi1uaWwsIGRy YXcgbXVsdGlwbGUgY3Vyc29ycyBpbiBpbmFjdGl2ZSB3aW5kb3dzLiAqLyk7CisKKyAgREVGU1lN IChRY3Jvc3NoYWlycywgImNyb3NzaGFpcnMiKTsKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJjcm9z c2hhaXJzIiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBjcm9zc2hhaXJzKSwgUW5pbCwKKyAgICBk b2M6IC8qIEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gYWN0aXZhdGUvZGVhY3RpdmF0ZSBjcm9z c2hhaXJzLiAqLyk7CisKKyAgREVGU1lNIChRY2hfaG9yaXpvbnRhbF9ydWxlciwgImNoLWhvcml6 b250YWwtcnVsZXIiKTsKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJjaC1ob3Jpem9udGFsLXJ1bGVy IiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBjaF9ob3Jpem9udGFsX3J1bGVyKSwgUW5pbCwKKyAg ICBkb2M6IC8qIEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gYWN0aXZhdGUvZGVhY3RpdmF0ZSB0 aGUgY3Jvc3NoYWlycyBob3Jpem9udGFsIHJ1bGVyLiAqLyk7CisKKyAgREVGU1lNIChRY2hfdmVy dGljYWxfcnVsZXIsICJjaC12ZXJ0aWNhbC1ydWxlciIpOworICBERUZWQVJfUEVSX0JVRkZFUiAo ImNoLXZlcnRpY2FsLXJ1bGVyIiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBjaF92ZXJ0aWNhbF9y dWxlciksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFjdGl2 YXRlL2RlYWN0aXZhdGUgdGhlIGNyb3NzaGFpcnMgdmVydGljYWwgcnVsZXIuICovKTsKKworICBE RUZTWU0gKFFjaF9pbmFjdGl2ZV93aW5kb3dzLCAiY2gtaW5hY3RpdmUtd2luZG93cyIpOworICBE RUZWQVJfUEVSX0JVRkZFUiAoImNoLWluYWN0aXZlLXdpbmRvd3MiLCAmQlZBUiAoY3VycmVudF9i dWZmZXIsIGNoX2luYWN0aXZlX3dpbmRvd3MpLCBRbmlsLAorICAgIGRvYzogLyogV2hlbiBub24t bmlsLCBkcmF3IGNyb3NzaGFpcnMgaW4gaW5hY3RpdmUgd2luZG93cy4gKi8pOworCisgIERFRlNZ TSAoUWZjX3Zpc2libGUsICJmYy12aXNpYmxlIik7CisgIERFRlZBUl9QRVJfQlVGRkVSICgiZmMt dmlzaWJsZSIsICZCVkFSIChjdXJyZW50X2J1ZmZlciwgZmNfdmlzaWJsZSksIFFuaWwsCisgICAg ZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIHR1cm4gb24vb2ZmIHRoZSBtdWx0aXBs ZSBjdXJzb3JzIGZpbGwgY29sdW1uLiAqLyk7CisKKyAgREVGU1lNIChRZmNfdmlzaWJsZV9pbmFj dGl2ZV93aW5kb3csICJmYy1pbmFjdGl2ZS13aW5kb3ciKTsKKyAgREVGVkFSX1BFUl9CVUZGRVIg KCJmYy1pbmFjdGl2ZS13aW5kb3dzIiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBmY19pbmFjdGl2 ZV93aW5kb3dzKSwgUW5pbCwKKyAgICBkb2M6IC8qIFdoZW4gbm9uLW5pbCwgZHJhdyBtdWx0aXBs ZSBjdXJzb3JzIGZpbGwgY29sdW1uIGluIGluYWN0aXZlIHdpbmRvd3MuICovKTsKKworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisKKwogICBzdGF0aWNwcm8gKCZsYXN0X292ZXJsYXlfbW9kaWZp Y2F0aW9uX2hvb2tzKTsKICAgbGFzdF9vdmVybGF5X21vZGlmaWNhdGlvbl9ob29rcyA9IG1ha2Vf bmlsX3ZlY3RvciAoMTApOwogCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmggYi9zcmMvYnVmZmVy LmgKaW5kZXggZjQyYzNlOS4uMTg5ZmFjNSAxMDA2NDQKLS0tIGEvc3JjL2J1ZmZlci5oCisrKyBi L3NyYy9idWZmZXIuaApAQCAtNzM2LDYgKzczNiw0MCBAQCBzdHJ1Y3QgYnVmZmVyCiAgICAgIGlu IHRoZSBkaXNwbGF5IG9mIHRoaXMgYnVmZmVyLiAgKi8KICAgTGlzcF9PYmplY3QgZXh0cmFfbGlu ZV9zcGFjaW5nXzsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNV UlNPUlMgKi8KKworICAvKiBUaGUgY3Vyc29yIHR5cGUgb2YgdGhlIHJlYWwgZmFrZSBjdXJzb3Iu ICovCisgIExpc3BfT2JqZWN0IG1jX3JlYWxfZmFrZV9jdXJzb3JfOworCisgIC8qIFRoZSBuYW1l IG9mIGxpc3QgdXNlZCBieSBtdWx0aXBsZSBjdXJzb3JzIGZvciBuZXh0IHJlZGlzcGxheS4gKi8K KyAgTGlzcF9PYmplY3QgbWNfY29uZl87CisKKyAgLyogV2hldGhlciB0byBkcmF3IG11bHRpcGxl IGN1cnNvcnMgaW4gaW5hY3RpdmUgd2luZG93cy4gKi8KKyAgTGlzcF9PYmplY3QgbWNfaW5hY3Rp dmVfd2luZG93c187CisKKyAgLyogVGhlIG5hbWUgb2YgdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJs ZS4gKi8KKyAgTGlzcF9PYmplY3QgY3Jvc3NoYWlyc187CisKKyAgLyogVGhlIG5hbWUgb2YgdGhl IGNyb3NzaGFpcnMgaG9yaXpvbnRhbCBydWxlci4gKi8KKyAgTGlzcF9PYmplY3QgY2hfaG9yaXpv bnRhbF9ydWxlcl87CisKKyAgLyogVGhlIG5hbWUgb2YgdGhlIGNyb3NzaGFpcnMgdmVydGljYWwg cnVsZXIuICovCisgIExpc3BfT2JqZWN0IGNoX3ZlcnRpY2FsX3J1bGVyXzsKKworICAvKiBXaGV0 aGVyIHRvIGRyYXcgY3Jvc3NoYWlycyBpbiBpbmFjdGl2ZSB3aW5kb3dzLiAqLworICBMaXNwX09i amVjdCBjaF9pbmFjdGl2ZV93aW5kb3dzXzsKKworICAvKiBUaGUgbmFtZSBvZiB0aGUgYnVmZmVy LWxvY2FsIHZhcmlhYmxlLiAqLworICBMaXNwX09iamVjdCBmY192aXNpYmxlXzsKKworICAvKiBX aGV0aGVyIHRvIGRyYXcgbXVsdGlwbGUgY3Vyc29ycyBmaWxsIGNvbHVtbiBpbiBpbmFjdGl2ZSB3 aW5kb3dzLiAqLworICBMaXNwX09iamVjdCBmY19pbmFjdGl2ZV93aW5kb3dzXzsKKworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisKKwogICAvKiBDdXJzb3IgdHlwZSB0byBkaXNwbGF5IGluIG5v bi1zZWxlY3RlZCB3aW5kb3dzLgogICAgICB0IG1lYW5zIHRvIHVzZSBob2xsb3cgYm94IGN1cnNv ci4KICAgICAgU2VlIGBjdXJzb3ItdHlwZScgZm9yIG90aGVyIHZhbHVlcy4gICovCkBAIC03ODcs MTQgKzgyMSwyMSBAQCBzdHJ1Y3QgYnVmZmVyCiAgICAgIGFuIGluZGlyZWN0IGJ1ZmZlciBzaW5j ZSBpdCBjb3VudHMgYXMgaXRzIGJhc2UgYnVmZmVyLiAgKi8KICAgaW50IHdpbmRvd19jb3VudDsK IAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKwog ICAvKiBBIG5vbi16ZXJvIHZhbHVlIGluIHNsb3QgSURYIG1lYW5zIHRoYXQgcGVyLWJ1ZmZlciB2 YXJpYWJsZQogICAgICB3aXRoIGluZGV4IElEWCBoYXMgYSBsb2NhbCB2YWx1ZSBpbiB0aGlzIGJ1 ZmZlci4gIFRoZSBpbmRleCBJRFgKICAgICAgZm9yIGEgYnVmZmVyLWxvY2FsIHZhcmlhYmxlIGlz IHN0b3JlZCBpbiB0aGF0IHZhcmlhYmxlJ3Mgc2xvdAogICAgICBpbiBidWZmZXJfbG9jYWxfZmxh Z3MgYXMgYSBMaXNwIGludGVnZXIuICBJZiB0aGUgaW5kZXggaXMgLTEsCiAgICAgIHRoaXMgbWVh bnMgdGhlIHZhcmlhYmxlIGlzIGFsd2F5cyBsb2NhbCBpbiBhbGwgYnVmZmVycy4gICovCi0jZGVm aW5lIE1BWF9QRVJfQlVGRkVSX1ZBUlMgNTAKKyNkZWZpbmUgTUFYX1BFUl9CVUZGRVJfVkFSUyA2 MAogICBjaGFyIGxvY2FsX2ZsYWdzW01BWF9QRVJfQlVGRkVSX1ZBUlNdOwogCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCiAgIC8qIFNldCB0byB0aGUgbW9kdGltZSBvZiB0aGUgdmlzaXRl ZCBmaWxlIHdoZW4gcmVhZCBvciB3cml0dGVuLgogICAgICBtb2R0aW1lLnR2X25zZWMgPT0gTk9O RVhJU1RFTlRfTU9EVElNRV9OU0VDUyBtZWFucwogICAgICB2aXNpdGVkIGZpbGUgd2FzIG5vbmV4 aXN0ZW50LiAgbW9kdGltZS50dl9uc2VjID09CkBAIC05MDMsNiArOTQ0LDY5IEBAIFhCVUZGRVIg KExpc3BfT2JqZWN0IGEpCiAvKiBNb3N0IGNvZGUgc2hvdWxkIHVzZSB0aGVzZSBmdW5jdGlvbnMg dG8gc2V0IExpc3AgZmllbGRzIGluIHN0cnVjdAogICAgYnVmZmVyLiAgKFNvbWUgc2V0dGVycyB0 aGF0IGFyZSBwcml2YXRlIHRvIGEgc2luZ2xlIC5jIGZpbGUgYXJlCiAgICBkZWZpbmVkIGFzIHN0 YXRpYyBpbiB0aG9zZSBmaWxlcy4pICAqLworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor LyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCitJTkxJTkUgdm9pZAorYnNldF9ibHZfbWNf cmVhbF9mYWtlX2N1cnNvciAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQorewor ICBiLT5tY19yZWFsX2Zha2VfY3Vyc29yXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRf Ymx2X21jX2NvbmYgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+ bWNfY29uZl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9tY19pbmFjdGl2ZV93 aW5kb3dzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm1jX2lu YWN0aXZlX3dpbmRvd3NfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfY3Jvc3No YWlycyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5jcm9zc2hh aXJzXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2NoX2hvcml6b250YWxfcnVs ZXIgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+Y2hfaG9yaXpv bnRhbF9ydWxlcl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9jaF92ZXJ0aWNh bF9ydWxlciAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5jaF92 ZXJ0aWNhbF9ydWxlcl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9jaF9pbmFj dGl2ZV93aW5kb3dzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGIt PmNoX2luYWN0aXZlX3dpbmRvd3NfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZf ZmNfdmlzaWJsZSAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5m Y192aXNpYmxlXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2ZjX2luYWN0aXZl X3dpbmRvd3MgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+ZmNf aW5hY3RpdmVfd2luZG93c18gPSB2YWw7Cit9CisKKy8qIGVuZCBNVUxUSVBMRS1DVVJTT1JTICov CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiBJTkxJTkUgdm9pZAogYnNldF9iaWRpX3Bh cmFncmFwaF9kaXJlY3Rpb24gKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKIHsK ZGlmZiAtLWdpdCBhL3NyYy9kaXNwZXh0ZXJuLmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDFh NTM2NTYuLmRkZTMxMzggMTAwNjQ0Ci0tLSBhL3NyYy9kaXNwZXh0ZXJuLmgKKysrIGIvc3JjL2Rp c3BleHRlcm4uaApAQCAtMTAwLDYgKzEwMCwzNiBAQCB0eXBlZGVmIGludCBDdXJzb3I7CiAjZGVm aW5lIE5hdGl2ZVJlY3RhbmdsZSBpbnQKICNlbmRpZgogCisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCisvKiBGb3J3YXJkIHByb3RvdHlw ZSBkZWZpbml0aW9ucy4gKi8KK2VudW0gdHlwZV9vZl9jYWNoZTsKKworZW51bSB0eXBlX29mX2N1 cnNvcjsKKworZW51bSBtY19mbGF2b3I7CisKK2VudW0gdHlwZV9vZl9hY3Rpb24KK3sKKyAgTVVM VElQTEVfQ1VSU09SUywKKyAgSE9SSVpPTlRBTF9SVUxFUiwKKyAgVkVSVElDQUxfUlVMRVIsCisg IEZJTExfQ09MVU1OCit9OworCitzdHJ1Y3QgbWNfUkdCCit7CisgIGRvdWJsZSByZWQ7CisgIGRv dWJsZSBncmVlbjsKKyAgZG91YmxlIGJsdWU7Cit9OworCisvKiBlbmQgTVVMVElQTEUtQ1VSU09S UyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogVGV4dCBjdXJzb3IgdHlwZXMu ICAqLwogCiBlbnVtIHRleHRfY3Vyc29yX2tpbmRzCkBAIC0zODIsNiArNDEyLDIwIEBAIHN0cnVj dCBnbHlwaF9zbGljZQogCiBzdHJ1Y3QgZ2x5cGgKIHsKKworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBpbnQgeCwgeSwgaHBvcywgdnBvczsK KworICBpbnQgcmVsYXRpdmVfeDsKKworICBib29sX2JmIHp2X3AgOiAxOworCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCiAgIC8qIFBvc2l0aW9uIGZyb20gd2hpY2ggdGhpcyBnbHlwaCB3 YXMgZHJhd24uICBJZiBgb2JqZWN0JyBiZWxvdyBpcyBhCiAgICAgIExpc3Agc3RyaW5nLCB0aGlz IGlzIGFuIGluZGV4IGludG8gdGhhdCBzdHJpbmcuICBJZiBpdCBpcyBhCiAgICAgIGJ1ZmZlciwg dGhpcyBpcyBhIHBvc2l0aW9uIGluIHRoYXQgYnVmZmVyLiAgSW4gYWRkaXRpb24sIHNvbWUKQEAg LTEyNDgsNiArMTI5MiwyOCBAQCBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UKIAogc3RydWN0IGdseXBo X3N0cmluZwogeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VS U09SUyAqLworCisgICAgYm9vbF9iZiBsZWZ0X292ZXJ3cml0dGVuX3AgOiAxOworCisgICAgYm9v bF9iZiByaWdodF9vdmVyd3JpdHRlbl9wIDogMTsKKworICAgIGJvb2xfYmYgcmVjdGFuZ2xlX251 a2VkX3AgOiAxOworCisgICAgYm9vbF9iZiBiYWNrZ3JvdW5kX251a2VkX3AgOiAxOworCisgICAg ZW51bSBkcmF3X2dseXBoX2FjdGlvbgorICAgIHsKKyAgICAgIE1DX0RSQVdfR0xZUEgsCisgICAg ICBNQ19FUkFTRV9HTFlQSAorICAgIH0gYWN0aW9uX3R5cGU7CisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCisKICAgLyogWC1vcmlnaW4gb2YgdGhlIHN0cmluZy4gICovCiAgIGludCB4Owog CkBAIC0yMjE2LDYgKzIyODIsMTYgQEAgc3RydWN0IGNvbXBvc2l0aW9uX2l0CiAKIHN0cnVjdCBp dAogeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAq LworCisgIGJvb2xfYmYgenZfcCA6IDE7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisK ICAgLyogVGhlIHdpbmRvdyBpbiB3aGljaCB3ZSBpdGVyYXRlIG92ZXIgY3VycmVudF9idWZmZXIg KG9yIGEgc3RyaW5nKS4gICovCiAgIExpc3BfT2JqZWN0IHdpbmRvdzsKICAgc3RydWN0IHdpbmRv dyAqdzsKQEAgLTI4MTIsNiArMjg4OCwzMSBAQCB0eXBlZGVmIHZvaWQgKCpmcmFtZV9wYXJtX2hh bmRsZXIpIChzdHJ1Y3QgZnJhbWUgKiwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0KTsKIAogc3Ry dWN0IHJlZGlzcGxheV9pbnRlcmZhY2UKIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworLyogYHJlZGlzcGxheV9pbnRlcmZhY2UnIGluIGBu c3Rlcm0ubWAgXCBgdzMydGVybS5jYCBcIGB4dGVybS5jYCBtdXN0IGJlIGluIHRoZQorZXhhY3Qg c2FtZSBvcmRlciBhcyB0aGUgYHJlZGlzcGxheV9pbnRlcmZhY2UnIGluIGBkaXNwZXh0ZXJuLmhg ISAqLworCisgIHZvaWQgKCptY19zY3JpYmVfZ2x5cGhzKSAoc3RydWN0IHdpbmRvdyAqdywgc3Ry dWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAg IHN0cnVjdCBnbHlwaCAqc3RyaW5nLCBlbnVtIGdseXBoX3Jvd19hcmVhIGFyZWEsIGludCBsZW4s IGludCB2cG9zLAorICAgICAgICBpbnQgYm90dG9tX3Zwb3MsIHN0cnVjdCBtY19SR0IgbHNsLCBl bnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsCisgICAgICAgIGVudW0gdHlwZV9vZl9jdXJzb3Ig Y3Vyc29yX3R5cGUsIGludCB3ZCwgYm9vbCBhY3RpdmVfcCwgYm9vbCBjdXJzb3JfZ2NfcCk7CisK KyAgdm9pZCAoKm1jX3NjcmliZV9jdXJzb3IpIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5 cGhfbWF0cml4ICptYXRyaXgsCisgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3Jvdywg aW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsCisgICAgICAgIGludCB2cG9z LCBpbnQgd2QsIGludCBoLCBzdHJ1Y3QgbWNfUkdCIGxzbCwgZW51bSB0eXBlX29mX2N1cnNvciBj dXJzb3JfdHlwZSwKKyAgICAgICAgaW50IGN1cnNvcl93aWR0aCwgZW51bSBtY19mbGF2b3IgZ2x5 cGhfZmxhdm9yLCBib29sIG9uX3AsIGJvb2wgYWN0aXZlX3ApOworCisgIHZvaWQgKCptY19zY3Jp YmVfc3RyaW5nKSAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgc3RydWN0IGdseXBoX21hdHJpeCAq bWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgIHN0cnVjdCBtY19SR0IgbHNs LCBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsCisgICAgICAgIGVudW0gdHlwZV9vZl9jdXJz b3IgY3Vyc29yX3R5cGUsIGludCB3ZCwgYm9vbCBhY3RpdmVfcCwgYm9vbCBjdXJzb3JfZ2NfcCk7 CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgLyogSGFuZGxlcnMgZm9yIHNldHRp bmcgZnJhbWUgcGFyYW1ldGVycy4gICovCiAgIGZyYW1lX3Bhcm1faGFuZGxlciAqZnJhbWVfcGFy bV9oYW5kbGVyczsKIApAQCAtMzI3MCw2ICszMzcxLDY3IEBAIGV4dGVybiB2b2lkIGdldF9mb250 X2FzY2VudF9kZXNjZW50IChzdHJ1Y3QgZm9udCAqLCBpbnQgKiwgaW50ICopOwogCiAjaWZkZWYg SEFWRV9XSU5ET1dfU1lTVEVNCiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdp biBNVUxUSVBMRS1DVVJTT1JTICovCisKK2V4dGVybiBMaXNwX09iamVjdCBtY19saXN0biAocHRy ZGlmZl90LCBMaXNwX09iamVjdCwgLi4uKTsKKworZXh0ZXJuIExpc3BfT2JqZWN0IG1jX250aCAo aW50LCBMaXNwX09iamVjdCk7CisKK2V4dGVybiBMaXNwX09iamVjdCBtY19hc3NxIChMaXNwX09i amVjdCwgTGlzcF9PYmplY3QpOworCitleHRlcm4gdm9pZCBtY194d19jb2xvcl92YWx1ZXMgKHN0 cnVjdCB3aW5kb3cgKiwgTGlzcF9PYmplY3QsIHN0cnVjdCBtY19SR0IgKik7CisKK2V4dGVybiBi b29sIG1jX3VwZGF0ZV93aW5kb3dfZnJpbmdlcyAoc3RydWN0IHdpbmRvdyAqLCBib29sKTsKKwor ZXh0ZXJuIGNoYXIgKiBtY193aW5kb3cgKHN0cnVjdCB3aW5kb3cgKik7CisKK2V4dGVybiBjaGFy ICogbWNfY2hhcl90b19zdHJpbmcgKGludCk7CisKK2V4dGVybiBjaGFyICogbWNfY3Vyc29yX3R5 cGVfdG9fc3RyaW5nIChlbnVtIHR5cGVfb2ZfY3Vyc29yKTsKKworZXh0ZXJuIGNoYXIgKiBtY19m bGF2b3JfdG9fc3RyaW5nIChlbnVtIG1jX2ZsYXZvcik7CisKK2V4dGVybiB2b2lkIG1jX2RyYXdf ZnJpbmdlX2JpdG1hcCAoc3RydWN0IHdpbmRvdyAqLCBzdHJ1Y3QgZ2x5cGhfcm93ICosIGludCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB0eXBlX29mX2N1cnNvcik7 CisKK2V4dGVybiBpbnQgbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHN0cnVjdCB3aW5kb3cgKiwgTGlz cF9PYmplY3QsIGludCwgaW50KTsKKworZXh0ZXJuIHZvaWQgbWNfZW5naW5lIChzdHJ1Y3Qgd2lu ZG93ICosIHN0cnVjdCBnbHlwaF9tYXRyaXggKiwgc3RydWN0IGdseXBoX3JvdyAqLAorICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGggKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs IGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgZW51bSB0eXBlX29mX2N1cnNvciwgaW50LCBz dHJ1Y3QgZ2x5cGhfbWF0cml4ICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG1jX1JHQiwgYm9vbCwgZW51bSB0eXBlX29mX2FjdGlvbiwgYm9vbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgZW51bSB0eXBlX29mX2NhY2hlKTsKKworZXh0ZXJuIHZvaWQgbWNfc2V0X2Vzc2Vu dGlhbHMgKHN0cnVjdCB3aW5kb3cgKiwgYm9vbCwgc3RydWN0IG1jX1JHQiAqLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgKiwgaW50ICopOworCitleHRlcm4g dm9pZCBtY19kcmF3X3JvdyAoc3RydWN0IHdpbmRvdyAqLCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICos IHN0cnVjdCBnbHlwaF9yb3cgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5 cGggKiwgaW50LCBpbnQsIGludCwgaW50LCBib29sLCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICosCisg ICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBzdHJ1Y3QgbWNfUkdCLCBzdHJ1Y3QgbWNfUkdC LCBib29sKTsKKworZXh0ZXJuIHZvaWQgbWNfcmVkcmF3X3JvdyAoc3RydWN0IHdpbmRvdyAqLCBz dHJ1Y3QgZ2x5cGhfbWF0cml4ICosIHN0cnVjdCBnbHlwaF9yb3cgKiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGJvb2wsIGVudW0gZHJhd19nbHlwaHNfZmFjZSk7 CisKK2V4dGVybiB2b2lkIG1jX3Jlc2V0X2NhY2hlIChzdHJ1Y3Qgd2luZG93ICosIGVudW0gdHlw ZV9vZl9jYWNoZSk7CisKK2V4dGVybiB2b2lkIG1jX2VyYXNlX3ByZV9zY3JvbGxfZGlzcGxheSAo c3RydWN0IHdpbmRvdyAqKTsKKworZXh0ZXJuIHZvaWQgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHN0 cnVjdCB3aW5kb3cgKiwgc3RydWN0IGdseXBoX21hdHJpeCAqLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKiwgZW51bSBkcmF3X2dseXBoc19mYWNl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIHN0cnVj dCBtY19SR0IsIGVudW0gbWNfZmxhdm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVudW0gdHlwZV9vZl9jdXJzb3IsIGludCwgYm9vbCwgYm9vbCk7CisKK2V4dGVybiB2b2lk IG1jX3hfd3JpdGVfZ2x5cGhzIChzdHJ1Y3Qgd2luZG93ICosIHN0cnVjdCBnbHlwaF9tYXRyaXgg Kiwgc3RydWN0IGdseXBoX3JvdyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBnbHlwaCAqLCBlbnVtIGdseXBoX3Jvd19hcmVhLCBpbnQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50LCBpbnQsIHN0cnVjdCBtY19SR0IsIGVudW0gbWNfZmxhdm9yLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdHlwZV9vZl9jdXJzb3IsIGludCwg Ym9vbCwgYm9vbCk7CisKKy8qIGVuZCBNVUxUSVBMRS1DVVJTT1JTICovCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAjaWZkZWYgR0xZUEhfREVCVUcKIGV4dGVybiB2b2lkIGR1bXBfZ2x5 cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopIEVYVEVSTkFMTFlfVklTSUJMRTsKICNl bmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Rpc3BuZXcuYyBiL3NyYy9kaXNwbmV3LmMKaW5kZXggY2Ni MDhlYy4uMmJmMTZkNCAxMDA2NDQKLS0tIGEvc3JjL2Rpc3BuZXcuYworKysgYi9zcmMvZGlzcG5l dy5jCkBAIC01Niw2ICs1Niw0NjYgQEAgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNl ZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KICNpbmNsdWRlICJ3MzIuaCIK ICNlbmRpZgogDAorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVMVElQ TEUtQ1VSU09SUyAqLworCitzdHJ1Y3QgbWNfUkdCIGNoX2ZvcmVncm91bmQgPSB7LnJlZCA9IC0x LjAsIC5ncmVlbiA9IC0xLjAsIC5ibHVlID0gLTEuMH07CisKK3N0cnVjdCBtY19SR0IgZmNfZm9y ZWdyb3VuZCA9IHsucmVkID0gLTEuMCwgLmdyZWVuID0gLTEuMCwgLmJsdWUgPSAtMS4wfTsKKwor aW50IGZjX3ggPSAwOworCitzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpjdXJzb3JfbWF0cml4OworCisv KiBVcGRhdGUgdGhlIGRpc3BsYXkgb2YgdGhlIHRleHQgYXJlYSBvZiByb3cgVlBPUyBpbiB3aW5k b3cgVy4KKyAgIFZhbHVlIGlzIHRydWUgaWYgZGlzcGxheSBoYXMgY2hhbmdlZC4gICovCitzdGF0 aWMgYm9vbAorbWNfdXBkYXRlX3RleHRfYXJlYSAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGds eXBoX3JvdyAqdXBkYXRlZF9yb3csIGludCB2cG9zKQoreworICBib29sIGRlYnVnX3AgPSBmYWxz ZTsKKyAgc3RydWN0IGdseXBoX3JvdyAqY3VycmVudF9yb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJy ZW50X21hdHJpeCwgdnBvcyk7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmRlc2lyZWRfcm93ID0gTUFU UklYX1JPVyAody0+ZGVzaXJlZF9tYXRyaXgsIHZwb3MpOworICBzdHJ1Y3QgcmVkaXNwbGF5X2lu dGVyZmFjZSAqcmlmID0gRlJBTUVfUklGIChYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpKTsKKyAg c3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGJvb2wgY2hhbmdlZF9wID0g MDsKKyAgc3RydWN0IG1jX1JHQiBsc2wgPSB7LnJlZCA9IC0xLjAsIC5ncmVlbiA9IC0xLjAsIC5i bHVlID0gLTEuMH07CisgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IE5PX0ZMQVZPUjsK KyAgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSA9IE5PX0NVUlNPUjsKKyAgaW50IHdk ID0gLTE7CisgIGJvb2wgYWN0aXZlX3AgPSAodyA9PSBYV0lORE9XIChmLT5zZWxlY3RlZF93aW5k b3cpCisgICAgICAgICAgICAgICAgICAgJiYgZiA9PSBGUkFNRV9ESVNQTEFZX0lORk8gKGYpLT54 X2hpZ2hsaWdodF9mcmFtZSk7CisgIGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgc3RydWN0 IGdseXBoX21hdHJpeCAqZGVzaXJlZF9tYXRyaXggPSB3LT5kZXNpcmVkX21hdHJpeDsKKyAgc3Ry dWN0IGdseXBoX3JvdyAqYm90dG9tX3JvdyA9IE1BVFJJWF9CT1RUT01fVEVYVF9ST1cgKGRlc2ly ZWRfbWF0cml4LCB3KTsKKyAgaW50IGJvdHRvbV92cG9zID0gTUFUUklYX1JPV19WUE9TIChib3R0 b21fcm93LCBkZXNpcmVkX21hdHJpeCk7CisgIGlmIChkZWJ1Z19wCisgICAgICAmJiB2cG9zICE9 IGJvdHRvbV92cG9zKQorICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX3VwZGF0ZV90ZXh0X2FyZWEg KCVzKTogIHZwb3MgKCVkKSB8IGJvdHRvbV92cG9zICglZClcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgbWNfd2luZG93ICh3KSwgdnBvcywgYm90dG9tX3Zwb3MpOworCisgIC8qIElmIHJvd3Mg YXJlIGF0IGRpZmZlcmVudCBYIG9yIFksIG9yIHJvd3MgaGF2ZSBkaWZmZXJlbnQgaGVpZ2h0LAor ICAgICBvciB0aGUgY3VycmVudCByb3cgaXMgbWFya2VkIGludmFsaWQsIHdyaXRlIHRoZSBlbnRp cmUgbGluZS4gICovCisgIGlmICghY3VycmVudF9yb3ctPmVuYWJsZWRfcAorICAgICAgfHwgZGVz aXJlZF9yb3ctPnkgIT0gY3VycmVudF9yb3ctPnkKKyAgICAgIHx8IGRlc2lyZWRfcm93LT5hc2Nl bnQgIT0gY3VycmVudF9yb3ctPmFzY2VudAorICAgICAgfHwgZGVzaXJlZF9yb3ctPnBoeXNfYXNj ZW50ICE9IGN1cnJlbnRfcm93LT5waHlzX2FzY2VudAorICAgICAgfHwgZGVzaXJlZF9yb3ctPnBo eXNfaGVpZ2h0ICE9IGN1cnJlbnRfcm93LT5waHlzX2hlaWdodAorICAgICAgfHwgZGVzaXJlZF9y b3ctPnZpc2libGVfaGVpZ2h0ICE9IGN1cnJlbnRfcm93LT52aXNpYmxlX2hlaWdodAorICAgICAg fHwgY3VycmVudF9yb3ctPm92ZXJsYXBwZWRfcAorICAgICAgLyogVGhpcyBuZXh0IGxpbmUgaXMg bmVjZXNzYXJ5IGZvciBjb3JyZWN0bHkgcmVkcmF3aW5nCisgICBtb3VzZS1mYWNlIGFyZWFzIGFm dGVyIHNjcm9sbGluZyBhbmQgb3RoZXIgb3BlcmF0aW9ucy4KKyAgIEhvd2V2ZXIsIGl0IGNhdXNl cyBleGNlc3NpdmUgZmxpY2tlcmluZyB3aGVuIG1vdXNlIGlzIG1vdmVkCisgICBhY3Jvc3MgdGhl IG1vZGUgbGluZS4gIEx1Y2tpbHksIHR1cm5pbmcgaXQgb2ZmIGZvciB0aGUgbW9kZQorICAgbGlu ZSBkb2Vzbid0IHNlZW0gdG8gaHVydCBhbnl0aGluZy4gLS0gY3lkLgorICAgICAgICAgQnV0IGl0 IGlzIHN0aWxsIG5lZWRlZCBmb3IgdGhlIGhlYWRlciBsaW5lLiAtLSBrZnMuICAqLworICAgICAg fHwgKGN1cnJlbnRfcm93LT5tb3VzZV9mYWNlX3AKKyAgICAmJiAhKGN1cnJlbnRfcm93LT5tb2Rl X2xpbmVfcCAmJiB2cG9zID4gMCkpCisgICAgICB8fCBjdXJyZW50X3Jvdy0+eCAhPSBkZXNpcmVk X3Jvdy0+eCkKKyAgICB7CisgICAgICBvdXRwdXRfY3Vyc29yX3RvICh3LCB2cG9zLCAwLCBkZXNp cmVkX3Jvdy0+eSwgZGVzaXJlZF9yb3ctPngpOworCisgIGlmIChkZWJ1Z19wCisgICAgICAmJiB2 cG9zICE9IGJvdHRvbV92cG9zKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIldSSVRF IEVOVElSRSBST1c6XG5cCisgICAgICBjaGFyICglZC8lcykgfCBzdGFydF94OiAoJWQpIHwgc3Rh cnRfaHBvcyAoJWQpIHwgbGVuZ3RoICglZCkgfCB2cG9zICglZClcbiIsCisgICAgICBkZXNpcmVk X3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0tPnUuY2gsIG1jX2NoYXJfdG9fc3RyaW5nIChkZXNpcmVk X3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0tPnUuY2gpLAorICAgICAgZGVzaXJlZF9yb3ctPngsIDAs IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0sIHZwb3MpOworICAgIH0KKyAgICAgIGlmIChk ZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICByaWYtPm1jX3NjcmliZV9nbHlw aHMgKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgZGVzaXJlZF9yb3ctPmdseXBoc1tU RVhUX0FSRUFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFRfQVJFQSwgZGVz aXJlZF9yb3ctPnVzZWRbVEVYVF9BUkVBXSwgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib3R0b21fdnBvcywgbHNsLCBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOwor CisgICAgICAvKiBDbGVhciB0byBlbmQgb2Ygd2luZG93LiAgKi8KKyAgICAgIHJpZi0+Y2xlYXJf ZW5kX29mX2xpbmUgKHcsIHVwZGF0ZWRfcm93LCBURVhUX0FSRUEsIC0xKTsKKyAgICAgIGNoYW5n ZWRfcCA9IDE7CisKKyAgICAgIC8qIFRoaXMgZXJhc2VzIHRoZSBjdXJzb3IuICBXZSBkbyB0aGlz IGhlcmUgYmVjYXVzZQorICAgICAgICAgbm90aWNlb3ZlcndyaXR0ZW5fdGV4dF9jdXJzb3IgY2Fu bm90IGVhc2lseSBjaGVjayB0aGlzLCB3aGljaAorICAgICAgICAgbWlnaHQgaW5kaWNhdGUgdGhh dCB0aGUgd2hvbGUgZnVuY3Rpb25hbGl0eSBvZgorICAgICAgICAgbm90aWNlb3ZlcndyaXR0ZW5f dGV4dF9jdXJzb3Igd291bGQgYmV0dGVyIGJlIGltcGxlbWVudGVkIGhlcmUuCisgICAgICAgICBP biB0aGUgb3RoZXIgaGFuZCwgd2UgbmVlZCBub3RpY2VvdmVyd3JpdHRlbl90ZXh0X2N1cnNvciBh cyBsb25nCisgICAgICAgICBhcyBtb3VzZSBoaWdobGlnaHRpbmcgaXMgZG9uZSBhc3luY2hyb25v dXNseSBvdXRzaWRlIG9mCisgICAgICAgICByZWRpc3BsYXkuICAqLworICAgICAgaWYgKHZwb3Mg PT0gdy0+cGh5c19jdXJzb3IudnBvcykKKyAgICAgICAgdy0+cGh5c19jdXJzb3Jfb25fcCA9IDA7 CisKKyAgLyogVGhlIGVudGlyZSByb3cgd2FzIHJlZHJhd24gYWJvdmUsIHNvIGFsbCBmYWtlIGN1 cnNvcnMgbXVzdCBiZSByZWRyYXduLiAqLworICBtY19kcmF3X3JvdyAodywgZGVzaXJlZF9tYXRy aXgsIHVwZGF0ZWRfcm93LCBkZXNpcmVkX3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAg ICAgICAgICBkZXNpcmVkX3Jvdy0+eCwgZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9BUkVBXSwgdnBv cywgYm90dG9tX3Zwb3MsCisgICAgICAgICAgICAgICBhY3RpdmVfcCwgY3Vyc29yX21hdHJpeCwg ZmNfeCwgY2hfZm9yZWdyb3VuZCwgZmNfZm9yZWdyb3VuZCwgdHJ1ZSk7CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgaW50IHN0b3AsIGksIHg7CisgICAgICBzdHJ1Y3QgZ2x5cGggKmN1cnJl bnRfZ2x5cGggPSBjdXJyZW50X3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV07CisgICAgICBzdHJ1Y3Qg Z2x5cGggKmRlc2lyZWRfZ2x5cGggPSBkZXNpcmVkX3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV07Cisg ICAgICBib29sIG92ZXJsYXBwaW5nX2dseXBoc19wID0gY3VycmVudF9yb3ctPmNvbnRhaW5zX292 ZXJsYXBwaW5nX2dseXBoc19wOworICAgICAgaW50IGRlc2lyZWRfc3RvcF9wb3MgPSBkZXNpcmVk X3Jvdy0+dXNlZFtURVhUX0FSRUFdOworICAgICAgYm9vbCBhYm9ydF9za2lwcGluZyA9IDA7CisK KyAgICAgIC8qIElmIHRoZSBkZXNpcmVkIHJvdyBleHRlbmRzIGl0cyBmYWNlIHRvIHRoZSB0ZXh0 IGFyZWEgZW5kLCBhbmQKKyAgIHVubGVzcyB0aGUgY3VycmVudCByb3cgYWxzbyBkb2VzIHNvIGF0 IHRoZSBzYW1lIHBvc2l0aW9uLAorICAgbWFrZSBzdXJlIHdlIHdyaXRlIGF0IGxlYXN0IG9uZSBn bHlwaCwgc28gdGhhdCB0aGUgZmFjZQorICAgZXh0ZW5zaW9uIGFjdHVhbGx5IHRha2VzIHBsYWNl LiAgKi8KKyAgICAgIGlmIChNQVRSSVhfUk9XX0VYVEVORFNfRkFDRV9QIChkZXNpcmVkX3JvdykK KyAgICAmJiAoZGVzaXJlZF9zdG9wX3BvcyA8IGN1cnJlbnRfcm93LT51c2VkW1RFWFRfQVJFQV0K KyAgICAgICAgfHwgKGRlc2lyZWRfc3RvcF9wb3MgPT0gY3VycmVudF9yb3ctPnVzZWRbVEVYVF9B UkVBXQorICAgICAgJiYgIU1BVFJJWF9ST1dfRVhURU5EU19GQUNFX1AgKGN1cnJlbnRfcm93KSkp KQorICAtLWRlc2lyZWRfc3RvcF9wb3M7CisKKyAgICAgIHN0b3AgPSBtaW4gKGN1cnJlbnRfcm93 LT51c2VkW1RFWFRfQVJFQV0sIGRlc2lyZWRfc3RvcF9wb3MpOworICAgICAgaSA9IDA7CisgICAg ICB4ID0gZGVzaXJlZF9yb3ctPng7CisKKyAgaW50IGNsZWFyX3RvX3ggPSAwOworCisgICAgICAv KiBMb29wIG92ZXIgZ2x5cGhzIHRoYXQgY3VycmVudCBhbmQgZGVzaXJlZCByb3cgbWF5IGhhdmUK KyAgIGluIGNvbW1vbi4gICovCisgICAgICB3aGlsZSAoaSA8IHN0b3ApCisgIHsKKworICBMaXNw X09iamVjdCBpX3N0b3JlID0gUW5pbDsKKworICAgIGJvb2wgY2FuX3NraXBfcCA9ICFhYm9ydF9z a2lwcGluZzsKKworICAgIC8qIFNraXAgb3ZlciBnbHlwaHMgdGhhdCBib3RoIHJvd3MgaGF2ZSBp biBjb21tb24uICBUaGVzZQorICAgICAgIGRvbid0IGhhdmUgdG8gYmUgd3JpdHRlbi4gIFdlIGNh bid0IHNraXAgaWYgdGhlIGxhc3QKKyAgICAgICBjdXJyZW50IGdseXBoIG92ZXJsYXBzIHRoZSBn bHlwaCB0byBpdHMgcmlnaHQuICBGb3IKKyAgICAgICBleGFtcGxlLCBjb25zaWRlciBhIGN1cnJl bnQgcm93IG9mIGBpZiAnIHdpdGggdGhlIGBmJyBpbgorICAgICAgIENvdXJpZXIgYm9sZCBzbyB0 aGF0IGl0IG92ZXJsYXBzIHRoZSBgICcgdG8gaXRzIHJpZ2h0LgorICAgICAgIElmIHRoZSBkZXNp cmVkIHJvdyBpcyBgICcsIHdlIHdvdWxkIHNraXAgb3ZlciB0aGUgc3BhY2UKKyAgICAgICBhZnRl ciB0aGUgYGlmJyBhbmQgdGhlcmUgd291bGQgcmVtYWluIGEgcGl4ZWwgZnJvbSB0aGUKKyAgICAg ICBgZicgb24gdGhlIHNjcmVlbi4gICovCisgICAgaWYgKG92ZXJsYXBwaW5nX2dseXBoc19wICYm IGkgPiAwKQorICAgICAgeworICAgICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoID0gJmN1cnJlbnRf cm93LT5nbHlwaHNbVEVYVF9BUkVBXVtpIC0gMV07CisgICAgICAgIGludCBsZWZ0LCByaWdodDsK KworICAgICAgICByaWYtPmdldF9nbHlwaF9vdmVyaGFuZ3MgKGdseXBoLCBYRlJBTUUgKHctPmZy YW1lKSwKKyAgICAgICAgICAmbGVmdCwgJnJpZ2h0KTsKKyAgICAgICAgY2FuX3NraXBfcCA9IChy aWdodCA9PSAwICYmICFhYm9ydF9za2lwcGluZyk7CisgICAgICB9CisKKyAgICBpZiAoY2FuX3Nr aXBfcCkKKyAgICAgIHsKKyAgICAgICAgaW50IHN0YXJ0X2hwb3MgPSBpOworCisgICAgICAgIHdo aWxlIChpIDwgc3RvcAorICAgICAgICAgJiYgR0xZUEhfRVFVQUxfUCAoZGVzaXJlZF9nbHlwaCwg Y3VycmVudF9nbHlwaCkpCisgICAgeworICAgICAgaV9zdG9yZSA9IEZjb25zIChGY29ucyAobWFr ZV9maXhudW0gKHgpLCBtYWtlX2ZpeG51bSAoaSkpLCBpX3N0b3JlKTsKKyAgICAgIHggKz0gZGVz aXJlZF9nbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICArK2Rlc2lyZWRfZ2x5cGgsICsrY3VycmVu dF9nbHlwaCwgKytpOworICAgIH0KKworICBpX3N0b3JlID0gRm5yZXZlcnNlIChpX3N0b3JlKTsK KworICAgICAgICAvKiBDb25zaWRlciB0aGUgY2FzZSB0aGF0IHRoZSBjdXJyZW50IHJvdyBjb250 YWlucyAieHh4CisgICAgIHBwcCBnZ2ciIGluIGl0YWxpYyBDb3VyaWVyIGZvbnQsIGFuZCB0aGUg ZGVzaXJlZCByb3cKKyAgICAgaXMgInh4eCBnZ2ciLiAgVGhlIGNoYXJhY3RlciBgcCcgaGFzIGxi ZWFyaW5nLCBgZycKKyAgICAgaGFzIG5vdC4gIFRoZSBsb29wIGFib3ZlIHdpbGwgc3RvcCBpbiBm cm9udCBvZiB0aGUKKyAgICAgZmlyc3QgYHAnIGluIHRoZSBjdXJyZW50IHJvdy4gIElmIHdlIHdv dWxkIHN0YXJ0CisgICAgIHdyaXRpbmcgZ2x5cGhzIHRoZXJlLCB3ZSB3b3VsZG4ndCBlcmFzZSB0 aGUgbGJlYXJpbmcKKyAgICAgb2YgdGhlIGBwJy4gIFRoZSByZXN0IG9mIHRoZSBsYmVhcmluZyBw cm9ibGVtIGlzIHRoZW4KKyAgICAgdGFrZW4gY2FyZSBvZiBieSBkcmF3X2dseXBocy4gICovCisg ICAgICAgIGlmIChvdmVybGFwcGluZ19nbHlwaHNfcAorICAgICAgJiYgaSA+IDAKKyAgICAgICYm IGkgPCBjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdCisgICAgICAmJiAoY3VycmVudF9yb3ct PnVzZWRbVEVYVF9BUkVBXQorICAgICAgICAgICE9IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJF QV0pKQorICAgIHsKKyAgICAgIGludCBsZWZ0LCByaWdodDsKKworICAgICAgcmlmLT5nZXRfZ2x5 cGhfb3ZlcmhhbmdzIChjdXJyZW50X2dseXBoLAorICAgICAgICAgICAgICBYRlJBTUUgKHctPmZy YW1lKSwKKyAgICAgICAgICAgICAgJmxlZnQsICZyaWdodCk7CisgICAgICB3aGlsZSAobGVmdCA+ IDAgJiYgaSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAtLWksIC0tZGVzaXJlZF9nbHlwaCwg LS1jdXJyZW50X2dseXBoOworICAgICAgICAgIHggLT0gZGVzaXJlZF9nbHlwaC0+cGl4ZWxfd2lk dGg7CisgICAgICAgICAgbGVmdCAtPSBkZXNpcmVkX2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAg ICAgfQorCisgICAgICAvKiBBYm9ydCB0aGUgc2tpcHBpbmcgYWxnb3JpdGhtIGlmIHdlIGVuZCB1 cCBiZWZvcmUKKyAgICAgICAgIG91ciBzdGFydGluZyBwb2ludCwgdG8gYXZvaWQgbG9vcGluZyAo YnVnIzEwNzApLgorICAgICAgICAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIGxiZWFyaW5nIGlz IGxhcmdlciB0aGFuCisgICAgICAgICB0aGUgcGl4ZWwgd2lkdGguICAqLworICAgICAgYWJvcnRf c2tpcHBpbmcgPSAoaSA8IHN0YXJ0X2hwb3MpOworICAgIH0KKyAgICAgIH0KKworICAgIC8qIFRy eSB0byBhdm9pZCB3cml0aW5nIHRoZSBlbnRpcmUgcmVzdCBvZiB0aGUgZGVzaXJlZCByb3cKKyAg ICAgICBieSBsb29raW5nIGZvciBhIHJlc3luYyBwb2ludC4gIFRoaXMgbWFpbmx5IHByZXZlbnRz CisgICAgICAgbW9kZSBsaW5lIGZsaWNrZXJpbmcgaW4gdGhlIGNhc2UgdGhlIG1vZGUgbGluZSBp cyBpbgorICAgICAgIGZpeGVkLXBpdGNoIGZvbnQsIHdoaWNoIGl0IHVzdWFsbHkgd2lsbCBiZS4g ICovCisgICAgaWYgKGkgPCBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgewor ICAgICAgICBpbnQgc3RhcnRfeCA9IHgsIHN0YXJ0X2hwb3MgPSBpOworICAgICAgICBzdHJ1Y3Qg Z2x5cGggKnN0YXJ0ID0gZGVzaXJlZF9nbHlwaDsKKyAgICAgICAgaW50IGN1cnJlbnRfeCA9IHg7 CisgICAgICAgIGJvb2wgc2tpcF9maXJzdF9wID0gIWNhbl9za2lwX3A7CisKKyAgICAgICAgLyog RmluZCB0aGUgbmV4dCBnbHlwaCB0aGF0J3MgZXF1YWwgYWdhaW4uICAqLworICAgICAgICB3aGls ZSAoaSA8IHN0b3AKKyAgICAgICAgICYmIChza2lwX2ZpcnN0X3AKKyAgICAgICB8fCAhR0xZUEhf RVFVQUxfUCAoZGVzaXJlZF9nbHlwaCwgY3VycmVudF9nbHlwaCkpCisgICAgICAgICAmJiB4ID09 IGN1cnJlbnRfeCkKKyAgICB7CisgICAgICB4ICs9IGRlc2lyZWRfZ2x5cGgtPnBpeGVsX3dpZHRo OworICAgICAgY3VycmVudF94ICs9IGN1cnJlbnRfZ2x5cGgtPnBpeGVsX3dpZHRoOworICAgICAg KytkZXNpcmVkX2dseXBoLCArK2N1cnJlbnRfZ2x5cGgsICsraTsKKyAgICAgIHNraXBfZmlyc3Rf cCA9IDA7CisgICAgfQorCisgIGlmIChkZWJ1Z19wCisgICAgICAmJiB2cG9zICE9IGJvdHRvbV92 cG9zCisgICAgICAmJiAhTklMUCAoaV9zdG9yZSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qg c3RyaW5nID0gRnByaW4xX3RvX3N0cmluZyAoaV9zdG9yZSwgUW5pbCk7CisgICAgICBjaGFyICpj aGFyX3N0cmluZyA9IFNTREFUQSAoc3RyaW5nKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImlf c3RvcmU6ICB2cG9zICglZCkgfCAlc1xuIiwgdnBvcywgY2hhcl9zdHJpbmcpOworICAgIH0KKwor ICBmb3IgKDsKKyAgICAgICBDT05TUCAoaV9zdG9yZSkKKyAgICAgICAmJiB2cG9zICE9IGJvdHRv bV92cG9zOworICAgICAgIGlfc3RvcmUgPSBYQ0RSIChpX3N0b3JlKSkKKyAgICB7CisgICAgICBp bnQgeCA9IFhGSVhOVU0gKFhDQVIgKFhDQVIgKGlfc3RvcmUpKSk7CisgICAgICBpbnQgaHBvcyA9 IFhGSVhOVU0gKFhDRFIgKFhDQVIgKGlfc3RvcmUpKSk7CisgICAgICBzdHJ1Y3QgZ2x5cGggKnRh cmdldF9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRh dGVkX3JvdywgaHBvcywgdnBvcyk7CisgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiaV9zdG9yZTogIGNoYXIgKCVkLyVzKSB8IHg6ICglZCkgfCBocG9zICglZCkg fCB2cG9zICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dseXBoLT51 LmNoLCBtY19jaGFyX3RvX3N0cmluZyAodGFyZ2V0X2dseXBoLT51LmNoKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICB4LCBocG9zLCB2cG9zKTsKKyAgICAgIG1jX2RyYXdfcm93ICh3LCBkZXNp cmVkX21hdHJpeCwgdXBkYXRlZF9yb3csIHRhcmdldF9nbHlwaCwgeCwgMSwgdnBvcywKKyAgICAg ICAgICAgICAgICAgICBib3R0b21fdnBvcywgYWN0aXZlX3AsIGN1cnNvcl9tYXRyaXgsIGZjX3gs IGNoX2ZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgZmNfZm9yZWdyb3VuZCwgdHJ1ZSk7 CisgICAgfQorCisgICAgICAgIGlmIChpID09IHN0YXJ0X2hwb3MgfHwgeCAhPSBjdXJyZW50X3gp CisgICAgeworICAgICAgaSA9IHN0YXJ0X2hwb3M7CisgICAgICB4ID0gc3RhcnRfeDsKKyAgICAg IGRlc2lyZWRfZ2x5cGggPSBzdGFydDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgICAgICBv dXRwdXRfY3Vyc29yX3RvICh3LCB2cG9zLCBzdGFydF9ocG9zLCBkZXNpcmVkX3Jvdy0+eSwgc3Rh cnRfeCk7CisKKyAgLyogUmUtZHJhdyBhIHBvcnRpb24gb2YgdGhlIHJvdy4gKi8KKworICBpZiAo ZGVidWdfcAorICAgICAgJiYgdnBvcyAhPSBib3R0b21fdnBvcykKKyAgICB7CisKKyAgICAgIGZw cmludGYgKHN0ZGVyciwgIlJFRFJBVyBTRUdNRU5UOlxuXAorICAgICAgY2hhciAoJWQvJXMpIHwg c3RhcnRfeDogKCVkKSB8IHN0YXJ0X2hwb3MgKCVkKSB8IGxlbmd0aCAoJWQpIHwgdnBvcyAoJWQp XG4iLAorICAgICAgc3RhcnQtPnUuY2gsIG1jX2NoYXJfdG9fc3RyaW5nIChzdGFydC0+dS5jaCks CisgICAgICBzdGFydF94LCBzdGFydF9ocG9zLCBpIC0gc3RhcnRfaHBvcywgdnBvcyk7CisgICAg fQorCisgIHJpZi0+bWNfc2NyaWJlX2dseXBocyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRf cm93LCBzdGFydCwgVEVYVF9BUkVBLCBpIC0gc3RhcnRfaHBvcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICB2cG9zLCBib3R0b21fdnBvcywgbHNsLAorICAgICAgICAgICAgICAgICAgICAgICAg IGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOwor CisgIG1jX2RyYXdfcm93ICh3LCBkZXNpcmVkX21hdHJpeCwgdXBkYXRlZF9yb3csIHN0YXJ0LCBz dGFydF94LCBpIC0gc3RhcnRfaHBvcywKKyAgICAgICAgICAgICAgIHZwb3MsIGJvdHRvbV92cG9z LCBhY3RpdmVfcCwgY3Vyc29yX21hdHJpeCwgZmNfeCwgY2hfZm9yZWdyb3VuZCwKKyAgICAgICAg ICAgICAgIGZjX2ZvcmVncm91bmQsIHRydWUpOworCisgICAgICAgIGNoYW5nZWRfcCA9IDE7Cisg ICAgICB9CisgIH0KKworICAgICAgLyogV3JpdGUgdGhlIHJlc3QuICAqLworICAgICAgaWYgKGkg PCBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICB7CisgICAgb3V0cHV0X2N1cnNvcl90 byAodywgdnBvcywgaSwgZGVzaXJlZF9yb3ctPnksIHgpOworCisgIGlmIChkZWJ1Z19wCisgICAg ICAmJiB2cG9zICE9IGJvdHRvbV92cG9zKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwg IkRSQVcgUkVNQUlOREVSIE9GIFRIRSBST1c6XG5cCisgICAgICBjaGFyICglZC8lcykgfCB4OiAo JWQpIHwgaSAoJWQpIHwgbGVuZ3RoICglZCkgfCB2cG9zICglZClcbiIsCisgICAgICBkZXNpcmVk X2dseXBoLT51LmNoLCBtY19jaGFyX3RvX3N0cmluZyAoZGVzaXJlZF9nbHlwaC0+dS5jaCksCisg ICAgICB4LCBpLCBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdIC0gaSwgdnBvcyk7CisgICAg fQorCisgIHJpZi0+bWNfc2NyaWJlX2dseXBocyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRf cm93LCBkZXNpcmVkX2dseXBoLCBURVhUX0FSRUEsIGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJF QV0gLSBpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZwb3MsIGJvdHRvbV92cG9zLCBsc2ws CisgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2Qs IGFjdGl2ZV9wLCBjdXJzb3JfZ2NfcCk7CisKKyAgLyogRklYTUU6ICBBbHRob3VnaCB3ZSBuZWVk IHRvIHVwZGF0ZSB0aGUgY2FjaGUgYmV0d2VlbiB0aGUgZW5kIG9mIHVwZGF0ZWRfcm93CisgIGFu ZCB0aGUgcmlnaHQgd2luZG93IGVkZ2UsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZHJhdyB0aG9z ZSBmYWtlIGN1cnNvcnMuCisgIEFsdGhvdWdoIHdlIG1heSBub3QgYmUgYWJsZSB0byBzZWUgaXQg d2l0aCB0aGUgbmFrZWQgZXllLCB0aG9zZSBmYWtlIGN1cnNvcnMKKyAgYXJlIGJlaW5nIHN1cGVy aW1wb3NlZCBvbiB0aGUgZXhpc3RpbmcgZmFrZSBjdXJzb3JzIHRoYXQgZG8gbm90IGdldCBlcmFz ZWQgYnkKKyAgdGhlIGNvZGUgaW4gdGhlIHNlY3Rpb24gYmVsb3cuICBJdCB3b3VsZCBiZSBiZXR0 ZXIgdG8gb25seSB1cGRhdGUgdGhlIGNhY2hlIGFuZAorICBzdXBwcmVzcyBkb3VibGUtZHJhd2lu ZyB0aGUgZmFrZSBjdXJzb3JzIGZvciB0aGUgYWZvcmVtZW50aW9uZWQgYXJlYSBhdCBpc3N1ZS4g Ki8KKyAgbWNfZHJhd19yb3cgKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgZGVzaXJl ZF9nbHlwaCwgeCwKKyAgICAgICAgICAgICAgIGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0g LSBpLCB2cG9zLCBib3R0b21fdnBvcywgYWN0aXZlX3AsCisgICAgICAgICAgICAgICBjdXJzb3Jf bWF0cml4LCBmY194LCBjaF9mb3JlZ3JvdW5kLCBmY19mb3JlZ3JvdW5kLCB0cnVlKTsKKworICAg IGNoYW5nZWRfcCA9IDE7CisgIH0KKworICAgIC8qIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHByZXZp b3VzIGNoYW5nZSByZW1haW5lZCB0aGUgc2FtZS4gIGBpYCBhbmQgYHhgIHdlcmUKKyAgICBpbmNy ZW1lbnRlZCB0byB0aGUgZW5kIG9mIHRoZSBnbHlwaCByb3cuICBpID09IGRlc2lyZWRfcm93LT51 c2VkW1RFWFRfQVJFQV0KKyAgICBUaGUgYHctPm91dHB1dF9jdXJzb3IueC95L2hwb3MvdnBvc2Ag aXMgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgY2hhbmdlLgorICAgIFdoZW4gdGhpcyBzaXR1 YXRpb24gZXhpc3RzLCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBnbHlwaCBy b3cgYW5kCisgICAgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdyB3aWxsIF9ub3RfIGJlIGNs ZWFyZWQuICBUaGVyZWZvcmUsIGl0IGlzIG9rYXkgdG8KKyAgICBkcmF3IHRoZSBmbG9hdGluZyBn bHlwaHMgZm9yIHRoZSBob3Jpem9udGFsL3ZlcnRpY2FsIHJ1bGVycyBoZXJlLiAqLworICAgIGVs c2UgaWYgKGNoYW5nZWRfcCkKKyAgICAgIHsKKyAgICAgICAgaW50IHggPSB3LT5vdXRwdXRfY3Vy c29yLng7CisgICAgICAgIGludCBocG9zID0gKHctPm91dHB1dF9jdXJzb3IuaHBvcyA9PSB1cGRh dGVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgICAgICAgICAgID8gdXBkYXRlZF9y b3ctPnVzZWRbVEVYVF9BUkVBXSAtIDEKKyAgICAgICAgICAgICAgICAgICA6IHctPm91dHB1dF9j dXJzb3IuaHBvczsKKyAgICAgICAgc3RydWN0IGdseXBoICpzdGFydCA9IG1jX2dldF9jdXJzb3Jf Z2x5cGggKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgaHBvcywgdnBvcyk7CisgICAg ICAgIGlmICh3LT5vdXRwdXRfY3Vyc29yLnggPT0gdXBkYXRlZF9yb3ctPnBpeGVsX3dpZHRoKQor ICAgICAgICAgIHggLT0gc3RhcnQtPnBpeGVsX3dpZHRoOworICAgICAgICBpZiAoZGVidWdfcCkK KyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJDSEFOR0VEIC0gRlJPTTogIGNoYXIgKCVkLyVz KSB8IHggKCVkKSB8IGhwb3MgKCVkKSAtLSBUTyBFTkQuXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RhcnQtPnUuY2gsIG1jX2NoYXJfdG9fc3RyaW5nIChzdGFydC0+dS5jaCksIHgs IGhwb3MpOworICAgICAgICBtY19kcmF3X3JvdyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRf cm93LCBzdGFydCwgeCwKKyAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRfcm93LT51c2VkW1RF WFRfQVJFQV0gLSBocG9zLCB2cG9zLCBib3R0b21fdnBvcywKKyAgICAgICAgICAgICAgICAgICAg IGFjdGl2ZV9wLCBjdXJzb3JfbWF0cml4LCBmY194LCBjaF9mb3JlZ3JvdW5kLCBmY19mb3JlZ3Jv dW5kLAorICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICB9CisgICAgICAvKiBUaGVy ZSB3ZXJlIG5vIGNoYW5nZXMgYW5kIGkgPT0gZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9BUkVBXSAq LworICAgICAgZWxzZSBpZiAoIWNoYW5nZWRfcCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChk ZWJ1Z19wKQorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVU5DSEFOR0VEIC0tIFdSSVRF IEVOVElSRSBMSU5FLlxuIik7CisgICAgICAgICAgbWNfZHJhd19yb3cgKHcsIGRlc2lyZWRfbWF0 cml4LCB1cGRhdGVkX3JvdywgZGVzaXJlZF9yb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAg ICAgICAgICAgICAgICAgICBkZXNpcmVkX3Jvdy0+eCwgZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9B UkVBXSwgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tX3Zwb3MsIGFjdGl2ZV9w LCBjdXJzb3JfbWF0cml4LCBmY194LCBjaF9mb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICAg ICAgICBmY19mb3JlZ3JvdW5kLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAvKiBNYXliZSBj bGVhciB0byBlbmQgb2YgbGluZS4gICovCisgICAgICBpZiAoTUFUUklYX1JPV19FWFRFTkRTX0ZB Q0VfUCAoZGVzaXJlZF9yb3cpKQorICB7CisgICAgLyogSWYgbmV3IHJvdyBleHRlbmRzIHRvIHRo ZSBlbmQgb2YgdGhlIHRleHQgYXJlYSwgbm90aGluZworICAgICAgIGhhcyB0byBiZSBjbGVhcmVk LCBpZiBhbmQgb25seSBpZiB3ZSBkaWQgYSB3cml0ZV9nbHlwaHMKKyAgICAgICBhYm92ZS4gIFRo aXMgaXMgbWFkZSBzdXJlIGJ5IHNldHRpbmcgZGVzaXJlZF9zdG9wX3BvcworICAgICAgIGFwcHJv cHJpYXRlbHkgYWJvdmUuICAqLworICAgIGVhc3NlcnQgKGkgPCBkZXNpcmVkX3Jvdy0+dXNlZFtU RVhUX0FSRUFdCisgICAgICAgfHwgKChkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdCisgICAg ICA9PSBjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgICAmJiBNQVRSSVhf Uk9XX0VYVEVORFNfRkFDRV9QIChjdXJyZW50X3JvdykpKTsKKyAgfQorICAgICAgZWxzZSBpZiAo TUFUUklYX1JPV19FWFRFTkRTX0ZBQ0VfUCAoY3VycmVudF9yb3cpKQorICB7CisgICAgLyogSWYg b2xkIHJvdyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQgYXJlYSwgY2xlYXIuICAqLwor ICAgIGlmIChpID49IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0pCisgICAgICBvdXRwdXRf Y3Vyc29yX3RvICh3LCB2cG9zLCBpLCBkZXNpcmVkX3Jvdy0+eSwKKyAgICAgICAgICAgIGRlc2ly ZWRfcm93LT5waXhlbF93aWR0aCk7CisgICAgcmlmLT5jbGVhcl9lbmRfb2ZfbGluZSAodywgdXBk YXRlZF9yb3csIFRFWFRfQVJFQSwgLTEpOworCisgIGNsZWFyX3RvX3ggPSAtMTsKKworICAgIGNo YW5nZWRfcCA9IDE7CisgIH0KKyAgICAgIGVsc2UgaWYgKGRlc2lyZWRfcm93LT5waXhlbF93aWR0 aCA8IGN1cnJlbnRfcm93LT5waXhlbF93aWR0aCkKKyAgeworICAgIC8qIE90aGVyd2lzZSBjbGVh ciB0byB0aGUgZW5kIG9mIHRoZSBvbGQgcm93LiAgRXZlcnl0aGluZworICAgICAgIGFmdGVyIHRo YXQgcG9zaXRpb24gc2hvdWxkIGJlIGNsZWFyIGFscmVhZHkuICAqLworICAgIGludCB4bGltOwor CisgICAgaWYgKGkgPj0gZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICAgIG91dHB1 dF9jdXJzb3JfdG8gKHcsIHZwb3MsIGksIGRlc2lyZWRfcm93LT55LAorICAgICAgICAgICAgZGVz aXJlZF9yb3ctPnBpeGVsX3dpZHRoKTsKKworICAgIC8qIElmIGN1cnNvciBpcyBkaXNwbGF5ZWQg YXQgdGhlIGVuZCBvZiB0aGUgbGluZSwgbWFrZSBzdXJlCisgICAgICAgaXQncyBjbGVhcmVkLiAg Tm93YWRheXMgd2UgZG9uJ3QgaGF2ZSBhIHBoeXNfY3Vyc29yX2dseXBoCisgICAgICAgd2l0aCB3 aGljaCB0byBlcmFzZSB0aGUgY3Vyc29yIChiZWNhdXNlIHRoaXMgbWV0aG9kCisgICAgICAgZG9l c24ndCB3b3JrIHdpdGggbGJlYXJpbmcvcmJlYXJpbmcpLCBzbyB3ZSBtdXN0IGRvIGl0CisgICAg ICAgdGhpcyB3YXkuICAqLworICAgIGlmICh2cG9zID09IHctPnBoeXNfY3Vyc29yLnZwb3MKKyAg ICAgICAgJiYgKGRlc2lyZWRfcm93LT5yZXZlcnNlZF9wCisgICAgICA/ICh3LT5waHlzX2N1cnNv ci5ocG9zIDwgMCkKKyAgICAgIDogKHctPnBoeXNfY3Vyc29yLmhwb3MgPj0gZGVzaXJlZF9yb3ct PnVzZWRbVEVYVF9BUkVBXSkpKQorICAgICAgeworICAgICAgICB3LT5waHlzX2N1cnNvcl9vbl9w ID0gMDsKKyAgICAgICAgeGxpbSA9IC0xOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHhsaW0g PSBjdXJyZW50X3Jvdy0+cGl4ZWxfd2lkdGg7CisgICAgcmlmLT5jbGVhcl9lbmRfb2ZfbGluZSAo dywgdXBkYXRlZF9yb3csIFRFWFRfQVJFQSwgeGxpbSk7CisKKyAgY2xlYXJfdG9feCA9IHhsaW07 CisKKyAgICBjaGFuZ2VkX3AgPSAxOworICB9CisKKyAgaWYgKGNoYW5nZWRfcAorICAgICAgJiYg Y2xlYXJfdG9feCAhPSAwKQorICAgIHsKKyAgICAgIGludCB0ZXh0X2FyZWFfd2lkdGggPSB3aW5k b3dfYm94X3dpZHRoICh3LCBURVhUX0FSRUEpOworICAgICAgc3RydWN0IG1jX1JHQiBkZWJ1Z19m ZyA9IHsucmVkID0gMC44NjcsIC5ncmVlbiA9IDAuODY3LCAuYmx1ZSA9IDAuODY3fTsKKyAgICAg IHN0cnVjdCBnbHlwaCAqdGFyZ2V0X2dseXBoID0gdXBkYXRlZF9yb3ctPmdseXBoc1tURVhUX0FS RUFdICsgdXBkYXRlZF9yb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDE7CisgICAgICAvKiBgbWNfZW5n aW5lJyBvbmx5IGRyYXdzIGFuIE1DX0dMWVBIIHdoZW4geCA8IHVwZGF0ZWRfcm93LT5waXhlbF93 aWR0aC4KKyAgICAgIFRoZSBjdXJyZW50IGRlc2lnbiBpbmhpYml0cyBkcmF3aW5nIG92ZXIgYW4g ZXhpc3RpbmcgZ2x5cGggYXQgdGhlIGVuZCBvZiBhCisgICAgICB3b3JkLXdyYXBwZWQgbGluZS4g IFNhaWQgZ2x5cGggcmVjZWl2ZXMgYSBmYWtlIGN1cnNvciBpbiBlaXRoZXIgb25lIG9mIHRoZQor ICAgICAgcHJldmlvdXMgc2VjdGlvbnMgYWJvdmUsIGFuZCBzaG91bGQgbm90IGJlIG92ZXJ3cml0 dGVuIHdpdGggYW5vdGhlciBvbmUuCisgICAgICBUaGlzIGRlc2lnbiBpcyBuZWVkZWQgYmVjYXVz ZSBhIHdvcmQtd3JhcHBlZCBsaW5lIGRvZXMgbm90IHJlY2VpdmUgYW4gZXh0cmEKKyAgICAgIHNw YWNlIGxpa2Ugbm9uLXdvcmQtd3JhcHBlZCBsaW5lcyBkby4gKi8KKyAgICAgIGludCB4ID0gdXBk YXRlZF9yb3ctPnBpeGVsX3dpZHRoOworICAgICAgaW50IGhwb3MgPSB1cGRhdGVkX3Jvdy0+dXNl ZFtURVhUX0FSRUFdIC0gMTsKKyAgICAgIGludCB4X2xpbWl0ID0gKGNsZWFyX3RvX3ggPT0gLTEp CisgICAgICAgICAgICAgICAgICAgID8gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAg ICAgIDogY2xlYXJfdG9feDsKKyAgICAgIGlmICh0cmFjZV9yZWRpc3BsYXlfcCkKKyAgICAgICAg ZnByaW50ZiAoc3RkZXJyLCAibWNfdXBkYXRlX3RleHRfYXJlYSAoZmxvYXRpbmcpOiAgdnBvcyAo JWQpIHwgeF9saW1pdCAoJWQpXG4iLCB2cG9zLCB4X2xpbWl0KTsKKworICAgICAgaWYgKEJVRkZF UlAgKHctPmNvbnRlbnRzKQorICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVS ICh3LT5jb250ZW50cyksIGNoX2hvcml6b250YWxfcnVsZXIpKQorICAgICAgICAgICYmIHggPCB0 ZXh0X2FyZWFfd2lkdGgKKyAgICAgICAgICAmJiB2cG9zID09IHctPmN1cnNvci52cG9zCisgICAg ICAgICAgJiYgdGFyZ2V0X2dseXBoICE9IE5VTEwpCisgICAgICAgIG1jX2VuZ2luZSAodywgZGVz aXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCB0YXJnZXRfZ2x5cGgsIFRFWFRfQVJFQSwgeCwgeF9s aW1pdCwKKyAgICAgICAgICAgICAgICAgICB1cGRhdGVkX3Jvdy0+eSwgaHBvcywgdnBvcywgTUNf SEJBUiwgMSwgY3Vyc29yX21hdHJpeCwgZmNfeCwKKyAgICAgICAgICAgICAgICAgICBkZWJ1Z19w ID8gZGVidWdfZmcgOiBjaF9mb3JlZ3JvdW5kLCBhY3RpdmVfcCwgSE9SSVpPTlRBTF9SVUxFUiwK KyAgICAgICAgICAgICAgICAgICB0cnVlLCBOT19DQUNIRSk7CisKKyAgICAgIGlmIChCVUZGRVJQ ICh3LT5jb250ZW50cykKKyAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAgJiYgeCA8IHRleHRf YXJlYV93aWR0aAorICAgICAgICAgICYmIHZwb3MgIT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICAg ICAmJiB3LT5jdXJzb3IueCA+PSB4CisgICAgICAgICAgJiYgdGFyZ2V0X2dseXBoICE9IE5VTEwp CisgICAgICAgIG1jX2VuZ2luZSAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCB0YXJn ZXRfZ2x5cGgsIFRFWFRfQVJFQSwgeCwgeF9saW1pdCwKKyAgICAgICAgICAgICAgICAgICB1cGRh dGVkX3Jvdy0+eSwgaHBvcywgdnBvcywgTUNfQkFSLCAxLCBjdXJzb3JfbWF0cml4LCBmY194LAor ICAgICAgICAgICAgICAgICAgIGRlYnVnX3AgPyBkZWJ1Z19mZyA6IGNoX2ZvcmVncm91bmQsIGFj dGl2ZV9wLCBWRVJUSUNBTF9SVUxFUiwKKyAgICAgICAgICAgICAgICAgICB0cnVlLCBOT19DQUNI RSk7CisKKyAgICAgIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAmJiAhTklM UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY192aXNpYmxlKSkKKyAgICAgICAgICAm JiB4IDwgdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgJiYgZmNfeCA+PSB4CisgICAgICAgICAg JiYgdGFyZ2V0X2dseXBoICE9IE5VTEwpCisgICAgICAgIG1jX2VuZ2luZSAodywgZGVzaXJlZF9t YXRyaXgsIHVwZGF0ZWRfcm93LCB0YXJnZXRfZ2x5cGgsIFRFWFRfQVJFQSwgeCwgeF9saW1pdCwK KyAgICAgICAgICAgICAgICAgICB1cGRhdGVkX3Jvdy0+eSwgaHBvcywgdnBvcywgTUNfQkFSLCAx LCBjdXJzb3JfbWF0cml4LCBmY194LAorICAgICAgICAgICAgICAgICAgIGRlYnVnX3AgPyBkZWJ1 Z19mZyA6IGZjX2ZvcmVncm91bmQsIGFjdGl2ZV9wLCBGSUxMX0NPTFVNTiwKKyAgICAgICAgICAg ICAgICAgICB0cnVlLCBOT19DQUNIRSk7CisKKyAgICB9CisgICAgfQorCisgIHJldHVybiBjaGFu Z2VkX3A7Cit9CisKKy8qIGVuZCBNVUxUSVBMRS1DVVJTT1JTICovCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKworCiAvKiBTdHJ1Y3R1cmUgdG8gcGFzcyBkaW1lbnNpb25zIGFyb3VuZC4gIFVz ZWQgZm9yIGNoYXJhY3RlciBib3VuZGluZwogICAgYm94ZXMsIGdseXBoIG1hdHJpeCBkaW1lbnNp b25zIGFuZCBhbGlrZS4gICovCiAKQEAgLTMyODIsMTAgKzM3NDIsMzYgQEAgcmVkcmF3X292ZXJs YXBwZWRfcm93cyAoc3RydWN0IHdpbmRvdyAqdywgaW50IHliKQogCSAgICB7CiAJICAgICAgb3V0 cHV0X2N1cnNvcl90byAodywgaSwgMCwgcm93LT55LAogCQkJCWFyZWEgPT0gVEVYVF9BUkVBID8g cm93LT54IDogMCk7Ci0JICAgICAgaWYgKHJvdy0+dXNlZFthcmVhXSkKKworCisKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGlmICgody0+bWNf ZWx0cy51c2VkID4gMCB8fCB3LT5jaF9lbHRzLnVzZWQgPiAwIHx8IHctPmZjX2VsdHMudXNlZCA+ IDApCisgICAgICAmJiBhcmVhID09IFRFWFRfQVJFQQorICAgICAgJiYgcm93LT51c2VkW2FyZWFd KQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1cnJlbnRf bWF0cml4OworICAgICAgaW50IHN0YXJ0X3ggPSByb3ctPng7CisgICAgICBpbnQgc3RhcnRfaHBv cyA9IDA7CisgICAgICBpbnQgZW5kX2hwb3MgPSByb3ctPnVzZWRbYXJlYV07CisgICAgICBib29s IGNsZWFyX2VvbF9wID0gdHJ1ZTsKKyAgICAgIGVudW0gZHJhd19nbHlwaHNfZmFjZSBobCA9IERS QVdfTk9STUFMX1RFWFQ7CisgICAgICBUUkFDRSAoKHN0ZGVyciwgInJlZHJhd19vdmVybGFwcGVk X3Jvd3MgKCVkKTogIHN0YXJ0X3ggKCVkKSB8IHN0YXJ0X2hwb3MgKCVkKSB8IGVuZF9ocG9zICgl ZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgaSwgc3RhcnRfeCwgc3RhcnRfaHBvcywgZW5k X2hwb3MpKTsKKyAgICAgIG1jX3JlZHJhd19yb3cgKHcsIG1hdHJpeCwgcm93LCBzdGFydF94LCBz dGFydF9ocG9zLCBlbmRfaHBvcywgY2xlYXJfZW9sX3AsIGhsKTsKKyAgICB9CisgICAgZWxzZSBp ZiAocm93LT51c2VkW2FyZWFdKQorICAgICAgewogCQlGUkFNRV9SSUYgKGYpLT53cml0ZV9nbHlw aHMgKHcsIHJvdywgcm93LT5nbHlwaHNbYXJlYV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcmVhLCByb3ctPnVzZWRbYXJlYV0pOwogCSAgICAgIEZSQU1F X1JJRiAoZiktPmNsZWFyX2VuZF9vZl9saW5lICh3LCByb3csIGFyZWEsIC0xKTsKKyAgICAgIH0K KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCSAgICB9CiAKIAkgIHJvdy0+b3Zlcmxh cHBlZF9wID0gMDsKQEAgLTMzODgsNiArMzg3NCwyOCBAQCBzdGF0aWMgYm9vbAogdXBkYXRlX3dp bmRvdyAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBmb3JjZV9wKQogewogICBzdHJ1Y3QgZ2x5cGhf bWF0cml4ICpkZXNpcmVkX21hdHJpeCA9IHctPmRlc2lyZWRfbWF0cml4OworCisKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGlmICh0 cmFjZV9yZWRpc3BsYXlfcCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJ1cGRhdGVfd2luZG93ICgl cylcbiIsIG1jX3dpbmRvdyAodykpOworCisgIGN1cnNvcl9tYXRyaXggPSBOVUxMOworCisgIHN0 cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBib29sIGFjdGl2ZV9wID0gKHcg PT0gWFdJTkRPVyAoZi0+c2VsZWN0ZWRfd2luZG93KQorICAgICAgICAgICAgICAgICAgICYmIGYg PT0gRlJBTUVfRElTUExBWV9JTkZPIChmKS0+eF9oaWdobGlnaHRfZnJhbWUpOworCisgIG1jX3Nl dF9lc3NlbnRpYWxzICh3LCBhY3RpdmVfcCwgJmNoX2ZvcmVncm91bmQsICZmY19mb3JlZ3JvdW5k LCAmZmNfeCk7CisKKyAgbWNfZXJhc2VfcHJlX3Njcm9sbF9kaXNwbGF5ICh3KTsKKworLyogZW5k IE1VTFRJUExFLUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgYm9v bCBwYXVzZWRfcDsKICAgaW50IHByZWVtcHRfY291bnQgPSBjbGlwX3RvX2JvdW5kcyAoMSwgYmF1 ZF9yYXRlIC8gMjQwMCArIDEsIElOVF9NQVgpOwogICBzdHJ1Y3QgcmVkaXNwbGF5X2ludGVyZmFj ZSAqcmlmID0gRlJBTUVfUklGIChYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpKTsKQEAgLTM0NjAs NiArMzk2OCw0MSBAQCB1cGRhdGVfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGZvcmNl X3ApCiAJICAgIH0KIAl9CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBM RS1DVVJTT1JTICovCisKKyAgLyogUHJvY2VzcyB0aGUgY3Vyc29yIHJvdyBhdCB0aGUgb3V0c2V0 IGlmIGl0IGlzIHdpdGhpbiBgZGVzaXJlZF9tYXRyaXhgLgorICBXaGVuIHByb2Nlc3NpbmcgYWxs IG90aGVyIHJvd3MsIHdlIHdpbGwgcXVlcnkgdGhlIGB3LT5jdXJyZW50X21hdHJpeGAgZm9yIGRh dGEKKyAgcmVsYXRpbmcgdG8gdGhlIGN1cnNvciByb3cuICBgbWFrZV9jdXJyZW50YCAod2l0aGlu IGB1cGRhdGVfd2luZG93X2xpbmUnKQorICB1cGRhdGVzIHRoZSBgdy0+Y3VycmVudF9tYXRyaXhg IGZvciB0aGUgYXBwbGljYWJsZSByb3cuICBJbiBkb2luZyBzbywgaG93ZXZlciwKKyAgdGhlIGFw cGxpY2FibGUgcm93IGluIHRoZSBkZXNpcmVkIG1hdHJpeCBpcyBhbHRlcmVkIHN1Y2ggdGhhdCB3 ZSBjYW4gbm8gbG9uZ2VyCisgIHJlbHkgdXBvbiB0aGUgYWNjdXJhY3kgb2YgYFJPVy0+dXNlZFtU RVhUX0FSRUFdYC4gIFRoZXJlZm9yZSwgd2UgbXVzdCBub3cgcmVseQorICBleGNsdXNpdmVseSB1 cG9uIGB3LT5jdXJyZW50X21hdHJpeCcgZm9yIGN1cnNvciByb3cgYmFzZWQgZGVjaXNpb25zLiAq LworICBmb3IgKHN0cnVjdCBnbHlwaF9yb3cgKm1jX3JvdyA9IHJvdzsKKyAgICAgICBtY19yb3cg PCBlbmQgJiYgKGZvcmNlX3AgfHwgIWlucHV0X3BlbmRpbmcpOworICAgICAgICsrbWNfcm93KQor ICAgIHsKKyAgICAgIGludCB2cG9zID0gTUFUUklYX1JPV19WUE9TIChtY19yb3csIGRlc2lyZWRf bWF0cml4KTsKKyAgICAgIGlmIChtY19yb3ctPmVuYWJsZWRfcAorICAgICAgICAgICYmIHZwb3Mg PT0gdy0+Y3Vyc29yLnZwb3MpCisgICAgICAgIHsKKyAgICAgICAgICBjdXJzb3JfbWF0cml4ID0g ZGVzaXJlZF9tYXRyaXg7CisgICAgICAgICAgaWYgKCFmb3JjZV9wICYmICsrbl91cGRhdGVkICUg cHJlZW1wdF9jb3VudCA9PSAwKQorICAgICAgICAgICAgZGV0ZWN0X2lucHV0X3BlbmRpbmdfaWdu b3JlX3NxdWVlemFibGVzICgpOworICAgICAgICAgIGNoYW5nZWRfcCB8PSB1cGRhdGVfd2luZG93 X2xpbmUgKHcsIHZwb3MsICZtb3VzZV9mYWNlX292ZXJ3cml0dGVuX3ApOworICAgICAgICAgIGlm IChNQVRSSVhfUk9XX0JPVFRPTV9ZIChyb3cpID49IHliKQorICAgICAgICAgICAgZm9yIChpbnQg aSA9IHZwb3MgKyAxOyBpIDwgdy0+Y3VycmVudF9tYXRyaXgtPm5yb3dzIC0gMTsgKytpKQorICAg ICAgICAgICAgICBTRVRfTUFUUklYX1JPV19FTkFCTEVEX1AgKHctPmN1cnJlbnRfbWF0cml4LCBp LCBmYWxzZSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgY3Vyc29y X21hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4OworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K KworCiAgICAgICAvKiBVcGRhdGUgdGhlIHJlc3Qgb2YgdGhlIGxpbmVzLiAgKi8KICAgICAgIGZv ciAoOyByb3cgPCBlbmQgJiYgKGZvcmNlX3AgfHwgIWlucHV0X3BlbmRpbmcpOyArK3JvdykKIAkv KiBzY3JvbGxpbmdfd2luZG93IHJlc2V0cyB0aGUgZW5hYmxlZF9wIGZsYWcgb2YgdGhlIHJvd3Mg aXQKQEAgLTM0NjcsNiArNDAxMCwxOSBAQCB1cGRhdGVfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3 LCBib29sIGZvcmNlX3ApCiAJaWYgKHJvdy0+ZW5hYmxlZF9wKQogCSAgewogCSAgICBpbnQgdnBv cyA9IE1BVFJJWF9ST1dfVlBPUyAocm93LCBkZXNpcmVkX21hdHJpeCk7CisKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgLyogSWYgdGhlIGBj dXJzb3Jfcm93YCBpcyB3aXRoaW4gdGhlIGBkZXNpcmVkX21hdHJpeGAsIHRoZW4gaXQgd2FzIHBy b2NlZWQKKyAgaGVyZWluYWJvdmUgYW5kIHNob3VsZCBiZSBza2lwcGVkIGF0IHRoaXMgdGltZS4g Ki8KKyAgaWYgKHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MpCisgICAgY29udGludWU7CisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgaW50IGk7CiAKIAkgICAgLyogV2UnbGwgaGF2 ZSB0byBwbGF5IGEgbGl0dGxlIGJpdCB3aXRoIHdoZW4gdG8KQEAgLTM0OTcsNiArNDA1Myw0MyBA QCB1cGRhdGVfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGZvcmNlX3ApCiAKICAgICBz ZXRfY3Vyc29yOgogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VS U09SUyAqLworCisgIC8qIElmIHdlIGp1bXBlZCBoZXJlIGZyb20gYHNldF9jdXJzb3JgLCB0aGVu IHNldCB0aGUgYGN1cnNvcl9tYXRyaXhgLiAqLworICBpZiAoY3Vyc29yX21hdHJpeCA9PSBOVUxM KQorICAgIGN1cnNvcl9tYXRyaXggPSB3LT5jdXJyZW50X21hdHJpeDsKKworICAvKiBSZXNldCBg cm93YCB0byAwIHNvIHRoYXQgZmFrZSBjdXJzb3JzIGNhbiBiZSBkcmF3biBvbiByb3dzIHByZWNl ZGluZyB0aGUKKyAgZmlyc3QgYHJvdy0+ZW5hYmxlZF9wYC4gIEp1c3QgcHJpb3IgdG8gdGhlIGNh bGwgdG8gYHNjcm9sbGluZ193aW5kb3cnIGFib3ZlLAorICBgcm93YCB3YXMgYWR2YW5jZWQgdG8g dGhlIGZpcnN0IGByb3ctPmVuYWJsZWRfcGAuICovCisgIGZvciAoc3RydWN0IGdseXBoX3JvdyAq ZGVzaXJlZF9yb3cgPSBNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwgMCk7CisgICAgICAgZGVz aXJlZF9yb3cgPCBlbmQKKyAgICAgICAmJiAoZm9yY2VfcCB8fCAhaW5wdXRfcGVuZGluZykKKyAg ICAgICAvKiBOVCBFbWFjcyBjcmFzaGVzIG9uIHN0YXJ0dXAgd2l0aG91dCBhIEJVRkZFUlAgY2hl Y2suICovCisgICAgICAgJiYgQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgJiYgKCFOSUxQ IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2NvbmYpKQorICAgICAgICAgICB8fCAh TklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAg ICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpKTsK KyAgICAgICArK2Rlc2lyZWRfcm93KQorICAgeworICAgICBpbnQgdnBvcyA9IE1BVFJJWF9ST1df VlBPUyAoZGVzaXJlZF9yb3csIGRlc2lyZWRfbWF0cml4KTsKKyAgICAgaWYgKGRlc2lyZWRfcm93 LT5lbmFibGVkX3ApCisgICAgICAgY29udGludWU7CisgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmJv dHRvbV9yb3cgPSBNQVRSSVhfQk9UVE9NX1RFWFRfUk9XICh3LT5jdXJyZW50X21hdHJpeCwgdyk7 CisgICAgIGludCBib3R0b21fdnBvcyA9IE1BVFJJWF9ST1dfVlBPUyAoYm90dG9tX3Jvdywgdy0+ Y3VycmVudF9tYXRyaXgpOworICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpjdXJyZW50X3JvdyA9IE1B VFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAgICAgaWYgKGN1cnJlbnRfcm93 LT5lbmFibGVkX3ApCisgICAgICAgbWNfZHJhd19yb3cgKHcsIHctPmN1cnJlbnRfbWF0cml4LCBj dXJyZW50X3JvdywgY3VycmVudF9yb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAgICAg ICAgICAgICBjdXJyZW50X3Jvdy0+eCwgY3VycmVudF9yb3ctPnVzZWRbVEVYVF9BUkVBXSwgdnBv cywKKyAgICAgICAgICAgICAgICAgICAgYm90dG9tX3Zwb3MsIGFjdGl2ZV9wLCBjdXJzb3JfbWF0 cml4LCBmY194LCBjaF9mb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgICBmY19mb3JlZ3Jv dW5kLCB0cnVlKTsKKyAgIH0KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAg LyogVXBkYXRlIHRoZSBoZWFkZXIgbGluZSBhZnRlciBzY3JvbGxpbmcgYmVjYXVzZSBhIG5ldyBo ZWFkZXIKIAkgbGluZSB3b3VsZCBvdGhlcndpc2Ugb3ZlcndyaXRlIGxpbmVzIGF0IHRoZSB0b3Ag b2YgdGhlIHdpbmRvdwogCSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4gICovCkBAIC0zNTMxLDEwICs0 MTI0LDIxIEBAIHVwZGF0ZV93aW5kb3cgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZm9yY2VfcCkK ICAgICAgIHN0cmNweSAody0+Y3VycmVudF9tYXRyaXgtPm1ldGhvZCwgdy0+ZGVzaXJlZF9tYXRy aXgtPm1ldGhvZCk7CiAjZW5kaWYKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1V TFRJUExFLUNVUlNPUlMgKi8KKwogI2lmZGVmIEhBVkVfV0lORE9XX1NZU1RFTQorICBpZiAoQlVG RkVSUCAody0+Y29udGVudHMpCisgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBjcm9zc2hhaXJzKSkpCisgICAgbWNfdXBkYXRlX3dpbmRvd19mcmluZ2VzICh3LCAw KTsKKyAgICBlbHNlCiAgICAgICB1cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIDApOwogI2VuZGlm CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIC8qIEVuZCB0aGUgdXBkYXRl IG9mIHdpbmRvdyBXLiAgRG9uJ3Qgc2V0IHRoZSBjdXJzb3IgaWYgd2UKICAgICAgICAgIHBhdXNl ZCB1cGRhdGluZyB0aGUgZGlzcGxheSBiZWNhdXNlIGluIHRoaXMgY2FzZSwKICAgICAgICAgIHNl dF93aW5kb3dfY3Vyc29yX2FmdGVyX3VwZGF0ZSBoYXNuJ3QgYmVlbiBjYWxsZWQsIGFuZApAQCAt Mzg1MiwxNCArNDQ1NiwyOCBAQCB1cGRhdGVfd2luZG93X2xpbmUgKHN0cnVjdCB3aW5kb3cgKncs IGludCB2cG9zLCBib29sICptb3VzZV9mYWNlX292ZXJ3cml0dGVuX3ApCiAJICBjdXJyZW50X3Jv dy0+cmVkcmF3X2ZyaW5nZV9iaXRtYXBzX3AgPSAxOwogCX0KIAorCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBib29sIHVwZGF0ZWRfcCA9IChC VUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFOSUxQIChCVkFS IChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICAgICAg ICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisg ICAgICAgICAgICAgICAgICAgICAgICB8fCAhIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgZmNfdmlzaWJsZSkpKSkKKyAgICAgICAgICAgICAgICAgICA/IG1jX3VwZGF0ZV90ZXh0 X2FyZWEgKHcsIGRlc2lyZWRfcm93LCB2cG9zKQorICAgICAgICAgICAgICAgICAgIDogdXBkYXRl X3RleHRfYXJlYSAodywgZGVzaXJlZF9yb3csIHZwb3MpOworCiAgICAgICAvKiBVcGRhdGUgdGhl IGRpc3BsYXkgb2YgdGhlIHRleHQgYXJlYS4gICovCi0gICAgICBpZiAodXBkYXRlX3RleHRfYXJl YSAodywgZGVzaXJlZF9yb3csIHZwb3MpKQorICAgICAgaWYgKHVwZGF0ZWRfcCkKIAl7CiAJICBj aGFuZ2VkX3AgPSAxOwogCSAgaWYgKGN1cnJlbnRfcm93LT5tb3VzZV9mYWNlX3ApCiAJICAgICpt b3VzZV9mYWNlX292ZXJ3cml0dGVuX3AgPSAxOwogCX0KIAorLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisKKwogICAgICAgLyogVXBkYXRlIGRpc3BsYXkgb2YgdGhlIHJpZ2h0IG1hcmdpbiBhcmVh LCBpZiB0aGVyZSBpcyBvbmUuICAqLwogICAgICAgaWYgKCFkZXNpcmVkX3Jvdy0+ZnVsbF93aWR0 aF9wICYmIHctPnJpZ2h0X21hcmdpbl9jb2xzID4gMCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvZnJh bWUuaCBiL3NyYy9mcmFtZS5oCmluZGV4IGVjOGY2MTQuLmVlYWY3MWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9mcmFtZS5oCisrKyBiL3NyYy9mcmFtZS5oCkBAIC0yMDUsNiArMjA1LDE2IEBAIHN0cnVjdCBm cmFtZQogICBMaXNwX09iamVjdCB0b29sX2Jhcl9pdGVtczsKICAgLyogdG9vbF9iYXJfaXRlbXMg c2hvdWxkIGJlIHRoZSBsYXN0IExpc3BfT2JqZWN0IG1lbWJlci4gICovCiAKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgLyogTm9uLW5pbCB3 aGVuIHRoZSBmcmFtZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1cGRhdGVkLiAqLworICBz dHJ1Y3QgZnJhbWUgKm1jX3VwZGF0aW5nX2ZyYW1lOworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKworCiAgIC8qIENhY2hlIG9mIHJlYWxpemVkIGZhY2VzLiAgKi8KICAgc3RydWN0IGZhY2Vf Y2FjaGUgKmZhY2VfY2FjaGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9mcmluZ2UuYyBiL3NyYy9mcmlu Z2UuYwppbmRleCAzMzVhNmViLi4wZGJlYTVmIDEwMDY0NAotLS0gYS9zcmMvZnJpbmdlLmMKKysr IGIvc3JjL2ZyaW5nZS5jCkBAIC00MzgsNiArNDM4LDQ2MCBAQCBzdGF0aWMgdW5zaWduZWQgc2hv cnQgZW1wdHlfbGluZV9iaXRzW10gPSB7CiAjZGVmaW5lIFNUQU5EQVJEX0JJVE1BUF9IRUlHSFQo Yml0cykgKHNpemVvZiAoYml0cykvQllURVNfUEVSX0JJVE1BUF9ST1cpCiAjZGVmaW5lIEZSQklU UyhiaXRzKSAgYml0cywgU1RBTkRBUkRfQklUTUFQX0hFSUdIVCAoYml0cykKIAorCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8KKworLyogYCst ZnJpbmdlLWhlbHBlci1kZWNpbWFsJyBkZWZpbmVkIGluIGBjcm9zc2hhaXJzLmVsYCAqLworCisv KiBUT0RPOiAgQ29uc2lkZXIgYWRkaW5nIHRoZSBmb2xsb3dpbmcgZnJpbmdlIGJpdG1hcHM6Cisg IChkZWZpbmUtZnJpbmdlLWJpdG1hcCAnYnJlYWtwb2ludCAiXHgzY1x4N2VceGZmXHhmZlx4ZmZc eGZmXHg3ZVx4M2MiKQorICAoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJ2hvbGxvdy1yaWdodC10cmlh bmdsZSAiXHhlMFx4OTBceDg4XHg4NFx4ODRceDg4XHg5MFx4ZTAiKSAqLworCisvKiAyNAorICAg ICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4 Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li54eC4uLiIKKyAgICAgICJ4Li4u eHguLiIKKyAgICAgICJ4Li4uLnh4LiIKKyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Lnh4eHh4 eCIKKyAgICAgICJ4Li4uLnh4LiIKKyAgICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li54eC4uLiIK KyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIpCisq Lworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvd19iaXRz W10gPXsKKyAgMHg4MCwgMHg4MCwgMHg4MCwgMHg5OCwgMHg4YywgMHg4NiwgMHhiZiwKKyAgMHhi ZiwgMHg4NiwgMHg4YywgMHg5OCwgMHg4MCwgMHg4MCwgMHg4MH07CisKKy8qIDI1CisgICAgKCst ZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4u Lnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi54eC4uLnh4IgorICAgICAgIi4ueHguLnh4 IgorICAgICAgIi4uLnh4Lnh4IgorICAgICAgInh4eHh4eHh4IgorICAgICAgInh4eHh4eHh4Igor ICAgICAgIi4uLnh4Lnh4IgorICAgICAgIi4ueHguLnh4IgorICAgICAgIi54eC4uLnh4IgorICAg ICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IikKKyovCitz dGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93 X2JpdHNbXSA9eworICAweDMsIDB4MywgMHgzLCAweDYzLCAweDMzLCAweDFiLCAweGZmLCAweGZm LCAweDFiLCAweDMzLCAweDYzLCAweDMsIDB4MywgMHgzfTsKKworLyogMjYKKyAgICAoKy1mcmlu Z2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLi4uLngi CisgICAgICAieC4uLi4uLngiCisgICAgICAieC4ueHguLngiCisgICAgICAieC4uLnh4LngiCisg ICAgICAieC4uLi54eHgiCisgICAgICAieC54eHh4eHgiCisgICAgICAieC54eHh4eHgiCisgICAg ICAieC4uLi54eHgiCisgICAgICAieC4uLnh4LngiCisgICAgICAieC4ueHguLngiCisgICAgICAi eC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieHh4eHh4eHgiKQorKi8KK3N0YXRp YyB1bnNpZ25lZCBzaG9ydCBtY19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93X2JpdHNbXSA9 eworICAweGZmLCAweDgxLCAweDgxLCAweDk5LCAweDhkLCAweDg3LCAweGJmLAorICAweGJmLCAw eDg3LCAweDhkLCAweDk5LCAweDgxLCAweDgxLCAweGZmfTsKKworLyogMjcKKyAgICAoKy1mcmlu Z2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLi4ueHgi CisgICAgICAieC4uLi4ueHgiCisgICAgICAieC54eC4ueHgiCisgICAgICAieC4ueHgueHgiCisg ICAgICAieC4uLnh4eHgiCisgICAgICAieHh4eHh4eHgiCisgICAgICAieHh4eHh4eHgiCisgICAg ICAieC4uLnh4eHgiCisgICAgICAieC4ueHgueHgiCisgICAgICAieC54eC4ueHgiCisgICAgICAi eC4uLi4ueHgiCisgICAgICAieC4uLi4ueHgiCisgICAgICAieHh4eHh4eHgiKQorKi8KK3N0YXRp YyB1bnNpZ25lZCBzaG9ydCBtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93 X2JpdHNbXSA9eworICAweGZmLCAweDgxLCAweDgxLCAweGIxLCAweDk5LCAweDhkLCAweGZmLAor ICAweGZmLCAweDhkLCAweDk5LCAweGIxLCAweDgxLCAweDgxLCAweGZmfTsKKworLyogMjgKKyAg ICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHh4eHh4eHgiCisgICAgICAi eC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4u Li4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4u LngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngi CisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieHh4eHh4eHgiKQor Ki8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19ob2xsb3dfcmVjdGFuZ2xlX2JpdHNbXSA9ewor ICAweGZmLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLAorICAweDgxLCAweDgx LCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweGZmfTsKKworLyogMjkKKyAgICAoKy1mcmluZ2Ut aGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisg ICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAg ICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAi eC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4u Li4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iKQorKi8KK3N0YXRpYyB1 bnNpZ25lZCBzaG9ydCBtY192ZXJ0aWNhbF9iYXJfYml0c1tdID17CisgIDB4ODAsIDB4ODAsIDB4 ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsCisgIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4 ODAsIDB4ODAsIDB4ODB9OworCisvKiAzMAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2lt YWwKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIK KyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAg ICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAg ICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIu Li4uLi54eCIKKyAgICAgICIuLi4uLi54eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1j X3JldmVyc2VkX3ZlcnRpY2FsX2Jhcl9iaXRzW10gPXsKKyAgMHgzLCAweDMsIDB4MywgMHgzLCAw eDMsIDB4MywgMHgzLCAweDMsIDB4MywgMHgzLCAweDMsIDB4MywgMHgzLCAweDN9OworCisvKiAz MQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eC4uLi4uLiIKKyAg ICAgICJ4eC4uLi4uLiIKKyAgICAgICIgeHguLi4uLiIKKyAgICAgICIueHguLi4uLiIKKyAgICAg ICIuLnh4Li4uLiIKKyAgICAgICIuLnh4Li4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAgICIu Li54eC4uLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIuLi4u Lnh4LiIKKyAgICAgICIuLi4uLnh4LiIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54 eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2JhY2tzbGFzaF9iaXRzW10gPXsKKyAg MHhjMCwgMHhjMCwgMHhlMCwgMHg2MCwgMHgzMCwgMHgzMCwgMHgxOCwgMHgxOCwgMHhjLCAweGMs IDB4NiwgMHg2LCAweDMsIDB4M307CisKKy8qIDMyCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhh ZGVjaW1hbAorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4eC4u Li4uIgorICAgICAgInh4eC4uLi4uIgorICAgICAgIngueHguLi4uIgorICAgICAgIngueHguLi4u IgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLi54eC4uIgor ICAgICAgInguLi54eC4uIgorICAgICAgInguLi4ueHguIgorICAgICAgInguLi4ueHguIgorICAg ICAgInguLi4uLnh4IgorICAgICAgInguLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hv cnQgbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaF9iaXRzW10gPXsKKyAgMHhjMCwgMHhjMCwgMHhl MCwgMHhlMCwgMHhiMCwgMHhiMCwgMHg5OCwKKyAgMHg5OCwgMHg4YywgMHg4YywgMHg4NiwgMHg4 NiwgMHg4MywgMHg4M307CisKKy8qIDMzCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgIi54eHh4eHguIgorICAgICAgInh4eHgueC4uIgorICAgICAgInh4eHgueC4uIgor ICAgICAgInh4eHgueC4uIgorICAgICAgIi54eHgueC4uIgorICAgICAgIi4uLngueC4uIgorICAg ICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAg Ii4uLngueC4uIgorICAgICAgIi4uLngueC4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQg bWNfcGlsY3Jvd19iaXRzW10gPXsKKyAgMHg3ZSwgMHhmNCwgMHhmNCwgMHhmNCwgMHg3NCwgMHgx NCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNH07CisKKy8qIDM0CisgICAgKCstZnJpbmdl LWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4ueHh4eC4uIgorICAgICAgIi54eHh4eHguIgor ICAgICAgInguLnh4Li54IgorICAgICAgInguLnh4Li54IgorICAgICAgInh4eHh4eHh4IgorICAg ICAgInh4Li4uLnh4IgorICAgICAgInh4eC4ueHh4IgorICAgICAgIi54eHh4eHguIgorICAgICAg Ii4ueHh4eC4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfc21pbGV5X2ZhY2VfYml0 c1tdID17CisgIDB4M2MsIDB4N2UsIDB4OTksIDB4OTksIDB4ZmYsIDB4YzMsIDB4ZTcsIDB4N2Us IDB4M2N9OworCisvKiAzNQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAg ICIuLnguLi4uLiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAgICIuLi4ueC4uLiIKKyAgICAgICIu Li4uLnguLiIKKyAgICAgICIuLi4ueC4uLiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAgICIuLngu Li4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3NpbmdsZV9hbmdsZV9yaWdodF9i aXRzW10gPXsKKyAgMHgyMCwgMHgxMCwgMHg4LCAweDQsIDB4OCwgMHgxMCwgMHgyMH07CisKKy8q IDM2CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4ueC4uIgor ICAgICAgIi4uLi54Li4uIgorICAgICAgIi4uLnguLi4uIgorICAgICAgIi4ueC4uLi4uIgorICAg ICAgIi4uLnguLi4uIgorICAgICAgIi4uLi54Li4uIgorICAgICAgIi4uLi4ueC4uIikKKyovCitz dGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfc2luZ2xlX2FuZ2xlX2xlZnRfYml0c1tdID17CisgIDB4 NCwgMHg4LCAweDEwLCAweDIwLCAweDEwLCAweDgsIDB4NH07CisKKy8qIDM3CisgICAgKCstZnJp bmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4Lnh4Li4uIgorICAgICAgIi54eC54eC4u IgorICAgICAgIi4ueHgueHguIgorICAgICAgIi4uLnh4Lnh4IgorICAgICAgIi4ueHgueHguIgor ICAgICAgIi54eC54eC4uIgorICAgICAgInh4Lnh4Li4uIikKKyovCitzdGF0aWMgdW5zaWduZWQg c2hvcnQgbWNfZG91YmxlX2FuZ2xlX3JpZ2h0X2JpdHNbXSA9eworICAweGQ4LCAweDZjLCAweDM2 LCAweDFiLCAweDM2LCAweDZjLCAweGQ4fTsKKworLyogMzgKKyAgICAoKy1mcmluZ2UtaGVscGVy LWhleGFkZWNpbWFsCisgICAgICAiLi4ueHgueHgiCisgICAgICAiLi54eC54eC4iCisgICAgICAi Lnh4Lnh4Li4iCisgICAgICAieHgueHguLi4iCisgICAgICAiLnh4Lnh4Li4iCisgICAgICAiLi54 eC54eC4iCisgICAgICAiLi4ueHgueHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19k b3VibGVfYW5nbGVfbGVmdF9iaXRzW10gPXsKKyAgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHg2 YywgMHgzNiwgMHgxYn07CisKKy8qIDM5CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgIngueC54Li4uIgorICAgICAgIi54LngueC4uIgorICAgICAgIi4ueC54LnguIgor ICAgICAgIi4uLngueC54IgorICAgICAgIi4ueC54LnguIgorICAgICAgIi54LngueC4uIgorICAg ICAgIngueC54Li4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdHJpcGxlX2FuZ2xl X3JpZ2h0X2JpdHNbXSA9eworICAweGE4LCAweDU0LCAweDJhLCAweDE1LCAweDJhLCAweDU0LCAw eGE4fTsKKworLyogNDAKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAi Li4ueC54LngiCisgICAgICAiLi54LngueC4iCisgICAgICAiLngueC54Li4iCisgICAgICAieC54 LnguLi4iCisgICAgICAiLngueC54Li4iCisgICAgICAiLi54LngueC4iCisgICAgICAiLi4ueC54 LngiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY190cmlwbGVfYW5nbGVfbGVmdF9iaXRz W10gPXsKKyAgMHgxNSwgMHgyYSwgMHg1NCwgMHhhOCwgMHg1NCwgMHgyYSwgMHgxNX07CisKKy8q IDQxCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4uLi4uIgor ICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAg ICAgIi4uLnguLi4uIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAg InguLi4uLnguIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4u Li4uLi4uIgorICAgICAgIi4uLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNf c2luZ2xlX2FuZ2xlX3VwX2JpdHNbXSA9eworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEw LCAweDI4LCAweDQ0LCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKworLyogNDIKKyAg ICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisgICAgICAi Li4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAieC4u Li4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLi4ueC4u Li4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4i CisgICAgICAiLi4uLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19zaW5nbGVf YW5nbGVfZG93bl9iaXRzW10gPXsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg0 NCwgMHgyOCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKKy8qIDQzCisgICAgKCst ZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4u Li4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLnguLi4uIgorICAgICAgIi4ueC54Li4u IgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLnguLnguIgorICAgICAgIi4ueC54Li4uIgor ICAgICAgIi54Li4ueC4uIgorICAgICAgInguLi4uLnguIgorICAgICAgIi4uLi4uLi4uIgorICAg ICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hv cnQgbWNfZG91YmxlX2FuZ2xlX3VwX2JpdHNbXSA9eworICAweDAwLCAweDAwLCAweDAwLCAweDEw LCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAweDQ0LCAweDgyLCAweDAwLCAweDAwLCAweDAwfTsK KworLyogNDQKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4uLi4u Li4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAieC4uLi4ueC4i CisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAieC4ueC4ueC4iCisg ICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAg ICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iKQorKi8KK3N0 YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19kb3VibGVfYW5nbGVfZG93bl9iaXRzW10gPXsKKyAgMHgw MCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHgxMCwg MHgwMCwgMHgwMCwgMHgwMH07CisKKy8qIDQ1CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj aW1hbAorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLnguLi4uIgorICAgICAgIi4ueC54Li4u IgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLnguLnguIgorICAgICAgIi4ueC54Li4uIgor ICAgICAgIi54Li4ueC4uIgorICAgICAgInguLnguLnguIgorICAgICAgIi4ueC54Li4uIgorICAg ICAgIi54Li4ueC4uIgorICAgICAgInguLi4uLnguIgorICAgICAgIi4uLi4uLi4uIikKKyovCitz dGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdHJpcGxlX2FuZ2xlX3VwX2JpdHNbXSA9eworICAweDAw LCAweDEwLCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAweDQ0LCAw eDgyLCAweDAwfTsKKworLyogNDYKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisg ICAgICAiLi4uLi4uLi4iCisgICAgICAieC4uLi4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAg ICAiLi54LnguLi4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAi Li54LnguLi4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54 LnguLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi4uLi4uLi4iKQorKi8KK3N0YXRpYyB1 bnNpZ25lZCBzaG9ydCBtY19xdWFkcnVwbGVfYW5nbGVfZG93bl9iaXRzW10gPXsKKyAgMHgwMCwg MHg4MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHgx MCwgMHgwMH07CisKKy8qIDQ3CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAg ICAgIi4uLnguLi4uIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAg InguLnguLnguIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAgIngu LnguLnguIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLngu LnguIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLi4uLngu IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwX2JpdHNb XSA9eworICAweDEwLCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAw eDQ0LCAweDkyLCAweDI4LCAweDQ0LCAweDgyfTsKKworLyogNDgKKyAgICAoKy1mcmluZ2UtaGVs cGVyLWhleGFkZWNpbWFsCisgICAgICAieC4uLi4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAg ICAiLi54LnguLi4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAi Li54LnguLi4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54 LnguLi4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54Lngu Li4iCisgICAgICAiLi4ueC4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY190cmlw bGVfYW5nbGVfZG93bl9iaXRzW10gPXsKKyAgMHg4MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwg MHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHgxMH07CisKIC8qIE5P VEU6ICBUaGUgb3JkZXIgb2YgdGhlc2UgYml0bWFwcyBtdXN0IG1hdGNoIHRoZSBzZXF1ZW5jZQog ICAgdXNlZCBpbiBmcmluZ2UuZWwgdG8gZGVmaW5lIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbHMu ICAqLwogCkBAIC00NjcsOCArOTIxLDEwNDQgQEAgc3RhdGljIHN0cnVjdCBmcmluZ2VfYml0bWFw IHN0YW5kYXJkX2JpdG1hcHNbXSA9CiAgIHsgRlJCSVRTICh2ZXJ0aWNhbF9iYXJfYml0cyksICAg ICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKICAgeyBGUkJJVFMgKGhvcml6b250 YWxfYmFyX2JpdHMpLCAgICAgOCwgMCwgQUxJR05fQklUTUFQX0JPVFRPTSwgMCB9LAogICB7IEZS QklUUyAoZW1wdHlfbGluZV9iaXRzKSwgICAgICAgICA4LCAzLCBBTElHTl9CSVRNQVBfVE9QLCAg ICAwIH0sCisKKyAgLyogMjQgKi8KKyAge0ZSQklUUyAobWNfdmVydGljYWxfYmFyX3JpZ2h0X2Fy cm93X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMjUgKi8KKyAg e0ZSQklUUyAobWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93X2JpdHMpLCA4LCAw LCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMjYgKi8KKyAge0ZSQklUUyAobWNfaG9s bG93X3JlY3RhbmdsZV9yaWdodF9hcnJvd19iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRF UiwgMH0sCisgIC8qIDI3ICovCisgIHtGUkJJVFMgKG1jX3JldmVyc2VkX2hvbGxvd19yZWN0YW5n bGVfcmlnaHRfYXJyb3dfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAv KiAyOCAqLworICB7RlJCSVRTIChtY19ob2xsb3dfcmVjdGFuZ2xlX2JpdHMpLCA4LCAwLCBBTElH Tl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMjkgKi8KKyAge0ZSQklUUyAobWNfdmVydGljYWxf YmFyX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMzAgKi8KKyAg e0ZSQklUUyAobWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRN QVBfQ0VOVEVSLCAwfSwKKyAgLyogMzEgKi8KKyAge0ZSQklUUyAobWNfYmFja3NsYXNoX2JpdHMp LCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMzIgKi8KKyAge0ZSQklUUyAo bWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRF UiwgMH0sCisgIC8qIDMzICovCisgIHtGUkJJVFMgKG1jX3BpbGNyb3dfYml0cyksIDgsIDAsIEFM SUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiAzNCAqLworICB7RlJCSVRTIChtY19zbWlsZXlf ZmFjZV9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDM1ICovCisg IHtGUkJJVFMgKG1jX3NpbmdsZV9hbmdsZV9yaWdodF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQ X0NFTlRFUiwgMH0sCisgIC8qIDM2ICovCisgIHtGUkJJVFMgKG1jX3NpbmdsZV9hbmdsZV9sZWZ0 X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMzcgKi8KKyAge0ZS QklUUyAobWNfZG91YmxlX2FuZ2xlX3JpZ2h0X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VO VEVSLCAwfSwKKyAgLyogMzggKi8KKyAge0ZSQklUUyAobWNfZG91YmxlX2FuZ2xlX2xlZnRfYml0 cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiAzOSAqLworICB7RlJCSVRT IChtY190cmlwbGVfYW5nbGVfcmlnaHRfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIs IDB9LAorICAvKiA0MCAqLworICB7RlJCSVRTIChtY190cmlwbGVfYW5nbGVfbGVmdF9iaXRzKSwg OCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDQxICovCisgIHtGUkJJVFMgKG1j X3NpbmdsZV9hbmdsZV91cF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisg IC8qIDQyICovCisgIHtGUkJJVFMgKG1jX3NpbmdsZV9hbmdsZV9kb3duX2JpdHMpLCA4LCAwLCBB TElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogNDMgKi8KKyAge0ZSQklUUyAobWNfZG91Ymxl X2FuZ2xlX3VwX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogNDQg Ki8KKyAge0ZSQklUUyAobWNfZG91YmxlX2FuZ2xlX2Rvd25fYml0cyksIDgsIDAsIEFMSUdOX0JJ VE1BUF9DRU5URVIsIDB9LAorICAvKiA0NSAqLworICB7RlJCSVRTIChtY190cmlwbGVfYW5nbGVf dXBfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiA0NiAqLworICB7 RlJCSVRTIChtY190cmlwbGVfYW5nbGVfZG93bl9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NF TlRFUiwgMH0sCisgIC8qIDQ3ICovCisgIHtGUkJJVFMgKG1jX3F1YWRydXBsZV9hbmdsZV91cF9i aXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDQ4ICovCisgIHtGUkJJ VFMgKG1jX3F1YWRydXBsZV9hbmdsZV9kb3duX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VO VEVSLCAwfSwKIH07CiAKKy8qIFVzZSB0aGlzIHRvIHN1cHByZXNzIGdjYydzIGAuLi5tYXkgYmUg dXNlZCBiZWZvcmUgaW5pdGlhbGl6ZWQnIHdhcm5pbmdzLiAqLworI2lmZGVmIGxpbnQKKyMgZGVm aW5lIE1DX0lGX0xJTlQoQ29kZSkgQ29kZQorI2Vsc2UKKyMgZGVmaW5lIE1DX0lGX0xJTlQoQ29k ZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGZyaW5nZV9iaXRtYXAgKiBn ZXRfZnJpbmdlX2JpdG1hcF9kYXRhIChpbnQpOworCisvKiBudGggMCA9PiBmYWxzZSwgZmFsc2UK KyAgIG50aCAxID0+IHRydWUsIGZhbHNlCisgICBudGggMiA9PiBmYWxzZSwgdHJ1ZQorICAgbnRo IDMgPT4gdHJ1ZSwgdHJ1ZQorICBMb29rdXAgaW4gYnVmZmVyLWxvY2FsIGZyaW5nZS1pbmRpY2F0 b3ItYWxpc3QgYmVmb3JlIGdsb2JhbCBhbGlzdC4KKyAgICAgRWxlbWVudHMgYXJlOgorICBCSVRN QVAgICAgLS0gdXNlIGZvciBhbGwKKyAgKEwgUikgICAgLS0gdXNlIGZvciBsZWZ0IHJpZ2h0ICh3 aGV0aGVyIHBhcnRpYWwgb3Igbm90KQorICAoTCBSIFBMIFBSKSAgLS0gdXNlIGZvciBsZWZ0IHJp Z2h0IHBhcnRpYWwtbGVmdCBwYXJ0aWFsLXJpZ2h0CisgIElmIGFueSB2YWx1ZSBpbiBsb2NhbCBi aW5kaW5nIGlzIG5vdCBwcmVzZW50IG9yIHQsIHVzZSBnbG9iYWwgdmFsdWUuCisgICAgIElmIHBh cnRpYWwsIGxvb2t1cCBwYXJ0aWFsIGJpdG1hcCBpbiBkZWZhdWx0IHZhbHVlIGlmIG5vdCBmb3Vu ZCBoZXJlLgorICAgICBJZiBub3QgcGFydGlhbCwgb3Igbm8gcGFydGlhbCBzcGVjIGlzIHByZXNl bnQsIHVzZSBub24tcGFydGlhbCBiaXRtYXAuICovCitpbnQKK21jX2dldF9mcmluZ2VfYml0bWFw IChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCBiaXRtYXAsIGludCByaWdodF9wLCBpbnQg cGFydGlhbF9wKQoreworICBMaXNwX09iamVjdCBjbWFwLCBibTEgPSBRbmlsLCBibTIgPSBRbmls LCBibTsKKyAgRU1BQ1NfSU5UIGxuMSA9IDAsIGxuMiA9IDA7CisgIGludCBpeDEgPSByaWdodF9w OworICBpbnQgaXgyID0gaXgxICsgKHBhcnRpYWxfcCA/IDIgOiAwKTsKKyAgaWYgKChjbWFwID0g QlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSksICFO SUxQIChjbWFwKSkKKyAgICB7CisgICAgICBibTEgPSBtY19hc3NxIChiaXRtYXAsIGNtYXApOwor ICAgICAgaWYgKENPTlNQIChibTEpKQorICB7CisgICAgaWYgKChibTEgPSBYQ0RSIChibTEpKSwg TklMUCAoYm0xKSkKKyAgICAgIHJldHVybiBNQ19OT19GUklOR0VfQklUTUFQOworICAgIGlmIChD T05TUCAoYm0xKSkKKyAgICAgIHsKKyAgICAgICAgbG4xID0gWEZJWE5VTSAoRmxlbmd0aCAoYm0x KSk7CisgICAgICAgIGlmIChwYXJ0aWFsX3ApCisgICAgeworICAgICAgaWYgKGxuMSA+IGl4MikK KyAgICAgICAgeworICAgICAgICAgIGJtID0gbWNfbnRoIChpeDIsIGJtMSk7CisgICAgICAgICAg aWYgKCFFUSAoYm0sIFF0KSkKKyAgICAgIGdvdG8gZm91bmQ7CisgICAgICAgIH0KKyAgICB9Cisg ICAgICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAobG4xID4gaXgxKQorICAgICAgICB7CisgICAg ICAgICAgYm0gPSBtY19udGggKGl4MSwgYm0xKTsKKyAgICAgICAgICBpZiAoIUVRIChibSwgUXQp KQorICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgIH0KKyAgICBlbHNl IGlmICgoYm0gPSBibTEsICFFUSAoYm0sIFF0KSkpCisgICAgICBnb3RvIGZvdW5kOworICB9Cisg ICAgfQorICBpZiAoIUVRIChjbWFwLCBCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmluZ2VfaW5k aWNhdG9yX2FsaXN0KSkKKyAgICAgICYmICFOSUxQIChCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBm cmluZ2VfaW5kaWNhdG9yX2FsaXN0KSkpCisgICAgeworICAgICAgYm0yID0gbWNfYXNzcSAoYml0 bWFwLCBCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSk7Cisg ICAgICBpZiAoQ09OU1AgKGJtMikpCisgIHsKKyAgICBpZiAoKGJtMiA9IFhDRFIgKGJtMikpLCAh TklMUCAoYm0yKSkKKyAgICAgIHsKKyAgICAgICAgaWYgKENPTlNQIChibTIpKQorICAgIHsKKyAg ICAgIGxuMiA9IFhGSVhOVU0gKEZsZW5ndGggKGJtMikpOworICAgICAgaWYgKHBhcnRpYWxfcCkK KyAgICAgICAgeworICAgICAgICAgIGlmIChsbjIgPiBpeDIpCisgICAgICB7CisgICAgICAgIGJt ID0gbWNfbnRoIChpeDIsIGJtMik7CisgICAgICAgIGlmICghRVEgKGJtLCBRdCkpCisgICAgICAg ICAgZ290byBmb3VuZDsKKyAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAgIH0KKyAgfQor ICAgIH0KKyAgaWYgKGxuMSA+IGl4MSkKKyAgICB7CisgICAgICBibSA9IG1jX250aCAoaXgxLCBi bTEpOworICAgICAgaWYgKCFFUSAoYm0sIFF0KSkKKyAgZ290byBmb3VuZDsKKyAgICB9CisgIGlm IChsbjIgPiBpeDEpCisgICAgeworICAgICAgYm0gPSBtY19udGggKGl4MSwgYm0yKTsKKyAgICAg IGlmICghRVEgKGJtLCBRdCkpCisgIGdvdG8gZm91bmQ7CisgICAgICByZXR1cm4gTUNfTk9fRlJJ TkdFX0JJVE1BUDsKKyAgICB9CisgIGVsc2UgaWYgKChibSA9IGJtMiwgTklMUCAoYm0pKSkKKyAg ICByZXR1cm4gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyBmb3VuZDoKKyAgcmV0dXJuIGxvb2t1cF9m cmluZ2VfYml0bWFwIChibSk7Cit9CisKK3N0YXRpYyBpbnQKK21jX2dldF9sb2dpY2FsX2N1cnNv cl9iaXRtYXAgKHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IGN1cnNvcikKK3sKKyAgTGlz cF9PYmplY3QgY21hcCwgYm0gPSBRbmlsOworICBpZiAoKGNtYXAgPSBCVkFSIChYQlVGRkVSICh3 LT5jb250ZW50cyksIGZyaW5nZV9jdXJzb3JfYWxpc3QpKSwgIU5JTFAgKGNtYXApKQorICAgIHsK KyAgICAgIGJtID0gbWNfYXNzcSAoY3Vyc29yLCBjbWFwKTsKKyAgICAgIGlmIChDT05TUCAoYm0p KQorICAgICAgICB7CisgICAgICAgICAgaWYgKChibSA9IFhDRFIgKGJtKSksIE5JTFAgKGJtKSkK KyAgICAgICAgICAgIHJldHVybiBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgICAgIHJldHVy biBsb29rdXBfZnJpbmdlX2JpdG1hcCAoYm0pOworICAgICAgICB9CisgICAgfQorICBpZiAoRVEg KGNtYXAsIEJWQVIgKCZidWZmZXJfZGVmYXVsdHMsIGZyaW5nZV9jdXJzb3JfYWxpc3QpKSkKKyAg ICByZXR1cm4gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgYm0gPSBtY19hc3NxIChjdXJzb3IsIEJW QVIgKCZidWZmZXJfZGVmYXVsdHMsIGZyaW5nZV9jdXJzb3JfYWxpc3QpKTsKKyAgaWYgKCFDT05T UCAoYm0pIHx8ICgoYm0gPSBYQ0RSIChibSkpLCBOSUxQIChibSkpKQorICAgIHJldHVybiBNQ19O T19GUklOR0VfQklUTUFQOworICByZXR1cm4gbG9va3VwX2ZyaW5nZV9iaXRtYXAgKGJtKTsKK30K Kworc3RhdGljIGludAorbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAoc3RydWN0IHdpbmRv dyAqdywgTGlzcF9PYmplY3QgYml0bWFwLCBpbnQgcmlnaHRfcCwgaW50IHBhcnRpYWxfcCkKK3sK KyAgTGlzcF9PYmplY3QgY21hcCwgYm0xID0gUW5pbCwgYm0yID0gUW5pbCwgYm07CisgIEVNQUNT X0lOVCBsbjEgPSAwLCBsbjIgPSAwOworICBpbnQgaXgxID0gcmlnaHRfcDsKKyAgaW50IGl4MiA9 IGl4MSArIChwYXJ0aWFsX3AgPyAyIDogMCk7CisgIC8qIExvb2t1cCBpbiBidWZmZXItbG9jYWwg ZnJpbmdlLWluZGljYXRvci1hbGlzdCBiZWZvcmUgZ2xvYmFsIGFsaXN0LgorICAgICBFbGVtZW50 cyBhcmU6CisgIEJJVE1BUCAgICAtLSB1c2UgZm9yIGFsbAorICAoTCBSKSAgICAtLSB1c2UgZm9y IGxlZnQgcmlnaHQgKHdoZXRoZXIgcGFydGlhbCBvciBub3QpCisgIChMIFIgUEwgUFIpICAtLSB1 c2UgZm9yIGxlZnQgcmlnaHQgcGFydGlhbC1sZWZ0IHBhcnRpYWwtcmlnaHQKKyAgSWYgYW55IHZh bHVlIGluIGxvY2FsIGJpbmRpbmcgaXMgbm90IHByZXNlbnQgb3IgdCwgdXNlIGdsb2JhbCB2YWx1 ZS4KKyAgICAgSWYgcGFydGlhbCwgbG9va3VwIHBhcnRpYWwgYml0bWFwIGluIGRlZmF1bHQgdmFs dWUgaWYgbm90IGZvdW5kIGhlcmUuCisgICAgIElmIG5vdCBwYXJ0aWFsLCBvciBubyBwYXJ0aWFs IHNwZWMgaXMgcHJlc2VudCwgdXNlIG5vbi1wYXJ0aWFsIGJpdG1hcC4gICovCisgIGlmICgoY21h cCA9IEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZnJpbmdlX2luZGljYXRvcl9hbGlzdCkp LCAhTklMUCAoY21hcCkpCisgICAgeworICAgICAgYm0xID0gbWNfYXNzcSAoYml0bWFwLCBjbWFw KTsKKyAgICAgIGlmIChDT05TUCAoYm0xKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgoYm0x ID0gWENEUiAoYm0xKSksIE5JTFAgKGJtMSkpCisgICAgICAgICAgICByZXR1cm4gTUNfTk9fRlJJ TkdFX0JJVE1BUDsKKyAgICAgICAgICBpZiAoQ09OU1AgKGJtMSkpCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIGxuMSA9IFhGSVhOVU0gKEZsZW5ndGggKGJtMSkpOworICAgICAgICAgICAg ICBpZiAocGFydGlhbF9wKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlm IChsbjEgPiBpeDIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICBibSA9IG1jX250aCAoaXgyLCBibTEpOworICAgICAgICAgICAgICAgICAgICAgIGlmICghRVEg KGJtLCBRdCkpCisgICAgICAgICAgICAgICAgICBnb3RvIGZvdW5kOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKGxuMSA+IGl4MSkKKyAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGJtID0gbWNfbnRoIChpeDEsIGJtMSk7Cisg ICAgICAgICAgICAgICAgICAgICAgaWYgKCFFUSAoYm0sIFF0KSkKKyAgICAgICAgICAgICAgICAg IGdvdG8gZm91bmQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoKGJtID0gYm0xLCAhRVEgKGJtLCBRdCkp KQorICAgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKCFFUSAo Y21hcCwgQlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgZnJpbmdlX2luZGljYXRvcl9hbGlzdCkpCisg ICAgICAmJiAhTklMUCAoQlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgZnJpbmdlX2luZGljYXRvcl9h bGlzdCkpKQorICAgIHsKKyAgICAgIGJtMiA9IG1jX2Fzc3EgKGJpdG1hcCwgQlZBUiAoJmJ1ZmZl cl9kZWZhdWx0cywgZnJpbmdlX2luZGljYXRvcl9hbGlzdCkpOworICAgICAgaWYgKENPTlNQIChi bTIpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChibTIgPSBYQ0RSIChibTIpKSwgIU5JTFAg KGJtMikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChDT05TUCAoYm0yKSkKKyAg ICAgICAgICB7CisgICAgICAgICAgICBsbjIgPSBYRklYTlVNIChGbGVuZ3RoIChibTIpKTsKKyAg ICAgICAgICAgIGlmIChwYXJ0aWFsX3ApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBpZiAobG4yID4gaXgyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBibSA9IG1jX250 aCAoaXgyLCBibTIpOworICAgICAgICAgICAgICBpZiAoIUVRIChibSwgUXQpKQorICAgICAgICAg ICAgICAgIGdvdG8gZm91bmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGlmIChsbjEgPiBpeDEp CisgICAgeworICAgICAgYm0gPSBtY19udGggKGl4MSwgYm0xKTsKKyAgICAgIGlmICghRVEgKGJt LCBRdCkpCisgIGdvdG8gZm91bmQ7CisgICAgfQorICBpZiAobG4yID4gaXgxKQorICAgIHsKKyAg ICAgIGJtID0gbWNfbnRoIChpeDEsIGJtMik7CisgICAgICBpZiAoIUVRIChibSwgUXQpKQorICAg ICAgICBnb3RvIGZvdW5kOworICAgICAgcmV0dXJuIE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAg fQorICAgIGVsc2UgaWYgKChibSA9IGJtMiwgTklMUCAoYm0pKSkKKyAgICByZXR1cm4gTUNfTk9f RlJJTkdFX0JJVE1BUDsKKyBmb3VuZDoKKyAgcmV0dXJuIGxvb2t1cF9mcmluZ2VfYml0bWFwIChi bSk7Cit9CisKKy8qIFJlY2FsY3VsYXRlIHRoZSBiaXRtYXBzIHRvIHNob3cgaW4gdGhlIGZyaW5n ZXMgb2Ygd2luZG93IFcuCisgICBPbmx5IG1hcmsgcm93cyB3aXRoIG1vZGlmaWVkIGJpdG1hcHMg Zm9yIHVwZGF0ZSBpbiByZWRyYXdfZnJpbmdlX2JpdG1hcHNfcC4KKyAgIElmIEtFRVBfQ1VSUkVO VF9QIGlzIDAsIHVwZGF0ZSBjdXJyZW50X21hdHJpeCB0b28uICovCitib29sCittY191cGRhdGVf d2luZG93X2ZyaW5nZXMgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wga2VlcF9jdXJyZW50X3ApCit7 CisgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgKmN1ciA9IDA7CisgIGludCB5YiA9IHdpbmRvd190 ZXh0X2JvdHRvbV95ICh3KTsKKyAgaW50IHJuLCBucm93cyA9IHctPmN1cnJlbnRfbWF0cml4LT5u cm93czsKKyAgaW50IHk7CisgIGJvb2wgcmVkcmF3X3AgPSAwOworICBMaXNwX09iamVjdCBib3Vu ZGFyeV90b3AgPSBRbmlsLCBib3VuZGFyeV9ib3QgPSBRbmlsOworICBMaXNwX09iamVjdCBhcnJv d190b3AgPSBRbmlsLCBhcnJvd19ib3QgPSBRbmlsOworICBMaXNwX09iamVjdCBlbXB0eV9wb3M7 CisgIExpc3BfT2JqZWN0IGluZCA9IFFuaWw7CisjZGVmaW5lIE1BWF9CSVRNQVBfQ0FDSEUgKDgq NCkKKyAgaW50IGJpdG1hcF9jYWNoZVtNQVhfQklUTUFQX0NBQ0hFXTsKKyAgaW50IHRvcF9pbmRf cm4sIGJvdF9pbmRfcm47CisgIGludCB0b3BfaW5kX21pbl95LCBib3RfaW5kX21heF95OworICAv KiB0b3BfaW5kX3JuIGlzIHNldCB0byBhIG5vbm5lZ2F0aXZlIHZhbHVlIHdoZW5ldmVyCisgICAg IHJvdy0+aW5kaWNhdGVfYm9iX3AgaXMgc2V0LCBzbyBpdCdzIE9LIHRoYXQgdG9wX3Jvd19lbmRz X2F0X3p2X3AKKyAgICAgaXMgbm90IGluaXRpYWxpemVkIGhlcmUuICBTaW1pbGFybHkgZm9yIGJv dF9pbmRfcm4sCisgICAgIHJvdy0+aW5kaWNhdGVfZW9iX3AgYW5kIGJvdF9yb3dfZW5kc19hdF96 dl9wLiAgKi8KKyAgaW50IHRvcF9yb3dfZW5kc19hdF96dl9wIE1DX0lGX0xJTlQgKD0gMCksIGJv dF9yb3dfZW5kc19hdF96dl9wIE1DX0lGX0xJTlQgKD0gMCk7CisgIGlmICh3LT5wc2V1ZG9fd2lu ZG93X3ApCisgICAgcmV0dXJuIDA7CisgIGlmICghTUlOSV9XSU5ET1dfUCAodykKKyAgICAgICYm IChpbmQgPSBCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGluZGljYXRlX2J1ZmZlcl9ib3Vu ZGFyaWVzKSwgIU5JTFAgKGluZCkpKQorICAgIHsKKyAgICAgIGlmIChFUSAoaW5kLCBRbGVmdCkg fHwgRVEgKGluZCwgUXJpZ2h0KSkKKyAgICAgICAgYm91bmRhcnlfdG9wID0gYm91bmRhcnlfYm90 ID0gYXJyb3dfdG9wID0gYXJyb3dfYm90ID0gaW5kOworICAgICAgZWxzZSBpZiAoQ09OU1AgKGlu ZCkKKyAgICAgICAgICAgICAgICYmIENPTlNQIChYQ0FSIChpbmQpKSkKKyAgICAgICAgeworICAg ICAgICAgIExpc3BfT2JqZWN0IHBvczsKKyAgICAgICAgICBpZiAocG9zID0gbWNfYXNzcSAoUXQs IGluZCksICFOSUxQIChwb3MpKQorICAgICAgICAgICAgYm91bmRhcnlfdG9wID0gYm91bmRhcnlf Ym90ID0gYXJyb3dfdG9wID0gYXJyb3dfYm90ID0gWENEUiAocG9zKTsKKyAgICAgICAgICBpZiAo cG9zID0gbWNfYXNzcSAoUXRvcCwgaW5kKSwgIU5JTFAgKHBvcykpCisgICAgICAgICAgICBib3Vu ZGFyeV90b3AgPSBYQ0RSIChwb3MpOworICAgICAgICAgIGlmIChwb3MgPSBtY19hc3NxIChRYm90 dG9tLCBpbmQpLCAhTklMUCAocG9zKSkKKyAgICAgICAgICAgIGJvdW5kYXJ5X2JvdCA9IFhDRFIg KHBvcyk7CisgICAgICAgICAgaWYgKHBvcyA9IG1jX2Fzc3EgKFF1cCwgaW5kKSwgIU5JTFAgKHBv cykpCisgICAgICAgICAgICBhcnJvd190b3AgPSBYQ0RSIChwb3MpOworICAgICAgICAgIGlmIChw b3MgPSBtY19hc3NxIChRZG93biwgaW5kKSwgIU5JTFAgKHBvcykpCisgICAgICAgICAgICBhcnJv d19ib3QgPSBYQ0RSIChwb3MpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIEFu eXRoaW5nIGVsc2UgbWVhbnMgYm91bmRhcnkgb24gbGVmdCBhbmQgbm8gYXJyb3dzLiAgKi8KKyAg ICAgICAgYm91bmRhcnlfdG9wID0gYm91bmRhcnlfYm90ID0gUWxlZnQ7CisgICAgfQorICB0b3Bf aW5kX3JuID0gYm90X2luZF9ybiA9IC0xOworICBpZiAoIU5JTFAgKGluZCkpCisgICAgeworICAg ICAgZm9yICh5ID0gdy0+dnNjcm9sbCwgcm4gPSAwOworICAgICAgICAgICB5IDwgeWIgJiYgcm4g PCBucm93czsKKyAgICAgICAgICAgeSArPSByb3ctPmhlaWdodCwgKytybikKKyAgICAgICAgewor ICAgICAgICAgIHJvdyA9IHctPmRlc2lyZWRfbWF0cml4LT5yb3dzICsgcm47CisgICAgICAgICAg aWYgKCFyb3ctPmVuYWJsZWRfcCkKKyAgICAgICAgICAgIHJvdyA9IHctPmN1cnJlbnRfbWF0cml4 LT5yb3dzICsgcm47CisgICAgICAgICAgcm93LT5pbmRpY2F0ZV9ib2JfcCA9IHJvdy0+aW5kaWNh dGVfdG9wX2xpbmVfcCA9IDA7CisgICAgICAgICAgcm93LT5pbmRpY2F0ZV9lb2JfcCA9IHJvdy0+ aW5kaWNhdGVfYm90dG9tX2xpbmVfcCA9IDA7CisgICAgICAgICAgaWYgKCFyb3ctPm1vZGVfbGlu ZV9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAodG9wX2luZF9ybiA8IDAgJiYg cm93LT52aXNpYmxlX2hlaWdodCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgaWYgKE1BVFJJWF9ST1dfU1RBUlRfQ0hBUlBPUyAocm93KSA8PSBCVUZfQkVHViAoWEJV RkZFUiAody0+Y29udGVudHMpKQorICAgICAgICAgICAgICAgICAgICAgICYmICFNQVRSSVhfUk9X X1BBUlRJQUxMWV9WSVNJQkxFX0FUX1RPUF9QICh3LCByb3cpKQorICAgICAgICAgICAgICAgICAg ICByb3ctPmluZGljYXRlX2JvYl9wID0gIU5JTFAgKGJvdW5kYXJ5X3RvcCk7CisgICAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kaWNhdGVfdG9wX2xpbmVf cCA9ICFOSUxQIChhcnJvd190b3ApOworICAgICAgICAgICAgICAgICAgdG9wX2luZF9ybiA9IHJu OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKGJvdF9pbmRfcm4gPCAwKQor ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChNQVRSSVhfUk9XX0VORF9D SEFSUE9TIChyb3cpID49IEJVRl9aViAoWEJVRkZFUiAody0+Y29udGVudHMpKQorICAgICAgICAg ICAgICAgICAgICAgICYmICFNQVRSSVhfUk9XX1BBUlRJQUxMWV9WSVNJQkxFX0FUX0JPVFRPTV9Q ICh3LCByb3cpKQorICAgICAgICAgICAgICAgICAgICByb3ctPmluZGljYXRlX2VvYl9wID0gIU5J TFAgKGJvdW5kYXJ5X2JvdCksIGJvdF9pbmRfcm4gPSBybjsKKyAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKHkgKyByb3ctPmhlaWdodCA+PSB5YikKKyAgICAgICAgICAgICAgICAgICAgcm93LT5p bmRpY2F0ZV9ib3R0b21fbGluZV9wID0gIU5JTFAgKGFycm93X2JvdCksIGJvdF9pbmRfcm4gPSBy bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg IGVtcHR5X3BvcyA9IEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgaW5kaWNhdGVfZW1wdHlf bGluZXMpOworICBpZiAoIU5JTFAgKGVtcHR5X3BvcykgJiYgIUVRIChlbXB0eV9wb3MsIFFyaWdo dCkpCisgICAgZW1wdHlfcG9zID0gV0lORE9XX0xFRlRfRlJJTkdFX1dJRFRIICh3KSA9PSAwID8g UXJpZ2h0IDogUWxlZnQ7CisgIGZvciAoeSA9IDA7IHkgPCBNQVhfQklUTUFQX0NBQ0hFOyB5Kysp CisgICAgYml0bWFwX2NhY2hlW3ldID0gLTE7CisjZGVmaW5lIE1DX0xFRlRfRlJJTkdFKGNhY2hl LCB3aGljaCwgcGFydGlhbF9wKQkJCVwKKyAgKGJpdG1hcF9jYWNoZVtjYWNoZSo0K3BhcnRpYWxf cF0gPj0gMAkJCQlcCisgICA/IGJpdG1hcF9jYWNoZVtjYWNoZSo0K3BhcnRpYWxfcF0JCQkJXAor ICAgOiAoYml0bWFwX2NhY2hlW2NhY2hlKjQrcGFydGlhbF9wXSA9CQkJCVwKKyAgICAgIG1jX2dl dF9sb2dpY2FsX2ZyaW5nZV9iaXRtYXAgKHcsIHdoaWNoLCAwLCBwYXJ0aWFsX3ApKSkKKyNkZWZp bmUgTUNfUklHSFRfRlJJTkdFKGNhY2hlLCB3aGljaCwgcGFydGlhbF9wKQkJCVwKKyAgKGJpdG1h cF9jYWNoZVtjYWNoZSo0KzIrcGFydGlhbF9wXSA+PSAwCQkJXAorICAgPyBiaXRtYXBfY2FjaGVb Y2FjaGUqNCsyK3BhcnRpYWxfcF0JCQkJXAorICAgOiAoYml0bWFwX2NhY2hlW2NhY2hlKjQrMitw YXJ0aWFsX3BdID0JCQlcCisgICAgICBtY19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCB3 aGljaCwgMSwgcGFydGlhbF9wKSkpCisgIC8qIEV4dGVuZCB0b3AtYWxpZ25lZCB0b3AgaW5kaWNh dG9yIChvciBib3R0b20tYWxpZ25lZCBib3R0b20KKyAgICAgaW5kaWNhdG9yKSB0byBhZGphY2Vu dCByb3dzIGlmIGl0IGRvZXNuJ3QgZml0IGluIG9uZSByb3cuICAqLworICB0b3BfaW5kX21pbl95 ID0gYm90X2luZF9tYXhfeSA9IC0xOworICBpZiAodG9wX2luZF9ybiA+PSAwKQorICAgIHsKKyAg ICAgIGludCBibiA9IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICByb3cgPSB3LT5kZXNpcmVk X21hdHJpeC0+cm93cyArIHRvcF9pbmRfcm47CisgICAgICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQor ICAgICAgICByb3cgPSB3LT5jdXJyZW50X21hdHJpeC0+cm93cyArIHRvcF9pbmRfcm47CisgICAg ICB0b3Bfcm93X2VuZHNfYXRfenZfcCA9IHJvdy0+ZW5kc19hdF96dl9wOworICAgICAgaWYgKHJv dy0+aW5kaWNhdGVfYm9iX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoRVEgKGJvdW5kYXJ5 X3RvcCwgUWxlZnQpKQorICAgICAgICAgICAgYm4gPSAoKHJvdy0+aW5kaWNhdGVfZW9iX3AgJiYg RVEgKGJvdW5kYXJ5X2JvdCwgUWxlZnQpKQorICAgICAgICAgICAgPyBNQ19MRUZUX0ZSSU5HRSAo MSwgUXRvcF9ib3R0b20sIHJvdy0+ZW5kc19hdF96dl9wKQorICAgICAgICAgICAgOiBNQ19MRUZU X0ZSSU5HRSAoMiwgUXRvcCwgMCkpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJuID0g KChyb3ctPmluZGljYXRlX2VvYl9wICYmIEVRIChib3VuZGFyeV9ib3QsIFFyaWdodCkpCisgICAg ICAgICAgICA/IE1DX1JJR0hUX0ZSSU5HRSAoMSwgUXRvcF9ib3R0b20sIHJvdy0+ZW5kc19hdF96 dl9wKQorICAgICAgICAgICAgOiBNQ19SSUdIVF9GUklOR0UgKDIsIFF0b3AsIDApKTsKKyAgICAg ICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV90b3BfbGluZV9wKQorICAgICAgICB7 CisgICAgICAgICAgaWYgKEVRIChhcnJvd190b3AsIFFsZWZ0KSkKKyAgICAgICAgICAgIGJuID0g TUNfTEVGVF9GUklOR0UgKDYsIFF1cCwgMCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAg Ym4gPSBNQ19SSUdIVF9GUklOR0UgKDYsIFF1cCwgMCk7CisgICAgICAgIH0KKyAgICAgIGlmIChi biAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGZy aW5nZV9iaXRtYXAgKmZiID0gZ2V0X2ZyaW5nZV9iaXRtYXBfZGF0YSAoYm4pOworICAgICAgICAg IGlmIChmYi0+YWxpZ24gPT0gQUxJR05fQklUTUFQX1RPUCAmJiBmYi0+cGVyaW9kID09IDApCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzE7CisgICAg ICAgICAgICAgIGludCB0b3BfaW5kX21heF95OworICAgICAgICAgICAgICB0b3BfaW5kX21pbl95 ID0gV0lORE9XX0hFQURFUl9MSU5FX0hFSUdIVCAodyk7CisgICAgICAgICAgICAgIHRvcF9pbmRf bWF4X3kgPSB0b3BfaW5kX21pbl95ICsgZmItPmhlaWdodDsKKyAgICAgICAgICAgICAgaWYgKHRv cF9pbmRfbWF4X3kgPiB5YikKKyAgICAgICAgICAgICAgICB0b3BfaW5kX21heF95ID0geWI7Cisg ICAgICAgICAgICAgIGZvciAoeSA9IHJvdy0+eSArIHJvdy0+aGVpZ2h0LCBybiA9IHRvcF9pbmRf cm4gKyAxOworICAgICAgICAgICAgICAgICAgIHkgPCB0b3BfaW5kX21heF95ICYmIHJuIDwgbnJv d3M7CisgICAgICAgICAgICAgICAgICAgeSArPSByb3cxLT5oZWlnaHQsIHJuKyspCisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKGJvdF9pbmRfcm4gPj0gMCAmJiBybiA+ PSBib3RfaW5kX3JuKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIHJvdzEgPSB3LT5kZXNpcmVkX21hdHJpeC0+cm93cyArIHJuOworICAgICAgICAgICAgICAg ICAgaWYgKCFyb3cxLT5lbmFibGVkX3ApCisgICAgICAgICAgICAgICAgICAgIHJvdzEgPSB3LT5j dXJyZW50X21hdHJpeC0+cm93cyArIHJuOworICAgICAgICAgICAgICAgICAgcm93MS0+aW5kaWNh dGVfYm9iX3AgPSByb3ctPmluZGljYXRlX2JvYl9wOworICAgICAgICAgICAgICAgICAgcm93MS0+ aW5kaWNhdGVfdG9wX2xpbmVfcCA9IHJvdy0+aW5kaWNhdGVfdG9wX2xpbmVfcDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGlmIChib3RfaW5k X3JuID49IDApCisgICAgeworICAgICAgaW50IGJuID0gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAg ICAgIHJvdyA9IHctPmRlc2lyZWRfbWF0cml4LT5yb3dzICsgYm90X2luZF9ybjsKKyAgICAgIGlm ICghcm93LT5lbmFibGVkX3ApCisgICAgICAgIHJvdyA9IHctPmN1cnJlbnRfbWF0cml4LT5yb3dz ICsgYm90X2luZF9ybjsKKyAgICAgIGJvdF9yb3dfZW5kc19hdF96dl9wID0gcm93LT5lbmRzX2F0 X3p2X3A7CisgICAgICBpZiAocm93LT5pbmRpY2F0ZV9lb2JfcCkKKyAgICAgICAgeworICAgICAg ICAgIGlmIChFUSAoYm91bmRhcnlfYm90LCBRbGVmdCkpCisgICAgICAgICAgICBibiA9IE1DX0xF RlRfRlJJTkdFICgzLCBRYm90dG9tLCByb3ctPmVuZHNfYXRfenZfcCk7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgYm4gPSBNQ19SSUdIVF9GUklOR0UgKDMsIFFib3R0b20sIHJvdy0+ZW5k c19hdF96dl9wKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9ib3R0 b21fbGluZV9wKQorICAgICAgICB7CisgICAgICAgICAgaWYgKEVRIChhcnJvd19ib3QsIFFsZWZ0 KSkKKyAgICAgICAgICAgIGJuID0gTUNfTEVGVF9GUklOR0UgKDcsIFFkb3duLCAwKTsKKyAgICAg ICAgICBlbHNlCisgICAgICAgICAgICBibiA9IE1DX1JJR0hUX0ZSSU5HRSAoNywgUWRvd24sIDAp OworICAgICAgICB9CisgICAgICBpZiAoYm4gIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAg ICAgeworICAgICAgICAgIHN0cnVjdCBmcmluZ2VfYml0bWFwICpmYiA9IGdldF9mcmluZ2VfYml0 bWFwX2RhdGEgKGJuKTsKKyAgICAgICAgICBpZiAoZmItPmFsaWduID09IEFMSUdOX0JJVE1BUF9C T1RUT00gJiYgZmItPnBlcmlvZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBz dHJ1Y3QgZ2x5cGhfcm93ICpyb3cxOworICAgICAgICAgICAgICBpbnQgYm90X2luZF9taW5feTsK KyAgICAgICAgICAgICAgYm90X2luZF9tYXhfeSA9IHJvdy0+eSArIHJvdy0+dmlzaWJsZV9oZWln aHQ7CisgICAgICAgICAgICAgIGJvdF9pbmRfbWluX3kgPSBib3RfaW5kX21heF95IC0gZmItPmhl aWdodDsKKyAgICAgICAgICAgICAgaWYgKGJvdF9pbmRfbWluX3kgPCBXSU5ET1dfSEVBREVSX0xJ TkVfSEVJR0hUICh3KSkKKyAgICAgICAgICBib3RfaW5kX21pbl95ID0gV0lORE9XX0hFQURFUl9M SU5FX0hFSUdIVCAodyk7CisgICAgICAgICAgICAgIGZvciAoeSA9IHJvdy0+eSwgcm4gPSBib3Rf aW5kX3JuIC0gMTsKKyAgICAgICAgICAgICB5ID49IGJvdF9pbmRfbWluX3kgJiYgcm4gPj0gMDsK KyAgICAgICAgICAgICB5IC09IHJvdzEtPmhlaWdodCwgcm4tLSkKKyAgICAgICAgICB7CisgICAg ICAgICAgICBpZiAodG9wX2luZF9ybiA+PSAwICYmIHJuIDw9IHRvcF9pbmRfcm4pCisgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgcm93MSA9IHctPmRlc2lyZWRfbWF0cml4LT5yb3dz ICsgcm47CisgICAgICAgICAgICBpZiAoIXJvdzEtPmVuYWJsZWRfcCkKKyAgICAgICAgICAgICAg cm93MSA9IHctPmN1cnJlbnRfbWF0cml4LT5yb3dzICsgcm47CisgICAgICAgICAgICByb3cxLT5p bmRpY2F0ZV9lb2JfcCA9IHJvdy0+aW5kaWNhdGVfZW9iX3A7CisgICAgICAgICAgICByb3cxLT5p bmRpY2F0ZV9ib3R0b21fbGluZV9wID0gcm93LT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wOworICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgTGlzcF9PYmplY3Qg YnVmID0gdy0+Y29udGVudHM7CisgIENIRUNLX0JVRkZFUiAoYnVmKTsKKyAgYm9vbCBhdXRvX2hz Y3JvbGxfbW9kZV9wID0gRVEgKEZidWZmZXJfbG9jYWxfdmFsdWUgKFFhdXRvX2hzY3JvbGxfbW9k ZSwgYnVmKSwgUWN1cnJlbnRfbGluZSk7CisgIC8qIEVYQU1QTEU6ICAoc2Nyb2xsLWxlZnQgNSkg Ki8KKyAgYm9vbCBoc2NsX2FsbF90ZW1wX3AgPSAody0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAorICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiB3LT5taW5faHNjcm9sbCA9PSAwKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXggPCBh bmQgZG8gbm90aGluZy4gKi8KKyAgYm9vbCBoc2NsX2FsbF9wZXJtXzBfcCA9ICh3LT5zdXNwZW5k X2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9faHNjcm9s bF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09IHctPmhzY3JvbGwpOwor ICAvKiBFWEFNUExFOiAgQy11IEMteCA8IGFuZCBkbyBzb21ldGhpbmcgZWxzZSBiZXNpZGVzIGhv cml6b250YWxseSBzY3JvbGxpbmcgdGhlCisgICAgICAgICAgICAgICBjdXJyZW50IGxpbmUgZGlm ZmVyZW50bHkuCisgICAgICAgICAgICAgICBDdXJyZW50IGxpbmUgaXMgX25vdF8gaG9yaXpvbnRh bGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfYWxsX3Blcm1fMV9wID0g KCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5o c2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xs ID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09IHct PmhzY3JvbGwpOworICAvKiBFWEFNUExFOiAgQy11IEMteCA8IGFuZCAuLi4KKyAgICAgICAgICAg ICAgIEN1cnJlbnQgbGluZSBpcyBfbm90XyBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlmZmVyZW50 bHkuICovCisgIGJvb2wgaHNjbF9hbGxfcGVybV8yX3AgPSAoIXctPnN1c3BlbmRfYXV0b19oc2Ny b2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmhzY3JvbGwgPT0gMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsICE9IHctPmhzY3JvbGwpOworICAvKiBFWEFN UExFOiAgKHNjcm9sbC1sZWZ0IDUpOyBhbmQsIHRoZW4gcHJlc3MgdGhlIGxlZnQgYXJyb3cga2V5 IG9uZSB0aW1lLgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIF9pc18gaG9yaXpvbnRhbGx5 IHNjcm9sbGVkIGRpZmZlcmVudGx5LiovCisgIGJvb2wgaHNjbF90ZW1wX3AgPSAoIXctPnN1c3Bl bmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21v ZGVfcAorICAgICAgICAgICAgICAgICAgICAgICYmIHctPmhzY3JvbGwgPiAwCisgICAgICAgICAg ICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgPT0gMCk7CisgIC8qIEVYQU1QTEU6ICBDLXUg Qy14IDwgYW5kIGRvIHNvbWV0aGluZyB0aGF0IGNhdXNlcyB0aGUgY3VycmVudCBsaW5lIHRvIGJl CisgICAgICAgICAgICAgICBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlmZmVyZW50bHkuCisgICAg ICAgICAgICAgICBDdXJyZW50IGxpbmUgX2lzXyBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlmZmVy ZW50bHkuICovCisgIGJvb2wgaHNjbF9wZXJtX3AgPSAoIXctPnN1c3BlbmRfYXV0b19oc2Nyb2xs CisgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAorICAgICAgICAg ICAgICAgICAgICAgICYmIHctPmhzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAgJiYg dy0+bWluX2hzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3Jv bGwgIT0gdy0+aHNjcm9sbCk7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUp OworICBmb3IgKHkgPSB3LT52c2Nyb2xsLCBybiA9IDA7CisgICAgICAgeSA8IHliICYmIHJuIDwg bnJvd3M7CisgICAgICAgeSArPSByb3ctPmhlaWdodCwgcm4rKykKKyAgICB7CisgIGludCBsZWZ0 LCByaWdodDsKKyAgdW5zaWduZWQgbGVmdF9mYWNlX2lkLCByaWdodF9mYWNlX2lkOworICBpbnQg bGVmdF9vZmZzZXQsIHJpZ2h0X29mZnNldDsKKyAgYm9vbCBwZXJpb2RpY19wOworICByb3cgPSB3 LT5kZXNpcmVkX21hdHJpeC0+cm93cyArIHJuOworICBjdXIgPSB3LT5jdXJyZW50X21hdHJpeC0+ cm93cyArIHJuOworICBpbnQgdnBvc19kZXNpcmVkID0gTUFUUklYX1JPV19WUE9TICh3LT5kZXNp cmVkX21hdHJpeC0+cm93cyArIHJuLCB3LT5kZXNpcmVkX21hdHJpeCk7CisgIGludCB2cG9zX2N1 cnJlbnQgPSBNQVRSSVhfUk9XX1ZQT1MgKHctPmN1cnJlbnRfbWF0cml4LT5yb3dzICsgcm4sIHct PmN1cnJlbnRfbWF0cml4KTsKKyAgaW50IG1jX2xlZnRfZnJpbmdlX2JpdG1hcCA9IE1DX05PX0ZS SU5HRV9CSVRNQVA7CisgIGludCBtY19sZWZ0X2ZyaW5nZV9mYWNlX2lkID0gREVGQVVMVF9GQUNF X0lEOworICBpbnQgbWNfcmlnaHRfZnJpbmdlX2JpdG1hcCA9IE1DX05PX0ZSSU5HRV9CSVRNQVA7 CisgIGludCBtY19yaWdodF9mcmluZ2VfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgZm9y IChpbnQgZWx0ID0gMDsgZWx0IDwgdy0+Y2hfZWx0cy51c2VkOyArK2VsdCkKKyAgICB7CisgICAg ICBpbnQgeCA9IHctPmNoX2VsdHMuY2FjaGVzW2VsdF0ueDsKKyAgICAgIGludCBmeCA9IHctPmNo X2VsdHMuY2FjaGVzW2VsdF0uZng7CisgICAgICBpbnQgeSA9IHctPmNoX2VsdHMuY2FjaGVzW2Vs dF0ueTsKKyAgICAgIGludCBmeSA9IHctPmNoX2VsdHMuY2FjaGVzW2VsdF0uZnk7CisgICAgICBp bnQgaHBvcyA9IHctPmNoX2VsdHMuY2FjaGVzW2VsdF0uaHBvczsKKyAgICAgIGludCB2cG9zID0g dy0+Y2hfZWx0cy5jYWNoZXNbZWx0XS52cG9zOworICAgICAgaW50IHdkID0gdy0+Y2hfZWx0cy5j YWNoZXNbZWx0XS53ZDsKKyAgICAgIGludCBoID0gdy0+Y2hfZWx0cy5jYWNoZXNbZWx0XS5oOwor ICAgICAgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSA9IHctPmNoX2VsdHMuY2FjaGVz W2VsdF0uY3Vyc29yX3R5cGU7CisgICAgICBpbnQgY3Vyc29yX3dpZHRoID0gdy0+Y2hfZWx0cy5j YWNoZXNbZWx0XS5jdXJzb3Jfd2lkdGg7CisgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZyA9IHsu cmVkID0gdy0+Y2hfZWx0cy5jYWNoZXNbZWx0XS5mb3JlZ3JvdW5kLnJlZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9IHctPmNoX2VsdHMuY2FjaGVzW2VsdF0uZm9yZWdy b3VuZC5ncmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ibHVlID0gdy0+Y2hf ZWx0cy5jYWNoZXNbZWx0XS5mb3JlZ3JvdW5kLmJsdWV9OworICAgICAgc3RydWN0IG1jX1JHQiBs c2xfYmcgPSB7LnJlZCA9IHctPmNoX2VsdHMuY2FjaGVzW2VsdF0uYmFja2dyb3VuZC5yZWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSB3LT5jaF9lbHRzLmNhY2hlc1tl bHRdLmJhY2tncm91bmQuZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYmx1 ZSA9IHctPmNoX2VsdHMuY2FjaGVzW2VsdF0uYmFja2dyb3VuZC5ibHVlfTsKKyAgICAgIGJvb2wg YWN0aXZlX3AgPSB3LT5jaF9lbHRzLmNhY2hlc1tlbHRdLmFjdGl2ZV9wOworICAgICAgZW51bSBt Y19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gdy0+Y2hfZWx0cy5jYWNoZXNbZWx0XS5nbHlwaF9mbGF2 b3I7CisgICAgICBib29sIGVuYWJsZWRfcCA9IHctPmNoX2VsdHMuY2FjaGVzW2VsdF0uZW5hYmxl ZF9wOworICAgICAgaWYgKCh2cG9zID09IHZwb3NfZGVzaXJlZCB8fCB2cG9zID09IHZwb3NfY3Vy cmVudCkKKyAgICAgICAgICAmJiBnbHlwaF9mbGF2b3IgPT0gTUNfT1ZFUkxBWV9BUlJPV19CSVRN QVAKKyAgICAgICAgICAmJiAhaHNjbF9hbGxfdGVtcF9wCisgICAgICAgICAgJiYgIWhzY2xfdGVt cF9wCisgICAgICAgICAgJiYgIWhzY2xfcGVybV9wCisgICAgICAgICAgJiYgIWhzY2xfYWxsX3Bl cm1fMF9wCisgICAgICAgICAgJiYgIWhzY2xfYWxsX3Blcm1fMV9wCisgICAgICAgICAgJiYgIWhz Y2xfYWxsX3Blcm1fMl9wCisgICAgICAgICAgJiYgZW5hYmxlZF9wKQorICAgICAgICB7CisgICAg ICAgICAgaW50IGZyaW5nZV9iaXRtYXAgPSBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgICAg IGVudW0gZmFjZV9pZCBvdmVybGF5X2Fycm93X2ZhY2VfaWQgPQorICAgICAgICAgICAgKCFhY3Rp dmVfcAorICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2Ug KHcsIGYsIGludGVybiAoIistb3ZlcmxheS1hcnJvdy1pbmFjdGl2ZS1mYWNlIiksIHRydWUpCisg ICAgICAgICAgICA6IChhY3RpdmVfcCkKKyAgICAgICAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFj ZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFycm93LWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAg ICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgIG1jX2xlZnRfZnJpbmdlX2ZhY2VfaWQg PSAoY3Vyc29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyBvdmVybGF5X2Fycm93X2ZhY2VfaWQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgIGlm ICh3LT5oc2Nyb2xsICE9IDApCisgICAgICAgICAgICBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2Zy aW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistb3ZlcmxheS1hcnJvdyIpLCBmYWxzZSwgdHJ1ZSk7 CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRf ZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1vdmVybGF5LWFycm93IiksIHRydWUsIHRydWUp OworICAgICAgICAgIG1jX2xlZnRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBNQ19M RUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g ZnJpbmdlX2JpdG1hcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1DX05P X0ZSSU5HRV9CSVRNQVA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHZwb3MgPT0gdnBv c19kZXNpcmVkIHx8IHZwb3MgPT0gdnBvc19jdXJyZW50KQorICAgICAgICAgICAgICAgICAmJiBn bHlwaF9mbGF2b3IgPT0gTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAKKyAgICAgICAgICAgICAgICAg JiYgKGhzY2xfYWxsX3RlbXBfcAorICAgICAgICAgICAgICAgICAgICAgfHwgaHNjbF9hbGxfcGVy bV8wX3AKKyAgICAgICAgICAgICAgICAgICAgIHx8IGhzY2xfYWxsX3Blcm1fMV9wCisgICAgICAg ICAgICAgICAgICAgICB8fCBoc2NsX2FsbF9wZXJtXzJfcAorICAgICAgICAgICAgICAgICAgICAg fHwgaHNjbF90ZW1wX3AKKyAgICAgICAgICAgICAgICAgICAgIHx8IGhzY2xfcGVybV9wKQorICAg ICAgICAgICAgICAgICAmJiBlbmFibGVkX3ApCisgICAgICAgICAgeworICAgICAgICAgICAgaW50 IGZyaW5nZV9iaXRtYXAgPSBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgICAgICAgZW51bSBm YWNlX2lkIG92ZXJsYXlfYXJyb3dfZmFjZV9pZCA9CisgICAgICAgICAgICAgICghYWN0aXZlX3AK KyAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNo X2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICAgICAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFycm93LWhzY2wtaW5hY3RpdmUtZmFjZSIpLCB0cnVl KQorICAgICAgICAgICAgICA6IChhY3RpdmVfcCkKKyAgICAgICAgICAgICAgICA/IGxvb2t1cF9u YW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ctaHNjbC1mYWNlIiksIHRy dWUpCisgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgICAgbWNfbGVm dF9mcmluZ2VfZmFjZV9pZCA9IChjdXJzb3JfdHlwZSA9PSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVAp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb3ZlcmxheV9hcnJvd19m YWNlX2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9G QUNFX0lEOworICAgICAgICAgICAgaWYgKGhzY2xfYWxsX3Blcm1fMF9wKQorICAgICAgICAgICAg ICBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistaHNj bC1wZXJtIiksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgIGVsc2UgaWYgKGhzY2xfYWxs X3Blcm1fMV9wKQorICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdl X2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgdHJ1ZSwgZmFsc2UpOworICAgICAg ICAgICAgICAgIGVsc2UgaWYgKGhzY2xfYWxsX3Blcm1fMl9wKQorICAgICAgICAgICAgICAgICAg ZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wt cGVybSIpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoc2NsX3Bl cm1fcCkKKyAgICAgICAgICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2Vf Yml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAoaHNjbF9hbGxfdGVtcF9wKQorICAgICAgICAgICAgICAgICAg ICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1o c2NsLXRlbXAiKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm IChoc2NsX3RlbXBfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBt Y19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXRlbXAiKSwgdHJ1ZSwgZmFs c2UpOworICAgICAgICAgICAgbWNfbGVmdF9mcmluZ2VfYml0bWFwID0gKGN1cnNvcl90eXBlID09 IE1DX0xFRlRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IGZyaW5nZV9iaXRtYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYg KCh2cG9zID09IHZwb3NfZGVzaXJlZCB8fCB2cG9zID09IHZwb3NfY3VycmVudCkKKyAgICAgICAg ICAgICAgICAgICAgJiYgKGdseXBoX2ZsYXZvciA9PSBNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hU X0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVW RVJTRURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAg ICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5HTEUKKyAgICAgICAgICAgICAg ICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cK KyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9W RVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBo X2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGds eXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAg ICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIKQorICAg ICAgICAgICAgICAgICAgICAmJiBlbmFibGVkX3ApCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIExpc3BfT2JqZWN0IGJpdG1hcF9mbGF2b3IgPSAoZ2x5cGhfZmxhdm9yID09IE1DX0hPTExP V19SRUNUQU5HTEVfUklHSFRfQVJST1cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/IFFtY19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF9mbGF2b3IgPT0gTUNfUkVW RVJTRURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfcmV2ZXJzZWRfaG9sbG93X3JlY3RhbmdsZV9y aWdodF9hcnJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAo Z2x5cGhfZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5HTEUpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX2hvbGxvd19yZWN0YW5nbGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19W RVJUSUNBTF9CQVJfUklHSFRfQVJST1cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvdworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVS U0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPyBRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF9mbGF2 b3IgPT0gTUNfVkVSVElDQUxfQkFSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/IFFtY192ZXJ0aWNhbF9iYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9C QVIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX3Jl dmVyc2VkX3ZlcnRpY2FsX2JhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX3ZlcnRpY2FsX2Jh cl9iYWNrc2xhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog UW5pbDsKKyAgICAgICAgICAgICAgbWNfcmlnaHRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlw ZSA9PSBNQ19SSUdIVF9GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gbG9va3VwX2ZyaW5nZV9iaXRtYXAgKGJpdG1hcF9mbGF2b3IpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNQ19OT19GUklOR0VfQklUTUFQ OworICAgICAgICAgICAgICBtY19yaWdodF9mcmluZ2VfZmFjZV9pZCA9CisgICAgICAgICAgICAg ICAgKGN1cnNvcl90eXBlID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAKKyAgICAgICAgICAgICAg ICAgJiYgKGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hU X0FSUk9XCisgICAgICAgICAgICAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJT RURfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgICB8fCBnbHlw aF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSKSkKKyAgICAgICAgICAgICAgICAg ID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmV2ZXJzZWQtdmVydGljYWwt YmFyLWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAgICAgICAgICA6IChjdXJzb3JfdHlwZSA9PSBNQ19S SUdIVF9GUklOR0VfQklUTUFQCisgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9 IE1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAg ICAgICAmJiBnbHlwaF9mbGF2b3IgIT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FS Uk9XCisgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVSU0VEX1ZF UlRJQ0FMX0JBUikKKyAgICAgICAgICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYs IGludGVybiAoIistdmVydGljYWwtYmFyLWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAgICAgICAgICA6 IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKCFy b3ctPmVuYWJsZWRfcCkKKyAgICAgICAgcm93ID0gY3VyOworICAgICAgbGVmdF9mYWNlX2lkID0g cmlnaHRfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgIGxlZnRfb2Zmc2V0ID0gcmln aHRfb2Zmc2V0ID0gMDsKKyAgICAgIHBlcmlvZGljX3AgPSAwOworICAgICAgLyogRGVjaWRlIHdo aWNoIGJpdG1hcCB0byBkcmF3IGluIHRoZSBsZWZ0IGZyaW5nZS4gICovCisgICAgICBpZiAoV0lO RE9XX0xFRlRfRlJJTkdFX1dJRFRIICh3KSA9PSAwKQorICAgICAgICBsZWZ0ID0gTUNfTk9fRlJJ TkdFX0JJVE1BUDsKKyAgICAgIGVsc2UgaWYgKHJvdy0+bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXAg IT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgeworICAgICAgICAgIGxlZnQgPSByb3ct PmxlZnRfdXNlcl9mcmluZ2VfYml0bWFwOworICAgICAgICAgIGxlZnRfZmFjZV9pZCA9IHJvdy0+ bGVmdF91c2VyX2ZyaW5nZV9mYWNlX2lkOworICAgICAgICB9CisgICAgICBlbHNlIGlmICgoIXJv dy0+cmV2ZXJzZWRfcCAmJiByb3ctPnRydW5jYXRlZF9vbl9sZWZ0X3ApCisgICAgICAgICAgICAg ICB8fCAocm93LT5yZXZlcnNlZF9wICYmIHJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApKQorICAg ICAgICBsZWZ0ID0gTUNfTEVGVF9GUklOR0UgKDAsIFF0cnVuY2F0aW9uLCAwKTsKKyAgICAgIGVs c2UgaWYgKHJvdy0+aW5kaWNhdGVfYm9iX3AgJiYgRVEgKGJvdW5kYXJ5X3RvcCwgUWxlZnQpKQor ICAgICAgICB7CisgICAgICAgICAgbGVmdCA9ICgocm93LT5pbmRpY2F0ZV9lb2JfcCAmJiBFUSAo Ym91bmRhcnlfYm90LCBRbGVmdCkpCisgICAgICAgICAgICAgICAgID8gTUNfTEVGVF9GUklOR0Ug KDEsIFF0b3BfYm90dG9tLCB0b3Bfcm93X2VuZHNfYXRfenZfcCkKKyAgICAgICAgICAgICAgICAg OiBNQ19MRUZUX0ZSSU5HRSAoMiwgUXRvcCwgMCkpOworICAgICAgICAgIGlmICh0b3BfaW5kX21p bl95ID49IDApCisgICAgICAgICAgICBsZWZ0X29mZnNldCA9IHRvcF9pbmRfbWluX3kgLSByb3ct Pnk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVfZW9iX3AgJiYgRVEg KGJvdW5kYXJ5X2JvdCwgUWxlZnQpKQorICAgICAgICB7CisgICAgICAgICAgbGVmdCA9IE1DX0xF RlRfRlJJTkdFICgzLCBRYm90dG9tLCBib3Rfcm93X2VuZHNfYXRfenZfcCk7CisgICAgICAgICAg aWYgKGJvdF9pbmRfbWF4X3kgPj0gMCkKKyAgICAgICAgICAgIGxlZnRfb2Zmc2V0ID0gYm90X2lu ZF9tYXhfeSAtIChyb3ctPnkgKyByb3ctPnZpc2libGVfaGVpZ2h0KTsKKyAgICAgICAgfQorICAg ICAgZWxzZSBpZiAoKCFyb3ctPnJldmVyc2VkX3AgJiYgTUFUUklYX1JPV19DT05USU5VQVRJT05f TElORV9QIChyb3cpKQorICAgICAgICAgICAgICAgfHwgKHJvdy0+cmV2ZXJzZWRfcCAmJiByb3ct PmNvbnRpbnVlZF9wKSkKKyAgICAgICAgbGVmdCA9IE1DX0xFRlRfRlJJTkdFICg0LCBRY29udGlu dWF0aW9uLCAwKTsKKyAgICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVfZW1wdHlfbGluZV9wICYm IEVRIChlbXB0eV9wb3MsIFFsZWZ0KSkKKyAgICAgICAgbGVmdCA9IE1DX0xFRlRfRlJJTkdFICg1 LCBRZW1wdHlfbGluZSwgMCk7CisgICAgICBlbHNlIGlmIChyb3ctPmluZGljYXRlX3RvcF9saW5l X3AgJiYgRVEgKGFycm93X3RvcCwgUWxlZnQpKQorICAgICAgICB7CisgICAgICAgICAgbGVmdCA9 IE1DX0xFRlRfRlJJTkdFICg2LCBRdXAsIDApOworICAgICAgICAgIGlmICh0b3BfaW5kX21pbl95 ID49IDApCisgICAgICAgICAgICBsZWZ0X29mZnNldCA9IHRvcF9pbmRfbWluX3kgLSByb3ctPnk7 CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVfYm90dG9tX2xpbmVfcCAm JiBFUSAoYXJyb3dfYm90LCBRbGVmdCkpCisgICAgICAgIHsKKyAgICAgICAgICBsZWZ0ID0gTUNf TEVGVF9GUklOR0UgKDcsIFFkb3duLCAwKTsKKyAgICAgICAgICBpZiAoYm90X2luZF9tYXhfeSA+ PSAwKQorICAgICAgICAgICAgbGVmdF9vZmZzZXQgPSBib3RfaW5kX21heF95IC0gKHJvdy0+eSAr IHJvdy0+dmlzaWJsZV9oZWlnaHQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGxl ZnQgPSBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgLyogRGVjaWRlIHdoaWNoIGJpdG1hcCB0 byBkcmF3IGluIHRoZSByaWdodCBmcmluZ2UuICAqLworICAgICAgaWYgKFdJTkRPV19SSUdIVF9G UklOR0VfV0lEVEggKHcpID09IDApCisgICAgICAgIHJpZ2h0ID0gTUNfTk9fRlJJTkdFX0JJVE1B UDsKKyAgICAgIGVsc2UgaWYgKHJvdy0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFwICE9IE1DX05P X0ZSSU5HRV9CSVRNQVApCisgICAgICAgIHsKKyAgICAgICAgICByaWdodCA9IHJvdy0+cmlnaHRf dXNlcl9mcmluZ2VfYml0bWFwOworICAgICAgICAgIHJpZ2h0X2ZhY2VfaWQgPSByb3ctPnJpZ2h0 X3VzZXJfZnJpbmdlX2ZhY2VfaWQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCghcm93LT5y ZXZlcnNlZF9wICYmIHJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisgICAgICAgICAgICAgICB8 fCAocm93LT5yZXZlcnNlZF9wICYmIHJvdy0+dHJ1bmNhdGVkX29uX2xlZnRfcCkpCisgICAgICAg IHJpZ2h0ID0gTUNfUklHSFRfRlJJTkdFICgwLCBRdHJ1bmNhdGlvbiwgMCk7CisgICAgICBlbHNl IGlmIChyb3ctPmluZGljYXRlX2JvYl9wICYmIEVRIChib3VuZGFyeV90b3AsIFFyaWdodCkpCisg ICAgICAgIHsKKyAgICAgICAgICByaWdodCA9ICgocm93LT5pbmRpY2F0ZV9lb2JfcCAmJiBFUSAo Ym91bmRhcnlfYm90LCBRcmlnaHQpKQorICAgICAgICAgICAgID8gTUNfUklHSFRfRlJJTkdFICgx LCBRdG9wX2JvdHRvbSwgdG9wX3Jvd19lbmRzX2F0X3p2X3ApCisgICAgICAgICAgICAgOiBNQ19S SUdIVF9GUklOR0UgKDIsIFF0b3AsIDApKTsKKyAgICAgICAgICBpZiAodG9wX2luZF9taW5feSA+ PSAwKQorICAgICAgICAgICAgcmlnaHRfb2Zmc2V0ID0gdG9wX2luZF9taW5feSAtIHJvdy0+eTsK KyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9lb2JfcCAmJiBFUSAoYm91 bmRhcnlfYm90LCBRcmlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgcmlnaHQgPSBNQ19SSUdI VF9GUklOR0UgKDMsIFFib3R0b20sIGJvdF9yb3dfZW5kc19hdF96dl9wKTsKKyAgICAgICAgICBp ZiAoYm90X2luZF9tYXhfeSA+PSAwKQorICAgICAgICAgICAgcmlnaHRfb2Zmc2V0ID0gYm90X2lu ZF9tYXhfeSAtIChyb3ctPnkgKyByb3ctPnZpc2libGVfaGVpZ2h0KTsKKyAgICAgICAgfQorICAg ICAgZWxzZSBpZiAoKCFyb3ctPnJldmVyc2VkX3AgJiYgcm93LT5jb250aW51ZWRfcCkKKyAgICAg ICAgICAgICAgIHx8IChyb3ctPnJldmVyc2VkX3AgJiYgTUFUUklYX1JPV19DT05USU5VQVRJT05f TElORV9QIChyb3cpKSkKKyAgICAgICAgcmlnaHQgPSBNQ19SSUdIVF9GUklOR0UgKDQsIFFjb250 aW51YXRpb24sIDApOworICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV90b3BfbGluZV9wICYm IEVRIChhcnJvd190b3AsIFFyaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICByaWdodCA9IE1D X1JJR0hUX0ZSSU5HRSAoNiwgUXVwLCAwKTsKKyAgICAgICAgICBpZiAodG9wX2luZF9taW5feSA+ PSAwKQorICAgICAgICAgICAgcmlnaHRfb2Zmc2V0ID0gdG9wX2luZF9taW5feSAtIHJvdy0+eTsK KyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wICYm IEVRIChhcnJvd19ib3QsIFFyaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICByaWdodCA9IE1D X1JJR0hUX0ZSSU5HRSAoNywgUWRvd24sIDApOworICAgICAgICAgIGlmIChib3RfaW5kX21heF95 ID49IDApCisgICAgICAgICAgICByaWdodF9vZmZzZXQgPSBib3RfaW5kX21heF95IC0gKHJvdy0+ eSArIHJvdy0+dmlzaWJsZV9oZWlnaHQpOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChyb3ct PmluZGljYXRlX2VtcHR5X2xpbmVfcCAmJiBFUSAoZW1wdHlfcG9zLCBRcmlnaHQpKQorICAgICAg ICByaWdodCA9IE1DX1JJR0hUX0ZSSU5HRSAoNSwgUWVtcHR5X2xpbmUsIDApOworICAgICAgZWxz ZQorICAgICAgICByaWdodCA9IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICBwZXJpb2RpY19w ID0gKGdldF9mcmluZ2VfYml0bWFwX2RhdGEgKGxlZnQpLT5wZXJpb2QgIT0gMAorICAgICAgICAg ICAgICAgICAgICB8fCBnZXRfZnJpbmdlX2JpdG1hcF9kYXRhIChyaWdodCktPnBlcmlvZCAhPSAw KTsKKyAgICAgIGlmIChyb3ctPnkgIT0gY3VyLT55CisgICAgICAgICAgfHwgcm93LT52aXNpYmxl X2hlaWdodCAhPSBjdXItPnZpc2libGVfaGVpZ2h0CisgICAgICAgICAgfHwgcm93LT5lbmRzX2F0 X3p2X3AgIT0gY3VyLT5lbmRzX2F0X3p2X3AKKyAgICAgICAgICB8fCBsZWZ0ICE9IGN1ci0+bGVm dF9mcmluZ2VfYml0bWFwCisgICAgICAgICAgfHwgcmlnaHQgIT0gY3VyLT5yaWdodF9mcmluZ2Vf Yml0bWFwCisgICAgICAgICAgfHwgbGVmdF9mYWNlX2lkICE9IGN1ci0+bGVmdF9mcmluZ2VfZmFj ZV9pZAorICAgICAgICAgIHx8IHJpZ2h0X2ZhY2VfaWQgIT0gY3VyLT5yaWdodF9mcmluZ2VfZmFj ZV9pZAorICAgICAgICAgIHx8IGxlZnRfb2Zmc2V0ICE9IGN1ci0+bGVmdF9mcmluZ2Vfb2Zmc2V0 CisgICAgICAgICAgfHwgcmlnaHRfb2Zmc2V0ICE9IGN1ci0+cmlnaHRfZnJpbmdlX29mZnNldAor ICAgICAgICAgIHx8IHBlcmlvZGljX3AgIT0gY3VyLT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AK KyAgICAgICAgICB8fCBjdXItPnJlZHJhd19mcmluZ2VfYml0bWFwc19wKQorICAgICAgICB7Cisg ICAgICAgICAgcmVkcmF3X3AgPSAxLCByb3ctPnJlZHJhd19mcmluZ2VfYml0bWFwc19wID0gMTsK KyAgICAgICAgICBpZiAoIWtlZXBfY3VycmVudF9wKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBjdXItPnJlZHJhd19mcmluZ2VfYml0bWFwc19wID0gMTsKKyAgICAgICAgICAgICAgaWYg KG1jX2xlZnRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQCisgICAgICAgICAg ICAgICAgICB8fCBtY19yaWdodF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVAp CisgICAgICAgICAgICAgICAgY3VyLT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSBmYWxzZTsK KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjdXItPmZyaW5nZV9iaXRt YXBfcGVyaW9kaWNfcCA9IHBlcmlvZGljX3A7CisgICAgICAgICAgICAgIGlmIChtY19sZWZ0X2Zy aW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICBjdXIt PmxlZnRfZnJpbmdlX2JpdG1hcCA9IG1jX2xlZnRfZnJpbmdlX2JpdG1hcDsKKyAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX2JpdG1hcCA9IGxl ZnQ7CisgICAgICAgICAgICAgIGlmIChtY19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJ TkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBt Y19sZWZ0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgIGN1ci0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IGxlZnRfZmFjZV9pZDsKKyAgICAgICAg ICAgICAgaWYgKG1jX2xlZnRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQor ICAgICAgICAgICAgICAgIGN1ci0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gMDsKKyAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX29mZnNldCA9IGxl ZnRfb2Zmc2V0OworICAgICAgICAgICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBN Q19OT19GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgIGN1ci0+cmlnaHRfZnJpbmdlX2Jp dG1hcCA9IG1jX3JpZ2h0X2ZyaW5nZV9iaXRtYXA7CisgICAgICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgICAgY3VyLT5yaWdodF9mcmluZ2VfYml0bWFwID0gcmlnaHQ7CisgICAgICAg ICAgICAgIGlmIChtY19yaWdodF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVAp CisgICAgICAgICAgICAgICAgY3VyLT5yaWdodF9mcmluZ2VfZmFjZV9pZCA9IG1jX3JpZ2h0X2Zy aW5nZV9mYWNlX2lkOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGN1 ci0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQgPSByaWdodF9mYWNlX2lkOworICAgICAgICAgICAgICBp ZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAg ICAgICAgICAgIGN1ci0+cmlnaHRfZnJpbmdlX29mZnNldCA9IDA7CisgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgY3VyLT5yaWdodF9mcmluZ2Vfb2Zmc2V0ID0gcmlnaHRf b2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAocm93LT5vdmVybGF5 X2Fycm93X2JpdG1hcCA8IDApCisgICAgICAgIHJvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXAgPSBt Y19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCBRb3ZlcmxheV9hcnJvdywgMCwgMCk7Cisg ICAgICBpZiAocm93LT5vdmVybGF5X2Fycm93X2JpdG1hcCAhPSBjdXItPm92ZXJsYXlfYXJyb3df Yml0bWFwKQorICAgICAgICB7CisgICAgICAgICAgcmVkcmF3X3AgPSAxLCByb3ctPnJlZHJhd19m cmluZ2VfYml0bWFwc19wID0gMTsKKyAgICAgICAgICBpZiAoIWtlZXBfY3VycmVudF9wKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBjdXItPnJlZHJhd19mcmluZ2VfYml0bWFwc19wID0g MTsKKyAgICAgICAgICAgICAgY3VyLT5vdmVybGF5X2Fycm93X2JpdG1hcCA9IHJvdy0+b3Zlcmxh eV9hcnJvd19iaXRtYXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlmIChtY19s ZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUAorICAgICAgICAgIHx8IG1j X3JpZ2h0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgcm93 LT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgIHJvdy0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wID0gcGVyaW9kaWNfcDsKKyAgICAgIGlm IChtY19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAg cm93LT5sZWZ0X2ZyaW5nZV9iaXRtYXAgPSBtY19sZWZ0X2ZyaW5nZV9iaXRtYXA7CisgICAgICAg IGVsc2UKKyAgICAgICAgICByb3ctPmxlZnRfZnJpbmdlX2JpdG1hcCA9IGxlZnQ7CisgICAgICBp ZiAobWNfbGVmdF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisgICAgICAg IHJvdy0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IG1jX2xlZnRfZnJpbmdlX2ZhY2VfaWQ7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICByb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBsZWZ0X2ZhY2Vf aWQ7CisgICAgICBpZiAobWNfbGVmdF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRN QVApCisgICAgICAgIHJvdy0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gMDsKKyAgICAgICAgZWxzZQor ICAgICAgICAgIHJvdy0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gbGVmdF9vZmZzZXQ7CisgICAgICBp ZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAg ICByb3ctPnJpZ2h0X2ZyaW5nZV9iaXRtYXAgPSBtY19yaWdodF9mcmluZ2VfYml0bWFwOworICAg ICAgICBlbHNlCisgICAgICAgICAgcm93LT5yaWdodF9mcmluZ2VfYml0bWFwID0gcmlnaHQ7Cisg ICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQor ICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0gbWNfcmlnaHRfZnJpbmdlX2ZhY2Vf aWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0g cmlnaHRfZmFjZV9pZDsKKyAgICAgIGlmIChtY19yaWdodF9mcmluZ2VfYml0bWFwICE9IE1DX05P X0ZSSU5HRV9CSVRNQVApCisgICAgICAgIHJvdy0+cmlnaHRfZnJpbmdlX29mZnNldCA9IDA7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9vZmZzZXQgPSByaWdodF9v ZmZzZXQ7CisgICAgfQorICByZXR1cm4gcmVkcmF3X3AgJiYgIWtlZXBfY3VycmVudF9wOworfQor CitzdGF0aWMgTGlzcF9PYmplY3QgKmZyaW5nZV9mYWNlczsKKworLyogRHJhdyB0aGUgYml0bWFw IFdISUNIIGluIG9uZSBvZiB0aGUgbGVmdCBvciByaWdodCBmcmluZ2VzIG9mCisgICB3aW5kb3cg Vy4gIFJPVyBpcyB0aGUgZ2x5cGggcm93IGZvciB3aGljaCB0byBkaXNwbGF5IHRoZSBiaXRtYXA7 IGl0CisgICBkZXRlcm1pbmVzIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBhdCB3aGljaCB0aGUgYml0 bWFwIGhhcyB0byBiZQorICAgZHJhd24uCisgICBMRUZUX1AgaXMgMSBmb3IgbGVmdCBmcmluZ2Us IDAgZm9yIHJpZ2h0IGZyaW5nZS4KKyovCitzdGF0aWMgdm9pZAorbWNfZHJhd19mcmluZ2VfYml0 bWFwXzEgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IGxlZnRf cCwgaW50IG92ZXJsYXksIGludCB3aGljaCkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1F IChXSU5ET1dfRlJBTUUgKHcpKTsKKyAgc3RydWN0IGRyYXdfZnJpbmdlX2JpdG1hcF9wYXJhbXMg cDsKKyAgc3RydWN0IGZyaW5nZV9iaXRtYXAgKmZiOworICBpbnQgcGVyaW9kOworICBpbnQgZmFj ZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgaW50IG9mZnNldCwgaGVhZGVyX2xpbmVfaGVpZ2h0 OworICBwLm92ZXJsYXlfcCA9IChvdmVybGF5ICYgMSkgPT0gMTsKKyAgcC5jdXJzb3JfcCA9IChv dmVybGF5ICYgMikgPT0gMjsKKyAgaWYgKHdoaWNoICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisg ICAgeworICAgICAgb2Zmc2V0ID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobGVmdF9wKQorICAg ICAgeworICAgICAgICB3aGljaCA9IHJvdy0+bGVmdF9mcmluZ2VfYml0bWFwOworICAgICAgICBm YWNlX2lkID0gcm93LT5sZWZ0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICBvZmZzZXQgPSByb3ct PmxlZnRfZnJpbmdlX29mZnNldDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAg ICAgICAgIHdoaWNoID0gcm93LT5yaWdodF9mcmluZ2VfYml0bWFwOworICAgICAgICAgIGZhY2Vf aWQgPSByb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICAgIG9mZnNldCA9IHJvdy0+ cmlnaHRfZnJpbmdlX29mZnNldDsKKyAgICAgICAgfQorICBpZiAoZmFjZV9pZCA9PSBERUZBVUxU X0ZBQ0VfSUQpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgZmFjZSA9IGZyaW5nZV9mYWNlc1t3 aGljaF07CisgICAgICBmYWNlX2lkID0gTklMUCAoZmFjZSkgPyBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgUWZyaW5nZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsb29r dXBfZGVyaXZlZF9mYWNlICh3LCBmLCBmYWNlLCBGUklOR0VfRkFDRV9JRCwgMCk7CisgICAgICBp ZiAoZmFjZV9pZCA8IDApCisgICAgICAgIGZhY2VfaWQgPSBGUklOR0VfRkFDRV9JRDsKKyAgICB9 CisgIGZiID0gZ2V0X2ZyaW5nZV9iaXRtYXBfZGF0YSAod2hpY2gpOworICBwZXJpb2QgPSBmYi0+ cGVyaW9kOworICAvKiBDb252ZXJ0IHJvdyB0byBmcmFtZSBjb29yZGluYXRlcy4gICovCisgIHAu eSA9IFdJTkRPV19UT19GUkFNRV9QSVhFTF9ZICh3LCByb3ctPnkpICsgb2Zmc2V0OworICBwLndo aWNoID0gd2hpY2g7CisgIHAuYml0cyA9IGZiLT5iaXRzOworICBwLndkID0gZmItPndpZHRoOwor ICBwLmggPSBmYi0+aGVpZ2h0OworICBwLmRoID0gKHBlcmlvZCA+IDAgPyAocC55ICUgcGVyaW9k KSA6IDApOworICBwLmggLT0gcC5kaDsKKyAgLyogQWRqdXN0IHkgdG8gdGhlIG9mZnNldCBpbiB0 aGUgcm93IHRvIHN0YXJ0IGRyYXdpbmcgdGhlIGJpdG1hcC4gICovCisgIHN3aXRjaCAoZmItPmFs aWduKQorICAgIHsKKyAgICBjYXNlIEFMSUdOX0JJVE1BUF9DRU5URVI6CisgICAgICBwLnkgKz0g KHJvdy0+aGVpZ2h0IC0gcC5oKSAvIDI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFMSUdOX0JJ VE1BUF9CT1RUT006CisgICAgICBwLnkgKz0gKHJvdy0+dmlzaWJsZV9oZWlnaHQgLSBwLmgpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSBBTElHTl9CSVRNQVBfVE9QOgorICAgICAgYnJlYWs7Cisg ICAgfQorICBwLmZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQpOworICBpZiAocC5mYWNl ID09IE5VTEwpCisgICAgeworICAgICAgLyogVGhpcyBjb3VsZCBoYXBwZW4gYWZ0ZXIgY2xlYXJp bmcgZmFjZSBjYWNoZS4KKyAgIEJ1dCBpdCBzaG91bGRuJ3QgaGFwcGVuIGFueW1vcmUuICArK2tm cyAqLworICAgICAgcmV0dXJuOworICAgIH0KKyAgcHJlcGFyZV9mYWNlX2Zvcl9kaXNwbGF5IChm LCBwLmZhY2UpOworICAvKiBDbGVhciBsZWZ0IGZyaW5nZSBpZiBubyBiaXRtYXAgdG8gZHJhdyBv ciBpZiBiaXRtYXAgZG9lc24ndCBmaWxsCisgICAgIHRoZSBmcmluZ2UuICAqLworICBwLmJ4ID0g LTE7CisgIGhlYWRlcl9saW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcp OworICBwLmJ5ID0gV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcsIG1heCAoaGVhZGVyX2xpbmVf aGVpZ2h0LCByb3ctPnkpKTsKKyAgcC5ueSA9IHJvdy0+dmlzaWJsZV9oZWlnaHQ7CisgIGlmIChs ZWZ0X3ApCisgICAgeworICAgICAgaW50IHdkID0gV0lORE9XX0xFRlRfRlJJTkdFX1dJRFRIICh3 KTsKKyAgICAgIGludCB4ID0gd2luZG93X2JveF9sZWZ0ICh3LCAoV0lORE9XX0hBU19GUklOR0VT X09VVFNJREVfTUFSR0lOUyAodykKKyAgICAgICAgICAgPyBMRUZUX01BUkdJTl9BUkVBCisgICAg ICAgICAgIDogVEVYVF9BUkVBKSk7CisgICAgICBpZiAocC53ZCA+IHdkKQorICAgICAgICBwLndk ID0gd2Q7CisgICAgICBwLnggPSB4IC0gcC53ZCAtICh3ZCAtIHAud2QpIC8gMjsKKyAgICAgIGlm IChwLndkIDwgd2QgfHwgcC55ID4gcC5ieSB8fCBwLnkgKyBwLmggPCBwLmJ5ICsgcC5ueSkKKyAg ICAgICAgeworICAgICAgICAgIC8qIElmIFcgaGFzIGEgdmVydGljYWwgYm9yZGVyIHRvIGl0cyBs ZWZ0LCBkb24ndCBkcmF3IG92ZXIgaXQuICAqLworICAgICAgICAgIHdkIC09ICgoIVdJTkRPV19M RUZUTU9TVF9QICh3KQorICAgICAgICAgICAgLyogVGhpcyBjb3VsZCBiZSB3cm9uZyB3aGVuIHdl IGFsbG93IHdpbmRvdyBsb2NhbAorICAgICAgICAgICAgICAgcmlnaHQgZGl2aWRlcnMgLSBidXQg dGhlIHdpbmRvdyBvbiB0aGUgbGVmdCBpcyBoYXJkCisgICAgICAgICAgICAgICB0byBnZXQuICAq LworICAgICAgICAgICAgJiYgIUZSQU1FX1JJR0hUX0RJVklERVJfV0lEVEggKGYpCisgICAgICAg ICAgICAmJiAhV0lORE9XX0hBU19WRVJUSUNBTF9TQ1JPTExfQkFSICh3KQorICAgICAgICAgICAg LyogQnV0IGRvbid0IHJlZHVjZSB0aGUgZnJpbmdlIHdpZHRoIGlmIHRoZSB3aW5kb3cKKyAgICAg ICAgICAgICAgIGhhcyBhIGxlZnQgbWFyZ2luLCBiZWNhdXNlIHRoYXQgbWVhbnMgd2UgYXJlIG5v dAorICAgICAgICAgICAgICAgaW4gZGFuZ2VyIG9mIGRyYXdpbmcgb3ZlciB0aGUgdmVydGljYWwg Ym9yZGVyLAorICAgICAgICAgICAgICAgYW5kIE9UT0ggbGVhdmluZyBvdXQgdGhhdCBvbmUgcGl4 ZWwgbGVhdmVzIGJlaGluZAorICAgICAgICAgICAgICAgdHJhY2VzIG9mIHRoZSBjdXJzb3IsIGlm IGl0IHdhcyBpbiBjb2x1bW4gemVybworICAgICAgICAgICAgICAgYmVmb3JlIGRyYXdpbmcgbm9u LWVtcHR5IG1hcmdpbiBhcmVhLiAgKi8KKyAgICAgICAgICAgICYmIHctPmxlZnRfbWFyZ2luX2Nv bHMgPT0gMCkKKyAgICAgICAgICAgPyAxIDogMCk7CisgICAgICAgICAgcC5ieCA9IHggLSB3ZDsK KyAgICAgICAgICBwLm54ID0gd2Q7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7Cisg ICAgICBpbnQgeCA9IHdpbmRvd19ib3hfcmlnaHQgKHcsCisgICAgICAgIChXSU5ET1dfSEFTX0ZS SU5HRVNfT1VUU0lERV9NQVJHSU5TICh3KQorICAgICAgICAgPyBSSUdIVF9NQVJHSU5fQVJFQQor ICAgICAgICAgOiBURVhUX0FSRUEpKTsKKyAgICAgIGludCB3ZCA9IFdJTkRPV19SSUdIVF9GUklO R0VfV0lEVEggKHcpOworICAgICAgaWYgKHAud2QgPiB3ZCkKKyAgICAgICAgcC53ZCA9IHdkOwor ICAgICAgcC54ID0geCArICh3ZCAtIHAud2QpIC8gMjsKKyAgICAgIC8qIENsZWFyIHJpZ2h0IGZy aW5nZSBpZiBubyBiaXRtYXAgdG8gZHJhdyBvZiBpZiBiaXRtYXAgZG9lc24ndCBmaWxsCisgICB0 aGUgZnJpbmdlLiAgKi8KKyAgICAgIGlmIChwLndkIDwgd2QgfHwgcC55ID4gcC5ieSB8fCBwLnkg KyBwLmggPCBwLmJ5ICsgcC5ueSkKKyAgICAgICAgeworICAgICAgICAgIHAuYnggPSB4OworICAg ICAgICAgIHAubnggPSB3ZDsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKHAueCA+PSBXSU5ET1df Qk9YX0xFRlRfRURHRV9YICh3KQorICAgICAgJiYgKHAueCArIHAud2QpIDw9IFdJTkRPV19CT1hf TEVGVF9FREdFX1ggKHcpICsgV0lORE9XX1BJWEVMX1dJRFRIICh3KSkKKyAgICBGUkFNRV9SSUYg KGYpLT5kcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIHJvdywgJnApOworfQorCit2b2lkCittY19kcmF3 X2ZyaW5nZV9iaXRtYXAgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywg aW50IGxlZnRfcCwgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSkKK3sKKyAgaW50IG92 ZXJsYXkgPSAwOworICBpZiAobGVmdF9wID09IHJvdy0+cmV2ZXJzZWRfcCAmJiByb3ctPmN1cnNv cl9pbl9mcmluZ2VfcCkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBjdXJzb3IgPSBRbmlsOwor ICAgICAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE1DX0ZS QU1FRF9CT1g6CisgICAgICAgICAgaWYgKHJvdy0+dmlzaWJsZV9oZWlnaHQgPj0gU1RBTkRBUkRf QklUTUFQX0hFSUdIVCAoaG9sbG93X3JlY3RhbmdsZV9iaXRzKSkKKyAgICAgICAgICAgIGN1cnNv ciA9IFFob2xsb3c7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY3Vyc29yID0gUWhvbGxv d19zbWFsbDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNQ19IT0xMT1dfQk9YOgor ICAgICAgICAgIGlmIChyb3ctPnZpc2libGVfaGVpZ2h0ID49IFNUQU5EQVJEX0JJVE1BUF9IRUlH SFQgKGhvbGxvd19yZWN0YW5nbGVfYml0cykpCisgICAgICAgICAgICBjdXJzb3IgPSBRaG9sbG93 OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cnNvciA9IFFob2xsb3dfc21hbGw7Cisg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUNfRklMTEVEX0JPWDoKKyAgICAgICAgICBj dXJzb3IgPSBRYm94OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1DX0JBUjoKKyAg ICAgICAgICBjdXJzb3IgPSBRYmFyOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1D X0hCQVI6CisgICAgICAgICAgY3Vyc29yID0gUWhiYXI7CisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDoKKyAgICAgICAgY2FzZSBNQ19OT19DVVJTT1I6 CisgICAgICAgIGNhc2UgTUNfUklHSFRfRlJJTkdFX0JJVE1BUDoKKyAgICAgICAgY2FzZSBNQ19M RUZUX0ZSSU5HRV9CSVRNQVA6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgdy0+cGh5c19j dXJzb3Jfb25fcCA9IDA7CisgICAgICAgICAgcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSAwOwor ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAoIU5JTFAgKGN1cnNvcikpCisg ICAgICAgIHsKKyAgICAgICAgICBpbnQgYm0gPSBtY19nZXRfbG9naWNhbF9jdXJzb3JfYml0bWFw ICh3LCBjdXJzb3IpOworICAgICAgICAgIGlmIChibSAhPSBNQ19OT19GUklOR0VfQklUTUFQKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBtY19kcmF3X2ZyaW5nZV9iaXRtYXBfMSAodywg cm93LCBsZWZ0X3AsIDIsIGJtKTsKKyAgICAgICAgICAgICAgb3ZlcmxheSA9IEVRIChjdXJzb3Is IFFib3gpID8gMyA6IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIG1jX2Ry YXdfZnJpbmdlX2JpdG1hcF8xICh3LCByb3csIGxlZnRfcCwgb3ZlcmxheSwgTUNfTk9fRlJJTkdF X0JJVE1BUCk7CisgIGlmIChsZWZ0X3AgJiYgcm93LT5vdmVybGF5X2Fycm93X2JpdG1hcCAhPSBN Q19OT19GUklOR0VfQklUTUFQKQorICAgIG1jX2RyYXdfZnJpbmdlX2JpdG1hcF8xICh3LCByb3cs IDEsIDEsIHJvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXApOworfQorCisvKiBlbmQgTVVMVElQTEUt Q1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogI2RlZmluZSBOT19GUklO R0VfQklUTUFQIDAKICNkZWZpbmUgVU5ERUZfRlJJTkdFX0JJVE1BUCAxCiAjZGVmaW5lIE1BWF9T VEFOREFSRF9GUklOR0VfQklUTUFQUyBBUlJBWUVMVFMgKHN0YW5kYXJkX2JpdG1hcHMpCkBAIC0x NzAwLDYgKzMxOTAsMTY4IEBAIFJldHVybiBuaWwgaWYgUE9TIGlzIG5vdCB2aXNpYmxlIGluIFdJ TkRPVy4gICovKQogdm9pZAogc3ltc19vZl9mcmluZ2UgKHZvaWQpCiB7CisKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgLyogKGdl dCAnZW1wdHktbGluZSAnZnJpbmdlKSA9PiAyMyA9PiB0aGUgbGFzdCBzdGFuZGFyZC1iaXRtYXAg YmVmb3JlIHRoaXMgb25lLgorICBTZWUgYGZyaW5nZS5lbGAuICovCisKKyAgLyogMjQgKi8KKyAg REVGU1lNIChRbWNfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93LCAiKy12ZXJ0aWNhbC1iYXItcmln aHQtYXJyb3ciKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNhbF9iYXJf cmlnaHRfYXJyb3csIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY192ZXJ0aWNhbF9iYXJf cmlnaHRfYXJyb3csIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyNCkpOworICAvKiAoZ2V0ICcrLXZl cnRpY2FsLWJhci1yaWdodC1hcnJvdyAnZnJpbmdlKSA9PiAyNCAqLworCisgIC8qIDI1ICovCisg IERFRlNZTSAoUW1jX3JldmVyc2VkX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvdywgIistcmV2ZXJz ZWQtdmVydGljYWwtYmFyLXJpZ2h0LWFycm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25z IChRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93LCBWZnJpbmdlX2JpdG1hcHMp OworICBGcHV0IChRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93LCBRZnJpbmdl LCBtYWtlX2ZpeG51bSAoMjUpKTsKKyAgLyogKGdldCAnKy1yZXZlcnNlZC12ZXJ0aWNhbC1iYXIt cmlnaHQtYXJyb3cgJ2ZyaW5nZSkgPT4gMjUgKi8KKworICAvKiAyNiAqLworICBERUZTWU0gKFFt Y19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93LCAiKy1ob2xsb3ctcmVjdGFuZ2xlLXJpZ2h0 LWFycm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfaG9sbG93X3JlY3Rhbmds ZV9yaWdodF9hcnJvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX2hvbGxvd19yZWN0 YW5nbGVfcmlnaHRfYXJyb3csIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyNikpOworICAvKiAoZ2V0 ICcrLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQtYXJyb3cgJ2ZyaW5nZSkgPT4gMjYgKi8KKworICAv KiAyNyAqLworICBERUZTWU0gKFFtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fy cm93LCAiKy1yZXZlcnNlZC1ob2xsb3ctcmVjdGFuZ2xlLXJpZ2h0LWFycm93Iik7CisgIFZmcmlu Z2VfYml0bWFwcyA9IEZjb25zIChRbWNfcmV2ZXJzZWRfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9h cnJvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3JldmVyc2VkX2hvbGxvd19yZWN0 YW5nbGVfcmlnaHRfYXJyb3csIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyNykpOworICAvKiAoZ2V0 ICcrLXJldmVyc2VkLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQtYXJyb3cgJ2ZyaW5nZSkgPT4gMjcg Ki8KKworICAvKiAyOCAqLworICBERUZTWU0gKFFtY19ob2xsb3dfcmVjdGFuZ2xlLCAiKy1ob2xs b3ctcmVjdGFuZ2xlIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfaG9sbG93X3Jl Y3RhbmdsZSwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX2hvbGxvd19yZWN0YW5nbGUs IFFmcmluZ2UsIG1ha2VfZml4bnVtICgyOCkpOworICAvKiAoZ2V0ICcrLWhvbGxvdy1yZWN0YW5n bGUgJ2ZyaW5nZSkgPT4gMjggKi8KKworICAvKiAyOSAqLworICBERUZTWU0gKFFtY192ZXJ0aWNh bF9iYXIsICIrLXZlcnRpY2FsLWJhciIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1j X3ZlcnRpY2FsX2JhciwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jh ciwgUWZyaW5nZSwgbWFrZV9maXhudW0gKDI5KSk7CisgIC8qIChnZXQgJystdmVydGljYWwtYmFy ICdmcmluZ2UpID0+IDI5ICovCisKKyAgLyogMzAgKi8KKyAgREVGU1lNIChRbWNfcmV2ZXJzZWRf dmVydGljYWxfYmFyLCAiKy1yZXZlcnNlZC12ZXJ0aWNhbC1iYXIiKTsKKyAgVmZyaW5nZV9iaXRt YXBzID0gRmNvbnMgKFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXIsIFZmcmluZ2VfYml0bWFwcyk7 CisgIEZwdXQgKFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXIsIFFmcmluZ2UsIG1ha2VfZml4bnVt ICgzMCkpOworICAvKiAoZ2V0ICcrLXJldmVyc2VkLXZlcnRpY2FsLWJhciAnZnJpbmdlKSA9PiAz MCAqLworCisgIC8qIDMxICovCisgIERFRlNZTSAoUW1jX2JhY2tzbGFzaCwgIistYmFja3NsYXNo Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfYmFja3NsYXNoLCBWZnJpbmdlX2Jp dG1hcHMpOworICBGcHV0IChRbWNfYmFja3NsYXNoLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzEp KTsKKyAgLyogKGdldCAnKy1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMzEgKi8KKworICAvKiAzMiAq LworICBERUZTWU0gKFFtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoLCAiKy12ZXJ0aWNhbC1iYXIt YmFja3NsYXNoIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxfYmFy X2JhY2tzbGFzaCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jhcl9i YWNrc2xhc2gsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgzMikpOworICAvKiAoZ2V0ICcrLXZlcnRp Y2FsLWJhci1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMzIgKi8KKworICAvKiAzMyAqLworICBERUZT WU0gKFFtY19waWxjcm93LCAiKy1waWxjcm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25z IChRbWNfcGlsY3JvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3BpbGNyb3csIFFm cmluZ2UsIG1ha2VfZml4bnVtICgzMykpOworICAvKiAoZ2V0ICcrLXBpbGNyb3cgJ2ZyaW5nZSkg PT4gMzMgKi8KKworICAvKiAzNCAqLworICBERUZTWU0gKFFtY19zbWlsZXlfZmFjZSwgIistc21p bGV5LWZhY2UiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zbWlsZXlfZmFjZSwg VmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NtaWxleV9mYWNlLCBRZnJpbmdlLCBtYWtl X2ZpeG51bSAoMzQpKTsKKyAgLyogKGdldCAnKy1zbWlsZXktZmFjZSAnZnJpbmdlKSA9PiAzNCAq LworCisgIC8qIDM1ICovCisgIERFRlNZTSAoUW1jX3NpbmdsZV9hbmdsZV9yaWdodCwgIistc2lu Z2xlLWFuZ2xlLXJpZ2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfc2luZ2xl X2FuZ2xlX3JpZ2h0LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfc2luZ2xlX2FuZ2xl X3JpZ2h0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzUpKTsKKyAgLyogKGdldCAnKy1yaWdodC1z aW5nbGUtYW5nbGUgJ2ZyaW5nZSkgPT4gMzUgKi8KKworICAvKiAzNiAqLworICBERUZTWU0gKFFt Y19zaW5nbGVfYW5nbGVfbGVmdCwgIistc2luZ2xlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5nZV9i aXRtYXBzID0gRmNvbnMgKFFtY19zaW5nbGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBzKTsK KyAgRnB1dCAoUW1jX3NpbmdsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzYp KTsKKyAgLyogKGdldCAnKy1sZWZ0LWRvdWJsZS1hbmdsZSAnZnJpbmdlKSA9PiAzNiAqLworCisg IC8qIDM3ICovCisgIERFRlNZTSAoUW1jX2RvdWJsZV9hbmdsZV9yaWdodCwgIistZG91YmxlLWFu Z2xlLXJpZ2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfZG91YmxlX2FuZ2xl X3JpZ2h0LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfZG91YmxlX2FuZ2xlX3JpZ2h0 LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzcpKTsKKyAgLyogKGdldCAnKy1yaWdodC1kb3VibGUt YW5nbGUgJ2ZyaW5nZSkgPT4gMzcgKi8KKworICAvKiAzOCAqLworICBERUZTWU0gKFFtY19kb3Vi bGVfYW5nbGVfbGVmdCwgIistZG91YmxlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5nZV9iaXRtYXBz ID0gRmNvbnMgKFFtY19kb3VibGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1 dCAoUW1jX2RvdWJsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzgpKTsKKyAg LyogKGdldCAnKy1sZWZ0LWRvdWJsZS1hbmdsZSAnZnJpbmdlKSA9PiAzOCAqLworCisgIC8qIDM5 ICovCisgIERFRlNZTSAoUW1jX3RyaXBsZV9hbmdsZV9yaWdodCwgIistdHJpcGxlLWFuZ2xlLXJp Z2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdHJpcGxlX2FuZ2xlX3JpZ2h0 LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdHJpcGxlX2FuZ2xlX3JpZ2h0LCBRZnJp bmdlLCBtYWtlX2ZpeG51bSAoMzkpKTsKKyAgLyogKGdldCAnKy10cmlwbGUtYW5nbGUtcmlnaHQg J2ZyaW5nZSkgPT4gMzkgKi8KKworICAvKiA0MCAqLworICBERUZTWU0gKFFtY190cmlwbGVfYW5n bGVfbGVmdCwgIistdHJpcGxlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNv bnMgKFFtY190cmlwbGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1j X3RyaXBsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDApKTsKKyAgLyogKGdl dCAnKy10cmlwbGUtYW5nbGUtbGVmdCAnZnJpbmdlKSA9PiA0MCAqLworCisgIC8qIDQxICovCisg IERFRlNZTSAoUW1jX3NpbmdsZV9hbmdsZV91cCwgIistc2luZ2xlLWFuZ2xlLXVwIik7CisgIFZm cmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfc2luZ2xlX2FuZ2xlX3VwLCBWZnJpbmdlX2JpdG1h cHMpOworICBGcHV0IChRbWNfc2luZ2xlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAo NDEpKTsKKyAgLyogKGdldCAnKy1zaW5nbGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4gNDEgKi8KKwor ICAvKiA0MiAqLworICBERUZTWU0gKFFtY19zaW5nbGVfYW5nbGVfZG93biwgIistc2luZ2xlLWFu Z2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zaW5nbGVfYW5nbGVf ZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NpbmdsZV9hbmdsZV9kb3duLCBR ZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDIpKTsKKyAgLyogKGdldCAnKy1zaW5nbGUtYW5nbGUtZG93 biAnZnJpbmdlKSA9PiA0MiAqLworCisgIC8qIDQzICovCisgIERFRlNZTSAoUW1jX2RvdWJsZV9h bmdsZV91cCwgIistZG91YmxlLWFuZ2xlLXVwIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25z IChRbWNfZG91YmxlX2FuZ2xlX3VwLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfZG91 YmxlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDMpKTsKKyAgLyogKGdldCAnKy1k b3VibGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4gNDMgKi8KKworICAvKiA0NCAqLworICBERUZTWU0g KFFtY19kb3VibGVfYW5nbGVfZG93biwgIistZG91YmxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5n ZV9iaXRtYXBzID0gRmNvbnMgKFFtY19kb3VibGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBz KTsKKyAgRnB1dCAoUW1jX2RvdWJsZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAo NDQpKTsKKyAgLyogKGdldCAnKy1kb3VibGUtYW5nbGUtZG93biAnZnJpbmdlKSA9PiA0NCAqLwor CisgIC8qIDQ1ICovCisgIERFRlNZTSAoUW1jX3RyaXBsZV9hbmdsZV91cCwgIistdHJpcGxlLWFu Z2xlLXVwIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdHJpcGxlX2FuZ2xlX3Vw LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdHJpcGxlX2FuZ2xlX3VwLCBRZnJpbmdl LCBtYWtlX2ZpeG51bSAoNDUpKTsKKyAgLyogKGdldCAnKy10cmlwbGUtYW5nbGUtdXAgJ2ZyaW5n ZSkgPT4gNDUgKi8KKworICAvKiA0NiAqLworICBERUZTWU0gKFFtY190cmlwbGVfYW5nbGVfZG93 biwgIistdHJpcGxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFt Y190cmlwbGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3RyaXBs ZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDYpKTsKKyAgLyogKGdldCAnKy10 cmlwbGUtYW5nbGUtZG93biAnZnJpbmdlKSA9PiA0NiAqLworCisgIC8qIDQ3ICovCisgIERFRlNZ TSAoUW1jX3F1YWRydXBsZV9hbmdsZV91cCwgIistcXVhZHJ1cGxlLWFuZ2xlLXVwIik7CisgIFZm cmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwLCBWZnJpbmdlX2Jp dG1hcHMpOworICBGcHV0IChRbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtlX2Zp eG51bSAoNDcpKTsKKyAgLyogKGdldCAnKy1xdWFkcnVwbGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4g NDcgKi8KKworICAvKiA0OCAqLworICBERUZTWU0gKFFtY19xdWFkcnVwbGVfYW5nbGVfZG93biwg IistcXVhZHJ1cGxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFt Y19xdWFkcnVwbGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3F1 YWRydXBsZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDgpKTsKKyAgLyogKGdl dCAnKy1xdWFkcnVwbGUtYW5nbGUtZG93biAnZnJpbmdlKSA9PiA0OCAqLworCisvKiBlbmQgTVVM VElQTEUtQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBERUZTWU0g KFF0cnVuY2F0aW9uLCAidHJ1bmNhdGlvbiIpOwogICBERUZTWU0gKFFjb250aW51YXRpb24sICJj b250aW51YXRpb24iKTsKICAgREVGU1lNIChRb3ZlcmxheV9hcnJvdywgIm92ZXJsYXktYXJyb3ci KTsKZGlmZiAtLWdpdCBhL3NyYy9uc3Rlcm0uaCBiL3NyYy9uc3Rlcm0uaAppbmRleCA3OGNlNjA4 Li44ZWYwZGZlIDEwMDY0NAotLS0gYS9zcmMvbnN0ZXJtLmgKKysrIGIvc3JjL25zdGVybS5oCkBA IC02NjAsNiArNjYwLDE2IEBAIHR5cGVkZWYgaWQgaW5zdGFuY2V0eXBlOwogCiBAaW50ZXJmYWNl IEVtYWNzU2Nyb2xsZXIgOiBOU1Njcm9sbGVyCiAgIHsKKworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgIE5TUmVjdCBtY19yZWN0YW5nbGU7 CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgIHN0cnVjdCB3aW5kb3cgKndpbmRv dzsKICAgIHN0cnVjdCBmcmFtZSAqZnJhbWU7CiAgICBOU1Jlc3BvbmRlciAqcHJldlJlc3BvbmRl cjsKQEAgLTY4MCw2ICs2OTAsMTggQEAgdHlwZWRlZiBpZCBpbnN0YW5jZXR5cGU7CiAgICBpbnQg ZW1fd2hvbGU7CiAgICB9CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBM RS1DVVJTT1JTICovCisKKy0gKHZvaWQpbWNfc2V0X3JlY3RhbmdsZTogKE5TUmVjdClyZWN0Owor LSAoTlNSZWN0KW1jX2dldF9yZWN0YW5nbGU7CistIChzdHJ1Y3Qgd2luZG93ICopbWNfZ2V0X3dp bmRvdzsKKy0gKGJvb2wpbWNfanVkZ2U7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisK IC0gKGluc3RhbmNldHlwZSkgaW5pdEZyYW1lOiAoTlNSZWN0IClyIHdpbmRvdzogKExpc3BfT2Jq ZWN0KXdpbjsKIC0gKHZvaWQpc2V0RnJhbWU6IChOU1JlY3QpcjsKIApkaWZmIC0tZ2l0IGEvc3Jj L25zdGVybS5tIGIvc3JjL25zdGVybS5tCmluZGV4IDgxZDM2YmUuLmEwMWZiOTMgMTAwNjQ0Ci0t LSBhL3NyYy9uc3Rlcm0ubQorKysgYi9zcmMvbnN0ZXJtLm0KQEAgLTc2LDYgKzc2LDEwOTEgQEAg VXBkYXRlZCBieSBDaHJpc3RpYW4gTGltcGFjaCAoY2hyaXNAbmljZS5jaCkKIHN0YXRpYyBFbWFj c01lbnUgKm1haW5NZW51OwogI2VuZGlmCiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKK3N0YXRpYyB2b2lkIG5zX3Jlc2V0X2NsaXBw aW5nIChzdHJ1Y3QgZnJhbWUgKik7CisKK3N0YXRpYyB2b2lkIG5zX2R1bXBnbHlwaHNfYm94X29y X3JlbGllZiAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgbnNfZHJhd19j b21wb3NpdGVfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7 CisKK3N0YXRpYyBpbnQgbnNfZ2V0X2dseXBoX3N0cmluZ19jbGlwX3JlY3QgKHN0cnVjdCBnbHlw aF9zdHJpbmcgKiwgTmF0aXZlUmVjdGFuZ2xlICopOworCitzdGF0aWMgdm9pZCBuc19kcmF3X3Jl bGllZiAoTlNSZWN0LCBpbnQsIGNoYXIsIGNoYXIsIGNoYXIsIGNoYXIsIGNoYXIsIHN0cnVjdCBn bHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIG5zX2RyYXdfYm94IChOU1JlY3QsIENHRmxv YXQsIE5TQ29sb3IgKiwgY2hhciwgY2hhcik7CisKK3N0YXRpYyB2b2lkIG5zX2RyYXdfdW5kZXJ3 YXZlIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIEVtYWNzQ0dGbG9hdCwgRW1hY3NDR0Zsb2F0KTsK KworLyogQ3VycmVudCBkZXNpZ24gYXNzdW1lcyB0aGF0IGFscGhhIGlzIDEuMCAqLwordm9pZAor bWNfeHdfY29sb3JfdmFsdWVzIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCBjb2xvciwg c3RydWN0IG1jX1JHQiAqbHNsKQoreworICBDSEVDS19TVFJJTkcgKGNvbG9yKTsKKyAgTlNDb2xv ciAqIGNvbDsKKyAgRW1hY3NDR0Zsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOworICBjaGVj a193aW5kb3dfc3lzdGVtIChOVUxMKTsKKyAgYmxvY2tfaW5wdXQgKCk7CisgIGlmIChuc19saXNw X3RvX2NvbG9yIChjb2xvciwgJmNvbCkpCisgICAgeworICAgICAgdW5ibG9ja19pbnB1dCAoKTsK KyAgICAgIGxzbC0+cmVkID0gLTEuMDsKKyAgICAgIGxzbC0+Z3JlZW4gPSAtMS4wOworICAgICAg bHNsLT5ibHVlID0gLTEuMDsKKyAgICB9CisgIFtbY29sIGNvbG9yVXNpbmdEZWZhdWx0Q29sb3JT cGFjZV0KKyAgICAgICAgZ2V0UmVkOiAmcmVkIGdyZWVuOiAmZ3JlZW4gYmx1ZTogJmJsdWUgYWxw aGE6ICZhbHBoYV07CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIGxzbC0+cmVkID0gcmVkOworICBs c2wtPmdyZWVuID0gZ3JlZW47CisgIGxzbC0+Ymx1ZSA9IGJsdWU7Cit9CisKKy8qIE5lZWRlZCBm b3IgYSBjdXJyZW50IHZlcnNpb24gb2YgRW1hY3MgbWFzdGVyIGJyYW5jaC4gKi8KK0JPT0wKK21j X25zX2ludGVyc2VjdF9yZWN0YW5nbGVzIChOU1JlY3QgKnIxLCBOU1JlY3QgKnIyLCBOU1JlY3Qg KnJlc3VsdCkKK3sKKyAgTlNSZWN0ICpsZWZ0LCAqcmlnaHQ7CisgIE5TUmVjdCAqdXBwZXIsICps b3dlcjsKKyAgYm9vbCBpbnRlcnNlY3Rpb25fcCA9IGZhbHNlOworICAvKiBSZWFycmFuZ2Ugc28g dGhhdCBSMSBpcyB0aGUgbGVmdC1tb3N0IHJlY3RhbmdsZS4gICovCisgIGlmIChyMS0+b3JpZ2lu LnggPCByMi0+b3JpZ2luLngpCisgICAgbGVmdCA9IHIxLCByaWdodCA9IHIyOworICBlbHNlCisg ICAgbGVmdCA9IHIyLCByaWdodCA9IHIxOworICAvKiBYMCBvZiB0aGUgaW50ZXJzZWN0aW9uIGlz IHJpZ2h0LngwLCBpZiB0aGlzIGlzIGluc2lkZSBSMSwKKyAgICAgb3RoZXJ3aXNlIHRoZXJlIGlz IG5vIGludGVyc2VjdGlvbi4gICovCisgIGlmIChyaWdodC0+b3JpZ2luLnggPD0gbGVmdC0+b3Jp Z2luLnggKyBsZWZ0LT5zaXplLndpZHRoKQorICAgIHsKKyAgICAgIHJlc3VsdC0+b3JpZ2luLngg PSByaWdodC0+b3JpZ2luLng7CisgICAgICAvKiBUaGUgcmlnaHQgZW5kIG9mIHRoZSBpbnRlcnNl Y3Rpb24gaXMgdGhlIG1pbmltdW0gb2YKKyAgIHRoZSByaWdodCBlbmRzIG9mIGxlZnQgYW5kIHJp Z2h0LiAgKi8KKyAgICAgIHJlc3VsdC0+c2l6ZS53aWR0aCA9IChtaW4gKGxlZnQtPm9yaWdpbi54 ICsgbGVmdC0+c2l6ZS53aWR0aCwgcmlnaHQtPm9yaWdpbi54ICsgcmlnaHQtPnNpemUud2lkdGgp CisgICAgICAgICAgIC0gcmVzdWx0LT5vcmlnaW4ueCk7CisgICAgICAvKiBTYW1lIGdhbWUgZm9y IFkuICAqLworICAgICAgaWYgKHIxLT5vcmlnaW4ueSA8IHIyLT5vcmlnaW4ueSkKKyAgdXBwZXIg PSByMSwgbG93ZXIgPSByMjsKKyAgICAgIGVsc2UKKyAgdXBwZXIgPSByMiwgbG93ZXIgPSByMTsK KyAgICAgIC8qIFRoZSB1cHBlciBlbmQgb2YgdGhlIGludGVyc2VjdGlvbiBpcyBsb3dlci55MCwg aWYgdGhpcyBpcyBpbnNpZGUKKyAgIG9mIHVwcGVyLiAgT3RoZXJ3aXNlLCB0aGVyZSBpcyBubyBp bnRlcnNlY3Rpb24uICAqLworICAgICAgaWYgKGxvd2VyLT5vcmlnaW4ueSA8PSB1cHBlci0+b3Jp Z2luLnkgKyB1cHBlci0+c2l6ZS5oZWlnaHQpCisgIHsKKyAgICByZXN1bHQtPm9yaWdpbi55ID0g bG93ZXItPm9yaWdpbi55OworICAgIC8qIFRoZSBsb3dlciBlbmQgb2YgdGhlIGludGVyc2VjdGlv biBpcyB0aGUgbWluaW11bSBvZiB0aGUgbG93ZXIKKyAgICAgICBlbmRzIG9mIHVwcGVyIGFuZCBs b3dlci4gICovCisgICAgcmVzdWx0LT5zaXplLmhlaWdodCA9IChtaW4gKGxvd2VyLT5vcmlnaW4u eSArIGxvd2VyLT5zaXplLmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXBwZXItPm9yaWdpbi55ICsgdXBwZXItPnNpemUuaGVpZ2h0KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLSByZXN1bHQtPm9yaWdpbi55KTsKKyAgICBpbnRlcnNlY3Rpb25fcCA9IHRydWU7 CisgIH0KKyAgICB9CisgIHJldHVybiBpbnRlcnNlY3Rpb25fcDsKK30KKworLyogTmVlZGVkIGZv ciBhIGN1cnJlbnQgdmVyc2lvbiBvZiBFbWFjcyBtYXN0ZXIgYnJhbmNoLiAqLworc3RhdGljIEJP T0wKK21jX25zX2NsaXBfdG9fcmVjdCAoc3RydWN0IGZyYW1lICpmLCBOU1JlY3QgKnIsIGludCBu LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3cpCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2xpcCB0 aGUgZHJhd2luZyBhcmVhIHRvIHJlY3RhbmdsZSByIGluIGZyYW1lIGYuICBJZiBkcmF3aW5nIGlz IG5vdAorICAgY3VycmVudGx5IHBvc3NpYmxlIG1hcmsgciBhcyBkaXJ0eSBhbmQgcmV0dXJuIE5P LCBvdGhlcndpc2UgcmV0dXJuIFlFUy4KKyAgIFRha2UgaW50byBjb25zaWRlcmF0aW9uIGByb3ct PmNsaXBgIGlmIGl0IHdhcyBzZXQgYnkgYGV4cG9zZV93aW5kb3cnLgorICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KK3sKKyAgTlNUUkFDRV9XSEVOIChOU1RSQUNFX0dST1VQX0ZPQ1VTLCAibWNfbnNf Y2xpcF90b19yZWN0Iik7CisgIGlmIChyKQorICAgIHsKKyAgICAgIE5TVFJBQ0VfUkVDVCAoInIi LCAqcik7CisgICAgICBpZiAoW05TVmlldyBmb2N1c1ZpZXddID09IEZSQU1FX05TX1ZJRVcgKGYp KQorICAgICAgICB7CisgICAgICAgICAgW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4 dF0gc2F2ZUdyYXBoaWNzU3RhdGVdOworICAgICAgICAgIGlmIChuID09IDIpCisgICAgICAgICAg ICBOU1JlY3RDbGlwTGlzdCAociwgMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBpZiAocm93LT5jbGlwICE9IE5VTEwpCisgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5TUmVjdCByX2NsaXA7CisgICAgICAgICAgICAg ICAgICAgIHJfY2xpcC5vcmlnaW4ueCA9IHJvdy0+Y2xpcC0+eDsKKyAgICAgICAgICAgICAgICAg ICAgcl9jbGlwLm9yaWdpbi55ID0gcm93LT5jbGlwLT55OworICAgICAgICAgICAgICAgICAgICBy X2NsaXAuc2l6ZS53aWR0aCA9IHJvdy0+Y2xpcC0+d2lkdGg7CisgICAgICAgICAgICAgICAgICAg IHJfY2xpcC5zaXplLmhlaWdodCA9IHJvdy0+Y2xpcC0+aGVpZ2h0OworICAgICAgICAgICAgICAg ICAgICBOU1JlY3Qgcl9zYXZlOworICAgICAgICAgICAgICAgICAgICByX3NhdmUub3JpZ2luLngg PSByWzBdLm9yaWdpbi54OworICAgICAgICAgICAgICAgICAgICByX3NhdmUub3JpZ2luLnkgPSBy WzBdLm9yaWdpbi55OworICAgICAgICAgICAgICAgICAgICByX3NhdmUuc2l6ZS53aWR0aCA9IHJb MF0uc2l6ZS53aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgcl9zYXZlLnNpemUuaGVpZ2h0ID0g clswXS5zaXplLmhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgbWNfbnNfaW50ZXJzZWN0X3Jl Y3RhbmdsZXMgKCZyX3NhdmUsICZyX2NsaXAsICZyWzBdKTsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBOU1JlY3RDbGlwICgqcik7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICByZXR1cm4gWUVTOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg ICAgICBOU1ZpZXcgKnZpZXcgPSBGUkFNRV9OU19WSUVXIChmKTsKKyAgICAgICAgICBpbnQgaTsK KyAgICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IG4gOyBpKyspCisgICAgICAgICAgICBbdmlldyBz ZXROZWVkc0Rpc3BsYXlJblJlY3Q6cltpXV07CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBO TzsKK30KKworc3RhdGljIHZvaWQKK21jX25zX2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdp bmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpy b3csCisgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IGZ4LCBpbnQgeSwgaW50IGZ5LCBpbnQg aHBvcywgaW50IHZwb3MsIGludCB3ZCwgaW50IGgsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg bWNfUkdCIGxzbCwgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAg ICAgICAgIGludCBjdXJzb3Jfd2lkdGgsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgYm9v bCBvbl9wLCBib29sIGFjdGl2ZV9wKQoreworICAvKiBUaGUgcHJpb3IgYnVnIG9mIGEgZG91Ymxl IGltcHJpbnQgb24gdGhlIGdseXBoIHdoZXJlIGFuIE1DX0hCQVIgYW5kCisgIE1DX0JBUiBpcyBw bGFjZWQgaXMgcXVpdGUgaGVscGZ1bCB0byB2aXN1YWxpemUgZXJyb3JzIHdoZW4gZGVidWdnaW5n LiAqLworICBib29sIGRlYnVnX3AgPSBmYWxzZTsKKy8qCisgIGlmICh0cmFjZV9yZWRpc3BsYXlf cCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJtY19uc19kcmF3X3dpbmRvd19jdXJzb3IgKCVzKTpc blwKKyAgeCAoJWQpIHwgZnggKCVkKSB8IHkgKCVkKSB8IGZ5ICglZCkgfCBocG9zICglZCkgfCB2 cG9zICglZClcblwKKyAgd2QgKCVkKSB8IGggKCVkKSB8IFJHQiAoJWYvJWYvJWYpXG5cCisgIGN1 cnNvcl90eXBlICglcykgfCBjdXJzb3Jfd2lkdGggKCVkKSB8IG9uX3AgKCVzKSB8IGFjdGl2ZV9w ICglcylcblwKKyAgZ2x5cGhfZmxhdm9yICglcylcbiIsCisgIG1jX3dpbmRvdyAodyksIHgsIGZ4 LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgsIGxzbC5yZWQsIGxzbC5ibHVlLCBsc2wuZ3JlZW4s CisgIG1jX2N1cnNvcl90eXBlX3RvX3N0cmluZyAoY3Vyc29yX3R5cGUpLCBjdXJzb3Jfd2lkdGgs IG9uX3AgPyAieSIgOiAibiIsCisgIGFjdGl2ZV9wID8gInkiIDogIm4iLCBtY19mbGF2b3JfdG9f c3RyaW5nIChnbHlwaF9mbGF2b3IpKTsKKyovCisgIE5TUmVjdCByLCBzOworICBzdHJ1Y3QgZnJh bWUgKmYgPSBXSU5ET1dfWEZSQU1FICh3KTsKKyAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5cGgg PSBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7CisgIHN0 cnVjdCBmYWNlICpmYWNlOworICBOU0NvbG9yICpob2xsb3dfY29sb3IgPSBGUkFNRV9CQUNLR1JP VU5EX0NPTE9SIChmKTsKKyAgLyogSWYgY3Vyc29yIGlzIG91dCBvZiBib3VuZHMsIGRvbid0IGRy YXcgZ2FyYmFnZS4gIFRoaXMgY2FuIGhhcHBlbgorICAgICBpbiBtaW5pLWJ1ZmZlciB3aW5kb3dz IHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWNobyBhcmVhIGdseXBocworICAgICBhbmQgbWluaS1i dWZmZXIuICAqLworICBpZiAoIW9uX3ApCisgICAgcmV0dXJuOworICBpZiAoY3Vyc29yX3R5cGUg PT0gTUNfTk9fQ1VSU09SKQorICAgIHJldHVybjsKKyAgLyogVGhlIGZyaW5nZSBiaXRtYXBzIGFy ZSBwcmVzZW50bHkgaGFuZGxlZCBlbHNld2hlcmUsIGJ1dCBjb3VsZCBzb21lZGF5IGJlCisgIG1h bmFnZWQgKGluIHBhcnQpIGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlLiAqLworICBpZiAocm93LT5l eGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAmJiAocm93LT5yZXZlcnNlZF9wCisgICAg ICAgICA/IChocG9zIDwgMCkKKyAgICAgICAgIDogKGhwb3MgPj0gcm93LT51c2VkW1RFWFRfQVJF QV0pKSkKKyAgICB7CisgICAgICByb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IHRydWU7CisgICAg ICBtY19kcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIHJvdywgcm93LT5yZXZlcnNlZF9wLCBjdXJzb3Jf dHlwZSk7CisgICAgICByZXR1cm47CisgICAgfQorICByLm9yaWdpbi54ID0gZng7CisgIHIub3Jp Z2luLnkgPSBmeTsKKyAgci5zaXplLmhlaWdodCA9IGg7CisgIHIuc2l6ZS53aWR0aCA9IHdkOwor ICBpZiAoIW1jX25zX2NsaXBfdG9fcmVjdCAoZiwgJnIsIDEsIHJvdykpCisgICAgcmV0dXJuOwor ICBmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBjdXJzb3JfZ2x5cGgtPmZhY2VfaWQpOworLyogRVhB TVBMRSBPRiBIT1cgVE8gTE9PSy1VUCBBIENPTE9SOgorICAgICBlbnVtIGZhY2VfaWQgZmFjZV9p ZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXZlcnRpY2FsLWJhci1mYWNl IiksIHRydWUpOworICAgICBzdHJ1Y3QgZmFjZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFj ZV9pZCk7CisgICAgIE5TQ29sb3IgKmNvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5T X0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIGYpOworICAtICBFWEFNUExFIE9GIEhPVyBUTyBQUklO VCBBIENPTE9SIFRPIFNUREVSUjoKKyAgICAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCA9IGZhY2Ut PmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICAgICBMaXNwX09iamVjdCBiYWNrZ3Jv dW5kID0gZmFjZS0+bGZhY2VbTEZBQ0VfQkFDS0dST1VORF9JTkRFWF07CisgICAgIGZwcmludGYg KHN0ZGVyciwgIlxuZm9yZWdyb3VuZCAoJXMpIHwgYmFja2dyb3VuZCAoJXMpXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICghTklMUCAoZm9yZWdyb3VuZCkgPyBTU0RBVEEgKGZvcmVncm91bmQp IDogIk5JTFAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAoIU5JTFAgKGJhY2tncm91bmQpID8g U1NEQVRBIChiYWNrZ3JvdW5kKSA6ICJOSUxQIikpOworICAtICBFWEFNUExFIE9GIEhPVyBUTyBD UkVBVEUgQSBDT0xPUiBXSVRIIFJHQi9MU0wgZmxvYXQgdmFsdWVzOgorICAgICBOU0NvbG9yICpt eV9jb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aENhbGlicmF0ZWRSZWQ6IDEuMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZW46IDEuMAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWU6IDEu MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxw aGE6IDEuMF07CisgIC0gIEFMVEVSTkFUSVZFIEVYQU1QTEU6CisgICAgIGVudW0gZmFjZV9pZCBk ZWJ1Z2dpbmdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBzLT5mLCBpbnRlcm4g KCIrLWRlYnVnZ2luZy1mYWNlIiksIHRydWUpOworICAgICBzdHJ1Y3QgZmFjZSAqZGVidWdnaW5n X2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIGRlYnVnZ2luZ19mYWNlX2lkKTsKKyAgICAgTlND b2xvciAqY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5E IChkZWJ1Z2dpbmdfZmFjZSksIHMtPmYpOworICAgICBbY29sb3Igc2V0XTsgKi8KKyAgaWYgKGds eXBoX2ZsYXZvciA9PSBNQ19HTFlQSAorICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX0dMWVBI TEVTUykKKyAgICBbW05TQ29sb3IgY29sb3JXaXRoQ2FsaWJyYXRlZFJlZDogbHNsLnJlZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVuOiBsc2wuZ3JlZW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmx1ZTogbHNsLmJsdWUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhbHBoYTogMS4wXSBzZXRdOworICAgIGVsc2UKKyAgICAgIFtGUkFNRV9DVVJT T1JfQ09MT1IgKGYpIHNldF07CisgIGlmIChjdXJzb3JfdHlwZSA9PSBNQ19GUkFNRURfQk9YKQor ICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICAgICAgQ0hFQ0tf QlVGRkVSIChidWYpOworICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7Cisg ICAgICBib29sIHJlZ2lvbl9hY3RpdmVfcCA9ICghTklMUCAoVnRyYW5zaWVudF9tYXJrX21vZGUp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgbWFya19h Y3RpdmUpKSk7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2JlZ2lubmluZyA9IChyZWdpb25fYWN0 aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9iZWdpbm5pbmcgKCkpIDogLTE7CisgICAgICBwdHJk aWZmX3QgcmVnaW9uX2VuZCA9IChyZWdpb25fYWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9l bmQgKCkpIDogLTE7CisgICAgICBwdHJkaWZmX3Qgb3BvaW50X3B0ID0gKHcgPT0gWFdJTkRPVyAo c2VsZWN0ZWRfd2luZG93KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBUCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBYRklYTlVNIChGbWFya2VyX3Bvc2l0aW9uICh3LT5w b2ludG0pKTsKKyAgICAgIGJvb2wgcmVnaW9uX2luX2JvdW5kc19wID0gKHJlZ2lvbl9hY3RpdmVf cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3B0ID49IHJlZ2lv bl9iZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF9w dCA8IHJlZ2lvbl9lbmQpOworICAgICAgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICYm IHJlZ2lvbl9pbl9ib3VuZHNfcAorICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAgICB7Cisg ICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2ZhY2VfaWQgPSBsb29r dXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXJlZ2lvbi1m YWNlIiksIHRydWUpOworICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lv bl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlX2lkKTsK KyAgICAgICAgICBOU0NvbG9yICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9jb2xvciA9IG5zX2xvb2t1 cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0JBQ0tHUk9VTkQgKGhvbGxvd19hY3RpdmVfcmVnaW9u X2ZhY2UpLCBmKTsKKyAgICAgICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX3JlZ2lv bl9jb2xvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAg ICAgICAgICAgICAgICAgJiYgIXJlZ2lvbl9pbl9ib3VuZHNfcAorICAgICAgICAgICAgICAgICAm JiBhY3RpdmVfcCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93 X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50 ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXJlZ2lvbi1mYWNlIiksIHRydWUpOworICAgICAgICAg ICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlID0gRkFDRV9GUk9N X0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZV9pZCk7CisgICAgICAgICAgICBO U0NvbG9yICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfY29sb3IgPSBuc19sb29rdXBfaW5kZXhl ZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFj ZSksIGYpOworICAgICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2FjdGl2ZV9yZWdpb25f b3V0X2NvbG9yOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICghcmVnaW9uX2FjdGl2 ZV9wICYmIGFjdGl2ZV9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZhY2Vf aWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVy biAoIistcmVhbC1mYWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICBzdHJ1 Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0 aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICBOU0NvbG9yICpob2xsb3dfYWN0aXZlX2NvbG9y ID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFDS0dST1VORCAoaG9sbG93X2Fj dGl2ZV9mYWNlKSwgZik7CisgICAgICAgICAgICAgIGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3Rp dmVfY29sb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBUaGUgcmVnaW9uIGlzIF9u b3RfIHZpc2libGUgaW4gdGhlIGluYWN0aXZlIHdpbmRvdyBiZWNhdXNlIHRoZSBvdmVybGF5IHdp bmRvdyBwcm9wZXJ0eSBpcyB1c2VkLiAqLworICAgICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9w KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19p bmFjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVh bC1mYWtlLWN1cnNvci1pbmFjdGl2ZS1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgIHN0 cnVjdCBmYWNlICpob2xsb3dfaW5hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93 X2luYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgIE5TQ29sb3IgKmhvbGxvd19pbmFj dGl2ZV9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0JBQ0tHUk9VTkQg KGhvbGxvd19pbmFjdGl2ZV9mYWNlKSwgZik7CisgICAgICAgICAgICAgICAgaG9sbG93X2NvbG9y ID0gaG9sbG93X2luYWN0aXZlX2NvbG9yOworICAgICAgICAgICAgICB9CisgICAgfQorICAgIGVs c2UgaWYgKGZhY2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKSA9PSBuc19pbmRleF9jb2xv ciAoRlJBTUVfQ1VSU09SX0NPTE9SIChmKSwgZikpCisgICAgICB7CisgICAgICAgIFtuc19sb29r dXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChmYWNlKSwgZikgc2V0XTsKKyAg ICAgICAgaG9sbG93X2NvbG9yID0gRlJBTUVfQ1VSU09SX0NPTE9SIChmKTsKKyAgICAgIH0KKyNp ZmRlZiBOU19JTVBMX0NPQ09BCisgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMgKCk7CisjZW5kaWYK KyAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgICB7CisgICAgICBjYXNlIE1DX05PX0ZSSU5HRV9C SVRNQVA6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBNQ19OT19DVVJTT1I6CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBNQ19SSUdIVF9GUklOR0VfQklUTUFQOgorICAgICAgICBicmVh azsKKyAgICAgIGNhc2UgTUNfTEVGVF9GUklOR0VfQklUTUFQOgorICAgICAgICBicmVhazsKKyAg ICAgIGNhc2UgTUNfRklMTEVEX0JPWDoKKyAgICAgICAgTlNSZWN0RmlsbCAocik7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBNQ19GUkFNRURfQk9YOgorICAgICAgICBOU1JlY3RGaWxsIChy KTsKKyAgICAgICAgW2hvbGxvd19jb2xvciBzZXRdOworICAgICAgICBOU1JlY3RGaWxsIChOU0lu c2V0UmVjdCAociwgMSwgMSkpOworICAgICAgICBbRlJBTUVfQ1VSU09SX0NPTE9SIChmKSBzZXRd OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTUNfSE9MTE9XX0JPWDoKKyAgICAgICAgTlNS ZWN0RmlsbCAocik7CisgICAgICAgIFtob2xsb3dfY29sb3Igc2V0XTsKKyAgICAgICAgTlNSZWN0 RmlsbCAoTlNJbnNldFJlY3QgKHIsIDEsIDEpKTsKKyAgICAgICAgW0ZSQU1FX0NVUlNPUl9DT0xP UiAoZikgc2V0XTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1DX0hCQVI6CisgICAgICAg IE5TUmVjdEZpbGwgKHIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTUNfQkFSOgorICAg ICAgICBzID0gcjsKKyAgICAgICAgLyogQGxhd2xpc3QgaXMgZm9jdXNpbmcgdGhlIGluaXRpYWwg ZGV2ZWxvcG1lbnQgb2YgZmVhdHVyZSByZXF1ZXN0cworICAgICAgICAjMTc2ODQgYW5kICMyMjg3 MyBvbiBMMlIgbGFuZ3VhZ2VzLiAqLworICAgICAgICBpZiAoZ2x5cGhfZmxhdm9yICE9IE1DX0dM WVBICisgICAgICAgICAgICAmJiBnbHlwaF9mbGF2b3IgIT0gTUNfR0xZUEhMRVNTKQorICAgICAg ICAgIHsKKyAgICAgICAgICAgIC8qIElmIHRoZSBjaGFyYWN0ZXIgdW5kZXIgY3Vyc29yIGlzIFIy TCwgZHJhdyB0aGUgYmFyIGN1cnNvcgorICAgICAgICAgICAgICAgb24gdGhlIHJpZ2h0IG9mIGl0 cyBnbHlwaCwgcmF0aGVyIHRoYW4gb24gdGhlIGxlZnQuICAqLworICAgICAgICAgICAgaWYgKChj dXJzb3JfZ2x5cGgtPnJlc29sdmVkX2xldmVsICYgMSkgIT0gMCkKKyAgICAgICAgICAgICAgcy5v cmlnaW4ueCArPSBjdXJzb3JfZ2x5cGgtPnBpeGVsX3dpZHRoIC0gcy5zaXplLndpZHRoOworICAg ICAgICAgIH0KKyAgICAgICAgTlNSZWN0RmlsbCAocyk7CisgICAgICAgIGJyZWFrOworICAgIH0K KyAgbnNfcmVzZXRfY2xpcHBpbmcgKGYpOworICAvKiBkcmF3IHRoZSBjaGFyYWN0ZXIgdW5kZXIg dGhlIGN1cnNvciAqLworICBpZiAoZ2x5cGhfZmxhdm9yICE9IE1DX0dMWVBITEVTUworICAgICAg JiYgKGN1cnNvcl90eXBlID09IE1DX0ZSQU1FRF9CT1gKKyAgICAgICAgICB8fCBjdXJzb3JfdHlw ZSA9PSBNQ19GSUxMRURfQk9YCisgICAgICAgICAgfHwgY3Vyc29yX3R5cGUgPT0gTUNfSE9MTE9X X0JPWAorICAgICAgICAgIHx8IChkZWJ1Z19wCisgICAgICAgICAgICAgICYmIGN1cnNvcl90eXBl ID09IE1DX0hCQVIpCisgICAgICAgICAgfHwgKGRlYnVnX3AKKyAgICAgICAgICAgICAgJiYgY3Vy c29yX3R5cGUgPT0gTUNfQkFSKSkpCisgICAgeworICAgICAgLyogYGN1cnNvcl9nY19wYCBpcyB1 c2VkIG9ubHkgYnkgYHczMnRlcm0uY2AgYW5kIGB4dGVybS5jJy4gKi8KKyAgICAgIGJvb2wgY3Vy c29yX2djX3AgPSBmYWxzZTsKKyAgICAgIG1jX2RyYXdfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgs IHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsIGxzbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwgYWN0aXZlX3AsIGN1cnNv cl9nY19wKTsKKyAgICB9CisjaWZkZWYgTlNfSU1QTF9DT0NPQQorICBOU0VuYWJsZVNjcmVlblVw ZGF0ZXMgKCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK21jX25zX2RyYXdfdGV4dF9kZWNv cmF0aW9uIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBzdHJ1Y3QgZmFjZSAqZmFjZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBOU0NvbG9yICpkZWZhdWx0Q29sLCBDR0Zsb2F0IHdpZHRoLCBD R0Zsb2F0IHgpCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRHJhdyB1bmRlcmxpbmUsIG92ZXJs aW5lLCBhbmQgc3RyaWtlLXRocm91Z2ggb24gZ2x5cGggc3RyaW5nIHMuCisgICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworeworICBpZiAocy0+Zm9yX292ZXJsYXBzKQorICAgIHJldHVybjsKKyAgLyog RG8gdW5kZXJsaW5lLiAqLworICBpZiAoZmFjZS0+dW5kZXJsaW5lX3ApCisgICAgeworICAgICAg aWYgKHMtPmZhY2UtPnVuZGVybGluZV90eXBlID09IEZBQ0VfVU5ERVJfV0FWRSkKKyAgICAgICAg eworICAgICAgICAgIGlmIChmYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVkX3ApCisgICAgICAgICAg ICBbZGVmYXVsdENvbCBzZXRdOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtuc19sb29r dXBfaW5kZXhlZF9jb2xvciAoZmFjZS0+dW5kZXJsaW5lX2NvbG9yLCBzLT5mKSBzZXRdOworICAg ICAgICAgIG5zX2RyYXdfdW5kZXJ3YXZlIChzLCB3aWR0aCwgeCk7CisgICAgICAgIH0KKyAgICAg IGVsc2UgaWYgKHMtPmZhY2UtPnVuZGVybGluZV90eXBlID09IEZBQ0VfVU5ERVJfTElORSkKKyAg ICAgICAgeworICAgICAgICAgIE5TUmVjdCByOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGhp Y2tuZXNzLCBwb3NpdGlvbjsKKyAgICAgICAgICAvKiBJZiB0aGUgcHJldiB3YXMgdW5kZXJsaW5l ZCwgbWF0Y2ggaXRzIGFwcGVhcmFuY2UuICovCisgICAgICAgICAgaWYgKHMtPnByZXYgJiYgcy0+ cHJldi0+ZmFjZS0+dW5kZXJsaW5lX3AKKyAgICAgICAgICAgICAgJiYgcy0+cHJldi0+ZmFjZS0+ dW5kZXJsaW5lX3R5cGUgPT0gRkFDRV9VTkRFUl9MSU5FCisgICAgICAgICAgICAgICYmIHMtPnBy ZXYtPnVuZGVybGluZV90aGlja25lc3MgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICB0aGlja25lc3MgPSBzLT5wcmV2LT51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgICAgICAgICAg ICBwb3NpdGlvbiA9IHMtPnByZXYtPnVuZGVybGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBmb250 ICpmb250OworICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRlc2NlbnQ7CisgICAgICAgICAg ICAgIGZvbnQ9cy0+Zm9udDsKKyAgICAgICAgICAgICAgZGVzY2VudCA9IHMtPnkgKyBzLT5oZWln aHQgLSBzLT55YmFzZTsKKyAgICAgICAgICAgICAgLyogVXNlIHVuZGVybGluZSB0aGlja25lc3Mg b2YgZm9udCwgZGVmYXVsdGluZyB0byAxLiAqLworICAgICAgICAgICAgICB0aGlja25lc3MgPSAo Zm9udCAmJiBmb250LT51bmRlcmxpbmVfdGhpY2tuZXNzID4gMCkKKyAgICAgICAgICAgICAgICA/ IGZvbnQtPnVuZGVybGluZV90aGlja25lc3MgOiAxOworICAgICAgICAgICAgICAvKiBEZXRlcm1p bmUgdGhlIG9mZnNldCBvZiB1bmRlcmxpbmluZyBmcm9tIHRoZSBiYXNlbGluZS4gKi8KKyAgICAg ICAgICAgICAgaWYgKHhfdW5kZXJsaW5lX2F0X2Rlc2NlbnRfbGluZSkKKyAgICAgICAgICAgICAg ICBwb3NpdGlvbiA9IGRlc2NlbnQgLSB0aGlja25lc3M7CisgICAgICAgICAgICAgIGVsc2UgaWYg KHhfdXNlX3VuZGVybGluZV9wb3NpdGlvbl9wcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgICAg ICAgICYmIGZvbnQgJiYgZm9udC0+dW5kZXJsaW5lX3Bvc2l0aW9uID49IDApCisgICAgICAgICAg ICAgICAgcG9zaXRpb24gPSBmb250LT51bmRlcmxpbmVfcG9zaXRpb247CisgICAgICAgICAgICAg IGVsc2UgaWYgKGZvbnQpCisgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBscm91bmQgKGZvbnQt PmRlc2NlbnQgLyAyKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvc2l0 aW9uID0gdW5kZXJsaW5lX21pbmltdW1fb2Zmc2V0OworICAgICAgICAgICAgICBwb3NpdGlvbiA9 IG1heCAocG9zaXRpb24sIHVuZGVybGluZV9taW5pbXVtX29mZnNldCk7CisgICAgICAgICAgICAg IC8qIEVuc3VyZSB1bmRlcmxpbmluZyBpcyBub3QgY3JvcHBlZC4gKi8KKyAgICAgICAgICAgICAg aWYgKGRlc2NlbnQgPD0gcG9zaXRpb24pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgcG9zaXRpb24gPSBkZXNjZW50IC0gMTsKKyAgICAgICAgICAgICAgICAgIHRoaWNrbmVz cyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmIChkZXNjZW50 IDwgcG9zaXRpb24gKyB0aGlja25lc3MpCisgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gMTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICBzLT51bmRlcmxpbmVfdGhpY2tuZXNzID0gdGhpY2tu ZXNzOworICAgICAgICAgIHMtPnVuZGVybGluZV9wb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAg ICAgIHIgPSBOU01ha2VSZWN0ICh4LCBzLT55YmFzZSArIHBvc2l0aW9uLCB3aWR0aCwgdGhpY2tu ZXNzKTsKKyAgICAgICAgICBpZiAoZmFjZS0+dW5kZXJsaW5lX2RlZmF1bHRlZF9wKQorICAgICAg ICAgICAgW2RlZmF1bHRDb2wgc2V0XTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBbbnNf bG9va3VwX2luZGV4ZWRfY29sb3IgKGZhY2UtPnVuZGVybGluZV9jb2xvciwgcy0+Zikgc2V0XTsK KyAgICAgICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICAgICAgfQorICAgIH0KKyAgLyogRG8gb3Zl cmxpbmUuIFdlIGZvbGxvdyBvdGhlciB0ZXJtcyBpbiB1c2luZyBhIHRoaWNrbmVzcyBvZiAxCisg ICAgIGFuZCBpZ25vcmluZyBvdmVybGluZV9tYXJnaW4uICovCisgIGlmIChmYWNlLT5vdmVybGlu ZV9wKQorICAgIHsKKyAgICAgIE5TUmVjdCByOworICAgICAgciA9IE5TTWFrZVJlY3QgKHgsIHMt PnksIHdpZHRoLCAxKTsKKyAgICAgIGlmIChmYWNlLT5vdmVybGluZV9jb2xvcl9kZWZhdWx0ZWRf cCkKKyAgICAgICAgW2RlZmF1bHRDb2wgc2V0XTsKKyAgICAgIGVsc2UKKyAgICAgICAgW25zX2xv b2t1cF9pbmRleGVkX2NvbG9yIChmYWNlLT5vdmVybGluZV9jb2xvciwgcy0+Zikgc2V0XTsKKyAg ICAgIE5TUmVjdEZpbGwgKHIpOworICAgIH0KKyAgLyogRG8gc3RyaWtlLXRocm91Z2guICBXZSBm b2xsb3cgb3RoZXIgdGVybXMgZm9yIHRoaWNrbmVzcyBhbmQKKyAgICAgdmVydGljYWwgcG9zaXRp b24uKi8KKyAgaWYgKGZhY2UtPnN0cmlrZV90aHJvdWdoX3ApCisgICAgeworICAgICAgTlNSZWN0 IHI7CisgICAgICB1bnNpZ25lZCBsb25nIGR5OworICAgICAgZHkgPSBscmludCAoKHMtPmhlaWdo dCAtIDEpIC8gMik7CisgICAgICByID0gTlNNYWtlUmVjdCAoeCwgcy0+eSArIGR5LCB3aWR0aCwg MSk7CisgICAgICBpZiAoZmFjZS0+c3RyaWtlX3Rocm91Z2hfY29sb3JfZGVmYXVsdGVkX3ApCisg ICAgICAgIFtkZWZhdWx0Q29sIHNldF07CisgICAgICBlbHNlCisgICAgICAgIFtuc19sb29rdXBf aW5kZXhlZF9jb2xvciAoZmFjZS0+c3RyaWtlX3Rocm91Z2hfY29sb3IsIHMtPmYpIHNldF07Cisg ICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCittY19uc19kdW1w Z2x5cGhzX3N0cmV0Y2ggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIGludCB3ZCwgc3RydWN0IGds eXBoX3JvdyAqcm93KQoreworICBOU1JlY3QgclsyXTsKKyAgaW50IG4sIGk7CisgIHN0cnVjdCBm YWNlICpmYWNlOworICBOU0NvbG9yICpmZ0NvbCwgKmJnQ29sOworICBpZiAoIXMtPmJhY2tncm91 bmRfZmlsbGVkX3ApCisgICAgeworICAgICAgbiA9IG5zX2dldF9nbHlwaF9zdHJpbmdfY2xpcF9y ZWN0IChzLCByKTsKKyAgICAgICpyID0gTlNNYWtlUmVjdCAocy0+eCwgcy0+eSwgcy0+YmFja2dy b3VuZF93aWR0aCwgcy0+aGVpZ2h0KTsKKyAgICAgIGlmICghbWNfbnNfY2xpcF90b19yZWN0IChz LT5mLCByLCBuLCByb3cpKQorICAgICAgICByZXR1cm47CisgICAgICBpZiAocy0+aGwgPT0gRFJB V19NT1VTRV9GQUNFKQorICAgICAgIHsKKyAgICAgICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKHMt PmYsIE1PVVNFX0hMX0lORk8gKHMtPmYpLT5tb3VzZV9mYWNlX2ZhY2VfaWQpOworICAgICAgICAg aWYgKCFmYWNlKQorICAgICAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBNT1VTRV9G QUNFX0lEKTsKKyAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgZmFjZSA9IEZBQ0VfRlJPTV9J RCAocy0+Ziwgcy0+Zmlyc3RfZ2x5cGgtPmZhY2VfaWQpOworICAgICAgYmdDb2wgPSBuc19sb29r dXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKSwgcy0+Zik7CisgICAg ICBmZ0NvbCA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGZh Y2UpLCBzLT5mKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgIHsKKyAg ICAgICAgICBpZiAoIXMtPnJvdy0+ZnVsbF93aWR0aF9wKQorICAgICAgICAgICAgeworICAgICAg ICBpbnQgb3ZlcnJ1biwgbGVmdG92ZXJydW47CisgICAgICAgICAgICAgIC8qIHRydW5jYXRlIHRv IGF2b2lkIG92ZXJ3cml0aW5nIGZyaW5nZSBhbmQvb3Igc2Nyb2xsYmFyICovCisgICAgICAgIG92 ZXJydW4gPSBtYXggKDAsIChzLT54ICsgcy0+YmFja2dyb3VuZF93aWR0aCkKKyAgICAgICAgICAg LSAoV0lORE9XX0JPWF9SSUdIVF9FREdFX1ggKHMtPncpCisgICAgICAgIC0gV0lORE9XX1JJR0hU X0ZSSU5HRV9XSURUSCAocy0+dykpKTsKKyAgICAgICAgICAgICAgcltpXS5zaXplLndpZHRoIC09 IG92ZXJydW47CisgICAgICAgIC8qIHRydW5jYXRlIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRvIGxl ZnQgb2YgdGhlIHdpbmRvdyBib3ggKi8KKyAgICAgICAgbGVmdG92ZXJydW4gPSAoV0lORE9XX0JP WF9MRUZUX0VER0VfWCAocy0+dykKKyAgICAgICAgICAgKyBXSU5ET1dfTEVGVF9GUklOR0VfV0lE VEggKHMtPncpKSAtIHMtPng7CisgICAgICAgIGlmIChsZWZ0b3ZlcnJ1biA+IDApCisgICAgICAg ICAgeworICAgICAgICAgICAgcltpXS5vcmlnaW4ueCArPSBsZWZ0b3ZlcnJ1bjsKKyAgICAgICAg ICAgIHJbaV0uc2l6ZS53aWR0aCAtPSBsZWZ0b3ZlcnJ1bjsKKyAgICAgICAgICB9CisgICAgICAg ICAgICAgIC8qIFhYWDogVHJ5IHRvIHdvcmsgYmV0d2VlbiBwcm9ibGVtIHdoZXJlIGEgc3RyZXRj aCBnbHlwaCBvbgorICAgICAgICAgICAgICAgICBhIHBhcnRpYWxseS12aXNpYmxlIGJvdHRvbSBy b3cgd2lsbCBjbGVhciBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICBtb2RlbGluZSwgYW5k IGFub3RoZXIgd2hlcmUgbGlzdC1idWZmZXJzIGhlYWRlcnMgYW5kIHNpbWlsYXIKKyAgICAgICAg ICAgICAgICAgcm93cyBlcnJvbmVvdXNseSBoYXZlIHZpc2libGVfaGVpZ2h0IHNldCB0byAwLiAg Tm90IHN1cmUKKyAgICAgICAgICAgICAgICAgd2hlcmUgdGhpcyBpcyBjb21pbmcgZnJvbSBhcyBv dGhlciB0ZXJtcyBzZWVtIG5vdCB0byBzaG93LiAqLworICAgICAgICAgICAgICByW2ldLnNpemUu aGVpZ2h0ID0gbWluIChzLT5oZWlnaHQsIHMtPnJvdy0+dmlzaWJsZV9oZWlnaHQpOworICAgICAg ICAgICAgfQorICAgICAgICAgIFtiZ0NvbCBzZXRdOworICAgICAgICAgIC8qIE5PVEU6IHVuZGVy IE5TIHRoaXMgaXMgTk9UIHVzZWQgdG8gZHJhdyBjdXJzb3JzLCBidXQgd2UgbXVzdCBhdm9pZAor ICAgICAgICAgICAgIG92ZXJ3cml0aW5nIGN1cnNvciAodXN1YWxseSB3aGVuIGN1cnNvciBvbiBh IHRhYikgKi8KKyAgICAgICAgICBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIC8qIEZJWE1FOiAgRG8gd2Ugc3RpbGwgbmVlZCB0byBwcmV2ZW50 IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGZyb20KKyAgICAgICAgICAgICAgZXJhc2luZyB0aGUgZmFr ZSBNQ19IQkFSIHRoYXQgZXh0ZW5kcyB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUKKyAgICAgICAg ICAgICAgU1RSRVRDSF9HTFlQSD8gIFRoaXMgbWF5IGhhdmUgYmVlbiBkb25lIHByaW9yIHRvIHRo ZSBmaXggcmVsYXRpbmcKKyAgICAgICAgICAgICAgdG8gbGVmdC9yaWdodCBvdmVyd3JpdHRlbiBn bHlwaHMuICovCisgICAgICAgICAgICAgIHJbaV0uc2l6ZS5oZWlnaHQgLT0gMTsKKyAgICAgICAg ICAgICAgLy8gIGVudW0gZmFjZV9pZCBkZWJ1Z2dpbmdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9m YWNlIChzLT53LCBzLT5mLCBpbnRlcm4gKCIrLWRlYnVnZ2luZy1mYWNlIiksIHRydWUpOworICAg ICAgICAgICAgICAvLyAgc3RydWN0IGZhY2UgKmRlYnVnZ2luZ19mYWNlID0gRkFDRV9GUk9NX0lE IChzLT5mLCBkZWJ1Z2dpbmdfZmFjZV9pZCk7CisgICAgICAgICAgICAgIC8vICBOU0NvbG9yICpj b2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGRlYnVn Z2luZ19mYWNlKSwgcy0+Zik7CisgICAgICAgICAgICAgIC8vICBbY29sb3Igc2V0XTsKKyAgICAg ICAgICAgICAgQ0dGbG9hdCB4ID0gcltpXS5vcmlnaW4ueDsKKyAgICAgICAgICAgICAgQ0dGbG9h dCB3aWR0aCA9IHdkOworICAgICAgICAgICAgICByW2ldLnNpemUud2lkdGggLT0gd2lkdGg7Cisg ICAgICAgICAgICAgIHJbaV0ub3JpZ2luLnggKz0gd2lkdGg7CisgICAgICAgICAgICAgIE5TUmVj dEZpbGwgKHJbaV0pOworICAgICAgICAgICAgICAvKiBEcmF3IG92ZXJsaW5pbmcsIGV0Yy4gb24g dGhlIGN1cnNvci4gKi8KKyAgICAgICAgICAgICAgaWYgKHMtPnctPnBoeXNfY3Vyc29yX3R5cGUg PT0gTUNfRklMTEVEX0JPWCkKKyAgICAgICAgICAgICAgICBtY19uc19kcmF3X3RleHRfZGVjb3Jh dGlvbiAocywgZmFjZSwgYmdDb2wsIHdpZHRoLCB4KTsKKyAgICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgICBtY19uc19kcmF3X3RleHRfZGVjb3JhdGlvbiAocywgZmFjZSwgZmdD b2wsIHdpZHRoLCB4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAg ICB7CisgIC8vICBpbnQgcnggPSByW2ldLm9yaWdpbi54OworICAvLyAgaW50IHJ5ID0gcltpXS5v cmlnaW4ueTsKKyAgLy8gIGludCBydyA9IHJbaV0uc2l6ZS53aWR0aDsKKyAgLy8gIGludCByaCA9 IHJbaV0uc2l6ZS5oZWlnaHQ7CisgIC8vICBmcHJpbnRmIChzdGRlcnIsICJtY19uc19kdW1wZ2x5 cGhzX3N0cmV0Y2g6ICB2cG9zICglZCkgfCByeCAoJWQpIHwgcnkgKCVkKSB8IHJ3ICglZCkgfCBy aCAoJWQpXG4iLAorICAvLyAgICAgICAgICAgICAgICAgICBzLT5maXJzdF9nbHlwaC0+dnBvcywg cngsIHJ5LCBydywgcmgpOworICAgICAgICAgICAgICBOU1JlY3RGaWxsIChyW2ldKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAvKiBEcmF3IG92ZXJsaW5pbmcsIGV0Yy4gb24gdGhlIHN0cmV0 Y2ggZ2x5cGggKG9yIHRoZSBwYXJ0CisgICAgICAgICAgICAgb2YgdGhlIHN0cmV0Y2ggZ2x5cGgg YWZ0ZXIgdGhlIGN1cnNvcikuICovCisgICAgICAgICAgbWNfbnNfZHJhd190ZXh0X2RlY29yYXRp b24gKHMsIGZhY2UsIGZnQ29sLCByW2ldLnNpemUud2lkdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJbaV0ub3JpZ2luLngpOworICAgICAgICB9CisgICAgICBuc19y ZXNldF9jbGlwcGluZyAocy0+Zik7CisgICAgICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gMTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCittY19uc19kdW1wZ2x5cGhzX2ltYWdlIChzdHJ1Y3Qg Z2x5cGhfc3RyaW5nICpzLCBOU1JlY3Qgciwgc3RydWN0IG1jX1JHQiBsc2wsCisgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsIGVudW0gdHlwZV9vZl9j dXJzb3IgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdGl2ZV9w KQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIFJlbmRlcnMgYW4gaW1hZ2UgYW5kIGFzc29j aWF0ZWQgYm9yZGVycy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit7CisgIEVtYWNzSW1hZ2Ug KmltZyA9IHMtPmltZy0+cGl4bWFwOworICBpbnQgYm94X2xpbmVfdndpZHRoID0gbWF4IChzLT5m YWNlLT5ib3hfbGluZV93aWR0aCwgMCk7CisgIGludCB4ID0gcy0+eCwgeSA9IHMtPnliYXNlIC0g aW1hZ2VfYXNjZW50IChzLT5pbWcsIHMtPmZhY2UsICZzLT5zbGljZSk7CisgIGludCBiZ194LCBi Z195LCBiZ19oZWlnaHQ7CisgIGludCB0aDsKKyAgY2hhciByYWlzZWRfcDsKKyAgTlNSZWN0IGJy OworICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgTlNDb2xvciAqdGRDb2w7CisgIE5TVFJBQ0UgKCJt Y19uc19kdW1wZ2x5cGhzX2ltYWdlIik7CisgIGlmIChzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19C T1gKKyAgICAgICYmIHMtPmZpcnN0X2dseXBoLT5sZWZ0X2JveF9saW5lX3AgJiYgcy0+c2xpY2Uu eCA9PSAwKQorICAgIHggKz0gYWJzIChzLT5mYWNlLT5ib3hfbGluZV93aWR0aCk7CisgIGJnX3gg PSB4OworICBiZ195ID0gIHMtPnNsaWNlLnkgPT0gMCA/IHMtPnkgOiBzLT55ICsgYm94X2xpbmVf dndpZHRoOworICBiZ19oZWlnaHQgPSBzLT5oZWlnaHQ7CisgIC8qIG90aGVyIHRlcm1zIGhhdmUg dGhpcywgYnV0IHdhcyBjYXVzaW5nIHByb2JsZW1zIHcvdGFiYmFyIG1vZGUgKi8KKyAgLyogLSAy ICogYm94X2xpbmVfdndpZHRoOyAqLworICBpZiAocy0+c2xpY2UueCA9PSAwKSB4ICs9IHMtPmlt Zy0+aG1hcmdpbjsKKyAgaWYgKHMtPnNsaWNlLnkgPT0gMCkgeSArPSBzLT5pbWctPnZtYXJnaW47 CisgIC8qIERyYXcgQkc6IGlmIHdlIG5lZWQgbGFyZ2VyIGFyZWEgdGhhbiBpbWFnZSBpdHNlbGYg Y2xlYXJlZCwgZG8gdGhhdCwKKyAgICAgb3RoZXJ3aXNlLCBzaW5jZSB3ZSBjb21wb3NpdGUgdGhl IGltYWdlIHVuZGVyIE5TIChpbnN0ZWFkIG9mIG11Y2tpbmcKKyAgICAgd2l0aCBpdHMgYmFja2dy b3VuZCBjb2xvciksIHdlIG11c3QgY2xlYXIganVzdCB0aGUgaW1hZ2UgYXJlYS4gKi8KKyAgaWYg KHMtPmhsID09IERSQVdfTU9VU0VfRkFDRSkKKyAgICB7CisgICAgICBmYWNlID0gRkFDRV9GUk9N X0lEIChzLT5mLCBNT1VTRV9ITF9JTkZPIChzLT5mKS0+bW91c2VfZmFjZV9mYWNlX2lkKTsKKyAg ICAgIGlmICghZmFjZSkKKyAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBNT1VTRV9G QUNFX0lEKTsKKyAgICB9CisgIGVsc2UKKyAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBz LT5maXJzdF9nbHlwaC0+ZmFjZV9pZCk7CisgIFtuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNf RkFDRV9CQUNLR1JPVU5EIChmYWNlKSwgcy0+Zikgc2V0XTsKKyAgaWYgKGJnX2hlaWdodCA+IHMt PnNsaWNlLmhlaWdodCB8fCBzLT5pbWctPmhtYXJnaW4gfHwgcy0+aW1nLT52bWFyZ2luCisgICAg ICB8fCBzLT5pbWctPm1hc2sgfHwgcy0+aW1nLT5waXhtYXAgPT0gMCB8fCBzLT53aWR0aCAhPSBz LT5iYWNrZ3JvdW5kX3dpZHRoKQorICAgIHsKKyAgICAgIGJyID0gTlNNYWtlUmVjdCAoYmdfeCwg YmdfeSwgcy0+YmFja2dyb3VuZF93aWR0aCwgYmdfaGVpZ2h0KTsKKyAgICAgIHMtPmJhY2tncm91 bmRfZmlsbGVkX3AgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJyID0gTlNNYWtl UmVjdCAoeCwgeSwgcy0+c2xpY2Uud2lkdGgsIHMtPnNsaWNlLmhlaWdodCk7CisgICAgfQorICBO U1JlY3RGaWxsIChicik7CisgIC8qIERyYXcgdGhlIGltYWdlLi4gZG8gd2UgbmVlZCB0byBkcmF3 IHBsYWNlaG9sZGVyIGlmIGltZyA9PW5pbD8gKi8KKyAgaWYgKGltZyAhPSBuaWwpCisgICAgewor I2lmZGVmIE5TX0lNUExfQ09DT0EKKyAgICAgIE5TUmVjdCBkciA9IE5TTWFrZVJlY3QgKHgsIHks IHMtPnNsaWNlLndpZHRoLCBzLT5zbGljZS5oZWlnaHQpOworICAgICAgTlNSZWN0IGlyID0gTlNN YWtlUmVjdCAocy0+c2xpY2UueCwgcy0+c2xpY2UueSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMtPnNsaWNlLndpZHRoLCBzLT5zbGljZS5oZWlnaHQpOworICAgICAgW2ltZyBkcmF3 SW5SZWN0OiBkcgorICAgICAgICAgICAgIGZyb21SZWN0OiBpcgorICAgICAgICAgICAgIG9wZXJh dGlvbjogTlNDb21wb3NpdGVTb3VyY2VPdmVyCisgICAgICAgICAgICAgIGZyYWN0aW9uOiAxLjAK KyAgICAgICAgICAgcmVzcGVjdEZsaXBwZWQ6IFlFUworICAgICAgICAgICAgICAgIGhpbnRzOiBu aWxdOworI2Vsc2UKKyAgICAgIFtpbWcgY29tcG9zaXRlVG9Qb2ludDogTlNNYWtlUG9pbnQgKHgs IHkgKyBzLT5zbGljZS5oZWlnaHQpCisgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IE5TQ29t cG9zaXRlU291cmNlT3Zlcl07CisjZW5kaWYKKyAgICB9CisgIGlmIChzLT5obCA9PSBEUkFXX0NV UlNPUikKKyAgICB7CisgICAgW0ZSQU1FX0NVUlNPUl9DT0xPUiAocy0+Zikgc2V0XTsKKyAgICBp ZiAocy0+dy0+cGh5c19jdXJzb3JfdHlwZSA9PSBNQ19GSUxMRURfQk9YKQorICAgICAgdGRDb2wg PSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKSwgcy0+ Zik7CisgICAgZWxzZQorICAgICAgLyogQ3VycmVudGx5IG9uIE5TIGltZy0+bWFzayBpcyBhbHdh eXMgMC4gU2luY2UKKyAgICAgICAgIGdldF93aW5kb3dfY3Vyc29yX3R5cGUgc3BlY2lmaWVzIGEg aG9sbG93IGJveCBjdXJzb3Igd2hlbiBvbgorICAgICAgICAgYSBub24tbWFza2VkIGltYWdlIHdl IG5ldmVyIHJlYWNoIHRoaXMgY2xhdXNlLiBCdXQgd2UgcHV0IGl0CisgICAgICAgICBpbiBpbiBh bnRpY2lwYXRpb24gb2YgYmV0dGVyIHN1cHBvcnQgZm9yIGltYWdlIG1hc2tzIG9uCisgICAgICAg ICBOUy4gKi8KKyAgICAgIHRkQ29sID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0Vf Rk9SRUdST1VORCAoZmFjZSksIHMtPmYpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRk Q29sID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZmFjZSks IHMtPmYpOworICAgIH0KKyAgLyogRHJhdyB1bmRlcmxpbmUsIG92ZXJsaW5lLCBzdHJpa2UtdGhy b3VnaC4gKi8KKyAgbWNfbnNfZHJhd190ZXh0X2RlY29yYXRpb24gKHMsIGZhY2UsIHRkQ29sLCBi ci5zaXplLndpZHRoLCBici5vcmlnaW4ueCk7CisgIC8qIERyYXcgcmVsaWVmLCBpZiByZXF1ZXN0 ZWQgKi8KKyAgaWYgKHMtPmltZy0+cmVsaWVmIHx8IHMtPmhsID09RFJBV19JTUFHRV9SQUlTRUQg fHwgcy0+aGwgPT1EUkFXX0lNQUdFX1NVTktFTikKKyAgICB7CisgICAgICBpZiAocy0+aGwgPT0g RFJBV19JTUFHRV9TVU5LRU4gfHwgcy0+aGwgPT0gRFJBV19JTUFHRV9SQUlTRUQpCisgICAgICAg IHsKKyAgICAgICAgICB0aCA9IHRvb2xfYmFyX2J1dHRvbl9yZWxpZWYgPj0gMCA/CisgICAgICAg ICAgICB0b29sX2Jhcl9idXR0b25fcmVsaWVmIDogREVGQVVMVF9UT09MX0JBUl9CVVRUT05fUkVM SUVGOworICAgICAgICAgIHJhaXNlZF9wID0gKHMtPmhsID09IERSQVdfSU1BR0VfUkFJU0VEKTsK KyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgdGggPSBhYnMgKHMt PmltZy0+cmVsaWVmKTsKKyAgICAgICAgICByYWlzZWRfcCA9IChzLT5pbWctPnJlbGllZiA+IDAp OworICAgICAgICB9CisgICAgICByLm9yaWdpbi54ID0geCAtIHRoOworICAgICAgci5vcmlnaW4u eSA9IHkgLSB0aDsKKyAgICAgIHIuc2l6ZS53aWR0aCA9IHMtPnNsaWNlLndpZHRoICsgMip0aC0x OworICAgICAgci5zaXplLmhlaWdodCA9IHMtPnNsaWNlLmhlaWdodCArIDIqdGgtMTsKKyAgICAg IG5zX2RyYXdfcmVsaWVmIChyLCB0aCwgcmFpc2VkX3AsCisgICAgICAgICAgICAgICAgICAgICAg cy0+c2xpY2UueSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIHMtPnNsaWNlLnkgKyBzLT5z bGljZS5oZWlnaHQgPT0gcy0+aW1nLT5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgcy0+ c2xpY2UueCA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIHMtPnNsaWNlLnggKyBzLT5zbGlj ZS53aWR0aCA9PSBzLT5pbWctPndpZHRoLCBzKTsKKyAgICB9CisgIC8qIElmIHRoZXJlIGlzIG5v IG1hc2ssIHRoZSBiYWNrZ3JvdW5kIHdvbid0IGJlIHNlZW4sCisgICAgIHNvIGRyYXcgYSByZWN0 YW5nbGUgb24gdGhlIGltYWdlIGZvciB0aGUgY3Vyc29yLgorICAgICBEbyB0aGlzIGZvciBhbGwg aW1hZ2VzLCBnZXR0aW5nIHRyYW5zcGFyZW5jeSByaWdodCBpcyBub3QgcmVsaWFibGUuICAqLwor ICBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IpCisgICAgeworICAgICAgaW50IHRoaWNrbmVzcyA9 IGFicyAocy0+aW1nLT5yZWxpZWYpOworICAgICAgaWYgKHRoaWNrbmVzcyA9PSAwKSB0aGlja25l c3MgPSAxOworICAgIGlmIChnbHlwaF9mbGF2b3IgPT0gTUNfR0xZUEgKKyAgICAgICAgfHwgZ2x5 cGhfZmxhdm9yID09IE1DX0dMWVBITEVTUykKKyAgICAgIHsKKyAgICAgICAgTlNDb2xvciAqYm9y ZGVyX2NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoQ2FsaWJyYXRlZFJlZDogbHNsLnJlZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy ZWVuOiBsc2wuZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYmx1ZTogbHNsLmJsdWUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogMS4wXTsKKyAgICAgICAg bnNfZHJhd19ib3ggKGJyLCB0aGlja25lc3MsIGJvcmRlcl9jb2xvciwgMSwgMSk7CisgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIG5zX2RyYXdfYm94IChiciwgdGhpY2tuZXNzLCBGUkFNRV9D VVJTT1JfQ09MT1IgKHMtPmYpLCAxLCAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCittY19u c19vdmVyd3JpdHRlbl9oZWxwZXIgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIHN0cnVjdCBnbHlw aF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdseXBo X3JvdyAqcm93LCBlbnVtIHR5cGVfb2ZfY2FjaGUgY2FjaGVfdHlwZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGdseXBoICpnbHlwaCkKK3sKKyAgLy8gbnNfZHJhd191bmRlcndh dmUgKHMsIHMtPndpZHRoLCBzLT54KTsKKyAgTlNDb2xvciAqaG9sbG93X2NvbG9yID0gRlJBTUVf QkFDS0dST1VORF9DT0xPUiAocy0+Zik7CisgIHN0cnVjdCBmYWNlICpmYWNlID0gRkFDRV9GUk9N X0lEIChzLT5mLCBERUZBVUxUX0ZBQ0VfSUQpOworICBpbnQgcm93X3Zwb3MgPSBNQVRSSVhfUk9X X1ZQT1MgKHJvdywgbWF0cml4KTsKKyAgc3RydWN0IG11bHRpcGxlX2N1cnNvcnNfY2FjaGUgZm9v X2VsdHM7CisgIHN3aXRjaCAoY2FjaGVfdHlwZSkKKyAgICB7CisgICAgICBjYXNlIE5PX0NBQ0hF OgorICAgICAgICB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGNhc2UgTUNf Q0FDSEU6CisgICAgICAgIHsKKyAgICAgICAgICBmb29fZWx0cy5jYWNoZXMgPSBzLT53LT5tY19l bHRzLmNhY2hlczsKKyAgICAgICAgICBmb29fZWx0cy5hbGxvY2F0ZWQgPSBzLT53LT5tY19lbHRz LmFsbG9jYXRlZDsKKyAgICAgICAgICBmb29fZWx0cy51c2VkID0gcy0+dy0+bWNfZWx0cy51c2Vk OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBjYXNlIENIX0NBQ0hFOgorICAg ICAgICB7CisgICAgICAgICAgZm9vX2VsdHMuY2FjaGVzID0gcy0+dy0+Y2hfZWx0cy5jYWNoZXM7 CisgICAgICAgICAgZm9vX2VsdHMuYWxsb2NhdGVkID0gcy0+dy0+Y2hfZWx0cy5hbGxvY2F0ZWQ7 CisgICAgICAgICAgZm9vX2VsdHMudXNlZCA9IHMtPnctPmNoX2VsdHMudXNlZDsKKyAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2FzZSBGQ19DQUNIRToKKyAgICAgICAgeworICAg ICAgICAgIGZvb19lbHRzLmNhY2hlcyA9IHMtPnctPmZjX2VsdHMuY2FjaGVzOworICAgICAgICAg IGZvb19lbHRzLmFsbG9jYXRlZCA9IHMtPnctPmZjX2VsdHMuYWxsb2NhdGVkOworICAgICAgICAg IGZvb19lbHRzLnVzZWQgPSBzLT53LT5mY19lbHRzLnVzZWQ7CisgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICB9CisgIC8qIFNUUkVUQ0hfR0xZUEggbWF5IGNvbnRhaW4gbW9yZSB0aGFu IG9uZSBmYWtlIGN1cnNvciBhdCB0aGUgc2FtZSBIUE9TLiAqLworICBmb3IgKGludCBlbHQgPSAw OyBlbHQgPCBmb29fZWx0cy51c2VkOyArK2VsdCkKKyAgICB7CisgICAgICBpbnQgeCA9IGZvb19l bHRzLmNhY2hlc1tlbHRdLng7CisgICAgICBpbnQgZnggPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5m eDsKKyAgICAgIGludCB5ID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0ueTsKKyAgICAgIGludCBmeSA9 IGZvb19lbHRzLmNhY2hlc1tlbHRdLmZ5OworICAgICAgaW50IGhwb3MgPSBmb29fZWx0cy5jYWNo ZXNbZWx0XS5ocG9zOworICAgICAgaW50IHZwb3MgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS52cG9z OworICAgICAgaW50IHdkID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0ud2Q7CisgICAgICBpbnQgaCA9 IGZvb19lbHRzLmNhY2hlc1tlbHRdLmg7CisgICAgICBlbnVtIHR5cGVfb2ZfY3Vyc29yIGN1cnNv cl90eXBlID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uY3Vyc29yX3R5cGU7CisgICAgICBpbnQgY3Vy c29yX3dpZHRoID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uY3Vyc29yX3dpZHRoOworICAgICAgc3Ry dWN0IG1jX1JHQiBsc2xfZmcgPSB7LnJlZCA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmZvcmVncm91 bmQucmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gZm9vX2VsdHMu Y2FjaGVzW2VsdF0uZm9yZWdyb3VuZC5ncmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC5ibHVlID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uZm9yZWdyb3VuZC5ibHVlfTsKKyAgICAg IHN0cnVjdCBtY19SR0IgbHNsX2JnID0gey5yZWQgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5iYWNr Z3JvdW5kLnJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9IGZvb19l bHRzLmNhY2hlc1tlbHRdLmJhY2tncm91bmQuZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuYmx1ZSA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmJhY2tncm91bmQuYmx1ZX07Cisg ICAgICBib29sIGFjdGl2ZV9wID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uYWN0aXZlX3A7CisgICAg ICBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5nbHlw aF9mbGF2b3I7CisgICAgICBib29sIGVuYWJsZWRfcCA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmVu YWJsZWRfcDsKKyAgICAgIGJvb2wgZ29fcCA9ICh2cG9zID09IHJvd192cG9zCisgICAgICAgICAg ICAgICAgICAgJiYgaHBvcyA9PSBnbHlwaC0+aHBvcworICAgICAgICAgICAgICAgICAgICYmIGVu YWJsZWRfcCk7CisgICAgICBpZiAoIWdvX3ApCisgICAgICAgIGNvbnRpbnVlOworICAgICAgTlNS ZWN0IHI7CisgICAgICByLm9yaWdpbi54ID0gZng7CisgICAgICByLm9yaWdpbi55ID0gZnk7Cisg ICAgICByLnNpemUuaGVpZ2h0ID0gaDsKKyAgICAgIHIuc2l6ZS53aWR0aCA9IHdkOworICAgICAg W1tOU0NvbG9yIGNvbG9yV2l0aENhbGlicmF0ZWRSZWQ6IGxzbF9mZy5yZWQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdyZWVuOiBsc2xfZmcuZ3JlZW4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBibHVlOiBsc2xfZmcuYmx1ZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWxwaGE6IDEuMF0gc2V0XTsKKyAgaWYgKGN1cnNvcl90eXBlID09IE1D X0ZSQU1FRF9CT1gpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgYnVmID0gcy0+dy0+Y29udGVu dHM7CisgICAgICBDSEVDS19CVUZGRVIgKGJ1Zik7CisgICAgICBzdHJ1Y3QgYnVmZmVyICpiID0g WEJVRkZFUiAoYnVmKTsKKyAgICAgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJh bnNpZW50X21hcmtfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQ IChCVkFSIChiLCBtYXJrX2FjdGl2ZSkpKTsKKyAgICAgIHB0cmRpZmZfdCByZWdpb25fYmVnaW5u aW5nID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBYRklYTlVNIChGcmVnaW9uX2JlZ2lubmluZyAoKSkg OiAtMTsKKyAgICAgIHB0cmRpZmZfdCByZWdpb25fZW5kID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBY RklYTlVNIChGcmVnaW9uX2VuZCAoKSkgOiAtMTsKKyAgICAgIHB0cmRpZmZfdCBvcG9pbnRfcHQg PSAocy0+dyA9PSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgID8gUFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFhGSVhOVU0gKEZt YXJrZXJfcG9zaXRpb24gKHMtPnctPnBvaW50bSkpOworICAgICAgYm9vbCByZWdpb25faW5fYm91 bmRzX3AgPSAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBvcG9pbnRfcHQgPj0gcmVnaW9uX2JlZ2lubmluZworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgb3BvaW50X3B0IDwgcmVnaW9uX2VuZCk7CisgICAgICBpZiAocmVnaW9u X2FjdGl2ZV9wCisgICAgICAgICAgJiYgcmVnaW9uX2luX2JvdW5kc19wCisgICAgICAgICAgJiYg YWN0aXZlX3ApCisgICAgICAgIHsKKyAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2 ZV9yZWdpb25fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBzLT5mLCBpbnRlcm4g KCIrLXJlYWwtZmFrZS1jdXJzb3ItcmVnaW9uLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgc3Ry dWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYs IGhvbGxvd19hY3RpdmVfcmVnaW9uX2ZhY2VfaWQpOworICAgICAgICAgIE5TQ29sb3IgKmhvbGxv d19hY3RpdmVfcmVnaW9uX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0Vf QkFDS0dST1VORCAoaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZSksIHMtPmYpOworICAgICAgICAg IGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfcmVnaW9uX2NvbG9yOworICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAmJiAhcmVn aW9uX2luX2JvdW5kc19wCisgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAgICAg IHsKKyAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFj ZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBzLT5mLCBpbnRlcm4gKCIrLXJlYWwtZmFr ZS1jdXJzb3ItcmVnaW9uLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAq aG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIGhvbGxv d19hY3RpdmVfcmVnaW9uX291dF9mYWNlX2lkKTsKKyAgICAgICAgICAgIE5TQ29sb3IgKmhvbGxv d19hY3RpdmVfcmVnaW9uX291dF9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19G QUNFX0ZPUkVHUk9VTkQgKGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlKSwgcy0+Zik7Cisg ICAgICAgICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfY29sb3I7 CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCFyZWdpb25fYWN0aXZlX3AgJiYgYWN0 aXZlX3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3df YWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50ZXJuICgi Ky1yZWFsLWZha2UtY3Vyc29yLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIHN0cnVjdCBm YWNlICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIGhvbGxvd19hY3Rp dmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgIE5TQ29sb3IgKmhvbGxvd19hY3RpdmVfY29sb3Ig PSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChob2xsb3dfYWN0 aXZlX2ZhY2UpLCBzLT5mKTsKKyAgICAgICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2Fj dGl2ZV9jb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFRoZSByZWdpb24gaXMg X25vdF8gdmlzaWJsZSBpbiB0aGUgaW5hY3RpdmUgd2luZG93IGJlY2F1c2UgdGhlIG92ZXJsYXkg d2luZG93IHByb3BlcnR5IGlzIHVzZWQuICovCisgICAgICAgICAgICBlbHNlIGlmICghYWN0aXZl X3ApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93 X2luYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50ZXJu ICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAg ICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChz LT5mLCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgTlNDb2xvciAq aG9sbG93X2luYWN0aXZlX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0Vf QkFDS0dST1VORCAoaG9sbG93X2luYWN0aXZlX2ZhY2UpLCBzLT5mKTsKKyAgICAgICAgICAgICAg ICBob2xsb3dfY29sb3IgPSBob2xsb3dfaW5hY3RpdmVfY29sb3I7CisgICAgICAgICAgICAgIH0K KyAgICB9CisgICAgZWxzZSBpZiAoZmFjZSAmJiBOU19GQUNFX0JBQ0tHUk9VTkQgKGZhY2UpID09 IG5zX2luZGV4X2NvbG9yIChGUkFNRV9DVVJTT1JfQ09MT1IgKHMtPmYpLCBzLT5mKSkKKyAgICAg IHsKKyAgICAgICAgW25zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQg KGZhY2UpLCBzLT5mKSBzZXRdOworICAgICAgICBob2xsb3dfY29sb3IgPSBGUkFNRV9DVVJTT1Jf Q09MT1IgKHMtPmYpOworICAgICAgfQorICAgICAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgICAg ICAgeworICAgICAgICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDoKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgTUNfTk9fQ1VSU09SOgorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBNQ19SSUdIVF9GUklOR0VfQklUTUFQOgorICAgICAgICAgIGNhc2UgTUNf TEVGVF9GUklOR0VfQklUTUFQOgorICAgICAgICAgIGNhc2UgTUNfRklMTEVEX0JPWDoKKyAgICAg ICAgICAgIE5TUmVjdEZpbGwgKHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBNQ19GUkFNRURfQk9YOgorICAgICAgICAgICAgTlNSZWN0RmlsbCAocik7CisgICAgICAgICAg ICBbaG9sbG93X2NvbG9yIHNldF07CisgICAgICAgICAgICBOU1JlY3RGaWxsIChOU0luc2V0UmVj dCAociwgMSwgMSkpOworICAgICAgICAgICAgW0ZSQU1FX0NVUlNPUl9DT0xPUiAocy0+Zikgc2V0 XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTUNfSE9MTE9XX0JPWDoKKyAg ICAgICAgICAgIE5TUmVjdEZpbGwgKHIpOworICAgICAgICAgICAgW2hvbGxvd19jb2xvciBzZXRd OworICAgICAgICAgICAgTlNSZWN0RmlsbCAoTlNJbnNldFJlY3QgKHIsIDEsIDEpKTsKKyAgICAg ICAgICAgIFtGUkFNRV9DVVJTT1JfQ09MT1IgKHMtPmYpIHNldF07CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlIE1DX0hCQVI6CisgICAgICAgICAgICBOU1JlY3RGaWxsIChyKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTUNfQkFSOgorICAgICAgICAgICAg TlNSZWN0RmlsbCAocik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgLyog SWYgYSBnbHlwaCBleGlzdHMgKHMtPmNoYXIyYiAhPSBOVUxMKSwgdGhlbiBkcmF3IHRoZSBnbHlw aCBvbiB0b3Agb2YgdGhlCisgICAgICBuZXdseSBkcmF3biByZWN0YW5nbGUgdGhhdCB3YXMgY3Jl YXRlZCBoZXJlaW5hYm92ZS4gIFRvIHRoZSBleHRlbnQgdGhhdCB3ZQorICAgICAgd2FudCB0byBk b3VibGUtaW1wcmludCBnbHlwaHMgdG8gbWFrZSB0aGVtIGFwcGVhciB0byBiZSBzZW1pLWJvbGQs IGl0IGNhbgorICAgICAgYmUgZG9uZSBoZXJlIGZvciBhbGwgY3Vyc29yIHR5cGVzLiAgVGhlIGJv eC1zdHlsZSBjdXJzb3JzIGFyZSBpbXByaW50ZWQKKyAgICAgIHdpdGggZ2x5cGhzIG9ubHkgb25l ICgxKSB0aW1lLiAgVGhlIHNlbWktYm9sZCBhcHBlYXJhbmNlIGlzIGhlbHBmdWwgd2hlbgorICAg ICAgZGVidWdnaW5nIHRvIHNlZSB0aGF0IHRoZSBjb29yZGluYXRlcyBhcmUgY29ycmVjdC4gKi8K KyAgICAgIGlmIChzLT5jaGFyMmIgIT0gTlVMTAorICAgICAgICAgICYmIChjdXJzb3JfdHlwZSA9 PSBNQ19GSUxMRURfQk9YCisgICAgICAgICAgICAgIHx8IGN1cnNvcl90eXBlID09IE1DX0ZSQU1F RF9CT1gKKyAgICAgICAgICAgICAgfHwgY3Vyc29yX3R5cGUgPT0gTUNfSE9MTE9XX0JPWCkpCisg ICAgICAgIHsKKyAgICAgICAgICBCT09MIGlzQ29tcG9zaXRlID0gcy0+Zmlyc3RfZ2x5cGgtPnR5 cGUgPT0gQ09NUE9TSVRFX0dMWVBIOworICAgICAgICAgIGlmIChpc0NvbXBvc2l0ZSkKKyAgICAg ICAgICAgIG5zX2RyYXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzKTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCBm b250ICpmb250ID0gcy0+ZmFjZS0+Zm9udDsKKyAgICAgICAgICAgICAgICBpZiAoIWZvbnQpCisg ICAgICAgICAgICAgICAgICBmb250ID0gRlJBTUVfRk9OVCAocy0+Zik7CisgICAgICAgICAgICAg ICAgYm9vbCB3aXRoX2JnX3AgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb250LT5kcml2ZXIt PmRyYXcgKHMsIHMtPmNtcF9mcm9tLCBzLT5uY2hhcnMsIHMtPngsIHMtPnliYXNlLCB3aXRoX2Jn X3ApOworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk CittY19uc19kcmF3X292ZXJ3cml0dGVuIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBzdHJ1Y3Qg Z2x5cGhfbWF0cml4ICptYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5 cGhfcm93ICpyb3csIHN0cnVjdCBnbHlwaCAqZ2x5cGgpCit7CisgIC8vICBpbnQgdnBvcyA9IE1B VFJJWF9ST1dfVlBPUyAocm93LCBtYXRyaXgpOworICAvLyAgY2xvY2tfdCBjbG9ja19zdGFydCA9 IGNsb2NrKCk7CisgIG1jX25zX292ZXJ3cml0dGVuX2hlbHBlciAocywgbWF0cml4LCByb3csIE1D X0NBQ0hFLCBnbHlwaCk7CisgIG1jX25zX292ZXJ3cml0dGVuX2hlbHBlciAocywgbWF0cml4LCBy b3csIENIX0NBQ0hFLCBnbHlwaCk7CisgIG1jX25zX292ZXJ3cml0dGVuX2hlbHBlciAocywgbWF0 cml4LCByb3csIEZDX0NBQ0hFLCBnbHlwaCk7CisgIC8vICBjbG9ja190IGNsb2NrX2VuZCA9IGNs b2NrKCk7CisgIC8vICBkb3VibGUgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoY2xvY2tfZW5k IC0gY2xvY2tfc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICAvLyAgZnByaW50ZiAoc3RkZXJy LCAibnNfZHJhd19vdmVyd3JpdHRlbiAoJWQpOiAgVElNRSAoJWYpXG4iLCB2cG9zLCBjcHVfdGlt ZV91c2VkKTsKK30KKworc3RhdGljIHZvaWQKK21jX25zX21heWJlX2R1bXBnbHlwaHNfYmFja2dy b3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgY2hhciBmb3JjZV9wKQoreworICBOU1RSQUNF ICgibWNfbnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3JvdW5kIik7CisgIGlmICghcy0+YmFja2dy b3VuZF9maWxsZWRfcC8qIHx8IHMtPmhsID09IERSQVdfTU9VU0VfRkFDRSovKQorICAgIHsKKyAg ICAgIGludCBib3hfbGluZV93aWR0aCA9IG1heCAocy0+ZmFjZS0+Ym94X2xpbmVfd2lkdGgsIDAp OworICAgICAgaWYgKEZPTlRfSEVJR0hUIChzLT5mb250KSA8IHMtPmhlaWdodCAtIDIgKiBib3hf bGluZV93aWR0aAorICAgICAgICAgIC8qIFdoZW4geGRpc3AuYyBpZ25vcmVzIEZPTlRfSEVJR0hU LCB3ZSBjYW5ub3QgdHJ1c3QgZm9udAorICAgICAgICAgICAgIGRpbWVuc2lvbnMsIHNpbmNlIHRo ZSBhY3R1YWwgZ2x5cGhzIG1pZ2h0IGJlIG11Y2gKKyAgICAgICAgICAgICBzbWFsbGVyLiAgU28g aW4gdGhhdCBjYXNlIHdlIGFsd2F5cyBjbGVhciB0aGUgcmVjdGFuZ2xlCisgICAgICAgICAgICAg d2l0aCBiYWNrZ3JvdW5kIGNvbG9yLiAgKi8KKyAgICAgICAgICB8fCBGT05UX1RPT19ISUdIIChz LT5mb250KQorICAgICAgICAgIHx8IHMtPmZvbnRfbm90X2ZvdW5kX3AgfHwgcy0+ZXh0ZW5kc190 b19lbmRfb2ZfbGluZV9wIHx8IGZvcmNlX3ApCisgICAgICB7CisgICAgICAgICAgc3RydWN0IGZh Y2UgKmZhY2U7CisgICAgICAgICAgaWYgKHMtPmhsID09IERSQVdfTU9VU0VfRkFDRSkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAocy0+ZiwKKyAgICAg ICAgICAgTU9VU0VfSExfSU5GTyAocy0+ZiktPm1vdXNlX2ZhY2VfZmFjZV9pZCk7CisgICAgICAg ICAgICAgIGlmICghZmFjZSkKKyAgICAgICAgICAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChz LT5mLCBNT1VTRV9GQUNFX0lEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAg ICAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBzLT5maXJzdF9nbHlwaC0+ZmFjZV9p ZCk7CisgICAgICAgICAgaWYgKCFmYWNlLT5zdGlwcGxlKQorICAgICAgICAgICAgWyhOU19GQUNF X0JBQ0tHUk9VTkQgKGZhY2UpICE9IDAKKyAgICAgICAgICAgICAgPyBuc19sb29rdXBfaW5kZXhl ZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKSwgcy0+ZikKKyAgICAgICAgICAgICAg OiBGUkFNRV9CQUNLR1JPVU5EX0NPTE9SIChzLT5mKSkgc2V0XTsKKyAgICAgICAgICBlbHNlCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBuc19kaXNwbGF5X2luZm8gKmRweWlu Zm8gPSBGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYpOworICAgICAgICAgICAgICBbW2RweWluZm8t PmJpdG1hcHNbZmFjZS0+c3RpcHBsZS0xXS5pbWcgc3RpcHBsZU1hc2tdIHNldF07CisgICAgICAg ICAgICB9CisgICAgICAgICAgaWYgKHMtPmhsICE9IERSQVdfQ1VSU09SKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICBzLT5yZWN0YW5nbGVfbnVrZWRfcCA9IHRydWU7CisgICAgICAgICAg ICAgIE5TUmVjdCByID0gTlNNYWtlUmVjdCAocy0+eCwgcy0+eSArIGJveF9saW5lX3dpZHRoLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmFja2dyb3VuZF93aWR0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmhlaWdodC0yKmJveF9saW5l X3dpZHRoKTsKKyAgICAgICAgICAgICAgTlNSZWN0RmlsbCAocik7CisgICAgICAgICAgICB9Cisg ICAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IDE7CisgICAgICB9CisgICAgfQorfQorCitzdGF0 aWMgdm9pZAorbWNfbnNfZHJhd19nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMs IHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsLCBlbnVtIG1jX2ZsYXZvciBn bHlwaF9mbGF2b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB0eXBlX29mX2N1cnNv ciBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2QsIGJvb2wgYWN0 aXZlX3AsIGJvb2wgY3Vyc29yX2djX3ApCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgRXh0 ZXJuYWwgKFJJRik6IE1haW4gZHJhdy10ZXh0IGNhbGwuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LworeworICAvKiBUT0RPIChvcHRpbWl6ZSk6IGZvY3VzIGZvciBib3ggYW5kIGNvbnRlbnRzIGRy YXcgKi8KKyAgTlNSZWN0IHJbMl07CisgIGludCBuLCBmbGFnczsKKyAgY2hhciBib3hfZHJhd25f cCA9IDA7CisgIHN0cnVjdCBmb250ICpmb250ID0gcy0+ZmFjZS0+Zm9udDsKKyAgaWYgKCFmb250 KQorICAgIGZvbnQgPSBGUkFNRV9GT05UIChzLT5mKTsKKyAgTlNUUkFDRV9XSEVOIChOU1RSQUNF X0dST1VQX0dMWVBIUywgIm1jX25zX2RyYXdfZ2x5cGhfc3RyaW5nIik7CisgIGlmIChzLT5uZXh0 ICYmIHMtPnJpZ2h0X292ZXJoYW5nICYmICFzLT5mb3Jfb3ZlcmxhcHMpCisgICAgeworICAgICAg aW50IHdpZHRoOworICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqbmV4dDsKKyAgICAgIGZvciAo d2lkdGggPSAwLCBuZXh0ID0gcy0+bmV4dDsKKyAgICAgICAgICAgbmV4dCAmJiB3aWR0aCA8IHMt PnJpZ2h0X292ZXJoYW5nOworICAgICAgICAgICB3aWR0aCArPSBuZXh0LT53aWR0aCwgbmV4dCA9 IG5leHQtPm5leHQpCisgICAgICAgIGlmIChuZXh0LT5maXJzdF9nbHlwaC0+dHlwZSAhPSBJTUFH RV9HTFlQSCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAobmV4dC0+Zmlyc3RfZ2x5cGgt PnR5cGUgIT0gU1RSRVRDSF9HTFlQSCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IG4gPSBuc19nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocy0+bmV4dCwgcik7CisgICAgICAg ICAgICAgICAgaWYgKCFtY19uc19jbGlwX3RvX3JlY3QgKHMtPmYsIHIsIG4sIHJvdykpCisgICAg ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgbWNfbnNfbWF5YmVfZHVtcGds eXBoc19iYWNrZ3JvdW5kIChzLT5uZXh0LCAxKTsKKyAgICAgICAgICAgICAgICBuc19yZXNldF9j bGlwcGluZyAocy0+Zik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1jX25zX2R1bXBnbHlwaHNfc3RyZXRjaCAocy0+ bmV4dCwgd2QsIHJvdyk7CisgICAgICAgICAgICAgICAgaWYgKChzLT5uZXh0LT5sZWZ0X292ZXJ3 cml0dGVuX3AgfHwgcy0+bmV4dC0+cmlnaHRfb3ZlcndyaXR0ZW5fcCkKKyAgICAgICAgICAgICAg ICAgICAgJiYgcy0+bmV4dC0+YWN0aW9uX3R5cGUgPT0gTUNfRFJBV19HTFlQSCkKKyAgICAgICAg ICAgICAgICAgIG1jX25zX2RyYXdfb3ZlcndyaXR0ZW4gKHMtPm5leHQsIG1hdHJpeCwgcm93LCBz LT5uZXh0LT5maXJzdF9nbHlwaCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5leHQt Pm51bV9jbGlwcyA9IDA7CisgICAgICAgICAgfQorICAgIH0KKyAgaWYgKCFzLT5mb3Jfb3Zlcmxh cHMgJiYgcy0+ZmFjZS0+Ym94ICE9IEZBQ0VfTk9fQk9YCisgICAgICAmJiAocy0+Zmlyc3RfZ2x5 cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgICAgIHx8IHMtPmZpcnN0X2dseXBoLT50eXBl ID09IENPTVBPU0lURV9HTFlQSCkpCisgICAgeworICAgICAgbiA9IG5zX2dldF9nbHlwaF9zdHJp bmdfY2xpcF9yZWN0IChzLCByKTsKKyAgICAgIGlmICghbWNfbnNfY2xpcF90b19yZWN0IChzLT5m LCByLCBuLCByb3cpKQorICAgICAgICByZXR1cm47CisgICAgICBtY19uc19tYXliZV9kdW1wZ2x5 cGhzX2JhY2tncm91bmQgKHMsIDEpOworICAgICAgbnNfZHVtcGdseXBoc19ib3hfb3JfcmVsaWVm IChzKTsKKyAgICAgIG5zX3Jlc2V0X2NsaXBwaW5nIChzLT5mKTsKKyAgICAgIGJveF9kcmF3bl9w ID0gMTsKKyAgICB9CisgIHN3aXRjaCAocy0+Zmlyc3RfZ2x5cGgtPnR5cGUpCisgICAgeworICAg IGNhc2UgSU1BR0VfR0xZUEg6CisgICAgICBuID0gbnNfZ2V0X2dseXBoX3N0cmluZ19jbGlwX3Jl Y3QgKHMsIHIpOworICAgICAgaWYgKCFtY19uc19jbGlwX3RvX3JlY3QgKHMtPmYsIHIsIG4sIHJv dykpCisgICAgICAgIHJldHVybjsKKyAgICAgIG1jX25zX2R1bXBnbHlwaHNfaW1hZ2UgKHMsIHJb MF0sIGxzbCwgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgYWN0aXZlX3ApOworICAgICAgbnNf cmVzZXRfY2xpcHBpbmcgKHMtPmYpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTVFJFVENIX0dM WVBIOgorICAgICAgbWNfbnNfZHVtcGdseXBoc19zdHJldGNoIChzLCB3ZCwgcm93KTsKKyAgICAg IGlmICgocy0+bGVmdF9vdmVyd3JpdHRlbl9wIHx8IHMtPnJpZ2h0X292ZXJ3cml0dGVuX3ApCisg ICAgICAgICAgJiYgcy0+YWN0aW9uX3R5cGUgPT0gTUNfRFJBV19HTFlQSCkKKyAgICAgICAgbWNf bnNfZHJhd19vdmVyd3JpdHRlbiAocywgbWF0cml4LCByb3csIHMtPmZpcnN0X2dseXBoKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgQ0hBUl9HTFlQSDoKKyAgICBjYXNlIENPTVBPU0lURV9HTFlQ SDoKKyAgICAgIG4gPSBuc19nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocywgcik7CisgICAg ICBpZiAoIW1jX25zX2NsaXBfdG9fcmVjdCAocy0+Ziwgciwgbiwgcm93KSkKKyAgICAgICAgcmV0 dXJuOworICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcworICAgICAgICAgIHx8IChzLT5jbXBfZnJv bSA+IDAKKyAgICAgICAgICAgICAgJiYgISBzLT5maXJzdF9nbHlwaC0+dS5jbXAuYXV0b21hdGlj KSkKKyAgICAgICAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IDE7CisgICAgICBlbHNlCisgICAg ICAgIG1jX25zX21heWJlX2R1bXBnbHlwaHNfYmFja2dyb3VuZCAocywgcy0+Zmlyc3RfZ2x5cGgt PnR5cGUgPT0gQ09NUE9TSVRFX0dMWVBIKTsKKyAgICAgIGZsYWdzID0gcy0+aGwgPT0gRFJBV19D VVJTT1IgPyBOU19EVU1QR0xZUEhfQ1VSU09SIDoKKyAgICAgICAgKHMtPmhsID09IERSQVdfTU9V U0VfRkFDRSA/IE5TX0RVTVBHTFlQSF9NT1VTRUZBQ0UgOgorICAgICAgICAgKHMtPmZvcl9vdmVy bGFwcyA/IE5TX0RVTVBHTFlQSF9GT1JFR1JPVU5EIDoKKyAgICAgICAgICBOU19EVU1QR0xZUEhf Tk9STUFMKSk7CisgICAgICB1bnNpZ25lZCBsb25nIHNhdmVkX2ZnID0gTlNfRkFDRV9GT1JFR1JP VU5EIChzLT5mYWNlKTsKKyAgICAgIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUiAmJiBjdXJzb3Jf dHlwZSA9PSBNQ19GSUxMRURfQk9YKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgbG9u ZyB0bXAgPSBOU19GQUNFX0JBQ0tHUk9VTkQgKHMtPmZhY2UpOworICAgICAgICAgIE5TX0ZBQ0Vf QkFDS0dST1VORCAocy0+ZmFjZSkgPSBOU19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpOworICAg ICAgICAgIE5TX0ZBQ0VfRk9SRUdST1VORCAocy0+ZmFjZSkgPSB0bXA7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IKKyAgICAgICAgICAgICAgICAgJiYg Y3Vyc29yX3R5cGUgPT0gTUNfRlJBTUVEX0JPWAorICAgICAgICAgICAgICAgICAmJiBhY3RpdmVf cCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9m YWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHMtPncsIHMtPmYsIGludGVybiAoIistcmVhbC1m YWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxv d19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAocy0+ZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lk KTsKKyAgICAgICAgICAgIE5TX0ZBQ0VfRk9SRUdST1VORCAocy0+ZmFjZSkgPSBOU19GQUNFX0ZP UkVHUk9VTkQgKGhvbGxvd19hY3RpdmVfZmFjZSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVs c2UgaWYgKHMtPmhsID09IERSQVdfQ1VSU09SCisgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29y X3R5cGUgPT0gTUNfRlJBTUVEX0JPWAorICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2luYWN0aXZl X2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50ZXJuICgiKy1yZWFs LWZha2UtY3Vyc29yLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIHN0cnVj dCBmYWNlICpob2xsb3dfaW5hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAocy0+ZiwgaG9sbG93 X2luYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICBOU19GQUNFX0ZPUkVHUk9VTkQgKHMt PmZhY2UpID0gTlNfRkFDRV9GT1JFR1JPVU5EIChob2xsb3dfaW5hY3RpdmVfZmFjZSk7CisgICAg ICAgICAgICB9CisgICAgICB7CisgICAgICAgIEJPT0wgaXNDb21wb3NpdGUgPSBzLT5maXJzdF9n bHlwaC0+dHlwZSA9PSBDT01QT1NJVEVfR0xZUEg7CisgICAgICAgIGlmIChpc0NvbXBvc2l0ZSkK KyAgICAgICAgICBuc19kcmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAocyk7 CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBib29sIHdpdGhf YmdfcCA9ICgoZmxhZ3MgPT0gTlNfRFVNUEdMWVBIX05PUk1BTCAmJiAhcy0+YmFja2dyb3VuZF9m aWxsZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmxhZ3MgPT0gTlNf RFVNUEdMWVBIX01PVVNFRkFDRSk7CisgICAgICAgICAgICAgIGlmICh3aXRoX2JnX3ApCisgICAg ICAgICAgICAgICAgcy0+YmFja2dyb3VuZF9udWtlZF9wID0gdHJ1ZTsKKyAgICAgICAgICAgICAg Zm9udC0+ZHJpdmVyLT5kcmF3IChzLCBzLT5jbXBfZnJvbSwgcy0+bmNoYXJzLCBzLT54LCBzLT55 YmFzZSwgd2l0aF9iZ19wKTsKKyAgICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHsKKyAgICAg ICAgTlNDb2xvciAqY29sID0gKE5TX0ZBQ0VfRk9SRUdST1VORCAocy0+ZmFjZSkgIT0gMAorICAg ICAgICAgICAgICAgICAgICAgICAgPyBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9G T1JFR1JPVU5EIChzLT5mYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMtPmYpCisgICAgICAgICAgICAgICAgICAgICAgICA6IEZSQU1FX0ZP UkVHUk9VTkRfQ09MT1IgKHMtPmYpKTsKKyAgICAgICAgW2NvbCBzZXRdOworICAgICAgICAvKiBE cmF3IHVuZGVybGluZSwgb3ZlcmxpbmUsIHN0cmlrZS10aHJvdWdoLiAqLworICAgICAgICBtY19u c19kcmF3X3RleHRfZGVjb3JhdGlvbiAocywgcy0+ZmFjZSwgY29sLCBzLT53aWR0aCwgcy0+eCk7 CisgICAgICB9CisgICAgICB7CisgICAgICAgIGlmIChzLT5maXJzdF9nbHlwaC0+dHlwZSAhPSBD T01QT1NJVEVfR0xZUEgKKyAgICAgICAgICAgICYmIChzLT5sZWZ0X292ZXJ3cml0dGVuX3AgfHwg cy0+cmlnaHRfb3ZlcndyaXR0ZW5fcCkKKyAgICAgICAgICAgICYmIChzLT5iYWNrZ3JvdW5kX251 a2VkX3AgfHwgcy0+cmVjdGFuZ2xlX251a2VkX3ApCisgICAgICAgICAgICAmJiBzLT5hY3Rpb25f dHlwZSA9PSBNQ19EUkFXX0dMWVBIKQorICAgICAgICAgIG1jX25zX2RyYXdfb3ZlcndyaXR0ZW4g KHMsIG1hdHJpeCwgcm93LCBzLT5maXJzdF9nbHlwaCk7CisgICAgICB9CisgICAgICBpZiAocy0+ aGwgPT0gRFJBV19DVVJTT1IKKyAgICAgICAgICAmJiBjdXJzb3JfdHlwZSA9PSBNQ19GSUxMRURf Qk9YKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBOU19GQUNFX0JB Q0tHUk9VTkQgKHMtPmZhY2UpOworICAgICAgICAgIE5TX0ZBQ0VfQkFDS0dST1VORCAocy0+ZmFj ZSkgPSBOU19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpOworICAgICAgICAgIE5TX0ZBQ0VfRk9S RUdST1VORCAocy0+ZmFjZSkgPSB0bXA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocy0+ aGwgPT0gRFJBV19DVVJTT1IKKyAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3R5cGUgPT0gTUNf RlJBTUVEX0JPWCkKKyAgICAgICAgICBOU19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpID0gc2F2 ZWRfZmc7CisgICAgICBuc19yZXNldF9jbGlwcGluZyAocy0+Zik7CisgICAgICBicmVhazsKKyAg ICBjYXNlIEdMWVBITEVTU19HTFlQSDoKKyAgICAgIG4gPSBuc19nZXRfZ2x5cGhfc3RyaW5nX2Ns aXBfcmVjdCAocywgcik7CisgICAgICBpZiAoIW1jX25zX2NsaXBfdG9fcmVjdCAocy0+Ziwgciwg biwgcm93KSkKKyAgICAgICAgcmV0dXJuOworICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcyB8fCAo cy0+Y21wX2Zyb20gPiAwCisgICAgICAgICAgICAmJiAhIHMtPmZpcnN0X2dseXBoLT51LmNtcC5h dXRvbWF0aWMpKQorICAgICAgICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gMTsKKyAgICAgIGVs c2UKKyAgICAgICAgbWNfbnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3JvdW5kIChzLCBzLT5maXJz dF9nbHlwaC0+dHlwZSA9PSBDT01QT1NJVEVfR0xZUEgpOworICAgICAgLyogLi4uICovCisgICAg ICAvKiBOb3QgeWV0IGltcGxlbWVudGVkLiAgKi8KKyAgICAgIC8qIC4uLiAqLworICAgICAgbnNf cmVzZXRfY2xpcHBpbmcgKHMtPmYpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg IGVtYWNzX2Fib3J0ICgpOworICAgIH0KKyAgLyogRHJhdyBib3ggaWYgbm90IGRvbmUgYWxyZWFk eS4gKi8KKyAgaWYgKCFzLT5mb3Jfb3ZlcmxhcHMgJiYgIWJveF9kcmF3bl9wICYmIHMtPmZhY2Ut PmJveCAhPSBGQUNFX05PX0JPWCkKKyAgICB7CisgICAgICBuID0gbnNfZ2V0X2dseXBoX3N0cmlu Z19jbGlwX3JlY3QgKHMsIHIpOworICAgICAgaWYgKCFtY19uc19jbGlwX3RvX3JlY3QgKHMtPmYs IHIsIG4sIHJvdykpCisgICAgICAgIHJldHVybjsKKyAgICAgIG5zX2R1bXBnbHlwaHNfYm94X29y X3JlbGllZiAocyk7CisgICAgICBuc19yZXNldF9jbGlwcGluZyAocy0+Zik7CisgICAgfQorICBz LT5udW1fY2xpcHMgPSAwOworfQorCisvKiBlbmQgTVVMVElQTEUtQ1VSU09SUyAqLworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgTlNUUkFD RSwgVHJhY2Ugc3VwcG9ydC4KQEAgLTExMDksNiArMjE5NCwxNiBAQCBzdGF0aWMgTlNSZWN0IGNv bnN0cmFpbl9mcmFtZV9yZWN0KE5TUmVjdCBmcmFtZVJlY3QsIGJvb2wgaXNGdWxsc2NyZWVuKQog ICAgZXh0ZXJuYWwgKFJJRikgY2FsbDsgd2hvbGUgZnJhbWUsIGNhbGxlZCBiZWZvcmUgdXBkYXRl X3dpbmRvd19iZWdpbgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHsKKworCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBmLT5tY191cGRhdGlu Z19mcmFtZSA9IGY7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICNpZmRlZiBOU19J TVBMX0NPQ09BCiAgIEVtYWNzVmlldyAqdmlldyA9IEZSQU1FX05TX1ZJRVcgKGYpOwogCkBAIC0x MjA5LDYgKzIzMDQsMTYgQEAgc3RhdGljIE5TUmVjdCBjb25zdHJhaW5fZnJhbWVfcmVjdChOU1Jl Y3QgZnJhbWVSZWN0LCBib29sIGlzRnVsbHNjcmVlbikKIAogLyogICBpZiAoZiA9PSBNT1VTRV9I TF9JTkZPIChmKS0+bW91c2VfZmFjZV9tb3VzZV9mcmFtZSkgKi8KICAgTU9VU0VfSExfSU5GTyAo ZiktPm1vdXNlX2ZhY2VfZGVmZXIgPSAwOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor LyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGYtPm1jX3VwZGF0aW5nX2ZyYW1lID0gTlVMTDsK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogfQogCiAKQEAgLTQ4MDMsNiArNTkwOCwx NyBAQCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHJhcGlkIGluY29taW5nIGV2ZW50cykuCiAgICAg ICBiYXIgPSBbW0VtYWNzU2Nyb2xsZXIgYWxsb2NdIGluaXRGcmFtZTogciB3aW5kb3c6IHdpbl07 CiAgICAgICB3c2V0X3ZlcnRpY2FsX3Njcm9sbF9iYXIgKHdpbmRvdywgbWFrZV9taW50X3B0ciAo YmFyKSk7CiAgICAgICB1cGRhdGVfcCA9IFlFUzsKKworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgICAgLyogVGhpcyBpcyBvbmx5IGZvciBk ZWJ1Z2dpbmcgcHVycG9zZXMuICovCisgICAgICBbYmFyIG1jX3NldF9yZWN0YW5nbGU6IHJdOwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgfQogICBlbHNlCiAgICAgewpAQCAt NDgxMCwxMiArNTkyNiwzMCBAQCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHJhcGlkIGluY29taW5n IGV2ZW50cykuCiAgICAgICBiYXIgPSBYTlNfU0NST0xMX0JBUiAod2luZG93LT52ZXJ0aWNhbF9z Y3JvbGxfYmFyKTsKICAgICAgIG9sZFJlY3QgPSBbYmFyIGZyYW1lXTsKICAgICAgIHIuc2l6ZS53 aWR0aCA9IG9sZFJlY3Quc2l6ZS53aWR0aDsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKwogICAgICAgaWYgKEZSQU1FX0xJVkVfUCAoZikgJiYg IU5TRXF1YWxSZWN0cyAob2xkUmVjdCwgcikpCiAgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUg bWFpbiB3aW5kb3cgaGFzIHByb2JhYmx5IGJlZW4gcmVzaXplZC4gIEdyYWNpb3VzbHkgZGVsZXRl IHRoZQorICAgICAgICAgIG9sZCBzY3JvbGwgYmFyIHdpdGhvdXQgcmVwYWludGluZyBpdHMgcmVj dGFuZ2xlOyBhbmQsIGNyZWF0ZSBhIG5ldworICAgICAgICAgIHNjcm9sbCBiYXIgZWxzZXdoZXJl LiovCiAgICAgICAgICAgaWYgKG9sZFJlY3Qub3JpZ2luLnggIT0gci5vcmlnaW4ueCkKKyAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgbnNfY2xlYXJfZnJhbWVfYXJlYSAoZiwgbGVmdCwgdG9w LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgW2JhciBtY19qdWRnZV07CisgICAgICAg ICAgICAgIGJhciA9IFtbRW1hY3NTY3JvbGxlciBhbGxvY10gaW5pdEZyYW1lOiByIHdpbmRvdzog d2luXTsKKyAgICAgICAgICAgICAgd3NldF92ZXJ0aWNhbF9zY3JvbGxfYmFyICh3aW5kb3csIG1h a2VfbWludF9wdHIgKGJhcikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQogICAg ICAgICAgIFtiYXIgc2V0RnJhbWU6IHJdOwogICAgICAgICB9CisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCisKICAgICB9CiAKICAgaWYgKHVwZGF0ZV9wKQpAQCAtNDk3NSw5ICs2MTA5LDU3 IEBAIGluIGNlcnRhaW4gc2l0dWF0aW9ucyAocmFwaWQgaW5jb21pbmcgZXZlbnRzKS4KICAgICB7 CiAgICAgICB2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6IGldOwogICAgICAgaWYgKCFb dmlldyBpc0tpbmRPZkNsYXNzOiBbRW1hY3NTY3JvbGxlciBjbGFzc11dKSBjb250aW51ZTsKLSAg ICAgIGlmIChbdmlldyBqdWRnZV0pCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBN VUxUSVBMRS1DVVJTT1JTICovCisKKyAgLyogYFhTRVRXSU5ET1cnIHdpbGwgc29tZXRpbWVzIGNh dXNlIEVtYWNzIHRvIGNyYXNoIHdoZW4gcnVubmluZyB1bmRlciBnZGIgZXZlbgorICB0aG91Z2gg KHcgIT0gTlVMTCkuICBUaGVyZWZvcmUsIHdlIGNhbm5vdCByZWxpYWJseSB1c2UgYFdJTkRPV19M SVZFX1AnLiAqLworICBzdHJ1Y3Qgd2luZG93ICp3ID0gW3ZpZXcgbWNfZ2V0X3dpbmRvd107Cisg IGlmICh3ICE9IE5VTEwKKyAgICAgICYmIE5JTFAgKHctPmNvbnRlbnRzKSkKKyAgICB7CisgICAg ICBCT09MIGRlYnVnX3AgPSBmYWxzZTsKKyAgICAgIGlmIChkZWJ1Z19wCisgICAgICAgICAgLyog YHdpbmRvd19ib3gnIGNhbGxzIGB3aW5kb3dfYm94X2hlaWdodCcsIHdoaWNoIHdpbGwgY2F1c2Ug RW1hY3MgdG8KKyAgICAgICAgICBjcmFzaCBpZiBGUkFNRVAgKHctPmZyYW1lKSBpcyBub3Qgc2F0 aXNmaWVkLiAqLworICAgICAgICAgICYmIEZSQU1FUCAody0+ZnJhbWUpKQorICAgICAgICB7Cisg ICAgICAgICAgTlNSZWN0IHIwID0gW3ZpZXcgbWNfZ2V0X3JlY3RhbmdsZV07CisgICAgICAgICAg aW50IHgwID0gTlNNaW5YIChyMCk7CisgICAgICAgICAgaW50IHkwID0gTlNNaW5ZIChyMCk7Cisg ICAgICAgICAgaW50IHdkMCA9IE5TV2lkdGggKHIwKTsKKyAgICAgICAgICBpbnQgaDAgPSBOU0hl aWdodCAocjApOworICAgICAgICAgIGludCB3aW5kb3dfeSwgd2luZG93X2hlaWdodDsKKyAgICAg ICAgICB3aW5kb3dfYm94ICh3LCBBTllfQVJFQSwgMCwgJndpbmRvd195LCAwLCAmd2luZG93X2hl aWdodCk7CisgICAgICAgICAgaW50IHRvcCA9IHdpbmRvd195OworICAgICAgICAgIGludCBoZWln aHQgPSB3aW5kb3dfaGVpZ2h0OworICAgICAgICAgIGludCB3aWR0aCA9IFdJTkRPV19DT05GSUdf U0NST0xMX0JBUl9DT0xTICh3KSAqIEZSQU1FX0NPTFVNTl9XSURUSCAoZik7CisgICAgICAgICAg aW50IGxlZnQgPSBXSU5ET1dfU0NST0xMX0JBUl9BUkVBX1ggKHcpOworICAgICAgICAgIE5TUmVj dCByMSA9IE5TTWFrZVJlY3QgKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAg LyogVGhlIHBhcmVudCB2aWV3IGlzIGZsaXBwZWQsIHNvIHdlIG5lZWQgdG8gZmxpcCB5IHZhbHVl LiAqLworICAgICAgICAgIEVtYWNzVmlldyAqZnJhbWVfdmlldyA9IEZSQU1FX05TX1ZJRVcgKGYp OworICAgICAgICAgIE5TUmVjdCB2ID0gW2ZyYW1lX3ZpZXcgZnJhbWVdOworICAgICAgICAgIHIx Lm9yaWdpbi55ID0gKHYuc2l6ZS5oZWlnaHQgLSByMS5zaXplLmhlaWdodCAtIHIxLm9yaWdpbi55 KTsKKyAgICAgICAgICBpbnQgeDEgPSBOU01pblggKHIxKTsKKyAgICAgICAgICBpbnQgeTEgPSBO U01pblkgKHIxKTsKKyAgICAgICAgICBpbnQgd2QxID0gTlNXaWR0aCAocjEpOworICAgICAgICAg IGludCBoMSA9IE5TSGVpZ2h0IChyMSk7CisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXMg LS0gREVBRDpcblwKKyAgICAgICAgICB4MC94MSAoJWQvJWQpIHwgeTAveTEgKCVkLyVkKSB8IHdk MC93ZDEgKCVkLyVkKSB8IGgwL2gxICglZC8lZClcbiIsCisgICAgICAgICAgbWNfd2luZG93ICh3 KSwgeDAsIHgxLCB5MCwgeTEsIHdkMCwgd2QxLCBoMCwgaDEpOworICAgICAgICB9CisgICAgICBp ZiAoW3ZpZXcgbWNfanVkZ2VdKQogICAgICAgICByZW1vdmVkID0gWUVTOwogICAgIH0KKyAgICBl bHNlIGlmIChbdmlldyBqdWRnZV0pCisgICAgICByZW1vdmVkID0gWUVTOworCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCisgICAgfQogCiAgIGlmIChyZW1vdmVkKQogICAgIFtldmlldyB1 cGRhdGVGcmFtZVNpemU6IE5PXTsKQEAgLTUxMDYsNiArNjI4OCwyMSBAQCBzdGF0aWMgTGlzcF9P YmplY3QgbnNfc3RyaW5nX3RvX2xpc3Btb2QgKGNvbnN0IGNoYXIgKnMpCiBleHRlcm4gZnJhbWVf cGFybV9oYW5kbGVyIG5zX2ZyYW1lX3Bhcm1faGFuZGxlcnNbXTsKIHN0YXRpYyBzdHJ1Y3QgcmVk aXNwbGF5X2ludGVyZmFjZSBuc19yZWRpc3BsYXlfaW50ZXJmYWNlID0KIHsKKworCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworLyogYHJlZGlzcGxh eV9pbnRlcmZhY2UnIGluIGBuc3Rlcm0ubWAgbXVzdCBiZSBpbiB0aGUgZXhhY3Qgc2FtZSBvcmRl ciBhcyB0aGUKK2ByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgZGlzcGV4dGVybi5oYCEgKi8KKwor ICBtY194X3dyaXRlX2dseXBocywKKyAgbWNfbnNfZHJhd193aW5kb3dfY3Vyc29yLAorICBtY19u c19kcmF3X2dseXBoX3N0cmluZywKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBu c19mcmFtZV9wYXJtX2hhbmRsZXJzLAogICB4X3Byb2R1Y2VfZ2x5cGhzLAogICB4X3dyaXRlX2ds eXBocywKQEAgLTg3MjEsNiArOTkxOCw0OSBAQCAtIChCT09MKWNhbkJlY29tZU1haW5XaW5kb3cK IAogQGltcGxlbWVudGF0aW9uIEVtYWNzU2Nyb2xsZXIKIAorCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworLSAodm9pZCltY19zZXRfcmVjdGFuZ2xl OiAoTlNSZWN0KXJlY3QKK3sKKyAgbWNfcmVjdGFuZ2xlID0gcmVjdDsKK30KKworLSAoTlNSZWN0 KW1jX2dldF9yZWN0YW5nbGUKK3sKKyAgcmV0dXJuIG1jX3JlY3RhbmdsZTsKK30KKworLSAoc3Ry dWN0IHdpbmRvdyAqKW1jX2dldF93aW5kb3cKK3sKKyAgcmV0dXJuIHdpbmRvdzsKK30KKworLSAo Ym9vbCltY19qdWRnZQoreworICBOU1RSQUNFICgiW0VtYWNzU2Nyb2xsZXIgbWNfanVkZ2VdIik7 CisgIGJvb2wgcmV0ID0gY29uZGVtbmVkOworICBibG9ja19pbnB1dCAoKTsKKyAgaWYgKGNvbmRl bW5lZCkKKyAgICB7CisgICAgICAvKiBlbnN1cmUgb3RoZXIgc2Nyb2xsYmFyIHVwZGF0ZXMgYWZ0 ZXIgZGVsZXRpb24gKi8KKyAgICAgIEVtYWNzVmlldyAqdmlldyA9IChFbWFjc1ZpZXcgKilGUkFN RV9OU19WSUVXIChmcmFtZSk7CisgICAgICBpZiAodmlldyAhPSBuaWwpCisgICAgICAgIHZpZXct PnNjcm9sbGJhcnNOZWVkaW5nVXBkYXRlKys7CisgICAgfQorICBpZiAod2luZG93KQorICAgIHdz ZXRfdmVydGljYWxfc2Nyb2xsX2JhciAod2luZG93LCBRbmlsKTsKKyAgd2luZG93ID0gMDsKKyAg W3NlbGYgcmVtb3ZlRnJvbVN1cGVydmlld1dpdGhvdXROZWVkaW5nRGlzcGxheV07CisgIFtzZWxm IHJlbGVhc2VdOworICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1cm4gcmV0OworfQorCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKworCiAvKiBmb3IgcmVwZWF0IGJ1dHRvbiBwdXNoICovCiAj ZGVmaW5lIFNDUk9MTF9CQVJfRklSU1RfREVMQVkgMC41CiAjZGVmaW5lIFNDUk9MTF9CQVJfQ09O VElOVU9VU19ERUxBWSAoMS4wIC8gMTUpCmRpZmYgLS1naXQgYS9zcmMvcGR1bXBlci5jIGIvc3Jj L3BkdW1wZXIuYwppbmRleCBjYjI5MTVjLi4zNmQ4YmZlIDEwMDY0NAotLS0gYS9zcmMvcGR1bXBl ci5jCisrKyBiL3NyYy9wZHVtcGVyLmMKQEAgLTI3NzAsNyArMjc3MCw3IEBAIGR1bXBfaGFzaF90 YWJsZSAoc3RydWN0IGR1bXBfY29udGV4dCAqY3R4LAogc3RhdGljIGR1bXBfb2ZmCiBkdW1wX2J1 ZmZlciAoc3RydWN0IGR1bXBfY29udGV4dCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnVmZmVyICppbl9i dWZmZXIpCiB7Ci0jaWYgQ0hFQ0tfU1RSVUNUUyAmJiAhZGVmaW5lZCBIQVNIX2J1ZmZlcl9FMzRB MTFDNkI5CisjaWYgQ0hFQ0tfU1RSVUNUUyAmJiAhZGVmaW5lZCBIQVNIX2J1ZmZlcl9BOUNGODFG RUQ0CiAjIGVycm9yICJidWZmZXIgY2hhbmdlZC4gU2VlIENIRUNLX1NUUlVDVFMgY29tbWVudC4i CiAjZW5kaWYKICAgc3RydWN0IGJ1ZmZlciBtdW5nZWRfYnVmZmVyID0gKmluX2J1ZmZlcjsKZGlm ZiAtLWdpdCBhL3NyYy93MzJ0ZXJtLmMgYi9zcmMvdzMydGVybS5jCmluZGV4IGJiMWYwYmEuLjZl OTk1YjcgMTAwNjQ0Ci0tLSBhL3NyYy93MzJ0ZXJtLmMKKysrIGIvc3JjL3czMnRlcm0uYwpAQCAt NjIsNiArNjIsODU5IEBAIGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBz Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAjaW5jbHVkZSAiYml0bWFwcy9ncmF5Lnhi bSIKICNlbmRpZgogDAorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVM VElQTEUtQ1VSU09SUyAqLworCisjaWZkZWYgR0xZUEhfREVCVUcKK3N0YXRpYyB2b2lkIHhfY2hl Y2tfZm9udCAoc3RydWN0IGZyYW1lICosIHN0cnVjdCBmb250ICopOworI2VuZGlmCisKK3N0YXRp Ywordm9pZCBYQ2hhbmdlR0MgKHZvaWQgKiwgWEdDVmFsdWVzICosIHVuc2lnbmVkIGxvbmcsIFhH Q1ZhbHVlcyAqKTsKKworc3RhdGljIHZvaWQgeF9zZXRfbW9kZV9saW5lX2ZhY2VfZ2MgKHN0cnVj dCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfc2V0X21vdXNlX2ZhY2VfZ2MgKHN0 cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHczMl9jbGlwX3RvX3JvdyAoc3Ry dWN0IHdpbmRvdyAqLCBzdHJ1Y3QgZ2x5cGhfcm93ICosIGVudW0gZ2x5cGhfcm93X2FyZWEsIEhE Qyk7CisKK3N0YXRpYyB2b2lkIHczMl9zZXRfY2xpcF9yZWN0YW5nbGUgKEhEQywgUkVDVCAqKTsK Kworc3RhdGljIHZvaWQgeF9zZXRfZ2x5cGhfc3RyaW5nX2djIChzdHJ1Y3QgZ2x5cGhfc3RyaW5n ICopOworCitzdGF0aWMgdm9pZCB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmcgKHN0cnVjdCBn bHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19nbHlwaF9zdHJpbmdfYmdfcmVj dCAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBpbnQsIGludCwgaW50LCBpbnQpOworCitzdGF0aWMg dm9pZCB4X2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmQgKHN0cnVjdCBnbHlwaF9zdHJpbmcg KiwgYm9vbCk7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19nbHlwaF9zdHJpbmdfYm94IChzdHJ1Y3Qg Z2x5cGhfc3RyaW5nICopOworCitzdGF0aWMgdm9pZCB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBp bmdfZXhhY3RseSAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICop OworCitzdGF0aWMgdm9pZCB4X2RyYXdfaW1hZ2VfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhf c3RyaW5nICopOworCitzdGF0aWMgdm9pZCB4X2RyYXdfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQg KHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19jb21wb3NpdGVf Z2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRp YyB2b2lkIHhfZHJhd19nbHlwaGxlc3NfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHN0cnVjdCBn bHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYwordm9pZCB3MzJfZHJhd191bmRlcndhdmUgKHN0cnVj dCBnbHlwaF9zdHJpbmcgKiwgQ09MT1JSRUYpOworCit2b2lkCittY194d19jb2xvcl92YWx1ZXMg KHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IGNvbG9yLCBzdHJ1Y3QgbWNfUkdCICpsc2wp Cit7CisgIENIRUNLX1NUUklORyAoY29sb3IpOworICBYQ29sb3IgdGVtcDsKKyAgc3RydWN0IGZy YW1lICpmID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKHctPmZyYW1lKTsKKyAgaWYgKHcz Ml9kZWZpbmVkX2NvbG9yIChmLCBTU0RBVEEgKGNvbG9yKSwgJnRlbXAsIGZhbHNlKSkKKyAgICB7 CisgICAgICBsc2wtPnJlZCA9ICgoR2V0UlZhbHVlICh0ZW1wLnBpeGVsKSA8PCA4KSB8IEdldFJW YWx1ZSAodGVtcC5waXhlbCkpIC8gNjU1MzUuMDsKKyAgICAgIGxzbC0+Z3JlZW4gPSAoKEdldEdW YWx1ZSAodGVtcC5waXhlbCkgPDwgOCkgfCBHZXRHVmFsdWUgKHRlbXAucGl4ZWwpKSAvIDY1NTM1 LjA7CisgICAgICBsc2wtPmJsdWUgPSAoKEdldEJWYWx1ZSAodGVtcC5waXhlbCkgPDwgOCkgfCBH ZXRCVmFsdWUgKHRlbXAucGl4ZWwpKSAvIDY1NTM1LjA7CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgbHNsLT5yZWQgPSAtMS4wOworICAgICAgbHNsLT5ncmVlbiA9IC0xLjA7CisgICAgICBs c2wtPmJsdWUgPSAtMS4wOworICAgIH0KK30KKworLyogRHJhdyBzdHJldGNoIGdseXBoIHN0cmlu ZyBTLiAgKi8KK3N0YXRpYyB2b2lkCittY193MzJfZHJhd19zdHJldGNoX2dseXBoX3N0cmluZyAo c3RydWN0IGdseXBoX3N0cmluZyAqcykKK3sKKyAgZWFzc2VydCAocy0+Zmlyc3RfZ2x5cGgtPnR5 cGUgPT0gU1RSRVRDSF9HTFlQSCk7CisgIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUgorICAgICAg JiYgIXhfc3RyZXRjaF9jdXJzb3JfcCkKKyAgICB7CisgICAgICAvKiBJZiBgeC1zdHJldGNoLWN1 cnNvcicgaXMgbmlsLCBkb24ndCBkcmF3IGEgYmxvY2sgY3Vyc29yIGFzCisgICB3aWRlIGFzIHRo ZSBzdHJldGNoIGdseXBoLiAgKi8KKyAgICAgIGludCB3aWR0aCwgYmFja2dyb3VuZF93aWR0aCA9 IHMtPmJhY2tncm91bmRfd2lkdGg7CisgICAgICBpbnQgeCA9IHMtPng7CisgICAgICBpZiAoIXMt PnJvdy0+cmV2ZXJzZWRfcCkKKyAgeworICAgIGludCBsZWZ0X3ggPSB3aW5kb3dfYm94X2xlZnRf b2Zmc2V0IChzLT53LCBURVhUX0FSRUEpOworICAgIGlmICh4IDwgbGVmdF94KQorICAgICAgewor ICAgICAgICBiYWNrZ3JvdW5kX3dpZHRoIC09IGxlZnRfeCAtIHg7CisgICAgICAgIHggPSBsZWZ0 X3g7CisgICAgICB9CisgIH0KKyAgICAgIGVsc2UKKyAgeworICAgIC8qIEluIFIyTCByb3dzLCBk cmF3IHRoZSBjdXJzb3Igb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlCisgICAgICAgc3RyZXRjaCBn bHlwaC4gICovCisgICAgaW50IHJpZ2h0X3ggPSB3aW5kb3dfYm94X3JpZ2h0IChzLT53LCBURVhU X0FSRUEpOworICAgIGlmICh4ICsgYmFja2dyb3VuZF93aWR0aCA+IHJpZ2h0X3gpCisgICAgICBi YWNrZ3JvdW5kX3dpZHRoIC09IHggLSByaWdodF94OworICAgIHggKz0gYmFja2dyb3VuZF93aWR0 aDsKKyAgfQorICAgICAgd2lkdGggPSBtaW4gKEZSQU1FX0NPTFVNTl9XSURUSCAocy0+ZiksIGJh Y2tncm91bmRfd2lkdGgpOworICAgICAgaWYgKHMtPnJvdy0+cmV2ZXJzZWRfcCkKKyAgeCAtPSB3 aWR0aDsKKyAgICAgIC8qIERyYXcgY3Vyc29yLiAgKi8KKyAgICAgIHhfZHJhd19nbHlwaF9zdHJp bmdfYmdfcmVjdCAocywgeCwgcy0+eSwgd2lkdGgsIHMtPmhlaWdodCk7CisgICAgICAvKiBDbGVh ciByZXN0IHVzaW5nIHRoZSBHQyBvZiB0aGUgb3JpZ2luYWwgbm9uLWN1cnNvciBmYWNlLiAgKi8K KyAgICAgIGlmICh3aWR0aCA8IGJhY2tncm91bmRfd2lkdGgpCisgIHsKKyAgICBYR0NWYWx1ZXMg KmdjID0gcy0+ZmFjZS0+Z2M7CisgICAgaW50IHkgPSBzLT55OworICAgIGludCB3ID0gYmFja2dy b3VuZF93aWR0aCAtIHdpZHRoLCBoID0gcy0+aGVpZ2h0OworICAgIFJFQ1QgcjsKKyAgICAgICAg ICBIREMgaGRjID0gcy0+aGRjOworICAgIGlmICghcy0+cm93LT5yZXZlcnNlZF9wKQorICAgICAg eCArPSB3aWR0aDsKKyAgICBlbHNlCisgICAgICB4ID0gcy0+eDsKKyAgICBpZiAocy0+cm93LT5t b3VzZV9mYWNlX3AKKyAgICAgICAgJiYgY3Vyc29yX2luX21vdXNlX2ZhY2VfcCAocy0+dykpCisg ICAgICB7CisgICAgICAgIHhfc2V0X21vdXNlX2ZhY2VfZ2MgKHMpOworICAgICAgICBnYyA9IHMt PmdjOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIGdjID0gcy0+ZmFjZS0+Z2M7CisgICAgZ2V0 X2dseXBoX3N0cmluZ19jbGlwX3JlY3QgKHMsICZyKTsKKyAgICB3MzJfc2V0X2NsaXBfcmVjdGFu Z2xlIChoZGMsICZyKTsKKyNpZiAwIC8qIFRPRE86IHN0aXBwbGUgKi8KKyAgICBpZiAocy0+ZmFj ZS0+c3RpcHBsZSkKKyAgICAgIHsKKyAgICAgICAgLyogRmlsbCBiYWNrZ3JvdW5kIHdpdGggYSBz dGlwcGxlIHBhdHRlcm4uICAqLworICAgICAgICBYU2V0RmlsbFN0eWxlIChzLT5kaXNwbGF5LCBn YywgRmlsbE9wYXF1ZVN0aXBwbGVkKTsKKyAgICAgICAgWEZpbGxSZWN0YW5nbGUgKHMtPmRpc3Bs YXksIHMtPndpbmRvdywgZ2MsIHgsIHksIHcsIGgpOworICAgICAgICBYU2V0RmlsbFN0eWxlIChz LT5kaXNwbGF5LCBnYywgRmlsbFNvbGlkKTsKKyAgICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdzMyX2ZpbGxfYXJlYSAocy0+Ziwgcy0+aGRjLCBn Yy0+YmFja2dyb3VuZCwgeCwgeSwgdywgaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisgIGVsc2UgaWYgKCFzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wKQorICAgIHsKKyAgICAgIGlu dCBiYWNrZ3JvdW5kX3dpZHRoID0gcy0+YmFja2dyb3VuZF93aWR0aDsKKyAgICAgIGludCB4ID0g cy0+eCwgbGVmdF94ID0gd2luZG93X2JveF9sZWZ0X29mZnNldCAocy0+dywgVEVYVF9BUkVBKTsK KyAgICAgIC8qIERvbid0IGRyYXcgaW50byBsZWZ0IG1hcmdpbiwgZnJpbmdlIG9yIHNjcm9sbGJh ciBhcmVhCisgICAgICAgICBleGNlcHQgZm9yIGhlYWRlciBsaW5lIGFuZCBtb2RlIGxpbmUuICAq LworICAgICAgaWYgKHggPCBsZWZ0X3ggJiYgIXMtPnJvdy0+bW9kZV9saW5lX3ApCisgIHsKKyAg ICBiYWNrZ3JvdW5kX3dpZHRoIC09IGxlZnRfeCAtIHg7CisgICAgeCA9IGxlZnRfeDsKKyAgfQor ICAgICAgaWYgKGJhY2tncm91bmRfd2lkdGggPiAwKQorICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2Jn X3JlY3QgKHMsIHgsIHMtPnksIGJhY2tncm91bmRfd2lkdGgsIHMtPmhlaWdodCk7CisgICAgfQor ICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKK30KKworLyogU2V0IFMtPmdjIHRvIGEg c3VpdGFibGUgR0MgZm9yIGRyYXdpbmcgZ2x5cGggc3RyaW5nIFMgaW4gY3Vyc29yCisgICBmYWNl LiAgKi8KK3N0YXRpYyB2b2lkCittY193MzJfc2V0X2N1cnNvcl9nYyAoc3RydWN0IGdseXBoX3N0 cmluZyAqcywgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgaWYgKGN1cnNvcl9nY19wKQorICAgIHsK KyAgICAgIHMtPmdjID0gcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2M7CisgICAgICBy ZXR1cm47CisgICAgfQorIGlmIChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYpCisgICAgICAm JiBzLT5mYWNlLT5iYWNrZ3JvdW5kID09IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKHMtPmYpCisg ICAgICAmJiBzLT5mYWNlLT5mb3JlZ3JvdW5kID09IEZSQU1FX0ZPUkVHUk9VTkRfUElYRUwgKHMt PmYpCisgICAgICAvKiBTb21ldGltZXMgd2UgYXJlIG5vdCBjYWxsZWQgZm9yIGVhY2ggY2hhbmdl IGluIHRoZSBkZWZhdWx0CisgICBmYWNlJ3MgYmFja2dyb3VuZCBjb2xvciAoZS5nLiwgYnVnIzI2 ODUxKSwgc28gdGhlIGFkZGl0aW9uYWwKKyAgIHRlc3QgaW4gdGhlIG5leHQgbGluZSBnaXZlcyB1 cyBhIGNoYW5jZSB0byByZXN5bmMuICAqLworICAgICAgJiYgcy0+Zi0+b3V0cHV0X2RhdGEudzMy LT5jdXJzb3JfZ2MtPmZvcmVncm91bmQgPT0gcy0+ZmFjZS0+YmFja2dyb3VuZAorICAgICAgJiYg IXMtPmNtcCkKKyAgICBzLT5nYyA9IHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djOwor ICBlbHNlCisgICAgeworICAgICAgLyogQ3Vyc29yIG9uIG5vbi1kZWZhdWx0IGZhY2U6IG11c3Qg bWVyZ2UuICAqLworICAgICAgWEdDVmFsdWVzIHhnY3Y7CisgICAgICB1bnNpZ25lZCBsb25nIG1h c2s7CisgICAgICB4Z2N2LmJhY2tncm91bmQgPSBzLT5mLT5vdXRwdXRfZGF0YS53MzItPmN1cnNv cl9waXhlbDsKKyAgICAgIHhnY3YuZm9yZWdyb3VuZCA9IHMtPmZhY2UtPmJhY2tncm91bmQ7Cisg ICAgICAvKiBJZiB0aGUgZ2x5cGggd291bGQgYmUgaW52aXNpYmxlLCB0cnkgYSBkaWZmZXJlbnQg Zm9yZWdyb3VuZC4gICovCisgICAgICBpZiAoeGdjdi5mb3JlZ3JvdW5kID09IHhnY3YuYmFja2dy b3VuZCkKKyAgeGdjdi5mb3JlZ3JvdW5kID0gcy0+ZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgIGlm ICh4Z2N2LmZvcmVncm91bmQgPT0geGdjdi5iYWNrZ3JvdW5kKQorICB4Z2N2LmZvcmVncm91bmQg PSBzLT5mLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9mb3JlZ3JvdW5kX3BpeGVsOworICAgICAg aWYgKHhnY3YuZm9yZWdyb3VuZCA9PSB4Z2N2LmJhY2tncm91bmQpCisgIHhnY3YuZm9yZWdyb3Vu ZCA9IHMtPmZhY2UtPmZvcmVncm91bmQ7CisgICAgICAvKiBNYWtlIHN1cmUgdGhlIGN1cnNvciBp cyBkaXN0aW5jdCBmcm9tIHRleHQgaW4gdGhpcyBmYWNlLiAgKi8KKyAgICAgIGlmICh4Z2N2LmJh Y2tncm91bmQgPT0gcy0+ZmFjZS0+YmFja2dyb3VuZAorICAgICYmIHhnY3YuZm9yZWdyb3VuZCA9 PSBzLT5mYWNlLT5mb3JlZ3JvdW5kKQorICB7CisgICAgeGdjdi5iYWNrZ3JvdW5kID0gcy0+ZmFj ZS0+Zm9yZWdyb3VuZDsKKyAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5mYWNlLT5iYWNrZ3JvdW5k OworICB9CisgICAgICBJRl9ERUJVRyAoeF9jaGVja19mb250IChzLT5mLCBzLT5mb250KSk7Cisg ICAgICB4Z2N2LmZvbnQgPSBzLT5mb250OworICAgICAgbWFzayA9IEdDRm9yZWdyb3VuZCB8IEdD QmFja2dyb3VuZCB8IEdDRm9udDsKKyAgICAgIGlmIChGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYp LT5zY3JhdGNoX2N1cnNvcl9nYykKKyAgWENoYW5nZUdDIChOVUxMLCBGUkFNRV9ESVNQTEFZX0lO Rk8gKHMtPmYpLT5zY3JhdGNoX2N1cnNvcl9nYywKKyAgICAgICBtYXNrLCAmeGdjdik7CisgICAg ICBlbHNlCisgIEZSQU1FX0RJU1BMQVlfSU5GTyAocy0+ZiktPnNjcmF0Y2hfY3Vyc29yX2djCisg ICAgPSBYQ3JlYXRlR0MgKE5VTEwsIEZSQU1FX1czMl9XSU5ET1cgKHMtPmYpLCBtYXNrLCAmeGdj dik7CisgICAgICBzLT5nYyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAocy0+ZiktPnNjcmF0Y2hfY3Vy c29yX2djOworICAgIH0KK30KKworLyogU2V0IFMtPmdjIG9mIGdseXBoIHN0cmluZyBTIGZvciBk cmF3aW5nIHRoYXQgZ2x5cGggc3RyaW5nLiAgU2V0CisgICBTLT5zdGlwcGxlZF9wIHRvIGEgbm9u LXplcm8gdmFsdWUgaWYgdGhlIGZhY2Ugb2YgUyBoYXMgYSBzdGlwcGxlIHBhdHRlcm4uICovCitz dGF0aWMgaW5saW5lIHZvaWQKK21jX3czMl9zZXRfZ2x5cGhfc3RyaW5nX2djIChzdHJ1Y3QgZ2x5 cGhfc3RyaW5nICpzLCBib29sIGN1cnNvcl9nY19wKQoreworICBwcmVwYXJlX2ZhY2VfZm9yX2Rp c3BsYXkgKHMtPmYsIHMtPmZhY2UpOworICBpZiAocy0+aGwgPT0gRFJBV19OT1JNQUxfVEVYVCkK KyAgICB7CisgICAgICBzLT5nYyA9IHMtPmZhY2UtPmdjOworICAgICAgcy0+c3RpcHBsZWRfcCA9 IHMtPmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAgICB9CisgIGVsc2UgaWYgKHMtPmhsID09IERSQVdf SU5WRVJTRV9WSURFTykKKyAgICB7CisgICAgICB4X3NldF9tb2RlX2xpbmVfZmFjZV9nYyAocyk7 CisgICAgICBzLT5zdGlwcGxlZF9wID0gcy0+ZmFjZS0+c3RpcHBsZSAhPSAwOworICAgIH0KKyAg ZWxzZSBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IpCisgICAgeworICAgICAgbWNfdzMyX3NldF9j dXJzb3JfZ2MgKHMsIGN1cnNvcl9nY19wKTsKKyAgICAgIHMtPnN0aXBwbGVkX3AgPSBmYWxzZTsK KyAgICB9CisgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfTU9VU0VfRkFDRSkKKyAgICB7CisgICAg ICB4X3NldF9tb3VzZV9mYWNlX2djIChzKTsKKyAgICAgIHMtPnN0aXBwbGVkX3AgPSBzLT5mYWNl LT5zdGlwcGxlICE9IDA7CisgICAgfQorICBlbHNlIGlmIChzLT5obCA9PSBEUkFXX0lNQUdFX1JB SVNFRAorICAgICB8fCBzLT5obCA9PSBEUkFXX0lNQUdFX1NVTktFTikKKyAgICB7CisgICAgICBz LT5nYyA9IHMtPmZhY2UtPmdjOworICAgICAgcy0+c3RpcHBsZWRfcCA9IHMtPmZhY2UtPnN0aXBw bGUgIT0gMDsKKyAgICB9CisgIGVsc2UKKyAgICBlbWFjc19hYm9ydCAoKTsKKyAgLyogR0MgbXVz dCBoYXZlIGJlZW4gc2V0LiAgKi8KKyAgZWFzc2VydCAocy0+Z2MgIT0gMCk7Cit9CisKKy8qIERy YXcgYSBob2xsb3cgYm94IGN1cnNvciBvbiB3aW5kb3cgVyBpbiBnbHlwaCByb3cgUk9XLiAgKi8K K3N0YXRpYyB2b2lkCittY193MzJfZHJhd19ob2xsb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3 LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50 IHgsIGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGlu dCBoKQoreworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOwor ICBIREMgaGRjOworICBSRUNUIHJlY3Q7CisgIEhCUlVTSCBoYiA9IENyZWF0ZVNvbGlkQnJ1c2gg KGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsKTsKKyAgLyogR2V0IHRoZSBnbHlwaCB0 aGUgY3Vyc29yIGlzIG9uLiAgSWYgd2UgY2FuJ3QgdGVsbCBiZWNhdXNlCisgICAgIHRoZSBjdXJy ZW50IG1hdHJpeCBpcyBpbnZhbGlkIG9yIHN1Y2gsIGdpdmUgdXAuICAqLworICBzdHJ1Y3QgZ2x5 cGggKmN1cnNvcl9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBo cG9zLCB2cG9zKTsKKyAgaWYgKGN1cnNvcl9nbHlwaCA9PSBOVUxMKQorICAgIHsKKyAgICAgIERl bGV0ZU9iamVjdCAoaGIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaW50IHJsID0gZng7Cisg IGludCBydCA9IGZ5OworICBpbnQgcnIgPSBybCArIHdkOworICBpbnQgcmIgPSBydCArIGg7Cisv KgorICBmcHJpbnRmIChzdGRlcnIsICJNQ19IT0xMT1dfQk9YOiAgcmwgKCVkKSB8IHJ0ICglZCkg fCByciAoJWQpIHwgcmIgKCVkKVxuIiwgcmwsIHJ0LCByciwgcmIpOworKi8KKyAgcmVjdC5sZWZ0 ID0gcmw7CisgIHJlY3QudG9wID0gcnQ7CisgIHJlY3QucmlnaHQgPSBycjsKKyAgcmVjdC5ib3R0 b20gPSByYjsKKyAgaGRjID0gZ2V0X2ZyYW1lX2RjIChmKTsKKyAgLyogU2V0IGNsaXBwaW5nLCBk cmF3IHRoZSByZWN0YW5nbGUsIGFuZCByZXNldCBjbGlwcGluZyBhZ2Fpbi4gICovCisgIHczMl9j bGlwX3RvX3JvdyAodywgcm93LCBURVhUX0FSRUEsIGhkYyk7CisgIEZyYW1lUmVjdCAoaGRjLCAm cmVjdCwgaGIpOworICBEZWxldGVPYmplY3QgKGhiKTsKKyAgdzMyX3NldF9jbGlwX3JlY3Rhbmds ZSAoaGRjLCBOVUxMKTsKKyAgcmVsZWFzZV9mcmFtZV9kYyAoZiwgaGRjKTsKK30KKworLyogRHJh dyBhIGJhciBjdXJzb3Igb24gd2luZG93IFcgaW4gZ2x5cGggcm93IFJPVy4gKi8KK3N0YXRpYyB2 b2lkCittY193MzJfZHJhd19iYXJfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5 cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKKyAgaW50IHgsIGludCBm eCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGludCBoLCBpbnQg d2lkdGgsCisgIGVudW0gdHlwZV9vZl9jdXJzb3Iga2luZCwgYm9vbCBjdXJzb3JfZ2NfaW52aXNp YmxlX29rYXlfcCkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7Cisg IC8qIElmIGN1cnNvciBpcyBvdXQgb2YgYm91bmRzLCBkb24ndCBkcmF3IGdhcmJhZ2UuICBUaGlz IGNhbiBoYXBwZW4KKyAgICAgaW4gbWluaS1idWZmZXIgd2luZG93cyB3aGVuIHN3aXRjaGluZyBi ZXR3ZWVuIGVjaG8gYXJlYSBnbHlwaHMKKyAgICAgYW5kIG1pbmktYnVmZmVyLiAgKi8KKyAgc3Ry dWN0IGdseXBoICpjdXJzb3JfZ2x5cGggPSBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgs IHJvdywgaHBvcywgdnBvcyk7CisgIGlmIChjdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICByZXR1 cm47CisgIC8qIElmIG9uIGFuIGltYWdlLCBkcmF3IGxpa2UgYSBub3JtYWwgY3Vyc29yLiAgVGhh dCdzIHVzdWFsbHkgYmV0dGVyCisgICAgIHZpc2libGUgdGhhbiBkcmF3aW5nIGEgYmFyLCBlc3Au IGlmIHRoZSBpbWFnZSBpcyBsYXJnZSBzbyB0aGF0CisgICAgIHRoZSBiYXIgbWlnaHQgbm90IGJl IGluIHRoZSB3aW5kb3cuICAqLworICBpZiAoY3Vyc29yX2dseXBoLT50eXBlID09IElNQUdFX0dM WVBIKQorICAgIHsKKyAgICAgIHN0cnVjdCBtY19SR0IgbHNsID0gey5yZWQgPSAtMS4wLCAuZ3Jl ZW4gPSAtMS4wLCAuYmx1ZSA9IC0xLjB9OworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxh dm9yID0gTk9fRkxBVk9SOworICAgICAgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSA9 IE1DX0hPTExPV19CT1g7CisgICAgICBib29sIGFjdGl2ZV9wID0gZmFsc2U7CisgICAgICBib29s IGN1cnNvcl9nY19wID0gZmFsc2U7CisgICAgICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0 cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLCBj dXJzb3JfZ2NfcCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgQ09MT1JSRUYgY3Vyc29y X2NvbG9yID0gZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWw7CisgICAgICBzdHJ1Y3Qg ZmFjZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgY3Vyc29yX2dseXBoLT5mYWNlX2lkKTsKKyAg ICAgIEhEQyBoZGM7CisgICAgICAvKiBJZiB0aGUgZ2x5cGgncyBiYWNrZ3JvdW5kIGVxdWFscyB0 aGUgY29sb3Igd2Ugbm9ybWFsbHkgZHJhdworICAgICAgdGhlIGJhciBjdXJzb3IgaW4sIHRoZSBi YXIgY3Vyc29yIGluIGl0cyBub3JtYWwgY29sb3IgaXMKKyAgICAgIGludmlzaWJsZS4gIFVzZSB0 aGUgZ2x5cGgncyBmb3JlZ3JvdW5kIGNvbG9yIGluc3RlYWQgaW4gdGhpcworICAgICAgY2FzZSwg b24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZ2x5cGgncyBjb2xvcnMgYXJlIGNob3NlbiBzbwor ICAgICAgdGhhdCB0aGUgZ2x5cGggaXMgbGVnaWJsZS4gICovCisgICAgICBpZiAoZmFjZS0+YmFj a2dyb3VuZCA9PSBjdXJzb3JfY29sb3IKKyAgICAgICAgICAmJiAhY3Vyc29yX2djX2ludmlzaWJs ZV9va2F5X3ApCisgICAgICAgIGN1cnNvcl9jb2xvciA9IGZhY2UtPmZvcmVncm91bmQ7CisgICAg ICBpbnQgZGVmYXVsdF9meCA9IFdJTkRPV19URVhUX1RPX0ZSQU1FX1BJWEVMX1ggKHcsIHgpOwor ICAgICAgaGRjID0gZ2V0X2ZyYW1lX2RjIChmKTsKKyAgICAgIHczMl9jbGlwX3RvX3JvdyAodywg cm93LCBURVhUX0FSRUEsIGhkYyk7CisgICAgICBpbnQgcnggPSBmeDsKKyAgICAgIGludCByeSA9 IGZ5OworICAgICAgaW50IHJ3ID0gd2Q7CisgICAgICBpbnQgcmggPSBoOworLyoKKyAgICBmcHJp bnRmIChzdGRlcnIsICJNQ19IQkFSOiAgZnggKCVkKSB8IGZ5ICglZCkgfCB3ZCAoJWQpIHwgaCAo JWQpXG4iLCByeCwgcnksIHJ3LCByaCk7CisqLworICAgICAgdzMyX2ZpbGxfYXJlYSAoZiwgaGRj LCBjdXJzb3JfY29sb3IsIHJ4LCByeSwgcncsIHJoKTsKKyAgICAgIHczMl9zZXRfY2xpcF9yZWN0 YW5nbGUgKGhkYywgTlVMTCk7CisgICAgICByZWxlYXNlX2ZyYW1lX2RjIChmLCBoZGMpOworICAg IH0KK30KKworLyogUklGOiBEcmF3IG9yIGNsZWFyIGN1cnNvciBvbiB3aW5kb3cgVy4gICovCitz dGF0aWMgdm9pZAorbWNfdzMyX2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywg c3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAg ICAgICAgICAgICAgICBpbnQgeCwgaW50IGZ4LCBpbnQgeSwgaW50IGZ5LCBpbnQgaHBvcywgaW50 IHZwb3MsIGludCB3ZCwgaW50IGgsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxz bCwgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgIGlu dCBjdXJzb3Jfd2lkdGgsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgYm9vbCBvbl9wLCBi b29sIGFjdGl2ZV9wKQoreworICBpZiAob25fcCkKKyAgICB7CisgICAgICAvKiBJZiB0aGlzIGlz IHRoZSBhY3RpdmUgY3Vyc29yLCB3ZSBuZWVkIHRvIHRyYWNrIGl0IHdpdGggdGhlCisgICAgICBz eXN0ZW0gY2FyZXQsIHNvIHRoaXJkIHBhcnR5IHNvZnR3YXJlIGxpa2Ugc2NyZWVuIG1hZ25pZmll cnMKKyAgICAgIGFuZCBzcGVlY2ggc3ludGhlc2l6ZXJzIGNhbiBmb2xsb3cgdGhlIGN1cnNvci4g ICovCisgICAgICBpZiAoYWN0aXZlX3ApCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZnJh bWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAgICAgICAgIEhXTkQgaHduZCA9 IEZSQU1FX1czMl9XSU5ET1cgKGYpOworICAgICAgICAgIHczMl9zeXN0ZW1fY2FyZXRfeAorICAg ICAgICAgICAgPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB4KTsKKyAgICAgICAg ICAvKiBGSVhNRTogIFdoYXQgc2hvdWxkIHdlIHVzZSBpbnN0ZWFkIG9mIGB3LT5waHlzX2N1cnNv cl9hc2NlbnQnPyAqLworICAgICAgICAgIHczMl9zeXN0ZW1fY2FyZXRfeQorICAgICAgICAgICAg PSAoV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcsIHkpCisgICAgICAgICAgICAgICArIHJvdy0+ YXNjZW50IC0gdy0+cGh5c19jdXJzb3JfYXNjZW50KTsKKyAgICAgICAgICB3MzJfc3lzdGVtX2Nh cmV0X3dpbmRvdyA9IHc7CisgICAgICAgICAgdzMyX3N5c3RlbV9jYXJldF9oZHJfaGVpZ2h0ID0g V0lORE9XX0hFQURFUl9MSU5FX0hFSUdIVCAodyk7CisgICAgICAgICAgdzMyX3N5c3RlbV9jYXJl dF9tb2RlX2hlaWdodCA9IFdJTkRPV19NT0RFX0xJTkVfSEVJR0hUICh3KTsKKyAgICAgICAgICBQ b3N0TWVzc2FnZSAoaHduZCwgV01fSU1FX1NUQVJUQ09NUE9TSVRJT04sIDAsIDApOworICAgICAg ICAgIC8qIElmIHRoZSBzaXplIG9mIHRoZSBhY3RpdmUgY3Vyc29yIGNoYW5nZWQsIGRlc3Ryb3kg dGhlIG9sZAorICAgICAgICAgICAgIHN5c3RlbSBjYXJldC4gICovCisgICAgICAgICAgaWYgKHcz Ml9zeXN0ZW1fY2FyZXRfaHduZAorICAgICAgICAgICAgICAmJiAodzMyX3N5c3RlbV9jYXJldF9o ZWlnaHQgIT0gaCkpCisgICAgICAgICAgICBQb3N0TWVzc2FnZSAoaHduZCwgV01fRU1BQ1NfREVT VFJPWV9DQVJFVCwgMCwgMCk7CisgICAgICAgICAgdzMyX3N5c3RlbV9jYXJldF9oZWlnaHQgPSBo OworICAgICAgICAgIC8qIE1vdmUgdGhlIHN5c3RlbSBjYXJldC4gICovCisgICAgICAgICAgUG9z dE1lc3NhZ2UgKGh3bmQsIFdNX0VNQUNTX1RSQUNLX0NBUkVULCAwLCAwKTsKKyAgICAgICAgfQor ICAgICAgLyogVGhlIGZyaW5nZSBiaXRtYXBzIGFyZSBwcmVzZW50bHkgaGFuZGxlZCBlbHNld2hl cmUsIGJ1dCBjb3VsZCBzb21lZGF5CisgICAgICBiZSBtYW5hZ2VkIChpbiBwYXJ0KSBhdCB0aGlz IHNlY3Rpb24gb2YgY29kZS4gKi8KKyAgICAgIGlmIChyb3ctPmV4YWN0X3dpbmRvd193aWR0aF9s aW5lX3AKKyAgICAgICAgICAmJiAocm93LT5yZXZlcnNlZF9wCisgICAgICAgICAgICAgPyAoaHBv cyA8IDApCisgICAgICAgICAgICAgOiAoaHBvcyA+PSByb3ctPnVzZWRbVEVYVF9BUkVBXSkpKQor ICAgICAgICB7CisgICAgICAgICAgcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSB0cnVlOworICAg ICAgICAgIG1jX2RyYXdfZnJpbmdlX2JpdG1hcCAodywgcm93LCByb3ctPnJldmVyc2VkX3AsIGN1 cnNvcl90eXBlKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgc3RydWN0IGZyYW1l ICpmID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsKKyAgQ09MT1JSRUYgb3JpZ2luYWxfY3Vy c29yX3BpeGVsID0gZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWw7CisgIC8qIHh0ZXJt LmMveHRlcm0uaCB1c2UgR0M7IHdoZXJlYXMsIHczMnRlcm0uYy93MzJ0ZXJtLmggdXNlIFhHQ1Zh bHVlcyAqICovCisgIFhHQ1ZhbHVlcyAqb3JpZ2luYWxfY3Vyc29yX2djID0gZi0+b3V0cHV0X2Rh dGEudzMyLT5jdXJzb3JfZ2M7CisgIC8qIE9uIFdpbmRvd3MsIFJHQiB2YWx1ZXMgYXJlIDAtMjU1 LCBub3QgMC02NTUzNS4gKi8KKyAgaW50IHJlZCA9IG1pbiAoMjU1LCAyNTUgKiBsc2wucmVkKTsK KyAgaW50IGdyZWVuID0gbWluICgyNTUsIDI1NSAqIGxzbC5ncmVlbik7CisgIGludCBibHVlID0g bWluICgyNTUsIDI1NSAqIGxzbC5ibHVlKTsKKyAgQ09MT1JSRUYgY29sb3JfcGl4ZWwgPSBQQUxF VFRFUkdCIChyZWQsIGdyZWVuLCBibHVlKTsKKyAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgewor ICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTUNf Tk9fQ1VSU09SOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNQ19SSUdIVF9GUklOR0VfQklUTUFQ OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVA6CisgICAgICBi cmVhazsKKyAgICBjYXNlIE1DX0ZSQU1FRF9CT1g6CisgICAgeworICAgICAgc3RydWN0IGdseXBo ICpjdXJzb3JfZ2x5cGggPSBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJvdywgaHBv cywgdnBvcyk7CisgICAgICBpZiAoY3Vyc29yX2dseXBoID09IE5VTEwpCisgICAgICAgIHJldHVy bjsKKyAgICAgIFhHQ1ZhbHVlcyBnY192YWx1ZXM7CisgICAgICB1bnNpZ25lZCBsb25nIG1hc2sg PSBHQ0ZvbnQgfCBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQ7CisgICAgICBnY192YWx1ZXMu Zm9udCA9IEZSQU1FX0ZPTlQgKGYpOworICAgICAgc3RydWN0IGZhY2UgKmRlZmF1bHRfZmFjZSA9 IEZBQ0VfRlJPTV9JRCAoZiwgREVGQVVMVF9GQUNFX0lEKTsKKyAgICAgIExpc3BfT2JqZWN0IGJ1 ZiA9IHctPmNvbnRlbnRzOworICAgICAgQ0hFQ0tfQlVGRkVSIChidWYpOworICAgICAgc3RydWN0 IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7CisgICAgICBib29sIHJlZ2lvbl9hY3RpdmVfcCA9 ICghTklMUCAoVnRyYW5zaWVudF9tYXJrX21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiAhTklMUCAoQlZBUiAoYiwgbWFya19hY3RpdmUpKSk7CisgICAgICBwdHJkaWZmX3Qg cmVnaW9uX2JlZ2lubmluZyA9IChyZWdpb25fYWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9i ZWdpbm5pbmcgKCkpIDogLTE7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2VuZCA9IChyZWdpb25f YWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9lbmQgKCkpIDogLTE7CisgICAgICBwdHJkaWZm X3Qgb3BvaW50X3B0ID0gKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICA/IFBUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBY RklYTlVNIChGbWFya2VyX3Bvc2l0aW9uICh3LT5wb2ludG0pKTsKKyAgICAgIGJvb2wgcmVnaW9u X2luX2JvdW5kc19wID0gKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgb3BvaW50X3B0ID49IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF9wdCA8IHJlZ2lvbl9lbmQpOworICAgICAgaWYg KGN1cnNvcl9nbHlwaC0+dHlwZSAhPSBJTUFHRV9HTFlQSCAmJiBsc2wucmVkID49IDAgJiYgbHNs LmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRl bXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MnIGJ5IGJvcnJv d2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGB4X21ha2VfZ2MnIGluIHczMmZu cy5jLiAgKi8KKyAgICAgICAgICBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICYm IHJlZ2lvbl9pbl9ib3VuZHNfcAorICAgICAgICAgICAgICAmJiBhY3RpdmVfcCkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2Zh Y2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vy c29yLXJlZ2lvbi1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9s bG93X2FjdGl2ZV9yZWdpb25fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9y ZWdpb25fZmFjZV9pZCk7CisgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZl X2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2Ut Y3Vyc29yLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3df YWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7Cisg ICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9mYWNlLT5m b3JlZ3JvdW5kOworICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3VuZCA9IGhvbGxvd19h Y3RpdmVfcmVnaW9uX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICYmICFyZWdp b25faW5fYm91bmRzX3AKKyAgICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVn aW9uX291dF9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVh bC1mYWtlLWN1cnNvci1yZWdpb24tZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1 Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYs IGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICBlbnVt IGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYs IGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAg ICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhv bGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91 bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgZ2Nf dmFsdWVzLmJhY2tncm91bmQgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZS0+Zm9yZWdy b3VuZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICghcmVnaW9uX2Fj dGl2ZV9wICYmIGFjdGl2ZV9wKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg IGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lE IChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVz LmZvcmVncm91bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAg ICAgICAgICBnY192YWx1ZXMuYmFja2dyb3VuZCA9IGhvbGxvd19hY3RpdmVfZmFjZS0+YmFja2dy b3VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogVGhlIHJlZ2lvbiBp cyBfbm90XyB2aXNpYmxlIGluIHRoZSBpbmFjdGl2ZSB3aW5kb3cgYmVjYXVzZSB0aGUgb3Zlcmxh eSB3aW5kb3cgcHJvcGVydHkgaXMgdXNlZC4gKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgh YWN0aXZlX3ApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVudW0g ZmFjZV9pZCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBm LCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtZmFjZSIpLCB0cnVlKTsKKyAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9mYWNlID0gRkFD RV9GUk9NX0lEIChmLCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAg ICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2luYWN0aXZlX2ZhY2UtPmZvcmVncm91 bmQ7CisgICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5kID0gaG9sbG93X2lu YWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MgPSBYQ3JlYXRlR0MgKE5VTEwsIEZSQU1FX1cz Ml9XSU5ET1cgKGYpLCBtYXNrLCAmZ2NfdmFsdWVzKTsKKyAgICAgICAgICBibG9ja19pbnB1dCAo KTsKKyAgICAgICAgICAvKiBGb3JjZSBgbWNfdzMyX3NldF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+ Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MnLiAgKi8KKyAgICAgICAgICBib29sIGN1cnNv cl9nY19wID0gdHJ1ZTsKKyAgICAgICAgICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0cml4 LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwg Y3Vyc29yX2djX3ApOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djID0g b3JpZ2luYWxfY3Vyc29yX2djOworICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAg ICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhl bCcuICAqLworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29s b3JfcGl4ZWw7CisgICAgICAgICAgbWNfdzMyX2RyYXdfaG9sbG93X2N1cnNvciAodywgbWF0cml4 LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgICAgIGYtPm91 dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAg ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGN1cnNvcl9nbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQ SCAmJiBsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAg ICAgICAgICB7CisgICAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9k YXRhLnczMi0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53 MzItPmN1cnNvcl9waXhlbCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgICAgbWNfdzMyX2RyYXdf aG9sbG93X2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywg d2QsIGgpOworICAgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBv cmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRf ZGF0YS53MzItPmN1cnNvcl9nYycgYnkgYm9ycm93aW5nIHRoZQorICAgICAgICAgICAgICBmdW5j dGlvbmFsaXR5IG9mIGB4X21ha2VfZ2MnIGluIHczMmZucy5jLiAgKi8KKyAgICAgICAgICAgICAg aWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgJiYgcmVnaW9uX2luX2JvdW5k c19wCisgICAgICAgICAgICAgICAgICAmJiBhY3RpdmVfcCkKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZV9p ZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3It cmVnaW9uLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9s bG93X2FjdGl2ZV9yZWdpb25fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9y ZWdpb25fZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2Fj dGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1m YWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2Ug KmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNl X2lkKTsKKyAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2Fj dGl2ZV9mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tn cm91bmQgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlLT5iYWNrZ3JvdW5kOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAg ICAgICAgICAgICAgICAgICAgICAmJiAhcmVnaW9uX2luX2JvdW5kc19wCisgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgYWN0aXZlX3ApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZV9pZCA9 IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcmVn aW9uLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xs b3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2 ZV9yZWdpb25fb3V0X2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQg aG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAo IistcmVhbC1mYWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3df YWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3Vu ZCA9IGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICAgICAg Z2NfdmFsdWVzLmJhY2tncm91bmQgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZS0+Zm9y ZWdyb3VuZDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KCFyZWdpb25fYWN0aXZlX3AgJiYgYWN0aXZlX3ApCisgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0g bG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1mYWNl IiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0 aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAg ICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xsb3dfYWN0aXZlX2Zh Y2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91 bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgLyogVGhlIHJlZ2lvbiBpcyBfbm90XyB2aXNpYmxlIGlu IHRoZSBpbmFjdGl2ZSB3aW5kb3cgYmVjYXVzZSB0aGUgb3ZlcmxheSB3aW5kb3cgcHJvcGVydHkg aXMgdXNlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9wKQorICAg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9p ZCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRl cm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfaW5hY3RpdmVfZmFjZSA9IEZBQ0Vf RlJPTV9JRCAoZiwgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAg ICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xsb3dfaW5hY3RpdmVfZmFjZS0+Zm9yZWdy b3VuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5kID0gaG9s bG93X2luYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYyA9IFhDcmVhdGVHQyAo TlVMTCwgRlJBTUVfVzMyX1dJTkRPVyAoZiksIG1hc2ssICZnY192YWx1ZXMpOworICAgICAgICAg ICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICAgICAgLyogRm9yY2UgYG1jX3czMl9zZXRf Y3Vyc29yX2djJyB0byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djJy4gICov CisgICAgICAgICAgICAgIGJvb2wgY3Vyc29yX2djX3AgPSB0cnVlOworICAgICAgICAgICAgICBt Y19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9z LCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNsLCBnbHlwaF9m bGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwgYWN0aXZlX3AsIGN1cnNvcl9nY19wKTsKKyAgICAgICAg ICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MgPSBvcmlnaW5hbF9jdXJzb3JfZ2M7 CisgICAgICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgICAgIG1jX3czMl9k cmF3X2hvbGxvd19jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZw b3MsIHdkLCBoKTsKKyAgICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl IE1DX0hPTExPV19CT1g6CisgICAgeworICAgICAgaWYgKGxzbC5yZWQgPj0gMCAmJiBsc2wuZ3Jl ZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogVGVtcG9y YXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCcuICAqLworICAg ICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29sb3JfcGl4ZWw7Cisg ICAgICAgICAgbWNfdzMyX2RyYXdfaG9sbG93X2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4 LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLncz Mi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAg ICAgIGVsc2UKKyAgICAgICAgICBtY193MzJfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRyaXgs IHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICBicmVhazsKKyAg ICB9CisgICAgY2FzZSBNQ19GSUxMRURfQk9YOgorICAgIHsKKyAgICAgIGlmIChsc2wucmVkID49 IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgeworICAgICAg ICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2Mn IGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGB4X21ha2VfZ2Mn IGluIHczMmZucy5jLiAgKi8KKyAgICAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICBY R0NWYWx1ZXMgZ2NfdmFsdWVzOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9IEdDRm9u dCB8IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZDsKKyAgICAgICAgICBnY192YWx1ZXMuZm9u dCA9IEZSQU1FX0ZPTlQgKGYpOworICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gRlJB TUVfQkFDS0dST1VORF9QSVhFTCAoZik7CisgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQg PSBjb2xvcl9waXhlbDsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYyA9 IFhDcmVhdGVHQyAoTlVMTCwgRlJBTUVfVzMyX1dJTkRPVyAoZiksIG1hc2ssICZnY192YWx1ZXMp OworICAgICAgICAgIC8qIEZvcmNlIGBtY193MzJfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5m LT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYycuICAqLworICAgICAgICAgIGJvb2wgY3Vyc29y X2djX3AgPSB0cnVlOworICAgICAgICAgIG1jX2RyYXdfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgs IHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsIGxzbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLCBj dXJzb3JfZ2NfcCk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MgPSBv cmlnaW5hbF9jdXJzb3JfZ2M7CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICAg fQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2Nf cCA9IGZhbHNlOworICAgICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwg cm93LCBEUkFXX0NVUlNPUiwgeCwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsc2wsIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfZ2NfcCk7CisgICAgICAg ICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTUNfQkFSOgorICAgIHsKKyAgICAg IGlmIChsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAg ICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEu dzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1 cnNvcl9waXhlbCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgIGJvb2wgY3Vyc29yX2djX2ludmlz aWJsZV9va2F5X3AgPSB0cnVlOworICAgICAgICAgIG1jX3czMl9kcmF3X2Jhcl9jdXJzb3IgKHcs IG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoLCBjdXJzb3Jfd2lk dGgsIE1DX0JBUiwgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5X3ApOworICAgICAgICAgIGYtPm91 dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAg ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBib29sIGN1cnNv cl9nY19pbnZpc2libGVfb2theV9wID0gZmFsc2U7CisgICAgICAgICAgICBtY193MzJfZHJhd19i YXJfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwg aCwgY3Vyc29yX3dpZHRoLCBNQ19CQVIsIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAg ICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNQ19IQkFSOgorICAgIHsK KyAgICAgIGlmIChsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0g MCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0 X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53 MzItPmN1cnNvcl9waXhlbCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgIGJvb2wgY3Vyc29yX2dj X2ludmlzaWJsZV9va2F5X3AgPSB0cnVlOworICAgICAgICAgIG1jX3czMl9kcmF3X2Jhcl9jdXJz b3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoLCBjdXJz b3Jfd2lkdGgsIE1DX0hCQVIsIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAgICAgICAg ICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhl bDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9v bCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCA9IGZhbHNlOworICAgICAgICAgICAgbWNfdzMy X2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBv cywgd2QsIGgsIGN1cnNvcl93aWR0aCwgTUNfSEJBUiwgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5 X3ApOworICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg ICAgZW1hY3NfYWJvcnQgKCk7CisgIH0KKyAgICB9Cit9CisKKy8qIERyYXcgZ2x5cGggc3RyaW5n IFMuICAqLworc3RhdGljIHZvaWQKK21jX3czMl9kcmF3X2dseXBoX3N0cmluZyAoc3RydWN0IGds eXBoX3N0cmluZyAqcywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhf cm93ICpyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsLCBl bnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gdHlwZV9vZl9jdXJzb3IgY3Vyc29yX3R5cGUsIGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2wgYWN0aXZlX3AsIGJvb2wgY3Vyc29yX2djX3ApCit7Cisg IGJvb2wgcmVsaWVmX2RyYXduX3AgPSAwOworICAvKiBJZiBTIGRyYXdzIGludG8gdGhlIGJhY2tn cm91bmQgb2YgaXRzIHN1Y2Nlc3NvciwgZHJhdyB0aGUKKyAgICAgYmFja2dyb3VuZCBvZiB0aGUg c3VjY2Vzc29yIGZpcnN0IHNvIHRoYXQgUyBjYW4gZHJhdyBpbnRvIGl0LgorICAgICBUaGlzIG1h a2VzIFMtPm5leHQgdXNlIFhEcmF3U3RyaW5nIGluc3RlYWQgb2YgWERyYXdJbWFnZVN0cmluZy4g ICovCisgIGlmIChzLT5uZXh0ICYmIHMtPnJpZ2h0X292ZXJoYW5nICYmICFzLT5mb3Jfb3Zlcmxh cHMpCisgICAgeworICAgICAgaW50IHdpZHRoOworICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAq bmV4dDsKKyAgICAgIGZvciAod2lkdGggPSAwLCBuZXh0ID0gcy0+bmV4dDsKKyAgICAgICAgICAg bmV4dCAmJiB3aWR0aCA8IHMtPnJpZ2h0X292ZXJoYW5nOworICAgICAgICAgICB3aWR0aCArPSBu ZXh0LT53aWR0aCwgbmV4dCA9IG5leHQtPm5leHQpCisgICAgICAgIGlmIChuZXh0LT5maXJzdF9n bHlwaC0+dHlwZSAhPSBJTUFHRV9HTFlQSCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBtY193 MzJfc2V0X2dseXBoX3N0cmluZ19nYyAobmV4dCwgY3Vyc29yX2djX3ApOworICAgICAgICAgICAg eF9zZXRfZ2x5cGhfc3RyaW5nX2NsaXBwaW5nIChuZXh0KTsKKyAgICAgICAgICAgIGlmIChuZXh0 LT5maXJzdF9nbHlwaC0+dHlwZSA9PSBTVFJFVENIX0dMWVBIKQorICAgICAgICAgICAgICBtY193 MzJfZHJhd19zdHJldGNoX2dseXBoX3N0cmluZyAobmV4dCk7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAobmV4dCwgdHJ1ZSk7 CisgICAgICAgICAgICBuZXh0LT5udW1fY2xpcHMgPSAwOworICAgICAgICAgIH0KKyAgICB9Cisg IC8qIFNldCB1cCBTLT5nYywgc2V0IGNsaXBwaW5nIGFuZCBkcmF3IFMuICAqLworICBtY193MzJf c2V0X2dseXBoX3N0cmluZ19nYyAocywgY3Vyc29yX2djX3ApOworICAvKiBEcmF3IHJlbGllZiAo aWYgYW55KSBpbiBhZHZhbmNlIGZvciBjaGFyL2NvbXBvc2l0aW9uIHNvIHRoYXQgdGhlCisgICAg IGdseXBoIHN0cmluZyBjYW4gYmUgZHJhd24gb3ZlciBpdC4gICovCisgIGlmICghcy0+Zm9yX292 ZXJsYXBzCisgICAgICAmJiBzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19CT1gKKyAgICAgICYmIChz LT5maXJzdF9nbHlwaC0+dHlwZSA9PSBDSEFSX0dMWVBICisgICAgICAgICAgfHwgcy0+Zmlyc3Rf Z2x5cGgtPnR5cGUgPT0gQ09NUE9TSVRFX0dMWVBIKSkKKyAgICB7CisgICAgICB4X3NldF9nbHlw aF9zdHJpbmdfY2xpcHBpbmcgKHMpOworICAgICAgeF9kcmF3X2dseXBoX3N0cmluZ19iYWNrZ3Jv dW5kIChzLCB0cnVlKTsKKyAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfYm94IChzKTsKKyAgICAg IHhfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZyAocyk7CisgICAgICByZWxpZWZfZHJhd25fcCA9 IDE7CisgICAgfQorICBlbHNlIGlmICghcy0+Y2xpcF9oZWFkIC8qIGRyYXdfZ2x5cGhzIGRpZG4n dCBzcGVjaWZ5IGEgY2xpcCBtYXNrLiAgKi8KKyAgICAgICAgICAgJiYgIXMtPmNsaXBfdGFpbAor ICAgICAgICAgICAmJiAoKHMtPnByZXYgJiYgcy0+cHJldi0+aGwgIT0gcy0+aGwgJiYgcy0+bGVm dF9vdmVyaGFuZykKKyAgICAgICAgICAgICAgIHx8IChzLT5uZXh0ICYmIHMtPm5leHQtPmhsICE9 IHMtPmhsICYmIHMtPnJpZ2h0X292ZXJoYW5nKSkpCisgICAgLyogV2UgbXVzdCBjbGlwIGp1c3Qg dGhpcyBnbHlwaC4gIGxlZnRfb3ZlcmhhbmcgcGFydCBoYXMgYWxyZWFkeQorICAgICAgIGRyYXdu IHdoZW4gcy0+cHJldiB3YXMgZHJhd24sIGFuZCByaWdodF9vdmVyaGFuZyBwYXJ0IHdpbGwgYmUK KyAgICAgICBkcmF3biBsYXRlciB3aGVuIHMtPm5leHQgaXMgZHJhd24uICovCisgICAgeF9zZXRf Z2x5cGhfc3RyaW5nX2NsaXBwaW5nX2V4YWN0bHkgKHMsIHMpOworICBlbHNlCisgICAgeF9zZXRf Z2x5cGhfc3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgc3dpdGNoIChzLT5maXJzdF9nbHlwaC0+dHlw ZSkKKyAgICB7CisgICAgY2FzZSBJTUFHRV9HTFlQSDoKKyAgICAgIHhfZHJhd19pbWFnZV9nbHlw aF9zdHJpbmcgKHMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTVFJFVENIX0dMWVBIOgorICAg ICAgbWNfdzMyX2RyYXdfc3RyZXRjaF9nbHlwaF9zdHJpbmcgKHMpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBDSEFSX0dMWVBIOgorICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcykKKyAgICAgICAg cy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7CisgICAgICBlbHNlCisgICAgICAgIHhfZHJh d19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgZmFsc2UpOworICAgICAgeF9kcmF3X2dseXBo X3N0cmluZ19mb3JlZ3JvdW5kIChzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ09NUE9TSVRF X0dMWVBIOgorICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcyB8fCAocy0+Y21wX2Zyb20gPiAwCisg ICAgICAgICAgJiYgISBzLT5maXJzdF9nbHlwaC0+dS5jbXAuYXV0b21hdGljKSkKKyAgICAgICAg cy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7CisgICAgICBlbHNlCisgICAgICAgIHhfZHJh d19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgdHJ1ZSk7CisgICAgICB4X2RyYXdfY29tcG9z aXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug R0xZUEhMRVNTX0dMWVBIOgorICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcykKKyAgICAgICAgcy0+ YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7CisgICAgICBlbHNlCisgICAgICAgIHhfZHJhd19n bHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgZmFsc2UpOworICAgICAgeF9kcmF3X2dseXBobGVz c19nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAocyk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0 OgorICAgICAgZW1hY3NfYWJvcnQgKCk7CisgICAgfQorICBpZiAoIXMtPmZvcl9vdmVybGFwcykK KyAgICB7CisgICAgICAvKiBEcmF3IHVuZGVybGluZS4gICovCisgICAgICBpZiAocy0+ZmFjZS0+ dW5kZXJsaW5lX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5l X3R5cGUgPT0gRkFDRV9VTkRFUl9XQVZFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBD T0xPUlJFRiBjb2xvcjsKKyAgICAgICAgICAgICAgaWYgKHMtPmZhY2UtPnVuZGVybGluZV9kZWZh dWx0ZWRfcCkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHMtPmdjLT5mb3JlZ3JvdW5kOworICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29sb3IgPSBzLT5mYWNlLT51bmRlcmxp bmVfY29sb3I7CisgICAgICAgICAgICAgIHczMl9kcmF3X3VuZGVyd2F2ZSAocywgY29sb3IpOwor ICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHMtPmZhY2UtPnVuZGVybGluZV90eXBl ID09IEZBQ0VfVU5ERVJfTElORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyB0aGlja25lc3MsIHBvc2l0aW9uOworICAgICAgICAgICAgICBpbnQgeTsKKyAgICAg ICAgICAgICAgaWYgKHMtPnByZXYgJiYgcy0+cHJldi0+ZmFjZS0+dW5kZXJsaW5lX3AKKyAgICAg ICAgICAgICAgICAgICYmIHMtPnByZXYtPmZhY2UtPnVuZGVybGluZV90eXBlID09IEZBQ0VfVU5E RVJfTElORSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBXZSB1c2Ug dGhlIHNhbWUgdW5kZXJsaW5lIHN0eWxlIGFzIHRoZSBwcmV2aW91cyBvbmUuICAqLworICAgICAg ICAgICAgICAgICAgdGhpY2tuZXNzID0gcy0+cHJldi0+dW5kZXJsaW5lX3RoaWNrbmVzczsKKyAg ICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcy0+cHJldi0+dW5kZXJsaW5lX3Bvc2l0aW9uOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHRoaWNrbmVzcy4gIERlZmF1 bHQgaXMgMSBwaXhlbC4gICovCisgICAgICAgICAgICAgICAgICBpZiAocy0+Zm9udCAmJiBzLT5m b250LT51bmRlcmxpbmVfdGhpY2tuZXNzID4gMCkKKyAgICAgICAgICAgICAgICAgICAgdGhpY2tu ZXNzID0gcy0+Zm9udC0+dW5kZXJsaW5lX3RoaWNrbmVzczsKKyAgICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gMTsKKyAgICAgICAgICAgICAgICAg IGlmICh4X3VuZGVybGluZV9hdF9kZXNjZW50X2xpbmUpCisgICAgICAgICAgICAgICAgICAgIHBv c2l0aW9uID0gKHMtPmhlaWdodCAtIHRoaWNrbmVzcykgLSAocy0+eWJhc2UgLSBzLT55KTsKKyAg ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCB0aGUgdW5kZXJsaW5lIHBvc2l0aW9uLiAgVGhpcyBpcyB0aGUgcmVj b21tZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBvZmZzZXQgaW4gcGl4 ZWxzIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0b3Agb2YKKyAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgdW5kZXJsaW5lLiAgVGhpcyBpcyBhIHNpZ25lZCB2YWx1ZSBhY2NvcmRpbmcgdG8g dGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3MsIGFuZCBpdHMgZGVmYXVsdCBpcwor ICAgICAgICAgICAgICAgICAgICAgICAgIFJPVU5EICgobWF4aW11bV9kZXNjZW50KSAvIDIpLCB3 aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgUk9VTkQgKHgpID0gZmxvb3IgKHggKyAwLjUp ICAqLworICAgICAgICAgICAgICAgICAgICAgIGlmICh4X3VzZV91bmRlcmxpbmVfcG9zaXRpb25f cHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzLT5mb250ICYmIHMtPmZv bnQtPnVuZGVybGluZV9wb3NpdGlvbiA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9z aXRpb24gPSBzLT5mb250LT51bmRlcmxpbmVfcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAocy0+Zm9udCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0g KHMtPmZvbnQtPmRlc2NlbnQgKyAxKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgIHBvc2l0aW9uID0gbWF4IChwb3NpdGlvbiwgdW5kZXJsaW5lX21pbmltdW1f b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8qIENoZWNrIHRoZSBz YW5pdHkgb2YgdGhpY2tuZXNzIGFuZCBwb3NpdGlvbi4gIFdlIHNob3VsZAorICAgICAgICAgICAg ICAgICBhdm9pZCBkcmF3aW5nIHVuZGVybGluZSBvdXQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmVh LiAgKi8KKyAgICAgICAgICAgICAgaWYgKHMtPnkgKyBzLT5oZWlnaHQgPD0gcy0+eWJhc2UgKyBw b3NpdGlvbikKKyAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IChzLT5oZWlnaHQgLSAxKSAtIChz LT55YmFzZSAtIHMtPnkpOworICAgICAgICAgICAgICBpZiAocy0+eSArIHMtPmhlaWdodCA8IHMt PnliYXNlICsgcG9zaXRpb24gKyB0aGlja25lc3MpCisgICAgICAgICAgICAgICAgdGhpY2tuZXNz ID0gKHMtPnkgKyBzLT5oZWlnaHQpIC0gKHMtPnliYXNlICsgcG9zaXRpb24pOworICAgICAgICAg ICAgICBzLT51bmRlcmxpbmVfdGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgICAgICBz LT51bmRlcmxpbmVfcG9zaXRpb24gPXBvc2l0aW9uOworICAgICAgICAgICAgICB5ID0gcy0+eWJh c2UgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgaWYgKHMtPmZhY2UtPnVuZGVybGluZV9kZWZh dWx0ZWRfcCkKKyAgICAgICAgICAgICAgICB3MzJfZmlsbF9hcmVhIChzLT5mLCBzLT5oZGMsIHMt PmdjLT5mb3JlZ3JvdW5kLCBzLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHks IHMtPndpZHRoLCAxKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHczMl9m aWxsX2FyZWEgKHMtPmYsIHMtPmhkYywgcy0+ZmFjZS0+dW5kZXJsaW5lX2NvbG9yLCBzLT54LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksIHMtPndpZHRoLCAxKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgLyogRHJhdyBvdmVybGluZS4gICovCisgICAgICBpZiAo cy0+ZmFjZS0+b3ZlcmxpbmVfcCkKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGxvbmcg ZHkgPSAwLCBoID0gMTsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+b3ZlcmxpbmVfY29sb3JfZGVm YXVsdGVkX3ApCisgICAgICAgICAgICB3MzJfZmlsbF9hcmVhIChzLT5mLCBzLT5oZGMsIHMtPmdj LT5mb3JlZ3JvdW5kLCBzLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+eSArIGR5 LCBzLT53aWR0aCwgaCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHczMl9maWxs X2FyZWEgKHMtPmYsIHMtPmhkYywgcy0+ZmFjZS0+b3ZlcmxpbmVfY29sb3IsIHMtPngsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnkgKyBkeSwgcy0+d2lkdGgsIGgpOworICAgICAg ICB9CisgICAgICAvKiBEcmF3IHN0cmlrZS10aHJvdWdoLiAgKi8KKyAgICAgIGlmIChzLT5mYWNl LT5zdHJpa2VfdGhyb3VnaF9wCisgICAgICAgICAgJiYgIUZPTlRfVEVYVE1FVFJJQyAocy0+Zm9u dCkudG1TdHJ1Y2tPdXQpCisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIGggPSAx OworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHkgPSAocy0+aGVpZ2h0IC0gaCkgLyAyOworICAg ICAgICAgIGlmIChzLT5mYWNlLT5zdHJpa2VfdGhyb3VnaF9jb2xvcl9kZWZhdWx0ZWRfcCkKKyAg ICAgICAgICAgIHczMl9maWxsX2FyZWEgKHMtPmYsIHMtPmhkYywgcy0+Z2MtPmZvcmVncm91bmQs IHMtPngsIHMtPnkgKyBkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPndpZHRoLCBo KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB3MzJfZmlsbF9hcmVhIChzLT5mLCBzLT5o ZGMsIHMtPmZhY2UtPnN0cmlrZV90aHJvdWdoX2NvbG9yLCBzLT54LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgcy0+eSArIGR5LCBzLT53aWR0aCwgaCk7CisgICAgICAgIH0KKyAgICAgIC8q IERyYXcgcmVsaWVmIGlmIG5vdCB5ZXQgZHJhd24uICAqLworICAgICAgaWYgKCFyZWxpZWZfZHJh d25fcCAmJiBzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19CT1gpCisgICAgICAgIHhfZHJhd19nbHlw aF9zdHJpbmdfYm94IChzKTsKKyAgICAgIGlmIChzLT5wcmV2KQorICAgICAgICB7CisgICAgICAg ICAgc3RydWN0IGdseXBoX3N0cmluZyAqcHJldjsKKyAgICAgICAgICBmb3IgKHByZXYgPSBzLT5w cmV2OyBwcmV2OyBwcmV2ID0gcHJldi0+cHJldikKKyAgICAgICAgICAgIGlmIChwcmV2LT5obCAh PSBzLT5obAorICAgICAgICAgICAgICAgICYmIHByZXYtPnggKyBwcmV2LT53aWR0aCArIHByZXYt PnJpZ2h0X292ZXJoYW5nID4gcy0+eCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IC8qIEFzIHByZXYgd2FzIGRyYXduIHdoaWxlIGNsaXBwZWQgdG8gaXRzIG93biBhcmVhLCB3ZQor ICAgICAgICAgICAgICAgICAgIG11c3QgZHJhdyB0aGUgcmlnaHRfb3ZlcmhhbmcgcGFydCB1c2lu ZyBzLT5obCBub3cuICAqLworICAgICAgICAgICAgICAgIGVudW0gZHJhd19nbHlwaHNfZmFjZSBz YXZlID0gcHJldi0+aGw7CisgICAgICAgICAgICAgICAgcHJldi0+aGwgPSBzLT5obDsKKyAgICAg ICAgICAgICAgICBtY193MzJfc2V0X2dseXBoX3N0cmluZ19nYyAocHJldiwgY3Vyc29yX2djX3Ap OworICAgICAgICAgICAgICAgIHhfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZ19leGFjdGx5IChz LCBwcmV2KTsKKyAgICAgICAgICAgICAgICBpZiAocHJldi0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0g Q0hBUl9HTFlQSCkKKyAgICAgICAgICAgICAgICAgIHhfZHJhd19nbHlwaF9zdHJpbmdfZm9yZWdy b3VuZCAocHJldik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeF9k cmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAocHJldik7CisgICAgICAgICAg ICAgICAgdzMyX3NldF9jbGlwX3JlY3RhbmdsZSAocHJldi0+aGRjLCBOVUxMKTsKKyAgICAgICAg ICAgICAgICBwcmV2LT5obCA9IHNhdmU7CisgICAgICAgICAgICAgICAgcHJldi0+bnVtX2NsaXBz ID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAocy0+bmV4dCkKKyAg ICAgICAgeworICAgICAgICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKm5leHQ7CisgICAgICAgICAg Zm9yIChuZXh0ID0gcy0+bmV4dDsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpCisgICAgICAgICAg ICBpZiAobmV4dC0+aGwgIT0gcy0+aGwKKyAgICAgICAgICAgICAgICAmJiBuZXh0LT54IC0gbmV4 dC0+bGVmdF9vdmVyaGFuZyA8IHMtPnggKyBzLT53aWR0aCkKKyAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIC8qIEFzIG5leHQgd2lsbCBiZSBkcmF3biB3aGlsZSBjbGlwcGVkIHRvIGl0 cyBvd24gYXJlYSwKKyAgICAgICAgICAgICAgICAgICB3ZSBtdXN0IGRyYXcgdGhlIGxlZnRfb3Zl cmhhbmcgcGFydCB1c2luZyBzLT5obCBub3cuICAqLworICAgICAgICAgICAgICAgIGVudW0gZHJh d19nbHlwaHNfZmFjZSBzYXZlID0gbmV4dC0+aGw7CisgICAgICAgICAgICAgICAgbmV4dC0+aGwg PSBzLT5obDsKKyAgICAgICAgICAgICAgICBtY193MzJfc2V0X2dseXBoX3N0cmluZ19nYyAobmV4 dCwgY3Vyc29yX2djX3ApOworICAgICAgICAgICAgICAgIHhfc2V0X2dseXBoX3N0cmluZ19jbGlw cGluZ19leGFjdGx5IChzLCBuZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dC0+Zmlyc3Rf Z2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSCkKKyAgICAgICAgICAgICAgICAgIHhfZHJhd19nbHlw aF9zdHJpbmdfZm9yZWdyb3VuZCAobmV4dCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgICAgeF9kcmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAobmV4 dCk7CisgICAgICAgICAgICAgICAgdzMyX3NldF9jbGlwX3JlY3RhbmdsZSAobmV4dC0+aGRjLCBO VUxMKTsKKyAgICAgICAgICAgICAgICBuZXh0LT5obCA9IHNhdmU7CisgICAgICAgICAgICAgICAg bmV4dC0+bnVtX2NsaXBzID0gMDsKKyAgICAgICAgICAgICAgICBuZXh0LT5jbGlwX2hlYWQgPSBz LT5uZXh0OworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIC8qIFJlc2V0IGNs aXBwaW5nLiAgKi8KKyAgdzMyX3NldF9jbGlwX3JlY3RhbmdsZSAocy0+aGRjLCBOVUxMKTsKKyAg cy0+bnVtX2NsaXBzID0gMDsKK30KKworLyogZW5kIE1VTFRJUExFLUNVUlNPUlMgKi8KKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCisKIC8qIEZyaW5nZSBiaXRtYXBzLiAgKi8KIAogc3RhdGlj IGludCBtYXhfZnJpbmdlX2JtcCA9IDA7CkBAIC01NDUsNiArMTM5OCwxNSBAQCB4X3VwZGF0ZV9i ZWdpbiAoc3RydWN0IGZyYW1lICpmKQogICBpZiAoISBGUkFNRV9XMzJfUCAoZikpCiAgICAgcmV0 dXJuOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAq LworCisgIGYtPm1jX3VwZGF0aW5nX2ZyYW1lID0gZjsKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisKKwogICAvKiBSZWdlbmVyYXRlIGRpc3BsYXkgcGFsZXR0ZSBiZWZvcmUgZHJhd2luZyBp ZiBsaXN0IG9mIHJlcXVlc3RlZAogICAgICBjb2xvcnMgaGFzIGNoYW5nZWQuICovCiAgIGlmIChk aXNwbGF5X2luZm8tPnJlZ2VuX3BhbGV0dGUpCkBAIC03NTQsNiArMTYxNiwxNiBAQCB4X3VwZGF0 ZV9lbmQgKHN0cnVjdCBmcmFtZSAqZikKIAogICAvKiBNb3VzZSBoaWdobGlnaHQgbWF5IGJlIGRp c3BsYXllZCBhZ2Fpbi4gICovCiAgIE1PVVNFX0hMX0lORk8gKGYpLT5tb3VzZV9mYWNlX2RlZmVy ID0gZmFsc2U7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJT T1JTICovCisKKyAgZi0+bWNfdXBkYXRpbmdfZnJhbWUgPSBOVUxMOworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiB9CiAKIApAQCAtNDA0MSwxMyArNDkxMyw3NCBAQCB3MzJfc2V0X3Zl cnRpY2FsX3Njcm9sbF9iYXIgKHN0cnVjdCB3aW5kb3cgKncsCiAJICAgICAgcmVsZWFzZV9mcmFt ZV9kYyAoZiwgaGRjKTsKIAkgICAgICB4X2NsZWFyX3VuZGVyX2ludGVybmFsX2JvcmRlciAoZik7 CiAJICAgIH0KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExF LUNVUlNPUlMgKi8KKworLyogUkVQQUlOVElORyBXSEVOIFJFTU9WSU5HIFNDUk9MTCBCQVI6CisK Ky0gU2VxdWVuY2Ugb2YgRXZlbnRzOgorCisgIC4gYHJlZGlzcGxheV9pbnRlcm5hbCcgY2FsbHMg dGhlIGBjb25kZW1uX3Njcm9sbF9iYXJzX2hvb2snLCB3aGljaCBtYXJrcyBhbGwKKyAgICBzY3Jv bGwgYmFycyBhcyBjYW5kaWRhdGVzIGZvciBkZWxldGlvbi4KKworICAuIFRoZW4gYHJlZGlzcGxh eV9pbnRlcm5hbCcgY2FsbHMgYHJlZGlzcGxheV93aW5kb3dzJywgd2hpY2ggd2Fsa3MgdGhlCisg ICAgd2luZG93LXRyZWUgYW5kIGV4YW1pbmVzIGVhY2ggd2luZG93LCB3aGVyZWJ5IGVhY2ggd2lu ZG93IHRoYXQgaXMgc3RpbGwgYWxpdmUKKyAgICBpbiB0aGUgd2luZG93LXRyZWUgInJlZGVlbXMi IGl0cyBzY3JvbGwgYmFycyBieSBtYXJraW5nIHRoZW0gbm90IHRvIGJlCisgICAgZGVsZXRlZC4K KworICAuIFRoZW4gYHJlZGlzcGxheV9pbnRlcm5hbCcgY2FsbHMgYGp1ZGdlX3Njcm9sbF9iYXJz X2hvb2snLCB3aGljaCByZW1vdmVzIGFsbAorICAgIHRoZSBzY3JvbGwgYmFycyB0aGF0IHdlcmUg bm90ICJyZWRlZW1lZCIuCisKKyAgLiBBbmQgb25seSBhZnRlciB0aGF0IGByZWRpc3BsYXlfaW50 ZXJuYWwnIGNhbGxzIGB1cGRhdGVfZnJhbWUnLCB3aGljaCBjYWxscworICAgIGB1cGRhdGVfd2lu ZG93JyBmb3IgZWFjaCBsaXZlIHdpbmRvdywgYW5kIHRoYXQgZW5kcyB1cCBjYWxsaW5nIGBkcmF3 X2dseXBocycKKyAgICB0byBkZWxpdmVyIHRoZSB1cGRhdGVkIGNvbnRlbnRzIHRvIHRoZSBnbGFz cy4KKworLSBPYnNlcnZhdGlvbnMgYnkgQGxhd2xpc3Q6CisKKyAgLiBBbHRob3VnaCB0aGUgY2Fs bCB0byByZW1vdmUvYWRkIHNjcm9sbCBiYXJzIGhhcHBlbnMgZWFybGllciBpbiB0aW1lLCBpdCBp cworICAgIG5vdCBhY3R1YWxseSBwcm9jZXNzZWQgYnkgRW1hY3MgdW50aWwgdGhlIHRhaWwgZW5k IG9mIGByZWFkX2NoYXInLCBhdAorICAgIGFwcHJveGltYXRlbHkgd2hlbiB0aGUgY2FsbCB0byBg cmVhZF9kZWNvZGVkX2V2ZW50X2Zyb21fbWFpbl9xdWV1ZScgb2NjdXJzLgorCisgIC4gQWx0aG91 Z2ggYSBzY3JvbGwgYmFyIG1heSBubyBsb25nZXIgYmUgdmlzaWJsZSBiZWNhdXNlIGl0IHdhcyBv dmVyd3JpdHRlbgorICAgIGR1cmluZyBgdXBkYXRlX3dpbmRvdycsIEVtYWNzIHRyaWVzIHRvIHJl bW92ZSB0aGUgb3V0ZGF0ZWQgc2Nyb2xsIGJhcgorICAgIGFueXdheSBhbmQgdGhhdCBpcyB3aGF0 IGVyYXNlcyB0aGUgZmFrZSBjdXJzb3JzIGFsb25nIHRoZSByZWN0YW5nbGUgb2YgdGhlCisgICAg dmVydGljYWwgc2Nyb2xsIGJhci4KKworICAuIEF0IGFib3V0IHRoZSBleGFjdCBzYW1lIHRpbWUg dGhhdCB0aGUgc2Nyb2xsIGJhciBpbiB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4KKyAgICBnZXRz IGVyYXNlZCwgdGhlIHJpZ2h0IHNjcm9sbCBiYXIgb24gdGhlIGZhciByaWdodCBvZiB0aGUgd2lu ZG93IGlzIGFkZGVkLgorCistIFRoZSBleHRlcm5hbCBmdW5jdGlvbiBgTW92ZVdpbmRvdycgKGJ5 IE1pY3Jvc29mdCkgdXBkYXRlcyBib3RoIHRoZSBvbGQgYW5kIG5ldworICByZWN0YW5nbGVzL3dp bmRvd3MgaWYgdGhlIGJvb2xlYW4gYXJndW1lbnQgZm9yIGBiUmVwYWludGAgaXMgVFJVRS4KKwor LSBUaGUgZXh0ZXJuYWwgZnVuY3Rpb24gYERlc3Ryb3lXaW5kb3cnIChieSBNaWNyb3NvZnQpIHVw ZGF0ZXMvcmVwYWludHMgdGhlCisgIHJlY3RhbmdsZS93aW5kb3cgdGhhdCBpcyByZW1vdmVkLiAg W0luIGV4cGVyaW1lbnRpbmcgd2l0aCBgTG9ja1dpbmRvd1VwZGF0ZScKKyAgKGJ5IE1pY3Jvc29m dCksIEBsYXdsaXN0IHdhcyB1bmFibGUgdG8gcHJldmVudCB0aGUgdXBkYXRlL3JlcGFpbnQuXQor CistIFRoZSBleHRlcm5hbCBmdW5jdGlvbiBgU2V0V2luZG93UG9zJyAoYnkgTWljcm9zb2Z0KSB1 cGRhdGVzL3JlcGFpbnRzIHRoZQorICByZWN0YW5nbGUvd2luZG93IHRoYXQgaXMgcmVtb3ZlZC4g IEBsYXdsaXN0IGhhcyBub3QgeWV0IGV4cGVyaW1lbnRlZCB3aXRoCisgIGFsdGVyaW5nIHRoZSBs YXN0IGFyZ3VtZW50IHVGbGFncyB0byBzZWUgaWYgaXQgaXMgcG9zc2libGUgdG8gcHJldmVudCB1 cGRhdGUgLworICByZXBhaW50LgorCitXaGVuIGEgdXNlciBlbmxhcmdlcyB0aGUgd2lkdGggb2Yg YSBtYWluIHdpbmRvdywgYHVwZGF0ZV93aW5kb3cnIHJlZHJhd3MgdGhlCitzY3JlZW4gbGluZXMg YW5kIHRoZSBvbGQgc2Nyb2xsIGJhciB3aW5kb3cgaXMgZXJhc2VkIGluIHRoZSBwcm9jZXNzIGJ5 IGEKK2NvbWJpbmF0aW9uIG9mIGBkcmF3X2dseXBocycgYW5kIGB4X2NsZWFyX2VuZF9vZl9saW5l Jy4gIEluIHRoYXQgc2l0dWF0aW9uLCB0aGUKK29sZCBgYmFyLT5sZWZ0YCB3aWxsIGJlIGxlc3Mt dGhhbiB0aGUgbmV3IGBsZWZ0YCBzY3JvbGwgYmFyIGNvb3JkaW5hdGUuICBJbiBvcmRlcgordG8g cHJlc2VydmUgdGhlIGZha2UgY3Vyc29ycyB0aGF0IHdlcmUgbGFpZCBkdXJpbmcgYHVwZGF0ZV93 aW5kb3cnIHdoZW4KKyhsZWZ0ID4gYmFyLT5sZWZ0KSwgd2Ugd2FudCB0byBzdXBwcmVzcyByZXBh aW50aW5nIHRoZSBvbGQgc2Nyb2xsLiAgV2hlbiBhIHVzZXIKK3Nocmlua3MgdGhlIHdpZHRoIG9m IGEgd2luZG93LCB3ZSB3YW50IHRvIHJlcGFpbnQgc28gdGhhdCB0aGUgbmV3IHNjcm9sbCBiYXIK K3dpbmRvdyBpcyB1cGRhdGVkLiAqLworCiAgICAgICAgICAgLyogTWFrZSBzdXJlIHNjcm9sbCBi YXIgaXMgInZpc2libGUiIGJlZm9yZSBtb3ZpbmcsIHRvIGVuc3VyZSB0aGUKICAgICAgICAgICAg ICBhcmVhIG9mIHRoZSBwYXJlbnQgd2luZG93IG5vdyBleHBvc2VkIHdpbGwgYmUgcmVmcmVzaGVk LiAgKi8KLSAgICAgICAgICBteV9zaG93X3dpbmRvdyAoZiwgaHduZCwgU1dfSElERSk7Ci0vKiog ICAgICAgICAgIE1vdmVXaW5kb3cgKGh3bmQsIGxlZnQsIHRvcCwgd2lkdGgsIG1heCAoaGVpZ2h0 LCAxKSwgVFJVRSk7ICoqLwotCSAgLyogVHJ5IHRvIG5vdCBkcmF3IG92ZXIgY2hpbGQgZnJhbWVz LiAgKi8KLQkgIFNldFdpbmRvd1BvcyAoaHduZCwgSFdORF9CT1RUT00sIGxlZnQsIHRvcCwgd2lk dGgsIG1heCAoaGVpZ2h0LCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNXUF9GUkFNRUNI QU5HRUQpOworICAgICAgICAgIGlmIChsZWZ0IDw9IGJhci0+bGVmdCkKKyAgICAgICAgICAgIG15 X3Nob3dfd2luZG93IChmLCBod25kLCBTV19ISURFKTsKKyAgICAgICAgICBNb3ZlV2luZG93ICho d25kLCBsZWZ0LCB0b3AsIHdpZHRoLCBtYXggKGhlaWdodCwgMSksIGxlZnQgPD0gYmFyLT5sZWZ0 KTsKKworLyogZW5kIE1VTFRJUExFLUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworCiAKIAkgIHNpLmNiU2l6ZSA9IHNpemVvZiAoc2kpOwogCSAgc2kuZk1hc2sgPSBTSUZfUkFO R0U7CkBAIC00MzE2LDYgKzUyNDksMjEgQEAgdzMyX2p1ZGdlX3Njcm9sbF9iYXJzIChzdHJ1Y3Qg ZnJhbWUgKmYpCiAgICAgewogICAgICAgc3RydWN0IHNjcm9sbF9iYXIgKmIgPSBYU0NST0xMX0JB UiAoYmFyKTsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNP UlMgKi8KKworICAgICAgLyogYERlc3Ryb3lXaW5kb3cnIHdpdGhpbiBgeF9zY3JvbGxfYmFyX3Jl bW92ZScgcmVwYWludHMgdGhlIHJlY3RhbmdsZS4KKyAgICAgIFRoZXJlZm9yZSwgd2UgZmlyc3Qg c2VuZCBhIG1lc3NhZ2UgdG8gaW5oaWJpdCByZXBhaW50aW5nLiAqLworICAgICAgaWYgKCFXSU5E T1dfTElWRV9QIChiLT53aW5kb3cpKQorICAgICAgICB7CisgICAgICAgICAgSFdORCBod25kID0g U0NST0xMX0JBUl9XMzJfV0lORE9XIChiKTsKKyAgICAgICAgICBTZW5kTWVzc2FnZSAoaHduZCwg V01fU0VUUkVEUkFXLCBmYWxzZSwgMCk7CisgICAgICAgIH0KKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisKKwogICAgICAgeF9zY3JvbGxfYmFyX3JlbW92ZSAoYik7CiAKICAgICAgIG5leHQg PSBiLT5uZXh0OwpAQCAtNzA5MSw2ICs4MDM5LDIxIEBAIGV4dGVybiBmcmFtZV9wYXJtX2hhbmRs ZXIgdzMyX2ZyYW1lX3Bhcm1faGFuZGxlcnNbXTsKIAogc3RhdGljIHN0cnVjdCByZWRpc3BsYXlf aW50ZXJmYWNlIHczMl9yZWRpc3BsYXlfaW50ZXJmYWNlID0KIHsKKworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworLyogYHJlZGlzcGxheV9pbnRl cmZhY2UnIGluIGB3MzJ0ZXJtLmNgIG11c3QgYmUgaW4gdGhlIGV4YWN0IHNhbWUgb3JkZXIgYXMg dGhlCitgcmVkaXNwbGF5X2ludGVyZmFjZScgaW4gYGRpc3BleHRlcm4uaGAhICovCisKKyAgbWNf eF93cml0ZV9nbHlwaHMsCisgIG1jX3czMl9kcmF3X3dpbmRvd19jdXJzb3IsCisgIG1jX3czMl9k cmF3X2dseXBoX3N0cmluZywKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICB3MzJf ZnJhbWVfcGFybV9oYW5kbGVycywKICAgeF9wcm9kdWNlX2dseXBocywKICAgeF93cml0ZV9nbHlw aHMsCmRpZmYgLS1naXQgYS9zcmMvd2luZG93LmggYi9zcmMvd2luZG93LmgKaW5kZXggZmRlZjQw Ny4uNzIyMDU4MiAxMDA2NDQKLS0tIGEvc3JjL3dpbmRvdy5oCisrKyBiL3NyYy93aW5kb3cuaApA QCAtODgsNiArODgsODQgQEAgZGlzcGxheSB0aGUgbWVudSBiYXIgb3IgdGhlIHRvb2wgYmFyICh3 aGVuIEVtYWNzIHVzZXMgdG9vbGtpdHMgdGhhdAogZG9uJ3QgZGlzcGxheSB0aGVpciBvd24gbWVu dSBiYXIgYW5kIHRvb2wgYmFyKSBvciBhIHRvb2x0aXAgaW4gYQogdG9vbHRpcCBmcmFtZSAod2hl biB0b29sdGlwcyBhcmUgbm90IGRpc3BsYXkgYnkgdGhlIHRvb2xraXQpLiAgKi8KIAorCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8KKworLyog U3VmZml4ZXMgZm9yIHRoZSBgbWNgIHdpbmRvdyBwb2ludGVyIHByZWZpeC4gKi8KK3N0cnVjdCBt dWx0aXBsZV9jdXJzb3JzCit7CisgIC8qIFRoZSByZWNvcmRlZCBwaXhlbCB3aWR0aCBvZiB0aGUg bGFzdCBsaW5lIG51bWJlciBkcmF3biBkdXJpbmcgcmVkaXNwbGF5ICovCisgIGludCBsbnVtX3Bp eGVsX3dpZHRoOworfTsKKworc3RydWN0IG11bHRpcGxlX2N1cnNvcnNfY2FjaGUKK3sKKyAgcHRy ZGlmZl90IGFsbG9jYXRlZDsKKyAgcHRyZGlmZl90IHVzZWQ7CisgIGVudW0gdHlwZV9vZl9jYWNo ZQorICAgIHsKKyAgICAgIE5PX0NBQ0hFLAorICAgICAgTUNfQ0FDSEUsCisgICAgICBDSF9DQUNI RSwKKyAgICAgIEZDX0NBQ0hFCisgICAgfSBjYWNoZV90eXBlOworICBzdHJ1Y3QgaXRlbXMKKyAg ICB7CisgICAgICBpbnQgeDsKKyAgICAgIGludCBmeDsKKyAgICAgIGludCB5OworICAgICAgaW50 IGZ5OworICAgICAgaW50IGhwb3M7CisgICAgICBpbnQgdnBvczsKKyAgICAgIGludCB3ZDsKKyAg ICAgIGludCBoOworICAgICAgZW51bSB0eXBlX29mX2N1cnNvcgorICAgICAgICB7CisgICAgICAg ICAgLyogTk9URTogIFRoZSBmcmluZ2UgYml0bWFwIGZyYW1ld29yayByZWxpZXMgdXBvbiBNQ19O T19GUklOR0VfQklUTUFQCisgICAgICAgICAgSEFWSU5HIEEgVkFMVUUgT0YgWkVSTyAoMCkuICov CisgICAgICAgICAgTUNfTk9fRlJJTkdFX0JJVE1BUCwKKyAgICAgICAgICBNQ19OT19DVVJTT1Is CisgICAgICAgICAgTUNfUklHSFRfRlJJTkdFX0JJVE1BUCwKKyAgICAgICAgICBNQ19MRUZUX0ZS SU5HRV9CSVRNQVAsCisgICAgICAgICAgTUNfRlJBTUVEX0JPWCwKKyAgICAgICAgICBNQ19GSUxM RURfQk9YLAorICAgICAgICAgIE1DX0hPTExPV19CT1gsCisgICAgICAgICAgTUNfQkFSLAorICAg ICAgICAgIE1DX0hCQVIKKyAgICAgICAgfSBjdXJzb3JfdHlwZTsKKyAgICAgIGludCBjdXJzb3Jf d2lkdGg7CisgICAgICBzdHJ1Y3QgUkdCCisgICAgICAgIHsKKyAgICAgICAgICBkb3VibGUgcmVk OworICAgICAgICAgIGRvdWJsZSBncmVlbjsKKyAgICAgICAgICBkb3VibGUgYmx1ZTsKKyAgICAg ICAgfSBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kOworICAgICAgYm9vbCBhY3RpdmVfcDsKKyAgICAg IGVudW0gbWNfZmxhdm9yCisgICAgICAgIHsKKyAgICAgICAgICBOT19GTEFWT1IsCisgICAgICAg ICAgTUNfR0xZUEgsCisgICAgICAgICAgTUNfR0xZUEhMRVNTLAorICAgICAgICAgIE1DX09WRVJM QVlfQVJST1dfQklUTUFQLAorICAgICAgICAgIE1DX1BJTENST1csCisgICAgICAgICAgTUNfSE9M TE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVywKKyAgICAgICAgICBNQ19SRVZFUlNFRF9IT0xMT1df UkVDVEFOR0xFX1JJR0hUX0FSUk9XLAorICAgICAgICAgIE1DX0hPTExPV19SRUNUQU5HTEUsCisg ICAgICAgICAgTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XLAorICAgICAgICAgIE1DX1JFVkVS U0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVywKKyAgICAgICAgICBNQ19WRVJUSUNBTF9CQVIs CisgICAgICAgICAgTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSLAorICAgICAgICAgIE1DX1ZFUlRJ Q0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgfSBnbHlwaF9mbGF2b3I7CisgICAgICBib29sIGVu YWJsZWRfcDsKKyAgICB9ICpjYWNoZXM7Cit9OworCisvKiBlbmQgTVVMVElQTEUtQ1VSU09SUyAq LworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogc3RydWN0IGN1cnNvcl9wb3MKIHsKICAg LyogUGl4ZWwgcG9zaXRpb24uICBUaGVzZSBhcmUgYWx3YXlzIHdpbmRvdyByZWxhdGl2ZS4gICov CkBAIC0zMjQsNiArNDAyLDIxIEBAIHN0cnVjdCB3aW5kb3cKIAogI2lmZGVmIEhBVkVfV0lORE9X X1NZU1RFTQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09S UyAqLworCisgICAgc3RydWN0IG11bHRpcGxlX2N1cnNvcnMgbWM7CisKKyAgICBzdHJ1Y3QgbXVs dGlwbGVfY3Vyc29yc19jYWNoZSBtY19lbHRzOworCisgICAgc3RydWN0IG11bHRpcGxlX2N1cnNv cnNfY2FjaGUgY2hfZWx0czsKKworICAgIHN0cnVjdCBtdWx0aXBsZV9jdXJzb3JzX2NhY2hlIGZj X2VsdHM7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAvKiBDdXJzb3IgdHlw ZSBvZiBsYXN0IGN1cnNvciBkcmF3biBvbiB0aGUgd2luZG93LiAgKi8KICAgICBlbnVtIHRleHRf Y3Vyc29yX2tpbmRzIHBoeXNfY3Vyc29yX3R5cGU7CiAKQEAgLTExMjAsNiArMTIxMywxNSBAQCBl eHRlcm4gdm9pZCByZWRpc3BsYXlfb3RoZXJfd2luZG93cyAodm9pZCk7CiAKIHN0cnVjdCBnbHlw aCAqZ2V0X3BoeXNfY3Vyc29yX2dseXBoIChzdHJ1Y3Qgd2luZG93ICp3KTsKIAorCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworc3RydWN0IGdseXBo ICptY19nZXRfY3Vyc29yX2dseXBoIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0 cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IGhwb3MsIGludCB2cG9zKTsK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogVHJ1ZSBpZiBXSU5ET1cgaXMgYSB2 YWxpZCB3aW5kb3cuICAqLwogI2RlZmluZSBXSU5ET1dfVkFMSURfUChXSU5ET1cpCQkJCQlcCiAg IChXSU5ET1dQIChXSU5ET1cpICYmICFOSUxQIChYV0lORE9XIChXSU5ET1cpLT5jb250ZW50cykp CVwKZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hkaXNwLmMKaW5kZXggYTg4ZmM2OS4u MDBiZDRjNiAxMDA2NDQKLS0tIGEvc3JjL3hkaXNwLmMKKysrIGIvc3JjL3hkaXNwLmMKQEAgLTky MSw2ICs5MjEsNDEyMiBAQCBzdGF0aWMgdm9pZCBzaG93X21vdXNlX2ZhY2UgKE1vdXNlX0hMSW5m byAqLCBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UpOwogc3RhdGljIGJvb2wgY29vcmRzX2luX21vdXNl X2ZhY2VfcCAoc3RydWN0IHdpbmRvdyAqLCBpbnQsIGludCk7CiAKIAorLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKKy8qIE1VTFRJUExFLUNV UlNPUlM6ICBFbWFjcyBCdWcgIzIyODczIChmZWF0dXJlIHJlcXVlc3QpCisKKyAgQ1JPU1NIQUlS UzogIEVtYWNzIEJ1ZyAjMTc2ODQgKGZlYXR1cmUgcmVxdWVzdCkKKworCitWRVJTSU9OOgorCist IDAxOS4wMDAgWzA0LzIwLzIwMTldCistIDAxOC4wMDAgWzA0LzA4LzIwMTldCistIDAxNy4wMDAg WzEyLzEzLzIwMThdCistIDAxNi4wMDAgWzExLzIwLzIwMThdCistIDAxNS4wMDAgWzExLzEwLzIw MThdCistIDAxNC4wMDAgWzA4LzI4LzIwMThdCisKKworQ0hBTkdFTE9HOgorCistIEJ1ZyBmaXgg cmVsYXRpbmcgdG8gZmxvYXRpbmcgZmFrZSBjdXJzb3JzIHRoYXQgd2VyZSBub3QgYmVpbmcgZXJh c2VkLiAgW1RoaXMKKyAgd2FzIGNhdXNlZCBiZWNhdXNlIHRoZSBnbHlwaF9mbGF2b3IgaGFkIGVy cm9uZW91c2x5IGJlZW4gc2V0IGJ5IGBtY19lbmdpbmUnIGFzCisgIE1DX0dMWVBIIGluc3RlYWQg b2YgTUNfR0xZUEhMRVNTLCBhbmQgYG1jX2VyYXNlX2N1cnNvcicgd2FzIGNhbGxlZCBpbnN0ZWFk IG9mCisgIGBtY19kcmF3X2VyYXNlX2h5YnJpZCcgKHdoaWNoIGhhbmRsZXMgTUNfR0xZUEhMRVNT LCBhbW9uZyBvdGhlciB0aGluZ3MpLgorCistIFJlc3RvcmVkIHRoZSB0cmlnZ2VyaW5nIG9mIHVw ZGF0ZV9iZWdpbi9lbmQgd2hlbiBmYWtlIGN1cnNvcnMgYXJlIGJlaW5nIGVyYXNlZC4KKyAgYG1j X2VyYXNlX3ByZV9zY3JvbGxfZGlzcGxheScgaGFuZGxlcyBlcmFzaW5nIGFuZCByZXNldHRpbmcg b2YgdGhlIGNhY2hlcy4KKworLSBBZGRlZCBhIG1lY2hhbmlzbSB0byB0cmFjayB0aGUgbWF0cml4 IGNvbnRhaW5pbmcgdGhlIHJvdyB3aXRoIHRoZSByZWFsIGN1cnNvci4KKyAgdXBkYXRlX3dpbmRv dyBub3cgdXBkYXRlcyB0aGF0IHJvdyBiZWZvcmUgb3RoZXIgcm93cyB3aXRoaW4gdGhlIGRlc2ly ZWRfbWF0cml4CisgIHNvIHRoYXQgZGF0YSByZWxhdGluZyB0byB0aGF0IHJvdyBpcyBhdmFpbGFi bGUgd2hlbiBwcm9jZXNzaW5nIGFsbCBvdGhlciByb3dzLgorICBUaGlzIGlzIHVzZWZ1bCB3aGVu IGRldGVybWluaW5nIHdoaWNoIHJpZ2h0IGZyaW5nZSBiaXRtYXBzIHRvIHVzZSB3aGVuIHRoZQor ICBjcm9zc2hhaXJzIGZlYXR1cmUgaXMgYWN0aXZlOyBlLmcuLCBjdXJzb3IgaXMgZWl0aGVyIGF0 IG9yIGJleW9uZCB0aGUgZnJpbmdlLgorCistIEFkZGVkIG5ldyBmcmluZ2UgYml0bWFwcyBhbmQg Y29ycmVzcG9uZGluZyBmYWNlIHRoYXQgYXJlIHVzZWQgd2hlbiBjdXJzb3IgaXMKKyAgYmV5b25k IHRoZSBmcmluZ2U7IGUuZy4sIHdoZW4gaG9yaXpvbnRhbCBzY3JvbGxpbmcgdG8gdGhlIHJpZ2h0 LiAgT25lIHNldCBvZgorICBiaXRtYXBzIGFyZSB1c2VkIHdoZW4gY3Vyc29yIGlzIGV4YWN0bHkg YXQgdGhlIGZyaW5nZSAoYSByYXJlLCBidXQgcmVwcm9kdWNpYmxlCisgIG9jY3VycmVuY2UpOyBh bmQsIGFub3RoZXIgc2V0IHdoZW4gY3Vyc29yIGlzIGJleW9uZCB0aGUgZnJpbmdlLiAgVGVzdHMg Zm9yCisgIGVhY2ggb2NjdXJyZW5jZSBoYXZlIGJlZW4gaW1wcm92ZWQuICBUaGUgbmV3IHRlc3Rz IHBlcm1pdCBFbWFjcyB0byBhbHNvIGhhbmRsZQorICBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZmFr ZSBjdXJzb3JzIGFyZSBwYXJ0aWFsbHkgdmlzaWJsZSB3aGVuIG5vdCBxdWl0ZSBhdCB0aGUKKyAg ZnJpbmdlLCB3aGljaCBpcyBub3RpY2VhYmxlIHdoZW4gdGhlIHJlYWwgZmFrZSBjdXJzb3IgaXMg Z3JlYXRlciB0aGFuIDEgcGl4ZWwKKyAgd2lkZTsgZS5nLiwgYSBob2xsb3cgYm94IGN1cnNvci4K KworLSBGaXhlZCBhIGNyYXNoIHdoZW4gZGVidWdnaW5nIG5zX2p1ZGdlc19zY3JvbGxfYmFycyBh bmQgd3JhcHBlZCB0aGUgZGVidWdnaW5nCisgIGNvZGUgaW4gYSBjb25kaXRpb24gdG8gbGltaXQg aXRzIHVzYWdlLgorCistIEFsbCByZW1haW5pbmcgZnVuY3Rpb24gcGFyYW1ldGVycyBkZWFsaW5n IHdpdGggUkdCIGhhdmUgYmVlbiBjb25zb2xpZGF0ZWQgaW50bworICBzdHJ1Y3QgbWNfUkdCIGlu c3RlYWQgb2YgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzIGZvciBlYWNoIGNvbG9yLgorCistIENvbG9y IGRldGVybWluYXRpb24gZm9yIGFsbCB0aHJlZSBwbGF0Zm9ybXMgaXMgbm93IHN0cmVhbWxpbmVk IGEgYml0IG1vcmUgd2l0aAorICBgbWNfeHdfY29sb3JfdmFsdWVzJy4KKworICAuIE5TIHBsYXRm b3JtIG5lZWRzIG5vIGNvbnZlcnNpb24gYWZ0ZXIgb2J0YWluaW5nIFJHQkEgdmFsdWVzIGZyb20K KyAgY29sb3JVc2luZ0RlZmF1bHRDb2xvclNwYWNlLCB3aGljaCBhcmUgc3RvcmVkIGluIGEgbWNf UkdCIHN0dHJ1Y3QgdW50aWwgbmVlZGVkLgorCisgIC4gVzMyIHBsYXRmb3JtOiAgUkdCIHZhbHVl cyBhcmUgb2J0YWluZWQgZnJvbSBgdzMyX2RlZmluZWRfY29sb3InIGFuZCBkaXZpZGVkCisgIGJ5 IDY1NTM1LCB3aGljaCBhcmUgdGhlbiBzdG9yZWQgaW4gYSBtY19SR0Igc3RydWN0IHVudGlsIG5l ZWRlZC4gIFdoZW4gbmVlZGVkLAorICB0aG9zZSB2YWx1ZXMgYXJlIG11bHRpcGxpZWQgYnkgMjU1 IChyZXN1bHQgbm90IHRvIGV4Y2VlZCAyNTUpLgorCisgIC4gWDExIHBsYXRmb3JtOiAgUkdCIHZh bHVlcyBhcmUgb2J0YWluZWQgZnJvbSBgeF9kZWZpbmVkX2NvbG9yJyBhbmQgZGl2aWRlZCBieQor ICA2NTUzNSwgd2hpY2ggYXJlIHRoZW4gc3RvcmVkIGluIGEgbWNfUkdCIHN0cnVjdCB1bnRpbCBu ZWVkZWQuICBXaGVuIG5lZWRlZCwKKyAgdGhvc2UgdmFsdWVzIGFyZSBtdWx0aXBsaWVkIGJ5IDY1 NTM1IChyZXN1bHQgbm90IHRvIGV4Y2VlZCA2NTUzNSkuCisKKy0gW1RoZSBuZXcgY2FjaGluZyBt ZWNoYW5pc20gaW50cm9kdWNlZCB3aXRoIHZlcnNpb24gMTkuMDAwIGlzIHdvcmtpbmcgd2VsbC4g OildCisKKy0gRml4ZWQgYSBidWcgdGhhdCBwcmV2ZW50ZWQgdGhlIHZlcnRpY2FsIHJ1bGVyIG9m IGNyb3NzaGFpcnMgZnJvbSBkcmF3aW5nIHdoZW4KKyAgdGhlIGZpbGwgY29sdW1uIHdhcyBhdCB0 aGUgZnJpbmdlIChleGFjdGx5KS4KKworLSBGaXhlZCBhIGJ1ZyBhZmZlY3RpbmcgdGhlIGRyYXdp bmcgb2YgYSBob2xsb3cgY3Vyc29yIGFyb3VuZCBpbWFnZXMsIHdoaWNoIHdhcworICBkdWUgdG8g dGhlIHdyb25nIGN1cnNvciB0eXBlIGJlaW5nIHNldCBiZWZvcmUgY2FsbGluZyBgbWNfZ2V0X2N1 cnNvcl9nZW9tZXRyeScuCisKKworU0VUVVA6CisKK1N0ZXAgMTogIGdpdCBjbG9uZSAtYiBtYXN0 ZXIgZ2l0Oi8vZ2l0LnN2LmdudS5vcmcvZW1hY3MuZ2l0CisKK1N0ZXAgMjogIEluIHRoZSBuZXcg ZW1hY3MgZm9sZGVyLCBnbyBiYWNrIHRvIGFuIEVtYWNzIHZlcnNpb24gZnJvbSAwNC8wOC8yMDE5 OgorCitnaXQgcmVzZXQgLS1oYXJkIGEwMzhkZjc3ZGU3YjFhYTJkNzNhNjQ3ODQ5M2I4ODM4YjU5 ZTQ5ODIKKworU3RlcCAzOiAgRnJvbSB3aXRoaW4gdGhlIG5ldyBlbWFjcyBmb2xkZXIgY3JlYXRl ZCBpbiBTdGVwIDEsIGFwcGx5IHRoZSBwYXRjaDoKKworZ2l0IGFwcGx5IC9wYXRoL3RvL3RoZS9w YXRjaC5kaWZmCisKK1N0ZXAgNDogIC4vYXV0b2dlbi5zaAorCitTdGVwIDU6ICAuL2NvbmZpZ3Vy ZSAuLi4gW3lvdXIgY3VzdG9tIG9wdGlvbnNdCisKK1N0ZXAgNjogIG1ha2UKKworU3RlcCA3OiAg bWFrZSBpbnN0YWxsCisKKworVVNBR0U6CisKKy0gRm9yIGEgbWluaW1hbCB3b3JraW5nIGV4YW1w bGUgb2YgYnVpbHQtaW4gZmFrZSBjdXJzb3JzLCB0eXBlOiAgTS14IG1jLXRlc3QKKworICA7Ozsg VFVSTiBPTiBGQUtFIENVUlNPUlMgKGJ1ZmZlciBwb3NpdGlvbiwgY3Vyc29yLXR5cGUsIGN1cnNv ciBjb2xvcik6CisKKyAgKHNldHEgbWMtY29uZiAnKCgxICJoYmFyIiAibWFnZW50YSIpCisgICAg ICAgICAgICAgICAgICAoMiAiYmFyIiAicHVycGxlIikKKyAgICAgICAgICAgICAgICAgICgzICJi b3giICIjMDBGRjAwIikKKyAgICAgICAgICAgICAgICAgICg0ICJob2xsb3ciICIjMDAwMEZGIikK KyAgICAgICAgICAgICAgICAgICg1ICgiaGJhciIgMykgWzEuMCAwLjAgMS4wXSkKKyAgICAgICAg ICAgICAgICAgICg2ICgiYmFyIiAzKSBbMC4wIDEuMCAxLjBdKQorICAgICAgICAgICAgICAgICAg KDcgImZyYW1lZCIgIk9yYW5nZVJlZCIpKSkpCisKKyAgOzs7IFRVUk4gT0ZGIEZBS0UgQ1VSU09S UzoKKworICAoc2V0cSBtYy1jb25mIG5pbCkKKworLSBUbyB0cnkgb3V0IHRoZSBjcm9zc2hhaXJz IGZlYXR1cmUsIHR5cGU6ICBNLXggKy1tb2RlCisKKy0gVG8gdHJ5IG91dCBidWlsdC1pbiBmYWtl IGN1cnNvcnMgd2l0aCBNYWduYXIgU3ZlZW4ncyBtdWx0aXBsZS1jdXJzb3JzIHBhY2thZ2UsCisg IGluc3RhbGwgdGhhdCBwYWNrYWdlIGZpcnN0LiAgW0lmIHRoZSBtdWx0aXBsZS1jdXJzb3JzIHBh Y2thZ2UgaXMgaW5zdGFsbGVkLCBhbgorICBldmFsLWFmdGVyLWxvYWQgIm11bHRpcGxlLWN1cnNv cnMtY29yZSIgc3RhdGVtZW50IHdpdGhpbiBgY3Jvc3NoYWlycy5lbGAgd2lsbAorICByZWRlZmlu ZSBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgYW5kIHNldCB1cCBhIGZldyBrZXlib2FyZCBzaG9ydGN1 dHMuXSAgSWYgdGhlCisgIG11bHRpcGxlLWN1cnNvcnMgcGFja2FnZSBieSBNYWduYXIgU3ZlZW4g aXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLCB0aGVuIGhlcmUKKyAgYXJlIHR3byBlYXN5IHdheXMg dG8gaW5zdGFsbCB0aGF0IHBhY2thZ2U6CisKKyAgVHlwZTogIE0teCBtYy1pbnN0YWxsCisKKyAg T1IsIGV2YWx1YXRlIHRoZSBmb2xsb3dpbmcgc25pcHBldDoKKworICAocHJvZ24KKyAgICAocmVx dWlyZSAncGFja2FnZSkKKyAgICAoYWRkLXRvLWxpc3QgJ3BhY2thZ2UtYXJjaGl2ZXMgJygibWVs cGEiIC4gImh0dHA6Ly9tZWxwYS5taWxrYm94Lm5ldC9wYWNrYWdlcy8iKSB0KQorICAgIChwYWNr YWdlLWluaXRpYWxpemUpCisgICAgKHBhY2thZ2UtcmVmcmVzaC1jb250ZW50cykKKyAgICAocGFj a2FnZS1pbnN0YWxsICdtdWx0aXBsZS1jdXJzb3JzKSkKKworCitUT0RPOgorCistIERlYnVnIGZh aXJseSByZWN1cnJlbnQgY3Jhc2hpbmcgb24gdGhlIFczMiBwbGF0Zm9ybS4KKworLSBEbyBmdXJ0 aGVyIHRlc3RpbmcgdG8gbWFrZSBzdXJlIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIG5vdyB1 bmRlciBjb250cm9sLgorICBTZWFyY2ggZm9yIGFueSByZW1haW5pbmcgTGlzcF9PYmplY3QgdGhh dCBjYW4gYmUgZWxpbWluYXRlZCBhbmQgaGFuZGxlZCBwdXJlbHkKKyAgaW4gQy4KKworLSBXaGVu IHVzaW5nIHRoZSBtdWx0aXBsZSBmYWtlIGN1cnNvcnMgZmVhdHVyZSwgYSBmYWtlIGN1cnNvciBk b2VzIG5vdCBzaG93IHVwIGF0CisgIHp2X3AuCisKKy0gRGVhbCB3aXRoIGxlZnQvcmlnaHQgb3Zl cndyaXR0ZW4gZ2x5cGhzIGluIHRoZSB3MzIgYW5kIFggcG9ydHMgb2YgRW1hY3MuCisKKy0gUmVk dWNlIHRoZSByZW1vdmFsIG9mIGZha2UgY3Vyc29ycyB0byB0aGUgYmFyZSBtaW5pbXVtIHdoZW4g c2Nyb2xsaW5nIHRoZSB0ZXh0CisgIG9uIHRoZSBnbGFzcyBkaXJlY3RseSwgYW5kIHdoZW5ldmVy IGB1cGRhdGVfd2luZG93JyBpcyBjYWxsZWQuCisKKy0gV2hlbiBhbiBpZGxlLXRpbWVyIGZpcmVz IGFuZCBwb2ludCBpcyBhdCB0aGUgZW5kIG9mIGEgaG9yaXpvbnRhbGx5IHNjcm9sbGVkCisgIGxp bmUgaW4gYSBuYXJyb3cgd2luZG93LCB0aGUgdGVtcG9yYXJ5IGhvcml6b250YWwgc2Nyb2xsIGlz IGNhbmNlbGVkLiAgQ3JlYXRlCisgIGFuIG1pbmltYWwgd29ya2luZyBleGFtcGxlIGFuZCBmaWxl IGEgYnVnIHJlcG9ydC4KKworLSBUaGVyZSBpcyBhIGJ1ZyBhZmZlY3RpbmcgdGhlIHJlY29yZGVk IGB3LT5tYy5sbnVtX3BpeGVsX3dpZHRoYCB0aGF0IGlzCisgIG9ic2VydmFibGUgd2hlbiBub3Qg cnVubmluZyB1bmRlciBnZGIsIGJ1dCBkaXNhcHBlYXJzIHdoZW4gcnVubmluZyB1bmRlciBnZGIu CisgIFdoaWxlIHZpZXdpbmcgYSBmb2xkZWQgb3JnLW1vZGUgYnVmZmVyLCB0aGUgbm9uLWdkYiBp bnN0YW5jZSBoYWQgYSB2aXNpYmxlCisgIGxpbmUgbnVtYmVyIHBpeGVsLXdpZHRoIG9mIDQ0LCBi dXQgRW1hY3MgdHJlYXRlZCBpdCBhcyBmbHVjdHVhdGluZyBiZXR3ZWVuCisgIDQ0IGFuZCA1NSBh cyB0aGUgY3Vyc29yIHdhcyBtb3ZlZCB0byB0aGUgZW5kIG9mIGxpbmUuICBJbiB0aGUgZ2RiIGlu c3RhbmNlLAorICB0aGUgdmlzaWJsZSBsaW5lIG51bWJlciBwaXhlbCB3aWR0aCB3YXMgNTUgd2l0 aCBubyBmbHVjdHVhdGlvbiB1bmRlciB0aGUgc2FtZQorICBjb25kaXRpb25zIGFzIHRoZSBub24t Z2RiIGluc3RhbmNlLiAgVGhpcyBhcHBlYXJzIHRvIGJlIGEgZGlmZmVyZW50IGJ1ZyB0aGFuCisg IGJ1ZyMzMjE3NyAoY3VycmVudCBsaW5lIG51bWJlciBzaGlmdHMgb25lIGNvbHVtbiB0byB0aGUg bGVmdCkgYmVjYXVzZSB0aGUgbGluZQorICBudW1iZXIgb2YgdGhlIGN1cnJlbnQgbGluZSBkb2Vz IG5vdCBzaGlmdCBsZWZ0LCBhbmQgY2hhbmdpbmcgdGhlIGJpZGkgc2V0dGluZ3MKKyAgZGlkIG5v dCBjb3JyZWN0IHRoZSBpc3N1ZS4KKworLSBUaGUgY3VycmVudCB0ZXN0IGZvciBgYXV0b19oc2Ny b2xsX21vZGVfcCcgb25seSBsb29rcyBmb3IgYGN1cnJlbnRfbGluZWAgYW5kCisgIGFsbCBmaXZl IHJlbGF0ZWQgdGVzdHMgYXJlIGJhc2VkIHVwb24gdGhhdCBhc3N1bXB0aW9uLCB3aGljaCBtYXkg bm90IGJlIHRydWUuCisKKy0gTXVsdGlwbGUgQ3Vyc29yczogIElmIHBvaW50IGlzIGluIHRoZSBt aWRkbGUgb2YgYSBjb21wb3NpdGUgY2hhcmFjdGVyLCB0aGVuCisgIHNlbGVjdCBhIGZ1bGx5IGNv bXBvc2VkIGNoYXJhY3RlciBzbyB0aGF0IHRoZSBmYWtlIGN1cnNvciBpcyB2aXNpYmxlLgorCist IEltcGxlbWVudCBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gdGhlIExpc3AgbXVsdGlwbGUtY3Vy c29ycyBieSBNYWduYXIgU3ZlZW4uCisKKy0gRm9sbG93IHVwIHdpdGggdGhlIEVtYWNzIHRlYW0g cmUgYnVnIzMyMTc3OyBpLmUuLCAoQ3VycmVudCBsaW5lIG51bWJlciBzaGlmdHMKKyAgb25lIGNv bHVtbiB0byB0aGUgbGVmdC4pCisKKy0gRm9sbG93IHVwIHdpdGggdGhlIEVtYWNzIHRlYW0gcmUg YnVnIzMyMDYwOyBpLmUuLCBIb3Jpem9udGFsIFNjcm9sbGluZworICAoQ3VycmVudCBMaW5lKTog IFdyb25nIGxpbmUgZ2V0cyBoLXNjcm9sbGVkLgorCistIERldGVybWluZSBpZiBidWcgIzI4OTM2 IG5lZWRzIHRvIGJlIGZpeGVkIGFuZCBoZWxwIHRoZSBFbWFjcyB0ZWFtIHJlIHNhbWUuCisKKwor REVCVUdHSU5HOgorCituc19mb2N1cyArIG5zX2NsaXBfdG9fcm93ID0+IG5zX2NsaXBfdG9fcmVj dCBbQk9PTCAuLi4gc3RydWN0IGZyYW1lICosIE5TUmVjdCAqLCBpbnQpCisKK25zX3VuZm9jdXMg PT4gbnNfcmVzZXRfY2xpcHBpbmcKKworbWFrZV9zYXZlX3B0ciA9PiBtYWtlX21pbnRfcHRyCisK K3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV1baHBvc10ucGl4ZWxfd2lkdGgKKworUkFOR0VEX0lOVEVH RVJQID0+IFJBTkdFRF9GSVhOVU1QCisKK1RZUEVfUkFOR0VEX0lOVEVHRVJQID0+IFRZUEVfUkFO R0VEX0ZJWE5VTVAKKworbWFrZV9udW1iZXIgPT4gbWFrZV9maXhudW0KKworWElOVCA9PiBYRklY TlVNCisKK1hGQVNUSU5UID0+IFhGSVhOQVQKKworTGlzcF9PYmplY3Qgc3RyaW5nID0gRnByaW4x X3RvX3N0cmluZyAoaV9zdG9yZSwgUW5pbCk7CitjaGFyICpjaGFyX3N0cmluZyA9IFNTREFUQSAo c3RyaW5nKTsKK2ZwcmludGYgKHN0ZGVyciwgImlfc3RvcmU6ICAlc1xuIiwgY2hhcl9zdHJpbmcp OworCitjaGFyICp3X2NvbnRlbnRzID0gKEJVRkZFUlAgKHctPmNvbnRlbnRzKSAmJiBTVFJJTkdQ IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG5hbWUpKSkKKyAgICAgICAgICAgICAgICAg ICA/IFNTREFUQSAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBuYW1lKSkKKyAgICAgICAg ICAgICAgICAgICA6ICJuaWwiOworZnByaW50ZiAoc3RkZXJyLCAiXG5CdWZmZXIgKCVzKVxuIiwg d19jb250ZW50cyk7CisKK3N0cnVjdCBmYWNlICpmYWNlID0gLi4uCitMaXNwX09iamVjdCBmb3Jl Z3JvdW5kID0gZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CitMaXNwX09iamVj dCBiYWNrZ3JvdW5kID0gZmFjZS0+bGZhY2VbTEZBQ0VfQkFDS0dST1VORF9JTkRFWF07CitmcHJp bnRmIChzdGRlcnIsICJcbmZvcmVncm91bmQgKCVzKSB8IGJhY2tncm91bmQgKCVzKVxuIiwKKyAg ICAgICAgICAgICAgICAgKCFOSUxQIChmb3JlZ3JvdW5kKSA/IFNTREFUQSAoZm9yZWdyb3VuZCkg OiAiTklMUCIpLAorICAgICAgICAgICAgICAgICAoIU5JTFAgKGJhY2tncm91bmQpID8gU1NEQVRB IChiYWNrZ3JvdW5kKSA6ICJOSUxQIikpOworCitmcHJpbnRmIChzdGRlcnIsICJNeSBsaXNwIG9i amVjdDogICVzXG4iLCBTU0RBVEEgKEZjaGFyX3RvX3N0cmluZyAobWFrZV9maXhudW0gKDEwMSkp KSk7CisKK2ZwcmludGYgKHN0ZGVyciwgInN0cmluZzogJXMgfCBpbnQ6ICVkXG4iLCAiZm9vIiwg NjkpOworCitpZiAoQlVGRkVSUCAody0+Y29udGVudHMpICYmIFNUUklOR1AgKEJWQVIgKFhCVUZG RVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKQorICBmcHJpbnRmIChzdGRlcnIsICJuc191cGRhdGVf d2luZG93X2VuZDogICVzXG4iLCBTU0RBVEEgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg bmFtZSkpKTsKKworZWFzc2VydCAoQlVGX0JFRyAoYikgPD0gY2hhcnBvcyAmJiBjaGFycG9zIDw9 IEJVRl9aIChiKSk7Citib29sIGJhcmZfY3Jhc2ggPSAoQlVGX0JFRyAoYikgPD0gY2hhcnBvcyAm JiBjaGFycG9zIDw9IEJVRl9aIChiKSkgPyBmYWxzZSA6IHRydWU7ICovCisKKyNpbmNsdWRlIDx0 aW1lLmg+CisjaW5jbHVkZSA8ZnRvYXN0ci5oPgorCitib29sIG1jX3N0ZGVycl9wID0gZmFsc2U7 CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICovCisKKyNpZmRlZiBIQVZFX05UR1VJCisjZGVm aW5lIE1DX09QVElPTkFMX0hEQyhoZGMpICBIREMgaGRjLAorI2RlZmluZSBNQ19ERUNMQVJFX0hE QyhoZGMpICAgSERDIGhkYzsKKyNkZWZpbmUgTUNfQUxMT0NBVEVfSERDKGhkYywgZikgaGRjID0g Z2V0X2ZyYW1lX2RjICgoZikpCisjZGVmaW5lIE1DX1JFTEVBU0VfSERDKGhkYywgZikgIHJlbGVh c2VfZnJhbWVfZGMgKChmKSwgKGhkYykpCisjZW5kaWYKKworI2lmbmRlZiBNQ19PUFRJT05BTF9I REMKKyNkZWZpbmUgTUNfT1BUSU9OQUxfSERDKGhkYykKKyNkZWZpbmUgTUNfREVDTEFSRV9IREMo aGRjKQorI2RlZmluZSBNQ19BTExPQ0FURV9IREMoaGRjLCBmKQorI2RlZmluZSBNQ19SRUxFQVNF X0hEQyhoZGMsIGYpCisjZW5kaWYKKworc3RhdGljIGludCBsZWZ0X292ZXJ3cml0dGVuIChzdHJ1 Y3QgZ2x5cGhfc3RyaW5nICopOworc3RhdGljIGludCByaWdodF9vdmVyd3JpdHRlbiAoc3RydWN0 IGdseXBoX3N0cmluZyAqKTsKK3N0YXRpYyBpbnQgbGVmdF9vdmVyd3JpdGluZyAoc3RydWN0IGds eXBoX3N0cmluZyAqKTsKK3N0YXRpYyBpbnQgcmlnaHRfb3ZlcndyaXRpbmcgKHN0cnVjdCBnbHlw aF9zdHJpbmcgKik7CitzdGF0aWMgdm9pZCBhcHBlbmRfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5 cGhfc3RyaW5nICoqLCBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICoqLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqKTsKK3N0YXRpYyB2b2lkIHByZXBl bmRfZ2x5cGhfc3RyaW5nX2xpc3RzIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICoqLCBzdHJ1Y3QgZ2x5 cGhfc3RyaW5nICoqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBnbHlwaF9zdHJpbmcgKiwgc3RydWN0IGdseXBoX3N0cmluZyAqKTsKK3N0YXRpYyB2b2lk IGFwcGVuZF9nbHlwaF9zdHJpbmdfbGlzdHMgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiosIHN0cnVj dCBnbHlwaF9zdHJpbmcgKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CitzdGF0aWMg dm9pZCBpbml0X2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBNQ19PUFRJT05B TF9IREMgKGhkYykgWENoYXIyYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB3aW5kb3cgKiwgc3RydWN0IGdseXBoX3JvdyAqLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gZ2x5cGhfcm93X2FyZWEsIGludCwgZW51bSBkcmF3X2dseXBoc19mYWNl KTsKK3N0YXRpYyB2b2lkIGNvbXB1dGVfb3ZlcmhhbmdzX2FuZF94IChzdHJ1Y3QgZ2x5cGhfc3Ry aW5nICosIGludCwgYm9vbCk7CitzdGF0aWMgc3RydWN0IGdseXBoX3N0cmluZyAqIGdseXBoX3N0 cmluZ19jb250YWluaW5nX2JhY2tncm91bmRfd2lkdGggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7 CitzdGF0aWMgdm9pZCBzZXRfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmRfd2lkdGggKHN0cnVjdCBn bHlwaF9zdHJpbmcgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBmaWxsX2dseXBoX3N0cmluZyAo c3RydWN0IGdseXBoX3N0cmluZyAqLCBpbnQsIGludCwgaW50LCBpbnQpOworc3RhdGljIGludCBm aWxsX2dzdHJpbmdfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50 LCBpbnQsIGludCk7CitzdGF0aWMgaW50IGZpbGxfY29tcG9zaXRlX2dseXBoX3N0cmluZyAoc3Ry dWN0IGdseXBoX3N0cmluZyAqLCBzdHJ1Y3QgZmFjZSAqLCBpbnQpOworc3RhdGljIGludCBmaWxs X3N0cmV0Y2hfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50KTsK K3N0YXRpYyB2b2lkIGZpbGxfaW1hZ2VfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5n ICopOworc3RhdGljIGludCBmaWxsX2dseXBobGVzc19nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlw aF9zdHJpbmcgKiwgaW50LCBpbnQsIGludCwgaW50KTsKKworI2lmZGVmIEhBVkVfTlRHVUkKKyNk ZWZpbmUgTUNfSU5JVF9HTFlQSF9TVFJJTkcocywgY2hhcjJiLCB3LCByb3csIGFyZWEsIHN0YXJ0 LCBobCkgXAorICBpbml0X2dseXBoX3N0cmluZyAocywgaGRjLCBjaGFyMmIsIHcsIHJvdywgYXJl YSwgc3RhcnQsIGhsKQorI2Vsc2UKKyNkZWZpbmUgTUNfSU5JVF9HTFlQSF9TVFJJTkcocywgY2hh cjJiLCB3LCByb3csIGFyZWEsIHN0YXJ0LCBobCkgXAorICBpbml0X2dseXBoX3N0cmluZyAocywg Y2hhcjJiLCB3LCByb3csIGFyZWEsIHN0YXJ0LCBobCkKKyNlbmRpZgorCisjZGVmaW5lIE1DX0JV SUxEX1NUUkVUQ0hfR0xZUEhfU1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBM QVNUX1gpICAgXAorICAgICBkbwkJCQkJCQkJCSAgICBcCisgICAgICAgewkJCQkJCQkJICAgIFwK KwkgcyA9IGFsbG9jYSAoc2l6ZW9mICpzKTsJCQkJCSAgICBcCisJIE1DX0lOSVRfR0xZUEhfU1RS SU5HIChzLCBOVUxMLCB3LCByb3csIGFyZWEsIFNUQVJULCBITCk7CQkgICAgXAorCSBTVEFSVCA9 IGZpbGxfc3RyZXRjaF9nbHlwaF9zdHJpbmcgKHMsIFNUQVJULCBFTkQpOyAgICAgICAgICAgICAg ICAgXAorCSBhcHBlbmRfZ2x5cGhfc3RyaW5nICgmSEVBRCwgJlRBSUwsIHMpOwkJCQkgICAgXAor ICAgICAgICAgcy0+eCA9IChYKTsJCQkJCQkJICAgIFwKKyAgICAgICB9CQkJCQkJCQkgICAgXAor ICAgICB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgTUNfQlVJTERfSU1BR0VfR0xZUEhfU1RSSU5H KFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpIFwKKyAgICAgZG8JCQkJCQkJ CQlcCisgICAgICAgewkJCQkJCQkJXAorCSBzID0gYWxsb2NhIChzaXplb2YgKnMpOwkJCQkJXAor CSBNQ19JTklUX0dMWVBIX1NUUklORyAocywgTlVMTCwgdywgcm93LCBhcmVhLCBTVEFSVCwgSEwp OwkJXAorCSBmaWxsX2ltYWdlX2dseXBoX3N0cmluZyAocyk7CQkJCQlcCisJIGFwcGVuZF9nbHlw aF9zdHJpbmcgKCZIRUFELCAmVEFJTCwgcyk7CQkJCVwKKwkgKytTVEFSVDsJCQkJCQkJXAorICAg ICAgICAgcy0+eCA9IChYKTsJCQkJCQkJXAorICAgICAgIH0JCQkJCQkJCVwKKyAgICAgd2hpbGUg KGZhbHNlKQorCisjaWZuZGVmIEhBVkVfWFdJREdFVFMKKyMgZGVmaW5lIE1DX0JVSUxEX1hXSURH RVRfR0xZUEhfU1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpIFwK KyAgICAgZWFzc3VtZSAoZmFsc2UpCisjZWxzZQorIyBkZWZpbmUgTUNfQlVJTERfWFdJREdFVF9H TFlQSF9TVFJJTkcoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkgXAorICAg ICBkbwkJCQkJCQkJCVwKKyAgICAgICB7CQkJCQkJCQlcCisJIHMgPSBhbGxvY2EgKHNpemVvZiAq cyk7CQkJCQlcCisJIE1DX0lOSVRfR0xZUEhfU1RSSU5HIChzLCBOVUxMLCB3LCByb3csIGFyZWEs IFNUQVJULCBITCk7CQlcCisJIGZpbGxfeHdpZGdldF9nbHlwaF9zdHJpbmcgKHMpOwkJCQkJXAor CSBhcHBlbmRfZ2x5cGhfc3RyaW5nICgmKEhFQUQpLCAmKFRBSUwpLCBzKTsJCQlcCisJICsrKFNU QVJUKTsJCQkJCQkJXAorICAgICAgICAgcy0+eCA9IChYKTsJCQkJCQkJXAorICAgICAgIH0JCQkJ CQkJCVwKKyAgICAgd2hpbGUgKGZhbHNlKQorI2VuZGlmCisKKyNkZWZpbmUgTUNfQlVJTERfQ0hB Ul9HTFlQSF9TVFJJTkdTKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpCSAg IFwKKyAgICAgZG8JCQkJCQkJCQkgICBcCisgICAgICAgewkJCQkJCQkJICAgXAorCSBpbnQgZmFj ZV9pZDsJCQkJCQkJICAgXAorCSBYQ2hhcjJiICpjaGFyMmI7CQkJCQkJICAgXAorCQkJCQkJCQkJ ICAgXAorCSBmYWNlX2lkID0gKHJvdyktPmdseXBoc1thcmVhXVtTVEFSVF0uZmFjZV9pZDsJCQkg ICBcCisJCQkJCQkJCQkgICBcCisJIHMgPSBhbGxvY2EgKHNpemVvZiAqcyk7CQkJCQkgICBcCisJ IFNBRkVfTkFMTE9DQSAoY2hhcjJiLCAxLCAoRU5EKSAtIChTVEFSVCkpOwkJCSAgIFwKKwkgTUNf SU5JVF9HTFlQSF9TVFJJTkcgKHMsIGNoYXIyYiwgdywgcm93LCBhcmVhLCBTVEFSVCwgSEwpOwkg ICBcCisJIGFwcGVuZF9nbHlwaF9zdHJpbmcgKCZIRUFELCAmVEFJTCwgcyk7CQkJCSAgIFwKKwkg cy0+eCA9IChYKTsJCQkJCQkJICAgXAorCSBTVEFSVCA9IGZpbGxfZ2x5cGhfc3RyaW5nIChzLCBm YWNlX2lkLCBTVEFSVCwgRU5ELCBvdmVybGFwcyk7CSAgIFwKKyAgICAgICB9CQkJCQkJCQkgICBc CisgICAgIHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBNQ19CVUlMRF9DT01QT1NJVEVfR0xZUEhf U1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNUX1gpIFwKKyAgZG8gewkJ CQkJCQkJCSAgICBcCisgICAgaW50IGZhY2VfaWQgPSAocm93KS0+Z2x5cGhzW2FyZWFdW1NUQVJU XS5mYWNlX2lkOwkJCSAgICBcCisgICAgc3RydWN0IGZhY2UgKmJhc2VfZmFjZSA9IEZBQ0VfRlJP TV9JRCAoZiwgZmFjZV9pZCk7CQkgICAgXAorICAgIHB0cmRpZmZfdCBjbXBfaWQgPSAocm93KS0+ Z2x5cGhzW2FyZWFdW1NUQVJUXS51LmNtcC5pZDsJCSAgICBcCisgICAgc3RydWN0IGNvbXBvc2l0 aW9uICpjbXAgPSBjb21wb3NpdGlvbl90YWJsZVtjbXBfaWRdOwkJICAgIFwKKyAgICBYQ2hhcjJi ICpjaGFyMmI7CQkJCQkJCSAgICBcCisgICAgc3RydWN0IGdseXBoX3N0cmluZyAqZmlyc3RfcyA9 IE5VTEw7CQkJCSAgICBcCisgICAgaW50IG47CQkJCQkJCQkgICAgXAorCQkJCQkJCQkJICAgIFwK KyAgICBTQUZFX05BTExPQ0EgKGNoYXIyYiwgMSwgY21wLT5nbHlwaF9sZW4pOwkJCQkgICAgXAor CQkJCQkJCQkJICAgIFwKKyAgICBmb3IgKG4gPSAwOyBuIDwgY21wLT5nbHlwaF9sZW47KQkJCQkJ ICAgIFwKKyAgICAgIHsJCQkJCQkJCQkgICAgXAorCXMgPSBhbGxvY2EgKHNpemVvZiAqcyk7CQkJ CQkJICAgIFwKKwlNQ19JTklUX0dMWVBIX1NUUklORyAocywgY2hhcjJiLCB3LCByb3csIGFyZWEs IFNUQVJULCBITCk7CQkgICAgXAorCWFwcGVuZF9nbHlwaF9zdHJpbmcgKCYoSEVBRCksICYoVEFJ TCksIHMpOwkJCSAgICBcCisJcy0+Y21wID0gY21wOwkJCQkJCQkgICAgXAorCXMtPmNtcF9mcm9t ID0gbjsJCQkJCQkgICAgXAorCXMtPnggPSAoWCk7CQkJCQkJCSAgICBcCisJaWYgKG4gPT0gMCkJ CQkJCQkJICAgIFwKKwkgIGZpcnN0X3MgPSBzOwkJCQkJCQkgICAgXAorCW4gPSBmaWxsX2NvbXBv c2l0ZV9nbHlwaF9zdHJpbmcgKHMsIGJhc2VfZmFjZSwgb3ZlcmxhcHMpOwkgICAgXAorICAgICAg fQkJCQkJCQkJCSAgICBcCisJCQkJCQkJCQkgICAgXAorICAgICsrU1RBUlQ7CQkJCQkJCQkgICAg XAorICAgIHMgPSBmaXJzdF9zOwkJCQkJCQkgICAgXAorICB9IHdoaWxlIChmYWxzZSkKKworI2Rl ZmluZSBNQ19CVUlMRF9HU1RSSU5HX0dMWVBIX1NUUklORyhTVEFSVCwgRU5ELCBIRUFELCBUQUlM LCBITCwgWCwgTEFTVF9YKSBcCisgIGRvIHsJCQkJCQkJCQkgIFwKKyAgICBpbnQgZmFjZV9pZDsJ CQkJCQkJICBcCisgICAgWENoYXIyYiAqY2hhcjJiOwkJCQkJCQkgIFwKKyAgICBMaXNwX09iamVj dCBnc3RyaW5nOwkJCQkJCSAgXAorCQkJCQkJCQkJICBcCisgICAgZmFjZV9pZCA9IChyb3cpLT5n bHlwaHNbYXJlYV1bU1RBUlRdLmZhY2VfaWQ7CQkJICBcCisgICAgZ3N0cmluZyA9IChjb21wb3Np dGlvbl9nc3RyaW5nX2Zyb21faWQJCQkJICBcCisJICAgICAgICgocm93KS0+Z2x5cGhzW2FyZWFd W1NUQVJUXS51LmNtcC5pZCkpOwkJCSAgXAorICAgIHMgPSBhbGxvY2EgKHNpemVvZiAqcyk7CQkJ CQkJICBcCisgICAgU0FGRV9OQUxMT0NBIChjaGFyMmIsIDEsIExHU1RSSU5HX0dMWVBIX0xFTiAo Z3N0cmluZykpOwkJICBcCisgICAgTUNfSU5JVF9HTFlQSF9TVFJJTkcgKHMsIGNoYXIyYiwgdywg cm93LCBhcmVhLCBTVEFSVCwgSEwpOwkJICBcCisgICAgYXBwZW5kX2dseXBoX3N0cmluZyAoJihI RUFEKSwgJihUQUlMKSwgcyk7CQkJCSAgXAorICAgIHMtPnggPSAoWCk7CQkJCQkJCQkgIFwKKyAg ICBTVEFSVCA9IGZpbGxfZ3N0cmluZ19nbHlwaF9zdHJpbmcgKHMsIGZhY2VfaWQsIFNUQVJULCBF TkQsIG92ZXJsYXBzKTsgXAorICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBNQ19CVUlMRF9H TFlQSExFU1NfR0xZUEhfU1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNU X1gpIFwKKyAgZG8JCQkJCQkJCQkgICAgXAorICAgIHsJCQkJCQkJCQkgICAgXAorICAgICAgaW50 IGZhY2VfaWQ7CQkJCQkJCSAgICBcCisJCQkJCQkJCQkgICAgXAorICAgICAgZmFjZV9pZCA9IChy b3cpLT5nbHlwaHNbYXJlYV1bU1RBUlRdLmZhY2VfaWQ7CQkJICAgIFwKKwkJCQkJCQkJCSAgICBc CisgICAgICBzID0gYWxsb2NhIChzaXplb2YgKnMpOwkJCQkJCSAgICBcCisgICAgICBNQ19JTklU X0dMWVBIX1NUUklORyAocywgTlVMTCwgdywgcm93LCBhcmVhLCBTVEFSVCwgSEwpOwkJICAgIFwK KyAgICAgIGFwcGVuZF9nbHlwaF9zdHJpbmcgKCZIRUFELCAmVEFJTCwgcyk7CQkJCSAgICBcCisg ICAgICBzLT54ID0gKFgpOwkJCQkJCQkgICAgXAorICAgICAgU1RBUlQgPSBmaWxsX2dseXBobGVz c19nbHlwaF9zdHJpbmcgKHMsIGZhY2VfaWQsIFNUQVJULCBFTkQsCSAgICBcCisJCQkJCSAgIG92 ZXJsYXBzKTsJCQkgICAgXAorICAgIH0JCQkJCQkJCQkgICAgXAorICB3aGlsZSAoZmFsc2UpCisK KyNkZWZpbmUgTUNfQlVJTERfR0xZUEhfU1RSSU5HU18xKFNUQVJULCBFTkQsIEhFQUQsIFRBSUws IEhMLCBYLCBMQVNUX1gpCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAg IEhFQUQgPSBUQUlMID0gTlVMTDsJCQkJCQlcCisgICAgICB3aGlsZSAoU1RBUlQgPCBFTkQpCQkJ CQkJXAorCXsJCQkJCQkJCVwKKwkgIHN0cnVjdCBnbHlwaCAqZmlyc3RfZ2x5cGggPSAocm93KS0+ Z2x5cGhzW2FyZWFdICsgU1RBUlQ7CVwKKwkgIHN3aXRjaCAoZmlyc3RfZ2x5cGgtPnR5cGUpCQkJ CQlcCisJICAgIHsJCQkJCQkJCVwKKwkgICAgY2FzZSBDSEFSX0dMWVBIOgkJCQkJCVwKKwkgICAg ICBNQ19CVUlMRF9DSEFSX0dMWVBIX1NUUklOR1MgKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsCQlc CisJCQkJCUhMLCBYLCBMQVNUX1gpOwkJCVwKKwkgICAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJ CQkJXAorCSAgICBjYXNlIENPTVBPU0lURV9HTFlQSDoJCQkJCVwKKwkgICAgICBpZiAoZmlyc3Rf Z2x5cGgtPnUuY21wLmF1dG9tYXRpYykJCQkJXAorCQlNQ19CVUlMRF9HU1RSSU5HX0dMWVBIX1NU UklORyAoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwJXAorCQkJCQkgICAgSEwsIFgsIExBU1RfWCk7 CQlcCisJICAgICAgZWxzZQkJCQkJCQlcCisJCU1DX0JVSUxEX0NPTVBPU0lURV9HTFlQSF9TVFJJ TkcgKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsCVwKKwkJCQkJICAgICAgSEwsIFgsIExBU1RfWCk7 CQlcCisJICAgICAgYnJlYWs7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgICAgY2FzZSBTVFJFVENI X0dMWVBIOgkJCQkJCVwKKwkgICAgICBNQ19CVUlMRF9TVFJFVENIX0dMWVBIX1NUUklORyAoU1RB UlQsIEVORCwgSEVBRCwgVEFJTCwJXAorCQkJCQkgIEhMLCBYLCBMQVNUX1gpOwkJXAorCSAgICAg IGJyZWFrOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJICAgIGNhc2UgSU1BR0VfR0xZUEg6CQkJCQkJ XAorCSAgICAgIE1DX0JVSUxEX0lNQUdFX0dMWVBIX1NUUklORyAoU1RBUlQsIEVORCwgSEVBRCwg VEFJTCwJCVwKKwkJCQkJSEwsIFgsIExBU1RfWCk7CQkJXAorCSAgICAgIGJyZWFrOworCisjZGVm aW5lIE1DX0JVSUxEX0dMWVBIX1NUUklOR1NfWFcoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEws IFgsIExBU1RfWCkJXAorICAgICAgICAgICAgY2FzZSBYV0lER0VUX0dMWVBIOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBNQ19CVUlMRF9Y V0lER0VUX0dMWVBIX1NUUklORyAoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgICAgICAgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEwsIFgsIExBU1RfWCk7ICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICBicmVhazsKKworI2RlZmluZSBNQ19CVUlMRF9H TFlQSF9TVFJJTkdTXzIoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkJXAor CSAgICBjYXNlIEdMWVBITEVTU19HTFlQSDoJCQkJCVwKKwkgICAgICBNQ19CVUlMRF9HTFlQSExF U1NfR0xZUEhfU1RSSU5HIChTVEFSVCwgRU5ELCBIRUFELCBUQUlMLAlcCisJCQkJCSAgICBITCwg WCwgTEFTVF9YKTsJCVwKKwkgICAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJCQkJXAorCSAgICBk ZWZhdWx0OgkJCQkJCQlcCisJICAgICAgZW1hY3NfYWJvcnQgKCk7CQkJCQkJXAorCSAgICB9CQkJ CQkJCQlcCisJCQkJCQkJCQlcCisJICBpZiAocykJCQkJCQkJXAorCSAgICB7CQkJCQkJCQlcCisJ ICAgICAgc2V0X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kX3dpZHRoIChzLCBTVEFSVCwgTEFTVF9Y KTsJXAorCSAgICAgIChYKSArPSBzLT53aWR0aDsJCQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwl9 CQkJCQkJCQlcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgTUNfQlVJTERfR0xZUEhf U1RSSU5HUyhTVEFSVCwgRU5ELCBIRUFELCBUQUlMLCBITCwgWCwgTEFTVF9YKQlcCisgICAgTUNf QlVJTERfR0xZUEhfU1RSSU5HU18xKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNU X1gpCVwKKyAgICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTX1hXKFNUQVJULCBFTkQsIEhFQUQsIFRB SUwsIEhMLCBYLCBMQVNUX1gpCVwKKyAgICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTXzIoU1RBUlQs IEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkKKworLyogU2V0IHZhcmlhYmxlcyBXSURU SCBhbmQgQllURVMgZm9yIGEgbXVsdGlieXRlIHNlcXVlbmNlIHN0YXJ0aW5nIGF0IFAuCisgICBE UCBpcyBhIGRpc3BsYXkgdGFibGUgb3IgTlVMTC4gKi8KKyNkZWZpbmUgTUNfTVVMVElCWVRFX0JZ VEVTX1dJRFRIKHAsIGRwLCBieXRlcywgd2lkdGgpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAg IGludCBjaDsJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisgICAgY2ggPSBTVFJJTkdfQ0hBUl9BTkRf TEVOR1RIIChwLCBieXRlcyk7CQkJCVwKKyAgICBpZiAoQllURVNfQllfQ0hBUl9IRUFEICgqcCkg IT0gYnl0ZXMpCQkJCVwKKyAgICAgIHdpZHRoID0gYnl0ZXMgKiA0OwkJCQkJCVwKKyAgICBlbHNl CQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCWlmIChkcCAhPSAwICYmIFZFQ1RPUlAgKERJ U1BfQ0hBUl9WRUNUT1IgKGRwLCBjaCkpKQkJXAorCSAgd2lkdGggPSBzYW5pdGl6ZV9jaGFyX3dp ZHRoIChBU0laRSAoRElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGNoKSkpOyBcCisJZWxzZQkJCQkJCQkJ XAorCSAgd2lkdGggPSBDSEFSQUNURVJfV0lEVEggKGNoKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJ CQlcCisgIH0gd2hpbGUgKDApCisKK0xpc3BfT2JqZWN0CittY192ZWN0b3IgKGludCBsZW5ndGgp Cit7CisgIHN0cnVjdCBMaXNwX1ZlY3RvciAqcCA9IGFsbG9jYXRlX3ZlY3RvciAobGVuZ3RoKTsK KyAgZm9yIChwdHJkaWZmX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICBwLT5jb250ZW50 c1tpXSA9IFFuaWw7CisgIHJldHVybiBtYWtlX2xpc3BfcHRyIChwLCBMaXNwX1ZlY3Rvcmxpa2Up OworfQorCitMaXNwX09iamVjdAorbWNfbGlzdG4gKHB0cmRpZmZfdCBjb3VudCwgTGlzcF9PYmpl Y3QgYXJnLCAuLi4pCit7CisgIGVhc3N1bWUgKDAgPCBjb3VudCk7CisgIExpc3BfT2JqZWN0IHZh bCA9IEZjb25zIChhcmcsIFFuaWwpOworICBMaXNwX09iamVjdCB0YWlsID0gdmFsOworICB2YV9s aXN0IGFwOworICB2YV9zdGFydCAoYXAsIGFyZyk7CisgIGZvciAocHRyZGlmZl90IGkgPSAxOyBp IDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBlbGVtID0gRmNvbnMgKHZh X2FyZyAoYXAsIExpc3BfT2JqZWN0KSwgUW5pbCk7CisgICAgICBYU0VUQ0RSICh0YWlsLCBlbGVt KTsKKyAgICAgIHRhaWwgPSBlbGVtOworICAgIH0KKyAgdmFfZW5kIChhcCk7CisgIHJldHVybiB2 YWw7Cit9CisKK0xpc3BfT2JqZWN0CittY19tZW1xIChMaXNwX09iamVjdCBlbHQsIExpc3BfT2Jq ZWN0IGxpc3QpCit7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICghQ09OU1AgKGxpc3Qp IHx8IEVRIChYQ0FSIChsaXN0KSwgZWx0KSkKKyAgICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0g WENEUiAobGlzdCk7CisgICAgICBpZiAoIUNPTlNQIChsaXN0KSB8fCBFUSAoWENBUiAobGlzdCks IGVsdCkpCisgICAgICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgICAg aWYgKCFDT05TUCAobGlzdCkgfHwgRVEgKFhDQVIgKGxpc3QpLCBlbHQpKQorICAgICAgICBicmVh azsKKyAgICAgIGxpc3QgPSBYQ0RSIChsaXN0KTsKKyAgICB9CisgIHJldHVybiBsaXN0OworfQor CitMaXNwX09iamVjdAorbWNfbnRoIChpbnQgbnVtLCBMaXNwX09iamVjdCBsaXN0KQoreworICBm b3IgKGludCBpID0gMDsgaSA8IG51bSAmJiAhTklMUCAobGlzdCk7IGkrKykKKyAgICBsaXN0ID0g WENEUiAobGlzdCk7CisgIGlmIChDT05TUCAobGlzdCkpCisgICAgcmV0dXJuIFhDQVIgKGxpc3Qp OworICAgIGVsc2UKKyAgICAgIHJldHVybiBRbmlsOworfQorCitMaXNwX09iamVjdAorbWNfYXNz cSAoTGlzcF9PYmplY3Qga2V5LCBMaXNwX09iamVjdCBsaXN0KQoreworICB3aGlsZSAoMSkKKyAg ICB7CisgICAgICBpZiAoIUNPTlNQIChsaXN0KQorICAgICAgICAgIHx8IChDT05TUCAoWENBUiAo bGlzdCkpCisgICAgICAgICAgICAgICYmIEVRIChYQ0FSIChYQ0FSIChsaXN0KSksIGtleSkpKQor ICAgICAgICBicmVhazsKKyAgICAgIGxpc3QgPSBYQ0RSIChsaXN0KTsKKyAgICAgIGlmICghQ09O U1AgKGxpc3QpCisgICAgICAgICAgfHwgKENPTlNQIChYQ0FSIChsaXN0KSkKKyAgICAgICAgICAg ICAgJiYgRVEgKFhDQVIgKFhDQVIgKGxpc3QpKSwga2V5KSkpCisgICAgICAgIGJyZWFrOworICAg ICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgICAgaWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAg ICB8fCAoQ09OU1AgKFhDQVIgKGxpc3QpKQorICAgICAgICAgICAgICAmJiBFUSAoWENBUiAoWENB UiAobGlzdCkpLCBrZXkpKSkKKyAgICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0gWENEUiAobGlz dCk7CisgICAgfQorICBpZiAoQ09OU1AgKGxpc3QpKQorICAgIHJldHVybiBYQ0FSIChsaXN0KTsK KyAgICBlbHNlCisgICAgICByZXR1cm4gUW5pbDsKK30KKworTGlzcF9PYmplY3QKK21jX2Fzc29j IChMaXNwX09iamVjdCBrZXksIExpc3BfT2JqZWN0IGxpc3QpCit7CisgIExpc3BfT2JqZWN0IGNh cjsKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAg ICB8fCAoQ09OU1AgKFhDQVIgKGxpc3QpKQorICAgICAgICAgICAgICAmJiAoY2FyID0gWENBUiAo WENBUiAobGlzdCkpLAorICAgICAgICAgICAgICAgICAgRVEgKGNhciwga2V5KSB8fCAhTklMUCAo RmVxdWFsIChjYXIsIGtleSkpKSkpCisgICAgICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIg KGxpc3QpOworICAgICAgaWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAgICB8fCAoQ09OU1AgKFhD QVIgKGxpc3QpKQorICAgICAgICAgICAgICAmJiAoY2FyID0gWENBUiAoWENBUiAobGlzdCkpLAor ICAgICAgICAgICAgICAgICAgRVEgKGNhciwga2V5KSB8fCAhTklMUCAoRmVxdWFsIChjYXIsIGtl eSkpKSkpCisgICAgICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgICAg aWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAgICB8fCAoQ09OU1AgKFhDQVIgKGxpc3QpKQorICAg ICAgICAgICAgICAmJiAoY2FyID0gWENBUiAoWENBUiAobGlzdCkpLAorICAgICAgICAgICAgICAg ICAgRVEgKGNhciwga2V5KSB8fCAhTklMUCAoRmVxdWFsIChjYXIsIGtleSkpKSkpCisgICAgICAg IGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgIH0KKyAgaWYgKENPTlNQIChs aXN0KSkKKyAgICByZXR1cm4gWENBUiAobGlzdCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIFFu aWw7Cit9CisKK0xpc3BfT2JqZWN0CittY19wbGlzdF9nZXQgKExpc3BfT2JqZWN0IHBsaXN0LCBM aXNwX09iamVjdCBwcm9wKQoreworICBMaXNwX09iamVjdCB0YWlsLCBoYWxmdGFpbDsKKyAgLyog aGFsZnRhaWwgaXMgdXNlZCB0byBkZXRlY3QgY2lyY3VsYXIgbGlzdHMuICAqLworICB0YWlsID0g aGFsZnRhaWwgPSBwbGlzdDsKKyAgd2hpbGUgKENPTlNQICh0YWlsKSAmJiBDT05TUCAoWENEUiAo dGFpbCkpKQorICAgIHsKKyAgICAgIGlmIChFUSAocHJvcCwgWENBUiAodGFpbCkpKQorICAgICAg ICByZXR1cm4gWENBUiAoWENEUiAodGFpbCkpOworICAgICAgdGFpbCA9IFhDRFIgKFhDRFIgKHRh aWwpKTsKKyAgICAgIGhhbGZ0YWlsID0gWENEUiAoaGFsZnRhaWwpOworICAgICAgaWYgKEVRICh0 YWlsLCBoYWxmdGFpbCkpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFFuaWw7Cit9 CisKKy8qIENoZWNrIHRoZSBwcmVzZW5jZSBvZiBhIGRpc3BsYXkgcHJvcGVydHkgYW5kIGNvbXB1 dGUgaXRzIHdpZHRoLgorICAgSWYgYSBwcm9wZXJ0eSB3YXMgZm91bmQgYW5kIGl0cyB3aWR0aCB3 YXMgZm91bmQgYXMgd2VsbCwgcmV0dXJuCisgICBpdHMgd2lkdGggKD49IDApIGFuZCBzZXQgdGhl IHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIHByb3BlcnR5CisgICBpbiBFTkRQT1MuCisgICBP dGhlcndpc2UganVzdCByZXR1cm4gLTEuICovCitzdGF0aWMgaW50CittY19jaGVja19kaXNwbGF5 X3dpZHRoIChwdHJkaWZmX3QgcG9zLCBwdHJkaWZmX3QgY29sLCBwdHJkaWZmX3QgKmVuZHBvcykK K3sKKyAgTGlzcF9PYmplY3QgdmFsLCBvdmVybGF5OworICBpZiAoQ09OU1AgKHZhbCA9IGdldF9j aGFyX3Byb3BlcnR5X2FuZF9vdmVybGF5CisgICAgICAgKG1ha2VfZml4bnVtIChwb3MpLCBRZGlz cGxheSwgUW5pbCwgJm92ZXJsYXkpKQorICAgICAgJiYgRVEgKFFzcGFjZSwgWENBUiAodmFsKSkp CisgICAgeyAvKiBGSVhNRTogVXNlIGNhbGNfcGl4ZWxfd2lkdGhfb3JfaGVpZ2h0LiAqLworICAg ICAgTGlzcF9PYmplY3QgcGxpc3QgPSBYQ0RSICh2YWwpLCBwcm9wOworICAgICAgaW50IHdpZHRo ID0gLTE7CisgICAgICBFTUFDU19JTlQgYWxpZ25fdG9fbWF4ID0KKyAgKGNvbCA8IE1PU1RfUE9T SVRJVkVfRklYTlVNIC0gSU5UX01BWAorICAgPyAoRU1BQ1NfSU5UKSBJTlRfTUFYICsgY29sCisg ICA6IE1PU1RfUE9TSVRJVkVfRklYTlVNKTsKKyAgICAgIGlmICgocHJvcCA9IG1jX3BsaXN0X2dl dCAocGxpc3QsIFFDd2lkdGgpLAorICAgICBSQU5HRURfRklYTlVNUCAoMCwgcHJvcCwgSU5UX01B WCkpCisgICAgfHwgKHByb3AgPSBtY19wbGlzdF9nZXQgKHBsaXN0LCBRQ3JlbGF0aXZlX3dpZHRo KSwKKyAgICAgICAgUkFOR0VEX0ZJWE5VTVAgKDAsIHByb3AsIElOVF9NQVgpKSkKKyAgd2lkdGgg PSBYRklYTlVNIChwcm9wKTsKKyAgICAgIGVsc2UgaWYgKEZMT0FUUCAocHJvcCkgJiYgMCA8PSBY RkxPQVRfREFUQSAocHJvcCkKKyAgICAgICAgICYmIFhGTE9BVF9EQVRBIChwcm9wKSA8PSBJTlRf TUFYKQorICB3aWR0aCA9IChpbnQpKFhGTE9BVF9EQVRBIChwcm9wKSArIDAuNSk7CisgICAgICBl bHNlIGlmICgocHJvcCA9IG1jX3BsaXN0X2dldCAocGxpc3QsIFFDYWxpZ25fdG8pLAorICAgIFJB TkdFRF9GSVhOVU1QIChjb2wsIHByb3AsIGFsaWduX3RvX21heCkpKQorICB3aWR0aCA9IFhGSVhO VU0gKHByb3ApIC0gY29sOworICAgICAgZWxzZSBpZiAoRkxPQVRQIChwcm9wKSAmJiBjb2wgPD0g WEZMT0FUX0RBVEEgKHByb3ApCisgICAgICAgICAmJiAoWEZMT0FUX0RBVEEgKHByb3ApIDw9IGFs aWduX3RvX21heCkpCisgIHdpZHRoID0gKGludCkoWEZMT0FUX0RBVEEgKHByb3ApICsgMC41KSAt IGNvbDsKKyAgICAgIGlmICh3aWR0aCA+PSAwKQorICB7CisgICAgcHRyZGlmZl90IHN0YXJ0Owor ICAgIGlmIChPVkVSTEFZUCAob3ZlcmxheSkpCisgICAgICAqZW5kcG9zID0gT1ZFUkxBWV9QT1NJ VElPTiAoT1ZFUkxBWV9FTkQgKG92ZXJsYXkpKTsKKyAgICBlbHNlCisgICAgICBnZXRfcHJvcGVy dHlfYW5kX3JhbmdlIChwb3MsIFFkaXNwbGF5LCAmdmFsLCAmc3RhcnQsIGVuZHBvcywgUW5pbCk7 CisgICAgLyogRm9yIDpyZWxhdGl2ZS13aWR0aCwgd2UgbmVlZCB0byBtdWx0aXBseSBieSB0aGUg Y29sdW1uCisgICAgICAgd2lkdGggb2YgdGhlIGNoYXJhY3RlciBhdCBQT1MsIGlmIGl0IGlzIGdy ZWF0ZXIgdGhhbiAxLiAqLworICAgIGlmICghTklMUCAobWNfcGxpc3RfZ2V0IChwbGlzdCwgUUNy ZWxhdGl2ZV93aWR0aCkpCisgICAgICAgICYmICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwg ZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCisgICAgICB7CisgICAgICAgIGludCBiLCB3 ZDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqcCA9IEJZVEVfUE9TX0FERFIgKENIQVJfVE9fQllU RSAocG9zKSk7CisgICAgICAgIE1DX01VTFRJQllURV9CWVRFU19XSURUSCAocCwgYnVmZmVyX2Rp c3BsYXlfdGFibGUgKCksIGIsIHdkKTsKKyAgICAgICAgd2lkdGggKj0gd2Q7CisgICAgICB9Cisg ICAgcmV0dXJuIHdpZHRoOworICB9CisgICAgfQorICByZXR1cm4gLTE7Cit9CisKKy8qIFNjYW5u aW5nIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBi dWZmZXIKKyAgIHBvc2l0aW9uIEVORFBPUyBvciBhdCB0aGUgY29sdW1uIEdPQUxDT0wgb3IgYXQg dGhlIGVuZCBvZiBsaW5lLCB3aGljaGV2ZXIKKyAgIGNvbWVzIGZpcnN0LgorICAgUmV0dXJuIHRo ZSByZXN1bHRpbmcgYnVmZmVyIHBvc2l0aW9uIGFuZCBjb2x1bW4gaW4gRU5EUE9TIGFuZCBHT0FM Q09MLgorICAgUFJFVkNPTCBnZXRzIHNldCB0byB0aGUgY29sdW1uIG9mIHRoZSBwcmV2aW91cyBw b3NpdGlvbiAoaXQncyBhbHdheXMKKyAgIHN0cmljdGx5IHNtYWxsZXIgdGhhbiB0aGUgZ29hbCBj b2x1bW4pLiAqLwordm9pZAorbWNfc2Nhbl9mb3JfY29sdW1uIChwdHJkaWZmX3QgKmVuZHBvcywg RU1BQ1NfSU5UICpnb2FsY29sLCBwdHJkaWZmX3QgKnByZXZjb2wsIHB0cmRpZmZfdCBwdCkKK3sK KyAgRU1BQ1NfSU5UIGxhc3Rfa25vd25fY29sdW1uX21vZGlmaWVkID0gMDsKKyAgcHRyZGlmZl90 IGxhc3Rfa25vd25fY29sdW1uID0gMDsKKyAgaW50IHRhYl93aWR0aCA9IFNBTkVfVEFCX1dJRFRI IChjdXJyZW50X2J1ZmZlcik7CisgIGJvb2wgY3RsX2Fycm93ID0gIU5JTFAgKEJWQVIgKGN1cnJl bnRfYnVmZmVyLCBjdGxfYXJyb3cpKTsKKyAgc3RydWN0IExpc3BfQ2hhcl9UYWJsZSAqZHAgPSBi dWZmZXJfZGlzcGxheV90YWJsZSAoKTsKKyAgYm9vbCBtdWx0aWJ5dGUgPSAhTklMUCAoQlZBUiAo Y3VycmVudF9idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpOworICBzdHJ1Y3Qg Y29tcG9zaXRpb25faXQgY21wX2l0OworICBMaXNwX09iamVjdCB3aW5kb3c7CisgIHN0cnVjdCB3 aW5kb3cgKnc7CisgIC8qIFN0YXJ0IHRoZSBzY2FuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBs aW5lIHdpdGggY29sdW1uIG51bWJlciAwLiAqLworICByZWdpc3RlciBwdHJkaWZmX3QgY29sID0g MCwgcHJldl9jb2wgPSAwOworICBFTUFDU19JTlQgZ29hbCA9IGdvYWxjb2wgPyAqZ29hbGNvbCA6 IE1PU1RfUE9TSVRJVkVfRklYTlVNOworICBwdHJkaWZmX3QgZW5kID0gZW5kcG9zID8gKmVuZHBv cyA6IHB0OworICBwdHJkaWZmX3Qgc2Nhbiwgc2Nhbl9ieXRlLCBuZXh0X2JvdW5kYXJ5OworICBz Y2FuID0gZmluZF9uZXdsaW5lIChwdCwgQ0hBUl9UT19CWVRFIChwdCksIEJFR1YsIEJFR1ZfQllU RSwgLTEsIE5VTEwsICZzY2FuX2J5dGUsIDEpOworICBuZXh0X2JvdW5kYXJ5ID0gc2NhbjsKKyAg d2luZG93ID0gRmdldF9idWZmZXJfd2luZG93IChGY3VycmVudF9idWZmZXIgKCksIFFuaWwpOwor ICB3ID0gISBOSUxQICh3aW5kb3cpID8gWFdJTkRPVyAod2luZG93KSA6IE5VTEw7CisgIG1lbXNl dCAoJmNtcF9pdCwgMCwgc2l6ZW9mIGNtcF9pdCk7CisgIGNtcF9pdC5pZCA9IC0xOworICBjb21w b3NpdGlvbl9jb21wdXRlX3N0b3BfcG9zICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIGVuZCwg UW5pbCk7CisgIC8qIFNjYW4gZm9yd2FyZCB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAqLworICB3 aGlsZSAoc2NhbiA8IGVuZCkKKyAgICB7CisgICAgICBpbnQgYzsKKyAgICAgIC8qIE9jY2FzaW9u YWxseSB3ZSBtYXkgbmVlZCB0byBza2lwIGludmlzaWJsZSB0ZXh0LiAqLworICAgICAgd2hpbGUg KHNjYW4gPT0gbmV4dF9ib3VuZGFyeSkKKyAgeworICAgIHB0cmRpZmZfdCBvbGRfc2NhbiA9IHNj YW47CisgICAgLyogVGhpcyB1cGRhdGVzIE5FWFRfQk9VTkRBUlkgdG8gdGhlIG5leHQgcGxhY2UK KyAgICAgICB3aGVyZSB3ZSBtaWdodCBuZWVkIHRvIHNraXAgbW9yZSBpbnZpc2libGUgdGV4dC4g Ki8KKyAgICBzY2FuID0gc2tpcF9pbnZpc2libGUgKHNjYW4sICZuZXh0X2JvdW5kYXJ5LCBlbmQs IFFuaWwpOworICAgIGlmIChzY2FuICE9IG9sZF9zY2FuKQorICAgICAgc2Nhbl9ieXRlID0gQ0hB Ul9UT19CWVRFIChzY2FuKTsKKyAgICBpZiAoc2NhbiA+PSBlbmQpCisgICAgICBnb3RvIGVuZGxv b3A7CisgIH0KKyAgICAgIC8qIFRlc3QgcmVhY2hpbmcgdGhlIGdvYWwgY29sdW1uLiAgV2UgZG8g dGhpcyBhZnRlciBza2lwcGluZworICAgaW52aXNpYmxlIGNoYXJhY3RlcnMsIHNvIHRoYXQgd2Ug cHV0IHBvaW50IGJlZm9yZSB0aGUKKyAgIGNoYXJhY3RlciBvbiB3aGljaCB0aGUgY3Vyc29yIHdp bGwgYXBwZWFyLiAqLworICAgICAgaWYgKGNvbCA+PSBnb2FsKQorICBicmVhazsKKyAgICAgIHBy ZXZfY29sID0gY29sOworICAgICAgeyAvKiBDaGVjayBkaXNwbGF5IHByb3BlcnR5LiAqLworICBw dHJkaWZmX3QgZW5kcDsKKyAgaW50IHdpZHRoID0gbWNfY2hlY2tfZGlzcGxheV93aWR0aCAoc2Nh biwgY29sLCAmZW5kcCk7CisgIGlmICh3aWR0aCA+PSAwKQorICAgIHsKKyAgICAgIGNvbCArPSB3 aWR0aDsKKyAgICAgIGlmIChlbmRwID4gc2NhbikgLyogQXZvaWQgaW5maW5pdGUgbG9vcHMgd2l0 aCAwLXdpZHRoIG92ZXJsYXlzLiAqLworICAgICAgICB7CisgICAgc2NhbiA9IGVuZHA7CisgICAg c2Nhbl9ieXRlID0gQ0hBUl9UT19CWVRFIChzY2FuKTsKKyAgICBjb250aW51ZTsKKyAgICAgICAg fQorICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIENoZWNrIGNvbXBvc2l0aW9uIHNlcXVlbmNlLiAq LworICAgICAgaWYgKGNtcF9pdC5pZCA+PSAwCisgICAgfHwgKHNjYW4gPT0gY21wX2l0LnN0b3Bf cG9zCisgICAgICAgICYmIGNvbXBvc2l0aW9uX3Jlc2VhdF9pdCAoJmNtcF9pdCwgc2Nhbiwgc2Nh bl9ieXRlLCBlbmQsCisgICAgICAgICAgdywgTlVMTCwgUW5pbCkpKQorICBjb21wb3NpdGlvbl91 cGRhdGVfaXQgKCZjbXBfaXQsIHNjYW4sIHNjYW5fYnl0ZSwgUW5pbCk7CisgICAgICBpZiAoY21w X2l0LmlkID49IDApCisgIHsKKyAgICBzY2FuICs9IGNtcF9pdC5uY2hhcnM7CisgICAgc2Nhbl9i eXRlICs9IGNtcF9pdC5uYnl0ZXM7CisgICAgaWYgKHNjYW4gPD0gZW5kKQorICAgICAgY29sICs9 IGNtcF9pdC53aWR0aDsKKyAgICBpZiAoY21wX2l0LnRvID09IGNtcF9pdC5uZ2x5cGhzKQorICAg ICAgeworICAgICAgICBjbXBfaXQuaWQgPSAtMTsKKyAgICAgICAgY29tcG9zaXRpb25fY29tcHV0 ZV9zdG9wX3BvcyAoJmNtcF9pdCwgc2Nhbiwgc2Nhbl9ieXRlLCBlbmQsCisgICAgICAgICAgICAg IFFuaWwpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIGNtcF9pdC5mcm9tID0gY21wX2l0LnRv OworICAgIGNvbnRpbnVlOworICB9CisgICAgICBjID0gRkVUQ0hfQllURSAoc2Nhbl9ieXRlKTsK KyAgICAgIC8qIFNlZSBpZiB0aGVyZSBpcyBhIGRpc3BsYXkgdGFibGUgYW5kIGl0IHJlbGF0ZXMK KyAgIHRvIHRoaXMgY2hhcmFjdGVyLiAqLworICAgICAgaWYgKGRwICE9IDAKKyAgICAmJiAhICht dWx0aWJ5dGUgJiYgTEVBRElOR19DT0RFX1AgKGMpKQorICAgICYmIFZFQ1RPUlAgKERJU1BfQ0hB Ul9WRUNUT1IgKGRwLCBjKSkpCisgIHsKKyAgICBMaXNwX09iamVjdCBjaGFydmVjOworICAgIHB0 cmRpZmZfdCBpLCBuOworICAgIC8qIFRoaXMgY2hhcmFjdGVyIGlzIGRpc3BsYXllZCB1c2luZyBh IHZlY3RvciBvZiBnbHlwaHMuCisgICAgICAgVXBkYXRlIHRoZSBjb2x1bW4vcG9zaXRpb24gYmFz ZWQgb24gdGhvc2UgZ2x5cGhzLiAqLworICAgIGNoYXJ2ZWMgPSBESVNQX0NIQVJfVkVDVE9SIChk cCwgYyk7CisgICAgbiA9IEFTSVpFIChjaGFydmVjKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsg aSsrKQorICAgICAgeworICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIHRoZSBzYW1l IGFzCisgICAgIG5leHRfZWxlbWVudF9mcm9tX2Rpc3BsYXlfdmVjdG9yIGRvZXMgaXQuICovCisg ICAgICAgIExpc3BfT2JqZWN0IGVudHJ5ID0gQVJFRiAoY2hhcnZlYywgaSk7CisgICAgICAgIGlm IChHTFlQSF9DT0RFX1AgKGVudHJ5KSkKKyAgICBjID0gR0xZUEhfQ09ERV9DSEFSIChlbnRyeSk7 CisgICAgICAgIGVsc2UKKyAgICBjID0gJyAnOworICAgICAgICBpZiAoYyA9PSAnXG4nKQorICAg IGdvdG8gZW5kbG9vcDsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiBFUSAoQlZBUiAoY3VycmVu dF9idWZmZXIsIHNlbGVjdGl2ZV9kaXNwbGF5KSwgUXQpKQorICAgIGdvdG8gZW5kbG9vcDsKKyAg ICAgICAgaWYgKGMgPT0gJ1x0JykKKyAgICB7CisgICAgICBjb2wgKz0gdGFiX3dpZHRoOworICAg ICAgY29sID0gY29sIC8gdGFiX3dpZHRoICogdGFiX3dpZHRoOworICAgIH0KKyAgICAgICAgZWxz ZQorICAgICsrY29sOworICAgICAgfQorICB9CisgICAgICBlbHNlCisgIHsKKyAgICAvKiBUaGUg ZGlzcGxheSB0YWJsZSBkb2Vzbid0IGFmZmVjdCB0aGlzIGNoYXJhY3RlcjsKKyAgICAgICBpdCBk aXNwbGF5cyBhcyBpdHNlbGYuICovCisgICAgaWYgKGMgPT0gJ1xuJykKKyAgICAgIGdvdG8gZW5k bG9vcDsKKyAgICBpZiAoYyA9PSAnXHInICYmIEVRIChCVkFSIChjdXJyZW50X2J1ZmZlciwgc2Vs ZWN0aXZlX2Rpc3BsYXkpLCBRdCkpCisgICAgICBnb3RvIGVuZGxvb3A7CisgICAgaWYgKGMgPT0g J1x0JykKKyAgICAgIHsKKyAgICAgICAgY29sICs9IHRhYl93aWR0aDsKKyAgICAgICAgY29sID0g Y29sIC8gdGFiX3dpZHRoICogdGFiX3dpZHRoOworICAgICAgfQorICAgIGVsc2UgaWYgKG11bHRp Ynl0ZSAmJiBMRUFESU5HX0NPREVfUCAoYykpCisgICAgICB7CisgICAgICAgIC8qIFN0YXJ0IG9m IG11bHRpLWJ5dGUgZm9ybS4gKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAqcHRyOworICAgICAg ICBpbnQgYnl0ZXMsIHdpZHRoOworICAgICAgICBwdHIgPSBCWVRFX1BPU19BRERSIChzY2FuX2J5 dGUpOworICAgICAgICBNQ19NVUxUSUJZVEVfQllURVNfV0lEVEggKHB0ciwgZHAsIGJ5dGVzLCB3 aWR0aCk7CisgICAgICAgIC8qIFN1YnRyYWN0IG9uZSB0byBjb21wZW5zYXRlIGZvciB0aGUgaW5j cmVtZW50CisgICAgIHRoYXQgaXMgZ29pbmcgdG8gaGFwcGVuIGJlbG93LiAqLworICAgICAgICBz Y2FuX2J5dGUgKz0gYnl0ZXMgLSAxOworICAgICAgICBjb2wgKz0gd2lkdGg7CisgICAgICB9Cisg ICAgZWxzZSBpZiAoY3RsX2Fycm93ICYmIChjIDwgMDQwIHx8IGMgPT0gMDE3NykpCisgICAgICBj b2wgKz0gMjsKKyAgICBlbHNlIGlmIChjIDwgMDQwIHx8IGMgPj0gMDE3NykKKyAgICAgIGNvbCAr PSA0OworICAgIGVsc2UKKyAgICAgIGNvbCsrOworICB9CisgICAgICBzY2FuKys7CisgICAgICBz Y2FuX2J5dGUrKzsKKyAgICB9CisgZW5kbG9vcDoKKyAgbGFzdF9rbm93bl9jb2x1bW4gPSBjb2w7 CisgIGxhc3Rfa25vd25fY29sdW1uX3BvaW50ID0gcHQ7CisgIGxhc3Rfa25vd25fY29sdW1uX21v ZGlmaWVkID0gTU9ESUZGOworICBpZiAoZ29hbGNvbCkKKyAgICAqZ29hbGNvbCA9IGNvbDsKKyAg aWYgKGVuZHBvcykKKyAgICAqZW5kcG9zID0gc2NhbjsKKyAgaWYgKHByZXZjb2wpCisgICAgKnBy ZXZjb2wgPSBwcmV2X2NvbDsKK30KKworcHRyZGlmZl90CittY19jdXJyZW50X2NvbHVtbiAoc3Ry dWN0IHdpbmRvdyAqdywgcHRyZGlmZl90IHB0KQoreworICAvKiBgYnVmX2NoYXJwb3NfdG9fYnl0 ZXBvcyc6ICBlYXNzZXJ0IChCVUZfQkVHIChiKSA8PSBjaGFycG9zICYmIGNoYXJwb3MgPD0gQlVG X1ogKGIpKTsgKi8KKyAgTGlzcF9PYmplY3QgYnVmID0gdy0+Y29udGVudHM7CisgIENIRUNLX0JV RkZFUiAoYnVmKTsKKyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7CisgIHN0cnVj dCBidWZmZXIgKm9sZF9idWZmZXIgPSBOVUxMOworICBpZiAoYiAhPSBjdXJyZW50X2J1ZmZlcikK KyAgICB7CisgICAgICBvbGRfYnVmZmVyID0gY3VycmVudF9idWZmZXI7CisgICAgICBzZXRfYnVm ZmVyX2ludGVybmFsIChiKTsKKyAgICB9CisgIGJvb2wgYmFyZl9jcmFzaCA9IChCVUZfQkVHIChi KSA8PSBwdCAmJiBwdCA8PSBCVUZfWiAoYikpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9j cmFzaCkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9p bnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIEVNQUNTX0lO VCBsYXN0X2tub3duX2NvbHVtbl9tb2RpZmllZCA9IDA7CisgIHB0cmRpZmZfdCBsYXN0X2tub3du X2NvbHVtbiA9IDA7CisgIHB0cmRpZmZfdCBjb2w7CisgIHVuc2lnbmVkIGNoYXIgKnB0ciwgKnN0 b3A7CisgIGJvb2wgdGFiX3NlZW47CisgIHB0cmRpZmZfdCBwb3N0X3RhYjsKKyAgaW50IGM7Cisg IGludCB0YWJfd2lkdGggPSBTQU5FX1RBQl9XSURUSCAoY3VycmVudF9idWZmZXIpOworICBib29s IGN0bF9hcnJvdyA9ICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwgY3RsX2Fycm93KSk7Cisg IHN0cnVjdCBMaXNwX0NoYXJfVGFibGUgKmRwID0gYnVmZmVyX2Rpc3BsYXlfdGFibGUgKCk7Cisg IGlmIChwdCA9PSBsYXN0X2tub3duX2NvbHVtbl9wb2ludAorICAgICAgJiYgTU9ESUZGID09IGxh c3Rfa25vd25fY29sdW1uX21vZGlmaWVkKQorICAgIHsKKyAgICAgIGlmIChvbGRfYnVmZmVyKQor ICAgICAgICBzZXRfYnVmZmVyX2ludGVybmFsIChvbGRfYnVmZmVyKTsKKyAgICAgIHJldHVybiBs YXN0X2tub3duX2NvbHVtbjsKKyAgICB9CisgIC8qIElmIHRoZSBidWZmZXIgaGFzIG92ZXJsYXlz LCB0ZXh0IHByb3BlcnRpZXMsCisgICAgIG9yIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCB1c2UgYSBt b3JlIGdlbmVyYWwgYWxnb3JpdGhtLiAqLworICBpZiAoYnVmZmVyX2ludGVydmFscyAoY3VycmVu dF9idWZmZXIpCisgICAgICB8fCBidWZmZXJfaGFzX292ZXJsYXlzICgpCisgICAgICB8fCBaICE9 IFpfQllURSkKKyAgICB7CisgICAgICBFTUFDU19JTlQgY29sID0gTU9TVF9QT1NJVElWRV9GSVhO VU07CisgICAgICBtY19zY2FuX2Zvcl9jb2x1bW4gKCZwdCwgJmNvbCwgTlVMTCwgcHQpOworICAg ICAgeworICAgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgICBzZXRfYnVmZmVyX2ludGVy bmFsIChvbGRfYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIGNvbDsKKyAgICAgIH0KKyAgICB9Cisg IC8qIFNjYW4gYmFja3dhcmRzIGZyb20gcG9pbnQgdG8gdGhlIHByZXZpb3VzIG5ld2xpbmUsCisg ICAgIGNvdW50aW5nIHdpZHRoLiAgVGFiIGNoYXJhY3RlcnMgYXJlIHRoZSBvbmx5IGNvbXBsaWNh dGVkIGNhc2UuICovCisgIC8qIE1ha2UgYSBwb2ludGVyIGZvciBkZWNyZW1lbnRpbmcgdGhyb3Vn aCB0aGUgY2hhcnMgYmVmb3JlIHBvaW50LiAqLworICBwdHIgPSBCWVRFX1BPU19BRERSIChDSEFS X1RPX0JZVEUgKHB0KSAtIDEpICsgMTsKKyAgLyogTWFrZSBhIHBvaW50ZXIgdG8gd2hlcmUgY29u c2VjdXRpdmUgY2hhcnMgbGVhdmUgb2ZmLAorICAgICBnb2luZyBiYWNrd2FyZHMgZnJvbSBwb2lu dC4gKi8KKyAgaWYgKHB0ID09IEJFR1YpCisgICAgc3RvcCA9IHB0cjsKKyAgZWxzZSBpZiAocHQg PD0gR1BUIHx8IEJFR1YgPiBHUFQpCisgICAgc3RvcCA9IEJFR1ZfQUREUjsKKyAgZWxzZQorICAg IHN0b3AgPSBHQVBfRU5EX0FERFI7CisgIGNvbCA9IDAsIHRhYl9zZWVuID0gMCwgcG9zdF90YWIg PSAwOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBwdHJkaWZmX3QgaSwgbjsKKyAgICAgIExp c3BfT2JqZWN0IGNoYXJ2ZWM7CisgICAgICBpZiAocHRyID09IHN0b3ApCisgIHsKKyAgICAvKiBX ZSBzdG9wcGVkIGVpdGhlciBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCisgICAgICAg b3IgZm9yIHRoZSBnYXAuICovCisgICAgaWYgKHB0ciA9PSBCRUdWX0FERFIpCisgICAgICBicmVh azsKKyAgICAvKiBJdCB3YXMgdGhlIGdhcC4gIEp1bXAgYmFjayBvdmVyIGl0LiAqLworICAgIHN0 b3AgPSBCRUdWX0FERFI7CisgICAgcHRyID0gR1BUX0FERFI7CisgICAgLyogQ2hlY2sgd2hldGhl ciB0aGF0IGJyaW5ncyB1cyB0byBiZWdpbm5pbmcgb2YgYnVmZmVyLiAqLworICAgIGlmIChCRUdW ID49IEdQVCkKKyAgICAgIGJyZWFrOworICB9CisgICAgICBjID0gKi0tcHRyOworICAgICAgaWYg KGRwICYmIFZFQ1RPUlAgKERJU1BfQ0hBUl9WRUNUT1IgKGRwLCBjKSkpCisgIHsKKyAgICBjaGFy dmVjID0gRElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGMpOworICAgIG4gPSBBU0laRSAoY2hhcnZlYyk7 CisgIH0KKyAgICAgIGVsc2UKKyAgeworICAgIGNoYXJ2ZWMgPSBRbmlsOworICAgIG4gPSAxOwor ICB9CisgICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpCisgIHsKKyAgICBpZiAoVkVD VE9SUCAoY2hhcnZlYykpCisgICAgICB7CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGhhbmRs ZWQgdGhlIHNhbWUgYXMKKyAgICAgbmV4dF9lbGVtZW50X2Zyb21fZGlzcGxheV92ZWN0b3IgZG9l cyBpdC4gKi8KKyAgICAgICAgTGlzcF9PYmplY3QgZW50cnkgPSBBUkVGIChjaGFydmVjLCBpKTsK KyAgICAgICAgaWYgKEdMWVBIX0NPREVfUCAoZW50cnkpKQorICAgIGMgPSBHTFlQSF9DT0RFX0NI QVIgKGVudHJ5KTsKKyAgICAgICAgZWxzZQorICAgIGMgPSAnICc7CisgICAgICB9CisgICAgaWYg KGMgPj0gMDQwICYmIGMgPCAwMTc3KQorICAgICAgY29sKys7CisgICAgZWxzZSBpZiAoYyA9PSAn XG4nCisgICAgICAgfHwgKGMgPT0gJ1xyJworICAgICAgICAgICAmJiBFUSAoQlZBUiAoY3VycmVu dF9idWZmZXIsIHNlbGVjdGl2ZV9kaXNwbGF5KSwgUXQpKSkKKyAgICAgIHsKKyAgICAgICAgcHRy Kys7CisgICAgICAgIGdvdG8gc3RhcnRfb2ZfbGluZV9mb3VuZDsKKyAgICAgIH0KKyAgICBlbHNl IGlmIChjID09ICdcdCcpCisgICAgICB7CisgICAgICAgIGlmICh0YWJfc2VlbikKKyAgICBjb2wg PSAoKGNvbCArIHRhYl93aWR0aCkgLyB0YWJfd2lkdGgpICogdGFiX3dpZHRoOworICAgICAgICBw b3N0X3RhYiArPSBjb2w7CisgICAgICAgIGNvbCA9IDA7CisgICAgICAgIHRhYl9zZWVuID0gMTsK KyAgICAgIH0KKyAgICBlbHNlIGlmIChWRUNUT1JQIChjaGFydmVjKSkKKyAgICAgIC8qIFdpdGgg YSBkaXNwbGF5IHRhYmxlIGVudHJ5LCBDIGlzIGRpc3BsYXllZCBhcyBpcywgYW5kCisgICAgICAg ICBub3QgZGlzcGxheWVkIGFzIFxOTk4gb3IgYXMgXk4uICBJZiBDIGlzIGEgc2luZ2xlLWJ5dGUK KyAgICAgICAgIGNoYXJhY3RlciwgaXQgdGFrZXMgb25lIGNvbHVtbi4gIElmIEMgaXMgbXVsdGkt Ynl0ZSBpbgorICAgICAgICAgYSB1bmlieXRlIGJ1ZmZlciwgaXQncyB0cmFuc2xhdGVkIHRvIHVu aWJ5dGUsIHNvIGl0CisgICAgICAgICBhbHNvIHRha2VzIG9uZSBjb2x1bW4uICovCisgICAgICAr K2NvbDsKKyAgICBlbHNlCisgICAgICBjb2wgKz0gKGN0bF9hcnJvdyAmJiBjIDwgMDIwMCkgPyAy IDogNDsKKyAgfQorICAgIH0KKyBzdGFydF9vZl9saW5lX2ZvdW5kOgorICBpZiAodGFiX3NlZW4p CisgICAgeworICAgICAgY29sID0gKChjb2wgKyB0YWJfd2lkdGgpIC8gdGFiX3dpZHRoKSAqIHRh Yl93aWR0aDsKKyAgICAgIGNvbCArPSBwb3N0X3RhYjsKKyAgICB9CisgIGxhc3Rfa25vd25fY29s dW1uID0gY29sOworICBsYXN0X2tub3duX2NvbHVtbl9wb2ludCA9IHB0OworICBsYXN0X2tub3du X2NvbHVtbl9tb2RpZmllZCA9IE1PRElGRjsKKyAgaWYgKG9sZF9idWZmZXIpCisgIHNldF9idWZm ZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOworICByZXR1cm4gY29sOworfQorCitERUZVTiAoIm1j LWN1cnJlbnQtY29sdW1uIiwgRm1jX2N1cnJlbnRfY29sdW1uLCBTbWNfY3VycmVudF9jb2x1bW4s IDIsIDIsIDAsCisgICAgICAgZG9jOiAvKiBSZXR1cm4gdGhlIGhvcml6b250YWwgcG9zaXRpb24g b2YgcG9pbnQuICBCZWdpbm5pbmcgb2YgbGluZSBpcyBjb2x1bW4gMC4KK1RoaXMgaXMgY2FsY3Vs YXRlZCBieSBhZGRpbmcgdG9nZXRoZXIgdGhlIHdpZHRocyBvZiBhbGwgdGhlIGRpc3BsYXllZAor cmVwcmVzZW50YXRpb25zIG9mIHRoZSBjaGFyYWN0ZXIgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhl IHByZXZpb3VzIGxpbmUKK2FuZCBwb2ludCAoZS5nLiwgY29udHJvbCBjaGFyYWN0ZXJzIHdpbGwg aGF2ZSBhIHdpZHRoIG9mIDIgb3IgNCwgdGFicword2lsbCBoYXZlIGEgdmFyaWFibGUgd2lkdGgp LgorSWdub3JlcyBmaW5pdGUgd2lkdGggb2YgZnJhbWUsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyBm dW5jdGlvbiBtYXkgcmV0dXJuCit2YWx1ZXMgZ3JlYXRlciB0aGFuIChmcmFtZS13aWR0aCkuCitX aGV0aGVyIHRoZSBsaW5lIGlzIHZpc2libGUgKGlmIGBzZWxlY3RpdmUtZGlzcGxheScgaXMgdCkg aGFzIG5vIGVmZmVjdDsKK2hvd2V2ZXIsIF5NIGlzIHRyZWF0ZWQgYXMgZW5kIG9mIGxpbmUgd2hl biBgc2VsZWN0aXZlLWRpc3BsYXknIGlzIHQuCitUZXh0IHRoYXQgaGFzIGFuIGludmlzaWJsZSBw cm9wZXJ0eSBpcyBjb25zaWRlcmVkIGFzIGhhdmluZyB3aWR0aCAwLCB1bmxlc3MKK2BidWZmZXIt aW52aXNpYmlsaXR5LXNwZWMnIHNwZWNpZmllcyB0aGF0IGl0IGlzIHJlcGxhY2VkIGJ5IGFuIGVs bGlwc2lzLiAgKi8pCisgIChMaXNwX09iamVjdCB3aW5kb3csIExpc3BfT2JqZWN0IHB0KQorewor ICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93ICh3aW5kb3cpOworICBMaXNw X09iamVjdCB0ZW1wOworICBYU0VURkFTVElOVCAodGVtcCwgbWNfY3VycmVudF9jb2x1bW4gKHcs IFhGSVhOVU0gKHB0KSkpOworICByZXR1cm4gdGVtcDsKK30KKworLyogVVNBR0U6ICBmcHJpbnRm IChzdGRlcnIsICJGUkFNRSAoJXMpIiwgbWNfZnJhbWUgKGYpKTsgKi8KK2NoYXIgKgorbWNfZnJh bWUgKHN0cnVjdCBmcmFtZSAqZikKK3sKKyAgTGlzcF9PYmplY3QgZnJhbWU7CisgIFhTRVRGUkFN RSAoZnJhbWUsIGYpOworICByZXR1cm4gU1NEQVRBIChGcHJpbjFfdG9fc3RyaW5nIChmcmFtZSwg UW5pbCkpOworfQorCisvKiBVU0FHRTogIGZwcmludGYgKHN0ZGVyciwgIldJTkRPVyAoJXMpIiwg bWNfd2luZG93ICh3KSk7ICovCitjaGFyICoKK21jX3dpbmRvdyAoc3RydWN0IHdpbmRvdyAqdykK K3sKKyAgTGlzcF9PYmplY3Qgd2luZG93OworICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICBy ZXR1cm4gU1NEQVRBIChGcHJpbjFfdG9fc3RyaW5nICh3aW5kb3csIFFuaWwpKTsKK30KKworLyog VVNBR0U6ICBmcHJpbnRmIChzdGRlcnIsICJDSEFSQUNURVIgKCVzKSIsIG1jX2NoYXJfdG9fc3Ry aW5nIChnbHlwaC0+dS5jaCkpOyAqLworY2hhciAqCittY19jaGFyX3RvX3N0cmluZyAoaW50IGFy ZykKK3sKKyAgTGlzcF9PYmplY3QgY2hhcmFjdGVyID0gKDAgPD0gYXJnICYmIGFyZyA8PSBNQVhf Q0hBUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gRmNoYXJfdG9fc3RyaW5nIChtYWtl X2ZpeG51bSAoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUW5pbDsKKyAgY2hh ciAqIHJlc3VsdCA9ICghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICYmIGFy ZyA9PSA5KQorICAgICAgICAgICAgICAgICAgICA/ICJcXHQiCisgICAgICAgICAgICAgICAgICA6 ICghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAgJiYgYXJnID09IDEwKQor ICAgICAgICAgICAgICAgICAgICA/ICJcXG4iCisgICAgICAgICAgICAgICAgICA6ICghTklMUCAo Y2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAgJiYgYXJnID09IDMyKQorICAgICAgICAg ICAgICAgICAgICA/ICJcXHMiCisgICAgICAgICAgICAgICAgICA6ICghTklMUCAoY2hhcmFjdGVy KQorICAgICAgICAgICAgICAgICAgICAgJiYgYXJnICE9IDkKKyAgICAgICAgICAgICAgICAgICAg ICYmIGFyZyAhPSAxMAorICAgICAgICAgICAgICAgICAgICAgJiYgYXJnICE9IDMyKQorICAgICAg ICAgICAgICAgICAgICA/IFNTREFUQSAoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgOiAi XFw/IjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50CittY19saXNwX3RvX2N1cnNvcl90eXBl IChMaXNwX09iamVjdCBhcmcpCit7CisgIGNoYXIgKnN0cjsKKyAgaWYgKFhUWVBFIChhcmcpID09 IExpc3BfU3RyaW5nKQorICAgIHN0ciA9IFNTREFUQSAoYXJnKTsKKyAgICBlbHNlIGlmIChYVFlQ RSAoYXJnKSA9PSBMaXNwX1N5bWJvbCkKKyAgICAgIHN0ciA9IFNTREFUQSAoU1lNQk9MX05BTUUg KGFyZykpOworICAgICAgZWxzZSByZXR1cm4gLTE7CisgIGlmICghc3RyY21wIChzdHIsICJubyIp KQorICAgIHJldHVybiBNQ19OT19DVVJTT1I7CisgIGlmICghc3RyY21wIChzdHIsICJtYy1sZWZ0 LWZyaW5nZS1iaXRtYXAiKSkKKyAgICByZXR1cm4gTUNfTEVGVF9GUklOR0VfQklUTUFQOworICBp ZiAoIXN0cmNtcCAoc3RyLCAibWMtcmlnaHQtZnJpbmdlLWJpdG1hcCIpKQorICAgIHJldHVybiBN Q19SSUdIVF9GUklOR0VfQklUTUFQOworICBpZiAoIXN0cmNtcCAoc3RyLCAiYm94IikpCisgICAg cmV0dXJuIE1DX0ZJTExFRF9CT1g7CisgIGlmICghc3RyY21wIChzdHIsICJmcmFtZWQiKSkKKyAg ICByZXR1cm4gTUNfRlJBTUVEX0JPWDsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImhvbGxvdyIpKQor ICAgIHJldHVybiBNQ19IT0xMT1dfQk9YOworICBpZiAoIXN0cmNtcCAoc3RyLCAiYmFyIikpCisg ICAgcmV0dXJuIE1DX0JBUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImhiYXIiKSkKKyAgICByZXR1 cm4gTUNfSEJBUjsKKyAgcmV0dXJuIC0xOworfQorCisvKiBVU0FHRTogIGZwcmludGYgKHN0ZGVy ciwgIkNVUlNPUiBUWVBFICglcykiLCBtY19jdXJzb3JfdHlwZV90b19zdHJpbmcgKGFyZykpOyAq LworY2hhciAqCittY19jdXJzb3JfdHlwZV90b19zdHJpbmcgKGVudW0gdHlwZV9vZl9jdXJzb3Ig Y3Vyc29yX3R5cGUpCit7CisgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCisgICAgeworICAgICAgY2Fz ZSBNQ19GSUxMRURfQk9YOiByZXR1cm4gIk1DX0ZJTExFRF9CT1giOworICAgICAgY2FzZSBNQ19G UkFNRURfQk9YOiByZXR1cm4gIk1DX0ZSQU1FRF9CT1giOworICAgICAgY2FzZSBNQ19IT0xMT1df Qk9YOiByZXR1cm4gIk1DX0hPTExPV19CT1giOworICAgICAgY2FzZSBNQ19CQVI6IHJldHVybiAi TUNfQkFSIjsKKyAgICAgIGNhc2UgTUNfSEJBUjogcmV0dXJuICJNQ19IQkFSIjsKKyAgICAgIGNh c2UgTUNfTEVGVF9GUklOR0VfQklUTUFQOiByZXR1cm4gIk1DX0xFRlRfRlJJTkdFX0JJVE1BUCI7 CisgICAgICBjYXNlIE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVA6IHJldHVybiAiTUNfUklHSFRfRlJJ TkdFX0JJVE1BUCI7CisgICAgICBjYXNlIE1DX05PX0ZSSU5HRV9CSVRNQVA6IHJldHVybiAiTUNf Tk9fRlJJTkdFX0JJVE1BUCI7CisgICAgICBjYXNlIE1DX05PX0NVUlNPUjoKKyAgICAgIGRlZmF1 bHQ6CisgICAgICByZXR1cm4gIk1DX05PX0NVUlNPUiI7CisgICAgfQorfQorCisvKiBVU0FHRTog IGZwcmludGYgKHN0ZGVyciwgIkdMWVBIIEZMQVZPUiAoJXMpIiwgbWNfZmxhdm9yX3RvX3N0cmlu ZyAoYXJnKSk7ICovCitjaGFyICoKK21jX2ZsYXZvcl90b19zdHJpbmcgKGVudW0gbWNfZmxhdm9y IGdseXBoX2ZsYXZvcikKK3sKKyAgc3dpdGNoIChnbHlwaF9mbGF2b3IpCisgICAgeworICAgICAg Y2FzZSBOT19GTEFWT1I6IHJldHVybiAiTk9fRkxBVk9SIjsKKyAgICAgIGNhc2UgTUNfR0xZUEg6 IHJldHVybiAiTUNfR0xZUEgiOworICAgICAgY2FzZSBNQ19HTFlQSExFU1M6IHJldHVybiAiTUNf R0xZUEhMRVNTIjsKKyAgICAgIGNhc2UgTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVA6IHJldHVybiAi TUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAiOworICAgICAgY2FzZSBNQ19QSUxDUk9XOiByZXR1cm4g Ik1DX1BJTENST1ciOworICAgICAgY2FzZSBNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9X OiByZXR1cm4gIk1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1ciOworICAgICAgY2FzZSBN Q19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XOiByZXR1cm4gIk1DX1JFVkVS U0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1ciOworICAgICAgY2FzZSBNQ19IT0xMT1df UkVDVEFOR0xFOiByZXR1cm4gIk1DX0hPTExPV19SRUNUQU5HTEUiOworICAgICAgY2FzZSBNQ19W RVJUSUNBTF9CQVJfUklHSFRfQVJST1c6IHJldHVybiAiTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FS Uk9XIjsKKyAgICAgIGNhc2UgTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XOiBy ZXR1cm4gIk1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVyI7CisgICAgICBjYXNl IE1DX1ZFUlRJQ0FMX0JBUjogcmV0dXJuICJNQ19WRVJUSUNBTF9CQVIiOworICAgICAgY2FzZSBN Q19SRVZFUlNFRF9WRVJUSUNBTF9CQVI6IHJldHVybiAiTUNfUkVWRVJTRURfVkVSVElDQUxfQkFS IjsKKyAgICAgIGNhc2UgTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSDogcmV0dXJuICJNQ19WRVJU SUNBTF9CQVJfQkFDS1NMQVNIIjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gIlVOS05P V04iOworICAgIH0KK30KKworLyogVVNBR0U6ICBmcHJpbnRmIChzdGRlcnIsICJDQUNIRSBUWVBF ICglcykiLCBtY19jYWNoZV90eXBlX3RvX3N0cmluZyAoYXJnKSk7ICovCitjaGFyICoKK21jX2Nh Y2hlX3R5cGVfdG9fc3RyaW5nIChlbnVtIHR5cGVfb2ZfY2FjaGUgY2FjaGVfdHlwZSkKK3sKKyAg c3dpdGNoIChjYWNoZV90eXBlKQorICAgIHsKKyAgICAgIGNhc2UgTk9fQ0FDSEU6IHJldHVybiAi Tk9fQ0FDSEUiOworICAgICAgY2FzZSBNQ19DQUNIRTogcmV0dXJuICJNQ19DQUNIRSI7CisgICAg ICBjYXNlIENIX0NBQ0hFOiByZXR1cm4gIkNIX0NBQ0hFIjsKKyAgICAgIGNhc2UgRkNfQ0FDSEU6 IHJldHVybiAiRkNfQ0FDSEUiOworICAgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAiVU5LTk9X TiI7CisgICAgfQorfQorCit2b2lkCittY19zZXRfbHNsX2JnIChzdHJ1Y3Qgd2luZG93ICp3LCBl bnVtIGZhY2VfaWQgZmFjZV9pZCwgc3RydWN0IG1jX1JHQiAqbHNsKQoreworICBzdHJ1Y3QgZnJh bWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGZhY2UgKmZhY2U7CisgIGlmICgh TklMUCAoVmZhY2VfcmVtYXBwaW5nX2FsaXN0KQorICAgICAgJiYgKGZhY2VfaWQgPT0gREVGQVVM VF9GQUNFX0lEIC8qIFFkZWZhdWx0ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJ TkVfRkFDRV9JRCAvKiBRbW9kZV9saW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RF X0xJTkVfSU5BQ1RJVkVfRkFDRV9JRCAvKiBRbW9kZV9saW5lX2luYWN0aXZlICovCisgICAgICAg ICAgfHwgZmFjZV9pZCA9PSBIRUFERVJfTElORV9GQUNFX0lEIC8qIFFoZWFkZXJfbGluZSAqLwor ICAgICAgICAgIHx8IGZhY2VfaWQgPT0gVE9PTF9CQVJfRkFDRV9JRCAvKiBRdG9vbF9iYXIgKi8K KyAgICAgICAgICB8fCBmYWNlX2lkID09IEZSSU5HRV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAg ICAgICAgICB8fCBmYWNlX2lkID09IFNDUk9MTF9CQVJfRkFDRV9JRCAvKiBRc2Nyb2xsX2JhciAq LworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gQk9SREVSX0ZBQ0VfSUQgLyogUWJvcmRlciAqLwor ICAgICAgICAgIHx8IGZhY2VfaWQgPT0gQ1VSU09SX0ZBQ0VfSUQgLyogUWN1cnNvciAqLworICAg ICAgICAgIHx8IGZhY2VfaWQgPT0gTU9VU0VfRkFDRV9JRCAvKiBRbW91c2UgKi8KKyAgICAgICAg ICB8fCBmYWNlX2lkID09IE1FTlVfRkFDRV9JRCAvKiBRbWVudSAqLworICAgICAgICAgIHx8IGZh Y2VfaWQgPT0gV0lORE9XX0RJVklERVJfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXIgKi8KKyAg ICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0ZJUlNUX1BJWEVMX0ZBQ0VfSUQg LyogUXdpbmRvd19kaXZpZGVyX2ZpcnN0X3BpeGVsICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9 PSBXSU5ET1dfRElWSURFUl9MQVNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2xh c3RfcGl4ZWwgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNF X0lEIC8qIFF2ZXJ0aWNhbF9ib3JkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IElOVEVS TkFMX0JPUkRFUl9GQUNFX0lEKSkgLyogUWludGVybmFsX2JvcmRlciAqLworICAgIGZhY2UgPSBG QUNFX0ZST01fSUQgKGYsIGxvb2t1cF9iYXNpY19mYWNlICh3LCBmLCBmYWNlX2lkKSk7CisgICAg ZWxzZQorICAgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CisgIExpc3BfT2Jq ZWN0IGNvbG9yID0gKGZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICA/IGZhY2Ut PmxmYWNlW0xGQUNFX0JBQ0tHUk9VTkRfSU5ERVhdCisgICAgICAgICAgICAgICAgICAgICAgOiBi dWlsZF9zdHJpbmcgKCJPcmFuZ2VSZWQiKTsKKyAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBjb2xv ciwgbHNsKTsKK30KKworLyogRHJhdyBnbHlwaHMgYmV0d2VlbiBTVEFSVCBhbmQgRU5EIGluIEFS RUEgb2YgUk9XIG9uIHdpbmRvdyBXLAorICAgc3RhcnRpbmcgYXQgeC1wb3NpdGlvbiBYLiAgWCBp cyByZWxhdGl2ZSB0byBBUkVBIGluIFcuICBITCBpcyBhCisgICBmYWNlLW92ZXJyaWRlIHdpdGgg dGhlIGZvbGxvd2luZyBtZWFuaW5nOgorICAgLSAgRFJBV19OT1JNQUxfVEVYVCAgZHJhdyBub3Jt YWxseQorICAgLSAgRFJBV19DVVJTT1IgICAgZHJhdyBpbiBjdXJzb3IgZmFjZQorICAgLSAgRFJB V19NT1VTRV9GQUNFICBkcmF3IGluIG1vdXNlIGZhY2UuCisgICAtICBEUkFXX0lOVkVSU0VfVklE RU8gIGRyYXcgaW4gbW9kZSBsaW5lIGZhY2UKKyAgIC0gIERSQVdfSU1BR0VfU1VOS0VOICBkcmF3 IGFuIGltYWdlIHdpdGggYSBzdW5rZW4gcmVsaWVmIGFyb3VuZCBpdAorICAgLSAgRFJBV19JTUFH RV9SQUlTRUQgIGRyYXcgYW4gaW1hZ2Ugd2l0aCBhIHJhaXNlZCByZWxpZWYgYXJvdW5kIGl0Cisg ICBJZiBPVkVSTEFQUyBpcyBub24temVybywgZHJhdyBvbmx5IHRoZSBmb3JlZ3JvdW5kIG9mIGNo YXJhY3RlcnMgYW5kCisgICBjbGlwIHRvIHRoZSBwaHlzaWNhbCBoZWlnaHQgb2YgUk9XLiAgTm9u LXplcm8gdmFsdWUgYWxzbyBkZWZpbmVzCisgICB0aGUgb3ZlcmxhcHBpbmcgcGFydCB0byBiZSBk cmF3bjoKKyAgIC0gIE9WRVJMQVBTX1BSRUQgICAgb3ZlcmxhcCB3aXRoIHByZWNlZGluZyByb3dz CisgICAtICBPVkVSTEFQU19TVUNDICAgIG92ZXJsYXAgd2l0aCBzdWNjZWVkaW5nIHJvd3MKKyAg IC0gIE9WRVJMQVBTX0JPVEggICAgb3ZlcmxhcCB3aXRoIGJvdGggcHJlY2VkaW5nL3N1Y2NlZWRp bmcgcm93cworICAgLSAgT1ZFUkxBUFNfRVJBU0VEX0NVUlNPUiAgb3ZlcmxhcCB3aXRoIGVyYXNl ZCBjdXJzb3IgYXJlYQorICAgVmFsdWUgaXMgdGhlIHgtcG9zaXRpb24gcmVhY2hlZCwgcmVsYXRp dmUgdG8gQVJFQSBvZiBXLiAqLworc3RhdGljIGludAorbWNfZHJhd19nbHlwaHMgKHN0cnVjdCB3 aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAq cm93LAorICAgICAgICAgICAgICAgIGludCB4LCBlbnVtIGdseXBoX3Jvd19hcmVhIGFyZWEsIHB0 cmRpZmZfdCBzdGFydCwgcHRyZGlmZl90IGVuZCwKKyAgICAgICAgICAgICAgICBlbnVtIGRyYXdf Z2x5cGhzX2ZhY2UgaGwsIGludCBvdmVybGFwcywgaW50IHZwb3MsIGludCBib3R0b21fdnBvcywK KyAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbCwgZW51bSBtY19mbGF2b3IgZ2x5cGhf Zmxhdm9yLAorICAgICAgICAgICAgICAgIGVudW0gdHlwZV9vZl9jdXJzb3IgY3Vyc29yX3R5cGUs IGludCB3ZCwgYm9vbCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICBib29sIGN1cnNvcl9nY19w LCBlbnVtIGRyYXdfZ2x5cGhfYWN0aW9uIGFjdGlvbl90eXBlKQoreworICBpbnQgc3RhcnRfeCA9 IHg7CisgIGludCByZWxhdGl2ZV94ID0gMDsKKyAgaW50IGxlbmd0aCA9IDA7CisgIC8vICBpbnQg c3RhcnRfaHBvcyA9IHN0YXJ0OworICAvLyAgaW50IGVuZF9ocG9zID0gZW5kOworICAvLyAgVFJB Q0UgKChzdGRlcnIsICJtY19kcmF3X2dseXBocyAoJWQpOiAgc3RhcnRfeCAoJWQpIHwgc3RhcnRf aHBvcyAoJWQpIHwgZW5kX2hwb3MgKCVkKVxuIiwKKyAgLy8gICAgICAgICAgICAgICAgICB2cG9z LCBzdGFydF94LCBzdGFydF9ocG9zLCBlbmRfaHBvcykpOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBY RlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpoZWFkLCAq dGFpbDsKKyAgc3RydWN0IGdseXBoX3N0cmluZyAqczsKKyAgc3RydWN0IGdseXBoX3N0cmluZyAq Y2xpcF9oZWFkID0gTlVMTCwgKmNsaXBfdGFpbCA9IE5VTEw7CisgIGludCBpLCBqLCB4X3JlYWNo ZWQsIGxhc3RfeCwgYXJlYV9sZWZ0ID0gMDsKKyAgTUNfREVDTEFSRV9IREMgKGhkYyk7CisgIE1D X0FMTE9DQVRFX0hEQyAoaGRjLCBmKTsKKyAgLyogTGV0J3MgcmF0aGVyIGJlIHBhcmFub2lkIHRo YW4gZ2V0dGluZyBhIFNFR1YuICovCisgIGVuZCA9IG1pbiAoZW5kLCByb3ctPnVzZWRbYXJlYV0p OworICBzdGFydCA9IGNsaXBfdG9fYm91bmRzICgwLCBzdGFydCwgZW5kKTsKKyAgLyogVHJhbnNs YXRlIFggdG8gZnJhbWUgY29vcmRpbmF0ZXMuICBTZXQgbGFzdF94IHRvIHRoZSByaWdodAorICAg ICBlbmQgb2YgdGhlIGRyYXdpbmcgYXJlYS4gKi8KKyAgaWYgKHJvdy0+ZnVsbF93aWR0aF9wKQor ICAgIHsKKyAgICAgIC8qIFggaXMgcmVsYXRpdmUgdG8gdGhlIGxlZnQgZWRnZSBvZiBXLCB3aXRo b3V0IHNjcm9sbCBiYXJzCisgICBvciBmcmluZ2VzLiAqLworICAgICAgYXJlYV9sZWZ0ID0gV0lO RE9XX0xFRlRfRURHRV9YICh3KTsKKyAgICAgIGxhc3RfeCA9IChXSU5ET1dfTEVGVF9FREdFX1gg KHcpICsgV0lORE9XX1BJWEVMX1dJRFRIICh3KQorICAgIC0gKHJvdy0+bW9kZV9saW5lX3AgPyBX SU5ET1dfUklHSFRfRElWSURFUl9XSURUSCAodykgOiAwKSk7CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgYXJlYV9sZWZ0ID0gd2luZG93X2JveF9sZWZ0ICh3LCBhcmVhKTsKKyAgICAgIGxh c3RfeCA9IGFyZWFfbGVmdCArIHdpbmRvd19ib3hfd2lkdGggKHcsIGFyZWEpOworICAgIH0KKyAg eCArPSBhcmVhX2xlZnQ7CisgIC8qIEJ1aWxkIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGdseXBo X3N0cmluZyBzdHJ1Y3R1cmVzIGJldHdlZW4KKyAgICAgaGVhZCBhbmQgdGFpbCBmcm9tIHdoYXQg d2UgaGF2ZSB0byBkcmF3LiAgTm90ZSB0aGF0IHRoZSBtYWNybworICAgICBNQ19CVUlMRF9HTFlQ SF9TVFJJTkdTIHdpbGwgbW9kaWZ5IGl0cyBzdGFydCBwYXJhbWV0ZXIuICBUaGF0J3MKKyAgICAg dGhlIHJlYXNvbiB3ZSB1c2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSBgaScuICovCisgIGkgPSBzdGFy dDsKKyAgVVNFX1NBRkVfQUxMT0NBOworICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTIChpLCBlbmQs IGhlYWQsIHRhaWwsIGhsLCB4LCBsYXN0X3gpOworICBpZiAodGFpbCkKKyAgICB7CisgICAgICBz ID0gZ2x5cGhfc3RyaW5nX2NvbnRhaW5pbmdfYmFja2dyb3VuZF93aWR0aCAodGFpbCk7CisgICAg ICB4X3JlYWNoZWQgPSBzLT54ICsgcy0+YmFja2dyb3VuZF93aWR0aDsKKyAgICB9CisgIGVsc2UK KyAgICB4X3JlYWNoZWQgPSB4OworICAvKiBJZiB0aGVyZSBhcmUgYW55IGdseXBocyB3aXRoIGxi ZWFyaW5nIDwgMCBvciByYmVhcmluZyA+IHdpZHRoIGluCisgICAgIHRoZSByb3csIHJlZHJhdyBz b21lIGdseXBocyBpbiBmcm9udCBvciBmb2xsb3dpbmcgdGhlIGdseXBoCisgICAgIHN0cmluZ3Mg YnVpbHQgYWJvdmUuICovCisgIGlmIChoZWFkICYmICFvdmVybGFwcyAmJiByb3ctPmNvbnRhaW5z X292ZXJsYXBwaW5nX2dseXBoc19wKQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcg KmgsICp0OworICAgICAgTW91c2VfSExJbmZvICpobGluZm8gPSBNT1VTRV9ITF9JTkZPIChmKTsK KyAgICAgIGludCBtb3VzZV9iZWdfY29sIFVOSU5JVCwgbW91c2VfZW5kX2NvbCBVTklOSVQ7Cisg ICAgICBib29sIGNoZWNrX21vdXNlX2ZhY2UgPSBmYWxzZTsKKyAgICAgIGludCBkdW1teV94ID0g MDsKKyAgICAgIC8qIElmIG1vdXNlIGhpZ2hsaWdodGluZyBpcyBvbiwgd2UgbWF5IG5lZWQgdG8g ZHJhdyBhZGphY2VudAorICAgZ2x5cGhzIHVzaW5nIG1vdXNlLWZhY2UgaGlnaGxpZ2h0aW5nLiAq LworICAgICAgaWYgKGFyZWEgPT0gVEVYVF9BUkVBICYmIHJvdy0+bW91c2VfZmFjZV9wCisgICAg JiYgaGxpbmZvLT5tb3VzZV9mYWNlX2JlZ19yb3cgPj0gMAorICAgICYmIGhsaW5mby0+bW91c2Vf ZmFjZV9lbmRfcm93ID49IDApCisgIHsKKyAgICBwdHJkaWZmX3Qgcm93X3Zwb3MgPSBNQVRSSVhf Uk9XX1ZQT1MgKHJvdywgdy0+Y3VycmVudF9tYXRyaXgpOworICAgIGlmIChyb3dfdnBvcyA+PSBo bGluZm8tPm1vdXNlX2ZhY2VfYmVnX3JvdworICAgICAgICAmJiByb3dfdnBvcyA8PSBobGluZm8t Pm1vdXNlX2ZhY2VfZW5kX3JvdykKKyAgICAgIHsKKyAgICAgICAgY2hlY2tfbW91c2VfZmFjZSA9 IHRydWU7CisgICAgICAgIG1vdXNlX2JlZ19jb2wgPSAocm93X3Zwb3MgPT0gaGxpbmZvLT5tb3Vz ZV9mYWNlX2JlZ19yb3cpCisgICAgPyBobGluZm8tPm1vdXNlX2ZhY2VfYmVnX2NvbCA6IDA7Cisg ICAgICAgIG1vdXNlX2VuZF9jb2wgPSAocm93X3Zwb3MgPT0gaGxpbmZvLT5tb3VzZV9mYWNlX2Vu ZF9yb3cpCisgICAgPyBobGluZm8tPm1vdXNlX2ZhY2VfZW5kX2NvbAorICAgIDogcm93LT51c2Vk W1RFWFRfQVJFQV07CisgICAgICB9CisgIH0KKyAgICAgIC8qIENvbXB1dGUgb3ZlcmhhbmdzIGZv ciBhbGwgZ2x5cGggc3RyaW5ncy4gKi8KKyAgICAgIGlmIChGUkFNRV9SSUYgKGYpLT5jb21wdXRl X2dseXBoX3N0cmluZ19vdmVyaGFuZ3MpCisgIGZvciAocyA9IGhlYWQ7IHM7IHMgPSBzLT5uZXh0 KQorICAgIEZSQU1FX1JJRiAoZiktPmNvbXB1dGVfZ2x5cGhfc3RyaW5nX292ZXJoYW5ncyAocyk7 CisgICAgICAvKiBQcmVwZW5kIGdseXBoIHN0cmluZ3MgZm9yIGdseXBocyBpbiBmcm9udCBvZiB0 aGUgZmlyc3QgZ2x5cGgKKyAgIHN0cmluZyB0aGF0IGFyZSBvdmVyd3JpdHRlbiBiZWNhdXNlIG9m IHRoZSBmaXJzdCBnbHlwaAorICAgc3RyaW5nJ3MgbGVmdCBvdmVyaGFuZy4gIFRoZSBiYWNrZ3Jv dW5kIG9mIGFsbCBzdHJpbmdzCisgICBwcmVwZW5kZWQgbXVzdCBiZSBkcmF3biBiZWNhdXNlIHRo ZSBmaXJzdCBnbHlwaCBzdHJpbmcKKyAgIGRyYXdzIG92ZXIgaXQuICovCisgICAgICBpID0gbGVm dF9vdmVyd3JpdHRlbiAoaGVhZCk7CisgICAgICBpZiAoaSA+PSAwKQorICB7CisgICAgZW51bSBk cmF3X2dseXBoc19mYWNlIG92ZXJsYXBfaGw7CisgICAgLyogSWYgdGhpcyByb3cgY29udGFpbnMg bW91c2UgaGlnaGxpZ2h0aW5nLCBhdHRlbXB0IHRvIGRyYXcKKyAgICAgICB0aGUgb3ZlcmxhcHBl ZCBnbHlwaHMgd2l0aCB0aGUgY29ycmVjdCBoaWdobGlnaHQuICBUaGlzCisgICAgICAgY29kZSBm YWlscyBpZiB0aGUgb3ZlcmxhcCBlbmNvbXBhc3NlcyBtb3JlIHRoYW4gb25lIGdseXBoCisgICAg ICAgYW5kIG1vdXNlLWhpZ2hsaWdodCBzcGFucyBvbmx5IHNvbWUgb2YgdGhlc2UgZ2x5cGhzLgor ICAgICAgIEhvd2V2ZXIsIG1ha2luZyBpdCB3b3JrIHBlcmZlY3RseSBpbnZvbHZlcyBhIGxvdCBt b3JlCisgICAgICAgY29kZSwgYW5kIEkgZG9uJ3Qga25vdyBpZiB0aGUgcGF0aG9sb2dpY2FsIGNh c2Ugb2NjdXJzIGluCisgICAgICAgcHJhY3RpY2UsIHNvIHdlJ2xsIHN0aWNrIHRvIHRoaXMgZm9y IG5vdy4gIC0tLSBjeWQgICovCisgICAgaWYgKGNoZWNrX21vdXNlX2ZhY2UKKyAgICAgICAgJiYg bW91c2VfYmVnX2NvbCA8IHN0YXJ0ICYmIG1vdXNlX2VuZF9jb2wgPiBpKQorICAgICAgb3Zlcmxh cF9obCA9IERSQVdfTU9VU0VfRkFDRTsKKyAgICBlbHNlCisgICAgICBvdmVybGFwX2hsID0gRFJB V19OT1JNQUxfVEVYVDsKKyAgICBpZiAoaGwgIT0gb3ZlcmxhcF9obCkKKyAgICAgIGNsaXBfaGVh ZCA9IGhlYWQ7CisgICAgaiA9IGk7CisgICAgTUNfQlVJTERfR0xZUEhfU1RSSU5HUyAoaiwgc3Rh cnQsIGgsIHQsCisgICAgICAgICAgICAgb3ZlcmxhcF9obCwgZHVtbXlfeCwgbGFzdF94KTsKKyAg LyogVGhlIGBsZWZ0X292ZXJ3cml0dGVuYCBiZWhhdmlvciB0aGF0IGVyYXNlcyB0aGUgZmFrZSBj dXJzb3JzIHRyYWNlcyB0bworICBgZm9udC0+ZHJpdmVyLT5kcmF3YCBpbiBgbnNfZHJhd19nbHlw aF9zdHJpbmcnOyBhbmQsIHRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZQorICBkcmF3biBieSBg bnNfZHVtcGdseXBoc19zdHJldGNoJzsgYW5kLCBgbnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3Jv dW5kJyB3aGljaAorICBlcmFzZXMgdGhlIGFwcGxpY2FibGUgcmVjdGFuZ2xlLiAqLworICAvKiBF WEFNUExFOiAgCU0KKyAgSW4gdGhpcyBleGFtcGxlLCB3ZSBoYXZlIGEgdmlzaWJsZSAxODcgKMK7 KSB0aGF0IGlzIGZvbGxvd2VkIGJ5IGEgdmlzaWJsZQorICBUQUJfU1RSRVRDSCAoYXMgYSByZXN1 bHQgb2YgYSBjb3JyZXNwb25kaW5nIGBidWZmZXItZGlzcGxheS10YWJsZScgZW50cnkpLAorICBm b2xsb3dlZCBieSB3aWRlICJNIiwgZm9sbG93ZWQgYnkgYSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRo ZSBnbHlwaCByb3cKKyAgKHdoaWNoIGhhcyBubyBidWZmZXIgcG9zaXRpb24pLiAgV2hlbiBwbGFj aW5nIGEgZmFrZSBjdXJzb3Igb24gdGhlICJNIiwKKyAgaGwgPT0gRFJBV19DVVJTT1IgYW5kIHRo ZSBTVFJFVENIX0dMWVBIIGlzIGBsZWZ0X292ZXJ3cml0dGVuYC4gIERyYXdpbmcKKyAgbm9ybWFs IHRleHQgZHVyaW5nIGB1cGRhdGVfd2luZG93JyAoRFJBV19OT1JNQUxfVEVYVCkgY2FuIGFsc28g ZXJhc2UgZmFrZQorICBjdXJzb3JzIHRoYXQgYXJlIGBsZWZ0X292ZXJ3cml0dGVuJy4gKi8KKyAg bGVuZ3RoID0gMDsKKyAgZm9yIChzID0gaDsgczsgcyA9IHMtPm5leHQpCisgICAgeworICAgICAg cy0+bGVmdF9vdmVyd3JpdHRlbl9wID0gdHJ1ZTsKKyAgICAgIHMtPmFjdGlvbl90eXBlID0gYWN0 aW9uX3R5cGU7CisgICAgICBsZW5ndGggKz0gcy0+Zmlyc3RfZ2x5cGgtPnBpeGVsX3dpZHRoOwor ICAgIH0KKyAgcmVsYXRpdmVfeCA9IHN0YXJ0X3ggLSBsZW5ndGg7CisgIGZvciAocyA9IGg7IHM7 IHMgPSBzLT5uZXh0KQorICAgIHsKKyAgICAgIHMtPmZpcnN0X2dseXBoLT5yZWxhdGl2ZV94ID0g cmVsYXRpdmVfeDsKKyAgICAgIHJlbGF0aXZlX3ggKz0gcy0+Zmlyc3RfZ2x5cGgtPnBpeGVsX3dp ZHRoOworICAgIH0KKyAgICBzdGFydCA9IGk7CisgICAgY29tcHV0ZV9vdmVyaGFuZ3NfYW5kX3gg KHQsIGhlYWQtPngsIHRydWUpOworICAgIHByZXBlbmRfZ2x5cGhfc3RyaW5nX2xpc3RzICgmaGVh ZCwgJnRhaWwsIGgsIHQpOworICAgIGlmIChjbGlwX2hlYWQgPT0gTlVMTCkKKyAgICAgIGNsaXBf aGVhZCA9IGhlYWQ7CisgIH0KKyAgICAgIC8qIFByZXBlbmQgZ2x5cGggc3RyaW5ncyBmb3IgZ2x5 cGhzIGluIGZyb250IG9mIHRoZSBmaXJzdCBnbHlwaAorICAgc3RyaW5nIHRoYXQgb3ZlcndyaXRl IHRoYXQgZ2x5cGggc3RyaW5nIGJlY2F1c2Ugb2YgdGhlaXIKKyAgIHJpZ2h0IG92ZXJoYW5nLiAg Rm9yIHRoZXNlIHN0cmluZ3MsIG9ubHkgdGhlIGZvcmVncm91bmQgbXVzdAorICAgYmUgZHJhd24s IGJlY2F1c2UgaXQgZHJhd3Mgb3ZlciB0aGUgZ2x5cGggc3RyaW5nIGF0IGBoZWFkJy4KKyAgIFRo ZSBiYWNrZ3JvdW5kIG11c3Qgbm90IGJlIGRyYXduIGJlY2F1c2UgdGhpcyB3b3VsZCBvdmVyd3Jp dGUKKyAgIHJpZ2h0IG92ZXJoYW5ncyBvZiBwcmVjZWRpbmcgZ2x5cGhzIGZvciB3aGljaCBubyBn bHlwaAorICAgc3RyaW5ncyBleGlzdC4gKi8KKyAgICAgIGkgPSBsZWZ0X292ZXJ3cml0aW5nICho ZWFkKTsKKyAgICAgIGlmIChpID49IDApCisgIHsKKyAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2Ug b3ZlcmxhcF9obDsKKyAgICBpZiAoY2hlY2tfbW91c2VfZmFjZQorICAgICAgICAmJiBtb3VzZV9i ZWdfY29sIDwgc3RhcnQgJiYgbW91c2VfZW5kX2NvbCA+IGkpCisgICAgICBvdmVybGFwX2hsID0g RFJBV19NT1VTRV9GQUNFOworICAgIGVsc2UKKyAgICAgIG92ZXJsYXBfaGwgPSBEUkFXX05PUk1B TF9URVhUOworICAgIGlmIChobCA9PSBvdmVybGFwX2hsIHx8IGNsaXBfaGVhZCA9PSBOVUxMKQor ICAgICAgY2xpcF9oZWFkID0gaGVhZDsKKyAgICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTIChpLCBz dGFydCwgaCwgdCwKKyAgICAgICAgICAgICBvdmVybGFwX2hsLCBkdW1teV94LCBsYXN0X3gpOwor ICAgIGZvciAocyA9IGg7IHM7IHMgPSBzLT5uZXh0KQorICAgICAgcy0+YmFja2dyb3VuZF9maWxs ZWRfcCA9IHRydWU7CisgICAgY29tcHV0ZV9vdmVyaGFuZ3NfYW5kX3ggKHQsIGhlYWQtPngsIHRy dWUpOworICAgIHByZXBlbmRfZ2x5cGhfc3RyaW5nX2xpc3RzICgmaGVhZCwgJnRhaWwsIGgsIHQp OworICB9CisgICAgICAvKiBBcHBlbmQgZ2x5cGhzIHN0cmluZ3MgZm9yIGdseXBocyBmb2xsb3dp bmcgdGhlIGxhc3QgZ2x5cGgKKyAgIHN0cmluZyB0YWlsIHRoYXQgYXJlIG92ZXJ3cml0dGVuIGJ5 IHRhaWwuICBUaGUgYmFja2dyb3VuZCBvZgorICAgdGhlc2Ugc3RyaW5ncyBoYXMgdG8gYmUgZHJh d24gYmVjYXVzZSB0YWlsJ3MgZm9yZWdyb3VuZCBkcmF3cworICAgb3ZlciBpdC4gKi8KKyAgICAg IGkgPSByaWdodF9vdmVyd3JpdHRlbiAodGFpbCk7CisgICAgICBpZiAoaSA+PSAwKQorICB7Cisg ICAgZW51bSBkcmF3X2dseXBoc19mYWNlIG92ZXJsYXBfaGw7CisgICAgaWYgKGNoZWNrX21vdXNl X2ZhY2UKKyAgICAgICAgJiYgbW91c2VfYmVnX2NvbCA8IGkgJiYgbW91c2VfZW5kX2NvbCA+IGVu ZCkKKyAgICAgIG92ZXJsYXBfaGwgPSBEUkFXX01PVVNFX0ZBQ0U7CisgICAgZWxzZQorICAgICAg b3ZlcmxhcF9obCA9IERSQVdfTk9STUFMX1RFWFQ7CisgICAgaWYgKGhsICE9IG92ZXJsYXBfaGwp CisgICAgICBjbGlwX3RhaWwgPSB0YWlsOworICAgIE1DX0JVSUxEX0dMWVBIX1NUUklOR1MgKGVu ZCwgaSwgaCwgdCwKKyAgICAgICAgICAgICBvdmVybGFwX2hsLCB4LCBsYXN0X3gpOworICAvKiBU aGUgYHJpZ2h0X292ZXJ3cml0dGVuYCBiZWhhdmlvciB0aGF0IGVyYXNlcyB0aGUgZmFrZSBjdXJz b3JzIHRyYWNlcyB0bworICBgZm9udC0+ZHJpdmVyLT5kcmF3YCBpbiBgbnNfZHJhd19nbHlwaF9z dHJpbmcnOyBhbmQsIHRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZQorICBkcmF3biBieSBgbnNf ZHVtcGdseXBoc19zdHJldGNoJzsgYW5kLCBgbnNfbWF5YmVfZHVtcGdseXBoc19iYWNrZ3JvdW5k JyB3aGljaAorICBlcmFzZXMgdGhlIGFwcGxpY2FibGUgcmVjdGFuZ2xlLiAqLworICAvKiBFWEFN UExFOiAgIkVtYWNzIEd1aWRlZCBUb3VyCU92ZXJ2aWV3Ii4KKyAgIHJpZ2h0X292ZXJ3cml0dGVu IChHTlUgRW1hY3Mgd2VsY29tZSBzY3JlZW4gd2l0aG91dCBgYnVmZmVyLWRpc3BsYXktdGFibGUn KQorICAgYW5kIHRoZSByZWFsIGZha2UgY3Vyc29yIGlzIHRvIHRoZSBpbW1lZGlhdGUgcmlnaHQg b2YgdGhlIHdvcmQgIlRvdXIiOiAqLworICByZWxhdGl2ZV94ID0gc3RhcnRfeDsKKyAgZm9yIChz ID0gaDsgczsgcyA9IHMtPm5leHQpCisgICAgeworICAgICAgcy0+cmlnaHRfb3ZlcndyaXR0ZW5f cCA9IHRydWU7CisgICAgICBzLT5hY3Rpb25fdHlwZSA9IGFjdGlvbl90eXBlOworICAgICAgcmVs YXRpdmVfeCArPSBzLT5maXJzdF9nbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICBzLT5maXJzdF9n bHlwaC0+cmVsYXRpdmVfeCA9IHJlbGF0aXZlX3g7CisgICAgfQorICAgIC8qIEJlY2F1c2UgTUNf QlVJTERfR0xZUEhfU1RSSU5HUyB1cGRhdGVzIHRoZSBmaXJzdCBhcmd1bWVudCwKKyAgICAgICB3 ZSBkb24ndCBoYXZlIGBlbmQgPSBpOycgaGVyZS4gKi8KKyAgICBjb21wdXRlX292ZXJoYW5nc19h bmRfeCAoaCwgdGFpbC0+eCArIHRhaWwtPndpZHRoLCBmYWxzZSk7CisgICAgYXBwZW5kX2dseXBo X3N0cmluZ19saXN0cyAoJmhlYWQsICZ0YWlsLCBoLCB0KTsKKyAgICBpZiAoY2xpcF90YWlsID09 IE5VTEwpCisgICAgICBjbGlwX3RhaWwgPSB0YWlsOworICB9CisgICAgICAvKiBBcHBlbmQgZ2x5 cGggc3RyaW5ncyBmb3IgZ2x5cGhzIGZvbGxvd2luZyB0aGUgbGFzdCBnbHlwaAorICAgc3RyaW5n IHRhaWwgdGhhdCBvdmVyd3JpdGUgdGFpbC4gIFRoZSBmb3JlZ3JvdW5kIG9mIHN1Y2gKKyAgIGds eXBocyBoYXMgdG8gYmUgZHJhd24gYmVjYXVzZSBpdCB3cml0ZXMgaW50byB0aGUgYmFja2dyb3Vu ZAorICAgb2YgdGFpbC4gIFRoZSBiYWNrZ3JvdW5kIG11c3Qgbm90IGJlIGRyYXduIGJlY2F1c2Ug aXQgY291bGQKKyAgIHBhaW50IG92ZXIgdGhlIGZvcmVncm91bmQgb2YgZm9sbG93aW5nIGdseXBo cy4gKi8KKyAgICAgIGkgPSByaWdodF9vdmVyd3JpdGluZyAodGFpbCk7CisgICAgICBpZiAoaSA+ PSAwKQorICB7CisgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIG92ZXJsYXBfaGw7CisgICAgaWYg KGNoZWNrX21vdXNlX2ZhY2UKKyAgICAgICAgJiYgbW91c2VfYmVnX2NvbCA8IGkgJiYgbW91c2Vf ZW5kX2NvbCA+IGVuZCkKKyAgICAgIG92ZXJsYXBfaGwgPSBEUkFXX01PVVNFX0ZBQ0U7CisgICAg ZWxzZQorICAgICAgb3ZlcmxhcF9obCA9IERSQVdfTk9STUFMX1RFWFQ7CisgICAgaWYgKGhsID09 IG92ZXJsYXBfaGwgfHwgY2xpcF90YWlsID09IE5VTEwpCisgICAgICBjbGlwX3RhaWwgPSB0YWls OworICAgIGkrKzsgICAgICAvKiBXZSBtdXN0IGluY2x1ZGUgdGhlIEl0aCBnbHlwaC4gKi8KKyAg ICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTIChlbmQsIGksIGgsIHQsCisgICAgICAgICAgICAgb3Zl cmxhcF9obCwgeCwgbGFzdF94KTsKKyAgICBmb3IgKHMgPSBoOyBzOyBzID0gcy0+bmV4dCkKKyAg ICAgIHMtPmJhY2tncm91bmRfZmlsbGVkX3AgPSB0cnVlOworICAgIGNvbXB1dGVfb3Zlcmhhbmdz X2FuZF94IChoLCB0YWlsLT54ICsgdGFpbC0+d2lkdGgsIGZhbHNlKTsKKyAgICBhcHBlbmRfZ2x5 cGhfc3RyaW5nX2xpc3RzICgmaGVhZCwgJnRhaWwsIGgsIHQpOworICB9CisgICAgICB0YWlsID0g Z2x5cGhfc3RyaW5nX2NvbnRhaW5pbmdfYmFja2dyb3VuZF93aWR0aCAodGFpbCk7CisgICAgICBp ZiAoY2xpcF90YWlsKQorICBjbGlwX3RhaWwgPSBnbHlwaF9zdHJpbmdfY29udGFpbmluZ19iYWNr Z3JvdW5kX3dpZHRoIChjbGlwX3RhaWwpOworICAgICAgaWYgKGNsaXBfaGVhZCB8fCBjbGlwX3Rh aWwpCisgIGZvciAocyA9IGhlYWQ7IHM7IHMgPSBzLT5uZXh0KQorICAgIHsKKyAgICAgIHMtPmNs aXBfaGVhZCA9IGNsaXBfaGVhZDsKKyAgICAgIHMtPmNsaXBfdGFpbCA9IGNsaXBfdGFpbDsKKyAg ICB9CisgICAgfQorICAvKiBEcmF3IGFsbCBzdHJpbmdzLiAqLworICBmb3IgKHMgPSBoZWFkOyBz OyBzID0gcy0+bmV4dCkKKyAgICBGUkFNRV9SSUYgKGYpLT5tY19zY3JpYmVfc3RyaW5nIChzLCBt YXRyaXgsIHJvdywgbHNsLCBnbHlwaF9mbGF2b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOworI2lm bmRlZiBIQVZFX05TCisgIC8qIFdoZW4gZm9jdXMgYSBzb2xlIGZyYW1lIGFuZCBtb3ZlIGhvcml6 b250YWxseSwgdGhpcyBjbGVhcnMgb25fcAorICAgICBjYXVzaW5nIGEgZmFpbHVyZSB0byBlcmFz ZSBwcmV2IGN1cnNvciBwb3NpdGlvbi4gKi8KKyAgaWYgKGFyZWEgPT0gVEVYVF9BUkVBCisgICAg ICAmJiAhcm93LT5mdWxsX3dpZHRoX3AKKyAgICAgIC8qIFdoZW4gZHJhd2luZyBvdmVybGFwcGlu ZyByb3dzLCBvbmx5IHRoZSBnbHlwaCBzdHJpbmdzJworICAgICAgZm9yZWdyb3VuZCBpcyBkcmF3 biwgd2hpY2ggZG9lc24ndCBlcmFzZSBhIGN1cnNvciBjb21wbGV0ZWx5LiAqLworICAgICAgJiYg IW92ZXJsYXBzKQorICAgIHsKKyAgICAgIGludCB4MCA9IGNsaXBfaGVhZCA/IGNsaXBfaGVhZC0+ eCA6IChoZWFkID8gaGVhZC0+eCA6IHgpOworICAgICAgaW50IHgxID0gKGNsaXBfdGFpbCA/IGNs aXBfdGFpbC0+eCArIGNsaXBfdGFpbC0+YmFja2dyb3VuZF93aWR0aAorICAgICAgICAgICAgICAg ICAgICAgICAgICA6ICh0YWlsID8gdGFpbC0+eCArIHRhaWwtPmJhY2tncm91bmRfd2lkdGggOiB4 KSk7CisgICAgICB4MCAtPSBhcmVhX2xlZnQ7CisgICAgICB4MSAtPSBhcmVhX2xlZnQ7CisgICAg ICBub3RpY2Vfb3ZlcndyaXR0ZW5fY3Vyc29yICh3LCBURVhUX0FSRUEsIHgwLCB4MSwKKyAgICAg ICAgIHJvdy0+eSwgTUFUUklYX1JPV19CT1RUT01fWSAocm93KSk7CisgICAgfQorI2VuZGlmCisg IC8qIFZhbHVlIGlzIHRoZSB4LXBvc2l0aW9uIHVwIHRvIHdoaWNoIGRyYXduLCByZWxhdGl2ZSB0 byBBUkVBIG9mIFcuCisgICAgIFRoaXMgZG9lc24ndCBpbmNsdWRlIHBhcnRzIGRyYXduIGJlY2F1 c2Ugb2Ygb3ZlcmhhbmdzLiAqLworICBpZiAocm93LT5mdWxsX3dpZHRoX3ApCisgICAgeF9yZWFj aGVkID0gRlJBTUVfVE9fV0lORE9XX1BJWEVMX1ggKHcsIHhfcmVhY2hlZCk7CisgIGVsc2UKKyAg ICB4X3JlYWNoZWQgLT0gYXJlYV9sZWZ0OworICBNQ19SRUxFQVNFX0hEQyAoaGRjLCBmKTsKKyAg U0FGRV9GUkVFICgpOworICByZXR1cm4geF9yZWFjaGVkOworfQorCisvKiBFWFBPUlQgZm9yIFJJ RjoKKyAgIE91dHB1dCBMRU4gZ2x5cGhzIHN0YXJ0aW5nIGF0IFNUQVJUIGF0IHRoZSBub21pbmFs IGN1cnNvciBwb3NpdGlvbi4KKyAgIEFkdmFuY2UgdGhlIG5vbWluYWwgY3Vyc29yIG92ZXIgdGhl IHRleHQuICBVUERBVEVEX1JPVyBpcyB0aGUgZ2x5cGggcm93CisgICBiZWluZyB1cGRhdGVkLCBh bmQgVVBEQVRFRF9BUkVBIGlzIHRoZSBhcmVhIG9mIHRoYXQgcm93IGJlaW5nIHVwZGF0ZWQuICov Cit2b2lkCittY194X3dyaXRlX2dseXBocyAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBo X21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICp1cGRhdGVkX3JvdywKKyAgICBzdHJ1 Y3QgZ2x5cGggKnN0YXJ0LCBlbnVtIGdseXBoX3Jvd19hcmVhIHVwZGF0ZWRfYXJlYSwgaW50IGxl biwKKyAgICBpbnQgdnBvcywgaW50IGJvdHRvbV92cG9zLCBzdHJ1Y3QgbWNfUkdCIGxzbCwgZW51 bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yLAorICAgIGVudW0gdHlwZV9vZl9jdXJzb3IgY3Vyc29y X3R5cGUsIGludCB3ZCwgYm9vbCBhY3RpdmVfcCwgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgYmxv Y2tfaW5wdXQgKCk7CisgIGludCBocG9zID0gc3RhcnQgLSB1cGRhdGVkX3Jvdy0+Z2x5cGhzW3Vw ZGF0ZWRfYXJlYV07CisgIGludCB4ID0gbWNfZHJhd19nbHlwaHMgKHcsIG1hdHJpeCwgdXBkYXRl ZF9yb3csIHctPm91dHB1dF9jdXJzb3IueCwgdXBkYXRlZF9hcmVhLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBocG9zLCBocG9zICsgbGVuLCBEUkFXX05PUk1BTF9URVhULCAwLCB2cG9zLCBi b3R0b21fdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbHNsLCBnbHlwaF9mbGF2b3Is IGN1cnNvcl90eXBlLCB3ZCwgYWN0aXZlX3AsIGN1cnNvcl9nY19wLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBNQ19EUkFXX0dMWVBIKTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgLyogQWR2 YW5jZSB0aGUgb3V0cHV0IGN1cnNvci4gKi8KKyAgdy0+b3V0cHV0X2N1cnNvci5ocG9zICs9IGxl bjsKKyAgdy0+b3V0cHV0X2N1cnNvci54ID0geDsKK30KKworLyogRVhQT1JUOgorICAgRHJhdyB0 aGUgY3Vyc29yIGdseXBoIG9mIHdpbmRvdyBXIGluIGdseXBoIHJvdyBST1cuICBTZWUgdGhlCisg ICBjb21tZW50IG9mIGRyYXdfZ2x5cGhzIGZvciB0aGUgbWVhbmluZyBvZiBITC4gKi8KK3ZvaWQK K21jX2RyYXdfY3Vyc29yX2dseXBoIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0 cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKKyAgICAgICAgICAgICAgICAgICAg ICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UgaGwsIGludCB4LCBpbnQgaHBvcywgaW50IHZwb3MsCisg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfZmxhdm9yIGds eXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIHR5cGVfb2ZfY3Vyc29yIGN1 cnNvcl90eXBlLCBpbnQgd2QsIGJvb2wgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgc3RydWN0IGdseXBoX3JvdyAqYm90dG9tX3JvdyA9IE1B VFJJWF9CT1RUT01fVEVYVF9ST1cgKG1hdHJpeCwgdyk7CisgIGludCBib3R0b21fdnBvcyA9IE1B VFJJWF9ST1dfVlBPUyAoYm90dG9tX3JvdywgbWF0cml4KTsKKy8qCisgICAgICBzdHJ1Y3QgZ2x5 cGggKmN1cnNvcl9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBo cG9zLCB2cG9zKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2RyYXdfY3Vyc29yX2dseXBo OiAgY2ggKCVkKSB8IHggKCVkKSwgaHBvcyAoJWQpLCB2cG9zKCVkKSwgaGwgKCVkKVxuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX2dseXBoLT51LmNoLCB4LCBocG9zLCB2cG9zLCBo bCk7CisqLworICBibG9ja19pbnB1dCAoKTsKKyAgbWNfZHJhd19nbHlwaHMgKHcsIG1hdHJpeCwg cm93LCB4LCBURVhUX0FSRUEsIGhwb3MsIGhwb3MgKyAxLCBobCwgMCwKKyAgICAgICAgICAgICAg ICAgIHZwb3MsIGJvdHRvbV92cG9zLCBsc2wsIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdk LCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAgIGN1cnNvcl9nY19wLCBNQ19EUkFXX0dMWVBI KTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgLyogV2hlbiB3ZSBlcmFzZSB0aGUgY3Vyc29yLCBh bmQgUk9XIGlzIG92ZXJsYXBwZWQgYnkgb3RoZXIgcm93cywgbWFrZQorICBzdXJlIHRoYXQgdGhl c2Ugb3ZlcmxhcHBpbmcgcGFydHMgb2Ygb3RoZXIgcm93cyBhcmUgcmVkcmF3bi4gKi8KKyAgaWYg KGhsID09IERSQVdfTk9STUFMX1RFWFQgJiYgcm93LT5vdmVybGFwcGVkX3ApCisgICAgeworICAg ICAgaWYgKHJvdyA+IG1hdHJpeC0+cm93cworICAgICAgICAgICYmIE1BVFJJWF9ST1dfT1ZFUkxB UFNfU1VDQ19QIChyb3cgLSAxKSkKKyAgICAgICAgeF9maXhfb3ZlcmxhcHBpbmdfYXJlYSAodywg cm93IC0gMSwgVEVYVF9BUkVBLCBPVkVSTEFQU19FUkFTRURfQ1VSU09SKTsKKyAgICAgIGlmIChN QVRSSVhfUk9XX0JPVFRPTV9ZIChyb3cpIDwgd2luZG93X3RleHRfYm90dG9tX3kgKHcpCisgICAg ICAgICAgJiYgTUFUUklYX1JPV19PVkVSTEFQU19QUkVEX1AgKHJvdyArIDEpKQorICAgICAgICB4 X2ZpeF9vdmVybGFwcGluZ19hcmVhICh3LCByb3cgKyAxLCBURVhUX0FSRUEsIE9WRVJMQVBTX0VS QVNFRF9DVVJTT1IpOworICAgIH0KK30KKwordm9pZAorbWNfZXJhc2VfY3Vyc29yIChzdHJ1Y3Qg d2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cg KnJvdywKKyAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgaHBvcywgaW50IHZwb3Ms IGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgZW51bSB0eXBl X29mX2N1cnNvciBjdXJzb3JfdHlwZSwgaW50IHdkKQoreworICBib29sIGRlYnVnX3AgPSBmYWxz ZTsKKyAgaWYgKGRlYnVnX3ApCisgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZXJhc2VfY3Vyc29y OiAgeCAoJWQpIHwgeSAoJWQpIHwgaHBvcyAoJWQpIHwgdnBvcyAoJWQpIHwgd2QgKCVkKVxuXAor ICAgIGdseXBoX2ZsYXZvciAoJXMpIHwgY3Vyc29yX3R5cGUgKCVzKVxuIiwKKyAgICB4LCB5LCBo cG9zLCB2cG9zLCB3ZCwKKyAgICBtY19mbGF2b3JfdG9fc3RyaW5nIChnbHlwaF9mbGF2b3IpLCBt Y19jdXJzb3JfdHlwZV90b19zdHJpbmcgKGN1cnNvcl90eXBlKSk7CisgIHN0cnVjdCBmcmFtZSAq ZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBNb3VzZV9ITEluZm8gKmhsaW5mbyA9IE1PVVNFX0hM X0lORk8gKGYpOworICBib29sIG1vdXNlX2ZhY2VfaGVyZV9wID0gZmFsc2U7CisgIHN0cnVjdCBn bHlwaCAqY3Vyc29yX2dseXBoOworICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UgaGw7CisgIC8qIE5v IGN1cnNvciBkaXNwbGF5ZWQgb3Igcm93IGludmFsaWRhdGVkID0+IG5vdGhpbmcgdG8gZG8gb24g dGhlIHNjcmVlbi4gKi8KKyAgaWYgKGN1cnNvcl90eXBlID09IE1DX05PX0NVUlNPUikKKyAgICB7 CisgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZXJhc2Vf Y3Vyc29yOiAgcmV0dXJuICglZClcbiIsIDEpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyog VlBPUyA+PSBtYXRyaXgtPm5yb3dzIG1lYW5zIHRoYXQgd2luZG93IGhhcyBiZWVuIHJlc2l6ZWQu CisgICAgIERvbid0IGJvdGhlciB0byBlcmFzZSB0aGUgY3Vyc29yLiAqLworICBpZiAodnBvcyA+ PSBtYXRyaXgtPm5yb3dzKQorICAgIHsKKyAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICBmcHJp bnRmIChzdGRlcnIsICJtY19lcmFzZV9jdXJzb3I6ICByZXR1cm4gKCVkKVxuIiwgMik7CisgICAg ICByZXR1cm47CisgICAgfQorICAvKiBJZiByb3cgY29udGFpbmluZyBjdXJzb3IgaXMgbWFya2Vk IGludmFsaWQsIHRoZXJlIGlzIG5vdGhpbmcgd2UKKyAgICAgY2FuIGRvLiAqLworICBpZiAoIXJv dy0+ZW5hYmxlZF9wKQorICAgIHsKKyAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICBmcHJpbnRm IChzdGRlcnIsICJtY19lcmFzZV9jdXJzb3I6ICByZXR1cm4gKCVkKVxuIiwgMyk7CisgICAgICBy ZXR1cm47CisgICAgfQorICAvKiBJZiBsaW5lIHNwYWNpbmcgaXMgPiAwLCBvbGQgY3Vyc29yIG1h eSBvbmx5IGJlIHBhcnRpYWxseSB2aXNpYmxlIGluCisgICAgIHdpbmRvdyBhZnRlciBzcGxpdC13 aW5kb3cuICBTbyBhZGp1c3QgdmlzaWJsZSBoZWlnaHQuICovCisgIHJvdy0+dmlzaWJsZV9oZWln aHQgPSBtaW4gKHJvdy0+dmlzaWJsZV9oZWlnaHQsCisgICAgICAgICAgICB3aW5kb3dfdGV4dF9i b3R0b21feSAodykgLSByb3ctPnkpOworICAvKiBJZiByb3cgaXMgY29tcGxldGVseSBpbnZpc2li bGUsIGRvbid0IGF0dGVtcHQgdG8gZGVsZXRlIGEgY3Vyc29yIHdoaWNoCisgICAgIGlzbid0IHRo ZXJlLiAgVGhpcyBjYW4gaGFwcGVuIGlmIGN1cnNvciBpcyBhdCB0b3Agb2YgYSB3aW5kb3csIGFu ZAorICAgICB3ZSBzd2l0Y2ggdG8gYSBidWZmZXIgd2l0aCBhIGhlYWRlciBsaW5lIGluIHRoYXQg d2luZG93LiAqLworICBpZiAocm93LT52aXNpYmxlX2hlaWdodCA8PSAwKQorICAgIHsKKyAgICAg IGlmIChkZWJ1Z19wKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19lcmFzZV9jdXJzb3I6 ICByZXR1cm4gKCVkKVxuIiwgNCk7CisgICAgICByZXR1cm47CisgICAgfQorICAvKiBJZiBjdXJz b3IgaXMgaW4gdGhlIGZyaW5nZSwgZXJhc2UgYnkgZHJhd2luZyBhY3R1YWwgYml0bWFwIHRoZXJl LiAqLworICBpZiAocm93LT5jdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICYmIGdseXBoX2ZsYXZv ciAhPSBNQ19HTFlQSCkKKyAgICB7CisgICAgICByb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IGZh bHNlOworICAgICAgbWNfZHJhd19mcmluZ2VfYml0bWFwICh3LCByb3csIHJvdy0+cmV2ZXJzZWRf cCwgY3Vyc29yX3R5cGUpOworICAgICAgaWYgKGRlYnVnX3ApCisgICAgICAgIGZwcmludGYgKHN0 ZGVyciwgIm1jX2VyYXNlX2N1cnNvcjogIHJldHVybiAoJWQpXG4iLCA1KTsKKyAgICAgIHJldHVy bjsKKyAgICB9CisgIC8qIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBuZXcgcm93IGlzIHNob3J0 ZXIgdGhhbiB0aGUgb2xkIG9uZS4KKyAgICAgSW4gdGhpcyBjYXNlLCBlaXRoZXIgZHJhd19nbHlw aHMgb3IgY2xlYXJfZW5kX29mX2xpbmUKKyAgICAgc2hvdWxkIGhhdmUgY2xlYXJlZCB0aGUgY3Vy c29yLiAgTm90ZSB0aGF0IHdlIHdvdWxkbid0IGJlCisgICAgIGFibGUgdG8gZXJhc2UgdGhlIGN1 cnNvciBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEKKyAgICAgY3Vyc29yIGds eXBoIGF0IGhhbmQuICovCisgIGlmICgocm93LT5yZXZlcnNlZF9wCisgICAgICAgPyAoaHBvcyA8 IDApCisgICAgICAgOiAoaHBvcyA+PSByb3ctPnVzZWRbVEVYVF9BUkVBXSkpKQorICAgIHsKKyAg ICAgIGlmIChkZWJ1Z19wKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19lcmFzZV9jdXJz b3I6ICByZXR1cm4gKCVkKVxuIiwgNik7CisgICAgICByZXR1cm47CisgICAgfQorICAvKiBXaGVu IHRoZSB3aW5kb3cgaXMgaHNjcm9sbGVkLCBjdXJzb3IgaHBvcyBjYW4gbGVnaXRpbWF0ZWx5IGJl IG91dAorICAgICBvZiBib3VuZHMsIGJ1dCB3ZSBkcmF3IHRoZSBjdXJzb3IgYXQgdGhlIGNvcnJl c3BvbmRpbmcgd2luZG93CisgICAgIG1hcmdpbiBpbiB0aGF0IGNhc2UuICovCisgIGlmICghcm93 LT5yZXZlcnNlZF9wICYmIGhwb3MgPCAwKQorICAgIGhwb3MgPSAwOworICBpZiAocm93LT5yZXZl cnNlZF9wICYmIGhwb3MgPj0gcm93LT51c2VkW1RFWFRfQVJFQV0pCisgICAgaHBvcyA9IHJvdy0+ dXNlZFtURVhUX0FSRUFdIC0gMTsKKyAgLyogSWYgdGhlIGN1cnNvciBpcyBpbiB0aGUgbW91c2Ug ZmFjZSBhcmVhLCByZWRpc3BsYXkgdGhhdCB3aGVuIHdlIGNsZWFyIHRoZSBjdXJzb3IuICovCisg IGlmICghIE5JTFAgKGhsaW5mby0+bW91c2VfZmFjZV93aW5kb3cpCisgICAgICAmJiBjb29yZHNf aW5fbW91c2VfZmFjZV9wICh3LCBocG9zLCB2cG9zKQorICAgICAgLyogRG9uJ3QgcmVkcmF3IHRo ZSBjdXJzb3IncyBzcG90IGluIG1vdXNlIGZhY2UgaWYgaXQgaXMgYXQgdGhlCisgICAgICBlbmQg b2YgYSBsaW5lIChvbiBhIG5ld2xpbmUpLiAgVGhlIGN1cnNvciBhcHBlYXJzIHRoZXJlLCBidXQK KyAgICAgIG1vdXNlIGhpZ2hsaWdodGluZyBkb2VzIG5vdC4gKi8KKyAgICAgICYmIHJvdy0+dXNl ZFtURVhUX0FSRUFdID4gaHBvcyAmJiBocG9zID49IDApCisgICAgbW91c2VfZmFjZV9oZXJlX3Ag PSB0cnVlOworICAvKiBNYXliZSBjbGVhciB0aGUgZGlzcGxheSB1bmRlciB0aGUgY3Vyc29yLiAq LworICBpZiAoY3Vyc29yX3R5cGUgPT0gTUNfSE9MTE9XX0JPWAorICAgICAgfHwgY3Vyc29yX3R5 cGUgPT0gTUNfRlJBTUVEX0JPWCkKKyAgICB7CisgICAgICBpbnQgdGVtcF94ID0geDsKKyAgICAg IGludCBoZWFkZXJfbGluZV9oZWlnaHQgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUICh3KTsK KyAgICAgIGN1cnNvcl9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93 LCBocG9zLCB2cG9zKTsKKyAgICAgIGlmIChjdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICAgICAg eworICAgICAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi bWNfZXJhc2VfY3Vyc29yOiAgcmV0dXJuICglZClcbiIsIDcpOworICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgICAgaW50IHRlbXBfd2QgPSBjdXJzb3JfZ2x5cGgtPnBpeGVsX3dpZHRo OworICAgICAgaWYgKHRlbXBfeCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICB0ZW1wX3dkICs9 IHRlbXBfeDsKKyAgICAgICAgICB0ZW1wX3ggPSAwOworICAgICAgICB9CisgICAgICB0ZW1wX3dk ID0gbWluICh3ZCwgd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKSAtIHRlbXBfeCk7Cisg ICAgICBpbnQgZnkgPSBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgbWF4IChoZWFkZXJfbGlu ZV9oZWlnaHQsIHJvdy0+eSkpOworICAgICAgaW50IGZ4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVf UElYRUxfWCAodywgdGVtcF94KTsKKyAgICAgIGlmICh0ZW1wX3dkID4gMCkKKyAgICAgICAgRlJB TUVfUklGIChmKS0+Y2xlYXJfZnJhbWVfYXJlYSAoZiwgZngsIGZ5LCB0ZW1wX3dkLCByb3ctPnZp c2libGVfaGVpZ2h0KTsKKyAgICB9CisgIC8qIEVyYXNlIHRoZSBjdXJzb3IgYnkgcmVkcmF3aW5n IHRoZSBjaGFyYWN0ZXIgdW5kZXJuZWF0aCBpdC4gKi8KKyAgaWYgKG1vdXNlX2ZhY2VfaGVyZV9w KQorICAgIGhsID0gRFJBV19NT1VTRV9GQUNFOworICAgIGVsc2UKKyAgICAgIGhsID0gRFJBV19O T1JNQUxfVEVYVDsKKyAgc3RydWN0IG1jX1JHQiBsc2wgPSB7LnJlZCA9IC0xLjAsIC5ncmVlbiA9 IC0xLjAsIC5ibHVlID0gLTEuMH07CisgIGJvb2wgYWN0aXZlX3AgPSBmYWxzZTsKKyAgYm9vbCBj dXJzb3JfZ2NfcCA9IGZhbHNlOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpib3R0b21fcm93ID0gTUFU UklYX0JPVFRPTV9URVhUX1JPVyAobWF0cml4LCB3KTsKKyAgaW50IGJvdHRvbV92cG9zID0gTUFU UklYX1JPV19WUE9TIChib3R0b21fcm93LCBtYXRyaXgpOworLyoKKyAgICAgIHN0cnVjdCBnbHlw aCAqY3Vyc29yX2dseXBoID0gbWNfZ2V0X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIGhw b3MsIHZwb3MpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19jdXJzb3JfZ2x5cGg6 ICBjaCAoJWQpIHwgeCAoJWQpLCBocG9zICglZCksIHZwb3MoJWQpLCBobCAoJWQpXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICBjdXJzb3JfZ2x5cGgtPnUuY2gsIHgsIGhwb3MsIHZwb3MsIGhs KTsKKyovCisgIGJsb2NrX2lucHV0ICgpOworICBtY19kcmF3X2dseXBocyAodywgbWF0cml4LCBy b3csIHgsIFRFWFRfQVJFQSwgaHBvcywgaHBvcyArIDEsIGhsLCAwLAorICAgICAgICAgICAgICAg ICAgdnBvcywgYm90dG9tX3Zwb3MsIGxzbCwgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2Qs IGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgY3Vyc29yX2djX3AsIE1DX0VSQVNFX0dMWVBI KTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgLyogV2hlbiB3ZSBlcmFzZSB0aGUgY3Vyc29yLCBh bmQgUk9XIGlzIG92ZXJsYXBwZWQgYnkgb3RoZXIgcm93cywgbWFrZQorICBzdXJlIHRoYXQgdGhl c2Ugb3ZlcmxhcHBpbmcgcGFydHMgb2Ygb3RoZXIgcm93cyBhcmUgcmVkcmF3bi4gKi8KKyAgaWYg KGhsID09IERSQVdfTk9STUFMX1RFWFQgJiYgcm93LT5vdmVybGFwcGVkX3ApCisgICAgeworICAg ICAgaWYgKHJvdyA+IG1hdHJpeC0+cm93cworICAgICAgICAgICYmIE1BVFJJWF9ST1dfT1ZFUkxB UFNfU1VDQ19QIChyb3cgLSAxKSkKKyAgICAgICAgeF9maXhfb3ZlcmxhcHBpbmdfYXJlYSAodywg cm93IC0gMSwgVEVYVF9BUkVBLCBPVkVSTEFQU19FUkFTRURfQ1VSU09SKTsKKyAgICAgIGlmIChN QVRSSVhfUk9XX0JPVFRPTV9ZIChyb3cpIDwgd2luZG93X3RleHRfYm90dG9tX3kgKHcpCisgICAg ICAgICAgJiYgTUFUUklYX1JPV19PVkVSTEFQU19QUkVEX1AgKHJvdyArIDEpKQorICAgICAgICB4 X2ZpeF9vdmVybGFwcGluZ19hcmVhICh3LCByb3cgKyAxLCBURVhUX0FSRUEsIE9WRVJMQVBTX0VS QVNFRF9DVVJTT1IpOworICAgIH0KK30KKworLyogV2UgY2FsbCB0aGlzIGEgZHJhdy9lcmFzZSBo eWJyaWQgYmVjYXVzZSBpdCBkb2VzIGFsbCBvZiB0aGUgZm9sbG93aW5nOgorLSBEcmF3IGFsbCBn bHlwaCBjdXJzb3JzLCBidXQgZXJhc2Ugd2l0aCBgbWNfZXJhc2VfY3Vyc29yJy4KKy0gRHJhdy9l cmFzZSBhbGwgZnJpbmdlIGJpdG1hcHMgcmVsYXRpbmcgdG8gY3Jvc3NoYWlycy4KKy0gRHJhdy9l cmFzZSBhbGwgZ2x5cGhsZXNzIGN1cnNvcnMuICovCit2b2lkCittY19kcmF3X2VyYXNlX2h5YnJp ZCAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3Qg Z2x5cGhfcm93ICpyb3csCisgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCBmeCwgaW50 IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGludCBoLAorICAgICAgICAg ICAgICAgICAgICAgIGVudW0gdHlwZV9vZl9jdXJzb3IgY3Vyc29yX3R5cGUsIGludCBjdXJzb3Jf d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2wsIGJvb2wgYWN0 aXZlX3AsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAg ICBib29sIHJlbW92ZV9wKQoreworICAvKiBgbWF0cml4X3JvdycgaW4gYGRpc3BuZXcuY2AgY29u dGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgZWFzc2VydCAobWF0cml4ICYmIG1hdHJpeC0+ cm93cyk7CisgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8IG1hdHJpeC0+bnJvd3MpOyAqLwor ICBib29sIGJhcmZfY3Jhc2hfb25lID0gKG1hdHJpeCAmJiBtYXRyaXgtPnJvd3MpID8gZmFsc2Ug OiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAgcmV0dXJuOworICBib29sIGJhcmZf Y3Jhc2hfdHdvID0gKHZwb3MgPj0gMCAmJiB2cG9zIDwgbWF0cml4LT5ucm93cykgPyBmYWxzZSA6 IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICByZXR1cm47CisgIGlmICh4IDwgMAor ICAgICAgfHwgeSA8IDAKKyAgICAgIHx8IGhwb3MgPCAwCisgICAgICB8fCB2cG9zIDwgMCkKKyAg ICByZXR1cm47CisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZG RVIgKGJ1Zik7CisgIGJvb2wgYXV0b19oc2Nyb2xsX21vZGVfcCA9IEVRIChGYnVmZmVyX2xvY2Fs X3ZhbHVlIChRYXV0b19oc2Nyb2xsX21vZGUsIGJ1ZiksIFFjdXJyZW50X2xpbmUpOworICAvKiBF WEFNUExFOiAgKHNjcm9sbC1sZWZ0IDUpICovCisgIGJvb2wgaHNjbF9hbGxfdGVtcF9wID0gKHct PnN1c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9f aHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+ IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgPT0gMCk7Cisg IC8qIEVYQU1QTEU6ICBDLXUgQy14IDwgYW5kIGRvIG5vdGhpbmcuICovCisgIGJvb2wgaHNjbF9h bGxfcGVybV8wX3AgPSAody0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3 LT5taW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5f aHNjcm9sbCA9PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXggPCBhbmQgZG8g c29tZXRoaW5nIGVsc2UgYmVzaWRlcyBob3Jpem9udGFsbHkgc2Nyb2xsaW5nIHRoZQorICAgICAg ICAgICAgICAgY3VycmVudCBsaW5lIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgQ3VycmVu dCBsaW5lIGlzIF9ub3RfIGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4gKi8KKyAg Ym9vbCBoc2NsX2FsbF9wZXJtXzFfcCA9ICghdy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiB3LT5taW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiB3LT5taW5faHNjcm9sbCA9PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMtdSBD LXggPCBhbmQgLi4uCisgICAgICAgICAgICAgICBDdXJyZW50IGxpbmUgaXMgX25vdF8gaG9yaXpv bnRhbGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfYWxsX3Blcm1fMl9w ID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3 LT5oc2Nyb2xsID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNj cm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCAh PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIChzY3JvbGwtbGVmdCA1KTsgYW5kLCB0aGVu IHByZXNzIHRoZSBsZWZ0IGFycm93IGtleSBvbmUgdGltZS4KKyAgICAgICAgICAgICAgIEN1cnJl bnQgbGluZSBfaXNfIGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4qLworICBib29s IGhzY2xfdGVtcF9wID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAg ICAgICAgICYmIGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3 LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09 IDApOworICAvKiBFWEFNUExFOiAgQy11IEMteCA8IGFuZCBkbyBzb21ldGhpbmcgdGhhdCBjYXVz ZXMgdGhlIGN1cnJlbnQgbGluZSB0byBiZQorICAgICAgICAgICAgICAgaG9yaXpvbnRhbGx5IHNj cm9sbGVkIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIF9pc18gaG9y aXpvbnRhbGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfcGVybV9wID0g KCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9f aHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMAor ICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAgICAgICAgICAg ICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsICE9IHctPmhzY3JvbGwpOworICBzdHJ1Y3QgZnJh bWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgaW50IGZyaW5nZV9iaXRtYXAgPSBNQ19OT19G UklOR0VfQklUTUFQOworICBpbnQgZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgaWYgKCFy ZW1vdmVfcAorICAgICAgJiYgZ2x5cGhfZmxhdm9yID09IE1DX09WRVJMQVlfQVJST1dfQklUTUFQ CisgICAgICAmJiAhaHNjbF9hbGxfdGVtcF9wCisgICAgICAmJiAhaHNjbF90ZW1wX3AKKyAgICAg ICYmICFoc2NsX3Blcm1fcAorICAgICAgJiYgIWhzY2xfYWxsX3Blcm1fMF9wCisgICAgICAmJiAh aHNjbF9hbGxfcGVybV8xX3AKKyAgICAgICYmICFoc2NsX2FsbF9wZXJtXzJfcCkKKyAgICB7Cisg ICAgICBlbnVtIGZhY2VfaWQgb3ZlcmxheV9hcnJvd19mYWNlX2lkID0KKyAgICAgICAgKCFhY3Rp dmVfcAorICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hf aW5hY3RpdmVfd2luZG93cykpKQorICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBp bnRlcm4gKCIrLW92ZXJsYXktYXJyb3ctaW5hY3RpdmUtZmFjZSIpLCB0cnVlKQorICAgICAgICA6 IChhY3RpdmVfcCkKKyAgICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4g KCIrLW92ZXJsYXktYXJyb3ctZmFjZSIpLCB0cnVlKQorICAgICAgICA6IERFRkFVTFRfRkFDRV9J RDsKKyAgICAgIGZhY2VfaWQgPSAoY3Vyc29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQ KQorICAgICAgICAgICAgICAgID8gb3ZlcmxheV9hcnJvd19mYWNlX2lkCisgICAgICAgICAgICAg ICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAvKiBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2Zy aW5nZV9iaXRtYXAgKHcsIFFvdmVybGF5X2Fycm93LCBmYWxzZSwgZmFsc2UpOyAqLworICAgICAg aWYgKHctPmhzY3JvbGwgIT0gMCkKKyAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmlu Z2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ciKSwgZmFsc2UsIHRydWUpOwor ICAgICAgICBlbHNlCisgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0 bWFwICh3LCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ciKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAv KiBBcyB0byBgcm93LT5vdmVybGF5X2Fycm93X2JpdG1hcGAsIHRoZSBmYWNlIG1heSBiZSBjaGFu Z2VkIHVzaW5nCisgICAgICB0aGUgYGZhY2UtcmVtYXBwaW5nLWFsaXN0JyBzbyBsb25nIGFzIHdl IGhhdmUgYSBMaXNwIHNldHRpbmcgb2Y6CisgICAgICAgIChzZXQtZnJpbmdlLWJpdG1hcC1mYWNl ICcrLWZyaW5nZS1yaWdodC1hcnJvdyAnKy1vdmVybGF5LWFycm93LWZhY2UpCisgICAgICBJZiB3 ZSB1c2UgYHJvdy0+bGVmdF9mcmluZ2VfYml0bWFwYCwgdGhlbiB0aGUgZmFjZSBtYXkgYmUgc2V0 IHVzaW5nCisgICAgICBCT1RIIHRoZSBgZmFjZS1yZW1hcHBpbmctYWxpc3QnIGFuZCBgcm93LT5s ZWZ0X2ZyaW5nZV9mYWNlX2lkYC4gIEluCisgICAgICB0aGF0IHNpdHVhdGlvbiwgYSBMaXNwIHNl dHRpbmcgb2YgYHNldC1mcmluZ2UtYml0bWFwLWZhY2UnIGlzIG5vdCBuZWVkZWQuCisgICAgICBg bWNfZHJhd19mcmluZ2VfYml0bWFwXzEnIGlzIHNvbWV3aGF0IGNvbmZ1c2luZyBhbmQgcmVxdWly ZWQgc3RkZXJyIG1lc3NhZ2VzCisgICAgICB0byBzZWUgdGhhdCBgcm93LT5vdmVybGF5X2Fycm93 X2JpdG1hcGAgc2F0aXNmaWVzIHRoZSBmaXJzdCBjb25kaXRpb24KKyAgICAgIG9mICh3aGljaCAh PSBOT19GUklOR0VfQklUTUFQKS4gIEF0IHRoaXMgdGltZSwgQGxhd2xpc3QgcHJlZmVycyBub3Qg dG8KKyAgICAgIHJlbHkgdXBvbiBhIExpc3Agc2V0dGluZyB1c2luZyBgc2V0LWZyaW5nZS1iaXRt YXAtZmFjZScuICovCisgICAgICByb3ctPmxlZnRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlw ZSA9PSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID8gZnJpbmdlX2JpdG1hcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1D X05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICByb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBmYWNl X2lkOworICAgICAgcm93LT5sZWZ0X2ZyaW5nZV9vZmZzZXQgPSAwOworICAgICAgcm93LT5mcmlu Z2VfYml0bWFwX3BlcmlvZGljX3AgPSBmYWxzZTsKKyAgICAgIG1jX2RyYXdfZnJpbmdlX2JpdG1h cCAodywgcm93LCB0cnVlLCBjdXJzb3JfdHlwZSk7CisgICAgfQorICAgIGVsc2UgaWYgKCFyZW1v dmVfcAorICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciA9PSBNQ19PVkVSTEFZX0FSUk9XX0JJ VE1BUAorICAgICAgICAgICAgICYmIChoc2NsX2FsbF90ZW1wX3AKKyAgICAgICAgICAgICAgICAg fHwgaHNjbF9hbGxfcGVybV8wX3AKKyAgICAgICAgICAgICAgICAgfHwgaHNjbF9hbGxfcGVybV8x X3AKKyAgICAgICAgICAgICAgICAgfHwgaHNjbF9hbGxfcGVybV8yX3AKKyAgICAgICAgICAgICAg ICAgfHwgaHNjbF90ZW1wX3AKKyAgICAgICAgICAgICAgICAgfHwgaHNjbF9wZXJtX3ApKQorICAg ICAgeworICAgICAgICBlbnVtIGZhY2VfaWQgb3ZlcmxheV9hcnJvd19mYWNlX2lkID0KKyAgICAg ICAgICAoIWFjdGl2ZV9wCisgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICAgICAgICA/IGxvb2t1cF9uYW1l ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ctaHNjbC1pbmFjdGl2ZS1mYWNl IiksIHRydWUpCisgICAgICAgICAgOiAoYWN0aXZlX3ApCisgICAgICAgICAgICA/IGxvb2t1cF9u YW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ctaHNjbC1mYWNlIiksIHRy dWUpCisgICAgICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgIGZhY2VfaWQgPSAoY3Vy c29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgICAgPyBv dmVybGF5X2Fycm93X2ZhY2VfaWQKKyAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lE OworICAgICAgICBpZiAoaHNjbF9hbGxfcGVybV8wX3ApCisgICAgICAgICAgZnJpbmdlX2JpdG1h cCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIpLCBmYWxz ZSwgZmFsc2UpOworICAgICAgICAgIGVsc2UgaWYgKGhzY2xfYWxsX3Blcm1fMV9wKQorICAgICAg ICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIr LWhzY2wtcGVybSIpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChoc2NsX2Fs bF9wZXJtXzJfcCkKKyAgICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2Vf Yml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAg ICAgICAgIGVsc2UgaWYgKGhzY2xfcGVybV9wKQorICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRt YXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgdHJ1 ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHNjbF9hbGxfdGVtcF9wKQorICAg ICAgICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBp bnRlcm4gKCIrLWhzY2wtdGVtcCIpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoaHNjbF90ZW1wX3ApCisgICAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAg PSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXRlbXAiKSwgdHJ1ZSwg ZmFsc2UpOworICAgICAgICAvKiBBcyB0byBgcm93LT5vdmVybGF5X2Fycm93X2JpdG1hcGAsIHRo ZSBmYWNlIG1heSBiZSBjaGFuZ2VkIHVzaW5nCisgICAgICAgIHRoZSBgZmFjZS1yZW1hcHBpbmct YWxpc3QnIHNvIGxvbmcgYXMgd2UgaGF2ZSBhIExpc3Agc2V0dGluZyBvZjoKKyAgICAgICAgICAo c2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcmlnaHQtYXJyb3cgJystb3ZlcmxheS1h cnJvdy1mYWNlKQorICAgICAgICBJZiB3ZSB1c2UgYHJvdy0+bGVmdF9mcmluZ2VfYml0bWFwYCwg dGhlbiB0aGUgZmFjZSBtYXkgYmUgc2V0IHVzaW5nCisgICAgICAgIEJPVEggdGhlIGBmYWNlLXJl bWFwcGluZy1hbGlzdCcgYW5kIGByb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWRgLiAgSW4KKyAgICAg ICAgdGhhdCBzaXR1YXRpb24sIGEgTGlzcCBzZXR0aW5nIG9mIGBzZXQtZnJpbmdlLWJpdG1hcC1m YWNlJyBpcyBub3QgbmVlZGVkLgorICAgICAgICBgbWNfZHJhd19mcmluZ2VfYml0bWFwXzEnIGlz IHNvbWV3aGF0IGNvbmZ1c2luZyBhbmQgcmVxdWlyZWQgc3RkZXJyIG1lc3NhZ2VzCisgICAgICAg IHRvIHNlZSB0aGF0IGByb3ctPm92ZXJsYXlfYXJyb3dfYml0bWFwYCBzYXRpc2ZpZXMgdGhlIGZp cnN0IGNvbmRpdGlvbgorICAgICAgICBvZiAod2hpY2ggIT0gTk9fRlJJTkdFX0JJVE1BUCkuICBB dCB0aGlzIHRpbWUsIEBsYXdsaXN0IHByZWZlcnMgbm90IHRvCisgICAgICAgIHJlbHkgdXBvbiBh IExpc3Agc2V0dGluZyB1c2luZyBgc2V0LWZyaW5nZS1iaXRtYXAtZmFjZScuICovCisgICAgICAg IHJvdy0+bGVmdF9mcmluZ2VfYml0bWFwID0gKGN1cnNvcl90eXBlID09IE1DX0xFRlRfRlJJTkdF X0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnJp bmdlX2JpdG1hcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBN Q19OT19GUklOR0VfQklUTUFQOworICAgICAgICByb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBm YWNlX2lkOworICAgICAgICByb3ctPmxlZnRfZnJpbmdlX29mZnNldCA9IDA7CisgICAgICAgIHJv dy0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wID0gZmFsc2U7CisgICAgICAgIG1jX2RyYXdfZnJp bmdlX2JpdG1hcCAodywgcm93LCB0cnVlLCBjdXJzb3JfdHlwZSk7CisgICAgICB9CisgICAgICBl bHNlIGlmICghcmVtb3ZlX3AKKyAgICAgICAgICAgICAgICYmIChnbHlwaF9mbGF2b3IgPT0gTUNf SE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgIHx8IGdseXBo X2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAg ICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5HTEUKKyAg ICAgICAgICAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX1JJR0hU X0FSUk9XCisgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VE X1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2Zs YXZvciA9PSBNQ19WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICB8fCBnbHlwaF9mbGF2 b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSCisgICAgICAgICAgICAgICAgICAgfHwgZ2x5 cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpKQorICAgICAgICB7CisgICAg ICAgICAgTGlzcF9PYmplY3QgYml0bWFwX2ZsYXZvciA9IChnbHlwaF9mbGF2b3IgPT0gTUNfSE9M TE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyBRbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9hcnJvdworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURf SE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IFFtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9 PSBNQ19IT0xMT1dfUkVDVEFOR0xFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID8gUW1jX2hvbGxvd19yZWN0YW5nbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJP VykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY192ZXJ0aWNh bF9iYXJfcmlnaHRfYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY19yZXZlcnNlZF92 ZXJ0aWNhbF9iYXJfcmlnaHRfYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY192ZXJ0aWNhbF9iYXIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VE X1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ IFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfdmVydGljYWxfYmFy X2JhY2tzbGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFuaWw7 CisgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdIVF9GUklO R0VfQklUTUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9mcmluZ2VfYml0 bWFwIChiaXRtYXBfZmxhdm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1DX05PX0ZS SU5HRV9CSVRNQVA7CisgICAgICAgICAgZmFjZV9pZCA9IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdI VF9GUklOR0VfQklUTUFQCisgICAgICAgICAgICAgICAgICAgICAmJiAoZ2x5cGhfZmxhdm9yID09 IE1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAg ICAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJ R0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1D X1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikpCisgICAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBf bmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZXZlcnNlZC12ZXJ0aWNhbC1iYXItZmFjZSIp LCB0cnVlKQorICAgICAgICAgICAgICAgICAgICA6IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdIVF9G UklOR0VfQklUTUFQCisgICAgICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBN Q19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAg ICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRf QVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVS U0VEX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9uYW1lZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLXZlcnRpY2FsLWJhci1mYWNlIiksIHRydWUpCisgICAgICAg ICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgIHJvdy0+Y3Vyc29yX2lu X2ZyaW5nZV9wID0gZmFsc2U7CisgICAgICAgICAgcm93LT5yaWdodF9mcmluZ2VfYml0bWFwID0g ZnJpbmdlX2JpdG1hcDsKKyAgICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0gZmFj ZV9pZDsKKyAgICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9vZmZzZXQgPSAwOworICAgICAgICAg IHJvdy0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wID0gZmFsc2U7CisgICAgICAgICAgbWNfZHJh d19mcmluZ2VfYml0bWFwICh3LCByb3csIGZhbHNlLCBjdXJzb3JfdHlwZSk7CisgICAgICAgIH0K KyAgICAgICAgZWxzZSBpZiAoZ2x5cGhfZmxhdm9yID09IE1DX0dMWVBICisgICAgICAgICAgICAg ICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19HTFlQSExFU1MpCisgICAgICAgICAgeworICAgICAg ICAgICAgYm9vbCBvbl9wID0gdHJ1ZTsKKyAgICAgICAgICAgIEZSQU1FX1JJRiAoZiktPm1jX3Nj cmliZV9jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cG9zLCB3ZCwgaCwgbHNsLCBj dXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGN1cnNvcl93aWR0aCwgZ2x5cGhfZmxhdm9yLCBvbl9wLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3ApOworICAgICAgICAgIH0KK30KKworLyog RHVtcCBjb250ZW50cyBvZiBnbHlwaCBHTFlQSCB0byBzdGRlcnIuICBST1cgYW5kIEFSRUEgYXJl CisgICB0aGUgZ2x5cGggcm93IGFuZCBhcmVhIHdoZXJlIHRoZSBnbHlwaCBjb21lcyBmcm9tLiAq Lwordm9pZAorbWNfZHVtcF9nbHlwaCAoc3RydWN0IGdseXBoX3JvdyAqcm93LCBzdHJ1Y3QgZ2x5 cGggKmdseXBoLCBpbnQgYXJlYSwgaW50IHJlbGF0aXZlX3gpCit7CisgIGlmIChnbHlwaC0+dHlw ZSA9PSBDSEFSX0dMWVBICisgICAgICB8fCBnbHlwaC0+dHlwZSA9PSBHTFlQSExFU1NfR0xZUEgp CisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiICU1InBEImQvJS01ZCAl NWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4ICU0ZCAlMS4xZCUxLjFkICU1ZCAlNGQgICUzZCAg JTNkICVzICVzXG4iLAorICAgICAgICBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisg ICAgICAgICgocm93LT51c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEp LAorICAgICAgICByZWxhdGl2ZV94LAorICAgICAgICAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQ SAorICAgICAgICAgPyAnQycKKyAgICAgICAgIDogJ0cnKSwKKyAgICAgICAgZ2x5cGgtPmNoYXJw b3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgPyAnQicKKyAg ICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/ICdTJworICAg ICAgICAgICAgOiAoTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgICAgID8gJzAnCisg ICAgICAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAg ICAgICBnbHlwaC0+dS5jaCwKKyAgICAgICAgZ2x5cGgtPmZhY2VfaWQsCisgICAgICAgIGdseXBo LT5sZWZ0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT5yaWdodF9ib3hfbGluZV9wLAorICAg ICAgICBnbHlwaC0+eCwgZ2x5cGgtPnksIGdseXBoLT5ocG9zLCBnbHlwaC0+dnBvcywgZ2x5cGgt Pnp2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgbWNfY2hhcl90b19zdHJpbmcgKGdseXBoLT51 LmNoKSk7CisgICAgfQorICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBTVFJFVENIX0dMWVBIKQor ICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgIiAlNSJwRCJkLyUtNWQgJTVk ICVjICU5InBEImQgJWMgJTNkIDB4JTA2eCAlNGQgJTEuMWQlMS4xZCAlNWQgJTRkICAlM2QgICUz ZCAlcyAlc1xuIiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAg ICAgICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwK KyAgICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJ1MnLAorICAgICAgICBnbHlwaC0+Y2hhcnBv cywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/ICdCJwor ICAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/ICdTJwor ICAgICAgICAgIDogKE5JTFAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/ICcwJworICAg ICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4ZWxfd2lkdGgsCisgICAgICAgIDB1 LAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgtPmxlZnRfYm94X2xpbmVf cCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT54LCBn bHlwaC0+eSwgZ2x5cGgtPmhwb3MsIGdseXBoLT52cG9zLCBnbHlwaC0+enZfcCA/ICJaViIgOiAi LS0iLAorICAgICAgICAiXFxTIik7CisgICAgfQorICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBJ TUFHRV9HTFlQSCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICIgJTUi cEQiZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNnggJTRkICUxLjFkJTEuMWQgJTVk ICU0ZCAgJTNkICAlM2QgJXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlwaHNbVEVY VF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93LT51c2Vk W2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdJJywKKyAgICAgICAg Z2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAg ICAgICAgPyAnQicKKyAgICAgICAgICA6IChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAg ICAgICAgPyAnUycKKyAgICAgICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAg ICAgPyAnMCcKKyAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRo LAorICAgICAgICAodW5zaWduZWQgaW50KSBnbHlwaC0+dS5pbWdfaWQsCisgICAgICAgIGdseXBo LT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAorICAgICAgICBnbHlw aC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPngsIGdseXBoLT55LCBnbHlwaC0+ aHBvcywgZ2x5cGgtPnZwb3MsIGdseXBoLT56dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICcu Jyk7CisgICAgfQorICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBDT01QT1NJVEVfR0xZUEgpCisg ICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiICU1InBEImQvJS01ZCAlNWQg JWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4IiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tU RVhUX0FSRUFdLAorICAgICAgICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVz ZWRbYXJlYV0gLSAxKSwKKyAgICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJysnLAorICAgICAg ICBnbHlwaC0+Y2hhcnBvcywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAg ICAgICAgICA/ICdCJworICAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAg ICAgICAgICA/ICdTJworICAgICAgICAgIDogKE5JTFAgKGdseXBoLT5vYmplY3QpCisgICAgICAg ICAgICA/ICcwJworICAgICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4ZWxfd2lk dGgsCisgICAgICAgICh1bnNpZ25lZCBpbnQpIGdseXBoLT51LmNtcC5pZCk7CisgICAgICBmcHJp bnRmIChzdGRlcnIsICIgJTRkICUxLjFkJTEuMWQiLAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwK KyAgICAgICAgZ2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2Jv eF9saW5lX3ApOworICAgICAgaWYgKGdseXBoLT51LmNtcC5hdXRvbWF0aWMpCisgICAgICAgIGZw cmludGYgKHN0ZGVyciwgIiAlNWQgJTRkICAlM2QgICUzZCAlcyAuIFslZC0lZF1cbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPngsIGdseXBoLT55LCBnbHlwaC0+aHBvcywgZ2x5 cGgtPnZwb3MsIGdseXBoLT56dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgZ2x5cGgtPnNsaWNlLmNtcC5mcm9tLCBnbHlwaC0+c2xpY2UuY21wLnRvKTsKKyAgICAg ICAgZWxzZQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyAgZWxzZSBp ZiAoZ2x5cGgtPnR5cGUgPT0gWFdJREdFVF9HTFlQSCkKKyAgICB7CisjaWZuZGVmIEhBVkVfWFdJ REdFVFMKKyAgICAgIGVhc3N1bWUgKGZhbHNlKTsKKyNlbHNlCisgICAgICBmcHJpbnRmIChzdGRl cnIsCisgICAgICAgICIgICU1ZC8lLTVkICU1ZCAlNGMgJTZkICVjICUzZCAweCUwNXggJTRkICUx LjFkJTEuMWQgJTVkICU0ZCAgJTNkICAlM2QgJXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93 LT5nbHlwaHNbVEVYVF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAw IDogcm93LT51c2VkW2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdY JywKKyAgICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2Jq ZWN0KQorICAgICAgICAgICA/ICdCJworICAgICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVj dCkKKyAgICAgICAgICAgID8gJ1MnCisgICAgICAgICA6ICctJykpLAorICAgICAgICBnbHlwaC0+ cGl4ZWxfd2lkdGgsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVm dF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAg Z2x5cGgtPnUueHdpZGdldCwKKyAgICAgICAgZ2x5cGgtPngsIGdseXBoLT55LCBnbHlwaC0+aHBv cywgZ2x5cGgtPnZwb3MsIGdseXBoLT56dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICcuJyk7 CisjZW5kaWYKKyAgICB9Cit9CisKKy8qIER1bXAgdGhlIGNvbnRlbnRzIG9mIGdseXBoIHJvdyBh dCBWUE9TIGluIE1BVFJJWCB0byBzdGRlcnIuCisgICBHTFlQSFMgMCBtZWFucyBkb24ndCBzaG93 IGdseXBoIGNvbnRlbnRzLgorICAgR0xZUEhTIDEgbWVhbnMgc2hvdyBnbHlwaHMgaW4gc2hvcnQg Zm9ybQorICAgR0xZUEhTID4gMSBtZWFucyBzaG93IGdseXBocyBpbiBsb25nIGZvcm0uICovCit2 b2lkCittY19kdW1wX2dseXBoX3JvdyAoc3RydWN0IGdseXBoX3JvdyAqcm93LCBpbnQgdnBvcywg aW50IGdseXBocykKK3sKKyAgaW50IHJlbGF0aXZlX3ggPSAwOworICBpZiAoZ2x5cGhzICE9IDEp CisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5EVU1QIEdMWVBIIFJPV1xuIik7Cisg ICAgICBmcHJpbnRmIChzdGRlcnIsICJSb3cgICAgIFN0YXJ0ICAgICAgIEVuZCBVc2VkIG9FPjxc XENUWkZlc20gICAgIFggICAgWSAgICBXICAgIEggICAgViAgICBBICAgIFBcbiIpOworICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgICAgIGZwcmlu dGYgKHN0ZGVyciwgIiUzZCAlOSJwRCJkICU5InBEImQgJTRkICUxLjFkJTEuMWQlMS4xZCUxLjFk XAorJTEuMWQlMS4xZCUxLjFkJTEuMWQlMS4xZCUxLjFkJTEuMWQlMS4xZCAgJTRkICU0ZCAlNGQg JTRkICU0ZCAlNGQgJTRkXG4iLAorICAgICAgICAgdnBvcywKKyAgICAgICAgIE1BVFJJWF9ST1df U1RBUlRfQ0hBUlBPUyAocm93KSwKKyAgICAgICAgIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJv dyksCisgICAgICAgICByb3ctPnVzZWRbVEVYVF9BUkVBXSwKKyAgICAgICAgIHJvdy0+Y29udGFp bnNfb3ZlcmxhcHBpbmdfZ2x5cGhzX3AsCisgICAgICAgICByb3ctPmVuYWJsZWRfcCwKKyAgICAg ICAgIHJvdy0+dHJ1bmNhdGVkX29uX2xlZnRfcCwKKyAgICAgICAgIHJvdy0+dHJ1bmNhdGVkX29u X3JpZ2h0X3AsCisgICAgICAgICByb3ctPmNvbnRpbnVlZF9wLAorICAgICAgICAgTUFUUklYX1JP V19DT05USU5VQVRJT05fTElORV9QIChyb3cpLAorICAgICAgICAgTUFUUklYX1JPV19ESVNQTEFZ U19URVhUX1AgKHJvdyksCisgICAgICAgICByb3ctPmVuZHNfYXRfenZfcCwKKyAgICAgICAgIHJv dy0+ZmlsbF9saW5lX3AsCisgICAgICAgICByb3ctPmVuZHNfaW5fbWlkZGxlX29mX2NoYXJfcCwK KyAgICAgICAgIHJvdy0+c3RhcnRzX2luX21pZGRsZV9vZl9jaGFyX3AsCisgICAgICAgICByb3ct Pm1vdXNlX2ZhY2VfcCwKKyAgICAgICAgIHJvdy0+eCwKKyAgICAgICAgIHJvdy0+eSwKKyAgICAg ICAgIHJvdy0+cGl4ZWxfd2lkdGgsCisgICAgICAgICByb3ctPmhlaWdodCwKKyAgICAgICAgIHJv dy0+dmlzaWJsZV9oZWlnaHQsCisgICAgICAgICByb3ctPmFzY2VudCwKKyAgICAgICAgIHJvdy0+ cGh5c19hc2NlbnQpOworICAgICAgLyogVGhlIG5leHQgMyBsaW5lcyBzaG91bGQgYWxpZ24gdG8g IlN0YXJ0IiBpbiB0aGUgaGVhZGVyLiAqLworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgICU5 InBEImQgJTkicEQiZFx0JTVkXG4iLCByb3ctPnN0YXJ0Lm92ZXJsYXlfc3RyaW5nX2luZGV4LAor ICAgICAgICAgcm93LT5lbmQub3ZlcmxheV9zdHJpbmdfaW5kZXgsCisgICAgICAgICByb3ctPmNv bnRpbnVhdGlvbl9saW5lc193aWR0aCk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAgJTki cEQiZCAlOSJwRCJkXG4iLAorICAgICAgICAgQ0hBUlBPUyAocm93LT5zdGFydC5zdHJpbmdfcG9z KSwKKyAgICAgICAgIENIQVJQT1MgKHJvdy0+ZW5kLnN0cmluZ19wb3MpKTsKKyAgICAgIGZwcmlu dGYgKHN0ZGVyciwgIiAgICAlOWQgJTlkXG4iLCByb3ctPnN0YXJ0LmRwdmVjX2luZGV4LAorICAg ICAgICAgcm93LT5lbmQuZHB2ZWNfaW5kZXgpOworICAgIH0KKyAgaWYgKGdseXBocyA+IDEpCisg ICAgeworICAgICAgZm9yIChpbnQgYXJlYSA9IExFRlRfTUFSR0lOX0FSRUE7IGFyZWEgPCBMQVNU X0FSRUE7ICsrYXJlYSkKKyAgeworICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSByb3ctPmdseXBo c1thcmVhXTsKKyAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoX2VuZCA9IGdseXBoICsgcm93LT51c2Vk W2FyZWFdOworICAgIC8qIEdseXBoIGZvciBhIGxpbmUgZW5kIGluIHRleHQuICovCisgICAgaWYg KGFyZWEgPT0gVEVYVF9BUkVBICYmIGdseXBoID09IGdseXBoX2VuZCAmJiBnbHlwaC0+Y2hhcnBv cyA+IDApCisgICAgICArK2dseXBoX2VuZDsKKyAgICBpZiAoZ2x5cGggPCBnbHlwaF9lbmQpCisg ICAgICBmcHJpbnRmIChzdGRlcnIsICJHbHlwaCMvVG90YWwgUmVsLlggVCAgICAgICBQb3MgTyAg IFcgICAgIENvZGUgRmFjZSBMUiAgICAgWCAgICBZIEhQT1MgVlBPUyBaViBDXG4iKTsKKyAgICBm b3IgKDsgZ2x5cGggPCBnbHlwaF9lbmQ7ICsrZ2x5cGgpCisgICAgICB7CisgICAgICAgIG1jX2R1 bXBfZ2x5cGggKHJvdywgZ2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gpOworICAgICAgICByZWxhdGl2 ZV94ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgIH0KKyAgfQorICAgIH0KKyAgZWxzZSBp ZiAoZ2x5cGhzID09IDEpCisgICAgeworICAgICAgY2hhciBzW1NIUlRfTUFYICsgNF07CisgICAg ICBmb3IgKGludCBhcmVhID0gTEVGVF9NQVJHSU5fQVJFQTsgYXJlYSA8IExBU1RfQVJFQTsgKyth cmVhKQorICB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHJvdy0+dXNlZFthcmVh XTsgKytpKQorICAgICAgeworICAgICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoID0gcm93LT5nbHlw aHNbYXJlYV0gKyBpOworICAgICAgICBpZiAoaSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAg ICAmJiBhcmVhID09IFRFWFRfQVJFQQorICAgICAgJiYgTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAg ICAgICYmIGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICYmIGdseXBoLT51LmNoID09 ICcgJykKKyAgICB7CisgICAgICBzdHJjcHkgKCZzW2ldLCAiW1xcbl0iKTsKKyAgICAgIGkgKz0g NDsKKyAgICB9CisgICAgICAgIGVsc2UgaWYgKGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAg ICAgICAgICAgJiYgZ2x5cGgtPnUuY2ggPCAweDgwCisgICAgICAgICAgICYmIGdseXBoLT51LmNo ID49ICcgJykKKyAgICBzW2ldID0gZ2x5cGgtPnUuY2g7CisgICAgICAgIGVsc2UKKyAgICBzW2ld ID0gJy4nOworICAgICAgfQorICAgIHNbaV0gPSAnXDAnOworICAgIGZwcmludGYgKHN0ZGVyciwg IiUzZDogKCVkKSAnJXMnXG4iLCB2cG9zLCByb3ctPmVuYWJsZWRfcCwgcyk7CisgIH0KKyAgICB9 Cit9CisKK0RFRlVOICgibWMtZHVtcC1nbHlwaC1yb3ciLCBGbWNfZHVtcF9nbHlwaF9yb3csIFNt Y19kdW1wX2dseXBoX3JvdywgMSwgMiwgIlAiLAorICAgICAgIGRvYzogLyogRHVtcCBnbHlwaCBy b3cgUk9XIHRvIHN0ZGVyci4KK0ludGVyYWN0aXZlbHksIFJPVyBpcyB0aGUgcHJlZml4IG51bWVy aWMgYXJndW1lbnQgYW5kIGRlZmF1bHRzIHRvCit0aGUgcm93IHdoaWNoIGRpc3BsYXlzIHBvaW50 LgorT3B0aW9uYWwgYXJndW1lbnQgR0xZUEhTIDAgbWVhbnMgZG9uJ3QgZHVtcCBnbHlwaHMuCitH TFlQSFMgMSBtZWFucyBkdW1wIGdseXBocyBpbiBzaG9ydCBmb3JtLgorR0xZUEhTID4gMSBvciBv bWl0dGVkIG1lYW5zIGR1bXAgZ2x5cGhzIGluIGxvbmcgZm9ybS4gICovKQorICAoTGlzcF9PYmpl Y3Qgcm93LCBMaXNwX09iamVjdCBnbHlwaHMpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lO RE9XIChzZWxlY3RlZF93aW5kb3cpOworICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXg7Cisg IEVNQUNTX0lOVCB2cG9zOworICBpZiAoTklMUCAocm93KSkKKyAgICB7CisgICAgICBpbnQgZDEs IGQyLCBkMywgZDQsIGQ1LCB5cG9zOworICAgICAgYm9vbCB2aXNpYmxlX3AgPSBwb3NfdmlzaWJs ZV9wICh3LCBQVCwgJmQxLCAmZDIsICZkMywgJmQ0LCAmZDUsICZ5cG9zKTsKKyAgICAgIGludCBo ZWFkZXJfbGluZV9oZWlnaHQgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUICh3KTsKKyAgICAg IGludCB2b2Zmc2V0ID0gKGhlYWRlcl9saW5lX2hlaWdodCA+IDAKKyAgICAgICAgICAgICAgICAg ICAgICYmIHlwb3MgPiAwKQorICAgICAgICAgICAgICAgICAgICAgID8geXBvcyArIDEKKyAgICAg ICAgICAgICAgICAgICAgICA6IHlwb3M7CisgICAgICBpZiAodmlzaWJsZV9wKQorICAgICAgICB2 cG9zID0gdm9mZnNldDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHZwb3MgPSAwOworICAgIH0K KyAgICBlbHNlCisgICAgICB7CisgICAgICAgIENIRUNLX05VTUJFUiAocm93KTsKKyAgICAgICAg dnBvcyA9IFhGSVhOVU0gKHJvdyk7CisgICAgICB9CisgIG1hdHJpeCA9IHctPmN1cnJlbnRfbWF0 cml4OworICBpZiAodnBvcyA+PSAwICYmIHZwb3MgPCBtYXRyaXgtPm5yb3dzKQorICAgIG1jX2R1 bXBfZ2x5cGhfcm93IChNQVRSSVhfUk9XIChtYXRyaXgsIHZwb3MpLAorICAgICAgICB2cG9zLAor ICAgICAgICBUWVBFX1JBTkdFRF9GSVhOVU1QIChpbnQsIGdseXBocykgPyBYRklYTlVNIChnbHlw aHMpIDogMik7CisgIHJldHVybiBRbmlsOworfQorCit2b2lkCittY19kdW1wX2dseXBoX21hdHJp eCAoc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBpbnQgZ2x5cGhzKQoreworICBpbnQgaTsK KyAgZm9yIChpID0gMDsgaSA8IG1hdHJpeC0+bnJvd3M7ICsraSkKKyAgICBtY19kdW1wX2dseXBo X3JvdyAoTUFUUklYX1JPVyAobWF0cml4LCBpKSwgaSwgZ2x5cGhzKTsKK30KKworREVGVU4gKCJt Yy1kdW1wLWdseXBoLW1hdHJpeCIsIEZtY19kdW1wX2dseXBoX21hdHJpeCwKKyAgICAgICBTbWNf ZHVtcF9nbHlwaF9tYXRyaXgsIDAsIDEsICJwIiwKKyAgICAgICBkb2M6IC8qIER1bXAgdGhlIGN1 cnJlbnQgbWF0cml4IG9mIHRoZSBzZWxlY3RlZCB3aW5kb3cgdG8gc3RkZXJyLgorU2hvd3MgY29u dGVudHMgb2YgZ2x5cGggcm93IHN0cnVjdHVyZXMuICBXaXRoIG5vbi1uaWwKK3BhcmFtZXRlciBH TFlQSFMsIGR1bXAgZ2x5cGhzIGFzIHdlbGwuICBJZiBHTFlQSFMgaXMgMSBzaG93CitnbHlwaHMg aW4gc2hvcnQgZm9ybSwgb3RoZXJ3aXNlIHNob3cgZ2x5cGhzIGluIGxvbmcgZm9ybS4KKy0gSW50 ZXJhY3RpdmVseSwgbm8gYXJndW1lbnQgbWVhbnMgc2hvdyBnbHlwaHMgaW4gc2hvcnQgZm9ybTsK K3dpdGggbnVtZXJpYyBhcmd1bWVudCwgaXRzIHZhbHVlIGlzIHBhc3NlZCBhcyB0aGUgR0xZUEhT IGZsYWcuICAqLykKKyAgKExpc3BfT2JqZWN0IGdseXBocykKK3sKKyAgc3RydWN0IHdpbmRvdyAq dyA9IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyk7CisgIHN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9 IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiUFQgPSAlInBEImQs IEJFR1YgPSAlInBEImQuIFpWID0gJSJwRCJkXG4iLAorICAgICBCVUZfUFQgKGJ1ZmZlciksIEJV Rl9CRUdWIChidWZmZXIpLCBCVUZfWlYgKGJ1ZmZlcikpOworICBmcHJpbnRmIChzdGRlcnIsICJD dXJzb3IgeCA9ICVkLCB5ID0gJWQsIGhwb3MgPSAlZCwgdnBvcyA9ICVkXG4iLAorICAgICB3LT5j dXJzb3IueCwgdy0+Y3Vyc29yLnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcyk7Cisg IGZwcmludGYgKHN0ZGVyciwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PVxuIik7CisgIG1jX2R1bXBfZ2x5cGhfbWF0cml4ICh3LT5jdXJyZW50X21hdHJpeCwK KyAgICAgICAgIFRZUEVfUkFOR0VEX0ZJWE5VTVAgKGludCwgZ2x5cGhzKSA/IFhGSVhOVU0gKGds eXBocykgOiAwKTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK3ZvaWQKK21jX3Jlc2V0X2NhY2hlIChz dHJ1Y3Qgd2luZG93ICp3LCBlbnVtIHR5cGVfb2ZfY2FjaGUgY2FjaGVfdHlwZSkKK3sKKyAgc3dp dGNoIChjYWNoZV90eXBlKQorICAgIHsKKyAgICAgIGNhc2UgTk9fQ0FDSEU6CisgICAgICAgIHsK KyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2FzZSBNQ19DQUNIRToKKyAgICAg ICAgeworICAgICAgICAgIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykgJiYgTklMUCAoQlZBUiAo WEJVRkZFUiAody0+Y29udGVudHMpLCBtY19jb25mKSkKKyAgICAgICAgICAgICAgJiYgdy0+bWNf ZWx0cy51c2VkID4gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogRGVjcmVhc2Ug dGhlIHNpemUgb2YgdGhlIGFycmF5IHRvIGEgYmFyZSBtaW5pbXVtLiAqLworICAgICAgICAgICAg ICB4bnJlYWxsb2MgKHctPm1jX2VsdHMuY2FjaGVzLCAxLCBzaXplb2YgKnctPm1jX2VsdHMuY2Fj aGVzKTsKKyAgICAgICAgICAgICAgdy0+bWNfZWx0cy51c2VkID0gMDsKKyAgICAgICAgICAgICAg dy0+bWNfZWx0cy5hbGxvY2F0ZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChC VUZGRVJQICh3LT5jb250ZW50cykgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgbWNfY29uZikpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvLyAgLyogU2V0IGFs bCBfdXNlZF8gZWxlbWVudHMgb2YgdGhlIGFycmF5IHRvIHplcm8uICBfZWx0cy5hbGxvY2F0ZWQg cmVtYWluCisgICAgICAgICAgICAgIC8vICB0aGUgc2FtZS4gKi8KKyAgICAgICAgICAgICAgLy8g IG1lbXNldCAody0+bWNfZWx0cy5jYWNoZXMsIDAsIHctPm1jX2VsdHMudXNlZCAqIChzaXplb2Yg KnctPm1jX2VsdHMuY2FjaGVzKSk7CisgICAgICAgICAgICAgIHctPm1jX2VsdHMudXNlZCA9IDA7 CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGNhc2Ug Q0hfQ0FDSEU6CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoQlVGRkVSUCAody0+Y29udGVudHMp ICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAg ICAgICAgICAgICYmIHctPmNoX2VsdHMudXNlZCA+IDEpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIC8qIERlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBhcnJheSB0byBhIGJhcmUgbWluaW11 bS4gKi8KKyAgICAgICAgICAgICAgeG5yZWFsbG9jICh3LT5jaF9lbHRzLmNhY2hlcywgMSwgc2l6 ZW9mICp3LT5jaF9lbHRzLmNhY2hlcyk7CisgICAgICAgICAgICAgIHctPmNoX2VsdHMudXNlZCA9 IDA7CisgICAgICAgICAgICAgIHctPmNoX2VsdHMuYWxsb2NhdGVkID0gMTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICBpZiAoQlVGRkVSUCAody0+Y29udGVudHMpICYmICFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgLy8gIC8qIFNldCBhbGwgX3VzZWRfIGVsZW1lbnRzIG9mIHRoZSBhcnJheSB0byB6 ZXJvLiAgX2VsdHMuYWxsb2NhdGVkIHJlbWFpbgorICAgICAgICAgICAgICAvLyAgdGhlIHNhbWUu ICovCisgICAgICAgICAgICAgIC8vICBtZW1zZXQgKHctPmNoX2VsdHMuY2FjaGVzLCAwLCB3LT5j aF9lbHRzLnVzZWQgKiAoc2l6ZW9mICp3LT5jaF9lbHRzLmNhY2hlcykpOworICAgICAgICAgICAg ICB3LT5jaF9lbHRzLnVzZWQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICBjYXNlIEZDX0NBQ0hFOgorICAgICAgICB7CisgICAgICAgICAgaWYg KEJVRkZFUlAgKHctPmNvbnRlbnRzKSAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50 cyksIGZjX3Zpc2libGUpKQorICAgICAgICAgICAgICAmJiB3LT5mY19lbHRzLnVzZWQgPiAxKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBEZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUg YXJyYXkgdG8gYSBiYXJlIG1pbmltdW0uICovCisgICAgICAgICAgICAgIHhucmVhbGxvYyAody0+ ZmNfZWx0cy5jYWNoZXMsIDEsIHNpemVvZiAqdy0+ZmNfZWx0cy5jYWNoZXMpOworICAgICAgICAg ICAgICB3LT5mY19lbHRzLnVzZWQgPSAwOworICAgICAgICAgICAgICB3LT5mY19lbHRzLmFsbG9j YXRlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKEJVRkZFUlAgKHctPmNvbnRl bnRzKSAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY192aXNpYmxlKSkp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vICAvKiBTZXQgYWxsIF91c2VkXyBlbGVt ZW50cyBvZiB0aGUgYXJyYXkgdG8gemVyby4gIF9lbHRzLmFsbG9jYXRlZCByZW1haW4KKyAgICAg ICAgICAgICAgLy8gIHRoZSBzYW1lLiAqLworICAgICAgICAgICAgICAvLyAgbWVtc2V0ICh3LT5m Y19lbHRzLmNhY2hlcywgMCwgdy0+ZmNfZWx0cy51c2VkICogKHNpemVvZiAqdy0+ZmNfZWx0cy5j YWNoZXMpKTsKKyAgICAgICAgICAgICAgdy0+ZmNfZWx0cy51c2VkID0gMDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQK K21jX2hlbHBlciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4 LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGgs IGludCB4LCBpbnQgZngsIGludCB5LCBpbnQgZnksIGludCBocG9zLCBpbnQgdnBvcywKKyAgICAg ICAgICAgaW50IHdkLCBpbnQgaCwgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSwgaW50 IGN1cnNvcl93aWR0aCwKKyAgICAgICAgICAgc3RydWN0IG1jX1JHQiBmb3JlZ3JvdW5kLCBzdHJ1 Y3QgbWNfUkdCIGJhY2tncm91bmQsIGJvb2wgYWN0aXZlX3AsCisgICAgICAgICAgIGVudW0gbWNf Zmxhdm9yIGdseXBoX2ZsYXZvciwgYm9vbCBkcmF3X3AsIGVudW0gdHlwZV9vZl9jYWNoZSBjYWNo ZV90eXBlKQoreworICBpZiAoZ2x5cGggIT0gTlVMTAorICAgICAgJiYgZ2x5cGgtPnUuY2ggPT0g OTUKKyAgICAgICYmIGN1cnNvcl90eXBlID09IE1DX0hCQVIpCisgICAgeworICAgICAgc3RydWN0 IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgICAgICBlbnVtIGZhY2VfaWQgc3BlY2lh bF9jaGFyX2ZhY2VfaWQgPQorICAgICAgICBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu ICgiKy1zcGVjaWFsLWNoYXJhY3Rlci1mYWNlIiksIHRydWUpOworICAgICAgc3RydWN0IGZhY2Ug KnNwZWNpYWxfY2hhcl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBzcGVjaWFsX2NoYXJfZmFjZV9p ZCk7CisgICAgICBMaXNwX09iamVjdCBzcGVjaWFsX2NoYXJfZmdfY29sb3IgPSBzcGVjaWFsX2No YXJfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgICAgICBtY194d19jb2xv cl92YWx1ZXMgKHcsIHNwZWNpYWxfY2hhcl9mZ19jb2xvciwgJmZvcmVncm91bmQpOworICAgIH0K KyAgaWYgKG1jX3N0ZGVycl9wKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxubWNf aGVscGVyICglcyk6XG5cCisgIHggKCVkKSB8IGZ4ICglZCkgfCB5ICglZCkgfCBmeSAoJWQpIHwg aHBvcyAoJWQpIHwgdnBvcyAoJWQpIHwgaCAoJWQpXG5cCisgIGN1cnNvcl90eXBlICglcykgfCBj dXJzb3Jfd2lkdGggKCVkKSB8IGFjdGl2ZV9wICglcylcblwKKyAgZmxhdm9yICglcykgfCBGRy1S R0IgKCVmLyVmLyVmKSB8IEJHLVJHQiAoJWYvJWYvJWYpXG4iLAorICAgICAgbWNfd2luZG93ICh3 KSwKKyAgICAgIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgaCwKKyAgICAgIG1jX2N1cnNvcl90 eXBlX3RvX3N0cmluZyAoY3Vyc29yX3R5cGUpLAorICAgICAgY3Vyc29yX3dpZHRoLAorICAgICAg KGFjdGl2ZV9wID8gInRydWUiIDogImZhbHNlIiksCisgICAgICBtY19mbGF2b3JfdG9fc3RyaW5n IChnbHlwaF9mbGF2b3IpLAorICAgICAgZm9yZWdyb3VuZC5yZWQsIGZvcmVncm91bmQuZ3JlZW4s IGZvcmVncm91bmQuYmx1ZSwgYmFja2dyb3VuZC5yZWQsIGJhY2tncm91bmQuZ3JlZW4sIGJhY2tn cm91bmQuYmx1ZSk7CisgICAgfQorICBib29sIHJlbW92ZV9wID0gZmFsc2U7CisgIGlmIChkcmF3 X3ApCisgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwg ZnksIGhwb3MsIHZwb3MsIHdkLCBoLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLCBhY3RpdmVfcCwgZ2x5cGhfZmxhdm9yLCBy ZW1vdmVfcCk7CisgIHN0cnVjdCBtdWx0aXBsZV9jdXJzb3JzX2NhY2hlIGZvb19lbHRzOworICBz d2l0Y2ggKGNhY2hlX3R5cGUpCisgICAgeworICAgICAgY2FzZSBOT19DQUNIRToKKyAgICAgICAg eworICAgICAgICAgIC8qIERvIG5vdCBjb250aW51ZSB0byB0aGUgbGFzdCBzZWN0aW9uIHRoYXQg cG9wdWxhdGVzIHRoZSBjYWNoZSB3aXRoCisgICAgICAgICAgY3Vyc29yIGRhdGEsIGFzIHRoYXQg d2lsbCBjYXVzZSBhIFNJR1NFR1YgKHNlZ21lbnRhdGlvbiBmYXVsdCkuICovCisgICAgICAgICAg cmV0dXJuOworICAgICAgICB9CisgICAgICBjYXNlIE1DX0NBQ0hFOgorICAgICAgICB7CisgICAg ICAgICAgKyt3LT5tY19lbHRzLnVzZWQ7CisgICAgICAgICAgaWYgKHctPm1jX2VsdHMuYWxsb2Nh dGVkIDwgdy0+bWNfZWx0cy51c2VkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQg b2xkX2FsbG9jID0gdy0+bWNfZWx0cy5hbGxvY2F0ZWQ7CisgICAgICAgICAgICAgIGludCBuZXdf ZWx0cyA9IHctPm1jX2VsdHMudXNlZCAtIHctPm1jX2VsdHMuYWxsb2NhdGVkOworICAgICAgICAg ICAgICB3LT5tY19lbHRzLmNhY2hlcyA9IHhwYWxsb2MgKHctPm1jX2VsdHMuY2FjaGVzLCAmdy0+ bWNfZWx0cy5hbGxvY2F0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmV3X2VsdHMsIElOVF9NQVgsIHNpemVvZiAqdy0+bWNfZWx0cy5jYWNoZXMpOworICAg ICAgICAgICAgICBtZW1zZXQgKHctPm1jX2VsdHMuY2FjaGVzICsgb2xkX2FsbG9jLCAwLAorICAg ICAgICAgICAgICAgICAgICAgICAody0+bWNfZWx0cy5hbGxvY2F0ZWQgLSBvbGRfYWxsb2MpICog c2l6ZW9mICp3LT5tY19lbHRzLmNhY2hlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZm9v X2VsdHMuY2FjaGVzID0gdy0+bWNfZWx0cy5jYWNoZXM7CisgICAgICAgICAgZm9vX2VsdHMuYWxs b2NhdGVkID0gdy0+bWNfZWx0cy5hbGxvY2F0ZWQ7CisgICAgICAgICAgZm9vX2VsdHMudXNlZCA9 IHctPm1jX2VsdHMudXNlZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2Fz ZSBDSF9DQUNIRToKKyAgICAgICAgeworICAgICAgICAgICsrdy0+Y2hfZWx0cy51c2VkOworICAg ICAgICAgIGlmICh3LT5jaF9lbHRzLmFsbG9jYXRlZCA8IHctPmNoX2VsdHMudXNlZCkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IG9sZF9hbGxvYyA9IHctPmNoX2VsdHMuYWxsb2Nh dGVkOworICAgICAgICAgICAgICBpbnQgbmV3X2VsdHMgPSB3LT5jaF9lbHRzLnVzZWQgLSB3LT5j aF9lbHRzLmFsbG9jYXRlZDsKKyAgICAgICAgICAgICAgdy0+Y2hfZWx0cy5jYWNoZXMgPSB4cGFs bG9jICh3LT5jaF9lbHRzLmNhY2hlcywgJnctPmNoX2VsdHMuYWxsb2NhdGVkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19lbHRzLCBJTlRfTUFYLCBzaXpl b2YgKnctPmNoX2VsdHMuY2FjaGVzKTsKKyAgICAgICAgICAgICAgbWVtc2V0ICh3LT5jaF9lbHRz LmNhY2hlcyArIG9sZF9hbGxvYywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHctPmNoX2Vs dHMuYWxsb2NhdGVkIC0gb2xkX2FsbG9jKSAqIHNpemVvZiAqdy0+Y2hfZWx0cy5jYWNoZXMpOwor ICAgICAgICAgICAgfQorICAgICAgICAgIGZvb19lbHRzLmNhY2hlcyA9IHctPmNoX2VsdHMuY2Fj aGVzOworICAgICAgICAgIGZvb19lbHRzLmFsbG9jYXRlZCA9IHctPmNoX2VsdHMuYWxsb2NhdGVk OworICAgICAgICAgIGZvb19lbHRzLnVzZWQgPSB3LT5jaF9lbHRzLnVzZWQ7CisgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRkNfQ0FDSEU6CisgICAgICAgIHsKKyAgICAg ICAgICArK3ctPmZjX2VsdHMudXNlZDsKKyAgICAgICAgICBpZiAody0+ZmNfZWx0cy5hbGxvY2F0 ZWQgPCB3LT5mY19lbHRzLnVzZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBv bGRfYWxsb2MgPSB3LT5mY19lbHRzLmFsbG9jYXRlZDsKKyAgICAgICAgICAgICAgaW50IG5ld19l bHRzID0gdy0+ZmNfZWx0cy51c2VkIC0gdy0+ZmNfZWx0cy5hbGxvY2F0ZWQ7CisgICAgICAgICAg ICAgIHctPmZjX2VsdHMuY2FjaGVzID0geHBhbGxvYyAody0+ZmNfZWx0cy5jYWNoZXMsICZ3LT5m Y19lbHRzLmFsbG9jYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuZXdfZWx0cywgSU5UX01BWCwgc2l6ZW9mICp3LT5mY19lbHRzLmNhY2hlcyk7CisgICAg ICAgICAgICAgIG1lbXNldCAody0+ZmNfZWx0cy5jYWNoZXMgKyBvbGRfYWxsb2MsIDAsCisgICAg ICAgICAgICAgICAgICAgICAgICh3LT5mY19lbHRzLmFsbG9jYXRlZCAtIG9sZF9hbGxvYykgKiBz aXplb2YgKnctPmZjX2VsdHMuY2FjaGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBmb29f ZWx0cy5jYWNoZXMgPSB3LT5mY19lbHRzLmNhY2hlczsKKyAgICAgICAgICBmb29fZWx0cy5hbGxv Y2F0ZWQgPSB3LT5mY19lbHRzLmFsbG9jYXRlZDsKKyAgICAgICAgICBmb29fZWx0cy51c2VkID0g dy0+ZmNfZWx0cy51c2VkOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICBp bnQgbnRoID0gZm9vX2VsdHMudXNlZCAtIDE7CisgIGZvb19lbHRzLmNhY2hlc1tudGhdLnggPSB4 OworICBmb29fZWx0cy5jYWNoZXNbbnRoXS5meCA9IGZ4OworICBmb29fZWx0cy5jYWNoZXNbbnRo XS55ID0geTsKKyAgZm9vX2VsdHMuY2FjaGVzW250aF0uZnkgPSBmeTsKKyAgZm9vX2VsdHMuY2Fj aGVzW250aF0uaHBvcyA9IGhwb3M7CisgIGZvb19lbHRzLmNhY2hlc1tudGhdLnZwb3MgPSB2cG9z OworICBmb29fZWx0cy5jYWNoZXNbbnRoXS53ZCA9IHdkOworICBmb29fZWx0cy5jYWNoZXNbbnRo XS5oID0gaDsKKyAgZm9vX2VsdHMuY2FjaGVzW250aF0uY3Vyc29yX3R5cGUgPSBjdXJzb3JfdHlw ZTsKKyAgZm9vX2VsdHMuY2FjaGVzW250aF0uY3Vyc29yX3dpZHRoID0gY3Vyc29yX3dpZHRoOwor ICBmb29fZWx0cy5jYWNoZXNbbnRoXS5mb3JlZ3JvdW5kLnJlZCA9IGZvcmVncm91bmQucmVkOwor ICBmb29fZWx0cy5jYWNoZXNbbnRoXS5mb3JlZ3JvdW5kLmdyZWVuID0gZm9yZWdyb3VuZC5ncmVl bjsKKyAgZm9vX2VsdHMuY2FjaGVzW250aF0uZm9yZWdyb3VuZC5ibHVlID0gZm9yZWdyb3VuZC5i bHVlOworICBmb29fZWx0cy5jYWNoZXNbbnRoXS5iYWNrZ3JvdW5kLnJlZCA9IGJhY2tncm91bmQu cmVkOworICBmb29fZWx0cy5jYWNoZXNbbnRoXS5iYWNrZ3JvdW5kLmdyZWVuID0gYmFja2dyb3Vu ZC5ncmVlbjsKKyAgZm9vX2VsdHMuY2FjaGVzW250aF0uYmFja2dyb3VuZC5ibHVlID0gYmFja2dy b3VuZC5ibHVlOworICBmb29fZWx0cy5jYWNoZXNbbnRoXS5hY3RpdmVfcCA9IGFjdGl2ZV9wOwor ICBmb29fZWx0cy5jYWNoZXNbbnRoXS5nbHlwaF9mbGF2b3IgPSBnbHlwaF9mbGF2b3I7CisgIGZv b19lbHRzLmNhY2hlc1tudGhdLmVuYWJsZWRfcCA9IHRydWU7Cit9CisKKy8qIFJldHVybiBhIHBv aW50ZXIgdG8gdGhlIGdseXBoIFcncyBwaHlzaWNhbCBjdXJzb3IgaXMgb24uICBWYWx1ZSBpcyBu dWxsIGlmIFcncworICAgbWF0cml4IGlzIGludmFsaWQsIHNvIHRoYXQgbm8gbWVhbmluZ2Z1bCBn bHlwaCBjYW4gYmUgcmV0dXJuZWQuICovCitzdHJ1Y3QgZ2x5cGggKgorbWNfZ2V0X2N1cnNvcl9n bHlwaCAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LAorICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93LCBpbnQgaHBvcywgaW50IHZw b3MpCit7CisgIHN0cnVjdCBnbHlwaCAqZ2x5cGg7CisgIGlmICghKHZwb3MgPj0gMAorICAgICAg ICAmJiB2cG9zIDwgbWF0cml4LT5ucm93cykpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmICghcm93 LT5lbmFibGVkX3ApCisgICAgcmV0dXJuIE5VTEw7CisgIGlmICh3LT5oc2Nyb2xsKQorICAgIHsK KyAgICAgIC8qIFdoZW4gdGhlIHdpbmRvdyBpcyBoc2Nyb2xsZWQsIGN1cnNvciBocG9zIGNhbiBs ZWdpdGltYXRlbHkgYmUKKyAgICAgIG91dCBvZiBib3VuZHMsIGJ1dCB3ZSBkcmF3IHRoZSBjdXJz b3IgYXQgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgIHdpbmRvdyBtYXJnaW4gaW4gdGhhdCBjYXNl LiAqLworICAgICAgaWYgKCFyb3ctPnJldmVyc2VkX3AgJiYgaHBvcyA8IDApCisgICAgICAgIGhw b3MgPSAwOworICAgICAgaWYgKHJvdy0+cmV2ZXJzZWRfcCAmJiBocG9zID49IHJvdy0+dXNlZFtU RVhUX0FSRUFdKQorICAgICAgICBocG9zID0gcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxOworICAg IH0KKyAgaWYgKDAgPD0gaHBvcyAmJiBocG9zIDwgcm93LT51c2VkW1RFWFRfQVJFQV0pCisgICAg Z2x5cGggPSByb3ctPmdseXBoc1tURVhUX0FSRUFdICsgaHBvczsKKyAgICBlbHNlCisgICAgICBn bHlwaCA9IE5VTEw7CisgIHJldHVybiBnbHlwaDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkaWZm ZXJzIHN1YnN0YW50aWFsbHkgZnJvbSBgZ2V0X3BoeXNfY3Vyc29yX2dlb21ldHJ5Jy4KKyAgIGB4 dGVybS5jYDogIGBtY194X2RyYXdfaG9sbG93X2N1cnNvcmAgY2FsbHMgYHhfZHJhd19yZWN0YW5n bGUnLCB3aGljaCByZXF1aXJlcworICAgYSBXRCAtIDEgYW5kIEggLSAxLiAgU28gdGhhdCBgbWNf Z2V0X2N1cnNvcl9nZW9tZXRyeWAgY2FuIGJlIHVzZWQgZm9yIGFsbAorICAgcGxhdGZvcm1zLCBg bWNfeF9kcmF3X2hvbGxvd19jdXJzb3JgIHN1YnRyYWN0cyB0aGUgZXh0cmEgcGl4ZWwgZnJvbSBX RCBhbmQgSC4KKyAgIEZYOiAgRnJhbWUgcmVsYXRpdmUgY29vcmRpbmF0ZSBmb3Igd2luZG93IHJl bGF0aXZlIFguCisgICBGWTogIEZyYW1lIHJlbGF0aXZlIGNvb3JkaW5hdGUgb2YgUk9XLT5ZOyBp LmUuLCB0b3Agb2YgdGhlIGxpbmUuICBGb3IgYW4KKyAgICAgICAgTUNfSEJBUiwgdXNlIFJPVy0+ WSArIFJPVy0+VklTSUJMRV9IRUlHSFQgLSAxIHBpeGVsIHNvIHRoYXQgaXQKKyAgICAgICAgaXMg cGFsY2VkIGF0IHRoZSB2ZXJ5IGJvdHRvbSBvZiB0aGUgdmlzaWJsZSByb3cuCisgICBXRDogIEdM WVBILT5QSVhFTF9XSURUSCwgZXhjZXB0IHdoZW4gZGVhbGluZyB3aXRoIGEgU1RSRVRDSF9HTFlQ SCB3aGVuIHdlIHRha2UKKyAgICAgICAgaW50byBjb25zaWRlcmF0aW9uIGB4LXN0cmV0Y2gtY3Vy c29yJyBhbmQgYGN1cnNvcl90eXBlYC4KKyAgIEg6ICBNQ19IQkFSIGlzIDEgcGl4ZWwsIGFuZCBh bGwgb3RoZXJzIGFyZSBST1ctPlZJU0lCTEVfSEVJR0hULgorICAgICAgIEZJWE1FOiAgQWRkIGNv bmRpdGlvbnMgZm9yIHVzZXItc3BlY2lmaWVkIHRoaWNrbmVzcyBvZiBNQ19CQVIgYW5kCisgICAg ICAgICAgICAgICBNQ19IQkFSIGFzIHRvIGBtYy1yZWFsLWZha2UtY3Vyc29yJy4KKyAgIE1VTFRJ UExFX0NVUlNPUlM6ICBXZSBkbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24uCisgICBIT1JJWk9OVEFM X1JVTEVSOiAgV2Ugd2FudCBhIHVuaXZlcnNhbCBGWSBjb29yZGluYXRlIGZvciBhIGxldmVsIHJ1 bGVyLgorICAgVkVSVElDQUxfUlVMRVIgYW5kIEZJTExfQ09MVU1OOiAgV2Ugd2FudCBhbiBIIHRo YXQgZW5zdXJlcyBubyBnYXAgYmV0d2VlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByZXZpb3VzL25leHQgbGluZS4gIFRoZSBGWCBjb29yZGluYXRlIGlzIHNldAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXdoZXJlOiAgYHctPmN1cnNv ci54YCAvIGBtYy5mY194YC4gKi8KK3ZvaWQKK21jX2dldF9jdXJzb3JfZ2VvbWV0cnkgKHN0cnVj dCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IHgsIGludCAqZngsIGludCB5LAor ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmeSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQg KmgsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHR5cGVfb2ZfY3Vyc29yIGN1cnNvcl90 eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3ZCkK K3sKKyAgc3RydWN0IGdseXBoICpnbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJp eCwgcm93LCBocG9zLCB2cG9zKTsKKyAgaWYgKGdseXBoID09IE5VTEwpCisgICAgcmV0dXJuOwor ICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAqZnggPSBX SU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB4KTsKKyAgKmggPSByb3ctPnZpc2libGVf aGVpZ2h0OworICAvKiBEb24ndCBsZXQgdGhlIGN1cnNvciBleGNlZWQgdGhlIGRpbWVuc2lvbnMg b2YgdGhlIHJvdywgc28gdGhhdAorICB0aGUgdXBwZXIvbG93ZXIgc2lkZSBvZiB0aGUgYm94IGFy ZW4ndCBjbGlwcGVkLiAgKi8KKyAgaW50IHdfaGVhZGVyX2xpbmVfaGVpZ2h0ID0gV0lORE9XX0hF QURFUl9MSU5FX0hFSUdIVCAodyk7CisgIGludCB3X3RleHRfYm90dG9tX3kgPSB3aW5kb3dfdGV4 dF9ib3R0b21feSAodykgLSAqaDsKKyAgaWYgKHkgPCB3X2hlYWRlcl9saW5lX2hlaWdodCkKKyAg ICB7CisgICAgICAqaCA9IG1heCAoKmggLSAod19oZWFkZXJfbGluZV9oZWlnaHQgLSB5KSArIDEs ICpoKTsKKyAgICAgIHkgPSB3X2hlYWRlcl9saW5lX2hlaWdodCAtIDE7CisgICAgICAvLyBmcHJp bnRmIChzdGRlcnIsICJDT05ESVRJT04gIyAxXG4iKTsKKyAgICB9CisgICBlbHNlIGlmICh5ID4g d190ZXh0X2JvdHRvbV95KQorICAgICB7CisgICAgICAgKmggKz0geSAtIHdfdGV4dF9ib3R0b21f eTsKKyAgICAgICB5ID0gd190ZXh0X2JvdHRvbV95OworICAgICAgIC8vIGZwcmludGYgKHN0ZGVy ciwgIkNPTkRJVElPTiAjIDJcbiIpOworICAgICB9CisgICpmeSA9IFdJTkRPV19UT19GUkFNRV9Q SVhFTF9ZICh3LCB5KTsKKyAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgICB7CisgICAgICBjYXNl IE1DX0JBUjoKKyAgICAgICAgeworICAgICAgICAgIGlmIChjdXJzb3Jfd2lkdGggPCAxKQorICAg ICAgICAgICAgY3Vyc29yX3dpZHRoID0gbWF4IChGUkFNRV9DVVJTT1JfV0lEVEggKGYpLCAxKTsK KyAgICAgICAgICBpZiAoY3Vyc29yX3dpZHRoIDwgZ2x5cGgtPnBpeGVsX3dpZHRoKQorICAgICAg ICAgICp3ZCA9IGN1cnNvcl93aWR0aDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgY2FzZSBNQ19IQkFSOgorICAgICAgICB7CisgICAgICAgICAgaW50IGN1cnNvcl9oZWlnaHQg PSAoY3Vyc29yX3dpZHRoIDwgMSkgPyBscmludCAoMC4yNSAqICpoKSA6IGN1cnNvcl93aWR0aDsK KyAgICAgICAgICBpZiAoY3Vyc29yX2hlaWdodCA+IHJvdy0+aGVpZ2h0KQorICAgICAgICAgICAg Y3Vyc29yX2hlaWdodCA9IHJvdy0+aGVpZ2h0OworICAgICAgICAgIC8qIEN1cnNvciBzbWFsbGVy IHRoYW4gbGluZSBoZWlnaHQsIHNvIG1vdmUgZG93bi4gKi8KKyAgICAgICAgICBpZiAoKmggPiBj dXJzb3JfaGVpZ2h0KQorICAgICAgICAgICAgKmZ5ICs9ICpoIC0gY3Vyc29yX2hlaWdodDsKKyAg ICAgICAgICAqaCA9IGN1cnNvcl9oZWlnaHQ7CisgICAgICAgICAgKndkID0gZ2x5cGgtPnBpeGVs X3dpZHRoOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBjYXNlIE1DX1JJR0hU X0ZSSU5HRV9CSVRNQVA6CisgICAgICBjYXNlIE1DX0xFRlRfRlJJTkdFX0JJVE1BUDoKKyAgICAg IGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDoKKyAgICAgIGNhc2UgTUNfTk9fQ1VSU09SOgorICAg ICAgY2FzZSBNQ19GUkFNRURfQk9YOgorICAgICAgY2FzZSBNQ19GSUxMRURfQk9YOgorICAgICAg Y2FzZSBNQ19IT0xMT1dfQk9YOgorICAgICAgZGVmYXVsdDoKKyAgICAgIC8qIENvbXB1dGUgdGhl IHdpZHRoIG9mIHRoZSByZWN0YW5nbGUgdG8gZHJhdy4gIElmIG9uIGEgc3RyZXRjaCBnbHlwaCwg YW5kCisgICAgICBgeC1zdHJldGNoLWN1cnNvcicgaXMgbmlsLCBkb24ndCBkcmF3IGEgcmVjdGFu Z2xlIGFzIHdpZGUgYXMgdGhlIGdseXBoLCBidXQKKyAgICAgIHVzZSBhIGNhbm9uaWNhbCBjaGFy YWN0ZXIgd2lkdGggaW5zdGVhZC4gKi8KKyAgICAgICp3ZCA9IChnbHlwaC0+dHlwZSA9PSBTVFJF VENIX0dMWVBICisgICAgICAgICAgICAgJiYgIXhfc3RyZXRjaF9jdXJzb3JfcCkKKyAgICAgICAg ICAgID8gbWluIChGUkFNRV9DT0xVTU5fV0lEVEggKGYpLCBnbHlwaC0+cGl4ZWxfd2lkdGgpCisg ICAgICAgICAgICA6IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICB9CisvKgorICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiY3Vyc29yX3dpZHRoOiAoJWQpIHwgeCAoJWQpIHwgKmZ4ICglZCkgfCB5ICgl ZCkgfCAqZnkgKCVkKSwgKndkICglZCkgfCAqaCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICBjdXJzb3Jfd2lkdGgsIHgsICpmeCwgeSwgKmZ5LCAqd2QsICpoKTsKKyovCit9CisKK3Zv aWQKK21jX2VuZ2luZSAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0 cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5 cGgsIGludCBhcmVhLCBpbnQgcmVsYXRpdmVfeCwgaW50IHhfbGltaXQsIGludCB5LAorICAgICAg ICAgICBpbnQgaHBvcywgaW50IHZwb3MsIGVudW0gdHlwZV9vZl9jdXJzb3IgY3Vyc29yX3R5cGUs IGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKmN1cnNv cl9tYXRyaXgsIGludCBmY194LCBzdHJ1Y3QgbWNfUkdCIGZvcmVncm91bmQsCisgICAgICAgICAg IGJvb2wgYWN0aXZlX3AsIGVudW0gdHlwZV9vZl9hY3Rpb24gYWN0aW9uX3R5cGUsIGJvb2wgZHJh d19wLAorICAgICAgICAgICBlbnVtIHR5cGVfb2ZfY2FjaGUgY2FjaGVfdHlwZSkKK3sKKyAgaW50 IG9wb2ludF94ID0gdy0+Y3Vyc29yLng7CisgIGludCBvcG9pbnRfeSA9IHctPmN1cnNvci55Owor ICBpbnQgb3BvaW50X2hwb3MgPSB3LT5jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0g dy0+Y3Vyc29yLnZwb3M7CisgIGludCBmeCwgZnksIGgsIHdkOworICBtY19nZXRfY3Vyc29yX2dl b21ldHJ5ICh3LCBtYXRyaXgsIHJvdywgcmVsYXRpdmVfeCwgJmZ4LCB5LCAmZnksIGhwb3MsIHZw b3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dp ZHRoLCAmd2QpOworICBpbnQgb3BvaW50X2Z4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxf WCAodywgb3BvaW50X3gpOworICBpbnQgZmNfZnggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhF TF9YICh3LCBmY194KTsKKyAgYm9vbCB6dl9wID0gKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9B UkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAmJiBNQVRSSVhfUk9X X0VORF9DSEFSUE9TIChyb3cpID09IFpWKTsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3 LT5mcmFtZSk7CisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZG RVIgKGJ1Zik7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICBpbnQgdGV4 dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgc3RydWN0 IGdseXBoX3JvdyAqY3Vyc29yX3JvdyA9ICh3LT5jdXJzb3IudnBvcyAhPSAtMSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gTUFUUklYX1JPVyAoY3Vyc29yX21hdHJpeCwgdy0+ Y3Vyc29yLnZwb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEw7Cisg IHN0cnVjdCBnbHlwaCAqY3Vyc29yX2dseXBoID0gKHctPmN1cnNvci52cG9zICE9IC0xKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWNfZ2V0X2N1cnNvcl9nbHlwaCAodywgY3Vy c29yX21hdHJpeCwgY3Vyc29yX3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEw7CisgIGJvb2wgY3Vyc29yX2F0X2Zy aW5nZV9wID0gKGN1cnNvcl9nbHlwaCA9PSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIGN1cnNvcl9yb3cgIT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiB3LT5jdXJzb3IuaHBvcyA9PSBjdXJzb3Jfcm93LT51c2VkW1RFWFRfQVJFQV0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3Jvdy0+ZXhhY3Rfd2luZG93X3dpZHRoX2xp bmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA9PSB0ZXh0 X2FyZWFfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLngg PT0gY3Vyc29yX3Jvdy0+cGl4ZWxfd2lkdGgpOworICBib29sIGN1cnNvcl9iZXlvbmRfZnJpbmdl X3AgPSAoY3Vyc29yX2dseXBoID09IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIGN1cnNvcl9yb3cgIT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0gY3Vyc29yX3Jvdy0+dXNlZFtURVhUX0FSRUFdCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY3Vyc29yX3Jvdy0+ZXhhY3Rfd2luZG93 X3dpZHRoX2xpbmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vy c29yLnggPj0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiB3LT5jdXJzb3IueCA+PSBjdXJzb3Jfcm93LT5waXhlbF93aWR0aCk7CisgIGludCBmcmFt ZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09MVU1OX1dJRFRIIChmKTsKKyAgaW50IHRlbXBfZmFjZV9p ZCA9IGdseXBoLT5mYWNlX2lkOworICBzdHJ1Y3QgbWNfUkdCIGJhY2tncm91bmQ7CisgIG1jX3Nl dF9sc2xfYmcgKHcsIHRlbXBfZmFjZV9pZCwgJmJhY2tncm91bmQpOworICBib29sIHJlYWxfZmFr ZV9jdXJzb3JfcCA9IChvcG9pbnRfeCA9PSByZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIG9wb2ludF9ocG9zID09IGhwb3MKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgb3BvaW50X3kgPT0gZ2x5cGgtPnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgb3BvaW50X3Zwb3MgPT0gdnBvcyk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor LyogICAgICAgICAgICAgICAgICAgICAgIEJFR0lOOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19H TFlQSCAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgaWYg KGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgIHx8IGdseXBoLT50eXBlID09IEdMWVBI TEVTU19HTFlQSCkKKyAgeworICAgIGlmIChtY19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYgKHN0 ZGVyciwKKyAgICAgICAgIlxuICU1InBEImQvJS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHgl MDZ4ICU0ZCAlMS4xZCUxLjFkICU1ZCAlNGQgICUzZCAgJTNkICVzICVzXG4iLAorICAgICAgICBn bHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICgocm93LT51c2VkW2FyZWFd ID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAgICByZWxhdGl2ZV94LAor ICAgICAgICAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgICAgPyAnQycKKyAgICAg ICAgIDogJ0cnKSwKKyAgICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChn bHlwaC0+b2JqZWN0KQorICAgICAgICAgPyAnQicKKyAgICAgICAgIDogKFNUUklOR1AgKGdseXBo LT5vYmplY3QpCisgICAgICAgICAgICA/ICdTJworICAgICAgICAgICAgOiAoTklMUCAoZ2x5cGgt Pm9iamVjdCkKKyAgICAgICAgICAgICAgID8gJzAnCisgICAgICAgICAgICAgICA6ICctJykpKSwK KyAgICAgICAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAgICAgICBnbHlwaC0+dS5jaCwK KyAgICAgICAgZ2x5cGgtPmZhY2VfaWQsCisgICAgICAgIGdseXBoLT5sZWZ0X2JveF9saW5lX3As CisgICAgICAgIGdseXBoLT5yaWdodF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+eCwgZ2x5 cGgtPnksIGdseXBoLT5ocG9zLCBnbHlwaC0+dnBvcywgZ2x5cGgtPnp2X3AgPyAiWlYiIDogIi0t IiwKKyAgICAgICAgbWNfY2hhcl90b19zdHJpbmcgKGdseXBoLT51LmNoKSk7CisgIHN3aXRjaCAo YWN0aW9uX3R5cGUpCisgIHsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAg ICAgICBNVUxUSVBMRV9DVVJTT1JTOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAg ICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIE1VTFRJUExF X0NVUlNPUlM6CisgICAgeworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgs IHJlbGF0aXZlX3gsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgd2Qs IGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGJhY2tncm91bmQsCisg ICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBjYWNoZV90eXBlKTsK KyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAg ICAgICAgICBIT1JJWk9OVEFMX1JVTEVSOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAg ICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIEhPUkla T05UQUxfUlVMRVI6CisgICAgeworICAgICAgaWYgKHJlbGF0aXZlX3ggPCByb3ctPnBpeGVsX3dp ZHRoCisgICAgICAgICAgJiYgIXJlYWxfZmFrZV9jdXJzb3JfcCkKKyAgICAgICAgbWNfaGVscGVy ICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZ4LCB5LCBmeSwgaHBvcywgdnBv cywKKyAgICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwg Zm9yZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgICAgICAgICBhY3RpdmVfcCwgTUNf R0xZUEgsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAgICBpZiAoZ2x5cGggLSByb3ctPmdseXBo c1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAmJiByZWxhdGl2 ZV94IDw9IHhfbGltaXQpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocmVsYXRpdmVfeCA8IHJv dy0+cGl4ZWxfd2lkdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlbGF0aXZlX3gg Kz0gZ2x5cGgtPnBpeGVsX3dpZHRoOworICAgICAgICAgICAgICBmeCArPSBnbHlwaC0+cGl4ZWxf d2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJv dywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAg ICAgICAgICAgIHhfbGltaXQgLSByZWxhdGl2ZV94LCBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dp ZHRoLAorICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwgYWN0aXZl X3AsIE1DX0dMWVBITEVTUywgZHJhd19wLAorICAgICAgICAgICAgICAgICAgICAgY2FjaGVfdHlw ZSk7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworLyogICAgICAgICAgICAgICBWRVJUSUNBTF9SVUxFUjogIENIQVJfR0xZUEggfCBHTFlQ SExFU1NfR0xZUEggICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K KyAgICBjYXNlIFZFUlRJQ0FMX1JVTEVSOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGds eXBoX2ZsYXZvciA9IChjdXJzb3JfYXRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9wKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+Y29udGludWVkX3AKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9y aWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJ Q0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2F0 X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ct PnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAoY3Vyc29yX2JleW9uZF9mcmluZ2VfcAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNB TF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog KGN1cnNvcl9iZXlvbmRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIGN1cnNvcl9yb3ctPnVzZWRbVEVYVF9BUkVBXSAhPSAxCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19SRVZFUlNFRF9WRVJU SUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdseXBoIC0g cm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA+PSByb3ctPnBpeGVsX3dp ZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVT UworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoenZfcCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAgICBpZiAoZ2x5cGhfZmxh dm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgIHx8IGdseXBoX2Zs YXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8 fCBnbHlwaF9mbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgIHx8 IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2 b3IgPT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSKQorICAgICAgICBjdXJzb3JfdHlwZSA9IE1D X1JJR0hUX0ZSSU5HRV9CSVRNQVA7CisgICAgICB3ZCA9IDE7CisgICAgICBtY19oZWxwZXIgKHcs IG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgb3BvaW50X2Z4LCB5LCBmeSwgaHBvcywg dnBvcywKKyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgs IGZvcmVncm91bmQsIGJhY2tncm91bmQsCisgICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBnbHlw aF9mbGF2b3IsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgRklMTF9DT0xVTU46ICBDSEFS X0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBIICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICovCisgICAgY2FzZSBGSUxMX0NPTFVNTjoKKyAgICB7CisgICAgICBlbnVtIG1j X2ZsYXZvciBnbHlwaF9mbGF2b3IgPSAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09 IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgJiYgZmNfeCA+PSByb3ct PnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAg ICAgICAgICAgICAgICA6ICh6dl9wKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExF U1MKKyAgICAgICAgICAgICAgICAgICA6ICghTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisg ICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgY2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95 ID09IHkKKyAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB2cG9zKQorICAg ICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6IE1D X0dMWVBIOworICAgICAgd2QgPSAxOworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywg Z2x5cGgsIHJlbGF0aXZlX3gsIGZjX2Z4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAg ICAgICAgd2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGJhY2tn cm91bmQsCisgICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwg Y2FjaGVfdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KKyAgfQorICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAg ICAgICAgICAgRU5EOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAgICAg ICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJFR0lOOiAgU1RSRVRDSF9HTFlQ SCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K KyAgZWxzZSBpZiAoZ2x5cGgtPnR5cGUgPT0gU1RSRVRDSF9HTFlQSCkKKyAgeworICAgIGlmICht Y19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgIlxuICU1InBEImQv JS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4ICU0ZCAlMS4xZCUxLjFkICU1ZCAlNGQg ICUzZCAgJTNkICVzICVzXG4iLAorICAgICAgICBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJF QV0sCisgICAgICAgICgocm93LT51c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVh XSAtIDEpLAorICAgICAgICByZWxhdGl2ZV94LAorICAgICAgICAnUycsCisgICAgICAgIGdseXBo LT5jaGFycG9zLAorICAgICAgICAoQlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgID8g J0InCisgICAgICAgICA6IChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAn UycKKyAgICAgICAgICAgIDogKE5JTFAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICAgICA/ ICcwJworICAgICAgICAgICAgICAgOiAnLScpKSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0 aCwKKyAgICAgICAgMHUsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+ bGVmdF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAg ICAgZ2x5cGgtPngsIGdseXBoLT55LCBnbHlwaC0+aHBvcywgZ2x5cGgtPnZwb3MsIGdseXBoLT56 dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICJcXFMiKTsKKyAgc3dpdGNoIChhY3Rpb25fdHlw ZSkKKyAgeworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAg ICAgIE1VTFRJUExFX0NVUlNPUlM6ICBTVFJFVENIX0dMWVBIICAgICAgICAgICAgICAgICAgICAg Ki8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoK KyAgICB7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVf eCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29y X3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAg ICAgICAgYWN0aXZlX3AsIE1DX0dMWVBILCBkcmF3X3AsIGNhY2hlX3R5cGUpOworICAgICAgYnJl YWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAg ICAgICAgIEhPUklaT05UQUxfUlVMRVI6ICBTVFJFVENIX0dMWVBIICAgICAgICAgICAgICAgICAg ICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgSE9SSVpPTlRBTF9SVUxF UjoKKyAgICB7CisgICAgICBpZiAocmVsYXRpdmVfeCA8IHJvdy0+cGl4ZWxfd2lkdGgKKyAgICAg ICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJp eCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAg ICAgICAgICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5k LCBiYWNrZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJh d19wLCBjYWNoZV90eXBlKTsKKyAgICAgIGlmIChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJF QV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICYmIHJlbGF0aXZlX3ggPD0geF9s aW1pdCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChyZWxhdGl2ZV94IDwgcm93LT5waXhlbF93 aWR0aCkKKyAgICAgICAgICAgIHJlbGF0aXZlX3ggKz0gZ2x5cGgtPnBpeGVsX3dpZHRoOworICAg ICAgICAgIHRlbXBfZmFjZV9pZCA9IChyb3ctPmZpbGxfbGluZV9wKQorICAgICAgICAgICAgICAg ICAgICAgICAgID8gZ2x5cGgtPmZhY2VfaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IERF RkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGJhY2tncm91bmQ7CisgICAg ICAgICAgbWNfc2V0X2xzbF9iZyAodywgdGVtcF9mYWNlX2lkLCAmYmFja2dyb3VuZCk7CisgICAg ICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZ4LCB5 LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgIHhfbGltaXQgLSByZWxhdGl2 ZV94LCBoLCBjdXJzb3JfdHlwZSwgeF9saW1pdCAtIHJlbGF0aXZlX3gsCisgICAgICAgICAgICAg ICAgICAgICBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBhY3RpdmVfcCwgTUNfR0xZUEhMRVNTLCBk cmF3X3AsCisgICAgICAgICAgICAgICAgICAgICBjYWNoZV90eXBlKTsKKyAgICAgICAgfQorICAg ICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAg ICAgICAgICAgICAgICAgVkVSVElDQUxfUlVMRVI6ICBTVFJFVENIX0dMWVBIICAgICAgICAgICAg ICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgVkVSVElDQUxf UlVMRVI6CisgICAgeworICAgICAgaWYgKHJvdy0+ZmlsbF9saW5lX3AKKyAgICAgICAgICAmJiBn bHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAg ICAgICAgICYmIG9wb2ludF94ID4gcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAg ICAgICAgdGVtcF9mYWNlX2lkID0gZ2x5cGgtPmZhY2VfaWQ7CisgICAgICAgIGVsc2UgaWYgKCFy b3ctPmZpbGxfbGluZV9wCisgICAgICAgICAgICAgICAgICYmIGdseXBoIC0gcm93LT5nbHlwaHNb VEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICYmIG9w b2ludF94ID4gcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAgICB0ZW1w X2ZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICBzdHJ1Y3QgbWNfUkdCIGJhY2tncm91 bmQ7CisgICAgICBtY19zZXRfbHNsX2JnICh3LCB0ZW1wX2ZhY2VfaWQsICZiYWNrZ3JvdW5kKTsK KyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IChjdXJzb3JfYXRfZnJpbmdlX3AK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9w KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JB Ul9CQUNLU0xBU0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNv cl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg IXJvdy0+Y29udGludWVkX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJP VworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2JleW9uZF9m cmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm93LT50 cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9iZXlvbmRfZnJpbmdlX3AKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9yb3ctPnVzZWRbVEVYVF9B UkVBXSAhPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93 LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogTUNfR0xZUEhMRVNTOworICAgICAgaWYgKGdseXBoX2ZsYXZvciA9PSBN Q19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0g TUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwgZ2x5cGhf Zmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICB8fCBnbHlwaF9m bGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSCisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1D X1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgY3Vyc29yX3R5cGUgPSBNQ19SSUdIVF9G UklOR0VfQklUTUFQOworICAgICAgd2QgPSAxOworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgs IHJvdywgZ2x5cGgsIG9wb2ludF94LCBvcG9pbnRfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAg ICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3Vu ZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgICAgICAgYWN0aXZlX3AsIGdseXBoX2ZsYXZvciwg ZHJhd19wLCBjYWNoZV90eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxMX0NPTFVNTjogIFNU UkVUQ0hfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KKyAgICBjYXNlIEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGlmIChyb3ctPmZpbGxf bGluZV9wCisgICAgICAgICAgJiYgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJv dy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAmJiBmY194ID4gcmVsYXRpdmVfeCArIGdseXBo LT5waXhlbF93aWR0aCkKKyAgICAgICAgdGVtcF9mYWNlX2lkID0gZ2x5cGgtPmZhY2VfaWQ7Cisg ICAgICAgIGVsc2UgaWYgKCFyb3ctPmZpbGxfbGluZV9wCisgICAgICAgICAgICAgICAgICYmIGds eXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAg ICAgICAgICAgICAgICYmIGZjX3ggPiByZWxhdGl2ZV94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoKQor ICAgICAgICAgIHRlbXBfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgIHN0cnVjdCBt Y19SR0IgYmFja2dyb3VuZDsKKyAgICAgIG1jX3NldF9sc2xfYmcgKHcsIHRlbXBfZmFjZV9pZCwg JmJhY2tncm91bmQpOworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gTUNfR0xZ UEhMRVNTOworICAgICAgd2QgPSAxOworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywg Z2x5cGgsIGZjX3gsIGZjX2Z4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAg d2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGJhY2tncm91bmQs CisgICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgY2FjaGVf dHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAg fQorICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVORDogIFNUUkVUQ0hfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICAq LworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTjogIElNQUdFX0dMWVBIICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgZWxz ZSBpZiAoZ2x5cGgtPnR5cGUgPT0gSU1BR0VfR0xZUEgpCisgIHsKKyAgICBpZiAobWNfc3RkZXJy X3ApCisgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICJcbiAlNSJwRCJkLyUtNWQgJTVk ICVjICU5InBEImQgJWMgJTNkIDB4JTA2eCAlNGQgJTEuMWQlMS4xZCAlNWQgJTRkICAlM2QgICUz ZCAlcyAlY1xuIiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAg ICAgICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwK KyAgICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJ0knLAorICAgICAgICBnbHlwaC0+Y2hhcnBv cywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICA/ICdCJworICAg ICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ1MnCisgICAg ICAgICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgICAgPyAnMCcKKyAg ICAgICAgICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4ZWxfd2lkdGgsCisgICAg ICAgICh1bnNpZ25lZCBpbnQpIGdseXBoLT51LmltZ19pZCwKKyAgICAgICAgZ2x5cGgtPmZhY2Vf aWQsCisgICAgICAgIGdseXBoLT5sZWZ0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT5yaWdo dF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+eCwgZ2x5cGgtPnksIGdseXBoLT5ocG9zLCBn bHlwaC0+dnBvcywgZ2x5cGgtPnp2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgJy4nKTsKKyAg c3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAg ICAgICAgICAgICAgICAgICAgICAgICBNVUxUSVBMRV9DVVJTT1JTOiAgSU1BR0VfR0xZUEggICAg ICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2Ug TVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19C T1g7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwg ZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5 cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgICAg ICAgYWN0aXZlX3AsIE1DX0dMWVBILCBkcmF3X3AsIGNhY2hlX3R5cGUpOworICAgICAgYnJlYWs7 CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAg ICAgICBIT1JJWk9OVEFMX1JVTEVSOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAg Ki8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgSE9SSVpPTlRBTF9SVUxFUjoK KyAgICB7CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBpZiAoIXJl YWxfZmFrZV9jdXJzb3JfcCkKKyAgICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5 cGgsIHJlbGF0aXZlX3gsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAg ICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3Vu ZCwKKyAgICAgICAgICAgICAgICAgICBhY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgY2FjaGVf dHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8q ICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSVElDQUxfUlVMRVI6ICBJTUFHRV9HTFlQSCAg ICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2Fz ZSBWRVJUSUNBTF9SVUxFUjoKKyAgICB7CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19C T1g7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwg ZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5 cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgICAg ICAgYWN0aXZlX3AsIE1DX0dMWVBILCBkcmF3X3AsIGNhY2hlX3R5cGUpOworICAgICAgYnJlYWs7 CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGSUxMX0NPTFVNTjogIElNQUdFX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgRklMTF9DT0xVTU46CisgICAg eworICAgICAgY3Vyc29yX3R5cGUgPSBNQ19IT0xMT1dfQk9YOworICAgICAgbWNfaGVscGVyICh3 LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywK KyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVn cm91bmQsIGJhY2tncm91bmQsCisgICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBNQ19HTFlQSCwg ZHJhd19wLCBjYWNoZV90eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVORDogIElNQUdFX0dMWVBIICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTjogIENPTVBP U0lURV9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBDT01QT1NJVEVfR0xZUEgpCisgIHsK KyAgICBpZiAobWNfc3RkZXJyX3ApCisgICAgICB7CisgICAgICAgIGZwcmludGYgKHN0ZGVyciwK KyAgICAgICAgICAiXG4gJTUicEQiZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNngi LAorICAgICAgICAgIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwKKyAgICAgICAgICAo KHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAg ICAgICByZWxhdGl2ZV94LAorICAgICAgICAgICcrJywKKyAgICAgICAgICBnbHlwaC0+Y2hhcnBv cywKKyAgICAgICAgICAoQlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgPyAnQicK KyAgICAgICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgICAgPyAn UycKKyAgICAgICAgICAgICAgOiAoTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgICAg ICAgPyAnMCcKKyAgICAgICAgICAgICAgICAgOiAnLScpKSksCisgICAgICAgICAgZ2x5cGgtPnBp eGVsX3dpZHRoLAorICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGdseXBoLT51LmNtcC5pZCk7Cisg ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAlNGQgJTEuMWQlMS4xZCIsCisgICAgICAgICAgZ2x5 cGgtPmZhY2VfaWQsCisgICAgICAgICAgZ2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAg ICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCk7CisgICAgICBpZiAoZ2x5cGgtPnUuY21wLmF1dG9t YXRpYykKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICU1ZCAlNGQgICUzZCAgJTNkICVzIC4g WyVkLSVkXVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC0+eCwgZ2x5cGgtPnks IGdseXBoLT5ocG9zLCBnbHlwaC0+dnBvcywgZ2x5cGgtPnp2X3AgPyAiWlYiIDogIi0tIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC0+c2xpY2UuY21wLmZyb20sIGdseXBoLT5zbGlj ZS5jbXAudG8pOworICAgICAgICBlbHNlCisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4i KTsKKyAgICAgIH0KKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgTVVMVElQTEVfQ1VSU09SUzogIENP TVBPU0lURV9HTFlQSCAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBtY19oZWxwZXIg KHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9z LAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9y ZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgICAgICAgYWN0aXZlX3AsIE1DX0dMWVBI LCBkcmF3X3AsIGNhY2hlX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgSE9SSVpPTlRBTF9SVUxFUjog IENPTVBPU0lURV9HTFlQSCAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworICAgIGNhc2UgSE9SSVpPTlRBTF9SVUxFUjoKKyAgICB7CisgICAgICBpZiAocmVs YXRpdmVfeCA8PSB4X2xpbWl0CisgICAgICAgICAgJiYgIXJlYWxfZmFrZV9jdXJzb3JfcCkKKyAg ICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZ4LCB5 LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUs IGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgICAgICAg ICBhY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAgICBpZiAoZ2x5 cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAg ICAgICAmJiByZWxhdGl2ZV94IDw9IHhfbGltaXQpCisgICAgICAgIHsKKyAgICAgICAgICByZWxh dGl2ZV94ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICB3aGlsZSAocmVsYXRpdmVf eCA8PSB4X2xpbWl0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtY19oZWxwZXIgKHcs IG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAor ICAgICAgICAgICAgICAgICAgICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRo LCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2 ZV9wLCBNQ19HTFlQSExFU1MsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAgICAgICAgICAgIHJl bGF0aXZlX3ggKz0gZnJhbWVfY2hhcl93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAg ICAgICAgICAgICAgICAgICBWRVJUSUNBTF9SVUxFUjogIENPTVBPU0lURV9HTFlQSCAgICAgICAg ICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgVkVSVElD QUxfUlVMRVI6CisgICAgeworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gKGN1 cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IHJvdy0+Y29udGludWVkX3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ID8gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiAhcm93LT5jb250aW51ZWRfcAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFSCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChjdXJzb3JfYXRfZnJpbmdlX3AKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJvdy0+dHJ1bmNhdGVkX29uX3Jp Z2h0X3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElD QUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IChjdXJzb3JfYmV5b25kX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJP VworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2JleW9uZF9m cmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29y X3Jvdy0+dXNlZFtURVhUX0FSRUFdICE9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhU X0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIG9wb2ludF94ID49IHJvdy0+cGl4ZWxfd2lkdGgpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6ICh6dl9wKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBNQ19HTFlQSDsKKyAgICAgIGlmIChnbHlwaF9mbGF2b3IgPT0gTUNfVkVSVElD QUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVS U0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9 PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09 IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNF RF9WRVJUSUNBTF9CQVIpCisgICAgICAgIGN1cnNvcl90eXBlID0gTUNfUklHSFRfRlJJTkdFX0JJ VE1BUDsKKyAgICAgIHdkID0gMTsKKyAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGds eXBoLCByZWxhdGl2ZV94LCBvcG9pbnRfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAg ICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFj a2dyb3VuZCwKKyAgICAgICAgICAgICAgICAgYWN0aXZlX3AsIGdseXBoX2ZsYXZvciwgZHJhd19w LCBjYWNoZV90eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIEZJTExfQ09MVU1OOiAgQ09NUE9TSVRF X0dMWVBIICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K KyAgICBjYXNlIEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBo X2ZsYXZvciA9IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2Fy ZWFdIC0gMQorICAgICAgICAgICAgICAgICAgICAgICYmIGZjX3ggPiByZWxhdGl2ZV94KQorICAg ICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6ICh6 dl9wKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAg ICAgICA6ICghTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgICAg ICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfdmVydGljYWxfcnVs ZXIpKQorICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95ID09IHkKKyAgICAgICAgICAg ICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB2cG9zKQorICAgICAgICAgICAgICAgICAgICAg PyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6IE1DX0dMWVBIOworICAgICAgd2Qg PSAxOworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gs IGZjX2Z4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNv cl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGJhY2tncm91bmQsCisgICAgICAgICAg ICAgICAgIGFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAg ICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgfQorICB9CisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5E OiAgQ09NUE9TSVRFX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJFR0lOOiAgWFdJREdFVF9HTFlQSCAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgZWxzZSBpZiAoZ2x5cGgt PnR5cGUgPT0gWFdJREdFVF9HTFlQSCkKKyAgeworI2lmbmRlZiBIQVZFX1hXSURHRVRTCisgICAg ZWFzc3VtZSAoZmFsc2UpOworI2Vsc2UKKyAgICBpZiAobWNfc3RkZXJyX3ApCisgICAgICBmcHJp bnRmIChzdGRlcnIsCisgICAgICAgICJcbiAgJTVkLyUtNWQgJTVkICU0YyAlNmQgJWMgJTNkIDB4 JTA1eCAlNGQgJTEuMWQlMS4xZCAlNWQgJTRkICAlM2QgICUzZCAlcyAlY1xuIiwKKyAgICAgICAg Z2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAoKHJvdy0+dXNlZFthcmVh XSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAgICAgcmVsYXRpdmVfeCwK KyAgICAgICAgJ1gnLAorICAgICAgICBnbHlwaC0+Y2hhcnBvcywKKyAgICAgICAgKEJVRkZFUlAg KGdseXBoLT5vYmplY3QpCisgICAgICAgICA/ICdCJworICAgICAgICAgOiAoU1RSSU5HUCAoZ2x5 cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ1MnCisgICAgICAgICAgICA6ICctJykpLAorICAg ICAgICBnbHlwaC0+cGl4ZWxfd2lkdGgsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAg ICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVf cCwKKyAgICAgICAgZ2x5cGgtPnUueHdpZGdldCwKKyAgICAgICAgZ2x5cGgtPngsIGdseXBoLT55 LCBnbHlwaC0+aHBvcywgZ2x5cGgtPnZwb3MsIGdseXBoLT56dl9wID8gIlpWIiA6ICItLSIsCisg ICAgICAgICcuJyk7CisjZW5kaWYKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJUExFX0NV UlNPUlM6ICBYV0lER0VUX0dMWVBIICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBt Y19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBo cG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93 aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgICAgICAgYWN0aXZlX3As IE1DX0dMWVBILCBkcmF3X3AsIGNhY2hlX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIEhPUklaT05U QUxfUlVMRVI6ICBYV0lER0VUX0dMWVBIICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgSE9SSVpPTlRBTF9SVUxFUjoKKyAgICB7CisgICAg ICBpZiAocmVsYXRpdmVfeCA8PSB4X2xpbWl0CisgICAgICAgICAgJiYgIXJlYWxfZmFrZV9jdXJz b3JfcCkKKyAgICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZl X3gsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vy c29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwKKyAgICAgICAg ICAgICAgICAgICBhY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAg ICBpZiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAt IDEKKyAgICAgICAgICAmJiByZWxhdGl2ZV94IDw9IHhfbGltaXQpCisgICAgICAgIHsKKyAgICAg ICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICB3aGlsZSAo cmVsYXRpdmVfeCA8PSB4X2xpbWl0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtY19o ZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9z LCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vy c29yX3dpZHRoLCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAg ICAgIGFjdGl2ZV9wLCBNQ19HTFlQSExFU1MsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAgICAg ICAgICAgIHJlbGF0aXZlX3ggKz0gZnJhbWVfY2hhcl93aWR0aDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisv KiAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSVElDQUxfUlVMRVI6ICBYV0lER0VUX0dMWVBI ICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNh c2UgVkVSVElDQUxfUlVMRVI6CisgICAgeworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxh dm9yID0gKGN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIHJvdy0+Y29udGludWVkX3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93LT5jb250aW51ZWRfcAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3Ap CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFS CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChjdXJzb3JfYXRfZnJpbmdl X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJvdy0+dHJ1bmNh dGVkX29uX3JpZ2h0X3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g TUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IChjdXJzb3JfYmV5b25kX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9S SUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29y X2JleW9uZF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgY3Vyc29yX3Jvdy0+dXNlZFtURVhUX0FSRUFdICE9IDEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JB UgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGggLSByb3ctPmds eXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID49IHJvdy0+cGl4ZWxfd2lkdGgpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh6dl9wKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBNQ19HTFlQSDsKKyAgICAgIGlmIChnbHlwaF9mbGF2b3IgPT0g TUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09 IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgIHx8IGdseXBo X2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAgICAgfHwgZ2x5cGhf Zmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBN Q19SRVZFUlNFRF9WRVJUSUNBTF9CQVIpCisgICAgICAgIGN1cnNvcl90eXBlID0gTUNfUklHSFRf RlJJTkdFX0JJVE1BUDsKKyAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGdseXBoLCBy ZWxhdGl2ZV94LCBvcG9pbnRfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAg ICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYmFja2dyb3Vu ZCwKKyAgICAgICAgICAgICAgICAgYWN0aXZlX3AsIGdseXBoX2ZsYXZvciwgZHJhd19wLCBjYWNo ZV90eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor LyogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxMX0NPTFVNTjogIFhXSURHRVRfR0xZUEgg ICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBj YXNlIEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZv ciA9IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0g MQorICAgICAgICAgICAgICAgICAgICAgICYmIGZjX3ggPiByZWxhdGl2ZV94KQorICAgICAgICAg ICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6ICh6dl9wKQor ICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6 ICghTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgICAgICAgJiYg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfdmVydGljYWxfcnVsZXIpKQor ICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95ID09IHkKKyAgICAgICAgICAgICAgICAg ICAgICAmJiBvcG9pbnRfdnBvcyA9PSB2cG9zKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19H TFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6IE1DX0dMWVBIOworICAgICAgbWNfaGVscGVy ICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZjX2Z4LCB5LCBmeSwgaHBvcywg dnBvcywKKyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgs IGZvcmVncm91bmQsIGJhY2tncm91bmQsCisgICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBnbHlw aF9mbGF2b3IsIGRyYXdfcCwgY2FjaGVfdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgfQorICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K Ky8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVORDogIFhXSURHRVRfR0xZUEggICAg ICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit9CisK K3ZvaWQKK21jX2RyYXdfcm93IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4 ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKKyAgICAgICAgICAgICBzdHJ1Y3QgZ2x5 cGggKnN0YXJ0LCBpbnQgeCwgaW50IGhwb3NfbGVuZ3RoLCBpbnQgdnBvcywKKyAgICAgICAgICAg ICBpbnQgYm90dG9tX3Zwb3MsIGJvb2wgYWN0aXZlX3AsIHN0cnVjdCBnbHlwaF9tYXRyaXggKmN1 cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgaW50IGZjX3gsIHN0cnVjdCBtY19SR0IgY2hfZm9y ZWdyb3VuZCwgc3RydWN0IG1jX1JHQiBmY19mb3JlZ3JvdW5kLAorICAgICAgICAgICAgIGJvb2wg ZHJhd19wKQoreworICAvLyAgY2xvY2tfdCBjbG9ja19zdGFydCA9IGNsb2NrKCk7CisgIC8qIE5U IEVtYWNzIGNyYXNoZXMgb24gc3RhcnR1cCB3aXRob3V0IGEgYEJVRkZFUlAnIGNoZWNrIGluIGB1 cGRhdGVfd2luZG93Jy4gKi8KKyAgaWYgKCFCVUZGRVJQICh3LT5jb250ZW50cykpCisgICAgcmV0 dXJuOworICBpZiAoTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19jb25mKSkK KyAgICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykp CisgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX3Zpc2libGUp KSkKKyAgICByZXR1cm47CisgIGlmICh2cG9zID09IGJvdHRvbV92cG9zKQorICAgIHJldHVybjsK KyAgaWYgKCFyb3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICByZXR1cm47CisgIGludCBocG9zX3N0 YXJ0ID0gc3RhcnQgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdOworICBpZiAodHJhY2VfcmVkaXNw bGF5X3ApCisgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19yb3cgKCVzKTogIHZwb3MgKCVk KSB8IGhwb3MgKCVkKSB8IGxlbiAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgbWNfd2lu ZG93ICh3KSwgdnBvcywgaHBvc19zdGFydCwgaHBvc19sZW5ndGgpOworICBMaXNwX09iamVjdCB3 aW5kb3c7CisgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhG UkFNRSAody0+ZnJhbWUpOworICBMaXNwX09iamVjdCBidWYgPSB3LT5jb250ZW50czsKKyAgQ0hF Q0tfQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoYnVmKTsKKyAg aW50IG9wb2ludF9meCwgb3BvaW50X2Z5LCBvcG9pbnRfd2QsIG9wb2ludF9oOworICBpbnQgdGV4 dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgaW50IGhl YWRlcl9saW5lX2Zvcm1hdCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBzdHJ1 Y3QgZ2x5cGhfcm93ICpjdXJzb3Jfcm93ID0gKHctPmN1cnNvci52cG9zICE9IC0xKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQVRSSVhfUk9XIChjdXJzb3JfbWF0cml4LCB3 LT5jdXJzb3IudnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTDsK KyAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5cGggPSAody0+Y3Vyc29yLnZwb3MgIT0gLTEpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBj dXJzb3JfbWF0cml4LCBjdXJzb3Jfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdy0+Y3Vyc29yLmhwb3MsIHctPmN1cnNvci52cG9zKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTDsKKyAgYm9vbCBjdXJzb3JfYXRf ZnJpbmdlX3AgPSAoY3Vyc29yX2dseXBoID09IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgY3Vyc29yX3JvdyAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIHctPmN1cnNvci5ocG9zID09IGN1cnNvcl9yb3ctPnVzZWRbVEVYVF9BUkVBXQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXJzb3Jfcm93LT5leGFjdF93aW5kb3dfd2lkdGhf bGluZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID09IHRl eHRfYXJlYV93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3Iu eCA9PSBjdXJzb3Jfcm93LT5waXhlbF93aWR0aCk7CisgIGJvb2wgY3Vyc29yX2JleW9uZF9mcmlu Z2VfcCA9IChjdXJzb3JfZ2x5cGggPT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgY3Vyc29yX3JvdyAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiB3LT5jdXJzb3IuaHBvcyA9PSBjdXJzb3Jfcm93LT51c2VkW1RFWFRfQVJFQV0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFjdXJzb3Jfcm93LT5leGFjdF93aW5k b3dfd2lkdGhfbGluZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5j dXJzb3IueCA+PSB0ZXh0X2FyZWFfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHctPmN1cnNvci54ID49IGN1cnNvcl9yb3ctPnBpeGVsX3dpZHRoKTsKKyAgLy8gIGJv b2wgY2dfcCA9IGN1cnNvcl9nbHlwaCA9PSBOVUxMOworICAvLyAgYm9vbCBjcl9wID0gY3Vyc29y X3JvdyAhPSBOVUxMOworICAvLyAgYm9vbCBjaF9jcnUgPSB3LT5jdXJzb3IuaHBvcyA9PSBjdXJz b3Jfcm93LT51c2VkW1RFWFRfQVJFQV07CisgIC8vICBib29sIGNyZXd3bF9wID0gIWN1cnNvcl9y b3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3A7CisgIC8vICBib29sIGN4X3Rhd19wID0gdy0+ Y3Vyc29yLnggPj0gdGV4dF9hcmVhX3dpZHRoOworICAvLyAgYm9vbCBjeF9jcnB3X3AgPSB3LT5j dXJzb3IueCA+PSBjdXJzb3Jfcm93LT5waXhlbF93aWR0aDsKKyAgLy8gIGZwcmludGYgKHN0ZGVy ciwgInZwb3MgKCVkKSB8IGhwb3MgKCVkLyVkKSB8IGN1cnNvci54ICglZCkgfCB0YXcgKCVkKSB8 IHVzZWQgKCVkKSB8IHJ0X3AgKCVkKVxuXAorICAvLyAgICBjZ19wICglZCksIGNyX3AgKCVkKSwg Y2hfY3J1ICglZCksIGNyZXd3bF9wICglZCksIGN4X3Rhd19wICglZCksIGN4X2NycHdfcCAoJWQp XG4iLAorICAvLyAgICB2cG9zLCBocG9zX3N0YXJ0LCBocG9zX2xlbmd0aCwgdy0+Y3Vyc29yLngs IHRleHRfYXJlYV93aWR0aCwgcm93LT51c2VkW1RFWFRfQVJFQV0sIHJvdy0+dHJ1bmNhdGVkX29u X3JpZ2h0X3AsCisgIC8vICAgIGNnX3AsIGNyX3AsIGNoX2NydSwgY3Jld3dsX3AsIGN4X3Rhd19w LCBjeF9jcnB3X3ApOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBFUkFTRSBUSEUgUkVBTCBDVVJTT1IKKyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworICBpZiAoZHJhd19wCisgICAgICAmJiBjdXJzb3JfZ2x5cGggIT0gTlVMTAorICAgICAgJiYg dy0+cGh5c19jdXJzb3Jfb25fcAorICAgICAgJiYgdnBvcyA9PSB3LT5jdXJzb3IudnBvcykKKyAg ICB7CisgICAgICBtY19lcmFzZV9jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB3LT5jdXJzb3IueCwg dy0+Y3Vyc29yLnksIHctPmN1cnNvci5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICB3LT5j dXJzb3IudnBvcywgTUNfR0xZUEgsIHctPnBoeXNfY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAg ICAgICAgICAgIGN1cnNvcl9nbHlwaC0+cGl4ZWxfd2lkdGgpOworICAgICAgdy0+cGh5c19jdXJz b3Jfb25fcCA9IGZhbHNlOworICAgICAgdy0+cGh5c19jdXJzb3JfdHlwZSA9IE5PX0NVUlNPUjsK KyAgICB9CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgUkVQTEFDRSBUSEUgUkVBTCBDVVJTT1IKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICBl bnVtIGZhY2VfaWQgYmdfZmFjZV9pZCA9IChjdXJzb3JfZ2x5cGggIT0gTlVMTCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICA/IGN1cnNvcl9nbHlwaC0+ZmFjZV9pZAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICBzdHJ1Y3QgbWNfUkdCIGN1cnNv cl9iZzsKKyAgbWNfc2V0X2xzbF9iZyAodywgYmdfZmFjZV9pZCwgJmN1cnNvcl9iZyk7CisgIC8q IEZJWE1FOiAgUHV0IGluIHNvbWUgY29kZSB0byBkZWZhdWx0IHRvIE1DX0hPTExPV19CT1ggaWYg dGhlIHVzZXIgaGFzCisgIHVud2l0dGluZ2x5IGNvbWUgdXAgd2l0aCBzb21lIHVuYWNjZXB0YWJs ZSBmb3JtIG9mIHVucmVjb2duaXplZCBjdXJzb3IgdHlwZS4gKi8KKyAgTGlzcF9PYmplY3QgbGlz cF90eXBlID0gQlZBUiAoYiwgbWNfcmVhbF9mYWtlX2N1cnNvcik7CisgIGVudW0gdHlwZV9vZl9j dXJzb3IgY3Vyc29yX3R5cGUgPSAoQ09OU1AgKGxpc3BfdHlwZSkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyBtY19saXNwX3RvX2N1cnNvcl90eXBlIChYQ0FSIChs aXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWNf bGlzcF90b19jdXJzb3JfdHlwZSAobGlzcF90eXBlKTsKKyAgaW50IGN1cnNvcl93aWR0aCA9IChD T05TUCAobGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgID8gWEZJWE5VTSAoWENBUiAo WENEUiAobGlzcF90eXBlKSkpCisgICAgICAgICAgICAgICAgICAgICA6IC0xOworICBlbnVtIGZh Y2VfaWQgY3Vyc29yX2ZhY2VfaWQgPQorICAgICghYWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3RpdmVfd2luZG93cykpKQorICAgID8g bG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1pbmFj dGl2ZS1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu ICgiKy1yZWFsLWZha2UtY3Vyc29yLWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpjdXJz b3JfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgY3Vyc29yX2ZhY2VfaWQpOworICBMaXNwX09iamVj dCBjdXJzb3JfY29sb3IgPSBjdXJzb3JfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRF WF07CisgIHN0cnVjdCBtY19SR0IgY3Vyc29yX2ZnOworICBtY194d19jb2xvcl92YWx1ZXMgKHcs IGN1cnNvcl9jb2xvciwgJmN1cnNvcl9mZyk7CisgIC8qIEZJWE1FOiAgVGhpcyBjcmVhdGVzIHR3 byBNQ19HTFlQSCBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgbmVlZHMgdG8gYmUKKyAgcmVkdWNl ZCB0byBqdXN0IG9uZSBNQ19HTFlQSCwgb25lIHZlcnRpY2FsIGJhciwgYW5kIG9uZSBob3Jpem9u dGFsIGJhci4gIFRoZQorICBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IHRoZSBsZXR0ZXIgYXQg cG9pbnQgZ2V0cyB3cml0dGVuIHR3aWNlIGFuZCB3aWxsIGJlCisgIGp1c3QgYSBsaXR0bGUgdGhp Y2tlciB0aGFuIGFzIHdvdWxkIG5vcm1hbGx5IGJlIHRoZSBjYXNlLiAqLworICBib29sIGZpbGxf Y29sdW1uX3RydW1wc19wID0gKCFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHct PmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgdy0+Y3Vyc29yLnggPT0gZmNfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm ICFjdXJzb3JfYXRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAh Y3Vyc29yX2JleW9uZF9mcmluZ2VfcCk7CisgIC8qIEZJWE1FOiAgRGV2aXNlIGEgc3lzdGVtIHNv IHRoYXQgdGhpcyBvbmx5IGhhcHBlbnMgb25jZSBwZXIgcm93IHdoZW4KKyAgYGhwb3NfbGVuZ3Ro YCBpcyBsZXNzIHRoYW4gdGhlIGVudGlyZSByb3cuICovCisgIGlmICh2cG9zID09IHctPmN1cnNv ci52cG9zCisgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9z c2hhaXJzKSkKKyAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNo X2hvcml6b250YWxfcnVsZXIpKSkKKyAgICB7CisgICAgICAvKiBmcmluZ2UgYml0bWFwcyB1c2Ug ZmFjZV9pZCB0byBzZXQgdGhlIGZvcmVncm91bmQgY29sb3IuICBUaGUgb3ZlcmxheS1hcnJvdwor ICAgICAgaXMgcHJlc2VudGx5IHRoZSBvbmx5IHNpdHVhdGlvbiB3aGVyZSB0aGUgYGFjdGl2ZV9w YCBhbmQgYG1pbmltYWxfcGAgYXJlCisgICAgICB1c2VkIHRvIGRldGVybWluZSB0aGUgYXBwbGlj YWJsZSBmYWNlX2lkLiAqLworICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmcgPSB7LnJlZCA9IC0x LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSAtMS4wLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUgPSAtMS4wfTsKKyAgICAgIG1jX2hlbHBlciAo dywgbWF0cml4LCByb3csIGN1cnNvcl9nbHlwaCwgdy0+Y3Vyc29yLngsIC0xLCB3LT5jdXJzb3Iu eSwgLTEsCisgICAgICAgICAgICAgICAgIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywg LTEsIC0xLCBNQ19MRUZUX0ZSSU5HRV9CSVRNQVAsIC0xLAorICAgICAgICAgICAgICAgICBsc2xf ZmcsIGN1cnNvcl9iZywgYWN0aXZlX3AsIE1DX09WRVJMQVlfQVJST1dfQklUTUFQLCBkcmF3X3As CisgICAgICAgICAgICAgICAgIENIX0NBQ0hFKTsKKyAgICB9CisgIGlmIChjdXJzb3JfYXRfZnJp bmdlX3AKKyAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICYmIHctPmN1cnNv ci5ocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICYmIHctPmN1cnNvci5ocG9zID09IGhwb3Nfc3Rh cnQgKyBocG9zX2xlbmd0aAorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBjaF9ob3Jpem9udGFsX3J1bGVyKSkpCisgICAgeworICAgICAgZW51bSBtY19mbGF2 b3IgZ2x5cGhfZmxhdm9yID0gTUNfSE9MTE9XX1JFQ1RBTkdMRTsKKyAgICAgIG1jX2hlbHBlciAo dywgbWF0cml4LCByb3csIGN1cnNvcl9nbHlwaCwgdy0+Y3Vyc29yLngsIC0xLCB3LT5jdXJzb3Iu eSwgLTEsCisgICAgICAgICAgICAgICAgIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywg LTEsIC0xLCBNQ19SSUdIVF9GUklOR0VfQklUTUFQLCAtMSwKKyAgICAgICAgICAgICAgICAgY3Vy c29yX2ZnLCBjdXJzb3JfYmcsIGFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgQ0hfQ0FD SEUpOworICAgIH0KKyAgLyogQ3Vyc29yIGlzIGJleW9uZCB0aGUgcmlnaHQgZnJpbmdlOyBlLmcu LCB3aGVuIHJpZ2h0IGhvcml6b250YWwgc2Nyb2xsaW5nLiAqLworICBlbHNlIGlmIChjdXJzb3Jf YmV5b25kX2ZyaW5nZV9wCisgICAgICAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MKKyAg ICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPj0gaHBvc19zdGFydAorICAgICAgICAgICAmJiAo aHBvc19zdGFydCArIGhwb3NfbGVuZ3RoKSA9PSByb3ctPnVzZWRbVEVYVF9BUkVBXQorICAgICAg ICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkK KyAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaG9y aXpvbnRhbF9ydWxlcikpKQorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZv ciA9IE1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1c7CisgICAgICBtY19o ZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBjdXJzb3JfZ2x5cGgsIHctPmN1cnNvci54LCAtMSwgdy0+ Y3Vyc29yLnksIC0xLAorICAgICAgICAgICAgICAgICB3LT5jdXJzb3IuaHBvcywgdy0+Y3Vyc29y LnZwb3MsIC0xLCAtMSwgTUNfUklHSFRfRlJJTkdFX0JJVE1BUCwgLTEsCisgICAgICAgICAgICAg ICAgIGN1cnNvcl9mZywgY3Vyc29yX2JnLCBhY3RpdmVfcCwgZ2x5cGhfZmxhdm9yLCBkcmF3X3As IENIX0NBQ0hFKTsKKyAgICB9CisgIC8qIEVYQU1QTEUgKGJ1ZmZlci1sb2NhbCk6ICAoc2V0cSBt Yy1yZWFsLWZha2UtY3Vyc29yIG5pbC8nbm8vIm5vIikgKi8KKyAgZWxzZSBpZiAoIWN1cnNvcl9h dF9mcmluZ2VfcAorICAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGggIT0gTlVMTAorICAgICAgICAg ICAmJiBjdXJzb3JfdHlwZSA9PSBNQ19OT19DVVJTT1IKKyAgICAgICAgICAgJiYgdnBvcyA9PSB3 LT5jdXJzb3IudnBvcworICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBvcyA+PSBocG9zX3N0YXJ0 CisgICAgICAgICAgICYmIHctPmN1cnNvci5ocG9zIDwgaHBvc19zdGFydCArIGhwb3NfbGVuZ3Ro KQorICAgIHsKKyAgICAgIC8qIFdoZW4gYSB1c2VyIGhhcyBub3Qgc3BlY2lmaWVkIGEgdmFsdWUg Zm9yIGBtYy1yZWFsLWZha2UtY3Vyc29yJywgb3IgdGhlCisgICAgICB2YWx1ZSBpcyBgbm9gIGlu IHRoZSBmb3JtIG9mIGEgc3ltYm9sIG9yIHN0cmluZywgdGhlbiB0aGUgZGVmYXVsdCB3ZSB1c2UK KyAgICAgIGFuIE1DX0JBUiBhbmQgYW4gTUNfSEJBUiAtLSBib3RoIGhhdmluZyBhIGN1cnNvcl93 aWR0aCBvZiAxLiAqLworICAgICAgbWNfZ2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4LCBy b3csIHctPmN1cnNvci54LCAmb3BvaW50X2Z4LCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBv cywgJm9wb2ludF9oLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNfQkFSLCAxLCAm b3BvaW50X3dkKTsKKyAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGN1cnNvcl9nbHlw aCwgdy0+Y3Vyc29yLngsIG9wb2ludF9meCwgdy0+Y3Vyc29yLnksCisgICAgICAgICAgICAgICAg IG9wb2ludF9meSwgdy0+Y3Vyc29yLmhwb3MsIHctPmN1cnNvci52cG9zLCBvcG9pbnRfd2QsIG9w b2ludF9oLAorICAgICAgICAgICAgICAgICBNQ19CQVIsIDEsIGN1cnNvcl9mZywgY3Vyc29yX2Jn LCBhY3RpdmVfcCwgTUNfR0xZUEhMRVNTLAorICAgICAgICAgICAgICAgICBkcmF3X3AsIE5JTFAg KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpCisgICAgICAgICAgICAgICAg ICAgICAgICAgPyBDSF9DQUNIRQorICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfQ0FDSEUp OworICAgICAgbWNfZ2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4LCByb3csIHctPmN1cnNv ci54LCAmb3BvaW50X2Z4LCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywgJm9wb2ludF9o LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNfSEJBUiwgMSwgJm9wb2ludF93ZCk7 CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBjdXJzb3JfZ2x5cGgsIHctPmN1cnNv ci54LCBvcG9pbnRfZngsIHctPmN1cnNvci55LAorICAgICAgICAgICAgICAgICBvcG9pbnRfZnks IHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywgb3BvaW50X3dkLCBvcG9pbnRfaCwKKyAg ICAgICAgICAgICAgICAgTUNfSEJBUiwgMSwgY3Vyc29yX2ZnLCBjdXJzb3JfYmcsIGFjdGl2ZV9w LCBNQ19HTFlQSCwgZHJhd19wLAorICAgICAgICAgICAgICAgICBOSUxQIChCVkFSIChYQlVGRkVS ICh3LT5jb250ZW50cyksIG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICA/IENIX0NBQ0hFCisg ICAgICAgICAgICAgICAgIDogTUNfQ0FDSEUpOworICAgIH0KKyAgZWxzZSBpZiAoIWN1cnNvcl9h dF9mcmluZ2VfcAorICAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGggIT0gTlVMTAorICAgICAgICAg ICAmJiB2cG9zID09IHctPmN1cnNvci52cG9zCisgICAgICAgICAgICYmIHctPmN1cnNvci5ocG9z ID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPCBocG9zX3N0YXJ0 ICsgaHBvc19sZW5ndGgKKyAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT50eXBlICE9IFNUUkVU Q0hfR0xZUEgpCisgICAgeworICAgICAgbWNfZ2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4 LCByb3csIHctPmN1cnNvci54LCAmb3BvaW50X2Z4LCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3Iu dnBvcywgJm9wb2ludF9oLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX3R5 cGUsIGN1cnNvcl93aWR0aCwgJm9wb2ludF93ZCk7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJp eCwgcm93LCBjdXJzb3JfZ2x5cGgsIHctPmN1cnNvci54LCBvcG9pbnRfZngsIHctPmN1cnNvci55 LAorICAgICAgICAgICAgICAgICBvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3Iu dnBvcywgb3BvaW50X3dkLCBvcG9pbnRfaCwKKyAgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUs IGN1cnNvcl93aWR0aCwgY3Vyc29yX2ZnLCBjdXJzb3JfYmcsIGFjdGl2ZV9wLAorICAgICAgICAg ICAgICAgICBNQ19HTFlQSCwgZHJhd19wLCBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50 cyksIG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENIX0NB Q0hFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfQ0FDSEUpOworICAg IH0KKyAgZWxzZSBpZiAoIWN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAmJiBjdXJzb3Jf Z2x5cGggIT0gTlVMTAorICAgICAgICAgICAmJiB2cG9zID09IHctPmN1cnNvci52cG9zCisgICAg ICAgICAgICYmIHctPmN1cnNvci5ocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgJiYgdy0+ Y3Vyc29yLmhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgKKyAgICAgICAgICAgJiYgY3Vy c29yX2dseXBoLT50eXBlID09IFNUUkVUQ0hfR0xZUEgpCisgICAgeworICAgICAgLyogSWYgYSB1 c2VyIGhhcyBzZXQgYHgtc3RyZXRjaC1jdXJzb3InIHRvIGEgbm9uLW5pbCB2YWx1ZSwgaGUvc2hl IGNob3NlIHRvCisgICAgICBoYXZlIGEgY3Vyc29yIHRoYXQgc3BhbnMgdGhlIGVudGlyZSBsZW5n dGggb2YgdGhlIFNUUkVUQ0hfR0xZUEguICovCisgICAgICBpZiAoIXhfc3RyZXRjaF9jdXJzb3Jf cCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBNQ19IQkFSIHNoYWxsIGhhdmUgYSBgY3Vy c29yX3dpZHRoYCBvZiAxLiAqLworICAgICAgICAgIG1jX2dldF9jdXJzb3JfZ2VvbWV0cnkgKHcs IG1hdHJpeCwgcm93LCB3LT5jdXJzb3IueCwgJm9wb2ludF9meCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3LT5jdXJzb3IueSwgJm9wb2ludF9meSwgdy0+Y3Vyc29yLmhwb3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+Y3Vyc29yLnZwb3MsICZvcG9p bnRfaCwgTUNfSEJBUiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3Bv aW50X3dkKTsKKyAgICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBjdXJzb3JfZ2x5 cGgsIHctPmN1cnNvci54LCBvcG9pbnRfZngsCisgICAgICAgICAgICAgICAgICAgICB3LT5jdXJz b3IueSwgb3BvaW50X2Z5LCB3LT5jdXJzb3IuaHBvcywgdy0+Y3Vyc29yLnZwb3MsCisgICAgICAg ICAgICAgICAgICAgICBvcG9pbnRfd2QsIG9wb2ludF9oLCBNQ19IQkFSLCAxLCBjdXJzb3JfZmcs IGN1cnNvcl9iZywKKyAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJh d19wLAorICAgICAgICAgICAgICAgICAgICAgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVu dHMpLCBtY19jb25mKSkKKyAgICAgICAgICAgICAgICAgICAgID8gQ0hfQ0FDSEUKKyAgICAgICAg ICAgICAgICAgICAgIDogTUNfQ0FDSEUpOworICAgICAgICB9CisgICAgICBtY19nZXRfY3Vyc29y X2dlb21ldHJ5ICh3LCBtYXRyaXgsIHJvdywgdy0+Y3Vyc29yLngsICZvcG9pbnRfZngsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5jdXJzb3IueSwgJm9wb2ludF9meSwgdy0+Y3Vy c29yLmhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5jdXJzb3IudnBvcywg Jm9wb2ludF9oLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1 cnNvcl93aWR0aCwgJm9wb2ludF93ZCk7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93 LCBjdXJzb3JfZ2x5cGgsIHctPmN1cnNvci54LCBvcG9pbnRfZngsIHctPmN1cnNvci55LAorICAg ICAgICAgICAgICAgICBvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywg b3BvaW50X3dkLCBvcG9pbnRfaCwKKyAgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUsIGN1cnNv cl93aWR0aCwgY3Vyc29yX2ZnLCBjdXJzb3JfYmcsIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAg ICBNQ19HTFlQSCwgZHJhd19wLCBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1j X2NvbmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENIX0NBQ0hFCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfQ0FDSEUpOworICAgIH0KKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICBEUkFXIEFO RCBSRUNPUkQgRkFLRSBDVVJTT1JTCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgaWYgKGhw b3NfbGVuZ3RoID09IDEpCisgICAgeworICAgICAgaWYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3 LT5jb250ZW50cyksIG1jX2NvbmYpKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBzcGFj ZSBhcHBlbmRlZCB0byBhIHJvdyBlbmRpbmcgd2l0aCBhIG5ldyBsaW5lCisgICAgICAgICAgZG9l cyBub3QgaGF2ZSBhIGBnbHlwaC0+Y2hhcnBvc2AgKC0xLCAwKSB0aGF0IHdlIGNhbgorICAgICAg ICAgIHVzZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLiAgV2hlbiB0aGVyZSBpcyBh CisgICAgICAgICAgYGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyBlbnRyeSB0aGF0IGFzc2lnbnMgYSB2 aXNpYmxlCisgICAgICAgICAgZ2x5cGggdG8gYSBuZXcgbGluZSwgdGhlcmUgaXMgbm8gcHJvYmxl bSBiZWNhdXNlIHRoYXQKKyAgICAgICAgICBnbHlwaCBoYXMgYSBgZ2x5cGgtPmNoYXJwb3MnIHRo YXQgd2UgY2FuIHVzZS4gIFdoZW4KKyAgICAgICAgICBubyB2aXNpYmxlIEVPTCBnbHlwaCBleGlz dHMsIHdlIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgdGVzdDogIHRoZSBhcHBlbmRlZCBz cGFjZSBoYXMgYSBwb3NpdGlvbiB0aGF0IGlzIG9uZQorICAgICAgICAgIGxlc3MgdGhhbiB0aGUg ZW5kIG9mIHRoZSBtYXRyaXggcm93LiAqLworICAgICAgICAgIGludCBocG9zID0gc3RhcnQgLSBy b3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAgIHN0cnVjdCBnbHlwaCAqcHJldmlvdXNf Z2x5cGggPSAoMCA8PSBocG9zIC0gMSAmJiBocG9zIC0gMSA8IHJvdy0+dXNlZFtURVhUX0FSRUFd KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvdy0+Z2x5cGhz W1RFWFRfQVJFQV0gKyBocG9zIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IE5VTEw7CisgICAgICAgICAgYm9vbCBza2lwX3AgPSAocHJldmlvdXNfZ2x5cGgg IT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2dseXBoLT5jaGFy cG9zID09IE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdykgLSAxKTsKKyAgICAgICAgICBpbnQg cG9zaW50ID0gKHN0YXJ0IC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbVEVY VF9BUkVBXSAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgID8gTUFUUklYX1JPV19FTkRfQ0hB UlBPUyAocm93KSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgOiBzdGFydC0+Y2hhcnBvczsK KyAgICAgICAgICBMaXNwX09iamVjdCBzcGVjcyA9IG1jX2Fzc29jIChtYWtlX2ZpeG51bSAocG9z aW50KSwgQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19jb25mKSk7CisgICAgICAgICAg aWYgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAgICAgICAg IHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAgICAgICAmJiAhTklMUCAoc3Bl Y3MpCisgICAgICAgICAgICAgICYmIHN0YXJ0LT55IDw9IHdpbmRvd190ZXh0X2JvdHRvbV95ICh3 KQorICAgICAgICAgICAgICAmJiAhc2tpcF9wCisgICAgICAgICAgICAgICYmICFzdGFydC0+enZf cCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgTGlzcF9PYmplY3QgbGlzcF90eXBlID0g bWNfbnRoICgxLCBzcGVjcyk7CisgICAgICAgICAgICAgIGVudW0gdHlwZV9vZl9jdXJzb3IgY3Vy c29yX3R5cGUgPSAoQ09OU1AgKGxpc3BfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIgKGxp c3BfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKGxpc3BfdHlwZSk7CisgICAgICAgICAgICAgIGN1 cnNvcl90eXBlID0gKHN0YXJ0LT50eXBlID09IElNQUdFX0dMWVBIKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gTUNfSE9MTE9XX0JPWAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogY3Vyc29yX3R5cGU7CisgICAgICAgICAgICAgIGludCBjdXJzb3Jfd2lkdGggPSAoQ09OU1Ag KGxpc3BfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFhGSVhOVU0g KFhDQVIgKFhDRFIgKGxpc3BfdHlwZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiAtMTsKKyAgICAgICAgICAgICAgTGlzcF9PYmplY3QgbWNfZm9yZWdyb3VuZCA9IG1jX250 aCAoMiwgc3BlY3MpOworICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGZvcmVncm91bmQ7Cisg ICAgICAgICAgICAgIGlmIChTVFJJTkdQIChtY19mb3JlZ3JvdW5kKSkKKyAgICAgICAgICAgICAg ICBtY194d19jb2xvcl92YWx1ZXMgKHcsIG1jX2ZvcmVncm91bmQsICZmb3JlZ3JvdW5kKTsKKyAg ICAgICAgICAgICAgICBlbHNlIGlmIChWRUNUT1JQIChtY19mb3JlZ3JvdW5kKSkKKyAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJlZF9mZyA9IFhGTE9BVF9E QVRBIChBUkVGIChtY19mb3JlZ3JvdW5kLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSBncmVlbl9mZyA9IFhGTE9BVF9EQVRBIChBUkVGIChtY19mb3JlZ3JvdW5kLCAxKSk7CisgICAg ICAgICAgICAgICAgICAgIGRvdWJsZSBibHVlX2ZnID0gWEZMT0FUX0RBVEEgKEFSRUYgKG1jX2Zv cmVncm91bmQsIDIpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZC5yZWQgPSByZWRf Zmc7CisgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQuZ3JlZW4gPSBncmVlbl9mZzsKKyAg ICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZC5ibHVlID0gYmx1ZV9mZzsKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKE5JTFAgKG1jX2ZvcmVncm91bmQp KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3Vu ZC5yZWQgPSBjaF9mb3JlZ3JvdW5kLnJlZDsKKyAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3Jv dW5kLmdyZWVuID0gY2hfZm9yZWdyb3VuZC5ncmVlbjsKKyAgICAgICAgICAgICAgICAgICAgICBm b3JlZ3JvdW5kLmJsdWUgPSBjaF9mb3JlZ3JvdW5kLmJsdWU7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4 KTsKKyAgICAgICAgICAgICAgaW50IHhfbGltaXQgPSB3aW5kb3dfYm94X3dpZHRoICh3LCBURVhU X0FSRUEpOworICAgICAgICAgICAgICBtY19lbmdpbmUgKHcsIG1hdHJpeCwgcm93LCBzdGFydCwg VEVYVF9BUkVBLCB4LCB4X2xpbWl0LCByb3ctPnksCisgICAgICAgICAgICAgICAgICAgICAgICAg c3RhcnQgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLCB2cG9zLCBjdXJzb3JfdHlwZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9tYXRyaXgsIGZjX3gsIGZv cmVncm91bmQsIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJUExFX0NV UlNPUlMsIGRyYXdfcCwgTUNfQ0FDSEUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICBpZiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpCisg ICAgICAgICAgJiYgZmNfeCA8PSB0ZXh0X2FyZWFfd2lkdGgKKyAgICAgICAgICAmJiBmY194ID49 IHctPm1jLmxudW1fcGl4ZWxfd2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgeF9saW1p dCA9IHggKyBzdGFydC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgYm9vbCByZWFsX2Zha2VfY3Vy c29yX3AgPSAody0+Y3Vyc29yLnggPT0gZmNfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIHctPmN1cnNvci55ID09IHN0YXJ0LT55CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0gc3RhcnQgLSByb3ctPmdseXBo c1tURVhUX0FSRUFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+ Y3Vyc29yLnZwb3MgPT0gdnBvcyk7CisgICAgICAgICAgaWYgKHggKyBzdGFydC0+cGl4ZWxfd2lk dGggPD0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICYmICgoaGVhZGVyX2xpbmVfZm9y bWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAgICAgICAgICAgIHx8IGhlYWRlcl9saW5lX2Zv cm1hdCA9PSAwKQorICAgICAgICAgICAgICAmJiAoKGZjX3ggPj0geAorICAgICAgICAgICAgICAg ICAgICYmIGZjX3ggPCB4ICsgc3RhcnQtPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAg fHwgc3RhcnQgPT0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIHJvdy0+dXNlZFtURVhUX0FSRUFd IC0gMSkKKyAgICAgICAgICAgICAgJiYgc3RhcnQtPnkgPD0gd2luZG93X3RleHRfYm90dG9tX3kg KHcpCisgICAgICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAgICAgICAgICBt Y19lbmdpbmUgKHcsIG1hdHJpeCwgcm93LCBzdGFydCwgVEVYVF9BUkVBLCB4LCB4X2xpbWl0LCBy b3ctPnksCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IC0gcm93LT5nbHlwaHNbVEVYVF9B UkVBXSwgdnBvcywgTUNfQkFSLCAxLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0 cml4LCBmY194LCBmY19mb3JlZ3JvdW5kLCBhY3RpdmVfcCwgRklMTF9DT0xVTU4sCisgICAgICAg ICAgICAgICAgICAgICAgIGRyYXdfcCwgRkNfQ0FDSEUpOworICAgICAgICB9CisgICAgICBpZiAo IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAg ICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNoX2hvcml6b250YWxfcnVsZXIpKQorICAgICAgICAgICYm IHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgeF9saW1p dCA9IChzdGFydCA9PSByb3ctPmdseXBoc1tURVhUX0FSRUFdICsgcm93LT51c2VkW1RFWFRfQVJF QV0gLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgPyB0ZXh0X2FyZWFfd2lkdGgKKyAgICAg ICAgICAgICAgICAgICAgICAgIDogeCArIHN0YXJ0LT5waXhlbF93aWR0aDsKKyAgICAgICAgICAv KiBQcmVzZXJ2ZSBzdXBwb3J0IGZvciBkZWZhdWx0IGJlaGF2aW9yIHN1Y2ggdGhhdCBhIHVzZXIg bWF5CisgICAgICAgICAgc3BlY2lmeSB0aGUgaGVpZ2h0IG9mIGFuIE1DX0hCQVIsIHdoaWNoIGJl Z2lucyBpdHMgam91cm5leQorICAgICAgICAgIGFzIHRoZSBgY3Vyc29yX3dpZHRoJy4gIGBtY19n ZXRfY3Vyc29yX2dlb21ldHJ5JyByZWFkanVzdHMuICovCisgICAgICAgICAgbWNfZW5naW5lICh3 LCBtYXRyaXgsIHJvdywgc3RhcnQsIFRFWFRfQVJFQSwgeCwgeF9saW1pdCwgcm93LT55LAorICAg ICAgICAgICAgICAgICAgICAgc3RhcnQgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLCB2cG9zLCBN Q19IQkFSLCAxLAorICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21hdHJpeCwgZmNfeCwgY2hf Zm9yZWdyb3VuZCwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICBIT1JJWk9OVEFMX1JV TEVSLCBkcmF3X3AsIENIX0NBQ0hFKTsKKyAgICAgICAgfQorICAgICAgaWYgKCFOSUxQIChCVkFS IChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICAgICYmICFOSUxQ IChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAgJiYgIWZpbGxfY29sdW1u X3RydW1wc19wKQorICAgICAgICB7CisgICAgICAgICAgY3Vyc29yX3R5cGUgPSAoc3RhcnQtPnR5 cGUgPT0gSU1BR0VfR0xZUEgpCisgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0hPTExPV19C T1gKKyAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfQkFSOworICAgICAgICAgIGludCB4X2xp bWl0ID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgICAgICAgICBib29sIHJl YWxfZmFrZV9jdXJzb3JfcCA9ICh3LT5jdXJzb3IueSA9PSBzdGFydC0+eQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci52cG9zID09IHZwb3MpOworICAg ICAgICAgIGlmICgoKGhlYWRlcl9saW5lX2Zvcm1hdCA+IDAgJiYgdnBvcyA+IDApCisgICAgICAg ICAgICAgICB8fCBoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkKKyAgICAgICAgICAgICAgJiYgKCh3 LT5jdXJzb3IueCA+PSB4CisgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLnggPCB4ICsg c3RhcnQtPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgfHwgc3RhcnQgPT0gcm93LT5n bHlwaHNbVEVYVF9BUkVBXSArIHJvdy0+dXNlZFtURVhUX0FSRUFdIC0gMSkKKyAgICAgICAgICAg ICAgJiYgc3RhcnQtPnkgPD0gd2luZG93X3RleHRfYm90dG9tX3kgKHcpCisgICAgICAgICAgICAg ICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAgICAgICAgICBtY19lbmdpbmUgKHcsIG1hdHJp eCwgcm93LCBzdGFydCwgVEVYVF9BUkVBLCB4LCB4X2xpbWl0LCByb3ctPnksCisgICAgICAgICAg ICAgICAgICAgICAgIHN0YXJ0IC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwgdnBvcywgY3Vyc29y X3R5cGUsIDEsCisgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl9tYXRyaXgsIGZjX3gsIGNo X2ZvcmVncm91bmQsIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICBWRVJUSUNBTF9S VUxFUiwgZHJhd19wLCBDSF9DQUNIRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg ICAgeworICAgICAgICBpbnQgcmVsYXRpdmVfeCA9IDA7CisgICAgICAgIGZvciAoaW50IGFyZWEg PSBMRUZUX01BUkdJTl9BUkVBOyBhcmVhIDwgTEFTVF9BUkVBOyArK2FyZWEpCisgICAgICAgICAg eworICAgICAgICAgICAgc3RydWN0IGdseXBoICpnbHlwaCA9IHJvdy0+Z2x5cGhzW2FyZWFdOwor ICAgICAgICAgICAgc3RydWN0IGdseXBoICpnbHlwaF9lbmQgPSBnbHlwaCArIHJvdy0+dXNlZFth cmVhXTsKKyAgICAgICAgICAgIC8qIEdseXBoIGZvciBhIGxpbmUgZW5kIGluIHRleHQuICovCisg ICAgICAgICAgICBpZiAoYXJlYSA9PSBURVhUX0FSRUEgJiYgZ2x5cGggPT0gZ2x5cGhfZW5kICYm IGdseXBoLT5jaGFycG9zID4gMCkKKyAgICAgICAgICAgICAgKytnbHlwaF9lbmQ7CisgICAgICAg ICAgICBmb3IgKDsgZ2x5cGggPCBnbHlwaF9lbmQ7ICsrZ2x5cGgpCisgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICBpZiAodnBvcyAhPSB3LT5jdXJzb3IudnBvcworICAgICAgICAgICAg ICAgICAgICAmJiBnbHlwaCAhPSBnbHlwaF9lbmQgLSAxCisgICAgICAgICAgICAgICAgICAgICYm IGZjX3ggPCByZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54IDwg cmVsYXRpdmVfeAorICAgICAgICAgICAgICAgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3 LT5jb250ZW50cyksIG1jX2NvbmYpKSkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIGlmICghTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19jb25m KSkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzcGFj ZSBhcHBlbmRlZCB0byBhIHJvdyBlbmRpbmcgd2l0aCBhIG5ldyBsaW5lIGRvZXMKKyAgICAgICAg ICAgICAgICAgICAgbm90IGhhdmUgYSBgZ2x5cGgtPmNoYXJwb3NgICgtMSwgMCkgdGhhdCB3ZSBj YW4gdXNlIGZvciB0aGlzCisgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgYXBwbGljYXRp b24uICBXaGVuIGEgYGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyBlbnRyeQorICAgICAgICAgICAgICAg ICAgICBhc3NpZ25zIGEgdmlzaWJsZSBnbHlwaCB0byBhIG5ldyBsaW5lLCB0aGVyZSBpcyBubyBw cm9ibGVtCisgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhhdCBnbHlwaCBoYXMgYSBgZ2x5 cGgtPmNoYXJwb3MnIHRoYXQgd2UgY2FuIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBu byB2aXNpYmxlIEVPTCBnbHlwaCBleGlzdHMsIHdlIHVzZSB0aGUgZm9sbG93aW5nIHRlc3Q6Cisg ICAgICAgICAgICAgICAgICAgIHRoZSBhcHBlbmRlZCBzcGFjZSBoYXMgYSBwb3NpdGlvbiB0aGF0 IGlzIG9uZSBsZXNzIHRoYW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGVuZCBvZiB0aGUgbWF0 cml4IHJvdy4gKi8KKyAgICAgICAgICAgICAgICAgICAgaW50IGhwb3MgPSBnbHlwaCAtIHJvdy0+ Z2x5cGhzW1RFWFRfQVJFQV07CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqcHJl dmlvdXNfZ2x5cGggPSAoMCA8PSBocG9zIC0gMSAmJiBocG9zIC0gMSA8IHJvdy0+dXNlZFtURVhU X0FSRUFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPyByb3ctPmdseXBoc1tURVhUX0FSRUFdICsgaHBvcyAtIDEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTDsKKyAgICAgICAgICAgICAg ICAgICAgYm9vbCBza2lwX3AgPSAocHJldmlvdXNfZ2x5cGggIT0gTlVMTAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19nbHlwaC0+Y2hhcnBvcyA9PSBNQVRS SVhfUk9XX0VORF9DSEFSUE9TIChyb3cpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdo ZW4gYSBgYnVmZmVyLWRpc3BsYXktdGFibGUnIGVudHJ5IGNvbnRhaW5zCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYSB2aXNpYmxlIHRhYiBjaGFyYWN0ZXIgKCLCuyIpLCB0aGUg c3Vic2VxdWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkVUQ0hfR0xZ UEggd2lsbCBoYXZlIHRoZSBzYW1lIGdseXBoLT5jaGFycG9zCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXMgdGhlIGFmb3JlbWVudGlvbmVkIHZpc2libGUgdGFiIGNoYXJhY3Rl ci4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChwcmV2aW91c19nbHlw aCAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlv dXNfZ2x5cGgtPmNoYXJwb3MgPT0gZ2x5cGgtPmNoYXJwb3MpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpbnQgcG9zaW50ID0gKGdseXBoIC0gcm93 LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpIC0gMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnbHlwaC0+Y2hhcnBvczsKKyAgICAg ICAgICAgICAgICAgICAgTGlzcF9PYmplY3Qgc3BlY3MgPSBtY19hc3NvYyAobWFrZV9maXhudW0g KHBvc2ludCksIEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpOworICAgICAg ICAgICAgICAgICAgICBpZiAoKChoZWFkZXJfbGluZV9mb3JtYXQgPiAwICYmIHZwb3MgPiAwKQor ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKHNwZWNzKQorICAgICAgICAgICAgICAgICAg ICAgICAgJiYgZ2x5cGgtPnkgPD0gd2luZG93X3RleHRfYm90dG9tX3kgKHcpCisgICAgICAgICAg ICAgICAgICAgICAgICAmJiAhc2tpcF9wCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhZ2x5 cGgtPnp2X3ApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgTGlzcF9PYmplY3QgbGlzcF90eXBlID0gbWNfbnRoICgxLCBzcGVjcyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIHR5cGVfb2ZfY3Vyc29yIGN1cnNvcl90eXBlID0gKENPTlNQIChs aXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoWENBUiAobGlzcF90eXBlKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKGxpc3BfdHlwZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICBjdXJzb3JfdHlwZSA9IChnbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19IT0xMT1dfQk9YCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3Vyc29yX3R5cGU7CisgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoID0gKENPTlNQIChsaXNwX3R5cGUpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWEZJWE5VTSAoWENBUiAo WENEUiAobGlzcF90eXBlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IG1jX2ZvcmVn cm91bmQgPSBtY19udGggKDIsIHNwZWNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBtY19SR0IgZm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVFJJTkdQ IChtY19mb3JlZ3JvdW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfeHdfY29sb3Jf dmFsdWVzICh3LCBtY19mb3JlZ3JvdW5kLCAmZm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UgaWYgKFZFQ1RPUlAgKG1jX2ZvcmVncm91bmQpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBy ZWRfZmcgPSBYRkxPQVRfREFUQSAoQVJFRiAobWNfZm9yZWdyb3VuZCwgMCkpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGdyZWVuX2ZnID0gWEZMT0FUX0RBVEEgKEFSRUYg KG1jX2ZvcmVncm91bmQsIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSBibHVlX2ZnID0gWEZMT0FUX0RBVEEgKEFSRUYgKG1jX2ZvcmVncm91bmQsIDIpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQucmVkID0gcmVkX2ZnOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZC5ncmVlbiA9IGdyZWVuX2ZnOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZC5ibHVlID0gYmx1ZV9mZzsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoTklMUCAobWNfZm9yZWdyb3VuZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZC5yZWQgPSBjaF9m b3JlZ3JvdW5kLnJlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQu Z3JlZW4gPSBjaF9mb3JlZ3JvdW5kLmdyZWVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yZWdyb3VuZC5ibHVlID0gY2hfZm9yZWdyb3VuZC5ibHVlOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB2cG9zID0gTUFUUklY X1JPV19WUE9TIChyb3csIG1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeF9s aW1pdCA9IHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSk7CisgICAgICAgICAgICAgICAg ICAgICAgICBtY19lbmdpbmUgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgYXJlYSwgcmVsYXRpdmVf eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9saW1pdCwgcm93LT55LCBn bHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZwb3MsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9tYXRyaXgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjX3gsIGZvcmVncm91bmQsIGFj dGl2ZV9wLCBNVUxUSVBMRV9DVVJTT1JTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkcmF3X3AsIE1DX0NBQ0hFKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3 LT5jb250ZW50cyksIGZjX3Zpc2libGUpKQorICAgICAgICAgICAgICAgICAgICAmJiBmY194IDw9 IHRleHRfYXJlYV93aWR0aAorICAgICAgICAgICAgICAgICAgICAmJiBmY194ID49IHctPm1jLmxu dW1fcGl4ZWxfd2lkdGgpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg IGludCB4X2xpbWl0ID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgICAgICAg ICAgICAgICAgICAgYm9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAody0+Y3Vyc29yLnggPT0gZmNf eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5j dXJzb3IueSA9PSBnbHlwaC0+eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBvcyA9PSBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRf QVJFQV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg dy0+Y3Vyc29yLnZwb3MgPT0gdnBvcyk7CisgICAgICAgICAgICAgICAgICAgIGludCBocG9zID0g Z2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAgICAgICAgICAgICBpZiAo aHBvcyA+PSBocG9zX3N0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBocG9zIDwgaHBv c19zdGFydCArIGhwb3NfbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2 ZV94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoIDw9IHRleHRfYXJlYV93aWR0aAorICAgICAgICAgICAg ICAgICAgICAgICAgJiYgKChoZWFkZXJfbGluZV9mb3JtYXQgPiAwICYmIHZwb3MgPiAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgJiYgKChnbHlwaCAhPSBnbHlwaF9lbmQgLSAxCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIGZjX3ggPj0gcmVsYXRpdmVfeAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBmY194IDwgcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0 aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZ2x5cGggPT0gZ2x5cGhfZW5kIC0g MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmY194ID49IHJlbGF0aXZlX3gp KQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGgtPnkgPD0gd2luZG93X3RleHRfYm90 dG9tX3kgKHcpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9w KQorICAgICAgICAgICAgICAgICAgICAgIG1jX2VuZ2luZSAodywgbWF0cml4LCByb3csIGdseXBo LCBhcmVhLCByZWxhdGl2ZV94LCB4X2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcm93LT55LCBocG9zLCB2cG9zLCBNQ19CQVIsIDEsIGN1cnNvcl9tYXRyaXgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY194LCBmY19mb3JlZ3JvdW5kLCBhY3RpdmVf cCwgRklMTF9DT0xVTU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3X3As IEZDX0NBQ0hFKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIU5J TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgICAg ICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF9ob3Jpem9udGFsX3J1bGVyKSkKKyAgICAg ICAgICAgICAgICAgICAgJiYgdnBvcyA9PSB3LT5jdXJzb3IudnBvcykKKyAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHhfbGltaXQgPSB3aW5kb3dfYm94X3dpZHRo ICh3LCBURVhUX0FSRUEpOworICAgICAgICAgICAgICAgICAgICBpbnQgaHBvcyA9IGdseXBoIC0g cm93LT5nbHlwaHNbVEVYVF9BUkVBXTsKKyAgICAgICAgICAgICAgICAgICAgLyogUHJlc2VydmUg c3VwcG9ydCBmb3IgZGVmYXVsdCBiZWhhdmlvciBzdWNoIHRoYXQgYSB1c2VyIG1heQorICAgICAg ICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBoZWlnaHQgb2YgYW4gTUNfSEJBUiwgd2hpY2ggYmVn aW5zIGl0cyBqb3VybmV5CisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBgY3Vyc29yX3dpZHRo Jy4gIGBtY19nZXRfY3Vyc29yX2dlb21ldHJ5JyByZWFkanVzdHMuICovCisgICAgICAgICAgICAg ICAgICAgIGlmIChocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICYm IGhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAg bWNfZW5naW5lICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gsIHhfbGlt aXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPnksIGhwb3MsIHZwb3Ms IE1DX0hCQVIsIDEsIGN1cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmY194LCBjaF9mb3JlZ3JvdW5kLCBhY3RpdmVfcCwgSE9SSVpPTlRBTF9SVUxFUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdfcCwgQ0hfQ0FDSEUpOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghTklMUCAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAg KEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWZp bGxfY29sdW1uX3RydW1wc19wKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICBjdXJzb3JfdHlwZSA9IChnbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0hPTExPV19CT1gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IE1DX0JBUjsKKyAgICAgICAgICAgICAgICAgICAgaW50IHhf bGltaXQgPSB3aW5kb3dfYm94X3dpZHRoICh3LCBURVhUX0FSRUEpOworICAgICAgICAgICAgICAg ICAgICBib29sIHJlYWxfZmFrZV9jdXJzb3JfcCA9ICh3LT5jdXJzb3IueSA9PSBnbHlwaC0+eQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJz b3IudnBvcyA9PSB2cG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGhwb3MgPSBnbHlwaCAt IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV07CisgICAgICAgICAgICAgICAgICAgIGlmIChocG9zID49 IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGhwb3MgPCBocG9zX3N0YXJ0 ICsgaHBvc19sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICgoaGVhZGVyX2xpbmVf Zm9ybWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBo ZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICgoZ2x5 cGggIT0gZ2x5cGhfZW5kIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5j dXJzb3IueCA+PSByZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHct PmN1cnNvci54IDwgcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8fCAoZ2x5cGggPT0gZ2x5cGhfZW5kIC0gMQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSByZWxhdGl2ZV94KSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICYmIGdseXBoLT55IDw9IHdpbmRvd190ZXh0X2JvdHRvbV95ICh3 KQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJlYWxfZmFrZV9jdXJzb3JfcCkKKyAgICAg ICAgICAgICAgICAgICAgICBtY19lbmdpbmUgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgYXJlYSwg cmVsYXRpdmVfeCwgeF9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJv dy0+eSwgaHBvcywgdnBvcywgY3Vyc29yX3R5cGUsIDEsIGN1cnNvcl9tYXRyaXgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmY194LCBjaF9mb3JlZ3JvdW5kLCBhY3RpdmVfcCwg VkVSVElDQUxfUlVMRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3X3As IENIX0NBQ0hFKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZWxhdGl2 ZV94ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0K KyAgICAgIH0KKyAgLy8gIGNsb2NrX3QgY2xvY2tfZW5kID0gY2xvY2soKTsKKyAgLy8gIGRvdWJs ZSBjcHVfdGltZV91c2VkID0gKChkb3VibGUpIChjbG9ja19lbmQgLSBjbG9ja19zdGFydCkpIC8g Q0xPQ0tTX1BFUl9TRUM7CisgIC8vICBmcHJpbnRmIChzdGRlcnIsICJtY19kcmF3X3JvdyAoJXMp OiAgVElNRSAoJWYpXG4iLCBtY193aW5kb3cgKHcpLCBjcHVfdGltZV91c2VkKTsKK30KKwordm9p ZAorbWNfcmVkcmF3X2hlbHBlciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJp eCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgICAgICAgICBlbnVt IHR5cGVfb2ZfY2FjaGUgY2FjaGVfdHlwZSwgaW50IHN0YXJ0X2hwb3MsIGludCBlbmRfaHBvcykK K3sKKyAgaW50IHJvd192cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3csIG1hdHJpeCk7CisgIHN0 cnVjdCBtdWx0aXBsZV9jdXJzb3JzX2NhY2hlIGZvb19lbHRzOworICBzd2l0Y2ggKGNhY2hlX3R5 cGUpCisgICAgeworICAgICAgY2FzZSBOT19DQUNIRToKKyAgICAgICAgeworICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgICBjYXNlIE1DX0NBQ0hFOgorICAgICAgICB7CisgICAgICAg ICAgZm9vX2VsdHMuY2FjaGVzID0gdy0+bWNfZWx0cy5jYWNoZXM7CisgICAgICAgICAgZm9vX2Vs dHMuYWxsb2NhdGVkID0gdy0+bWNfZWx0cy5hbGxvY2F0ZWQ7CisgICAgICAgICAgZm9vX2VsdHMu dXNlZCA9IHctPm1jX2VsdHMudXNlZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgY2FzZSBDSF9DQUNIRToKKyAgICAgICAgeworICAgICAgICAgIGZvb19lbHRzLmNhY2hlcyA9 IHctPmNoX2VsdHMuY2FjaGVzOworICAgICAgICAgIGZvb19lbHRzLmFsbG9jYXRlZCA9IHctPmNo X2VsdHMuYWxsb2NhdGVkOworICAgICAgICAgIGZvb19lbHRzLnVzZWQgPSB3LT5jaF9lbHRzLnVz ZWQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRkNfQ0FDSEU6Cisg ICAgICAgIHsKKyAgICAgICAgICBmb29fZWx0cy5jYWNoZXMgPSB3LT5mY19lbHRzLmNhY2hlczsK KyAgICAgICAgICBmb29fZWx0cy5hbGxvY2F0ZWQgPSB3LT5mY19lbHRzLmFsbG9jYXRlZDsKKyAg ICAgICAgICBmb29fZWx0cy51c2VkID0gdy0+ZmNfZWx0cy51c2VkOworICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgfQorICAvKiBTVFJFVENIX0dMWVBIIG1heSBjb250YWluIG1vcmUg dGhhbiBvbmUgZmFrZSBjdXJzb3IgYXQgdGhlIHNhbWUgSFBPUy4gKi8KKyAgZm9yIChpbnQgZWx0 ID0gMDsgZWx0IDwgZm9vX2VsdHMudXNlZDsgKytlbHQpCisgICAgeworICAgICAgaW50IHggPSBm b29fZWx0cy5jYWNoZXNbZWx0XS54OworICAgICAgaW50IGZ4ID0gZm9vX2VsdHMuY2FjaGVzW2Vs dF0uZng7CisgICAgICBpbnQgeSA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLnk7CisgICAgICBpbnQg ZnkgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5meTsKKyAgICAgIGludCBocG9zID0gZm9vX2VsdHMu Y2FjaGVzW2VsdF0uaHBvczsKKyAgICAgIGludCB2cG9zID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0u dnBvczsKKyAgICAgIGludCB3ZCA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLndkOworICAgICAgaW50 IGggPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5oOworICAgICAgZW51bSB0eXBlX29mX2N1cnNvciBj dXJzb3JfdHlwZSA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmN1cnNvcl90eXBlOworICAgICAgaW50 IGN1cnNvcl93aWR0aCA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmN1cnNvcl93aWR0aDsKKyAgICAg IHN0cnVjdCBtY19SR0IgbHNsX2ZnID0gey5yZWQgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5mb3Jl Z3JvdW5kLnJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9IGZvb19l bHRzLmNhY2hlc1tlbHRdLmZvcmVncm91bmQuZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuYmx1ZSA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmZvcmVncm91bmQuYmx1ZX07Cisg ICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9iZyA9IHsucmVkID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0u YmFja2dyb3VuZC5yZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSBm b29fZWx0cy5jYWNoZXNbZWx0XS5iYWNrZ3JvdW5kLmdyZWVuLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLmJsdWUgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5iYWNrZ3JvdW5kLmJsdWV9 OworICAgICAgYm9vbCBhY3RpdmVfcCA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmFjdGl2ZV9wOwor ICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0u Z2x5cGhfZmxhdm9yOworICAgICAgYm9vbCBlbmFibGVkX3AgPSBmb29fZWx0cy5jYWNoZXNbZWx0 XS5lbmFibGVkX3A7CisgICAgICBpZiAodnBvcyA9PSByb3dfdnBvcworICAgICAgICAgICYmICgo aHBvcyA+PSBzdGFydF9ocG9zCisgICAgICAgICAgICAgICAmJiBocG9zIDwgZW5kX2hwb3MpCisg ICAgICAgICAgICAgIC8qIEEgZmxvYXRpbmcgY3Vyc29yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBn bHlwaCByb3cuICovCisgICAgICAgICAgICAgIHx8IChocG9zICsgMSA9PSBzdGFydF9ocG9zCisg ICAgICAgICAgICAgICAgICAmJiBocG9zICsgMSA9PSBlbmRfaHBvcykpCisgICAgICAgICAgJiYg ZW5hYmxlZF9wKQorICAgICAgICB7CisgICAgICAgICAgYm9vbCByZW1vdmVfcCA9IGZhbHNlOwor ICAgICAgICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHks IGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgbHNsX2ZnLCBhY3RpdmVfcCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCByZW1vdmVfcCk7CisgICAgICAgIH0K KyAgICB9Cit9CisKK3ZvaWQKK21jX3JlZHJhd19yb3cgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVj dCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAg ICAgICAgaW50IHN0YXJ0X3gsIGludCBzdGFydF9ocG9zLCBpbnQgZW5kX2hwb3MsIGJvb2wgY2xl YXJfZW9sX3AsCisgICAgICAgICAgICAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UgaGwpCit7Cisg IHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CisgIGludCB2cG9z ID0gTUFUUklYX1JPV19WUE9TIChyb3csIG1hdHJpeCk7CisgIC8vICBUUkFDRSAoKHN0ZGVyciwg Im1jX3JlZHJhd19yb3cgKCVkKTogIHN0YXJ0X3ggKCVkKSB8IHN0YXJ0X2hwb3MgKCVkKSB8IGVu ZF9ocG9zICglZClcbiIsCisgIC8vICAgICAgICAgICAgICAgICAgdnBvcywgc3RhcnRfeCwgc3Rh cnRfaHBvcywgZW5kX2hwb3MpKTsKKyAgc3RydWN0IGdseXBoX3JvdyAqYm90dG9tX3JvdyA9IE1B VFJJWF9CT1RUT01fVEVYVF9ST1cgKG1hdHJpeCwgdyk7CisgIGludCBib3R0b21fdnBvcyA9IE1B VFJJWF9ST1dfVlBPUyAoYm90dG9tX3JvdywgbWF0cml4KTsKKyAgc3RydWN0IG1jX1JHQiBsc2wg PSB7LnJlZCA9IC0xLjAsIC5ncmVlbiA9IC0xLjAsIC5ibHVlID0gLTEuMH07CisgIGVudW0gbWNf Zmxhdm9yIGdseXBoX2ZsYXZvciA9IE5PX0ZMQVZPUjsKKyAgZW51bSB0eXBlX29mX2N1cnNvciBj dXJzb3JfdHlwZSA9IE1DX05PX0NVUlNPUjsKKyAgaW50IHdkID0gLTE7CisgIGJvb2wgYWN0aXZl X3AgPSAodyA9PSBYV0lORE9XIChmLT5zZWxlY3RlZF93aW5kb3cpCisgICAgICAgICAgICAgICAg ICAgJiYgZiA9PSBGUkFNRV9ESVNQTEFZX0lORk8gKGYpLT54X2hpZ2hsaWdodF9mcmFtZSk7Cisg IGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgaW50IG92ZXJsYXBzID0gMDsKKyAgaW50IHgg PSAwOworICAvLyAgY2xvY2tfdCBjbG9ja19zdGFydCA9IGNsb2NrKCk7CisgIGlmIChlbmRfaHBv cyA+IHN0YXJ0X2hwb3MpCisgICAgeCA9IG1jX2RyYXdfZ2x5cGhzICh3LCBtYXRyaXgsIHJvdywg c3RhcnRfeCwgVEVYVF9BUkVBLCBzdGFydF9ocG9zLCBlbmRfaHBvcywKKyAgICAgICAgICAgICAg ICAgICAgICAgIGhsLCBvdmVybGFwcywgdnBvcywgYm90dG9tX3Zwb3MsIGxzbCwgZ2x5cGhfZmxh dm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwg Y3Vyc29yX2djX3AsIE1DX0RSQVdfR0xZUEgpOworICAvLyAgY2xvY2tfdCBjbG9ja19lbmQgPSBj bG9jaygpOworICAvLyAgZG91YmxlIHRpbWVfZ2x5cGhzID0gKChkb3VibGUpIChjbG9ja19lbmQg LSBjbG9ja19zdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CisgIC8qIGByZWRyYXdfb3ZlcmxhcHBl ZF9yb3dzJyBjYWxscyBgcmlmLT5jbGVhcl9lbmRfb2ZfbGluZScuICBXZSBhcmUgbWltaWNraW5n CisgIHRoZSBiZWhhdmlvciBvZiBgbWNfeF93cml0ZV9nbHlwaHMnIGhlcmUgYnkgbW92aW5nIHRo ZSBvdXRwdXQgY3Vyc29yLiAgV2UgY291bGQKKyAgaGF2ZSBjYWxsZWQgYHJpZi0+bWNfc2NyaWJl X2dseXBocycgaW5zdGVhZCBvZiBqdXN0IHBsYWluIG9sZCBgbWNfZHJhd19nbHlwaHMnLiAqLwor ICBpZiAoY2xlYXJfZW9sX3AKKyAgICAgICYmIGVuZF9ocG9zID4gc3RhcnRfaHBvcykKKyAgICB7 CisgICAgICAvKiBBZHZhbmNlIHRoZSBvdXRwdXQgY3Vyc29yLiAqLworICAgICAgdy0+b3V0cHV0 X2N1cnNvci5ocG9zID0gZW5kX2hwb3M7CisgICAgICB3LT5vdXRwdXRfY3Vyc29yLnggPSB4Owor ICAgICAgRlJBTUVfUklGIChmKS0+Y2xlYXJfZW5kX29mX2xpbmUgKHcsIHJvdywgVEVYVF9BUkVB LCAtMSk7CisgICAgfQorICAvLyAgY2xvY2tfc3RhcnQgPSBjbG9jaygpOworICBtY19yZWRyYXdf aGVscGVyICh3LCBtYXRyaXgsIHJvdywgTUNfQ0FDSEUsIHN0YXJ0X2hwb3MsIGVuZF9ocG9zKTsK KyAgbWNfcmVkcmF3X2hlbHBlciAodywgbWF0cml4LCByb3csIENIX0NBQ0hFLCBzdGFydF9ocG9z LCBlbmRfaHBvcyk7CisgIG1jX3JlZHJhd19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBGQ19DQUNI RSwgc3RhcnRfaHBvcywgZW5kX2hwb3MpOworICAvLyAgY2xvY2tfZW5kID0gY2xvY2soKTsKKyAg Ly8gIGRvdWJsZSB0aW1lX2N1cnNvcnMgPSAoKGRvdWJsZSkgKGNsb2NrX2VuZCAtIGNsb2NrX3N0 YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgLy8gIGZwcmludGYgKHN0ZGVyciwgIm1jX3JlZHJh d19yb3cgKCVkKTogIGhwb3MgKCVkLyVkKSB8IGdseXBocyAoJWYpIHwgY3Vyc29ycyAoJWYpXG4i LAorICAvLyAgICAgICAgICAgICAgICAgICB2cG9zLCBzdGFydF9ocG9zLCBlbmRfaHBvcywgdGlt ZV9nbHlwaHMsIHRpbWVfY3Vyc29ycyk7Cit9CisKK3ZvaWQKK21jX2VyYXNlX2hlbHBlciAoc3Ry dWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhf cm93ICpyb3csCisgICAgICAgICAgICAgICAgIGVudW0gdHlwZV9vZl9jYWNoZSBjYWNoZV90eXBl KQoreworICBpbnQgcm93X3Zwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAg aWYgKHRyYWNlX3JlZGlzcGxheV9wKQorICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2VyYXNlX2hl bHBlciAoJXMpOiAgY2FjaGUgKCVzKSB8IHZwb3MgKCVkKVxuIiwKKyAgICAgIG1jX3dpbmRvdyAo dyksIG1jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChjYWNoZV90eXBlKSwgcm93X3Zwb3MpOworICBz dHJ1Y3QgbXVsdGlwbGVfY3Vyc29yc19jYWNoZSBmb29fZWx0czsKKyAgc3dpdGNoIChjYWNoZV90 eXBlKQorICAgIHsKKyAgICAgIGNhc2UgTk9fQ0FDSEU6CisgICAgICAgIHsKKyAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgICAgY2FzZSBNQ19DQUNIRToKKyAgICAgICAgeworICAgICAg ICAgIGZvb19lbHRzLmNhY2hlcyA9IHctPm1jX2VsdHMuY2FjaGVzOworICAgICAgICAgIGZvb19l bHRzLmFsbG9jYXRlZCA9IHctPm1jX2VsdHMuYWxsb2NhdGVkOworICAgICAgICAgIGZvb19lbHRz LnVzZWQgPSB3LT5tY19lbHRzLnVzZWQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICAgIGNhc2UgQ0hfQ0FDSEU6CisgICAgICAgIHsKKyAgICAgICAgICBmb29fZWx0cy5jYWNoZXMg PSB3LT5jaF9lbHRzLmNhY2hlczsKKyAgICAgICAgICBmb29fZWx0cy5hbGxvY2F0ZWQgPSB3LT5j aF9lbHRzLmFsbG9jYXRlZDsKKyAgICAgICAgICBmb29fZWx0cy51c2VkID0gdy0+Y2hfZWx0cy51 c2VkOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBjYXNlIEZDX0NBQ0hFOgor ICAgICAgICB7CisgICAgICAgICAgZm9vX2VsdHMuY2FjaGVzID0gdy0+ZmNfZWx0cy5jYWNoZXM7 CisgICAgICAgICAgZm9vX2VsdHMuYWxsb2NhdGVkID0gdy0+ZmNfZWx0cy5hbGxvY2F0ZWQ7Cisg ICAgICAgICAgZm9vX2VsdHMudXNlZCA9IHctPmZjX2VsdHMudXNlZDsKKyAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgIH0KKyAgZm9yIChpbnQgZWx0ID0gMDsgZWx0IDwgZm9vX2VsdHMu dXNlZDsgKytlbHQpCisgICAgeworICAgICAgaW50IHggPSBmb29fZWx0cy5jYWNoZXNbZWx0XS54 OworICAgICAgaW50IGZ4ID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uZng7CisgICAgICBpbnQgeSA9 IGZvb19lbHRzLmNhY2hlc1tlbHRdLnk7CisgICAgICBpbnQgZnkgPSBmb29fZWx0cy5jYWNoZXNb ZWx0XS5meTsKKyAgICAgIGludCBocG9zID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uaHBvczsKKyAg ICAgIGludCB2cG9zID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0udnBvczsKKyAgICAgIGludCB3ZCA9 IGZvb19lbHRzLmNhY2hlc1tlbHRdLndkOworICAgICAgaW50IGggPSBmb29fZWx0cy5jYWNoZXNb ZWx0XS5oOworICAgICAgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSA9IGZvb19lbHRz LmNhY2hlc1tlbHRdLmN1cnNvcl90eXBlOworICAgICAgaW50IGN1cnNvcl93aWR0aCA9IGZvb19l bHRzLmNhY2hlc1tlbHRdLmN1cnNvcl93aWR0aDsKKyAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2Zn ID0gey5yZWQgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5mb3JlZ3JvdW5kLnJlZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmZvcmVn cm91bmQuZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYmx1ZSA9IGZvb19l bHRzLmNhY2hlc1tlbHRdLmZvcmVncm91bmQuYmx1ZX07CisgICAgICBzdHJ1Y3QgbWNfUkdCIGxz bF9iZyA9IHsucmVkID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uYmFja2dyb3VuZC5yZWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5i YWNrZ3JvdW5kLmdyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUgPSBm b29fZWx0cy5jYWNoZXNbZWx0XS5iYWNrZ3JvdW5kLmJsdWV9OworICAgICAgYm9vbCBhY3RpdmVf cCA9IGZvb19lbHRzLmNhY2hlc1tlbHRdLmFjdGl2ZV9wOworICAgICAgZW51bSBtY19mbGF2b3Ig Z2x5cGhfZmxhdm9yID0gZm9vX2VsdHMuY2FjaGVzW2VsdF0uZ2x5cGhfZmxhdm9yOworICAgICAg Ym9vbCBlbmFibGVkX3AgPSBmb29fZWx0cy5jYWNoZXNbZWx0XS5lbmFibGVkX3A7CisgICAgICAv KiBgbWF0cml4X3JvdycgaW4gYGRpc3BuZXcuY2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0 cywKKyAgICAgIGVhc3NlcnQgKG1hdHJpeCAmJiBtYXRyaXgtPnJvd3MpOworICAgICAgZWFzc2Vy dCAocm93ID49IDAgJiYgcm93IDwgbWF0cml4LT5ucm93cyk7ICovCisgICAgICBib29sIGJhcmZf Y3Jhc2hfb25lID0gKG1hdHJpeCAmJiBtYXRyaXgtPnJvd3MpID8gZmFsc2UgOiB0cnVlOworICAg ICAgaWYgKGJhcmZfY3Jhc2hfb25lKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGJvb2wgYmFy Zl9jcmFzaF90d28gPSAodnBvcyA+PSAwICYmIHZwb3MgPCBtYXRyaXgtPm5yb3dzKSA/IGZhbHNl IDogdHJ1ZTsKKyAgICAgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICAgICAgY29udGludWU7Cisg ICAgICBpZiAodnBvcyA9PSByb3dfdnBvcworICAgICAgICAgICYmIGdseXBoX2ZsYXZvciA9PSBN Q19HTFlQSAorICAgICAgICAgICYmIGVuYWJsZWRfcCkKKyAgICAgICAgeworICAgICAgICAgIG1j X2VyYXNlX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIHksIGhwb3MsIHZwb3MsIGdseXBoX2Zs YXZvciwgY3Vyc29yX3R5cGUsIHdkKTsKKyAgICAgICAgICBmb29fZWx0cy5jYWNoZXNbZWx0XS5l bmFibGVkX3AgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2cG9zID09IHJv d192cG9zCisgICAgICAgICAgICAgICAgICYmIGVuYWJsZWRfcCkKKyAgICAgICAgICB7CisgICAg ICAgICAgICBib29sIHJlbW92ZV9wID0gdHJ1ZTsKKyAgICAgICAgICAgIG1jX2RyYXdfZXJhc2Vf aHlicmlkICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfdHlwZSwgY3Vyc29yX3dp ZHRoLCBsc2xfYmcsIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdseXBoX2ZsYXZvciwgcmVtb3ZlX3ApOworICAgICAgICAgICAgZm9vX2VsdHMuY2FjaGVzW2Vs dF0uZW5hYmxlZF9wID0gZmFsc2U7CisgICAgICAgICAgfQorICAgIH0KK30KKwordm9pZAorbWNf ZXJhc2Vfcm93IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgs IHN0cnVjdCBnbHlwaF9yb3cgKnJvdykKK3sKKyAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1Mg KHJvdywgbWF0cml4KTsKKyAgaWYgKHRyYWNlX3JlZGlzcGxheV9wKQorICAgIGZwcmludGYgKHN0 ZGVyciwgIm1jX2VyYXNlX3JvdyAoJXMpOiAgdnBvcyAoJWQpXG4iLCBtY193aW5kb3cgKHcpLCB2 cG9zKTsKKyAgbWNfZXJhc2VfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgTUNfQ0FDSEUpOworICBt Y19lcmFzZV9oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBDSF9DQUNIRSk7CisgIG1jX2VyYXNlX2hl bHBlciAodywgbWF0cml4LCByb3csIEZDX0NBQ0hFKTsKK30KKwordm9pZAorbWNfc2V0X2Vzc2Vu dGlhbHMgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgYWN0aXZlX3AsIHN0cnVjdCBtY19SR0IgKmNo X2ZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiAqZmNfZm9yZWdy b3VuZCwgaW50ICpmY194KQoreworICBpZiAoIUJVRkZFUlAgKHctPmNvbnRlbnRzKSkKKyAgICBy ZXR1cm47CisgIGlmIChOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2NvbmYp KQorICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJz KSkKKyAgICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJs ZSkpKQorICAgIHJldHVybjsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7 CisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIgKGJ1Zik7 CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVyICpv bGRfYnVmZmVyID0gTlVMTDsKKyAgcHRyZGlmZl90IG9wb2ludCA9ICh3ID09IFhXSU5ET1cgKHNl bGVjdGVkX3dpbmRvdykpCisgICAgICAgICAgICAgICAgICAgICA/IFBUCisgICAgICAgICAgICAg ICAgICAgICA6IFhGSVhOVU0gKEZtYXJrZXJfcG9zaXRpb24gKHctPnBvaW50bSkpOworICBwdHJk aWZmX3QgZmNfY3VycmVudF9jb2wgPSBtY19jdXJyZW50X2NvbHVtbiAodywgb3BvaW50KTsKKyAg aW50IGZyYW1lX2NoYXJfd2lkdGggPSBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOworICBib29sIGZp bGxfY29sdW1uX3AgPSAhTklMUCAoQlZBUiAoYiwgZmlsbF9jb2x1bW4pKTsKKyAgaW50IGZpbGxf Y29sID0gWEZJWE5VTSAoQlZBUiAoYiwgZmlsbF9jb2x1bW4pKTsKKyAgaW50IGhzY2xfeCA9IHct PmhzY3JvbGwgKiBmcmFtZV9jaGFyX3dpZHRoOworICBpZiAoYiAhPSBjdXJyZW50X2J1ZmZlcikK KyAgICB7CisgICAgICBvbGRfYnVmZmVyID0gY3VycmVudF9idWZmZXI7CisgICAgICBzZXRfYnVm ZmVyX2ludGVybmFsIChiKTsKKyAgICB9CisgICpmY194ID0gKGZpbGxfY29sdW1uX3AKKyAgICAg ICAgICAgJiYgIU5JTFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykpCisgICAgICAgICAgICA/IChm aWxsX2NvbCAqIGZyYW1lX2NoYXJfd2lkdGgpICsgdy0+bWMubG51bV9waXhlbF93aWR0aCAtIGhz Y2xfeAorICAgICAgICAgIDogKGZpbGxfY29sdW1uX3AKKyAgICAgICAgICAgICAmJiBOSUxQIChW ZGlzcGxheV9saW5lX251bWJlcnMpKQorICAgICAgICAgICAgPyAoZmlsbF9jb2wgKiBmcmFtZV9j aGFyX3dpZHRoKSAtIGhzY2xfeAorICAgICAgICAgIDogMDsKKyAgaWYgKG9sZF9idWZmZXIpCisg ICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgIGVudW0gZmFjZV9pZCBmaWxs X2NvbHVtbl9mYWNlX2lkID0KKyAgICAoIWFjdGl2ZV9wCisgICAgICYmICFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIGZjX2luYWN0aXZlX3dpbmRvd3MpKQorICAgICAmJiBOSUxQ IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkKKyAgICAgID8gbG9v a3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSkK KyAgICA6ICghYWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBmY19pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAo YiwgY2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIHctPmN1cnNvci54ID09ICpmY194KQor ICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiZmMtb3BvaW50LWluYWN0 aXZlLWZhY2UiKSwgdHJ1ZSkKKyAgICA6IChhY3RpdmVfcAorICAgICAgICYmICFOSUxQIChCVkFS IChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICYmICFOSUxQIChC VkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgJiYgdy0+Y3Vyc29yLnggPT0gKmZj X3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1vcG9pbnQt ZmFjZSIpLCB0cnVlKQorICAgIDogKCFhY3RpdmVfcAorICAgICAgICYmICFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIGZjX2luYWN0aXZlX3dpbmRvd3MpKQorICAgICAgICYmICFO SUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICYm ICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgJiYgdy0+Y3Vyc29y LnggIT0gKmZjX3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJm Yy1pbmFjdGl2ZS1mYWNlIiksIHRydWUpCisgICAgOiAoYWN0aXZlX3AKKyAgICAgICAmJiAhTklM UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAh TklMUCAoQlZBUiAoYiwgY2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIHctPmN1cnNvci54 ICE9ICpmY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiZmMt ZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZj LWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpmaWxsX2NvbHVtbl9mYWNlID0gRkFDRV9G Uk9NX0lEIChmLCBmaWxsX2NvbHVtbl9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3QgZmlsbF9jb2x1 bW5fY29sb3IgPSBmaWxsX2NvbHVtbl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVY XTsKKyAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBmaWxsX2NvbHVtbl9jb2xvciwgZmNfZm9yZWdy b3VuZCk7CisgIGVudW0gZmFjZV9pZCBldmVuX2ZhY2VfaWQgPQorICAgICghYWN0aXZlX3AKKyAg ICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3RpdmVfd2lu ZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistZXZlbi1u dW1iZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVk X2ZhY2UgKHcsIGYsIGludGVybiAoIistZXZlbi1udW1iZXJlZC1jb2x1bW4tZmFjZSIpLCB0cnVl KTsKKyAgc3RydWN0IGZhY2UgKmV2ZW5fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZXZlbl9mYWNl X2lkKTsKKyAgTGlzcF9PYmplY3QgZXZlbl9jb2xvciA9IGV2ZW5fZmFjZS0+bGZhY2VbTEZBQ0Vf Rk9SRUdST1VORF9JTkRFWF07CisgIHN0cnVjdCBtY19SR0IgZXZlbl9mb3JlZ3JvdW5kOworICBt Y194d19jb2xvcl92YWx1ZXMgKHcsIGV2ZW5fY29sb3IsICZldmVuX2ZvcmVncm91bmQpOworICBl bnVtIGZhY2VfaWQgb2RkX2ZhY2VfaWQgPQorICAgICghYWN0aXZlX3AKKyAgICAgJiYgIU5JTFAg KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3RpdmVfd2luZG93cykpKQorICAg ID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb2RkLW51bWJlcmVkLWNvbHVt bi1pbmFjdGl2ZS1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwg aW50ZXJuICgiKy1vZGQtbnVtYmVyZWQtY29sdW1uLWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBm YWNlICpvZGRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgb2RkX2ZhY2VfaWQpOworICBMaXNwX09i amVjdCBvZGRfY29sb3IgPSBvZGRfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07 CisgIHN0cnVjdCBtY19SR0Igb2RkX2ZvcmVncm91bmQ7CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAo dywgb2RkX2NvbG9yLCAmb2RkX2ZvcmVncm91bmQpOworICBlbnVtIGZhY2VfaWQgYmV5b25kX2Zp bGxfZmFjZV9pZCA9CisgICAgKCFhY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZF UiAody0+Y29udGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFt ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1iZXlvbmQtZmlsbC1jb2x1bW4taW5hY3RpdmUtZmFj ZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistYmV5 b25kLWZpbGwtY29sdW1uLWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpiZXlvbmRfZmls bF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBiZXlvbmRfZmlsbF9mYWNlX2lkKTsKKyAgTGlzcF9P YmplY3QgYmV5b25kX2ZpbGxfY29sb3IgPSBiZXlvbmRfZmlsbF9mYWNlLT5sZmFjZVtMRkFDRV9G T1JFR1JPVU5EX0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBiZXlvbmRfZmlsbF9mb3JlZ3JvdW5k OworICBtY194d19jb2xvcl92YWx1ZXMgKHcsIGJleW9uZF9maWxsX2NvbG9yLCAmYmV5b25kX2Zp bGxfZm9yZWdyb3VuZCk7CisgIC8qIHJlZCAqLworICBpZiAoZmNfY3VycmVudF9jb2wgJSAyICE9 IDAKKyAgICAgICYmICFmaWxsX2NvbHVtbl9wKQorICAgIHsKKyAgICAgIGNoX2ZvcmVncm91bmQt PnJlZCA9IG9kZF9mb3JlZ3JvdW5kLnJlZDsKKyAgICAgIGNoX2ZvcmVncm91bmQtPmdyZWVuID0g b2RkX2ZvcmVncm91bmQuZ3JlZW47CisgICAgICBjaF9mb3JlZ3JvdW5kLT5ibHVlID0gb2RkX2Zv cmVncm91bmQuYmx1ZTsKKyAgICB9CisgIC8qIHllbGxvdyAqLworICBpZiAoZmNfY3VycmVudF9j b2wgJSAyID09IDAKKyAgICAgICYmICFmaWxsX2NvbHVtbl9wKQorICAgIHsKKyAgICAgIGNoX2Zv cmVncm91bmQtPnJlZCA9IGV2ZW5fZm9yZWdyb3VuZC5yZWQ7CisgICAgICBjaF9mb3JlZ3JvdW5k LT5ncmVlbiA9IGV2ZW5fZm9yZWdyb3VuZC5ncmVlbjsKKyAgICAgIGNoX2ZvcmVncm91bmQtPmJs dWUgPSBldmVuX2ZvcmVncm91bmQuYmx1ZTsKKyAgICB9CisgIC8qIHJlZCAqLworICBpZiAoZmNf Y3VycmVudF9jb2wgJSAyICE9IDAKKyAgICAgICYmIGZpbGxfY29sdW1uX3AKKyAgICAgICYmIGZj X2N1cnJlbnRfY29sIDw9IGZpbGxfY29sKQorICAgIHsKKyAgICAgIGNoX2ZvcmVncm91bmQtPnJl ZCA9IG9kZF9mb3JlZ3JvdW5kLnJlZDsKKyAgICAgIGNoX2ZvcmVncm91bmQtPmdyZWVuID0gb2Rk X2ZvcmVncm91bmQuZ3JlZW47CisgICAgICBjaF9mb3JlZ3JvdW5kLT5ibHVlID0gb2RkX2ZvcmVn cm91bmQuYmx1ZTsKKyAgICB9CisgIC8qIHllbGxvdyAqLworICBpZiAoZmNfY3VycmVudF9jb2wg JSAyID09IDAKKyAgICAgICYmIGZpbGxfY29sdW1uX3AKKyAgICAgICYmIGZjX2N1cnJlbnRfY29s IDw9IGZpbGxfY29sKQorICAgIHsKKyAgICAgIGNoX2ZvcmVncm91bmQtPnJlZCA9IGV2ZW5fZm9y ZWdyb3VuZC5yZWQ7CisgICAgICBjaF9mb3JlZ3JvdW5kLT5ncmVlbiA9IGV2ZW5fZm9yZWdyb3Vu ZC5ncmVlbjsKKyAgICAgIGNoX2ZvcmVncm91bmQtPmJsdWUgPSBldmVuX2ZvcmVncm91bmQuYmx1 ZTsKKyAgICB9CisgIC8qIGdyZWVuICovCisgIGlmIChmaWxsX2NvbHVtbl9wCisgICAgICAmJiBm Y19jdXJyZW50X2NvbCA+IGZpbGxfY29sKQorICAgIHsKKyAgICAgIGNoX2ZvcmVncm91bmQtPnJl ZCA9IGJleW9uZF9maWxsX2ZvcmVncm91bmQucmVkOworICAgICAgY2hfZm9yZWdyb3VuZC0+Z3Jl ZW4gPSBiZXlvbmRfZmlsbF9mb3JlZ3JvdW5kLmdyZWVuOworICAgICAgY2hfZm9yZWdyb3VuZC0+ Ymx1ZSA9IGJleW9uZF9maWxsX2ZvcmVncm91bmQuYmx1ZTsKKyAgICB9Cit9CisKK3ZvaWQKK21j X2VyYXNlX3ByZV9zY3JvbGxfZGlzcGxheSAoc3RydWN0IHdpbmRvdyAqdykKK3sKKyAgYm9vbCBn b19wID0gKHctPm1jX2VsdHMudXNlZCA+IDAgfHwgdy0+Y2hfZWx0cy51c2VkID4gMCB8fCB3LT5m Y19lbHRzLnVzZWQgPiAwKTsKKyAgaWYgKHRyYWNlX3JlZGlzcGxheV9wKQorICAgIGZwcmludGYg KHN0ZGVyciwgIm1jX2VyYXNlX3ByZV9zY3JvbGxfZGlzcGxheSAoJXMpOiAgZ29fcCAoJXMpXG4i LAorICAgICAgICAgICAgICAgICAgICAgbWNfd2luZG93ICh3KSwgZ29fcCA/ICJ5ZXMiIDogIm5v Iik7CisgIGlmICghZ29fcCkKKyAgICByZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFN RSAody0+ZnJhbWUpOworICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpjdXJyZW50X21hdHJpeCA9IHct PmN1cnJlbnRfbWF0cml4OworICBib29sIHVwZGF0aW5nX2ZyYW1lX3AgPSBmYWxzZTsKKyAgaWYg KFhGUkFNRSAody0+ZnJhbWUpICE9IGYtPm1jX3VwZGF0aW5nX2ZyYW1lKQorICAgIHsKKyAgICAg IHVwZGF0aW5nX2ZyYW1lX3AgPSB0cnVlOworICAgICAgdXBkYXRlX2JlZ2luIChmKTsKKyAgICB9 CisgIGZvciAoaW50IHZwb3MgPSAwOworICAgICAgIHZwb3MgPCBjdXJyZW50X21hdHJpeC0+bnJv d3MKKyAgICAgICAmJiBNQVRSSVhfUk9XIChjdXJyZW50X21hdHJpeCwgdnBvcyktPmVuYWJsZWRf cAorICAgICAgICYmICh3LT5tY19lbHRzLnVzZWQgPiAwIHx8IHctPmNoX2VsdHMudXNlZCA+IDAg fHwgdy0+ZmNfZWx0cy51c2VkID4gMCk7CisgICAgICAgKyt2cG9zKQorICAgIHsKKyAgICAgIHN0 cnVjdCBnbHlwaF9yb3cgKnJvdyA9IE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCB2cG9zKTsK KyAgICAgIG1jX2VyYXNlX3JvdyAodywgY3VycmVudF9tYXRyaXgsIHJvdyk7CisgICAgfQorICBp ZiAodXBkYXRpbmdfZnJhbWVfcCkKKyAgICB1cGRhdGVfZW5kIChmKTsKKyAgbWNfcmVzZXRfY2Fj aGUgKHcsIE1DX0NBQ0hFKTsKKyAgbWNfcmVzZXRfY2FjaGUgKHcsIENIX0NBQ0hFKTsKKyAgbWNf cmVzZXRfY2FjaGUgKHcsIEZDX0NBQ0hFKTsKK30KKworREVGVU4gKCJtYy1zdGRlcnIiLCBGbWNf c3RkZXJyLCBTbWNfc3RkZXJyLCAwLCAxLCAiUCIsCisgICAgICAgZG9jOiAvKiBUb2dnbGUgdHJh Y2luZyBvZiBtdWx0aXBsZSBmYWtlIGN1cnNvcnMuCitXaXRoIEFSRywgdHVybiB0cmFjaW5nIG9u IGlmIGFuZCBvbmx5IGlmIEFSRyBpcyBwb3NpdGl2ZS4gKi8pCisgIChMaXNwX09iamVjdCBhcmcp Cit7CisgIGlmIChOSUxQIChhcmcpKQorICAgIG1jX3N0ZGVycl9wID0gIW1jX3N0ZGVycl9wOwor ICBlbHNlCisgICAgeworICAgICAgYXJnID0gRnByZWZpeF9udW1lcmljX3ZhbHVlIChhcmcpOwor ICAgICAgbWNfc3RkZXJyX3AgPSBYRklYTlVNIChhcmcpID4gMDsKKyAgICB9CisgIHJldHVybiBR bmlsOworfQorCisvKiBlbmQgTVVMVElQTEUtQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisKKwogDAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCSAgICAgIFdpbmRvdyBkaXNwbGF5IGRp bWVuc2lvbnMKQEAgLTEzMzk1LDYgKzE3NTExLDY5IEBAIGhzY3JvbGxfd2luZG93X3RyZWUgKExp c3BfT2JqZWN0IHdpbmRvdykKIAkgICAgICBlbHNlCiAJCXB0ID0gY2xpcF90b19ib3VuZHMgKEJF R1YsIG1hcmtlcl9wb3NpdGlvbiAody0+cG9pbnRtKSwgWlYpOwogCisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworLyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCisvKiAoZ2RiKSBidAor IzAgIHRlcm1pbmF0ZV9kdWVfdG9fc2lnbmFsIChzaWc9NiwgYmFja3RyYWNlX2xpbWl0PTIxNDc0 ODM2NDcpIGF0IGVtYWNzLmM6MzU5CisjMSAgMHgwMDAwMDAwMTAwMWVlOTk2IGluIGRpZSAoCisg ICAgbXNnPTB4MTAwMzJmYzg4ICJjaGFycG9zIDwgMCB8fCAoY2hhcnBvcyA+PSBCVUZfQkVHIChj dXJyZW50X2J1ZmZlcikgJiYgY2hhcnBvcyA8PSBaVikiLCBmaWxlPTB4MTAwMzJlMzJkICJ4ZGlz cC5jIiwgbGluZT03OTUxKSBhdCBhbGxvYy5jOjcyMTQKKyMyICAweDAwMDAwMDAxMDAwNGQyYWIg aW4gaW5pdF9pdGVyYXRvciAoaXQ9MHg3ZmZmNWZiZjllODAsIHc9MHgxMWFlNjIxNTAsCisgICAg Y2hhcnBvcz03NDMsIGJ5dGVwb3M9NzQzLCByb3c9MHgwLCBiYXNlX2ZhY2VfaWQ9REVGQVVMVF9G QUNFX0lEKQorICAgIGF0IHhkaXNwLmM6Nzk1MAorIzMgIDB4MDAwMDAwMDEwMDA0ZWZjOSBpbiBp bml0X2Zyb21fZGlzcGxheV9wb3MgKGl0PTB4N2ZmZjVmYmY5ZTgwLAorICAgIHc9MHgxMWFlNjIx NTAsIHBvcz0weDExZjljMDI1MCkgYXQgeGRpc3AuYzo4NDA0CisjNCAgMHgwMDAwMDAwMTAwMDRm NTQ2IGluIGluaXRfdG9fcm93X3N0YXJ0IChpdD0weDdmZmY1ZmJmOWU4MCwgdz0weDExYWU2MjE1 MCwKKyAgICByb3c9MHgxMWY5YzAyMDApIGF0IHhkaXNwLmM6ODUyOAorIzUgIDB4MDAwMDAwMDEw MDA2ZTUzNiBpbiBoc2Nyb2xsX3dpbmRvd190cmVlICh3aW5kb3c9Li4uKSBhdCB4ZGlzcC5jOjE4 NjE5CisqLworCisvKiAoZ2RiKSBidAorIzAgIHRlcm1pbmF0ZV9kdWVfdG9fc2lnbmFsIChzaWc9 NiwgYmFja3RyYWNlX2xpbWl0PTIxNDc0ODM2NDcpIGF0IGVtYWNzLmM6MzU5CisjMSAgMHgwMDAw MDAwMTAwMWVjYmM2IGluIGRpZSAoCisgICAgbXNnPTB4MTAwMzJmYWQ4ICJDSEFSUE9TIChwb3Mp ID49IEJFR1YgJiYgQ0hBUlBPUyAocG9zKSA8PSBaViIsCisgICAgZmlsZT0weDEwMDMyYzQ5ZCAi eGRpc3AuYyIsIGxpbmU9MTE3NDYpIGF0IGFsbG9jLmM6NzIxNAorIzIgIDB4MDAwMDAwMDEwMDA1 ODg1ZCBpbiByZXNlYXRfMSAoaXQ9MHg3ZmZmNWZiZjllMzAsIHBvcz0uLi4sCisgICAgc2V0X3N0 b3BfcD1mYWxzZSkgYXQgeGRpc3AuYzoxMTc0NgorIzMgIDB4MDAwMDAwMDEwMDA1ODcwNyBpbiBy ZXNlYXQgKGl0PTB4N2ZmZjVmYmY5ZTMwLCBwb3M9Li4uLCBmb3JjZV9wPXRydWUpCisgICAgYXQg eGRpc3AuYzoxMTY5OAorIzQgIDB4MDAwMDAwMDEwMDA0YzczMiBpbiBpbml0X2l0ZXJhdG9yIChp dD0weDdmZmY1ZmJmOWUzMCwgdz0weDExYmY3MmM5OCwKKyAgICBjaGFycG9zPTExNDU0OSwgYnl0 ZXBvcz0xMTQ1NDksIHJvdz0weDAsIGJhc2VfZmFjZV9pZD1ERUZBVUxUX0ZBQ0VfSUQpCisgICAg YXQgeGRpc3AuYzo4MTQzCisjNSAgMHgwMDAwMDAwMTAwMDRjZTAxIGluIGluaXRfZnJvbV9kaXNw bGF5X3BvcyAoaXQ9MHg3ZmZmNWZiZjllMzAsCisgICAgdz0weDExYmY3MmM5OCwgcG9zPTB4MTIx MjQzZDUwKSBhdCB4ZGlzcC5jOjgyOTkKKyM2ICAweDAwMDAwMDAxMDAwNGQzN2UgaW4gaW5pdF90 b19yb3dfc3RhcnQgKGl0PTB4N2ZmZjVmYmY5ZTMwLCB3PTB4MTFiZjcyYzk4LAorICAgIHJvdz0w eDEyMTI0M2QwMCkgYXQgeGRpc3AuYzo4NDIzCisjNyAgMHgwMDAwMDAwMTAwMDZjM2Y3IGluIGhz Y3JvbGxfd2luZG93X3RyZWUgKHdpbmRvdz0uLi4pIGF0IHhkaXNwLmM6MTg1NDYKKyovCisKKyAg LyogYGluaXRfaXRlcmF0b3InOiAgZWFzc2VydCAoY2hhcnBvcyA8IDAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfHwgKGNoYXJwb3MgPj0gQlVGX0JFRyAoY3VycmVudF9idWZmZXIp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjaGFycG9zIDw9IFpWKSk7 ICovCisKKyAgc3RydWN0IGRpc3BsYXlfcG9zICpwb3MgPSAmY3Vyc29yX3Jvdy0+c3RhcnQ7Cisg IHB0cmRpZmZfdCBjaGFycG9zID0gQ0hBUlBPUyAocG9zLT5wb3MpOworCisgIGJvb2wgYmFyZl9j cmFzaF9vbmUgPSAoY2hhcnBvcyA8IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoY2hh cnBvcyA+PSBCVUZfQkVHIChjdXJyZW50X2J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgY2hhcnBvcyA8PSBaVikpCisgICAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNl CisgICAgICAgICAgICAgICAgICAgICAgICA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX29uZSkK KyAgICByZXR1cm4gaHNjcm9sbGVkX3A7CisKKyAgLyogYHJlc2VhdF8xJzogIENIQVJQT1MgKHBv cykgPj0gQkVHViAmJiBDSEFSUE9TIChwb3MpIDw9IFpWICovCisgIGJvb2wgYmFyZl9jcmFzaF90 d28gPSAoY2hhcnBvcyA+PSBCRUdWICYmIGNoYXJwb3MgPD0gWlYpCisgICAgICAgICAgICAgICAg ICAgICAgICAgPyBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZTsKKyAgaWYg KGJhcmZfY3Jhc2hfdHdvKQorICAgIHJldHVybiBoc2Nyb2xsZWRfcDsKKworLyogZW5kIE1VTFRJ UExFLUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICAvKiBN b3ZlIGl0ZXJhdG9yIHRvIHB0IHN0YXJ0aW5nIGF0IGN1cnNvcl9yb3ctPnN0YXJ0IGluCiAJCSBh IGxpbmUgd2l0aCBpbmZpbml0ZSB3aWR0aC4gICovCiAJICAgICAgaW5pdF90b19yb3dfc3RhcnQg KCZpdCwgdywgY3Vyc29yX3Jvdyk7CkBAIC0xNDI4Nyw5ICsxODQ2NiwyMiBAQCByZWRpc3BsYXlf aW50ZXJuYWwgKHZvaWQpCiAJICAgICAgKnctPmRlc2lyZWRfbWF0cml4LT5tZXRob2QgPSAwOwog CSAgICAgIGRlYnVnX21ldGhvZF9hZGQgKHcsICJvcHRpbWl6YXRpb24gMSIpOwogI2VuZGlmCisK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKICNp ZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KKyAgaWYgKEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAg ICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQor ICAgIG1jX3VwZGF0ZV93aW5kb3dfZnJpbmdlcyAodywgZmFsc2UpOworICAgIGVsc2UKIAkgICAg ICB1cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIGZhbHNlKTsKICNlbmRpZgorCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCiAJICAgICAgZ290byB1cGRhdGU7CiAJICAgIH0KIAkgIGVsc2UK QEAgLTE3Njg3LDEwICsyMTg3OSwyMiBAQCByZWRpc3BsYXlfd2luZG93IChMaXNwX09iamVjdCB3 aW5kb3csIGJvb2wganVzdF90aGlzX29uZV9wKQogICAgIH0KIAogI2lmZGVmIEhBVkVfV0lORE9X X1NZU1RFTQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09S UyAqLworCisgIGJvb2wga2VlcF9jdXJyZW50X3AgPSAoanVzdF90aGlzX29uZV9wCisgICAgICAg ICAgICAgICAgICAgICAgICAgfHwgKCF1c2VkX2N1cnJlbnRfbWF0cml4X3AgJiYgIW92ZXJsYXlf YXJyb3dfc2VlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB3LT5wc2V1ZG9fd2luZG93 X3ApOworCisgIGJvb2wgZnJpbmdlc191cGRhdGVkX3AgPSAoQlVGRkVSUCAody0+Y29udGVudHMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHct PmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBt Y191cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIGtlZXBfY3VycmVudF9wKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiB1cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIGtlZXBfY3VycmVudF9w KTsKKwogICBpZiAoRlJBTUVfV0lORE9XX1AgKGYpCi0gICAgICAmJiB1cGRhdGVfd2luZG93X2Zy aW5nZXMgKHcsIChqdXN0X3RoaXNfb25lX3AKLQkJCQkgICAgfHwgKCF1c2VkX2N1cnJlbnRfbWF0 cml4X3AgJiYgIW92ZXJsYXlfYXJyb3dfc2VlbikKLQkJCQkgICAgfHwgdy0+cHNldWRvX3dpbmRv d19wKSkpCisgICAgICAmJiBmcmluZ2VzX3VwZGF0ZWRfcCkKICAgICB7CiAgICAgICB1cGRhdGVf YmVnaW4gKGYpOwogICAgICAgYmxvY2tfaW5wdXQgKCk7CkBAIC0xNzcwNSw2ICsyMTkwOSw5IEBA IHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0IHdpbmRvdywgYm9vbCBqdXN0X3RoaXNfb25l X3ApCiAgICAgICB1cGRhdGVfZW5kIChmKTsKICAgICB9CiAKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworCisKICAgaWYgKFdJTkRPV19CT1RUT01fRElWSURFUl9XSURUSCAodykpCiAgICAgeF9k cmF3X2JvdHRvbV9kaXZpZGVyICh3KTsKICNlbmRpZiAvKiBIQVZFX1dJTkRPV19TWVNURU0gKi8K QEAgLTE4MDEwLDYgKzIyMjE3LDE5IEBAIHRyeV93aW5kb3dfcmV1c2luZ19jdXJyZW50X21hdHJp eCAoc3RydWN0IHdpbmRvdyAqdykKIAkgICAgIHNjcm9sbF9ydW5faG9vayB3aWxsIGNsZWFyIHRo ZSBjdXJzb3IsIGFuZCB1c2UgdGhlCiAJICAgICBjdXJyZW50IG1hdHJpeCB0byBnZXQgdGhlIGhl aWdodCBvZiB0aGUgcm93IHRoZSBjdXJzb3IgaXMKIAkgICAgIGluLiAgKi8KKworCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBpZiAodHJhY2Vf cmVkaXNwbGF5X3ApCisgICAgZnByaW50ZiAoc3RkZXJyLCAidHJ5X3dpbmRvd19yZXVzaW5nX2N1 cnJlbnRfbWF0cml4IFsxIG9mIDJdICglcylcbiIsIG1jX3dpbmRvdyAodykpOworCisgIG1jX2Vy YXNlX3ByZV9zY3JvbGxfZGlzcGxheSAodyk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor CisKIAkgIHJ1bi5jdXJyZW50X3kgPSBzdGFydF9yb3ctPnk7CiAJICBydW4uZGVzaXJlZF95ID0g aXQuY3VycmVudF95OwogCSAgcnVuLmhlaWdodCA9IGl0Lmxhc3RfdmlzaWJsZV95IC0gaXQuY3Vy cmVudF95OwpAQCAtMTgxNzMsNiArMjIzOTMsMTkgQEAgdHJ5X3dpbmRvd19yZXVzaW5nX2N1cnJl bnRfbWF0cml4IChzdHJ1Y3Qgd2luZG93ICp3KQogCX0KIAogICAgICAgLyogU2Nyb2xsIHRoZSBk aXNwbGF5LiAgKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNV UlNPUlMgKi8KKworICBpZiAodHJhY2VfcmVkaXNwbGF5X3ApCisgICAgZnByaW50ZiAoc3RkZXJy LCAidHJ5X3dpbmRvd19yZXVzaW5nX2N1cnJlbnRfbWF0cml4IFsyIG9mIDJdICglcylcbiIsIG1j X3dpbmRvdyAodykpOworCisgIG1jX2VyYXNlX3ByZV9zY3JvbGxfZGlzcGxheSAodyk7CisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIHJ1bi5jdXJyZW50X3kgPSBmaXJzdF9y ZXVzYWJsZV9yb3ctPnk7CiAgICAgICBydW4uZGVzaXJlZF95ID0gV0lORE9XX0hFQURFUl9MSU5F X0hFSUdIVCAodyk7CiAgICAgICBydW4uaGVpZ2h0ID0gaXQubGFzdF92aXNpYmxlX3kgLSBydW4u Y3VycmVudF95OwpAQCAtMTkxMjcsNiArMjMzNjAsMTkgQEAgdHJ5X3dpbmRvd19pZCAoc3RydWN0 IHdpbmRvdyAqdykKICAgLyogU2Nyb2xsIHRoZSBkaXNwbGF5LiAgRG8gaXQgYmVmb3JlIGNoYW5n aW5nIHRoZSBjdXJyZW50IG1hdHJpeCBzbwogICAgICB0aGF0IHh0ZXJtLmMgZG9lc24ndCBnZXQg Y29uZnVzZWQgYWJvdXQgd2hlcmUgdGhlIGN1cnNvciBnbHlwaCBpcwogICAgICBmb3VuZC4gICov CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisK KyAgaWYgKHRyYWNlX3JlZGlzcGxheV9wKQorICAgIGZwcmludGYgKHN0ZGVyciwgInRyeV93aW5k b3dfaWQgKCVzKVxuIiwgbWNfd2luZG93ICh3KSk7CisKKyAgbWNfZXJhc2VfcHJlX3Njcm9sbF9k aXNwbGF5ICh3KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBpZiAoZHkgJiYg cnVuLmhlaWdodCkKICAgICB7CiAgICAgICB1cGRhdGVfYmVnaW4gKGYpOwpAQCAtMjAxMzMsNiAr MjQzNzksMTcgQEAgYXBwZW5kX3NwYWNlX2Zvcl9uZXdsaW5lIChzdHJ1Y3QgaXQgKml0LCBib29s IGRlZmF1bHRfZmFjZV9wKQogCSAgbWVtc2V0ICgmaXQtPnBvc2l0aW9uLCAwLCBzaXplb2YgaXQt PnBvc2l0aW9uKTsKIAkgIGl0LT5vYmplY3QgPSBRbmlsOwogCSAgaXQtPmMgPSBpdC0+Y2hhcl90 b19kaXNwbGF5ID0gJyAnOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQ TEUtQ1VSU09SUyAqLworCisgICAgICBpZiAoSVRfQllURVBPUyAoKml0KSA+PSBaVl9CWVRFKQor ICAgICAgICBpdC0+enZfcCA9IHRydWU7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisK IAkgIGl0LT5sZW4gPSAxOwogCiAJICAvKiBJZiB0aGUgZGVmYXVsdCBmYWNlIHdhcyByZW1hcHBl ZCwgYmUgc3VyZSB0byB1c2UgdGhlCkBAIC0yMTI2OSw5ICsyNTUyNiwyMiBAQCBtYXliZV9wcm9k dWNlX2xpbmVfbnVtYmVyIChzdHJ1Y3QgaXQgKml0KQogICAgICAgZWxzZQogCXRlbV9pdC5jID0g dGVtX2l0LmNoYXJfdG9fZGlzcGxheSA9ICpwOwogICAgICAgdGVtX2l0LmxlbiA9IDE7CisKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgICAg IGlmIChiZXlvbmRfenYpCisgICAgICAgIHRlbV9pdC56dl9wID0gdHJ1ZTsKKyAgICAgIHRlbV9p dC5jdXJyZW50X3kgPSBpdC0+Y3VycmVudF95OworICAgICAgdGVtX2l0LnZwb3MgPSBpdC0+dnBv czsKICAgICAgIC8qIE1ha2Ugc3VyZSB0aGVzZSBnbHlwaHMgd2lsbCBoYXZlIGEgInBvc2l0aW9u IiBvZiAtMS4gICovCiAgICAgICBTRVRfVEVYVF9QT1MgKHRlbV9pdC5wb3NpdGlvbiwgLTEsIC0x KTsKICAgICAgIFBST0RVQ0VfR0xZUEhTICgmdGVtX2l0KTsKKyAgICAgIHRlbV9pdC5ocG9zICs9 IDE7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAKICAgICAgIC8qIFN0b3AgcHJvZHVj aW5nIGdseXBocywgYW5kIHJlZnJhaW4gZnJvbSBwcm9kdWNpbmcgdGhlIGxpbmUKIAkgbnVtYmVy LCBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBzcGFjZSBvbiB0aGlzIGxpbmUuICAqLwpAQCAtMjEy ODQsNiArMjU1NTQsMzAgQEAgbWF5YmVfcHJvZHVjZV9saW5lX251bWJlciAoc3RydWN0IGl0ICpp dCkKIAl9CiAgICAgfQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUt Q1VSU09SUyAqLworCisgIExpc3BfT2JqZWN0IGJ1ZiA9IGl0LT53LT5jb250ZW50czsKKyAgQ0hF Q0tfQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoYnVmKTsKKyAg c3RydWN0IGJ1ZmZlciAqb2xkX2J1ZmZlciA9IE5VTEw7CisgIC8qIE5lZWRlZCBzbyB0aGF0IGJ1 ZmZlci1sb2NhbCB2YWx1ZXMgY2FuIGJlIGRldGVybWluZWQ7IGUuZy4sIHdoZW4gc3dpdGNoaW5n CisgIHRvIHRoZSBtaW5pYnVmZmVyLiAqLworICBpZiAoYiAhPSBjdXJyZW50X2J1ZmZlcikKKyAg ICB7CisgICAgICBvbGRfYnVmZmVyID0gY3VycmVudF9idWZmZXI7CisgICAgICBzZXRfYnVmZmVy X2ludGVybmFsIChiKTsKKyAgICB9CisgIGl0LT53LT5tYy5sbnVtX3BpeGVsX3dpZHRoID0gKCFO SUxQIChWZGlzcGxheV9saW5lX251bWJlcnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID8gdGVtX2l0LmN1cnJlbnRfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog MDsKKyAgaWYgKG9sZF9idWZmZXIpCisgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZl cik7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgLyogUmVjb3JkIHRoZSB3aWR0 aCBpbiBwaXhlbHMgd2UgbmVlZCBmb3IgdGhlIGxpbmUgbnVtYmVyIGRpc3BsYXkuICAqLwogICBp dC0+bG51bV9waXhlbF93aWR0aCA9IHRlbV9pdC5jdXJyZW50X3g7CiAgIC8qIENvcHkgdGhlIHBy b2R1Y2VkIGdseXBocyBpbnRvIElUJ3MgZ2x5cGhfcm93LiAgKi8KQEAgLTI3MDkyLDYgKzMxMzg2 LDIwIEBAIGFwcGVuZF9nbHlwaCAoc3RydWN0IGl0ICppdCkKIAkgICAgZ1sxXSA9ICpnOwogCSAg Z2x5cGggPSBpdC0+Z2x5cGhfcm93LT5nbHlwaHNbYXJlYV07CiAJfQorCisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+eCA9 IGl0LT5jdXJyZW50X3g7CisgICAgICBnbHlwaC0+eSA9IGl0LT5jdXJyZW50X3k7CisgICAgICBn bHlwaC0+aHBvcyA9IGl0LT5ocG9zOworICAgICAgZ2x5cGgtPnZwb3MgPSBpdC0+dnBvczsKKyAg ICAgIGdseXBoLT56dl9wID0gaXQtPnp2X3A7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor CisKICAgICAgIGdseXBoLT5jaGFycG9zID0gQ0hBUlBPUyAoaXQtPnBvc2l0aW9uKTsKICAgICAg IGdseXBoLT5vYmplY3QgPSBpdC0+b2JqZWN0OwogICAgICAgaWYgKGl0LT5waXhlbF93aWR0aCA+ IDApCkBAIC0yNzE3NSw2ICszMTQ4MywyMCBAQCBhcHBlbmRfY29tcG9zaXRlX2dseXBoIChzdHJ1 Y3QgaXQgKml0KQogCSAgICBnWzFdID0gKmc7CiAJICBnbHlwaCA9IGl0LT5nbHlwaF9yb3ctPmds eXBoc1tpdC0+YXJlYV07CiAJfQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVM VElQTEUtQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+eCA9IGl0LT5jdXJyZW50X3g7CisgICAg ICBnbHlwaC0+eSA9IGl0LT5jdXJyZW50X3k7CisgICAgICBnbHlwaC0+aHBvcyA9IGl0LT5ocG9z OworICAgICAgZ2x5cGgtPnZwb3MgPSBpdC0+dnBvczsKKyAgICAgIGdseXBoLT56dl9wID0gaXQt Pnp2X3A7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIGdseXBoLT5jaGFy cG9zID0gaXQtPmNtcF9pdC5jaGFycG9zOwogICAgICAgZ2x5cGgtPm9iamVjdCA9IGl0LT5vYmpl Y3Q7CiAgICAgICBlYXNzZXJ0IChpdC0+cGl4ZWxfd2lkdGggPD0gU0hSVF9NQVgpOwpAQCAtMjcz ODMsNiArMzE3MDUsMjAgQEAgcHJvZHVjZV9pbWFnZV9nbHlwaCAoc3RydWN0IGl0ICppdCkKIAl9 CiAgICAgICBpZiAoZ2x5cGggPCBpdC0+Z2x5cGhfcm93LT5nbHlwaHNbYXJlYSArIDFdKQogCXsK KworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKwor ICAgICAgZ2x5cGgtPnggPSBpdC0+Y3VycmVudF94OworICAgICAgZ2x5cGgtPnkgPSBpdC0+Y3Vy cmVudF95OworICAgICAgZ2x5cGgtPmhwb3MgPSBpdC0+aHBvczsKKyAgICAgIGdseXBoLT52cG9z ID0gaXQtPnZwb3M7CisgICAgICBnbHlwaC0+enZfcCA9IGl0LT56dl9wOworCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCiAJICBnbHlwaC0+Y2hhcnBvcyA9IENIQVJQT1MgKGl0LT5wb3Np dGlvbik7CiAJICBnbHlwaC0+b2JqZWN0ID0gaXQtPm9iamVjdDsKIAkgIGdseXBoLT5waXhlbF93 aWR0aCA9IGNsaXBfdG9fYm91bmRzICgtMSwgaXQtPnBpeGVsX3dpZHRoLCBTSFJUX01BWCk7CkBA IC0yNzQ4Niw2ICszMTgyMiwyMCBAQCBwcm9kdWNlX3h3aWRnZXRfZ2x5cGggKHN0cnVjdCBpdCAq aXQpCiAJfQogICAgICAgaWYgKGdseXBoIDwgaXQtPmdseXBoX3Jvdy0+Z2x5cGhzW2FyZWEgKyAx XSkKIAl7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JT ICovCisKKyAgICAgIGdseXBoLT54ID0gaXQtPmN1cnJlbnRfeDsKKyAgICAgIGdseXBoLT55ID0g aXQtPmN1cnJlbnRfeTsKKyAgICAgIGdseXBoLT5ocG9zID0gaXQtPmhwb3M7CisgICAgICBnbHlw aC0+dnBvcyA9IGl0LT52cG9zOworICAgICAgZ2x5cGgtPnp2X3AgPSBpdC0+enZfcDsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogCSAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChp dC0+cG9zaXRpb24pOwogCSAgZ2x5cGgtPm9iamVjdCA9IGl0LT5vYmplY3Q7CiAJICBnbHlwaC0+ cGl4ZWxfd2lkdGggPSBjbGlwX3RvX2JvdW5kcyAoLTEsIGl0LT5waXhlbF93aWR0aCwgU0hSVF9N QVgpOwpAQCAtMjc1NzIsNiArMzE5MjIsMjAgQEAgYXBwZW5kX3N0cmV0Y2hfZ2x5cGggKHN0cnVj dCBpdCAqaXQsIExpc3BfT2JqZWN0IG9iamVjdCwKIAkgICAgd2lkdGggLT0gaXQtPmZpcnN0X3Zp c2libGVfeCAtIGl0LT5jdXJyZW50X3g7CiAJICBlYXNzZXJ0ICh3aWR0aCA+IDApOwogCX0KKwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAg ICAgZ2x5cGgtPnggPSBpdC0+Y3VycmVudF94OworICAgICAgZ2x5cGgtPnkgPSBpdC0+Y3VycmVu dF95OworICAgICAgZ2x5cGgtPmhwb3MgPSBpdC0+aHBvczsKKyAgICAgIGdseXBoLT52cG9zID0g aXQtPnZwb3M7CisgICAgICBnbHlwaC0+enZfcCA9IGl0LT56dl9wOworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAgICAgICBnbHlwaC0+Y2hhcnBvcyA9IENIQVJQT1MgKGl0LT5wb3Np dGlvbik7CiAgICAgICBnbHlwaC0+b2JqZWN0ID0gb2JqZWN0OwogICAgICAgLyogRklYTUU6IEl0 IHdvdWxkIGJlIGJldHRlciB0byB1c2UgVFlQRV9NQVggaGVyZSwgYnV0CkBAIC0yODAyNiw2ICsz MjM5MCwyMCBAQCBhcHBlbmRfZ2x5cGhsZXNzX2dseXBoIChzdHJ1Y3QgaXQgKml0LCBpbnQgZmFj ZV9pZCwgYm9vbCBmb3Jfbm9fZm9udCwgaW50IGxlbiwKIAkgICAgZ1sxXSA9ICpnOwogCSAgZ2x5 cGggPSBpdC0+Z2x5cGhfcm93LT5nbHlwaHNbYXJlYV07CiAJfQorCisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+eCA9IGl0 LT5jdXJyZW50X3g7CisgICAgICBnbHlwaC0+eSA9IGl0LT5jdXJyZW50X3k7CisgICAgICBnbHlw aC0+aHBvcyA9IGl0LT5ocG9zOworICAgICAgZ2x5cGgtPnZwb3MgPSBpdC0+dnBvczsKKyAgICAg IGdseXBoLT56dl9wID0gaXQtPnp2X3A7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisK ICAgICAgIGdseXBoLT5jaGFycG9zID0gQ0hBUlBPUyAoaXQtPnBvc2l0aW9uKTsKICAgICAgIGds eXBoLT5vYmplY3QgPSBpdC0+b2JqZWN0OwogICAgICAgZWFzc2VydCAoaXQtPnBpeGVsX3dpZHRo IDw9IFNIUlRfTUFYKTsKQEAgLTI5MDc2LDEwICszMzQ1NCwzMyBAQCB4X2luc2VydF9nbHlwaHMg KHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnVwZGF0ZWRfcm93LAogCiAgIC8q IFdyaXRlIHRoZSBnbHlwaHMuICAqLwogICBocG9zID0gc3RhcnQgLSByb3ctPmdseXBoc1t1cGRh dGVkX2FyZWFdOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VS U09SUyAqLworCisgIGlmICgody0+bWNfZWx0cy51c2VkID4gMCB8fCB3LT5jaF9lbHRzLnVzZWQg PiAwIHx8IHctPmZjX2VsdHMudXNlZCA+IDApCisgICAgICAmJiB1cGRhdGVkX2FyZWEgPT0gVEVY VF9BUkVBKQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1 cnJlbnRfbWF0cml4OworICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0 cml4KTsKKyAgICAgIGludCBzdGFydF94ID0gdy0+b3V0cHV0X2N1cnNvci54OworICAgICAgaW50 IHN0YXJ0X2hwb3MgPSBocG9zOworICAgICAgaW50IGVuZF9ocG9zID0gaHBvcyArIGxlbjsKKyAg ICAgIGJvb2wgY2xlYXJfZW9sX3AgPSBmYWxzZTsKKyAgICAgIGVudW0gZHJhd19nbHlwaHNfZmFj ZSBobCA9IERSQVdfTk9STUFMX1RFWFQ7CisgICAgICBUUkFDRSAoKHN0ZGVyciwgInhfaW5zZXJ0 X2dseXBocyAoJWQpOiAgc3RhcnRfeCAoJWQpIHwgc3RhcnRfaHBvcyAoJWQpIHwgZW5kX2hwb3Mg KCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICB2cG9zLCBzdGFydF94LCBzdGFydF9ocG9z LCBlbmRfaHBvcykpOworICAgICAgbWNfcmVkcmF3X3JvdyAodywgbWF0cml4LCByb3csIHN0YXJ0 X3gsIHN0YXJ0X2hwb3MsIGVuZF9ocG9zLCBjbGVhcl9lb2xfcCwgaGwpOworICAgIH0KKyAgICBl bHNlCiAgIGRyYXdfZ2x5cGhzICh3LCB3LT5vdXRwdXRfY3Vyc29yLngsIHJvdywgdXBkYXRlZF9h cmVhLAogCSAgICAgICBocG9zLCBocG9zICsgbGVuLAogCSAgICAgICBEUkFXX05PUk1BTF9URVhU LCAwKTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBBZHZhbmNlIHRoZSBv dXRwdXQgY3Vyc29yLiAgKi8KICAgdy0+b3V0cHV0X2N1cnNvci5ocG9zICs9IGxlbjsKICAgdy0+ b3V0cHV0X2N1cnNvci54ICs9IHNoaWZ0X2J5X3dpZHRoOwpAQCAtMjk1MDUsOSArMzM5MDYsMzEg QEAgeF9maXhfb3ZlcmxhcHBpbmdfYXJlYSAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBo X3JvdyAqcm93LAogCSAgd2hpbGUgKGkgPCByb3ctPnVzZWRbYXJlYV0KIAkJICYmIHJvdy0+Z2x5 cGhzW2FyZWFdW2ldLm92ZXJsYXBzX3ZlcnRpY2FsbHlfcCk7CiAKKworLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgICAgICAgaWYgKCh3LT5tY19l bHRzLnVzZWQgPiAwIHx8IHctPmNoX2VsdHMudXNlZCA+IDAgfHwgdy0+ZmNfZWx0cy51c2VkID4g MCkKKyAgICAgICAgICAgICYmIGFyZWEgPT0gVEVYVF9BUkVBKQorICAgICAgICAgIHsKKyAgICAg ICAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4Owor ICAgICAgICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAg ICAgICAgICAgIGludCBzdGFydF9ocG9zID0gc3RhcnQ7CisgICAgICAgICAgICBpbnQgZW5kX2hw b3MgPSBpOworICAgICAgICAgICAgYm9vbCBjbGVhcl9lb2xfcCA9IGZhbHNlOworICAgICAgICAg ICAgZW51bSBkcmF3X2dseXBoc19mYWNlIGhsID0gRFJBV19OT1JNQUxfVEVYVDsKKyAgICAgICAg ICAgIFRSQUNFICgoc3RkZXJyLCAieF9maXhfb3ZlcmxhcHBpbmdfYXJlYSAoJWQpOiAgc3RhcnRf eCAoJWQpIHwgc3RhcnRfaHBvcyAoJWQpIHwgZW5kX2hwb3MgKCVkKVxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2cG9zLCBzdGFydF94LCBzdGFydF9ocG9zLCBlbmRfaHBvcykpOwor ICAgICAgICAgICAgbWNfcmVkcmF3X3JvdyAodywgbWF0cml4LCByb3csIHN0YXJ0X3gsIHN0YXJ0 X2hwb3MsIGVuZF9ocG9zLCBjbGVhcl9lb2xfcCwgaGwpOworICAgICAgICAgIH0KKyAgICAgICAg ICBlbHNlCiAJICBkcmF3X2dseXBocyAodywgc3RhcnRfeCwgcm93LCBhcmVhLAogCQkgICAgICAg c3RhcnQsIGksCiAJCSAgICAgICBEUkFXX05PUk1BTF9URVhULCBvdmVybGFwcyk7CisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCisKIAl9CiAgICAgICBlbHNlCiAJewpAQCAtMjk3NTgsMTAg KzM0MTgxLDE3IEBAIGRpc3BsYXlfYW5kX3NldF9jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIGJv b2wgb24sCiAgIG5ld19jdXJzb3JfdHlwZSA9IGdldF93aW5kb3dfY3Vyc29yX3R5cGUgKHcsIGds eXBoLAogCQkJCQkgICAgJm5ld19jdXJzb3Jfd2lkdGgsICZhY3RpdmVfY3Vyc29yKTsKIAorCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKwogICAvKiBJ ZiBjdXJzb3IgaXMgY3VycmVudGx5IGJlaW5nIHNob3duIGFuZCB3ZSBkb24ndCB3YW50IGl0IHRv IGJlIG9yCiAgICAgIGl0IGlzIGluIHRoZSB3cm9uZyBwbGFjZSwgb3IgdGhlIGN1cnNvciB0eXBl IGlzIG5vdCB3aGF0IHdlIHdhbnQsCiAgICAgIGVyYXNlIGl0LiAgKi8KICAgaWYgKHctPnBoeXNf Y3Vyc29yX29uX3AKKyAgICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg Y3Jvc3NoYWlycykpCisgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IGZjX3Zpc2libGUpKQorICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMp LCBtY19jb25mKSkKICAgICAgICYmICghb24KIAkgIHx8IHctPnBoeXNfY3Vyc29yLnggIT0geAog CSAgfHwgdy0+cGh5c19jdXJzb3IueSAhPSB5CkBAIC0yOTc3NCw2ICszNDIwNCw5IEBAIGRpc3Bs YXlfYW5kX3NldF9jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgb24sCiAJICAgICAgJiYg bmV3X2N1cnNvcl93aWR0aCAhPSB3LT5waHlzX2N1cnNvcl93aWR0aCkpKQogICAgIGVyYXNlX3Bo eXNfY3Vyc29yICh3KTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBEb24n dCBjaGVjayBwaHlzX2N1cnNvcl9vbl9wIGhlcmUgYmVjYXVzZSB0aGF0IGZsYWcgaXMgb25seSBz ZXQKICAgICAgdG8gZmFsc2UgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlIGN1 cnNvciBoYXMgYmVlbgogICAgICBjb21wbGV0ZWx5IGVyYXNlZCwgdG8gYXZvaWQgdGhlIGV4dHJh IHdvcmsgb2YgZXJhc2luZyB0aGUgY3Vyc29yCkBAIC0yOTc5Miw5ICszNDIyNSwxOSBAQCBkaXNw bGF5X2FuZF9zZXRfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9uLAogICAgICAgdy0+ cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7CiAgICAgfQogCi0gIEZSQU1FX1JJRiAoZiktPmRyYXdf d2luZG93X2N1cnNvciAodywgZ2x5cGhfcm93LCB4LCB5LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5ld19jdXJzb3JfdHlwZSwgbmV3X2N1cnNvcl93aWR0aCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiwgYWN0aXZlX2N1cnNvcik7CisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGlmIChO SUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgJiYg TklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY192aXNpYmxlKSkKKyAgICAgICYm IE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpKQorICAgIEZSQU1F X1JJRiAoZiktPmRyYXdfd2luZG93X2N1cnNvciAodywgZ2x5cGhfcm93LCB4LCB5LCBuZXdfY3Vy c29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3Vy c29yX3dpZHRoLCBvbiwgYWN0aXZlX2N1cnNvcik7CisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworCisKIH0KIAogCkBAIC0yOTg4Nyw3ICszNDMzMCwyNyBAQCBkcmF3X3Jvd193aXRoX21vdXNl X2ZhY2UgKHN0cnVjdCB3aW5kb3cgKncsIGludCBzdGFydF94LCBzdHJ1Y3QgZ2x5cGhfcm93ICpy b3csCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAgIGlmIChGUkFNRV9XSU5ET1dfUCAoWEZS QU1FICh3LT5mcmFtZSkpKQogICAgIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgICAgaWYgKHctPm1jX2VsdHMudXNlZCA+IDAgfHwg dy0+Y2hfZWx0cy51c2VkID4gMCB8fCB3LT5mY19lbHRzLnVzZWQgPiAwKQorICAgICAgICB7Cisg ICAgICAgICAgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4ID0gdy0+Y3VycmVudF9tYXRyaXg7 CisgICAgICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAg ICAgICAgICBib29sIGNsZWFyX2VvbF9wID0gZmFsc2U7CisgICAgICAgICAgZW51bSBkcmF3X2ds eXBoc19mYWNlIGhsID0gZHJhdzsKKyAgICAgICAgICBUUkFDRSAoKHN0ZGVyciwgImRyYXdfcm93 X3dpdGhfbW91c2VfZmFjZSAoJWQpOiAgc3RhcnRfeCAoJWQpIHwgc3RhcnRfaHBvcyAoJWQpIHwg ZW5kX2hwb3MgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdnBvcywgc3RhcnRf eCwgc3RhcnRfaHBvcywgZW5kX2hwb3MpKTsKKyAgICAgICAgICBtY19yZWRyYXdfcm93ICh3LCBt YXRyaXgsIHJvdywgc3RhcnRfeCwgc3RhcnRfaHBvcywgZW5kX2hwb3MsIGNsZWFyX2VvbF9wLCBo bCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQogICAgICAgZHJhd19nbHlwaHMgKHcsIHN0YXJ0 X3gsIHJvdywgVEVYVF9BUkVBLCBzdGFydF9ocG9zLCBlbmRfaHBvcywgZHJhdywgMCk7CisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK QEAgLTMxOTQ1LDExICszNjQwOCwzNCBAQCBleHBvc2VfYXJlYSAoc3RydWN0IHdpbmRvdyAqdywg c3RydWN0IGdseXBoX3JvdyAqcm93LCBYUmVjdGFuZ2xlICpyLAogICBzdHJ1Y3QgZ2x5cGggKmxh c3Q7CiAgIGludCBmaXJzdF94LCBzdGFydF94LCB4OwogCisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCiAgIGlmIChhcmVhID09IFRFWFRfQVJFQSAm JiByb3ctPmZpbGxfbGluZV9wKQorICAgIHsKKyAgICAgIGlmICh3LT5tY19lbHRzLnVzZWQgPiAw IHx8IHctPmNoX2VsdHMudXNlZCA+IDAgfHwgdy0+ZmNfZWx0cy51c2VkID4gMCkKKyAgICAgICAg eworICAgICAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1cnJlbnRfbWF0 cml4OworICAgICAgICAgIGludCB2cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3csIG1hdHJpeCk7 CisgICAgICAgICAgaW50IHN0YXJ0X3ggPSAwOworICAgICAgICAgIGludCBzdGFydF9ocG9zID0g MDsKKyAgICAgICAgICBpbnQgZW5kX2hwb3MgPSByb3ctPnVzZWRbVEVYVF9BUkVBXTsKKyAgICAg ICAgICBib29sIGNsZWFyX2VvbF9wID0gZmFsc2U7CisgICAgICAgICAgZW51bSBkcmF3X2dseXBo c19mYWNlIGhsID0gRFJBV19OT1JNQUxfVEVYVDsKKyAgICAgICAgICBUUkFDRSAoKHN0ZGVyciwg ImV4cG9zZV9hcmVhICglZCk6ICBXcml0ZSB0aGUgd2hvbGUgbGluZS5cbiIsIHZwb3MpKTsKKyAg ICAgICAgICBtY19yZWRyYXdfcm93ICh3LCBtYXRyaXgsIHJvdywgc3RhcnRfeCwgc3RhcnRfaHBv cywgZW5kX2hwb3MsIGNsZWFyX2VvbF9wLCBobCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQog ICAgIC8qIElmIHJvdyBleHRlbmRzIGZhY2UgdG8gZW5kIG9mIGxpbmUgd3JpdGUgdGhlIHdob2xl IGxpbmUuICAqLwogICAgIGRyYXdfZ2x5cGhzICh3LCAwLCByb3csIGFyZWEsCiAJCSAwLCByb3ct PnVzZWRbYXJlYV0sCiAJCSBEUkFXX05PUk1BTF9URVhULCAwKTsKKyAgICB9CisKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworCisKICAgZWxzZQogICAgIHsKICAgICAgIC8qIFNldCBTVEFSVF9Y IHRvIHRoZSB3aW5kb3ctcmVsYXRpdmUgc3RhcnQgcG9zaXRpb24gZm9yIGRyYXdpbmcgZ2x5cGhz IG9mCkBAIC0zMTk4MSwxMSArMzY0NjcsMzQgQEAgZXhwb3NlX2FyZWEgKHN0cnVjdCB3aW5kb3cg KncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgWFJlY3RhbmdsZSAqciwKIAkgICsrbGFzdDsKIAl9 CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisK ICAgICAgIC8qIFJlcGFpbnQuICAqLwotICAgICAgaWYgKGxhc3QgPiBmaXJzdCkKKyAgICAgIC8q IEZsb2F0aW5nIGZha2UgY3Vyc29ycyB3aWxsIGV4aXN0IHdoZW4gKGxhc3QgPT0gZmlyc3QpLiAq LworICAgICAgaWYgKCh3LT5tY19lbHRzLnVzZWQgPiAwIHx8IHctPmNoX2VsdHMudXNlZCA+IDAg fHwgdy0+ZmNfZWx0cy51c2VkID4gMCkKKyAgICAgICAgICAmJiBhcmVhID09IFRFWFRfQVJFQSkK KyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1 cnJlbnRfbWF0cml4OworICAgICAgICAgIGludCB2cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3cs IG1hdHJpeCk7CisgICAgICAgICAgc3RhcnRfeCA9IGZpcnN0X3ggLSBzdGFydF94OworICAgICAg ICAgIGludCBzdGFydF9ocG9zID0gZmlyc3QgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdOworICAg ICAgICAgIGludCBlbmRfaHBvcyA9IGxhc3QgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdOworICAg ICAgICAgIGJvb2wgY2xlYXJfZW9sX3AgPSBmYWxzZTsKKyAgICAgICAgICBlbnVtIGRyYXdfZ2x5 cGhzX2ZhY2UgaGwgPSBEUkFXX05PUk1BTF9URVhUOworICAgICAgICAgIFRSQUNFICgoc3RkZXJy LCAiZXhwb3NlX2FyZWEgKCVkKTogIHN0YXJ0X3ggKCVkKSB8IHN0YXJ0X2hwb3MgKCVkKSB8IGVu ZF9ocG9zICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZwb3MsIHN0YXJ0X3gs IHN0YXJ0X2hwb3MsIGVuZF9ocG9zKSk7CisgICAgICAgICAgbWNfcmVkcmF3X3JvdyAodywgbWF0 cml4LCByb3csIHN0YXJ0X3gsIHN0YXJ0X2hwb3MsIGVuZF9ocG9zLCBjbGVhcl9lb2xfcCwgaGwp OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxhc3QgPiBmaXJzdCkKIAlkcmF3X2dseXBo cyAodywgZmlyc3RfeCAtIHN0YXJ0X3gsIHJvdywgYXJlYSwKIAkJICAgICBmaXJzdCAtIHJvdy0+ Z2x5cGhzW2FyZWFdLCBsYXN0IC0gcm93LT5nbHlwaHNbYXJlYV0sCiAJCSAgICAgRFJBV19OT1JN QUxfVEVYVCwgMCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICB9CiB9CiAK QEAgLTMxOTk5LDEwICszNjUwOCwzMyBAQCBleHBvc2VfbGluZSAoc3RydWN0IHdpbmRvdyAqdywg c3RydWN0IGdseXBoX3JvdyAqcm93LCBYUmVjdGFuZ2xlICpyKQogewogICBlYXNzZXJ0IChyb3ct PmVuYWJsZWRfcCk7CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1D VVJTT1JTICovCisKICAgaWYgKHJvdy0+bW9kZV9saW5lX3AgfHwgdy0+cHNldWRvX3dpbmRvd19w KQorICAgIHsKKyAgICAgIGlmICh3LT5tY19lbHRzLnVzZWQgPiAwIHx8IHctPmNoX2VsdHMudXNl ZCA+IDAgfHwgdy0+ZmNfZWx0cy51c2VkID4gMCkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVj dCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4OworICAgICAgICAgIGlu dCB2cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3csIG1hdHJpeCk7CisgICAgICAgICAgaW50IHN0 YXJ0X3ggPSAwOworICAgICAgICAgIGludCBzdGFydF9ocG9zID0gMDsKKyAgICAgICAgICBpbnQg ZW5kX2hwb3MgPSByb3ctPnVzZWRbVEVYVF9BUkVBXTsKKyAgICAgICAgICBib29sIGNsZWFyX2Vv bF9wID0gZmFsc2U7CisgICAgICAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIGhsID0gRFJBV19O T1JNQUxfVEVYVDsKKyAgICAgICAgICBUUkFDRSAoKHN0ZGVyciwgImV4cG9zZV9saW5lICglZCk6 ICBXcml0ZSB0aGUgd2hvbGUgbGluZS5cbiIsIHZwb3MpKTsKKyAgICAgICAgICBtY19yZWRyYXdf cm93ICh3LCBtYXRyaXgsIHJvdywgc3RhcnRfeCwgc3RhcnRfaHBvcywgZW5kX2hwb3MsIGNsZWFy X2VvbF9wLCBobCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQogICAgIGRyYXdfZ2x5cGhzICh3 LCAwLCByb3csIFRFWFRfQVJFQSwKIAkJIDAsIHJvdy0+dXNlZFtURVhUX0FSRUFdLAogCQkgRFJB V19OT1JNQUxfVEVYVCwgMCk7CisgICAgfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwor CiAgIGVsc2UKICAgICB7CiAgICAgICBpZiAocm93LT51c2VkW0xFRlRfTUFSR0lOX0FSRUFdKQpA QCAtMzI1NTAsNiArMzcwODIsMjIgQEAgeF9pbnRlcnNlY3RfcmVjdGFuZ2xlcyAoWFJlY3Rhbmds ZSAqcjEsIFhSZWN0YW5nbGUgKnIyLCBYUmVjdGFuZ2xlICpyZXN1bHQpCiB2b2lkCiBzeW1zX29m X3hkaXNwICh2b2lkKQogeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQ TEUtQ1VSU09SUyAqLworCisgIGRlZnN1YnIgKCZTbWNfZHVtcF9nbHlwaF9yb3cpOworCisgIGRl ZnN1YnIgKCZTbWNfZHVtcF9nbHlwaF9tYXRyaXgpOworCisgIGRlZnN1YnIgKCZTbWNfY3VycmVu dF9jb2x1bW4pOworCisgIGRlZnN1YnIgKCZTbWNfc3RkZXJyKTsKKworLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisKKwogICBWd2l0aF9lY2hvX2FyZWFfc2F2ZV92ZWN0b3IgPSBRbmlsOwogICBz dGF0aWNwcm8gKCZWd2l0aF9lY2hvX2FyZWFfc2F2ZV92ZWN0b3IpOwogCmRpZmYgLS1naXQgYS9z cmMveHRlcm0uYyBiL3NyYy94dGVybS5jCmluZGV4IDVhYTNlM2YuLjk1M2ExMDQgMTAwNjQ0Ci0t LSBhL3NyYy94dGVybS5jCisrKyBiL3NyYy94dGVybS5jCkBAIC0xMzIsNiArMTMyLDg2OSBAQCBh bG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uICAqLwogI2luY2x1ZGUgPFgxMS9YS0JsaWIuaD4KICNlbmRpZgogCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCisjaWZk ZWYgR0xZUEhfREVCVUcKK3N0YXRpYyB2b2lkIHhfY2hlY2tfZm9udCAoc3RydWN0IGZyYW1lICos IHN0cnVjdCBmb250ICopOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHhfc2V0X21vZGVfbGluZV9m YWNlX2djIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworCitzdGF0aWMgdm9pZCB4X3NldF9tb3Vz ZV9mYWNlX2djIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworCitzdGF0aWMgdm9pZCB4X2NsaXBf dG9fcm93IChzdHJ1Y3Qgd2luZG93ICosIHN0cnVjdCBnbHlwaF9yb3cgKiwgZW51bSBnbHlwaF9y b3dfYXJlYSwgR0MpOworCitzdGF0aWMgdm9pZCB4X2RyYXdfcmVjdGFuZ2xlIChzdHJ1Y3QgZnJh bWUgKiwgR0MsIGludCwgaW50LCBpbnQsIGludCk7CisKK3N0YXRpYyB2b2lkIHhfcmVzZXRfY2xp cF9yZWN0YW5nbGVzIChzdHJ1Y3QgZnJhbWUgKiwgR0MpOworCitzdGF0aWMgdm9pZCB4X2ZpbGxf cmVjdGFuZ2xlIChzdHJ1Y3QgZnJhbWUgKiwgR0MsIGludCwgaW50LCBpbnQsIGludCk7CisKK3N0 YXRpYyB2b2lkIHhfZHJhd19nbHlwaF9zdHJpbmdfYmdfcmVjdCAoc3RydWN0IGdseXBoX3N0cmlu ZyAqLCBpbnQsIGludCwgaW50LCBpbnQpOworCitzdGF0aWMgdm9pZCB4X3NldF9jbGlwX3JlY3Rh bmdsZXMgKHN0cnVjdCBmcmFtZSAqLCBHQywgWFJlY3RhbmdsZSAqLCBpbnQpOworCitzdGF0aWMg dm9pZCB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7 CisKK3N0YXRpYyB2b2lkIHhfZHJhd19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAoc3RydWN0IGds eXBoX3N0cmluZyAqLCBib29sKTsKKworc3RhdGljIHZvaWQgeF9kcmF3X2dseXBoX3N0cmluZ19i b3ggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfc2V0X2dseXBoX3N0 cmluZ19jbGlwcGluZ19leGFjdGx5IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIHN0cnVjdCBnbHlw aF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19pbWFnZV9nbHlwaF9zdHJpbmcgKHN0 cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19nbHlwaF9zdHJpbmdf Zm9yZWdyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgeF9kcmF3 X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAq KTsKKworc3RhdGljIHZvaWQgeF9kcmF3X2dseXBobGVzc19nbHlwaF9zdHJpbmdfZm9yZWdyb3Vu ZCAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgeF9kcmF3X3VuZGVyd2F2 ZSAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKwordm9pZAorbWNfeHdfY29sb3JfdmFsdWVzIChz dHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCBjb2xvciwgc3RydWN0IG1jX1JHQiAqbHNsKQor eworICBDSEVDS19TVFJJTkcgKGNvbG9yKTsKKyAgWENvbG9yIHRlbXA7CisgIHN0cnVjdCBmcmFt ZSAqZiA9IGRlY29kZV93aW5kb3dfc3lzdGVtX2ZyYW1lICh3LT5mcmFtZSk7CisgIGlmICh4X2Rl ZmluZWRfY29sb3IgKGYsIFNTREFUQSAoY29sb3IpLCAmdGVtcCwgZmFsc2UpKQorICAgIHsKKyAg ICAgIGxzbC0+cmVkID0gdGVtcC5yZWQgLyA2NTUzNS4wOworICAgICAgbHNsLT5ncmVlbiA9IHRl bXAuZ3JlZW4gLyA2NTUzNS4wOworICAgICAgbHNsLT5ibHVlID0gdGVtcC5ibHVlIC8gNjU1MzUu MDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBsc2wtPnJlZCA9IC0xLjA7CisgICAgICBs c2wtPmdyZWVuID0gLTEuMDsKKyAgICAgIGxzbC0+Ymx1ZSA9IC0xLjA7CisgICAgfQorfQorCisv KiBTZXQgUy0+Z2MgdG8gYSBzdWl0YWJsZSBHQyBmb3IgZHJhd2luZyBnbHlwaCBzdHJpbmcgUyBp biBjdXJzb3IgZmFjZS4gKi8KK3N0YXRpYyB2b2lkCittY194X3NldF9jdXJzb3JfZ2MgKHN0cnVj dCBnbHlwaF9zdHJpbmcgKnMsIGJvb2wgY3Vyc29yX2djX3ApCit7CisgIGlmIChjdXJzb3JfZ2Nf cCkKKyAgICB7CisgICAgICBzLT5nYyA9IHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYzsK KyAgICAgIHJldHVybjsKKyAgICB9CisgIGlmIChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYp CisgICAgICAmJiBzLT5mYWNlLT5iYWNrZ3JvdW5kID09IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwg KHMtPmYpCisgICAgICAmJiBzLT5mYWNlLT5mb3JlZ3JvdW5kID09IEZSQU1FX0ZPUkVHUk9VTkRf UElYRUwgKHMtPmYpCisgICAgICAmJiAhcy0+Y21wKQorICAgIHMtPmdjID0gcy0+Zi0+b3V0cHV0 X2RhdGEueC0+Y3Vyc29yX2djOworICBlbHNlCisgICAgeworICAgICAgLyogQ3Vyc29yIG9uIG5v bi1kZWZhdWx0IGZhY2U6IG11c3QgbWVyZ2UuICAqLworICAgICAgWEdDVmFsdWVzIHhnY3Y7Cisg ICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CisgICAgICB4Z2N2LmJhY2tncm91bmQgPSBzLT5mLT5v dXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWw7CisgICAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5m YWNlLT5iYWNrZ3JvdW5kOworICAgICAgLyogSWYgdGhlIGdseXBoIHdvdWxkIGJlIGludmlzaWJs ZSwgdHJ5IGEgZGlmZmVyZW50IGZvcmVncm91bmQuICAqLworICAgICAgaWYgKHhnY3YuZm9yZWdy b3VuZCA9PSB4Z2N2LmJhY2tncm91bmQpCisgICAgICAgIHhnY3YuZm9yZWdyb3VuZCA9IHMtPmZh Y2UtPmZvcmVncm91bmQ7CisgICAgICBpZiAoeGdjdi5mb3JlZ3JvdW5kID09IHhnY3YuYmFja2dy b3VuZCkKKyAgICAgICAgeGdjdi5mb3JlZ3JvdW5kID0gcy0+Zi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX2ZvcmVncm91bmRfcGl4ZWw7CisgICAgICBpZiAoeGdjdi5mb3JlZ3JvdW5kID09IHhnY3Yu YmFja2dyb3VuZCkKKyAgICAgICAgeGdjdi5mb3JlZ3JvdW5kID0gcy0+ZmFjZS0+Zm9yZWdyb3Vu ZDsKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzIGRpc3RpbmN0IGZyb20gdGV4dCBp biB0aGlzIGZhY2UuICAqLworICAgICAgaWYgKHhnY3YuYmFja2dyb3VuZCA9PSBzLT5mYWNlLT5i YWNrZ3JvdW5kCisgICAgICAgICAgJiYgeGdjdi5mb3JlZ3JvdW5kID09IHMtPmZhY2UtPmZvcmVn cm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICB4Z2N2LmJhY2tncm91bmQgPSBzLT5mYWNlLT5m b3JlZ3JvdW5kOworICAgICAgICAgIHhnY3YuZm9yZWdyb3VuZCA9IHMtPmZhY2UtPmJhY2tncm91 bmQ7CisgICAgICAgIH0KKyAgICAgIElGX0RFQlVHICh4X2NoZWNrX2ZvbnQgKHMtPmYsIHMtPmZv bnQpKTsKKyAgICAgIHhnY3YuZ3JhcGhpY3NfZXhwb3N1cmVzID0gRmFsc2U7CisgICAgICBtYXNr ID0gR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kIHwgR0NHcmFwaGljc0V4cG9zdXJlczsKKyAg ICAgIGlmIChGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYpLT5zY3JhdGNoX2N1cnNvcl9nYykKKyAg ICAgICAgWENoYW5nZUdDIChzLT5kaXNwbGF5LCBGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYpLT5z Y3JhdGNoX2N1cnNvcl9nYywKKyAgICAgICAgICAgICAgICAgICBtYXNrLCAmeGdjdik7CisgICAg ICBlbHNlCisgICAgICAgIEZSQU1FX0RJU1BMQVlfSU5GTyAocy0+ZiktPnNjcmF0Y2hfY3Vyc29y X2djCisgICAgICAgICAgPSBYQ3JlYXRlR0MgKHMtPmRpc3BsYXksIEZSQU1FX1hfV0lORE9XIChz LT5mKSwgbWFzaywgJnhnY3YpOworICAgICAgcy0+Z2MgPSBGUkFNRV9ESVNQTEFZX0lORk8gKHMt PmYpLT5zY3JhdGNoX2N1cnNvcl9nYzsKKyAgICB9Cit9CisKKy8qIFNldCBTLT5nYyBvZiBnbHlw aCBzdHJpbmcgUyBmb3IgZHJhd2luZyB0aGF0IGdseXBoIHN0cmluZy4gIFNldAorICAgUy0+c3Rp cHBsZWRfcCB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHRoZSBmYWNlIG9mIFMgaGFzIGEgc3RpcHBs ZSBwYXR0ZXJuLiAqLworc3RhdGljIHZvaWQKK21jX3hfc2V0X2dseXBoX3N0cmluZ19nYyAoc3Ry dWN0IGdseXBoX3N0cmluZyAqcywgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgcHJlcGFyZV9mYWNl X2Zvcl9kaXNwbGF5IChzLT5mLCBzLT5mYWNlKTsKKyAgaWYgKHMtPmhsID09IERSQVdfTk9STUFM X1RFWFQpCisgICAgeworICAgICAgcy0+Z2MgPSBzLT5mYWNlLT5nYzsKKyAgICAgIHMtPnN0aXBw bGVkX3AgPSBzLT5mYWNlLT5zdGlwcGxlICE9IDA7CisgICAgfQorICBlbHNlIGlmIChzLT5obCA9 PSBEUkFXX0lOVkVSU0VfVklERU8pCisgICAgeworICAgICAgeF9zZXRfbW9kZV9saW5lX2ZhY2Vf Z2MgKHMpOworICAgICAgcy0+c3RpcHBsZWRfcCA9IHMtPmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAg ICB9CisgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfQ1VSU09SKQorICAgIHsKKyAgICAgIG1jX3hf c2V0X2N1cnNvcl9nYyAocywgY3Vyc29yX2djX3ApOworICAgICAgcy0+c3RpcHBsZWRfcCA9IGZh bHNlOworICAgIH0KKyAgZWxzZSBpZiAocy0+aGwgPT0gRFJBV19NT1VTRV9GQUNFKQorICAgIHsK KyAgICAgIHhfc2V0X21vdXNlX2ZhY2VfZ2MgKHMpOworICAgICAgcy0+c3RpcHBsZWRfcCA9IHMt PmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAgICB9CisgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfSU1B R0VfUkFJU0VECisgICAgICAgICAgIHx8IHMtPmhsID09IERSQVdfSU1BR0VfU1VOS0VOKQorICAg IHsKKyAgICAgIHMtPmdjID0gcy0+ZmFjZS0+Z2M7CisgICAgICBzLT5zdGlwcGxlZF9wID0gcy0+ ZmFjZS0+c3RpcHBsZSAhPSAwOworICAgIH0KKyAgZWxzZQorICAgIGVtYWNzX2Fib3J0ICgpOwor ICAvKiBHQyBtdXN0IGhhdmUgYmVlbiBzZXQuICAqLworICBlYXNzZXJ0IChzLT5nYyAhPSAwKTsK K30KKworLyogRHJhdyBhIGhvbGxvdyBib3ggY3Vyc29yIG9uIHdpbmRvdyBXIGluIGdseXBoIHJv dyBST1cuICAqLworc3RhdGljIHZvaWQKK21jX3hfZHJhd19ob2xsb3dfY3Vyc29yIChzdHJ1Y3Qg d2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cg KnJvdywgaW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2cG9zLCBp bnQgd2QsIGludCBoKQoreworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFN RSAodykpOworICBzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8gPSBGUkFNRV9ESVNQTEFZ X0lORk8gKGYpOworICBEaXNwbGF5ICpkcHkgPSBGUkFNRV9YX0RJU1BMQVkgKGYpOworICBYR0NW YWx1ZXMgeGdjdjsKKyAgR0MgZ2M7CisgIC8qIEdldCB0aGUgZ2x5cGggdGhlIGN1cnNvciBpcyBv bi4gIElmIHdlIGNhbid0IHRlbGwgYmVjYXVzZQorICAgICB0aGUgY3VycmVudCBtYXRyaXggaXMg aW52YWxpZCBvciBzdWNoLCBnaXZlIHVwLiAgKi8KKyAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5 cGggPSBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7Cisg IGlmIChjdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICByZXR1cm47CisgIC8qIFRoZSBmb3JlZ3Jv dW5kIG9mIGN1cnNvcl9nYyBpcyB0eXBpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbAorICAg ICBiYWNrZ3JvdW5kIGNvbG9yLCB3aGljaCBjYW4gY2F1c2UgdGhlIGN1cnNvciBib3ggdG8gYmUg aW52aXNpYmxlLiAgKi8KKyAgeGdjdi5mb3JlZ3JvdW5kID0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX3BpeGVsOworICBpZiAoZHB5aW5mby0+c2NyYXRjaF9jdXJzb3JfZ2MpCisgICAgWENoYW5n ZUdDIChkcHksIGRweWluZm8tPnNjcmF0Y2hfY3Vyc29yX2djLCBHQ0ZvcmVncm91bmQsICZ4Z2N2 KTsKKyAgZWxzZQorICAgIGRweWluZm8tPnNjcmF0Y2hfY3Vyc29yX2djID0gWENyZWF0ZUdDIChk cHksIEZSQU1FX1hfV0lORE9XIChmKSwKKyAgICAgICAgICAgICAgR0NGb3JlZ3JvdW5kLCAmeGdj dik7CisgIGdjID0gZHB5aW5mby0+c2NyYXRjaF9jdXJzb3JfZ2M7CisgIC8qIFNldCBjbGlwcGlu ZywgZHJhdyB0aGUgcmVjdGFuZ2xlLCBhbmQgcmVzZXQgY2xpcHBpbmcgYWdhaW4uICAqLworICB4 X2NsaXBfdG9fcm93ICh3LCByb3csIFRFWFRfQVJFQSwgZ2MpOworICAvKiBgeF9kcmF3X3JlY3Rh bmdsZScgbmVlZHMgYSBXRCBhbmQgSCB0aGF0IGFyZSAxIHBpeGVsIGxlc3MuICovCisgIGludCBy eCA9IGZ4OworICBpbnQgcnkgPSBmeTsKKyAgaW50IHJ3ID0gd2QgLSAxOworICBpbnQgcmggPSBo IC0gMTsKKyAgeF9kcmF3X3JlY3RhbmdsZSAoZiwgZ2MsIHJ4LCByeSwgcncsIHJoKTsKKy8qCisg IGZwcmludGYgKHN0ZGVyciwgIm1jX3hfZHJhd19ob2xsb3dfY3Vyc29yOiAgcnggKCVkKSB8IHJ5 ICglZCkgfCBydyAoJWQpIHwgcmggKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcngsIHJ5 LCBydywgcmgpOworKi8KKyAgeF9yZXNldF9jbGlwX3JlY3RhbmdsZXMgKGYsIGdjKTsKK30KKwor LyogRHJhdyBhIGJhciBjdXJzb3Igb24gd2luZG93IFcgaW4gZ2x5cGggcm93IFJPVy4gKi8KK3N0 YXRpYyB2b2lkCittY194X2RyYXdfYmFyX2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0 IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAg ICAgICAgICAgICAgaW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2 cG9zLCBpbnQgd2QsIGludCBoLAorICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgZW51 bSB0eXBlX29mX2N1cnNvciBraW5kLCBib29sIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKQor eworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgLyogSWYgY3Vyc29y IGlzIG91dCBvZiBib3VuZHMsIGRvbid0IGRyYXcgZ2FyYmFnZS4gIFRoaXMgY2FuIGhhcHBlbgor ICAgICBpbiBtaW5pLWJ1ZmZlciB3aW5kb3dzIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWNobyBh cmVhIGdseXBocworICAgICBhbmQgbWluaS1idWZmZXIuICAqLworICBzdHJ1Y3QgZ2x5cGggKmN1 cnNvcl9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBocG9zLCB2 cG9zKTsKKyAgaWYgKGN1cnNvcl9nbHlwaCA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgLyogRXhw ZXJpbWVudGFsIGF2b2lkYW5jZSBvZiBjdXJzb3Igb24geHdpZGdldC4gICovCisgIGlmIChjdXJz b3JfZ2x5cGgtPnR5cGUgPT0gWFdJREdFVF9HTFlQSCkKKyAgICByZXR1cm47CisgIC8qIElmIG9u IGFuIGltYWdlLCBkcmF3IGxpa2UgYSBub3JtYWwgY3Vyc29yLiAgVGhhdCdzIHVzdWFsbHkgYmV0 dGVyCisgICAgIHZpc2libGUgdGhhbiBkcmF3aW5nIGEgYmFyLCBlc3AuIGlmIHRoZSBpbWFnZSBp cyBsYXJnZSBzbyB0aGF0CisgICAgIHRoZSBiYXIgbWlnaHQgbm90IGJlIGluIHRoZSB3aW5kb3cu ICAqLworICBpZiAoY3Vyc29yX2dseXBoLT50eXBlID09IElNQUdFX0dMWVBIKQorICAgIHsKKyAg ICAgIHN0cnVjdCBtY19SR0IgbHNsID0gey5yZWQgPSAtMS4wLCAuZ3JlZW4gPSAtMS4wLCAuYmx1 ZSA9IC0xLjB9OworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gTk9fRkxBVk9S OworICAgICAgZW51bSB0eXBlX29mX2N1cnNvciBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19CT1g7 CisgICAgICBib29sIGFjdGl2ZV9wID0gZmFsc2U7CisgICAgICBib29sIGN1cnNvcl9nY19wID0g ZmFsc2U7CisgICAgICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdf Q1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLCBjdXJzb3JfZ2NfcCk7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgRGlzcGxheSAqZHB5ID0gRlJBTUVfWF9ESVNQTEFZ IChmKTsKKyAgICAgIFdpbmRvdyB3aW5kb3cgPSBGUkFNRV9YX1dJTkRPVyAoZik7CisgICAgICBH QyBnYyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAoZiktPnNjcmF0Y2hfY3Vyc29yX2djOworICAgICAg dW5zaWduZWQgbG9uZyBtYXNrID0gR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kIHwgR0NHcmFw aGljc0V4cG9zdXJlczsKKyAgICAgIHN0cnVjdCBmYWNlICpmYWNlID0gRkFDRV9GUk9NX0lEIChm LCBjdXJzb3JfZ2x5cGgtPmZhY2VfaWQpOworICAgICAgWEdDVmFsdWVzIHhnY3Y7CisgICAgICAv KiBJZiB0aGUgZ2x5cGgncyBiYWNrZ3JvdW5kIGVxdWFscyB0aGUgY29sb3Igd2Ugbm9ybWFsbHkg ZHJhdworICAgdGhlIGJhcnMgY3Vyc29yIGluLCB0aGUgYmFyIGN1cnNvciBpbiBpdHMgbm9ybWFs IGNvbG9yIGlzCisgICBpbnZpc2libGUuICBVc2UgdGhlIGdseXBoJ3MgZm9yZWdyb3VuZCBjb2xv ciBpbnN0ZWFkIGluIHRoaXMKKyAgIGNhc2UsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGds eXBoJ3MgY29sb3JzIGFyZSBjaG9zZW4gc28KKyAgIHRoYXQgdGhlIGdseXBoIGlzIGxlZ2libGUu ICAqLworICAgICAgaWYgKGZhY2UtPmJhY2tncm91bmQgPT0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX3BpeGVsCisgICAgICAgICAgJiYgIWN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKQorICAg ICAgICB4Z2N2LmJhY2tncm91bmQgPSB4Z2N2LmZvcmVncm91bmQgPSBmYWNlLT5mb3JlZ3JvdW5k OworICAgICAgZWxzZQorICAgICAgICB4Z2N2LmJhY2tncm91bmQgPSB4Z2N2LmZvcmVncm91bmQg PSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWw7CisgICAgICB4Z2N2LmdyYXBoaWNzX2V4 cG9zdXJlcyA9IEZhbHNlOworICAgICAgaWYgKGdjKQorICAgICAgICBYQ2hhbmdlR0MgKGRweSwg Z2MsIG1hc2ssICZ4Z2N2KTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGdjID0g WENyZWF0ZUdDIChkcHksIHdpbmRvdywgbWFzaywgJnhnY3YpOworICAgICAgICAgIEZSQU1FX0RJ U1BMQVlfSU5GTyAoZiktPnNjcmF0Y2hfY3Vyc29yX2djID0gZ2M7CisgICAgICAgIH0KKyAgICAg IHhfY2xpcF90b19yb3cgKHcsIHJvdywgVEVYVF9BUkVBLCBnYyk7CisgICAgICB4X2ZpbGxfcmVj dGFuZ2xlIChmLCBnYywgZngsIGZ5LCB3ZCwgaCk7CisgICAgICB4X3Jlc2V0X2NsaXBfcmVjdGFu Z2xlcyAoZiwgZ2MpOworICAgIH0KK30KKworLyogUklGOiBEcmF3IGN1cnNvciBvbiB3aW5kb3cg Vy4gKi8KK3N0YXRpYyB2b2lkCittY194X2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRv dyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3cs CisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwg aW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGludCBoLAorICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBtY19SR0IgbHNsLCBlbnVtIHR5cGVfb2ZfY3Vyc29yIGN1cnNvcl90eXBlLCBp bnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWNfZmxhdm9y IGdseXBoX2ZsYXZvciwgYm9vbCBvbl9wLCBib29sIGFjdGl2ZV9wKQoreworICBzdHJ1Y3QgZnJh bWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAvKiBUaGUgZnJpbmdlIGJpdG1h cHMgYXJlIHByZXNlbnRseSBoYW5kbGVkIGVsc2V3aGVyZSwgYnV0IGNvdWxkIHNvbWVkYXkKKyAg YmUgbWFuYWdlZCAoaW4gcGFydCkgYXQgdGhpcyBzZWN0aW9uIG9mIGNvZGUuICovCisgIGlmIChv bl9wKQorICAgIHsKKyAgICAgIGlmIChyb3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3AKKyAg ICAgICAgICAmJiAocm93LT5yZXZlcnNlZF9wCisgICAgICAgICAgICAgID8gKGhwb3MgPCAwKQor ICAgICAgICAgICAgICA6IChocG9zID49IHJvdy0+dXNlZFtURVhUX0FSRUFdKSkpCisgICAgICAg IHsKKyAgICAgICAgICByb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IHRydWU7CisgICAgICAgICAg bWNfZHJhd19mcmluZ2VfYml0bWFwICh3LCByb3csIHJvdy0+cmV2ZXJzZWRfcCwgY3Vyc29yX3R5 cGUpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgQ29sb3JtYXAgY21hcCA9 IEZSQU1FX1hfQ09MT1JNQVAgKGYpOworICB1bnNpZ25lZCBsb25nIG9yaWdpbmFsX2N1cnNvcl9w aXhlbCA9IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbDsKKyAgLyogeHRlcm0uYy94dGVy bS5oIHVzZSBHQzsgd2hlcmVhcywgdzMydGVybS5jL3czMnRlcm0uaCB1c2UgWEdDVmFsdWVzICog Ki8KKyAgWEdDVmFsdWVzIHhnY3Y7CisgIFhHZXRHQ1ZhbHVlcyAoRlJBTUVfWF9ESVNQTEFZIChm KSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKKyAg WEdldEdDVmFsdWVzIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJz b3JfZ2MsIEdDQmFja2dyb3VuZCwgJnhnY3YpOworICBYQ29sb3IgY29sb3I7CisgIGNvbG9yLnJl ZCA9IG1pbiAoNjU1MzUsIDY1NTM1ICogbHNsLnJlZCk7CisgIGNvbG9yLmdyZWVuID0gbWluICg2 NTUzNSwgNjU1MzUgKiBsc2wuZ3JlZW4pOworICBjb2xvci5ibHVlID0gbWluICg2NTUzNSwgNjU1 MzUgKiBsc2wuYmx1ZSk7CisgIC8qIGB4X2FsbG9jX25lYXJlc3RfY29sb3InIHNldHMgdGhlIGBj b2xvci5waXhlbGAuICovCisgIHhfYWxsb2NfbmVhcmVzdF9jb2xvciAoZiwgY21hcCwgJmNvbG9y KTsKKyAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgeworICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJ VE1BUDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTUNfTk9fQ1VSU09SOgorICAgICAgYnJlYWs7 CisgICAgY2FzZSBNQ19SSUdIVF9GUklOR0VfQklUTUFQOgorICAgICAgYnJlYWs7CisgICAgY2Fz ZSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVA6CisgICAgICBicmVhazsKKyAgICBjYXNlIE1DX0ZSQU1F RF9CT1g6CisgICAgeworICAgICAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5cGggPSBtY19nZXRf Y3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7CisgICAgICBpZiAoY3Vy c29yX2dseXBoID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICAgIExpc3BfT2JqZWN0IGJ1 ZiA9IHctPmNvbnRlbnRzOworICAgICAgQ0hFQ0tfQlVGRkVSIChidWYpOworICAgICAgc3RydWN0 IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7CisgICAgICBib29sIHJlZ2lvbl9hY3RpdmVfcCA9 ICghTklMUCAoVnRyYW5zaWVudF9tYXJrX21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiAhTklMUCAoQlZBUiAoYiwgbWFya19hY3RpdmUpKSk7CisgICAgICBwdHJkaWZmX3Qg cmVnaW9uX2JlZ2lubmluZyA9IChyZWdpb25fYWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9i ZWdpbm5pbmcgKCkpIDogLTE7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2VuZCA9IChyZWdpb25f YWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9lbmQgKCkpIDogLTE7CisgICAgICBwdHJkaWZm X3Qgb3BvaW50X3B0ID0gKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICA/IFBUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBY RklYTlVNIChGbWFya2VyX3Bvc2l0aW9uICh3LT5wb2ludG0pKTsKKyAgICAgIGJvb2wgcmVnaW9u X2luX2JvdW5kc19wID0gKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgb3BvaW50X3B0ID49IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF9wdCA8IHJlZ2lvbl9lbmQpOworICAgICAgaWYg KGN1cnNvcl9nbHlwaC0+dHlwZSAhPSBJTUFHRV9HTFlQSCAmJiBsc2wucmVkID49IDAgJiYgbHNs LmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRl bXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJyBieSBib3Jyb3dp bmcgdGhlCisgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiBgeF9tYWtlX2djJyBpbiB4Zm5zLmMu ICAqLworICAgICAgICAgIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgJiYgcmVn aW9uX2luX2JvdW5kc19wCisgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZV9p ZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3It cmVnaW9uLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3df YWN0aXZlX3JlZ2lvbl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lv bl9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFj ZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJz b3ItZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3Rp dmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAg ICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAg ICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZS0+YmFja2dyb3VuZCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAg ICAgICAgICAgICAgICAgICAgICYmICFyZWdpb25faW5fYm91bmRzX3AKKyAgICAgICAgICAgICAg ICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW51 bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlX2lkID0gbG9va3VwX25hbWVk X2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1yZWdpb24tZmFjZSIpLCB0 cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25f b3V0X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNl X2lkKTsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lk ID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1m YWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZl X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAg ICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAg ICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0 X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZS0+Zm9yZWdy b3VuZCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoIXJlZ2lvbl9h Y3RpdmVfcCAmJiBhY3RpdmVfcCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2Ug KHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICAgICAg ICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9J RCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgIFhTZXRGb3Jl Z3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2Ms IGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgICBYU2V0 QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29y X2djLCBob2xsb3dfYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAvKiBUaGUgcmVnaW9uIGlzIF9ub3RfIHZpc2libGUgaW4gdGhlIGlu YWN0aXZlIHdpbmRvdyBiZWNhdXNlIHRoZSBvdmVybGF5IHdpbmRvdyBwcm9wZXJ0eSBpcyB1c2Vk LiAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY3RpdmVfcCkKKyAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19pbmFjdGl2ZV9m YWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1 cnNvci1pbmFjdGl2ZS1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZmFjZSAqaG9sbG93X2luYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19pbmFj dGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1F X1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2luYWN0 aXZlX2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3Vu ZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xs b3dfaW5hY3RpdmVfZmFjZS0+YmFja2dyb3VuZCk7CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgLyogRm9yY2UgYG1jX3hfc2V0X2N1cnNv cl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MnLiAgKi8KKyAgICAg ICAgICBib29sIGN1cnNvcl9nY19wID0gdHJ1ZTsKKyAgICAgICAgICBtY19kcmF3X2N1cnNvcl9n bHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUs IHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOworICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChG UkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIHhnY3YuZm9y ZWdyb3VuZCk7CisgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiks IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgeGdjdi5iYWNrZ3JvdW5kKTsKKyAgICAgICAg ICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgICAgZi0+b3V0cHV0X2Rh dGEueC0+Y3Vyc29yX3BpeGVsID0gY29sb3IucGl4ZWw7CisgICAgICAgICAgbWNfeF9kcmF3X2hv bGxvd19jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdk LCBoKTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5h bF9jdXJzb3JfcGl4ZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yX2dseXBo LT50eXBlID09IElNQUdFX0dMWVBIICYmIGxzbC5yZWQgPj0gMCAmJiBsc2wuZ3JlZW4gPj0gMCAm JiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRlbXBvcmFyaWx5 IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgICAg ICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBjb2xvci5waXhlbDsKKyAgICAgICAg ICAgIG1jX3hfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5 LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJz b3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgICAgfQorICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNr IGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MnIGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAg ICAgICAgZnVuY3Rpb25hbGl0eSBvZiBgeF9tYWtlX2djJyBpbiB4Zm5zLmMuICAqLworICAgICAg ICAgICAgICBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAmJiByZWdpb25f aW5fYm91bmRzX3AKKyAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lv bl9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtl LWN1cnNvci1yZWdpb24tZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBm YWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3df YWN0aXZlX3JlZ2lvbl9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBo b2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi Ky1yZWFsLWZha2UtY3Vyc29yLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0 aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hf RElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9m YWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFN RV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3Rp dmVfcmVnaW9uX2ZhY2UtPmJhY2tncm91bmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAg ICAmJiAhcmVnaW9uX2luX2JvdW5kc19wCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWN0 aXZlX3ApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVudW0gZmFj ZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNl ICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcmVnaW9uLWZhY2UiKSwgdHJ1ZSk7 CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9v dXRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2Vf aWQpOworICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNl X2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv ci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93 X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOwor ICAgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwg Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91 bmQpOworICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZ IChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9v dXRfZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICBlbHNlIGlmICghcmVnaW9uX2FjdGl2ZV9wICYmIGFjdGl2ZV9wKQorICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3Rp dmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFr ZS1jdXJzb3ItZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFj ZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2Zh Y2VfaWQpOworICAgICAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJ U1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFj ZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZS QU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2Fj dGl2ZV9mYWNlLT5iYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAvKiBUaGUgcmVnaW9uIGlzIF9ub3RfIHZpc2libGUgaW4gdGhlIGluYWN0aXZl IHdpbmRvdyBiZWNhdXNlIHRoZSBvdmVybGF5IHdpbmRvdyBwcm9wZXJ0eSBpcyB1c2VkLiAqLwor ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWN0aXZlX3ApCisgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19pbmFj dGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1m YWtlLWN1cnNvci1pbmFjdGl2ZS1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBo b2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBYU2V0Rm9y ZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2dj LCBob2xsb3dfaW5hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgICAg ICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEu eC0+Y3Vyc29yX2djLCBob2xsb3dfaW5hY3RpdmVfZmFjZS0+YmFja2dyb3VuZCk7CisgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAg ICAgICAgLyogRm9yY2UgYG1jX3hfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRf ZGF0YS54LT5jdXJzb3JfZ2MnLiAgKi8KKyAgICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfcCA9 IHRydWU7CisgICAgICAgICAgICAgIG1jX2RyYXdfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJv dywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsc2wsIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl9nY19wKTsKKyAgICAg ICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9nYywgeGdjdi5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgWFNldEJh Y2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9n YywgeGdjdi5iYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAg ICAgICAgICAgICAgLyogRHJhdyB0aGUgZnJhbWUgYXJvdW5kIHRoZSBib3guICovCisgICAgICAg ICAgICAgIG1jX3hfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHks IGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICAgICAgICB9CisgICAgICBicmVhazsKKyAg ICB9CisgICAgY2FzZSBNQ19IT0xMT1dfQk9YOgorICAgIHsKKyAgICAgIGlmIChsc2wucmVkID49 IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgeworICAgICAg ICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVs Jy4gICovCisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gY29sb3Iu cGl4ZWw7CisgICAgICAgICAgbWNfeF9kcmF3X2hvbGxvd19jdXJzb3IgKHcsIG1hdHJpeCwgcm93 LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoKTsKKyAgICAgICAgICBmLT5vdXRwdXRf ZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgIH0K KyAgICAgICAgZWxzZQorICAgICAgICAgIG1jX3hfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRy aXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICBicmVhazsK KyAgICB9CisgICAgY2FzZSBNQ19GSUxMRURfQk9YOgorICAgIHsKKyAgICAgIGlmIChsc2wucmVk ID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgLyogVGVt cG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MnIGJ5IGJvcnJvd2lu ZyB0aGUKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiBgeF9tYWtlX2djJyBpbiB4Zm5zLmMuICAq LworICAgICAgICB7CisgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgWFNldEZv cmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9n YywgRlJBTUVfQkFDS0dST1VORF9QSVhFTCAoZikpOworICAgICAgICAgIFhTZXRCYWNrZ3JvdW5k IChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGNvbG9y LnBpeGVsKTsKKyAgICAgICAgICAvKiBGb3JjZSBgbWNfeF9zZXRfY3Vyc29yX2djJyB0byB1c2Ug YHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYycuICAqLworICAgICAgICAgIGJvb2wgY3Vy c29yX2djX3AgPSB0cnVlOworICAgICAgICAgIG1jX2RyYXdfY3Vyc29yX2dseXBoICh3LCBtYXRy aXgsIHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsIGxzbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9w LCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExB WSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgeGdjdi5mb3JlZ3JvdW5kKTsKKyAg ICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2Rh dGEueC0+Y3Vyc29yX2djLCB4Z2N2LmJhY2tncm91bmQpOworICAgICAgICAgIHVuYmxvY2tfaW5w dXQgKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAg IGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgICAgICAgICAgIG1jX2RyYXdfY3Vyc29yX2ds eXBoICh3LCBtYXRyaXgsIHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsIGxzbCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBl LCB3ZCwgYWN0aXZlX3AsIGN1cnNvcl9nY19wKTsKKyAgICAgICAgICB9CisgICAgICBicmVhazsK KyAgICB9CisgICAgY2FzZSBNQ19CQVI6CisgICAgeworICAgICAgaWYgKGxzbC5yZWQgPj0gMCAm JiBsc2wuZ3JlZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAg LyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwnLiAg Ki8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBjb2xvci5waXhl bDsKKyAgICAgICAgICBib29sIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wID0gdHJ1ZTsKKyAg ICAgICAgICBtY194X2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBm eSwgaHBvcywgdnBvcywgd2QsIGgsIGN1cnNvcl93aWR0aCwgTUNfQkFSLCBjdXJzb3JfZ2NfaW52 aXNpYmxlX29rYXlfcCk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVs ID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg ICAgICB7CisgICAgICAgICAgICBib29sIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wID0gZmFs c2U7CisgICAgICAgICAgICBtY194X2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4LCByb3csIHgs IGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgsIGN1cnNvcl93aWR0aCwgTUNfQkFSLCBjdXJz b3JfZ2NfaW52aXNpYmxlX29rYXlfcCk7CisgICAgICAgICAgfQorICAgICAgYnJlYWs7CisgICAg fQorICAgIGNhc2UgTUNfSEJBUjoKKyAgICB7CisgICAgICBpZiAobHNsLnJlZCA+PSAwICYmIGxz bC5ncmVlbiA+PSAwICYmIGxzbC5ibHVlID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBU ZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICAqLwor ICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9IGNvbG9yLnBpeGVsOwor ICAgICAgICAgIGJvb2wgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5X3AgPSB0cnVlOworICAgICAg ICAgIG1jX3hfZHJhd19iYXJfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBo cG9zLCB2cG9zLCB3ZCwgaCwgY3Vyc29yX3dpZHRoLCBNQ19IQkFSLCBjdXJzb3JfZ2NfaW52aXNp YmxlX29rYXlfcCk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0g b3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg ICB7CisgICAgICAgICAgICBib29sIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wID0gZmFsc2U7 CisgICAgICAgICAgICBtY194X2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4 LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgsIGN1cnNvcl93aWR0aCwgTUNfSEJBUiwgY3Vyc29y X2djX2ludmlzaWJsZV9va2F5X3ApOworICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0K KyAgICBkZWZhdWx0OgorICAgICAgZW1hY3NfYWJvcnQgKCk7CisgIH0KKyAgICAgICAgfQorI2lm ZGVmIEhBVkVfWF9JMThOCisgIGlmICh3ID09IFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dpbmRvdykp CisgICAgaWYgKEZSQU1FX1hJQyAoZikgJiYgKEZSQU1FX1hJQ19TVFlMRSAoZikgJiBYSU1QcmVl ZGl0UG9zaXRpb24pKQorICAgICAgeGljX3NldF9wcmVlZGl0YXJlYSAodywgeCwgeSk7CisjZW5k aWYKKyAgICB9CisgIFhGbHVzaCAoRlJBTUVfWF9ESVNQTEFZIChmKSk7Cit9CisKKy8qIERyYXcg c3RyZXRjaCBnbHlwaCBzdHJpbmcgUy4gICovCitzdGF0aWMgdm9pZAorbWNfeF9kcmF3X3N0cmV0 Y2hfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzKQoreworICBlYXNzZXJ0IChz LT5maXJzdF9nbHlwaC0+dHlwZSA9PSBTVFJFVENIX0dMWVBIKTsKKyAgaWYgKHMtPmhsID09IERS QVdfQ1VSU09SCisgICAgICAmJiAheF9zdHJldGNoX2N1cnNvcl9wKQorICAgIHsKKyAgICAgIC8q IElmIGB4LXN0cmV0Y2gtY3Vyc29yJyBpcyBuaWwsIGRvbid0IGRyYXcgYSBibG9jayBjdXJzb3Ig YXMKKyAgIHdpZGUgYXMgdGhlIHN0cmV0Y2ggZ2x5cGguICAqLworICAgICAgaW50IHdpZHRoLCBi YWNrZ3JvdW5kX3dpZHRoID0gcy0+YmFja2dyb3VuZF93aWR0aDsKKyAgICAgIGludCB4ID0gcy0+ eDsKKyAgICAgIGlmICghcy0+cm93LT5yZXZlcnNlZF9wKQorICB7CisgICAgaW50IGxlZnRfeCA9 IHdpbmRvd19ib3hfbGVmdF9vZmZzZXQgKHMtPncsIFRFWFRfQVJFQSk7CisgICAgaWYgKHggPCBs ZWZ0X3gpCisgICAgICB7CisgICAgICAgIGJhY2tncm91bmRfd2lkdGggLT0gbGVmdF94IC0geDsK KyAgICAgICAgeCA9IGxlZnRfeDsKKyAgICAgIH0KKyAgfQorICAgICAgZWxzZQorICB7CisgICAg LyogSW4gUjJMIHJvd3MsIGRyYXcgdGhlIGN1cnNvciBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUK KyAgICAgICBzdHJldGNoIGdseXBoLiAgKi8KKyAgICBpbnQgcmlnaHRfeCA9IHdpbmRvd19ib3hf cmlnaHQgKHMtPncsIFRFWFRfQVJFQSk7CisgICAgaWYgKHggKyBiYWNrZ3JvdW5kX3dpZHRoID4g cmlnaHRfeCkKKyAgICAgIGJhY2tncm91bmRfd2lkdGggLT0geCAtIHJpZ2h0X3g7CisgICAgeCAr PSBiYWNrZ3JvdW5kX3dpZHRoOworICB9CisgICAgICB3aWR0aCA9IG1pbiAoRlJBTUVfQ09MVU1O X1dJRFRIIChzLT5mKSwgYmFja2dyb3VuZF93aWR0aCk7CisgICAgICBpZiAocy0+cm93LT5yZXZl cnNlZF9wKQorICB4IC09IHdpZHRoOworICAgICAgLyogRHJhdyBjdXJzb3IuICAqLworICAgICAg eF9kcmF3X2dseXBoX3N0cmluZ19iZ19yZWN0IChzLCB4LCBzLT55LCB3aWR0aCwgcy0+aGVpZ2h0 KTsKKyAgICAgIC8qIENsZWFyIHJlc3QgdXNpbmcgdGhlIEdDIG9mIHRoZSBvcmlnaW5hbCBub24t Y3Vyc29yIGZhY2UuICAqLworICAgICAgaWYgKHdpZHRoIDwgYmFja2dyb3VuZF93aWR0aCkKKyAg eworICAgIGludCB5ID0gcy0+eTsKKyAgICBpbnQgdyA9IGJhY2tncm91bmRfd2lkdGggLSB3aWR0 aCwgaCA9IHMtPmhlaWdodDsKKyAgICBYUmVjdGFuZ2xlIHI7CisgICAgR0MgZ2M7CisgICAgaWYg KCFzLT5yb3ctPnJldmVyc2VkX3ApCisgICAgICB4ICs9IHdpZHRoOworICAgIGVsc2UKKyAgICAg IHggPSBzLT54OworICAgIGlmIChzLT5yb3ctPm1vdXNlX2ZhY2VfcAorICAgICAgICAmJiBjdXJz b3JfaW5fbW91c2VfZmFjZV9wIChzLT53KSkKKyAgICAgIHsKKyAgICAgICAgeF9zZXRfbW91c2Vf ZmFjZV9nYyAocyk7CisgICAgICAgIGdjID0gcy0+Z2M7CisgICAgICB9CisgICAgZWxzZQorICAg ICAgZ2MgPSBzLT5mYWNlLT5nYzsKKyAgICBnZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocywg JnIpOworICAgIHhfc2V0X2NsaXBfcmVjdGFuZ2xlcyAocy0+ZiwgZ2MsICZyLCAxKTsKKyAgICBp ZiAocy0+ZmFjZS0+c3RpcHBsZSkKKyAgICAgIHsKKyAgICAgICAgLyogRmlsbCBiYWNrZ3JvdW5k IHdpdGggYSBzdGlwcGxlIHBhdHRlcm4uICAqLworICAgICAgICBYU2V0RmlsbFN0eWxlIChzLT5k aXNwbGF5LCBnYywgRmlsbE9wYXF1ZVN0aXBwbGVkKTsKKyAgICAgICAgeF9maWxsX3JlY3Rhbmds ZSAocy0+ZiwgZ2MsIHgsIHksIHcsIGgpOworICAgICAgICBYU2V0RmlsbFN0eWxlIChzLT5kaXNw bGF5LCBnYywgRmlsbFNvbGlkKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAg IFhHQ1ZhbHVlcyB4Z2N2OworICAgICAgICBYR2V0R0NWYWx1ZXMgKHMtPmRpc3BsYXksIGdjLCBH Q0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQsICZ4Z2N2KTsKKyAgICAgICAgWFNldEZvcmVncm91 bmQgKHMtPmRpc3BsYXksIGdjLCB4Z2N2LmJhY2tncm91bmQpOworICAgICAgICB4X2ZpbGxfcmVj dGFuZ2xlIChzLT5mLCBnYywgeCwgeSwgdywgaCk7CisgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChz LT5kaXNwbGF5LCBnYywgeGdjdi5mb3JlZ3JvdW5kKTsKKyAgICAgIH0KKyAgICB4X3Jlc2V0X2Ns aXBfcmVjdGFuZ2xlcyAocy0+ZiwgZ2MpOworICB9CisgICAgfQorICBlbHNlIGlmICghcy0+YmFj a2dyb3VuZF9maWxsZWRfcCkKKyAgICB7CisgICAgICBpbnQgYmFja2dyb3VuZF93aWR0aCA9IHMt PmJhY2tncm91bmRfd2lkdGg7CisgICAgICBpbnQgeCA9IHMtPngsIGxlZnRfeCA9IHdpbmRvd19i b3hfbGVmdF9vZmZzZXQgKHMtPncsIFRFWFRfQVJFQSk7CisgICAgICAvKiBEb24ndCBkcmF3IGlu dG8gbGVmdCBtYXJnaW4sIGZyaW5nZSBvciBzY3JvbGxiYXIgYXJlYQorICAgICAgICAgZXhjZXB0 IGZvciBoZWFkZXIgbGluZSBhbmQgbW9kZSBsaW5lLiAgKi8KKyAgICAgIGlmICh4IDwgbGVmdF94 ICYmICFzLT5yb3ctPm1vZGVfbGluZV9wKQorICB7CisgICAgYmFja2dyb3VuZF93aWR0aCAtPSBs ZWZ0X3ggLSB4OworICAgIHggPSBsZWZ0X3g7CisgIH0KKyAgICAgIGlmIChiYWNrZ3JvdW5kX3dp ZHRoID4gMCkKKyAgeF9kcmF3X2dseXBoX3N0cmluZ19iZ19yZWN0IChzLCB4LCBzLT55LCBiYWNr Z3JvdW5kX3dpZHRoLCBzLT5oZWlnaHQpOworICAgIH0KKyAgcy0+YmFja2dyb3VuZF9maWxsZWRf cCA9IHRydWU7Cit9CisKKy8qIERyYXcgZ2x5cGggc3RyaW5nIFMuICAqLworc3RhdGljIHZvaWQK K21jX3hfZHJhd19nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIHN0cnVjdCBn bHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZv ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdHlwZV9vZl9jdXJzb3IgY3Vyc29yX3R5 cGUsIGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdGl2 ZV9wLCBib29sIGN1cnNvcl9nY19wKQoreworICBib29sIHJlbGllZl9kcmF3bl9wID0gZmFsc2U7 CisgIC8qIElmIFMgZHJhd3MgaW50byB0aGUgYmFja2dyb3VuZCBvZiBpdHMgc3VjY2Vzc29ycywg ZHJhdyB0aGUKKyAgICAgYmFja2dyb3VuZCBvZiB0aGUgc3VjY2Vzc29ycyBmaXJzdCBzbyB0aGF0 IFMgY2FuIGRyYXcgaW50byBpdC4KKyAgICAgVGhpcyBtYWtlcyBTLT5uZXh0IHVzZSBYRHJhd1N0 cmluZyBpbnN0ZWFkIG9mIFhEcmF3SW1hZ2VTdHJpbmcuICAqLworICBpZiAocy0+bmV4dCAmJiBz LT5yaWdodF9vdmVyaGFuZyAmJiAhcy0+Zm9yX292ZXJsYXBzKQorICAgIHsKKyAgICAgIGludCB3 aWR0aDsKKyAgICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKm5leHQ7CisgICAgICBmb3IgKHdpZHRo ID0gMCwgbmV4dCA9IHMtPm5leHQ7CisgICAgICAgICAgIG5leHQgJiYgd2lkdGggPCBzLT5yaWdo dF9vdmVyaGFuZzsKKyAgICAgICAgICAgd2lkdGggKz0gbmV4dC0+d2lkdGgsIG5leHQgPSBuZXh0 LT5uZXh0KQorICAgICAgICBpZiAobmV4dC0+Zmlyc3RfZ2x5cGgtPnR5cGUgIT0gSU1BR0VfR0xZ UEgpCisgICAgICAgICAgeworICAgICAgICAgICAgbWNfeF9zZXRfZ2x5cGhfc3RyaW5nX2djIChu ZXh0LCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgICB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBp bmcgKG5leHQpOworICAgICAgICAgICAgaWYgKG5leHQtPmZpcnN0X2dseXBoLT50eXBlID09IFNU UkVUQ0hfR0xZUEgpCisgICAgICAgICAgICAgIG1jX3hfZHJhd19zdHJldGNoX2dseXBoX3N0cmlu ZyAobmV4dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHhfZHJhd19nbHlwaF9z dHJpbmdfYmFja2dyb3VuZCAobmV4dCwgdHJ1ZSk7CisgICAgICAgICAgICBuZXh0LT5udW1fY2xp cHMgPSAwOworICAgICAgICAgIH0KKyAgICB9CisgIC8qIFNldCB1cCBTLT5nYywgc2V0IGNsaXBw aW5nIGFuZCBkcmF3IFMuICAqLworICBtY194X3NldF9nbHlwaF9zdHJpbmdfZ2MgKHMsIGN1cnNv cl9nY19wKTsKKyAgLyogRHJhdyByZWxpZWYgKGlmIGFueSkgaW4gYWR2YW5jZSBmb3IgY2hhci9j b21wb3NpdGlvbiBzbyB0aGF0IHRoZQorICAgICBnbHlwaCBzdHJpbmcgY2FuIGJlIGRyYXduIG92 ZXIgaXQuICAqLworICBpZiAoIXMtPmZvcl9vdmVybGFwcworICAgICAgJiYgcy0+ZmFjZS0+Ym94 ICE9IEZBQ0VfTk9fQk9YCisgICAgICAmJiAocy0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ0hBUl9H TFlQSAorICAgIHx8IHMtPmZpcnN0X2dseXBoLT50eXBlID09IENPTVBPU0lURV9HTFlQSCkpCisg ICAgeworICAgICAgeF9zZXRfZ2x5cGhfc3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgICAgIHhfZHJh d19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgdHJ1ZSk7CisgICAgICB4X2RyYXdfZ2x5cGhf c3RyaW5nX2JveCAocyk7CisgICAgICB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmcgKHMpOwor ICAgICAgcmVsaWVmX2RyYXduX3AgPSB0cnVlOworICAgIH0KKyAgZWxzZSBpZiAoIXMtPmNsaXBf aGVhZCAvKiBkcmF3X2dseXBocyBkaWRuJ3Qgc3BlY2lmeSBhIGNsaXAgbWFzay4gKi8KKyAgICAg JiYgIXMtPmNsaXBfdGFpbAorICAgICAmJiAoKHMtPnByZXYgJiYgcy0+cHJldi0+aGwgIT0gcy0+ aGwgJiYgcy0+bGVmdF9vdmVyaGFuZykKKyAgICAgICAgIHx8IChzLT5uZXh0ICYmIHMtPm5leHQt PmhsICE9IHMtPmhsICYmIHMtPnJpZ2h0X292ZXJoYW5nKSkpCisgICAgLyogV2UgbXVzdCBjbGlw IGp1c3QgdGhpcyBnbHlwaC4gIGxlZnRfb3ZlcmhhbmcgcGFydCBoYXMgYWxyZWFkeQorICAgICAg IGRyYXduIHdoZW4gcy0+cHJldiB3YXMgZHJhd24sIGFuZCByaWdodF9vdmVyaGFuZyBwYXJ0IHdp bGwgYmUKKyAgICAgICBkcmF3biBsYXRlciB3aGVuIHMtPm5leHQgaXMgZHJhd24uICovCisgICAg eF9zZXRfZ2x5cGhfc3RyaW5nX2NsaXBwaW5nX2V4YWN0bHkgKHMsIHMpOworICBlbHNlCisgICAg eF9zZXRfZ2x5cGhfc3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgc3dpdGNoIChzLT5maXJzdF9nbHlw aC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBJTUFHRV9HTFlQSDoKKyAgICAgIHhfZHJhd19pbWFn ZV9nbHlwaF9zdHJpbmcgKHMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYV0lER0VUX0dMWVBI OgorICAgICAgeF9kcmF3X3h3aWRnZXRfZ2x5cGhfc3RyaW5nIChzKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgU1RSRVRDSF9HTFlQSDoKKyAgICAgIG1jX3hfZHJhd19zdHJldGNoX2dseXBoX3N0 cmluZyAocyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIENIQVJfR0xZUEg6CisgICAgICBpZiAo cy0+Zm9yX292ZXJsYXBzKQorICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAg IGVsc2UKKyAgeF9kcmF3X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzLCBmYWxzZSk7CisgICAg ICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSBDT01QT1NJVEVfR0xZUEg6CisgICAgICBpZiAocy0+Zm9yX292ZXJsYXBzIHx8IChzLT5j bXBfZnJvbSA+IDAKKyAgICAgICAgICAgICYmICEgcy0+Zmlyc3RfZ2x5cGgtPnUuY21wLmF1dG9t YXRpYykpCisgIHMtPmJhY2tncm91bmRfZmlsbGVkX3AgPSB0cnVlOworICAgICAgZWxzZQorICB4 X2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmQgKHMsIHRydWUpOworICAgICAgeF9kcmF3X2Nv bXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAocyk7CisgICAgICBicmVhazsKKyAgICBj YXNlIEdMWVBITEVTU19HTFlQSDoKKyAgICAgIGlmIChzLT5mb3Jfb3ZlcmxhcHMpCisgIHMtPmJh Y2tncm91bmRfZmlsbGVkX3AgPSB0cnVlOworICAgICAgZWxzZQorICB4X2RyYXdfZ2x5cGhfc3Ry aW5nX2JhY2tncm91bmQgKHMsIHRydWUpOworICAgICAgeF9kcmF3X2dseXBobGVzc19nbHlwaF9z dHJpbmdfZm9yZWdyb3VuZCAocyk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg ZW1hY3NfYWJvcnQgKCk7CisgICAgfQorICBpZiAoIXMtPmZvcl9vdmVybGFwcykKKyAgICB7Cisg ICAgICAvKiBEcmF3IHVuZGVybGluZS4gICovCisgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5l X3ApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5lX3R5cGUgPT0g RkFDRV9VTkRFUl9XQVZFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAocy0+ZmFj ZS0+dW5kZXJsaW5lX2RlZmF1bHRlZF9wKQorICAgICAgICAgICAgICAgIHhfZHJhd191bmRlcndh dmUgKHMpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgWEdDVmFsdWVzIHhnY3Y7CisgICAgICAgICAgICAgICAgICBYR2V0R0NWYWx1ZXMg KHMtPmRpc3BsYXksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKKyAgICAgICAgICAgICAg ICAgIFhTZXRGb3JlZ3JvdW5kIChzLT5kaXNwbGF5LCBzLT5nYywgcy0+ZmFjZS0+dW5kZXJsaW5l X2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgIHhfZHJhd191bmRlcndhdmUgKHMpOworICAgICAg ICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKHMtPmRpc3BsYXksIHMtPmdjLCB4Z2N2LmZvcmVn cm91bmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl IGlmIChzLT5mYWNlLT51bmRlcmxpbmVfdHlwZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGhpY2tuZXNzLCBwb3NpdGlvbjsK KyAgICAgICAgICAgICAgaW50IHk7CisgICAgICAgICAgICAgIGlmIChzLT5wcmV2ICYmIHMtPnBy ZXYtPmZhY2UtPnVuZGVybGluZV9wCisgICAgICAmJiBzLT5wcmV2LT5mYWNlLT51bmRlcmxpbmVf dHlwZSA9PSBGQUNFX1VOREVSX0xJTkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgLyogV2UgdXNlIHRoZSBzYW1lIHVuZGVybGluZSBzdHlsZSBhcyB0aGUgcHJldmlvdXMg b25lLiAgKi8KKyAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IHMtPnByZXYtPnVuZGVybGlu ZV90aGlja25lc3M7CisgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHMtPnByZXYtPnVuZGVy bGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIHVuZGVybGluZSB0 aGlja25lc3MuICBEZWZhdWx0IGlzIDEgcGl4ZWwuICAqLworICAgICAgICAgICAgICAgICAgaWYg KHMtPmZvbnQgJiYgcy0+Zm9udC0+dW5kZXJsaW5lX3RoaWNrbmVzcyA+IDApCisgICAgICAgICAg ICAgICAgICAgIHRoaWNrbmVzcyA9IHMtPmZvbnQtPnVuZGVybGluZV90aGlja25lc3M7CisgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IDE7Cisg ICAgICAgICAgICAgICAgICBpZiAoeF91bmRlcmxpbmVfYXRfZGVzY2VudF9saW5lKQorICAgICAg ICAgICAgICAgICAgICBwb3NpdGlvbiA9IChzLT5oZWlnaHQgLSB0aGlja25lc3MpIC0gKHMtPnli YXNlIC0gcy0+eSk7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIHVuZGVybGluZSBwb3NpdGlvbi4g IFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGlj YWwgb2Zmc2V0IGluIHBpeGVscyBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgdG9wIG9mCisgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIHVuZGVybGluZS4gIFRoaXMgaXMgYSBzaWduZWQgdmFs dWUgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNzLCBhbmQg aXRzIGRlZmF1bHQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBST1VORCAoKG1heGltdW0g ZGVzY2VudCkgLyAyKSwgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgIFJPVU5EKHgpID0g Zmxvb3IgKHggKyAwLjUpICAqLworICAgICAgICAgICAgICAgICAgICAgIGlmICh4X3VzZV91bmRl cmxpbmVfcG9zaXRpb25fcHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBz LT5mb250ICYmIHMtPmZvbnQtPnVuZGVybGluZV9wb3NpdGlvbiA+PSAwKQorICAgICAgICAgICAg ICAgICAgICAgICAgcG9zaXRpb24gPSBzLT5mb250LT51bmRlcmxpbmVfcG9zaXRpb247CisgICAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocy0+Zm9udCkKKyAgICAgICAgICAgICAgICAgICAg ICAgIHBvc2l0aW9uID0gKHMtPmZvbnQtPmRlc2NlbnQgKyAxKSAvIDI7CisgICAgICAgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSB1bmRlcmxp bmVfbWluaW11bV9vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgIHBvc2l0aW9uID0gbWF4IChwb3NpdGlvbiwgdW5kZXJsaW5lX21pbmltdW1fb2Zmc2V0KTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8qIENoZWNrIHRoZSBzYW5pdHkgb2Yg dGhpY2tuZXNzIGFuZCBwb3NpdGlvbi4gIFdlIHNob3VsZAorICAgICAgICAgICAgICAgICBhdm9p ZCBkcmF3aW5nIHVuZGVybGluZSBvdXQgb2YgdGhlIGN1cnJlbnQgbGluZSBhcmVhLiAgKi8KKyAg ICAgICAgICAgICAgaWYgKHMtPnkgKyBzLT5oZWlnaHQgPD0gcy0+eWJhc2UgKyBwb3NpdGlvbikK KyAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IChzLT5oZWlnaHQgLSAxKSAtIChzLT55YmFzZSAt IHMtPnkpOworICAgICAgICAgICAgICBpZiAocy0+eSArIHMtPmhlaWdodCA8IHMtPnliYXNlICsg cG9zaXRpb24gKyB0aGlja25lc3MpCisgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gKHMtPnkg KyBzLT5oZWlnaHQpIC0gKHMtPnliYXNlICsgcG9zaXRpb24pOworICAgICAgICAgICAgICBzLT51 bmRlcmxpbmVfdGhpY2tuZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgICAgICBzLT51bmRlcmxp bmVfcG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgeSA9IHMtPnliYXNlICsgcG9z aXRpb247CisgICAgICAgICAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVkX3Ap CisgICAgICAgICAgICAgICAgeF9maWxsX3JlY3RhbmdsZSAocy0+Ziwgcy0+Z2MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMtPngsIHksIHMtPndpZHRoLCB0aGlja25lc3MpOwor ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg WEdDVmFsdWVzIHhnY3Y7CisgICAgICAgICAgICAgICAgICBYR2V0R0NWYWx1ZXMgKHMtPmRpc3Bs YXksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKKyAgICAgICAgICAgICAgICAgIFhTZXRG b3JlZ3JvdW5kIChzLT5kaXNwbGF5LCBzLT5nYywgcy0+ZmFjZS0+dW5kZXJsaW5lX2NvbG9yKTsK KyAgICAgICAgICAgICAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMtPmYsIHMtPmdjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPngsIHksIHMtPndpZHRoLCB0aGlja25lc3Mp OworICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKHMtPmRpc3BsYXksIHMtPmdjLCB4 Z2N2LmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgLyogRHJhdyBvdmVybGluZS4gICovCisgICAgICBpZiAocy0+ZmFjZS0+b3Zl cmxpbmVfcCkKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgZHkgPSAwLCBoID0gMTsKKyAgICBpZiAo cy0+ZmFjZS0+b3ZlcmxpbmVfY29sb3JfZGVmYXVsdGVkX3ApCisgICAgICB4X2ZpbGxfcmVjdGFu Z2xlIChzLT5mLCBzLT5nYywgcy0+eCwgcy0+eSArIGR5LAorICAgICAgICAgIHMtPndpZHRoLCBo KTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIFhHQ1ZhbHVlcyB4Z2N2OworICAgICAgICBY R2V0R0NWYWx1ZXMgKHMtPmRpc3BsYXksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKKyAg ICAgICAgWFNldEZvcmVncm91bmQgKHMtPmRpc3BsYXksIHMtPmdjLCBzLT5mYWNlLT5vdmVybGlu ZV9jb2xvcik7CisgICAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMtPmYsIHMtPmdjLCBzLT54LCBz LT55ICsgZHksCisgICAgICAgICAgICBzLT53aWR0aCwgaCk7CisgICAgICAgIFhTZXRGb3JlZ3Jv dW5kIChzLT5kaXNwbGF5LCBzLT5nYywgeGdjdi5mb3JlZ3JvdW5kKTsKKyAgICAgIH0KKyAgfQor ICAgICAgLyogRHJhdyBzdHJpa2UtdGhyb3VnaC4gICovCisgICAgICBpZiAocy0+ZmFjZS0+c3Ry aWtlX3Rocm91Z2hfcCkKKyAgeworICAgIHVuc2lnbmVkIGxvbmcgaCA9IDE7CisgICAgdW5zaWdu ZWQgbG9uZyBkeSA9IChzLT5oZWlnaHQgLSBoKSAvIDI7CisgICAgaWYgKHMtPmZhY2UtPnN0cmlr ZV90aHJvdWdoX2NvbG9yX2RlZmF1bHRlZF9wKQorICAgICAgeF9maWxsX3JlY3RhbmdsZSAocy0+ Ziwgcy0+Z2MsIHMtPngsIHMtPnkgKyBkeSwKKyAgICAgICAgICBzLT53aWR0aCwgaCk7CisgICAg ZWxzZQorICAgICAgeworICAgICAgICBYR0NWYWx1ZXMgeGdjdjsKKyAgICAgICAgWEdldEdDVmFs dWVzIChzLT5kaXNwbGF5LCBzLT5nYywgR0NGb3JlZ3JvdW5kLCAmeGdjdik7CisgICAgICAgIFhT ZXRGb3JlZ3JvdW5kIChzLT5kaXNwbGF5LCBzLT5nYywgcy0+ZmFjZS0+c3RyaWtlX3Rocm91Z2hf Y29sb3IpOworICAgICAgICB4X2ZpbGxfcmVjdGFuZ2xlIChzLT5mLCBzLT5nYywgcy0+eCwgcy0+ eSArIGR5LAorICAgICAgICAgICAgcy0+d2lkdGgsIGgpOworICAgICAgICBYU2V0Rm9yZWdyb3Vu ZCAocy0+ZGlzcGxheSwgcy0+Z2MsIHhnY3YuZm9yZWdyb3VuZCk7CisgICAgICB9CisgIH0KKyAg ICAgIC8qIERyYXcgcmVsaWVmIGlmIG5vdCB5ZXQgZHJhd24uICAqLworICAgICAgaWYgKCFyZWxp ZWZfZHJhd25fcCAmJiBzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19CT1gpCisgIHhfZHJhd19nbHlw aF9zdHJpbmdfYm94IChzKTsKKyAgICAgIGlmIChzLT5wcmV2KQorICB7CisgICAgc3RydWN0IGds eXBoX3N0cmluZyAqcHJldjsKKyAgICBmb3IgKHByZXYgPSBzLT5wcmV2OyBwcmV2OyBwcmV2ID0g cHJldi0+cHJldikKKyAgICAgIGlmIChwcmV2LT5obCAhPSBzLT5obAorICAgICYmIHByZXYtPngg KyBwcmV2LT53aWR0aCArIHByZXYtPnJpZ2h0X292ZXJoYW5nID4gcy0+eCkKKyAgICAgICAgewor ICAgIC8qIEFzIHByZXYgd2FzIGRyYXduIHdoaWxlIGNsaXBwZWQgdG8gaXRzIG93biBhcmVhLCB3 ZQorICAgICAgIG11c3QgZHJhdyB0aGUgcmlnaHRfb3ZlcmhhbmcgcGFydCB1c2luZyBzLT5obCBu b3cuICAqLworICAgIGVudW0gZHJhd19nbHlwaHNfZmFjZSBzYXZlID0gcHJldi0+aGw7CisgICAg cHJldi0+aGwgPSBzLT5obDsKKyAgICBtY194X3NldF9nbHlwaF9zdHJpbmdfZ2MgKHByZXYsIGN1 cnNvcl9nY19wKTsKKyAgICB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmdfZXhhY3RseSAocywg cHJldik7CisgICAgaWYgKHByZXYtPmZpcnN0X2dseXBoLT50eXBlID09IENIQVJfR0xZUEgpCisg ICAgICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHByZXYpOworICAgIGVsc2UKKyAg ICAgIHhfZHJhd19jb21wb3NpdGVfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHByZXYpOworICAg IHhfcmVzZXRfY2xpcF9yZWN0YW5nbGVzIChwcmV2LT5mLCBwcmV2LT5nYyk7CisgICAgcHJldi0+ aGwgPSBzYXZlOworICAgIHByZXYtPm51bV9jbGlwcyA9IDA7CisgICAgICAgIH0KKyAgfQorICAg ICAgaWYgKHMtPm5leHQpCisgIHsKKyAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpuZXh0OworICAg IGZvciAobmV4dCA9IHMtPm5leHQ7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KQorICAgICAgaWYg KG5leHQtPmhsICE9IHMtPmhsCisgICAgJiYgbmV4dC0+eCAtIG5leHQtPmxlZnRfb3Zlcmhhbmcg PCBzLT54ICsgcy0+d2lkdGgpCisgICAgICAgIHsKKyAgICAvKiBBcyBuZXh0IHdpbGwgYmUgZHJh d24gd2hpbGUgY2xpcHBlZCB0byBpdHMgb3duIGFyZWEsCisgICAgICAgd2UgbXVzdCBkcmF3IHRo ZSBsZWZ0X292ZXJoYW5nIHBhcnQgdXNpbmcgcy0+aGwgbm93LiAgKi8KKyAgICBlbnVtIGRyYXdf Z2x5cGhzX2ZhY2Ugc2F2ZSA9IG5leHQtPmhsOworICAgIG5leHQtPmhsID0gcy0+aGw7CisgICAg bWNfeF9zZXRfZ2x5cGhfc3RyaW5nX2djIChuZXh0LCBjdXJzb3JfZ2NfcCk7CisgICAgeF9zZXRf Z2x5cGhfc3RyaW5nX2NsaXBwaW5nX2V4YWN0bHkgKHMsIG5leHQpOworICAgIGlmIChuZXh0LT5m aXJzdF9nbHlwaC0+dHlwZSA9PSBDSEFSX0dMWVBIKQorICAgICAgeF9kcmF3X2dseXBoX3N0cmlu Z19mb3JlZ3JvdW5kIChuZXh0KTsKKyAgICBlbHNlCisgICAgICB4X2RyYXdfY29tcG9zaXRlX2ds eXBoX3N0cmluZ19mb3JlZ3JvdW5kIChuZXh0KTsKKyAgICB4X3Jlc2V0X2NsaXBfcmVjdGFuZ2xl cyAobmV4dC0+ZiwgbmV4dC0+Z2MpOworICAgIG5leHQtPmhsID0gc2F2ZTsKKyAgICBuZXh0LT5u dW1fY2xpcHMgPSAwOworICAgIG5leHQtPmNsaXBfaGVhZCA9IHMtPm5leHQ7CisgICAgICAgIH0K KyAgfQorICAgIH0KKyAgLyogUmVzZXQgY2xpcHBpbmcuICAqLworICB4X3Jlc2V0X2NsaXBfcmVj dGFuZ2xlcyAocy0+Ziwgcy0+Z2MpOworICBzLT5udW1fY2xpcHMgPSAwOworfQorCisvKiBlbmQg TVVMVElQTEUtQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogRGVm YXVsdCB0byB1c2luZyBYSU0gaWYgYXZhaWxhYmxlLiAgKi8KICNpZmRlZiBVU0VfWElNCiBib29s IHVzZV94aW0gPSB0cnVlOwpAQCAtOTk5LDYgKzE4NjIsMTUgQEAgeF91cGRhdGVfYmVnaW4gKHN0 cnVjdCBmcmFtZSAqZikKICAgaWYgKEZSQU1FX1RPT0xUSVBfUCAoZikgJiYgIUZSQU1FX1ZJU0lC TEVfUCAoZikpCiAgICAgcmV0dXJuOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyog TVVMVElQTEUtQ1VSU09SUyAqLworCisgIGYtPm1jX3VwZGF0aW5nX2ZyYW1lID0gZjsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogICBpZiAoISBGUkFNRV9DUl9TVVJGQUNFIChmKSkK ICAgICB7CiAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKQEAgLTEyNjYsNiArMjEzOCwxNiBAQCB4 X3VwZGF0ZV9lbmQgKHN0cnVjdCBmcmFtZSAqZikKICAgWEZsdXNoIChGUkFNRV9YX0RJU1BMQVkg KGYpKTsKICAgdW5ibG9ja19pbnB1dCAoKTsKICNlbmRpZgorCisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGYtPm1jX3VwZGF0aW5nX2ZyYW1l ID0gTlVMTDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogfQogCiAvKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHZhcmlvdXMgcGxhY2VzIGluIHhkaXNwLmMKQEAgLTEzMTAw LDYgKzEzOTgyLDIxIEBAIHhfYWN0aXZhdGVfdGltZW91dF9hdGltZXIgKHZvaWQpCiAKIHN0YXRp YyBzdHJ1Y3QgcmVkaXNwbGF5X2ludGVyZmFjZSB4X3JlZGlzcGxheV9pbnRlcmZhY2UgPQogICB7 CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisK Ky8qIGByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgeHRlcm0uY2AgbXVzdCBiZSBpbiB0aGUgZXhh Y3Qgc2FtZSBvcmRlciBhcyB0aGUKK2ByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgZGlzcGV4dGVy bi5oYCEgKi8KKworICBtY194X3dyaXRlX2dseXBocywKKyAgbWNfeF9kcmF3X3dpbmRvd19jdXJz b3IsCisgIG1jX3hfZHJhd19nbHlwaF9zdHJpbmcsCisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworCisKICAgICB4X2ZyYW1lX3Bhcm1faGFuZGxlcnMsCiAgICAgeF9wcm9kdWNlX2dseXBocywK ICAgICB4X3dyaXRlX2dseXBocywK --Multipart_Sat_Apr_27_17:26:52_2019-1--