From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.devel Subject: Re: nsterm.m: How to play nice with Mojave revisions -- #17684 (crosshairs) and #22873 (multiple fake cursors) ... Date: Fri, 12 Oct 2018 19:17:32 -0700 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Fri_Oct_12_19:17:32_2018-1" X-Trace: blaine.gmane.org 1539409201 15392 195.159.176.226 (13 Oct 2018 05:40:01 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 13 Oct 2018 05:40:01 +0000 (UTC) Cc: emacs-devel@gnu.org To: Alan Third Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Oct 13 07:39:56 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gBCeX-0003rp-Ci for ged-emacs-devel@m.gmane.org; Sat, 13 Oct 2018 07:39:55 +0200 Original-Received: from localhost ([::1]:43798 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gBCgd-00020J-OZ for ged-emacs-devel@m.gmane.org; Sat, 13 Oct 2018 01:42:03 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:52542) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gB9V4-0000B5-KO for emacs-devel@gnu.org; Fri, 12 Oct 2018 22:17:55 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gB9V1-0000AX-83 for emacs-devel@gnu.org; Fri, 12 Oct 2018 22:17:54 -0400 Original-Received: from gateway36.websitewelcome.com ([192.185.199.121]:18301) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gB9Uz-00006H-Rb for emacs-devel@gnu.org; Fri, 12 Oct 2018 22:17:51 -0400 Original-Received: from cm11.websitewelcome.com (cm11.websitewelcome.com [100.42.49.5]) by gateway36.websitewelcome.com (Postfix) with ESMTP id C59CB400C8F5D for ; Fri, 12 Oct 2018 20:24:24 -0500 (CDT) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id B9UmgEMcfRPojB9UmgVyEJ; Fri, 12 Oct 2018 21:17:37 -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:Cc:To:From:Message-ID:Date: Sender:Reply-To: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=yUNW6E1I6LpXzbapLM3zd7bv3GO5LXU1qDSs7X2USpA=; b=NQumCGNT0wUWSLrkc8w1NsUjLg OHef30FBxywDMfsGfxcqTtkdpwpO+sjAew+7gl9tNJ9HRJCqJdf/GPaL8cA3+chlm7X1QydVwmyWo EqwQyghRB3UFch6G5AEtOycMXEQLjTlHB5ulj2Q3scMi7dyc2b9FFNxHmaW3x8ns0IP2Jjulf1yQs jX9AlRrw1JnbnD7A8d0r7ky2O146qHdsi2xFm1kzE1cjChmAbjmbmmFwUFi4w0rpmHFs5oUWIeOAu BZuvoR9JlacamFXAv17UhknnxVNZQQfdigxDGVEXa3sIjQjmrn6GLN8lIU6fdID1PzYLx+BTDRl6y WKM/2TLg==; Original-Received: from rrcs-74-62-211-60.west.biz.rr.com ([74.62.211.60]:49398 helo=MBP.local) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.91) (envelope-from ) id 1gB9Uj-003q5r-LA; Fri, 12 Oct 2018 21:17:36 -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: 74.62.211.60 X-Source-L: No X-Exim-ID: 1gB9Uj-003q5r-LA X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: rrcs-74-62-211-60.west.biz.rr.com (MBP.local) [74.62.211.60]:49398 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] [fuzzy] X-Received-From: 192.185.199.121 X-Mailman-Approved-At: Sat, 13 Oct 2018 01:41:52 -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:230362 Archived-At: --Multipart_Fri_Oct_12_19:17:32_2018-1 Content-Type: text/plain; charset=US-ASCII Thank you Alan for taking a look at this thread. Here is the code ... Using a build of the master branch as of today (10/12/2018): git reset --hard 9c231a447014823ed1955e16b6693adbe041ca99 git apply /path/to/attached/patch.diff Build a GUI version of Emacs --with-ns Open up the newly built Emacs and type: M-x mc-test or M-x +-mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > Date: [10-12-2018 01:54:15] <12 Oct 2018 09:54:15 +0100> > From: Alan Third > To: Keith David Bershatsky > Cc: Emacs-Devel devel > Subject: Re: nsterm.m: How to play nice with Mojave revisions -- #17684 (crosshairs) and #22873 (multiple fake cursors) ... > > * * * > > Hi Keith, this looks a bit strange. > > The idea is that when running redisplay cocoa does not let you draw to the screen, so ns_clip_to_rect, etc., marks the area as needing to be redrawn later, and returns > NO so you know not to try drawing to the frame. > > Later drawRect is called with a list of the areas that have been marked as needing redrawn and it calls expose on those areas and so Emacs runs the drawing functions > again, but this time ns_clip_to_rect returns YES so you know you can go ahead and draw. > > For some reason NSTRACE doesn't show the functions being called from within drawRect, so if you're relying on that it may mislead you. > > I don't know what's going on with your code, is there somewhere I can have a look? --Multipart_Fri_Oct_12_19:17:32_2018-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="10_12_2018__19_05_57_685.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvY3Jvc3NoYWlycy5lbCBiL2xpc3AvY3Jvc3NoYWlycy5lbApuZXcg ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzJmYmIwCi0tLSAvZGV2L251bGwKKysr IGIvbGlzcC9jcm9zc2hhaXJzLmVsCkBAIC0wLDAgKzEsMTIzMyBAQAorOzs7Ozs7Ozs7Ozs7Ozs7 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 dGhpcyAgImV4dDptYy1tYXJrLW1vcmUiKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIG1jLWlu c3RhbGwgKCkKKyJUbyB1c2UgbXVsdGlwbGUtY3Vyc29ycyBhZnRlciByZXN0YXJ0aW5nIEVtYWNz LCBtYWtlIHN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGxpbmUKK2FwcGVhcnMgc29tZXdoZXJlIGlu IHRoZSAuZW1hY3MvaW5pdC5lbDogIChwYWNrYWdlLWluaXRpYWxpemUpIgorKGludGVyYWN0aXZl KQorICAocmVxdWlyZSAncGFja2FnZSkKKyAgKGFkZC10by1saXN0ICdwYWNrYWdlLWFyY2hpdmVz ICcoIm1lbHBhIiAuICJodHRwOi8vbWVscGEubWlsa2JveC5uZXQvcGFja2FnZXMvIikgdCkKKyAg KHBhY2thZ2UtaW5pdGlhbGl6ZSkKKyAgKHBhY2thZ2UtcmVmcmVzaC1jb250ZW50cykKKyAgKHVu bGVzcyAobG9jYXRlLWxpYnJhcnkgIm11bHRpcGxlLWN1cnNvcnMtY29yZSIpCisgICAgKHBhY2th Z2UtaW5zdGFsbCAnbXVsdGlwbGUtY3Vyc29ycykpKQorCisoZXZhbC1hZnRlci1sb2FkICJtdWx0 aXBsZS1jdXJzb3JzLWNvcmUiICcocHJvZ24KKworICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIFtT LW1vdXNlLTFdICdtYy9hZGQtY3Vyc29yLW9uLWNsaWNrKQorICAoZGVmaW5lLWtleSBnbG9iYWwt bWFwIFs/XE0tZF0gJ21jL21hcmstbmV4dC1saWtlLXRoaXMtY3ljbGUtZm9yd2FyZCkKKyAgKGRl ZmluZS1rZXkgZ2xvYmFsLW1hcCBbP1xNLURdICdtYy9tYXJrLXByZXZpb3VzLWxpa2UtdGhpcy1j eWNsZS1mb3J3YXJkKQorICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIFs/XHMtZF0gJ21jL21hcmst bmV4dC1saWtlLXRoaXMtY3ljbGUtZm9yd2FyZCkKKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCBb P1xzLURdICdtYy9tYXJrLXByZXZpb3VzLWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkKQorICAoZGVm aW5lLWtleSBnbG9iYWwtbWFwIChrYmQgIjxDLXMtMjY4NjMyMDcxPiIpICdtYy9tYXJrLWFsbC1s aWtlLXRoaXMpCisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgKGtiZCAiQy1zLWciKSAnbWMvbWFy ay1hbGwtbGlrZS10aGlzKQorICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIChrYmQgIlMtcy1kIikg J21jL21hcmstcHJldmlvdXMtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQpCisgIChkZWZpbmUta2V5 IGdsb2JhbC1tYXAgKGtiZCAiQy1sIikgJ21jL2VkaXQtZW5kcy1vZi1saW5lcykKKyAgKGRlZmlu ZS1rZXkgZ2xvYmFsLW1hcCAoa2JkICJDLVMtbCIpICdtYy9lZGl0LWJlZ2lubmluZ3Mtb2YtbGlu ZXMpCisKKyAgKGFkZC1ob29rICdtdWx0aXBsZS1jdXJzb3JzLW1vZGUtZGlzYWJsZWQtaG9vawor ICAgICAgICAgICAgKGxhbWJkYSAoKSAoa2lsbC1sb2NhbC12YXJpYWJsZSAnbXVsdGlwbGUtY3Vy c29ycy1jb25mKSkpCisKKyAgKGRlZnZhciBtYy91c2UtYnVpbHQtaW4tY3Vyc29ycyB0CisgICJX aGV0aGVyIHRvIHVzZSB0aGUgYnVpbHQtaW4gZmFrZSBjdXJzb3JzLiIpCisKKyAgKGRlZnVuIG1j L2NyZWF0ZS1mYWtlLWN1cnNvci1hdC1wb2ludCAoJm9wdGlvbmFsIGlkKQorICAgICJBZGQgYSBm YWtlIGN1cnNvciBhbmQgcG9zc2libHkgYSBmYWtlIGFjdGl2ZSByZWdpb24gb3ZlcmxheSBiYXNl ZCBvbiBwb2ludCBhbmQgbWFyay4KKyAgU2F2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIG92 ZXJsYXkgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuIgorICAgICh1bmxlc3MgbWMtLW1heC1jdXJzb3Jz LW9yaWdpbmFsCisgICAgICAoc2V0cSBtYy0tbWF4LWN1cnNvcnMtb3JpZ2luYWwgbWMvbWF4LWN1 cnNvcnMpKQorICAgICh3aGVuIG1jL21heC1jdXJzb3JzCisgICAgICAodW5sZXNzICg8IChtYy9u dW0tY3Vyc29ycykgbWMvbWF4LWN1cnNvcnMpCisgICAgICAgIChpZiAoeWVzLW9yLW5vLXAgKGZv cm1hdCAiJWQgYWN0aXZlIGN1cnNvcnMuIENvbnRpbnVlPyAiIChtYy9udW0tY3Vyc29ycykpKQor ICAgICAgICAgICAgKHNldHEgbWMvbWF4LWN1cnNvcnMgKHJlYWQtbnVtYmVyICJFbnRlciBhIG5l dywgdGVtcG9yYXJ5IG1heGltdW06ICIpKQorICAgICAgICAgIChtYy9yZW1vdmUtZmFrZS1jdXJz b3JzKQorICAgICAgICAgIChlcnJvciAiQWJvcnRlZDogdG9vIG1hbnkgY3Vyc29ycyIpKSkpCisg ICAgKGxldCAoKG92ZXJsYXkKKyAgICAgICAgICAgIChpZiBtYy91c2UtYnVpbHQtaW4tY3Vyc29y cworICAgICAgICAgICAgICAobWFrZS1vdmVybGF5IChwb2ludCkgKHBvaW50KSkKKyAgICAgICAg ICAgICAgKG1jL21ha2UtY3Vyc29yLW92ZXJsYXktYXQtcG9pbnQpKSkpCisgICAgICAob3Zlcmxh eS1wdXQgb3ZlcmxheSAnbWMtaWQgKG9yIGlkIChtYy9jcmVhdGUtY3Vyc29yLWlkKSkpCisgICAg ICAob3ZlcmxheS1wdXQgb3ZlcmxheSAndHlwZSAnZmFrZS1jdXJzb3IpCisgICAgICAob3Zlcmxh eS1wdXQgb3ZlcmxheSAncHJpb3JpdHkgMTAwKQorICAgICAgKG1jL3N0b3JlLWN1cnJlbnQtc3Rh dGUtaW4tb3ZlcmxheSBvdmVybGF5KQorICAgICAgKHdoZW4gKHVzZS1yZWdpb24tcCkKKyAgICAg ICAgKG92ZXJsYXktcHV0IG92ZXJsYXkgJ3JlZ2lvbi1vdmVybGF5CisgICAgICAgICAgICAgICAg ICAgICAobWMvbWFrZS1yZWdpb24tb3ZlcmxheS1iZXR3ZWVuLXBvaW50LWFuZC1tYXJrKSkpCisg ICAgICBvdmVybGF5KSkKKworICAoZGVmdW4gbWMvZXhlY3V0ZS10aGlzLWNvbW1hbmQtZm9yLWFs bC1jdXJzb3JzLTEgKCkKKyAgICAiVXNlZCB3aXRoIHBvc3QtY29tbWFuZC1ob29rIHRvIGV4ZWN1 dGUgc3VwcG9ydGVkIGNvbW1hbmRzIGZvciBhbGwgY3Vyc29ycy4KKyAgLSAgSXQgdXNlcyB0d28g bGlzdHMgb2YgY29tbWFuZHMgdG8ga25vdyB3aGF0IHRvIGRvOiB0aGUgcnVuLW9uY2UKKyAgbGlz dCBhbmQgdGhlIHJ1bi1mb3ItYWxsIGxpc3QuIElmIGEgY29tbWFuZCBpcyBpbiBuZWl0aGVyIG9m IHRoZXNlIGxpc3RzLAorICBpdCB3aWxsIHByb21wdCBmb3IgdGhlIHByb3BlciBhY3Rpb24gYW5k IHRoZW4gc2F2ZSB0aGF0IHByZWZlcmVuY2UuCisgIC0gIFNvbWUgY29tbWFuZHMgYXJlIHNvIHVu c3VwcG9ydGVkIHRoYXQgdGhleSBhcmUgZXZlbiBwcmV2ZW50ZWQgZm9yCisgIHRoZSBvcmlnaW5h bCBjdXJzb3IsIHRvIGluZm9ybSBhYm91dCB0aGUgbGFjayBvZiBzdXBwb3J0LiIKKyAgICAodW5s ZXNzIG1jLS1leGVjdXRpbmctY29tbWFuZC1mb3ItZmFrZS1jdXJzb3IKKyAgICAgIChpZiAoZXEg MSAobWMvbnVtLWN1cnNvcnMpKSA7OyBubyBmYWtlIGN1cnNvcnM/IGRpc2FibGUgbWMtbW9kZQor ICAgICAgICAgIChtdWx0aXBsZS1jdXJzb3JzLW1vZGUgMCkKKyAgICAgICAgKHdoZW4gdGhpcy1v cmlnaW5hbC1jb21tYW5kCisgICAgICAgICAgKGxldCAoKG9yaWdpbmFsLWNvbW1hbmQgKG9yIG1j LS10aGlzLWNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bW1hbmQtcmVtYXBwaW5nIHRoaXMtb3JpZ2luYWwtY29tbWFuZCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhpcy1vcmlnaW5hbC1jb21tYW5kKSkpCisgICAgICAgICAg ICA7OyBza2lwIGtleWJvYXJkIG1hY3Jvcywgc2luY2UgdGhleSB3aWxsIGdlbmVyYXRlIGFjdHVh bCBjb21tYW5kcyB0aGF0IGFyZQorICAgICAgICAgICAgOzsgYWxzbyBydW4gaW4gdGhlIGNvbW1h bmQgbG9vcCAtIHdlJ2xsIGhhbmRsZSB0aG9zZSBsYXRlciBpbnN0ZWFkLgorICAgICAgICAgICAg KHdoZW4gKGZ1bmN0aW9ucCBvcmlnaW5hbC1jb21tYW5kKQorICAgICAgICAgICAgICA7OyBpZiBp dCdzIGEgbGFtYmRhLCB3ZSBjYW4ndCBrbm93IGlmIGl0J3Mgc3VwcG9ydGVkIG9yIG5vdAorICAg ICAgICAgICAgICA7OyAtIHNvIGdvIGFoZWFkIGFuZCBhc3N1bWUgaXQncyBvaywgYmVjYXVzZSB3 ZSdyZSBqdXN0IG9wdGltaXN0aWMgbGlrZSB0aGF0CisgICAgICAgICAgICAgIChpZiAob3IgKG5v dCAoc3ltYm9scCBvcmlnaW5hbC1jb21tYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICA7OyBs YW1iZGEgcmVnaXN0ZXJlZCBieSBzbWFydHJlcAorICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctcHJlZml4LXAgIigiIChzeW1ib2wtbmFtZSBvcmlnaW5hbC1jb21tYW5kKSkpCisgICAgICAg ICAgICAgICAgICAobWMvZXhlY3V0ZS1jb21tYW5kLWZvci1hbGwtZmFrZS1jdXJzb3JzIG9yaWdp bmFsLWNvbW1hbmQpCisgICAgICAgICAgICAgICAgOzsgc21hcnRyZXAgYGludGVybidzIGNvbW1h bmRzIGludG8gb3duIG9iYXJyYXkgdG8gaGVscAorICAgICAgICAgICAgICAgIDs7IGBkZXNjcmli ZS1iaW5kaW5ncycuICBTbywgbGV0J3MgcmUtYGludGVybicgaGVyZSB0bworICAgICAgICAgICAg ICAgIDs7IG1ha2UgdGhlIGNvbW1hbmQgY29tcGFyYWJsZSBieSBgZXEnLgorICAgICAgICAgICAg ICAgIChzZXRxIG9yaWdpbmFsLWNvbW1hbmQgKGludGVybiAoc3ltYm9sLW5hbWUgb3JpZ2luYWwt Y29tbWFuZCkpKQorICAgICAgICAgICAgICAgIDs7IG90aGVyd2lzZSBpdCdzIGEgc3ltYm9sLCBh bmQgd2UgY2FuIGJlIG1vcmUgdGhvcm91Z2gKKyAgICAgICAgICAgICAgICAoaWYgKGdldCBvcmln aW5hbC1jb21tYW5kICdtYy0tdW5zdXBwb3J0ZWQpCisgICAgICAgICAgICAgICAgICAgIChtZXNz YWdlICIlUyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgY3Vyc29ycyVzIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbC1jb21tYW5kCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChnZXQgb3JpZ2luYWwtY29tbWFuZCAnbWMtLXVuc3VwcG9ydGVkKSkKKyAg ICAgICAgICAgICAgICAgICh3aGVuIChhbmQgb3JpZ2luYWwtY29tbWFuZAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobm90IChtZW1xIG9yaWdpbmFsLWNvbW1hbmQgbWMtLWRlZmF1bHQt Y21kcy10by1ydW4tb25jZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKG1l bXEgb3JpZ2luYWwtY29tbWFuZCBtYy9jbWRzLXRvLXJ1bi1vbmNlKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG9yIG1jL2Fsd2F5cy1ydW4tZm9yLWFsbAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1lbXEgb3JpZ2luYWwtY29tbWFuZCBtYy0tZGVmYXVsdC1jbWRz LXRvLXJ1bi1mb3ItYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lbXEg b3JpZ2luYWwtY29tbWFuZCBtYy9jbWRzLXRvLXJ1bi1mb3ItYWxsKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1jL3Byb21wdC1mb3ItaW5jbHVzaW9uLWluLXdoaXRlbGlzdCBv cmlnaW5hbC1jb21tYW5kKSkpCisgICAgICAgICAgICAgICAgICAgIChtYy9leGVjdXRlLWNvbW1h bmQtZm9yLWFsbC1mYWtlLWN1cnNvcnMgb3JpZ2luYWwtY29tbWFuZCkpKSkKKyAgICAgICAgICAg ICAgKHdoZW4gbWMvdXNlLWJ1aWx0LWluLWN1cnNvcnMKKyAgICAgICAgICAgICAgICAoc2V0cSBt dWx0aXBsZS1jdXJzb3JzLWNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoeCkgKGxpc3QgKG92ZXJsYXktc3RhcnQg eCkgImJhciIgbmlsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jL2FsbC1mYWtlLWN1 cnNvcnMpKSkpKSkpKSkpCisKKyAgKGRlZnVuIG1jL21hcmstbmV4dC1saWtlLXRoaXMtY3ljbGUt Zm9yd2FyZCAoKQorICAiTWFya3MgbmV4dCBvY2N1cmVuY2Ugb2Ygd29yZCBsaWtlIHRoaXMgYW5k IGFkdmFuY2VzIGN1cnNvciB0byB0aGlzIG9jY3VycmVuY2UiCisgIChpbnRlcmFjdGl2ZSkKKyAg ICAobWMvbWFyay1uZXh0LWxpa2UtdGhpcyAxKSkKKworICAoZGVmdW4gbWMvbWFyay1wcmV2aW91 cy1saWtlLXRoaXMtY3ljbGUtZm9yd2FyZCAoKQorICAiTWFya3MgbmV4dCBvY2N1cnJlbmNlIG9m IHdvcmQgbGlrZSB0aGlzIGFuZCBhZHZhbmNlcyBjdXJzb3IgdG8gdGhpcyBvY2N1cnJlbmNlIgor ICAoaW50ZXJhY3RpdmUpCisgICAgKG1jL21hcmstcHJldmlvdXMtbGlrZS10aGlzIDEpKQorCisg IChhZGQtdG8tbGlzdCAnbWMtLWRlZmF1bHQtY21kcy10by1ydW4tb25jZSAnbWMvbWFyay1uZXh0 LWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkKQorCisgIChhZGQtdG8tbGlzdCAnbWMtLWRlZmF1bHQt Y21kcy10by1ydW4tb25jZSAnbWMvbWFyay1wcmV2aW91cy1saWtlLXRoaXMtY3ljbGUtZm9yd2Fy ZCkgKSkKKworOzs7IEVORCBtb2RpZmljYXRpb24gb2YgdGhlIE11bHRpcGxlIEN1cnNvcnMgbGli cmFyeSB3cml0dGVuIGJ5ICBNYWduYXIgU3ZlZW4uCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 OworOzs7IEJFR0lOIGNyb3NzaGFpcnMuZWwKKworOzs7IEJVSUxULUlOIFZBUklBQkxFUzoKKwor Ozs7IFRoZSB2YXJpYWJsZXMgYGNyb3NzaGFpcnMtaG9yaXpvbnRhbC1ydWxlcicgYW5kIGBjcm9z c2hhaXJzLXZlcnRpY2FsLXJ1bGVyJworOzs7IG1heSBiZSB1c2VkIHRvIHN1cHByZXNzIGVpdGhl ciBvciBib3RoIG9mIHRoZSBydWxlcnMgdGhhdCBjcmVhdGUgY3Jvc3NoYWlycy4KKzs7OworOzs7 IChzZXRxIGNyb3NzaGFpcnMtaG9yaXpvbnRhbC1ydWxlciBuaWwpCis7OzsKKzs7OyAoc2V0cSBj cm9zc2hhaXJzLXZlcnRpY2FsLXJ1bGVyIG5pbCkKKworOzs7IFRoZSB2YXJpYWJsZSBgbWMtcmVh bC1mYWtlLWN1cnNvcicgY29udHJvbHMgd2hhdCB0eXBlIG9mIGN1cnNvciB3aWxsCis7OzsgYmUg ZHJhd24gaW4gbGlldSBvZiB0aGUgcmVhbCBjdXJzb3Igd2hlbiBjcm9zc2hhaXJzIGFyZSBhY3Rp dmUuICBUaGUgc3RyaW5nCis7OzsgIm5vIiB3aWxsIGNhdXNlIHRoZSBjcmVhdGlvbiBvZiBhIGhv cml6b250YWwgYW5kIHZlcnRpY2FsIGJhciBmb3IgYSBzZWFtbGVzcworOzs7IGFwcGVhcmFuY2Uu Cis7OzsKKzs7OyAoc2V0cSBtYy1yZWFsLWZha2UtY3Vyc29yICJubyIpCisKKzs7OyBXaGVuIGBj cm9zc2hhaXJzLWRyYXctZm9ydGh3aXRoJyBpcyBub24tbmlsLCBkcmF3IGNyb3NzaGFpcnMgd2hl bmV2ZXIgdGhlCis7OzsgcmVhbCBjdXJzb3Igd291bGQgb3JkaW5hcmlseSBiZSBkcmF3biwgd2hp Y2ggaXMgc29tZXRpbWVzIG1vcmUgdGhhbiBvbmNlCis7OzsgZXZlcnkgY29tbWFuZCBsb29wLiAg V2hlbiBgY3Jvc3NoYWlycy1kcmF3LWZvcnRod2l0aCcgaXMgbmlsLCBjcm9zc2hhaXJzCis7Ozsg d2lsbCBiZSBwbGFjZWQgb24gYW4gaWRsZS10aW1lci4gIElmIHRoaXMgdmFyaWFibGUgaXMgcmVz ZXQgd2hpbGUgYCstbW9kZScKKzs7OyBpcyBlbmFibGVkLCB0aGVuIGl0IG1heSBiZSBuZWNlc3Nh cnkgdG8gdHVybiBvZmYvb24gYCstbW9kZScgdG8gcmVzZXQKKzs7OyBmdW5jdGlvbnMgYXR0YWNo ZWQgdG8gdGhlIGBwb3N0LWNvbW1hbmQtaG9vaycuICBUaGUgZGVmYXVsdCBpcyBub24tbmlsLgor Ozs7Cis7OzsgKHNldHEgY3Jvc3NoYWlycy1kcmF3LWZvcnRod2l0aCBuaWwpCisKKzs7OyBUaGUg dmFyaWFibGVzIGBtdWx0aXBsZS1jdXJzb3JzLWluYWN0aXZlLXdpbmRvd3MnIGFuZCBgY3Jvc3No YWlycy1pbmFjdGl2ZS13aW5kb3dzJworOzs7IG1heSBiZSB1c2VkIHRvIGRpc3BsYXkgbXVsdGlw bGUgY3Vyc29ycyBhbmQvb3IgY3Jvc3NoYWlycyBpbiB0aGUgaW5hY3RpdmUKKzs7OyB3aW5kb3dz LiAgVGhlIGRlZmF1bHQgaXMgbmlsLiAgQSBub24tbmlsIHZhbHVlIHdpbGwgdHVybiBvbiB0aGlz IGZlYXR1cmUuCis7OzsKKzs7OyAoc2V0cSBtdWx0aXBsZS1jdXJzb3JzLWluYWN0aXZlLXdpbmRv d3MgdCkKKzs7OworOzs7IChzZXRxIGNyb3NzaGFpcnMtaW5hY3RpdmUtd2luZG93cyB0KQorCis7 OzsgV2hlbiBgbXVsdGlwbGUtY3Vyc29ycy1kcmF3LWZvcnRod2l0aCcgaXMgbm9uLW5pbCwgZHJh dyBjcm9zc2hhaXJzIHdoZW5ldmVyIHRoZQorOzs7IHJlYWwgY3Vyc29yIHdvdWxkIG9yZGluYXJp bHkgYmUgZHJhd24sIHdoaWNoIGlzIHNvbWV0aW1lcyBtb3JlIHRoYW4gb25jZQorOzs7IGV2ZXJ5 IGNvbW1hbmQgbG9vcC4gIFdoZW4gYG11bHRpcGxlLWN1cnNvcnMtZHJhdy1mb3J0aHdpdGgnIGlz IG5pbCwgY3Jvc3NoYWlycworOzs7IHdpbGwgYmUgcGxhY2VkIG9uIGFuIGlkbGUtdGltZXIuICBJ ZiB0aGlzIHZhcmlhYmxlIGlzIHJlc2V0IHdoaWxlIGBtdWx0aXBsZS1jdXJzb3JzLW1vZGUnCis7 OzsgaXMgZW5hYmxlZCwgdGhlbiBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHR1cm4gb2ZmL29uIGBt dWx0aXBsZS1jdXJzb3JzLW1vZGUnIHRvIHJlc2V0Cis7OzsgZnVuY3Rpb25zIGF0dGFjaGVkIHRv IHRoZSBgcG9zdC1jb21tYW5kLWhvb2snLiAgVGhlIGRlZmF1bHQgaXMgbm9uLW5pbC4KKzs7Owor Ozs7IChzZXRxIG11bHRpcGxlLWN1cnNvcnMtZHJhdy1mb3J0aHdpdGggbmlsKQorCis7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBGQUNFUworCisoZGVmZ3JvdXAgKy1tb2RlIG5pbAorICAi RmFjZXMgZm9yIHRoZSB2ZXJ0aWNhbCBydWxlci4iCisgIDpncm91cCAnY29udmVuaWVuY2UpCisK Kzs7OyBEZWZpbmVkIGluIGBmYWNlcy5lbGA7IGFuZCwgdXNlZCBpbiBgeGRpc3AuY2AuCis7OzsK Kzs7OyAoZGVmZmFjZSArLXZlcnRpY2FsLWJhci1mYWNlCis7OzsgICAnKCh0ICg6Zm9yZWdyb3Vu ZCAibWFnZW50YSIpKSkKKzs7OyAgICJGYWNlIGZvciBgKy12ZXJ0aWNhbC1iYXItZmFjZScuIgor Ozs7ICAgOmdyb3VwICcrLW1vZGUpCisKKzs7OyBEZWZpbmVkIGluIGBmYWNlcy5lbGA7IGFuZCwg dXNlZCBpbiBgeGRpc3AuY2AuCis7OzsKKzs7OyAoZGVmZmFjZSArLWV2ZW4tbnVtYmVyZWQtY29s dW1uLWZhY2UKKzs7OyAgICcoKHQgKDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKSkpCis7OzsgICAiRmFj ZSBmb3IgYCstZXZlbi1udW1iZXJlZC1jb2x1bW4tZmFjZScuIgorOzs7ICAgOmdyb3VwICcrLW1v ZGUpCisKKzs7OyBEZWZpbmVkIGluIGBmYWNlcy5lbGA7IGFuZCwgdXNlZCBpbiBgeGRpc3AuY2Au Cis7OzsKKzs7OyAoZGVmZmFjZSArLW9kZC1udW1iZXJlZC1jb2x1bW4tZmFjZQorOzs7ICAgJygo dCAoOmZvcmVncm91bmQgInJlZCIpKSkKKzs7OyAgICJGYWNlIGZvciBgKy1vZGQtbnVtYmVyZWQt Y29sdW1uLWZhY2UnLiIKKzs7OyAgIDpncm91cCAnKy1tb2RlKQorCis7OzsgRGVmaW5lZCBpbiBg ZmFjZXMuZWxgOyBhbmQsIHVzZWQgaW4gYHhkaXNwLmNgLgorOzs7Cis7OzsgKGRlZmZhY2UgKy1i ZXlvbmQtZmlsbC1jb2x1bW4tZmFjZQorOzs7ICAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikp KQorOzs7ICAgIkZhY2UgZm9yIGArLWJleW9uZC1maWxsLWNvbHVtbi1mYWNlJy4iCis7OzsgICA6 Z3JvdXAgJystbW9kZSkKKworOzs7IERlZmluZWQgaW4gYGZhY2VzLmVsYDsgYW5kLCB1c2VkIGlu IGB4ZGlzcC5jYC4KKzs7OworOzs7IChkZWZmYWNlICstcmVhbC1mYWtlLWN1cnNvci1mYWNlCis7 OzsgICAnKCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIgOmJhY2tncm91bmQgIkRhcmtCbHVlIikpKQor Ozs7ICAgIkZhY2UgZm9yIGArLXJlYWwtZmFrZS1jdXJzb3ItZmFjZScuICBVc2VkIGluIGB4ZGlz cC5jJy4KKzs7OyBBcyB0byBhIGhvbGxvdyBzdHlsZSBjdXJzb3IsIHRoZSA6Zm9yZWdyb3VuZCBw YXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGJvcmRlciBhbmQKKzs7OyB0aGUgOmJhY2tncm91bmQg cGFyYW1ldGVyIGlzIHVzZWQgZm9yIHRoZSBpbm5lciBmaWxsZWQgc2hhZGluZy4gIFRoZSBjaGFy YWN0ZXIKKzs7OyByZXRhaW5zIGl0cyBvd24gZm9yZWdyb3VuZCBjb2xvciBhbmQgaXMgdW5hZmZl Y3RlZCBieSB0aGlzIHBhcnRpY3VsYXIgZmFjZS4iCis7OzsgICA6Z3JvdXAgJystbW9kZSkKKwor Ozs7IERlZmluZWQgaW4gYGZhY2VzLmVsYDsgYW5kLCB1c2VkIGluIGB4ZGlzcC5jYC4KKzs7Owor Ozs7IChkZWZmYWNlICstZXZlbi1udW1iZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFjZQorOzs7ICAg JygodCAoOmZvcmVncm91bmQgIiNlZWU4YWEiKSkpIDs7OyBQYWxlR29sZGVucm9kCis7OzsgICAi RmFjZSBmb3IgYCstZXZlbi1udW1iZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFjZScuICBVc2VkIGlu IGB4ZGlzcC5jJy4iCis7OzsgICA6Z3JvdXAgJystbW9kZSkKKworOzs7IERlZmluZWQgaW4gYGZh Y2VzLmVsYDsgYW5kLCB1c2VkIGluIGB4ZGlzcC5jYC4KKzs7OworOzs7IChkZWZmYWNlICstb2Rk LW51bWJlcmVkLWNvbHVtbi1pbmFjdGl2ZS1mYWNlCis7OzsgICAnKCh0ICg6Zm9yZWdyb3VuZCAi I2ZmNjM0NyIpKSkgOzs7IHRvbWF0bworOzs7ICAgIkZhY2UgZm9yIGArLW9kZC1udW1iZXJlZC1j b2x1bW4taW5hY3RpdmUtZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4iCis7OzsgICA6Z3JvdXAg JystbW9kZSkKKworOzs7IERlZmluZWQgaW4gYGZhY2VzLmVsYDsgYW5kLCB1c2VkIGluIGB4ZGlz cC5jYC4KKzs7OworOzs7IChkZWZmYWNlICstYmV5b25kLWZpbGwtY29sdW1uLWluYWN0aXZlLWZh Y2UKKzs7OyAgICcoKHQgKDpmb3JlZ3JvdW5kICIjMmU4YjU3IikpKSA7OzsgU2VhR3JlZW4KKzs7 OyAgICJGYWNlIGZvciBgKy1iZXlvbmQtZmlsbC1jb2x1bW4taW5hY3RpdmUtZmFjZScuICBVc2Vk IGluIGB4ZGlzcC5jJy4iCis7OzsgICA6Z3JvdXAgJystbW9kZSkKKworOzs7IERlZmluZWQgaW4g YGZhY2VzLmVsYDsgYW5kLCB1c2VkIGluIGB4ZGlzcC5jYC4KKzs7OworOzs7IChkZWZmYWNlICst cmVhbC1mYWtlLWN1cnNvci1pbmFjdGl2ZS1mYWNlCis7OzsgICAnKCh0ICg6Zm9yZWdyb3VuZCAi I2ZmMDBmZiIgOmJhY2tncm91bmQgIkZvcmVzdEdyZWVuIikpKSA7OzsgbWFnZW50YSAvIEZvcmVz dEdyZWVuCis7OzsgICAiRmFjZSBmb3IgYCstcmVhbC1mYWtlLWN1cnNvci1pbmFjdGl2ZS1mYWNl Jy4gIFVzZWQgaW4gYHhkaXNwLmMnLgorOzs7IEFzIHRvIGEgaG9sbG93IHN0eWxlIGN1cnNvciwg dGhlIDpmb3JlZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgYm9yZGVyIGFuZAorOzs7 IHRoZSA6YmFja2dyb3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGZpbGxlZCBz aGFkaW5nLiAgVGhlIGNoYXJhY3RlcgorOzs7IHJldGFpbnMgaXRzIG93biBmb3JlZ3JvdW5kIGNv bG9yIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IHRoaXMgcGFydGljdWxhciBmYWNlLiIKKzs7OyAgIDpn cm91cCAnKy1tb2RlKQorCis7OzsgRGVmaW5lZCBpbiBgZmFjZXMuZWxgOyBhbmQsIHVzZWQgaW4g YHhkaXNwLmNgLgorOzs7Cis7OzsgKGRlZmZhY2UgKy1vdmVybGF5LWFycm93LWZhY2UKKzs7OyAg ICcoKHQgKDpmb3JlZ3JvdW5kICJyZWQiKSkpCis7OzsgICAiRmFjZSBmb3IgYCstb3ZlcmxheS1h cnJvdy1mYWNlJy4iCis7OzsgICA6Z3JvdXAgJystbW9kZSkKKworOzs7IERlZmluZWQgaW4gYGZh Y2VzLmVsYDsgYW5kLCB1c2VkIGluIGB4ZGlzcC5jYC4KKzs7OworOzs7IChkZWZmYWNlICstb3Zl cmxheS1hcnJvdy1taW5pbWFsLWZhY2UKKzs7OyAgICcoKHQgKDpmb3JlZ3JvdW5kICJibHVlIikp KQorOzs7ICAgIkZhY2UgZm9yIGArLW92ZXJsYXktYXJyb3ctbWluaW1hbC1mYWNlJy4iCis7Ozsg ICA6Z3JvdXAgJystbW9kZSkKKworOzs7IERlZmluZWQgaW4gYGZhY2VzLmVsYDsgYW5kLCB1c2Vk IGluIGB4ZGlzcC5jYC4KKzs7OworOzs7IChkZWZmYWNlICstb3ZlcmxheS1hcnJvdy1pbmFjdGl2 ZS1mYWNlCis7OzsgICAnKCh0ICg6Zm9yZWdyb3VuZCAib3JhbmdlIikpKQorOzs7ICAgIkZhY2Ug Zm9yIGArLW92ZXJsYXktYXJyb3ctaW5hY3RpdmUtZmFjZScuIgorOzs7ICAgOmdyb3VwICcrLW1v ZGUpCisKKyhkZWZmYWNlICstZm9ybS1mZWVkLWZhY2UKKyAgKGNvbmQKKyAgICAoKGVxIHN5c3Rl bS10eXBlICdkYXJ3aW4pCisgICAgICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkpCisg ICAgKChlcSBzeXN0ZW0tdHlwZSAnd2luZG93cy1udCkKKyAgICAgICcoKHQgKDpmb3JlZ3JvdW5k ICJtYWdlbnRhIikpKSkpCisgICJGYWNlIGZvciBgKy1mb3JtLWZlZWQtZmFjZScuIgorICA6Z3Jv dXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1uZXdsaW5lLWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgIiM1NTU1NTUiKSkpCisgICJGYWNlIGZvciBgKy1uZXdsaW5lLWZhY2UnLiIKKyAgOmdyb3Vw ICcrLW1vZGUpCisKKyhkZWZmYWNlICstc3BhY2UtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAi RGFya1JlZCIpKSkKKyAgIkZhY2UgZm9yIGArLXNwYWNlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1v ZGUpCisKKyhkZWZmYWNlICstdGFiLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkp CisgICJGYWNlIGZvciBgKy10YWItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZh Y2UgKy10YWItc3BhY2VyLWZhY2UKKyAgJygodCAoOmJhY2tncm91bmQgImdyZXkyNSIpKSkKKyAg IkZhY2UgZm9yIGArLXRhYi1zcGFjZXItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1sZWZ0LWZyaW5nZS1jdXJyZW50LWxpbmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3Vu ZCAiZ3JlZW4iKSkpCisgICJGYWNlIGZvciBgKy1sZWZ0LWZyaW5nZS1jdXJyZW50LWxpbmUtZmFj ZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1sZWZ0LWZyaW5nZS1jdXJzb3It YWx0LW9uZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJibHVlIikpKQorICAiRmFjZSBmb3Ig YCstbGVmdC1mcmluZ2UtY3Vyc29yLWFsdC1vbmUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkK KworKGRlZmZhY2UgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LXR3by1mYWNlCisgICcoKHQgKDpm b3JlZ3JvdW5kICJyZWQiKSkpCisgICJGYWNlIGZvciBgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0 LXR3by1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWhvbGxvdy1yZWN0 YW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIpKSkKKyAgIkZhY2Ug Zm9yIGArLWhvbGxvdy1yZWN0YW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1iYWNrc2xhc2gtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JleTI1IikpKQor ICAiRmFjZSBmb3IgYCstYmFja3NsYXNoLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhk ZWZmYWNlICstZnJpbmdlLXF1ZXN0aW9uLW1hcmstZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAi Z3JlZW4iKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtcXVlc3Rpb24tbWFyay1mYWNlJy4iCisg IDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrLWZh Y2UKKyAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2Ut ZXhjbGFtYXRpb24tbWFyay1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSAr LWZyaW5nZS1sZWZ0LWFycm93LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgInB1cnBsZSIpKSkK KyAgIkZhY2UgZm9yIGArLWZyaW5nZS1sZWZ0LWFycm93LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1v ZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLXJpZ2h0LWFycm93LWZhY2UKKyAgJygodCAoOmZvcmVn cm91bmQgIk9yYW5nZVJlZCIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1yaWdodC1hcnJvdy1m YWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS11cC1hcnJvdy1m YWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJSb3lhbEJsdWUiKSkpCisgICJGYWNlIGZvciBgKy1m cmluZ2UtdXAtYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1m cmluZ2UtZG93bi1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQorICAi RmFjZSBmb3IgYCstZnJpbmdlLWRvd24tYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkK KworKGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3Jl Z3JvdW5kICJncmV5MjUiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJv dy1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1yaWdodC1j dXJseS1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICIjM2MzYzNjIikpKQorICAiRmFj ZSBmb3IgYCstZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1v ZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWxlZnQtdHJpYW5nbGUtZmFjZQorICAnKCh0ICg6Zm9y ZWdyb3VuZCAicmVkIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtdHJpYW5nbGUtZmFj ZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtdHJpYW5n bGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAieWVsbG93IikpKQorICAiRmFjZSBmb3IgYCst ZnJpbmdlLXJpZ2h0LXRyaWFuZ2xlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZm YWNlICstZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIm1h Z2VudGEiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUtZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlLWZh Y2UKKyAgJygodCAoOmZvcmVncm91bmQgIm9yYW5nZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5n ZS10b3AtcmlnaHQtYW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2Ug Ky1mcmluZ2UtYm90dG9tLWxlZnQtYW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFn ZW50YSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1ib3R0b20tbGVmdC1hbmdsZS1mYWNlJy4i CisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1ib3R0b20tcmlnaHQtYW5n bGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKKyAgIkZhY2UgZm9yIGAr LWZyaW5nZS1ib3R0b20tcmlnaHQtYW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKwor KGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQg InllbGxvdyIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1sZWZ0LWJyYWNrZXQtZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNl CisgICcoKHQgKDpmb3JlZ3JvdW5kICJncmVlbiIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1y aWdodC1icmFja2V0LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJp bmdlLWZpbGxlZC1yZWN0YW5nbGUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVz ZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UnLiIKKyAg Omdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWhvbGxvdy1zcXVhcmUtZmFjZQor ICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVzZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5n ZS1ob2xsb3ctc3F1YXJlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICst ZnJpbmdlLWZpbGxlZC1zcXVhcmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiY2hhcnRyZXVz ZSIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UnLiIKKyAgOmdy b3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWhvcml6b250YWwtYmFyLWZhY2UKKyAg JygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2Ut aG9yaXpvbnRhbC1iYXItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1m cmluZ2UtZW1wdHktbGluZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJEYXJrR3JlZW4iKSkp CisgICJGYWNlIGZvciBgKy1mcmluZ2UtZW1wdHktbGluZS1mYWNlJy4iCisgIDpncm91cCAnKy1t b2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1vbmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAi bWFnZW50YSIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy1vbmUtZmFjZScuIgorICA6Z3JvdXAg JystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtdHdvLWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgInJlZCIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy10d28tZmFjZScuIgorICA6Z3JvdXAg JystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtdGhyZWUtZmFjZQorICAnKCh0ICg6Zm9yZWdy b3VuZCAieWVsbG93IikpKQorICAiRmFjZSBmb3IgYCstcGFyZW5zLXRocmVlLWZhY2UnLiIKKyAg Omdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcGFyZW5zLWZvdXItZmFjZQorICAnKCh0ICg6 Zm9yZWdyb3VuZCAiZ3JlZW4iKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtZm91ci1mYWNlJy4i CisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1maXZlLWZhY2UKKyAgJygo dCAoOmZvcmVncm91bmQgImN5YW4iKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtZml2ZS1mYWNl Jy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1zaXgtZmFjZQorICAn KCh0ICg6Zm9yZWdyb3VuZCAib3JhbmdlIikpKQorICAiRmFjZSBmb3IgYCstcGFyZW5zLXNpeC1m YWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVucy1zZXZlbi1mYWNl CisgICcoKHQgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMt c2V2ZW4tZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtZWln aHQtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKKyAgIkZhY2UgZm9yIGArLXBh cmVucy1laWdodC1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXBhcmVu cy1uaW5lLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImJyb3duIikpKQorICAiRmFjZSBmb3Ig YCstcGFyZW5zLW5pbmUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1w YXJlbnMtdGVuLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIndoaXRlIikpKQorICAiRmFjZSBm b3IgYCstcGFyZW5zLXRlbi1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCis7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBWQVJJQUJMRVMKKworKGRlZnZhciArLW1vZGUpCisKKyhkZWZ2 YXIgKy1idWZmZXItZGlzcGxheS10YWJsZQorICAobGV0KiAoKGZmLWNoYXIgP1x1MDA0NikKKyAg ICAgICAgIChkaXNwbGF5LXRhYmxlIChtYWtlLWRpc3BsYXktdGFibGUpKQorICAgICAgICAgKGds eXBoLWZvcm0tZmVlZCAobWFrZS1nbHlwaC1jb2RlIGZmLWNoYXIgJystZm9ybS1mZWVkLWZhY2Up KQorICAgICAgICAgKGdseXBoLXBpbGNyb3cgKG1ha2UtZ2x5cGgtY29kZSA/XHUwMEI2ICcrLW5l d2xpbmUtZmFjZSkpCisgICAgICAgICAoZ2x5cGgtc3BhY2UgKG1ha2UtZ2x5cGgtY29kZSA/XHUw MEI3ICcrLXNwYWNlLWZhY2UpKQorICAgICAgICAgKGdseXBoLXRhYiAobWFrZS1nbHlwaC1jb2Rl ID9cdTAwQkIgJystdGFiLWZhY2UpKQorICAgICAgICAgKGdseXBoLXRhYi1zcGFjZXIgKG1ha2Ut Z2x5cGgtY29kZSA/XHQgJystdGFiLXNwYWNlci1mYWNlKSkpCisgICAgKGFzZXQgZGlzcGxheS10 YWJsZSA/XG4gYFssZ2x5cGgtcGlsY3JvdyA/XG5dKQorICAgIChhc2V0IGRpc3BsYXktdGFibGUg P1xmIGBbLGdseXBoLWZvcm0tZmVlZCAsZ2x5cGgtZm9ybS1mZWVkXSkKKyAgICA7OzsgbWluaW11 bSB0YWItd2lkdGggaXMgYDJgCisgICAgOzsgKGFzZXQgZGlzcGxheS10YWJsZSA/XHQgYFssZ2x5 cGgtdGFiID9cdF0pCisgICAgKGFzZXQgZGlzcGxheS10YWJsZSA/XHQgYFssZ2x5cGgtdGFiICxn bHlwaC10YWItc3BhY2VyXSkKKyAgICA7OzsgdGFiLXdpZHRoIGFsd2F5cyBlcXVhbHMgYDFgCisg ICAgOzsgKGFzZXQgZGlzcGxheS10YWJsZSA/XHQgYFssZ2x5cGgtdGFiXSkKKyAgICAoYXNldCBk aXNwbGF5LXRhYmxlID9ccyBgWyxnbHlwaC1zcGFjZV0pCisgICAgZGlzcGxheS10YWJsZSkKKyAg IlRoZSBgYnVmZmVyLWRpc3BsYXktdGFibGUnIHRoYXQgaXMgdXNlZCB3aGVuIGArLW1vZGUnIGlz IGFjdGl2ZS4iKQorCisoZGVmdmFyICstdGltZXItdmFyIG5pbAorIlRpbWVyIHVzZWQgdG8gaGln aGxpZ2h0IGN1cnJlbnQgY29sdW1uIHdoZW5ldmVyIEVtYWNzIGlzIGlkbGUuIikKKworKGRlZnZh ciArLWlkbGUtdGltZXItc2Vjb25kcyAwLjUKKyAgIlRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBk ZWxheSBiZWZvcmUgZHJhd2luZyBjcm9zc2hhaXJzIHdoZW4gdGhlIHZhcmlhYmxlCitgY3Jvc3No YWlycy1kcmF3LWZvcnRod2l0aCcgaGFzIGEgbmlsIHZhbHVlLiIpCisKKyhkZWZ2YXIgKy10cnVu Y2F0ZS1saW5lcy1tYWpvci1tb2RlcyAnKCkKKyAgIkxpc3Qgb2YgbWFqb3IgbW9kZXMgd2VyZSB0 cnVuY2F0ZSBsaW5lcyBzaGFsbCBiZSBlbmFibGVkLiIpCisKKyhkZWZ2YXIgKy10cnVuY2F0ZS1s aW5lcy1kZXJpdmVkLW1vZGVzICcocHJvZy1tb2RlKQorICAiTGlzdCBvZiBkZXJpdmVkIG1vZGVz IHdlcmUgdHJ1bmNhdGUgbGluZXMgc2hhbGwgYmUgZW5hYmxlZC4iKQorCisoZGVmdmFyICstLXNh dmVkLXN0YXRlIG5pbAorICAiVXNlZCB0byBzdG9yZS9yZXN0b3JlIGNlcnRhaW4gYnVmZmVyLWxv Y2FsIHZhcmlhYmxlcyB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZykKK2ArLW1vZGUnLiIpCisKKyhk ZWZ2YXIgKy1wYXJlbnMtaW5hY3RpdmUtd2luZG93cyB0CisgICJXaGVuIG5vbi1uaWwsIGRpc3Bs YXkgbWF0Y2hpbmcgcGFyZW50aGVzZXMgaW4gdGhlIGluYWN0aXZlIHdpbmRvdy4iKQorKG1ha2Ut dmFyaWFibGUtYnVmZmVyLWxvY2FsICcrLXBhcmVucy1pbmFjdGl2ZS13aW5kb3dzKQorCisoZGVm dmFyICstcGFyZW5zLWV4Y2x1c2lvbnMgJyhtd2hlZWwtc2Nyb2xsKQorICAiTGlzdCBvZiBmdW5j dGlvbnMgdGhhdCB3aWxsIHByZXZlbnQgbWF0Y2hpbmcgcGFyZW50aGVzZXMgZnJvbSB1cGRhdGlu Zy4iKQorCisoZGVmdmFyICstcGFyZW5zLWZyb20tZm4gbmlsCisgICJDdXN0b20gZnVuY3Rpb24g dG8gZGV0ZXJtaW5lIGhvdyBmYXIgYmFjayB0b3dhcmRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZp bGUKK3Nob3VsZCBgKy1wYXJlbnMtZm4nIHNlYXJjaCBmb3IgbWF0Y2hpbmcgcGFyZW50aGVzZXMg LS0gdGhlIHJlc3VsdCB0aHJvd24gZnJvbQordGhpcyBjdXN0b20gZnVuY3Rpb24gbXVzdCBiZSBh IGJ1ZmZlciBwb2ludC4gIElmIG5vIGN1c3RvbSBmdW5jdGlvbiBpcyBkZWZpbmVkLAordGhlbiBg Ky1wYXJlbnMtZm4nIHdpbGwgdXNlIGBwb2ludC1taW4nLiIpCisKKyhkZWZ2YXIgKy1wYXJlbnMt b3ZlcmxheXMtZXhpc3QtcCBuaWwKKyJTaW1wbGUgdGVzdCB0byBzZWUgd2hldGhlciB0aGUgcGFy ZW5zIG92ZXJsYXlzIGhhdmUgYmVlbiBwbGFjZWQuCitUaGlzIGNvdWxkIGJlIGEgZGlmZmVyZW50 IGtpbmQgb2YgdGVzdCAtLSBlLmcuLCBzY2FubmluZyBmb3IgdGhlCitwcmVzZW5jZSBvZiBzcGVj aWZpYyBvdmVybGF5cywgYnV0IHBlcmhhcHMgdGhhdCBpcyBvdmVya2lsbC4iKQorKG1ha2UtdmFy aWFibGUtYnVmZmVyLWxvY2FsICcrLXBhcmVucy1vdmVybGF5cy1leGlzdC1wKQorCis7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBGVU5DVElPTlMKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1 biBtYy10ZXN0ICgpCisiRHJhdyBmYWtlIGN1cnNvcnMgYXQgYWxsIFBPUyBkZWZpbmVkIGluIHRo ZSBgbXVsdGlwbGUtY3Vyc29ycy1jb25mJy4gIE11bHRpcGxlIGZha2UgY3Vyc29ycworYXJlIHN1 cHBvcnRlZCBieSBHVUkgdmVyc2lvbnMgb2YgRW1hY3MgYnVpbHQgZm9yIFgsIFdpbmRvd3MgYW5k IE9TWC4KK1BvcHVsYXIgZm9ybXMgb2Ygc3BlY2lmeWluZyBjb2xvcnMgc3VjaCBhcyBcInJlZFwi IGFuZCBcIiNGRjAwMDBcIiBhcmUgbm93CitzdXBwb3J0ZWQsIGFzIHdlbGwgYXMgTFNMIGNvbG9y IHZlY3RvcnMgc3VjaCBhcyBbMS4wIDAuMCAwLjBdLiAgRm9yIHRob3NlIHVzZXJzCit3aG8gY2hv b3NlIHRoZSBmb3JtZXIgZmFtaWxpYXIgbWV0aG9kcyBvZiBzcGVjaWZ5aW5nIGNvbG9ycyB3aXRo IHN0cmluZ3MsCitgbWNfY29sb3JfdmVjdG9yX2NhbGN1bGF0ZScgd2lsbCBjb252ZXJ0IHRob3Nl IHN0cmluZ3MgdG8gTFNMIGNvbG9yIHZlY3RvcnMuCitUaGUgY29sb3IgdmVjdG9ycyBhcmUgY29t bW9ubHkgcmVmZXJyZWQgdG8gYXMgTFNMIChUaGUgTGluZGVuIFNjcmlwdGluZyBMYW5ndWFnZSku CitgbnN0ZXJtLm0nIHVzZXMgYE5TQ29sb3InLCB3aGljaCB3b3JrcyB3ZWxsIHdpdGggTFNMLiAg YHczMnRlcm0uYycgdXNlcworYFBBTEVUVEVSR0InIG9yIGBSR0InLCBhbmQgdGhlIGNvbnZlcnNp b24gZnJvbSBMU0wgaXMgZG9uZSBpbnRlcm5hbGx5IGJ5CittdWx0aXBseWluZyBlYWNoIGVsZW1l bnQgb2YgdGhlIExTTCBjb2xvciB2ZWN0b3IgYnkgMjU1LiAgYHh0ZXJtLmMnIHVzZXMKK2B4X21h a2VfdHJ1ZWNvbG9yX3BpeGVsJywgd2hpY2ggdXNlcyAxNi1iaXQgUkdCIC0tIHRoZSBjb252ZXJz aW9uIGZyb20gTFNMCitoYXBwZW5zIGludGVybmFsbHkgYnkgbXVsdGlwbHlpbmcgZWFjaCBlbGVt ZW50IG9mIHRoZSBMU0wgY29sb3IgdmVjdG9yIGJ5IDY1NTM1LiIKKyhpbnRlcmFjdGl2ZSkKKyAg KGxldCAoKGJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipNQy1URVNUKiIpKSkKKyAgICAod2l0 aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKyAgICAgIChlcmFzZS1idWZmZXIpCisgICAgICAoaW5z ZXJ0ICJUaGlzIGlzIGEgdGVzdCEiKQorICAgICAgKHNldHEgbXVsdGlwbGUtY3Vyc29ycy1jb25m ICcoKDEgImhiYXIiICJtYWdlbnRhIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgyICJiYXIiICJwdXJwbGUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDMgImJveCIgIiMwMEZGMDAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDQgImhvbGxvdyIgIiMwMDAwRkYiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDUgKCJoYmFyIiAzKSBbMS4wIDAuMCAxLjBdKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDYgKCJiYXIiIDMpIFswLjAgMS4wIDEuMF0pKSkpCisgICAgKHNlbGVj dC13aW5kb3cgKGRpc3BsYXktYnVmZmVyIGJ1ZmZlcikpCisgICAgOzs7IFRoZSB0cmlnZ2VyIGlu IGBrZXlib2FyZC5jYCBpcyBub3QgYWN0aXZhdGVkIGluIHRoaXMgZXhhbXBsZSwgc28gd2UKKyAg ICA7OzsgZm9yY2UgdGhlIG11bHRpcGxlIGN1cnNvcnMgdG8gYmUgZHJhd24uCisgICAgKG1jLWFj dGl2YXRlLW11bHRpcGxlLWN1cnNvcnMgKHNlbGVjdGVkLXdpbmRvdykpKSkKKworKGRlZnVuICst dGltZXItZm4gKCkKKyJTaW5jZSB0aGlzIGZpcmVzIGdsb2JhbGx5LCB3ZSBtdXN0IGNvbnRyb2wg d2hpY2ggYnVmZmVycyBjcm9zc2hhaXJzIGFwcGVhciBpbi4iCisgICh3aGVuICstbW9kZQorICAg ICh1bmxlc3MgKG1lbXEgbGFzdC1jb21tYW5kICstcGFyZW5zLWV4Y2x1c2lvbnMpCisgICAgICAo Ky1wYXJlbnMtZm4pKQorICAgICh3aGVuICstdGltZXItdmFyCisgICAgICAoc2V0cSB0aW1lci1p ZGxlLWxpc3QgKGRlbHEgKy10aW1lci12YXIgdGltZXItaWRsZS1saXN0KSkKKyAgICAgIChzZXRx ICstdGltZXItdmFyIG5pbCkpCisgICAgKHVubGVzcyBjcm9zc2hhaXJzLWRyYXctZm9ydGh3aXRo CisgICAgICAobWMtYWN0aXZhdGUtY3Jvc3NoYWlycyAoc2VsZWN0ZWQtd2luZG93KSkpKSkKKwor KGRlZnVuICstZHJhdy1mb3J0aHdpdGggKCkKKyAgIkZvcmNlIGJvdGggcnVsZXJzIHRvIGJlIGRy YXduL3JlZHJhd24uIgorICAoKy1kcmF3LWNyb3NzaGFpcnMgJ2ZvcmNlKSkKKworKGRlZnVuICst ZHJhdy1jcm9zc2hhaXJzICgmb3B0aW9uYWwgZm9yY2UpCisgICh3aGVuICstbW9kZQorICAgICh3 aGVuICstdGltZXItdmFyCisgICAgICAoc2V0cSB0aW1lci1pZGxlLWxpc3QgKGRlbHEgKy10aW1l ci12YXIgdGltZXItaWRsZS1saXN0KSkKKyAgICAgIChzZXRxICstdGltZXItdmFyIG5pbCkpCisg ICAgKHVubGVzcyAobWVtcSB0aGlzLWNvbW1hbmQgKy1wYXJlbnMtZXhjbHVzaW9ucykKKyAgICAg ICgrLWRlbGV0ZS1wYXJlbnMtb3ZlcmxheXMpKQorICAgIChpZiBmb3JjZQorICAgICAgKHByb2du CisgICAgICAgICgrLXBhcmVucy1mbikKKyAgICAgICAgKHVubGVzcyBjcm9zc2hhaXJzLWRyYXct Zm9ydGh3aXRoCisgICAgICAgICAgKG1jLWFjdGl2YXRlLWNyb3NzaGFpcnMgKHNlbGVjdGVkLXdp bmRvdykpKSkKKyAgICAgIChzZXRxICstdGltZXItdmFyIChydW4td2l0aC1pZGxlLXRpbWVyICst aWRsZS10aW1lci1zZWNvbmRzIG5pbCAjJystdGltZXItZm4pKSkpKQorCis7OzsjIyNhdXRvbG9h ZAorKGRlZmluZS1taW5vci1tb2RlICstbW9kZQorIk1pbm9yIG1vZGUgZm9yIGRpc3BsYXlpbmcg YSBob3Jpem9udGFsIHJ1bGVyLiIKKyAgOmluaXQtdmFsdWUgbmlsCisgIDpsaWdodGVyICIgKyIK KyAgOmtleW1hcCBuaWwKKyAgOmdsb2JhbCBuaWwKKyAgOmdyb3VwICcrLW1vZGUKKyAgKGNvbmQK KyAgICAoKy1tb2RlCisgICAgICAod2hlbiAoYW5kIGdsb2JhbC1lbGRvYy1tb2RlCisgICAgICAg ICAgICAgICAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAgICAgICAg IChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgIChnbG9iYWwtZWxkb2Mt bW9kZSAtMSkpCisgICAgICAod2hlbiAoYW5kIGppdC1sb2NrLWNvbnRleHQtdGltZXIKKyAgICAg ICAgICAgICAgICAgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgICAgICAg ICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAgKHdoZW4gKHRpbWVy cCBqaXQtbG9jay1jb250ZXh0LXRpbWVyKQorICAgICAgICAgIChjYW5jZWwtdGltZXIgaml0LWxv Y2stY29udGV4dC10aW1lcikpCisgICAgICAgIDs7IChzZXRxIGppdC1sb2NrLWNvbnRleHQtdGlt ZXIgKHJ1bi13aXRoLWlkbGUtdGltZXIgNS4wICdyZXBlYXQgJ2ppdC1sb2NrLWNvbnRleHQtZm9u dGlmeSkpCisgICAgICAgIChzZXRxIGppdC1sb2NrLWNvbnRleHQtdGltZXIgbmlsKSkKKyAgICAg ICh3aGVuIChhbmQgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgICAgICAg ICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAgKHdoZW4gKHRpbWVy cCB1bmRvLWF1dG8tY3VycmVudC1ib3VuZGFyeS10aW1lcikKKyAgICAgICAgICAoY2FuY2VsLXRp bWVyIHVuZG8tYXV0by1jdXJyZW50LWJvdW5kYXJ5LXRpbWVyKSkKKyAgICAgICAgKGZzZXQgJ3Vu ZG8tYXV0by0tdW5kb2FibGUtY2hhbmdlCisgICAgICAgICAgICAgIChsYW1iZGEgKCkgKGFkZC10 by1saXN0ICd1bmRvLWF1dG8tLXVuZG9hYmx5LWNoYW5nZWQtYnVmZmVycyAoY3VycmVudC1idWZm ZXIpKSkpCisgICAgICAgIChmc2V0ICd1bmRvLWF1dG8tYW1hbGdhbWF0ZSAnaWdub3JlKSkKKyAg ICAgICh3aGVuIGJsaW5rLWN1cnNvci1tb2RlCisgICAgICAgIChibGluay1jdXJzb3ItbW9kZSAt MSkKKyAgICAgICAgKHdoZW4gKG1lbXEgJ2JsaW5rLWN1cnNvci1jaGVjayBwb3N0LWNvbW1hbmQt aG9vaykKKyAgICAgICAgICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdibGluay1j dXJzb3ItY2hlY2spKSkKKyAgICAgICh3aGVuIChhbmQgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAg J2FueSkKKyAgICAgICAgICAgICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKQor ICAgICAgICAgICAgICAgICAobnVsbCBjcm9zc2hhaXJzLWRyYXctZm9ydGh3aXRoKSkKKyAgICAg ICAgKHNldHEgY3Jvc3NoYWlycy1kcmF3LWZvcnRod2l0aCB0KSkKKyAgICAgIChzZXRxIGNyb3Nz aGFpcnMgdCkKKyAgICAgIDs7OyBgYXV0by1jb21wb3NpdGlvbi1tb2RlJyBpcyBuZWVkZWQgZm9y IGNyb3NzaGFpcnMgdG8gcHJvcGVybHkgY2FsY3VsYXRlCisgICAgICA7OzsgY29vcmRpbmF0ZXMg b2YgY29tcG9zaXRpb24gY2hhcmFjdGVycy4gIEF1dG9tYXRpY2FsbHkgYmVjb21lcyBwZXJtYW5l bnRseQorICAgICAgOzs7IGJ1ZmZlci1sb2NhbCB3aGVuIHNldC4KKyAgICAgICh1bmxlc3MgYXV0 by1jb21wb3NpdGlvbi1tb2RlCisgICAgICAgIChzZXRxIGF1dG8tY29tcG9zaXRpb24tbW9kZSB0 KSkKKyAgICAgIDs7OyBAbGF3bGlzdCBpcyBmb2N1c2luZyB0aGUgaW5pdGlhbCBkZXZlbG9wbWVu dCBvZiBmZWF0dXJlIHJlcXVlc3RzICMxNzY4NAorICAgICAgOzs7IGFuZCAjMjI4NzMgb24gTDJS IGxhbmd1YWdlcy4gIFRoZSBmZWF0dXJlIHRlc3QgZmlsZSB1c2VkIGJ5IEBsYXdsaXN0CisgICAg ICA7OzsgYm9ncyBFbWFjcyBkb3duIHVubGVzcyBgYmlkaS1kaXNwbGF5LXJlb3JkZXJpbmcnIGlz IHNldCB0byBhIG5pbCB2YWx1ZS4KKyAgICAgIDs7OyBIb3dldmVyLCBtb3N0IHVzZXJzIHdpbGwg cHJvYmFibHkgbm90IHdhbnQgdGhpcyBwYXJ0aWN1bGFyIHNldHRpbmcuCisgICAgICAodW5sZXNz IChudWxsIGJpZGktZGlzcGxheS1yZW9yZGVyaW5nKQorICAgICAgICAoc2V0cSBiaWRpLWRpc3Bs YXktcmVvcmRlcmluZyBuaWwpKQorICAgICAgKHVubGVzcyAoYW5kIChjYWxsZWQtaW50ZXJhY3Rp dmVseS1wICdhbnkpCisgICAgICAgICAgICAgICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFy ZyAnKDQpKSkKKyAgICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnKy0tc2F2ZWQtc3Rh dGUpIG5pbCkKKyAgICAgICAgKGRvbGlzdCAodmFyICcoYnVmZmVyLWRpc3BsYXktdGFibGUKKyAg ICAgICAgICAgICAgICAgICAgICAgZnJpbmdlLWluZGljYXRvci1hbGlzdAorICAgICAgICAgICAg ICAgICAgICAgICB0YWItd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgbGluZS1tb3ZlLXZp c3VhbAorICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZS1saW5lcworICAgICAgICAgICAg ICAgICAgICAgICB0cnVuY2F0ZS1wYXJ0aWFsLXdpZHRoLXdpbmRvd3MKKyAgICAgICAgICAgICAg ICAgICAgICAgd29yZC13cmFwKSkKKyAgICAgICAgICAod2hlbiAobG9jYWwtdmFyaWFibGUtcCB2 YXIpCisgICAgICAgICAgICAocHVzaCAoY29ucyB2YXIgKHN5bWJvbC12YWx1ZSB2YXIpKSArLS1z YXZlZC1zdGF0ZSkpKQorICAgICAgICAoc2V0cSBmaWxsLWNvbHVtbiA4MCkKKyAgICAgICAgKHNl dHEgZGlzcGxheS1saW5lLW51bWJlcnMgdCkKKyAgICAgICAgKHNldHEtbG9jYWwgYXV0by1oc2Ny b2xsLW1vZGUgJ2N1cnJlbnQtbGluZSkKKyAgICAgICAgKHNldHEtbG9jYWwgaHNjcm9sbC1zdGVw IDUpCisgICAgICAgIChzZXRxIGJ1ZmZlci1kaXNwbGF5LXRhYmxlICstYnVmZmVyLWRpc3BsYXkt dGFibGUpCisgICAgICAgIChzZXRxIHRhYi13aWR0aCA0KQorICAgICAgICAoc2V0IChtYWtlLWxv Y2FsLXZhcmlhYmxlICdsaW5lLW1vdmUtdmlzdWFsKSB0KQorICAgICAgICAoc2V0cSB0cnVuY2F0 ZS1saW5lcworICAgICAgICAgIChjb25kCisgICAgICAgICAgICAoKGxldCAoKGxzdCArLXRydW5j YXRlLWxpbmVzLWRlcml2ZWQtbW9kZXMpCisgICAgICAgICAgICAgICAgICAgIG1vZGUpCisgICAg ICAgICAgICAgIChjYXRjaCAnZm91bmQKKyAgICAgICAgICAgICAgICAod2hpbGUgKHNldHEgbW9k ZSAocG9wIGxzdCkpCisgICAgICAgICAgICAgICAgICAod2hlbiAoZGVyaXZlZC1tb2RlLXAgbW9k ZSkKKyAgICAgICAgICAgICAgICAgICAgKHRocm93ICdmb3VuZCB0KSkpKSkpCisgICAgICAgICAg ICAgKChtZW1xIG1ham9yLW1vZGUgKy10cnVuY2F0ZS1saW5lcy1tYWpvci1tb2RlcykpCisgICAg ICAgICAgICAgKHQKKyAgICAgICAgICAgICAgIG5pbCkpKQorICAgICAgICAoc2V0IChtYWtlLWxv Y2FsLXZhcmlhYmxlICd0cnVuY2F0ZS1wYXJ0aWFsLXdpZHRoLXdpbmRvd3MpIG5pbCkKKyAgICAg ICAgKHNldHEgd29yZC13cmFwIHQpCisgICAgICAgIChzZXRxIGluZGljYXRlLWVtcHR5LWxpbmVz IHQpCisgICAgICAgIChzZXRxIGluZGljYXRlLWJ1ZmZlci1ib3VuZGFyaWVzICdsZWZ0KQorICAg ICAgICAoc2V0cSBmcmluZ2UtaW5kaWNhdG9yLWFsaXN0CisgICAgICAgICAgJygoaHNjbF90ZW1w b3JhcnkgLiArLWZyaW5nZS1sZWZ0LWFycm93KQorICAgICAgICAgICAgKHRydW5jYXRpb24gLiAo Ky1mcmluZ2UtbGVmdC1hcnJvdyArLWZyaW5nZS1yaWdodC1hcnJvdykpCisgICAgICAgICAgICAo Y29udGludWF0aW9uIC4gKCstZnJpbmdlLWxlZnQtY3VybHktYXJyb3cgKy1iYWNrc2xhc2gpKQor ICAgICAgICAgICAgKG92ZXJsYXktYXJyb3cgLiArLWZyaW5nZS1yaWdodC1hcnJvdykKKyAgICAg ICAgICAgICh1cCAuICstZnJpbmdlLXVwLWFycm93KQorICAgICAgICAgICAgKGRvd24gLiArLWZy aW5nZS1kb3duLWFycm93KQorICAgICAgICAgICAgKHRvcCAuICstZnJpbmdlLXRvcC1sZWZ0LWFu Z2xlKQorICAgICAgICAgICAgKGJvdHRvbSAuICstZnJpbmdlLWJvdHRvbS1yaWdodC1hbmdsZSkK KyAgICAgICAgICAgICh0b3AtYm90dG9tIC4gKCstZnJpbmdlLWxlZnQtYnJhY2tldAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKy1mcmluZ2UtcmlnaHQtYnJhY2tldAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICArLWZyaW5nZS10b3AtbGVmdC1hbmdsZSkpCisgICAgICAgICAgICAoZW1wdHkt bGluZSAuICstZnJpbmdlLWVtcHR5LWxpbmUpCisgICAgICAgICAgICAodW5rbm93biAuICstZnJp bmdlLXF1ZXN0aW9uLW1hcmspKSkKKyAgICAgICAgKHNldHEgZnJpbmdlLWN1cnNvci1hbGlzdCAn KChib3ggLiArLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGhvbGxvdyAuICstaG9sbG93LXJlY3RhbmdsZSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChiYXIgLiArLXZlcnRpY2FsLWJhcikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChoYmFyIC4gKy1mcmluZ2UtaG9yaXpvbnRhbC1iYXIp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaG9sbG93LXNtYWxsIC4gKy1m cmluZ2UtaG9sbG93LXNxdWFyZSkpKQorICAgICAgICAoaWYgY3Jvc3NoYWlycy1kcmF3LWZvcnRo d2l0aAorICAgICAgICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJystZHJhdy1mb3J0 aHdpdGggJ2FwcGVuZCAnbG9jYWwpCisgICAgICAgICAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQt aG9vayAnKy1kcmF3LWNyb3NzaGFpcnMgJ2FwcGVuZCAnbG9jYWwpKQorICAgICAgICAod2hlbiBj cm9zc2hhaXJzLWRyYXctZm9ydGh3aXRoCisgICAgICAgICAgKGFkZC1ob29rICd3aW5kb3ctY29u ZmlndXJhdGlvbi1jaGFuZ2UtaG9vayAnKy1kcmF3LWZvcnRod2l0aCBuaWwgJ2xvY2FsKSkKKyAg ICAgICAgKGFkZC1ob29rICdjaGFuZ2UtbWFqb3ItbW9kZS1ob29rICd0dXJuLW9mZi0rLW1vZGUg bmlsICdsb2NhbCkpCisgICAgICAod2hlbiAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQor ICAgICAgICAoaWYgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKQorICAgICAgICAgICht ZXNzYWdlICJUdXJuZWQgT04gYCstbW9kZScgLS0gZGVidWdnaW5nIG1vZGUuIikKKyAgICAgICAg ICAobWVzc2FnZSAiVHVybmVkIE9OIGArLW1vZGUnLiIpKSkpCisgICAgKHQKKyAgICAgIChraWxs LWxvY2FsLXZhcmlhYmxlICdmaWxsLWNvbHVtbikKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxl ICdhdXRvLWhzY3JvbGwtbW9kZSkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdoc2Nyb2xs LXN0ZXApCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnY3Jvc3NoYWlycykKKyAgICAgIChr aWxsLWxvY2FsLXZhcmlhYmxlICdkaXNwbGF5LWxpbmUtbnVtYmVycykKKyAgICAgIChraWxsLWxv Y2FsLXZhcmlhYmxlICdkaXNwbGF5LWxpbmUtbnVtYmVycy13aWR0aCkKKyAgICAgIChraWxsLWxv Y2FsLXZhcmlhYmxlICdtdWx0aXBsZS1jdXJzb3JzLWNvbmYpCisgICAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAnYnVmZmVyLWRpc3BsYXktdGFibGUpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJs ZSAndGFiLXdpZHRoKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2xpbmUtbW92ZS12aXN1 YWwpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAndHJ1bmNhdGUtbGluZXMpCisgICAgICAo a2lsbC1sb2NhbC12YXJpYWJsZSAndHJ1bmNhdGUtcGFydGlhbC13aWR0aC13aW5kb3dzKQorICAg ICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3dvcmQtd3JhcCkKKyAgICAgIChraWxsLWxvY2FsLXZh cmlhYmxlICdpbmRpY2F0ZS1lbXB0eS1saW5lcykKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxl ICdpbmRpY2F0ZS1idWZmZXItYm91bmRhcmllcykKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxl ICdmcmluZ2UtaW5kaWNhdG9yLWFsaXN0KQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2Zy aW5nZS1jdXJzb3ItYWxpc3QpCisgICAgICAoZG9saXN0IChzYXZlZCArLS1zYXZlZC1zdGF0ZSkK KyAgICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAoY2FyIHNhdmVkKSkgKGNkciBzYXZl ZCkpKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJystLXNhdmVkLXN0YXRlKQorICAgICAg KCstZGVsZXRlLXBhcmVucy1vdmVybGF5cykKKyAgICAgICh3aGVuIChtZW1xICcrLWRyYXctZm9y dGh3aXRoIHBvc3QtY29tbWFuZC1ob29rKQorICAgICAgICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29t bWFuZC1ob29rICcrLWRyYXctZm9ydGh3aXRoICdsb2NhbCkpCisgICAgICAod2hlbiAobWVtcSAn Ky1kcmF3LWNyb3NzaGFpcnMgcG9zdC1jb21tYW5kLWhvb2spCisgICAgICAgIChyZW1vdmUtaG9v ayAncG9zdC1jb21tYW5kLWhvb2sgJystZHJhdy1jcm9zc2hhaXJzICdsb2NhbCkpCisgICAgICAo d2hlbiAobWVtcSAnKy1kcmF3LWZvcnRod2l0aCB3aW5kb3ctY29uZmlndXJhdGlvbi1jaGFuZ2Ut aG9vaykKKyAgICAgICAgKHJlbW92ZS1ob29rICd3aW5kb3ctY29uZmlndXJhdGlvbi1jaGFuZ2Ut aG9vayAnKy1kcmF3LWZvcnRod2l0aCAnbG9jYWwpKQorICAgICAgKHJlbW92ZS1ob29rICdjaGFu Z2UtbWFqb3ItbW9kZS1ob29rICd0dXJuLW9mZi0rLW1vZGUgJ2xvY2FsKQorICAgICAgKHdoZW4g Ky10aW1lci12YXIKKyAgICAgICAgKHNldHEgdGltZXItaWRsZS1saXN0IChkZWxxICstdGltZXIt dmFyIHRpbWVyLWlkbGUtbGlzdCkpCisgICAgICAgIChzZXRxICstdGltZXItdmFyIG5pbCkpCisg ICAgICAod2hlbiAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAobWVzc2Fn ZSAiVHVybmVkIE9GRiBgKy1tb2RlJy4iKSkpKSkKKworKGRlZnVuIHR1cm4tb2ZmLSstbW9kZSAo KQorICAoKy1tb2RlIC0xKSkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CisKKyhkZWZ1biAr LXBhcmVucy1mbiAoKQorICAiRG9jLXN0cmluZy4iCisgIChsZXQqICgob3BvaW50IChwb2ludCkp CisgICAgICAgICAoZnJvbSAoaWYgKy1wYXJlbnMtZnJvbS1mbgorICAgICAgICAgICAgICAgICAo ZnVuY2FsbCArLXBhcmVucy1mcm9tLWZuKQorICAgICAgICAgICAgICAgICAocG9pbnQtbWluKSkp CisgICAgICAgICAod2luIChzZWxlY3RlZC13aW5kb3cpKQorICAgICAgICAgKGkgMCkKKyAgICAg ICAgIChwcmVjZWRpbmctY2hhciAocHJlY2VkaW5nLWNoYXIpKQorICAgICAgICAgKG9jaGFyIChj aGFyLWFmdGVyIG9wb2ludCkpCisgICAgICAgICAocG9zMQorICAgICAgICAgICAoY29uZAorICAg ICAgICAgICAgICgoYW5kIG9jaGFyCisgICAgICAgICAgICAgICAgICAgKG9yIDs7OyAoY2hhci10 by1zdHJpbmcgNDApID0+IG9wZW5pbmcgcGFyZW50aGVzaXMKKyAgICAgICAgICAgICAgICAgICAg ICAgKD0gb2NoYXIgNDApCisgICAgICAgICAgICAgICAgICAgICAgIDs7OyAoY2hhci10by1zdHJp bmcgOTEpID0+IG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAg KD0gb2NoYXIgOTEpCisgICAgICAgICAgICAgICAgICAgICAgIDs7OyAoY2hhci10by1zdHJpbmcg MTIzKSA9PiBvcGVuaW5nIHdhdnkgYnJhY2tldAorICAgICAgICAgICAgICAgICAgICAgICAoPSBv Y2hhciAxMjMpKSkKKyAgICAgICAgICAgICAgICAobWluICgxKyBvcG9pbnQpIChwb2ludC1tYXgp KSkKKyAgICAgICAgICAgICAoKG9yIDs7OyAoY2hhci10by1zdHJpbmcgNDEpID0+IGNsb3Npbmcg cGFyZW50aGVzaXMKKyAgICAgICAgICAgICAgICAgICg9IHByZWNlZGluZy1jaGFyIDQxKQorICAg ICAgICAgICAgICAgICAgOzs7IChjaGFyLXRvLXN0cmluZyA5MykgPT4gY2xvc2luZyBzcXVhcmUg YnJhY2tldAorICAgICAgICAgICAgICAgICAgKD0gcHJlY2VkaW5nLWNoYXIgOTMpCisgICAgICAg ICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDEyNSkgPT4gY2xvc2luZyB3YXZ5IGJyYWNr ZXQKKyAgICAgICAgICAgICAgICAgICg9IHByZWNlZGluZy1jaGFyIDEyNSkpCisgICAgICAgICAg ICAgICAgKG1heCAocG9pbnQtbWluKSAoMS0gb3BvaW50KSkpCisgICAgICAgICAgICAgKHQKKyAg ICAgICAgICAgICAgICBvcG9pbnQpKSkKKyAgICAgICAgIHBvczIKKyAgICAgICAgIHNlbGVjdGVk LWZhY2UpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsCisg ICAgICAgICh3aGlsZSAoc2V0cSBwb3MxIChudGggMSAocGFyc2UtcGFydGlhbC1zZXhwIGZyb20g cG9zMSkpKQorICAgICAgICAgIChzZXRxIHBvczIgKHNjYW4tc2V4cHMgcG9zMSAxKSkKKyAgICAg ICAgICAoaWYgKD0gaSAxMCkKKyAgICAgICAgICAgIChzZXRxIGkgMSkKKyAgICAgICAgICAgIChz ZXRxIGkgKDErIGkpKSkKKyAgICAgICAgICAoc2V0cSBzZWxlY3RlZC1mYWNlIChjb25kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDEpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJystcGFyZW5zLW9uZS1mYWNlKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKD0gaSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcr LXBhcmVucy10d28tZmFjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkg MykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtdGhyZWUtZmFj ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgNCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtZm91ci1mYWNlKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKD0gaSA1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICcrLXBhcmVucy1maXZlLWZhY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgoPSBpIDYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5z LXNpeC1mYWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSA3KQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy1zZXZlbi1mYWNlKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSA4KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICcrLXBhcmVucy1laWdodC1mYWNlKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKD0gaSA5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICcrLXBhcmVucy1uaW5lLWZhY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo PSBpIDEwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy10ZW4t ZmFjZSkpKQorICAgICAgICAgIChsZXQgKChvdiAobWFrZS1vdmVybGF5IHBvczEgKDErIHBvczEp KSkpCisgICAgICAgICAgICAodW5sZXNzICstcGFyZW5zLWluYWN0aXZlLXdpbmRvd3MKKyAgICAg ICAgICAgICAgKG92ZXJsYXktcHV0IG92ICd3aW5kb3cgd2luKSkKKyAgICAgICAgICAgIChvdmVy bGF5LXB1dCBvdiAnZmFjZSBzZWxlY3RlZC1mYWNlKSkKKyAgICAgICAgICAod2hlbiBwb3MyCisg ICAgICAgICAgICAobGV0ICgob3YgKG1ha2Utb3ZlcmxheSAoMS0gcG9zMikgcG9zMikpKQorICAg ICAgICAgICAgICAodW5sZXNzICstcGFyZW5zLWluYWN0aXZlLXdpbmRvd3MKKyAgICAgICAgICAg ICAgICAob3ZlcmxheS1wdXQgb3YgJ3dpbmRvdyB3aW4pKQorICAgICAgICAgICAgICAob3Zlcmxh eS1wdXQgb3YgJ2ZhY2Ugc2VsZWN0ZWQtZmFjZSkpKSkKKyAgICAgICAgKGVycm9yIG5pbCkpKQor ICAgIChzZXRxICstcGFyZW5zLW92ZXJsYXlzLWV4aXN0LXAgdCkpKQorCisoZGVmdW4gKy1yZW1v dmUtb3ZlcmxheXMgKGJlZyBlbmQgbmFtZSB2YWwpCisiUmVtb3ZlIHRoZSBvdmVybGF5cyB0aGF0 IGFyZSBgZXF1YWwtaW5jbHVkaW5nLXByb3BlcnRpZXNgLgorSW5jbHVkZXMgYSB1bmlxdWUgc2l0 dWF0aW9uIHdoZW4gYW4gb3ZlcmxheSB3aXRoIGFuIGAnYWZ0ZXItc3RyaW5nYCBwcm9wZXJ0eQor aXMgYXQgdGhlIHZlcnkgZW5kIG9mIGEgbmFycm93ZWQtYnVmZmVyLiIKKyAgKGxldCogKChwb2lu dC1tYXggKHBvaW50LW1heCkpCisgICAgICAgICAocG9pbnQtbWluIChwb2ludC1taW4pKQorICAg ICAgICAgKG5hcnJvd2VkLXAgKGJ1ZmZlci1uYXJyb3dlZC1wKSkKKyAgICAgICAgIChiZWcgKGlm IGJlZyBiZWcgcG9pbnQtbWluKSkKKyAgICAgICAgIChlbmQKKyAgICAgICAgICAgKGNvbmQKKyAg ICAgICAgICAgICAoKGFuZAorICAgICAgICAgICAgICAgICAobm90IG5hcnJvd2VkLXApCisgICAg ICAgICAgICAgICAgIGVuZCkKKyAgICAgICAgICAgICAgIGVuZCkKKyAgICAgICAgICAgICAoKGFu ZAorICAgICAgICAgICAgICAgICAobm90IG5hcnJvd2VkLXApCisgICAgICAgICAgICAgICAgIChu dWxsIGVuZCkpCisgICAgICAgICAgICAgICBwb2ludC1tYXgpCisgICAgICAgICAgICAgKChhbmQK KyAgICAgICAgICAgICAgICAgbmFycm93ZWQtcAorICAgICAgICAgICAgICAgICBlbmQKKyAgICAg ICAgICAgICAgICAgKDwgZW5kIHBvaW50LW1heCkpCisgICAgICAgICAgICAgICBlbmQpCisgICAg ICAgICAgICAgKChhbmQKKyAgICAgICAgICAgICAgICAgbmFycm93ZWQtcAorICAgICAgICAgICAg ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgKD0gZW5kIHBvaW50LW1heCkpCisgICAgICAgICAg ICAgICAoMSsgZW5kKSkKKyAgICAgICAgICAgICAoKGFuZAorICAgICAgICAgICAgICAgICBuYXJy b3dlZC1wCisgICAgICAgICAgICAgICAgIChudWxsIGVuZCkpCisgICAgICAgICAgICAgICAoMSsg cG9pbnQtbWF4KSkgKSkKKyAgICAgICAgIChvdmVybGF5cworICAgICAgICAgICAocHJvZ24KKyAg ICAgICAgICAgICAob3ZlcmxheS1yZWNlbnRlciBlbmQpCisgICAgICAgICAgICAgKG92ZXJsYXlz LWluIGJlZyBlbmQpKSkpCisgICAgKHdoZW4gKGFuZCBiZWcgZW5kIG5hbWUgdmFsKQorICAgICAg KGRvbGlzdCAobyBvdmVybGF5cykKKyAgICAgICAgKGNvbmQKKyAgICAgICAgICAoKGFuZCAoZXEg bmFtZSAnZmFjZSkKKyAgICAgICAgICAgICAgICAoZXEgKG92ZXJsYXktZ2V0IG8gbmFtZSkgdmFs KSkKKyAgICAgICAgICAgIDs7IEVpdGhlciBwdXNoIHRoaXMgb3ZlcmxheSBvdXRzaWRlIGJlZy4u LmVuZAorICAgICAgICAgICAgOzsgb3Igc3BsaXQgaXQgdG8gZXhjbHVkZSBiZWcuLi5lbmQKKyAg ICAgICAgICAgIDs7IG9yIGRlbGV0ZSBpdCBlbnRpcmVseSAoaWYgaXQgaXMgY29udGFpbmVkIGlu IGJlZy4uLmVuZCkuCisgICAgICAgICAgICAoaWYgKDwgKG92ZXJsYXktc3RhcnQgbykgYmVnKQor ICAgICAgICAgICAgICAgIChpZiAoPiAob3ZlcmxheS1lbmQgbykgZW5kKQorICAgICAgICAgICAg ICAocHJvZ24KKyAgICAgICAgICAgICAgICAobW92ZS1vdmVybGF5IChjb3B5LW92ZXJsYXkgbykK KyAgICAgICAgICAgICAgICAgIChvdmVybGF5LXN0YXJ0IG8pIGJlZykKKyAgICAgICAgICAgICAg ICAobW92ZS1vdmVybGF5IG8gZW5kIChvdmVybGF5LWVuZCBvKSkpCisgICAgICAgICAgICAgICAg ICAobW92ZS1vdmVybGF5IG8gKG92ZXJsYXktc3RhcnQgbykgYmVnKSkKKyAgICAgICAgICAgICAg KGlmICg+IChvdmVybGF5LWVuZCBvKSBlbmQpCisgICAgICAgICAgICAgICAgICAobW92ZS1vdmVy bGF5IG8gZW5kIChvdmVybGF5LWVuZCBvKSkKKyAgICAgICAgICAgICAgICAoZGVsZXRlLW92ZXJs YXkgbykpKSkKKyAgICAgICAgICAoKGFuZCAobm90IChlcSBuYW1lICdmYWNlKSkKKyAgICAgICAg ICAgICAgICAoZXF1YWwtaW5jbHVkaW5nLXByb3BlcnRpZXMgKG92ZXJsYXktZ2V0IG8gbmFtZSkg dmFsKSkKKyAgICAgICAgICAgIChkZWxldGUtb3ZlcmxheSBvKSkpKSkpKQorCisoZGVmdW4gKy1k ZWxldGUtcGFyZW5zLW92ZXJsYXlzICgpCisgICh3aGVuICstcGFyZW5zLW92ZXJsYXlzLWV4aXN0 LXAKKyAgICAoZG9saXN0IChmYWNlICcoKy1wYXJlbnMtb25lLWZhY2UKKyAgICAgICAgICAgICAg ICAgICAgKy1wYXJlbnMtdHdvLWZhY2UKKyAgICAgICAgICAgICAgICAgICAgKy1wYXJlbnMtdGhy ZWUtZmFjZQorICAgICAgICAgICAgICAgICAgICArLXBhcmVucy1mb3VyLWZhY2UKKyAgICAgICAg ICAgICAgICAgICAgKy1wYXJlbnMtZml2ZS1mYWNlCisgICAgICAgICAgICAgICAgICAgICstcGFy ZW5zLXNpeC1mYWNlCisgICAgICAgICAgICAgICAgICAgICstcGFyZW5zLXNldmVuLWZhY2UKKyAg ICAgICAgICAgICAgICAgICAgKy1wYXJlbnMtZWlnaHQtZmFjZQorICAgICAgICAgICAgICAgICAg ICArLXBhcmVucy1uaW5lLWZhY2UKKyAgICAgICAgICAgICAgICAgICAgKy1wYXJlbnMtdGVuLWZh Y2UpKQorICAgICAgKCstcmVtb3ZlLW92ZXJsYXlzIG5pbCBuaWwgJ2ZhY2UgZmFjZSkpCisgICAg KHNldHEgKy1wYXJlbnMtb3ZlcmxheXMtZXhpc3QtcCBuaWwpKSkKKworOzs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7CisKKzs7OyBBVVRIT1I6ICBOaWtvbGFqIFNjaHVtYWNoZXIgLS0gaHR0cHM6Ly9n aXRodWIuY29tL25zY2h1bS9mcmluZ2UtaGVscGVyLmVsCisoZGVmdW4gKy1mcmluZ2UtaGVscGVy LWRlY2ltYWwgKCZyZXN0IHN0cmluZ3MpCisiQ29udmVydCBTVFJJTkdTIGludG8gYSB2ZWN0b3Ig dXNhYmxlIGZvciBgZGVmaW5lLWZyaW5nZS1iaXRtYXAnLgorRWFjaCBzdHJpbmcgaW4gU1RSSU5H UyByZXByZXNlbnRzIGEgbGluZSBvZiB0aGUgZnJpbmdlIGJpdG1hcC4KK1BlcmlvZHMgKC4pIGFy ZSBiYWNrZ3JvdW5kLWNvbG9yZWQgcGl4ZWw7IFhzIGFyZSBmb3JlZ3JvdW5kLWNvbG9yZWQuIFRo ZQorZnJpbmdlIGJpdG1hcCBhbHdheXMgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRoZSBm cmluZ2UgaGFzIGhhbGYKK3dpZHRoLCBvbmx5IHRoZSBsZWZ0IDQgcGl4ZWxzIG9mIGFuIDggcGl4 ZWwgYml0bWFwIHdpbGwgYmUgc2hvd24uCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2Rl IGRlZmluZXMgYSBkaWFnb25hbCBsaW5lLgorXCgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorXCJY WC4uLi4uLlwiCitcIi4uWFguLi4uXCIKK1wiLi4uLlhYLi5cIgorXCIuLi4uLi5YWFwiXCkiCisg ICh1bmxlc3MgKGNkciBzdHJpbmdzKQorICAgIChzZXRxIHN0cmluZ3MgKHNwbGl0LXN0cmluZyAo Y2FyIHN0cmluZ3MpICJcbiIpKSkKKyAgKGFwcGx5ICd2ZWN0b3IKKyAgICAobWFwY2FyCisgICAg ICAobGFtYmRhIChzdHIpCisgICAgICAgIChsZXQgKChudW0gMCkpCisgICAgICAgICAgKGRvbGlz dCAoYyAoc3RyaW5nLXRvLWxpc3Qgc3RyKSkKKyAgICAgICAgICAgIChzZXRxIG51bSAoKyAoKiBu dW0gMikgKGlmIChlcSBjID8uKSAwIDEpKSkpCisgICAgICAgICAgbnVtKSkKKyAgICAgIHN0cmlu Z3MpKSkKKworOzs7IE1vZGlmaWNhdGlvbiBieSBAbGF3bGlzdCBvZiBgKy1mcmluZ2UtaGVscGVy LWRlY2ltYWwnIHdyaXR0ZW4gYnkKKzs7OyBOaWtvbGFqIFNjaHVtYWNoZXIgLS0gaHR0cHM6Ly9n aXRodWIuY29tL25zY2h1bS9mcmluZ2UtaGVscGVyLmVsCisoZGVmdW4gKy1mcmluZ2UtaGVscGVy LWhleGFkZWNpbWFsICgmcmVzdCBzdHJpbmdzKQorIkNvbnZlcnQgU1RSSU5HUyBpbnRvIGEgdmVj dG9yIHVzYWJsZSBmb3IgYGRlZmluZS1mcmluZ2UtYml0bWFwJy4KK0VhY2ggc3RyaW5nIGluIFNU UklOR1MgcmVwcmVzZW50cyBhIGxpbmUgb2YgdGhlIGZyaW5nZSBiaXRtYXAuCitQZXJpb2RzICgu KSBhcmUgYmFja2dyb3VuZC1jb2xvcmVkIHBpeGVsOyBYcyBhcmUgZm9yZWdyb3VuZC1jb2xvcmVk LiBUaGUKK2ZyaW5nZSBiaXRtYXAgYWx3YXlzIGlzIGFsaWduZWQgdG8gdGhlIHJpZ2h0LiBJZiB0 aGUgZnJpbmdlIGhhcyBoYWxmCit3aWR0aCwgb25seSB0aGUgbGVmdCA0IHBpeGVscyBvZiBhbiA4 IHBpeGVsIGJpdG1hcCB3aWxsIGJlIHNob3duLgorRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcg Y29kZSBkZWZpbmVzIGEgZGlhZ29uYWwgbGluZS4KK1woKy1mcmluZ2UtaGVscGVyLWhleGFkZWNp bWFsCitcIlhYLi4uLi4uXCIKK1wiLi5YWC4uLi5cIgorXCIuLi4uWFguLlwiCitcIi4uLi4uLlhY XCJcKSIKKyAgKHVubGVzcyAoY2RyIHN0cmluZ3MpCisgICAgKHNldHEgc3RyaW5ncyAoc3BsaXQt c3RyaW5nIChjYXIgc3RyaW5ncykgIlxuIikpKQorICAoYXBwbHkgJ3ZlY3RvcgorICAgIChtYXBj YXIKKyAgICAgIChsYW1iZGEgKHN0cikKKyAgICAgICAgKGxldCAoKG51bSAwKSkKKyAgICAgICAg ICAoZG9saXN0IChjIChzdHJpbmctdG8tbGlzdCBzdHIpKQorICAgICAgICAgICAgKHNldHEgbnVt ICgrICgqIG51bSAyKSAoaWYgKGVxIGMgPy4pIDAgMSkpKSkKKyAgICAgICAgICAoZm9ybWF0ICIl Iy14IiBudW0pKSkKKyAgICAgIHN0cmluZ3MpKSkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Cis7OzsgRlJJTkdFIEJJVE1BUFMKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1x dWVzdGlvbi1tYXJrICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4ueHh4eC4uIgorIi54eHh4 eHguIgorInh4Li4uLnh4IgorInh4Li4uLnh4IgorIi4uLi54eC4uIgorIi4uLnh4Li4uIgorIi4u Lnh4Li4uIgorIi4uLi4uLi4uIgorIi4uLnh4Li4uIgorIi4uLnh4Li4uIikgbmlsIG5pbCAnY2Vu dGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmsg KCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFgu Li4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4u Li4uLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZp bmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtbGVmdC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRl Y2ltYWwKKyIuLi54eC4uLiIKKyIuLnh4Li4uLiIKKyIueHguLi4uLiIKKyJ4eHh4eHguLiIKKyJ4 eHh4eHguLiIKKyIueHguLi4uLiIKKyIuLnh4Li4uLiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ2Nl bnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1yaWdodC1hcnJvdyAoKy1m cmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi54eC4uLiIKKyIuLi4ueHguLiIKKyIuLi4uLnh4LiIK KyIuLnh4eHh4eCIKKyIuLnh4eHh4eCIKKyIuLi4uLnh4LiIKKyIuLi4ueHguLiIKKyIuLi54eC4u LiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS11 cC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi54eC4uLiIKKyIuLnh4eHguLiIK KyIueHh4eHh4LiIKKyJ4eHh4eHh4eCIKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIKKyIuLi54eC4u LiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ3RvcCkKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcr LWZyaW5nZS1kb3duLWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4uLnh4Li4uIgor Ii4uLnh4Li4uIgorIi4uLnh4Li4uIgorIi4uLnh4Li4uIgorInh4eHh4eHh4IgorIi54eHh4eHgu IgorIi4ueHh4eC4uIgorIi4uLnh4Li4uIikgbmlsIG5pbCAnYm90dG9tKQorCisoZGVmaW5lLWZy aW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtY3VybHktYXJyb3cgKCstZnJpbmdlLWhlbHBlci1k ZWNpbWFsCisiLi4ueHh4eC4iCisiLi54eHh4eC4iCisiLnh4Li4uLi4iCisiLnh4eC4ueC4iCisi Lnh4eHh4eC4iCisiLi54eHh4eC4iCisiLi4ueHh4eC4iCisiLi54eHh4eC4iKSBuaWwgbmlsICdj ZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtcmlnaHQtY3VybHktYXJy b3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLnh4eHguLi4iCisiLnh4eHh4Li4iCisiLi4u Li54eC4iCisiLnguLnh4eC4iCisiLnh4eHh4eC4iCisiLnh4eHh4Li4iCisiLnh4eHguLi4iCisi Lnh4eHh4Li4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1m cmluZ2UtbGVmdC10cmlhbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi4uLi54eCIK KyIuLi4ueHh4eCIKKyIuLi54eHh4eCIKKyIuLnh4eHh4eCIKKyIuLnh4eHh4eCIKKyIuLi54eHh4 eCIKKyIuLi4ueHh4eCIKKyIuLi4uLi54eCIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS1yaWdodC10cmlhbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRl Y2ltYWwKKyJ4eC4uLi4uLiIKKyJ4eHh4Li4uLiIKKyJ4eHh4eC4uLiIKKyJ4eHh4eHguLiIKKyJ4 eHh4eHguLiIKKyJ4eHh4eC4uLiIKKyJ4eHh4Li4uLiIKKyJ4eC4uLi4uLiIpIG5pbCBuaWwgJ2Nl bnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS10b3AtbGVmdC1hbmdsZSAo Ky1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIKKyJ4eC4uLi4u LiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyIuLi4u Li4uLiIpIG5pbCBuaWwgJ3RvcCkKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS10 b3AtcmlnaHQtYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi54eHh4eHgiCisiLi54 eHh4eHgiCisiLi4uLi4ueHgiCisiLi4uLi4ueHgiCisiLi4uLi4ueHgiCisiLi4uLi4ueHgiCisi Li4uLi4ueHgiCisiLi4uLi4uLi4iKSBuaWwgbmlsICd0b3ApCisKKyhkZWZpbmUtZnJpbmdlLWJp dG1hcCAnKy1mcmluZ2UtYm90dG9tLWxlZnQtYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFs CisieHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4u Li4iCisieHh4eHh4Li4iCisieHh4eHh4Li4iKSBuaWwgbmlsICdib3R0b20pCisKKyhkZWZpbmUt ZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlICgrLWZyaW5nZS1oZWxw ZXItZGVjaW1hbAorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4 IgorIi4uLi4uLnh4IgorIi4ueHh4eHh4IgorIi4ueHh4eHh4IikgbmlsIG5pbCAnYm90dG9tKQor CisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtYnJhY2tldCAoKy1mcmluZ2Ut aGVscGVyLWRlY2ltYWwKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIKKyJ4eC4uLi4uLiIKKyJ4eC4u Li4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4 eHh4eHguLiIKKyJ4eHh4eHguLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2Ut Yml0bWFwICcrLWZyaW5nZS1yaWdodC1icmFja2V0ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAor Ii4ueHh4eHh4IgorIi4ueHh4eHh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4 IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4ueHh4eHh4IgorIi4ueHh4 eHh4IikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdl LWZpbGxlZC1yZWN0YW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisieHh4eHh4eC4iCisi eHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4i CisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4 eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUt ZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtaG9sbG93LXNxdWFyZSAoKy1mcmluZ2UtaGVscGVyLWRl Y2ltYWwKKyIueHh4eHh4LiIKKyIueC4uLi54LiIKKyIueC4uLi54LiIKKyIueC4uLi54LiIKKyIu eC4uLi54LiIKKyIueHh4eHh4LiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2Ut Yml0bWFwICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAor Ii54eHh4eHguIgorIi54eHh4eHguIgorIi54eHh4eHguIgorIi54eHh4eHguIgorIi54eHh4eHgu IgorIi54eHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAg JystZnJpbmdlLWhvcml6b250YWwtYmFyICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorInh4eHh4 eHguIgorInh4eHh4eHguIikgbmlsIG5pbCAnYm90dG9tKQorCisoZGVmaW5lLWZyaW5nZS1iaXRt YXAgJystZnJpbmdlLWVtcHR5LWxpbmUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4uLi4u Li4iCisiLi54eHh4Li4iCisiLi4uLi4uLi4iCisiLi4uLi4uLi4iCisiLi54eHh4Li4iCisiLi4u Li4uLi4iKSBuaWwgbmlsICcodG9wIHQpKQorCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7 OyBgc2V0LWZyaW5nZS1iaXRtYXAtZmFjZScKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJyst c21pbGV5LWZhY2UgJystbGVmdC1mcmluZ2UtY3VycmVudC1saW5lLWZhY2UpCisKKyhzZXQtZnJp bmdlLWJpdG1hcC1mYWNlICcrLWhvbGxvdy1yZWN0YW5nbGUgJystaG9sbG93LXJlY3RhbmdsZS1m YWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1iYWNrc2xhc2ggJystYmFja3NsYXNo LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJr ICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNl ICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrLWZh Y2UpCisKKzs7IChzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1sZWZ0LWFycm93ICcr LWZyaW5nZS1sZWZ0LWFycm93LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZy aW5nZS1yaWdodC1hcnJvdyAnKy1mcmluZ2UtcmlnaHQtYXJyb3ctZmFjZSkKKworKHNldC1mcmlu Z2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXVwLWFycm93ICcrLWZyaW5nZS11cC1hcnJvdy1mYWNl KQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtZG93bi1hcnJvdyAnKy1mcmlu Z2UtZG93bi1hcnJvdy1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2Ut bGVmdC1jdXJseS1hcnJvdyAnKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdy1mYWNlKQorCisoc2V0 LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcmlnaHQtY3VybHktYXJyb3cgJystZnJpbmdl LXJpZ2h0LWN1cmx5LWFycm93LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZy aW5nZS1sZWZ0LXRyaWFuZ2xlICcrLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlLWZhY2UpCisKKyhzZXQt ZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC10cmlhbmdsZSAnKy1mcmluZ2Utcmln aHQtdHJpYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXRv cC1sZWZ0LWFuZ2xlICcrLWZyaW5nZS10b3AtbGVmdC1hbmdsZS1mYWNlKQorCisoc2V0LWZyaW5n ZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlICcrLWZyaW5nZS10b3Atcmln aHQtYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWJvdHRv bS1sZWZ0LWFuZ2xlICcrLWZyaW5nZS1ib3R0b20tbGVmdC1hbmdsZS1mYWNlKQorCisoc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlICcrLWZyaW5nZS1i b3R0b20tcmlnaHQtYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJp bmdlLWxlZnQtYnJhY2tldCAnKy1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UpCisKKyhzZXQtZnJp bmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1icmFja2V0ICcrLWZyaW5nZS1yaWdodC1i cmFja2V0LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1maWxsZWQt cmVjdGFuZ2xlICcrLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UpCisKKyhzZXQtZnJpbmdl LWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJlICcrLWZyaW5nZS1ob2xsb3ctc3F1 YXJlLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1maWxsZWQtc3F1 YXJlICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1m YWNlICcrLWZyaW5nZS1ob3Jpem9udGFsLWJhciAnKy1mcmluZ2UtaG9yaXpvbnRhbC1iYXItZmFj ZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWVtcHR5LWxpbmUgJystZnJp bmdlLWVtcHR5LWxpbmUtZmFjZSkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CisKKyhwcm92 aWRlICdjcm9zc2hhaXJzKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L2xpc3AvZmFjZXMuZWwgYi9saXNwL2ZhY2VzLmVsCmluZGV4IDE4YjgyMWEuLjM3YTdmNzUgMTAw NjQ0Ci0tLSBhL2xpc3AvZmFjZXMuZWwKKysrIGIvbGlzcC9mYWNlcy5lbApAQCAtMjUwMiw2ICsy NTAyLDE1MyBAQCB1bndhbnRlZCBlZmZlY3RzLiIKICAgOmdyb3VwICdiYXNpYy1mYWNlcwogICA6 Z3JvdXAgJ2Rpc3BsYXktbGluZS1udW1iZXJzKQogCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 OworOzs7IGJlZ2luIE1VTFRJUExFIENVUlNPUlMKKworKGRlZmZhY2UgKy12ZXJ0aWNhbC1iYXIt ZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkKKyAgIkZhY2UgZm9yIGArLXZl cnRpY2FsLWJhci1mYWNlJy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUp CisKKyhkZWZmYWNlICstZXZlbi1udW1iZXJlZC1jb2x1bW4tZmFjZQorICAnKCh0ICg6Zm9yZWdy b3VuZCAieWVsbG93IikpKQorICAiRmFjZSBmb3IgYCstZXZlbi1udW1iZXJlZC1jb2x1bW4tZmFj ZScuICBVc2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSAr LW9kZC1udW1iZXJlZC1jb2x1bW4tZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQor ICAiRmFjZSBmb3IgYCstb2RkLW51bWJlcmVkLWNvbHVtbi1mYWNlJy4gIFVzZWQgaW4gYHhkaXNw LmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstYmV5b25kLWZpbGwtY29sdW1u LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQorICAiRmFjZSBmb3IgYCstYmV5 b25kLWZpbGwtY29sdW1uLWZhY2UnLiAgVXNlZCBpbiBgeGRpc3AuYycuIgorICA6Z3JvdXAgJyst bW9kZSkKKworKGRlZmZhY2UgKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1pbmFjdGl2ZS1mYWNlCisg ICcoKHQgKDpmb3JlZ3JvdW5kICIjZWVlOGFhIikpKSA7OzsgUGFsZUdvbGRlbnJvZAorICAiRmFj ZSBmb3IgYCstZXZlbi1udW1iZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFjZScuICBVc2VkIGluIGB4 ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLW9kZC1udW1iZXJlZC1j b2x1bW4taW5hY3RpdmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiI2ZmNjM0NyIpKSkgOzs7 IHRvbWF0bworICAiRmFjZSBmb3IgYCstb2RkLW51bWJlcmVkLWNvbHVtbi1pbmFjdGl2ZS1mYWNl Jy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICst YmV5b25kLWZpbGwtY29sdW1uLWluYWN0aXZlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIiMy ZThiNTciKSkpIDs7OyBTZWFHcmVlbgorICAiRmFjZSBmb3IgYCstYmV5b25kLWZpbGwtY29sdW1u LWluYWN0aXZlLWZhY2UnLiAgVXNlZCBpbiBgeGRpc3AuYycuIgorICA6Z3JvdXAgJystbW9kZSkK KworKGRlZmZhY2UgKy1yZWFsLWZha2UtY3Vyc29yLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiY3lh biIgOmJhY2tncm91bmQgIkRhcmtCbHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xv cnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBndGspKQorICAgICA6Zm9yZWdyb3VuZCAi Z3RrX3NlbGVjdGlvbl9mZ19jb2xvciIgOmJhY2tncm91bmQgImd0a19zZWxlY3Rpb25fYmdfY29s b3IiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGln aHQpICh0eXBlIG5zKSkKKyAgICAgOmZvcmVncm91bmQgImJsYWNrIiA6YmFja2dyb3VuZCAiTGln aHRTa3lCbHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3Jv dW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgImJsYWNrIiA6YmFja2dyb3VuZCAiTGlnaHRT a3lCbHVlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5k IGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAieWVsbG93IiA6YmFja2dyb3VuZCAiYmx1ZTMiKQor ICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQor ICAgICA6Zm9yZWdyb3VuZCAib3JhbmdlIiA6YmFja2dyb3VuZCAibGlnaHRnb2xkZW5yb2QyIikK KyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpiYWNrZ3JvdW5kICJi bHVlIiA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykp CisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVncm91bmQgInBpbmsiIDpiYWNr Z3JvdW5kICJncmF5IikpCisgICJGYWNlIGZvciBgKy1yZWFsLWZha2UtY3Vyc29yLWZhY2UnLiAg VXNlZCBpbiBgeGRpc3AuYycuCitBcyB0byBhIGhvbGxvdyBzdHlsZSBjdXJzb3IsIHRoZSA6Zm9y ZWdyb3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGJvcmRlciBhbmQKK3RoZSA6YmFja2dy b3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGZpbGxlZCBzaGFkaW5nLiAgVGhl IGNoYXJhY3RlcgorcmV0YWlucyBpdHMgb3duIGZvcmVncm91bmQgY29sb3IgYW5kIGlzIHVuYWZm ZWN0ZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIGZhY2UuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLWZhY2UKKyAgJygoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAi I2ZmMDBmZiIgOmJhY2tncm91bmQgIkZvcmVzdEdyZWVuIikKKyAgICAoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBndGspKQorICAgICA6Zm9y ZWdyb3VuZCAiZ3RrX3NlbGVjdGlvbl9mZ19jb2xvciIgOmJhY2tncm91bmQgImd0a19zZWxlY3Rp b25fYmdfY29sb3IiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tn cm91bmQgbGlnaHQpICh0eXBlIG5zKSkKKyAgICAgOmZvcmVncm91bmQgImJsYWNrIiA6YmFja2dy b3VuZCAiZ3JleTcwIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNr Z3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgImJsYWNrIiA6YmFja2dyb3VuZCAiZ3Jl eTcwIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRh cmspKQorICAgICA6Zm9yZWdyb3VuZCAieWVsbG93IiA6YmFja2dyb3VuZCAiYmx1ZTMiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAg ICA6Zm9yZWdyb3VuZCAib3JhbmdlIiA6YmFja2dyb3VuZCAibGlnaHRnb2xkZW5yb2QyIikKKyAg ICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpiYWNrZ3JvdW5kICJibHVl IiA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgoKHR5cGUgdHR5KSAoY2xhc3MgbW9ubykpCisg ICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVncm91bmQgInBpbmsiIDpiYWNrZ3Jv dW5kICJncmF5IikpCisgICJGYWNlIGZvciBgKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLWZh Y2UnLiAgVXNlZCBpbiBgeGRpc3AuYycuCitBcyB0byBhIGhvbGxvdyBzdHlsZSBjdXJzb3IsIHRo ZSA6Zm9yZWdyb3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGJvcmRlciBhbmQKK3RoZSA6 YmFja2dyb3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGlubmVyIGZpbGxlZCBzaGFkaW5n LiAgVGhlIGNoYXJhY3RlcgorcmV0YWlucyBpdHMgb3duIGZvcmVncm91bmQgY29sb3IgYW5kIGlz IHVuYWZmZWN0ZWQgYnkgdGhpcyBwYXJ0aWN1bGFyIGZhY2UuIgorICA6Z3JvdXAgJystbW9kZSkK KworKGRlZmZhY2UgKy1yZWFsLWZha2UtY3Vyc29yLXJlZ2lvbi1mYWNlCisgICcoKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91 bmQgImdyZXkxNSIgOmJhY2tncm91bmQgIiM4Yjc5NWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIGd0aykpCisgICAgIDpmb3Jl Z3JvdW5kICJndGtfc2VsZWN0aW9uX2ZnX2NvbG9yIiA6YmFja2dyb3VuZCAiZ3RrX3NlbGVjdGlv bl9iZ19jb2xvciIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBsaWdodCkgKHR5cGUgbnMpKQorICAgICA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91 bmQgIiM4Yjc5NWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tn cm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQgIiM4Yjc5 NWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFy aykpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxsb3ciIDpiYWNrZ3JvdW5kICJibHVlMyIpCisgICAg KCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAg IDpmb3JlZ3JvdW5kICJvcmFuZ2UiIDpiYWNrZ3JvdW5kICJsaWdodGdvbGRlbnJvZDIiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmJhY2tncm91bmQgImJsdWUi IDpmb3JlZ3JvdW5kICJ3aGl0ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAg ICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91 bmQgImdyYXkiKSkKKyAgIkZhY2UgZm9yIGArLXJlYWwtZmFrZS1jdXJzb3ItcmVnaW9uLWZhY2Un LiAgVXNlZCBpbiBgeGRpc3AuYycuCitBcyB0byBhIGhvbGxvdyBzdHlsZSBjdXJzb3IsIHRoZSA6 Zm9yZWdyb3VuZCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgdGhlIGlubmVyCitmaWxsZWQgc2hhZGlu ZyB3aGVuIFBUIGlzIF9ub3RfIHdpdGhpbiB0aGUgYWN0aXZlIHJlZ2lvbjsgYW5kLCB0aGUgOmJh Y2tncm91bmQKK3BhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUgaW5uZXIgZmlsbGVkIHNoYWRpbmcg d2hlbiBQVCBfaXNfIHdpdGhpbiB0aGUgYWN0aXZlCityZWdpb24uICBUaGUgY2hhcmFjdGVyIHJl dGFpbnMgaXRzIG93biBmb3JlZ3JvdW5kIGNvbG9yIGFuZCBpcyB1bmFmZmVjdGVkIGJ5IHRoaXMK K3BhcnRpY3VsYXIgZmFjZS4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLW92ZXJs YXktYXJyb3ctZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQorICAiRmFjZSBmb3Ig YCstb3ZlcmxheS1hcnJvdy1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSAr LW92ZXJsYXktYXJyb3ctbWluaW1hbC1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJibHVlIikp KQorICAiRmFjZSBmb3IgYCstb3ZlcmxheS1hcnJvdy1taW5pbWFsLWZhY2UnLiIKKyAgOmdyb3Vw ICcrLW1vZGUpCisKKyhkZWZmYWNlICstb3ZlcmxheS1hcnJvdy1pbmFjdGl2ZS1mYWNlCisgICco KHQgKDpmb3JlZ3JvdW5kICJvcmFuZ2UiKSkpCisgICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93 LWluYWN0aXZlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstb3Zlcmxh eS1hcnJvdy1oc2NsLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCisg ICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93LWhzY2wtZmFjZScuIgorICA6Z3JvdXAgJystbW9k ZSkKKworKGRlZmZhY2UgKy1vdmVybGF5LWFycm93LWhzY2wtbWluaW1hbC1mYWNlCisgICcoKHQg KDpmb3JlZ3JvdW5kICJncmVlbiIpKSkKKyAgIkZhY2UgZm9yIGArLW92ZXJsYXktYXJyb3ctaHNj bC1taW5pbWFsLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstb3Zlcmxh eS1hcnJvdy1oc2NsLWluYWN0aXZlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgInllbGxvdyIp KSkKKyAgIkZhY2UgZm9yIGArLW92ZXJsYXktYXJyb3ctaHNjbC1pbmFjdGl2ZS1mYWNlJy4iCisg IDpncm91cCAnKy1tb2RlKQorCis7OzsgZW5kIE1VTFRJUExFIENVUlNPUlMKKzs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7OworCisKIChkZWZmYWNlIGVzY2FwZS1nbHlwaAogICAnKCgoKGJhY2tncm91 bmQgZGFyaykpIDpmb3JlZ3JvdW5kICJjeWFuIikKICAgICA7OyBTZWUgdGhlIGNvbW1lbnQgaW4g bWluaWJ1ZmZlci1wcm9tcHQgZm9yCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmMgYi9zcmMvYnVm ZmVyLmMKaW5kZXggMDI0ZTY0Zi4uNGVlY2NkOSAxMDA2NDQKLS0tIGEvc3JjL2J1ZmZlci5jCisr KyBiL3NyYy9idWZmZXIuYwpAQCAtNTA3Nyw2ICs1MDc3LDI1IEBAIGluaXRfYnVmZmVyX29uY2Ug KHZvaWQpCiAgIGJzZXRfbGFzdF9zZWxlY3RlZF93aW5kb3cgKCZidWZmZXJfbG9jYWxfZmxhZ3Ms IG1ha2VfZml4bnVtICgwKSk7CiAKICAgaWR4ID0gMTsKKworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1 ZmZlcl9sb2NhbF9mbGFncywgbWNfcmVhbF9mYWtlX2N1cnNvciksIGlkeCk7ICsraWR4OworICBY U0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgbXVsdGlwbGVfY3Vyc29yc19j b25mKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2Zs YWdzLCBtdWx0aXBsZV9jdXJzb3JzX2RyYXdfZm9ydGh3aXRoKSwgaWR4KTsgKytpZHg7CisgIFhT RVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBtdWx0aXBsZV9jdXJzb3JzX2lu YWN0aXZlX3dpbmRvd3MpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZm ZXJfbG9jYWxfZmxhZ3MsIGNyb3NzaGFpcnMpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQg KEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciks IGlkeCk7ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywg Y3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlciksIGlkeCk7ICsraWR4OworICBYU0VURkFTVElOVCAo QlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Jvc3NoYWlyc19kcmF3X2ZvcnRod2l0aCksIGlk eCk7ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Jv c3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChC VkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBtY19zdGRlcnIpLCBpZHgpOyArK2lkeDsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9s b2NhbF9mbGFncywgbW9kZV9saW5lX2Zvcm1hdCksIGlkeCk7ICsraWR4OwogICBYU0VURkFTVElO VCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgYWJicmV2X21vZGUpLCBpZHgpOyArK2lkeDsK ICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG92ZXJ3cml0ZV9tb2Rl KSwgaWR4KTsgKytpZHg7CkBAIC01MTU4LDYgKzUxNzcsMjUgQEAgaW5pdF9idWZmZXJfb25jZSAo dm9pZCkKICAgLyogTXVzdCBkbyB0aGVzZSBiZWZvcmUgbWFraW5nIHRoZSBmaXJzdCBidWZmZXIh ICovCiAKICAgLyogcmVhbCBzZXR1cCBpcyBkb25lIGluIGJpbmRpbmdzLmVsICovCisKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgYnNldF9i bHZfbWNfcmVhbF9mYWtlX2N1cnNvciAoJmJ1ZmZlcl9kZWZhdWx0cywgUWhvbGxvdyk7CisgIGJz ZXRfYmx2X211bHRpcGxlX2N1cnNvcnNfY29uZiAoJmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7Cisg IGJzZXRfYmx2X211bHRpcGxlX2N1cnNvcnNfZHJhd19mb3J0aHdpdGggKCZidWZmZXJfZGVmYXVs dHMsIFF0KTsKKyAgYnNldF9ibHZfbXVsdGlwbGVfY3Vyc29yc19pbmFjdGl2ZV93aW5kb3dzICgm YnVmZmVyX2RlZmF1bHRzLCBRdCk7CisgIGJzZXRfYmx2X2Nyb3NzaGFpcnMgKCZidWZmZXJfZGVm YXVsdHMsIFFuaWwpOworICBic2V0X2Jsdl9jcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIgKCZi dWZmZXJfZGVmYXVsdHMsIFF0KTsKKyAgYnNldF9ibHZfY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxl ciAoJmJ1ZmZlcl9kZWZhdWx0cywgUXQpOworICBic2V0X2Jsdl9jcm9zc2hhaXJzX2RyYXdfZm9y dGh3aXRoICgmYnVmZmVyX2RlZmF1bHRzLCBRdCk7CisgIGJzZXRfYmx2X2Nyb3NzaGFpcnNfaW5h Y3RpdmVfd2luZG93cyAoJmJ1ZmZlcl9kZWZhdWx0cywgUXQpOworICBic2V0X2Jsdl9tY19zdGRl cnIgKCZidWZmZXJfZGVmYXVsdHMsIFFuaWwpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K KworCiAgIGJzZXRfbW9kZV9saW5lX2Zvcm1hdCAoJmJ1ZmZlcl9kZWZhdWx0cywgYnVpbGRfcHVy ZV9jX3N0cmluZyAoIiUtIikpOwogICBic2V0X2hlYWRlcl9saW5lX2Zvcm1hdCAoJmJ1ZmZlcl9k ZWZhdWx0cywgUW5pbCk7CiAgIGJzZXRfYWJicmV2X21vZGUgKCZidWZmZXJfZGVmYXVsdHMsIFFu aWwpOwpAQCAtNTQwNiw2ICs1NDQ0LDI0IEBAIHN5bXNfb2ZfYnVmZmVyICh2b2lkKQogICBzdGF0 aWNwcm8gKCZRU0Z1bmRhbWVudGFsKTsKICAgc3RhdGljcHJvICgmVmJ1ZmZlcl9hbGlzdCk7CiAK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAg REVGU1lNIChRbWNfcmVhbF9mYWtlX2N1cnNvciwgIm1jLXJlYWwtZmFrZS1jdXJzb3IiKTsKKyAg REVGU1lNIChRbXVsdGlwbGVfY3Vyc29yc19jb25mLCAibXVsdGlwbGUtY3Vyc29ycy1jb25mIik7 CisgIERFRlNZTSAoUW11bHRpcGxlX2N1cnNvcnNfZHJhd19mb3J0aHdpdGgsICJtdWx0aXBsZS1j dXJzb3JzLWRyYXctZm9ydGh3aXRoIik7CisgIERFRlNZTSAoUW11bHRpcGxlX2N1cnNvcnNfaW5h Y3RpdmVfd2luZG93cywgIm11bHRpcGxlLWN1cnNvcnMtaW5hY3RpdmUtd2luZG93cyIpOworICBE RUZTWU0gKFFjcm9zc2hhaXJzLCAiY3Jvc3NoYWlycyIpOworICBERUZTWU0gKFFjcm9zc2hhaXJz X2hvcml6b250YWxfcnVsZXIsICJjcm9zc2hhaXJzLWhvcml6b250YWwtcnVsZXIiKTsKKyAgREVG U1lNIChRY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlciwgImNyb3NzaGFpcnMtdmVydGljYWwtcnVs ZXIiKTsKKyAgREVGU1lNIChRY3Jvc3NoYWlyc19kcmF3X2ZvcnRod2l0aCwgImNyb3NzaGFpcnMt ZHJhdy1mb3J0aHdpdGgiKTsKKyAgREVGU1lNIChRY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dz LCAiY3Jvc3NoYWlycy1pbmFjdGl2ZS13aW5kb3dzIik7CisgIERFRlNZTSAoUW1jX3N0ZGVyciwg Im1jLXN0ZGVyciIpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIERFRlNZTSAo UWNob2ljZSwgImNob2ljZSIpOwogICBERUZTWU0gKFFsZWZ0LCAibGVmdCIpOwogICBERUZTWU0g KFFyaWdodCwgInJpZ2h0Iik7CkBAIC01NDQzLDYgKzU0OTksNTIgQEAgc3ltc19vZl9idWZmZXIg KHZvaWQpCiAgIEZwdXQgKFFwcm90ZWN0ZWRfZmllbGQsIFFlcnJvcl9tZXNzYWdlLAogCWJ1aWxk X3B1cmVfY19zdHJpbmcgKCJBdHRlbXB0IHRvIG1vZGlmeSBhIHByb3RlY3RlZCBmaWVsZCIpKTsK IAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKwor ICBERUZWQVJfUEVSX0JVRkZFUiAoIm1jLXJlYWwtZmFrZS1jdXJzb3IiLCAmQlZBUiAoY3VycmVu dF9idWZmZXIsIG1jX3JlYWxfZmFrZV9jdXJzb3IpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZl ci1sb2NhbCB2YXJpYWJsZSB0byBzZXQgdGhlIGN1cnNvciB0eXBlIG9mIHRoZSByZWFsIGZha2Ug Y3Vyc29yLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJtdWx0aXBsZS1jdXJzb3JzLWNv bmYiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG11bHRpcGxlX2N1cnNvcnNfY29uZiksIFFuaWws CisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSB2YWx1ZSBv ZiB0aGUgbXVsdGlwbGUgY3Vyc29ycyB0byBiZSBkaXNwbGF5ZWQKK2R1cmluZyB0aGUgbmV4dCBy ZWRpc3BsYXkuICovKTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoIm11bHRpcGxlLWN1cnNvcnMt ZHJhdy1mb3J0aHdpdGgiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG11bHRpcGxlX2N1cnNvcnNf ZHJhd19mb3J0aHdpdGgpLCBRbmlsLAorICAgIGRvYzogLyogV2hlbiBub24tbmlsLCBkcmF3IG11 bHRpcGxlIGN1cnNvcnMgd2hlbmV2ZXIgdGhlIHJlYWwgY3Vyc29yIHdvdWxkCitvcmRpbmFyaWx5 IGJlIGRyYXduLCB3aGljaCBpcyBzb21ldGltZXMgbW9yZSB0aGFuIG9uY2UgZXZlcnkgY29tbWFu ZCBsb29wLgorV2hlbiBuaWwsIG11bHRpcGxlLWN1cnNvcnMgd2lsbCBiZSBwbGFjZWQgb24gYW4g aWRsZS10aW1lci4gIElmIHRoaXMgdmFyaWFibGUgaXMKK3Jlc2V0IHdoaWxlIGBtdWx0aXBsZS1j dXJzb3JzLW1vZGUnIGlzIGVuYWJsZWQsIHRoZW4gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB0dXJu IG9mZi9vbgorYG11bHRpcGxlLWN1cnNvcnMtbW9kZScgdG8gcmVzZXQgZnVuY3Rpb25zIGF0dGFj aGVkIHRvIHRoZSBgcG9zdC1jb21tYW5kLWhvb2snLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZG RVIgKCJtdWx0aXBsZS1jdXJzb3JzLWluYWN0aXZlLXdpbmRvd3MiLCAmQlZBUiAoY3VycmVudF9i dWZmZXIsIG11bHRpcGxlX2N1cnNvcnNfaW5hY3RpdmVfd2luZG93cyksIFFuaWwsCisgICAgZG9j OiAvKiBXaGVuIG5vbi1uaWwsIGRyYXcgbXVsdGlwbGUgY3Vyc29ycyBpbiBpbmFjdGl2ZSB3aW5k b3dzLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJjcm9zc2hhaXJzIiwgJkJWQVIgKGN1 cnJlbnRfYnVmZmVyLCBjcm9zc2hhaXJzKSwgUW5pbCwKKyAgICBkb2M6IC8qIEEgYnVmZXItbG9j YWwgdmFyaWFibGUgdG8gYWN0aXZhdGUvZGVhY3RpdmF0ZSBjcm9zc2hhaXJzLiAqLyk7CisKKyAg REVGVkFSX1BFUl9CVUZGRVIgKCJjcm9zc2hhaXJzLWhvcml6b250YWwtcnVsZXIiLCAmQlZBUiAo Y3VycmVudF9idWZmZXIsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciksIFFuaWwsCisgICAg ZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFjdGl2YXRlL2RlYWN0aXZhdGUgdGhl IGNyb3NzaGFpcnMgaG9yaXpvbnRhbCBydWxlci4gKi8pOworCisgIERFRlZBUl9QRVJfQlVGRkVS ICgiY3Jvc3NoYWlycy12ZXJ0aWNhbC1ydWxlciIsICZCVkFSIChjdXJyZW50X2J1ZmZlciwgY3Jv c3NoYWlyc192ZXJ0aWNhbF9ydWxlciksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2Fs IHZhcmlhYmxlIHRvIGFjdGl2YXRlL2RlYWN0aXZhdGUgdGhlIGNyb3NzaGFpcnMgdmVydGljYWwg cnVsZXIuICovKTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoImNyb3NzaGFpcnMtZHJhdy1mb3J0 aHdpdGgiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNyb3NzaGFpcnNfZHJhd19mb3J0aHdpdGgp LCBRbmlsLAorICAgIGRvYzogLyogV2hlbiBub24tbmlsLCBkcmF3IGNyb3NzaGFpcnMgd2hlbmV2 ZXIgdGhlIHJlYWwgY3Vyc29yIHdvdWxkCitvcmRpbmFyaWx5IGJlIGRyYXduLCB3aGljaCBpcyBz b21ldGltZXMgbW9yZSB0aGFuIG9uY2UgZXZlcnkgY29tbWFuZCBsb29wLgorV2hlbiBuaWwsIGNy b3NzaGFpcnMgd2lsbCBiZSBwbGFjZWQgb24gYW4gaWRsZS10aW1lci4gIElmIHRoaXMgdmFyaWFi bGUgaXMKK3Jlc2V0IHdoaWxlIGArLW1vZGUnIGlzIGVuYWJsZWQsIHRoZW4gaXQgbWF5IGJlIG5l Y2Vzc2FyeSB0byB0dXJuIG9mZi9vbgorYCstbW9kZScgdG8gcmVzZXQgZnVuY3Rpb25zIGF0dGFj aGVkIHRvIHRoZSBgcG9zdC1jb21tYW5kLWhvb2snLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZG RVIgKCJjcm9zc2hhaXJzLWluYWN0aXZlLXdpbmRvd3MiLCAmQlZBUiAoY3VycmVudF9idWZmZXIs IGNyb3NzaGFpcnNfaW5hY3RpdmVfd2luZG93cyksIFFuaWwsCisgICAgZG9jOiAvKiBXaGVuIG5v bi1uaWwsIGRyYXcgY3Jvc3NoYWlycyBpbiBpbmFjdGl2ZSB3aW5kb3dzLiAqLyk7CisKKyAgREVG VkFSX1BFUl9CVUZGRVIgKCJtYy1zdGRlcnIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX3N0 ZGVyciksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFjdGl2 YXRlL2RlYWN0aXZhdGUgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyci4gKi8pOworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKworCiAgIERFRlZBUl9QRVJfQlVGRkVSICgiaGVhZGVyLWxp bmUtZm9ybWF0IiwKIAkJICAgICAmQlZBUiAoY3VycmVudF9idWZmZXIsIGhlYWRlcl9saW5lX2Zv cm1hdCksCiAJCSAgICAgUW5pbCwKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3NyYy9idWZm ZXIuaAppbmRleCA0ZWE3ZmE2Li40YTMxOTk2IDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmgKKysr IGIvc3JjL2J1ZmZlci5oCkBAIC02MzYsNiArNjM2LDQzIEBAIHN0cnVjdCBidWZmZXIKICAgICAg Y2FjaGUgYXJlIGVuYWJsZWQuICBTZWUgc2VhcmNoLmMsIGluZGVudC5jIGFuZCBiaWRpLmMgZm9y IGRldGFpbHMuICAqLwogICBMaXNwX09iamVjdCBjYWNoZV9sb25nX3NjYW5zXzsKIAorCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAvKiBUaGUg Y3Vyc29yIHR5cGUgb2YgdGhlIHJlYWwgZmFrZSBjdXJzb3IuICovCisgIExpc3BfT2JqZWN0IG1j X3JlYWxfZmFrZV9jdXJzb3JfOworCisgIC8qIFRoZSBuYW1lIG9mIGxpc3QgdXNlZCBieSBtdWx0 aXBsZSBjdXJzb3JzIGZvciBuZXh0IHJlZGlzcGxheS4gKi8KKyAgTGlzcF9PYmplY3QgbXVsdGlw bGVfY3Vyc29yc19jb25mXzsKKworICAvKiBXaGV0aGVyIHRvIGRyYXcgbXVsdGlwbGUgY3Vyc29y cyBpbW1lZGlhdGVseSwgb3Igb24gYW4gaWRsZS10aW1lci4gKi8KKyAgTGlzcF9PYmplY3QgbXVs dGlwbGVfY3Vyc29yc19kcmF3X2ZvcnRod2l0aF87CisKKyAgLyogV2hldGhlciB0byBkcmF3IG11 bHRpcGxlIGN1cnNvcnMgaW4gaW5hY3RpdmUgd2luZG93cy4gKi8KKyAgTGlzcF9PYmplY3QgbXVs dGlwbGVfY3Vyc29yc19pbmFjdGl2ZV93aW5kb3dzXzsKKworICAvKiBUaGUgbmFtZSBvZiBsaXN0 LiAqLworICBMaXNwX09iamVjdCBjcm9zc2hhaXJzXzsKKworICAvKiBUaGUgbmFtZSBvZiB0aGUg Y3Jvc3NoYWlycyBob3Jpem9udGFsIHJ1bGVyLiAqLworICBMaXNwX09iamVjdCBjcm9zc2hhaXJz X2hvcml6b250YWxfcnVsZXJfOworCisgIC8qIFRoZSBuYW1lIG9mIHRoZSBjcm9zc2hhaXJzIHZl cnRpY2FsIHJ1bGVyLiAqLworICBMaXNwX09iamVjdCBjcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVy XzsKKworICAvKiBXaGV0aGVyIHRvIGRyYXcgY3Jvc3NoYWlycyBpbW1lZGlhdGVseSwgb3Igb24g YW4gaWRsZS10aW1lci4gKi8KKyAgTGlzcF9PYmplY3QgY3Jvc3NoYWlyc19kcmF3X2ZvcnRod2l0 aF87CisKKyAgLyogV2hldGhlciB0byBkcmF3IGNyb3NzaGFpcnMgaW4gaW5hY3RpdmUgd2luZG93 cy4gKi8KKyAgTGlzcF9PYmplY3QgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzXzsKKworICAv KiBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZ2VuZXJhdGluZyBzdGRlcnIgZGVidWdnaW5nIG1l c3NhZ2UuICovCisgIExpc3BfT2JqZWN0IG1jX3N0ZGVycl87CisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCisKICAgLyogSWYgdGhlIHdpZHRoIHJ1biBjYWNoZSBpcyBlbmFibGVkLCB0aGlz IHRhYmxlIGNvbnRhaW5zIHRoZQogICAgICBjaGFyYWN0ZXIgd2lkdGhzIHdpZHRoX3J1bl9jYWNo ZSAoc2VlIGFib3ZlKSBhc3N1bWVzLiAgV2hlbiB3ZQogICAgICBkbyBhIHRob3JvdWdoIHJlZGlz cGxheSwgd2UgY29tcGFyZSB0aGlzIGFnYWluc3QgdGhlIGJ1ZmZlcidzCkBAIC03OTIsOSArODI5 LDE3IEBAIHN0cnVjdCBidWZmZXIKICAgICAgZm9yIGEgYnVmZmVyLWxvY2FsIHZhcmlhYmxlIGlz IHN0b3JlZCBpbiB0aGF0IHZhcmlhYmxlJ3Mgc2xvdAogICAgICBpbiBidWZmZXJfbG9jYWxfZmxh Z3MgYXMgYSBMaXNwIGludGVnZXIuICBJZiB0aGUgaW5kZXggaXMgLTEsCiAgICAgIHRoaXMgbWVh bnMgdGhlIHZhcmlhYmxlIGlzIGFsd2F5cyBsb2NhbCBpbiBhbGwgYnVmZmVycy4gICovCi0jZGVm aW5lIE1BWF9QRVJfQlVGRkVSX1ZBUlMgNTAKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworI2RlZmluZSBNQVhfUEVSX0JVRkZFUl9WQVJTIDYw CiAgIGNoYXIgbG9jYWxfZmxhZ3NbTUFYX1BFUl9CVUZGRVJfVkFSU107CiAKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCisKICAgLyogU2V0IHRvIHRoZSBtb2R0aW1lIG9mIHRoZSB2aXNpdGVk IGZpbGUgd2hlbiByZWFkIG9yIHdyaXR0ZW4uCiAgICAgIG1vZHRpbWUudHZfbnNlYyA9PSBOT05F WElTVEVOVF9NT0RUSU1FX05TRUNTIG1lYW5zCiAgICAgIHZpc2l0ZWQgZmlsZSB3YXMgbm9uZXhp c3RlbnQuICBtb2R0aW1lLnR2X25zZWMgPT0KQEAgLTg5Niw2ICs5NDEsNzQgQEAgWEJVRkZFUiAo TGlzcF9PYmplY3QgYSkKIC8qIE1vc3QgY29kZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0 byBzZXQgTGlzcCBmaWVsZHMgaW4gc3RydWN0CiAgICBidWZmZXIuICAoU29tZSBzZXR0ZXJzIHRo YXQgYXJlIHByaXZhdGUgdG8gYSBzaW5nbGUgLmMgZmlsZSBhcmUKICAgIGRlZmluZWQgYXMgc3Rh dGljIGluIHRob3NlIGZpbGVzLikgICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBNVUxUSVBMRSBDVVJTT1JTICovCisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9tY19yZWFsX2Zh a2VfY3Vyc29yIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm1j X3JlYWxfZmFrZV9jdXJzb3JfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfbXVs dGlwbGVfY3Vyc29yc19jb25mIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7 CisgIGItPm11bHRpcGxlX2N1cnNvcnNfY29uZl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCiti c2V0X2Jsdl9tdWx0aXBsZV9jdXJzb3JzX2RyYXdfZm9ydGh3aXRoIChzdHJ1Y3QgYnVmZmVyICpi LCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm11bHRpcGxlX2N1cnNvcnNfZHJhd19mb3J0aHdp dGhfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfbXVsdGlwbGVfY3Vyc29yc19p bmFjdGl2ZV93aW5kb3dzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7Cisg IGItPm11bHRpcGxlX2N1cnNvcnNfaW5hY3RpdmVfd2luZG93c18gPSB2YWw7Cit9CisKK0lOTElO RSB2b2lkCitic2V0X2Jsdl9jcm9zc2hhaXJzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVj dCB2YWwpCit7CisgIGItPmNyb3NzaGFpcnNfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNl dF9ibHZfY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNw X09iamVjdCB2YWwpCit7CisgIGItPmNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlcl8gPSB2YWw7 Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9jcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyIChz dHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPmNyb3NzaGFpcnNfdmVy dGljYWxfcnVsZXJfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfY3Jvc3NoYWly c19kcmF3X2ZvcnRod2l0aCAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQorewor ICBiLT5jcm9zc2hhaXJzX2RyYXdfZm9ydGh3aXRoXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQK K2JzZXRfYmx2X2Nyb3NzaGFpcnNfaW5hY3RpdmVfd2luZG93cyAoc3RydWN0IGJ1ZmZlciAqYiwg TGlzcF9PYmplY3QgdmFsKQoreworICBiLT5jcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3NfID0g dmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfbWNfc3RkZXJyIChzdHJ1Y3QgYnVmZmVy ICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm1jX3N0ZGVycl8gPSB2YWw7Cit9CisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworCisKIElOTElORSB2b2lkCiBic2V0X2JpZGlfcGFyYWdy YXBoX2RpcmVjdGlvbiAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQogewpkaWZm IC0tZ2l0IGEvc3JjL2Rpc3BleHRlcm4uaCBiL3NyYy9kaXNwZXh0ZXJuLmgKaW5kZXggNTc5NjY1 Yy4uZDE1ZmY2ZSAxMDA2NDQKLS0tIGEvc3JjL2Rpc3BleHRlcm4uaAorKysgYi9zcmMvZGlzcGV4 dGVybi5oCkBAIC0zMjg0LDYgKzMyODQsMjkgQEAgZXh0ZXJuIHZvaWQgZ2V0X2ZvbnRfYXNjZW50 X2Rlc2NlbnQgKHN0cnVjdCBmb250ICosIGludCAqLCBpbnQgKik7CiAKICNpZmRlZiBIQVZFX1dJ TkRPV19TWVNURU0KIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENV UlNPUlMgKi8KKworZW51bSBtY19nbHlwaF9mbGF2b3IKK3sKKyAgTk9fRkxBVk9SLAorICBNQ19H TFlQSCwKKyAgTUNfR0xZUEhMRVNTLAorICBNQ19HTFlQSF9UQUIsCisgIE1DX09WRVJMQVlfQVJS T1dfQklUTUFQLAorICBNQ19PVkVSTEFZX0FSUk9XX0JJVE1BUF9IU0NMX1RFTVBPUkFSWSwKKyAg TUNfUElMQ1JPVywKKyAgTUNfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BTkdMRSwKKyAgTUNfSE9M TE9XX1JFQ1RBTkdMRSwKKyAgTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FOR0xFLAorICBNQ19WRVJU SUNBTF9CQVIsCisgIE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKK307CisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCisKICNpZmRlZiBHTFlQSF9ERUJVRwogZXh0ZXJuIHZvaWQgZHVtcF9n bHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKikgRVhURVJOQUxMWV9WSVNJQkxFOwog I2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZnJpbmdlLmMgYi9zcmMvZnJpbmdlLmMKaW5kZXggNmE0 NGRlMS4uN2U3ZWFkZiAxMDA2NDQKLS0tIGEvc3JjL2ZyaW5nZS5jCisrKyBiL3NyYy9mcmluZ2Uu YwpAQCAtNDMzLDYgKzQzMywyMzEgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVtcHR5X2xpbmVf Yml0c1tdID0gewogICAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAw eDNjLCAweDAwfTsKIAogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJ UExFIENVUlNPUlMgKi8KKworLyogIDs7IEFVVEhPUjogIE5pa29sYWogU2NodW1hY2hlciAtLSBo dHRwczovL2dpdGh1Yi5jb20vbnNjaHVtL2ZyaW5nZS1oZWxwZXIuZWwKKyAgICAoZGVmdW4gKy1m cmluZ2UtaGVscGVyLWhleGFkZWNpbWFsICgmcmVzdCBzdHJpbmdzKQorICAgICJDb252ZXJ0IFNU UklOR1MgaW50byBhIHZlY3RvciB1c2FibGUgZm9yIGBkZWZpbmUtZnJpbmdlLWJpdG1hcCcuCisg ICAgRWFjaCBzdHJpbmcgaW4gU1RSSU5HUyByZXByZXNlbnRzIGEgbGluZSBvZiB0aGUgZnJpbmdl IGJpdG1hcC4KKyAgICBQZXJpb2RzICguKSBhcmUgYmFja2dyb3VuZC1jb2xvcmVkIHBpeGVsOyBY cyBhcmUgZm9yZWdyb3VuZC1jb2xvcmVkLiBUaGUKKyAgICBmcmluZ2UgYml0bWFwIGFsd2F5cyBp cyBhbGlnbmVkIHRvIHRoZSByaWdodC4gSWYgdGhlIGZyaW5nZSBoYXMgaGFsZgorICAgIHdpZHRo LCBvbmx5IHRoZSBsZWZ0IDQgcGl4ZWxzIG9mIGFuIDggcGl4ZWwgYml0bWFwIHdpbGwgYmUgc2hv d24uCisgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBkZWZpbmVzIGEgZGlhZ29u YWwgbGluZS4KKyAgICBcKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgIFwiWFguLi4u Li5cIgorICAgIFwiLi5YWC4uLi5cIgorICAgIFwiLi4uLlhYLi5cIgorICAgIFwiLi4uLi4uWFhc IlwpIgorICAgICAgKHVubGVzcyAoY2RyIHN0cmluZ3MpCisgICAgICAgIChzZXRxIHN0cmluZ3Mg KHNwbGl0LXN0cmluZyAoY2FyIHN0cmluZ3MpICJcbiIpKSkKKyAgICAgIChhcHBseSAndmVjdG9y CisgICAgICAgIChtYXBjYXIKKyAgICAgICAgICAobGFtYmRhIChzdHIpCisgICAgICAgICAgICAo bGV0ICgobnVtIDApKQorICAgICAgICAgICAgICAoZG9saXN0IChjIChzdHJpbmctdG8tbGlzdCBz dHIpKQorICAgICAgICAgICAgICAgIChzZXRxIG51bSAoKyAoKiBudW0gMikgKGlmIChlcSBjID8u KSAwIDEpKSkpCisgICAgICAgICAgICAgIChmb3JtYXQgIiUjLXgiIG51bSkpKQorICAgICAgICAg IHN0cmluZ3MpKSkKKyovCisKKy8qIDI0CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgor ICAgICAgInguLnh4Li4uIgorICAgICAgInguLi54eC4uIgorICAgICAgInguLi4ueHguIgorICAg ICAgIngueHh4eHh4IgorICAgICAgIngueHh4eHh4IgorICAgICAgInguLi4ueHguIgorICAgICAg InguLi54eC4uIgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgIngu Li4uLi4uIgorICAgICAgInguLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNf dmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlX2JpdHNbXSA9eworICAweDgwLCAweDgwLCAweDgwLCAw eDk4LCAweDhjLCAweDg2LCAweGJmLAorICAweGJmLCAweDg2LCAweDhjLCAweDk4LCAweDgwLCAw eDgwLCAweDgwfTsKKworLyogMjUKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisg ICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAg ICAieC4ueHguLngiCisgICAgICAieC4uLnh4LngiCisgICAgICAieC4uLi54eHgiCisgICAgICAi eC54eHh4eHgiCisgICAgICAieC54eHh4eHgiCisgICAgICAieC4uLi54eHgiCisgICAgICAieC4u Lnh4LngiCisgICAgICAieC4ueHguLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4u LngiCisgICAgICAieHh4eHh4eHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19ob2xs b3dfcmVjdGFuZ2xlX3JpZ2h0X2FuZ2xlX2JpdHNbXSA9eworICAweGZmLCAweDgxLCAweDgxLCAw eDk5LCAweDhkLCAweDg3LCAweGJmLAorICAweGJmLCAweDg3LCAweDhkLCAweDk5LCAweDgxLCAw eDgxLCAweGZmfTsKKworLyogMjYKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisg ICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAg ICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAi eC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4u Li4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4u LngiCisgICAgICAieHh4eHh4eHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19ob2xs b3dfcmVjdGFuZ2xlX2JpdHNbXSA9eworICAweGZmLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAw eDgxLCAweDgxLAorICAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweGZmfTsK KworLyogMjcKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieC4uLi4u Li4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4i CisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisg ICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAg ICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAi eC4uLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY192ZXJ0aWNhbF9iYXJfYml0 c1tdID17CisgIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsCisgIDB4 ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODB9OworCisvKiAyOAorICAgICgr LWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eC4uLi4uLiIKKyAgICAgICIueHgu Li4uLiIKKyAgICAgICIuLnh4Li4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAgICIuLi4ueHgu LiIKKyAgICAgICIuLi4uLnh4LiIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLnh4LiIK KyAgICAgICIuLi4ueHguLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAgICIuLnh4Li4uLiIKKyAg ICAgICIueHguLi4uLiIKKyAgICAgICJ4eC4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNo b3J0IG1jX3JpZ2h0X2FuZ2xlX2JpdHNbXSA9eworICAweGMwLCAweDYwLCAweDMwLCAweDE4LCAw eGMsIDB4NiwgMHgzLCAweDYsIDB4YywgMHgxOCwgMHgzMCwgMHg2MCwgMHhjMH07CisKKy8qIDI5 CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4Li4uLi4uIgorICAg ICAgInh4Li4uLi4uIgorICAgICAgIiB4eC4uLi4uIgorICAgICAgIi54eC4uLi4uIgorICAgICAg Ii4ueHguLi4uIgorICAgICAgIi4ueHguLi4uIgorICAgICAgIi4uLnh4Li4uIgorICAgICAgIi4u Lnh4Li4uIgorICAgICAgIi4uLi54eC4uIgorICAgICAgIi4uLi54eC4uIgorICAgICAgIi4uLi4u eHguIgorICAgICAgIi4uLi4ueHguIgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4 IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfYmFja3NsYXNoX2JpdHNbXSA9eworICAw eGMwLCAweGMwLCAweGUwLCAweDYwLCAweDMwLCAweDMwLCAweDE4LCAweDE4LCAweGMsIDB4Yywg MHg2LCAweDYsIDB4MywgMHgzfTsKKworLyogMzAKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFk ZWNpbWFsCisgICAgICAieHguLi4uLi4iCisgICAgICAieHguLi4uLi4iCisgICAgICAieHh4Li4u Li4iCisgICAgICAieHh4Li4uLi4iCisgICAgICAieC54eC4uLi4iCisgICAgICAieC54eC4uLi4i CisgICAgICAieC4ueHguLi4iCisgICAgICAieC4ueHguLi4iCisgICAgICAieC4uLnh4Li4iCisg ICAgICAieC4uLnh4Li4iCisgICAgICAieC4uLi54eC4iCisgICAgICAieC4uLi54eC4iCisgICAg ICAieC4uLi4ueHgiCisgICAgICAieC4uLi4ueHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9y dCBtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoX2JpdHNbXSA9eworICAweGMwLCAweGMwLCAweGUw LCAweGUwLCAweGIwLCAweGIwLCAweDk4LAorICAweDk4LCAweDhjLCAweDhjLCAweDg2LCAweDg2 LCAweDgzLCAweDgzfTsKKworLyogMzEKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFs CisgICAgICAiLnh4eHh4eC4iCisgICAgICAieHh4eC54Li4iCisgICAgICAieHh4eC54Li4iCisg ICAgICAieHh4eC54Li4iCisgICAgICAiLnh4eC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAg ICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAi Li4ueC54Li4iCisgICAgICAiLi4ueC54Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBt Y19waWxjcm93X2JpdHNbXSA9eworICAweDdlLCAweGY0LCAweGY0LCAweGY0LCAweDc0LCAweDE0 LCAweDE0LCAweDE0LCAweDE0LCAweDE0LCAweDE0fTsKKworLyogMzIKKyAgICAoKy1mcmluZ2Ut aGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHgueHguLi4iCisgICAgICAiLnh4Lnh4Li4iCisg ICAgICAiLi54eC54eC4iCisgICAgICAiLi4ueHgueHgiCisgICAgICAiLi54eC54eC4iCisgICAg ICAiLnh4Lnh4Li4iCisgICAgICAieHgueHguLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9y dCBtY19yaWdodF9kb3VibGVfYW5nbGVfYml0c1tdID17CisgIDB4ZDgsIDB4NmMsIDB4MzYsIDB4 MWIsIDB4MzYsIDB4NmMsIDB4ZDh9OworCisvKiAzMworICAgICgrLWZyaW5nZS1oZWxwZXItaGV4 YWRlY2ltYWwKKyAgICAgICIuLnh4eHguLiIKKyAgICAgICIueHh4eHh4LiIKKyAgICAgICJ4Li54 eC4ueCIKKyAgICAgICJ4Li54eC4ueCIKKyAgICAgICJ4eHh4eHh4eCIKKyAgICAgICJ4eC4uLi54 eCIKKyAgICAgICJ4eHguLnh4eCIKKyAgICAgICIueHh4eHh4LiIKKyAgICAgICIuLnh4eHguLiIp CisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3NtaWxleV9mYWNlX2JpdHNbXSA9eworICAw eDNjLCAweDdlLCAweDk5LCAweDk5LCAweGZmLCAweGMzLCAweGU3LCAweDdlLCAweDNjfTsKKwor LyogQWRkIHRoZSBmb2xsb3dpbmcgYml0bWFwczoKKyAgKGRlZmluZS1mcmluZ2UtYml0bWFwICdi cmVha3BvaW50ICJceDNjXHg3ZVx4ZmZceGZmXHhmZlx4ZmZceDdlXHgzYyIpCisgIChkZWZpbmUt ZnJpbmdlLWJpdG1hcCAnaG9sbG93LXJpZ2h0LXRyaWFuZ2xlICJceGUwXHg5MFx4ODhceDg0XHg4 NFx4ODhceDkwXHhlMCIpICovCisKKy8qIGVuZCBNVUxUSVBMRSBDVVJTT1JTICovCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKworCiAjZGVmaW5lIEJZVEVTX1BFUl9CSVRNQVBfUk9XICAoc2l6 ZW9mICh1bnNpZ25lZCBzaG9ydCkpCiAjZGVmaW5lIFNUQU5EQVJEX0JJVE1BUF9IRUlHSFQoYml0 cykgKHNpemVvZiAoYml0cykvQllURVNfUEVSX0JJVE1BUF9ST1cpCiAjZGVmaW5lIEZSQklUUyhi aXRzKSAgYml0cywgU1RBTkRBUkRfQklUTUFQX0hFSUdIVCAoYml0cykKQEAgLTQ2Niw2ICs2OTEs MzUgQEAgc3RhdGljIHN0cnVjdCBmcmluZ2VfYml0bWFwIHN0YW5kYXJkX2JpdG1hcHNbXSA9CiAg IHsgRlJCSVRTICh2ZXJ0aWNhbF9iYXJfYml0cyksICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9D RU5URVIsIDAgfSwKICAgeyBGUkJJVFMgKGhvcml6b250YWxfYmFyX2JpdHMpLCAgICAgOCwgMCwg QUxJR05fQklUTUFQX0JPVFRPTSwgMCB9LAogICB7IEZSQklUUyAoZW1wdHlfbGluZV9iaXRzKSwg ICAgICAgICA4LCAzLCBBTElHTl9CSVRNQVBfVE9QLCAgICAwIH0sCisKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgLyogMjQgKi8KKyAgeyBG UkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZV9iaXRzKSwgICAgIDgsIDAsIEFMSUdO X0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjUgKi8KKyAgeyBGUkJJVFMgKG1jX2hvbGxvd19y ZWN0YW5nbGVfcmlnaHRfYW5nbGVfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAg fSwKKyAgLyogMjYgKi8KKyAgeyBGUkJJVFMgKG1jX2hvbGxvd19yZWN0YW5nbGVfYml0cyksICAg ICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjcgKi8KKyAg eyBGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iaXRzKSwgICAgICAgICAgICAgICAgIDgsIDAsIEFM SUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjggKi8KKyAgeyBGUkJJVFMgKG1jX3JpZ2h0 X2FuZ2xlX2JpdHMpLCAgICAgICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIs IDAgfSwKKyAgLyogMjkgKi8KKyAgeyBGUkJJVFMgKG1jX2JhY2tzbGFzaF9iaXRzKSwgICAgICAg ICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzAgKi8K KyAgeyBGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2hfYml0cyksICAgICAgIDgsIDAs IEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzEgKi8KKyAgeyBGUkJJVFMgKG1jX3Bp bGNyb3dfYml0cyksICAgICAgICAgICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5U RVIsIDAgfSwKKyAgLyogMzIgKi8KKyAgeyBGUkJJVFMgKG1jX3JpZ2h0X2RvdWJsZV9hbmdsZV9i aXRzKSwgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzMg Ki8KKyAgeyBGUkJJVFMgKG1jX3NtaWxleV9mYWNlX2JpdHMpLCAgICAgICAgICAgICAgICAgIDgs IDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisKKwogfTsKIAogI2RlZmluZSBOT19GUklOR0VfQklUTUFQIDAKQEAgLTE3MTUsNiArMTk2OSw3 NyBAQCBJZiBuaWwsIGFsc28gY29udGludWUgbGluZXMgd2hpY2ggYXJlIGV4YWN0bHkgYXMgd2lk ZSBhcyB0aGUgd2luZG93LiAgKi8pOwogICBERUZWQVJfTElTUCAoImZyaW5nZS1iaXRtYXBzIiwg VmZyaW5nZV9iaXRtYXBzLAogICAgIGRvYzogLyogTGlzdCBvZiBmcmluZ2UgYml0bWFwIHN5bWJv bHMuICAqLyk7CiAgIFZmcmluZ2VfYml0bWFwcyA9IFFuaWw7CisKKworLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgLyogKGdldCAnZW1wdHktbGlu ZSAnZnJpbmdlKSA9PiAyMyA9PiB0aGUgbGFzdCBzdGFuZGFyZC1iaXRtYXAgYmVmb3JlIHRoaXMg b25lLgorICBTZWUgYGZyaW5nZS5lbGAuICovCisKKyAgLyogMjQgKi8KKyAgREVGU1lNIChRbWNf dmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlLCAiKy12ZXJ0aWNhbC1iYXItcmlnaHQtYW5nbGUiKTsK KyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYW5nbGUs IFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYW5nbGUs IFFmcmluZ2UsIG1ha2VfZml4bnVtICgyNCkpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJhci1y aWdodC1hbmdsZSAnZnJpbmdlKSA9PiAyNCAqLworCisgIC8qIDI1ICovCisgIERFRlNZTSAoUW1j X2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYW5nbGUsICIrLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQt YW5nbGUiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xsb3dfcmVjdGFuZ2xl X3JpZ2h0X2FuZ2xlLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfaG9sbG93X3JlY3Rh bmdsZV9yaWdodF9hbmdsZSwgUWZyaW5nZSwgbWFrZV9maXhudW0gKDI1KSk7CisgIC8qIChnZXQg JystaG9sbG93LXJlY3RhbmdsZS1yaWdodC1hbmdsZSAnZnJpbmdlKSA9PiAyNSAqLworCisgIC8q IDI2ICovCisgIERFRlNZTSAoUW1jX2hvbGxvd19yZWN0YW5nbGUsICIrLWhvbGxvdy1yZWN0YW5n bGUiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xsb3dfcmVjdGFuZ2xlLCBW ZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfaG9sbG93X3JlY3RhbmdsZSwgUWZyaW5nZSwg bWFrZV9maXhudW0gKDI2KSk7CisgIC8qIChnZXQgJystaG9sbG93LXJlY3RhbmdsZSAnZnJpbmdl KSA9PiAyNiAqLworCisgIC8qIDI3ICovCisgIERFRlNZTSAoUW1jX3ZlcnRpY2FsX2JhciwgIist dmVydGljYWwtYmFyIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxf YmFyLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdmVydGljYWxfYmFyLCBRZnJpbmdl LCBtYWtlX2ZpeG51bSAoMjcpKTsKKyAgLyogKGdldCAnKy12ZXJ0aWNhbC1iYXIgJ2ZyaW5nZSkg PT4gMjcgKi8KKworICAvKiAyOCAqLworICBERUZTWU0gKFFtY19yaWdodF9hbmdsZSwgIistcmln aHQtYW5nbGUiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19yaWdodF9hbmdsZSwg VmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3JpZ2h0X2FuZ2xlLCBRZnJpbmdlLCBtYWtl X2ZpeG51bSAoMjgpKTsKKyAgLyogKGdldCAnKy1yaWdodC1hbmdsZSAnZnJpbmdlKSA9PiAyOCAq LworCisgIC8qIDI5ICovCisgIERFRlNZTSAoUW1jX2JhY2tzbGFzaCwgIistYmFja3NsYXNoIik7 CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfYmFja3NsYXNoLCBWZnJpbmdlX2JpdG1h cHMpOworICBGcHV0IChRbWNfYmFja3NsYXNoLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMjkpKTsK KyAgLyogKGdldCAnKy1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMjkgKi8KKworICAvKiAzMCAqLwor ICBERUZTWU0gKFFtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoLCAiKy12ZXJ0aWNhbC1iYXItYmFj a3NsYXNoIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxfYmFyX2Jh Y2tzbGFzaCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jhcl9iYWNr c2xhc2gsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgzMCkpOworICAvKiAoZ2V0ICcrLXZlcnRpY2Fs LWJhci1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMzAgKi8KKworICAvKiAzMSAqLworICBERUZTWU0g KFFtY19waWxjcm93LCAiKy1waWxjcm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChR bWNfcGlsY3JvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3BpbGNyb3csIFFmcmlu Z2UsIG1ha2VfZml4bnVtICgzMSkpOworICAvKiAoZ2V0ICcrLXBpbGNyb3cgJ2ZyaW5nZSkgPT4g MzEgKi8KKworICAvKiAzMiAqLworICBERUZTWU0gKFFtY19yaWdodF9kb3VibGVfYW5nbGUsICIr LXJpZ2h0LWRvdWJsZS1hbmdsZSIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3Jp Z2h0X2RvdWJsZV9hbmdsZSwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3JpZ2h0X2Rv dWJsZV9hbmdsZSwgUWZyaW5nZSwgbWFrZV9maXhudW0gKDMyKSk7CisgIC8qIChnZXQgJystcmln aHQtZG91YmxlLWFuZ2xlICdmcmluZ2UpID0+IDMyICovCisKKyAgLyogMzMgKi8KKyAgREVGU1lN IChRbWNfc21pbGV5X2ZhY2UsICIrLXNtaWxleS1mYWNlIik7CisgIFZmcmluZ2VfYml0bWFwcyA9 IEZjb25zIChRbWNfc21pbGV5X2ZhY2UsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19z bWlsZXlfZmFjZSwgUWZyaW5nZSwgbWFrZV9maXhudW0gKDMzKSk7CisgIC8qIChnZXQgJystc21p bGV5LWZhY2UgJ2ZyaW5nZSkgPT4gMzMgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisK KwogfQogCiAvKiBHYXJiYWdlIGNvbGxlY3Rpb24gaG9vayAqLwpkaWZmIC0tZ2l0IGEvc3JjL2tl eWJvYXJkLmMgYi9zcmMva2V5Ym9hcmQuYwppbmRleCA4ZWExNWQzLi5hODlmMzIyIDEwMDY0NAot LS0gYS9zcmMva2V5Ym9hcmQuYworKysgYi9zcmMva2V5Ym9hcmQuYwpAQCAtMTIyNCw2ICsxMjI0 LDI5IEBAIHN0YXRpYyBpbnQgcmVhZF9rZXlfc2VxdWVuY2UgKExpc3BfT2JqZWN0ICosIExpc3Bf T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCwgYm9vbCwgYm9vbCwg Ym9vbCk7CiBzdGF0aWMgdm9pZCBhZGp1c3RfcG9pbnRfZm9yX3Byb3BlcnR5IChwdHJkaWZmX3Qs IGJvb2wpOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09S UyAqLworCitzdGF0aWMgdm9pZAora2JkX21jX2FjdGl2YXRlX211bHRpcGxlX2N1cnNvcnMgKHZv aWQpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cgKHNlbGVjdGVk X3dpbmRvdyk7CisgIHctPm1jLmRyYXdfbXVsdGlwbGVfY3Vyc29ycyA9IHRydWU7CisgIHctPm1j LmVyYXNlX211bHRpcGxlX2N1cnNvcnMgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZAora2JkX21j X2FjdGl2YXRlX2Nyb3NzaGFpcnMgKHZvaWQpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNv ZGVfbGl2ZV93aW5kb3cgKHNlbGVjdGVkX3dpbmRvdyk7CisgIHctPm1jLmRyYXdfY3Jvc3NoYWly cyA9IHRydWU7CisgIHctPm1jLmVyYXNlX2Nyb3NzaGFpcnMgPSB0cnVlOworfQorCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKworCiBMaXNwX09iamVjdAogY29tbWFuZF9sb29wXzEgKHZvaWQp CiB7CkBAIC0xNDE5LDYgKzE0NDIsMTUgQEAgY29tbWFuZF9sb29wXzEgKHZvaWQpCiAgICAgICBW cmVhbF90aGlzX2NvbW1hbmQgPSBjbWQ7CiAgICAgICBzYWZlX3J1bl9ob29rcyAoUXByZV9jb21t YW5kX2hvb2spOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VS U09SUyAqLworCisgICAgICBrYmRfbWNfYWN0aXZhdGVfbXVsdGlwbGVfY3Vyc29ycyAoKTsKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAgYWxyZWFkeV9hZGp1c3RlZCA9IDA7 CiAKICAgICAgIGlmIChOSUxQIChWdGhpc19jb21tYW5kKSkKQEAgLTI0NDgsNyArMjQ4MCw3IEBA IHJlYWRfY2hhciAoaW50IGNvbW1hbmRmbGFnLCBMaXNwX09iamVjdCBtYXAsCiAJICBpZiAoaGVs cF9lY2hvX3Nob3dpbmdfcCAmJiAhRVEgKHNlbGVjdGVkX3dpbmRvdywgbWluaWJ1Zl93aW5kb3cp KQogCSAgICByZWRpc3BsYXlfcHJlc2VydmVfZWNob19hcmVhICg1KTsKIAkgIGVsc2UKLQkgICAg cmVkaXNwbGF5ICgpOworCSAgICByZWRpc3BsYXkgKDEpOwogCiAJICBpZiAoIWlucHV0X3BlbmRp bmcpCiAJICAgIC8qIE5vcm1hbCBjYXNlOiBubyBpbnB1dCBhcnJpdmVkIGR1cmluZyByZWRpc3Bs YXkuICAqLwpAQCAtMjYyOCw3ICsyNjYwLDcgQEAgcmVhZF9jaGFyIChpbnQgY29tbWFuZGZsYWcs IExpc3BfT2JqZWN0IG1hcCwKICAgICB7CiAgICAgICBGZG9fYXV0b19zYXZlIChhdXRvX3NhdmVf bm9fbWVzc2FnZSA/IFF0IDogUW5pbCwgUW5pbCk7CiAgICAgICAvKiBIb29rcyBjYW4gYWN0dWFs bHkgY2hhbmdlIHNvbWUgYnVmZmVycyBpbiBhdXRvIHNhdmUuICAqLwotICAgICAgcmVkaXNwbGF5 ICgpOworICAgICAgcmVkaXNwbGF5ICgyKTsKICAgICB9CiAKICAgLyogVHJ5IHJlYWRpbmcgdXNp bmcgYW4gWCBtZW51LgpAQCAtMjY5Miw3ICsyNzI0LDcgQEAgcmVhZF9jaGFyIChpbnQgY29tbWFu ZGZsYWcsIExpc3BfT2JqZWN0IG1hcCwKIAkgICAgICAmJiAhIENPTlNQIChWdW5yZWFkX2NvbW1h bmRfZXZlbnRzKSkKIAkgICAgewogCSAgICAgIEZkb19hdXRvX3NhdmUgKGF1dG9fc2F2ZV9ub19t ZXNzYWdlID8gUXQgOiBRbmlsLCBRbmlsKTsKLQkgICAgICByZWRpc3BsYXkgKCk7CisJICAgICAg cmVkaXNwbGF5ICgzKTsKIAkgICAgfQogCX0KIApAQCAtMjc5NSw3ICsyODI3LDcgQEAgcmVhZF9j aGFyIChpbnQgY29tbWFuZGZsYWcsIExpc3BfT2JqZWN0IG1hcCwKICAgICB7CiAgICAgICBpZiAo Y29tbWFuZGZsYWcgPj0gMAogCSAgJiYgIWlucHV0X3BlbmRpbmcgJiYgIWRldGVjdF9pbnB1dF9w ZW5kaW5nX3J1bl90aW1lcnMgKDApKQotCXJlZGlzcGxheSAoKTsKKwlyZWRpc3BsYXkgKDQpOwog CiAgICAgICBnb3RvIHdyb25nX2tib2FyZDsKICAgICB9CkBAIC0zMDkzLDcgKzMxMjUsNyBAQCBy ZWFkX2NoYXIgKGludCBjb21tYW5kZmxhZywgTGlzcF9PYmplY3QgbWFwLAogICAgICAgLyogUmVt b3ZlIHRoZSBoZWxwIGZyb20gdGhlIGZyYW1lLiAgKi8KICAgICAgIHVuYmluZF90byAoY291bnQs IFFuaWwpOwogCi0gICAgICByZWRpc3BsYXkgKCk7CisgICAgICByZWRpc3BsYXkgKDUpOwogICAg ICAgaWYgKEVRIChjLCBtYWtlX2ZpeG51bSAoMDQwKSkpCiAJewogCSAgY2FuY2VsX2VjaG9pbmcg KCk7CmRpZmYgLS1naXQgYS9zcmMvbGlzcC5oIGIvc3JjL2xpc3AuaAppbmRleCA1ZWNjNDhiLi5l M2UyYWVlIDEwMDY0NAotLS0gYS9zcmMvbGlzcC5oCisrKyBiL3NyYy9saXNwLmgKQEAgLTM1Nzcs NyArMzU3Nyw3IEBAIGV4dGVybiB2b2lkIG1lc3NhZ2Vfd2l0aF9zdHJpbmcgKGNvbnN0IGNoYXIg KiwgTGlzcF9PYmplY3QsIGJvb2wpOwogZXh0ZXJuIHZvaWQgbWVzc2FnZV9sb2dfbWF5YmVfbmV3 bGluZSAodm9pZCk7CiBleHRlcm4gdm9pZCB1cGRhdGVfZWNob19hcmVhICh2b2lkKTsKIGV4dGVy biB2b2lkIHRydW5jYXRlX2VjaG9fYXJlYSAocHRyZGlmZl90KTsKLWV4dGVybiB2b2lkIHJlZGlz cGxheSAodm9pZCk7CitleHRlcm4gdm9pZCByZWRpc3BsYXkgKGludCk7CiAKIHZvaWQgc2V0X2Zy YW1lX2N1cnNvcl90eXBlcyAoc3RydWN0IGZyYW1lICosIExpc3BfT2JqZWN0KTsKIGV4dGVybiB2 b2lkIHN5bXNfb2ZfeGRpc3AgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL25zdGVybS5tIGIvc3Jj L25zdGVybS5tCmluZGV4IDY4YWQ2NDYuLmQ1OTUyYjggMTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0u bQorKysgYi9zcmMvbnN0ZXJtLm0KQEAgLTE5OTIsNyArMTk5Miw3IEBAIHNvIHNvbWUga2V5IHBy ZXNzZXMgKFRBQikgYXJlIHN3YWxsb3dlZCBieSB0aGUgc3lzdGVtLiAgKi8KICAgICAgICAgICBb W2NoaWxkIHBhcmVudFdpbmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6Y2hpbGRdOwogI2lmIGRlZmlu ZWQgKE5TX0lNUExfQ09DT0EpICYmIE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAx MDAwCiAjaWYgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEwMDAKLSAgICAgICAg ICBpZiAoW2NoaWxkIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0QWNjZXNzaWJpbGl0 eVN1YnJvbGU6KV0KKyAgICAgICAgICBpZiAoW2NoaWxkIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs ZWN0b3Ioc2V0QWNjZXNzaWJpbGl0eVN1YnJvbGU6KV0pCiAjZW5kaWYKICAgICAgICAgICAgICAg W2NoaWxkIHNldEFjY2Vzc2liaWxpdHlTdWJyb2xlOk5TQWNjZXNzaWJpbGl0eVN0YW5kYXJkV2lu ZG93U3Vicm9sZV07CiAjZW5kaWYKQEAgLTIwMDYsNyArMjAwNiw3IEBAIHNvIHNvbWUga2V5IHBy ZXNzZXMgKFRBQikgYXJlIHN3YWxsb3dlZCBieSB0aGUgc3lzdGVtLiAgKi8KICAgICAgICAgICAg ICAgICAgICAgICAgICBvcmRlcmVkOiBOU1dpbmRvd0Fib3ZlXTsKICNpZiBkZWZpbmVkIChOU19J TVBMX0NPQ09BKSAmJiBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMAogI2lm IE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCi0gICAgICAgICAgaWYgKFtj aGlsZCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldEFjY2Vzc2liaWxpdHlTdWJyb2xl OildCisgICAgICAgICAgaWYgKFtjaGlsZCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNl dEFjY2Vzc2liaWxpdHlTdWJyb2xlOildKQogI2VuZGlmCiAgICAgICAgICAgICAgIFtjaGlsZCBz ZXRBY2Nlc3NpYmlsaXR5U3Vicm9sZTpOU0FjY2Vzc2liaWxpdHlGbG9hdGluZ1dpbmRvd1N1YnJv bGVdOwogI2VuZGlmCkBAIC0zMTc4LDggKzMxNzgsMjggQEAgTm90ZSB0aGF0IENVUlNPUl9XSURU SCBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIChoKWJhciBjdXJzb3JzLgogCiAgIGlmICgocGh5c19j dXJzb3JfZ2x5cGggPSBnZXRfcGh5c19jdXJzb3JfZ2x5cGggKHcpKSA9PSBOVUxMKQogICAgIHsK LSAgICAgIGlmIChnbHlwaF9yb3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3AKLSAgICAgICAg ICAmJiB3LT5waHlzX2N1cnNvci5ocG9zID49IGdseXBoX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQor CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisg ICAgICAvKiBUaGlzIG1vZGlmaWNhdGlvbiBlbmFibGVzIHBsYWNlbWVudCBvZiB0aGUgY3Vyc29y LWluLWZyaW5nZSBiaXRtYXAgd2hlbgorICAgICAgdGhlIHdpbmRvdy13aWR0aCBpcyBzbGlnaHRs eSBsZXNzIHRoYW4gYGdseXBoX3Jvdy0+ZXhhY3Rfd2luZG93X3dpZHRoX2xpbmVfcGAuCisgICAg ICBUaGlzIG1vZGlmaWNhdGlvbiBhbHNvIHByZXZlbnRzIGRyYXdpbmcgdGhlIHJlYWwgY3Vyc29y IG9uIHRoZSBmcmluZ2UgKGluc3RlYWQKKyAgICAgIG9mIHVzaW5nIHRoZSBjdXJzb3ItaW4tZnJp bmdlIGJpdG1hcCkgaW4gdGhlIGFib3ZlLW1lbnRpb25lZCBjaXJjdW1zdGFuY2UuCisgICAgICBT ZWUgdGhlIGZvbGxvd2luZyByZWxhdGVkIHBhdGNoZXM6CisgICAgICAtICBKdWx5IDE5LCAyMDE2 OiAgYmY1ZGRkZWQ3MGMxMWVkYWYzNTE0YjI1ZGEyN2ZjNzFjZmI4ZTk2NQorICAgICAgLSAgTWF5 IDIxLCAyMDE2OiAgZTUwMTVjNWQ5NjMyYTBiZjY4NWMwOTMyNDlhZTRhN2QzZTgyNWIxMworICAg ICAgU2VlIHRoZSBmb2xsb3dpbmcgYnVnIHJlcG9ydHM6ICAjMTY4NTYgYW5kICMyOTIzMy4gKi8K KyAgICAgIGludCBmcmFtZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09MVU1OX1dJRFRIIChmKTsKKyAg ICAgIGludCB0ZXh0X2FyZWFfd2lkdGggPSB3aW5kb3dfYm94X3dpZHRoICh3LCBURVhUX0FSRUEp OworICAgICAgYm9vbCBjdXJzb3JfaW5fZnJpbmdlX3AgPSB3LT5waHlzX2N1cnNvci54ICsgZnJh bWVfY2hhcl93aWR0aCA+PSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICBpZiAoKGdseXBoX3Jvdy0+ ZXhhY3Rfd2luZG93X3dpZHRoX2xpbmVfcAorICAgICAgICAgICAgJiYgdy0+cGh5c19jdXJzb3Iu aHBvcyA+PSBnbHlwaF9yb3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICAgICAgICB8fCBjdXJzb3Jf aW5fZnJpbmdlX3ApCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAgICAgICAgIHsKICAg ICAgICAgICBnbHlwaF9yb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IDE7CiAgICAgICAgICAgZHJh d19mcmluZ2VfYml0bWFwICh3LCBnbHlwaF9yb3csIDApOwpAQCAtMzIxNSwyMyArMzIzNSwxMDcg QEAgTm90ZSB0aGF0IENVUlNPUl9XSURUSCBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIChoKWJhciBj dXJzb3JzLgogICAgICAgaCA9IGN1cnNvcl9oZWlnaHQ7CiAgICAgfQogCi0gIHIub3JpZ2luLngg PSBmeCwgci5vcmlnaW4ueSA9IGZ5OwotICByLnNpemUuaGVpZ2h0ID0gaDsKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgci5vcmlnaW4ueCA9 ICh3LT5tYy5meCA+IDApCisgICAgICAgICAgICAgICA/IHctPm1jLmZ4CisgICAgICAgICAgICAg ICA6IGZ4OworICByLm9yaWdpbi55ID0gKHctPm1jLmZ5ID4gMCkKKyAgICAgICAgICAgICAgID8g dy0+bWMuZnkKKyAgICAgICAgICAgICAgIDogZnk7CisgIHIuc2l6ZS5oZWlnaHQgPSAody0+bWMu aCA+IDApCisgICAgICAgICAgICAgICAgICA/IHctPm1jLmgKKyAgICAgICAgICAgICAgICAgIDog aDsKICAgci5zaXplLndpZHRoID0gdy0+cGh5c19jdXJzb3Jfd2lkdGg7CiAKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCisKICAgLyogUHJldmVudCB0aGUgY3Vyc29yIGZyb20gYmVpbmcgZHJh d24gb3V0c2lkZSB0aGUgdGV4dCBhcmVhLiAgKi8KICAgaWYgKG5zX2NsaXBfdG9fcm93ICh3LCBn bHlwaF9yb3csIFRFWFRfQVJFQSwgTk8pKQogICAgIHsKICAgICAgIGZhY2UgPSBGQUNFX0ZST01f SURfT1JfTlVMTCAoZiwgcGh5c19jdXJzb3JfZ2x5cGgtPmZhY2VfaWQpOwotICAgICAgaWYgKGZh Y2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKQotICAgICAgICAgID09IG5zX2luZGV4X2Nv bG9yIChGUkFNRV9DVVJTT1JfQ09MT1IgKGYpLCBmKSkKKworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogRVhBTVBMRSBPRiBIT1cgVE8gTE9P Sy1VUCBBIENPTE9SOgorICBlbnVtIGZhY2VfaWQgZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNl ICh3LCBmLCBpbnRlcm4gKCIrLXZlcnRpY2FsLWJhci1mYWNlIiksIHRydWUpOworICBzdHJ1Y3Qg ZmFjZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CisgIE5TQ29sb3IgKmNvbG9y ID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIGYp OworKi8KKworICBpZiAody0+bWMuZ2x5cGhfZmxhdm9yID09IE1DX0dMWVBICisgICAgICB8fCB3 LT5tYy5nbHlwaF9mbGF2b3IgPT0gTUNfR0xZUEhMRVNTCisgICAgICB8fCB3LT5tYy5nbHlwaF9m bGF2b3IgPT0gTUNfR0xZUEhfVEFCKQorICAgIHsKKyAgICAgIFtbTlNDb2xvciBjb2xvcldpdGhD YWxpYnJhdGVkUmVkOiB3LT5tYy5yZWQgZ3JlZW46IHctPm1jLmdyZWVuIGJsdWU6IHctPm1jLmJs dWUgYWxwaGE6IDEuMF0gc2V0XTsKKyAgICAgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRz OworICAgICAgQ0hFQ0tfQlVGRkVSIChidWYpOworICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhC VUZGRVIgKGJ1Zik7CisgICAgICBib29sIHJlZ2lvbl9hY3RpdmVfcCA9ICghTklMUCAoVnRyYW5z aWVudF9tYXJrX21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAo QlZBUiAoYiwgbWFya19hY3RpdmUpKSk7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2JlZ2lubmlu ZyA9IChyZWdpb25fYWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9iZWdpbm5pbmcgKCkpIDog LTE7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2VuZCA9IChyZWdpb25fYWN0aXZlX3ApID8gWEZJ WE5VTSAoRnJlZ2lvbl9lbmQgKCkpIDogLTE7CisgICAgICBib29sIHJlZ2lvbl9pbl9ib3VuZHNf cCA9IChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IHctPm1jLnBvc2ludCA+PSByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiB3LT5tYy5wb3NpbnQgPCByZWdpb25fZW5kKTsKKyAgICAgIGlmIChyZWdp b25fYWN0aXZlX3AKKyAgICAgICAgICAmJiByZWdpb25faW5fYm91bmRzX3AKKyAgICAgICAgICAm JiBhY3RpdmVfcCkKICAgICAgICAgewotICAgICAgICAgIFtuc19sb29rdXBfaW5kZXhlZF9jb2xv ciAoTlNfRkFDRV9GT1JFR1JPVU5EIChmYWNlKSwgZikgc2V0XTsKLSAgICAgICAgICBob2xsb3df Y29sb3IgPSBGUkFNRV9DVVJTT1JfQ09MT1IgKGYpOworICAgICAgICAgIGVudW0gZmFjZV9pZCBo b2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGlu dGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1yZWdpb24tZmFjZSIpLCB0cnVlKTsKKyAgICAgICAg ICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZSA9IEZBQ0VfRlJPTV9JRCAo ZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZV9pZCk7CisgICAgICAgICAgTlNDb2xvciAqaG9s bG93X2FjdGl2ZV9yZWdpb25fY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFD RV9CQUNLR1JPVU5EIChob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlKSwgZik7CisgICAgICAgICAg aG9sbG93X2NvbG9yID0gaG9sbG93X2FjdGl2ZV9yZWdpb25fY29sb3I7CiAgICAgICAgIH0KKyAg ICAgICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICAgICYmICFyZWdp b25faW5fYm91bmRzX3AKKyAgICAgICAgICAgICAgICAgJiYgYWN0aXZlX3ApCisgICAgICAgICAg eworICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNl X2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv ci1yZWdpb24tZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3df YWN0aXZlX3JlZ2lvbl9vdXRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9y ZWdpb25fb3V0X2ZhY2VfaWQpOworICAgICAgICAgICAgTlNDb2xvciAqaG9sbG93X2FjdGl2ZV9y ZWdpb25fb3V0X2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdS T1VORCAoaG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2UpLCBmKTsKKyAgICAgICAgICAgIGhv bGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9jb2xvcjsKKyAgICAgICAgICB9 CisgICAgICAgICAgZWxzZSBpZiAoIXJlZ2lvbl9hY3RpdmVfcCAmJiBhY3RpdmVfcCkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9p ZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3It ZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVf ZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAg ICAgICAgTlNDb2xvciAqaG9sbG93X2FjdGl2ZV9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2Nv bG9yIChOU19GQUNFX0JBQ0tHUk9VTkQgKGhvbGxvd19hY3RpdmVfZmFjZSksIGYpOworICAgICAg ICAgICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX2NvbG9yOworICAgICAgICAgICAg fQorICAgICAgICAgICAgLyogVGhlIHJlZ2lvbiBpcyBfbm90XyB2aXNpYmxlIGluIHRoZSBpbmFj dGl2ZSB3aW5kb3cgYmVjYXVzZSB0aGUgb3ZlcmxheSB3aW5kb3cgcHJvcGVydHkgaXMgdXNlZC4g Ki8KKyAgICAgICAgICAgIGVsc2UgaWYgKCFhY3RpdmVfcCkKKyAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCA9IGxvb2t1 cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUt ZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2luYWN0 aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkKTsKKyAg ICAgICAgICAgICAgICBOU0NvbG9yICpob2xsb3dfaW5hY3RpdmVfY29sb3IgPSBuc19sb29rdXBf aW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChob2xsb3dfaW5hY3RpdmVfZmFjZSks IGYpOworICAgICAgICAgICAgICAgIGhvbGxvd19jb2xvciA9IGhvbGxvd19pbmFjdGl2ZV9jb2xv cjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmIChmYWNlICYmIE5TX0ZB Q0VfQkFDS0dST1VORCAoZmFjZSkgPT0gbnNfaW5kZXhfY29sb3IgKEZSQU1FX0NVUlNPUl9DT0xP UiAoZiksIGYpKQorICAgICAgICAgICAgICAgIGhvbGxvd19jb2xvciA9IEZSQU1FX0NVUlNPUl9D T0xPUiAoZik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqZGVmYXVsdF9iZ19mYWNlID0gRkFDRV9GUk9N X0lEIChmLCBERUZBVUxUX0ZBQ0VfSUQpOworICAgICAgICAgICAgICAgICAgICBbbnNfbG9va3Vw X2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFDS0dST1VORCAoZGVmYXVsdF9iZ19mYWNlKSwgZikg c2V0XTsKKyAgICAgICAgICAgICAgICAgICAgaG9sbG93X2NvbG9yID0gRlJBTUVfQ1VSU09SX0NP TE9SIChmKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmFjZSAm JiBOU19GQUNFX0JBQ0tHUk9VTkQgKGZhY2UpID09IG5zX2luZGV4X2NvbG9yIChGUkFNRV9DVVJT T1JfQ09MT1IgKGYpLCBmKSkKKyAgICAgIHsKKyAgICAgICAgW25zX2xvb2t1cF9pbmRleGVkX2Nv bG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGZhY2UpLCBmKSBzZXRdOworICAgICAgICBob2xsb3df Y29sb3IgPSBGUkFNRV9DVVJTT1JfQ09MT1IgKGYpOworICAgICAgfQogICAgICAgZWxzZQogICAg ICAgICBbRlJBTUVfQ1VSU09SX0NPTE9SIChmKSBzZXRdOwogCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKworCiAjaWZkZWYgTlNfSU1QTF9DT0NPQQogICAgICAgLyogVE9ETzogVGhpcyBtYWtl cyBkcmF3aW5nIG9mIGN1cnNvciBwbHVzIHRoYXQgb2YgcGh5c19jdXJzb3JfZ2x5cGgKICAgICAg ICAgIGF0b21pYy4gIENsZWFuZXIgd2F5cyBvZiBkb2luZyB0aGlzIHNob3VsZCBiZSBpbnZlc3Rp Z2F0ZWQuCkBAIC0zMjYwLDIwICszMzY0LDQ1IEBAIE5vdGUgdGhhdCBDVVJTT1JfV0lEVEggaXMg bWVhbmluZ2Z1bCBvbmx5IGZvciAoaCliYXIgY3Vyc29ycy4KICAgICAgICAgICBicmVhazsKICAg ICAgICAgY2FzZSBCQVJfQ1VSU09SOgogICAgICAgICAgIHMgPSByOwotICAgICAgICAgIC8qIElm IHRoZSBjaGFyYWN0ZXIgdW5kZXIgY3Vyc29yIGlzIFIyTCwgZHJhdyB0aGUgYmFyIGN1cnNvcgot ICAgICAgICAgICAgIG9uIHRoZSByaWdodCBvZiBpdHMgZ2x5cGgsIHJhdGhlciB0aGFuIG9uIHRo ZSBsZWZ0LiAgKi8KLSAgICAgICAgICBjdXJzb3JfZ2x5cGggPSBnZXRfcGh5c19jdXJzb3JfZ2x5 cGggKHcpOwotICAgICAgICAgIGlmICgoY3Vyc29yX2dseXBoLT5yZXNvbHZlZF9sZXZlbCAmIDEp ICE9IDApCi0gICAgICAgICAgICBzLm9yaWdpbi54ICs9IGN1cnNvcl9nbHlwaC0+cGl4ZWxfd2lk dGggLSBzLnNpemUud2lkdGg7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU SVBMRSBDVVJTT1JTICovCisKKworICAgIC8qIEBsYXdsaXN0IGlzIGZvY3VzaW5nIHRoZSBpbml0 aWFsIGRldmVsb3BtZW50IG9mIGZlYXR1cmUgcmVxdWVzdHMgIzE3Njg0CisgICAgYW5kICMyMjg3 MyBvbiBMMlIgbGFuZ3VhZ2VzLiAqLworICAgIGlmICh3LT5tYy5nbHlwaF9mbGF2b3IgIT0gTUNf R0xZUEgKKyAgICAgICAgJiYgdy0+bWMuZ2x5cGhfZmxhdm9yICE9IE1DX0dMWVBITEVTUworICAg ICAgICAmJiB3LT5tYy5nbHlwaF9mbGF2b3IgIT0gTUNfR0xZUEhfVEFCKQorICAgICAgeworICAg ICAgLyogSWYgdGhlIGNoYXJhY3RlciB1bmRlciBjdXJzb3IgaXMgUjJMLCBkcmF3IHRoZSBiYXIg Y3Vyc29yCisgICAgICAgICBvbiB0aGUgcmlnaHQgb2YgaXRzIGdseXBoLCByYXRoZXIgdGhhbiBv biB0aGUgbGVmdC4gICovCisgICAgICBjdXJzb3JfZ2x5cGggPSBnZXRfcGh5c19jdXJzb3JfZ2x5 cGggKHcpOworICAgICAgaWYgKChjdXJzb3JfZ2x5cGgtPnJlc29sdmVkX2xldmVsICYgMSkgIT0g MCkKKyAgICAgICAgcy5vcmlnaW4ueCArPSBjdXJzb3JfZ2x5cGgtPnBpeGVsX3dpZHRoIC0gcy5z aXplLndpZHRoOworICAgICAgfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogCiAgICAg ICAgICAgTlNSZWN0RmlsbCAocyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg IG5zX3Jlc2V0X2NsaXBwaW5nIChmKTsKIAotICAgICAgLyogZHJhdyB0aGUgY2hhcmFjdGVyIHVu ZGVyIHRoZSBjdXJzb3IgKi8KLSAgICAgIGlmIChjdXJzb3JfdHlwZSAhPSBOT19DVVJTT1IpCi0g ICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1Ip OworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKwor ICAvKiBkcmF3IHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAqLworICBpZiAoY3Vyc29y X3R5cGUgIT0gTk9fQ1VSU09SCisgICAgICAmJiB3LT5tYy5nbHlwaF9mbGF2b3IgIT0gTUNfR0xZ UEhMRVNTCisgICAgICAmJiB3LT5tYy5nbHlwaF9mbGF2b3IgIT0gTUNfR0xZUEhfVEFCKQorICAg IGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKwogCiAjaWZkZWYgTlNfSU1QTF9DT0NPQQogICAgICAg TlNFbmFibGVTY3JlZW5VcGRhdGVzICgpOwpkaWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uYyBiL3Ny Yy93MzJ0ZXJtLmMKaW5kZXggOGQxODlhZS4uN2RkNzc1NiAxMDA2NDQKLS0tIGEvc3JjL3czMnRl cm0uYworKysgYi9zcmMvdzMydGVybS5jCkBAIC05NzMsNiArOTczLDIwIEBAIHN0YXRpYyB2b2lk IHczMl9kcmF3X2JveF9yZWN0IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50LCBpbnQs IGludCwKIHN0YXRpYyB2b2lkCiB4X3NldF9jdXJzb3JfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcg KnMpCiB7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JT ICovCisKKyAgaWYgKHMtPnctPm1jLmN1cnNvcl9nY19kZWZhdWx0KQorICAgIHsKKyAgICAgIHMt PmdjID0gcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2M7CisgICAgICByZXR1cm47Cisg ICAgfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIGlmIChzLT5mb250ID09IEZS QU1FX0ZPTlQgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5iYWNrZ3JvdW5kID09IEZSQU1FX0JB Q0tHUk9VTkRfUElYRUwgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5mb3JlZ3JvdW5kID09IEZS QU1FX0ZPUkVHUk9VTkRfUElYRUwgKHMtPmYpCkBAIC01NjkwLDYgKzU3MDQsMjYgQEAgeF9kcmF3 X2hvbGxvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdykK IAogICAvKiBDb21wdXRlIGZyYW1lLXJlbGF0aXZlIGNvb3JkaW5hdGVzIGZvciBwaHlzIGN1cnNv ci4gICovCiAgIGdldF9waHlzX2N1cnNvcl9nZW9tZXRyeSAodywgcm93LCBjdXJzb3JfZ2x5cGgs ICZsZWZ0LCAmdG9wLCAmaCk7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU SVBMRSBDVVJTT1JTICovCisKKy8qIExFR0VORDoKKworLSAgdG9wIHkgPT0gV0lORE9XX1RPX0ZS QU1FX1BJWEVMX1kgKHcsIHJvdy0+eSkKKworLSAgYm90dG9tIHkgPT0gV0lORE9XX1RPX0ZSQU1F X1BJWEVMX1kgKHcsIHJvdy0+eSkgLSByb3ctPmhlaWdodAorCistICBoIG9mIEhPTExPV19CT1hf Q1VSU09SID09IHJvdy0+aGVpZ2h0CisgICBbVGhpcyBhdm9pZHMgYSB2aXNpYmxlIGdhcCBhYm92 ZS9iZWxvdy5dICovCisKKyAgaWYgKHctPm1jLmggPiAwKQorICAgIGggPSByb3ctPmhlaWdodDsK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICByZWN0LmxlZnQgPSBsZWZ0OwogICAv KiBXaGVuIG9uIFIyTCBjaGFyYWN0ZXIsIHNob3cgY3Vyc29yIGF0IHRoZSByaWdodCBlZGdlIG9m IHRoZQogICAgICBnbHlwaCwgdW5sZXNzIHRoZSBjdXJzb3IgYm94IGlzIGFzIHdpZGUgYXMgdGhl IGdseXBoIG9yIHdpZGVyCkBAIC01NzUzLDcgKzU3ODcsMTcgQEAgeF9kcmF3X2Jhcl9jdXJzb3Ig KHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKIAkgaW52aXNpYmxlLiAg VXNlIHRoZSBnbHlwaCdzIGZvcmVncm91bmQgY29sb3IgaW5zdGVhZCBpbiB0aGlzCiAJIGNhc2Us IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGdseXBoJ3MgY29sb3JzIGFyZSBjaG9zZW4gc28K IAkgdGhhdCB0aGUgZ2x5cGggaXMgbGVnaWJsZS4gICovCi0gICAgICBpZiAoZmFjZS0+YmFja2dy b3VuZCA9PSBjdXJzb3JfY29sb3IpCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBN VUxUSVBMRSBDVVJTT1JTICovCisKKyAgICAgIGlmIChmYWNlLT5iYWNrZ3JvdW5kID09IGN1cnNv cl9jb2xvcgorICAgICAgICAgICYmICF3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkpCisK Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAljdXJzb3JfY29sb3IgPSBmYWNlLT5mb3Jl Z3JvdW5kOwogCiAgICAgICB4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgdy0+ cGh5c19jdXJzb3IueCk7CkBAIC01Nzc0LDYgKzU4MTgsMTcgQEAgeF9kcmF3X2Jhcl9jdXJzb3Ig KHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKIAkgIGlmICgoY3Vyc29y X2dseXBoLT5yZXNvbHZlZF9sZXZlbCAmIDEpICE9IDApCiAJICAgIHggKz0gY3Vyc29yX2dseXBo LT5waXhlbF93aWR0aCAtIHdpZHRoOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyog TVVMVElQTEUgQ1VSU09SUyAqLworCisgICAgLyogQWxpZ24gYWxsIGZha2UgQkFSX0NVUlNPUiBv ZiB0aGUgVkVSVElDQUxfUlVMRVIgd2l0aCBgb3BvaW50X3gnLiAqLworICAgIGlmICh3LT5tYy5m eCA+IDApCisgICAgICB4ID0gdy0+bWMuZng7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor CisKIAkgIHczMl9maWxsX2FyZWEgKGYsIGhkYywgY3Vyc29yX2NvbG9yLCB4LAogCQkJIFdJTkRP V19UT19GUkFNRV9QSVhFTF9ZICh3LCB3LT5waHlzX2N1cnNvci55KSwKIAkJCSB3aWR0aCwgcm93 LT5oZWlnaHQpOwpAQCAtNTg5NSwzMSArNTk1MCwxNTkgQEAgdzMyX2RyYXdfd2luZG93X2N1cnNv ciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqZ2x5cGhfcm93LAogCSAgcmV0 dXJuOwogCX0KIAotICAgICAgc3dpdGNoIChjdXJzb3JfdHlwZSkKLQl7Ci0JY2FzZSBIT0xMT1df Qk9YX0NVUlNPUjoKLQkgIHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOwotCSAg YnJlYWs7CiAKLQljYXNlIEZJTExFRF9CT1hfQ1VSU09SOgotCSAgZHJhd19waHlzX2N1cnNvcl9n bHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7Ci0JICBicmVhazsKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworLyogYmVnaW4gTVVMVElQTEUgQ1VSU09SUyAqLwogCi0JY2FzZSBCQVJf Q1VSU09SOgotCSAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRo LCBCQVJfQ1VSU09SKTsKLQkgIGJyZWFrOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJ TkRPV19GUkFNRSAodykpOworICBDT0xPUlJFRiBvcmlnaW5hbF9jdXJzb3JfcGl4ZWwgPSBmLT5v dXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbDsKKyAgLyogeHRlcm0uYy94dGVybS5oIHVzZSBH Qzsgd2hlcmVhcywgdzMydGVybS5jL3czMnRlcm0uaCB1c2UgWEdDVmFsdWVzICogKi8KKyAgWEdD VmFsdWVzICpvcmlnaW5hbF9jdXJzb3JfZ2MgPSBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9n YzsKKyAgZG91YmxlIGJhc2UgPSAyNTUuMDsKKyAgZG91YmxlIHRlcm1fcmVkID0gYmFzZSAqIHct Pm1jLnJlZDsKKyAgZG91YmxlIHRlcm1fZ3JlZW4gPSBiYXNlICogdy0+bWMuZ3JlZW47CisgIGRv dWJsZSB0ZXJtX2JsdWUgPSBiYXNlICogdy0+bWMuYmx1ZTsKKyAgaW50IGludF9yZWQgPSBYRklY TlVNIChGdHJ1bmNhdGUgKG1ha2VfZmxvYXQgKHRlcm1fcmVkKSwgUW5pbCkpOworICBpbnQgaW50 X2dyZWVuID0gWEZJWE5VTSAoRnRydW5jYXRlIChtYWtlX2Zsb2F0ICh0ZXJtX2dyZWVuKSwgUW5p bCkpOzsKKyAgaW50IGludF9ibHVlID0gWEZJWE5VTSAoRnRydW5jYXRlIChtYWtlX2Zsb2F0ICh0 ZXJtX2JsdWUpLCBRbmlsKSk7OworICBDT0xPUlJFRiBjb2xvcl9waXhlbCA9IFBBTEVUVEVSR0Ig KGludF9yZWQsIGludF9ncmVlbiwgaW50X2JsdWUpOworICBzd2l0Y2ggKGN1cnNvcl90eXBlKQor ICB7CisgICAgY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAody0+bWMu cmVkID49IDAgJiYgdy0+bWMuYmx1ZSA+PSAwICYmIHctPm1jLmdyZWVuID49IDApCisgICAgICAg IHsKKyAgICAgICAgICBYR0NWYWx1ZXMgZ2NfdmFsdWVzOworICAgICAgICAgIHVuc2lnbmVkIGxv bmcgbWFzayA9IEdDRm9udCB8IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZDsKKyAgICAgICAg ICBnY192YWx1ZXMuZm9udCA9IEZSQU1FX0ZPTlQgKGYpOworICAgICAgICAgIHN0cnVjdCBmYWNl ICpkZWZhdWx0X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIERFRkFVTFRfRkFDRV9JRCk7CisgICAg ICAgICAgTGlzcF9PYmplY3QgYnVmID0gdy0+Y29udGVudHM7CisgICAgICAgICAgQ0hFQ0tfQlVG RkVSIChidWYpOworICAgICAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOwor ICAgICAgICAgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50X21hcmtf bW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAo YiwgbWFya19hY3RpdmUpKSk7CisgICAgICAgICAgcHRyZGlmZl90IHJlZ2lvbl9iZWdpbm5pbmcg PSAocmVnaW9uX2FjdGl2ZV9wKSA/IFhGSVhOVU0gKEZyZWdpb25fYmVnaW5uaW5nICgpKSA6IC0x OworICAgICAgICAgIHB0cmRpZmZfdCByZWdpb25fZW5kID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBY RklYTlVNIChGcmVnaW9uX2VuZCAoKSkgOiAtMTsKKyAgICAgICAgICBib29sIHJlZ2lvbl9pbl9i b3VuZHNfcCA9IChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiB3LT5tYy5wb3NpbnQgPj0gcmVnaW9uX2JlZ2lubmluZworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1jLnBvc2ludCA8IHJlZ2lvbl9lbmQpOwor ICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJz b3JfZ2MnIGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGB4X21h a2VfZ2MnIGluIHczMmZucy5jLiAgKi8KKyAgICAgICAgICBpZiAocmVnaW9uX2FjdGl2ZV9wCisg ICAgICAgICAgICAgICYmIHJlZ2lvbl9pbl9ib3VuZHNfcAorICAgICAgICAgICAgICAmJiBhY3Rp dmVfcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19h Y3RpdmVfcmVnaW9uX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi Ky1yZWFsLWZha2UtY3Vyc29yLXJlZ2lvbi1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICBz dHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwg aG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZV9pZCk7CisgICAgICAgICAgICAgIGdjX3ZhbHVlcy5m b3JlZ3JvdW5kID0gZGVmYXVsdF9mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgICBnY192 YWx1ZXMuYmFja2dyb3VuZCA9IGhvbGxvd19hY3RpdmVfcmVnaW9uX2ZhY2UtPmJhY2tncm91bmQ7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAg ICAgICAgICAgICAgICAgICAgICYmICFyZWdpb25faW5fYm91bmRzX3AKKyAgICAgICAgICAgICAg ICAgICAgICYmIGFjdGl2ZV9wKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW51 bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlX2lkID0gbG9va3VwX25hbWVk X2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1yZWdpb24tZmFjZSIpLCB0 cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25f b3V0X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNl X2lkKTsKKyAgICAgICAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IGRlZmF1bHRfZmFj ZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3VuZCA9IGhv bGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIGVsc2UgaWYgKCFyZWdpb25fYWN0aXZlX3AgJiYgYWN0aXZlX3ApCisg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19h Y3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwt ZmFrZS1jdXJzb3ItZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNl ICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFj ZV9pZCk7CisgICAgICAgICAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IGRlZmF1bHRf ZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5k ID0gaG9sbG93X2FjdGl2ZV9mYWNlLT5iYWNrZ3JvdW5kOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAvKiBUaGUgcmVnaW9uIGlzIF9ub3RfIHZpc2libGUgaW4gdGhlIGluYWN0 aXZlIHdpbmRvdyBiZWNhdXNlIHRoZSBvdmVybGF5IHdpbmRvdyBwcm9wZXJ0eSBpcyB1c2VkLiAq LworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY3RpdmVfcCkKKyAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19pbmFjdGl2ZV9mYWNl X2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv ci1pbmFjdGl2ZS1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFj ZSAqaG9sbG93X2luYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19pbmFjdGl2 ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBk ZWZhdWx0X2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5i YWNrZ3JvdW5kID0gaG9sbG93X2luYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MgPSBYQ3Jl YXRlR0MgKE5VTEwsIEZSQU1FX1czMl9XSU5ET1cgKGYpLCBtYXNrLCAmZ2NfdmFsdWVzKTsKKyAg ICAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICAvKiBGb3JjZSBgeF9zZXRfY3Vyc29y X2djJyB0byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djJy4gICovCisgICAg ICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSB0cnVlOworICAgICAgICAgIGRyYXdfcGh5 c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOworICAgICAgICAgIHct Pm1jLmN1cnNvcl9nY19kZWZhdWx0ID0gZmFsc2U7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEu dzMyLT5jdXJzb3JfZ2MgPSBvcmlnaW5hbF9jdXJzb3JfZ2M7CisgICAgICAgICAgdW5ibG9ja19p bnB1dCAoKTsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRh LnczMi0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5j dXJzb3JfcGl4ZWwgPSBjb2xvcl9waXhlbDsKKyAgICAgICAgICB4X2RyYXdfaG9sbG93X2N1cnNv ciAodywgZ2x5cGhfcm93KTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9w aXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg ICAgICAgICAgeF9kcmF3X2hvbGxvd19jdXJzb3IgKHcsIGdseXBoX3Jvdyk7CisgICAgICBicmVh azsKKyAgICB9CisgICAgY2FzZSBGSUxMRURfQk9YX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAo dy0+bWMucmVkID49IDAgJiYgdy0+bWMuYmx1ZSA+PSAwICYmIHctPm1jLmdyZWVuID49IDApCisg ICAgICAgIHsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRh LnczMi0+Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhlCisgICAgICAgICAgZnVuY3Rpb25hbGl0 eSBvZiBgeF9tYWtlX2djJyBpbiB3MzJmbnMuYy4gICovCisgICAgICAgICAgYmxvY2tfaW5wdXQg KCk7CisgICAgICAgICAgWEdDVmFsdWVzIGdjX3ZhbHVlczsKKyAgICAgICAgICB1bnNpZ25lZCBs b25nIG1hc2sgPSBHQ0ZvbnQgfCBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQ7CisgICAgICAg ICAgZ2NfdmFsdWVzLmZvbnQgPSBGUkFNRV9GT05UIChmKTsKKyAgICAgICAgICBnY192YWx1ZXMu Zm9yZWdyb3VuZCA9IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKGYpOworICAgICAgICAgIGdjX3Zh bHVlcy5iYWNrZ3JvdW5kID0gY29sb3JfcGl4ZWw7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEu dzMyLT5jdXJzb3JfZ2MgPSBYQ3JlYXRlR0MgKE5VTEwsIEZSQU1FX1czMl9XSU5ET1cgKGYpLCBt YXNrLCAmZ2NfdmFsdWVzKTsKKyAgICAgICAgICAvKiBGb3JjZSBgeF9zZXRfY3Vyc29yX2djJyB0 byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djJy4gICovCisgICAgICAgICAg dy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSB0cnVlOworICAgICAgICAgIGRyYXdfcGh5c19jdXJz b3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOworICAgICAgICAgIHctPm1jLmN1 cnNvcl9nY19kZWZhdWx0ID0gZmFsc2U7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5j dXJzb3JfZ2MgPSBvcmlnaW5hbF9jdXJzb3JfZ2M7CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAo KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZHJhd19waHlzX2N1cnNvcl9n bHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7CisgICAgICBicmVhazsKKyAgICB9Cisg ICAgY2FzZSBCQVJfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmICh3LT5tYy5yZWQgPj0gMCAmJiB3 LT5tYy5ibHVlID49IDAgJiYgdy0+bWMuZ3JlZW4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAg IC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwn LiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IGNvbG9y X3BpeGVsOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IHRydWU7 CisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRo LCBCQVJfQ1VSU09SKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkg PSBmYWxzZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IG9y aWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAg eF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBCQVJfQ1VSU09S KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhCQVJfQ1VSU09SOgorICAgIHsKKyAg ICAgIGlmICh3LT5tYy5yZWQgPj0gMCAmJiB3LT5tYy5ibHVlID49IDAgJiYgdy0+bWMuZ3JlZW4g Pj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0 cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0 YS53MzItPmN1cnNvcl9waXhlbCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgIHctPm1jLmN1cnNv cl9nY19pbnZpc2libGVfb2theSA9IHRydWU7CisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3Ig KHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBIQkFSX0NVUlNPUik7CisgICAgICAgICAgdy0+ bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5ID0gZmFsc2U7CisgICAgICAgICAgZi0+b3V0cHV0 X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAg IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9y b3csIGN1cnNvcl93aWR0aCwgSEJBUl9DVVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAg IGNhc2UgTk9fQ1VSU09SOgorICAgICAgdy0+cGh5c19jdXJzb3Jfd2lkdGggPSAwOworICAgICAg YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0ICgpOworICB9CiAKLQljYXNl IEhCQVJfQ1VSU09SOgotCSAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29y X3dpZHRoLCBIQkFSX0NVUlNPUik7Ci0JICBicmVhazsKKy8qIGVuZCBNVUxUSVBMRSBDVVJTT1JT ICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotCWNhc2UgTk9fQ1VSU09SOgotCSAgdy0+ cGh5c19jdXJzb3Jfd2lkdGggPSAwOwotCSAgYnJlYWs7CiAKLQlkZWZhdWx0OgotCSAgZW1hY3Nf YWJvcnQgKCk7Ci0JfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3dpbmRvdy5jIGIvc3Jj L3dpbmRvdy5jCmluZGV4IDZjZGM1MmYuLjA0NTg5OWMgMTAwNjQ0Ci0tLSBhL3NyYy93aW5kb3cu YworKysgYi9zcmMvd2luZG93LmMKQEAgLTY4NDYsNiArNjg0NiwyOSBAQCBnZXRfcGh5c19jdXJz b3JfZ2x5cGggKHN0cnVjdCB3aW5kb3cgKncpCiAgIHN0cnVjdCBnbHlwaCAqZ2x5cGg7CiAgIGlu dCBocG9zID0gdy0+cGh5c19jdXJzb3IuaHBvczsKIAorCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogVGhpcyBtb2RpZmljYXRpb24gZW5hYmxl cyBwbGFjZW1lbnQgb2YgdGhlIGN1cnNvci1pbi1mcmluZ2UgYml0bWFwIHdoZW4KK3RoZSB3aW5k b3ctd2lkdGggaXMgc2xpZ2h0bHkgbGVzcyB0aGFuIGBnbHlwaF9yb3ctPmV4YWN0X3dpbmRvd193 aWR0aF9saW5lX3BgLgorVGhpcyBtb2RpZmljYXRpb24gYWxzbyBwcmV2ZW50cyBkcmF3aW5nIHRo ZSByZWFsIGN1cnNvciBvbiB0aGUgZnJpbmdlIChpbnN0ZWFkCitvZiB1c2luZyB0aGUgY3Vyc29y LWluLWZyaW5nZSBiaXRtYXApIGluIHRoZSBhYm92ZS1tZW50aW9uZWQgY2lyY3Vtc3RhbmNlLgor U2VlIHRoZSBmb2xsb3dpbmcgcmVsYXRlZCBwYXRjaGVzOgorLSAgSnVseSAxOSwgMjAxNjogIGJm NWRkZGVkNzBjMTFlZGFmMzUxNGIyNWRhMjdmYzcxY2ZiOGU5NjUKKy0gIE1heSAyMSwgMjAxNjog IGU1MDE1YzVkOTYzMmEwYmY2ODVjMDkzMjQ5YWU0YTdkM2U4MjViMTMKK1NlZSB0aGUgZm9sbG93 aW5nIGJ1ZyByZXBvcnRzOiAgIzE2ODU2IGFuZCAjMjkyMzMuICovCisKKyAgc3RydWN0IGZyYW1l ICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGludCBmcmFtZV9jaGFyX3dpZHRoID0gRlJBTUVf Q09MVU1OX1dJRFRIIChmKTsKKyAgaW50IHRleHRfYXJlYV93aWR0aCA9IHdpbmRvd19ib3hfd2lk dGggKHcsIFRFWFRfQVJFQSk7CisgIGJvb2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gdy0+cGh5c19j dXJzb3IueCArIGZyYW1lX2NoYXJfd2lkdGggPj0gdGV4dF9hcmVhX3dpZHRoOworICBpZiAoY3Vy c29yX2luX2ZyaW5nZV9wKQorICAgIHJldHVybiBOVUxMOworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKworCiAgIGlmICghKHctPnBoeXNfY3Vyc29yLnZwb3MgPj0gMAogCSYmIHctPnBoeXNf Y3Vyc29yLnZwb3MgPCB3LT5jdXJyZW50X21hdHJpeC0+bnJvd3MpKQogICAgIHJldHVybiBOVUxM OwpkaWZmIC0tZ2l0IGEvc3JjL3dpbmRvdy5oIGIvc3JjL3dpbmRvdy5oCmluZGV4IGNjMGI2YjYu LmNhYmVlMjcgMTAwNjQ0Ci0tLSBhL3NyYy93aW5kb3cuaAorKysgYi9zcmMvd2luZG93LmgKQEAg LTc2LDYgKzc2LDU2IEBAIG9uZSBhbmQgdGhlIHNhbWUsIHNvIGl0cyBwcmV2IGFuZCBuZXh0IG1l bWJlcnMgYXJlIG5pbC4KIAogQSBkZWFkIHdpbmRvdyBoYXMgaXRzIGNvbnRlbnRzIGZpZWxkIHNl dCB0byBuaWwuICAqLwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVM VElQTEUgQ1VSU09SUyAqLworCisvKiBTdWZmaXhlcyBmb3IgdGhlIGBtY2Agd2luZG93IHBvaW50 ZXIgcHJlZml4LiAqLworc3RydWN0IG11bHRpcGxlX2N1cnNvcnMKK3sKKyAgLyogVmFsdWVzIGZv ciBwcmV2aW91cyBhbmQgY3VycmVudCBgd2luZG93LXN0YXJ0JyBhbmQgYHdpbmRvdy1lbmQnLiAq LworICBFTUFDU19JTlQgY3VycmVudF9zdGFydCwgY3VycmVudF9lbmQsIHByZXZpb3VzX3N0YXJ0 LCBwcmV2aW91c19lbmQsIGN1cnJlbnRfeCwgcHJldmlvdXNfeDsKKworICAvKiBUcnVlIG1lYW5z IHRvIGZvcmNlIGB4X3NldF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEudzMy LT5jdXJzb3JfZ2MnCisgIGluIHczMnRlcm0uYyBvciBgcy0+Zi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX2djJyBpbiB4dGVybS5jLiAqLworICBib29sX2JmIGN1cnNvcl9nY19kZWZhdWx0IDogMTsK KworICAvKiBUcnVlIG1lYW5zIGB4X3NldF9jdXJzb3JfZ2MnIHNob3VsZCBwZXJtaXQgdGhlIGZv cmVncm91bmQgYW5kIGJhY2tncm91bmQKKyAgY29sb3JzIHRvIGJlIHRoZSBzYW1lLiAgVGhlIGRl ZmF1bHQgYmVoYXZpb3IgZGlzYWxsb3dzIGFuIGludmlzaWJsZSByZXN1bHQuICovCisgIGJvb2xf YmYgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5IDogMTsKKworICAvKiBUcnVlIG1lYW5zIGBtY19k cmF3X211bHRpcGxlX2N1cnNvcnMnIGhhcyBub3QgcnVuIHlldCBkcmF3biBnbHlwaCBmYWtlIGN1 cnNvcnMuICovCisgIGJvb2xfYmYgZHJhd19tdWx0aXBsZV9jdXJzb3JzIDogMTsKKworICAvKiBU cnVlIG1lYW5zIGBtY19lcmFzZV9tdWx0aXBsZV9jdXJzb3JzJyBoYXMgbm90IHJ1biB5ZXQgZXJh c2VkIGdseXBoIGZha2UgY3Vyc29ycy4gKi8KKyAgYm9vbF9iZiBlcmFzZV9tdWx0aXBsZV9jdXJz b3JzIDogMTsKKworICAvKiBUcnVlIG1lYW5zIGNyb3NzaGFpcnMgaGF2ZSBub3QgeWV0IGJlZW4g ZHJhd24uICovCisgIGJvb2xfYmYgZHJhd19jcm9zc2hhaXJzIDogMTsKKworICAvKiBUcnVlIG1l YW5zIGNyb3NzaGFpcnMgaGF2ZSBub3QgeWV0IGJlZW4gZXJhc2VkLiAqLworICBib29sX2JmIGVy YXNlX2Nyb3NzaGFpcnMgOiAxOworCisgIC8qIFRoZSBmbGF2b3Igb2YgdGhlIGdseXBoIHVzZWQg YnkgYGRyYXdfd2luZG93X2N1cnNvcicuICovCisgIGludCBnbHlwaF9mbGF2b3I7CisKKyAgLyog TC5TLkwuIGNvbG9ycy4gKi8KKyAgZG91YmxlIHJlZCwgZ3JlZW4sIGJsdWU7CisKKyAgLyogVGhl IGJ1ZmZlciBwb3NpdGlvbiBwb2ludCBvZiBhIGZha2UgY3Vyc29yLiAqLworICBpbnQgcG9zaW50 OworCisgIC8qIFBpeGVsIHBvc2l0aW9uICh3aW5kb3cgcmVsYXRpdmUpIG9mIGhvcml6b250YWwv dmVydGljYWwgcnVsZXJzLiAqLworICBpbnQgZngsIGZ5LCBoOworCisgIC8qIFJlY29yZCBGUk9N X1dIRVJFIHdoZW4gYHJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEnIGlzIGNhbGxlZC4gKi8K KyAgaW50IHJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWE7Cit9OworCisvKiBlbmQgTVVMVElQ TEUgQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogc3RydWN0IGN1cnNv cl9wb3MKIHsKICAgLyogUGl4ZWwgcG9zaXRpb24uICBUaGVzZSBhcmUgYWx3YXlzIHdpbmRvdyBy ZWxhdGl2ZS4gICovCkBAIC0xODEsNiArMjMxLDIyIEBAIHN0cnVjdCB3aW5kb3cKICAgICAvKiBU aGUgaGVscCBlY2hvIHRleHQgZm9yIHRoaXMgd2luZG93LiAgUW5pbCBpZiB0aGVyZSdzIG5vbmUu ICAqLwogICAgIExpc3BfT2JqZWN0IG1vZGVfbGluZV9oZWxwX2VjaG87CiAKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgICAvKiBUaGUgY2Fj aGUgZm9yIG11bHRpcGxlIGdseXBoIGN1cnNvcnMuICBGb3IgYW4gZXhhbXBsZSBvZiB0aGUgc3Ry dWN0dXJlIG9mCisgICAgdGhlIGxpc3QsIHNlZSB0aGUgY29tbWVudHMgYXQgdGhlIGJlZ2lubmlu ZyBvZiBgbWNfY2FsYycgaW4geGRpc3AuYy4gICovCisgICAgTGlzcF9PYmplY3QgbXVsdGlwbGVf Y3Vyc29yc19jYWNoZTsKKworICAgIC8qIFRoZSBjYWNoZSBmb3IgbXVsdGlwbGUgZ2x5cGgvZ2x5 cGhsZXNzIGN1cnNvcnMgdGhhdCBmb3JtIGNyb3NzaGFpcnMuICBGb3IgYW4KKyAgICBleGFtcGxl IG9mIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGxpc3QsIHNlZSB0aGUgY29tbWVudHMgYXQgdGhlIGJl Z2lubmluZyBvZgorICAgIGBtY19jcm9zc2hhaXJzJyBpbiB4ZGlzcC5jLiAgKi8KKyAgICBMaXNw X09iamVjdCBjcm9zc2hhaXJzX2NhY2hlOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwor CiAgICAgLyogTm8gTGlzcCBkYXRhIG1heSBmb2xsb3cgYmVsb3cgdGhpcyBwb2ludCB3aXRob3V0 IGNoYW5naW5nCiAgICAgICAgbWFya19vYmplY3QgaW4gYWxsb2MuYy4gIFRoZSBtZW1iZXIgY3Vy cmVudF9tYXRyaXggbXVzdCBiZSB0aGUKICAgICAgICBmaXJzdCBub24tTGlzcCBtZW1iZXIuICAq LwpAQCAtMjgzLDYgKzM0OSwxNiBAQCBzdHJ1Y3Qgd2luZG93CiAKICNpZmRlZiBIQVZFX1dJTkRP V19TWVNURU0KIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNP UlMgKi8KKworICAgIC8qIFRoZSBwcmVmaXggZm9yIHdpbmRvdyBwb2ludGVycyByZWxhdGluZyB0 byBtdWx0aXBsZSBjdXJzb3JzLiAgKi8KKyAgICBzdHJ1Y3QgbXVsdGlwbGVfY3Vyc29ycyBtYzsK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgIC8qIEN1cnNvciB0eXBlIG9mIGxh c3QgY3Vyc29yIGRyYXduIG9uIHRoZSB3aW5kb3cuICAqLwogICAgIGVudW0gdGV4dF9jdXJzb3Jf a2luZHMgcGh5c19jdXJzb3JfdHlwZTsKIApAQCAtNDIxLDYgKzQ5NywyNSBAQCBYV0lORE9XIChM aXNwX09iamVjdCBhKQogICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UsIHN0cnVj dCB3aW5kb3cpOwogfQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUg Q1VSU09SUyAqLworCitJTkxJTkUgdm9pZAord3NldF9tdWx0aXBsZV9jdXJzb3JzX2NhY2hlIChz dHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCit7CisgIHctPm11bHRpcGxlX2N1cnNv cnNfY2FjaGUgPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCit3c2V0X2Nyb3NzaGFpcnNfY2FjaGUg KHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgdy0+Y3Jvc3NoYWlyc19j YWNoZSA9IHZhbDsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogTW9zdCBj b2RlIHNob3VsZCB1c2UgdGhlc2UgZnVuY3Rpb25zIHRvIHNldCBMaXNwIGZpZWxkcyBpbiBzdHJ1 Y3QKICAgIHdpbmRvdy4gICovCiBJTkxJTkUgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL3hkaXNwLmMg Yi9zcmMveGRpc3AuYwppbmRleCBkNjFkNDIxLi45ZGY3OGIxIDEwMDY0NAotLS0gYS9zcmMveGRp c3AuYworKysgYi9zcmMveGRpc3AuYwpAQCAtODMwLDcgKzgzMCw3IEBAIHN0YXRpYyBpbnRtYXhf dCBtZXNzYWdlX2xvZ19jaGVja19kdXBsaWNhdGUgKHB0cmRpZmZfdCwgcHRyZGlmZl90KTsKIHN0 YXRpYyB2b2lkIHB1c2hfaXQgKHN0cnVjdCBpdCAqLCBzdHJ1Y3QgdGV4dF9wb3MgKik7CiBzdGF0 aWMgdm9pZCBpdGVyYXRlX291dF9vZl9kaXNwbGF5X3Byb3BlcnR5IChzdHJ1Y3QgaXQgKik7CiBz dGF0aWMgdm9pZCBwb3BfaXQgKHN0cnVjdCBpdCAqKTsKLXN0YXRpYyB2b2lkIHJlZGlzcGxheV9p bnRlcm5hbCAodm9pZCk7CitzdGF0aWMgdm9pZCByZWRpc3BsYXlfaW50ZXJuYWwgKGludCk7CiBz dGF0aWMgdm9pZCBlY2hvX2FyZWFfZGlzcGxheSAoYm9vbCk7CiBzdGF0aWMgdm9pZCBibG9ja19i dWZmZXJfZmxpcHMgKHZvaWQpOwogc3RhdGljIHZvaWQgdW5ibG9ja19idWZmZXJfZmxpcHMgKHZv aWQpOwpAQCAtOTIxLDYgKzkyMSw0NzEzIEBAIHN0YXRpYyB2b2lkIHNob3dfbW91c2VfZmFjZSAo TW91c2VfSExJbmZvICosIGVudW0gZHJhd19nbHlwaHNfZmFjZSk7CiBzdGF0aWMgYm9vbCBjb29y ZHNfaW5fbW91c2VfZmFjZV9wIChzdHJ1Y3Qgd2luZG93ICosIGludCwgaW50KTsKIAogCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyog TVVMVElQTEUgQ1VSU09SUzogIEVtYWNzIEJ1ZyAjMjI4NzMgKGZlYXR1cmUgcmVxdWVzdCkKKwor ICAgQ1JPU1NIQUlSUzogIEVtYWNzIEJ1ZyAjMTc2ODQgKGZlYXR1cmUgcmVxdWVzdCkKKworCitQ QVRDSCBWRVJTSU9OOiAgMDE0LjAwMCBbMDgvMjgvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQu MDAxIFswOS8wMS8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMDIgWzA5LzAyLzIwMThdCisg ICAgICAgICAgICAgICAgMDE0LjAwMyBbMDkvMDUvMjAxOF0KKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogYmVnaW4gTVVMVElQTEUgQ1VSU09SUyAqLworCisvKiBNVUxUSVBMRSBDVVJTT1JT OiAgRW1hY3MgQnVnICMyMjg3MyAoZmVhdHVyZSByZXF1ZXN0KQorCisgICBDUk9TU0hBSVJTOiAg RW1hY3MgQnVnICMxNzY4NCAoZmVhdHVyZSByZXF1ZXN0KQorCisKK1BBVENIIFZFUlNJT046ICAw MTQuMDAwIFswOC8yOC8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMDEgWzA5LzAxLzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAwMiBbMDkvMDIvMjAxOF0KKyAgICAgICAgICAgICAgICAw MTQuMDAzIFswOS8wNS8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMDQgWzA5LzA4LzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAwNSBbMDkvMDkvMjAxOF0KKyAgICAgICAgICAgICAgICAw MTQuMDA2IFswOS8wOS8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMDcgWzA5LzEwLzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAwOCBbMDkvMTAvMjAxOF0KKyAgICAgICAgICAgICAgICAw MTQuMDA5IFswOS8xMS8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMTAgWzA5LzEzLzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAxMSBbMDkvMTQvMjAxOF0KKyAgICAgICAgICAgICAgICAw MTQuMDEyIFswOS8xNy8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMTMgWzA5LzE4LzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAxNCBbMDkvMTkvMjAxOF0KKyAgICAgICAgICAgICAgICAw MTQuMDE1IFswOS8yMy8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMTYgWzA5LzI0LzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAxNyBbMDkvMjUvMjAxOF0KKyAgICAgICAgICAgICAgICAw MTQuMDE4IFswOS8yNi8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMTkgWzEwLzAxLzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAyMCBbMTAvMDIvMjAxOF0KKyAgICAgICAgICAgICAgICAw MTQuMDIxIFsxMC8wOS8yMDE4XQorICAgICAgICAgICAgICAgIDAxNC4wMjIgWzEwLzEwLzIwMThd CisgICAgICAgICAgICAgICAgMDE0LjAyMyBbMTAvMTAvMjAxOF0KKworQXBwbHkgcGF0Y2ggdG8g bWFzdGVyIGJyYW5jaDogIFNhdCBKdWwgNyAwOTo1OTo1MyAyMDE4IC0wNzAwCitnaXQgcmVzZXQg LS1oYXJkIDk4NDYzYmVkMDdlY2M5MDU3MDk0OTI4ZmZkYzIzMjFlYWFmM2FiNTIKKworTGFzdCBD b21taXQgOiBTYXQgSnVsIDcgMDk6NTk6NTMgMjAxOCAtMDcwMAorICAgICAgICAgICAgOiBHbGVu biBNb3JyaXMgPHJnbUBnbnUub3JnPgorICAgICAgICAgICAgOiA5ODQ2M2JlZDA3ZWNjOTA1NzA5 NDkyOGZmZGMyMzIxZWFhZjNhYjUyCisgICAgICAgICAgICA6ICogbGlzcC9pbWVudS5lbDogUmVx dWlyZSBjbC1saWIsIG5vdCBpbnRlcm5hbCBjb21wb25lbnRzIG9mIHNhbWUuCisKKworU0VUVVA6 CisKK1N0ZXAgMTogIGdpdCBjbG9uZSAtYiBtYXN0ZXIgZ2l0Oi8vZ2l0LnN2LmdudS5vcmcvZW1h Y3MuZ2l0CisKK1N0ZXAgMjogIEluIHRoZSBuZXcgZW1hY3MgZm9sZGVyLCBnbyBiYWNrIHRvIDA3 LzA3LzIwMTg6CisKK2dpdCByZXNldCAtLWhhcmQgOTg0NjNiZWQwN2VjYzkwNTcwOTQ5MjhmZmRj MjMyMWVhYWYzYWI1MgorCitbR29pbmcgYmFjayBpbiB0aW1lIHRvIDA3LzA3LzIwMTggc2F2ZXMg QGxhd2xpc3QgYSBjb3VwbGUgb2YgaG91cnMgYnkgbm90IGhhdmluZwordG8gZGVhbCB3aXRoIHVu cmVsYXRlZCByZWNlbnQgY2hhbmdlcyB0byB0aGUgbWFzdGVyIGJyYW5jaCBieSB0aGUgRW1hY3Mg dGVhbS5dCisKK1N0ZXAgMzogIEZyb20gd2l0aGluIHRoZSBuZXcgZW1hY3MgZm9sZGVyIGNyZWF0 ZWQgaW4gU3RlcCAxLCBhcHBseSB0aGUgcGF0Y2g6CisKK2dpdCBhcHBseSAvcGF0aC90by90aGUv ZW1hY3MvcGF0Y2guZGlmZgorCitbVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgZXJyb3IgbWVzc2Fn ZXMgYXQgdGhpcyBwb2ludDsgaS5lLCB5b3Ugc2hvdWxkIGJlIHJldHVybmVkIHRvIGEgbmV3IGNv bW1hbmQgcHJvbXB0Ll0KKworU3RlcCA0OiAgLi9hdXRvZ2VuLnNoCisKK1N0ZXAgNTogIC4vY29u ZmlndXJlIC4uLiBbeW91ciBjdXN0b20gb3B0aW9uc10KKworU3RlcCA2OiAgbWFrZQorCitTdGVw IDc6ICBtYWtlIGluc3RhbGwKKworLSAgVG8gdHJ5IG91dCBidWlsdC1pbiBmYWtlIGN1cnNvcnMg d2l0aCBNYWduYXIgU3ZlZW4ncyBsaWJyYXJ5IChtdWx0aXBsZS1jdXJzb3JzKSwgaW5zdGFsbCB0 aGF0IHBhY2thZ2UgZmlyc3QuCisKKyAgKHByb2duCisgICAgKHJlcXVpcmUgJ3BhY2thZ2UpCisg ICAgKGFkZC10by1saXN0ICdwYWNrYWdlLWFyY2hpdmVzICcoIm1lbHBhIiAuICJodHRwOi8vbWVs cGEubWlsa2JveC5uZXQvcGFja2FnZXMvIikgdCkKKyAgICAocGFja2FnZS1pbml0aWFsaXplKQor ICAgIChwYWNrYWdlLXJlZnJlc2gtY29udGVudHMpCisgICAgKHBhY2thZ2UtaW5zdGFsbCAnbXVs dGlwbGUtY3Vyc29ycykpCisKKy0gIExvYWQgb3IgZXZhbHVhdGUgdGhlIGNvbnRlbnRzIG9mIGNy b3NzaGFpcnMuZWwsIHdoaWNoIGluY2x1ZGVzIGNvZGUgbW9kaWZ5aW5nIGEgY291cGxlIG9mIGZ1 bmN0aW9ucyB1c2VkIGJ5IE1hZ25hciBTdmVlbidzIGxpYnJhcnkuCisKKy0gIFRvIHRyeSBvdXQg dGhlIGNyb3NzaGFpcnMgZmVhdHVyZSwgb3BlbiBhIHNpbXBsZSBidWZmZXIgKG5vdGhpbmcgZmFu Y3ksIGp1c3QgY29kZSBvciB0ZXh0KSBhbmQgdHlwZTogIE0teCArLW1vZGUKKworLSAgVG8gc2Vl IGFuIGV4YW1wbGUgb2YgY3Jvc3NoYWlycyBwbGF5aW5nIG5pY2VseSB3aXRoIHRhYiBzdHJldGNo ZXMsIG9wZW4gdXAgc29tZXRoaW5nIGxpa2Ugc2ltcGxlLmVsIGFuZCB0eXBlOiAgTS14ICstbW9k ZS4KKworLSAgVG8gc2VlIGFuIGV4YW1wbGUgb2YgYSB2YXJpZXR5IG9mIGJ1aWx0LWluIGN1cnNv ciBzdHlsZXMgYW5kIHdpZHRocywgdHlwZTogIE0teCBtYy10ZXN0CisKKworRVhBTVBMRSBPRiBV U0lORyBNVUxUSVBMRSBGQUtFIENVUlNPUlM6CisKKyAgOzs7ICcoQlVGRkVSLVBPU0lUSU9OIENV UlNPUi1UWVBFIENVUlNPUi1DT0xPUikKKyAgKHNldHEgbXVsdGlwbGUtY3Vyc29ycy1jb25mICco KDEgImhiYXIiICJtYWdlbnRhIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIg ImJhciIgInB1cnBsZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzICJib3gi ICIjMDBGRjAwIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQgImhvbGxvdyIg IiMwMDAwRkYiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSAoImhiYXIiIDMp IFsxLjAgMC4wIDEuMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2ICgiYmFy IiAzKSBbMC4wIDEuMCAxLjBdKSkpCisKKyAgOzs7IFRVUk4gT0ZGLgorICAoc2V0cSBtdWx0aXBs ZS1jdXJzb3JzLWNvbmYgbmlsKQorCisKK1RPRE86CisKKy0gIE11bHRpcGxlIEN1cnNvcnM6ICBJ ZiBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgY29tcG9zaXRlIGNoYXJhY3RlciwgdGhlbgor ICAga2VlcCBnb2luZyB1bnRpbCB0aGUgbmV4dCBmdWxsIGNoYXJhY3Rlci4KKworLSAgV29yayBv biBjb21wYXRhYmlsaXR5IHdpdGggTWFjT1MgTW9qYXZlLiAgW0lzc3VlICMgNDAuXQorCistICBU YWIgU1RSRVRDSCAtLSBub3QgYmVpbmcgZHJhd24gcHJvcGVybHkgaW4gYWxsIGNpcmN1bXN0YW5j ZXM7IGluY2x1ZGluZywgYnV0CisgICBsaW1pdGVkIHRvIGEgc2l0dWF0aW9uIHdoZW4gdGhlIHVz ZXIgaGFzIG5vdCBjdXN0b21pemVkIHRoZSB0YWIgc2xvdCBvZiB0aGUKKyAgIGJ1ZmZlciBgYnVm ZmVyLWRpc3BsYXktdGFibGUnLiAgW0lzc3VlICMgMzkuXQorCistICBXaGVuIHR5cGluZyBxdWlj a2x5LCB0aGUgZmxvYXRpbmcgaG9yaXpvbnRhbCBydWxlciBkaXNhcHBlYXJzIHRlbXBvcmFyaWx5 LgorICAgVGhpcyBoYXBwZW5lZCB3aGVuIGRyYXcgY3Jvc3NoYWlycyBmb3J0aHdpdGggaXMgbm9u LW5pbC4gIFtJc3N1ZSAjIDM4Ll0KKworLSAgU3VwcHJlc3MgdGhlIGRyYXdpbmcgb2YgY3Jvc3No YWlycyB1bnRpbCB0aGUgbWlub3ItbW9kZSBoYXMgYmVlbiBmdWxseSBsb2FkZWQuCisgICBUaGUg WCBhbmQvb3IgSFBPUyBhcmUgX3NvbWV0aW1lc18gKD8pIG9mZiB3aGlsZSBsaW5lIG51bWJlcnMg YXJlIGJlaW5nIGRyYXduCisgICBhdCB0aGUgb3V0c2V0IG9mIGluaXRpYWxpemF0aW9uLiAgQGxh d2xpc3QgaXMgaGF2aW5nIHRyb3VibGUgcmVwcm9kdWNpbmcgdGhpcy4KKyAgIFtJc3N1ZSAjIDM2 Ll0KKworLSAgSG9yaXpvbnRhbCBSdWxlcjogIERlcGVuZGluZyB1cG9uIHRoZSBmb250LCBjZXJ0 YWluIGxldHRlcnMgdGhhdCBmb2xsb3cgYSB0YWIKKyAgIFNUUkVUQ0ggY2F1c2UgdGhlIHByZWNl ZGluZyBob3Jpem9udGFsIGhiYXIgdG8gYmUgZXJhc2VkOyBlLmcuLCAiQSIuCisgICBbSXNzdWUg IyAzMC5dCisKKy0gIEZha2UgY3Vyc29ycyBhcmUgYmVpbmcgcmVkcmF3biB0b28gb2Z0ZW4gd2hl biBub24tc2VsZWN0ZWQgdmlzaWJsZSB3aW5kb3dzCisgICBoYXZlIGFuIG9uZ29pbmcgcHJvY2Vz cyB0aGF0IHJlcXVpcmUgZnJlcXVlbnQgcmVkaXNwbGF5IHVwZGF0ZXMgKGUuZy4sCisgICBhbiBl c2hlbGwgYnVmZmVyLiAgQGxhd2xpc3QgbWF5IGhhdmUgYWxyZWFkeSBjb3JyZWN0ZWQgdGhlIGZy ZXF1ZW50IHJlZGlzcGxheQorICAgaXNzdWUgYXMgdG8gbW91c2Utb3ZlcnMsIGJ1dCB3aWxsIG5l ZWQgdG8gY2hlY2sgdGhpcyBvbmNlIGFnYWluIHRvIGJlIHN1cmUuCisgICBbSXNzdWUgIyAxNiBh bmQgMjQuXQorCistICBJbXBsZW1lbnQgYSB3YXkgdG8gcHJvcGVybHkgY2FsY3VsYXRlIFgsIFks IEhQT1MsIFZQT1Mgd2hlbiBkZWFsaW5nIHdpdGgKKyAgIG92ZXJsYXlzLCB0ZXh0IHByb3BlcnRp ZXMgKGludmlzaWJsZSwgZXRjLiksIGFuZCBpbWFnZXMuICBbSXNzdWUgIyAxNy5dCisKKy0gIElt cGxlbWVudCBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gdGhlIG11bHRpcGxlIGN1cnNvcnMgbGli cmFyeSBieSBNYWduYXIgU3ZlZW4uCisgICBbSXNzdWUgIyAxOC5dCisKKy0gIENyZWF0ZSBhIGNv bXByZWhlbnNpdmUgbGlzdCBvZiBmZWF0dXJlcyB0byBhbHdheXMgdGVzdCwgYW5kIHNldHVwIGEg dGVzdCBmaWxlLgorICAgW0lzc3VlICMgMTkuXQorCistICBPZmZlciB1c2VycyB0aGUgYWJpbGl0 eSB0byBjcmVhdGUgYSBzZWNvbmQgc2V0IG9mIGNyb3NzaGFpcnMgc2ltaWxhciB0bworICAgaHR0 cHM6Ly9naXRsYWIuY29tL2lhbmtlbGxpbmcvdmlzaWJsZS1tYXJrL2Jsb2IvbWFzdGVyL3Zpc2li bGUtbWFyay5lbAorICAgW0lzc3VlICMgNi5dCisKKy0gIEZvbGxvdyB1cCB3aXRoIHRoZSBFbWFj cyB0ZWFtIHJlIGJ1ZyMzMjE3NzsgaS5lLiwgKEN1cnJlbnQgbGluZSBudW1iZXIgc2hpZnRzCisg ICBvbmUgY29sdW1uIHRvIHRoZSBsZWZ0LikgIFtJc3N1ZSAjIDkuXQorCistICBGb2xsb3cgdXAg d2l0aCB0aGUgRW1hY3MgdGVhbSByZSBidWcjMzIwNjA7IGkuZS4sIChIb3Jpem9udGFsIFNjcm9s bGluZworICAgKEN1cnJlbnQgTGluZSk6ICBXcm9uZyBsaW5lIGdldHMgaC1zY3JvbGxlZC4pICBb SXNzdWUgIyAxMC5dCisKKy0gIERldGVybWluZSBpZiBidWcgIzI4OTM2IG5lZWRzIHRvIGJlIGZp eGVkIGFuZCBoZWxwIHRoZSBFbWFjcyB0ZWFtIHJlIHNhbWUuCisgICBbSXNzdWUgIyAxMS5dCisK KworVEVTVElORzogIFNpdHVhdGlvbnMgdGhhdCBhbHdheXMgbmVlZCB0byBiZSB0ZXN0ZWQgd2hl biB3b3JraW5nIG9uIHRoZXNlIGZlYXR1cmVzLgorCistICBNdWx0aXBsZSBGYWtlIEN1cnNvcnM6 ICBMaW5lIGVuZGluZ3MuCisKKy0gIENyb3NzaGFpcnM6ICBMaW5lIGVuZGluZ3MuCisKKy0gIGl0 LT5saW5lX3dyYXAgPT0gVFJVTkNBVEUKKworLSAgaXQtPmxpbmVfd3JhcCA9PSBXT1JEX1dSQVAK KworLSAgaXQtPmxpbmVfd3JhcCA9PSBXSU5ET1dfV1JBUAorCistICBIb3Jpem9udGFsIFNjcm9s bGluZyAtLSBUZW1wb3Jhcnk6ICAoc2Nyb2xsLWxlZnQgMSkKKworICAgKHNldHEtbG9jYWwgYXV0 by1oc2Nyb2xsLW1vZGUgJ2N1cnJlbnQtbGluZSkKKworLSAgSG9yaXpvbnRhbCBTY3JvbGxpbmcg LS0gUGVybWFuZW50OiAgKHNjcm9sbC1sZWZ0IDEgdCkKKworICAgKHNldHEtbG9jYWwgYXV0by1o c2Nyb2xsLW1vZGUgJ2N1cnJlbnQtbGluZSkKKworLSAgKGZ1bmRhbWVudGFsLW1vZGUpCisgICAo c2V0cSBkaXNwbGF5LWxpbmUtbnVtYmVycyB0KQorICAgKHNldHEgYnVmZmVyLWRpc3BsYXktdGFi bGUgKG1ha2UtZGlzcGxheS10YWJsZSkpCisgICAoYXNldCBidWZmZXItZGlzcGxheS10YWJsZQor ICAgICAgICAgP1x0CisgICAgICAgICAodmVjdG9yIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCQiAn Zm9udC1sb2NrLXdhcm5pbmctZmFjZSkKKyAgICAgICAgICAgICAgICAgKG1ha2UtZ2x5cGgtY29k ZSA/XHQgJ2hpZ2hsaWdodCkpKQorICAgKGFzZXQgYnVmZmVyLWRpc3BsYXktdGFibGUKKyAgICAg ICAgID9cbgorICAgICAgICAgKHZlY3RvciAobWFrZS1nbHlwaC1jb2RlID9cdTAwQjYgJ2ZvbnQt bG9jay1jb21tZW50LWZhY2UpCisgICAgICAgICAgICAgICAgID9cbikpCisgICAoc2V0cSB0YWIt d2lkdGggOCkKKyAgIChzZXRxLWxvY2FsIGF1dG8taHNjcm9sbC1tb2RlICdjdXJyZW50LWxpbmUp CisKKy0gIE5vIExpbmUgTnVtYmVycworCisKK0NSRUFUSU9OIE9GIFJFUE9TSVRPUlk6CisKKyAg bWtkaXIgRElSRUNUT1JZCisKKyAgY2QgRElSRUNUT1JZCisKKyAgZ2l0IGluaXQKKworICBnaXQg cmVtb3RlIGFkZCBvcmlnaW4gaHR0cHM6Ly9naXRodWIuY29tL2xhd2xpc3QvMTc2ODRfMjI4NzMu Z2l0CisKKyAgIyMjIEhhdmUgYSBsb29rIGF0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisg ICMjIyAgIG9yaWdpbiBodHRwczovL2dpdGh1Yi5jb20vbGF3bGlzdC8xNzY4NF8yMjg3My5naXQg KGZldGNoKQorICAjIyMgICBvcmlnaW4gaHR0cHM6Ly9naXRodWIuY29tL2xhd2xpc3QvMTc2ODRf MjI4NzMuZ2l0IChwdXNoKQorICBnaXQgcmVtb3RlIC12CisKKyAgZ2l0IHJlbW90ZSBhZGQgdXBz dHJlYW0gaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXQvZW1hY3MuZ2l0CisKKyAgIyMj IFZlcmlmeSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCisgICMjIyAgIG9yaWdpbiBodHRwczovL2dp dGh1Yi5jb20vbGF3bGlzdC8xNzY4NF8yMjg3My5naXQgKGZldGNoKQorICAjIyMgICBvcmlnaW4g aHR0cHM6Ly9naXRodWIuY29tL2xhd2xpc3QvMTc2ODRfMjI4NzMuZ2l0IChwdXNoKQorICAjIyMg ICB1cHN0cmVhbSBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdC9lbWFjcy5naXQgKGZl dGNoKQorICAjIyMgICB1cHN0cmVhbSBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdC9l bWFjcy5naXQgKHB1c2gpCisgIGdpdCByZW1vdGUgLXYKKworICBnaXQgZmV0Y2ggdXBzdHJlYW0K KworICAjIyMgQ3JlYXRlIGEgbmV3IGJyYW5jaCBgMTc2ODRfMjI4NzNgIHNvIHlvdSBkb24ndCBo YXZlIHRvIG92ZXJyaWRlIHRoZSB1cHN0cmVhbSBgbWFzdGVyYC4KKyAgZ2l0IGNoZWNrb3V0IC1i IDE3Njg0XzIyODczIDk4NDYzYmVkMDdlY2M5MDU3MDk0OTI4ZmZkYzIzMjFlYWFmM2FiNTIKKwor ICAjIyMgQ3JlYXRlIHRoZSBvbmxpbmUgR2l0aHViIHJlcG9zaXRvcnkgaWYgbm90IGFscmVhZHkg aW4gZXhpc3RlbmNlLgorICBjdXJsIC11IFVTRVJOQU1FOlBBU1NXT1JEIGh0dHBzOi8vYXBpLmdp dGh1Yi5jb20vdXNlci9yZXBvcyAtZCAneyJuYW1lIjoiMTc2ODRfMjI4NzMuZ2l0In0nCisKKyAg Z2l0IHB1c2ggLXUgb3JpZ2luIDE3Njg0XzIyODczCisKKyAgIyMjIEFwcGx5IHRoZSBmb2xsb3dp bmcgcGF0Y2g6ICAwMTQuMDAwIFswOC8yOC8yMDE4XQorICAjIyMgYWRkL2NvbW1pdC9wdXNoCisK KyAgIyMjIEFwcGx5IHRoZSBmb2xsb3dpbmcgcGF0Y2g6ICAwMTQuMDAxIFswOS8wMS8yMDE4XQor ICAjIyMgYWRkL2NvbW1pdC9wdXNoCisKKyAgIyMjIEFwcGx5IHRoZSBmb2xsb3dpbmcgcGF0Y2g6 ICAwMTQuMDAyIFswOS8wMi8yMDE4XQorICAjIyMgYWRkL2NvbW1pdC9wdXNoCisKKworVVBEQVRF IFRIRSBSRVBPU0lUT1JZOgorCisgIGdpdCBhcHBseSAvcGF0aC90by90aGUvZW1hY3MvcGF0Y2gu ZGlmZgorICBnaXQgYWRkIC4KKyAgZ2l0IGNvbW1pdCAtbSAiSU5TRVJUIENPTU1JVCBNRVNTQUdF LiIKKyAgZ2l0IHB1c2ggLXUgb3JpZ2luIDE3Njg0XzIyODczCisKK0NSRUFURSBQQVRDSEVTOiAg Z2l0IGZvcm1hdC1wYXRjaCAtMSBTSEEKKyAgICAgICAgICAgICAgICAgZ2l0IGZvcm1hdC1wYXRj aCAtMSAtbyAvcGF0aC90by9vdXRwdXQvZGlyZWN0b3J5IFNIQQorCitMRUdFTkQ6CisKKyNpZmRl ZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmICghTklMUCAo QlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtdWx0aXBsZV9jdXJzb3JzX2NvbmYpKQorICAg ICAgICAgIHx8ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMp KSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAo d2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9f c3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEg KHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG53aW5kb3cgKCVzKVxu Iiwgd2luZG93X2NoYXIpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgR0xZUEhfREVCVUcKKyAg c3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGludCB0ZW1wX2Z4ID0gV0lO RE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgdy0+cGh5c19jdXJzb3IueCk7CisgIGludCB0 ZW1wX2Z5ID0gV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcsIHctPnBoeXNfY3Vyc29yLnkpOwor ICBlbnVtIHdpbmRvd19wYXJ0IHBhcnQgPSBPTl9OT1RISU5HOworICBMaXNwX09iamVjdCB3aW5k b3cgPSB3aW5kb3dfZnJvbV9jb29yZGluYXRlcyAoZiwgdGVtcF9meCwgdGVtcF9meSwgJnBhcnQs IGZhbHNlKTsKKyAgTGlzcF9PYmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcg KHdpbmRvdywgUW5pbCk7CisgIGRlYnVnX21ldGhvZF9hZGQgKHcsICJ3aW5kb3cgKCVzKSIsIFNT REFUQSAod2luZG93X3N0cmluZykpOworI2VuZGlmCisKK2NoYXIgKndfY29udGVudHMgPSAoQlVG RkVSUCAody0+Y29udGVudHMpICYmIFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgbmFtZSkpKQorICAgICAgICAgICAgICAgICAgID8gU1NEQVRBIChCVkFSIChYQlVGRkVSICh3 LT5jb250ZW50cyksIG5hbWUpKQorICAgICAgICAgICAgICAgICAgIDogIm5pbCI7CitmcHJpbnRm IChzdGRlcnIsICJcbkJ1ZmZlciAoJXMpXG4iLCB3X2NvbnRlbnRzKTsKKworc3RydWN0IGZhY2Ug KmZhY2UgPSBtY19sb29rdXBfZmFjZSAoaXQpOworc3RydWN0IGZvbnQgKmZvbnQgPSBmYWNlLT5m b250OworTGlzcF9PYmplY3QgZm9yZWdyb3VuZF9mYWNlID0gZmFjZS0+bGZhY2VbTEZBQ0VfRk9S RUdST1VORF9JTkRFWF07CitMaXNwX09iamVjdCBiYWNrZ3JvdW5kX2ZhY2UgPSBmYWNlLT5sZmFj ZVtMRkFDRV9CQUNLR1JPVU5EX0lOREVYXTsKK2ZwcmludGYgKHN0ZGVyciwgIlxuZm9yZWdyb3Vu ZC9iYWNrZ3JvdW5kICglcy8lcylcbiIsCisgICAgICAgICAgKCFOSUxQIChmb3JlZ3JvdW5kX2Zh Y2UpID8gU1NEQVRBIChmb3JlZ3JvdW5kX2ZhY2UpIDogIk5JTFAgZm9yZWdyb3VuZF9mYWNlIiks CisgICAgICAgICAgKCFOSUxQIChiYWNrZ3JvdW5kX2ZhY2UpID8gU1NEQVRBIChiYWNrZ3JvdW5k X2ZhY2UpIDogIk5JTFAgYmFja2dyb3VuZF9mYWNlIikpOworCitmcHJpbnRmIChzdGRlcnIsICJN eSBsaXNwIG9iamVjdDogICVzXG4iLCBTU0RBVEEgKEZjaGFyX3RvX3N0cmluZyAobWFrZV9maXhu dW0gKDEwMSkpKSk7CisKK2ZwcmludGYgKHN0ZGVyciwgInN0cmluZzogJXMgfCBpbnQ6ICVkXG4i LCBTU0RBVEEgKGJ1aWxkX3N0cmluZyAoImZvbyIpKSwgNjkpOworCitpZiAoQlVGRkVSUCAody0+ Y29udGVudHMpICYmIFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkp KQorICBmcHJpbnRmIChzdGRlcnIsICJuc191cGRhdGVfd2luZG93X2VuZDogICVzXG4iLCBTU0RB VEEgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKTsKKworQVVUT19TVFJJTkcg KG15X3N0cmluZ19vbmUsICJUaGlzIGlzIHRoZSB2YWx1ZSBvZiBgbXlfb2JqZWN0X29uZSc6ICAl cyIpOworTGlzcF9PYmplY3QgbXlfb2JqZWN0X29uZSA9IG1ha2VfZmxvYXQgKDAuMSk7CitDQUxM TiAoRm1lc3NhZ2UsIG15X3N0cmluZ19vbmUsIG15X29iamVjdF9vbmUpOworCitBVVRPX1NUUklO RyAobXlfc3RyaW5nX3R3bywgIlRoaXMgaXMgdGhlIHZhbHVlIG9mIGBteV9vYmplY3RfdHdvJzog ICVzIik7CitMaXNwX09iamVjdCBteV9vYmplY3RfdHdvID0gbWFrZV9maXhudW0gKDc3Nyk7CitD QUxMTiAoRm1lc3NhZ2UsIG15X3N0cmluZ190d28sIG15X29iamVjdF90d28pOworCitXSU5ET1c6 ICB3LT5jb250ZW50cworCitCVUZGRVI6ICBYQlVGRkVSICh3LT5jb250ZW50cykKKworQlVGRkVS IExPQ0FMIFZBUklBQkxFOiAgQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCB2YXJpYWJsZV9u YW1lKQorCitOTyBOQVJST1dJTkc6CisKK0JFRyA9PSBCZWdpbm5pbmcgb2YgQnVmZmVyICh3aW5k b3cgZGlzcGxheXMgY3VycmVudCBidWZmZXIpCisKK1pWID09IEVuZCBvZiBCdWZmZXIgKHdpbmRv dyBkaXNwbGF5cyBjdXJyZW50IGJ1ZmZlcikKKworQkVHX0JZVEUgPT0gQmVnaW5uaW5nIEJ5dGUg b2YgQnVmZmVyCisKK1pfQllURSA9PSBFbmRpbmcgQnl0ZSBvZiBCdWZmZXIKKworTkFSUk9XRUQg LS0gIlYiOgorCitCRUdWID09IEJlZ2lubmluZyBvZiBOQVJST1dFRCBCdWZmZXIgKHdpbmRvdyBk aXNwbGF5cyBjdXJyZW50IGJ1ZmZlcikKKworWlYgPT0gRW5kIG9mIE5BUlJPV0VEIEJ1ZmZlciAo d2luZG93IGRpc3BsYXlzIGN1cnJlbnQgYnVmZmVyKQorCitCRUdWX0JZVEUgPT0gQmVnaW5uaW5n IEJ5dGUgb2YgTkFSUk9XRUQgQnVmZmVyCisKK1pWX0JZVEUgPT0gRW5kaW5nIEJ5dGUgb2YgTkFS Uk9XRUQgYnVmZmVyCisKK1dJTkRPVyBET0VTIE5PVCBORUNFU1NBUklMWSBESVNQTEFZIEJVRkZF UjoKKworYm9iX2Rpc3JlZ2FyZF9uYXJyb3cgPSBCVUZfQkVHIChidWZmZXIpCitlb2JfZGlzcmVn YXJkX25hcnJvdyA9IEJVRl9aIChidWZmZXIpCisKK2JvYl9yZXNwZWN0X25hcnJvdyA9IEJVRl9C RUdWIChidWZmZXIpCitlb2JfcmVzcGVjdF9uYXJyb3cgPSBCVUZfWlYgKGJ1ZmZlcikKKword2lu ZG93X3N0YXJ0ID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCkKK3dpbmRvd19lbmQgPSBlb2Jf ZGlzcmVnYXJkX25hcnJvdyAtIHctPndpbmRvd19lbmRfcG9zCisKK2J1ZmZlcl9zaXplID0gZW9i X2Rpc3JlZ2FyZF9uYXJyb3cgLSBib2JfZGlzcmVnYXJkX25hcnJvdworCitidWZmZXJfbmFycm93 ZWRfcCA9IChlb2JfcmVzcGVjdF9uYXJyb3cgLSBib2JfcmVzcGVjdF9uYXJyb3cgIT0gYnVmZmVy X3NpemUpCisKK3dpbmRvd19jb250ZW50c192aXNpYmxlX3AgPSAoYm9iX3Jlc3BlY3RfbmFycm93 ID09IHdpbmRvd19zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlb2JfcmVz cGVjdF9uYXJyb3cgPT0gd2luZG93X2VuZCkKKworVGhpcyBpcyB0aGUgQyBbdGVybmFyeSBvcGVy YXRvcl1bMV0gKE9iamVjdGl2ZS1DIGlzIGEgc3VwZXJzZXQgb2YgQyk6CisKKyAgICBsYWJlbC5m cmFtZSA9IChpblBzZXVkb0VkaXRNb2RlKSA/IGtMYWJlbEluZGVudGVkUmVjdCA6IGtMYWJlbFJl Y3Q7CisKK2lzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvCisKKyAgICBpZihpblBzZXVkb0Vk aXRNb2RlKSB7CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsSW5kZW50ZWRSZWN0OworICAgIH0g ZWxzZSB7CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsUmVjdDsKKyAgICB9CisKK1RoZSB0ZXJu YXJ5IHdpdGggbm8gZmlyc3QgZWxlbWVudCAoZS5nLiBgdmFyaWFibGUgPzogYW5vdGhlclZhcmlh YmxlYCkgbWVhbnMgdGhlIHNhbWUgYXMgYCh2YWxPclZhciAhPSAwKSA/IHZhbE9yVmFyIDogYW5v dGhlclZhbE9yVmFyYAorCitFQVNTRVJUOgorCisgIGVhc3NlcnQgKEJVRl9CRUcgKGIpIDw9IGNo YXJwb3MgJiYgY2hhcnBvcyA8PSBCVUZfWiAoYikpOworICBib29sIGJhcmZfY3Jhc2ggPSAoQlVG X0JFRyAoYikgPD0gY2hhcnBvcyAmJiBjaGFycG9zIDw9IEJVRl9aIChiKSkgPyBmYWxzZSA6IHRy dWU7ICovCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZnRvYXN0ci5oPgorCisjZGVm aW5lIE5PX0ZSSU5HRV9CSVRNQVAgMAorCisjZGVmaW5lIExFRlRfRlJJTkdFX0JJVE1BUCAtMwor CisjZGVmaW5lIFJJR0hUX0ZSSU5HRV9CSVRNQVAgLTQKKworLyogVGV4dCBjdXJzb3IgdHlwZXMu ICAqLworCitlbnVtIHR5cGVfb2ZfYWN0aW9uCit7CisgIE1VTFRJUExFX0NVUlNPUlMsCisgIEhP UklaT05UQUxfUlVMRVIsCisgIFZFUlRJQ0FMX1JVTEVSCit9OworCisvKiBGdW5jdGlvbiBwcm90 b3R5cGVzLiAgKi8KKworc3RhdGljIHZvaWQgZGVidWdfbWV0aG9kX2FkZCAoc3RydWN0IHdpbmRv dyAqLCBjaGFyIGNvbnN0ICosIC4uLik7CisKK3N0YXRpYyBpbnQgd2luZG93X2hzY3JvbGxfbGlt aXRlZCAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGZyYW1lICpmKTsKKwordm9pZCBkdW1wX2ds eXBoX3JvdyAoc3RydWN0IGdseXBoX3JvdyAqLCBpbnQsIGludCkgRVhURVJOQUxMWV9WSVNJQkxF OworCisvKiBSZWNvcmQgRlJPTV9XSEVSRSB3aGVuIGByZWRpc3BsYXlfcHJlc2VydmVfZWNob19h cmVhJyBpcyBjYWxsZWQuICovCitzdGF0aWMgaW50IG1jX3JlZGlzcGxheV9wcmVzZXJ2ZV9lY2hv X2FyZWE7CisKKy8qIFJlY29yZCBGUk9NX1dIRVJFIHdoZW4gYHJlZGlzcGxheScgaXMgY2FsbGVk LiAqLworc3RhdGljIGludCBtY19yZWRpc3BsYXk7CisKKy8qIFJlY29yZCBGUk9NX1dIRVJFIHdo ZW4gYHJlZGlzcGxheV9pbnRlcm5hbCcgaXMgY2FsbGVkLiAqLworc3RhdGljIGludCBtY19yZWRp c3BsYXlfaW50ZXJuYWw7CisKKy8qIFNldCB2YXJpYWJsZXMgV0lEVEggYW5kIEJZVEVTIGZvciBh IG11bHRpYnl0ZSBzZXF1ZW5jZSBzdGFydGluZyBhdCBQLgorICAgRFAgaXMgYSBkaXNwbGF5IHRh YmxlIG9yIE5VTEwuICovCisKKyNkZWZpbmUgTUNfTVVMVElCWVRFX0JZVEVTX1dJRFRIKHAsIGRw LCBieXRlcywgd2lkdGgpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGludCBjaDsJCQkJCQkJ CVwKKwkJCQkJCQkJCQlcCisgICAgY2ggPSBTVFJJTkdfQ0hBUl9BTkRfTEVOR1RIIChwLCBieXRl cyk7CQkJCVwKKyAgICBpZiAoQllURVNfQllfQ0hBUl9IRUFEICgqcCkgIT0gYnl0ZXMpCQkJCVwK KyAgICAgIHdpZHRoID0gYnl0ZXMgKiA0OwkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAg ICB7CQkJCQkJCQkJXAorCWlmIChkcCAhPSAwICYmIFZFQ1RPUlAgKERJU1BfQ0hBUl9WRUNUT1Ig KGRwLCBjaCkpKQkJXAorCSAgd2lkdGggPSBzYW5pdGl6ZV9jaGFyX3dpZHRoIChBU0laRSAoRElT UF9DSEFSX1ZFQ1RPUiAoZHAsIGNoKSkpOyBcCisJZWxzZQkJCQkJCQkJXAorCSAgd2lkdGggPSBD SEFSQUNURVJfV0lEVEggKGNoKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUg KDApCisKKy8qIENoZWNrIHRoZSBwcmVzZW5jZSBvZiBhIGRpc3BsYXkgcHJvcGVydHkgYW5kIGNv bXB1dGUgaXRzIHdpZHRoLgorICAgSWYgYSBwcm9wZXJ0eSB3YXMgZm91bmQgYW5kIGl0cyB3aWR0 aCB3YXMgZm91bmQgYXMgd2VsbCwgcmV0dXJuCisgICBpdHMgd2lkdGggKD49IDApIGFuZCBzZXQg dGhlIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIHByb3BlcnR5CisgICBpbiBFTkRQT1MuCisg ICBPdGhlcndpc2UganVzdCByZXR1cm4gLTEuICAqLworc3RhdGljIGludAorbWNfY2hlY2tfZGlz cGxheV93aWR0aCAocHRyZGlmZl90IHBvcywgcHRyZGlmZl90IGNvbCwgcHRyZGlmZl90ICplbmRw b3MpCit7CisgIExpc3BfT2JqZWN0IHZhbCwgb3ZlcmxheTsKKyAgaWYgKENPTlNQICh2YWwgPSBn ZXRfY2hhcl9wcm9wZXJ0eV9hbmRfb3ZlcmxheQorICAgICAgIChtYWtlX2ZpeG51bSAocG9zKSwg UWRpc3BsYXksIFFuaWwsICZvdmVybGF5KSkKKyAgICAgICYmIEVRIChRc3BhY2UsIFhDQVIgKHZh bCkpKQorICAgIHsgLyogRklYTUU6IFVzZSBjYWxjX3BpeGVsX3dpZHRoX29yX2hlaWdodC4gICov CisgICAgICBMaXNwX09iamVjdCBwbGlzdCA9IFhDRFIgKHZhbCksIHByb3A7CisgICAgICBpbnQg d2lkdGggPSAtMTsKKyAgICAgIEVNQUNTX0lOVCBhbGlnbl90b19tYXggPQorICAoY29sIDwgTU9T VF9QT1NJVElWRV9GSVhOVU0gLSBJTlRfTUFYCisgICA/IChFTUFDU19JTlQpIElOVF9NQVggKyBj b2wKKyAgIDogTU9TVF9QT1NJVElWRV9GSVhOVU0pOworICAgICAgaWYgKChwcm9wID0gRnBsaXN0 X2dldCAocGxpc3QsIFFDd2lkdGgpLAorICAgICBSQU5HRURfRklYTlVNUCAoMCwgcHJvcCwgSU5U X01BWCkpCisgICAgfHwgKHByb3AgPSBGcGxpc3RfZ2V0IChwbGlzdCwgUUNyZWxhdGl2ZV93aWR0 aCksCisgICAgICAgIFJBTkdFRF9GSVhOVU1QICgwLCBwcm9wLCBJTlRfTUFYKSkpCisgIHdpZHRo ID0gWEZJWE5VTSAocHJvcCk7CisgICAgICBlbHNlIGlmIChGTE9BVFAgKHByb3ApICYmIDAgPD0g WEZMT0FUX0RBVEEgKHByb3ApCisgICAgICAgICAmJiBYRkxPQVRfREFUQSAocHJvcCkgPD0gSU5U X01BWCkKKyAgd2lkdGggPSAoaW50KShYRkxPQVRfREFUQSAocHJvcCkgKyAwLjUpOworICAgICAg ZWxzZSBpZiAoKHByb3AgPSBGcGxpc3RfZ2V0IChwbGlzdCwgUUNhbGlnbl90byksCisgICAgUkFO R0VEX0ZJWE5VTVAgKGNvbCwgcHJvcCwgYWxpZ25fdG9fbWF4KSkpCisgIHdpZHRoID0gWEZJWE5V TSAocHJvcCkgLSBjb2w7CisgICAgICBlbHNlIGlmIChGTE9BVFAgKHByb3ApICYmIGNvbCA8PSBY RkxPQVRfREFUQSAocHJvcCkKKyAgICAgICAgICYmIChYRkxPQVRfREFUQSAocHJvcCkgPD0gYWxp Z25fdG9fbWF4KSkKKyAgd2lkdGggPSAoaW50KShYRkxPQVRfREFUQSAocHJvcCkgKyAwLjUpIC0g Y29sOworICAgICAgaWYgKHdpZHRoID49IDApCisgIHsKKyAgICBwdHJkaWZmX3Qgc3RhcnQ7Cisg ICAgaWYgKE9WRVJMQVlQIChvdmVybGF5KSkKKyAgICAgICplbmRwb3MgPSBPVkVSTEFZX1BPU0lU SU9OIChPVkVSTEFZX0VORCAob3ZlcmxheSkpOworICAgIGVsc2UKKyAgICAgIGdldF9wcm9wZXJ0 eV9hbmRfcmFuZ2UgKHBvcywgUWRpc3BsYXksICZ2YWwsICZzdGFydCwgZW5kcG9zLCBRbmlsKTsK KyAgICAvKiBGb3IgOnJlbGF0aXZlLXdpZHRoLCB3ZSBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBj b2x1bW4KKyAgICAgICB3aWR0aCBvZiB0aGUgY2hhcmFjdGVyIGF0IFBPUywgaWYgaXQgaXMgZ3Jl YXRlciB0aGFuIDEuICAqLworICAgIGlmICghTklMUCAoRnBsaXN0X2dldCAocGxpc3QsIFFDcmVs YXRpdmVfd2lkdGgpKQorICAgICAgICAmJiAhTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIGVu YWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpKQorICAgICAgeworICAgICAgICBpbnQgYiwgd2Q7 CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBCWVRFX1BPU19BRERSIChDSEFSX1RPX0JZVEUg KHBvcykpOworICAgICAgICBNQ19NVUxUSUJZVEVfQllURVNfV0lEVEggKHAsIGJ1ZmZlcl9kaXNw bGF5X3RhYmxlICgpLCBiLCB3ZCk7CisgICAgICAgIHdpZHRoICo9IHdkOworICAgICAgfQorICAg IHJldHVybiB3aWR0aDsKKyAgfQorICAgIH0KKyAgcmV0dXJuIC0xOworfQorCisvKiBTY2Fubmlu ZyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZSwgc3RvcCBhdCB0aGUgYnVm ZmVyCisgICBwb3NpdGlvbiBFTkRQT1Mgb3IgYXQgdGhlIGNvbHVtbiBHT0FMQ09MIG9yIGF0IHRo ZSBlbmQgb2YgbGluZSwgd2hpY2hldmVyCisgICBjb21lcyBmaXJzdC4KKyAgIFJldHVybiB0aGUg cmVzdWx0aW5nIGJ1ZmZlciBwb3NpdGlvbiBhbmQgY29sdW1uIGluIEVORFBPUyBhbmQgR09BTENP TC4KKyAgIFBSRVZDT0wgZ2V0cyBzZXQgdG8gdGhlIGNvbHVtbiBvZiB0aGUgcHJldmlvdXMgcG9z aXRpb24gKGl0J3MgYWx3YXlzCisgICBzdHJpY3RseSBzbWFsbGVyIHRoYW4gdGhlIGdvYWwgY29s dW1uKS4gICovCit2b2lkCittY19zY2FuX2Zvcl9jb2x1bW4gKHB0cmRpZmZfdCAqZW5kcG9zLCBF TUFDU19JTlQgKmdvYWxjb2wsIHB0cmRpZmZfdCAqcHJldmNvbCwgcHRyZGlmZl90IHB0KQorewor ICBFTUFDU19JTlQgbGFzdF9rbm93bl9jb2x1bW5fbW9kaWZpZWQgPSAwOworICBwdHJkaWZmX3Qg bGFzdF9rbm93bl9jb2x1bW4gPSAwOworICBpbnQgdGFiX3dpZHRoID0gU0FORV9UQUJfV0lEVEgg KGN1cnJlbnRfYnVmZmVyKTsKKyAgYm9vbCBjdGxfYXJyb3cgPSAhTklMUCAoQlZBUiAoY3VycmVu dF9idWZmZXIsIGN0bF9hcnJvdykpOworICBzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxlICpkcCA9IGJ1 ZmZlcl9kaXNwbGF5X3RhYmxlICgpOworICBib29sIG11bHRpYnl0ZSA9ICFOSUxQIChCVkFSIChj dXJyZW50X2J1ZmZlciwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSk7CisgIHN0cnVjdCBj b21wb3NpdGlvbl9pdCBjbXBfaXQ7CisgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgc3RydWN0IHdp bmRvdyAqdzsKKyAgLyogU3RhcnQgdGhlIHNjYW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGxp bmUgd2l0aCBjb2x1bW4gbnVtYmVyIDAuICAqLworICByZWdpc3RlciBwdHJkaWZmX3QgY29sID0g MCwgcHJldl9jb2wgPSAwOworICBFTUFDU19JTlQgZ29hbCA9IGdvYWxjb2wgPyAqZ29hbGNvbCA6 IE1PU1RfUE9TSVRJVkVfRklYTlVNOworICBwdHJkaWZmX3QgZW5kID0gZW5kcG9zID8gKmVuZHBv cyA6IHB0OworICBwdHJkaWZmX3Qgc2Nhbiwgc2Nhbl9ieXRlLCBuZXh0X2JvdW5kYXJ5OworICBz Y2FuID0gZmluZF9uZXdsaW5lIChwdCwgQ0hBUl9UT19CWVRFIChwdCksIEJFR1YsIEJFR1ZfQllU RSwgLTEsIE5VTEwsICZzY2FuX2J5dGUsIDEpOworICBuZXh0X2JvdW5kYXJ5ID0gc2NhbjsKKyAg d2luZG93ID0gRmdldF9idWZmZXJfd2luZG93IChGY3VycmVudF9idWZmZXIgKCksIFFuaWwpOwor ICB3ID0gISBOSUxQICh3aW5kb3cpID8gWFdJTkRPVyAod2luZG93KSA6IE5VTEw7CisgIG1lbXNl dCAoJmNtcF9pdCwgMCwgc2l6ZW9mIGNtcF9pdCk7CisgIGNtcF9pdC5pZCA9IC0xOworICBjb21w b3NpdGlvbl9jb21wdXRlX3N0b3BfcG9zICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIGVuZCwg UW5pbCk7CisgIC8qIFNjYW4gZm9yd2FyZCB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgKi8KKyAg d2hpbGUgKHNjYW4gPCBlbmQpCisgICAgeworICAgICAgaW50IGM7CisgICAgICAvKiBPY2Nhc2lv bmFsbHkgd2UgbWF5IG5lZWQgdG8gc2tpcCBpbnZpc2libGUgdGV4dC4gICovCisgICAgICB3aGls ZSAoc2NhbiA9PSBuZXh0X2JvdW5kYXJ5KQorICB7CisgICAgcHRyZGlmZl90IG9sZF9zY2FuID0g c2NhbjsKKyAgICAvKiBUaGlzIHVwZGF0ZXMgTkVYVF9CT1VOREFSWSB0byB0aGUgbmV4dCBwbGFj ZQorICAgICAgIHdoZXJlIHdlIG1pZ2h0IG5lZWQgdG8gc2tpcCBtb3JlIGludmlzaWJsZSB0ZXh0 LiAgKi8KKyAgICBzY2FuID0gc2tpcF9pbnZpc2libGUgKHNjYW4sICZuZXh0X2JvdW5kYXJ5LCBl bmQsIFFuaWwpOworICAgIGlmIChzY2FuICE9IG9sZF9zY2FuKQorICAgICAgc2Nhbl9ieXRlID0g Q0hBUl9UT19CWVRFIChzY2FuKTsKKyAgICBpZiAoc2NhbiA+PSBlbmQpCisgICAgICBnb3RvIGVu ZGxvb3A7CisgIH0KKyAgICAgIC8qIFRlc3QgcmVhY2hpbmcgdGhlIGdvYWwgY29sdW1uLiAgV2Ug ZG8gdGhpcyBhZnRlciBza2lwcGluZworICAgaW52aXNpYmxlIGNoYXJhY3RlcnMsIHNvIHRoYXQg d2UgcHV0IHBvaW50IGJlZm9yZSB0aGUKKyAgIGNoYXJhY3RlciBvbiB3aGljaCB0aGUgY3Vyc29y IHdpbGwgYXBwZWFyLiAgKi8KKyAgICAgIGlmIChjb2wgPj0gZ29hbCkKKyAgYnJlYWs7CisgICAg ICBwcmV2X2NvbCA9IGNvbDsKKyAgICAgIHsgLyogQ2hlY2sgZGlzcGxheSBwcm9wZXJ0eS4gICov CisgIHB0cmRpZmZfdCBlbmRwOworICBpbnQgd2lkdGggPSBtY19jaGVja19kaXNwbGF5X3dpZHRo IChzY2FuLCBjb2wsICZlbmRwKTsKKyAgaWYgKHdpZHRoID49IDApCisgICAgeworICAgICAgY29s ICs9IHdpZHRoOworICAgICAgaWYgKGVuZHAgPiBzY2FuKSAvKiBBdm9pZCBpbmZpbml0ZSBsb29w cyB3aXRoIDAtd2lkdGggb3ZlcmxheXMuICAqLworICAgICAgICB7CisgICAgc2NhbiA9IGVuZHA7 CisgICAgc2Nhbl9ieXRlID0gQ0hBUl9UT19CWVRFIChzY2FuKTsKKyAgICBjb250aW51ZTsKKyAg ICAgICAgfQorICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIENoZWNrIGNvbXBvc2l0aW9uIHNlcXVl bmNlLiAgKi8KKyAgICAgIGlmIChjbXBfaXQuaWQgPj0gMAorICAgIHx8IChzY2FuID09IGNtcF9p dC5zdG9wX3BvcworICAgICAgICAmJiBjb21wb3NpdGlvbl9yZXNlYXRfaXQgKCZjbXBfaXQsIHNj YW4sIHNjYW5fYnl0ZSwgZW5kLAorICAgICAgICAgIHcsIE5VTEwsIFFuaWwpKSkKKyAgY29tcG9z aXRpb25fdXBkYXRlX2l0ICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIFFuaWwpOworICAgICAg aWYgKGNtcF9pdC5pZCA+PSAwKQorICB7CisgICAgc2NhbiArPSBjbXBfaXQubmNoYXJzOworICAg IHNjYW5fYnl0ZSArPSBjbXBfaXQubmJ5dGVzOworICAgIGlmIChzY2FuIDw9IGVuZCkKKyAgICAg IGNvbCArPSBjbXBfaXQud2lkdGg7CisgICAgaWYgKGNtcF9pdC50byA9PSBjbXBfaXQubmdseXBo cykKKyAgICAgIHsKKyAgICAgICAgY21wX2l0LmlkID0gLTE7CisgICAgICAgIGNvbXBvc2l0aW9u X2NvbXB1dGVfc3RvcF9wb3MgKCZjbXBfaXQsIHNjYW4sIHNjYW5fYnl0ZSwgZW5kLAorICAgICAg ICAgICAgICBRbmlsKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBjbXBfaXQuZnJvbSA9IGNt cF9pdC50bzsKKyAgICBjb250aW51ZTsKKyAgfQorICAgICAgYyA9IEZFVENIX0JZVEUgKHNjYW5f Ynl0ZSk7CisgICAgICAvKiBTZWUgaWYgdGhlcmUgaXMgYSBkaXNwbGF5IHRhYmxlIGFuZCBpdCBy ZWxhdGVzCisgICB0byB0aGlzIGNoYXJhY3Rlci4gICovCisgICAgICBpZiAoZHAgIT0gMAorICAg ICYmICEgKG11bHRpYnl0ZSAmJiBMRUFESU5HX0NPREVfUCAoYykpCisgICAgJiYgVkVDVE9SUCAo RElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGMpKSkKKyAgeworICAgIExpc3BfT2JqZWN0IGNoYXJ2ZWM7 CisgICAgcHRyZGlmZl90IGksIG47CisgICAgLyogVGhpcyBjaGFyYWN0ZXIgaXMgZGlzcGxheWVk IHVzaW5nIGEgdmVjdG9yIG9mIGdseXBocy4KKyAgICAgICBVcGRhdGUgdGhlIGNvbHVtbi9wb3Np dGlvbiBiYXNlZCBvbiB0aG9zZSBnbHlwaHMuICAqLworICAgIGNoYXJ2ZWMgPSBESVNQX0NIQVJf VkVDVE9SIChkcCwgYyk7CisgICAgbiA9IEFTSVpFIChjaGFydmVjKTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKQorICAgICAgeworICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSBoYW5kbGVk IHRoZSBzYW1lIGFzCisgICAgIG5leHRfZWxlbWVudF9mcm9tX2Rpc3BsYXlfdmVjdG9yIGRvZXMg aXQuICAqLworICAgICAgICBMaXNwX09iamVjdCBlbnRyeSA9IEFSRUYgKGNoYXJ2ZWMsIGkpOwor ICAgICAgICBpZiAoR0xZUEhfQ09ERV9QIChlbnRyeSkpCisgICAgYyA9IEdMWVBIX0NPREVfQ0hB UiAoZW50cnkpOworICAgICAgICBlbHNlCisgICAgYyA9ICcgJzsKKyAgICAgICAgaWYgKGMgPT0g J1xuJykKKyAgICBnb3RvIGVuZGxvb3A7CisgICAgICAgIGlmIChjID09ICdccicgJiYgRVEgKEJW QVIgKGN1cnJlbnRfYnVmZmVyLCBzZWxlY3RpdmVfZGlzcGxheSksIFF0KSkKKyAgICBnb3RvIGVu ZGxvb3A7CisgICAgICAgIGlmIChjID09ICdcdCcpCisgICAgeworICAgICAgY29sICs9IHRhYl93 aWR0aDsKKyAgICAgIGNvbCA9IGNvbCAvIHRhYl93aWR0aCAqIHRhYl93aWR0aDsKKyAgICB9Cisg ICAgICAgIGVsc2UKKyAgICArK2NvbDsKKyAgICAgIH0KKyAgfQorICAgICAgZWxzZQorICB7Cisg ICAgLyogVGhlIGRpc3BsYXkgdGFibGUgZG9lc24ndCBhZmZlY3QgdGhpcyBjaGFyYWN0ZXI7Cisg ICAgICAgaXQgZGlzcGxheXMgYXMgaXRzZWxmLiAgKi8KKyAgICBpZiAoYyA9PSAnXG4nKQorICAg ICAgZ290byBlbmRsb29wOworICAgIGlmIChjID09ICdccicgJiYgRVEgKEJWQVIgKGN1cnJlbnRf YnVmZmVyLCBzZWxlY3RpdmVfZGlzcGxheSksIFF0KSkKKyAgICAgIGdvdG8gZW5kbG9vcDsKKyAg ICBpZiAoYyA9PSAnXHQnKQorICAgICAgeworICAgICAgICBjb2wgKz0gdGFiX3dpZHRoOworICAg ICAgICBjb2wgPSBjb2wgLyB0YWJfd2lkdGggKiB0YWJfd2lkdGg7CisgICAgICB9CisgICAgZWxz ZSBpZiAobXVsdGlieXRlICYmIExFQURJTkdfQ09ERV9QIChjKSkKKyAgICAgIHsKKyAgICAgICAg LyogU3RhcnQgb2YgbXVsdGktYnl0ZSBmb3JtLiAgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAq cHRyOworICAgICAgICBpbnQgYnl0ZXMsIHdpZHRoOworICAgICAgICBwdHIgPSBCWVRFX1BPU19B RERSIChzY2FuX2J5dGUpOworICAgICAgICBNQ19NVUxUSUJZVEVfQllURVNfV0lEVEggKHB0ciwg ZHAsIGJ5dGVzLCB3aWR0aCk7CisgICAgICAgIC8qIFN1YnRyYWN0IG9uZSB0byBjb21wZW5zYXRl IGZvciB0aGUgaW5jcmVtZW50CisgICAgIHRoYXQgaXMgZ29pbmcgdG8gaGFwcGVuIGJlbG93LiAg Ki8KKyAgICAgICAgc2Nhbl9ieXRlICs9IGJ5dGVzIC0gMTsKKyAgICAgICAgY29sICs9IHdpZHRo OworICAgICAgfQorICAgIGVsc2UgaWYgKGN0bF9hcnJvdyAmJiAoYyA8IDA0MCB8fCBjID09IDAx NzcpKQorICAgICAgY29sICs9IDI7CisgICAgZWxzZSBpZiAoYyA8IDA0MCB8fCBjID49IDAxNzcp CisgICAgICBjb2wgKz0gNDsKKyAgICBlbHNlCisgICAgICBjb2wrKzsKKyAgfQorICAgICAgc2Nh bisrOworICAgICAgc2Nhbl9ieXRlKys7CisgICAgfQorIGVuZGxvb3A6CisgIGxhc3Rfa25vd25f Y29sdW1uID0gY29sOworICBsYXN0X2tub3duX2NvbHVtbl9wb2ludCA9IHB0OworICBsYXN0X2tu b3duX2NvbHVtbl9tb2RpZmllZCA9IE1PRElGRjsKKyAgaWYgKGdvYWxjb2wpCisgICAgKmdvYWxj b2wgPSBjb2w7CisgIGlmIChlbmRwb3MpCisgICAgKmVuZHBvcyA9IHNjYW47CisgIGlmIChwcmV2 Y29sKQorICAgICpwcmV2Y29sID0gcHJldl9jb2w7Cit9CisKK3B0cmRpZmZfdAorbWNfY3VycmVu dF9jb2x1bW4gKHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCBwdCkKK3sKKyAgLyogYGJ1Zl9j aGFycG9zX3RvX2J5dGVwb3MnOiAgZWFzc2VydCAoQlVGX0JFRyAoYikgPD0gY2hhcnBvcyAmJiBj aGFycG9zIDw9IEJVRl9aIChiKSk7ICovCisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRz OworICBDSEVDS19CVUZGRVIgKGJ1Zik7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChi dWYpOworICBib29sIGJhcmZfY3Jhc2ggPSAoQlVGX0JFRyAoYikgPD0gcHQgJiYgcHQgPD0gQlVG X1ogKGIpKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2gpCisgICAgcmV0dXJuIDA7 CisgIEVNQUNTX0lOVCBsYXN0X2tub3duX2NvbHVtbl9tb2RpZmllZCA9IDA7CisgIHB0cmRpZmZf dCBsYXN0X2tub3duX2NvbHVtbiA9IDA7CisgIHB0cmRpZmZfdCBjb2w7CisgIHVuc2lnbmVkIGNo YXIgKnB0ciwgKnN0b3A7CisgIGJvb2wgdGFiX3NlZW47CisgIHB0cmRpZmZfdCBwb3N0X3RhYjsK KyAgaW50IGM7CisgIGludCB0YWJfd2lkdGggPSBTQU5FX1RBQl9XSURUSCAoY3VycmVudF9idWZm ZXIpOworICBib29sIGN0bF9hcnJvdyA9ICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwgY3Rs X2Fycm93KSk7CisgIHN0cnVjdCBMaXNwX0NoYXJfVGFibGUgKmRwID0gYnVmZmVyX2Rpc3BsYXlf dGFibGUgKCk7CisgIGlmIChwdCA9PSBsYXN0X2tub3duX2NvbHVtbl9wb2ludAorICAgICAgJiYg TU9ESUZGID09IGxhc3Rfa25vd25fY29sdW1uX21vZGlmaWVkKQorICAgIHJldHVybiBsYXN0X2tu b3duX2NvbHVtbjsKKyAgLyogSWYgdGhlIGJ1ZmZlciBoYXMgb3ZlcmxheXMsIHRleHQgcHJvcGVy dGllcywKKyAgICAgb3IgbXVsdGlieXRlIGNoYXJhY3RlcnMsIHVzZSBhIG1vcmUgZ2VuZXJhbCBh bGdvcml0aG0uICAqLworICBpZiAoYnVmZmVyX2ludGVydmFscyAoY3VycmVudF9idWZmZXIpCisg ICAgICB8fCBidWZmZXJfaGFzX292ZXJsYXlzICgpCisgICAgICB8fCBaICE9IFpfQllURSkKKyAg ICB7CisgICAgICBFTUFDU19JTlQgY29sID0gTU9TVF9QT1NJVElWRV9GSVhOVU07CisgICAgICBt Y19zY2FuX2Zvcl9jb2x1bW4gKCZwdCwgJmNvbCwgTlVMTCwgcHQpOworICAgICAgcmV0dXJuIGNv bDsKKyAgICB9CisgIC8qIFNjYW4gYmFja3dhcmRzIGZyb20gcG9pbnQgdG8gdGhlIHByZXZpb3Vz IG5ld2xpbmUsCisgICAgIGNvdW50aW5nIHdpZHRoLiAgVGFiIGNoYXJhY3RlcnMgYXJlIHRoZSBv bmx5IGNvbXBsaWNhdGVkIGNhc2UuICAqLworICAvKiBNYWtlIGEgcG9pbnRlciBmb3IgZGVjcmVt ZW50aW5nIHRocm91Z2ggdGhlIGNoYXJzIGJlZm9yZSBwb2ludC4gICovCisgIHB0ciA9IEJZVEVf UE9TX0FERFIgKENIQVJfVE9fQllURSAocHQpIC0gMSkgKyAxOworICAvKiBNYWtlIGEgcG9pbnRl ciB0byB3aGVyZSBjb25zZWN1dGl2ZSBjaGFycyBsZWF2ZSBvZmYsCisgICAgIGdvaW5nIGJhY2t3 YXJkcyBmcm9tIHBvaW50LiAgKi8KKyAgaWYgKHB0ID09IEJFR1YpCisgICAgc3RvcCA9IHB0cjsK KyAgZWxzZSBpZiAocHQgPD0gR1BUIHx8IEJFR1YgPiBHUFQpCisgICAgc3RvcCA9IEJFR1ZfQURE UjsKKyAgZWxzZQorICAgIHN0b3AgPSBHQVBfRU5EX0FERFI7CisgIGNvbCA9IDAsIHRhYl9zZWVu ID0gMCwgcG9zdF90YWIgPSAwOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBwdHJkaWZmX3Qg aSwgbjsKKyAgICAgIExpc3BfT2JqZWN0IGNoYXJ2ZWM7CisgICAgICBpZiAocHRyID09IHN0b3Ap CisgIHsKKyAgICAvKiBXZSBzdG9wcGVkIGVpdGhlciBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUg YnVmZmVyCisgICAgICAgb3IgZm9yIHRoZSBnYXAuICAqLworICAgIGlmIChwdHIgPT0gQkVHVl9B RERSKQorICAgICAgYnJlYWs7CisgICAgLyogSXQgd2FzIHRoZSBnYXAuICBKdW1wIGJhY2sgb3Zl ciBpdC4gICovCisgICAgc3RvcCA9IEJFR1ZfQUREUjsKKyAgICBwdHIgPSBHUFRfQUREUjsKKyAg ICAvKiBDaGVjayB3aGV0aGVyIHRoYXQgYnJpbmdzIHVzIHRvIGJlZ2lubmluZyBvZiBidWZmZXIu ICAqLworICAgIGlmIChCRUdWID49IEdQVCkKKyAgICAgIGJyZWFrOworICB9CisgICAgICBjID0g Ki0tcHRyOworICAgICAgaWYgKGRwICYmIFZFQ1RPUlAgKERJU1BfQ0hBUl9WRUNUT1IgKGRwLCBj KSkpCisgIHsKKyAgICBjaGFydmVjID0gRElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGMpOworICAgIG4g PSBBU0laRSAoY2hhcnZlYyk7CisgIH0KKyAgICAgIGVsc2UKKyAgeworICAgIGNoYXJ2ZWMgPSBR bmlsOworICAgIG4gPSAxOworICB9CisgICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkp CisgIHsKKyAgICBpZiAoVkVDVE9SUCAoY2hhcnZlYykpCisgICAgICB7CisgICAgICAgIC8qIFRo aXMgc2hvdWxkIGJlIGhhbmRsZWQgdGhlIHNhbWUgYXMKKyAgICAgbmV4dF9lbGVtZW50X2Zyb21f ZGlzcGxheV92ZWN0b3IgZG9lcyBpdC4gICovCisgICAgICAgIExpc3BfT2JqZWN0IGVudHJ5ID0g QVJFRiAoY2hhcnZlYywgaSk7CisgICAgICAgIGlmIChHTFlQSF9DT0RFX1AgKGVudHJ5KSkKKyAg ICBjID0gR0xZUEhfQ09ERV9DSEFSIChlbnRyeSk7CisgICAgICAgIGVsc2UKKyAgICBjID0gJyAn OworICAgICAgfQorICAgIGlmIChjID49IDA0MCAmJiBjIDwgMDE3NykKKyAgICAgIGNvbCsrOwor ICAgIGVsc2UgaWYgKGMgPT0gJ1xuJworICAgICAgIHx8IChjID09ICdccicKKyAgICAgICAgICAg JiYgRVEgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBzZWxlY3RpdmVfZGlzcGxheSksIFF0KSkpCisg ICAgICB7CisgICAgICAgIHB0cisrOworICAgICAgICBnb3RvIHN0YXJ0X29mX2xpbmVfZm91bmQ7 CisgICAgICB9CisgICAgZWxzZSBpZiAoYyA9PSAnXHQnKQorICAgICAgeworICAgICAgICBpZiAo dGFiX3NlZW4pCisgICAgY29sID0gKChjb2wgKyB0YWJfd2lkdGgpIC8gdGFiX3dpZHRoKSAqIHRh Yl93aWR0aDsKKyAgICAgICAgcG9zdF90YWIgKz0gY29sOworICAgICAgICBjb2wgPSAwOworICAg ICAgICB0YWJfc2VlbiA9IDE7CisgICAgICB9CisgICAgZWxzZSBpZiAoVkVDVE9SUCAoY2hhcnZl YykpCisgICAgICAvKiBXaXRoIGEgZGlzcGxheSB0YWJsZSBlbnRyeSwgQyBpcyBkaXNwbGF5ZWQg YXMgaXMsIGFuZAorICAgICAgICAgbm90IGRpc3BsYXllZCBhcyBcTk5OIG9yIGFzIF5OLiAgSWYg QyBpcyBhIHNpbmdsZS1ieXRlCisgICAgICAgICBjaGFyYWN0ZXIsIGl0IHRha2VzIG9uZSBjb2x1 bW4uICBJZiBDIGlzIG11bHRpLWJ5dGUgaW4KKyAgICAgICAgIGEgdW5pYnl0ZSBidWZmZXIsIGl0 J3MgdHJhbnNsYXRlZCB0byB1bmlieXRlLCBzbyBpdAorICAgICAgICAgYWxzbyB0YWtlcyBvbmUg Y29sdW1uLiAgKi8KKyAgICAgICsrY29sOworICAgIGVsc2UKKyAgICAgIGNvbCArPSAoY3RsX2Fy cm93ICYmIGMgPCAwMjAwKSA/IDIgOiA0OworICB9CisgICAgfQorIHN0YXJ0X29mX2xpbmVfZm91 bmQ6CisgIGlmICh0YWJfc2VlbikKKyAgICB7CisgICAgICBjb2wgPSAoKGNvbCArIHRhYl93aWR0 aCkgLyB0YWJfd2lkdGgpICogdGFiX3dpZHRoOworICAgICAgY29sICs9IHBvc3RfdGFiOworICAg IH0KKyAgbGFzdF9rbm93bl9jb2x1bW4gPSBjb2w7CisgIGxhc3Rfa25vd25fY29sdW1uX3BvaW50 ID0gcHQ7CisgIGxhc3Rfa25vd25fY29sdW1uX21vZGlmaWVkID0gTU9ESUZGOworICByZXR1cm4g Y29sOworfQorCitzdGF0aWMgaW50CittY19saXNwX3RvX2N1cnNvcl90eXBlIChMaXNwX09iamVj dCBhcmcpCit7CisgIGNoYXIgKnN0cjsKKyAgaWYgKFhUWVBFIChhcmcpID09IExpc3BfU3RyaW5n KQorICAgIHN0ciA9IFNTREFUQSAoYXJnKTsKKyAgZWxzZSBpZiAoWFRZUEUgKGFyZykgPT0gTGlz cF9TeW1ib2wpCisgICAgc3RyID0gU1NEQVRBIChTWU1CT0xfTkFNRSAoYXJnKSk7CisgIGVsc2Ug cmV0dXJuIC0xOworICBpZiAoIXN0cmNtcCAoc3RyLCAiYm94IikpCisgICAgcmV0dXJuIEZJTExF RF9CT1hfQ1VSU09SOworICBpZiAoIXN0cmNtcCAoc3RyLCAiaG9sbG93IikpCisgICAgcmV0dXJu IEhPTExPV19CT1hfQ1VSU09SOworICBpZiAoIXN0cmNtcCAoc3RyLCAiaGJhciIpKQorICAgIHJl dHVybiBIQkFSX0NVUlNPUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImJhciIpKQorICAgIHJldHVy biBCQVJfQ1VSU09SOworICBpZiAoIXN0cmNtcCAoc3RyLCAibGVmdC1mcmluZ2UtYml0bWFwIikp CisgICAgcmV0dXJuIExFRlRfRlJJTkdFX0JJVE1BUDsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgInJp Z2h0LWZyaW5nZS1iaXRtYXAiKSkKKyAgICByZXR1cm4gUklHSFRfRlJJTkdFX0JJVE1BUDsKKyAg aWYgKCFzdHJjbXAgKHN0ciwgIm5vIikpCisgICAgcmV0dXJuIE5PX0NVUlNPUjsKKyAgcmV0dXJu IC0xOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21jX2N1cnNvcl90eXBlX3RvX2xpc3AgKGlu dCBhcmcpCit7CisgIHN3aXRjaCAoYXJnKQorICAgIHsKKyAgICBjYXNlIEZJTExFRF9CT1hfQ1VS U09SOiByZXR1cm4gUWJveDsKKyAgICBjYXNlIEhPTExPV19CT1hfQ1VSU09SOiByZXR1cm4gUWhv bGxvdzsKKyAgICBjYXNlIEhCQVJfQ1VSU09SOiByZXR1cm4gUWhiYXI7CisgICAgY2FzZSBCQVJf Q1VSU09SOiByZXR1cm4gUWJhcjsKKyAgICBjYXNlIExFRlRfRlJJTkdFX0JJVE1BUDogcmV0dXJu IGludGVybiAoImxlZnQtZnJpbmdlLWJpdG1hcCIpOworICAgIGNhc2UgUklHSFRfRlJJTkdFX0JJ VE1BUDogcmV0dXJuIGludGVybiAoInJpZ2h0LWZyaW5nZS1iaXRtYXAiKTsKKyAgICBjYXNlIE5P X0NVUlNPUjoKKyAgICBkZWZhdWx0OiByZXR1cm4gaW50ZXJuICgibm8iKTsKKyAgICB9Cit9CisK K3N0YXRpYyBMaXNwX09iamVjdAorbWNfY29sb3JfdmVjdG9yX2NhbGMgKHN0cnVjdCB3aW5kb3cg KncsIExpc3BfT2JqZWN0IGNvbG9yKQoreworICBDSEVDS19TVFJJTkcgKGNvbG9yKTsKKyAgTGlz cF9PYmplY3QgdGFyZ2V0X2ZyYW1lID0gdy0+ZnJhbWU7CisgIExpc3BfT2JqZWN0IGNvbG9yX3Zh bHVlczsKKyAgZG91YmxlIHZhbG1heCA9IFhGSVhOVU0gKFhDQVIgKEZ4d19jb2xvcl92YWx1ZXMg KGJ1aWxkX3N0cmluZyAoIiNmZmZmZmYiKSwgdGFyZ2V0X2ZyYW1lKSkpOworICBMaXNwX09iamVj dCB2bGlzdDsKKyAgcHRyZGlmZl90IHg7CisgIGludCBpID0gMDsKKyAgTGlzcF9PYmplY3QgdGVt cCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IHZlY3RvciA9IChGbWFrZV92ZWN0b3IgKG1ha2VfZml4 bnVtICgzKSwgUW5pbCkpOworICBpZiAoIU5JTFAgKEZtZW1xICgoRmZyYW1lcCAodGFyZ2V0X2Zy YW1lKSksIGxpc3RuIChDT05TVFlQRV9IRUFQLCAzLCBpbnRlcm4gKCJ4IiksIGludGVybiAoIncz MiIpLCBpbnRlcm4gKCJucyIpKSkpKQorICAgIHsKKyAgICAgIGNvbG9yX3ZhbHVlcyA9IChGeHdf Y29sb3JfdmFsdWVzIChjb2xvciwgdGFyZ2V0X2ZyYW1lKSk7CisgICAgICBmb3IgKHZsaXN0ID0g Y29sb3JfdmFsdWVzOworICAgICAgICAgICBDT05TUCAodmxpc3QpOworICAgICAgICAgICB2bGlz dCA9IFhDRFIgKHZsaXN0KSkKKyAgICAgICAgeworICAgICAgICAgIHggPSBYRklYTlVNIChYQ0FS ICh2bGlzdCkpOworICAgICAgICAgIHRlbXAgPSBtYWtlX2Zsb2F0ICh4IC8gdmFsbWF4KTsKKyAg ICAgICAgICBBU0VUICh2ZWN0b3IsIGksIHRlbXApOworICAgICAgICAgIGkgPSBpICsgMTsKKyAg ICAgICAgfQorICAgIH0KKyAgcmV0dXJuIHZlY3RvcjsKK30KKworc3RhdGljIExpc3BfT2JqZWN0 CittY19iZ19sc2wgKHN0cnVjdCB3aW5kb3cgKncsIGVudW0gZmFjZV9pZCBmYWNlX2lkKQorewor ICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGZhY2UgKmZh Y2U7CisgIExpc3BfT2JqZWN0IGNvbG9yLCBjb2xvcl92ZWN0b3I7CisgIGlmICghTklMUCAoVmZh Y2VfcmVtYXBwaW5nX2FsaXN0KQorICAgICAgJiYgKGZhY2VfaWQgPT0gREVGQVVMVF9GQUNFX0lE IC8qIFFkZWZhdWx0ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfRkFDRV9J RCAvKiBRbW9kZV9saW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfSU5B Q1RJVkVfRkFDRV9JRCAvKiBRbW9kZV9saW5lX2luYWN0aXZlICovCisgICAgICAgICAgfHwgZmFj ZV9pZCA9PSBIRUFERVJfTElORV9GQUNFX0lEIC8qIFFoZWFkZXJfbGluZSAqLworICAgICAgICAg IHx8IGZhY2VfaWQgPT0gVE9PTF9CQVJfRkFDRV9JRCAvKiBRdG9vbF9iYXIgKi8KKyAgICAgICAg ICB8fCBmYWNlX2lkID09IEZSSU5HRV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAgICAgICAgICB8 fCBmYWNlX2lkID09IFNDUk9MTF9CQVJfRkFDRV9JRCAvKiBRc2Nyb2xsX2JhciAqLworICAgICAg ICAgIHx8IGZhY2VfaWQgPT0gQk9SREVSX0ZBQ0VfSUQgLyogUWJvcmRlciAqLworICAgICAgICAg IHx8IGZhY2VfaWQgPT0gQ1VSU09SX0ZBQ0VfSUQgLyogUWN1cnNvciAqLworICAgICAgICAgIHx8 IGZhY2VfaWQgPT0gTU9VU0VfRkFDRV9JRCAvKiBRbW91c2UgKi8KKyAgICAgICAgICB8fCBmYWNl X2lkID09IE1FTlVfRkFDRV9JRCAvKiBRbWVudSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0g V0lORE9XX0RJVklERVJfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXIgKi8KKyAgICAgICAgICB8 fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0ZJUlNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRv d19kaXZpZGVyX2ZpcnN0X3BpeGVsICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1df RElWSURFUl9MQVNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2xhc3RfcGl4ZWwg Ki8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEIC8qIFF2 ZXJ0aWNhbF9ib3JkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IElOVEVSTkFMX0JPUkRF Ul9GQUNFX0lEKSkgLyogUWludGVybmFsX2JvcmRlciAqLworICAgIGZhY2UgPSBGQUNFX0ZST01f SUQgKGYsIGxvb2t1cF9iYXNpY19mYWNlICh3LCBmLCBmYWNlX2lkKSk7CisgICAgZWxzZQorICAg ICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CisgIGNvbG9yID0gZmFjZS0+bGZh Y2VbTEZBQ0VfQkFDS0dST1VORF9JTkRFWF07CisgIENIRUNLX1NUUklORyAoY29sb3IpOworICBj b2xvcl92ZWN0b3IgPSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywgY29sb3IpOworICByZXR1cm4g Y29sb3JfdmVjdG9yOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21jX2ZnX2xzbCAoc3RydWN0 IHdpbmRvdyAqdywgZW51bSBmYWNlX2lkIGZhY2VfaWQpCit7CisgIHN0cnVjdCBmcmFtZSAqZiA9 IFhGUkFNRSAody0+ZnJhbWUpOworICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgTGlzcF9PYmplY3Qg Y29sb3IsIGNvbG9yX3ZlY3RvcjsKKyAgaWYgKCFOSUxQIChWZmFjZV9yZW1hcHBpbmdfYWxpc3Qp CisgICAgICAmJiAoZmFjZV9pZCA9PSBERUZBVUxUX0ZBQ0VfSUQgLyogUWRlZmF1bHQgKi8KKyAg ICAgICAgICB8fCBmYWNlX2lkID09IE1PREVfTElORV9GQUNFX0lEIC8qIFFtb2RlX2xpbmUgKi8K KyAgICAgICAgICB8fCBmYWNlX2lkID09IE1PREVfTElORV9JTkFDVElWRV9GQUNFX0lEIC8qIFFt b2RlX2xpbmVfaW5hY3RpdmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IEhFQURFUl9MSU5F X0ZBQ0VfSUQgLyogUWhlYWRlcl9saW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBUT09M X0JBUl9GQUNFX0lEIC8qIFF0b29sX2JhciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gRlJJ TkdFX0ZBQ0VfSUQgLyogUWZyaW5nZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gU0NST0xM X0JBUl9GQUNFX0lEIC8qIFFzY3JvbGxfYmFyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBC T1JERVJfRkFDRV9JRCAvKiBRYm9yZGVyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBDVVJT T1JfRkFDRV9JRCAvKiBRY3Vyc29yICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT1VTRV9G QUNFX0lEIC8qIFFtb3VzZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTUVOVV9GQUNFX0lE IC8qIFFtZW51ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9GQUNF X0lEIC8qIFF3aW5kb3dfZGl2aWRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9X X0RJVklERVJfRklSU1RfUElYRUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfZmlyc3RfcGl4 ZWwgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0xBU1RfUElYRUxf RkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfbGFzdF9waXhlbCAqLworICAgICAgICAgIHx8IGZh Y2VfaWQgPT0gVkVSVElDQUxfQk9SREVSX0ZBQ0VfSUQgLyogUXZlcnRpY2FsX2JvcmRlciAqLwor ICAgICAgICAgIHx8IGZhY2VfaWQgPT0gSU5URVJOQUxfQk9SREVSX0ZBQ0VfSUQpKSAvKiBRaW50 ZXJuYWxfYm9yZGVyICovCisgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgbG9va3VwX2Jhc2lj X2ZhY2UgKHcsIGYsIGZhY2VfaWQpKTsKKyAgICBlbHNlCisgICAgICBmYWNlID0gRkFDRV9GUk9N X0lEIChmLCBmYWNlX2lkKTsKKyAgY29sb3IgPSBmYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5E X0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChjb2xvcik7CisgIGNvbG9yX3ZlY3RvciA9IG1jX2Nv bG9yX3ZlY3Rvcl9jYWxjICh3LCBjb2xvcik7CisgIHJldHVybiBjb2xvcl92ZWN0b3I7Cit9CisK K3N0YXRpYyBMaXNwX09iamVjdAorbWNfZmdfZmFjZSAoc3RydWN0IHdpbmRvdyAqdywgZW51bSBm YWNlX2lkIGZhY2VfaWQpCit7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUp OworICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgaWYgKCFOSUxQIChWZmFjZV9yZW1hcHBpbmdfYWxp c3QpCisgICAgICAmJiAoZmFjZV9pZCA9PSBERUZBVUxUX0ZBQ0VfSUQgLyogUWRlZmF1bHQgKi8K KyAgICAgICAgICB8fCBmYWNlX2lkID09IE1PREVfTElORV9GQUNFX0lEIC8qIFFtb2RlX2xpbmUg Ki8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1PREVfTElORV9JTkFDVElWRV9GQUNFX0lEIC8q IFFtb2RlX2xpbmVfaW5hY3RpdmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IEhFQURFUl9M SU5FX0ZBQ0VfSUQgLyogUWhlYWRlcl9saW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBU T09MX0JBUl9GQUNFX0lEIC8qIFF0b29sX2JhciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0g RlJJTkdFX0ZBQ0VfSUQgLyogUWZyaW5nZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gU0NS T0xMX0JBUl9GQUNFX0lEIC8qIFFzY3JvbGxfYmFyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9 PSBCT1JERVJfRkFDRV9JRCAvKiBRYm9yZGVyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBD VVJTT1JfRkFDRV9JRCAvKiBRY3Vyc29yICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT1VT RV9GQUNFX0lEIC8qIFFtb3VzZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTUVOVV9GQUNF X0lEIC8qIFFtZW51ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9G QUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lO RE9XX0RJVklERVJfRklSU1RfUElYRUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfZmlyc3Rf cGl4ZWwgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0xBU1RfUElY RUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfbGFzdF9waXhlbCAqLworICAgICAgICAgIHx8 IGZhY2VfaWQgPT0gVkVSVElDQUxfQk9SREVSX0ZBQ0VfSUQgLyogUXZlcnRpY2FsX2JvcmRlciAq LworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gSU5URVJOQUxfQk9SREVSX0ZBQ0VfSUQpKSAvKiBR aW50ZXJuYWxfYm9yZGVyICovCisgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgbG9va3VwX2Jh c2ljX2ZhY2UgKHcsIGYsIGZhY2VfaWQpKTsKKyAgICBlbHNlCisgICAgICBmYWNlID0gRkFDRV9G Uk9NX0lEIChmLCBmYWNlX2lkKTsKKyAgcmV0dXJuIGZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9V TkRfSU5ERVhdOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21jX2JnX2ZhY2UgKHN0cnVjdCB3 aW5kb3cgKncsIGVudW0gZmFjZV9pZCBmYWNlX2lkKQoreworICBzdHJ1Y3QgZnJhbWUgKmYgPSBY RlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGZhY2UgKmZhY2U7CisgIGlmICghTklMUCAoVmZh Y2VfcmVtYXBwaW5nX2FsaXN0KQorICAgICAgJiYgKGZhY2VfaWQgPT0gREVGQVVMVF9GQUNFX0lE IC8qIFFkZWZhdWx0ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfRkFDRV9J RCAvKiBRbW9kZV9saW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfSU5B Q1RJVkVfRkFDRV9JRCAvKiBRbW9kZV9saW5lX2luYWN0aXZlICovCisgICAgICAgICAgfHwgZmFj ZV9pZCA9PSBIRUFERVJfTElORV9GQUNFX0lEIC8qIFFoZWFkZXJfbGluZSAqLworICAgICAgICAg IHx8IGZhY2VfaWQgPT0gVE9PTF9CQVJfRkFDRV9JRCAvKiBRdG9vbF9iYXIgKi8KKyAgICAgICAg ICB8fCBmYWNlX2lkID09IEZSSU5HRV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAgICAgICAgICB8 fCBmYWNlX2lkID09IFNDUk9MTF9CQVJfRkFDRV9JRCAvKiBRc2Nyb2xsX2JhciAqLworICAgICAg ICAgIHx8IGZhY2VfaWQgPT0gQk9SREVSX0ZBQ0VfSUQgLyogUWJvcmRlciAqLworICAgICAgICAg IHx8IGZhY2VfaWQgPT0gQ1VSU09SX0ZBQ0VfSUQgLyogUWN1cnNvciAqLworICAgICAgICAgIHx8 IGZhY2VfaWQgPT0gTU9VU0VfRkFDRV9JRCAvKiBRbW91c2UgKi8KKyAgICAgICAgICB8fCBmYWNl X2lkID09IE1FTlVfRkFDRV9JRCAvKiBRbWVudSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0g V0lORE9XX0RJVklERVJfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXIgKi8KKyAgICAgICAgICB8 fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0ZJUlNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRv d19kaXZpZGVyX2ZpcnN0X3BpeGVsICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1df RElWSURFUl9MQVNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2xhc3RfcGl4ZWwg Ki8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEIC8qIFF2 ZXJ0aWNhbF9ib3JkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IElOVEVSTkFMX0JPUkRF Ul9GQUNFX0lEKSkgLyogUWludGVybmFsX2JvcmRlciAqLworICAgIGZhY2UgPSBGQUNFX0ZST01f SUQgKGYsIGxvb2t1cF9iYXNpY19mYWNlICh3LCBmLCBmYWNlX2lkKSk7CisgICAgZWxzZQorICAg ICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CisgIHJldHVybiBmYWNlLT5sZmFj ZVtMRkFDRV9CQUNLR1JPVU5EX0lOREVYXTsKK30KKworc3RydWN0IGZhY2UgKgorbWNfbG9va3Vw X2ZhY2UgKHN0cnVjdCBpdCAqaXQpCit7CisgIGlmICghTklMUCAoVmZhY2VfcmVtYXBwaW5nX2Fs aXN0KQorICAgICAgJiYgKGl0LT5mYWNlX2lkID09IERFRkFVTFRfRkFDRV9JRCAvKiBRZGVmYXVs dCAqLworICAgICAgICAgIHx8IGl0LT5mYWNlX2lkID09IE1PREVfTElORV9GQUNFX0lEIC8qIFFt b2RlX2xpbmUgKi8KKyAgICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBNT0RFX0xJTkVfSU5BQ1RJ VkVfRkFDRV9JRCAvKiBRbW9kZV9saW5lX2luYWN0aXZlICovCisgICAgICAgICAgfHwgaXQtPmZh Y2VfaWQgPT0gSEVBREVSX0xJTkVfRkFDRV9JRCAvKiBRaGVhZGVyX2xpbmUgKi8KKyAgICAgICAg ICB8fCBpdC0+ZmFjZV9pZCA9PSBUT09MX0JBUl9GQUNFX0lEIC8qIFF0b29sX2JhciAqLworICAg ICAgICAgIHx8IGl0LT5mYWNlX2lkID09IEZSSU5HRV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAg ICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBTQ1JPTExfQkFSX0ZBQ0VfSUQgLyogUXNjcm9sbF9i YXIgKi8KKyAgICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBCT1JERVJfRkFDRV9JRCAvKiBRYm9y ZGVyICovCisgICAgICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gQ1VSU09SX0ZBQ0VfSUQgLyogUWN1 cnNvciAqLworICAgICAgICAgIHx8IGl0LT5mYWNlX2lkID09IE1PVVNFX0ZBQ0VfSUQgLyogUW1v dXNlICovCisgICAgICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gTUVOVV9GQUNFX0lEIC8qIFFtZW51 ICovCisgICAgICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfRkFDRV9JRCAv KiBRd2luZG93X2RpdmlkZXIgKi8KKyAgICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBXSU5ET1df RElWSURFUl9GSVJTVF9QSVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9maXJzdF9waXhl bCAqLworICAgICAgICAgIHx8IGl0LT5mYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0xBU1RfUElY RUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfbGFzdF9waXhlbCAqLworICAgICAgICAgIHx8 IGl0LT5mYWNlX2lkID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEIC8qIFF2ZXJ0aWNhbF9ib3Jk ZXIgKi8KKyAgICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBJTlRFUk5BTF9CT1JERVJfRkFDRV9J RCkpIC8qIFFpbnRlcm5hbF9ib3JkZXIgKi8KKyAgICByZXR1cm4gRkFDRV9GUk9NX0lEIChpdC0+ ZiwgbG9va3VwX2Jhc2ljX2ZhY2UgKGl0LT53LCBpdC0+ZiwgaXQtPmZhY2VfaWQpKTsKKyAgICAg IGVsc2UKKyAgICAgICAgcmV0dXJuIEZBQ0VfRlJPTV9JRCAoaXQtPmYsIGl0LT5mYWNlX2lkKTsK K30KKworc3RhdGljIGludAorbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAoc3RydWN0IHdp bmRvdyAqdywgTGlzcF9PYmplY3QgYml0bWFwLCBpbnQgcmlnaHRfcCwgaW50IHBhcnRpYWxfcCkK K3sKKyAgTGlzcF9PYmplY3QgY21hcCwgYm0xID0gUW5pbCwgYm0yID0gUW5pbCwgYm07CisgIEVN QUNTX0lOVCBsbjEgPSAwLCBsbjIgPSAwOworICBpbnQgaXgxID0gcmlnaHRfcDsKKyAgaW50IGl4 MiA9IGl4MSArIChwYXJ0aWFsX3AgPyAyIDogMCk7CisgIC8qIExvb2t1cCBpbiBidWZmZXItbG9j YWwgZnJpbmdlLWluZGljYXRvci1hbGlzdCBiZWZvcmUgZ2xvYmFsIGFsaXN0LgorICAgICBFbGVt ZW50cyBhcmU6CisgIEJJVE1BUCAgICAtLSB1c2UgZm9yIGFsbAorICAoTCBSKSAgICAtLSB1c2Ug Zm9yIGxlZnQgcmlnaHQgKHdoZXRoZXIgcGFydGlhbCBvciBub3QpCisgIChMIFIgUEwgUFIpICAt LSB1c2UgZm9yIGxlZnQgcmlnaHQgcGFydGlhbC1sZWZ0IHBhcnRpYWwtcmlnaHQKKyAgSWYgYW55 IHZhbHVlIGluIGxvY2FsIGJpbmRpbmcgaXMgbm90IHByZXNlbnQgb3IgdCwgdXNlIGdsb2JhbCB2 YWx1ZS4KKyAgICAgSWYgcGFydGlhbCwgbG9va3VwIHBhcnRpYWwgYml0bWFwIGluIGRlZmF1bHQg dmFsdWUgaWYgbm90IGZvdW5kIGhlcmUuCisgICAgIElmIG5vdCBwYXJ0aWFsLCBvciBubyBwYXJ0 aWFsIHNwZWMgaXMgcHJlc2VudCwgdXNlIG5vbi1wYXJ0aWFsIGJpdG1hcC4gICovCisgIGlmICgo Y21hcCA9IEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZnJpbmdlX2luZGljYXRvcl9hbGlz dCkpLCAhTklMUCAoY21hcCkpCisgICAgeworICAgICAgYm0xID0gRmFzc3EgKGJpdG1hcCwgY21h cCk7CisgICAgICBpZiAoQ09OU1AgKGJtMSkpCisgIHsKKyAgICBpZiAoKGJtMSA9IFhDRFIgKGJt MSkpLCBOSUxQIChibTEpKQorICAgICAgcmV0dXJuIE5PX0ZSSU5HRV9CSVRNQVA7CisgICAgaWYg KENPTlNQIChibTEpKQorICAgICAgeworICAgICAgICBsbjEgPSBYRklYTlVNIChGbGVuZ3RoIChi bTEpKTsKKyAgICAgICAgaWYgKHBhcnRpYWxfcCkKKyAgICB7CisgICAgICBpZiAobG4xID4gaXgy KQorICAgICAgICB7CisgICAgICAgICAgYm0gPSBGbnRoIChtYWtlX2ZpeG51bSAoaXgyKSwgYm0x KTsKKyAgICAgICAgICBpZiAoIUVRIChibSwgUXQpKQorICAgICAgZ290byBmb3VuZDsKKyAgICAg ICAgfQorICAgIH0KKyAgICAgICAgZWxzZQorICAgIHsKKyAgICAgIGlmIChsbjEgPiBpeDEpCisg ICAgICAgIHsKKyAgICAgICAgICBibSA9IEZudGggKG1ha2VfZml4bnVtIChpeDEpLCBibTEpOwor ICAgICAgICAgIGlmICghRVEgKGJtLCBRdCkpCisgICAgICBnb3RvIGZvdW5kOworICAgICAgICB9 CisgICAgfQorICAgICAgfQorICAgIGVsc2UgaWYgKChibSA9IGJtMSwgIUVRIChibSwgUXQpKSkK KyAgICAgIGdvdG8gZm91bmQ7CisgIH0KKyAgICB9CisgIGlmICghRVEgKGNtYXAsIEJWQVIgKCZi dWZmZXJfZGVmYXVsdHMsIGZyaW5nZV9pbmRpY2F0b3JfYWxpc3QpKQorICAgICAgJiYgIU5JTFAg KEJWQVIgKCZidWZmZXJfZGVmYXVsdHMsIGZyaW5nZV9pbmRpY2F0b3JfYWxpc3QpKSkKKyAgICB7 CisgICAgICBibTIgPSBGYXNzcSAoYml0bWFwLCBCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmlu Z2VfaW5kaWNhdG9yX2FsaXN0KSk7CisgICAgICBpZiAoQ09OU1AgKGJtMikpCisgIHsKKyAgICBp ZiAoKGJtMiA9IFhDRFIgKGJtMikpLCAhTklMUCAoYm0yKSkKKyAgICAgIHsKKyAgICAgICAgaWYg KENPTlNQIChibTIpKQorICAgIHsKKyAgICAgIGxuMiA9IFhGSVhOVU0gKEZsZW5ndGggKGJtMikp OworICAgICAgaWYgKHBhcnRpYWxfcCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChsbjIgPiBp eDIpCisgICAgICB7CisgICAgICAgIGJtID0gRm50aCAobWFrZV9maXhudW0gKGl4MiksIGJtMik7 CisgICAgICAgIGlmICghRVEgKGJtLCBRdCkpCisgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAgIH0KKyAgfQorICAgIH0KKyAgaWYgKGxuMSA+IGl4 MSkKKyAgICB7CisgICAgICBibSA9IEZudGggKG1ha2VfZml4bnVtIChpeDEpLCBibTEpOworICAg ICAgaWYgKCFFUSAoYm0sIFF0KSkKKyAgZ290byBmb3VuZDsKKyAgICB9CisgIGlmIChsbjIgPiBp eDEpCisgICAgeworICAgICAgYm0gPSBGbnRoIChtYWtlX2ZpeG51bSAoaXgxKSwgYm0yKTsKKyAg ICAgIGlmICghRVEgKGJtLCBRdCkpCisgIGdvdG8gZm91bmQ7CisgICAgICByZXR1cm4gTk9fRlJJ TkdFX0JJVE1BUDsKKyAgICB9CisgIGVsc2UgaWYgKChibSA9IGJtMiwgTklMUCAoYm0pKSkKKyAg ICByZXR1cm4gTk9fRlJJTkdFX0JJVE1BUDsKKyBmb3VuZDoKKyAgcmV0dXJuIGxvb2t1cF9mcmlu Z2VfYml0bWFwIChibSk7Cit9CisKKy8qIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aGVuIHRh cmdldCBpcyB2aXNpYmxlIGFuZCB3aGVuIGNvZGUgaXMgc2FuZHdpY2hlZDoKKyAgICAgdXBkYXRl X2JlZ2luIChmKTsKKyAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgIG1jX2VyYXNlX2dseXBoX2N1 cnNvcnMgKHcsIHgsIHksIGhwb3MsIHZwb3MsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgpOwor ICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICB1cGRhdGVfZW5kIChmKTsgKi8KKworc3RhdGlj IHZvaWQKK21jX2VyYXNlX2dseXBoX2N1cnNvcnMgKHN0cnVjdCB3aW5kb3cgKncsIGludCB4LCBp bnQgeSwgaW50IGhwb3MsIGludCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB0 ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZSwgaW50IGN1cnNvcl93aWR0aCkKK3sKKyAgLyog YG1hdHJpeF9yb3cnIGluIGBkaXNwbmV3LmNgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdHMs CisgIGVhc3NlcnQgKG1hdHJpeCAmJiBtYXRyaXgtPnJvd3MpOworICBlYXNzZXJ0IChyb3cgPj0g MCAmJiByb3cgPCBtYXRyaXgtPm5yb3dzKTsgKi8KKyAgYm9vbCBiYXJmX2NyYXNoX29uZSA9ICh3 LT5jdXJyZW50X21hdHJpeCAmJiB3LT5jdXJyZW50X21hdHJpeC0+cm93cykgPyBmYWxzZSA6IHRy dWU7CisgIGlmIChiYXJmX2NyYXNoX29uZSkKKyAgICByZXR1cm47CisgIGJvb2wgYmFyZl9jcmFz aF90d28gPSAodnBvcyA+PSAwICYmIHZwb3MgPCB3LT5jdXJyZW50X21hdHJpeC0+bnJvd3MpID8g ZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF90d28pCisgICAgcmV0dXJuOworICBpZiAo eCA8IDAKKyAgICAgIHx8IHkgPCAwCisgICAgICB8fCBocG9zIDwgMAorICAgICAgfHwgdnBvcyA8 IDApCisgICAgcmV0dXJuOworICAvKiBSZWNvcmQgc29tZSBvZiB0aGUgY3VycmVudCB2YWx1ZXMg Zm9yIHRoZSBjdXJzb3IgYW5kIGdseXBoX3Jvdy4gKi8KKyAgYm9vbCBwaHlzX2N1cnNvcl9vbl9w ID0gdy0+cGh5c19jdXJzb3Jfb25fcDsKKyAgc3RydWN0IGdseXBoX3JvdyAqZ2x5cGhfcm93ID0g TUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgsIHZwb3MpOworICBib29sIGN1cnNvcl9pbl9m cmluZ2VfcCA9IGdseXBoX3Jvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wOworICBib29sIHJldmVyc2Vk X3AgPSBnbHlwaF9yb3ctPnJldmVyc2VkX3A7CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNvcl94ID0g dy0+cGh5c19jdXJzb3IueDsKKyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX3kgPSB3LT5waHlzX2N1 cnNvci55OworICBwdHJkaWZmX3QgcGh5c19jdXJzb3JfaHBvcyA9IHctPnBoeXNfY3Vyc29yLmhw b3M7CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNvcl92cG9zID0gdy0+cGh5c19jdXJzb3IudnBvczsK KyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX2FzY2VudCA9IHctPnBoeXNfY3Vyc29yX2FzY2VudDsK KyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX2hlaWdodCA9IHctPnBoeXNfY3Vyc29yX2hlaWdodDsK KyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX3dpZHRoID0gdy0+cGh5c19jdXJzb3Jfd2lkdGg7Cisg IGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgcGh5c19jdXJzb3JfdHlwZSA9IHctPnBoeXNfY3Vyc29y X3R5cGU7CisgIC8qIEhpamFjayB3LT5waHlzX2N1cnNvci4gKi8KKyAgdy0+cGh5c19jdXJzb3Iu eCA9IHg7CisgIHctPnBoeXNfY3Vyc29yLnkgPSB5OworICB3LT5waHlzX2N1cnNvci5ocG9zID0g aHBvczsKKyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7CisgIHctPnBoeXNfY3Vyc29yX3R5 cGUgPSBjdXJzb3JfdHlwZTsKKyAgdy0+cGh5c19jdXJzb3JfYXNjZW50ID0gZ2x5cGhfcm93LT5h c2NlbnQ7CisgIHctPnBoeXNfY3Vyc29yX2hlaWdodCA9IGdseXBoX3Jvdy0+aGVpZ2h0OworICB3 LT5waHlzX2N1cnNvcl93aWR0aCA9IGN1cnNvcl93aWR0aDsKKyAgZXJhc2VfcGh5c19jdXJzb3Ig KHcpOworICAvKiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHctPnBoeXNfY3Vyc29y IGFuZCBnbHlwaF9yb3cuICovCisgIHctPnBoeXNfY3Vyc29yX29uX3AgPSBwaHlzX2N1cnNvcl9v bl9wOworICB3LT5waHlzX2N1cnNvci54ID0gcGh5c19jdXJzb3JfeDsKKyAgdy0+cGh5c19jdXJz b3IueSA9IHBoeXNfY3Vyc29yX3k7CisgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSBwaHlzX2N1cnNv cl9ocG9zOworICB3LT5waHlzX2N1cnNvci52cG9zID0gcGh5c19jdXJzb3JfdnBvczsKKyAgdy0+ cGh5c19jdXJzb3JfdHlwZSA9IHBoeXNfY3Vyc29yX3R5cGU7CisgIGdseXBoX3Jvdy0+Y3Vyc29y X2luX2ZyaW5nZV9wID0gY3Vyc29yX2luX2ZyaW5nZV9wOworICBnbHlwaF9yb3ctPnJldmVyc2Vk X3AgPSByZXZlcnNlZF9wOworICB3LT5waHlzX2N1cnNvcl9hc2NlbnQgPSBwaHlzX2N1cnNvcl9h c2NlbnQ7CisgIHctPnBoeXNfY3Vyc29yX2hlaWdodCA9IHBoeXNfY3Vyc29yX2hlaWdodDsKKyAg dy0+cGh5c19jdXJzb3Jfd2lkdGggPSBwaHlzX2N1cnNvcl93aWR0aDsKK30KKworLyogVGhpcyBp cyBtZWFudCB0byBiZSB1c2VkIHdoZW4gdGFyZ2V0IGlzIHZpc2libGUgYW5kIHdoZW4gY29kZSBp cyBzYW5kd2ljaGVkOgorICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICBibG9ja19pbnB1dCAo KTsKKyAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKC4uLik7CisgICAgIHVuYmxvY2tfaW5wdXQg KCk7CisgICAgIHVwZGF0ZV9lbmQgKGYpOworV2UgY2FsbCB0aGlzIGEgZHJhdy9lcmFzZSBoeWJy aWQgYmVjYXVzZSBpdCBkb2VzIGFsbCBvZiB0aGUgZm9sbG93aW5nOgorLSAgRHJhdyBhbGwgZ2x5 cGggY3Vyc29ycywgYnV0IGVyYXNlIHdpdGggYG1jX2VyYXNlX2dseXBoX2N1cnNvcnMnLgorLSAg RHJhdy9lcmFzZSBhbGwgZnJpbmdlIGJpdG1hcHMgcmVsYXRpbmcgdG8gY3Jvc3NoYWlycy4KKy0g IERyYXcvZXJhc2UgYWxsIGdseXBobGVzcyBjdXJzb3JzLiAqLworCitzdGF0aWMgdm9pZAorbWNf ZHJhd19lcmFzZV9oeWJyaWQgKHN0cnVjdCB3aW5kb3cgKncsIGludCB4LCBpbnQgZngsIGludCB5 LCBpbnQgZnksIGludCBocG9zLCBpbnQgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQg aCwgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZSwgaW50IGN1cnNvcl93aWR0aCwK KyAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCBjb2xvcl92ZWN0b3IsIGJvb2wgYWN0 aXZlX2N1cnNvcl9wLCBpbnQgZmxhdm9yLCBpbnQgcG9zaW50KQoreworICAvKiBgbWF0cml4X3Jv dycgaW4gYGRpc3BuZXcuY2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgZWFzc2Vy dCAobWF0cml4ICYmIG1hdHJpeC0+cm93cyk7CisgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8 IG1hdHJpeC0+bnJvd3MpOyAqLworICBib29sIGJhcmZfY3Jhc2hfb25lID0gKHctPmN1cnJlbnRf bWF0cml4ICYmIHctPmN1cnJlbnRfbWF0cml4LT5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYg KGJhcmZfY3Jhc2hfb25lKQorICAgIHJldHVybjsKKyAgYm9vbCBiYXJmX2NyYXNoX3R3byA9ICh2 cG9zID49IDAgJiYgdnBvcyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cykgPyBmYWxzZSA6IHRy dWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICByZXR1cm47CisgIGlmICh4IDwgMAorICAg ICAgfHwgeSA8IDAKKyAgICAgIHx8IGhwb3MgPCAwCisgICAgICB8fCB2cG9zIDwgMCkKKyAgICBy ZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICAvKiBSZWNv cmQgc29tZSBvZiB0aGUgY3VycmVudCB2YWx1ZXMgZm9yIHRoZSBjdXJzb3IgYW5kIGdseXBoX3Jv dy4gKi8KKyAgYm9vbCBwaHlzX2N1cnNvcl9vbl9wID0gdy0+cGh5c19jdXJzb3Jfb25fcDsKKyAg c3RydWN0IGdseXBoX3JvdyAqZ2x5cGhfcm93ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRy aXgsIHZwb3MpOworICBib29sIGN1cnNvcl9pbl9mcmluZ2VfcCA9IGdseXBoX3Jvdy0+Y3Vyc29y X2luX2ZyaW5nZV9wOworICBib29sIHJldmVyc2VkX3AgPSBnbHlwaF9yb3ctPnJldmVyc2VkX3A7 CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNvcl94ID0gdy0+cGh5c19jdXJzb3IueDsKKyAgcHRyZGlm Zl90IHBoeXNfY3Vyc29yX3kgPSB3LT5waHlzX2N1cnNvci55OworICBwdHJkaWZmX3QgcGh5c19j dXJzb3JfaHBvcyA9IHctPnBoeXNfY3Vyc29yLmhwb3M7CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNv cl92cG9zID0gdy0+cGh5c19jdXJzb3IudnBvczsKKyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX2Fz Y2VudCA9IHctPnBoeXNfY3Vyc29yX2FzY2VudDsKKyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX2hl aWdodCA9IHctPnBoeXNfY3Vyc29yX2hlaWdodDsKKyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX3dp ZHRoID0gdy0+cGh5c19jdXJzb3Jfd2lkdGg7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgcGh5 c19jdXJzb3JfdHlwZSA9IHctPnBoeXNfY3Vyc29yX3R5cGU7CisgIC8qIEhpamFjayB3LT5waHlz X2N1cnNvci4gKi8KKyAgdy0+cGh5c19jdXJzb3IueCA9IHg7CisgIHctPnBoeXNfY3Vyc29yLnkg PSBnbHlwaF9yb3ctPnk7CisgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSBocG9zOworICB3LT5waHlz X2N1cnNvci52cG9zID0gdnBvczsKKyAgdy0+cGh5c19jdXJzb3JfdHlwZSA9IGN1cnNvcl90eXBl OworICB3LT5waHlzX2N1cnNvcl9hc2NlbnQgPSBnbHlwaF9yb3ctPmFzY2VudDsKKyAgdy0+cGh5 c19jdXJzb3JfaGVpZ2h0ID0gZ2x5cGhfcm93LT5oZWlnaHQ7CisgIHctPnBoeXNfY3Vyc29yX3dp ZHRoID0gY3Vyc29yX3dpZHRoOworICBpbnQgZnJpbmdlX2JpdG1hcCA9IE5PX0ZSSU5HRV9CSVRN QVA7CisgIGludCBmYWNlX2lkID0gREVGQVVMVF9GQUNFX0lEOworICBpZiAoZmxhdm9yID09IE1D X09WRVJMQVlfQVJST1dfQklUTUFQKQorICAgIHsKKyAgICAgIGludCBtY19vdmVybGF5X2Fycm93 X2JpdG1hcCA9IFhGSVhOVU0gKEFSRUYgKGNvbG9yX3ZlY3RvciwgMCkpOworICAgICAgYm9vbCBm cmluZ2VfYWN0aXZlX2JpdG1hcF9wID0gWEZJWE5VTSAoQVJFRiAoY29sb3JfdmVjdG9yLCAxKSk7 CisgICAgICBib29sIG1pbmltYWxfcCA9IFhGSVhOVU0gKEFSRUYgKGNvbG9yX3ZlY3RvciwgMikp OworICAgICAgZW51bSBmYWNlX2lkIG92ZXJsYXlfYXJyb3dfZmFjZV9pZCA9CisgICAgICAgICgh ZnJpbmdlX2FjdGl2ZV9iaXRtYXBfcAorICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIg KHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAgID8g bG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3ZlcmxheS1hcnJvdy1pbmFjdGl2 ZS1mYWNlIiksIHRydWUpCisgICAgICAgIDogKGZyaW5nZV9hY3RpdmVfYml0bWFwX3AKKyAgICAg ICAgICAgJiYgbWluaW1hbF9wKQorICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYs IGludGVybiAoIistb3ZlcmxheS1hcnJvdy1taW5pbWFsLWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAg OiAoZnJpbmdlX2FjdGl2ZV9iaXRtYXBfcAorICAgICAgICAgICAmJiAhbWluaW1hbF9wKQorICAg ICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3ZlcmxheS1hcnJv dy1mYWNlIiksIHRydWUpCisgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgZmFjZV9p ZCA9IChjdXJzb3JfdHlwZSA9PSBMRUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAg PyBvdmVybGF5X2Fycm93X2ZhY2VfaWQKKyAgICAgICAgICAgICAgICA6IERFRkFVTFRfRkFDRV9J RDsKKyAgICAgIGdseXBoX3Jvdy0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IGZhY2VfaWQ7CisgICAg ICBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAodywgUW92ZXJs YXlfYXJyb3csIGZhbHNlLCBmYWxzZSk7CisgICAgICAvKiBBcyB0byBgZ2x5cGhfcm93LT5vdmVy bGF5X2Fycm93X2JpdG1hcGAsIHRoZSBmYWNlIG1heSBiZSBjaGFuZ2VkIHVzaW5nCisgICAgICB0 aGUgYGZhY2UtcmVtYXBwaW5nLWFsaXN0JyBzbyBsb25nIGFzIHdlIGhhdmUgYSBMaXNwIHNldHRp bmcgb2Y6CisgICAgICAgIChzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1h cnJvdyAnKy1vdmVybGF5LWFycm93LWZhY2UpCisgICAgICBJZiB3ZSB1c2UgYGdseXBoX3Jvdy0+ bGVmdF9mcmluZ2VfYml0bWFwYCwgdGhlbiB0aGUgZmFjZSBtYXkgYmUgc2V0IHVzaW5nCisgICAg ICBCT1RIIHRoZSBgZmFjZS1yZW1hcHBpbmctYWxpc3QnIGFuZCBgZ2x5cGhfcm93LT5sZWZ0X2Zy aW5nZV9mYWNlX2lkYC4gIEluCisgICAgICB0aGF0IHNpdHVhdGlvbiwgYSBMaXNwIHNldHRpbmcg b2YgYHNldC1mcmluZ2UtYml0bWFwLWZhY2UnIGlzIG5vdCBuZWVkZWQuCisgICAgICBgZHJhd19m cmluZ2VfYml0bWFwXzEnIGlzIHNvbWV3aGF0IGNvbmZ1c2luZyBhbmQgcmVxdWlyZWQgc3RkZXJy IG1lc3NhZ2VzCisgICAgICB0byBzZWUgdGhhdCBgZ2x5cGhfcm93LT5vdmVybGF5X2Fycm93X2Jp dG1hcGAgc2F0aXNmaWVzIHRoZSBmaXJzdCBjb25kaXRpb24KKyAgICAgIG9mICh3aGljaCAhPSBO T19GUklOR0VfQklUTUFQKS4gIEF0IHRoaXMgdGltZSwgQGxhd2xpc3QgcHJlZmVycyBub3QgdG8K KyAgICAgIHJlbHkgdXBvbiBhIExpc3Agc2V0dGluZyB1c2luZyBgc2V0LWZyaW5nZS1iaXRtYXAt ZmFjZScuICovCisgICAgICBnbHlwaF9yb3ctPmxlZnRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3Jf dHlwZSA9PSBMRUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPyBmcmluZ2VfYml0bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBOT19GUklOR0VfQklUTUFQOworICAgICAgZ2x5cGhfcm93LT5sZWZ0X2Zy aW5nZV9vZmZzZXQgPSAwOworICAgICAgZHJhd19mcmluZ2VfYml0bWFwICh3LCBnbHlwaF9yb3cs IHRydWUpOworICAgIH0KKyAgICBlbHNlIGlmIChmbGF2b3IgPT0gTUNfT1ZFUkxBWV9BUlJPV19C SVRNQVBfSFNDTF9URU1QT1JBUlkpCisgICAgICB7CisgICAgICAgIGludCBtY19vdmVybGF5X2Fy cm93X2JpdG1hcCA9IFhGSVhOVU0gKEFSRUYgKGNvbG9yX3ZlY3RvciwgMCkpOworICAgICAgICBi b29sIGZyaW5nZV9hY3RpdmVfYml0bWFwX3AgPSBYRklYTlVNIChBUkVGIChjb2xvcl92ZWN0b3Is IDEpKTsKKyAgICAgICAgYm9vbCBtaW5pbWFsX3AgPSBYRklYTlVNIChBUkVGIChjb2xvcl92ZWN0 b3IsIDIpKTsKKyAgICAgICAgZW51bSBmYWNlX2lkIG92ZXJsYXlfYXJyb3dfZmFjZV9pZCA9Cisg ICAgICAgICAgKCFmcmluZ2VfYWN0aXZlX2JpdG1hcF9wCisgICAgICAgICAgICYmICFOSUxQIChC VkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnNfaW5hY3RpdmVfd2luZG93cykp KQorICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3Zlcmxh eS1hcnJvdy1oc2NsLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAgICA6IChmcmluZ2Vf YWN0aXZlX2JpdG1hcF9wCisgICAgICAgICAgICAgJiYgbWluaW1hbF9wKQorICAgICAgICAgICAg PyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFycm93LWhzY2wt bWluaW1hbC1mYWNlIiksIHRydWUpCisgICAgICAgICAgOiAoZnJpbmdlX2FjdGl2ZV9iaXRtYXBf cAorICAgICAgICAgICAgICYmICFtaW5pbWFsX3ApCisgICAgICAgICAgICA/IGxvb2t1cF9uYW1l ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ctaHNjbC1mYWNlIiksIHRydWUp CisgICAgICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgIGZhY2VfaWQgPSAoY3Vyc29y X3R5cGUgPT0gTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgICAgPyBvdmVybGF5 X2Fycm93X2ZhY2VfaWQKKyAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAg ICAgICBnbHlwaF9yb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBmYWNlX2lkOworICAgICAgICBm cmluZ2VfYml0bWFwID0gbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgi aHNjbF90ZW1wb3JhcnkiKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgLyogQXMgdG8gYGdseXBo X3Jvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXBgLCB0aGUgZmFjZSBtYXkgYmUgY2hhbmdlZCB1c2lu ZworICAgICAgICB0aGUgYGZhY2UtcmVtYXBwaW5nLWFsaXN0JyBzbyBsb25nIGFzIHdlIGhhdmUg YSBMaXNwIHNldHRpbmcgb2Y6CisgICAgICAgICAgKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJyst ZnJpbmdlLXJpZ2h0LWFycm93ICcrLW92ZXJsYXktYXJyb3ctZmFjZSkKKyAgICAgICAgSWYgd2Ug dXNlIGBnbHlwaF9yb3ctPmxlZnRfZnJpbmdlX2JpdG1hcGAsIHRoZW4gdGhlIGZhY2UgbWF5IGJl IHNldCB1c2luZworICAgICAgICBCT1RIIHRoZSBgZmFjZS1yZW1hcHBpbmctYWxpc3QnIGFuZCBg Z2x5cGhfcm93LT5sZWZ0X2ZyaW5nZV9mYWNlX2lkYC4gIEluCisgICAgICAgIHRoYXQgc2l0dWF0 aW9uLCBhIExpc3Agc2V0dGluZyBvZiBgc2V0LWZyaW5nZS1iaXRtYXAtZmFjZScgaXMgbm90IG5l ZWRlZC4KKyAgICAgICAgYGRyYXdfZnJpbmdlX2JpdG1hcF8xJyBpcyBzb21ld2hhdCBjb25mdXNp bmcgYW5kIHJlcXVpcmVkIHN0ZGVyciBtZXNzYWdlcworICAgICAgICB0byBzZWUgdGhhdCBgZ2x5 cGhfcm93LT5vdmVybGF5X2Fycm93X2JpdG1hcGAgc2F0aXNmaWVzIHRoZSBmaXJzdCBjb25kaXRp b24KKyAgICAgICAgb2YgKHdoaWNoICE9IE5PX0ZSSU5HRV9CSVRNQVApLiAgQXQgdGhpcyB0aW1l LCBAbGF3bGlzdCBwcmVmZXJzIG5vdCB0bworICAgICAgICByZWx5IHVwb24gYSBMaXNwIHNldHRp bmcgdXNpbmcgYHNldC1mcmluZ2UtYml0bWFwLWZhY2UnLiAqLworICAgICAgICBnbHlwaF9yb3ct PmxlZnRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBMRUZUX0ZSSU5HRV9CSVRNQVAp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZyaW5nZV9iaXRt YXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTk9fRlJJTkdF X0JJVE1BUDsKKyAgICAgICAgZ2x5cGhfcm93LT5sZWZ0X2ZyaW5nZV9vZmZzZXQgPSAwOworICAg ICAgICBkcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIGdseXBoX3JvdywgdHJ1ZSk7CisgICAgICB9Cisg ICAgICBlbHNlIGlmIChmbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BTkdMRQor ICAgICAgICAgICAgICAgfHwgZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5HTEUKKyAgICAgICAg ICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQU5HTEUKKyAgICAgICAg ICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgIHx8IGZs YXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIKQorICAgICAgICB7CisgICAgICAgICAg TGlzcF9PYmplY3QgYml0bWFwX2ZsYXZvciA9IChmbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdM RV9SSUdIVF9BTkdMRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBR bWNfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9hbmdsZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IChmbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY19ob2xsb3dfcmVjdGFuZ2xlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGZsYXZvciA9PSBNQ19WRVJU SUNBTF9CQVJfUklHSFRfQU5HTEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyBRbWNfdmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogKGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfdmVydGljYWxfYmFyCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGZsYXZvciA9PSBNQ19WRVJUSUNB TF9CQVJfQkFDS1NMQVNIKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ID8gUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBRbmlsOworICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSAoY3Vyc29yX3R5 cGUgPT0gUklHSFRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyBs b29rdXBfZnJpbmdlX2JpdG1hcCAoYml0bWFwX2ZsYXZvcikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgOiBOT19GUklOR0VfQklUTUFQOworICAgICAgICAgIGZhY2VfaWQgPSAoY3Vyc29yX3R5 cGUgPT0gUklHSFRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBf bmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy12ZXJ0aWNhbC1iYXItZmFjZSIpLCB0cnVlKQor ICAgICAgICAgICAgICAgICAgICA6IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICBnbHlwaF9y b3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IGZhbHNlOworICAgICAgICAgIGdseXBoX3Jvdy0+ZnJp bmdlX2JpdG1hcF9wZXJpb2RpY19wID0gMDsKKyAgICAgICAgICBnbHlwaF9yb3ctPnJpZ2h0X2Zy aW5nZV9iaXRtYXAgPSBmcmluZ2VfYml0bWFwOworICAgICAgICAgIGdseXBoX3Jvdy0+cmlnaHRf ZnJpbmdlX2ZhY2VfaWQgPSBmYWNlX2lkOworICAgICAgICAgIGdseXBoX3Jvdy0+cmlnaHRfZnJp bmdlX29mZnNldCA9IDA7CisgICAgICAgICAgZHJhd19mcmluZ2VfYml0bWFwICh3LCBnbHlwaF9y b3csIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGF2b3IgPT0gTUNfR0xZ UEgKKyAgICAgICAgICAgICAgICAgfHwgZmxhdm9yID09IE1DX0dMWVBITEVTUworICAgICAgICAg ICAgICAgICB8fCBmbGF2b3IgPT0gTUNfR0xZUEhfVEFCKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIHctPm1jLmggPSBoOworICAgICAgICAgICAgdy0+bWMuZnggPSBmeDsKKyAgICAgICAgICAg IHctPm1jLmZ5ID0gZnk7CisgICAgICAgICAgICB3LT5tYy5nbHlwaF9mbGF2b3IgPSBmbGF2b3I7 CisgICAgICAgICAgICB3LT5tYy5yZWQgPSBYRkxPQVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9y LCAwKSk7CisgICAgICAgICAgICB3LT5tYy5ncmVlbiA9IFhGTE9BVF9EQVRBIChBUkVGIChjb2xv cl92ZWN0b3IsIDEpKTsKKyAgICAgICAgICAgIHctPm1jLmJsdWUgPSBYRkxPQVRfREFUQSAoQVJF RiAoY29sb3JfdmVjdG9yLCAyKSk7CisgICAgICAgICAgICB3LT5tYy5wb3NpbnQgPSBwb3NpbnQ7 CisgICAgICAgICAgICAvKiBTb21lIG9mIHRoZXNlIHZhbHVlcyBjb21lIHRocm91Z2ggYXMgMS4w MDM5MDYsIHdoaWNoIGNhdXNlcyBhIGJyZWFrYWdlCisgICAgICAgICAgICBvZiB0aGUgY29sb3Jz IGluIHRoYXQgbXVsdGlwbGljYXRpb24gYnkgdGhlIGJhc2Ugd2lsbCBleGNlZWQgdGhlIGJhc2Uu ICovCisgICAgICAgICAgICBpZiAody0+bWMucmVkID4gMS4wKQorICAgICAgICAgICAgICB3LT5t Yy5yZWQgPSAxLjA7CisgICAgICAgICAgICBpZiAody0+bWMuZ3JlZW4gPiAxLjApCisgICAgICAg ICAgICAgIHctPm1jLmdyZWVuID0gMS4wOworICAgICAgICAgICAgaWYgKHctPm1jLmJsdWUgPiAx LjApCisgICAgICAgICAgICAgIHctPm1jLmJsdWUgPSAxLjA7CisgICAgICAgICAgICBGUkFNRV9S SUYgKGYpLT5kcmF3X3dpbmRvd19jdXJzb3IgKHcsIGdseXBoX3JvdywgeCwgeSwgY3Vyc29yX3R5 cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNv cl93aWR0aCwgdHJ1ZSwgYWN0aXZlX2N1cnNvcl9wKTsKKyAgICAgICAgICB9CisgIC8qIFJlc3Rv cmUgdGhlIHByZXZpb3VzIHZhbHVlcyBmb3Igdy0+cGh5c19jdXJzb3IgYW5kIGdseXBoX3Jvdy4g Ki8KKyAgdy0+cGh5c19jdXJzb3Jfb25fcCA9IHBoeXNfY3Vyc29yX29uX3A7CisgIHctPnBoeXNf Y3Vyc29yLnggPSBwaHlzX2N1cnNvcl94OworICB3LT5waHlzX2N1cnNvci55ID0gcGh5c19jdXJz b3JfeTsKKyAgdy0+cGh5c19jdXJzb3IuaHBvcyA9IHBoeXNfY3Vyc29yX2hwb3M7CisgIHctPnBo eXNfY3Vyc29yLnZwb3MgPSBwaHlzX2N1cnNvcl92cG9zOworICB3LT5waHlzX2N1cnNvcl90eXBl ID0gcGh5c19jdXJzb3JfdHlwZTsKKyAgZ2x5cGhfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSBj dXJzb3JfaW5fZnJpbmdlX3A7CisgIGdseXBoX3Jvdy0+cmV2ZXJzZWRfcCA9IHJldmVyc2VkX3A7 CisgIHctPnBoeXNfY3Vyc29yX2FzY2VudCA9IHBoeXNfY3Vyc29yX2FzY2VudDsKKyAgdy0+cGh5 c19jdXJzb3JfaGVpZ2h0ID0gcGh5c19jdXJzb3JfaGVpZ2h0OworICB3LT5waHlzX2N1cnNvcl93 aWR0aCA9IHBoeXNfY3Vyc29yX3dpZHRoOworfQorCitzdGF0aWMgdm9pZAorbWNfc3RkZXJyXzEg KHN0cnVjdCBpdCAqaXQsIGludCBjb3VudCwgaW50IHBvc2ludCwgaW50IG5ld194LAorICAgICAg ICAgICAgIGludCBvcG9pbnRfeCwgaW50IG9wb2ludF95LCBpbnQgb3BvaW50X2hwb3MsIGludCBv cG9pbnRfdnBvcywKKyAgICAgICAgICAgICBpbnQgYW50ZV9wcmlvcl9wcmV2aW91c19pdF9jdXJy ZW50X3gsIGludCBwcmlvcl9wcmV2aW91c19pdF9jdXJyZW50X3gsIGludCBwcmV2aW91c19pdF9j dXJyZW50X3gsCisgICAgICAgICAgICAgaW50IGFudGVfcHJpb3JfcHJldmlvdXNfaXRfaHBvcywg aW50IHByaW9yX3ByZXZpb3VzX2l0X2hwb3MsIGludCBwcmV2aW91c19pdF9ocG9zLAorICAgICAg ICAgICAgIGludCBhbnRlX3ByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3gsIGludCBwcmlvcl9wcmV2 aW91c19yZWxhdGl2ZV94LCBpbnQgcHJldmlvdXNfcmVsYXRpdmVfeCwgaW50IHJlbGF0aXZlX3gs CisgICAgICAgICAgICAgaW50IGFudGVfcHJpb3JfcHJldmlvdXNfZmV0Y2hfYnl0ZSwgaW50IHBy aW9yX3ByZXZpb3VzX2ZldGNoX2J5dGUsIGludCBwcmV2aW91c19mZXRjaF9ieXRlLAorICAgICAg ICAgICAgIGludCBhbnRlX3ByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciwgaW50IHByaW9yX3ByZXZp b3VzX2NoYXJhY3RlciwgaW50IHByZXZpb3VzX2NoYXJhY3RlciwKKyAgICAgICAgICAgICBpbnQg YW50ZV9wcmlvcl9wcmV2aW91c19mYWNlX2lkLCBpbnQgcHJpb3JfcHJldmlvdXNfZmFjZV9pZCwg aW50IHByZXZpb3VzX2ZhY2VfaWQsCisgICAgICAgICAgICAgaW50IGFudGVfcHJpb3JfcHJldmlv dXNfaHBvcywgaW50IHByaW9yX3ByZXZpb3VzX2hwb3MsIGludCBwcmV2aW91c19ocG9zLAorICAg ICAgICAgICAgIGJvb2wgZmluYWxfbG9vcF9wLCBib29sIGlzc3VlXzMxNzE2X3AsIGJvb2wgbHB3 X3JlYWNoZWRfcCwgYm9vbCBncmVlbl9saWdodF9wLAorICAgICAgICAgICAgIGJvb2wgcmVhbF9m YWtlX2N1cnNvcl9wLCBib29sIHRhYl9pbnZpc2libGVfcCwKKyAgICAgICAgICAgICBib29sIGhz Y2xfdGVtcG9yYXJ5X3AsIGJvb2wgaHNjbF9wZXJtYW5lbnRfcCwgaW50IHJjLCBpbnQgYWN0aW9u X3R5cGUpCit7CisgIGludCB3X2hzY3JvbGwgPSBpdC0+dy0+aHNjcm9sbDsKKyAgaW50IHdfbWlu X2hzY3JvbGwgPSBpdC0+dy0+bWluX2hzY3JvbGw7CisgIGludCBpdF9jaGFycG9zID0gSVRfQ0hB UlBPUyAoKml0KTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiXG4lZC4gICVzJXMgLS0gKCVzKVxuXAor ICAgIElUX0NIQVJQT1MgKCVkKVxuXAorICAgIHBvc2ludCAoJWQpXG5cCisgICAgaXQtPmMgKCVk KVxuXAorICAgIGl0LT53aGF0ICglcylcblwKKyAgICBpdC0+Y21wX2l0Lm5jaGFycyAoJWQpXG5c CisgICAgbmV3X3ggKCVkKVxuXAorICAgIG9wb2ludF94ICglZClcblwKKyAgICBvcG9pbnRfeSAo JWQpXG5cCisgICAgb3BvaW50X2hwb3MgKCVkKVxuXAorICAgIG9wb2ludF92cG9zICglZClcblwK KyAgICBpdC0+Y3VycmVudF95ICglZClcblwKKyAgICBpdC0+dnBvcyAoJWQpXG5cCisgICAgYW50 ZV9wcmlvcl9wcmV2aW91c19pdF9jdXJyZW50X3ggKCVkKVxuXAorICAgIHByaW9yX3ByZXZpb3Vz X2l0X2N1cnJlbnRfeCAoJWQpXG5cCisgICAgcHJldmlvdXNfaXRfY3VycmVudF94ICglZClcblwK KyAgICBpdC0+Y3VycmVudF94ICglZClcblwKKyAgICBhbnRlX3ByaW9yX3ByZXZpb3VzX2l0X2hw b3MgKCVkKVxuXAorICAgIHByaW9yX3ByZXZpb3VzX2l0X2hwb3MgKCVkKVxuXAorICAgIHByZXZp b3VzX2l0X2hwb3MgKCVkKVxuXAorICAgIGl0LT5ocG9zICglZClcblwKKyAgICBhbnRlX3ByaW9y X3ByZXZpb3VzX2ZldGNoX2J5dGUgKCVkKVxuXAorICAgIHByaW9yX3ByZXZpb3VzX2ZldGNoX2J5 dGUgKCVkKVxuXAorICAgIHByZXZpb3VzX2ZldGNoX2J5dGUgKCVkKVxuXAorICAgIGZldGNoX2J5 dGUgKCVkKVxuXAorICAgIGFudGVfcHJpb3JfcHJldmlvdXNfY2hhcmFjdGVyICglcylcblwKKyAg ICBwcmlvcl9wcmV2aW91c19jaGFyYWN0ZXIgKCVzKVxuXAorICAgIHByZXZpb3VzX2NoYXJhY3Rl ciAoJXMpXG5cCisgICAgY2hhcmFjdGVyICglcylcblwKKyAgICBhbnRlX3ByaW9yX3ByZXZpb3Vz X3JlbGF0aXZlX3ggKCVkKVxuXAorICAgIHByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3ggKCVkKVxu XAorICAgIHByZXZpb3VzX3JlbGF0aXZlX3ggKCVkKVxuXAorICAgIHJlbGF0aXZlX3ggKCVkKVxu XAorICAgIGFudGVfcHJpb3JfcHJldmlvdXNfaHBvcyAoJWQpXG5cCisgICAgcHJpb3JfcHJldmlv dXNfaHBvcyAoJWQpXG5cCisgICAgcHJldmlvdXNfaHBvcyAoJWQpXG5cCisgICAgYW50ZV9wcmlv cl9wcmV2aW91c19mYWNlX2lkICglZCkgfCBmZyAoJXMpIHwgYmcgKCVzKVxuXAorICAgIHByaW9y X3ByZXZpb3VzX2ZhY2VfaWQgKCVkKSB8IGZnICglcykgfCBiZyAoJXMpXG5cCisgICAgcHJldmlv dXNfZmFjZV9pZCAoJWQpIHwgZmcgKCVzKSB8IGJnICglcylcblwKKyAgICBpdC0+ZmFjZV9pZCAo JWQpIHwgZmcgKCVzKSB8IGJnICglcylcblwKKyAgICB3LT5oc2Nyb2xsICglZClcblwKKyAgICB3 LT5taW5faHNjcm9sbCAoJWQpXG5cCisgICAgaHNjbF90ZW1wb3JhcnlfcCAoJXMpXG5cCisgICAg aHNjbF9wZXJtYW5lbnRfcCAoJXMpXG5cCisgICAgaXQtPmxudW1fcGl4ZWxfd2lkdGggKCVkKVxu XAorICAgIGl0LT5sbnVtX3dpZHRoICglZClcblwKKyAgICBpdC0+cGl4ZWxfd2lkdGggKCVkKVxu XAorICAgIGl0LT5maXJzdF92aXNpYmxlX3ggKCVkKVxuXAorICAgIGl0LT5sYXN0X3Zpc2libGVf eCAoJWQpXG5cCisgICAgZmluYWxfbG9vcF9wICglcylcblwKKyAgICBpc3N1ZV8zMTcxNl9wICgl cylcblwKKyAgICBscHdfcmVhY2hlZF9wICglcylcblwKKyAgICBncmVlbl9saWdodF9wICglcylc blwKKyAgICByZWFsX2Zha2VfY3Vyc29yX3AgKCVzKVxuXAorICAgIHRhYl9pbnZpc2libGVfcCAo JXMpXG5cCisgICAgcmMgKCVzKVxuIiwKKyAgICAgIGNvdW50LAorICAgICAgKGl0LT5jID09IDAK KyAgICAgICAgPyAiTk9USElORyIKKyAgICAgICAgOiBpdC0+YyA9PSAxODcKKyAgICAgICAgICA/ ICJUQUIgQ0hBUkFDVEVSIgorICAgICAgICA6IGl0LT5jID09ICdcdCcKKyAgICAgICAgICA/ICJU QUIgU1RSRVRDSCIKKyAgICAgICAgOiAiVEVYVCIpLAorICAgICAgKHJlbGF0aXZlX3ggPT0gaXQt PmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgPyAiIC0tIFRIRSBGVU4gU1RBUlRTIEhFUkUiCisg ICAgICAgIDogIiIpLAorICAgICAgKGFjdGlvbl90eXBlID09IE1VTFRJUExFX0NVUlNPUlMKKyAg ICAgICA/ICJNVUxUSVBMRV9DVVJTT1JTIgorICAgICAgIDogYWN0aW9uX3R5cGUgPT0gSE9SSVpP TlRBTF9SVUxFUgorICAgICAgICAgPyAiSE9SSVpPTlRBTF9SVUxFUiIKKyAgICAgICA6IGFjdGlv bl90eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICA/ICJWRVJUSUNBTF9SVUxFUiIKKyAg ICAgICA6ICJPT1BTIiksCisgICAgICBpdF9jaGFycG9zLAorICAgICAgcG9zaW50LAorICAgICAg aXQtPmMsCisgICAgICAoaXQtPndoYXQgPT0gMAorICAgICAgID8gIklUX0NIQVJBQ1RFUiIKKyAg ICAgICA6IGl0LT53aGF0ID09IDEKKyAgICAgICAgID8gIklUX0NPTVBPU0lUSU9OIgorICAgICAg IDogaXQtPndoYXQgPT0gMgorICAgICAgICAgPyAiSVRfSU1BR0UiCisgICAgICAgOiBpdC0+d2hh dCA9PSAzCisgICAgICAgICA/ICJJVF9TVFJFVENIIgorICAgICAgIDogaXQtPndoYXQgPT0gNAor ICAgICAgICAgPyAiSVRfRU9CIgorICAgICAgIDogaXQtPndoYXQgPT0gNQorICAgICAgICAgPyAi SVRfVFJVTkNBVElPTiIKKyAgICAgICA6IGl0LT53aGF0ID09IDYKKyAgICAgICAgID8gIklUX0NP TlRJTlVBVElPTiIKKyAgICAgICA6ICJPT1BTIiksCisgICAgICAoaXQtPndoYXQgPT0gSVRfQ09N UE9TSVRJT04gPyBpdC0+Y21wX2l0Lm5jaGFycyA6IDEpLAorICAgICAgbmV3X3gsCisgICAgICBv cG9pbnRfeCwKKyAgICAgIG9wb2ludF95LAorICAgICAgb3BvaW50X2hwb3MsCisgICAgICBvcG9p bnRfdnBvcywKKyAgICAgIGl0LT5jdXJyZW50X3ksCisgICAgICBpdC0+dnBvcywKKyAgICAgIGFu dGVfcHJpb3JfcHJldmlvdXNfaXRfY3VycmVudF94LAorICAgICAgcHJpb3JfcHJldmlvdXNfaXRf Y3VycmVudF94LAorICAgICAgcHJldmlvdXNfaXRfY3VycmVudF94LAorICAgICAgaXQtPmN1cnJl bnRfeCwKKyAgICAgIGFudGVfcHJpb3JfcHJldmlvdXNfaXRfaHBvcywKKyAgICAgIHByaW9yX3By ZXZpb3VzX2l0X2hwb3MsCisgICAgICBwcmV2aW91c19pdF9ocG9zLAorICAgICAgaXQtPmhwb3Ms CisgICAgICBhbnRlX3ByaW9yX3ByZXZpb3VzX2ZldGNoX2J5dGUsCisgICAgICBwcmlvcl9wcmV2 aW91c19mZXRjaF9ieXRlLAorICAgICAgcHJldmlvdXNfZmV0Y2hfYnl0ZSwKKyAgICAgIEZFVENI X0JZVEUgKElUX0JZVEVQT1MgKCppdCkpLAorICAgICAgKCFOSUxQIChGY2hhcl90b19zdHJpbmcg KG1ha2VfZml4bnVtIChhbnRlX3ByaW9yX3ByZXZpb3VzX2NoYXJhY3RlcikpKQorICAgICAgICA/ IFNTREFUQSAoRmNoYXJfdG9fc3RyaW5nIChtYWtlX2ZpeG51bSAoYW50ZV9wcmlvcl9wcmV2aW91 c19jaGFyYWN0ZXIpKSkKKyAgICAgICAgOiAiTklMUCAtLSBhbnRlX3ByaW9yX3ByZXZpb3VzX2No YXJhY3RlciBhcyBhIHN0cmluZyIpLAorICAgICAgKCFOSUxQIChGY2hhcl90b19zdHJpbmcgKG1h a2VfZml4bnVtIChwcmlvcl9wcmV2aW91c19jaGFyYWN0ZXIpKSkKKyAgICAgICAgPyBTU0RBVEEg KEZjaGFyX3RvX3N0cmluZyAobWFrZV9maXhudW0gKHByaW9yX3ByZXZpb3VzX2NoYXJhY3Rlcikp KQorICAgICAgICA6ICJOSUxQIC0tIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciBhcyBhIHN0cmlu ZyIpLAorICAgICAgKCFOSUxQIChGY2hhcl90b19zdHJpbmcgKG1ha2VfZml4bnVtIChwcmV2aW91 c19jaGFyYWN0ZXIpKSkKKyAgICAgICAgPyBTU0RBVEEgKEZjaGFyX3RvX3N0cmluZyAobWFrZV9m aXhudW0gKHByZXZpb3VzX2NoYXJhY3RlcikpKQorICAgICAgICA6ICJOSUxQIC0tIHByZXZpb3Vz X2NoYXJhY3RlciBhcyBhIHN0cmluZyIpLAorICAgICAgKCFOSUxQIChGY2hhcl90b19zdHJpbmcg KG1ha2VfZml4bnVtIChpdC0+YykpKQorICAgICAgICA/IFNTREFUQSAoRmNoYXJfdG9fc3RyaW5n IChtYWtlX2ZpeG51bSAoaXQtPmMpKSkKKyAgICAgICAgOiAiTklMUCAtLSBpdC0+YyBhcyBhIHN0 cmluZyIpLAorICAgICAgYW50ZV9wcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94LAorICAgICAgcHJp b3JfcHJldmlvdXNfcmVsYXRpdmVfeCwKKyAgICAgIHByZXZpb3VzX3JlbGF0aXZlX3gsCisgICAg ICByZWxhdGl2ZV94LAorICAgICAgYW50ZV9wcmlvcl9wcmV2aW91c19ocG9zLAorICAgICAgcHJp b3JfcHJldmlvdXNfaHBvcywKKyAgICAgIHByZXZpb3VzX2hwb3MsCisgICAgICBhbnRlX3ByaW9y X3ByZXZpb3VzX2ZhY2VfaWQsCisgICAgICAgIFNTREFUQSAobWNfZmdfZmFjZSAoaXQtPncsIGFu dGVfcHJpb3JfcHJldmlvdXNfZmFjZV9pZCkpLAorICAgICAgICBTU0RBVEEgKG1jX2JnX2ZhY2Ug KGl0LT53LCBhbnRlX3ByaW9yX3ByZXZpb3VzX2ZhY2VfaWQpKSwKKyAgICAgIHByaW9yX3ByZXZp b3VzX2ZhY2VfaWQsCisgICAgICAgIFNTREFUQSAobWNfZmdfZmFjZSAoaXQtPncsIHByaW9yX3By ZXZpb3VzX2ZhY2VfaWQpKSwKKyAgICAgICAgU1NEQVRBIChtY19iZ19mYWNlIChpdC0+dywgcHJp b3JfcHJldmlvdXNfZmFjZV9pZCkpLAorICAgICAgcHJldmlvdXNfZmFjZV9pZCwKKyAgICAgICAg U1NEQVRBIChtY19mZ19mYWNlIChpdC0+dywgcHJldmlvdXNfZmFjZV9pZCkpLAorICAgICAgICBT U0RBVEEgKG1jX2JnX2ZhY2UgKGl0LT53LCBwcmV2aW91c19mYWNlX2lkKSksCisgICAgICBpdC0+ ZmFjZV9pZCwKKyAgICAgICAgU1NEQVRBIChtY19mZ19mYWNlIChpdC0+dywgaXQtPmZhY2VfaWQp KSwKKyAgICAgICAgU1NEQVRBIChtY19iZ19mYWNlIChpdC0+dywgaXQtPmZhY2VfaWQpKSwKKyAg ICAgIC8qIFdoZW4gYGl0LT53LT5oc2Nyb2xsYCBpcyBzZXQgdG8gYW4gYGludGAsIGdkYiByZXBv cnRzIHRoZSB2YWx1ZQorICAgICAgYXMgYmVpbmc6ICA8dmFyaWFibGUgb3B0aW1pemVkIGF3YXkg YnkgY29tcGlsZXI+ICovCisgICAgICB3X2hzY3JvbGwsCisgICAgICB3X21pbl9oc2Nyb2xsLAor ICAgICAgKGhzY2xfdGVtcG9yYXJ5X3AgPyAidHJ1ZSIgOiAiZmFsc2UiKSwKKyAgICAgIChoc2Ns X3Blcm1hbmVudF9wID8gInRydWUiIDogImZhbHNlIiksCisgICAgICBpdC0+bG51bV9waXhlbF93 aWR0aCwKKyAgICAgIGl0LT5sbnVtX3dpZHRoLAorICAgICAgaXQtPnBpeGVsX3dpZHRoLAorICAg ICAgaXQtPmZpcnN0X3Zpc2libGVfeCwKKyAgICAgIGl0LT5sYXN0X3Zpc2libGVfeCwKKyAgICAg IChmaW5hbF9sb29wX3AgPyAidHJ1ZSIgOiAiZmFsc2UiKSwKKyAgICAgIChpc3N1ZV8zMTcxNl9w ID8gInRydWUiIDogImZhbHNlIiksCisgICAgICAobHB3X3JlYWNoZWRfcCA/ICJ0cnVlIiA6ICJm YWxzZSIpLAorICAgICAgKGdyZWVuX2xpZ2h0X3AgPyAidHJ1ZSIgOiAiZmFsc2UiKSwKKyAgICAg IChyZWFsX2Zha2VfY3Vyc29yX3AgPyAidHJ1ZSIgOiAiZmFsc2UiKSwKKyAgICAgICh0YWJfaW52 aXNpYmxlX3AgPyAidHJ1ZSIgOiAiZmFsc2UiKSwKKyAgICAgIChyYyA9PSBNT1ZFX1VOREVGSU5F RAorICAgICAgICA/ICJNT1ZFX1VOREVGSU5FRCIKKyAgICAgICAgOiByYyA9PSBNT1ZFX1BPU19N QVRDSF9PUl9aVgorICAgICAgICAgID8gIk1PVkVfUE9TX01BVENIX09SX1pWIgorICAgICAgICA6 IHJjID09IE1PVkVfWF9SRUFDSEVECisgICAgICAgICAgPyAiTU9WRV9YX1JFQUNIRUQiCisgICAg ICAgIDogcmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAgICAgICAgID8gIk1PVkVfTElORV9D T05USU5VRUQiCisgICAgICAgIDogcmMgPT0gTU9WRV9MSU5FX1RSVU5DQVRFRAorICAgICAgICAg ID8gIk1PVkVfTElORV9UUlVOQ0FURUQiCisgICAgICAgIDogcmMgPT0gTU9WRV9ORVdMSU5FX09S X0NSCisgICAgICAgICAgPyAiTU9WRV9ORVdMSU5FX09SX0NSIgorICAgICAgICA6ICJPT1BTIikp OworfQorCitzdGF0aWMgdm9pZAorbWNfc3RkZXJyXzIgKHN0cnVjdCBpdCAqaXQsIGludCBjb3Vu dCwgaW50IGFjdGlvbl90eXBlLCBpbnQgcmVsYXRpdmVfeCwKKyAgICAgICAgICAgICBpbnQgdGVt cF94LCBpbnQgdGVtcF9ocG9zLCBpbnQgdGVtcF92cG9zLCBMaXNwX09iamVjdCBmb3JlZ3JvdW5k LAorICAgICAgICAgICAgIGludCB0ZW1wX2JnX2ZhY2VfaWQsIGludCBjdXJzb3JfdHlwZSwgaW50 IGZsYXZvcikKK3sKKyAgc3RydWN0IGZhY2UgKmZhY2UgPSBtY19sb29rdXBfZmFjZSAoaXQpOwor ICBzdHJ1Y3QgZm9udCAqZm9udCA9IGZhY2UtPmZvbnQ7CisgIExpc3BfT2JqZWN0IGZvcmVncm91 bmRfZmFjZSA9IGZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBMaXNwX09i amVjdCBiYWNrZ3JvdW5kX2ZhY2UgPSBmYWNlLT5sZmFjZVtMRkFDRV9CQUNLR1JPVU5EX0lOREVY XTsKKyAgZG91YmxlIHJlZCA9IFhGTE9BVF9EQVRBIChBUkVGIChmb3JlZ3JvdW5kLCAwKSk7Cisg IGRvdWJsZSBncmVlbiA9IFhGTE9BVF9EQVRBIChBUkVGIChmb3JlZ3JvdW5kLCAxKSk7CisgIGRv dWJsZSBibHVlID0gWEZMT0FUX0RBVEEgKEFSRUYgKGZvcmVncm91bmQsIDIpKTsKKyAgLyogU29t ZSBvZiB0aGVzZSB2YWx1ZXMgY29tZSB0aHJvdWdoIGFzIDEuMDAzOTA2LCB3aGljaCBjYXVzZXMg YSBicmVha2FnZQorICBvZiB0aGUgY29sb3JzIGluIHRoYXQgbXVsdGlwbGljYXRpb24gYnkgdGhl IGJhc2Ugd2lsbCBleGNlZWQgdGhlIGJhc2UuICovCisgIGlmIChyZWQgPiAxLjApCisgICAgcmVk ID0gMS4wOworICBpZiAoZ3JlZW4gPiAxLjApCisgICAgZ3JlZW4gPSAxLjA7CisgIGlmIChibHVl ID4gMS4wKQorICAgIGJsdWUgPSAxLjA7CisgIGZwcmludGYgKHN0ZGVyciwgIlxuJWQuICAlcyVz IC0tICglcykgU1BFQ1NcblwKKyAgICB0ZW1wX3ggKCVkKVxuXAorICAgIHkgKCVkKVxuXAorICAg IHRlbXBfaHBvcyAoJWQpXG5cCisgICAgdGVtcF92cG9zICglZClcblwKKyAgICBmb3JlZ3JvdW5k OiAgUiAoJWYpIHwgRyAoJWYpIHwgQiAoJWYpXG5cCisgICAgYmFja2dyb3VuZCAoJXMpXG5cCisg ICAgY3Vyc29yX3R5cGUgKCVzKVxuXAorICAgIGZsYXZvciAoJXMpXG4iLAorICAgICAgY291bnQs CisgICAgICAoaXQtPmMgPT0gMAorICAgICAgICA/ICJOT1RISU5HIgorICAgICAgICA6IGl0LT5j ID09IDE4NworICAgICAgICAgID8gIlRBQiBDSEFSQUNURVIiCisgICAgICAgIDogaXQtPmMgPT0g J1x0JworICAgICAgICAgID8gIlRBQiBTVFJFVENIIgorICAgICAgICA6ICJURVhUIiksCisgICAg ICAocmVsYXRpdmVfeCA9PSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICA/ICIgLS0gVEhF IEZVTiBTVEFSVFMgSEVSRSIKKyAgICAgICAgOiAiIiksCisgICAgICAoYWN0aW9uX3R5cGUgPT0g TVVMVElQTEVfQ1VSU09SUworICAgICAgID8gIk1VTFRJUExFX0NVUlNPUlMiCisgICAgICAgOiBh Y3Rpb25fdHlwZSA9PSBIT1JJWk9OVEFMX1JVTEVSCisgICAgICAgICA/ICJIT1JJWk9OVEFMX1JV TEVSIgorICAgICAgIDogYWN0aW9uX3R5cGUgPT0gVkVSVElDQUxfUlVMRVIKKyAgICAgICAgID8g IlZFUlRJQ0FMX1JVTEVSIgorICAgICAgIDogIk9PUFMiKSwKKyAgICB0ZW1wX3gsCisgICAgaXQt PmN1cnJlbnRfeSwKKyAgICB0ZW1wX2hwb3MsCisgICAgdGVtcF92cG9zLAorICAgIHJlZCwgZ3Jl ZW4sIGJsdWUsCisgICAgU1NEQVRBIChtY19iZ19mYWNlIChpdC0+dywgdGVtcF9iZ19mYWNlX2lk KSksCisgICAgU1NEQVRBIChGcHJpbjFfdG9fc3RyaW5nIChtY19jdXJzb3JfdHlwZV90b19saXNw IChjdXJzb3JfdHlwZSksIFFuaWwpKSwKKyAgICAoZmxhdm9yID09IE1DX0dMWVBICisgICAgICA/ ICJNQ19HTFlQSCIKKyAgICAgIDogZmxhdm9yID09IE1DX0dMWVBIX1RBQgorICAgICAgICA/ICJN Q19HTFlQSF9UQUIiCisgICAgICA6IGZsYXZvciA9PSBNQ19HTFlQSExFU1MKKyAgICAgICAgPyAi TUNfR0xZUEhMRVNTIgorICAgICAgOiBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FO R0xFCisgICAgICAgID8gIk1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BTkdMRSIKKyAgICAgIDogZmxh dm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgPyAiTUNfVkVSVElDQUxf QkFSX0JBQ0tTTEFTSCIKKyAgICAgIDogZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAg ICA/ICJNQ19WRVJUSUNBTF9CQVIiCisgICAgICA6ICJPT1BTIikpOworfQorCitzdGF0aWMgdm9p ZAorbWNfaGVscGVyIChzdHJ1Y3Qgd2luZG93ICp3LCBpbnQgeCwgaW50IGZ4LCBpbnQgeSwgaW50 IGZ5LCBpbnQgaHBvcywKKyAgICAgICAgICAgaW50IHZwb3MsIGludCBoLCBlbnVtIHRleHRfY3Vy c29yX2tpbmRzIGN1cnNvcl90eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICBMaXNw X09iamVjdCBmb3JlZ3JvdW5kLCBMaXNwX09iamVjdCBiYWNrZ3JvdW5kLCBib29sIGFjdGl2ZV9j dXJzb3JfcCwKKyAgICAgICAgICAgaW50IGZsYXZvciwgcHRyZGlmZl90IHBvc2ludCwgTGlzcF9P YmplY3QgKnJlc3VsdCkKK3sKKyAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIHgsIGZ4LCB5LCBm eSwgaHBvcywgdnBvcywgaCwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBj dXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGFjdGl2ZV9jdXJzb3JfcCwgZmxhdm9yLCBwb3NpbnQp OworICBMaXNwX09iamVjdCBmb3VydGVlbl9lbGVtZW50cyA9IGxpc3RuIChDT05TVFlQRV9IRUFQ LCAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhu dW0gKHgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2Zp eG51bSAoZngpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl X2ZpeG51bSAoeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VfZml4bnVtIChmeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VfZml4bnVtIChocG9zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZV9maXhudW0gKHZwb3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlX2ZpeG51bSAoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1jX2N1cnNvcl90eXBlX3RvX2xpc3AgKGN1cnNvcl90eXBlKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0gKGN1cnNvcl93 aWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91 bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZml4bnVtIChh Y3RpdmVfY3Vyc29yX3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYWtlX2ZpeG51bSAoZmxhdm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZV9maXhudW0gKHBvc2ludCkpOworICAqcmVzdWx0ID0gRmNvbnMgKGZvdXJ0 ZWVuX2VsZW1lbnRzLCAqcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQKK21jX2dldF9waHlzX2N1 cnNvcl9nZW9tZXRyeSAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqZ2x5cGhf cm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50ICpmeCwgaW50IHks IGludCAqZnksIGludCBocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdnBv cywgaW50ICpoLCBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoKQoreworICBpbnQgY3Vyc29yX2hl aWdodDsKKyAgLyogUmVjb3JkIHNvbWUgb2YgdGhlIGN1cnJlbnQgdmFsdWVzIGZvciB0aGUgY3Vy c29yIGFuZCBnbHlwaF9yb3cuICovCisgIGJvb2wgcGh5c19jdXJzb3Jfb25fcCA9IHctPnBoeXNf Y3Vyc29yX29uX3A7CisgIGJvb2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gZ2x5cGhfcm93LT5jdXJz b3JfaW5fZnJpbmdlX3A7CisgIGJvb2wgcmV2ZXJzZWRfcCA9IGdseXBoX3Jvdy0+cmV2ZXJzZWRf cDsKKyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX3ggPSB3LT5waHlzX2N1cnNvci54OworICBwdHJk aWZmX3QgcGh5c19jdXJzb3JfeSA9IHctPnBoeXNfY3Vyc29yLnk7CisgIHB0cmRpZmZfdCBwaHlz X2N1cnNvcl9ocG9zID0gdy0+cGh5c19jdXJzb3IuaHBvczsKKyAgcHRyZGlmZl90IHBoeXNfY3Vy c29yX3Zwb3MgPSB3LT5waHlzX2N1cnNvci52cG9zOworICBwdHJkaWZmX3QgcGh5c19jdXJzb3Jf YXNjZW50ID0gdy0+cGh5c19jdXJzb3JfYXNjZW50OworICBwdHJkaWZmX3QgcGh5c19jdXJzb3Jf aGVpZ2h0ID0gdy0+cGh5c19jdXJzb3JfaGVpZ2h0OworICBwdHJkaWZmX3QgcGh5c19jdXJzb3Jf d2lkdGggPSB3LT5waHlzX2N1cnNvcl93aWR0aDsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBw aHlzX2N1cnNvcl90eXBlID0gdy0+cGh5c19jdXJzb3JfdHlwZTsKKyAgLyogSGlqYWNrIHctPnBo eXNfY3Vyc29yLiAqLworICB3LT5waHlzX2N1cnNvci54ID0geDsKKyAgdy0+cGh5c19jdXJzb3Iu eSA9IHk7CisgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSBocG9zOworICB3LT5waHlzX2N1cnNvci52 cG9zID0gdnBvczsKKyAgdy0+cGh5c19jdXJzb3JfdHlwZSA9IGN1cnNvcl90eXBlOworICB3LT5w aHlzX2N1cnNvcl9hc2NlbnQgPSBnbHlwaF9yb3ctPmFzY2VudDsKKyAgdy0+cGh5c19jdXJzb3Jf aGVpZ2h0ID0gZ2x5cGhfcm93LT5oZWlnaHQ7CisgIHctPnBoeXNfY3Vyc29yX3dpZHRoID0gY3Vy c29yX3dpZHRoOworICBzdHJ1Y3QgZ2x5cGggKmZha2VfcGh5c19jdXJzb3JfZ2x5cGggPSBnZXRf cGh5c19jdXJzb3JfZ2x5cGggKHcpOworICBpZiAoZmFrZV9waHlzX2N1cnNvcl9nbHlwaCAhPSBO VUxMKQorICAgIHsKKyAgICAgIGdldF9waHlzX2N1cnNvcl9nZW9tZXRyeSAodywgZ2x5cGhfcm93 LCBzY3JhdGNoX2dseXBocywgZngsIGZ5LCBoKTsKKyAgICAgIGlmIChjdXJzb3JfdHlwZSA9PSBI QkFSX0NVUlNPUikKKyAgICAgICAgeworICAgICAgICAgIGN1cnNvcl9oZWlnaHQgPSAoY3Vyc29y X3dpZHRoIDwgMSkgPyBscmludCAoMC4yNSAqICpoKSA6IGN1cnNvcl93aWR0aDsKKyAgICAgICAg ICBpZiAoY3Vyc29yX2hlaWdodCA+IGdseXBoX3Jvdy0+aGVpZ2h0KQorICAgICAgICAgICAgY3Vy c29yX2hlaWdodCA9IGdseXBoX3Jvdy0+aGVpZ2h0OworICAgICAgICAgIGlmICgqaCA+IGN1cnNv cl9oZWlnaHQpCisgICAgICAgICAgICAqZnkgKz0gKmggLSBjdXJzb3JfaGVpZ2h0OworICAgICAg ICAgICpoID0gY3Vyc29yX2hlaWdodDsKKyAgICAgICAgfQorICAgIH0KKyAgLyogUmVzdG9yZSB0 aGUgcHJldmlvdXMgdmFsdWVzIGZvciB3LT5waHlzX2N1cnNvciBhbmQgZ2x5cGhfcm93LiAqLwor ICB3LT5waHlzX2N1cnNvcl9vbl9wID0gcGh5c19jdXJzb3Jfb25fcDsKKyAgdy0+cGh5c19jdXJz b3IueCA9IHBoeXNfY3Vyc29yX3g7CisgIHctPnBoeXNfY3Vyc29yLnkgPSBwaHlzX2N1cnNvcl95 OworICB3LT5waHlzX2N1cnNvci5ocG9zID0gcGh5c19jdXJzb3JfaHBvczsKKyAgdy0+cGh5c19j dXJzb3IudnBvcyA9IHBoeXNfY3Vyc29yX3Zwb3M7CisgIHctPnBoeXNfY3Vyc29yX3R5cGUgPSBw aHlzX2N1cnNvcl90eXBlOworICBnbHlwaF9yb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9IGN1cnNv cl9pbl9mcmluZ2VfcDsKKyAgZ2x5cGhfcm93LT5yZXZlcnNlZF9wID0gcmV2ZXJzZWRfcDsKKyAg dy0+cGh5c19jdXJzb3JfYXNjZW50ID0gcGh5c19jdXJzb3JfYXNjZW50OworICB3LT5waHlzX2N1 cnNvcl9oZWlnaHQgPSBwaHlzX2N1cnNvcl9oZWlnaHQ7CisgIHctPnBoeXNfY3Vyc29yX3dpZHRo ID0gcGh5c19jdXJzb3Jfd2lkdGg7Cit9CisKKy8qIFJldHVybiB0aGUgc3RhcnQgb3IgZW5kIHBv c2l0aW9uIG9mIHRoZSByZWdpb24uCisgICBCRUdJTk5JTkdQIG1lYW5zIHJldHVybiB0aGUgc3Rh cnQuCisgICBJZiB0aGVyZSBpcyBubyByZWdpb24gYWN0aXZlLCBzaWduYWwgYW4gZXJyb3IuCisg ICBFWEFNUExFIChyZWdpb24tYmVnaW5uaW5nKTogIHJlZ2lvbl9saW1pdCAoMSkKKyAgIEVYQU1Q TEUgKHJlZ2lvbi1lbmQpOiAgcmVnaW9uX2xpbWl0ICgwKSAqLworCitzdGF0aWMgTGlzcF9PYmpl Y3QKK21jX3JlZ2lvbl9saW1pdCAoYm9vbCBiZWdpbm5pbmdwKQoreworICBMaXNwX09iamVjdCBt OworICBpZiAoIU5JTFAgKFZ0cmFuc2llbnRfbWFya19tb2RlKQorICAgICAgJiYgTklMUCAoVm1h cmtfZXZlbl9pZl9pbmFjdGl2ZSkKKyAgICAgICYmIE5JTFAgKEJWQVIgKGN1cnJlbnRfYnVmZmVy LCBtYXJrX2FjdGl2ZSkpKQorICAgIHJldHVybiBRbmlsOworICBtID0gRm1hcmtlcl9wb3NpdGlv biAoQlZBUiAoY3VycmVudF9idWZmZXIsIG1hcmspKTsKKyAgaWYgKE5JTFAgKG0pKQorICAgIHJl dHVybiBRbmlsOworICAvKiBTZWUgYHJlZ2lvbi1hY3RpdmUtcCcgYW5kIGByZWRpc3BsYXktLXVw ZGF0ZS1yZWdpb24taGlnaGxpZ2h0Jy4gKi8KKyAgaWYgKCFOSUxQIChWdHJhbnNpZW50X21hcmtf bW9kZSkKKyAgICAgICYmICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwgbWFya19hY3RpdmUp KQorICAgICAgJiYgIU5JTFAgKG0pKQorICAgIHJldHVybiBtYWtlX2ZpeG51bSAoKFBUIDwgWEZJ WE5BVCAobSkpID09IGJlZ2lubmluZ3AKKyAgICAgICAgICAgICAgICAgICAgICAgID8gUFQKKyAg ICAgICAgICAgICAgICAgICAgICAgIDogY2xpcF90b19ib3VuZHMgKEJFR1YsIFhGSVhOQVQgKG0p LCBaVikpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gUW5pbDsKK30KKworc3RhdGljIHZv aWQKK21jX21vdmVfaXQgKHN0cnVjdCBpdCAqaXQsIHB0cmRpZmZfdCBwb3NpbnQsIGVudW0gdGV4 dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRo LCBMaXNwX09iamVjdCBmb3JlZ3JvdW5kLCBib29sIGFjdGl2ZV9jdXJzb3JfcCwKKyAgICAgICAg ICAgIGVudW0gdHlwZV9vZl9hY3Rpb24gYWN0aW9uX3R5cGUsIExpc3BfT2JqZWN0ICpyZXN1bHQp Cit7CisgIGludCBvcG9pbnRfeCA9IGl0LT53LT5vdXRwdXRfY3Vyc29yLng7CisgIGludCBvcG9p bnRfeSA9IGl0LT53LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBvcyA9IGl0LT53 LT5vdXRwdXRfY3Vyc29yLmhwb3M7CisgIGludCBvcG9pbnRfdnBvcyA9IGl0LT53LT5vdXRwdXRf Y3Vyc29yLnZwb3M7CisgIGVudW0gbW92ZV9pdF9yZXN1bHQgcmMgPSBNT1ZFX1hfUkVBQ0hFRDsK KyAgTGlzcF9PYmplY3QgYnVmID0gaXQtPnctPmNvbnRlbnRzOworICBib29sIGF1dG9faHNjcm9s bF9tb2RlX3AgPSBFUSAoRmJ1ZmZlcl9sb2NhbF92YWx1ZSAoUWF1dG9faHNjcm9sbF9tb2RlLCBi dWYpLCBRY3VycmVudF9saW5lKTsKKyAgYm9vbCBoc2NsX3RlbXBvcmFyeV9wID0gKCFpdC0+dy0+ c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9f aHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Ny b2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPnctPm1pbl9oc2Nyb2xs ID09IDApOworICBib29sIGhzY2xfcGVybWFuZW50X3AgPSAoIWl0LT53LT5zdXNwZW5kX2F1dG9f aHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVf cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPnctPmhzY3JvbGwgPiAwCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+dy0+bWluX2hzY3JvbGwgPiAwCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBpdC0+dy0+bWluX2hzY3JvbGwgIT0gaXQtPnctPmhzY3Jv bGwpOworICBib29sIG1jX3N0ZGVycl9wID0gTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIG1j X3N0ZGVycikpOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURUSCAo aXQtPmYpOworICBpbnQgdGV4dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAoaXQtPncs IFRFWFRfQVJFQSk7CisgIGJvb2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gb3BvaW50X3ggKyBmcmFt ZV9jaGFyX3dpZHRoID49IHRleHRfYXJlYV93aWR0aDsKKyAgaW50IGhzY2xfZmlyc3RfaHBvcyA9 IHdpbmRvd19oc2Nyb2xsX2xpbWl0ZWQgKGl0LT53LCBpdC0+Zik7CisgIGludCBoZWFkZXJfbGlu ZV9oZWlnaHQgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUIChpdC0+dyk7CisgIGludCBjb3Vu dCA9IDA7CisgIGludCB2cG9zID0gMDsKKyAgaW50IG5ld194ID0gMDsKKyAgLyogY3VycmVudF94 ICovCisgIGludCBhbnRlX3ByaW9yX3ByZXZpb3VzX2l0X2N1cnJlbnRfeCA9IDA7CisgIGludCBw cmlvcl9wcmV2aW91c19pdF9jdXJyZW50X3ggPSAwOworICBpbnQgcHJldmlvdXNfaXRfY3VycmVu dF94ID0gMDsKKyAgLyogaHBvcyAqLworICBpbnQgYW50ZV9wcmlvcl9wcmV2aW91c19pdF9ocG9z ID0gMDsKKyAgaW50IHByaW9yX3ByZXZpb3VzX2l0X2hwb3MgPSAwOworICBpbnQgcHJldmlvdXNf aXRfaHBvcyA9IDA7CisgIC8qIHJlbGF0aXZlX3ggKi8KKyAgaW50IGFudGVfcHJpb3JfcHJldmlv dXNfcmVsYXRpdmVfeCA9IDA7CisgIGludCBwcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94ID0gMDsK KyAgaW50IHByZXZpb3VzX3JlbGF0aXZlX3ggPSAwOworICBpbnQgcmVsYXRpdmVfeCA9IDA7Cisg IC8qIGZldGNoX2J5dGUgKi8KKyAgaW50IGFudGVfcHJpb3JfcHJldmlvdXNfZmV0Y2hfYnl0ZSA9 IDA7CisgIGludCBwcmlvcl9wcmV2aW91c19mZXRjaF9ieXRlID0gMDsKKyAgaW50IHByZXZpb3Vz X2ZldGNoX2J5dGUgPSAwOworICAvKiBjaGFyYWN0ZXIgKi8KKyAgaW50IGFudGVfcHJpb3JfcHJl dmlvdXNfY2hhcmFjdGVyID0gMDsKKyAgaW50IHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9IDA7 CisgIGludCBwcmV2aW91c19jaGFyYWN0ZXIgPSAwOworICAvKiBmYWNlX2lkICovCisgIGludCBh bnRlX3ByaW9yX3ByZXZpb3VzX2ZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgIGludCBwcmlv cl9wcmV2aW91c19mYWNlX2lkID0gREVGQVVMVF9GQUNFX0lEOworICBpbnQgcHJldmlvdXNfZmFj ZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgLyogcHJldmlvdXNfaHBvcyAqLworICBpbnQgYW50 ZV9wcmlvcl9wcmV2aW91c19ocG9zID0gMDsKKyAgaW50IHByaW9yX3ByZXZpb3VzX2hwb3MgPSAw OworICBpbnQgcHJldmlvdXNfaHBvcyA9IDA7CisgIC8qIHJlZ2lvbiAqLworICBMaXNwX09iamVj dCByZWdpb25fbGltaXRfdHJ1ZSA9IG1jX3JlZ2lvbl9saW1pdCAodHJ1ZSk7CisgIHB0cmRpZmZf dCByZWdpb25fYmVnaW5uaW5nID0gKCFOSUxQIChyZWdpb25fbGltaXRfdHJ1ZSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyBYRklYTlVNIChyZWdpb25fbGltaXRfdHJ1ZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgIExpc3BfT2JqZWN0IHJlZ2lvbl9s aW1pdF9mYWxzZSA9IG1jX3JlZ2lvbl9saW1pdCAoZmFsc2UpOworICBwdHJkaWZmX3QgcmVnaW9u X2VuZCA9ICghTklMUCAocmVnaW9uX2xpbWl0X2ZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICA/IFhGSVhOVU0gKHJlZ2lvbl9saW1pdF9mYWxzZSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICA6IDA7CisgIGVudW0gZmFjZV9pZCByZWdpb25fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9m YWNlIChpdC0+dywgaXQtPmYsIGludGVybiAoInJlZ2lvbiIpLCB0cnVlKTsKKyAgc3RydWN0IGds eXBoICpyZWFsX3BoeXNfY3Vyc29yX2dseXBoID0gZ2V0X3BoeXNfY3Vyc29yX2dseXBoIChpdC0+ dyk7CisgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKHJlZ2lvbl9iZWdpbm5pbmcgIT0gcmVnaW9u X2VuZCk7CisgIGJvb2wgZmluYWxfbG9vcF9wID0gZmFsc2U7CisgIGJvb2wgaXNzdWVfMzE3MTZf cCA9IGZhbHNlOworICBpbnQgaHNjbF94ID0gMDsKKyAgYm9vbCBscHdfcmVhY2hlZF9wID0gZmFs c2U7CisgIGJvb2wgZ3JlZW5fbGlnaHRfcCA9IGZhbHNlOworICBib29sIHRhYl9pbnZpc2libGVf cCA9IGZhbHNlOworICBib29sIHJlYWxfZmFrZV9jdXJzb3JfcCA9IGZhbHNlOworICB3aGlsZSAo IWZpbmFsX2xvb3BfcCkKKyAgICB7CisgICAgICBjb3VudCArPSAxOworICAgICAgaWYgKGhlYWRl cl9saW5lX2hlaWdodCA+IDApCisgICAgICAgIHZwb3MgPSBpdC0+dnBvcyArIDE7CisgICAgICAg IGVsc2UKKyAgICAgICAgICB2cG9zID0gaXQtPnZwb3M7CisgICAgICAvKiBUZW1wb3JhcnkgaG9y aXpvbnRhbCBzY3JvbGxpbmcgb2YgX29ubHlfIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICBUaGlz IHdhcyBkaWZmaWN1bHQgdG8gZ2V0IHJpZ2h0LCBzbyBiZSBjYXJlZnVsIGlmIGV2ZXIgY2hhbmdp bmcgaXQuCisgICAgICBUaGUgcmVhc29uIGl0IGlzIGRpZmZpY3VsdCB0byBnZXQgcmlnaHQgaXMg YmVjYXVzZSBpbiBhIHZlcnRpY2FsCisgICAgICBydWxlciBzaXR1YXRpb24sIHdlIHN0b3Agd2hl biBgcmVsYXRpdmVfeGAgZXF1YWxzIGBvcG9pbnRfeGAgYW5kIHRoZQorICAgICAgbGF0dGVyIGlz IG9mIGNvdXJzZSBhbHdheXMgY29ycmVjdCwgYnV0IHRoZSBIUE9TIHdpbGwgc29tZXRpbWVzIGJl CisgICAgICB3cm9uZyBpZiBgcmVsYXRpdmVfeGAgYW5kIGBvcG9pbnRfeGAgYXJlIG91dCBvZiBz eW5jLiAqLworICAgICAgaWYgKG5ld194ID4gMAorICAgICAgICAgICYmIGhzY2xfcGVybWFuZW50 X3ApCisgICAgICAgIHJlbGF0aXZlX3ggPSBuZXdfeCAtIChoc2NsX2ZpcnN0X2hwb3MgKiBmcmFt ZV9jaGFyX3dpZHRoKTsKKyAgICAgICAgZWxzZSBpZiAobmV3X3ggPiAwCisgICAgICAgICAgICAg ICAgICYmIGhzY2xfdGVtcG9yYXJ5X3AKKyAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0g aXQtPmN1cnJlbnRfeQorICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB2cG9zKQor ICAgICAgICAgIHJlbGF0aXZlX3ggPSBuZXdfeCAtIChoc2NsX2ZpcnN0X2hwb3MgKiBmcmFtZV9j aGFyX3dpZHRoKTsKKyAgICAgICAgICBlbHNlIGlmIChuZXdfeCA+IDApCisgICAgICAgICAgICBy ZWxhdGl2ZV94ID0gbmV3X3ggLSBpdC0+Zmlyc3RfdmlzaWJsZV94OworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICByZWxhdGl2ZV94ID0gMDsKKyAgICAgIC8qIFNlZSB0aGUgZXhwbGFu YXRpb24gYnkgRWxpIFouIGFzIHRvIGlzc3VlICMzMTcxNi4gIEhvcml6b250YWwgc2Nyb2xsaW5n CisgICAgICAob2YgYWxsIGxpbmVzKSBpcyBhY3RpdmUuICBUaGUgYmVnaW5uaW5nIG9mIHRoZSBU QUIgU1RSRVRDSCBsaWVzIGJlZm9yZQorICAgICAgaXQtPmZpcnN0X3Zpc2libGVfeCArIGl0LT5s bnVtX3BpeGVsX3dpZHRoOyBhbmQsIHRoZSBuZXh0IGRpc3BsYXkgZWxlbWVudCBpcworICAgICAg c3Vic2VxdWVudCB0aGVyZXRvLgorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICAgICAgNy4gIFRBQiBTVFJFVENICisgICAgICAgICAgaXQtPmMgKDkpCisgICAgICAgICAg Y2hhciAoCSkKKyAgICAgICAgICBpdC0+dy0+aHNjcm9sbCAoNCkKKyAgICAgICAgICBoc2NsX3Rl bXBvcmFyeV9wIChmYWxzZSkKKyAgICAgICAgICBpdC0+aHBvcyAoMCkKKyAgICAgICAgICBpdC0+ Y3VycmVudF94ICgxMSkKKyAgICAgICAgICBuZXdfeCAoNzcpCisgICAgICAgICAgZm9udF9zcGFj ZV93aWR0aCAoMTEpCisgICAgICAgICAgaXQtPmxudW1fcGl4ZWxfd2lkdGggKDQ0KQorICAgICAg ICAgIHJlbGF0aXZlX3ggKDMzKQorICAgICAgICAgIHJjIChNT1ZFX1hfUkVBQ0hFRCkKKyAgICAg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIDguICBURVhUIC0tIFRIRSBG VU4gU1RBUlRTIEhFUkUKKyAgICAgICAgICBpdC0+YyAoNzIpCisgICAgICAgICAgY2hhciAoSCkK KyAgICAgICAgICBpdC0+dy0+aHNjcm9sbCAoNCkKKyAgICAgICAgICBoc2NsX3RlbXBvcmFyeV9w IChmYWxzZSkKKyAgICAgICAgICBpdC0+aHBvcyAoNSkKKyAgICAgICAgICBpdC0+Y3VycmVudF94 ICgxMzIpCisgICAgICAgICAgbmV3X3ggKDg4KQorICAgICAgICAgIGZvbnRfc3BhY2Vfd2lkdGgg KDExKQorICAgICAgICAgIGl0LT5sbnVtX3BpeGVsX3dpZHRoICg0NCkKKyAgICAgICAgICByZWxh dGl2ZV94ICg0NCkKKyAgICAgICAgICByYyAoTU9WRV9YX1JFQUNIRUQpCisgICAgICA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICA3LiAgVEFCIFNUUkVUQ0gKKyAgICAgICAg ICBpdC0+YyAoOSkKKyAgICAgICAgICBjaGFyICgJKQorICAgICAgICAgIGl0LT53LT5oc2Nyb2xs ICgyKQorICAgICAgICAgIGhzY2xfdGVtcG9yYXJ5X3AgKGZhbHNlKQorICAgICAgICAgIGl0LT5o cG9zICgwKQorICAgICAgICAgIGl0LT5jdXJyZW50X3ggKDExKQorICAgICAgICAgIG5ld194ICg3 NykKKyAgICAgICAgICBmb250X3NwYWNlX3dpZHRoICgxMSkKKyAgICAgICAgICBpdC0+bG51bV9w aXhlbF93aWR0aCAoNDQpCisgICAgICAgICAgcmVsYXRpdmVfeCAoNTUpCisgICAgICAgICAgcmMg KE1PVkVfWF9SRUFDSEVEKQorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgICAgOC4gIFRFWFQKKyAgICAgICAgICBpdC0+YyAoNzIpCisgICAgICAgICAgY2hhciAoSCkK KyAgICAgICAgICBpdC0+dy0+aHNjcm9sbCAoMikKKyAgICAgICAgICBoc2NsX3RlbXBvcmFyeV9w IChmYWxzZSkKKyAgICAgICAgICBpdC0+aHBvcyAoNSkKKyAgICAgICAgICBpdC0+Y3VycmVudF94 ICgxMzIpCisgICAgICAgICAgbmV3X3ggKDg4KQorICAgICAgICAgIGZvbnRfc3BhY2Vfd2lkdGgg KDExKQorICAgICAgICAgIGl0LT5sbnVtX3BpeGVsX3dpZHRoICg0NCkKKyAgICAgICAgICByZWxh dGl2ZV94ICg2NikKKyAgICAgICAgICByYyAoTU9WRV9YX1JFQUNIRUQpICovCisgICAgICBpc3N1 ZV8zMTcxNl9wID0gKCFoc2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAgICAgICAgICYm ICFoc2NsX3Blcm1hbmVudF9wCisgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Ny b2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19ocG9zID09 IDAKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcK KyAgICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPmhwb3MgPiBpdC0+bG51bV9waXhlbF93aWR0 aCAvIGZyYW1lX2NoYXJfd2lkdGgpOworICAgICAgaHNjbF94ID0gKGhzY2xfdGVtcG9yYXJ5X3AK KyAgICAgICAgICAgICAgICB8fCBoc2NsX3Blcm1hbmVudF9wKQorICAgICAgICAgICAgICAgID8g aXQtPmN1cnJlbnRfeCAtIChoc2NsX2ZpcnN0X2hwb3MgKiBmcmFtZV9jaGFyX3dpZHRoKQorICAg ICAgICAgICAgICAgIDogaXQtPmN1cnJlbnRfeCAtIGl0LT5maXJzdF92aXNpYmxlX3g7CisgICAg ICBmaW5hbF9sb29wX3AgPSAoSVRfQ0hBUlBPUyAoKml0KSA9PSBaVgorICAgICAgICAgICAgICAg ICAgICAgIHx8IChGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIHJlbGF0aXZlX3ggPT0gaXQtPmN1cnJlbnRfeAorICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBpdC0+YyAhPSAwKQorICAgICAgICAgICAgICAgICAgICAg IHx8IHJjID09IE1PVkVfTElORV9DT05USU5VRUQKKyAgICAgICAgICAgICAgICAgICAgICB8fCAo cmMgPT0gTU9WRV9MSU5FX1RSVU5DQVRFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBy ZWxhdGl2ZV94ID4gdGV4dF9hcmVhX3dpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgPyB0 cnVlCisgICAgICAgICAgICAgICAgICAgICAvKiBJVCBtYXkgbm90IHN0b3AgYXQgZXZlcnkgQ0hB UlBPUyBpZiBjb21wb3NpdGUgY2hhcmFjdGVycyBleGlzdC4gKi8KKyAgICAgICAgICAgICAgICAg ICAgIDogKGFjdGlvbl90eXBlID09IE1VTFRJUExFX0NVUlNPUlMKKyAgICAgICAgICAgICAgICAg ICAgICAgICYmIGl0LT5jdXJyZW50X3ggPiBwcmV2aW91c19pdF9jdXJyZW50X3gKKyAgICAgICAg ICAgICAgICAgICAgICAgICYmIChJVF9DSEFSUE9TICgqaXQpID4gcG9zaW50CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfHwgKElUX0NIQVJQT1MgKCppdCkgPT0gWlYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgcG9zaW50ID09IFpWKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8fCAocmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwb3NpbnQgPT0gSVRfQ0hBUlBPUyAoKml0 KSkpKQorICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUKKyAgICAgICAgICAgICAgICAgICAg IDogKCFoc2NsX3RlbXBvcmFyeV9wICYmICFoc2NsX3Blcm1hbmVudF9wCisgICAgICAgICAgICAg ICAgICAgICAgICAmJiBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisgICAg ICAgICAgICAgICAgICAgICAgICAmJiBpdC0+YyAhPSAwCisgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXZSBrZWVwIGdvaW5nIHVudGlsIGByZWxhdGl2ZV94YCBjYXRjaGVzIHVwIHdpdGgKKyAg ICAgICAgICAgICAgICAgICAgICAgIGBpdC0+Y3VycmVudF94YCBmb3IgYSBzaXR1YXRpb24gc3Vj aCBhcyBhIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgb25seSBhIHRh YiBmb2xsZWQgYnkgYSBuZXcgbGluZTsgZS5nLiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlz c3VlXzMxNzE2X3AgZm9sbG93ZWQgYnkgYSBHaG9zdCBvZiBDaHJpc3RtYXMgZnV0dXJlLgorICAg ICAgICAgICAgICAgICAgICAgICAgV2UgdXNlID49IGJlY2F1c2UgdGhlcmUgaXMgbm8gZ3VhcmFu dGVlIHRoYXQgYWxsIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIHdpbGwg YmUgZXhhY3RseSBgZm9udF9jaGFyX3dpZHRoJy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICYmIChyZWxhdGl2ZV94ID49IGl0LT5jdXJyZW50X3ggLSBpdC0+Zmlyc3RfdmlzaWJsZV94Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVybWFuZW50bHkgaC1zY3JvbGxlZCBhbmQg b25seSBhIG5ldyBsaW5lLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGl0LT5j dXJyZW50X3ggPT0gMCkpCisgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAg ICAgICAgICAgICAgOiAoIWhzY2xfdGVtcG9yYXJ5X3AgJiYgIWhzY2xfcGVybWFuZW50X3AKKyAg ICAgICAgICAgICAgICAgICAgICAgICYmIGhzY2xfeCArIGZyYW1lX2NoYXJfd2lkdGggPj0gdGV4 dF9hcmVhX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUKKyAgICAgICAgICAg ICAgICAgICAgIDogKCFoc2NsX3RlbXBvcmFyeV9wICYmICFoc2NsX3Blcm1hbmVudF9wCisgICAg ICAgICAgICAgICAgICAgICAgICAmJiByYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAg ICAgICAgICAgICAgICAgICA/IHRydWUKKyAgICAgICAgICAgICAgICAgICAgIDogKChoc2NsX3Rl bXBvcmFyeV9wIHx8IGhzY2xfcGVybWFuZW50X3ApCisgICAgICAgICAgICAgICAgICAgICAgICAm JiBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAg ICAgICAgICAmJiBpdC0+YyAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBrZWVw IGdvaW5nIHVudGlsIGByZWxhdGl2ZV94YCBjYXRjaGVzIHVwIHdpdGgKKyAgICAgICAgICAgICAg ICAgICAgICAgIGBpdC0+Y3VycmVudF94YCBmb3IgYSBzaXR1YXRpb24gc3VjaCBhcyBhIGxpbmUK KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgb25seSBhIHRhYiBmb2xsb3dlZCBi eSBhIG5ldyBsaW5lOyBlLmcuLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVfMzE3MTZf cCBmb2xsb3dlZCBieSBhIEdob3N0IG9mIENocmlzdG1hcyBmdXR1cmUuCisgICAgICAgICAgICAg ICAgICAgICAgICBXZSB1c2UgPj0gYmVjYXVzZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBh bGwgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgd2lsbCBiZSBleGFjdGx5 IGBmb250X2NoYXJfd2lkdGgnLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRp dmVfeCA+PSBpdC0+Y3VycmVudF94IC0gKGhzY2xfZmlyc3RfaHBvcyAqIGZyYW1lX2NoYXJfd2lk dGgpKQorICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUKKyAgICAgICAgICAgICAgICAgICAg IDogKChoc2NsX3RlbXBvcmFyeV9wIHx8IGhzY2xfcGVybWFuZW50X3ApCisgICAgICAgICAgICAg ICAgICAgICAgICAmJiAocmMgPT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8fCByYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVECisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfHwgaHNjbF94ICsgZnJhbWVfY2hhcl93aWR0aCA+PSB0ZXh0X2FyZWFf d2lkdGgpKQorICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUKKyAgICAgICAgICAgICAgICAg ICAgIDogKElUX0NIQVJQT1MgKCppdCkgPT0gWlYpCisgICAgICAgICAgICAgICAgICAgICAgID8g dHJ1ZQorICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTsKKyAgICAgIGxwd19yZWFjaGVkX3Ag PSAocmVsYXRpdmVfeCA+PSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAg ICAgICB8fCBpc3N1ZV8zMTcxNl9wKTsKKyAgICAgIGdyZWVuX2xpZ2h0X3AgPSAoaXQtPmN1cnJl bnRfeCA+IHByZXZpb3VzX2l0X2N1cnJlbnRfeAorICAgICAgICAgICAgICAgICAgICAgICB8fCAo TklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgZmluYWxfbG9vcF9wKSkgPyB0cnVlIDogZmFsc2U7CisgICAgICByZWFsX2Zha2VfY3Vyc29y X3AgPSAoaXNzdWVfMzE3MTZfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEZFVENI X0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19ocG9zID09IDAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA9PSBpdC0+bG51bV9waXhlbF93aWR0aAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF9ocG9zID09IGl0LT5sbnVtX3BpeGVs X3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IG9wb2ludF95ID09IGl0LT5jdXJyZW50X3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBvcG9pbnRfdnBvcyA9PSB2cG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0 cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChhY3Rpb25fdHlwZSA9PSBWRVJUSUNB TF9SVUxFUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0gaXQt PmN1cnJlbnRfeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3Mg PT0gdnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAob3BvaW50X3ggPT0gcHJldmlvdXNfcmVsYXRpdmVfeAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X2hwb3MgPT0gcHJldmlvdXNfaHBv cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0gaXQtPmN1cnJl bnRfeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0gdnBv cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBFLmcuLCBQVCBpcyBvbiBhIHRhYiB0byB0aGUgaW1tZWRpYXRlIHJpZ2h0 IG9mIGxpbmUgbnVtYmVycyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoRkVUQ0hf QllURSAoSVRfQllURVBPUyAoKml0KSkgIT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94ID4gb3BvaW50X3gKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID09IHByZXZpb3VzX2l0X2N1cnJl bnRfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X2hwb3MgPT0gaXQt PmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBpdC0+bG51bV9waXhlbF93aWR0aCA+IDAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIG9wb2ludF95ID09IGl0LT5jdXJyZW50X3kKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIG9wb2ludF92cG9zID09IHZwb3MpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRS5nLiwg UFQgaXMgb24gYSB0YWIgdG8gdGhlIGltbWVkaWF0ZSByaWdodCBvZiBsaW5lIG51bWJlcnMgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCpp dCkpICE9ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX3Jl bGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgb3BvaW50X3ggPT0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIG9wb2ludF9ocG9zID09IGl0LT5sbnVtX3BpeGVsX3dpZHRoIC8g ZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlv dXNfaHBvcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+bG51bV9w aXhlbF93aWR0aCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95 ID09IGl0LT5jdXJyZW50X3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2lu dF92cG9zID09IHZwb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGZpcnN0IGxvb3AgaXMgYSBmaW5hbF9sb29w X3Agc2l0dWF0aW9uLiAgVGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFyZSBzaXR1 YXRpb24gd2FzIG9ic2VydmVkIHdoZW4gYHRydW5jYXRlLWxpbmVzJyB3YXMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5vbi1uaWwuICBIb3dldmVyLCB0aGlzIHNpdHVhdGlvbiBpcyBzb21l d2hhdCByYXJlLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoRkVUQ0hfQllURSAo SVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgaXQtPmMgPT0gMTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT5jdXJy ZW50X3ggPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPmhwb3MgPT0g MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRpdmVfeCA9PSAwCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94ID09IDAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5ld194ID09IDAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID09IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeSA9PSBpdC0+Y3VycmVudF95Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB2cG9zKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5ldyBsaW5lIGlzIHRvIHRoZSBpbW1lZGlhdGUgcmlnaHQgb2YgdGhlIGxpbmUgbnVt YmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCB0aGUgd2hpbGUgbG9vcCBwcm9j ZWVkZWQgbnVtZXJvdXMgdGltZXMuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChG RVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF9ocG9zID09IGl0LT5sbnVt X3BpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgb3BvaW50X3ggPT0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID09IHByZXZpb3VzX2l0X2N1cnJlbnRfeAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0gaXQtPmN1cnJlbnRfeQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0gdnBvcykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IChvcG9pbnRfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94IDw9IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19pdF9jdXJyZW50X3ggPCBpdC0+ bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50 X3kgPT0gaXQtPmN1cnJlbnRfeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3Bv aW50X3Zwb3MgPT0gdnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOworICAgICAgdGFiX2ludmlzaWJsZV9w ID0gKGFjdGlvbl90eXBlICE9IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAg ICAgID8gdHJ1ZQorLyogaXQtPnctPmhzY3JvbGwgPT0gMCAmJiBoc2NsX3RlbXBvcmFyeV9wCisJ CcK2ICovCisgICAgICAgICAgICAgICAgICAgICAgICA6IChhY3Rpb25fdHlwZSA9PSBWRVJUSUNB TF9SVUxFUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPnctPmhzY3JvbGwgPiAw CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBoc2NsX3RlbXBvcmFyeV9wCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBhbnRlX3ByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAn XHQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19jaGFyYWN0 ZXIgIT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFj dGVyICE9ICdcdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElU X0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9w b2ludF94ID49IGFudGVfcHJpb3JfcHJldmlvdXNfaXRfY3VycmVudF94CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA8IHByaW9yX3ByZXZpb3VzX2l0X2N1cnJlbnRfeCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisvKiBpdC0+dy0+aHNjcm9sbCA9PSAw ICYmIGhzY2xfdGVtcG9yYXJ5X3AKKwkJwrYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDog KGFjdGlvbl90eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGhz Y2xfdGVtcG9yYXJ5X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZp b3VzX2NoYXJhY3RlciAhPSAnXHQnIC8qIMK7ICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBwcmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJworICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPj0gcHJldmlvdXNfcmVsYXRpdmVfeAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPCBpdC0+Y3VycmVudF94KQorICAgICAg ICAgICAgICAgICAgICAgICAgICA/IHRydWUKKy8qIGl0LT53LT5oc2Nyb2xsID4gMCAmJiAhaHNj bF90ZW1wb3JhcnlfcAorCQnCtiAqLworICAgICAgICAgICAgICAgICAgICAgICAgOiAoYWN0aW9u X3R5cGUgPT0gVkVSVElDQUxfUlVMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0 LT53LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWhzY2xfdGVt cG9yYXJ5X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGFudGVfcHJpb3JfcHJldmlv dXNfY2hhcmFjdGVyICE9ICdcdCcgLyogwrsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBwcmV2aW91c19mZXRjaF9ieXRlID09ICdcbicKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94IDwgcHJldmlvdXNfcmVsYXRpdmVfeCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisvKiBpdC0+dy0+aHNjcm9sbCA+IDAg JiYgIWhzY2xfdGVtcG9yYXJ5X3AKKwkJwrYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDog KGFjdGlvbl90eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFo c2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2 aW91c19jaGFyYWN0ZXIgIT0gJ1x0JyAvKiDCuyAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPD0gb3BvaW50X3gpCisgICAg ICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorLyogaXQtPnctPmhzY3JvbGwgPiAwICYmICFo c2NsX3RlbXBvcmFyeV9wCisJwrYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDogKGFjdGlv bl90eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBp dC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFoc2NsX3Rl bXBvcmFyeV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19j aGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNf ZmV0Y2hfYnl0ZSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBGRVRDSF9C WVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBvcG9pbnRfeCA+PSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dp ZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94IDwg aXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2lu dF94IDwgcmVsYXRpdmVfeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisvKiBp dC0+dy0+aHNjcm9sbCA+IDAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKwnCtiAqLworICAgICAgICAg ICAgICAgICAgICAgICAgOiAoYWN0aW9uX3R5cGUgPT0gVkVSVElDQUxfUlVMRVIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBwcmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJworICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPj0gaXQtPmxudW1fcGl4ZWxfd2lk dGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX3JlbGF0aXZl X3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg cHJldmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA8IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAg ICAgICAgICAgID8gdHJ1ZQorLyogaXQtPnctPmhzY3JvbGwgPT0gMAorCcK2ICovCisgICAgICAg ICAgICAgICAgICAgICAgICA6IChhY3Rpb25fdHlwZSA9PSBWRVJUSUNBTF9SVUxFUgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPnctPmhzY3JvbGwgPT0gMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcgLyogwrsg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2NoYXJhY3RlciA9PSAn XHQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBGRVRDSF9CWVRFIChJVF9CWVRFUE9T ICgqaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA+ PSBwcmV2aW91c19yZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9p bnRfeCA8IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorLyog aXQtPnctPmhzY3JvbGwgPiAwICYmICFoc2NsX3RlbXBvcmFyeV9wCisJCUhlbGxvCisqLworICAg ICAgICAgICAgICAgICAgICAgICAgOiAoYWN0aW9uX3R5cGUgPT0gVkVSVElDQUxfUlVMRVIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Nyb2xsID4gMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIGFudGVfcHJpb3JfcHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQn CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19jaGFyYWN0ZXIgIT0gJ1x0 JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAo Kml0KSkgIT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYW50ZV9wcmlvcl9w cmV2aW91c19ocG9zID4gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19ocG9zID4gMAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfaHBvcyA+IGl0LT5sbnVtX3BpeGVs X3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg YW50ZV9wcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94ID49IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94ID4g aXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZp b3VzX3JlbGF0aXZlX3ggPiBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgb3BvaW50X3ggPCBwcmV2aW91c19yZWxhdGl2ZV94KQorICAgICAgICAgICAg ICAgICAgICAgICAgICA/IHRydWUKKy8qIGl0LT53LT5oc2Nyb2xsID4gMCAmJiAhaHNjbF90ZW1w b3JhcnlfcAorCQlIZWxsbworKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDogKGFjdGlvbl90 eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+ dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFoc2NsX3RlbXBv cmFyeV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhbnRlX3ByaW9yX3ByZXZpb3Vz X2NoYXJhY3RlciAhPSAnXHQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9w cmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg cHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpICE9ICdcbicKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIGFudGVfcHJpb3JfcHJldmlvdXNfaHBvcyA9PSAwCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19ocG9zID4gaXQtPmxudW1fcGl4ZWxfd2lk dGggLyBmcmFtZV9jaGFyX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2 aW91c19ocG9zID4gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBhbnRlX3ByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3gg PCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJp b3JfcHJldmlvdXNfcmVsYXRpdmVfeCA+IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94ID4gaXQtPmxudW1fcGl4ZWxf d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94IDwgcHJldmlvdXNf cmVsYXRpdmVfeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisvKiBpdC0+dy0+ aHNjcm9sbCA+IDAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKwlIZWxsbworKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIDogKGFjdGlvbl90eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmICFoc2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBhbnRlX3ByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19jaGFyYWN0ZXIgIT0gJ1x0JworICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpICE9 ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGFudGVfcHJpb3JfcHJldmlvdXNf aHBvcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19o cG9zID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPiBp dC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1lX2NoYXJfd2lkdGgKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIGFudGVfcHJpb3JfcHJldmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3Bp eGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19y ZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPj0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94IDwgcHJldmlvdXNfcmVsYXRpdmVfeCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisvKiBpdC0+dy0+aHNjcm9sbCA+IDAg JiYgIWhzY2xfdGVtcG9yYXJ5X3AKKwlIZWxsbworKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IDogKGFjdGlvbl90eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYm ICFoc2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9w cmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg cHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpICE9ICdcbicKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPiBpdC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1l X2NoYXJfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3Vz X2hwb3MgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNf cmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94ID49IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA8IHByZXZpb3VzX3JlbGF0aXZlX3gp CisgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorLyogaXQtPnctPmhzY3JvbGwgPT0g MAorCUhlbGxvCisqLworICAgICAgICAgICAgICAgICAgICAgICAgOiAoYWN0aW9uX3R5cGUgPT0g VkVSVElDQUxfUlVMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Ny b2xsID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2No YXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19j aGFyYWN0ZXIgIT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllU RSAoSVRfQllURVBPUyAoKml0KSkgIT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgb3BvaW50X3ggPCBwcmV2aW91c19yZWxhdGl2ZV94KQorICAgICAgICAgICAgICAgICAgICAg ICAgICA/IHRydWUKKy8qIGl0LT53LT5oc2Nyb2xsID09IDAgJiYgYGJ1ZmZlci1kaXNwbGF5LXRh YmxlJyBpcyBuaWwuCisJCQlIZWxsbworKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDogKGFj dGlvbl90eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBpdC0+dy0+aHNjcm9sbCA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlv cl9wcmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpICE9ICdcbicKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPj0gaXQtPmxudW1fcGl4ZWxfd2lk dGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94IDwgcHJldmlvdXNfcmVs YXRpdmVfeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisgICAgICAgICAgICAg ICAgICAgICAgICA6IGZhbHNlOworICAgICAgaWYgKCFtY19zdGRlcnJfcCkKKyAgICAgICAgbWNf c3RkZXJyXzEgKGl0LCBjb3VudCwgcG9zaW50LCBuZXdfeCwKKyAgICAgICAgICAgICAgICAgICAg IG9wb2ludF94LCBvcG9pbnRfeSwgb3BvaW50X2hwb3MsIG9wb2ludF92cG9zLAorICAgICAgICAg ICAgICAgICAgICAgYW50ZV9wcmlvcl9wcmV2aW91c19pdF9jdXJyZW50X3gsIHByaW9yX3ByZXZp b3VzX2l0X2N1cnJlbnRfeCwgcHJldmlvdXNfaXRfY3VycmVudF94LAorICAgICAgICAgICAgICAg ICAgICAgYW50ZV9wcmlvcl9wcmV2aW91c19pdF9ocG9zLCBwcmlvcl9wcmV2aW91c19pdF9ocG9z LCBwcmV2aW91c19pdF9ocG9zLAorICAgICAgICAgICAgICAgICAgICAgYW50ZV9wcmlvcl9wcmV2 aW91c19yZWxhdGl2ZV94LCBwcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94LCBwcmV2aW91c19yZWxh dGl2ZV94LCByZWxhdGl2ZV94LAorICAgICAgICAgICAgICAgICAgICAgYW50ZV9wcmlvcl9wcmV2 aW91c19mZXRjaF9ieXRlLCBwcmlvcl9wcmV2aW91c19mZXRjaF9ieXRlLCBwcmV2aW91c19mZXRj aF9ieXRlLAorICAgICAgICAgICAgICAgICAgICAgYW50ZV9wcmlvcl9wcmV2aW91c19jaGFyYWN0 ZXIsIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciwgcHJldmlvdXNfY2hhcmFjdGVyLAorICAgICAg ICAgICAgICAgICAgICAgYW50ZV9wcmlvcl9wcmV2aW91c19mYWNlX2lkLCBwcmlvcl9wcmV2aW91 c19mYWNlX2lkLCBwcmV2aW91c19mYWNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgYW50ZV9w cmlvcl9wcmV2aW91c19ocG9zLCBwcmlvcl9wcmV2aW91c19ocG9zLCBwcmV2aW91c19ocG9zLAor ICAgICAgICAgICAgICAgICAgICAgZmluYWxfbG9vcF9wLCBpc3N1ZV8zMTcxNl9wLCBscHdfcmVh Y2hlZF9wLCBncmVlbl9saWdodF9wLAorICAgICAgICAgICAgICAgICAgICAgcmVhbF9mYWtlX2N1 cnNvcl9wLCB0YWJfaW52aXNpYmxlX3AsCisgICAgICAgICAgICAgICAgICAgICBoc2NsX3RlbXBv cmFyeV9wLCBoc2NsX3Blcm1hbmVudF9wLCByYywgYWN0aW9uX3R5cGUpOworICBzd2l0Y2ggKGFj dGlvbl90eXBlKQorICB7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSBDdXJzb3JzICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBNVUxUSVBMRV9D VVJTT1JTOgorICAgIHsKKyAgICAgIGlmIChmaW5hbF9sb29wX3ApCisgICAgICAgIHsKKyAgICAg ICAgICBpbnQgZmxhdm9yID0gTUNfR0xZUEg7CisgICAgICAgICAgYm9vbCBhbm9tYWx5X3AgPSAo cmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IHBvc2ludCA9PSBJVF9DSEFSUE9TICgqaXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgcHJldmlvdXNfcmVsYXRpdmVfeCArIGl0LT5waXhlbF93aWR0aCA+IHRleHRfYXJlYV93aWR0 aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggKyBm cmFtZV9jaGFyX3dpZHRoID4gdGV4dF9hcmVhX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOworICAgICAg ICAgIGludCB0ZW1wX3Zwb3MgPSAoYW5vbWFseV9wKQorICAgICAgICAgICAgICAgICAgICAgICAg ICA/IHZwb3MgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogdnBvczsKKyAgICAgICAg ICBlbnVtIGZhY2VfaWQgdGVtcF9iZ19mYWNlX2lkID0gKElUX0NIQVJQT1MgKCppdCkgPT0gcG9z aW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoSVRFUkFU T1JfQVRfRU5EX09GX0xJTkVfUCAoaXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfHwgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJykp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaXQtPmZhY2VfaWQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcmV2aW91c19mYWNl X2lkOworICAgICAgICAgIGludCB0ZW1wX3ggPSAoYW5vbWFseV9wKQorICAgICAgICAgICAgICAg ICAgICAgICA/IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgIC8q IEZha2UgY3Vyc29yIGlzIGp1c3QgdG8gdGhlIHJpZ2h0IG9mIHRoZSBsaW5lIG51bWJlcnMuICov CisgICAgICAgICAgICAgICAgICAgICAgIDogKElUX0NIQVJQT1MgKCppdCkgLSAxID09IHBvc2lu dAorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94ID4gaXQtPmxudW1fcGl4 ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVf eCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBy ZXZpb3VzX2hwb3MgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+bG51bV9w aXhlbF93aWR0aCA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcmV2aW91c19pdF9j dXJyZW50X3gKKyAgICAgICAgICAgICAgICAgICAgICAgOiAoSVRfQ0hBUlBPUyAoKml0KSAtIDEg PT0gcG9zaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyYyA9PSBNT1ZFX0xJTkVf Q09OVElOVUVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwb3NpbnQgPT0gSVRf Q0hBUlBPUyAoKml0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcmV2aW91c19yZWxh dGl2ZV94CisgICAgICAgICAgICAgICAgICAgICAgIDogKGl0LT5jdXJyZW50X3ggPT0gMAorICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+bG51bV9waXhlbF93aWR0aCA9PSAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgID8gMAorICAgICAgICAgICAgICAgICAgICAgICA6IHJlbGF0 aXZlX3g7CisgICAgICAgICAgaW50IHRlbXBfaHBvcyA9IChhbm9tYWx5X3ApCisgICAgICAgICAg ICAgICAgICAgICAgICAgID8gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRo CisgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGl0LT5jdXJyZW50X3ggPT0gMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+bG51bV9waXhlbF93aWR0aCA9PSAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGYWtlIGN1cnNvciBpcyBqdXN0IHRvIHRoZSByaWdodCBvZiB0aGUgbGluZSBudW1iZXJzLiAq LworICAgICAgICAgICAgICAgICAgICAgICAgICA6IChJVF9DSEFSUE9TICgqaXQpIC0gMSA9PSBw b3NpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRpdmVfeCA+IGl0LT5s bnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3Vz X3JlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBwcmV2aW91c19ocG9zID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgaXQtPmxudW1fcGl4ZWxfd2lkdGggPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgID8gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoCisgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEVPTCDCtiBpcyBleGFjdGx5IDJuZCB0byB0aGUgcmlnaHQgb2Yg dGhlIGxpbmUgbnVtYmVycy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoSVRfQ0hB UlBPUyAoKml0KSA9PSBwb3NpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRkVU Q0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiByZWxhdGl2ZV94ID4gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVs X3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPT0g MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+bG51bV9waXhlbF93aWR0aCA+ IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXQtPmxudW1fcGl4ZWxfd2lkdGgg LyBmcmFtZV9jaGFyX3dpZHRoKSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoSVRf Q0hBUlBPUyAoKml0KSA9PSBwb3NpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg KHBvc2ludCA9PSBaVgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgSVRFUkFU T1JfQVRfRU5EX09GX0xJTkVfUCAoaXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IHByZXZpb3VzX2hwb3MgKyAxCisgICAgICAgICAgICAgICAgICAg ICAgICAgIDogcHJldmlvdXNfaHBvczsKKyAgICAgICAgICBpZiAoIW1jX3N0ZGVycl9wKQorICAg ICAgICAgICAgbWNfc3RkZXJyXzIgKGl0LCBjb3VudCwgYWN0aW9uX3R5cGUsIHJlbGF0aXZlX3gs IHRlbXBfeCwgdGVtcF9ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfdnBvcywg Zm9yZWdyb3VuZCwgdGVtcF9iZ19mYWNlX2lkLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBmbGF2b3IpOworICAgICAgICAgIG1jX2hlbHBlciAoaXQtPncsIHRlbXBfeCwg LTEsIGl0LT5jdXJyZW50X3ksIC0xLCB0ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAg ICAgICAgICAgIC0xLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAg ICAgICAgICAgICAgICAgICAgbWNfYmdfbHNsIChpdC0+dywgdGVtcF9iZ19mYWNlX2lkKSwgYWN0 aXZlX2N1cnNvcl9wLCBmbGF2b3IsCisgICAgICAgICAgICAgICAgICAgICBwb3NpbnQsIHJlc3Vs dCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9Cisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI T1JJWk9OVEFMIFJVTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1DX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgIGlmICgoZ3JlZW5fbGlnaHRfcAorICAgICAgICAgICAv KiBQbGFjZSBhbiBNQ19HTFlQSCBvbiB0aGUgbGFzdCBzcGFjZSBvZiBhIHdyYXBwZWQgbGluZS4g Ki8KKyAgICAgICAgICAgfHwgcmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICAgICAgICAm JiAhcmVhbF9mYWtlX2N1cnNvcl9wCisgICAgICAgICAgJiYgbHB3X3JlYWNoZWRfcAorICAgICAg ICAgICYmICF0YWJfaW52aXNpYmxlX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgZmxhdm9y ID0gTUNfR0xZUEg7CisgICAgICAgICAgZW51bSBmYWNlX2lkIHRlbXBfYmdfZmFjZV9pZCA9IChy YyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/IGl0LT5mYWNlX2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogcHJldmlvdXNfZmFjZV9pZDsKKyAgICAgICAgICBpbnQgdGVtcF94ID0gKHBy ZXZpb3VzX3JlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aCkKKyAgICAgICAgICAgICAg ICAgICAgICAgID8gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAg IDogcHJldmlvdXNfcmVsYXRpdmVfeDsKKyAgICAgICAgICBwdHJkaWZmX3QgaXRfY2hhcnBvcyA9 IChyYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID8gSVRfQ0hBUlBPUyAoKml0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogSVRfQ0hBUlBPUyAoKml0KSAtIDE7CisgICAgICAgICAgaW50IHRlbXBfaHBvcyA9IChp dC0+bG51bV9waXhlbF93aWR0aCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBy ZXZpb3VzX2hwb3MgPCBpdC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1lX2NoYXJfd2lkdGgpCisg ICAgICAgICAgICAgICAgICAgICAgICAgID8gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9j aGFyX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJldmlvdXNfaHBvczsKKyAg ICAgICAgICBpbnQgdGVtcF92cG9zID0gdnBvczsKKyAgICAgICAgICBpZiAoIW1jX3N0ZGVycl9w KQorICAgICAgICAgICAgbWNfc3RkZXJyXzIgKGl0LCBjb3VudCwgYWN0aW9uX3R5cGUsIHJlbGF0 aXZlX3gsIHRlbXBfeCwgdGVtcF9ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBf dnBvcywgZm9yZWdyb3VuZCwgdGVtcF9iZ19mYWNlX2lkLCBjdXJzb3JfdHlwZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBmbGF2b3IpOworICAgICAgICAgIC8qIFJlY29yZCBzb21lIG9mIHRo ZSBjdXJyZW50IHZhbHVlcyBmb3IgdGhlIGN1cnNvciBhbmQgZ2x5cGhfcm93LiAqLworICAgICAg ICAgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdyA9ICBNQVRSSVhfUk9XIChpdC0+dy0+Y3Vy cmVudF9tYXRyaXgsIHRlbXBfdnBvcyk7CisgICAgICAgICAgaW50IGZ4LCBmeSwgaDsKKyAgICAg ICAgICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKGl0LT53LCBnbHlwaF9yb3csIHRlbXBf eCwgJmZ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfcm93 LT55LCAmZnksIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgpOworICAgICAgICAg IG1jX2hlbHBlciAoaXQtPncsIHRlbXBfeCwgLTEsIGl0LT5jdXJyZW50X3ksIGZ5LCB0ZW1wX2hw b3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgIC0xLCBjdXJzb3JfdHlwZSwgY3Vy c29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAgbWNfYmdfbHNsIChp dC0+dywgdGVtcF9iZ19mYWNlX2lkKSwgYWN0aXZlX2N1cnNvcl9wLCBmbGF2b3IsCisgICAgICAg ICAgICAgICAgICAgICBpdF9jaGFycG9zLCByZXN1bHQpOworICAgICAgICB9CisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ19HTFlQ SF9UQUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisgICAgICAvKiBGSVhNRTogIERyYXdpbmcgYSBNQ19HTFlQSCBIQkFSX0NVUlNP UiBvbiBjZXJ0YWluIGxldHRlcnMgKEEsIG0sIE0sIHcsIFcpCisgICAgICBsb2NhdGVkIHRvIHRo ZSBpbW1lZGlhdGUgcmlnaHQgb2YgYSB0YWIgc3BhY2VyLCBjYXVzZSB0aGUgTUNfR0xZUEhMRVNT CisgICAgICBIQkFSX0NVUlNPUiB0byB0aGUgaW1tZWRpYXRlIGxlZnQgdG8gYmUgZXJhc2VkLiAg VGhpcyBpcyBwcm9iYWJseSBhbgorICAgICAgb3Zlcmhhbmcgc2l0dWF0aW9uLiAgQW4gb2J2aW91 cyB3b3JrYXJvdW5kIHdvdWxkIGJlIHRvIHJlY29yZCB0aGUKKyAgICAgIGNvb3JkaW5hdGVzIGZv ciB0aGUgTUNfR0xZUEhMRVNTIGN1cnNvcnMgYW5kIHRoZW4gZHJhdyB0aGVtIGFsbCBBRlRFUiB0 aGUKKyAgICAgIE1DX0dMWVBIIGN1cnNvcnMgaGF2ZSBiZWVuIGxhaWQuICBIb3cgYWJvdXQgcHVz aGluZyBhbGwgdGhlIGNvb3JkaW5hdGVzCisgICAgICB0byB0aGUgY2FjaGUsIGFuZCB0aGVuIGV4 ZWN1dGluZyBhIHZhcmlhdGlvbiBvZiBgbWNfcmVkcmF3X2Nyb3NzaGFpcnMnCisgICAgICBbd2l0 aCBzYWlkIHZlcnNpb24gYmVpbmcgcmV3cml0dGVuXSB0byBsb29wIHR3aWNlIG92ZXIgdGhlIGxp c3QsIGZpcnN0CisgICAgICBmb3IgTUNfR0xZUEgsIGFuZCB0aGVuIGZvciBNQ19HTFlQSExFU1M/ ICovCisgICAgICBpZiAoKGdyZWVuX2xpZ2h0X3AKKyAgICAgICAgICAgJiYgbHB3X3JlYWNoZWRf cAorICAgICAgICAgICAmJiB0YWJfaW52aXNpYmxlX3ApCisgICAgICAgICAgLyogQSBzb21ld2hh dCByYXJlIHNpdHVhdGlvbiB3aGVuIHRoZXJlIGlzIGEgdmVyeSBsb25nIFNUUkVUQ0ggdGhhdAor ICAgICAgICAgIHNwYW5zIGFsbCB0aGUgd2F5IHRvIHRoZSByaWdodCB3aW5kb3cgZWRnZSwgd2hl cmUgaXQgd29yZC13cmFwcyBhbmQKKyAgICAgICAgICB0aGUgbmV4dCB3b3JkLXdyYXBwZWQgbGlu ZSBjb250YWlucyBhIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHNwYWNlIG9yCisgICAgICAgICAg YSBoYXJkIHJldHVybi4gKi8KKyAgICAgICAgICB8fCAoZmluYWxfbG9vcF9wCisgICAgICAgICAg ICAgICYmIGl0LT5jID09ICdcdCcKKyAgICAgICAgICAgICAgICYmIHJjID09IE1PVkVfTElORV9D T05USU5VRUQpKQorICAgICAgICB7CisgICAgICAgICAgaW50IGk7CisgICAgICAgICAgaW50IHRl bXBfeCA9IChpc3N1ZV8zMTcxNl9wCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcmVhbF9m YWtlX2N1cnNvcl9wCisgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94IDwgaXQt PmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hw b3MgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IGl0LT5sbnVtX3BpeGVsX3dpZHRo CisgICAgICAgICAgICAgICAgICAgICAgIDogKGlzc3VlXzMxNzE2X3AKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgcmVhbF9mYWtlX2N1cnNvcl9wCisgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHJlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBwcmV2aW91c19ocG9zID09IDApCisgICAgICAgICAgICAgICAgICAgICAg ICAgPyBpdC0+bG51bV9waXhlbF93aWR0aCArIGZyYW1lX2NoYXJfd2lkdGgKKyAgICAgICAgICAg ICAgICAgICAgICAgOiAoIXJlYWxfZmFrZV9jdXJzb3JfcAorICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiBpdC0+bG51bV9waXhlbF93aWR0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIGl0LT5jID09ICdcdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJpb3Jf cHJldmlvdXNfcmVsYXRpdmVfeCA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBy aW9yX3ByZXZpb3VzX2ZldGNoX2J5dGUgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBwcmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBwcmlvcl9wcmV2aW91c19ocG9zID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgPyAw CisgICAgICAgICAgICAgICAgICAgICAgIDogKCFyZWFsX2Zha2VfY3Vyc29yX3AKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVs X3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgID8gaXQtPmxudW1fcGl4ZWxfd2lkdGgK KyAgICAgICAgICAgICAgICAgICAgICAgOiAocmVhbF9mYWtlX2N1cnNvcl9wCisgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93 aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IGl0LT5sbnVtX3BpeGVsX3dpZHRoICsg ZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICA6IHJlYWxfZmFrZV9jdXJz b3JfcAorICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJldmlvdXNfcmVsYXRpdmVfeCArIGZy YW1lX2NoYXJfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgOiBwcmV2aW91c19yZWxhdGl2 ZV94OworICAgICAgICAgIGludCB0ZW1wX2hwb3MgPSAoaXNzdWVfMzE3MTZfcAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiYgIXJlYWxfZmFrZV9jdXJzb3JfcAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19ocG9zID09IDApCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPyBpdC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1lX2NoYXJfd2lkdGgK KyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFBPUyBpcyB0aGUgc2FtZSBhcyB3aGVuICFy ZWFsX2Zha2VfY3Vyc29yX3AgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoaXNzdWVf MzE3MTZfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWFsX2Zha2VfY3Vyc29y X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRpdmVfeCA8IGl0LT5sbnVt X3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hw b3MgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaXQtPmxudW1fcGl4ZWxf d2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGl0 LT5sbnVtX3BpeGVsX3dpZHRoID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg aXQtPmMgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2 aW91c19yZWxhdGl2ZV94ID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJp b3JfcHJldmlvdXNfZmV0Y2hfYnl0ZSA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIHByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHByaW9yX3ByZXZpb3VzX2hwb3MgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcmV2aW91c19ocG9zOworICAg ICAgICAgIGludCB0ZW1wX3Zwb3MgPSB2cG9zOworICAgICAgICAgIGludCB0ZW1wX2JnX2ZhY2Vf aWQgPSBwcmV2aW91c19mYWNlX2lkOworICAgICAgICAgIGludCBmbGF2b3IgPSBNQ19HTFlQSF9U QUI7CisgICAgICAgICAgaW50IGNvdW50ID0gKGlzc3VlXzMxNzE2X3AKKyAgICAgICAgICAgICAg ICAgICAgICAgJiYgcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAg ICAgICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg ICAgID8gKChpdC0+Y3VycmVudF94IC0gaXQtPmZpcnN0X3Zpc2libGVfeCkgLSB0ZW1wX3gpIC8g ZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgIDogKGZpbmFsX2xvb3BfcAor ICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0LT5jID09ICdcdCcKKyAgICAgICAgICAgICAg ICAgICAgICAgICAmJiByYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAgICAgICAgICAg ICAgICAgICAgPyAodGV4dF9hcmVhX3dpZHRoIC0gdGVtcF94KSAvIGZyYW1lX2NoYXJfd2lkdGgK KyAgICAgICAgICAgICAgICAgICAgICA6IChyZWxhdGl2ZV94IC0gdGVtcF94KSAvIGZyYW1lX2No YXJfd2lkdGg7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIGlmICghbWNfc3RkZXJyX3ApCisgICAgICAgICAgICAgICAg bWNfc3RkZXJyXzIgKGl0LCBjb3VudCwgYWN0aW9uX3R5cGUsIHJlbGF0aXZlX3gsIHRlbXBfeCwg dGVtcF9ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3Zwb3MsIGZvcmVn cm91bmQsIHRlbXBfYmdfZmFjZV9pZCwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZsYXZvcik7CisgICAgICAgICAgICAgIG1jX2hlbHBlciAoaXQtPncsIHRlbXBf eCwgLTEsIGl0LT5jdXJyZW50X3ksIC0xLCB0ZW1wX2hwb3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgdGVtcF92cG9zLCAtMSwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3Vu ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtY19iZ19sc2wgKGl0LT53LCB0ZW1wX2JnX2Zh Y2VfaWQpLCBhY3RpdmVfY3Vyc29yX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdm9y LCBJVF9DSEFSUE9TICgqaXQpIC0gMSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgdGVtcF94ICs9 IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIEVPTCArIEZMT0FUSU5H IEhPUklaT05UQUwgUlVMRVIgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KKyAgICAgIGlmIChmaW5hbF9sb29wX3AKKyAgICAgICAgICAmJiAoKEZFVENIX0JZ VEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAgICAgIHx8IElUX0NIQVJQ T1MgKCppdCkgPT0gWlYpCisgICAgICAgICAgICAgIHx8IChGRVRDSF9CWVRFIChJVF9CWVRFUE9T ICgqaXQpKSA9PSAnICcKKyAgICAgICAgICAgICAgICAgICYmIHJjID09IE1PVkVfTElORV9DT05U SU5VRUQpKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFdlIHdhbnQgdG8gc3RhcnQgZHJhd2lu ZyB0aGUgZmxvYXRpbmcgaG9yaXpvbnRhbCBsaW5lIGZyb20gSVQKKyAgICAgICAgICAobGluZSBm ZWVkOyBaVjsgb3Igc3BhY2Utd29yZF93cmFwKSB1bnRpbCB0aGUgcmlnaHQgZnJpbmdlLgorICAg ICAgICAgIElmIHRoZSBsaW5lIGlzIGVtcHR5IG9yIGhpZGRlbiBieSBob3Jpem9udGFsIHNjcm9s bGluZywgdGhlbiBgaXQuY3VycmVudF94YAorICAgICAgICAgIG1heSBiZSBzb21ld2hlcmUgYmVm b3JlIGBsbnVtX3BpeGVsX3dpZHRoYC4gIFRoZSByZWFsIGN1cnNvciB3aWxsIGJlIHRvIHRoZQor ICAgICAgICAgIGxlZnQgb2YgYGxudW1fcGl4ZWxfd2lkdGhgIGlmIHdlIGFyZSBob3Jpem9udGFs IHNjcm9sbGluZyBhbmQgcG9pbnQgaXMKKyAgICAgICAgICBoaWRkZW4gc29tZXdoZXJlIHRvIHRo ZSBsZWZ0IHRoZXJlb2YuICovCisgICAgICAgICAgZW51bSBmYWNlX2lkIHRlbXBfYmdfZmFjZV9p ZCA9IChyZWFsX3BoeXNfY3Vyc29yX2dseXBoID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyBERUZBVUxUX0ZBQ0VfSUQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0 KSkgPT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiByZWdpb25fZW5kID09IElUX0NIQVJQT1MgKCppdCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPmZhY2VfaWQgPT0gcmVnaW9uX2ZhY2VfaWQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBERUZBVUxUX0ZBQ0Vf SUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBJVF9DSEFSUE9T ICgqaXQpID09IFpWCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyBERUZBVUxUX0ZBQ0VfSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiAoSVRfQ0hBUlBPUyAoKml0KSA+PSByZWdpb25fZW5kCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJlZ2lvbl9iZWdpbm5pbmcgPT0gcmVnaW9uX2Vu ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGl0LT5mYWNl X2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVhbF9waHlz X2N1cnNvcl9nbHlwaC0+ZmFjZV9pZDsKKyAgICAgICAgICAvKiBBbiBlbXB0eSBuZXcgbGluZSAt LSBsb29wIGluIHByZXZpb3VzIHNlY3Rpb24gYnJva2UgaW1tZWRpYXRlbHkuICovCisgICAgICAg ICAgaW50IHRlbXBfaHBvcyA9IChyZWxhdGl2ZV94ID09IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpdC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1l X2NoYXJfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gcmVh ZGp1c3QgYmVjYXVzZSBpdCB3YXMgZG9uZSBhYm92ZS4gKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogKHJjID09IE1PVkVfTElORV9DT05USU5VRUQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID8gcHJldmlvdXNfaHBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAo cmMgPT0gTU9WRV9ORVdMSU5FX09SX0NSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiByZWFsX2Zha2VfY3Vyc29yX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIE5J TFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIHByZXZpb3VzX2hwb3MgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBw cmV2aW91c19ocG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChyZWxhdGl2ZV94IDwg aXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGl0 LT5sbnVtX3BpeGVsX3dpZHRoID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg cHJldmlvdXNfaHBvcyA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGl0LT5sbnVtX3BpeGVsX3dpZHRoIC8g ZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRU9MIMK2IGlz IGV4YWN0bHkgMm5kIHRvIHRoZSByaWdodCBvZiB0aGUgbGluZSBudW1iZXJzLiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiAoRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0g J1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRpdmVfeCA+IGl0LT5s bnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91 c19yZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgaXQtPmxudW1fcGl4ZWxfd2lkdGggPiAwKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA/IChpdC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1lX2NoYXJfd2lkdGgpICsgMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0 KSkgPT0gJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPmhwb3MgPT0g cHJldmlvdXNfaHBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwcmV2aW91c19o cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByZXZpb3VzX2hwb3MgKyAxOworICAg ICAgICAgIGludCB0ZW1wX3ggPSAocmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisg ICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC0+bG51bV9waXhlbF93aWR0aCA9PSBvcG9pbnRf eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAg ICAgICAgICAgICAgICAgICAgIDogKElUX0NIQVJQT1MgKCppdCkgPT0gWlYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgcmMgPT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgaHNjbF90ZW1wb3JhcnlfcCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICA/IHByZXZpb3VzX3JlbGF0aXZlX3gKKyAgICAgICAgICAgICAgICAgICAgICAgOiAob3Bv aW50X3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAm JiByZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgpCisgICAgICAgICAgICAgICAgICAg ICAgICAgPyBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICA6IHJl bGF0aXZlX3g7CisgICAgICAgICAgaW50IHRlbXBfdnBvcyA9IHZwb3M7CisgICAgICAgICAgaW50 IGZsYXZvciA9IE1DX0dMWVBIOworICAgICAgICAgIC8qIERvIG5vdCB1c2UgYHJlYWxfZmFrZV9j dXJzb3JfcCcgaGVyZSBiZWNhdXNlIHRoYXQgcmVsYXRlcyB0byB0aGUKKyAgICAgICAgICBgcHJl dmlvdXNfcmVsYXRpdmVfeCc7IHdoZXJlYXMsIEVPTCBpcyBgcmVsYXRpdmVfeGAgaW4gX21vc3Rf IGNhc2VzLiAqLworICAgICAgICAgIGlmIChvcG9pbnRfeCAhPSB0ZW1wX3gKKyAgICAgICAgICAg ICAgJiYgb3BvaW50X2hwb3MgIT0gdGVtcF9ocG9zCisgICAgICAgICAgICAgICYmIHJjICE9IE1P VkVfTElORV9DT05USU5VRUQKKyAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBP UyAoKml0KSkgPT0gJ1xuJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCFtY19z dGRlcnJfcCkKKyAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbkVPTDpcbiIpOwor ICAgICAgICAgICAgICBpZiAoIW1jX3N0ZGVycl9wKQorICAgICAgICAgICAgICAgIG1jX3N0ZGVy cl8yIChpdCwgY291bnQsIGFjdGlvbl90eXBlLCByZWxhdGl2ZV94LCB0ZW1wX3gsIHRlbXBfaHBv cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF92cG9zLCBmb3JlZ3JvdW5kLCB0 ZW1wX2JnX2ZhY2VfaWQsIGN1cnNvcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmbGF2b3IpOworICAgICAgICAgICAgICAvKiBSZWNvcmQgc29tZSBvZiB0aGUgY3VycmVudCB2 YWx1ZXMgZm9yIHRoZSBjdXJzb3IgYW5kIGdseXBoX3Jvdy4gKi8KKyAgICAgICAgICAgICAgc3Ry dWN0IGdseXBoX3JvdyAqZ2x5cGhfcm93ID0gIE1BVFJJWF9ST1cgKGl0LT53LT5jdXJyZW50X21h dHJpeCwgdGVtcF92cG9zKTsKKyAgICAgICAgICAgICAgaW50IGZ4LCBmeSwgaDsKKyAgICAgICAg ICAgICAgbWNfZ2V0X3BoeXNfY3Vyc29yX2dlb21ldHJ5IChpdC0+dywgZ2x5cGhfcm93LCB0ZW1w X3gsICZmeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlw aF9yb3ctPnksICZmeSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgpOwor ICAgICAgICAgICAgICBtY19oZWxwZXIgKGl0LT53LCB0ZW1wX3gsIC0xLCBpdC0+Y3VycmVudF95 LCBmeSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTEs IGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgbWNfYmdfbHNsIChpdC0+dywgdGVtcF9iZ19mYWNlX2lkKSwgYWN0aXZlX2N1cnNv cl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXZvciwgSVRfQ0hBUlBPUyAoKml0KSwg cmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoSVRfQ0hBUlBPUyAoKml0KSA9 PSBaVgorICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA9PSByZWxhdGl2ZV94KQorICAgICAgICAg ICAgdGVtcF94ICs9IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICBlbHNlIGlmIChJVF9D SEFSUE9TICgqaXQpID09IFpWCisgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA9PSBp dC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICAgJiYgaXQtPmN1cnJlbnRf eCA9PSAwKQorICAgICAgICAgICAgICB0ZW1wX3ggKz0gZnJhbWVfY2hhcl93aWR0aDsKKyAgICAg ICAgICAgICAgZWxzZSBpZiAocmMgIT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAgICAgICAgICAg ICAgICAgICAgICAmJiBJVF9DSEFSUE9TKCppdCkgIT0gWlYpCisgICAgICAgICAgICAgICAgdGVt cF94ICs9IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgaWYgKCFtY19zdGRlcnJfcAorICAg ICAgICAgICAgICAmJiB0ZW1wX3ggKyBmcmFtZV9jaGFyX3dpZHRoIDwgdGV4dF9hcmVhX3dpZHRo KQorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5GTE9BVElORyBIT1JJWk9OVEFMIFJV TEVSIC0tIFNQRUNTOiAgdGVtcF94ICglZCkgfCB0ZW1wX2hwb3MgKCVkKVxuIiwKKyAgICAgICAg ICAgICAgdGVtcF94LCB0ZW1wX2hwb3MpOworICAgICAgICAgIHdoaWxlICh0ZW1wX3ggKyBmcmFt ZV9jaGFyX3dpZHRoIDwgdGV4dF9hcmVhX3dpZHRoKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBtY19oZWxwZXIgKGl0LT53LCB0ZW1wX3gsIC0xLCBpdC0+Y3VycmVudF95LCAtMSwgdGVt cF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIGN1cnNvcl90 eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg bWNfYmdfbHNsIChpdC0+dywgdGVtcF9iZ19mYWNlX2lkKSwgYWN0aXZlX2N1cnNvcl9wLAorICAg ICAgICAgICAgICAgICAgICAgICAgIE1DX0dMWVBITEVTUywgSVRfQ0hBUlBPUyAoKml0KSwgcmVz dWx0KTsKKyAgICAgICAgICAgICAgdGVtcF94ICs9IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAg ICAgICB9CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9 CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVkVSVElDQUwgUlVMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBWRVJUSUNBTF9SVUxFUjoKKyAgICB7Cisg ICAgICBpZiAoKCFmaW5hbF9sb29wX3AKKyAgICAgICAgICAgJiYgaXQtPmN1cnJlbnRfeCA+IHBy ZXZpb3VzX2l0X2N1cnJlbnRfeAorICAgICAgICAgICAvKiBXaGVuIHRoZSBjdXJyZW50IGxpbmUg Y29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgSmFwYW5lc2UsCisgICAgICAgICAgIHRo ZW4gb3BvaW50X3ggYW5kIHByZXZpb3VzX3JlbGF0aXZlX3ggbWF5IG5vdCBuZWNlc3NhcmlseSBi ZSB0aGUgc2FtZS4KKyAgICAgICAgICAgV2Ugd2FudCB0byBzdG9wIG9uIHRoZSBjaGFyYWN0ZXIg X2NvbnRhaW5pbmdfIGBvcG9pbnRfeGAuICovCisgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0 aXZlX3ggPj0gb3BvaW50X3gpCisgICAgICAgICAgfHwgZmluYWxfbG9vcF9wKQorICAgICAgICB7 CisgICAgICAgICAgLyogU2tpcCB0aGlzIGxpbmUuICovCisgICAgICAgICAgaWYgKHJlYWxfZmFr ZV9jdXJzb3JfcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICBzdHJ1Y3QgZ2x5cGhf cm93ICpnbHlwaF9yb3cgPSAgTUFUUklYX1JPVyAoaXQtPnctPmN1cnJlbnRfbWF0cml4LCB2cG9z KTsKKyAgICAgICAgICBpbnQgZmxhdm9yID0gTk9fRkxBVk9SOworICAgICAgICAgIGVudW0gZmFj ZV9pZCB0ZW1wX2JnX2ZhY2VfaWQgPSBwcmV2aW91c19mYWNlX2lkOworICAgICAgICAgIGlmIChp dC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICYmICFoc2NsX3RlbXBvcmFyeV9wCisg ICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBmbGF2b3IgPSBNQ19HTFlQSExFU1M7CisgICAgICAgICAg ICAgIHRlbXBfYmdfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICBlbHNlIGlmIChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAm JiBnbHlwaF9yb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgZmxhdm9yID0g TUNfVkVSVElDQUxfQkFSX1JJR0hUX0FOR0xFOworICAgICAgICAgIGVsc2UgaWYgKGN1cnNvcl9p bl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICYmIGdseXBoX3Jvdy0+Y29udGludWVkX3Ap CisgICAgICAgICAgICBmbGF2b3IgPSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIOworICAgICAg ICAgIGVsc2UgaWYgKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICYmICFn bHlwaF9yb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wCisgICAgICAgICAgICAgICAgICAgJiYgIWds eXBoX3Jvdy0+Y29udGludWVkX3ApCisgICAgICAgICAgICBmbGF2b3IgPSBNQ19WRVJUSUNBTF9C QVI7CisgICAgICAgICAgLyogVGhpcyBzaXR1YXRpb24gX2V4Y2x1ZGVzXyBFT0wuICovCisgICAg ICAgICAgZWxzZSBpZiAoIXRhYl9pbnZpc2libGVfcAorICAgICAgICAgICAgICAgICAgICYmICFJ VEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QIChpdCkKKyAgICAgICAgICAgICAgICAgICAmJiBGRVRD SF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSAhPSAnXG4nCisgICAgICAgICAgICAgICAgICAgJiYg RkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgIT0gJ1xmJworICAgICAgICAgICAgICAgICAg ICYmIHJjICE9IE1PVkVfUE9TX01BVENIX09SX1pWCisgICAgICAgICAgICAgICAgICAgJiYgcmMg IT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID49 IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQorICAgICAgICAgICAgZmxhdm9yID0gTUNfR0xZUEg7Cisg ICAgICAgICAgICAgICAgICAgICAgLyogRU9MICovCisgICAgICAgICAgZWxzZSBpZiAoIXRhYl9p bnZpc2libGVfcAorICAgICAgICAgICAgICAgICAgICYmIHJlbGF0aXZlX3ggPD0gb3BvaW50X3gK KyAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA8IHJlbGF0aXZlX3ggKyBmcmFtZV9jaGFy X3dpZHRoCisgICAgICAgICAgICAgICAgICAgJiYgKEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCpp dCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgRkVUQ0hfQllURSAoSVRfQllU RVBPUyAoKml0KSkgPT0gJ1xmJykKKyAgICAgICAgICAgICAgICAgICAmJiByYyAhPSBNT1ZFX1BP U19NQVRDSF9PUl9aVgorICAgICAgICAgICAgICAgICAgICYmIHJjICE9IE1PVkVfTElORV9DT05U SU5VRUQKKyAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94ID49IGl0LT5sbnVtX3BpeGVs X3dpZHRoCisgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPiBpdC0+bG51bV9waXhlbF93 aWR0aCkKKyAgICAgICAgICAgIGZsYXZvciA9IE1DX0dMWVBIOworICAgICAgICAgIC8qIEl0IGlz IG9rYXkgdG8gdXNlIE1DX0dMWVBIIGZvciBhIHdvcmQtd3JhcHBlZCBsaW5lLiAqLworICAgICAg ICAgIGVsc2UgaWYgKCF0YWJfaW52aXNpYmxlX3AKKyAgICAgICAgICAgICAgICAgICAmJiByYyA9 PSBNT1ZFX0xJTkVfQ09OVElOVUVECisgICAgICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAo SVRfQllURVBPUyAoKml0KSkgPT0gJyAnCisgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNf cmVsYXRpdmVfeCA9PSBvcG9pbnRfeCkKKyAgICAgICAgICAgIGZsYXZvciA9IE1DX0dMWVBIOwor LyogaXQtPnctPmhzY3JvbGwgPT0gMCAmJiBoc2NsX3RlbXBvcmFyeV9wCisJCcK2ICovCisgICAg ICAgICAgZWxzZSBpZiAoYWN0aW9uX3R5cGUgPT0gVkVSVElDQUxfUlVMRVIKKyAgICAgICAgICAg ICAgICAgICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAmJiBoc2Ns X3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfY2hhcmFj dGVyICE9ICdcdCcgLyogwrsgKi8KKyAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19jaGFy YWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQ T1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA+PSBwcmV2 aW91c19yZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPCBpdC0+Y3Vy cmVudF94KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmbGF2b3IgPSBNQ19HTFlQSF9U QUI7CisgICAgICAgICAgICAgIHRlbXBfYmdfZmFjZV9pZCA9IHByZXZpb3VzX2ZhY2VfaWQ7Cisg ICAgICAgICAgICB9CisvKiBpdC0+dy0+aHNjcm9sbCA+IDAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AK KwkJwrYgKi8KKyAgICAgICAgICBlbHNlIGlmIChhY3Rpb25fdHlwZSA9PSBWRVJUSUNBTF9SVUxF UgorICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAg ICAgICAgICYmICFoc2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAgICAgJiYgYW50ZV9w cmlvcl9wcmV2aW91c19jaGFyYWN0ZXIgIT0gJ1x0JyAvKiDCuyAqLworICAgICAgICAgICAgICAg ICAgICYmIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAgICAg ICAgJiYgcHJldmlvdXNfZmV0Y2hfYnl0ZSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgJiYg RkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJworICAgICAgICAgICAgICAgICAg ICYmIG9wb2ludF94IDwgcHJldmlvdXNfcmVsYXRpdmVfeCkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgZmxhdm9yID0gTUNfR0xZUEhfVEFCOworICAgICAgICAgICAgICB0ZW1wX2JnX2Zh Y2VfaWQgPSBwcmlvcl9wcmV2aW91c19mYWNlX2lkOworICAgICAgICAgICAgfQorLyogaXQtPnct PmhzY3JvbGwgPiAwICYmICFoc2NsX3RlbXBvcmFyeV9wCisJCcK2ICovCisgICAgICAgICAgZWxz ZSBpZiAoYWN0aW9uX3R5cGUgPT0gVkVSVElDQUxfUlVMRVIKKyAgICAgICAgICAgICAgICAgICAm JiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAmJiAhaHNjbF90ZW1wb3Jh cnlfcAorICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciAhPSAn XHQnIC8qIMK7ICovCisgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyID09 ICdcdCcKKyAgICAgICAgICAgICAgICAgICAmJiBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQp KSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVfeCA8PSBv cG9pbnRfeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZmxhdm9yID0gTUNfR0xZUEhf VEFCOworICAgICAgICAgICAgICB0ZW1wX2JnX2ZhY2VfaWQgPSBwcmlvcl9wcmV2aW91c19mYWNl X2lkOworICAgICAgICAgICAgfQorLyogaXQtPnctPmhzY3JvbGwgPiAwICYmICFoc2NsX3RlbXBv cmFyeV9wCisJwrYgKi8KKyAgICAgICAgICBlbHNlIGlmICh0YWJfaW52aXNpYmxlX3AKKyAgICAg ICAgICAgICAgICAgICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAm JiAhaHNjbF90ZW1wb3JhcnlfcAorICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3Vz X2NoYXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfZmV0Y2hf Ynl0ZSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBP UyAoKml0KSkgPT0gJ1xuJworICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID49IGl0LT5s bnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfcmVs YXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgJiYgcHJl dmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAg ICAgJiYgb3BvaW50X3ggPCByZWxhdGl2ZV94KQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBmbGF2b3IgPSBNQ19HTFlQSF9UQUI7CisgICAgICAgICAgICAgIHRlbXBfYmdfZmFjZV9pZCA9 IHByaW9yX3ByZXZpb3VzX2ZhY2VfaWQ7CisgICAgICAgICAgICB9CisvKiBpdC0+dy0+aHNjcm9s bCA+IDAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKwnCtiAqLworICAgICAgICAgIGVsc2UgaWYgKHRh Yl9pbnZpc2libGVfcAorICAgICAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Nyb2xsID4gMAor ICAgICAgICAgICAgICAgICAgICYmICFoc2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAg ICAgJiYgcHJpb3JfcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcKKyAgICAgICAgICAgICAgICAg ICAmJiBwcmV2aW91c19jaGFyYWN0ZXIgPT0gJ1x0JworICAgICAgICAgICAgICAgICAgICYmIEZF VENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAm JiBvcG9pbnRfeCA+PSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICYm IHByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAg ICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0 aAorICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94IDwgcmVsYXRpdmVfeCkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgZmxhdm9yID0gTUNfR0xZUEhfVEFCOworICAgICAgICAgICAg ICB0ZW1wX2JnX2ZhY2VfaWQgPSBwcmV2aW91c19mYWNlX2lkOworICAgICAgICAgICAgfQorLyog aXQtPnctPmhzY3JvbGwgPT0gMAorCcK2ICovCisgICAgICAgICAgZWxzZSBpZiAodGFiX2ludmlz aWJsZV9wCisgICAgICAgICAgICAgICAgICAgJiYgaXQtPnctPmhzY3JvbGwgPT0gMAorICAgICAg ICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciAhPSAnXHQnIC8qIMK7ICov CisgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcKKyAgICAg ICAgICAgICAgICAgICAmJiBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisg ICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPj0gcHJldmlvdXNfcmVsYXRpdmVfeAorICAg ICAgICAgICAgICAgICAgICYmIG9wb2ludF94IDwgcmVsYXRpdmVfeCkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgZmxhdm9yID0gTUNfR0xZUEhfVEFCOworICAgICAgICAgICAgICB0ZW1w X2JnX2ZhY2VfaWQgPSBwcmV2aW91c19mYWNlX2lkOworICAgICAgICAgICAgfQorLyogaXQtPnct PmhzY3JvbGwgPiAwICYmICFoc2NsX3RlbXBvcmFyeV9wCisJSGVsbG8KKyovCisgICAgICAgICAg ZWxzZSBpZiAodGFiX2ludmlzaWJsZV9wCisgICAgICAgICAgICAgICAgICAgJiYgaXQtPnctPmhz Y3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKyAgICAg ICAgICAgICAgICAgICAmJiBhbnRlX3ByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQnCisg ICAgICAgICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcKKyAg ICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19jaGFyYWN0ZXIgIT0gJ1x0JworICAgICAgICAg ICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpICE9ICdcbicKKyAgICAg ICAgICAgICAgICAgICAmJiBhbnRlX3ByaW9yX3ByZXZpb3VzX2hwb3MgPT0gMAorICAgICAgICAg ICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2hwb3MgPT0gMAorICAgICAgICAgICAgICAgICAg ICYmIHByZXZpb3VzX2hwb3MgPiBpdC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1lX2NoYXJfd2lk dGgKKyAgICAgICAgICAgICAgICAgICAmJiBhbnRlX3ByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3gg PCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZp b3VzX3JlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAg ICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPj0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAg ICAgICAgICAgICAmJiBvcG9pbnRfeCA8IHByZXZpb3VzX3JlbGF0aXZlX3gpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGZsYXZvciA9IE1DX0dMWVBIX1RBQjsKKyAgICAgICAgICAgICAg dGVtcF9iZ19mYWNlX2lkID0gYW50ZV9wcmlvcl9wcmV2aW91c19mYWNlX2lkOworICAgICAgICAg ICAgfQorLyogaXQtPnctPmhzY3JvbGwgPiAwICYmICFoc2NsX3RlbXBvcmFyeV9wCisJSGVsbG8K KyovCisgICAgICAgICAgZWxzZSBpZiAodGFiX2ludmlzaWJsZV9wCisgICAgICAgICAgICAgICAg ICAgJiYgaXQtPnctPmhzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgJiYgIWhzY2xfdGVt cG9yYXJ5X3AKKyAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19jaGFyYWN0ZXIg PT0gJ1x0JworICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2NoYXJhY3RlciAhPSAnXHQn CisgICAgICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgIT0g J1xuJworICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPiBpdC0+bG51bV9waXhl bF93aWR0aCAvIGZyYW1lX2NoYXJfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9w cmV2aW91c19ocG9zID09IDAKKyAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19y ZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAmJiBw cmV2aW91c19yZWxhdGl2ZV94ID49IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAg ICAgICAgJiYgb3BvaW50X3ggPCBwcmV2aW91c19yZWxhdGl2ZV94KQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBmbGF2b3IgPSBNQ19HTFlQSF9UQUI7CisgICAgICAgICAgICAgIHRlbXBf YmdfZmFjZV9pZCA9IHByaW9yX3ByZXZpb3VzX2ZhY2VfaWQ7CisgICAgICAgICAgICB9CisvKiBp dC0+dy0+aHNjcm9sbCA9PSAwCisJSGVsbG8KKyovCisgICAgICAgICAgZWxzZSBpZiAodGFiX2lu dmlzaWJsZV9wCisgICAgICAgICAgICAgICAgICAgJiYgaXQtPnctPmhzY3JvbGwgPT0gMAorICAg ICAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9PSAnXHQnCisgICAg ICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcKKyAgICAgICAgICAg ICAgICAgICAmJiBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSAhPSAnXG4nCisgICAgICAg ICAgICAgICAgICAgJiYgb3BvaW50X3ggPCBwcmV2aW91c19yZWxhdGl2ZV94KQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICBmbGF2b3IgPSBNQ19HTFlQSF9UQUI7CisgICAgICAgICAgICAg IHRlbXBfYmdfZmFjZV9pZCA9IHByaW9yX3ByZXZpb3VzX2ZhY2VfaWQ7CisgICAgICAgICAgICB9 CisgICAgICAgICAgZWxzZSBpZiAoZmluYWxfbG9vcF9wCisgICAgICAgICAgICAgICAgICAgJiYg dGFiX2ludmlzaWJsZV9wCisgICAgICAgICAgICAgICAgICAgJiYgcmMgPT0gTU9WRV9MSU5FX0NP TlRJTlVFRAorICAgICAgICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCpp dCkpID09ICdcdCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZsYXZvciA9IE1DX0dM WVBIX1RBQjsKKyAgICAgICAgICAgICAgdGVtcF9iZ19mYWNlX2lkID0gcHJpb3JfcHJldmlvdXNf ZmFjZV9pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChmaW5hbF9sb29wX3AK KyAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA+IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisg ICAgICAgICAgICAgICAgICAgJiYgKHByZXZpb3VzX3JlbGF0aXZlX3ggPj0gb3BvaW50X3gKKyAg ICAgICAgICAgICAgICAgICAgICAgfHwgb3BvaW50X3ggPCByZWxhdGl2ZV94KSkKKyAgICAgICAg ICAgIGZsYXZvciA9IE1DX0dMWVBIOworICAgICAgICAgIGVsc2UgaWYgKG9wb2ludF94ID09IGl0 LT5sbnVtX3BpeGVsX3dpZHRoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmbGF2b3Ig PSBNQ19HTFlQSDsKKyAgICAgICAgICAgICAgdGVtcF9iZ19mYWNlX2lkID0gaXQtPmZhY2VfaWQ7 CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBmbGF2b3IgPSBNQ19HTFlQSExFU1M7CisgICAgICAgICAgICAgIHRlbXBfYmdfZmFjZV9p ZCA9IGl0LT5mYWNlX2lkOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIENPUk5FUiBDQVNF UzoKKyAgICAgICAgICAtICBXaGVuIHRoZSB2ZXJ0aWNhbCBsaW5lIGlzIHRvIHRoZSBsZWZ0IG9m IHRoZSB0ZXh0IGFuZCBqdXN0IHRvIHRoZQorICAgICAgICAgICAgIHJpZ2h0IG9mIHRoZSBsaW5l IG51bWJlcnMsIHdlIHdhbnQgdGhlIGRlZmF1bHQgZmFjZS4KKyAgICAgICAgICAtICBXaGVuIHRo ZXJlIGlzIGFuIGltYWdpbmFyeSBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB3 aXRoCisgICAgICAgICAgICAgbm90aGluZyBvdGhlciB0aGFuIFpWLCB3ZSB3YW50IHRvIHVzZSB0 aGUgZnJhbWUgZGVmYXVsdCBmYWNlIGlmIFpWCisgICAgICAgICAgICAgaXMgYXQgdGhlIGVuZCBv ZiBhbiBhY3RpdmUgcmVnaW9uLiAqLworICAgICAgICAgIGlmIChyZWdpb25fYWN0aXZlX3AKKyAg ICAgICAgICAgICAgJiYgZmxhdm9yICE9IE1DX0dMWVBIX1RBQikKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgLyogU3Vic2VxdWVudCB0byBgcmVnaW9uX2VuZGAgYW5kIGF0IHRoZSBlbmQg b2YgYSBsaW5lLiAqLworICAgICAgICAgICAgICBpZiAob3BvaW50X3ggPj0gaXQtPmxudW1fcGl4 ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICYmIElUX0NIQVJQT1MgKCppdCkgPj0gcmVnaW9u X2VuZAorICAgICAgICAgICAgICAgICAgJiYgKElURVJBVE9SX0FUX0VORF9PRl9MSU5FX1AgKGl0 KQorICAgICAgICAgICAgICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkp ID09ICdcbicpKQorICAgICAgICAgICAgICAgIHRlbXBfYmdfZmFjZV9pZCA9IGl0LT5mYWNlX2lk OworICAgICAgICAgICAgICAvKiBTdWJzZXF1ZW50IHRvIGByZWdpb25fZW5kYCBhbmQgYXQgdGhl IGVuZCBvZiBhIGxpbmUuICovCisgICAgICAgICAgICAgIGVsc2UgaWYgKG9wb2ludF94ID49IGl0 LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICYmIElUX0NIQVJQT1Mg KCppdCkgPT0gcmVnaW9uX2VuZAorICAgICAgICAgICAgICAgICAgICAgICAmJiBJVF9DSEFSUE9T ICgqaXQpID09IFpWKQorICAgICAgICAgICAgICAgIHRlbXBfYmdfZmFjZV9pZCA9IERFRkFVTFRf RkFDRV9JRDsKKyAgICAgICAgICAgICAgLyogUHJpb3IgdG8gYHJlZ2lvbl9iZWdpbm5pbmdgIGFu ZCBhdCB0aGUgZW5kIG9mIGEgbGluZS4gKi8KKyAgICAgICAgICAgICAgZWxzZSBpZiAob3BvaW50 X3ggPj0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgSVRf Q0hBUlBPUyAoKml0KSA8IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAg JiYgKElURVJBVE9SX0FUX0VORF9PRl9MSU5FX1AgKGl0KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgfHwgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJykpCisgICAgICAg ICAgICAgICAgdGVtcF9iZ19mYWNlX2lkID0gaXQtPmZhY2VfaWQ7CisgICAgICAgICAgICAgIC8q IC0gIFdpdGhpbiB0aGUgcmVnaW9uLgorICAgICAgICAgICAgICAgICAtICBgcmVhbF9waHlzX2N1 cnNvcl9nbHlwaGAgaXMgTlVMTC4gKi8KKyAgICAgICAgICAgICAgZWxzZSBpZiAoSVRfQ0hBUlBP UyAoKml0KSA+PSByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICYmIElU X0NIQVJQT1MgKCppdCkgPCByZWdpb25fZW5kCisgICAgICAgICAgICAgICAgICAgICAgICYmIHJl YWxfcGh5c19jdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB0ZW1wX2JnX2Zh Y2VfaWQgPSBwcmV2aW91c19mYWNlX2lkOworICAgICAgICAgICAgICAvKiAtICBXaXRoaW4gdGhl IHJlZ2lvbi4KKyAgICAgICAgICAgICAgICAgLSAgYHJlYWxfcGh5c19jdXJzb3JfZ2x5cGhgIGlz IG5vbi1OVUxMLgorICAgICAgICAgICAgICAgICAtICBBdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgor ICAgICAgICAgICAgICAgICAtICBQVCBpcyBhdCBgcmVnaW9uX2JlZ2lubmluZ2AuICovCisgICAg ICAgICAgICAgIGVsc2UgaWYgKElUX0NIQVJQT1MgKCppdCkgPj0gcmVnaW9uX2JlZ2lubmluZwor ICAgICAgICAgICAgICAgICAgICAgICAmJiBJVF9DSEFSUE9TICgqaXQpIDwgcmVnaW9uX2VuZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoSVRFUkFUT1JfQVRfRU5EX09GX0xJTkVfUCAo aXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRF UE9TICgqaXQpKSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWFsX3Bo eXNfY3Vyc29yX2dseXBoICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUFQg PT0gcmVnaW9uX2JlZ2lubmluZykKKyAgICAgICAgICAgICAgICB0ZW1wX2JnX2ZhY2VfaWQgPSBy ZWFsX3BoeXNfY3Vyc29yX2dseXBoLT5mYWNlX2lkOworICAgICAgICAgICAgICAvKiAtICBXaXRo aW4gdGhlIHJlZ2lvbi4KKyAgICAgICAgICAgICAgICAgLSAgYHJlYWxfcGh5c19jdXJzb3JfZ2x5 cGhgIGlzIG5vbi1OVUxMLgorICAgICAgICAgICAgICAgICAtICBBdCB0aGUgZW5kIG9mIHRoZSBs aW5lLgorICAgICAgICAgICAgICAgICAtICBQVCBpcyBhdCBgcmVnaW9uX3JlZ2lvbl9lbmRgLiAq LworICAgICAgICAgICAgICBlbHNlIGlmIChJVF9DSEFSUE9TICgqaXQpID49IHJlZ2lvbl9iZWdp bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgSVRfQ0hBUlBPUyAoKml0KSA8IHJlZ2lv bl9lbmQKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKElURVJBVE9SX0FUX0VORF9PRl9MSU5F X1AgKGl0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgRkVUQ0hfQllURSAoSVRfQllU RVBPUyAoKml0KSkgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVhbF9waHlz X2N1cnNvcl9nbHlwaCAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICYmIFBUID09IHJl Z2lvbl9lbmQpCisgICAgICAgICAgICAgICAgLyogdGVtcF9iZ19mYWNlX2lkID0gcmVhbF9waHlz X2N1cnNvcl9nbHlwaC0+ZmFjZV9pZDsgKi8KKyAgICAgICAgICAgICAgICAvKiB0ZW1wX2JnX2Zh Y2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAoaXQtPncsIGl0LT5mLCBpbnRlcm4gKCJyZWdpb24i KSwgdHJ1ZSk7ICovCisgICAgICAgICAgICAgICAgdGVtcF9iZ19mYWNlX2lkID0gaXQtPmZhY2Vf aWQ7CisgICAgICAgICAgICAgIC8qIC0gIFdpdGhpbiB0aGUgcmVnaW9uLgorICAgICAgICAgICAg ICAgICAtICBgcmVhbF9waHlzX2N1cnNvcl9nbHlwaGAgaXMgbm9uLU5VTEwuCisgICAgICAgICAg ICAgICAgIC0gIE5vdCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAqLworICAgICAgICAgICAgICBl bHNlIGlmIChJVF9DSEFSUE9TICgqaXQpID49IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgJiYgSVRfQ0hBUlBPUyAoKml0KSA8IHJlZ2lvbl9lbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgJiYgKCFJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QIChpdCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpICE9ICdc bicpCisgICAgICAgICAgICAgICAgICAgICAgICYmIHJlYWxfcGh5c19jdXJzb3JfZ2x5cGggIT0g TlVMTCkKKyAgICAgICAgICAgICAgICB0ZW1wX2JnX2ZhY2VfaWQgPSBwcmV2aW91c19mYWNlX2lk OworICAgICAgICAgICAgfQorICAgICAgICAgIGludCB0ZW1wX2hwb3MgPQorICAgICAgICAgICAg KG9wb2ludF94ID09IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQorICAgICAgICAgICAgICA/IGl0LT5s bnVtX3BpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgOiAoaXQtPnct PmhzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAmJiAhaHNjbF90ZW1wb3JhcnlfcAorICAgICAg ICAgICAgICAgJiYgb3BvaW50X3ggPCBpdC0+bG51bV9waXhlbF93aWR0aCkKKyAgICAgICAgICAg ICAgLyogSWYgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIGxpbmUgbnVtYmVycyB3aGVuIHNj cm9sbGluZworICAgICAgICAgICAgICBob3Jpem9udGFsbHksIHRoZW4gd2Ugd2FudCB0aGUgdmVy dGljYWwgbGluZSB0byBhbGlnbiB3aXRoIHJpZ2h0IGVkZ2UKKyAgICAgICAgICAgICAgb2YgdGhl IGxpbmUgbnVtYmVycy4gKi8KKyAgICAgICAgICAgICAgPyAoaXQtPmxudW1fcGl4ZWxfd2lkdGgg LyBmcmFtZV9jaGFyX3dpZHRoKSAtIDEKKyAgICAgICAgICAgIDogKE5JTFAgKFZkaXNwbGF5X2xp bmVfbnVtYmVycykKKyAgICAgICAgICAgICAgICYmICFmaW5hbF9sb29wX3AKKyAgICAgICAgICAg ICAgICYmIGl0LT5jdXJyZW50X3ggPT0gMAorICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfaHBv cyA9PSAwKQorICAgICAgICAgICAgICA/IDAKKyAgICAgICAgICAgIC8qIEVPTCDCtiBpcyBleGFj dGx5IDJuZCB0byB0aGUgcmlnaHQgb2YgdGhlIGxpbmUgbnVtYmVycy4gKi8KKyAgICAgICAgICAg IDogKCF0YWJfaW52aXNpYmxlX3AKKyAgICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZ VEVQT1MgKCppdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICYmIHJlbGF0aXZlX3ggPiBpdC0+ bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVfeCA8 IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAmJiBwcmV2aW91c19ocG9zID09 IDAKKyAgICAgICAgICAgICAgICYmIGl0LT5sbnVtX3BpeGVsX3dpZHRoID4gMCkKKyAgICAgICAg ICAgICAgPyAoaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoKSArIDEKKyAg ICAgICAgICAgIC8qIEVPTCDCtiovCisgICAgICAgICAgICA6IChpdC0+dy0+aHNjcm9sbCA9PSAw CisgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94IDw9IG9wb2ludF94CisgICAgICAgICAgICAg ICAmJiBvcG9pbnRfeCA8IHJlbGF0aXZlX3ggKyBmcmFtZV9jaGFyX3dpZHRoCisgICAgICAgICAg ICAgICAmJiAoRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1xuJworICAgICAgICAg ICAgICAgICAgIHx8IEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcZicpCisgICAg ICAgICAgICAgICAmJiByYyAhPSBNT1ZFX1BPU19NQVRDSF9PUl9aVgorICAgICAgICAgICAgICAg JiYgcmMgIT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAgICAgICAgICAgICAgJiYgcmVsYXRpdmVf eCA+PSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPiBp dC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfaHBvcyAhPSAw KQorICAgICAgICAgICAgICA/IHByZXZpb3VzX2hwb3MgKyAxCisvKiBpdC0+dy0+aHNjcm9sbCA+ IDAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKwkJwrYgKi8KKyAgICAgICAgICAgIDogKGFjdGlvbl90 eXBlID09IFZFUlRJQ0FMX1JVTEVSCisgICAgICAgICAgICAgICAgJiYgaXQtPnctPmhzY3JvbGwg PiAwCisgICAgICAgICAgICAgICAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKyAgICAgICAgICAgICAg ICAmJiBhbnRlX3ByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciAhPSAnXHQnIC8qIMK7ICovCisgICAg ICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfY2hhcmFjdGVyID09ICdcdCcKKyAgICAgICAg ICAgICAgICAmJiBwcmV2aW91c19mZXRjaF9ieXRlID09ICdcbicKKyAgICAgICAgICAgICAgICAm JiBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAg JiYgb3BvaW50X3ggPT0gcHJldmlvdXNfcmVsYXRpdmVfeAorICAgICAgICAgICAgICAgICYmIG9w b2ludF94ID09IHJlbGF0aXZlX3gKKyAgICAgICAgICAgICAgICAmJiBvcG9pbnRfaHBvcyA9PSBw cmV2aW91c19ocG9zCisgICAgICAgICAgICAgICAgJiYgb3BvaW50X2hwb3MgPT0gaXQtPmhwb3Mp CisgICAgICAgICAgICAgID8gcHJldmlvdXNfaHBvcworLyogaXQtPnctPmhzY3JvbGwgPiAwICYm ICFoc2NsX3RlbXBvcmFyeV9wCisJSGVsbG8KKyovCisgICAgICAgICAgICA6ICh0YWJfaW52aXNp YmxlX3AKKyAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAg ICAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKyAgICAgICAgICAgICAgICYmIGFudGVfcHJpb3JfcHJl dmlvdXNfY2hhcmFjdGVyID09ICdcdCcKKyAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3Vz X2NoYXJhY3RlciAhPSAnXHQnCisgICAgICAgICAgICAgICAmJiBwcmV2aW91c19jaGFyYWN0ZXIg IT0gJ1x0JworICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkg IT0gJ1xuJworICAgICAgICAgICAgICAgJiYgYW50ZV9wcmlvcl9wcmV2aW91c19ocG9zID09IDAK KyAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2hwb3MgPT0gMAorICAgICAgICAgICAg ICAgJiYgcHJldmlvdXNfaHBvcyA+IGl0LT5sbnVtX3BpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93 aWR0aAorICAgICAgICAgICAgICAgJiYgYW50ZV9wcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94IDwg aXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX3Jl bGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgJiYgcHJldmlv dXNfcmVsYXRpdmVfeCA+PSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgJiYg b3BvaW50X3ggPCBwcmV2aW91c19yZWxhdGl2ZV94KQorICAgICAgICAgICAgICA/IGl0LT5sbnVt X3BpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aAorLyogaXQtPnctPmhzY3JvbGwgPiAwICYm ICFoc2NsX3RlbXBvcmFyeV9wCisJSGVsbG8KKyovCisgICAgICAgICAgICA6ICh0YWJfaW52aXNp YmxlX3AKKyAgICAgICAgICAgICAgICYmIGl0LT53LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAg ICAgJiYgIWhzY2xfdGVtcG9yYXJ5X3AKKyAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3Vz X2NoYXJhY3RlciA9PSAnXHQnCisgICAgICAgICAgICAgICAmJiBwcmV2aW91c19jaGFyYWN0ZXIg IT0gJ1x0JworICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoKml0KSkg IT0gJ1xuJworICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfaHBvcyA+IGl0LT5sbnVtX3BpeGVs X3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlv dXNfaHBvcyA9PSAwCisgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94 IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0 aXZlX3ggPj0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICYmIG9wb2ludF94 IDwgcHJldmlvdXNfcmVsYXRpdmVfeCkKKyAgICAgICAgICAgICAgPyBpdC0+bG51bV9waXhlbF93 aWR0aCAvIGZyYW1lX2NoYXJfd2lkdGgKKy8qIGl0LT53LT5oc2Nyb2xsID4gMCAmJiAhaHNjbF90 ZW1wb3JhcnlfcAorSGVsbG8KKyovCisgICAgICAgICAgICA6ICghdGFiX2ludmlzaWJsZV9wCisg ICAgICAgICAgICAgICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICYmICFo c2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19jaGFyYWN0 ZXIgIT0gJ1x0JworICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfY2hhcmFjdGVyICE9ICdcdCcK KyAgICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkpID09ICdcbicK KyAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPCBpdC0+aHBvcworICAgICAgICAgICAg ICAgJiYgb3BvaW50X3ggPj0gcmVsYXRpdmVfeCkKKyAgICAgICAgICAgICAgPyBwcmV2aW91c19o cG9zICsgMQorICAgICAgICAgICAgLyogVGhpcyBzaXR1YXRpb24gbWF5IGV4aXN0IHdoZW4gcG9p bnQgaXMgb24gYSBjb21wb3NpdGUgY2hhcmFjdGVyCisgICAgICAgICAgICBhbmQgb3BvaW50X3gg aXMgdG8gdGhlIGltbWVkaWF0ZSByaWdodCBvZiB0aGUgbGluZSBudW1iZXJzIG9yIGp1c3QKKyAg ICAgICAgICAgIGEgdGFkIGJleW9uZCB0aGUgaW1tZWRpYXRlIHJpZ2h0IG9mIHRoZSBsaW5lIG51 bWJlcnMuICovCisgICAgICAgICAgICA6IChwcmV2aW91c19ocG9zID09IDAKKyAgICAgICAgICAg ICAgICYmIHJlbGF0aXZlX3ggPT0gaXQtPmxudW1fcGl4ZWxfd2lkdGgpCisgICAgICAgICAgICAg ID8gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoCisgICAgICAgICAgICA6 IChmbGF2b3IgPT0gTUNfR0xZUEgKKyAgICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZl X3ggPiBvcG9pbnRfeAorICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggIT0gaXQtPmxudW1fcGl4 ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3ggPj0g aXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICYmIHByaW9yX3ByZXZpb3VzX2hw b3MgPj0gaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoKQorICAgICAgICAg ICAgICA/IHByaW9yX3ByZXZpb3VzX2hwb3MKKyAgICAgICAgICAgIDogKGZsYXZvciA9PSBNQ19H TFlQSAorICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVfeCA+IG9wb2ludF94Cisg ICAgICAgICAgICAgICAmJiBvcG9pbnRfeCAhPSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAg ICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfcmVsYXRpdmVfeCA8IGl0LT5sbnVtX3BpeGVsX3dp ZHRoCisgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19ocG9zIDwgaXQtPmxudW1fcGl4 ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoKQorICAgICAgICAgICAgICA/IGl0LT5sbnVtX3Bp eGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgOiAoIXRhYl9pbnZpc2li bGVfcAorICAgICAgICAgICAgICAgJiYgaXQtPnctPmhzY3JvbGwgPiAwCisgICAgICAgICAgICAg ICAmJiBoc2NsX3RlbXBvcmFyeV9wCisgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA8IGl0LT5j dXJyZW50X3gKKyAgICAgICAgICAgICAgICYmIG9wb2ludF94ID09IHJlbGF0aXZlX3gpCisgICAg ICAgICAgICAgICA/IHByZXZpb3VzX2hwb3MgKyAxCisgICAgICAgICAgICA6IHByZXZpb3VzX2hw b3M7CisgICAgICAgICAgaW50IHRlbXBfeCA9IDA7CisgICAgICAgICAgLyogRU9MIMK2Ki8KKyAg ICAgICAgICBpZiAoZmxhdm9yID09IE1DX0dMWVBICisgICAgICAgICAgICAgICYmIHJlbGF0aXZl X3ggPD0gb3BvaW50X3gKKyAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPCByZWxhdGl2ZV94ICsg ZnJhbWVfY2hhcl93aWR0aAorICAgICAgICAgICAgICAmJiAoRkVUQ0hfQllURSAoSVRfQllURVBP UyAoKml0KSkgPT0gJ1xuJworICAgICAgICAgICAgICAgICAgfHwgRkVUQ0hfQllURSAoSVRfQllU RVBPUyAoKml0KSkgPT0gJ1xmJykKKyAgICAgICAgICAgICAgJiYgcmMgIT0gTU9WRV9QT1NfTUFU Q0hfT1JfWlYKKyAgICAgICAgICAgICAgJiYgcmMgIT0gTU9WRV9MSU5FX0NPTlRJTlVFRAorICAg ICAgICAgICAgICAmJiByZWxhdGl2ZV94ID49IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAg ICAgICAgICYmIG9wb2ludF94ID4gaXQtPmxudW1fcGl4ZWxfd2lkdGgpCisgICAgICAgICAgICB0 ZW1wX3ggPSByZWxhdGl2ZV94OworICAgICAgICAgICAgZWxzZSBpZiAoZmxhdm9yID09IE1DX0dM WVBICisgICAgICAgICAgICAgICAgICAgICAmJiBwcmV2aW91c19yZWxhdGl2ZV94ID4gb3BvaW50 X3gKKyAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ICE9IGl0LT5sbnVtX3BpeGVsX3dp ZHRoCisgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94ID49 IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAmJiBwcmlvcl9wcmV2 aW91c19ocG9zID49IGl0LT5sbnVtX3BpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aCkKKyAg ICAgICAgICAgICAgdGVtcF94ID0gcHJpb3JfcHJldmlvdXNfcmVsYXRpdmVfeDsKKyAgICAgICAg ICAgICAgZWxzZSBpZiAoZmxhdm9yID09IE1DX0dMWVBICisgICAgICAgICAgICAgICAgICAgICAg ICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPiBvcG9pbnRfeAorICAgICAgICAgICAgICAgICAgICAg ICAmJiBvcG9pbnRfeCAhPSBpdC0+bG51bV9waXhlbF93aWR0aAorICAgICAgICAgICAgICAgICAg ICAgICAmJiBwcmlvcl9wcmV2aW91c19yZWxhdGl2ZV94IDwgaXQtPmxudW1fcGl4ZWxfd2lkdGgK KyAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJpb3JfcHJldmlvdXNfaHBvcyA8IGl0LT5sbnVt X3BpeGVsX3dpZHRoIC8gZnJhbWVfY2hhcl93aWR0aCkKKyAgICAgICAgICAgICAgICB0ZW1wX3gg PSBpdC0+bG51bV9waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGF2b3Ig PT0gTUNfR0xZUEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmaW5hbF9sb29wX3AKKyAg ICAgICAgICAgICAgICAgICAgICAgICAmJiByYyAhPSBNT1ZFX0xJTkVfQ09OVElOVUVECisgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggPCByZWxhdGl2ZV94CisgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgb3BvaW50X3ggIT0gaXQtPmxudW1fcGl4ZWxfd2lkdGgpCisgICAg ICAgICAgICAgICAgICB0ZW1wX3ggPSBwcmV2aW91c19yZWxhdGl2ZV94OworICAgICAgICAgICAg ICAgICAgLyogSXQgaXMgb2theSB0byB1c2UgTUNfR0xZUEggZm9yIGEgd29yZC13cmFwcGVkIGxp bmUuICovCisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGF2b3IgPT0gTUNfR0xZUEgKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJjID09IE1PVkVfTElORV9DT05USU5VRUQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKCppdCkp ID09ICcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfcmVsYXRpdmVf eCA8IG9wb2ludF94KQorICAgICAgICAgICAgICAgICAgICB0ZW1wX3ggPSBwcmV2aW91c19yZWxh dGl2ZV94OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg dGVtcF94ID0gb3BvaW50X3g7CisgICAgICAgICAgaW50IHRlbXBfdnBvcyA9IHZwb3M7CisgICAg ICAgICAgaWYgKCFtY19zdGRlcnJfcCkKKyAgICAgICAgICAgIG1jX3N0ZGVycl8yIChpdCwgY291 bnQsIGFjdGlvbl90eXBlLCByZWxhdGl2ZV94LCB0ZW1wX3gsIHRlbXBfaHBvcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICB0ZW1wX3Zwb3MsIGZvcmVncm91bmQsIHRlbXBfYmdfZmFjZV9pZCwg Y3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdm9yKTsKKyAgICAgICAg ICAvKiBSZWNvcmQgc29tZSBvZiB0aGUgY3VycmVudCB2YWx1ZXMgZm9yIHRoZSBjdXJzb3IgYW5k IGdseXBoX3Jvdy4gKi8KKyAgICAgICAgICBpbnQgZngsIGZ5LCBoOworICAgICAgICAgIG1jX2dl dF9waHlzX2N1cnNvcl9nZW9tZXRyeSAoaXQtPncsIGdseXBoX3JvdywgdGVtcF94LCAmZngsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9yb3ctPnksICZmeSwg dGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCk7CisgICAgICAgICAgZnggPSBXSU5E T1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YIChpdC0+dywgb3BvaW50X3gpOworICAgICAgICAgIGlm IChmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FOR0xFCisgICAgICAgICAgICAgIHx8 IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAgICAgICAgIHx8IGZs YXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IFJJR0hU X0ZSSU5HRV9CSVRNQVA7CisgICAgICAgICAgbWNfaGVscGVyIChpdC0+dywgdGVtcF94LCBmeCwg aXQtPmN1cnJlbnRfeSwgLTEsIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAgICAg ICAgICAgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAgICAgICAg ICAgICAgICAgICAgIG1jX2JnX2xzbCAoaXQtPncsIHRlbXBfYmdfZmFjZV9pZCksIGFjdGl2ZV9j dXJzb3JfcCwgZmxhdm9yLAorICAgICAgICAgICAgICAgICAgICAgSVRfQ0hBUlBPUyAoKml0KSAt MSwgcmVzdWx0KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgICAgLyogRG8gTk9UIHJlbW92 ZSB0aGlzIGBicmVha2AgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMhISEgIFdpdGhvdXQgdGhpcwor ICAgICAgICAgIGBicmVha2AsIHRoZSBsb29wIGNvbnRpbnVlcyB1bnRpbCBgZmluYWxfbG9vcF9w YCBhbmQgcGxhY2VzIGFuCisgICAgICAgICAgZXJyb25lb3VzIHNlY29uZCBmYWtlIGN1cnNvciBv dmVyIHRoZSBmaXJzdCBvbmUuICBUaGF0IGVycm9yIGlzIHZpc2libGUKKyAgICAgICAgICB3aGVu IGRlYWxpbmcgd2l0aCBgTUNfR0xZUEhfVEFCYCBiZWNhdXNlIHRoZSB3cm9uZyBmYWNlX2lkIGlz IHVzZWQuCisgICAgICAgICAgVGhlIGVycm9yIGlzIGRpZmZpY3VsdCB0byBkZWJ1ZyBiZWNhdXNl IGBvcG9pbnRfeGAgaXMgY29ycmVjdC4gKi8KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisgICAg fQorICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAg ICAgICBTdG9yZSBWYWx1ZXMgZm9yIE5leHQgTG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAq LworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICBpZiAoaXQtPmN1cnJlbnRfeCA+IHBy ZXZpb3VzX2l0X2N1cnJlbnRfeCkKKyAgICAgICAgeworICAgICAgICAgIGludCBkaWZmX3ByZXZp b3VzX3ZfY3VycmVudF94ID0gaXQtPmN1cnJlbnRfeCAtIHByZXZpb3VzX2l0X2N1cnJlbnRfeDsK KyAgICAgICAgICBpbnQgZGlmZl9wcmV2aW91c192X3JlbGF0aXZlX3ggPSByZWxhdGl2ZV94IC0g cHJldmlvdXNfcmVsYXRpdmVfeDsKKyAgICAgICAgICAvKiBmZXRjaF9ieXRlICovCisgICAgICAg ICAgYW50ZV9wcmlvcl9wcmV2aW91c19mZXRjaF9ieXRlID0gcHJpb3JfcHJldmlvdXNfZmV0Y2hf Ynl0ZTsKKyAgICAgICAgICBwcmlvcl9wcmV2aW91c19mZXRjaF9ieXRlID0gcHJldmlvdXNfZmV0 Y2hfYnl0ZTsKKyAgICAgICAgICBwcmV2aW91c19mZXRjaF9ieXRlID0gKGl0LT5jID4gMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gRkVUQ0hfQllURSAoSVRfQllURVBPUyAo Kml0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICAgICAgICAv KiBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICBhbnRlX3ByaW9yX3ByZXZpb3VzX2NoYXJhY3RlciA9 IHByaW9yX3ByZXZpb3VzX2NoYXJhY3RlcjsKKyAgICAgICAgICBwcmlvcl9wcmV2aW91c19jaGFy YWN0ZXIgPSBwcmV2aW91c19jaGFyYWN0ZXI7CisgICAgICAgICAgcHJldmlvdXNfY2hhcmFjdGVy ID0gaXQtPmM7CisgICAgICAgICAgLyogZmFjZV9pZCAqLworICAgICAgICAgIGFudGVfcHJpb3Jf cHJldmlvdXNfZmFjZV9pZCA9IHByaW9yX3ByZXZpb3VzX2ZhY2VfaWQ7CisgICAgICAgICAgcHJp b3JfcHJldmlvdXNfZmFjZV9pZCA9IHByZXZpb3VzX2ZhY2VfaWQ7CisgICAgICAgICAgcHJldmlv dXNfZmFjZV9pZCA9IGl0LT5mYWNlX2lkOworICAgICAgICAgIC8qIHJlbGF0aXZlX3ggKi8KKyAg ICAgICAgICBhbnRlX3ByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3ggPSBwcmlvcl9wcmV2aW91c19y ZWxhdGl2ZV94OworICAgICAgICAgIHByaW9yX3ByZXZpb3VzX3JlbGF0aXZlX3ggPSBwcmV2aW91 c19yZWxhdGl2ZV94OworICAgICAgICAgIGlmIChkaWZmX3ByZXZpb3VzX3ZfY3VycmVudF94ICE9 IGRpZmZfcHJldmlvdXNfdl9yZWxhdGl2ZV94CisgICAgICAgICAgICAgICYmIHByZXZpb3VzX3Jl bGF0aXZlX3ggPj0gaXQtPmxudW1fcGl4ZWxfd2lkdGgpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGlmICghbWNfc3RkZXJyX3ApCisgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJy LCAiXG5ESUZGICglZCAvICVkKTogIFNvdW5kIHRoZSBhbGFybSFcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgZGlmZl9wcmV2aW91c192X2N1cnJlbnRfeCwgZGlmZl9wcmV2aW91c192X3Jl bGF0aXZlX3gpOworICAgICAgICAgICAgICBwcmV2aW91c19yZWxhdGl2ZV94ICs9IGRpZmZfcHJl dmlvdXNfdl9jdXJyZW50X3g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChp c3N1ZV8zMTcxNl9wCisgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94IDwgaXQtPmxu dW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPT0g MCkKKyAgICAgICAgICAgICAgcHJldmlvdXNfcmVsYXRpdmVfeCA9IGl0LT5jdXJyZW50X3ggLSBp dC0+Zmlyc3RfdmlzaWJsZV94OworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg cHJldmlvdXNfcmVsYXRpdmVfeCA9IHJlbGF0aXZlX3g7CisgICAgICAgICAgLyogaXQtPmN1cnJl bnRfeCAqLworICAgICAgICAgIGFudGVfcHJpb3JfcHJldmlvdXNfaXRfY3VycmVudF94ID0gcHJp b3JfcHJldmlvdXNfaXRfY3VycmVudF94OworICAgICAgICAgIHByaW9yX3ByZXZpb3VzX2l0X2N1 cnJlbnRfeCA9IHByZXZpb3VzX2l0X2N1cnJlbnRfeDsKKyAgICAgICAgICBwcmV2aW91c19pdF9j dXJyZW50X3ggPSBpdC0+Y3VycmVudF94OworICAgICAgICAgIC8qIGl0LT5ocG9zICovCisgICAg ICAgICAgYW50ZV9wcmlvcl9wcmV2aW91c19pdF9ocG9zID0gcHJpb3JfcHJldmlvdXNfaXRfaHBv czsKKyAgICAgICAgICBwcmlvcl9wcmV2aW91c19pdF9ocG9zID0gcHJldmlvdXNfaXRfaHBvczsK KyAgICAgICAgICBwcmV2aW91c19pdF9ocG9zID0gaXQtPmhwb3M7CisgICAgICAgICAgLyogcHJl dmlvdXNfaHBvcyAqLworICAgICAgICAgIGFudGVfcHJpb3JfcHJldmlvdXNfaHBvcyA9IHByaW9y X3ByZXZpb3VzX2hwb3M7CisgICAgICAgICAgcHJpb3JfcHJldmlvdXNfaHBvcyA9IHByZXZpb3Vz X2hwb3M7CisgICAgICAgICAgcHJldmlvdXNfaHBvcyArPSAoaXNzdWVfMzE3MTZfcAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIHJlbGF0aXZlX3ggPCBpdC0+bG51bV9waXhlbF93aWR0 aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByZXZpb3VzX2hwb3MgPT0gMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFt ZV9jaGFyX3dpZHRoKSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHByZXZpb3Vz X2hwb3MgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRpdmVfeCA+ IGl0LT5sbnVtX3BpeGVsX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAh TklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgIUVRIChWZGlzcGxheV9saW5lX251bWJlcnMsIFF2aXN1YWwpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IChpdC0+bG51bV9waXhlbF93aWR0aCAvIGZyYW1lX2NoYXJfd2lk dGgpICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocHJldmlvdXNfaHBvcyA9PSAw CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94ID4gaXQtPmxudW1f cGl4ZWxfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChWZGlz cGxheV9saW5lX251bWJlcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBFUSAo VmRpc3BsYXlfbGluZV9udW1iZXJzLCBRdmlzdWFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyAoaXQtPmxudW1fcGl4ZWxfd2lkdGggLyBmcmFtZV9jaGFyX3dpZHRoKSArIDEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogKHByZXZpb3VzX2hwb3MgPT0gMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgTklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJzKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZmluYWxfbG9vcF9wCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBpdC0+Y3VycmVudF94ID09IDApCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVsYXRpdmVf eCA+IGl0LT5sbnVtX3BpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICAgICAgfQorICAgICAgICBl bHNlIGlmIChpdC0+YyA9PSAwCisgICAgICAgICAgICAgICAgICYmIGNvdW50ID09IDEpCisgICAg ICAgICAgcHJldmlvdXNfZmV0Y2hfYnl0ZSA9IDA7CisgICAgICAgICAgZWxzZSBpZiAocHJldmlv dXNfZmV0Y2hfYnl0ZSA9PSAwCisgICAgICAgICAgICAgICAgICAgJiYgY291bnQgPT0gMikKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHJldmlvdXNfZmV0Y2hfYnl0ZSA9IEZFVENIX0JZ VEUgKElUX0JZVEVQT1MgKCppdCkpOworICAgICAgICAgICAgICBwcmV2aW91c19jaGFyYWN0ZXIg PSBpdC0+YzsKKyAgICAgICAgICAgICAgcHJldmlvdXNfZmFjZV9pZCA9PSBpdC0+ZmFjZV9pZDsK KyAgICAgICAgICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIFggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgIGlmICghZmluYWxfbG9v cF9wKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGl0IHNhdmVkX2l0OworICAgICAgICAg IHZvaWQgKnNhdmVkX2l0ZGF0YSA9IGJpZGlfc2hlbHZlX2NhY2hlICgpOworICAgICAgICAgIFNB VkVfSVQgKHNhdmVkX2l0LCAqaXQsIHNhdmVkX2l0ZGF0YSk7CisgICAgICAgICAgbmV3X3ggKz0g MTsKKyAgICAgICAgICByYyA9IG1vdmVfaXRfaW5fZGlzcGxheV9saW5lX3RvIChpdCwgWlYsIG5l d194LCBNT1ZFX1RPX1BPUyB8IE1PVkVfVE9fWCk7CisgICAgICAgICAgLyogV2hlbiB3b3JkLXdy YXAgaXMgb24sIFRPX1ggbWF5IGxpZSBwYXN0IHRoZSBlbmQgb2YgYSB3cmFwcGVkIGxpbmUuCisg ICAgICAgICAgVGhlbiBpdC0+Y3VycmVudCBpcyB0aGUgY2hhcmFjdGVyIG9uIHRoZSBuZXh0IGxp bmUsIHNvIGJhY2t0cmFjayB0byB0aGUKKyAgICAgICAgICBzcGFjZSBiZWZvcmUgdGhlIHdyYXAg cG9pbnQuICAqLworICAgICAgICAgIGlmIChpdC0+bGluZV93cmFwID09IFdPUkRfV1JBUAorICAg ICAgICAgICAgICAmJiByYyA9PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAgICAgICAgUkVT VE9SRV9JVCAoaXQsICZzYXZlZF9pdCwgc2F2ZWRfaXRkYXRhKTsKKyAgICAgICAgICAvKiBXb3Jr YXJvdW5kIGZvciBidWcgIzI4OTM2IC0tIGNvcnJlY3QgdGhlIGVycm9uZW91cyBNT1ZFX1BPU19N QVRDSF9PUl9aVi4KKyAgICAgICAgICAjMjg5MzY6ICBgbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVf dG8nIHJldHVybnMgTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAgICAgICAgICBiZWZvcmUgcmVhY2hp bmcgWlYgd2hlbiB0aGUgbGF0dGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgQU5EIGB3b3Jk LXdyYXAnCisgICAgICAgICAgaXMgbm9uLW5pbDogIGFiY2RlZmdbWlZdLiAgVGhlIHdvcmthcm91 bmQgaXMgdG8gYWRkIGFuIGV4dHJhIGNoZWNrIHVzaW5nCisgICAgICAgICAgSVRfQ0hBUlBPUyBh bmQgY29tcGFyaW5nIGl0IHRvIFpWLiAqLworICAgICAgICAgIGlmIChpdC0+Y3VycmVudF94ID09 IG5ld194CisgICAgICAgICAgICAgICYmIHJjID09IE1PVkVfUE9TX01BVENIX09SX1pWCisgICAg ICAgICAgICAgICYmIElUX0NIQVJQT1MgKCppdCkgIT0gWlYpCisgICAgICAgICAgICByYyA9IE1P VkVfWF9SRUFDSEVEOworICAgICAgICAgIGJpZGlfdW5zaGVsdmVfY2FjaGUgKHNhdmVkX2l0ZGF0 YSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisvKiBNVUxUSVBMRV9DVVJTT1JTX0NBQ0hF OgorLSAgVGhlIGZpcnN0IGVsZW1lbnQgaXMgY29tcGFyZWQgdG8gdGhlIGBtdWx0aXBsZS1jdXJz b3JzLWNvbmYnIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgIHJlY2FsY3VsYXRl IGNvb3JkaW5hdGVzLiAgW1dlIGFsc28gY2hlY2sgd2hldGhlciB3aW5kb3ctc3RhcnQvd2luZG93 LWVuZCBjaGFuZ2VkLl0KKy0gIFRoZSBzZWNvbmQgZWxlbWVudCBjb250YWlucyBhbGwgcHJldmlv dXNseSBjYWxjdWxhdGVkIGNvb3JkaW5hdGVzLgorLSAgVGhlIHRoaXJkIGVsZW1lbnQgaXMgdGhl IGJ1ZmZlciB3aGVyZSB0aGUgYHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUnIHdhcyBzZXQuICBC ZWNhdXNlIHRoZQorICAgYHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUnIGlzIHdpbmRvdy1sb2Nh bCwgd2UgbmVlZCB0byBjaGVjayBib3RoIHRoZSB3aW5kb3cgYW5kIHRoZSBidWZmZXIuCisgICAg ICgoKDIyIDIwIDIgMCBjdXJzb3JfdHlwZSBjdXJzb3Jfd2lkdGggZm9yZWdyb3VuZCBiYWNrZ3Jv dW5kIGFjdGl2ZV9jdXJzb3JfcCBmbGF2b3IgcG9zaW50KQorICAgICAgICgzMyAyMCAzIDAgY3Vy c29yX3R5cGUgY3Vyc29yX3dpZHRoIGZvcmVncm91bmQgYmFja2dyb3VuZCBhY3RpdmVfY3Vyc29y X3AgZmxhdm9yIHBvc2ludCkKKyAgICAgICAoNDQgMjAgNCAwIGN1cnNvcl90eXBlIGN1cnNvcl93 aWR0aCBmb3JlZ3JvdW5kIGJhY2tncm91bmQgYWN0aXZlX2N1cnNvcl9wIGZsYXZvciBwb3NpbnQp CisgICAgICAgKDU1IDIwIDUgMCBjdXJzb3JfdHlwZSBjdXJzb3Jfd2lkdGggZm9yZWdyb3VuZCBi YWNrZ3JvdW5kIGFjdGl2ZV9jdXJzb3JfcCBmbGF2b3IgcG9zaW50KQorICAgICAgICg2NiAyMCA2 IDAgY3Vyc29yX3R5cGUgY3Vyc29yX3dpZHRoIGZvcmVncm91bmQgYmFja2dyb3VuZCBhY3RpdmVf Y3Vyc29yX3AgZmxhdm9yIHBvc2ludCkKKyAgICAgICAoNzcgMjAgNyAwIGN1cnNvcl90eXBlIGN1 cnNvcl93aWR0aCBmb3JlZ3JvdW5kIGJhY2tncm91bmQgYWN0aXZlX2N1cnNvcl9wIGZsYXZvciBw b3NpbnQpKQorICAgICAgKFdJTkRPVyB3aGVyZSBgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZScg d2FzIHNldC4pCisgICAgICAoQlVGRkVSIHdoZXJlIGB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hl JyB3YXMgc2V0LikpICovCisvKiBJZiBSRU1PVkUgaXMgMCwgdGhlbiBkcmF3IGZha2UgY3Vyc29y cy4gIElmIFJFTU9WRSBpcyAxLCB0aGVuIGVyYXNlIGZha2UgY3Vyc29ycy4gKi8KKwordm9pZAor bWNfZHJhd19tdWx0aXBsZV9jdXJzb3JzIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGFjdGl2ZV9j dXJzb3JfcCkKK3sKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5k OworICBkb3VibGUgY3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9C T1VORF07CisgIHN0YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyNpZmRlZiBHTFlQSF9ERUJV RworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmICghTklMUCAoQlZBUiAoWEJVRkZF UiAody0+Y29udGVudHMpLCBtdWx0aXBsZV9jdXJzb3JzX2NvbmYpKQorICAgICAgICAgIHx8ICFO SUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkpCisgICAgewor ICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAod2luZG93LCB3KTsK KyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9fc3RyaW5nICh3aW5k b3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEgKHdpbmRvd19zdHJp bmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19tdWx0aXBsZV9jdXJzb3JzICgl cylcbiIsIHdpbmRvd19jaGFyKTsKKyAgICB9CisjZW5kaWYKKyAgcHRyZGlmZl90IG9wb2ludF9w dCA9IFBUOworICBpbnQgb3BvaW50X3ggPSB3LT5waHlzX2N1cnNvci54OworICBpbnQgb3BvaW50 X3kgPSB3LT5waHlzX2N1cnNvci55OworICBpbnQgb3BvaW50X2hwb3MgPSB3LT5waHlzX2N1cnNv ci5ocG9zOworICBpbnQgb3BvaW50X3Zwb3MgPSB3LT5waHlzX2N1cnNvci52cG9zOworICBzdHJ1 Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgTGlzcF9PYmplY3QgYnVmID0gdy0+ Y29udGVudHM7CisgIENIRUNLX0JVRkZFUiAoYnVmKTsKKyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhC VUZGRVIgKGJ1Zik7CisgIHN0cnVjdCBidWZmZXIgKm9sZF9idWZmZXIgPSBOVUxMOworICBMaXNw X09iamVjdCB3aW5kb3c7CisgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CisgIC8qIFdoZW4gc3dp Y2hpbmcgdG8gYW5vdGhlciBidWZmZXIgKGUuZy4sIGEgbmV3IGJ1ZmZlciksIGB3LT5jb250ZW50 c2AgbWF5IG5vdAorICBuZWNlc3NhcmlseSBiZSB0aGUgYGN1cnJlbnRfYnVmZmVyYC4gIEluIHN1 Y2ggYSBjYXNlLCBhbGwgY2FsY3VsYXRpb25zIHdvdWxkCisgIGJlIHdyb25nIHVubGVzcyBgdy0+ Y29udGVudHNgIGlzIHNldCBhcyB0aGUgYGN1cnJlbnRfYnVmZmVyYC4gIFRoaXMgYXZvaWRzCisg IGVycm9ycyB0aGF0IGFyZSB0aW1lIGNvbnN1bWluZyB0byBkZWJ1ZzogIGJyZWFrIGFyZ3Nfb3V0 X29mX3JhbmdlICovCisgIGlmIChiICE9IGN1cnJlbnRfYnVmZmVyKQorICAgIHsKKyAgICAgIG9s ZF9idWZmZXIgPSBjdXJyZW50X2J1ZmZlcjsKKyAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKGIp OworICAgIH0KKyAgLyogYHN0YXJ0X2Rpc3BsYXknIGNhbGxzIGBpbml0X2l0ZXJhdG9yJyB3aGlj aCBjcmFzaGVzIEVtYWNzIGlmOgorICBlYXNzZXJ0IChjaGFycG9zIDwgMCB8fCAoY2hhcnBvcyA+ PSBCVUZfQkVHIChjdXJyZW50X2J1ZmZlcikgJiYgY2hhcnBvcyA8PSBaVikpCisgIGVhc3NlcnQg KGNoYXJwb3MgPT0gQllURV9UT19DSEFSIChieXRlcG9zKSkKKyAgVGhpcyBoYXBwZW5zIHdoZW4g bXVsdGlwbGUgY3Vyc29ycyBhcmUgYWN0aXZlIGFuZCB0aGUgdXNlciB0eXBlczogIE0teCAuLi4u ICovCisgIHB0cmRpZmZfdCBjaGFycG9zID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCk7Cisg IHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90ZXh0X3Bvc2l0aW9uOworICBTRVRfVEVYVF9QT1NfRlJP TV9NQVJLRVIgKHN0YXJ0X3RleHRfcG9zaXRpb24sIHctPnN0YXJ0KTsKKyAgcHRyZGlmZl90IGJ5 dGVwb3MgPSBCWVRFUE9TIChzdGFydF90ZXh0X3Bvc2l0aW9uKTsKKyAgYm9vbCBiYXJmX2NyYXNo X29uZSA9IChjaGFycG9zIDwgMCB8fCAoY2hhcnBvcyA+PSBCVUZfQkVHIChjdXJyZW50X2J1ZmZl cikgJiYgY2hhcnBvcyA8PSBaVikpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9v bmUpCisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50 ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgYm9vbCBiYXJmX2Ny YXNoX3R3byA9IChjaGFycG9zID09IEJZVEVfVE9fQ0hBUiAoYnl0ZXBvcykpID8gZmFsc2UgOiB0 cnVlOworICBpZiAoYmFyZl9jcmFzaF90d28pCisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIp CisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJu OworICAgIH0KKyAgLyogYG1hdHJpeF9yb3cnIGluIGBkaXNwbmV3LmNgIGNvbnRhaW5zIHRoZSBm b2xsb3dpbmcgdGVzdHMsCisgIGVhc3NlcnQgKG1hdHJpeCAmJiBtYXRyaXgtPnJvd3MpOworICBl YXNzZXJ0IChyb3cgPj0gMCAmJiByb3cgPCBtYXRyaXgtPm5yb3dzKTsgKi8KKyAgYm9vbCBiYXJm X2NyYXNoX3RocmVlID0gKHctPmN1cnJlbnRfbWF0cml4ICYmIHctPmN1cnJlbnRfbWF0cml4LT5y b3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfdGhyZWUpCisgICAgeworICAg ICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZm ZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgYm9vbCBiYXJmX2NyYXNoX2ZvdXIgPSAob3Bv aW50X3Zwb3MgPj0gMCAmJiBvcG9pbnRfdnBvcyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cykg PyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX2ZvdXIpCisgICAgeworICAgICAgaWYg KG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOwor ICAgICAgcmV0dXJuOworICAgIH0KKyAgc3RydWN0IGl0IGl0OworICB2b2lkICppdGRhdGEgPSBi aWRpX3NoZWx2ZV9jYWNoZSAoKTsKKyAgc3RydWN0IGl0IHNhdmVkX2l0X2Zvcl93aW5kb3dfc3Rh cnQ7CisgIHZvaWQgKnNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0ID0gTlVMTDsKKyAgcHRy ZGlmZl90IGl0X3N0YXJ0LCBpdF9lbmQ7CisgIGludCBmaXJzdF94LCBsYXN0X3g7CisgIGludCBs bnVtX3dpZHRoID0gMDsKKyAgaW50IGxudW1fcGl4ZWxfd2lkdGggPSAwOworICBpbnQgbmV3X3gg PSAwOworICBwdHJkaWZmX3QgcG9zaW50ID0gLTE7CisgIGludCB4LCBmeCwgeSwgZnksIGhwb3Ms IHZwb3MsIGg7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGU7CisgIGludCBj dXJzb3Jfd2lkdGggPSAxOworICBMaXNwX09iamVjdCBzcGVjcywgbGlzcF90eXBlLCBmb3JlZ3Jv dW5kLCB2bGlzdCwgZm91cnRlZW5fZWxlbWVudHM7CisgIGludCBmbGF2b3I7CisgIExpc3BfT2Jq ZWN0IGJhY2tncm91bmQgPSBRbmlsOworICBMaXNwX09iamVjdCB0ZW1wID0gUW5pbDsKKyAgTGlz cF9PYmplY3QgcmVzdWx0ID0gUW5pbDsKKyAgc3RhcnRfZGlzcGxheSAoJml0LCB3LCBzdGFydF90 ZXh0X3Bvc2l0aW9uKTsKKyAgZmlyc3RfeCA9IGl0LmZpcnN0X3Zpc2libGVfeDsKKyAgbGFzdF94 ID0gaXQubGFzdF92aXNpYmxlX3g7CisgIGl0X3N0YXJ0ID0gSVRfQ0hBUlBPUyAoaXQpOworICBp dF9lbmQgPSBCVUZfWiAoWEJVRkZFUiAody0+Y29udGVudHMpKSAtIHctPndpbmRvd19lbmRfcG9z OworICBTQVZFX0lUIChzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRkYXRh X2Zvcl93aW5kb3dfc3RhcnQpOworICAvKiBGaW5pc2ggcHJpbWluZyB0aGUgSVQgZm9yIHBvdGVu dGlhbCBsaW5lIG51bWJlcnMuICovCisgIGlmICghTklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJz KQorICAgICAgJiYgIUVRIChWZGlzcGxheV9saW5lX251bWJlcnMsIFF2aXN1YWwpKQorICAgIHsK KyAgICAgIGl0LmZpcnN0X3Zpc2libGVfeCA9IDA7CisgICAgICBtb3ZlX2l0X2J5X2xpbmVzICgm aXQsIDEpOworICAgICAgbG51bV93aWR0aCA9IGl0LmxudW1fd2lkdGg7CisgICAgICBsbnVtX3Bp eGVsX3dpZHRoID0gaXQubG51bV9waXhlbF93aWR0aDsKKyAgICAgIFJFU1RPUkVfSVQgKCZpdCwg JnNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0 KTsKKyAgICAgIGl0LmZpcnN0X3Zpc2libGVfeCA9IGZpcnN0X3g7CisgICAgICBpdC5sYXN0X3Zp c2libGVfeCA9IGxhc3RfeDsKKyAgICAgIGl0LmxudW1fd2lkdGggPSBsbnVtX3dpZHRoOworICAg ICAgaXQubG51bV9waXhlbF93aWR0aCA9IGxudW1fcGl4ZWxfd2lkdGg7CisgICAgICBTQVZFX0lU IChzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3df c3RhcnQpOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgRVJBU0UgVEhFIFJFQUwgX0lOQUNUSVZFXyBDVVJTT1IKKyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworICAvKiBgZGlzcGxheV9hbmRfc2V0X2N1cnNvcicgcHJvcGVybHkgc2V0 cyBgdy0+cGh5c19jdXJzb3IueC95L2hwb3MvdnBvc2Agd2hlbgorICB0aGUgY3Vyc29yIGlzIE9O LiAqLworLyogYHctPnBoeXNfY3Vyc29yLngveS9ocG9zL3Zwb3NgIGFyZSBpbmNvcnJlY3QgYWZ0 ZXIgZXZhbHVhdGluZyAoc2Nyb2xsLWxlZnQgMSkKK2EgY291cGxlIG9mIHRpbWVzLiAgUmVkaXNw bGF5IGVyYXNlcyB0aGUgcmVhbCBjdXJzb3IgYWxtb3N0IGltbWVkaWF0ZWx5IGFmdGVyCitgbWNf ZHJhd19jcm9zc2hhaXJzJyBydW5zIGl0cyBjb3Vyc2UgLS0gYWxtb3N0IHRvbyBxdWlja2x5IHRv IHNlZSBpdCBoYXBwZW5pbmcuCitUaGUgY2hhcmFjdGVyIHdoZXJlIEVtYWNzIHRoaW5rcyB0aGUg cmVhbCBjdXJzb3IgaXMgbG9jYXRlZCBnZXRzIHJlZHJhd24sIGFsYmlldAord2l0aG91dCB0aGUg cmVhbCBjdXJzb3IuICBFbWFjcyB0aGlua3MgdGhlIHJlYWwgY3Vyc29yIGlzIG9uZSBjaGFyYWN0 ZXIgdG8gdGhlCityaWdodCBvZiB3aGVyZSBpdCBzaG91bGQgYmUgLS0gdGhpcyBpcyBtb3N0IGxp a2VseSBkdWUgdG8gYW4gaW5jb3JyZWN0IEhQT1MuCitUaGlzIHBoZW5vbWVuYSBkb2VzIG5vdCBv Y2N1ciB3aGVuIChzY3JvbGwtbGVmdCAxKSBpcyBjYWxsZWQgaW50ZXJhY3RpdmVseTsgZS5nLiwK K2hvcml6b250YWwgc2Nyb2xsIHdoZWVsLiAgSW5hc211Y2ggYXMgYGVyYXNlX3BoeXNfY3Vyc29y JyB1cGRhdGVzIG1vcmUgdGhhbgorbWVyZWx5IHRoZSBhZm9yZW1lbnRpb25lZCBjb29yZGluYXRl cywgcmVzZXR0aW5nIHRob3NlIGNvb3JkaW5hdGVzIGFmdGVyIHRoZSBmYWN0CitpcyBpbnN1ZmZp Y2llbnQgdG8gZml4IHRoZSBwcm9ibGVtLiAgV2UgdXNlIGB3LT5vdXRwdXRfY3Vyc29yLngveS9o cG9zL3Zwb3NgCitiZWNhdXNlIHRob3NlIGNvb3JkaW5hdGVzIGFyZSBjb3JyZWN0LiAgV2UgZml4 IGB3LT5waHlzX2N1cnNvci54L3kvaHBvcy92cG9zYAorQkVGT1JFIGNhbGxpbmcgYGVyYXNlX3Bo eXNfY3Vyc29yJyBzbyB0aGF0IG90aGVyIGdvb2RpZXMgYXJlIHVwZGF0ZWQuICovCisgIGlmICh3 LT5oc2Nyb2xsID4gMCkKKyAgICB7CisgICAgICB3LT5waHlzX2N1cnNvci54ID0gdy0+b3V0cHV0 X2N1cnNvci54OworICAgICAgdy0+cGh5c19jdXJzb3IueSA9IHctPm91dHB1dF9jdXJzb3IueTsK KyAgICAgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSB3LT5vdXRwdXRfY3Vyc29yLmhwb3M7CisgICAg ICB3LT5waHlzX2N1cnNvci52cG9zID0gdy0+b3V0cHV0X2N1cnNvci52cG9zOworICAgIH0KKyAg ZXJhc2VfcGh5c19jdXJzb3IgKHcpOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAg ICAgICAgICAgICAgICAgICAgIFJFUExBQ0UgVEhFIFJFQUwgQ1VSU09SCisqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKyAgcHRyZGlmZl90IGN1cnJlbnRfY29sOworICBib29sIGZpbGxfY29sdW1u X3AgPSAhTklMUCAoQlZBUiAoYiwgZmlsbF9jb2x1bW4pKTsKKyAgcHRyZGlmZl90IGZpbGxfY29s ID0gWEZJWE5VTSAoQlZBUiAoYiwgZmlsbF9jb2x1bW4pKTsKKyAgZW51bSBmYWNlX2lkIGV2ZW5f ZmFjZV9pZCA9CisgICAgKCFhY3RpdmVfY3Vyc29yX3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhC VUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAg PyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLW51bWJlcmVkLWNvbHVt bi1pbmFjdGl2ZS1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwg aW50ZXJuICgiKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3Qg ZmFjZSAqZXZlbl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBldmVuX2ZhY2VfaWQpOworICBMaXNw X09iamVjdCBldmVuX2NvbG9yID0gZXZlbl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lO REVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChldmVuX2NvbG9yKTsKKyAgTGlzcF9PYmplY3QgZXZlbl9j b2xvcl92ZWN0b3IgPSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywgZXZlbl9jb2xvcik7CisgIGVu dW0gZmFjZV9pZCBvZGRfZmFjZV9pZCA9CisgICAgKCFhY3RpdmVfY3Vyc29yX3AKKyAgICAgJiYg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93 aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vZGQt bnVtYmVyZWQtY29sdW1uLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1l ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1udW1iZXJlZC1jb2x1bW4tZmFjZSIpLCB0cnVl KTsKKyAgc3RydWN0IGZhY2UgKm9kZF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBvZGRfZmFjZV9p ZCk7CisgIExpc3BfT2JqZWN0IG9kZF9jb2xvciA9IG9kZF9mYWNlLT5sZmFjZVtMRkFDRV9GT1JF R1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChvZGRfY29sb3IpOworICBMaXNwX09iamVj dCBvZGRfY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIG9kZF9jb2xvcik7 CisgIGVudW0gZmFjZV9pZCBmaWxsX2ZhY2VfaWQgPQorICAgICghYWN0aXZlX2N1cnNvcl9wCisg ICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnNfaW5h Y3RpdmVfd2luZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAo IistYmV5b25kLWZpbGwtY29sdW1uLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1 cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWJleW9uZC1maWxsLWNvbHVtbi1mYWNlIiks IHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZmlsbF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmaWxs X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBmaWxsX2NvbG9yID0gZmlsbF9mYWNlLT5sZmFjZVtM RkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChmaWxsX2NvbG9yKTsKKyAg TGlzcF9PYmplY3QgZmlsbF9jb2xvcl92ZWN0b3IgPSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywg ZmlsbF9jb2xvcik7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdyA9IE1BVFJJWF9ST1cg KHctPmN1cnJlbnRfbWF0cml4LCBvcG9pbnRfdnBvcyk7CisgIHN0cnVjdCBnbHlwaCAqcGh5c19j dXJzb3JfZ2x5cGg7CisgIGludCBmYWNlX2lkID0gKChwaHlzX2N1cnNvcl9nbHlwaCA9IGdldF9w aHlzX2N1cnNvcl9nbHlwaCAodykpID09IE5VTEwpCisgICAgICAgICAgICAgICAgID8gREVGQVVM VF9GQUNFX0lECisgICAgICAgICAgICAgICAgIDogcGh5c19jdXJzb3JfZ2x5cGgtPmZhY2VfaWQ7 CisgIGludCBvcG9pbnRfZnggPSAtMTsKKyAgaW50IG9wb2ludF9meSA9IC0xOworICBpbnQgb3Bv aW50X2ggPSAtMTsKKyAgLyogRklYTUU6ICBQdXQgaW4gc29tZSBjb2RlIHRvIGRlZmF1bHQgdG8g SE9MTE9XX0JPWF9DVVJTT1IgaWYgdGhlIHVzZXIgaGFzCisgIHVud2l0dGluZ2x5IGNvbWUgdXAg d2l0aCBzb21lIHVuYWNjZXB0YWJsZSBmb3JtIG9mIHVucmVjb2duaXplZCBjdXJzb3IgdHlwZS4g Ki8KKyAgTGlzcF9PYmplY3QgY3Vyc29yX2xpc3BfdHlwZSA9IEJWQVIgKGIsIG1jX3JlYWxfZmFr ZV9jdXJzb3IpOworICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIHRlbXBfY3Vyc29yX3R5cGUgPSAo Q09OU1AgKGN1cnNvcl9saXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPyBtY19saXNwX3RvX2N1cnNvcl90eXBlIChYQ0FSIChjdXJzb3JfbGlz cF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog bWNfbGlzcF90b19jdXJzb3JfdHlwZSAoY3Vyc29yX2xpc3BfdHlwZSk7CisgIGludCB0ZW1wX2N1 cnNvcl93aWR0aCA9IChDT05TUCAoY3Vyc29yX2xpc3BfdHlwZSkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICA/IFhGSVhOVU0gKFhDQVIgKFhDRFIgKGN1cnNvcl9saXNwX3R5cGUpKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKyAgZW51bSBmYWNlX2lkIGN1cnNvcl9mYWNl X2lkID0KKyAgICAoIWFjdGl2ZV9jdXJzb3JfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZF UiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxv b2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3Rp dmUtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAo IistcmVhbC1mYWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqY3Vyc29y X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGN1cnNvcl9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3Qg Y3Vyc29yX2NvbG9yID0gY3Vyc29yX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhd OworICBDSEVDS19TVFJJTkcgKGN1cnNvcl9jb2xvcik7CisgIGlmIChvcG9pbnRfcHQgPj0gaXRf c3RhcnQKKyAgICAgICYmIG9wb2ludF9wdCA8PSBpdF9lbmQpCisgICAgeworICAgICAgUkVTVE9S RV9JVCAoJml0LCAmc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgc2F2ZWRfaXRkYXRhX2Zvcl93 aW5kb3dfc3RhcnQpOworICAgICAgbW92ZV9pdF90byAoJml0LCBvcG9pbnRfcHQsIGl0Lmxhc3Rf dmlzaWJsZV94LCBpdC5sYXN0X3Zpc2libGVfeSAtIDEsIC0xLAorICAgICAgICAgICAgICAgICAg TU9WRV9UT19QT1MgfCBNT1ZFX1RPX1ggfCBNT1ZFX1RPX1kpOworICAgIH0KKyAgaWYgKElUX0NI QVJQT1MgKGl0KSA9PSBvcG9pbnRfcHQpCisgICAgeworICAgICAgaW50IHZvZmZzZXQgPSBpdC52 cG9zOworICAgICAgY3VycmVudF9jb2wgPSBtY19jdXJyZW50X2NvbHVtbiAodywgb3BvaW50X3B0 KTsKKyAgICAgIC8qIHJlZCAqLworICAgICAgaWYgKGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAg ICAgICAgJiYgIWZpbGxfY29sdW1uX3ApCisgICAgICAgIGZvcmVncm91bmQgPSBvZGRfY29sb3Jf dmVjdG9yOworICAgICAgLyogeWVsbG93ICovCisgICAgICBpZiAoY3VycmVudF9jb2wgJSAyID09 IDAKKyAgICAgICAgICAmJiAhZmlsbF9jb2x1bW5fcCkKKyAgICAgICAgZm9yZWdyb3VuZCA9IGV2 ZW5fY29sb3JfdmVjdG9yOworICAgICAgLyogcmVkICovCisgICAgICBpZiAoY3VycmVudF9jb2wg JSAyICE9IDAKKyAgICAgICAgICAmJiBmaWxsX2NvbHVtbl9wCisgICAgICAgICAgJiYgY3VycmVu dF9jb2wgPD0gZmlsbF9jb2wpCisgICAgICAgIGZvcmVncm91bmQgPSBvZGRfY29sb3JfdmVjdG9y OworICAgICAgLyogeWVsbG93ICovCisgICAgICBpZiAoY3VycmVudF9jb2wgJSAyID09IDAKKyAg ICAgICAgICAmJiBmaWxsX2NvbHVtbl9wCisgICAgICAgICAgJiYgY3VycmVudF9jb2wgPD0gZmls bF9jb2wpCisgICAgICAgIGZvcmVncm91bmQgPSBldmVuX2NvbG9yX3ZlY3RvcjsKKyAgICAgIC8q IGdyZWVuICovCisgICAgICBpZiAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICYmIGN1cnJlbnRf Y29sID4gZmlsbF9jb2wpCisgICAgICAgIGZvcmVncm91bmQgPSBmaWxsX2NvbG9yX3ZlY3RvcjsK KyAgICAgIExpc3BfT2JqZWN0IGN1cnNvcl9mZyA9IChhY3RpdmVfY3Vyc29yX3ApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IGZvcmVncm91bmQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGN1cnNvcl9jb2xvcik7CisgICAg ICBSRVNUT1JFX0lUICgmaXQsICZzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBzYXZlZF9pdGRh dGFfZm9yX3dpbmRvd19zdGFydCk7CisgICAgICBtb3ZlX2l0X2J5X2xpbmVzICgmaXQsIHZvZmZz ZXQpOworICAgICAgbWNfbW92ZV9pdCAoJml0LCBvcG9pbnRfcHQsIHRlbXBfY3Vyc29yX3R5cGUs IHRlbXBfY3Vyc29yX3dpZHRoLCBjdXJzb3JfZmcsIGFjdGl2ZV9jdXJzb3JfcCwgTVVMVElQTEVf Q1VSU09SUywgJnJlc3VsdCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgeCA9 IC0xOworICAgICAgICBmeCA9IC0xOworICAgICAgICB5ID0gLTE7CisgICAgICAgIGZ5ID0gLTE7 CisgICAgICAgIGhwb3MgPSAtMTsKKyAgICAgICAgdnBvcyA9IC0xOworICAgICAgICBoID0gLTE7 CisgICAgICAgIGZvcmVncm91bmQgPSBtY19mZ19sc2wgKGl0LncsIERFRkFVTFRfRkFDRV9JRCk7 CisgICAgICAgIGJhY2tncm91bmQgPSBtY19iZ19sc2wgKGl0LncsIERFRkFVTFRfRkFDRV9JRCk7 CisgICAgICAgIGZsYXZvciA9IE1DX0dMWVBIOworICAgICAgICBmb3VydGVlbl9lbGVtZW50cyA9 IGxpc3RuIChDT05TVFlQRV9IRUFQLCAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2VfZml4bnVtICh4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VfZml4bnVtIChmeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2Zp eG51bSAoeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAo ZnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0gKGhwb3Mp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0gKHZwb3MpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0gKGgpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfY3Vyc29yX3R5cGVfdG9fbGlzcCAodGVtcF9j dXJzb3JfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51 bSAoY3Vyc29yX3dpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVn cm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0gKGFjdGl2ZV9jdXJzb3Jf cCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAoZmxhdm9y KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZml4bnVtIChvcG9pbnRf cHQpKTsKKyAgICAgICAgc3BlY3MgPSBsaXN0biAoQ09OU1RZUEVfSEVBUCwgMywgbWFrZV9maXhu dW0gKG9wb2ludF9wdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1jX2N1cnNvcl90eXBlX3RvX2xpc3AgKHRlbXBfY3Vyc29yX3R5cGUpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kKTsKKyAgICAgICAgdGVtcCA9 IEZjb25zIChzcGVjcywgRmNvbnMgKGZvdXJ0ZWVuX2VsZW1lbnRzLCBRbmlsKSk7CisgICAgICAg IHJlc3VsdCA9IEZjb25zICh0ZW1wLCByZXN1bHQpOworICAgICAgfQorLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisgIGZvciAodmxpc3QgPSBCVkFSIChiLCBtdWx0aXBsZV9jdXJzb3JzX2NvbmYp OworICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAgdmxpc3QgPSBYQ0RSICh2bGlzdCkpCisg ICAgeworICAgICAgc3BlY3MgPSBYQ0FSICh2bGlzdCk7CisgICAgICBwb3NpbnQgPSBYRklYTlVN IChGbnRoIChtYWtlX2ZpeG51bSAoMCksIHNwZWNzKSk7CisgICAgICBsaXNwX3R5cGUgPSBGbnRo IChtYWtlX2ZpeG51bSAoMSksIHNwZWNzKTsKKyAgICAgIGlmIChDT05TUCAobGlzcF90eXBlKSkK KyAgICAgICAgY3Vyc29yX3R5cGUgPSBtY19saXNwX3RvX2N1cnNvcl90eXBlIChYQ0FSIChsaXNw X3R5cGUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90 b19jdXJzb3JfdHlwZSAobGlzcF90eXBlKTsKKyAgICAgIGlmIChDT05TUCAobGlzcF90eXBlKSkK KyAgICAgICAgY3Vyc29yX3dpZHRoID0gWEZJWE5VTSAoWENBUiAoWENEUiAobGlzcF90eXBlKSkp OworICAgICAgICBlbHNlCisgICAgICAgICAgY3Vyc29yX3dpZHRoID0gMTsKKyAgICAgIGZvcmVn cm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoMiksIHNwZWNzKTsKKyAgICAgIGlmIChTVFJJTkdQ IChmb3JlZ3JvdW5kKSkKKyAgICAgICAgZm9yZWdyb3VuZCA9IG1jX2NvbG9yX3ZlY3Rvcl9jYWxj ICh3LCBmb3JlZ3JvdW5kKTsKKyAgICAgIGlmIChwb3NpbnQgPj0gaXRfc3RhcnQKKyAgICAgICAg ICAmJiBwb3NpbnQgPD0gaXRfZW5kKQorICAgICAgICB7CisgICAgICAgICAgUkVTVE9SRV9JVCAo Jml0LCAmc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3df c3RhcnQpOworICAgICAgICAgIG1vdmVfaXRfdG8gKCZpdCwgcG9zaW50LCBpdC5sYXN0X3Zpc2li bGVfeCwgaXQubGFzdF92aXNpYmxlX3kgLSAxLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICBN T1ZFX1RPX1BPUyB8IE1PVkVfVE9fWCB8IE1PVkVfVE9fWSk7CisgICAgICAgIH0KKyAgICAgIGlm IChJVF9DSEFSUE9TIChpdCkgPT0gcG9zaW50KQorICAgICAgICB7CisgICAgICAgICAgaW50IHZv ZmZzZXQgPSBpdC52cG9zOworICAgICAgICAgIGN1cnJlbnRfY29sID0gbWNfY3VycmVudF9jb2x1 bW4gKHcsIHBvc2ludCk7CisgICAgICAgICAgaWYgKE5JTFAgKGZvcmVncm91bmQpKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAvKiByZWQgKi8KKyAgICAgICAgICAgICAgaWYgKGN1cnJl bnRfY29sICUgMiAhPSAwCisgICAgICAgICAgICAgICAgICAmJiAhZmlsbF9jb2x1bW5fcCkKKyAg ICAgICAgICAgICAgICBmb3JlZ3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAgICAgICAgICAg ICAgLyogeWVsbG93ICovCisgICAgICAgICAgICAgIGlmIChjdXJyZW50X2NvbCAlIDIgPT0gMAor ICAgICAgICAgICAgICAgICAgJiYgIWZpbGxfY29sdW1uX3ApCisgICAgICAgICAgICAgICAgZm9y ZWdyb3VuZCA9IGV2ZW5fY29sb3JfdmVjdG9yOworICAgICAgICAgICAgICAvKiByZWQgKi8KKyAg ICAgICAgICAgICAgaWYgKGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAgICAgICAgICAgICAgICAm JiBmaWxsX2NvbHVtbl9wCisgICAgICAgICAgICAgICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxs X2NvbCkKKyAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAg ICAgICAgICAgICAgLyogeWVsbG93ICovCisgICAgICAgICAgICAgIGlmIChjdXJyZW50X2NvbCAl IDIgPT0gMAorICAgICAgICAgICAgICAgICAgJiYgZmlsbF9jb2x1bW5fcAorICAgICAgICAgICAg ICAgICAgJiYgY3VycmVudF9jb2wgPD0gZmlsbF9jb2wpCisgICAgICAgICAgICAgICAgZm9yZWdy b3VuZCA9IGV2ZW5fY29sb3JfdmVjdG9yOworICAgICAgICAgICAgICAvKiBncmVlbiAqLworICAg ICAgICAgICAgICBpZiAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICAgICAgICAgJiYgY3VycmVu dF9jb2wgPiBmaWxsX2NvbCkKKyAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kID0gZmlsbF9jb2xv cl92ZWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgUkVTVE9SRV9JVCAoJml0LCAmc2F2 ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQpOwor ICAgICAgICAgIG1vdmVfaXRfYnlfbGluZXMgKCZpdCwgdm9mZnNldCk7CisgICAgICAgICAgbWNf bW92ZV9pdCAoJml0LCBwb3NpbnQsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91 bmQsIGFjdGl2ZV9jdXJzb3JfcCwgTVVMVElQTEVfQ1VSU09SUywgJnJlc3VsdCk7CisgICAgICAg IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHggPSAtMTsKKyAgICAg ICAgICAgIGZ4ID0gLTE7CisgICAgICAgICAgICB5ID0gLTE7CisgICAgICAgICAgICBmeSA9IC0x OworICAgICAgICAgICAgaHBvcyA9IC0xOworICAgICAgICAgICAgdnBvcyA9IC0xOworICAgICAg ICAgICAgaCA9IC0xOworICAgICAgICAgICAgZm9yZWdyb3VuZCA9IG1jX2ZnX2xzbCAoaXQudywg REVGQVVMVF9GQUNFX0lEKTsKKyAgICAgICAgICAgIGJhY2tncm91bmQgPSBtY19iZ19sc2wgKGl0 LncsIERFRkFVTFRfRkFDRV9JRCk7CisgICAgICAgICAgICBmbGF2b3IgPSBNQ19HTFlQSDsKKyAg ICAgICAgICAgIGZvdXJ0ZWVuX2VsZW1lbnRzID0gbGlzdG4gKENPTlNUWVBFX0hFQVAsIDE0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZml4bnVtICh4KSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAoZngpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZml4bnVtICh5KSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAoZnkpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZml4bnVtIChocG9zKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAodnBvcyksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0gKGgpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jX2N1cnNvcl90eXBlX3RvX2xpc3AgKGN1 cnNvcl90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2Zp eG51bSAoY3Vyc29yX3dpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tn cm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0g KGFjdGl2ZV9jdXJzb3JfcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFrZV9maXhudW0gKGZsYXZvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZV9maXhudW0gKHBvc2ludCkpOworICAgICAgICAgICAgcmVzdWx0ID0gRmNvbnMgKGZv dXJ0ZWVuX2VsZW1lbnRzLCByZXN1bHQpOworICAgICAgICAgIH0KKyAgICB9CisvKiBgdy0+bXVs dGlwbGVfY3Vyc29yc19jYWNoZScgaXMgc2V0IGZvciB0aGUgd2luZG93LCBub3QgYnVmZmVyK3dp bmRvdyAtLSBpLmUuLCBhbGwgYnVmZmVycyBhcHBlYXJpbmcKK2luIHRoZSBzYW1lIHdpbmRvdyB2 aWEgYHN3aXRjaC10by1idWZmZXInIHdpbGwgaGF2ZSBgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNo ZScuICBUaGlzIGJlaGF2aW9yCitpcyBjb25zaXN0ZW50IHdpdGggZnVuY3Rpb25zIHN1Y2ggYXMg YHNldC13aW5kb3ctZGlzcGxheS10YWJsZScuICBXZSBkZWFsIHdpdGggdGhpcyBpbgorYG5zdGVy bS5tJyAvIGB3MzJ0ZXJtLmMnIC8gYHh0ZXJtLmMnIGJ5IGNvbXBhcmluZyBgdy0+Y29udGVudHMn IHRvIHRoZSB2YWx1ZSBvZiB0aGUgYGJ1ZicKK3N0b3JlZCBpbiBgdy0+bXVsdGlwbGVfY3Vyc29y c19jYWNoZScuICovCisgIGlmICghTklMUCAocmVzdWx0KSkKKyAgICB3c2V0X211bHRpcGxlX2N1 cnNvcnNfY2FjaGUgKHcsIGxpc3RuIChDT05TVFlQRV9IRUFQLCAzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRnJldmVyc2UgKHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGY29ucyAod2luZG93LCBRbmlsKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZjb25zICh3LT5jb250ZW50cywgUW5pbCkpKTsKKyAgdy0+bWMuZHJhd19t dWx0aXBsZV9jdXJzb3JzID0gZmFsc2U7CisgIGJpZGlfdW5zaGVsdmVfY2FjaGUgKGl0ZGF0YSwg ZmFsc2UpOworICBpZiAob2xkX2J1ZmZlcikKKyAgICBzZXRfYnVmZmVyX2ludGVybmFsIChvbGRf YnVmZmVyKTsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZW5kID0gY2xvY2soKTsKKyAgY3B1 X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOwor ICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1lLCAwLCAwLCBjcHVfdGltZV91c2Vk KTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX2RyYXdfbXVsdGlwbGVfY3Vyc29yczogIFRJ TUUgKCVzKSIsIGJ1Zl90aW1lKTsKKyNlbmRpZgorKi8KK30KKwordm9pZAorbWNfcmVkcmF3X211 bHRpcGxlX2N1cnNvcnMgKHN0cnVjdCB3aW5kb3cgKncpCit7CisvKgorI2lmZGVmIEdMWVBIX0RF QlVHCisgIGNsb2NrX3Qgc3RhcnQsIGVuZDsKKyAgZG91YmxlIGNwdV90aW1lX3VzZWQ7CisgIGNo YXIgYnVmX3RpbWVbREJMX0JVRlNJWkVfQk9VTkRdOworICBzdGFydCA9IGNsb2NrKCk7CisjZW5k aWYKKyovCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgaWYgKHRyYWNlX3JlZGlzcGxheV9wCisgICAg ICAmJiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29y c19jb25mKSkKKyAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMp LCBjcm9zc2hhaXJzKSkpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgICAg IFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5n ID0gRnByaW4xX3RvX3N0cmluZyAod2luZG93LCBRbmlsKTsKKyAgICAgIGNoYXIgKndpbmRvd19j aGFyID0gU1NEQVRBICh3aW5kb3dfc3RyaW5nKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1j X3JlZHJhd19tdWx0aXBsZV9jdXJzb3JzICglcylcbiIsIHdpbmRvd19jaGFyKTsKKyAgICB9Cisj ZW5kaWYKKyAgTGlzcF9PYmplY3Qgdmxpc3QgPSBRbmlsOworICBMaXNwX09iamVjdCBmb3VydGVl bl9lbGVtZW50cyA9IFFuaWw7CisgIGludCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIGg7Cisg IGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGU7CisgIGludCBjdXJzb3Jfd2lkdGg7 CisgIExpc3BfT2JqZWN0IGZvcmVncm91bmQgPSBRbmlsOworICBMaXNwX09iamVjdCBiYWNrZ3Jv dW5kID0gUW5pbDsKKyAgYm9vbCBhY3RpdmVfY3Vyc29yX3AgPSBmYWxzZTsKKyAgaW50IGZsYXZv cjsKKyAgcHRyZGlmZl90IHBvc2ludDsKKyAgZm9yICh2bGlzdCA9IFhDQVIgKHctPm11bHRpcGxl X2N1cnNvcnNfY2FjaGUpOworICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAgdmxpc3QgPSBY Q0RSICh2bGlzdCkpCisgICAgeworICAgICAgZm91cnRlZW5fZWxlbWVudHMgPSBYQ0FSICh2bGlz dCk7CisgICAgICB4ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDApLCBmb3VydGVlbl9l bGVtZW50cykpOworICAgICAgZnggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIGZv dXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICB5ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0g KDIpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgZnkgPSBYRklYTlVNIChGbnRoIChtYWtl X2ZpeG51bSAoMyksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBocG9zID0gWEZJWE5VTSAo Rm50aCAobWFrZV9maXhudW0gKDQpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgdnBvcyA9 IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICg1KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAg ICAgIGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNiksIGZvdXJ0ZWVuX2VsZW1lbnRz KSk7CisgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKEZudGggKG1h a2VfZml4bnVtICg3KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGN1cnNvcl93aWR0aCA9 IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICg4KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAg ICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoOSksIGZvdXJ0ZWVuX2VsZW1lbnRz KTsKKyAgICAgIGJhY2tncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoMTApLCBmb3VydGVlbl9l bGVtZW50cyk7CisgICAgICBhY3RpdmVfY3Vyc29yX3AgPSBYRklYTlVNIChGbnRoIChtYWtlX2Zp eG51bSAoMTEpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgZmxhdm9yID0gWEZJWE5VTSAo Rm50aCAobWFrZV9maXhudW0gKDEyKSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIHBvc2lu dCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgxMyksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7 CisgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9z LCBoLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lk dGgsIGZvcmVncm91bmQsIGFjdGl2ZV9jdXJzb3JfcCwgTUNfR0xZUEgsIHBvc2ludCk7CisgICAg fQorLyoKKyNpZmRlZiBHTFlQSF9ERUJVRworICBlbmQgPSBjbG9jaygpOworICBjcHVfdGltZV91 c2VkID0gKChkb3VibGUpIChlbmQgLSBzdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CisgIGR0b2Fz dHIgKGJ1Zl90aW1lLCBzaXplb2YgYnVmX3RpbWUsIDAsIDAsIGNwdV90aW1lX3VzZWQpOworICBk ZWJ1Z19tZXRob2RfYWRkICh3LCAibWNfcmVkcmF3X211bHRpcGxlX2N1cnNvcnM6ICBUSU1FICgl cykiLCBidWZfdGltZSk7CisjZW5kaWYKKyovCit9CisKK3ZvaWQKK21jX2VyYXNlX211bHRpcGxl X2N1cnNvcnMgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZGVsZXRlX2NhY2hlKQoreworLyoKKyNp ZmRlZiBHTFlQSF9ERUJVRworICBjbG9ja190IHN0YXJ0LCBlbmQ7CisgIGRvdWJsZSBjcHVfdGlt ZV91c2VkOworICBjaGFyIGJ1Zl90aW1lW0RCTF9CVUZTSVpFX0JPVU5EXTsKKyAgc3RhcnQgPSBj bG9jaygpOworI2VuZGlmCisqLworI2lmZGVmIEdMWVBIX0RFQlVHCisgIGlmICh0cmFjZV9yZWRp c3BsYXlfcAorICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG11 bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIg KHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB3 aW5kb3c7CisgICAgICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAgICAgTGlzcF9PYmplY3Qg d2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5pbCk7CisgICAgICBj aGFyICp3aW5kb3dfY2hhciA9IFNTREFUQSAod2luZG93X3N0cmluZyk7CisgICAgICBmcHJpbnRm IChzdGRlcnIsICJtY19lcmFzZV9tdWx0aXBsZV9jdXJzb3JzICglcyk6ICBkZWxldGVfY2FjaGUg KCVkKVxuIiwgd2luZG93X2NoYXIsIGRlbGV0ZV9jYWNoZSk7CisgICAgfQorI2VuZGlmCisgIExp c3BfT2JqZWN0IHZsaXN0ID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgZm91cnRlZW5fZWxlbWVudHMg PSBRbmlsOworICBpbnQgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCBoOworICBlbnVtIHRleHRf Y3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlOworICBpbnQgY3Vyc29yX3dpZHRoOworICBMaXNwX09i amVjdCBmb3JlZ3JvdW5kID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgYmFja2dyb3VuZCA9IFFuaWw7 CisgIGJvb2wgYWN0aXZlX2N1cnNvcl9wID0gZmFsc2U7CisgIGludCBmbGF2b3I7CisgIHB0cmRp ZmZfdCBwb3NpbnQ7CisgIG1jX2VyYXNlX2dseXBoX2N1cnNvcnMgKHcsIHctPnBoeXNfY3Vyc29y LngsIHctPnBoeXNfY3Vyc29yLnksIHctPnBoeXNfY3Vyc29yLmhwb3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHctPnBoeXNfY3Vyc29yLnZwb3MsIHctPnBoeXNfY3Vyc29yX3R5cGUsIHct PnBoeXNfY3Vyc29yX3dpZHRoKTsKKyAgZm9yICh2bGlzdCA9IFhDQVIgKHctPm11bHRpcGxlX2N1 cnNvcnNfY2FjaGUpOworICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAgdmxpc3QgPSBYQ0RS ICh2bGlzdCkpCisgICAgeworICAgICAgZm91cnRlZW5fZWxlbWVudHMgPSBYQ0FSICh2bGlzdCk7 CisgICAgICB4ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDApLCBmb3VydGVlbl9lbGVt ZW50cykpOworICAgICAgZnggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIGZvdXJ0 ZWVuX2VsZW1lbnRzKSk7CisgICAgICB5ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDIp LCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgZnkgPSBYRklYTlVNIChGbnRoIChtYWtlX2Zp eG51bSAoMyksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBocG9zID0gWEZJWE5VTSAoRm50 aCAobWFrZV9maXhudW0gKDQpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgdnBvcyA9IFhG SVhOVU0gKEZudGggKG1ha2VfZml4bnVtICg1KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAg IGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNiksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7 CisgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKEZudGggKG1ha2Vf Zml4bnVtICg3KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGN1cnNvcl93aWR0aCA9IFhG SVhOVU0gKEZudGggKG1ha2VfZml4bnVtICg4KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAg IGZvcmVncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoOSksIGZvdXJ0ZWVuX2VsZW1lbnRzKTsK KyAgICAgIGJhY2tncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoMTApLCBmb3VydGVlbl9lbGVt ZW50cyk7CisgICAgICBhY3RpdmVfY3Vyc29yX3AgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51 bSAoMTEpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgZmxhdm9yID0gWEZJWE5VTSAoRm50 aCAobWFrZV9maXhudW0gKDEyKSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIHBvc2ludCA9 IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgxMyksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7Cisg ICAgICBpZiAoZmxhdm9yID09IE1DX0dMWVBIKQorICAgICAgICBtY19lcmFzZV9nbHlwaF9jdXJz b3JzICh3LCB4LCB5LCBocG9zLCB2cG9zLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmbGF2b3IgPT0gTUNfT1ZF UkxBWV9BUlJPV19CSVRNQVAKKyAgICAgICAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfT1ZFUkxB WV9BUlJPV19CSVRNQVBfSFNDTF9URU1QT1JBUlkKKyAgICAgICAgICAgICAgICB8fCBmbGF2b3Ig PT0gTUNfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BTkdMRQorICAgICAgICAgICAgICAgIHx8IGZs YXZvciA9PSBNQ19IT0xMT1dfUkVDVEFOR0xFCisgICAgICAgICAgICAgICAgfHwgZmxhdm9yID09 IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BTkdMRQorICAgICAgICAgICAgICAgIHx8IGZsYXZvciA9 PSBNQ19WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfVkVSVElD QUxfQkFSX0JBQ0tTTEFTSCkKKyAgICAgICAgICAgICAgY3Vyc29yX3R5cGUgPSBOT19GUklOR0Vf QklUTUFQOworICAgICAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIHgsIGZ4LCB5LCBm eSwgaHBvcywgdnBvcywgaCwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3Vyc29yX3dpZHRoLCBiYWNrZ3JvdW5kLCBhY3RpdmVfY3Vyc29yX3AsIGZsYXZv ciwgcG9zaW50KTsKKyAgICAgICAgICB9CisgICAgfQorICBpZiAoZGVsZXRlX2NhY2hlKQorICAg IHdzZXRfbXVsdGlwbGVfY3Vyc29yc19jYWNoZSAodywgUW5pbCk7CisgIHctPm1jLmVyYXNlX211 bHRpcGxlX2N1cnNvcnMgPSBmYWxzZTsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZW5kID0g Y2xvY2soKTsKKyAgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQpKSAvIENM T0NLU19QRVJfU0VDOworICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1lLCAwLCAw LCBjcHVfdGltZV91c2VkKTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX2VyYXNlX211bHRp cGxlX2N1cnNvcnM6ICBUSU1FICglcykiLCBidWZfdGltZSk7CisjZW5kaWYKKyovCit9CisKK3Zv aWQKK21jX2RyYXdfY3Jvc3NoYWlycyAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBhY3RpdmVfY3Vy c29yX3AsIGJvb2wgbWluaW1hbF9wKQoreworLyoKKyNpZmRlZiBHTFlQSF9ERUJVRworICBjbG9j a190IHN0YXJ0LCBlbmQ7CisgIGRvdWJsZSBjcHVfdGltZV91c2VkOworICBjaGFyIGJ1Zl90aW1l W0RCTF9CVUZTSVpFX0JPVU5EXTsKKyAgc3RhcnQgPSBjbG9jaygpOworI2VuZGlmCisqLworI2lm ZGVmIEdMWVBIX0RFQlVHCisgIGlmICh0cmFjZV9yZWRpc3BsYXlfcAorICAgICAgJiYgKCFOSUxQ IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisg ICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWly cykpKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3c7CisgICAgICBYU0VUV0lORE9X ICh3aW5kb3csIHcpOworICAgICAgTGlzcF9PYmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90 b19zdHJpbmcgKHdpbmRvdywgUW5pbCk7CisgICAgICBjaGFyICp3aW5kb3dfY2hhciA9IFNTREFU QSAod2luZG93X3N0cmluZyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19kcmF3X2Nyb3Nz aGFpcnMgKCVzKTogIGFjdGl2ZV9jdXJzb3JfcCAoJWQpIHwgbWluaW1hbF9wICglZClcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfY2hhciwgYWN0aXZlX2N1cnNvcl9wLCBtaW5p bWFsX3ApOworICAgIH0KKyNlbmRpZgorICBwdHJkaWZmX3Qgb3BvaW50X3B0ID0gKHcgPT0gWFdJ TkRPVyAoc2VsZWN0ZWRfd2luZG93KSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gUFQKKyAg ICAgICAgICAgICAgICAgICAgICAgIDogWEZJWE5VTSAoRm1hcmtlcl9wb3NpdGlvbiAody0+cG9p bnRtKSk7CisgIGludCBvcG9pbnRfeCA9IHctPnBoeXNfY3Vyc29yLng7CisgIGludCBvcG9pbnRf eSA9IHctPnBoeXNfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBvcyA9IHctPnBoeXNfY3Vyc29y Lmhwb3M7CisgIGludCBvcG9pbnRfdnBvcyA9IHctPnBoeXNfY3Vyc29yLnZwb3M7CisgIHN0cnVj dCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBMaXNwX09iamVjdCBidWYgPSB3LT5j b250ZW50czsKKyAgQ0hFQ0tfQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJV RkZFUiAoYnVmKTsKKyAgc3RydWN0IGJ1ZmZlciAqb2xkX2J1ZmZlciA9IE5VTEw7CisgIExpc3Bf T2JqZWN0IHdpbmRvdzsKKyAgWFNFVFdJTkRPVyAod2luZG93LCB3KTsKKyAgLyogV2hlbiBzd2lj aGluZyB0byBhbm90aGVyIGJ1ZmZlciAoZS5nLiwgYSBuZXcgYnVmZmVyKSwgYHctPmNvbnRlbnRz YCBtYXkgbm90CisgIG5lY2Vzc2FyaWx5IGJlIHRoZSBgY3VycmVudF9idWZmZXJgLiAgSW4gc3Vj aCBhIGNhc2UsIGFsbCBjYWxjdWxhdGlvbnMgd291bGQKKyAgYmUgd3JvbmcgdW5sZXNzIGB3LT5j b250ZW50c2AgaXMgc2V0IGFzIHRoZSBgY3VycmVudF9idWZmZXJgLiAgVGhpcyBhdm9pZHMKKyAg ZXJyb3JzIHRoYXQgYXJlIHRpbWUgY29uc3VtaW5nIHRvIGRlYnVnOiAgYnJlYWsgYXJnc19vdXRf b2ZfcmFuZ2UgKi8KKyAgaWYgKGIgIT0gY3VycmVudF9idWZmZXIpCisgICAgeworICAgICAgb2xk X2J1ZmZlciA9IGN1cnJlbnRfYnVmZmVyOworICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoYik7 CisgICAgfQorLyogZWFzc2VydCAoQ0hBUlBPUyAocG9zKSA+PSBCRUdWICYmIENIQVJQT1MgKHBv cykgPD0gWlYpOworICAgZWFzc2VydCAoY2hhcnBvcyA9PSBCWVRFX1RPX0NIQVIgKGJ5dGVwb3Mp KTsKKyAgIGVhc3NlcnQgKEJVRl9CRUdfQllURSAoYikgPD0gYnl0ZXBvcyAmJiBieXRlcG9zIDw9 IEJVRl9aX0JZVEUgKGIpKTsgKi8KKyAgcHRyZGlmZl90IGNoYXJwb3MgPSBtYXJrZXJfcG9zaXRp b24gKHctPnN0YXJ0KTsKKyAgcHRyZGlmZl90IGJ5dGVwb3MgPSBtYXJrZXJfYnl0ZV9wb3NpdGlv biAody0+c3RhcnQpOworICAvKiBFbGkgWi46ICBJZiB3aW5kb3cncyBzdGFydCBwb2ludCBpcyBp bnZhbGlkLCBpdCBtZWFucyB0aGUgd2luZG93IG5lZWRzIHRvIGJlCisgIHJlZGlzcGxheWVkLiAg QWdhaW4sIEknbSBub3Qgc3VyZSBJIHVuZGVyc3RhbmQgaG93IGRvIHlvdSBnZXQgaW50byB0aGlz IHNpdHVhdGlvbgorICBpbiB0aGUgbWlkZGxlIG9mIHJlZGlzcGxheS4gKi8KKyAgYm9vbCBiYXJm X2NyYXNoX29uZSA9IChjaGFycG9zID49IEJFR1YgJiYgY2hhcnBvcyA8PSBaVikgPyBmYWxzZSA6 IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX29uZSkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZl cikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1 cm47CisgICAgfQorICAvKiBFbGkgWi46ICBMaWtld2lzZS4gIE1hcmtlcnMgYXJlIHVwZGF0ZWQg d2hlbiBhIGJ1ZmZlciBpcyBtb2RpZmllZCwgc28gdGhpcworICBzaG91bGQgbmV2ZXIgaGFwcGVu LiAqLworICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKGNoYXJwb3MgPT0gQllURV9UT19DSEFSIChi eXRlcG9zKSkgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICB7Cisg ICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1 ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorICAvKiBgbWF0cml4X3JvdycgaW4gYGRpc3Bu ZXcuY2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgZWFzc2VydCAobWF0cml4ICYm IG1hdHJpeC0+cm93cyk7CisgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8IG1hdHJpeC0+bnJv d3MpOyAqLworICBib29sIGJhcmZfY3Jhc2hfdGhyZWUgPSAody0+Y3VycmVudF9tYXRyaXggJiYg dy0+Y3VycmVudF9tYXRyaXgtPnJvd3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFz aF90aHJlZSkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZl cl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorICBib29sIGJh cmZfY3Jhc2hfZm91ciA9IChvcG9pbnRfdnBvcyA+PSAwICYmIG9wb2ludF92cG9zIDwgdy0+Y3Vy cmVudF9tYXRyaXgtPm5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfZm91 cikKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRl cm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAoIUJVRkZFUlAg KGJ1ZikpCisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJf aW50ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKE5JTFAg KEJWQVIgKGIsIGNyb3NzaGFpcnMpKSkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAg ICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47Cisg ICAgfQorICBpZiAoTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyKSkK KyAgICAgICYmIE5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXIpKSkKKyAg ICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAo b2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTiBKT1VSTkVZIC4uLgorKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisgIHN0cnVjdCBpdCBpdDsKKyAgdm9pZCAqaXRkYXRhID0g YmlkaV9zaGVsdmVfY2FjaGUgKCk7CisgIHN0cnVjdCBpdCBzYXZlZF9pdF9mb3Jfd2luZG93X3N0 YXJ0OworICB2b2lkICpzYXZlZF9pdGRhdGFfZm9yX3dpbmRvd19zdGFydCA9IE5VTEw7CisgIHN0 cnVjdCBpdCBzYXZlZF9pdF9mb3JfaG9yaXpvbnRhbF9ydWxlcjsKKyAgdm9pZCAqc2F2ZWRfaXRk YXRhX2Zvcl9ob3Jpem9udGFsX3J1bGVyID0gTlVMTDsKKyAgc3RydWN0IHRleHRfcG9zIHN0YXJ0 X3RleHRfcG9zaXRpb247CisgIHB0cmRpZmZfdCBpdF9zdGFydDsKKyAgaW50IGZpcnN0X3gsIGxh c3RfeDsKKyAgaW50IGxudW1fd2lkdGggPSAwOworICBpbnQgbG51bV9waXhlbF93aWR0aCA9IDA7 CisgIGludCBmcmFtZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09MVU1OX1dJRFRIIChmKTsKKyAgaW50 IHRleHRfYXJlYV93aWR0aCA9IHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSk7CisgIGJv b2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gdy0+b3V0cHV0X2N1cnNvci54ICsgZnJhbWVfY2hhcl93 aWR0aCA+PSB0ZXh0X2FyZWFfd2lkdGg7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdzsK KyAgaW50IGhlYWRlcl9saW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcp OworICBpbnQgY3Vyc29yX3dpZHRoID0gMTsKKyAgcHRyZGlmZl90IHBvc2ludCA9IC0xOworICBi b29sIGF1dG9faHNjcm9sbF9tb2RlX3AgPSBFUSAoRmJ1ZmZlcl9sb2NhbF92YWx1ZSAoUWF1dG9f aHNjcm9sbF9tb2RlLCBidWYpLCBRY3VycmVudF9saW5lKTsKKyAgYm9vbCBoc2NsX3RlbXBvcmFy eV9wID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg dy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Ny b2xsID09IDApOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAg ICAgU1RBUlQgRElTUExBWSBBTkQgUFJJTUUgSVQKKyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor ICAvKiBCZWdpbiB0aGUgam91cm5leSBhdCB3LT5zdGFydC4gKi8KKyAgU0VUX1RFWFRfUE9TX0ZS T01fTUFSS0VSIChzdGFydF90ZXh0X3Bvc2l0aW9uLCB3LT5zdGFydCk7CisgIHN0YXJ0X2Rpc3Bs YXkgKCZpdCwgdywgc3RhcnRfdGV4dF9wb3NpdGlvbik7CisgIGZpcnN0X3ggPSBpdC5maXJzdF92 aXNpYmxlX3g7CisgIGxhc3RfeCA9IGl0Lmxhc3RfdmlzaWJsZV94OworICBpdF9zdGFydCA9IElU X0NIQVJQT1MgKGl0KTsKKyAgU0FWRV9JVCAoc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgaXQs IHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgaWYgKGl0X3N0YXJ0ID4gb3BvaW50 X3B0KQorICAgIHsKKyAgICAgIGJpZGlfdW5zaGVsdmVfY2FjaGUgKGl0ZGF0YSwgZmFsc2UpOwor ICAgICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9i dWZmZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogRmluaXNoIHByaW1pbmcgdGhlIElU IGZvciBwb3RlbnRpYWwgbGluZSBudW1iZXJzLiAqLworICBpZiAoIU5JTFAgKFZkaXNwbGF5X2xp bmVfbnVtYmVycykKKyAgICAgICYmICFFUSAoVmRpc3BsYXlfbGluZV9udW1iZXJzLCBRdmlzdWFs KSkKKyAgICB7CisgICAgICBpdC5maXJzdF92aXNpYmxlX3ggPSAwOworICAgICAgbW92ZV9pdF9i eV9saW5lcyAoJml0LCAxKTsKKyAgICAgIGxudW1fd2lkdGggPSBpdC5sbnVtX3dpZHRoOworICAg ICAgbG51bV9waXhlbF93aWR0aCA9IGl0LmxudW1fcGl4ZWxfd2lkdGg7CisgICAgICBSRVNUT1JF X0lUICgmaXQsICZzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBzYXZlZF9pdGRhdGFfZm9yX3dp bmRvd19zdGFydCk7CisgICAgICBpdC5maXJzdF92aXNpYmxlX3ggPSBmaXJzdF94OworICAgICAg aXQubGFzdF92aXNpYmxlX3ggPSBsYXN0X3g7CisgICAgICBpdC5sbnVtX3dpZHRoID0gbG51bV93 aWR0aDsKKyAgICAgIGl0LmxudW1fcGl4ZWxfd2lkdGggPSBsbnVtX3BpeGVsX3dpZHRoOworICAg ICAgU0FWRV9JVCAoc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgaXQsIHNhdmVkX2l0ZGF0YV9m b3Jfd2luZG93X3N0YXJ0KTsKKyAgICB9CisgIHB0cmRpZmZfdCBjdXJyZW50X2NvbCA9IG1jX2N1 cnJlbnRfY29sdW1uICh3LCBvcG9pbnRfcHQpOworICBib29sIGZpbGxfY29sdW1uX3AgPSAhTklM UCAoQlZBUiAoYiwgZmlsbF9jb2x1bW4pKTsKKyAgcHRyZGlmZl90IGZpbGxfY29sID0gWEZJWE5V TSAoQlZBUiAoYiwgZmlsbF9jb2x1bW4pKTsKKyAgTGlzcF9PYmplY3QgcmVzdWx0ID0gUW5pbDsK KyAgaW50IGZsYXZvcjsKKyAgLyogVmFsdWVzIGZvciB0aGUgY3VycmVudCBjb2x1bW4gb2YgdGhl IHZlcnRpY2FsIGxpbmUuICovCisgIExpc3BfT2JqZWN0IGZvcmVncm91bmQgPSBGbWFrZV92ZWN0 b3IgKG1ha2VfZml4bnVtICgzKSwgUW5pbCk7CisgIGVudW0gZmFjZV9pZCBmYWNlX2lkOworICBz dHJ1Y3QgZ2x5cGggKnBoeXNfY3Vyc29yX2dseXBoOworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTE9SIE9GIENST1NTSEFJUlMKKyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworICBlbnVtIGZhY2VfaWQgZXZlbl9mYWNlX2lkID0KKyAgICAo IWFjdGl2ZV9jdXJzb3JfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVu dHMpLCBjcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9uYW1lZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLWV2ZW4tbnVtYmVyZWQtY29sdW1uLWluYWN0aXZlLWZhY2Ui KSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWV2ZW4t bnVtYmVyZWQtY29sdW1uLWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpldmVuX2ZhY2Ug PSBGQUNFX0ZST01fSUQgKGYsIGV2ZW5fZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0IGV2ZW5fY29s b3IgPSBldmVuX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBDSEVDS19T VFJJTkcgKGV2ZW5fY29sb3IpOworICBMaXNwX09iamVjdCBldmVuX2NvbG9yX3ZlY3RvciA9IG1j X2NvbG9yX3ZlY3Rvcl9jYWxjICh3LCBldmVuX2NvbG9yKTsKKyAgZW51bSBmYWNlX2lkIG9kZF9m YWNlX2lkID0KKyAgICAoIWFjdGl2ZV9jdXJzb3JfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/ IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1udW1iZXJlZC1jb2x1bW4t aW5hY3RpdmUtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGlu dGVybiAoIistb2RkLW51bWJlcmVkLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFj ZSAqb2RkX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIG9kZF9mYWNlX2lkKTsKKyAgTGlzcF9PYmpl Y3Qgb2RkX2NvbG9yID0gb2RkX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOwor ICBDSEVDS19TVFJJTkcgKG9kZF9jb2xvcik7CisgIExpc3BfT2JqZWN0IG9kZF9jb2xvcl92ZWN0 b3IgPSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywgb2RkX2NvbG9yKTsKKyAgZW51bSBmYWNlX2lk IGZpbGxfZmFjZV9pZCA9CisgICAgKCFhY3RpdmVfY3Vyc29yX3AKKyAgICAgJiYgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkp CisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1iZXlvbmQtZmlsbC1j b2x1bW4taW5hY3RpdmUtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcs IGYsIGludGVybiAoIistYmV5b25kLWZpbGwtY29sdW1uLWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVj dCBmYWNlICpmaWxsX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZpbGxfZmFjZV9pZCk7CisgIExp c3BfT2JqZWN0IGZpbGxfY29sb3IgPSBmaWxsX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRf SU5ERVhdOworICBDSEVDS19TVFJJTkcgKGZpbGxfY29sb3IpOworICBMaXNwX09iamVjdCBmaWxs X2NvbG9yX3ZlY3RvciA9IG1jX2NvbG9yX3ZlY3Rvcl9jYWxjICh3LCBmaWxsX2NvbG9yKTsKKyAg LyogcmVkICovCisgIGlmIChjdXJyZW50X2NvbCAlIDIgIT0gMAorICAgICAgJiYgIWZpbGxfY29s dW1uX3ApCisgICAgZm9yZWdyb3VuZCA9IG9kZF9jb2xvcl92ZWN0b3I7CisgIC8qIHllbGxvdyAq LworICBpZiAoY3VycmVudF9jb2wgJSAyID09IDAKKyAgICAgICYmICFmaWxsX2NvbHVtbl9wKQor ICAgIGZvcmVncm91bmQgPSBldmVuX2NvbG9yX3ZlY3RvcjsKKyAgLyogcmVkICovCisgIGlmIChj dXJyZW50X2NvbCAlIDIgIT0gMAorICAgICAgJiYgZmlsbF9jb2x1bW5fcAorICAgICAgJiYgY3Vy cmVudF9jb2wgPD0gZmlsbF9jb2wpCisgICAgZm9yZWdyb3VuZCA9IG9kZF9jb2xvcl92ZWN0b3I7 CisgIC8qIHllbGxvdyAqLworICBpZiAoY3VycmVudF9jb2wgJSAyID09IDAKKyAgICAgICYmIGZp bGxfY29sdW1uX3AKKyAgICAgICYmIGN1cnJlbnRfY29sIDw9IGZpbGxfY29sKQorICAgIGZvcmVn cm91bmQgPSBldmVuX2NvbG9yX3ZlY3RvcjsKKyAgLyogZ3JlZW4gKi8KKyAgaWYgKGZpbGxfY29s dW1uX3AKKyAgICAgICYmIGN1cnJlbnRfY29sID4gZmlsbF9jb2wpCisgICAgZm9yZWdyb3VuZCA9 IGZpbGxfY29sb3JfdmVjdG9yOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBFUkFTRSBUSEUgUkVBTCBDVVJTT1IKKyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworLyogYHctPnBoeXNfY3Vyc29yLngveS9ocG9zL3Zwb3NgIGFyZSBpbmNvcnJlY3Qg YWZ0ZXIgZXZhbHVhdGluZyAoc2Nyb2xsLWxlZnQgMSkKK2EgY291cGxlIG9mIHRpbWVzLiAgUmVk aXNwbGF5IGVyYXNlcyB0aGUgcmVhbCBjdXJzb3IgYWxtb3N0IGltbWVkaWF0ZWx5IGFmdGVyCitg bWNfZHJhd19jcm9zc2hhaXJzJyBydW5zIGl0cyBjb3Vyc2UgLS0gYWxtb3N0IHRvbyBxdWlja2x5 IHRvIHNlZSBpdCBoYXBwZW5pbmcuCitUaGUgY2hhcmFjdGVyIHdoZXJlIEVtYWNzIHRoaW5rcyB0 aGUgcmVhbCBjdXJzb3IgaXMgbG9jYXRlZCBnZXRzIHJlZHJhd24sIGFsYmlldAord2l0aG91dCB0 aGUgcmVhbCBjdXJzb3IuICBFbWFjcyB0aGlua3MgdGhlIHJlYWwgY3Vyc29yIGlzIG9uZSBjaGFy YWN0ZXIgdG8gdGhlCityaWdodCBvZiB3aGVyZSBpdCBzaG91bGQgYmUgLS0gdGhpcyBpcyBtb3N0 IGxpa2VseSBkdWUgdG8gYW4gaW5jb3JyZWN0IEhQT1MuCitUaGlzIHBoZW5vbWVuYSBkb2VzIG5v dCBvY2N1ciB3aGVuIChzY3JvbGwtbGVmdCAxKSBpcyBjYWxsZWQgaW50ZXJhY3RpdmVseTsgZS5n LiwKK2hvcml6b250YWwgc2Nyb2xsIHdoZWVsLiAgSW5hc211Y2ggYXMgYGVyYXNlX3BoeXNfY3Vy c29yJyB1cGRhdGVzIG1vcmUgdGhhbgorbWVyZWx5IHRoZSBhZm9yZW1lbnRpb25lZCBjb29yZGlu YXRlcywgcmVzZXR0aW5nIHRob3NlIGNvb3JkaW5hdGVzIGFmdGVyIHRoZSBmYWN0CitpcyBpbnN1 ZmZpY2llbnQgdG8gZml4IHRoZSBwcm9ibGVtLiAgV2UgdXNlIGB3LT5vdXRwdXRfY3Vyc29yLngv eS9ocG9zL3Zwb3NgCitiZWNhdXNlIHRob3NlIGNvb3JkaW5hdGVzIGFyZSBjb3JyZWN0LiAgV2Ug Zml4IGB3LT5waHlzX2N1cnNvci54L3kvaHBvcy92cG9zYAorQkVGT1JFIGNhbGxpbmcgYGVyYXNl X3BoeXNfY3Vyc29yJyBzbyB0aGF0IG90aGVyIGdvb2RpZXMgYXJlIHVwZGF0ZWQuICovCisgIGlm ICh3LT5oc2Nyb2xsID4gMCkKKyAgICB7CisgICAgICB3LT5waHlzX2N1cnNvci54ID0gdy0+b3V0 cHV0X2N1cnNvci54OworICAgICAgdy0+cGh5c19jdXJzb3IueSA9IHctPm91dHB1dF9jdXJzb3Iu eTsKKyAgICAgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSB3LT5vdXRwdXRfY3Vyc29yLmhwb3M7Cisg ICAgICB3LT5waHlzX2N1cnNvci52cG9zID0gdy0+b3V0cHV0X2N1cnNvci52cG9zOworICAgIH0K KyAgaWYgKCFtaW5pbWFsX3ApCisgICAgZXJhc2VfcGh5c19jdXJzb3IgKHcpOworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUExBQ0UgVEhFIFJF QUwgQ1VSU09SCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgZ2x5cGhfcm93ID0gTUFUUklY X1JPVyAody0+Y3VycmVudF9tYXRyaXgsIG9wb2ludF92cG9zKTsKKyAgaWYgKCFjdXJzb3JfaW5f ZnJpbmdlX3ApCisgICAgZmxhdm9yID0gTUNfR0xZUEg7CisgICAgLyogVGhpcyBjb25kaXRpb24g cHJvYmFibHkgZG9lcyBub3QgZXhpc3QgZm9yIHRoZSByZWFsIGZha2UgY3Vyc29yLiAqLworICAg IGVsc2UgaWYgKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICYmIGdseXBoX3Jvdy0+ Y29udGludWVkX3ApCisgICAgICBmbGF2b3IgPSBNQ19QSUxDUk9XOworICAgICAgZWxzZSBpZiAo Y3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAmJiBnbHlwaF9yb3ctPnRydW5jYXRl ZF9vbl9yaWdodF9wKQorICAgICAgICBmbGF2b3IgPSBNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hU X0FOR0xFOworICAgICAgICBlbHNlIGlmIChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAg ICAgICAgJiYgIWdseXBoX3Jvdy0+Y29udGludWVkX3AKKyAgICAgICAgICAgICAgICAgJiYgIWds eXBoX3Jvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisgICAgICAgICAgZmxhdm9yID0gTUNfSE9M TE9XX1JFQ1RBTkdMRTsKKyAgZmFjZV9pZCA9ICgocGh5c19jdXJzb3JfZ2x5cGggPSBnZXRfcGh5 c19jdXJzb3JfZ2x5cGggKHcpKSA9PSBOVUxMKQorICAgICAgICAgICAgICA/IERFRkFVTFRfRkFD RV9JRAorICAgICAgICAgICAgICA6IHBoeXNfY3Vyc29yX2dseXBoLT5mYWNlX2lkOworICBpbnQg b3BvaW50X2Z4ID0gLTE7CisgIGludCBvcG9pbnRfZnkgPSAtMTsKKyAgaW50IG9wb2ludF9oID0g LTE7CisgIC8qIEZJWE1FOiAgUHV0IGluIHNvbWUgY29kZSB0byBkZWZhdWx0IHRvIEhPTExPV19C T1hfQ1VSU09SIGlmIHRoZSB1c2VyIGhhcworICB1bndpdHRpbmdseSBjb21lIHVwIHdpdGggc29t ZSB1bmFjY2VwdGFibGUgZm9ybSBvZiB1bnJlY29nbml6ZWQgY3Vyc29yIHR5cGUuICovCisgIExp c3BfT2JqZWN0IGN1cnNvcl9saXNwX3R5cGUgPSBCVkFSIChiLCBtY19yZWFsX2Zha2VfY3Vyc29y KTsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyB0ZW1wX2N1cnNvcl90eXBlID0gKENPTlNQIChj dXJzb3JfbGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID8gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoWENBUiAoY3Vyc29yX2xpc3BfdHlwZSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1jX2xpc3Bf dG9fY3Vyc29yX3R5cGUgKGN1cnNvcl9saXNwX3R5cGUpOworICBpZiAoZmxhdm9yID09IE1DX1BJ TENST1cKKyAgICAgIHx8IGZsYXZvciA9PSBNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FOR0xF CisgICAgICB8fCBmbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRSkKKyAgICB0ZW1wX2N1cnNv cl90eXBlID0gUklHSFRfRlJJTkdFX0JJVE1BUDsKKyAgaW50IHRlbXBfY3Vyc29yX3dpZHRoID0g KENPTlNQIChjdXJzb3JfbGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8g WEZJWE5VTSAoWENBUiAoWENEUiAoY3Vyc29yX2xpc3BfdHlwZSkpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiAxOworICBlbnVtIGZhY2VfaWQgY3Vyc29yX2ZhY2VfaWQgPQorICAgICgh YWN0aXZlX2N1cnNvcl9wCisgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50 cyksIGNyb3NzaGFpcnNfaW5hY3RpdmVfd2luZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2Zh Y2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1pbmFjdGl2ZS1mYWNlIiksIHRy dWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2Ut Y3Vyc29yLWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpjdXJzb3JfZmFjZSA9IEZBQ0Vf RlJPTV9JRCAoZiwgY3Vyc29yX2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBjdXJzb3JfY29sb3Ig PSBjdXJzb3JfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIENIRUNLX1NU UklORyAoY3Vyc29yX2NvbG9yKTsKKyAgTGlzcF9PYmplY3QgY3Vyc29yX2ZnID0gKHRlbXBfY3Vy c29yX3R5cGUgPT0gTk9fQ1VSU09SKQorICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcmVn cm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtY19jb2xvcl92ZWN0b3JfY2FsYyAo dywgY3Vyc29yX2NvbG9yKTsKKyAgLyogRklYTUU6ICBUaGlzIGNyZWF0ZXMgdHdvIE1DX0dMWVBI IGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBuZWVkcyB0byBiZQorICByZWR1Y2VkIHRvIGp1c3Qg b25lIE1DX0dMWVBILCBvbmUgdmVydGljYWwgYmFyLCBhbmQgb25lIGhvcml6b250YWwgYmFyLiAg VGhlCisgIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXQgdGhlIGxldHRlciBhdCBwb2ludCBnZXRz IHdyaXR0ZW4gdHdpY2UgYW5kIHdpbGwgYmUKKyAganVzdCBhIGxpdHRsZSB0aGlja2VyIHRoYW4g YXMgd291bGQgbm9ybWFsbHkgYmUgdGhlIGNhc2UuICovCisgIGlmICh0ZW1wX2N1cnNvcl90eXBl ID09IE5PX0NVUlNPUgorICAgICAgJiYgIW1pbmltYWxfcCkKKyAgICB7CisgICAgICBpZiAoZmxh dm9yID09IE1DX0dMWVBIKQorICAgICAgICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHcs IGdseXBoX3Jvdywgb3BvaW50X3gsICZvcG9pbnRfZngsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3BvaW50X3ksICZvcG9pbnRfZnksIG9wb2ludF9ocG9zLCBvcG9pbnRf dnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BvaW50X2gsIEhC QVJfQ1VSU09SLCBjdXJzb3Jfd2lkdGgpOworICAgICAgbWNfaGVscGVyICh3LCBvcG9pbnRfeCwg b3BvaW50X2Z4LCBvcG9pbnRfeSwgb3BvaW50X2Z5LCBvcG9pbnRfaHBvcywKKyAgICAgICAgICAg ICAgICAgb3BvaW50X3Zwb3MsIG9wb2ludF9oLCBIQkFSX0NVUlNPUiwgY3Vyc29yX3dpZHRoLCBj dXJzb3JfZmcsCisgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAodywgZmFjZV9pZCksIGFjdGl2 ZV9jdXJzb3JfcCwgZmxhdm9yLCBvcG9pbnRfcHQsCisgICAgICAgICAgICAgICAgICZyZXN1bHQp OworICAgICAgaWYgKGZsYXZvciA9PSBNQ19HTFlQSCkKKyAgICAgICAgbWNfZ2V0X3BoeXNfY3Vy c29yX2dlb21ldHJ5ICh3LCBnbHlwaF9yb3csIG9wb2ludF94LCAmb3BvaW50X2Z4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wb2ludF95LCAmb3BvaW50X2Z5LCBvcG9p bnRfaHBvcywgb3BvaW50X3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm9wb2ludF9oLCBCQVJfQ1VSU09SLCBjdXJzb3Jfd2lkdGgpOworICAgICAgbWNfaGVscGVy ICh3LCBvcG9pbnRfeCwgb3BvaW50X2Z4LCBvcG9pbnRfeSwgb3BvaW50X2Z5LCBvcG9pbnRfaHBv cywKKyAgICAgICAgICAgICAgICAgb3BvaW50X3Zwb3MsIG9wb2ludF9oLCBCQVJfQ1VSU09SLCBj dXJzb3Jfd2lkdGgsIGN1cnNvcl9mZywKKyAgICAgICAgICAgICAgICAgbWNfYmdfbHNsICh3LCBm YWNlX2lkKSwgYWN0aXZlX2N1cnNvcl9wLCBmbGF2b3IsIG9wb2ludF9wdCwKKyAgICAgICAgICAg ICAgICAgJnJlc3VsdCk7CisgICAgfQorICAgIGVsc2UgaWYgKCFtaW5pbWFsX3ApCisgICAgICB7 CisgICAgICAgIGlmIChmbGF2b3IgPT0gTUNfR0xZUEgpCisgICAgICAgICAgbWNfZ2V0X3BoeXNf Y3Vyc29yX2dlb21ldHJ5ICh3LCBnbHlwaF9yb3csIG9wb2ludF94LCAmb3BvaW50X2Z4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BvaW50X3ksICZvcG9pbnRfZnks IG9wb2ludF9ocG9zLCBvcG9pbnRfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZvcG9pbnRfaCwgdGVtcF9jdXJzb3JfdHlwZSwgdGVtcF9jdXJzb3Jfd2lkdGgp OworICAgICAgICBtY19oZWxwZXIgKHcsIG9wb2ludF94LCBvcG9pbnRfZngsIG9wb2ludF95LCBv cG9pbnRfZnksIG9wb2ludF9ocG9zLAorICAgICAgICAgICAgICAgICAgIG9wb2ludF92cG9zLCBv cG9pbnRfaCwgdGVtcF9jdXJzb3JfdHlwZSwgdGVtcF9jdXJzb3Jfd2lkdGgsCisgICAgICAgICAg ICAgICAgICAgY3Vyc29yX2ZnLCBtY19iZ19sc2wgKHcsIGZhY2VfaWQpLCBhY3RpdmVfY3Vyc29y X3AsIGZsYXZvciwKKyAgICAgICAgICAgICAgICAgICBvcG9pbnRfcHQsICZyZXN1bHQpOworICAg ICAgfQorICAvKiBmcmluZ2UgYml0bWFwcyB1c2UgZmFjZV9pZCB0byBzZXQgdGhlIGZvcmVncm91 bmQgY29sb3IuICBUaGUgb3ZlcmxheS1hcnJvdworICBpcyBwcmVzZW50bHkgdGhlIG9ubHkgc2l0 dWF0aW9uIHdoZXJlIHRoZSBgYWN0aXZlX2N1cnNvcl9wYCBhbmQgYG1pbmltYWxfcGAgYXJlCisg IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBhcHBsaWNhYmxlIGZhY2VfaWQuICovCisgIGludCBvdmVy bGF5X2Fycm93X2JpdG1hcCA9IChoc2NsX3RlbXBvcmFyeV9wKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/IE1DX09WRVJMQVlfQVJST1dfQklUTUFQX0hTQ0xfVEVNUE9SQVJZCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVA7CisgIExp c3BfT2JqZWN0IG92ZXJsYXlfYXJyb3dfZmcgPSAoRm1ha2VfdmVjdG9yIChtYWtlX2ZpeG51bSAo MyksIFFuaWwpKTsKKyAgQVNFVCAob3ZlcmxheV9hcnJvd19mZywgMCwgbWFrZV9maXhudW0gKG92 ZXJsYXlfYXJyb3dfYml0bWFwKSk7CisgIEFTRVQgKG92ZXJsYXlfYXJyb3dfZmcsIDEsIG1ha2Vf Zml4bnVtIChhY3RpdmVfY3Vyc29yX3ApKTsKKyAgQVNFVCAob3ZlcmxheV9hcnJvd19mZywgMiwg bWFrZV9maXhudW0gKG1pbmltYWxfcCkpOworICBtY19oZWxwZXIgKHcsIG9wb2ludF94LCBvcG9p bnRfZngsIG9wb2ludF95LCBvcG9pbnRfZnksIG9wb2ludF9ocG9zLAorICAgICAgICAgICAgIG9w b2ludF92cG9zLCBvcG9pbnRfaCwgTEVGVF9GUklOR0VfQklUTUFQLCB0ZW1wX2N1cnNvcl93aWR0 aCwKKyAgICAgICAgICAgICBvdmVybGF5X2Fycm93X2ZnLCBtY19iZ19sc2wgKHcsIGZhY2VfaWQp LCBhY3RpdmVfY3Vyc29yX3AsCisgICAgICAgICAgICAgb3ZlcmxheV9hcnJvd19iaXRtYXAsIG9w b2ludF9wdCwgJnJlc3VsdCk7CisgIGlmIChtaW5pbWFsX3ApCisgICAgZ290byBjcm9zc2hhaXJz X2ZpbmlzaDsKKyAgaWYgKE5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxl cikpKQorICAgIGdvdG8gdmVydGljYWxfcnVsZXI7CisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAgICAgICAgICAgICAgICBIT1JJWk9OVEFMIFJVTEVSOiAgRklSU1QgWCA9PiBFT0wKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgSE9SSVpPTlRBTCBSVUxFUjog IERSQVcgRkxPQVRJTkcgR0xZUEhMRVNTIExJTkUgKEVPTCBUTyBGUklOR0UpCisqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKyAgLyogUGxhY2UgdGhlIElUIG9uIHRoZSBjdXJyZW50IGxpbmUgY29u dGFpbmluZyBQVC4gKi8KKyAgaW50IHZvZmZzZXQgPSAoaGVhZGVyX2xpbmVfaGVpZ2h0ID4gMAor ICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA+IDApCisgICAgICAgICAgICAgICAgICA/ IG9wb2ludF92cG9zIC0gMQorICAgICAgICAgICAgICAgICAgOiBvcG9pbnRfdnBvczsKKyAgaWYg KHZvZmZzZXQgPiAwKQorICAgIG1vdmVfaXRfYnlfbGluZXMgKCZpdCwgdm9mZnNldCk7CisgIG1j X21vdmVfaXQgKCZpdCwgcG9zaW50LCBIQkFSX0NVUlNPUiwgY3Vyc29yX3dpZHRoLCBmb3JlZ3Jv dW5kLCBhY3RpdmVfY3Vyc29yX3AsIEhPUklaT05UQUxfUlVMRVIsICZyZXN1bHQpOworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgICAgICAgICAgIFZFUlRJQ0FMIFJVTEVSOiAgQ09NQklOQVRJ T04gT0YgR0xZUEggJiBHTFlQSExFU1MgQ1VSU09SUworKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisgIHZlcnRpY2FsX3J1bGVyOgorICBpZiAoTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlyc192ZXJ0 aWNhbF9ydWxlcikpKQorICAgIGdvdG8gY3Jvc3NoYWlyc19maW5pc2g7CisgIFJFU1RPUkVfSVQg KCZpdCwgJnNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93 X3N0YXJ0KTsKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgbWNfbW92ZV9pdCAoJml0LCBw b3NpbnQsIEJBUl9DVVJTT1IsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYWN0aXZlX2N1cnNv cl9wLCBWRVJUSUNBTF9SVUxFUiwgJnJlc3VsdCk7CisgICAgICAvKiBUaGlzIGNvbWJpbmF0aW9u IG9mIGEgWlYgY2hlY2sgYmVmb3JlIGBtb3ZlX2l0X2J5X2xpbmVzJyBmb2xsb3dlZCBieSBhCisg ICAgICBZIGNoZWNrIHN1YnNlcXVlbnQgdGhlcmV0byBnaXZlcyB1cyB0aGUgRkVBVFVSRSBvZiBo YXZpbmcgYSB2ZXJ0aWNhbCBsaW5lCisgICAgICBmb2xsb3dpbmcgYSBsaW5lIHRlcm1pbmF0aW5n IHdpdGggWlYuICBXaGVyZWFzIGBkaXNwbGF5LWxpbmUtbnVtYmVycy1tb2RlJworICAgICAgaGFz IGEgRkVBVFVSRSBvZiBzdXBwcmVzc2luZyB0aGUgbGluZSBudW1iZXJzIGluIHRoaXMgc2l0dWF0 aW9uLCB3ZSBkcmF3CisgICAgICBjcm9zc2hhaXJzIGluIHRoYXQgc2l0dWF0aW9uLiAgYG1jX21v dmVfaXQnIGhhcyBiZWVuCisgICAgICBlcXVpcHBlZCB3aXRoIGEgY29uZGl0aW9uIHRvIHRlc3Qg Zm9yIFpWIGF0IHRoZSBvdXRzZXQgYW5kIHJldHVybiBpZiB0cnVlLAorICAgICAgd2hpY2ggcHJl dmVudHMgRW1hY3MgZnJvbSBjcmFzaGluZy4gKi8KKyAgICAgIGlmIChJVF9DSEFSUE9TIChpdCkg PT0gWlYpCisgICAgICAgIGJyZWFrOworICAgICAgbW92ZV9pdF9ieV9saW5lcyAoJml0LCAxKTsK KyAgICAgIC8qIElmIHRoZXJlIGlzIGEgaGFyZCByZXR1cm4gYXQgWlYsIHdlIHdhbnQgYSB2ZXJ0 aWNhbCBydWxlciBvbiB0aGUKKyAgICAgIGltYWdpbmFyeSBuZXcgbGluZS4gIFtOT1RFOiAgRWxp IFouIGV4cHJlc3NseSBkZXNpZ25lZCBsaW5lIG51bWJlcnMgX25vdF8KKyAgICAgIHRvIGRpc3Bs YXkgYSBsaW5lIG51bWJlciBpbiB0aGlzIHNpdHVhdGlvbi5dICBXaGVuIGB0cnVuY2F0ZS1saW5l cycgaXMgbm9uLQorICAgICAgbmlsLCBhbmQgdGhlIGxhc3QgbGluZSBpcyBob3Jpem9udGFsbHkg c2Nyb2xsZWQgd2l0aCBubyBoYXJkIHJldHVybiBhdCBFT0wsCisgICAgICBgbW92ZV9pdF9ieV9s aW5lcycgd2lsbCBwbGFjZSBJVCBvbiBhIFkgYXhpcyBiZXlvbmQgdGhlIGxhc3QgbGluZSB3aXRo IG5vCisgICAgICBFT0wuIEluIHN1Y2ggYSBjYXNlLCBgaXQuY2Agd2lsbCBoYXZlIHRoZSB2YWx1 ZSBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4KKyAgICAgIHRoZSBidWZmZXIuICBXaGVuIHRoZSBs YXN0IGxpbmUgd2l0aCBhbiBFT0wgaXMgd29yZC13cmFwcGVkLCBgaXQuY2AgaXMgMC4KKyAgICAg IFdoZW4gdGhlIGxhc3QgbGluZSB3aXRoIGFuIEVPTCBpcyB0cnVuY2F0ZWQsIGBpdC5jYCBpcyAx MC4gKi8KKyAgICAgIGlmIChJVF9DSEFSUE9TIChpdCkgPT0gWlYKKyAgICAgICAgICAmJiBpdC5j ICE9IDEwCisgICAgICAgICAgJiYgaXQuYyAhPSAwKQorICAgICAgICBicmVhazsKKyAgICAgIGlm IChpdC5jdXJyZW50X3kgPj0gaXQubGFzdF92aXNpYmxlX3kpCisgICAgICAgIGJyZWFrOworICAg IH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTRVQgVEhFIENBQ0hFCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgY3Jvc3NoYWly c19maW5pc2g6CisgIGlmICghTklMUCAocmVzdWx0KSkKKyAgICB3c2V0X2Nyb3NzaGFpcnNfY2Fj aGUgKHcsIGxpc3RuIChDT05TVFlQRV9IRUFQLCAzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZyZXZlcnNlIChyZXN1bHQpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZjb25zICh3aW5kb3csIFFuaWwpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZjb25zICh3LT5jb250ZW50cywgUW5pbCkpKTsKKyAgdy0+bWMuZHJh d19jcm9zc2hhaXJzID0gZmFsc2U7CisgIGJpZGlfdW5zaGVsdmVfY2FjaGUgKGl0ZGF0YSwgZmFs c2UpOworICBpZiAob2xkX2J1ZmZlcikKKyAgICBzZXRfYnVmZmVyX2ludGVybmFsIChvbGRfYnVm ZmVyKTsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZW5kID0gY2xvY2soKTsKKyAgY3B1X3Rp bWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICBk dG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1lLCAwLCAwLCBjcHVfdGltZV91c2VkKTsK KyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX2RyYXdfY3Jvc3NoYWlyczogIFRJTUUgKCVzKSIs IGJ1Zl90aW1lKTsKKyNlbmRpZgorKi8KK30KKwordm9pZAorbWNfcmVkcmF3X2Nyb3NzaGFpcnMg KHN0cnVjdCB3aW5kb3cgKncpCit7CisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGNsb2NrX3Qg c3RhcnQsIGVuZDsKKyAgZG91YmxlIGNwdV90aW1lX3VzZWQ7CisgIGNoYXIgYnVmX3RpbWVbREJM X0JVRlNJWkVfQk9VTkRdOworICBzdGFydCA9IGNsb2NrKCk7CisjZW5kaWYKKyovCisjaWZkZWYg R0xZUEhfREVCVUcKKyAgaWYgKHRyYWNlX3JlZGlzcGxheV9wCisgICAgICAmJiAoIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25mKSkKKyAgICAg ICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkp KQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5ET1cgKHdp bmRvdywgdyk7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4xX3RvX3N0 cmluZyAod2luZG93LCBRbmlsKTsKKyAgICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NEQVRBICh3 aW5kb3dfc3RyaW5nKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX3JlZHJhd19jcm9zc2hh aXJzICglcylcbiIsIHdpbmRvd19jaGFyKTsKKyAgICB9CisjZW5kaWYKKyAgTGlzcF9PYmplY3Qg dmxpc3QgPSBRbmlsOworICBMaXNwX09iamVjdCBmb3VydGVlbl9lbGVtZW50cyA9IFFuaWw7Cisg IGludCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIGg7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2lu ZHMgY3Vyc29yX3R5cGU7CisgIGludCBjdXJzb3Jfd2lkdGg7CisgIExpc3BfT2JqZWN0IGZvcmVn cm91bmQgPSBRbmlsOworICBMaXNwX09iamVjdCBiYWNrZ3JvdW5kID0gUW5pbDsKKyAgYm9vbCBh Y3RpdmVfY3Vyc29yX3AgPSBmYWxzZTsKKyAgaW50IGZsYXZvcjsKKyAgcHRyZGlmZl90IHBvc2lu dDsKKyAgZm9yICh2bGlzdCA9IFhDQVIgKHctPmNyb3NzaGFpcnNfY2FjaGUpOworICAgICAgIENP TlNQICh2bGlzdCk7CisgICAgICAgdmxpc3QgPSBYQ0RSICh2bGlzdCkpCisgICAgeworICAgICAg Zm91cnRlZW5fZWxlbWVudHMgPSBYQ0FSICh2bGlzdCk7CisgICAgICB4ID0gWEZJWE5VTSAoRm50 aCAobWFrZV9maXhudW0gKDApLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgZnggPSBYRklY TlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICB5 ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDIpLCBmb3VydGVlbl9lbGVtZW50cykpOwor ICAgICAgZnkgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMyksIGZvdXJ0ZWVuX2VsZW1l bnRzKSk7CisgICAgICBocG9zID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDQpLCBmb3Vy dGVlbl9lbGVtZW50cykpOworICAgICAgdnBvcyA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVt ICg1KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGggPSBYRklYTlVNIChGbnRoIChtYWtl X2ZpeG51bSAoNiksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBjdXJzb3JfdHlwZSA9IG1j X2xpc3BfdG9fY3Vyc29yX3R5cGUgKEZudGggKG1ha2VfZml4bnVtICg3KSwgZm91cnRlZW5fZWxl bWVudHMpKTsKKyAgICAgIGN1cnNvcl93aWR0aCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVt ICg4KSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtl X2ZpeG51bSAoOSksIGZvdXJ0ZWVuX2VsZW1lbnRzKTsKKyAgICAgIGJhY2tncm91bmQgPSBGbnRo IChtYWtlX2ZpeG51bSAoMTApLCBmb3VydGVlbl9lbGVtZW50cyk7CisgICAgICBhY3RpdmVfY3Vy c29yX3AgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTEpLCBmb3VydGVlbl9lbGVtZW50 cykpOworICAgICAgZmxhdm9yID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDEyKSwgZm91 cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIHBvc2ludCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4 bnVtICgxMyksIGZvdXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBtY19kcmF3X2VyYXNlX2h5YnJp ZCAodywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCBoLCBjdXJzb3JfdHlwZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGFjdGl2ZV9jdXJz b3JfcCwgZmxhdm9yLCBwb3NpbnQpOworICAgIH0KKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAg ZW5kID0gY2xvY2soKTsKKyAgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQp KSAvIENMT0NLU19QRVJfU0VDOworICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1l LCAwLCAwLCBjcHVfdGltZV91c2VkKTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX3JlZHJh d19jcm9zc2hhaXJzOiAgVElNRSAoJXMpIiwgYnVmX3RpbWUpOworI2VuZGlmCisqLworfQorCit2 b2lkCittY19lcmFzZV9jcm9zc2hhaXJzIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGRlbGV0ZV9j YWNoZSkKK3sKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOwor ICBkb3VibGUgY3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VO RF07CisgIHN0YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyNpZmRlZiBHTFlQSF9ERUJVRwor ICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmICghTklMUCAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBtdWx0aXBsZV9jdXJzb3JzX2NvbmYpKQorICAgICAgICAgIHx8ICFOSUxQ IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkpCisgICAgeworICAg ICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAod2luZG93LCB3KTsKKyAg ICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9fc3RyaW5nICh3aW5kb3cs IFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEgKHdpbmRvd19zdHJpbmcp OworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZXJhc2VfY3Jvc3NoYWlycyAoJXMpOiAgZGVs ZXRlX2NhY2hlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd19jaGFyLCBk ZWxldGVfY2FjaGUpOworICAgIH0KKyNlbmRpZgorICBMaXNwX09iamVjdCB2bGlzdCA9IFFuaWw7 CisgIExpc3BfT2JqZWN0IGZvdXJ0ZWVuX2VsZW1lbnRzID0gUW5pbDsKKyAgaW50IHgsIGZ4LCB5 LCBmeSwgaHBvcywgdnBvcywgaDsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlw ZTsKKyAgaW50IGN1cnNvcl93aWR0aDsKKyAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCA9IFFuaWw7 CisgIExpc3BfT2JqZWN0IGJhY2tncm91bmQgPSBRbmlsOworICBib29sIGFjdGl2ZV9jdXJzb3Jf cCA9IGZhbHNlOworICBpbnQgZmxhdm9yOworICBwdHJkaWZmX3QgcG9zaW50OworICBtY19lcmFz ZV9nbHlwaF9jdXJzb3JzICh3LCB3LT5waHlzX2N1cnNvci54LCB3LT5waHlzX2N1cnNvci55LCB3 LT5waHlzX2N1cnNvci5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5waHlzX2N1 cnNvci52cG9zLCB3LT5waHlzX2N1cnNvcl90eXBlLCB3LT5waHlzX2N1cnNvcl93aWR0aCk7Cisg IGZvciAodmxpc3QgPSBYQ0FSICh3LT5jcm9zc2hhaXJzX2NhY2hlKTsKKyAgICAgICBDT05TUCAo dmxpc3QpOworICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAgIGZvdXJ0 ZWVuX2VsZW1lbnRzID0gWENBUiAodmxpc3QpOworICAgICAgeCA9IFhGSVhOVU0gKEZudGggKG1h a2VfZml4bnVtICgwKSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGZ4ID0gWEZJWE5VTSAo Rm50aCAobWFrZV9maXhudW0gKDEpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgeSA9IFhG SVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgyKSwgZm91cnRlZW5fZWxlbWVudHMpKTsKKyAgICAg IGZ5ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDMpLCBmb3VydGVlbl9lbGVtZW50cykp OworICAgICAgaHBvcyA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICg0KSwgZm91cnRlZW5f ZWxlbWVudHMpKTsKKyAgICAgIHZwb3MgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNSks IGZvdXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBoID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhu dW0gKDYpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgY3Vyc29yX3R5cGUgPSBtY19saXNw X3RvX2N1cnNvcl90eXBlIChGbnRoIChtYWtlX2ZpeG51bSAoNyksIGZvdXJ0ZWVuX2VsZW1lbnRz KSk7CisgICAgICBjdXJzb3Jfd2lkdGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoOCks IGZvdXJ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmb3JlZ3JvdW5kID0gRm50aCAobWFrZV9maXhu dW0gKDkpLCBmb3VydGVlbl9lbGVtZW50cyk7CisgICAgICBiYWNrZ3JvdW5kID0gRm50aCAobWFr ZV9maXhudW0gKDEwKSwgZm91cnRlZW5fZWxlbWVudHMpOworICAgICAgYWN0aXZlX2N1cnNvcl9w ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDExKSwgZm91cnRlZW5fZWxlbWVudHMpKTsK KyAgICAgIGZsYXZvciA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgxMiksIGZvdXJ0ZWVu X2VsZW1lbnRzKSk7CisgICAgICBwb3NpbnQgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAo MTMpLCBmb3VydGVlbl9lbGVtZW50cykpOworICAgICAgaWYgKGZsYXZvciA9PSBNQ19HTFlQSCkK KyAgICAgICAgbWNfZXJhc2VfZ2x5cGhfY3Vyc29ycyAodywgeCwgeSwgaHBvcywgdnBvcywgY3Vy c29yX3R5cGUsIGN1cnNvcl93aWR0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAg ICAgICAgICBpZiAoZmxhdm9yID09IE1DX09WRVJMQVlfQVJST1dfQklUTUFQCisgICAgICAgICAg ICAgICAgfHwgZmxhdm9yID09IE1DX09WRVJMQVlfQVJST1dfQklUTUFQX0hTQ0xfVEVNUE9SQVJZ CisgICAgICAgICAgICAgICAgfHwgZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRf QU5HTEUKKyAgICAgICAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRQor ICAgICAgICAgICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQU5HTEUK KyAgICAgICAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSCisgICAgICAgICAg ICAgICAgfHwgZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpCisgICAgICAgICAg ICAgIGN1cnNvcl90eXBlID0gTk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgICAgICAgIG1jX2RyYXdf ZXJhc2VfaHlicmlkICh3LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIGgsIGN1cnNvcl90eXBl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgYmFja2dy b3VuZCwgYWN0aXZlX2N1cnNvcl9wLCBmbGF2b3IsIHBvc2ludCk7CisgICAgICAgICAgfQorICAg IH0KKyAgaWYgKGRlbGV0ZV9jYWNoZSkKKyAgICB3c2V0X2Nyb3NzaGFpcnNfY2FjaGUgKHcsIFFu aWwpOworICB3LT5tYy5lcmFzZV9jcm9zc2hhaXJzID0gZmFsc2U7CisvKgorI2lmZGVmIEdMWVBI X0RFQlVHCisgIGVuZCA9IGNsb2NrKCk7CisgIGNwdV90aW1lX3VzZWQgPSAoKGRvdWJsZSkgKGVu ZCAtIHN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgZHRvYXN0ciAoYnVmX3RpbWUsIHNpemVv ZiBidWZfdGltZSwgMCwgMCwgY3B1X3RpbWVfdXNlZCk7CisgIGRlYnVnX21ldGhvZF9hZGQgKHcs ICJtY19lcmFzZV9jcm9zc2hhaXJzOiAgVElNRSAoJXMpIiwgYnVmX3RpbWUpOworI2VuZGlmCisq LworfQorCit2b2lkCittY19yZW1vdmVfbXVsdGlwbGVfY3Vyc29ycyAoc3RydWN0IHdpbmRvdyAq dykKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGJvb2wgZGVs ZXRlX2NhY2hlID0gKHctPm1jLnJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEgPT0gOAorICAg ICAgICAgICAgICAgICAgICAgICB8fCBtY19yZWRpc3BsYXkgPT0gMykKKyAgICAgICAgICAgICAg ICAgICAgICA/IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlOworI2lmZGVmIEdM WVBIX0RFQlVHCisgIGlmICh0cmFjZV9yZWRpc3BsYXlfcAorICAgICAgJiYgKCFOSUxQIChCVkFS IChYQlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAg ICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKSkK KyAgICB7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3c7CisgICAgICBYU0VUV0lORE9XICh3aW5k b3csIHcpOworICAgICAgTGlzcF9PYmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJp bmcgKHdpbmRvdywgUW5pbCk7CisgICAgICBjaGFyICp3aW5kb3dfY2hhciA9IFNTREFUQSAod2lu ZG93X3N0cmluZyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19yZW1vdmVfbXVsdGlwbGVf Y3Vyc29ycyAoJXMpOiAgZGVsZXRlX2NhY2hlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICB3aW5kb3dfY2hhciwgZGVsZXRlX2NhY2hlKTsKKyAgICB9CisjZW5kaWYKKyAgLyogUmVt b3ZlIGZha2UgY3Vyc29ycy4gIElmIHdlIHJlbHkgdXBvbiBgdXBkYXRlX2ZyYW1lJyB0byByZW1v dmUgZmFrZSBjdXJzb3JzLAorICB0aGVuIGl0IHdvdWxkIGJlIHRvbyBsYXRlIHRvIHJlbW92ZSBm YWtlIGN1cnNvcnMgZnJvbSBhbGwgYXJlYXMgb2YgdGhlIHZpc2libGUKKyAgd2luZG93IHdoZW4g Y3V0dGluZy9wYXN0aW5nIHRleHQgYW5kIHBlcmhhcHMgYSBmZXcgb3RoZXIgc2l0dWF0aW9ucy4g Ki8KKyAgaWYgKCF3LT5wc2V1ZG9fd2luZG93X3AKKyAgICAgICYmICFNSU5JX1dJTkRPV19QICh3 KQorICAgICAgJiYgIU5JTFAgKHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpCisgICAgICAmJiBX SU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPm11bHRpcGxlX2N1cnNvcnNf Y2FjaGUpKSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9maXhudW0g KDEpLCB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKSkpCisgICAgICAmJiBFUSAody0+Y29udGVu dHMsIFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgyKSwgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNo ZSkpKSkKKyAgICB7CisgICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICAgYmxvY2tfaW5wdXQg KCk7CisgICAgICBtY19lcmFzZV9tdWx0aXBsZV9jdXJzb3JzICh3LCBkZWxldGVfY2FjaGUpOwor ICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgIHVwZGF0ZV9lbmQgKGYpOworICAgIH0KK30K Kwordm9pZAorbWNfcmVtb3ZlX2Nyb3NzaGFpcnMgKHN0cnVjdCB3aW5kb3cgKncpCit7CisgIHN0 cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBib29sIGRlbGV0ZV9jYWNoZSA9 ICgody0+bWMucmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYSA9PSA4CisgICAgICAgICAgICAg ICAgICAgICAgICB8fCBtY19yZWRpc3BsYXkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAg JiYgIXctPm1jLmRyYXdfY3Jvc3NoYWlycworICAgICAgICAgICAgICAgICAgICAgICAmJiAhdy0+ bWMuZXJhc2VfY3Jvc3NoYWlycykKKyAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlCisgICAg ICAgICAgICAgICAgICAgICAgOiB0cnVlOworI2lmZGVmIEdMWVBIX0RFQlVHCisgIGlmICh0cmFj ZV9yZWRpc3BsYXlfcAorICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50 cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhC VUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKSkKKyAgICB7CisgICAgICBMaXNwX09i amVjdCB3aW5kb3c7CisgICAgICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAgICAgTGlzcF9P YmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5pbCk7Cisg ICAgICBjaGFyICp3aW5kb3dfY2hhciA9IFNTREFUQSAod2luZG93X3N0cmluZyk7CisgICAgICBm cHJpbnRmIChzdGRlcnIsICJtY19yZW1vdmVfY3Jvc3NoYWlycyAoJXMpOiAgZGVsZXRlX2NhY2hl ICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfY2hhciwgZGVsZXRlX2Nh Y2hlKTsKKyAgICB9CisjZW5kaWYKKyAgLyogUmVtb3ZlIGZha2UgY3Vyc29ycy4gIElmIHdlIHJl bHkgdXBvbiBgdXBkYXRlX2ZyYW1lJyB0byByZW1vdmUgZmFrZSBjdXJzb3JzLAorICB0aGVuIGl0 IHdvdWxkIGJlIHRvbyBsYXRlIHRvIHJlbW92ZSBmYWtlIGN1cnNvcnMgZnJvbSBhbGwgYXJlYXMg b2YgdGhlIHZpc2libGUKKyAgd2luZG93IHdoZW4gY3V0dGluZy9wYXN0aW5nIHRleHQgYW5kIHBl cmhhcHMgYSBmZXcgb3RoZXIgc2l0dWF0aW9ucy4gKi8KKyAgaWYgKCF3LT5wc2V1ZG9fd2luZG93 X3AKKyAgICAgICYmICFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgIU5JTFAgKHctPmNyb3Nz aGFpcnNfY2FjaGUpCisgICAgICAmJiBXSU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAo MSksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAo Rm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpCisgICAgICAmJiBF USAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgyKSwgdy0+Y3Jvc3NoYWly c19jYWNoZSkpKSkKKyAgICB7CisgICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICAgYmxvY2tf aW5wdXQgKCk7CisgICAgICBtY19lcmFzZV9jcm9zc2hhaXJzICh3LCBkZWxldGVfY2FjaGUpOwor ICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgIHVwZGF0ZV9lbmQgKGYpOworICAgIH0KK30K Kwordm9pZAorbWNfbXVsdGlwbGVfY3Vyc29yc19wb3J0YWwgKHN0cnVjdCB3aW5kb3cgKncsIGJv b2wgb24sIGJvb2wgYWN0aXZlX2N1cnNvcl9wKQoreworI2lmZGVmIEdMWVBIX0RFQlVHCisgIGlm ICh0cmFjZV9yZWRpc3BsYXlfcAorICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAgICAgfHwgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKSkKKyAgICB7CisgICAgICBM aXNwX09iamVjdCB3aW5kb3c7CisgICAgICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAgICAg TGlzcF9PYmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5p bCk7CisgICAgICBjaGFyICp3aW5kb3dfY2hhciA9IFNTREFUQSAod2luZG93X3N0cmluZyk7Cisg ICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19tdWx0aXBsZV9jdXJzb3JzX3BvcnRhbCAoJXMpOiAg b24gKCVkKSB8IGFjdGl2ZV9jdXJzb3JfcCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgd2luZG93X2NoYXIsIG9uLCBhY3RpdmVfY3Vyc29yX3ApOworICAgIH0KKyNlbmRpZgorICBp ZiAody0+bWMuZXJhc2VfbXVsdGlwbGVfY3Vyc29ycyAmJiB3LT5tYy5kcmF3X211bHRpcGxlX2N1 cnNvcnMKKyAgICAgICYmICFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgIU5JTFAgKHctPm11 bHRpcGxlX2N1cnNvcnNfY2FjaGUpCisgICAgICAmJiBXSU5ET1dQIChYQ0FSIChGbnRoIChtYWtl X2ZpeG51bSAoMSksIHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpKSkKKyAgICAgICYmIHcgPT0g WFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5tdWx0aXBsZV9jdXJzb3Jz X2NhY2hlKSkpCisgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2VfZml4 bnVtICgyKSwgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZSkpKSkKKyAgICBtY19lcmFzZV9tdWx0 aXBsZV9jdXJzb3JzICh3LCB0cnVlKTsKKyAgLyogYHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGVg IGJlbG9uZ3MgdG8gdGhlIHdpbmRvdywgbm90IHRoZSBidWZmZXIuICBTd2l0Y2hpbmcKKyAgYnVm ZmVycyB3aXRoaW4gdGhlIHNhbWUgd2luZG93IHJlbmRlcnMgdGhlIGNhY2hlIHVzZWxlc3MuICov CisgIGlmICghTUlOSV9XSU5ET1dfUCAodykKKyAgICAgICYmICFOSUxQICh3LT5tdWx0aXBsZV9j dXJzb3JzX2NhY2hlKQorICAgICAgJiYgV0lORE9XUCAoWENBUiAoRm50aCAobWFrZV9maXhudW0g KDEpLCB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKSkpCisgICAgICAmJiB3ID09IFhXSU5ET1cg KFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgxKSwgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZSkp KQorICAgICAgJiYgIUVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9maXhudW0gKDIp LCB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKSkpKQorICAgIHsKKyAgICAgIHdzZXRfbXVsdGlw bGVfY3Vyc29yc19jYWNoZSAodywgUW5pbCk7CisgICAgICB3LT5tYy5lcmFzZV9tdWx0aXBsZV9j dXJzb3JzID0gZmFsc2U7CisgICAgfQorICBpZiAob24KKyAgICAgICYmICFNSU5JX1dJTkRPV19Q ICh3KQorICAgICAgJiYgKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KQorICAgICAgICAg IHx8ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNf aW5hY3RpdmVfd2luZG93cykpKQorICAgICAgJiYgTklMUCAody0+bXVsdGlwbGVfY3Vyc29yc19j YWNoZSkKKyAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG11bHRp cGxlX2N1cnNvcnNfY29uZikpKQorICAgIG1jX2RyYXdfbXVsdGlwbGVfY3Vyc29ycyAodywgYWN0 aXZlX2N1cnNvcl9wKTsKKyAgICBlbHNlIGlmIChvbgorICAgICAgICAgICAgICYmICFNSU5JX1dJ TkRPV19QICh3KQorICAgICAgICAgICAgICYmICFOSUxQICh3LT5tdWx0aXBsZV9jdXJzb3JzX2Nh Y2hlKQorICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAgICAgICAgJiYgV0lORE9XUCAoWENBUiAo Rm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKSkpCisgICAg ICAgICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHct Pm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpKSkKKyAgICAgICAgICAgICAmJiBFUSAody0+Y29udGVu dHMsIFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgyKSwgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNo ZSkpKSkKKyAgICAgIHsKKyAgICAgICAgbWNfZXJhc2VfbXVsdGlwbGVfY3Vyc29ycyAodywgZmFs c2UpOworICAgICAgICBtY19yZWRyYXdfbXVsdGlwbGVfY3Vyc29ycyAodyk7CisgICAgICB9Cit9 CisKK3ZvaWQKK21jX2Nyb3NzaGFpcnNfcG9ydGFsIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9u LCBib29sIGFjdGl2ZV9jdXJzb3JfcCkKK3sKKyAgLyogUmVtb3ZlIGNyb3NzaGFpcnMgYW5kIGRl bGV0ZSB0aGUgY2FjaGUsIGJ1dCBPTkxZIGlmIHdlIHBsYW4gb24gcmVkcmF3aW5nIHRoZW0uCisg IEluIGEgdGltZXIgc2l0dWF0aW9uLCB3ZSB3YW50IHRvIGVyYXNlIGFuZCByZWRyYXcgLS0gd2Ug Z28gZnJvbSBgY2hlY2twb2ludF8yJworICBpbiBgcmVkaXNwbGF5X2ludGVybmFsJyBhbmQgZm9y Y2Ugb3VyIHdheSBvdmVyIHRvIGB1cGRhdGVfZnJhbWUnIDIgb2YgMy4KKyAgRW1hY3MgcmVmcmVz aGVzIHRoZSBzZWxlY3RlZCB3aW5kb3cgYWZ0ZXIgYWJvdXQgMSB0byAyIG1pbnV0ZXMgb2Ygbm8g YWN0aXZpdHkKKyAgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm90aGluZyBhdHRhY2hlZCB0byB0aGUg YHRpbWVfbGlzdCcvYGlkbGVfdGltZXJfbGlzdCcuCisgIEluIHRoYXQgcmVmcmVzaCBuby10aW1l ciBzaXR1YXRpb24sIHdlIHdhbnQgdG8gZXJhc2UvZHJhdyB1c2luZyB0aGUgY2FjaGUuICovCisj aWZkZWYgR0xZUEhfREVCVUcKKyAgaWYgKHRyYWNlX3JlZGlzcGxheV9wCisgICAgICAmJiAoIU5J TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25mKSkK KyAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hh aXJzKSkpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5E T1cgKHdpbmRvdywgdyk7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4x X3RvX3N0cmluZyAod2luZG93LCBRbmlsKTsKKyAgICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NE QVRBICh3aW5kb3dfc3RyaW5nKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2Nyb3NzaGFp cnNfcG9ydGFsICglcyk6ICBvbiAoJWQpIHwgYWN0aXZlX2N1cnNvcl9wICglZClcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICB3aW5kb3dfY2hhciwgb24sIGFjdGl2ZV9jdXJzb3JfcCk7Cisg ICAgfQorI2VuZGlmCisgIGJvb2wgbWluaW1hbF9wID0gKCF3LT5tYy5kcmF3X2Nyb3NzaGFpcnMK KyAgICAgICAgICAgICAgICAgICAgJiYgbWNfcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYSAh PSA4CisgICAgICAgICAgICAgICAgICAgICYmIG1jX3JlZGlzcGxheSAhPSAzCisgICAgICAgICAg ICAgICAgICAgICYmIHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KQorICAgICAgICAgICAg ICAgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnNf ZHJhd19mb3J0aHdpdGgpKSk7CisgIGlmICh3LT5tYy5lcmFzZV9jcm9zc2hhaXJzICYmIHctPm1j LmRyYXdfY3Jvc3NoYWlycworICAgICAgJiYgIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAh TklMUCAody0+Y3Jvc3NoYWlyc19jYWNoZSkKKyAgICAgICYmIFdJTkRPV1AgKFhDQVIgKEZudGgg KG1ha2VfZml4bnVtICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgJiYgdyA9PSBY V0lORE9XIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPmNyb3NzaGFpcnNfY2FjaGUp KSkKKyAgICAgICYmIEVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9maXhudW0gKDIp LCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpKQorICAgIG1jX2VyYXNlX2Nyb3NzaGFpcnMgKHcsIHRy dWUpOworICAvKiBgdy0+Y3Jvc3NoYWlyc19jYWNoZWAgYmVsb25ncyB0byB0aGUgd2luZG93LCBu b3QgdGhlIGJ1ZmZlci4gIFN3aXRjaGluZworICBidWZmZXJzIHdpdGhpbiB0aGUgc2FtZSB3aW5k b3cgcmVuZGVycyB0aGUgY2FjaGUgdXNlbGVzcy4gKi8KKyAgaWYgKCFNSU5JX1dJTkRPV19QICh3 KQorICAgICAgJiYgIU5JTFAgKHctPmNyb3NzaGFpcnNfY2FjaGUpCisgICAgICAmJiBXSU5ET1dQ IChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkKKyAg ICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5jcm9z c2hhaXJzX2NhY2hlKSkpCisgICAgICAmJiAhRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoICht YWtlX2ZpeG51bSAoMiksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkpCisgICAgeworICAgICAgd3Nl dF9jcm9zc2hhaXJzX2NhY2hlICh3LCBRbmlsKTsKKyAgICAgIHctPm1jLmVyYXNlX2Nyb3NzaGFp cnMgPSBmYWxzZTsKKyAgICB9CisgIGlmIChvbgorICAgICAgJiYgIU1JTklfV0lORE9XX1AgKHcp CisgICAgICAmJiAodyA9PSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpCisgICAgICAgICAgfHwg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93 aW5kb3dzKSkpCisgICAgICAmJiBOSUxQICh3LT5jcm9zc2hhaXJzX2NhY2hlKQorICAgICAgJiYg KCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkpCisgICAg bWNfZHJhd19jcm9zc2hhaXJzICh3LCBhY3RpdmVfY3Vyc29yX3AsIG1pbmltYWxfcCk7CisgICAg ZWxzZSBpZiAob24KKyAgICAgICAgICAgICAmJiAhTUlOSV9XSU5ET1dfUCAodykKKyAgICAgICAg ICAgICAmJiAhTklMUCAody0+Y3Jvc3NoYWlyc19jYWNoZSkKKyAgICAgICAgICAgICAmJiAhTklM UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAg ICAmJiBXSU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPmNyb3NzaGFpcnNf Y2FjaGUpKSkKKyAgICAgICAgICAgICAmJiB3ID09IFhXSU5ET1cgKFhDQVIgKEZudGggKG1ha2Vf Zml4bnVtICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgICAgICAgICYmIEVRICh3 LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9maXhudW0gKDIpLCB3LT5jcm9zc2hhaXJzX2Nh Y2hlKSkpKQorICAgICAgeworICAgICAgICBtY19lcmFzZV9jcm9zc2hhaXJzICh3LCBmYWxzZSk7 CisgICAgICAgIG1jX3JlZHJhd19jcm9zc2hhaXJzICh3KTsKKyAgICAgIH0KK30KKworYm9vbAor bWNfbXVsdGlwbGVfY3Vyc29yc19wIChzdHJ1Y3Qgd2luZG93ICp3KQoreworI2lmZGVmIEdMWVBI X0RFQlVHCisgIGlmICh0cmFjZV9yZWRpc3BsYXlfcAorICAgICAgJiYgKCFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAgICAg fHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKSkKKyAg ICB7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3c7CisgICAgICBYU0VUV0lORE9XICh3aW5kb3cs IHcpOworICAgICAgTGlzcF9PYmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcg KHdpbmRvdywgUW5pbCk7CisgICAgICBjaGFyICp3aW5kb3dfY2hhciA9IFNTREFUQSAod2luZG93 X3N0cmluZyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19tdWx0aXBsZV9jdXJzb3JzX3Ag KCVzKVxuIiwgd2luZG93X2NoYXIpOworICAgIH0KKyNlbmRpZgorLyogTW92aW5nIHRoZSBtb3Vz ZSB0cmlnZ2VycyBgdXBkYXRlX3dpbmRvd19jdXJzb3InIHdoaWNoIGNhbGxzCitgZGlzcGxheV9h bmRfc2V0X2N1cnNvcicgdGhhdCB3b3VsZCBvdGhlcndpc2UgcmVtb3ZlIGEgcG9ydGlvbiBvZiB0 aGUKK2hvcml6b250YWwgcnVsZXIgZnJvbSBwb2ludCBhdCBlbmQgb2YgdmlzdWFsIGxpbmUgdG8g d2luZG93IGVkZ2UuCitJbiBhZGRpdGlvbiwgc3dpdGNoaW5nIHRvL2Zyb20gYW5vdGhlciBhcHBs aWNhdGlvbiAoZS5nLiwg4oyYLVRBQikgY2FsbHMKK2BleHBvc2VfZnJhbWUnLCBmb2xsb3dlZCBi eSBgZXhwb3NlX3dpbmRvdycsIGFuZCBgdXBkYXRlX3dpbmRvd19jdXJzb3InLiAqLworICBpZiAo IU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAhdy0+bWMuZHJhd19tdWx0aXBsZV9jdXJzb3Jz CisgICAgICAmJiAhTklMUCAody0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZSkKKyAgICAgICYmICFO SUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikp CisgICAgICAmJiBXSU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPm11bHRp cGxlX2N1cnNvcnNfY2FjaGUpKSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAo bWFrZV9maXhudW0gKDEpLCB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKSkpCisgICAgICAmJiBF USAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgyKSwgdy0+bXVsdGlwbGVf Y3Vyc29yc19jYWNoZSkpKSkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICByZXR1 cm4gZmFsc2U7Cit9CisKK2Jvb2wKK21jX2Nyb3NzaGFpcnNfcCAoc3RydWN0IHdpbmRvdyAqdykK K3sKKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYm ICghTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtdWx0aXBsZV9jdXJzb3JzX2Nv bmYpKQorICAgICAgICAgIHx8ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNy b3NzaGFpcnMpKSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNF VFdJTkRPVyAod2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBG cHJpbjFfdG9fc3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIg PSBTU0RBVEEgKHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfY3Jv c3NoYWlyc19wICglcylcbiIsIHdpbmRvd19jaGFyKTsKKyAgICB9CisjZW5kaWYKKy8qIE1vdmlu ZyB0aGUgbW91c2UgdHJpZ2dlcnMgYHVwZGF0ZV93aW5kb3dfY3Vyc29yJyB3aGljaCBjYWxscwor YGRpc3BsYXlfYW5kX3NldF9jdXJzb3InIHRoYXQgd291bGQgb3RoZXJ3aXNlIHJlbW92ZSBhIHBv cnRpb24gb2YgdGhlCitob3Jpem9udGFsIHJ1bGVyIGZyb20gcG9pbnQgYXQgZW5kIG9mIHZpc3Vh bCBsaW5lIHRvIHdpbmRvdyBlZGdlLgorSW4gYWRkaXRpb24sIHN3aXRjaGluZyB0by9mcm9tIGFu b3RoZXIgYXBwbGljYXRpb24gKGUuZy4sIOKMmC1UQUIpIGNhbGxzCitgZXhwb3NlX2ZyYW1lJywg Zm9sbG93ZWQgYnkgYGV4cG9zZV93aW5kb3cnLCBhbmQgYHVwZGF0ZV93aW5kb3dfY3Vyc29yJy4g Ki8KKyAgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgIXctPm1jLmRyYXdfY3Jvc3No YWlycworICAgICAgJiYgIU5JTFAgKHctPmNyb3NzaGFpcnNfY2FjaGUpCisgICAgICAmJiAhTklM UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICYmIFdJ TkRPV1AgKFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkp KQorICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHct PmNyb3NzaGFpcnNfY2FjaGUpKSkKKyAgICAgICYmIEVRICh3LT5jb250ZW50cywgWENBUiAoRm50 aCAobWFrZV9maXhudW0gKDIpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpKQorICAgIHJldHVybiB0 cnVlOworICAgIC8qIFRoaXMgaXMgYSBzaXR1YXRpb24gd2hlcmVieSBgcmVkaXNwbGF5X2ludGVy bmFsJyB3b3VsZCBub3JtYWxseSBnbyB0bworICAgIGBlbmRfb2ZfcmVkaXNwbGF5YCAtLSBgZGlz cGxheV9hbmRfc2V0X2N1cnNvcicgd291bGQgbm90IGJlIGNhbGxlZCBpbiB0aGF0CisgICAgc2l0 dWF0aW9uLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IGZvcmNlIGNhbGwgYGRpc3BsYXlfYW5kX3NldF9j dXJzb3InLiAqLworICAgIGVsc2UgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAgICAgICAg ICYmIHctPm1jLmRyYXdfY3Jvc3NoYWlycworICAgICAgICAgICAgICYmIHctPmN1cnNvcl9vZmZf cCA9PSB3LT5sYXN0X2N1cnNvcl9vZmZfcAorICAgICAgICAgICAgICYmICFOSUxQICh3LT5jcm9z c2hhaXJzX2NhY2hlKQorICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICAgICAgICYmIFdJTkRPV1AgKFhDQVIgKEZu dGggKG1ha2VfZml4bnVtICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgICAgICAg ICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5jcm9zc2hh aXJzX2NhY2hlKSkpCisgICAgICAgICAgICAgJiYgRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRo IChtYWtlX2ZpeG51bSAoMiksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkpCisgICAgICByZXR1cm4g dHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sCittY193 aXRob3V0X3VwZGF0ZV9mcmFtZSAoc3RydWN0IHdpbmRvdyAqdykKK3sKKyNpZmRlZiBHTFlQSF9E RUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmICghTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBtdWx0aXBsZV9jdXJzb3JzX2NvbmYpKQorICAgICAgICAgIHx8 ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkpCisgICAg eworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAod2luZG93LCB3 KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9fc3RyaW5nICh3 aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEgKHdpbmRvd19z dHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfd2l0aG91dF91cGRhdGVfZnJhbWUg KCVzKVxuIiwgd2luZG93X2NoYXIpOworICAgIH0KKyNlbmRpZgorLyogYHRpbWVyLWxpc3QnIC8g YHRpbWVyLWlkbGUtbGlzdCc6ICBUaGUgYm9vbGVhbiBzd2l0Y2hlcyBhcmUgbm90IGF1dG9tYXRp Y2FsbHkKK3R1cm5lZCBvbiB3aGVuIGEgZnVuY3Rpb24gYXR0YWNoZWQgdG8gYSB0aW1lciBpcyBj YWxsZWQuICBXZSBoYXZlIHN3aXRjaGVzIHRoYXQgYXJlCitzZXQgaW4gYGtleWJvYXJkLmNgIGZv ciBtdWx0aXBsZSBmYWtlIGN1cnNvcnMgKGUuZy4sIGEga2V5Ym9hcmQgcHJlc3MpLiAgV2Ugc2V0 Cit0aGUgc3dpdGNoZXMgbWFudWFsbHkgZm9yIGJvdGggbXVsdGlwbGUgY3Vyc29ycyBhbmQgY3Jv c3NoYWlycyBpbiBjb25qdW5jdGlvbiB3aXRoCit0aW1lciBmdW5jdGlvbnMuICBgdXBkYXRlX2Zy YW1lJyBtYXkgbm90IGJlIGNhbGxlZCBpZiB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUKK3dp bmRvdy9idWZmZXIuICBUbyB0ZXN0IHRoaXMgdGhlb3J5LCB0aHJvdyB0aGUgc3dpdGNoZXMgZm9y IGNyb3NzaGFpcnMgZnJvbSBhbiBpZGxlCit0aW1lciB3aXRob3V0IGRyYXdpbmcvZXJhc2luZyBh bnkgb3ZlcmxheXMgaW4gdGhlIGJ1ZmZlci4gIGBrYmRfbWNfYWN0aXZhdGVfbXVsdGlwbGVfY3Vy c29ycycKK3NldHMgdGhlIG11bHRpcGxlIGN1cnNvcnMgYm9vbGVhbiBzd2l0Y2hlcyB0byBgdHJ1 ZWAgd2hlbmV2ZXIgdGhlcmUgaXMgYSBrZXlib2FyZAordHJpZ2dlcmVkIGNvbW1hbmQuICBIb3dl dmVyLCB0aGF0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB3ZSBuZWVkIHRvIGRyYXcK K211bHRpcGxlIGN1cnNvcnMuICBJbmFzbXVjaCBhcyB0aGUgbXVsdGlwbGUgY3Vyc29ycyBib29s ZWFuIHN3aXRjaGVzIG1pZ2h0IGhhdmUKK2JlZW4gc2V0IHRocm91Z2ggYSB0aW1lciBmdW5jdGlv biwgaXQgaXMgYmV0dGVyIHRvIGNoZWNrIHRoZSBidWZmZXIgbG9jYWwgdmFyaWFibGVzCithbmQg dGhlIHdpbmRvdyBjYWNoZXMuICBJbiB0aGUgY2FzZSBvZiBjcm9zc2hhaXJzLCB0aGUgY29ycmVz cG9uZGluZyBib29sZWFuCitzd2l0Y2hlcyBhcmUgb25seSBzZXQgd2hlbiB3ZSByZWFsbHkgd2Fu dCB0byBkcmF3IHRoZSBjcm9zc2hhaXJzLgorLSAgV2UgYWxzbyB1c2UgdGhpcyBmdW5jdGlvbiBh cyBwYXJ0IG9mIGB1cGRhdGVfd2luZG93X2N1cnNvcicgd2hlbiBtb3VzaW5nIG92ZXIKK3NvbWV0 aGluZyB0aGF0IHdvdWxkIG9yZGluYXJpbHkgY2F1c2UgdGhlIHJlYWwgY3Vyc29yIHRvIGJlIHJl ZHJhd24uICovCisgICAgICBpZiAobWNfbXVsdGlwbGVfY3Vyc29yc19wICh3KQorICAgICAgICAg IHx8IG1jX2Nyb3NzaGFpcnNfcCAodykpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBXZSBhcmUg YnlwYXNzaW5nIGB1cGRhdGVfZnJhbWUnLiAqLworICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9 IFhGUkFNRSAody0+ZnJhbWUpOworICAgICAgICAgIHVwZGF0ZV9iZWdpbiAoZik7CisgICAgICAg ICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgZGlzcGxheV9hbmRfc2V0X2N1cnNvciAodywg dHJ1ZSwgdy0+b3V0cHV0X2N1cnNvci5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHctPm91dHB1dF9jdXJzb3IudnBvcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5vdXRwdXRfY3Vyc29yLngsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+b3V0cHV0X2N1cnNvci55KTsKKyAg ICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICAgIHVwZGF0ZV9lbmQgKGYpOworICAg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBy ZXR1cm4gZmFsc2U7Cit9CisKK0RFRlVOICgibWMtYWN0aXZhdGUtY3Jvc3NoYWlycyIsIEZtY19h Y3RpdmF0ZV9jcm9zc2hhaXJzLCBTbWNfYWN0aXZhdGVfY3Jvc3NoYWlycywgMSwgMSwgMCwKKyAg ICAgICBkb2M6IC8qIERvYy1zdHJpbmcuICovKQorICAoTGlzcF9PYmplY3Qgd2luZG93KQorewor ICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93ICh3aW5kb3cpOworICB3LT5t Yy5kcmF3X2Nyb3NzaGFpcnMgPSB0cnVlOworICB3LT5tYy5lcmFzZV9jcm9zc2hhaXJzID0gdHJ1 ZTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK0RFRlVOICgibWMtYWN0aXZhdGUtbXVsdGlwbGUtY3Vy c29ycyIsIEZtY19hY3RpdmF0ZV9tdWx0aXBsZV9jdXJzb3JzLCBTbWNfYWN0aXZhdGVfbXVsdGlw bGVfY3Vyc29ycywgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIFdoZW4gdXNpbmcgYSB0aW1lciwg YGtiZF9tY19hY3RpdmF0ZV9tdWx0aXBsZV9jdXJzb3JzJyBpbiBga2V5Ym9hcmQuYycgaXMgbm90 IGNhbGxlZC4KK1RoZXJlIGFyZSBhbHNvIHNvbWUgb3RoZXIgY2lyY3Vtc3RhbmNlcyB3aGVyZSBg bWMtYWN0aXZhdGUtbXVsdGlwbGUtY3Vyc29ycycgaXMgaGVscGZ1bC4gKi8pCisgIChMaXNwX09i amVjdCB3aW5kb3cpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBkZWNvZGVfbGl2ZV93aW5kb3cg KHdpbmRvdyk7CisgIHctPm1jLmRyYXdfbXVsdGlwbGVfY3Vyc29ycyA9IHRydWU7CisgIHctPm1j LmVyYXNlX211bHRpcGxlX2N1cnNvcnMgPSB0cnVlOworICByZXR1cm4gUW5pbDsKK30KKworREVG VU4gKCJtYy1zdGRlcnIiLCBGbWNfc3RkZXJyLCBTbWNfc3RkZXJyLCAwLCAxLCAiUCIsCisgICAg ICAgZG9jOiAvKiBUb2dnbGUgdHJhY2luZyBvZiBtdWx0aXBsZSBmYWtlIGN1cnNvcnMuCitXaXRo IEFSRywgdHVybiB0cmFjaW5nIG9uIGlmIGFuZCBvbmx5IGlmIEFSRyBpcyBwb3NpdGl2ZS4gKi8p CisgIChMaXNwX09iamVjdCBhcmcpCit7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBjdXJyZW50X2J1 ZmZlcjsKKyAgYm9vbCBtY19zdGRlcnJfcCA9ICghTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIs IG1jX3N0ZGVycikpKQorICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAgICAg ICAgIDogZmFsc2U7CisgIGlmIChOSUxQIChhcmcpKQorICAgIG1jX3N0ZGVycl9wID0gIW1jX3N0 ZGVycl9wOworICBlbHNlCisgICAgeworICAgICAgYXJnID0gRnByZWZpeF9udW1lcmljX3ZhbHVl IChhcmcpOworICAgICAgbWNfc3RkZXJyX3AgPSBYRklYTlVNIChhcmcpID4gMDsKKyAgICB9Cisg IGlmIChtY19zdGRlcnJfcCkKKyAgICBic2V0X2Jsdl9tY19zdGRlcnIgKGIsIFF0KTsKKyAgICBl bHNlCisgICAgICBic2V0X2Jsdl9tY19zdGRlcnIgKGIsIFFuaWwpOworICByZXR1cm4gUW5pbDsK K30KKworLyogIChmdW5kYW1lbnRhbC1tb2RlKQorICAgIChzZXRxIGRpc3BsYXktbGluZS1udW1i ZXJzIHQpCisgICAgKHNldHEgYnVmZmVyLWRpc3BsYXktdGFibGUgKG1ha2UtZGlzcGxheS10YWJs ZSkpCisgICAgKGFzZXQgYnVmZmVyLWRpc3BsYXktdGFibGUKKyAgICAgICAgICA/XHQKKyAgICAg ICAgICAodmVjdG9yIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCQiAnZm9udC1sb2NrLXdhcm5pbmct ZmFjZSkKKyAgICAgICAgICAgICAgICAgIChtYWtlLWdseXBoLWNvZGUgP1x0ICdoaWdobGlnaHQp KSkKKyAgICAoYXNldCBidWZmZXItZGlzcGxheS10YWJsZQorICAgICAgICAgID9cbgorICAgICAg ICAgICh2ZWN0b3IgKG1ha2UtZ2x5cGgtY29kZSA/XHUwMEI2ICdmb250LWxvY2stY29tbWVudC1m YWNlKQorICAgICAgICAgICAgICAgICAgP1xuKSkKKyAgICAoc2V0cSB0YWItd2lkdGggOCkKKyAg ICAoc2V0cS1sb2NhbCBhdXRvLWhzY3JvbGwtbW9kZSAnY3VycmVudC1saW5lKSAqLworCitERUZV TiAoImRlYnVnZ2luZyIsIEZkZWJ1Z2dpbmcsIFNkZWJ1Z2dpbmcsIDAsIDAsIDAsCisgICAgICAg ZG9jOiAvKiBUaGlzIGZ1bmN0aW9uIHVzZWQgZm9yIGRlYnVnZ2luZy4gKi8pCisgICh2b2lkKQor eworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgUFJFTElN SU5BUlkgU1RVRkYKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICBzdHJ1Y3Qgd2luZG93ICp3 ID0gZGVjb2RlX2xpdmVfd2luZG93IChzZWxlY3RlZF93aW5kb3cpOworICBzdHJ1Y3QgZnJhbWUg KmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGl0IGl0OworICB2b2lkICppdGRhdGEg PSBiaWRpX3NoZWx2ZV9jYWNoZSAoKTsKKyAgZW51bSBtb3ZlX2l0X3Jlc3VsdCByYyA9IE1PVkVf WF9SRUFDSEVEOworICBzdHJ1Y3QgdGV4dF9wb3Mgc3RhcnRfdGV4dF9wb3NpdGlvbjsKKyAgaW50 IGZyYW1lX2NoYXJfd2lkdGggPSBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOworICBpbnQgbmV3X3gg PSAwOworICBpbnQgcmVsYXRpdmVfeCA9IDA7CisgIGludCBwcmV2aW91c19yZWxhdGl2ZV94ID0g MDsKKyAgaW50IHByZXZpb3VzX2l0X2N1cnJlbnRfeCA9IDA7CisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAgICAgICAgICAgICAgICAgICAgICBTVEFSVCBESVNQTEFZIC0tIHctPnN0YXJ0Cisq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKyAgLyogQmVnaW4gdGhlIGpvdXJuZXkgYXQgdy0+c3Rh cnQuICovCisgIFNFVF9URVhUX1BPU19GUk9NX01BUktFUiAoc3RhcnRfdGV4dF9wb3NpdGlvbiwg dy0+c3RhcnQpOworICBzdGFydF9kaXNwbGF5ICgmaXQsIHcsIHN0YXJ0X3RleHRfcG9zaXRpb24p OworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgR08gVE8gVEhFIEJF R0lOTklORyBPRiBUSEUgQ1VSUkVOVCBMSU5FLgorKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisg IC8qIFBsYWNlIHRoZSBJVCBvbiB0aGUgY3VycmVudCBsaW5lIGNvbnRhaW5pbmcgUFQuICovCisg IGludCB2b2Zmc2V0ID0gKFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpID4gMAorICAgICAg ICAgICAgICAgICAmJiB3LT5vdXRwdXRfY3Vyc29yLnZwb3MgPiAwKQorICAgICAgICAgICAgICAg ICAgPyB3LT5vdXRwdXRfY3Vyc29yLnZwb3MgLSAxCisgICAgICAgICAgICAgICAgICA6IHctPm91 dHB1dF9jdXJzb3IudnBvczsKKyAgaWYgKHZvZmZzZXQgPiAwKQorICAgIG1vdmVfaXRfYnlfbGlu ZXMgKCZpdCwgdm9mZnNldCk7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAg ICAgICAgICAgICAgTU9WRSBJVDogIElOQ1JFTUVOVCA9PSAxIHBpeGVsCisqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgaWYgKG5ld194ID4gMCkK KyAgICAgICAgcmVsYXRpdmVfeCA9IG5ld194IC0gaXQuZmlyc3RfdmlzaWJsZV94OworICAgICAg aWYgKGl0LmN1cnJlbnRfeCA+IHByZXZpb3VzX2l0X2N1cnJlbnRfeCkKKyAgICAgICAgeworICAg ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuaXQuY3VycmVudF94ICglZCkgfCBpdC52cG9zICgl ZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5jdXJyZW50X3gsIGl0LnZwb3Mp OworICAgICAgICAgIGludCBkaWZmX3ByZXZpb3VzX3ZfY3VycmVudF94ID0gaXQuY3VycmVudF94 IC0gcHJldmlvdXNfaXRfY3VycmVudF94OworICAgICAgICAgIGludCBkaWZmX3ByZXZpb3VzX3Zf cmVsYXRpdmVfeCA9IHJlbGF0aXZlX3ggLSBwcmV2aW91c19yZWxhdGl2ZV94OworICAgICAgICAg IGlmIChkaWZmX3ByZXZpb3VzX3ZfY3VycmVudF94ICE9IGRpZmZfcHJldmlvdXNfdl9yZWxhdGl2 ZV94CisgICAgICAgICAgICAgICYmIHByZXZpb3VzX3JlbGF0aXZlX3ggPj0gaXQubG51bV9waXhl bF93aWR0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi XG5ESUZGICglZCk6ICBTb3VuZCB0aGUgYWxhcm0hXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpZmZfcHJldmlvdXNfdl9jdXJyZW50X3gpOworICAgICAgICAgICAgICBwcmV2 aW91c19yZWxhdGl2ZV94ICs9IGRpZmZfcHJldmlvdXNfdl9jdXJyZW50X3g7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByZXZpb3VzX3JlbGF0aXZlX3gg PSByZWxhdGl2ZV94OworICAgICAgICAgIHByZXZpb3VzX2l0X2N1cnJlbnRfeCA9IGl0LmN1cnJl bnRfeDsKKyAgICAgICAgfQorICAgICAgbmV3X3ggKz0gMTsKKyAgICAgIHJjID0gbW92ZV9pdF9p bl9kaXNwbGF5X2xpbmVfdG8gKCZpdCwgWlYsIG5ld194LCBNT1ZFX1RPX1BPUyB8IE1PVkVfVE9f WCk7CisgICAgICBpZiAocmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICAgICAgYnJlYWs7 CisgICAgICBpZiAoaXQuY3VycmVudF94IC0gaXQuZmlyc3RfdmlzaWJsZV94ICsgZnJhbWVfY2hh cl93aWR0aCA+PQorICAgICAgICAgIHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSkpCisg ICAgICAgIGJyZWFrOworICAgICAgaWYgKChGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkpID09 ICdcbicKKyAgICAgICAgICAgJiYgaXQuYyAhPSAwKQorICAgICAgICAgIC8qIHx8IElURVJBVE9S X0FUX0VORF9PRl9MSU5FX1AgKCZpdCkgKi8KKyAgICAgICAgICB8fCByYyA9PSBNT1ZFX1BPU19N QVRDSF9PUl9aVikKKyAgICAgICAgYnJlYWs7CisgICAgfQorLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSEUgRU5ECisqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKyAgYmlkaV91bnNoZWx2ZV9jYWNoZSAoaXRkYXRhLCBmYWxzZSk7Cisg IHJldHVybiBRbmlsOworfQorCisvKiBlbmQgTVVMVElQTEUgQ1VSU09SUyAqLworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisKKwogDAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCSAgICAgIFdpbmRvdyBk aXNwbGF5IGRpbWVuc2lvbnMKQEAgLTExMjA4LDcgKzE1OTE1LDkgQEAgcmVzaXplX2VjaG9fYXJl YV9leGFjdGx5ICh2b2lkKQogCXsKIAkgIHdpbmRvd3Nfb3JfYnVmZmVyc19jaGFuZ2VkID0gNDI7 CiAJICB1cGRhdGVfbW9kZV9saW5lcyA9IDMwOwotCSAgcmVkaXNwbGF5X2ludGVybmFsICgpOwor ICAgICAgbWNfcmVkaXNwbGF5X2ludGVybmFsID0gMTsKKyAgICAgIHJlZGlzcGxheV9pbnRlcm5h bCAoMSk7CisgICAgICBtY19yZWRpc3BsYXlfaW50ZXJuYWwgPSAwOwogCX0KICAgICB9CiB9CkBA IC0xMTY5NSw3ICsxNjQwNCw5IEBAIGVjaG9fYXJlYV9kaXNwbGF5IChib29sIHVwZGF0ZV9mcmFt ZV9wKQogCSAgICAgIHB0cmRpZmZfdCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAJICAgICAg c3BlY2JpbmQgKFFyZWRpc3BsYXlfZG9udF9wYXVzZSwgUXQpOwogCSAgICAgIGZzZXRfcmVkaXNw bGF5IChmKTsKLQkgICAgICByZWRpc3BsYXlfaW50ZXJuYWwgKCk7CisgICAgICAgICAgbWNfcmVk aXNwbGF5X2ludGVybmFsID0gMjsKKyAgICAgICAgICByZWRpc3BsYXlfaW50ZXJuYWwgKDIpOwor ICAgICAgICAgIG1jX3JlZGlzcGxheV9pbnRlcm5hbCA9IDA7CiAJICAgICAgdW5iaW5kX3RvIChj b3VudCwgUW5pbCk7CiAJICAgIH0KIAkgIGVsc2UgaWYgKEZSQU1FX1dJTkRPV19QIChmKSAmJiBu ID09IDApCkBAIC0xMzM3NCw2ICsxODA4NSwxOSBAQCBoc2Nyb2xsX3dpbmRvd190cmVlIChMaXNw X09iamVjdCB3aW5kb3cpCiAJICAgICAgZWxzZQogCQlwdCA9IGNsaXBfdG9fYm91bmRzIChCRUdW LCBtYXJrZXJfcG9zaXRpb24gKHctPnBvaW50bSksIFpWKTsKIAorCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBzdHJ1Y3QgZGlzcGxheV9wb3Mg KnBvcyA9ICZjdXJzb3Jfcm93LT5zdGFydDsKKyAgcHRyZGlmZl90IGNoYXJwb3MgPSBDSEFSUE9T IChwb3MtPnBvcyk7CisgIGJvb2wgYmFyZl9jcmFzaCA9IChjaGFycG9zIDwgMCB8fCAoY2hhcnBv cyA+PSBCVUZfQkVHIChjdXJyZW50X2J1ZmZlcikgJiYgY2hhcnBvcyA8PSBaVikpID8gZmFsc2Ug OiB0cnVlOworICBpZiAoYmFyZl9jcmFzaCkKKyAgICByZXR1cm4gaHNjcm9sbGVkX3A7CisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICAvKiBNb3ZlIGl0ZXJhdG9yIHRvIHB0 IHN0YXJ0aW5nIGF0IGN1cnNvcl9yb3ctPnN0YXJ0IGluCiAJCSBhIGxpbmUgd2l0aCBpbmZpbml0 ZSB3aWR0aC4gICovCiAJICAgICAgaW5pdF90b19yb3dfc3RhcnQgKCZpdCwgdywgY3Vyc29yX3Jv dyk7CkBAIC0xMzYxNSw5ICsxODMzOSwxNyBAQCB0ZXh0X291dHNpZGVfbGluZV91bmNoYW5nZWRf cCAoc3RydWN0IHdpbmRvdyAqdywKICAgIG1pbmktYnVmZmVyIGlmIHRoYXQgaXMgaW4gdXNlLiAg Ki8KIAogdm9pZAotcmVkaXNwbGF5ICh2b2lkKQorcmVkaXNwbGF5IChpbnQgZnJvbV93aGVyZSkK IHsKLSAgcmVkaXNwbGF5X2ludGVybmFsICgpOworI2lmZGVmIEdMWVBIX0RFQlVHCisgIGlmICh0 cmFjZV9yZWRpc3BsYXlfcCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJcbnJlZGlzcGxheSAoJWQp XG4iLCBmcm9tX3doZXJlKTsKKyNlbmRpZgorICBtY19yZWRpc3BsYXkgPSBmcm9tX3doZXJlOwor ICBtY19yZWRpc3BsYXlfaW50ZXJuYWwgPSAzOworICByZWRpc3BsYXlfaW50ZXJuYWwgKDMpOwor ICBtY19yZWRpc3BsYXlfaW50ZXJuYWwgPSAwOworICBtY19yZWRpc3BsYXkgPSAwOwogfQogCiAK QEAgLTEzODg2LDggKzE4NjE4LDEyIEBAIGRvIHsgaWYgKHBvbGxpbmdfc3RvcHBlZF9oZXJlKSBz dGFydF9wb2xsaW5nICgpOwlcCiAgICBpcyBub3QgbmVjZXNzYXJ5OyBjdXJyZW50bHkgdGhhdCBj YXVzZXMgc29tZSBwcm9ibGVtcy4gICovCiAKIHN0YXRpYyB2b2lkCi1yZWRpc3BsYXlfaW50ZXJu YWwgKHZvaWQpCityZWRpc3BsYXlfaW50ZXJuYWwgKGludCBmcm9tX3doZXJlKQogeworI2lmZGVm IEdMWVBIX0RFQlVHCisgIGlmICh0cmFjZV9yZWRpc3BsYXlfcCkKKyAgICBmcHJpbnRmIChzdGRl cnIsICJcbnJlZGlzcGxheV9pbnRlcm5hbCAoJWQpXG4iLCBmcm9tX3doZXJlKTsKKyNlbmRpZgog ICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KTsKICAgc3RydWN0 IHdpbmRvdyAqc3c7CiAgIHN0cnVjdCBmcmFtZSAqZnI7CkBAIC0xNDI4OSw2ICsxOTAyNSwyMiBA QCByZWRpc3BsYXlfaW50ZXJuYWwgKHZvaWQpCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAJ ICAgICAgdXBkYXRlX3dpbmRvd19mcmluZ2VzICh3LCBmYWxzZSk7CiAjZW5kaWYKKworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTk9URTog IEFuIGlkbGUtdGltZXIgZnVuY3Rpb24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmlnZ2VyIGByZWRp c3BsYXlfd2luZG93Jy4KK2BvcHRpbWl6YXRpb24gMWAgKHdoaWNoIGluY2x1ZGVzIGxlZnQvcmln aHQgY3Vyc29yIG1vdmVtZW50IG9uIHRoZSBmaXJzdCBzY3JlZW4KK2xpbmUpLCBhbmQgYG9wdGlt aXphdGlvbiAzYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24g c2NyZWVuCitsaW5lcyBzdWJzZXF1ZW50IHRvIHRoZSBmaXJzdCBzY3JlZW4gbGluZSksIGJ5cGFz cyBgcmVkaXNwbGF5X3dpbmRvdycuICovCisKKyAgICAgIG1jX3JlbW92ZV9tdWx0aXBsZV9jdXJz b3JzICh3KTsKKyAgICAgIG1jX3JlbW92ZV9jcm9zc2hhaXJzICh3KTsKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisKKwogCSAgICAgIGdvdG8gdXBkYXRlOwogCSAgICB9CiAJICBlbHNlCkBA IC0xNDMxMSw2ICsxOTA2MywyMCBAQCByZWRpc3BsYXlfaW50ZXJuYWwgKHZvaWQpCiAJCSAgJiYg KHcgPSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpKSAhPSBzdykKIAkJZ290byByZXRyeTsKIAor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyog Tk9URTogIEFuIGlkbGUtdGltZXIgZnVuY3Rpb24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmlnZ2Vy IGByZWRpc3BsYXlfd2luZG93Jy4KK2BvcHRpbWl6YXRpb24gMWAgKHdoaWNoIGluY2x1ZGVzIGxl ZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9uIHRoZSBmaXJzdCBzY3JlZW4KK2xpbmUpLCBhbmQg YG9wdGltaXphdGlvbiAzYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1l bnQgb24gc2NyZWVuCitsaW5lcyBzdWJzZXF1ZW50IHRvIHRoZSBmaXJzdCBzY3JlZW4gbGluZSks IGJ5cGFzcyBgcmVkaXNwbGF5X3dpbmRvdycuICovCisgICAgICAgIGlmIChtY193aXRob3V0X3Vw ZGF0ZV9mcmFtZSAodykpCisgICAgICAgICAgZ290byBlbmRfb2ZfcmVkaXNwbGF5OworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKworCiAJICAgICAgLyogV2UgdXNlZCB0byBhbHdheXMgZ290 byBlbmRfb2ZfcmVkaXNwbGF5IGhlcmUsIGJ1dCB0aGlzCiAJCSBpc24ndCBlbm91Z2ggaWYgd2Ug aGF2ZSBhIGJsaW5raW5nIGN1cnNvci4gICovCiAJICAgICAgaWYgKHctPmN1cnNvcl9vZmZfcCA9 PSB3LT5sYXN0X2N1cnNvcl9vZmZfcCkKQEAgLTE0MzUyLDYgKzE5MTE4LDIyIEBAIHJlZGlzcGxh eV9pbnRlcm5hbCAodm9pZCkKIAkJICAqdy0+ZGVzaXJlZF9tYXRyaXgtPm1ldGhvZCA9IDA7CiAJ CSAgZGVidWdfbWV0aG9kX2FkZCAodywgIm9wdGltaXphdGlvbiAzIik7CiAjZW5kaWYKKworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTk9U RTogIEFuIGlkbGUtdGltZXIgZnVuY3Rpb24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmlnZ2VyIGBy ZWRpc3BsYXlfd2luZG93Jy4KK2BvcHRpbWl6YXRpb24gMWAgKHdoaWNoIGluY2x1ZGVzIGxlZnQv cmlnaHQgY3Vyc29yIG1vdmVtZW50IG9uIHRoZSBmaXJzdCBzY3JlZW4KK2xpbmUpLCBhbmQgYG9w dGltaXphdGlvbiAzYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQg b24gc2NyZWVuCitsaW5lcyBzdWJzZXF1ZW50IHRvIHRoZSBmaXJzdCBzY3JlZW4gbGluZSksIGJ5 cGFzcyBgcmVkaXNwbGF5X3dpbmRvdycuICovCisKKyAgICAgIG1jX3JlbW92ZV9tdWx0aXBsZV9j dXJzb3JzICh3KTsKKyAgICAgIG1jX3JlbW92ZV9jcm9zc2hhaXJzICh3KTsKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisKKwogCQkgIGdvdG8gdXBkYXRlOwogCQl9CiAJICAgICAgZWxzZQpA QCAtMTQ3MzIsMTYgKzE5NTE0LDM2IEBAIHJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEgKGlu dCBmcm9tX3doZXJlKQogICBibG9ja19idWZmZXJfZmxpcHMgKCk7CiAgIHVuYmxvY2tfaW5wdXQg KCk7CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICov CisKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2VsZWN0ZWRfd2lu ZG93KTsKKyAgdy0+bWMucmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYSA9IGZyb21fd2hlcmU7 CisgIG1jX3JlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEgPSBmcm9tX3doZXJlOworCiAgIGlm ICghTklMUCAoZWNob19hcmVhX2J1ZmZlclsxXSkpCiAgICAgewogICAgICAgLyogV2UgaGF2ZSBh IHByZXZpb3VzbHkgZGlzcGxheWVkIG1lc3NhZ2UsIGJ1dCBubyBjdXJyZW50CiAJIG1lc3NhZ2Uu ICBSZWRpc3BsYXkgdGhlIHByZXZpb3VzIG1lc3NhZ2UuICAqLwogICAgICAgZGlzcGxheV9sYXN0 X2Rpc3BsYXllZF9tZXNzYWdlX3AgPSB0cnVlOwotICAgICAgcmVkaXNwbGF5X2ludGVybmFsICgp OworICAgICAgbWNfcmVkaXNwbGF5X2ludGVybmFsID0gNDsKKyAgICAgIHJlZGlzcGxheV9pbnRl cm5hbCAoNCk7CisgICAgICBtY19yZWRpc3BsYXlfaW50ZXJuYWwgPSAwOwogICAgICAgZGlzcGxh eV9sYXN0X2Rpc3BsYXllZF9tZXNzYWdlX3AgPSBmYWxzZTsKICAgICB9CiAgIGVsc2UKLSAgICBy ZWRpc3BsYXlfaW50ZXJuYWwgKCk7CisgICAgeworICAgICAgbWNfcmVkaXNwbGF5X2ludGVybmFs ID0gNTsKKyAgICAgIHJlZGlzcGxheV9pbnRlcm5hbCAoNSk7CisgICAgICBtY19yZWRpc3BsYXlf aW50ZXJuYWwgPSAwOworICAgIH0KKworICB3LT5tYy5yZWRpc3BsYXlfcHJlc2VydmVfZWNob19h cmVhID0gMDsKKyAgbWNfcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYSA9IDA7CisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCiAKICAgZmx1c2hfZnJhbWUgKFNFTEVDVEVEX0ZSQU1FICgp KTsKICAgdW5iaW5kX3RvIChjb3VudCwgUW5pbCk7CkBAIC0xNzI5Niw2ICsyMjA5OCwxNiBAQCBy ZWRpc3BsYXlfd2luZG93IChMaXNwX09iamVjdCB3aW5kb3csIGJvb2wganVzdF90aGlzX29uZV9w KQogICBkZWJ1Z19tZXRob2RfYWRkICh3LCAicmVjZW50ZXIiKTsKICNlbmRpZgogCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgIG1jX3JlbW92 ZV9tdWx0aXBsZV9jdXJzb3JzICh3KTsKKyAgbWNfcmVtb3ZlX2Nyb3NzaGFpcnMgKHcpOworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIC8qIEZvcmdldCBhbnkgcHJldmlvdXNseSBy ZWNvcmRlZCBiYXNlIGxpbmUgZm9yIGxpbmUgbnVtYmVyIGRpc3BsYXkuICAqLwogICBpZiAoIWJ1 ZmZlcl91bmNoYW5nZWRfcCkKICAgICB3LT5iYXNlX2xpbmVfbnVtYmVyID0gMDsKQEAgLTE3NzI2 LDYgKzIyNTM4LDIxIEBAIHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0IHdpbmRvdywgYm9v bCBqdXN0X3RoaXNfb25lX3ApCiAgIGVsc2UKICAgICBURU1QX1NFVF9QVF9CT1RIIChDSEFSUE9T IChvcG9pbnQpLCBCWVRFUE9TIChvcG9pbnQpKTsKIAorCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTk9URTogIEFuIGlkbGUtdGltZXIgZnVu Y3Rpb24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmlnZ2VyIGByZWRpc3BsYXlfd2luZG93Jy4KK2Bv cHRpbWl6YXRpb24gMWAgKHdoaWNoIGluY2x1ZGVzIGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50 IG9uIHRoZSBmaXJzdCBzY3JlZW4KK2xpbmUpLCBhbmQgYG9wdGltaXphdGlvbiAzYCAod2hpY2gg aW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24gc2NyZWVuCitsaW5lcyBzdWJz ZXF1ZW50IHRvIHRoZSBmaXJzdCBzY3JlZW4gbGluZSksIGJ5cGFzcyBgcmVkaXNwbGF5X3dpbmRv dycuICovCisKKyAgbWNfcmVtb3ZlX211bHRpcGxlX2N1cnNvcnMgKHcpOworICBtY19yZW1vdmVf Y3Jvc3NoYWlycyAodyk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgc2V0X2J1 ZmZlcl9pbnRlcm5hbF8xIChvbGQpOwogICAvKiBBdm9pZCBhbiBhYm9ydCBpbiBURU1QX1NFVF9Q VF9CT1RIIGlmIHRoZSBidWZmZXIgaGFzIGJlY29tZQogICAgICBzaG9ydGVyLiAgVGhpcyBjYW4g YmUgY2F1c2VkIGJ5IGxvZyB0cnVuY2F0aW9uIGluICpNZXNzYWdlcyouICAqLwpAQCAtMjEwNzks NiArMjU5MDYsMjEgQEAgZGlzcGxheV9jb3VudF9saW5lc192aXN1YWxseSAoc3RydWN0IGl0ICpp dCkKIHN0YXRpYyB2b2lkCiBtYXliZV9wcm9kdWNlX2xpbmVfbnVtYmVyIChzdHJ1Y3QgaXQgKml0 KQogeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAq LworCisgIGJvb2wgYmFyZl9jcmFzaCA9IChpdC0+Z2x5cGhfcm93ID09IE5VTEwKKyAgICAgICAg ICAgICAgICAgICAgIHx8IGl0LT5nbHlwaF9yb3ctPnVzZWRbVEVYVF9BUkVBXSA9PSAwKQorICAg ICAgICAgICAgICAgICAgICA/IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIDogdHJ1ZTsKKyAg aWYgKGJhcmZfY3Jhc2gpCisgICAgcmV0dXJuOworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K KworCiAgIHB0cmRpZmZfdCBsYXN0X2xpbmUgPSBpdC0+bG51bTsKICAgcHRyZGlmZl90IHN0YXJ0 X2Zyb20sIGJ5dGVwb3M7CiAgIHB0cmRpZmZfdCB0aGlzX2xpbmU7CkBAIC0yOTc1OSw5ICszNDYw MSwzMiBAQCBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9u LAogICAgICAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7CiAgICAgfQogCisKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgIHctPm1jLmggPSAt MTsKKyAgdy0+bWMuZnggPSAtMTsKKyAgdy0+bWMuZnkgPSAtMTsKKyAgdy0+bWMuZ2x5cGhfZmxh dm9yID0gTk9fRkxBVk9SOworICB3LT5tYy5yZWQgPSAtMS4wOworICB3LT5tYy5ncmVlbiA9IC0x LjA7CisgIHctPm1jLmJsdWUgPSAtMS4wOworICB3LT5tYy5wb3NpbnQgPSAtMTsKKwogICBGUkFN RV9SSUYgKGYpLT5kcmF3X3dpbmRvd19jdXJzb3IgKHcsIGdseXBoX3JvdywgeCwgeSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3Vyc29yX3R5cGUsIG5ld19jdXJz b3Jfd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24sIGFjdGl2 ZV9jdXJzb3IpOworCisgIG1jX211bHRpcGxlX2N1cnNvcnNfcG9ydGFsICh3LCBvbiwgYWN0aXZl X2N1cnNvcik7CisKKyAgLyogVGhlIHJlYWwgY3Vyc29yIChkcmF3biBhYm92ZSkgaXMgZ2V0cyBy ZW1vdmVkIGJ5IGNyb3NzaGFpcnMuCisgIGBtY19kcmF3X2Nyb3NzaGFpcnMnIHJlbGllcyB1cG9u IGB3LT5waHlzX2N1cnNvci54L3kvaHBvcy92cG9zJyB3aGVuIE9OLiAqLworICBtY19jcm9zc2hh aXJzX3BvcnRhbCAodywgb24sIGFjdGl2ZV9jdXJzb3IpOworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKworCiB9CiAKIApAQCAtMjk3OTMsMTAgKzM0NjU4LDIyIEBAIHVwZGF0ZV93aW5kb3df Y3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9uKQogICAgICAgaWYgKHJvdy0+cmV2ZXJz ZWRfcCAmJiBocG9zID49IHJvdy0+dXNlZFtURVhUX0FSRUFdKQogCWhwb3MgPSByb3ctPnVzZWRb VEVYVF9BUkVBXSAtIDE7CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBM RSBDVVJTT1JTICovCisKKyAgICAgIGlmICghbWNfY3Jvc3NoYWlyc19wICh3KQorICAgICAgICAg ICYmICFtY19tdWx0aXBsZV9jdXJzb3JzX3AgKHcpKQorICAgICAgICB7CiAgICAgICBibG9ja19p bnB1dCAoKTsKICAgICAgIGRpc3BsYXlfYW5kX3NldF9jdXJzb3IgKHcsIG9uLCBocG9zLCB2cG9z LAogCQkJICAgICAgdy0+cGh5c19jdXJzb3IueCwgdy0+cGh5c19jdXJzb3IueSk7CiAgICAgICB1 bmJsb2NrX2lucHV0ICgpOworICAgICAgICB9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor CisKICAgICB9CiB9CiAKQEAgLTMyNTAzLDYgKzM3MzgwLDIyIEBAIHhfaW50ZXJzZWN0X3JlY3Rh bmdsZXMgKFhSZWN0YW5nbGUgKnIxLCBYUmVjdGFuZ2xlICpyMiwgWFJlY3RhbmdsZSAqcmVzdWx0 KQogdm9pZAogc3ltc19vZl94ZGlzcCAodm9pZCkKIHsKKworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBkZWZzdWJyICgmU21jX2FjdGl2YXRl X211bHRpcGxlX2N1cnNvcnMpOworCisgIGRlZnN1YnIgKCZTbWNfYWN0aXZhdGVfY3Jvc3NoYWly cyk7CisKKyAgZGVmc3ViciAoJlNtY19zdGRlcnIpOworCisgIGRlZnN1YnIgKCZTZGVidWdnaW5n KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBWd2l0aF9lY2hvX2FyZWFfc2F2 ZV92ZWN0b3IgPSBRbmlsOwogICBzdGF0aWNwcm8gKCZWd2l0aF9lY2hvX2FyZWFfc2F2ZV92ZWN0 b3IpOwogCkBAIC0zMzQ0MCw0ICszODMzMyw0IEBAIGNhbmNlbF9ob3VyZ2xhc3MgKHZvaWQpCiAg ICAgfQogfQogCi0jZW5kaWYgLyogSEFWRV9XSU5ET1dfU1lTVEVNICovCisjZW5kaWYgLyogSEFW RV9XSU5ET1dfU1lTVEVNICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0 IGEvc3JjL3h0ZXJtLmMgYi9zcmMveHRlcm0uYwppbmRleCBmOGVhNzg3Li43MWYxODRkIDEwMDY0 NAotLS0gYS9zcmMveHRlcm0uYworKysgYi9zcmMveHRlcm0uYwpAQCAtMTUzMCw2ICsxNTMwLDIw IEBAIHN0YXRpYyB2b2lkIHhfY2hlY2tfZm9udCAoc3RydWN0IGZyYW1lICosIHN0cnVjdCBmb250 ICopOwogc3RhdGljIHZvaWQKIHhfc2V0X2N1cnNvcl9nYyAoc3RydWN0IGdseXBoX3N0cmluZyAq cykKIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMg Ki8KKworICBpZiAocy0+dy0+bWMuY3Vyc29yX2djX2RlZmF1bHQpCisgICAgeworICAgICAgcy0+ Z2MgPSBzLT5mLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2M7CisgICAgICByZXR1cm47CisgICAg fQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIGlmIChzLT5mb250ID09IEZSQU1F X0ZPTlQgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5iYWNrZ3JvdW5kID09IEZSQU1FX0JBQ0tH Uk9VTkRfUElYRUwgKHMtPmYpCiAgICAgICAmJiBzLT5mYWNlLT5mb3JlZ3JvdW5kID09IEZSQU1F X0ZPUkVHUk9VTkRfUElYRUwgKHMtPmYpCkBAIC05MjUyLDYgKzkyNjYsMjYgQEAgeF9kcmF3X2hv bGxvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdykKIAog ICAvKiBDb21wdXRlIGZyYW1lLXJlbGF0aXZlIGNvb3JkaW5hdGVzIGZvciBwaHlzIGN1cnNvci4g ICovCiAgIGdldF9waHlzX2N1cnNvcl9nZW9tZXRyeSAodywgcm93LCBjdXJzb3JfZ2x5cGgsICZ4 LCAmeSwgJmgpOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VS U09SUyAqLworCisvKiBMRUdFTkQ6CisKKy0gIHRvcCB5ID09IFdJTkRPV19UT19GUkFNRV9QSVhF TF9ZICh3LCByb3ctPnkpCisKKy0gIGJvdHRvbSB5ID09IFdJTkRPV19UT19GUkFNRV9QSVhFTF9Z ICh3LCByb3ctPnkpIC0gcm93LT5oZWlnaHQKKworLSAgaCBvZiBIT0xMT1dfQk9YX0NVUlNPUiA9 PSByb3ctPmhlaWdodAorICAgW1RoaXMgYXZvaWRzIGEgdmlzaWJsZSBnYXAgYWJvdmUvYmVsb3cu XSAqLworCisgIGlmICh3LT5tYy5oID4gMCkKKyAgICBoID0gcm93LT5oZWlnaHQ7CisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCisKICAgd2QgPSB3LT5waHlzX2N1cnNvcl93aWR0aCAtIDE7 CiAKICAgLyogVGhlIGZvcmVncm91bmQgb2YgY3Vyc29yX2djIGlzIHR5cGljYWxseSB0aGUgc2Ft ZSBhcyB0aGUgbm9ybWFsCkBAIC05MzI4LDcgKzkzNjIsMTggQEAgeF9kcmF3X2Jhcl9jdXJzb3Ig KHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IHdpZHRoLCBlbnVt IHRleHQKIAkgaW52aXNpYmxlLiAgVXNlIHRoZSBnbHlwaCdzIGZvcmVncm91bmQgY29sb3IgaW5z dGVhZCBpbiB0aGlzCiAJIGNhc2UsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGdseXBoJ3Mg Y29sb3JzIGFyZSBjaG9zZW4gc28KIAkgdGhhdCB0aGUgZ2x5cGggaXMgbGVnaWJsZS4gICovCi0g ICAgICBpZiAoZmFjZS0+YmFja2dyb3VuZCA9PSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4 ZWwpCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICov CisKKyAgICAgIGlmIChmYWNlLT5iYWNrZ3JvdW5kID09IGYtPm91dHB1dF9kYXRhLngtPmN1cnNv cl9waXhlbAorICAgICAgICAgICYmICF3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkpCisK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCXhnY3YuYmFja2dyb3VuZCA9IHhnY3Yu Zm9yZWdyb3VuZCA9IGZhY2UtPmZvcmVncm91bmQ7CiAgICAgICBlbHNlCiAJeGdjdi5iYWNrZ3Jv dW5kID0geGdjdi5mb3JlZ3JvdW5kID0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsOwpA QCAtOTM1OSw2ICs5NDA0LDE3IEBAIHhfZHJhd19iYXJfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3 LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csIGludCB3aWR0aCwgZW51bSB0ZXh0CiAJICBpZiAoKGN1 cnNvcl9nbHlwaC0+cmVzb2x2ZWRfbGV2ZWwgJiAxKSAhPSAwKQogCSAgICB4ICs9IGN1cnNvcl9n bHlwaC0+cGl4ZWxfd2lkdGggLSB3aWR0aDsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgIC8qIEFsaWduIGFsbCBmYWtlIEJBUl9DVVJT T1Igb2YgdGhlIFZFUlRJQ0FMX1JVTEVSIHdpdGggYG9wb2ludF94Jy4gKi8KKyAgICBpZiAody0+ bWMuZnggPiAwKQorICAgICAgeCA9IHctPm1jLmZ4OworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKworCiAJICB4X2ZpbGxfcmVjdGFuZ2xlIChmLCBnYywgeCwKIAkJCSAgV0lORE9XX1RPX0ZS QU1FX1BJWEVMX1kgKHcsIHctPnBoeXNfY3Vyc29yLnkpLAogCQkJICB3aWR0aCwgcm93LT5oZWln aHQpOwpAQCAtOTQzNSwzMSArOTQ5MSwxNjMgQEAgeF9kcmF3X3dpbmRvd19jdXJzb3IgKHN0cnVj dCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdywgaW50IHgsCiAJfQogICAg ICAgZWxzZQogCXsKLQkgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCi0JICAgIHsKLQkgICAgY2FzZSBI T0xMT1dfQk9YX0NVUlNPUjoKLQkgICAgICB4X2RyYXdfaG9sbG93X2N1cnNvciAodywgZ2x5cGhf cm93KTsKLQkgICAgICBicmVhazsKIAotCSAgICBjYXNlIEZJTExFRF9CT1hfQ1VSU09SOgotCSAg ICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOwot CSAgICAgIGJyZWFrOwogCi0JICAgIGNhc2UgQkFSX0NVUlNPUjoKLQkgICAgICB4X2RyYXdfYmFy X2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOwotCSAgICAg IGJyZWFrOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRSBDVVJT T1JTICovCiAKLQkgICAgY2FzZSBIQkFSX0NVUlNPUjoKLQkgICAgICB4X2RyYXdfYmFyX2N1cnNv ciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEhCQVJfQ1VSU09SKTsKLQkgICAgICBicmVh azsKKyAgc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gRlJBTUVfRElTUExBWV9JTkZP IChmKTsKKyAgQ29sb3JtYXAgY21hcCA9IEZSQU1FX1hfQ09MT1JNQVAgKGYpOworICB1bnNpZ25l ZCBsb25nIG9yaWdpbmFsX2N1cnNvcl9waXhlbCA9IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9w aXhlbDsKKyAgLyogeHRlcm0uYy94dGVybS5oIHVzZSBHQzsgd2hlcmVhcywgdzMydGVybS5jL3cz MnRlcm0uaCB1c2UgWEdDVmFsdWVzICogKi8KKyAgR0Mgb3JpZ2luYWxfY3Vyc29yX2djID0gZi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djOworICBkb3VibGUgYmFzZSA9IDY1NTM1LjA7CisgIGRv dWJsZSB0ZXJtX3JlZCA9IGJhc2UgKiB3LT5tYy5yZWQ7CisgIGRvdWJsZSB0ZXJtX2dyZWVuID0g YmFzZSAqIHctPm1jLmdyZWVuOworICBkb3VibGUgdGVybV9ibHVlID0gYmFzZSAqIHctPm1jLmJs dWU7CisgIGludCBpbnRfcmVkID0gWEZJWE5VTSAoRnRydW5jYXRlIChtYWtlX2Zsb2F0ICh0ZXJt X3JlZCksIFFuaWwpKTsKKyAgaW50IGludF9ncmVlbiA9IFhGSVhOVU0gKEZ0cnVuY2F0ZSAobWFr ZV9mbG9hdCAodGVybV9ncmVlbiksIFFuaWwpKTs7CisgIGludCBpbnRfYmx1ZSA9IFhGSVhOVU0g KEZ0cnVuY2F0ZSAobWFrZV9mbG9hdCAodGVybV9ibHVlKSwgUW5pbCkpOzsKKyAgWENvbG9yIGNv bG9yOworICBjb2xvci5yZWQgPSBpbnRfcmVkOworICBjb2xvci5ncmVlbiA9IGludF9ncmVlbjsK KyAgY29sb3IuYmx1ZSA9IGludF9ibHVlOworICAvKiBgeF9hbGxvY19uZWFyZXN0X2NvbG9yJyBz ZXRzIHRoZSBgY29sb3IucGl4ZWxgLiAqLworICB4X2FsbG9jX25lYXJlc3RfY29sb3IgKGYsIGNt YXAsICZjb2xvcik7CisgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCisgIHsKKyAgICBjYXNlIEhPTExP V19CT1hfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmICh3LT5tYy5yZWQgPj0gMCAmJiB3LT5tYy5i bHVlID49IDAgJiYgdy0+bWMuZ3JlZW4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVj dCBmYWNlICpkZWZhdWx0X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIERFRkFVTFRfRkFDRV9JRCk7 CisgICAgICAgICAgTGlzcF9PYmplY3QgYnVmID0gdy0+Y29udGVudHM7CisgICAgICAgICAgQ0hF Q0tfQlVGRkVSIChidWYpOworICAgICAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChi dWYpOworICAgICAgICAgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50 X21hcmtfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAo QlZBUiAoYiwgbWFya19hY3RpdmUpKSk7CisgICAgICAgICAgcHRyZGlmZl90IHJlZ2lvbl9iZWdp bm5pbmcgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IFhGSVhOVU0gKEZyZWdpb25fYmVnaW5uaW5nICgp KSA6IC0xOworICAgICAgICAgIHB0cmRpZmZfdCByZWdpb25fZW5kID0gKHJlZ2lvbl9hY3RpdmVf cCkgPyBYRklYTlVNIChGcmVnaW9uX2VuZCAoKSkgOiAtMTsKKyAgICAgICAgICBib29sIHJlZ2lv bl9pbl9ib3VuZHNfcCA9IChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiB3LT5tYy5wb3NpbnQgPj0gcmVnaW9uX2JlZ2lubmluZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1jLnBvc2ludCA8IHJlZ2lvbl9l bmQpOworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+ Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhlCisgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiBg eF9tYWtlX2djJyBpbiB4Zm5zLmMuICAqLworICAgICAgICAgIGlmIChyZWdpb25fYWN0aXZlX3AK KyAgICAgICAgICAgICAgJiYgcmVnaW9uX2luX2JvdW5kc19wCisgICAgICAgICAgICAgICYmIGFj dGl2ZV9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93 X2FjdGl2ZV9yZWdpb25fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4g KCIrLXJlYWwtZmFrZS1jdXJzb3ItcmVnaW9uLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAg IHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlID0gRkFDRV9GUk9NX0lEIChm LCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgWFNldEZvcmVn cm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywg ZGVmYXVsdF9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQg KEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93 X2FjdGl2ZV9yZWdpb25fZmFjZS0+YmFja2dyb3VuZCk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICYmICFy ZWdpb25faW5fYm91bmRzX3AKKyAgICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVf cmVnaW9uX291dF9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIist cmVhbC1mYWtlLWN1cnNvci1yZWdpb24tZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBz dHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2UgPSBGQUNFX0ZST01fSUQg KGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICBY U2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX2djLCBkZWZhdWx0X2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgIFhTZXRC YWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3Jf Z2MsIGhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICghcmVnaW9uX2FjdGl2ZV9wICYmIGFjdGl2 ZV9wKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBo b2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi Ky1yZWFsLWZha2UtY3Vyc29yLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0 aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hf RElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgZGVmYXVsdF9mYWNlLT5m b3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJ U1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFj ZS0+YmFja2dyb3VuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIFRo ZSByZWdpb24gaXMgX25vdF8gdmlzaWJsZSBpbiB0aGUgaW5hY3RpdmUgd2luZG93IGJlY2F1c2Ug dGhlIG92ZXJsYXkgd2luZG93IHByb3BlcnR5IGlzIHVzZWQuICovCisgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIWFjdGl2ZV9wKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRf ZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLWZhY2UiKSwg dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfaW5hY3RpdmVf ZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQpOworICAgICAg ICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0 cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBkZWZhdWx0X2ZhY2UtPmZvcmVncm91bmQpOworICAgICAg ICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0 cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfaW5hY3RpdmVfZmFjZS0+YmFja2dyb3VuZCk7 CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAg ICAgLyogRm9yY2UgYHhfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRfZGF0YS54 LT5jdXJzb3JfZ2MnLiAgKi8KKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCA9IHRy dWU7CisgICAgICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFX X0NVUlNPUik7CisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSBmYWxzZTsKKyAg ICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MgPSBvcmlnaW5hbF9jdXJzb3JfZ2M7 CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBo aWphY2sgYGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICAqLworICAgICAgICAgIGYt Pm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9IGNvbG9yLnBpeGVsOworICAgICAgICAgIHhf ZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOworICAgICAgICAgIGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQor ICAgICAgICBlbHNlCisgICAgICAgICAgeF9kcmF3X2hvbGxvd19jdXJzb3IgKHcsIGdseXBoX3Jv dyk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGSUxMRURfQk9YX0NVUlNPUjoKKyAg ICB7CisgICAgICBpZiAody0+bWMucmVkID49IDAgJiYgdy0+bWMuYmx1ZSA+PSAwICYmIHctPm1j LmdyZWVuID49IDApCisgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2Rh dGEueC0+Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkg b2YgYHhfbWFrZV9nYycgaW4geGZucy5jLiAgKi8KKyAgICAgICAgeworICAgICAgICAgIGJsb2Nr X2lucHV0ICgpOworICAgICAgICAgIFhHQ1ZhbHVlcyBnY192YWx1ZXM7CisgICAgICAgICAgdW5z aWduZWQgbG9uZyBtYXNrID0gR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kIHwgR0NGaWxsU3R5 bGUgfCBHQ0xpbmVXaWR0aDsKKyAgICAgICAgICBnY192YWx1ZXMubGluZV93aWR0aCA9IDA7ICAv KiBNZWFucyAxIHVzaW5nIGZhc3QgYWxnb3JpdGhtLiAgKi8KKyAgICAgICAgICBnY192YWx1ZXMu Zm9yZWdyb3VuZCA9IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKGYpOworICAgICAgICAgIGdjX3Zh bHVlcy5iYWNrZ3JvdW5kID0geF9tYWtlX3RydWVjb2xvcl9waXhlbCAoZHB5aW5mbywgaW50X3Jl ZCwgaW50X2dyZWVuLCBpbnRfYmx1ZSk7CisgICAgICAgICAgZ2NfdmFsdWVzLmZpbGxfc3R5bGUg PSBGaWxsT3BhcXVlU3RpcHBsZWQ7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29y X2djID0gWENyZWF0ZUdDIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBGUkFNRV9YX1dJTkRPVyAoZiks IG1hc2ssICZnY192YWx1ZXMpOworICAgICAgICAgIC8qIEZvcmNlIGB4X3NldF9jdXJzb3JfZ2Mn IHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJy4gICovCisgICAgICAgICAg dy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSB0cnVlOworICAgICAgICAgIGRyYXdfcGh5c19jdXJz b3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOworICAgICAgICAgIHctPm1jLmN1 cnNvcl9nY19kZWZhdWx0ID0gZmFsc2U7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX2djID0gb3JpZ2luYWxfY3Vyc29yX2djOworICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7 CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5 cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAg IGNhc2UgQkFSX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAody0+bWMucmVkID49IDAgJiYgdy0+ bWMuYmx1ZSA+PSAwICYmIHctPm1jLmdyZWVuID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAv KiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICAq LworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbCA9IGNvbG9yLnBpeGVs OworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IHRydWU7CisgICAg ICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBCQVJf Q1VSU09SKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSBmYWxz ZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9j dXJzb3JfcGl4ZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHhfZHJhd19i YXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgQkFSX0NVUlNPUik7CisgICAg ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIQkFSX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAo dy0+bWMucmVkID49IDAgJiYgdy0+bWMuYmx1ZSA+PSAwICYmIHctPm1jLmdyZWVuID49IDApCisg ICAgICAgIHsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRh LngtPmN1cnNvcl9waXhlbCcuICAqLworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNv cl9waXhlbCA9IGNvbG9yLnBpeGVsOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2li bGVfb2theSA9IHRydWU7CisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3Jv dywgY3Vyc29yX3dpZHRoLCBIQkFSX0NVUlNPUik7CisgICAgICAgICAgdy0+bWMuY3Vyc29yX2dj X2ludmlzaWJsZV9va2F5ID0gZmFsc2U7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVs c2UKKyAgICAgICAgICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lk dGgsIEhCQVJfQ1VSU09SKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5PX0NVUlNP UjoKKyAgICAgIHctPnBoeXNfY3Vyc29yX3dpZHRoID0gMDsKKyAgICAgIGJyZWFrOworICAgIGRl ZmF1bHQ6CisgICAgICBlbWFjc19hYm9ydCAoKTsKKyAgfQorCisvKiBlbmQgTVVMVElQTEUgQ1VS U09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLQkgICAgY2FzZSBOT19DVVJTT1I6 Ci0JICAgICAgdy0+cGh5c19jdXJzb3Jfd2lkdGggPSAwOwotCSAgICAgIGJyZWFrOwogCi0JICAg IGRlZmF1bHQ6Ci0JICAgICAgZW1hY3NfYWJvcnQgKCk7Ci0JICAgIH0KIAl9CiAKICNpZmRlZiBI QVZFX1hfSTE4Tgo= --Multipart_Fri_Oct_12_19:17:32_2018-1--