<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>154405</bug_id>
          
          <creation_ts>2006-11-07 15:07 0000</creation_ts>
          <short_desc>[PATCH]app-portage/portage-utils-0.1.21 add overlays support</short_desc>
          <delta_ts>2009-08-04 17:34:33 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Applications</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          
          
          
          
          <priority>P2</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>samuel.lethiec@intelunix.fr</reporter>
          <assigned_to>portage-utils@gentoo.org</assigned_to>
          <cc>gengor@gentoo.org</cc>
    
    <cc>niki.guldbrand@gmail.com</cc>
    
    <cc>pacho@condmat1.ciencias.uniovi.es</cc>
    
    <cc>tcort@gentoo.org</cc>
    
    <cc>zigamlinar@gmail.com</cc>

      

      
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-07 15:07:15 0000</bug_when>
            <thetext>Hi, I was patching portage-utils so that it works with paludis, and thus with overlays, I though others than me might be interested by this. 

basicaly, I changed the syntax of the .ebuild.x a bit: 

overlay::category/packagename/packageversion.ebuild

where &apos;overlay&apos; is the name of the overlay  (name found in /path/to/overlay/profile/repo_name otherwise basename( /path/to/overlay) )

This file is still in $portdir but contains ebuild from every overlay (every overlay that is defined in the $PORTDIR_OVERLAY)

I also added the option --overlay ( -o ) for the qgrep, qsearch and quse tool (for the last one I just hope it will encourage overlay maintainers to describe their own flag in the correspondant files ( profiles/desc/* and profiles/use.*desc )

This option allow you to do the given action for only one overlay.

AFAIK, portage doesn&apos;t have yet an option to list overlay. that&apos;s why I added the option --ls-overlays (-l) to base tool &apos;q&apos; ( q --ls-overlays )

Hope you&apos;ll like it. Every comment is welcomed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-07 15:07:52 0000</bug_when>
            <thetext>Created an attachment (id=101420)
0.1.21-overlay-support.patch

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2006-11-07 15:20:23 0000</bug_when>
            <thetext>(From update of attachment 101420)
post a new patch that isnt full of pointless whitespace changes</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-07 15:27:13 0000</bug_when>
            <thetext>(In reply to comment #2)
&gt; (From update of attachment 101420 [edit])
&gt; post a new patch that isnt full of pointless whitespace changes
&gt; 

white space change are there for the better, just keep them, I just correct what wasn&apos;t correct from the beginning..

Anyway, I don&apos;t see any problem. but feel free to remove them
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2006-11-07 15:40:56 0000</bug_when>
            <thetext>i&apos;m not going to pick through and figure out what is legit changes and what is whitespace

as for it being &quot;for the better&quot;, that&apos;s nice, see above</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>tcort@gentoo.org</who>
            <bug_when>2006-11-07 19:06:42 0000</bug_when>
            <thetext>Your patch is against 0.1.21. A lot of changes have happened since then (for qcache at least). Please make your patch against CVS.

cvs -d cvs.gentoo.org:/var/cvsroot co gentoo-projects
http://sources.gentoo.org/viewcvs.py/gentoo-projects/portage-utils/

I don&apos;t know if it will allow you to checkout the sources anonymously, so I created a tarball for you :)
http://dev.gentoo.org/~tcort/tmp/portage-utils-20061007.tar.bz2</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-08 14:00:44 0000</bug_when>
            <thetext>ok, I did delete the &apos;useless&apos; part of the patch, so here is the new against your tarball </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-08 14:01:33 0000</bug_when>
            <thetext>Created an attachment (id=101495)
overlay-support.patch against portage-utils-20061007

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2006-11-08 15:37:55 0000</bug_when>
            <thetext>but you didnt ... that still contains pointless changes:
 - whitespace changes == noise
 - do not change portage -&gt; paludis
 - do not insert spurious whitespace
 - do not omit whitespace where it belongs
 - cuddle braces (except for func def)
 - do not cast xmalloc() return

ignoring all that, rather than having a portage tree var and an overlay var, it&apos;d probably simplify thing to just have a list of trees to search</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-08 22:53:51 0000</bug_when>
            <thetext>(In reply to comment #8)
&gt; but you didnt ... that still contains pointless changes:
&gt;  - do not change portage -&gt; paludis
I&apos;m sorry about that

&gt;  - do not omit whitespace where it belongs
&gt;  - cuddle braces (except for func def)
I don&apos;t understand this one:/

&gt;  - do not cast xmalloc() return
actually I tried to take the same syntax as you did. just grep for xmallox and you&apos;ll see you&apos;re sometimes doing a cast, sometimes not.

 
&gt; ignoring all that, rather than having a portage tree var and an overlay var,
&gt; it&apos;d probably simplify thing to just have a list of trees to search

actually, since it&apos;s a simple chained list, the overlay_gentoo is just the start of the list.. that makes things simpler, since the &apos;repodir&apos; is often use when it HAS to be the portage tree path. (especially for qcache). Doing what you said  would just add useless loop where it is just not needed (I think)

Anyway thanks for your time. </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-08 22:55:13 0000</bug_when>
            <thetext>Created an attachment (id=101520)
overlay-support.patch

without stupid word changes</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2006-11-08 23:46:41 0000</bug_when>
            <thetext>ive cleaned up the cvs tree as i noticed there were inconsistencies

in the README it tells you how to pull from anoncvs</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-09 15:11:40 0000</bug_when>
            <thetext>So here is the patch for the revision of today: 20061110

there shouldn&apos;t be any space changes, nor cast&apos;ing (?) on xmalloc() return.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-09 15:14:15 0000</bug_when>
            <thetext>Created an attachment (id=101575)
overlay-support.patch

So here is the patch for the revision of today: 20061110

there shouldn&apos;t be any space changes, nor cast&apos;ing (?) on xmalloc() return.

I still don&apos;t know what you meant with &apos;cuddle brace&apos;.. (my dictionnary didn&apos;t really help..)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-11 03:02:55 0000</bug_when>
            <thetext>&gt; ignoring all that, rather than having a portage tree var and an overlay var,
&gt; it&apos;d probably simplify thing to just have a list of trees to search

there is an other reason for that, the file .ebuild.x is stored in the $portdir, and there is only one .ebuild.x file for all overlays</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-11 08:26:25 0000</bug_when>
            <thetext>Created an attachment (id=101690)
overlay-support.patch

previously, depending on the loop, the last repository was skip, this wrong behaviour is corrected</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-11 11:43:49 0000</bug_when>
            <thetext>Created an attachment (id=101699)
overlay-support.patch

Sorry for the bump, this one deals better with no longer existing overlays (but referenced in the .ebuild.x)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2006-11-12 03:02:25 0000</bug_when>
            <thetext>why did you change qglsa in applets.h ?  i also still see some xmalloc() casts in there ...

wonder if it&apos;d be useful to make the overlay option a global one ?  maybe not so much ...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-12 04:09:08 0000</bug_when>
            <thetext>(In reply to comment #17)
&gt; why did you change qglsa in applets.h ?
Actually, I probably should not make this change in the public patch, but since qglsa is disabled in the Makefile, it just avoids the qglsa symlink to be created
 
&gt;  i also still see some xmalloc() casts in there ...
oops..

&gt; wonder if it&apos;d be useful to make the overlay option a global one ?  maybe not
&gt; so much ...
I don&apos;t think, the only applets concerned are qsearch, qgrep, and quse, for the others it just doesn&apos;t have any sense (for qcache: I haven&apos;t seen an overlay with metadata/cache yet, and due to portage log format, it&apos;s not easily possible to add overlay support to qlop too)


Here is a new one (without the qglsa change). It also stops(with an error message) when the user tries to to select an overlay that doesn&apos;t exist ( qapplet --overlay wrong_overlay_name)

The patch also change a little bit test/install/dotest due to a space added in the &quot;Usage:&quot; help

well I think that&apos;s it for the portage part.


btw, once all this will be correct, do you think we can add a &quot;paludis&quot; use flag, if you say so, i will post the patch too, but, one thing at a time..</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-12 04:10:08 0000</bug_when>
            <thetext>Created an attachment (id=101723)
overlay-support.patch

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-12 04:19:15 0000</bug_when>
            <thetext>I forgot to say: 

make -C tests/source/

fails (src.style), but it looks like it&apos;s due to some of your recent changes (most of the incorrect lines are comments)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-12 05:53:37 0000</bug_when>
            <thetext>Created an attachment (id=101730)
overlay-support.patch

a little improvement, so that the portroot is now considered
(and that should be enough for now)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-12 13:42:59 0000</bug_when>
            <thetext>Created an attachment (id=101779)
overlay-support.patch

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>tcort@gentoo.org</who>
            <bug_when>2006-11-13 15:35:02 0000</bug_when>
            <thetext>(In reply to comment #18)
&gt; (for qcache: I haven&apos;t seen an overlay with metadata/cache yet

CVS log from 8 weeks, 2 days ago...

Re-wrote qcache to use /var/cache/edb/dep instead of
PORTDIR/metadata/cache....</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-14 15:30:07 0000</bug_when>
            <thetext>Created an attachment (id=101954)
overlay-support.patch

(In reply to comment #23)
&gt; (In reply to comment #18)
&gt; &gt; (for qcache: I haven&apos;t seen an overlay with metadata/cache yet
&gt; 
&gt; CVS log from 8 weeks, 2 days ago(...)

Oh well.. but it is portage which &apos;generates&apos; /var/cache/edb/dep, So  I just have nothing to do in qcache.c right?

I haven&apos;t look in &apos;the new&apos; qcache.c yet, but do I really need to?

small fix, that so that quse now correctly frees search_vars[idx] when idx=3 (option --format) 
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-20 16:19:50 0000</bug_when>
            <thetext>Created an attachment (id=102433)
FYI: quse.patch

There was something I&apos;ve missed a lot, so I added it to quse, you&apos;ll tell me if you like, 

I wanted to be able to see the useflag (or whatever search_vars you want) for a particular package instead of every package (works only with the --all switch)

quse  -a rtage-ut
gentoo::app-portage/portage-utils/portage-utils-0.1.20.ebuild python 
gentoo::app-portage/portage-utils/portage-utils-0.1.21.ebuild python 
local::app-portage/portage-utils/portage-utils-20061122.ebuild python paludis

the diff for this particular change is is the quse.patch, but it is already included in the overlay-support.patch


I&apos;ve also made a small change in quse.c, so that it now uses the different verbosity level.

And, the last change is again in quse.c when doing something like this:

quse -o local -a rtage-ut -vv
local::app-portage/portage-utils/portage-utils-20061122.ebuild python paludis 
 global:python: Adds support/bindings for the Python language
 (local) global:paludis: Add paludis(the other package mangler) support

(with verbose&gt;1 and with the --overlay option ) the flag discription is search in every overlay and not just the one given as argument to the --overlay option

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-11-20 16:20:56 0000</bug_when>
            <thetext>Created an attachment (id=102434)
overlay-support.patch

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2006-12-27 11:56:53 0000</bug_when>
            <thetext>Created an attachment (id=104816)
overlay-manpages.patch

here is the patch for the man pages</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2007-01-15 20:42:05 0000</bug_when>
            <thetext>Created an attachment (id=107119)
overlay-support.patch

hey, I&apos;m just dropping the latest patch here in case someone wanted to look into it

portage-utils does almost no longer depend on the gentoo overlay, it&apos;s now a simple chain list as suggested.

If you know where to store .ebuild.x and .metadata.x instead of inside the gentoo tree, then portage-utils won&apos;t depend anymore on it.

many things changed, probably too many so that you want review/integrate it. anyway...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2007-01-15 20:42:57 0000</bug_when>
            <thetext>Created an attachment (id=107120)
portage2paludis.patch

and the paludis patch, just in case some one was looking for it on BGO.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2007-01-16 15:52:58 0000</bug_when>
            <thetext>Created an attachment (id=107183)
overlay-support.patch

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2007-01-16 15:53:20 0000</bug_when>
            <thetext>Created an attachment (id=107184)
portage2paludis.patch

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>samuel.lethiec@intelunix.fr</who>
            <bug_when>2007-01-19 15:18:21 0000</bug_when>
            <thetext>Created an attachment (id=107450)
overlay-support.patch portage2paludis.patch and more..

again a new bump:
portage-utils now use the overlay/profiles/categories, if it exists

when searching the name ( ie not the DESCRIPTION )  it is now possible to make full use of the atom_explode thing:

eg: 
To list every package in the sys-apps category
qsearch sys-apps/
To list every package in the sys-apps category in the overlays the regexp match pal.*a.$  
qsearch sys-apps/::pal.*a.$

or even exlude an overlay while searching
qsearch sthg::[^gentoo]


and so on, a kind of changelog can be found here: http://fatimademe.free.fr/portage-utils/changelog</thetext>
          </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101420</attachid>
            <date>2006-11-07 15:07 0000</date>
            <desc>0.1.21-overlay-support.patch</desc>
            <filename>0.1.21-overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0wLjEuMjEvYXBwbGV0cy5oIHBvcnRhZ2UtdXRpbHMt
MC4xLjIxLm5ldy9hcHBsZXRzLmgKLS0tIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL2FwcGxldHMuaAky
MDA2LTA4LTIxIDE0OjMzOjE4LjAwMDAwMDAwMCArMDIwMAorKysgcG9ydGFnZS11dGlscy0wLjEu
MjEubmV3L2FwcGxldHMuaAkyMDA2LTExLTA3IDE5OjAyOjMzLjA4NDgzMTY4NCArMDEwMApAQCAt
MjksNyArMjksNyBAQCBERUNMQVJFX0FQUExFVChxeHBhaykKIERFQ0xBUkVfQVBQTEVUKHFwa2cp
CiBERUNMQVJFX0FQUExFVChxZ3JlcCkKIERFQ0xBUkVfQVBQTEVUKHFhdG9tKQotREVDTEFSRV9B
UFBMRVQocW1lcmdlKQorREVDTEFSRV9BUFBMRVQocW1lcmdlKSAKIERFQ0xBUkVfQVBQTEVUKHFj
YWNoZSkKIERFQ0xBUkVfQVBQTEVUKHFweSkKIERFQ0xBUkVfQVBQTEVUKHFnbHNhKSAvKiBkaXNh
YmxlICovCkBAIC00NywyNCArNDcsMjQgQEAgc3RydWN0IGFwcGxldF90IHsKIAljb25zdCBjaGFy
ICpkZXNjOwogfSBhcHBsZXRzW10gPSB7CiAJLyogcSBtdXN0IGFsd2F5cyBiZSB0aGUgZmlyc3Qg
YXBwbGV0ICovCi0JeyJxIiwgICAgICAgICBxX21haW4sICAgICAgICAgIjxhcHBsZXQ+IDxhcmdz
PiIsICJ2aXJ0dWFsIGFwcGxldCJ9LAotCXsicWF0b20iLCAgICAgcWF0b21fbWFpbiwgICAgICI8
cGtnPiIsICAgICAgICAgICAic3BsaXQgYXRvbSBzdHJpbmdzIn0sCi0JeyJxY2FjaGUiLCAgICBx
Y2FjaGVfbWFpbiwgICAgIjxhY3Rpb24+IDxhcmdzPiIsICJzZWFyY2ggdGhlIG1ldGFkYXRhIGNh
Y2hlIn0sCi0JeyJxY2hlY2siLCAgICBxY2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAg
ICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMifSwKLQl7InFkZXBlbmRzIiwgIHFkZXBlbmRzX21haW4s
ICAiPHBrZ25hbWU+IiwgICAgICAgInNob3cgZGVwZW5kZW5jeSBpbmZvIn0sCi0JeyJxZmlsZSIs
ICAgICBxZmlsZV9tYWluLCAgICAgIjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93
bmluZyBmaWxlcyJ9LAotCXsicWdsc2EiLCAgICAgcWdsc2FfbWFpbiwgICAgICI8YWN0aW9uPiA8
bGlzdD4iLCAiY2hlY2sgR0xTQXMgYWdhaW5zdCBzeXN0ZW0ifSwKLQl7InFncmVwIiwgICAgIHFn
cmVwX21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4gZWJ1aWxkcyJ9LAotCXsi
cWxpc3QiLCAgICAgcWxpc3RfbWFpbiwgICAgICI8cGtnbmFtZT4iLCAgICAgICAibGlzdCBmaWxl
cyBvd25lZCBieSBwa2duYW1lIn0sCi0JeyJxbG9wIiwgICAgICBxbG9wX21haW4sICAgICAgIjxw
a2duYW1lPiIsICAgICAgICJlbWVyZ2UgbG9nIGFuYWx5emVyIn0sCi0JeyJxbWVyZ2UiLCAgICBx
bWVyZ2VfbWFpbiwgICAgIjxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVyZ2UgYmluYXJ5
IHBhY2thZ2UifSwKLQl7InFwa2ciLCAgICAgIHFwa2dfbWFpbiwgICAgICAiPG1pc2MgYXJncz4i
LCAgICAgIm1hbmlwdWxhdGUgR2VudG9vIGJpbnBrZ3MifSwKLQl7InFweSIsICAgICAgcXB5X21h
aW4sICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJweXRob24gaW50ZXJmYWNlIn0sCi0JeyJxc2Vh
cmNoIiwgICBxc2VhcmNoX21haW4sICAgIjxyZWdleD4iLCAgICAgICAgICJzZWFyY2ggcGtnbmFt
ZS9kZXNjIn0sCi0JeyJxc2l6ZSIsICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2duYW1lPiIsICAg
ICAgICJjYWxjdWxhdGUgc2l6ZSB1c2FnZSJ9LAotCXsicXRiejIiLCAgICAgcXRiejJfbWFpbiwg
ICAgICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB0YnoyIHBhY2thZ2VzIn0sCi0JeyJx
dXNlIiwgICAgICBxdXNlX21haW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJmaW5kIHBrZ3Mg
dXNpbmcgdXNlZmxhZ3MifSwKLQl7InF4cGFrIiwgICAgIHF4cGFrX21haW4sICAgICAiPG1pc2Mg
YXJncz4iLCAgICAgIm1hbmlwdWxhdGUgeHBhayBhcmNoaXZlcyJ9LAorCXsicSIsICAgICAgICAg
cV9tYWluLCAgICAgICAgICI8YXBwbGV0PiA8YXJncz4iLCAidmlydHVhbCBhcHBsZXQiCQl9LAor
CXsicWF0b20iLCAgICAgcWF0b21fbWFpbiwgICAgICI8cGtnPiIsICAgICAgICAgICAic3BsaXQg
YXRvbSBzdHJpbmdzIgkJfSwKKwl7InFjYWNoZSIsICAgIHFjYWNoZV9tYWluLCAgICAiPGFjdGlv
bj4gPGFyZ3M+IiwgInNlYXJjaCB0aGUgbWV0YWRhdGEgY2FjaGUiCX0sCisJeyJxY2hlY2siLCAg
ICBxY2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2Vz
dHMiCX0sCisJeyJxZGVwZW5kcyIsICBxZGVwZW5kc19tYWluLCAgIjxwa2duYW1lPiIsICAgICAg
ICJzaG93IGRlcGVuZGVuY3kgaW5mbyIJCX0sCisJeyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAg
ICAgIjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmluZyBmaWxlcyIJfSwKKwl7
InFncmVwIiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4g
ZWJ1aWxkcyIJCX0sCisJeyJxbGlzdCIsICAgICBxbGlzdF9tYWluLCAgICAgIjxwa2duYW1lPiIs
ICAgICAgICJsaXN0IGZpbGVzIG93bmVkIGJ5IHBrZ25hbWUiCX0sCisJeyJxbG9wIiwgICAgICBx
bG9wX21haW4sICAgICAgIjxwa2duYW1lPiIsICAgICAgICJwYWx1ZGlzIGxvZyBhbmFseXplciIJ
CX0sCisJeyJxcGtnIiwgICAgICBxcGtnX21haW4sICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJt
YW5pcHVsYXRlIEdlbnRvbyBiaW5wa2dzIgl9LAorCXsicXNlYXJjaCIsICAgcXNlYXJjaF9tYWlu
LCAgICI8cmVnZXg+IiwgICAgICAgICAic2VhcmNoIHBrZ25hbWUvZGVzYyIJCX0sCisJeyJxc2l6
ZSIsICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2duYW1lPiIsICAgICAgICJjYWxjdWxhdGUgc2l6
ZSB1c2FnZSIJCX0sCisJeyJxdGJ6MiIsICAgICBxdGJ6Ml9tYWluLCAgICAgIjxtaXNjIGFyZ3M+
IiwgICAgICJtYW5pcHVsYXRlIHRiejIgcGFja2FnZXMiCX0sCisJeyJxdXNlIiwgICAgICBxdXNl
X21haW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJmaW5kIHBrZ3MgdXNpbmcgdXNlZmxhZ3Mi
CX0sCisJeyJxeHBhayIsICAgICBxeHBha19tYWluLCAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJt
YW5pcHVsYXRlIHhwYWsgYXJjaGl2ZXMiCX0sCisJeyJxbWVyZ2UiLCAgICBxbWVyZ2VfbWFpbiwg
ICAgIjxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVyZ2UgYmluYXJ5IHBhY2thZ2UifSwJ
CisJeyJxZ2xzYSIsICAgICBxZ2xzYV9tYWluLCAgICAgIjxhY3Rpb24+IDxsaXN0PiIsIE5VTEwJ
CQkJfSwJCS8qICJjaGVjayBHTFNBcyBhZ2FpbnN0IHN5c3RlbSIgKi8KKwl7InFweSIsICAgICAg
IHFweV9tYWluLCAgICAgICAiPG1pc2MgYXJncz4iLCAgICAgTlVMTAkJCQl9LAkJLyogInB5dGhv
biBpbnRlcmZhY2UiICovCiAKIAogCS8qIGFsaWFzZXMgZm9yIGVxdWVyeSBjYXBhdGFiaWxpdHkg
Ki8KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0wLjEuMjEvbWFpbi5jIHBvcnRhZ2UtdXRpbHMt
MC4xLjIxLm5ldy9tYWluLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL21haW4uYwkyMDA2LTA4
LTIxIDE0OjMzOjE4LjAwMDAwMDAwMCArMDIwMAorKysgcG9ydGFnZS11dGlscy0wLjEuMjEubmV3
L21haW4uYwkyMDA2LTExLTA4IDIxOjAwOjU0LjYyMTY1MjIxMSArMDEwMApAQCAtNzEsNiArNzEs
NyBAQCBpbnQgcmVtYXRjaChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgCiBzdGF0aWMgY2hh
ciAqcm1zcGFjZShjaGFyICopOwogCiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCk7
Cit2b2lkIGluaXRpYWxpemVfb3ZlcmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pOwogdm9p
ZCBpbml0aWFsaXplX2VidWlsZF9mbGF0KHZvaWQpOwogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxk
X2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9hc19uZWVkZWQodm9pZCk7CkBAIC04NSwx
MyArODYsMjEgQEAgc3RhdGljIGludCBxdWlldCA9IDA7CiBzdGF0aWMgY2hhciBwcmV0ZW5kID0g
MDsKIHN0YXRpYyBjaGFyIHJlaW5pdGlhbGl6ZSA9IDA7CiBzdGF0aWMgY2hhciByZWluaXRpYWxp
emVfbWV0YWNhY2hlID0gMDsKLXN0YXRpYyBjaGFyIHBvcnRkaXJbX1FfUEFUSF9NQVhdID0gIi91
c3IvcG9ydGFnZSI7CiBzdGF0aWMgY2hhciBwb3J0YXJjaFsyMF0gPSAiIjsKIHN0YXRpYyBjaGFy
IHBvcnR2ZGJbXSA9ICJ2YXIvZGIvcGtnIjsKIHN0YXRpYyBjaGFyIHBvcnRjYWNoZWRpcltdID0g
Im1ldGFkYXRhL2NhY2hlIjsKIHN0YXRpYyBjaGFyIHBvcnRyb290W19RX1BBVEhfTUFYXSA9ICIv
IjsKIHN0YXRpYyBjaGFyIGNvbmZpZ19wcm90ZWN0W19RX1BBVEhfTUFYXSA9ICIvZXRjLyI7CiAK
K3R5cGVkZWYgc3RydWN0IG92ZXJsYXlfdCBvdmVybGF5X3Q7CitzdHJ1Y3Qgb3ZlcmxheV90IHsK
KwljaGFyIG5hbWVbNjRdOworCWNoYXIgcGF0aFtfUV9QQVRIX01BWF07CisJc3RydWN0IG92ZXJs
YXlfdCAqbmV4dDsKK307CisKK3N0YXRpYyBvdmVybGF5X3QgKm92ZXJsYXlfZ2VudG9vID0gTlVM
TDsKKwogY2hhciBwa2dkaXJbNTEyXSA9ICIvdXNyL3BvcnRhZ2UvcGFja2FnZXMvIjsKIGNoYXIg
cG9ydF90bXBkaXJbNTEyXSA9ICIvdmFyL3RtcC9wb3J0YWdlLyI7CiAKQEAgLTE3Niw3ICsxODUs
NyBAQCB2b2lkIG5vX2NvbG9ycygpIHsKIAlnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBleCBBICMj
IF9GTEFHUywgYSAjIyBfbG9uZ19vcHRzLCBOVUxMKQogLyogZGlzcGxheSB1c2FnZSBhbmQgZXhp
dCAqLwogc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhciAqZmxhZ3MsIHN0
cnVjdCBvcHRpb24gY29uc3Qgb3B0c1tdLCAKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmhlbHBbXSwgaW50IGJsYWJiZXIpCisJCSAgY29uc3QgY2hhciAqaGVscFtdLCBpbnQgYmxhYmJl
cikKIHsKIAl1bnNpZ25lZCBsb25nIGk7CiAJaWYgKGJsYWJiZXIgPT0gMCkgewpAQCAtMTk5LDEw
ICsyMDgsMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTIxMyw3ICsyMjIsOCBAQCBzdGF0aWMgdm9pZCB2ZXJzaW9uX2JhcmYoY29uc3QgY2hhciAq
SWQpCiAjIGRlZmluZSBWRVJTSU9OICJjdnMiCiAjZW5kaWYKIAlwcmludGYoInBvcnRhZ2UtdXRp
bHMtJXM6IGNvbXBpbGVkIG9uICVzXG4lc1xuIgotCSAgICAgICAiJXMgd3JpdHRlbiBmb3IgR2Vu
dG9vIGJ5IDxzb2xhciBhbmQgdmFwaWVyIEAgZ2VudG9vLm9yZz5cbiIsCisJICAgICAgICIlcyB3
cml0dGVuIGZvciBHZW50b28gYnkgPHNvbGFyIGFuZCB2YXBpZXIgQCBnZW50b28ub3JnPlxuIgor
CSAgICAgICAibW9kaWZpZWQgZm9yIG92ZXJsYXkgc3VwcG9ydCBieSBzYW11ZWxldGhpZWMgQCBo
b3RtYWlsLmNvbVxuIiwKIAkgICAgICAgVkVSU0lPTiwgX19EQVRFX18sIElkLCBhcmd2MCk7CiAJ
ZXhpdChFWElUX1NVQ0NFU1MpOwogfQpAQCAtMjk4LDM5ICszMDgsMzkgQEAgc3RhdGljIGNoYXIg
KnJlbW92ZV9leHRyYV9zcGFjZShjaGFyICpzdAogdm9pZCBmcmVlYXJndihpbnQsIGNoYXIgKiop
Owogdm9pZCBmcmVlYXJndihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKIAlpbnQgaTsKLSAgICAg
ICAgaWYgKGFyZ2MgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7
IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoYXJndltpXSk7Ci0gICAgICAgICAg
ICAgICAgZnJlZShhcmd2KTsKLSAgICAgICAgfQorCWlmIChhcmdjID4gMCkgeworCQlmb3IgKGkg
PSAwOyBpIDwgYXJnYzsgaSsrKQorCQkJZnJlZShhcmd2W2ldKTsKKwkJZnJlZShhcmd2KTsKKwl9
CiB9CiAKIHZvaWQgbWFrZWFyZ3YoY2hhciAqc3RyaW5nLCBpbnQgKmFyZ2MsIGNoYXIgKioqYXJn
dik7CiB2b2lkIG1ha2Vhcmd2KGNoYXIgKnN0cmluZywgaW50ICphcmdjLCBjaGFyICoqKmFyZ3Yp
IHsKIAlpbnQgY3VyYyA9IDI7Ci0JY2hhciAqcSwgKnAsICpzdHI7ICAgICAgICAKKwljaGFyICpx
LCAqcCwgKnN0cjsJCiAJKCphcmd2KSA9IChjaGFyICoqKSBtYWxsb2Moc2l6ZW9mKGNoYXIgKiop
ICogY3VyYyk7CiAKLQkqYXJnYyA9IDE7ICAgICAgICAKKwkqYXJnYyA9IDE7CQogCSgqYXJndilb
MF0gPSB4c3RyZHVwKGFyZ3YwKTsKLQlxID0geHN0cmR1cChzdHJpbmcpOyAgICAgICAgCisJcSA9
IHhzdHJkdXAoc3RyaW5nKTsJCiAJc3RyID0gcTsKIAotCXJlbW92ZV9leHRyYV9zcGFjZShzdHIp
OyAgICAgICAgCisJcmVtb3ZlX2V4dHJhX3NwYWNlKHN0cik7CQogCXJtc3BhY2Uoc3RyKTsKIAog
CXdoaWxlIChzdHIpIHsKIAkJaWYgKChwID0gc3RyY2hyKHN0ciwgJyAnKSkgIT0gTlVMTCkKIAkJ
CSoocCsrKSA9ICdcMCc7CiAKLSAgICAgICAgICAgICAgICBpZiAoKmFyZ2MgPT0gY3VyYykgewor
CQlpZiAoKmFyZ2MgPT0gY3VyYykgewogCQkJY3VyYyAqPSAyOwogCQkJKCphcmd2KSA9IChjaGFy
ICoqKSByZWFsbG9jKCphcmd2LCBzaXplb2YoY2hhciAqKikgKiBjdXJjKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgKCphcmd2KVsqYXJnY10gPSB4c3RyZHVwKHN0cik7Ci0g
ICAgICAgICAgICAgICAgKCphcmdjKSsrOwotICAgICAgICAgICAgICAgIHN0ciA9IHA7Ci0gICAg
ICAgIH0KKwkJfQorCQkoKmFyZ3YpWyphcmdjXSA9IHhzdHJkdXAoc3RyKTsKKwkJKCphcmdjKSsr
OworCQlzdHIgPSBwOworCX0KIAlmcmVlKHEpOwogfQogCkBAIC00NTMsMTcgKzQ2Myw3OSBAQCBj
aGFyICpzdHJpbmNyX3Zhcihjb25zdCBjaGFyICpuYW1lLCBjaGFyCiAJcmV0dXJuIChjaGFyICop
IHZhbHVlOwogfQogCit2b2lkIGluaXRpYWxpemVfb3ZlcmxheXMgKGNoYXIgcG9ydGRpcl9vdmVy
bGF5W10pCit7CisJc2hvcnQgbWVycm9yID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpFXSwgZmlsZVtf
UV9QQVRIX01BWF0sICpzLCAqcCwgKnQ7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKKwlGSUxF
ICpyZXBvX25hbWVGUDsKKwlzID0gcG9ydGRpcl9vdmVybGF5OworCWN1cl9vdmVybGF5ID0gb3Zl
cmxheV9nZW50b287CisKKwl3aGlsZSAoKnMpIHsKKwkJY3VyX292ZXJsYXktPm5leHQgPSAob3Zl
cmxheV90ICopIHhtYWxsb2MgKCBzaXplb2YgKCpjdXJfb3ZlcmxheS0+bmV4dCkpOworCQljdXJf
b3ZlcmxheSA9IGN1cl9vdmVybGF5LT5uZXh0OworCQljdXJfb3ZlcmxheS0+bmV4dCA9IE5VTEw7
CisKKwkJaWYgKCAocD1zdHJjaHIocywnICcpKSkKKwkJCSpwID0gMDsKKworCQlzdHJuY3B5KGN1
cl9vdmVybGF5LT5wYXRoLCBzLCBzaXplb2YoY3VyX292ZXJsYXktPnBhdGgpKTsKKworCQkvKiBm
aW5kIHRoZSBuYW1lIGZvciB0aGUgb3ZlcmxheSAqLworCQlzdHJuY3B5KGZpbGUsIGN1cl9vdmVy
bGF5LT5wYXRoLCBfUV9QQVRIX01BWCk7CisJCXN0cm5jYXQoZmlsZSwgIi9wcm9maWxlcy9yZXBv
X25hbWUiLCBfUV9QQVRIX01BWCk7CisJCWlmICgoIHJlcG9fbmFtZUZQID0gZm9wZW4oZmlsZSwg
InIiKSApKQorCQl7CisJCQlpZiAoICEgKCBmZ2V0cyhidWYsIHNpemVvZihidWYpLHJlcG9fbmFt
ZUZQKSkgKQorCQkJCW1lcnJvcisrOworCisJCQlybXNwYWNlKGJ1Zik7CisJCQlpZiAoICh0ID0g
c3RyY2hyKGJ1ZiwnXG4nKSkpCisJCQkJKnQgPSAwOworCisJCQlzdHJuY3B5KGN1cl9vdmVybGF5
LT5uYW1lLCBidWYsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpOworCisJCQlmY2xvc2UocmVw
b19uYW1lRlApOworCisJCX0gZWxzZSAKKwkJCW1lcnJvcisrOworCisJCWlmIChtZXJyb3IpIHsK
KwkJCS8qIGRlbGV0ZSB0cmFpbGluZyAnLycgKi8KKwkJCXQgPSBjdXJfb3ZlcmxheS0+cGF0aCAr
IHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0aCkgLSAxOworCQkJaWYgKCAqdCA9PSAnLycgKQorCQkJ
CSp0ID0gMDsKKworCQkJc3RybmNhdChjdXJfb3ZlcmxheS0+bmFtZSwgYmFzZW5hbWUoY3VyX292
ZXJsYXktPnBhdGgpLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKTsKKwkJCW1lcnJvcj0wOwor
CQl9CisKKwkJaWYgKHApCisJCQlzID0gcCsxOworCQllbHNlCisJCQlicmVhazsKKwl9CisJCit9
CisKKwogdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiB7CiAJY2hhciBub2NvbG9y
ID0gMDsKIAlpbnQgaSwgZjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlGSUxFICpmcDsKKwljaGFyIHRt
cF9wb3J0ZGlyW19RX1BBVEhfTUFYXTsKKwljaGFyIHBvcnRkaXJfb3ZlcmxheVsyMDQ4XSA9ICIi
OworCiAJY2hhciBidWZbQlVGU0laRV0sICpzLCAqcDsKIAogCWNoYXIgcHJvZmlsZVtfUV9QQVRI
X01BWF0sIHBvcnRhZ2VfZmlsZVtfUV9QQVRIX01BWF07CisKIAljb25zdCBjaGFyICpmaWxlc1td
ID0ge3BvcnRhZ2VfZmlsZSwgIi9ldGMvbWFrZS5nbG9iYWxzIiwgIi9ldGMvbWFrZS5jb25mIn07
CiAJdHlwZWRlZiBlbnVtIHsgX1FfQk9PTCwgX1FfU1RSLCBfUV9JU1RSIH0gdmFyX3R5cGVzOwor
CQogCXN0cnVjdCB7CiAJCWNvbnN0IGNoYXIgKm5hbWU7CiAJCWNvbnN0IHNpemVfdCBuYW1lX2xl
bjsKQEAgLTQ3MSwxOSArNTQzLDI2IEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lk
KQogCQljaGFyICp2YWx1ZTsKIAkJY29uc3Qgc2l6ZV90IHZhbHVlX2xlbjsKIAl9IHZhcnNfdG9f
cmVhZFtdID0gewotCQl7IkFDQ0VQVF9MSUNFTlNFIiwgMTQsIF9RX1NUUiwgIGFjY2VwdF9saWNl
bnNlLCBzaXplb2YoYWNjZXB0X2xpY2Vuc2UpfSwKLQkJeyJJTlNUQUxMX01BU0siLCAxMiwgX1Ff
SVNUUiwgIGluc3RhbGxfbWFzaywgc2l6ZW9mKGluc3RhbGxfbWFzayl9LAotCQl7IkFSQ0giLCAg
ICA0LCBfUV9TVFIsICBwb3J0YXJjaCwgc2l6ZW9mKHBvcnRhcmNoKX0sCi0JCXsiQ09ORklHX1BS
T1RFQ1QiLCAgICAxNCwgX1FfU1RSLCAgY29uZmlnX3Byb3RlY3QsIHNpemVvZihjb25maWdfcHJv
dGVjdCl9LAotCQl7Ik5PQ09MT1IiLCA3LCBfUV9CT09MLCAmbm9jb2xvciwgMX0sCi0JCXsiRkVB
VFVSRVMiLDgsIF9RX0lTVFIsICBmZWF0dXJlcywgc2l6ZW9mKGZlYXR1cmVzKX0sCi0JCXsiUE9S
VERJUiIsIDcsIF9RX1NUUiwgIHBvcnRkaXIsIHNpemVvZihwb3J0ZGlyKX0sCi0JCXsiUE9SVEFH
RV9CSU5IT1NUIiwgICAxNSwgX1FfU1RSLCAgYmluaG9zdCwgc2l6ZW9mKGJpbmhvc3QpfSwKLQkJ
eyJQT1JUQUdFX1RNUERJUiIsICAgIDE0LCBfUV9TVFIsICBwb3J0X3RtcGRpciwgc2l6ZW9mKHBv
cnRfdG1wZGlyKX0sCi0JCXsiUEtHRElSIiwgIDYsIF9RX1NUUiwgIHBrZ2Rpciwgc2l6ZW9mKHBr
Z2Rpcil9LAotCQl7IlJPT1QiLCAgICA0LCBfUV9TVFIsICBwb3J0cm9vdCwgc2l6ZW9mKHBvcnRy
b290KX0KKwkJeyJBQ0NFUFRfTElDRU5TRSIsCTE0LCBfUV9TVFIsCWFjY2VwdF9saWNlbnNlLAkJ
IHNpemVvZihhY2NlcHRfbGljZW5zZSkJCX0sCisJCXsiSU5TVEFMTF9NQVNLIiwJMTIsIF9RX0lT
VFIsCWluc3RhbGxfbWFzaywJCSBzaXplb2YoaW5zdGFsbF9tYXNrKQkJfSwKKwkJeyJBUkNIIiwJ
CTQsIF9RX1NUUiwJcG9ydGFyY2gsCQkgc2l6ZW9mKHBvcnRhcmNoKQkJfSwKKwkJeyJDT05GSUdf
UFJPVEVDVCIsCTE0LCBfUV9TVFIsCWNvbmZpZ19wcm90ZWN0LAkJIHNpemVvZihjb25maWdfcHJv
dGVjdCkJCX0sCisJCXsiTk9DT0xPUiIsCQk3LCBfUV9CT09MLAkmbm9jb2xvciwJCSAxCQkJCX0s
CisJCXsiRkVBVFVSRVMiLAkJOCwgX1FfSVNUUiwJZmVhdHVyZXMsCQkgc2l6ZW9mKGZlYXR1cmVz
KQkJfSwKKwkJeyJQT1JURElSIiwJCTcsIF9RX1NUUiwJdG1wX3BvcnRkaXIsCQkgc2l6ZW9mKHRt
cF9wb3J0ZGlyKQkJfSwKKwkJeyJQT1JURElSX09WRVJMQVkiLAkxNSwgX1FfSVNUUiwJcG9ydGRp
cl9vdmVybGF5LAkgc2l6ZW9mKHBvcnRkaXJfb3ZlcmxheSkJfSwKKwkJeyJQT1JUQUdFX0JJTkhP
U1QiLAkxNSwgX1FfU1RSLAliaW5ob3N0LAkJIHNpemVvZihiaW5ob3N0KQkJfSwKKwkJeyJQT1JU
QUdFX1RNUCIsCQk5LCBfUV9TVFIsCXBvcnRfdG1wZGlyLAkJIHNpemVvZihwb3J0X3RtcGRpcikJ
CX0sCisJCXsiUEtHRElSIiwJCTYsIF9RX1NUUiwJcGtnZGlyLAkJCSBzaXplb2YocGtnZGlyKQkJ
CX0sCisJCXsiUk9PVCIsCQk0LCBfUV9TVFIsCXBvcnRyb290LAkJIHNpemVvZihwb3J0cm9vdCkJ
CX0KIAl9OwogCisJb3ZlcmxheV9nZW50b28gPSAob3ZlcmxheV90KikgeG1hbGxvYyhzaXplb2Yo
Km92ZXJsYXlfZ2VudG9vKSk7CisJc3RyY3B5KG92ZXJsYXlfZ2VudG9vLT5uYW1lLCJnZW50b28i
KTsKKwlzdHJjcHkob3ZlcmxheV9nZW50b28tPnBhdGgsIi91c3IvcG9ydGFnZSIpOworCW92ZXJs
YXlfZ2VudG9vLT5uZXh0ID0gTlVMTDsKKworCiAJaWYgKChwID0gc3RyY2hyKHBvcnRyb290LCAn
LycpKSAhPSBOVUxMKQogCQlpZiAoc3RybGVuKHApICE9IDEpCiAJCQlzdHJuY2F0KHBvcnRyb290
LCAiLyIsIHNpemVvZihwb3J0cm9vdCkpOwpAQCAtNTc1LDYgKzY1NCwxMyBAQCB2b2lkIGluaXRp
YWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJbm9fY29sb3JzKCk7CiAJZWxzZQogCQljb2xvcl9y
ZW1hcCgpOworCisKKwlzdHJuY3B5KG92ZXJsYXlfZ2VudG9vLT5wYXRoLCB0bXBfcG9ydGRpciwg
c2l6ZW9mKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSk7CisKKwkvKiBub3cgd2UgaW5pdGlsaWFzZSB0
aGUgb3ZlcmxheSBjaGFpbmVkIGxpc3Qgd2l0aCBvdmVybGF5X2dlbnRvbyB0aGUgZmlyc3QgJ2l0
ZW0nICAqLworCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9vdmVybGF5KTsKKwogfQogCiBl
bnVtIHsKQEAgLTYwMywxOSArNjg5LDIxIEBAIGNvbnN0IGNoYXIgKmluaXRpYWxpemVfZmxhdChp
bnQgY2FjaGVfdHkKIAlpbnQgYSwgYiwgYywgZCwgZSwgaTsKIAlpbnQgZnJhYywgc2VjcywgY291
bnQ7CiAJRklMRSAqZnA7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAogCWEgPSBiID0gYyA9
IGQgPSBlID0gaSA9IDA7CiAJY291bnQgPSBmcmFjID0gc2VjcyA9IDA7CisJY3VyX292ZXJsYXkg
PSBvdmVybGF5X2dlbnRvbzsKIAogCWNhY2hlX2ZpbGUgPSAoY2FjaGVfdHlwZSA9PSBDQUNIRV9F
QlVJTEQgPyBDQUNIRV9FQlVJTERfRklMRSA6IENBQ0hFX01FVEFEQVRBX0ZJTEUpOwogCi0JaWYg
KGNoZGlyKHBvcnRkaXIpICE9IDApIHsKLQkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBm
YWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAoY2hkaXIob3ZlcmxheV9nZW50b28tPnBhdGgpICE9IDAp
IHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRv
by0+cGF0aCk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmIChjYWNoZV90eXBlID09IENBQ0hFX01F
VEFEQVRBICYmIGNoZGlyKHBvcnRjYWNoZWRpcikgIT0gMCkgewotCQl3YXJucCgiY2hkaXIgdG8g
cG9ydGFnZSBjYWNoZSAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIsIHBvcnRjYWNoZWRpcik7CisJ
CXdhcm5wKCJjaGRpciB0byBwYWx1ZGlzIGNhY2hlICclcy8lcycgZmFpbGVkIiwgb3ZlcmxheV9n
ZW50b28tPnBhdGgsIHBvcnRjYWNoZWRpcik7CiAJCWdvdG8gcmV0OwogCX0KIApAQCAtNjMxLDY0
ICs3MTksNzMgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNoZV90eQogCiAJ
dW5saW5rKGNhY2hlX2ZpbGUpOwogCWlmIChlcnJubyAhPSBFTk9FTlQpIHsKLQkJd2FybmZwKCJ1
bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBjYWNoZV9maWxlKTsKKwkJd2FybmZw
KCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2FjaGVf
ZmlsZSk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmICgoZnAgPSBmb3BlbihjYWNoZV9maWxlLCAi
dyIpKSA9PSBOVUxMKSB7Ci0JCXdhcm5mcCgib3BlbmluZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRk
aXIsIGNhY2hlX2ZpbGUpOworCQl3YXJuZnAoIm9wZW5pbmcgJyVzLyVzJyBmYWlsZWQiLCBvdmVy
bGF5X2dlbnRvby0+cGF0aCwgY2FjaGVfZmlsZSk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWdldHRp
bWVvZmRheSgmc3RhcnQsIE5VTEwpOwogCi0JaWYgKChhID0gc2NhbmRpcigiLiIsICZjYXRlZ29y
eSwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQlnb3RvIHJldDsKLQotCWZvciAo
aSA9IDAgOyBpIDwgYTsgaSsrKSB7Ci0JCXN0YXQoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnN0KTsK
LQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQotCQkJY29udGludWU7Ci0JCWlmIChzdHJjaHIo
Y2F0ZWdvcnlbaV0tPmRfbmFtZSwgJy0nKSA9PSBOVUxMKQotCQkJaWYgKChzdHJuY21wKGNhdGVn
b3J5W2ldLT5kX25hbWUsICJ2aXJ0dWFsIiwgNykpICE9IDApCisJZG8geworCQlpZiAoIGN1cl9v
dmVybGF5ID09IG92ZXJsYXlfZ2VudG9vIHx8IGNoZGlyKGN1cl9vdmVybGF5LT5wYXRoKSA9PSAw
KSB7CisJCQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBh
bHBoYXNvcnQpKSA8IDApCiAJCQkJY29udGludWU7CiAKLQkJaWYgKChiID0gc2NhbmRpcihjYXRl
Z29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKLQkJ
CWNvbnRpbnVlOwotCQlmb3IgKGMgPSAwOyBjIDwgYjsgYysrKSB7Ci0JCQljaGFyIGRlW19RX1BB
VEhfTUFYXTsKKwkJCWZvciAoaSA9IDAgOyBpIDwgYTsgaSsrKSB7CisJCQkJc3RhdChjYXRlZ29y
eVtpXS0+ZF9uYW1lLCAmc3QpOworCQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkJ
Y29udGludWU7CisJCQkJaWYgKHN0cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5V
TEwpCisJCQkJCWlmICgoc3RybmNtcChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAidmlydHVhbCIsIDcp
KSAhPSAwKQorCQkJCQkJY29udGludWU7CiAKLQkJCXNucHJpbnRmKGRlLCBzaXplb2YoZGUpLCAi
JXMvJXMiLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1lKTsKKwkJCQlpZiAoKGIg
PSBzY2FuZGlyKGNhdGVnb3J5W2ldLT5kX25hbWUsICZwbiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFz
b3J0KSkgPCAwKQorCQkJCQljb250aW51ZTsKKwkJCQlmb3IgKGMgPSAwOyBjIDwgYjsgYysrKSB7
CisJCQkJCWNoYXIgZGVbX1FfUEFUSF9NQVhdOwogCi0JCQlpZiAoc3RhdChkZSwgJnN0KSA8IDAp
Ci0JCQkJY29udGludWU7CisJCQkJCXNucHJpbnRmKGRlLCBzaXplb2YoZGUpLCAiJXMvJXMiLCBj
YXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1lKTsKIAotCQkJc3dpdGNoIChjYWNoZV90
eXBlKSB7Ci0JCQljYXNlIENBQ0hFX0VCVUlMRDoKLQkJCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9k
ZSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDQUNIRV9NRVRBREFUQToK
LQkJCQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCQkJZnByaW50ZihmcCwgIiVzXG4iLCBk
ZSk7Ci0JCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoKGUgPSBzY2FuZGly
KGRlLCAmZWIsIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKLQkJCQljb250aW51ZTsK
LQkJCWZvciAoZCA9IDAgOyBkIDwgZTsgZCsrKSB7Ci0JCQkJaWYgKChwID0gc3RycmNocihlYltk
XS0+ZF9uYW1lLCAnLicpKSAhPSBOVUxMKQotCQkJCQlpZiAoc3RyY21wKHAsICIuZWJ1aWxkIikg
PT0gMCkgewotCQkJCQkJY291bnQrKzsKLQkJCQkJCWZwcmludGYoZnAsICIlcy8lcy8lc1xuIiwg
Y2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSwgZWJbZF0tPmRfbmFtZSk7CisJCQkJ
CWlmIChzdGF0KGRlLCAmc3QpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXN3aXRjaCAo
Y2FjaGVfdHlwZSkgeworCQkJCQljYXNlIENBQ0hFX0VCVUlMRDoKKwkJCQkJCWlmICghU19JU0RJ
UihzdC5zdF9tb2RlKSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNl
IENBQ0hFX01FVEFEQVRBOgorCQkJCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQkJCQkJ
ZnByaW50ZihmcCwgIiVzXG4iLCBkZSk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJCWJyZWFrOwor
CQkJCQl9CisJCQkJCWlmICgoZSA9IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxw
aGFzb3J0KSkgPCAwKQorCQkJCQkJY29udGludWU7CisJCQkJCWZvciAoZCA9IDAgOyBkIDwgZTsg
ZCsrKSB7CisJCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykpICE9IE5V
TEwpCisJCQkJCQkJaWYgKHN0cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsKKwkJCQkJCQkJY291
bnQrKzsKKwkJCQkJCQkJZnByaW50ZihmcCwgIiVzOjolcy8lcy8lc1xuIiwgY3VyX292ZXJsYXkt
Pm5hbWUsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5kX25hbWUp
OworCQkJCQkJCX0KIAkJCQkJfQorCQkJCQl3aGlsZShkLS0pCisJCQkJCQlmcmVlKGViW2RdKTsK
KwkJCQkJZnJlZShlYik7CisJCQkJfQorCQkJCXdoaWxlKGItLSkKKwkJCQkJZnJlZShwbltiXSk7
CisJCQkJZnJlZShwbik7CiAJCQl9Ci0JCQl3aGlsZShkLS0pIGZyZWUoZWJbZF0pOwotCQkJZnJl
ZShlYik7Ci0JCX0KLQkJd2hpbGUoYi0tKSBmcmVlKHBuW2JdKTsKLQkJZnJlZShwbik7Ci0JfQor
CQl9IGVsc2UKKwkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVkLCBza2lwcGlu
ZyB0aGUgJXMgcmVwb3NpdG9yeSIsIGN1cl9vdmVybGF5LT5wYXRoLCBjdXJfb3ZlcmxheS0+bmFt
ZSk7CisKKwl9IHdoaWxlICggKGN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQpKTsKKwog
CWZjbG9zZShmcCk7CiAJd2hpbGUoYS0tKSBmcmVlKGNhdGVnb3J5W2FdKTsKIAlmcmVlKGNhdGVn
b3J5KTsKQEAgLTY5OSw3ICs3OTYsNyBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQoaW50
IGNhY2hlX3R5CiAJaWYgKHN0YXJ0LnR2X3VzZWMgPiBmaW5pc2gudHZfdXNlYykgewogCQlmaW5p
c2gudHZfdXNlYyArPSAxMDAwMDAwOwogCQlmaW5pc2gudHZfc2VjLS07Ci0gICAgICAgIAorCQog
CX0KIAlmcmFjID0gKGZpbmlzaC50dl91c2VjIC0gc3RhcnQudHZfdXNlYyk7CiAJc2VjcyA9IChm
aW5pc2gudHZfc2VjIC0gc3RhcnQudHZfc2VjKTsKQEAgLTcwOCw3ICs4MDUsNyBAQCBjb25zdCBj
aGFyICppbml0aWFsaXplX2ZsYXQoaW50IGNhY2hlX3R5CiAKIAl3YXJuKCJGaW5pc2hlZCAldSBl
bnRyaWVzIGluICVkLiUwNmQgc2Vjb25kcyIsIGNvdW50LCBzZWNzLCBmcmFjKTsKIAlpZiAoc2Vj
cyA+IDEwMCkKLQkJd2FybigiWW91IHNob3VsZCBjb25zaWRlciBhIGZhc3RlciBmaWxlIHN5c3Rl
bSBzdWNoIGFzIHJlaXNlcmZzIGZvciBQT1JURElSPSclcyciLCBwb3J0ZGlyKTsKKwkJd2Fybigi
WW91IHNob3VsZCBjb25zaWRlciBhIGZhc3RlciBmaWxlIHN5c3RlbSBzdWNoIGFzIHJlaXNlcmZz
IGZvciBQT1JURElSPSclcyciLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiByZXQ6CiAJcmV0dXJu
IGNhY2hlX2ZpbGU7CiB9CkBAIC03MTcsOCArODE0LDggQEAgcmV0OgogCiB2b2lkIHJlaW5pdGlh
bGl6ZV9lYnVpbGRfZmxhdCh2b2lkKQogewotCWlmICgoY2hkaXIocG9ydGRpcikpICE9IDApIHsK
LQkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAo
KGNoZGlyKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8g
UE9SVERJUiAnJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJcmV0dXJuOwog
CX0KIAl1bmxpbmsoQ0FDSEVfRUJVSUxEX0ZJTEUpOwpAQCAtOTAwLDE5ICs5OTcsMTkgQEAgdm9p
ZCBjYWNoZV9mcmVlKHBvcnRhZ2VfY2FjaGUgKmNhY2hlKQogCiBjaGFyICpncmFiX3ZkYl9pdGVt
KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogY2hhciAqZ3JhYl92
ZGJfaXRlbShjb25zdCBjaGFyICppdGVtLCBjb25zdCBjaGFyICpDQVRFR09SWSwgY29uc3QgY2hh
ciAqUEYpIHsKLSAgICAgICAgc3RhdGljIGNoYXIgYnVmW19RX1BBVEhfTUFYXTsKLSAgICAgICAg
Y2hhciAqcDsKLSAgICAgICAgRklMRSAqZnA7CisJc3RhdGljIGNoYXIgYnVmW19RX1BBVEhfTUFY
XTsKKwljaGFyICpwOworCUZJTEUgKmZwOwogCiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwg
IiVzJXMvJXMvJXMvJXMiLCBwb3J0cm9vdCwgcG9ydHZkYiwgQ0FURUdPUlksIFBGLCBpdGVtKTsK
IAlpZiAoKGZwID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsgICAg
ICAgIAorCQlyZXR1cm4gTlVMTDsJCiAJZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApOwotCWlm
ICgocCA9IHN0cmNocihidWYsICdcbicpKSAhPSBOVUxMKSAgICAgICAgICAgICAgICAKKwlpZiAo
KHAgPSBzdHJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKIAkJKnAgPSAwOwogCWZjbG9zZShmcCk7
CiAJcm1zcGFjZShidWYpOwotICAgICAgICAKKwkKIAlyZXR1cm4gYnVmOwogfQogCkBAIC05MjIs
NyArMTAxOSw3IEBAIHF1ZXVlICpnZXRfdmRiX2F0b21zKHZvaWQpIHsKIAlpbnQgZGZkLCBpOwog
CiAJY2hhciBidWZbX1FfUEFUSF9NQVhdOwotICAgICAgICBzdGF0aWMgY2hhciBzYXZlY3dkW19Q
T1NJWF9QQVRIX01BWF07CisJc3RhdGljIGNoYXIgc2F2ZWN3ZFtfUE9TSVhfUEFUSF9NQVhdOwog
CiAJc3RydWN0IGRpcmVudCAqKmNhdDsKIAlzdHJ1Y3QgZGlyZW50ICoqcGY7CkBAIC05MzAsNyAr
MTAyNyw3IEBAIHF1ZXVlICpnZXRfdmRiX2F0b21zKHZvaWQpIHsKIAlkZXBlbmRfYXRvbSAqYXRv
bSA9IE5VTEw7CiAJcXVldWUgKmNwZiA9IE5VTEw7CiAKLSAgICAgICAgZ2V0Y3dkKHNhdmVjd2Qs
IHNpemVvZihzYXZlY3dkKSk7CisJZ2V0Y3dkKHNhdmVjd2QsIHNpemVvZihzYXZlY3dkKSk7CiAK
IAlhc3NlcnQoY2hkaXIoc2F2ZWN3ZCkgPT0gMCk7CiAKQEAgLTk3NCw3ICsxMDcxLDcgQEAgcXVl
dWUgKmdldF92ZGJfYXRvbXModm9pZCkgewogCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks
ICIlcy8lcy0lcyIsIGF0b20tPkNBVEVHT1JZLCBhdG9tLT5QTiwgYXRvbS0+UFYpOwogCQkJYXRv
bV9pbXBsb2RlKGF0b20pOwogCQkJY3BmID0gYWRkX3NldChidWYsICIwIiwgY3BmKTsKLQkJCQor
CiAJCX0KIAkJY2hkaXIoIi4uIik7CiAJCXdoaWxlKGRmZC0tKSBmcmVlKHBmW2RmZF0pOwpAQCAt
OTkwLDkgKzEwODcsMTkgQEAgZnVja2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUgb3Zl
cmxheXMgKi8KK3ZvaWQgZnJlZV9vdmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9pZCBm
cmVlX292ZXJsYXlzKG92ZXJsYXlfdCAqb3ZlcmxheSkKK3sKKwlpZiAoIG92ZXJsYXktPm5leHQg
KQorCQlmcmVlX292ZXJsYXlzKG92ZXJsYXktPm5leHQpOworCWZyZWUob3ZlcmxheSk7Cit9CisK
IHZvaWQgY2xlYW51cCgpIHsKIAlyZWluaXRpYWxpemVfYXNfbmVlZGVkKCk7CiAJZnJlZV9zZXRz
KHZpcnR1YWxzKTsKKwlmcmVlX292ZXJsYXlzKG92ZXJsYXlfZ2VudG9vKTsKIAlmY2xvc2Uoc3Rk
ZXJyKTsKIH0KIApkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTAuMS4yMS9xLmMgcG9ydGFnZS11
dGlscy0wLjEuMjEubmV3L3EuYwotLS0gcG9ydGFnZS11dGlscy0wLjEuMjEvcS5jCTIwMDYtMDgt
MjEgMTQ6MzM6MTguMDAwMDAwMDAwICswMjAwCisrKyBwb3J0YWdlLXV0aWxzLTAuMS4yMS5uZXcv
cS5jCTIwMDYtMTEtMDggMjI6MDY6MDAuMTg3OTE1ODkxICswMTAwCkBAIC03LDE1ICs3LDE3IEBA
CiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA2IE1pa2UgRnJ5c2luZ2VyICAtIDx2YXBpZXJAZ2VudG9v
Lm9yZz4KICAqLwogCi0jZGVmaW5lIFFfRkxBR1MgImlybSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5l
IFFfRkxBR1MgImlscm0iIENPTU1PTl9GTEFHUwogc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3Qg
cV9sb25nX29wdHNbXSA9IHsKIAl7Imluc3RhbGwiLCAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAn
aSd9LAorCXsibHMtb3ZlcmxheXMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdsJ30sCiAJeyJyZWlu
aXRpYWxpemUiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwKIAl7Im1ldGFjYWNoZSIsICAgIG5v
X2FyZ3VtZW50LCBOVUxMLCAnbSd9LAogCUNPTU1PTl9MT05HX09QVFMKIH07CiBzdGF0aWMgY29u
c3QgY2hhciAqcV9vcHRzX2hlbHBbXSA9IHsKIAkiSW5zdGFsbCBzeW1saW5rcyBmb3IgYXBwbGV0
cyIsCisJIkxpc3QgY29uZmlndXJlZCBvdmVybGF5cyIsCiAJIlJlaW5pdGlhbGl6ZSBlYnVpbGQg
Y2FjaGUiLAogCSJSZWluaXRpYWxpemUgbWV0YWRhdGEgY2FjaGUiLAogCUNPTU1PTl9PUFRTX0hF
TFAKQEAgLTcwLDYgKzcyLDcgQEAgaW50IHFfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ
aW50IGk7CiAJY2hhciAqcDsKIAlBUFBMRVQgZnVuYzsKKwlvdmVybGF5X3QgKiBjdXJfb3Zlcmxh
eTsKIAogCWlmIChhcmdjID09IDApCiAJCXJldHVybiAxOwpAQCAtODksNiArOTIsMTUgQEAgaW50
IHFfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHEp
CiAJCWNhc2UgJ20nOiByZWluaXRpYWxpemVfbWV0YWNhY2hlID0gMTsgYnJlYWs7CiAJCWNhc2Ug
J3InOiByZWluaXRpYWxpemUgPSAxOyBicmVhazsKKwkJY2FzZSAnbCc6IHsKKwkJCXByaW50Zigi
XG4lc092ZXJsYXkocykgOiVzXG5cbiIsIEdSRUVOLCBOT1JNKTsKKwkJCWN1cl9vdmVybGF5PW92
ZXJsYXlfZ2VudG9vOworCQkJZG8geworCQkJCXByaW50ZigiICAgTmFtZSA6ICVzJS0yMC4yMHMl
cyBcdGxvY2F0aW9uIDogJXMlcyVzXG4iLCBDWUFOLCBjdXJfb3ZlcmxheS0+bmFtZSwgTk9STSwg
Q1lBTiwgY3VyX292ZXJsYXktPnBhdGgsIE5PUk0pOworCQkJfSB3aGlsZSAoIChjdXJfb3Zlcmxh
eT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJCXJldHVy
biAwOworCQkJfQogCQljYXNlICdpJzogewogCQkJY2hhciBidWZbX1FfUEFUSF9NQVhdOwogCQkJ
LyogYWx3YXlzIGJ6ZXJvIGEgYnVmZmVyIGJlZm9yZSB1c2luZyByZWFkbGluaygpICovCmRpZmYg
LU5hcnVwIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3FjYWNoZS5jIHBvcnRhZ2UtdXRpbHMtMC4xLjIx
Lm5ldy9xY2FjaGUuYwotLS0gcG9ydGFnZS11dGlscy0wLjEuMjEvcWNhY2hlLmMJMjAwNi0wOC0y
MSAxNDozMzoxOC4wMDAwMDAwMDAgKzAyMDAKKysrIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9x
Y2FjaGUuYwkyMDA2LTExLTA4IDIxOjAxOjM2LjIyNzMyNzE4NyArMDEwMApAQCAtMzIzLDkgKzMy
Myw5IEBAIGludCB0cmF2ZXJzZV9tZXRhZGF0YV9jYWNoZSh2b2lkICgqZnVuYykKIAljaGFyICpw
YXRoY2F0LCAqcGF0aHBrZywgKnBhdGhlYmxkLCAqcGF0aGNhY2hlLCAqZWJ1aWxkLCAqY2F0ZWdv
cnk7CiAJc3RydWN0IGRpcmVjdCAqKmNhdGVnb3JpZXMsICoqcGFja2FnZXMsICoqZWJ1aWxkczsK
IAotCWxlbiA9IHN0cmxlbihwb3J0ZGlyKSArIHN0cmxlbihwb3J0Y2FjaGVkaXIpICsgMzsKKwls
ZW4gPSBzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgc3RybGVuKHBvcnRjYWNoZWRpcikg
KyAzOwogCXBhdGhjYWNoZSA9IChjaGFyICopIHhtYWxsb2MobGVuKTsKLQlzbnByaW50ZihwYXRo
Y2FjaGUsbGVuLCIlcy8lcy8iLHBvcnRkaXIscG9ydGNhY2hlZGlyKTsKKwlzbnByaW50ZihwYXRo
Y2FjaGUsbGVuLCIlcy8lcy8iLG92ZXJsYXlfZ2VudG9vLT5wYXRoLHBvcnRjYWNoZWRpcik7CiAK
IAlxY2FjaGVfbnVtY2F0ID0gbnVtY2F0ID0gc2NhbmRpcihwYXRoY2FjaGUsICZjYXRlZ29yaWVz
LCBmaWxlX3NlbGVjdCwgYWxwaGFzb3J0KTsKIAlpZiAobnVtY2F0ID09ICgtMSkpCkBAIC0zMzUs
OSArMzM1LDkgQEAgaW50IHRyYXZlcnNlX21ldGFkYXRhX2NhY2hlKHZvaWQgKCpmdW5jKQogCQl3
YXJuKCIlcyBpcyBlbXB0eSEiLCBwYXRoY2FjaGUpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bWNh
dDsgaSsrKSB7Ci0JCWxlbiA9IHN0cmxlbihwb3J0ZGlyKSArIHN0cmxlbihjYXRlZ29yaWVzW2ld
LT5kX25hbWUpICsgMjsKKwkJbGVuID0gc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0
cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgMjsKIAkJcGF0aGNhdCA9IChjaGFyICopIHht
YWxsb2MobGVuKTsKLQkJc25wcmludGYocGF0aGNhdCxsZW4sIiVzLyVzIixwb3J0ZGlyLGNhdGVn
b3JpZXNbaV0tPmRfbmFtZSk7CisJCXNucHJpbnRmKHBhdGhjYXQsbGVuLCIlcy8lcyIsb3Zlcmxh
eV9nZW50b28tPnBhdGgsY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKIAogCQljdXJyZW50X2NhdGVn
b3J5ID0gY2F0ZWdvcmllc1tpXS0+ZF9uYW1lOwogCkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBx
Y2FjaGVfbm90KGNoYXIgKnBhdGgsIGNoYXIgKmNhdGVnbwogCQl9IHdoaWxlICghaXNkaWdpdCgq
dGVtcCkpOwogCQkqKHRlbXAtMSkgPSAnXDAnOwogCi0JCXByaW50ZigiJXMlcy8lcyVzJXNcbiIs
Qk9MRCxjYXRlZ29yeSxCTFVFLGVidWlsZCxOT1JNKTsJCQorCQlwcmludGYoIiVzJXMvJXMlcyVz
XG4iLEJPTEQsY2F0ZWdvcnksQkxVRSxlYnVpbGQsTk9STSk7CiAJfQogfQogCmRpZmYgLU5hcnVw
IHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3FjaGVjay5jIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9x
Y2hlY2suYwotLS0gcG9ydGFnZS11dGlscy0wLjEuMjEvcWNoZWNrLmMJMjAwNi0wOC0yMSAxNDoz
MzoxOC4wMDAwMDAwMDAgKzAyMDAKKysrIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9xY2hlY2su
YwkyMDA2LTExLTA4IDIxOjAxOjU0LjM0MDU3MzU1NSArMDEwMApAQCAtNzQsNyArNzQsNyBAQCBp
bnQgcWNoZWNrX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYgKCFzZWFyY2hfYWxs
KSB7CiAJCQkJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgKytpKSB7CiAJCQkJCXNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcyIsIGRlbnRyeS0+ZF9uYW1lLCAKLQkJCQkJICAgICAg
ICAgZGUtPmRfbmFtZSk7CisJCQkJCQkgZGUtPmRfbmFtZSk7CiAJCQkJCWlmIChyZW1hdGNoKGFy
Z3ZbaV0sIGJ1ZiwgUkVHX0VYVEVOREVEKSA9PSAwKQogCQkJCQkJYnJlYWs7CiAJCQkJCWlmIChy
ZW1hdGNoKGFyZ3ZbaV0sIGRlLT5kX25hbWUsIFJFR19FWFRFTkRFRCkgPT0gMCkKQEAgLTg1LDcg
Kzg1LDcgQEAgaW50IHFjaGVja19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCX0KIAog
CQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMvJXMvJXMvQ09OVEVOVFMiLCBwb3J0
cm9vdCwgcG9ydHZkYiwKLQkJCSAgICAgICAgIGRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKTsK
KwkJCQkgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpOwogCQkJaWYgKChmcCA9IGZvcGVuKGJ1
ZiwgInIiKSkgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAkJCXN0cm5jYXQoYnVmLCAifiIsIHNp
emVvZihidWYpKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCBpbnQgcWNoZWNrX21haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQogCQkJCQkJc3dpdGNoIChoYXNoX2FsZ28pIHsKIAkJCQkJCQljYXNlIEhB
U0hfTUQ1OiAgZGlnZXN0X2Rpc3AgPSAiTUQ1IjsgYnJlYWs7CiAJCQkJCQkJY2FzZSBIQVNIX1NI
QTE6IGRpZ2VzdF9kaXNwID0gIlNIQTEiOyBicmVhazsKLQkJCQkJCQlkZWZhdWx0OiAgICAgICAg
ZGlnZXN0X2Rpc3AgPSAiVU5LIjsgYnJlYWs7CisJCQkJCQkJZGVmYXVsdDoJZGlnZXN0X2Rpc3Ag
PSAiVU5LIjsgYnJlYWs7CiAJCQkJCQl9CiAJCQkJCQlwcmludGYoIiAlcyVzLURJR0VTVCVzOiAl
cyIsIFJFRCwgZGlnZXN0X2Rpc3AsIE5PUk0sIGUtPm5hbWUpOwogCQkJCQkJaWYgKHZlcmJvc2Up
CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3FkZXBlbmRzLmMgcG9ydGFnZS11dGls
cy0wLjEuMjEubmV3L3FkZXBlbmRzLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3FkZXBlbmRz
LmMJMjAwNi0wOC0yMSAxNDozMzoxOC4wMDAwMDAwMDAgKzAyMDAKKysrIHBvcnRhZ2UtdXRpbHMt
MC4xLjIxLm5ldy9xZGVwZW5kcy5jCTIwMDYtMTEtMDggMjE6MDI6MTUuNzYyMzE2OTU1ICswMTAw
CkBAIC0zNzQsNyArMzc0LDcgQEAgaW50IHFkZXBlbmRzX21haW5fdmRiKGNvbnN0IGNoYXIgKmRl
cGVuZAogCQkJLyogc2VlIGlmIHRoaXMgY2F0L3BrZyBpcyByZXF1ZXN0ZWQgKi8KIAkJCWZvciAo
aSA9IG9wdGluZDsgaSA8IGFyZ2M7ICsraSkgewogCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1
ZiksICIlcy8lcyIsIGRlbnRyeS0+ZF9uYW1lLCAKLQkJCQkgICAgICAgICBkZS0+ZF9uYW1lKTsK
KwkJCQkJIGRlLT5kX25hbWUpOwogCQkJCWlmIChyZW1hdGNoKGFyZ3ZbaV0sIGJ1ZiwgUkVHX0VY
VEVOREVEKSA9PSAwKQogCQkJCQlicmVhazsKIAkJCQlpZiAocmVtYXRjaChhcmd2W2ldLCBkZS0+
ZF9uYW1lLCBSRUdfRVhURU5ERUQpID09IDApCkBAIC0zODQsNyArMzg0LDcgQEAgaW50IHFkZXBl
bmRzX21haW5fdmRiKGNvbnN0IGNoYXIgKmRlcGVuZAogCQkJCWNvbnRpbnVlOwogCiAJCQlzbnBy
aW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy8lcyIsIHBvcnRyb290LCBwb3J0dmRi
LAotCQkJICAgICAgICAgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUsIGRlcGVuZF9maWxlKTsK
KwkJCQkgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUsIGRlcGVuZF9maWxlKTsKIAogCQkJLyog
Pj1wb3J0YWdlLTIuMV9wcmUzIHdvbnQgZW5zdXJlIHRoZXNlIGZpbGVzIGFsd2F5cyBleGlzdC4g
Ki8KIAkJCS8qIFNvIHdlIG11c3QgdmVyaWZ5IHRoZXkgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcg
dG8gZWF0X2ZpbGUgb24gdGhlbS4gKi8KQEAgLTQxMyw3ICs0MTMsNyBAQCBpbnQgcWRlcGVuZHNf
bWFpbl92ZGIoY29uc3QgY2hhciAqZGVwZW5kCiAJCQl9CiAKIAkJCXNucHJpbnRmKGJ1Ziwgc2l6
ZW9mKGJ1ZiksICIlcyVzLyVzLyVzL1VTRSIsIHBvcnRyb290LCBwb3J0dmRiLAotCQkJICAgICAg
ICAgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpOworCQkJCSBkZW50cnktPmRfbmFtZSwgZGUt
PmRfbmFtZSk7CiAJCQlpZiAoIWVhdF9maWxlKGJ1ZiwgdXNlLCBzaXplb2YodXNlKSkpIHsKIAkJ
CQl3YXJuKCJDb3VsZCBub3QgZWF0X2ZpbGUoJXMpLCB5b3UnbGwgcHJvYiBoYXZlIGluY29ycmVj
dCBvdXRwdXQiLCBidWYpOwogCQkJfSBlbHNlIHsKQEAgLTQ3MSw3ICs0NzEsNyBAQCBpbnQgcWRl
cGVuZHNfdmRiX2RlZXAoY29uc3QgY2hhciAqZGVwZW5kCiAJCQkJY29udGludWU7CiAKIAkJCXNu
cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVzLyVzIiwgcG9ydHJvb3QsIHBvcnR2
ZGIsCi0JCQkgICAgICAgICBkZW50cnktPmRfbmFtZSwgZGUtPmRfbmFtZSwgZGVwZW5kX2ZpbGUp
OworCQkJCSBkZW50cnktPmRfbmFtZSwgZGUtPmRfbmFtZSwgZGVwZW5kX2ZpbGUpOwogCQkJaWYg
KCFlYXRfZmlsZShidWYsIGRlcGVuZCwgc2l6ZW9mKGRlcGVuZCkpKSB7CiAJCQkJd2FybigiaSdt
IHN1Y2ggYSBmYXR0eSwgY291bGQgbm90IGVhdF9maWxlKCVzKSIsIGJ1Zik7CiAJCQkJY29udGlu
dWU7CkBAIC00ODIsNyArNDgyLDcgQEAgaW50IHFkZXBlbmRzX3ZkYl9kZWVwKGNvbnN0IGNoYXIg
KmRlcGVuZAogCQkJaWYgKGRlcF90cmVlID09IE5VTEwpIGNvbnRpbnVlOwogCiAJCQlzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy9VU0UiLCBwb3J0cm9vdCwgcG9ydHZkYiwK
LQkJCSAgICAgICAgIGRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKTsKKwkJCQkgZGVudHJ5LT5k
X25hbWUsIGRlLT5kX25hbWUpOwogCQkJYXNzZXJ0KGVhdF9maWxlKGJ1ZiwgdXNlLCBzaXplb2Yo
dXNlKSkgPT0gMSk7CiAJCQlmb3IgKHB0ciA9IHVzZTsgKnB0cjsgKytwdHIpCiAJCQkJaWYgKCpw
dHIgPT0gJ1xuJyB8fCAqcHRyID09ICdcdCcpCkBAIC01NTMsMTMgKzU1MywxMyBAQCBpbnQgcWRl
cGVuZHNfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWZvciAoaSA9IDA7IGRlcGVuZF9m
aWxlc1tpXTsgKytpKSB7CiAJCQlwcmludGYoIiAlcyolcyAlc1xuIiwgR1JFRU4sIE5PUk0sIGRl
cGVuZF9maWxlc1tpXSk7CiAJCQlyZXQgKz0gKHF1ZXJ5ID8gcWRlcGVuZHNfdmRiX2RlZXAoZGVw
ZW5kX2ZpbGVzW2ldLCBxdWVyeSkKLQkJCSAgICAgICAgICAgICAgOiBxZGVwZW5kc19tYWluX3Zk
YihkZXBlbmRfZmlsZXNbaV0sIGFyZ2MsIGFyZ3YpKTsKKwkJCQkgICAgICA6IHFkZXBlbmRzX21h
aW5fdmRiKGRlcGVuZF9maWxlc1tpXSwgYXJnYywgYXJndikpOwogCQl9CiAJCXJldHVybiByZXQ7
CiAJfQogCiAJcmV0dXJuIChxdWVyeSA/IHFkZXBlbmRzX3ZkYl9kZWVwKGRlcGVuZF9maWxlLCBx
dWVyeSkKLQkgICAgICAgICAgICAgIDogcWRlcGVuZHNfbWFpbl92ZGIoZGVwZW5kX2ZpbGUsIGFy
Z2MsIGFyZ3YpKTsKKwkJICAgICAgOiBxZGVwZW5kc19tYWluX3ZkYihkZXBlbmRfZmlsZSwgYXJn
YywgYXJndikpOwogfQogCiAjZWxzZQpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTAuMS4yMS9x
ZmlsZS5jIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9xZmlsZS5jCi0tLSBwb3J0YWdlLXV0aWxz
LTAuMS4yMS9xZmlsZS5jCTIwMDYtMDgtMjEgMTQ6MzM6MTguMDAwMDAwMDAwICswMjAwCisrKyBw
b3J0YWdlLXV0aWxzLTAuMS4yMS5uZXcvcWZpbGUuYwkyMDA2LTExLTA4IDIxOjAyOjMwLjU2MjA2
NzA1MSArMDEwMApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIHFmaWxlKGNoYXIgKnBhdGgsIGludCBh
cmdjLCBjaGFyKiByCiAKIAkJCS8vIHVzZWQgdG8gY3V0IHRoZSBudW1iZXIgb2Ygc3RyY21wKCkg
Y2FsbHMKIAkJCWJuX2ZpcnN0Y2hhciA9IGVudHJ5X2Jhc2VuYW1lWzBdOwotCQkJCisKIAkJCWZv
cihpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogCQkJCWlmIChiYXNlX25hbWVzW2ldID09IE5VTEwp
CiAJCQkJCWNvbnRpbnVlOwpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTAuMS4yMS9xZ3JlcC5j
IHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9xZ3JlcC5jCi0tLSBwb3J0YWdlLXV0aWxzLTAuMS4y
MS9xZ3JlcC5jCTIwMDYtMDgtMjEgMTQ6MzM6MTguMDAwMDAwMDAwICswMjAwCisrKyBwb3J0YWdl
LXV0aWxzLTAuMS4yMS5uZXcvcWdyZXAuYwkyMDA2LTExLTA4IDIxOjAzOjA5LjI4NzE3OTkzOCAr
MDEwMApAQCAtMTAsMTEgKzEwLDEyIEBACiAKICNpZmRlZiBBUFBMRVRfcWdyZXAKIAotI2RlZmlu
ZSBRR1JFUF9GTEFHUyAiSWlIY2UiIENPTU1PTl9GTEFHUworI2RlZmluZSBRR1JFUF9GTEFHUyAi
SWlIbzpjZSIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxZ3JlcF9s
b25nX29wdHNbXSA9IHsKIAl7ImludmVydC1tYXRjaCIsICBub19hcmd1bWVudCwgTlVMTCwgJ0kn
fSwKIAl7Imlnbm9yZS1jYXNlIiwgICBub19hcmd1bWVudCwgTlVMTCwgJ2knfSwKIAl7IndpdGgt
ZmlsZW5hbWUiLCBub19hcmd1bWVudCwgTlVMTCwgJ0gnfSwKKwl7Im92ZXJsYXkiLCAgICAgICAg
YV9hcmd1bWVudCwgTlVMTCwgJ28nfSwKIAl7ImNvdW50IiwgICAgICAgICBub19hcmd1bWVudCwg
TlVMTCwgJ2MnfSwKIAl7InJlZ2V4cCIsICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwK
IAlDT01NT05fTE9OR19PUFRTCkBAIC0yMyw2ICsyNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpx
Z3JlcF9vcHRzX2hlbHBbXSA9IHsKIAkiU2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcyIsCiAJIkln
bm9yZSBjYXNlIGRpc3RpbmN0aW9ucyIsCiAJIlByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBt
YXRjaCIsCisJIk9ubHkgY29uc2lkZXIgdGhlIDxhcmc+IG92ZXJsYXkiLAogCSJPbmx5IHByaW50
IGEgY291bnQgb2YgbWF0Y2hpbmcgbGluZXMgcGVyIEZJTEUiLAogCSJVc2UgUEFUVEVSTiBhcyBh
IHJlZ3VsYXIgZXhwcmVzc2lvbiIsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtMzQsNyArMzYsOSBA
QCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJaW50
IGNvdW50ID0gMDsKLQljaGFyICpwOworCXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsKKwlj
aGFyIG92ZXJsYXlfbmFtZVs2NF0sIHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyICpwLCAqc3RyOwog
CWNoYXIgZG9fY291bnQsIGRvX3JlZ2V4OwogCWNoYXIgc2hvd19maWxlbmFtZTsKIAlGSUxFICpm
cDsKQEAgLTQyLDEwICs0NiwxNSBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFy
Z3YpCiAJY2hhciBidWYwW0JVRlNJWl07CiAJaW50IHJlZmxhZ3MgPSBSRUdfTk9TVUI7CiAJY2hh
ciBpbnZlcnRfbWF0Y2ggPSAwOworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3Rt
cDsKIAogCXR5cGVkZWYgY2hhciAqKCpGVU5DKSAoY2hhciAqLCBjaGFyICopOwogCUZVTkMgc3Ry
ZnVuYyA9IChGVU5DKSBzdHJzdHI7CiAKKwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOwor
CW92ZXJsYXlfbmFtZVswXSA9IDA7CisJcmVwb19zZWFyY2hbMF0gPSAwOworCiAJREJHKCJhcmdj
PSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAx
ID8gYXJndlsxXSA6ICJOVUxMPyIpOwogCkBAIC01OCw5ICs2NywxMyBAQCBpbnQgcWdyZXBfbWFp
bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlzdHJmdW5jID0gKEZVTkMpIHN0cmNhc2VzdHI7
CiAJCQlyZWZsYWdzIHw9IFJFR19JQ0FTRTsKIAkJCWJyZWFrOworCQljYXNlICdIJzogc2hvd19m
aWxlbmFtZSA9IDE7IGJyZWFrOworCQljYXNlICdvJzogCisJCQlyZXBvID0gMTsKKwkJCXN0cm5j
cHkocmVwb19zZWFyY2gsIG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsK
IAkJY2FzZSAnYyc6IGRvX2NvdW50ID0gMTsgYnJlYWs7CiAJCWNhc2UgJ2UnOiBkb19yZWdleCA9
IDE7IGJyZWFrOwotCQljYXNlICdIJzogc2hvd19maWxlbmFtZSA9IDE7IGJyZWFrOwogCQlDT01N
T05fR0VUT1BUU19DQVNFUyhxZ3JlcCkKIAkJfQogCX0KQEAgLTczLDYgKzg2LDM4IEBAIGludCBx
Z3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcmV0dXJuIDE7CiAJd2hpbGUgKChm
Z2V0cyhlYnVpbGQsIHNpemVvZihlYnVpbGQpLCBmcCkpICE9IE5VTEwpIHsKIAkJRklMRSAqbmV3
ZnA7CisJCWlmICggKCBwID0gc3RyY2hyKGVidWlsZCwgJzonKSkpCisJCXsKKwkJCSpwID0gMDsK
KwkJCXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMgJzo6JyAqLworCQkJcCA9IGVidWlsZDsK
KwkJCWlmICggcmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBwLCBzaXplb2YoIHJlcG9fc2Vh
cmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoIHN0cmNtcChvdmVybGF5X25hbWUsIHApKQor
CQkJeworCQkJCWZvciAoIG92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vIDsgb3ZlcmxheV90bXAt
Pm5leHQgOyBvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCApCisJCQkJeworCQkJCQlpZiAo
ICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1l
KSkpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90bXAt
Pm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCXsKKwkJCQkJY3VyX292
ZXJsYXkgPSBvdmVybGF5X3RtcDsKKwkJCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5wYXRoKSAh
PSAwKSB7CisJCQkJCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1cl9v
dmVybGF5LT5wYXRoKTsKKwkJCQkJCW15ZXJyb3I9MTsKKwkJCQkJfQorCQkJCX0gZWxzZSAKKwkJ
CQkJbXllcnJvcj0xOworCQkJCWlmICggbXllcnJvcikgeworCQkJCQlteWVycm9yPTA7CisJCQkJ
CWNvbnRpbnVlOworCQkJCX0KKwkJCQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgY3VyX292ZXJsYXkt
Pm5hbWUsIHNpemVvZihvdmVybGF5X25hbWUpKTsKKwkJCX0KKwkJCXN0cmNweShlYnVpbGQsIHN0
cikgOworCQl9CisKIAkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJ1xuJykpICE9IE5VTEwpCiAJ
CQkqcCA9IDA7CiAJCWlmICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJyIikpICE9IE5VTEwpIHsK
QEAgLTEwMiw3ICsxNDcsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CiAJCQkJY291bnQrKzsKIAkJCQlpZiAoZG9fY291bnQpIGNvbnRpbnVlOwogCQkJCWlmICh2ZXJi
b3NlIHx8IHNob3dfZmlsZW5hbWUpIHsKLQkJCQkJcHJpbnRmKCIlczoiLCBlYnVpbGQpOyAKKwkJ
CQkJcHJpbnRmKCIlczo6JXM6IiwgY3VyX292ZXJsYXktPm5hbWUsIGVidWlsZCk7IAogCQkJCQlp
ZiAodmVyYm9zZSA+IDEpIHByaW50ZigiJWQ6IiwgbGluZW5vKTsKIAkJCQkJcHJpbnRmKCIgIik7
CiAJCQkJfQpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTAuMS4yMS9xbGlzdC5jIHBvcnRhZ2Ut
dXRpbHMtMC4xLjIxLm5ldy9xbGlzdC5jCi0tLSBwb3J0YWdlLXV0aWxzLTAuMS4yMS9xbGlzdC5j
CTIwMDYtMDgtMjEgMTQ6MzM6MTguMDAwMDAwMDAwICswMjAwCisrKyBwb3J0YWdlLXV0aWxzLTAu
MS4yMS5uZXcvcWxpc3QuYwkyMDA2LTExLTA4IDIxOjAzOjI1LjM5MDczMTgyNyArMDEwMApAQCAt
MjUxLDcgKzI1MSw3IEBAIGludCBxbGlzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ
CX0KIAogCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMvJXMvJXMvQ09OVEVOVFMi
LCBwb3J0cm9vdCwgcG9ydHZkYiwKLQkJCSAgICAgICAgIGNhdFtqXS0+ZF9uYW1lLCBkZVt4XS0+
ZF9uYW1lKTsKKwkJCQkgY2F0W2pdLT5kX25hbWUsIGRlW3hdLT5kX25hbWUpOwogCiAJCQlpZiAo
dmVyYm9zZSA+IDEpCiAJCQkJcHJpbnRmKCIlcyVzLyVzJXMlc1xuJXNDT05URU5UUyVzOlxuIiwg
Qk9MRCwgY2F0W2pdLT5kX25hbWUsIEJMVUUsIGRlW3hdLT5kX25hbWUsIE5PUk0sIERLQkxVRSwg
Tk9STSk7CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3FtZXJnZS5jIHBvcnRhZ2Ut
dXRpbHMtMC4xLjIxLm5ldy9xbWVyZ2UuYwotLS0gcG9ydGFnZS11dGlscy0wLjEuMjEvcW1lcmdl
LmMJMjAwNi0wOC0yMSAxNDozMzoxOC4wMDAwMDAwMDAgKzAyMDAKKysrIHBvcnRhZ2UtdXRpbHMt
MC4xLjIxLm5ldy9xbWVyZ2UuYwkyMDA2LTExLTA4IDIxOjA0OjI1LjU3MDU4MzA5OSArMDEwMApA
QCAtMTcsOCArMTcsOCBAQAogI2VuZGlmCiAKIC8qCi0gIC0tbm9maWxlcyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbid0IHZlcmlmeSBmaWxlcyBpbiBwYWNrYWdlCi0gIC0tbm9zY3JpcHQgICAg
ICAgICAgICAgICAgICAgICAgIGRvbid0IGV4ZWN1dGUgcGtnX3twcmUscG9zdH17aW5zdCxybX0g
KGlmIGFueSkKKyAgLS1ub2ZpbGVzCQkJZG9uJ3QgdmVyaWZ5IGZpbGVzIGluIHBhY2thZ2UKKyAg
LS1ub3NjcmlwdAkJCWRvbid0IGV4ZWN1dGUgcGtnX3twcmUscG9zdH17aW5zdCxybX0gKGlmIGFu
eSkKICovCiAKIC8vICNkZWZpbmUgQlVTWUJPWCAiL2Jpbi9idXN5Ym94IgpAQCAtNTAsNyArNTAs
NyBAQCBzdGF0aWMgY29uc3QgY2hhciAqcW1lcmdlX29wdHNfaGVscFtdID0gCiAJIkRvbid0IHBy
b21wdCBiZWZvcmUgb3ZlcndyaXRpbmciLAogCSJEb24ndCBtZXJnZSBkZXBlbmRlbmNpZXMiLAog
CSJEb24ndCB2ZXJpZnkgTUQ1IGRpZ2VzdCBvZiBmaWxlcyIsCi0gICAgICAgIENPTU1PTl9PUFRT
X0hFTFAKKwlDT01NT05fT1BUU19IRUxQCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciBxbWVyZ2Vf
cmNzaWRbXSA9ICIkSWQ6IHFtZXJnZS5jLHYgMS41MyAyMDA2LzA4LzIxIDAwOjE0OjU3IHNvbGFy
IEV4cCAkIjsKQEAgLTcwMCw3ICs3MDAsNyBAQCB2b2lkIHBrZ19tZXJnZShpbnQgbGV2ZWwsIGRl
cGVuZF9hdG9tICphCiAJCWxpbmVbMF0gPSAwOwogCiAJCS8qIHBvcnRhZ2UgaGFzIGNvZGUgdGhh
dCBoYW5kZXMgZmlmbydzIGJ1dCBpdCBsb29rcyB1bnVzZWQgKi8KLSAgICAKKwogCQlpZiAoKFNf
SVNDSFIoc3Quc3RfbW9kZSkpIHx8IFwKIAkJCShTX0lTQkxLKHN0LnN0X21vZGUpKSk7IC8vIGJs
b2NrIG9yIGNoYXJhY3RlciBkZXZpY2UKIAkJaWYgKFNfSVNGSUZPKHN0LnN0X21vZGUpKTsJLy8g
RklGTyAobmFtZWQgcGlwZSkKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lkIHBrZ19tZXJnZShpbnQg
bGV2ZWwsIGRlcGVuZF9hdG9tICphCiAJCQlhc3NlcnQoc3RybGVuKCZidWZbMV0pKTsKIAkJCXJl
YWRsaW5rKGJ1ZiwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKIAkJCWFzc2VydChzdHJsZW4ocGF0aCkp
OzsKLQkJCQorCiAJCQlzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICJzeW0gJXMgLT4gJXMl
cyVsdSIsICZidWZbMV0sIHBhdGgsICIgIiwgc3Quc3RfbXRpbWUpOwogCQkJLy8gc25wcmludGYo
bGluZSwgc2l6ZW9mKGxpbmUpLCAic3ltICVzIC0+ICVzIiwgJmJ1ZlsxXSwgcGF0aCk7CiAJCQkv
LyB3ZSBiZXR0ZXIgaGF2ZSBvbmUgYnl0ZSBoZXJlIHRvIHBsYXkgd2l0aApAQCAtMTEyNSwxMiAr
MTEyNSwxMiBAQCB2b2lkIHByaW50X1BrZyhpbnQgZnVsbCwgc3RydWN0IHBrZ190ICpwCiAJCQlp
bnQgcmV0OwogCQkJY2hhciAqaWNvbG9yID0gKGNoYXIgKikgUkVEOwogCQkJcmV0ID0gYXRvbV9j
b21wYXJlX3N0cihidWYsIHApOwotCQkJc3dpdGNoKHJldCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisJCQlzd2l0Y2gocmV0KSB7CiAJCQkJY2FzZSBFUVVBTDogaWNvbG9yID0g
KGNoYXIgKikgUkVEOyBicmVhazsKLQkJCQljYXNlIE5FV0VSOiBpY29sb3IgPSAoY2hhciAqKSBZ
RUxMT1c7IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCQkJY2FzZSBORVdFUjog
aWNvbG9yID0gKGNoYXIgKikgWUVMTE9XOyBicmVhazsKIAkJCQljYXNlIE9MREVSOiBpY29sb3Ig
PSAoY2hhciAqKSBCTFVFOyBicmVhazsKIAkJCQlkZWZhdWx0OiBpY29sb3IgPSAoY2hhciAqKSBO
T1JNOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCX0KIAkJCXByaW50Zigi
ICVzSW5zdGFsbGVkJXM6JXMgJXMlcyVzXG4iLCBES0dSRUVOLCBZRUxMT1csIE5PUk0sIGljb2xv
ciwgcCwgTk9STSk7CiAJCX0KIAl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3Fw
eS5jIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9xcHkuYwotLS0gcG9ydGFnZS11dGlscy0wLjEu
MjEvcXB5LmMJMjAwNi0wOC0yMSAxNDozMzoxOC4wMDAwMDAwMDAgKzAyMDAKKysrIHBvcnRhZ2Ut
dXRpbHMtMC4xLjIxLm5ldy9xcHkuYwkyMDA2LTExLTA4IDIxOjA0OjQ3LjA0MDMxOTIwMyArMDEw
MApAQCAtNzUsMTAgKzc1LDEwIEBAIGludCBpbXBvcnRfcG9ydGFnZV9zZXR0aW5ncyh2b2lkKQog
CQlyZXR1cm4gMTsKIAl9CiAJaWYgKCEocG9ydGFnZS5zZXR0aW5ncyA9IFB5T2JqZWN0X0dldEF0
dHJTdHJpbmcocG9ydGFnZS5pbnRlcnAsIChjaGFyICopICJzZXR0aW5ncyIpKSkgewotCQlQeV9E
RUNSRUYocG9ydGFnZS5pbnRlcnApOyAgICAgIAorCQlQeV9ERUNSRUYocG9ydGFnZS5pbnRlcnAp
OwogCQlmcHJpbnRmKHN0ZGVyciwgImdldHRpbmcgc2V0dGluZ3MgZmFpbGVkIik7CiAJCXJldHVy
biAxOwotCX0gICAKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtTmFydXAgcG9ydGFnZS11dGls
cy0wLjEuMjEvcXNlYXJjaC5jIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9xc2VhcmNoLmMKLS0t
IHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3FzZWFyY2guYwkyMDA2LTA4LTIxIDE0OjMzOjE4LjAwMDAw
MDAwMCArMDIwMAorKysgcG9ydGFnZS11dGlscy0wLjEuMjEubmV3L3FzZWFyY2guYwkyMDA2LTEx
LTA4IDIxOjA1OjEyLjc4NjQwNTIwMyArMDEwMApAQCAtOSwxMCArOSwxMiBAQAogCiAjaWZkZWYg
QVBQTEVUX3FzZWFyY2gKIAotI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY3NTTkgiIENPTU1PTl9G
TEFHUworI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY286cHNTTkgiIENPTU1PTl9GTEFHUwogc3Rh
dGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXNlYXJjaF9sb25nX29wdHNbXSA9IHsKIAl7ImFsbCIs
ICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAogCXsiY2FjaGUiLCAgICAgbm9fYXJndW1l
bnQsIE5VTEwsICdjJ30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwK
Kwl7InNob3ctcGF0aCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAogCXsic2VhcmNoIiwgICAg
bm9fYXJndW1lbnQsIE5VTEwsICdzJ30sCiAJeyJkZXNjIiwgICAgICAgYV9hcmd1bWVudCwgTlVM
TCwgJ1MnfSwKIAl7Im5hbWUtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LApAQCAtMjIs
NiArMjQsOCBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfCiBzdGF0
aWMgY29uc3QgY2hhciAqcXNlYXJjaF9vcHRzX2hlbHBbXSA9IHsKIAkiTGlzdCB0aGUgZGVzY3Jp
cHRpb25zIG9mIGV2ZXJ5IHBhY2thZ2UgaW4gdGhlIGNhY2hlIiwKIAkiVXNlIHRoZSBwb3J0YWdl
IGNhY2hlIiwKKwkiU2VhcmNoIG9ubHkgaW4gdGhlIDxhcmc+IG92ZXJsYXkiLAorCSJTaG93IHRo
ZSBwYXRoIHRvIHRoZSBlYnVpbGQiLAogCSJSZWdleCBzZWFyY2ggcGFja2FnZSBiYXNlbmFtZXMi
LAogCSJSZWdleCBzZWFyY2ggcGFja2FnZSBkZXNjcmlwdGlvbnMiLAogCSJPbmx5IHNob3cgcGFj
a2FnZSBuYW1lIiwKQEAgLTQwLDEzICs0NCwyMCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKIAljaGFyIGxhc3RbMTI2XSA9ICIiOwogCWNoYXIgZHBbMTI2XSA9ICIi
OwogCWNoYXIgYnBbMTI2XSA9ICIiOwotCWNoYXIgKnAsICpxLCAqc3RyOworCXNob3J0IHJlcG8g
PSAwOworCWNoYXIgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgKnAsICpxLCAqc3RyLCBvdmVybGF5
X25hbWVbNjRdOwogCWNoYXIgKnNlYXJjaF9tZSA9IE5VTEw7Ci0JY2hhciBzaG93X2hvbWVwYWdl
ID0gMCwgc2hvd19uYW1lX29ubHkgPSAwOworCWNoYXIgc2hvd19ob21lcGFnZSA9IDAsIHNob3df
bmFtZV9vbmx5ID0gMCwgc2hvd19wYXRoX3RvX2VidWlsZCA9IDA7CiAJY2hhciBzZWFyY2hfZGVz
YyA9IDAsIHNlYXJjaF9hbGwgPSAwLCBzZWFyY2hfbmFtZSA9IDEsIHNlYXJjaF9jYWNoZSA9IENB
Q0hFX0VCVUlMRDsKIAljb25zdCBjaGFyICpzZWFyY2hfdmFyc1tdID0geyAiREVTQ1JJUFRJT049
IiwgIkhPTUVQQUdFPSIgfTsKIAlzaXplX3Qgc2VhcmNoX2xlbjsKLQlpbnQgaSwgaWR4PTA7CisJ
b3ZlcmxheV90ICpjdXJfb3ZlcmxheSwgKm92ZXJsYXlfdG1wOworCWludCBpLCBpZHg9MCwgbXll
cnJvcj0wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKwlvdmVybGF5X25hbWVb
MF0gPSAwIDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAKIAlEQkcoImFyZ2M9JWQgYXJndlswXT0l
cyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBhcmd2WzFdIDog
Ik5VTEw/Iik7CkBAIC01Niw2ICs2Nyw4IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxc2VhcmNoKQogCQljYXNlICdhJzog
c2VhcmNoX2FsbCA9IDE7IGJyZWFrOwogCQljYXNlICdjJzogc2VhcmNoX2NhY2hlID0gQ0FDSEVf
TUVUQURBVEE7IGJyZWFrOworCQljYXNlICdvJzogcmVwbyA9IDE7IHN0cm5jcHkocmVwb19zZWFy
Y2gsIG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7IGJyZWFrOworCQljYXNlICdwJzogc2hv
d19wYXRoX3RvX2VidWlsZCA9IDE7IGJyZWFrOwogCQljYXNlICdzJzogc2VhcmNoX2Rlc2MgPSAw
OyBzZWFyY2hfbmFtZSA9IDE7IGJyZWFrOwogCQljYXNlICdTJzogc2VhcmNoX2Rlc2MgPSAxOyBz
ZWFyY2hfbmFtZSA9IDA7IGJyZWFrOwogCQljYXNlICdOJzogc2hvd19uYW1lX29ubHkgPSAxOyBi
cmVhazsKQEAgLTkzLDExICsxMDYsMjIgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJCQlpZiAoKHBjYWNoZSA9IGNhY2hlX3JlYWRfZmlsZShlYnVpbGQpKSAhPSBO
VUxMKSB7CiAJCQkJaWYgKChzdHJjbXAocGNhY2hlLT5hdG9tLT5QTiwgbGFzdCkpICE9IDApIHsK
IAkJCQkJc3RybmNweShsYXN0LCBwY2FjaGUtPmF0b20tPlBOLCBzaXplb2YobGFzdCkpOwotCQkJ
CQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBU
SU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgPT0gMCkKLQkJCQkJCXBy
aW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsIEJPTEQsIHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksIEJM
VUUsCi0JCQkJCQkgICAgICAgcGNhY2hlLT5hdG9tLT5QTiwgTk9STSwKLQkJCQkJCSAgICAgICAo
c2hvd19uYW1lX29ubHkgPyAiIiA6Ci0JCQkJCQkgICAgICAgIChzaG93X2hvbWVwYWdlID8gcGNh
Y2hlLT5IT01FUEFHRSA6IHBjYWNoZS0+REVTQ1JJUFRJT04pKSk7CisJCQkJCWlmICgocmVtYXRj
aChzZWFyY2hfbWUsIChzZWFyY2hfZGVzYyA/IHBjYWNoZS0+REVTQ1JJUFRJT04gOiBlYnVpbGQp
LCBSRUdfRVhURU5ERUQgfCBSRUdfSUNBU0UpKSA9PSAwKSB7CisJCQkJCQlpZiAoIHNob3dfcGF0
aF90b19lYnVpbGQpIHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMvJXMv
XG4iLAkKKwkJCQkJCQlCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLAorCQkJCQkJCUJMVUUs
IHBjYWNoZS0+YXRvbS0+UE4sCisJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JN
LAorCQkJCQkJCWN1cl9vdmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJfSBl
bHNlIHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJCUJP
TEQsIHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxVRSwgcGNhY2hlLT5hdG9tLT5Q
TiwKKwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJKHNob3df
bmFtZV9vbmx5ID8gIiIgOiAKKwkJCQkJCQkoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBB
R0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQkJfQorCQkJCQl9CiAJCQkJfQogCQkJ
CWNhY2hlX2ZyZWUocGNhY2hlKTsKIAkJCX0gZWxzZSB7CkBAIC0xMTAsNiArMTM0LDQwIEBAIGlu
dCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCWNhc2UgQ0FDSEVfRUJV
SUxEOiB7CiAJCQlGSUxFICplYnVpbGRmcDsKKwkJCWlmICggKCBwID0gc3RyY2hyKGVidWlsZCwg
JzonKSkpCisJCQl7CisJCQkJKnAgPSAwOworCQkJCXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3Ig
aXMgJzo6JyAqLworCQkJCXAgPSBlYnVpbGQ7CisJCQkJaWYgKCByZXBvICYmIHN0cm5jbXAoIHJl
cG9fc2VhcmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQkJ
aWYgKCBzdHJjbXAob3ZlcmxheV9uYW1lLCBwKSkKKwkJCQl7CisJCQkJCWZvciAoIG92ZXJsYXlf
dG1wPW92ZXJsYXlfZ2VudG9vIDsgb3ZlcmxheV90bXAtPm5leHQgOyBvdmVybGF5X3RtcD1vdmVy
bGF5X3RtcC0+bmV4dCApCisJCQkJCXsKKwkJCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1w
LT5uYW1lLCBwLCBzaXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCQlicmVhazsKKwkJ
CQkJfQorCQkJCQlpZiAoICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92
ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCXsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90
bXA7CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3
YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1cl9vdmVybGF5LT5wYXRoKTsK
KwkJCQkJCQlteWVycm9yPTE7CisJCQkJCQl9CisJCQkJCX0gZWxzZSAKKwkJCQkJCW15ZXJyb3I9
MTsKKwkJCQkJaWYgKCBteWVycm9yKSB7CisJCQkJCQlpZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQkJ
CQl3YXJuZnAoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMiLCBlYnVpbGQpOworCQkJCQkJcmVp
bml0aWFsaXplID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXN0cm5jcHkob3Zlcmxh
eV9uYW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJCX0K
KwkJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQl9
CisKIAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBkaXJuYW1lKHN0
cik7CiAKQEAgLTEzNCwxMCArMTkyLDE5IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCQkJCQkJCS8vIGRvaW5nIG9wZXJhdGlvbnMgd2l0aCB0aGVtLgogCQkJCQkJ
CXN0cm5jcHkoZHAsIHAsIHNpemVvZihkcCkpOwogCQkJCQkJCXN0cm5jcHkoYnAsIHAsIHNpemVv
ZihicCkpOwotCQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsIAotCQkJCQkJCQlCT0xE
LCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnApLCBOT1JNLAorCQkJCQkJCWlmICggc2hv
d19wYXRoX3RvX2VidWlsZCkgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVz
JXMvJXMvXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnAp
LAorCQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJCWN1cl9v
dmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJ
CXByaW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUo
ZHApLCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3ZlcmxheS0+bmFt
ZSwgTk9STSwKIAkJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiBxKSk7CisJCQkJCQkJfQog
CQkJCQkJCWJyZWFrOworCiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJZmNsb3NlKGVidWlsZGZwKTsK
ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0wLjEuMjEvcXNpemUuYyBwb3J0YWdlLXV0aWxzLTAu
MS4yMS5uZXcvcXNpemUuYwotLS0gcG9ydGFnZS11dGlscy0wLjEuMjEvcXNpemUuYwkyMDA2LTA4
LTIxIDE0OjMzOjE4LjAwMDAwMDAwMCArMDIwMAorKysgcG9ydGFnZS11dGlscy0wLjEuMjEubmV3
L3FzaXplLmMJMjAwNi0xMS0wOCAyMTowNToyMi41Njg5MTgwMzUgKzAxMDAKQEAgLTkzLDcgKzkz
LDcgQEAgaW50IHFzaXplX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYgKCFzZWFy
Y2hfYWxsKSB7CiAJCQkJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgKytpKSB7CiAJCQkJCXNu
cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcyIsIGRlbnRyeS0+ZF9uYW1lLCAKLQkJCQkJ
ICAgICAgICAgZGUtPmRfbmFtZSk7CisJCQkJCQkgZGUtPmRfbmFtZSk7CiAJCQkJCWlmIChyZW1h
dGNoKGFyZ3ZbaV0sIGJ1ZiwgUkVHX0VYVEVOREVEKSA9PSAwKQogCQkJCQkJYnJlYWs7CiAJCQkJ
CWlmIChyZW1hdGNoKGFyZ3ZbaV0sIGRlLT5kX25hbWUsIFJFR19FWFRFTkRFRCkgPT0gMCkKQEAg
LTEwNCw3ICsxMDQsNyBAQCBpbnQgcXNpemVfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ
CQl9CiAKIAkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVzL0NPTlRFTlRT
IiwgcG9ydHJvb3QsIHBvcnR2ZGIsCi0JCQkgICAgICAgICBkZW50cnktPmRfbmFtZSwgZGUtPmRf
bmFtZSk7CisJCQkJIGRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKTsKIAkJCWlmICgoZnAgPSBm
b3BlbihidWYsICJyIikpID09IE5VTEwpCiAJCQkJY29udGludWU7CiAKZGlmZiAtTmFydXAgcG9y
dGFnZS11dGlscy0wLjEuMjEvcXVzZS5jIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9xdXNlLmMK
LS0tIHBvcnRhZ2UtdXRpbHMtMC4xLjIxL3F1c2UuYwkyMDA2LTA4LTIxIDE0OjMzOjE4LjAwMDAw
MDAwMCArMDIwMAorKysgcG9ydGFnZS11dGlscy0wLjEuMjEubmV3L3F1c2UuYwkyMDA2LTExLTA4
IDIxOjA2OjIxLjgzODkwNzYyNyArMDEwMApAQCAtMTQsMTAgKzE0LDExIEBACiAgcXVzZSAtS2Ug
LS0gIG5scwogKi8KIAotI2RlZmluZSBRVVNFX0ZMQUdTICJlYXZLTERGOk4iIENPTU1PTl9GTEFH
UworI2RlZmluZSBRVVNFX0ZMQUdTICJlYW86dktMREY6TiIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMg
c3RydWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0c1tdID0gewogCXsiZXhhY3QiLCAgICAg
bm9fYXJndW1lbnQsIE5VTEwsICdlJ30sCiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwgTlVM
TCwgJ2EnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsia2V5
d29yZHMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdLJ30sCiAJeyJsaWNlbnNlIiwgICBub19hcmd1
bWVudCwgTlVMTCwgJ0wnfSwKIAl7ImRlc2NyaWJlIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnRCd9
LApAQCAtMjgsNiArMjksNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdf
b3B0CiBzdGF0aWMgY29uc3QgY2hhciAqcXVzZV9vcHRzX2hlbHBbXSA9IHsKIAkiU2hvdyBleGFj
dCBub24gcmVnZXhwIG1hdGNoaW5nIHVzaW5nIHN0cmNtcCIsCiAJIlNob3cgYW5ub3lpbmcgdGhp
bmdzIGluIElVU0UiLAorCSJPbmx5IGNvbnNpZGVyIHRoZSA8YXJnPiBvdmVybGF5IiwKIAkiVXNl
IHRoZSBLRVlXT1JEUyB2cyBJVVNFIiwKIAkiVXNlIHRoZSBMSUNFTlNFIHZzIElVU0UiLAogCSJE
ZXNjcmliZSB0aGUgVVNFIGZsYWciLApAQCAtMzgsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgY2hh
ciAqcXVzZV9vcHRzX2hlbHBbXSA9IHsKIHN0YXRpYyBjb25zdCBjaGFyIHF1c2VfcmNzaWRbXSA9
ICIkSWQ6IHF1c2UuYyx2IDEuNTIgMjAwNi8wNi8xMCAxNDowMToyMSB2YXBpZXIgRXhwICQiOwog
I2RlZmluZSBxdXNlX3VzYWdlKHJldCkgdXNhZ2UocmV0LCBRVVNFX0ZMQUdTLCBxdXNlX2xvbmdf
b3B0cywgcXVzZV9vcHRzX2hlbHAsIGxvb2t1cF9hcHBsZXRfaWR4KCJxdXNlIikpCiAKLWludCBx
dXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBx
dXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciByZXBvX3NlYXJjaFtd
LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogCiBjaGFyIHF1c2VfbmFtZV9vbmx5ID0gMDsKIApA
QCAtODAsNyArODIsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3Mo
CiAJfQogfQogCi1pbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBjaGFy
ICoqYXJndikKK2ludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hh
ciByZXBvX3NlYXJjaFtdLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAjZGVmaW5lIE5VTV9T
RUFSQ0hfRklMRVMgQVJSX1NJWkUoc2VhcmNoX2ZpbGVzKQogCWNoYXIgYnVmW0JVRlNJWkVdLCAq
cDsKQEAgLTkwLDEyMSArOTIsMTYyIEBAIGludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwg
aW50IGFyZ2MKIAlGSUxFICpmcFtOVU1fU0VBUkNIX0ZJTEVTXTsKIAlESVIgKmQ7CiAJc3RydWN0
IGRpcmVudCAqZGU7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAotCWZvciAoaSA9IDA7IGkg
PCBOVU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwg
IiVzL3Byb2ZpbGVzLyVzIiwgcG9ydGRpciwgc2VhcmNoX2ZpbGVzW2ldKTsKLQkJaWYgKChmcFtp
XSA9IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkKLQkJCXdhcm5wKCJza2lwcGluZyAlcyIsIHNl
YXJjaF9maWxlc1tpXSk7Ci0JfQorCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOwogCi0JZm9y
IChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCXMgPSBzdHJsZW4oYXJndltpXSk7CisJZG8g
eworCQlpZiAoIHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgY3VyX292ZXJsYXktPm5hbWUs
IHNpemVvZiggcmVwb19zZWFyY2gpKSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGkgPSAwOyBpIDwg
TlVNX1NFQVJDSF9GSUxFUzsgKytpKSB7CisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JXMvcHJvZmlsZXMvJXMiLCBjdXJfb3ZlcmxheS0+cGF0aCwgc2VhcmNoX2ZpbGVzW2ldKTsKKwkJ
CWlmICgoZnBbaV0gPSBmb3BlbihidWYsICJyIikpID09IE5VTEwpCisJCQkJaWYgKCB2ZXJib3Nl
ICkKKwkJCQkJd2FybnAoInNraXBwaW5nICVzIGZvciB0aGUgJXMgb3ZlcmxheSIsIHNlYXJjaF9m
aWxlc1tpXSwgY3VyX292ZXJsYXktPm5hbWUpOworCQl9CiAKLQkJZm9yIChmID0gMDsgZiA8IE5V
TV9TRUFSQ0hfRklMRVM7ICsrZikgewotCQkJaWYgKGZwW2ZdID09IE5VTEwpCi0JCQkJY29udGlu
dWU7CisJCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgeworCQkJcyA9IHN0cmxlbihhcmd2
W2ldKTsKIAotCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwW2ZdKSAhPSBOVUxM
KSB7Ci0JCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQlmb3IgKGYg
PSAwOyBmIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7CisJCQkJaWYgKGZwW2ZdID09IE5VTEwp
CiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBO
VUxMKQotCQkJCQkqcCA9ICdcMCc7CisJCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1Ziks
IGZwW2ZdKSAhPSBOVUxMKSB7CisJCQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAn
XG4nKQorCQkJCQkJY29udGludWU7CiAKLQkJCQlzd2l0Y2ggKGYpIHsKLQkJCQkJY2FzZSAwOiAv
KiBHbG9iYWwgdXNlLmRlc2MgKi8KLQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMp
KQotCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09ICctJykgewotCQkJCQkJ
CQlwcmludGYoIiAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOwotCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCQl9
Ci0JCQkJCQlicmVhazsKKwkJCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxM
KQorCQkJCQkJKnAgPSAnXDAnOwogCi0JCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRl
c2MgKi8KLQkJCQkJCWlmICgocCA9IHN0cmNocihidWYsICc6JykpID09IE5VTEwpCisJCQkJCXN3
aXRjaCAoZikgeworCQkJCQkJY2FzZSAwOiAvKiBHbG9iYWwgdXNlLmRlc2MgKi8KKwkJCQkJCQlp
ZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKKwkJCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcg
JiYgYnVmW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQlpZiAoIGN1cl9vdmVybGF5ID09IG92ZXJs
YXlfZ2VudG9vICkKKwkJCQkJCQkJCQlwcmludGYoIiAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIs
IEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZWxz
ZSAKKwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwgY3Vy
X292ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMp
OworCQkJCQkJCQkJZ290byBza2lwX2ZpbGU7CisJCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKLQkJ
CQkJCSsrcDsKLQkJCQkJCWlmICghc3RybmNtcChwLCBhcmd2W2ldLCBzKSkgewotCQkJCQkJCWlm
IChwW3NdID09ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCSpwID0gJ1wwJzsKLQkJ
CQkJCQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5PUk0s
IEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOwotCQkJCQkJCX0K
LQkJCQkJCX0KLQkJCQkJCWJyZWFrOwogCi0JCQkJCWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBh
cmNoLmxpc3QgKi8KLQkJCQkJCWlmICghc3RyY21wKGJ1ZiwgYXJndltpXSkpIHsKLQkJCQkJCQlw
cmludGYoIiAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgQk9MRCwgTk9STSwg
QkxVRSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7Ci0JCQkJCQkJZ290byBza2lwX2ZpbGU7Ci0J
CQkJCQl9Ci0JCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRl
c2MgKi8KKwkJCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQorCQkJCQkJ
CQlicmVhazsKKwkJCQkJCQkrK3A7CisJCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFyZ3ZbaV0sIHMp
KSB7CisJCQkJCQkJCWlmIChwW3NdID09ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJ
CQkqcCA9ICdcMCc7CisJCQkJCQkJCQlpZiAoIGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9v
ICkKKwkJCQkJCQkJCQlwcmludGYoIiAlc2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xuIiwgQk9M
RCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JNLCBwK3MrMyk7CisJ
CQkJCQkJCQllbHNlIAorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNsb2NhbCVzOiVzJXMlczol
cyVzJXMgJXNcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ld
LCBOT1JNLCBCT0xELCBidWYsIE5PUk0sIHArcyszKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJ
CQkJCQlicmVhazsKIAotCQkJCQljYXNlIDM6IC8qIExhbmd1YWdlcyBsYW5nLmRlc2MgKi8KLQkJ
CQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQotCQkJCQkJCWlmIChidWZbc10gPT0g
JyAnICYmIGJ1ZltzKzFdID09ICctJykgewotCQkJCQkJCQlwcmludGYoIiAlc2xhbmclczolcyVz
JXM6ICVzIGxpbmd1YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3Mr
Myk7CisJCQkJCQljYXNlIDI6IC8qIEFyY2hpdGVjdHVyZXMgYXJjaC5saXN0ICovCisJCQkJCQkJ
aWYgKCFzdHJjbXAoYnVmLCBhcmd2W2ldKSkgeworCQkJCQkJCQlpZiAoIGN1cl9vdmVybGF5ID09
IG92ZXJsYXlfZ2VudG9vICkKKwkJCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMlczogJXMg
YXJjaGl0ZWN0dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBhcmd2W2ld
KTsKKwkJCQkJCQkJZWxzZSAKKwkJCQkJCQkJCXByaW50ZigiICglcykgJXNhcmNoJXM6JXMlcyVz
OiAlcyBhcmNoaXRlY3R1cmVcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVF
LCBhcmd2W2ldLCBOT1JNLCBhcmd2W2ldKTsKIAkJCQkJCQkJZ290byBza2lwX2ZpbGU7CiAJCQkJ
CQkJfQotCQkJCQkJYnJlYWs7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgMzogLyogTGFu
Z3VhZ2VzIGxhbmcuZGVzYyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMp
KQorCQkJCQkJCQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJ
CQkJCWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCQkJCXByaW50
ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2
W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UgCisJCQkJCQkJCQkJcHJpbnRmKCIg
KCVzKSAlc2xhbmclczolcyVzJXM6ICVzIGxpbmd1YVxuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJP
TEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZ290byBz
a2lwX2ZpbGU7CisJCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJfQogCQkJCX0KLQkJCX0K
IAogc2tpcF9maWxlOgotCQkJcmV3aW5kKGZwW2ZdKTsKKwkJCQlyZXdpbmQoZnBbZl0pOworCQkJ
fQorCisJCQlpZiAoIGkgPT0gKGFyZ2MgLSAxKSApCisJCQkJZm9yIChmPTA7IGY8TlVNX1NFQVJD
SF9GSUxFUzsgKytmKSAKKwkJCQkJaWYgKCBmcFtmXSApIHsKKwkJCQkJCWZjbG9zZShmcFtmXSk7
CisJCQkJCQlmcFtmXSA9IE5VTEw7CisJCQkJCX0KIAkJfQotCX0KIAotCWZvciAoZj0wOyBmPE5V
TV9TRUFSQ0hfRklMRVM7ICsrZikKLQkJZmNsb3NlKGZwW2ZdKTsKKwl9IHdoaWxlICggKGN1cl9v
dmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CiAKIAkvKiBub3cgc2NhbiB0aGUgZGVzYyBkaXIg
Ki8KLQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8iLCBwb3J0
ZGlyKTsKLQlkID0gb3BlbmRpcihidWYpOwotCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBO
VUxMKSB7Ci0JCWlmIChzdHJjbXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwgIi5k
ZXNjIikpCisJY3VyX292ZXJsYXk9b3ZlcmxheV9nZW50b287CisJZG8geworCQlpZiAoIHJlcG8g
JiYgc3RybmNtcChyZXBvX3NlYXJjaCwgY3VyX292ZXJsYXktPm5hbWUsIHNpemVvZiggcmVwb19z
ZWFyY2gpKSkKIAkJCWNvbnRpbnVlOwotCi0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIl
cy9wcm9maWxlcy9kZXNjLyVzIiwgcG9ydGRpciwgZGUtPmRfbmFtZSk7Ci0JCWlmICgoZnBbMF09
Zm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKSB7Ci0JCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAnJXMn
IGZvciByZWFkaW5nOyBza2lwcGluZyIsIGRlLT5kX25hbWUpOworCQlzbnByaW50ZihidWYsIHNp
emVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8iLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCWlm
ICggISAoZCA9IG9wZW5kaXIoYnVmKSkpIHsKKwkJCWlmICggdmVyYm9zZSApIAorCQkJCXdhcm4o
IkNvdWxkIG5vdCBvcGVuICVzIC0+IHNraXBwaW5nIiwgYnVmKTsgCiAJCQljb250aW51ZTsKIAkJ
fQorCQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgeworCQkJaWYgKHN0cmNtcChk
ZS0+ZF9uYW1lK3N0cmxlbihkZS0+ZF9uYW1lKS01LCAiLmRlc2MiKSkKKwkJCQljb250aW51ZTsK
IAotCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbMF0pICE9IE5VTEwpIHsKLQkJ
CWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4nKQorCQkJc25wcmludGYoYnVmLCBz
aXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvJXMiLCBjdXJfb3ZlcmxheS0+cGF0aCwgZGUt
PmRfbmFtZSk7CisJCQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkgeworCQkJ
CXdhcm4oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmc7IHNraXBwaW5nIiwgZGUtPmRf
bmFtZSk7CiAJCQkJY29udGludWU7CisJCQl9CisKKwkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVv
ZihidWYpLCBmcFswXSkgIT0gTlVMTCkgeworCQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1Zlsw
XSA9PSAnXG4nKQorCQkJCQljb250aW51ZTsKIAotCQkJaWYgKChwID0gc3RycmNocihidWYsICdc
bicpKSAhPSBOVUxMKQotCQkJCSpwID0gJ1wwJzsKKwkJCQlpZiAoKHAgPSBzdHJyY2hyKGJ1Ziwg
J1xuJykpICE9IE5VTEwpCisJCQkJCSpwID0gJ1wwJzsKIAotCQkJaWYgKChwID0gc3RyY2hyKGJ1
ZiwgJy0nKSkgPT0gTlVMTCkgeworCQkJCWlmICgocCA9IHN0cmNocihidWYsICctJykpID09IE5V
TEwpIHsKIGludmFsaWRfbGluZToKLQkJCQl3YXJuKCJJbnZhbGlkIGxpbmUgaW4gJyVzJzogJXMi
LCBkZS0+ZF9uYW1lLCBidWYpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJd2hpbGUgKHBbLTFd
ICE9ICcgJyAmJiBwWzFdICE9ICcgJykgewotCQkJCS8qIG1heWJlIHRoZSBmbGFnIGhhcyBhICct
JyBpbiBpdCAuLi4gKi8KLQkJCQlpZiAoKHAgPSBzdHJjaHIocCsxLCAnLScpKSA9PSBOVUxMKQot
CQkJCQlnb3RvIGludmFsaWRfbGluZTsKLQkJCX0KLQkJCXBbLTFdID0gJ1wwJzsKLQkJCXAgKz0g
MjsKKwkJCQkJd2FybigiSW52YWxpZCBsaW5lIGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVm
KTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsx
XSAhPSAnICcpIHsKKwkJCQkJLyogbWF5YmUgdGhlIGZsYWcgaGFzIGEgJy0nIGluIGl0IC4uLiAq
LworCQkJCQlpZiAoKHAgPSBzdHJjaHIocCsxLCAnLScpKSA9PSBOVUxMKQorCQkJCQkJZ290byBp
bnZhbGlkX2xpbmU7CisJCQkJfQorCQkJCXBbLTFdID0gJ1wwJzsKKwkJCQlwICs9IDI7CiAKLQkJ
CWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykKLQkJCQlpZiAoIXN0cmNtcChhcmd2W2ldLCBi
dWYpKQotCQkJCQlwcmludGYoIiAlcyVzJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFt
ZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7Ci0JCX0KLQkJY2xvc2UoZik7Ci0JfQot
CWNsb3NlZGlyKGQpOworCQkJCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykKKwkJCQkJaWYg
KCFzdHJjbXAoYXJndltpXSwgYnVmKSkgeworCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBvdmVy
bGF5X2dlbnRvbyApCisJCQkJCQkJcHJpbnRmKCIgJXMlcyVzOiVzJXMlczogJXNcbiIsIEJPTEQs
IGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIHApOworCQkJCQkJZWxzZQor
CQkJCQkJCXByaW50ZigiICglcykgJXMlcyVzOiVzJXMlczogJXNcbiIsIGN1cl9vdmVybGF5LT5u
YW1lLCBCT0xELCBkZS0+ZF9uYW1lLCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKKwkJ
CQkJfQogCisJCQl9CisJCQlmY2xvc2UoZnBbMF0pOworCQl9CisJCWNsb3NlZGlyKGQpOworCX0g
d2hpbGUgKCAoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAlyZXR1cm4gMDsKIH0K
IAogaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJRklMRSAqZnA7Ci0J
Y2hhciAqcDsKKwljaGFyICpwLCAqc3RyOworCXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsK
KwljaGFyIHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyIG92ZXJsYXlfbmFtZVs2NF07CiAKIAljaGFy
IGJ1ZjBbX1FfUEFUSF9NQVhdOwogCWNoYXIgYnVmMVtfUV9QQVRIX01BWF07CkBAIC0yMTcsNiAr
MjYwLDExIEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNob3J0IHF1
c2VfYWxsID0gMDsKIAlpbnQgcmVnZXhwX21hdGNoaW5nID0gMSwgaSwgaWR4ID0gMDsKIAlzaXpl
X3Qgc2VhcmNoX2xlbjsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisK
KwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJ
cmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0l
cyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwpA
QCAtMjI1LDYgKzI3MywxMCBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
IAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgJ2UnOiByZWdleHBfbWF0Y2hpbmcgPSAwOyBicmVhazsK
IAkJY2FzZSAnYSc6IHF1c2VfYWxsID0gMTsgYnJlYWs7CisJCWNhc2UgJ28nOiAKKwkJCXJlcG8g
PSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gp
KTsKKwkJCWJyZWFrOwogCQljYXNlICdLJzogaWR4ID0gMTsgYnJlYWs7CiAJCWNhc2UgJ0wnOiBp
ZHggPSAyOyBicmVhazsKIAkJY2FzZSAnRCc6IGlkeCA9IC0xOyBicmVhazsKQEAgLTIzMywxMSAr
Mjg1LDE0IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05f
R0VUT1BUU19DQVNFUyhxdXNlKQogCQl9CiAJfQotCWlmIChhcmdjID09IG9wdGluZCAmJiAhcXVz
ZV9hbGwgJiYgaWR4ID49IDApCisJaWYgKGFyZ2MgPT0gb3B0aW5kICYmICFxdXNlX2FsbCAmJiBp
ZHggPj0gMCkgeworCQlpZiAoIGlkeCA9PSAzICkKKwkJCWZyZWUoc2VhcmNoX3ZhcnMraWR4KTsK
IAkJcXVzZV91c2FnZShFWElUX0ZBSUxVUkUpOworCX0KIAogCWlmIChpZHggPT0gLTEpCi0JCXJl
dHVybiBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCBhcmdjLCBhcmd2KTsKKwkJcmV0dXJuIHF1
c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIHJlcG8sIHJlcG9fc2VhcmNoLCBhcmdjLCBhcmd2KTsK
IAogCWlmIChxdXNlX2FsbCkgb3B0aW5kID0gYXJnYzsKIAlpbml0aWFsaXplX2VidWlsZF9mbGF0
KCk7CS8qIHNldHMgb3VyIHB3ZCB0byAkUE9SVERJUiAqLwpAQCAtMjQ5LDYgKzMwNCw0MSBAQCBp
bnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcmV0dXJuIDE7CiAJd2hpbGUg
KChmZ2V0cyhlYnVpbGQsIHNpemVvZihlYnVpbGQpLCBmcCkpICE9IE5VTEwpIHsKIAkJRklMRSAq
bmV3ZnA7CisJCWlmICggKCBwID0gc3RyY2hyKGVidWlsZCwgJzonKSkpCisJCXsKKwkJCSpwID0g
MDsKKwkJCXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMgJzo6JyAqLworCQkJcCA9IGVidWls
ZDsKKwkJCWlmICggcmVwbyAmJiBzdHJuY21wKCByZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9f
c2VhcmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoIHN0cmNtcChvdmVybGF5X25hbWUsIHAp
KQorCQkJeworCQkJCWZvciAoIG92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vIDsgb3ZlcmxheV90
bXAtPm5leHQgOyBvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCApCisJCQkJeworCQkJCQlp
ZiAoICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5u
YW1lKSkpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90
bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCXsKKwkJCQkJY3Vy
X292ZXJsYXkgPSBvdmVybGF5X3RtcDsKKwkJCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5wYXRo
KSAhPSAwKSB7CisJCQkJCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1
cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkJCW15ZXJyb3I9MTsKKwkJCQkJfQorCQkJCX0gZWxzZSAK
KwkJCQkJbXllcnJvcj0xOworCQkJCWlmICggbXllcnJvcikgeworCQkJCQlpZiAoIXJlaW5pdGlh
bGl6ZSkKKwkJCQkJCXdhcm5mKCIoY2FjaGUgdXBkYXRlIHBlbmRpbmcpICVzIDogJXMiLCBlYnVp
bGQsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJCXJlaW5pdGlhbGl6ZSA9IDE7CisJCQkJCW15ZXJy
b3I9MDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBj
dXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJfQorCQkJc3RyY3B5
KGVidWlsZCwgc3RyKSA7CisJCX0KKwogCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4nKSkg
IT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJaWYgKChuZXdmcCA9IGZvcGVuKGVidWlsZCwgInIiKSkg
IT0gTlVMTCkgewpAQCAtMzc0LDcgKzQ2NCw3IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCQkJCQlpZiAodmVyYm9zZSA+IDMpCiAJCQkJCQlwcmludGYoIiVzICVzICVz
ICIsICp1c2VyID8gdXNlciA6ICJNSVNTSU5HIiwgKnJldmlzaW9uID8gcmV2aXNpb24gOiAiTUlT
U0lORyIsICpkYXRlID8gZGF0ZSA6ICJNSVNTSU5HIik7CiAKLQkJCQkJcHJpbnRmKCIlcyVzJXMg
IiwgQ1lBTiwgZWJ1aWxkLCBOT1JNKTsKKwkJCQkJcHJpbnRmKCIlcyVzOjolcyVzICIsIENZQU4s
IGN1cl9vdmVybGF5LT5uYW1lLCBlYnVpbGQsIE5PUk0pOwogCQkJCQlwcmludF9oaWdobGlnaHRl
ZF91c2VfZmxhZ3MoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgb3B0aW5kLCBhcmdjLCBhcmd2KTsKIAkJ
CQkJcHV0cyhOT1JNKTsKIAkJCQkJaWYgKHZlcmJvc2UgPiAxKSB7CkBAIC0zODIsNyArNDcyLDcg
QEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQlpbnQgQVJHQyA9
IDA7CiAJCQkJCQltYWtlYXJndigmYnVmMFtzZWFyY2hfbGVuKzFdLCAmQVJHQywgJkFSR1YpOwog
CQkJCQkJaWYgKEFSR0MgPiAwKSB7Ci0JCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIEFSR0Ms
IEFSR1YpOworCQkJCQkJCXF1c2VfZGVzY3JpYmVfZmxhZygxLCByZXBvLCByZXBvX3NlYXJjaCwg
QVJHQywgQVJHVik7CiAJCQkJCQkJZm9yIChpID0gMDsgaSA8IEFSR0M7IGkrKykKIAkJCQkJCQkJ
ZnJlZShBUkdWW2ldKTsKIAkJCQkJCQlmcmVlKEFSR1YpOwpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0
aWxzLTAuMS4yMS9xeHBhay5jIHBvcnRhZ2UtdXRpbHMtMC4xLjIxLm5ldy9xeHBhay5jCi0tLSBw
b3J0YWdlLXV0aWxzLTAuMS4yMS9xeHBhay5jCTIwMDYtMDgtMjEgMTQ6MzM6MTguMDAwMDAwMDAw
ICswMjAwCisrKyBwb3J0YWdlLXV0aWxzLTAuMS4yMS5uZXcvcXhwYWsuYwkyMDA2LTExLTA4IDIx
OjA3OjE0LjM2MTkyMjkxNSArMDEwMApAQCAtMzM1LDE0ICszMzUsMTQgQEAgdm9pZCB4cGFrX2Ny
ZWF0ZShjb25zdCBjaGFyICpmaWxlLCBpbnQgYQogCXJld2luZChmZGF0YSk7CiAKIAkvKiAiWFBB
S1BBQ0siICsgKGluZGV4X2xlbikgKyAoZGF0YV9sZW4pICsgaW5kZXggKyBkYXRhICsgIlhQQUtT
VE9QIiAqLwotCWZ3cml0ZShYUEFLX1NUQVJUX01TRywgMSwgWFBBS19TVEFSVF9NU0dfTEVOLCBm
b3V0KTsgLyogIlhQQUtQQUNLIiAqLworCWZ3cml0ZShYUEFLX1NUQVJUX01TRywgMSwgWFBBS19T
VEFSVF9NU0dfTEVOLCBmb3V0KTsJLyogIlhQQUtQQUNLIiAqLwogCXAgPSB0YnoyX2VuY29kZV9p
bnQoaW5kZXhfbGVuKTsKLQlmd3JpdGUocCwgMSwgNCwgZm91dCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIChpbmRleF9sZW4pICovCisJZndyaXRlKHAsIDEsIDQsIGZvdXQpOwkJ
CQkJLyogKGluZGV4X2xlbikgKi8KIAlwID0gdGJ6Ml9lbmNvZGVfaW50KGRhdGFfbGVuKTsKLQlm
d3JpdGUocCwgMSwgNCwgZm91dCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChk
YXRhX2xlbikgKi8KLQlfdGJ6Ml9jb3B5X2ZpbGUoZmluZGV4LCBmb3V0KTsgICAgICAgICAgICAg
ICAgICAgICAgIC8qIGluZGV4ICovCi0JX3RiejJfY29weV9maWxlKGZkYXRhLCBmb3V0KTsgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBkYXRhICovCi0JZndyaXRlKFhQQUtfRU5EX01TRywgMSwg
WFBBS19FTkRfTVNHX0xFTiwgZm91dCk7ICAgICAvKiAiWFBBS1NUT1AiICovCisJZndyaXRlKHAs
IDEsIDQsIGZvdXQpOwkJCSAgICAgICAJCS8qIChkYXRhX2xlbikgKi8KKwlfdGJ6Ml9jb3B5X2Zp
bGUoZmluZGV4LCBmb3V0KTsJCSAgICAgICAJCS8qIGluZGV4ICovCisJX3RiejJfY29weV9maWxl
KGZkYXRhLCBmb3V0KTsJCQkJLyogZGF0YSAqLworCWZ3cml0ZShYUEFLX0VORF9NU0csIDEsIFhQ
QUtfRU5EX01TR19MRU4sIGZvdXQpOwkvKiAiWFBBS1NUT1AiICovCiAKIAlzdHJjcHkocGF0aCwg
ZmlsZSk7IHN0cmNhdChwYXRoLCAiLmluZGV4Iik7IHVubGluayhwYXRoKTsKIAlzdHJjcHkocGF0
aCwgZmlsZSk7IHN0cmNhdChwYXRoLCAiLmRhdCIpOyAgIHVubGluayhwYXRoKTsK
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101495</attachid>
            <date>2006-11-08 14:01 0000</date>
            <desc>overlay-support.patch against portage-utils-20061007</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTAwNy9hcHBsZXRzLmggcG9ydGFnZS11dGls
cy0yMDA2MTAwNy5uZXcvYXBwbGV0cy5oCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L2FwcGxl
dHMuaAkyMDA2LTExLTA4IDA0OjAzOjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGls
cy0yMDA2MTAwNy5uZXcvYXBwbGV0cy5oCTIwMDYtMTEtMDkgMTk6MjA6NTAuMjg3MTk1Mjc5ICsw
MTAwCkBAIC00NywyNCArNDcsMjQgQEAgc3RydWN0IGFwcGxldF90IHsKIAljb25zdCBjaGFyICpk
ZXNjOwogfSBhcHBsZXRzW10gPSB7CiAJLyogcSBtdXN0IGFsd2F5cyBiZSB0aGUgZmlyc3QgYXBw
bGV0ICovCi0JeyJxIiwgICAgICAgICBxX21haW4sICAgICAgICAgIjxhcHBsZXQ+IDxhcmdzPiIs
ICJ2aXJ0dWFsIGFwcGxldCJ9LAotCXsicWF0b20iLCAgICAgcWF0b21fbWFpbiwgICAgICI8cGtn
PiIsICAgICAgICAgICAic3BsaXQgYXRvbSBzdHJpbmdzIn0sCi0JeyJxY2FjaGUiLCAgICBxY2Fj
aGVfbWFpbiwgICAgIjxhY3Rpb24+IDxhcmdzPiIsICJzZWFyY2ggdGhlIG1ldGFkYXRhIGNhY2hl
In0sCi0JeyJxY2hlY2siLCAgICBxY2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2
ZXJpZnkgbXRpbWVzL2RpZ2VzdHMifSwKLQl7InFkZXBlbmRzIiwgIHFkZXBlbmRzX21haW4sICAi
PHBrZ25hbWU+IiwgICAgICAgInNob3cgZGVwZW5kZW5jeSBpbmZvIn0sCi0JeyJxZmlsZSIsICAg
ICBxZmlsZV9tYWluLCAgICAgIjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmlu
ZyBmaWxlcyJ9LAotCXsicWdsc2EiLCAgICAgcWdsc2FfbWFpbiwgICAgICI8YWN0aW9uPiA8bGlz
dD4iLCAiY2hlY2sgR0xTQXMgYWdhaW5zdCBzeXN0ZW0ifSwKLQl7InFncmVwIiwgICAgIHFncmVw
X21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4gZWJ1aWxkcyJ9LAotCXsicWxp
c3QiLCAgICAgcWxpc3RfbWFpbiwgICAgICI8cGtnbmFtZT4iLCAgICAgICAibGlzdCBmaWxlcyBv
d25lZCBieSBwa2duYW1lIn0sCi0JeyJxbG9wIiwgICAgICBxbG9wX21haW4sICAgICAgIjxwa2du
YW1lPiIsICAgICAgICJlbWVyZ2UgbG9nIGFuYWx5emVyIn0sCi0JeyJxbWVyZ2UiLCAgICBxbWVy
Z2VfbWFpbiwgICAgIjxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVyZ2UgYmluYXJ5IHBh
Y2thZ2UifSwKLQl7InFwa2ciLCAgICAgIHFwa2dfbWFpbiwgICAgICAiPG1pc2MgYXJncz4iLCAg
ICAgIm1hbmlwdWxhdGUgR2VudG9vIGJpbnBrZ3MifSwKLQl7InFweSIsICAgICAgcXB5X21haW4s
ICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJweXRob24gaW50ZXJmYWNlIn0sCi0JeyJxc2VhcmNo
IiwgICBxc2VhcmNoX21haW4sICAgIjxyZWdleD4iLCAgICAgICAgICJzZWFyY2ggcGtnbmFtZS9k
ZXNjIn0sCi0JeyJxc2l6ZSIsICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2duYW1lPiIsICAgICAg
ICJjYWxjdWxhdGUgc2l6ZSB1c2FnZSJ9LAotCXsicXRiejIiLCAgICAgcXRiejJfbWFpbiwgICAg
ICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB0YnoyIHBhY2thZ2VzIn0sCi0JeyJxdXNl
IiwgICAgICBxdXNlX21haW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJmaW5kIHBrZ3MgdXNp
bmcgdXNlZmxhZ3MifSwKLQl7InF4cGFrIiwgICAgIHF4cGFrX21haW4sICAgICAiPG1pc2MgYXJn
cz4iLCAgICAgIm1hbmlwdWxhdGUgeHBhayBhcmNoaXZlcyJ9LAorCXsicSIsICAgICAgICAgcV9t
YWluLCAgICAgICAgICI8YXBwbGV0PiA8YXJncz4iLCAidmlydHVhbCBhcHBsZXQiCQl9LAorCXsi
cWF0b20iLCAgICAgcWF0b21fbWFpbiwgICAgICI8cGtnPiIsICAgICAgICAgICAic3BsaXQgYXRv
bSBzdHJpbmdzIgkJfSwKKwl7InFjYWNoZSIsICAgIHFjYWNoZV9tYWluLCAgICAiPGFjdGlvbj4g
PGFyZ3M+IiwgInNlYXJjaCB0aGUgbWV0YWRhdGEgY2FjaGUiCX0sCisJeyJxY2hlY2siLCAgICBx
Y2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMi
CX0sCisJeyJxZGVwZW5kcyIsICBxZGVwZW5kc19tYWluLCAgIjxwa2duYW1lPiIsICAgICAgICJz
aG93IGRlcGVuZGVuY3kgaW5mbyIJCX0sCisJeyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAgICAg
IjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmluZyBmaWxlcyIJfSwKKwl7InFn
cmVwIiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4gZWJ1
aWxkcyIJCX0sCisJeyJxbGlzdCIsICAgICBxbGlzdF9tYWluLCAgICAgIjxwa2duYW1lPiIsICAg
ICAgICJsaXN0IGZpbGVzIG93bmVkIGJ5IHBrZ25hbWUiCX0sCisJeyJxbG9wIiwgICAgICBxbG9w
X21haW4sICAgICAgIjxwa2duYW1lPiIsICAgICAgICJwYWx1ZGlzIGxvZyBhbmFseXplciIJCX0s
CisJeyJxcGtnIiwgICAgICBxcGtnX21haW4sICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJtYW5p
cHVsYXRlIEdlbnRvbyBiaW5wa2dzIgl9LAorCXsicXNlYXJjaCIsICAgcXNlYXJjaF9tYWluLCAg
ICI8cmVnZXg+IiwgICAgICAgICAic2VhcmNoIHBrZ25hbWUvZGVzYyIJCX0sCisJeyJxc2l6ZSIs
ICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2duYW1lPiIsICAgICAgICJjYWxjdWxhdGUgc2l6ZSB1
c2FnZSIJCX0sCisJeyJxdGJ6MiIsICAgICBxdGJ6Ml9tYWluLCAgICAgIjxtaXNjIGFyZ3M+Iiwg
ICAgICJtYW5pcHVsYXRlIHRiejIgcGFja2FnZXMiCX0sCisJeyJxdXNlIiwgICAgICBxdXNlX21h
aW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJmaW5kIHBrZ3MgdXNpbmcgdXNlZmxhZ3MiCX0s
CisJeyJxeHBhayIsICAgICBxeHBha19tYWluLCAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJtYW5p
cHVsYXRlIHhwYWsgYXJjaGl2ZXMiCX0sCisJeyJxbWVyZ2UiLCAgICBxbWVyZ2VfbWFpbiwgICAg
Ijxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVyZ2UgYmluYXJ5IHBhY2thZ2UifSwJCisJ
eyJxZ2xzYSIsICAgICBxZ2xzYV9tYWluLCAgICAgIjxhY3Rpb24+IDxsaXN0PiIsIE5VTEwJCQkJ
fSwJCS8qICJjaGVjayBHTFNBcyBhZ2FpbnN0IHN5c3RlbSIgKi8KKwl7InFweSIsICAgICAgIHFw
eV9tYWluLCAgICAgICAiPG1pc2MgYXJncz4iLCAgICAgTlVMTAkJCQl9LAkJLyogInB5dGhvbiBp
bnRlcmZhY2UiICovCiAKIAogCS8qIGFsaWFzZXMgZm9yIGVxdWVyeSBjYXBhdGFiaWxpdHkgKi8K
ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTAwNy9tYWluLmMgcG9ydGFnZS11dGlscy0y
MDA2MTAwNy5uZXcvbWFpbi5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L21haW4uYwkyMDA2
LTExLTA4IDA0OjAzOjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTAw
Ny5uZXcvbWFpbi5jCTIwMDYtMTEtMDkgMjM6MDk6MDMuMDUwNTc4ODM4ICswMTAwCkBAIC03MSw2
ICs3MSw3IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRp
YyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2
b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7
CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAg
LTg1LDEzICs4NiwyMSBAQCBzdGF0aWMgaW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRl
bmQgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwotc3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0g
PSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwogc3RhdGlj
IGNoYXIgcG9ydHZkYltdID0gInZhci9kYi9wa2ciOwogc3RhdGljIGNoYXIgcG9ydGNhY2hlZGly
W10gPSAibWV0YWRhdGEvY2FjaGUiOwogc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhd
ID0gIi8iOwogc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMv
IjsKIAordHlwZWRlZiBzdHJ1Y3Qgb3ZlcmxheV90IG92ZXJsYXlfdDsKK3N0cnVjdCBvdmVybGF5
X3QgeworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwYXRoW19RX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qg
b3ZlcmxheV90ICpuZXh0OworfTsKKworc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50b28g
PSBOVUxMOworCiBjaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8iOwog
Y2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKIApAQCAtMjAwLDEw
ICsyMDksMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTQ2NSwxNyArNDc0LDc5IEBAIGNoYXIgKnN0cmluY3JfdmFyKGNvbnN0IGNoYXIgKm5hbWUs
IGNoYXIKIAlyZXR1cm4gKGNoYXIgKikgdmFsdWU7CiB9CiAKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVy
bGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSkKK3sKKwlzaG9ydCBtZXJyb3IgPSAwOworCWNo
YXIgYnVmW0JVRlNJWkVdLCBmaWxlW19RX1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKKwlvdmVybGF5
X3QgKmN1cl9vdmVybGF5OworCUZJTEUgKnJlcG9fbmFtZUZQOworCXMgPSBwb3J0ZGlyX292ZXJs
YXk7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKworCXdoaWxlICgqcykgeworCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IChvdmVybGF5X3QgKikgeG1hbGxvYyAoIHNpemVvZiAoKmN1cl9v
dmVybGF5LT5uZXh0KSk7CisJCWN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQ7CisJCWN1
cl9vdmVybGF5LT5uZXh0ID0gTlVMTDsKKworCQlpZiAoIChwPXN0cmNocihzLCcgJykpKQorCQkJ
KnAgPSAwOworCisJCXN0cm5jcHkoY3VyX292ZXJsYXktPnBhdGgsIHMsIHNpemVvZihjdXJfb3Zl
cmxheS0+cGF0aCkpOworCisJCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBvdmVybGF5ICovCisJ
CXN0cm5jcHkoZmlsZSwgY3VyX292ZXJsYXktPnBhdGgsIF9RX1BBVEhfTUFYKTsKKwkJc3RybmNh
dChmaWxlLCAiL3Byb2ZpbGVzL3JlcG9fbmFtZSIsIF9RX1BBVEhfTUFYKTsKKwkJaWYgKCggcmVw
b19uYW1lRlAgPSBmb3BlbihmaWxlLCAiciIpICkpCisJCXsKKwkJCWlmICggISAoIGZnZXRzKGJ1
Ziwgc2l6ZW9mKGJ1ZikscmVwb19uYW1lRlApKSApCisJCQkJbWVycm9yKys7CisKKwkJCXJtc3Bh
Y2UoYnVmKTsKKwkJCWlmICggKHQgPSBzdHJjaHIoYnVmLCdcbicpKSkKKwkJCQkqdCA9IDA7CisK
KwkJCXN0cm5jcHkoY3VyX292ZXJsYXktPm5hbWUsIGJ1Ziwgc2l6ZW9mKGN1cl9vdmVybGF5LT5u
YW1lKSk7CisKKwkJCWZjbG9zZShyZXBvX25hbWVGUCk7CisKKwkJfSBlbHNlIAorCQkJbWVycm9y
Kys7CisKKwkJaWYgKG1lcnJvcikgeworCQkJLyogZGVsZXRlIHRyYWlsaW5nICcvJyAqLworCQkJ
dCA9IGN1cl9vdmVybGF5LT5wYXRoICsgc3RybGVuKGN1cl9vdmVybGF5LT5wYXRoKSAtIDE7CisJ
CQlpZiAoICp0ID09ICcvJyApCisJCQkJKnQgPSAwOworCisJCQlzdHJuY3B5KGN1cl9vdmVybGF5
LT5uYW1lLCBiYXNlbmFtZShjdXJfb3ZlcmxheS0+cGF0aCksIHNpemVvZihjdXJfb3ZlcmxheS0+
bmFtZSkpOworCQkJbWVycm9yPTA7CisJCX0KKworCQlpZiAocCkKKwkJCXMgPSBwKzE7CisJCWVs
c2UKKwkJCWJyZWFrOworCX0KKwkKK30KKworCiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYo
dm9pZCkKIHsKIAljaGFyIG5vY29sb3IgPSAwOwogCWludCBpLCBmOwogCXN0cnVjdCBzdGF0IHN0
OwogCUZJTEUgKmZwOworCWNoYXIgdG1wX3BvcnRkaXJbX1FfUEFUSF9NQVhdOworCWNoYXIgcG9y
dGRpcl9vdmVybGF5WzIwNDhdID0gIiI7CisKIAljaGFyIGJ1ZltCVUZTSVpFXSwgKnMsICpwOwog
CiAJY2hhciBwcm9maWxlW19RX1BBVEhfTUFYXSwgcG9ydGFnZV9maWxlW19RX1BBVEhfTUFYXTsK
KwogCWNvbnN0IGNoYXIgKmZpbGVzW10gPSB7cG9ydGFnZV9maWxlLCAiL2V0Yy9tYWtlLmdsb2Jh
bHMiLCAiL2V0Yy9tYWtlLmNvbmYifTsKIAl0eXBlZGVmIGVudW0geyBfUV9CT09MLCBfUV9TVFIs
IF9RX0lTVFIgfSB2YXJfdHlwZXM7CisJCiAJc3RydWN0IHsKIAkJY29uc3QgY2hhciAqbmFtZTsK
IAkJY29uc3Qgc2l6ZV90IG5hbWVfbGVuOwpAQCAtNDgzLDE5ICs1NTQsMjYgQEAgdm9pZCBpbml0
aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiAJCWNoYXIgKnZhbHVlOwogCQljb25zdCBzaXplX3Qg
dmFsdWVfbGVuOwogCX0gdmFyc190b19yZWFkW10gPSB7Ci0JCXsiQUNDRVBUX0xJQ0VOU0UiLCAx
NCwgX1FfU1RSLCAgYWNjZXB0X2xpY2Vuc2UsIHNpemVvZihhY2NlcHRfbGljZW5zZSl9LAotCQl7
IklOU1RBTExfTUFTSyIsIDEyLCBfUV9JU1RSLCAgaW5zdGFsbF9tYXNrLCBzaXplb2YoaW5zdGFs
bF9tYXNrKX0sCi0JCXsiQVJDSCIsICAgIDQsIF9RX1NUUiwgIHBvcnRhcmNoLCBzaXplb2YocG9y
dGFyY2gpfSwKLQkJeyJDT05GSUdfUFJPVEVDVCIsICAgIDE0LCBfUV9TVFIsICBjb25maWdfcHJv
dGVjdCwgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KX0sCi0JCXsiTk9DT0xPUiIsIDcsIF9RX0JPT0ws
ICZub2NvbG9yLCAxfSwKLQkJeyJGRUFUVVJFUyIsOCwgX1FfSVNUUiwgIGZlYXR1cmVzLCBzaXpl
b2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgNywgX1FfU1RSLCAgcG9ydGRpciwgc2l6ZW9m
KHBvcnRkaXIpfSwKLQkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgIDE1LCBfUV9TVFIsICBiaW5ob3N0
LCBzaXplb2YoYmluaG9zdCl9LAotCQl7IlBPUlRBR0VfVE1QRElSIiwgICAgMTQsIF9RX1NUUiwg
IHBvcnRfdG1wZGlyLCBzaXplb2YocG9ydF90bXBkaXIpfSwKLQkJeyJQS0dESVIiLCAgNiwgX1Ff
U1RSLCAgcGtnZGlyLCBzaXplb2YocGtnZGlyKX0sCi0JCXsiUk9PVCIsICAgIDQsIF9RX1NUUiwg
IHBvcnRyb290LCBzaXplb2YocG9ydHJvb3QpfQorCQl7IkFDQ0VQVF9MSUNFTlNFIiwJMTQsIF9R
X1NUUiwJYWNjZXB0X2xpY2Vuc2UsCQkgc2l6ZW9mKGFjY2VwdF9saWNlbnNlKQkJfSwKKwkJeyJJ
TlNUQUxMX01BU0siLAkxMiwgX1FfSVNUUiwJaW5zdGFsbF9tYXNrLAkJIHNpemVvZihpbnN0YWxs
X21hc2spCQl9LAorCQl7IkFSQ0giLAkJNCwgX1FfU1RSLAlwb3J0YXJjaCwJCSBzaXplb2YocG9y
dGFyY2gpCQl9LAorCQl7IkNPTkZJR19QUk9URUNUIiwJMTQsIF9RX1NUUiwJY29uZmlnX3Byb3Rl
Y3QsCQkgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KQkJfSwKKwkJeyJOT0NPTE9SIiwJCTcsIF9RX0JP
T0wsCSZub2NvbG9yLAkJIDEJCQkJfSwKKwkJeyJGRUFUVVJFUyIsCQk4LCBfUV9JU1RSLAlmZWF0
dXJlcywJCSBzaXplb2YoZmVhdHVyZXMpCQl9LAorCQl7IlBPUlRESVIiLAkJNywgX1FfU1RSLAl0
bXBfcG9ydGRpciwJCSBzaXplb2YodG1wX3BvcnRkaXIpCQl9LAorCQl7IlBPUlRESVJfT1ZFUkxB
WSIsCTE1LCBfUV9JU1RSLAlwb3J0ZGlyX292ZXJsYXksCSBzaXplb2YocG9ydGRpcl9vdmVybGF5
KQl9LAorCQl7IlBPUlRBR0VfQklOSE9TVCIsCTE1LCBfUV9TVFIsCWJpbmhvc3QsCQkgc2l6ZW9m
KGJpbmhvc3QpCQl9LAorCQl7IlBPUlRBR0VfVE1QIiwJCTksIF9RX1NUUiwJcG9ydF90bXBkaXIs
CQkgc2l6ZW9mKHBvcnRfdG1wZGlyKQkJfSwKKwkJeyJQS0dESVIiLAkJNiwgX1FfU1RSLAlwa2dk
aXIsCQkJIHNpemVvZihwa2dkaXIpCQkJfSwKKwkJeyJST09UIiwJCTQsIF9RX1NUUiwJcG9ydHJv
b3QsCQkgc2l6ZW9mKHBvcnRyb290KQkJfQogCX07CiAKKwlvdmVybGF5X2dlbnRvbyA9IChvdmVy
bGF5X3QqKSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlzdHJjcHkob3Zlcmxh
eV9nZW50b28tPm5hbWUsImdlbnRvbyIpOworCXN0cmNweShvdmVybGF5X2dlbnRvby0+cGF0aCwi
L3Vzci9wb3J0YWdlIik7CisJb3ZlcmxheV9nZW50b28tPm5leHQgPSBOVUxMOworCisKIAlpZiAo
KHAgPSBzdHJjaHIocG9ydHJvb3QsICcvJykpICE9IE5VTEwpCiAJCWlmIChzdHJsZW4ocCkgIT0g
MSkKIAkJCXN0cm5jYXQocG9ydHJvb3QsICIvIiwgc2l6ZW9mKHBvcnRyb290KSk7CkBAIC01ODcs
NiArNjY1LDEzIEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lkKQogCQlub19jb2xv
cnMoKTsKIAllbHNlCiAJCWNvbG9yX3JlbWFwKCk7CisKKworCXN0cm5jcHkob3ZlcmxheV9nZW50
b28tPnBhdGgsIHRtcF9wb3J0ZGlyLCBzaXplb2Yob3ZlcmxheV9nZW50b28tPnBhdGgpKTsKKwor
CS8qIG5vdyB3ZSBpbml0aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQgbGlzdCB3aXRoIG92ZXJs
YXlfZ2VudG9vIHRoZSBmaXJzdCAnaXRlbScgICovCisJaW5pdGlhbGl6ZV9vdmVybGF5cyhwb3J0
ZGlyX292ZXJsYXkpOworCiB9CiAKIGVudW0gewpAQCAtNjE1LDE5ICs3MDAsMjEgQEAgY29uc3Qg
Y2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNoZV90eQogCWludCBhLCBiLCBjLCBkLCBlLCBp
OwogCWludCBmcmFjLCBzZWNzLCBjb3VudDsKIAlGSUxFICpmcDsKKwlvdmVybGF5X3QgKmN1cl9v
dmVybGF5OwogCiAJYSA9IGIgPSBjID0gZCA9IGUgPSBpID0gMDsKIAljb3VudCA9IGZyYWMgPSBz
ZWNzID0gMDsKKwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOwogCiAJY2FjaGVfZmlsZSA9
IChjYWNoZV90eXBlID09IENBQ0hFX0VCVUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVf
TUVUQURBVEFfRklMRSk7CiAKLQlpZiAoY2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgi
Y2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmIChjaGRpcihvdmVy
bGF5X2dlbnRvby0+cGF0aCkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMn
IGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYg
KGNhY2hlX3R5cGUgPT0gQ0FDSEVfTUVUQURBVEEgJiYgY2hkaXIocG9ydGNhY2hlZGlyKSAhPSAw
KSB7Ci0JCXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycgZmFpbGVkIiwgcG9y
dGRpciwgcG9ydGNhY2hlZGlyKTsKKwkJd2FybnAoImNoZGlyIHRvIHBhbHVkaXMgY2FjaGUgJyVz
LyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgcG9ydGNhY2hlZGlyKTsKIAkJZ290
byByZXQ7CiAJfQogCkBAIC02NDMsNjQgKzczMCw3MyBAQCBjb25zdCBjaGFyICppbml0aWFsaXpl
X2ZsYXQoaW50IGNhY2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9
IEVOT0VOVCkgewotCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIs
IGNhY2hlX2ZpbGUpOworCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJs
YXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKChm
cCA9IGZvcGVuKGNhY2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5n
ICclcy8lcycgZmFpbGVkIiwgcG9ydGRpciwgY2FjaGVfZmlsZSk7CisJCXdhcm5mcCgib3Blbmlu
ZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJ
Z290byByZXQ7CiAJfQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAKLQlpZiAoKGEg
PSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDAp
Ci0JCWdvdG8gcmV0OwotCi0JZm9yIChpID0gMCA7IGkgPCBhOyBpKyspIHsKLQkJc3RhdChjYXRl
Z29yeVtpXS0+ZF9uYW1lLCAmc3QpOwotCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCQlj
b250aW51ZTsKLQkJaWYgKHN0cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5VTEwp
Ci0JCQlpZiAoKHN0cm5jbXAoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgInZpcnR1YWwiLCA3KSkgIT0g
MCkKKwlkbyB7CisJCWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gfHwgY2hkaXIo
Y3VyX292ZXJsYXktPnBhdGgpID09IDApIHsKKwkJCWlmICgoYSA9IHNjYW5kaXIoIi4iLCAmY2F0
ZWdvcnksIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKIAkJCQljb250aW51ZTsKIAot
CQlpZiAoKGIgPSBzY2FuZGlyKGNhdGVnb3J5W2ldLT5kX25hbWUsICZwbiwgZmlsdGVyX2hpZGRl
biwgYWxwaGFzb3J0KSkgPCAwKQotCQkJY29udGludWU7Ci0JCWZvciAoYyA9IDA7IGMgPCBiOyBj
KyspIHsKLQkJCWNoYXIgZGVbX1FfUEFUSF9NQVhdOworCQkJZm9yIChpID0gMCA7IGkgPCBhOyBp
KyspIHsKKwkJCQlzdGF0KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7CisJCQkJaWYgKCFTX0lT
RElSKHN0LnN0X21vZGUpKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoc3RyY2hyKGNhdGVnb3J5
W2ldLT5kX25hbWUsICctJykgPT0gTlVMTCkKKwkJCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ld
LT5kX25hbWUsICJ2aXJ0dWFsIiwgNykpICE9IDApCisJCQkJCQljb250aW51ZTsKIAotCQkJc25w
cmludGYoZGUsIHNpemVvZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2Nd
LT5kX25hbWUpOworCQkJCWlmICgoYiA9IHNjYW5kaXIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnBu
LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZv
ciAoYyA9IDA7IGMgPCBiOyBjKyspIHsKKwkJCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJ
CWlmIChzdGF0KGRlLCAmc3QpIDwgMCkKLQkJCQljb250aW51ZTsKKwkJCQkJc25wcmludGYoZGUs
IHNpemVvZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUp
OwogCi0JCQlzd2l0Y2ggKGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJVSUxEOgotCQkJ
CWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0J
CQljYXNlIENBQ0hFX01FVEFEQVRBOgotCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJ
CQlmcHJpbnRmKGZwLCAiJXNcbiIsIGRlKTsKLQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJ
CX0KLQkJCWlmICgoZSA9IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0
KSkgPCAwKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yIChkID0gMCA7IGQgPCBlOyBkKyspIHsKLQkJ
CQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykpICE9IE5VTEwpCi0JCQkJCWlm
IChzdHJjbXAocCwgIi5lYnVpbGQiKSA9PSAwKSB7Ci0JCQkJCQljb3VudCsrOwotCQkJCQkJZnBy
aW50ZihmcCwgIiVzLyVzLyVzXG4iLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1l
LCBlYltkXS0+ZF9uYW1lKTsKKwkJCQkJaWYgKHN0YXQoZGUsICZzdCkgPCAwKQorCQkJCQkJY29u
dGludWU7CisKKwkJCQkJc3dpdGNoIChjYWNoZV90eXBlKSB7CisJCQkJCWNhc2UgQ0FDSEVfRUJV
SUxEOgorCQkJCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJCQkJCWNvbnRpbnVlOwor
CQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQ0FDSEVfTUVUQURBVEE6CisJCQkJCQlpZiAoU19JU1JF
RyhzdC5zdF9tb2RlKSkKKwkJCQkJCQlmcHJpbnRmKGZwLCAiJXNcbiIsIGRlKTsKKwkJCQkJCWNv
bnRpbnVlOworCQkJCQkJYnJlYWs7CiAJCQkJCX0KKwkJCQkJaWYgKChlID0gc2NhbmRpcihkZSwg
JmViLCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCQljb250aW51ZTsKKwkJ
CQkJZm9yIChkID0gMCA7IGQgPCBlOyBkKyspIHsKKwkJCQkJCWlmICgocCA9IHN0cnJjaHIoZWJb
ZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKKwkJCQkJCQlpZiAoc3RyY21wKHAsICIuZWJ1aWxk
IikgPT0gMCkgeworCQkJCQkJCQljb3VudCsrOworCQkJCQkJCQlmcHJpbnRmKGZwLCAiJXM6OiVz
LyVzLyVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10t
PmRfbmFtZSwgZWJbZF0tPmRfbmFtZSk7CisJCQkJCQkJfQorCQkJCQl9CisJCQkJCXdoaWxlKGQt
LSkKKwkJCQkJCWZyZWUoZWJbZF0pOworCQkJCQlmcmVlKGViKTsKKwkJCQl9CisJCQkJd2hpbGUo
Yi0tKQorCQkJCQlmcmVlKHBuW2JdKTsKKwkJCQlmcmVlKHBuKTsKIAkJCX0KLQkJCXdoaWxlKGQt
LSkgZnJlZShlYltkXSk7Ci0JCQlmcmVlKGViKTsKLQkJfQotCQl3aGlsZShiLS0pIGZyZWUocG5b
Yl0pOwotCQlmcmVlKHBuKTsKLQl9CisJCX0gZWxzZQorCQkJd2FybnAoImNoZGlyIHRvIFBPUlRE
SVIgJyVzJyBmYWlsZWQsIHNraXBwaW5nIHRoZSAlcyByZXBvc2l0b3J5IiwgY3VyX292ZXJsYXkt
PnBhdGgsIGN1cl9vdmVybGF5LT5uYW1lKTsKKworCX0gd2hpbGUgKCAoY3VyX292ZXJsYXkgPSBj
dXJfb3ZlcmxheS0+bmV4dCkpOworCiAJZmNsb3NlKGZwKTsKIAl3aGlsZShhLS0pIGZyZWUoY2F0
ZWdvcnlbYV0pOwogCWZyZWUoY2F0ZWdvcnkpOwpAQCAtNzIwLDcgKzgxNiw3IEBAIGNvbnN0IGNo
YXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAogCXdhcm4oIkZpbmlzaGVkICV1IGVu
dHJpZXMgaW4gJWQuJTA2ZCBzZWNvbmRzIiwgY291bnQsIHNlY3MsIGZyYWMpOwogCWlmIChzZWNz
ID4gMTAwKQotCQl3YXJuKCJZb3Ugc2hvdWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVt
IHN1Y2ggYXMgcmVpc2VyZnMgZm9yIFBPUlRESVI9JyVzJyIsIHBvcnRkaXIpOworCQl3YXJuKCJZ
b3Ugc2hvdWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVtIHN1Y2ggYXMgcmVpc2VyZnMg
Zm9yIFBPUlRESVI9JyVzJyIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIHJldDoKIAlyZXR1cm4g
Y2FjaGVfZmlsZTsKIH0KQEAgLTcyOSw4ICs4MjUsOCBAQCByZXQ6CiAKIHZvaWQgcmVpbml0aWFs
aXplX2VidWlsZF9mbGF0KHZvaWQpCiB7Ci0JaWYgKChjaGRpcihwb3J0ZGlyKSkgIT0gMCkgewot
CQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmICgo
Y2hkaXIob3ZlcmxheV9nZW50b28tPnBhdGgpKSAhPSAwKSB7CisJCXdhcm5wKCJjaGRpciB0byBQ
T1JURElSICclcycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCQlyZXR1cm47CiAJ
fQogCXVubGluayhDQUNIRV9FQlVJTERfRklMRSk7CkBAIC0xMDAyLDkgKzEwOTgsMTkgQEAgZnVj
a2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUgb3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9v
dmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9pZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlf
dCAqb3ZlcmxheSkKK3sKKwlpZiAoIG92ZXJsYXktPm5leHQgKQorCQlmcmVlX292ZXJsYXlzKG92
ZXJsYXktPm5leHQpOworCWZyZWUob3ZlcmxheSk7Cit9CisKIHZvaWQgY2xlYW51cCgpIHsKIAly
ZWluaXRpYWxpemVfYXNfbmVlZGVkKCk7CiAJZnJlZV9zZXRzKHZpcnR1YWxzKTsKKwlmcmVlX292
ZXJsYXlzKG92ZXJsYXlfZ2VudG9vKTsKIAlmY2xvc2Uoc3RkZXJyKTsKIH0KIApkaWZmIC1OYXJ1
cCBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L3EuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9x
LmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcvcS5jCTIwMDYtMTEtMDggMDQ6MDM6MzYuMDAw
MDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9xLmMJMjAwNi0xMS0w
OSAxOToyMDo1MC4zMTQxOTExNzUgKzAxMDAKQEAgLTcsMTUgKzcsMTcgQEAKICAqIENvcHlyaWdo
dCAyMDA1LTIwMDYgTWlrZSBGcnlzaW5nZXIgIC0gPHZhcGllckBnZW50b28ub3JnPgogICovCiAK
LSNkZWZpbmUgUV9GTEFHUyAiaXJtIiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUV9GTEFHUyAiaWxy
bSIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxX2xvbmdfb3B0c1td
ID0gewogCXsiaW5zdGFsbCIsICAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdpJ30sCisJeyJscy1v
dmVybGF5cyIsICBub19hcmd1bWVudCwgTlVMTCwgJ2wnfSwKIAl7InJlaW5pdGlhbGl6ZSIsIG5v
X2FyZ3VtZW50LCBOVUxMLCAncid9LAogCXsibWV0YWNhY2hlIiwgICAgbm9fYXJndW1lbnQsIE5V
TEwsICdtJ30sCiAJQ09NTU9OX0xPTkdfT1BUUwogfTsKIHN0YXRpYyBjb25zdCBjaGFyICpxX29w
dHNfaGVscFtdID0gewogCSJJbnN0YWxsIHN5bWxpbmtzIGZvciBhcHBsZXRzIiwKKwkiTGlzdCBj
b25maWd1cmVkIG92ZXJsYXlzIiwKIAkiUmVpbml0aWFsaXplIGVidWlsZCBjYWNoZSIsCiAJIlJl
aW5pdGlhbGl6ZSBtZXRhZGF0YSBjYWNoZSIsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtNzAsNiAr
NzIsNyBAQCBpbnQgcV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQgaTsKIAljaGFy
ICpwOwogCUFQUExFVCBmdW5jOworCW92ZXJsYXlfdCAqIGN1cl9vdmVybGF5OwogCiAJaWYgKGFy
Z2MgPT0gMCkKIAkJcmV0dXJuIDE7CkBAIC04OSw2ICs5MiwxNSBAQCBpbnQgcV9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocSkKIAkJY2FzZSAnbSc6
IHJlaW5pdGlhbGl6ZV9tZXRhY2FjaGUgPSAxOyBicmVhazsKIAkJY2FzZSAncic6IHJlaW5pdGlh
bGl6ZSA9IDE7IGJyZWFrOworCQljYXNlICdsJzogeworCQkJcHJpbnRmKCJcbiVzT3ZlcmxheShz
KSA6JXNcblxuIiwgR1JFRU4sIE5PUk0pOworCQkJY3VyX292ZXJsYXk9b3ZlcmxheV9nZW50b287
CisJCQlkbyB7CisJCQkJcHJpbnRmKCIgICBOYW1lIDogJXMlLTIwLjIwcyVzIFx0bG9jYXRpb24g
OiAlcyVzJXNcbiIsIENZQU4sIGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLCBDWUFOLCBjdXJfb3Zl
cmxheS0+cGF0aCwgTk9STSk7CisJCQl9IHdoaWxlICggKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5
LT5uZXh0KSk7CisJCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQkJcmV0dXJuIDA7CisJCQl9CiAJ
CWNhc2UgJ2knOiB7CiAJCQljaGFyIGJ1ZltfUV9QQVRIX01BWF07CiAJCQkvKiBhbHdheXMgYnpl
cm8gYSBidWZmZXIgYmVmb3JlIHVzaW5nIHJlYWRsaW5rKCkgKi8KZGlmZiAtTmFydXAgcG9ydGFn
ZS11dGlscy0yMDA2MTAwNy9xY2FjaGUuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9xY2Fj
aGUuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTAwNy9xY2FjaGUuYwkyMDA2LTExLTA4IDA0OjAz
OjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTAwNy5uZXcvcWNhY2hl
LmMJMjAwNi0xMS0wOSAxOToyNDowNC42NjU2NDUyNjMgKzAxMDAKQEAgLTQ5OCwxMCArNDk4LDEw
IEBAIGludCBxY2FjaGVfdHJhdmVyc2Uodm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAlpbnQgaSwgaiwg
aywgbGVuLCBudW1fY2F0LCBudW1fcGtnLCBudW1fZWJ1aWxkOwogCXN0cnVjdCBkaXJlY3QgKipj
YXRlZ29yaWVzLCAqKnBhY2thZ2VzLCAqKmVidWlsZHM7CiAKLQlsZW4gPSBzaXplb2YoY2hhcikg
KiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKHBvcnRkaXIpICsgMSk7CisJbGVuID0gc2l6
ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihvdmVybGF5X2dlbnRvby0+
cGF0aCkgKyAxKTsKIAljYXRwYXRoID0gKGNoYXIgKikgeG1hbGxvYyhsZW4pOwogCW1lbXNldChj
YXRwYXRoLDAsbGVuKTsKLQlzbnByaW50ZihjYXRwYXRoLGxlbiwiJXMlcyIsUUNBQ0hFX0VEQixw
b3J0ZGlyKTsKKwlzbnByaW50ZihjYXRwYXRoLGxlbiwiJXMlcyIsUUNBQ0hFX0VEQixvdmVybGF5
X2dlbnRvby0+cGF0aCk7CiAKIAlpZiAoLTEgPT0gKG51bV9jYXQgPSBzY2FuZGlyKGNhdHBhdGgs
ICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxlY3QsIGFscGhhc29ydCkpKSB7CiAJCWVycigi
JXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNTEzLDEwICs1MTMsMTAgQEAg
aW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYykocWNhY2hlXwogCiAJLyogdHJhdmVyc2Ug
Y2F0ZWdvcmllcyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY2F0OyBpKyspIHsKLQkJbGVuID0g
c2l6ZW9mKGNoYXIpICogKHN0cmxlbihwb3J0ZGlyKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNh
dGVnb3JpZXNbaV0tPmRfbmFtZSkgKyAxKTsKKwkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxl
bihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVz
W2ldLT5kX25hbWUpICsgMSk7CiAJCXBrZ3BhdGggPSAoY2hhciAqKSB4bWFsbG9jKGxlbik7CiAJ
CW1lbXNldChwa2dwYXRoLCAwLCBsZW4pOwotCQlzbnByaW50Zihwa2dwYXRoLGxlbiwiJXMvJXMi
LHBvcnRkaXIsY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKKwkJc25wcmludGYocGtncGF0aCxsZW4s
IiVzLyVzIixvdmVybGF5X2dlbnRvby0+cGF0aCxjYXRlZ29yaWVzW2ldLT5kX25hbWUpOwogCiAJ
CWlmICgtMSA9PSAobnVtX3BrZyA9IHNjYW5kaXIocGtncGF0aCwgJnBhY2thZ2VzLCBxY2FjaGVf
ZmlsZV9zZWxlY3QsIGFscGhhc29ydCkpKSB7CiAJCQl3YXJuKCIlcyAlcyIsIGNhdHBhdGgsIHN0
cmVycm9yKGVycm5vKSk7CkBAIC01MzgsMTAgKzUzOCwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNl
KHZvaWQgKCpmdW5jKShxY2FjaGVfCiAKIAkJLyogdHJhdmVyc2UgcGFja2FnZXMgKi8KIAkJZm9y
IChqID0gMDsgaiA8IG51bV9wa2c7IGorKykgewotCQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0
cmxlbihwb3J0ZGlyKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFt
ZSkgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihwYWNrYWdlc1tqXS0+ZF9uYW1lKSArIDEpOworCQkJ
bGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJs
ZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBz
dHJsZW4ocGFja2FnZXNbal0tPmRfbmFtZSkgKyAxKTsKIAkJCWVidWlsZHBhdGggPSAoY2hhciAq
KSB4bWFsbG9jKGxlbik7CiAJCQltZW1zZXQoZWJ1aWxkcGF0aCwgMCwgbGVuKTsKLQkJCXNucHJp
bnRmKGVidWlsZHBhdGgsbGVuLCIlcy8lcy8lcyIscG9ydGRpcixjYXRlZ29yaWVzW2ldLT5kX25h
bWUscGFja2FnZXNbal0tPmRfbmFtZSk7CisJCQlzbnByaW50ZihlYnVpbGRwYXRoLGxlbiwiJXMv
JXMvJXMiLG92ZXJsYXlfZ2VudG9vLT5wYXRoLGNhdGVnb3JpZXNbaV0tPmRfbmFtZSxwYWNrYWdl
c1tqXS0+ZF9uYW1lKTsKIAogCQkJaWYgKC0xID09IChudW1fZWJ1aWxkID0gc2NhbmRpcihlYnVp
bGRwYXRoLCAmZWJ1aWxkcywgcWNhY2hlX2VidWlsZF9zZWxlY3QsIHFjYWNoZV92ZXJjbXApKSkg
ewogCQkJCXdhcm4oIiVzICVzIiwgZWJ1aWxkcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTc1
NCwxMCArNzU0LDEwIEBAIHZvaWQgcWNhY2hlX3N0YXRzKHFjYWNoZV9kYXRhICpkYXRhKSB7CiAJ
CWZvciAoaSA9IDA7IGFyY2hsaXN0W2ldOyBpKyspCiAJCQlhcmNoaXRlY3R1cmVzKys7CiAKLQkJ
bGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihwb3J0ZGly
KSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3Ry
bGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIDEpOwogCQljYXRwYXRoID0gKGNoYXIgKikgeG1h
bGxvYyhsZW4pOwogCQltZW1zZXQoY2F0cGF0aCwwLGxlbik7Ci0JCXNucHJpbnRmKGNhdHBhdGgs
bGVuLCIlcyVzIixRQ0FDSEVfRURCLHBvcnRkaXIpOworCQlzbnByaW50ZihjYXRwYXRoLGxlbiwi
JXMlcyIsUUNBQ0hFX0VEQixvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAKIAkJaWYgKC0xID09IChu
dW1jYXQgPSBzY2FuZGlyKGNhdHBhdGgsICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxlY3Qs
IGFscGhhc29ydCkpKSB7CiAJCQllcnIoIiVzICVzIiwgY2F0cGF0aCwgc3RyZXJyb3IoZXJybm8p
KTsKQEAgLTkxNCwxMSArOTE0LDExIEBAIGludCBxY2FjaGVfaW5pdCgpIHsKIAljaGFyICpmaWxl
bmFtZTsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCi0JbGVuICAgICAgPSBzaXplb2YoY2hhcikgKiAo
c3RybGVuKHBvcnRkaXIpICsgc3RybGVuKCIvcHJvZmlsZXMvYXJjaC5saXN0IikgKyAxKTsKKwls
ZW4gICAgICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsg
c3RybGVuKCIvcHJvZmlsZXMvYXJjaC5saXN0IikgKyAxKTsKIAlmaWxlbmFtZSA9IChjaGFyICop
IHhtYWxsb2MobGVuKTsKIAogCW1lbXNldChmaWxlbmFtZSwwLGxlbik7Ci0Jc25wcmludGYoZmls
ZW5hbWUsbGVuLCIlcy9wcm9maWxlcy9hcmNoLmxpc3QiLHBvcnRkaXIpOworCXNucHJpbnRmKGZp
bGVuYW1lLGxlbiwiJXMvcHJvZmlsZXMvYXJjaC5saXN0IixvdmVybGF5X2dlbnRvby0+cGF0aCk7
CiAKIAlpZiAoTlVMTCA9PSAoYXJjaGxpc3QgPSBxY2FjaGVfcmVhZF9saW5lcyhmaWxlbmFtZSkp
KSB7CiAJCWZyZWUoZmlsZW5hbWUpOwpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3
L3FncmVwLmMgcG9ydGFnZS11dGlscy0yMDA2MTAwNy5uZXcvcWdyZXAuYwotLS0gcG9ydGFnZS11
dGlscy0yMDA2MTAwNy9xZ3JlcC5jCTIwMDYtMTEtMDggMDQ6MDM6MzYuMDAwMDAwMDAwICswMTAw
CisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9xZ3JlcC5jCTIwMDYtMTEtMDkgMTk6MjA6
NTAuMzU0MTg1MDk0ICswMTAwCkBAIC0xMCwxMSArMTAsMTIgQEAKIAogI2lmZGVmIEFQUExFVF9x
Z3JlcAogCi0jZGVmaW5lIFFHUkVQX0ZMQUdTICJJaUhjZSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5l
IFFHUkVQX0ZMQUdTICJJaUhvOmNlIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9u
IGNvbnN0IHFncmVwX2xvbmdfb3B0c1tdID0gewogCXsiaW52ZXJ0LW1hdGNoIiwgIG5vX2FyZ3Vt
ZW50LCBOVUxMLCAnSSd9LAogCXsiaWdub3JlLWNhc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAn
aSd9LAogCXsid2l0aC1maWxlbmFtZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnSCd9LAorCXsib3Zl
cmxheSIsICAgICAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsiY291bnQiLCAgICAgICAg
IG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAogCXsicmVnZXhwIiwgICAgICAgIG5vX2FyZ3VtZW50
LCBOVUxMLCAnZSd9LAogCUNPTU1PTl9MT05HX09QVFMKQEAgLTIzLDYgKzI0LDcgQEAgc3RhdGlj
IGNvbnN0IGNoYXIgKnFncmVwX29wdHNfaGVscFtdID0gewogCSJTZWxlY3Qgbm9uLW1hdGNoaW5n
IGxpbmVzIiwKIAkiSWdub3JlIGNhc2UgZGlzdGluY3Rpb25zIiwKIAkiUHJpbnQgdGhlIGZpbGVu
YW1lIGZvciBlYWNoIG1hdGNoIiwKKwkiT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheSIs
CiAJIk9ubHkgcHJpbnQgYSBjb3VudCBvZiBtYXRjaGluZyBsaW5lcyBwZXIgRklMRSIsCiAJIlVz
ZSBQQVRURVJOIGFzIGEgcmVndWxhciBleHByZXNzaW9uIiwKIAlDT01NT05fT1BUU19IRUxQCkBA
IC0zNCw3ICszNiw5IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsK
IAlpbnQgaTsKIAlpbnQgY291bnQgPSAwOwotCWNoYXIgKnA7CisJc2hvcnQgbXllcnJvciA9IDAs
IHJlcG8gPSAwOworCWNoYXIgb3ZlcmxheV9uYW1lWzY0XSwgcmVwb19zZWFyY2hbNjRdOworCWNo
YXIgKnAsICpzdHI7CiAJY2hhciBkb19jb3VudCwgZG9fcmVnZXg7CiAJY2hhciBzaG93X2ZpbGVu
YW1lOwogCUZJTEUgKmZwOwpAQCAtNDIsMTAgKzQ2LDE1IEBAIGludCBxZ3JlcF9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAljaGFyIGJ1ZjBbQlVGU0laXTsKIAlpbnQgcmVmbGFncyA9IFJF
R19OT1NVQjsKIAljaGFyIGludmVydF9tYXRjaCA9IDA7CisJb3ZlcmxheV90ICpjdXJfb3Zlcmxh
eSwgKm92ZXJsYXlfdG1wOwogCiAJdHlwZWRlZiBjaGFyICooKkZVTkMpIChjaGFyICosIGNoYXIg
Kik7CiAJRlVOQyBzdHJmdW5jID0gKEZVTkMpIHN0cnN0cjsKIAorCWN1cl9vdmVybGF5ID0gb3Zl
cmxheV9nZW50b287CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7
CisKIAlEQkcoImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJn
dlswXSwgYXJnYyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CiAKQEAgLTU4LDkgKzY3LDEzIEBA
IGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCXN0cmZ1bmMgPSAoRlVO
Qykgc3RyY2FzZXN0cjsKIAkJCXJlZmxhZ3MgfD0gUkVHX0lDQVNFOwogCQkJYnJlYWs7CisJCWNh
c2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0gMTsgYnJlYWs7CisJCWNhc2UgJ28nOiAKKwkJCXJlcG8g
PSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gp
KTsKKwkJCWJyZWFrOwogCQljYXNlICdjJzogZG9fY291bnQgPSAxOyBicmVhazsKIAkJY2FzZSAn
ZSc6IGRvX3JlZ2V4ID0gMTsgYnJlYWs7Ci0JCWNhc2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0gMTsg
YnJlYWs7CiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHFncmVwKQogCQl9CiAJfQpAQCAtNzMsNiAr
ODYsMzggQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlyZXR1cm4g
MTsKIAl3aGlsZSAoKGZnZXRzKGVidWlsZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkgIT0gTlVMTCkg
ewogCQlGSUxFICpuZXdmcDsKKwkJaWYgKCAoIHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJ
eworCQkJKnAgPSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJ
CQlwID0gZWJ1aWxkOworCQkJaWYgKCByZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIHAsIHNp
emVvZiggcmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICggc3RyY21wKG92ZXJs
YXlfbmFtZSwgcCkpCisJCQl7CisJCQkJZm9yICggb3ZlcmxheV90bXA9b3ZlcmxheV9nZW50b28g
OyBvdmVybGF5X3RtcC0+bmV4dCA7IG92ZXJsYXlfdG1wPW92ZXJsYXlfdG1wLT5uZXh0ICkKKwkJ
CQl7CisJCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXplb2Yob3Zl
cmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoICEgc3RybmNt
cChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJ
eworCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292
ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycg
ZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJ
CQkJfSBlbHNlIAorCQkJCQlteWVycm9yPTE7CisJCQkJaWYgKCBteWVycm9yKSB7CisJCQkJCW15
ZXJyb3I9MDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1l
LCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJfQorCQkJc3Ry
Y3B5KGVidWlsZCwgc3RyKSA7CisJCX0KKwogCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4n
KSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJaWYgKChuZXdmcCA9IGZvcGVuKGVidWlsZCwgInIi
KSkgIT0gTlVMTCkgewpAQCAtMTAyLDcgKzE0Nyw3IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKIAkJCQljb3VudCsrOwogCQkJCWlmIChkb19jb3VudCkgY29udGludWU7
CiAJCQkJaWYgKHZlcmJvc2UgfHwgc2hvd19maWxlbmFtZSkgewotCQkJCQlwcmludGYoIiVzOiIs
IGVidWlsZCk7IAorCQkJCQlwcmludGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1
aWxkKTsgCiAJCQkJCWlmICh2ZXJib3NlID4gMSkgcHJpbnRmKCIlZDoiLCBsaW5lbm8pOwogCQkJ
CQlwcmludGYoIiAiKTsKIAkJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcv
cXNlYXJjaC5jIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcubmV3L3FzZWFyY2guYwotLS0gcG9ydGFn
ZS11dGlscy0yMDA2MTAwNy9xc2VhcmNoLmMJMjAwNi0xMS0wOCAwNDowMzozNi4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcubmV3L3FzZWFyY2guYwkyMDA2LTExLTA5
IDE5OjIwOjUwLjM5NjE3ODcxMSArMDEwMApAQCAtOSwxMCArOSwxMiBAQAogCiAjaWZkZWYgQVBQ
TEVUX3FzZWFyY2gKIAotI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY3NTTkgiIENPTU1PTl9GTEFH
UworI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY286cHNTTkgiIENPTU1PTl9GTEFHUwogc3RhdGlj
IHN0cnVjdCBvcHRpb24gY29uc3QgcXNlYXJjaF9sb25nX29wdHNbXSA9IHsKIAl7ImFsbCIsICAg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAogCXsiY2FjaGUiLCAgICAgbm9fYXJndW1lbnQs
IE5VTEwsICdjJ30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwKKwl7
InNob3ctcGF0aCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAogCXsic2VhcmNoIiwgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdzJ30sCiAJeyJkZXNjIiwgICAgICAgYV9hcmd1bWVudCwgTlVMTCwg
J1MnfSwKIAl7Im5hbWUtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LApAQCAtMjIsNiAr
MjQsOCBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfCiBzdGF0aWMg
Y29uc3QgY2hhciAqcXNlYXJjaF9vcHRzX2hlbHBbXSA9IHsKIAkiTGlzdCB0aGUgZGVzY3JpcHRp
b25zIG9mIGV2ZXJ5IHBhY2thZ2UgaW4gdGhlIGNhY2hlIiwKIAkiVXNlIHRoZSBwb3J0YWdlIGNh
Y2hlIiwKKwkiU2VhcmNoIG9ubHkgaW4gdGhlIDxhcmc+IG92ZXJsYXkiLAorCSJTaG93IHRoZSBw
YXRoIHRvIHRoZSBlYnVpbGQiLAogCSJSZWdleCBzZWFyY2ggcGFja2FnZSBiYXNlbmFtZXMiLAog
CSJSZWdleCBzZWFyY2ggcGFja2FnZSBkZXNjcmlwdGlvbnMiLAogCSJPbmx5IHNob3cgcGFja2Fn
ZSBuYW1lIiwKQEAgLTQwLDEzICs0NCwyMCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIAljaGFyIGxhc3RbMTI2XSA9ICIiOwogCWNoYXIgZHBbMTI2XSA9ICIiOwog
CWNoYXIgYnBbMTI2XSA9ICIiOwotCWNoYXIgKnAsICpxLCAqc3RyOworCXNob3J0IHJlcG8gPSAw
OworCWNoYXIgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgKnAsICpxLCAqc3RyLCBvdmVybGF5X25h
bWVbNjRdOwogCWNoYXIgKnNlYXJjaF9tZSA9IE5VTEw7Ci0JY2hhciBzaG93X2hvbWVwYWdlID0g
MCwgc2hvd19uYW1lX29ubHkgPSAwOworCWNoYXIgc2hvd19ob21lcGFnZSA9IDAsIHNob3dfbmFt
ZV9vbmx5ID0gMCwgc2hvd19wYXRoX3RvX2VidWlsZCA9IDA7CiAJY2hhciBzZWFyY2hfZGVzYyA9
IDAsIHNlYXJjaF9hbGwgPSAwLCBzZWFyY2hfbmFtZSA9IDEsIHNlYXJjaF9jYWNoZSA9IENBQ0hF
X0VCVUlMRDsKIAljb25zdCBjaGFyICpzZWFyY2hfdmFyc1tdID0geyAiREVTQ1JJUFRJT049Iiwg
IkhPTUVQQUdFPSIgfTsKIAlzaXplX3Qgc2VhcmNoX2xlbjsKLQlpbnQgaSwgaWR4PTA7CisJb3Zl
cmxheV90ICpjdXJfb3ZlcmxheSwgKm92ZXJsYXlfdG1wOworCWludCBpLCBpZHg9MCwgbXllcnJv
cj0wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKwlvdmVybGF5X25hbWVbMF0g
PSAwIDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAKIAlEQkcoImFyZ2M9JWQgYXJndlswXT0lcyBh
cmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBhcmd2WzFdIDogIk5V
TEw/Iik7CkBAIC01Niw2ICs2Nyw4IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxc2VhcmNoKQogCQljYXNlICdhJzogc2Vh
cmNoX2FsbCA9IDE7IGJyZWFrOwogCQljYXNlICdjJzogc2VhcmNoX2NhY2hlID0gQ0FDSEVfTUVU
QURBVEE7IGJyZWFrOworCQljYXNlICdvJzogcmVwbyA9IDE7IHN0cm5jcHkocmVwb19zZWFyY2gs
IG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7IGJyZWFrOworCQljYXNlICdwJzogc2hvd19w
YXRoX3RvX2VidWlsZCA9IDE7IGJyZWFrOwogCQljYXNlICdzJzogc2VhcmNoX2Rlc2MgPSAwOyBz
ZWFyY2hfbmFtZSA9IDE7IGJyZWFrOwogCQljYXNlICdTJzogc2VhcmNoX2Rlc2MgPSAxOyBzZWFy
Y2hfbmFtZSA9IDA7IGJyZWFrOwogCQljYXNlICdOJzogc2hvd19uYW1lX29ubHkgPSAxOyBicmVh
azsKQEAgLTkzLDExICsxMDYsMjIgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAq
KmFyZ3YpCiAJCQlpZiAoKHBjYWNoZSA9IGNhY2hlX3JlYWRfZmlsZShlYnVpbGQpKSAhPSBOVUxM
KSB7CiAJCQkJaWYgKChzdHJjbXAocGNhY2hlLT5hdG9tLT5QTiwgbGFzdCkpICE9IDApIHsKIAkJ
CQkJc3RybmNweShsYXN0LCBwY2FjaGUtPmF0b20tPlBOLCBzaXplb2YobGFzdCkpOwotCQkJCQlp
ZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBUSU9O
IDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgPT0gMCkKLQkJCQkJCXByaW50
ZigiJXMlcy8lcyVzJXMgJXNcbiIsIEJPTEQsIHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksIEJMVUUs
Ci0JCQkJCQkgICAgICAgcGNhY2hlLT5hdG9tLT5QTiwgTk9STSwKLQkJCQkJCSAgICAgICAoc2hv
d19uYW1lX29ubHkgPyAiIiA6Ci0JCQkJCQkgICAgICAgIChzaG93X2hvbWVwYWdlID8gcGNhY2hl
LT5IT01FUEFHRSA6IHBjYWNoZS0+REVTQ1JJUFRJT04pKSk7CisJCQkJCWlmICgocmVtYXRjaChz
ZWFyY2hfbWUsIChzZWFyY2hfZGVzYyA/IHBjYWNoZS0+REVTQ1JJUFRJT04gOiBlYnVpbGQpLCBS
RUdfRVhURU5ERUQgfCBSRUdfSUNBU0UpKSA9PSAwKSB7CisJCQkJCQlpZiAoIHNob3dfcGF0aF90
b19lYnVpbGQpIHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMvJXMvXG4i
LAkKKwkJCQkJCQlCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLAorCQkJCQkJCUJMVUUsIHBj
YWNoZS0+YXRvbS0+UE4sCisJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAor
CQkJCQkJCWN1cl9vdmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJfSBlbHNl
IHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJCUJPTEQs
IHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxVRSwgcGNhY2hlLT5hdG9tLT5QTiwK
KwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJKHNob3dfbmFt
ZV9vbmx5ID8gIiIgOiAKKwkJCQkJCQkoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBBR0Ug
OiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQkJfQorCQkJCQl9CiAJCQkJfQogCQkJCWNh
Y2hlX2ZyZWUocGNhY2hlKTsKIAkJCX0gZWxzZSB7CkBAIC0xMTAsNiArMTM0LDQwIEBAIGludCBx
c2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCWNhc2UgQ0FDSEVfRUJVSUxE
OiB7CiAJCQlGSUxFICplYnVpbGRmcDsKKwkJCWlmICggKCBwID0gc3RyY2hyKGVidWlsZCwgJzon
KSkpCisJCQl7CisJCQkJKnAgPSAwOworCQkJCXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMg
Jzo6JyAqLworCQkJCXAgPSBlYnVpbGQ7CisJCQkJaWYgKCByZXBvICYmIHN0cm5jbXAoIHJlcG9f
c2VhcmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYg
KCBzdHJjbXAob3ZlcmxheV9uYW1lLCBwKSkKKwkJCQl7CisJCQkJCWZvciAoIG92ZXJsYXlfdG1w
PW92ZXJsYXlfZ2VudG9vIDsgb3ZlcmxheV90bXAtPm5leHQgOyBvdmVybGF5X3RtcD1vdmVybGF5
X3RtcC0+bmV4dCApCisJCQkJCXsKKwkJCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1wLT5u
YW1lLCBwLCBzaXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCQlicmVhazsKKwkJCQkJ
fQorCQkJCQlpZiAoICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJs
YXlfdG1wLT5uYW1lKSkpCisJCQkJCXsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7
CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3YXJu
cCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJ
CQkJCQlteWVycm9yPTE7CisJCQkJCQl9CisJCQkJCX0gZWxzZSAKKwkJCQkJCW15ZXJyb3I9MTsK
KwkJCQkJaWYgKCBteWVycm9yKSB7CisJCQkJCQlpZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQkJCQl3
YXJuZnAoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMiLCBlYnVpbGQpOworCQkJCQkJcmVpbml0
aWFsaXplID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXN0cm5jcHkob3ZlcmxheV9u
YW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJCX0KKwkJ
CQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQl9CisK
IAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBkaXJuYW1lKHN0cik7
CiAKQEAgLTEzNCwxMCArMTkyLDE5IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCQkJCQkJCS8vIGRvaW5nIG9wZXJhdGlvbnMgd2l0aCB0aGVtLgogCQkJCQkJCXN0
cm5jcHkoZHAsIHAsIHNpemVvZihkcCkpOwogCQkJCQkJCXN0cm5jcHkoYnAsIHAsIHNpemVvZihi
cCkpOwotCQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsIAotCQkJCQkJCQlCT0xELCBk
aXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnApLCBOT1JNLAorCQkJCQkJCWlmICggc2hvd19w
YXRoX3RvX2VidWlsZCkgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMv
JXMvXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnApLAor
CQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJCWN1cl9vdmVy
bGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXBy
aW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUoZHAp
LCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3ZlcmxheS0+bmFtZSwg
Tk9STSwKIAkJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiBxKSk7CisJCQkJCQkJfQogCQkJ
CQkJCWJyZWFrOworCiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJZmNsb3NlKGVidWlsZGZwKTsKZGlm
ZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTAwNy9xdXNlLmMgcG9ydGFnZS11dGlscy0yMDA2
MTAwNy5uZXcvcXVzZS5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L3F1c2UuYwkyMDA2LTEx
LTA4IDA0OjAzOjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTAwNy5u
ZXcvcXVzZS5jCTIwMDYtMTEtMDkgMTk6MjA6NTAuNDEzMTc2MTI3ICswMTAwCkBAIC0xNCwxMCAr
MTQsMTEgQEAKICBxdXNlIC1LZSAtLSAgbmxzCiAqLwogCi0jZGVmaW5lIFFVU0VfRkxBR1MgImVh
dktMREY6TiIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFVU0VfRkxBR1MgImVhbzp2S0xERjpOIiBD
T01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHRzW10g
PSB7CiAJeyJleGFjdCIsICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAl7ImFsbCIsICAg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAorCXsib3ZlcmxheSIsICAgIGFfYXJndW1lbnQs
IE5VTEwsICdvJ30sCiAJeyJrZXl3b3JkcyIsICBub19hcmd1bWVudCwgTlVMTCwgJ0snfSwKIAl7
ImxpY2Vuc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnTCd9LAogCXsiZGVzY3JpYmUiLCAgbm9f
YXJndW1lbnQsIE5VTEwsICdEJ30sCkBAIC0yOCw2ICsyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0
aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHQKIHN0YXRpYyBjb25zdCBjaGFyICpxdXNlX29wdHNfaGVs
cFtdID0gewogCSJTaG93IGV4YWN0IG5vbiByZWdleHAgbWF0Y2hpbmcgdXNpbmcgc3RyY21wIiwK
IAkiU2hvdyBhbm5veWluZyB0aGluZ3MgaW4gSVVTRSIsCisJIk9ubHkgY29uc2lkZXIgdGhlIDxh
cmc+IG92ZXJsYXkiLAogCSJVc2UgdGhlIEtFWVdPUkRTIHZzIElVU0UiLAogCSJVc2UgdGhlIExJ
Q0VOU0UgdnMgSVVTRSIsCiAJIkRlc2NyaWJlIHRoZSBVU0UgZmxhZyIsCkBAIC0zOCw3ICs0MCw3
IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxdXNlX29wdHNfaGVscFtdID0gewogc3RhdGljIGNvbnN0
IGNoYXIgcXVzZV9yY3NpZFtdID0gIiRJZDogcXVzZS5jLHYgMS41MiAyMDA2LzA2LzEwIDE0OjAx
OjIxIHZhcGllciBFeHAgJCI7CiAjZGVmaW5lIHF1c2VfdXNhZ2UocmV0KSB1c2FnZShyZXQsIFFV
U0VfRkxBR1MsIHF1c2VfbG9uZ19vcHRzLCBxdXNlX29wdHNfaGVscCwgbG9va3VwX2FwcGxldF9p
ZHgoInF1c2UiKSkKIAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpOworaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBzaG9ydCByZXBv
LCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJndik7CiAKIGNoYXIgcXVz
ZV9uYW1lX29ubHkgPSAwOwogCkBAIC04MCw3ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2hp
Z2hsaWdodGVkX3VzZV9mbGFncygKIAl9CiB9CiAKLWludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50
IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQg
aW5kLCBzaG9ydCByZXBvLCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJn
dikKIHsKICNkZWZpbmUgTlVNX1NFQVJDSF9GSUxFUyBBUlJfU0laRShzZWFyY2hfZmlsZXMpCiAJ
Y2hhciBidWZbQlVGU0laRV0sICpwOwpAQCAtOTAsMTIxICs5MiwxNjIgQEAgaW50IHF1c2VfZGVz
Y3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYwogCUZJTEUgKmZwW05VTV9TRUFSQ0hfRklMRVNd
OwogCURJUiAqZDsKIAlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5
OwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgewotCQlzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvJXMiLCBwb3J0ZGlyLCBzZWFyY2hfZmls
ZXNbaV0pOwotCQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQotCQkJd2Fy
bnAoInNraXBwaW5nICVzIiwgc2VhcmNoX2ZpbGVzW2ldKTsKLQl9CisJY3VyX292ZXJsYXk9b3Zl
cmxheV9nZW50b287CiAKLQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspIHsKLQkJcyA9IHN0
cmxlbihhcmd2W2ldKTsKKwlkbyB7CisJCWlmICggcmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNo
LCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKCByZXBvX3NlYXJjaCkpKQorCQkJY29udGludWU7
CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKKwkJCXNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy8lcyIsIGN1cl9vdmVybGF5LT5wYXRoLCBz
ZWFyY2hfZmlsZXNbaV0pOworCQkJaWYgKChmcFtpXSA9IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVM
TCkKKwkJCQlpZiAoIHZlcmJvc2UgKQorCQkJCQl3YXJucCgic2tpcHBpbmcgJXMgZm9yIHRoZSAl
cyBvdmVybGF5Iiwgc2VhcmNoX2ZpbGVzW2ldLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCX0KIAot
CQlmb3IgKGYgPSAwOyBmIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7Ci0JCQlpZiAoZnBbZl0g
PT0gTlVMTCkKLQkJCQljb250aW51ZTsKKwkJZm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7
CisJCQlzID0gc3RybGVuKGFyZ3ZbaV0pOwogCi0JCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2Yo
YnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKLQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0g
PT0gJ1xuJykKKwkJCWZvciAoZiA9IDA7IGYgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIHsKKwkJ
CQlpZiAoZnBbZl0gPT0gTlVMTCkKIAkJCQkJY29udGludWU7CiAKLQkJCQlpZiAoKHAgPSBzdHJy
Y2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJCSpwID0gJ1wwJzsKKwkJCQl3aGlsZSAoZmdl
dHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKKwkJCQkJaWYgKGJ1ZlswXSA9
PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCQljb250aW51ZTsKIAotCQkJCXN3aXRjaCAo
ZikgewotCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1c2UuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJu
Y21wKGJ1ZiwgYXJndltpXSwgcykpCi0JCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3Mr
MV0gPT0gJy0nKSB7Ci0JCQkJCQkJCXByaW50ZigiICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwg
Qk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7Ci0JCQkJCQkJCWdvdG8g
c2tpcF9maWxlOwotCQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQlpZiAoKHAgPSBzdHJyY2hy
KGJ1ZiwgJ1xuJykpICE9IE5VTEwpCisJCQkJCQkqcCA9ICdcMCc7CiAKLQkJCQkJY2FzZSAxOiAv
KiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLwotCQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzon
KSkgPT0gTlVMTCkKKwkJCQkJc3dpdGNoIChmKSB7CisJCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1
c2UuZGVzYyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJCQkJ
CQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlmICgg
Y3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCQkJCXByaW50ZigiICVzZ2xv
YmFsJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVm
K3MrMyk7CisJCQkJCQkJCQllbHNlIAorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNnbG9iYWwl
czolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJ
fQogCQkJCQkJCWJyZWFrOwotCQkJCQkJKytwOwotCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFyZ3Zb
aV0sIHMpKSB7Ci0JCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysxXSA9PSAnLScpIHsKLQkJ
CQkJCQkJKnAgPSAnXDAnOwotCQkJCQkJCQlwcmludGYoIiAlc2xvY2FsJXM6JXMlcyVzOiVzJXMl
cyAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JN
LCBwK3MrMyk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJYnJlYWs7CiAKLQkJCQkJY2FzZSAy
OiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLwotCQkJCQkJaWYgKCFzdHJjbXAoYnVmLCBh
cmd2W2ldKSkgewotCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMlczogJXMgYXJjaGl0ZWN0
dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBhcmd2W2ldKTsKLQkJCQkJ
CQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAxOiAv
KiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLworCQkJCQkJCWlmICgocCA9IHN0cmNocihidWYsICc6
JykpID09IE5VTEwpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCSsrcDsKKwkJCQkJCQlpZiAoIXN0
cm5jbXAocCwgYXJndltpXSwgcykpIHsKKwkJCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysx
XSA9PSAnLScpIHsKKwkJCQkJCQkJCSpwID0gJ1wwJzsKKwkJCQkJCQkJCWlmICggY3VyX292ZXJs
YXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCQkJCXByaW50ZigiICVzbG9jYWwlczolcyVz
JXM6JXMlcyVzICVzXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBCT0xELCBi
dWYsIE5PUk0sIHArcyszKTsKKwkJCQkJCQkJCWVsc2UgCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVz
KSAlc2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQs
IE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJ
CQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOwogCi0JCQkJCWNhc2UgMzogLyogTGFuZ3Vh
Z2VzIGxhbmcuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCi0J
CQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCXBy
aW50ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBh
cmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBh
cmNoLmxpc3QgKi8KKwkJCQkJCQlpZiAoIXN0cmNtcChidWYsIGFyZ3ZbaV0pKSB7CisJCQkJCQkJ
CWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCQkJcHJpbnRmKCIg
JXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1cmVcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOworCQkJCQkJCQllbHNlIAorCQkJCQkJCQkJcHJpbnRmKCIg
KCVzKSAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgY3VyX292ZXJsYXktPm5h
bWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwogCQkJCQkJCQln
b3RvIHNraXBfZmlsZTsKIAkJCQkJCQl9Ci0JCQkJCQlicmVhazsKKwkJCQkJCQlicmVhazsKKwor
CQkJCQkJY2FzZSAzOiAvKiBMYW5ndWFnZXMgbGFuZy5kZXNjICovCisJCQkJCQkJaWYgKCFzdHJu
Y21wKGJ1ZiwgYXJndltpXSwgcykpCisJCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1Zltz
KzFdID09ICctJykgeworCQkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRv
byApCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNsYW5nJXM6JXMlcyVzOiAlcyBsaW5ndWFcbiIsIEJP
TEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZWxzZSAK
KwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBj
dXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3Mr
Myk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJfQorCQkJCQkJCWJyZWFrOwor
CQkJCQl9CiAJCQkJfQotCQkJfQogCiBza2lwX2ZpbGU6Ci0JCQlyZXdpbmQoZnBbZl0pOworCQkJ
CXJld2luZChmcFtmXSk7CisJCQl9CisKKwkJCWlmICggaSA9PSAoYXJnYyAtIDEpICkKKwkJCQlm
b3IgKGY9MDsgZjxOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIAorCQkJCQlpZiAoIGZwW2ZdICkgewor
CQkJCQkJZmNsb3NlKGZwW2ZdKTsKKwkJCQkJCWZwW2ZdID0gTlVMTDsKKwkJCQkJfQogCQl9Ci0J
fQogCi0JZm9yIChmPTA7IGY8TlVNX1NFQVJDSF9GSUxFUzsgKytmKQotCQlmY2xvc2UoZnBbZl0p
OworCX0gd2hpbGUgKCAoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAogCS8qIG5v
dyBzY2FuIHRoZSBkZXNjIGRpciAqLwotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9w
cm9maWxlcy9kZXNjLyIsIHBvcnRkaXIpOwotCWQgPSBvcGVuZGlyKGJ1Zik7Ci0Jd2hpbGUgKChk
ZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKLQkJaWYgKHN0cmNtcChkZS0+ZF9uYW1lK3N0cmxl
bihkZS0+ZF9uYW1lKS01LCAiLmRlc2MiKSkKKwljdXJfb3ZlcmxheT1vdmVybGF5X2dlbnRvbzsK
KwlkbyB7CisJCWlmICggcmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBjdXJfb3ZlcmxheS0+
bmFtZSwgc2l6ZW9mKCByZXBvX3NlYXJjaCkpKQogCQkJY29udGludWU7Ci0KLQkJc25wcmludGYo
YnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvJXMiLCBwb3J0ZGlyLCBkZS0+ZF9u
YW1lKTsKLQkJaWYgKChmcFswXT1mb3BlbihidWYsICJyIikpID09IE5VTEwpIHsKLQkJCXdhcm4o
IkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmc7IHNraXBwaW5nIiwgZGUtPmRfbmFtZSk7
CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNjLyIsIGN1cl9v
dmVybGF5LT5wYXRoKTsKKwkJaWYgKCAhIChkID0gb3BlbmRpcihidWYpKSkgeworCQkJaWYgKCB2
ZXJib3NlICkgCisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJXMgLT4gc2tpcHBpbmciLCBidWYp
OyAKIAkJCWNvbnRpbnVlOwogCQl9CisJCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxM
KSB7CisJCQlpZiAoc3RyY21wKGRlLT5kX25hbWUrc3RybGVuKGRlLT5kX25hbWUpLTUsICIuZGVz
YyIpKQorCQkJCWNvbnRpbnVlOwogCi0JCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBm
cFswXSkgIT0gTlVMTCkgewotCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicp
CisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIGN1
cl9vdmVybGF5LT5wYXRoLCBkZS0+ZF9uYW1lKTsKKwkJCWlmICgoZnBbMF09Zm9wZW4oYnVmLCAi
ciIpKSA9PSBOVUxMKSB7CisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGlu
Zzsgc2tpcHBpbmciLCBkZS0+ZF9uYW1lKTsKIAkJCQljb250aW51ZTsKKwkJCX0KKworCQkJd2hp
bGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7CisJCQkJaWYgKGJ1
ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAo
KHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJKnAgPSAnXDAnOworCQkJCWlm
ICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKKwkJCQkJKnAgPSAnXDAnOwogCi0J
CQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CisJCQkJaWYgKChwID0gc3Ry
Y2hyKGJ1ZiwgJy0nKSkgPT0gTlVMTCkgewogaW52YWxpZF9saW5lOgotCQkJCXdhcm4oIkludmFs
aWQgbGluZSBpbiAnJXMnOiAlcyIsIGRlLT5kX25hbWUsIGJ1Zik7Ci0JCQkJY29udGludWU7Ci0J
CQl9Ci0JCQl3aGlsZSAocFstMV0gIT0gJyAnICYmIHBbMV0gIT0gJyAnKSB7Ci0JCQkJLyogbWF5
YmUgdGhlIGZsYWcgaGFzIGEgJy0nIGluIGl0IC4uLiAqLwotCQkJCWlmICgocCA9IHN0cmNocihw
KzEsICctJykpID09IE5VTEwpCi0JCQkJCWdvdG8gaW52YWxpZF9saW5lOwotCQkJfQotCQkJcFst
MV0gPSAnXDAnOwotCQkJcCArPSAyOworCQkJCQl3YXJuKCJJbnZhbGlkIGxpbmUgaW4gJyVzJzog
JXMiLCBkZS0+ZF9uYW1lLCBidWYpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJd2hpbGUg
KHBbLTFdICE9ICcgJyAmJiBwWzFdICE9ICcgJykgeworCQkJCQkvKiBtYXliZSB0aGUgZmxhZyBo
YXMgYSAnLScgaW4gaXQgLi4uICovCisJCQkJCWlmICgocCA9IHN0cmNocihwKzEsICctJykpID09
IE5VTEwpCisJCQkJCQlnb3RvIGludmFsaWRfbGluZTsKKwkJCQl9CisJCQkJcFstMV0gPSAnXDAn
OworCQkJCXAgKz0gMjsKIAotCQkJZm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKQotCQkJCWlm
ICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpCi0JCQkJCXByaW50ZigiICVzJXMlczolcyVzJXM6ICVz
XG4iLCBCT0xELCBkZS0+ZF9uYW1lLCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKLQkJ
fQotCQljbG9zZShmKTsKLQl9Ci0JY2xvc2VkaXIoZCk7CisJCQkJZm9yIChpID0gaW5kOyBpIDwg
YXJnYzsgaSsrKQorCQkJCQlpZiAoIXN0cmNtcChhcmd2W2ldLCBidWYpKSB7CisJCQkJCQlpZiAo
IGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vICkKKwkJCQkJCQlwcmludGYoIiAlcyVzJXM6
JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9S
TSwgcCk7CisJCQkJCQllbHNlCisJCQkJCQkJcHJpbnRmKCIgKCVzKSAlcyVzJXM6JXMlcyVzOiAl
c1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIHApOworCQkJCQl9CiAKKwkJCX0KKwkJCWZjbG9zZShmcFswXSk7CisJCX0K
KwkJY2xvc2VkaXIoZCk7CisJfSB3aGlsZSAoIChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4
dCkpOwogCXJldHVybiAwOwogfQogCiBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIHsKIAlGSUxFICpmcDsKLQljaGFyICpwOworCWNoYXIgKnAsICpzdHI7CisJc2hvcnQgbXll
cnJvciA9IDAsIHJlcG8gPSAwOworCWNoYXIgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgb3Zlcmxh
eV9uYW1lWzY0XTsKIAogCWNoYXIgYnVmMFtfUV9QQVRIX01BWF07CiAJY2hhciBidWYxW19RX1BB
VEhfTUFYXTsKQEAgLTIxNyw2ICsyNjAsMTEgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJc2hvcnQgcXVzZV9hbGwgPSAwOwogCWludCByZWdleHBfbWF0Y2hpbmcgPSAx
LCBpLCBpZHggPSAwOwogCXNpemVfdCBzZWFyY2hfbGVuOworCW92ZXJsYXlfdCAqY3VyX292ZXJs
YXksICpvdmVybGF5X3RtcDsKKworCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50b287CisJb3Zl
cmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAKIAlEQkcoImFyZ2M9JWQg
YXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBh
cmd2WzFdIDogIk5VTEw/Iik7CkBAIC0yMjUsNiArMjczLDEwIEBAIGludCBxdXNlX21haW4oaW50
IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlzd2l0Y2ggKGkpIHsKIAkJY2FzZSAnZSc6IHJlZ2V4cF9t
YXRjaGluZyA9IDA7IGJyZWFrOwogCQljYXNlICdhJzogcXVzZV9hbGwgPSAxOyBicmVhazsKKwkJ
Y2FzZSAnbyc6IAorCQkJcmVwbyA9IDE7CisJCQlzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcs
IHNpemVvZihyZXBvX3NlYXJjaCkpOworCQkJYnJlYWs7CiAJCWNhc2UgJ0snOiBpZHggPSAxOyBi
cmVhazsKIAkJY2FzZSAnTCc6IGlkeCA9IDI7IGJyZWFrOwogCQljYXNlICdEJzogaWR4ID0gLTE7
IGJyZWFrOwpAQCAtMjMzLDExICsyODUsMTQgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHF1c2UpCiAJCX0KIAl9Ci0JaWYgKGFy
Z2MgPT0gb3B0aW5kICYmICFxdXNlX2FsbCAmJiBpZHggPj0gMCkKKwlpZiAoYXJnYyA9PSBvcHRp
bmQgJiYgIXF1c2VfYWxsICYmIGlkeCA+PSAwKSB7CisJCWlmICggaWR4ID09IDMgKQorCQkJZnJl
ZShzZWFyY2hfdmFycytpZHgpOwogCQlxdXNlX3VzYWdlKEVYSVRfRkFJTFVSRSk7CisJfQogCiAJ
aWYgKGlkeCA9PSAtMSkKLQkJcmV0dXJuIHF1c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIGFyZ2Ms
IGFyZ3YpOworCQlyZXR1cm4gcXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgcmVwbywgcmVwb19z
ZWFyY2gsIGFyZ2MsIGFyZ3YpOwogCiAJaWYgKHF1c2VfYWxsKSBvcHRpbmQgPSBhcmdjOwogCWlu
aXRpYWxpemVfZWJ1aWxkX2ZsYXQoKTsJLyogc2V0cyBvdXIgcHdkIHRvICRQT1JURElSICovCkBA
IC0yNDksNiArMzA0LDQxIEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
CQlyZXR1cm4gMTsKIAl3aGlsZSAoKGZnZXRzKGVidWlsZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkg
IT0gTlVMTCkgewogCQlGSUxFICpuZXdmcDsKKwkJaWYgKCAoIHAgPSBzdHJjaHIoZWJ1aWxkLCAn
OicpKSkKKwkJeworCQkJKnAgPSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAn
OjonICovCisJCQlwID0gZWJ1aWxkOworCQkJaWYgKCByZXBvICYmIHN0cm5jbXAoIHJlcG9fc2Vh
cmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICggc3Ry
Y21wKG92ZXJsYXlfbmFtZSwgcCkpCisJCQl7CisJCQkJZm9yICggb3ZlcmxheV90bXA9b3Zlcmxh
eV9nZW50b28gOyBvdmVybGF5X3RtcC0+bmV4dCA7IG92ZXJsYXlfdG1wPW92ZXJsYXlfdG1wLT5u
ZXh0ICkKKwkJCQl7CisJCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBz
aXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAo
ICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1l
KSkpCisJCQkJeworCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hk
aXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JU
RElSICclcycgZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOwor
CQkJCQl9CisJCQkJfSBlbHNlIAorCQkJCQlteWVycm9yPTE7CisJCQkJaWYgKCBteWVycm9yKSB7
CisJCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQkJd2FybmYoIihjYWNoZSB1cGRhdGUgcGVu
ZGluZykgJXMgOiAlcyIsIGVidWlsZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQkJcmVpbml0aWFs
aXplID0gMTsKKwkJCQkJbXllcnJvcj0wOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJc3Ry
bmNweShvdmVybGF5X25hbWUsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2Yob3ZlcmxheV9uYW1l
KSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsKKwkJfQorCiAJCWlmICgocCA9IHN0
cmNocihlYnVpbGQsICdcbicpKSAhPSBOVUxMKQogCQkJKnAgPSAwOwogCQlpZiAoKG5ld2ZwID0g
Zm9wZW4oZWJ1aWxkLCAiciIpKSAhPSBOVUxMKSB7CkBAIC0zNzQsNyArNDY0LDcgQEAgaW50IHF1
c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWlmICh2ZXJib3NlID4gMykKIAkJ
CQkJCXByaW50ZigiJXMgJXMgJXMgIiwgKnVzZXIgPyB1c2VyIDogIk1JU1NJTkciLCAqcmV2aXNp
b24gPyByZXZpc2lvbiA6ICJNSVNTSU5HIiwgKmRhdGUgPyBkYXRlIDogIk1JU1NJTkciKTsKIAot
CQkJCQlwcmludGYoIiVzJXMlcyAiLCBDWUFOLCBlYnVpbGQsIE5PUk0pOworCQkJCQlwcmludGYo
IiVzJXM6OiVzJXMgIiwgQ1lBTiwgY3VyX292ZXJsYXktPm5hbWUsIGVidWlsZCwgTk9STSk7CiAJ
CQkJCXByaW50X2hpZ2hsaWdodGVkX3VzZV9mbGFncygmYnVmMFtzZWFyY2hfbGVuKzFdLCBvcHRp
bmQsIGFyZ2MsIGFyZ3YpOwogCQkJCQlwdXRzKE5PUk0pOwogCQkJCQlpZiAodmVyYm9zZSA+IDEp
IHsKQEAgLTM4Miw3ICs0NzIsNyBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAkJCQkJCWludCBBUkdDID0gMDsKIAkJCQkJCW1ha2Vhcmd2KCZidWYwW3NlYXJjaF9sZW4r
MV0sICZBUkdDLCAmQVJHVik7CiAJCQkJCQlpZiAoQVJHQyA+IDApIHsKLQkJCQkJCQlxdXNlX2Rl
c2NyaWJlX2ZsYWcoMSwgQVJHQywgQVJHVik7CisJCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEs
IHJlcG8sIHJlcG9fc2VhcmNoLCBBUkdDLCBBUkdWKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwg
QVJHQzsgaSsrKQogCQkJCQkJCQlmcmVlKEFSR1ZbaV0pOwogCQkJCQkJCWZyZWUoQVJHVik7Cg==
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101520</attachid>
            <date>2006-11-08 22:55 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTAwNy9hcHBsZXRzLmggcG9ydGFnZS11dGls
cy0yMDA2MTAwNy5uZXcvYXBwbGV0cy5oCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L2FwcGxl
dHMuaAkyMDA2LTExLTA4IDA0OjAzOjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGls
cy0yMDA2MTAwNy5uZXcvYXBwbGV0cy5oCTIwMDYtMTEtMDkgMTk6MjA6NTAuMjg3MTk1Mjc5ICsw
MTAwCkBAIC00NywyNCArNDcsMjQgQEAgc3RydWN0IGFwcGxldF90IHsKIAljb25zdCBjaGFyICpk
ZXNjOwogfSBhcHBsZXRzW10gPSB7CiAJLyogcSBtdXN0IGFsd2F5cyBiZSB0aGUgZmlyc3QgYXBw
bGV0ICovCi0JeyJxIiwgICAgICAgICBxX21haW4sICAgICAgICAgIjxhcHBsZXQ+IDxhcmdzPiIs
ICJ2aXJ0dWFsIGFwcGxldCJ9LAotCXsicWF0b20iLCAgICAgcWF0b21fbWFpbiwgICAgICI8cGtn
PiIsICAgICAgICAgICAic3BsaXQgYXRvbSBzdHJpbmdzIn0sCi0JeyJxY2FjaGUiLCAgICBxY2Fj
aGVfbWFpbiwgICAgIjxhY3Rpb24+IDxhcmdzPiIsICJzZWFyY2ggdGhlIG1ldGFkYXRhIGNhY2hl
In0sCi0JeyJxY2hlY2siLCAgICBxY2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2
ZXJpZnkgbXRpbWVzL2RpZ2VzdHMifSwKLQl7InFkZXBlbmRzIiwgIHFkZXBlbmRzX21haW4sICAi
PHBrZ25hbWU+IiwgICAgICAgInNob3cgZGVwZW5kZW5jeSBpbmZvIn0sCi0JeyJxZmlsZSIsICAg
ICBxZmlsZV9tYWluLCAgICAgIjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmlu
ZyBmaWxlcyJ9LAotCXsicWdsc2EiLCAgICAgcWdsc2FfbWFpbiwgICAgICI8YWN0aW9uPiA8bGlz
dD4iLCAiY2hlY2sgR0xTQXMgYWdhaW5zdCBzeXN0ZW0ifSwKLQl7InFncmVwIiwgICAgIHFncmVw
X21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4gZWJ1aWxkcyJ9LAotCXsicWxp
c3QiLCAgICAgcWxpc3RfbWFpbiwgICAgICI8cGtnbmFtZT4iLCAgICAgICAibGlzdCBmaWxlcyBv
d25lZCBieSBwa2duYW1lIn0sCi0JeyJxbG9wIiwgICAgICBxbG9wX21haW4sICAgICAgIjxwa2du
YW1lPiIsICAgICAgICJlbWVyZ2UgbG9nIGFuYWx5emVyIn0sCi0JeyJxbWVyZ2UiLCAgICBxbWVy
Z2VfbWFpbiwgICAgIjxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVyZ2UgYmluYXJ5IHBh
Y2thZ2UifSwKLQl7InFwa2ciLCAgICAgIHFwa2dfbWFpbiwgICAgICAiPG1pc2MgYXJncz4iLCAg
ICAgIm1hbmlwdWxhdGUgR2VudG9vIGJpbnBrZ3MifSwKLQl7InFweSIsICAgICAgcXB5X21haW4s
ICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJweXRob24gaW50ZXJmYWNlIn0sCi0JeyJxc2VhcmNo
IiwgICBxc2VhcmNoX21haW4sICAgIjxyZWdleD4iLCAgICAgICAgICJzZWFyY2ggcGtnbmFtZS9k
ZXNjIn0sCi0JeyJxc2l6ZSIsICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2duYW1lPiIsICAgICAg
ICJjYWxjdWxhdGUgc2l6ZSB1c2FnZSJ9LAotCXsicXRiejIiLCAgICAgcXRiejJfbWFpbiwgICAg
ICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB0YnoyIHBhY2thZ2VzIn0sCi0JeyJxdXNl
IiwgICAgICBxdXNlX21haW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJmaW5kIHBrZ3MgdXNp
bmcgdXNlZmxhZ3MifSwKLQl7InF4cGFrIiwgICAgIHF4cGFrX21haW4sICAgICAiPG1pc2MgYXJn
cz4iLCAgICAgIm1hbmlwdWxhdGUgeHBhayBhcmNoaXZlcyJ9LAorCXsicSIsICAgICAgICAgcV9t
YWluLCAgICAgICAgICI8YXBwbGV0PiA8YXJncz4iLCAidmlydHVhbCBhcHBsZXQiCQl9LAorCXsi
cWF0b20iLCAgICAgcWF0b21fbWFpbiwgICAgICI8cGtnPiIsICAgICAgICAgICAic3BsaXQgYXRv
bSBzdHJpbmdzIgkJfSwKKwl7InFjYWNoZSIsICAgIHFjYWNoZV9tYWluLCAgICAiPGFjdGlvbj4g
PGFyZ3M+IiwgInNlYXJjaCB0aGUgbWV0YWRhdGEgY2FjaGUiCX0sCisJeyJxY2hlY2siLCAgICBx
Y2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMi
CX0sCisJeyJxZGVwZW5kcyIsICBxZGVwZW5kc19tYWluLCAgIjxwa2duYW1lPiIsICAgICAgICJz
aG93IGRlcGVuZGVuY3kgaW5mbyIJCX0sCisJeyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAgICAg
IjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmluZyBmaWxlcyIJfSwKKwl7InFn
cmVwIiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4gZWJ1
aWxkcyIJCX0sCisJeyJxbGlzdCIsICAgICBxbGlzdF9tYWluLCAgICAgIjxwa2duYW1lPiIsICAg
ICAgICJsaXN0IGZpbGVzIG93bmVkIGJ5IHBrZ25hbWUiCX0sCisJeyJxbG9wIiwgICAgICBxbG9w
X21haW4sICAgICAgIjxwa2duYW1lPiIsICAgICAgICJwb3J0YWdlIGxvZyBhbmFseXplciIJCX0s
CisJeyJxcGtnIiwgICAgICBxcGtnX21haW4sICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJtYW5p
cHVsYXRlIEdlbnRvbyBiaW5wa2dzIgl9LAorCXsicXNlYXJjaCIsICAgcXNlYXJjaF9tYWluLCAg
ICI8cmVnZXg+IiwgICAgICAgICAic2VhcmNoIHBrZ25hbWUvZGVzYyIJCX0sCisJeyJxc2l6ZSIs
ICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2duYW1lPiIsICAgICAgICJjYWxjdWxhdGUgc2l6ZSB1
c2FnZSIJCX0sCisJeyJxdGJ6MiIsICAgICBxdGJ6Ml9tYWluLCAgICAgIjxtaXNjIGFyZ3M+Iiwg
ICAgICJtYW5pcHVsYXRlIHRiejIgcGFja2FnZXMiCX0sCisJeyJxdXNlIiwgICAgICBxdXNlX21h
aW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJmaW5kIHBrZ3MgdXNpbmcgdXNlZmxhZ3MiCX0s
CisJeyJxeHBhayIsICAgICBxeHBha19tYWluLCAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJtYW5p
cHVsYXRlIHhwYWsgYXJjaGl2ZXMiCX0sCisJeyJxbWVyZ2UiLCAgICBxbWVyZ2VfbWFpbiwgICAg
Ijxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVyZ2UgYmluYXJ5IHBhY2thZ2UifSwJCisJ
eyJxZ2xzYSIsICAgICBxZ2xzYV9tYWluLCAgICAgIjxhY3Rpb24+IDxsaXN0PiIsIE5VTEwJCQkJ
fSwJCS8qICJjaGVjayBHTFNBcyBhZ2FpbnN0IHN5c3RlbSIgKi8KKwl7InFweSIsICAgICAgIHFw
eV9tYWluLCAgICAgICAiPG1pc2MgYXJncz4iLCAgICAgTlVMTAkJCQl9LAkJLyogInB5dGhvbiBp
bnRlcmZhY2UiICovCiAKIAogCS8qIGFsaWFzZXMgZm9yIGVxdWVyeSBjYXBhdGFiaWxpdHkgKi8K
ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTAwNy9tYWluLmMgcG9ydGFnZS11dGlscy0y
MDA2MTAwNy5uZXcvbWFpbi5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L21haW4uYwkyMDA2
LTExLTA4IDA0OjAzOjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTAw
Ny5uZXcvbWFpbi5jCTIwMDYtMTEtMDkgMjM6MDk6MDMuMDUwNTc4ODM4ICswMTAwCkBAIC03MSw2
ICs3MSw3IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRp
YyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2
b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7
CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAg
LTg1LDEzICs4NiwyMSBAQCBzdGF0aWMgaW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRl
bmQgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwotc3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0g
PSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwogc3RhdGlj
IGNoYXIgcG9ydHZkYltdID0gInZhci9kYi9wa2ciOwogc3RhdGljIGNoYXIgcG9ydGNhY2hlZGly
W10gPSAibWV0YWRhdGEvY2FjaGUiOwogc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhd
ID0gIi8iOwogc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMv
IjsKIAordHlwZWRlZiBzdHJ1Y3Qgb3ZlcmxheV90IG92ZXJsYXlfdDsKK3N0cnVjdCBvdmVybGF5
X3QgeworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwYXRoW19RX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qg
b3ZlcmxheV90ICpuZXh0OworfTsKKworc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50b28g
PSBOVUxMOworCiBjaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8iOwog
Y2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKIApAQCAtMjAwLDEw
ICsyMDksMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTQ2NSwxNyArNDc0LDc5IEBAIGNoYXIgKnN0cmluY3JfdmFyKGNvbnN0IGNoYXIgKm5hbWUs
IGNoYXIKIAlyZXR1cm4gKGNoYXIgKikgdmFsdWU7CiB9CiAKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVy
bGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSkKK3sKKwlzaG9ydCBtZXJyb3IgPSAwOworCWNo
YXIgYnVmW0JVRlNJWkVdLCBmaWxlW19RX1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKKwlvdmVybGF5
X3QgKmN1cl9vdmVybGF5OworCUZJTEUgKnJlcG9fbmFtZUZQOworCXMgPSBwb3J0ZGlyX292ZXJs
YXk7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKworCXdoaWxlICgqcykgeworCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IChvdmVybGF5X3QgKikgeG1hbGxvYyAoIHNpemVvZiAoKmN1cl9v
dmVybGF5LT5uZXh0KSk7CisJCWN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQ7CisJCWN1
cl9vdmVybGF5LT5uZXh0ID0gTlVMTDsKKworCQlpZiAoIChwPXN0cmNocihzLCcgJykpKQorCQkJ
KnAgPSAwOworCisJCXN0cm5jcHkoY3VyX292ZXJsYXktPnBhdGgsIHMsIHNpemVvZihjdXJfb3Zl
cmxheS0+cGF0aCkpOworCisJCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBvdmVybGF5ICovCisJ
CXN0cm5jcHkoZmlsZSwgY3VyX292ZXJsYXktPnBhdGgsIF9RX1BBVEhfTUFYKTsKKwkJc3RybmNh
dChmaWxlLCAiL3Byb2ZpbGVzL3JlcG9fbmFtZSIsIF9RX1BBVEhfTUFYKTsKKwkJaWYgKCggcmVw
b19uYW1lRlAgPSBmb3BlbihmaWxlLCAiciIpICkpCisJCXsKKwkJCWlmICggISAoIGZnZXRzKGJ1
Ziwgc2l6ZW9mKGJ1ZikscmVwb19uYW1lRlApKSApCisJCQkJbWVycm9yKys7CisKKwkJCXJtc3Bh
Y2UoYnVmKTsKKwkJCWlmICggKHQgPSBzdHJjaHIoYnVmLCdcbicpKSkKKwkJCQkqdCA9IDA7CisK
KwkJCXN0cm5jcHkoY3VyX292ZXJsYXktPm5hbWUsIGJ1Ziwgc2l6ZW9mKGN1cl9vdmVybGF5LT5u
YW1lKSk7CisKKwkJCWZjbG9zZShyZXBvX25hbWVGUCk7CisKKwkJfSBlbHNlIAorCQkJbWVycm9y
Kys7CisKKwkJaWYgKG1lcnJvcikgeworCQkJLyogZGVsZXRlIHRyYWlsaW5nICcvJyAqLworCQkJ
dCA9IGN1cl9vdmVybGF5LT5wYXRoICsgc3RybGVuKGN1cl9vdmVybGF5LT5wYXRoKSAtIDE7CisJ
CQlpZiAoICp0ID09ICcvJyApCisJCQkJKnQgPSAwOworCisJCQlzdHJuY3B5KGN1cl9vdmVybGF5
LT5uYW1lLCBiYXNlbmFtZShjdXJfb3ZlcmxheS0+cGF0aCksIHNpemVvZihjdXJfb3ZlcmxheS0+
bmFtZSkpOworCQkJbWVycm9yPTA7CisJCX0KKworCQlpZiAocCkKKwkJCXMgPSBwKzE7CisJCWVs
c2UKKwkJCWJyZWFrOworCX0KKwkKK30KKworCiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYo
dm9pZCkKIHsKIAljaGFyIG5vY29sb3IgPSAwOwogCWludCBpLCBmOwogCXN0cnVjdCBzdGF0IHN0
OwogCUZJTEUgKmZwOworCWNoYXIgdG1wX3BvcnRkaXJbX1FfUEFUSF9NQVhdOworCWNoYXIgcG9y
dGRpcl9vdmVybGF5WzIwNDhdID0gIiI7CisKIAljaGFyIGJ1ZltCVUZTSVpFXSwgKnMsICpwOwog
CiAJY2hhciBwcm9maWxlW19RX1BBVEhfTUFYXSwgcG9ydGFnZV9maWxlW19RX1BBVEhfTUFYXTsK
KwogCWNvbnN0IGNoYXIgKmZpbGVzW10gPSB7cG9ydGFnZV9maWxlLCAiL2V0Yy9tYWtlLmdsb2Jh
bHMiLCAiL2V0Yy9tYWtlLmNvbmYifTsKIAl0eXBlZGVmIGVudW0geyBfUV9CT09MLCBfUV9TVFIs
IF9RX0lTVFIgfSB2YXJfdHlwZXM7CisJCiAJc3RydWN0IHsKIAkJY29uc3QgY2hhciAqbmFtZTsK
IAkJY29uc3Qgc2l6ZV90IG5hbWVfbGVuOwpAQCAtNDgzLDE5ICs1NTQsMjYgQEAgdm9pZCBpbml0
aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiAJCWNoYXIgKnZhbHVlOwogCQljb25zdCBzaXplX3Qg
dmFsdWVfbGVuOwogCX0gdmFyc190b19yZWFkW10gPSB7Ci0JCXsiQUNDRVBUX0xJQ0VOU0UiLCAx
NCwgX1FfU1RSLCAgYWNjZXB0X2xpY2Vuc2UsIHNpemVvZihhY2NlcHRfbGljZW5zZSl9LAotCQl7
IklOU1RBTExfTUFTSyIsIDEyLCBfUV9JU1RSLCAgaW5zdGFsbF9tYXNrLCBzaXplb2YoaW5zdGFs
bF9tYXNrKX0sCi0JCXsiQVJDSCIsICAgIDQsIF9RX1NUUiwgIHBvcnRhcmNoLCBzaXplb2YocG9y
dGFyY2gpfSwKLQkJeyJDT05GSUdfUFJPVEVDVCIsICAgIDE0LCBfUV9TVFIsICBjb25maWdfcHJv
dGVjdCwgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KX0sCi0JCXsiTk9DT0xPUiIsIDcsIF9RX0JPT0ws
ICZub2NvbG9yLCAxfSwKLQkJeyJGRUFUVVJFUyIsOCwgX1FfSVNUUiwgIGZlYXR1cmVzLCBzaXpl
b2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgNywgX1FfU1RSLCAgcG9ydGRpciwgc2l6ZW9m
KHBvcnRkaXIpfSwKLQkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgIDE1LCBfUV9TVFIsICBiaW5ob3N0
LCBzaXplb2YoYmluaG9zdCl9LAotCQl7IlBPUlRBR0VfVE1QRElSIiwgICAgMTQsIF9RX1NUUiwg
IHBvcnRfdG1wZGlyLCBzaXplb2YocG9ydF90bXBkaXIpfSwKLQkJeyJQS0dESVIiLCAgNiwgX1Ff
U1RSLCAgcGtnZGlyLCBzaXplb2YocGtnZGlyKX0sCi0JCXsiUk9PVCIsICAgIDQsIF9RX1NUUiwg
IHBvcnRyb290LCBzaXplb2YocG9ydHJvb3QpfQorCQl7IkFDQ0VQVF9MSUNFTlNFIiwJMTQsIF9R
X1NUUiwJYWNjZXB0X2xpY2Vuc2UsCQkgc2l6ZW9mKGFjY2VwdF9saWNlbnNlKQkJfSwKKwkJeyJJ
TlNUQUxMX01BU0siLAkxMiwgX1FfSVNUUiwJaW5zdGFsbF9tYXNrLAkJIHNpemVvZihpbnN0YWxs
X21hc2spCQl9LAorCQl7IkFSQ0giLAkJNCwgX1FfU1RSLAlwb3J0YXJjaCwJCSBzaXplb2YocG9y
dGFyY2gpCQl9LAorCQl7IkNPTkZJR19QUk9URUNUIiwJMTQsIF9RX1NUUiwJY29uZmlnX3Byb3Rl
Y3QsCQkgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KQkJfSwKKwkJeyJOT0NPTE9SIiwJCTcsIF9RX0JP
T0wsCSZub2NvbG9yLAkJIDEJCQkJfSwKKwkJeyJGRUFUVVJFUyIsCQk4LCBfUV9JU1RSLAlmZWF0
dXJlcywJCSBzaXplb2YoZmVhdHVyZXMpCQl9LAorCQl7IlBPUlRESVIiLAkJNywgX1FfU1RSLAl0
bXBfcG9ydGRpciwJCSBzaXplb2YodG1wX3BvcnRkaXIpCQl9LAorCQl7IlBPUlRESVJfT1ZFUkxB
WSIsCTE1LCBfUV9JU1RSLAlwb3J0ZGlyX292ZXJsYXksCSBzaXplb2YocG9ydGRpcl9vdmVybGF5
KQl9LAorCQl7IlBPUlRBR0VfQklOSE9TVCIsCTE1LCBfUV9TVFIsCWJpbmhvc3QsCQkgc2l6ZW9m
KGJpbmhvc3QpCQl9LAorCQl7IlBPUlRBR0VfVE1QIiwJCTksIF9RX1NUUiwJcG9ydF90bXBkaXIs
CQkgc2l6ZW9mKHBvcnRfdG1wZGlyKQkJfSwKKwkJeyJQS0dESVIiLAkJNiwgX1FfU1RSLAlwa2dk
aXIsCQkJIHNpemVvZihwa2dkaXIpCQkJfSwKKwkJeyJST09UIiwJCTQsIF9RX1NUUiwJcG9ydHJv
b3QsCQkgc2l6ZW9mKHBvcnRyb290KQkJfQogCX07CiAKKwlvdmVybGF5X2dlbnRvbyA9IChvdmVy
bGF5X3QqKSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlzdHJjcHkob3Zlcmxh
eV9nZW50b28tPm5hbWUsImdlbnRvbyIpOworCXN0cmNweShvdmVybGF5X2dlbnRvby0+cGF0aCwi
L3Vzci9wb3J0YWdlIik7CisJb3ZlcmxheV9nZW50b28tPm5leHQgPSBOVUxMOworCisKIAlpZiAo
KHAgPSBzdHJjaHIocG9ydHJvb3QsICcvJykpICE9IE5VTEwpCiAJCWlmIChzdHJsZW4ocCkgIT0g
MSkKIAkJCXN0cm5jYXQocG9ydHJvb3QsICIvIiwgc2l6ZW9mKHBvcnRyb290KSk7CkBAIC01ODcs
NiArNjY1LDEzIEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lkKQogCQlub19jb2xv
cnMoKTsKIAllbHNlCiAJCWNvbG9yX3JlbWFwKCk7CisKKworCXN0cm5jcHkob3ZlcmxheV9nZW50
b28tPnBhdGgsIHRtcF9wb3J0ZGlyLCBzaXplb2Yob3ZlcmxheV9nZW50b28tPnBhdGgpKTsKKwor
CS8qIG5vdyB3ZSBpbml0aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQgbGlzdCB3aXRoIG92ZXJs
YXlfZ2VudG9vIHRoZSBmaXJzdCAnaXRlbScgICovCisJaW5pdGlhbGl6ZV9vdmVybGF5cyhwb3J0
ZGlyX292ZXJsYXkpOworCiB9CiAKIGVudW0gewpAQCAtNjE1LDE5ICs3MDAsMjEgQEAgY29uc3Qg
Y2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNoZV90eQogCWludCBhLCBiLCBjLCBkLCBlLCBp
OwogCWludCBmcmFjLCBzZWNzLCBjb3VudDsKIAlGSUxFICpmcDsKKwlvdmVybGF5X3QgKmN1cl9v
dmVybGF5OwogCiAJYSA9IGIgPSBjID0gZCA9IGUgPSBpID0gMDsKIAljb3VudCA9IGZyYWMgPSBz
ZWNzID0gMDsKKwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOwogCiAJY2FjaGVfZmlsZSA9
IChjYWNoZV90eXBlID09IENBQ0hFX0VCVUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVf
TUVUQURBVEFfRklMRSk7CiAKLQlpZiAoY2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgi
Y2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmIChjaGRpcihvdmVy
bGF5X2dlbnRvby0+cGF0aCkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMn
IGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYg
KGNhY2hlX3R5cGUgPT0gQ0FDSEVfTUVUQURBVEEgJiYgY2hkaXIocG9ydGNhY2hlZGlyKSAhPSAw
KSB7Ci0JCXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycgZmFpbGVkIiwgcG9y
dGRpciwgcG9ydGNhY2hlZGlyKTsKKwkJd2FybnAoImNoZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVz
LyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgcG9ydGNhY2hlZGlyKTsKIAkJZ290
byByZXQ7CiAJfQogCkBAIC02NDMsNjQgKzczMCw3MyBAQCBjb25zdCBjaGFyICppbml0aWFsaXpl
X2ZsYXQoaW50IGNhY2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9
IEVOT0VOVCkgewotCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIs
IGNhY2hlX2ZpbGUpOworCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJs
YXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKChm
cCA9IGZvcGVuKGNhY2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5n
ICclcy8lcycgZmFpbGVkIiwgcG9ydGRpciwgY2FjaGVfZmlsZSk7CisJCXdhcm5mcCgib3Blbmlu
ZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJ
Z290byByZXQ7CiAJfQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAKLQlpZiAoKGEg
PSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDAp
Ci0JCWdvdG8gcmV0OwotCi0JZm9yIChpID0gMCA7IGkgPCBhOyBpKyspIHsKLQkJc3RhdChjYXRl
Z29yeVtpXS0+ZF9uYW1lLCAmc3QpOwotCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCQlj
b250aW51ZTsKLQkJaWYgKHN0cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5VTEwp
Ci0JCQlpZiAoKHN0cm5jbXAoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgInZpcnR1YWwiLCA3KSkgIT0g
MCkKKwlkbyB7CisJCWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gfHwgY2hkaXIo
Y3VyX292ZXJsYXktPnBhdGgpID09IDApIHsKKwkJCWlmICgoYSA9IHNjYW5kaXIoIi4iLCAmY2F0
ZWdvcnksIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKIAkJCQljb250aW51ZTsKIAot
CQlpZiAoKGIgPSBzY2FuZGlyKGNhdGVnb3J5W2ldLT5kX25hbWUsICZwbiwgZmlsdGVyX2hpZGRl
biwgYWxwaGFzb3J0KSkgPCAwKQotCQkJY29udGludWU7Ci0JCWZvciAoYyA9IDA7IGMgPCBiOyBj
KyspIHsKLQkJCWNoYXIgZGVbX1FfUEFUSF9NQVhdOworCQkJZm9yIChpID0gMCA7IGkgPCBhOyBp
KyspIHsKKwkJCQlzdGF0KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7CisJCQkJaWYgKCFTX0lT
RElSKHN0LnN0X21vZGUpKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoc3RyY2hyKGNhdGVnb3J5
W2ldLT5kX25hbWUsICctJykgPT0gTlVMTCkKKwkJCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ld
LT5kX25hbWUsICJ2aXJ0dWFsIiwgNykpICE9IDApCisJCQkJCQljb250aW51ZTsKIAotCQkJc25w
cmludGYoZGUsIHNpemVvZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2Nd
LT5kX25hbWUpOworCQkJCWlmICgoYiA9IHNjYW5kaXIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnBu
LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZv
ciAoYyA9IDA7IGMgPCBiOyBjKyspIHsKKwkJCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJ
CWlmIChzdGF0KGRlLCAmc3QpIDwgMCkKLQkJCQljb250aW51ZTsKKwkJCQkJc25wcmludGYoZGUs
IHNpemVvZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUp
OwogCi0JCQlzd2l0Y2ggKGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJVSUxEOgotCQkJ
CWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0J
CQljYXNlIENBQ0hFX01FVEFEQVRBOgotCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJ
CQlmcHJpbnRmKGZwLCAiJXNcbiIsIGRlKTsKLQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJ
CX0KLQkJCWlmICgoZSA9IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0
KSkgPCAwKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yIChkID0gMCA7IGQgPCBlOyBkKyspIHsKLQkJ
CQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykpICE9IE5VTEwpCi0JCQkJCWlm
IChzdHJjbXAocCwgIi5lYnVpbGQiKSA9PSAwKSB7Ci0JCQkJCQljb3VudCsrOwotCQkJCQkJZnBy
aW50ZihmcCwgIiVzLyVzLyVzXG4iLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1l
LCBlYltkXS0+ZF9uYW1lKTsKKwkJCQkJaWYgKHN0YXQoZGUsICZzdCkgPCAwKQorCQkJCQkJY29u
dGludWU7CisKKwkJCQkJc3dpdGNoIChjYWNoZV90eXBlKSB7CisJCQkJCWNhc2UgQ0FDSEVfRUJV
SUxEOgorCQkJCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJCQkJCWNvbnRpbnVlOwor
CQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQ0FDSEVfTUVUQURBVEE6CisJCQkJCQlpZiAoU19JU1JF
RyhzdC5zdF9tb2RlKSkKKwkJCQkJCQlmcHJpbnRmKGZwLCAiJXNcbiIsIGRlKTsKKwkJCQkJCWNv
bnRpbnVlOworCQkJCQkJYnJlYWs7CiAJCQkJCX0KKwkJCQkJaWYgKChlID0gc2NhbmRpcihkZSwg
JmViLCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCQljb250aW51ZTsKKwkJ
CQkJZm9yIChkID0gMCA7IGQgPCBlOyBkKyspIHsKKwkJCQkJCWlmICgocCA9IHN0cnJjaHIoZWJb
ZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKKwkJCQkJCQlpZiAoc3RyY21wKHAsICIuZWJ1aWxk
IikgPT0gMCkgeworCQkJCQkJCQljb3VudCsrOworCQkJCQkJCQlmcHJpbnRmKGZwLCAiJXM6OiVz
LyVzLyVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10t
PmRfbmFtZSwgZWJbZF0tPmRfbmFtZSk7CisJCQkJCQkJfQorCQkJCQl9CisJCQkJCXdoaWxlKGQt
LSkKKwkJCQkJCWZyZWUoZWJbZF0pOworCQkJCQlmcmVlKGViKTsKKwkJCQl9CisJCQkJd2hpbGUo
Yi0tKQorCQkJCQlmcmVlKHBuW2JdKTsKKwkJCQlmcmVlKHBuKTsKIAkJCX0KLQkJCXdoaWxlKGQt
LSkgZnJlZShlYltkXSk7Ci0JCQlmcmVlKGViKTsKLQkJfQotCQl3aGlsZShiLS0pIGZyZWUocG5b
Yl0pOwotCQlmcmVlKHBuKTsKLQl9CisJCX0gZWxzZQorCQkJd2FybnAoImNoZGlyIHRvIFBPUlRE
SVIgJyVzJyBmYWlsZWQsIHNraXBwaW5nIHRoZSAlcyByZXBvc2l0b3J5IiwgY3VyX292ZXJsYXkt
PnBhdGgsIGN1cl9vdmVybGF5LT5uYW1lKTsKKworCX0gd2hpbGUgKCAoY3VyX292ZXJsYXkgPSBj
dXJfb3ZlcmxheS0+bmV4dCkpOworCiAJZmNsb3NlKGZwKTsKIAl3aGlsZShhLS0pIGZyZWUoY2F0
ZWdvcnlbYV0pOwogCWZyZWUoY2F0ZWdvcnkpOwpAQCAtNzIwLDcgKzgxNiw3IEBAIGNvbnN0IGNo
YXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAogCXdhcm4oIkZpbmlzaGVkICV1IGVu
dHJpZXMgaW4gJWQuJTA2ZCBzZWNvbmRzIiwgY291bnQsIHNlY3MsIGZyYWMpOwogCWlmIChzZWNz
ID4gMTAwKQotCQl3YXJuKCJZb3Ugc2hvdWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVt
IHN1Y2ggYXMgcmVpc2VyZnMgZm9yIFBPUlRESVI9JyVzJyIsIHBvcnRkaXIpOworCQl3YXJuKCJZ
b3Ugc2hvdWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVtIHN1Y2ggYXMgcmVpc2VyZnMg
Zm9yIFBPUlRESVI9JyVzJyIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIHJldDoKIAlyZXR1cm4g
Y2FjaGVfZmlsZTsKIH0KQEAgLTcyOSw4ICs4MjUsOCBAQCByZXQ6CiAKIHZvaWQgcmVpbml0aWFs
aXplX2VidWlsZF9mbGF0KHZvaWQpCiB7Ci0JaWYgKChjaGRpcihwb3J0ZGlyKSkgIT0gMCkgewot
CQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmICgo
Y2hkaXIob3ZlcmxheV9nZW50b28tPnBhdGgpKSAhPSAwKSB7CisJCXdhcm5wKCJjaGRpciB0byBQ
T1JURElSICclcycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCQlyZXR1cm47CiAJ
fQogCXVubGluayhDQUNIRV9FQlVJTERfRklMRSk7CkBAIC0xMDAyLDkgKzEwOTgsMTkgQEAgZnVj
a2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUgb3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9v
dmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9pZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlf
dCAqb3ZlcmxheSkKK3sKKwlpZiAoIG92ZXJsYXktPm5leHQgKQorCQlmcmVlX292ZXJsYXlzKG92
ZXJsYXktPm5leHQpOworCWZyZWUob3ZlcmxheSk7Cit9CisKIHZvaWQgY2xlYW51cCgpIHsKIAly
ZWluaXRpYWxpemVfYXNfbmVlZGVkKCk7CiAJZnJlZV9zZXRzKHZpcnR1YWxzKTsKKwlmcmVlX292
ZXJsYXlzKG92ZXJsYXlfZ2VudG9vKTsKIAlmY2xvc2Uoc3RkZXJyKTsKIH0KIApkaWZmIC1OYXJ1
cCBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L3EuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9x
LmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcvcS5jCTIwMDYtMTEtMDggMDQ6MDM6MzYuMDAw
MDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9xLmMJMjAwNi0xMS0w
OSAxOToyMDo1MC4zMTQxOTExNzUgKzAxMDAKQEAgLTcsMTUgKzcsMTcgQEAKICAqIENvcHlyaWdo
dCAyMDA1LTIwMDYgTWlrZSBGcnlzaW5nZXIgIC0gPHZhcGllckBnZW50b28ub3JnPgogICovCiAK
LSNkZWZpbmUgUV9GTEFHUyAiaXJtIiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUV9GTEFHUyAiaWxy
bSIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxX2xvbmdfb3B0c1td
ID0gewogCXsiaW5zdGFsbCIsICAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdpJ30sCisJeyJscy1v
dmVybGF5cyIsICBub19hcmd1bWVudCwgTlVMTCwgJ2wnfSwKIAl7InJlaW5pdGlhbGl6ZSIsIG5v
X2FyZ3VtZW50LCBOVUxMLCAncid9LAogCXsibWV0YWNhY2hlIiwgICAgbm9fYXJndW1lbnQsIE5V
TEwsICdtJ30sCiAJQ09NTU9OX0xPTkdfT1BUUwogfTsKIHN0YXRpYyBjb25zdCBjaGFyICpxX29w
dHNfaGVscFtdID0gewogCSJJbnN0YWxsIHN5bWxpbmtzIGZvciBhcHBsZXRzIiwKKwkiTGlzdCBj
b25maWd1cmVkIG92ZXJsYXlzIiwKIAkiUmVpbml0aWFsaXplIGVidWlsZCBjYWNoZSIsCiAJIlJl
aW5pdGlhbGl6ZSBtZXRhZGF0YSBjYWNoZSIsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtNzAsNiAr
NzIsNyBAQCBpbnQgcV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQgaTsKIAljaGFy
ICpwOwogCUFQUExFVCBmdW5jOworCW92ZXJsYXlfdCAqIGN1cl9vdmVybGF5OwogCiAJaWYgKGFy
Z2MgPT0gMCkKIAkJcmV0dXJuIDE7CkBAIC04OSw2ICs5MiwxNSBAQCBpbnQgcV9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocSkKIAkJY2FzZSAnbSc6
IHJlaW5pdGlhbGl6ZV9tZXRhY2FjaGUgPSAxOyBicmVhazsKIAkJY2FzZSAncic6IHJlaW5pdGlh
bGl6ZSA9IDE7IGJyZWFrOworCQljYXNlICdsJzogeworCQkJcHJpbnRmKCJcbiVzT3ZlcmxheShz
KSA6JXNcblxuIiwgR1JFRU4sIE5PUk0pOworCQkJY3VyX292ZXJsYXk9b3ZlcmxheV9nZW50b287
CisJCQlkbyB7CisJCQkJcHJpbnRmKCIgICBOYW1lIDogJXMlLTIwLjIwcyVzIFx0bG9jYXRpb24g
OiAlcyVzJXNcbiIsIENZQU4sIGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLCBDWUFOLCBjdXJfb3Zl
cmxheS0+cGF0aCwgTk9STSk7CisJCQl9IHdoaWxlICggKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5
LT5uZXh0KSk7CisJCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQkJcmV0dXJuIDA7CisJCQl9CiAJ
CWNhc2UgJ2knOiB7CiAJCQljaGFyIGJ1ZltfUV9QQVRIX01BWF07CiAJCQkvKiBhbHdheXMgYnpl
cm8gYSBidWZmZXIgYmVmb3JlIHVzaW5nIHJlYWRsaW5rKCkgKi8KZGlmZiAtTmFydXAgcG9ydGFn
ZS11dGlscy0yMDA2MTAwNy9xY2FjaGUuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9xY2Fj
aGUuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTAwNy9xY2FjaGUuYwkyMDA2LTExLTA4IDA0OjAz
OjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTAwNy5uZXcvcWNhY2hl
LmMJMjAwNi0xMS0wOSAxOToyNDowNC42NjU2NDUyNjMgKzAxMDAKQEAgLTQ5OCwxMCArNDk4LDEw
IEBAIGludCBxY2FjaGVfdHJhdmVyc2Uodm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAlpbnQgaSwgaiwg
aywgbGVuLCBudW1fY2F0LCBudW1fcGtnLCBudW1fZWJ1aWxkOwogCXN0cnVjdCBkaXJlY3QgKipj
YXRlZ29yaWVzLCAqKnBhY2thZ2VzLCAqKmVidWlsZHM7CiAKLQlsZW4gPSBzaXplb2YoY2hhcikg
KiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKHBvcnRkaXIpICsgMSk7CisJbGVuID0gc2l6
ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihvdmVybGF5X2dlbnRvby0+
cGF0aCkgKyAxKTsKIAljYXRwYXRoID0gKGNoYXIgKikgeG1hbGxvYyhsZW4pOwogCW1lbXNldChj
YXRwYXRoLDAsbGVuKTsKLQlzbnByaW50ZihjYXRwYXRoLGxlbiwiJXMlcyIsUUNBQ0hFX0VEQixw
b3J0ZGlyKTsKKwlzbnByaW50ZihjYXRwYXRoLGxlbiwiJXMlcyIsUUNBQ0hFX0VEQixvdmVybGF5
X2dlbnRvby0+cGF0aCk7CiAKIAlpZiAoLTEgPT0gKG51bV9jYXQgPSBzY2FuZGlyKGNhdHBhdGgs
ICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxlY3QsIGFscGhhc29ydCkpKSB7CiAJCWVycigi
JXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNTEzLDEwICs1MTMsMTAgQEAg
aW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYykocWNhY2hlXwogCiAJLyogdHJhdmVyc2Ug
Y2F0ZWdvcmllcyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY2F0OyBpKyspIHsKLQkJbGVuID0g
c2l6ZW9mKGNoYXIpICogKHN0cmxlbihwb3J0ZGlyKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNh
dGVnb3JpZXNbaV0tPmRfbmFtZSkgKyAxKTsKKwkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxl
bihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVz
W2ldLT5kX25hbWUpICsgMSk7CiAJCXBrZ3BhdGggPSAoY2hhciAqKSB4bWFsbG9jKGxlbik7CiAJ
CW1lbXNldChwa2dwYXRoLCAwLCBsZW4pOwotCQlzbnByaW50Zihwa2dwYXRoLGxlbiwiJXMvJXMi
LHBvcnRkaXIsY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKKwkJc25wcmludGYocGtncGF0aCxsZW4s
IiVzLyVzIixvdmVybGF5X2dlbnRvby0+cGF0aCxjYXRlZ29yaWVzW2ldLT5kX25hbWUpOwogCiAJ
CWlmICgtMSA9PSAobnVtX3BrZyA9IHNjYW5kaXIocGtncGF0aCwgJnBhY2thZ2VzLCBxY2FjaGVf
ZmlsZV9zZWxlY3QsIGFscGhhc29ydCkpKSB7CiAJCQl3YXJuKCIlcyAlcyIsIGNhdHBhdGgsIHN0
cmVycm9yKGVycm5vKSk7CkBAIC01MzgsMTAgKzUzOCwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNl
KHZvaWQgKCpmdW5jKShxY2FjaGVfCiAKIAkJLyogdHJhdmVyc2UgcGFja2FnZXMgKi8KIAkJZm9y
IChqID0gMDsgaiA8IG51bV9wa2c7IGorKykgewotCQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0
cmxlbihwb3J0ZGlyKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFt
ZSkgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihwYWNrYWdlc1tqXS0+ZF9uYW1lKSArIDEpOworCQkJ
bGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJs
ZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBz
dHJsZW4ocGFja2FnZXNbal0tPmRfbmFtZSkgKyAxKTsKIAkJCWVidWlsZHBhdGggPSAoY2hhciAq
KSB4bWFsbG9jKGxlbik7CiAJCQltZW1zZXQoZWJ1aWxkcGF0aCwgMCwgbGVuKTsKLQkJCXNucHJp
bnRmKGVidWlsZHBhdGgsbGVuLCIlcy8lcy8lcyIscG9ydGRpcixjYXRlZ29yaWVzW2ldLT5kX25h
bWUscGFja2FnZXNbal0tPmRfbmFtZSk7CisJCQlzbnByaW50ZihlYnVpbGRwYXRoLGxlbiwiJXMv
JXMvJXMiLG92ZXJsYXlfZ2VudG9vLT5wYXRoLGNhdGVnb3JpZXNbaV0tPmRfbmFtZSxwYWNrYWdl
c1tqXS0+ZF9uYW1lKTsKIAogCQkJaWYgKC0xID09IChudW1fZWJ1aWxkID0gc2NhbmRpcihlYnVp
bGRwYXRoLCAmZWJ1aWxkcywgcWNhY2hlX2VidWlsZF9zZWxlY3QsIHFjYWNoZV92ZXJjbXApKSkg
ewogCQkJCXdhcm4oIiVzICVzIiwgZWJ1aWxkcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTc1
NCwxMCArNzU0LDEwIEBAIHZvaWQgcWNhY2hlX3N0YXRzKHFjYWNoZV9kYXRhICpkYXRhKSB7CiAJ
CWZvciAoaSA9IDA7IGFyY2hsaXN0W2ldOyBpKyspCiAJCQlhcmNoaXRlY3R1cmVzKys7CiAKLQkJ
bGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihwb3J0ZGly
KSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3Ry
bGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIDEpOwogCQljYXRwYXRoID0gKGNoYXIgKikgeG1h
bGxvYyhsZW4pOwogCQltZW1zZXQoY2F0cGF0aCwwLGxlbik7Ci0JCXNucHJpbnRmKGNhdHBhdGgs
bGVuLCIlcyVzIixRQ0FDSEVfRURCLHBvcnRkaXIpOworCQlzbnByaW50ZihjYXRwYXRoLGxlbiwi
JXMlcyIsUUNBQ0hFX0VEQixvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAKIAkJaWYgKC0xID09IChu
dW1jYXQgPSBzY2FuZGlyKGNhdHBhdGgsICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxlY3Qs
IGFscGhhc29ydCkpKSB7CiAJCQllcnIoIiVzICVzIiwgY2F0cGF0aCwgc3RyZXJyb3IoZXJybm8p
KTsKQEAgLTkxNCwxMSArOTE0LDExIEBAIGludCBxY2FjaGVfaW5pdCgpIHsKIAljaGFyICpmaWxl
bmFtZTsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCi0JbGVuICAgICAgPSBzaXplb2YoY2hhcikgKiAo
c3RybGVuKHBvcnRkaXIpICsgc3RybGVuKCIvcHJvZmlsZXMvYXJjaC5saXN0IikgKyAxKTsKKwls
ZW4gICAgICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsg
c3RybGVuKCIvcHJvZmlsZXMvYXJjaC5saXN0IikgKyAxKTsKIAlmaWxlbmFtZSA9IChjaGFyICop
IHhtYWxsb2MobGVuKTsKIAogCW1lbXNldChmaWxlbmFtZSwwLGxlbik7Ci0Jc25wcmludGYoZmls
ZW5hbWUsbGVuLCIlcy9wcm9maWxlcy9hcmNoLmxpc3QiLHBvcnRkaXIpOworCXNucHJpbnRmKGZp
bGVuYW1lLGxlbiwiJXMvcHJvZmlsZXMvYXJjaC5saXN0IixvdmVybGF5X2dlbnRvby0+cGF0aCk7
CiAKIAlpZiAoTlVMTCA9PSAoYXJjaGxpc3QgPSBxY2FjaGVfcmVhZF9saW5lcyhmaWxlbmFtZSkp
KSB7CiAJCWZyZWUoZmlsZW5hbWUpOwpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3
L3FncmVwLmMgcG9ydGFnZS11dGlscy0yMDA2MTAwNy5uZXcvcWdyZXAuYwotLS0gcG9ydGFnZS11
dGlscy0yMDA2MTAwNy9xZ3JlcC5jCTIwMDYtMTEtMDggMDQ6MDM6MzYuMDAwMDAwMDAwICswMTAw
CisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3Lm5ldy9xZ3JlcC5jCTIwMDYtMTEtMDkgMTk6MjA6
NTAuMzU0MTg1MDk0ICswMTAwCkBAIC0xMCwxMSArMTAsMTIgQEAKIAogI2lmZGVmIEFQUExFVF9x
Z3JlcAogCi0jZGVmaW5lIFFHUkVQX0ZMQUdTICJJaUhjZSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5l
IFFHUkVQX0ZMQUdTICJJaUhvOmNlIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9u
IGNvbnN0IHFncmVwX2xvbmdfb3B0c1tdID0gewogCXsiaW52ZXJ0LW1hdGNoIiwgIG5vX2FyZ3Vt
ZW50LCBOVUxMLCAnSSd9LAogCXsiaWdub3JlLWNhc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAn
aSd9LAogCXsid2l0aC1maWxlbmFtZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnSCd9LAorCXsib3Zl
cmxheSIsICAgICAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsiY291bnQiLCAgICAgICAg
IG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAogCXsicmVnZXhwIiwgICAgICAgIG5vX2FyZ3VtZW50
LCBOVUxMLCAnZSd9LAogCUNPTU1PTl9MT05HX09QVFMKQEAgLTIzLDYgKzI0LDcgQEAgc3RhdGlj
IGNvbnN0IGNoYXIgKnFncmVwX29wdHNfaGVscFtdID0gewogCSJTZWxlY3Qgbm9uLW1hdGNoaW5n
IGxpbmVzIiwKIAkiSWdub3JlIGNhc2UgZGlzdGluY3Rpb25zIiwKIAkiUHJpbnQgdGhlIGZpbGVu
YW1lIGZvciBlYWNoIG1hdGNoIiwKKwkiT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheSIs
CiAJIk9ubHkgcHJpbnQgYSBjb3VudCBvZiBtYXRjaGluZyBsaW5lcyBwZXIgRklMRSIsCiAJIlVz
ZSBQQVRURVJOIGFzIGEgcmVndWxhciBleHByZXNzaW9uIiwKIAlDT01NT05fT1BUU19IRUxQCkBA
IC0zNCw3ICszNiw5IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsK
IAlpbnQgaTsKIAlpbnQgY291bnQgPSAwOwotCWNoYXIgKnA7CisJc2hvcnQgbXllcnJvciA9IDAs
IHJlcG8gPSAwOworCWNoYXIgb3ZlcmxheV9uYW1lWzY0XSwgcmVwb19zZWFyY2hbNjRdOworCWNo
YXIgKnAsICpzdHI7CiAJY2hhciBkb19jb3VudCwgZG9fcmVnZXg7CiAJY2hhciBzaG93X2ZpbGVu
YW1lOwogCUZJTEUgKmZwOwpAQCAtNDIsMTAgKzQ2LDE1IEBAIGludCBxZ3JlcF9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAljaGFyIGJ1ZjBbQlVGU0laXTsKIAlpbnQgcmVmbGFncyA9IFJF
R19OT1NVQjsKIAljaGFyIGludmVydF9tYXRjaCA9IDA7CisJb3ZlcmxheV90ICpjdXJfb3Zlcmxh
eSwgKm92ZXJsYXlfdG1wOwogCiAJdHlwZWRlZiBjaGFyICooKkZVTkMpIChjaGFyICosIGNoYXIg
Kik7CiAJRlVOQyBzdHJmdW5jID0gKEZVTkMpIHN0cnN0cjsKIAorCWN1cl9vdmVybGF5ID0gb3Zl
cmxheV9nZW50b287CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7
CisKIAlEQkcoImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJn
dlswXSwgYXJnYyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CiAKQEAgLTU4LDkgKzY3LDEzIEBA
IGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCXN0cmZ1bmMgPSAoRlVO
Qykgc3RyY2FzZXN0cjsKIAkJCXJlZmxhZ3MgfD0gUkVHX0lDQVNFOwogCQkJYnJlYWs7CisJCWNh
c2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0gMTsgYnJlYWs7CisJCWNhc2UgJ28nOiAKKwkJCXJlcG8g
PSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gp
KTsKKwkJCWJyZWFrOwogCQljYXNlICdjJzogZG9fY291bnQgPSAxOyBicmVhazsKIAkJY2FzZSAn
ZSc6IGRvX3JlZ2V4ID0gMTsgYnJlYWs7Ci0JCWNhc2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0gMTsg
YnJlYWs7CiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHFncmVwKQogCQl9CiAJfQpAQCAtNzMsNiAr
ODYsMzggQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlyZXR1cm4g
MTsKIAl3aGlsZSAoKGZnZXRzKGVidWlsZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkgIT0gTlVMTCkg
ewogCQlGSUxFICpuZXdmcDsKKwkJaWYgKCAoIHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJ
eworCQkJKnAgPSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJ
CQlwID0gZWJ1aWxkOworCQkJaWYgKCByZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIHAsIHNp
emVvZiggcmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICggc3RyY21wKG92ZXJs
YXlfbmFtZSwgcCkpCisJCQl7CisJCQkJZm9yICggb3ZlcmxheV90bXA9b3ZlcmxheV9nZW50b28g
OyBvdmVybGF5X3RtcC0+bmV4dCA7IG92ZXJsYXlfdG1wPW92ZXJsYXlfdG1wLT5uZXh0ICkKKwkJ
CQl7CisJCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXplb2Yob3Zl
cmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoICEgc3RybmNt
cChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJ
eworCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292
ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycg
ZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJ
CQkJfSBlbHNlIAorCQkJCQlteWVycm9yPTE7CisJCQkJaWYgKCBteWVycm9yKSB7CisJCQkJCW15
ZXJyb3I9MDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1l
LCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJfQorCQkJc3Ry
Y3B5KGVidWlsZCwgc3RyKSA7CisJCX0KKwogCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4n
KSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJaWYgKChuZXdmcCA9IGZvcGVuKGVidWlsZCwgInIi
KSkgIT0gTlVMTCkgewpAQCAtMTAyLDcgKzE0Nyw3IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKIAkJCQljb3VudCsrOwogCQkJCWlmIChkb19jb3VudCkgY29udGludWU7
CiAJCQkJaWYgKHZlcmJvc2UgfHwgc2hvd19maWxlbmFtZSkgewotCQkJCQlwcmludGYoIiVzOiIs
IGVidWlsZCk7IAorCQkJCQlwcmludGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1
aWxkKTsgCiAJCQkJCWlmICh2ZXJib3NlID4gMSkgcHJpbnRmKCIlZDoiLCBsaW5lbm8pOwogCQkJ
CQlwcmludGYoIiAiKTsKIAkJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcv
cXNlYXJjaC5jIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcubmV3L3FzZWFyY2guYwotLS0gcG9ydGFn
ZS11dGlscy0yMDA2MTAwNy9xc2VhcmNoLmMJMjAwNi0xMS0wOCAwNDowMzozNi4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjEwMDcubmV3L3FzZWFyY2guYwkyMDA2LTExLTA5
IDE5OjIwOjUwLjM5NjE3ODcxMSArMDEwMApAQCAtOSwxMCArOSwxMiBAQAogCiAjaWZkZWYgQVBQ
TEVUX3FzZWFyY2gKIAotI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY3NTTkgiIENPTU1PTl9GTEFH
UworI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY286cHNTTkgiIENPTU1PTl9GTEFHUwogc3RhdGlj
IHN0cnVjdCBvcHRpb24gY29uc3QgcXNlYXJjaF9sb25nX29wdHNbXSA9IHsKIAl7ImFsbCIsICAg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAogCXsiY2FjaGUiLCAgICAgbm9fYXJndW1lbnQs
IE5VTEwsICdjJ30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwKKwl7
InNob3ctcGF0aCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAogCXsic2VhcmNoIiwgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdzJ30sCiAJeyJkZXNjIiwgICAgICAgYV9hcmd1bWVudCwgTlVMTCwg
J1MnfSwKIAl7Im5hbWUtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LApAQCAtMjIsNiAr
MjQsOCBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfCiBzdGF0aWMg
Y29uc3QgY2hhciAqcXNlYXJjaF9vcHRzX2hlbHBbXSA9IHsKIAkiTGlzdCB0aGUgZGVzY3JpcHRp
b25zIG9mIGV2ZXJ5IHBhY2thZ2UgaW4gdGhlIGNhY2hlIiwKIAkiVXNlIHRoZSBwb3J0YWdlIGNh
Y2hlIiwKKwkiU2VhcmNoIG9ubHkgaW4gdGhlIDxhcmc+IG92ZXJsYXkiLAorCSJTaG93IHRoZSBw
YXRoIHRvIHRoZSBlYnVpbGQiLAogCSJSZWdleCBzZWFyY2ggcGFja2FnZSBiYXNlbmFtZXMiLAog
CSJSZWdleCBzZWFyY2ggcGFja2FnZSBkZXNjcmlwdGlvbnMiLAogCSJPbmx5IHNob3cgcGFja2Fn
ZSBuYW1lIiwKQEAgLTQwLDEzICs0NCwyMCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIAljaGFyIGxhc3RbMTI2XSA9ICIiOwogCWNoYXIgZHBbMTI2XSA9ICIiOwog
CWNoYXIgYnBbMTI2XSA9ICIiOwotCWNoYXIgKnAsICpxLCAqc3RyOworCXNob3J0IHJlcG8gPSAw
OworCWNoYXIgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgKnAsICpxLCAqc3RyLCBvdmVybGF5X25h
bWVbNjRdOwogCWNoYXIgKnNlYXJjaF9tZSA9IE5VTEw7Ci0JY2hhciBzaG93X2hvbWVwYWdlID0g
MCwgc2hvd19uYW1lX29ubHkgPSAwOworCWNoYXIgc2hvd19ob21lcGFnZSA9IDAsIHNob3dfbmFt
ZV9vbmx5ID0gMCwgc2hvd19wYXRoX3RvX2VidWlsZCA9IDA7CiAJY2hhciBzZWFyY2hfZGVzYyA9
IDAsIHNlYXJjaF9hbGwgPSAwLCBzZWFyY2hfbmFtZSA9IDEsIHNlYXJjaF9jYWNoZSA9IENBQ0hF
X0VCVUlMRDsKIAljb25zdCBjaGFyICpzZWFyY2hfdmFyc1tdID0geyAiREVTQ1JJUFRJT049Iiwg
IkhPTUVQQUdFPSIgfTsKIAlzaXplX3Qgc2VhcmNoX2xlbjsKLQlpbnQgaSwgaWR4PTA7CisJb3Zl
cmxheV90ICpjdXJfb3ZlcmxheSwgKm92ZXJsYXlfdG1wOworCWludCBpLCBpZHg9MCwgbXllcnJv
cj0wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKwlvdmVybGF5X25hbWVbMF0g
PSAwIDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAKIAlEQkcoImFyZ2M9JWQgYXJndlswXT0lcyBh
cmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBhcmd2WzFdIDogIk5V
TEw/Iik7CkBAIC01Niw2ICs2Nyw4IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxc2VhcmNoKQogCQljYXNlICdhJzogc2Vh
cmNoX2FsbCA9IDE7IGJyZWFrOwogCQljYXNlICdjJzogc2VhcmNoX2NhY2hlID0gQ0FDSEVfTUVU
QURBVEE7IGJyZWFrOworCQljYXNlICdvJzogcmVwbyA9IDE7IHN0cm5jcHkocmVwb19zZWFyY2gs
IG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7IGJyZWFrOworCQljYXNlICdwJzogc2hvd19w
YXRoX3RvX2VidWlsZCA9IDE7IGJyZWFrOwogCQljYXNlICdzJzogc2VhcmNoX2Rlc2MgPSAwOyBz
ZWFyY2hfbmFtZSA9IDE7IGJyZWFrOwogCQljYXNlICdTJzogc2VhcmNoX2Rlc2MgPSAxOyBzZWFy
Y2hfbmFtZSA9IDA7IGJyZWFrOwogCQljYXNlICdOJzogc2hvd19uYW1lX29ubHkgPSAxOyBicmVh
azsKQEAgLTkzLDExICsxMDYsMjIgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAq
KmFyZ3YpCiAJCQlpZiAoKHBjYWNoZSA9IGNhY2hlX3JlYWRfZmlsZShlYnVpbGQpKSAhPSBOVUxM
KSB7CiAJCQkJaWYgKChzdHJjbXAocGNhY2hlLT5hdG9tLT5QTiwgbGFzdCkpICE9IDApIHsKIAkJ
CQkJc3RybmNweShsYXN0LCBwY2FjaGUtPmF0b20tPlBOLCBzaXplb2YobGFzdCkpOwotCQkJCQlp
ZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBUSU9O
IDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgPT0gMCkKLQkJCQkJCXByaW50
ZigiJXMlcy8lcyVzJXMgJXNcbiIsIEJPTEQsIHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksIEJMVUUs
Ci0JCQkJCQkgICAgICAgcGNhY2hlLT5hdG9tLT5QTiwgTk9STSwKLQkJCQkJCSAgICAgICAoc2hv
d19uYW1lX29ubHkgPyAiIiA6Ci0JCQkJCQkgICAgICAgIChzaG93X2hvbWVwYWdlID8gcGNhY2hl
LT5IT01FUEFHRSA6IHBjYWNoZS0+REVTQ1JJUFRJT04pKSk7CisJCQkJCWlmICgocmVtYXRjaChz
ZWFyY2hfbWUsIChzZWFyY2hfZGVzYyA/IHBjYWNoZS0+REVTQ1JJUFRJT04gOiBlYnVpbGQpLCBS
RUdfRVhURU5ERUQgfCBSRUdfSUNBU0UpKSA9PSAwKSB7CisJCQkJCQlpZiAoIHNob3dfcGF0aF90
b19lYnVpbGQpIHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMvJXMvXG4i
LAkKKwkJCQkJCQlCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLAorCQkJCQkJCUJMVUUsIHBj
YWNoZS0+YXRvbS0+UE4sCisJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAor
CQkJCQkJCWN1cl9vdmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJfSBlbHNl
IHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJCUJPTEQs
IHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxVRSwgcGNhY2hlLT5hdG9tLT5QTiwK
KwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJKHNob3dfbmFt
ZV9vbmx5ID8gIiIgOiAKKwkJCQkJCQkoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBBR0Ug
OiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQkJfQorCQkJCQl9CiAJCQkJfQogCQkJCWNh
Y2hlX2ZyZWUocGNhY2hlKTsKIAkJCX0gZWxzZSB7CkBAIC0xMTAsNiArMTM0LDQwIEBAIGludCBx
c2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCWNhc2UgQ0FDSEVfRUJVSUxE
OiB7CiAJCQlGSUxFICplYnVpbGRmcDsKKwkJCWlmICggKCBwID0gc3RyY2hyKGVidWlsZCwgJzon
KSkpCisJCQl7CisJCQkJKnAgPSAwOworCQkJCXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMg
Jzo6JyAqLworCQkJCXAgPSBlYnVpbGQ7CisJCQkJaWYgKCByZXBvICYmIHN0cm5jbXAoIHJlcG9f
c2VhcmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYg
KCBzdHJjbXAob3ZlcmxheV9uYW1lLCBwKSkKKwkJCQl7CisJCQkJCWZvciAoIG92ZXJsYXlfdG1w
PW92ZXJsYXlfZ2VudG9vIDsgb3ZlcmxheV90bXAtPm5leHQgOyBvdmVybGF5X3RtcD1vdmVybGF5
X3RtcC0+bmV4dCApCisJCQkJCXsKKwkJCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1wLT5u
YW1lLCBwLCBzaXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCQlicmVhazsKKwkJCQkJ
fQorCQkJCQlpZiAoICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJs
YXlfdG1wLT5uYW1lKSkpCisJCQkJCXsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7
CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3YXJu
cCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJ
CQkJCQlteWVycm9yPTE7CisJCQkJCQl9CisJCQkJCX0gZWxzZSAKKwkJCQkJCW15ZXJyb3I9MTsK
KwkJCQkJaWYgKCBteWVycm9yKSB7CisJCQkJCQlpZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQkJCQl3
YXJuZnAoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMiLCBlYnVpbGQpOworCQkJCQkJcmVpbml0
aWFsaXplID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXN0cm5jcHkob3ZlcmxheV9u
YW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJCX0KKwkJ
CQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQl9CisK
IAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBkaXJuYW1lKHN0cik7
CiAKQEAgLTEzNCwxMCArMTkyLDE5IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCQkJCQkJCS8vIGRvaW5nIG9wZXJhdGlvbnMgd2l0aCB0aGVtLgogCQkJCQkJCXN0
cm5jcHkoZHAsIHAsIHNpemVvZihkcCkpOwogCQkJCQkJCXN0cm5jcHkoYnAsIHAsIHNpemVvZihi
cCkpOwotCQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsIAotCQkJCQkJCQlCT0xELCBk
aXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnApLCBOT1JNLAorCQkJCQkJCWlmICggc2hvd19w
YXRoX3RvX2VidWlsZCkgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMv
JXMvXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnApLAor
CQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJCWN1cl9vdmVy
bGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXBy
aW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUoZHAp
LCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3ZlcmxheS0+bmFtZSwg
Tk9STSwKIAkJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiBxKSk7CisJCQkJCQkJfQogCQkJ
CQkJCWJyZWFrOworCiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJZmNsb3NlKGVidWlsZGZwKTsKZGlm
ZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTAwNy9xdXNlLmMgcG9ydGFnZS11dGlscy0yMDA2
MTAwNy5uZXcvcXVzZS5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMDA3L3F1c2UuYwkyMDA2LTEx
LTA4IDA0OjAzOjM2LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTAwNy5u
ZXcvcXVzZS5jCTIwMDYtMTEtMDkgMTk6MjA6NTAuNDEzMTc2MTI3ICswMTAwCkBAIC0xNCwxMCAr
MTQsMTEgQEAKICBxdXNlIC1LZSAtLSAgbmxzCiAqLwogCi0jZGVmaW5lIFFVU0VfRkxBR1MgImVh
dktMREY6TiIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFVU0VfRkxBR1MgImVhbzp2S0xERjpOIiBD
T01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHRzW10g
PSB7CiAJeyJleGFjdCIsICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAl7ImFsbCIsICAg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAorCXsib3ZlcmxheSIsICAgIGFfYXJndW1lbnQs
IE5VTEwsICdvJ30sCiAJeyJrZXl3b3JkcyIsICBub19hcmd1bWVudCwgTlVMTCwgJ0snfSwKIAl7
ImxpY2Vuc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnTCd9LAogCXsiZGVzY3JpYmUiLCAgbm9f
YXJndW1lbnQsIE5VTEwsICdEJ30sCkBAIC0yOCw2ICsyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0
aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHQKIHN0YXRpYyBjb25zdCBjaGFyICpxdXNlX29wdHNfaGVs
cFtdID0gewogCSJTaG93IGV4YWN0IG5vbiByZWdleHAgbWF0Y2hpbmcgdXNpbmcgc3RyY21wIiwK
IAkiU2hvdyBhbm5veWluZyB0aGluZ3MgaW4gSVVTRSIsCisJIk9ubHkgY29uc2lkZXIgdGhlIDxh
cmc+IG92ZXJsYXkiLAogCSJVc2UgdGhlIEtFWVdPUkRTIHZzIElVU0UiLAogCSJVc2UgdGhlIExJ
Q0VOU0UgdnMgSVVTRSIsCiAJIkRlc2NyaWJlIHRoZSBVU0UgZmxhZyIsCkBAIC0zOCw3ICs0MCw3
IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxdXNlX29wdHNfaGVscFtdID0gewogc3RhdGljIGNvbnN0
IGNoYXIgcXVzZV9yY3NpZFtdID0gIiRJZDogcXVzZS5jLHYgMS41MiAyMDA2LzA2LzEwIDE0OjAx
OjIxIHZhcGllciBFeHAgJCI7CiAjZGVmaW5lIHF1c2VfdXNhZ2UocmV0KSB1c2FnZShyZXQsIFFV
U0VfRkxBR1MsIHF1c2VfbG9uZ19vcHRzLCBxdXNlX29wdHNfaGVscCwgbG9va3VwX2FwcGxldF9p
ZHgoInF1c2UiKSkKIAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpOworaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBzaG9ydCByZXBv
LCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJndik7CiAKIGNoYXIgcXVz
ZV9uYW1lX29ubHkgPSAwOwogCkBAIC04MCw3ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2hp
Z2hsaWdodGVkX3VzZV9mbGFncygKIAl9CiB9CiAKLWludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50
IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQg
aW5kLCBzaG9ydCByZXBvLCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJn
dikKIHsKICNkZWZpbmUgTlVNX1NFQVJDSF9GSUxFUyBBUlJfU0laRShzZWFyY2hfZmlsZXMpCiAJ
Y2hhciBidWZbQlVGU0laRV0sICpwOwpAQCAtOTAsMTIxICs5MiwxNjIgQEAgaW50IHF1c2VfZGVz
Y3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYwogCUZJTEUgKmZwW05VTV9TRUFSQ0hfRklMRVNd
OwogCURJUiAqZDsKIAlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5
OwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgewotCQlzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvJXMiLCBwb3J0ZGlyLCBzZWFyY2hfZmls
ZXNbaV0pOwotCQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQotCQkJd2Fy
bnAoInNraXBwaW5nICVzIiwgc2VhcmNoX2ZpbGVzW2ldKTsKLQl9CisJY3VyX292ZXJsYXk9b3Zl
cmxheV9nZW50b287CiAKLQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspIHsKLQkJcyA9IHN0
cmxlbihhcmd2W2ldKTsKKwlkbyB7CisJCWlmICggcmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNo
LCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKCByZXBvX3NlYXJjaCkpKQorCQkJY29udGludWU7
CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKKwkJCXNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy8lcyIsIGN1cl9vdmVybGF5LT5wYXRoLCBz
ZWFyY2hfZmlsZXNbaV0pOworCQkJaWYgKChmcFtpXSA9IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVM
TCkKKwkJCQlpZiAoIHZlcmJvc2UgKQorCQkJCQl3YXJucCgic2tpcHBpbmcgJXMgZm9yIHRoZSAl
cyBvdmVybGF5Iiwgc2VhcmNoX2ZpbGVzW2ldLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCX0KIAot
CQlmb3IgKGYgPSAwOyBmIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7Ci0JCQlpZiAoZnBbZl0g
PT0gTlVMTCkKLQkJCQljb250aW51ZTsKKwkJZm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7
CisJCQlzID0gc3RybGVuKGFyZ3ZbaV0pOwogCi0JCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2Yo
YnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKLQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0g
PT0gJ1xuJykKKwkJCWZvciAoZiA9IDA7IGYgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIHsKKwkJ
CQlpZiAoZnBbZl0gPT0gTlVMTCkKIAkJCQkJY29udGludWU7CiAKLQkJCQlpZiAoKHAgPSBzdHJy
Y2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJCSpwID0gJ1wwJzsKKwkJCQl3aGlsZSAoZmdl
dHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKKwkJCQkJaWYgKGJ1ZlswXSA9
PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCQljb250aW51ZTsKIAotCQkJCXN3aXRjaCAo
ZikgewotCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1c2UuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJu
Y21wKGJ1ZiwgYXJndltpXSwgcykpCi0JCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3Mr
MV0gPT0gJy0nKSB7Ci0JCQkJCQkJCXByaW50ZigiICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwg
Qk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7Ci0JCQkJCQkJCWdvdG8g
c2tpcF9maWxlOwotCQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQlpZiAoKHAgPSBzdHJyY2hy
KGJ1ZiwgJ1xuJykpICE9IE5VTEwpCisJCQkJCQkqcCA9ICdcMCc7CiAKLQkJCQkJY2FzZSAxOiAv
KiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLwotCQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzon
KSkgPT0gTlVMTCkKKwkJCQkJc3dpdGNoIChmKSB7CisJCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1
c2UuZGVzYyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJCQkJ
CQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlmICgg
Y3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCQkJCXByaW50ZigiICVzZ2xv
YmFsJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVm
K3MrMyk7CisJCQkJCQkJCQllbHNlIAorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNnbG9iYWwl
czolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJ
fQogCQkJCQkJCWJyZWFrOwotCQkJCQkJKytwOwotCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFyZ3Zb
aV0sIHMpKSB7Ci0JCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysxXSA9PSAnLScpIHsKLQkJ
CQkJCQkJKnAgPSAnXDAnOwotCQkJCQkJCQlwcmludGYoIiAlc2xvY2FsJXM6JXMlcyVzOiVzJXMl
cyAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JN
LCBwK3MrMyk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJYnJlYWs7CiAKLQkJCQkJY2FzZSAy
OiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLwotCQkJCQkJaWYgKCFzdHJjbXAoYnVmLCBh
cmd2W2ldKSkgewotCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMlczogJXMgYXJjaGl0ZWN0
dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBhcmd2W2ldKTsKLQkJCQkJ
CQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAxOiAv
KiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLworCQkJCQkJCWlmICgocCA9IHN0cmNocihidWYsICc6
JykpID09IE5VTEwpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCSsrcDsKKwkJCQkJCQlpZiAoIXN0
cm5jbXAocCwgYXJndltpXSwgcykpIHsKKwkJCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysx
XSA9PSAnLScpIHsKKwkJCQkJCQkJCSpwID0gJ1wwJzsKKwkJCQkJCQkJCWlmICggY3VyX292ZXJs
YXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCQkJCXByaW50ZigiICVzbG9jYWwlczolcyVz
JXM6JXMlcyVzICVzXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBCT0xELCBi
dWYsIE5PUk0sIHArcyszKTsKKwkJCQkJCQkJCWVsc2UgCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVz
KSAlc2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQs
IE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJ
CQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOwogCi0JCQkJCWNhc2UgMzogLyogTGFuZ3Vh
Z2VzIGxhbmcuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCi0J
CQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCXBy
aW50ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBh
cmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBh
cmNoLmxpc3QgKi8KKwkJCQkJCQlpZiAoIXN0cmNtcChidWYsIGFyZ3ZbaV0pKSB7CisJCQkJCQkJ
CWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCQkJcHJpbnRmKCIg
JXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1cmVcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOworCQkJCQkJCQllbHNlIAorCQkJCQkJCQkJcHJpbnRmKCIg
KCVzKSAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgY3VyX292ZXJsYXktPm5h
bWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwogCQkJCQkJCQln
b3RvIHNraXBfZmlsZTsKIAkJCQkJCQl9Ci0JCQkJCQlicmVhazsKKwkJCQkJCQlicmVhazsKKwor
CQkJCQkJY2FzZSAzOiAvKiBMYW5ndWFnZXMgbGFuZy5kZXNjICovCisJCQkJCQkJaWYgKCFzdHJu
Y21wKGJ1ZiwgYXJndltpXSwgcykpCisJCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1Zltz
KzFdID09ICctJykgeworCQkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRv
byApCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNsYW5nJXM6JXMlcyVzOiAlcyBsaW5ndWFcbiIsIEJP
TEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZWxzZSAK
KwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBj
dXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3Mr
Myk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJfQorCQkJCQkJCWJyZWFrOwor
CQkJCQl9CiAJCQkJfQotCQkJfQogCiBza2lwX2ZpbGU6Ci0JCQlyZXdpbmQoZnBbZl0pOworCQkJ
CXJld2luZChmcFtmXSk7CisJCQl9CisKKwkJCWlmICggaSA9PSAoYXJnYyAtIDEpICkKKwkJCQlm
b3IgKGY9MDsgZjxOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIAorCQkJCQlpZiAoIGZwW2ZdICkgewor
CQkJCQkJZmNsb3NlKGZwW2ZdKTsKKwkJCQkJCWZwW2ZdID0gTlVMTDsKKwkJCQkJfQogCQl9Ci0J
fQogCi0JZm9yIChmPTA7IGY8TlVNX1NFQVJDSF9GSUxFUzsgKytmKQotCQlmY2xvc2UoZnBbZl0p
OworCX0gd2hpbGUgKCAoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAogCS8qIG5v
dyBzY2FuIHRoZSBkZXNjIGRpciAqLwotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9w
cm9maWxlcy9kZXNjLyIsIHBvcnRkaXIpOwotCWQgPSBvcGVuZGlyKGJ1Zik7Ci0Jd2hpbGUgKChk
ZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKLQkJaWYgKHN0cmNtcChkZS0+ZF9uYW1lK3N0cmxl
bihkZS0+ZF9uYW1lKS01LCAiLmRlc2MiKSkKKwljdXJfb3ZlcmxheT1vdmVybGF5X2dlbnRvbzsK
KwlkbyB7CisJCWlmICggcmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBjdXJfb3ZlcmxheS0+
bmFtZSwgc2l6ZW9mKCByZXBvX3NlYXJjaCkpKQogCQkJY29udGludWU7Ci0KLQkJc25wcmludGYo
YnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvJXMiLCBwb3J0ZGlyLCBkZS0+ZF9u
YW1lKTsKLQkJaWYgKChmcFswXT1mb3BlbihidWYsICJyIikpID09IE5VTEwpIHsKLQkJCXdhcm4o
IkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmc7IHNraXBwaW5nIiwgZGUtPmRfbmFtZSk7
CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNjLyIsIGN1cl9v
dmVybGF5LT5wYXRoKTsKKwkJaWYgKCAhIChkID0gb3BlbmRpcihidWYpKSkgeworCQkJaWYgKCB2
ZXJib3NlICkgCisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJXMgLT4gc2tpcHBpbmciLCBidWYp
OyAKIAkJCWNvbnRpbnVlOwogCQl9CisJCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxM
KSB7CisJCQlpZiAoc3RyY21wKGRlLT5kX25hbWUrc3RybGVuKGRlLT5kX25hbWUpLTUsICIuZGVz
YyIpKQorCQkJCWNvbnRpbnVlOwogCi0JCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBm
cFswXSkgIT0gTlVMTCkgewotCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicp
CisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIGN1
cl9vdmVybGF5LT5wYXRoLCBkZS0+ZF9uYW1lKTsKKwkJCWlmICgoZnBbMF09Zm9wZW4oYnVmLCAi
ciIpKSA9PSBOVUxMKSB7CisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGlu
Zzsgc2tpcHBpbmciLCBkZS0+ZF9uYW1lKTsKIAkJCQljb250aW51ZTsKKwkJCX0KKworCQkJd2hp
bGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7CisJCQkJaWYgKGJ1
ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAo
KHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJKnAgPSAnXDAnOworCQkJCWlm
ICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKKwkJCQkJKnAgPSAnXDAnOwogCi0J
CQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CisJCQkJaWYgKChwID0gc3Ry
Y2hyKGJ1ZiwgJy0nKSkgPT0gTlVMTCkgewogaW52YWxpZF9saW5lOgotCQkJCXdhcm4oIkludmFs
aWQgbGluZSBpbiAnJXMnOiAlcyIsIGRlLT5kX25hbWUsIGJ1Zik7Ci0JCQkJY29udGludWU7Ci0J
CQl9Ci0JCQl3aGlsZSAocFstMV0gIT0gJyAnICYmIHBbMV0gIT0gJyAnKSB7Ci0JCQkJLyogbWF5
YmUgdGhlIGZsYWcgaGFzIGEgJy0nIGluIGl0IC4uLiAqLwotCQkJCWlmICgocCA9IHN0cmNocihw
KzEsICctJykpID09IE5VTEwpCi0JCQkJCWdvdG8gaW52YWxpZF9saW5lOwotCQkJfQotCQkJcFst
MV0gPSAnXDAnOwotCQkJcCArPSAyOworCQkJCQl3YXJuKCJJbnZhbGlkIGxpbmUgaW4gJyVzJzog
JXMiLCBkZS0+ZF9uYW1lLCBidWYpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJd2hpbGUg
KHBbLTFdICE9ICcgJyAmJiBwWzFdICE9ICcgJykgeworCQkJCQkvKiBtYXliZSB0aGUgZmxhZyBo
YXMgYSAnLScgaW4gaXQgLi4uICovCisJCQkJCWlmICgocCA9IHN0cmNocihwKzEsICctJykpID09
IE5VTEwpCisJCQkJCQlnb3RvIGludmFsaWRfbGluZTsKKwkJCQl9CisJCQkJcFstMV0gPSAnXDAn
OworCQkJCXAgKz0gMjsKIAotCQkJZm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKQotCQkJCWlm
ICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpCi0JCQkJCXByaW50ZigiICVzJXMlczolcyVzJXM6ICVz
XG4iLCBCT0xELCBkZS0+ZF9uYW1lLCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKLQkJ
fQotCQljbG9zZShmKTsKLQl9Ci0JY2xvc2VkaXIoZCk7CisJCQkJZm9yIChpID0gaW5kOyBpIDwg
YXJnYzsgaSsrKQorCQkJCQlpZiAoIXN0cmNtcChhcmd2W2ldLCBidWYpKSB7CisJCQkJCQlpZiAo
IGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vICkKKwkJCQkJCQlwcmludGYoIiAlcyVzJXM6
JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9S
TSwgcCk7CisJCQkJCQllbHNlCisJCQkJCQkJcHJpbnRmKCIgKCVzKSAlcyVzJXM6JXMlcyVzOiAl
c1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIHApOworCQkJCQl9CiAKKwkJCX0KKwkJCWZjbG9zZShmcFswXSk7CisJCX0K
KwkJY2xvc2VkaXIoZCk7CisJfSB3aGlsZSAoIChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4
dCkpOwogCXJldHVybiAwOwogfQogCiBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIHsKIAlGSUxFICpmcDsKLQljaGFyICpwOworCWNoYXIgKnAsICpzdHI7CisJc2hvcnQgbXll
cnJvciA9IDAsIHJlcG8gPSAwOworCWNoYXIgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgb3Zlcmxh
eV9uYW1lWzY0XTsKIAogCWNoYXIgYnVmMFtfUV9QQVRIX01BWF07CiAJY2hhciBidWYxW19RX1BB
VEhfTUFYXTsKQEAgLTIxNyw2ICsyNjAsMTEgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJc2hvcnQgcXVzZV9hbGwgPSAwOwogCWludCByZWdleHBfbWF0Y2hpbmcgPSAx
LCBpLCBpZHggPSAwOwogCXNpemVfdCBzZWFyY2hfbGVuOworCW92ZXJsYXlfdCAqY3VyX292ZXJs
YXksICpvdmVybGF5X3RtcDsKKworCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50b287CisJb3Zl
cmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAKIAlEQkcoImFyZ2M9JWQg
YXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBh
cmd2WzFdIDogIk5VTEw/Iik7CkBAIC0yMjUsNiArMjczLDEwIEBAIGludCBxdXNlX21haW4oaW50
IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlzd2l0Y2ggKGkpIHsKIAkJY2FzZSAnZSc6IHJlZ2V4cF9t
YXRjaGluZyA9IDA7IGJyZWFrOwogCQljYXNlICdhJzogcXVzZV9hbGwgPSAxOyBicmVhazsKKwkJ
Y2FzZSAnbyc6IAorCQkJcmVwbyA9IDE7CisJCQlzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcs
IHNpemVvZihyZXBvX3NlYXJjaCkpOworCQkJYnJlYWs7CiAJCWNhc2UgJ0snOiBpZHggPSAxOyBi
cmVhazsKIAkJY2FzZSAnTCc6IGlkeCA9IDI7IGJyZWFrOwogCQljYXNlICdEJzogaWR4ID0gLTE7
IGJyZWFrOwpAQCAtMjMzLDExICsyODUsMTQgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHF1c2UpCiAJCX0KIAl9Ci0JaWYgKGFy
Z2MgPT0gb3B0aW5kICYmICFxdXNlX2FsbCAmJiBpZHggPj0gMCkKKwlpZiAoYXJnYyA9PSBvcHRp
bmQgJiYgIXF1c2VfYWxsICYmIGlkeCA+PSAwKSB7CisJCWlmICggaWR4ID09IDMgKQorCQkJZnJl
ZShzZWFyY2hfdmFycytpZHgpOwogCQlxdXNlX3VzYWdlKEVYSVRfRkFJTFVSRSk7CisJfQogCiAJ
aWYgKGlkeCA9PSAtMSkKLQkJcmV0dXJuIHF1c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIGFyZ2Ms
IGFyZ3YpOworCQlyZXR1cm4gcXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgcmVwbywgcmVwb19z
ZWFyY2gsIGFyZ2MsIGFyZ3YpOwogCiAJaWYgKHF1c2VfYWxsKSBvcHRpbmQgPSBhcmdjOwogCWlu
aXRpYWxpemVfZWJ1aWxkX2ZsYXQoKTsJLyogc2V0cyBvdXIgcHdkIHRvICRQT1JURElSICovCkBA
IC0yNDksNiArMzA0LDQxIEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
CQlyZXR1cm4gMTsKIAl3aGlsZSAoKGZnZXRzKGVidWlsZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkg
IT0gTlVMTCkgewogCQlGSUxFICpuZXdmcDsKKwkJaWYgKCAoIHAgPSBzdHJjaHIoZWJ1aWxkLCAn
OicpKSkKKwkJeworCQkJKnAgPSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAn
OjonICovCisJCQlwID0gZWJ1aWxkOworCQkJaWYgKCByZXBvICYmIHN0cm5jbXAoIHJlcG9fc2Vh
cmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICggc3Ry
Y21wKG92ZXJsYXlfbmFtZSwgcCkpCisJCQl7CisJCQkJZm9yICggb3ZlcmxheV90bXA9b3Zlcmxh
eV9nZW50b28gOyBvdmVybGF5X3RtcC0+bmV4dCA7IG92ZXJsYXlfdG1wPW92ZXJsYXlfdG1wLT5u
ZXh0ICkKKwkJCQl7CisJCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBz
aXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAo
ICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1l
KSkpCisJCQkJeworCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hk
aXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JU
RElSICclcycgZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOwor
CQkJCQl9CisJCQkJfSBlbHNlIAorCQkJCQlteWVycm9yPTE7CisJCQkJaWYgKCBteWVycm9yKSB7
CisJCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQkJd2FybmYoIihjYWNoZSB1cGRhdGUgcGVu
ZGluZykgJXMgOiAlcyIsIGVidWlsZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQkJcmVpbml0aWFs
aXplID0gMTsKKwkJCQkJbXllcnJvcj0wOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJc3Ry
bmNweShvdmVybGF5X25hbWUsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2Yob3ZlcmxheV9uYW1l
KSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsKKwkJfQorCiAJCWlmICgocCA9IHN0
cmNocihlYnVpbGQsICdcbicpKSAhPSBOVUxMKQogCQkJKnAgPSAwOwogCQlpZiAoKG5ld2ZwID0g
Zm9wZW4oZWJ1aWxkLCAiciIpKSAhPSBOVUxMKSB7CkBAIC0zNzQsNyArNDY0LDcgQEAgaW50IHF1
c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWlmICh2ZXJib3NlID4gMykKIAkJ
CQkJCXByaW50ZigiJXMgJXMgJXMgIiwgKnVzZXIgPyB1c2VyIDogIk1JU1NJTkciLCAqcmV2aXNp
b24gPyByZXZpc2lvbiA6ICJNSVNTSU5HIiwgKmRhdGUgPyBkYXRlIDogIk1JU1NJTkciKTsKIAot
CQkJCQlwcmludGYoIiVzJXMlcyAiLCBDWUFOLCBlYnVpbGQsIE5PUk0pOworCQkJCQlwcmludGYo
IiVzJXM6OiVzJXMgIiwgQ1lBTiwgY3VyX292ZXJsYXktPm5hbWUsIGVidWlsZCwgTk9STSk7CiAJ
CQkJCXByaW50X2hpZ2hsaWdodGVkX3VzZV9mbGFncygmYnVmMFtzZWFyY2hfbGVuKzFdLCBvcHRp
bmQsIGFyZ2MsIGFyZ3YpOwogCQkJCQlwdXRzKE5PUk0pOwogCQkJCQlpZiAodmVyYm9zZSA+IDEp
IHsKQEAgLTM4Miw3ICs0NzIsNyBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAkJCQkJCWludCBBUkdDID0gMDsKIAkJCQkJCW1ha2Vhcmd2KCZidWYwW3NlYXJjaF9sZW4r
MV0sICZBUkdDLCAmQVJHVik7CiAJCQkJCQlpZiAoQVJHQyA+IDApIHsKLQkJCQkJCQlxdXNlX2Rl
c2NyaWJlX2ZsYWcoMSwgQVJHQywgQVJHVik7CisJCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEs
IHJlcG8sIHJlcG9fc2VhcmNoLCBBUkdDLCBBUkdWKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwg
QVJHQzsgaSsrKQogCQkJCQkJCQlmcmVlKEFSR1ZbaV0pOwogCQkJCQkJCWZyZWUoQVJHVik7Cg==
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101575</attachid>
            <date>2006-11-09 15:14 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMC9hcHBsZXRzLmggcG9ydGFnZS11dGls
cy0yMDA2MTExMC5uZXcvYXBwbGV0cy5oCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTEwL2FwcGxl
dHMuaAkyMDA2LTExLTExIDAwOjQ4OjM5LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGls
cy0yMDA2MTExMC5uZXcvYXBwbGV0cy5oCTIwMDYtMTEtMTEgMDA6NTY6MjQuODI3MjM4ODM3ICsw
MTAwCkBAIC01Myw3ICs1Myw2IEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJeyJxY2hlY2siLCAgICBx
Y2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMi
fSwKIAl7InFkZXBlbmRzIiwgIHFkZXBlbmRzX21haW4sICAiPHBrZ25hbWU+IiwgICAgICAgInNo
b3cgZGVwZW5kZW5jeSBpbmZvIn0sCiAJeyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAgICAgIjxm
aWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmluZyBmaWxlcyJ9LAotCXsicWdsc2Ei
LCAgICAgcWdsc2FfbWFpbiwgICAgICI8YWN0aW9uPiA8bGlzdD4iLCAiY2hlY2sgR0xTQXMgYWdh
aW5zdCBzeXN0ZW0ifSwKIAl7InFncmVwIiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJn
cz4iLCAgICAgImdyZXAgaW4gZWJ1aWxkcyJ9LAogCXsicWxpc3QiLCAgICAgcWxpc3RfbWFpbiwg
ICAgICI8cGtnbmFtZT4iLCAgICAgICAibGlzdCBmaWxlcyBvd25lZCBieSBwa2duYW1lIn0sCiAJ
eyJxbG9wIiwgICAgICBxbG9wX21haW4sICAgICAgIjxwa2duYW1lPiIsICAgICAgICJlbWVyZ2Ug
bG9nIGFuYWx5emVyIn0sCkBAIC02NSw2ICs2NCw3IEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJeyJx
dGJ6MiIsICAgICBxdGJ6Ml9tYWluLCAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJtYW5pcHVsYXRl
IHRiejIgcGFja2FnZXMifSwKIAl7InF1c2UiLCAgICAgIHF1c2VfbWFpbiwgICAgICAiPHVzZWZs
YWc+IiwgICAgICAgImZpbmQgcGtncyB1c2luZyB1c2VmbGFncyJ9LAogCXsicXhwYWsiLCAgICAg
cXhwYWtfbWFpbiwgICAgICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB4cGFrIGFyY2hp
dmVzIn0sCisJeyJxZ2xzYSIsICAgICBxZ2xzYV9tYWluLCAgICAgIjxhY3Rpb24+IDxsaXN0PiIs
IE5VTEx9LAkJLyogImNoZWNrIEdMU0FzIGFnYWluc3Qgc3lzdGVtIiAqLwogCiAKIAkvKiBhbGlh
c2VzIGZvciBlcXVlcnkgY2FwYXRhYmlsaXR5ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTAvbWFpbi5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAubmV3L21haW4uYwotLS0gcG9y
dGFnZS11dGlscy0yMDA2MTExMC9tYWluLmMJMjAwNi0xMS0xMSAwMDo0ODozOS4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAubmV3L21haW4uYwkyMDA2LTExLTExIDAy
OjM5OjQ2LjYyNjQyMjA1MyArMDEwMApAQCAtNzEsNiArNzEsNyBAQCBpbnQgcmVtYXRjaChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgCiBzdGF0aWMgY2hhciAqcm1zcGFjZShjaGFyICopOwog
CiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCk7Cit2b2lkIGluaXRpYWxpemVfb3Zl
cmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pOwogdm9pZCBpbml0aWFsaXplX2VidWlsZF9m
bGF0KHZvaWQpOwogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJl
aW5pdGlhbGl6ZV9hc19uZWVkZWQodm9pZCk7CkBAIC04NSwxMyArODYsMjEgQEAgc3RhdGljIGlu
dCBxdWlldCA9IDA7CiBzdGF0aWMgY2hhciBwcmV0ZW5kID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZSA9IDA7CiBzdGF0aWMgY2hhciByZWluaXRpYWxpemVfbWV0YWNhY2hlID0gMDsKLXN0
YXRpYyBjaGFyIHBvcnRkaXJbX1FfUEFUSF9NQVhdID0gIi91c3IvcG9ydGFnZSI7CiBzdGF0aWMg
Y2hhciBwb3J0YXJjaFsyMF0gPSAiIjsKIHN0YXRpYyBjaGFyIHBvcnR2ZGJbXSA9ICJ2YXIvZGIv
cGtnIjsKIHN0YXRpYyBjaGFyIHBvcnRjYWNoZWRpcltdID0gIm1ldGFkYXRhL2NhY2hlIjsKIHN0
YXRpYyBjaGFyIHBvcnRyb290W19RX1BBVEhfTUFYXSA9ICIvIjsKIHN0YXRpYyBjaGFyIGNvbmZp
Z19wcm90ZWN0W19RX1BBVEhfTUFYXSA9ICIvZXRjLyI7CiAKK3R5cGVkZWYgc3RydWN0IG92ZXJs
YXlfdCBvdmVybGF5X3Q7CitzdHJ1Y3Qgb3ZlcmxheV90IHsKKwljaGFyIG5hbWVbNjRdOworCWNo
YXIgcGF0aFtfUV9QQVRIX01BWF07CisJc3RydWN0IG92ZXJsYXlfdCAqbmV4dDsKK307CisKK3N0
YXRpYyBvdmVybGF5X3QgKm92ZXJsYXlfZ2VudG9vID0gTlVMTDsKKwogY2hhciBwa2dkaXJbNTEy
XSA9ICIvdXNyL3BvcnRhZ2UvcGFja2FnZXMvIjsKIGNoYXIgcG9ydF90bXBkaXJbNTEyXSA9ICIv
dmFyL3RtcC9wb3J0YWdlLyI7CiAKQEAgLTIwMSwxMCArMjEwLDEwIEBAIHN0YXRpYyB2b2lkIHVz
YWdlKGludCBzdGF0dXMsIGNvbnN0IGNoYXIKIAlmb3IgKGkgPSAwOyBvcHRzW2ldLm5hbWU7ICsr
aSkgewogCQlhc3NlcnQoaGVscFtpXSAhPSBOVUxMKTsgLyogdGhpcyBhc3NlcnQgaXMgYSBsaWZl
IHNhdmVyIHdoZW4gYWRkaW5nIG5ldyBhcHBsZXRzLiAqLwogCQlpZiAob3B0c1tpXS5oYXNfYXJn
ID09IG5vX2FyZ3VtZW50KQotCQkJcHJpbnRmKCIgIC0lYywgLS0lLTE1cyVzKiVzICVzXG4iLCBv
cHRzW2ldLnZhbCwKKwkJCXByaW50ZigiICAtJWMsIC0tJS0xNnMlcyolcyAlc1xuIiwgb3B0c1tp
XS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBSRUQsIE5PUk0sIF8oaGVscFtpXSkpOwogCQllbHNl
Ci0JCQlwcmludGYoIiAgLSVjLCAtLSUtOHMgJXM8YXJnPiVzICVzKiVzICVzXG4iLCBvcHRzW2ld
LnZhbCwKKwkJCXByaW50ZigiICAtJWMsIC0tJS05cyAlczxhcmc+JXMgJXMqJXMgJXNcbiIsIG9w
dHNbaV0udmFsLAogCQkJCW9wdHNbaV0ubmFtZSwgREtCTFVFLCBOT1JNLCBSRUQsIE5PUk0sIF8o
aGVscFtpXSkpOwogCX0KIAlleGl0KHN0YXR1cyk7CkBAIC00NjksMTcgKzQ3OCw3OSBAQCBjaGFy
ICpzdHJpbmNyX3Zhcihjb25zdCBjaGFyICpuYW1lLCBjaGFyCiAJcmV0dXJuIChjaGFyICopIHZh
bHVlOwogfQogCit2b2lkIGluaXRpYWxpemVfb3ZlcmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5
W10pCit7CisJc2hvcnQgbWVycm9yID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpFXSwgZmlsZVtfUV9Q
QVRIX01BWF0sICpzLCAqcCwgKnQ7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKKwlGSUxFICpy
ZXBvX25hbWVGUDsKKwlzID0gcG9ydGRpcl9vdmVybGF5OworCWN1cl9vdmVybGF5ID0gb3Zlcmxh
eV9nZW50b287CisKKwl3aGlsZSAoKnMpIHsKKwkJY3VyX292ZXJsYXktPm5leHQgPSB4bWFsbG9j
ICggc2l6ZW9mICgqY3VyX292ZXJsYXktPm5leHQpKTsKKwkJY3VyX292ZXJsYXkgPSBjdXJfb3Zl
cmxheS0+bmV4dDsKKwkJY3VyX292ZXJsYXktPm5leHQgPSBOVUxMOworCisJCWlmICggKHA9c3Ry
Y2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc3RybmNweShjdXJfb3ZlcmxheS0+cGF0aCwg
cywgc2l6ZW9mKGN1cl9vdmVybGF5LT5wYXRoKSk7CisKKwkJLyogZmluZCB0aGUgbmFtZSBmb3Ig
dGhlIG92ZXJsYXkgKi8KKwkJc3RybmNweShmaWxlLCBjdXJfb3ZlcmxheS0+cGF0aCwgX1FfUEFU
SF9NQVgpOworCQlzdHJuY2F0KGZpbGUsICIvcHJvZmlsZXMvcmVwb19uYW1lIiwgX1FfUEFUSF9N
QVgpOworCQlpZiAoKCByZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikgKSkKKwkJeworCQkJ
aWYgKCAhICggZmdldHMoYnVmLCBzaXplb2YoYnVmKSxyZXBvX25hbWVGUCkpICkKKwkJCQltZXJy
b3IrKzsKKworCQkJcm1zcGFjZShidWYpOworCQkJaWYgKCAodCA9IHN0cmNocihidWYsJ1xuJykp
KQorCQkJCSp0ID0gMDsKKworCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVmLCBzaXpl
b2YoY3VyX292ZXJsYXktPm5hbWUpKTsKKworCQkJZmNsb3NlKHJlcG9fbmFtZUZQKTsKKworCQl9
IGVsc2UgCisJCQltZXJyb3IrKzsKKworCQlpZiAobWVycm9yKSB7CisJCQkvKiBkZWxldGUgdHJh
aWxpbmcgJy8nICovCisJCQl0ID0gY3VyX292ZXJsYXktPnBhdGggKyBzdHJsZW4oY3VyX292ZXJs
YXktPnBhdGgpIC0gMTsKKwkJCWlmICggKnQgPT0gJy8nICkKKwkJCQkqdCA9IDA7CisKKwkJCXN0
cm5jcHkoY3VyX292ZXJsYXktPm5hbWUsIGJhc2VuYW1lKGN1cl9vdmVybGF5LT5wYXRoKSwgc2l6
ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7CisJCQltZXJyb3I9MDsKKwkJfQorCisJCWlmIChwKQor
CQkJcyA9IHArMTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCQorfQorCisKIHZvaWQgaW5pdGlh
bGl6ZV9wb3J0YWdlX2Vudih2b2lkKQogewogCWNoYXIgbm9jb2xvciA9IDA7CiAJaW50IGksIGY7
CiAJc3RydWN0IHN0YXQgc3Q7CiAJRklMRSAqZnA7CisJY2hhciB0bXBfcG9ydGRpcltfUV9QQVRI
X01BWF07CisJY2hhciBwb3J0ZGlyX292ZXJsYXlbMjA0OF0gPSAiIjsKKwogCWNoYXIgYnVmW0JV
RlNJWkVdLCAqcywgKnA7CiAKIAljaGFyIHByb2ZpbGVbX1FfUEFUSF9NQVhdLCBwb3J0YWdlX2Zp
bGVbX1FfUEFUSF9NQVhdOworCiAJY29uc3QgY2hhciAqZmlsZXNbXSA9IHtwb3J0YWdlX2ZpbGUs
ICIvZXRjL21ha2UuZ2xvYmFscyIsICIvZXRjL21ha2UuY29uZiJ9OwogCXR5cGVkZWYgZW51bSB7
IF9RX0JPT0wsIF9RX1NUUiwgX1FfSVNUUiB9IHZhcl90eXBlczsKKwkKIAlzdHJ1Y3QgewogCQlj
b25zdCBjaGFyICpuYW1lOwogCQljb25zdCBzaXplX3QgbmFtZV9sZW47CkBAIC00OTMsMTMgKzU2
NCwxOSBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJeyJDT05GSUdfUFJP
VEVDVCIsICAgMTQsIF9RX1NUUiwgIGNvbmZpZ19wcm90ZWN0LCBzaXplb2YoY29uZmlnX3Byb3Rl
Y3QpfSwKIAkJeyJOT0NPTE9SIiwgICAgICAgICAgIDcsIF9RX0JPT0wsICZub2NvbG9yLCAgICAg
ICAxfSwKIAkJeyJGRUFUVVJFUyIsICAgICAgICAgIDgsIF9RX0lTVFIsIGZlYXR1cmVzLCAgICAg
ICBzaXplb2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9RX1NUUiwg
IHBvcnRkaXIsICAgICAgICBzaXplb2YocG9ydGRpcil9LAorCQl7IlBPUlRESVIiLCAgICAgICAg
ICAgNywgX1FfU1RSLCAgdG1wX3BvcnRkaXIsICAgIHNpemVvZih0bXBfcG9ydGRpcil9LAorCQl7
IlBPUlRESVJfT1ZFUkxBWSIsICAxNSwgX1FfSVNUUiwgcG9ydGRpcl9vdmVybGF5LHNpemVvZihw
b3J0ZGlyX292ZXJsYXkpfSwKIAkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgMTUsIF9RX1NUUiwgIGJp
bmhvc3QsICAgICAgICBzaXplb2YoYmluaG9zdCl9LAogCQl7IlBPUlRBR0VfVE1QRElSIiwgICAx
NCwgX1FfU1RSLCAgcG9ydF90bXBkaXIsICAgIHNpemVvZihwb3J0X3RtcGRpcil9LAogCQl7IlBL
R0RJUiIsICAgICAgICAgICAgNiwgX1FfU1RSLCAgcGtnZGlyLCAgICAgICAgIHNpemVvZihwa2dk
aXIpfSwKIAkJeyJST09UIiwgICAgICAgICAgICAgIDQsIF9RX1NUUiwgIHBvcnRyb290LCAgICAg
ICBzaXplb2YocG9ydHJvb3QpfQogCX07CiAKKwlvdmVybGF5X2dlbnRvbyA9IChvdmVybGF5X3Qq
KSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlzdHJjcHkob3ZlcmxheV9nZW50
b28tPm5hbWUsImdlbnRvbyIpOworCXN0cmNweShvdmVybGF5X2dlbnRvby0+cGF0aCwiL3Vzci9w
b3J0YWdlIik7CisJb3ZlcmxheV9nZW50b28tPm5leHQgPSBOVUxMOworCiAJaWYgKChwID0gc3Ry
Y2hyKHBvcnRyb290LCAnLycpKSAhPSBOVUxMKQogCQlpZiAoc3RybGVuKHApICE9IDEpCiAJCQlz
dHJuY2F0KHBvcnRyb290LCAiLyIsIHNpemVvZihwb3J0cm9vdCkpOwpAQCAtNTkxLDYgKzY2OCwx
MyBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJbm9fY29sb3JzKCk7CiAJ
ZWxzZQogCQljb2xvcl9yZW1hcCgpOworCisKKwlzdHJuY3B5KG92ZXJsYXlfZ2VudG9vLT5wYXRo
LCB0bXBfcG9ydGRpciwgc2l6ZW9mKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSk7CisKKwkvKiBub3cg
d2UgaW5pdGlsaWFzZSB0aGUgb3ZlcmxheSBjaGFpbmVkIGxpc3Qgd2l0aCBvdmVybGF5X2dlbnRv
byBhcyB0aGUgZmlyc3QgJ2l0ZW0nICAqLworCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9v
dmVybGF5KTsKKwogfQogCiBlbnVtIHsKQEAgLTYxOSwxOSArNzAzLDIxIEBAIGNvbnN0IGNoYXIg
KmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAlpbnQgYSwgYiwgYywgZCwgZSwgaTsKIAlp
bnQgZnJhYywgc2VjcywgY291bnQ7CiAJRklMRSAqZnA7CisJb3ZlcmxheV90ICpjdXJfb3Zlcmxh
eTsKIAogCWEgPSBiID0gYyA9IGQgPSBlID0gaSA9IDA7CiAJY291bnQgPSBmcmFjID0gc2VjcyA9
IDA7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKIAogCWNhY2hlX2ZpbGUgPSAoY2Fj
aGVfdHlwZSA9PSBDQUNIRV9FQlVJTEQgPyBDQUNIRV9FQlVJTERfRklMRSA6IENBQ0hFX01FVEFE
QVRBX0ZJTEUpOwogCi0JaWYgKGNoZGlyKHBvcnRkaXIpICE9IDApIHsKLQkJd2FybnAoImNoZGly
IHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAoY2hkaXIob3ZlcmxheV9n
ZW50b28tPnBhdGgpICE9IDApIHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWls
ZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmIChjYWNo
ZV90eXBlID09IENBQ0hFX01FVEFEQVRBICYmIGNoZGlyKHBvcnRjYWNoZWRpcikgIT0gMCkgewot
CQl3YXJucCgiY2hkaXIgdG8gcG9ydGFnZSBjYWNoZSAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIs
IHBvcnRjYWNoZWRpcik7CisJCXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycg
ZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgsIHBvcnRjYWNoZWRpcik7CiAJCWdvdG8gcmV0
OwogCX0KIApAQCAtNjQ3LDY0ICs3MzMsNzEgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0
KGludCBjYWNoZV90eQogCiAJdW5saW5rKGNhY2hlX2ZpbGUpOwogCWlmIChlcnJubyAhPSBFTk9F
TlQpIHsKLQkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBjYWNo
ZV9maWxlKTsKKwkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBvdmVybGF5X2dl
bnRvby0+cGF0aCwgY2FjaGVfZmlsZSk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmICgoZnAgPSBm
b3BlbihjYWNoZV9maWxlLCAidyIpKSA9PSBOVUxMKSB7Ci0JCXdhcm5mcCgib3BlbmluZyAnJXMv
JXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNhY2hlX2ZpbGUpOworCQl3YXJuZnAoIm9wZW5pbmcgJyVz
LyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2FjaGVfZmlsZSk7CiAJCWdvdG8g
cmV0OwogCX0KIAogCWdldHRpbWVvZmRheSgmc3RhcnQsIE5VTEwpOwogCi0JaWYgKChhID0gc2Nh
bmRpcigiLiIsICZjYXRlZ29yeSwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQln
b3RvIHJldDsKKwlkbyB7CisJCWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gfHwg
Y2hkaXIoY3VyX292ZXJsYXktPnBhdGgpID09IDApIHsKKwkJCWlmICgoYSA9IHNjYW5kaXIoIi4i
LCAmY2F0ZWdvcnksIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQlnb3RvIHJl
dDsKIAotCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKLQkJc3RhdChjYXRlZ29yeVtpXS0+ZF9u
YW1lLCAmc3QpOwotCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCQljb250aW51ZTsKLQkJ
aWYgKHN0cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5VTEwpCi0JCQlpZiAoKHN0
cm5jbXAoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgInZpcnR1YWwiLCA3KSkgIT0gMCkKLQkJCQljb250
aW51ZTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKKwkJCQlzdGF0KGNhdGVnb3J5W2ld
LT5kX25hbWUsICZzdCk7CisJCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJCQljb250
aW51ZTsKKwkJCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICctJykgPT0gTlVMTCkK
KwkJCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ldLT5kX25hbWUsICJ2aXJ0dWFsIiwgNykpICE9
IDApCisJCQkJCQljb250aW51ZTsKIAotCQlpZiAoKGIgPSBzY2FuZGlyKGNhdGVnb3J5W2ldLT5k
X25hbWUsICZwbiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQkJY29udGludWU7
Ci0JCWZvciAoYyA9IDA7IGMgPCBiOyBjKyspIHsKLQkJCWNoYXIgZGVbX1FfUEFUSF9NQVhdOwor
CQkJCWlmICgoYiA9IHNjYW5kaXIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnBuLCBmaWx0ZXJfaGlk
ZGVuLCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoYyA9IDA7IGMg
PCBiOyBjKyspIHsKKwkJCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJCXNucHJpbnRmKGRl
LCBzaXplb2YoZGUpLCAiJXMvJXMiLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1l
KTsKKwkJCQkJc25wcmludGYoZGUsIHNpemVvZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5k
X25hbWUsIHBuW2NdLT5kX25hbWUpOwogCi0JCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCi0JCQkJ
Y29udGludWU7CisJCQkJCWlmIChzdGF0KGRlLCAmc3QpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOwog
Ci0JCQlzd2l0Y2ggKGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJVSUxEOgotCQkJCWlm
ICghU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0JCQlj
YXNlIENBQ0hFX01FVEFEQVRBOgotCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJCQlm
cHJpbnRmKGZwLCAiJXNcbiIsIGRlKTsKLQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJCX0K
LQkJCWlmICgoZSA9IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkg
PCAwKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yIChkID0gMDsgZCA8IGU7IGQrKykgewotCQkJCWlm
ICgocCA9IHN0cnJjaHIoZWJbZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKLQkJCQkJaWYgKHN0
cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsKLQkJCQkJCWNvdW50Kys7Ci0JCQkJCQlmcHJpbnRm
KGZwLCAiJXMvJXMvJXNcbiIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGVi
W2RdLT5kX25hbWUpOworCQkJCQlzd2l0Y2ggKGNhY2hlX3R5cGUpIHsKKwkJCQkJY2FzZSBDQUNI
RV9FQlVJTEQ6CisJCQkJCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJCQkJY29udGlu
dWU7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBDQUNIRV9NRVRBREFUQToKKwkJCQkJCWlmIChT
X0lTUkVHKHN0LnN0X21vZGUpKQorCQkJCQkJCWZwcmludGYoZnAsICIlc1xuIiwgZGUpOworCQkJ
CQkJY29udGludWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoKGUgPSBzY2FuZGly
KGRlLCAmZWIsIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJCWNvbnRpbnVl
OworCQkJCQlmb3IgKGQgPSAwOyBkIDwgZTsgZCsrKSB7CisJCQkJCQlpZiAoKHAgPSBzdHJyY2hy
KGViW2RdLT5kX25hbWUsICcuJykpICE9IE5VTEwpCisJCQkJCQkJaWYgKHN0cmNtcChwLCAiLmVi
dWlsZCIpID09IDApIHsKKwkJCQkJCQkJY291bnQrKzsKKwkJCQkJCQkJZnByaW50ZihmcCwgIiVz
LyVzLyVzXG4iLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1lLCBlYltkXS0+ZF9u
YW1lKTsKKwkJCQkJCQl9CiAJCQkJCX0KKwkJCQkJd2hpbGUgKGQtLSkgZnJlZShlYltkXSk7CisJ
CQkJCWZyZWUoZWIpOworCQkJCX0KKwkJCQl3aGlsZSAoYi0tKSBmcmVlKHBuW2JdKTsKKwkJCQlm
cmVlKHBuKTsKIAkJCX0KLQkJCXdoaWxlIChkLS0pIGZyZWUoZWJbZF0pOwotCQkJZnJlZShlYik7
Ci0JCX0KLQkJd2hpbGUgKGItLSkgZnJlZShwbltiXSk7Ci0JCWZyZWUocG4pOwotCX0KKwkJfSBl
bHNlCisJCQl3YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQsIHNraXBwaW5nIHRoZSAlcyByZXBv
c2l0b3J5IiwgY3VyX292ZXJsYXktPnBhdGgsIGN1cl9vdmVybGF5LT5uYW1lKTsKKworCX0gd2hp
bGUgKCAoY3VyX292ZXJsYXkgPSBjdXJfb3ZlcmxheS0+bmV4dCkpOwkKKwkKIAlmY2xvc2UoZnAp
OwogCXdoaWxlIChhLS0pIGZyZWUoY2F0ZWdvcnlbYV0pOwogCWZyZWUoY2F0ZWdvcnkpOwpAQCAt
NzIzLDcgKzgxNiw3IEBAIGNvbnN0IGNoYXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkK
IAogCXdhcm4oIkZpbmlzaGVkICV1IGVudHJpZXMgaW4gJWQuJTA2ZCBzZWNvbmRzIiwgY291bnQs
IHNlY3MsIGZyYWMpOwogCWlmIChzZWNzID4gMTAwKQotCQl3YXJuKCJZb3Ugc2hvdWxkIGNvbnNp
ZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVtIHN1Y2ggYXMgcmVpc2VyZnMgZm9yIFBPUlRESVI9JyVz
JyIsIHBvcnRkaXIpOworCQl3YXJuKCJZb3Ugc2hvdWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUg
c3lzdGVtIHN1Y2ggYXMgcmVpc2VyZnMgZm9yIFBPUlRESVI9JyVzJyIsIG92ZXJsYXlfZ2VudG9v
LT5wYXRoKTsKIHJldDoKIAlyZXR1cm4gY2FjaGVfZmlsZTsKIH0KQEAgLTczMiw4ICs4MjUsOCBA
QCByZXQ6CiAKIHZvaWQgcmVpbml0aWFsaXplX2VidWlsZF9mbGF0KHZvaWQpCiB7Ci0JaWYgKChj
aGRpcihwb3J0ZGlyKSkgIT0gMCkgewotCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZh
aWxlZCIsIHBvcnRkaXIpOworCWlmICgoY2hkaXIob3ZlcmxheV9nZW50b28tPnBhdGgpKSAhPSAw
KSB7CisJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVkIiwgb3ZlcmxheV9nZW50
b28tPnBhdGgpOwogCQlyZXR1cm47CiAJfQogCXVubGluayhDQUNIRV9FQlVJTERfRklMRSk7CkBA
IC0xMDA2LDEwICsxMDk5LDIwIEBAIGZ1Y2tpdDoKIAlyZXR1cm4gY3BmOwogfQogCisvKiBmcmVl
IG92ZXJsYXlzICovCit2b2lkIGZyZWVfb3ZlcmxheXMob3ZlcmxheV90ICpvdmVybGF5KTsKK3Zv
aWQgZnJlZV9vdmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpCit7CisJaWYgKCBvdmVybGF5LT5u
ZXh0ICkKKwkJZnJlZV9vdmVybGF5cyhvdmVybGF5LT5uZXh0KTsKKwlmcmVlKG92ZXJsYXkpOwor
fQorCiB2b2lkIGNsZWFudXAoKQogewogCXJlaW5pdGlhbGl6ZV9hc19uZWVkZWQoKTsKIAlmcmVl
X3NldHModmlydHVhbHMpOworCWZyZWVfb3ZlcmxheXMob3ZlcmxheV9nZW50b28pOwogCWZjbG9z
ZShzdGRlcnIpOwogfQogCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAvcS5jIHBv
cnRhZ2UtdXRpbHMtMjAwNjExMTAubmV3L3EuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExMC9x
LmMJMjAwNi0xMS0xMSAwMDo0ODozOS4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTAubmV3L3EuYwkyMDA2LTExLTExIDAxOjAzOjQzLjg1NDQ5NjU0OSArMDEwMApAQCAt
NywxNSArNywxNyBAQAogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdlciAgLSA8
dmFwaWVyQGdlbnRvby5vcmc+CiAgKi8KIAotI2RlZmluZSBRX0ZMQUdTICJpcm0iIENPTU1PTl9G
TEFHUworI2RlZmluZSBRX0ZMQUdTICJpbHJtIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qg
b3B0aW9uIGNvbnN0IHFfbG9uZ19vcHRzW10gPSB7CiAJeyJpbnN0YWxsIiwgICAgICBub19hcmd1
bWVudCwgTlVMTCwgJ2knfSwKKwl7ImxzLW92ZXJsYXlzIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAn
bCd9LAogCXsicmVpbml0aWFsaXplIiwgbm9fYXJndW1lbnQsIE5VTEwsICdyJ30sCiAJeyJtZXRh
Y2FjaGUiLCAgICBub19hcmd1bWVudCwgTlVMTCwgJ20nfSwKIAlDT01NT05fTE9OR19PUFRTCiB9
Owogc3RhdGljIGNvbnN0IGNoYXIgKnFfb3B0c19oZWxwW10gPSB7CiAJIkluc3RhbGwgc3ltbGlu
a3MgZm9yIGFwcGxldHMiLAorCSJMaXN0IGNvbmZpZ3VyZWQgb3ZlcmxheXMiLAogCSJSZWluaXRp
YWxpemUgZWJ1aWxkIGNhY2hlIiwKIAkiUmVpbml0aWFsaXplIG1ldGFkYXRhIGNhY2hlIiwKIAlD
T01NT05fT1BUU19IRUxQCkBAIC03MCw2ICs3Miw3IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCWludCBpOwogCWNoYXIgKnA7CiAJQVBQTEVUIGZ1bmM7CisJb3ZlcmxheV90
ICogY3VyX292ZXJsYXk7CiAKIAlpZiAoYXJnYyA9PSAwKQogCQlyZXR1cm4gMTsKQEAgLTg5LDYg
KzkyLDE1IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VU
T1BUU19DQVNFUyhxKQogCQljYXNlICdtJzogcmVpbml0aWFsaXplX21ldGFjYWNoZSA9IDE7IGJy
ZWFrOwogCQljYXNlICdyJzogcmVpbml0aWFsaXplID0gMTsgYnJlYWs7CisJCWNhc2UgJ2wnOiB7
CisJCQlwcmludGYoIlxuJXNPdmVybGF5KHMpIDolc1xuXG4iLCBHUkVFTiwgTk9STSk7CisJCQlj
dXJfb3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKKwkJCWRvIHsKKwkJCQlwcmludGYoIiAgIE5hbWUg
OiAlcyUtMjAuMjBzJXMgXHRsb2NhdGlvbiA6ICVzJXMlc1xuIiwgQ1lBTiwgY3VyX292ZXJsYXkt
Pm5hbWUsIE5PUk0sIENZQU4sIGN1cl9vdmVybGF5LT5wYXRoLCBOT1JNKTsKKwkJCX0gd2hpbGUg
KCAoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKKwkJCWZwdXRjKCdcbicsIHN0ZG91
dCk7CisJCQlyZXR1cm4gMDsKKwkJCX0KIAkJY2FzZSAnaSc6IHsKIAkJCWNoYXIgYnVmW19RX1BB
VEhfTUFYXTsKIAkJCS8qIGFsd2F5cyBiemVybyBhIGJ1ZmZlciBiZWZvcmUgdXNpbmcgcmVhZGxp
bmsoKSAqLwpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYxMTEwL3FjYWNoZS5jIHBvcnRh
Z2UtdXRpbHMtMjAwNjExMTAubmV3L3FjYWNoZS5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTEw
L3FjYWNoZS5jCTIwMDYtMTEtMTEgMDA6NDg6MzkuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdl
LXV0aWxzLTIwMDYxMTEwLm5ldy9xY2FjaGUuYwkyMDA2LTExLTExIDAxOjI2OjE3LjI0OTc0OTE5
NyArMDEwMApAQCAtNTEyLDEwICs1MTIsMTAgQEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgq
ZnVuYykocWNhY2hlXwogCWludCBpLCBqLCBrLCBsZW4sIG51bV9jYXQsIG51bV9wa2csIG51bV9l
YnVpbGQ7CiAJc3RydWN0IGRpcmVjdCAqKmNhdGVnb3JpZXMsICoqcGFja2FnZXMsICoqZWJ1aWxk
czsKIAotCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VEQikgKyBzdHJsZW4o
cG9ydGRpcikgKyAxKTsKKwlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIp
ICsgc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIDEpOwogCWNhdHBhdGggPSB4bWFsbG9j
KGxlbik7CiAJbWVtc2V0KGNhdHBhdGgsIDAsIGxlbik7Ci0Jc25wcmludGYoY2F0cGF0aCwgbGVu
LCAiJXMlcyIsIFFDQUNIRV9FREIsIHBvcnRkaXIpOworCXNucHJpbnRmKGNhdHBhdGgsIGxlbiwg
IiVzJXMiLCBRQ0FDSEVfRURCLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAKIAlpZiAoLTEgPT0g
KG51bV9jYXQgPSBzY2FuZGlyKGNhdHBhdGgsICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxl
Y3QsIGFscGhhc29ydCkpKSB7CiAJCWVycigiJXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJu
bykpOwpAQCAtNTI3LDEwICs1MjcsMTAgQEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVu
YykocWNhY2hlXwogCiAJLyogdHJhdmVyc2UgY2F0ZWdvcmllcyAqLwogCWZvciAoaSA9IDA7IGkg
PCBudW1fY2F0OyBpKyspIHsKLQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihwb3J0ZGly
KSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyAxKTsKKwkJ
bGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJs
ZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgMSk7CiAJCXBrZ3BhdGgg
PSB4bWFsbG9jKGxlbik7CiAJCW1lbXNldChwa2dwYXRoLCAwLCBsZW4pOwotCQlzbnByaW50Zihw
a2dwYXRoLCBsZW4sICIlcy8lcyIsIHBvcnRkaXIsIGNhdGVnb3JpZXNbaV0tPmRfbmFtZSk7CisJ
CXNucHJpbnRmKHBrZ3BhdGgsIGxlbiwgIiVzLyVzIiwgb3ZlcmxheV9nZW50b28tPnBhdGgsIGNh
dGVnb3JpZXNbaV0tPmRfbmFtZSk7CiAKIAkJaWYgKC0xID09IChudW1fcGtnID0gc2NhbmRpcihw
a2dwYXRoLCAmcGFja2FnZXMsIHFjYWNoZV9maWxlX3NlbGVjdCwgYWxwaGFzb3J0KSkpIHsKIAkJ
CXdhcm4oIiVzICVzIiwgY2F0cGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTU1MiwxMCArNTUy
LDEwIEBAIGludCBxY2FjaGVfdHJhdmVyc2Uodm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAogCQkvKiB0
cmF2ZXJzZSBwYWNrYWdlcyAqLwogCQlmb3IgKGogPSAwOyBqIDwgbnVtX3BrZzsgaisrKSB7Ci0J
CQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKHBvcnRkaXIpICsgc3RybGVuKCIvIikgKyBz
dHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIHN0cmxlbigiLyIpICsgc3RybGVuKHBhY2th
Z2VzW2pdLT5kX25hbWUpICsgMSk7CisJCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92
ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0t
PmRfbmFtZSkgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihwYWNrYWdlc1tqXS0+ZF9uYW1lKSArIDEp
OwogCQkJZWJ1aWxkcGF0aCA9IHhtYWxsb2MobGVuKTsKIAkJCW1lbXNldChlYnVpbGRwYXRoLCAw
LCBsZW4pOwotCQkJc25wcmludGYoZWJ1aWxkcGF0aCwgbGVuLCAiJXMvJXMvJXMiLCBwb3J0ZGly
LCBjYXRlZ29yaWVzW2ldLT5kX25hbWUsIHBhY2thZ2VzW2pdLT5kX25hbWUpOworCQkJc25wcmlu
dGYoZWJ1aWxkcGF0aCwgbGVuLCAiJXMvJXMvJXMiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2F0
ZWdvcmllc1tpXS0+ZF9uYW1lLCBwYWNrYWdlc1tqXS0+ZF9uYW1lKTsKIAogCQkJaWYgKC0xID09
IChudW1fZWJ1aWxkID0gc2NhbmRpcihlYnVpbGRwYXRoLCAmZWJ1aWxkcywgcWNhY2hlX2VidWls
ZF9zZWxlY3QsIHFjYWNoZV92ZXJjbXApKSkgewogCQkJCXdhcm4oIiVzICVzIiwgZWJ1aWxkcGF0
aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTc3MywxMCArNzczLDEwIEBAIHZvaWQgcWNhY2hlX3N0
YXRzKHFjYWNoZV9kYXRhICpkYXRhKQogCQlmb3IgKGkgPSAwOyBhcmNobGlzdFtpXTsgaSsrKQog
CQkJYXJjaGl0ZWN0dXJlcysrOwogCi0JCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4oUUNB
Q0hFX0VEQikgKyBzdHJsZW4ocG9ydGRpcikgKyAxKTsKKwkJbGVuID0gc2l6ZW9mKGNoYXIpICog
KHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyAxKTsK
IAkJY2F0cGF0aCA9IHhtYWxsb2MobGVuKTsKIAkJbWVtc2V0KGNhdHBhdGgsIDAsIGxlbik7Ci0J
CXNucHJpbnRmKGNhdHBhdGgsIGxlbiwgIiVzJXMiLCBRQ0FDSEVfRURCLCBwb3J0ZGlyKTsKKwkJ
c25wcmludGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9FREIsIG92ZXJsYXlfZ2VudG9v
LT5wYXRoKTsKIAogCQlpZiAoLTEgPT0gKG51bWNhdCA9IHNjYW5kaXIoY2F0cGF0aCwgJmNhdGVn
b3JpZXMsIHFjYWNoZV9maWxlX3NlbGVjdCwgYWxwaGFzb3J0KSkpIHsKIAkJCWVycigiJXMgJXMi
LCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtOTI4LDExICs5MjgsMTEgQEAgaW50IHFj
YWNoZV9pbml0KCkKIAljaGFyICpmaWxlbmFtZTsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCi0JbGVu
ICAgICAgPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKHBvcnRkaXIpICsgc3RybGVuKCIvcHJvZmls
ZXMvYXJjaC5saXN0IikgKyAxKTsKKwlsZW4gICAgICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4o
b3ZlcmxheV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvcHJvZmlsZXMvYXJjaC5saXN0IikgKyAx
KTsKIAlmaWxlbmFtZSA9IHhtYWxsb2MobGVuKTsKIAogCW1lbXNldChmaWxlbmFtZSwgMCwgbGVu
KTsKLQlzbnByaW50ZihmaWxlbmFtZSwgbGVuLCAiJXMvcHJvZmlsZXMvYXJjaC5saXN0IiwgcG9y
dGRpcik7CisJc25wcmludGYoZmlsZW5hbWUsIGxlbiwgIiVzL3Byb2ZpbGVzL2FyY2gubGlzdCIs
IG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAogCWlmIChOVUxMID09IChhcmNobGlzdCA9IHFjYWNo
ZV9yZWFkX2xpbmVzKGZpbGVuYW1lKSkpIHsKIAkJZnJlZShmaWxlbmFtZSk7CmRpZmYgLU5hcnVw
IHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAvcWdyZXAuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTEwLm5l
dy9xZ3JlcC5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTEwL3FncmVwLmMJMjAwNi0xMS0xMSAw
MDo0ODozOS4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAubmV3L3Fn
cmVwLmMJMjAwNi0xMS0xMSAwMToyODoyMC43NjY5NzE3MjUgKzAxMDAKQEAgLTEwLDExICsxMCwx
MiBAQAogCiAjaWZkZWYgQVBQTEVUX3FncmVwCiAKLSNkZWZpbmUgUUdSRVBfRkxBR1MgIklpSGNl
IiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUUdSRVBfRkxBR1MgIklpSG86Y2UiIENPTU1PTl9GTEFH
Uwogc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcWdyZXBfbG9uZ19vcHRzW10gPSB7CiAJeyJp
bnZlcnQtbWF0Y2giLCAgbm9fYXJndW1lbnQsIE5VTEwsICdJJ30sCiAJeyJpZ25vcmUtY2FzZSIs
ICAgbm9fYXJndW1lbnQsIE5VTEwsICdpJ30sCiAJeyJ3aXRoLWZpbGVuYW1lIiwgbm9fYXJndW1l
bnQsIE5VTEwsICdIJ30sCisJeyJvdmVybGF5IiwgICAgICAgIGFfYXJndW1lbnQsIE5VTEwsICdv
J30sCiAJeyJjb3VudCIsICAgICAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdjJ30sCiAJeyJyZWdl
eHAiLCAgICAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdlJ30sCiAJQ09NTU9OX0xPTkdfT1BUUwpA
QCAtMjMsNiArMjQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqcWdyZXBfb3B0c19oZWxwW10gPSB7
CiAJIlNlbGVjdCBub24tbWF0Y2hpbmcgbGluZXMiLAogCSJJZ25vcmUgY2FzZSBkaXN0aW5jdGlv
bnMiLAogCSJQcmludCB0aGUgZmlsZW5hbWUgZm9yIGVhY2ggbWF0Y2giLAorCSJPbmx5IGNvbnNp
ZGVyIHRoZSA8YXJnPiBvdmVybGF5IiwKIAkiT25seSBwcmludCBhIGNvdW50IG9mIG1hdGNoaW5n
IGxpbmVzIHBlciBGSUxFIiwKIAkiVXNlIFBBVFRFUk4gYXMgYSByZWd1bGFyIGV4cHJlc3Npb24i
LAogCUNPTU1PTl9PUFRTX0hFTFAKQEAgLTM0LDcgKzM2LDkgQEAgaW50IHFncmVwX21haW4oaW50
IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWludCBpOwogCWludCBjb3VudCA9IDA7Ci0JY2hhciAq
cDsKKwlzaG9ydCBteWVycm9yID0gMCwgcmVwbyA9IDA7CisJY2hhciBvdmVybGF5X25hbWVbNjRd
LCByZXBvX3NlYXJjaFs2NF07CisJY2hhciAqcCwgKnN0cjsKIAljaGFyIGRvX2NvdW50LCBkb19y
ZWdleDsKIAljaGFyIHNob3dfZmlsZW5hbWU7CiAJRklMRSAqZnA7CkBAIC00MiwxMCArNDYsMTUg
QEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWNoYXIgYnVmMFtCVUZT
SVpdOwogCWludCByZWZsYWdzID0gUkVHX05PU1VCOwogCWNoYXIgaW52ZXJ0X21hdGNoID0gMDsK
KwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CiAKIAl0eXBlZGVmIGNoYXIg
KigqRlVOQykgKGNoYXIgKiwgY2hhciAqKTsKIAlGVU5DIHN0cmZ1bmMgPSAoRlVOQykgc3Ryc3Ry
OwogCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKwlvdmVybGF5X25hbWVbMF0gPSAw
OworCXJlcG9fc2VhcmNoWzBdID0gMDsKKwogCURCRygiYXJnYz0lZCBhcmd2WzBdPSVzIGFyZ3Zb
MV09JXMiLAogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiTlVMTD8i
KTsKIApAQCAtNTgsOSArNjcsMTMgQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogCQkJc3RyZnVuYyA9IChGVU5DKSBzdHJjYXNlc3RyOwogCQkJcmVmbGFncyB8PSBSRUdf
SUNBU0U7CiAJCQlicmVhazsKKwkJY2FzZSAnSCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVhazsK
KwkJY2FzZSAnbyc6IAorCQkJcmVwbyA9IDE7CisJCQlzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRh
cmcsIHNpemVvZihyZXBvX3NlYXJjaCkpOworCQkJYnJlYWs7CiAJCWNhc2UgJ2MnOiBkb19jb3Vu
dCA9IDE7IGJyZWFrOwogCQljYXNlICdlJzogZG9fcmVnZXggPSAxOyBicmVhazsKLQkJY2FzZSAn
SCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVhazsKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocWdy
ZXApCiAJCX0KIAl9CkBAIC03Myw2ICs4NiwzOCBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCXJldHVybiAxOwogCXdoaWxlICgoZmdldHMoZWJ1aWxkLCBzaXplb2Yo
ZWJ1aWxkKSwgZnApKSAhPSBOVUxMKSB7CiAJCUZJTEUgKm5ld2ZwOworCQlpZiAoICggcCA9IHN0
cmNocihlYnVpbGQsICc6JykpKQorCQl7CisJCQkqcCA9IDA7CisJCQlzdHIgPSBwKzI7CQkJLyog
c2VwYXJhdG9yIGlzICc6OicgKi8KKwkJCXAgPSBlYnVpbGQ7CisJCQlpZiAoIHJlcG8gJiYgc3Ry
bmNtcChyZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKCByZXBvX3NlYXJjaCkpKQorCQkJCWNvbnRpbnVl
OworCQkJaWYgKCBzdHJjbXAob3ZlcmxheV9uYW1lLCBwKSkKKwkJCXsKKwkJCQlmb3IgKCBvdmVy
bGF5X3RtcD1vdmVybGF5X2dlbnRvbyA7IG92ZXJsYXlfdG1wLT5uZXh0IDsgb3ZlcmxheV90bXA9
b3ZlcmxheV90bXAtPm5leHQgKQorCQkJCXsKKwkJCQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90
bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJCWlmICggISBzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXplb2Yob3Zl
cmxheV90bXAtPm5hbWUpKSkKKwkJCQl7CisJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7
CisJCQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+cGF0aCkgIT0gMCkgeworCQkJCQkJd2FybnAo
ImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJ
CQlteWVycm9yPTE7CisJCQkJCX0KKwkJCQl9IGVsc2UgCisJCQkJCW15ZXJyb3I9MTsKKwkJCQlp
ZiAoIG15ZXJyb3IpIHsKKwkJCQkJbXllcnJvcj0wOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJ
CQkJc3RybmNweShvdmVybGF5X25hbWUsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2Yob3Zlcmxh
eV9uYW1lKSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsKKwkJfQorCiAJCWlmICgo
cCA9IHN0cmNocihlYnVpbGQsICdcbicpKSAhPSBOVUxMKQogCQkJKnAgPSAwOwogCQlpZiAoKG5l
d2ZwID0gZm9wZW4oZWJ1aWxkLCAiciIpKSAhPSBOVUxMKSB7CkBAIC0xMDIsNyArMTQ3LDcgQEAg
aW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWNvdW50Kys7CiAJCQkJ
aWYgKGRvX2NvdW50KSBjb250aW51ZTsKIAkJCQlpZiAodmVyYm9zZSB8fCBzaG93X2ZpbGVuYW1l
KSB7Ci0JCQkJCXByaW50ZigiJXM6IiwgZWJ1aWxkKTsKKwkJCQkJcHJpbnRmKCIlczo6JXM6Iiwg
Y3VyX292ZXJsYXktPm5hbWUsIGVidWlsZCk7CiAJCQkJCWlmICh2ZXJib3NlID4gMSkgcHJpbnRm
KCIlZDoiLCBsaW5lbm8pOwogCQkJCQlwcmludGYoIiAiKTsKIAkJCQl9CmRpZmYgLU5hcnVwIHBv
cnRhZ2UtdXRpbHMtMjAwNjExMTAvcXNlYXJjaC5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAubmV3
L3FzZWFyY2guYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExMC9xc2VhcmNoLmMJMjAwNi0xMS0x
MSAwMDo0ODozOS4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAubmV3
L3FzZWFyY2guYwkyMDA2LTExLTExIDAxOjMxOjQ0LjYxMjk4MjQyMSArMDEwMApAQCAtOSwxMCAr
OSwxMiBAQAogCiAjaWZkZWYgQVBQTEVUX3FzZWFyY2gKIAotI2RlZmluZSBRU0VBUkNIX0ZMQUdT
ICJhY3NTTkgiIENPTU1PTl9GTEFHUworI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY286cHNTTkgi
IENPTU1PTl9GTEFHUwogc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXNlYXJjaF9sb25nX29w
dHNbXSA9IHsKIAl7ImFsbCIsICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAogCXsiY2Fj
aGUiLCAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdjJ30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1
bWVudCwgTlVMTCwgJ28nfSwKKwl7InNob3ctcGF0aCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9
LAogCXsic2VhcmNoIiwgICAgbm9fYXJndW1lbnQsIE5VTEwsICdzJ30sCiAJeyJkZXNjIiwgICAg
ICAgYV9hcmd1bWVudCwgTlVMTCwgJ1MnfSwKIAl7Im5hbWUtb25seSIsIG5vX2FyZ3VtZW50LCBO
VUxMLCAnTid9LApAQCAtMjIsNiArMjQsOCBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBx
c2VhcmNoX2xvbmdfCiBzdGF0aWMgY29uc3QgY2hhciAqcXNlYXJjaF9vcHRzX2hlbHBbXSA9IHsK
IAkiTGlzdCB0aGUgZGVzY3JpcHRpb25zIG9mIGV2ZXJ5IHBhY2thZ2UgaW4gdGhlIGNhY2hlIiwK
IAkiVXNlIHRoZSBwb3J0YWdlIGNhY2hlIiwKKwkiU2VhcmNoIG9ubHkgaW4gdGhlIDxhcmc+IG92
ZXJsYXkiLAorCSJTaG93IHRoZSBwYXRoIHRvIHRoZSBlYnVpbGQiLAogCSJSZWdleCBzZWFyY2gg
cGFja2FnZSBiYXNlbmFtZXMiLAogCSJSZWdleCBzZWFyY2ggcGFja2FnZSBkZXNjcmlwdGlvbnMi
LAogCSJPbmx5IHNob3cgcGFja2FnZSBuYW1lIiwKQEAgLTQwLDEzICs0NCwyMCBAQCBpbnQgcXNl
YXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyIGxhc3RbMTI2XSA9ICIiOwog
CWNoYXIgZHBbMTI2XSA9ICIiOwogCWNoYXIgYnBbMTI2XSA9ICIiOwotCWNoYXIgKnAsICpxLCAq
c3RyOworCXNob3J0IHJlcG8gPSAwOworCWNoYXIgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgKnAs
ICpxLCAqc3RyLCBvdmVybGF5X25hbWVbNjRdOwogCWNoYXIgKnNlYXJjaF9tZSA9IE5VTEw7Ci0J
Y2hhciBzaG93X2hvbWVwYWdlID0gMCwgc2hvd19uYW1lX29ubHkgPSAwOworCWNoYXIgc2hvd19o
b21lcGFnZSA9IDAsIHNob3dfbmFtZV9vbmx5ID0gMCwgc2hvd19wYXRoX3RvX2VidWlsZCA9IDA7
CiAJY2hhciBzZWFyY2hfZGVzYyA9IDAsIHNlYXJjaF9hbGwgPSAwLCBzZWFyY2hfbmFtZSA9IDEs
IHNlYXJjaF9jYWNoZSA9IENBQ0hFX0VCVUlMRDsKIAljb25zdCBjaGFyICpzZWFyY2hfdmFyc1td
ID0geyAiREVTQ1JJUFRJT049IiwgIkhPTUVQQUdFPSIgfTsKIAlzaXplX3Qgc2VhcmNoX2xlbjsK
LQlpbnQgaSwgaWR4PTA7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheSwgKm92ZXJsYXlfdG1wOwor
CWludCBpLCBpZHg9MCwgbXllcnJvcj0wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRv
bzsKKwlvdmVybGF5X25hbWVbMF0gPSAwIDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAKIAlEQkco
ImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJn
YyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CkBAIC01Niw2ICs2Nyw4IEBAIGludCBxc2VhcmNo
X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxc2Vh
cmNoKQogCQljYXNlICdhJzogc2VhcmNoX2FsbCA9IDE7IGJyZWFrOwogCQljYXNlICdjJzogc2Vh
cmNoX2NhY2hlID0gQ0FDSEVfTUVUQURBVEE7IGJyZWFrOworCQljYXNlICdvJzogcmVwbyA9IDE7
IHN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7IGJyZWFr
OworCQljYXNlICdwJzogc2hvd19wYXRoX3RvX2VidWlsZCA9IDE7IGJyZWFrOwogCQljYXNlICdz
Jzogc2VhcmNoX2Rlc2MgPSAwOyBzZWFyY2hfbmFtZSA9IDE7IGJyZWFrOwogCQljYXNlICdTJzog
c2VhcmNoX2Rlc2MgPSAxOyBzZWFyY2hfbmFtZSA9IDA7IGJyZWFrOwogCQljYXNlICdOJzogc2hv
d19uYW1lX29ubHkgPSAxOyBicmVhazsKQEAgLTkzLDExICsxMDYsMjIgQEAgaW50IHFzZWFyY2hf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlpZiAoKHBjYWNoZSA9IGNhY2hlX3JlYWRf
ZmlsZShlYnVpbGQpKSAhPSBOVUxMKSB7CiAJCQkJaWYgKChzdHJjbXAocGNhY2hlLT5hdG9tLT5Q
TiwgbGFzdCkpICE9IDApIHsKIAkJCQkJc3RybmNweShsYXN0LCBwY2FjaGUtPmF0b20tPlBOLCBz
aXplb2YobGFzdCkpOwotCQkJCQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2Mg
PyBwY2FjaGUtPkRFU0NSSVBUSU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNF
KSkgPT0gMCkKLQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsIEJPTEQsIHBjYWNoZS0+
YXRvbS0+Q0FURUdPUlksIEJMVUUsCi0JCQkJCQkgICAgICAgcGNhY2hlLT5hdG9tLT5QTiwgTk9S
TSwKLQkJCQkJCSAgICAgICAoc2hvd19uYW1lX29ubHkgPyAiIiA6Ci0JCQkJCQkgICAgICAgIChz
aG93X2hvbWVwYWdlID8gcGNhY2hlLT5IT01FUEFHRSA6IHBjYWNoZS0+REVTQ1JJUFRJT04pKSk7
CisJCQkJCWlmICgocmVtYXRjaChzZWFyY2hfbWUsIChzZWFyY2hfZGVzYyA/IHBjYWNoZS0+REVT
Q1JJUFRJT04gOiBlYnVpbGQpLCBSRUdfRVhURU5ERUQgfCBSRUdfSUNBU0UpKSA9PSAwKSB7CisJ
CQkJCQlpZiAoIHNob3dfcGF0aF90b19lYnVpbGQpIHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMl
cyVzOjolc1x0ICVzJXMvJXMvXG4iLAkKKwkJCQkJCQlCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVH
T1JZLAorCQkJCQkJCUJMVUUsIHBjYWNoZS0+YXRvbS0+UE4sCisJCQkJCQkJWUVMTE9XLGN1cl9v
dmVybGF5LT5uYW1lLCBOT1JNLAorCQkJCQkJCWN1cl9vdmVybGF5LT5wYXRoLCBkaXJuYW1lKGVi
dWlsZCkpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyAl
cyVzXG4iLAorCQkJCQkJCUJPTEQsIHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxV
RSwgcGNhY2hlLT5hdG9tLT5QTiwKKwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5P
Uk0sCisJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiAKKwkJCQkJCQkoc2hvd19ob21lcGFn
ZSA/IHBjYWNoZS0+SE9NRVBBR0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQkJfQor
CQkJCQl9CiAJCQkJfQogCQkJCWNhY2hlX2ZyZWUocGNhY2hlKTsKIAkJCX0gZWxzZSB7CkBAIC0x
MTAsNiArMTM0LDQwIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
CiAJCWNhc2UgQ0FDSEVfRUJVSUxEOiB7CiAJCQlGSUxFICplYnVpbGRmcDsKKwkJCWlmICggKCBw
ID0gc3RyY2hyKGVidWlsZCwgJzonKSkpCisJCQl7CisJCQkJKnAgPSAwOworCQkJCXN0ciA9IHAr
MjsJCQkvKiBzZXBhcmF0b3IgaXMgJzo6JyAqLworCQkJCXAgPSBlYnVpbGQ7CisJCQkJaWYgKCBy
ZXBvICYmIHN0cm5jbXAoIHJlcG9fc2VhcmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJ
CQkJY29udGludWU7CisJCQkJaWYgKCBzdHJjbXAob3ZlcmxheV9uYW1lLCBwKSkKKwkJCQl7CisJ
CQkJCWZvciAoIG92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vIDsgb3ZlcmxheV90bXAtPm5leHQg
OyBvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCApCisJCQkJCXsKKwkJCQkJCWlmICggISBz
dHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkK
KwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoICEgc3RybmNtcChvdmVybGF5X3RtcC0+
bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCXsKKwkJCQkJCWN1cl9v
dmVybGF5ID0gb3ZlcmxheV90bXA7CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgp
ICE9IDApIHsKKwkJCQkJCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1
cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkJCQlteWVycm9yPTE7CisJCQkJCQl9CisJCQkJCX0gZWxz
ZSAKKwkJCQkJCW15ZXJyb3I9MTsKKwkJCQkJaWYgKCBteWVycm9yKSB7CisJCQkJCQlpZiAoIXJl
aW5pdGlhbGl6ZSkKKwkJCQkJCQl3YXJuZnAoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMiLCBl
YnVpbGQpOworCQkJCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJ
CQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJs
YXlfbmFtZSkpOworCQkJCX0KKwkJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsJCS8qIHNlcGFyYXRv
ciBpcyAnOjonICovCisJCQl9CisKIAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAo
Y2hhciAqKSBkaXJuYW1lKHN0cik7CiAKQEAgLTEzNCw5ICsxOTIsMTcgQEAgaW50IHFzZWFyY2hf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQkJLy8gZG9pbmcgb3BlcmF0aW9ucyB3
aXRoIHRoZW0uCiAJCQkJCQkJc3RybmNweShkcCwgcCwgc2l6ZW9mKGRwKSk7CiAJCQkJCQkJc3Ry
bmNweShicCwgcCwgc2l6ZW9mKGJwKSk7Ci0JCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyAlc1xu
IiwKLQkJCQkJCQkJQk9MRCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwgTk9STSwK
KwkJCQkJCQlpZiAoIHNob3dfcGF0aF90b19lYnVpbGQpIHsKKwkJCQkJCQkJcHJpbnRmKCIlcyVz
LyVzJXMlczo6JXNcdCAlcyVzLyVzL1xuIiwKKwkJCQkJCQkJQk9MRCwgZGlybmFtZShkcCksIEJM
VUUsIGJhc2VuYW1lKGJwKSwKKwkJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JN
LAorCQkJCQkJCQljdXJfb3ZlcmxheS0+cGF0aCwgZGlybmFtZShlYnVpbGQpKTsKKwkJCQkJCQl9
IGVsc2UgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJ
CQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnApLAorCQkJCQkJCQlZRUxMT1cs
Y3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCiAJCQkJCQkJCShzaG93X25hbWVfb25seSA/ICIiIDog
cSkpOworCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKIAkJCQkJCX0KIAkJCQkJfQpkaWZmIC1OYXJ1
cCBwb3J0YWdlLXV0aWxzLTIwMDYxMTEwL3F1c2UuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTEwLm5l
dy9xdXNlLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTAvcXVzZS5jCTIwMDYtMTEtMTEgMDA6
NDg6MzkuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMTEwLm5ldy9xdXNl
LmMJMjAwNi0xMS0xMSAwMTowMzo0My45ODk0NzYwMjkgKzAxMDAKQEAgLTE0LDEwICsxNCwxMSBA
QAogIHF1c2UgLUtlIC0tICBubHMKICovCiAKLSNkZWZpbmUgUVVTRV9GTEFHUyAiZWF2S0xERjpO
IiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUVVTRV9GTEFHUyAiZWFvOnZLTERGOk4iIENPTU1PTl9G
TEFHUwogc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXVzZV9sb25nX29wdHNbXSA9IHsKIAl7
ImV4YWN0IiwgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnZSd9LAogCXsiYWxsIiwgICAgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdhJ30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwg
J28nfSwKIAl7ImtleXdvcmRzIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnSyd9LAogCXsibGljZW5z
ZSIsICAgbm9fYXJndW1lbnQsIE5VTEwsICdMJ30sCiAJeyJkZXNjcmliZSIsICBub19hcmd1bWVu
dCwgTlVMTCwgJ0QnfSwKQEAgLTI4LDYgKzI5LDcgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29u
c3QgcXVzZV9sb25nX29wdAogc3RhdGljIGNvbnN0IGNoYXIgKnF1c2Vfb3B0c19oZWxwW10gPSB7
CiAJIlNob3cgZXhhY3Qgbm9uIHJlZ2V4cCBtYXRjaGluZyB1c2luZyBzdHJjbXAiLAogCSJTaG93
IGFubm95aW5nIHRoaW5ncyBpbiBJVVNFIiwKKwkiT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3Zl
cmxheSIsCiAJIlVzZSB0aGUgS0VZV09SRFMgdnMgSVVTRSIsCiAJIlVzZSB0aGUgTElDRU5TRSB2
cyBJVVNFIiwKIAkiRGVzY3JpYmUgdGhlIFVTRSBmbGFnIiwKQEAgLTM4LDcgKzQwLDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgKnF1c2Vfb3B0c19oZWxwW10gPSB7CiBzdGF0aWMgY29uc3QgY2hhciBx
dXNlX3Jjc2lkW10gPSAiJElkOiBxdXNlLmMsdiAxLjUzIDIwMDYvMTEvMDkgMDA6MTg6MDUgdmFw
aWVyIEV4cCAkIjsKICNkZWZpbmUgcXVzZV91c2FnZShyZXQpIHVzYWdlKHJldCwgUVVTRV9GTEFH
UywgcXVzZV9sb25nX29wdHMsIHF1c2Vfb3B0c19oZWxwLCBsb29rdXBfYXBwbGV0X2lkeCgicXVz
ZSIpKQogCi1pbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBjaGFyICoq
YXJndik7CitpbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIHNob3J0IHJlcG8sIGNoYXIg
cmVwb19zZWFyY2hbXSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIAogY2hhciBxdXNlX25hbWVf
b25seSA9IDA7CiAKQEAgLTgxLDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfaGlnaGxpZ2h0
ZWRfdXNlX2ZsYWdzKAogCX0KIH0KIAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIHNo
b3J0IHJlcG8sIGNoYXIgcmVwb19zZWFyY2hbXSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewog
I2RlZmluZSBOVU1fU0VBUkNIX0ZJTEVTIEFSUl9TSVpFKHNlYXJjaF9maWxlcykKIAljaGFyIGJ1
ZltCVUZTSVpFXSwgKnA7CkBAIC05MSwxMjEgKzkzLDE2MiBAQCBpbnQgcXVzZV9kZXNjcmliZV9m
bGFnKGludCBpbmQsIGludCBhcmdjCiAJRklMRSAqZnBbTlVNX1NFQVJDSF9GSUxFU107CiAJRElS
ICpkOwogCXN0cnVjdCBkaXJlbnQgKmRlOworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXk7CiAKLQlm
b3IgKGkgPSAwOyBpIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytpKSB7Ci0JCXNucHJpbnRmKGJ1Ziwg
c2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy8lcyIsIHBvcnRkaXIsIHNlYXJjaF9maWxlc1tpXSk7
Ci0JCWlmICgoZnBbaV0gPSBmb3BlbihidWYsICJyIikpID09IE5VTEwpCi0JCQl3YXJucCgic2tp
cHBpbmcgJXMiLCBzZWFyY2hfZmlsZXNbaV0pOwotCX0KKwljdXJfb3ZlcmxheT1vdmVybGF5X2dl
bnRvbzsKIAotCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgewotCQlzID0gc3RybGVuKGFy
Z3ZbaV0pOworCWRvIHsKKwkJaWYgKCByZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIGN1cl9v
dmVybGF5LT5uYW1lLCBzaXplb2YoIHJlcG9fc2VhcmNoKSkpCisJCQljb250aW51ZTsKKwkJZm9y
IChpID0gMDsgaSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgeworCQkJc25wcmludGYoYnVmLCBz
aXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9m
aWxlc1tpXSk7CisJCQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQorCQkJ
CWlmICggdmVyYm9zZSApCisJCQkJCXdhcm5wKCJza2lwcGluZyAlcyBmb3IgdGhlICVzIG92ZXJs
YXkiLCBzZWFyY2hfZmlsZXNbaV0sIGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJfQogCi0JCWZvciAo
ZiA9IDA7IGYgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIHsKLQkJCWlmIChmcFtmXSA9PSBOVUxM
KQotCQkJCWNvbnRpbnVlOworCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspIHsKKwkJCXMg
PSBzdHJsZW4oYXJndltpXSk7CiAKLQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBm
cFtmXSkgIT0gTlVMTCkgewotCQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4n
KQorCQkJZm9yIChmID0gMDsgZiA8IE5VTV9TRUFSQ0hfRklMRVM7ICsrZikgeworCQkJCWlmIChm
cFtmXSA9PSBOVUxMKQogCQkJCQljb250aW51ZTsKIAotCQkJCWlmICgocCA9IHN0cnJjaHIoYnVm
LCAnXG4nKSkgIT0gTlVMTCkKLQkJCQkJKnAgPSAnXDAnOworCQkJCXdoaWxlIChmZ2V0cyhidWYs
IHNpemVvZihidWYpLCBmcFtmXSkgIT0gTlVMTCkgeworCQkJCQlpZiAoYnVmWzBdID09ICcjJyB8
fCBidWZbMF0gPT0gJ1xuJykKKwkJCQkJCWNvbnRpbnVlOwogCi0JCQkJc3dpdGNoIChmKSB7Ci0J
CQkJCWNhc2UgMDogLyogR2xvYmFsIHVzZS5kZXNjICovCi0JCQkJCQlpZiAoIXN0cm5jbXAoYnVm
LCBhcmd2W2ldLCBzKSkKLQkJCQkJCQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAn
LScpIHsKLQkJCQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBCT0xELCBO
T1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKLQkJCQkJCQkJZ290byBza2lwX2Zp
bGU7Ci0JCQkJCQkJfQotCQkJCQkJYnJlYWs7CisJCQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAn
XG4nKSkgIT0gTlVMTCkKKwkJCQkJCSpwID0gJ1wwJzsKIAotCQkJCQljYXNlIDE6IC8qIExvY2Fs
IHVzZS5sb2NhbC5kZXNjICovCi0JCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBO
VUxMKQorCQkJCQlzd2l0Y2ggKGYpIHsKKwkJCQkJCWNhc2UgMDogLyogR2xvYmFsIHVzZS5kZXNj
ICovCisJCQkJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCisJCQkJCQkJCWlmIChi
dWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09ICctJykgeworCQkJCQkJCQkJaWYgKCBjdXJfb3Zl
cmxheSA9PSBvdmVybGF5X2dlbnRvbyApCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczol
cyVzJXM6ICVzXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsK
KwkJCQkJCQkJCWVsc2UgCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2dsb2JhbCVzOiVzJXMl
czogJXNcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBO
T1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWdvdG8gc2tpcF9maWxlOworCQkJCQkJCQl9CiAJCQkJ
CQkJYnJlYWs7Ci0JCQkJCQkrK3A7Ci0JCQkJCQlpZiAoIXN0cm5jbXAocCwgYXJndltpXSwgcykp
IHsKLQkJCQkJCQlpZiAocFtzXSA9PSAnICcgJiYgcFtzKzFdID09ICctJykgewotCQkJCQkJCQkq
cCA9ICdcMCc7Ci0JCQkJCQkJCXByaW50ZigiICVzbG9jYWwlczolcyVzJXM6JXMlcyVzICVzXG4i
LCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBCT0xELCBidWYsIE5PUk0sIHArcysz
KTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQlicmVhazsKIAotCQkJCQljYXNlIDI6IC8qIEFy
Y2hpdGVjdHVyZXMgYXJjaC5saXN0ICovCi0JCQkJCQlpZiAoIXN0cmNtcChidWYsIGFyZ3ZbaV0p
KSB7Ci0JCQkJCQkJcHJpbnRmKCIgJXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1cmVcbiIs
IEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwotCQkJCQkJCWdvdG8g
c2tpcF9maWxlOwotCQkJCQkJfQotCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDE6IC8qIExvY2Fs
IHVzZS5sb2NhbC5kZXNjICovCisJCQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkgPT0g
TlVMTCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJKytwOworCQkJCQkJCWlmICghc3RybmNtcChw
LCBhcmd2W2ldLCBzKSkgeworCQkJCQkJCQlpZiAocFtzXSA9PSAnICcgJiYgcFtzKzFdID09ICct
JykgeworCQkJCQkJCQkJKnAgPSAnXDAnOworCQkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBv
dmVybGF5X2dlbnRvbyApCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVz
JXMgJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9S
TSwgcCtzKzMpOworCQkJCQkJCQkJZWxzZSAKKwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzbG9j
YWwlczolcyVzJXM6JXMlcyVzICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwg
QkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JNLCBwK3MrMyk7CisJCQkJCQkJCX0K
KwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CiAKLQkJCQkJY2FzZSAzOiAvKiBMYW5ndWFnZXMgbGFu
Zy5kZXNjICovCi0JCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKLQkJCQkJCQlp
ZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKLQkJCQkJCQkJcHJpbnRmKCIg
JXNsYW5nJXM6JXMlcyVzOiAlcyBsaW5ndWFcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0s
IE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJY2FzZSAyOiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlz
dCAqLworCQkJCQkJCWlmICghc3RyY21wKGJ1ZiwgYXJndltpXSkpIHsKKwkJCQkJCQkJaWYgKCBj
dXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbyApCisJCQkJCQkJCQlwcmludGYoIiAlc2FyY2gl
czolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwg
Tk9STSwgYXJndltpXSk7CisJCQkJCQkJCWVsc2UgCisJCQkJCQkJCQlwcmludGYoIiAoJXMpICVz
YXJjaCVzOiVzJXMlczogJXMgYXJjaGl0ZWN0dXJlXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9M
RCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7CiAJCQkJCQkJCWdvdG8gc2tp
cF9maWxlOwogCQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQkJCWJyZWFrOworCisJCQkJCQlj
YXNlIDM6IC8qIExhbmd1YWdlcyBsYW5nLmRlc2MgKi8KKwkJCQkJCQlpZiAoIXN0cm5jbXAoYnVm
LCBhcmd2W2ldLCBzKSkKKwkJCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0g
Jy0nKSB7CisJCQkJCQkJCQlpZiAoIGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vICkKKwkJ
CQkJCQkJCQlwcmludGYoIiAlc2xhbmclczolcyVzJXM6ICVzIGxpbmd1YVxuIiwgQk9MRCwgTk9S
TSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQllbHNlIAorCQkJCQkJ
CQkJCXByaW50ZigiICglcykgJXNsYW5nJXM6JXMlcyVzOiAlcyBsaW5ndWFcbiIsIGN1cl9vdmVy
bGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJ
CQkJCQkJCWdvdG8gc2tpcF9maWxlOworCQkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCX0K
IAkJCQl9Ci0JCQl9CiAKIHNraXBfZmlsZToKLQkJCXJld2luZChmcFtmXSk7CisJCQkJcmV3aW5k
KGZwW2ZdKTsKKwkJCX0KKworCQkJaWYgKCBpID09IChhcmdjIC0gMSkgKQorCQkJCWZvciAoZj0w
OyBmPE5VTV9TRUFSQ0hfRklMRVM7ICsrZikgCisJCQkJCWlmICggZnBbZl0gKSB7CisJCQkJCQlm
Y2xvc2UoZnBbZl0pOworCQkJCQkJZnBbZl0gPSBOVUxMOworCQkJCQl9CiAJCX0KLQl9CiAKLQlm
b3IgKGY9MDsgZjxOVU1fU0VBUkNIX0ZJTEVTOyArK2YpCi0JCWZjbG9zZShmcFtmXSk7CisJfSB3
aGlsZSAoIChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOwogCiAJLyogbm93IHNjYW4g
dGhlIGRlc2MgZGlyICovCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVz
L2Rlc2MvIiwgcG9ydGRpcik7Ci0JZCA9IG9wZW5kaXIoYnVmKTsKLQl3aGlsZSAoKGRlID0gcmVh
ZGRpcihkKSkgIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKGRlLT5kX25hbWUrc3RybGVuKGRlLT5k
X25hbWUpLTUsICIuZGVzYyIpKQorCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOworCWRvIHsK
KwkJaWYgKCByZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIGN1cl9vdmVybGF5LT5uYW1lLCBz
aXplb2YoIHJlcG9fc2VhcmNoKSkpCiAJCQljb250aW51ZTsKLQotCQlzbnByaW50ZihidWYsIHNp
emVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIHBvcnRkaXIsIGRlLT5kX25hbWUpOwot
CQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkgewotCQkJd2FybigiQ291bGQg
bm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzsgc2tpcHBpbmciLCBkZS0+ZF9uYW1lKTsKKwkJc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwgY3VyX292ZXJsYXkt
PnBhdGgpOworCQlpZiAoICEgKGQgPSBvcGVuZGlyKGJ1ZikpKSB7CisJCQlpZiAoIHZlcmJvc2Ug
KSAKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAlcyAtPiBza2lwcGluZyIsIGJ1Zik7IAogCQkJ
Y29udGludWU7CiAJCX0KKwkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJ
CWlmIChzdHJjbXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwgIi5kZXNjIikpCisJ
CQkJY29udGludWU7CiAKLQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAh
PSBOVUxMKSB7Ci0JCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJCXNu
cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNjLyVzIiwgY3VyX292ZXJs
YXktPnBhdGgsIGRlLT5kX25hbWUpOworCQkJaWYgKChmcFswXT1mb3BlbihidWYsICJyIikpID09
IE5VTEwpIHsKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nOyBza2lw
cGluZyIsIGRlLT5kX25hbWUpOwogCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl3aGlsZSAoZmdl
dHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbMF0pICE9IE5VTEwpIHsKKwkJCQlpZiAoYnVmWzBdID09
ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJCQkJY29udGludWU7CiAKLQkJCWlmICgocCA9IHN0
cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKLQkJCQkqcCA9ICdcMCc7CisJCQkJaWYgKChwID0g
c3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQorCQkJCQkqcCA9ICdcMCc7CiAKLQkJCWlmICgo
cCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwpIHsKKwkJCQlpZiAoKHAgPSBzdHJjaHIoYnVm
LCAnLScpKSA9PSBOVUxMKSB7CiBpbnZhbGlkX2xpbmU6Ci0JCQkJd2FybigiSW52YWxpZCBsaW5l
IGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJ
CXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsKLQkJCQkvKiBtYXliZSB0aGUg
ZmxhZyBoYXMgYSAnLScgaW4gaXQgLi4uICovCi0JCQkJaWYgKChwID0gc3RyY2hyKHArMSwgJy0n
KSkgPT0gTlVMTCkKLQkJCQkJZ290byBpbnZhbGlkX2xpbmU7Ci0JCQl9Ci0JCQlwWy0xXSA9ICdc
MCc7Ci0JCQlwICs9IDI7CisJCQkJCXdhcm4oIkludmFsaWQgbGluZSBpbiAnJXMnOiAlcyIsIGRl
LT5kX25hbWUsIGJ1Zik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQl3aGlsZSAocFstMV0g
IT0gJyAnICYmIHBbMV0gIT0gJyAnKSB7CisJCQkJCS8qIG1heWJlIHRoZSBmbGFnIGhhcyBhICct
JyBpbiBpdCAuLi4gKi8KKwkJCQkJaWYgKChwID0gc3RyY2hyKHArMSwgJy0nKSkgPT0gTlVMTCkK
KwkJCQkJCWdvdG8gaW52YWxpZF9saW5lOworCQkJCX0KKwkJCQlwWy0xXSA9ICdcMCc7CisJCQkJ
cCArPSAyOwogCi0JCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspCi0JCQkJaWYgKCFzdHJj
bXAoYXJndltpXSwgYnVmKSkKLQkJCQkJcHJpbnRmKCIgJXMlcyVzOiVzJXMlczogJXNcbiIsIEJP
TEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIHApOwotCQl9Ci0JCWNs
b3NlKGYpOwotCX0KLQljbG9zZWRpcihkKTsKKwkJCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBp
KyspCisJCQkJCWlmICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpIHsKKwkJCQkJCWlmICggY3VyX292
ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gKQorCQkJCQkJCXByaW50ZigiICVzJXMlczolcyVzJXM6
ICVzXG4iLCBCT0xELCBkZS0+ZF9uYW1lLCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsK
KwkJCQkJCWVsc2UKKwkJCQkJCQlwcmludGYoIiAoJXMpICVzJXMlczolcyVzJXM6ICVzXG4iLCBj
dXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwg
Tk9STSwgcCk7CisJCQkJCX0KIAorCQkJfQorCQkJZmNsb3NlKGZwWzBdKTsKKwkJfQorCQljbG9z
ZWRpcihkKTsKKwl9IHdoaWxlICggKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CiAJ
cmV0dXJuIDA7CiB9CiAKIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewog
CUZJTEUgKmZwOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnN0cjsKKwlzaG9ydCBteWVycm9yID0g
MCwgcmVwbyA9IDA7CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hhciBvdmVybGF5X25hbWVb
NjRdOwogCiAJY2hhciBidWYwW19RX1BBVEhfTUFYXTsKIAljaGFyIGJ1ZjFbX1FfUEFUSF9NQVhd
OwpAQCAtMjE4LDYgKzI2MSwxMSBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAlzaG9ydCBxdXNlX2FsbCA9IDA7CiAJaW50IHJlZ2V4cF9tYXRjaGluZyA9IDEsIGksIGlk
eCA9IDA7CiAJc2l6ZV90IHNlYXJjaF9sZW47CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheSwgKm92
ZXJsYXlfdG1wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKwlvdmVybGF5X25h
bWVbMF0gPSAwOworCXJlcG9fc2VhcmNoWzBdID0gMDsKIAogCURCRygiYXJnYz0lZCBhcmd2WzBd
PSVzIGFyZ3ZbMV09JXMiLAogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4gMSA/IGFyZ3ZbMV0g
OiAiTlVMTD8iKTsKQEAgLTIyNiw2ICsyNzQsMTAgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCXN3aXRjaCAoaSkgewogCQljYXNlICdlJzogcmVnZXhwX21hdGNoaW5n
ID0gMDsgYnJlYWs7CiAJCWNhc2UgJ2EnOiBxdXNlX2FsbCA9IDE7IGJyZWFrOworCQljYXNlICdv
JzogCisJCQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywgc2l6ZW9m
KHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAnSyc6IGlkeCA9IDE7IGJyZWFrOwog
CQljYXNlICdMJzogaWR4ID0gMjsgYnJlYWs7CiAJCWNhc2UgJ0QnOiBpZHggPSAtMTsgYnJlYWs7
CkBAIC0yMzQsMTEgKzI4NiwxNCBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXVzZSkKIAkJfQogCX0KLQlpZiAoYXJnYyA9PSBv
cHRpbmQgJiYgIXF1c2VfYWxsICYmIGlkeCA+PSAwKQorCWlmIChhcmdjID09IG9wdGluZCAmJiAh
cXVzZV9hbGwgJiYgaWR4ID49IDApIHsKKwkJaWYgKCBpZHggPT0gMyApCisJCQlmcmVlKHNlYXJj
aF92YXJzK2lkeCk7CiAJCXF1c2VfdXNhZ2UoRVhJVF9GQUlMVVJFKTsKKwl9CiAKIAlpZiAoaWR4
ID09IC0xKQotCQlyZXR1cm4gcXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgYXJnYywgYXJndik7
CisJCXJldHVybiBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCByZXBvLCByZXBvX3NlYXJjaCwg
YXJnYywgYXJndik7CiAKIAlpZiAocXVzZV9hbGwpIG9wdGluZCA9IGFyZ2M7CiAJaW5pdGlhbGl6
ZV9lYnVpbGRfZmxhdCgpOwkvKiBzZXRzIG91ciBwd2QgdG8gJFBPUlRESVIgKi8KQEAgLTI1MCw2
ICszMDUsNDEgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJldHVy
biAxOwogCXdoaWxlICgoZmdldHMoZWJ1aWxkLCBzaXplb2YoZWJ1aWxkKSwgZnApKSAhPSBOVUxM
KSB7CiAJCUZJTEUgKm5ld2ZwOworCQlpZiAoICggcCA9IHN0cmNocihlYnVpbGQsICc6JykpKQor
CQl7CisJCQkqcCA9IDA7CisJCQlzdHIgPSBwKzI7CQkJLyogc2VwYXJhdG9yIGlzICc6OicgKi8K
KwkJCXAgPSBlYnVpbGQ7CisJCQlpZiAoIHJlcG8gJiYgc3RybmNtcCggcmVwb19zZWFyY2gsIHAs
IHNpemVvZihyZXBvX3NlYXJjaCkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCBzdHJjbXAob3Zl
cmxheV9uYW1lLCBwKSkKKwkJCXsKKwkJCQlmb3IgKCBvdmVybGF5X3RtcD1vdmVybGF5X2dlbnRv
byA7IG92ZXJsYXlfdG1wLT5uZXh0IDsgb3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQgKQor
CQkJCXsKKwkJCQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihv
dmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICggISBzdHJu
Y21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJ
CQl7CisJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7CisJCQkJCWlmIChjaGRpcihjdXJf
b3ZlcmxheS0+cGF0aCkgIT0gMCkgeworCQkJCQkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVz
JyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJCQlteWVycm9yPTE7CisJCQkJCX0K
KwkJCQl9IGVsc2UgCisJCQkJCW15ZXJyb3I9MTsKKwkJCQlpZiAoIG15ZXJyb3IpIHsKKwkJCQkJ
aWYgKCFyZWluaXRpYWxpemUpCisJCQkJCQl3YXJuZigiKGNhY2hlIHVwZGF0ZSBwZW5kaW5nKSAl
cyA6ICVzIiwgZWJ1aWxkLCBzdHJlcnJvcihlcnJubykpOworCQkJCQlyZWluaXRpYWxpemUgPSAx
OworCQkJCQlteWVycm9yPTA7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlzdHJuY3B5KG92
ZXJsYXlfbmFtZSwgY3VyX292ZXJsYXktPm5hbWUsIHNpemVvZihvdmVybGF5X25hbWUpKTsKKwkJ
CX0KKwkJCXN0cmNweShlYnVpbGQsIHN0cikgOworCQl9CisKIAkJaWYgKChwID0gc3RyY2hyKGVi
dWlsZCwgJ1xuJykpICE9IE5VTEwpCiAJCQkqcCA9IDA7CiAJCWlmICgobmV3ZnAgPSBmb3Blbihl
YnVpbGQsICJyIikpICE9IE5VTEwpIHsKQEAgLTM3NSw3ICs0NjUsNyBAQCBpbnQgcXVzZV9tYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJaWYgKHZlcmJvc2UgPiAzKQogCQkJCQkJcHJp
bnRmKCIlcyAlcyAlcyAiLCAqdXNlciA/IHVzZXIgOiAiTUlTU0lORyIsICpyZXZpc2lvbiA/IHJl
dmlzaW9uIDogIk1JU1NJTkciLCAqZGF0ZSA/IGRhdGUgOiAiTUlTU0lORyIpOwogCi0JCQkJCXBy
aW50ZigiJXMlcyVzICIsIENZQU4sIGVidWlsZCwgTk9STSk7CisJCQkJCXByaW50ZigiJXMlczo6
JXMlcyAiLCBDWUFOLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1aWxkLCBOT1JNKTsKIAkJCQkJcHJp
bnRfaGlnaGxpZ2h0ZWRfdXNlX2ZsYWdzKCZidWYwW3NlYXJjaF9sZW4rMV0sIG9wdGluZCwgYXJn
YywgYXJndik7CiAJCQkJCXB1dHMoTk9STSk7CiAJCQkJCWlmICh2ZXJib3NlID4gMSkgewpAQCAt
MzgzLDcgKzQ3Myw3IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ
CQkJaW50IEFSR0MgPSAwOwogCQkJCQkJbWFrZWFyZ3YoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgJkFS
R0MsICZBUkdWKTsKIAkJCQkJCWlmIChBUkdDID4gMCkgewotCQkJCQkJCXF1c2VfZGVzY3JpYmVf
ZmxhZygxLCBBUkdDLCBBUkdWKTsKKwkJCQkJCQlxdXNlX2Rlc2NyaWJlX2ZsYWcoMSwgcmVwbywg
cmVwb19zZWFyY2gsIEFSR0MsIEFSR1YpOwogCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBBUkdDOyBp
KyspCiAJCQkJCQkJCWZyZWUoQVJHVltpXSk7CiAJCQkJCQkJZnJlZShBUkdWKTsK
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101690</attachid>
            <date>2006-11-11 08:26 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9hcHBsZXRzLmggcG9ydGFnZS11dGls
cy0yMDA2MTExMS5uZXcvYXBwbGV0cy5oCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL2FwcGxl
dHMuaAkyMDA2LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGls
cy0yMDA2MTExMS5uZXcvYXBwbGV0cy5oCTIwMDYtMTEtMTIgMjM6MDE6NDAuNjIyMDA2MTU5ICsw
MTAwCkBAIC01Myw3ICs1Myw2IEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJeyJxY2hlY2siLCAgICBx
Y2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMi
fSwKIAl7InFkZXBlbmRzIiwgIHFkZXBlbmRzX21haW4sICAiPHBrZ25hbWU+IiwgICAgICAgInNo
b3cgZGVwZW5kZW5jeSBpbmZvIn0sCiAJeyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAgICAgIjxm
aWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmluZyBmaWxlcyJ9LAotCXsicWdsc2Ei
LCAgICAgcWdsc2FfbWFpbiwgICAgICI8YWN0aW9uPiA8bGlzdD4iLCAiY2hlY2sgR0xTQXMgYWdh
aW5zdCBzeXN0ZW0ifSwKIAl7InFncmVwIiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJn
cz4iLCAgICAgImdyZXAgaW4gZWJ1aWxkcyJ9LAogCXsicWxpc3QiLCAgICAgcWxpc3RfbWFpbiwg
ICAgICI8cGtnbmFtZT4iLCAgICAgICAibGlzdCBmaWxlcyBvd25lZCBieSBwa2duYW1lIn0sCiAJ
eyJxbG9wIiwgICAgICBxbG9wX21haW4sICAgICAgIjxwa2duYW1lPiIsICAgICAgICJlbWVyZ2Ug
bG9nIGFuYWx5emVyIn0sCkBAIC02NSw2ICs2NCw3IEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJeyJx
dGJ6MiIsICAgICBxdGJ6Ml9tYWluLCAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJtYW5pcHVsYXRl
IHRiejIgcGFja2FnZXMifSwKIAl7InF1c2UiLCAgICAgIHF1c2VfbWFpbiwgICAgICAiPHVzZWZs
YWc+IiwgICAgICAgImZpbmQgcGtncyB1c2luZyB1c2VmbGFncyJ9LAogCXsicXhwYWsiLCAgICAg
cXhwYWtfbWFpbiwgICAgICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB4cGFrIGFyY2hp
dmVzIn0sCisJeyJxZ2xzYSIsICAgICBxZ2xzYV9tYWluLCAgICAgIjxhY3Rpb24+IDxsaXN0PiIs
IE5VTEx9LAkJLyogImNoZWNrIEdMU0FzIGFnYWluc3Qgc3lzdGVtIiAqLwogCiAKIAkvKiBhbGlh
c2VzIGZvciBlcXVlcnkgY2FwYXRhYmlsaXR5ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTEvbWFpbi5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L21haW4uYwotLS0gcG9y
dGFnZS11dGlscy0yMDA2MTExMS9tYWluLmMJMjAwNi0xMS0xMSAyMzozNzoyMC4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L21haW4uYwkyMDA2LTExLTEyIDIz
OjIxOjU3LjU4MjAwMDExOSArMDEwMApAQCAtNzEsNiArNzEsNyBAQCBpbnQgcmVtYXRjaChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgCiBzdGF0aWMgY2hhciAqcm1zcGFjZShjaGFyICopOwog
CiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCk7Cit2b2lkIGluaXRpYWxpemVfb3Zl
cmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pOwogdm9pZCBpbml0aWFsaXplX2VidWlsZF9m
bGF0KHZvaWQpOwogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJl
aW5pdGlhbGl6ZV9hc19uZWVkZWQodm9pZCk7CkBAIC04NSwxMyArODYsMjEgQEAgc3RhdGljIGlu
dCBxdWlldCA9IDA7CiBzdGF0aWMgY2hhciBwcmV0ZW5kID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZSA9IDA7CiBzdGF0aWMgY2hhciByZWluaXRpYWxpemVfbWV0YWNhY2hlID0gMDsKLXN0
YXRpYyBjaGFyIHBvcnRkaXJbX1FfUEFUSF9NQVhdID0gIi91c3IvcG9ydGFnZSI7CiBzdGF0aWMg
Y2hhciBwb3J0YXJjaFsyMF0gPSAiIjsKIHN0YXRpYyBjaGFyIHBvcnR2ZGJbXSA9ICJ2YXIvZGIv
cGtnIjsKIHN0YXRpYyBjaGFyIHBvcnRjYWNoZWRpcltdID0gIm1ldGFkYXRhL2NhY2hlIjsKIHN0
YXRpYyBjaGFyIHBvcnRyb290W19RX1BBVEhfTUFYXSA9ICIvIjsKIHN0YXRpYyBjaGFyIGNvbmZp
Z19wcm90ZWN0W19RX1BBVEhfTUFYXSA9ICIvZXRjLyI7CiAKK3R5cGVkZWYgc3RydWN0IG92ZXJs
YXlfdCBvdmVybGF5X3Q7CitzdHJ1Y3Qgb3ZlcmxheV90IHsKKwljaGFyIG5hbWVbNjRdOworCWNo
YXIgcGF0aFtfUV9QQVRIX01BWF07CisJc3RydWN0IG92ZXJsYXlfdCAqbmV4dDsKK307CisKK3N0
YXRpYyBvdmVybGF5X3QgKm92ZXJsYXlfZ2VudG9vID0gTlVMTDsKKwogY2hhciBwa2dkaXJbNTEy
XSA9ICIvdXNyL3BvcnRhZ2UvcGFja2FnZXMvIjsKIGNoYXIgcG9ydF90bXBkaXJbNTEyXSA9ICIv
dmFyL3RtcC9wb3J0YWdlLyI7CiAKQEAgLTIwMSwxMCArMjEwLDEwIEBAIHN0YXRpYyB2b2lkIHVz
YWdlKGludCBzdGF0dXMsIGNvbnN0IGNoYXIKIAlmb3IgKGkgPSAwOyBvcHRzW2ldLm5hbWU7ICsr
aSkgewogCQlhc3NlcnQoaGVscFtpXSAhPSBOVUxMKTsgLyogdGhpcyBhc3NlcnQgaXMgYSBsaWZl
IHNhdmVyIHdoZW4gYWRkaW5nIG5ldyBhcHBsZXRzLiAqLwogCQlpZiAob3B0c1tpXS5oYXNfYXJn
ID09IG5vX2FyZ3VtZW50KQotCQkJcHJpbnRmKCIgIC0lYywgLS0lLTE1cyVzKiVzICVzXG4iLCBv
cHRzW2ldLnZhbCwKKwkJCXByaW50ZigiICAtJWMsIC0tJS0xNnMlcyolcyAlc1xuIiwgb3B0c1tp
XS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBSRUQsIE5PUk0sIF8oaGVscFtpXSkpOwogCQllbHNl
Ci0JCQlwcmludGYoIiAgLSVjLCAtLSUtOHMgJXM8YXJnPiVzICVzKiVzICVzXG4iLCBvcHRzW2ld
LnZhbCwKKwkJCXByaW50ZigiICAtJWMsIC0tJS05cyAlczxhcmc+JXMgJXMqJXMgJXNcbiIsIG9w
dHNbaV0udmFsLAogCQkJCW9wdHNbaV0ubmFtZSwgREtCTFVFLCBOT1JNLCBSRUQsIE5PUk0sIF8o
aGVscFtpXSkpOwogCX0KIAlleGl0KHN0YXR1cyk7CkBAIC00NjksMTcgKzQ3OCw3OSBAQCBjaGFy
ICpzdHJpbmNyX3Zhcihjb25zdCBjaGFyICpuYW1lLCBjaGFyCiAJcmV0dXJuIChjaGFyICopIHZh
bHVlOwogfQogCit2b2lkIGluaXRpYWxpemVfb3ZlcmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5
W10pCit7CisJc2hvcnQgbWVycm9yID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpFXSwgZmlsZVtfUV9Q
QVRIX01BWF0sICpzLCAqcCwgKnQ7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKKwlGSUxFICpy
ZXBvX25hbWVGUDsKKwlzID0gcG9ydGRpcl9vdmVybGF5OworCWN1cl9vdmVybGF5ID0gb3Zlcmxh
eV9nZW50b287CisKKwl3aGlsZSAoKnMpIHsKKwkJY3VyX292ZXJsYXktPm5leHQgPSB4bWFsbG9j
ICggc2l6ZW9mICgqY3VyX292ZXJsYXktPm5leHQpKTsKKwkJY3VyX292ZXJsYXkgPSBjdXJfb3Zl
cmxheS0+bmV4dDsKKwkJY3VyX292ZXJsYXktPm5leHQgPSBOVUxMOworCisJCWlmICggKHA9c3Ry
Y2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc3RybmNweShjdXJfb3ZlcmxheS0+cGF0aCwg
cywgc2l6ZW9mKGN1cl9vdmVybGF5LT5wYXRoKSk7CisKKwkJLyogZmluZCB0aGUgbmFtZSBmb3Ig
dGhlIG92ZXJsYXkgKi8KKwkJc3RybmNweShmaWxlLCBjdXJfb3ZlcmxheS0+cGF0aCwgX1FfUEFU
SF9NQVgpOworCQlzdHJuY2F0KGZpbGUsICIvcHJvZmlsZXMvcmVwb19uYW1lIiwgX1FfUEFUSF9N
QVgpOworCQlpZiAoKCByZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikgKSkKKwkJeworCQkJ
aWYgKCAhICggZmdldHMoYnVmLCBzaXplb2YoYnVmKSxyZXBvX25hbWVGUCkpICkKKwkJCQltZXJy
b3IrKzsKKworCQkJcm1zcGFjZShidWYpOworCQkJaWYgKCAodCA9IHN0cmNocihidWYsJ1xuJykp
KQorCQkJCSp0ID0gMDsKKworCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVmLCBzaXpl
b2YoY3VyX292ZXJsYXktPm5hbWUpKTsKKworCQkJZmNsb3NlKHJlcG9fbmFtZUZQKTsKKworCQl9
IGVsc2UgCisJCQltZXJyb3IrKzsKKworCQlpZiAobWVycm9yKSB7CisJCQkvKiBkZWxldGUgdHJh
aWxpbmcgJy8nICovCisJCQl0ID0gY3VyX292ZXJsYXktPnBhdGggKyBzdHJsZW4oY3VyX292ZXJs
YXktPnBhdGgpIC0gMTsKKwkJCWlmICggKnQgPT0gJy8nICkKKwkJCQkqdCA9IDA7CisKKwkJCXN0
cm5jcHkoY3VyX292ZXJsYXktPm5hbWUsIGJhc2VuYW1lKGN1cl9vdmVybGF5LT5wYXRoKSwgc2l6
ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7CisJCQltZXJyb3I9MDsKKwkJfQorCisJCWlmIChwKQor
CQkJcyA9IHArMTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCQorfQorCisKIHZvaWQgaW5pdGlh
bGl6ZV9wb3J0YWdlX2Vudih2b2lkKQogewogCWNoYXIgbm9jb2xvciA9IDA7CiAJaW50IGksIGY7
CiAJc3RydWN0IHN0YXQgc3Q7CiAJRklMRSAqZnA7CisJY2hhciB0bXBfcG9ydGRpcltfUV9QQVRI
X01BWF07CisJY2hhciBwb3J0ZGlyX292ZXJsYXlbMjA0OF0gPSAiIjsKKwogCWNoYXIgYnVmW0JV
RlNJWkVdLCAqcywgKnA7CiAKIAljaGFyIHByb2ZpbGVbX1FfUEFUSF9NQVhdLCBwb3J0YWdlX2Zp
bGVbX1FfUEFUSF9NQVhdOworCiAJY29uc3QgY2hhciAqZmlsZXNbXSA9IHtwb3J0YWdlX2ZpbGUs
ICIvZXRjL21ha2UuZ2xvYmFscyIsICIvZXRjL21ha2UuY29uZiJ9OwogCXR5cGVkZWYgZW51bSB7
IF9RX0JPT0wsIF9RX1NUUiwgX1FfSVNUUiB9IHZhcl90eXBlczsKKwkKIAlzdHJ1Y3QgewogCQlj
b25zdCBjaGFyICpuYW1lOwogCQljb25zdCBzaXplX3QgbmFtZV9sZW47CkBAIC00OTMsMTMgKzU2
NCwxOSBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJeyJDT05GSUdfUFJP
VEVDVCIsICAgMTQsIF9RX1NUUiwgIGNvbmZpZ19wcm90ZWN0LCBzaXplb2YoY29uZmlnX3Byb3Rl
Y3QpfSwKIAkJeyJOT0NPTE9SIiwgICAgICAgICAgIDcsIF9RX0JPT0wsICZub2NvbG9yLCAgICAg
ICAxfSwKIAkJeyJGRUFUVVJFUyIsICAgICAgICAgIDgsIF9RX0lTVFIsIGZlYXR1cmVzLCAgICAg
ICBzaXplb2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9RX1NUUiwg
IHBvcnRkaXIsICAgICAgICBzaXplb2YocG9ydGRpcil9LAorCQl7IlBPUlRESVIiLCAgICAgICAg
ICAgNywgX1FfU1RSLCAgdG1wX3BvcnRkaXIsICAgIHNpemVvZih0bXBfcG9ydGRpcil9LAorCQl7
IlBPUlRESVJfT1ZFUkxBWSIsICAxNSwgX1FfSVNUUiwgcG9ydGRpcl9vdmVybGF5LHNpemVvZihw
b3J0ZGlyX292ZXJsYXkpfSwKIAkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgMTUsIF9RX1NUUiwgIGJp
bmhvc3QsICAgICAgICBzaXplb2YoYmluaG9zdCl9LAogCQl7IlBPUlRBR0VfVE1QRElSIiwgICAx
NCwgX1FfU1RSLCAgcG9ydF90bXBkaXIsICAgIHNpemVvZihwb3J0X3RtcGRpcil9LAogCQl7IlBL
R0RJUiIsICAgICAgICAgICAgNiwgX1FfU1RSLCAgcGtnZGlyLCAgICAgICAgIHNpemVvZihwa2dk
aXIpfSwKIAkJeyJST09UIiwgICAgICAgICAgICAgIDQsIF9RX1NUUiwgIHBvcnRyb290LCAgICAg
ICBzaXplb2YocG9ydHJvb3QpfQogCX07CiAKKwlvdmVybGF5X2dlbnRvbyA9IChvdmVybGF5X3Qq
KSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlzdHJjcHkob3ZlcmxheV9nZW50
b28tPm5hbWUsImdlbnRvbyIpOworCXN0cmNweShvdmVybGF5X2dlbnRvby0+cGF0aCwiL3Vzci9w
b3J0YWdlIik7CisJb3ZlcmxheV9nZW50b28tPm5leHQgPSBOVUxMOworCiAJaWYgKChwID0gc3Ry
Y2hyKHBvcnRyb290LCAnLycpKSAhPSBOVUxMKQogCQlpZiAoc3RybGVuKHApICE9IDEpCiAJCQlz
dHJuY2F0KHBvcnRyb290LCAiLyIsIHNpemVvZihwb3J0cm9vdCkpOwpAQCAtNTkxLDYgKzY2OCwx
MyBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJbm9fY29sb3JzKCk7CiAJ
ZWxzZQogCQljb2xvcl9yZW1hcCgpOworCisKKwlzdHJuY3B5KG92ZXJsYXlfZ2VudG9vLT5wYXRo
LCB0bXBfcG9ydGRpciwgc2l6ZW9mKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSk7CisKKwkvKiBub3cg
d2UgaW5pdGlsaWFzZSB0aGUgb3ZlcmxheSBjaGFpbmVkIGxpc3Qgd2l0aCBvdmVybGF5X2dlbnRv
byBhcyB0aGUgZmlyc3QgJ2l0ZW0nICAqLworCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9v
dmVybGF5KTsKKwogfQogCiBlbnVtIHsKQEAgLTYxOSwxOSArNzAzLDIxIEBAIGNvbnN0IGNoYXIg
KmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAlpbnQgYSwgYiwgYywgZCwgZSwgaTsKIAlp
bnQgZnJhYywgc2VjcywgY291bnQ7CiAJRklMRSAqZnA7CisJb3ZlcmxheV90ICpjdXJfb3Zlcmxh
eTsKIAogCWEgPSBiID0gYyA9IGQgPSBlID0gaSA9IDA7CiAJY291bnQgPSBmcmFjID0gc2VjcyA9
IDA7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKIAogCWNhY2hlX2ZpbGUgPSAoY2Fj
aGVfdHlwZSA9PSBDQUNIRV9FQlVJTEQgPyBDQUNIRV9FQlVJTERfRklMRSA6IENBQ0hFX01FVEFE
QVRBX0ZJTEUpOwogCi0JaWYgKGNoZGlyKHBvcnRkaXIpICE9IDApIHsKLQkJd2FybnAoImNoZGly
IHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAoY2hkaXIob3ZlcmxheV9n
ZW50b28tPnBhdGgpICE9IDApIHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWls
ZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmIChjYWNo
ZV90eXBlID09IENBQ0hFX01FVEFEQVRBICYmIGNoZGlyKHBvcnRjYWNoZWRpcikgIT0gMCkgewot
CQl3YXJucCgiY2hkaXIgdG8gcG9ydGFnZSBjYWNoZSAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIs
IHBvcnRjYWNoZWRpcik7CisJCXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycg
ZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgsIHBvcnRjYWNoZWRpcik7CiAJCWdvdG8gcmV0
OwogCX0KIApAQCAtNjQ3LDY0ICs3MzMsNzEgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0
KGludCBjYWNoZV90eQogCiAJdW5saW5rKGNhY2hlX2ZpbGUpOwogCWlmIChlcnJubyAhPSBFTk9F
TlQpIHsKLQkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBjYWNo
ZV9maWxlKTsKKwkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBvdmVybGF5X2dl
bnRvby0+cGF0aCwgY2FjaGVfZmlsZSk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmICgoZnAgPSBm
b3BlbihjYWNoZV9maWxlLCAidyIpKSA9PSBOVUxMKSB7Ci0JCXdhcm5mcCgib3BlbmluZyAnJXMv
JXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNhY2hlX2ZpbGUpOworCQl3YXJuZnAoIm9wZW5pbmcgJyVz
LyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2FjaGVfZmlsZSk7CiAJCWdvdG8g
cmV0OwogCX0KIAogCWdldHRpbWVvZmRheSgmc3RhcnQsIE5VTEwpOwogCi0JaWYgKChhID0gc2Nh
bmRpcigiLiIsICZjYXRlZ29yeSwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQln
b3RvIHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKLQkJc3RhdChjYXRlZ29yeVtp
XS0+ZF9uYW1lLCAmc3QpOwotCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCQljb250aW51
ZTsKLQkJaWYgKHN0cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5VTEwpCi0JCQlp
ZiAoKHN0cm5jbXAoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgInZpcnR1YWwiLCA3KSkgIT0gMCkKKwlk
byB7CisJCWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gfHwgY2hkaXIoY3VyX292
ZXJsYXktPnBhdGgpID09IDApIHsKKwkJCWlmICgoYSA9IHNjYW5kaXIoIi4iLCAmY2F0ZWdvcnks
IGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKIAkJCQljb250aW51ZTsKIAotCQlpZiAo
KGIgPSBzY2FuZGlyKGNhdGVnb3J5W2ldLT5kX25hbWUsICZwbiwgZmlsdGVyX2hpZGRlbiwgYWxw
aGFzb3J0KSkgPCAwKQotCQkJY29udGludWU7Ci0JCWZvciAoYyA9IDA7IGMgPCBiOyBjKyspIHsK
LQkJCWNoYXIgZGVbX1FfUEFUSF9NQVhdOworCQkJZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewor
CQkJCXN0YXQoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnN0KTsKKwkJCQlpZiAoIVNfSVNESVIoc3Qu
c3RfbW9kZSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChzdHJjaHIoY2F0ZWdvcnlbaV0tPmRf
bmFtZSwgJy0nKSA9PSBOVUxMKQorCQkJCQlpZiAoKHN0cm5jbXAoY2F0ZWdvcnlbaV0tPmRfbmFt
ZSwgInZpcnR1YWwiLCA3KSkgIT0gMCkKKwkJCQkJCWNvbnRpbnVlOwogCi0JCQlzbnByaW50Zihk
ZSwgc2l6ZW9mKGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFt
ZSk7CisJCQkJaWYgKChiID0gc2NhbmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRl
cl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJY29udGludWU7CisJCQkJZm9yIChjID0g
MDsgYyA8IGI7IGMrKykgeworCQkJCQljaGFyIGRlW19RX1BBVEhfTUFYXTsKIAotCQkJaWYgKHN0
YXQoZGUsICZzdCkgPCAwKQotCQkJCWNvbnRpbnVlOworCQkJCQlzbnByaW50ZihkZSwgc2l6ZW9m
KGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSk7CiAKLQkJ
CXN3aXRjaCAoY2FjaGVfdHlwZSkgewotCQkJY2FzZSBDQUNIRV9FQlVJTEQ6Ci0JCQkJaWYgKCFT
X0lTRElSKHN0LnN0X21vZGUpKQotCQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJCWNhc2Ug
Q0FDSEVfTUVUQURBVEE6Ci0JCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0JCQkJCWZwcmlu
dGYoZnAsICIlc1xuIiwgZGUpOwotCQkJCWNvbnRpbnVlOwotCQkJCWJyZWFrOwotCQkJfQotCQkJ
aWYgKChlID0gc2NhbmRpcihkZSwgJmViLCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDAp
Ci0JCQkJY29udGludWU7Ci0JCQlmb3IgKGQgPSAwOyBkIDwgZTsgZCsrKSB7Ci0JCQkJaWYgKChw
ID0gc3RycmNocihlYltkXS0+ZF9uYW1lLCAnLicpKSAhPSBOVUxMKQotCQkJCQlpZiAoc3RyY21w
KHAsICIuZWJ1aWxkIikgPT0gMCkgewotCQkJCQkJY291bnQrKzsKLQkJCQkJCWZwcmludGYoZnAs
ICIlcy8lcy8lc1xuIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSwgZWJbZF0t
PmRfbmFtZSk7CisJCQkJCWlmIChzdGF0KGRlLCAmc3QpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOwor
CisJCQkJCXN3aXRjaCAoY2FjaGVfdHlwZSkgeworCQkJCQljYXNlIENBQ0hFX0VCVUlMRDoKKwkJ
CQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCWJy
ZWFrOworCQkJCQljYXNlIENBQ0hFX01FVEFEQVRBOgorCQkJCQkJaWYgKFNfSVNSRUcoc3Quc3Rf
bW9kZSkpCisJCQkJCQkJZnByaW50ZihmcCwgIiVzXG4iLCBkZSk7CisJCQkJCQljb250aW51ZTsK
KwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmICgoZSA9IHNjYW5kaXIoZGUsICZlYiwgZmls
dGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQorCQkJCQkJY29udGludWU7CisJCQkJCWZvciAo
ZCA9IDA7IGQgPCBlOyBkKyspIHsKKwkJCQkJCWlmICgocCA9IHN0cnJjaHIoZWJbZF0tPmRfbmFt
ZSwgJy4nKSkgIT0gTlVMTCkKKwkJCQkJCQlpZiAoc3RyY21wKHAsICIuZWJ1aWxkIikgPT0gMCkg
eworCQkJCQkJCQljb3VudCsrOworCQkJCQkJCQlmcHJpbnRmKGZwLCAiJXM6OiVzLyVzLyVzXG4i
LCBjdXJfb3ZlcmxheS0+bmFtZSwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSwg
ZWJbZF0tPmRfbmFtZSk7CisJCQkJCQkJfQogCQkJCQl9CisJCQkJCXdoaWxlIChkLS0pIGZyZWUo
ZWJbZF0pOworCQkJCQlmcmVlKGViKTsKKwkJCQl9CisJCQkJd2hpbGUgKGItLSkgZnJlZShwblti
XSk7CisJCQkJZnJlZShwbik7CiAJCQl9Ci0JCQl3aGlsZSAoZC0tKSBmcmVlKGViW2RdKTsKLQkJ
CWZyZWUoZWIpOwotCQl9Ci0JCXdoaWxlIChiLS0pIGZyZWUocG5bYl0pOwotCQlmcmVlKHBuKTsK
LQl9CisJCX0gZWxzZQorCQkJd2FybnAoImNoZGlyIHRvICclcycgZmFpbGVkLCBza2lwcGluZyB0
aGUgJXMgcmVwb3NpdG9yeSIsIGN1cl9vdmVybGF5LT5wYXRoLCBjdXJfb3ZlcmxheS0+bmFtZSk7
CisKKwl9IHdoaWxlICggKGN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQpKTsJCisJCiAJ
ZmNsb3NlKGZwKTsKIAl3aGlsZSAoYS0tKSBmcmVlKGNhdGVnb3J5W2FdKTsKIAlmcmVlKGNhdGVn
b3J5KTsKQEAgLTcyMyw3ICs4MTYsNyBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQoaW50
IGNhY2hlX3R5CiAKIAl3YXJuKCJGaW5pc2hlZCAldSBlbnRyaWVzIGluICVkLiUwNmQgc2Vjb25k
cyIsIGNvdW50LCBzZWNzLCBmcmFjKTsKIAlpZiAoc2VjcyA+IDEwMCkKLQkJd2FybigiWW91IHNo
b3VsZCBjb25zaWRlciBhIGZhc3RlciBmaWxlIHN5c3RlbSBzdWNoIGFzIHJlaXNlcmZzIGZvciBQ
T1JURElSPSclcyciLCBwb3J0ZGlyKTsKKwkJd2FybigiWW91IHNob3VsZCBjb25zaWRlciBhIGZh
c3RlciBmaWxlIHN5c3RlbSBzdWNoIGFzIHJlaXNlcmZzIGZvciBQT1JURElSPSclcyciLCBvdmVy
bGF5X2dlbnRvby0+cGF0aCk7CiByZXQ6CiAJcmV0dXJuIGNhY2hlX2ZpbGU7CiB9CkBAIC03MzIs
OCArODI1LDggQEAgcmV0OgogCiB2b2lkIHJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCh2b2lkKQog
ewotCWlmICgoY2hkaXIocG9ydGRpcikpICE9IDApIHsKLQkJd2FybnAoImNoZGlyIHRvIFBPUlRE
SVIgJyVzJyBmYWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAoKGNoZGlyKG92ZXJsYXlfZ2VudG9vLT5w
YXRoKSkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIG92
ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJcmV0dXJuOwogCX0KIAl1bmxpbmsoQ0FDSEVfRUJVSUxE
X0ZJTEUpOwpAQCAtMTAwNiwxMCArMTA5OSwyMCBAQCBmdWNraXQ6CiAJcmV0dXJuIGNwZjsKIH0K
IAorLyogZnJlZSBvdmVybGF5cyAqLwordm9pZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlfdCAqb3Zl
cmxheSk7Cit2b2lkIGZyZWVfb3ZlcmxheXMob3ZlcmxheV90ICpvdmVybGF5KQoreworCWlmICgg
b3ZlcmxheS0+bmV4dCApCisJCWZyZWVfb3ZlcmxheXMob3ZlcmxheS0+bmV4dCk7CisJZnJlZShv
dmVybGF5KTsKK30KKwogdm9pZCBjbGVhbnVwKCkKIHsKIAlyZWluaXRpYWxpemVfYXNfbmVlZGVk
KCk7CiAJZnJlZV9zZXRzKHZpcnR1YWxzKTsKKwlmcmVlX292ZXJsYXlzKG92ZXJsYXlfZ2VudG9v
KTsKIAlmY2xvc2Uoc3RkZXJyKTsKIH0KIApkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYx
MTExL3EuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xLmMKLS0tIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTEvcS5jCTIwMDYtMTEtMTEgMjM6Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0
YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xLmMJMjAwNi0xMS0xMiAyMzowMTo0MC43ODU5ODEyMzEg
KzAxMDAKQEAgLTcsMTUgKzcsMTcgQEAKICAqIENvcHlyaWdodCAyMDA1LTIwMDYgTWlrZSBGcnlz
aW5nZXIgIC0gPHZhcGllckBnZW50b28ub3JnPgogICovCiAKLSNkZWZpbmUgUV9GTEFHUyAiaXJt
IiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUV9GTEFHUyAiaWxybSIgQ09NTU9OX0ZMQUdTCiBzdGF0
aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxX2xvbmdfb3B0c1tdID0gewogCXsiaW5zdGFsbCIsICAg
ICAgbm9fYXJndW1lbnQsIE5VTEwsICdpJ30sCisJeyJscy1vdmVybGF5cyIsICBub19hcmd1bWVu
dCwgTlVMTCwgJ2wnfSwKIAl7InJlaW5pdGlhbGl6ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9
LAogCXsibWV0YWNhY2hlIiwgICAgbm9fYXJndW1lbnQsIE5VTEwsICdtJ30sCiAJQ09NTU9OX0xP
TkdfT1BUUwogfTsKIHN0YXRpYyBjb25zdCBjaGFyICpxX29wdHNfaGVscFtdID0gewogCSJJbnN0
YWxsIHN5bWxpbmtzIGZvciBhcHBsZXRzIiwKKwkiTGlzdCBjb25maWd1cmVkIG92ZXJsYXlzIiwK
IAkiUmVpbml0aWFsaXplIGVidWlsZCBjYWNoZSIsCiAJIlJlaW5pdGlhbGl6ZSBtZXRhZGF0YSBj
YWNoZSIsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtNzAsNiArNzIsNyBAQCBpbnQgcV9tYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQgaTsKIAljaGFyICpwOwogCUFQUExFVCBmdW5jOwor
CW92ZXJsYXlfdCAqIGN1cl9vdmVybGF5OwogCiAJaWYgKGFyZ2MgPT0gMCkKIAkJcmV0dXJuIDE7
CkBAIC04OSw2ICs5MiwxNSBAQCBpbnQgcV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ
Q09NTU9OX0dFVE9QVFNfQ0FTRVMocSkKIAkJY2FzZSAnbSc6IHJlaW5pdGlhbGl6ZV9tZXRhY2Fj
aGUgPSAxOyBicmVhazsKIAkJY2FzZSAncic6IHJlaW5pdGlhbGl6ZSA9IDE7IGJyZWFrOworCQlj
YXNlICdsJzogeworCQkJcHJpbnRmKCJcbiVzT3ZlcmxheShzKSA6JXNcblxuIiwgR1JFRU4sIE5P
Uk0pOworCQkJY3VyX292ZXJsYXk9b3ZlcmxheV9nZW50b287CisJCQlkbyB7CisJCQkJcHJpbnRm
KCIgICBOYW1lIDogJXMlLTIwLjIwcyVzIFx0bG9jYXRpb24gOiAlcyVzJXNcbiIsIENZQU4sIGN1
cl9vdmVybGF5LT5uYW1lLCBOT1JNLCBDWUFOLCBjdXJfb3ZlcmxheS0+cGF0aCwgTk9STSk7CisJ
CQl9IHdoaWxlICggKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCQlmcHV0Yygn
XG4nLCBzdGRvdXQpOworCQkJcmV0dXJuIDA7CisJCQl9CiAJCWNhc2UgJ2knOiB7CiAJCQljaGFy
IGJ1ZltfUV9QQVRIX01BWF07CiAJCQkvKiBhbHdheXMgYnplcm8gYSBidWZmZXIgYmVmb3JlIHVz
aW5nIHJlYWRsaW5rKCkgKi8KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9xY2Fj
aGUuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xY2FjaGUuYwotLS0gcG9ydGFnZS11dGls
cy0yMDA2MTExMS9xY2FjaGUuYwkyMDA2LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAor
KysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcWNhY2hlLmMJMjAwNi0xMS0xMiAyMzowMTo0
MC44Mjk5NzQ1NDMgKzAxMDAKQEAgLTUxMiwxMCArNTEyLDEwIEBAIGludCBxY2FjaGVfdHJhdmVy
c2Uodm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAlpbnQgaSwgaiwgaywgbGVuLCBudW1fY2F0LCBudW1f
cGtnLCBudW1fZWJ1aWxkOwogCXN0cnVjdCBkaXJlY3QgKipjYXRlZ29yaWVzLCAqKnBhY2thZ2Vz
LCAqKmVidWlsZHM7CiAKLQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIp
ICsgc3RybGVuKHBvcnRkaXIpICsgMSk7CisJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihR
Q0FDSEVfRURCKSArIHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyAxKTsKIAljYXRwYXRo
ID0geG1hbGxvYyhsZW4pOwogCW1lbXNldChjYXRwYXRoLCAwLCBsZW4pOwotCXNucHJpbnRmKGNh
dHBhdGgsIGxlbiwgIiVzJXMiLCBRQ0FDSEVfRURCLCBwb3J0ZGlyKTsKKwlzbnByaW50ZihjYXRw
YXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCiAJ
aWYgKC0xID09IChudW1fY2F0ID0gc2NhbmRpcihjYXRwYXRoLCAmY2F0ZWdvcmllcywgcWNhY2hl
X2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQllcnIoIiVzICVzIiwgY2F0cGF0aCwgc3Ry
ZXJyb3IoZXJybm8pKTsKQEAgLTUyNywxMCArNTI3LDEwIEBAIGludCBxY2FjaGVfdHJhdmVyc2Uo
dm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAogCS8qIHRyYXZlcnNlIGNhdGVnb3JpZXMgKi8KIAlmb3Ig
KGkgPSAwOyBpIDwgbnVtX2NhdDsgaSsrKSB7Ci0JCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJs
ZW4ocG9ydGRpcikgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUp
ICsgMSk7CisJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBh
dGgpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIDEpOwog
CQlwa2dwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQocGtncGF0aCwgMCwgbGVuKTsKLQkJ
c25wcmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBwb3J0ZGlyLCBjYXRlZ29yaWVzW2ldLT5k
X25hbWUpOworCQlzbnByaW50Zihwa2dwYXRoLCBsZW4sICIlcy8lcyIsIG92ZXJsYXlfZ2VudG9v
LT5wYXRoLCBjYXRlZ29yaWVzW2ldLT5kX25hbWUpOwogCiAJCWlmICgtMSA9PSAobnVtX3BrZyA9
IHNjYW5kaXIocGtncGF0aCwgJnBhY2thZ2VzLCBxY2FjaGVfZmlsZV9zZWxlY3QsIGFscGhhc29y
dCkpKSB7CiAJCQl3YXJuKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC01
NTIsMTAgKzU1MiwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5jKShxY2FjaGVf
CiAKIAkJLyogdHJhdmVyc2UgcGFja2FnZXMgKi8KIAkJZm9yIChqID0gMDsgaiA8IG51bV9wa2c7
IGorKykgewotCQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihwb3J0ZGlyKSArIHN0cmxl
bigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyBzdHJsZW4oIi8iKSArIHN0
cmxlbihwYWNrYWdlc1tqXS0+ZF9uYW1lKSArIDEpOworCQkJbGVuID0gc2l6ZW9mKGNoYXIpICog
KHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRl
Z29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBzdHJsZW4ocGFja2FnZXNbal0tPmRf
bmFtZSkgKyAxKTsKIAkJCWVidWlsZHBhdGggPSB4bWFsbG9jKGxlbik7CiAJCQltZW1zZXQoZWJ1
aWxkcGF0aCwgMCwgbGVuKTsKLQkJCXNucHJpbnRmKGVidWlsZHBhdGgsIGxlbiwgIiVzLyVzLyVz
IiwgcG9ydGRpciwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lLCBwYWNrYWdlc1tqXS0+ZF9uYW1lKTsK
KwkJCXNucHJpbnRmKGVidWlsZHBhdGgsIGxlbiwgIiVzLyVzLyVzIiwgb3ZlcmxheV9nZW50b28t
PnBhdGgsIGNhdGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRfbmFtZSk7CiAKIAkJ
CWlmICgtMSA9PSAobnVtX2VidWlsZCA9IHNjYW5kaXIoZWJ1aWxkcGF0aCwgJmVidWlsZHMsIHFj
YWNoZV9lYnVpbGRfc2VsZWN0LCBxY2FjaGVfdmVyY21wKSkpIHsKIAkJCQl3YXJuKCIlcyAlcyIs
IGVidWlsZHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC03NzMsMTAgKzc3MywxMCBAQCB2b2lk
IHFjYWNoZV9zdGF0cyhxY2FjaGVfZGF0YSAqZGF0YSkKIAkJZm9yIChpID0gMDsgYXJjaGxpc3Rb
aV07IGkrKykKIAkJCWFyY2hpdGVjdHVyZXMrKzsKIAotCQlsZW4gPSBzaXplb2YoY2hhcikgKiAo
c3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKHBvcnRkaXIpICsgMSk7CisJCWxlbiA9IHNpemVv
ZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VEQikgKyBzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBh
dGgpICsgMSk7CiAJCWNhdHBhdGggPSB4bWFsbG9jKGxlbik7CiAJCW1lbXNldChjYXRwYXRoLCAw
LCBsZW4pOwotCQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgcG9y
dGRpcik7CisJCXNucHJpbnRmKGNhdHBhdGgsIGxlbiwgIiVzJXMiLCBRQ0FDSEVfRURCLCBvdmVy
bGF5X2dlbnRvby0+cGF0aCk7CiAKIAkJaWYgKC0xID09IChudW1jYXQgPSBzY2FuZGlyKGNhdHBh
dGgsICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxlY3QsIGFscGhhc29ydCkpKSB7CiAJCQll
cnIoIiVzICVzIiwgY2F0cGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTkyOCwxMSArOTI4LDEx
IEBAIGludCBxY2FjaGVfaW5pdCgpCiAJY2hhciAqZmlsZW5hbWU7CiAJdW5zaWduZWQgaW50IGxl
bjsKIAotCWxlbiAgICAgID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihwb3J0ZGlyKSArIHN0cmxl
bigiL3Byb2ZpbGVzL2FyY2gubGlzdCIpICsgMSk7CisJbGVuICAgICAgPSBzaXplb2YoY2hhcikg
KiAoc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0cmxlbigiL3Byb2ZpbGVzL2FyY2gu
bGlzdCIpICsgMSk7CiAJZmlsZW5hbWUgPSB4bWFsbG9jKGxlbik7CiAKIAltZW1zZXQoZmlsZW5h
bWUsIDAsIGxlbik7Ci0Jc25wcmludGYoZmlsZW5hbWUsIGxlbiwgIiVzL3Byb2ZpbGVzL2FyY2gu
bGlzdCIsIHBvcnRkaXIpOworCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxlcy9h
cmNoLmxpc3QiLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAKIAlpZiAoTlVMTCA9PSAoYXJjaGxp
c3QgPSBxY2FjaGVfcmVhZF9saW5lcyhmaWxlbmFtZSkpKSB7CiAJCWZyZWUoZmlsZW5hbWUpOwpk
aWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL3FncmVwLmMgcG9ydGFnZS11dGlscy0y
MDA2MTExMS5uZXcvcWdyZXAuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExMS9xZ3JlcC5jCTIw
MDYtMTEtMTEgMjM6Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYx
MTExLm5ldy9xZ3JlcC5jCTIwMDYtMTEtMTIgMjM6MTI6MjEuNTExNTc2MTM0ICswMTAwCkBAIC0x
MCwxMSArMTAsMTIgQEAKIAogI2lmZGVmIEFQUExFVF9xZ3JlcAogCi0jZGVmaW5lIFFHUkVQX0ZM
QUdTICJJaUhjZSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFHUkVQX0ZMQUdTICJJaUhvOmNlIiBD
T01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFncmVwX2xvbmdfb3B0c1td
ID0gewogCXsiaW52ZXJ0LW1hdGNoIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnSSd9LAogCXsiaWdu
b3JlLWNhc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LAogCXsid2l0aC1maWxlbmFtZSIs
IG5vX2FyZ3VtZW50LCBOVUxMLCAnSCd9LAorCXsib3ZlcmxheSIsICAgICAgICBhX2FyZ3VtZW50
LCBOVUxMLCAnbyd9LAogCXsiY291bnQiLCAgICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9
LAogCXsicmVnZXhwIiwgICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnZSd9LAogCUNPTU1PTl9M
T05HX09QVFMKQEAgLTIzLDYgKzI0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnFncmVwX29wdHNf
aGVscFtdID0gewogCSJTZWxlY3Qgbm9uLW1hdGNoaW5nIGxpbmVzIiwKIAkiSWdub3JlIGNhc2Ug
ZGlzdGluY3Rpb25zIiwKIAkiUHJpbnQgdGhlIGZpbGVuYW1lIGZvciBlYWNoIG1hdGNoIiwKKwki
T25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheSIsCiAJIk9ubHkgcHJpbnQgYSBjb3VudCBv
ZiBtYXRjaGluZyBsaW5lcyBwZXIgRklMRSIsCiAJIlVzZSBQQVRURVJOIGFzIGEgcmVndWxhciBl
eHByZXNzaW9uIiwKIAlDT01NT05fT1BUU19IRUxQCkBAIC0zNCw3ICszNiw5IEBAIGludCBxZ3Jl
cF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlpbnQgaTsKIAlpbnQgY291bnQgPSAw
OwotCWNoYXIgKnA7CisJc2hvcnQgbXllcnJvciA9IDAsIHJlcG8gPSAwOworCWNoYXIgb3Zlcmxh
eV9uYW1lWzY0XSwgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgKnAsICpzdHI7CiAJY2hhciBkb19j
b3VudCwgZG9fcmVnZXg7CiAJY2hhciBzaG93X2ZpbGVuYW1lOwogCUZJTEUgKmZwOwpAQCAtNDIs
MTAgKzQ2LDE1IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFy
IGJ1ZjBbQlVGU0laXTsKIAlpbnQgcmVmbGFncyA9IFJFR19OT1NVQjsKIAljaGFyIGludmVydF9t
YXRjaCA9IDA7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheSwgKm92ZXJsYXlfdG1wOwogCiAJdHlw
ZWRlZiBjaGFyICooKkZVTkMpIChjaGFyICosIGNoYXIgKik7CiAJRlVOQyBzdHJmdW5jID0gKEZV
TkMpIHN0cnN0cjsKIAorCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50b287CisJb3ZlcmxheV9u
YW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CisKIAlEQkcoImFyZ2M9JWQgYXJndlsw
XT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBhcmd2WzFd
IDogIk5VTEw/Iik7CiAKQEAgLTU4LDkgKzY3LDEzIEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKIAkJCXN0cmZ1bmMgPSAoRlVOQykgc3RyY2FzZXN0cjsKIAkJCXJlZmxh
Z3MgfD0gUkVHX0lDQVNFOwogCQkJYnJlYWs7CisJCWNhc2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0g
MTsgYnJlYWs7CisJCWNhc2UgJ28nOiAKKwkJCXJlcG8gPSAxOworCQkJc3RybmNweShyZXBvX3Nl
YXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJyZWFrOwogCQljYXNlICdj
JzogZG9fY291bnQgPSAxOyBicmVhazsKIAkJY2FzZSAnZSc6IGRvX3JlZ2V4ID0gMTsgYnJlYWs7
Ci0JCWNhc2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0gMTsgYnJlYWs7CiAJCUNPTU1PTl9HRVRPUFRT
X0NBU0VTKHFncmVwKQogCQl9CiAJfQpAQCAtNzMsNiArODYsMzggQEAgaW50IHFncmVwX21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlyZXR1cm4gMTsKIAl3aGlsZSAoKGZnZXRzKGVidWls
ZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkgIT0gTlVMTCkgewogCQlGSUxFICpuZXdmcDsKKwkJaWYg
KCAoIHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJeworCQkJKnAgPSAwOworCQkJc3RyID0g
cCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQlwID0gZWJ1aWxkOworCQkJaWYgKCBy
ZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIHAsIHNpemVvZiggcmVwb19zZWFyY2gpKSkKKwkJ
CQljb250aW51ZTsKKwkJCWlmICggc3RyY21wKG92ZXJsYXlfbmFtZSwgcCkpCisJCQl7CisJCQkJ
b3ZlcmxheV90bXA9b3ZlcmxheV9nZW50b287CisJCQkJZG8geworCQkJCQlpZiAoICEgc3RybmNt
cChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJ
CQlicmVhazsKKwkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQpKTsK
KwkJCQlpZiAoICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlf
dG1wLT5uYW1lKSkpCisJCQkJeworCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJ
CQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRp
ciB0byBQT1JURElSICclcycgZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXll
cnJvcj0xOworCQkJCQl9CisJCQkJfSBlbHNlIAorCQkJCQlteWVycm9yPTE7CisJCQkJaWYgKCBt
eWVycm9yKSB7CisJCQkJCW15ZXJyb3I9MDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN0
cm5jcHkob3ZlcmxheV9uYW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFt
ZSkpOworCQkJfQorCQkJc3RyY3B5KGVidWlsZCwgc3RyKSA7CisJCX0KKwogCQlpZiAoKHAgPSBz
dHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJaWYgKChuZXdmcCA9
IGZvcGVuKGVidWlsZCwgInIiKSkgIT0gTlVMTCkgewpAQCAtMTAyLDcgKzE0Nyw3IEBAIGludCBx
Z3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQljb3VudCsrOwogCQkJCWlmIChk
b19jb3VudCkgY29udGludWU7CiAJCQkJaWYgKHZlcmJvc2UgfHwgc2hvd19maWxlbmFtZSkgewot
CQkJCQlwcmludGYoIiVzOiIsIGVidWlsZCk7CisJCQkJCXByaW50ZigiJXM6OiVzOiIsIGN1cl9v
dmVybGF5LT5uYW1lLCBlYnVpbGQpOwogCQkJCQlpZiAodmVyYm9zZSA+IDEpIHByaW50ZigiJWQ6
IiwgbGluZW5vKTsKIAkJCQkJcHJpbnRmKCIgIik7CiAJCQkJfQpkaWZmIC1OYXJ1cCBwb3J0YWdl
LXV0aWxzLTIwMDYxMTExL3FzZWFyY2guYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xc2Vh
cmNoLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcXNlYXJjaC5jCTIwMDYtMTEtMTEgMjM6
Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xc2Vh
cmNoLmMJMjAwNi0xMS0xMiAyMzoxOTo1Mi45OTk5Mzk0NzEgKzAxMDAKQEAgLTksMTAgKzksMTIg
QEAKIAogI2lmZGVmIEFQUExFVF9xc2VhcmNoCiAKLSNkZWZpbmUgUVNFQVJDSF9GTEFHUyAiYWNz
U05IIiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUVNFQVJDSF9GTEFHUyAiYWNvOnBzU05IIiBDT01N
T05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFzZWFyY2hfbG9uZ19vcHRzW10g
PSB7CiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2EnfSwKIAl7ImNhY2hlIiwg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAorCXsib3ZlcmxheSIsICAgIGFfYXJndW1lbnQs
IE5VTEwsICdvJ30sCisJeyJzaG93LXBhdGgiLCBub19hcmd1bWVudCwgTlVMTCwgJ3AnfSwKIAl7
InNlYXJjaCIsICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAogCXsiZGVzYyIsICAgICAgIGFf
YXJndW1lbnQsIE5VTEwsICdTJ30sCiAJeyJuYW1lLW9ubHkiLCBub19hcmd1bWVudCwgTlVMTCwg
J04nfSwKQEAgLTIyLDYgKzI0LDggQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXNlYXJj
aF9sb25nXwogc3RhdGljIGNvbnN0IGNoYXIgKnFzZWFyY2hfb3B0c19oZWxwW10gPSB7CiAJIkxp
c3QgdGhlIGRlc2NyaXB0aW9ucyBvZiBldmVyeSBwYWNrYWdlIGluIHRoZSBjYWNoZSIsCiAJIlVz
ZSB0aGUgcG9ydGFnZSBjYWNoZSIsCisJIlNlYXJjaCBvbmx5IGluIHRoZSA8YXJnPiBvdmVybGF5
IiwKKwkiU2hvdyB0aGUgcGF0aCB0byB0aGUgZWJ1aWxkIiwKIAkiUmVnZXggc2VhcmNoIHBhY2th
Z2UgYmFzZW5hbWVzIiwKIAkiUmVnZXggc2VhcmNoIHBhY2thZ2UgZGVzY3JpcHRpb25zIiwKIAki
T25seSBzaG93IHBhY2thZ2UgbmFtZSIsCkBAIC00MCwxMyArNDQsMjAgQEAgaW50IHFzZWFyY2hf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhciBsYXN0WzEyNl0gPSAiIjsKIAljaGFy
IGRwWzEyNl0gPSAiIjsKIAljaGFyIGJwWzEyNl0gPSAiIjsKLQljaGFyICpwLCAqcSwgKnN0cjsK
KwlzaG9ydCByZXBvID0gMDsKKwljaGFyIHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyICpwLCAqcSwg
KnN0ciwgb3ZlcmxheV9uYW1lWzY0XTsKIAljaGFyICpzZWFyY2hfbWUgPSBOVUxMOwotCWNoYXIg
c2hvd19ob21lcGFnZSA9IDAsIHNob3dfbmFtZV9vbmx5ID0gMDsKKwljaGFyIHNob3dfaG9tZXBh
Z2UgPSAwLCBzaG93X25hbWVfb25seSA9IDAsIHNob3dfcGF0aF90b19lYnVpbGQgPSAwOwogCWNo
YXIgc2VhcmNoX2Rlc2MgPSAwLCBzZWFyY2hfYWxsID0gMCwgc2VhcmNoX25hbWUgPSAxLCBzZWFy
Y2hfY2FjaGUgPSBDQUNIRV9FQlVJTEQ7CiAJY29uc3QgY2hhciAqc2VhcmNoX3ZhcnNbXSA9IHsg
IkRFU0NSSVBUSU9OPSIsICJIT01FUEFHRT0iIH07CiAJc2l6ZV90IHNlYXJjaF9sZW47Ci0JaW50
IGksIGlkeD0wOworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3RtcDsKKwlpbnQg
aSwgaWR4PTAsIG15ZXJyb3I9MDsKKworCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50b287CisJ
b3ZlcmxheV9uYW1lWzBdID0gMCA7CisJcmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdj
PSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAx
ID8gYXJndlsxXSA6ICJOVUxMPyIpOwpAQCAtNTYsNiArNjcsOCBAQCBpbnQgcXNlYXJjaF9tYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXNlYXJjaCkK
IAkJY2FzZSAnYSc6IHNlYXJjaF9hbGwgPSAxOyBicmVhazsKIAkJY2FzZSAnYyc6IHNlYXJjaF9j
YWNoZSA9IENBQ0hFX01FVEFEQVRBOyBicmVhazsKKwkJY2FzZSAnbyc6IHJlcG8gPSAxOyBzdHJu
Y3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcsIHNpemVvZihyZXBvX3NlYXJjaCkpOyBicmVhazsKKwkJ
Y2FzZSAncCc6IHNob3dfcGF0aF90b19lYnVpbGQgPSAxOyBicmVhazsKIAkJY2FzZSAncyc6IHNl
YXJjaF9kZXNjID0gMDsgc2VhcmNoX25hbWUgPSAxOyBicmVhazsKIAkJY2FzZSAnUyc6IHNlYXJj
aF9kZXNjID0gMTsgc2VhcmNoX25hbWUgPSAwOyBicmVhazsKIAkJY2FzZSAnTic6IHNob3dfbmFt
ZV9vbmx5ID0gMTsgYnJlYWs7CkBAIC05MywxMSArMTA2LDIyIEBAIGludCBxc2VhcmNoX21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYgKChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUo
ZWJ1aWxkKSkgIT0gTlVMTCkgewogCQkJCWlmICgoc3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxh
c3QpKSAhPSAwKSB7CiAJCQkJCXN0cm5jcHkobGFzdCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9m
KGxhc3QpKTsKLQkJCQkJaWYgKChyZW1hdGNoKHNlYXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNh
Y2hlLT5ERVNDUklQVElPTiA6IGVidWlsZCksIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09
IDApCi0JCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20t
PkNBVEVHT1JZLCBCTFVFLAotCQkJCQkJICAgICAgIHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0J
CQkJCQkgICAgICAgKHNob3dfbmFtZV9vbmx5ID8gIiIgOgotCQkJCQkJICAgICAgICAoc2hvd19o
b21lcGFnZSA/IHBjYWNoZS0+SE9NRVBBR0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJ
CQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBU
SU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgPT0gMCkgeworCQkJCQkJ
aWYgKCBzaG93X3BhdGhfdG9fZWJ1aWxkKSB7CisJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6
JXNcdCAlcyVzLyVzL1xuIiwJCisJCQkJCQkJQk9MRCwgcGNhY2hlLT5hdG9tLT5DQVRFR09SWSwK
KwkJCQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAorCQkJCQkJCVlFTExPVyxjdXJfb3Zlcmxh
eS0+bmFtZSwgTk9STSwKKwkJCQkJCQljdXJfb3ZlcmxheS0+cGF0aCwgZGlybmFtZShlYnVpbGQp
KTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXMgJXMlc1xu
IiwKKwkJCQkJCQlCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLAorCQkJCQkJCUJMVUUsIHBj
YWNoZS0+YXRvbS0+UE4sCisJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAor
CQkJCQkJCShzaG93X25hbWVfb25seSA/ICIiIDogCisJCQkJCQkJKHNob3dfaG9tZXBhZ2UgPyBw
Y2FjaGUtPkhPTUVQQUdFIDogcGNhY2hlLT5ERVNDUklQVElPTikpKTsKKwkJCQkJCX0KKwkJCQkJ
fQogCQkJCX0KIAkJCQljYWNoZV9mcmVlKHBjYWNoZSk7CiAJCQl9IGVsc2UgewpAQCAtMTEwLDYg
KzEzNCw0MCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQlj
YXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklMRSAqZWJ1aWxkZnA7CisJCQlpZiAoICggcCA9IHN0
cmNocihlYnVpbGQsICc6JykpKQorCQkJeworCQkJCSpwID0gMDsKKwkJCQlzdHIgPSBwKzI7CQkJ
Lyogc2VwYXJhdG9yIGlzICc6OicgKi8KKwkJCQlwID0gZWJ1aWxkOworCQkJCWlmICggcmVwbyAm
JiBzdHJuY21wKCByZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQkJCWNv
bnRpbnVlOworCQkJCWlmICggc3RyY21wKG92ZXJsYXlfbmFtZSwgcCkpCisJCQkJeworCQkJCQlv
dmVybGF5X3RtcD1vdmVybGF5X2dlbnRvbzsKKwkJCQkJZG8geworCQkJCQkJaWYgKCAhIHN0cm5j
bXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJ
CQkJCWJyZWFrOworCQkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQp
KTsKKwkJCQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVy
bGF5X3RtcC0+bmFtZSkpKQorCQkJCQl7CisJCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1w
OworCQkJCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5wYXRoKSAhPSAwKSB7CisJCQkJCQkJd2Fy
bnAoImNoZGlyIHRvICclcycgZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJCW15
ZXJyb3I9MTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIAorCQkJCQkJbXllcnJvcj0xOworCQkJCQlp
ZiAoIG15ZXJyb3IpIHsKKwkJCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQkJCXdhcm5mcCgi
KGNhY2hlIHVwZGF0ZSBwZW5kaW5nKSAlczo6JXMiLCBwLCBlYnVpbGQpOworCQkJCQkJcmVpbml0
aWFsaXplID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXN0cm5jcHkob3ZlcmxheV9u
YW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJCX0KKwkJ
CQlzdHJjcHkoZWJ1aWxkLCBzdHIpIDsJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQl9CisK
IAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBkaXJuYW1lKHN0cik7
CiAKQEAgLTEzNCw5ICsxOTIsMTcgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAq
KmFyZ3YpCiAJCQkJCQkJLy8gZG9pbmcgb3BlcmF0aW9ucyB3aXRoIHRoZW0uCiAJCQkJCQkJc3Ry
bmNweShkcCwgcCwgc2l6ZW9mKGRwKSk7CiAJCQkJCQkJc3RybmNweShicCwgcCwgc2l6ZW9mKGJw
KSk7Ci0JCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyAlc1xuIiwKLQkJCQkJCQkJQk9MRCwgZGly
bmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwgTk9STSwKKwkJCQkJCQlpZiAoIHNob3dfcGF0
aF90b19lYnVpbGQpIHsKKwkJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXNcdCAlcyVzLyVz
L1xuIiwKKwkJCQkJCQkJQk9MRCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwKKwkJ
CQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAorCQkJCQkJCQljdXJfb3Zlcmxh
eS0+cGF0aCwgZGlybmFtZShlYnVpbGQpKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlwcmlu
dGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwg
QkxVRSwgYmFzZW5hbWUoYnApLAorCQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5P
Uk0sCiAJCQkJCQkJCShzaG93X25hbWVfb25seSA/ICIiIDogcSkpOworCQkJCQkJCX0KIAkJCQkJ
CQlicmVhazsKIAkJCQkJCX0KIAkJCQkJfQpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYx
MTExL3F1c2UuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xdXNlLmMKLS0tIHBvcnRhZ2Ut
dXRpbHMtMjAwNjExMTEvcXVzZS5jCTIwMDYtMTEtMTEgMjM6Mzc6MjEuMDAwMDAwMDAwICswMTAw
CisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xdXNlLmMJMjAwNi0xMS0xMiAyMzowNjo0
Ny43NzYzMTE2MDcgKzAxMDAKQEAgLTE0LDEwICsxNCwxMSBAQAogIHF1c2UgLUtlIC0tICBubHMK
ICovCiAKLSNkZWZpbmUgUVVTRV9GTEFHUyAiZWF2S0xERjpOIiBDT01NT05fRkxBR1MKKyNkZWZp
bmUgUVVTRV9GTEFHUyAiZWFvOnZLTERGOk4iIENPTU1PTl9GTEFHUwogc3RhdGljIHN0cnVjdCBv
cHRpb24gY29uc3QgcXVzZV9sb25nX29wdHNbXSA9IHsKIAl7ImV4YWN0IiwgICAgIG5vX2FyZ3Vt
ZW50LCBOVUxMLCAnZSd9LAogCXsiYWxsIiwgICAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdhJ30s
CisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwKIAl7ImtleXdvcmRzIiwg
IG5vX2FyZ3VtZW50LCBOVUxMLCAnSyd9LAogCXsibGljZW5zZSIsICAgbm9fYXJndW1lbnQsIE5V
TEwsICdMJ30sCiAJeyJkZXNjcmliZSIsICBub19hcmd1bWVudCwgTlVMTCwgJ0QnfSwKQEAgLTI4
LDYgKzI5LDcgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXVzZV9sb25nX29wdAogc3Rh
dGljIGNvbnN0IGNoYXIgKnF1c2Vfb3B0c19oZWxwW10gPSB7CiAJIlNob3cgZXhhY3Qgbm9uIHJl
Z2V4cCBtYXRjaGluZyB1c2luZyBzdHJjbXAiLAogCSJTaG93IGFubm95aW5nIHRoaW5ncyBpbiBJ
VVNFIiwKKwkiT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheSIsCiAJIlVzZSB0aGUgS0VZ
V09SRFMgdnMgSVVTRSIsCiAJIlVzZSB0aGUgTElDRU5TRSB2cyBJVVNFIiwKIAkiRGVzY3JpYmUg
dGhlIFVTRSBmbGFnIiwKQEAgLTM4LDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnF1c2Vf
b3B0c19oZWxwW10gPSB7CiBzdGF0aWMgY29uc3QgY2hhciBxdXNlX3Jjc2lkW10gPSAiJElkOiBx
dXNlLmMsdiAxLjUzIDIwMDYvMTEvMDkgMDA6MTg6MDUgdmFwaWVyIEV4cCAkIjsKICNkZWZpbmUg
cXVzZV91c2FnZShyZXQpIHVzYWdlKHJldCwgUVVTRV9GTEFHUywgcXVzZV9sb25nX29wdHMsIHF1
c2Vfb3B0c19oZWxwLCBsb29rdXBfYXBwbGV0X2lkeCgicXVzZSIpKQogCi1pbnQgcXVzZV9kZXNj
cmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBjaGFyICoqYXJndik7CitpbnQgcXVzZV9kZXNj
cmliZV9mbGFnKGludCBpbmQsIHNob3J0IHJlcG8sIGNoYXIgcmVwb19zZWFyY2hbXSwgaW50IGFy
Z2MsIGNoYXIgKiphcmd2KTsKIAogY2hhciBxdXNlX25hbWVfb25seSA9IDA7CiAKQEAgLTgxLDcg
KzgzLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfaGlnaGxpZ2h0ZWRfdXNlX2ZsYWdzKAogCX0KIH0K
IAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CitpbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIHNob3J0IHJlcG8sIGNoYXIgcmVwb19z
ZWFyY2hbXSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogI2RlZmluZSBOVU1fU0VBUkNIX0ZJ
TEVTIEFSUl9TSVpFKHNlYXJjaF9maWxlcykKIAljaGFyIGJ1ZltCVUZTSVpFXSwgKnA7CkBAIC05
MSwxMjEgKzkzLDE2MiBAQCBpbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdj
CiAJRklMRSAqZnBbTlVNX1NFQVJDSF9GSUxFU107CiAJRElSICpkOwogCXN0cnVjdCBkaXJlbnQg
KmRlOworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1NF
QVJDSF9GSUxFUzsgKytpKSB7Ci0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9m
aWxlcy8lcyIsIHBvcnRkaXIsIHNlYXJjaF9maWxlc1tpXSk7Ci0JCWlmICgoZnBbaV0gPSBmb3Bl
bihidWYsICJyIikpID09IE5VTEwpCi0JCQl3YXJucCgic2tpcHBpbmcgJXMiLCBzZWFyY2hfZmls
ZXNbaV0pOwotCX0KKwljdXJfb3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKIAotCWZvciAoaSA9IGlu
ZDsgaSA8IGFyZ2M7IGkrKykgewotCQlzID0gc3RybGVuKGFyZ3ZbaV0pOworCWRvIHsKKwkJaWYg
KCByZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2Yo
IHJlcG9fc2VhcmNoKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9TRUFS
Q0hfRklMRVM7ICsraSkgeworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2Zp
bGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9maWxlc1tpXSk7CisJCQlpZiAoKGZw
W2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQorCQkJCWlmICggdmVyYm9zZSApCisJCQkJ
CXdhcm5wKCJza2lwcGluZyAlcyBmb3IgdGhlICVzIG92ZXJsYXkiLCBzZWFyY2hfZmlsZXNbaV0s
IGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJfQogCi0JCWZvciAoZiA9IDA7IGYgPCBOVU1fU0VBUkNI
X0ZJTEVTOyArK2YpIHsKLQkJCWlmIChmcFtmXSA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOworCQlm
b3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspIHsKKwkJCXMgPSBzdHJsZW4oYXJndltpXSk7CiAK
LQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcFtmXSkgIT0gTlVMTCkgewotCQkJ
CWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4nKQorCQkJZm9yIChmID0gMDsgZiA8
IE5VTV9TRUFSQ0hfRklMRVM7ICsrZikgeworCQkJCWlmIChmcFtmXSA9PSBOVUxMKQogCQkJCQlj
b250aW51ZTsKIAotCQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKLQkJ
CQkJKnAgPSAnXDAnOworCQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcFtmXSkg
IT0gTlVMTCkgeworCQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJ
CQkJCWNvbnRpbnVlOwogCi0JCQkJc3dpdGNoIChmKSB7Ci0JCQkJCWNhc2UgMDogLyogR2xvYmFs
IHVzZS5kZXNjICovCi0JCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKLQkJCQkJ
CQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKLQkJCQkJCQkJcHJpbnRm
KCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBO
T1JNLCBidWYrcyszKTsKLQkJCQkJCQkJZ290byBza2lwX2ZpbGU7Ci0JCQkJCQkJfQotCQkJCQkJ
YnJlYWs7CisJCQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKKwkJCQkJ
CSpwID0gJ1wwJzsKIAotCQkJCQljYXNlIDE6IC8qIExvY2FsIHVzZS5sb2NhbC5kZXNjICovCi0J
CQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQorCQkJCQlzd2l0Y2ggKGYp
IHsKKwkJCQkJCWNhc2UgMDogLyogR2xvYmFsIHVzZS5kZXNjICovCisJCQkJCQkJaWYgKCFzdHJu
Y21wKGJ1ZiwgYXJndltpXSwgcykpCisJCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1Zltz
KzFdID09ICctJykgeworCQkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRv
byApCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBCT0xELCBO
T1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UgCisJCQkJ
CQkJCQkJcHJpbnRmKCIgKCVzKSAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIGN1cl9vdmVybGF5
LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJ
CQkJCWdvdG8gc2tpcF9maWxlOworCQkJCQkJCQl9CiAJCQkJCQkJYnJlYWs7Ci0JCQkJCQkrK3A7
Ci0JCQkJCQlpZiAoIXN0cm5jbXAocCwgYXJndltpXSwgcykpIHsKLQkJCQkJCQlpZiAocFtzXSA9
PSAnICcgJiYgcFtzKzFdID09ICctJykgewotCQkJCQkJCQkqcCA9ICdcMCc7Ci0JCQkJCQkJCXBy
aW50ZigiICVzbG9jYWwlczolcyVzJXM6JXMlcyVzICVzXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBh
cmd2W2ldLCBOT1JNLCBCT0xELCBidWYsIE5PUk0sIHArcyszKTsKLQkJCQkJCQl9Ci0JCQkJCQl9
Ci0JCQkJCQlicmVhazsKIAotCQkJCQljYXNlIDI6IC8qIEFyY2hpdGVjdHVyZXMgYXJjaC5saXN0
ICovCi0JCQkJCQlpZiAoIXN0cmNtcChidWYsIGFyZ3ZbaV0pKSB7Ci0JCQkJCQkJcHJpbnRmKCIg
JXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1cmVcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwotCQkJCQkJCWdvdG8gc2tpcF9maWxlOwotCQkJCQkJfQot
CQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDE6IC8qIExvY2FsIHVzZS5sb2NhbC5kZXNjICovCisJ
CQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkgPT0gTlVMTCkKKwkJCQkJCQkJYnJlYWs7
CisJCQkJCQkJKytwOworCQkJCQkJCWlmICghc3RybmNtcChwLCBhcmd2W2ldLCBzKSkgeworCQkJ
CQkJCQlpZiAocFtzXSA9PSAnICcgJiYgcFtzKzFdID09ICctJykgeworCQkJCQkJCQkJKnAgPSAn
XDAnOworCQkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbyApCisJCQkJ
CQkJCQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5PUk0s
IEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJCQkJCQkJ
ZWxzZSAKKwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzbG9jYWwlczolcyVzJXM6JXMlcyVzICVz
XG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwg
Qk9MRCwgYnVmLCBOT1JNLCBwK3MrMyk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJYnJl
YWs7CiAKLQkJCQkJY2FzZSAzOiAvKiBMYW5ndWFnZXMgbGFuZy5kZXNjICovCi0JCQkJCQlpZiAo
IXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKLQkJCQkJCQlpZiAoYnVmW3NdID09ICcgJyAmJiBi
dWZbcysxXSA9PSAnLScpIHsKLQkJCQkJCQkJcHJpbnRmKCIgJXNsYW5nJXM6JXMlcyVzOiAlcyBs
aW5ndWFcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJ
CQkJY2FzZSAyOiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLworCQkJCQkJCWlmICghc3Ry
Y21wKGJ1ZiwgYXJndltpXSkpIHsKKwkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBvdmVybGF5
X2dlbnRvbyApCisJCQkJCQkJCQlwcmludGYoIiAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVj
dHVyZVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7CisJCQkJ
CQkJCWVsc2UgCisJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzYXJjaCVzOiVzJXMlczogJXMgYXJj
aGl0ZWN0dXJlXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltp
XSwgTk9STSwgYXJndltpXSk7CiAJCQkJCQkJCWdvdG8gc2tpcF9maWxlOwogCQkJCQkJCX0KLQkJ
CQkJCWJyZWFrOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIDM6IC8qIExhbmd1YWdlcyBs
YW5nLmRlc2MgKi8KKwkJCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKKwkJCQkJ
CQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQlpZiAo
IGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vICkKKwkJCQkJCQkJCQlwcmludGYoIiAlc2xh
bmclczolcyVzJXM6ICVzIGxpbmd1YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9S
TSwgYnVmK3MrMyk7CisJCQkJCQkJCQllbHNlIAorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNs
YW5nJXM6JXMlcyVzOiAlcyBsaW5ndWFcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JN
LCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWdvdG8gc2tpcF9maWxl
OworCQkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9Ci0JCQl9CiAKIHNraXBf
ZmlsZToKLQkJCXJld2luZChmcFtmXSk7CisJCQkJcmV3aW5kKGZwW2ZdKTsKKwkJCX0KKworCQkJ
aWYgKCBpID09IChhcmdjIC0gMSkgKQorCQkJCWZvciAoZj0wOyBmPE5VTV9TRUFSQ0hfRklMRVM7
ICsrZikgCisJCQkJCWlmICggZnBbZl0gKSB7CisJCQkJCQlmY2xvc2UoZnBbZl0pOworCQkJCQkJ
ZnBbZl0gPSBOVUxMOworCQkJCQl9CiAJCX0KLQl9CiAKLQlmb3IgKGY9MDsgZjxOVU1fU0VBUkNI
X0ZJTEVTOyArK2YpCi0JCWZjbG9zZShmcFtmXSk7CisJfSB3aGlsZSAoIChjdXJfb3ZlcmxheT1j
dXJfb3ZlcmxheS0+bmV4dCkpOwogCiAJLyogbm93IHNjYW4gdGhlIGRlc2MgZGlyICovCi0Jc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwgcG9ydGRpcik7Ci0J
ZCA9IG9wZW5kaXIoYnVmKTsKLQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewot
CQlpZiAoc3RyY21wKGRlLT5kX25hbWUrc3RybGVuKGRlLT5kX25hbWUpLTUsICIuZGVzYyIpKQor
CWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOworCWRvIHsKKwkJaWYgKCByZXBvICYmIHN0cm5j
bXAocmVwb19zZWFyY2gsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2YoIHJlcG9fc2VhcmNoKSkp
CiAJCQljb250aW51ZTsKLQotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmls
ZXMvZGVzYy8lcyIsIHBvcnRkaXIsIGRlLT5kX25hbWUpOwotCQlpZiAoKGZwWzBdPWZvcGVuKGJ1
ZiwgInIiKSkgPT0gTlVMTCkgewotCQkJd2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVh
ZGluZzsgc2tpcHBpbmciLCBkZS0+ZF9uYW1lKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQlpZiAoICEgKGQg
PSBvcGVuZGlyKGJ1ZikpKSB7CisJCQlpZiAoIHZlcmJvc2UgKSAKKwkJCQl3YXJuKCJDb3VsZCBu
b3Qgb3BlbiAlcyAtPiBza2lwcGluZyIsIGJ1Zik7IAogCQkJY29udGludWU7CiAJCX0KKwkJd2hp
bGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJCWlmIChzdHJjbXAoZGUtPmRfbmFt
ZStzdHJsZW4oZGUtPmRfbmFtZSktNSwgIi5kZXNjIikpCisJCQkJY29udGludWU7CiAKLQkJd2hp
bGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7Ci0JCQlpZiAoYnVm
WzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1
ZiksICIlcy9wcm9maWxlcy9kZXNjLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIGRlLT5kX25hbWUp
OworCQkJaWYgKChmcFswXT1mb3BlbihidWYsICJyIikpID09IE5VTEwpIHsKKwkJCQl3YXJuKCJD
b3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nOyBza2lwcGluZyIsIGRlLT5kX25hbWUpOwog
CQkJCWNvbnRpbnVlOworCQkJfQogCi0JCQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9
IE5VTEwpCi0JCQkJKnAgPSAnXDAnOworCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1Ziks
IGZwWzBdKSAhPSBOVUxMKSB7CisJCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdc
bicpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAh
PSBOVUxMKQorCQkJCQkqcCA9ICdcMCc7CiAKLQkJCWlmICgocCA9IHN0cmNocihidWYsICctJykp
ID09IE5VTEwpIHsKKwkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CiBp
bnZhbGlkX2xpbmU6Ci0JCQkJd2FybigiSW52YWxpZCBsaW5lIGluICclcyc6ICVzIiwgZGUtPmRf
bmFtZSwgYnVmKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXdoaWxlIChwWy0xXSAhPSAnICcg
JiYgcFsxXSAhPSAnICcpIHsKLQkJCQkvKiBtYXliZSB0aGUgZmxhZyBoYXMgYSAnLScgaW4gaXQg
Li4uICovCi0JCQkJaWYgKChwID0gc3RyY2hyKHArMSwgJy0nKSkgPT0gTlVMTCkKLQkJCQkJZ290
byBpbnZhbGlkX2xpbmU7Ci0JCQl9Ci0JCQlwWy0xXSA9ICdcMCc7Ci0JCQlwICs9IDI7CisJCQkJ
CXdhcm4oIkludmFsaWQgbGluZSBpbiAnJXMnOiAlcyIsIGRlLT5kX25hbWUsIGJ1Zik7CisJCQkJ
CWNvbnRpbnVlOworCQkJCX0KKwkJCQl3aGlsZSAocFstMV0gIT0gJyAnICYmIHBbMV0gIT0gJyAn
KSB7CisJCQkJCS8qIG1heWJlIHRoZSBmbGFnIGhhcyBhICctJyBpbiBpdCAuLi4gKi8KKwkJCQkJ
aWYgKChwID0gc3RyY2hyKHArMSwgJy0nKSkgPT0gTlVMTCkKKwkJCQkJCWdvdG8gaW52YWxpZF9s
aW5lOworCQkJCX0KKwkJCQlwWy0xXSA9ICdcMCc7CisJCQkJcCArPSAyOwogCi0JCQlmb3IgKGkg
PSBpbmQ7IGkgPCBhcmdjOyBpKyspCi0JCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgYnVmKSkKLQkJ
CQkJcHJpbnRmKCIgJXMlcyVzOiVzJXMlczogJXNcbiIsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0s
IEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIHApOwotCQl9Ci0JCWNsb3NlKGYpOwotCX0KLQljbG9zZWRp
cihkKTsKKwkJCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspCisJCQkJCWlmICghc3RyY21w
KGFyZ3ZbaV0sIGJ1ZikpIHsKKwkJCQkJCWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50
b28gKQorCQkJCQkJCXByaW50ZigiICVzJXMlczolcyVzJXM6ICVzXG4iLCBCT0xELCBkZS0+ZF9u
YW1lLCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlw
cmludGYoIiAoJXMpICVzJXMlczolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9M
RCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7CisJCQkJCX0KIAor
CQkJfQorCQkJZmNsb3NlKGZwWzBdKTsKKwkJfQorCQljbG9zZWRpcihkKTsKKwl9IHdoaWxlICgo
Y3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IHF1
c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJRklMRSAqZnA7Ci0JY2hhciAqcDsK
KwljaGFyICpwLCAqc3RyOworCXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsKKwljaGFyIHJl
cG9fc2VhcmNoWzY0XTsKKwljaGFyIG92ZXJsYXlfbmFtZVs2NF07CiAKIAljaGFyIGJ1ZjBbX1Ff
UEFUSF9NQVhdOwogCWNoYXIgYnVmMVtfUV9QQVRIX01BWF07CkBAIC0yMTgsNiArMjYxLDExIEBA
IGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNob3J0IHF1c2VfYWxsID0g
MDsKIAlpbnQgcmVnZXhwX21hdGNoaW5nID0gMSwgaSwgaWR4ID0gMDsKIAlzaXplX3Qgc2VhcmNo
X2xlbjsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisKKwljdXJfb3Zl
cmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJcmVwb19zZWFy
Y2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIsCiAJICAg
IGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwpAQCAtMjI2LDYg
KzI3NCwxMCBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc3dpdGNo
IChpKSB7CiAJCWNhc2UgJ2UnOiByZWdleHBfbWF0Y2hpbmcgPSAwOyBicmVhazsKIAkJY2FzZSAn
YSc6IHF1c2VfYWxsID0gMTsgYnJlYWs7CisJCWNhc2UgJ28nOiAKKwkJCXJlcG8gPSAxOworCQkJ
c3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJy
ZWFrOwogCQljYXNlICdLJzogaWR4ID0gMTsgYnJlYWs7CiAJCWNhc2UgJ0wnOiBpZHggPSAyOyBi
cmVhazsKIAkJY2FzZSAnRCc6IGlkeCA9IC0xOyBicmVhazsKQEAgLTIzNCwxMSArMjg2LDE0IEBA
IGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19D
QVNFUyhxdXNlKQogCQl9CiAJfQotCWlmIChhcmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYg
aWR4ID49IDApCisJaWYgKGFyZ2MgPT0gb3B0aW5kICYmICFxdXNlX2FsbCAmJiBpZHggPj0gMCkg
eworCQlpZiAoIGlkeCA9PSAzICkKKwkJCWZyZWUoc2VhcmNoX3ZhcnMraWR4KTsKIAkJcXVzZV91
c2FnZShFWElUX0ZBSUxVUkUpOworCX0KIAogCWlmIChpZHggPT0gLTEpCi0JCXJldHVybiBxdXNl
X2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCBhcmdjLCBhcmd2KTsKKwkJcmV0dXJuIHF1c2VfZGVzY3Jp
YmVfZmxhZyhvcHRpbmQsIHJlcG8sIHJlcG9fc2VhcmNoLCBhcmdjLCBhcmd2KTsKIAogCWlmIChx
dXNlX2FsbCkgb3B0aW5kID0gYXJnYzsKIAlpbml0aWFsaXplX2VidWlsZF9mbGF0KCk7CS8qIHNl
dHMgb3VyIHB3ZCB0byAkUE9SVERJUiAqLwpAQCAtMjUwLDYgKzMwNSw0MSBAQCBpbnQgcXVzZV9t
YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcmV0dXJuIDE7CiAJd2hpbGUgKChmZ2V0cyhl
YnVpbGQsIHNpemVvZihlYnVpbGQpLCBmcCkpICE9IE5VTEwpIHsKIAkJRklMRSAqbmV3ZnA7CisJ
CWlmICggKCBwID0gc3RyY2hyKGVidWlsZCwgJzonKSkpCisJCXsKKwkJCSpwID0gMDsKKwkJCXN0
ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMgJzo6JyAqLworCQkJcCA9IGVidWlsZDsKKwkJCWlm
ICggcmVwbyAmJiBzdHJuY21wKCByZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkp
CisJCQkJY29udGludWU7CisJCQlpZiAoIHN0cmNtcChvdmVybGF5X25hbWUsIHApKQorCQkJewor
CQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCWRvIHsKKwkJCQkJaWYgKCAhIHN0
cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQor
CQkJCQkJYnJlYWs7CisJCQkJfSB3aGlsZSAoKG92ZXJsYXlfdG1wPW92ZXJsYXlfdG1wLT5uZXh0
KSk7CisJCQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVy
bGF5X3RtcC0+bmFtZSkpKQorCQkJCXsKKwkJCQkJY3VyX292ZXJsYXkgPSBvdmVybGF5X3RtcDsK
KwkJCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5wYXRoKSAhPSAwKSB7CisJCQkJCQl3YXJucCgi
Y2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkJ
CW15ZXJyb3I9MTsKKwkJCQkJfQorCQkJCX0gZWxzZSAKKwkJCQkJbXllcnJvcj0xOworCQkJCWlm
ICggbXllcnJvcikgeworCQkJCQlpZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQkJCXdhcm5mKCIoY2Fj
aGUgdXBkYXRlIHBlbmRpbmcpICVzIDogJXMiLCBlYnVpbGQsIHN0cmVycm9yKGVycm5vKSk7CisJ
CQkJCXJlaW5pdGlhbGl6ZSA9IDE7CisJCQkJCW15ZXJyb3I9MDsKKwkJCQkJY29udGludWU7CisJ
CQkJfQorCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9m
KG92ZXJsYXlfbmFtZSkpOworCQkJfQorCQkJc3RyY3B5KGVidWlsZCwgc3RyKSA7CisJCX0KKwog
CQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJ
aWYgKChuZXdmcCA9IGZvcGVuKGVidWlsZCwgInIiKSkgIT0gTlVMTCkgewpAQCAtMzc1LDcgKzQ2
NSw3IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQlpZiAodmVy
Ym9zZSA+IDMpCiAJCQkJCQlwcmludGYoIiVzICVzICVzICIsICp1c2VyID8gdXNlciA6ICJNSVNT
SU5HIiwgKnJldmlzaW9uID8gcmV2aXNpb24gOiAiTUlTU0lORyIsICpkYXRlID8gZGF0ZSA6ICJN
SVNTSU5HIik7CiAKLQkJCQkJcHJpbnRmKCIlcyVzJXMgIiwgQ1lBTiwgZWJ1aWxkLCBOT1JNKTsK
KwkJCQkJcHJpbnRmKCIlcyVzOjolcyVzICIsIENZQU4sIGN1cl9vdmVybGF5LT5uYW1lLCBlYnVp
bGQsIE5PUk0pOwogCQkJCQlwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoJmJ1ZjBbc2VhcmNo
X2xlbisxXSwgb3B0aW5kLCBhcmdjLCBhcmd2KTsKIAkJCQkJcHV0cyhOT1JNKTsKIAkJCQkJaWYg
KHZlcmJvc2UgPiAxKSB7CkBAIC0zODMsNyArNDczLDcgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YpCiAJCQkJCQlpbnQgQVJHQyA9IDA7CiAJCQkJCQltYWtlYXJndigmYnVm
MFtzZWFyY2hfbGVuKzFdLCAmQVJHQywgJkFSR1YpOwogCQkJCQkJaWYgKEFSR0MgPiAwKSB7Ci0J
CQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIEFSR0MsIEFSR1YpOworCQkJCQkJCXF1c2VfZGVz
Y3JpYmVfZmxhZygxLCByZXBvLCByZXBvX3NlYXJjaCwgQVJHQywgQVJHVik7CiAJCQkJCQkJZm9y
IChpID0gMDsgaSA8IEFSR0M7IGkrKykKIAkJCQkJCQkJZnJlZShBUkdWW2ldKTsKIAkJCQkJCQlm
cmVlKEFSR1YpOwo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101699</attachid>
            <date>2006-11-11 11:43 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9hcHBsZXRzLmggcG9ydGFnZS11dGls
cy0yMDA2MTExMS5uZXcvYXBwbGV0cy5oCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL2FwcGxl
dHMuaAkyMDA2LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGls
cy0yMDA2MTExMS5uZXcvYXBwbGV0cy5oCTIwMDYtMTEtMTIgMjM6MDE6NDAuNjIyMDA2MTU5ICsw
MTAwCkBAIC01Myw3ICs1Myw2IEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJeyJxY2hlY2siLCAgICBx
Y2hlY2tfbWFpbiwgICAgIjxwa2duYW1lPiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMi
fSwKIAl7InFkZXBlbmRzIiwgIHFkZXBlbmRzX21haW4sICAiPHBrZ25hbWU+IiwgICAgICAgInNo
b3cgZGVwZW5kZW5jeSBpbmZvIn0sCiAJeyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAgICAgIjxm
aWxlbmFtZT4iLCAgICAgICJsaXN0IGFsbCBwa2dzIG93bmluZyBmaWxlcyJ9LAotCXsicWdsc2Ei
LCAgICAgcWdsc2FfbWFpbiwgICAgICI8YWN0aW9uPiA8bGlzdD4iLCAiY2hlY2sgR0xTQXMgYWdh
aW5zdCBzeXN0ZW0ifSwKIAl7InFncmVwIiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJn
cz4iLCAgICAgImdyZXAgaW4gZWJ1aWxkcyJ9LAogCXsicWxpc3QiLCAgICAgcWxpc3RfbWFpbiwg
ICAgICI8cGtnbmFtZT4iLCAgICAgICAibGlzdCBmaWxlcyBvd25lZCBieSBwa2duYW1lIn0sCiAJ
eyJxbG9wIiwgICAgICBxbG9wX21haW4sICAgICAgIjxwa2duYW1lPiIsICAgICAgICJlbWVyZ2Ug
bG9nIGFuYWx5emVyIn0sCkBAIC02NSw2ICs2NCw3IEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJeyJx
dGJ6MiIsICAgICBxdGJ6Ml9tYWluLCAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJtYW5pcHVsYXRl
IHRiejIgcGFja2FnZXMifSwKIAl7InF1c2UiLCAgICAgIHF1c2VfbWFpbiwgICAgICAiPHVzZWZs
YWc+IiwgICAgICAgImZpbmQgcGtncyB1c2luZyB1c2VmbGFncyJ9LAogCXsicXhwYWsiLCAgICAg
cXhwYWtfbWFpbiwgICAgICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB4cGFrIGFyY2hp
dmVzIn0sCisJeyJxZ2xzYSIsICAgICBxZ2xzYV9tYWluLCAgICAgIjxhY3Rpb24+IDxsaXN0PiIs
IE5VTEx9LAkJLyogImNoZWNrIEdMU0FzIGFnYWluc3Qgc3lzdGVtIiAqLwogCiAKIAkvKiBhbGlh
c2VzIGZvciBlcXVlcnkgY2FwYXRhYmlsaXR5ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTEvbWFpbi5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L21haW4uYwotLS0gcG9y
dGFnZS11dGlscy0yMDA2MTExMS9tYWluLmMJMjAwNi0xMS0xMSAyMzozNzoyMC4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L21haW4uYwkyMDA2LTExLTEyIDIz
OjIxOjU3LjU4MjAwMDExOSArMDEwMApAQCAtNzEsNiArNzEsNyBAQCBpbnQgcmVtYXRjaChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgCiBzdGF0aWMgY2hhciAqcm1zcGFjZShjaGFyICopOwog
CiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCk7Cit2b2lkIGluaXRpYWxpemVfb3Zl
cmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pOwogdm9pZCBpbml0aWFsaXplX2VidWlsZF9m
bGF0KHZvaWQpOwogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJl
aW5pdGlhbGl6ZV9hc19uZWVkZWQodm9pZCk7CkBAIC04NSwxMyArODYsMjEgQEAgc3RhdGljIGlu
dCBxdWlldCA9IDA7CiBzdGF0aWMgY2hhciBwcmV0ZW5kID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZSA9IDA7CiBzdGF0aWMgY2hhciByZWluaXRpYWxpemVfbWV0YWNhY2hlID0gMDsKLXN0
YXRpYyBjaGFyIHBvcnRkaXJbX1FfUEFUSF9NQVhdID0gIi91c3IvcG9ydGFnZSI7CiBzdGF0aWMg
Y2hhciBwb3J0YXJjaFsyMF0gPSAiIjsKIHN0YXRpYyBjaGFyIHBvcnR2ZGJbXSA9ICJ2YXIvZGIv
cGtnIjsKIHN0YXRpYyBjaGFyIHBvcnRjYWNoZWRpcltdID0gIm1ldGFkYXRhL2NhY2hlIjsKIHN0
YXRpYyBjaGFyIHBvcnRyb290W19RX1BBVEhfTUFYXSA9ICIvIjsKIHN0YXRpYyBjaGFyIGNvbmZp
Z19wcm90ZWN0W19RX1BBVEhfTUFYXSA9ICIvZXRjLyI7CiAKK3R5cGVkZWYgc3RydWN0IG92ZXJs
YXlfdCBvdmVybGF5X3Q7CitzdHJ1Y3Qgb3ZlcmxheV90IHsKKwljaGFyIG5hbWVbNjRdOworCWNo
YXIgcGF0aFtfUV9QQVRIX01BWF07CisJc3RydWN0IG92ZXJsYXlfdCAqbmV4dDsKK307CisKK3N0
YXRpYyBvdmVybGF5X3QgKm92ZXJsYXlfZ2VudG9vID0gTlVMTDsKKwogY2hhciBwa2dkaXJbNTEy
XSA9ICIvdXNyL3BvcnRhZ2UvcGFja2FnZXMvIjsKIGNoYXIgcG9ydF90bXBkaXJbNTEyXSA9ICIv
dmFyL3RtcC9wb3J0YWdlLyI7CiAKQEAgLTIwMSwxMCArMjEwLDEwIEBAIHN0YXRpYyB2b2lkIHVz
YWdlKGludCBzdGF0dXMsIGNvbnN0IGNoYXIKIAlmb3IgKGkgPSAwOyBvcHRzW2ldLm5hbWU7ICsr
aSkgewogCQlhc3NlcnQoaGVscFtpXSAhPSBOVUxMKTsgLyogdGhpcyBhc3NlcnQgaXMgYSBsaWZl
IHNhdmVyIHdoZW4gYWRkaW5nIG5ldyBhcHBsZXRzLiAqLwogCQlpZiAob3B0c1tpXS5oYXNfYXJn
ID09IG5vX2FyZ3VtZW50KQotCQkJcHJpbnRmKCIgIC0lYywgLS0lLTE1cyVzKiVzICVzXG4iLCBv
cHRzW2ldLnZhbCwKKwkJCXByaW50ZigiICAtJWMsIC0tJS0xNnMlcyolcyAlc1xuIiwgb3B0c1tp
XS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBSRUQsIE5PUk0sIF8oaGVscFtpXSkpOwogCQllbHNl
Ci0JCQlwcmludGYoIiAgLSVjLCAtLSUtOHMgJXM8YXJnPiVzICVzKiVzICVzXG4iLCBvcHRzW2ld
LnZhbCwKKwkJCXByaW50ZigiICAtJWMsIC0tJS05cyAlczxhcmc+JXMgJXMqJXMgJXNcbiIsIG9w
dHNbaV0udmFsLAogCQkJCW9wdHNbaV0ubmFtZSwgREtCTFVFLCBOT1JNLCBSRUQsIE5PUk0sIF8o
aGVscFtpXSkpOwogCX0KIAlleGl0KHN0YXR1cyk7CkBAIC00NjksMTcgKzQ3OCw3OSBAQCBjaGFy
ICpzdHJpbmNyX3Zhcihjb25zdCBjaGFyICpuYW1lLCBjaGFyCiAJcmV0dXJuIChjaGFyICopIHZh
bHVlOwogfQogCit2b2lkIGluaXRpYWxpemVfb3ZlcmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5
W10pCit7CisJc2hvcnQgbWVycm9yID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpFXSwgZmlsZVtfUV9Q
QVRIX01BWF0sICpzLCAqcCwgKnQ7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKKwlGSUxFICpy
ZXBvX25hbWVGUDsKKwlzID0gcG9ydGRpcl9vdmVybGF5OworCWN1cl9vdmVybGF5ID0gb3Zlcmxh
eV9nZW50b287CisKKwl3aGlsZSAoKnMpIHsKKwkJY3VyX292ZXJsYXktPm5leHQgPSB4bWFsbG9j
ICggc2l6ZW9mICgqY3VyX292ZXJsYXktPm5leHQpKTsKKwkJY3VyX292ZXJsYXkgPSBjdXJfb3Zl
cmxheS0+bmV4dDsKKwkJY3VyX292ZXJsYXktPm5leHQgPSBOVUxMOworCisJCWlmICggKHA9c3Ry
Y2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc3RybmNweShjdXJfb3ZlcmxheS0+cGF0aCwg
cywgc2l6ZW9mKGN1cl9vdmVybGF5LT5wYXRoKSk7CisKKwkJLyogZmluZCB0aGUgbmFtZSBmb3Ig
dGhlIG92ZXJsYXkgKi8KKwkJc3RybmNweShmaWxlLCBjdXJfb3ZlcmxheS0+cGF0aCwgX1FfUEFU
SF9NQVgpOworCQlzdHJuY2F0KGZpbGUsICIvcHJvZmlsZXMvcmVwb19uYW1lIiwgX1FfUEFUSF9N
QVgpOworCQlpZiAoKCByZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikgKSkKKwkJeworCQkJ
aWYgKCAhICggZmdldHMoYnVmLCBzaXplb2YoYnVmKSxyZXBvX25hbWVGUCkpICkKKwkJCQltZXJy
b3IrKzsKKworCQkJcm1zcGFjZShidWYpOworCQkJaWYgKCAodCA9IHN0cmNocihidWYsJ1xuJykp
KQorCQkJCSp0ID0gMDsKKworCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVmLCBzaXpl
b2YoY3VyX292ZXJsYXktPm5hbWUpKTsKKworCQkJZmNsb3NlKHJlcG9fbmFtZUZQKTsKKworCQl9
IGVsc2UgCisJCQltZXJyb3IrKzsKKworCQlpZiAobWVycm9yKSB7CisJCQkvKiBkZWxldGUgdHJh
aWxpbmcgJy8nICovCisJCQl0ID0gY3VyX292ZXJsYXktPnBhdGggKyBzdHJsZW4oY3VyX292ZXJs
YXktPnBhdGgpIC0gMTsKKwkJCWlmICggKnQgPT0gJy8nICkKKwkJCQkqdCA9IDA7CisKKwkJCXN0
cm5jcHkoY3VyX292ZXJsYXktPm5hbWUsIGJhc2VuYW1lKGN1cl9vdmVybGF5LT5wYXRoKSwgc2l6
ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7CisJCQltZXJyb3I9MDsKKwkJfQorCisJCWlmIChwKQor
CQkJcyA9IHArMTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCQorfQorCisKIHZvaWQgaW5pdGlh
bGl6ZV9wb3J0YWdlX2Vudih2b2lkKQogewogCWNoYXIgbm9jb2xvciA9IDA7CiAJaW50IGksIGY7
CiAJc3RydWN0IHN0YXQgc3Q7CiAJRklMRSAqZnA7CisJY2hhciB0bXBfcG9ydGRpcltfUV9QQVRI
X01BWF07CisJY2hhciBwb3J0ZGlyX292ZXJsYXlbMjA0OF0gPSAiIjsKKwogCWNoYXIgYnVmW0JV
RlNJWkVdLCAqcywgKnA7CiAKIAljaGFyIHByb2ZpbGVbX1FfUEFUSF9NQVhdLCBwb3J0YWdlX2Zp
bGVbX1FfUEFUSF9NQVhdOworCiAJY29uc3QgY2hhciAqZmlsZXNbXSA9IHtwb3J0YWdlX2ZpbGUs
ICIvZXRjL21ha2UuZ2xvYmFscyIsICIvZXRjL21ha2UuY29uZiJ9OwogCXR5cGVkZWYgZW51bSB7
IF9RX0JPT0wsIF9RX1NUUiwgX1FfSVNUUiB9IHZhcl90eXBlczsKKwkKIAlzdHJ1Y3QgewogCQlj
b25zdCBjaGFyICpuYW1lOwogCQljb25zdCBzaXplX3QgbmFtZV9sZW47CkBAIC00OTMsMTMgKzU2
NCwxOSBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJeyJDT05GSUdfUFJP
VEVDVCIsICAgMTQsIF9RX1NUUiwgIGNvbmZpZ19wcm90ZWN0LCBzaXplb2YoY29uZmlnX3Byb3Rl
Y3QpfSwKIAkJeyJOT0NPTE9SIiwgICAgICAgICAgIDcsIF9RX0JPT0wsICZub2NvbG9yLCAgICAg
ICAxfSwKIAkJeyJGRUFUVVJFUyIsICAgICAgICAgIDgsIF9RX0lTVFIsIGZlYXR1cmVzLCAgICAg
ICBzaXplb2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9RX1NUUiwg
IHBvcnRkaXIsICAgICAgICBzaXplb2YocG9ydGRpcil9LAorCQl7IlBPUlRESVIiLCAgICAgICAg
ICAgNywgX1FfU1RSLCAgdG1wX3BvcnRkaXIsICAgIHNpemVvZih0bXBfcG9ydGRpcil9LAorCQl7
IlBPUlRESVJfT1ZFUkxBWSIsICAxNSwgX1FfSVNUUiwgcG9ydGRpcl9vdmVybGF5LHNpemVvZihw
b3J0ZGlyX292ZXJsYXkpfSwKIAkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgMTUsIF9RX1NUUiwgIGJp
bmhvc3QsICAgICAgICBzaXplb2YoYmluaG9zdCl9LAogCQl7IlBPUlRBR0VfVE1QRElSIiwgICAx
NCwgX1FfU1RSLCAgcG9ydF90bXBkaXIsICAgIHNpemVvZihwb3J0X3RtcGRpcil9LAogCQl7IlBL
R0RJUiIsICAgICAgICAgICAgNiwgX1FfU1RSLCAgcGtnZGlyLCAgICAgICAgIHNpemVvZihwa2dk
aXIpfSwKIAkJeyJST09UIiwgICAgICAgICAgICAgIDQsIF9RX1NUUiwgIHBvcnRyb290LCAgICAg
ICBzaXplb2YocG9ydHJvb3QpfQogCX07CiAKKwlvdmVybGF5X2dlbnRvbyA9IChvdmVybGF5X3Qq
KSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlzdHJjcHkob3ZlcmxheV9nZW50
b28tPm5hbWUsImdlbnRvbyIpOworCXN0cmNweShvdmVybGF5X2dlbnRvby0+cGF0aCwiL3Vzci9w
b3J0YWdlIik7CisJb3ZlcmxheV9nZW50b28tPm5leHQgPSBOVUxMOworCiAJaWYgKChwID0gc3Ry
Y2hyKHBvcnRyb290LCAnLycpKSAhPSBOVUxMKQogCQlpZiAoc3RybGVuKHApICE9IDEpCiAJCQlz
dHJuY2F0KHBvcnRyb290LCAiLyIsIHNpemVvZihwb3J0cm9vdCkpOwpAQCAtNTkxLDYgKzY2OCwx
MyBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJbm9fY29sb3JzKCk7CiAJ
ZWxzZQogCQljb2xvcl9yZW1hcCgpOworCisKKwlzdHJuY3B5KG92ZXJsYXlfZ2VudG9vLT5wYXRo
LCB0bXBfcG9ydGRpciwgc2l6ZW9mKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSk7CisKKwkvKiBub3cg
d2UgaW5pdGlsaWFzZSB0aGUgb3ZlcmxheSBjaGFpbmVkIGxpc3Qgd2l0aCBvdmVybGF5X2dlbnRv
byBhcyB0aGUgZmlyc3QgJ2l0ZW0nICAqLworCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9v
dmVybGF5KTsKKwogfQogCiBlbnVtIHsKQEAgLTYxOSwxOSArNzAzLDIxIEBAIGNvbnN0IGNoYXIg
KmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAlpbnQgYSwgYiwgYywgZCwgZSwgaTsKIAlp
bnQgZnJhYywgc2VjcywgY291bnQ7CiAJRklMRSAqZnA7CisJb3ZlcmxheV90ICpjdXJfb3Zlcmxh
eTsKIAogCWEgPSBiID0gYyA9IGQgPSBlID0gaSA9IDA7CiAJY291bnQgPSBmcmFjID0gc2VjcyA9
IDA7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKIAogCWNhY2hlX2ZpbGUgPSAoY2Fj
aGVfdHlwZSA9PSBDQUNIRV9FQlVJTEQgPyBDQUNIRV9FQlVJTERfRklMRSA6IENBQ0hFX01FVEFE
QVRBX0ZJTEUpOwogCi0JaWYgKGNoZGlyKHBvcnRkaXIpICE9IDApIHsKLQkJd2FybnAoImNoZGly
IHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAoY2hkaXIob3ZlcmxheV9n
ZW50b28tPnBhdGgpICE9IDApIHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWls
ZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmIChjYWNo
ZV90eXBlID09IENBQ0hFX01FVEFEQVRBICYmIGNoZGlyKHBvcnRjYWNoZWRpcikgIT0gMCkgewot
CQl3YXJucCgiY2hkaXIgdG8gcG9ydGFnZSBjYWNoZSAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIs
IHBvcnRjYWNoZWRpcik7CisJCXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycg
ZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgsIHBvcnRjYWNoZWRpcik7CiAJCWdvdG8gcmV0
OwogCX0KIApAQCAtNjQ3LDY0ICs3MzMsNzEgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0
KGludCBjYWNoZV90eQogCiAJdW5saW5rKGNhY2hlX2ZpbGUpOwogCWlmIChlcnJubyAhPSBFTk9F
TlQpIHsKLQkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBjYWNo
ZV9maWxlKTsKKwkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCBvdmVybGF5X2dl
bnRvby0+cGF0aCwgY2FjaGVfZmlsZSk7CiAJCWdvdG8gcmV0OwogCX0KIAogCWlmICgoZnAgPSBm
b3BlbihjYWNoZV9maWxlLCAidyIpKSA9PSBOVUxMKSB7Ci0JCXdhcm5mcCgib3BlbmluZyAnJXMv
JXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNhY2hlX2ZpbGUpOworCQl3YXJuZnAoIm9wZW5pbmcgJyVz
LyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2FjaGVfZmlsZSk7CiAJCWdvdG8g
cmV0OwogCX0KIAogCWdldHRpbWVvZmRheSgmc3RhcnQsIE5VTEwpOwogCi0JaWYgKChhID0gc2Nh
bmRpcigiLiIsICZjYXRlZ29yeSwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQln
b3RvIHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKLQkJc3RhdChjYXRlZ29yeVtp
XS0+ZF9uYW1lLCAmc3QpOwotCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCQljb250aW51
ZTsKLQkJaWYgKHN0cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5VTEwpCi0JCQlp
ZiAoKHN0cm5jbXAoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgInZpcnR1YWwiLCA3KSkgIT0gMCkKKwlk
byB7CisJCWlmICggY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28gfHwgY2hkaXIoY3VyX292
ZXJsYXktPnBhdGgpID09IDApIHsKKwkJCWlmICgoYSA9IHNjYW5kaXIoIi4iLCAmY2F0ZWdvcnks
IGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKIAkJCQljb250aW51ZTsKIAotCQlpZiAo
KGIgPSBzY2FuZGlyKGNhdGVnb3J5W2ldLT5kX25hbWUsICZwbiwgZmlsdGVyX2hpZGRlbiwgYWxw
aGFzb3J0KSkgPCAwKQotCQkJY29udGludWU7Ci0JCWZvciAoYyA9IDA7IGMgPCBiOyBjKyspIHsK
LQkJCWNoYXIgZGVbX1FfUEFUSF9NQVhdOworCQkJZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewor
CQkJCXN0YXQoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnN0KTsKKwkJCQlpZiAoIVNfSVNESVIoc3Qu
c3RfbW9kZSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChzdHJjaHIoY2F0ZWdvcnlbaV0tPmRf
bmFtZSwgJy0nKSA9PSBOVUxMKQorCQkJCQlpZiAoKHN0cm5jbXAoY2F0ZWdvcnlbaV0tPmRfbmFt
ZSwgInZpcnR1YWwiLCA3KSkgIT0gMCkKKwkJCQkJCWNvbnRpbnVlOwogCi0JCQlzbnByaW50Zihk
ZSwgc2l6ZW9mKGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFt
ZSk7CisJCQkJaWYgKChiID0gc2NhbmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRl
cl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJY29udGludWU7CisJCQkJZm9yIChjID0g
MDsgYyA8IGI7IGMrKykgeworCQkJCQljaGFyIGRlW19RX1BBVEhfTUFYXTsKIAotCQkJaWYgKHN0
YXQoZGUsICZzdCkgPCAwKQotCQkJCWNvbnRpbnVlOworCQkJCQlzbnByaW50ZihkZSwgc2l6ZW9m
KGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSk7CiAKLQkJ
CXN3aXRjaCAoY2FjaGVfdHlwZSkgewotCQkJY2FzZSBDQUNIRV9FQlVJTEQ6Ci0JCQkJaWYgKCFT
X0lTRElSKHN0LnN0X21vZGUpKQotCQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJCWNhc2Ug
Q0FDSEVfTUVUQURBVEE6Ci0JCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0JCQkJCWZwcmlu
dGYoZnAsICIlc1xuIiwgZGUpOwotCQkJCWNvbnRpbnVlOwotCQkJCWJyZWFrOwotCQkJfQotCQkJ
aWYgKChlID0gc2NhbmRpcihkZSwgJmViLCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDAp
Ci0JCQkJY29udGludWU7Ci0JCQlmb3IgKGQgPSAwOyBkIDwgZTsgZCsrKSB7Ci0JCQkJaWYgKChw
ID0gc3RycmNocihlYltkXS0+ZF9uYW1lLCAnLicpKSAhPSBOVUxMKQotCQkJCQlpZiAoc3RyY21w
KHAsICIuZWJ1aWxkIikgPT0gMCkgewotCQkJCQkJY291bnQrKzsKLQkJCQkJCWZwcmludGYoZnAs
ICIlcy8lcy8lc1xuIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSwgZWJbZF0t
PmRfbmFtZSk7CisJCQkJCWlmIChzdGF0KGRlLCAmc3QpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOwor
CisJCQkJCXN3aXRjaCAoY2FjaGVfdHlwZSkgeworCQkJCQljYXNlIENBQ0hFX0VCVUlMRDoKKwkJ
CQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCWJy
ZWFrOworCQkJCQljYXNlIENBQ0hFX01FVEFEQVRBOgorCQkJCQkJaWYgKFNfSVNSRUcoc3Quc3Rf
bW9kZSkpCisJCQkJCQkJZnByaW50ZihmcCwgIiVzXG4iLCBkZSk7CisJCQkJCQljb250aW51ZTsK
KwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmICgoZSA9IHNjYW5kaXIoZGUsICZlYiwgZmls
dGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQorCQkJCQkJY29udGludWU7CisJCQkJCWZvciAo
ZCA9IDA7IGQgPCBlOyBkKyspIHsKKwkJCQkJCWlmICgocCA9IHN0cnJjaHIoZWJbZF0tPmRfbmFt
ZSwgJy4nKSkgIT0gTlVMTCkKKwkJCQkJCQlpZiAoc3RyY21wKHAsICIuZWJ1aWxkIikgPT0gMCkg
eworCQkJCQkJCQljb3VudCsrOworCQkJCQkJCQlmcHJpbnRmKGZwLCAiJXM6OiVzLyVzLyVzXG4i
LCBjdXJfb3ZlcmxheS0+bmFtZSwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSwg
ZWJbZF0tPmRfbmFtZSk7CisJCQkJCQkJfQogCQkJCQl9CisJCQkJCXdoaWxlIChkLS0pIGZyZWUo
ZWJbZF0pOworCQkJCQlmcmVlKGViKTsKKwkJCQl9CisJCQkJd2hpbGUgKGItLSkgZnJlZShwblti
XSk7CisJCQkJZnJlZShwbik7CiAJCQl9Ci0JCQl3aGlsZSAoZC0tKSBmcmVlKGViW2RdKTsKLQkJ
CWZyZWUoZWIpOwotCQl9Ci0JCXdoaWxlIChiLS0pIGZyZWUocG5bYl0pOwotCQlmcmVlKHBuKTsK
LQl9CisJCX0gZWxzZQorCQkJd2FybnAoImNoZGlyIHRvICclcycgZmFpbGVkLCBza2lwcGluZyB0
aGUgJXMgcmVwb3NpdG9yeSIsIGN1cl9vdmVybGF5LT5wYXRoLCBjdXJfb3ZlcmxheS0+bmFtZSk7
CisKKwl9IHdoaWxlICggKGN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQpKTsJCisJCiAJ
ZmNsb3NlKGZwKTsKIAl3aGlsZSAoYS0tKSBmcmVlKGNhdGVnb3J5W2FdKTsKIAlmcmVlKGNhdGVn
b3J5KTsKQEAgLTcyMyw3ICs4MTYsNyBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQoaW50
IGNhY2hlX3R5CiAKIAl3YXJuKCJGaW5pc2hlZCAldSBlbnRyaWVzIGluICVkLiUwNmQgc2Vjb25k
cyIsIGNvdW50LCBzZWNzLCBmcmFjKTsKIAlpZiAoc2VjcyA+IDEwMCkKLQkJd2FybigiWW91IHNo
b3VsZCBjb25zaWRlciBhIGZhc3RlciBmaWxlIHN5c3RlbSBzdWNoIGFzIHJlaXNlcmZzIGZvciBQ
T1JURElSPSclcyciLCBwb3J0ZGlyKTsKKwkJd2FybigiWW91IHNob3VsZCBjb25zaWRlciBhIGZh
c3RlciBmaWxlIHN5c3RlbSBzdWNoIGFzIHJlaXNlcmZzIGZvciBQT1JURElSPSclcyciLCBvdmVy
bGF5X2dlbnRvby0+cGF0aCk7CiByZXQ6CiAJcmV0dXJuIGNhY2hlX2ZpbGU7CiB9CkBAIC03MzIs
OCArODI1LDggQEAgcmV0OgogCiB2b2lkIHJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCh2b2lkKQog
ewotCWlmICgoY2hkaXIocG9ydGRpcikpICE9IDApIHsKLQkJd2FybnAoImNoZGlyIHRvIFBPUlRE
SVIgJyVzJyBmYWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAoKGNoZGlyKG92ZXJsYXlfZ2VudG9vLT5w
YXRoKSkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIG92
ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJcmV0dXJuOwogCX0KIAl1bmxpbmsoQ0FDSEVfRUJVSUxE
X0ZJTEUpOwpAQCAtMTAwNiwxMCArMTA5OSwyMCBAQCBmdWNraXQ6CiAJcmV0dXJuIGNwZjsKIH0K
IAorLyogZnJlZSBvdmVybGF5cyAqLwordm9pZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlfdCAqb3Zl
cmxheSk7Cit2b2lkIGZyZWVfb3ZlcmxheXMob3ZlcmxheV90ICpvdmVybGF5KQoreworCWlmICgg
b3ZlcmxheS0+bmV4dCApCisJCWZyZWVfb3ZlcmxheXMob3ZlcmxheS0+bmV4dCk7CisJZnJlZShv
dmVybGF5KTsKK30KKwogdm9pZCBjbGVhbnVwKCkKIHsKIAlyZWluaXRpYWxpemVfYXNfbmVlZGVk
KCk7CiAJZnJlZV9zZXRzKHZpcnR1YWxzKTsKKwlmcmVlX292ZXJsYXlzKG92ZXJsYXlfZ2VudG9v
KTsKIAlmY2xvc2Uoc3RkZXJyKTsKIH0KIApkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYx
MTExL3EuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xLmMKLS0tIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTEvcS5jCTIwMDYtMTEtMTEgMjM6Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0
YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xLmMJMjAwNi0xMS0xMiAyMzowMTo0MC43ODU5ODEyMzEg
KzAxMDAKQEAgLTcsMTUgKzcsMTcgQEAKICAqIENvcHlyaWdodCAyMDA1LTIwMDYgTWlrZSBGcnlz
aW5nZXIgIC0gPHZhcGllckBnZW50b28ub3JnPgogICovCiAKLSNkZWZpbmUgUV9GTEFHUyAiaXJt
IiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUV9GTEFHUyAiaWxybSIgQ09NTU9OX0ZMQUdTCiBzdGF0
aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxX2xvbmdfb3B0c1tdID0gewogCXsiaW5zdGFsbCIsICAg
ICAgbm9fYXJndW1lbnQsIE5VTEwsICdpJ30sCisJeyJscy1vdmVybGF5cyIsICBub19hcmd1bWVu
dCwgTlVMTCwgJ2wnfSwKIAl7InJlaW5pdGlhbGl6ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9
LAogCXsibWV0YWNhY2hlIiwgICAgbm9fYXJndW1lbnQsIE5VTEwsICdtJ30sCiAJQ09NTU9OX0xP
TkdfT1BUUwogfTsKIHN0YXRpYyBjb25zdCBjaGFyICpxX29wdHNfaGVscFtdID0gewogCSJJbnN0
YWxsIHN5bWxpbmtzIGZvciBhcHBsZXRzIiwKKwkiTGlzdCBjb25maWd1cmVkIG92ZXJsYXlzIiwK
IAkiUmVpbml0aWFsaXplIGVidWlsZCBjYWNoZSIsCiAJIlJlaW5pdGlhbGl6ZSBtZXRhZGF0YSBj
YWNoZSIsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtNzAsNiArNzIsNyBAQCBpbnQgcV9tYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQgaTsKIAljaGFyICpwOwogCUFQUExFVCBmdW5jOwor
CW92ZXJsYXlfdCAqIGN1cl9vdmVybGF5OwogCiAJaWYgKGFyZ2MgPT0gMCkKIAkJcmV0dXJuIDE7
CkBAIC04OSw2ICs5MiwxNSBAQCBpbnQgcV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ
Q09NTU9OX0dFVE9QVFNfQ0FTRVMocSkKIAkJY2FzZSAnbSc6IHJlaW5pdGlhbGl6ZV9tZXRhY2Fj
aGUgPSAxOyBicmVhazsKIAkJY2FzZSAncic6IHJlaW5pdGlhbGl6ZSA9IDE7IGJyZWFrOworCQlj
YXNlICdsJzogeworCQkJcHJpbnRmKCJcbiVzT3ZlcmxheShzKSA6JXNcblxuIiwgR1JFRU4sIE5P
Uk0pOworCQkJY3VyX292ZXJsYXk9b3ZlcmxheV9nZW50b287CisJCQlkbyB7CisJCQkJcHJpbnRm
KCIgICBOYW1lIDogJXMlLTIwLjIwcyVzIFx0bG9jYXRpb24gOiAlcyVzJXNcbiIsIENZQU4sIGN1
cl9vdmVybGF5LT5uYW1lLCBOT1JNLCBDWUFOLCBjdXJfb3ZlcmxheS0+cGF0aCwgTk9STSk7CisJ
CQl9IHdoaWxlICggKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCQlmcHV0Yygn
XG4nLCBzdGRvdXQpOworCQkJcmV0dXJuIDA7CisJCQl9CiAJCWNhc2UgJ2knOiB7CiAJCQljaGFy
IGJ1ZltfUV9QQVRIX01BWF07CiAJCQkvKiBhbHdheXMgYnplcm8gYSBidWZmZXIgYmVmb3JlIHVz
aW5nIHJlYWRsaW5rKCkgKi8KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9xY2Fj
aGUuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xY2FjaGUuYwotLS0gcG9ydGFnZS11dGls
cy0yMDA2MTExMS9xY2FjaGUuYwkyMDA2LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAor
KysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcWNhY2hlLmMJMjAwNi0xMS0xMiAyMzowMTo0
MC44Mjk5NzQ1NDMgKzAxMDAKQEAgLTUxMiwxMCArNTEyLDEwIEBAIGludCBxY2FjaGVfdHJhdmVy
c2Uodm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAlpbnQgaSwgaiwgaywgbGVuLCBudW1fY2F0LCBudW1f
cGtnLCBudW1fZWJ1aWxkOwogCXN0cnVjdCBkaXJlY3QgKipjYXRlZ29yaWVzLCAqKnBhY2thZ2Vz
LCAqKmVidWlsZHM7CiAKLQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIp
ICsgc3RybGVuKHBvcnRkaXIpICsgMSk7CisJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihR
Q0FDSEVfRURCKSArIHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyAxKTsKIAljYXRwYXRo
ID0geG1hbGxvYyhsZW4pOwogCW1lbXNldChjYXRwYXRoLCAwLCBsZW4pOwotCXNucHJpbnRmKGNh
dHBhdGgsIGxlbiwgIiVzJXMiLCBRQ0FDSEVfRURCLCBwb3J0ZGlyKTsKKwlzbnByaW50ZihjYXRw
YXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCiAJ
aWYgKC0xID09IChudW1fY2F0ID0gc2NhbmRpcihjYXRwYXRoLCAmY2F0ZWdvcmllcywgcWNhY2hl
X2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQllcnIoIiVzICVzIiwgY2F0cGF0aCwgc3Ry
ZXJyb3IoZXJybm8pKTsKQEAgLTUyNywxMCArNTI3LDEwIEBAIGludCBxY2FjaGVfdHJhdmVyc2Uo
dm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAogCS8qIHRyYXZlcnNlIGNhdGVnb3JpZXMgKi8KIAlmb3Ig
KGkgPSAwOyBpIDwgbnVtX2NhdDsgaSsrKSB7Ci0JCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJs
ZW4ocG9ydGRpcikgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUp
ICsgMSk7CisJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBh
dGgpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIDEpOwog
CQlwa2dwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQocGtncGF0aCwgMCwgbGVuKTsKLQkJ
c25wcmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBwb3J0ZGlyLCBjYXRlZ29yaWVzW2ldLT5k
X25hbWUpOworCQlzbnByaW50Zihwa2dwYXRoLCBsZW4sICIlcy8lcyIsIG92ZXJsYXlfZ2VudG9v
LT5wYXRoLCBjYXRlZ29yaWVzW2ldLT5kX25hbWUpOwogCiAJCWlmICgtMSA9PSAobnVtX3BrZyA9
IHNjYW5kaXIocGtncGF0aCwgJnBhY2thZ2VzLCBxY2FjaGVfZmlsZV9zZWxlY3QsIGFscGhhc29y
dCkpKSB7CiAJCQl3YXJuKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC01
NTIsMTAgKzU1MiwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5jKShxY2FjaGVf
CiAKIAkJLyogdHJhdmVyc2UgcGFja2FnZXMgKi8KIAkJZm9yIChqID0gMDsgaiA8IG51bV9wa2c7
IGorKykgewotCQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihwb3J0ZGlyKSArIHN0cmxl
bigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyBzdHJsZW4oIi8iKSArIHN0
cmxlbihwYWNrYWdlc1tqXS0+ZF9uYW1lKSArIDEpOworCQkJbGVuID0gc2l6ZW9mKGNoYXIpICog
KHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRl
Z29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBzdHJsZW4ocGFja2FnZXNbal0tPmRf
bmFtZSkgKyAxKTsKIAkJCWVidWlsZHBhdGggPSB4bWFsbG9jKGxlbik7CiAJCQltZW1zZXQoZWJ1
aWxkcGF0aCwgMCwgbGVuKTsKLQkJCXNucHJpbnRmKGVidWlsZHBhdGgsIGxlbiwgIiVzLyVzLyVz
IiwgcG9ydGRpciwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lLCBwYWNrYWdlc1tqXS0+ZF9uYW1lKTsK
KwkJCXNucHJpbnRmKGVidWlsZHBhdGgsIGxlbiwgIiVzLyVzLyVzIiwgb3ZlcmxheV9nZW50b28t
PnBhdGgsIGNhdGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRfbmFtZSk7CiAKIAkJ
CWlmICgtMSA9PSAobnVtX2VidWlsZCA9IHNjYW5kaXIoZWJ1aWxkcGF0aCwgJmVidWlsZHMsIHFj
YWNoZV9lYnVpbGRfc2VsZWN0LCBxY2FjaGVfdmVyY21wKSkpIHsKIAkJCQl3YXJuKCIlcyAlcyIs
IGVidWlsZHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC03NzMsMTAgKzc3MywxMCBAQCB2b2lk
IHFjYWNoZV9zdGF0cyhxY2FjaGVfZGF0YSAqZGF0YSkKIAkJZm9yIChpID0gMDsgYXJjaGxpc3Rb
aV07IGkrKykKIAkJCWFyY2hpdGVjdHVyZXMrKzsKIAotCQlsZW4gPSBzaXplb2YoY2hhcikgKiAo
c3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKHBvcnRkaXIpICsgMSk7CisJCWxlbiA9IHNpemVv
ZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VEQikgKyBzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBh
dGgpICsgMSk7CiAJCWNhdHBhdGggPSB4bWFsbG9jKGxlbik7CiAJCW1lbXNldChjYXRwYXRoLCAw
LCBsZW4pOwotCQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgcG9y
dGRpcik7CisJCXNucHJpbnRmKGNhdHBhdGgsIGxlbiwgIiVzJXMiLCBRQ0FDSEVfRURCLCBvdmVy
bGF5X2dlbnRvby0+cGF0aCk7CiAKIAkJaWYgKC0xID09IChudW1jYXQgPSBzY2FuZGlyKGNhdHBh
dGgsICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxlY3QsIGFscGhhc29ydCkpKSB7CiAJCQll
cnIoIiVzICVzIiwgY2F0cGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTkyOCwxMSArOTI4LDEx
IEBAIGludCBxY2FjaGVfaW5pdCgpCiAJY2hhciAqZmlsZW5hbWU7CiAJdW5zaWduZWQgaW50IGxl
bjsKIAotCWxlbiAgICAgID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihwb3J0ZGlyKSArIHN0cmxl
bigiL3Byb2ZpbGVzL2FyY2gubGlzdCIpICsgMSk7CisJbGVuICAgICAgPSBzaXplb2YoY2hhcikg
KiAoc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0cmxlbigiL3Byb2ZpbGVzL2FyY2gu
bGlzdCIpICsgMSk7CiAJZmlsZW5hbWUgPSB4bWFsbG9jKGxlbik7CiAKIAltZW1zZXQoZmlsZW5h
bWUsIDAsIGxlbik7Ci0Jc25wcmludGYoZmlsZW5hbWUsIGxlbiwgIiVzL3Byb2ZpbGVzL2FyY2gu
bGlzdCIsIHBvcnRkaXIpOworCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxlcy9h
cmNoLmxpc3QiLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAKIAlpZiAoTlVMTCA9PSAoYXJjaGxp
c3QgPSBxY2FjaGVfcmVhZF9saW5lcyhmaWxlbmFtZSkpKSB7CiAJCWZyZWUoZmlsZW5hbWUpOwpk
aWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL3FncmVwLmMgcG9ydGFnZS11dGlscy0y
MDA2MTExMS5uZXcvcWdyZXAuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExMS9xZ3JlcC5jCTIw
MDYtMTEtMTEgMjM6Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYx
MTExLm5ldy9xZ3JlcC5jCTIwMDYtMTEtMTIgMjM6MTI6MjEuNTExNTc2MTM0ICswMTAwCkBAIC0x
MCwxMSArMTAsMTIgQEAKIAogI2lmZGVmIEFQUExFVF9xZ3JlcAogCi0jZGVmaW5lIFFHUkVQX0ZM
QUdTICJJaUhjZSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFHUkVQX0ZMQUdTICJJaUhvOmNlIiBD
T01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFncmVwX2xvbmdfb3B0c1td
ID0gewogCXsiaW52ZXJ0LW1hdGNoIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnSSd9LAogCXsiaWdu
b3JlLWNhc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LAogCXsid2l0aC1maWxlbmFtZSIs
IG5vX2FyZ3VtZW50LCBOVUxMLCAnSCd9LAorCXsib3ZlcmxheSIsICAgICAgICBhX2FyZ3VtZW50
LCBOVUxMLCAnbyd9LAogCXsiY291bnQiLCAgICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9
LAogCXsicmVnZXhwIiwgICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnZSd9LAogCUNPTU1PTl9M
T05HX09QVFMKQEAgLTIzLDYgKzI0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnFncmVwX29wdHNf
aGVscFtdID0gewogCSJTZWxlY3Qgbm9uLW1hdGNoaW5nIGxpbmVzIiwKIAkiSWdub3JlIGNhc2Ug
ZGlzdGluY3Rpb25zIiwKIAkiUHJpbnQgdGhlIGZpbGVuYW1lIGZvciBlYWNoIG1hdGNoIiwKKwki
T25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheSIsCiAJIk9ubHkgcHJpbnQgYSBjb3VudCBv
ZiBtYXRjaGluZyBsaW5lcyBwZXIgRklMRSIsCiAJIlVzZSBQQVRURVJOIGFzIGEgcmVndWxhciBl
eHByZXNzaW9uIiwKIAlDT01NT05fT1BUU19IRUxQCkBAIC0zNCw3ICszNiw5IEBAIGludCBxZ3Jl
cF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlpbnQgaTsKIAlpbnQgY291bnQgPSAw
OwotCWNoYXIgKnA7CisJc2hvcnQgbXllcnJvciA9IDAsIHJlcG8gPSAwOworCWNoYXIgb3Zlcmxh
eV9uYW1lWzY0XSwgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgKnAsICpzdHI7CiAJY2hhciBkb19j
b3VudCwgZG9fcmVnZXg7CiAJY2hhciBzaG93X2ZpbGVuYW1lOwogCUZJTEUgKmZwOwpAQCAtNDIs
MTAgKzQ2LDE1IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFy
IGJ1ZjBbQlVGU0laXTsKIAlpbnQgcmVmbGFncyA9IFJFR19OT1NVQjsKIAljaGFyIGludmVydF9t
YXRjaCA9IDA7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheSwgKm92ZXJsYXlfdG1wOwogCiAJdHlw
ZWRlZiBjaGFyICooKkZVTkMpIChjaGFyICosIGNoYXIgKik7CiAJRlVOQyBzdHJmdW5jID0gKEZV
TkMpIHN0cnN0cjsKIAorCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50b287CisJb3ZlcmxheV9u
YW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CisKIAlEQkcoImFyZ2M9JWQgYXJndlsw
XT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBhcmd2WzFd
IDogIk5VTEw/Iik7CiAKQEAgLTU4LDkgKzY3LDEzIEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKIAkJCXN0cmZ1bmMgPSAoRlVOQykgc3RyY2FzZXN0cjsKIAkJCXJlZmxh
Z3MgfD0gUkVHX0lDQVNFOwogCQkJYnJlYWs7CisJCWNhc2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0g
MTsgYnJlYWs7CisJCWNhc2UgJ28nOiAKKwkJCXJlcG8gPSAxOworCQkJc3RybmNweShyZXBvX3Nl
YXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJyZWFrOwogCQljYXNlICdj
JzogZG9fY291bnQgPSAxOyBicmVhazsKIAkJY2FzZSAnZSc6IGRvX3JlZ2V4ID0gMTsgYnJlYWs7
Ci0JCWNhc2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0gMTsgYnJlYWs7CiAJCUNPTU1PTl9HRVRPUFRT
X0NBU0VTKHFncmVwKQogCQl9CiAJfQpAQCAtNzMsNiArODYsMzggQEAgaW50IHFncmVwX21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlyZXR1cm4gMTsKIAl3aGlsZSAoKGZnZXRzKGVidWls
ZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkgIT0gTlVMTCkgewogCQlGSUxFICpuZXdmcDsKKwkJaWYg
KCAoIHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJeworCQkJKnAgPSAwOworCQkJc3RyID0g
cCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQlwID0gZWJ1aWxkOworCQkJaWYgKCBy
ZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIHAsIHNpemVvZiggcmVwb19zZWFyY2gpKSkKKwkJ
CQljb250aW51ZTsKKwkJCWlmICggc3RyY21wKG92ZXJsYXlfbmFtZSwgcCkpCisJCQl7CisJCQkJ
b3ZlcmxheV90bXA9b3ZlcmxheV9nZW50b287CisJCQkJZG8geworCQkJCQlpZiAoICEgc3RybmNt
cChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJ
CQlicmVhazsKKwkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQpKTsK
KwkJCQlpZiAoICEgc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlf
dG1wLT5uYW1lKSkpCisJCQkJeworCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJ
CQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRp
ciB0byBQT1JURElSICclcycgZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXll
cnJvcj0xOworCQkJCQl9CisJCQkJfSBlbHNlIAorCQkJCQlteWVycm9yPTE7CisJCQkJaWYgKCBt
eWVycm9yKSB7CisJCQkJCW15ZXJyb3I9MDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN0
cm5jcHkob3ZlcmxheV9uYW1lLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFt
ZSkpOworCQkJfQorCQkJc3RyY3B5KGVidWlsZCwgc3RyKSA7CisJCX0KKwogCQlpZiAoKHAgPSBz
dHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJaWYgKChuZXdmcCA9
IGZvcGVuKGVidWlsZCwgInIiKSkgIT0gTlVMTCkgewpAQCAtMTAyLDcgKzE0Nyw3IEBAIGludCBx
Z3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQljb3VudCsrOwogCQkJCWlmIChk
b19jb3VudCkgY29udGludWU7CiAJCQkJaWYgKHZlcmJvc2UgfHwgc2hvd19maWxlbmFtZSkgewot
CQkJCQlwcmludGYoIiVzOiIsIGVidWlsZCk7CisJCQkJCXByaW50ZigiJXM6OiVzOiIsIGN1cl9v
dmVybGF5LT5uYW1lLCBlYnVpbGQpOwogCQkJCQlpZiAodmVyYm9zZSA+IDEpIHByaW50ZigiJWQ6
IiwgbGluZW5vKTsKIAkJCQkJcHJpbnRmKCIgIik7CiAJCQkJfQpkaWZmIC1OYXJ1cCBwb3J0YWdl
LXV0aWxzLTIwMDYxMTExL3FzZWFyY2guYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xc2Vh
cmNoLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcXNlYXJjaC5jCTIwMDYtMTEtMTEgMjM6
Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xc2Vh
cmNoLmMJMjAwNi0xMS0xMyAwMjo0OTo1NC4wOTUyODE3OTkgKzAxMDAKQEAgLTksMTAgKzksMTIg
QEAKIAogI2lmZGVmIEFQUExFVF9xc2VhcmNoCiAKLSNkZWZpbmUgUVNFQVJDSF9GTEFHUyAiYWNz
U05IIiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUVNFQVJDSF9GTEFHUyAiYWNvOnBzU05IIiBDT01N
T05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFzZWFyY2hfbG9uZ19vcHRzW10g
PSB7CiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2EnfSwKIAl7ImNhY2hlIiwg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAorCXsib3ZlcmxheSIsICAgIGFfYXJndW1lbnQs
IE5VTEwsICdvJ30sCisJeyJzaG93LXBhdGgiLCBub19hcmd1bWVudCwgTlVMTCwgJ3AnfSwKIAl7
InNlYXJjaCIsICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAogCXsiZGVzYyIsICAgICAgIGFf
YXJndW1lbnQsIE5VTEwsICdTJ30sCiAJeyJuYW1lLW9ubHkiLCBub19hcmd1bWVudCwgTlVMTCwg
J04nfSwKQEAgLTIyLDYgKzI0LDggQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXNlYXJj
aF9sb25nXwogc3RhdGljIGNvbnN0IGNoYXIgKnFzZWFyY2hfb3B0c19oZWxwW10gPSB7CiAJIkxp
c3QgdGhlIGRlc2NyaXB0aW9ucyBvZiBldmVyeSBwYWNrYWdlIGluIHRoZSBjYWNoZSIsCiAJIlVz
ZSB0aGUgcG9ydGFnZSBjYWNoZSIsCisJIlNlYXJjaCBvbmx5IGluIHRoZSA8YXJnPiBvdmVybGF5
IiwKKwkiU2hvdyB0aGUgcGF0aCB0byB0aGUgZWJ1aWxkIiwKIAkiUmVnZXggc2VhcmNoIHBhY2th
Z2UgYmFzZW5hbWVzIiwKIAkiUmVnZXggc2VhcmNoIHBhY2thZ2UgZGVzY3JpcHRpb25zIiwKIAki
T25seSBzaG93IHBhY2thZ2UgbmFtZSIsCkBAIC00MCwxMyArNDQsMjAgQEAgaW50IHFzZWFyY2hf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhciBsYXN0WzEyNl0gPSAiIjsKIAljaGFy
IGRwWzEyNl0gPSAiIjsKIAljaGFyIGJwWzEyNl0gPSAiIjsKLQljaGFyICpwLCAqcSwgKnN0cjsK
KwlzaG9ydCByZXBvID0gMDsKKwljaGFyIHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyICpwLCAqcSwg
KnN0ciwgb3ZlcmxheV9uYW1lWzY0XTsKIAljaGFyICpzZWFyY2hfbWUgPSBOVUxMOwotCWNoYXIg
c2hvd19ob21lcGFnZSA9IDAsIHNob3dfbmFtZV9vbmx5ID0gMDsKKwljaGFyIHNob3dfaG9tZXBh
Z2UgPSAwLCBzaG93X25hbWVfb25seSA9IDAsIHNob3dfcGF0aF90b19lYnVpbGQgPSAwOwogCWNo
YXIgc2VhcmNoX2Rlc2MgPSAwLCBzZWFyY2hfYWxsID0gMCwgc2VhcmNoX25hbWUgPSAxLCBzZWFy
Y2hfY2FjaGUgPSBDQUNIRV9FQlVJTEQ7CiAJY29uc3QgY2hhciAqc2VhcmNoX3ZhcnNbXSA9IHsg
IkRFU0NSSVBUSU9OPSIsICJIT01FUEFHRT0iIH07CiAJc2l6ZV90IHNlYXJjaF9sZW47Ci0JaW50
IGksIGlkeD0wOworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3RtcDsKKwlpbnQg
aSwgaWR4PTAsIG15ZXJyb3I9MDsKKworCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50b287CisJ
b3ZlcmxheV9uYW1lWzBdID0gMCA7CisJcmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdj
PSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAx
ID8gYXJndlsxXSA6ICJOVUxMPyIpOwpAQCAtNTYsNiArNjcsOCBAQCBpbnQgcXNlYXJjaF9tYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXNlYXJjaCkK
IAkJY2FzZSAnYSc6IHNlYXJjaF9hbGwgPSAxOyBicmVhazsKIAkJY2FzZSAnYyc6IHNlYXJjaF9j
YWNoZSA9IENBQ0hFX01FVEFEQVRBOyBicmVhazsKKwkJY2FzZSAnbyc6IHJlcG8gPSAxOyBzdHJu
Y3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcsIHNpemVvZihyZXBvX3NlYXJjaCkpOyBicmVhazsKKwkJ
Y2FzZSAncCc6IHNob3dfcGF0aF90b19lYnVpbGQgPSAxOyBicmVhazsKIAkJY2FzZSAncyc6IHNl
YXJjaF9kZXNjID0gMDsgc2VhcmNoX25hbWUgPSAxOyBicmVhazsKIAkJY2FzZSAnUyc6IHNlYXJj
aF9kZXNjID0gMTsgc2VhcmNoX25hbWUgPSAwOyBicmVhazsKIAkJY2FzZSAnTic6IHNob3dfbmFt
ZV9vbmx5ID0gMTsgYnJlYWs7CkBAIC05MywxMSArMTA2LDIyIEBAIGludCBxc2VhcmNoX21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYgKChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUo
ZWJ1aWxkKSkgIT0gTlVMTCkgewogCQkJCWlmICgoc3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxh
c3QpKSAhPSAwKSB7CiAJCQkJCXN0cm5jcHkobGFzdCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9m
KGxhc3QpKTsKLQkJCQkJaWYgKChyZW1hdGNoKHNlYXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNh
Y2hlLT5ERVNDUklQVElPTiA6IGVidWlsZCksIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09
IDApCi0JCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20t
PkNBVEVHT1JZLCBCTFVFLAotCQkJCQkJICAgICAgIHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0J
CQkJCQkgICAgICAgKHNob3dfbmFtZV9vbmx5ID8gIiIgOgotCQkJCQkJICAgICAgICAoc2hvd19o
b21lcGFnZSA/IHBjYWNoZS0+SE9NRVBBR0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJ
CQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBU
SU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgPT0gMCkgeworCQkJCQkJ
aWYgKCBzaG93X3BhdGhfdG9fZWJ1aWxkKSB7CisJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6
JXNcdCAlcyVzLyVzL1xuIiwJCisJCQkJCQkJQk9MRCwgcGNhY2hlLT5hdG9tLT5DQVRFR09SWSwK
KwkJCQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAorCQkJCQkJCVlFTExPVyxjdXJfb3Zlcmxh
eS0+bmFtZSwgTk9STSwKKwkJCQkJCQljdXJfb3ZlcmxheS0+cGF0aCwgZGlybmFtZShlYnVpbGQp
KTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXMgJXMlc1xu
IiwKKwkJCQkJCQlCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLAorCQkJCQkJCUJMVUUsIHBj
YWNoZS0+YXRvbS0+UE4sCisJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAor
CQkJCQkJCShzaG93X25hbWVfb25seSA/ICIiIDogCisJCQkJCQkJKHNob3dfaG9tZXBhZ2UgPyBw
Y2FjaGUtPkhPTUVQQUdFIDogcGNhY2hlLT5ERVNDUklQVElPTikpKTsKKwkJCQkJCX0KKwkJCQkJ
fQogCQkJCX0KIAkJCQljYWNoZV9mcmVlKHBjYWNoZSk7CiAJCQl9IGVsc2UgewpAQCAtMTEwLDYg
KzEzNCw0NCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQlj
YXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklMRSAqZWJ1aWxkZnA7CisJCQlpZiAoICggcCA9IHN0
cmNocihlYnVpbGQsICc6JykpKQorCQkJeworCQkJCSpwID0gMDsKKwkJCQlzdHIgPSBwKzI7CQkJ
Lyogc2VwYXJhdG9yIGlzICc6OicgKi8KKwkJCQlwID0gZWJ1aWxkOworCQkJCWlmICggcmVwbyAm
JiBzdHJuY21wKCByZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQkJCWNv
bnRpbnVlOworCQkJCWlmICggc3RyY21wKG92ZXJsYXlfbmFtZSwgcCkpCisJCQkJeworCQkJCQlv
dmVybGF5X3RtcD1vdmVybGF5X2dlbnRvbzsKKwkJCQkJZG8geworCQkJCQkJaWYgKCAhIHN0cm5j
bXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJ
CQkJCWJyZWFrOworCQkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQp
KTsKKworCQkJCQlpZiAoIG92ZXJsYXlfdG1wICkgeworCQkJCQkJY3VyX292ZXJsYXkgPSBvdmVy
bGF5X3RtcDsKKwkJCQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+cGF0aCkgIT0gMCkgeworCQkJ
CQkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZhaWxlZCIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJ
CQkJCQlteWVycm9yPTE7CisJCQkJCQl9CisJCQkJCX0gZWxzZSAKKwkJCQkJCW15ZXJyb3I9MTsK
KworCQkJCQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOwor
CQkJCX0KKwkJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQkJfSBlbHNlCisJCQkJbXllcnJvcj0x
OworCisJCQlpZiAobXllcnJvcikgeworCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQl3YXJu
ZigiKGNhY2hlIHVwZGF0ZSBwZW5kaW5nKSAlcyA6IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlf
bmFtZSk7CisJCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCQlteWVycm9yPTA7CisJCQkJY29udGlu
dWU7CisJCQl9CisKIAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBk
aXJuYW1lKHN0cik7CiAKQEAgLTEzNCw5ICsxOTYsMTcgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQkJLy8gZG9pbmcgb3BlcmF0aW9ucyB3aXRoIHRoZW0u
CiAJCQkJCQkJc3RybmNweShkcCwgcCwgc2l6ZW9mKGRwKSk7CiAJCQkJCQkJc3RybmNweShicCwg
cCwgc2l6ZW9mKGJwKSk7Ci0JCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyAlc1xuIiwKLQkJCQkJ
CQkJQk9MRCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwgTk9STSwKKwkJCQkJCQlp
ZiAoIHNob3dfcGF0aF90b19lYnVpbGQpIHsKKwkJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6
JXNcdCAlcyVzLyVzL1xuIiwKKwkJCQkJCQkJQk9MRCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2Vu
YW1lKGJwKSwKKwkJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAorCQkJCQkJ
CQljdXJfb3ZlcmxheS0+cGF0aCwgZGlybmFtZShlYnVpbGQpKTsKKwkJCQkJCQl9IGVsc2Ugewor
CQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJCQlCT0xELCBk
aXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnApLAorCQkJCQkJCQlZRUxMT1csY3VyX292ZXJs
YXktPm5hbWUsIE5PUk0sCiAJCQkJCQkJCShzaG93X25hbWVfb25seSA/ICIiIDogcSkpOworCQkJ
CQkJCX0KIAkJCQkJCQlicmVhazsKIAkJCQkJCX0KIAkJCQkJfQpkaWZmIC1OYXJ1cCBwb3J0YWdl
LXV0aWxzLTIwMDYxMTExL3F1c2UuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xdXNlLmMK
LS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcXVzZS5jCTIwMDYtMTEtMTEgMjM6Mzc6MjEuMDAw
MDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xdXNlLmMJMjAwNi0x
MS0xMiAyMzowNjo0Ny43NzYzMTE2MDcgKzAxMDAKQEAgLTE0LDEwICsxNCwxMSBAQAogIHF1c2Ug
LUtlIC0tICBubHMKICovCiAKLSNkZWZpbmUgUVVTRV9GTEFHUyAiZWF2S0xERjpOIiBDT01NT05f
RkxBR1MKKyNkZWZpbmUgUVVTRV9GTEFHUyAiZWFvOnZLTERGOk4iIENPTU1PTl9GTEFHUwogc3Rh
dGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXVzZV9sb25nX29wdHNbXSA9IHsKIAl7ImV4YWN0Iiwg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnZSd9LAogCXsiYWxsIiwgICAgICAgbm9fYXJndW1lbnQs
IE5VTEwsICdhJ30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwKIAl7
ImtleXdvcmRzIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnSyd9LAogCXsibGljZW5zZSIsICAgbm9f
YXJndW1lbnQsIE5VTEwsICdMJ30sCiAJeyJkZXNjcmliZSIsICBub19hcmd1bWVudCwgTlVMTCwg
J0QnfSwKQEAgLTI4LDYgKzI5LDcgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcXVzZV9s
b25nX29wdAogc3RhdGljIGNvbnN0IGNoYXIgKnF1c2Vfb3B0c19oZWxwW10gPSB7CiAJIlNob3cg
ZXhhY3Qgbm9uIHJlZ2V4cCBtYXRjaGluZyB1c2luZyBzdHJjbXAiLAogCSJTaG93IGFubm95aW5n
IHRoaW5ncyBpbiBJVVNFIiwKKwkiT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheSIsCiAJ
IlVzZSB0aGUgS0VZV09SRFMgdnMgSVVTRSIsCiAJIlVzZSB0aGUgTElDRU5TRSB2cyBJVVNFIiwK
IAkiRGVzY3JpYmUgdGhlIFVTRSBmbGFnIiwKQEAgLTM4LDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0
IGNoYXIgKnF1c2Vfb3B0c19oZWxwW10gPSB7CiBzdGF0aWMgY29uc3QgY2hhciBxdXNlX3Jjc2lk
W10gPSAiJElkOiBxdXNlLmMsdiAxLjUzIDIwMDYvMTEvMDkgMDA6MTg6MDUgdmFwaWVyIEV4cCAk
IjsKICNkZWZpbmUgcXVzZV91c2FnZShyZXQpIHVzYWdlKHJldCwgUVVTRV9GTEFHUywgcXVzZV9s
b25nX29wdHMsIHF1c2Vfb3B0c19oZWxwLCBsb29rdXBfYXBwbGV0X2lkeCgicXVzZSIpKQogCi1p
bnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBjaGFyICoqYXJndik7Citp
bnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIHNob3J0IHJlcG8sIGNoYXIgcmVwb19zZWFy
Y2hbXSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIAogY2hhciBxdXNlX25hbWVfb25seSA9IDA7
CiAKQEAgLTgxLDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfaGlnaGxpZ2h0ZWRfdXNlX2Zs
YWdzKAogCX0KIH0KIAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCitpbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIHNob3J0IHJlcG8s
IGNoYXIgcmVwb19zZWFyY2hbXSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogI2RlZmluZSBO
VU1fU0VBUkNIX0ZJTEVTIEFSUl9TSVpFKHNlYXJjaF9maWxlcykKIAljaGFyIGJ1ZltCVUZTSVpF
XSwgKnA7CkBAIC05MSwxMjEgKzkzLDE2MiBAQCBpbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBp
bmQsIGludCBhcmdjCiAJRklMRSAqZnBbTlVNX1NFQVJDSF9GSUxFU107CiAJRElSICpkOwogCXN0
cnVjdCBkaXJlbnQgKmRlOworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXk7CiAKLQlmb3IgKGkgPSAw
OyBpIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytpKSB7Ci0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1
ZiksICIlcy9wcm9maWxlcy8lcyIsIHBvcnRkaXIsIHNlYXJjaF9maWxlc1tpXSk7Ci0JCWlmICgo
ZnBbaV0gPSBmb3BlbihidWYsICJyIikpID09IE5VTEwpCi0JCQl3YXJucCgic2tpcHBpbmcgJXMi
LCBzZWFyY2hfZmlsZXNbaV0pOwotCX0KKwljdXJfb3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKIAot
CWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgewotCQlzID0gc3RybGVuKGFyZ3ZbaV0pOwor
CWRvIHsKKwkJaWYgKCByZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIGN1cl9vdmVybGF5LT5u
YW1lLCBzaXplb2YoIHJlcG9fc2VhcmNoKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsg
aSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgeworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIiVzL3Byb2ZpbGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9maWxlc1tpXSk7
CisJCQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQorCQkJCWlmICggdmVy
Ym9zZSApCisJCQkJCXdhcm5wKCJza2lwcGluZyAlcyBmb3IgdGhlICVzIG92ZXJsYXkiLCBzZWFy
Y2hfZmlsZXNbaV0sIGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJfQogCi0JCWZvciAoZiA9IDA7IGYg
PCBOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIHsKLQkJCWlmIChmcFtmXSA9PSBOVUxMKQotCQkJCWNv
bnRpbnVlOworCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspIHsKKwkJCXMgPSBzdHJsZW4o
YXJndltpXSk7CiAKLQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcFtmXSkgIT0g
TlVMTCkgewotCQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4nKQorCQkJZm9y
IChmID0gMDsgZiA8IE5VTV9TRUFSQ0hfRklMRVM7ICsrZikgeworCQkJCWlmIChmcFtmXSA9PSBO
VUxMKQogCQkJCQljb250aW51ZTsKIAotCQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkg
IT0gTlVMTCkKLQkJCQkJKnAgPSAnXDAnOworCQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihi
dWYpLCBmcFtmXSkgIT0gTlVMTCkgeworCQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0g
PT0gJ1xuJykKKwkJCQkJCWNvbnRpbnVlOwogCi0JCQkJc3dpdGNoIChmKSB7Ci0JCQkJCWNhc2Ug
MDogLyogR2xvYmFsIHVzZS5kZXNjICovCi0JCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ld
LCBzKSkKLQkJCQkJCQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKLQkJ
CQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBCT0xELCBOT1JNLCBCTFVF
LCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKLQkJCQkJCQkJZ290byBza2lwX2ZpbGU7Ci0JCQkJ
CQkJfQotCQkJCQkJYnJlYWs7CisJCQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0g
TlVMTCkKKwkJCQkJCSpwID0gJ1wwJzsKIAotCQkJCQljYXNlIDE6IC8qIExvY2FsIHVzZS5sb2Nh
bC5kZXNjICovCi0JCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQorCQkJ
CQlzd2l0Y2ggKGYpIHsKKwkJCQkJCWNhc2UgMDogLyogR2xvYmFsIHVzZS5kZXNjICovCisJCQkJ
CQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCisJCQkJCQkJCWlmIChidWZbc10gPT0g
JyAnICYmIGJ1ZltzKzFdID09ICctJykgeworCQkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBv
dmVybGF5X2dlbnRvbyApCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVz
XG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJ
CWVsc2UgCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIs
IGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYr
cyszKTsKKwkJCQkJCQkJCWdvdG8gc2tpcF9maWxlOworCQkJCQkJCQl9CiAJCQkJCQkJYnJlYWs7
Ci0JCQkJCQkrK3A7Ci0JCQkJCQlpZiAoIXN0cm5jbXAocCwgYXJndltpXSwgcykpIHsKLQkJCQkJ
CQlpZiAocFtzXSA9PSAnICcgJiYgcFtzKzFdID09ICctJykgewotCQkJCQkJCQkqcCA9ICdcMCc7
Ci0JCQkJCQkJCXByaW50ZigiICVzbG9jYWwlczolcyVzJXM6JXMlcyVzICVzXG4iLCBCT0xELCBO
T1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBCT0xELCBidWYsIE5PUk0sIHArcyszKTsKLQkJCQkJ
CQl9Ci0JCQkJCQl9Ci0JCQkJCQlicmVhazsKIAotCQkJCQljYXNlIDI6IC8qIEFyY2hpdGVjdHVy
ZXMgYXJjaC5saXN0ICovCi0JCQkJCQlpZiAoIXN0cmNtcChidWYsIGFyZ3ZbaV0pKSB7Ci0JCQkJ
CQkJcHJpbnRmKCIgJXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1cmVcbiIsIEJPTEQsIE5P
Uk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwotCQkJCQkJCWdvdG8gc2tpcF9maWxl
OwotCQkJCQkJfQotCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDE6IC8qIExvY2FsIHVzZS5sb2Nh
bC5kZXNjICovCisJCQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkgPT0gTlVMTCkKKwkJ
CQkJCQkJYnJlYWs7CisJCQkJCQkJKytwOworCQkJCQkJCWlmICghc3RybmNtcChwLCBhcmd2W2ld
LCBzKSkgeworCQkJCQkJCQlpZiAocFtzXSA9PSAnICcgJiYgcFtzKzFdID09ICctJykgeworCQkJ
CQkJCQkJKnAgPSAnXDAnOworCQkJCQkJCQkJaWYgKCBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dl
bnRvbyApCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIs
IEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMp
OworCQkJCQkJCQkJZWxzZSAKKwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzbG9jYWwlczolcyVz
JXM6JXMlcyVzICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JNLCBwK3MrMyk7CisJCQkJCQkJCX0KKwkJCQkJCQl9
CisJCQkJCQkJYnJlYWs7CiAKLQkJCQkJY2FzZSAzOiAvKiBMYW5ndWFnZXMgbGFuZy5kZXNjICov
Ci0JCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKLQkJCQkJCQlpZiAoYnVmW3Nd
ID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKLQkJCQkJCQkJcHJpbnRmKCIgJXNsYW5nJXM6
JXMlcyVzOiAlcyBsaW5ndWFcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1
ZitzKzMpOworCQkJCQkJY2FzZSAyOiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLworCQkJ
CQkJCWlmICghc3RyY21wKGJ1ZiwgYXJndltpXSkpIHsKKwkJCQkJCQkJaWYgKCBjdXJfb3Zlcmxh
eSA9PSBvdmVybGF5X2dlbnRvbyApCisJCQkJCQkJCQlwcmludGYoIiAlc2FyY2glczolcyVzJXM6
ICVzIGFyY2hpdGVjdHVyZVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYXJn
dltpXSk7CisJCQkJCQkJCWVsc2UgCisJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzYXJjaCVzOiVz
JXMlczogJXMgYXJjaGl0ZWN0dXJlXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwg
QkxVRSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7CiAJCQkJCQkJCWdvdG8gc2tpcF9maWxlOwog
CQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIDM6IC8q
IExhbmd1YWdlcyBsYW5nLmRlc2MgKi8KKwkJCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ld
LCBzKSkKKwkJCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0gJy0nKSB7CisJ
CQkJCQkJCQlpZiAoIGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vICkKKwkJCQkJCQkJCQlw
cmludGYoIiAlc2xhbmclczolcyVzJXM6ICVzIGxpbmd1YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwg
YXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQllbHNlIAorCQkJCQkJCQkJCXByaW50
ZigiICglcykgJXNsYW5nJXM6JXMlcyVzOiAlcyBsaW5ndWFcbiIsIGN1cl9vdmVybGF5LT5uYW1l
LCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWdv
dG8gc2tpcF9maWxlOworCQkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9Ci0J
CQl9CiAKIHNraXBfZmlsZToKLQkJCXJld2luZChmcFtmXSk7CisJCQkJcmV3aW5kKGZwW2ZdKTsK
KwkJCX0KKworCQkJaWYgKCBpID09IChhcmdjIC0gMSkgKQorCQkJCWZvciAoZj0wOyBmPE5VTV9T
RUFSQ0hfRklMRVM7ICsrZikgCisJCQkJCWlmICggZnBbZl0gKSB7CisJCQkJCQlmY2xvc2UoZnBb
Zl0pOworCQkJCQkJZnBbZl0gPSBOVUxMOworCQkJCQl9CiAJCX0KLQl9CiAKLQlmb3IgKGY9MDsg
ZjxOVU1fU0VBUkNIX0ZJTEVTOyArK2YpCi0JCWZjbG9zZShmcFtmXSk7CisJfSB3aGlsZSAoIChj
dXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOwogCiAJLyogbm93IHNjYW4gdGhlIGRlc2Mg
ZGlyICovCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwg
cG9ydGRpcik7Ci0JZCA9IG9wZW5kaXIoYnVmKTsKLQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkg
IT0gTlVMTCkgewotCQlpZiAoc3RyY21wKGRlLT5kX25hbWUrc3RybGVuKGRlLT5kX25hbWUpLTUs
ICIuZGVzYyIpKQorCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOworCWRvIHsKKwkJaWYgKCBy
ZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2YoIHJl
cG9fc2VhcmNoKSkpCiAJCQljb250aW51ZTsKLQotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYp
LCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIHBvcnRkaXIsIGRlLT5kX25hbWUpOwotCQlpZiAoKGZw
WzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkgewotCQkJd2FybigiQ291bGQgbm90IG9wZW4g
JyVzJyBmb3IgcmVhZGluZzsgc2tpcHBpbmciLCBkZS0+ZF9uYW1lKTsKKwkJc25wcmludGYoYnVm
LCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwgY3VyX292ZXJsYXktPnBhdGgpOwor
CQlpZiAoICEgKGQgPSBvcGVuZGlyKGJ1ZikpKSB7CisJCQlpZiAoIHZlcmJvc2UgKSAKKwkJCQl3
YXJuKCJDb3VsZCBub3Qgb3BlbiAlcyAtPiBza2lwcGluZyIsIGJ1Zik7IAogCQkJY29udGludWU7
CiAJCX0KKwkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJCWlmIChzdHJj
bXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwgIi5kZXNjIikpCisJCQkJY29udGlu
dWU7CiAKLQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7
Ci0JCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJCXNucHJpbnRmKGJ1
Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNjLyVzIiwgY3VyX292ZXJsYXktPnBhdGgs
IGRlLT5kX25hbWUpOworCQkJaWYgKChmcFswXT1mb3BlbihidWYsICJyIikpID09IE5VTEwpIHsK
KwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nOyBza2lwcGluZyIsIGRl
LT5kX25hbWUpOwogCQkJCWNvbnRpbnVlOworCQkJfQogCi0JCQlpZiAoKHAgPSBzdHJyY2hyKGJ1
ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJKnAgPSAnXDAnOworCQkJd2hpbGUgKGZnZXRzKGJ1Ziwg
c2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7CisJCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwg
YnVmWzBdID09ICdcbicpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKChwID0gc3RycmNocihi
dWYsICdcbicpKSAhPSBOVUxMKQorCQkJCQkqcCA9ICdcMCc7CiAKLQkJCWlmICgocCA9IHN0cmNo
cihidWYsICctJykpID09IE5VTEwpIHsKKwkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnLScpKSA9
PSBOVUxMKSB7CiBpbnZhbGlkX2xpbmU6Ci0JCQkJd2FybigiSW52YWxpZCBsaW5lIGluICclcyc6
ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXdoaWxlIChw
Wy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsKLQkJCQkvKiBtYXliZSB0aGUgZmxhZyBoYXMg
YSAnLScgaW4gaXQgLi4uICovCi0JCQkJaWYgKChwID0gc3RyY2hyKHArMSwgJy0nKSkgPT0gTlVM
TCkKLQkJCQkJZ290byBpbnZhbGlkX2xpbmU7Ci0JCQl9Ci0JCQlwWy0xXSA9ICdcMCc7Ci0JCQlw
ICs9IDI7CisJCQkJCXdhcm4oIkludmFsaWQgbGluZSBpbiAnJXMnOiAlcyIsIGRlLT5kX25hbWUs
IGJ1Zik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQl3aGlsZSAocFstMV0gIT0gJyAnICYm
IHBbMV0gIT0gJyAnKSB7CisJCQkJCS8qIG1heWJlIHRoZSBmbGFnIGhhcyBhICctJyBpbiBpdCAu
Li4gKi8KKwkJCQkJaWYgKChwID0gc3RyY2hyKHArMSwgJy0nKSkgPT0gTlVMTCkKKwkJCQkJCWdv
dG8gaW52YWxpZF9saW5lOworCQkJCX0KKwkJCQlwWy0xXSA9ICdcMCc7CisJCQkJcCArPSAyOwog
Ci0JCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspCi0JCQkJaWYgKCFzdHJjbXAoYXJndltp
XSwgYnVmKSkKLQkJCQkJcHJpbnRmKCIgJXMlcyVzOiVzJXMlczogJXNcbiIsIEJPTEQsIGRlLT5k
X25hbWUsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIHApOwotCQl9Ci0JCWNsb3NlKGYpOwot
CX0KLQljbG9zZWRpcihkKTsKKwkJCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspCisJCQkJ
CWlmICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpIHsKKwkJCQkJCWlmICggY3VyX292ZXJsYXkgPT0g
b3ZlcmxheV9nZW50b28gKQorCQkJCQkJCXByaW50ZigiICVzJXMlczolcyVzJXM6ICVzXG4iLCBC
T0xELCBkZS0+ZF9uYW1lLCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKKwkJCQkJCWVs
c2UKKwkJCQkJCQlwcmludGYoIiAoJXMpICVzJXMlczolcyVzJXM6ICVzXG4iLCBjdXJfb3Zlcmxh
eS0+bmFtZSwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7
CisJCQkJCX0KIAorCQkJfQorCQkJZmNsb3NlKGZwWzBdKTsKKwkJfQorCQljbG9zZWRpcihkKTsK
Kwl9IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAlyZXR1cm4gMDsK
IH0KIAogaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJRklMRSAqZnA7
Ci0JY2hhciAqcDsKKwljaGFyICpwLCAqc3RyOworCXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0g
MDsKKwljaGFyIHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyIG92ZXJsYXlfbmFtZVs2NF07CiAKIAlj
aGFyIGJ1ZjBbX1FfUEFUSF9NQVhdOwogCWNoYXIgYnVmMVtfUV9QQVRIX01BWF07CkBAIC0yMTgs
NiArMjYxLDExIEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNob3J0
IHF1c2VfYWxsID0gMDsKIAlpbnQgcmVnZXhwX21hdGNoaW5nID0gMSwgaSwgaWR4ID0gMDsKIAlz
aXplX3Qgc2VhcmNoX2xlbjsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7
CisKKwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7
CisJcmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsx
XT0lcyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIp
OwpAQCAtMjI2LDYgKzI3NCwxMCBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgJ2UnOiByZWdleHBfbWF0Y2hpbmcgPSAwOyBicmVh
azsKIAkJY2FzZSAnYSc6IHF1c2VfYWxsID0gMTsgYnJlYWs7CisJCWNhc2UgJ28nOiAKKwkJCXJl
cG8gPSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFy
Y2gpKTsKKwkJCWJyZWFrOwogCQljYXNlICdLJzogaWR4ID0gMTsgYnJlYWs7CiAJCWNhc2UgJ0wn
OiBpZHggPSAyOyBicmVhazsKIAkJY2FzZSAnRCc6IGlkeCA9IC0xOyBicmVhazsKQEAgLTIzNCwx
MSArMjg2LDE0IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01N
T05fR0VUT1BUU19DQVNFUyhxdXNlKQogCQl9CiAJfQotCWlmIChhcmdjID09IG9wdGluZCAmJiAh
cXVzZV9hbGwgJiYgaWR4ID49IDApCisJaWYgKGFyZ2MgPT0gb3B0aW5kICYmICFxdXNlX2FsbCAm
JiBpZHggPj0gMCkgeworCQlpZiAoIGlkeCA9PSAzICkKKwkJCWZyZWUoc2VhcmNoX3ZhcnMraWR4
KTsKIAkJcXVzZV91c2FnZShFWElUX0ZBSUxVUkUpOworCX0KIAogCWlmIChpZHggPT0gLTEpCi0J
CXJldHVybiBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCBhcmdjLCBhcmd2KTsKKwkJcmV0dXJu
IHF1c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIHJlcG8sIHJlcG9fc2VhcmNoLCBhcmdjLCBhcmd2
KTsKIAogCWlmIChxdXNlX2FsbCkgb3B0aW5kID0gYXJnYzsKIAlpbml0aWFsaXplX2VidWlsZF9m
bGF0KCk7CS8qIHNldHMgb3VyIHB3ZCB0byAkUE9SVERJUiAqLwpAQCAtMjUwLDYgKzMwNSw0MSBA
QCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcmV0dXJuIDE7CiAJd2hp
bGUgKChmZ2V0cyhlYnVpbGQsIHNpemVvZihlYnVpbGQpLCBmcCkpICE9IE5VTEwpIHsKIAkJRklM
RSAqbmV3ZnA7CisJCWlmICggKCBwID0gc3RyY2hyKGVidWlsZCwgJzonKSkpCisJCXsKKwkJCSpw
ID0gMDsKKwkJCXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMgJzo6JyAqLworCQkJcCA9IGVi
dWlsZDsKKwkJCWlmICggcmVwbyAmJiBzdHJuY21wKCByZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJl
cG9fc2VhcmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoIHN0cmNtcChvdmVybGF5X25hbWUs
IHApKQorCQkJeworCQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCWRvIHsKKwkJ
CQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3Rt
cC0+bmFtZSkpKQorCQkJCQkJYnJlYWs7CisJCQkJfSB3aGlsZSAoKG92ZXJsYXlfdG1wPW92ZXJs
YXlfdG1wLT5uZXh0KSk7CisJCQkJaWYgKCAhIHN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAs
IHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCXsKKwkJCQkJY3VyX292ZXJsYXkgPSBv
dmVybGF5X3RtcDsKKwkJCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5wYXRoKSAhPSAwKSB7CisJ
CQkJCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGN1cl9vdmVybGF5LT5w
YXRoKTsKKwkJCQkJCW15ZXJyb3I9MTsKKwkJCQkJfQorCQkJCX0gZWxzZSAKKwkJCQkJbXllcnJv
cj0xOworCQkJCWlmICggbXllcnJvcikgeworCQkJCQlpZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQkJ
CXdhcm5mKCIoY2FjaGUgdXBkYXRlIHBlbmRpbmcpICVzIDogJXMiLCBlYnVpbGQsIHN0cmVycm9y
KGVycm5vKSk7CisJCQkJCXJlaW5pdGlhbGl6ZSA9IDE7CisJCQkJCW15ZXJyb3I9MDsKKwkJCQkJ
Y29udGludWU7CisJCQkJfQorCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBjdXJfb3ZlcmxheS0+
bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJfQorCQkJc3RyY3B5KGVidWlsZCwgc3Ry
KSA7CisJCX0KKwogCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJ
CSpwID0gMDsKIAkJaWYgKChuZXdmcCA9IGZvcGVuKGVidWlsZCwgInIiKSkgIT0gTlVMTCkgewpA
QCAtMzc1LDcgKzQ2NSw3IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
CQkJCQlpZiAodmVyYm9zZSA+IDMpCiAJCQkJCQlwcmludGYoIiVzICVzICVzICIsICp1c2VyID8g
dXNlciA6ICJNSVNTSU5HIiwgKnJldmlzaW9uID8gcmV2aXNpb24gOiAiTUlTU0lORyIsICpkYXRl
ID8gZGF0ZSA6ICJNSVNTSU5HIik7CiAKLQkJCQkJcHJpbnRmKCIlcyVzJXMgIiwgQ1lBTiwgZWJ1
aWxkLCBOT1JNKTsKKwkJCQkJcHJpbnRmKCIlcyVzOjolcyVzICIsIENZQU4sIGN1cl9vdmVybGF5
LT5uYW1lLCBlYnVpbGQsIE5PUk0pOwogCQkJCQlwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3Mo
JmJ1ZjBbc2VhcmNoX2xlbisxXSwgb3B0aW5kLCBhcmdjLCBhcmd2KTsKIAkJCQkJcHV0cyhOT1JN
KTsKIAkJCQkJaWYgKHZlcmJvc2UgPiAxKSB7CkBAIC0zODMsNyArNDczLDcgQEAgaW50IHF1c2Vf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQlpbnQgQVJHQyA9IDA7CiAJCQkJCQlt
YWtlYXJndigmYnVmMFtzZWFyY2hfbGVuKzFdLCAmQVJHQywgJkFSR1YpOwogCQkJCQkJaWYgKEFS
R0MgPiAwKSB7Ci0JCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIEFSR0MsIEFSR1YpOworCQkJ
CQkJCXF1c2VfZGVzY3JpYmVfZmxhZygxLCByZXBvLCByZXBvX3NlYXJjaCwgQVJHQywgQVJHVik7
CiAJCQkJCQkJZm9yIChpID0gMDsgaSA8IEFSR0M7IGkrKykKIAkJCQkJCQkJZnJlZShBUkdWW2ld
KTsKIAkJCQkJCQlmcmVlKEFSR1YpOwo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101723</attachid>
            <date>2006-11-12 04:10 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9tYWluLmMgcG9ydGFnZS11dGlscy0y
MDA2MTExMS5uZXcvbWFpbi5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL21haW4uYwkyMDA2
LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTEx
MS5uZXcvbWFpbi5jCTIwMDYtMTEtMTMgMTk6MjA6MjguNjc4ODUxNzExICswMTAwCkBAIC03MSw2
ICs3MSw3IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRp
YyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2
b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7
CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAg
LTg1LDEzICs4NiwyMSBAQCBzdGF0aWMgaW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRl
bmQgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwotc3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0g
PSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwogc3RhdGlj
IGNoYXIgcG9ydHZkYltdID0gInZhci9kYi9wa2ciOwogc3RhdGljIGNoYXIgcG9ydGNhY2hlZGly
W10gPSAibWV0YWRhdGEvY2FjaGUiOwogc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhd
ID0gIi8iOwogc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMv
IjsKIAordHlwZWRlZiBzdHJ1Y3Qgb3ZlcmxheV90IG92ZXJsYXlfdDsKK3N0cnVjdCBvdmVybGF5
X3QgeworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwYXRoW19RX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qg
b3ZlcmxheV90ICpuZXh0OworfTsKKworc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50b28g
PSBOVUxMOworCiBjaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8iOwog
Y2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKIApAQCAtMjAxLDEw
ICsyMTAsMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTQ2OSwxNyArNDc4LDc5IEBAIGNoYXIgKnN0cmluY3JfdmFyKGNvbnN0IGNoYXIgKm5hbWUs
IGNoYXIKIAlyZXR1cm4gKGNoYXIgKikgdmFsdWU7CiB9CiAKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVy
bGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSkKK3sKKwlzaG9ydCBtZXJyb3IgPSAwOworCWNo
YXIgYnVmW0JVRlNJWkVdLCBmaWxlW19RX1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKKwlvdmVybGF5
X3QgKmN1cl9vdmVybGF5OworCUZJTEUgKnJlcG9fbmFtZUZQOworCXMgPSBwb3J0ZGlyX292ZXJs
YXk7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKworCXdoaWxlICgqcykgeworCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiAoKmN1cl9vdmVybGF5LT5uZXh0KSk7
CisJCWN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQ7CisJCWN1cl9vdmVybGF5LT5uZXh0
ID0gTlVMTDsKKworCQlpZiAoKHA9c3RyY2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc3Ry
bmNweShjdXJfb3ZlcmxheS0+cGF0aCwgcywgc2l6ZW9mKGN1cl9vdmVybGF5LT5wYXRoKSk7CisK
KwkJLyogZmluZCB0aGUgbmFtZSBmb3IgdGhlIG92ZXJsYXkgKi8KKwkJc3RybmNweShmaWxlLCBj
dXJfb3ZlcmxheS0+cGF0aCwgX1FfUEFUSF9NQVgpOworCQlzdHJuY2F0KGZpbGUsICIvcHJvZmls
ZXMvcmVwb19uYW1lIiwgX1FfUEFUSF9NQVgpOworCQlpZiAoKHJlcG9fbmFtZUZQID0gZm9wZW4o
ZmlsZSwgInIiKSkpCisJCXsKKwkJCWlmICghKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZikscmVwb19u
YW1lRlApKSkKKwkJCQltZXJyb3IrKzsKKworCQkJcm1zcGFjZShidWYpOworCQkJaWYgKCh0ID0g
c3RyY2hyKGJ1ZiwnXG4nKSkpCisJCQkJKnQgPSAwOworCisJCQlzdHJuY3B5KGN1cl9vdmVybGF5
LT5uYW1lLCBidWYsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpOworCisJCQlmY2xvc2UocmVw
b19uYW1lRlApOworCisJCX0gZWxzZQorCQkJbWVycm9yKys7CisKKwkJaWYgKG1lcnJvcikgewor
CQkJLyogZGVsZXRlIHRyYWlsaW5nICcvJyAqLworCQkJdCA9IGN1cl9vdmVybGF5LT5wYXRoICsg
c3RybGVuKGN1cl9vdmVybGF5LT5wYXRoKSAtIDE7CisJCQlpZiAoKnQgPT0gJy8nKQorCQkJCSp0
ID0gMDsKKworCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYmFzZW5hbWUoY3VyX292ZXJs
YXktPnBhdGgpLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKTsKKwkJCW1lcnJvcj0wOworCQl9
CisKKwkJaWYgKHApCisJCQlzID0gcCsxOworCQllbHNlCisJCQlicmVhazsKKwl9CisKK30KKwor
CiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIHsKIAljaGFyIG5vY29sb3IgPSAw
OwogCWludCBpLCBmOwogCXN0cnVjdCBzdGF0IHN0OwogCUZJTEUgKmZwOworCWNoYXIgdG1wX3Bv
cnRkaXJbX1FfUEFUSF9NQVhdOworCWNoYXIgcG9ydGRpcl9vdmVybGF5WzIwNDhdID0gIiI7CisK
IAljaGFyIGJ1ZltCVUZTSVpFXSwgKnMsICpwOwogCiAJY2hhciBwcm9maWxlW19RX1BBVEhfTUFY
XSwgcG9ydGFnZV9maWxlW19RX1BBVEhfTUFYXTsKKwogCWNvbnN0IGNoYXIgKmZpbGVzW10gPSB7
cG9ydGFnZV9maWxlLCAiL2V0Yy9tYWtlLmdsb2JhbHMiLCAiL2V0Yy9tYWtlLmNvbmYifTsKIAl0
eXBlZGVmIGVudW0geyBfUV9CT09MLCBfUV9TVFIsIF9RX0lTVFIgfSB2YXJfdHlwZXM7CisKIAlz
dHJ1Y3QgewogCQljb25zdCBjaGFyICpuYW1lOwogCQljb25zdCBzaXplX3QgbmFtZV9sZW47CkBA
IC00OTMsMTMgKzU2NCwxOSBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJ
eyJDT05GSUdfUFJPVEVDVCIsICAgMTQsIF9RX1NUUiwgIGNvbmZpZ19wcm90ZWN0LCBzaXplb2Yo
Y29uZmlnX3Byb3RlY3QpfSwKIAkJeyJOT0NPTE9SIiwgICAgICAgICAgIDcsIF9RX0JPT0wsICZu
b2NvbG9yLCAgICAgICAxfSwKIAkJeyJGRUFUVVJFUyIsICAgICAgICAgIDgsIF9RX0lTVFIsIGZl
YXR1cmVzLCAgICAgICBzaXplb2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgICAgICAgICAg
IDcsIF9RX1NUUiwgIHBvcnRkaXIsICAgICAgICBzaXplb2YocG9ydGRpcil9LAorCQl7IlBPUlRE
SVIiLCAgICAgICAgICAgNywgX1FfU1RSLCAgdG1wX3BvcnRkaXIsICAgIHNpemVvZih0bXBfcG9y
dGRpcil9LAorCQl7IlBPUlRESVJfT1ZFUkxBWSIsICAxNSwgX1FfSVNUUiwgcG9ydGRpcl9vdmVy
bGF5LHNpemVvZihwb3J0ZGlyX292ZXJsYXkpfSwKIAkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgMTUs
IF9RX1NUUiwgIGJpbmhvc3QsICAgICAgICBzaXplb2YoYmluaG9zdCl9LAogCQl7IlBPUlRBR0Vf
VE1QRElSIiwgICAxNCwgX1FfU1RSLCAgcG9ydF90bXBkaXIsICAgIHNpemVvZihwb3J0X3RtcGRp
cil9LAogCQl7IlBLR0RJUiIsICAgICAgICAgICAgNiwgX1FfU1RSLCAgcGtnZGlyLCAgICAgICAg
IHNpemVvZihwa2dkaXIpfSwKIAkJeyJST09UIiwgICAgICAgICAgICAgIDQsIF9RX1NUUiwgIHBv
cnRyb290LCAgICAgICBzaXplb2YocG9ydHJvb3QpfQogCX07CiAKKwlvdmVybGF5X2dlbnRvbyA9
IHhtYWxsb2Moc2l6ZW9mKCpvdmVybGF5X2dlbnRvbykpOworCXN0cmNweShvdmVybGF5X2dlbnRv
by0+bmFtZSwiZ2VudG9vIik7CisJc3RyY3B5KG92ZXJsYXlfZ2VudG9vLT5wYXRoLCIvdXNyL3Bv
cnRhZ2UiKTsKKwlvdmVybGF5X2dlbnRvby0+bmV4dCA9IE5VTEw7CisKIAlpZiAoKHAgPSBzdHJj
aHIocG9ydHJvb3QsICcvJykpICE9IE5VTEwpCiAJCWlmIChzdHJsZW4ocCkgIT0gMSkKIAkJCXN0
cm5jYXQocG9ydHJvb3QsICIvIiwgc2l6ZW9mKHBvcnRyb290KSk7CkBAIC01OTEsNiArNjY4LDEz
IEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lkKQogCQlub19jb2xvcnMoKTsKIAll
bHNlCiAJCWNvbG9yX3JlbWFwKCk7CisKKworCXN0cm5jcHkob3ZlcmxheV9nZW50b28tPnBhdGgs
IHRtcF9wb3J0ZGlyLCBzaXplb2Yob3ZlcmxheV9nZW50b28tPnBhdGgpKTsKKworCS8qIG5vdyB3
ZSBpbml0aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQgbGlzdCB3aXRoIG92ZXJsYXlfZ2VudG9v
IGFzIHRoZSBmaXJzdCAnaXRlbScgICovCisJaW5pdGlhbGl6ZV9vdmVybGF5cyhwb3J0ZGlyX292
ZXJsYXkpOworCiB9CiAKIGVudW0gewpAQCAtNjE5LDE5ICs3MDMsMjEgQEAgY29uc3QgY2hhciAq
aW5pdGlhbGl6ZV9mbGF0KGludCBjYWNoZV90eQogCWludCBhLCBiLCBjLCBkLCBlLCBpOwogCWlu
dCBmcmFjLCBzZWNzLCBjb3VudDsKIAlGSUxFICpmcDsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5
OwogCiAJYSA9IGIgPSBjID0gZCA9IGUgPSBpID0gMDsKIAljb3VudCA9IGZyYWMgPSBzZWNzID0g
MDsKKwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOwogCiAJY2FjaGVfZmlsZSA9IChjYWNo
ZV90eXBlID09IENBQ0hFX0VCVUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURB
VEFfRklMRSk7CiAKLQlpZiAoY2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgiY2hkaXIg
dG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmIChjaGRpcihvdmVybGF5X2dl
bnRvby0+cGF0aCkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxl
ZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKGNhY2hl
X3R5cGUgPT0gQ0FDSEVfTUVUQURBVEEgJiYgY2hkaXIocG9ydGNhY2hlZGlyKSAhPSAwKSB7Ci0J
CXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycgZmFpbGVkIiwgcG9ydGRpciwg
cG9ydGNhY2hlZGlyKTsKKwkJd2FybnAoImNoZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVzLyVzJyBm
YWlsZWQiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgcG9ydGNhY2hlZGlyKTsKIAkJZ290byByZXQ7
CiAJfQogCkBAIC02NDcsNjQgKzczMyw3MSBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQo
aW50IGNhY2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9IEVOT0VO
VCkgewotCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNhY2hl
X2ZpbGUpOworCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2Vu
dG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKChmcCA9IGZv
cGVuKGNhY2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5nICclcy8l
cycgZmFpbGVkIiwgcG9ydGRpciwgY2FjaGVfZmlsZSk7CisJCXdhcm5mcCgib3BlbmluZyAnJXMv
JXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byBy
ZXQ7CiAJfQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAKLQlpZiAoKGEgPSBzY2Fu
ZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCi0JCWdv
dG8gcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewotCQlzdGF0KGNhdGVnb3J5W2ld
LT5kX25hbWUsICZzdCk7Ci0JCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCWNvbnRpbnVl
OwotCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICctJykgPT0gTlVMTCkKLQkJCWlm
ICgoc3RybmNtcChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAidmlydHVhbCIsIDcpKSAhPSAwKQorCWRv
IHsKKwkJaWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vIHx8IGNoZGlyKGN1cl9vdmVy
bGF5LT5wYXRoKSA9PSAwKSB7CisJCQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBm
aWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCiAJCQkJY29udGludWU7CiAKLQkJaWYgKChi
ID0gc2NhbmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4sIGFscGhh
c29ydCkpIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGMgPSAwOyBjIDwgYjsgYysrKSB7Ci0J
CQljaGFyIGRlW19RX1BBVEhfTUFYXTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKKwkJ
CQlzdGF0KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7CisJCQkJaWYgKCFTX0lTRElSKHN0LnN0
X21vZGUpKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25h
bWUsICctJykgPT0gTlVMTCkKKwkJCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ldLT5kX25hbWUs
ICJ2aXJ0dWFsIiwgNykpICE9IDApCisJCQkJCQljb250aW51ZTsKIAotCQkJc25wcmludGYoZGUs
IHNpemVvZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUp
OworCQkJCWlmICgoYiA9IHNjYW5kaXIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnBuLCBmaWx0ZXJf
aGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoYyA9IDA7
IGMgPCBiOyBjKyspIHsKKwkJCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJCWlmIChzdGF0
KGRlLCAmc3QpIDwgMCkKLQkJCQljb250aW51ZTsKKwkJCQkJc25wcmludGYoZGUsIHNpemVvZihk
ZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUpOwogCi0JCQlz
d2l0Y2ggKGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJVSUxEOgotCQkJCWlmICghU19J
U0RJUihzdC5zdF9tb2RlKSkKLQkJCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENB
Q0hFX01FVEFEQVRBOgotCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJCQlmcHJpbnRm
KGZwLCAiJXNcbiIsIGRlKTsKLQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlm
ICgoZSA9IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQot
CQkJCWNvbnRpbnVlOwotCQkJZm9yIChkID0gMDsgZCA8IGU7IGQrKykgewotCQkJCWlmICgocCA9
IHN0cnJjaHIoZWJbZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKLQkJCQkJaWYgKHN0cmNtcChw
LCAiLmVidWlsZCIpID09IDApIHsKLQkJCQkJCWNvdW50Kys7Ci0JCQkJCQlmcHJpbnRmKGZwLCAi
JXMvJXMvJXNcbiIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5k
X25hbWUpOworCQkJCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCisJCQkJCQljb250aW51ZTsKKwor
CQkJCQlzd2l0Y2ggKGNhY2hlX3R5cGUpIHsKKwkJCQkJY2FzZSBDQUNIRV9FQlVJTEQ6CisJCQkJ
CQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJCQkJY29udGludWU7CisJCQkJCQlicmVh
azsKKwkJCQkJY2FzZSBDQUNIRV9NRVRBREFUQToKKwkJCQkJCWlmIChTX0lTUkVHKHN0LnN0X21v
ZGUpKQorCQkJCQkJCWZwcmludGYoZnAsICIlc1xuIiwgZGUpOworCQkJCQkJY29udGludWU7CisJ
CQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoKGUgPSBzY2FuZGlyKGRlLCAmZWIsIGZpbHRl
cl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlmb3IgKGQg
PSAwOyBkIDwgZTsgZCsrKSB7CisJCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUs
ICcuJykpICE9IE5VTEwpCisJCQkJCQkJaWYgKHN0cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsK
KwkJCQkJCQkJY291bnQrKzsKKwkJCQkJCQkJZnByaW50ZihmcCwgIiVzOjolcy8lcy8lc1xuIiwg
Y3VyX292ZXJsYXktPm5hbWUsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGVi
W2RdLT5kX25hbWUpOworCQkJCQkJCX0KIAkJCQkJfQorCQkJCQl3aGlsZSAoZC0tKSBmcmVlKGVi
W2RdKTsKKwkJCQkJZnJlZShlYik7CisJCQkJfQorCQkJCXdoaWxlIChiLS0pIGZyZWUocG5bYl0p
OworCQkJCWZyZWUocG4pOwogCQkJfQotCQkJd2hpbGUgKGQtLSkgZnJlZShlYltkXSk7Ci0JCQlm
cmVlKGViKTsKLQkJfQotCQl3aGlsZSAoYi0tKSBmcmVlKHBuW2JdKTsKLQkJZnJlZShwbik7Ci0J
fQorCQl9IGVsc2UKKwkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZhaWxlZCwgc2tpcHBpbmcgdGhl
ICVzIHJlcG9zaXRvcnkiLCBjdXJfb3ZlcmxheS0+cGF0aCwgY3VyX292ZXJsYXktPm5hbWUpOwor
CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQpKTsKKwogCWZjbG9z
ZShmcCk7CiAJd2hpbGUgKGEtLSkgZnJlZShjYXRlZ29yeVthXSk7CiAJZnJlZShjYXRlZ29yeSk7
CkBAIC03MjMsNyArODE2LDcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNo
ZV90eQogCiAJd2FybigiRmluaXNoZWQgJXUgZW50cmllcyBpbiAlZC4lMDZkIHNlY29uZHMiLCBj
b3VudCwgc2VjcywgZnJhYyk7CiAJaWYgKHNlY3MgPiAxMDApCi0JCXdhcm4oIllvdSBzaG91bGQg
Y29uc2lkZXIgYSBmYXN0ZXIgZmlsZSBzeXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJ
Uj0nJXMnIiwgcG9ydGRpcik7CisJCXdhcm4oIllvdSBzaG91bGQgY29uc2lkZXIgYSBmYXN0ZXIg
ZmlsZSBzeXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJUj0nJXMnIiwgb3ZlcmxheV9n
ZW50b28tPnBhdGgpOwogcmV0OgogCXJldHVybiBjYWNoZV9maWxlOwogfQpAQCAtNzMyLDggKzgy
NSw4IEBAIHJldDoKIAogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCkKIHsKLQlp
ZiAoKGNoZGlyKHBvcnRkaXIpKSAhPSAwKSB7Ci0JCXdhcm5wKCJjaGRpciB0byBQT1JURElSICcl
cycgZmFpbGVkIiwgcG9ydGRpcik7CisJaWYgKChjaGRpcihvdmVybGF5X2dlbnRvby0+cGF0aCkp
ICE9IDApIHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBvdmVybGF5
X2dlbnRvby0+cGF0aCk7CiAJCXJldHVybjsKIAl9CiAJdW5saW5rKENBQ0hFX0VCVUlMRF9GSUxF
KTsKQEAgLTEwMDYsMTAgKzEwOTksMjAgQEAgZnVja2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8q
IGZyZWUgb3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9vdmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkp
Owordm9pZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlfdCAqb3ZlcmxheSkKK3sKKwlpZiAob3Zlcmxh
eS0+bmV4dCkKKwkJZnJlZV9vdmVybGF5cyhvdmVybGF5LT5uZXh0KTsKKwlmcmVlKG92ZXJsYXkp
OworfQorCiB2b2lkIGNsZWFudXAoKQogewogCXJlaW5pdGlhbGl6ZV9hc19uZWVkZWQoKTsKIAlm
cmVlX3NldHModmlydHVhbHMpOworCWZyZWVfb3ZlcmxheXMob3ZlcmxheV9nZW50b28pOwogCWZj
bG9zZShzdGRlcnIpOwogfQogCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcS5j
IHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3EuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTEx
MS9xLmMJMjAwNi0xMS0xMSAyMzozNzoyMC4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRp
bHMtMjAwNjExMTEubmV3L3EuYwkyMDA2LTExLTEzIDE4OjIxOjE4LjcyNTUyNjY0NyArMDEwMApA
QCAtNywxNSArNywxNyBAQAogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdlciAg
LSA8dmFwaWVyQGdlbnRvby5vcmc+CiAgKi8KIAotI2RlZmluZSBRX0ZMQUdTICJpcm0iIENPTU1P
Tl9GTEFHUworI2RlZmluZSBRX0ZMQUdTICJpbHJtIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1
Y3Qgb3B0aW9uIGNvbnN0IHFfbG9uZ19vcHRzW10gPSB7CiAJeyJpbnN0YWxsIiwgICAgICBub19h
cmd1bWVudCwgTlVMTCwgJ2knfSwKKwl7ImxzLW92ZXJsYXlzIiwgIG5vX2FyZ3VtZW50LCBOVUxM
LCAnbCd9LAogCXsicmVpbml0aWFsaXplIiwgbm9fYXJndW1lbnQsIE5VTEwsICdyJ30sCiAJeyJt
ZXRhY2FjaGUiLCAgICBub19hcmd1bWVudCwgTlVMTCwgJ20nfSwKIAlDT01NT05fTE9OR19PUFRT
CiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnFfb3B0c19oZWxwW10gPSB7CiAJIkluc3RhbGwgc3lt
bGlua3MgZm9yIGFwcGxldHMiLAorCSJMaXN0IGNvbmZpZ3VyZWQgb3ZlcmxheXMiLAogCSJSZWlu
aXRpYWxpemUgZWJ1aWxkIGNhY2hlIiwKIAkiUmVpbml0aWFsaXplIG1ldGFkYXRhIGNhY2hlIiwK
IAlDT01NT05fT1BUU19IRUxQCkBAIC03MCw2ICs3Miw3IEBAIGludCBxX21haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQogCWludCBpOwogCWNoYXIgKnA7CiAJQVBQTEVUIGZ1bmM7CisJb3Zlcmxh
eV90ICogY3VyX292ZXJsYXk7CiAKIAlpZiAoYXJnYyA9PSAwKQogCQlyZXR1cm4gMTsKQEAgLTg5
LDYgKzkyLDE1IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05f
R0VUT1BUU19DQVNFUyhxKQogCQljYXNlICdtJzogcmVpbml0aWFsaXplX21ldGFjYWNoZSA9IDE7
IGJyZWFrOwogCQljYXNlICdyJzogcmVpbml0aWFsaXplID0gMTsgYnJlYWs7CisJCWNhc2UgJ2wn
OiB7CisJCQlwcmludGYoIlxuJXNPdmVybGF5KHMpIDolc1xuXG4iLCBHUkVFTiwgTk9STSk7CisJ
CQljdXJfb3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKKwkJCWRvIHsKKwkJCQlwcmludGYoIiAgIE5h
bWUgOiAlcyUtMjAuMjBzJXMgXHRsb2NhdGlvbiA6ICVzJXMlc1xuIiwgQ1lBTiwgY3VyX292ZXJs
YXktPm5hbWUsIE5PUk0sIENZQU4sIGN1cl9vdmVybGF5LT5wYXRoLCBOT1JNKTsKKwkJCX0gd2hp
bGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQkJZnB1dGMoJ1xuJywgc3Rk
b3V0KTsKKwkJCXJldHVybiAwOworCQkJfQogCQljYXNlICdpJzogewogCQkJY2hhciBidWZbX1Ff
UEFUSF9NQVhdOwogCQkJLyogYWx3YXlzIGJ6ZXJvIGEgYnVmZmVyIGJlZm9yZSB1c2luZyByZWFk
bGluaygpICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcWNhY2hlLmMgcG9y
dGFnZS11dGlscy0yMDA2MTExMS5uZXcvcWNhY2hlLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjEx
MTEvcWNhY2hlLmMJMjAwNi0xMS0xMSAyMzozNzoyMC4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRh
Z2UtdXRpbHMtMjAwNjExMTEubmV3L3FjYWNoZS5jCTIwMDYtMTEtMTMgMTg6MjE6MTguNzQ4NTIz
MTUwICswMTAwCkBAIC01MTIsMTAgKzUxMiwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQg
KCpmdW5jKShxY2FjaGVfCiAJaW50IGksIGosIGssIGxlbiwgbnVtX2NhdCwgbnVtX3BrZywgbnVt
X2VidWlsZDsKIAlzdHJ1Y3QgZGlyZWN0ICoqY2F0ZWdvcmllcywgKipwYWNrYWdlcywgKiplYnVp
bGRzOwogCi0JbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxl
bihwb3J0ZGlyKSArIDEpOworCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VE
QikgKyBzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgMSk7CiAJY2F0cGF0aCA9IHhtYWxs
b2MobGVuKTsKIAltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQlzbnByaW50ZihjYXRwYXRoLCBs
ZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgcG9ydGRpcik7CisJc25wcmludGYoY2F0cGF0aCwgbGVu
LCAiJXMlcyIsIFFDQUNIRV9FREIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAogCWlmICgtMSA9
PSAobnVtX2NhdCA9IHNjYW5kaXIoY2F0cGF0aCwgJmNhdGVnb3JpZXMsIHFjYWNoZV9maWxlX3Nl
bGVjdCwgYWxwaGFzb3J0KSkpIHsKIAkJZXJyKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVy
cm5vKSk7CkBAIC01MjcsMTAgKzUyNywxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpm
dW5jKShxY2FjaGVfCiAKIAkvKiB0cmF2ZXJzZSBjYXRlZ29yaWVzICovCiAJZm9yIChpID0gMDsg
aSA8IG51bV9jYXQ7IGkrKykgewotCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKHBvcnRk
aXIpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIDEpOwor
CQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0
cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyAxKTsKIAkJcGtncGF0
aCA9IHhtYWxsb2MobGVuKTsKIAkJbWVtc2V0KHBrZ3BhdGgsIDAsIGxlbik7Ci0JCXNucHJpbnRm
KHBrZ3BhdGgsIGxlbiwgIiVzLyVzIiwgcG9ydGRpciwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsK
KwkJc25wcmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwg
Y2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKIAogCQlpZiAoLTEgPT0gKG51bV9wa2cgPSBzY2FuZGly
KHBrZ3BhdGgsICZwYWNrYWdlcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewog
CQkJd2FybigiJXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNTUyLDEwICs1
NTIsMTAgQEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYykocWNhY2hlXwogCiAJCS8q
IHRyYXZlcnNlIHBhY2thZ2VzICovCiAJCWZvciAoaiA9IDA7IGogPCBudW1fcGtnOyBqKyspIHsK
LQkJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi8iKSAr
IHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBzdHJsZW4ocGFj
a2FnZXNbal0tPmRfbmFtZSkgKyAxKTsKKwkJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4o
b3ZlcmxheV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tp
XS0+ZF9uYW1lKSArIHN0cmxlbigiLyIpICsgc3RybGVuKHBhY2thZ2VzW2pdLT5kX25hbWUpICsg
MSk7CiAJCQllYnVpbGRwYXRoID0geG1hbGxvYyhsZW4pOwogCQkJbWVtc2V0KGVidWlsZHBhdGgs
IDAsIGxlbik7Ci0JCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIHBvcnRk
aXIsIGNhdGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRfbmFtZSk7CisJCQlzbnBy
aW50ZihlYnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBj
YXRlZ29yaWVzW2ldLT5kX25hbWUsIHBhY2thZ2VzW2pdLT5kX25hbWUpOwogCiAJCQlpZiAoLTEg
PT0gKG51bV9lYnVpbGQgPSBzY2FuZGlyKGVidWlsZHBhdGgsICZlYnVpbGRzLCBxY2FjaGVfZWJ1
aWxkX3NlbGVjdCwgcWNhY2hlX3ZlcmNtcCkpKSB7CiAJCQkJd2FybigiJXMgJXMiLCBlYnVpbGRw
YXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNzczLDEwICs3NzMsMTAgQEAgdm9pZCBxY2FjaGVf
c3RhdHMocWNhY2hlX2RhdGEgKmRhdGEpCiAJCWZvciAoaSA9IDA7IGFyY2hsaXN0W2ldOyBpKysp
CiAJCQlhcmNoaXRlY3R1cmVzKys7CiAKLQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihR
Q0FDSEVfRURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikg
KiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIDEp
OwogCQljYXRwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsK
LQkJc25wcmludGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9FREIsIHBvcnRkaXIpOwor
CQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgb3ZlcmxheV9nZW50
b28tPnBhdGgpOwogCiAJCWlmICgtMSA9PSAobnVtY2F0ID0gc2NhbmRpcihjYXRwYXRoLCAmY2F0
ZWdvcmllcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQkJZXJyKCIlcyAl
cyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC05MjgsMTEgKzkyOCwxMSBAQCBpbnQg
cWNhY2hlX2luaXQoKQogCWNoYXIgKmZpbGVuYW1lOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQls
ZW4gICAgICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi9wcm9m
aWxlcy9hcmNoLmxpc3QiKSArIDEpOworCWxlbiAgICAgID0gc2l6ZW9mKGNoYXIpICogKHN0cmxl
bihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi9wcm9maWxlcy9hcmNoLmxpc3QiKSAr
IDEpOwogCWZpbGVuYW1lID0geG1hbGxvYyhsZW4pOwogCiAJbWVtc2V0KGZpbGVuYW1lLCAwLCBs
ZW4pOwotCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxlcy9hcmNoLmxpc3QiLCBw
b3J0ZGlyKTsKKwlzbnByaW50ZihmaWxlbmFtZSwgbGVuLCAiJXMvcHJvZmlsZXMvYXJjaC5saXN0
Iiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCiAJaWYgKE5VTEwgPT0gKGFyY2hsaXN0ID0gcWNh
Y2hlX3JlYWRfbGluZXMoZmlsZW5hbWUpKSkgewogCQlmcmVlKGZpbGVuYW1lKTsKZGlmZiAtTmFy
dXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9xZ3JlcC5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEu
bmV3L3FncmVwLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcWdyZXAuYwkyMDA2LTExLTEx
IDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcv
cWdyZXAuYwkyMDA2LTExLTEzIDE5OjIxOjU3LjY1MTMyNTgzOSArMDEwMApAQCAtMTAsMTEgKzEw
LDEyIEBACiAKICNpZmRlZiBBUFBMRVRfcWdyZXAKIAotI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlI
Y2UiIENPTU1PTl9GTEFHUworI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIbzpjZSIgQ09NTU9OX0ZM
QUdTCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxZ3JlcF9sb25nX29wdHNbXSA9IHsKIAl7
ImludmVydC1tYXRjaCIsICBub19hcmd1bWVudCwgTlVMTCwgJ0knfSwKIAl7Imlnbm9yZS1jYXNl
IiwgICBub19hcmd1bWVudCwgTlVMTCwgJ2knfSwKIAl7IndpdGgtZmlsZW5hbWUiLCBub19hcmd1
bWVudCwgTlVMTCwgJ0gnfSwKKwl7Im92ZXJsYXkiLCAgICAgICAgYV9hcmd1bWVudCwgTlVMTCwg
J28nfSwKIAl7ImNvdW50IiwgICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKIAl7InJl
Z2V4cCIsICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAlDT01NT05fTE9OR19PUFRT
CkBAIC0yMyw2ICsyNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxZ3JlcF9vcHRzX2hlbHBbXSA9
IHsKIAkiU2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcyIsCiAJIklnbm9yZSBjYXNlIGRpc3RpbmN0
aW9ucyIsCiAJIlByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBtYXRjaCIsCisJIk9ubHkgY29u
c2lkZXIgdGhlIDxhcmc+IG92ZXJsYXkiLAogCSJPbmx5IHByaW50IGEgY291bnQgb2YgbWF0Y2hp
bmcgbGluZXMgcGVyIEZJTEUiLAogCSJVc2UgUEFUVEVSTiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lv
biIsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtMzQsNyArMzYsOSBAQCBpbnQgcWdyZXBfbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJaW50IGNvdW50ID0gMDsKLQljaGFy
ICpwOworCXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsKKwljaGFyIG92ZXJsYXlfbmFtZVs2
NF0sIHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyICpwLCAqc3RyOwogCWNoYXIgZG9fY291bnQsIGRv
X3JlZ2V4OwogCWNoYXIgc2hvd19maWxlbmFtZTsKIAlGSUxFICpmcDsKQEAgLTQyLDEwICs0Niwx
NSBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhciBidWYwW0JV
RlNJWl07CiAJaW50IHJlZmxhZ3MgPSBSRUdfTk9TVUI7CiAJY2hhciBpbnZlcnRfbWF0Y2ggPSAw
OworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3RtcDsKIAogCXR5cGVkZWYgY2hh
ciAqKCpGVU5DKSAoY2hhciAqLCBjaGFyICopOwogCUZVTkMgc3RyZnVuYyA9IChGVU5DKSBzdHJz
dHI7CiAKKwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9
IDA7CisJcmVwb19zZWFyY2hbMF0gPSAwOworCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJn
dlsxXT0lcyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxM
PyIpOwogCkBAIC01OCwxMiArNjcsMjYgQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCQkJc3RyZnVuYyA9IChGVU5DKSBzdHJjYXNlc3RyOwogCQkJcmVmbGFncyB8PSBS
RUdfSUNBU0U7CiAJCQlicmVhazsKKwkJY2FzZSAnSCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVh
azsKKwkJY2FzZSAnbyc6CisJCQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19zZWFyY2gsIG9w
dGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IGRvX2Nv
dW50ID0gMTsgYnJlYWs7CiAJCWNhc2UgJ2UnOiBkb19yZWdleCA9IDE7IGJyZWFrOwotCQljYXNl
ICdIJzogc2hvd19maWxlbmFtZSA9IDE7IGJyZWFrOwogCQlDT01NT05fR0VUT1BUU19DQVNFUyhx
Z3JlcCkKIAkJfQogCX0KKworCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghc3RybmNtcChj
dXJfb3ZlcmxheS0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkp
KQorCQkJCWJyZWFrOworCQl9IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQp
KTsKKwkJaWYgKE5VTEwgPT0gY3VyX292ZXJsYXkpCisJCQllcnIoIiVzIDogVW5rbm93biBvdmVy
bGF5LCB0cnkgJ3EgLS1scy1vdmVybGF5cyciLCByZXBvX3NlYXJjaCk7CisJfQorCiAJaWYgKGFy
Z2MgPT0gb3B0aW5kKQogCQlxZ3JlcF91c2FnZShFWElUX0ZBSUxVUkUpOwogCkBAIC03Myw2ICs5
Niw0MiBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJldHVybiAx
OwogCXdoaWxlICgoZmdldHMoZWJ1aWxkLCBzaXplb2YoZWJ1aWxkKSwgZnApKSAhPSBOVUxMKSB7
CiAJCUZJTEUgKm5ld2ZwOworCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJewor
CQkJKnAgPSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQlw
ID0gZWJ1aWxkOworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCwgc2l6ZW9m
KHJlcG9fc2VhcmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChvdmVybGF5X25h
bWUsIHAsIHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlf
Z2VudG9vOworCQkJCWRvIHsKKwkJCQkJaWYgKCFzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBw
LCBzaXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0gd2hpbGUg
KChvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCQkJCWlmIChvdmVybGF5X3RtcCkg
eworCQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292
ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycg
ZmFpbGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJ
CQkJfSBlbHNlCisJCQkJCW15ZXJyb3I9MTsKKworCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBw
LCBzaXplb2Yob3ZlcmxheV9uYW1lKSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOwor
CQl9IGVsc2UKKwkJCW15ZXJyb3I9MTsKKworCQlpZiAobXllcnJvcikgeworCQkJaWYgKCFyZWlu
aXRpYWxpemUpCisJCQkJd2FybmYoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMgOiBVbmtub3du
IG92ZXJsYXkiLCBvdmVybGF5X25hbWUpOworCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCW15ZXJy
b3I9MDsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJ1xu
JykpICE9IE5VTEwpCiAJCQkqcCA9IDA7CiAJCWlmICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJy
IikpICE9IE5VTEwpIHsKQEAgLTEwMiw3ICsxNjEsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YpCiAJCQkJY291bnQrKzsKIAkJCQlpZiAoZG9fY291bnQpIGNvbnRpbnVl
OwogCQkJCWlmICh2ZXJib3NlIHx8IHNob3dfZmlsZW5hbWUpIHsKLQkJCQkJcHJpbnRmKCIlczoi
LCBlYnVpbGQpOworCQkJCQlwcmludGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1
aWxkKTsKIAkJCQkJaWYgKHZlcmJvc2UgPiAxKSBwcmludGYoIiVkOiIsIGxpbmVubyk7CiAJCQkJ
CXByaW50ZigiICIpOwogCQkJCX0KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9x
c2VhcmNoLmMgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcXNlYXJjaC5jCi0tLSBwb3J0YWdl
LXV0aWxzLTIwMDYxMTExL3FzZWFyY2guYwkyMDA2LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCAr
MDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcXNlYXJjaC5jCTIwMDYtMTEtMTMg
MTk6MjE6NDkuMzg2NTgyMjcxICswMTAwCkBAIC05LDEwICs5LDEyIEBACiAKICNpZmRlZiBBUFBM
RVRfcXNlYXJjaAogCi0jZGVmaW5lIFFTRUFSQ0hfRkxBR1MgImFjc1NOSCIgQ09NTU9OX0ZMQUdT
CisjZGVmaW5lIFFTRUFSQ0hfRkxBR1MgImFjbzpwc1NOSCIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMg
c3RydWN0IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfb3B0c1tdID0gewogCXsiYWxsIiwgICAg
ICAgbm9fYXJndW1lbnQsIE5VTEwsICdhJ30sCiAJeyJjYWNoZSIsICAgICBub19hcmd1bWVudCwg
TlVMTCwgJ2MnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAorCXsi
c2hvdy1wYXRoIiwgbm9fYXJndW1lbnQsIE5VTEwsICdwJ30sCiAJeyJzZWFyY2giLCAgICBub19h
cmd1bWVudCwgTlVMTCwgJ3MnfSwKIAl7ImRlc2MiLCAgICAgICBhX2FyZ3VtZW50LCBOVUxMLCAn
Uyd9LAogCXsibmFtZS1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdOJ30sCkBAIC0yMiw2ICsy
NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFzZWFyY2hfbG9uZ18KIHN0YXRpYyBj
b25zdCBjaGFyICpxc2VhcmNoX29wdHNfaGVscFtdID0gewogCSJMaXN0IHRoZSBkZXNjcmlwdGlv
bnMgb2YgZXZlcnkgcGFja2FnZSBpbiB0aGUgY2FjaGUiLAogCSJVc2UgdGhlIHBvcnRhZ2UgY2Fj
aGUiLAorCSJTZWFyY2ggb25seSBpbiB0aGUgPGFyZz4gb3ZlcmxheSIsCisJIlNob3cgdGhlIHBh
dGggdG8gdGhlIGVidWlsZCIsCiAJIlJlZ2V4IHNlYXJjaCBwYWNrYWdlIGJhc2VuYW1lcyIsCiAJ
IlJlZ2V4IHNlYXJjaCBwYWNrYWdlIGRlc2NyaXB0aW9ucyIsCiAJIk9ubHkgc2hvdyBwYWNrYWdl
IG5hbWUiLApAQCAtNDAsMTMgKzQ0LDIwIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCWNoYXIgbGFzdFsxMjZdID0gIiI7CiAJY2hhciBkcFsxMjZdID0gIiI7CiAJ
Y2hhciBicFsxMjZdID0gIiI7Ci0JY2hhciAqcCwgKnEsICpzdHI7CisJc2hvcnQgcmVwbyA9IDA7
CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hhciAqcCwgKnEsICpzdHIsIG92ZXJsYXlfbmFt
ZVs2NF07CiAJY2hhciAqc2VhcmNoX21lID0gTlVMTDsKLQljaGFyIHNob3dfaG9tZXBhZ2UgPSAw
LCBzaG93X25hbWVfb25seSA9IDA7CisJY2hhciBzaG93X2hvbWVwYWdlID0gMCwgc2hvd19uYW1l
X29ubHkgPSAwLCBzaG93X3BhdGhfdG9fZWJ1aWxkID0gMDsKIAljaGFyIHNlYXJjaF9kZXNjID0g
MCwgc2VhcmNoX2FsbCA9IDAsIHNlYXJjaF9uYW1lID0gMSwgc2VhcmNoX2NhY2hlID0gQ0FDSEVf
RUJVSUxEOwogCWNvbnN0IGNoYXIgKnNlYXJjaF92YXJzW10gPSB7ICJERVNDUklQVElPTj0iLCAi
SE9NRVBBR0U9IiB9OwogCXNpemVfdCBzZWFyY2hfbGVuOwotCWludCBpLCBpZHg9MDsKKwlvdmVy
bGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisJaW50IGksIGlkeD0wLCBteWVycm9y
PTA7CisKKwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9
IDA7CisJcmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJn
dlsxXT0lcyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxM
PyIpOwpAQCAtNTYsNiArNjcsOCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoq
YXJndikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXNlYXJjaCkKIAkJY2FzZSAnYSc6IHNlYXJj
aF9hbGwgPSAxOyBicmVhazsKIAkJY2FzZSAnYyc6IHNlYXJjaF9jYWNoZSA9IENBQ0hFX01FVEFE
QVRBOyBicmVhazsKKwkJY2FzZSAnbyc6IHJlcG8gPSAxOyBzdHJuY3B5KHJlcG9fc2VhcmNoLCBv
cHRhcmcsIHNpemVvZihyZXBvX3NlYXJjaCkpOyBicmVhazsKKwkJY2FzZSAncCc6IHNob3dfcGF0
aF90b19lYnVpbGQgPSAxOyBicmVhazsKIAkJY2FzZSAncyc6IHNlYXJjaF9kZXNjID0gMDsgc2Vh
cmNoX25hbWUgPSAxOyBicmVhazsKIAkJY2FzZSAnUyc6IHNlYXJjaF9kZXNjID0gMTsgc2VhcmNo
X25hbWUgPSAwOyBicmVhazsKIAkJY2FzZSAnTic6IHNob3dfbmFtZV9vbmx5ID0gMTsgYnJlYWs7
CkBAIC02Myw2ICs3NiwxNiBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAkJfQogCX0KIAorCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghIHN0cm5jbXAoY3Vy
X292ZXJsYXktPm5hbWUsIHJlcG9fc2VhcmNoLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkK
KwkJCQlicmVhazsKKwkJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7
CisJCWlmIChOVUxMID09IGN1cl9vdmVybGF5KQorCQkJZXJyKCIlcyA6IFVua25vd24gb3Zlcmxh
eSwgdHJ5ICdxIC0tbHMtb3ZlcmxheXMnIiwgcmVwb19zZWFyY2gpOworCX0KKworCiAJaWYgKHNl
YXJjaF9hbGwpIHsKIAkJc2VhcmNoX2Rlc2MgPSAxOwogCQlzZWFyY2hfbmFtZSA9IDA7CkBAIC05
MywxMSArMTE2LDIyIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
CQkJaWYgKChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUoZWJ1aWxkKSkgIT0gTlVMTCkgewogCQkJ
CWlmICgoc3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxhc3QpKSAhPSAwKSB7CiAJCQkJCXN0cm5j
cHkobGFzdCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9mKGxhc3QpKTsKLQkJCQkJaWYgKChyZW1h
dGNoKHNlYXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNhY2hlLT5ERVNDUklQVElPTiA6IGVidWls
ZCksIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09IDApCi0JCQkJCQlwcmludGYoIiVzJXMv
JXMlcyVzICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLCBCTFVFLAotCQkJCQkJ
ICAgICAgIHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0JCQkJCQkgICAgICAgKHNob3dfbmFtZV9v
bmx5ID8gIiIgOgotCQkJCQkJICAgICAgICAoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBB
R0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQlpZiAoKHJlbWF0Y2goc2VhcmNoX21l
LCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBUSU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVO
REVEIHwgUkVHX0lDQVNFKSkgPT0gMCkgeworCQkJCQkJaWYgKHNob3dfcGF0aF90b19lYnVpbGQp
IHsKKwkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMvJXMvXG4iLAorCQkJCQkJ
CUJPTEQsIHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxVRSwgcGNhY2hlLT5hdG9t
LT5QTiwKKwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJY3Vy
X292ZXJsYXktPnBhdGgsIGRpcm5hbWUoZWJ1aWxkKSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJ
CXByaW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJQk9MRCwgcGNhY2hlLT5h
dG9tLT5DQVRFR09SWSwKKwkJCQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAorCQkJCQkJCVlF
TExPVyxjdXJfb3ZlcmxheS0+bmFtZSwgTk9STSwKKwkJCQkJCQkoc2hvd19uYW1lX29ubHkgPyAi
IiA6CisJCQkJCQkJKHNob3dfaG9tZXBhZ2UgPyBwY2FjaGUtPkhPTUVQQUdFIDogcGNhY2hlLT5E
RVNDUklQVElPTikpKTsKKwkJCQkJCX0KKwkJCQkJfQogCQkJCX0KIAkJCQljYWNoZV9mcmVlKHBj
YWNoZSk7CiAJCQl9IGVsc2UgewpAQCAtMTEwLDYgKzE0NCw0NCBAQCBpbnQgcXNlYXJjaF9tYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQljYXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklM
RSAqZWJ1aWxkZnA7CisJCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJCXsKKwkJ
CQkqcCA9IDA7CisJCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQkJ
cCA9IGVidWlsZDsKKwkJCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBwLCBzaXpl
b2YocmVwb19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHN0cm5jbXAob3Zlcmxh
eV9uYW1lLCBwLCBzaXplb2Yob3ZlcmxheV9uYW1lKSkpIHsKKwkJCQkJbGFzdFswXSA9IDA7CisJ
CQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0
cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQor
CQkJCQkJCWJyZWFrOworCQkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5l
eHQpKTsKKworCQkJCQlpZiAob3ZlcmxheV90bXApIHsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3Zl
cmxheV90bXA7CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJ
CQkJCQl3YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJ
CQkJCQkJbXllcnJvcj0xOworCQkJCQkJfQorCQkJCQl9IGVsc2UKKwkJCQkJCW15ZXJyb3I9MTsK
KworCQkJCQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOwor
CQkJCX0KKwkJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQkJfSBlbHNlCisJCQkJbXllcnJvcj0x
OworCisJCQlpZiAobXllcnJvcikgeworCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQl3YXJu
ZigiKGNhY2hlIHVwZGF0ZSBwZW5kaW5nKSAlcyA6IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlf
bmFtZSk7CisJCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCQlteWVycm9yPTA7CisJCQkJY29udGlu
dWU7CisJCQl9CisKIAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBk
aXJuYW1lKHN0cik7CiAKQEAgLTEzNCw5ICsyMDYsMTcgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQkJLy8gZG9pbmcgb3BlcmF0aW9ucyB3aXRoIHRoZW0u
CiAJCQkJCQkJc3RybmNweShkcCwgcCwgc2l6ZW9mKGRwKSk7CiAJCQkJCQkJc3RybmNweShicCwg
cCwgc2l6ZW9mKGJwKSk7Ci0JCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyAlc1xuIiwKLQkJCQkJ
CQkJQk9MRCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwgTk9STSwKKwkJCQkJCQlp
ZiAoc2hvd19wYXRoX3RvX2VidWlsZCkgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjol
c1x0ICVzJXMvJXMvXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5h
bWUoYnApLAorCQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJ
CWN1cl9vdmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJ
CQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRp
cm5hbWUoZHApLCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3Zlcmxh
eS0+bmFtZSwgTk9STSwKIAkJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiBxKSk7CisJCQkJ
CQkJfQogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2Ut
dXRpbHMtMjAwNjExMTEvcXVzZS5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3F1c2UuYwot
LS0gcG9ydGFnZS11dGlscy0yMDA2MTExMS9xdXNlLmMJMjAwNi0xMS0xMSAyMzozNzoyMS4wMDAw
MDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3F1c2UuYwkyMDA2LTEx
LTEzIDE5OjIxOjM3LjgzMDMzOTA4NyArMDEwMApAQCAtMTQsMTAgKzE0LDExIEBACiAgcXVzZSAt
S2UgLS0gIG5scwogKi8KIAotI2RlZmluZSBRVVNFX0ZMQUdTICJlYXZLTERGOk4iIENPTU1PTl9G
TEFHUworI2RlZmluZSBRVVNFX0ZMQUdTICJlYW86dktMREY6TiIgQ09NTU9OX0ZMQUdTCiBzdGF0
aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0c1tdID0gewogCXsiZXhhY3QiLCAg
ICAgbm9fYXJndW1lbnQsIE5VTEwsICdlJ30sCiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwg
TlVMTCwgJ2EnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsi
a2V5d29yZHMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdLJ30sCiAJeyJsaWNlbnNlIiwgICBub19h
cmd1bWVudCwgTlVMTCwgJ0wnfSwKIAl7ImRlc2NyaWJlIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAn
RCd9LApAQCAtMjgsNiArMjksNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxdXNlX2xv
bmdfb3B0CiBzdGF0aWMgY29uc3QgY2hhciAqcXVzZV9vcHRzX2hlbHBbXSA9IHsKIAkiU2hvdyBl
eGFjdCBub24gcmVnZXhwIG1hdGNoaW5nIHVzaW5nIHN0cmNtcCIsCiAJIlNob3cgYW5ub3lpbmcg
dGhpbmdzIGluIElVU0UiLAorCSJPbmx5IGNvbnNpZGVyIHRoZSA8YXJnPiBvdmVybGF5IiwKIAki
VXNlIHRoZSBLRVlXT1JEUyB2cyBJVVNFIiwKIAkiVXNlIHRoZSBMSUNFTlNFIHZzIElVU0UiLAog
CSJEZXNjcmliZSB0aGUgVVNFIGZsYWciLApAQCAtMzgsNyArNDAsNyBAQCBzdGF0aWMgY29uc3Qg
Y2hhciAqcXVzZV9vcHRzX2hlbHBbXSA9IHsKIHN0YXRpYyBjb25zdCBjaGFyIHF1c2VfcmNzaWRb
XSA9ICIkSWQ6IHF1c2UuYyx2IDEuNTMgMjAwNi8xMS8wOSAwMDoxODowNSB2YXBpZXIgRXhwICQi
OwogI2RlZmluZSBxdXNlX3VzYWdlKHJldCkgdXNhZ2UocmV0LCBRVVNFX0ZMQUdTLCBxdXNlX2xv
bmdfb3B0cywgcXVzZV9vcHRzX2hlbHAsIGxvb2t1cF9hcHBsZXRfaWR4KCJxdXNlIikpCiAKLWlu
dCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2lu
dCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciByZXBvX3NlYXJj
aFtdLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogCiBjaGFyIHF1c2VfbmFtZV9vbmx5ID0gMDsK
IApAQCAtODEsNyArODMsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9oaWdobGlnaHRlZF91c2VfZmxh
Z3MoCiAJfQogfQogCi1pbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBj
aGFyICoqYXJndikKK2ludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywg
Y2hhciByZXBvX3NlYXJjaFtdLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAjZGVmaW5lIE5V
TV9TRUFSQ0hfRklMRVMgQVJSX1NJWkUoc2VhcmNoX2ZpbGVzKQogCWNoYXIgYnVmW0JVRlNJWkVd
LCAqcDsKQEAgLTkxLDEyMSArOTMsMTYyIEBAIGludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGlu
ZCwgaW50IGFyZ2MKIAlGSUxFICpmcFtOVU1fU0VBUkNIX0ZJTEVTXTsKIAlESVIgKmQ7CiAJc3Ry
dWN0IGRpcmVudCAqZGU7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAotCWZvciAoaSA9IDA7
IGkgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIiVzL3Byb2ZpbGVzLyVzIiwgcG9ydGRpciwgc2VhcmNoX2ZpbGVzW2ldKTsKLQkJaWYgKChm
cFtpXSA9IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkKLQkJCXdhcm5wKCJza2lwcGluZyAlcyIs
IHNlYXJjaF9maWxlc1tpXSk7Ci0JfQorCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOwogCi0J
Zm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCXMgPSBzdHJsZW4oYXJndltpXSk7CisJ
ZG8geworCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBjdXJfb3ZlcmxheS0+bmFt
ZSwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8
IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgeworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwg
IiVzL3Byb2ZpbGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9maWxlc1tpXSk7CisJ
CQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQorCQkJCWlmICh2ZXJib3Nl
ICkKKwkJCQkJd2FybnAoInNraXBwaW5nICVzIGZvciB0aGUgJXMgb3ZlcmxheSIsIHNlYXJjaF9m
aWxlc1tpXSwgY3VyX292ZXJsYXktPm5hbWUpOworCQl9CiAKLQkJZm9yIChmID0gMDsgZiA8IE5V
TV9TRUFSQ0hfRklMRVM7ICsrZikgewotCQkJaWYgKGZwW2ZdID09IE5VTEwpCi0JCQkJY29udGlu
dWU7CisJCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgeworCQkJcyA9IHN0cmxlbihhcmd2
W2ldKTsKIAotCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwW2ZdKSAhPSBOVUxM
KSB7Ci0JCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQlmb3IgKGYg
PSAwOyBmIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7CisJCQkJaWYgKGZwW2ZdID09IE5VTEwp
CiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBO
VUxMKQotCQkJCQkqcCA9ICdcMCc7CisJCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1Ziks
IGZwW2ZdKSAhPSBOVUxMKSB7CisJCQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAn
XG4nKQorCQkJCQkJY29udGludWU7CiAKLQkJCQlzd2l0Y2ggKGYpIHsKLQkJCQkJY2FzZSAwOiAv
KiBHbG9iYWwgdXNlLmRlc2MgKi8KLQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMp
KQotCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09ICctJykgewotCQkJCQkJ
CQlwcmludGYoIiAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOwotCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCQl9
Ci0JCQkJCQlicmVhazsKKwkJCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxM
KQorCQkJCQkJKnAgPSAnXDAnOwogCi0JCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRl
c2MgKi8KLQkJCQkJCWlmICgocCA9IHN0cmNocihidWYsICc6JykpID09IE5VTEwpCisJCQkJCXN3
aXRjaCAoZikgeworCQkJCQkJY2FzZSAwOiAvKiBHbG9iYWwgdXNlLmRlc2MgKi8KKwkJCQkJCQlp
ZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKKwkJCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcg
JiYgYnVmW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3Zlcmxh
eV9nZW50b28pCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBC
T0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UK
KwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwgY3VyX292
ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOwor
CQkJCQkJCQkJZ290byBza2lwX2ZpbGU7CisJCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKLQkJCQkJ
CSsrcDsKLQkJCQkJCWlmICghc3RybmNtcChwLCBhcmd2W2ldLCBzKSkgewotCQkJCQkJCWlmIChw
W3NdID09ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCSpwID0gJ1wwJzsKLQkJCQkJ
CQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5PUk0sIEJM
VUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOwotCQkJCQkJCX0KLQkJ
CQkJCX0KLQkJCQkJCWJyZWFrOwogCi0JCQkJCWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBhcmNo
Lmxpc3QgKi8KLQkJCQkJCWlmICghc3RyY21wKGJ1ZiwgYXJndltpXSkpIHsKLQkJCQkJCQlwcmlu
dGYoIiAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgQk9MRCwgTk9STSwgQkxV
RSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7Ci0JCQkJCQkJZ290byBza2lwX2ZpbGU7Ci0JCQkJ
CQl9Ci0JCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRlc2Mg
Ki8KKwkJCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQorCQkJCQkJCQli
cmVhazsKKwkJCQkJCQkrK3A7CisJCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFyZ3ZbaV0sIHMpKSB7
CisJCQkJCQkJCWlmIChwW3NdID09ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQkq
cCA9ICdcMCc7CisJCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28pCisJ
CQkJCQkJCQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5P
Uk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJCQkJ
CQkJZWxzZQorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMg
JXNcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JN
LCBCT0xELCBidWYsIE5PUk0sIHArcyszKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQli
cmVhazsKIAotCQkJCQljYXNlIDM6IC8qIExhbmd1YWdlcyBsYW5nLmRlc2MgKi8KLQkJCQkJCWlm
ICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQotCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYm
IGJ1ZltzKzFdID09ICctJykgewotCQkJCQkJCQlwcmludGYoIiAlc2xhbmclczolcyVzJXM6ICVz
IGxpbmd1YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJ
CQkJCQljYXNlIDI6IC8qIEFyY2hpdGVjdHVyZXMgYXJjaC5saXN0ICovCisJCQkJCQkJaWYgKCFz
dHJjbXAoYnVmLCBhcmd2W2ldKSkgeworCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3Zlcmxh
eV9nZW50b28pCisJCQkJCQkJCQlwcmludGYoIiAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVj
dHVyZVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7CisJCQkJ
CQkJCWVsc2UKKwkJCQkJCQkJCXByaW50ZigiICglcykgJXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNo
aXRlY3R1cmVcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ld
LCBOT1JNLCBhcmd2W2ldKTsKIAkJCQkJCQkJZ290byBza2lwX2ZpbGU7CiAJCQkJCQkJfQotCQkJ
CQkJYnJlYWs7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgMzogLyogTGFuZ3VhZ2VzIGxh
bmcuZGVzYyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJCQkJ
CQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlmIChj
dXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlwcmludGYoIiAlc2xhbmcl
czolcyVzJXM6ICVzIGxpbmd1YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwg
YnVmK3MrMyk7CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2xhbmcl
czolcyVzJXM6ICVzIGxpbmd1YVxuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJM
VUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZ290byBza2lwX2ZpbGU7CisJ
CQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJfQogCQkJCX0KLQkJCX0KIAogc2tpcF9maWxl
OgotCQkJcmV3aW5kKGZwW2ZdKTsKKwkJCQlyZXdpbmQoZnBbZl0pOworCQkJfQorCisJCQlpZiAo
aSA9PSAoYXJnYyAtIDEpKQorCQkJCWZvciAoZj0wOyBmPE5VTV9TRUFSQ0hfRklMRVM7ICsrZikK
KwkJCQkJaWYgKGZwW2ZdKSB7CisJCQkJCQlmY2xvc2UoZnBbZl0pOworCQkJCQkJZnBbZl0gPSBO
VUxMOworCQkJCQl9CiAJCX0KLQl9CiAKLQlmb3IgKGY9MDsgZjxOVU1fU0VBUkNIX0ZJTEVTOyAr
K2YpCi0JCWZjbG9zZShmcFtmXSk7CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5
LT5uZXh0KSk7CiAKIAkvKiBub3cgc2NhbiB0aGUgZGVzYyBkaXIgKi8KLQlzbnByaW50ZihidWYs
IHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8iLCBwb3J0ZGlyKTsKLQlkID0gb3BlbmRp
cihidWYpOwotCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7Ci0JCWlmIChzdHJj
bXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwgIi5kZXNjIikpCisJY3VyX292ZXJs
YXk9b3ZlcmxheV9nZW50b287CisJZG8geworCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2Vh
cmNoLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCiAJCQljb250aW51
ZTsKLQotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIs
IHBvcnRkaXIsIGRlLT5kX25hbWUpOwotCQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0g
TlVMTCkgewotCQkJd2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzsgc2tpcHBp
bmciLCBkZS0+ZF9uYW1lKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2Zp
bGVzL2Rlc2MvIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQlpZiAoIShkID0gb3BlbmRpcihidWYp
KSkgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJXMgLT4gc2tp
cHBpbmciLCBidWYpOwogCQkJY29udGludWU7CiAJCX0KKwkJd2hpbGUgKChkZSA9IHJlYWRkaXIo
ZCkpICE9IE5VTEwpIHsKKwkJCWlmIChzdHJjbXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFt
ZSktNSwgIi5kZXNjIikpCisJCQkJY29udGludWU7CiAKLQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6
ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7Ci0JCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZb
MF0gPT0gJ1xuJykKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9k
ZXNjLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIGRlLT5kX25hbWUpOworCQkJaWYgKChmcFswXT1m
b3BlbihidWYsICJyIikpID09IE5VTEwpIHsKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAnJXMn
IGZvciByZWFkaW5nOyBza2lwcGluZyIsIGRlLT5kX25hbWUpOwogCQkJCWNvbnRpbnVlOworCQkJ
fQogCi0JCQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJKnAgPSAn
XDAnOworCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7
CisJCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCWNvbnRpbnVl
OworCisJCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQorCQkJCQkqcCA9
ICdcMCc7CiAKLQkJCWlmICgocCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwpIHsKKwkJCQlp
ZiAoKHAgPSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CiBpbnZhbGlkX2xpbmU6Ci0JCQkJ
d2FybigiSW52YWxpZCBsaW5lIGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKLQkJCQlj
b250aW51ZTsKLQkJCX0KLQkJCXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsK
LQkJCQkvKiBtYXliZSB0aGUgZmxhZyBoYXMgYSAnLScgaW4gaXQgLi4uICovCi0JCQkJaWYgKChw
ID0gc3RyY2hyKHArMSwgJy0nKSkgPT0gTlVMTCkKLQkJCQkJZ290byBpbnZhbGlkX2xpbmU7Ci0J
CQl9Ci0JCQlwWy0xXSA9ICdcMCc7Ci0JCQlwICs9IDI7CisJCQkJCXdhcm4oIkludmFsaWQgbGlu
ZSBpbiAnJXMnOiAlcyIsIGRlLT5kX25hbWUsIGJ1Zik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0K
KwkJCQl3aGlsZSAocFstMV0gIT0gJyAnICYmIHBbMV0gIT0gJyAnKSB7CisJCQkJCS8qIG1heWJl
IHRoZSBmbGFnIGhhcyBhICctJyBpbiBpdCAuLi4gKi8KKwkJCQkJaWYgKChwID0gc3RyY2hyKHAr
MSwgJy0nKSkgPT0gTlVMTCkKKwkJCQkJCWdvdG8gaW52YWxpZF9saW5lOworCQkJCX0KKwkJCQlw
Wy0xXSA9ICdcMCc7CisJCQkJcCArPSAyOwogCi0JCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBp
KyspCi0JCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgYnVmKSkKLQkJCQkJcHJpbnRmKCIgJXMlcyVz
OiVzJXMlczogJXNcbiIsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5P
Uk0sIHApOwotCQl9Ci0JCWNsb3NlKGYpOwotCX0KLQljbG9zZWRpcihkKTsKKwkJCQlmb3IgKGkg
PSBpbmQ7IGkgPCBhcmdjOyBpKyspCisJCQkJCWlmICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpIHsK
KwkJCQkJCWlmIChjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQlwcmludGYo
IiAlcyVzJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgcCk7CisJCQkJCQllbHNlCisJCQkJCQkJcHJpbnRmKCIgKCVzKSAlcyVzJXM6
JXMlcyVzOiAlc1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0s
IEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIHApOworCQkJCQl9CiAKKwkJCX0KKwkJCWZjbG9zZShmcFsw
XSk7CisJCX0KKwkJY2xvc2VkaXIoZCk7CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVy
bGF5LT5uZXh0KSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogewogCUZJTEUgKmZwOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnN0cjsKKwlz
aG9ydCBteWVycm9yID0gMCwgcmVwbyA9IDA7CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hh
ciBvdmVybGF5X25hbWVbNjRdOwogCiAJY2hhciBidWYwW19RX1BBVEhfTUFYXTsKIAljaGFyIGJ1
ZjFbX1FfUEFUSF9NQVhdOwpAQCAtMjE4LDYgKzI2MSwxMSBAQCBpbnQgcXVzZV9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAlzaG9ydCBxdXNlX2FsbCA9IDA7CiAJaW50IHJlZ2V4cF9tYXRj
aGluZyA9IDEsIGksIGlkeCA9IDA7CiAJc2l6ZV90IHNlYXJjaF9sZW47CisJb3ZlcmxheV90ICpj
dXJfb3ZlcmxheSwgKm92ZXJsYXlfdG1wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRv
bzsKKwlvdmVybGF5X25hbWVbMF0gPSAwOworCXJlcG9fc2VhcmNoWzBdID0gMDsKIAogCURCRygi
YXJnYz0lZCBhcmd2WzBdPSVzIGFyZ3ZbMV09JXMiLAogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdj
ID4gMSA/IGFyZ3ZbMV0gOiAiTlVMTD8iKTsKQEAgLTIyNiw2ICsyNzQsMTAgQEAgaW50IHF1c2Vf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXN3aXRjaCAoaSkgewogCQljYXNlICdlJzog
cmVnZXhwX21hdGNoaW5nID0gMDsgYnJlYWs7CiAJCWNhc2UgJ2EnOiBxdXNlX2FsbCA9IDE7IGJy
ZWFrOworCQljYXNlICdvJzoKKwkJCXJlcG8gPSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwg
b3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJyZWFrOwogCQljYXNlICdLJzogaWR4
ID0gMTsgYnJlYWs7CiAJCWNhc2UgJ0wnOiBpZHggPSAyOyBicmVhazsKIAkJY2FzZSAnRCc6IGlk
eCA9IC0xOyBicmVhazsKQEAgLTIzNCwxMSArMjg2LDI0IEBAIGludCBxdXNlX21haW4oaW50IGFy
Z2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxdXNlKQogCQl9CiAJfQot
CWlmIChhcmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYgaWR4ID49IDApCisKKwlpZiAocmVw
bykgeworCQlkbyB7CisJCQlpZiAoIXN0cm5jbXAoY3VyX292ZXJsYXktPm5hbWUsIHJlcG9fc2Vh
cmNoLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAo
KGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCWlmIChOVUxMID09IGN1cl9vdmVy
bGF5KQorCQkJZXJyKCIlcyA6IFVua25vd24gb3ZlcmxheSwgdHJ5ICdxIC0tbHMtb3ZlcmxheXMn
IiwgcmVwb19zZWFyY2gpOworCX0KKworCWlmIChhcmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwg
JiYgaWR4ID49IDApIHsKKwkJaWYgKGlkeCA9PSAzKQorCQkJZnJlZShzZWFyY2hfdmFycytpZHgp
OwogCQlxdXNlX3VzYWdlKEVYSVRfRkFJTFVSRSk7CisJfQogCiAJaWYgKGlkeCA9PSAtMSkKLQkJ
cmV0dXJuIHF1c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIGFyZ2MsIGFyZ3YpOworCQlyZXR1cm4g
cXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgcmVwbywgcmVwb19zZWFyY2gsIGFyZ2MsIGFyZ3Yp
OwogCiAJaWYgKHF1c2VfYWxsKSBvcHRpbmQgPSBhcmdjOwogCWluaXRpYWxpemVfZWJ1aWxkX2Zs
YXQoKTsJLyogc2V0cyBvdXIgcHdkIHRvICRQT1JURElSICovCkBAIC0yNTAsNiArMzE1LDQzIEBA
IGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlyZXR1cm4gMTsKIAl3aGls
ZSAoKGZnZXRzKGVidWlsZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkgIT0gTlVMTCkgewogCQlGSUxF
ICpuZXdmcDsKKwkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJzonKSkpCisJCXsKKwkJCSpwID0g
MDsKKwkJCXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMgJzo6JyAqLworCQkJcCA9IGVidWls
ZDsKKwkJCWlmIChyZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIHAsIHNpemVvZihyZXBvX3Nl
YXJjaCkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9uYW1lLCBwLCBz
aXplb2Yob3ZlcmxheV9uYW1lKSkpIHsKKwkJCQlvdmVybGF5X3RtcD1vdmVybGF5X2dlbnRvbzsK
KwkJCQlkbyB7CisJCQkJCWlmICghc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9m
KG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCQlicmVhazsKKwkJCQl9IHdoaWxlICgob3Zlcmxh
eV90bXA9b3ZlcmxheV90bXAtPm5leHQpKTsKKwkJCQlpZiAob3ZlcmxheV90bXApCisJCQkJewor
CQkJCQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJs
YXktPnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFp
bGVkIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJCQkJ
fSBlbHNlCisJCQkJCW15ZXJyb3I9MTsKKworCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBjdXJf
b3ZlcmxheS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJfQorCQkJc3RyY3B5KGVi
dWlsZCwgc3RyKTsKKwkJfSBlbHNlCisJCQlteWVycm9yPTE7CisKKwkJaWYgKG15ZXJyb3IpIHsK
KwkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCXdhcm5mKCIoY2FjaGUgdXBkYXRlIHBlbmRpbmcp
ICVzIDogVW5rbm93biBvdmVybGF5Iiwgb3ZlcmxheV9uYW1lKTsKKwkJCXJlaW5pdGlhbGl6ZSA9
IDE7CisJCQlteWVycm9yPTA7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmICgocCA9IHN0cmNo
cihlYnVpbGQsICdcbicpKSAhPSBOVUxMKQogCQkJKnAgPSAwOwogCQlpZiAoKG5ld2ZwID0gZm9w
ZW4oZWJ1aWxkLCAiciIpKSAhPSBOVUxMKSB7CkBAIC0zNzUsNyArNDc3LDcgQEAgaW50IHF1c2Vf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWlmICh2ZXJib3NlID4gMykKIAkJCQkJ
CXByaW50ZigiJXMgJXMgJXMgIiwgKnVzZXIgPyB1c2VyIDogIk1JU1NJTkciLCAqcmV2aXNpb24g
PyByZXZpc2lvbiA6ICJNSVNTSU5HIiwgKmRhdGUgPyBkYXRlIDogIk1JU1NJTkciKTsKIAotCQkJ
CQlwcmludGYoIiVzJXMlcyAiLCBDWUFOLCBlYnVpbGQsIE5PUk0pOworCQkJCQlwcmludGYoIiVz
JXM6OiVzJXMgIiwgQ1lBTiwgY3VyX292ZXJsYXktPm5hbWUsIGVidWlsZCwgTk9STSk7CiAJCQkJ
CXByaW50X2hpZ2hsaWdodGVkX3VzZV9mbGFncygmYnVmMFtzZWFyY2hfbGVuKzFdLCBvcHRpbmQs
IGFyZ2MsIGFyZ3YpOwogCQkJCQlwdXRzKE5PUk0pOwogCQkJCQlpZiAodmVyYm9zZSA+IDEpIHsK
QEAgLTM4Myw3ICs0ODUsNyBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
IAkJCQkJCWludCBBUkdDID0gMDsKIAkJCQkJCW1ha2Vhcmd2KCZidWYwW3NlYXJjaF9sZW4rMV0s
ICZBUkdDLCAmQVJHVik7CiAJCQkJCQlpZiAoQVJHQyA+IDApIHsKLQkJCQkJCQlxdXNlX2Rlc2Ny
aWJlX2ZsYWcoMSwgQVJHQywgQVJHVik7CisJCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIHJl
cG8sIHJlcG9fc2VhcmNoLCBBUkdDLCBBUkdWKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgQVJH
QzsgaSsrKQogCQkJCQkJCQlmcmVlKEFSR1ZbaV0pOwogCQkJCQkJCWZyZWUoQVJHVik7CmRpZmYg
LU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvdGVzdHMvaW5zdGFsbC9kb3Rlc3QgcG9ydGFn
ZS11dGlscy0yMDA2MTExMS5uZXcvdGVzdHMvaW5zdGFsbC9kb3Rlc3QKLS0tIHBvcnRhZ2UtdXRp
bHMtMjAwNjExMTEvdGVzdHMvaW5zdGFsbC9kb3Rlc3QJMjAwNi0xMS0xMSAyMzozNzoyMS4wMDAw
MDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3Rlc3RzL2luc3RhbGwv
ZG90ZXN0CTIwMDYtMTEtMTMgMTg6MjE6MTguOTkzNDg1OTExICswMTAwCkBAIC03LDcgKzcsNyBA
QCBkaWUoKSB7CiAKIGNwIC4uLy4uL3EgLgogLi9xIC1pIHx8IGRpZSAiLi9xIC1pIgotZm9yIGFw
cCBpbiAkKC4vcSAtQ2ggfCBncmVwICcgOiAnIHwgYXdrICd7cHJpbnQgJDF9JykgOyBkbworZm9y
IGFwcCBpbiAkKC4vcSAtQ2ggfCBncmVwIC12ICdVc2FnZScgfCBncmVwICcgOiAnIHwgYXdrICd7
cHJpbnQgJDF9JykgOyBkbwogCVsgISAtZSAkYXBwIF0gJiYgZGllICIkYXBwIGRvZXMgbm90IGV4
aXN0IgogZG9uZQogZWNobyAiUEFTU0VEIgo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101730</attachid>
            <date>2006-11-12 05:53 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9tYWluLmMgcG9ydGFnZS11dGlscy0y
MDA2MTExMS5uZXcvbWFpbi5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL21haW4uYwkyMDA2
LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTEx
MS5uZXcvbWFpbi5jCTIwMDYtMTEtMTMgMjE6MDU6NDYuOTQxMzI5ODE1ICswMTAwCkBAIC03MSw2
ICs3MSw3IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRp
YyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2
b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7
CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAg
LTg1LDEzICs4NiwyMSBAQCBzdGF0aWMgaW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRl
bmQgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwotc3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0g
PSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwogc3RhdGlj
IGNoYXIgcG9ydHZkYltdID0gInZhci9kYi9wa2ciOwogc3RhdGljIGNoYXIgcG9ydGNhY2hlZGly
W10gPSAibWV0YWRhdGEvY2FjaGUiOwogc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhd
ID0gIi8iOwogc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMv
IjsKIAordHlwZWRlZiBzdHJ1Y3Qgb3ZlcmxheV90IG92ZXJsYXlfdDsKK3N0cnVjdCBvdmVybGF5
X3QgeworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwYXRoW19RX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qg
b3ZlcmxheV90ICpuZXh0OworfTsKKworc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50b28g
PSBOVUxMOworCiBjaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8iOwog
Y2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKIApAQCAtMjAxLDEw
ICsyMTAsMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTQ2OSwxNyArNDc4LDc5IEBAIGNoYXIgKnN0cmluY3JfdmFyKGNvbnN0IGNoYXIgKm5hbWUs
IGNoYXIKIAlyZXR1cm4gKGNoYXIgKikgdmFsdWU7CiB9CiAKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVy
bGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSkKK3sKKwlzaG9ydCBtZXJyb3IgPSAwOworCWNo
YXIgYnVmW0JVRlNJWkVdLCBmaWxlW19RX1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKKwlvdmVybGF5
X3QgKmN1cl9vdmVybGF5OworCUZJTEUgKnJlcG9fbmFtZUZQOworCXMgPSBwb3J0ZGlyX292ZXJs
YXk7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKworCXdoaWxlICgqcykgeworCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiAoKmN1cl9vdmVybGF5LT5uZXh0KSk7
CisJCWN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQ7CisJCWN1cl9vdmVybGF5LT5uZXh0
ID0gTlVMTDsKKworCQlpZiAoKHA9c3RyY2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc25w
cmludGYoY3VyX292ZXJsYXktPnBhdGgsIHNpemVvZihjdXJfb3ZlcmxheS0+cGF0aCksICIlcyVz
IiwgcG9ydHJvb3QsIHMpOworCisJCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBvdmVybGF5ICov
CisJCXN0cm5jcHkoZmlsZSwgY3VyX292ZXJsYXktPnBhdGgsIF9RX1BBVEhfTUFYKTsKKwkJc3Ry
bmNhdChmaWxlLCAiL3Byb2ZpbGVzL3JlcG9fbmFtZSIsIF9RX1BBVEhfTUFYKTsKKwkJaWYgKChy
ZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikpKQorCQl7CisJCQlpZiAoIShmZ2V0cyhidWYs
IHNpemVvZihidWYpLHJlcG9fbmFtZUZQKSkpCisJCQkJbWVycm9yKys7CisKKwkJCXJtc3BhY2Uo
YnVmKTsKKwkJCWlmICgodCA9IHN0cmNocihidWYsJ1xuJykpKQorCQkJCSp0ID0gMDsKKworCQkJ
c3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVmLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUp
KTsKKworCQkJZmNsb3NlKHJlcG9fbmFtZUZQKTsKKworCQl9IGVsc2UKKwkJCW1lcnJvcisrOwor
CisJCWlmIChtZXJyb3IpIHsKKwkJCS8qIGRlbGV0ZSB0cmFpbGluZyAnLycgKi8KKwkJCXQgPSBj
dXJfb3ZlcmxheS0+cGF0aCArIHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0aCkgLSAxOworCQkJaWYg
KCp0ID09ICcvJykKKwkJCQkqdCA9IDA7CisKKwkJCXN0cm5jcHkoY3VyX292ZXJsYXktPm5hbWUs
IGJhc2VuYW1lKGN1cl9vdmVybGF5LT5wYXRoKSwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7
CisJCQltZXJyb3I9MDsKKwkJfQorCisJCWlmIChwKQorCQkJcyA9IHArMTsKKwkJZWxzZQorCQkJ
YnJlYWs7CisJfQorCit9CisKKwogdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiB7
CiAJY2hhciBub2NvbG9yID0gMDsKIAlpbnQgaSwgZjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlGSUxF
ICpmcDsKKwljaGFyIHRtcF9wb3J0ZGlyW19RX1BBVEhfTUFYXTsKKwljaGFyIHBvcnRkaXJfb3Zl
cmxheVsyMDQ4XSA9ICIiOworCiAJY2hhciBidWZbQlVGU0laRV0sICpzLCAqcDsKIAogCWNoYXIg
cHJvZmlsZVtfUV9QQVRIX01BWF0sIHBvcnRhZ2VfZmlsZVtfUV9QQVRIX01BWF07CisKIAljb25z
dCBjaGFyICpmaWxlc1tdID0ge3BvcnRhZ2VfZmlsZSwgIi9ldGMvbWFrZS5nbG9iYWxzIiwgIi9l
dGMvbWFrZS5jb25mIn07CiAJdHlwZWRlZiBlbnVtIHsgX1FfQk9PTCwgX1FfU1RSLCBfUV9JU1RS
IH0gdmFyX3R5cGVzOworCiAJc3RydWN0IHsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJY29uc3Qg
c2l6ZV90IG5hbWVfbGVuOwpAQCAtNDkzLDEzICs1NjQsMTkgQEAgdm9pZCBpbml0aWFsaXplX3Bv
cnRhZ2VfZW52KHZvaWQpCiAJCXsiQ09ORklHX1BST1RFQ1QiLCAgIDE0LCBfUV9TVFIsICBjb25m
aWdfcHJvdGVjdCwgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KX0sCiAJCXsiTk9DT0xPUiIsICAgICAg
ICAgICA3LCBfUV9CT09MLCAmbm9jb2xvciwgICAgICAgMX0sCiAJCXsiRkVBVFVSRVMiLCAgICAg
ICAgICA4LCBfUV9JU1RSLCBmZWF0dXJlcywgICAgICAgc2l6ZW9mKGZlYXR1cmVzKX0sCi0JCXsi
UE9SVERJUiIsICAgICAgICAgICA3LCBfUV9TVFIsICBwb3J0ZGlyLCAgICAgICAgc2l6ZW9mKHBv
cnRkaXIpfSwKKwkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9RX1NUUiwgIHRtcF9wb3J0ZGly
LCAgICBzaXplb2YodG1wX3BvcnRkaXIpfSwKKwkJeyJQT1JURElSX09WRVJMQVkiLCAgMTUsIF9R
X0lTVFIsIHBvcnRkaXJfb3ZlcmxheSxzaXplb2YocG9ydGRpcl9vdmVybGF5KX0sCiAJCXsiUE9S
VEFHRV9CSU5IT1NUIiwgIDE1LCBfUV9TVFIsICBiaW5ob3N0LCAgICAgICAgc2l6ZW9mKGJpbmhv
c3QpfSwKIAkJeyJQT1JUQUdFX1RNUERJUiIsICAgMTQsIF9RX1NUUiwgIHBvcnRfdG1wZGlyLCAg
ICBzaXplb2YocG9ydF90bXBkaXIpfSwKIAkJeyJQS0dESVIiLCAgICAgICAgICAgIDYsIF9RX1NU
UiwgIHBrZ2RpciwgICAgICAgICBzaXplb2YocGtnZGlyKX0sCiAJCXsiUk9PVCIsICAgICAgICAg
ICAgICA0LCBfUV9TVFIsICBwb3J0cm9vdCwgICAgICAgc2l6ZW9mKHBvcnRyb290KX0KIAl9Owog
CisJb3ZlcmxheV9nZW50b28gPSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlz
dHJjcHkob3ZlcmxheV9nZW50b28tPm5hbWUsImdlbnRvbyIpOworCXNucHJpbnRmKG92ZXJsYXlf
Z2VudG9vLT5wYXRoLCBzaXplb2Yob3ZlcmxheV9nZW50b28tPnBhdGgpLCIlc3Vzci9wb3J0YWdl
IiwgcG9ydHJvb3QpOworCW92ZXJsYXlfZ2VudG9vLT5uZXh0ID0gTlVMTDsKKwogCWlmICgocCA9
IHN0cmNocihwb3J0cm9vdCwgJy8nKSkgIT0gTlVMTCkKIAkJaWYgKHN0cmxlbihwKSAhPSAxKQog
CQkJc3RybmNhdChwb3J0cm9vdCwgIi8iLCBzaXplb2YocG9ydHJvb3QpKTsKQEAgLTU5MSw2ICs2
NjgsMTMgQEAgdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiAJCW5vX2NvbG9ycygp
OwogCWVsc2UKIAkJY29sb3JfcmVtYXAoKTsKKworCisJc25wcmludGYob3ZlcmxheV9nZW50b28t
PnBhdGgsIHNpemVvZihvdmVybGF5X2dlbnRvby0+cGF0aCksIiVzJXMiLCBwb3J0cm9vdCwgdG1w
X3BvcnRkaXIpOworCisJLyogbm93IHdlIGluaXRpbGlhc2UgdGhlIG92ZXJsYXkgY2hhaW5lZCBs
aXN0IHdpdGggb3ZlcmxheV9nZW50b28gYXMgdGhlIGZpcnN0ICdpdGVtJyAgKi8KKwlpbml0aWFs
aXplX292ZXJsYXlzKHBvcnRkaXJfb3ZlcmxheSk7CisKIH0KIAogZW51bSB7CkBAIC02MTksMTkg
KzcwMywyMSBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQoaW50IGNhY2hlX3R5CiAJaW50
IGEsIGIsIGMsIGQsIGUsIGk7CiAJaW50IGZyYWMsIHNlY3MsIGNvdW50OwogCUZJTEUgKmZwOwor
CW92ZXJsYXlfdCAqY3VyX292ZXJsYXk7CiAKIAlhID0gYiA9IGMgPSBkID0gZSA9IGkgPSAwOwog
CWNvdW50ID0gZnJhYyA9IHNlY3MgPSAwOworCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50b287
CiAKIAljYWNoZV9maWxlID0gKGNhY2hlX3R5cGUgPT0gQ0FDSEVfRUJVSUxEID8gQ0FDSEVfRUJV
SUxEX0ZJTEUgOiBDQUNIRV9NRVRBREFUQV9GSUxFKTsKIAotCWlmIChjaGRpcihwb3J0ZGlyKSAh
PSAwKSB7Ci0JCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVkIiwgcG9ydGRpcik7
CisJaWYgKGNoZGlyKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSAhPSAwKSB7CisJCXdhcm5wKCJjaGRp
ciB0byBQT1JURElSICclcycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCQlnb3Rv
IHJldDsKIAl9CiAKIAlpZiAoY2FjaGVfdHlwZSA9PSBDQUNIRV9NRVRBREFUQSAmJiBjaGRpcihw
b3J0Y2FjaGVkaXIpICE9IDApIHsKLQkJd2FybnAoImNoZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVz
LyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBwb3J0Y2FjaGVkaXIpOworCQl3YXJucCgiY2hkaXIgdG8g
cG9ydGFnZSBjYWNoZSAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBwb3J0
Y2FjaGVkaXIpOwogCQlnb3RvIHJldDsKIAl9CiAKQEAgLTY0Nyw2NCArNzMzLDcxIEBAIGNvbnN0
IGNoYXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAogCXVubGluayhjYWNoZV9maWxl
KTsKIAlpZiAoZXJybm8gIT0gRU5PRU5UKSB7Ci0JCXdhcm5mcCgidW5saW5raW5nICclcy8lcycg
ZmFpbGVkIiwgcG9ydGRpciwgY2FjaGVfZmlsZSk7CisJCXdhcm5mcCgidW5saW5raW5nICclcy8l
cycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgsIGNhY2hlX2ZpbGUpOwogCQlnb3RvIHJl
dDsKIAl9CiAKIAlpZiAoKGZwID0gZm9wZW4oY2FjaGVfZmlsZSwgInciKSkgPT0gTlVMTCkgewot
CQl3YXJuZnAoIm9wZW5pbmcgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBjYWNoZV9maWxlKTsK
KwkJd2FybmZwKCJvcGVuaW5nICclcy8lcycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPnBhdGgs
IGNhY2hlX2ZpbGUpOwogCQlnb3RvIHJldDsKIAl9CiAKIAlnZXR0aW1lb2ZkYXkoJnN0YXJ0LCBO
VUxMKTsKIAotCWlmICgoYSA9IHNjYW5kaXIoIi4iLCAmY2F0ZWdvcnksIGZpbHRlcl9oaWRkZW4s
IGFscGhhc29ydCkpIDwgMCkKLQkJZ290byByZXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYTsgaSsr
KSB7Ci0JCXN0YXQoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnN0KTsKLQkJaWYgKCFTX0lTRElSKHN0
LnN0X21vZGUpKQotCQkJY29udGludWU7Ci0JCWlmIChzdHJjaHIoY2F0ZWdvcnlbaV0tPmRfbmFt
ZSwgJy0nKSA9PSBOVUxMKQotCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ldLT5kX25hbWUsICJ2
aXJ0dWFsIiwgNykpICE9IDApCisJZG8geworCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9n
ZW50b28gfHwgY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpID09IDApIHsKKwkJCWlmICgoYSA9IHNj
YW5kaXIoIi4iLCAmY2F0ZWdvcnksIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKIAkJ
CQljb250aW51ZTsKIAotCQlpZiAoKGIgPSBzY2FuZGlyKGNhdGVnb3J5W2ldLT5kX25hbWUsICZw
biwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQkJY29udGludWU7Ci0JCWZvciAo
YyA9IDA7IGMgPCBiOyBjKyspIHsKLQkJCWNoYXIgZGVbX1FfUEFUSF9NQVhdOworCQkJZm9yIChp
ID0gMDsgaSA8IGE7IGkrKykgeworCQkJCXN0YXQoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnN0KTsK
KwkJCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChz
dHJjaHIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJy0nKSA9PSBOVUxMKQorCQkJCQlpZiAoKHN0cm5j
bXAoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgInZpcnR1YWwiLCA3KSkgIT0gMCkKKwkJCQkJCWNvbnRp
bnVlOwogCi0JCQlzbnByaW50ZihkZSwgc2l6ZW9mKGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0t
PmRfbmFtZSwgcG5bY10tPmRfbmFtZSk7CisJCQkJaWYgKChiID0gc2NhbmRpcihjYXRlZ29yeVtp
XS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJY29u
dGludWU7CisJCQkJZm9yIChjID0gMDsgYyA8IGI7IGMrKykgeworCQkJCQljaGFyIGRlW19RX1BB
VEhfTUFYXTsKIAotCQkJaWYgKHN0YXQoZGUsICZzdCkgPCAwKQotCQkJCWNvbnRpbnVlOworCQkJ
CQlzbnByaW50ZihkZSwgc2l6ZW9mKGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwg
cG5bY10tPmRfbmFtZSk7CiAKLQkJCXN3aXRjaCAoY2FjaGVfdHlwZSkgewotCQkJY2FzZSBDQUNI
RV9FQlVJTEQ6Ci0JCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQotCQkJCQljb250aW51ZTsK
LQkJCQlicmVhazsKLQkJCWNhc2UgQ0FDSEVfTUVUQURBVEE6Ci0JCQkJaWYgKFNfSVNSRUcoc3Qu
c3RfbW9kZSkpCi0JCQkJCWZwcmludGYoZnAsICIlc1xuIiwgZGUpOwotCQkJCWNvbnRpbnVlOwot
CQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKChlID0gc2NhbmRpcihkZSwgJmViLCBmaWx0ZXJfaGlk
ZGVuLCBhbHBoYXNvcnQpKSA8IDApCi0JCQkJY29udGludWU7Ci0JCQlmb3IgKGQgPSAwOyBkIDwg
ZTsgZCsrKSB7Ci0JCQkJaWYgKChwID0gc3RycmNocihlYltkXS0+ZF9uYW1lLCAnLicpKSAhPSBO
VUxMKQotCQkJCQlpZiAoc3RyY21wKHAsICIuZWJ1aWxkIikgPT0gMCkgewotCQkJCQkJY291bnQr
KzsKLQkJCQkJCWZwcmludGYoZnAsICIlcy8lcy8lc1xuIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwg
cG5bY10tPmRfbmFtZSwgZWJbZF0tPmRfbmFtZSk7CisJCQkJCWlmIChzdGF0KGRlLCAmc3QpIDwg
MCkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXN3aXRjaCAoY2FjaGVfdHlwZSkgeworCQkJCQlj
YXNlIENBQ0hFX0VCVUlMRDoKKwkJCQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkJ
CQljb250aW51ZTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIENBQ0hFX01FVEFEQVRBOgorCQkJ
CQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQkJCQkJZnByaW50ZihmcCwgIiVzXG4iLCBk
ZSk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmICgoZSA9
IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQorCQkJCQkJ
Y29udGludWU7CisJCQkJCWZvciAoZCA9IDA7IGQgPCBlOyBkKyspIHsKKwkJCQkJCWlmICgocCA9
IHN0cnJjaHIoZWJbZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKKwkJCQkJCQlpZiAoc3RyY21w
KHAsICIuZWJ1aWxkIikgPT0gMCkgeworCQkJCQkJCQljb3VudCsrOworCQkJCQkJCQlmcHJpbnRm
KGZwLCAiJXM6OiVzLyVzLyVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgY2F0ZWdvcnlbaV0tPmRf
bmFtZSwgcG5bY10tPmRfbmFtZSwgZWJbZF0tPmRfbmFtZSk7CisJCQkJCQkJfQogCQkJCQl9CisJ
CQkJCXdoaWxlIChkLS0pIGZyZWUoZWJbZF0pOworCQkJCQlmcmVlKGViKTsKKwkJCQl9CisJCQkJ
d2hpbGUgKGItLSkgZnJlZShwbltiXSk7CisJCQkJZnJlZShwbik7CiAJCQl9Ci0JCQl3aGlsZSAo
ZC0tKSBmcmVlKGViW2RdKTsKLQkJCWZyZWUoZWIpOwotCQl9Ci0JCXdoaWxlIChiLS0pIGZyZWUo
cG5bYl0pOwotCQlmcmVlKHBuKTsKLQl9CisJCX0gZWxzZQorCQkJd2FybnAoImNoZGlyIHRvICcl
cycgZmFpbGVkLCBza2lwcGluZyB0aGUgJXMgcmVwb3NpdG9yeSIsIGN1cl9vdmVybGF5LT5wYXRo
LCBjdXJfb3ZlcmxheS0+bmFtZSk7CisKKwl9IHdoaWxlICgoY3VyX292ZXJsYXkgPSBjdXJfb3Zl
cmxheS0+bmV4dCkpOworCiAJZmNsb3NlKGZwKTsKIAl3aGlsZSAoYS0tKSBmcmVlKGNhdGVnb3J5
W2FdKTsKIAlmcmVlKGNhdGVnb3J5KTsKQEAgLTcyMyw3ICs4MTYsNyBAQCBjb25zdCBjaGFyICpp
bml0aWFsaXplX2ZsYXQoaW50IGNhY2hlX3R5CiAKIAl3YXJuKCJGaW5pc2hlZCAldSBlbnRyaWVz
IGluICVkLiUwNmQgc2Vjb25kcyIsIGNvdW50LCBzZWNzLCBmcmFjKTsKIAlpZiAoc2VjcyA+IDEw
MCkKLQkJd2FybigiWW91IHNob3VsZCBjb25zaWRlciBhIGZhc3RlciBmaWxlIHN5c3RlbSBzdWNo
IGFzIHJlaXNlcmZzIGZvciBQT1JURElSPSclcyciLCBwb3J0ZGlyKTsKKwkJd2FybigiWW91IHNo
b3VsZCBjb25zaWRlciBhIGZhc3RlciBmaWxlIHN5c3RlbSBzdWNoIGFzIHJlaXNlcmZzIGZvciBQ
T1JURElSPSclcyciLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiByZXQ6CiAJcmV0dXJuIGNhY2hl
X2ZpbGU7CiB9CkBAIC03MzIsOCArODI1LDggQEAgcmV0OgogCiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKQogewotCWlmICgoY2hkaXIocG9ydGRpcikpICE9IDApIHsKLQkJd2Fy
bnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBwb3J0ZGlyKTsKKwlpZiAoKGNoZGly
KG92ZXJsYXlfZ2VudG9vLT5wYXRoKSkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJ
UiAnJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJcmV0dXJuOwogCX0KIAl1
bmxpbmsoQ0FDSEVfRUJVSUxEX0ZJTEUpOwpAQCAtMTAwNiwxMCArMTA5OSwyMCBAQCBmdWNraXQ6
CiAJcmV0dXJuIGNwZjsKIH0KIAorLyogZnJlZSBvdmVybGF5cyAqLwordm9pZCBmcmVlX292ZXJs
YXlzKG92ZXJsYXlfdCAqb3ZlcmxheSk7Cit2b2lkIGZyZWVfb3ZlcmxheXMob3ZlcmxheV90ICpv
dmVybGF5KQoreworCWlmIChvdmVybGF5LT5uZXh0KQorCQlmcmVlX292ZXJsYXlzKG92ZXJsYXkt
Pm5leHQpOworCWZyZWUob3ZlcmxheSk7Cit9CisKIHZvaWQgY2xlYW51cCgpCiB7CiAJcmVpbml0
aWFsaXplX2FzX25lZWRlZCgpOwogCWZyZWVfc2V0cyh2aXJ0dWFscyk7CisJZnJlZV9vdmVybGF5
cyhvdmVybGF5X2dlbnRvbyk7CiAJZmNsb3NlKHN0ZGVycik7CiB9CiAKZGlmZiAtTmFydXAgcG9y
dGFnZS11dGlscy0yMDA2MTExMS9xLmMgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcS5jCi0t
LSBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL3EuYwkyMDA2LTExLTExIDIzOjM3OjIwLjAwMDAwMDAw
MCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcS5jCTIwMDYtMTEtMTMgMTg6
MjE6MTguNzI1NTI2NjQ3ICswMTAwCkBAIC03LDE1ICs3LDE3IEBACiAgKiBDb3B5cmlnaHQgMjAw
NS0yMDA2IE1pa2UgRnJ5c2luZ2VyICAtIDx2YXBpZXJAZ2VudG9vLm9yZz4KICAqLwogCi0jZGVm
aW5lIFFfRkxBR1MgImlybSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFfRkxBR1MgImlscm0iIENP
TU1PTl9GTEFHUwogc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcV9sb25nX29wdHNbXSA9IHsK
IAl7Imluc3RhbGwiLCAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LAorCXsibHMtb3Zlcmxh
eXMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdsJ30sCiAJeyJyZWluaXRpYWxpemUiLCBub19hcmd1
bWVudCwgTlVMTCwgJ3InfSwKIAl7Im1ldGFjYWNoZSIsICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAn
bSd9LAogCUNPTU1PTl9MT05HX09QVFMKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcV9vcHRzX2hl
bHBbXSA9IHsKIAkiSW5zdGFsbCBzeW1saW5rcyBmb3IgYXBwbGV0cyIsCisJIkxpc3QgY29uZmln
dXJlZCBvdmVybGF5cyIsCiAJIlJlaW5pdGlhbGl6ZSBlYnVpbGQgY2FjaGUiLAogCSJSZWluaXRp
YWxpemUgbWV0YWRhdGEgY2FjaGUiLAogCUNPTU1PTl9PUFRTX0hFTFAKQEAgLTcwLDYgKzcyLDcg
QEAgaW50IHFfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaW50IGk7CiAJY2hhciAqcDsK
IAlBUFBMRVQgZnVuYzsKKwlvdmVybGF5X3QgKiBjdXJfb3ZlcmxheTsKIAogCWlmIChhcmdjID09
IDApCiAJCXJldHVybiAxOwpAQCAtODksNiArOTIsMTUgQEAgaW50IHFfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHEpCiAJCWNhc2UgJ20nOiByZWlu
aXRpYWxpemVfbWV0YWNhY2hlID0gMTsgYnJlYWs7CiAJCWNhc2UgJ3InOiByZWluaXRpYWxpemUg
PSAxOyBicmVhazsKKwkJY2FzZSAnbCc6IHsKKwkJCXByaW50ZigiXG4lc092ZXJsYXkocykgOiVz
XG5cbiIsIEdSRUVOLCBOT1JNKTsKKwkJCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOworCQkJ
ZG8geworCQkJCXByaW50ZigiICAgTmFtZSA6ICVzJS0yMC4yMHMlcyBcdGxvY2F0aW9uIDogJXMl
cyVzXG4iLCBDWUFOLCBjdXJfb3ZlcmxheS0+bmFtZSwgTk9STSwgQ1lBTiwgY3VyX292ZXJsYXkt
PnBhdGgsIE5PUk0pOworCQkJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0
KSk7CisJCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQkJcmV0dXJuIDA7CisJCQl9CiAJCWNhc2Ug
J2knOiB7CiAJCQljaGFyIGJ1ZltfUV9QQVRIX01BWF07CiAJCQkvKiBhbHdheXMgYnplcm8gYSBi
dWZmZXIgYmVmb3JlIHVzaW5nIHJlYWRsaW5rKCkgKi8KZGlmZiAtTmFydXAgcG9ydGFnZS11dGls
cy0yMDA2MTExMS9xY2FjaGUuYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xY2FjaGUuYwot
LS0gcG9ydGFnZS11dGlscy0yMDA2MTExMS9xY2FjaGUuYwkyMDA2LTExLTExIDIzOjM3OjIwLjAw
MDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcWNhY2hlLmMJMjAw
Ni0xMS0xMyAxODoyMToxOC43NDg1MjMxNTAgKzAxMDAKQEAgLTUxMiwxMCArNTEyLDEwIEBAIGlu
dCBxY2FjaGVfdHJhdmVyc2Uodm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAlpbnQgaSwgaiwgaywgbGVu
LCBudW1fY2F0LCBudW1fcGtnLCBudW1fZWJ1aWxkOwogCXN0cnVjdCBkaXJlY3QgKipjYXRlZ29y
aWVzLCAqKnBhY2thZ2VzLCAqKmVidWlsZHM7CiAKLQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3Ry
bGVuKFFDQUNIRV9FREIpICsgc3RybGVuKHBvcnRkaXIpICsgMSk7CisJbGVuID0gc2l6ZW9mKGNo
YXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkg
KyAxKTsKIAljYXRwYXRoID0geG1hbGxvYyhsZW4pOwogCW1lbXNldChjYXRwYXRoLCAwLCBsZW4p
OwotCXNucHJpbnRmKGNhdHBhdGgsIGxlbiwgIiVzJXMiLCBRQ0FDSEVfRURCLCBwb3J0ZGlyKTsK
KwlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgb3ZlcmxheV9nZW50
b28tPnBhdGgpOwogCiAJaWYgKC0xID09IChudW1fY2F0ID0gc2NhbmRpcihjYXRwYXRoLCAmY2F0
ZWdvcmllcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQllcnIoIiVzICVz
IiwgY2F0cGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTUyNywxMCArNTI3LDEwIEBAIGludCBx
Y2FjaGVfdHJhdmVyc2Uodm9pZCAoKmZ1bmMpKHFjYWNoZV8KIAogCS8qIHRyYXZlcnNlIGNhdGVn
b3JpZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhdDsgaSsrKSB7Ci0JCWxlbiA9IHNpemVv
ZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRlZ29y
aWVzW2ldLT5kX25hbWUpICsgMSk7CisJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3Zl
cmxheV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+
ZF9uYW1lKSArIDEpOwogCQlwa2dwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQocGtncGF0
aCwgMCwgbGVuKTsKLQkJc25wcmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBwb3J0ZGlyLCBj
YXRlZ29yaWVzW2ldLT5kX25hbWUpOworCQlzbnByaW50Zihwa2dwYXRoLCBsZW4sICIlcy8lcyIs
IG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYXRlZ29yaWVzW2ldLT5kX25hbWUpOwogCiAJCWlmICgt
MSA9PSAobnVtX3BrZyA9IHNjYW5kaXIocGtncGF0aCwgJnBhY2thZ2VzLCBxY2FjaGVfZmlsZV9z
ZWxlY3QsIGFscGhhc29ydCkpKSB7CiAJCQl3YXJuKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9y
KGVycm5vKSk7CkBAIC01NTIsMTAgKzU1MiwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQg
KCpmdW5jKShxY2FjaGVfCiAKIAkJLyogdHJhdmVyc2UgcGFja2FnZXMgKi8KIAkJZm9yIChqID0g
MDsgaiA8IG51bV9wa2c7IGorKykgewotCQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihw
b3J0ZGlyKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyBz
dHJsZW4oIi8iKSArIHN0cmxlbihwYWNrYWdlc1tqXS0+ZF9uYW1lKSArIDEpOworCQkJbGVuID0g
c2l6ZW9mKGNoYXIpICogKHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi8i
KSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBzdHJsZW4o
cGFja2FnZXNbal0tPmRfbmFtZSkgKyAxKTsKIAkJCWVidWlsZHBhdGggPSB4bWFsbG9jKGxlbik7
CiAJCQltZW1zZXQoZWJ1aWxkcGF0aCwgMCwgbGVuKTsKLQkJCXNucHJpbnRmKGVidWlsZHBhdGgs
IGxlbiwgIiVzLyVzLyVzIiwgcG9ydGRpciwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lLCBwYWNrYWdl
c1tqXS0+ZF9uYW1lKTsKKwkJCXNucHJpbnRmKGVidWlsZHBhdGgsIGxlbiwgIiVzLyVzLyVzIiwg
b3ZlcmxheV9nZW50b28tPnBhdGgsIGNhdGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0t
PmRfbmFtZSk7CiAKIAkJCWlmICgtMSA9PSAobnVtX2VidWlsZCA9IHNjYW5kaXIoZWJ1aWxkcGF0
aCwgJmVidWlsZHMsIHFjYWNoZV9lYnVpbGRfc2VsZWN0LCBxY2FjaGVfdmVyY21wKSkpIHsKIAkJ
CQl3YXJuKCIlcyAlcyIsIGVidWlsZHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC03NzMsMTAg
Kzc3MywxMCBAQCB2b2lkIHFjYWNoZV9zdGF0cyhxY2FjaGVfZGF0YSAqZGF0YSkKIAkJZm9yIChp
ID0gMDsgYXJjaGxpc3RbaV07IGkrKykKIAkJCWFyY2hpdGVjdHVyZXMrKzsKIAotCQlsZW4gPSBz
aXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKHBvcnRkaXIpICsgMSk7
CisJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VEQikgKyBzdHJsZW4ob3Zl
cmxheV9nZW50b28tPnBhdGgpICsgMSk7CiAJCWNhdHBhdGggPSB4bWFsbG9jKGxlbik7CiAJCW1l
bXNldChjYXRwYXRoLCAwLCBsZW4pOwotCQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwg
UUNBQ0hFX0VEQiwgcG9ydGRpcik7CisJCXNucHJpbnRmKGNhdHBhdGgsIGxlbiwgIiVzJXMiLCBR
Q0FDSEVfRURCLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAKIAkJaWYgKC0xID09IChudW1jYXQg
PSBzY2FuZGlyKGNhdHBhdGgsICZjYXRlZ29yaWVzLCBxY2FjaGVfZmlsZV9zZWxlY3QsIGFscGhh
c29ydCkpKSB7CiAJCQllcnIoIiVzICVzIiwgY2F0cGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKQEAg
LTkyOCwxMSArOTI4LDExIEBAIGludCBxY2FjaGVfaW5pdCgpCiAJY2hhciAqZmlsZW5hbWU7CiAJ
dW5zaWduZWQgaW50IGxlbjsKIAotCWxlbiAgICAgID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihw
b3J0ZGlyKSArIHN0cmxlbigiL3Byb2ZpbGVzL2FyY2gubGlzdCIpICsgMSk7CisJbGVuICAgICAg
PSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0cmxlbigi
L3Byb2ZpbGVzL2FyY2gubGlzdCIpICsgMSk7CiAJZmlsZW5hbWUgPSB4bWFsbG9jKGxlbik7CiAK
IAltZW1zZXQoZmlsZW5hbWUsIDAsIGxlbik7Ci0Jc25wcmludGYoZmlsZW5hbWUsIGxlbiwgIiVz
L3Byb2ZpbGVzL2FyY2gubGlzdCIsIHBvcnRkaXIpOworCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4s
ICIlcy9wcm9maWxlcy9hcmNoLmxpc3QiLCBvdmVybGF5X2dlbnRvby0+cGF0aCk7CiAKIAlpZiAo
TlVMTCA9PSAoYXJjaGxpc3QgPSBxY2FjaGVfcmVhZF9saW5lcyhmaWxlbmFtZSkpKSB7CiAJCWZy
ZWUoZmlsZW5hbWUpOwpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL3FncmVwLmMg
cG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcWdyZXAuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2
MTExMS9xZ3JlcC5jCTIwMDYtMTEtMTEgMjM6Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0
YWdlLXV0aWxzLTIwMDYxMTExLm5ldy9xZ3JlcC5jCTIwMDYtMTEtMTMgMTk6MjE6NTcuNjUxMzI1
ODM5ICswMTAwCkBAIC0xMCwxMSArMTAsMTIgQEAKIAogI2lmZGVmIEFQUExFVF9xZ3JlcAogCi0j
ZGVmaW5lIFFHUkVQX0ZMQUdTICJJaUhjZSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFHUkVQX0ZM
QUdTICJJaUhvOmNlIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFn
cmVwX2xvbmdfb3B0c1tdID0gewogCXsiaW52ZXJ0LW1hdGNoIiwgIG5vX2FyZ3VtZW50LCBOVUxM
LCAnSSd9LAogCXsiaWdub3JlLWNhc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LAogCXsi
d2l0aC1maWxlbmFtZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnSCd9LAorCXsib3ZlcmxheSIsICAg
ICAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsiY291bnQiLCAgICAgICAgIG5vX2FyZ3Vt
ZW50LCBOVUxMLCAnYyd9LAogCXsicmVnZXhwIiwgICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAn
ZSd9LAogCUNPTU1PTl9MT05HX09QVFMKQEAgLTIzLDYgKzI0LDcgQEAgc3RhdGljIGNvbnN0IGNo
YXIgKnFncmVwX29wdHNfaGVscFtdID0gewogCSJTZWxlY3Qgbm9uLW1hdGNoaW5nIGxpbmVzIiwK
IAkiSWdub3JlIGNhc2UgZGlzdGluY3Rpb25zIiwKIAkiUHJpbnQgdGhlIGZpbGVuYW1lIGZvciBl
YWNoIG1hdGNoIiwKKwkiT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheSIsCiAJIk9ubHkg
cHJpbnQgYSBjb3VudCBvZiBtYXRjaGluZyBsaW5lcyBwZXIgRklMRSIsCiAJIlVzZSBQQVRURVJO
IGFzIGEgcmVndWxhciBleHByZXNzaW9uIiwKIAlDT01NT05fT1BUU19IRUxQCkBAIC0zNCw3ICsz
Niw5IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlpbnQgaTsK
IAlpbnQgY291bnQgPSAwOwotCWNoYXIgKnA7CisJc2hvcnQgbXllcnJvciA9IDAsIHJlcG8gPSAw
OworCWNoYXIgb3ZlcmxheV9uYW1lWzY0XSwgcmVwb19zZWFyY2hbNjRdOworCWNoYXIgKnAsICpz
dHI7CiAJY2hhciBkb19jb3VudCwgZG9fcmVnZXg7CiAJY2hhciBzaG93X2ZpbGVuYW1lOwogCUZJ
TEUgKmZwOwpAQCAtNDIsMTAgKzQ2LDE1IEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFy
ICoqYXJndikKIAljaGFyIGJ1ZjBbQlVGU0laXTsKIAlpbnQgcmVmbGFncyA9IFJFR19OT1NVQjsK
IAljaGFyIGludmVydF9tYXRjaCA9IDA7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheSwgKm92ZXJs
YXlfdG1wOwogCiAJdHlwZWRlZiBjaGFyICooKkZVTkMpIChjaGFyICosIGNoYXIgKik7CiAJRlVO
QyBzdHJmdW5jID0gKEZVTkMpIHN0cnN0cjsKIAorCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50
b287CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CisKIAlEQkco
ImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJn
YyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CiAKQEAgLTU4LDEyICs2NywyNiBAQCBpbnQgcWdy
ZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlzdHJmdW5jID0gKEZVTkMpIHN0cmNh
c2VzdHI7CiAJCQlyZWZsYWdzIHw9IFJFR19JQ0FTRTsKIAkJCWJyZWFrOworCQljYXNlICdIJzog
c2hvd19maWxlbmFtZSA9IDE7IGJyZWFrOworCQljYXNlICdvJzoKKwkJCXJlcG8gPSAxOworCQkJ
c3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJy
ZWFrOwogCQljYXNlICdjJzogZG9fY291bnQgPSAxOyBicmVhazsKIAkJY2FzZSAnZSc6IGRvX3Jl
Z2V4ID0gMTsgYnJlYWs7Ci0JCWNhc2UgJ0gnOiBzaG93X2ZpbGVuYW1lID0gMTsgYnJlYWs7CiAJ
CUNPTU1PTl9HRVRPUFRTX0NBU0VTKHFncmVwKQogCQl9CiAJfQorCisJaWYgKHJlcG8pIHsKKwkJ
ZG8geworCQkJaWYgKCFzdHJuY21wKGN1cl9vdmVybGF5LT5uYW1lLCByZXBvX3NlYXJjaCwgc2l6
ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSkpCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKChjdXJfb3Zl
cmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQlpZiAoTlVMTCA9PSBjdXJfb3ZlcmxheSkKKwkJ
CWVycigiJXMgOiBVbmtub3duIG92ZXJsYXksIHRyeSAncSAtLWxzLW92ZXJsYXlzJyIsIHJlcG9f
c2VhcmNoKTsKKwl9CisKIAlpZiAoYXJnYyA9PSBvcHRpbmQpCiAJCXFncmVwX3VzYWdlKEVYSVRf
RkFJTFVSRSk7CiAKQEAgLTczLDYgKzk2LDQyIEBAIGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIAkJcmV0dXJuIDE7CiAJd2hpbGUgKChmZ2V0cyhlYnVpbGQsIHNpemVvZihl
YnVpbGQpLCBmcCkpICE9IE5VTEwpIHsKIAkJRklMRSAqbmV3ZnA7CisJCWlmICgocCA9IHN0cmNo
cihlYnVpbGQsICc6JykpKQorCQl7CisJCQkqcCA9IDA7CisJCQlzdHIgPSBwKzI7CQkJLyogc2Vw
YXJhdG9yIGlzICc6OicgKi8KKwkJCXAgPSBlYnVpbGQ7CisJCQlpZiAocmVwbyAmJiBzdHJuY21w
KHJlcG9fc2VhcmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJ
CWlmIChzdHJuY21wKG92ZXJsYXlfbmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpKSB7CisJ
CQkJb3ZlcmxheV90bXA9b3ZlcmxheV9nZW50b287CisJCQkJZG8geworCQkJCQlpZiAoIXN0cm5j
bXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJ
CQkJYnJlYWs7CisJCQkJfSB3aGlsZSAoKG92ZXJsYXlfdG1wPW92ZXJsYXlfdG1wLT5uZXh0KSk7
CisJCQkJaWYgKG92ZXJsYXlfdG1wKSB7CisJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7
CisJCQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+cGF0aCkgIT0gMCkgeworCQkJCQkJd2FybnAo
ImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJ
CQlteWVycm9yPTE7CisJCQkJCX0KKwkJCQl9IGVsc2UKKwkJCQkJbXllcnJvcj0xOworCisJCQkJ
c3RybmNweShvdmVybGF5X25hbWUsIHAsIHNpemVvZihvdmVybGF5X25hbWUpKTsKKwkJCX0KKwkJ
CXN0cmNweShlYnVpbGQsIHN0cik7CisJCX0gZWxzZQorCQkJbXllcnJvcj0xOworCisJCWlmICht
eWVycm9yKSB7CisJCQlpZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQl3YXJuZigiKGNhY2hlIHVwZGF0
ZSBwZW5kaW5nKSAlcyA6IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlfbmFtZSk7CisJCQlyZWlu
aXRpYWxpemUgPSAxOworCQkJbXllcnJvcj0wOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAo
KHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJaWYgKChu
ZXdmcCA9IGZvcGVuKGVidWlsZCwgInIiKSkgIT0gTlVMTCkgewpAQCAtMTAyLDcgKzE2MSw3IEBA
IGludCBxZ3JlcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQljb3VudCsrOwogCQkJ
CWlmIChkb19jb3VudCkgY29udGludWU7CiAJCQkJaWYgKHZlcmJvc2UgfHwgc2hvd19maWxlbmFt
ZSkgewotCQkJCQlwcmludGYoIiVzOiIsIGVidWlsZCk7CisJCQkJCXByaW50ZigiJXM6OiVzOiIs
IGN1cl9vdmVybGF5LT5uYW1lLCBlYnVpbGQpOwogCQkJCQlpZiAodmVyYm9zZSA+IDEpIHByaW50
ZigiJWQ6IiwgbGluZW5vKTsKIAkJCQkJcHJpbnRmKCIgIik7CiAJCQkJfQpkaWZmIC1OYXJ1cCBw
b3J0YWdlLXV0aWxzLTIwMDYxMTExL3FzZWFyY2guYyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5l
dy9xc2VhcmNoLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcXNlYXJjaC5jCTIwMDYtMTEt
MTEgMjM6Mzc6MjAuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5l
dy9xc2VhcmNoLmMJMjAwNi0xMS0xMyAxOToyMTo0OS4zODY1ODIyNzEgKzAxMDAKQEAgLTksMTAg
KzksMTIgQEAKIAogI2lmZGVmIEFQUExFVF9xc2VhcmNoCiAKLSNkZWZpbmUgUVNFQVJDSF9GTEFH
UyAiYWNzU05IIiBDT01NT05fRkxBR1MKKyNkZWZpbmUgUVNFQVJDSF9GTEFHUyAiYWNvOnBzU05I
IiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFzZWFyY2hfbG9uZ19v
cHRzW10gPSB7CiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2EnfSwKIAl7ImNh
Y2hlIiwgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAorCXsib3ZlcmxheSIsICAgIGFfYXJn
dW1lbnQsIE5VTEwsICdvJ30sCisJeyJzaG93LXBhdGgiLCBub19hcmd1bWVudCwgTlVMTCwgJ3An
fSwKIAl7InNlYXJjaCIsICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAogCXsiZGVzYyIsICAg
ICAgIGFfYXJndW1lbnQsIE5VTEwsICdTJ30sCiAJeyJuYW1lLW9ubHkiLCBub19hcmd1bWVudCwg
TlVMTCwgJ04nfSwKQEAgLTIyLDYgKzI0LDggQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3Qg
cXNlYXJjaF9sb25nXwogc3RhdGljIGNvbnN0IGNoYXIgKnFzZWFyY2hfb3B0c19oZWxwW10gPSB7
CiAJIkxpc3QgdGhlIGRlc2NyaXB0aW9ucyBvZiBldmVyeSBwYWNrYWdlIGluIHRoZSBjYWNoZSIs
CiAJIlVzZSB0aGUgcG9ydGFnZSBjYWNoZSIsCisJIlNlYXJjaCBvbmx5IGluIHRoZSA8YXJnPiBv
dmVybGF5IiwKKwkiU2hvdyB0aGUgcGF0aCB0byB0aGUgZWJ1aWxkIiwKIAkiUmVnZXggc2VhcmNo
IHBhY2thZ2UgYmFzZW5hbWVzIiwKIAkiUmVnZXggc2VhcmNoIHBhY2thZ2UgZGVzY3JpcHRpb25z
IiwKIAkiT25seSBzaG93IHBhY2thZ2UgbmFtZSIsCkBAIC00MCwxMyArNDQsMjAgQEAgaW50IHFz
ZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhciBsYXN0WzEyNl0gPSAiIjsK
IAljaGFyIGRwWzEyNl0gPSAiIjsKIAljaGFyIGJwWzEyNl0gPSAiIjsKLQljaGFyICpwLCAqcSwg
KnN0cjsKKwlzaG9ydCByZXBvID0gMDsKKwljaGFyIHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyICpw
LCAqcSwgKnN0ciwgb3ZlcmxheV9uYW1lWzY0XTsKIAljaGFyICpzZWFyY2hfbWUgPSBOVUxMOwot
CWNoYXIgc2hvd19ob21lcGFnZSA9IDAsIHNob3dfbmFtZV9vbmx5ID0gMDsKKwljaGFyIHNob3df
aG9tZXBhZ2UgPSAwLCBzaG93X25hbWVfb25seSA9IDAsIHNob3dfcGF0aF90b19lYnVpbGQgPSAw
OwogCWNoYXIgc2VhcmNoX2Rlc2MgPSAwLCBzZWFyY2hfYWxsID0gMCwgc2VhcmNoX25hbWUgPSAx
LCBzZWFyY2hfY2FjaGUgPSBDQUNIRV9FQlVJTEQ7CiAJY29uc3QgY2hhciAqc2VhcmNoX3ZhcnNb
XSA9IHsgIkRFU0NSSVBUSU9OPSIsICJIT01FUEFHRT0iIH07CiAJc2l6ZV90IHNlYXJjaF9sZW47
Ci0JaW50IGksIGlkeD0wOworCW92ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3RtcDsK
KwlpbnQgaSwgaWR4PTAsIG15ZXJyb3I9MDsKKworCWN1cl9vdmVybGF5ID0gb3ZlcmxheV9nZW50
b287CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAKIAlEQkco
ImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlswXSwgYXJn
YyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CkBAIC01Niw2ICs2Nyw4IEBAIGludCBxc2VhcmNo
X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxc2Vh
cmNoKQogCQljYXNlICdhJzogc2VhcmNoX2FsbCA9IDE7IGJyZWFrOwogCQljYXNlICdjJzogc2Vh
cmNoX2NhY2hlID0gQ0FDSEVfTUVUQURBVEE7IGJyZWFrOworCQljYXNlICdvJzogcmVwbyA9IDE7
IHN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7IGJyZWFr
OworCQljYXNlICdwJzogc2hvd19wYXRoX3RvX2VidWlsZCA9IDE7IGJyZWFrOwogCQljYXNlICdz
Jzogc2VhcmNoX2Rlc2MgPSAwOyBzZWFyY2hfbmFtZSA9IDE7IGJyZWFrOwogCQljYXNlICdTJzog
c2VhcmNoX2Rlc2MgPSAxOyBzZWFyY2hfbmFtZSA9IDA7IGJyZWFrOwogCQljYXNlICdOJzogc2hv
d19uYW1lX29ubHkgPSAxOyBicmVhazsKQEAgLTYzLDYgKzc2LDE2IEBAIGludCBxc2VhcmNoX21h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCisJaWYgKHJlcG8pIHsKKwkJZG8g
eworCQkJaWYgKCEgc3RybmNtcChjdXJfb3ZlcmxheS0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVv
ZihjdXJfb3ZlcmxheS0+bmFtZSkpKQorCQkJCWJyZWFrOworCQl9IHdoaWxlICgoY3VyX292ZXJs
YXk9Y3VyX292ZXJsYXktPm5leHQpKTsKKwkJaWYgKE5VTEwgPT0gY3VyX292ZXJsYXkpCisJCQll
cnIoIiVzIDogVW5rbm93biBvdmVybGF5LCB0cnkgJ3EgLS1scy1vdmVybGF5cyciLCByZXBvX3Nl
YXJjaCk7CisJfQorCisKIAlpZiAoc2VhcmNoX2FsbCkgewogCQlzZWFyY2hfZGVzYyA9IDE7CiAJ
CXNlYXJjaF9uYW1lID0gMDsKQEAgLTkzLDExICsxMTYsMjIgQEAgaW50IHFzZWFyY2hfbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlpZiAoKHBjYWNoZSA9IGNhY2hlX3JlYWRfZmlsZShl
YnVpbGQpKSAhPSBOVUxMKSB7CiAJCQkJaWYgKChzdHJjbXAocGNhY2hlLT5hdG9tLT5QTiwgbGFz
dCkpICE9IDApIHsKIAkJCQkJc3RybmNweShsYXN0LCBwY2FjaGUtPmF0b20tPlBOLCBzaXplb2Yo
bGFzdCkpOwotCQkJCQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2Fj
aGUtPkRFU0NSSVBUSU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgPT0g
MCkKLQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsIEJPTEQsIHBjYWNoZS0+YXRvbS0+
Q0FURUdPUlksIEJMVUUsCi0JCQkJCQkgICAgICAgcGNhY2hlLT5hdG9tLT5QTiwgTk9STSwKLQkJ
CQkJCSAgICAgICAoc2hvd19uYW1lX29ubHkgPyAiIiA6Ci0JCQkJCQkgICAgICAgIChzaG93X2hv
bWVwYWdlID8gcGNhY2hlLT5IT01FUEFHRSA6IHBjYWNoZS0+REVTQ1JJUFRJT04pKSk7CisJCQkJ
CWlmICgocmVtYXRjaChzZWFyY2hfbWUsIChzZWFyY2hfZGVzYyA/IHBjYWNoZS0+REVTQ1JJUFRJ
T04gOiBlYnVpbGQpLCBSRUdfRVhURU5ERUQgfCBSRUdfSUNBU0UpKSA9PSAwKSB7CisJCQkJCQlp
ZiAoc2hvd19wYXRoX3RvX2VidWlsZCkgeworCQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXM6OiVz
XHQgJXMlcy8lcy9cbiIsCisJCQkJCQkJQk9MRCwgcGNhY2hlLT5hdG9tLT5DQVRFR09SWSwKKwkJ
CQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAorCQkJCQkJCVlFTExPVyxjdXJfb3ZlcmxheS0+
bmFtZSwgTk9STSwKKwkJCQkJCQljdXJfb3ZlcmxheS0+cGF0aCwgZGlybmFtZShlYnVpbGQpKTsK
KwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXMgJXMlc1xuIiwK
KwkJCQkJCQlCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLAorCQkJCQkJCUJMVUUsIHBjYWNo
ZS0+YXRvbS0+UE4sCisJCQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAorCQkJ
CQkJCShzaG93X25hbWVfb25seSA/ICIiIDoKKwkJCQkJCQkoc2hvd19ob21lcGFnZSA/IHBjYWNo
ZS0+SE9NRVBBR0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQkJfQorCQkJCQl9CiAJ
CQkJfQogCQkJCWNhY2hlX2ZyZWUocGNhY2hlKTsKIAkJCX0gZWxzZSB7CkBAIC0xMTAsNiArMTQ0
LDQ0IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCWNhc2Ug
Q0FDSEVfRUJVSUxEOiB7CiAJCQlGSUxFICplYnVpbGRmcDsKKwkJCWlmICgocCA9IHN0cmNocihl
YnVpbGQsICc6JykpKQorCQkJeworCQkJCSpwID0gMDsKKwkJCQlzdHIgPSBwKzI7CQkJLyogc2Vw
YXJhdG9yIGlzICc6OicgKi8KKwkJCQlwID0gZWJ1aWxkOworCQkJCWlmIChyZXBvICYmIHN0cm5j
bXAocmVwb19zZWFyY2gsIHAsIHNpemVvZihyZXBvX3NlYXJjaCkpKQorCQkJCQljb250aW51ZTsK
KwkJCQlpZiAoc3RybmNtcChvdmVybGF5X25hbWUsIHAsIHNpemVvZihvdmVybGF5X25hbWUpKSkg
eworCQkJCQlsYXN0WzBdID0gMDsKKwkJCQkJb3ZlcmxheV90bXA9b3ZlcmxheV9nZW50b287CisJ
CQkJCWRvIHsKKwkJCQkJCWlmICghc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9m
KG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0gd2hpbGUgKChvdmVy
bGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCisJCQkJCWlmIChvdmVybGF5X3RtcCkgewor
CQkJCQkJY3VyX292ZXJsYXkgPSBvdmVybGF5X3RtcDsKKwkJCQkJCWlmIChjaGRpcihjdXJfb3Zl
cmxheS0+cGF0aCkgIT0gMCkgeworCQkJCQkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZhaWxlZCIs
IGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkJCQlteWVycm9yPTE7CisJCQkJCQl9CisJCQkJCX0g
ZWxzZQorCQkJCQkJbXllcnJvcj0xOworCisJCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBwLCBz
aXplb2Yob3ZlcmxheV9uYW1lKSk7CisJCQkJfQorCQkJCXN0cmNweShlYnVpbGQsIHN0cik7CisJ
CQl9IGVsc2UKKwkJCQlteWVycm9yPTE7CisKKwkJCWlmIChteWVycm9yKSB7CisJCQkJaWYgKCFy
ZWluaXRpYWxpemUpCisJCQkJCXdhcm5mKCIoY2FjaGUgdXBkYXRlIHBlbmRpbmcpICVzIDogVW5r
bm93biBvdmVybGF5Iiwgb3ZlcmxheV9uYW1lKTsKKwkJCQlyZWluaXRpYWxpemUgPSAxOworCQkJ
CW15ZXJyb3I9MDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwogCQkJc3RyID0geHN0cmR1cChlYnVp
bGQpOwogCQkJcCA9IChjaGFyICopIGRpcm5hbWUoc3RyKTsKIApAQCAtMTM0LDkgKzIwNiwxNyBA
QCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJCQkvLyBkb2lu
ZyBvcGVyYXRpb25zIHdpdGggdGhlbS4KIAkJCQkJCQlzdHJuY3B5KGRwLCBwLCBzaXplb2YoZHAp
KTsKIAkJCQkJCQlzdHJuY3B5KGJwLCBwLCBzaXplb2YoYnApKTsKLQkJCQkJCQlwcmludGYoIiVz
JXMvJXMlcyVzICVzXG4iLAotCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5h
bWUoYnApLCBOT1JNLAorCQkJCQkJCWlmIChzaG93X3BhdGhfdG9fZWJ1aWxkKSB7CisJCQkJCQkJ
CXByaW50ZigiJXMlcy8lcyVzJXM6OiVzXHQgJXMlcy8lcy9cbiIsCisJCQkJCQkJCUJPTEQsIGRp
cm5hbWUoZHApLCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3Zlcmxh
eS0+bmFtZSwgTk9STSwKKwkJCQkJCQkJY3VyX292ZXJsYXktPnBhdGgsIGRpcm5hbWUoZWJ1aWxk
KSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXMgJXMl
c1xuIiwKKwkJCQkJCQkJQk9MRCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwKKwkJ
CQkJCQkJWUVMTE9XLGN1cl9vdmVybGF5LT5uYW1lLCBOT1JNLAogCQkJCQkJCQkoc2hvd19uYW1l
X29ubHkgPyAiIiA6IHEpKTsKKwkJCQkJCQl9CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAJCQkJ
CX0KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9xdXNlLmMgcG9ydGFnZS11dGls
cy0yMDA2MTExMS5uZXcvcXVzZS5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL3F1c2UuYwky
MDA2LTExLTExIDIzOjM3OjIxLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2
MTExMS5uZXcvcXVzZS5jCTIwMDYtMTEtMTMgMTk6MjE6MzcuODMwMzM5MDg3ICswMTAwCkBAIC0x
NCwxMCArMTQsMTEgQEAKICBxdXNlIC1LZSAtLSAgbmxzCiAqLwogCi0jZGVmaW5lIFFVU0VfRkxB
R1MgImVhdktMREY6TiIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFVU0VfRkxBR1MgImVhbzp2S0xE
RjpOIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHF1c2VfbG9uZ19v
cHRzW10gPSB7CiAJeyJleGFjdCIsICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAl7ImFs
bCIsICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAorCXsib3ZlcmxheSIsICAgIGFfYXJn
dW1lbnQsIE5VTEwsICdvJ30sCiAJeyJrZXl3b3JkcyIsICBub19hcmd1bWVudCwgTlVMTCwgJ0sn
fSwKIAl7ImxpY2Vuc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnTCd9LAogCXsiZGVzY3JpYmUi
LCAgbm9fYXJndW1lbnQsIE5VTEwsICdEJ30sCkBAIC0yOCw2ICsyOSw3IEBAIHN0YXRpYyBzdHJ1
Y3Qgb3B0aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHQKIHN0YXRpYyBjb25zdCBjaGFyICpxdXNlX29w
dHNfaGVscFtdID0gewogCSJTaG93IGV4YWN0IG5vbiByZWdleHAgbWF0Y2hpbmcgdXNpbmcgc3Ry
Y21wIiwKIAkiU2hvdyBhbm5veWluZyB0aGluZ3MgaW4gSVVTRSIsCisJIk9ubHkgY29uc2lkZXIg
dGhlIDxhcmc+IG92ZXJsYXkiLAogCSJVc2UgdGhlIEtFWVdPUkRTIHZzIElVU0UiLAogCSJVc2Ug
dGhlIExJQ0VOU0UgdnMgSVVTRSIsCiAJIkRlc2NyaWJlIHRoZSBVU0UgZmxhZyIsCkBAIC0zOCw3
ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxdXNlX29wdHNfaGVscFtdID0gewogc3RhdGlj
IGNvbnN0IGNoYXIgcXVzZV9yY3NpZFtdID0gIiRJZDogcXVzZS5jLHYgMS41MyAyMDA2LzExLzA5
IDAwOjE4OjA1IHZhcGllciBFeHAgJCI7CiAjZGVmaW5lIHF1c2VfdXNhZ2UocmV0KSB1c2FnZShy
ZXQsIFFVU0VfRkxBR1MsIHF1c2VfbG9uZ19vcHRzLCBxdXNlX29wdHNfaGVscCwgbG9va3VwX2Fw
cGxldF9pZHgoInF1c2UiKSkKIAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQg
YXJnYywgY2hhciAqKmFyZ3YpOworaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBzaG9y
dCByZXBvLCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJndik7CiAKIGNo
YXIgcXVzZV9uYW1lX29ubHkgPSAwOwogCkBAIC04MSw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHBy
aW50X2hpZ2hsaWdodGVkX3VzZV9mbGFncygKIAl9CiB9CiAKLWludCBxdXNlX2Rlc2NyaWJlX2Zs
YWcoaW50IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IHF1c2VfZGVzY3JpYmVfZmxh
ZyhpbnQgaW5kLCBzaG9ydCByZXBvLCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFy
ICoqYXJndikKIHsKICNkZWZpbmUgTlVNX1NFQVJDSF9GSUxFUyBBUlJfU0laRShzZWFyY2hfZmls
ZXMpCiAJY2hhciBidWZbQlVGU0laRV0sICpwOwpAQCAtOTEsMTIxICs5MywxNjIgQEAgaW50IHF1
c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYwogCUZJTEUgKmZwW05VTV9TRUFSQ0hf
RklMRVNdOwogCURJUiAqZDsKIAlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlvdmVybGF5X3QgKmN1cl9v
dmVybGF5OwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgewotCQlz
bnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvJXMiLCBwb3J0ZGlyLCBzZWFy
Y2hfZmlsZXNbaV0pOwotCQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQot
CQkJd2FybnAoInNraXBwaW5nICVzIiwgc2VhcmNoX2ZpbGVzW2ldKTsKLQl9CisJY3VyX292ZXJs
YXk9b3ZlcmxheV9nZW50b287CiAKLQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspIHsKLQkJ
cyA9IHN0cmxlbihhcmd2W2ldKTsKKwlkbyB7CisJCWlmIChyZXBvICYmIHN0cm5jbXAocmVwb19z
ZWFyY2gsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCWNvbnRp
bnVlOworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytpKSB7CisJCQlzbnBy
aW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvJXMiLCBjdXJfb3ZlcmxheS0+cGF0
aCwgc2VhcmNoX2ZpbGVzW2ldKTsKKwkJCWlmICgoZnBbaV0gPSBmb3BlbihidWYsICJyIikpID09
IE5VTEwpCisJCQkJaWYgKHZlcmJvc2UgKQorCQkJCQl3YXJucCgic2tpcHBpbmcgJXMgZm9yIHRo
ZSAlcyBvdmVybGF5Iiwgc2VhcmNoX2ZpbGVzW2ldLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCX0K
IAotCQlmb3IgKGYgPSAwOyBmIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7Ci0JCQlpZiAoZnBb
Zl0gPT0gTlVMTCkKLQkJCQljb250aW51ZTsKKwkJZm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsr
KSB7CisJCQlzID0gc3RybGVuKGFyZ3ZbaV0pOwogCi0JCQl3aGlsZSAoZmdldHMoYnVmLCBzaXpl
b2YoYnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKLQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZb
MF0gPT0gJ1xuJykKKwkJCWZvciAoZiA9IDA7IGYgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIHsK
KwkJCQlpZiAoZnBbZl0gPT0gTlVMTCkKIAkJCQkJY29udGludWU7CiAKLQkJCQlpZiAoKHAgPSBz
dHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJCSpwID0gJ1wwJzsKKwkJCQl3aGlsZSAo
ZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKKwkJCQkJaWYgKGJ1Zlsw
XSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCQljb250aW51ZTsKIAotCQkJCXN3aXRj
aCAoZikgewotCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1c2UuZGVzYyAqLwotCQkJCQkJaWYgKCFz
dHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCi0JCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVm
W3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCXByaW50ZigiICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xu
IiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7Ci0JCQkJCQkJCWdv
dG8gc2tpcF9maWxlOwotCQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQlpZiAoKHAgPSBzdHJy
Y2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCisJCQkJCQkqcCA9ICdcMCc7CiAKLQkJCQkJY2FzZSAx
OiAvKiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLwotCQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1Ziwg
JzonKSkgPT0gTlVMTCkKKwkJCQkJc3dpdGNoIChmKSB7CisJCQkJCQljYXNlIDA6IC8qIEdsb2Jh
bCB1c2UuZGVzYyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJ
CQkJCQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlm
IChjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlwcmludGYoIiAlc2ds
b2JhbCVzOiVzJXMlczogJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1
ZitzKzMpOworCQkJCQkJCQkJZWxzZQorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNnbG9iYWwl
czolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJ
fQogCQkJCQkJCWJyZWFrOwotCQkJCQkJKytwOwotCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFyZ3Zb
aV0sIHMpKSB7Ci0JCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysxXSA9PSAnLScpIHsKLQkJ
CQkJCQkJKnAgPSAnXDAnOwotCQkJCQkJCQlwcmludGYoIiAlc2xvY2FsJXM6JXMlcyVzOiVzJXMl
cyAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JN
LCBwK3MrMyk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJYnJlYWs7CiAKLQkJCQkJY2FzZSAy
OiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLwotCQkJCQkJaWYgKCFzdHJjbXAoYnVmLCBh
cmd2W2ldKSkgewotCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMlczogJXMgYXJjaGl0ZWN0
dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBhcmd2W2ldKTsKLQkJCQkJ
CQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAxOiAv
KiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLworCQkJCQkJCWlmICgocCA9IHN0cmNocihidWYsICc6
JykpID09IE5VTEwpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCSsrcDsKKwkJCQkJCQlpZiAoIXN0
cm5jbXAocCwgYXJndltpXSwgcykpIHsKKwkJCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysx
XSA9PSAnLScpIHsKKwkJCQkJCQkJCSpwID0gJ1wwJzsKKwkJCQkJCQkJCWlmIChjdXJfb3Zlcmxh
eSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlwcmludGYoIiAlc2xvY2FsJXM6JXMlcyVz
OiVzJXMlcyAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVm
LCBOT1JNLCBwK3MrMyk7CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAl
c2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIE5P
Uk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJCQkJ
CQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOwogCi0JCQkJCWNhc2UgMzogLyogTGFuZ3VhZ2Vz
IGxhbmcuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCi0JCQkJ
CQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCXByaW50
ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2
W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBhcmNo
Lmxpc3QgKi8KKwkJCQkJCQlpZiAoIXN0cmNtcChidWYsIGFyZ3ZbaV0pKSB7CisJCQkJCQkJCWlm
IChjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCXByaW50ZigiICVzYXJj
aCVzOiVzJXMlczogJXMgYXJjaGl0ZWN0dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ld
LCBOT1JNLCBhcmd2W2ldKTsKKwkJCQkJCQkJZWxzZQorCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAl
c2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJP
TEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwogCQkJCQkJCQlnb3RvIHNr
aXBfZmlsZTsKIAkJCQkJCQl9Ci0JCQkJCQlicmVhazsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJ
Y2FzZSAzOiAvKiBMYW5ndWFnZXMgbGFuZy5kZXNjICovCisJCQkJCQkJaWYgKCFzdHJuY21wKGJ1
ZiwgYXJndltpXSwgcykpCisJCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09
ICctJykgeworCQkJCQkJCQkJaWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vKQorCQkJ
CQkJCQkJCXByaW50ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBCT0xELCBOT1JN
LCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJ
CQlwcmludGYoIiAoJXMpICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBjdXJfb3Zlcmxh
eS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJ
CQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQl9CiAJ
CQkJfQotCQkJfQogCiBza2lwX2ZpbGU6Ci0JCQlyZXdpbmQoZnBbZl0pOworCQkJCXJld2luZChm
cFtmXSk7CisJCQl9CisKKwkJCWlmIChpID09IChhcmdjIC0gMSkpCisJCQkJZm9yIChmPTA7IGY8
TlVNX1NFQVJDSF9GSUxFUzsgKytmKQorCQkJCQlpZiAoZnBbZl0pIHsKKwkJCQkJCWZjbG9zZShm
cFtmXSk7CisJCQkJCQlmcFtmXSA9IE5VTEw7CisJCQkJCX0KIAkJfQotCX0KIAotCWZvciAoZj0w
OyBmPE5VTV9TRUFSQ0hfRklMRVM7ICsrZikKLQkJZmNsb3NlKGZwW2ZdKTsKKwl9IHdoaWxlICgo
Y3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAogCS8qIG5vdyBzY2FuIHRoZSBkZXNj
IGRpciAqLwotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNjLyIs
IHBvcnRkaXIpOwotCWQgPSBvcGVuZGlyKGJ1Zik7Ci0Jd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkp
ICE9IE5VTEwpIHsKLQkJaWYgKHN0cmNtcChkZS0+ZF9uYW1lK3N0cmxlbihkZS0+ZF9uYW1lKS01
LCAiLmRlc2MiKSkKKwljdXJfb3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKKwlkbyB7CisJCWlmIChy
ZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2YocmVw
b19zZWFyY2gpKSkKIAkJCWNvbnRpbnVlOwotCi0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks
ICIlcy9wcm9maWxlcy9kZXNjLyVzIiwgcG9ydGRpciwgZGUtPmRfbmFtZSk7Ci0JCWlmICgoZnBb
MF09Zm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKSB7Ci0JCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAn
JXMnIGZvciByZWFkaW5nOyBza2lwcGluZyIsIGRlLT5kX25hbWUpOworCQlzbnByaW50ZihidWYs
IHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8iLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJ
CWlmICghKGQgPSBvcGVuZGlyKGJ1ZikpKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQl3YXJuKCJD
b3VsZCBub3Qgb3BlbiAlcyAtPiBza2lwcGluZyIsIGJ1Zik7CiAJCQljb250aW51ZTsKIAkJfQor
CQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgeworCQkJaWYgKHN0cmNtcChkZS0+
ZF9uYW1lK3N0cmxlbihkZS0+ZF9uYW1lKS01LCAiLmRlc2MiKSkKKwkJCQljb250aW51ZTsKIAot
CQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbMF0pICE9IE5VTEwpIHsKLQkJCWlm
IChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4nKQorCQkJc25wcmludGYoYnVmLCBzaXpl
b2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvJXMiLCBjdXJfb3ZlcmxheS0+cGF0aCwgZGUtPmRf
bmFtZSk7CisJCQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkgeworCQkJCXdh
cm4oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmc7IHNraXBwaW5nIiwgZGUtPmRfbmFt
ZSk7CiAJCQkJY29udGludWU7CisJCQl9CiAKLQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4n
KSkgIT0gTlVMTCkKLQkJCQkqcCA9ICdcMCc7CisJCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2Yo
YnVmKSwgZnBbMF0pICE9IE5VTEwpIHsKKwkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0g
PT0gJ1xuJykKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xu
JykpICE9IE5VTEwpCisJCQkJCSpwID0gJ1wwJzsKIAotCQkJaWYgKChwID0gc3RyY2hyKGJ1Ziwg
Jy0nKSkgPT0gTlVMTCkgeworCQkJCWlmICgocCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwp
IHsKIGludmFsaWRfbGluZToKLQkJCQl3YXJuKCJJbnZhbGlkIGxpbmUgaW4gJyVzJzogJXMiLCBk
ZS0+ZF9uYW1lLCBidWYpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJd2hpbGUgKHBbLTFdICE9
ICcgJyAmJiBwWzFdICE9ICcgJykgewotCQkJCS8qIG1heWJlIHRoZSBmbGFnIGhhcyBhICctJyBp
biBpdCAuLi4gKi8KLQkJCQlpZiAoKHAgPSBzdHJjaHIocCsxLCAnLScpKSA9PSBOVUxMKQotCQkJ
CQlnb3RvIGludmFsaWRfbGluZTsKLQkJCX0KLQkJCXBbLTFdID0gJ1wwJzsKLQkJCXAgKz0gMjsK
KwkJCQkJd2FybigiSW52YWxpZCBsaW5lIGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsK
KwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsxXSAh
PSAnICcpIHsKKwkJCQkJLyogbWF5YmUgdGhlIGZsYWcgaGFzIGEgJy0nIGluIGl0IC4uLiAqLwor
CQkJCQlpZiAoKHAgPSBzdHJjaHIocCsxLCAnLScpKSA9PSBOVUxMKQorCQkJCQkJZ290byBpbnZh
bGlkX2xpbmU7CisJCQkJfQorCQkJCXBbLTFdID0gJ1wwJzsKKwkJCQlwICs9IDI7CiAKLQkJCWZv
ciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykKLQkJCQlpZiAoIXN0cmNtcChhcmd2W2ldLCBidWYp
KQotCQkJCQlwcmludGYoIiAlcyVzJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwg
Tk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7Ci0JCX0KLQkJY2xvc2UoZik7Ci0JfQotCWNs
b3NlZGlyKGQpOworCQkJCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykKKwkJCQkJaWYgKCFz
dHJjbXAoYXJndltpXSwgYnVmKSkgeworCQkJCQkJaWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlf
Z2VudG9vKQorCQkJCQkJCXByaW50ZigiICVzJXMlczolcyVzJXM6ICVzXG4iLCBCT0xELCBkZS0+
ZF9uYW1lLCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKKwkJCQkJCWVsc2UKKwkJCQkJ
CQlwcmludGYoIiAoJXMpICVzJXMlczolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwg
Qk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7CisJCQkJCX0K
IAorCQkJfQorCQkJZmNsb3NlKGZwWzBdKTsKKwkJfQorCQljbG9zZWRpcihkKTsKKwl9IHdoaWxl
ICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50
IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJRklMRSAqZnA7Ci0JY2hhciAq
cDsKKwljaGFyICpwLCAqc3RyOworCXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsKKwljaGFy
IHJlcG9fc2VhcmNoWzY0XTsKKwljaGFyIG92ZXJsYXlfbmFtZVs2NF07CiAKIAljaGFyIGJ1ZjBb
X1FfUEFUSF9NQVhdOwogCWNoYXIgYnVmMVtfUV9QQVRIX01BWF07CkBAIC0yMTgsNiArMjYxLDEx
IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXNob3J0IHF1c2VfYWxs
ID0gMDsKIAlpbnQgcmVnZXhwX21hdGNoaW5nID0gMSwgaSwgaWR4ID0gMDsKIAlzaXplX3Qgc2Vh
cmNoX2xlbjsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisKKwljdXJf
b3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJcmVwb19z
ZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIsCiAJ
ICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwpAQCAtMjI2
LDYgKzI3NCwxMCBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc3dp
dGNoIChpKSB7CiAJCWNhc2UgJ2UnOiByZWdleHBfbWF0Y2hpbmcgPSAwOyBicmVhazsKIAkJY2Fz
ZSAnYSc6IHF1c2VfYWxsID0gMTsgYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJcmVwbyA9IDE7CisJ
CQlzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcsIHNpemVvZihyZXBvX3NlYXJjaCkpOworCQkJ
YnJlYWs7CiAJCWNhc2UgJ0snOiBpZHggPSAxOyBicmVhazsKIAkJY2FzZSAnTCc6IGlkeCA9IDI7
IGJyZWFrOwogCQljYXNlICdEJzogaWR4ID0gLTE7IGJyZWFrOwpAQCAtMjM0LDExICsyODYsMjQg
QEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCUNPTU1PTl9HRVRPUFRT
X0NBU0VTKHF1c2UpCiAJCX0KIAl9Ci0JaWYgKGFyZ2MgPT0gb3B0aW5kICYmICFxdXNlX2FsbCAm
JiBpZHggPj0gMCkKKworCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghc3RybmNtcChjdXJf
b3ZlcmxheS0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpKQor
CQkJCWJyZWFrOworCQl9IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsK
KwkJaWYgKE5VTEwgPT0gY3VyX292ZXJsYXkpCisJCQllcnIoIiVzIDogVW5rbm93biBvdmVybGF5
LCB0cnkgJ3EgLS1scy1vdmVybGF5cyciLCByZXBvX3NlYXJjaCk7CisJfQorCisJaWYgKGFyZ2Mg
PT0gb3B0aW5kICYmICFxdXNlX2FsbCAmJiBpZHggPj0gMCkgeworCQlpZiAoaWR4ID09IDMpCisJ
CQlmcmVlKHNlYXJjaF92YXJzK2lkeCk7CiAJCXF1c2VfdXNhZ2UoRVhJVF9GQUlMVVJFKTsKKwl9
CiAKIAlpZiAoaWR4ID09IC0xKQotCQlyZXR1cm4gcXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwg
YXJnYywgYXJndik7CisJCXJldHVybiBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCByZXBvLCBy
ZXBvX3NlYXJjaCwgYXJnYywgYXJndik7CiAKIAlpZiAocXVzZV9hbGwpIG9wdGluZCA9IGFyZ2M7
CiAJaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCgpOwkvKiBzZXRzIG91ciBwd2QgdG8gJFBPUlRESVIg
Ki8KQEAgLTI1MCw2ICszMTUsNDMgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFy
Z3YpCiAJCXJldHVybiAxOwogCXdoaWxlICgoZmdldHMoZWJ1aWxkLCBzaXplb2YoZWJ1aWxkKSwg
ZnApKSAhPSBOVUxMKSB7CiAJCUZJTEUgKm5ld2ZwOworCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxk
LCAnOicpKSkKKwkJeworCQkJKnAgPSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBp
cyAnOjonICovCisJCQlwID0gZWJ1aWxkOworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3Nl
YXJjaCwgcCwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc3Ry
bmNtcChvdmVybGF5X25hbWUsIHAsIHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCW92ZXJs
YXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCWRvIHsKKwkJCQkJaWYgKCFzdHJuY21wKG92ZXJs
YXlfdG1wLT5uYW1lLCBwLCBzaXplb2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFr
OworCQkJCX0gd2hpbGUgKChvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCQkJCWlm
IChvdmVybGF5X3RtcCkKKwkJCQl7CisJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7CisJ
CQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+cGF0aCkgIT0gMCkgeworCQkJCQkJd2FybnAoImNo
ZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJCQlt
eWVycm9yPTE7CisJCQkJCX0KKwkJCQl9IGVsc2UKKwkJCQkJbXllcnJvcj0xOworCisJCQkJc3Ry
bmNweShvdmVybGF5X25hbWUsIGN1cl9vdmVybGF5LT5uYW1lLCBzaXplb2Yob3ZlcmxheV9uYW1l
KSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQl9IGVsc2UKKwkJCW15ZXJyb3I9
MTsKKworCQlpZiAobXllcnJvcikgeworCQkJaWYgKCFyZWluaXRpYWxpemUpCisJCQkJd2FybmYo
IihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMgOiBVbmtub3duIG92ZXJsYXkiLCBvdmVybGF5X25h
bWUpOworCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCW15ZXJyb3I9MDsKKwkJCWNvbnRpbnVlOwor
CQl9CisKIAkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJ1xuJykpICE9IE5VTEwpCiAJCQkqcCA9
IDA7CiAJCWlmICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJyIikpICE9IE5VTEwpIHsKQEAgLTM3
NSw3ICs0NzcsNyBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJ
aWYgKHZlcmJvc2UgPiAzKQogCQkJCQkJcHJpbnRmKCIlcyAlcyAlcyAiLCAqdXNlciA/IHVzZXIg
OiAiTUlTU0lORyIsICpyZXZpc2lvbiA/IHJldmlzaW9uIDogIk1JU1NJTkciLCAqZGF0ZSA/IGRh
dGUgOiAiTUlTU0lORyIpOwogCi0JCQkJCXByaW50ZigiJXMlcyVzICIsIENZQU4sIGVidWlsZCwg
Tk9STSk7CisJCQkJCXByaW50ZigiJXMlczo6JXMlcyAiLCBDWUFOLCBjdXJfb3ZlcmxheS0+bmFt
ZSwgZWJ1aWxkLCBOT1JNKTsKIAkJCQkJcHJpbnRfaGlnaGxpZ2h0ZWRfdXNlX2ZsYWdzKCZidWYw
W3NlYXJjaF9sZW4rMV0sIG9wdGluZCwgYXJnYywgYXJndik7CiAJCQkJCXB1dHMoTk9STSk7CiAJ
CQkJCWlmICh2ZXJib3NlID4gMSkgewpAQCAtMzgzLDcgKzQ4NSw3IEBAIGludCBxdXNlX21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkJaW50IEFSR0MgPSAwOwogCQkJCQkJbWFrZWFy
Z3YoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgJkFSR0MsICZBUkdWKTsKIAkJCQkJCWlmIChBUkdDID4g
MCkgewotCQkJCQkJCXF1c2VfZGVzY3JpYmVfZmxhZygxLCBBUkdDLCBBUkdWKTsKKwkJCQkJCQlx
dXNlX2Rlc2NyaWJlX2ZsYWcoMSwgcmVwbywgcmVwb19zZWFyY2gsIEFSR0MsIEFSR1YpOwogCQkJ
CQkJCWZvciAoaSA9IDA7IGkgPCBBUkdDOyBpKyspCiAJCQkJCQkJCWZyZWUoQVJHVltpXSk7CiAJ
CQkJCQkJZnJlZShBUkdWKTsKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS90ZXN0
cy9pbnN0YWxsL2RvdGVzdCBwb3J0YWdlLXV0aWxzLTIwMDYxMTExLm5ldy90ZXN0cy9pbnN0YWxs
L2RvdGVzdAotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExMS90ZXN0cy9pbnN0YWxsL2RvdGVzdAky
MDA2LTExLTExIDIzOjM3OjIxLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2
MTExMS5uZXcvdGVzdHMvaW5zdGFsbC9kb3Rlc3QJMjAwNi0xMS0xMyAxODoyMToxOC45OTM0ODU5
MTEgKzAxMDAKQEAgLTcsNyArNyw3IEBAIGRpZSgpIHsKIAogY3AgLi4vLi4vcSAuCiAuL3EgLWkg
fHwgZGllICIuL3EgLWkiCi1mb3IgYXBwIGluICQoLi9xIC1DaCB8IGdyZXAgJyA6ICcgfCBhd2sg
J3twcmludCAkMX0nKSA7IGRvCitmb3IgYXBwIGluICQoLi9xIC1DaCB8IGdyZXAgLXYgJ1VzYWdl
JyB8IGdyZXAgJyA6ICcgfCBhd2sgJ3twcmludCAkMX0nKSA7IGRvCiAJWyAhIC1lICRhcHAgXSAm
JiBkaWUgIiRhcHAgZG9lcyBub3QgZXhpc3QiCiBkb25lCiBlY2hvICJQQVNTRUQiCg==
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101779</attachid>
            <date>2006-11-12 13:42 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9tYWluLmMgcG9ydGFnZS11dGlscy0y
MDA2MTExMS5uZXcvbWFpbi5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTExL21haW4uYwkyMDA2
LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTEx
MS5uZXcvbWFpbi5jCTIwMDYtMTEtMTQgMDA6MzM6MzMuMjk2MTU1ODE1ICswMTAwCkBAIC03MSw2
ICs3MSw3IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRp
YyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2
b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7
CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAg
LTg1LDEzICs4NiwyMSBAQCBzdGF0aWMgaW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRl
bmQgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwotc3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0g
PSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwogc3RhdGlj
IGNoYXIgcG9ydHZkYltdID0gInZhci9kYi9wa2ciOwogc3RhdGljIGNoYXIgcG9ydGNhY2hlZGly
W10gPSAibWV0YWRhdGEvY2FjaGUiOwogc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhd
ID0gIi8iOwogc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMv
IjsKIAordHlwZWRlZiBzdHJ1Y3Qgb3ZlcmxheV90IG92ZXJsYXlfdDsKK3N0cnVjdCBvdmVybGF5
X3QgeworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwYXRoW19RX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qg
b3ZlcmxheV90ICpuZXh0OworfTsKKworc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50b28g
PSBOVUxMOworCiBjaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8iOwog
Y2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKIApAQCAtMjAxLDEw
ICsyMTAsMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTQ2OSwxNyArNDc4LDc5IEBAIGNoYXIgKnN0cmluY3JfdmFyKGNvbnN0IGNoYXIgKm5hbWUs
IGNoYXIKIAlyZXR1cm4gKGNoYXIgKikgdmFsdWU7CiB9CiAKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVy
bGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSkKK3sKKwlzaG9ydCBtZXJyb3IgPSAwOworCWNo
YXIgYnVmW0JVRlNJWkVdLCBmaWxlW19RX1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKKwlvdmVybGF5
X3QgKmN1cl9vdmVybGF5OworCUZJTEUgKnJlcG9fbmFtZUZQOworCXMgPSBwb3J0ZGlyX292ZXJs
YXk7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKworCXdoaWxlICgqcykgeworCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiAoKmN1cl9vdmVybGF5LT5uZXh0KSk7
CisJCWN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQ7CisJCWN1cl9vdmVybGF5LT5uZXh0
ID0gTlVMTDsKKworCQlpZiAoKHA9c3RyY2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc25w
cmludGYoY3VyX292ZXJsYXktPnBhdGgsIHNpemVvZihjdXJfb3ZlcmxheS0+cGF0aCksICIlcyVz
IiwgcG9ydHJvb3QsIHMpOworCisJCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBvdmVybGF5ICov
CisJCXN0cm5jcHkoZmlsZSwgY3VyX292ZXJsYXktPnBhdGgsIF9RX1BBVEhfTUFYKTsKKwkJc3Ry
bmNhdChmaWxlLCAiL3Byb2ZpbGVzL3JlcG9fbmFtZSIsIF9RX1BBVEhfTUFYKTsKKwkJaWYgKChy
ZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikpKQorCQl7CisJCQlpZiAoIShmZ2V0cyhidWYs
IHNpemVvZihidWYpLHJlcG9fbmFtZUZQKSkpCisJCQkJbWVycm9yKys7CisKKwkJCXJtc3BhY2Uo
YnVmKTsKKwkJCWlmICgodCA9IHN0cmNocihidWYsJ1xuJykpKQorCQkJCSp0ID0gMDsKKworCQkJ
c3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVmLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUp
KTsKKworCQkJZmNsb3NlKHJlcG9fbmFtZUZQKTsKKworCQl9IGVsc2UKKwkJCW1lcnJvcisrOwor
CisJCWlmIChtZXJyb3IpIHsKKwkJCS8qIGRlbGV0ZSB0cmFpbGluZyAnLycgKi8KKwkJCXQgPSBj
dXJfb3ZlcmxheS0+cGF0aCArIHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0aCkgLSAxOworCQkJaWYg
KCp0ID09ICcvJykKKwkJCQkqdCA9IDA7CisKKwkJCXN0cm5jcHkoY3VyX292ZXJsYXktPm5hbWUs
IGJhc2VuYW1lKGN1cl9vdmVybGF5LT5wYXRoKSwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7
CisJCQltZXJyb3I9MDsKKwkJfQorCisJCWlmIChwKQorCQkJcyA9IHArMTsKKwkJZWxzZQorCQkJ
YnJlYWs7CisJfQorCit9CisKKwogdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiB7
CiAJY2hhciBub2NvbG9yID0gMDsKIAlpbnQgaSwgZjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlGSUxF
ICpmcDsKKwljaGFyIHRtcF9wb3J0ZGlyW19RX1BBVEhfTUFYXTsKKwljaGFyIHBvcnRkaXJfb3Zl
cmxheVsyMDQ4XSA9ICIiOworCiAJY2hhciBidWZbQlVGU0laRV0sICpzLCAqcDsKIAogCWNoYXIg
cHJvZmlsZVtfUV9QQVRIX01BWF0sIHBvcnRhZ2VfZmlsZVtfUV9QQVRIX01BWF07CisKIAljb25z
dCBjaGFyICpmaWxlc1tdID0ge3BvcnRhZ2VfZmlsZSwgIi9ldGMvbWFrZS5nbG9iYWxzIiwgIi9l
dGMvbWFrZS5jb25mIn07CiAJdHlwZWRlZiBlbnVtIHsgX1FfQk9PTCwgX1FfU1RSLCBfUV9JU1RS
IH0gdmFyX3R5cGVzOworCiAJc3RydWN0IHsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJY29uc3Qg
c2l6ZV90IG5hbWVfbGVuOwpAQCAtNDkzLDEzICs1NjQsMTkgQEAgdm9pZCBpbml0aWFsaXplX3Bv
cnRhZ2VfZW52KHZvaWQpCiAJCXsiQ09ORklHX1BST1RFQ1QiLCAgIDE0LCBfUV9TVFIsICBjb25m
aWdfcHJvdGVjdCwgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KX0sCiAJCXsiTk9DT0xPUiIsICAgICAg
ICAgICA3LCBfUV9CT09MLCAmbm9jb2xvciwgICAgICAgMX0sCiAJCXsiRkVBVFVSRVMiLCAgICAg
ICAgICA4LCBfUV9JU1RSLCBmZWF0dXJlcywgICAgICAgc2l6ZW9mKGZlYXR1cmVzKX0sCi0JCXsi
UE9SVERJUiIsICAgICAgICAgICA3LCBfUV9TVFIsICBwb3J0ZGlyLCAgICAgICAgc2l6ZW9mKHBv
cnRkaXIpfSwKKwkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9RX1NUUiwgIHRtcF9wb3J0ZGly
LCAgICBzaXplb2YodG1wX3BvcnRkaXIpfSwKKwkJeyJQT1JURElSX09WRVJMQVkiLCAgMTUsIF9R
X0lTVFIsIHBvcnRkaXJfb3ZlcmxheSxzaXplb2YocG9ydGRpcl9vdmVybGF5KX0sCiAJCXsiUE9S
VEFHRV9CSU5IT1NUIiwgIDE1LCBfUV9TVFIsICBiaW5ob3N0LCAgICAgICAgc2l6ZW9mKGJpbmhv
c3QpfSwKIAkJeyJQT1JUQUdFX1RNUERJUiIsICAgMTQsIF9RX1NUUiwgIHBvcnRfdG1wZGlyLCAg
ICBzaXplb2YocG9ydF90bXBkaXIpfSwKIAkJeyJQS0dESVIiLCAgICAgICAgICAgIDYsIF9RX1NU
UiwgIHBrZ2RpciwgICAgICAgICBzaXplb2YocGtnZGlyKX0sCiAJCXsiUk9PVCIsICAgICAgICAg
ICAgICA0LCBfUV9TVFIsICBwb3J0cm9vdCwgICAgICAgc2l6ZW9mKHBvcnRyb290KX0KIAl9Owog
CisJb3ZlcmxheV9nZW50b28gPSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlz
dHJjcHkob3ZlcmxheV9nZW50b28tPm5hbWUsImdlbnRvbyIpOworCXN0cm5jcHkodG1wX3BvcnRk
aXIsICIvdXNyL3BvcnRhZ2UiLCBzaXplb2YodG1wX3BvcnRkaXIpKTsKKwlvdmVybGF5X2dlbnRv
by0+bmV4dCA9IE5VTEw7CisKIAlpZiAoKHAgPSBzdHJjaHIocG9ydHJvb3QsICcvJykpICE9IE5V
TEwpCiAJCWlmIChzdHJsZW4ocCkgIT0gMSkKIAkJCXN0cm5jYXQocG9ydHJvb3QsICIvIiwgc2l6
ZW9mKHBvcnRyb290KSk7CkBAIC01OTEsNiArNjY4LDEzIEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0
YWdlX2Vudih2b2lkKQogCQlub19jb2xvcnMoKTsKIAllbHNlCiAJCWNvbG9yX3JlbWFwKCk7CisK
KworCXNucHJpbnRmKG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBzaXplb2Yob3ZlcmxheV9nZW50b28t
PnBhdGgpLCIlcyVzIiwgcG9ydHJvb3QsIHRtcF9wb3J0ZGlyKTsKKworCS8qIG5vdyB3ZSBpbml0
aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQgbGlzdCB3aXRoIG92ZXJsYXlfZ2VudG9vIGFzIHRo
ZSBmaXJzdCAnaXRlbScgICovCisJaW5pdGlhbGl6ZV9vdmVybGF5cyhwb3J0ZGlyX292ZXJsYXkp
OworCiB9CiAKIGVudW0gewpAQCAtNjE5LDE5ICs3MDMsMjEgQEAgY29uc3QgY2hhciAqaW5pdGlh
bGl6ZV9mbGF0KGludCBjYWNoZV90eQogCWludCBhLCBiLCBjLCBkLCBlLCBpOwogCWludCBmcmFj
LCBzZWNzLCBjb3VudDsKIAlGSUxFICpmcDsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5OwogCiAJ
YSA9IGIgPSBjID0gZCA9IGUgPSBpID0gMDsKIAljb3VudCA9IGZyYWMgPSBzZWNzID0gMDsKKwlj
dXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOwogCiAJY2FjaGVfZmlsZSA9IChjYWNoZV90eXBl
ID09IENBQ0hFX0VCVUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURBVEFfRklM
RSk7CiAKLQlpZiAoY2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgiY2hkaXIgdG8gUE9S
VERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmIChjaGRpcihvdmVybGF5X2dlbnRvby0+
cGF0aCkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIG92
ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKGNhY2hlX3R5cGUg
PT0gQ0FDSEVfTUVUQURBVEEgJiYgY2hkaXIocG9ydGNhY2hlZGlyKSAhPSAwKSB7Ci0JCXdhcm5w
KCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycgZmFpbGVkIiwgcG9ydGRpciwgcG9ydGNh
Y2hlZGlyKTsKKwkJd2FybnAoImNoZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVzLyVzJyBmYWlsZWQi
LCBvdmVybGF5X2dlbnRvby0+cGF0aCwgcG9ydGNhY2hlZGlyKTsKIAkJZ290byByZXQ7CiAJfQog
CkBAIC02NDcsNjQgKzczMyw3MSBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQoaW50IGNh
Y2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9IEVOT0VOVCkgewot
CQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNhY2hlX2ZpbGUp
OworCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5w
YXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKChmcCA9IGZvcGVuKGNh
Y2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5nICclcy8lcycgZmFp
bGVkIiwgcG9ydGRpciwgY2FjaGVfZmlsZSk7CisJCXdhcm5mcCgib3BlbmluZyAnJXMvJXMnIGZh
aWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJ
fQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAKLQlpZiAoKGEgPSBzY2FuZGlyKCIu
IiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCi0JCWdvdG8gcmV0
OwotCi0JZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewotCQlzdGF0KGNhdGVnb3J5W2ldLT5kX25h
bWUsICZzdCk7Ci0JCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCWNvbnRpbnVlOwotCQlp
ZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICctJykgPT0gTlVMTCkKLQkJCWlmICgoc3Ry
bmNtcChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAidmlydHVhbCIsIDcpKSAhPSAwKQorCWRvIHsKKwkJ
aWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vIHx8IGNoZGlyKGN1cl9vdmVybGF5LT5w
YXRoKSA9PSAwKSB7CisJCQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJf
aGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCiAJCQkJY29udGludWU7CiAKLQkJaWYgKChiID0gc2Nh
bmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkp
IDwgMCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGMgPSAwOyBjIDwgYjsgYysrKSB7Ci0JCQljaGFy
IGRlW19RX1BBVEhfTUFYXTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKKwkJCQlzdGF0
KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7CisJCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUp
KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICct
JykgPT0gTlVMTCkKKwkJCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ldLT5kX25hbWUsICJ2aXJ0
dWFsIiwgNykpICE9IDApCisJCQkJCQljb250aW51ZTsKIAotCQkJc25wcmludGYoZGUsIHNpemVv
ZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUpOworCQkJ
CWlmICgoYiA9IHNjYW5kaXIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnBuLCBmaWx0ZXJfaGlkZGVu
LCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoYyA9IDA7IGMgPCBi
OyBjKyspIHsKKwkJCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJCWlmIChzdGF0KGRlLCAm
c3QpIDwgMCkKLQkJCQljb250aW51ZTsKKwkJCQkJc25wcmludGYoZGUsIHNpemVvZihkZSksICIl
cy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUpOwogCi0JCQlzd2l0Y2gg
KGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJVSUxEOgotCQkJCWlmICghU19JU0RJUihz
dC5zdF9tb2RlKSkKLQkJCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENBQ0hFX01F
VEFEQVRBOgotCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJCQlmcHJpbnRmKGZwLCAi
JXNcbiIsIGRlKTsKLQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICgoZSA9
IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQkJCWNv
bnRpbnVlOwotCQkJZm9yIChkID0gMDsgZCA8IGU7IGQrKykgewotCQkJCWlmICgocCA9IHN0cnJj
aHIoZWJbZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKLQkJCQkJaWYgKHN0cmNtcChwLCAiLmVi
dWlsZCIpID09IDApIHsKLQkJCQkJCWNvdW50Kys7Ci0JCQkJCQlmcHJpbnRmKGZwLCAiJXMvJXMv
JXNcbiIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5kX25hbWUp
OworCQkJCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCisJCQkJCQljb250aW51ZTsKKworCQkJCQlz
d2l0Y2ggKGNhY2hlX3R5cGUpIHsKKwkJCQkJY2FzZSBDQUNIRV9FQlVJTEQ6CisJCQkJCQlpZiAo
IVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJCQkJY29udGludWU7CisJCQkJCQlicmVhazsKKwkJ
CQkJY2FzZSBDQUNIRV9NRVRBREFUQToKKwkJCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQor
CQkJCQkJCWZwcmludGYoZnAsICIlc1xuIiwgZGUpOworCQkJCQkJY29udGludWU7CisJCQkJCQli
cmVhazsKKwkJCQkJfQorCQkJCQlpZiAoKGUgPSBzY2FuZGlyKGRlLCAmZWIsIGZpbHRlcl9oaWRk
ZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlmb3IgKGQgPSAwOyBk
IDwgZTsgZCsrKSB7CisJCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykp
ICE9IE5VTEwpCisJCQkJCQkJaWYgKHN0cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsKKwkJCQkJ
CQkJY291bnQrKzsKKwkJCQkJCQkJZnByaW50ZihmcCwgIiVzOjolcy8lcy8lc1xuIiwgY3VyX292
ZXJsYXktPm5hbWUsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5k
X25hbWUpOworCQkJCQkJCX0KIAkJCQkJfQorCQkJCQl3aGlsZSAoZC0tKSBmcmVlKGViW2RdKTsK
KwkJCQkJZnJlZShlYik7CisJCQkJfQorCQkJCXdoaWxlIChiLS0pIGZyZWUocG5bYl0pOworCQkJ
CWZyZWUocG4pOwogCQkJfQotCQkJd2hpbGUgKGQtLSkgZnJlZShlYltkXSk7Ci0JCQlmcmVlKGVi
KTsKLQkJfQotCQl3aGlsZSAoYi0tKSBmcmVlKHBuW2JdKTsKLQkJZnJlZShwbik7Ci0JfQorCQl9
IGVsc2UKKwkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZhaWxlZCwgc2tpcHBpbmcgdGhlICVzIHJl
cG9zaXRvcnkiLCBjdXJfb3ZlcmxheS0+cGF0aCwgY3VyX292ZXJsYXktPm5hbWUpOworCisJfSB3
aGlsZSAoKGN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQpKTsKKwogCWZjbG9zZShmcCk7
CiAJd2hpbGUgKGEtLSkgZnJlZShjYXRlZ29yeVthXSk7CiAJZnJlZShjYXRlZ29yeSk7CkBAIC03
MjMsNyArODE2LDcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNoZV90eQog
CiAJd2FybigiRmluaXNoZWQgJXUgZW50cmllcyBpbiAlZC4lMDZkIHNlY29uZHMiLCBjb3VudCwg
c2VjcywgZnJhYyk7CiAJaWYgKHNlY3MgPiAxMDApCi0JCXdhcm4oIllvdSBzaG91bGQgY29uc2lk
ZXIgYSBmYXN0ZXIgZmlsZSBzeXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJUj0nJXMn
IiwgcG9ydGRpcik7CisJCXdhcm4oIllvdSBzaG91bGQgY29uc2lkZXIgYSBmYXN0ZXIgZmlsZSBz
eXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJUj0nJXMnIiwgb3ZlcmxheV9nZW50b28t
PnBhdGgpOwogcmV0OgogCXJldHVybiBjYWNoZV9maWxlOwogfQpAQCAtNzMyLDggKzgyNSw4IEBA
IHJldDoKIAogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCkKIHsKLQlpZiAoKGNo
ZGlyKHBvcnRkaXIpKSAhPSAwKSB7Ci0JCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFp
bGVkIiwgcG9ydGRpcik7CisJaWYgKChjaGRpcihvdmVybGF5X2dlbnRvby0+cGF0aCkpICE9IDAp
IHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRv
by0+cGF0aCk7CiAJCXJldHVybjsKIAl9CiAJdW5saW5rKENBQ0hFX0VCVUlMRF9GSUxFKTsKQEAg
LTEwMDYsMTAgKzEwOTksMjAgQEAgZnVja2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUg
b3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9vdmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9p
ZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlfdCAqb3ZlcmxheSkKK3sKKwlpZiAob3ZlcmxheS0+bmV4
dCkKKwkJZnJlZV9vdmVybGF5cyhvdmVybGF5LT5uZXh0KTsKKwlmcmVlKG92ZXJsYXkpOworfQor
CiB2b2lkIGNsZWFudXAoKQogewogCXJlaW5pdGlhbGl6ZV9hc19uZWVkZWQoKTsKIAlmcmVlX3Nl
dHModmlydHVhbHMpOworCWZyZWVfb3ZlcmxheXMob3ZlcmxheV9nZW50b28pOwogCWZjbG9zZShz
dGRlcnIpOwogfQogCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcS5jIHBvcnRh
Z2UtdXRpbHMtMjAwNjExMTEubmV3L3EuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExMS9xLmMJ
MjAwNi0xMS0xMSAyMzozNzoyMC4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAw
NjExMTEubmV3L3EuYwkyMDA2LTExLTE0IDAwOjMzOjMzLjMwMDE1NTIwNyArMDEwMApAQCAtNywx
NSArNywxNyBAQAogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdlciAgLSA8dmFw
aWVyQGdlbnRvby5vcmc+CiAgKi8KIAotI2RlZmluZSBRX0ZMQUdTICJpcm0iIENPTU1PTl9GTEFH
UworI2RlZmluZSBRX0ZMQUdTICJpbHJtIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0
aW9uIGNvbnN0IHFfbG9uZ19vcHRzW10gPSB7CiAJeyJpbnN0YWxsIiwgICAgICBub19hcmd1bWVu
dCwgTlVMTCwgJ2knfSwKKwl7ImxzLW92ZXJsYXlzIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnbCd9
LAogCXsicmVpbml0aWFsaXplIiwgbm9fYXJndW1lbnQsIE5VTEwsICdyJ30sCiAJeyJtZXRhY2Fj
aGUiLCAgICBub19hcmd1bWVudCwgTlVMTCwgJ20nfSwKIAlDT01NT05fTE9OR19PUFRTCiB9Owog
c3RhdGljIGNvbnN0IGNoYXIgKnFfb3B0c19oZWxwW10gPSB7CiAJIkluc3RhbGwgc3ltbGlua3Mg
Zm9yIGFwcGxldHMiLAorCSJMaXN0IGNvbmZpZ3VyZWQgb3ZlcmxheXMiLAogCSJSZWluaXRpYWxp
emUgZWJ1aWxkIGNhY2hlIiwKIAkiUmVpbml0aWFsaXplIG1ldGFkYXRhIGNhY2hlIiwKIAlDT01N
T05fT1BUU19IRUxQCkBAIC03MCw2ICs3Miw3IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCWludCBpOwogCWNoYXIgKnA7CiAJQVBQTEVUIGZ1bmM7CisJb3ZlcmxheV90ICog
Y3VyX292ZXJsYXk7CiAKIAlpZiAoYXJnYyA9PSAwKQogCQlyZXR1cm4gMTsKQEAgLTg5LDYgKzky
LDE1IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BU
U19DQVNFUyhxKQogCQljYXNlICdtJzogcmVpbml0aWFsaXplX21ldGFjYWNoZSA9IDE7IGJyZWFr
OwogCQljYXNlICdyJzogcmVpbml0aWFsaXplID0gMTsgYnJlYWs7CisJCWNhc2UgJ2wnOiB7CisJ
CQlwcmludGYoIlxuJXNPdmVybGF5KHMpIDolc1xuXG4iLCBHUkVFTiwgTk9STSk7CisJCQljdXJf
b3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKKwkJCWRvIHsKKwkJCQlwcmludGYoIiAgIE5hbWUgOiAl
cyUtMjAuMjBzJXMgXHRsb2NhdGlvbiA6ICVzJXMlc1xuIiwgQ1lBTiwgY3VyX292ZXJsYXktPm5h
bWUsIE5PUk0sIENZQU4sIGN1cl9vdmVybGF5LT5wYXRoLCBOT1JNKTsKKwkJCX0gd2hpbGUgKChj
dXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsK
KwkJCXJldHVybiAwOworCQkJfQogCQljYXNlICdpJzogewogCQkJY2hhciBidWZbX1FfUEFUSF9N
QVhdOwogCQkJLyogYWx3YXlzIGJ6ZXJvIGEgYnVmZmVyIGJlZm9yZSB1c2luZyByZWFkbGluaygp
ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcWNhY2hlLmMgcG9ydGFnZS11
dGlscy0yMDA2MTExMS5uZXcvcWNhY2hlLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcWNh
Y2hlLmMJMjAwNi0xMS0xMSAyMzozNzoyMC4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRp
bHMtMjAwNjExMTEubmV3L3FjYWNoZS5jCTIwMDYtMTEtMTQgMDA6MzM6MzMuMzIzMTUxNzExICsw
MTAwCkBAIC01MTIsMTAgKzUxMiwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5j
KShxY2FjaGVfCiAJaW50IGksIGosIGssIGxlbiwgbnVtX2NhdCwgbnVtX3BrZywgbnVtX2VidWls
ZDsKIAlzdHJ1Y3QgZGlyZWN0ICoqY2F0ZWdvcmllcywgKipwYWNrYWdlcywgKiplYnVpbGRzOwog
Ci0JbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihwb3J0
ZGlyKSArIDEpOworCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VEQikgKyBz
dHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgMSk7CiAJY2F0cGF0aCA9IHhtYWxsb2MobGVu
KTsKIAltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIl
cyVzIiwgUUNBQ0hFX0VEQiwgcG9ydGRpcik7CisJc25wcmludGYoY2F0cGF0aCwgbGVuLCAiJXMl
cyIsIFFDQUNIRV9FREIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAogCWlmICgtMSA9PSAobnVt
X2NhdCA9IHNjYW5kaXIoY2F0cGF0aCwgJmNhdGVnb3JpZXMsIHFjYWNoZV9maWxlX3NlbGVjdCwg
YWxwaGFzb3J0KSkpIHsKIAkJZXJyKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7
CkBAIC01MjcsMTAgKzUyNywxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5jKShx
Y2FjaGVfCiAKIAkvKiB0cmF2ZXJzZSBjYXRlZ29yaWVzICovCiAJZm9yIChpID0gMDsgaSA8IG51
bV9jYXQ7IGkrKykgewotCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKHBvcnRkaXIpICsg
c3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIDEpOworCQlsZW4g
PSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0cmxlbigi
LyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyAxKTsKIAkJcGtncGF0aCA9IHht
YWxsb2MobGVuKTsKIAkJbWVtc2V0KHBrZ3BhdGgsIDAsIGxlbik7Ci0JCXNucHJpbnRmKHBrZ3Bh
dGgsIGxlbiwgIiVzLyVzIiwgcG9ydGRpciwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKKwkJc25w
cmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2F0ZWdv
cmllc1tpXS0+ZF9uYW1lKTsKIAogCQlpZiAoLTEgPT0gKG51bV9wa2cgPSBzY2FuZGlyKHBrZ3Bh
dGgsICZwYWNrYWdlcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQkJd2Fy
bigiJXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNTUyLDEwICs1NTIsMTAg
QEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYykocWNhY2hlXwogCiAJCS8qIHRyYXZl
cnNlIHBhY2thZ2VzICovCiAJCWZvciAoaiA9IDA7IGogPCBudW1fcGtnOyBqKyspIHsKLQkJCWxl
biA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi8iKSArIHN0cmxl
bihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBzdHJsZW4ocGFja2FnZXNb
al0tPmRfbmFtZSkgKyAxKTsKKwkJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3Zlcmxh
eV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9u
YW1lKSArIHN0cmxlbigiLyIpICsgc3RybGVuKHBhY2thZ2VzW2pdLT5kX25hbWUpICsgMSk7CiAJ
CQllYnVpbGRwYXRoID0geG1hbGxvYyhsZW4pOwogCQkJbWVtc2V0KGVidWlsZHBhdGgsIDAsIGxl
bik7Ci0JCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIHBvcnRkaXIsIGNh
dGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRfbmFtZSk7CisJCQlzbnByaW50Zihl
YnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYXRlZ29y
aWVzW2ldLT5kX25hbWUsIHBhY2thZ2VzW2pdLT5kX25hbWUpOwogCiAJCQlpZiAoLTEgPT0gKG51
bV9lYnVpbGQgPSBzY2FuZGlyKGVidWlsZHBhdGgsICZlYnVpbGRzLCBxY2FjaGVfZWJ1aWxkX3Nl
bGVjdCwgcWNhY2hlX3ZlcmNtcCkpKSB7CiAJCQkJd2FybigiJXMgJXMiLCBlYnVpbGRwYXRoLCBz
dHJlcnJvcihlcnJubykpOwpAQCAtNzczLDEwICs3NzMsMTAgQEAgdm9pZCBxY2FjaGVfc3RhdHMo
cWNhY2hlX2RhdGEgKmRhdGEpCiAJCWZvciAoaSA9IDA7IGFyY2hsaXN0W2ldOyBpKyspCiAJCQlh
cmNoaXRlY3R1cmVzKys7CiAKLQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVf
RURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3Ry
bGVuKFFDQUNIRV9FREIpICsgc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIDEpOwogCQlj
YXRwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQkJc25w
cmludGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9FREIsIHBvcnRkaXIpOworCQlzbnBy
aW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgb3ZlcmxheV9nZW50b28tPnBh
dGgpOwogCiAJCWlmICgtMSA9PSAobnVtY2F0ID0gc2NhbmRpcihjYXRwYXRoLCAmY2F0ZWdvcmll
cywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQkJZXJyKCIlcyAlcyIsIGNh
dHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC05MjgsMTEgKzkyOCwxMSBAQCBpbnQgcWNhY2hl
X2luaXQoKQogCWNoYXIgKmZpbGVuYW1lOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlsZW4gICAg
ICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi9wcm9maWxlcy9h
cmNoLmxpc3QiKSArIDEpOworCWxlbiAgICAgID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihvdmVy
bGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi9wcm9maWxlcy9hcmNoLmxpc3QiKSArIDEpOwog
CWZpbGVuYW1lID0geG1hbGxvYyhsZW4pOwogCiAJbWVtc2V0KGZpbGVuYW1lLCAwLCBsZW4pOwot
CXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxlcy9hcmNoLmxpc3QiLCBwb3J0ZGly
KTsKKwlzbnByaW50ZihmaWxlbmFtZSwgbGVuLCAiJXMvcHJvZmlsZXMvYXJjaC5saXN0Iiwgb3Zl
cmxheV9nZW50b28tPnBhdGgpOwogCiAJaWYgKE5VTEwgPT0gKGFyY2hsaXN0ID0gcWNhY2hlX3Jl
YWRfbGluZXMoZmlsZW5hbWUpKSkgewogCQlmcmVlKGZpbGVuYW1lKTsKZGlmZiAtTmFydXAgcG9y
dGFnZS11dGlscy0yMDA2MTExMS9xZ3JlcC5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3Fn
cmVwLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvcWdyZXAuYwkyMDA2LTExLTExIDIzOjM3
OjIwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcWdyZXAu
YwkyMDA2LTExLTE0IDAwOjMzOjMzLjM0NzE0ODA2MyArMDEwMApAQCAtMTAsMTEgKzEwLDEyIEBA
CiAKICNpZmRlZiBBUFBMRVRfcWdyZXAKIAotI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIY2UiIENP
TU1PTl9GTEFHUworI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIbzpjZSIgQ09NTU9OX0ZMQUdTCiBz
dGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxZ3JlcF9sb25nX29wdHNbXSA9IHsKIAl7ImludmVy
dC1tYXRjaCIsICBub19hcmd1bWVudCwgTlVMTCwgJ0knfSwKIAl7Imlnbm9yZS1jYXNlIiwgICBu
b19hcmd1bWVudCwgTlVMTCwgJ2knfSwKIAl7IndpdGgtZmlsZW5hbWUiLCBub19hcmd1bWVudCwg
TlVMTCwgJ0gnfSwKKwl7Im92ZXJsYXkiLCAgICAgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwK
IAl7ImNvdW50IiwgICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKIAl7InJlZ2V4cCIs
ICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAlDT01NT05fTE9OR19PUFRTCkBAIC0y
Myw2ICsyNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxZ3JlcF9vcHRzX2hlbHBbXSA9IHsKIAki
U2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcyIsCiAJIklnbm9yZSBjYXNlIGRpc3RpbmN0aW9ucyIs
CiAJIlByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBtYXRjaCIsCisJIk9ubHkgY29uc2lkZXIg
dGhlIDxhcmc+IG92ZXJsYXkiLAogCSJPbmx5IHByaW50IGEgY291bnQgb2YgbWF0Y2hpbmcgbGlu
ZXMgcGVyIEZJTEUiLAogCSJVc2UgUEFUVEVSTiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiIsCiAJ
Q09NTU9OX09QVFNfSEVMUApAQCAtMzQsNyArMzYsOSBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJaW50IGNvdW50ID0gMDsKLQljaGFyICpwOwor
CXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsKKwljaGFyIG92ZXJsYXlfbmFtZVs2NF0sIHJl
cG9fc2VhcmNoWzY0XTsKKwljaGFyICpwLCAqc3RyOwogCWNoYXIgZG9fY291bnQsIGRvX3JlZ2V4
OwogCWNoYXIgc2hvd19maWxlbmFtZTsKIAlGSUxFICpmcDsKQEAgLTQyLDEwICs0NiwxNSBAQCBp
bnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhciBidWYwW0JVRlNJWl07
CiAJaW50IHJlZmxhZ3MgPSBSRUdfTk9TVUI7CiAJY2hhciBpbnZlcnRfbWF0Y2ggPSAwOworCW92
ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3RtcDsKIAogCXR5cGVkZWYgY2hhciAqKCpG
VU5DKSAoY2hhciAqLCBjaGFyICopOwogCUZVTkMgc3RyZnVuYyA9IChGVU5DKSBzdHJzdHI7CiAK
KwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJ
cmVwb19zZWFyY2hbMF0gPSAwOworCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0l
cyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwog
CkBAIC01OCwxMiArNjcsMjYgQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQogCQkJc3RyZnVuYyA9IChGVU5DKSBzdHJjYXNlc3RyOwogCQkJcmVmbGFncyB8PSBSRUdfSUNB
U0U7CiAJCQlicmVhazsKKwkJY2FzZSAnSCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVhazsKKwkJ
Y2FzZSAnbyc6CisJCQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywg
c2l6ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IGRvX2NvdW50ID0g
MTsgYnJlYWs7CiAJCWNhc2UgJ2UnOiBkb19yZWdleCA9IDE7IGJyZWFrOwotCQljYXNlICdIJzog
c2hvd19maWxlbmFtZSA9IDE7IGJyZWFrOwogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxZ3JlcCkK
IAkJfQogCX0KKworCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghc3RybmNtcChjdXJfb3Zl
cmxheS0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpKQorCQkJ
CWJyZWFrOworCQl9IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKKwkJ
aWYgKE5VTEwgPT0gY3VyX292ZXJsYXkpCisJCQllcnIoIiVzIDogVW5rbm93biBvdmVybGF5LCB0
cnkgJ3EgLS1scy1vdmVybGF5cyciLCByZXBvX3NlYXJjaCk7CisJfQorCiAJaWYgKGFyZ2MgPT0g
b3B0aW5kKQogCQlxZ3JlcF91c2FnZShFWElUX0ZBSUxVUkUpOwogCkBAIC03Myw2ICs5Niw0MiBA
QCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJldHVybiAxOwogCXdo
aWxlICgoZmdldHMoZWJ1aWxkLCBzaXplb2YoZWJ1aWxkKSwgZnApKSAhPSBOVUxMKSB7CiAJCUZJ
TEUgKm5ld2ZwOworCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJeworCQkJKnAg
PSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQlwID0gZWJ1
aWxkOworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9f
c2VhcmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChvdmVybGF5X25hbWUsIHAs
IHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9v
OworCQkJCWRvIHsKKwkJCQkJaWYgKCFzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXpl
b2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0gd2hpbGUgKChvdmVy
bGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCQkJCWlmIChvdmVybGF5X3RtcCkgeworCQkJ
CQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXkt
PnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVk
IiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJCQkJfSBl
bHNlCisJCQkJCW15ZXJyb3I9MTsKKworCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBwLCBzaXpl
b2Yob3ZlcmxheV9uYW1lKSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQl9IGVs
c2UKKwkJCW15ZXJyb3I9MTsKKworCQlpZiAobXllcnJvcikgeworCQkJaWYgKCFyZWluaXRpYWxp
emUpCisJCQkJd2FybmYoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMgOiBVbmtub3duIG92ZXJs
YXkiLCBvdmVybGF5X25hbWUpOworCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCW15ZXJyb3I9MDsK
KwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJ1xuJykpICE9
IE5VTEwpCiAJCQkqcCA9IDA7CiAJCWlmICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJyIikpICE9
IE5VTEwpIHsKQEAgLTEwMiw3ICsxNjEsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJCQkJY291bnQrKzsKIAkJCQlpZiAoZG9fY291bnQpIGNvbnRpbnVlOwogCQkJ
CWlmICh2ZXJib3NlIHx8IHNob3dfZmlsZW5hbWUpIHsKLQkJCQkJcHJpbnRmKCIlczoiLCBlYnVp
bGQpOworCQkJCQlwcmludGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1aWxkKTsK
IAkJCQkJaWYgKHZlcmJvc2UgPiAxKSBwcmludGYoIiVkOiIsIGxpbmVubyk7CiAJCQkJCXByaW50
ZigiICIpOwogCQkJCX0KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExMS9xc2VhcmNo
LmMgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcXNlYXJjaC5jCi0tLSBwb3J0YWdlLXV0aWxz
LTIwMDYxMTExL3FzZWFyY2guYwkyMDA2LTExLTExIDIzOjM3OjIwLjAwMDAwMDAwMCArMDEwMAor
KysgcG9ydGFnZS11dGlscy0yMDA2MTExMS5uZXcvcXNlYXJjaC5jCTIwMDYtMTEtMTQgMDA6MzM6
MzMuMzgxMTQyODk0ICswMTAwCkBAIC05LDEwICs5LDEyIEBACiAKICNpZmRlZiBBUFBMRVRfcXNl
YXJjaAogCi0jZGVmaW5lIFFTRUFSQ0hfRkxBR1MgImFjc1NOSCIgQ09NTU9OX0ZMQUdTCisjZGVm
aW5lIFFTRUFSQ0hfRkxBR1MgImFjbzpwc1NOSCIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0
IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfb3B0c1tdID0gewogCXsiYWxsIiwgICAgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdhJ30sCiAJeyJjYWNoZSIsICAgICBub19hcmd1bWVudCwgTlVMTCwg
J2MnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAorCXsic2hvdy1w
YXRoIiwgbm9fYXJndW1lbnQsIE5VTEwsICdwJ30sCiAJeyJzZWFyY2giLCAgICBub19hcmd1bWVu
dCwgTlVMTCwgJ3MnfSwKIAl7ImRlc2MiLCAgICAgICBhX2FyZ3VtZW50LCBOVUxMLCAnUyd9LAog
CXsibmFtZS1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdOJ30sCkBAIC0yMiw2ICsyNCw4IEBA
IHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFzZWFyY2hfbG9uZ18KIHN0YXRpYyBjb25zdCBj
aGFyICpxc2VhcmNoX29wdHNfaGVscFtdID0gewogCSJMaXN0IHRoZSBkZXNjcmlwdGlvbnMgb2Yg
ZXZlcnkgcGFja2FnZSBpbiB0aGUgY2FjaGUiLAogCSJVc2UgdGhlIHBvcnRhZ2UgY2FjaGUiLAor
CSJTZWFyY2ggb25seSBpbiB0aGUgPGFyZz4gb3ZlcmxheSIsCisJIlNob3cgdGhlIHBhdGggdG8g
dGhlIGVidWlsZCIsCiAJIlJlZ2V4IHNlYXJjaCBwYWNrYWdlIGJhc2VuYW1lcyIsCiAJIlJlZ2V4
IHNlYXJjaCBwYWNrYWdlIGRlc2NyaXB0aW9ucyIsCiAJIk9ubHkgc2hvdyBwYWNrYWdlIG5hbWUi
LApAQCAtNDAsMTMgKzQ0LDIwIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogCWNoYXIgbGFzdFsxMjZdID0gIiI7CiAJY2hhciBkcFsxMjZdID0gIiI7CiAJY2hhciBi
cFsxMjZdID0gIiI7Ci0JY2hhciAqcCwgKnEsICpzdHI7CisJc2hvcnQgcmVwbyA9IDA7CisJY2hh
ciByZXBvX3NlYXJjaFs2NF07CisJY2hhciAqcCwgKnEsICpzdHIsIG92ZXJsYXlfbmFtZVs2NF07
CiAJY2hhciAqc2VhcmNoX21lID0gTlVMTDsKLQljaGFyIHNob3dfaG9tZXBhZ2UgPSAwLCBzaG93
X25hbWVfb25seSA9IDA7CisJY2hhciBzaG93X2hvbWVwYWdlID0gMCwgc2hvd19uYW1lX29ubHkg
PSAwLCBzaG93X3BhdGhfdG9fZWJ1aWxkID0gMDsKIAljaGFyIHNlYXJjaF9kZXNjID0gMCwgc2Vh
cmNoX2FsbCA9IDAsIHNlYXJjaF9uYW1lID0gMSwgc2VhcmNoX2NhY2hlID0gQ0FDSEVfRUJVSUxE
OwogCWNvbnN0IGNoYXIgKnNlYXJjaF92YXJzW10gPSB7ICJERVNDUklQVElPTj0iLCAiSE9NRVBB
R0U9IiB9OwogCXNpemVfdCBzZWFyY2hfbGVuOwotCWludCBpLCBpZHg9MDsKKwlvdmVybGF5X3Qg
KmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisJaW50IGksIGlkeD0wLCBteWVycm9yPTA7CisK
KwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJ
cmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0l
cyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwpA
QCAtNTYsNiArNjcsOCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
IAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXNlYXJjaCkKIAkJY2FzZSAnYSc6IHNlYXJjaF9hbGwg
PSAxOyBicmVhazsKIAkJY2FzZSAnYyc6IHNlYXJjaF9jYWNoZSA9IENBQ0hFX01FVEFEQVRBOyBi
cmVhazsKKwkJY2FzZSAnbyc6IHJlcG8gPSAxOyBzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcs
IHNpemVvZihyZXBvX3NlYXJjaCkpOyBicmVhazsKKwkJY2FzZSAncCc6IHNob3dfcGF0aF90b19l
YnVpbGQgPSAxOyBicmVhazsKIAkJY2FzZSAncyc6IHNlYXJjaF9kZXNjID0gMDsgc2VhcmNoX25h
bWUgPSAxOyBicmVhazsKIAkJY2FzZSAnUyc6IHNlYXJjaF9kZXNjID0gMTsgc2VhcmNoX25hbWUg
PSAwOyBicmVhazsKIAkJY2FzZSAnTic6IHNob3dfbmFtZV9vbmx5ID0gMTsgYnJlYWs7CkBAIC02
Myw2ICs3NiwxNiBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ
fQogCX0KIAorCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghIHN0cm5jbXAoY3VyX292ZXJs
YXktPm5hbWUsIHJlcG9fc2VhcmNoLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkKKwkJCQli
cmVhazsKKwkJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCWlm
IChOVUxMID09IGN1cl9vdmVybGF5KQorCQkJZXJyKCIlcyA6IFVua25vd24gb3ZlcmxheSwgdHJ5
ICdxIC0tbHMtb3ZlcmxheXMnIiwgcmVwb19zZWFyY2gpOworCX0KKworCiAJaWYgKHNlYXJjaF9h
bGwpIHsKIAkJc2VhcmNoX2Rlc2MgPSAxOwogCQlzZWFyY2hfbmFtZSA9IDA7CkBAIC05MywxMSAr
MTE2LDIyIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYg
KChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUoZWJ1aWxkKSkgIT0gTlVMTCkgewogCQkJCWlmICgo
c3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxhc3QpKSAhPSAwKSB7CiAJCQkJCXN0cm5jcHkobGFz
dCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9mKGxhc3QpKTsKLQkJCQkJaWYgKChyZW1hdGNoKHNl
YXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNhY2hlLT5ERVNDUklQVElPTiA6IGVidWlsZCksIFJF
R19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09IDApCi0JCQkJCQlwcmludGYoIiVzJXMvJXMlcyVz
ICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLCBCTFVFLAotCQkJCQkJICAgICAg
IHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0JCQkJCQkgICAgICAgKHNob3dfbmFtZV9vbmx5ID8g
IiIgOgotCQkJCQkJICAgICAgICAoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBBR0UgOiBw
Y2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2Vh
cmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBUSU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwg
UkVHX0lDQVNFKSkgPT0gMCkgeworCQkJCQkJaWYgKHNob3dfcGF0aF90b19lYnVpbGQpIHsKKwkJ
CQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMvJXMvXG4iLAorCQkJCQkJCUJPTEQs
IHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxVRSwgcGNhY2hlLT5hdG9tLT5QTiwK
KwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJY3VyX292ZXJs
YXktPnBhdGgsIGRpcm5hbWUoZWJ1aWxkKSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXByaW50
ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJQk9MRCwgcGNhY2hlLT5hdG9tLT5D
QVRFR09SWSwKKwkJCQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAorCQkJCQkJCVlFTExPVyxj
dXJfb3ZlcmxheS0+bmFtZSwgTk9STSwKKwkJCQkJCQkoc2hvd19uYW1lX29ubHkgPyAiIiA6CisJ
CQkJCQkJKHNob3dfaG9tZXBhZ2UgPyBwY2FjaGUtPkhPTUVQQUdFIDogcGNhY2hlLT5ERVNDUklQ
VElPTikpKTsKKwkJCQkJCX0KKwkJCQkJfQogCQkJCX0KIAkJCQljYWNoZV9mcmVlKHBjYWNoZSk7
CiAJCQl9IGVsc2UgewpAQCAtMTEwLDYgKzE0NCw0NCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAogCQljYXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklMRSAqZWJ1
aWxkZnA7CisJCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJCXsKKwkJCQkqcCA9
IDA7CisJCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQkJcCA9IGVi
dWlsZDsKKwkJCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBwLCBzaXplb2YocmVw
b19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9uYW1l
LCBwLCBzaXplb2Yob3ZlcmxheV9uYW1lKSkpIHsKKwkJCQkJbGFzdFswXSA9IDA7CisJCQkJCW92
ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0cm5jbXAo
b3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCQkJ
CWJyZWFrOworCQkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQpKTsK
KworCQkJCQlpZiAob3ZlcmxheV90bXApIHsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90
bXA7CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3
YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJCQkJ
bXllcnJvcj0xOworCQkJCQkJfQorCQkJCQl9IGVsc2UKKwkJCQkJCW15ZXJyb3I9MTsKKworCQkJ
CQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJCX0K
KwkJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQkJfSBlbHNlCisJCQkJbXllcnJvcj0xOworCisJ
CQlpZiAobXllcnJvcikgeworCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQl3YXJuZigiKGNh
Y2hlIHVwZGF0ZSBwZW5kaW5nKSAlcyA6IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlfbmFtZSk7
CisJCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCQlteWVycm9yPTA7CisJCQkJY29udGludWU7CisJ
CQl9CisKIAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBkaXJuYW1l
KHN0cik7CiAKQEAgLTEzNCw5ICsyMDYsMTcgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCQkJCQkJLy8gZG9pbmcgb3BlcmF0aW9ucyB3aXRoIHRoZW0uCiAJCQkJ
CQkJc3RybmNweShkcCwgcCwgc2l6ZW9mKGRwKSk7CiAJCQkJCQkJc3RybmNweShicCwgcCwgc2l6
ZW9mKGJwKSk7Ci0JCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyAlc1xuIiwKLQkJCQkJCQkJQk9M
RCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwgTk9STSwKKwkJCQkJCQlpZiAoc2hv
d19wYXRoX3RvX2VidWlsZCkgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVz
JXMvJXMvXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnAp
LAorCQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJCWN1cl9v
dmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJ
CXByaW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUo
ZHApLCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3ZlcmxheS0+bmFt
ZSwgTk9STSwKIAkJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiBxKSk7CisJCQkJCQkJfQog
CQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTEvcXVzZS5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3F1c2UuYwotLS0gcG9y
dGFnZS11dGlscy0yMDA2MTExMS9xdXNlLmMJMjAwNi0xMS0xMSAyMzozNzoyMS4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3F1c2UuYwkyMDA2LTExLTE0IDAw
OjMzOjMzLjQwNjEzOTA5NSArMDEwMApAQCAtMTQsMTAgKzE0LDExIEBACiAgcXVzZSAtS2UgLS0g
IG5scwogKi8KIAotI2RlZmluZSBRVVNFX0ZMQUdTICJlYXZLTERGOk4iIENPTU1PTl9GTEFHUwor
I2RlZmluZSBRVVNFX0ZMQUdTICJlYW86dktMREY6TiIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3Ry
dWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0c1tdID0gewogCXsiZXhhY3QiLCAgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdlJ30sCiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwgTlVMTCwg
J2EnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsia2V5d29y
ZHMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdLJ30sCiAJeyJsaWNlbnNlIiwgICBub19hcmd1bWVu
dCwgTlVMTCwgJ0wnfSwKIAl7ImRlc2NyaWJlIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnRCd9LApA
QCAtMjgsNiArMjksNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0
CiBzdGF0aWMgY29uc3QgY2hhciAqcXVzZV9vcHRzX2hlbHBbXSA9IHsKIAkiU2hvdyBleGFjdCBu
b24gcmVnZXhwIG1hdGNoaW5nIHVzaW5nIHN0cmNtcCIsCiAJIlNob3cgYW5ub3lpbmcgdGhpbmdz
IGluIElVU0UiLAorCSJPbmx5IGNvbnNpZGVyIHRoZSA8YXJnPiBvdmVybGF5IiwKIAkiVXNlIHRo
ZSBLRVlXT1JEUyB2cyBJVVNFIiwKIAkiVXNlIHRoZSBMSUNFTlNFIHZzIElVU0UiLAogCSJEZXNj
cmliZSB0aGUgVVNFIGZsYWciLApAQCAtMzgsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAq
cXVzZV9vcHRzX2hlbHBbXSA9IHsKIHN0YXRpYyBjb25zdCBjaGFyIHF1c2VfcmNzaWRbXSA9ICIk
SWQ6IHF1c2UuYyx2IDEuNTMgMjAwNi8xMS8wOSAwMDoxODowNSB2YXBpZXIgRXhwICQiOwogI2Rl
ZmluZSBxdXNlX3VzYWdlKHJldCkgdXNhZ2UocmV0LCBRVVNFX0ZMQUdTLCBxdXNlX2xvbmdfb3B0
cywgcXVzZV9vcHRzX2hlbHAsIGxvb2t1cF9hcHBsZXRfaWR4KCJxdXNlIikpCiAKLWludCBxdXNl
X2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBxdXNl
X2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciByZXBvX3NlYXJjaFtdLCBp
bnQgYXJnYywgY2hhciAqKmFyZ3YpOwogCiBjaGFyIHF1c2VfbmFtZV9vbmx5ID0gMDsKIApAQCAt
ODEsNyArODMsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoCiAJ
fQogfQogCi1pbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBjaGFyICoq
YXJndikKK2ludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciBy
ZXBvX3NlYXJjaFtdLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAjZGVmaW5lIE5VTV9TRUFS
Q0hfRklMRVMgQVJSX1NJWkUoc2VhcmNoX2ZpbGVzKQogCWNoYXIgYnVmW0JVRlNJWkVdLCAqcDsK
QEAgLTkxLDEyMSArOTMsMTYyIEBAIGludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50
IGFyZ2MKIAlGSUxFICpmcFtOVU1fU0VBUkNIX0ZJTEVTXTsKIAlESVIgKmQ7CiAJc3RydWN0IGRp
cmVudCAqZGU7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAotCWZvciAoaSA9IDA7IGkgPCBO
VU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVz
L3Byb2ZpbGVzLyVzIiwgcG9ydGRpciwgc2VhcmNoX2ZpbGVzW2ldKTsKLQkJaWYgKChmcFtpXSA9
IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkKLQkJCXdhcm5wKCJza2lwcGluZyAlcyIsIHNlYXJj
aF9maWxlc1tpXSk7Ci0JfQorCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOwogCi0JZm9yIChp
ID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCXMgPSBzdHJsZW4oYXJndltpXSk7CisJZG8gewor
CQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6
ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9T
RUFSQ0hfRklMRVM7ICsraSkgeworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3By
b2ZpbGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9maWxlc1tpXSk7CisJCQlpZiAo
KGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQorCQkJCWlmICh2ZXJib3NlICkKKwkJ
CQkJd2FybnAoInNraXBwaW5nICVzIGZvciB0aGUgJXMgb3ZlcmxheSIsIHNlYXJjaF9maWxlc1tp
XSwgY3VyX292ZXJsYXktPm5hbWUpOworCQl9CiAKLQkJZm9yIChmID0gMDsgZiA8IE5VTV9TRUFS
Q0hfRklMRVM7ICsrZikgewotCQkJaWYgKGZwW2ZdID09IE5VTEwpCi0JCQkJY29udGludWU7CisJ
CWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgeworCQkJcyA9IHN0cmxlbihhcmd2W2ldKTsK
IAotCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwW2ZdKSAhPSBOVUxMKSB7Ci0J
CQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQlmb3IgKGYgPSAwOyBm
IDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7CisJCQkJaWYgKGZwW2ZdID09IE5VTEwpCiAJCQkJ
CWNvbnRpbnVlOwogCi0JCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQot
CQkJCQkqcCA9ICdcMCc7CisJCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwW2Zd
KSAhPSBOVUxMKSB7CisJCQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4nKQor
CQkJCQkJY29udGludWU7CiAKLQkJCQlzd2l0Y2ggKGYpIHsKLQkJCQkJY2FzZSAwOiAvKiBHbG9i
YWwgdXNlLmRlc2MgKi8KLQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQotCQkJ
CQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09ICctJykgewotCQkJCQkJCQlwcmlu
dGYoIiAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0s
IE5PUk0sIGJ1ZitzKzMpOwotCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCQl9Ci0JCQkJ
CQlicmVhazsKKwkJCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQorCQkJ
CQkJKnAgPSAnXDAnOwogCi0JCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRlc2MgKi8K
LQkJCQkJCWlmICgocCA9IHN0cmNocihidWYsICc6JykpID09IE5VTEwpCisJCQkJCXN3aXRjaCAo
ZikgeworCQkJCQkJY2FzZSAwOiAvKiBHbG9iYWwgdXNlLmRlc2MgKi8KKwkJCQkJCQlpZiAoIXN0
cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKKwkJCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVm
W3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50
b28pCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBCT0xELCBO
T1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UKKwkJCQkJ
CQkJCQlwcmludGYoIiAoJXMpICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwgY3VyX292ZXJsYXkt
Pm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJ
CQkJZ290byBza2lwX2ZpbGU7CisJCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKLQkJCQkJCSsrcDsK
LQkJCQkJCWlmICghc3RybmNtcChwLCBhcmd2W2ldLCBzKSkgewotCQkJCQkJCWlmIChwW3NdID09
ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCSpwID0gJ1wwJzsKLQkJCQkJCQkJcHJp
bnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOwotCQkJCQkJCX0KLQkJCQkJCX0K
LQkJCQkJCWJyZWFrOwogCi0JCQkJCWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBhcmNoLmxpc3Qg
Ki8KLQkJCQkJCWlmICghc3RyY21wKGJ1ZiwgYXJndltpXSkpIHsKLQkJCQkJCQlwcmludGYoIiAl
c2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgYXJndltpXSk7Ci0JCQkJCQkJZ290byBza2lwX2ZpbGU7Ci0JCQkJCQl9Ci0J
CQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRlc2MgKi8KKwkJ
CQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQorCQkJCQkJCQlicmVhazsK
KwkJCQkJCQkrK3A7CisJCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFyZ3ZbaV0sIHMpKSB7CisJCQkJ
CQkJCWlmIChwW3NdID09ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQkqcCA9ICdc
MCc7CisJCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28pCisJCQkJCQkJ
CQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5PUk0sIEJM
VUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJCQkJCQkJZWxz
ZQorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIs
IGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBCT0xE
LCBidWYsIE5PUk0sIHArcyszKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlicmVhazsK
IAotCQkJCQljYXNlIDM6IC8qIExhbmd1YWdlcyBsYW5nLmRlc2MgKi8KLQkJCQkJCWlmICghc3Ry
bmNtcChidWYsIGFyZ3ZbaV0sIHMpKQotCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1Zltz
KzFdID09ICctJykgewotCQkJCQkJCQlwcmludGYoIiAlc2xhbmclczolcyVzJXM6ICVzIGxpbmd1
YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQlj
YXNlIDI6IC8qIEFyY2hpdGVjdHVyZXMgYXJjaC5saXN0ICovCisJCQkJCQkJaWYgKCFzdHJjbXAo
YnVmLCBhcmd2W2ldKSkgeworCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50
b28pCisJCQkJCQkJCQlwcmludGYoIiAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxu
IiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7CisJCQkJCQkJCWVs
c2UKKwkJCQkJCQkJCXByaW50ZigiICglcykgJXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1
cmVcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JN
LCBhcmd2W2ldKTsKIAkJCQkJCQkJZ290byBza2lwX2ZpbGU7CiAJCQkJCQkJfQotCQkJCQkJYnJl
YWs7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgMzogLyogTGFuZ3VhZ2VzIGxhbmcuZGVz
YyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJCQkJCQlpZiAo
YnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlmIChjdXJfb3Zl
cmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlwcmludGYoIiAlc2xhbmclczolcyVz
JXM6ICVzIGxpbmd1YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3Mr
Myk7CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2xhbmclczolcyVz
JXM6ICVzIGxpbmd1YVxuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZ290byBza2lwX2ZpbGU7CisJCQkJCQkJ
CX0KKwkJCQkJCQlicmVhazsKKwkJCQkJfQogCQkJCX0KLQkJCX0KIAogc2tpcF9maWxlOgotCQkJ
cmV3aW5kKGZwW2ZdKTsKKwkJCQlyZXdpbmQoZnBbZl0pOworCQkJfQorCisJCQlpZiAoaSA9PSAo
YXJnYyAtIDEpKQorCQkJCWZvciAoZj0wOyBmPE5VTV9TRUFSQ0hfRklMRVM7ICsrZikKKwkJCQkJ
aWYgKGZwW2ZdKSB7CisJCQkJCQlmY2xvc2UoZnBbZl0pOworCQkJCQkJZnBbZl0gPSBOVUxMOwor
CQkJCQl9CiAJCX0KLQl9CiAKLQlmb3IgKGY9MDsgZjxOVU1fU0VBUkNIX0ZJTEVTOyArK2YpCi0J
CWZjbG9zZShmcFtmXSk7CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0
KSk7CiAKIAkvKiBub3cgc2NhbiB0aGUgZGVzYyBkaXIgKi8KLQlzbnByaW50ZihidWYsIHNpemVv
ZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8iLCBwb3J0ZGlyKTsKLQlkID0gb3BlbmRpcihidWYp
OwotCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7Ci0JCWlmIChzdHJjbXAoZGUt
PmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwgIi5kZXNjIikpCisJY3VyX292ZXJsYXk9b3Zl
cmxheV9nZW50b287CisJZG8geworCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBj
dXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCiAJCQljb250aW51ZTsKLQot
CQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIHBvcnRk
aXIsIGRlLT5kX25hbWUpOwotCQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkg
ewotCQkJd2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzsgc2tpcHBpbmciLCBk
ZS0+ZF9uYW1lKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rl
c2MvIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQlpZiAoIShkID0gb3BlbmRpcihidWYpKSkgewor
CQkJaWYgKHZlcmJvc2UpCisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJXMgLT4gc2tpcHBpbmci
LCBidWYpOwogCQkJY29udGludWU7CiAJCX0KKwkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9
IE5VTEwpIHsKKwkJCWlmIChzdHJjbXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwg
Ii5kZXNjIikpCisJCQkJY29udGludWU7CiAKLQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1
ZiksIGZwWzBdKSAhPSBOVUxMKSB7Ci0JCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0g
J1xuJykKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNjLyVz
IiwgY3VyX292ZXJsYXktPnBhdGgsIGRlLT5kX25hbWUpOworCQkJaWYgKChmcFswXT1mb3Blbihi
dWYsICJyIikpID09IE5VTEwpIHsKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciBy
ZWFkaW5nOyBza2lwcGluZyIsIGRlLT5kX25hbWUpOwogCQkJCWNvbnRpbnVlOworCQkJfQogCi0J
CQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJKnAgPSAnXDAnOwor
CQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7CisJCQkJ
aWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCWNvbnRpbnVlOworCisJ
CQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQorCQkJCQkqcCA9ICdcMCc7
CiAKLQkJCWlmICgocCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwpIHsKKwkJCQlpZiAoKHAg
PSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CiBpbnZhbGlkX2xpbmU6Ci0JCQkJd2Fybigi
SW52YWxpZCBsaW5lIGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKLQkJCQljb250aW51
ZTsKLQkJCX0KLQkJCXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsKLQkJCQkv
KiBtYXliZSB0aGUgZmxhZyBoYXMgYSAnLScgaW4gaXQgLi4uICovCi0JCQkJaWYgKChwID0gc3Ry
Y2hyKHArMSwgJy0nKSkgPT0gTlVMTCkKLQkJCQkJZ290byBpbnZhbGlkX2xpbmU7Ci0JCQl9Ci0J
CQlwWy0xXSA9ICdcMCc7Ci0JCQlwICs9IDI7CisJCQkJCXdhcm4oIkludmFsaWQgbGluZSBpbiAn
JXMnOiAlcyIsIGRlLT5kX25hbWUsIGJ1Zik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQl3
aGlsZSAocFstMV0gIT0gJyAnICYmIHBbMV0gIT0gJyAnKSB7CisJCQkJCS8qIG1heWJlIHRoZSBm
bGFnIGhhcyBhICctJyBpbiBpdCAuLi4gKi8KKwkJCQkJaWYgKChwID0gc3RyY2hyKHArMSwgJy0n
KSkgPT0gTlVMTCkKKwkJCQkJCWdvdG8gaW52YWxpZF9saW5lOworCQkJCX0KKwkJCQlwWy0xXSA9
ICdcMCc7CisJCQkJcCArPSAyOwogCi0JCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspCi0J
CQkJaWYgKCFzdHJjbXAoYXJndltpXSwgYnVmKSkKLQkJCQkJcHJpbnRmKCIgJXMlcyVzOiVzJXMl
czogJXNcbiIsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIHAp
OwotCQl9Ci0JCWNsb3NlKGYpOwotCX0KLQljbG9zZWRpcihkKTsKKwkJCQlmb3IgKGkgPSBpbmQ7
IGkgPCBhcmdjOyBpKyspCisJCQkJCWlmICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpIHsKKwkJCQkJ
CWlmIChjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQlwcmludGYoIiAlcyVz
JXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwg
Tk9STSwgcCk7CisJCQkJCQllbHNlCisJCQkJCQkJcHJpbnRmKCIgKCVzKSAlcyVzJXM6JXMlcyVz
OiAlc1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUs
IGFyZ3ZbaV0sIE5PUk0sIHApOworCQkJCQl9CiAKKwkJCX0KKwkJCWZjbG9zZShmcFswXSk7CisJ
CX0KKwkJY2xvc2VkaXIoZCk7CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5u
ZXh0KSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogewogCUZJTEUgKmZwOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnN0cjsKKwlzaG9ydCBt
eWVycm9yID0gMCwgcmVwbyA9IDA7CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hhciBvdmVy
bGF5X25hbWVbNjRdOwogCiAJY2hhciBidWYwW19RX1BBVEhfTUFYXTsKIAljaGFyIGJ1ZjFbX1Ff
UEFUSF9NQVhdOwpAQCAtMjE4LDYgKzI2MSwxMSBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIAlzaG9ydCBxdXNlX2FsbCA9IDA7CiAJaW50IHJlZ2V4cF9tYXRjaGluZyA9
IDEsIGksIGlkeCA9IDA7CiAJc2l6ZV90IHNlYXJjaF9sZW47CisJb3ZlcmxheV90ICpjdXJfb3Zl
cmxheSwgKm92ZXJsYXlfdG1wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKwlv
dmVybGF5X25hbWVbMF0gPSAwOworCXJlcG9fc2VhcmNoWzBdID0gMDsKIAogCURCRygiYXJnYz0l
ZCBhcmd2WzBdPSVzIGFyZ3ZbMV09JXMiLAogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4gMSA/
IGFyZ3ZbMV0gOiAiTlVMTD8iKTsKQEAgLTIyNiw2ICsyNzQsMTAgQEAgaW50IHF1c2VfbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXN3aXRjaCAoaSkgewogCQljYXNlICdlJzogcmVnZXhw
X21hdGNoaW5nID0gMDsgYnJlYWs7CiAJCWNhc2UgJ2EnOiBxdXNlX2FsbCA9IDE7IGJyZWFrOwor
CQljYXNlICdvJzoKKwkJCXJlcG8gPSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJn
LCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJyZWFrOwogCQljYXNlICdLJzogaWR4ID0gMTsg
YnJlYWs7CiAJCWNhc2UgJ0wnOiBpZHggPSAyOyBicmVhazsKIAkJY2FzZSAnRCc6IGlkeCA9IC0x
OyBicmVhazsKQEAgLTIzNCwxMSArMjg2LDI0IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxdXNlKQogCQl9CiAJfQotCWlmIChh
cmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYgaWR4ID49IDApCisKKwlpZiAocmVwbykgewor
CQlkbyB7CisJCQlpZiAoIXN0cm5jbXAoY3VyX292ZXJsYXktPm5hbWUsIHJlcG9fc2VhcmNoLCBz
aXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoKGN1cl9v
dmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCWlmIChOVUxMID09IGN1cl9vdmVybGF5KQor
CQkJZXJyKCIlcyA6IFVua25vd24gb3ZlcmxheSwgdHJ5ICdxIC0tbHMtb3ZlcmxheXMnIiwgcmVw
b19zZWFyY2gpOworCX0KKworCWlmIChhcmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYgaWR4
ID49IDApIHsKKwkJaWYgKGlkeCA9PSAzKQorCQkJZnJlZShzZWFyY2hfdmFycytpZHgpOwogCQlx
dXNlX3VzYWdlKEVYSVRfRkFJTFVSRSk7CisJfQogCiAJaWYgKGlkeCA9PSAtMSkKLQkJcmV0dXJu
IHF1c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIGFyZ2MsIGFyZ3YpOworCQlyZXR1cm4gcXVzZV9k
ZXNjcmliZV9mbGFnKG9wdGluZCwgcmVwbywgcmVwb19zZWFyY2gsIGFyZ2MsIGFyZ3YpOwogCiAJ
aWYgKHF1c2VfYWxsKSBvcHRpbmQgPSBhcmdjOwogCWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQoKTsJ
Lyogc2V0cyBvdXIgcHdkIHRvICRQT1JURElSICovCkBAIC0yNTAsNiArMzE1LDQzIEBAIGludCBx
dXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlyZXR1cm4gMTsKIAl3aGlsZSAoKGZn
ZXRzKGVidWlsZCwgc2l6ZW9mKGVidWlsZCksIGZwKSkgIT0gTlVMTCkgewogCQlGSUxFICpuZXdm
cDsKKwkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJzonKSkpCisJCXsKKwkJCSpwID0gMDsKKwkJ
CXN0ciA9IHArMjsJCQkvKiBzZXBhcmF0b3IgaXMgJzo6JyAqLworCQkJcCA9IGVidWlsZDsKKwkJ
CWlmIChyZXBvICYmIHN0cm5jbXAocmVwb19zZWFyY2gsIHAsIHNpemVvZihyZXBvX3NlYXJjaCkp
KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9uYW1lLCBwLCBzaXplb2Yo
b3ZlcmxheV9uYW1lKSkpIHsKKwkJCQlvdmVybGF5X3RtcD1vdmVybGF5X2dlbnRvbzsKKwkJCQlk
byB7CisJCQkJCWlmICghc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcCwgc2l6ZW9mKG92ZXJs
YXlfdG1wLT5uYW1lKSkpCisJCQkJCQlicmVhazsKKwkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9
b3ZlcmxheV90bXAtPm5leHQpKTsKKwkJCQlpZiAob3ZlcmxheV90bXApCisJCQkJeworCQkJCQlj
dXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBh
dGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVkIiwg
Y3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJCQkJfSBlbHNl
CisJCQkJCW15ZXJyb3I9MTsKKworCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBjdXJfb3Zlcmxh
eS0+bmFtZSwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJfQorCQkJc3RyY3B5KGVidWlsZCwg
c3RyKTsKKwkJfSBlbHNlCisJCQlteWVycm9yPTE7CisKKwkJaWYgKG15ZXJyb3IpIHsKKwkJCWlm
ICghcmVpbml0aWFsaXplKQorCQkJCXdhcm5mKCIoY2FjaGUgdXBkYXRlIHBlbmRpbmcpICVzIDog
VW5rbm93biBvdmVybGF5Iiwgb3ZlcmxheV9uYW1lKTsKKwkJCXJlaW5pdGlhbGl6ZSA9IDE7CisJ
CQlteWVycm9yPTA7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmICgocCA9IHN0cmNocihlYnVp
bGQsICdcbicpKSAhPSBOVUxMKQogCQkJKnAgPSAwOwogCQlpZiAoKG5ld2ZwID0gZm9wZW4oZWJ1
aWxkLCAiciIpKSAhPSBOVUxMKSB7CkBAIC0zNzUsNyArNDc3LDcgQEAgaW50IHF1c2VfbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWlmICh2ZXJib3NlID4gMykKIAkJCQkJCXByaW50
ZigiJXMgJXMgJXMgIiwgKnVzZXIgPyB1c2VyIDogIk1JU1NJTkciLCAqcmV2aXNpb24gPyByZXZp
c2lvbiA6ICJNSVNTSU5HIiwgKmRhdGUgPyBkYXRlIDogIk1JU1NJTkciKTsKIAotCQkJCQlwcmlu
dGYoIiVzJXMlcyAiLCBDWUFOLCBlYnVpbGQsIE5PUk0pOworCQkJCQlwcmludGYoIiVzJXM6OiVz
JXMgIiwgQ1lBTiwgY3VyX292ZXJsYXktPm5hbWUsIGVidWlsZCwgTk9STSk7CiAJCQkJCXByaW50
X2hpZ2hsaWdodGVkX3VzZV9mbGFncygmYnVmMFtzZWFyY2hfbGVuKzFdLCBvcHRpbmQsIGFyZ2Ms
IGFyZ3YpOwogCQkJCQlwdXRzKE5PUk0pOwogCQkJCQlpZiAodmVyYm9zZSA+IDEpIHsKQEAgLTM4
Myw3ICs0ODUsNyBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJ
CWludCBBUkdDID0gMDsKIAkJCQkJCW1ha2Vhcmd2KCZidWYwW3NlYXJjaF9sZW4rMV0sICZBUkdD
LCAmQVJHVik7CiAJCQkJCQlpZiAoQVJHQyA+IDApIHsKLQkJCQkJCQlxdXNlX2Rlc2NyaWJlX2Zs
YWcoMSwgQVJHQywgQVJHVik7CisJCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIHJlcG8sIHJl
cG9fc2VhcmNoLCBBUkdDLCBBUkdWKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgQVJHQzsgaSsr
KQogCQkJCQkJCQlmcmVlKEFSR1ZbaV0pOwogCQkJCQkJCWZyZWUoQVJHVik7CmRpZmYgLU5hcnVw
IHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEvdGVzdHMvaW5zdGFsbC9kb3Rlc3QgcG9ydGFnZS11dGls
cy0yMDA2MTExMS5uZXcvdGVzdHMvaW5zdGFsbC9kb3Rlc3QKLS0tIHBvcnRhZ2UtdXRpbHMtMjAw
NjExMTEvdGVzdHMvaW5zdGFsbC9kb3Rlc3QJMjAwNi0xMS0xMSAyMzozNzoyMS4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTEubmV3L3Rlc3RzL2luc3RhbGwvZG90ZXN0
CTIwMDYtMTEtMTQgMDA6MzM6MzMuNDUwMTMyNDA3ICswMTAwCkBAIC03LDcgKzcsNyBAQCBkaWUo
KSB7CiAKIGNwIC4uLy4uL3EgLgogLi9xIC1pIHx8IGRpZSAiLi9xIC1pIgotZm9yIGFwcCBpbiAk
KC4vcSAtQ2ggfCBncmVwICcgOiAnIHwgYXdrICd7cHJpbnQgJDF9JykgOyBkbworZm9yIGFwcCBp
biAkKC4vcSAtQ2ggfCBncmVwIC12ICdVc2FnZScgfCBncmVwICcgOiAnIHwgYXdrICd7cHJpbnQg
JDF9JykgOyBkbwogCVsgISAtZSAkYXBwIF0gJiYgZGllICIkYXBwIGRvZXMgbm90IGV4aXN0Igog
ZG9uZQogZWNobyAiUEFTU0VEIgo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101954</attachid>
            <date>2006-11-14 15:30 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExNi9tYWluLmMgcG9ydGFnZS11dGlscy0y
MDA2MTExNi5uZXcvbWFpbi5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTE2L21haW4uYwkyMDA2
LTExLTE2IDA4OjAzOjE0LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTEx
Ni5uZXcvbWFpbi5jCTIwMDYtMTEtMTYgMDg6MDQ6NDUuNjI1NDI5NzgwICswMTAwCkBAIC03MSw2
ICs3MSw3IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRp
YyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2
b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7
CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAg
LTg1LDEzICs4NiwyMSBAQCBzdGF0aWMgaW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRl
bmQgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwotc3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0g
PSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwogc3RhdGlj
IGNoYXIgcG9ydHZkYltdID0gInZhci9kYi9wa2ciOwogc3RhdGljIGNoYXIgcG9ydGNhY2hlZGly
W10gPSAibWV0YWRhdGEvY2FjaGUiOwogc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhd
ID0gIi8iOwogc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMv
IjsKIAordHlwZWRlZiBzdHJ1Y3Qgb3ZlcmxheV90IG92ZXJsYXlfdDsKK3N0cnVjdCBvdmVybGF5
X3QgeworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwYXRoW19RX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qg
b3ZlcmxheV90ICpuZXh0OworfTsKKworc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50b28g
PSBOVUxMOworCiBjaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8iOwog
Y2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKIApAQCAtMjAxLDEw
ICsyMTAsMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTQ2OSwxNyArNDc4LDc5IEBAIGNoYXIgKnN0cmluY3JfdmFyKGNvbnN0IGNoYXIgKm5hbWUs
IGNoYXIKIAlyZXR1cm4gKGNoYXIgKikgdmFsdWU7CiB9CiAKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVy
bGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSkKK3sKKwlzaG9ydCBtZXJyb3IgPSAwOworCWNo
YXIgYnVmW0JVRlNJWkVdLCBmaWxlW19RX1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKKwlvdmVybGF5
X3QgKmN1cl9vdmVybGF5OworCUZJTEUgKnJlcG9fbmFtZUZQOworCXMgPSBwb3J0ZGlyX292ZXJs
YXk7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKworCXdoaWxlICgqcykgeworCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiAoKmN1cl9vdmVybGF5LT5uZXh0KSk7
CisJCWN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQ7CisJCWN1cl9vdmVybGF5LT5uZXh0
ID0gTlVMTDsKKworCQlpZiAoKHA9c3RyY2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc25w
cmludGYoY3VyX292ZXJsYXktPnBhdGgsIHNpemVvZihjdXJfb3ZlcmxheS0+cGF0aCksICIlcyVz
IiwgcG9ydHJvb3QsIHMpOworCisJCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBvdmVybGF5ICov
CisJCXN0cm5jcHkoZmlsZSwgY3VyX292ZXJsYXktPnBhdGgsIF9RX1BBVEhfTUFYKTsKKwkJc3Ry
bmNhdChmaWxlLCAiL3Byb2ZpbGVzL3JlcG9fbmFtZSIsIF9RX1BBVEhfTUFYKTsKKwkJaWYgKChy
ZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikpKQorCQl7CisJCQlpZiAoIShmZ2V0cyhidWYs
IHNpemVvZihidWYpLHJlcG9fbmFtZUZQKSkpCisJCQkJbWVycm9yKys7CisKKwkJCXJtc3BhY2Uo
YnVmKTsKKwkJCWlmICgodCA9IHN0cmNocihidWYsJ1xuJykpKQorCQkJCSp0ID0gMDsKKworCQkJ
c3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVmLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUp
KTsKKworCQkJZmNsb3NlKHJlcG9fbmFtZUZQKTsKKworCQl9IGVsc2UKKwkJCW1lcnJvcisrOwor
CisJCWlmIChtZXJyb3IpIHsKKwkJCS8qIGRlbGV0ZSB0cmFpbGluZyAnLycgKi8KKwkJCXQgPSBj
dXJfb3ZlcmxheS0+cGF0aCArIHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0aCkgLSAxOworCQkJaWYg
KCp0ID09ICcvJykKKwkJCQkqdCA9IDA7CisKKwkJCXN0cm5jcHkoY3VyX292ZXJsYXktPm5hbWUs
IGJhc2VuYW1lKGN1cl9vdmVybGF5LT5wYXRoKSwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7
CisJCQltZXJyb3I9MDsKKwkJfQorCisJCWlmIChwKQorCQkJcyA9IHArMTsKKwkJZWxzZQorCQkJ
YnJlYWs7CisJfQorCit9CisKKwogdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiB7
CiAJY2hhciBub2NvbG9yID0gMDsKIAlpbnQgaSwgZjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlGSUxF
ICpmcDsKKwljaGFyIHRtcF9wb3J0ZGlyW19RX1BBVEhfTUFYXTsKKwljaGFyIHBvcnRkaXJfb3Zl
cmxheVsyMDQ4XSA9ICIiOworCiAJY2hhciBidWZbQlVGU0laRV0sICpzLCAqcDsKIAogCWNoYXIg
cHJvZmlsZVtfUV9QQVRIX01BWF0sIHBvcnRhZ2VfZmlsZVtfUV9QQVRIX01BWF07CisKIAljb25z
dCBjaGFyICpmaWxlc1tdID0ge3BvcnRhZ2VfZmlsZSwgIi9ldGMvbWFrZS5nbG9iYWxzIiwgIi9l
dGMvbWFrZS5jb25mIn07CiAJdHlwZWRlZiBlbnVtIHsgX1FfQk9PTCwgX1FfU1RSLCBfUV9JU1RS
IH0gdmFyX3R5cGVzOworCiAJc3RydWN0IHsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJY29uc3Qg
c2l6ZV90IG5hbWVfbGVuOwpAQCAtNDkzLDEzICs1NjQsMTkgQEAgdm9pZCBpbml0aWFsaXplX3Bv
cnRhZ2VfZW52KHZvaWQpCiAJCXsiQ09ORklHX1BST1RFQ1QiLCAgIDE0LCBfUV9TVFIsICBjb25m
aWdfcHJvdGVjdCwgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KX0sCiAJCXsiTk9DT0xPUiIsICAgICAg
ICAgICA3LCBfUV9CT09MLCAmbm9jb2xvciwgICAgICAgMX0sCiAJCXsiRkVBVFVSRVMiLCAgICAg
ICAgICA4LCBfUV9JU1RSLCBmZWF0dXJlcywgICAgICAgc2l6ZW9mKGZlYXR1cmVzKX0sCi0JCXsi
UE9SVERJUiIsICAgICAgICAgICA3LCBfUV9TVFIsICBwb3J0ZGlyLCAgICAgICAgc2l6ZW9mKHBv
cnRkaXIpfSwKKwkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9RX1NUUiwgIHRtcF9wb3J0ZGly
LCAgICBzaXplb2YodG1wX3BvcnRkaXIpfSwKKwkJeyJQT1JURElSX09WRVJMQVkiLCAgMTUsIF9R
X0lTVFIsIHBvcnRkaXJfb3ZlcmxheSxzaXplb2YocG9ydGRpcl9vdmVybGF5KX0sCiAJCXsiUE9S
VEFHRV9CSU5IT1NUIiwgIDE1LCBfUV9TVFIsICBiaW5ob3N0LCAgICAgICAgc2l6ZW9mKGJpbmhv
c3QpfSwKIAkJeyJQT1JUQUdFX1RNUERJUiIsICAgMTQsIF9RX1NUUiwgIHBvcnRfdG1wZGlyLCAg
ICBzaXplb2YocG9ydF90bXBkaXIpfSwKIAkJeyJQS0dESVIiLCAgICAgICAgICAgIDYsIF9RX1NU
UiwgIHBrZ2RpciwgICAgICAgICBzaXplb2YocGtnZGlyKX0sCiAJCXsiUk9PVCIsICAgICAgICAg
ICAgICA0LCBfUV9TVFIsICBwb3J0cm9vdCwgICAgICAgc2l6ZW9mKHBvcnRyb290KX0KIAl9Owog
CisJb3ZlcmxheV9nZW50b28gPSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlz
dHJjcHkob3ZlcmxheV9nZW50b28tPm5hbWUsImdlbnRvbyIpOworCXN0cm5jcHkodG1wX3BvcnRk
aXIsICIvdXNyL3BvcnRhZ2UiLCBzaXplb2YodG1wX3BvcnRkaXIpKTsKKwlvdmVybGF5X2dlbnRv
by0+bmV4dCA9IE5VTEw7CisKIAlpZiAoKHAgPSBzdHJjaHIocG9ydHJvb3QsICcvJykpICE9IE5V
TEwpCiAJCWlmIChzdHJsZW4ocCkgIT0gMSkKIAkJCXN0cm5jYXQocG9ydHJvb3QsICIvIiwgc2l6
ZW9mKHBvcnRyb290KSk7CkBAIC01OTEsNiArNjY4LDEzIEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0
YWdlX2Vudih2b2lkKQogCQlub19jb2xvcnMoKTsKIAllbHNlCiAJCWNvbG9yX3JlbWFwKCk7CisK
KworCXNucHJpbnRmKG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBzaXplb2Yob3ZlcmxheV9nZW50b28t
PnBhdGgpLCIlcyVzIiwgcG9ydHJvb3QsIHRtcF9wb3J0ZGlyKTsKKworCS8qIG5vdyB3ZSBpbml0
aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQgbGlzdCB3aXRoIG92ZXJsYXlfZ2VudG9vIGFzIHRo
ZSBmaXJzdCAnaXRlbScgICovCisJaW5pdGlhbGl6ZV9vdmVybGF5cyhwb3J0ZGlyX292ZXJsYXkp
OworCiB9CiAKIGVudW0gewpAQCAtNjE5LDE5ICs3MDMsMjEgQEAgY29uc3QgY2hhciAqaW5pdGlh
bGl6ZV9mbGF0KGludCBjYWNoZV90eQogCWludCBhLCBiLCBjLCBkLCBlLCBpOwogCWludCBmcmFj
LCBzZWNzLCBjb3VudDsKIAlGSUxFICpmcDsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5OwogCiAJ
YSA9IGIgPSBjID0gZCA9IGUgPSBpID0gMDsKIAljb3VudCA9IGZyYWMgPSBzZWNzID0gMDsKKwlj
dXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOwogCiAJY2FjaGVfZmlsZSA9IChjYWNoZV90eXBl
ID09IENBQ0hFX0VCVUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURBVEFfRklM
RSk7CiAKLQlpZiAoY2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgiY2hkaXIgdG8gUE9S
VERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmIChjaGRpcihvdmVybGF5X2dlbnRvby0+
cGF0aCkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIG92
ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKGNhY2hlX3R5cGUg
PT0gQ0FDSEVfTUVUQURBVEEgJiYgY2hkaXIocG9ydGNhY2hlZGlyKSAhPSAwKSB7Ci0JCXdhcm5w
KCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycgZmFpbGVkIiwgcG9ydGRpciwgcG9ydGNh
Y2hlZGlyKTsKKwkJd2FybnAoImNoZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVzLyVzJyBmYWlsZWQi
LCBvdmVybGF5X2dlbnRvby0+cGF0aCwgcG9ydGNhY2hlZGlyKTsKIAkJZ290byByZXQ7CiAJfQog
CkBAIC02NDcsNjQgKzczMyw3MSBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQoaW50IGNh
Y2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9IEVOT0VOVCkgewot
CQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNhY2hlX2ZpbGUp
OworCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5w
YXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKChmcCA9IGZvcGVuKGNh
Y2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5nICclcy8lcycgZmFp
bGVkIiwgcG9ydGRpciwgY2FjaGVfZmlsZSk7CisJCXdhcm5mcCgib3BlbmluZyAnJXMvJXMnIGZh
aWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJ
fQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAKLQlpZiAoKGEgPSBzY2FuZGlyKCIu
IiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCi0JCWdvdG8gcmV0
OwotCi0JZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewotCQlzdGF0KGNhdGVnb3J5W2ldLT5kX25h
bWUsICZzdCk7Ci0JCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCWNvbnRpbnVlOwotCQlp
ZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICctJykgPT0gTlVMTCkKLQkJCWlmICgoc3Ry
bmNtcChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAidmlydHVhbCIsIDcpKSAhPSAwKQorCWRvIHsKKwkJ
aWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vIHx8IGNoZGlyKGN1cl9vdmVybGF5LT5w
YXRoKSA9PSAwKSB7CisJCQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJf
aGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCiAJCQkJY29udGludWU7CiAKLQkJaWYgKChiID0gc2Nh
bmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkp
IDwgMCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGMgPSAwOyBjIDwgYjsgYysrKSB7Ci0JCQljaGFy
IGRlW19RX1BBVEhfTUFYXTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKKwkJCQlzdGF0
KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7CisJCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUp
KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICct
JykgPT0gTlVMTCkKKwkJCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ldLT5kX25hbWUsICJ2aXJ0
dWFsIiwgNykpICE9IDApCisJCQkJCQljb250aW51ZTsKIAotCQkJc25wcmludGYoZGUsIHNpemVv
ZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUpOworCQkJ
CWlmICgoYiA9IHNjYW5kaXIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnBuLCBmaWx0ZXJfaGlkZGVu
LCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoYyA9IDA7IGMgPCBi
OyBjKyspIHsKKwkJCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJCWlmIChzdGF0KGRlLCAm
c3QpIDwgMCkKLQkJCQljb250aW51ZTsKKwkJCQkJc25wcmludGYoZGUsIHNpemVvZihkZSksICIl
cy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUpOwogCi0JCQlzd2l0Y2gg
KGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJVSUxEOgotCQkJCWlmICghU19JU0RJUihz
dC5zdF9tb2RlKSkKLQkJCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENBQ0hFX01F
VEFEQVRBOgotCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJCQlmcHJpbnRmKGZwLCAi
JXNcbiIsIGRlKTsKLQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICgoZSA9
IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQkJCWNv
bnRpbnVlOwotCQkJZm9yIChkID0gMDsgZCA8IGU7IGQrKykgewotCQkJCWlmICgocCA9IHN0cnJj
aHIoZWJbZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKLQkJCQkJaWYgKHN0cmNtcChwLCAiLmVi
dWlsZCIpID09IDApIHsKLQkJCQkJCWNvdW50Kys7Ci0JCQkJCQlmcHJpbnRmKGZwLCAiJXMvJXMv
JXNcbiIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5kX25hbWUp
OworCQkJCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCisJCQkJCQljb250aW51ZTsKKworCQkJCQlz
d2l0Y2ggKGNhY2hlX3R5cGUpIHsKKwkJCQkJY2FzZSBDQUNIRV9FQlVJTEQ6CisJCQkJCQlpZiAo
IVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJCQkJY29udGludWU7CisJCQkJCQlicmVhazsKKwkJ
CQkJY2FzZSBDQUNIRV9NRVRBREFUQToKKwkJCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQor
CQkJCQkJCWZwcmludGYoZnAsICIlc1xuIiwgZGUpOworCQkJCQkJY29udGludWU7CisJCQkJCQli
cmVhazsKKwkJCQkJfQorCQkJCQlpZiAoKGUgPSBzY2FuZGlyKGRlLCAmZWIsIGZpbHRlcl9oaWRk
ZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlmb3IgKGQgPSAwOyBk
IDwgZTsgZCsrKSB7CisJCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykp
ICE9IE5VTEwpCisJCQkJCQkJaWYgKHN0cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsKKwkJCQkJ
CQkJY291bnQrKzsKKwkJCQkJCQkJZnByaW50ZihmcCwgIiVzOjolcy8lcy8lc1xuIiwgY3VyX292
ZXJsYXktPm5hbWUsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5k
X25hbWUpOworCQkJCQkJCX0KIAkJCQkJfQorCQkJCQl3aGlsZSAoZC0tKSBmcmVlKGViW2RdKTsK
KwkJCQkJZnJlZShlYik7CisJCQkJfQorCQkJCXdoaWxlIChiLS0pIGZyZWUocG5bYl0pOworCQkJ
CWZyZWUocG4pOwogCQkJfQotCQkJd2hpbGUgKGQtLSkgZnJlZShlYltkXSk7Ci0JCQlmcmVlKGVi
KTsKLQkJfQotCQl3aGlsZSAoYi0tKSBmcmVlKHBuW2JdKTsKLQkJZnJlZShwbik7Ci0JfQorCQl9
IGVsc2UKKwkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZhaWxlZCwgc2tpcHBpbmcgdGhlICVzIHJl
cG9zaXRvcnkiLCBjdXJfb3ZlcmxheS0+cGF0aCwgY3VyX292ZXJsYXktPm5hbWUpOworCisJfSB3
aGlsZSAoKGN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQpKTsKKwogCWZjbG9zZShmcCk7
CiAJd2hpbGUgKGEtLSkgZnJlZShjYXRlZ29yeVthXSk7CiAJZnJlZShjYXRlZ29yeSk7CkBAIC03
MjMsNyArODE2LDcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNoZV90eQog
CiAJd2FybigiRmluaXNoZWQgJXUgZW50cmllcyBpbiAlZC4lMDZkIHNlY29uZHMiLCBjb3VudCwg
c2VjcywgZnJhYyk7CiAJaWYgKHNlY3MgPiAxMDApCi0JCXdhcm4oIllvdSBzaG91bGQgY29uc2lk
ZXIgYSBmYXN0ZXIgZmlsZSBzeXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJUj0nJXMn
IiwgcG9ydGRpcik7CisJCXdhcm4oIllvdSBzaG91bGQgY29uc2lkZXIgYSBmYXN0ZXIgZmlsZSBz
eXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJUj0nJXMnIiwgb3ZlcmxheV9nZW50b28t
PnBhdGgpOwogcmV0OgogCXJldHVybiBjYWNoZV9maWxlOwogfQpAQCAtNzMyLDggKzgyNSw4IEBA
IHJldDoKIAogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCkKIHsKLQlpZiAoKGNo
ZGlyKHBvcnRkaXIpKSAhPSAwKSB7Ci0JCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFp
bGVkIiwgcG9ydGRpcik7CisJaWYgKChjaGRpcihvdmVybGF5X2dlbnRvby0+cGF0aCkpICE9IDAp
IHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRv
by0+cGF0aCk7CiAJCXJldHVybjsKIAl9CiAJdW5saW5rKENBQ0hFX0VCVUlMRF9GSUxFKTsKQEAg
LTEwMDYsMTAgKzEwOTksMjAgQEAgZnVja2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUg
b3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9vdmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9p
ZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlfdCAqb3ZlcmxheSkKK3sKKwlpZiAob3ZlcmxheS0+bmV4
dCkKKwkJZnJlZV9vdmVybGF5cyhvdmVybGF5LT5uZXh0KTsKKwlmcmVlKG92ZXJsYXkpOworfQor
CiB2b2lkIGNsZWFudXAoKQogewogCXJlaW5pdGlhbGl6ZV9hc19uZWVkZWQoKTsKIAlmcmVlX3Nl
dHModmlydHVhbHMpOworCWZyZWVfb3ZlcmxheXMob3ZlcmxheV9nZW50b28pOwogCWZjbG9zZShz
dGRlcnIpOwogfQogCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTYvcS5jIHBvcnRh
Z2UtdXRpbHMtMjAwNjExMTYubmV3L3EuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExNi9xLmMJ
MjAwNi0xMS0xNiAwODowMzoxNC4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAw
NjExMTYubmV3L3EuYwkyMDA2LTExLTE2IDA4OjA0OjQ1LjYyODQyOTMyMyArMDEwMApAQCAtNywx
NSArNywxNyBAQAogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdlciAgLSA8dmFw
aWVyQGdlbnRvby5vcmc+CiAgKi8KIAotI2RlZmluZSBRX0ZMQUdTICJpcm0iIENPTU1PTl9GTEFH
UworI2RlZmluZSBRX0ZMQUdTICJpbHJtIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0
aW9uIGNvbnN0IHFfbG9uZ19vcHRzW10gPSB7CiAJeyJpbnN0YWxsIiwgICAgICBub19hcmd1bWVu
dCwgTlVMTCwgJ2knfSwKKwl7ImxzLW92ZXJsYXlzIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnbCd9
LAogCXsicmVpbml0aWFsaXplIiwgbm9fYXJndW1lbnQsIE5VTEwsICdyJ30sCiAJeyJtZXRhY2Fj
aGUiLCAgICBub19hcmd1bWVudCwgTlVMTCwgJ20nfSwKIAlDT01NT05fTE9OR19PUFRTCiB9Owog
c3RhdGljIGNvbnN0IGNoYXIgKnFfb3B0c19oZWxwW10gPSB7CiAJIkluc3RhbGwgc3ltbGlua3Mg
Zm9yIGFwcGxldHMiLAorCSJMaXN0IGNvbmZpZ3VyZWQgb3ZlcmxheXMiLAogCSJSZWluaXRpYWxp
emUgZWJ1aWxkIGNhY2hlIiwKIAkiUmVpbml0aWFsaXplIG1ldGFkYXRhIGNhY2hlIiwKIAlDT01N
T05fT1BUU19IRUxQCkBAIC03MCw2ICs3Miw3IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCWludCBpOwogCWNoYXIgKnA7CiAJQVBQTEVUIGZ1bmM7CisJb3ZlcmxheV90ICog
Y3VyX292ZXJsYXk7CiAKIAlpZiAoYXJnYyA9PSAwKQogCQlyZXR1cm4gMTsKQEAgLTg5LDYgKzky
LDE1IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BU
U19DQVNFUyhxKQogCQljYXNlICdtJzogcmVpbml0aWFsaXplX21ldGFjYWNoZSA9IDE7IGJyZWFr
OwogCQljYXNlICdyJzogcmVpbml0aWFsaXplID0gMTsgYnJlYWs7CisJCWNhc2UgJ2wnOiB7CisJ
CQlwcmludGYoIlxuJXNPdmVybGF5KHMpIDolc1xuXG4iLCBHUkVFTiwgTk9STSk7CisJCQljdXJf
b3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKKwkJCWRvIHsKKwkJCQlwcmludGYoIiAgIE5hbWUgOiAl
cyUtMjAuMjBzJXMgXHRsb2NhdGlvbiA6ICVzJXMlc1xuIiwgQ1lBTiwgY3VyX292ZXJsYXktPm5h
bWUsIE5PUk0sIENZQU4sIGN1cl9vdmVybGF5LT5wYXRoLCBOT1JNKTsKKwkJCX0gd2hpbGUgKChj
dXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsK
KwkJCXJldHVybiAwOworCQkJfQogCQljYXNlICdpJzogewogCQkJY2hhciBidWZbX1FfUEFUSF9N
QVhdOwogCQkJLyogYWx3YXlzIGJ6ZXJvIGEgYnVmZmVyIGJlZm9yZSB1c2luZyByZWFkbGluaygp
ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTYvcWNhY2hlLmMgcG9ydGFnZS11
dGlscy0yMDA2MTExNi5uZXcvcWNhY2hlLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTYvcWNh
Y2hlLmMJMjAwNi0xMS0xNiAwODowMzoxNC4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRp
bHMtMjAwNjExMTYubmV3L3FjYWNoZS5jCTIwMDYtMTEtMTYgMDg6MDQ6NDUuNjczNDIyNDg0ICsw
MTAwCkBAIC01MTIsMTAgKzUxMiwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5j
KShxY2FjaGVfCiAJaW50IGksIGosIGssIGxlbiwgbnVtX2NhdCwgbnVtX3BrZywgbnVtX2VidWls
ZDsKIAlzdHJ1Y3QgZGlyZWN0ICoqY2F0ZWdvcmllcywgKipwYWNrYWdlcywgKiplYnVpbGRzOwog
Ci0JbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihwb3J0
ZGlyKSArIDEpOworCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VEQikgKyBz
dHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgMSk7CiAJY2F0cGF0aCA9IHhtYWxsb2MobGVu
KTsKIAltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIl
cyVzIiwgUUNBQ0hFX0VEQiwgcG9ydGRpcik7CisJc25wcmludGYoY2F0cGF0aCwgbGVuLCAiJXMl
cyIsIFFDQUNIRV9FREIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAogCWlmICgtMSA9PSAobnVt
X2NhdCA9IHNjYW5kaXIoY2F0cGF0aCwgJmNhdGVnb3JpZXMsIHFjYWNoZV9maWxlX3NlbGVjdCwg
YWxwaGFzb3J0KSkpIHsKIAkJZXJyKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7
CkBAIC01MjcsMTAgKzUyNywxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5jKShx
Y2FjaGVfCiAKIAkvKiB0cmF2ZXJzZSBjYXRlZ29yaWVzICovCiAJZm9yIChpID0gMDsgaSA8IG51
bV9jYXQ7IGkrKykgewotCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKHBvcnRkaXIpICsg
c3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIDEpOworCQlsZW4g
PSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0cmxlbigi
LyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyAxKTsKIAkJcGtncGF0aCA9IHht
YWxsb2MobGVuKTsKIAkJbWVtc2V0KHBrZ3BhdGgsIDAsIGxlbik7Ci0JCXNucHJpbnRmKHBrZ3Bh
dGgsIGxlbiwgIiVzLyVzIiwgcG9ydGRpciwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKKwkJc25w
cmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2F0ZWdv
cmllc1tpXS0+ZF9uYW1lKTsKIAogCQlpZiAoLTEgPT0gKG51bV9wa2cgPSBzY2FuZGlyKHBrZ3Bh
dGgsICZwYWNrYWdlcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQkJd2Fy
bigiJXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNTUyLDEwICs1NTIsMTAg
QEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYykocWNhY2hlXwogCiAJCS8qIHRyYXZl
cnNlIHBhY2thZ2VzICovCiAJCWZvciAoaiA9IDA7IGogPCBudW1fcGtnOyBqKyspIHsKLQkJCWxl
biA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi8iKSArIHN0cmxl
bihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBzdHJsZW4ocGFja2FnZXNb
al0tPmRfbmFtZSkgKyAxKTsKKwkJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3Zlcmxh
eV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9u
YW1lKSArIHN0cmxlbigiLyIpICsgc3RybGVuKHBhY2thZ2VzW2pdLT5kX25hbWUpICsgMSk7CiAJ
CQllYnVpbGRwYXRoID0geG1hbGxvYyhsZW4pOwogCQkJbWVtc2V0KGVidWlsZHBhdGgsIDAsIGxl
bik7Ci0JCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIHBvcnRkaXIsIGNh
dGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRfbmFtZSk7CisJCQlzbnByaW50Zihl
YnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYXRlZ29y
aWVzW2ldLT5kX25hbWUsIHBhY2thZ2VzW2pdLT5kX25hbWUpOwogCiAJCQlpZiAoLTEgPT0gKG51
bV9lYnVpbGQgPSBzY2FuZGlyKGVidWlsZHBhdGgsICZlYnVpbGRzLCBxY2FjaGVfZWJ1aWxkX3Nl
bGVjdCwgcWNhY2hlX3ZlcmNtcCkpKSB7CiAJCQkJd2FybigiJXMgJXMiLCBlYnVpbGRwYXRoLCBz
dHJlcnJvcihlcnJubykpOwpAQCAtNzczLDEwICs3NzMsMTAgQEAgdm9pZCBxY2FjaGVfc3RhdHMo
cWNhY2hlX2RhdGEgKmRhdGEpCiAJCWZvciAoaSA9IDA7IGFyY2hsaXN0W2ldOyBpKyspCiAJCQlh
cmNoaXRlY3R1cmVzKys7CiAKLQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVf
RURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3Ry
bGVuKFFDQUNIRV9FREIpICsgc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIDEpOwogCQlj
YXRwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQkJc25w
cmludGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9FREIsIHBvcnRkaXIpOworCQlzbnBy
aW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgb3ZlcmxheV9nZW50b28tPnBh
dGgpOwogCiAJCWlmICgtMSA9PSAobnVtY2F0ID0gc2NhbmRpcihjYXRwYXRoLCAmY2F0ZWdvcmll
cywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQkJZXJyKCIlcyAlcyIsIGNh
dHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC05MjgsMTEgKzkyOCwxMSBAQCBpbnQgcWNhY2hl
X2luaXQoKQogCWNoYXIgKmZpbGVuYW1lOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlsZW4gICAg
ICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi9wcm9maWxlcy9h
cmNoLmxpc3QiKSArIDEpOworCWxlbiAgICAgID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihvdmVy
bGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi9wcm9maWxlcy9hcmNoLmxpc3QiKSArIDEpOwog
CWZpbGVuYW1lID0geG1hbGxvYyhsZW4pOwogCiAJbWVtc2V0KGZpbGVuYW1lLCAwLCBsZW4pOwot
CXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxlcy9hcmNoLmxpc3QiLCBwb3J0ZGly
KTsKKwlzbnByaW50ZihmaWxlbmFtZSwgbGVuLCAiJXMvcHJvZmlsZXMvYXJjaC5saXN0Iiwgb3Zl
cmxheV9nZW50b28tPnBhdGgpOwogCiAJaWYgKE5VTEwgPT0gKGFyY2hsaXN0ID0gcWNhY2hlX3Jl
YWRfbGluZXMoZmlsZW5hbWUpKSkgewogCQlmcmVlKGZpbGVuYW1lKTsKZGlmZiAtTmFydXAgcG9y
dGFnZS11dGlscy0yMDA2MTExNi9xZ3JlcC5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTYubmV3L3Fn
cmVwLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTYvcWdyZXAuYwkyMDA2LTExLTE2IDA4OjAz
OjE0LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTExNi5uZXcvcWdyZXAu
YwkyMDA2LTExLTE2IDA4OjA0OjQ1LjcxNTQxNjEwMCArMDEwMApAQCAtMTAsMTEgKzEwLDEyIEBA
CiAKICNpZmRlZiBBUFBMRVRfcWdyZXAKIAotI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIY2UiIENP
TU1PTl9GTEFHUworI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIbzpjZSIgQ09NTU9OX0ZMQUdTCiBz
dGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxZ3JlcF9sb25nX29wdHNbXSA9IHsKIAl7ImludmVy
dC1tYXRjaCIsICBub19hcmd1bWVudCwgTlVMTCwgJ0knfSwKIAl7Imlnbm9yZS1jYXNlIiwgICBu
b19hcmd1bWVudCwgTlVMTCwgJ2knfSwKIAl7IndpdGgtZmlsZW5hbWUiLCBub19hcmd1bWVudCwg
TlVMTCwgJ0gnfSwKKwl7Im92ZXJsYXkiLCAgICAgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwK
IAl7ImNvdW50IiwgICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKIAl7InJlZ2V4cCIs
ICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAlDT01NT05fTE9OR19PUFRTCkBAIC0y
Myw2ICsyNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxZ3JlcF9vcHRzX2hlbHBbXSA9IHsKIAki
U2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcyIsCiAJIklnbm9yZSBjYXNlIGRpc3RpbmN0aW9ucyIs
CiAJIlByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBtYXRjaCIsCisJIk9ubHkgY29uc2lkZXIg
dGhlIDxhcmc+IG92ZXJsYXkiLAogCSJPbmx5IHByaW50IGEgY291bnQgb2YgbWF0Y2hpbmcgbGlu
ZXMgcGVyIEZJTEUiLAogCSJVc2UgUEFUVEVSTiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiIsCiAJ
Q09NTU9OX09QVFNfSEVMUApAQCAtMzQsNyArMzYsOSBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJaW50IGNvdW50ID0gMDsKLQljaGFyICpwOwor
CXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsKKwljaGFyIG92ZXJsYXlfbmFtZVs2NF0sIHJl
cG9fc2VhcmNoWzY0XTsKKwljaGFyICpwLCAqc3RyOwogCWNoYXIgZG9fY291bnQsIGRvX3JlZ2V4
OwogCWNoYXIgc2hvd19maWxlbmFtZTsKIAlGSUxFICpmcDsKQEAgLTQyLDEwICs0NiwxNSBAQCBp
bnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhciBidWYwW0JVRlNJWl07
CiAJaW50IHJlZmxhZ3MgPSBSRUdfTk9TVUI7CiAJY2hhciBpbnZlcnRfbWF0Y2ggPSAwOworCW92
ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3RtcDsKIAogCXR5cGVkZWYgY2hhciAqKCpG
VU5DKSAoY2hhciAqLCBjaGFyICopOwogCUZVTkMgc3RyZnVuYyA9IChGVU5DKSBzdHJzdHI7CiAK
KwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJ
cmVwb19zZWFyY2hbMF0gPSAwOworCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0l
cyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwog
CkBAIC01OCwxMiArNjcsMjYgQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQogCQkJc3RyZnVuYyA9IChGVU5DKSBzdHJjYXNlc3RyOwogCQkJcmVmbGFncyB8PSBSRUdfSUNB
U0U7CiAJCQlicmVhazsKKwkJY2FzZSAnSCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVhazsKKwkJ
Y2FzZSAnbyc6CisJCQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywg
c2l6ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IGRvX2NvdW50ID0g
MTsgYnJlYWs7CiAJCWNhc2UgJ2UnOiBkb19yZWdleCA9IDE7IGJyZWFrOwotCQljYXNlICdIJzog
c2hvd19maWxlbmFtZSA9IDE7IGJyZWFrOwogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxZ3JlcCkK
IAkJfQogCX0KKworCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghc3RybmNtcChjdXJfb3Zl
cmxheS0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpKQorCQkJ
CWJyZWFrOworCQl9IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKKwkJ
aWYgKE5VTEwgPT0gY3VyX292ZXJsYXkpCisJCQllcnIoIiVzIDogVW5rbm93biBvdmVybGF5LCB0
cnkgJ3EgLS1scy1vdmVybGF5cyciLCByZXBvX3NlYXJjaCk7CisJfQorCiAJaWYgKGFyZ2MgPT0g
b3B0aW5kKQogCQlxZ3JlcF91c2FnZShFWElUX0ZBSUxVUkUpOwogCkBAIC03Myw2ICs5Niw0MiBA
QCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJldHVybiAxOwogCXdo
aWxlICgoZmdldHMoZWJ1aWxkLCBzaXplb2YoZWJ1aWxkKSwgZnApKSAhPSBOVUxMKSB7CiAJCUZJ
TEUgKm5ld2ZwOworCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJeworCQkJKnAg
PSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQlwID0gZWJ1
aWxkOworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9f
c2VhcmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChvdmVybGF5X25hbWUsIHAs
IHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9v
OworCQkJCWRvIHsKKwkJCQkJaWYgKCFzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXpl
b2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0gd2hpbGUgKChvdmVy
bGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCQkJCWlmIChvdmVybGF5X3RtcCkgeworCQkJ
CQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXkt
PnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVk
IiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJCQkJfSBl
bHNlCisJCQkJCW15ZXJyb3I9MTsKKworCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBwLCBzaXpl
b2Yob3ZlcmxheV9uYW1lKSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQl9IGVs
c2UKKwkJCW15ZXJyb3I9MTsKKworCQlpZiAobXllcnJvcikgeworCQkJaWYgKCFyZWluaXRpYWxp
emUpCisJCQkJd2FybmYoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMgOiBVbmtub3duIG92ZXJs
YXkiLCBvdmVybGF5X25hbWUpOworCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCW15ZXJyb3I9MDsK
KwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJ1xuJykpICE9
IE5VTEwpCiAJCQkqcCA9IDA7CiAJCWlmICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJyIikpICE9
IE5VTEwpIHsKQEAgLTEwMiw3ICsxNjEsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJCQkJY291bnQrKzsKIAkJCQlpZiAoZG9fY291bnQpIGNvbnRpbnVlOwogCQkJ
CWlmICh2ZXJib3NlIHx8IHNob3dfZmlsZW5hbWUpIHsKLQkJCQkJcHJpbnRmKCIlczoiLCBlYnVp
bGQpOworCQkJCQlwcmludGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1aWxkKTsK
IAkJCQkJaWYgKHZlcmJvc2UgPiAxKSBwcmludGYoIiVkOiIsIGxpbmVubyk7CiAJCQkJCXByaW50
ZigiICIpOwogCQkJCX0KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTExNi9xc2VhcmNo
LmMgcG9ydGFnZS11dGlscy0yMDA2MTExNi5uZXcvcXNlYXJjaC5jCi0tLSBwb3J0YWdlLXV0aWxz
LTIwMDYxMTE2L3FzZWFyY2guYwkyMDA2LTExLTE2IDA4OjAzOjE0LjAwMDAwMDAwMCArMDEwMAor
KysgcG9ydGFnZS11dGlscy0yMDA2MTExNi5uZXcvcXNlYXJjaC5jCTIwMDYtMTEtMTYgMDg6MDQ6
NDUuNzQ4NDExMDg0ICswMTAwCkBAIC05LDEwICs5LDEyIEBACiAKICNpZmRlZiBBUFBMRVRfcXNl
YXJjaAogCi0jZGVmaW5lIFFTRUFSQ0hfRkxBR1MgImFjc1NOSCIgQ09NTU9OX0ZMQUdTCisjZGVm
aW5lIFFTRUFSQ0hfRkxBR1MgImFjbzpwc1NOSCIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0
IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfb3B0c1tdID0gewogCXsiYWxsIiwgICAgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdhJ30sCiAJeyJjYWNoZSIsICAgICBub19hcmd1bWVudCwgTlVMTCwg
J2MnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAorCXsic2hvdy1w
YXRoIiwgbm9fYXJndW1lbnQsIE5VTEwsICdwJ30sCiAJeyJzZWFyY2giLCAgICBub19hcmd1bWVu
dCwgTlVMTCwgJ3MnfSwKIAl7ImRlc2MiLCAgICAgICBhX2FyZ3VtZW50LCBOVUxMLCAnUyd9LAog
CXsibmFtZS1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdOJ30sCkBAIC0yMiw2ICsyNCw4IEBA
IHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFzZWFyY2hfbG9uZ18KIHN0YXRpYyBjb25zdCBj
aGFyICpxc2VhcmNoX29wdHNfaGVscFtdID0gewogCSJMaXN0IHRoZSBkZXNjcmlwdGlvbnMgb2Yg
ZXZlcnkgcGFja2FnZSBpbiB0aGUgY2FjaGUiLAogCSJVc2UgdGhlIHBvcnRhZ2UgY2FjaGUiLAor
CSJTZWFyY2ggb25seSBpbiB0aGUgPGFyZz4gb3ZlcmxheSIsCisJIlNob3cgdGhlIHBhdGggdG8g
dGhlIGVidWlsZCIsCiAJIlJlZ2V4IHNlYXJjaCBwYWNrYWdlIGJhc2VuYW1lcyIsCiAJIlJlZ2V4
IHNlYXJjaCBwYWNrYWdlIGRlc2NyaXB0aW9ucyIsCiAJIk9ubHkgc2hvdyBwYWNrYWdlIG5hbWUi
LApAQCAtNDAsMTMgKzQ0LDIwIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogCWNoYXIgbGFzdFsxMjZdID0gIiI7CiAJY2hhciBkcFsxMjZdID0gIiI7CiAJY2hhciBi
cFsxMjZdID0gIiI7Ci0JY2hhciAqcCwgKnEsICpzdHI7CisJc2hvcnQgcmVwbyA9IDA7CisJY2hh
ciByZXBvX3NlYXJjaFs2NF07CisJY2hhciAqcCwgKnEsICpzdHIsIG92ZXJsYXlfbmFtZVs2NF07
CiAJY2hhciAqc2VhcmNoX21lID0gTlVMTDsKLQljaGFyIHNob3dfaG9tZXBhZ2UgPSAwLCBzaG93
X25hbWVfb25seSA9IDA7CisJY2hhciBzaG93X2hvbWVwYWdlID0gMCwgc2hvd19uYW1lX29ubHkg
PSAwLCBzaG93X3BhdGhfdG9fZWJ1aWxkID0gMDsKIAljaGFyIHNlYXJjaF9kZXNjID0gMCwgc2Vh
cmNoX2FsbCA9IDAsIHNlYXJjaF9uYW1lID0gMSwgc2VhcmNoX2NhY2hlID0gQ0FDSEVfRUJVSUxE
OwogCWNvbnN0IGNoYXIgKnNlYXJjaF92YXJzW10gPSB7ICJERVNDUklQVElPTj0iLCAiSE9NRVBB
R0U9IiB9OwogCXNpemVfdCBzZWFyY2hfbGVuOwotCWludCBpLCBpZHg9MDsKKwlvdmVybGF5X3Qg
KmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisJaW50IGksIGlkeD0wLCBteWVycm9yPTA7CisK
KwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJ
cmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0l
cyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwpA
QCAtNTYsNiArNjcsOCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
IAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXNlYXJjaCkKIAkJY2FzZSAnYSc6IHNlYXJjaF9hbGwg
PSAxOyBicmVhazsKIAkJY2FzZSAnYyc6IHNlYXJjaF9jYWNoZSA9IENBQ0hFX01FVEFEQVRBOyBi
cmVhazsKKwkJY2FzZSAnbyc6IHJlcG8gPSAxOyBzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcs
IHNpemVvZihyZXBvX3NlYXJjaCkpOyBicmVhazsKKwkJY2FzZSAncCc6IHNob3dfcGF0aF90b19l
YnVpbGQgPSAxOyBicmVhazsKIAkJY2FzZSAncyc6IHNlYXJjaF9kZXNjID0gMDsgc2VhcmNoX25h
bWUgPSAxOyBicmVhazsKIAkJY2FzZSAnUyc6IHNlYXJjaF9kZXNjID0gMTsgc2VhcmNoX25hbWUg
PSAwOyBicmVhazsKIAkJY2FzZSAnTic6IHNob3dfbmFtZV9vbmx5ID0gMTsgYnJlYWs7CkBAIC02
Myw2ICs3NiwxNiBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ
fQogCX0KIAorCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghIHN0cm5jbXAoY3VyX292ZXJs
YXktPm5hbWUsIHJlcG9fc2VhcmNoLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkKKwkJCQli
cmVhazsKKwkJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCWlm
IChOVUxMID09IGN1cl9vdmVybGF5KQorCQkJZXJyKCIlcyA6IFVua25vd24gb3ZlcmxheSwgdHJ5
ICdxIC0tbHMtb3ZlcmxheXMnIiwgcmVwb19zZWFyY2gpOworCX0KKworCiAJaWYgKHNlYXJjaF9h
bGwpIHsKIAkJc2VhcmNoX2Rlc2MgPSAxOwogCQlzZWFyY2hfbmFtZSA9IDA7CkBAIC05MywxMSAr
MTE2LDIyIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYg
KChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUoZWJ1aWxkKSkgIT0gTlVMTCkgewogCQkJCWlmICgo
c3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxhc3QpKSAhPSAwKSB7CiAJCQkJCXN0cm5jcHkobGFz
dCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9mKGxhc3QpKTsKLQkJCQkJaWYgKChyZW1hdGNoKHNl
YXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNhY2hlLT5ERVNDUklQVElPTiA6IGVidWlsZCksIFJF
R19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09IDApCi0JCQkJCQlwcmludGYoIiVzJXMvJXMlcyVz
ICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLCBCTFVFLAotCQkJCQkJICAgICAg
IHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0JCQkJCQkgICAgICAgKHNob3dfbmFtZV9vbmx5ID8g
IiIgOgotCQkJCQkJICAgICAgICAoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBBR0UgOiBw
Y2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2Vh
cmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBUSU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwg
UkVHX0lDQVNFKSkgPT0gMCkgeworCQkJCQkJaWYgKHNob3dfcGF0aF90b19lYnVpbGQpIHsKKwkJ
CQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMvJXMvXG4iLAorCQkJCQkJCUJPTEQs
IHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxVRSwgcGNhY2hlLT5hdG9tLT5QTiwK
KwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJY3VyX292ZXJs
YXktPnBhdGgsIGRpcm5hbWUoZWJ1aWxkKSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXByaW50
ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJQk9MRCwgcGNhY2hlLT5hdG9tLT5D
QVRFR09SWSwKKwkJCQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAorCQkJCQkJCVlFTExPVyxj
dXJfb3ZlcmxheS0+bmFtZSwgTk9STSwKKwkJCQkJCQkoc2hvd19uYW1lX29ubHkgPyAiIiA6CisJ
CQkJCQkJKHNob3dfaG9tZXBhZ2UgPyBwY2FjaGUtPkhPTUVQQUdFIDogcGNhY2hlLT5ERVNDUklQ
VElPTikpKTsKKwkJCQkJCX0KKwkJCQkJfQogCQkJCX0KIAkJCQljYWNoZV9mcmVlKHBjYWNoZSk7
CiAJCQl9IGVsc2UgewpAQCAtMTEwLDYgKzE0NCw0NCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAogCQljYXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklMRSAqZWJ1
aWxkZnA7CisJCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJCXsKKwkJCQkqcCA9
IDA7CisJCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQkJcCA9IGVi
dWlsZDsKKwkJCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBwLCBzaXplb2YocmVw
b19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9uYW1l
LCBwLCBzaXplb2Yob3ZlcmxheV9uYW1lKSkpIHsKKwkJCQkJbGFzdFswXSA9IDA7CisJCQkJCW92
ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0cm5jbXAo
b3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCQkJ
CWJyZWFrOworCQkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQpKTsK
KworCQkJCQlpZiAob3ZlcmxheV90bXApIHsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90
bXA7CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3
YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJCQkJ
bXllcnJvcj0xOworCQkJCQkJfQorCQkJCQl9IGVsc2UKKwkJCQkJCW15ZXJyb3I9MTsKKworCQkJ
CQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJCX0K
KwkJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQkJfSBlbHNlCisJCQkJbXllcnJvcj0xOworCisJ
CQlpZiAobXllcnJvcikgeworCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQl3YXJuZigiKGNh
Y2hlIHVwZGF0ZSBwZW5kaW5nKSAlcyA6IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlfbmFtZSk7
CisJCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCQlteWVycm9yPTA7CisJCQkJY29udGludWU7CisJ
CQl9CisKIAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBkaXJuYW1l
KHN0cik7CiAKQEAgLTEzNCw5ICsyMDYsMTcgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCQkJCQkJLy8gZG9pbmcgb3BlcmF0aW9ucyB3aXRoIHRoZW0uCiAJCQkJ
CQkJc3RybmNweShkcCwgcCwgc2l6ZW9mKGRwKSk7CiAJCQkJCQkJc3RybmNweShicCwgcCwgc2l6
ZW9mKGJwKSk7Ci0JCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyAlc1xuIiwKLQkJCQkJCQkJQk9M
RCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwgTk9STSwKKwkJCQkJCQlpZiAoc2hv
d19wYXRoX3RvX2VidWlsZCkgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVz
JXMvJXMvXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnAp
LAorCQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJCWN1cl9v
dmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJ
CXByaW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUo
ZHApLCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3ZlcmxheS0+bmFt
ZSwgTk9STSwKIAkJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiBxKSk7CisJCQkJCQkJfQog
CQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMTYvcXVzZS5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTYubmV3L3F1c2UuYwotLS0gcG9y
dGFnZS11dGlscy0yMDA2MTExNi9xdXNlLmMJMjAwNi0xMS0xNiAwODowMzoxNC4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMTYubmV3L3F1c2UuYwkyMDA2LTExLTE2IDA5
OjM1OjIwLjgxOTE1NDczOSArMDEwMApAQCAtMTQsMTAgKzE0LDExIEBACiAgcXVzZSAtS2UgLS0g
IG5scwogKi8KIAotI2RlZmluZSBRVVNFX0ZMQUdTICJlYXZLTERGOk4iIENPTU1PTl9GTEFHUwor
I2RlZmluZSBRVVNFX0ZMQUdTICJlYW86dktMREY6TiIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3Ry
dWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0c1tdID0gewogCXsiZXhhY3QiLCAgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdlJ30sCiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwgTlVMTCwg
J2EnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsia2V5d29y
ZHMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdLJ30sCiAJeyJsaWNlbnNlIiwgICBub19hcmd1bWVu
dCwgTlVMTCwgJ0wnfSwKIAl7ImRlc2NyaWJlIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnRCd9LApA
QCAtMjgsNiArMjksNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0
CiBzdGF0aWMgY29uc3QgY2hhciAqcXVzZV9vcHRzX2hlbHBbXSA9IHsKIAkiU2hvdyBleGFjdCBu
b24gcmVnZXhwIG1hdGNoaW5nIHVzaW5nIHN0cmNtcCIsCiAJIlNob3cgYW5ub3lpbmcgdGhpbmdz
IGluIElVU0UiLAorCSJPbmx5IGNvbnNpZGVyIHRoZSA8YXJnPiBvdmVybGF5IiwKIAkiVXNlIHRo
ZSBLRVlXT1JEUyB2cyBJVVNFIiwKIAkiVXNlIHRoZSBMSUNFTlNFIHZzIElVU0UiLAogCSJEZXNj
cmliZSB0aGUgVVNFIGZsYWciLApAQCAtMzgsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAq
cXVzZV9vcHRzX2hlbHBbXSA9IHsKIHN0YXRpYyBjb25zdCBjaGFyIHF1c2VfcmNzaWRbXSA9ICIk
SWQ6IHF1c2UuYyx2IDEuNTMgMjAwNi8xMS8wOSAwMDoxODowNSB2YXBpZXIgRXhwICQiOwogI2Rl
ZmluZSBxdXNlX3VzYWdlKHJldCkgdXNhZ2UocmV0LCBRVVNFX0ZMQUdTLCBxdXNlX2xvbmdfb3B0
cywgcXVzZV9vcHRzX2hlbHAsIGxvb2t1cF9hcHBsZXRfaWR4KCJxdXNlIikpCiAKLWludCBxdXNl
X2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBxdXNl
X2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciByZXBvX3NlYXJjaFtdLCBp
bnQgYXJnYywgY2hhciAqKmFyZ3YpOwogCiBjaGFyIHF1c2VfbmFtZV9vbmx5ID0gMDsKIApAQCAt
ODEsNyArODMsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoCiAJ
fQogfQogCi1pbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBjaGFyICoq
YXJndikKK2ludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciBy
ZXBvX3NlYXJjaFtdLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAjZGVmaW5lIE5VTV9TRUFS
Q0hfRklMRVMgQVJSX1NJWkUoc2VhcmNoX2ZpbGVzKQogCWNoYXIgYnVmW0JVRlNJWkVdLCAqcDsK
QEAgLTkxLDEyMSArOTMsMTYyIEBAIGludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50
IGFyZ2MKIAlGSUxFICpmcFtOVU1fU0VBUkNIX0ZJTEVTXTsKIAlESVIgKmQ7CiAJc3RydWN0IGRp
cmVudCAqZGU7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAotCWZvciAoaSA9IDA7IGkgPCBO
VU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVz
L3Byb2ZpbGVzLyVzIiwgcG9ydGRpciwgc2VhcmNoX2ZpbGVzW2ldKTsKLQkJaWYgKChmcFtpXSA9
IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkKLQkJCXdhcm5wKCJza2lwcGluZyAlcyIsIHNlYXJj
aF9maWxlc1tpXSk7Ci0JfQorCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOwogCi0JZm9yIChp
ID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCXMgPSBzdHJsZW4oYXJndltpXSk7CisJZG8gewor
CQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6
ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9T
RUFSQ0hfRklMRVM7ICsraSkgeworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3By
b2ZpbGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9maWxlc1tpXSk7CisJCQlpZiAo
KGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQorCQkJCWlmICh2ZXJib3NlICkKKwkJ
CQkJd2FybnAoInNraXBwaW5nICVzIGZvciB0aGUgJXMgb3ZlcmxheSIsIHNlYXJjaF9maWxlc1tp
XSwgY3VyX292ZXJsYXktPm5hbWUpOworCQl9CiAKLQkJZm9yIChmID0gMDsgZiA8IE5VTV9TRUFS
Q0hfRklMRVM7ICsrZikgewotCQkJaWYgKGZwW2ZdID09IE5VTEwpCi0JCQkJY29udGludWU7CisJ
CWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgeworCQkJcyA9IHN0cmxlbihhcmd2W2ldKTsK
IAotCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwW2ZdKSAhPSBOVUxMKSB7Ci0J
CQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQlmb3IgKGYgPSAwOyBm
IDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7CisJCQkJaWYgKGZwW2ZdID09IE5VTEwpCiAJCQkJ
CWNvbnRpbnVlOwogCi0JCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQot
CQkJCQkqcCA9ICdcMCc7CisJCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwW2Zd
KSAhPSBOVUxMKSB7CisJCQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4nKQor
CQkJCQkJY29udGludWU7CiAKLQkJCQlzd2l0Y2ggKGYpIHsKLQkJCQkJY2FzZSAwOiAvKiBHbG9i
YWwgdXNlLmRlc2MgKi8KLQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQotCQkJ
CQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09ICctJykgewotCQkJCQkJCQlwcmlu
dGYoIiAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0s
IE5PUk0sIGJ1ZitzKzMpOwotCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCQl9Ci0JCQkJ
CQlicmVhazsKKwkJCQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQorCQkJ
CQkJKnAgPSAnXDAnOwogCi0JCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRlc2MgKi8K
LQkJCQkJCWlmICgocCA9IHN0cmNocihidWYsICc6JykpID09IE5VTEwpCisJCQkJCXN3aXRjaCAo
ZikgeworCQkJCQkJY2FzZSAwOiAvKiBHbG9iYWwgdXNlLmRlc2MgKi8KKwkJCQkJCQlpZiAoIXN0
cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKKwkJCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVm
W3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50
b28pCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBCT0xELCBO
T1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UKKwkJCQkJ
CQkJCQlwcmludGYoIiAoJXMpICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwgY3VyX292ZXJsYXkt
Pm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJ
CQkJZ290byBza2lwX2ZpbGU7CisJCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKLQkJCQkJCSsrcDsK
LQkJCQkJCWlmICghc3RybmNtcChwLCBhcmd2W2ldLCBzKSkgewotCQkJCQkJCWlmIChwW3NdID09
ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCSpwID0gJ1wwJzsKLQkJCQkJCQkJcHJp
bnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOwotCQkJCQkJCX0KLQkJCQkJCX0K
LQkJCQkJCWJyZWFrOwogCi0JCQkJCWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBhcmNoLmxpc3Qg
Ki8KLQkJCQkJCWlmICghc3RyY21wKGJ1ZiwgYXJndltpXSkpIHsKLQkJCQkJCQlwcmludGYoIiAl
c2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgYXJndltpXSk7Ci0JCQkJCQkJZ290byBza2lwX2ZpbGU7Ci0JCQkJCQl9Ci0J
CQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMTogLyogTG9jYWwgdXNlLmxvY2FsLmRlc2MgKi8KKwkJ
CQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQorCQkJCQkJCQlicmVhazsK
KwkJCQkJCQkrK3A7CisJCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFyZ3ZbaV0sIHMpKSB7CisJCQkJ
CQkJCWlmIChwW3NdID09ICcgJyAmJiBwW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQkqcCA9ICdc
MCc7CisJCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28pCisJCQkJCQkJ
CQkJcHJpbnRmKCIgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIsIEJPTEQsIE5PUk0sIEJM
VUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJCQkJCQkJZWxz
ZQorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNsb2NhbCVzOiVzJXMlczolcyVzJXMgJXNcbiIs
IGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBCT0xE
LCBidWYsIE5PUk0sIHArcyszKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlicmVhazsK
IAotCQkJCQljYXNlIDM6IC8qIExhbmd1YWdlcyBsYW5nLmRlc2MgKi8KLQkJCQkJCWlmICghc3Ry
bmNtcChidWYsIGFyZ3ZbaV0sIHMpKQotCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1Zltz
KzFdID09ICctJykgewotCQkJCQkJCQlwcmludGYoIiAlc2xhbmclczolcyVzJXM6ICVzIGxpbmd1
YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQlj
YXNlIDI6IC8qIEFyY2hpdGVjdHVyZXMgYXJjaC5saXN0ICovCisJCQkJCQkJaWYgKCFzdHJjbXAo
YnVmLCBhcmd2W2ldKSkgeworCQkJCQkJCQlpZiAoY3VyX292ZXJsYXkgPT0gb3ZlcmxheV9nZW50
b28pCisJCQkJCQkJCQlwcmludGYoIiAlc2FyY2glczolcyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxu
IiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYXJndltpXSk7CisJCQkJCQkJCWVs
c2UKKwkJCQkJCQkJCXByaW50ZigiICglcykgJXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1
cmVcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JN
LCBhcmd2W2ldKTsKIAkJCQkJCQkJZ290byBza2lwX2ZpbGU7CiAJCQkJCQkJfQotCQkJCQkJYnJl
YWs7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgMzogLyogTGFuZ3VhZ2VzIGxhbmcuZGVz
YyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJCQkJCQlpZiAo
YnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlmIChjdXJfb3Zl
cmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlwcmludGYoIiAlc2xhbmclczolcyVz
JXM6ICVzIGxpbmd1YVxuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3Mr
Myk7CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2xhbmclczolcyVz
JXM6ICVzIGxpbmd1YVxuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZ290byBza2lwX2ZpbGU7CisJCQkJCQkJ
CX0KKwkJCQkJCQlicmVhazsKKwkJCQkJfQogCQkJCX0KLQkJCX0KIAogc2tpcF9maWxlOgotCQkJ
cmV3aW5kKGZwW2ZdKTsKKwkJCQlyZXdpbmQoZnBbZl0pOworCQkJfQorCisJCQlpZiAoaSA9PSAo
YXJnYyAtIDEpKQorCQkJCWZvciAoZj0wOyBmPE5VTV9TRUFSQ0hfRklMRVM7ICsrZikKKwkJCQkJ
aWYgKGZwW2ZdKSB7CisJCQkJCQlmY2xvc2UoZnBbZl0pOworCQkJCQkJZnBbZl0gPSBOVUxMOwor
CQkJCQl9CiAJCX0KLQl9CiAKLQlmb3IgKGY9MDsgZjxOVU1fU0VBUkNIX0ZJTEVTOyArK2YpCi0J
CWZjbG9zZShmcFtmXSk7CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0
KSk7CiAKIAkvKiBub3cgc2NhbiB0aGUgZGVzYyBkaXIgKi8KLQlzbnByaW50ZihidWYsIHNpemVv
ZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8iLCBwb3J0ZGlyKTsKLQlkID0gb3BlbmRpcihidWYp
OwotCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7Ci0JCWlmIChzdHJjbXAoZGUt
PmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwgIi5kZXNjIikpCisJY3VyX292ZXJsYXk9b3Zl
cmxheV9nZW50b287CisJZG8geworCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBj
dXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCiAJCQljb250aW51ZTsKLQot
CQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIHBvcnRk
aXIsIGRlLT5kX25hbWUpOwotCQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkg
ewotCQkJd2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzsgc2tpcHBpbmciLCBk
ZS0+ZF9uYW1lKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rl
c2MvIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQlpZiAoIShkID0gb3BlbmRpcihidWYpKSkgewor
CQkJaWYgKHZlcmJvc2UpCisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJXMgLT4gc2tpcHBpbmci
LCBidWYpOwogCQkJY29udGludWU7CiAJCX0KKwkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9
IE5VTEwpIHsKKwkJCWlmIChzdHJjbXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSktNSwg
Ii5kZXNjIikpCisJCQkJY29udGludWU7CiAKLQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1
ZiksIGZwWzBdKSAhPSBOVUxMKSB7Ci0JCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0g
J1xuJykKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNjLyVz
IiwgY3VyX292ZXJsYXktPnBhdGgsIGRlLT5kX25hbWUpOworCQkJaWYgKChmcFswXT1mb3Blbihi
dWYsICJyIikpID09IE5VTEwpIHsKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciBy
ZWFkaW5nOyBza2lwcGluZyIsIGRlLT5kX25hbWUpOwogCQkJCWNvbnRpbnVlOworCQkJfQogCi0J
CQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJKnAgPSAnXDAnOwor
CQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7CisJCQkJ
aWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCWNvbnRpbnVlOworCisJ
CQkJaWYgKChwID0gc3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQorCQkJCQkqcCA9ICdcMCc7
CiAKLQkJCWlmICgocCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwpIHsKKwkJCQlpZiAoKHAg
PSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CiBpbnZhbGlkX2xpbmU6Ci0JCQkJd2Fybigi
SW52YWxpZCBsaW5lIGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKLQkJCQljb250aW51
ZTsKLQkJCX0KLQkJCXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsKLQkJCQkv
KiBtYXliZSB0aGUgZmxhZyBoYXMgYSAnLScgaW4gaXQgLi4uICovCi0JCQkJaWYgKChwID0gc3Ry
Y2hyKHArMSwgJy0nKSkgPT0gTlVMTCkKLQkJCQkJZ290byBpbnZhbGlkX2xpbmU7Ci0JCQl9Ci0J
CQlwWy0xXSA9ICdcMCc7Ci0JCQlwICs9IDI7CisJCQkJCXdhcm4oIkludmFsaWQgbGluZSBpbiAn
JXMnOiAlcyIsIGRlLT5kX25hbWUsIGJ1Zik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQl3
aGlsZSAocFstMV0gIT0gJyAnICYmIHBbMV0gIT0gJyAnKSB7CisJCQkJCS8qIG1heWJlIHRoZSBm
bGFnIGhhcyBhICctJyBpbiBpdCAuLi4gKi8KKwkJCQkJaWYgKChwID0gc3RyY2hyKHArMSwgJy0n
KSkgPT0gTlVMTCkKKwkJCQkJCWdvdG8gaW52YWxpZF9saW5lOworCQkJCX0KKwkJCQlwWy0xXSA9
ICdcMCc7CisJCQkJcCArPSAyOwogCi0JCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspCi0J
CQkJaWYgKCFzdHJjbXAoYXJndltpXSwgYnVmKSkKLQkJCQkJcHJpbnRmKCIgJXMlcyVzOiVzJXMl
czogJXNcbiIsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIHAp
OwotCQl9Ci0JCWNsb3NlKGYpOwotCX0KLQljbG9zZWRpcihkKTsKKwkJCQlmb3IgKGkgPSBpbmQ7
IGkgPCBhcmdjOyBpKyspCisJCQkJCWlmICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpIHsKKwkJCQkJ
CWlmIChjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQlwcmludGYoIiAlcyVz
JXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwg
Tk9STSwgcCk7CisJCQkJCQllbHNlCisJCQkJCQkJcHJpbnRmKCIgKCVzKSAlcyVzJXM6JXMlcyVz
OiAlc1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUs
IGFyZ3ZbaV0sIE5PUk0sIHApOworCQkJCQl9CiAKKwkJCX0KKwkJCWZjbG9zZShmcFswXSk7CisJ
CX0KKwkJY2xvc2VkaXIoZCk7CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5u
ZXh0KSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogewogCUZJTEUgKmZwOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnN0cjsKKwlzaG9ydCBt
eWVycm9yID0gMCwgcmVwbyA9IDA7CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hhciBvdmVy
bGF5X25hbWVbNjRdOwogCiAJY2hhciBidWYwW19RX1BBVEhfTUFYXTsKIAljaGFyIGJ1ZjFbX1Ff
UEFUSF9NQVhdOwpAQCAtMjE4LDYgKzI2MSwxMSBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIAlzaG9ydCBxdXNlX2FsbCA9IDA7CiAJaW50IHJlZ2V4cF9tYXRjaGluZyA9
IDEsIGksIGlkeCA9IDA7CiAJc2l6ZV90IHNlYXJjaF9sZW47CisJb3ZlcmxheV90ICpjdXJfb3Zl
cmxheSwgKm92ZXJsYXlfdG1wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKwlv
dmVybGF5X25hbWVbMF0gPSAwOworCXJlcG9fc2VhcmNoWzBdID0gMDsKIAogCURCRygiYXJnYz0l
ZCBhcmd2WzBdPSVzIGFyZ3ZbMV09JXMiLAogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4gMSA/
IGFyZ3ZbMV0gOiAiTlVMTD8iKTsKQEAgLTIyNiw2ICsyNzQsMTAgQEAgaW50IHF1c2VfbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXN3aXRjaCAoaSkgewogCQljYXNlICdlJzogcmVnZXhw
X21hdGNoaW5nID0gMDsgYnJlYWs7CiAJCWNhc2UgJ2EnOiBxdXNlX2FsbCA9IDE7IGJyZWFrOwor
CQljYXNlICdvJzoKKwkJCXJlcG8gPSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJn
LCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJyZWFrOwogCQljYXNlICdLJzogaWR4ID0gMTsg
YnJlYWs7CiAJCWNhc2UgJ0wnOiBpZHggPSAyOyBicmVhazsKIAkJY2FzZSAnRCc6IGlkeCA9IC0x
OyBicmVhazsKQEAgLTIzNCwxMSArMjg2LDI0IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxdXNlKQogCQl9CiAJfQotCWlmIChh
cmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYgaWR4ID49IDApCisKKwlpZiAocmVwbykgewor
CQlkbyB7CisJCQlpZiAoIXN0cm5jbXAoY3VyX292ZXJsYXktPm5hbWUsIHJlcG9fc2VhcmNoLCBz
aXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoKGN1cl9v
dmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCWlmIChOVUxMID09IGN1cl9vdmVybGF5KQor
CQkJZXJyKCIlcyA6IFVua25vd24gb3ZlcmxheSwgdHJ5ICdxIC0tbHMtb3ZlcmxheXMnIiwgcmVw
b19zZWFyY2gpOworCX0KKworCWlmIChhcmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYgaWR4
ID49IDApIHsKKwkJaWYgKGlkeCA9PSAzKQorCQkJZnJlZShzZWFyY2hfdmFyc1tpZHhdKTsKIAkJ
cXVzZV91c2FnZShFWElUX0ZBSUxVUkUpOworCX0KIAogCWlmIChpZHggPT0gLTEpCi0JCXJldHVy
biBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCBhcmdjLCBhcmd2KTsKKwkJcmV0dXJuIHF1c2Vf
ZGVzY3JpYmVfZmxhZyhvcHRpbmQsIHJlcG8sIHJlcG9fc2VhcmNoLCBhcmdjLCBhcmd2KTsKIAog
CWlmIChxdXNlX2FsbCkgb3B0aW5kID0gYXJnYzsKIAlpbml0aWFsaXplX2VidWlsZF9mbGF0KCk7
CS8qIHNldHMgb3VyIHB3ZCB0byAkUE9SVERJUiAqLwpAQCAtMjUwLDYgKzMxNSw0MyBAQCBpbnQg
cXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcmV0dXJuIDE7CiAJd2hpbGUgKChm
Z2V0cyhlYnVpbGQsIHNpemVvZihlYnVpbGQpLCBmcCkpICE9IE5VTEwpIHsKIAkJRklMRSAqbmV3
ZnA7CisJCWlmICgocCA9IHN0cmNocihlYnVpbGQsICc6JykpKQorCQl7CisJCQkqcCA9IDA7CisJ
CQlzdHIgPSBwKzI7CQkJLyogc2VwYXJhdG9yIGlzICc6OicgKi8KKwkJCXAgPSBlYnVpbGQ7CisJ
CQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBwLCBzaXplb2YocmVwb19zZWFyY2gp
KSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdHJuY21wKG92ZXJsYXlfbmFtZSwgcCwgc2l6ZW9m
KG92ZXJsYXlfbmFtZSkpKSB7CisJCQkJb3ZlcmxheV90bXA9b3ZlcmxheV9nZW50b287CisJCQkJ
ZG8geworCQkJCQlpZiAoIXN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVy
bGF5X3RtcC0+bmFtZSkpKQorCQkJCQkJYnJlYWs7CisJCQkJfSB3aGlsZSAoKG92ZXJsYXlfdG1w
PW92ZXJsYXlfdG1wLT5uZXh0KSk7CisJCQkJaWYgKG92ZXJsYXlfdG1wKQorCQkJCXsKKwkJCQkJ
Y3VyX292ZXJsYXkgPSBvdmVybGF5X3RtcDsKKwkJCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5w
YXRoKSAhPSAwKSB7CisJCQkJCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIs
IGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkJCW15ZXJyb3I9MTsKKwkJCQkJfQorCQkJCX0gZWxz
ZQorCQkJCQlteWVycm9yPTE7CisKKwkJCQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgY3VyX292ZXJs
YXktPm5hbWUsIHNpemVvZihvdmVybGF5X25hbWUpKTsKKwkJCX0KKwkJCXN0cmNweShlYnVpbGQs
IHN0cik7CisJCX0gZWxzZQorCQkJbXllcnJvcj0xOworCisJCWlmIChteWVycm9yKSB7CisJCQlp
ZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQl3YXJuZigiKGNhY2hlIHVwZGF0ZSBwZW5kaW5nKSAlcyA6
IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlfbmFtZSk7CisJCQlyZWluaXRpYWxpemUgPSAxOwor
CQkJbXllcnJvcj0wOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAoKHAgPSBzdHJjaHIoZWJ1
aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKIAkJaWYgKChuZXdmcCA9IGZvcGVuKGVi
dWlsZCwgInIiKSkgIT0gTlVMTCkgewpAQCAtMzc1LDcgKzQ3Nyw3IEBAIGludCBxdXNlX21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQlpZiAodmVyYm9zZSA+IDMpCiAJCQkJCQlwcmlu
dGYoIiVzICVzICVzICIsICp1c2VyID8gdXNlciA6ICJNSVNTSU5HIiwgKnJldmlzaW9uID8gcmV2
aXNpb24gOiAiTUlTU0lORyIsICpkYXRlID8gZGF0ZSA6ICJNSVNTSU5HIik7CiAKLQkJCQkJcHJp
bnRmKCIlcyVzJXMgIiwgQ1lBTiwgZWJ1aWxkLCBOT1JNKTsKKwkJCQkJcHJpbnRmKCIlcyVzOjol
cyVzICIsIENZQU4sIGN1cl9vdmVybGF5LT5uYW1lLCBlYnVpbGQsIE5PUk0pOwogCQkJCQlwcmlu
dF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgb3B0aW5kLCBhcmdj
LCBhcmd2KTsKIAkJCQkJcHV0cyhOT1JNKTsKIAkJCQkJaWYgKHZlcmJvc2UgPiAxKSB7CkBAIC0z
ODMsNyArNDg1LDcgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJ
CQlpbnQgQVJHQyA9IDA7CiAJCQkJCQltYWtlYXJndigmYnVmMFtzZWFyY2hfbGVuKzFdLCAmQVJH
QywgJkFSR1YpOwogCQkJCQkJaWYgKEFSR0MgPiAwKSB7Ci0JCQkJCQkJcXVzZV9kZXNjcmliZV9m
bGFnKDEsIEFSR0MsIEFSR1YpOworCQkJCQkJCXF1c2VfZGVzY3JpYmVfZmxhZygxLCByZXBvLCBy
ZXBvX3NlYXJjaCwgQVJHQywgQVJHVik7CiAJCQkJCQkJZm9yIChpID0gMDsgaSA8IEFSR0M7IGkr
KykKIAkJCQkJCQkJZnJlZShBUkdWW2ldKTsKIAkJCQkJCQlmcmVlKEFSR1YpOwpAQCAtNDAwLDYg
KzUwMiw4IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQog
CWZjbG9zZShmcCk7CisJaWYgKGlkeCA9PSAzKQorCQlmcmVlKHNlYXJjaF92YXJzW2lkeF0pOwog
CXJldHVybiBFWElUX1NVQ0NFU1M7CiB9CiAKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2
MTExNi90ZXN0cy9pbnN0YWxsL2RvdGVzdCBwb3J0YWdlLXV0aWxzLTIwMDYxMTE2Lm5ldy90ZXN0
cy9pbnN0YWxsL2RvdGVzdAotLS0gcG9ydGFnZS11dGlscy0yMDA2MTExNi90ZXN0cy9pbnN0YWxs
L2RvdGVzdAkyMDA2LTExLTE2IDA4OjAzOjE0LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11
dGlscy0yMDA2MTExNi5uZXcvdGVzdHMvaW5zdGFsbC9kb3Rlc3QJMjAwNi0xMS0xNiAwODowNDo0
NS44NTEzOTU0MjggKzAxMDAKQEAgLTcsNyArNyw3IEBAIGRpZSgpIHsKIAogY3AgLi4vLi4vcSAu
CiAuL3EgLWkgfHwgZGllICIuL3EgLWkiCi1mb3IgYXBwIGluICQoLi9xIC1DaCB8IGdyZXAgJyA6
ICcgfCBhd2sgJ3twcmludCAkMX0nKSA7IGRvCitmb3IgYXBwIGluICQoLi9xIC1DaCB8IGdyZXAg
LXYgJ1VzYWdlJyB8IGdyZXAgJyA6ICcgfCBhd2sgJ3twcmludCAkMX0nKSA7IGRvCiAJWyAhIC1l
ICRhcHAgXSAmJiBkaWUgIiRhcHAgZG9lcyBub3QgZXhpc3QiCiBkb25lCiBlY2hvICJQQVNTRUQi
Cg==
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102433</attachid>
            <date>2006-11-20 16:19 0000</date>
            <desc>FYI: quse.patch</desc>
            <filename>quse.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIHF1c2UuYy5vbGQJMjAwNi0xMS0yMyAwMDo0NzoxNS4wNDA1Nzg2MzkgKzAxMDAKKysrIHF1
c2UuYwkyMDA2LTExLTIzIDAwOjQ0OjM3LjM1MjU1MDg2MyArMDEwMApAQCAtMTAzLDcgKzEwMyw3
IEBAIGludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmUKIAkJZm9yIChpID0g
MDsgaSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgewogCQkJc25wcmludGYoYnVmLCBzaXplb2Yo
YnVmKSwgIiVzL3Byb2ZpbGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9maWxlc1tp
XSk7CiAJCQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQotCQkJCWlmICh2
ZXJib3NlICkKKwkJCQlpZiAodmVyYm9zZT4yKQogCQkJCQl3YXJucCgic2tpcHBpbmcgJXMgZm9y
IHRoZSAlcyBvdmVybGF5Iiwgc2VhcmNoX2ZpbGVzW2ldLCBjdXJfb3ZlcmxheS0+bmFtZSk7CiAJ
CX0KIApAQCAtMTkyLDcgKzE5Miw3IEBAIHNraXBfZmlsZToKIAkJCWNvbnRpbnVlOwogCQlzbnBy
aW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8iLCBjdXJfb3ZlcmxheS0+
cGF0aCk7CiAJCWlmICghKGQgPSBvcGVuZGlyKGJ1ZikpKSB7Ci0JCQlpZiAodmVyYm9zZSkKKwkJ
CWlmICh2ZXJib3NlPjIpCiAJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJXMgLT4gc2tpcHBpbmci
LCBidWYpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTMwNSw3ICszMDUsNyBAQCBpbnQgcXVzZV9t
YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoaWR4ID09IC0xKQogCQlyZXR1cm4gcXVz
ZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgcmVwbywgcmVwb19zZWFyY2gsIGFyZ2MsIGFyZ3YpOwog
Ci0JaWYgKHF1c2VfYWxsKSBvcHRpbmQgPSBhcmdjOworCS8qIGlmIChxdXNlX2FsbCkgb3B0aW5k
ID0gYXJnYzsgKi8KIAlpbml0aWFsaXplX2VidWlsZF9mbGF0KCk7CS8qIHNldHMgb3VyIHB3ZCB0
byAkUE9SVERJUiAqLwogCiAJc2VhcmNoX2xlbiA9IHN0cmxlbihzZWFyY2hfdmFyc1tpZHhdKTsK
QEAgLTM1Miw2ICszNTIsMTQgQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CiAJCQljb250aW51ZTsKIAkJfQogCisJCWlmICgocXVzZV9hbGwpICYmIG9wdGluZCE9YXJnYykg
eworCQkJZm9yIChpPW9wdGluZDtpPGFyZ2M7aSsrKQorCQkJCWlmICgoc3Ryc3RyKGVidWlsZCxh
cmd2W2ldKSkpCisJCQkJCWJyZWFrOworCQkJaWYgKGk9PWFyZ2MpCisJCQkJY29udGludWU7CisJ
CX0KKwogCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0g
MDsKIAkJaWYgKChuZXdmcCA9IGZvcGVuKGVidWlsZCwgInIiKSkgIT0gTlVMTCkgewpAQCAtNDc4
LDYgKzQ4Niw4IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkJ
cHJpbnRmKCIlcyAlcyAlcyAiLCAqdXNlciA/IHVzZXIgOiAiTUlTU0lORyIsICpyZXZpc2lvbiA/
IHJldmlzaW9uIDogIk1JU1NJTkciLCAqZGF0ZSA/IGRhdGUgOiAiTUlTU0lORyIpOwogCiAJCQkJ
CXByaW50ZigiJXMlczo6JXMlcyAiLCBDWUFOLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1aWxkLCBO
T1JNKTsKKwkJCQkJaWYgKHF1c2VfYWxsKQorCQkJCQkJcHJpbnRfaGlnaGxpZ2h0ZWRfdXNlX2Zs
YWdzKCZidWYwW3NlYXJjaF9sZW4rMV0sIGFyZ2MsIGFyZ2MsIGFyZ3YpOworCQkJCQllbHNlCisJ
CQkJCQlwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgb3B0
aW5kLCBhcmdjLCBhcmd2KTsKIAkJCQkJcHJpbnRfaGlnaGxpZ2h0ZWRfdXNlX2ZsYWdzKCZidWYw
W3NlYXJjaF9sZW4rMV0sIG9wdGluZCwgYXJnYywgYXJndik7CiAJCQkJCXB1dHMoTk9STSk7CiAJ
CQkJCWlmICh2ZXJib3NlID4gMSkgewpAQCAtNDg1LDcgKzQ5NSw3IEBAIGludCBxdXNlX21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkJaW50IEFSR0MgPSAwOwogCQkJCQkJbWFrZWFy
Z3YoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgJkFSR0MsICZBUkdWKTsKIAkJCQkJCWlmIChBUkdDID4g
MCkgewotCQkJCQkJCXF1c2VfZGVzY3JpYmVfZmxhZygxLCByZXBvLCByZXBvX3NlYXJjaCwgQVJH
QywgQVJHVik7CisJCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIDAsIHJlcG9fc2VhcmNoLCBB
UkdDLCBBUkdWKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgQVJHQzsgaSsrKQogCQkJCQkJCQlm
cmVlKEFSR1ZbaV0pOwogCQkJCQkJCWZyZWUoQVJHVik7Cg==
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102434</attachid>
            <date>2006-11-20 16:20 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTEyMi9tYWluLmMgcG9ydGFnZS11dGlscy0y
MDA2MTEyMi5uZXcvbWFpbi5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMTIyL21haW4uYwkyMDA2
LTExLTIzIDAwOjU0OjQ5LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTEy
Mi5uZXcvbWFpbi5jCTIwMDYtMTEtMjMgMDA6NTU6NTkuMTAzOTA4OTA0ICswMTAwCkBAIC03MSw2
ICs3MSw3IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRp
YyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2
b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7
CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAg
LTg1LDEzICs4NiwyMSBAQCBzdGF0aWMgaW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRl
bmQgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5p
dGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwotc3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0g
PSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwogc3RhdGlj
IGNoYXIgcG9ydHZkYltdID0gInZhci9kYi9wa2ciOwogc3RhdGljIGNoYXIgcG9ydGNhY2hlZGly
W10gPSAibWV0YWRhdGEvY2FjaGUiOwogc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhd
ID0gIi8iOwogc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMv
IjsKIAordHlwZWRlZiBzdHJ1Y3Qgb3ZlcmxheV90IG92ZXJsYXlfdDsKK3N0cnVjdCBvdmVybGF5
X3QgeworCWNoYXIgbmFtZVs2NF07CisJY2hhciBwYXRoW19RX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qg
b3ZlcmxheV90ICpuZXh0OworfTsKKworc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50b28g
PSBOVUxMOworCiBjaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8iOwog
Y2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKIApAQCAtMjAxLDEw
ICsyMTAsMTAgQEAgc3RhdGljIHZvaWQgdXNhZ2UoaW50IHN0YXR1cywgY29uc3QgY2hhcgogCWZv
ciAoaSA9IDA7IG9wdHNbaV0ubmFtZTsgKytpKSB7CiAJCWFzc2VydChoZWxwW2ldICE9IE5VTEwp
OyAvKiB0aGlzIGFzc2VydCBpcyBhIGxpZmUgc2F2ZXIgd2hlbiBhZGRpbmcgbmV3IGFwcGxldHMu
ICovCiAJCWlmIChvcHRzW2ldLmhhc19hcmcgPT0gbm9fYXJndW1lbnQpCi0JCQlwcmludGYoIiAg
LSVjLCAtLSUtMTVzJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywg
LS0lLTE2cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKIAkJCQlvcHRzW2ldLm5hbWUsIFJFRCwg
Tk9STSwgXyhoZWxwW2ldKSk7CiAJCWVsc2UKLQkJCXByaW50ZigiICAtJWMsIC0tJS04cyAlczxh
cmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAorCQkJcHJpbnRmKCIgIC0lYywgLS0lLTlz
ICVzPGFyZz4lcyAlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5uYW1lLCBE
S0JMVUUsIE5PUk0sIFJFRCwgTk9STSwgXyhoZWxwW2ldKSk7CiAJfQogCWV4aXQoc3RhdHVzKTsK
QEAgLTQ2OSwxNyArNDc4LDc5IEBAIGNoYXIgKnN0cmluY3JfdmFyKGNvbnN0IGNoYXIgKm5hbWUs
IGNoYXIKIAlyZXR1cm4gKGNoYXIgKikgdmFsdWU7CiB9CiAKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVy
bGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSkKK3sKKwlzaG9ydCBtZXJyb3IgPSAwOworCWNo
YXIgYnVmW0JVRlNJWkVdLCBmaWxlW19RX1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKKwlvdmVybGF5
X3QgKmN1cl9vdmVybGF5OworCUZJTEUgKnJlcG9fbmFtZUZQOworCXMgPSBwb3J0ZGlyX292ZXJs
YXk7CisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsKKworCXdoaWxlICgqcykgeworCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiAoKmN1cl9vdmVybGF5LT5uZXh0KSk7
CisJCWN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQ7CisJCWN1cl9vdmVybGF5LT5uZXh0
ID0gTlVMTDsKKworCQlpZiAoKHA9c3RyY2hyKHMsJyAnKSkpCisJCQkqcCA9IDA7CisKKwkJc25w
cmludGYoY3VyX292ZXJsYXktPnBhdGgsIHNpemVvZihjdXJfb3ZlcmxheS0+cGF0aCksICIlcyVz
IiwgcG9ydHJvb3QsIHMpOworCisJCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBvdmVybGF5ICov
CisJCXN0cm5jcHkoZmlsZSwgY3VyX292ZXJsYXktPnBhdGgsIF9RX1BBVEhfTUFYKTsKKwkJc3Ry
bmNhdChmaWxlLCAiL3Byb2ZpbGVzL3JlcG9fbmFtZSIsIF9RX1BBVEhfTUFYKTsKKwkJaWYgKChy
ZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikpKQorCQl7CisJCQlpZiAoIShmZ2V0cyhidWYs
IHNpemVvZihidWYpLHJlcG9fbmFtZUZQKSkpCisJCQkJbWVycm9yKys7CisKKwkJCXJtc3BhY2Uo
YnVmKTsKKwkJCWlmICgodCA9IHN0cmNocihidWYsJ1xuJykpKQorCQkJCSp0ID0gMDsKKworCQkJ
c3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVmLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUp
KTsKKworCQkJZmNsb3NlKHJlcG9fbmFtZUZQKTsKKworCQl9IGVsc2UKKwkJCW1lcnJvcisrOwor
CisJCWlmIChtZXJyb3IpIHsKKwkJCS8qIGRlbGV0ZSB0cmFpbGluZyAnLycgKi8KKwkJCXQgPSBj
dXJfb3ZlcmxheS0+cGF0aCArIHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0aCkgLSAxOworCQkJaWYg
KCp0ID09ICcvJykKKwkJCQkqdCA9IDA7CisKKwkJCXN0cm5jcHkoY3VyX292ZXJsYXktPm5hbWUs
IGJhc2VuYW1lKGN1cl9vdmVybGF5LT5wYXRoKSwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7
CisJCQltZXJyb3I9MDsKKwkJfQorCisJCWlmIChwKQorCQkJcyA9IHArMTsKKwkJZWxzZQorCQkJ
YnJlYWs7CisJfQorCit9CisKKwogdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiB7
CiAJY2hhciBub2NvbG9yID0gMDsKIAlpbnQgaSwgZjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlGSUxF
ICpmcDsKKwljaGFyIHRtcF9wb3J0ZGlyW19RX1BBVEhfTUFYXTsKKwljaGFyIHBvcnRkaXJfb3Zl
cmxheVsyMDQ4XSA9ICIiOworCiAJY2hhciBidWZbQlVGU0laRV0sICpzLCAqcDsKIAogCWNoYXIg
cHJvZmlsZVtfUV9QQVRIX01BWF0sIHBvcnRhZ2VfZmlsZVtfUV9QQVRIX01BWF07CisKIAljb25z
dCBjaGFyICpmaWxlc1tdID0ge3BvcnRhZ2VfZmlsZSwgIi9ldGMvbWFrZS5nbG9iYWxzIiwgIi9l
dGMvbWFrZS5jb25mIn07CiAJdHlwZWRlZiBlbnVtIHsgX1FfQk9PTCwgX1FfU1RSLCBfUV9JU1RS
IH0gdmFyX3R5cGVzOworCiAJc3RydWN0IHsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJY29uc3Qg
c2l6ZV90IG5hbWVfbGVuOwpAQCAtNDkzLDEzICs1NjQsMTkgQEAgdm9pZCBpbml0aWFsaXplX3Bv
cnRhZ2VfZW52KHZvaWQpCiAJCXsiQ09ORklHX1BST1RFQ1QiLCAgIDE0LCBfUV9TVFIsICBjb25m
aWdfcHJvdGVjdCwgc2l6ZW9mKGNvbmZpZ19wcm90ZWN0KX0sCiAJCXsiTk9DT0xPUiIsICAgICAg
ICAgICA3LCBfUV9CT09MLCAmbm9jb2xvciwgICAgICAgMX0sCiAJCXsiRkVBVFVSRVMiLCAgICAg
ICAgICA4LCBfUV9JU1RSLCBmZWF0dXJlcywgICAgICAgc2l6ZW9mKGZlYXR1cmVzKX0sCi0JCXsi
UE9SVERJUiIsICAgICAgICAgICA3LCBfUV9TVFIsICBwb3J0ZGlyLCAgICAgICAgc2l6ZW9mKHBv
cnRkaXIpfSwKKwkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9RX1NUUiwgIHRtcF9wb3J0ZGly
LCAgICBzaXplb2YodG1wX3BvcnRkaXIpfSwKKwkJeyJQT1JURElSX09WRVJMQVkiLCAgMTUsIF9R
X0lTVFIsIHBvcnRkaXJfb3ZlcmxheSxzaXplb2YocG9ydGRpcl9vdmVybGF5KX0sCiAJCXsiUE9S
VEFHRV9CSU5IT1NUIiwgIDE1LCBfUV9TVFIsICBiaW5ob3N0LCAgICAgICAgc2l6ZW9mKGJpbmhv
c3QpfSwKIAkJeyJQT1JUQUdFX1RNUERJUiIsICAgMTQsIF9RX1NUUiwgIHBvcnRfdG1wZGlyLCAg
ICBzaXplb2YocG9ydF90bXBkaXIpfSwKIAkJeyJQS0dESVIiLCAgICAgICAgICAgIDYsIF9RX1NU
UiwgIHBrZ2RpciwgICAgICAgICBzaXplb2YocGtnZGlyKX0sCiAJCXsiUk9PVCIsICAgICAgICAg
ICAgICA0LCBfUV9TVFIsICBwb3J0cm9vdCwgICAgICAgc2l6ZW9mKHBvcnRyb290KX0KIAl9Owog
CisJb3ZlcmxheV9nZW50b28gPSB4bWFsbG9jKHNpemVvZigqb3ZlcmxheV9nZW50b28pKTsKKwlz
dHJjcHkob3ZlcmxheV9nZW50b28tPm5hbWUsImdlbnRvbyIpOworCXN0cm5jcHkodG1wX3BvcnRk
aXIsICIvdXNyL3BvcnRhZ2UiLCBzaXplb2YodG1wX3BvcnRkaXIpKTsKKwlvdmVybGF5X2dlbnRv
by0+bmV4dCA9IE5VTEw7CisKIAlpZiAoKHAgPSBzdHJjaHIocG9ydHJvb3QsICcvJykpICE9IE5V
TEwpCiAJCWlmIChzdHJsZW4ocCkgIT0gMSkKIAkJCXN0cm5jYXQocG9ydHJvb3QsICIvIiwgc2l6
ZW9mKHBvcnRyb290KSk7CkBAIC01OTEsNiArNjY4LDEzIEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0
YWdlX2Vudih2b2lkKQogCQlub19jb2xvcnMoKTsKIAllbHNlCiAJCWNvbG9yX3JlbWFwKCk7CisK
KworCXNucHJpbnRmKG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBzaXplb2Yob3ZlcmxheV9nZW50b28t
PnBhdGgpLCIlcyVzIiwgcG9ydHJvb3QsIHRtcF9wb3J0ZGlyKTsKKworCS8qIG5vdyB3ZSBpbml0
aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQgbGlzdCB3aXRoIG92ZXJsYXlfZ2VudG9vIGFzIHRo
ZSBmaXJzdCAnaXRlbScgICovCisJaW5pdGlhbGl6ZV9vdmVybGF5cyhwb3J0ZGlyX292ZXJsYXkp
OworCiB9CiAKIGVudW0gewpAQCAtNjE5LDE5ICs3MDMsMjEgQEAgY29uc3QgY2hhciAqaW5pdGlh
bGl6ZV9mbGF0KGludCBjYWNoZV90eQogCWludCBhLCBiLCBjLCBkLCBlLCBpOwogCWludCBmcmFj
LCBzZWNzLCBjb3VudDsKIAlGSUxFICpmcDsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5OwogCiAJ
YSA9IGIgPSBjID0gZCA9IGUgPSBpID0gMDsKIAljb3VudCA9IGZyYWMgPSBzZWNzID0gMDsKKwlj
dXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOwogCiAJY2FjaGVfZmlsZSA9IChjYWNoZV90eXBl
ID09IENBQ0hFX0VCVUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURBVEFfRklM
RSk7CiAKLQlpZiAoY2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgiY2hkaXIgdG8gUE9S
VERJUiAnJXMnIGZhaWxlZCIsIHBvcnRkaXIpOworCWlmIChjaGRpcihvdmVybGF5X2dlbnRvby0+
cGF0aCkgIT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIG92
ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKGNhY2hlX3R5cGUg
PT0gQ0FDSEVfTUVUQURBVEEgJiYgY2hkaXIocG9ydGNhY2hlZGlyKSAhPSAwKSB7Ci0JCXdhcm5w
KCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICclcy8lcycgZmFpbGVkIiwgcG9ydGRpciwgcG9ydGNh
Y2hlZGlyKTsKKwkJd2FybnAoImNoZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVzLyVzJyBmYWlsZWQi
LCBvdmVybGF5X2dlbnRvby0+cGF0aCwgcG9ydGNhY2hlZGlyKTsKIAkJZ290byByZXQ7CiAJfQog
CkBAIC02NDcsNjQgKzczMyw3MSBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2ZsYXQoaW50IGNh
Y2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9IEVOT0VOVCkgewot
CQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNhY2hlX2ZpbGUp
OworCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5w
YXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJaWYgKChmcCA9IGZvcGVuKGNh
Y2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5nICclcy8lcycgZmFp
bGVkIiwgcG9ydGRpciwgY2FjaGVfZmlsZSk7CisJCXdhcm5mcCgib3BlbmluZyAnJXMvJXMnIGZh
aWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9maWxlKTsKIAkJZ290byByZXQ7CiAJ
fQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAKLQlpZiAoKGEgPSBzY2FuZGlyKCIu
IiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCi0JCWdvdG8gcmV0
OwotCi0JZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewotCQlzdGF0KGNhdGVnb3J5W2ldLT5kX25h
bWUsICZzdCk7Ci0JCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKLQkJCWNvbnRpbnVlOwotCQlp
ZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICctJykgPT0gTlVMTCkKLQkJCWlmICgoc3Ry
bmNtcChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAidmlydHVhbCIsIDcpKSAhPSAwKQorCWRvIHsKKwkJ
aWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vIHx8IGNoZGlyKGN1cl9vdmVybGF5LT5w
YXRoKSA9PSAwKSB7CisJCQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJf
aGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCiAJCQkJY29udGludWU7CiAKLQkJaWYgKChiID0gc2Nh
bmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4sIGFscGhhc29ydCkp
IDwgMCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGMgPSAwOyBjIDwgYjsgYysrKSB7Ci0JCQljaGFy
IGRlW19RX1BBVEhfTUFYXTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhOyBpKyspIHsKKwkJCQlzdGF0
KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7CisJCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUp
KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICct
JykgPT0gTlVMTCkKKwkJCQkJaWYgKChzdHJuY21wKGNhdGVnb3J5W2ldLT5kX25hbWUsICJ2aXJ0
dWFsIiwgNykpICE9IDApCisJCQkJCQljb250aW51ZTsKIAotCQkJc25wcmludGYoZGUsIHNpemVv
ZihkZSksICIlcy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUpOworCQkJ
CWlmICgoYiA9IHNjYW5kaXIoY2F0ZWdvcnlbaV0tPmRfbmFtZSwgJnBuLCBmaWx0ZXJfaGlkZGVu
LCBhbHBoYXNvcnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoYyA9IDA7IGMgPCBi
OyBjKyspIHsKKwkJCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJCWlmIChzdGF0KGRlLCAm
c3QpIDwgMCkKLQkJCQljb250aW51ZTsKKwkJCQkJc25wcmludGYoZGUsIHNpemVvZihkZSksICIl
cy8lcyIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUpOwogCi0JCQlzd2l0Y2gg
KGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJVSUxEOgotCQkJCWlmICghU19JU0RJUihz
dC5zdF9tb2RlKSkKLQkJCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENBQ0hFX01F
VEFEQVRBOgotCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJCQlmcHJpbnRmKGZwLCAi
JXNcbiIsIGRlKTsKLQkJCQljb250aW51ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICgoZSA9
IHNjYW5kaXIoZGUsICZlYiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQotCQkJCWNv
bnRpbnVlOwotCQkJZm9yIChkID0gMDsgZCA8IGU7IGQrKykgewotCQkJCWlmICgocCA9IHN0cnJj
aHIoZWJbZF0tPmRfbmFtZSwgJy4nKSkgIT0gTlVMTCkKLQkJCQkJaWYgKHN0cmNtcChwLCAiLmVi
dWlsZCIpID09IDApIHsKLQkJCQkJCWNvdW50Kys7Ci0JCQkJCQlmcHJpbnRmKGZwLCAiJXMvJXMv
JXNcbiIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5kX25hbWUp
OworCQkJCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCisJCQkJCQljb250aW51ZTsKKworCQkJCQlz
d2l0Y2ggKGNhY2hlX3R5cGUpIHsKKwkJCQkJY2FzZSBDQUNIRV9FQlVJTEQ6CisJCQkJCQlpZiAo
IVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJCQkJY29udGludWU7CisJCQkJCQlicmVhazsKKwkJ
CQkJY2FzZSBDQUNIRV9NRVRBREFUQToKKwkJCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQor
CQkJCQkJCWZwcmludGYoZnAsICIlc1xuIiwgZGUpOworCQkJCQkJY29udGludWU7CisJCQkJCQli
cmVhazsKKwkJCQkJfQorCQkJCQlpZiAoKGUgPSBzY2FuZGlyKGRlLCAmZWIsIGZpbHRlcl9oaWRk
ZW4sIGFscGhhc29ydCkpIDwgMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlmb3IgKGQgPSAwOyBk
IDwgZTsgZCsrKSB7CisJCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykp
ICE9IE5VTEwpCisJCQkJCQkJaWYgKHN0cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsKKwkJCQkJ
CQkJY291bnQrKzsKKwkJCQkJCQkJZnByaW50ZihmcCwgIiVzOjolcy8lcy8lc1xuIiwgY3VyX292
ZXJsYXktPm5hbWUsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBuW2NdLT5kX25hbWUsIGViW2RdLT5k
X25hbWUpOworCQkJCQkJCX0KIAkJCQkJfQorCQkJCQl3aGlsZSAoZC0tKSBmcmVlKGViW2RdKTsK
KwkJCQkJZnJlZShlYik7CisJCQkJfQorCQkJCXdoaWxlIChiLS0pIGZyZWUocG5bYl0pOworCQkJ
CWZyZWUocG4pOwogCQkJfQotCQkJd2hpbGUgKGQtLSkgZnJlZShlYltkXSk7Ci0JCQlmcmVlKGVi
KTsKLQkJfQotCQl3aGlsZSAoYi0tKSBmcmVlKHBuW2JdKTsKLQkJZnJlZShwbik7Ci0JfQorCQl9
IGVsc2UKKwkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZhaWxlZCwgc2tpcHBpbmcgdGhlICVzIHJl
cG9zaXRvcnkiLCBjdXJfb3ZlcmxheS0+cGF0aCwgY3VyX292ZXJsYXktPm5hbWUpOworCisJfSB3
aGlsZSAoKGN1cl9vdmVybGF5ID0gY3VyX292ZXJsYXktPm5leHQpKTsKKwogCWZjbG9zZShmcCk7
CiAJd2hpbGUgKGEtLSkgZnJlZShjYXRlZ29yeVthXSk7CiAJZnJlZShjYXRlZ29yeSk7CkBAIC03
MjMsNyArODE2LDcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNoZV90eQog
CiAJd2FybigiRmluaXNoZWQgJXUgZW50cmllcyBpbiAlZC4lMDZkIHNlY29uZHMiLCBjb3VudCwg
c2VjcywgZnJhYyk7CiAJaWYgKHNlY3MgPiAxMDApCi0JCXdhcm4oIllvdSBzaG91bGQgY29uc2lk
ZXIgYSBmYXN0ZXIgZmlsZSBzeXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJUj0nJXMn
IiwgcG9ydGRpcik7CisJCXdhcm4oIllvdSBzaG91bGQgY29uc2lkZXIgYSBmYXN0ZXIgZmlsZSBz
eXN0ZW0gc3VjaCBhcyByZWlzZXJmcyBmb3IgUE9SVERJUj0nJXMnIiwgb3ZlcmxheV9nZW50b28t
PnBhdGgpOwogcmV0OgogCXJldHVybiBjYWNoZV9maWxlOwogfQpAQCAtNzMyLDggKzgyNSw4IEBA
IHJldDoKIAogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCkKIHsKLQlpZiAoKGNo
ZGlyKHBvcnRkaXIpKSAhPSAwKSB7Ci0JCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFp
bGVkIiwgcG9ydGRpcik7CisJaWYgKChjaGRpcihvdmVybGF5X2dlbnRvby0+cGF0aCkpICE9IDAp
IHsKKwkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBvdmVybGF5X2dlbnRv
by0+cGF0aCk7CiAJCXJldHVybjsKIAl9CiAJdW5saW5rKENBQ0hFX0VCVUlMRF9GSUxFKTsKQEAg
LTEwMDYsMTAgKzEwOTksMjAgQEAgZnVja2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUg
b3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9vdmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9p
ZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlfdCAqb3ZlcmxheSkKK3sKKwlpZiAob3ZlcmxheS0+bmV4
dCkKKwkJZnJlZV9vdmVybGF5cyhvdmVybGF5LT5uZXh0KTsKKwlmcmVlKG92ZXJsYXkpOworfQor
CiB2b2lkIGNsZWFudXAoKQogewogCXJlaW5pdGlhbGl6ZV9hc19uZWVkZWQoKTsKIAlmcmVlX3Nl
dHModmlydHVhbHMpOworCWZyZWVfb3ZlcmxheXMob3ZlcmxheV9nZW50b28pOwogCWZjbG9zZShz
dGRlcnIpOwogfQogCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIvcS5jIHBvcnRh
Z2UtdXRpbHMtMjAwNjExMjIubmV3L3EuYwotLS0gcG9ydGFnZS11dGlscy0yMDA2MTEyMi9xLmMJ
MjAwNi0xMS0yMyAwMDo1NDo0OS4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAw
NjExMjIubmV3L3EuYwkyMDA2LTExLTIzIDAwOjU1OjU5LjEwOTkwNzk5MiArMDEwMApAQCAtNywx
NSArNywxNyBAQAogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdlciAgLSA8dmFw
aWVyQGdlbnRvby5vcmc+CiAgKi8KIAotI2RlZmluZSBRX0ZMQUdTICJpcm0iIENPTU1PTl9GTEFH
UworI2RlZmluZSBRX0ZMQUdTICJpbHJtIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0
aW9uIGNvbnN0IHFfbG9uZ19vcHRzW10gPSB7CiAJeyJpbnN0YWxsIiwgICAgICBub19hcmd1bWVu
dCwgTlVMTCwgJ2knfSwKKwl7ImxzLW92ZXJsYXlzIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnbCd9
LAogCXsicmVpbml0aWFsaXplIiwgbm9fYXJndW1lbnQsIE5VTEwsICdyJ30sCiAJeyJtZXRhY2Fj
aGUiLCAgICBub19hcmd1bWVudCwgTlVMTCwgJ20nfSwKIAlDT01NT05fTE9OR19PUFRTCiB9Owog
c3RhdGljIGNvbnN0IGNoYXIgKnFfb3B0c19oZWxwW10gPSB7CiAJIkluc3RhbGwgc3ltbGlua3Mg
Zm9yIGFwcGxldHMiLAorCSJMaXN0IGNvbmZpZ3VyZWQgb3ZlcmxheXMiLAogCSJSZWluaXRpYWxp
emUgZWJ1aWxkIGNhY2hlIiwKIAkiUmVpbml0aWFsaXplIG1ldGFkYXRhIGNhY2hlIiwKIAlDT01N
T05fT1BUU19IRUxQCkBAIC03MCw2ICs3Miw3IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCWludCBpOwogCWNoYXIgKnA7CiAJQVBQTEVUIGZ1bmM7CisJb3ZlcmxheV90ICog
Y3VyX292ZXJsYXk7CiAKIAlpZiAoYXJnYyA9PSAwKQogCQlyZXR1cm4gMTsKQEAgLTg5LDYgKzky
LDE1IEBAIGludCBxX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BU
U19DQVNFUyhxKQogCQljYXNlICdtJzogcmVpbml0aWFsaXplX21ldGFjYWNoZSA9IDE7IGJyZWFr
OwogCQljYXNlICdyJzogcmVpbml0aWFsaXplID0gMTsgYnJlYWs7CisJCWNhc2UgJ2wnOiB7CisJ
CQlwcmludGYoIlxuJXNPdmVybGF5KHMpIDolc1xuXG4iLCBHUkVFTiwgTk9STSk7CisJCQljdXJf
b3ZlcmxheT1vdmVybGF5X2dlbnRvbzsKKwkJCWRvIHsKKwkJCQlwcmludGYoIiAgIE5hbWUgOiAl
cyUtMjAuMjBzJXMgXHRsb2NhdGlvbiA6ICVzJXMlc1xuIiwgQ1lBTiwgY3VyX292ZXJsYXktPm5h
bWUsIE5PUk0sIENZQU4sIGN1cl9vdmVybGF5LT5wYXRoLCBOT1JNKTsKKwkJCX0gd2hpbGUgKChj
dXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsK
KwkJCXJldHVybiAwOworCQkJfQogCQljYXNlICdpJzogewogCQkJY2hhciBidWZbX1FfUEFUSF9N
QVhdOwogCQkJLyogYWx3YXlzIGJ6ZXJvIGEgYnVmZmVyIGJlZm9yZSB1c2luZyByZWFkbGluaygp
ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIvcWNhY2hlLmMgcG9ydGFnZS11
dGlscy0yMDA2MTEyMi5uZXcvcWNhY2hlLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIvcWNh
Y2hlLmMJMjAwNi0xMS0yMyAwMDo1NDo0OS4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRp
bHMtMjAwNjExMjIubmV3L3FjYWNoZS5jCTIwMDYtMTEtMjMgMDA6NTU6NTkuMTM2OTAzODg3ICsw
MTAwCkBAIC01MTIsMTAgKzUxMiwxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5j
KShxY2FjaGVfCiAJaW50IGksIGosIGssIGxlbiwgbnVtX2NhdCwgbnVtX3BrZywgbnVtX2VidWls
ZDsKIAlzdHJ1Y3QgZGlyZWN0ICoqY2F0ZWdvcmllcywgKipwYWNrYWdlcywgKiplYnVpbGRzOwog
Ci0JbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihwb3J0
ZGlyKSArIDEpOworCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4oUUNBQ0hFX0VEQikgKyBz
dHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgMSk7CiAJY2F0cGF0aCA9IHhtYWxsb2MobGVu
KTsKIAltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIl
cyVzIiwgUUNBQ0hFX0VEQiwgcG9ydGRpcik7CisJc25wcmludGYoY2F0cGF0aCwgbGVuLCAiJXMl
cyIsIFFDQUNIRV9FREIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKIAogCWlmICgtMSA9PSAobnVt
X2NhdCA9IHNjYW5kaXIoY2F0cGF0aCwgJmNhdGVnb3JpZXMsIHFjYWNoZV9maWxlX3NlbGVjdCwg
YWxwaGFzb3J0KSkpIHsKIAkJZXJyKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7
CkBAIC01MjcsMTAgKzUyNywxMCBAQCBpbnQgcWNhY2hlX3RyYXZlcnNlKHZvaWQgKCpmdW5jKShx
Y2FjaGVfCiAKIAkvKiB0cmF2ZXJzZSBjYXRlZ29yaWVzICovCiAJZm9yIChpID0gMDsgaSA8IG51
bV9jYXQ7IGkrKykgewotCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKHBvcnRkaXIpICsg
c3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIDEpOworCQlsZW4g
PSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIHN0cmxlbigi
LyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkgKyAxKTsKIAkJcGtncGF0aCA9IHht
YWxsb2MobGVuKTsKIAkJbWVtc2V0KHBrZ3BhdGgsIDAsIGxlbik7Ci0JCXNucHJpbnRmKHBrZ3Bh
dGgsIGxlbiwgIiVzLyVzIiwgcG9ydGRpciwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKKwkJc25w
cmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBvdmVybGF5X2dlbnRvby0+cGF0aCwgY2F0ZWdv
cmllc1tpXS0+ZF9uYW1lKTsKIAogCQlpZiAoLTEgPT0gKG51bV9wa2cgPSBzY2FuZGlyKHBrZ3Bh
dGgsICZwYWNrYWdlcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQkJd2Fy
bigiJXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNTUyLDEwICs1NTIsMTAg
QEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYykocWNhY2hlXwogCiAJCS8qIHRyYXZl
cnNlIHBhY2thZ2VzICovCiAJCWZvciAoaiA9IDA7IGogPCBudW1fcGtnOyBqKyspIHsKLQkJCWxl
biA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi8iKSArIHN0cmxl
bihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIvIikgKyBzdHJsZW4ocGFja2FnZXNb
al0tPmRfbmFtZSkgKyAxKTsKKwkJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ob3Zlcmxh
eV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+ZF9u
YW1lKSArIHN0cmxlbigiLyIpICsgc3RybGVuKHBhY2thZ2VzW2pdLT5kX25hbWUpICsgMSk7CiAJ
CQllYnVpbGRwYXRoID0geG1hbGxvYyhsZW4pOwogCQkJbWVtc2V0KGVidWlsZHBhdGgsIDAsIGxl
bik7Ci0JCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIHBvcnRkaXIsIGNh
dGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRfbmFtZSk7CisJCQlzbnByaW50Zihl
YnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYXRlZ29y
aWVzW2ldLT5kX25hbWUsIHBhY2thZ2VzW2pdLT5kX25hbWUpOwogCiAJCQlpZiAoLTEgPT0gKG51
bV9lYnVpbGQgPSBzY2FuZGlyKGVidWlsZHBhdGgsICZlYnVpbGRzLCBxY2FjaGVfZWJ1aWxkX3Nl
bGVjdCwgcWNhY2hlX3ZlcmNtcCkpKSB7CiAJCQkJd2FybigiJXMgJXMiLCBlYnVpbGRwYXRoLCBz
dHJlcnJvcihlcnJubykpOwpAQCAtNzczLDEwICs3NzMsMTAgQEAgdm9pZCBxY2FjaGVfc3RhdHMo
cWNhY2hlX2RhdGEgKmRhdGEpCiAJCWZvciAoaSA9IDA7IGFyY2hsaXN0W2ldOyBpKyspCiAJCQlh
cmNoaXRlY3R1cmVzKys7CiAKLQkJbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FDSEVf
RURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3Ry
bGVuKFFDQUNIRV9FREIpICsgc3RybGVuKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSArIDEpOwogCQlj
YXRwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQkJc25w
cmludGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9FREIsIHBvcnRkaXIpOworCQlzbnBy
aW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgb3ZlcmxheV9nZW50b28tPnBh
dGgpOwogCiAJCWlmICgtMSA9PSAobnVtY2F0ID0gc2NhbmRpcihjYXRwYXRoLCAmY2F0ZWdvcmll
cywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkgewogCQkJZXJyKCIlcyAlcyIsIGNh
dHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC05MjgsMTEgKzkyOCwxMSBAQCBpbnQgcWNhY2hl
X2luaXQoKQogCWNoYXIgKmZpbGVuYW1lOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlsZW4gICAg
ICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikgKyBzdHJsZW4oIi9wcm9maWxlcy9h
cmNoLmxpc3QiKSArIDEpOworCWxlbiAgICAgID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihvdmVy
bGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi9wcm9maWxlcy9hcmNoLmxpc3QiKSArIDEpOwog
CWZpbGVuYW1lID0geG1hbGxvYyhsZW4pOwogCiAJbWVtc2V0KGZpbGVuYW1lLCAwLCBsZW4pOwot
CXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxlcy9hcmNoLmxpc3QiLCBwb3J0ZGly
KTsKKwlzbnByaW50ZihmaWxlbmFtZSwgbGVuLCAiJXMvcHJvZmlsZXMvYXJjaC5saXN0Iiwgb3Zl
cmxheV9nZW50b28tPnBhdGgpOwogCiAJaWYgKE5VTEwgPT0gKGFyY2hsaXN0ID0gcWNhY2hlX3Jl
YWRfbGluZXMoZmlsZW5hbWUpKSkgewogCQlmcmVlKGZpbGVuYW1lKTsKZGlmZiAtTmFydXAgcG9y
dGFnZS11dGlscy0yMDA2MTEyMi9xZ3JlcC5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIubmV3L3Fn
cmVwLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIvcWdyZXAuYwkyMDA2LTExLTIzIDAwOjU0
OjQ5LjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2MTEyMi5uZXcvcWdyZXAu
YwkyMDA2LTExLTIzIDAwOjU1OjU5LjE1MzkwMTMwMyArMDEwMApAQCAtMTAsMTEgKzEwLDEyIEBA
CiAKICNpZmRlZiBBUFBMRVRfcWdyZXAKIAotI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIY2UiIENP
TU1PTl9GTEFHUworI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIbzpjZSIgQ09NTU9OX0ZMQUdTCiBz
dGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxZ3JlcF9sb25nX29wdHNbXSA9IHsKIAl7ImludmVy
dC1tYXRjaCIsICBub19hcmd1bWVudCwgTlVMTCwgJ0knfSwKIAl7Imlnbm9yZS1jYXNlIiwgICBu
b19hcmd1bWVudCwgTlVMTCwgJ2knfSwKIAl7IndpdGgtZmlsZW5hbWUiLCBub19hcmd1bWVudCwg
TlVMTCwgJ0gnfSwKKwl7Im92ZXJsYXkiLCAgICAgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwK
IAl7ImNvdW50IiwgICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKIAl7InJlZ2V4cCIs
ICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAlDT01NT05fTE9OR19PUFRTCkBAIC0y
Myw2ICsyNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxZ3JlcF9vcHRzX2hlbHBbXSA9IHsKIAki
U2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcyIsCiAJIklnbm9yZSBjYXNlIGRpc3RpbmN0aW9ucyIs
CiAJIlByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBtYXRjaCIsCisJIk9ubHkgY29uc2lkZXIg
dGhlIDxhcmc+IG92ZXJsYXkiLAogCSJPbmx5IHByaW50IGEgY291bnQgb2YgbWF0Y2hpbmcgbGlu
ZXMgcGVyIEZJTEUiLAogCSJVc2UgUEFUVEVSTiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiIsCiAJ
Q09NTU9OX09QVFNfSEVMUApAQCAtMzQsNyArMzYsOSBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJaW50IGNvdW50ID0gMDsKLQljaGFyICpwOwor
CXNob3J0IG15ZXJyb3IgPSAwLCByZXBvID0gMDsKKwljaGFyIG92ZXJsYXlfbmFtZVs2NF0sIHJl
cG9fc2VhcmNoWzY0XTsKKwljaGFyICpwLCAqc3RyOwogCWNoYXIgZG9fY291bnQsIGRvX3JlZ2V4
OwogCWNoYXIgc2hvd19maWxlbmFtZTsKIAlGSUxFICpmcDsKQEAgLTQyLDEwICs0NiwxNSBAQCBp
bnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY2hhciBidWYwW0JVRlNJWl07
CiAJaW50IHJlZmxhZ3MgPSBSRUdfTk9TVUI7CiAJY2hhciBpbnZlcnRfbWF0Y2ggPSAwOworCW92
ZXJsYXlfdCAqY3VyX292ZXJsYXksICpvdmVybGF5X3RtcDsKIAogCXR5cGVkZWYgY2hhciAqKCpG
VU5DKSAoY2hhciAqLCBjaGFyICopOwogCUZVTkMgc3RyZnVuYyA9IChGVU5DKSBzdHJzdHI7CiAK
KwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJ
cmVwb19zZWFyY2hbMF0gPSAwOworCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0l
cyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwog
CkBAIC01OCwxMiArNjcsMjYgQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQogCQkJc3RyZnVuYyA9IChGVU5DKSBzdHJjYXNlc3RyOwogCQkJcmVmbGFncyB8PSBSRUdfSUNB
U0U7CiAJCQlicmVhazsKKwkJY2FzZSAnSCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVhazsKKwkJ
Y2FzZSAnbyc6CisJCQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywg
c2l6ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IGRvX2NvdW50ID0g
MTsgYnJlYWs7CiAJCWNhc2UgJ2UnOiBkb19yZWdleCA9IDE7IGJyZWFrOwotCQljYXNlICdIJzog
c2hvd19maWxlbmFtZSA9IDE7IGJyZWFrOwogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxZ3JlcCkK
IAkJfQogCX0KKworCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghc3RybmNtcChjdXJfb3Zl
cmxheS0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpKQorCQkJ
CWJyZWFrOworCQl9IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKKwkJ
aWYgKE5VTEwgPT0gY3VyX292ZXJsYXkpCisJCQllcnIoIiVzIDogVW5rbm93biBvdmVybGF5LCB0
cnkgJ3EgLS1scy1vdmVybGF5cyciLCByZXBvX3NlYXJjaCk7CisJfQorCiAJaWYgKGFyZ2MgPT0g
b3B0aW5kKQogCQlxZ3JlcF91c2FnZShFWElUX0ZBSUxVUkUpOwogCkBAIC03Myw2ICs5Niw0MiBA
QCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJldHVybiAxOwogCXdo
aWxlICgoZmdldHMoZWJ1aWxkLCBzaXplb2YoZWJ1aWxkKSwgZnApKSAhPSBOVUxMKSB7CiAJCUZJ
TEUgKm5ld2ZwOworCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJeworCQkJKnAg
PSAwOworCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQlwID0gZWJ1
aWxkOworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9f
c2VhcmNoKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChvdmVybGF5X25hbWUsIHAs
IHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9v
OworCQkJCWRvIHsKKwkJCQkJaWYgKCFzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXpl
b2Yob3ZlcmxheV90bXAtPm5hbWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0gd2hpbGUgKChvdmVy
bGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCQkJCWlmIChvdmVybGF5X3RtcCkgeworCQkJ
CQljdXJfb3ZlcmxheSA9IG92ZXJsYXlfdG1wOworCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXkt
PnBhdGgpICE9IDApIHsKKwkJCQkJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVk
IiwgY3VyX292ZXJsYXktPnBhdGgpOworCQkJCQkJbXllcnJvcj0xOworCQkJCQl9CisJCQkJfSBl
bHNlCisJCQkJCW15ZXJyb3I9MTsKKworCQkJCXN0cm5jcHkob3ZlcmxheV9uYW1lLCBwLCBzaXpl
b2Yob3ZlcmxheV9uYW1lKSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQl9IGVs
c2UKKwkJCW15ZXJyb3I9MTsKKworCQlpZiAobXllcnJvcikgeworCQkJaWYgKCFyZWluaXRpYWxp
emUpCisJCQkJd2FybmYoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMgOiBVbmtub3duIG92ZXJs
YXkiLCBvdmVybGF5X25hbWUpOworCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCW15ZXJyb3I9MDsK
KwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJ1xuJykpICE9
IE5VTEwpCiAJCQkqcCA9IDA7CiAJCWlmICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJyIikpICE9
IE5VTEwpIHsKQEAgLTEwMiw3ICsxNjEsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJCQkJY291bnQrKzsKIAkJCQlpZiAoZG9fY291bnQpIGNvbnRpbnVlOwogCQkJ
CWlmICh2ZXJib3NlIHx8IHNob3dfZmlsZW5hbWUpIHsKLQkJCQkJcHJpbnRmKCIlczoiLCBlYnVp
bGQpOworCQkJCQlwcmludGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1aWxkKTsK
IAkJCQkJaWYgKHZlcmJvc2UgPiAxKSBwcmludGYoIiVkOiIsIGxpbmVubyk7CiAJCQkJCXByaW50
ZigiICIpOwogCQkJCX0KZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTEyMi9xc2VhcmNo
LmMgcG9ydGFnZS11dGlscy0yMDA2MTEyMi5uZXcvcXNlYXJjaC5jCi0tLSBwb3J0YWdlLXV0aWxz
LTIwMDYxMTIyL3FzZWFyY2guYwkyMDA2LTExLTIzIDAwOjU0OjQ5LjAwMDAwMDAwMCArMDEwMAor
KysgcG9ydGFnZS11dGlscy0yMDA2MTEyMi5uZXcvcXNlYXJjaC5jCTIwMDYtMTEtMjMgMDA6NTU6
NTkuMTcwODk4NzE5ICswMTAwCkBAIC05LDEwICs5LDEyIEBACiAKICNpZmRlZiBBUFBMRVRfcXNl
YXJjaAogCi0jZGVmaW5lIFFTRUFSQ0hfRkxBR1MgImFjc1NOSCIgQ09NTU9OX0ZMQUdTCisjZGVm
aW5lIFFTRUFSQ0hfRkxBR1MgImFjbzpwc1NOSCIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0
IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfb3B0c1tdID0gewogCXsiYWxsIiwgICAgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdhJ30sCiAJeyJjYWNoZSIsICAgICBub19hcmd1bWVudCwgTlVMTCwg
J2MnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAorCXsic2hvdy1w
YXRoIiwgbm9fYXJndW1lbnQsIE5VTEwsICdwJ30sCiAJeyJzZWFyY2giLCAgICBub19hcmd1bWVu
dCwgTlVMTCwgJ3MnfSwKIAl7ImRlc2MiLCAgICAgICBhX2FyZ3VtZW50LCBOVUxMLCAnUyd9LAog
CXsibmFtZS1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdOJ30sCkBAIC0yMiw2ICsyNCw4IEBA
IHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHFzZWFyY2hfbG9uZ18KIHN0YXRpYyBjb25zdCBj
aGFyICpxc2VhcmNoX29wdHNfaGVscFtdID0gewogCSJMaXN0IHRoZSBkZXNjcmlwdGlvbnMgb2Yg
ZXZlcnkgcGFja2FnZSBpbiB0aGUgY2FjaGUiLAogCSJVc2UgdGhlIHBvcnRhZ2UgY2FjaGUiLAor
CSJTZWFyY2ggb25seSBpbiB0aGUgPGFyZz4gb3ZlcmxheSIsCisJIlNob3cgdGhlIHBhdGggdG8g
dGhlIGVidWlsZCIsCiAJIlJlZ2V4IHNlYXJjaCBwYWNrYWdlIGJhc2VuYW1lcyIsCiAJIlJlZ2V4
IHNlYXJjaCBwYWNrYWdlIGRlc2NyaXB0aW9ucyIsCiAJIk9ubHkgc2hvdyBwYWNrYWdlIG5hbWUi
LApAQCAtNDAsMTMgKzQ0LDIwIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogCWNoYXIgbGFzdFsxMjZdID0gIiI7CiAJY2hhciBkcFsxMjZdID0gIiI7CiAJY2hhciBi
cFsxMjZdID0gIiI7Ci0JY2hhciAqcCwgKnEsICpzdHI7CisJc2hvcnQgcmVwbyA9IDA7CisJY2hh
ciByZXBvX3NlYXJjaFs2NF07CisJY2hhciAqcCwgKnEsICpzdHIsIG92ZXJsYXlfbmFtZVs2NF07
CiAJY2hhciAqc2VhcmNoX21lID0gTlVMTDsKLQljaGFyIHNob3dfaG9tZXBhZ2UgPSAwLCBzaG93
X25hbWVfb25seSA9IDA7CisJY2hhciBzaG93X2hvbWVwYWdlID0gMCwgc2hvd19uYW1lX29ubHkg
PSAwLCBzaG93X3BhdGhfdG9fZWJ1aWxkID0gMDsKIAljaGFyIHNlYXJjaF9kZXNjID0gMCwgc2Vh
cmNoX2FsbCA9IDAsIHNlYXJjaF9uYW1lID0gMSwgc2VhcmNoX2NhY2hlID0gQ0FDSEVfRUJVSUxE
OwogCWNvbnN0IGNoYXIgKnNlYXJjaF92YXJzW10gPSB7ICJERVNDUklQVElPTj0iLCAiSE9NRVBB
R0U9IiB9OwogCXNpemVfdCBzZWFyY2hfbGVuOwotCWludCBpLCBpZHg9MDsKKwlvdmVybGF5X3Qg
KmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisJaW50IGksIGlkeD0wLCBteWVycm9yPTA7CisK
KwljdXJfb3ZlcmxheSA9IG92ZXJsYXlfZ2VudG9vOworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJ
cmVwb19zZWFyY2hbMF0gPSAwOwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0l
cyIsCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwpA
QCAtNTYsNiArNjcsOCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
IAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXNlYXJjaCkKIAkJY2FzZSAnYSc6IHNlYXJjaF9hbGwg
PSAxOyBicmVhazsKIAkJY2FzZSAnYyc6IHNlYXJjaF9jYWNoZSA9IENBQ0hFX01FVEFEQVRBOyBi
cmVhazsKKwkJY2FzZSAnbyc6IHJlcG8gPSAxOyBzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcs
IHNpemVvZihyZXBvX3NlYXJjaCkpOyBicmVhazsKKwkJY2FzZSAncCc6IHNob3dfcGF0aF90b19l
YnVpbGQgPSAxOyBicmVhazsKIAkJY2FzZSAncyc6IHNlYXJjaF9kZXNjID0gMDsgc2VhcmNoX25h
bWUgPSAxOyBicmVhazsKIAkJY2FzZSAnUyc6IHNlYXJjaF9kZXNjID0gMTsgc2VhcmNoX25hbWUg
PSAwOyBicmVhazsKIAkJY2FzZSAnTic6IHNob3dfbmFtZV9vbmx5ID0gMTsgYnJlYWs7CkBAIC02
Myw2ICs3NiwxNiBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ
fQogCX0KIAorCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghIHN0cm5jbXAoY3VyX292ZXJs
YXktPm5hbWUsIHJlcG9fc2VhcmNoLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkKKwkJCQli
cmVhazsKKwkJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCWlm
IChOVUxMID09IGN1cl9vdmVybGF5KQorCQkJZXJyKCIlcyA6IFVua25vd24gb3ZlcmxheSwgdHJ5
ICdxIC0tbHMtb3ZlcmxheXMnIiwgcmVwb19zZWFyY2gpOworCX0KKworCiAJaWYgKHNlYXJjaF9h
bGwpIHsKIAkJc2VhcmNoX2Rlc2MgPSAxOwogCQlzZWFyY2hfbmFtZSA9IDA7CkBAIC05MywxMSAr
MTE2LDIyIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJaWYg
KChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUoZWJ1aWxkKSkgIT0gTlVMTCkgewogCQkJCWlmICgo
c3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxhc3QpKSAhPSAwKSB7CiAJCQkJCXN0cm5jcHkobGFz
dCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9mKGxhc3QpKTsKLQkJCQkJaWYgKChyZW1hdGNoKHNl
YXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNhY2hlLT5ERVNDUklQVElPTiA6IGVidWlsZCksIFJF
R19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09IDApCi0JCQkJCQlwcmludGYoIiVzJXMvJXMlcyVz
ICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLCBCTFVFLAotCQkJCQkJICAgICAg
IHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0JCQkJCQkgICAgICAgKHNob3dfbmFtZV9vbmx5ID8g
IiIgOgotCQkJCQkJICAgICAgICAoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBBR0UgOiBw
Y2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQlpZiAoKHJlbWF0Y2goc2VhcmNoX21lLCAoc2Vh
cmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBUSU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwg
UkVHX0lDQVNFKSkgPT0gMCkgeworCQkJCQkJaWYgKHNob3dfcGF0aF90b19lYnVpbGQpIHsKKwkJ
CQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVzJXMvJXMvXG4iLAorCQkJCQkJCUJPTEQs
IHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQkJQkxVRSwgcGNhY2hlLT5hdG9tLT5QTiwK
KwkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJY3VyX292ZXJs
YXktPnBhdGgsIGRpcm5hbWUoZWJ1aWxkKSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXByaW50
ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJQk9MRCwgcGNhY2hlLT5hdG9tLT5D
QVRFR09SWSwKKwkJCQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAorCQkJCQkJCVlFTExPVyxj
dXJfb3ZlcmxheS0+bmFtZSwgTk9STSwKKwkJCQkJCQkoc2hvd19uYW1lX29ubHkgPyAiIiA6CisJ
CQkJCQkJKHNob3dfaG9tZXBhZ2UgPyBwY2FjaGUtPkhPTUVQQUdFIDogcGNhY2hlLT5ERVNDUklQ
VElPTikpKTsKKwkJCQkJCX0KKwkJCQkJfQogCQkJCX0KIAkJCQljYWNoZV9mcmVlKHBjYWNoZSk7
CiAJCQl9IGVsc2UgewpAQCAtMTEwLDYgKzE0NCw0NCBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAogCQljYXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklMRSAqZWJ1
aWxkZnA7CisJCQlpZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJCXsKKwkJCQkqcCA9
IDA7CisJCQkJc3RyID0gcCsyOwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQkJcCA9IGVi
dWlsZDsKKwkJCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBwLCBzaXplb2YocmVw
b19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9uYW1l
LCBwLCBzaXplb2Yob3ZlcmxheV9uYW1lKSkpIHsKKwkJCQkJbGFzdFswXSA9IDA7CisJCQkJCW92
ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0cm5jbXAo
b3ZlcmxheV90bXAtPm5hbWUsIHAsIHNpemVvZihvdmVybGF5X3RtcC0+bmFtZSkpKQorCQkJCQkJ
CWJyZWFrOworCQkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAtPm5leHQpKTsK
KworCQkJCQlpZiAob3ZlcmxheV90bXApIHsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90
bXA7CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3
YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJCQkJ
bXllcnJvcj0xOworCQkJCQkJfQorCQkJCQl9IGVsc2UKKwkJCQkJCW15ZXJyb3I9MTsKKworCQkJ
CQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpOworCQkJCX0K
KwkJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQkJfSBlbHNlCisJCQkJbXllcnJvcj0xOworCisJ
CQlpZiAobXllcnJvcikgeworCQkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCQl3YXJuZigiKGNh
Y2hlIHVwZGF0ZSBwZW5kaW5nKSAlcyA6IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlfbmFtZSk7
CisJCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCQlteWVycm9yPTA7CisJCQkJY29udGludWU7CisJ
CQl9CisKIAkJCXN0ciA9IHhzdHJkdXAoZWJ1aWxkKTsKIAkJCXAgPSAoY2hhciAqKSBkaXJuYW1l
KHN0cik7CiAKQEAgLTEzNCw5ICsyMDYsMTcgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCQkJCQkJLy8gZG9pbmcgb3BlcmF0aW9ucyB3aXRoIHRoZW0uCiAJCQkJ
CQkJc3RybmNweShkcCwgcCwgc2l6ZW9mKGRwKSk7CiAJCQkJCQkJc3RybmNweShicCwgcCwgc2l6
ZW9mKGJwKSk7Ci0JCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyAlc1xuIiwKLQkJCQkJCQkJQk9M
RCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwgTk9STSwKKwkJCQkJCQlpZiAoc2hv
d19wYXRoX3RvX2VidWlsZCkgeworCQkJCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolc1x0ICVz
JXMvJXMvXG4iLAorCQkJCQkJCQlCT0xELCBkaXJuYW1lKGRwKSwgQkxVRSwgYmFzZW5hbWUoYnAp
LAorCQkJCQkJCQlZRUxMT1csY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCisJCQkJCQkJCWN1cl9v
dmVybGF5LT5wYXRoLCBkaXJuYW1lKGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJ
CXByaW50ZigiJXMlcy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUo
ZHApLCBCTFVFLCBiYXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVyxjdXJfb3ZlcmxheS0+bmFt
ZSwgTk9STSwKIAkJCQkJCQkJKHNob3dfbmFtZV9vbmx5ID8gIiIgOiBxKSk7CisJCQkJCQkJfQog
CQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMjIvcXVzZS5jIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIubmV3L3F1c2UuYwotLS0gcG9y
dGFnZS11dGlscy0yMDA2MTEyMi9xdXNlLmMJMjAwNi0xMS0yMyAwMDo1NDo0OS4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIubmV3L3F1c2UuYwkyMDA2LTExLTIzIDAx
OjQ1OjM0Ljg0MzUyNzcyMCArMDEwMApAQCAtMTQsMTAgKzE0LDExIEBACiAgcXVzZSAtS2UgLS0g
IG5scwogKi8KIAotI2RlZmluZSBRVVNFX0ZMQUdTICJlYXZLTERGOk4iIENPTU1PTl9GTEFHUwor
I2RlZmluZSBRVVNFX0ZMQUdTICJlYW86dktMREY6TiIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3Ry
dWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0c1tdID0gewogCXsiZXhhY3QiLCAgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdlJ30sCiAJeyJhbGwiLCAgICAgICBub19hcmd1bWVudCwgTlVMTCwg
J2EnfSwKKwl7Im92ZXJsYXkiLCAgICBhX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAogCXsia2V5d29y
ZHMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdLJ30sCiAJeyJsaWNlbnNlIiwgICBub19hcmd1bWVu
dCwgTlVMTCwgJ0wnfSwKIAl7ImRlc2NyaWJlIiwgIG5vX2FyZ3VtZW50LCBOVUxMLCAnRCd9LApA
QCAtMjgsNiArMjksNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxdXNlX2xvbmdfb3B0
CiBzdGF0aWMgY29uc3QgY2hhciAqcXVzZV9vcHRzX2hlbHBbXSA9IHsKIAkiU2hvdyBleGFjdCBu
b24gcmVnZXhwIG1hdGNoaW5nIHVzaW5nIHN0cmNtcCIsCiAJIlNob3cgYW5ub3lpbmcgdGhpbmdz
IGluIElVU0UiLAorCSJPbmx5IGNvbnNpZGVyIHRoZSA8YXJnPiBvdmVybGF5IiwKIAkiVXNlIHRo
ZSBLRVlXT1JEUyB2cyBJVVNFIiwKIAkiVXNlIHRoZSBMSUNFTlNFIHZzIElVU0UiLAogCSJEZXNj
cmliZSB0aGUgVVNFIGZsYWciLApAQCAtMzgsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAq
cXVzZV9vcHRzX2hlbHBbXSA9IHsKIHN0YXRpYyBjb25zdCBjaGFyIHF1c2VfcmNzaWRbXSA9ICIk
SWQ6IHF1c2UuYyx2IDEuNTMgMjAwNi8xMS8wOSAwMDoxODowNSB2YXBpZXIgRXhwICQiOwogI2Rl
ZmluZSBxdXNlX3VzYWdlKHJldCkgdXNhZ2UocmV0LCBRVVNFX0ZMQUdTLCBxdXNlX2xvbmdfb3B0
cywgcXVzZV9vcHRzX2hlbHAsIGxvb2t1cF9hcHBsZXRfaWR4KCJxdXNlIikpCiAKLWludCBxdXNl
X2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBxdXNl
X2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciByZXBvX3NlYXJjaFtdLCBp
bnQgYXJnYywgY2hhciAqKmFyZ3YpOwogCiBjaGFyIHF1c2VfbmFtZV9vbmx5ID0gMDsKIApAQCAt
ODEsNyArODMsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoCiAJ
fQogfQogCi1pbnQgcXVzZV9kZXNjcmliZV9mbGFnKGludCBpbmQsIGludCBhcmdjLCBjaGFyICoq
YXJndikKK2ludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgc2hvcnQgcmVwbywgY2hhciBy
ZXBvX3NlYXJjaFtdLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAjZGVmaW5lIE5VTV9TRUFS
Q0hfRklMRVMgQVJSX1NJWkUoc2VhcmNoX2ZpbGVzKQogCWNoYXIgYnVmW0JVRlNJWkVdLCAqcDsK
QEAgLTkxLDEyMSArOTMsMTYyIEBAIGludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50
IGFyZ2MKIAlGSUxFICpmcFtOVU1fU0VBUkNIX0ZJTEVTXTsKIAlESVIgKmQ7CiAJc3RydWN0IGRp
cmVudCAqZGU7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAotCWZvciAoaSA9IDA7IGkgPCBO
VU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVz
L3Byb2ZpbGVzLyVzIiwgcG9ydGRpciwgc2VhcmNoX2ZpbGVzW2ldKTsKLQkJaWYgKChmcFtpXSA9
IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkKLQkJCXdhcm5wKCJza2lwcGluZyAlcyIsIHNlYXJj
aF9maWxlc1tpXSk7Ci0JfQorCWN1cl9vdmVybGF5PW92ZXJsYXlfZ2VudG9vOwogCi0JZm9yIChp
ID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCXMgPSBzdHJsZW4oYXJndltpXSk7CisJZG8gewor
CQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6
ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9T
RUFSQ0hfRklMRVM7ICsraSkgeworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3By
b2ZpbGVzLyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIHNlYXJjaF9maWxlc1tpXSk7CisJCQlpZiAo
KGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQorCQkJCWlmICh2ZXJib3NlPjIpCisJ
CQkJCXdhcm5wKCJza2lwcGluZyAlcyBmb3IgdGhlICVzIG92ZXJsYXkiLCBzZWFyY2hfZmlsZXNb
aV0sIGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJfQogCi0JCWZvciAoZiA9IDA7IGYgPCBOVU1fU0VB
UkNIX0ZJTEVTOyArK2YpIHsKLQkJCWlmIChmcFtmXSA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwor
CQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKyspIHsKKwkJCXMgPSBzdHJsZW4oYXJndltpXSk7
CiAKLQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcFtmXSkgIT0gTlVMTCkgewot
CQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4nKQorCQkJZm9yIChmID0gMDsg
ZiA8IE5VTV9TRUFSQ0hfRklMRVM7ICsrZikgeworCQkJCWlmIChmcFtmXSA9PSBOVUxMKQogCQkJ
CQljb250aW51ZTsKIAotCQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkK
LQkJCQkJKnAgPSAnXDAnOworCQkJCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcFtm
XSkgIT0gTlVMTCkgeworCQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykK
KwkJCQkJCWNvbnRpbnVlOwogCi0JCQkJc3dpdGNoIChmKSB7Ci0JCQkJCWNhc2UgMDogLyogR2xv
YmFsIHVzZS5kZXNjICovCi0JCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKLQkJ
CQkJCQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKLQkJCQkJCQkJcHJp
bnRmKCIgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ld
LCBOT1JNLCBidWYrcyszKTsKLQkJCQkJCQkJZ290byBza2lwX2ZpbGU7Ci0JCQkJCQkJfQotCQkJ
CQkJYnJlYWs7CisJCQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKKwkJ
CQkJCSpwID0gJ1wwJzsKIAotCQkJCQljYXNlIDE6IC8qIExvY2FsIHVzZS5sb2NhbC5kZXNjICov
Ci0JCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQorCQkJCQlzd2l0Y2gg
KGYpIHsKKwkJCQkJCWNhc2UgMDogLyogR2xvYmFsIHVzZS5kZXNjICovCisJCQkJCQkJaWYgKCFz
dHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCisJCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1
ZltzKzFdID09ICctJykgeworCQkJCQkJCQkJaWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2Vu
dG9vKQorCQkJCQkJCQkJCXByaW50ZigiICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwg
Tk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQllbHNlCisJCQkJ
CQkJCQkJcHJpbnRmKCIgKCVzKSAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIGN1cl9vdmVybGF5
LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJ
CQkJCWdvdG8gc2tpcF9maWxlOworCQkJCQkJCQl9CiAJCQkJCQkJYnJlYWs7Ci0JCQkJCQkrK3A7
Ci0JCQkJCQlpZiAoIXN0cm5jbXAocCwgYXJndltpXSwgcykpIHsKLQkJCQkJCQlpZiAocFtzXSA9
PSAnICcgJiYgcFtzKzFdID09ICctJykgewotCQkJCQkJCQkqcCA9ICdcMCc7Ci0JCQkJCQkJCXBy
aW50ZigiICVzbG9jYWwlczolcyVzJXM6JXMlcyVzICVzXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBh
cmd2W2ldLCBOT1JNLCBCT0xELCBidWYsIE5PUk0sIHArcyszKTsKLQkJCQkJCQl9Ci0JCQkJCQl9
Ci0JCQkJCQlicmVhazsKIAotCQkJCQljYXNlIDI6IC8qIEFyY2hpdGVjdHVyZXMgYXJjaC5saXN0
ICovCi0JCQkJCQlpZiAoIXN0cmNtcChidWYsIGFyZ3ZbaV0pKSB7Ci0JCQkJCQkJcHJpbnRmKCIg
JXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1cmVcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwotCQkJCQkJCWdvdG8gc2tpcF9maWxlOwotCQkJCQkJfQot
CQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDE6IC8qIExvY2FsIHVzZS5sb2NhbC5kZXNjICovCisJ
CQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkgPT0gTlVMTCkKKwkJCQkJCQkJYnJlYWs7
CisJCQkJCQkJKytwOworCQkJCQkJCWlmICghc3RybmNtcChwLCBhcmd2W2ldLCBzKSkgeworCQkJ
CQkJCQlpZiAocFtzXSA9PSAnICcgJiYgcFtzKzFdID09ICctJykgeworCQkJCQkJCQkJKnAgPSAn
XDAnOworCQkJCQkJCQkJaWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vKQorCQkJCQkJ
CQkJCXByaW50ZigiICVzbG9jYWwlczolcyVzJXM6JXMlcyVzICVzXG4iLCBCT0xELCBOT1JNLCBC
TFVFLCBhcmd2W2ldLCBOT1JNLCBCT0xELCBidWYsIE5PUk0sIHArcyszKTsKKwkJCQkJCQkJCWVs
c2UKKwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzbG9jYWwlczolcyVzJXM6JXMlcyVzICVzXG4i
LCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9M
RCwgYnVmLCBOT1JNLCBwK3MrMyk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7
CiAKLQkJCQkJY2FzZSAzOiAvKiBMYW5ndWFnZXMgbGFuZy5kZXNjICovCi0JCQkJCQlpZiAoIXN0
cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKLQkJCQkJCQlpZiAoYnVmW3NdID09ICcgJyAmJiBidWZb
cysxXSA9PSAnLScpIHsKLQkJCQkJCQkJcHJpbnRmKCIgJXNsYW5nJXM6JXMlcyVzOiAlcyBsaW5n
dWFcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJ
Y2FzZSAyOiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLworCQkJCQkJCWlmICghc3RyY21w
KGJ1ZiwgYXJndltpXSkpIHsKKwkJCQkJCQkJaWYgKGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2Vu
dG9vKQorCQkJCQkJCQkJcHJpbnRmKCIgJXNhcmNoJXM6JXMlcyVzOiAlcyBhcmNoaXRlY3R1cmVc
biIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOworCQkJCQkJCQll
bHNlCisJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzYXJjaCVzOiVzJXMlczogJXMgYXJjaGl0ZWN0
dXJlXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9S
TSwgYXJndltpXSk7CiAJCQkJCQkJCWdvdG8gc2tpcF9maWxlOwogCQkJCQkJCX0KLQkJCQkJCWJy
ZWFrOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIDM6IC8qIExhbmd1YWdlcyBsYW5nLmRl
c2MgKi8KKwkJCQkJCQlpZiAoIXN0cm5jbXAoYnVmLCBhcmd2W2ldLCBzKSkKKwkJCQkJCQkJaWYg
KGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0gJy0nKSB7CisJCQkJCQkJCQlpZiAoY3VyX292
ZXJsYXkgPT0gb3ZlcmxheV9nZW50b28pCisJCQkJCQkJCQkJcHJpbnRmKCIgJXNsYW5nJXM6JXMl
cyVzOiAlcyBsaW5ndWFcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGJ1Zitz
KzMpOworCQkJCQkJCQkJZWxzZQorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNsYW5nJXM6JXMl
cyVzOiAlcyBsaW5ndWFcbiIsIGN1cl9vdmVybGF5LT5uYW1lLCBCT0xELCBOT1JNLCBCTFVFLCBh
cmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWdvdG8gc2tpcF9maWxlOworCQkJCQkJ
CQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KIAkJCQl9Ci0JCQl9CiAKIHNraXBfZmlsZToKLQkJ
CXJld2luZChmcFtmXSk7CisJCQkJcmV3aW5kKGZwW2ZdKTsKKwkJCX0KKworCQkJaWYgKGkgPT0g
KGFyZ2MgLSAxKSkKKwkJCQlmb3IgKGY9MDsgZjxOVU1fU0VBUkNIX0ZJTEVTOyArK2YpCisJCQkJ
CWlmIChmcFtmXSkgeworCQkJCQkJZmNsb3NlKGZwW2ZdKTsKKwkJCQkJCWZwW2ZdID0gTlVMTDsK
KwkJCQkJfQogCQl9Ci0JfQogCi0JZm9yIChmPTA7IGY8TlVNX1NFQVJDSF9GSUxFUzsgKytmKQot
CQlmY2xvc2UoZnBbZl0pOworCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4
dCkpOwogCiAJLyogbm93IHNjYW4gdGhlIGRlc2MgZGlyICovCi0Jc25wcmludGYoYnVmLCBzaXpl
b2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwgcG9ydGRpcik7Ci0JZCA9IG9wZW5kaXIoYnVm
KTsKLQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKGRl
LT5kX25hbWUrc3RybGVuKGRlLT5kX25hbWUpLTUsICIuZGVzYyIpKQorCWN1cl9vdmVybGF5PW92
ZXJsYXlfZ2VudG9vOworCWRvIHsKKwkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwg
Y3VyX292ZXJsYXktPm5hbWUsIHNpemVvZihyZXBvX3NlYXJjaCkpKQogCQkJY29udGludWU7Ci0K
LQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvJXMiLCBwb3J0
ZGlyLCBkZS0+ZF9uYW1lKTsKLQkJaWYgKChmcFswXT1mb3BlbihidWYsICJyIikpID09IE5VTEwp
IHsKLQkJCXdhcm4oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmc7IHNraXBwaW5nIiwg
ZGUtPmRfbmFtZSk7CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9k
ZXNjLyIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJaWYgKCEoZCA9IG9wZW5kaXIoYnVmKSkpIHsK
KwkJCWlmICh2ZXJib3NlPjIpCisJCQkJd2FybigiQ291bGQgbm90IG9wZW4gJXMgLT4gc2tpcHBp
bmciLCBidWYpOwogCQkJY29udGludWU7CiAJCX0KKwkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkp
ICE9IE5VTEwpIHsKKwkJCWlmIChzdHJjbXAoZGUtPmRfbmFtZStzdHJsZW4oZGUtPmRfbmFtZSkt
NSwgIi5kZXNjIikpCisJCQkJY29udGludWU7CiAKLQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9m
KGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7Ci0JCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0g
PT0gJ1xuJykKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy9kZXNj
LyVzIiwgY3VyX292ZXJsYXktPnBhdGgsIGRlLT5kX25hbWUpOworCQkJaWYgKChmcFswXT1mb3Bl
bihidWYsICJyIikpID09IE5VTEwpIHsKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZv
ciByZWFkaW5nOyBza2lwcGluZyIsIGRlLT5kX25hbWUpOwogCQkJCWNvbnRpbnVlOworCQkJfQog
Ci0JCQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJKnAgPSAnXDAn
OworCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwWzBdKSAhPSBOVUxMKSB7CisJ
CQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCWNvbnRpbnVlOwog
Ci0JCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CisJCQkJaWYgKChwID0g
c3RycmNocihidWYsICdcbicpKSAhPSBOVUxMKQorCQkJCQkqcCA9ICdcMCc7CisKKwkJCQlpZiAo
KHAgPSBzdHJjaHIoYnVmLCAnLScpKSA9PSBOVUxMKSB7CiBpbnZhbGlkX2xpbmU6Ci0JCQkJd2Fy
bigiSW52YWxpZCBsaW5lIGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKLQkJCQljb250
aW51ZTsKLQkJCX0KLQkJCXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsKLQkJ
CQkvKiBtYXliZSB0aGUgZmxhZyBoYXMgYSAnLScgaW4gaXQgLi4uICovCi0JCQkJaWYgKChwID0g
c3RyY2hyKHArMSwgJy0nKSkgPT0gTlVMTCkKLQkJCQkJZ290byBpbnZhbGlkX2xpbmU7Ci0JCQl9
Ci0JCQlwWy0xXSA9ICdcMCc7Ci0JCQlwICs9IDI7CisJCQkJCXdhcm4oIkludmFsaWQgbGluZSBp
biAnJXMnOiAlcyIsIGRlLT5kX25hbWUsIGJ1Zik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJ
CQl3aGlsZSAocFstMV0gIT0gJyAnICYmIHBbMV0gIT0gJyAnKSB7CisJCQkJCS8qIG1heWJlIHRo
ZSBmbGFnIGhhcyBhICctJyBpbiBpdCAuLi4gKi8KKwkJCQkJaWYgKChwID0gc3RyY2hyKHArMSwg
Jy0nKSkgPT0gTlVMTCkKKwkJCQkJCWdvdG8gaW52YWxpZF9saW5lOworCQkJCX0KKwkJCQlwWy0x
XSA9ICdcMCc7CisJCQkJcCArPSAyOwogCi0JCQlmb3IgKGkgPSBpbmQ7IGkgPCBhcmdjOyBpKysp
Ci0JCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgYnVmKSkKLQkJCQkJcHJpbnRmKCIgJXMlcyVzOiVz
JXMlczogJXNcbiIsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0s
IHApOwotCQl9Ci0JCWNsb3NlKGYpOwotCX0KLQljbG9zZWRpcihkKTsKKwkJCQlmb3IgKGkgPSBp
bmQ7IGkgPCBhcmdjOyBpKyspCisJCQkJCWlmICghc3RyY21wKGFyZ3ZbaV0sIGJ1ZikpIHsKKwkJ
CQkJCWlmIChjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQlwcmludGYoIiAl
cyVzJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltp
XSwgTk9STSwgcCk7CisJCQkJCQllbHNlCisJCQkJCQkJcHJpbnRmKCIgKCVzKSAlcyVzJXM6JXMl
cyVzOiAlc1xuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIGRlLT5kX25hbWUsIE5PUk0sIEJM
VUUsIGFyZ3ZbaV0sIE5PUk0sIHApOworCQkJCQl9CiAKKwkJCX0KKwkJCWZjbG9zZShmcFswXSk7
CisJCX0KKwkJY2xvc2VkaXIoZCk7CisJfSB3aGlsZSAoKGN1cl9vdmVybGF5PWN1cl9vdmVybGF5
LT5uZXh0KSk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogewogCUZJTEUgKmZwOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnN0cjsKKwlzaG9y
dCBteWVycm9yID0gMCwgcmVwbyA9IDA7CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hhciBv
dmVybGF5X25hbWVbNjRdOwogCiAJY2hhciBidWYwW19RX1BBVEhfTUFYXTsKIAljaGFyIGJ1ZjFb
X1FfUEFUSF9NQVhdOwpAQCAtMjE4LDYgKzI2MSwxMSBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKIAlzaG9ydCBxdXNlX2FsbCA9IDA7CiAJaW50IHJlZ2V4cF9tYXRjaGlu
ZyA9IDEsIGksIGlkeCA9IDA7CiAJc2l6ZV90IHNlYXJjaF9sZW47CisJb3ZlcmxheV90ICpjdXJf
b3ZlcmxheSwgKm92ZXJsYXlfdG1wOworCisJY3VyX292ZXJsYXkgPSBvdmVybGF5X2dlbnRvbzsK
KwlvdmVybGF5X25hbWVbMF0gPSAwOworCXJlcG9fc2VhcmNoWzBdID0gMDsKIAogCURCRygiYXJn
Yz0lZCBhcmd2WzBdPSVzIGFyZ3ZbMV09JXMiLAogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4g
MSA/IGFyZ3ZbMV0gOiAiTlVMTD8iKTsKQEAgLTIyNiw2ICsyNzQsMTAgQEAgaW50IHF1c2VfbWFp
bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXN3aXRjaCAoaSkgewogCQljYXNlICdlJzogcmVn
ZXhwX21hdGNoaW5nID0gMDsgYnJlYWs7CiAJCWNhc2UgJ2EnOiBxdXNlX2FsbCA9IDE7IGJyZWFr
OworCQljYXNlICdvJzoKKwkJCXJlcG8gPSAxOworCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0
YXJnLCBzaXplb2YocmVwb19zZWFyY2gpKTsKKwkJCWJyZWFrOwogCQljYXNlICdLJzogaWR4ID0g
MTsgYnJlYWs7CiAJCWNhc2UgJ0wnOiBpZHggPSAyOyBicmVhazsKIAkJY2FzZSAnRCc6IGlkeCA9
IC0xOyBicmVhazsKQEAgLTIzNCwxMyArMjg2LDI1IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxdXNlKQogCQl9CiAJfQotCWlm
IChhcmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYgaWR4ID49IDApCisKKwlpZiAocmVwbykg
eworCQlkbyB7CisJCQlpZiAoIXN0cm5jbXAoY3VyX292ZXJsYXktPm5hbWUsIHJlcG9fc2VhcmNo
LCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoKGN1
cl9vdmVybGF5PWN1cl9vdmVybGF5LT5uZXh0KSk7CisJCWlmIChOVUxMID09IGN1cl9vdmVybGF5
KQorCQkJZXJyKCIlcyA6IFVua25vd24gb3ZlcmxheSwgdHJ5ICdxIC0tbHMtb3ZlcmxheXMnIiwg
cmVwb19zZWFyY2gpOworCX0KKworCWlmIChhcmdjID09IG9wdGluZCAmJiAhcXVzZV9hbGwgJiYg
aWR4ID49IDApIHsKKwkJaWYgKGlkeCA9PSAzKQorCQkJZnJlZShzZWFyY2hfdmFyc1tpZHhdKTsK
IAkJcXVzZV91c2FnZShFWElUX0ZBSUxVUkUpOworCX0KIAogCWlmIChpZHggPT0gLTEpCi0JCXJl
dHVybiBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCBhcmdjLCBhcmd2KTsKKwkJcmV0dXJuIHF1
c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIHJlcG8sIHJlcG9fc2VhcmNoLCBhcmdjLCBhcmd2KTsK
IAotCWlmIChxdXNlX2FsbCkgb3B0aW5kID0gYXJnYzsKIAlpbml0aWFsaXplX2VidWlsZF9mbGF0
KCk7CS8qIHNldHMgb3VyIHB3ZCB0byAkUE9SVERJUiAqLwogCiAJc2VhcmNoX2xlbiA9IHN0cmxl
bihzZWFyY2hfdmFyc1tpZHhdKTsKQEAgLTI1MCw2ICszMTQsNTEgQEAgaW50IHF1c2VfbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJldHVybiAxOwogCXdoaWxlICgoZmdldHMoZWJ1aWxk
LCBzaXplb2YoZWJ1aWxkKSwgZnApKSAhPSBOVUxMKSB7CiAJCUZJTEUgKm5ld2ZwOworCQlpZiAo
KHAgPSBzdHJjaHIoZWJ1aWxkLCAnOicpKSkKKwkJeworCQkJKnAgPSAwOworCQkJc3RyID0gcCsy
OwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQlwID0gZWJ1aWxkOworCQkJaWYgKHJlcG8g
JiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCisJCQkJY29u
dGludWU7CisJCQlpZiAoc3RybmNtcChvdmVybGF5X25hbWUsIHAsIHNpemVvZihvdmVybGF5X25h
bWUpKSkgeworCQkJCW92ZXJsYXlfdG1wPW92ZXJsYXlfZ2VudG9vOworCQkJCWRvIHsKKwkJCQkJ
aWYgKCFzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCBwLCBzaXplb2Yob3ZlcmxheV90bXAtPm5h
bWUpKSkKKwkJCQkJCWJyZWFrOworCQkJCX0gd2hpbGUgKChvdmVybGF5X3RtcD1vdmVybGF5X3Rt
cC0+bmV4dCkpOworCQkJCWlmIChvdmVybGF5X3RtcCkKKwkJCQl7CisJCQkJCWN1cl9vdmVybGF5
ID0gb3ZlcmxheV90bXA7CisJCQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+cGF0aCkgIT0gMCkg
eworCQkJCQkJd2FybnAoImNoZGlyIHRvIFBPUlRESVIgJyVzJyBmYWlsZWQiLCBjdXJfb3Zlcmxh
eS0+cGF0aCk7CisJCQkJCQlteWVycm9yPTE7CisJCQkJCX0KKwkJCQl9IGVsc2UKKwkJCQkJbXll
cnJvcj0xOworCisJCQkJc3RybmNweShvdmVybGF5X25hbWUsIGN1cl9vdmVybGF5LT5uYW1lLCBz
aXplb2Yob3ZlcmxheV9uYW1lKSk7CisJCQl9CisJCQlzdHJjcHkoZWJ1aWxkLCBzdHIpOworCQl9
IGVsc2UKKwkJCW15ZXJyb3I9MTsKKworCQlpZiAobXllcnJvcikgeworCQkJaWYgKCFyZWluaXRp
YWxpemUpCisJCQkJd2FybmYoIihjYWNoZSB1cGRhdGUgcGVuZGluZykgJXMgOiBVbmtub3duIG92
ZXJsYXkiLCBvdmVybGF5X25hbWUpOworCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCW15ZXJyb3I9
MDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChxdXNlX2FsbCkgJiYgb3B0aW5kIT1hcmdj
KSB7CisJCQlmb3IgKGk9b3B0aW5kO2k8YXJnYztpKyspCisJCQkJaWYgKChzdHJzdHIoZWJ1aWxk
LGFyZ3ZbaV0pKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaT09YXJnYykKKwkJCQljb250aW51ZTsK
KwkJfQorCiAJCWlmICgocCA9IHN0cmNocihlYnVpbGQsICdcbicpKSAhPSBOVUxMKQogCQkJKnAg
PSAwOwogCQlpZiAoKG5ld2ZwID0gZm9wZW4oZWJ1aWxkLCAiciIpKSAhPSBOVUxMKSB7CkBAIC0z
NzUsMTUgKzQ4NCwxOCBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ
CQkJaWYgKHZlcmJvc2UgPiAzKQogCQkJCQkJcHJpbnRmKCIlcyAlcyAlcyAiLCAqdXNlciA/IHVz
ZXIgOiAiTUlTU0lORyIsICpyZXZpc2lvbiA/IHJldmlzaW9uIDogIk1JU1NJTkciLCAqZGF0ZSA/
IGRhdGUgOiAiTUlTU0lORyIpOwogCi0JCQkJCXByaW50ZigiJXMlcyVzICIsIENZQU4sIGVidWls
ZCwgTk9STSk7Ci0JCQkJCXByaW50X2hpZ2hsaWdodGVkX3VzZV9mbGFncygmYnVmMFtzZWFyY2hf
bGVuKzFdLCBvcHRpbmQsIGFyZ2MsIGFyZ3YpOworCQkJCQlwcmludGYoIiVzJXM6OiVzJXMgIiwg
Q1lBTiwgY3VyX292ZXJsYXktPm5hbWUsIGVidWlsZCwgTk9STSk7CisJCQkJCWlmIChxdXNlX2Fs
bCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50
X2hpZ2hsaWdodGVkX3VzZV9mbGFncygmYnVmMFtzZWFyY2hfbGVuKzFdLCBhcmdjLCBhcmdjLCBh
cmd2KTsKKwkJCQkJZWxzZQorCQkJCQkJcHJpbnRfaGlnaGxpZ2h0ZWRfdXNlX2ZsYWdzKCZidWYw
W3NlYXJjaF9sZW4rMV0sIG9wdGluZCwgYXJnYywgYXJndik7CiAJCQkJCXB1dHMoTk9STSk7CiAJ
CQkJCWlmICh2ZXJib3NlID4gMSkgewogCQkJCQkJY2hhciAqKkFSR1YgPSBOVUxMOwogCQkJCQkJ
aW50IEFSR0MgPSAwOwogCQkJCQkJbWFrZWFyZ3YoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgJkFSR0Ms
ICZBUkdWKTsKIAkJCQkJCWlmIChBUkdDID4gMCkgewotCQkJCQkJCXF1c2VfZGVzY3JpYmVfZmxh
ZygxLCBBUkdDLCBBUkdWKTsKKwkJCQkJCQlxdXNlX2Rlc2NyaWJlX2ZsYWcoMSwgMCwgcmVwb19z
ZWFyY2gsIEFSR0MsIEFSR1YpOwogCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBBUkdDOyBpKyspCiAJ
CQkJCQkJCWZyZWUoQVJHVltpXSk7CiAJCQkJCQkJZnJlZShBUkdWKTsKQEAgLTQwMCw2ICs1MTIs
OCBAQCBpbnQgcXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAlmY2xv
c2UoZnApOworCWlmIChpZHggPT0gMykKKwkJZnJlZShzZWFyY2hfdmFyc1tpZHhdKTsKIAlyZXR1
cm4gRVhJVF9TVUNDRVNTOwogfQogCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIv
dGVzdHMvaW5zdGFsbC9kb3Rlc3QgcG9ydGFnZS11dGlscy0yMDA2MTEyMi5uZXcvdGVzdHMvaW5z
dGFsbC9kb3Rlc3QKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNjExMjIvdGVzdHMvaW5zdGFsbC9kb3Rl
c3QJMjAwNi0xMS0yMyAwMDo1NDo0OS4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMt
MjAwNjExMjIubmV3L3Rlc3RzL2luc3RhbGwvZG90ZXN0CTIwMDYtMTEtMjMgMDA6NTU6NTkuMjMx
ODg5NDQ3ICswMTAwCkBAIC03LDcgKzcsNyBAQCBkaWUoKSB7CiAKIGNwIC4uLy4uL3EgLgogLi9x
IC1pIHx8IGRpZSAiLi9xIC1pIgotZm9yIGFwcCBpbiAkKC4vcSAtQ2ggfCBncmVwICcgOiAnIHwg
YXdrICd7cHJpbnQgJDF9JykgOyBkbworZm9yIGFwcCBpbiAkKC4vcSAtQ2ggfCBncmVwIC12ICdV
c2FnZScgfCBncmVwICcgOiAnIHwgYXdrICd7cHJpbnQgJDF9JykgOyBkbwogCVsgISAtZSAkYXBw
IF0gJiYgZGllICIkYXBwIGRvZXMgbm90IGV4aXN0IgogZG9uZQogZWNobyAiUEFTU0VEIgo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104816</attachid>
            <date>2006-12-27 11:56 0000</date>
            <desc>overlay-manpages.patch</desc>
            <filename>overlay-manpages.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA2MTIyNy5uZXcvbWFuL3EuMSBwb3J0YWdlLXV0
aWxzLTIwMDYxMjI3Lm5ldy1kb2MvbWFuL3EuMQotLS0gcG9ydGFnZS11dGlscy0yMDA2MTIyNy5u
ZXcvbWFuL3EuMQkyMDA2LTEyLTI3IDE4OjE5OjUwLjE3MDYyMDQ3NiArMDEwMAorKysgcG9ydGFn
ZS11dGlscy0yMDA2MTIyNy5uZXctZG9jL21hbi9xLjEJMjAwNi0xMi0yNyAyMDoyMjozNS44OTM4
NjAzMzkgKzAxMDAKQEAgLTEsMTAgKzEsMTAgQEAKIC5cIiBETyBOT1QgTU9ESUZZIFRISVMgRklM
RSEgIEl0IHdhcyBnZW5lcmF0ZWQgYnkgaGVscDJtYW4gMS4zNi4KLS5USCBxICIxIiAiU2VwdGVt
YmVyIDIwMDYiICJHZW50b28gRm91bmRhdGlvbiIgInEiCisuVEggcSAiMSIgIkRlY2VtYmVyIDIw
MDYiICJHZW50b28gRm91bmRhdGlvbiIgInEiCiAuU0ggTkFNRQogcSBcLSBpbnZva2UgYSBwb3J0
YWdlIHV0aWxpdHkgYXBwbGV0CiAuU0ggU1lOT1BTSVMKIC5CIHEKLVxmSTxhcHBsZXQ+IDxhcmdz
PiAgOiBpbnZva2UgYSBwb3J0YWdlIHV0aWxpdHkgYXBwbGV0XGZSCitcZkk8YXBwbGV0PiA8YXJn
cz4gXGZSCiAuU0ggREVTQ1JJUFRJT04KIC5TUyAiQ3VycmVudGx5IGRlZmluZWQgYXBwbGV0czoi
CiAuSVAKQEAgLTUzLDExICs1MywxNCBAQCBxdXNlIDx1c2VmbGFnPgogcXhwYWsgPG1pc2MgYXJn
cz4KIDogbWFuaXB1bGF0ZSB4cGFrIGFyY2hpdmVzCiAuUFAKLU9wdGlvbnM6IFxmQlwtW2lybXZx
Q2hWXVxmUgorT3B0aW9uczogXGZCXC1baWxybXZxQ2hWXVxmUgogLlRQCiBcZkJcLWlcZlIsIFxm
QlwtXC1pbnN0YWxsXGZSCiAqIEluc3RhbGwgc3ltbGlua3MgZm9yIGFwcGxldHMKIC5UUAorXGZC
XC1sXGZSLCBcZkJcLVwtbHNcLW92ZXJsYXlzXGZSCisqIExpc3QgY29uZmlndXJlZCBvdmVybGF5
cworLlRQCiBcZkJcLXJcZlIsIFxmQlwtXC1yZWluaXRpYWxpemVcZlIKICogUmVpbml0aWFsaXpl
IGVidWlsZCBjYWNoZQogLlRQCkBAIC03OSw0ICs4Miw0IEBAIE9wdGlvbnM6IFxmQlwtW2lybXZx
Q2hWXVxmUgogXGZCXC1WXGZSLCBcZkJcLVwtdmVyc2lvblxmUgogKiBQcmludCB2ZXJzaW9uIGFu
ZCBleGl0CiAuUFAKLSRJZDogcS4xLHYgMS4yMCAyMDA2LzA5LzExIDA1OjU0OjEyIHZhcGllciBF
eHAgJAorJElkOiBxLmMsdiAxLjMzIDIwMDYvMTEvMDkgMDA6MTg6MDUgdmFwaWVyIEV4cCAkCmRp
ZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNjEyMjcubmV3L21hbi9xZ3JlcC4xIHBvcnRhZ2Ut
dXRpbHMtMjAwNjEyMjcubmV3LWRvYy9tYW4vcWdyZXAuMQotLS0gcG9ydGFnZS11dGlscy0yMDA2
MTIyNy5uZXcvbWFuL3FncmVwLjEJMjAwNi0xMi0yNyAxODoxOTo1MC4xNzA2MjA0NzYgKzAxMDAK
KysrIHBvcnRhZ2UtdXRpbHMtMjAwNjEyMjcubmV3LWRvYy9tYW4vcWdyZXAuMQkyMDA2LTEyLTI3
IDIwOjIyOjM2LjUzMDc2MzUxNiArMDEwMApAQCAtMSwxMiArMSwxMiBAQAogLlwiIERPIE5PVCBN
T0RJRlkgVEhJUyBGSUxFISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjM2LgotLlRI
IHFncmVwICIxIiAiU2VwdGVtYmVyIDIwMDYiICJHZW50b28gRm91bmRhdGlvbiIgInFncmVwIgor
LlRIIHFncmVwICIxIiAiRGVjZW1iZXIgMjAwNiIgIkdlbnRvbyBGb3VuZGF0aW9uIiAicWdyZXAi
CiAuU0ggTkFNRQogcWdyZXAgXC0gZ3JlcCBpbiBlYnVpbGRzCiAuU0ggU1lOT1BTSVMKIC5CIHFn
cmVwCi1cZkk8bWlzYyBhcmdzPiA6IGdyZXAgaW4gZWJ1aWxkc1xmUgorXGZJPG1pc2MgYXJncz5c
ZlIKIC5TSCBERVNDUklQVElPTgotT3B0aW9uczogXGZCXC1bSWlIY2V2cUNoVl1cZlIKK09wdGlv
bnM6IFxmQlwtW0lpSG9cZlI6Y2V2cUNoVl0KIC5UUAogXGZCXC1JXGZSLCBcZkJcLVwtaW52ZXJ0
XC1tYXRjaFxmUgogKiBTZWxlY3Qgbm9uXC1tYXRjaGluZyBsaW5lcwpAQCAtMTcsNiArMTcsMTEg
QEAgT3B0aW9uczogXGZCXC1bSWlIY2V2cUNoVl1cZlIKIFxmQlwtSFxmUiwgXGZCXC1cLXdpdGhc
LWZpbGVuYW1lXGZSCiAqIFByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBtYXRjaAogLlRQCitc
ZkJcLW9cZlIsIFxmQlwtXC1vdmVybGF5XGZSCis8YXJnPgorLkJSCisgKiBPbmx5IGNvbnNpZGVy
IHRoZSA8YXJnPiBvdmVybGF5CisuVFAKIFxmQlwtY1xmUiwgXGZCXC1cLWNvdW50XGZSCiAqIE9u
bHkgcHJpbnQgYSBjb3VudCBvZiBtYXRjaGluZyBsaW5lcyBwZXIgRklMRQogLlRQCkBAIC0zOCw0
ICs0Myw0IEBAIE9wdGlvbnM6IFxmQlwtW0lpSGNldnFDaFZdXGZSCiBcZkJcLVZcZlIsIFxmQlwt
XC12ZXJzaW9uXGZSCiAqIFByaW50IHZlcnNpb24gYW5kIGV4aXQKIC5QUAotJElkOiBxZ3JlcC4x
LHYgMS4xNCAyMDA2LzA5LzExIDA1OjU0OjEyIHZhcGllciBFeHAgJAorJElkOiBxZ3JlcC5jLHYg
MS4xNSAyMDA2LzExLzA5IDAwOjE4OjA1IHZhcGllciBFeHAgJApkaWZmIC1OYXJ1cCBwb3J0YWdl
LXV0aWxzLTIwMDYxMjI3Lm5ldy9tYW4vcWxvcC4xIHBvcnRhZ2UtdXRpbHMtMjAwNjEyMjcubmV3
LWRvYy9tYW4vcWxvcC4xCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMjI3Lm5ldy9tYW4vcWxvcC4x
CTIwMDYtMTItMjcgMTg6MTk6NTAuMTcwNjIwNDc2ICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIw
MDYxMjI3Lm5ldy1kb2MvbWFuL3Fsb3AuMQkyMDA2LTEyLTI3IDIwOjIyOjM2LjcyMTczNDQ4NCAr
MDEwMApAQCAtMSwxMCArMSwxMCBAQAogLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFISAgSXQg
d2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjM2LgotLlRIIHFsb3AgIjEiICJTZXB0ZW1iZXIg
MjAwNiIgIkdlbnRvbyBGb3VuZGF0aW9uIiAicWxvcCIKKy5USCBxbG9wICIxIiAiRGVjZW1iZXIg
MjAwNiIgIkdlbnRvbyBGb3VuZGF0aW9uIiAicWxvcCIKIC5TSCBOQU1FCiBxbG9wIFwtIGVtZXJn
ZSBsb2cgYW5hbHl6ZXIKIC5TSCBTWU5PUFNJUwogLkIgcWxvcAotXGZJPHBrZ25hbWU+IDogZW1l
cmdlIGxvZyBhbmFseXplclxmUgorXGZJPHBrZ25hbWU+XGZSCiAuU0ggREVTQ1JJUFRJT04KIE9w
dGlvbnM6IFxmQlwtW2d0bHVzY2ZcZlI6RjpIdnFDaFZdCiAuVFAKQEAgLTQ5LDQgKzQ5LDQgQEAg
T3B0aW9uczogXGZCXC1bZ3RsdXNjZlxmUjpGOkh2cUNoVl0KIFxmQlwtVlxmUiwgXGZCXC1cLXZl
cnNpb25cZlIKICogUHJpbnQgdmVyc2lvbiBhbmQgZXhpdAogLlBQCi0kSWQ6IHFsb3AuMSx2IDEu
MTcgMjAwNi8wOS8xMSAwNTo1NDoxMiB2YXBpZXIgRXhwICQKKyRJZDogcWxvcC5jLHYgMS4zNCAy
MDA2LzExLzA5IDAwOjE4OjA1IHZhcGllciBFeHAgJApkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxz
LTIwMDYxMjI3Lm5ldy9tYW4vcXNlYXJjaC4xIHBvcnRhZ2UtdXRpbHMtMjAwNjEyMjcubmV3LWRv
Yy9tYW4vcXNlYXJjaC4xCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDYxMjI3Lm5ldy9tYW4vcXNlYXJj
aC4xCTIwMDYtMTItMjcgMTg6MTk6NTAuMTcxNjIwMzI0ICswMTAwCisrKyBwb3J0YWdlLXV0aWxz
LTIwMDYxMjI3Lm5ldy1kb2MvbWFuL3FzZWFyY2guMQkyMDA2LTEyLTI3IDIwOjIyOjM3LjA4MTY3
OTc2MyArMDEwMApAQCAtMSwxMiArMSwxMiBAQAogLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxF
ISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjM2LgotLlRIIHFzZWFyY2ggIjEiICJT
ZXB0ZW1iZXIgMjAwNiIgIkdlbnRvbyBGb3VuZGF0aW9uIiAicXNlYXJjaCIKKy5USCBxc2VhcmNo
ICIxIiAiRGVjZW1iZXIgMjAwNiIgIkdlbnRvbyBGb3VuZGF0aW9uIiAicXNlYXJjaCIKIC5TSCBO
QU1FCiBxc2VhcmNoIFwtIHNlYXJjaCBwa2duYW1lL2Rlc2MKIC5TSCBTWU5PUFNJUwogLkIgcXNl
YXJjaAotXGZJPHJlZ2V4PiA6IHNlYXJjaCBwa2duYW1lL2Rlc2NcZlIKK1xmSTxyZWdleD5cZlIK
IC5TSCBERVNDUklQVElPTgotT3B0aW9uczogXGZCXC1bYWNzU05IdnFDaFZdXGZSCitPcHRpb25z
OiBcZkJcLVthY29cZlI6cHNTTkh2cUNoVl0KIC5UUAogXGZCXC1hXGZSLCBcZkJcLVwtYWxsXGZS
CiAqIExpc3QgdGhlIGRlc2NyaXB0aW9ucyBvZiBldmVyeSBwYWNrYWdlIGluIHRoZSBjYWNoZQpA
QCAtMTQsNiArMTQsMTQgQEAgT3B0aW9uczogXGZCXC1bYWNzU05IdnFDaFZdXGZSCiBcZkJcLWNc
ZlIsIFxmQlwtXC1jYWNoZVxmUgogKiBVc2UgdGhlIHBvcnRhZ2UgY2FjaGUKIC5UUAorXGZCXC1v
XGZSLCBcZkJcLVwtb3ZlcmxheVxmUgorPGFyZz4KKy5CUgorICogU2VhcmNoIG9ubHkgaW4gdGhl
IDxhcmc+IG92ZXJsYXkKKy5UUAorXGZCXC1wXGZSLCBcZkJcLVwtc2hvd1wtcGF0aFxmUgorKiBT
aG93IHRoZSBwYXRoIHRvIHRoZSBlYnVpbGQKKy5UUAogXGZCXC1zXGZSLCBcZkJcLVwtc2VhcmNo
XGZSCiAqIFJlZ2V4IHNlYXJjaCBwYWNrYWdlIGJhc2VuYW1lcwogLlRQCkBAIC00Myw0ICs1MSw0
IEBAIE9wdGlvbnM6IFxmQlwtW2Fjc1NOSHZxQ2hWXVxmUgogXGZCXC1WXGZSLCBcZkJcLVwtdmVy
c2lvblxmUgogKiBQcmludCB2ZXJzaW9uIGFuZCBleGl0CiAuUFAKLSRJZDogcXNlYXJjaC4xLHYg
MS4xOCAyMDA2LzA5LzExIDA1OjU0OjEyIHZhcGllciBFeHAgJAorJElkOiBxc2VhcmNoLmMsdiAx
LjMyIDIwMDYvMTIvMjUgMTY6Mzg6Mzcgc29sYXIgRXhwICQKZGlmZiAtTmFydXAgcG9ydGFnZS11
dGlscy0yMDA2MTIyNy5uZXcvbWFuL3F1c2UuMSBwb3J0YWdlLXV0aWxzLTIwMDYxMjI3Lm5ldy1k
b2MvbWFuL3F1c2UuMQotLS0gcG9ydGFnZS11dGlscy0yMDA2MTIyNy5uZXcvbWFuL3F1c2UuMQky
MDA2LTEyLTI3IDE4OjE5OjUwLjE3MTYyMDMyNCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA2
MTIyNy5uZXctZG9jL21hbi9xdXNlLjEJMjAwNi0xMi0yNyAyMDoyMjozNy4zNjI2MzcwNTIgKzAx
MDAKQEAgLTEsMTIgKzEsMTIgQEAKIC5cIiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSEgIEl0IHdh
cyBnZW5lcmF0ZWQgYnkgaGVscDJtYW4gMS4zNi4KLS5USCBxdXNlICIxIiAiU2VwdGVtYmVyIDIw
MDYiICJHZW50b28gRm91bmRhdGlvbiIgInF1c2UiCisuVEggcXVzZSAiMSIgIkRlY2VtYmVyIDIw
MDYiICJHZW50b28gRm91bmRhdGlvbiIgInF1c2UiCiAuU0ggTkFNRQogcXVzZSBcLSBmaW5kIHBr
Z3MgdXNpbmcgdXNlZmxhZ3MKIC5TSCBTWU5PUFNJUwogLkIgcXVzZQotXGZJPHVzZWZsYWc+IDog
ZmluZCBwa2dzIHVzaW5nIHVzZWZsYWdzXGZSCitcZkk8dXNlZmxhZz5cZlIKIC5TSCBERVNDUklQ
VElPTgotT3B0aW9uczogXGZCXC1bZWF2S0xERlxmUjpOdnFDaFZdCitPcHRpb25zOiBcZkJcLVtl
YW9cZlI6dktMREY6TnZxQ2hWXQogLlRQCiBcZkJcLWVcZlIsIFxmQlwtXC1leGFjdFxmUgogKiBT
aG93IGV4YWN0IG5vbiByZWdleHAgbWF0Y2hpbmcgdXNpbmcgc3RyY21wCkBAIC0xNCw2ICsxNCwx
MSBAQCBPcHRpb25zOiBcZkJcLVtlYXZLTERGXGZSOk52cUNoVl0KIFxmQlwtYVxmUiwgXGZCXC1c
LWFsbFxmUgogKiBTaG93IGFubm95aW5nIHRoaW5ncyBpbiBJVVNFCiAuVFAKK1xmQlwtb1xmUiwg
XGZCXC1cLW92ZXJsYXlcZlIKKzxhcmc+CisuQlIKKyAqIE9ubHkgY29uc2lkZXIgdGhlIDxhcmc+
IG92ZXJsYXkKKy5UUAogXGZCXC1LXGZSLCBcZkJcLVwta2V5d29yZHNcZlIKICogVXNlIHRoZSBL
RVlXT1JEUyB2cyBJVVNFCiAuVFAKQEAgLTQ2LDQgKzUxLDQgQEAgT3B0aW9uczogXGZCXC1bZWF2
S0xERlxmUjpOdnFDaFZdCiBcZkJcLVZcZlIsIFxmQlwtXC12ZXJzaW9uXGZSCiAqIFByaW50IHZl
cnNpb24gYW5kIGV4aXQKIC5QUAotJElkOiBxdXNlLjEsdiAxLjE5IDIwMDYvMDkvMTEgMDU6NTQ6
MTIgdmFwaWVyIEV4cCAkCiskSWQ6IHF1c2UuYyx2IDEuNTQgMjAwNi8xMi8yNSAxNjozODozNyBz
b2xhciBFeHAgJAo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107119</attachid>
            <date>2007-01-15 20:42 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9saWJxL2F0b21fY29tcGFyZS5jIHBv
cnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L2xpYnEvYXRvbV9jb21wYXJlLmMKLS0tIHBvcnRhZ2Ut
dXRpbHMtMjAwNzAxMTUvbGlicS9hdG9tX2NvbXBhcmUuYwkyMDA3LTAxLTE1IDE5OjIwOjEzLjAw
MDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbGlicS9hdG9tX2Nv
bXBhcmUuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjIzOTk0NTkxNiArMDEwMApAQCAtNDMsMTEgKzQz
LDI3IEBAIGludCBhdG9tX2NvbXBhcmUoY29uc3QgZGVwZW5kX2F0b20gKiBjb24KIAogCS8qIGNo
ZWNrIHZlcnNpb24gKi8KIAlpZiAoYTEtPlBWICYmIGEyLT5QVikgeworCQlpbnQgaTsKIAkJY2hh
ciAqczEsICpzMjsKIAkJdW5zaWduZWQgaW50IG4xLCBuMjsKIAkJLyogZmlyc3Qgd2UgY29tcGFy
ZSB0aGUgdmVyc2lvbiBbMS4wXXpfYWxwaGExICovCiAJCXMxID0gYTEtPlBWOwogCQlzMiA9IGEy
LT5QVjsKKwkJLyogdHJlYXQgdGhlIGNhc2Ugb2Ygc3ZuL2xpdmUvc2NtL2N2cy4uIHZlcnNpb24g
Ki8KKwkJbjE9bjI9MDsKKwkJZm9yIChpPTA7IGk8QVJSX1NJWkUoYXRvbV92ZXJzaW9uX3N0cik7
ICsraSkgeworCQkJaWYgKCFzdHJjbXAoczEsJmF0b21fdmVyc2lvbl9zdHJbaV0udmVyc2lvblsx
XSkpCisJCQkJbjE9MTsKKwkJCWlmICghc3RyY21wKHMyLCZhdG9tX3ZlcnNpb25fc3RyW2ldLnZl
cnNpb25bMV0pKQorCQkJCW4yPTE7CisJCX0KKwkJaWYgKG4xK24yKSB7CisJCQlpZiAobjE9PW4y
KQorCQkJCWdvdG8gc2FtZV92ZXJzaW9uOworCQkJZWxzZQorCQkJCXJldHVybiAobjE8bjIgPyBP
TERFUiA6IE5FV0VSKTsKKwkJfQorCiAJCXdoaWxlIChzMSB8fCBzMikgewogCQkJaWYgKHMxICYm
IHMyKSB7CiAJCQkJLyogZGVhbCB3aXRoIGxlYWRpbmcgemVyb3MgKi8KQEAgLTEwMSw3ICsxMTcs
NyBAQCBpbnQgYXRvbV9jb21wYXJlKGNvbnN0IGRlcGVuZF9hdG9tICogY29uCiAJCS8qIGZhbGwg
dGhyb3VnaCB0byAtciMgY2hlY2sgYmVsb3cgKi8KIAl9IGVsc2UgaWYgKGExLT5QViB8fCBhMi0+
UFYpCiAJCXJldHVybiBOT1RfRVFVQUw7Ci0KK3NhbWVfdmVyc2lvbjoKIAlpZiAoYTEtPlBSX2lu
dCA9PSBhMi0+UFJfaW50KQogCQlyZXR1cm4gRVFVQUw7CiAJZWxzZSBpZiAoYTEtPlBSX2ludCA8
IGEyLT5QUl9pbnQpCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvbGlicS9hdG9t
X2V4cGxvZGUuYyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9saWJxL2F0b21fZXhwbG9kZS5j
Ci0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L2xpYnEvYXRvbV9leHBsb2RlLmMJMjAwNy0wMS0x
NSAxOToyMDoxMy4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3
L2xpYnEvYXRvbV9leHBsb2RlLmMJMjAwNy0wMS0xNSAxOToyMTo1OC4yNDg5NDQ1NDMgKzAxMDAK
QEAgLTEzLDggKzEzLDIxIEBACiAKIHR5cGVkZWYgZW51bSB7IFZFUl9BTFBIQT0wLCBWRVJfQkVU
QSwgVkVSX1BSRSwgVkVSX1JDLCBWRVJfTk9STSwgVkVSX1AgfSBhdG9tX3N1ZmZpeGVzOwogY29u
c3QgY2hhciAqIGNvbnN0IGF0b21fc3VmZml4ZXNfc3RyW10gPSB7ICJfYWxwaGEiLCAiX2JldGEi
LCAiX3ByZSIsICJfcmMiLCAiXy8qYm9ndXMqLyIsICJfcCIsIE5VTEwgfTsKK2NvbnN0IHN0cnVj
dCB7CisJY29uc3QgY2hhciAqdmVyc2lvbjsKKwljb25zdCBzaXplX3QgdmVyc2lvbl9sZW47Cit9
IGF0b21fdmVyc2lvbl9zdHJbXSA9IHsKKwl7Ii1zY20iLCA0fSwKKwl7Ii1jdnMiLCA0fSwKKwl7
Ii1zdm4iLCA0fSwKKwl7Ii1saXZlIiwgNX0sCisJeyItOTk5OSIsIDV9Cit9OworCisKIAogdHlw
ZWRlZiBzdHJ1Y3QgeworCWNoYXIgKk9WRVJMQVk7CiAJY2hhciAqQ0FURUdPUlk7CiAJY2hhciAq
UE47CiAJaW50IFBSX2ludDsKQEAgLTYxLDYgKzc0LDE2IEBAIGRlcGVuZF9hdG9tICphdG9tX2V4
cGxvZGUoY29uc3QgY2hhciAqYXQKIAlyZXQtPnN1ZmZpeCA9IFZFUl9OT1JNOwogCW1lbWNweShy
ZXQtPkNBVEVHT1JZLCBhdG9tLCBzbGVuKTsKIAorCS8qIGZpbmQgdGhlIE9WRVJMQVksIGlmIHBy
ZXNlbnQgKi8KKwlpZiAoKHB0cl90bXA9c3Ryc3RyKHJldC0+Q0FURUdPUlksICI6OiIpKSkgewor
CQlpZiAoKihwdHJfdG1wKzIpKQorCQkJcmV0LT5PVkVSTEFZID0gcHRyX3RtcCArIDI7CisJCWVs
c2UKKwkJCXJldC0+T1ZFUkxBWSA9IE5VTEw7CisJCSpwdHJfdG1wID0gMDsKKwkJcHRyX3RtcCA9
IE5VTEw7CisJfQorCiAJLyogYnJlYWsgdXAgdGhlIENBVEVPR1JZIGFuZCBQVlIgKi8KIAlpZiAo
KHB0ciA9IHN0cnJjaHIocmV0LT5DQVRFR09SWSwgJy8nKSkgIT0gTlVMTCkgewogCQlyZXQtPlBO
ID0gcHRyKzE7CkBAIC0xNDQsNiArMTY3LDE2IEBAIGVhdF92ZXJzaW9uOgogCQkJcmV0LT5QViA9
IHB0cl90bXArMTsKIAkJCXJldC0+UFZbLTFdID0gJ1wwJzsKIAkJCWdvdG8gZm91bmRfcHY7CisJ
CX0KKworCQkgZm9yIChpPTA7IGk8QVJSX1NJWkUoYXRvbV92ZXJzaW9uX3N0cik7ICsraSkKKwkJ
CWlmICgocHRyX3RtcCA9IHN0cnN0cihyZXQtPlBOLCBhdG9tX3ZlcnNpb25fc3RyW2ldLnZlcnNp
b24pKSAmJiBwdHJfdG1wID09IHJldC0+UE4rc3RybGVuKHJldC0+UE4pLWF0b21fdmVyc2lvbl9z
dHJbaV0udmVyc2lvbl9sZW4pCisJCQkJYnJlYWs7CisKKwkJaWYgKHB0cl90bXAgJiYgKnB0cl90
bXApIHsKKwkJCXJldC0+UFYgPSBwdHJfdG1wKzE7CisJCQlyZXQtPlBWWy0xXSA9ICdcMCc7CisJ
CQlnb3RvIGZvdW5kX3B2OwogCQl9IGVsc2UgewogCQkJLyogYXRvbSBoYXMgbm8gdmVyc2lvbiAq
LwogCQkJcmV0LT5QViA9IHJldC0+UFZSID0gTlVMTDsKZGlmZiAtTmFydXAgcG9ydGFnZS11dGls
cy0yMDA3MDExNS9tYWluLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFpbi5jCi0tLSBw
b3J0YWdlLXV0aWxzLTIwMDcwMTE1L21haW4uYwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAw
MCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFpbi5jCTIwMDctMDEtMTUg
MTk6MjE6NTguMjU3OTQzMTcwICswMTAwCkBAIC03MSw2ICs3MSw3IEBAIGludCByZW1hdGNoKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRpYyBjaGFyICpybXNwYWNlKGNoYXIgKik7
CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9v
dmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxk
X2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQg
cmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAgLTg1LDEzICs4NiwyNCBAQCBzdGF0aWMg
aW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRlbmQgPSAwOwogc3RhdGljIGNoYXIgcmVp
bml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5pdGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwot
c3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0gPSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRp
YyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwotc3RhdGljIGNoYXIgcG9ydHZkYltdID0gInZhci9k
Yi9wa2ciOworc3RhdGljIGNoYXIgcG9ydHZkYltfUV9QQVRIX01BWF0gPSAidmFyL2RiL3BrZyI7
CiBzdGF0aWMgY2hhciBwb3J0Y2FjaGVkaXJbXSA9ICJtZXRhZGF0YS9jYWNoZSI7CiBzdGF0aWMg
Y2hhciBwb3J0cm9vdFtfUV9QQVRIX01BWF0gPSAiLyI7CiBzdGF0aWMgY2hhciBjb25maWdfcHJv
dGVjdFtfUV9QQVRIX01BWF0gPSAiL2V0Yy8iOwogCit0eXBlZGVmIHN0cnVjdCBvdmVybGF5X3Qg
b3ZlcmxheV90Oworc3RydWN0IG92ZXJsYXlfdCB7CisJY2hhciBuYW1lWzY0XTsKKwljaGFyIHBh
dGhbX1FfUEFUSF9NQVhdOworCWNoYXIgY2FjaGVbX1FfUEFUSF9NQVhdOworCXN0cnVjdCBvdmVy
bGF5X3QgKm5leHQ7Cit9OworCitzdGF0aWMgb3ZlcmxheV90ICpmaXJzdF9vdmVybGF5ID0gTlVM
TDsKKy8qIHRlbXBvcmFyeSB3b3JrYXJvdW5kID8gKi8KK3N0YXRpYyBvdmVybGF5X3QgKm92ZXJs
YXlfZ2VudG9vID0gTlVMTDsKKwogY2hhciBwa2dkaXJbNTEyXSA9ICIvdXNyL3BvcnRhZ2UvcGFj
a2FnZXMvIjsKIGNoYXIgcG9ydF90bXBkaXJbNTEyXSA9ICIvdmFyL3RtcC9wb3J0YWdlLyI7CiAK
QEAgLTIwMSwxMCArMjEzLDEwIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGludCBzdGF0dXMsIGNvbnN0
IGNoYXIKIAlmb3IgKGkgPSAwOyBvcHRzW2ldLm5hbWU7ICsraSkgewogCQlhc3NlcnQoaGVscFtp
XSAhPSBOVUxMKTsgLyogdGhpcyBhc3NlcnQgaXMgYSBsaWZlIHNhdmVyIHdoZW4gYWRkaW5nIG5l
dyBhcHBsZXRzLiAqLwogCQlpZiAob3B0c1tpXS5oYXNfYXJnID09IG5vX2FyZ3VtZW50KQotCQkJ
cHJpbnRmKCIgIC0lYywgLS0lLTE1cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKKwkJCXByaW50
ZigiICAtJWMsIC0tJS0xNnMlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5u
YW1lLCBSRUQsIE5PUk0sIF8oaGVscFtpXSkpOwogCQllbHNlCi0JCQlwcmludGYoIiAgLSVjLCAt
LSUtOHMgJXM8YXJnPiVzICVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKKwkJCXByaW50ZigiICAt
JWMsIC0tJS05cyAlczxhcmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAogCQkJCW9wdHNb
aV0ubmFtZSwgREtCTFVFLCBOT1JNLCBSRUQsIE5PUk0sIF8oaGVscFtpXSkpOwogCX0KIAlleGl0
KHN0YXR1cyk7CkBAIC00NjcsMTcgKzQ3OSw4NSBAQCBjaGFyICpzdHJpbmNyX3Zhcihjb25zdCBj
aGFyICpuYW1lLCBjaGFyCiAJcmV0dXJuIChjaGFyICopIHZhbHVlOwogfQogCit2b2lkIGluaXRp
YWxpemVfb3ZlcmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pCit7CisJc2hvcnQgbWVycm9y
ID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpFXSwgZmlsZVtfUV9QQVRIX01BWF0sICpzLCAqcCwgKnQ7
CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKKwlGSUxFICpyZXBvX25hbWVGUDsKKwlzID0gcG9y
dGRpcl9vdmVybGF5OworCisJZmlyc3Rfb3ZlcmxheSA9IHhtYWxsb2Moc2l6ZW9mKCpmaXJzdF9v
dmVybGF5KSk7CisJY3VyX292ZXJsYXkgPSBmaXJzdF9vdmVybGF5OworCisJd2hpbGUgKCpzKSB7
CisJCS8qIGV4Y2VwdCBvbiB0aGUgZmlyc3QgbG9vcCAqLworCQlpZiAocyE9cG9ydGRpcl9vdmVy
bGF5KSB7CisJCQljdXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiAoKmN1cl9vdmVy
bGF5LT5uZXh0KSk7CisJCQljdXJfb3ZlcmxheSA9IGN1cl9vdmVybGF5LT5uZXh0OworCQl9CisJ
CWN1cl9vdmVybGF5LT5uZXh0ID0gTlVMTDsKKworCQlpZiAoKHA9c3RyY2hyKHMsJyAnKSkpCisJ
CQkqcCA9IDA7CisKKwkJc25wcmludGYoY3VyX292ZXJsYXktPnBhdGgsIHNpemVvZihjdXJfb3Zl
cmxheS0+cGF0aCksICIlcyVzIiwgKHN0cmNtcChwb3J0cm9vdCwgIi8iKSA/IHBvcnRyb290IDog
IiIpLCBzKTsKKworCQkvKiBmaW5kIHRoZSBuYW1lIGZvciB0aGUgb3ZlcmxheSAqLworCQlzbnBy
aW50ZihmaWxlLCBzaXplb2YoZmlsZSksICIlcy9wcm9maWxlcy9yZXBvX25hbWUiLCBjdXJfb3Zl
cmxheS0+cGF0aCk7CisKKwkJaWYgKChyZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikpKSB7
CisJCQlpZiAoIShmZ2V0cyhidWYsIHNpemVvZihidWYpLHJlcG9fbmFtZUZQKSkpCisJCQkJbWVy
cm9yKys7CisJCQlybXNwYWNlKGJ1Zik7CisJCQlpZiAoKHQgPSBzdHJjaHIoYnVmLCdcbicpKSkK
KwkJCQkqdCA9IDA7CisJCQlzdHJuY3B5KGN1cl9vdmVybGF5LT5uYW1lLCBidWYsIHNpemVvZihj
dXJfb3ZlcmxheS0+bmFtZSkpOworCisJCQlmY2xvc2UocmVwb19uYW1lRlApOworCQl9IGVsc2UK
KwkJCW1lcnJvcisrOworCisJCWlmIChtZXJyb3IpIHsKKwkJCS8qIGRlbGV0ZSB0cmFpbGluZyAn
LycgKi8KKwkJCXQgPSBjdXJfb3ZlcmxheS0+cGF0aCArIHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0
aCkgLSAxOworCQkJaWYgKCp0ID09ICcvJykKKwkJCQkqdCA9IDA7CisJCQlzdHJuY3B5KGZpbGUs
IGN1cl9vdmVybGF5LT5wYXRoLCBzaXplb2YoZmlsZSkpOworCQkJc3RybmNweShjdXJfb3Zlcmxh
eS0+bmFtZSwgYmFzZW5hbWUoZmlsZSksIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpOworCQkJ
bWVycm9yPTA7CisJCX0KKworCQlpZiAoIXN0cm5jbXAoY3VyX292ZXJsYXktPm5hbWUsICJnZW50
b28iLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkgeworCQkJc25wcmludGYoY3VyX292ZXJs
YXktPmNhY2hlLCBzaXplb2YoY3VyX292ZXJsYXktPmNhY2hlKSwgIiVzLyVzIiwgY3VyX292ZXJs
YXktPnBhdGgsIHBvcnRjYWNoZWRpcik7CisJCQlvdmVybGF5X2dlbnRvbyA9IGN1cl9vdmVybGF5
OworCQl9IGVsc2UKKwkJCXN0cmNweShjdXJfb3ZlcmxheS0+Y2FjaGUsICIvdmFyL2VtcHR5Iik7
CisKKwkJaWYgKHApCisJCQlzID0gcCsxOyAvKiBiZWNhdXNlIHBvcnRkaXJfb3ZlcmxheSBoYXMg
bm8gdHJhaWxpbmcgc3BhY2UgKi8KKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCit9CisKKwogdm9p
ZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiB7CiAJY2hhciBub2NvbG9yID0gMDsKIAlp
bnQgaSwgZjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlGSUxFICpmcDsKKwljaGFyIHRtcF9wb3J0ZGly
W19RX1BBVEhfTUFYXTsKIAljaGFyIGJ1ZltCVUZTSVpFXSwgKnMsICpwOwogCiAJY2hhciBwcm9m
aWxlW19RX1BBVEhfTUFYXSwgcG9ydGFnZV9maWxlW19RX1BBVEhfTUFYXTsKKwljaGFyIHBvcnRk
aXJfb3ZlcmxheVtCVUZTSVpFXSA9ICIiOworCiAJY29uc3QgY2hhciAqZmlsZXNbXSA9IHtwb3J0
YWdlX2ZpbGUsICIvZXRjL21ha2UuZ2xvYmFscyIsICIvZXRjL21ha2UuY29uZiJ9OwogCXR5cGVk
ZWYgZW51bSB7IF9RX0JPT0wsIF9RX1NUUiwgX1FfSVNUUiB9IHZhcl90eXBlczsKKwogCXN0cnVj
dCB7CiAJCWNvbnN0IGNoYXIgKm5hbWU7CiAJCWNvbnN0IHNpemVfdCBuYW1lX2xlbjsKQEAgLTQ5
MSw3ICs1NzEsOCBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJeyJDT05G
SUdfUFJPVEVDVCIsICAgMTQsIF9RX1NUUiwgIGNvbmZpZ19wcm90ZWN0LCBzaXplb2YoY29uZmln
X3Byb3RlY3QpfSwKIAkJeyJOT0NPTE9SIiwgICAgICAgICAgIDcsIF9RX0JPT0wsICZub2NvbG9y
LCAgICAgICAxfSwKIAkJeyJGRUFUVVJFUyIsICAgICAgICAgIDgsIF9RX0lTVFIsIGZlYXR1cmVz
LCAgICAgICBzaXplb2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9R
X1NUUiwgIHBvcnRkaXIsICAgICAgICBzaXplb2YocG9ydGRpcil9LAorCQl7IlBPUlRESVIiLCAg
ICAgICAgICAgNywgX1FfU1RSLCAgdG1wX3BvcnRkaXIsICAgIHNpemVvZih0bXBfcG9ydGRpcil9
LAorCQl7IlBPUlRESVJfT1ZFUkxBWSIsICAxNSwgX1FfSVNUUiwgcG9ydGRpcl9vdmVybGF5LHNp
emVvZihwb3J0ZGlyX292ZXJsYXkpfSwKIAkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgMTUsIF9RX1NU
UiwgIGJpbmhvc3QsICAgICAgICBzaXplb2YoYmluaG9zdCl9LAogCQl7IlBPUlRBR0VfVE1QRElS
IiwgICAxNCwgX1FfU1RSLCAgcG9ydF90bXBkaXIsICAgIHNpemVvZihwb3J0X3RtcGRpcil9LAog
CQl7IlBLR0RJUiIsICAgICAgICAgICAgNiwgX1FfU1RSLCAgcGtnZGlyLCAgICAgICAgIHNpemVv
Zihwa2dkaXIpfSwKQEAgLTU4OSw2ICs2NzAsMTQgQEAgdm9pZCBpbml0aWFsaXplX3BvcnRhZ2Vf
ZW52KHZvaWQpCiAJCW5vX2NvbG9ycygpOwogCWVsc2UKIAkJY29sb3JfcmVtYXAoKTsKKworCXNu
cHJpbnRmKHRtcF9wb3J0ZGlyLCBzaXplb2YodG1wX3BvcnRkaXIpLCAiJXMvJXMiLCAoc3RyY21w
KHBvcnRyb290LCAiLyIpID8gcG9ydHJvb3QgOiAiIiksIHBvcnR2ZGIpOworCXN0cm5jcHkocG9y
dHZkYiwgdG1wX3BvcnRkaXIsIHNpemVvZihwb3J0dmRiKSk7CisJc3RyaW5jcl92YXIoIlBPUlRE
SVJfT1ZFUkxBWSIsIHRtcF9wb3J0ZGlyLCBwb3J0ZGlyX292ZXJsYXksIHNpemVvZihwb3J0ZGly
X292ZXJsYXkpKTsKKworCS8qIG5vdyB3ZSBpbml0aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQg
bGlzdCAqLworCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9vdmVybGF5KTsKKwogfQogCiBl
bnVtIHsKQEAgLTYxNywyMCArNzA2LDI1IEBAIGNvbnN0IGNoYXIgKmluaXRpYWxpemVfZmxhdChp
bnQgY2FjaGVfdHkKIAlpbnQgYSwgYiwgYywgZCwgZSwgaTsKIAlpbnQgZnJhYywgc2VjcywgY291
bnQ7CiAJRklMRSAqZnA7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAogCWEgPSBiID0gYyA9
IGQgPSBlID0gaSA9IDA7CiAJY291bnQgPSBmcmFjID0gc2VjcyA9IDA7CisJY3VyX292ZXJsYXkg
PSBmaXJzdF9vdmVybGF5OwogCiAJY2FjaGVfZmlsZSA9IChjYWNoZV90eXBlID09IENBQ0hFX0VC
VUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURBVEFfRklMRSk7CiAKLQlpZiAo
Y2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZh
aWxlZCIsIHBvcnRkaXIpOwotCQlnb3RvIHJldDsKLQl9Ci0KLQlpZiAoY2FjaGVfdHlwZSA9PSBD
QUNIRV9NRVRBREFUQSAmJiBjaGRpcihwb3J0Y2FjaGVkaXIpICE9IDApIHsKLQkJd2FybnAoImNo
ZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBwb3J0Y2FjaGVk
aXIpOwotCQlnb3RvIHJldDsKKwkvKiBTQU0gcmV2aWV3IHdpdGhvdXQgZ2VudG9vISAqLworCWlm
IChjYWNoZV90eXBlID09IENBQ0hFX01FVEFEQVRBKSB7CisJCWlmIChjaGRpcihvdmVybGF5X2dl
bnRvby0+Y2FjaGUpICE9IDApIHsKKwkJCXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICcl
cycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPmNhY2hlKTsKKwkJCWdvdG8gcmV0OworCQl9CisJ
fSBlbHNlIHsKKwkJaWYgKGNoZGlyKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSAhPSAwKSB7CisJCQl3
YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRo
KTsKKwkJCWdvdG8gcmV0OworCQl9CiAJfQogCiAJaWYgKChzdGF0KGNhY2hlX2ZpbGUsICZzdCkp
ICE9ICgtMSkpCkBAIC02NDUsNjQgKzczOSw4NyBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2Zs
YXQoaW50IGNhY2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9IEVO
T0VOVCkgewotCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNh
Y2hlX2ZpbGUpOworCQkvKiBTQU0gcmV2aWV3IHdpdGhvdXQgZ2VudG9vISAqLworCQl3YXJuZnAo
InVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9m
aWxlKTsKIAkJZ290byByZXQ7CiAJfQogCisJLyogU0FNIHJldmlldyB3aXRob3V0IGdlbnRvbyEg
Ki8KIAlpZiAoKGZwID0gZm9wZW4oY2FjaGVfZmlsZSwgInciKSkgPT0gTlVMTCkgewotCQl3YXJu
ZnAoIm9wZW5pbmcgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBjYWNoZV9maWxlKTsKKwkJd2Fy
bmZwKCJvcGVuaW5nICclcy8lcycgZmFpbGVkIiwgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfRUJVSUxE
ID8gb3ZlcmxheV9nZW50b28tPnBhdGggOiBvdmVybGF5X2dlbnRvby0+Y2FjaGUpLCBjYWNoZV9m
aWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAK
LQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNv
cnQpKSA8IDApCi0JCWdvdG8gcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewotCQlz
dGF0KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7Ci0JCWlmICghU19JU0RJUihzdC5zdF9tb2Rl
KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICctJykg
PT0gTlVMTCkKLQkJCWlmICgoc3RybmNtcChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAidmlydHVhbCIs
IDcpKSAhPSAwKQorCWRvIHsKKwkJc3dpdGNoIChjYWNoZV90eXBlKSB7CisJCWNhc2UgQ0FDSEVf
RUJVSUxEOgorCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5wYXRoKSAhPSAwKSB7CisJCQkJd2Fy
bnAoImNoZGlyIHRvICclcycgZmFpbGVkLCBza2lwcGluZyB0aGUgJXMgcmVwb3NpdG9yeSIsIGN1
cl9vdmVybGF5LT5wYXRoLCBjdXJfb3ZlcmxheS0+bmFtZSk7CiAJCQkJY29udGludWU7Ci0KLQkJ
aWYgKChiID0gc2NhbmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4s
IGFscGhhc29ydCkpIDwgMCkKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENBQ0hFX01FVEFEQVRB
OgorCQkJaWYgKCFzdHJjbXAoY3VyX292ZXJsYXktPmNhY2hlLCAiL3Zhci9lbXB0eSIpKSB7CisJ
CQkJaWYgKHZlcmJvc2UpCisJCQkJCXdhcm5wKCJObyBjYWNoZSBkZWZpbmVkIGZvciB0aGUgJXMg
cmVwb3NpdG9yeSIsIGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxz
ZSBpZiAoY2hkaXIoY3VyX292ZXJsYXktPmNhY2hlKSAhPSAwKSB7CisJCQkJd2FybnAoImNoZGly
IHRvICclcycgZmFpbGVkLCBza2lwcGluZyB0aGUgJXMgcmVwb3NpdG9yeSIsY3VyX292ZXJsYXkt
PmNhY2hlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlicmVh
azsKKwkJfQorCQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVu
LCBhbHBoYXNvcnQpKSA8IDApCiAJCQljb250aW51ZTsKLQkJZm9yIChjID0gMDsgYyA8IGI7IGMr
KykgewotCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJCXNucHJpbnRmKGRlLCBzaXplb2Yo
ZGUpLCAiJXMvJXMiLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1lKTsKKwkJZm9y
IChpID0gMDsgaSA8IGE7IGkrKykgeworCQkJc3RhdChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmc3Qp
OworCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0
cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5VTEwpCisJCQkJaWYgKChzdHJuY21w
KGNhdGVnb3J5W2ldLT5kX25hbWUsICJ2aXJ0dWFsIiwgNykpICE9IDApCisJCQkJCWNvbnRpbnVl
OwogCi0JCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCisJCQlpZiAoKGIgPSBzY2FuZGlyKGNhdGVn
b3J5W2ldLT5kX25hbWUsICZwbiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQogCQkJ
CWNvbnRpbnVlOworCQkJZm9yIChjID0gMDsgYyA8IGI7IGMrKykgeworCQkJCWNoYXIgZGVbX1Ff
UEFUSF9NQVhdOwogCi0JCQlzd2l0Y2ggKGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJV
SUxEOgotCQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQlzbnByaW50ZihkZSwgc2l6
ZW9mKGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSk7CisK
KwkJCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCiAJCQkJCWNvbnRpbnVlOwotCQkJCWJyZWFrOwot
CQkJY2FzZSBDQUNIRV9NRVRBREFUQToKLQkJCQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJ
CQkJZnByaW50ZihmcCwgIiVzXG4iLCBkZSk7Ci0JCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0J
CQl9Ci0JCQlpZiAoKGUgPSBzY2FuZGlyKGRlLCAmZWIsIGZpbHRlcl9oaWRkZW4sIGFscGhhc29y
dCkpIDwgMCkKLQkJCQljb250aW51ZTsKLQkJCWZvciAoZCA9IDA7IGQgPCBlOyBkKyspIHsKLQkJ
CQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykpICE9IE5VTEwpCi0JCQkJCWlm
IChzdHJjbXAocCwgIi5lYnVpbGQiKSA9PSAwKSB7Ci0JCQkJCQljb3VudCsrOwotCQkJCQkJZnBy
aW50ZihmcCwgIiVzLyVzLyVzXG4iLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1l
LCBlYltkXS0+ZF9uYW1lKTsKLQkJCQkJfQorCisJCQkJc3dpdGNoIChjYWNoZV90eXBlKSB7CisJ
CQkJY2FzZSBDQUNIRV9FQlVJTEQ6CisJCQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJ
CQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQljYXNlIENBQ0hFX01FVEFEQVRBOgorCQkJ
CQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCQkJCWZwcmludGYoZnAsICIlczo6JXNcbiIs
IGRlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQkJaWYgKChlID0gc2NhbmRpcihkZSwgJmViLCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNv
cnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoZCA9IDA7IGQgPCBlOyBkKyspIHsK
KwkJCQkJaWYgKChwID0gc3RycmNocihlYltkXS0+ZF9uYW1lLCAnLicpKSAhPSBOVUxMKQorCQkJ
CQkJaWYgKHN0cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsKKwkJCQkJCQljb3VudCsrOworCQkJ
CQkJCWZwcmludGYoZnAsICIlcy8lcy8lczo6JXNcbiIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBu
W2NdLT5kX25hbWUsIGViW2RdLT5kX25hbWUsIGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJCQkJCX0K
KwkJCQl9CisJCQkJd2hpbGUgKGQtLSkgZnJlZShlYltkXSk7CisJCQkJZnJlZShlYik7CiAJCQl9
Ci0JCQl3aGlsZSAoZC0tKSBmcmVlKGViW2RdKTsKLQkJCWZyZWUoZWIpOworCQkJd2hpbGUgKGIt
LSkgZnJlZShwbltiXSk7CisJCQlmcmVlKHBuKTsKIAkJfQotCQl3aGlsZSAoYi0tKSBmcmVlKHBu
W2JdKTsKLQkJZnJlZShwbik7Ci0JfQorCX0gd2hpbGUgKChjdXJfb3ZlcmxheSA9IGN1cl9vdmVy
bGF5LT5uZXh0KSk7CisKIAlmY2xvc2UoZnApOwogCXdoaWxlIChhLS0pIGZyZWUoY2F0ZWdvcnlb
YV0pOwogCWZyZWUoY2F0ZWdvcnkpOwpAQCAtNzIxLDcgKzgzOCw3IEBAIGNvbnN0IGNoYXIgKmlu
aXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAogCXdhcm4oIkZpbmlzaGVkICV1IGVudHJpZXMg
aW4gJWQuJTA2ZCBzZWNvbmRzIiwgY291bnQsIHNlY3MsIGZyYWMpOwogCWlmIChzZWNzID4gMTAw
KQotCQl3YXJuKCJZb3Ugc2hvdWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVtIHN1Y2gg
YXMgcmVpc2VyZnMgZm9yIFBPUlRESVI9JyVzJyIsIHBvcnRkaXIpOworCQl3YXJuKCJZb3Ugc2hv
dWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVtIHN1Y2ggYXMgcmVpc2VyZnMgZm9yIHJl
cG9zaXRvcmllcyIpOwogcmV0OgogCXJldHVybiBjYWNoZV9maWxlOwogfQpAQCAtNzMwLDggKzg0
Nyw4IEBAIHJldDoKIAogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCkKIHsKLQlp
ZiAoKGNoZGlyKHBvcnRkaXIpKSAhPSAwKSB7Ci0JCXdhcm5wKCJjaGRpciB0byBQT1JURElSICcl
cycgZmFpbGVkIiwgcG9ydGRpcik7CisJaWYgKChjaGRpcihmaXJzdF9vdmVybGF5LT5wYXRoKSkg
IT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGZpcnN0X292
ZXJsYXktPnBhdGgpOwogCQlyZXR1cm47CiAJfQogCXVubGluayhDQUNIRV9FQlVJTERfRklMRSk7
CkBAIC03NjYsOCArODgzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgewogfSBwb3J0YWdlX2NhY2hlOwog
CiB2b2lkIGNhY2hlX2ZyZWUocG9ydGFnZV9jYWNoZSAqY2FjaGUpOwotcG9ydGFnZV9jYWNoZSAq
Y2FjaGVfcmVhZF9maWxlKGNvbnN0IGNoYXIgKmZpbGUpOwotcG9ydGFnZV9jYWNoZSAqY2FjaGVf
cmVhZF9maWxlKGNvbnN0IGNoYXIgKmZpbGUpCitwb3J0YWdlX2NhY2hlICpjYWNoZV9yZWFkX2Zp
bGUoY2hhciAqZmlsZSk7Citwb3J0YWdlX2NhY2hlICpjYWNoZV9yZWFkX2ZpbGUoY2hhciAqZmls
ZSkKIHsKIAlzdHJ1Y3Qgc3RhdCBzOwogCWNoYXIgKnB0cjsKQEAgLTc3NSw4ICs4OTIsMTIgQEAg
cG9ydGFnZV9jYWNoZSAqY2FjaGVfcmVhZF9maWxlKGNvbnN0IGNoYQogCXBvcnRhZ2VfY2FjaGUg
KnJldCA9IE5VTEw7CiAJc2l6ZV90IGxlbjsKIAorCWlmICgocHRyID0gc3Ryc3RyKGZpbGUsICI6
OiIpKSkKKwkJKnB0ciA9IDA7CiAJaWYgKChmID0gZm9wZW4oZmlsZSwgInIiKSkgPT0gTlVMTCkK
IAkJZ290byBlcnI7CisJaWYgKHB0cikKKwkJKnB0ciA9ICc6JzsKIAogCWlmIChmc3RhdChmaWxl
bm8oZiksICZzKSAhPSAwKQogCQlnb3RvIGVycjsKQEAgLTEwMDQsMTAgKzExMjUsMjAgQEAgZnVj
a2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUgb3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9v
dmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9pZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlf
dCAqb3ZlcmxheSkKK3sKKwlpZiAob3ZlcmxheS0+bmV4dCkKKwkJZnJlZV9vdmVybGF5cyhvdmVy
bGF5LT5uZXh0KTsKKwlmcmVlKG92ZXJsYXkpOworfQorCiB2b2lkIGNsZWFudXAoKQogewogCXJl
aW5pdGlhbGl6ZV9hc19uZWVkZWQoKTsKIAlmcmVlX3NldHModmlydHVhbHMpOworCWZyZWVfb3Zl
cmxheXMoZmlyc3Rfb3ZlcmxheSk7CiAJZmNsb3NlKHN0ZGVycik7CiB9CiAKZGlmZiAtTmFydXAg
cG9ydGFnZS11dGlscy0yMDA3MDExNS9tYW4vcS4xIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3
L21hbi9xLjEKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvbWFuL3EuMQkyMDA3LTAxLTE1IDE5
OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFu
L3EuMQkyMDA3LTAxLTE1IDE5OjIxOjU4LjI2NTk0MTk1MCArMDEwMApAQCAtNjEsMTEgKzYxLDE0
IEBAIHF1c2UgPHVzZWZsYWc+CiBxeHBhayA8bWlzYyBhcmdzPgogOiBtYW5pcHVsYXRlIHhwYWsg
YXJjaGl2ZXMKIC5QUAotT3B0aW9uczogXGZCXC1baXJtdnFDaFZdXGZSCitPcHRpb25zOiBcZkJc
LVtpbHJtdnFDaFZdXGZSCiAuVFAKIFxmQlwtaVxmUiwgXGZCXC1cLWluc3RhbGxcZlIKICogSW5z
dGFsbCBzeW1saW5rcyBmb3IgYXBwbGV0cwogLlRQCitcZkJcLWxcZlIsIFxmQlwtXC1sc1wtb3Zl
cmxheXNcZlIKKyogTGlzdCBjb25maWd1cmVkIG92ZXJsYXlzCisuVFAKIFxmQlwtclxmUiwgXGZC
XC1cLXJlaW5pdGlhbGl6ZVxmUgogKiBSZWluaXRpYWxpemUgZWJ1aWxkIGNhY2hlCiAuVFAKZGlm
ZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9tYW4vcWdyZXAuMSBwb3J0YWdlLXV0aWxz
LTIwMDcwMTE1Lm5ldy9tYW4vcWdyZXAuMQotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS9tYW4v
cWdyZXAuMQkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11
dGlscy0yMDA3MDExNS5uZXcvbWFuL3FncmVwLjEJMjAwNy0wMS0xNSAxOToyMTo1OC4yNzM5NDA3
MjkgKzAxMDAKQEAgLTE2LDYgKzE2LDExIEBAIE9wdGlvbnM6IFxmQlwtW0lpSGNldnFDaFZdXGZS
CiBcZkJcLUhcZlIsIFxmQlwtXC13aXRoXC1maWxlbmFtZVxmUgogKiBQcmludCB0aGUgZmlsZW5h
bWUgZm9yIGVhY2ggbWF0Y2gKIC5UUAorXGZCXC1vXGZSLCBcZkJcLVwtb3ZlcmxheVxmUgorPGFy
Zz4KKy5CUgorICogT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheQorLlRQCiBcZkJcLWNc
ZlIsIFxmQlwtXC1jb3VudFxmUgogKiBPbmx5IHByaW50IGEgY291bnQgb2YgbWF0Y2hpbmcgbGlu
ZXMgcGVyIEZJTEUKIC5UUApkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L21hbi9x
c2VhcmNoLjEgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFuL3FzZWFyY2guMQotLS0gcG9y
dGFnZS11dGlscy0yMDA3MDExNS9tYW4vcXNlYXJjaC4xCTIwMDctMDEtMTUgMTk6MjA6MTIuMDAw
MDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9tYW4vcXNlYXJjaC4x
CTIwMDctMDEtMTUgMTk6MjE6NTguMjgyOTM5MzU3ICswMTAwCkBAIC01LDcgKzUsNyBAQCBxc2Vh
cmNoIFwtIHNlYXJjaCBwa2duYW1lL2Rlc2MKIC5CIHFzZWFyY2gKIFxmSTxyZWdleD5cZlIKIC5T
SCBERVNDUklQVElPTgotT3B0aW9uczogXGZCXC1bYWNzU05IdnFDaFZdXGZSCitPcHRpb25zOiBc
ZkJcLVthY29cZlI6cHNTTkh2cUNoVl0KIC5UUAogXGZCXC1hXGZSLCBcZkJcLVwtYWxsXGZSCiAq
IExpc3QgdGhlIGRlc2NyaXB0aW9ucyBvZiBldmVyeSBwYWNrYWdlIGluIHRoZSBjYWNoZQpAQCAt
MTMsNiArMTMsMTQgQEAgT3B0aW9uczogXGZCXC1bYWNzU05IdnFDaFZdXGZSCiBcZkJcLWNcZlIs
IFxmQlwtXC1jYWNoZVxmUgogKiBVc2UgdGhlIHBvcnRhZ2UgY2FjaGUKIC5UUAorXGZCXC1vXGZS
LCBcZkJcLVwtb3ZlcmxheVxmUgorPGFyZz4KKy5CUgorICogU2VhcmNoIG9ubHkgaW4gdGhlIDxh
cmc+IG92ZXJsYXkKKy5UUAorXGZCXC1wXGZSLCBcZkJcLVwtc2hvd1wtcGF0aFxmUgorKiBTaG93
IHRoZSBwYXRoIHRvIHRoZSBlYnVpbGQKKy5UUAogXGZCXC1zXGZSLCBcZkJcLVwtc2VhcmNoXGZS
CiAqIFJlZ2V4IHNlYXJjaCBwYWNrYWdlIGJhc2VuYW1lcwogLlRQCmRpZmYgLU5hcnVwIHBvcnRh
Z2UtdXRpbHMtMjAwNzAxMTUvbWFuL3F1c2UuMSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9t
YW4vcXVzZS4xCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L21hbi9xdXNlLjEJMjAwNy0wMS0x
NSAxOToyMDoxMi4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3
L21hbi9xdXNlLjEJMjAwNy0wMS0xNSAxOToyMTo1OC4yOTA5MzgxMzcgKzAxMDAKQEAgLTUsNyAr
NSw3IEBAIHF1c2UgXC0gZmluZCBwa2dzIHVzaW5nIHVzZWZsYWdzCiAuQiBxdXNlCiBcZkk8dXNl
ZmxhZz5cZlIKIC5TSCBERVNDUklQVElPTgotT3B0aW9uczogXGZCXC1bZWF2S0xERjpOdnFDaFZd
XGZSCitPcHRpb25zOiBcZkJcLVtlYW9cZlI6dktMREY6TnZxQ2hWXQogLlRQCiBcZkJcLWVcZlIs
IFxmQlwtXC1leGFjdFxmUgogKiBTaG93IGV4YWN0IG5vbiByZWdleHAgbWF0Y2hpbmcgdXNpbmcg
c3RyY21wCkBAIC0xMyw2ICsxMywxMSBAQCBPcHRpb25zOiBcZkJcLVtlYXZLTERGOk52cUNoVl1c
ZlIKIFxmQlwtYVxmUiwgXGZCXC1cLWFsbFxmUgogKiBTaG93IGFubm95aW5nIHRoaW5ncyBpbiBJ
VVNFCiAuVFAKK1xmQlwtb1xmUiwgXGZCXC1cLW92ZXJsYXlcZlIKKzxhcmc+CisuQlIKKyAqIE9u
bHkgY29uc2lkZXIgdGhlIDxhcmc+IG92ZXJsYXkKKy5UUAogXGZCXC1LXGZSLCBcZkJcLVwta2V5
d29yZHNcZlIKICogVXNlIHRoZSBLRVlXT1JEUyB2cyBJVVNFCiAuVFAKZGlmZiAtTmFydXAgcG9y
dGFnZS11dGlscy0yMDA3MDExNS9xYXRvbS5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3Fh
dG9tLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvcWF0b20uYwkyMDA3LTAxLTE1IDE5OjIw
OjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWF0b20u
YwkyMDA3LTAxLTE1IDE5OjIxOjU4LjI5OTkzNjc2NCArMDEwMApAQCAtNjAsNiArNjAsNyBAQCBp
bnQgcWF0b21fbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJcHJpbnRmKCIgciVpIiwg
YXRvbS0+UFJfaW50KTsKIAkJCWlmICh2ZXJib3NlID4gMSkKIAkJCQlwcmludGYoIiAlYyIsIChh
dG9tLT5sZXR0ZXIgPyA6ICctJykpOworCQkJcHJpbnRmKCIgJXMiLCBhdG9tLT5PVkVSTEFZKTsK
IAkJCXB1dGNoYXIoJ1xuJyk7CiAJCQlhdG9tX2ltcGxvZGUoYXRvbSk7CiAJCX0KZGlmZiAtTmFy
dXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9xLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcv
cS5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L3EuYwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAw
MDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcS5jCTIwMDctMDEt
MTUgMTk6MjE6NTguMzA5OTM1MjM4ICswMTAwCkBAIC03LDE1ICs3LDE3IEBACiAgKiBDb3B5cmln
aHQgMjAwNS0yMDA2IE1pa2UgRnJ5c2luZ2VyICAtIDx2YXBpZXJAZ2VudG9vLm9yZz4KICAqLwog
Ci0jZGVmaW5lIFFfRkxBR1MgImlybSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFfRkxBR1MgImls
cm0iIENPTU1PTl9GTEFHUwogc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcV9sb25nX29wdHNb
XSA9IHsKIAl7Imluc3RhbGwiLCAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LAorCXsibHMt
b3ZlcmxheXMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdsJ30sCiAJeyJyZWluaXRpYWxpemUiLCBu
b19hcmd1bWVudCwgTlVMTCwgJ3InfSwKIAl7Im1ldGFjYWNoZSIsICAgIG5vX2FyZ3VtZW50LCBO
VUxMLCAnbSd9LAogCUNPTU1PTl9MT05HX09QVFMKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcV9v
cHRzX2hlbHBbXSA9IHsKIAkiSW5zdGFsbCBzeW1saW5rcyBmb3IgYXBwbGV0cyIsCisJIkxpc3Qg
Y29uZmlndXJlZCBvdmVybGF5cyIsCiAJIlJlaW5pdGlhbGl6ZSBlYnVpbGQgY2FjaGUiLAogCSJS
ZWluaXRpYWxpemUgbWV0YWRhdGEgY2FjaGUiLAogCUNPTU1PTl9PUFRTX0hFTFAKQEAgLTcwLDYg
KzcyLDcgQEAgaW50IHFfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaW50IGk7CiAJY2hh
ciAqcDsKIAlBUFBMRVQgZnVuYzsKKwlvdmVybGF5X3QgKiBjdXJfb3ZlcmxheTsKIAogCWlmIChh
cmdjID09IDApCiAJCXJldHVybiAxOwpAQCAtODksNiArOTIsMTcgQEAgaW50IHFfbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHEpCiAJCWNhc2UgJ20n
OiByZWluaXRpYWxpemVfbWV0YWNhY2hlID0gMTsgYnJlYWs7CiAJCWNhc2UgJ3InOiByZWluaXRp
YWxpemUgPSAxOyBicmVhazsKKwkJY2FzZSAnbCc6IHsKKwkJCXByaW50ZigiXG4lc092ZXJsYXko
cykgOiVzXG5cbiIsIEdSRUVOLCBOT1JNKTsKKwkJCWN1cl9vdmVybGF5PWZpcnN0X292ZXJsYXk7
CisJCQlkbyB7CisJCQkJcHJpbnRmKCIgICBOYW1lIDogJXMlLTIwLjIwcyVzIFx0bG9jYXRpb24g
OiAlcyUtNjAuNjBzJXMgXHRtZXRhZGF0YSA6ICVzJS02MC42MHMlc1xuIiwKKwkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICBDWUFOLCBjdXJfb3ZlcmxheS0+bmFtZSwgTk9STSwgQ1lBTiwgY3Vy
X292ZXJsYXktPnBhdGgsIE5PUk0sCisJCQkJCQkJQ1lBTiwgY3VyX292ZXJsYXktPmNhY2hlLCBO
T1JNKTsKKwkJCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQkJ
ZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJCXJldHVybiAwOworCQkJfQogCQljYXNlICdpJzogewog
CQkJY2hhciBidWZbX1FfUEFUSF9NQVhdOwogCQkJLyogYWx3YXlzIGJ6ZXJvIGEgYnVmZmVyIGJl
Zm9yZSB1c2luZyByZWFkbGluaygpICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAx
MTUvcWNhY2hlLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWNhY2hlLmMKLS0tIHBvcnRh
Z2UtdXRpbHMtMjAwNzAxMTUvcWNhY2hlLmMJMjAwNy0wMS0xNSAxOToyMDoxMi4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FjYWNoZS5jCTIwMDctMDEtMTUg
MTk6MjE6NTguMzE3OTM0MDE4ICswMTAwCkBAIC01MTIsMTAgKzUxMiwxMCBAQCBpbnQgcWNhY2hl
X3RyYXZlcnNlKHZvaWQgKCpmdW5jKShxY2FjaGVfCiAJaW50IGksIGosIGssIGxlbiwgbnVtX2Nh
dCwgbnVtX3BrZywgbnVtX2VidWlsZDsKIAlzdHJ1Y3QgZGlyZWN0ICoqY2F0ZWdvcmllcywgKipw
YWNrYWdlcywgKiplYnVpbGRzOwogCi0JbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FD
SEVfRURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCWxlbiA9IHNpemVvZihjaGFyKSAqIChz
dHJsZW4oUUNBQ0hFX0VEQikgKyBzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgMSk7CiAJ
Y2F0cGF0aCA9IHhtYWxsb2MobGVuKTsKIAltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQlzbnBy
aW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgcG9ydGRpcik7CisJc25wcmlu
dGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9FREIsIG92ZXJsYXlfZ2VudG9vLT5wYXRo
KTsKIAogCWlmICgtMSA9PSAobnVtX2NhdCA9IHNjYW5kaXIoY2F0cGF0aCwgJmNhdGVnb3JpZXMs
IHFjYWNoZV9maWxlX3NlbGVjdCwgYWxwaGFzb3J0KSkpIHsKIAkJZXJyKCIlcyAlcyIsIGNhdHBh
dGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC01MjcsMTAgKzUyNywxMCBAQCBpbnQgcWNhY2hlX3Ry
YXZlcnNlKHZvaWQgKCpmdW5jKShxY2FjaGVfCiAKIAkvKiB0cmF2ZXJzZSBjYXRlZ29yaWVzICov
CiAJZm9yIChpID0gMDsgaSA8IG51bV9jYXQ7IGkrKykgewotCQlsZW4gPSBzaXplb2YoY2hhcikg
KiAoc3RybGVuKHBvcnRkaXIpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+
ZF9uYW1lKSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92ZXJsYXlfZ2Vu
dG9vLT5wYXRoKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkg
KyAxKTsKIAkJcGtncGF0aCA9IHhtYWxsb2MobGVuKTsKIAkJbWVtc2V0KHBrZ3BhdGgsIDAsIGxl
bik7Ci0JCXNucHJpbnRmKHBrZ3BhdGgsIGxlbiwgIiVzLyVzIiwgcG9ydGRpciwgY2F0ZWdvcmll
c1tpXS0+ZF9uYW1lKTsKKwkJc25wcmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBvdmVybGF5
X2dlbnRvby0+cGF0aCwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKIAogCQlpZiAoLTEgPT0gKG51
bV9wa2cgPSBzY2FuZGlyKHBrZ3BhdGgsICZwYWNrYWdlcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBh
bHBoYXNvcnQpKSkgewogCQkJd2FybigiJXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykp
OwpAQCAtNTUyLDEwICs1NTIsMTAgQEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYyko
cWNhY2hlXwogCiAJCS8qIHRyYXZlcnNlIHBhY2thZ2VzICovCiAJCWZvciAoaiA9IDA7IGogPCBu
dW1fcGtnOyBqKyspIHsKLQkJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikg
KyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIv
IikgKyBzdHJsZW4ocGFja2FnZXNbal0tPmRfbmFtZSkgKyAxKTsKKwkJCWxlbiA9IHNpemVvZihj
aGFyKSAqIChzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvIikgKyBzdHJs
ZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIHN0cmxlbigiLyIpICsgc3RybGVuKHBhY2thZ2Vz
W2pdLT5kX25hbWUpICsgMSk7CiAJCQllYnVpbGRwYXRoID0geG1hbGxvYyhsZW4pOwogCQkJbWVt
c2V0KGVidWlsZHBhdGgsIDAsIGxlbik7Ci0JCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIl
cy8lcy8lcyIsIHBvcnRkaXIsIGNhdGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRf
bmFtZSk7CisJCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIG92ZXJsYXlf
Z2VudG9vLT5wYXRoLCBjYXRlZ29yaWVzW2ldLT5kX25hbWUsIHBhY2thZ2VzW2pdLT5kX25hbWUp
OwogCiAJCQlpZiAoLTEgPT0gKG51bV9lYnVpbGQgPSBzY2FuZGlyKGVidWlsZHBhdGgsICZlYnVp
bGRzLCBxY2FjaGVfZWJ1aWxkX3NlbGVjdCwgcWNhY2hlX3ZlcmNtcCkpKSB7CiAJCQkJd2Fybigi
JXMgJXMiLCBlYnVpbGRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNzczLDEwICs3NzMsMTAg
QEAgdm9pZCBxY2FjaGVfc3RhdHMocWNhY2hlX2RhdGEgKmRhdGEpCiAJCWZvciAoaSA9IDA7IGFy
Y2hsaXN0W2ldOyBpKyspCiAJCQlhcmNoaXRlY3R1cmVzKys7CiAKLQkJbGVuID0gc2l6ZW9mKGNo
YXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCQlsZW4g
PSBzaXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKG92ZXJsYXlfZ2Vu
dG9vLT5wYXRoKSArIDEpOwogCQljYXRwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQoY2F0
cGF0aCwgMCwgbGVuKTsKLQkJc25wcmludGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9F
REIsIHBvcnRkaXIpOworCQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VE
Qiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCiAJCWlmICgtMSA9PSAobnVtY2F0ID0gc2NhbmRp
cihjYXRwYXRoLCAmY2F0ZWdvcmllcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkg
ewogCQkJZXJyKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC05MjgsMTEg
KzkyOCwxMSBAQCBpbnQgcWNhY2hlX2luaXQoKQogCWNoYXIgKmZpbGVuYW1lOwogCXVuc2lnbmVk
IGludCBsZW47CiAKLQlsZW4gICAgICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikg
KyBzdHJsZW4oIi9wcm9maWxlcy9hcmNoLmxpc3QiKSArIDEpOworCWxlbiAgICAgID0gc2l6ZW9m
KGNoYXIpICogKHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi9wcm9maWxl
cy9hcmNoLmxpc3QiKSArIDEpOwogCWZpbGVuYW1lID0geG1hbGxvYyhsZW4pOwogCiAJbWVtc2V0
KGZpbGVuYW1lLCAwLCBsZW4pOwotCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxl
cy9hcmNoLmxpc3QiLCBwb3J0ZGlyKTsKKwlzbnByaW50ZihmaWxlbmFtZSwgbGVuLCAiJXMvcHJv
ZmlsZXMvYXJjaC5saXN0Iiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCiAJaWYgKE5VTEwgPT0g
KGFyY2hsaXN0ID0gcWNhY2hlX3JlYWRfbGluZXMoZmlsZW5hbWUpKSkgewogCQlmcmVlKGZpbGVu
YW1lKTsKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9xY2hlY2suYyBwb3J0YWdl
LXV0aWxzLTIwMDcwMTE1Lm5ldy9xY2hlY2suYwotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS9x
Y2hlY2suYwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11
dGlscy0yMDA3MDExNS5uZXcvcWNoZWNrLmMJMjAwNy0wMS0xNSAxOToyMTo1OC4zMjY5MzI2NDUg
KzAxMDAKQEAgLTQ5LDEwICs0OSwxMCBAQCBpbnQgcWNoZWNrX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCWlmICgoYXJnYyA9PSBvcHRpbmQpICYmICFzZWFyY2hfYWxsKQogCQlxY2hlY2tf
dXNhZ2UoRVhJVF9GQUlMVVJFKTsKIAotCWlmIChjaGRpcihwb3J0cm9vdCkpCi0JCWVycnAoImNv
dWxkIG5vdCBjaGRpciglcykgZm9yIFJPT1QiLCBwb3J0cm9vdCk7CisJaWYgKGNoZGlyKHBvcnR2
ZGIpKQorCQllcnJwKCJjb3VsZCBub3QgY2hkaXIoJXMpIGZvciBWREIiLCBwb3J0dmRiKTsKIAot
CWlmIChjaGRpcihwb3J0dmRiKSAhPSAwIHx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwp
CisJaWYgKChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCiAJCXJldHVybiBFWElUX0ZBSUxV
UkU7CiAKIAkvKiBvcGVuIC92YXIvZGIvcGtnICovCkBAIC04NCw3ICs4NCw3IEBAIGludCBxY2hl
Y2tfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWNvbnRpbnVlOwogCQkJfQogCi0J
CQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy9DT05URU5UUyIsIHBvcnRy
b290LCBwb3J0dmRiLAorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzLyVzL0NP
TlRFTlRTIiwgcG9ydHZkYiwKIAkJCSAgICAgICAgIGRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1l
KTsKIAkJCWlmICgoZnAgPSBmb3BlbihidWYsICJyIikpID09IE5VTEwpCiAJCQkJY29udGludWU7
CkBAIC0xOTksNyArMTk5LDcgQEAgZnJlZV9hbmRfbW9yZV9oYXNoOgogCQkJZmNsb3NlKGZwKTsK
IAkJCWlmIChxY191cGRhdGUpIHsKIAkJCQlmY2xvc2UoZnB4KTsKLQkJCQlzbnByaW50ZihidWYs
IHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy9DT05URU5UUyIsIHBvcnRyb290LCBwb3J0dmRiLAor
CQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcy8lcy9DT05URU5UUyIsIHBvcnR2
ZGIsCiAJCQkJCWRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKTsKIAkJCQlzdHJjcHkoYnVmZmVy
LCBidWYpOwogCQkJCXN0cm5jYXQoYnVmZmVyLCAifiIsIHNpemVvZihidWZmZXIpKTsKZGlmZiAt
TmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9xZGVwZW5kcy5jIHBvcnRhZ2UtdXRpbHMtMjAw
NzAxMTUubmV3L3FkZXBlbmRzLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvcWRlcGVuZHMu
YwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0y
MDA3MDExNS5uZXcvcWRlcGVuZHMuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjMzNTkzMTI3MyArMDEw
MApAQCAtMzU5LDEwICszNTksMTAgQEAgaW50IHFkZXBlbmRzX21haW5fdmRiKGNvbnN0IGNoYXIg
KmRlcGVuZAogCWNoYXIgZGVwZW5kWzE2Mzg0XSwgdXNlWzgxOTJdOwogCWRlcF9ub2RlICpkZXBf
dHJlZTsKIAotCWlmIChjaGRpcihwb3J0cm9vdCkpCi0JCWVycnAoImNvdWxkIG5vdCBjaGRpcigl
cykgZm9yIFJPT1QiLCBwb3J0cm9vdCk7CisJaWYgKGNoZGlyKHBvcnR2ZGIpKQorCQllcnJwKCJj
b3VsZCBub3QgY2hkaXIoJXMpIGZvciBWREIiLCBwb3J0dmRiKTsKIAotCWlmIChjaGRpcihwb3J0
dmRiKSAhPSAwIHx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCisJaWYgKChkaXIgPSBv
cGVuZGlyKCIuIikpID09IE5VTEwpCiAJCXJldHVybiBFWElUX0ZBSUxVUkU7CiAKIAkvKiBvcGVu
IC92YXIvZGIvcGtnICovCkBAIC0zOTAsNyArMzkwLDcgQEAgaW50IHFkZXBlbmRzX21haW5fdmRi
KGNvbnN0IGNoYXIgKmRlcGVuZAogCQkJCWNvbnRpbnVlOwogCiAJCQlJRl9ERUJVRyh3YXJuKCJt
YXRjaGVkICVzLyVzIiwgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpKTsKLQkJCXNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVzLyVzIiwgcG9ydHJvb3QsIHBvcnR2ZGIsCisJ
CQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMvJXMvJXMiLCBwb3J0dmRiLAogCQkJ
ICAgICAgICAgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUsIGRlcGVuZF9maWxlKTsKIAogCQkJ
LyogPj1wb3J0YWdlLTIuMV9wcmUzIHdvbnQgZW5zdXJlIHRoZXNlIGZpbGVzIGFsd2F5cyBleGlz
dC4KQEAgLTQyMSw3ICs0MjEsNyBAQCBpbnQgcWRlcGVuZHNfbWFpbl92ZGIoY29uc3QgY2hhciAq
ZGVwZW5kCiAJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczogIiwgQk9MRCwgZGVudHJ5LT5kX25hbWUs
IEJMVUUsIGRlLT5kX25hbWUsIE5PUk0pOwogCQkJfQogCi0JCQlzbnByaW50ZihidWYsIHNpemVv
ZihidWYpLCAiJXMlcy8lcy8lcy9VU0UiLCBwb3J0cm9vdCwgcG9ydHZkYiwKKwkJCXNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcy8lcy9VU0UiLCBwb3J0dmRiLAogCQkJICAgICAgICAg
ZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpOwogCiAJCQlpZiAoYWNjZXNzKGJ1ZiwgUl9PSykg
IT0gMCkgewpAQCAtNDY4LDEwICs0NjgsMTAgQEAgaW50IHFkZXBlbmRzX3ZkYl9kZWVwKGNvbnN0
IGNoYXIgKmRlcGVuZAogCWNoYXIgZGVwZW5kWzE2Mzg0XSwgdXNlWzgxOTJdOwogCWRlcF9ub2Rl
ICpkZXBfdHJlZTsKIAotCWlmIChjaGRpcihwb3J0cm9vdCkpCi0JCWVycnAoImNvdWxkIG5vdCBj
aGRpciglcykgZm9yIFJPT1QiLCBwb3J0cm9vdCk7CisJaWYgKGNoZGlyKHBvcnR2ZGIpKQorCQll
cnJwKCJjb3VsZCBub3QgY2hkaXIoJXMpIGZvciBWREIiLCBwb3J0dmRiKTsKIAotCWlmIChjaGRp
cihwb3J0dmRiKSAhPSAwIHx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCisJaWYgKChk
aXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCiAJCXJldHVybiBFWElUX0ZBSUxVUkU7CiAKIAkv
KiBvcGVuIC92YXIvZGIvcGtnICovCkBAIC00ODcsNyArNDg3LDcgQEAgaW50IHFkZXBlbmRzX3Zk
Yl9kZWVwKGNvbnN0IGNoYXIgKmRlcGVuZAogCQkJCWNvbnRpbnVlOwogCiAJCQlJRl9ERUJVRyh3
YXJuKCJtYXRjaGVkICVzLyVzIiwgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpKTsKLQkJCXNu
cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVzLyVzIiwgcG9ydHJvb3QsIHBvcnR2
ZGIsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMvJXMvJXMiLCBwb3J0dmRi
LAogCQkJICAgICAgICAgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUsIGRlcGVuZF9maWxlKTsK
IAogCQkJaWYgKGFjY2VzcyhidWYsIFJfT0spICE9IDApCkBAIC01MDQsNyArNTA0LDcgQEAgaW50
IHFkZXBlbmRzX3ZkYl9kZWVwKGNvbnN0IGNoYXIgKmRlcGVuZAogCQkJSUZfREVCVUcocHV0cyhk
ZXBlbmQpKTsKIAkJCUlGX0RFQlVHKGRlcF9kdW1wX3RyZWUoZGVwX3RyZWUpKTsKIAotCQkJc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMvJXMvJXMvVVNFIiwgcG9ydHJvb3QsIHBvcnR2
ZGIsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMvJXMvVVNFIiwgcG9ydHZk
YiwKIAkJCSAgICAgICAgIGRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKTsKIAkJCWFzc2VydChl
YXRfZmlsZShidWYsIHVzZSwgc2l6ZW9mKHVzZSkpID09IDEpOwogCQkJZm9yIChwdHIgPSB1c2U7
ICpwdHI7ICsrcHRyKQpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L3FmaWxlLmMg
cG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWZpbGUuYwotLS0gcG9ydGFnZS11dGlscy0yMDA3
MDExNS9xZmlsZS5jCTIwMDctMDEtMTUgMTk6MjA6MTIuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0
YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xZmlsZS5jCTIwMDctMDEtMTUgMTk6MjE6NTguMzM2OTMx
MTIwICswMTAwCkBAIC02MDAsMTYgKzYwMCwxNCBAQCBpbnQgcWZpbGVfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCWlmIChuYl9vZl9xdWVyaWVzIDwgMCkKIAkJCWdvdG8gZXhpdDsKIAot
CQlpZiAoY2hkaXIocG9ydHJvb3QpCi0JCQkJfHwgY2hkaXIocG9ydHZkYikgIT0gMAotCQkJCXx8
IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpIHsKLQkJCXdhcm5wKCJjb3VsZCBub3QgY2hk
aXIoUk9PVC8lcykgZm9yIGluc3RhbGxlZCBwYWNrYWdlcyBkYXRhYmFzZSIsIHBvcnR2ZGIpOwor
CQlpZiAoY2hkaXIocG9ydHZkYikgIT0gMCB8fCAoZGlyID0gb3BlbmRpcigiLiIpKSA9PSBOVUxM
KSB7CisJCQl3YXJucCgiY291bGQgbm90IGNoZGlyKCVzKSBmb3IgaW5zdGFsbGVkIHBhY2thZ2Vz
IGRhdGFiYXNlIiwgcG9ydHZkYik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAogCQkvKiBJdGVyYXRp
b24gb3ZlciBWREIgY2F0ZWdvcmllcyAqLwogCQl3aGlsZSAobmJfb2ZfcXVlcmllcyAmJiAoZGVu
dHJ5ID0gcV92ZGJfZ2V0X25leHRfZGlyKGRpcikpKSB7Ci0JCQlzbnByaW50ZihwYXRoLCBfUV9Q
QVRIX01BWCwgIiVzLyVzLyVzIiwgcWZpbGVfYXJncy0+cmVhbF9yb290LCBwb3J0dmRiLCBkZW50
cnktPmRfbmFtZSk7CisJCQlzbnByaW50ZihwYXRoLCBfUV9QQVRIX01BWCwgIiVzLyVzIiwgcG9y
dHZkYiwgZGVudHJ5LT5kX25hbWUpOwogCQkJcWZpbGUocGF0aCwgKGFzc3VtZV9yb290X3ByZWZp
eCA/IHJvb3RfcHJlZml4IDogTlVMTCksIHFmaWxlX2FyZ3MpOwogCQl9CiAKZGlmZiAtTmFydXAg
cG9ydGFnZS11dGlscy0yMDA3MDExNS9xZmlsZS5jLm9yaWcgcG9ydGFnZS11dGlscy0yMDA3MDEx
NS5uZXcvcWZpbGUuYy5vcmlnCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L3FmaWxlLmMub3Jp
ZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0y
MDA3MDExNS5uZXcvcWZpbGUuYy5vcmlnCTIwMDctMDEtMTUgMTk6MjE6MDUuMDEwMDY2NDY4ICsw
MTAwCkBAIC0wLDAgKzEsNjYyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiBHZW50b28g
Rm91bmRhdGlvbgorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSB2MgorICogJEhlYWRlcjogL3Zhci9jdnNyb290L2dlbnRvby1w
cm9qZWN0cy9wb3J0YWdlLXV0aWxzL3FmaWxlLmMsdiAxLjQyIDIwMDcvMDEvMTMgMTk6MTc6Mzkg
c29sYXIgRXhwICQKKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2IE5lZCBMdWRkICAgICAgICAt
IDxzb2xhckBnZW50b28ub3JnPgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdl
ciAgLSA8dmFwaWVyQGdlbnRvby5vcmc+CisgKi8KKworI2lmZGVmIEFQUExFVF9xZmlsZQorCisj
ZGVmaW5lIFFGSUxFX01BWF9NQVhfQVJHUyA1MDAwMDAwCisjZGVmaW5lIFFGSUxFX0RFRkFVTFRf
TUFYX0FSR1MgNTAwMAorI2RlZmluZSBRRklMRV9ERUZBVUxUX01BWF9BUkdTX1NUUiAiNTAwMCIK
KworI2RlZmluZSBRRklMRV9GTEFHUyAiZWY6bTpvUng6IiBDT01NT05fRkxBR1MKK3N0YXRpYyBz
dHJ1Y3Qgb3B0aW9uIGNvbnN0IHFmaWxlX2xvbmdfb3B0c1tdID0geworCXsiZXhhY3QiLCAgICAg
ICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKKwl7ImZyb20iLCAgICAgICAgYV9hcmd1bWVudCwg
IE5VTEwsICdmJ30sCisJeyJtYXgtYXJncyIsICAgIGFfYXJndW1lbnQsICBOVUxMLCAnbSd9LAor
CXsib3JwaGFucyIsICAgICBub19hcmd1bWVudCwgTlVMTCwgJ28nfSwKKwl7InJvb3QtcHJlZml4
Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdSJ30sCisJeyJleGNsdWRlIiwgICAgIGFfYXJndW1lbnQs
ICBOVUxMLCAneCd9LAorCUNPTU1PTl9MT05HX09QVFMKK307CitzdGF0aWMgY29uc3QgY2hhciAq
cWZpbGVfb3B0c19oZWxwW10gPSB7CisJIkV4YWN0IG1hdGNoIiwKKwkiUmVhZCBhcmd1bWVudHMg
ZnJvbSBmaWxlIDxhcmc+IChcIi1cIiBmb3Igc3RkaW4pIiwKKwkiVHJlYXQgZnJvbSBmaWxlIGFy
Z3VtZW50cyBieSBncm91cHMgb2YgPGFyZz4gKGRlZmF1bHRzIHRvICIgUUZJTEVfREVGQVVMVF9N
QVhfQVJHU19TVFIgIikiLAorCSJMaXN0IG9ycGhhbiBmaWxlcyIsCisJIkFzc3VtZSBhcmd1bWVu
dHMgYXJlIGFscmVhZHkgcHJlZml4ZWQgYnkgJFJPT1QiLAorCSJEb24ndCBsb29rIGluIHBhY2th
Z2UgPGFyZz4iLAorCUNPTU1PTl9PUFRTX0hFTFAKK307CitzdGF0aWMgY2hhciBxZmlsZV9yY3Np
ZFtdID0gIiRJZDogcWZpbGUuYyx2IDEuNDIgMjAwNy8wMS8xMyAxOToxNzozOSBzb2xhciBFeHAg
JCI7CisjZGVmaW5lIHFmaWxlX3VzYWdlKHJldCkgdXNhZ2UocmV0LCBRRklMRV9GTEFHUywgcWZp
bGVfbG9uZ19vcHRzLCBxZmlsZV9vcHRzX2hlbHAsIGxvb2t1cF9hcHBsZXRfaWR4KCJxZmlsZSIp
KQorCitzdGF0aWMgaW5saW5lIHNob3J0IHFmaWxlX2lzX3ByZWZpeChjb25zdCBjaGFyKiBwYXRo
LCBjb25zdCBjaGFyKiBwcmVmaXgsIGludCBwcmVmaXhfbGVuZ3RoKQoreworCXJldHVybiAhcHJl
Zml4X2xlbmd0aAorCQl8fCAoc3RybGVuKHBhdGgpID49IHByZWZpeF9sZW5ndGgKKwkJCSYmIChw
YXRoW3ByZWZpeF9sZW5ndGhdID09ICcvJyB8fCBwYXRoW3ByZWZpeF9sZW5ndGhdID09ICdcMCcp
CisJCQkmJiAhc3RybmNtcChwYXRoLCBwcmVmaXgsIHByZWZpeF9sZW5ndGgpKTsKK30KKwordHlw
ZWRlZiBzdHJ1Y3QgeworCWludCBsZW5ndGg7CisJY2hhciAqKmJhc2VuYW1lczsKKwljaGFyICoq
ZGlybmFtZXM7CisJY2hhciAqKnJlYWxkaXJuYW1lczsKKwljaGFyICpibl9maXJzdGNoYXJzOwor
CXNob3J0ICpub25fb3JwaGFuczsKKwljaGFyICpyZWFsX3Jvb3Q7CisJY2hhciAqZXhjbHVkZV9w
a2c7CisJY2hhciAqZXhjbHVkZV9zbG90OworfSBxZmlsZV9hcmdzX3Q7CisKK3ZvaWQgcWZpbGUo
Y2hhciAqLCBjb25zdCBjaGFyICosIHFmaWxlX2FyZ3NfdCAqKTsKK3ZvaWQgcWZpbGUoY2hhciAq
cGF0aCwgY29uc3QgY2hhciAqcm9vdCwgcWZpbGVfYXJnc190ICphcmdzKQoreworCUZJTEUgKmZw
OworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlbnRyeTsKKwljaGFyICplbnRyeV9iYXNl
bmFtZTsKKwljaGFyICplbnRyeV9kaXJuYW1lOworCWNoYXIgKnA7CisJY2hhciBidWZbMTAyNF07
CisJY2hhciBwa2dbMTI2XTsKKwlkZXBlbmRfYXRvbSAqYXRvbTsKKwlpbnQgaSwgcGF0aF9vazsK
KwljaGFyIGJuX2ZpcnN0Y2hhcjsKKwljaGFyICpyZWFsX3Jvb3QgPSBhcmdzLT5yZWFsX3Jvb3Q7
CisJY2hhciAqKmJhc2VfbmFtZXMgPSBhcmdzLT5iYXNlbmFtZXM7CisJY2hhciAqKmRpcl9uYW1l
cyA9IGFyZ3MtPmRpcm5hbWVzOworCWNoYXIgKipyZWFsX2Rpcl9uYW1lcyA9IGFyZ3MtPnJlYWxk
aXJuYW1lczsKKwljaGFyICpibl9maXJzdGNoYXJzID0gYXJncy0+Ym5fZmlyc3RjaGFyczsKKwlz
aG9ydCAqbm9uX29ycGhhbnMgPSBhcmdzLT5ub25fb3JwaGFuczsKKworCWlmIChjaGRpcihwYXRo
KSAhPSAwIHx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCisJCXJldHVybjsKKworCXdo
aWxlICgoZGVudHJ5ID0gcmVhZGRpcihkaXIpKSkgeworCQlpZiAoZGVudHJ5LT5kX25hbWVbMF0g
PT0gJy4nKQorCQkJY29udGludWU7CisKKwkJc25wcmludGYocGtnLCBzaXplb2YocGtnKSwgIiVz
LyVzIiwgYmFzZW5hbWUocGF0aCksIGRlbnRyeS0+ZF9uYW1lKTsKKwkJYXRvbSA9IE5VTEw7IC8q
IFdpbGwgYmUgZXhwbG9kZWQgb25jZSBhdCBtb3N0LCBhcyBuZWVkZWQuICovCisKKwkJLyogSWYg
ZXhjbHVkZV9wa2cgaXMgbm90IE5VTEwsIGNoZWNrIGl0LiAgV2UgYXJlIGxvb2tpbmcgZm9yIGZp
bGVzCisJCSAqIGNvbGxpc2lvbnMsIGFuZCBtdXN0IGV4Y2x1ZGUgb25lIHBhY2thZ2UuCisJCSAq
LworCQlpZiAoYXJncy0+ZXhjbHVkZV9wa2cgIT0gTlVMTCkgeworCQkJaWYgKHN0cm5jbXAoYXJn
cy0+ZXhjbHVkZV9wa2csIHBrZywgc2l6ZW9mKHBrZykpID09IDApCisJCQkJZ290byBjaGVja19w
a2dfc2xvdDsgLyogQ0FUL1BGIG1hdGNoZXMgKi8KKwkJCWlmIChzdHJjbXAoYXJncy0+ZXhjbHVk
ZV9wa2csIGRlbnRyeS0+ZF9uYW1lKSA9PSAwKQorCQkJCWdvdG8gY2hlY2tfcGtnX3Nsb3Q7IC8q
IFBGIG1hdGNoZXMgKi8KKwkJCWlmICgoYXRvbSA9IGF0b21fZXhwbG9kZShwa2cpKSA9PSBOVUxM
CisJCQkJCXx8IGF0b20tPlBOID09IE5VTEwgfHwgYXRvbS0+Q0FURUdPUlkgPT0gTlVMTCkgewor
CQkJCXdhcm4oImludmFsaWQgYXRvbSAlcyIsIHBrZyk7CisJCQkJZ290byBkb250X3NraXBfcGtn
OworCQkJfQorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzIiwgYXRvbS0+Q0FU
RUdPUlksIGF0b20tPlBOKTsKKwkJCWlmIChzdHJuY21wKGFyZ3MtPmV4Y2x1ZGVfcGtnLCBidWYs
IHNpemVvZihidWYpKSAhPSAwCisJCQkJCSYmIHN0cmNtcChhcmdzLT5leGNsdWRlX3BrZywgYXRv
bS0+UE4pICE9IDApCisJCQkJZ290byBkb250X3NraXBfcGtnOyAvKiAiKENBVC8pP1BOIiBkb2Vz
bid0IG1hdGNoICovCitjaGVja19wa2dfc2xvdDogLyogQWxzbyBjb21wYXJlIHNsb3RzLCBpZiBh
bnkgd2FzIHNwZWNpZmllZCAqLworCQkJaWYgKGFyZ3MtPmV4Y2x1ZGVfc2xvdCA9PSBOVUxMKSB7
CisJCQkJaWYgKGF0b20gIT0gTlVMTCkKKwkJCQkJYXRvbV9pbXBsb2RlKGF0b20pOworCQkJCWNv
bnRpbnVlOyAvKiAiKENBVC8pPyhQTnxQRikiIG1hdGNoZXMsIGFuZCBubyBTTE9UIHNwZWNpZmll
ZCAqLworCQkJfQorCQkJYnVmWzBdID0gJzAnOyBidWZbMV0gPSAnXDAnOworCQkJeGFzcHJpbnRm
KCZwLCAiJXMvJXMvU0xPVCIsIHBhdGgsIGRlbnRyeS0+ZF9uYW1lKTsKKwkJCWlmICgoZnAgPSBm
b3BlbihwLCAiciIpKSAhPSBOVUxMKSB7CisJCQkJZnJlZShwKTsKKwkJCQlpZiAoZmdldHMoYnVm
LCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpCisJCQkJCWlmICgocCA9IHN0cmNocihidWYsICdc
bicpKSAhPSBOVUxMKQorCQkJCQkJKnAgPSAwOworCQkJCWZjbG9zZShmcCk7CisJCQl9IGVsc2Ug
eworCQkJCWZyZWUocCk7CisJCQl9CisJCQlpZiAoc3RybmNtcChhcmdzLT5leGNsdWRlX3Nsb3Qs
IGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IDApIHsKKwkJCQlpZiAoYXRvbSAhPSBOVUxMKQorCQkJCQlh
dG9tX2ltcGxvZGUoYXRvbSk7CisJCQkJY29udGludWU7IC8qICIoQ0FULyk/KFBOfFBGKTpTTE9U
IiBtYXRjaGVzICovCisJCQl9CisJCX0KK2RvbnRfc2tpcF9wa2c6IC8qIEVuZCBvZiB0aGUgcGFj
a2FnZSBleGNsdXNpb24gdGVzdHMuICovCisKKwkJeGFzcHJpbnRmKCZwLCAiJXMvJXMvQ09OVEVO
VFMiLCBwYXRoLCBkZW50cnktPmRfbmFtZSk7CisJCWlmICgoZnAgPSBmb3BlbihwLCAiciIpKSA9
PSBOVUxMKSB7CisJCQlmcmVlKHApOworCQkJaWYgKGF0b20gIT0gTlVMTCkKKwkJCQlhdG9tX2lt
cGxvZGUoYXRvbSk7CisJCQljb250aW51ZTsKKwkJfQorCQlmcmVlKHApOworCisJCXdoaWxlICgo
ZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSAhPSBOVUxMKSB7CisJCQljb250ZW50c19lbnRy
eSAqZTsKKwkJCWUgPSBjb250ZW50c19wYXJzZV9saW5lKGJ1Zik7CisJCQlpZiAoIWUpCisJCQkJ
Y29udGludWU7CisKKwkJCS8qIG11Y2ggZmFzdGVyIHRoYW4gdXNpbmcgYmFzZW5hbWUoKSwgc2lu
Y2Ugbm8gbmVlZCB0byBzdHJkdXAgKi8KKwkJCWlmICgoZW50cnlfYmFzZW5hbWUgPSBzdHJyY2hy
KGUtPm5hbWUsICcvJykpID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQllbnRyeV9iYXNlbmFt
ZSsrOworCisJCQkvKiB1c2VkIHRvIGN1dCB0aGUgbnVtYmVyIG9mIHN0cmNtcCgpIGNhbGxzICov
CisJCQlibl9maXJzdGNoYXIgPSBlbnRyeV9iYXNlbmFtZVswXTsKKworCQkJZm9yIChpID0gMDsg
aSA8IGFyZ3MtPmxlbmd0aDsgaSsrKSB7CisJCQkJaWYgKGJhc2VfbmFtZXNbaV0gPT0gTlVMTCkK
KwkJCQkJY29udGludWU7CisJCQkJaWYgKG5vbl9vcnBoYW5zICE9IE5VTEwgJiYgbm9uX29ycGhh
bnNbaV0pCisJCQkJCWNvbnRpbnVlOworCQkJCXBhdGhfb2sgPSAoZGlyX25hbWVzW2ldID09IE5V
TEwgJiYgcmVhbF9kaXJfbmFtZXNbaV0gPT0gTlVMTCk7CisKKwkJCQlpZiAoYm5fZmlyc3RjaGFy
ICE9IGJuX2ZpcnN0Y2hhcnNbaV0KKwkJCQkJCXx8IHN0cmNtcChlbnRyeV9iYXNlbmFtZSwgYmFz
ZV9uYW1lc1tpXSkpCisJCQkJCWNvbnRpbnVlOworCisKKwkJCQlpZiAoIXBhdGhfb2spIHsKKwkJ
CQkJLyogY2hlY2sgdGhlIGZ1bGwgZmlsZXBhdGggLi4uICovCisJCQkJCWVudHJ5X2Rpcm5hbWUg
PSB4c3RyZHVwKGUtPm5hbWUpOworCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGVudHJ5X2Rpcm5hbWUs
ICcvJykpID09IE5VTEwpIHsKKwkJCQkJCWZyZWUoZW50cnlfZGlybmFtZSk7CisJCQkJCQljb250
aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAocCA9PSBlbnRyeV9kaXJuYW1lKQorCQkJCQkJLyogKGUt
Pm5hbWUgPT0gIi9mb28iKSA9PT4gZGlybmFtZSA9PSAiLyIgKi8KKwkJCQkJCSoocCArIDEpID0g
J1wwJzsKKwkJCQkJZWxzZQorCQkJCQkJKnAgPSAnXDAnOworCQkJCQlpZiAoZGlyX25hbWVzW2ld
ICE9IE5VTEwgJiYKKwkJCQkJCQlzdHJjbXAoZW50cnlfZGlybmFtZSwgZGlyX25hbWVzW2ldKSA9
PSAwKQorCQkJCQkJLyogZGlyX25hbWUgPT0gZGlybmFtZShDT05URU5UUykgKi8KKwkJCQkJCXBh
dGhfb2sgPSAxOworCQkJCQllbHNlIGlmIChyZWFsX2Rpcl9uYW1lc1tpXSAhPSBOVUxMICYmCisJ
CQkJCQkJc3RyY21wKGVudHJ5X2Rpcm5hbWUsIHJlYWxfZGlyX25hbWVzW2ldKSA9PSAwKQorCQkJ
CQkJLyogcmVhbF9kaXJfbmFtZSA9PSBkaXJuYW1lKENPTlRFTlRTKSAqLworCQkJCQkJcGF0aF9v
ayA9IDE7CisJCQkJCWVsc2UgeworCQkJCQkJY2hhciBycGF0aFtfUV9QQVRIX01BWCsxXTsKKwkJ
CQkJCWNoYXIgKmZ1bGxwYXRoID0gZW50cnlfZGlybmFtZTsKKwkJCQkJCWVycm5vID0gMDsKKwkJ
CQkJCWlmIChyZWFsX3Jvb3QgIT0gTlVMTCAmJiByZWFsX3Jvb3RbMF0gIT0gJ1wwJykKKwkJCQkJ
CQl4YXNwcmludGYoJmZ1bGxwYXRoLCAiJXMlcyIsIHJlYWxfcm9vdCwgZW50cnlfZGlybmFtZSk7
CisJCQkJCQlyZWFscGF0aChmdWxscGF0aCwgcnBhdGgpOworCQkJCQkJaWYgKGVycm5vICE9IDAp
IHsKKwkJCQkJCQlpZiAodmVyYm9zZSkgeworCQkJCQkJCQl3YXJucCgiQ291bGQgbm90IHJlYWQg
cmVhbCBwYXRoIG9mIFwiJXNcIiAoZnJvbSAlcykiLCBmdWxscGF0aCwgcGtnKTsKKwkJCQkJCQkJ
d2FybigiV2UnbGwgbmV2ZXIga25vdyB3aGV0aGVyIFwiJXMvJXNcIiB3YXMgYSByZXN1bHQgZm9y
IHlvdXIgcXVlcnkuLi4iLAorCQkJCQkJCQkJCWVudHJ5X2Rpcm5hbWUsIGVudHJ5X2Jhc2VuYW1l
KTsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgaWYgKCFxZmlsZV9pc19wcmVmaXgocnBhdGgsIHJl
YWxfcm9vdCwgc3RybGVuKHJlYWxfcm9vdCkpKSB7CisJCQkJCQkJaWYgKHZlcmJvc2UpCisJCQkJ
CQkJCXdhcm4oIlJlYWwgcGF0aCBvZiBcIiVzXCIgaXMgbm90IHVuZGVyIFJPT1Q6ICVzIiwgZnVs
bHBhdGgsIHJwYXRoKTsKKwkJCQkJCX0gZWxzZSBpZiAoZGlyX25hbWVzW2ldICE9IE5VTEwgJiYK
KwkJCQkJCQkJc3RyY21wKHJwYXRoICsgc3RybGVuKHJlYWxfcm9vdCksIGRpcl9uYW1lc1tpXSkg
PT0gMCkKKwkJCQkJCQkvKiBkaXJfbmFtZSA9PSByZWFscGF0aChkaXJuYW1lKENPTlRFTlRTKSkg
Ki8KKwkJCQkJCQlwYXRoX29rID0gMTsKKwkJCQkJCWVsc2UgaWYgKHJlYWxfZGlyX25hbWVzW2ld
ICE9IE5VTEwgJiYKKwkJCQkJCQkJc3RyY21wKHJwYXRoICsgc3RybGVuKHJlYWxfcm9vdCksIHJl
YWxfZGlyX25hbWVzW2ldKSA9PSAwKQorCQkJCQkJCS8qIHJlYWxfZGlyX25hbWUgPT0gcmVhbHBh
dGgoZGlybmFtZShDT05URU5UUykpICovCisJCQkJCQkJcGF0aF9vayA9IDE7CisJCQkJCQlpZiAo
ZnVsbHBhdGggIT0gZW50cnlfZGlybmFtZSkKKwkJCQkJCQlmcmVlKGZ1bGxwYXRoKTsKKwkJCQkJ
fQorCQkJCQlmcmVlKGVudHJ5X2Rpcm5hbWUpOworCQkJCX0KKwkJCQlpZiAoIXBhdGhfb2spCisJ
CQkJCWNvbnRpbnVlOworCisJCQkJaWYgKG5vbl9vcnBoYW5zID09IE5VTEwpIHsKKwkJCQkJaWYg
KGF0b20gPT0gTlVMTCAmJiAoYXRvbSA9IGF0b21fZXhwbG9kZShwa2cpKSA9PSBOVUxMKSB7CisJ
CQkJCQl3YXJuKCJpbnZhbGlkIGF0b20gJXMiLCBwa2cpOworCQkJCQkJY29udGludWU7CisJCQkJ
CX0KKworCQkJCQlwcmludGYoIiVzJXMvJXMlcyVzIiwgQk9MRCwgYXRvbS0+Q0FURUdPUlksIEJM
VUUsCisJCQkJCQkoZXhhY3QgPyBkZW50cnktPmRfbmFtZSA6IGF0b20tPlBOKSwgTk9STSk7CisJ
CQkJCWlmIChxdWlldCkKKwkJCQkJCXB1dHMoIiIpOworCQkJCQllbHNlIGlmIChyb290ICE9IE5V
TEwpCisJCQkJCQlwcmludGYoIiAoJXMlcylcbiIsIHJvb3QsIGUtPm5hbWUpOworCQkJCQllbHNl
CisJCQkJCQlwcmludGYoIiAoJXMpXG4iLCBlLT5uYW1lKTsKKworCQkJCX0gZWxzZSB7CisJCQkJ
CW5vbl9vcnBoYW5zW2ldID0gMTsKKwkJCQl9CisJCQkJZm91bmQrKzsKKwkJCX0KKwkJfQorCQlm
Y2xvc2UoZnApOworCQlpZiAoYXRvbSAhPSBOVUxMKQorCQkJYXRvbV9pbXBsb2RlKGF0b20pOwor
CX0KKwljbG9zZWRpcihkaXIpOworCisJcmV0dXJuOworfQorCitxZmlsZV9hcmdzX3QgKmNyZWF0
ZV9xZmlsZV9hcmdzKCk7CitxZmlsZV9hcmdzX3QgKmNyZWF0ZV9xZmlsZV9hcmdzKCkKK3sKKwlx
ZmlsZV9hcmdzX3QgKnFmaWxlX2FyZ3M7CisKKwlxZmlsZV9hcmdzID0geG1hbGxvYyhzaXplb2Yo
cWZpbGVfYXJnc190KSk7CisKKwltZW1zZXQocWZpbGVfYXJncywgMCwgc2l6ZW9mKHFmaWxlX2Fy
Z3NfdCkpOworCXJldHVybiBxZmlsZV9hcmdzOworfQorCit2b2lkIGRlc3Ryb3lfcWZpbGVfYXJn
cyhxZmlsZV9hcmdzX3QgKik7Cit2b2lkIGRlc3Ryb3lfcWZpbGVfYXJncyhxZmlsZV9hcmdzX3Qg
KnFmaWxlX2FyZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcWZpbGVfYXJncy0+
bGVuZ3RoOyArK2kpIHsKKwkJaWYgKHFmaWxlX2FyZ3MtPmJhc2VuYW1lcyAhPSBOVUxMICYmIHFm
aWxlX2FyZ3MtPmJhc2VuYW1lc1tpXSAhPSBOVUxMKQorCQkJZnJlZShxZmlsZV9hcmdzLT5iYXNl
bmFtZXNbaV0pOworCQlpZiAocWZpbGVfYXJncy0+ZGlybmFtZXMgIT0gTlVMTCAmJiBxZmlsZV9h
cmdzLT5kaXJuYW1lc1tpXSAhPSBOVUxMKQorCQkJZnJlZShxZmlsZV9hcmdzLT5kaXJuYW1lc1tp
XSk7CisJCWlmIChxZmlsZV9hcmdzLT5yZWFsZGlybmFtZXMgIT0gTlVMTCAmJiBxZmlsZV9hcmdz
LT5yZWFsZGlybmFtZXNbaV0gIT0gTlVMTCkKKwkJCWZyZWUocWZpbGVfYXJncy0+cmVhbGRpcm5h
bWVzW2ldKTsKKwl9CisKKwlpZiAocWZpbGVfYXJncy0+YmFzZW5hbWVzICE9IE5VTEwpCisJCWZy
ZWUocWZpbGVfYXJncy0+YmFzZW5hbWVzKTsKKwlpZiAocWZpbGVfYXJncy0+ZGlybmFtZXMgIT0g
TlVMTCkKKwkJZnJlZShxZmlsZV9hcmdzLT5kaXJuYW1lcyk7CisJaWYgKHFmaWxlX2FyZ3MtPnJl
YWxkaXJuYW1lcyAhPSBOVUxMKQorCQlmcmVlKHFmaWxlX2FyZ3MtPnJlYWxkaXJuYW1lcyk7CisK
KwlpZiAocWZpbGVfYXJncy0+Ym5fZmlyc3RjaGFycyAhPSBOVUxMKQorCQlmcmVlKHFmaWxlX2Fy
Z3MtPmJuX2ZpcnN0Y2hhcnMpOworCisJaWYgKHFmaWxlX2FyZ3MtPm5vbl9vcnBoYW5zICE9IE5V
TEwpCisJCWZyZWUocWZpbGVfYXJncy0+bm9uX29ycGhhbnMpOworCisJaWYgKHFmaWxlX2FyZ3Mt
PnJlYWxfcm9vdCAhPSBOVUxMKQorCQlmcmVlKHFmaWxlX2FyZ3MtPnJlYWxfcm9vdCk7CisKKwlp
ZiAocWZpbGVfYXJncy0+ZXhjbHVkZV9wa2cgIT0gTlVMTCkKKwkJZnJlZShxZmlsZV9hcmdzLT5l
eGNsdWRlX3BrZyk7CisJLyogZG9uJ3QgZnJlZSBxZmlsZV9hcmdzLT5leGNsdWRlX3Nsb3QsIGl0
J3MgdGhlIHNhbWUgY2h1bmsgKi8KKworCW1lbXNldChxZmlsZV9hcmdzLCAwLCBzaXplb2YocWZp
bGVfYXJnc190KSk7Cit9CisKK2ludCBwcmVwYXJlX3FmaWxlX2FyZ3MoY29uc3QgaW50LCBjb25z
dCBjaGFyICoqLAorCQljb25zdCBzaG9ydCwgY29uc3Qgc2hvcnQsIGNvbnN0IGNoYXIgKiwgcWZp
bGVfYXJnc190ICopOworaW50IHByZXBhcmVfcWZpbGVfYXJncyhjb25zdCBpbnQgYXJnYywgY29u
c3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IHNob3J0IGFzc3VtZV9yb290X3ByZWZpeCwgY29uc3Qg
c2hvcnQgc2VhcmNoX29ycGhhbnMsCisJCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfcGtnX2FyZywgcWZp
bGVfYXJnc190ICpxZmlsZV9hcmdzKQoreworCWludCBpOworCWludCBuYl9vZl9xdWVyaWVzID0g
YXJnYzsKKwljaGFyICpwd2QgPSBOVUxMOworCWludCByZWFsX3Jvb3RfbGVuZ3RoOworCWNoYXIg
KnJlYWxfcm9vdCA9IE5VTEw7CisJY2hhciAqKmJhc2VuYW1lcyA9IE5VTEw7CisJY2hhciAqKmRp
cm5hbWVzID0gTlVMTDsKKwljaGFyICoqcmVhbGRpcm5hbWVzID0gTlVMTDsKKwljaGFyICpiYXNl
bmFtZXNfZmlyc3RjaGFycyA9IE5VTEw7CisJY2hhciB0bXBwYXRoW19RX1BBVEhfTUFYKzFdOwor
CWNoYXIgYWJzcGF0aFtfUV9QQVRIX01BWCsxXTsKKworCS8qIFRyeSB0byBnZXQgJFBXRC4gTXVz
dCBiZSBhYnNvbHV0ZSwgd2l0aCBubyB0cmFpbGluZyBzbGFzaC4gKi8KKwlpZiAoKHB3ZCA9IGdl
dGVudigiUFdEIikpICE9IE5VTEwgJiYgcHdkWzBdID09ICcvJykgeworCQlwd2QgPSB4c3RyZHVw
KHB3ZCk7CisJCWlmICgocHdkW3N0cmxlbihwd2QpIC0gMV0gPT0gJy8nKSkKKwkJCXB3ZFtzdHJs
ZW4ocHdkKSAtIDFdID0gJ1wwJzsKKwl9IGVsc2UKKwkJcHdkID0gTlVMTDsKKworCS8qIEdldCBy
ZWFscGF0aCBvZiAkUk9PVCwgd2l0aCBubyB0cmFpbGluZyBzbGFzaCAqLworCWlmIChwb3J0cm9v
dFswXSA9PSAnLycpCisJCXN0cm5jcHkodG1wcGF0aCwgcG9ydHJvb3QsIF9RX1BBVEhfTUFYKTsK
KwllbHNlIGlmIChwd2QgIT0gTlVMTCkKKwkJc25wcmludGYodG1wcGF0aCwgX1FfUEFUSF9NQVgs
ICIlcy8lcyIsIHB3ZCwgcG9ydHJvb3QpOworCWVsc2UgeworCQlmcmVlKHB3ZCk7CisJCXdhcm4o
IkNvdWxkIG5vdCBnZXQgYWJzb2x1dGUgcGF0aCBmb3IgUk9PVCAoXCIlc1wiKSwgYmVjYXVzZSBv
ZiBtaXNzaW5nIG9yIG5vdCBhYnNvbHV0ZSAkUFdEIiwgdG1wcGF0aCk7CisJCXJldHVybiAtMTsK
Kwl9CisJZXJybm8gPSAwOworCXJlYWxwYXRoKHRtcHBhdGgsIGFic3BhdGgpOworCWlmIChlcnJu
byAhPSAwKSB7CisJCWZyZWUocHdkKTsKKwkJd2FybnAoIkNvdWxkIG5vdCByZWFkIHJlYWwgcGF0
aCBvZiBST09UIChcIiVzXCIpIiwgdG1wcGF0aCk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHN0
cmxlbihhYnNwYXRoKSA9PSAxKQorCQlhYnNwYXRoWzBdID0gJ1wwJzsKKwlyZWFsX3Jvb3QgPSB4
c3RyZHVwKGFic3BhdGgpOworCXJlYWxfcm9vdF9sZW5ndGggPSBzdHJsZW4ocmVhbF9yb290KTsK
KworCS8qIEZvciBlYWNoIGFyZ3VtZW50LCB3ZSBzdG9yZSBpdHMgYmFzZW5hbWUsIGl0cyBhYnNv
bHV0ZSBkaXJuYW1lLAorCSAqIGFuZCB0aGUgcmVhbHBhdGggb2YgaXRzIGRpcm5hbWUuICBEaXJu
YW1lcyBhbmQgdGhlaXIgcmVhbHBhdGhzCisJICogYXJlIHN0b3JlZCB3aXRob3V0IHRoZWlyICRS
T09UIHByZWZpeCwgYnV0ICRST09UIGlzIHVzZWQgd2hlbgorCSAqIGNoZWNraW5nIHJlYWxwYXRo
cy4KKwkgKi8KKwliYXNlbmFtZXMgPSB4Y2FsbG9jKGFyZ2MsIHNpemVvZihjaGFyKikpOworCWRp
cm5hbWVzID0geGNhbGxvYyhhcmdjLCBzaXplb2YoY2hhciopKTsKKwlyZWFsZGlybmFtZXMgPSB4
Y2FsbG9jKGFyZ2MsIHNpemVvZihjaGFyKikpOworCS8qIEZvciBvcHRpbWl6YXRpb24gb2YgcWZp
bGUoKSwgd2UgYWxzbyBnaXZlIGl0IGFuIGFycmF5IG9mIHRoZSBmaXJzdCBjaGFyCisJICogb2Yg
ZWFjaCBiYXNlbmFtZS4gIFRoaXMgd2F5IHdlIGF2b2lkIG51bWVyb3VzIHN0cmNtcCgpIGNhbGxz
LgorCSAqLworCWJhc2VuYW1lc19maXJzdGNoYXJzID0geGNhbGxvYyhhcmdjLCBzaXplb2YoY2hh
cikpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworCQkvKiBSZWNvcmQgYmFzZW5h
bWUsIGJ1dCBpZiBpdCBpcyAiLiIsICIuLiIgb3IgIi8iICovCisJCXN0cm5jcHkoYWJzcGF0aCwg
YXJndltpXSwgX1FfUEFUSF9NQVgpOyAvKiBzdHJuY29weSBzbyB0aGF0ICJhcmd2IiBjYW4gYmUg
ImNvbnN0IiAqLworCQlzdHJuY3B5KHRtcHBhdGgsIGJhc2VuYW1lKGFic3BhdGgpLCBfUV9QQVRI
X01BWCk7CisJCWlmICgoc3RybGVuKHRtcHBhdGgpID4gMikgfHwKKwkJICAgIChzdHJuY21wKHRt
cHBhdGgsICIuLiIsIHN0cmxlbih0bXBwYXRoKSkKKwkJICAgICAmJiBzdHJuY21wKHRtcHBhdGgs
ICIvIiwgc3RybGVuKHRtcHBhdGgpKSkpCisJCXsKKwkJCWJhc2VuYW1lc1tpXSA9IHhzdHJkdXAo
dG1wcGF0aCk7CisJCQliYXNlbmFtZXNfZmlyc3RjaGFyc1tpXSA9IGJhc2VuYW1lc1tpXVswXTsK
KwkJCS8qIElmIHRoZXJlIGlzIG5vICIvIiBpbiB0aGUgYXJndW1lbnQsIHRoZW4gaXQncyBvdmVy
LgorCQkJICogKHdlIGFyZSBzZWFyY2hpbmcgYSBzaW1wbGUgZmlsZSBuYW1lKQorCQkJICovCisJ
CQlpZiAoc3RyY2hyKGFyZ3ZbaV0sICcvJykgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJfQor
CisJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggYXZhaWxhYmxlICh3aXRo
ICJyZWFscGF0aChST09UKSIgcHJlZml4KSAqLworCQlpZiAoYXJndltpXVswXSA9PSAnLycpIHsK
KwkJCWlmIChhc3N1bWVfcm9vdF9wcmVmaXgpCisJCQkJc3RybmNweShhYnNwYXRoLCBhcmd2W2ld
LCBfUV9QQVRIX01BWCk7CisJCQllbHNlCisJCQkJc25wcmludGYoYWJzcGF0aCwgX1FfUEFUSF9N
QVgsICIlcyVzIiwgcmVhbF9yb290LCBhcmd2W2ldKTsKKwkJfSBlbHNlIGlmIChwd2QgIT0gTlVM
TCkgeworCQkJaWYgKGFzc3VtZV9yb290X3ByZWZpeCkKKwkJCQlzbnByaW50ZihhYnNwYXRoLCBf
UV9QQVRIX01BWCwgIiVzLyVzIiwgcHdkLCBhcmd2W2ldKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50
ZihhYnNwYXRoLCBfUV9QQVRIX01BWCwgIiVzJXMvJXMiLCByZWFsX3Jvb3QsIHB3ZCwgYXJndltp
XSk7CisJCX0gZWxzZSB7CisJCQl3YXJuKCIkUFdEIHdhcyBub3QgZm91bmQgaW4gZW52aXJvbm1l
bnQsIG9yIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIik7CisJCQlnb3RvIHNraXBfcXVlcnlfaXRl
bTsKKwkJfQorCisJCWlmIChiYXNlbmFtZXNbaV0gIT0gTlVMTCkgeworCQkJLyogR2V0IGJvdGgg
dGhlIGRpcm5hbWUgYW5kIGl0cyByZWFscGF0aC4gIFRoaXMgcGF0aHMgd2lsbAorCQkJICogaGF2
ZSBubyB0cmFpbGluZyBzbGFzaCwgYnV0IGlmIGl0IGlzIHRoZSBvbmx5IGNoYXIgKGllLiwKKwkJ
CSAqIHdoZW4gc2VhcmNoaW5nIGZvciAiL2Zvb2JhciIpLgorCQkJICovCisJCQlzdHJuY3B5KHRt
cHBhdGgsIGFic3BhdGgsIF9RX1BBVEhfTUFYKTsKKwkJCXN0cm5jcHkoYWJzcGF0aCwgZGlybmFt
ZSh0bXBwYXRoKSwgX1FfUEFUSF9NQVgpOworCQkJaWYgKGFic3BhdGhbcmVhbF9yb290X2xlbmd0
aF0gPT0gJ1wwJykKKwkJCQlzdHJuY2F0KGFic3BhdGgsICIvIiwgMSk7CisJCQlkaXJuYW1lc1tp
XSA9IHhzdHJkdXAoYWJzcGF0aCArIHJlYWxfcm9vdF9sZW5ndGgpOworCQkJZXJybm8gPSAwOwor
CQkJcmVhbHBhdGgoYWJzcGF0aCwgdG1wcGF0aCk7CisJCQlpZiAoZXJybm8gIT0gMCkgeworCQkJ
CWlmICh2ZXJib3NlKSB7CisJCQkJCXdhcm5wKCJDb3VsZCBub3QgcmVhZCByZWFsIHBhdGggb2Yg
XCIlc1wiIiwgYWJzcGF0aCk7CisJCQkJCXdhcm4oIlJlc3VsdHMgZm9yIHF1ZXJ5IGl0ZW0gXCIl
c1wiIG1heSBiZSBpbmFjY3VyYXRlLiIsIGFyZ3ZbaV0pOworCQkJCX0KKwkJCQljb250aW51ZTsK
KwkJCX0KKwkJCWlmICghcWZpbGVfaXNfcHJlZml4KHRtcHBhdGgsIHJlYWxfcm9vdCwgcmVhbF9y
b290X2xlbmd0aCkpIHsKKwkJCQl3YXJuKCJSZWFsIHBhdGggb2YgXCIlc1wiIGlzIG5vdCB1bmRl
ciBST09UOiAlcyIsIGFic3BhdGgsIHRtcHBhdGgpOworCQkJCWdvdG8gc2tpcF9xdWVyeV9pdGVt
OworCQkJfQorCQkJaWYgKHRtcHBhdGhbcmVhbF9yb290X2xlbmd0aF0gPT0gJ1wwJykKKwkJCQlz
dHJuY2F0KHRtcHBhdGgsICIvIiwgMSk7CisJCQlpZiAoc3RyY21wKGRpcm5hbWVzW2ldLCB0bXBw
YXRoICsgcmVhbF9yb290X2xlbmd0aCkpCisJCQkJcmVhbGRpcm5hbWVzW2ldID0geHN0cmR1cCh0
bXBwYXRoICsgcmVhbF9yb290X2xlbmd0aCk7CisJCX0gZWxzZSB7CisJCQkvKiBObyBiYXNlbmFt
ZSBtZWFucyB3ZSBhcmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgIi9mb28vYmFyLy4uIgor
CQkJICogRGlybmFtZSBpcyBtZWFuaW5nbGVzcyBoZXJlLCB3ZSBjYW4gb25seSBnZXQgcmVhbHBh
dGggb2YgdGhlIGZ1bGwKKwkJCSAqIHBhdGggYW5kIHRoZW4gc3BsaXQgaXQuCisJCQkgKi8KKwkJ
CWVycm5vID0gMDsKKwkJCXJlYWxwYXRoKGFic3BhdGgsIHRtcHBhdGgpOworCQkJaWYgKGVycm5v
ICE9IDApIHsKKwkJCQl3YXJucCgiQ291bGQgbm90IHJlYWQgcmVhbCBwYXRoIG9mIFwiJXNcIiIs
IGFic3BhdGgpOworCQkJCWdvdG8gc2tpcF9xdWVyeV9pdGVtOworCQkJfQorCQkJaWYgKCFxZmls
ZV9pc19wcmVmaXgodG1wcGF0aCwgcmVhbF9yb290LCByZWFsX3Jvb3RfbGVuZ3RoKSkgeworCQkJ
CXdhcm4oIlJlYWwgcGF0aCBvZiBcIiVzXCIgaXMgbm90IHVuZGVyIFJPT1Q6ICVzIiwgYWJzcGF0
aCwgdG1wcGF0aCk7CisJCQkJZ290byBza2lwX3F1ZXJ5X2l0ZW07CisJCQl9CisJCQlzdHJuY3B5
KGFic3BhdGgsIHRtcHBhdGgsIF9RX1BBVEhfTUFYKTsKKwkJCWJhc2VuYW1lc1tpXSA9IHhzdHJk
dXAoYmFzZW5hbWUoYWJzcGF0aCkpOworCQkJYmFzZW5hbWVzX2ZpcnN0Y2hhcnNbaV0gPSBiYXNl
bmFtZXNbaV1bMF07CisJCQlzdHJuY3B5KGFic3BhdGgsIGRpcm5hbWUodG1wcGF0aCksIF9RX1BB
VEhfTUFYKTsKKwkJCWlmICh0bXBwYXRoW3JlYWxfcm9vdF9sZW5ndGhdID09ICdcMCcpCisJCQkJ
c3RybmNhdCh0bXBwYXRoLCAiLyIsIDEpOworCQkJcmVhbGRpcm5hbWVzW2ldID0geHN0cmR1cChh
YnNwYXRoICsgcmVhbF9yb290X2xlbmd0aCk7CisJCX0KKwkJY29udGludWU7CisKKwkJc2tpcF9x
dWVyeV9pdGVtOgorCQkJLS1uYl9vZl9xdWVyaWVzOworCQkJd2FybigiU2tpcHBpbmcgcXVlcnkg
aXRlbSBcIiVzXCIuIiwgYXJndltpXSk7CisJCQlpZiAoYmFzZW5hbWVzW2ldICE9IE5VTEwpIGZy
ZWUoYmFzZW5hbWVzW2ldKTsKKwkJCWlmIChkaXJuYW1lc1tpXSAhPSBOVUxMKSBmcmVlKGRpcm5h
bWVzW2ldKTsKKwkJCWlmIChyZWFsZGlybmFtZXNbaV0gIT0gTlVMTCkgZnJlZShyZWFsZGlybmFt
ZXNbaV0pOworCQkJYmFzZW5hbWVzW2ldID0gZGlybmFtZXNbaV0gPSByZWFsZGlybmFtZXNbaV0g
PSBOVUxMOworCX0KKworCWlmIChwd2QgIT0gTlVMTCkKKwkJZnJlZShwd2QpOworCisJcWZpbGVf
YXJncy0+cmVhbF9yb290ID0gcmVhbF9yb290OworCXFmaWxlX2FyZ3MtPmJhc2VuYW1lcyA9IGJh
c2VuYW1lczsKKwlxZmlsZV9hcmdzLT5kaXJuYW1lcyA9IGRpcm5hbWVzOworCXFmaWxlX2FyZ3Mt
PnJlYWxkaXJuYW1lcyA9IHJlYWxkaXJuYW1lczsKKwlxZmlsZV9hcmdzLT5ibl9maXJzdGNoYXJz
ID0gYmFzZW5hbWVzX2ZpcnN0Y2hhcnM7CisJcWZpbGVfYXJncy0+bGVuZ3RoID0gYXJnYzsKKwor
CWlmIChzZWFyY2hfb3JwaGFucykgeworCQlxZmlsZV9hcmdzLT5ub25fb3JwaGFucyA9IHhjYWxs
b2MoYXJnYywgc2l6ZW9mKHNob3J0KSk7CisJCW1lbXNldChxZmlsZV9hcmdzLT5ub25fb3JwaGFu
cywgMCwgYXJnYyk7CisJfQorCisJaWYgKGV4Y2x1ZGVfcGtnX2FyZyAhPSBOVUxMKSB7CisJCXFm
aWxlX2FyZ3MtPmV4Y2x1ZGVfcGtnID0geHN0cmR1cChleGNsdWRlX3BrZ19hcmcpOworCQlpZiAo
KHFmaWxlX2FyZ3MtPmV4Y2x1ZGVfc2xvdCA9IHN0cmNocihxZmlsZV9hcmdzLT5leGNsdWRlX3Br
ZywgJzonKSkgIT0gTlVMTCkKKwkJCSpxZmlsZV9hcmdzLT5leGNsdWRlX3Nsb3QrKyA9ICdcMCc7
CisJCS8qIE1heWJlIHRoaXMgc2hvdWxkIGJlIGF0b20tZXhwbG9kZWQgaW5zdGVhZCAodG8gY2hl
Y2sgc3ludGF4LCBldGMuKSAqLworCX0KKworCXJldHVybiBuYl9vZl9xdWVyaWVzOworfQorCitp
bnQgcWZpbGVfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJRElSICpkaXI7CisJc3Ry
dWN0IGRpcmVudCAqZGVudHJ5OworCWludCBpLCBuYl9vZl9xdWVyaWVzOworCWNoYXIgKnA7CisJ
c2hvcnQgc2VhcmNoX29ycGhhbnMgPSAwOworCXNob3J0IGFzc3VtZV9yb290X3ByZWZpeCA9IDA7
CisJY2hhciAqcm9vdF9wcmVmaXggPSBOVUxMOworCWNoYXIgKmV4Y2x1ZGVfcGtnX2FyZyA9IE5V
TEw7CisJcWZpbGVfYXJnc190ICpxZmlsZV9hcmdzID0gTlVMTDsKKwlpbnQgcWFyZ2MgPSAwOwor
CWNoYXIgKipxYXJndiA9IE5VTEw7CisJc2hvcnQgZG9uZSA9IDA7CisJRklMRSAqYXJnc19maWxl
ID0gTlVMTDsKKwlpbnQgbWF4X2FyZ3MgPSBRRklMRV9ERUZBVUxUX01BWF9BUkdTOworCWNoYXIg
cGF0aFtfUV9QQVRIX01BWF07CisKKwlEQkcoImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVz
IiwKKwkgICAgYXJnYywgYXJndlswXSwgYXJnYyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CisK
Kwl3aGlsZSAoKGkgPSBHRVRPUFRfTE9ORyhRRklMRSwgcWZpbGUsICIiKSkgIT0gLTEpIHsKKwkJ
c3dpdGNoIChpKSB7CisJCQlDT01NT05fR0VUT1BUU19DQVNFUyhxZmlsZSkKKwkJCWNhc2UgJ2Un
OiBleGFjdCA9IDE7IGJyZWFrOworCQkJY2FzZSAnZic6CisJCQkJaWYgKGFyZ3NfZmlsZSAhPSBO
VUxMKSB7CisJCQkJCXdhcm4oIkRvbid0IHVzZSAtZiB0d2ljZSEiKTsKKwkJCQkJZ290byBleGl0
OworCQkJCX0KKwkJCQlpZiAoc3RyY21wKG9wdGFyZywgIi0iKSA9PSAwKQorCQkJCQlhcmdzX2Zp
bGUgPSBzdGRpbjsKKwkJCQllbHNlIGlmICgoYXJnc19maWxlID0gZm9wZW4ob3B0YXJnLCAiciIp
KSA9PSBOVUxMKSB7CisJCQkJCXdhcm5wKCIlcyIsIG9wdGFyZyk7CisJCQkJCWdvdG8gZXhpdDsK
KwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICdtJzoKKwkJCQllcnJubyA9IDA7CisJCQkJbWF4
X2FyZ3MgPSBzdHJ0b2wob3B0YXJnLCAmcCwgMTApOworCQkJCWlmIChlcnJubyAhPSAwKSB7CisJ
CQkJCXdhcm5wKCIlczogbm90IGEgdmFsaWQgaW50ZWdlciIsIG9wdGFyZyk7CisJCQkJCWdvdG8g
ZXhpdDsKKwkJCQl9IGVsc2UgaWYgKHAgPT0gb3B0YXJnIHx8ICpwICE9ICdcMCcpIHsKKwkJCQkJ
d2FybigiJXM6IG5vdCBhIHZhbGlkIGludGVnZXIiLCBvcHRhcmcpOworCQkJCQlnb3RvIGV4aXQ7
CisJCQkJfQorCQkJCWlmIChtYXhfYXJncyA8PSAwIHx8IG1heF9hcmdzID4gUUZJTEVfTUFYX01B
WF9BUkdTKSB7CisJCQkJCXdhcm4oIiVzOiBzaWxseSB2YWx1ZSEiLCBvcHRhcmcpOworCQkJCQln
b3RvIGV4aXQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnbyc6IHNlYXJjaF9vcnBoYW5z
ID0gMTsgYnJlYWs7CisJCQljYXNlICdSJzogYXNzdW1lX3Jvb3RfcHJlZml4ID0gMTsgYnJlYWs7
CisJCQljYXNlICd4JzoKKwkJCQlpZiAoZXhjbHVkZV9wa2dfYXJnICE9IE5VTEwpIHsKKwkJCQkJ
d2FybigiLS1leGNsdWRlIGNhbiBvbmx5IGJlIHVzZWQgb25jZS4iKTsKKwkJCQkJZ290byBleGl0
OworCQkJCX0KKwkJCQlleGNsdWRlX3BrZ19hcmcgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisJCX0K
Kwl9CisJaWYgKCFleGFjdCAmJiB2ZXJib3NlKSBleGFjdCsrOworCWlmICgoYXJnYyA9PSBvcHRp
bmQpICYmIChhcmdzX2ZpbGUgPT0gTlVMTCkpCisJCXFmaWxlX3VzYWdlKEVYSVRfRkFJTFVSRSk7
CisKKwlpZiAoKGFyZ3NfZmlsZSA9PSBOVUxMKSAmJiAobWF4X2FyZ3MgIT0gUUZJTEVfREVGQVVM
VF9NQVhfQVJHUykpCisJCXdhcm4oIi0tbWF4LWFyZ3MgaXMgb25seSB1c2VkIHdoZW4gcmVhZGlu
ZyBhcmd1bWVudHMgZnJvbSBhIGZpbGUgKHdpdGggLWYpIik7CisKKwlpZiAoY2hkaXIocG9ydHJv
b3QpKSB7CisJCXdhcm5wKCJjb3VsZCBub3QgY2hkaXIoJXMpIGZvciBST09UIiwgcG9ydHJvb3Qp
OworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGNoZGlyKHBvcnR2ZGIpICE9IDApIHsKKwkJd2Fy
bnAoImNvdWxkIG5vdCBjaGRpcihST09ULyVzKSBmb3IgaW5zdGFsbGVkIHBhY2thZ2VzIGRhdGFi
YXNlIiwgcG9ydHZkYik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBHZXQgYSBjb3B5IG9mICRS
T09ULCB3aXRoIG5vIHRyYWlsaW5nIHNsYXNoCisJICogKHRoaXMgb25lIGlzIGp1c3QgZm9yIHFm
aWxlKC4uLikgb3V0cHV0KQorCSAqLworCXJvb3RfcHJlZml4ID0geHN0cmR1cChwb3J0cm9vdCk7
CisJaWYgKHJvb3RfcHJlZml4W3N0cmxlbihyb290X3ByZWZpeCkgLSAxXSA9PSAnLycpCisJCXJv
b3RfcHJlZml4W3N0cmxlbihyb290X3ByZWZpeCkgLSAxXSA9ICdcMCc7CisKKwkvKiBBcmUgd2Ug
dXNpbmcgLS1mcm9tID8gKi8KKwlpZiAoYXJnc19maWxlID09IE5VTEwpIHsKKwkJcWFyZ2MgPSBh
cmdjIC0gb3B0aW5kOworCQlxYXJndiA9IGFyZ3YgKyBvcHRpbmQ7CisJCWRvbmUgPSAxOworCX0g
ZWxzZSB7CisJCXFhcmd2ID0geGNhbGxvYyhtYXhfYXJncywgc2l6ZW9mKGNoYXIqKSk7CisJfQor
CisJZG8geyAvKiBUaGlzIGJsb2NrIG1heSBiZSByZXBlYXRlZCBpZiB1c2luZyAtLWZyb20gd2l0
aCBhIGJpZyBmaWxlcyBsaXN0ICovCisJCWlmIChhcmdzX2ZpbGUgIT0gTlVMTCkgeworCQkJcWFy
Z2MgPSAwOworCQkJLyogUmVhZCB1cCB0byBtYXhfYXJncyBmaWxlcyBmcm9tIHRoZSBpbnB1dCBm
aWxlICovCisJCQl3aGlsZSAoKGZnZXRzKHBhdGgsIF9RX1BBVEhfTUFYLCBhcmdzX2ZpbGUpKSAh
PSBOVUxMKSB7CisJCQkJaWYgKChwID0gc3RyY2hyKHBhdGgsICdcbicpKSAhPSBOVUxMKQorCQkJ
CQkqcCA9ICdcMCc7CisJCQkJaWYgKHBhdGggPT0gcCkgY29udGludWU7CisJCQkJcWFyZ3ZbcWFy
Z2NdID0geHN0cmR1cChwYXRoKTsKKwkJCQlxYXJnYysrOworCQkJCWlmIChxYXJnYyA+PSBtYXhf
YXJncykgYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAocWFyZ2MgPT0gMCkgYnJlYWs7CisKKwkJ
aWYgKHFmaWxlX2FyZ3MgPT0gTlVMTCkgeyAvKiBxZmlsZV9hcmdzIGlzIGFsbG9jYXRlZCBvbmx5
IG9uY2UgKi8KKwkJCWlmICgocWZpbGVfYXJncyA9IGNyZWF0ZV9xZmlsZV9hcmdzKCkpID09IE5V
TEwpIHsKKwkJCQl3YXJuKCJPdXQgb2YgbWVtb3J5Iik7CisJCQkJZ290byBleGl0OworCQkJfQor
CQl9IGVsc2UgeworCQkJZGVzdHJveV9xZmlsZV9hcmdzKHFmaWxlX2FyZ3MpOworCQl9CisKKwkJ
LyogUHJlcGFyZSB0aGUgcWZpbGUoLi4uKSBhcmd1bWVudHMgc3RydWN0dXJlICovCisJCW5iX29m
X3F1ZXJpZXMgPSBwcmVwYXJlX3FmaWxlX2FyZ3MocWFyZ2MsIChjb25zdCBjaGFyICoqKSBxYXJn
diwKKwkJCQlhc3N1bWVfcm9vdF9wcmVmaXgsIHNlYXJjaF9vcnBoYW5zLCBleGNsdWRlX3BrZ19h
cmcsIHFmaWxlX2FyZ3MpOworCQlpZiAobmJfb2ZfcXVlcmllcyA8IDApCisJCQlnb3RvIGV4aXQ7
CisKKwkJaWYgKGNoZGlyKHBvcnRyb290KQorCQkJCXx8IGNoZGlyKHBvcnR2ZGIpICE9IDAKKwkJ
CQl8fCAoZGlyID0gb3BlbmRpcigiLiIpKSA9PSBOVUxMKSB7CisJCQl3YXJucCgiY291bGQgbm90
IGNoZGlyKFJPT1QvJXMpIGZvciBpbnN0YWxsZWQgcGFja2FnZXMgZGF0YWJhc2UiLCBwb3J0dmRi
KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCS8qIEl0ZXJhdGlvbiBvdmVyIFZEQiBjYXRlZ29y
aWVzICovCisJCXdoaWxlIChuYl9vZl9xdWVyaWVzICYmIChkZW50cnkgPSBxX3ZkYl9nZXRfbmV4
dF9kaXIoZGlyKSkpIHsKKwkJCXNucHJpbnRmKHBhdGgsIF9RX1BBVEhfTUFYLCAiJXMvJXMvJXMi
LCBxZmlsZV9hcmdzLT5yZWFsX3Jvb3QsIHBvcnR2ZGIsIGRlbnRyeS0+ZF9uYW1lKTsKKwkJCXFm
aWxlKHBhdGgsIChhc3N1bWVfcm9vdF9wcmVmaXggPyByb290X3ByZWZpeCA6IE5VTEwpLCBxZmls
ZV9hcmdzKTsKKwkJfQorCisJCWlmIChxZmlsZV9hcmdzLT5ub25fb3JwaGFucyAhPSBOVUxMKSB7
CisJCQkvKiBkaXNwbGF5IG9ycGhhbiBmaWxlcyAqLworCQkJZm9yIChpID0gMDsgaSA8IHFmaWxl
X2FyZ3MtPmxlbmd0aDsgaSsrKSB7CisJCQkJaWYgKHFmaWxlX2FyZ3MtPm5vbl9vcnBoYW5zW2ld
KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocWZpbGVfYXJncy0+YmFzZW5hbWVzW2ldICE9IE5V
TEwpIHsKKwkJCQkJZm91bmQgPSAwOyAvKiB+aW52ZXJzZSByZXR1cm4gY29kZSAoYXMgc29vbiBh
cyBhbiBvcnBoYW4gaXMgZm91bmQsIHJldHVybiBub24temVybykgKi8KKwkJCQkJaWYgKCFxdWll
dCkKKwkJCQkJCXByaW50ZigiJXNcbiIsIHFhcmd2W2ldKTsKKwkJCQkJZWxzZSBicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKworCQlpZiAoYXJnc19maWxlICE9IE5VTEwgJiYgcWFyZ3YgIT0gTlVM
TCkgeworCQkJZm9yIChpID0gMDsgaSA8IHFhcmdjOyBpKyspIHsKKwkJCQlpZiAocWFyZ3ZbaV0g
IT0gTlVMTCkgZnJlZShxYXJndltpXSk7CisJCQkJcWFyZ3ZbaV0gPSBOVUxMOworCQkJfQorCQl9
CisJfSB3aGlsZSAoYXJnc19maWxlICE9IE5VTEwgJiYgcWFyZ2MgPT0gbWF4X2FyZ3MpOworCitl
eGl0OgorCisJaWYgKGFyZ3NfZmlsZSAhPSBOVUxMICYmIHFhcmd2ICE9IE5VTEwpIHsKKwkJZm9y
IChpID0gMDsgaSA8IHFhcmdjOyBpKyspCisJCQlpZiAocWFyZ3ZbaV0gIT0gTlVMTCkgZnJlZShx
YXJndltpXSk7CisJCWZyZWUocWFyZ3YpOworCX0KKworCWlmIChhcmdzX2ZpbGUgIT0gTlVMTCAm
JiBhcmdzX2ZpbGUgIT0gc3RkaW4pCisJCWZjbG9zZShhcmdzX2ZpbGUpOworCisJaWYgKHFmaWxl
X2FyZ3MgIT0gTlVMTCkgeworCQlkZXN0cm95X3FmaWxlX2FyZ3MocWZpbGVfYXJncyk7CisJCWZy
ZWUocWZpbGVfYXJncyk7CisJfQorCisJaWYgKHJvb3RfcHJlZml4ICE9IE5VTEwpCisJCWZyZWUo
cm9vdF9wcmVmaXgpOworCisJcmV0dXJuIChmb3VuZCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJ
TFVSRSk7Cit9CisKKyNlbHNlCitERUZJTkVfQVBQTEVUX1NUVUIocWZpbGUpCisjZW5kaWYKZGlm
ZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9xZ3JlcC5jIHBvcnRhZ2UtdXRpbHMtMjAw
NzAxMTUubmV3L3FncmVwLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvcWdyZXAuYwkyMDA3
LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDEx
NS5uZXcvcWdyZXAuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjM0MzkzMDA1MiArMDEwMApAQCAtMTAs
MTEgKzEwLDEyIEBACiAKICNpZmRlZiBBUFBMRVRfcWdyZXAKIAotI2RlZmluZSBRR1JFUF9GTEFH
UyAiSWlIY2UiIENPTU1PTl9GTEFHUworI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIbzpjZSIgQ09N
TU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxZ3JlcF9sb25nX29wdHNbXSA9
IHsKIAl7ImludmVydC1tYXRjaCIsICBub19hcmd1bWVudCwgTlVMTCwgJ0knfSwKIAl7Imlnbm9y
ZS1jYXNlIiwgICBub19hcmd1bWVudCwgTlVMTCwgJ2knfSwKIAl7IndpdGgtZmlsZW5hbWUiLCBu
b19hcmd1bWVudCwgTlVMTCwgJ0gnfSwKKwl7Im92ZXJsYXkiLCAgICAgICAgYV9hcmd1bWVudCwg
TlVMTCwgJ28nfSwKIAl7ImNvdW50IiwgICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwK
IAl7InJlZ2V4cCIsICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAlDT01NT05fTE9O
R19PUFRTCkBAIC0yMyw2ICsyNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxZ3JlcF9vcHRzX2hl
bHBbXSA9IHsKIAkiU2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcyIsCiAJIklnbm9yZSBjYXNlIGRp
c3RpbmN0aW9ucyIsCiAJIlByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBtYXRjaCIsCisJIk9u
bHkgY29uc2lkZXIgdGhlIDxhcmc+IG92ZXJsYXkiLAogCSJPbmx5IHByaW50IGEgY291bnQgb2Yg
bWF0Y2hpbmcgbGluZXMgcGVyIEZJTEUiLAogCSJVc2UgUEFUVEVSTiBhcyBhIHJlZ3VsYXIgZXhw
cmVzc2lvbiIsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtMzQsNiArMzYsOCBAQCBpbnQgcWdyZXBf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJaW50IGNvdW50ID0gMDsK
KwlzaG9ydCBteWVycm9yID0gMCwgcmVwbyA9IDAsIGJhZF9vdmVybGF5PTA7CisJY2hhciBvdmVy
bGF5X25hbWVbNjRdLCByZXBvX3NlYXJjaFs2NF07CiAJY2hhciAqcDsKIAljaGFyIGRvX2NvdW50
LCBkb19yZWdleDsKIAljaGFyIHNob3dfZmlsZW5hbWU7CkBAIC00MiwxMCArNDYsMTUgQEAgaW50
IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWNoYXIgYnVmMFtCVUZTSVpdOwog
CWludCByZWZsYWdzID0gUkVHX05PU1VCOwogCWNoYXIgaW52ZXJ0X21hdGNoID0gMDsKKwlvdmVy
bGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CiAKIAl0eXBlZGVmIGNoYXIgKigqRlVO
QykgKGNoYXIgKiwgY2hhciAqKTsKIAlGVU5DIHN0cmZ1bmMgPSAoRlVOQykgc3Ryc3RyOwogCisJ
Y3VyX292ZXJsYXkgPSBmaXJzdF9vdmVybGF5OworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJcmVw
b19zZWFyY2hbMF0gPSAwOworCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIs
CiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwogCkBA
IC01OCwxMiArNjcsMjYgQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
CQkJc3RyZnVuYyA9IChGVU5DKSBzdHJjYXNlc3RyOwogCQkJcmVmbGFncyB8PSBSRUdfSUNBU0U7
CiAJCQlicmVhazsKKwkJY2FzZSAnSCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVhazsKKwkJY2Fz
ZSAnbyc6CisJCQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywgc2l6
ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IGRvX2NvdW50ID0gMTsg
YnJlYWs7CiAJCWNhc2UgJ2UnOiBkb19yZWdleCA9IDE7IGJyZWFrOwotCQljYXNlICdIJzogc2hv
d19maWxlbmFtZSA9IDE7IGJyZWFrOwogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxZ3JlcCkKIAkJ
fQogCX0KKworCWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghc3RybmNtcChjdXJfb3Zlcmxh
eS0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpKQorCQkJCWJy
ZWFrOworCQl9IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKKwkJaWYg
KE5VTEwgPT0gY3VyX292ZXJsYXkpCisJCQllcnIoIiVzIDogVW5rbm93biBvdmVybGF5LCB0cnkg
J3EgLS1scy1vdmVybGF5cyciLCByZXBvX3NlYXJjaCk7CisJfQorCiAJaWYgKGFyZ2MgPT0gb3B0
aW5kKQogCQlxZ3JlcF91c2FnZShFWElUX0ZBSUxVUkUpOwogCkBAIC03NSw2ICs5OCw1MSBAQCBp
bnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCUZJTEUgKm5ld2ZwOwogCQlp
ZiAoKHAgPSBzdHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKKworCQkv
KiBmaW5kIHRoZSBvdmVybGF5LCB3ZSdyZSB3b3JraW5nIG9uLCBhbmQgY2hhbmdlIHRvIHRoZQor
CQkgKiBjb3JyZXNwb25kaW5nIChsb2NhdGlvbnxjYWNoZSkgZGlyZWN0b3J5ICovCisJCWlmICgo
cCA9IHN0cmNocihlYnVpbGQsICc6JykpKSB7CisJCQkvKiBkZWxldGUgdGhlIDo6b3ZlcmxheSAq
LworCQkJKnAgPSAwOworCisJCQkvKiByZXN0cmljdCB0aGUgc2VhcmNoIHRvIG9uZSBvdmVybGF5
IGlmIHRoZSB1c2VycyB3YW50cyBpdCAqLworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3Nl
YXJjaCwgcCsyLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChi
YWRfb3ZlcmxheSAmJiAhc3RybmNtcChvdmVybGF5X25hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlf
bmFtZSkpKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSB7CisJCQkJaWYgKHN0cm5jbXAob3Zlcmxh
eV9uYW1lLCBwKzIsIHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCQlvdmVybGF5X3RtcD1m
aXJzdF9vdmVybGF5OworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0cm5jbXAob3ZlcmxheV90bXAt
Pm5hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCQkJYnJlYWs7CisJ
CQkJCX0gd2hpbGUgKChvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCisJCQkJCWlm
IChvdmVybGF5X3RtcCkgeworCQkJCQkJY3VyX292ZXJsYXkgPSBvdmVybGF5X3RtcDsKKwkJCQkJ
CWlmIChjaGRpcihjdXJfb3ZlcmxheS0+cGF0aCkgIT0gMCkgeworCQkJCQkJCXdhcm5wKCJjaGRp
ciB0byAnJXMnIGZhaWxlZCIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkJCQlteWVycm9yID0g
MTsKKwkJCQkJCX0gZWxzZQorCQkJCQkJCWJhZF9vdmVybGF5ID0gMDsKKwkJCQkJfSBlbHNlCisJ
CQkJCQlteWVycm9yID0gMTsKKworCQkJCQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCsyLCBzaXpl
b2Yob3ZlcmxheV9uYW1lKSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKwkJCW15ZXJyb3I9MTsK
KworCQlpZiAobXllcnJvcikgeworCQkJaWYgKCFyZWluaXRpYWxpemUpCisJCQkJd2FybmYoIihj
YWNoZSB1cGRhdGUgcGVuZGluZykgJXMgOiBVbmtub3duIG92ZXJsYXkiLCBvdmVybGF5X25hbWUp
OworCQkJYmFkX292ZXJsYXkgPSAxOworCQkJbXllcnJvciA9IDA7CisJCQlyZWluaXRpYWxpemUg
PSAxOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAoKG5ld2ZwID0gZm9wZW4oZWJ1aWxkLCAi
ciIpKSAhPSBOVUxMKSB7CiAJCQl1bnNpZ25lZCBpbnQgbGluZW5vID0gMDsKIAkJCWNvdW50ID0g
MDsKQEAgLTEwMiw3ICsxNzAsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFy
Z3YpCiAJCQkJY291bnQrKzsKIAkJCQlpZiAoZG9fY291bnQpIGNvbnRpbnVlOwogCQkJCWlmICh2
ZXJib3NlIHx8IHNob3dfZmlsZW5hbWUpIHsKLQkJCQkJcHJpbnRmKCIlczoiLCBlYnVpbGQpOwor
CQkJCQlwcmludGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1aWxkKTsKIAkJCQkJ
aWYgKHZlcmJvc2UgPiAxKSBwcmludGYoIiVkOiIsIGxpbmVubyk7CiAJCQkJCXByaW50ZigiICIp
OwogCQkJCX0KQEAgLTExMCw3ICsxNzgsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAJCQl9CiAJCQlmY2xvc2UobmV3ZnApOwogCQkJaWYgKGRvX2NvdW50ICYmIGNv
dW50KSB7Ci0JCQkJaWYgKHZlcmJvc2UgfHwgc2hvd19maWxlbmFtZSkgcHJpbnRmKCIlczoiLCBl
YnVpbGQpOworCQkJCWlmICh2ZXJib3NlIHx8IHNob3dfZmlsZW5hbWUpIHByaW50ZigiJXM6OiVz
OiIsIGN1cl9vdmVybGF5LT5uYW1lLCBlYnVpbGQpOwogCQkJCXByaW50ZigiJWQiLCBjb3VudCk7
CiAJCQkJcHV0cygiIik7CiAJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUv
cXNlYXJjaC5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FzZWFyY2guYwotLS0gcG9ydGFn
ZS11dGlscy0yMDA3MDExNS9xc2VhcmNoLmMJMjAwNy0wMS0xNSAxOToyMDoxMi4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FzZWFyY2guYwkyMDA3LTAxLTE1
IDE5OjIxOjU4LjM1MzkyODUyNyArMDEwMApAQCAtOSwxMCArOSwxMiBAQAogCiAjaWZkZWYgQVBQ
TEVUX3FzZWFyY2gKIAotI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY3NTTkgiIENPTU1PTl9GTEFH
UworI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY286cHNTTkgiIENPTU1PTl9GTEFHUwogc3RhdGlj
IHN0cnVjdCBvcHRpb24gY29uc3QgcXNlYXJjaF9sb25nX29wdHNbXSA9IHsKIAl7ImFsbCIsICAg
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAogCXsiY2FjaGUiLCAgICAgbm9fYXJndW1lbnQs
IE5VTEwsICdjJ30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwKKwl7
InNob3ctcGF0aCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAogCXsic2VhcmNoIiwgICAgbm9f
YXJndW1lbnQsIE5VTEwsICdzJ30sCiAJeyJkZXNjIiwgICAgICAgYV9hcmd1bWVudCwgTlVMTCwg
J1MnfSwKIAl7Im5hbWUtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LApAQCAtMjIsNiAr
MjQsOCBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfCiBzdGF0aWMg
Y29uc3QgY2hhciAqcXNlYXJjaF9vcHRzX2hlbHBbXSA9IHsKIAkiTGlzdCB0aGUgZGVzY3JpcHRp
b25zIG9mIGV2ZXJ5IHBhY2thZ2UgaW4gdGhlIGNhY2hlIiwKIAkiVXNlIHRoZSBwb3J0YWdlIGNh
Y2hlIiwKKwkiU2VhcmNoIG9ubHkgaW4gdGhlIDxhcmc+IG92ZXJsYXkiLAorCSJTaG93IHRoZSBw
YXRoIHRvIHRoZSBlYnVpbGQiLAogCSJSZWdleCBzZWFyY2ggcGFja2FnZSBiYXNlbmFtZXMiLAog
CSJSZWdleCBzZWFyY2ggcGFja2FnZSBkZXNjcmlwdGlvbnMiLAogCSJPbmx5IHNob3cgcGFja2Fn
ZSBuYW1lIiwKQEAgLTQwLDEzICs0NCwyMiBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKIAljaGFyIGxhc3RbMTI2XSA9ICIiOwogCWNoYXIgZHBbMTI2XSA9ICIiOwog
CWNoYXIgYnBbMTI2XSA9ICIiOwotCWNoYXIgKnAsICpxLCAqc3RyOworCWNoYXIgZGVidWlsZFsx
MjZdID0gIiI7CisJc2hvcnQgcmVwbyA9IDA7CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hh
ciAqcCwgKnEsICpzdHIsIG92ZXJsYXlfbmFtZVs2NF07CiAJY2hhciAqc2VhcmNoX21lID0gTlVM
TDsKLQljaGFyIHNob3dfaG9tZXBhZ2UgPSAwLCBzaG93X25hbWVfb25seSA9IDA7CisJY2hhciBz
aG93X2hvbWVwYWdlID0gMCwgc2hvd19uYW1lX29ubHkgPSAwLCBzaG93X3BhdGhfdG9fZWJ1aWxk
ID0gMDsKIAljaGFyIHNlYXJjaF9kZXNjID0gMCwgc2VhcmNoX2FsbCA9IDAsIHNlYXJjaF9uYW1l
ID0gMSwgc2VhcmNoX2NhY2hlID0gQ0FDSEVfRUJVSUxEOwogCWNvbnN0IGNoYXIgKnNlYXJjaF92
YXJzW10gPSB7ICJERVNDUklQVElPTj0iLCAiSE9NRVBBR0U9IiB9OwogCXNpemVfdCBzZWFyY2hf
bGVuOwotCWludCBpLCBpZHg9MDsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90
bXA7CisJaW50IGksIGlkeD0wLCBteWVycm9yPTAsIGJhZF9vdmVybGF5PTA7CisKKwljdXJfb3Zl
cmxheSA9IGZpcnN0X292ZXJsYXk7CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJj
aFswXSA9IDA7CisJc3RyID0gTlVMTDsKIAogCURCRygiYXJnYz0lZCBhcmd2WzBdPSVzIGFyZ3Zb
MV09JXMiLAogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiTlVMTD8i
KTsKQEAgLTU2LDYgKzY5LDggQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAqKmFy
Z3YpCiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHFzZWFyY2gpCiAJCWNhc2UgJ2EnOiBzZWFyY2hf
YWxsID0gMTsgYnJlYWs7CiAJCWNhc2UgJ2MnOiBzZWFyY2hfY2FjaGUgPSBDQUNIRV9NRVRBREFU
QTsgYnJlYWs7CisJCWNhc2UgJ28nOiByZXBvID0gMTsgc3RybmNweShyZXBvX3NlYXJjaCwgb3B0
YXJnLCBzaXplb2YocmVwb19zZWFyY2gpKTsgYnJlYWs7CisJCWNhc2UgJ3AnOiBzaG93X3BhdGhf
dG9fZWJ1aWxkID0gMTsgYnJlYWs7CiAJCWNhc2UgJ3MnOiBzZWFyY2hfZGVzYyA9IDA7IHNlYXJj
aF9uYW1lID0gMTsgYnJlYWs7CiAJCWNhc2UgJ1MnOiBzZWFyY2hfZGVzYyA9IDE7IHNlYXJjaF9u
YW1lID0gMDsgYnJlYWs7CiAJCWNhc2UgJ04nOiBzaG93X25hbWVfb25seSA9IDE7IGJyZWFrOwpA
QCAtNjMsNiArNzgsMTggQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CiAJCX0KIAl9CiAKKwlpZiAocmVwbykgeworCQlkbyB7CisJCQlpZiAoISBzdHJuY21wKGN1cl9v
dmVybGF5LT5uYW1lLCByZXBvX3NlYXJjaCwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSkpCisJ
CQkJYnJlYWs7CisJCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOwor
CQlpZiAoTlVMTCA9PSBjdXJfb3ZlcmxheSkKKwkJCWVycigiJXMgOiBVbmtub3duIG92ZXJsYXks
IHRyeSAncSAtLWxzLW92ZXJsYXlzJyIsIHJlcG9fc2VhcmNoKTsKKwkJaWYgKHNlYXJjaF9jYWNo
ZSA9PSBDQUNIRV9NRVRBREFUQSAmJiAhc3RybmNtcChjdXJfb3ZlcmxheS0+Y2FjaGUsIi92YXIv
ZW1wdHkiLHNpemVvZihjdXJfb3ZlcmxheS0+Y2FjaGUpKSkKKwkJCWVycigiTm8gY2FjaGUgZGVm
aW5lZCBmb3IgdGhlICclcycgb3ZlcmxheSIsIGN1cl9vdmVybGF5LT5uYW1lKTsKKwl9CisKKwog
CWlmIChzZWFyY2hfYWxsKSB7CiAJCXNlYXJjaF9kZXNjID0gMTsKIAkJc2VhcmNoX25hbWUgPSAw
OwpAQCAtODYsNiArMTEzLDYwIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogCQlpZiAoIWVidWlsZFswXSkKIAkJCWNvbnRpbnVlOwogCisJCS8qIGZpbmQgdGhlIG92
ZXJsYXksIHdlJ3JlIHdvcmtpbmcgb24sIGFuZCBjaGFuZ2UgdG8gdGhlCisJCSAqIGNvcnJlc3Bv
bmRpbmcgKGxvY2F0aW9ufGNhY2hlKSBkaXJlY3RvcnkgKi8KKwkJaWYgKChwID0gc3RyY2hyKGVi
dWlsZCwgJzonKSkpIHsKKwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQkvKiByZXN0cmlj
dCB0aGUgc2VhcmNoIHRvIG9uZSBvdmVybGF5IGlmIHRoZSB1c2VycyB3YW50cyBpdCAqLworCQkJ
aWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCsyLCBzaXplb2YocmVwb19zZWFyY2gp
KSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChiYWRfb3ZlcmxheSAmJiAhc3RybmNtcChvdmVybGF5
X25hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYg
KHN0cm5jbXAob3ZlcmxheV9uYW1lLCBwKzIsIHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJ
CWxhc3RbMF0gPSAwOworCQkJCW92ZXJsYXlfdG1wPWZpcnN0X292ZXJsYXk7CisJCQkJZG8gewor
CQkJCQlpZiAoIXN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlf
dG1wLT5uYW1lKSkpCisJCQkJCQlicmVhazsKKwkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3Zl
cmxheV90bXAtPm5leHQpKTsKKworCQkJCWlmIChvdmVybGF5X3RtcCkgeworCQkJCQljdXJfb3Zl
cmxheT1vdmVybGF5X3RtcDsKKwkJCQkJc3dpdGNoIChzZWFyY2hfY2FjaGUpIHsKKwkJCQkJY2Fz
ZSBDQUNIRV9FQlVJTEQ6CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDAp
IHsKKwkJCQkJCQl3YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0
aCk7CisJCQkJCQkJbXllcnJvciA9IDE7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9IGVsc2UK
KwkJCQkJCQliYWRfb3ZlcmxheSA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBDQUNIRV9N
RVRBREFUQToKKwkJCQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+Y2FjaGUpICE9IDApIHsKKwkJ
CQkJCQl3YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQsIHNraXBwaW5nIHRoZSAlcyByZXBvc2l0
b3J5IiwgY3VyX292ZXJsYXktPmNhY2hlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJCQkJbXll
cnJvciA9IDE7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9IGVsc2UKKwkJCQkJCQliYWRfb3Zl
cmxheSA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZQorCQkJCQlteWVycm9y
ID0gMTsKKwkJCQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCsyLCBzaXplb2Yob3ZlcmxheV9uYW1l
KSk7CisJCQl9CisJCX0gZWxzZQorCQkJbXllcnJvcisrOworCisJCWlmIChteWVycm9yKSB7CisJ
CQlpZiAoIXJlaW5pdGlhbGl6ZSkKKwkJCQl3YXJuZigiKGNhY2hlIHVwZGF0ZSBwZW5kaW5nKSAl
cyA6IFVua25vd24gb3ZlcmxheSIsIG92ZXJsYXlfbmFtZSk7CisJCQliYWRfb3ZlcmxheSA9IDE7
CisJCQlteWVycm9yID0gMDsKKwkJCXJlaW5pdGlhbGl6ZSA9IDE7CisJCQljb250aW51ZTsKKwkJ
fQorCisKIAkJc3dpdGNoIChzZWFyY2hfY2FjaGUpIHsKIAogCQljYXNlIENBQ0hFX01FVEFEQVRB
OiB7CkBAIC05MywxMSArMTc0LDI4IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCQkJaWYgKChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUoZWJ1aWxkKSkgIT0gTlVM
TCkgewogCQkJCWlmICgoc3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxhc3QpKSAhPSAwKSB7CiAJ
CQkJCXN0cm5jcHkobGFzdCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9mKGxhc3QpKTsKLQkJCQkJ
aWYgKChyZW1hdGNoKHNlYXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNhY2hlLT5ERVNDUklQVElP
TiA6IGVidWlsZCksIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09IDApCi0JCQkJCQlwcmlu
dGYoIiVzJXMvJXMlcyVzICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLCBCTFVF
LAotCQkJCQkJICAgICAgIHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0JCQkJCQkgICAgICAgKHNo
b3dfbmFtZV9vbmx5ID8gIiIgOgotCQkJCQkJICAgICAgICAoc2hvd19ob21lcGFnZSA/IHBjYWNo
ZS0+SE9NRVBBR0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQlpZiAoIXNlYXJjaF9h
bGwgJiYgKHJlbWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBU
SU9OIDogZWJ1aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgIT0gMCkgeworCQkJCQkJ
Y2FjaGVfZnJlZShwY2FjaGUpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlpZiAo
c2hvd19wYXRoX3RvX2VidWlsZCkgeworCQkJCQkJLyogZGVsZXRlIHRoZSA6Om92ZXJsYXkgKi8K
KwkJCQkJCSpwID0gMDsKKwkJCQkJCXN0cm5jcHkoZGVidWlsZCwgZWJ1aWxkLCBzaXplb2YoZGVi
dWlsZCkpOworCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXNcdCAlcyVzLyVzL1xuIiwKKwkJ
CQkJCUJPTEQsIHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQlCTFVFLCBwY2FjaGUtPmF0
b20tPlBOLAorCQkJCQkJWUVMTE9XLCBwY2FjaGUtPmF0b20tPk9WRVJMQVksIE5PUk0sCisJCQkJ
CQljdXJfb3ZlcmxheS0+cGF0aCwgZGlybmFtZShkZWJ1aWxkKSk7CisJCQkJCX0gZWxzZSB7CisJ
CQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJQk9MRCwgcGNhY2hl
LT5hdG9tLT5DQVRFR09SWSwKKwkJCQkJCUJMVUUsIHBjYWNoZS0+YXRvbS0+UE4sCisJCQkJCQlZ
RUxMT1csIHBjYWNoZS0+YXRvbS0+T1ZFUkxBWSwgTk9STSwKKwkJCQkJCShzaG93X25hbWVfb25s
eSA/ICIiIDoKKwkJCQkJCShzaG93X2hvbWVwYWdlID8gcGNhY2hlLT5IT01FUEFHRSA6IHBjYWNo
ZS0+REVTQ1JJUFRJT04pKSk7CisJCQkJCX0KIAkJCQl9CiAJCQkJY2FjaGVfZnJlZShwY2FjaGUp
OwogCQkJfSBlbHNlIHsKQEAgLTExMCw2ICsyMDgsOSBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKIAogCQljYXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklMRSAqZWJ1
aWxkZnA7CisJCQkvKiBkZWxldGUgdGhlIDo6b3ZlcmxheSAqLworCQkJKnAgPSAwOworCiAJCQlz
dHIgPSB4c3RyZHVwKGVidWlsZCk7CiAJCQlwID0gKGNoYXIgKikgZGlybmFtZShzdHIpOwogCkBA
IC0xMzQsOSArMjM1LDE4IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQogCQkJCQkJCS8qIGRvaW5nIG9wZXJhdGlvbnMgd2l0aCB0aGVtLiAqLwogCQkJCQkJCXN0cm5j
cHkoZHAsIHAsIHNpemVvZihkcCkpOwogCQkJCQkJCXN0cm5jcHkoYnAsIHAsIHNpemVvZihicCkp
OwotCQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsCi0JCQkJCQkJCUJPTEQsIGRpcm5h
bWUoZHApLCBCTFVFLCBiYXNlbmFtZShicCksIE5PUk0sCisJCQkJCQkJc3RybmNweShkZWJ1aWxk
LCBlYnVpbGQsIHNpemVvZihkZWJ1aWxkKSk7CisJCQkJCQkJaWYgKHNob3dfcGF0aF90b19lYnVp
bGQpIHsKKwkJCQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXNcdCAlcyVzLyVzL1xuIiwKKwkJ
CQkJCQkJQk9MRCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwKKwkJCQkJCQkJWUVM
TE9XLCBjdXJfb3ZlcmxheS0+bmFtZSwgTk9STSwKKwkJCQkJCQkJY3VyX292ZXJsYXktPnBhdGgs
IGRpcm5hbWUoZGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXByaW50ZigiJXMl
cy8lcyVzJXM6OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUoZHApLCBCTFVFLCBi
YXNlbmFtZShicCksCisJCQkJCQkJCVlFTExPVywgY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCiAJ
CQkJCQkJCShzaG93X25hbWVfb25seSA/ICIiIDogcSkpOworCQkJCQkJCX0KIAkJCQkJCQlicmVh
azsKIAkJCQkJCX0KIAkJCQkJfQpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L3F1
c2UuYyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xdXNlLmMKLS0tIHBvcnRhZ2UtdXRpbHMt
MjAwNzAxMTUvcXVzZS5jCTIwMDctMDEtMTUgMTk6MjA6MTIuMDAwMDAwMDAwICswMTAwCisrKyBw
b3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xdXNlLmMJMjAwNy0wMS0xNSAxOToyMTo1OC4zNjE5
MjczMDcgKzAxMDAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBH
ZW50b28gRm91bmRhdGlvbgogICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgotICogJEhlYWRlcjogL3Zhci9jdnNyb290L2dl
bnRvby1wcm9qZWN0cy9wb3J0YWdlLXV0aWxzL3F1c2UuYyx2IDEuNTUgMjAwNy8wMS8wOSAxMzox
NTo0MyB2YXBpZXIgRXhwICQKKyAqICRIZWFkZXI6IC92YXIvY3Zzcm9vdC9nZW50b28tcHJvamVj
dHMvcG9ydGFnZS11dGlscy9xdXNlLmMsdiAxLjU0IDIwMDYvMTIvMjUgMTY6Mzg6Mzcgc29sYXIg
RXhwICQKICAqCiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA2IE5lZCBMdWRkICAgICAgICAtIDxzb2xh
ckBnZW50b28ub3JnPgogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdlciAgLSA8
dmFwaWVyQGdlbnRvby5vcmc+CkBAIC0xNCwxMCArMTQsMTEgQEAKICBxdXNlIC1LZSAtLSAgbmxz
CiAqLwogCi0jZGVmaW5lIFFVU0VfRkxBR1MgImVhdktMREY6TiIgQ09NTU9OX0ZMQUdTCisjZGVm
aW5lIFFVU0VfRkxBR1MgImVhbzp2S0xERjpOIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qg
b3B0aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHRzW10gPSB7CiAJeyJleGFjdCIsICAgICBub19hcmd1
bWVudCwgTlVMTCwgJ2UnfSwKIAl7ImFsbCIsICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9
LAorCXsib3ZlcmxheSIsICAgIGFfYXJndW1lbnQsIE5VTEwsICdvJ30sCiAJeyJrZXl3b3JkcyIs
ICBub19hcmd1bWVudCwgTlVMTCwgJ0snfSwKIAl7ImxpY2Vuc2UiLCAgIG5vX2FyZ3VtZW50LCBO
VUxMLCAnTCd9LAogCXsiZGVzY3JpYmUiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdEJ30sCkBAIC0y
OCw2ICsyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHQKIHN0
YXRpYyBjb25zdCBjaGFyICpxdXNlX29wdHNfaGVscFtdID0gewogCSJTaG93IGV4YWN0IG5vbiBy
ZWdleHAgbWF0Y2hpbmcgdXNpbmcgc3RyY21wIiwKIAkiU2hvdyBhbm5veWluZyB0aGluZ3MgaW4g
SVVTRSIsCisJIk9ubHkgY29uc2lkZXIgdGhlIDxhcmc+IG92ZXJsYXkiLAogCSJVc2UgdGhlIEtF
WVdPUkRTIHZzIElVU0UiLAogCSJVc2UgdGhlIExJQ0VOU0UgdnMgSVVTRSIsCiAJIkRlc2NyaWJl
IHRoZSBVU0UgZmxhZyIsCkBAIC0zNSwxMCArMzcsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnF1
c2Vfb3B0c19oZWxwW10gPSB7CiAJIk9ubHkgc2hvdyBwYWNrYWdlIG5hbWUiLAogCUNPTU1PTl9P
UFRTX0hFTFAKIH07Ci1zdGF0aWMgY29uc3QgY2hhciBxdXNlX3Jjc2lkW10gPSAiJElkOiBxdXNl
LmMsdiAxLjU1IDIwMDcvMDEvMDkgMTM6MTU6NDMgdmFwaWVyIEV4cCAkIjsKK3N0YXRpYyBjb25z
dCBjaGFyIHF1c2VfcmNzaWRbXSA9ICIkSWQ6IHF1c2UuYyx2IDEuNTQgMjAwNi8xMi8yNSAxNjoz
ODozNyBzb2xhciBFeHAgJCI7CiAjZGVmaW5lIHF1c2VfdXNhZ2UocmV0KSB1c2FnZShyZXQsIFFV
U0VfRkxBR1MsIHF1c2VfbG9uZ19vcHRzLCBxdXNlX29wdHNfaGVscCwgbG9va3VwX2FwcGxldF9p
ZHgoInF1c2UiKSkKIAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpOworaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBzaG9ydCByZXBv
LCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJndik7CiAKIGNoYXIgcXVz
ZV9uYW1lX29ubHkgPSAwOwogCkBAIC04MSw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2hp
Z2hsaWdodGVkX3VzZV9mbGFncygKIAl9CiB9CiAKLWludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50
IGluZCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQg
aW5kLCBzaG9ydCByZXBvLCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJn
dikKIHsKICNkZWZpbmUgTlVNX1NFQVJDSF9GSUxFUyBBUlJfU0laRShzZWFyY2hfZmlsZXMpCiAJ
Y2hhciBidWZbQlVGU0laRV0sICpwOwpAQCAtOTEsMTE1ICs5MywxNTIgQEAgaW50IHF1c2VfZGVz
Y3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYwogCUZJTEUgKmZwW05VTV9TRUFSQ0hfRklMRVNd
OwogCURJUiAqZDsKIAlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5
OwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgewotCQlzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvJXMiLCBwb3J0ZGlyLCBzZWFyY2hfZmls
ZXNbaV0pOwotCQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQotCQkJd2Fy
bnAoInNraXBwaW5nICVzIiwgc2VhcmNoX2ZpbGVzW2ldKTsKLQl9CisJY3VyX292ZXJsYXk9Zmly
c3Rfb3ZlcmxheTsKIAotCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgewotCQlzID0gc3Ry
bGVuKGFyZ3ZbaV0pOworCWRvIHsKKwkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwg
Y3VyX292ZXJsYXktPm5hbWUsIHNpemVvZihyZXBvX3NlYXJjaCkpKQorCQkJY29udGludWU7CisJ
CWZvciAoaSA9IDA7IGkgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKKwkJCXNucHJpbnRmKGJ1
Ziwgc2l6ZW9mKGJ1ZiksICIlcy9wcm9maWxlcy8lcyIsIGN1cl9vdmVybGF5LT5wYXRoLCBzZWFy
Y2hfZmlsZXNbaV0pOworCQkJaWYgKChmcFtpXSA9IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkK
KwkJCQlpZiAodmVyYm9zZT4yKQorCQkJCQl3YXJucCgic2tpcHBpbmcgJXMgZm9yIHRoZSAlcyBv
dmVybGF5Iiwgc2VhcmNoX2ZpbGVzW2ldLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCX0KIAotCQlm
b3IgKGYgPSAwOyBmIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7Ci0JCQlpZiAoZnBbZl0gPT0g
TlVMTCkKLQkJCQljb250aW51ZTsKKwkJZm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7CisJ
CQlzID0gc3RybGVuKGFyZ3ZbaV0pOwogCi0JCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVm
KSwgZnBbZl0pICE9IE5VTEwpIHsKLQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0g
J1xuJykKKwkJCWZvciAoZiA9IDA7IGYgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIHsKKwkJCQlp
ZiAoZnBbZl0gPT0gTlVMTCkKIAkJCQkJY29udGludWU7CiAKLQkJCQlpZiAoKHAgPSBzdHJyY2hy
KGJ1ZiwgJ1xuJykpICE9IE5VTEwpCi0JCQkJCSpwID0gJ1wwJzsKKwkJCQl3aGlsZSAoZmdldHMo
YnVmLCBzaXplb2YoYnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKKwkJCQkJaWYgKGJ1ZlswXSA9PSAn
IycgfHwgYnVmWzBdID09ICdcbicpCisJCQkJCQljb250aW51ZTsKIAotCQkJCXN3aXRjaCAoZikg
ewotCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1c2UuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJuY21w
KGJ1ZiwgYXJndltpXSwgcykpCi0JCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0g
PT0gJy0nKSB7Ci0JCQkJCQkJCXByaW50ZigiICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwgQk9M
RCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7Ci0JCQkJCQkJCWdvdG8gc2tp
cF9maWxlOwotCQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGJ1
ZiwgJ1xuJykpICE9IE5VTEwpCisJCQkJCQkqcCA9ICdcMCc7CiAKLQkJCQkJY2FzZSAxOiAvKiBM
b2NhbCB1c2UubG9jYWwuZGVzYyAqLwotCQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkg
PT0gTlVMTCkKKwkJCQkJc3dpdGNoIChmKSB7CisJCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1c2Uu
ZGVzYyAqLworCQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJCQkJCQlp
ZiAoYnVmW3NdID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlmIChvdmVy
bGF5X2dlbnRvbyAmJiBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlw
cmludGYoIiAlc2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3Zb
aV0sIE5PUk0sIGJ1ZitzKzMpOworCQkJCQkJCQkJZWxzZQorCQkJCQkJCQkJCXByaW50ZigiICgl
cykgJXNnbG9iYWwlczolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9S
TSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmls
ZTsKKwkJCQkJCQkJfQogCQkJCQkJCWJyZWFrOwotCQkJCQkJKytwOwotCQkJCQkJaWYgKCFzdHJu
Y21wKHAsIGFyZ3ZbaV0sIHMpKSB7Ci0JCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysxXSA9
PSAnLScpIHsKLQkJCQkJCQkJKnAgPSAnXDAnOwotCQkJCQkJCQlwcmludGYoIiAlc2xvY2FsJXM6
JXMlcyVzOiVzJXMlcyAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9M
RCwgYnVmLCBOT1JNLCBwK3MrMyk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJYnJlYWs7CiAK
LQkJCQkJY2FzZSAyOiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLwotCQkJCQkJaWYgKCFz
dHJjbXAoYnVmLCBhcmd2W2ldKSkgewotCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMlczog
JXMgYXJjaGl0ZWN0dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBhcmd2
W2ldKTsKLQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJ
CQkJY2FzZSAxOiAvKiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLworCQkJCQkJCWlmICgocCA9IHN0
cmNocihidWYsICc6JykpID09IE5VTEwpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCSsrcDsKKwkJ
CQkJCQlpZiAoIXN0cm5jbXAocCwgYXJndltpXSwgcykpIHsKKwkJCQkJCQkJaWYgKHBbc10gPT0g
JyAnICYmIHBbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCSpwID0gJ1wwJzsKKwkJCQkJCQkJCWlm
IChvdmVybGF5X2dlbnRvbyAmJiBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJ
CQkJCQlwcmludGYoIiAlc2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xuIiwgQk9MRCwgTk9STSwg
QkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JNLCBwK3MrMyk7CisJCQkJCQkJCQll
bHNlCisJCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xu
IiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJP
TEQsIGJ1ZiwgTk9STSwgcCtzKzMpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFr
OwogCi0JCQkJCWNhc2UgMzogLyogTGFuZ3VhZ2VzIGxhbmcuZGVzYyAqLwotCQkJCQkJaWYgKCFz
dHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCi0JCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVm
W3MrMV0gPT0gJy0nKSB7Ci0JCQkJCQkJCXByaW50ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGlu
Z3VhXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJ
CWNhc2UgMjogLyogQXJjaGl0ZWN0dXJlcyBhcmNoLmxpc3QgKi8KKwkJCQkJCQlpZiAoIXN0cmNt
cChidWYsIGFyZ3ZbaV0pKSB7CisJCQkJCQkJCWlmIChvdmVybGF5X2dlbnRvbyAmJiBjdXJfb3Zl
cmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMl
czogJXMgYXJjaGl0ZWN0dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBh
cmd2W2ldKTsKKwkJCQkJCQkJZWxzZQorCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2FyY2glczol
cyVzJXM6ICVzIGFyY2hpdGVjdHVyZVxuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0s
IEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwogCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsK
IAkJCQkJCQl9Ci0JCQkJCQlicmVhazsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSAzOiAv
KiBMYW5ndWFnZXMgbGFuZy5kZXNjICovCisJCQkJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJndltp
XSwgcykpCisJCQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09ICctJykgewor
CQkJCQkJCQkJaWYgKG92ZXJsYXlfZ2VudG9vICYmIGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2Vu
dG9vKQorCQkJCQkJCQkJCXByaW50ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBC
T0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UK
KwkJCQkJCQkJCQlwcmludGYoIiAoJXMpICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBj
dXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3Mr
Myk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJfQorCQkJCQkJCWJyZWFrOwor
CQkJCQl9CiAJCQkJfQotCQkJfQogCiBza2lwX2ZpbGU6Ci0JCQlyZXdpbmQoZnBbZl0pOworCQkJ
CXJld2luZChmcFtmXSk7CisJCQl9CisKKwkJCWlmIChpID09IChhcmdjIC0gMSkpCisJCQkJZm9y
IChmPTA7IGY8TlVNX1NFQVJDSF9GSUxFUzsgKytmKQorCQkJCQlpZiAoZnBbZl0pIHsKKwkJCQkJ
CWZjbG9zZShmcFtmXSk7CisJCQkJCQlmcFtmXSA9IE5VTEw7CisJCQkJCX0KIAkJfQotCX0KIAot
CWZvciAoZj0wOyBmPE5VTV9TRUFSQ0hfRklMRVM7ICsrZikKLQkJaWYgKGZwW2ZdICE9IE5VTEwp
Ci0JCQlmY2xvc2UoZnBbZl0pOworCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+
bmV4dCkpOwogCiAJLyogbm93IHNjYW4gdGhlIGRlc2MgZGlyICovCi0Jc25wcmludGYoYnVmLCBz
aXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwgcG9ydGRpcik7Ci0JZCA9IG9wZW5kaXIo
YnVmKTsKLQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewotCQlpZiAoc3RyY21w
KGRlLT5kX25hbWUrc3RybGVuKGRlLT5kX25hbWUpLTUsICIuZGVzYyIpKQorCWN1cl9vdmVybGF5
PWZpcnN0X292ZXJsYXk7CisJZG8geworCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNo
LCBjdXJfb3ZlcmxheS0+bmFtZSwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCiAJCQljb250aW51ZTsK
LQotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIHBv
cnRkaXIsIGRlLT5kX25hbWUpOwotCQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVM
TCkgewotCQkJd2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzsgc2tpcHBpbmci
LCBkZS0+ZF9uYW1lKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVz
L2Rlc2MvIiwgY3VyX292ZXJsYXktPnBhdGgpOworCQlpZiAoIShkID0gb3BlbmRpcihidWYpKSkg
eworCQkJaWYgKHZlcmJvc2U+MikKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAlcyAtPiBza2lw
cGluZyIsIGJ1Zik7CiAJCQljb250aW51ZTsKIAkJfQorCQl3aGlsZSAoKGRlID0gcmVhZGRpcihk
KSkgIT0gTlVMTCkgeworCQkJaWYgKHN0cmNtcChkZS0+ZF9uYW1lK3N0cmxlbihkZS0+ZF9uYW1l
KS01LCAiLmRlc2MiKSkKKwkJCQljb250aW51ZTsKIAotCQl3aGlsZSAoZmdldHMoYnVmLCBzaXpl
b2YoYnVmKSwgZnBbMF0pICE9IE5VTEwpIHsKLQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1Zlsw
XSA9PSAnXG4nKQorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rl
c2MvJXMiLCBjdXJfb3ZlcmxheS0+cGF0aCwgZGUtPmRfbmFtZSk7CisJCQlpZiAoKGZwWzBdPWZv
cGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkgeworCQkJCXdhcm4oIkNvdWxkIG5vdCBvcGVuICclcycg
Zm9yIHJlYWRpbmc7IHNraXBwaW5nIiwgZGUtPmRfbmFtZSk7CiAJCQkJY29udGludWU7CisJCQl9
CiAKLQkJCWlmICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKLQkJCQkqcCA9ICdc
MCc7CisJCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbMF0pICE9IE5VTEwpIHsK
KwkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJCQkJY29udGludWU7
CiAKLQkJCWlmICgocCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwpIHsKKwkJCQlpZiAoKHAg
PSBzdHJyY2hyKGJ1ZiwgJ1xuJykpICE9IE5VTEwpCisJCQkJCSpwID0gJ1wwJzsKKworCQkJCWlm
ICgocCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwpIHsKIGludmFsaWRfbGluZToKLQkJCQl3
YXJuKCJJbnZhbGlkIGxpbmUgaW4gJyVzJzogJXMiLCBkZS0+ZF9uYW1lLCBidWYpOwotCQkJCWNv
bnRpbnVlOwotCQkJfQotCQkJd2hpbGUgKHBbLTFdICE9ICcgJyAmJiBwWzFdICE9ICcgJykgewot
CQkJCS8qIG1heWJlIHRoZSBmbGFnIGhhcyBhICctJyBpbiBpdCAuLi4gKi8KLQkJCQlpZiAoKHAg
PSBzdHJjaHIocCsxLCAnLScpKSA9PSBOVUxMKQotCQkJCQlnb3RvIGludmFsaWRfbGluZTsKLQkJ
CX0KLQkJCXBbLTFdID0gJ1wwJzsKLQkJCXAgKz0gMjsKKwkJCQkJd2FybigiSW52YWxpZCBsaW5l
IGluICclcyc6ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKKwkJCQkJY29udGludWU7CisJCQkJfQor
CQkJCXdoaWxlIChwWy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsKKwkJCQkJLyogbWF5YmUg
dGhlIGZsYWcgaGFzIGEgJy0nIGluIGl0IC4uLiAqLworCQkJCQlpZiAoKHAgPSBzdHJjaHIocCsx
LCAnLScpKSA9PSBOVUxMKQorCQkJCQkJZ290byBpbnZhbGlkX2xpbmU7CisJCQkJfQorCQkJCXBb
LTFdID0gJ1wwJzsKKwkJCQlwICs9IDI7CiAKLQkJCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkr
KykKLQkJCQlpZiAoIXN0cmNtcChhcmd2W2ldLCBidWYpKQotCQkJCQlwcmludGYoIiAlcyVzJXM6
JXMlcyVzOiAlc1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9S
TSwgcCk7Ci0JCX0KLQkJY2xvc2UoZik7Ci0JfQotCWNsb3NlZGlyKGQpOworCQkJCWZvciAoaSA9
IGluZDsgaSA8IGFyZ2M7IGkrKykKKwkJCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgYnVmKSkgewor
CQkJCQkJaWYgKG92ZXJsYXlfZ2VudG9vICYmIGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9v
KQorCQkJCQkJCXByaW50ZigiICVzJXMlczolcyVzJXM6ICVzXG4iLCBCT0xELCBkZS0+ZF9uYW1l
LCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwcmlu
dGYoIiAoJXMpICVzJXMlczolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwg
ZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7CisJCQkJCX0KIAorCQkJ
fQorCQkJZmNsb3NlKGZwWzBdKTsKKwkJfQorCQljbG9zZWRpcihkKTsKKwl9IHdoaWxlICgoY3Vy
X292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA3LDYg
KzI0Niw5IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCUZJTEUg
KmZwOwogCWNoYXIgKnA7CisJc2hvcnQgbXllcnJvciA9IDAsIHJlcG8gPSAwOworCWNoYXIgcmVw
b19zZWFyY2hbNjRdOworCWNoYXIgb3ZlcmxheV9uYW1lWzY0XTsKIAogCWNoYXIgYnVmMFtfUV9Q
QVRIX01BWF07CiAJY2hhciBidWYxW19RX1BBVEhfTUFYXTsKQEAgLTIxNyw4ICsyNTksMTMgQEAg
aW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY29uc3QgY2hhciAqc2VhcmNo
X3ZhciA9IE5VTEw7CiAJY29uc3QgY2hhciAqc2VhcmNoX3ZhcnNbXSA9IHsgIklVU0U9IiwgIktF
WVdPUkRTPSIsICJMSUNFTlNFPSIsIHNlYXJjaF92YXIgfTsKIAlzaG9ydCBxdXNlX2FsbCA9IDA7
Ci0JaW50IHJlZ2V4cF9tYXRjaGluZyA9IDEsIGksIGlkeCA9IDA7CisJaW50IHJlZ2V4cF9tYXRj
aGluZyA9IDEsIGksIGlkeCA9IDAsIGJhZF9vdmVybGF5ID0gMDsKIAlzaXplX3Qgc2VhcmNoX2xl
bjsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisKKwljdXJfb3Zlcmxh
eSA9IGZpcnN0X292ZXJsYXk7CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFsw
XSA9IDA7CiAKIAlEQkcoImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJn
YywgYXJndlswXSwgYXJnYyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CkBAIC0yMjcsNiArMjc0
LDEwIEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlzd2l0Y2ggKGkp
IHsKIAkJY2FzZSAnZSc6IHJlZ2V4cF9tYXRjaGluZyA9IDA7IGJyZWFrOwogCQljYXNlICdhJzog
cXVzZV9hbGwgPSAxOyBicmVhazsKKwkJY2FzZSAnbyc6CisJCQlyZXBvID0gMTsKKwkJCXN0cm5j
cHkocmVwb19zZWFyY2gsIG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsK
IAkJY2FzZSAnSyc6IGlkeCA9IDE7IGJyZWFrOwogCQljYXNlICdMJzogaWR4ID0gMjsgYnJlYWs7
CiAJCWNhc2UgJ0QnOiBpZHggPSAtMTsgYnJlYWs7CkBAIC0yMzUsMTMgKzI4NiwyNSBAQCBpbnQg
cXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMo
cXVzZSkKIAkJfQogCX0KLQlpZiAoYXJnYyA9PSBvcHRpbmQgJiYgIXF1c2VfYWxsICYmIGlkeCA+
PSAwKQorCisJaWYgKHJlcG8pIHsKKwkJZG8geworCQkJaWYgKCFzdHJuY21wKGN1cl9vdmVybGF5
LT5uYW1lLCByZXBvX3NlYXJjaCwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSkpCisJCQkJYnJl
YWs7CisJCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQlpZiAo
TlVMTCA9PSBjdXJfb3ZlcmxheSkKKwkJCWVycigiJXMgOiBVbmtub3duIG92ZXJsYXksIHRyeSAn
cSAtLWxzLW92ZXJsYXlzJyIsIHJlcG9fc2VhcmNoKTsKKwl9CisKKwlpZiAoYXJnYyA9PSBvcHRp
bmQgJiYgIXF1c2VfYWxsICYmIGlkeCA+PSAwKSB7CisJCWlmIChpZHggPT0gMykKKwkJCWZyZWUo
c2VhcmNoX3ZhcnNbaWR4XSk7CiAJCXF1c2VfdXNhZ2UoRVhJVF9GQUlMVVJFKTsKKwl9CiAKIAlp
ZiAoaWR4ID09IC0xKQotCQlyZXR1cm4gcXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgYXJnYywg
YXJndik7CisJCXJldHVybiBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCByZXBvLCByZXBvX3Nl
YXJjaCwgYXJnYywgYXJndik7CiAKLQlpZiAocXVzZV9hbGwpIG9wdGluZCA9IGFyZ2M7CiAJaW5p
dGlhbGl6ZV9lYnVpbGRfZmxhdCgpOwkvKiBzZXRzIG91ciBwd2QgdG8gJFBPUlRESVIgKi8KIAog
CXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoX3ZhcnNbaWR4XSk7CkBAIC0yNTMsNiArMzE2LDU0
IEBAIGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlGSUxFICpuZXdmcDsK
IAkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJ1xuJykpICE9IE5VTEwpCiAJCQkqcCA9IDA7CisJ
CWlmICgocCA9IHN0cmNocihlYnVpbGQsICc6JykpKQorCQl7CisJCQkvKiBkZWxldGUgdGhlIDo6
b3ZlcmxheSAqLworCQkJKnAgPSAwOworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJj
aCwgcCsyLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChiYWRf
b3ZlcmxheSAmJiAhc3RybmNtcChvdmVybGF5X25hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfbmFt
ZSkpKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSB7CisJCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9u
YW1lLCBwKzIsIHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCQlvdmVybGF5X3RtcD1maXJz
dF9vdmVybGF5OworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0cm5jbXAob3ZlcmxheV90bXAtPm5h
bWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCQkJYnJlYWs7CisJCQkJ
CX0gd2hpbGUgKChvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCQkJCQlpZiAob3Zl
cmxheV90bXApCisJCQkJCXsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7CisJCQkJ
CQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3YXJucCgiY2hk
aXIgdG8gJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJCQkJbXllcnJvcj0x
OworCQkJCQkJfSBlbHNlCisJCQkJCQkJYmFkX292ZXJsYXkgPSAwOworCQkJCQl9IGVsc2UKKwkJ
CQkJCW15ZXJyb3I9MTsKKwkJCQkJc3RybmNweShvdmVybGF5X25hbWUsIHArMiwgc2l6ZW9mKG92
ZXJsYXlfbmFtZSkpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlCisJCQlteWVycm9yPTE7CisKKwkJ
aWYgKG15ZXJyb3IpIHsKKwkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCXdhcm5mKCIoY2FjaGUg
dXBkYXRlIHBlbmRpbmcpICVzIDogVW5rbm93biBvdmVybGF5Iiwgb3ZlcmxheV9uYW1lKTsKKwkJ
CWJhZF9vdmVybGF5ID0gMTsKKwkJCW15ZXJyb3IgPSAwOworCQkJcmVpbml0aWFsaXplID0gMTsK
KwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChxdXNlX2FsbCkgJiYgb3B0aW5kIT1hcmdjKSB7
CisJCQlmb3IgKGk9b3B0aW5kO2k8YXJnYztpKyspCisJCQkJaWYgKChzdHJzdHIoZWJ1aWxkLGFy
Z3ZbaV0pKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaT09YXJnYykKKwkJCQljb250aW51ZTsKKwkJ
fQorCiAJCWlmICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJyIikpICE9IE5VTEwpIHsKIAkJCXVu
c2lnbmVkIGludCBsaW5lbm8gPSAwOwogCQkJY2hhciByZXZpc2lvbltzaXplb2YoYnVmMCldOwpA
QCAtMzc2LDE1ICs0ODcsMTggQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CiAJCQkJCWlmICh2ZXJib3NlID4gMykKIAkJCQkJCXByaW50ZigiJXMgJXMgJXMgIiwgKnVzZXIg
PyB1c2VyIDogIk1JU1NJTkciLCAqcmV2aXNpb24gPyByZXZpc2lvbiA6ICJNSVNTSU5HIiwgKmRh
dGUgPyBkYXRlIDogIk1JU1NJTkciKTsKIAotCQkJCQlwcmludGYoIiVzJXMlcyAiLCBDWUFOLCBl
YnVpbGQsIE5PUk0pOwotCQkJCQlwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoJmJ1ZjBbc2Vh
cmNoX2xlbisxXSwgb3B0aW5kLCBhcmdjLCBhcmd2KTsKKwkJCQkJcHJpbnRmKCIlcyVzOjolcyVz
ICIsIENZQU4sIGN1cl9vdmVybGF5LT5uYW1lLCBlYnVpbGQsIE5PUk0pOworCQkJCQlpZiAocXVz
ZV9hbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgYXJnYywgYXJn
YywgYXJndik7CisJCQkJCWVsc2UKKwkJCQkJCXByaW50X2hpZ2hsaWdodGVkX3VzZV9mbGFncygm
YnVmMFtzZWFyY2hfbGVuKzFdLCBvcHRpbmQsIGFyZ2MsIGFyZ3YpOwogCQkJCQlwdXRzKE5PUk0p
OwogCQkJCQlpZiAodmVyYm9zZSA+IDEpIHsKIAkJCQkJCWNoYXIgKipBUkdWID0gTlVMTDsKIAkJ
CQkJCWludCBBUkdDID0gMDsKIAkJCQkJCW1ha2Vhcmd2KCZidWYwW3NlYXJjaF9sZW4rMV0sICZB
UkdDLCAmQVJHVik7CiAJCQkJCQlpZiAoQVJHQyA+IDApIHsKLQkJCQkJCQlxdXNlX2Rlc2NyaWJl
X2ZsYWcoMSwgQVJHQywgQVJHVik7CisJCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIDAsIHJl
cG9fc2VhcmNoLCBBUkdDLCBBUkdWKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgQVJHQzsgaSsr
KQogCQkJCQkJCQlmcmVlKEFSR1ZbaV0pOwogCQkJCQkJCWZyZWUoQVJHVik7CkBAIC00MDEsNiAr
NTE1LDggQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAJ
ZmNsb3NlKGZwKTsKKwlpZiAoaWR4ID09IDMpCisJCWZyZWUoc2VhcmNoX3ZhcnNbaWR4XSk7CiAJ
cmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIAo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107120</attachid>
            <date>2007-01-15 20:42 0000</date>
            <desc>portage2paludis.patch</desc>
            <filename>portage2paludis.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvYXBwbGV0LWxpc3QgcG9ydGFn
ZS11dGlscy0yMDA3MDExNS5ORVcvYXBwbGV0LWxpc3QKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAx
MTUubmV3L2FwcGxldC1saXN0CTIwMDctMDEtMTUgMTk6MjE6MDUuMDE4MDY1MjQ3ICswMTAwCisr
KyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9hcHBsZXQtbGlzdAkyMDA3LTAxLTE1IDE5OjIz
OjEyLjI3NTY1MTMwNSArMDEwMApAQCAtMSwxNSArMSwxMSBAQAogcWF0b20KLXFjYWNoZQogcWNo
ZWNrCiBxZGVwZW5kcwogcWZpbGUKLXFnbHNhCiBxZ3JlcAogcWxpc3QKIHFsb3AKLXFtZXJnZQog
cXBrZwotcXB5CiBxc2VhcmNoCiBxc2l6ZQogcXRiejIKZGlmZiAtTmFydXAgcG9ydGFnZS11dGls
cy0yMDA3MDExNS5uZXcvYXBwbGV0cy5oIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL2FwcGxl
dHMuaAotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvYXBwbGV0cy5oCTIwMDctMDEtMTUg
MTk6MjE6MDUuMDA5MDY2NjIwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9h
cHBsZXRzLmgJMjAwNy0wMS0xNSAxOToyMzoxMi4yODQ2NDk5MzIgKzAxMDAKQEAgLTI5LDkgKzI5
LDkgQEAgREVDTEFSRV9BUFBMRVQocXhwYWspCiBERUNMQVJFX0FQUExFVChxcGtnKQogREVDTEFS
RV9BUFBMRVQocWdyZXApCiBERUNMQVJFX0FQUExFVChxYXRvbSkKLURFQ0xBUkVfQVBQTEVUKHFt
ZXJnZSkKLURFQ0xBUkVfQVBQTEVUKHFjYWNoZSkKLURFQ0xBUkVfQVBQTEVUKHFweSkKK0RFQ0xB
UkVfQVBQTEVUKHFtZXJnZSkgLyogZGlzYWJsZSAqLworREVDTEFSRV9BUFBMRVQocWNhY2hlKSAv
KiBkaXNhYmxlICovCitERUNMQVJFX0FQUExFVChxcHkpIC8qIGRpc2FibGUgKi8KIERFQ0xBUkVf
QVBQTEVUKHFnbHNhKSAvKiBkaXNhYmxlICovCiAjdW5kZWYgREVDTEFSRV9BUFBMRVQKIApAQCAt
NDksMjIgKzQ5LDIyIEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJLyogcSBtdXN0IGFsd2F5cyBiZSB0
aGUgZmlyc3QgYXBwbGV0ICovCiAJeyJxIiwgICAgICAgICBxX21haW4sICAgICAgICAgIjxhcHBs
ZXQ+IDxhcmdzPiIsICJ2aXJ0dWFsIGFwcGxldCJ9LAogCXsicWF0b20iLCAgICAgcWF0b21fbWFp
biwgICAgICI8cGtnPiIsICAgICAgICAgICAic3BsaXQgYXRvbSBzdHJpbmdzIn0sCi0JeyJxY2Fj
aGUiLCAgICBxY2FjaGVfbWFpbiwgICAgIjxhY3Rpb24+IDxhcmdzPiIsICJzZWFyY2ggdGhlIG1l
dGFkYXRhIGNhY2hlIn0sCiAJeyJxY2hlY2siLCAgICBxY2hlY2tfbWFpbiwgICAgIjxwa2duYW1l
PiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMifSwKIAl7InFkZXBlbmRzIiwgIHFkZXBl
bmRzX21haW4sICAiPHBrZ25hbWU+IiwgICAgICAgInNob3cgZGVwZW5kZW5jeSBpbmZvIn0sCiAJ
eyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAgICAgIjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFs
bCBwa2dzIG93bmluZyBmaWxlcyJ9LAotCXsicWdsc2EiLCAgICAgcWdsc2FfbWFpbiwgICAgICI8
YWN0aW9uPiA8bGlzdD4iLCAiY2hlY2sgR0xTQXMgYWdhaW5zdCBzeXN0ZW0ifSwKIAl7InFncmVw
IiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4gZWJ1aWxk
cyJ9LAogCXsicWxpc3QiLCAgICAgcWxpc3RfbWFpbiwgICAgICI8cGtnbmFtZT4iLCAgICAgICAi
bGlzdCBmaWxlcyBvd25lZCBieSBwa2duYW1lIn0sCiAJeyJxbG9wIiwgICAgICBxbG9wX21haW4s
ICAgICAgIjxwa2duYW1lPiIsICAgICAgICJlbWVyZ2UgbG9nIGFuYWx5emVyIn0sCi0JeyJxbWVy
Z2UiLCAgICBxbWVyZ2VfbWFpbiwgICAgIjxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVy
Z2UgYmluYXJ5IHBhY2thZ2UifSwKIAl7InFwa2ciLCAgICAgIHFwa2dfbWFpbiwgICAgICAiPG1p
c2MgYXJncz4iLCAgICAgIm1hbmlwdWxhdGUgR2VudG9vIGJpbnBrZ3MifSwKLQl7InFweSIsICAg
ICAgcXB5X21haW4sICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJweXRob24gaW50ZXJmYWNlIn0s
CiAJeyJxc2VhcmNoIiwgICBxc2VhcmNoX21haW4sICAgIjxyZWdleD4iLCAgICAgICAgICJzZWFy
Y2ggcGtnbmFtZS9kZXNjIn0sCiAJeyJxc2l6ZSIsICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2du
YW1lPiIsICAgICAgICJjYWxjdWxhdGUgc2l6ZSB1c2FnZSJ9LAogCXsicXRiejIiLCAgICAgcXRi
ejJfbWFpbiwgICAgICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB0YnoyIHBhY2thZ2Vz
In0sCiAJeyJxdXNlIiwgICAgICBxdXNlX21haW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJm
aW5kIHBrZ3MgdXNpbmcgdXNlZmxhZ3MifSwKIAl7InF4cGFrIiwgICAgIHF4cGFrX21haW4sICAg
ICAiPG1pc2MgYXJncz4iLCAgICAgIm1hbmlwdWxhdGUgeHBhayBhcmNoaXZlcyJ9LAorCXsicWNh
Y2hlIiwgICAgcWNhY2hlX21haW4sICAgICI8YWN0aW9uPiA8YXJncz4iLCBOVUxMfSwJCS8qICJz
ZWFyY2ggdGhlIG1ldGFkYXRhIGNhY2hlIiAqLworCXsicWdsc2EiLCAgICAgcWdsc2FfbWFpbiwg
ICAgICI8YWN0aW9uPiA8bGlzdD4iLCBOVUxMfSwJCS8qICJjaGVjayBHTFNBcyBhZ2FpbnN0IHN5
c3RlbSIgKi8KKwl7InFtZXJnZSIsICAgIHFtZXJnZV9tYWluLCAgICAiPHBrZ25hbWVzPiIsICAg
ICAgTlVMTH0sCQkvKiAiZmV0Y2ggYW5kIG1lcmdlIGJpbmFyeSBwYWNrYWdlIiAqLworCXsicXB5
IiwgICAgICAgcXB5X21haW4sICAgICAgICI8bWlzYyBhcmdzPiIsICAgICBOVUxMfSwJCS8qICJw
eXRob24gaW50ZXJmYWNlIiAqLwogCiAKIAkvKiBhbGlhc2VzIGZvciBlcXVlcnkgY2FwYXRhYmls
aXR5ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L21haW4uYyBwb3J0
YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9tYWluLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUu
bmV3L21haW4uYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjI1Nzk0MzE3MCArMDEwMAorKysgcG9ydGFn
ZS11dGlscy0yMDA3MDExNS5ORVcvbWFpbi5jCTIwMDctMDEtMTUgMTk6MjM6MTIuMjkzNjQ4NTU5
ICswMTAwCkBAIC03MSw5ICs3MSw4IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLCAKIHN0YXRpYyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6
ZV9wb3J0YWdlX2Vudih2b2lkKTsKLXZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0
ZGlyX292ZXJsYXlbXSk7Ci12b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7Ci12b2lk
IHJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCh2b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5
cyh2b2lkKTsKK3ZvaWQgcmVpbml0aWFsaXplX2VidWlsZF9mbGF0KHNob3J0IGZvcmNlKTsKIHZv
aWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKIHZvaWQgY2xlYW51cCh2b2lkKTsKIGlu
dCBsb29rdXBfYXBwbGV0X2lkeChjb25zdCBjaGFyICopOwpAQCAtODYsMTEgKzg1LDEzIEBAIHN0
YXRpYyBpbnQgcXVpZXQgPSAwOwogc3RhdGljIGNoYXIgcHJldGVuZCA9IDA7CiBzdGF0aWMgY2hh
ciByZWluaXRpYWxpemUgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplX21ldGFjYWNoZSA9
IDA7Ci1zdGF0aWMgY2hhciBwb3J0YXJjaFsyMF0gPSAiIjsKLXN0YXRpYyBjaGFyIHBvcnR2ZGJb
X1FfUEFUSF9NQVhdID0gInZhci9kYi9wa2ciOwotc3RhdGljIGNoYXIgcG9ydGNhY2hlZGlyW10g
PSAibWV0YWRhdGEvY2FjaGUiOwotc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhdID0g
Ii8iOwotc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMvIjsK
Ky8qIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOyAqLworc3RhdGljIGNoYXIgcG9ydHZk
YltfUV9QQVRIX01BWF0gPSAiIjsKK3N0YXRpYyBjaGFyIGNhY2hlX2ZpbGVfZGlyW19RX1BBVEhf
TUFYXT0idmFyL2NhY2hlL3BhbHVkaXMiOworc3RhdGljIGNoYXIgbWV0YWNhY2hlX2ZpbGVfZGly
W19RX1BBVEhfTUFYXT0idmFyL2NhY2hlL3BhbHVkaXMvbWV0YWRhdGEiOworc3RhdGljIGNoYXIg
cmVwb2NhY2hlZGlyW10gPSAibWV0YWRhdGEvY2FjaGUiOworc3RhdGljIGNoYXIgcG9ydHJvb3Rb
X1FfUEFUSF9NQVhdID0gIiI7CisvKiBzdGF0aWMgY2hhciBjb25maWdfcHJvdGVjdFtfUV9QQVRI
X01BWF0gPSAiL2V0Yy8iOyAqLwogCiB0eXBlZGVmIHN0cnVjdCBvdmVybGF5X3Qgb3ZlcmxheV90
Owogc3RydWN0IG92ZXJsYXlfdCB7CkBAIC0xMDEsMTEgKzEwMiwxMCBAQCBzdHJ1Y3Qgb3Zlcmxh
eV90IHsKIH07CiAKIHN0YXRpYyBvdmVybGF5X3QgKmZpcnN0X292ZXJsYXkgPSBOVUxMOwotLyog
dGVtcG9yYXJ5IHdvcmthcm91bmQgPyAqLwogc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50
b28gPSBOVUxMOwogCi1jaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8i
OwotY2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKK2NoYXIgcGtn
ZGlyWzUxMl0gPSAiL3Zhci9wYWx1ZGlzL3JlcG9zaXRvcmllcy9nZW50b28vcGFja2FnZXMvIjsK
K2NoYXIgcG9ydF90bXBkaXJbNTEyXSA9ICIvdmFyL3RtcC9wYWx1ZGlzLyI7CiAKIGNoYXIgYmlu
aG9zdFs1MTJdID0gUE9SVEFHRV9CSU5IT1NUOwogY2hhciBmZWF0dXJlc1s1MTJdID0gIm5vbWFu
IG5vaW5mbyBub2RvYyI7CkBAIC0yMjcsNyArMjI3LDggQEAgc3RhdGljIHZvaWQgdmVyc2lvbl9i
YXJmKGNvbnN0IGNoYXIgKklkKQogIyBkZWZpbmUgVkVSU0lPTiAiY3ZzIgogI2VuZGlmCiAJcHJp
bnRmKCJwb3J0YWdlLXV0aWxzLSVzOiBjb21waWxlZCBvbiAlc1xuJXNcbiIKLQkgICAgICAgIiVz
IHdyaXR0ZW4gZm9yIEdlbnRvbyBieSA8c29sYXIgYW5kIHZhcGllciBAIGdlbnRvby5vcmc+XG4i
LAorCSAgICAgICAiJXMgd3JpdHRlbiBmb3IgR2VudG9vIGJ5IDxzb2xhciBhbmQgdmFwaWVyIEAg
Z2VudG9vLm9yZz5cbiIKKwkgICAgICAgIm1vZGlmaWVkIGZvciBvdmVybGF5IGFuZCBwYWx1ZGlz
IGNvbXBhdGliaWxpdHkgYnkgc2FtdWVsZXRoaWVjIEAgaG90bWFpbC5jb21cbiIsCiAJICAgICAg
IFZFUlNJT04sIF9fREFURV9fLCBJZCwgYXJndjApOwogCWV4aXQoRVhJVF9TVUNDRVNTKTsKIH0K
QEAgLTQ3OSw3NCArNDgwLDE5NiBAQCBjaGFyICpzdHJpbmNyX3Zhcihjb25zdCBjaGFyICpuYW1l
LCBjaGFyCiAJcmV0dXJuIChjaGFyICopIHZhbHVlOwogfQogCi12b2lkIGluaXRpYWxpemVfb3Zl
cmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pCit2b2lkIGluaXRpYWxpemVfb3ZlcmxheXMo
dm9pZCkKIHsKLQlzaG9ydCBtZXJyb3IgPSAwOwotCWNoYXIgYnVmW0JVRlNJWkVdLCBmaWxlW19R
X1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKLQlvdmVybGF5X3QgKmN1cl9vdmVybGF5OwotCUZJTEUg
KnJlcG9fbmFtZUZQOwotCXMgPSBwb3J0ZGlyX292ZXJsYXk7CisgCXNob3J0IG1lcnJvciA9IDAs
IGZpcnN0ID0gMTsKKwlpbnQgaSxqOworIAljaGFyICpzLCAqcCwgKnQ7CisgCWNoYXIgYnVmW0JV
RlNJWkVdLCBjb25mZmlsZVtfUV9QQVRIX01BWF0sIGNvbmZkaXJbX1FfUEFUSF9NQVhdLCBwYXRo
W19RX1BBVEhfTUFYXTsKKwljaGFyIGxvY2F0aW9uW19RX1BBVEhfTUFYXSwgd3JpdGVfY2FjaGVb
X1FfUEFUSF9NQVhdLCBjYWNoZVtfUV9QQVRIX01BWF0sIGZvcm1hdFszMl07CisgCUZJTEUgKkNP
TkZGSUxFLCAqUkVQT19OQU1FOworIAlESVIgKkNPTkZESVI7CisgCXN0cnVjdCBkaXJlbnQgKmY7
CisJc3RydWN0IHN0YXQgc3RhdGNhY2hlOworIAlvdmVybGF5X3QgKmN1cl9vdmVybGF5OworCisJ
c3RydWN0IHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJY29uc3Qgc2l6ZV90IG5hbWVfbGVuOwor
CQljaGFyICp2YWx1ZTsKKwkJY29uc3Qgc2l6ZV90IHZhbHVlX2xlbjsKKwl9IHZhcnNfdG9fcmVh
ZFtdID0geworCQkvKiBvcmRlciBpcyBpbXBvcnRhbnQgKi8KKwkJeyJST09UIiwJNCwJcG9ydHJv
b3QsCXNpemVvZihwb3J0cm9vdCl9LAorCQl7ImxvY2F0aW9uIiwJOCwJbG9jYXRpb24sCXNpemVv
Zihsb2NhdGlvbil9LAorCQl7IndyaXRlX2NhY2hlIiwJMTEsCXdyaXRlX2NhY2hlLAlzaXplb2Yo
d3JpdGVfY2FjaGUpfSwKKwkJeyJjYWNoZSIsCTUsCWNhY2hlLAkJc2l6ZW9mKGNhY2hlKX0sCisJ
CXsiZm9ybWF0IiwJNiwJZm9ybWF0LAkJc2l6ZW9mKGZvcm1hdCl9CisJfTsKIAogCWZpcnN0X292
ZXJsYXkgPSB4bWFsbG9jKHNpemVvZigqZmlyc3Rfb3ZlcmxheSkpOwotCWN1cl9vdmVybGF5ID0g
Zmlyc3Rfb3ZlcmxheTsKKyAgCWN1cl9vdmVybGF5ID0gZmlyc3Rfb3ZlcmxheTsKIAotCXdoaWxl
ICgqcykgewotCQkvKiBleGNlcHQgb24gdGhlIGZpcnN0IGxvb3AgKi8KLQkJaWYgKHMhPXBvcnRk
aXJfb3ZlcmxheSkgewotCQkJY3VyX292ZXJsYXktPm5leHQgPSB4bWFsbG9jIChzaXplb2YgKCpj
dXJfb3ZlcmxheS0+bmV4dCkpOwotCQkJY3VyX292ZXJsYXkgPSBjdXJfb3ZlcmxheS0+bmV4dDsK
KyAJc25wcmludGYoY29uZmRpciwgc2l6ZW9mKGNvbmZkaXIpLCAiJXMvZXRjL3BhbHVkaXMvcmVw
b3NpdG9yaWVzIiwgcG9ydHJvb3QpOworCisgCWlmIChOVUxMID09IChDT05GRElSID0gb3BlbmRp
cihjb25mZGlyKSkpCisgCQllcnIoIiVzIDogY291bGQgbm90IG9wZW4gZGlyZWN0b3J5IiwgY29u
ZmRpcik7CisKKyAJd2hpbGUgKChmID0gIHJlYWRkaXIoQ09ORkRJUikpKSB7CisJCWxvY2F0aW9u
WzBdID0gMDsKKwkJY2FjaGVbMF0gPSAwOworCQl3cml0ZV9jYWNoZVswXSA9IDA7CisJCWZvcm1h
dFswXSA9IDA7CisKKyAJCWlmIChmLT5kX25hbWVbMF0gPT0gJy4nKQorIAkJCWNvbnRpbnVlOwor
CisgCQlzbnByaW50Zihjb25mZmlsZSwgc2l6ZW9mKGNvbmZmaWxlKSwgIiVzLyVzIiwgY29uZmRp
ciwgZi0+ZF9uYW1lKTsKKworIAkJaWYgKE5VTEwgPT0gKENPTkZGSUxFID0gZm9wZW4oY29uZmZp
bGUsICJyIikpKQorIAkJCWNvbnRpbnVlOworIAkJbWVycm9yID0gMDsKKworIAkJd2hpbGUgKGZn
ZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIENPTkZGSUxFICkpIHsKKyAJCQlybXNwYWNlKGJ1Zik7Cisg
CQkJaWYgKCpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1wwJykKKyAJCQkJY29udGludWU7CisJCQlm
b3IgKGk9MTsgaTxBUlJfU0laRSh2YXJzX3RvX3JlYWQpOyArK2kpIHsKKwkJCQlpZiAoYnVmW3Zh
cnNfdG9fcmVhZFtpXS5uYW1lX2xlbl0gIT0gJz0nICYmIGJ1Zlt2YXJzX3RvX3JlYWRbaV0ubmFt
ZV9sZW5dICE9ICcgJykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHN0cm5jbXAoYnVmLCB2YXJz
X3RvX3JlYWRbaV0ubmFtZSwgdmFyc190b19yZWFkW2ldLm5hbWVfbGVuKSkKKwkJCQkJY29udGlu
dWU7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGFuZGxlIHNwYWNlcyBiZXR3ZWVuIHRoZSB2YXJu
YW1lLCB0aGUgPSwgYW5kIHRoZSB2YWx1ZToKKwkJCQkgKiBWQVI9dmFsICAgVkFSID0gdmFsICAg
VkFSPSJ2YWwiCisJCQkJICovCisJCQkJcyA9IGJ1ZiArIHZhcnNfdG9fcmVhZFtpXS5uYW1lX2xl
bjsKKwkJCQlpZiAoKHAgPSBzdHJjaHIocywgJz0nKSkgIT0gTlVMTCkKKwkJCQkJcyA9IHAgKyAx
OworCQkJCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJCQkJKytzOworCQkJCWlmICgqcyA9PSAnIicg
fHwgKnMgPT0gJ1wnJykgeworCQkJCQkrK3M7CisJCQkJCXNbc3RybGVuKHMpLTFdID0gJ1wwJzsK
KwkJCQl9CisKKwkJCQlzdHJuY3B5KHZhcnNfdG9fcmVhZFtpXS52YWx1ZSwgcywgdmFyc190b19y
ZWFkW2ldLnZhbHVlX2xlbik7CisJCQl9CisgCQl9CisgCQlmY2xvc2UoQ09ORkZJTEUpOworCisg
CQlpZiAoIWZvcm1hdFswXSkKKyAJCQljb250aW51ZTsKKworCQkvKiBkZWxldGUgdHJhaWxpbmcg
Jy8nICovCisJCWZvciAoaT0wOyBpPEFSUl9TSVpFKHZhcnNfdG9fcmVhZCk7ICsraSkgeworCQkJ
aWYgKChwID0gc3RycmNocih2YXJzX3RvX3JlYWRbaV0udmFsdWUsICcvJykpICYmIChwKzEpICYm
ICoocCsxKT09MCkKKwkJCQkqcCA9IDA7CiAJCX0KLQkJY3VyX292ZXJsYXktPm5leHQgPSBOVUxM
OwogCi0JCWlmICgocD1zdHJjaHIocywnICcpKSkKLQkJCSpwID0gMDsKKwkJaWYgKHN0cm5jbXAo
Zm9ybWF0LCAiZWJ1aWxkIiwgc2l6ZW9mKGZvcm1hdCkpICYmIHN0cm5jbXAoZm9ybWF0LCAidmRi
Iiwgc2l6ZW9mKGZvcm1hdCkpKQorCQkJY29udGludWU7CiAKLQkJc25wcmludGYoY3VyX292ZXJs
YXktPnBhdGgsIHNpemVvZihjdXJfb3ZlcmxheS0+cGF0aCksICIlcyVzIiwgKHN0cmNtcChwb3J0
cm9vdCwgIi8iKSA/IHBvcnRyb290IDogIiIpLCBzKTsKKwkJLyogaWYgdGhlIHBhdGggYmVnaW5z
IHdpdGggYSB2YXJpYWJsZSBzdWNoIGFzICR7Uk9PVH0sICRST09ULCBvciAkbG9jYXRpb24gYW5k
IHNvIG9uCisJCSAqIHdlIHRyeSB0byByZXBsYWNlIGl0IHdpdGggaXRzIHZhbHVlICovCisJCWZv
ciAoaT0xOyBpPEFSUl9TSVpFKHZhcnNfdG9fcmVhZCk7ICsraSkgeworCQkJcGF0aFswXSA9IDA7
CisJCQlpZiAodmFyc190b19yZWFkW2ldLnZhbHVlWzBdID09ICckJykgeworCQkJCXAgPSBzdHJj
aHIodmFyc190b19yZWFkW2ldLnZhbHVlLCAnLycpOworCQkJCSpwID0gMDsKKworCQkJCWlmICh2
YXJzX3RvX3JlYWRbaV0udmFsdWVbMV09PSd7JyAmJiAqKHAtMSk9PSd9JykgeworCQkJCQkqKHAt
MSkgPSAwOworCQkJCQlzID0gJnZhcnNfdG9fcmVhZFtpXS52YWx1ZVsyXTsKKwkJCQl9IGVsc2UK
KwkJCQkJcyA9ICZ2YXJzX3RvX3JlYWRbaV0udmFsdWVbMV07CisKKwkJCQlmb3IgKGo9MDsgajxB
UlJfU0laRSh2YXJzX3RvX3JlYWQpOyArK2opCisJCQkJCWlmICghc3RyY21wKHMsIHZhcnNfdG9f
cmVhZFtqXS5uYW1lKSkgeworCQkJCQkJc3RyY3B5KHBhdGgsIHZhcnNfdG9fcmVhZFtqXS52YWx1
ZSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQogCi0JCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBv
dmVybGF5ICovCi0JCXNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwgIiVzL3Byb2ZpbGVzL3Jl
cG9fbmFtZSIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkvKiBwdXQgdGhlIHNsYXNoIGJhY2sg
Ki8KKwkJCQkqcCA9ICcvJzsKKwkJCQlzdHJuY2F0KHBhdGgsIHAsIHNpemVvZihwYXRoKSk7CisJ
CQkJc3RyY3B5KHZhcnNfdG9fcmVhZFtpXS52YWx1ZSwgcGF0aCk7CisJCQl9CisJCX0KIAotCQlp
ZiAoKHJlcG9fbmFtZUZQID0gZm9wZW4oZmlsZSwgInIiKSkpIHsKLQkJCWlmICghKGZnZXRzKGJ1
Ziwgc2l6ZW9mKGJ1ZikscmVwb19uYW1lRlApKSkKLQkJCQltZXJyb3IrKzsKLQkJCXJtc3BhY2Uo
YnVmKTsKLQkJCWlmICgodCA9IHN0cmNocihidWYsJ1xuJykpKQotCQkJCSp0ID0gMDsKLQkJCXN0
cm5jcHkoY3VyX292ZXJsYXktPm5hbWUsIGJ1Ziwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7
CisJCS8qIHZkYiBsb2NhdGlvbiBkZWZpbmVkIGluIGV0Yy9wYWx1ZGlzL3JlcG9zaXRvcmllcy9p
bnN0YWxsZWQuY29uZiAqLworCQlpZiAoIXN0cmNtcCgiaW5zdGFsbGVkLmNvbmYiLCBmLT5kX25h
bWUpICYmICFzdHJjbXAoInZkYiIsIGZvcm1hdCkpIHsKKwkJCXN0cm5jcHkocG9ydHZkYiwgbG9j
YXRpb24sIHNpemVvZihwb3J0dmRiKSk7CisJCQljb250aW51ZTsKKwkJfQogCi0JCQlmY2xvc2Uo
cmVwb19uYW1lRlApOwotCQl9IGVsc2UKLQkJCW1lcnJvcisrOwotCi0JCWlmIChtZXJyb3IpIHsK
LQkJCS8qIGRlbGV0ZSB0cmFpbGluZyAnLycgKi8KLQkJCXQgPSBjdXJfb3ZlcmxheS0+cGF0aCAr
IHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0aCkgLSAxOwotCQkJaWYgKCp0ID09ICcvJykKLQkJCQkq
dCA9IDA7Ci0JCQlzdHJuY3B5KGZpbGUsIGN1cl9vdmVybGF5LT5wYXRoLCBzaXplb2YoZmlsZSkp
OwotCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYmFzZW5hbWUoZmlsZSksIHNpemVvZihj
dXJfb3ZlcmxheS0+bmFtZSkpOwotCQkJbWVycm9yPTA7CisgCQlpZiAoIWZpcnN0KSB7CisJCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2Moc2l6ZW9mKCooY3VyX292ZXJsYXktPm5leHQpKSk7
CisJCQljdXJfb3ZlcmxheSA9IGN1cl9vdmVybGF5LT5uZXh0OwogCQl9CisgCQljdXJfb3Zlcmxh
eS0+bmV4dCA9IE5VTEw7CisJCWN1cl9vdmVybGF5LT5jYWNoZVswXSA9IDA7CiAKLQkJaWYgKCFz
dHJuY21wKGN1cl9vdmVybGF5LT5uYW1lLCAiZ2VudG9vIiwgc2l6ZW9mKGN1cl9vdmVybGF5LT5u
YW1lKSkpIHsKLQkJCXNucHJpbnRmKGN1cl9vdmVybGF5LT5jYWNoZSwgc2l6ZW9mKGN1cl9vdmVy
bGF5LT5jYWNoZSksICIlcy8lcyIsIGN1cl9vdmVybGF5LT5wYXRoLCBwb3J0Y2FjaGVkaXIpOwor
CQkvKiB0aW1lIHRvIHNlYXJjaCBmb3IgdGhlIG92ZXJsYXktPm5hbWUgKi8KKyAJCXNucHJpbnRm
KGNvbmZmaWxlLCBzaXplb2YoY29uZmZpbGUpLCAiJXMvcHJvZmlsZXMvcmVwb19uYW1lIiwgbG9j
YXRpb24pOworIAkJaWYgKE5VTEwgIT0gKFJFUE9fTkFNRSA9IGZvcGVuKGNvbmZmaWxlLCAiciIp
KSkgeworIAkJCWlmICghKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksUkVQT19OQU1FKSkpCisgCQkJ
CW1lcnJvcisrOworIAkJCXJtc3BhY2UoYnVmKTsKKyAJCQlpZiAoKHQgPSBzdHJjaHIoYnVmLCdc
bicpKSkKKyAgCQkJCSp0ID0gMDsKKworCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVm
LCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKTsKKyAJCQlmY2xvc2UoUkVQT19OQU1FKTsKKyAJ
CX0gZWxzZSB7CisgCQkJc3RyY3B5KGN1cl9vdmVybGF5LT5uYW1lLCAieC0iKTsKKwkJCS8qIHRo
ZXJlIGlzIG5vIHRyYWlsaW5nICcvJyAqLworCQkJaWYgKChwPXN0cnJjaHIobG9jYXRpb24sJy8n
KSkpCisJCQkJcCA9IHArMTsKKwkJCWVsc2UKKwkJCQlwID0gbG9jYXRpb247CisgCQkJc3RybmNh
dChjdXJfb3ZlcmxheS0+bmFtZSwgcCwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7CisgCQl9
CisKKwkJaWYgKCFzdHJjbXAoY3VyX292ZXJsYXktPm5hbWUsICJnZW50b28iKSkKIAkJCW92ZXJs
YXlfZ2VudG9vID0gY3VyX292ZXJsYXk7Ci0JCX0gZWxzZQorCisJCXN0cm5jcHkoY3VyX292ZXJs
YXktPnBhdGgsIGxvY2F0aW9uLCBzaXplb2YoY3VyX292ZXJsYXktPnBhdGgpKTsKKworCQlpZiAo
IWNhY2hlWzBdKQorCQkJc25wcmludGYoY2FjaGUsIHNpemVvZihjYWNoZSksICIlcy8lcyIsIGxv
Y2F0aW9uLCByZXBvY2FjaGVkaXIpOworCisJCS8qIG5vdyB3ZSBmaWxsIGN1cl9vdmVybGF5LT5j
YWNoZSAqLworCQlpZiAoIXN0cnN0cihjYWNoZSwgIi92YXIvZW1wdHkiKSkgeworCQkJaWYgKHN0
YXQoY2FjaGUsICZzdGF0Y2FjaGUpICE9IC0xICYmIFNfSVNESVIoc3RhdGNhY2hlLnN0X21vZGUp
KQorCQkJCXN0cmNweShjdXJfb3ZlcmxheS0+Y2FjaGUsIGNhY2hlKTsKKwkJCWVsc2UgeworCQkJ
CWlmICgqd3JpdGVfY2FjaGUpIHsKKwkJCQkJc25wcmludGYoY2FjaGUsIHNpemVvZihjYWNoZSks
ICIlcy8lcyIsIHdyaXRlX2NhY2hlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJCWlmIChzdGF0
KGNhY2hlLCAmc3RhdGNhY2hlKSAhPSAtMSAmJiBTX0lTRElSKHN0YXRjYWNoZS5zdF9tb2RlKSkK
KwkJCQkJCXN0cm5jcHkoY3VyX292ZXJsYXktPmNhY2hlLCBjYWNoZSwgc2l6ZW9mKGN1cl9vdmVy
bGF5LT5jYWNoZSkpOworCQkJCQllbHNlCisJCQkJCQlzdHJuY3B5KGN1cl9vdmVybGF5LT5jYWNo
ZSwgIi92YXIvZW1wdHkiLCBzaXplb2YoY3VyX292ZXJsYXktPmNhY2hlKSk7CisJCQkJfSBlbHNl
CisJCQkJCXN0cm5jcHkoY3VyX292ZXJsYXktPmNhY2hlLCAiL3Zhci9lbXB0eSIsIHNpemVvZihj
dXJfb3ZlcmxheS0+Y2FjaGUpKTsKKwkJCX0KKyAJCX0gZWxzZQogCQkJc3RyY3B5KGN1cl9vdmVy
bGF5LT5jYWNoZSwgIi92YXIvZW1wdHkiKTsKIAotCQlpZiAocCkKLQkJCXMgPSBwKzE7IC8qIGJl
Y2F1c2UgcG9ydGRpcl9vdmVybGF5IGhhcyBubyB0cmFpbGluZyBzcGFjZSAqLwotCQllbHNlCi0J
CQlicmVhazsKKwkJLyogb25jZSB3ZSBnZXQgdGhlcmUgd2UgaGF2ZSBhdCBsZWFzdCBkb25lIHdp
dGggdGhlIGZpcnN0IG92ZXJsYXkgKi8KKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSAwOwogCX0K
LQorIAljbG9zZWRpcihDT05GRElSKTsKIH0KIAotCiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9l
bnYodm9pZCkKIHsKIAljaGFyIG5vY29sb3IgPSAwOwotCWludCBpLCBmOworCWludCBpOworCWNo
YXIgKnM7CisJY2hhciB0bXBbX1FfUEFUSF9NQVhdOworLyoKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlG
SUxFICpmcDsKIAljaGFyIHRtcF9wb3J0ZGlyW19RX1BBVEhfTUFYXTsKQEAgLTU1Niw2ICs2Nzks
NyBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAljaGFyIHBvcnRkaXJfb3Zl
cmxheVtCVUZTSVpFXSA9ICIiOwogCiAJY29uc3QgY2hhciAqZmlsZXNbXSA9IHtwb3J0YWdlX2Zp
bGUsICIvZXRjL21ha2UuZ2xvYmFscyIsICIvZXRjL21ha2UuY29uZiJ9OworKi8KIAl0eXBlZGVm
IGVudW0geyBfUV9CT09MLCBfUV9TVFIsIF9RX0lTVFIgfSB2YXJfdHlwZXM7CiAKIAlzdHJ1Y3Qg
ewpAQCAtNTY1LDcgKzY4OSw3IEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lkKQog
CQljaGFyICp2YWx1ZTsKIAkJY29uc3Qgc2l6ZV90IHZhbHVlX2xlbjsKIAl9IHZhcnNfdG9fcmVh
ZFtdID0gewotCQl7IkFDQ0VQVF9MSUNFTlNFIiwgICAxNCwgX1FfU1RSLCAgYWNjZXB0X2xpY2Vu
c2UsIHNpemVvZihhY2NlcHRfbGljZW5zZSl9LAorLyoJCXsiQUNDRVBUX0xJQ0VOU0UiLCAgIDE0
LCBfUV9TVFIsICBhY2NlcHRfbGljZW5zZSwgc2l6ZW9mKGFjY2VwdF9saWNlbnNlKX0sCiAJCXsi
SU5TVEFMTF9NQVNLIiwgICAgIDEyLCBfUV9JU1RSLCBpbnN0YWxsX21hc2ssICAgc2l6ZW9mKGlu
c3RhbGxfbWFzayl9LAogCQl7IkFSQ0giLCAgICAgICAgICAgICAgNCwgX1FfU1RSLCAgcG9ydGFy
Y2gsICAgICAgIHNpemVvZihwb3J0YXJjaCl9LAogCQl7IkNPTkZJR19QUk9URUNUIiwgICAxNCwg
X1FfU1RSLCAgY29uZmlnX3Byb3RlY3QsIHNpemVvZihjb25maWdfcHJvdGVjdCl9LApAQCAtNTc2
LDEzICs3MDAsMTEgQEAgdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiAJCXsiUE9S
VEFHRV9CSU5IT1NUIiwgIDE1LCBfUV9TVFIsICBiaW5ob3N0LCAgICAgICAgc2l6ZW9mKGJpbmhv
c3QpfSwKIAkJeyJQT1JUQUdFX1RNUERJUiIsICAgMTQsIF9RX1NUUiwgIHBvcnRfdG1wZGlyLCAg
ICBzaXplb2YocG9ydF90bXBkaXIpfSwKIAkJeyJQS0dESVIiLCAgICAgICAgICAgIDYsIF9RX1NU
UiwgIHBrZ2RpciwgICAgICAgICBzaXplb2YocGtnZGlyKX0sCisqLwogCQl7IlJPT1QiLCAgICAg
ICAgICAgICAgNCwgX1FfU1RSLCAgcG9ydHJvb3QsICAgICAgIHNpemVvZihwb3J0cm9vdCl9CiAJ
fTsKIAotCWlmICgocCA9IHN0cmNocihwb3J0cm9vdCwgJy8nKSkgIT0gTlVMTCkKLQkJaWYgKHN0
cmxlbihwKSAhPSAxKQotCQkJc3RybmNhdChwb3J0cm9vdCwgIi8iLCBzaXplb2YocG9ydHJvb3Qp
KTsKLQorI2lmIDAKIAlmID0gMDsKIAlpZiAocmVhZGxpbmsoIi9ldGMvbWFrZS5wcm9maWxlIiwg
cHJvZmlsZSwgc2l6ZW9mKHByb2ZpbGUpKSA9PSAtMSkKIAkJc3RyY3B5KHByb2ZpbGUsICIvZXRj
L21ha2UucHJvZmlsZSIpOwpAQCAtNjQzLDYgKzc2NSw3IEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0
YWdlX2Vudih2b2lkKQogCQkJZiA9IDE7CiAJCX0KIAl9IHdoaWxlICgxKTsKKyNlbmRpZgogCiAJ
LyogZmluYWxseSwgY2hlY2sgdGhlIGVudiAqLwogCWZvciAoaT0wOyBpPEFSUl9TSVpFKHZhcnNf
dG9fcmVhZCk7ICsraSkgewpAQCAtNjcxLDEyICs3OTQsMTIgQEAgdm9pZCBpbml0aWFsaXplX3Bv
cnRhZ2VfZW52KHZvaWQpCiAJZWxzZQogCQljb2xvcl9yZW1hcCgpOwogCi0Jc25wcmludGYodG1w
X3BvcnRkaXIsIHNpemVvZih0bXBfcG9ydGRpciksICIlcy8lcyIsIChzdHJjbXAocG9ydHJvb3Qs
ICIvIikgPyBwb3J0cm9vdCA6ICIiKSwgcG9ydHZkYik7Ci0Jc3RybmNweShwb3J0dmRiLCB0bXBf
cG9ydGRpciwgc2l6ZW9mKHBvcnR2ZGIpKTsKLQlzdHJpbmNyX3ZhcigiUE9SVERJUl9PVkVSTEFZ
IiwgdG1wX3BvcnRkaXIsIHBvcnRkaXJfb3ZlcmxheSwgc2l6ZW9mKHBvcnRkaXJfb3ZlcmxheSkp
OwotCisJc25wcmludGYodG1wLHNpemVvZih0bXApLCIlcy8lcyIsIHBvcnRyb290LCBjYWNoZV9m
aWxlX2Rpcik7CisJc3RyY3B5KGNhY2hlX2ZpbGVfZGlyLCB0bXApOworCXNucHJpbnRmKHRtcCxz
aXplb2YodG1wKSwiJXMvJXMiLCBwb3J0cm9vdCwgbWV0YWNhY2hlX2ZpbGVfZGlyKTsKKwlzdHJj
cHkobWV0YWNhY2hlX2ZpbGVfZGlyLCB0bXApOwogCS8qIG5vdyB3ZSBpbml0aWxpYXNlIHRoZSBv
dmVybGF5IGNoYWluZWQgbGlzdCAqLwotCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9vdmVy
bGF5KTsKKwlpbml0aWFsaXplX292ZXJsYXlzKCk7CiAKIH0KIApAQCAtNjk0LDkgKzgxNyw5IEBA
IGludCBmaWx0ZXJfaGlkZGVuKGNvbnN0IHN0cnVjdCBkaXJlbnQgKmQKIH0KIAogI2RlZmluZSBD
QUNIRV9FQlVJTERfRklMRSAoZ2V0ZW52KCJDQUNIRV9FQlVJTERfRklMRSIpID8gZ2V0ZW52KCJD
QUNIRV9FQlVJTERfRklMRSIpIDogIi5lYnVpbGQueCIpCi0jZGVmaW5lIENBQ0hFX01FVEFEQVRB
X0ZJTEUgIi5tZXRhZGF0YS54IgotY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNo
ZV90eXBlKTsKLWNvbnN0IGNoYXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHlwZSkKKyNk
ZWZpbmUgQ0FDSEVfTUVUQURBVEFfRklMRSAoZ2V0ZW52KCJDQUNIRV9NRVRBREFUQV9GSUxFIikg
PyBnZXRlbnYoIkNBQ0hFX01FVEFEQVRBX0ZJTEUiKSA6ICIubWV0YWRhdGEueCIpCitjb25zdCBj
aGFyICppbml0aWFsaXplX2ZsYXQoaW50IGNhY2hlX3R5cGUsIHNob3J0IGZvcmNlKTsKK2NvbnN0
IGNoYXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHlwZSwgc2hvcnQgZm9yY2UpCiB7CiAJ
c3RydWN0IGRpcmVudCAqKmNhdGVnb3J5LCAqKnBuLCAqKmViOwogCXN0cnVjdCBzdGF0IHN0OwpA
QCAtNzE0LDM5ICs4MzcsMzcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNo
ZV90eQogCiAJY2FjaGVfZmlsZSA9IChjYWNoZV90eXBlID09IENBQ0hFX0VCVUlMRCA/IENBQ0hF
X0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURBVEFfRklMRSk7CiAKLQkvKiBTQU0gcmV2aWV3IHdp
dGhvdXQgZ2VudG9vISAqLwotCWlmIChjYWNoZV90eXBlID09IENBQ0hFX01FVEFEQVRBKSB7Ci0J
CWlmIChjaGRpcihvdmVybGF5X2dlbnRvby0+Y2FjaGUpICE9IDApIHsKLQkJCXdhcm5wKCJjaGRp
ciB0byBwb3J0YWdlIGNhY2hlICclcycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPmNhY2hlKTsK
LQkJCWdvdG8gcmV0OwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGNoZGlyKG92ZXJsYXlfZ2VudG9v
LT5wYXRoKSAhPSAwKSB7Ci0JCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIs
IG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKLQkJCWdvdG8gcmV0OwotCQl9CisgCWlmIChjYWNoZV90
eXBlID09IENBQ0hFX01FVEFEQVRBKSB7CisgCQlpZiAoY2hkaXIobWV0YWNhY2hlX2ZpbGVfZGly
KSAhPSAwKSB7CisgCQkJd2FybnAoImNoZGlyIHRvIGNhY2hlICclcycgZmFpbGVkIiwgbWV0YWNh
Y2hlX2ZpbGVfZGlyKTsKKyAJCQlnb3RvIHJldDsKKyAJCX0KKyAJfSBlbHNlIHsKKyAJCWlmIChj
aGRpcihjYWNoZV9maWxlX2RpcikgIT0gMCkgeworIAkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZh
aWxlZCIsIGNhY2hlX2ZpbGVfZGlyKTsKKyAJCQlnb3RvIHJldDsKKyAJCX0KIAl9CiAKLQlpZiAo
KHN0YXQoY2FjaGVfZmlsZSwgJnN0KSkgIT0gKC0xKSkKLQkJaWYgKHN0LnN0X3NpemUgPT0gMCkK
KwlpZiAoKHN0YXQoY2FjaGVfZmlsZSwgJnN0KSkgIT0gKC0xKSkgeworCQlpZiAoZm9yY2UgfHwg
c3Quc3Rfc2l6ZSA9PSAwKQogCQkJdW5saW5rKGNhY2hlX2ZpbGUpOworCQllbHNlCisJCQlnb3Rv
IHJldDsKKwl9CiAKLQkvKiBhc3N1bWluZyAtLXN5bmMgaXMgdXNlZCB3aXRoIC0tZGVsZXRlIHRo
aXMgd2lsbCBnZXQgcmVjcmVhdGVkIGFmdGVyIGV2ZXJ5IG1lcmdlICovCi0JaWYgKGFjY2Vzcyhj
YWNoZV9maWxlLCBSX09LKSA9PSAwKQotCQlnb3RvIHJldDsKIAlpZiAoIXF1aWV0KQogCQl3YXJu
KCJVcGRhdGluZyBlYnVpbGQgJXNjYWNoZSAuLi4gIiwgY2FjaGVfdHlwZSA9PSBDQUNIRV9FQlVJ
TEQgPyAiIiA6ICJtZXRhIik7CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9
IEVOT0VOVCkgewotCQkvKiBTQU0gcmV2aWV3IHdpdGhvdXQgZ2VudG9vISAqLwotCQl3YXJuZnAo
InVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9m
aWxlKTsKKwkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCAoY2FjaGVfdHlwZSA9
PSBDQUNIRV9FQlVJTEQgPyBjYWNoZV9maWxlX2RpciA6IG1ldGFjYWNoZV9maWxlX2RpciksIGNh
Y2hlX2ZpbGUpOworCQl3YXJuKCJkZWZpbmUgQ0FDSEVfTUVUQURBVEFfRklMRSBhbmQvb3IgQ0FD
SEVfRUJVSUxEX0ZJTEUgdG8gdXNlIGRpZmZlcmVudCBjYWNoZSBmaWxlIik7CiAJCWdvdG8gcmV0
OwogCX0KIAotCS8qIFNBTSByZXZpZXcgd2l0aG91dCBnZW50b28hICovCiAJaWYgKChmcCA9IGZv
cGVuKGNhY2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5nICclcy8l
cycgZmFpbGVkIiwgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfRUJVSUxEID8gb3ZlcmxheV9nZW50b28t
PnBhdGggOiBvdmVybGF5X2dlbnRvby0+Y2FjaGUpLCBjYWNoZV9maWxlKTsKKwkJd2FybmZwKCJv
cGVuaW5nICclcy8lcycgZmFpbGVkIiwgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfRUJVSUxEID8gY2Fj
aGVfZmlsZV9kaXIgOiBtZXRhY2FjaGVfZmlsZV9kaXIpLCBjYWNoZV9maWxlKTsKIAkJZ290byBy
ZXQ7CiAJfQogCkBAIC03OTksNiArOTIwLDcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0
KGludCBjYWNoZV90eQogCQkJCQlicmVhazsKIAkJCQljYXNlIENBQ0hFX01FVEFEQVRBOgogCQkJ
CQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCQkJCWNvdW50Kys7CiAJCQkJCQlmcHJpbnRm
KGZwLCAiJXM6OiVzXG4iLCBkZSwgY3VyX292ZXJsYXktPm5hbWUpOwogCQkJCQljb250aW51ZTsK
IAkJCQkJYnJlYWs7CkBAIC04NDIsMjUgKzk2NCwyNSBAQCBjb25zdCBjaGFyICppbml0aWFsaXpl
X2ZsYXQoaW50IGNhY2hlX3R5CiByZXQ6CiAJcmV0dXJuIGNhY2hlX2ZpbGU7CiB9Ci0jZGVmaW5l
IGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQoKSBpbml0aWFsaXplX2ZsYXQoQ0FDSEVfRUJVSUxEKQot
I2RlZmluZSBpbml0aWFsaXplX21ldGFkYXRhX2ZsYXQoKSBpbml0aWFsaXplX2ZsYXQoQ0FDSEVf
TUVUQURBVEEpCisjZGVmaW5lIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQoZm9yY2UpIGluaXRpYWxp
emVfZmxhdChDQUNIRV9FQlVJTEQsIGZvcmNlKQorI2RlZmluZSBpbml0aWFsaXplX21ldGFkYXRh
X2ZsYXQoZm9yY2UpIGluaXRpYWxpemVfZmxhdChDQUNIRV9NRVRBREFUQSwgZm9yY2UpCiAKLXZv
aWQgcmVpbml0aWFsaXplX2VidWlsZF9mbGF0KHZvaWQpCit2b2lkIHJlaW5pdGlhbGl6ZV9lYnVp
bGRfZmxhdChzaG9ydCBmb3JjZSkKIHsKIAlpZiAoKGNoZGlyKGZpcnN0X292ZXJsYXktPnBhdGgp
KSAhPSAwKSB7CiAJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVkIiwgZmlyc3Rf
b3ZlcmxheS0+cGF0aCk7CiAJCXJldHVybjsKIAl9CiAJdW5saW5rKENBQ0hFX0VCVUlMRF9GSUxF
KTsKLQlpbml0aWFsaXplX2VidWlsZF9mbGF0KCk7CisJaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdChm
b3JjZSk7CiB9CiAKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKQogewogCWlmIChy
ZWluaXRpYWxpemUpCi0JCXJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCgpOworCQlyZWluaXRpYWxp
emVfZWJ1aWxkX2ZsYXQoMSk7CiAJaWYgKHJlaW5pdGlhbGl6ZV9tZXRhY2FjaGUpCi0JCWluaXRp
YWxpemVfbWV0YWRhdGFfZmxhdCgpOworCQlpbml0aWFsaXplX21ldGFkYXRhX2ZsYXQoMSk7CiB9
CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTEwMzksNyArMTE2MSw3IEBAIGNoYXIgKmdyYWJfdmRi
X2l0ZW0oY29uc3QgY2hhciAqaXRlbSwgY28KIAljaGFyICpwOwogCUZJTEUgKmZwOwogCi0Jc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMvJXMvJXMvJXMiLCBwb3J0cm9vdCwgcG9ydHZk
YiwgQ0FURUdPUlksIFBGLCBpdGVtKTsKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMv
JXMvJXMvJXMiLCBwb3J0dmRiLCBDQVRFR09SWSwgUEYsIGl0ZW0pOwogCWlmICgoZnAgPSBmb3Bl
bihidWYsICJyIikpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCWZnZXRzKGJ1Ziwgc2l6ZW9m
KGJ1ZiksIGZwKTsKQEAgLTEwNzAsOSArMTE5Miw2IEBAIHF1ZXVlICpnZXRfdmRiX2F0b21zKHZv
aWQpCiAKIAlhc3NlcnQoY2hkaXIoc2F2ZWN3ZCkgPT0gMCk7CiAKLQlpZiAoY2hkaXIocG9ydHJv
b3QpICE9IDApCi0JCWdvdG8gZnVja2l0OwotCiAJaWYgKGNoZGlyKHBvcnR2ZGIpICE9IDApCiAJ
CWdvdG8gZnVja2l0OwogCkBAIC0xMTY3LDMgKzEyODYsNSBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiB9CiAKICNpbmNsdWRlICJpbmNsdWRlX2FwcGxldHMuaCIKKy8qIHZpbTog
c2V0IG5vZXQgc3RzPTggc3c9OCA6ICovCisKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3
MDExNS5uZXcvbWFuL3Fsb3AuMSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9tYW4vcWxvcC4x
Ci0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9tYW4vcWxvcC4xCTIwMDctMDEtMTUgMTk6
MjE6MDUuMDEzMDY2MDExICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9tYW4v
cWxvcC4xCTIwMDctMDEtMTUgMTk6MjM6MTIuMzAxNjQ3MzM5ICswMTAwCkBAIC01LDcgKzUsNyBA
QCBxbG9wIFwtIGVtZXJnZSBsb2cgYW5hbHl6ZXIKIC5CIHFsb3AKIFxmSTxwa2duYW1lPlxmUgog
LlNIIERFU0NSSVBUSU9OCi1PcHRpb25zOiBcZkJcLVtndGx1c2NmOkY6SHZxQ2hWXVxmUgorT3B0
aW9uczogXGZCXC1bZ3RsdXNvOmNmXGZSOkY6SHZxQ2hWXQogLlRQCiBcZkJcLWdcZlIsIFxmQlwt
XC1nYXVnZVxmUgogKiBHYXVnZSBudW1iZXIgb2YgdGltZXMgYSBwYWNrYWdlIGhhcyBiZWVuIG1l
cmdlZApAQCAtMjUsNiArMjUsMTEgQEAgT3B0aW9uczogXGZCXC1bZ3RsdXNjZjpGOkh2cUNoVl1c
ZlIKIFxmQlwtc1xmUiwgXGZCXC1cLXN5bmNcZlIKICogU2hvdyBzeW5jIGhpc3RvcnkKIC5UUAor
XGZCXC1vXGZSLCBcZkJcLVwtb3ZlcmxheVxmUgorPGFyZz4KKy5CUgorKiBPbmx5IGNvbnNpZGVy
IHRoZSA8YXJnPiBvdmVybGF5CisuVFAKIFxmQlwtY1xmUiwgXGZCXC1cLWN1cnJlbnRcZlIKICog
U2hvdyBjdXJyZW50IGVtZXJnaW5nIHBhY2thZ2VzCiAuVFAKZGlmZiAtTmFydXAgcG9ydGFnZS11
dGlscy0yMDA3MDExNS5uZXcvcS5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL3EuYwotLS0g
cG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcS5jCTIwMDctMDEtMTUgMTk6MjE6NTguMzA5OTM1
MjM4ICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xLmMJMjAwNy0wMS0xNSAx
OToyMzoxMi4zMDk2NDYxMTkgKzAxMDAKQEAgLTE0NSwzICsxNDUsNSBAQCBpbnQgcV9tYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKIAogCXJldHVybiAoZnVuYykoYXJnYyAtIDEsICsrYXJndik7
CiB9CisvKiB2aW06IHNldCBub2V0IHN0cz04IHN3PTggOiAqLworCmRpZmYgLU5hcnVwIHBvcnRh
Z2UtdXRpbHMtMjAwNzAxMTUubmV3L3FmaWxlLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcv
cWZpbGUuYwotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWZpbGUuYwkyMDA3LTAxLTE1
IDE5OjIxOjU4LjMzNjkzMTEyMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcv
cWZpbGUuYwkyMDA3LTAxLTE1IDE5OjIzOjEyLjMxODY0NDc0NiArMDEwMApAQCAtNTQzLDExICs1
NDMsNiBAQCBpbnQgcWZpbGVfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKChhcmdz
X2ZpbGUgPT0gTlVMTCkgJiYgKG1heF9hcmdzICE9IFFGSUxFX0RFRkFVTFRfTUFYX0FSR1MpKQog
CQl3YXJuKCItLW1heC1hcmdzIGlzIG9ubHkgdXNlZCB3aGVuIHJlYWRpbmcgYXJndW1lbnRzIGZy
b20gYSBmaWxlICh3aXRoIC1mKSIpOwogCi0JaWYgKGNoZGlyKHBvcnRyb290KSkgewotCQl3YXJu
cCgiY291bGQgbm90IGNoZGlyKCVzKSBmb3IgUk9PVCIsIHBvcnRyb290KTsKLQkJZ290byBleGl0
OwotCX0KLQogCWlmIChjaGRpcihwb3J0dmRiKSAhPSAwKSB7CiAJCXdhcm5wKCJjb3VsZCBub3Qg
Y2hkaXIoUk9PVC8lcykgZm9yIGluc3RhbGxlZCBwYWNrYWdlcyBkYXRhYmFzZSIsIHBvcnR2ZGIp
OwogCQlnb3RvIGV4aXQ7CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3Fm
aWxlLmMub3JpZyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xZmlsZS5jLm9yaWcKLS0tIHBv
cnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FmaWxlLmMub3JpZwkyMDA3LTAxLTE1IDE5OjIxOjA1
LjAxMDA2NjQ2OCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcvcWZpbGUuYy5v
cmlnCTIwMDctMDEtMTUgMTk6MjM6MDIuNzA4MTEwODk0ICswMTAwCkBAIC02MDAsMTYgKzYwMCwx
NCBAQCBpbnQgcWZpbGVfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWlmIChuYl9vZl9x
dWVyaWVzIDwgMCkKIAkJCWdvdG8gZXhpdDsKIAotCQlpZiAoY2hkaXIocG9ydHJvb3QpCi0JCQkJ
fHwgY2hkaXIocG9ydHZkYikgIT0gMAotCQkJCXx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5V
TEwpIHsKLQkJCXdhcm5wKCJjb3VsZCBub3QgY2hkaXIoUk9PVC8lcykgZm9yIGluc3RhbGxlZCBw
YWNrYWdlcyBkYXRhYmFzZSIsIHBvcnR2ZGIpOworCQlpZiAoY2hkaXIocG9ydHZkYikgIT0gMCB8
fCAoZGlyID0gb3BlbmRpcigiLiIpKSA9PSBOVUxMKSB7CisJCQl3YXJucCgiY291bGQgbm90IGNo
ZGlyKCVzKSBmb3IgaW5zdGFsbGVkIHBhY2thZ2VzIGRhdGFiYXNlIiwgcG9ydHZkYik7CiAJCQln
b3RvIGV4aXQ7CiAJCX0KIAogCQkvKiBJdGVyYXRpb24gb3ZlciBWREIgY2F0ZWdvcmllcyAqLwog
CQl3aGlsZSAobmJfb2ZfcXVlcmllcyAmJiAoZGVudHJ5ID0gcV92ZGJfZ2V0X25leHRfZGlyKGRp
cikpKSB7Ci0JCQlzbnByaW50ZihwYXRoLCBfUV9QQVRIX01BWCwgIiVzLyVzLyVzIiwgcWZpbGVf
YXJncy0+cmVhbF9yb290LCBwb3J0dmRiLCBkZW50cnktPmRfbmFtZSk7CisJCQlzbnByaW50Zihw
YXRoLCBfUV9QQVRIX01BWCwgIiVzLyVzIiwgcG9ydHZkYiwgZGVudHJ5LT5kX25hbWUpOwogCQkJ
cWZpbGUocGF0aCwgKGFzc3VtZV9yb290X3ByZWZpeCA/IHJvb3RfcHJlZml4IDogTlVMTCksIHFm
aWxlX2FyZ3MpOwogCQl9CiAKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcv
cWdyZXAuYyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xZ3JlcC5jCi0tLSBwb3J0YWdlLXV0
aWxzLTIwMDcwMTE1Lm5ldy9xZ3JlcC5jCTIwMDctMDEtMTUgMTk6MjE6NTguMzQzOTMwMDUyICsw
MTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xZ3JlcC5jCTIwMDctMDEtMTUgMTk6
MjM6MTIuMzI2NjQzNTI2ICswMTAwCkBAIC05MCw3ICs5MCw3IEBAIGludCBxZ3JlcF9tYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoYXJnYyA9PSBvcHRpbmQpCiAJCXFncmVwX3VzYWdl
KEVYSVRfRkFJTFVSRSk7CiAKLQlpbml0aWFsaXplX2VidWlsZF9mbGF0KCk7CS8qIHNldHMgb3Vy
IHB3ZCB0byAkUE9SVERJUiAqLworCWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQoMCk7CS8qIHNldHMg
b3VyIHB3ZCB0byAkUE9SVERJUiAqLwogCiAJaWYgKChmcCA9IGZvcGVuKENBQ0hFX0VCVUlMRF9G
SUxFLCAiciIpKSA9PSBOVUxMKQogCQlyZXR1cm4gMTsKQEAgLTE5MSwzICsxOTEsNSBAQCBpbnQg
cWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAjZWxzZQogREVGSU5FX0FQUExFVF9T
VFVCKHFncmVwKQogI2VuZGlmCisvKiB2aW06IHNldCBub2V0IHN0cz04IHN3PTggOiAqLworCmRp
ZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FsaXN0LmMgcG9ydGFnZS11dGls
cy0yMDA3MDExNS5ORVcvcWxpc3QuYwotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWxp
c3QuYwkyMDA3LTAxLTE1IDE5OjIxOjA1LjAxMDA2NjQ2OCArMDEwMAorKysgcG9ydGFnZS11dGls
cy0yMDA3MDExNS5ORVcvcWxpc3QuYwkyMDA3LTAxLTE1IDE5OjIzOjEyLjMzNTY0MjE1MiArMDEw
MApAQCAtMTM3LDYgKzEzNyw3IEBAIGludCBxbGlzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAljaGFyIHFsaXN0X2FsbCA9IDAsIGp1c3RfcGtnbmFtZSA9IDAsIGR1cHNfb25seSA9IDA7
CiAJY2hhciBzaG93X2Rpciwgc2hvd19vYmosIHNob3dfc3ltLCBzaG93X3Nsb3RzLCBzaG93X3Vt
YXA7CiAJc3RydWN0IGRpcmVudCAqKmRlLCAqKmNhdDsKKwljaGFyIG92ZXJsYXlbNjRdOwogCWNo
YXIgYnVmW19RX1BBVEhfTUFYXTsKIAljaGFyIHN3YXBbX1FfUEFUSF9NQVhdOwogCXF1ZXVlICpz
ZXRzID0gTlVMTDsKQEAgLTE0Niw2ICsxNDcsNyBAQCBpbnQgcWxpc3RfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJICAgIGFyZ2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJO
VUxMPyIpOwogCiAJc2hvd19kaXIgPSBzaG93X29iaiA9IHNob3dfc3ltID0gc2hvd19zbG90cyA9
IHNob3dfdW1hcCA9IDA7CisJb3ZlcmxheVswXSA9IDA7CiAKIAl3aGlsZSAoKGkgPSBHRVRPUFRf
TE9ORyhRTElTVCwgcWxpc3QsICIiKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChpKSB7CkBAIC0xNjgs
MTIgKzE3MCw4IEBAIGludCBxbGlzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAo
KGFyZ2MgPT0gb3B0aW5kKSAmJiAoIWp1c3RfcGtnbmFtZSkpCiAJCXFsaXN0X3VzYWdlKEVYSVRf
RkFJTFVSRSk7CiAKLQlpZiAoY2hkaXIocG9ydHJvb3QpKQotCQllcnJwKCJjb3VsZCBub3QgY2hk
aXIoJXMpIGZvciBST09UIiwgcG9ydHJvb3QpOwotCiAJaWYgKGNoZGlyKHBvcnR2ZGIpICE9IDAp
Ci0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0KKwkJZXJycCgiY291bGQgbm90IGNoZGlyKCVzKSBm
b3IgVkRCIiwgcG9ydHZkYik7CiAKIAlpZiAoKGRmZCA9IHNjYW5kaXIoIi4iLCAmY2F0LCBmaWx0
ZXJfaGlkZGVuLCBhbHBoYXNvcnQpKSA8IDApCiAJCXJldHVybiBFWElUX0ZBSUxVUkU7CkBAIC0y
MjMsNiArMjIxLDkgQEAgaW50IHFsaXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ
aWYgKChpID09IGFyZ2MpICYmIChhcmdjICE9IG9wdGluZCkpCiAJCQkJY29udGludWU7CiAKKwkJ
CWlmICh2ZXJib3NlPjEpCisJCQkJc25wcmludGYob3ZlcmxheSwgc2l6ZW9mKG92ZXJsYXkpLCAi
OjolcyIsZ3JhYl92ZGJfaXRlbSgiUkVQT1NJVE9SWSIsIGNhdFtqXS0+ZF9uYW1lLCBkZVt4XS0+
ZF9uYW1lKSk7CisKIAkJCWlmIChqdXN0X3BrZ25hbWUpIHsKIAkJCQlpZiAoZHVwc19vbmx5KSB7
CiAJCQkJCXBrZ25hbWUgPSBhdG9tX2V4cGxvZGUoZGVbeF0tPmRfbmFtZSk7CkBAIC0yNDEsOSAr
MjQyLDEwIEBAIGludCBxbGlzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJCXNs
b3QgPSBncmFiX3ZkYl9pdGVtKCJTTE9UIiwgY2F0W2pdLT5kX25hbWUsIGRlW3hdLT5kX25hbWUp
OwogCiAJCQkJCS8qIGRpc3BsYXkgaXQgKi8KLQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyVzJXMl
cyVzIiwgQk9MRCwgY2F0W2pdLT5kX25hbWUsIEJMVUUsCisJCQkJCXByaW50ZigiJXMlcy8lcyVz
JXMlcyVzJXMlcyVzJXMiLCBCT0xELCBjYXRbal0tPmRfbmFtZSwgQkxVRSwKIAkJCQkJICAgICAg
IChwa2duYW1lID8gcGtnbmFtZS0+UE4gOiBkZVt4XS0+ZF9uYW1lKSwgTk9STSwKLQkJCQkJCVlF
TExPVywgc2xvdCA/ICIgIjogIiIsIHNsb3QgPyBzbG90IDogIiIsIE5PUk0pOworCQkJCQkJWUVM
TE9XLCBvdmVybGF5LAorCQkJCQkJUkVELCBzbG90ID8gIiAiOiAiIiwgc2xvdCA/IHNsb3QgOiAi
IiwgTk9STSk7CiAJCQkJCXB1dHModW1hcHN0cihzaG93X3VtYXAsIGNhdFtqXS0+ZF9uYW1lLCBk
ZVt4XS0+ZF9uYW1lKSk7CiAJCQkJfQogCQkJCWlmIChwa2duYW1lKQpAQCAtMjUzLDcgKzI1NSw3
IEBAIGludCBxbGlzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJY29udGludWU7
CiAJCQl9CiAKLQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVzL0NPTlRF
TlRTIiwgcG9ydHJvb3QsIHBvcnR2ZGIsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JXMvJXMvJXMvQ09OVEVOVFMiLCBwb3J0dmRiLAogCQkJICAgICAgICAgY2F0W2pdLT5kX25hbWUs
IGRlW3hdLT5kX25hbWUpOwogCiAJCQlpZiAodmVyYm9zZSA+IDEpCkBAIC0zMTEsOSArMzEzLDEw
IEBAIGludCBxbGlzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQljaGFyICpzbG90
ID0gTlVMTDsKIAkJCQlpZiAoc2hvd19zbG90cykKIAkJCQkJc2xvdCA9IChjaGFyICopIGdyYWJf
dmRiX2l0ZW0oIlNMT1QiLCAoY29uc3QgY2hhciAqKSBhdG9tLT5DQVRFR09SWSwgKGNvbnN0IGNo
YXIgKikgYXRvbS0+UCk7Ci0JCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyVzJXMlcyVzIiwgQk9MRCwg
YXRvbS0+Q0FURUdPUlksIEJMVUUsCisJCQkJcHJpbnRmKCIlcyVzLyVzJXMlcyVzJXMlcyVzJXMl
cyIsIEJPTEQsIGF0b20tPkNBVEVHT1JZLCBCTFVFLAogCQkJCQkodmVyYm9zZSA/IGF0b20tPlAg
OiBhdG9tLT5QTiksIE5PUk0sCi0JCQkJCVlFTExPVywgc2xvdCA/ICIgIiA6ICIiLCBzbG90ID8g
c2xvdCA6ICIiLCBOT1JNKTsKKwkJCQkJWUVMTE9XLCBvdmVybGF5LAorCQkJCQlSRUQsIHNsb3Qg
PyAiICIgOiAiIiwgc2xvdCA/IHNsb3QgOiAiIiwgTk9STSk7CiAJCQkJcHV0cyh1bWFwc3RyKHNo
b3dfdW1hcCwgYXRvbS0+Q0FURUdPUlksIGF0b20tPlApKTsKIAkJCX0KIAkJCWF0b21faW1wbG9k
ZShhdG9tKTsKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWxvcC5jIHBv
cnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL3Fsb3AuYwotLS0gcG9ydGFnZS11dGlscy0yMDA3MDEx
NS5uZXcvcWxvcC5jCTIwMDctMDEtMTUgMTk6MjE6MDUuMDExMDY2MzE1ICswMTAwCisrKyBwb3J0
YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xbG9wLmMJMjAwNy0wMS0xNSAxOToyMzoxMi4zNDU2NDA2
MjcgKzAxMDAKQEAgLTIxLDExICsyMSwxMSBAQAogIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogI2Vu
ZGlmCiAKLSNkZWZpbmUgUUxPUF9ERUZBVUxUX0xPR0ZJTEUgIi92YXIvbG9nL2VtZXJnZS5sb2ci
CisjZGVmaW5lIFFMT1BfREVGQVVMVF9MT0dGSUxFICIvdmFyL2xvZy9wYWx1ZGlzLmxvZyIKIAog
CiAKLSNkZWZpbmUgUUxPUF9GTEFHUyAiZ3RsdXNjZjpGOkgiIENPTU1PTl9GTEFHUworI2RlZmlu
ZSBRTE9QX0ZMQUdTICJndGx1c286Y2Y6RjpIIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qg
b3B0aW9uIGNvbnN0IHFsb3BfbG9uZ19vcHRzW10gPSB7CiAJeyJnYXVnZSIsICAgICBub19hcmd1
bWVudCwgTlVMTCwgJ2cnfSwKIAl7InRpbWUiLCAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAndCd9
LApAQCAtMzMsNiArMzMsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxbG9wX2xvbmdf
b3B0CiAJeyJsaXN0IiwgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2wnfSwKIAl7InVubGlzdCIs
ICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAndSd9LAogCXsic3luYyIsICAgICAgbm9fYXJndW1lbnQs
IE5VTEwsICdzJ30sCisJeyJvdmVybGF5IiwgICBhX2FyZ3VtZW50LCAgTlVMTCwgJ28nfSwKIAl7
ImN1cnJlbnQiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYyd9LAogCXsibG9nZmlsZSIsICAgIGFf
YXJndW1lbnQsIE5VTEwsICdmJ30sCiAJQ09NTU9OX0xPTkdfT1BUUwpAQCAtNDQsNiArNDUsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciAqcWxvcF9vcHRzX2hlbHBbXSA9IHsKIAkiU2hvdyBtZXJnZSBo
aXN0b3J5IiwKIAkiU2hvdyB1bm1lcmdlIGhpc3RvcnkiLAogCSJTaG93IHN5bmMgaGlzdG9yeSIs
CisJIkRvIG9ubHkgY29uc2lkZXIgdGhlIDxhcmc+IHJlcG9zaXRvcnkiLAogCSJTaG93IGN1cnJl
bnQgZW1lcmdpbmcgcGFja2FnZXMiLAogCSJSZWFkIGVtZXJnZSBsb2dmaWxlIGluc3RlYWQgb2Yg
IiBRTE9QX0RFRkFVTFRfTE9HRklMRSwKIAlDT01NT05fT1BUU19IRUxQCkBAIC03OSwzMCArODEs
MjkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNob3BfY3RpbWUodGltZV90IHQpCiAJcmV0dXJuIGN0
aW1lX291dDsKIH0KIAotdW5zaWduZWQgbG9uZyBzaG93X21lcmdlX3RpbWVzKGNoYXIgKnBhY2th
Z2UsIGNvbnN0IGNoYXIgKmxvZ2ZpbGUsIGludCBhdmVyYWdlLCBjaGFyIGh1bWFuX3JlYWRhYmxl
KTsKLXVuc2lnbmVkIGxvbmcgc2hvd19tZXJnZV90aW1lcyhjaGFyICpwYWNrYWdlLCBjb25zdCBj
aGFyICpsb2dmaWxlLCBpbnQgYXZlcmFnZSwgY2hhciBodW1hbl9yZWFkYWJsZSkKK3Vuc2lnbmVk
IGxvbmcgc2hvd19tZXJnZV90aW1lcyhjaGFyICpwYWNrYWdlLCBjb25zdCBzaG9ydCByZXBvLCBj
b25zdCBjaGFyIHJlcG9fc2VhcmNoW10sIGNvbnN0IGNoYXIgKmxvZ2ZpbGUsIGludCBhdmVyYWdl
LCBjaGFyIGh1bWFuX3JlYWRhYmxlKTsKK3Vuc2lnbmVkIGxvbmcgc2hvd19tZXJnZV90aW1lcyhj
aGFyICpwYWNrYWdlLCBjb25zdCBzaG9ydCByZXBvLCBjb25zdCBjaGFyIHJlcG9fc2VhcmNoW10s
IGNvbnN0IGNoYXIgKmxvZ2ZpbGUsIGludCBhdmVyYWdlLCBjaGFyIGh1bWFuX3JlYWRhYmxlKQog
ewogCUZJTEUgKmZwOwotCWNoYXIgY2F0WzEyNl0sIGJ1ZlsyXVtCVUZTSVpdOwotCWNoYXIgKnBr
ZywgKnA7CisJY2hhciBjYXRQTltCVUZTSVpdLCBidWZbMl1bQlVGU0laXSwgbWF0Y2hlZDsKKwlj
aGFyICpwLCAqcTsKIAl1bnNpZ25lZCBsb25nIGNvdW50LCBtZXJnZV90aW1lOwogCXRpbWVfdCB0
WzJdOwotCWRlcGVuZF9hdG9tICphdG9tOworCWRlcGVuZF9hdG9tICphdG9tLCpzZWFyY2g7CisJ
aW50IGw7CisJbG9uZyBwb3M7CiAKIAl0WzBdID0gdFsxXSA9IDBVTDsKIAljb3VudCA9IG1lcmdl
X3RpbWUgPSAwOwotCWNhdFswXSA9IDA7CisJbWF0Y2hlZCA9IDA7CisJcG9zID0gMDsKIAotCWlm
ICgocCA9IHN0cmNocihwYWNrYWdlLCAnLycpKSAhPSBOVUxMKSB7Ci0JCXBrZyA9IHAgKyAxOwot
CQlzdHJuY3B5KGNhdCwgcGFja2FnZSwgc2l6ZW9mKGNhdCkpOwotCQlpZiAoKHAgPSBzdHJjaHIo
Y2F0LCAnLycpKSAhPSBOVUxMKQotCQkJKnAgPSAwOwotCX0gZWxzZSB7Ci0JCXBrZyA9IHBhY2th
Z2U7Ci0JfQorCWlmICgoc2VhcmNoID0gYXRvbV9leHBsb2RlKHBhY2thZ2UpKSA9PSBOVUxMICkK
KwkJZXJyKCIlcyBpcyBub3QgYSB2YWxpZCBhdG9tIiwgcGFja2FnZSk7CisJaWYgKCFzZWFyY2gt
PkNBVEVHT1JZICYmICFzZWFyY2gtPlBOICYmICFzZWFyY2gtPk9WRVJMQVkpCisJCWVycigiWW91
IG5lZWQgdG8gc3BlY2lmeSBhdCBsZWFzdCBhbiBvdmVybGF5LCBhIGNhdGVnb3J5LCBvciBhIHBh
Y2thZ2UgbmFtZSIpOwogCi0JREJHKCJTZWFyY2hpbmcgZm9yICVzIGluICVzXG4iLCBwa2csIGxv
Z2ZpbGUpOworCURCRygiU2VhcmNoaW5nIGZvciAlcyBpbiAlc1xuIiwgcGFja2FnZSwgbG9nZmls
ZSk7CiAKIAlpZiAoKGZwID0gZm9wZW4obG9nZmlsZSwgInIiKSkgPT0gTlVMTCkgewogCQl3YXJu
cCgiQ291bGQgbm90IG9wZW4gbG9nZmlsZSAnJXMnIiwgbG9nZmlsZSk7CkBAIC0xMTAsNyArMTEx
LDE4IEBAIHVuc2lnbmVkIGxvbmcgc2hvd19tZXJnZV90aW1lcyhjaGFyICpwYWMKIAl9CiAKIAl3
aGlsZSAoKGZnZXRzKGJ1ZlswXSwgc2l6ZW9mKGJ1ZlswXSksIGZwKSkgIT0gTlVMTCkgewotCQlp
ZiAoc3Ryc3RyKGJ1ZlswXSwgcGtnKSA9PSBOVUxMKQorCQlpZiAobWF0Y2hlZCkgeworCQkJbWF0
Y2hlZCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBsZW4oIHRpbWU6e3N0YXJ0aW5nLGZp
bmlzaGVkfSBpbnN0YWxsIG9mIHBhY2thZ2UgKSA9IDQxICovCisJCWlmIChzZWFyY2gtPkNBVEVH
T1JZICYmICFzdHJzdHIoJmJ1ZlswXVs0MF0sIHNlYXJjaC0+Q0FURUdPUlkpKQorCQkJY29udGlu
dWU7CisKKwkJaWYgKHNlYXJjaC0+UE4gJiYgIXN0cnN0cigmYnVmWzBdWzQwXSwgc2VhcmNoLT5Q
TikpCisJCQljb250aW51ZTsKKworCQlpZiAoc2VhcmNoLT5PVkVSTEFZICYmICFzdHJzdHIoJmJ1
ZlswXVs0MF0sIHNlYXJjaC0+T1ZFUkxBWSkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoKHAgPSBz
dHJjaHIoYnVmWzBdLCAnXG4nKSkgIT0gTlVMTCkKQEAgLTEyMSw4MCArMTMzLDEzNyBAQCB1bnNp
Z25lZCBsb25nIHNob3dfbWVyZ2VfdGltZXMoY2hhciAqcGFjCiAJCXRbMF0gPSBhdG9sKGJ1Zlsw
XSk7CiAJCXN0cmNweShidWZbMV0sIHAgKyAxKTsKIAkJcm1zcGFjZShidWZbMV0pOwotCQlpZiAo
KHN0cm5jbXAoYnVmWzFdLCAiPj4+IGVtZXJnZSAoIiwgMTIpKSA9PSAwKSB7Ci0JCQljaGFyIG1h
dGNoZWQgPSAwOwotCQkJaWYgKChwID0gc3RyY2hyKGJ1ZlsxXSwgJyknKSkgPT0gTlVMTCkKKwkJ
aWYgKChzdHJuY21wKGJ1ZlsxXSwgInN0YXJ0aW5nIGluc3RhbGwgb2YgcGFja2FnZSIsIDI2KSkg
PT0gMCkgeworCQkJcCA9ICZidWZbMV1bMjhdOworCQkJaWYgKHJlcG8gJiYgIXN0cnN0cihwLCBy
ZXBvX3NlYXJjaCkpCiAJCQkJY29udGludWU7Ci0JCQkqcCA9IDA7Ci0JCQlzdHJjcHkoYnVmWzBd
LCBwICsgMSk7Ci0JCQlybXNwYWNlKGJ1ZlswXSk7Ci0JCQlpZiAoKHAgPSBzdHJjaHIoYnVmWzBd
LCAnICcpKSA9PSBOVUxMKQorCisJCQlpZiAoKHEgPSBzdHJjaHIocCwgJyAnKSkgPT0gTlVMTCkK
IAkJCQljb250aW51ZTsKLQkJCSpwID0gMDsKKwkJCSpxID0gMDsKKworCQkJc3RyY3B5KGJ1Zlsw
XSwgcCk7CisJCQlybXNwYWNlKGJ1ZlswXSk7CiAJCQlpZiAoKGF0b20gPSBhdG9tX2V4cGxvZGUo
YnVmWzBdKSkgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKCpjYXQpIHsKLQkJCQlp
ZiAoKHN0cmNtcChjYXQsIGF0b20tPkNBVEVHT1JZKSA9PSAwKSAmJiAoc3RyY21wKHBrZywgYXRv
bS0+UE4pID09IDApKQotCQkJCQltYXRjaGVkID0gMTsKLQkJCX0gZWxzZSBpZiAoc3RyY21wKHBr
ZywgYXRvbS0+UE4pID09IDApCi0JCQkJbWF0Y2hlZCA9IDE7CisJCQlpZiAoc2VhcmNoLT5DQVRF
R09SWSAmJiBzdHJjbXAoYXRvbS0+Q0FURUdPUlksIHNlYXJjaC0+Q0FURUdPUlkpKSB7CisJCQkJ
YXRvbV9pbXBsb2RlKGF0b20pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoc2VhcmNo
LT5QTiAmJiAqc2VhcmNoLT5QTiAmJiBzdHJjbXAoYXRvbS0+UE4sIHNlYXJjaC0+UE4pKSB7CisJ
CQkJYXRvbV9pbXBsb2RlKGF0b20pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoc2Vh
cmNoLT5QViAmJiBzdHJjbXAoYXRvbS0+UFYsIHNlYXJjaC0+UFYpKSB7CisJCQkJYXRvbV9pbXBs
b2RlKGF0b20pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoc2VhcmNoLT5QUl9pbnQg
JiYgYXRvbS0+UFJfaW50IT1zZWFyY2gtPlBSX2ludCkgeworCQkJCWF0b21faW1wbG9kZShhdG9t
KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHNlYXJjaC0+T1ZFUkxBWSAmJiBzdHJj
bXAoYXRvbS0+T1ZFUkxBWSwgc2VhcmNoLT5PVkVSTEFZKSkgeworCQkJCWF0b21faW1wbG9kZShh
dG9tKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXBvcyA9IGZ0ZWxsKGZwKTsKKwkJCW1hdGNo
ZWQgPSAxOwogCiAJCQlpZiAobWF0Y2hlZCkgewotCQkJCXdoaWxlICgoZmdldHMoYnVmWzBdLCBz
aXplb2YoYnVmWzBdKSwgZnApKSAhPSBOVUxMKSB7CisJCQkJLyogSW4gY2FzZSBvZiBzaW11bHRh
bmVvdXMgaW5zdGFsbCwgd2Ugc2VhcmNoIHRoZSBjb3JyZXNwb25kaW5nICovCisJCQkJLyogImZp
bmlzaGVkIGluc3RhbGwgb2YgcGFja2FnZSIgcGtnIHVwIHRvIDIwIGxpbmVzIGFmdGVyIHRoZSAn
c3RhcnRpbmcgbGluZScgKi8KKwkJCQlsPTA7CisJCQkJc25wcmludGYoY2F0UE4sIHNpemVvZihj
YXRQTiksICIlcy8lcy0lczo6JXMiLCBhdG9tLT5DQVRFR09SWSwgYXRvbS0+UE4sIChhdG9tLT5Q
Ul9pbnQgPyBhdG9tLT5QVlIgOiBhdG9tLT5QViksIGF0b20tPk9WRVJMQVkpOworCQkJCXdoaWxl
ICgoZmdldHMoYnVmWzBdLCBzaXplb2YoYnVmWzBdKSwgZnApKSAhPSBOVUxMICYmIGwrKyA8IDIw
KSB7CisJCQkJCWlmICgocCA9IHN0cmNocihidWZbMF0sJzonKSkgPT0gTlVMTCkKKwkJCQkJCWNv
bnRpbnVlOworCQkJCQlwID0gcCsyOworCisJCQkJCS8qIFN0b3AgdGhlIHNlYXJjaCBpbiBjYXNl
IHRoZSBwYWNrYWdlIGlzIGFscmVhZHkgYmVpbmcgcmVpbnN0YWxsZWQgZXZlbiBpbiBhIGRpZmZl
cmVudCB2ZXJzaW9uL3JldmlzaW9uICovCisJCQkJCWlmICghc3RybmNtcChwLCAic3RhcnRpbmci
LCA4KSAmJiBzdHJjbXAocCsyOCwgY2F0UE4pKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWYgKHN0
cm5jbXAocCwgImZpbmlzaGVkIGluc3RhbGwgb2YgcGFja2FnZSIsIDI2KSAhPSAwKQorCQkJCQkJ
Y29udGludWU7CisJCQkJCWlmICghc3RyY21wKHArMjgsIGNhdFBOKSkKKwkJCQkJCWNvbnRpbnVl
OworCiAJCQkJCWlmICgocCA9IHN0cmNocihidWZbMF0sICdcbicpKSAhPSBOVUxMKQogCQkJCQkJ
KnAgPSAwOwogCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmWzBdLCAnOicpKSA9PSBOVUxMKQotCQkJ
CQkJY29udGludWU7Ci0JCQkJCSpwID0gMDsKKwkJCQkJCSpwID0gMDsKIAkJCQkJdFsxXSA9IGF0
b2woYnVmWzBdKTsKIAkJCQkJc3RyY3B5KGJ1ZlsxXSwgcCArIDEpOwogCQkJCQlybXNwYWNlKGJ1
ZlsxXSk7Ci0JCQkJCWlmICgqYnVmWzFdID09ICcqJykKLQkJCQkJCWJyZWFrOwotCQkJCQlpZiAo
KHN0cm5jbXAoYnVmWzFdLCAiOjo6IGNvbXBsZXRlZCBlbWVyZ2UgKCIsIDIyKSkgPT0gMCkgewot
CQkJCQkJaWYgKCFhdmVyYWdlKSB7Ci0JCQkJCQkJc3RyY3B5KGJ1ZlsxXSwgIiIpOwotCQkJCQkJ
CWlmICh2ZXJib3NlKSB7Ci0JCQkJCQkJCWlmIChhdG9tLT5QUl9pbnQpCi0JCQkJCQkJCQlzbnBy
aW50ZihidWZbMV0sIHNpemVvZihidWZbMV0pLCAiLSVzLXIlaSIsIGF0b20tPlBWLCAgYXRvbS0+
UFJfaW50KTsKLQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJc25wcmludGYoYnVmWzFdLCBzaXplb2Yo
YnVmWzFdKSwgIi0lcyIsIGF0b20tPlBWKTsKLQkJCQkJCQl9Ci0JCQkJCQkJcHJpbnRmKCIlcyVz
JXMlczogJXM6ICIsIEJMVUUsIGF0b20tPlBOLCBidWZbMV0sIE5PUk0sIGNob3BfY3RpbWUodFsw
XSkpOwotCQkJCQkJCWlmIChodW1hbl9yZWFkYWJsZSkKLQkJCQkJCQkJcHJpbnRfc2Vjb25kc19m
b3JfZWFydGhsaW5ncyh0WzFdIC0gdFswXSk7Ci0JCQkJCQkJZWxzZQotCQkJCQkJCQlwcmludGYo
IiVzJWx1JXMgc2Vjb25kcyIsIEdSRUVOLCAodFsxXSAtIHRbMF0pLCBOT1JNKTsKLQkJCQkJCQlw
dXRzKCIiKTsKLQkJCQkJCX0KLQkJCQkJCW1lcmdlX3RpbWUgKz0gKHRbMV0gLSB0WzBdKTsKLQkJ
CQkJCWNvdW50Kys7Ci0JCQkJCQlicmVhazsKKworCQkJCQlpZiAoIWF2ZXJhZ2UpIHsKKwkJCQkJ
CXN0cmNweShidWZbMV0sICIiKTsKKwkJCQkJCWlmICh2ZXJib3NlKQorCQkJCQkJCXNucHJpbnRm
KGJ1ZlsxXSwgc2l6ZW9mKGJ1ZlsxXSksICItJXMlczo6JXMgIiwgKGF0b20tPlBSX2ludCA/IGF0
b20tPlBWUiA6IGF0b20tPlBWKSwgWUVMTE9XLCBhdG9tLT5PVkVSTEFZKTsKKworCQkJCQkJcHJp
bnRmKCIlcyVzLyVzJXMlcyVzOiAlczogIiwgR1JFRU4sIGF0b20tPkNBVEVHT1JZLCBCTFVFLCBh
dG9tLT5QTiwgYnVmWzFdLCBOT1JNLCBjaG9wX2N0aW1lKHRbMF0pKTsKKwkJCQkJCWlmIChodW1h
bl9yZWFkYWJsZSkKKwkJCQkJCQlwcmludF9zZWNvbmRzX2Zvcl9lYXJ0aGxpbmdzKHRbMV0gLSB0
WzBdKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwcmludGYoIiVzJWx1JXMgc2Vjb25kcyIsIEdSRUVO
LCAodFsxXSAtIHRbMF0pLCBOT1JNKTsKKwkJCQkJCXB1dHMoIiIpOwogCQkJCQl9CisJCQkJCW1l
cmdlX3RpbWUgKz0gKHRbMV0gLSB0WzBdKTsKKwkJCQkJY291bnQrKzsKKwkJCQkJYnJlYWs7CisK
IAkJCQl9CiAJCQl9CiAJCQlhdG9tX2ltcGxvZGUoYXRvbSk7CisJCQkvKiB0aW1lIHRvIGdvIGJh
Y2sgd2hlcmUgd2Ugd2VyZSAqLworCQkJZnNlZWsoZnAsIHBvcywgU0VFS19TRVQpOwogCQl9CiAJ
fQogCWZjbG9zZShmcCk7CiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAwOwogCWlmIChhdmVy
YWdlID09IDEpIHsKLQkJcHJpbnRmKCIlcyVzJXM6ICIsIEJMVUUsIHBrZywgTk9STSk7CisJCXBy
aW50ZigiJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyA6ICIsIEdSRUVOLCAoc2VhcmNoLT5DQVRFR09S
WT8gc2VhcmNoLT5DQVRFR09SWSA6ICIiKSwgKHNlYXJjaC0+Q0FURUdPUlkgPyAiLyI6ICIiKSwK
KwkJCQkJQkxVRSwgc2VhcmNoLT5QTiwgKHNlYXJjaC0+UFYgPyAiLSIgOiAiIiksIChzZWFyY2gt
PlBWID8gKHNlYXJjaC0+UFJfaW50ID8gc2VhcmNoLT5QVlIgOiBzZWFyY2gtPlBWKSA6ICIiKSwK
KwkJCQkJWUVMTE9XLCAoc2VhcmNoLT5PVkVSTEFZID8gIjo6IiA6ICIiKSwgKHNlYXJjaC0+T1ZF
UkxBWSA/IHNlYXJjaC0+T1ZFUkxBWSA6ICIiKSwgTk9STSk7CiAJCWlmIChodW1hbl9yZWFkYWJs
ZSkKIAkJCXByaW50X3NlY29uZHNfZm9yX2VhcnRobGluZ3MobWVyZ2VfdGltZSAvIGNvdW50KTsK
IAkJZWxzZQotCQkJcHJpbnRmKCIlcyVsdSVzIHNlY29uZHMgYXZlcmFnZSIsIEdSRUVOLCBtZXJn
ZV90aW1lIC8gY291bnQsIE5PUk0pOwotCQlwcmludGYoIiBmb3IgJXMlbHUlcyBtZXJnZXNcbiIs
IEdSRUVOLCBjb3VudCwgTk9STSk7CisJCQlwcmludGYoIiVzJWx1JXMgc2Vjb25kcyIsIEdSRUVO
LCBtZXJnZV90aW1lIC8gY291bnQsIE5PUk0pOworCQlwcmludGYoIiBhdmVyYWdlIGZvciAlcyVs
dSVzIG1lcmdlcyVzIiwgR1JFRU4sIGNvdW50LCBOT1JNLCAodmVyYm9zZSA/ICIsIGZvciBhIHRv
dGFsIHRpbWUgb2YgIiA6ICIiKSk7CisKKwkJaWYgKHZlcmJvc2UpIHsKKwkJCWlmIChodW1hbl9y
ZWFkYWJsZSkKKwkJCQlwcmludF9zZWNvbmRzX2Zvcl9lYXJ0aGxpbmdzKG1lcmdlX3RpbWUpOwor
CQkJZWxzZQorCQkJCXByaW50ZigiJXMlbHUlcyBzZWNvbmRzIiwgR1JFRU4sIG1lcmdlX3RpbWUs
IE5PUk0pOworCQl9CisJCWZwdXRjKCdcbicsIHN0ZG91dCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRm
KCIlcyVzJXM6ICVzJWx1JXMgdGltZXNcbiIsIEJMVUUsIHBrZywgTk9STSwgR1JFRU4sIGNvdW50
LCBOT1JNKTsKKwkJcHJpbnRmKCIlcyVzJXMlcyVzJXMlcyVzJXMlcyVzIDogJXMlbHUlcyB0aW1l
cyVzIiwgR1JFRU4sIChzZWFyY2gtPkNBVEVHT1JZID8gc2VhcmNoLT5DQVRFR09SWSA6ICIiKSwg
KHNlYXJjaC0+Q0FURUdPUlkgPyAiLyI6ICIiKSwKKwkJCQkJCQlCTFVFLCAoc2VhcmNoLT5QTiA/
IHNlYXJjaC0+UE4gOiAiIiksICAoc2VhcmNoLT5QViA/ICItIiA6ICIiKSwgKHNlYXJjaC0+UFYg
PyAoc2VhcmNoLT5QUl9pbnQgPyBzZWFyY2gtPlBWUiA6IHNlYXJjaC0+UFYpIDogIiIpLAorCQkJ
CQkJCVlFTExPVywgKHNlYXJjaC0+T1ZFUkxBWSA/ICI6OiIgOiAiIiksIChzZWFyY2gtPk9WRVJM
QVkgPyBzZWFyY2gtPk9WRVJMQVkgOiAiIiksCisJCQkJCQkJTk9STSwgR1JFRU4sIGNvdW50LCBO
T1JNLAorCQkJCQkJCSh2ZXJib3NlID8gIiwgZm9yIGEgdG90YWwgdGltZSBvZiAiIDogIiIpKTsK
KwkJaWYgKHZlcmJvc2UpIHsKKwkJCWlmIChodW1hbl9yZWFkYWJsZSkKKwkJCQlwcmludF9zZWNv
bmRzX2Zvcl9lYXJ0aGxpbmdzKG1lcmdlX3RpbWUpOworCQkJZWxzZQorCQkJCXByaW50ZigiJXMl
bHUlcyBzZWNvbmRzIiwgR1JFRU4sIG1lcmdlX3RpbWUsIE5PUk0pOworCQl9CisJCWZwdXRjKCdc
bicsIHN0ZG91dCk7CiAJfQorCWF0b21faW1wbG9kZShzZWFyY2gpOwogCXJldHVybiAwOwogfQog
Ci12b2lkIHNob3dfZW1lcmdlX2hpc3RvcnkoY2hhciBsaXN0ZmxhZywgaW50IGFyZ2MsIGNoYXIg
Kiphcmd2LCBjb25zdCBjaGFyICpsb2dmaWxlKTsKLXZvaWQgc2hvd19lbWVyZ2VfaGlzdG9yeShj
aGFyIGxpc3RmbGFnLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmxvZ2ZpbGUp
Cit2b2lkIHNob3dfZW1lcmdlX2hpc3RvcnkoY2hhciBsaXN0ZmxhZywgY29uc3Qgc2hvcnQgcmVw
bywgY29uc3QgY2hhciByZXBvX3NlYXJjaFtdLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0
IGNoYXIgKmxvZ2ZpbGUpOwordm9pZCBzaG93X2VtZXJnZV9oaXN0b3J5KGNoYXIgbGlzdGZsYWcs
IGNvbnN0IHNob3J0IHJlcG8sIGNvbnN0IGNoYXIgcmVwb19zZWFyY2hbXSwgaW50IGFyZ2MsIGNo
YXIgKiphcmd2LCBjb25zdCBjaGFyICpsb2dmaWxlKQogewogCUZJTEUgKmZwOwogCWNoYXIgYnVm
W0JVRlNJWl0sIG1lcmdlZDsKQEAgLTIyMiwyMyArMjkxLDMwIEBAIHZvaWQgc2hvd19lbWVyZ2Vf
aGlzdG9yeShjaGFyIGxpc3RmbGFnLCAKIAkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkgPT0g
TlVMTCkKIAkJCWNvbnRpbnVlOwogCQkqcCA9IDA7Ci0JCXEgPSBwICsgMzsKKwkJcSA9IHAgKyAy
OwogCiAJCXQgPSAodGltZV90KSBhdG9sKGJ1Zik7CiAKLQkJaWYgKChsaXN0ZmxhZyAmIFFMT1Bf
TElTVCkgJiYgIXN0cm5jbXAocSwgIjo6OiBjb21wbGV0ZWQgZW1lcmdlICgiLCAyMikpIHsKKwkJ
aWYgKChsaXN0ZmxhZyAmIFFMT1BfTElTVCkgJiYgIXN0cm5jbXAocSwgImZpbmlzaGVkIGluc3Rh
bGwgb2YgcGFja2FnZSIsIDI1KSkgewogCQkJbWVyZ2VkID0gMTsKLQkJCWlmICgocCA9IHN0cmNo
cihxLCAnKScpKSA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCQkJcSA9IHAgKyAyOworCQkJcCA9
IHN0cnN0cihxLCAicGFja2FnZSIpOworCQkJcSA9IHAgKyAxOwogCQkJaWYgKChwID0gc3RyY2hy
KHEsICcgJykpID09IE5VTEwpCiAJCQkJY29udGludWU7Ci0JCQkqcCA9IDA7Ci0JCX0gZWxzZSBp
ZiAoKGxpc3RmbGFnICYgUUxPUF9VTkxJU1QpICYmICFzdHJuY21wKHEsICI+Pj4gdW5tZXJnZSBz
dWNjZXNzOiAiLCAyMSkpIHsKKwkJCXEgPSBwICsgMTsKKwkJCWlmIChyZXBvKSB7CisJCQkJaWYg
KChwID0gc3Ryc3RyKHEsICI6OiIpKSAmJiBzdHJuY21wKHArMiwgcmVwb19zZWFyY2gsIHNpemVv
ZihyZXBvX3NlYXJjaCkpKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmICgobGlz
dGZsYWcgJiBRTE9QX1VOTElTVCkgJiYgIXN0cm5jbXAocSwgImZpbmlzaGVkIHVuaW5zdGFsbCBv
ZiBwYWNrYWdlIiwgMjkpKSB7CiAJCQltZXJnZWQgPSAwOwotCQkJaWYgKChwID0gc3RyY2hyKHEs
ICc6JykpID09IE5VTEwpCisJCQlwID0gc3Ryc3RyKHEsICJwYWNrYWdlIik7CisJCQlxID0gcCAr
IDE7CisJCQlpZiAoKHAgPSBzdHJjaHIocSwgJyAnKSkgPT0gTlVMTCkKIAkJCQljb250aW51ZTsK
LQkJCXEgPSBwICsgMjsKKwkJCXEgPSBwICsgMTsKKwkJCWlmICgocCA9IHN0cmNocihwLCAnOicp
KSAhPSBOVUxMKQorCQkJCSpwID0gMDsKIAkJfQogCQllbHNlCiAJCQljb250aW51ZTsKQEAgLTI1
OCw4ICszMzQsOCBAQCB2b2lkIHNob3dfZW1lcmdlX2hpc3RvcnkoY2hhciBsaXN0ZmxhZywgCiAJ
ZmNsb3NlKGZwKTsKIH0KIAotdm9pZCBzaG93X3N5bmNfaGlzdG9yeShjb25zdCBjaGFyICpsb2dm
aWxlKTsKLXZvaWQgc2hvd19zeW5jX2hpc3RvcnkoY29uc3QgY2hhciAqbG9nZmlsZSkKK3ZvaWQg
c2hvd19zeW5jX2hpc3RvcnkoY29uc3QgY2hhciAqbG9nZmlsZSwgY29uc3Qgc2hvcnQgcmVwbywg
Y2hhciByZXBvX3NlYXJjaFtdKTsKK3ZvaWQgc2hvd19zeW5jX2hpc3RvcnkoY29uc3QgY2hhciAq
bG9nZmlsZSwgY29uc3Qgc2hvcnQgcmVwbywgY2hhciByZXBvX3NlYXJjaFtdKQogewogCUZJTEUg
KmZwOwogCWNoYXIgYnVmW0JVRlNJWl07CkBAIC0yNzQsNyArMzUwLDEwIEBAIHZvaWQgc2hvd19z
eW5jX2hpc3RvcnkoY29uc3QgY2hhciAqbG9nZmkKIAl3aGlsZSAoKGZnZXRzKGJ1Ziwgc2l6ZW9m
KGJ1ZiksIGZwKSkgIT0gTlVMTCkgewogCQlpZiAoc3RybGVuKGJ1ZikgPCAzNSkKIAkJCWNvbnRp
bnVlOwotCQlpZiAoc3RybmNtcChidWYrMTIsICI9PT0gU3luYyBjb21wbGV0ZWQgd2l0aCIsIDIz
KSAhPSAwKQorCQlpZiAoc3RybmNtcChidWYrMTIsICJmaW5pc2hlZCBzeW5jIiwgMTMpICE9IDAp
CisJCQljb250aW51ZTsKKworCQlpZiAocmVwbyAmJiBzdHJzdHIoYnVmLCByZXBvX3NlYXJjaCkg
PT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgocCA9IHN0cmNocihidWYsICdcbicpKSAh
PSBOVUxMKQpAQCAtMjgyLDEzICszNjEsMTMgQEAgdm9pZCBzaG93X3N5bmNfaGlzdG9yeShjb25z
dCBjaGFyICpsb2dmaQogCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnOicpKSA9PSBOVUxMKQogCQkJ
Y29udGludWU7CiAJCSpwID0gMDsKLQkJcSA9IHArMjsKKwkJcSA9IHArMTsKIAogCQl0ID0gKHRp
bWVfdClhdG9sKGJ1Zik7CiAKLQkJaWYgKChwID0gc3Ryc3RyKHEsICJ3aXRoIikpID09IE5VTEwp
CisJCWlmICgocCA9IHN0cnN0cihxLCAicmVwb3NpdG9yeSIpKSA9PSBOVUxMKQogCQkJY29udGlu
dWU7Ci0JCXEgPSBwICsgNTsKKwkJcSA9IHAgKyAxMTsKIAogCQlwcmludGYoIiVzID4+PiAlcyVz
JXNcbiIsIGNob3BfY3RpbWUodCksIEdSRUVOLCBxLCBOT1JNKTsKIAl9CkBAIC0zMDQsMTAgKzM4
MywxMSBAQCB2b2lkIHNob3dfY3VycmVudF9lbWVyZ2Uodm9pZCkKIAlwaWRfdCBwaWQ7CiAJY2hh
ciBidWZbQlVGU0laRV0sIGJ1ZnN0YXRbMzAwXTsKIAljaGFyIHBhdGhbNTBdOwotCWNoYXIgKnAs
ICpxOworCWNoYXIgKnAsICpxLCAqY2F0LCAqcG52OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFy
dF90aW1lID0gMDsKIAlkb3VibGUgdXB0aW1lX3NlY3M7CiAJdGltZV90IHN0YXJ0X2RhdGU7CisJ
b3ZlcmxheV90ICpvdmVybGF5X3RtcDsKIAogCWlmICgocHJvYyA9IG9wZW5kaXIoIi9wcm9jIikp
ID09IE5VTEwpIHsKIAkJd2FybnAoIkNvdWxkIG5vdCBvcGVuIC9wcm9jIik7CkBAIC0zMTksMTUg
KzM5OSw0MyBAQCB2b2lkIHNob3dfY3VycmVudF9lbWVyZ2Uodm9pZCkKIAkJaWYgKChwaWQgPSAo
cGlkX3QpYXRvbChkZS0+ZF9uYW1lKSkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIHBvcnRh
Z2UgcmVuYW1lcyB0aGUgY21kbGluZSBzbyB0aGUgcGFja2FnZSBuYW1lIGlzIGZpcnN0ICovCiAJ
CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9wcm9jLyVpL2NtZGxpbmUiLCBwaWQpOwog
CQlpZiAoIWVhdF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQogCQkJY29udGludWU7CiAK
LQkJaWYgKGJ1ZlswXSA9PSAnWycgJiYgKHAgPSBzdHJjaHIoYnVmLCAnXScpKSAhPSBOVUxMICYm
IHN0cnN0cihidWYsICJzYW5kYm94IikgIT0gTlVMTCkgewotCQkJKnAgPSAnXDAnOwotCQkJcCA9
IGJ1ZisxOwotCQkJcSA9IHAgKyBzdHJsZW4ocCkgKyAxOworCQlpZiAoISBzdHJuY21wKGJ1Ziwg
InNhbmRib3giLCA3KSkgeworCQkJLyoJCQkgIDAxMjM0NTY3ODkwMTIzNDU2NzggKi8KKwkJCWlm
ICghKHAgPSBzdHJzdHIoJmJ1Zls4XSwicGFsdWRpcy9lYnVpbGQuYmFzaCIpKSkKKwkJCQljb250
aW51ZTsKKworCQkJcSA9IHAgKyAyMDsKKwkJCWlmICgqcSAhPSAnLycpCisJCQkJY29udGludWU7
CisKKwkJCS8qCisJCQkgKiBleDogL3Zhci9wYWx1ZGlzL3JlcG9zaXRvcmllcy9sb2NhbC9jYXRl
Z29yeS9wYWNrYWdlX25hbWUvcGFja2FnZV9uYW1lX3ZlcnNpb24uZWJ1aWxkCisJCQkgKiBleHBl
Y3RlZDoKKwkJCSAqICAgICBxCQkJICAgICAgIGNhdCAgICAgMAkgICAgIHBudgorCQkJICovCisJ
CQlpZiAocSA9PSAocG52PXN0cnJjaHIocSwgJy8nKSkpCisJCQkJY29udGludWU7CisJCQkqcG52
ID0gMDsKKwkJCXBudisrOworCQkJaWYgKHEgPT0gKGNhdD1zdHJyY2hyKHEsICcvJykpKQorCQkJ
CWNvbnRpbnVlOworCQkJKmNhdCA9IDA7CisJCQlpZiAocSA9PSAoY2F0PXN0cnJjaHIocSwgJy8n
KSkpCisJCQkJY29udGludWU7CisJCQkqY2F0ID0gMDsKKwkJCWNhdCsrOworCQkJb3ZlcmxheV90
bXA9Zmlyc3Rfb3ZlcmxheTsKKwkJCWRvIHsKKwkJCQlpZiAoIXN0cmNtcChxLCBvdmVybGF5X3Rt
cC0+cGF0aCkpCisJCQkJCWJyZWFrOworCQkJfSB3aGlsZSAoKG92ZXJsYXlfdG1wPW92ZXJsYXlf
dG1wLT5uZXh0KSk7CisKKwkJCWlmIChOVUxMID09IG92ZXJsYXlfdG1wKQorCQkJCWNvbnRpbnVl
OwogCiAJCQkvKiBvcGVuIHRoZSBzdGF0IGZpbGUgdG8gZmlndXJlIG91dCBob3cgbG9uZyB3ZSBo
YXZlIGJlZW4gcnVubmluZyAqLwogCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3By
b2MvJWkvc3RhdCIsIHBpZCk7CkBAIC0zNTYsMTAgKzQ2NCwxMCBAQCB2b2lkIHNob3dfY3VycmVu
dF9lbWVyZ2Uodm9pZCkKIAkJCS8qIGZpZ3VyZSBvdXQgd2hlbiB0aGlzIHRoaW5nIHN0YXJ0ZWQg
YW5kIHRoZW4gc2hvdyBpdCAqLwogCQkJc3RhcnRfZGF0ZSA9IHRpbWUoMCkgLSAodXB0aW1lX3Nl
Y3MgLSAoc3RhcnRfdGltZSAvIEhaKSk7CiAJCQlwcmludGYoCi0JCQkJIiAlcyolcyAlcyVzJXNc
biIKKwkJCQkiICVzKiVzICVzOjolcyVzJXMvJXMlc1xuIgogCQkJCSIgICAgIHN0YXJ0ZWQ6ICVz
JXMlc1xuIgogCQkJCSIgICAgIGVsYXBzZWQ6ICIsIC8qJXMlbGx1JXMgc2Vjb25kc1xuIiwqLwot
CQkJCUJPTEQsIE5PUk0sIEJMVUUsIHAsIE5PUk0sCisJCQkJQk9MRCwgWUVMTE9XLCBvdmVybGF5
X3RtcC0+bmFtZSwgTk9STSwgQkxVRSwgY2F0LCBwbnYsIE5PUk0sCiAJCQkJR1JFRU4sIGNob3Bf
Y3RpbWUoc3RhcnRfZGF0ZSksIE5PUk0pOwogCQkJcHJpbnRfc2Vjb25kc19mb3JfZWFydGhsaW5n
cyh1cHRpbWVfc2VjcyAtIChzdGFydF90aW1lIC8gSFopKTsKIAkJCXB1dHMoTk9STSk7CkBAIC0z
ODAsNiArNDg4LDEwIEBAIHZvaWQgc2hvd19jdXJyZW50X2VtZXJnZSh2b2lkKQogCWNoYXIgKnAs
ICpxOwogCXRpbWVfdCBzdGFydF9kYXRlID0gMDsKIAorCS8qIHRoaXMgd291bGQgbmVlZCB0byBi
ZSB3cml0dGVuIGZvciBwYWx1ZGlzLCBidXQgSSBkb24ndCByZWFsbHkga25vdyAqQlNEICovCisJ
d2FybigiWW91IG5lZWQgdG8gYWRhcHQgdGhlIHNob3dfY3VycmVudF9lbWVyZ2Uodm9pZCkgZnVu
Y3Rpb24gZm9yIF9fRnJlZUJTRF9fXG4iCisJCSJ0aGlzIG1heSBiZSB0cml2aWFsLCBqdXN0IGRv
IGFzIGluIHRoZSBfX2xpbnV4X18gb25lLCBidXQgYXMgSSBjYW4ndCB0ZXN0IGl0LCBJIGRpZG4n
dCBtYWtlIGl0Iik7CisKIAlpZiAoISAoa2QgPSBrdm1fb3BlbigiL2Rldi9udWxsIiwgIi9kZXYv
bnVsbCIsICIvZGV2L251bGwiLCBPX1JET05MWSwgImt2bV9vcGVuIikpKSB7CiAJCXdhcm5wKCJD
b3VsZCBub3Qgb3BlbiBrdm06ICVzIiwga3ZtX2dldGVycihrZCkpOwogCQlyZXR1cm47CkBAIC00
MzMsMTIgKzU0NSwxNyBAQCBpbnQgcWxvcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlp
bnQgaSwgYXZlcmFnZSA9IDE7CiAJY2hhciBkb190aW1lLCBkb19saXN0LCBkb191bmxpc3QsIGRv
X3N5bmMsIGRvX2N1cnJlbnQsIGRvX2h1bWFuX3JlYWRhYmxlID0gMDsKIAljaGFyICpvcHRfbG9n
ZmlsZTsKKwlzaG9ydCByZXBvOworCWNoYXIgcmVwb19zZWFyY2hbNjRdOwogCWNvbnN0IGNoYXIg
KmxvZ2ZpbGUgPSBRTE9QX0RFRkFVTFRfTE9HRklMRTsKKwlvdmVybGF5X3QgKm92ZXJsYXlfdG1w
OwogCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIsCiAJCWFyZ2MsIGFyZ3Zb
MF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwogCiAJb3B0X2xvZ2ZpbGUgPSBOVUxM
OworCXJlcG8gPSAwOworCXJlcG9fc2VhcmNoWzBdID0gMDsKIAlkb190aW1lID0gZG9fbGlzdCA9
IGRvX3VubGlzdCA9IGRvX3N5bmMgPSBkb19jdXJyZW50ID0gMDsKIAogCXdoaWxlICgoaSA9IEdF
VE9QVF9MT05HKFFMT1AsIHFsb3AsICIiKSkgIT0gLTEpIHsKQEAgLTQ0OCw3ICs1NjUsMTQgQEAg
aW50IHFsb3BfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQljYXNlICd0JzogZG9fdGlt
ZSA9IDE7IGJyZWFrOwogCQkJY2FzZSAnbCc6IGRvX2xpc3QgPSAxOyBicmVhazsKIAkJCWNhc2Ug
J3UnOiBkb191bmxpc3QgPSAxOyBicmVhazsKLQkJCWNhc2UgJ3MnOiBkb19zeW5jID0gMTsgYnJl
YWs7CisJCQljYXNlICdzJzoKKwkJCQlpZiAoZG9fc3luYykgZXJyKCJPbmx5IHVzZSAtcyBvciAt
UyBvbmNlIik7CisJCQkJZG9fc3luYyA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdvJzoKKwkJ
CQlyZXBvID0gMTsKKwkJCQlzdHJuY3B5KHJlcG9fc2VhcmNoLCBvcHRhcmcsIHNpemVvZihyZXBv
X3NlYXJjaCkpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnYyc6IGRvX2N1cnJlbnQgPSAxOyBicmVh
azsKIAkJCWNhc2UgJ2cnOiBkb190aW1lID0gMTsgYXZlcmFnZSA9IDA7IGJyZWFrOwogCQkJY2Fz
ZSAnSCc6IGRvX2h1bWFuX3JlYWRhYmxlID0gMTsgYnJlYWs7CkBAIC00NTgsNiArNTgyLDE2IEBA
IGludCBxbG9wX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWJyZWFrOwogCQl9CiAJ
fQorCWlmIChyZXBvKSB7CisJCW92ZXJsYXlfdG1wID0gZmlyc3Rfb3ZlcmxheTsKKwkJZG8gewor
CQkJaWYgKCFzdHJuY21wKG92ZXJsYXlfdG1wLT5uYW1lLCByZXBvX3NlYXJjaCwgc2l6ZW9mKG92
ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKChvdmVybGF5X3RtcD1v
dmVybGF5X3RtcC0+bmV4dCkpOworCQlpZiAoTlVMTCA9PSBvdmVybGF5X3RtcCkKKwkJCWVycigi
JXMgOiBVbmtub3duIG92ZXJsYXksIHRyeSAncSAtLWxzLW92ZXJsYXlzJyIsIHJlcG9fc2VhcmNo
KTsKKwl9CisKIAlpZiAoIWRvX2xpc3QgJiYgIWRvX3VubGlzdCAmJiAhZG9fdGltZSAmJiAhZG9f
c3luYyAmJiAhZG9fY3VycmVudCkKIAkJcWxvcF91c2FnZShFWElUX0ZBSUxVUkUpOwogCWlmIChv
cHRfbG9nZmlsZSAhPSBOVUxMKQpAQCAtNDY3LDE5ICs2MDEsMTkgQEAgaW50IHFsb3BfbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJYXJndiArPSBvcHRpbmQ7CiAKIAlpZiAoZG9fbGlzdCAm
JiBkb191bmxpc3QpCi0JCXNob3dfZW1lcmdlX2hpc3RvcnkoUUxPUF9MSVNUIHwgUUxPUF9VTkxJ
U1QsIGFyZ2MsIGFyZ3YsIGxvZ2ZpbGUpOworCQlzaG93X2VtZXJnZV9oaXN0b3J5KFFMT1BfTElT
VCB8IFFMT1BfVU5MSVNULCByZXBvLCByZXBvX3NlYXJjaCxhcmdjLCBhcmd2LCBsb2dmaWxlKTsK
IAllbHNlIGlmIChkb19saXN0KQotCQlzaG93X2VtZXJnZV9oaXN0b3J5KFFMT1BfTElTVCwgYXJn
YywgYXJndiwgbG9nZmlsZSk7CisJCXNob3dfZW1lcmdlX2hpc3RvcnkoUUxPUF9MSVNULCByZXBv
LCByZXBvX3NlYXJjaCwgYXJnYywgYXJndiwgbG9nZmlsZSk7CiAJZWxzZSBpZiAoZG9fdW5saXN0
KQotCQlzaG93X2VtZXJnZV9oaXN0b3J5KFFMT1BfVU5MSVNULCBhcmdjLCBhcmd2LCBsb2dmaWxl
KTsKKwkJc2hvd19lbWVyZ2VfaGlzdG9yeShRTE9QX1VOTElTVCwgcmVwbywgcmVwb19zZWFyY2gs
IGFyZ2MsIGFyZ3YsIGxvZ2ZpbGUpOwogCWlmIChkb19jdXJyZW50KQogCQlzaG93X2N1cnJlbnRf
ZW1lcmdlKCk7CiAJaWYgKGRvX3N5bmMpCi0JCXNob3dfc3luY19oaXN0b3J5KGxvZ2ZpbGUpOwor
CQlzaG93X3N5bmNfaGlzdG9yeShsb2dmaWxlLCByZXBvLCByZXBvX3NlYXJjaCk7CiAKIAlpZiAo
ZG9fdGltZSkgewogCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgKytpKQotCQkJc2hvd19tZXJnZV90
aW1lcyhhcmd2W2ldLCBsb2dmaWxlLCBhdmVyYWdlLCBkb19odW1hbl9yZWFkYWJsZSk7CisJCQlz
aG93X21lcmdlX3RpbWVzKGFyZ3ZbaV0sIHJlcG8sIHJlcG9fc2VhcmNoLCBsb2dmaWxlLCBhdmVy
YWdlLCBkb19odW1hbl9yZWFkYWJsZSk7CiAJfQogCiAJaWYgKG9wdF9sb2dmaWxlKSBmcmVlKG9w
dF9sb2dmaWxlKTsKQEAgLTQ5MCwzICs2MjQsNSBAQCBpbnQgcWxvcF9tYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKICNlbHNlCiBERUZJTkVfQVBQTEVUX1NUVUIocWxvcCkKICNlbmRpZgorLyog
dmltOiBzZXQgbm9ldCBzdHM9OCBzdz04IDogKi8KKwpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxz
LTIwMDcwMTE1Lm5ldy9xc2VhcmNoLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcvcXNlYXJj
aC5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xc2VhcmNoLmMJMjAwNy0wMS0xNSAx
OToyMTo1OC4zNTM5Mjg1MjcgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL3Fz
ZWFyY2guYwkyMDA3LTAxLTE1IDE5OjIzOjEyLjM1MzYzOTQwNyArMDEwMApAQCAtMTAwLDcgKzEw
MCw3IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCWxh
c3RbMF0gPSAwOwotCWZwID0gZm9wZW4oaW5pdGlhbGl6ZV9mbGF0KHNlYXJjaF9jYWNoZSksICJy
Iik7CisJZnAgPSBmb3Blbihpbml0aWFsaXplX2ZsYXQoc2VhcmNoX2NhY2hlLCAwKSwgInIiKTsK
IAlpZiAoIWZwKQogCQlyZXR1cm4gMTsKIApAQCAtMTM3LDcgKzEzNyw2IEBAIGludCBxc2VhcmNo
X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5
LT5wYXRoKSAhPSAwKSB7CiAJCQkJCQkJd2FybnAoImNoZGlyIHRvICclcycgZmFpbGVkIiwgY3Vy
X292ZXJsYXktPnBhdGgpOwogCQkJCQkJCW15ZXJyb3IgPSAxOwotCQkJCQkJCWNvbnRpbnVlOwog
CQkJCQkJfSBlbHNlCiAJCQkJCQkJYmFkX292ZXJsYXkgPSAwOwogCQkJCQkJYnJlYWs7CkBAIC0x
NDUsNyArMTQ0LDYgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ
CQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPmNhY2hlKSAhPSAwKSB7CiAJCQkJCQkJd2FybnAo
ImNoZGlyIHRvICclcycgZmFpbGVkLCBza2lwcGluZyB0aGUgJXMgcmVwb3NpdG9yeSIsIGN1cl9v
dmVybGF5LT5jYWNoZSwgY3VyX292ZXJsYXktPm5hbWUpOwogCQkJCQkJCW15ZXJyb3IgPSAxOwot
CQkJCQkJCWNvbnRpbnVlOwogCQkJCQkJfSBlbHNlCiAJCQkJCQkJYmFkX292ZXJsYXkgPSAwOwog
CQkJCQkJYnJlYWs7CkBAIC0xNTQsNyArMTUyLDcgQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YpCiAJCQkJCW15ZXJyb3IgPSAxOwogCQkJCXN0cm5jcHkob3ZlcmxheV9u
YW1lLCBwKzIsIHNpemVvZihvdmVybGF5X25hbWUpKTsKIAkJCX0KLQkJfSBlbHNlCisJCX0gZWxz
ZSAKIAkJCW15ZXJyb3IrKzsKIAogCQlpZiAobXllcnJvcikgewpAQCAtMjcxLDMgKzI2OSw1IEBA
IG5vX2NhY2hlX2VidWlsZF9tYXRjaDoKICNlbHNlCiBERUZJTkVfQVBQTEVUX1NUVUIocXNlYXJj
aCkKICNlbmRpZgorLyogdmltOiBzZXQgbm9ldCBzdHM9OCBzdz04IDogKi8KKwpkaWZmIC1OYXJ1
cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xc2l6ZS5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAx
MTUuTkVXL3FzaXplLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FzaXplLmMJMjAw
Ny0wMS0xNSAxOToyMTowNS4wMTIwNjYxNjMgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAx
MTUuTkVXL3FzaXplLmMJMjAwNy0wMS0xNSAxOToyMzoxMi4zNjI2MzgwMzUgKzAxMDAKQEAgLTY4
LDEwICs2OCwxMCBAQCBpbnQgcXNpemVfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYg
KChhcmdjID09IG9wdGluZCkgJiYgIXNlYXJjaF9hbGwpCiAJCXFzaXplX3VzYWdlKEVYSVRfRkFJ
TFVSRSk7CiAKLQlpZiAoY2hkaXIocG9ydHJvb3QpKQotCQllcnJwKCJjb3VsZCBub3QgY2hkaXIo
JXMpIGZvciBST09UIiwgcG9ydHJvb3QpOworCWlmIChjaGRpcihwb3J0dmRiKSkKKwkJZXJycCgi
Y291bGQgbm90IGNoZGlyKCVzKSBmb3IgVkRCIiwgcG9ydHZkYik7CiAKLQlpZiAoY2hkaXIocG9y
dHZkYikgIT0gMCB8fCAoZGlyID0gb3BlbmRpcigiLiIpKSA9PSBOVUxMKQorCWlmICgoZGlyID0g
b3BlbmRpcigiLiIpKSA9PSBOVUxMKQogCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwogCiAJbnVtX2Fs
bF9ieXRlcyA9IG51bV9hbGxfZmlsZXMgPSBudW1fYWxsX25vbmZpbGVzID0gMDsKQEAgLTkxLDkg
KzkxLDkgQEAgaW50IHFzaXplX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJCQkvKiBz
ZWUgaWYgdGhpcyBjYXQvcGtnIGlzIHJlcXVlc3RlZCAqLwogCQkJaWYgKCFzZWFyY2hfYWxsKSB7
CisJCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzOjolcyIsIGRlbnRyeS0+ZF9u
YW1lLAorCQkJCQkgZGUtPmRfbmFtZSwgZ3JhYl92ZGJfaXRlbSgiUkVQT1NJVE9SWSIsIGRlbnRy
eS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKSk7CiAJCQkJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsg
KytpKSB7Ci0JCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcyIsIGRlbnRyeS0+
ZF9uYW1lLAotCQkJCQkgICAgICAgICBkZS0+ZF9uYW1lKTsKIAkJCQkJaWYgKHJlbWF0Y2goYXJn
dltpXSwgYnVmLCBSRUdfRVhURU5ERUQpID09IDApCiAJCQkJCQlicmVhazsKIAkJCQkJaWYgKHJl
bWF0Y2goYXJndltpXSwgZGUtPmRfbmFtZSwgUkVHX0VYVEVOREVEKSA9PSAwKQpAQCAtMTAzLDcg
KzEwMyw3IEBAIGludCBxc2l6ZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJY29u
dGludWU7CiAJCQl9CiAKLQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVz
L0NPTlRFTlRTIiwgcG9ydHJvb3QsIHBvcnR2ZGIsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihi
dWYpLCAiJXMvJXMvJXMvQ09OVEVOVFMiLCBwb3J0dmRiLAogCQkJICAgICAgICAgZGVudHJ5LT5k
X25hbWUsIGRlLT5kX25hbWUpOwogCQkJaWYgKChmcCA9IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVM
TCkKIAkJCQljb250aW51ZTsKQEAgLTEyOCw4ICsxMjgsOSBAQCBpbnQgcXNpemVfbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCiAJCQludW1fYWxsX2ZpbGVzICs9IG51bV9maWxlczsKIAkJCW51
bV9hbGxfbm9uZmlsZXMgKz0gbnVtX25vbmZpbGVzOwogCQkJaWYgKCFzdW1tYXJ5X29ubHkpIHsK
LQkJCQlwcmludGYoIiVzJXMvJXMlcyVzOiAlbHUgZmlsZXMsICVsdSBub24tZmlsZXMsICIsIEJP
TEQsCi0JCQkJICAgICAgIGJhc2VuYW1lKGRlbnRyeS0+ZF9uYW1lKSwgQkxVRSwgZGUtPmRfbmFt
ZSwgTk9STSwKKwkJCQlwcmludGYoIiVzJXMvJXMlcyVzOjolcyVzIDogJWx1IGZpbGVzLCAlbHUg
bm9uLWZpbGVzLCAiLCBCT0xELAorCQkJCSAgICAgICBiYXNlbmFtZShkZW50cnktPmRfbmFtZSks
IEJMVUUsIGRlLT5kX25hbWUsIAorCQkJCSAgICAgICBZRUxMT1csIGdyYWJfdmRiX2l0ZW0oIlJF
UE9TSVRPUlkiLCBkZW50cnktPmRfbmFtZSwgZGUtPmRfbmFtZSksIE5PUk0sCiAJCQkJICAgICAg
ICh1bnNpZ25lZCBsb25nKW51bV9maWxlcywKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnVt
X25vbmZpbGVzKTsKIAkJCQlpZiAoZGlzcF91bml0cykKZGlmZiAtTmFydXAgcG9ydGFnZS11dGls
cy0yMDA3MDExNS5uZXcvcXVzZS5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL3F1c2UuYwot
LS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcXVzZS5jCTIwMDctMDEtMTUgMTk6MjE6NTgu
MzYxOTI3MzA3ICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xdXNlLmMJMjAw
Ny0wMS0xNSAxOToyMzoxMi4zNzA2MzY4MTUgKzAxMDAKQEAgLTMwNSw3ICszMDUsNyBAQCBpbnQg
cXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoaWR4ID09IC0xKQogCQlyZXR1
cm4gcXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgcmVwbywgcmVwb19zZWFyY2gsIGFyZ2MsIGFy
Z3YpOwogCi0JaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCgpOwkvKiBzZXRzIG91ciBwd2QgdG8gJFBP
UlRESVIgKi8KKwlpbml0aWFsaXplX2VidWlsZF9mbGF0KDApOwkvKiBzZXRzIG91ciBwd2QgdG8g
JFBPUlRESVIgKi8KIAogCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoX3ZhcnNbaWR4XSk7CiAJ
YXNzZXJ0KHNlYXJjaF9sZW4gPCBzaXplb2YoYnVmMCkpOwpAQCAtNTIzLDMgKzUyMyw1IEBAIGlu
dCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogI2Vsc2UKIERFRklORV9BUFBMRVRf
U1RVQihxdXNlKQogI2VuZGlmCisvKiB2aW06IHNldCBub2V0IHN0cz04IHN3PTggOiAqLworCg==
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107183</attachid>
            <date>2007-01-16 15:52 0000</date>
            <desc>overlay-support.patch</desc>
            <filename>overlay-support.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9saWJxL2F0b21fY29tcGFyZS5jIHBv
cnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L2xpYnEvYXRvbV9jb21wYXJlLmMKLS0tIHBvcnRhZ2Ut
dXRpbHMtMjAwNzAxMTUvbGlicS9hdG9tX2NvbXBhcmUuYwkyMDA3LTAxLTE1IDE5OjIwOjEzLjAw
MDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbGlicS9hdG9tX2Nv
bXBhcmUuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjIzOTk0NTkxNiArMDEwMApAQCAtNDMsMTEgKzQz
LDI3IEBAIGludCBhdG9tX2NvbXBhcmUoY29uc3QgZGVwZW5kX2F0b20gKiBjb24KIAogCS8qIGNo
ZWNrIHZlcnNpb24gKi8KIAlpZiAoYTEtPlBWICYmIGEyLT5QVikgeworCQlpbnQgaTsKIAkJY2hh
ciAqczEsICpzMjsKIAkJdW5zaWduZWQgaW50IG4xLCBuMjsKIAkJLyogZmlyc3Qgd2UgY29tcGFy
ZSB0aGUgdmVyc2lvbiBbMS4wXXpfYWxwaGExICovCiAJCXMxID0gYTEtPlBWOwogCQlzMiA9IGEy
LT5QVjsKKwkJLyogdHJlYXQgdGhlIGNhc2Ugb2Ygc3ZuL2xpdmUvc2NtL2N2cy4uIHZlcnNpb24g
Ki8KKwkJbjE9bjI9MDsKKwkJZm9yIChpPTA7IGk8QVJSX1NJWkUoYXRvbV92ZXJzaW9uX3N0cik7
ICsraSkgeworCQkJaWYgKCFzdHJjbXAoczEsJmF0b21fdmVyc2lvbl9zdHJbaV0udmVyc2lvblsx
XSkpCisJCQkJbjE9MTsKKwkJCWlmICghc3RyY21wKHMyLCZhdG9tX3ZlcnNpb25fc3RyW2ldLnZl
cnNpb25bMV0pKQorCQkJCW4yPTE7CisJCX0KKwkJaWYgKG4xK24yKSB7CisJCQlpZiAobjE9PW4y
KQorCQkJCWdvdG8gc2FtZV92ZXJzaW9uOworCQkJZWxzZQorCQkJCXJldHVybiAobjE8bjIgPyBP
TERFUiA6IE5FV0VSKTsKKwkJfQorCiAJCXdoaWxlIChzMSB8fCBzMikgewogCQkJaWYgKHMxICYm
IHMyKSB7CiAJCQkJLyogZGVhbCB3aXRoIGxlYWRpbmcgemVyb3MgKi8KQEAgLTEwMSw3ICsxMTcs
NyBAQCBpbnQgYXRvbV9jb21wYXJlKGNvbnN0IGRlcGVuZF9hdG9tICogY29uCiAJCS8qIGZhbGwg
dGhyb3VnaCB0byAtciMgY2hlY2sgYmVsb3cgKi8KIAl9IGVsc2UgaWYgKGExLT5QViB8fCBhMi0+
UFYpCiAJCXJldHVybiBOT1RfRVFVQUw7Ci0KK3NhbWVfdmVyc2lvbjoKIAlpZiAoYTEtPlBSX2lu
dCA9PSBhMi0+UFJfaW50KQogCQlyZXR1cm4gRVFVQUw7CiAJZWxzZSBpZiAoYTEtPlBSX2ludCA8
IGEyLT5QUl9pbnQpCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvbGlicS9hdG9t
X2V4cGxvZGUuYyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9saWJxL2F0b21fZXhwbG9kZS5j
Ci0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L2xpYnEvYXRvbV9leHBsb2RlLmMJMjAwNy0wMS0x
NSAxOToyMDoxMy4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3
L2xpYnEvYXRvbV9leHBsb2RlLmMJMjAwNy0wMS0xNSAxOToyMTo1OC4yNDg5NDQ1NDMgKzAxMDAK
QEAgLTEzLDggKzEzLDIxIEBACiAKIHR5cGVkZWYgZW51bSB7IFZFUl9BTFBIQT0wLCBWRVJfQkVU
QSwgVkVSX1BSRSwgVkVSX1JDLCBWRVJfTk9STSwgVkVSX1AgfSBhdG9tX3N1ZmZpeGVzOwogY29u
c3QgY2hhciAqIGNvbnN0IGF0b21fc3VmZml4ZXNfc3RyW10gPSB7ICJfYWxwaGEiLCAiX2JldGEi
LCAiX3ByZSIsICJfcmMiLCAiXy8qYm9ndXMqLyIsICJfcCIsIE5VTEwgfTsKK2NvbnN0IHN0cnVj
dCB7CisJY29uc3QgY2hhciAqdmVyc2lvbjsKKwljb25zdCBzaXplX3QgdmVyc2lvbl9sZW47Cit9
IGF0b21fdmVyc2lvbl9zdHJbXSA9IHsKKwl7Ii1zY20iLCA0fSwKKwl7Ii1jdnMiLCA0fSwKKwl7
Ii1zdm4iLCA0fSwKKwl7Ii1saXZlIiwgNX0sCisJeyItOTk5OSIsIDV9Cit9OworCisKIAogdHlw
ZWRlZiBzdHJ1Y3QgeworCWNoYXIgKk9WRVJMQVk7CiAJY2hhciAqQ0FURUdPUlk7CiAJY2hhciAq
UE47CiAJaW50IFBSX2ludDsKQEAgLTYxLDYgKzc0LDE2IEBAIGRlcGVuZF9hdG9tICphdG9tX2V4
cGxvZGUoY29uc3QgY2hhciAqYXQKIAlyZXQtPnN1ZmZpeCA9IFZFUl9OT1JNOwogCW1lbWNweShy
ZXQtPkNBVEVHT1JZLCBhdG9tLCBzbGVuKTsKIAorCS8qIGZpbmQgdGhlIE9WRVJMQVksIGlmIHBy
ZXNlbnQgKi8KKwlpZiAoKHB0cl90bXA9c3Ryc3RyKHJldC0+Q0FURUdPUlksICI6OiIpKSkgewor
CQlpZiAoKihwdHJfdG1wKzIpKQorCQkJcmV0LT5PVkVSTEFZID0gcHRyX3RtcCArIDI7CisJCWVs
c2UKKwkJCXJldC0+T1ZFUkxBWSA9IE5VTEw7CisJCSpwdHJfdG1wID0gMDsKKwkJcHRyX3RtcCA9
IE5VTEw7CisJfQorCiAJLyogYnJlYWsgdXAgdGhlIENBVEVPR1JZIGFuZCBQVlIgKi8KIAlpZiAo
KHB0ciA9IHN0cnJjaHIocmV0LT5DQVRFR09SWSwgJy8nKSkgIT0gTlVMTCkgewogCQlyZXQtPlBO
ID0gcHRyKzE7CkBAIC0xNDQsNiArMTY3LDE2IEBAIGVhdF92ZXJzaW9uOgogCQkJcmV0LT5QViA9
IHB0cl90bXArMTsKIAkJCXJldC0+UFZbLTFdID0gJ1wwJzsKIAkJCWdvdG8gZm91bmRfcHY7CisJ
CX0KKworCQkgZm9yIChpPTA7IGk8QVJSX1NJWkUoYXRvbV92ZXJzaW9uX3N0cik7ICsraSkKKwkJ
CWlmICgocHRyX3RtcCA9IHN0cnN0cihyZXQtPlBOLCBhdG9tX3ZlcnNpb25fc3RyW2ldLnZlcnNp
b24pKSAmJiBwdHJfdG1wID09IHJldC0+UE4rc3RybGVuKHJldC0+UE4pLWF0b21fdmVyc2lvbl9z
dHJbaV0udmVyc2lvbl9sZW4pCisJCQkJYnJlYWs7CisKKwkJaWYgKHB0cl90bXAgJiYgKnB0cl90
bXApIHsKKwkJCXJldC0+UFYgPSBwdHJfdG1wKzE7CisJCQlyZXQtPlBWWy0xXSA9ICdcMCc7CisJ
CQlnb3RvIGZvdW5kX3B2OwogCQl9IGVsc2UgewogCQkJLyogYXRvbSBoYXMgbm8gdmVyc2lvbiAq
LwogCQkJcmV0LT5QViA9IHJldC0+UFZSID0gTlVMTDsKZGlmZiAtTmFydXAgcG9ydGFnZS11dGls
cy0yMDA3MDExNS9tYWluLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFpbi5jCi0tLSBw
b3J0YWdlLXV0aWxzLTIwMDcwMTE1L21haW4uYwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAw
MCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFpbi5jCTIwMDctMDEtMTUg
MTk6MjE6NTguMjU3OTQzMTcwICswMTAwCkBAIC03MSw2ICs3MSw3IEBAIGludCByZW1hdGNoKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKIHN0YXRpYyBjaGFyICpybXNwYWNlKGNoYXIgKik7
CiAKIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9v
dmVybGF5cyAoY2hhciBwb3J0ZGlyX292ZXJsYXlbXSk7CiB2b2lkIGluaXRpYWxpemVfZWJ1aWxk
X2ZsYXQodm9pZCk7CiB2b2lkIHJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCh2b2lkKTsKIHZvaWQg
cmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKQEAgLTg1LDEzICs4NiwyNCBAQCBzdGF0aWMg
aW50IHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyIHByZXRlbmQgPSAwOwogc3RhdGljIGNoYXIgcmVp
bml0aWFsaXplID0gMDsKIHN0YXRpYyBjaGFyIHJlaW5pdGlhbGl6ZV9tZXRhY2FjaGUgPSAwOwot
c3RhdGljIGNoYXIgcG9ydGRpcltfUV9QQVRIX01BWF0gPSAiL3Vzci9wb3J0YWdlIjsKIHN0YXRp
YyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOwotc3RhdGljIGNoYXIgcG9ydHZkYltdID0gInZhci9k
Yi9wa2ciOworc3RhdGljIGNoYXIgcG9ydHZkYltfUV9QQVRIX01BWF0gPSAidmFyL2RiL3BrZyI7
CiBzdGF0aWMgY2hhciBwb3J0Y2FjaGVkaXJbXSA9ICJtZXRhZGF0YS9jYWNoZSI7CiBzdGF0aWMg
Y2hhciBwb3J0cm9vdFtfUV9QQVRIX01BWF0gPSAiLyI7CiBzdGF0aWMgY2hhciBjb25maWdfcHJv
dGVjdFtfUV9QQVRIX01BWF0gPSAiL2V0Yy8iOwogCit0eXBlZGVmIHN0cnVjdCBvdmVybGF5X3Qg
b3ZlcmxheV90Oworc3RydWN0IG92ZXJsYXlfdCB7CisJY2hhciBuYW1lWzY0XTsKKwljaGFyIHBh
dGhbX1FfUEFUSF9NQVhdOworCWNoYXIgY2FjaGVbX1FfUEFUSF9NQVhdOworCXN0cnVjdCBvdmVy
bGF5X3QgKm5leHQ7Cit9OworCitzdGF0aWMgb3ZlcmxheV90ICpmaXJzdF9vdmVybGF5ID0gTlVM
TDsKKy8qIHRlbXBvcmFyeSB3b3JrYXJvdW5kID8gKi8KK3N0YXRpYyBvdmVybGF5X3QgKm92ZXJs
YXlfZ2VudG9vID0gTlVMTDsKKwogY2hhciBwa2dkaXJbNTEyXSA9ICIvdXNyL3BvcnRhZ2UvcGFj
a2FnZXMvIjsKIGNoYXIgcG9ydF90bXBkaXJbNTEyXSA9ICIvdmFyL3RtcC9wb3J0YWdlLyI7CiAK
QEAgLTIwMSwxMCArMjEzLDEwIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGludCBzdGF0dXMsIGNvbnN0
IGNoYXIKIAlmb3IgKGkgPSAwOyBvcHRzW2ldLm5hbWU7ICsraSkgewogCQlhc3NlcnQoaGVscFtp
XSAhPSBOVUxMKTsgLyogdGhpcyBhc3NlcnQgaXMgYSBsaWZlIHNhdmVyIHdoZW4gYWRkaW5nIG5l
dyBhcHBsZXRzLiAqLwogCQlpZiAob3B0c1tpXS5oYXNfYXJnID09IG5vX2FyZ3VtZW50KQotCQkJ
cHJpbnRmKCIgIC0lYywgLS0lLTE1cyVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKKwkJCXByaW50
ZigiICAtJWMsIC0tJS0xNnMlcyolcyAlc1xuIiwgb3B0c1tpXS52YWwsCiAJCQkJb3B0c1tpXS5u
YW1lLCBSRUQsIE5PUk0sIF8oaGVscFtpXSkpOwogCQllbHNlCi0JCQlwcmludGYoIiAgLSVjLCAt
LSUtOHMgJXM8YXJnPiVzICVzKiVzICVzXG4iLCBvcHRzW2ldLnZhbCwKKwkJCXByaW50ZigiICAt
JWMsIC0tJS05cyAlczxhcmc+JXMgJXMqJXMgJXNcbiIsIG9wdHNbaV0udmFsLAogCQkJCW9wdHNb
aV0ubmFtZSwgREtCTFVFLCBOT1JNLCBSRUQsIE5PUk0sIF8oaGVscFtpXSkpOwogCX0KIAlleGl0
KHN0YXR1cyk7CkBAIC00NjcsMTcgKzQ3OSw4NSBAQCBjaGFyICpzdHJpbmNyX3Zhcihjb25zdCBj
aGFyICpuYW1lLCBjaGFyCiAJcmV0dXJuIChjaGFyICopIHZhbHVlOwogfQogCit2b2lkIGluaXRp
YWxpemVfb3ZlcmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pCit7CisJc2hvcnQgbWVycm9y
ID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpFXSwgZmlsZVtfUV9QQVRIX01BWF0sICpzLCAqcCwgKnQ7
CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKKwlGSUxFICpyZXBvX25hbWVGUDsKKwlzID0gcG9y
dGRpcl9vdmVybGF5OworCisJZmlyc3Rfb3ZlcmxheSA9IHhtYWxsb2Moc2l6ZW9mKCpmaXJzdF9v
dmVybGF5KSk7CisJY3VyX292ZXJsYXkgPSBmaXJzdF9vdmVybGF5OworCisJd2hpbGUgKCpzKSB7
CisJCS8qIGV4Y2VwdCBvbiB0aGUgZmlyc3QgbG9vcCAqLworCQlpZiAocyE9cG9ydGRpcl9vdmVy
bGF5KSB7CisJCQljdXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2MgKHNpemVvZiAoKmN1cl9vdmVy
bGF5LT5uZXh0KSk7CisJCQljdXJfb3ZlcmxheSA9IGN1cl9vdmVybGF5LT5uZXh0OworCQl9CisJ
CWN1cl9vdmVybGF5LT5uZXh0ID0gTlVMTDsKKworCQlpZiAoKHA9c3RyY2hyKHMsJyAnKSkpCisJ
CQkqcCA9IDA7CisKKwkJc25wcmludGYoY3VyX292ZXJsYXktPnBhdGgsIHNpemVvZihjdXJfb3Zl
cmxheS0+cGF0aCksICIlcyVzIiwgKHN0cmNtcChwb3J0cm9vdCwgIi8iKSA/IHBvcnRyb290IDog
IiIpLCBzKTsKKworCQkvKiBmaW5kIHRoZSBuYW1lIGZvciB0aGUgb3ZlcmxheSAqLworCQlzbnBy
aW50ZihmaWxlLCBzaXplb2YoZmlsZSksICIlcy9wcm9maWxlcy9yZXBvX25hbWUiLCBjdXJfb3Zl
cmxheS0+cGF0aCk7CisKKwkJaWYgKChyZXBvX25hbWVGUCA9IGZvcGVuKGZpbGUsICJyIikpKSB7
CisJCQlpZiAoIShmZ2V0cyhidWYsIHNpemVvZihidWYpLHJlcG9fbmFtZUZQKSkpCisJCQkJbWVy
cm9yKys7CisJCQlybXNwYWNlKGJ1Zik7CisJCQlpZiAoKHQgPSBzdHJjaHIoYnVmLCdcbicpKSkK
KwkJCQkqdCA9IDA7CisJCQlzdHJuY3B5KGN1cl9vdmVybGF5LT5uYW1lLCBidWYsIHNpemVvZihj
dXJfb3ZlcmxheS0+bmFtZSkpOworCisJCQlmY2xvc2UocmVwb19uYW1lRlApOworCQl9IGVsc2UK
KwkJCW1lcnJvcisrOworCisJCWlmIChtZXJyb3IpIHsKKwkJCS8qIGRlbGV0ZSB0cmFpbGluZyAn
LycgKi8KKwkJCXQgPSBjdXJfb3ZlcmxheS0+cGF0aCArIHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0
aCkgLSAxOworCQkJaWYgKCp0ID09ICcvJykKKwkJCQkqdCA9IDA7CisJCQlzdHJuY3B5KGZpbGUs
IGN1cl9vdmVybGF5LT5wYXRoLCBzaXplb2YoZmlsZSkpOworCQkJc3RybmNweShjdXJfb3Zlcmxh
eS0+bmFtZSwgYmFzZW5hbWUoZmlsZSksIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpOworCQkJ
bWVycm9yPTA7CisJCX0KKworCQlpZiAoIXN0cm5jbXAoY3VyX292ZXJsYXktPm5hbWUsICJnZW50
b28iLCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKSkgeworCQkJc25wcmludGYoY3VyX292ZXJs
YXktPmNhY2hlLCBzaXplb2YoY3VyX292ZXJsYXktPmNhY2hlKSwgIiVzLyVzIiwgY3VyX292ZXJs
YXktPnBhdGgsIHBvcnRjYWNoZWRpcik7CisJCQlvdmVybGF5X2dlbnRvbyA9IGN1cl9vdmVybGF5
OworCQl9IGVsc2UKKwkJCXN0cmNweShjdXJfb3ZlcmxheS0+Y2FjaGUsICIvdmFyL2VtcHR5Iik7
CisKKwkJaWYgKHApCisJCQlzID0gcCsxOyAvKiBiZWNhdXNlIHBvcnRkaXJfb3ZlcmxheSBoYXMg
bm8gdHJhaWxpbmcgc3BhY2UgKi8KKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCit9CisKKwogdm9p
ZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiB7CiAJY2hhciBub2NvbG9yID0gMDsKIAlp
bnQgaSwgZjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlGSUxFICpmcDsKKwljaGFyIHRtcF9wb3J0ZGly
W19RX1BBVEhfTUFYXTsKIAljaGFyIGJ1ZltCVUZTSVpFXSwgKnMsICpwOwogCiAJY2hhciBwcm9m
aWxlW19RX1BBVEhfTUFYXSwgcG9ydGFnZV9maWxlW19RX1BBVEhfTUFYXTsKKwljaGFyIHBvcnRk
aXJfb3ZlcmxheVtCVUZTSVpFXSA9ICIiOworCiAJY29uc3QgY2hhciAqZmlsZXNbXSA9IHtwb3J0
YWdlX2ZpbGUsICIvZXRjL21ha2UuZ2xvYmFscyIsICIvZXRjL21ha2UuY29uZiJ9OwogCXR5cGVk
ZWYgZW51bSB7IF9RX0JPT0wsIF9RX1NUUiwgX1FfSVNUUiB9IHZhcl90eXBlczsKKwogCXN0cnVj
dCB7CiAJCWNvbnN0IGNoYXIgKm5hbWU7CiAJCWNvbnN0IHNpemVfdCBuYW1lX2xlbjsKQEAgLTQ5
MSw3ICs1NzEsOCBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAkJeyJDT05G
SUdfUFJPVEVDVCIsICAgMTQsIF9RX1NUUiwgIGNvbmZpZ19wcm90ZWN0LCBzaXplb2YoY29uZmln
X3Byb3RlY3QpfSwKIAkJeyJOT0NPTE9SIiwgICAgICAgICAgIDcsIF9RX0JPT0wsICZub2NvbG9y
LCAgICAgICAxfSwKIAkJeyJGRUFUVVJFUyIsICAgICAgICAgIDgsIF9RX0lTVFIsIGZlYXR1cmVz
LCAgICAgICBzaXplb2YoZmVhdHVyZXMpfSwKLQkJeyJQT1JURElSIiwgICAgICAgICAgIDcsIF9R
X1NUUiwgIHBvcnRkaXIsICAgICAgICBzaXplb2YocG9ydGRpcil9LAorCQl7IlBPUlRESVIiLCAg
ICAgICAgICAgNywgX1FfU1RSLCAgdG1wX3BvcnRkaXIsICAgIHNpemVvZih0bXBfcG9ydGRpcil9
LAorCQl7IlBPUlRESVJfT1ZFUkxBWSIsICAxNSwgX1FfSVNUUiwgcG9ydGRpcl9vdmVybGF5LHNp
emVvZihwb3J0ZGlyX292ZXJsYXkpfSwKIAkJeyJQT1JUQUdFX0JJTkhPU1QiLCAgMTUsIF9RX1NU
UiwgIGJpbmhvc3QsICAgICAgICBzaXplb2YoYmluaG9zdCl9LAogCQl7IlBPUlRBR0VfVE1QRElS
IiwgICAxNCwgX1FfU1RSLCAgcG9ydF90bXBkaXIsICAgIHNpemVvZihwb3J0X3RtcGRpcil9LAog
CQl7IlBLR0RJUiIsICAgICAgICAgICAgNiwgX1FfU1RSLCAgcGtnZGlyLCAgICAgICAgIHNpemVv
Zihwa2dkaXIpfSwKQEAgLTU4OSw2ICs2NzAsMTQgQEAgdm9pZCBpbml0aWFsaXplX3BvcnRhZ2Vf
ZW52KHZvaWQpCiAJCW5vX2NvbG9ycygpOwogCWVsc2UKIAkJY29sb3JfcmVtYXAoKTsKKworCXNu
cHJpbnRmKHRtcF9wb3J0ZGlyLCBzaXplb2YodG1wX3BvcnRkaXIpLCAiJXMvJXMiLCAoc3RyY21w
KHBvcnRyb290LCAiLyIpID8gcG9ydHJvb3QgOiAiIiksIHBvcnR2ZGIpOworCXN0cm5jcHkocG9y
dHZkYiwgdG1wX3BvcnRkaXIsIHNpemVvZihwb3J0dmRiKSk7CisJc3RyaW5jcl92YXIoIlBPUlRE
SVJfT1ZFUkxBWSIsIHRtcF9wb3J0ZGlyLCBwb3J0ZGlyX292ZXJsYXksIHNpemVvZihwb3J0ZGly
X292ZXJsYXkpKTsKKworCS8qIG5vdyB3ZSBpbml0aWxpYXNlIHRoZSBvdmVybGF5IGNoYWluZWQg
bGlzdCAqLworCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9vdmVybGF5KTsKKwogfQogCiBl
bnVtIHsKQEAgLTYxNywyMCArNzA2LDI1IEBAIGNvbnN0IGNoYXIgKmluaXRpYWxpemVfZmxhdChp
bnQgY2FjaGVfdHkKIAlpbnQgYSwgYiwgYywgZCwgZSwgaTsKIAlpbnQgZnJhYywgc2VjcywgY291
bnQ7CiAJRklMRSAqZnA7CisJb3ZlcmxheV90ICpjdXJfb3ZlcmxheTsKIAogCWEgPSBiID0gYyA9
IGQgPSBlID0gaSA9IDA7CiAJY291bnQgPSBmcmFjID0gc2VjcyA9IDA7CisJY3VyX292ZXJsYXkg
PSBmaXJzdF9vdmVybGF5OwogCiAJY2FjaGVfZmlsZSA9IChjYWNoZV90eXBlID09IENBQ0hFX0VC
VUlMRCA/IENBQ0hFX0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURBVEFfRklMRSk7CiAKLQlpZiAo
Y2hkaXIocG9ydGRpcikgIT0gMCkgewotCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZh
aWxlZCIsIHBvcnRkaXIpOwotCQlnb3RvIHJldDsKLQl9Ci0KLQlpZiAoY2FjaGVfdHlwZSA9PSBD
QUNIRV9NRVRBREFUQSAmJiBjaGRpcihwb3J0Y2FjaGVkaXIpICE9IDApIHsKLQkJd2FybnAoImNo
ZGlyIHRvIHBvcnRhZ2UgY2FjaGUgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBwb3J0Y2FjaGVk
aXIpOwotCQlnb3RvIHJldDsKKwkvKiBTQU0gcmV2aWV3IHdpdGhvdXQgZ2VudG9vISAqLworCWlm
IChjYWNoZV90eXBlID09IENBQ0hFX01FVEFEQVRBKSB7CisJCWlmIChjaGRpcihvdmVybGF5X2dl
bnRvby0+Y2FjaGUpICE9IDApIHsKKwkJCXdhcm5wKCJjaGRpciB0byBwb3J0YWdlIGNhY2hlICcl
cycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPmNhY2hlKTsKKwkJCWdvdG8gcmV0OworCQl9CisJ
fSBlbHNlIHsKKwkJaWYgKGNoZGlyKG92ZXJsYXlfZ2VudG9vLT5wYXRoKSAhPSAwKSB7CisJCQl3
YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRo
KTsKKwkJCWdvdG8gcmV0OworCQl9CiAJfQogCiAJaWYgKChzdGF0KGNhY2hlX2ZpbGUsICZzdCkp
ICE9ICgtMSkpCkBAIC02NDUsNjQgKzczOSw4NyBAQCBjb25zdCBjaGFyICppbml0aWFsaXplX2Zs
YXQoaW50IGNhY2hlX3R5CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9IEVO
T0VOVCkgewotCQl3YXJuZnAoInVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIHBvcnRkaXIsIGNh
Y2hlX2ZpbGUpOworCQkvKiBTQU0gcmV2aWV3IHdpdGhvdXQgZ2VudG9vISAqLworCQl3YXJuZnAo
InVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9m
aWxlKTsKIAkJZ290byByZXQ7CiAJfQogCisJLyogU0FNIHJldmlldyB3aXRob3V0IGdlbnRvbyEg
Ki8KIAlpZiAoKGZwID0gZm9wZW4oY2FjaGVfZmlsZSwgInciKSkgPT0gTlVMTCkgewotCQl3YXJu
ZnAoIm9wZW5pbmcgJyVzLyVzJyBmYWlsZWQiLCBwb3J0ZGlyLCBjYWNoZV9maWxlKTsKKwkJd2Fy
bmZwKCJvcGVuaW5nICclcy8lcycgZmFpbGVkIiwgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfRUJVSUxE
ID8gb3ZlcmxheV9nZW50b28tPnBhdGggOiBvdmVybGF5X2dlbnRvby0+Y2FjaGUpLCBjYWNoZV9m
aWxlKTsKIAkJZ290byByZXQ7CiAJfQogCiAJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CiAK
LQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNv
cnQpKSA8IDApCi0JCWdvdG8gcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IGE7IGkrKykgewotCQlz
dGF0KGNhdGVnb3J5W2ldLT5kX25hbWUsICZzdCk7Ci0JCWlmICghU19JU0RJUihzdC5zdF9tb2Rl
KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3RyY2hyKGNhdGVnb3J5W2ldLT5kX25hbWUsICctJykg
PT0gTlVMTCkKLQkJCWlmICgoc3RybmNtcChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAidmlydHVhbCIs
IDcpKSAhPSAwKQorCWRvIHsKKwkJc3dpdGNoIChjYWNoZV90eXBlKSB7CisJCWNhc2UgQ0FDSEVf
RUJVSUxEOgorCQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5wYXRoKSAhPSAwKSB7CisJCQkJd2Fy
bnAoImNoZGlyIHRvICclcycgZmFpbGVkLCBza2lwcGluZyB0aGUgJXMgcmVwb3NpdG9yeSIsIGN1
cl9vdmVybGF5LT5wYXRoLCBjdXJfb3ZlcmxheS0+bmFtZSk7CiAJCQkJY29udGludWU7Ci0KLQkJ
aWYgKChiID0gc2NhbmRpcihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmcG4sIGZpbHRlcl9oaWRkZW4s
IGFscGhhc29ydCkpIDwgMCkKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENBQ0hFX01FVEFEQVRB
OgorCQkJaWYgKCFzdHJjbXAoY3VyX292ZXJsYXktPmNhY2hlLCAiL3Zhci9lbXB0eSIpKSB7CisJ
CQkJaWYgKHZlcmJvc2UpCisJCQkJCXdhcm5wKCJObyBjYWNoZSBkZWZpbmVkIGZvciB0aGUgJXMg
cmVwb3NpdG9yeSIsIGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxz
ZSBpZiAoY2hkaXIoY3VyX292ZXJsYXktPmNhY2hlKSAhPSAwKSB7CisJCQkJd2FybnAoImNoZGly
IHRvICclcycgZmFpbGVkLCBza2lwcGluZyB0aGUgJXMgcmVwb3NpdG9yeSIsY3VyX292ZXJsYXkt
PmNhY2hlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlicmVh
azsKKwkJfQorCQlpZiAoKGEgPSBzY2FuZGlyKCIuIiwgJmNhdGVnb3J5LCBmaWx0ZXJfaGlkZGVu
LCBhbHBoYXNvcnQpKSA8IDApCiAJCQljb250aW51ZTsKLQkJZm9yIChjID0gMDsgYyA8IGI7IGMr
KykgewotCQkJY2hhciBkZVtfUV9QQVRIX01BWF07CiAKLQkJCXNucHJpbnRmKGRlLCBzaXplb2Yo
ZGUpLCAiJXMvJXMiLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1lKTsKKwkJZm9y
IChpID0gMDsgaSA8IGE7IGkrKykgeworCQkJc3RhdChjYXRlZ29yeVtpXS0+ZF9uYW1lLCAmc3Qp
OworCQkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0
cmNocihjYXRlZ29yeVtpXS0+ZF9uYW1lLCAnLScpID09IE5VTEwpCisJCQkJaWYgKChzdHJuY21w
KGNhdGVnb3J5W2ldLT5kX25hbWUsICJ2aXJ0dWFsIiwgNykpICE9IDApCisJCQkJCWNvbnRpbnVl
OwogCi0JCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCisJCQlpZiAoKGIgPSBzY2FuZGlyKGNhdGVn
b3J5W2ldLT5kX25hbWUsICZwbiwgZmlsdGVyX2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQogCQkJ
CWNvbnRpbnVlOworCQkJZm9yIChjID0gMDsgYyA8IGI7IGMrKykgeworCQkJCWNoYXIgZGVbX1Ff
UEFUSF9NQVhdOwogCi0JCQlzd2l0Y2ggKGNhY2hlX3R5cGUpIHsKLQkJCWNhc2UgQ0FDSEVfRUJV
SUxEOgotCQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQlzbnByaW50ZihkZSwgc2l6
ZW9mKGRlKSwgIiVzLyVzIiwgY2F0ZWdvcnlbaV0tPmRfbmFtZSwgcG5bY10tPmRfbmFtZSk7CisK
KwkJCQlpZiAoc3RhdChkZSwgJnN0KSA8IDApCiAJCQkJCWNvbnRpbnVlOwotCQkJCWJyZWFrOwot
CQkJY2FzZSBDQUNIRV9NRVRBREFUQToKLQkJCQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJ
CQkJZnByaW50ZihmcCwgIiVzXG4iLCBkZSk7Ci0JCQkJY29udGludWU7Ci0JCQkJYnJlYWs7Ci0J
CQl9Ci0JCQlpZiAoKGUgPSBzY2FuZGlyKGRlLCAmZWIsIGZpbHRlcl9oaWRkZW4sIGFscGhhc29y
dCkpIDwgMCkKLQkJCQljb250aW51ZTsKLQkJCWZvciAoZCA9IDA7IGQgPCBlOyBkKyspIHsKLQkJ
CQlpZiAoKHAgPSBzdHJyY2hyKGViW2RdLT5kX25hbWUsICcuJykpICE9IE5VTEwpCi0JCQkJCWlm
IChzdHJjbXAocCwgIi5lYnVpbGQiKSA9PSAwKSB7Ci0JCQkJCQljb3VudCsrOwotCQkJCQkJZnBy
aW50ZihmcCwgIiVzLyVzLyVzXG4iLCBjYXRlZ29yeVtpXS0+ZF9uYW1lLCBwbltjXS0+ZF9uYW1l
LCBlYltkXS0+ZF9uYW1lKTsKLQkJCQkJfQorCisJCQkJc3dpdGNoIChjYWNoZV90eXBlKSB7CisJ
CQkJY2FzZSBDQUNIRV9FQlVJTEQ6CisJCQkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJ
CQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQljYXNlIENBQ0hFX01FVEFEQVRBOgorCQkJ
CQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCQkJCWZwcmludGYoZnAsICIlczo6JXNcbiIs
IGRlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQkJaWYgKChlID0gc2NhbmRpcihkZSwgJmViLCBmaWx0ZXJfaGlkZGVuLCBhbHBoYXNv
cnQpKSA8IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWZvciAoZCA9IDA7IGQgPCBlOyBkKyspIHsK
KwkJCQkJaWYgKChwID0gc3RycmNocihlYltkXS0+ZF9uYW1lLCAnLicpKSAhPSBOVUxMKQorCQkJ
CQkJaWYgKHN0cmNtcChwLCAiLmVidWlsZCIpID09IDApIHsKKwkJCQkJCQljb3VudCsrOworCQkJ
CQkJCWZwcmludGYoZnAsICIlcy8lcy8lczo6JXNcbiIsIGNhdGVnb3J5W2ldLT5kX25hbWUsIHBu
W2NdLT5kX25hbWUsIGViW2RdLT5kX25hbWUsIGN1cl9vdmVybGF5LT5uYW1lKTsKKwkJCQkJCX0K
KwkJCQl9CisJCQkJd2hpbGUgKGQtLSkgZnJlZShlYltkXSk7CisJCQkJZnJlZShlYik7CiAJCQl9
Ci0JCQl3aGlsZSAoZC0tKSBmcmVlKGViW2RdKTsKLQkJCWZyZWUoZWIpOworCQkJd2hpbGUgKGIt
LSkgZnJlZShwbltiXSk7CisJCQlmcmVlKHBuKTsKIAkJfQotCQl3aGlsZSAoYi0tKSBmcmVlKHBu
W2JdKTsKLQkJZnJlZShwbik7Ci0JfQorCX0gd2hpbGUgKChjdXJfb3ZlcmxheSA9IGN1cl9vdmVy
bGF5LT5uZXh0KSk7CisKIAlmY2xvc2UoZnApOwogCXdoaWxlIChhLS0pIGZyZWUoY2F0ZWdvcnlb
YV0pOwogCWZyZWUoY2F0ZWdvcnkpOwpAQCAtNzIxLDcgKzgzOCw3IEBAIGNvbnN0IGNoYXIgKmlu
aXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHkKIAogCXdhcm4oIkZpbmlzaGVkICV1IGVudHJpZXMg
aW4gJWQuJTA2ZCBzZWNvbmRzIiwgY291bnQsIHNlY3MsIGZyYWMpOwogCWlmIChzZWNzID4gMTAw
KQotCQl3YXJuKCJZb3Ugc2hvdWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVtIHN1Y2gg
YXMgcmVpc2VyZnMgZm9yIFBPUlRESVI9JyVzJyIsIHBvcnRkaXIpOworCQl3YXJuKCJZb3Ugc2hv
dWxkIGNvbnNpZGVyIGEgZmFzdGVyIGZpbGUgc3lzdGVtIHN1Y2ggYXMgcmVpc2VyZnMgZm9yIHJl
cG9zaXRvcmllcyIpOwogcmV0OgogCXJldHVybiBjYWNoZV9maWxlOwogfQpAQCAtNzMwLDggKzg0
Nyw4IEBAIHJldDoKIAogdm9pZCByZWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCkKIHsKLQlp
ZiAoKGNoZGlyKHBvcnRkaXIpKSAhPSAwKSB7Ci0JCXdhcm5wKCJjaGRpciB0byBQT1JURElSICcl
cycgZmFpbGVkIiwgcG9ydGRpcik7CisJaWYgKChjaGRpcihmaXJzdF9vdmVybGF5LT5wYXRoKSkg
IT0gMCkgeworCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIsIGZpcnN0X292
ZXJsYXktPnBhdGgpOwogCQlyZXR1cm47CiAJfQogCXVubGluayhDQUNIRV9FQlVJTERfRklMRSk7
CkBAIC03NjYsOCArODgzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgewogfSBwb3J0YWdlX2NhY2hlOwog
CiB2b2lkIGNhY2hlX2ZyZWUocG9ydGFnZV9jYWNoZSAqY2FjaGUpOwotcG9ydGFnZV9jYWNoZSAq
Y2FjaGVfcmVhZF9maWxlKGNvbnN0IGNoYXIgKmZpbGUpOwotcG9ydGFnZV9jYWNoZSAqY2FjaGVf
cmVhZF9maWxlKGNvbnN0IGNoYXIgKmZpbGUpCitwb3J0YWdlX2NhY2hlICpjYWNoZV9yZWFkX2Zp
bGUoY2hhciAqZmlsZSk7Citwb3J0YWdlX2NhY2hlICpjYWNoZV9yZWFkX2ZpbGUoY2hhciAqZmls
ZSkKIHsKIAlzdHJ1Y3Qgc3RhdCBzOwogCWNoYXIgKnB0cjsKQEAgLTc3NSw4ICs4OTIsMTIgQEAg
cG9ydGFnZV9jYWNoZSAqY2FjaGVfcmVhZF9maWxlKGNvbnN0IGNoYQogCXBvcnRhZ2VfY2FjaGUg
KnJldCA9IE5VTEw7CiAJc2l6ZV90IGxlbjsKIAorCWlmICgocHRyID0gc3Ryc3RyKGZpbGUsICI6
OiIpKSkKKwkJKnB0ciA9IDA7CiAJaWYgKChmID0gZm9wZW4oZmlsZSwgInIiKSkgPT0gTlVMTCkK
IAkJZ290byBlcnI7CisJaWYgKHB0cikKKwkJKnB0ciA9ICc6JzsKIAogCWlmIChmc3RhdChmaWxl
bm8oZiksICZzKSAhPSAwKQogCQlnb3RvIGVycjsKQEAgLTEwMDQsMTAgKzExMjUsMjAgQEAgZnVj
a2l0OgogCXJldHVybiBjcGY7CiB9CiAKKy8qIGZyZWUgb3ZlcmxheXMgKi8KK3ZvaWQgZnJlZV9v
dmVybGF5cyhvdmVybGF5X3QgKm92ZXJsYXkpOwordm9pZCBmcmVlX292ZXJsYXlzKG92ZXJsYXlf
dCAqb3ZlcmxheSkKK3sKKwlpZiAob3ZlcmxheS0+bmV4dCkKKwkJZnJlZV9vdmVybGF5cyhvdmVy
bGF5LT5uZXh0KTsKKwlmcmVlKG92ZXJsYXkpOworfQorCiB2b2lkIGNsZWFudXAoKQogewogCXJl
aW5pdGlhbGl6ZV9hc19uZWVkZWQoKTsKIAlmcmVlX3NldHModmlydHVhbHMpOworCWZyZWVfb3Zl
cmxheXMoZmlyc3Rfb3ZlcmxheSk7CiAJZmNsb3NlKHN0ZGVycik7CiB9CiAKZGlmZiAtTmFydXAg
cG9ydGFnZS11dGlscy0yMDA3MDExNS9tYW4vcS4xIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3
L21hbi9xLjEKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvbWFuL3EuMQkyMDA3LTAxLTE1IDE5
OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFu
L3EuMQkyMDA3LTAxLTE1IDE5OjIxOjU4LjI2NTk0MTk1MCArMDEwMApAQCAtNjEsMTEgKzYxLDE0
IEBAIHF1c2UgPHVzZWZsYWc+CiBxeHBhayA8bWlzYyBhcmdzPgogOiBtYW5pcHVsYXRlIHhwYWsg
YXJjaGl2ZXMKIC5QUAotT3B0aW9uczogXGZCXC1baXJtdnFDaFZdXGZSCitPcHRpb25zOiBcZkJc
LVtpbHJtdnFDaFZdXGZSCiAuVFAKIFxmQlwtaVxmUiwgXGZCXC1cLWluc3RhbGxcZlIKICogSW5z
dGFsbCBzeW1saW5rcyBmb3IgYXBwbGV0cwogLlRQCitcZkJcLWxcZlIsIFxmQlwtXC1sc1wtb3Zl
cmxheXNcZlIKKyogTGlzdCBjb25maWd1cmVkIG92ZXJsYXlzCisuVFAKIFxmQlwtclxmUiwgXGZC
XC1cLXJlaW5pdGlhbGl6ZVxmUgogKiBSZWluaXRpYWxpemUgZWJ1aWxkIGNhY2hlCiAuVFAKZGlm
ZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9tYW4vcWdyZXAuMSBwb3J0YWdlLXV0aWxz
LTIwMDcwMTE1Lm5ldy9tYW4vcWdyZXAuMQotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS9tYW4v
cWdyZXAuMQkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11
dGlscy0yMDA3MDExNS5uZXcvbWFuL3FncmVwLjEJMjAwNy0wMS0xNSAxOToyMTo1OC4yNzM5NDA3
MjkgKzAxMDAKQEAgLTE2LDYgKzE2LDExIEBAIE9wdGlvbnM6IFxmQlwtW0lpSGNldnFDaFZdXGZS
CiBcZkJcLUhcZlIsIFxmQlwtXC13aXRoXC1maWxlbmFtZVxmUgogKiBQcmludCB0aGUgZmlsZW5h
bWUgZm9yIGVhY2ggbWF0Y2gKIC5UUAorXGZCXC1vXGZSLCBcZkJcLVwtb3ZlcmxheVxmUgorPGFy
Zz4KKy5CUgorICogT25seSBjb25zaWRlciB0aGUgPGFyZz4gb3ZlcmxheQorLlRQCiBcZkJcLWNc
ZlIsIFxmQlwtXC1jb3VudFxmUgogKiBPbmx5IHByaW50IGEgY291bnQgb2YgbWF0Y2hpbmcgbGlu
ZXMgcGVyIEZJTEUKIC5UUApkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L21hbi9x
c2VhcmNoLjEgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvbWFuL3FzZWFyY2guMQotLS0gcG9y
dGFnZS11dGlscy0yMDA3MDExNS9tYW4vcXNlYXJjaC4xCTIwMDctMDEtMTUgMTk6MjA6MTIuMDAw
MDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9tYW4vcXNlYXJjaC4x
CTIwMDctMDEtMTUgMTk6MjE6NTguMjgyOTM5MzU3ICswMTAwCkBAIC01LDcgKzUsNyBAQCBxc2Vh
cmNoIFwtIHNlYXJjaCBwa2duYW1lL2Rlc2MKIC5CIHFzZWFyY2gKIFxmSTxyZWdleD5cZlIKIC5T
SCBERVNDUklQVElPTgotT3B0aW9uczogXGZCXC1bYWNzU05IdnFDaFZdXGZSCitPcHRpb25zOiBc
ZkJcLVthY29cZlI6cHNTTkh2cUNoVl0KIC5UUAogXGZCXC1hXGZSLCBcZkJcLVwtYWxsXGZSCiAq
IExpc3QgdGhlIGRlc2NyaXB0aW9ucyBvZiBldmVyeSBwYWNrYWdlIGluIHRoZSBjYWNoZQpAQCAt
MTMsNiArMTMsMTQgQEAgT3B0aW9uczogXGZCXC1bYWNzU05IdnFDaFZdXGZSCiBcZkJcLWNcZlIs
IFxmQlwtXC1jYWNoZVxmUgogKiBVc2UgdGhlIHBvcnRhZ2UgY2FjaGUKIC5UUAorXGZCXC1vXGZS
LCBcZkJcLVwtb3ZlcmxheVxmUgorPGFyZz4KKy5CUgorICogU2VhcmNoIG9ubHkgaW4gdGhlIDxh
cmc+IG92ZXJsYXkKKy5UUAorXGZCXC1wXGZSLCBcZkJcLVwtc2hvd1wtcGF0aFxmUgorKiBTaG93
IHRoZSBwYXRoIHRvIHRoZSBlYnVpbGQKKy5UUAogXGZCXC1zXGZSLCBcZkJcLVwtc2VhcmNoXGZS
CiAqIFJlZ2V4IHNlYXJjaCBwYWNrYWdlIGJhc2VuYW1lcwogLlRQCmRpZmYgLU5hcnVwIHBvcnRh
Z2UtdXRpbHMtMjAwNzAxMTUvbWFuL3F1c2UuMSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9t
YW4vcXVzZS4xCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L21hbi9xdXNlLjEJMjAwNy0wMS0x
NSAxOToyMDoxMi4wMDAwMDAwMDAgKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3
L21hbi9xdXNlLjEJMjAwNy0wMS0xNSAxOToyMTo1OC4yOTA5MzgxMzcgKzAxMDAKQEAgLTUsNyAr
NSw3IEBAIHF1c2UgXC0gZmluZCBwa2dzIHVzaW5nIHVzZWZsYWdzCiAuQiBxdXNlCiBcZkk8dXNl
ZmxhZz5cZlIKIC5TSCBERVNDUklQVElPTgotT3B0aW9uczogXGZCXC1bZWF2S0xERjpOdnFDaFZd
XGZSCitPcHRpb25zOiBcZkJcLVtlYW9cZlI6dktMREY6TnZxQ2hWXQogLlRQCiBcZkJcLWVcZlIs
IFxmQlwtXC1leGFjdFxmUgogKiBTaG93IGV4YWN0IG5vbiByZWdleHAgbWF0Y2hpbmcgdXNpbmcg
c3RyY21wCkBAIC0xMyw2ICsxMywxMSBAQCBPcHRpb25zOiBcZkJcLVtlYXZLTERGOk52cUNoVl1c
ZlIKIFxmQlwtYVxmUiwgXGZCXC1cLWFsbFxmUgogKiBTaG93IGFubm95aW5nIHRoaW5ncyBpbiBJ
VVNFCiAuVFAKK1xmQlwtb1xmUiwgXGZCXC1cLW92ZXJsYXlcZlIKKzxhcmc+CisuQlIKKyAqIE9u
bHkgY29uc2lkZXIgdGhlIDxhcmc+IG92ZXJsYXkKKy5UUAogXGZCXC1LXGZSLCBcZkJcLVwta2V5
d29yZHNcZlIKICogVXNlIHRoZSBLRVlXT1JEUyB2cyBJVVNFCiAuVFAKZGlmZiAtTmFydXAgcG9y
dGFnZS11dGlscy0yMDA3MDExNS9xYXRvbS5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3Fh
dG9tLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvcWF0b20uYwkyMDA3LTAxLTE1IDE5OjIw
OjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWF0b20u
YwkyMDA3LTAxLTE1IDE5OjIxOjU4LjI5OTkzNjc2NCArMDEwMApAQCAtNjAsNiArNjAsNyBAQCBp
bnQgcWF0b21fbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJcHJpbnRmKCIgciVpIiwg
YXRvbS0+UFJfaW50KTsKIAkJCWlmICh2ZXJib3NlID4gMSkKIAkJCQlwcmludGYoIiAlYyIsIChh
dG9tLT5sZXR0ZXIgPyA6ICctJykpOworCQkJcHJpbnRmKCIgJXMiLCBhdG9tLT5PVkVSTEFZKTsK
IAkJCXB1dGNoYXIoJ1xuJyk7CiAJCQlhdG9tX2ltcGxvZGUoYXRvbSk7CiAJCX0KZGlmZiAtTmFy
dXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9xLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcv
cS5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L3EuYwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAw
MDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcS5jCTIwMDctMDEt
MTUgMTk6MjE6NTguMzA5OTM1MjM4ICswMTAwCkBAIC03LDE1ICs3LDE3IEBACiAgKiBDb3B5cmln
aHQgMjAwNS0yMDA2IE1pa2UgRnJ5c2luZ2VyICAtIDx2YXBpZXJAZ2VudG9vLm9yZz4KICAqLwog
Ci0jZGVmaW5lIFFfRkxBR1MgImlybSIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFfRkxBR1MgImls
cm0iIENPTU1PTl9GTEFHUwogc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcV9sb25nX29wdHNb
XSA9IHsKIAl7Imluc3RhbGwiLCAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LAorCXsibHMt
b3ZlcmxheXMiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdsJ30sCiAJeyJyZWluaXRpYWxpemUiLCBu
b19hcmd1bWVudCwgTlVMTCwgJ3InfSwKIAl7Im1ldGFjYWNoZSIsICAgIG5vX2FyZ3VtZW50LCBO
VUxMLCAnbSd9LAogCUNPTU1PTl9MT05HX09QVFMKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcV9v
cHRzX2hlbHBbXSA9IHsKIAkiSW5zdGFsbCBzeW1saW5rcyBmb3IgYXBwbGV0cyIsCisJIkxpc3Qg
Y29uZmlndXJlZCBvdmVybGF5cyIsCiAJIlJlaW5pdGlhbGl6ZSBlYnVpbGQgY2FjaGUiLAogCSJS
ZWluaXRpYWxpemUgbWV0YWRhdGEgY2FjaGUiLAogCUNPTU1PTl9PUFRTX0hFTFAKQEAgLTcwLDYg
KzcyLDcgQEAgaW50IHFfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaW50IGk7CiAJY2hh
ciAqcDsKIAlBUFBMRVQgZnVuYzsKKwlvdmVybGF5X3QgKiBjdXJfb3ZlcmxheTsKIAogCWlmIChh
cmdjID09IDApCiAJCXJldHVybiAxOwpAQCAtODksNiArOTIsMTcgQEAgaW50IHFfbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCiAJCUNPTU1PTl9HRVRPUFRTX0NBU0VTKHEpCiAJCWNhc2UgJ20n
OiByZWluaXRpYWxpemVfbWV0YWNhY2hlID0gMTsgYnJlYWs7CiAJCWNhc2UgJ3InOiByZWluaXRp
YWxpemUgPSAxOyBicmVhazsKKwkJY2FzZSAnbCc6IHsKKwkJCXByaW50ZigiXG4lc092ZXJsYXko
cykgOiVzXG5cbiIsIEdSRUVOLCBOT1JNKTsKKwkJCWN1cl9vdmVybGF5PWZpcnN0X292ZXJsYXk7
CisJCQlkbyB7CisJCQkJcHJpbnRmKCIgICBOYW1lIDogJXMlLTIwLjIwcyVzIFx0bG9jYXRpb24g
OiAlcyUtNjAuNjBzJXMgXHRtZXRhZGF0YSA6ICVzJS02MC42MHMlc1xuIiwKKwkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICBDWUFOLCBjdXJfb3ZlcmxheS0+bmFtZSwgTk9STSwgQ1lBTiwgY3Vy
X292ZXJsYXktPnBhdGgsIE5PUk0sCisJCQkJCQkJQ1lBTiwgY3VyX292ZXJsYXktPmNhY2hlLCBO
T1JNKTsKKwkJCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQkJ
ZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJCXJldHVybiAwOworCQkJfQogCQljYXNlICdpJzogewog
CQkJY2hhciBidWZbX1FfUEFUSF9NQVhdOwogCQkJLyogYWx3YXlzIGJ6ZXJvIGEgYnVmZmVyIGJl
Zm9yZSB1c2luZyByZWFkbGluaygpICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAx
MTUvcWNhY2hlLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWNhY2hlLmMKLS0tIHBvcnRh
Z2UtdXRpbHMtMjAwNzAxMTUvcWNhY2hlLmMJMjAwNy0wMS0xNSAxOToyMDoxMi4wMDAwMDAwMDAg
KzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FjYWNoZS5jCTIwMDctMDEtMTUg
MTk6MjE6NTguMzE3OTM0MDE4ICswMTAwCkBAIC01MTIsMTAgKzUxMiwxMCBAQCBpbnQgcWNhY2hl
X3RyYXZlcnNlKHZvaWQgKCpmdW5jKShxY2FjaGVfCiAJaW50IGksIGosIGssIGxlbiwgbnVtX2Nh
dCwgbnVtX3BrZywgbnVtX2VidWlsZDsKIAlzdHJ1Y3QgZGlyZWN0ICoqY2F0ZWdvcmllcywgKipw
YWNrYWdlcywgKiplYnVpbGRzOwogCi0JbGVuID0gc2l6ZW9mKGNoYXIpICogKHN0cmxlbihRQ0FD
SEVfRURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCWxlbiA9IHNpemVvZihjaGFyKSAqIChz
dHJsZW4oUUNBQ0hFX0VEQikgKyBzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgMSk7CiAJ
Y2F0cGF0aCA9IHhtYWxsb2MobGVuKTsKIAltZW1zZXQoY2F0cGF0aCwgMCwgbGVuKTsKLQlzbnBy
aW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VEQiwgcG9ydGRpcik7CisJc25wcmlu
dGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9FREIsIG92ZXJsYXlfZ2VudG9vLT5wYXRo
KTsKIAogCWlmICgtMSA9PSAobnVtX2NhdCA9IHNjYW5kaXIoY2F0cGF0aCwgJmNhdGVnb3JpZXMs
IHFjYWNoZV9maWxlX3NlbGVjdCwgYWxwaGFzb3J0KSkpIHsKIAkJZXJyKCIlcyAlcyIsIGNhdHBh
dGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC01MjcsMTAgKzUyNywxMCBAQCBpbnQgcWNhY2hlX3Ry
YXZlcnNlKHZvaWQgKCpmdW5jKShxY2FjaGVfCiAKIAkvKiB0cmF2ZXJzZSBjYXRlZ29yaWVzICov
CiAJZm9yIChpID0gMDsgaSA8IG51bV9jYXQ7IGkrKykgewotCQlsZW4gPSBzaXplb2YoY2hhcikg
KiAoc3RybGVuKHBvcnRkaXIpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY2F0ZWdvcmllc1tpXS0+
ZF9uYW1lKSArIDEpOworCQlsZW4gPSBzaXplb2YoY2hhcikgKiAoc3RybGVuKG92ZXJsYXlfZ2Vu
dG9vLT5wYXRoKSArIHN0cmxlbigiLyIpICsgc3RybGVuKGNhdGVnb3JpZXNbaV0tPmRfbmFtZSkg
KyAxKTsKIAkJcGtncGF0aCA9IHhtYWxsb2MobGVuKTsKIAkJbWVtc2V0KHBrZ3BhdGgsIDAsIGxl
bik7Ci0JCXNucHJpbnRmKHBrZ3BhdGgsIGxlbiwgIiVzLyVzIiwgcG9ydGRpciwgY2F0ZWdvcmll
c1tpXS0+ZF9uYW1lKTsKKwkJc25wcmludGYocGtncGF0aCwgbGVuLCAiJXMvJXMiLCBvdmVybGF5
X2dlbnRvby0+cGF0aCwgY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKTsKIAogCQlpZiAoLTEgPT0gKG51
bV9wa2cgPSBzY2FuZGlyKHBrZ3BhdGgsICZwYWNrYWdlcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBh
bHBoYXNvcnQpKSkgewogCQkJd2FybigiJXMgJXMiLCBjYXRwYXRoLCBzdHJlcnJvcihlcnJubykp
OwpAQCAtNTUyLDEwICs1NTIsMTAgQEAgaW50IHFjYWNoZV90cmF2ZXJzZSh2b2lkICgqZnVuYyko
cWNhY2hlXwogCiAJCS8qIHRyYXZlcnNlIHBhY2thZ2VzICovCiAJCWZvciAoaiA9IDA7IGogPCBu
dW1fcGtnOyBqKyspIHsKLQkJCWxlbiA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikg
KyBzdHJsZW4oIi8iKSArIHN0cmxlbihjYXRlZ29yaWVzW2ldLT5kX25hbWUpICsgc3RybGVuKCIv
IikgKyBzdHJsZW4ocGFja2FnZXNbal0tPmRfbmFtZSkgKyAxKTsKKwkJCWxlbiA9IHNpemVvZihj
aGFyKSAqIChzdHJsZW4ob3ZlcmxheV9nZW50b28tPnBhdGgpICsgc3RybGVuKCIvIikgKyBzdHJs
ZW4oY2F0ZWdvcmllc1tpXS0+ZF9uYW1lKSArIHN0cmxlbigiLyIpICsgc3RybGVuKHBhY2thZ2Vz
W2pdLT5kX25hbWUpICsgMSk7CiAJCQllYnVpbGRwYXRoID0geG1hbGxvYyhsZW4pOwogCQkJbWVt
c2V0KGVidWlsZHBhdGgsIDAsIGxlbik7Ci0JCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIl
cy8lcy8lcyIsIHBvcnRkaXIsIGNhdGVnb3JpZXNbaV0tPmRfbmFtZSwgcGFja2FnZXNbal0tPmRf
bmFtZSk7CisJCQlzbnByaW50ZihlYnVpbGRwYXRoLCBsZW4sICIlcy8lcy8lcyIsIG92ZXJsYXlf
Z2VudG9vLT5wYXRoLCBjYXRlZ29yaWVzW2ldLT5kX25hbWUsIHBhY2thZ2VzW2pdLT5kX25hbWUp
OwogCiAJCQlpZiAoLTEgPT0gKG51bV9lYnVpbGQgPSBzY2FuZGlyKGVidWlsZHBhdGgsICZlYnVp
bGRzLCBxY2FjaGVfZWJ1aWxkX3NlbGVjdCwgcWNhY2hlX3ZlcmNtcCkpKSB7CiAJCQkJd2Fybigi
JXMgJXMiLCBlYnVpbGRwYXRoLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNzczLDEwICs3NzMsMTAg
QEAgdm9pZCBxY2FjaGVfc3RhdHMocWNhY2hlX2RhdGEgKmRhdGEpCiAJCWZvciAoaSA9IDA7IGFy
Y2hsaXN0W2ldOyBpKyspCiAJCQlhcmNoaXRlY3R1cmVzKys7CiAKLQkJbGVuID0gc2l6ZW9mKGNo
YXIpICogKHN0cmxlbihRQ0FDSEVfRURCKSArIHN0cmxlbihwb3J0ZGlyKSArIDEpOworCQlsZW4g
PSBzaXplb2YoY2hhcikgKiAoc3RybGVuKFFDQUNIRV9FREIpICsgc3RybGVuKG92ZXJsYXlfZ2Vu
dG9vLT5wYXRoKSArIDEpOwogCQljYXRwYXRoID0geG1hbGxvYyhsZW4pOwogCQltZW1zZXQoY2F0
cGF0aCwgMCwgbGVuKTsKLQkJc25wcmludGYoY2F0cGF0aCwgbGVuLCAiJXMlcyIsIFFDQUNIRV9F
REIsIHBvcnRkaXIpOworCQlzbnByaW50ZihjYXRwYXRoLCBsZW4sICIlcyVzIiwgUUNBQ0hFX0VE
Qiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCiAJCWlmICgtMSA9PSAobnVtY2F0ID0gc2NhbmRp
cihjYXRwYXRoLCAmY2F0ZWdvcmllcywgcWNhY2hlX2ZpbGVfc2VsZWN0LCBhbHBoYXNvcnQpKSkg
ewogCQkJZXJyKCIlcyAlcyIsIGNhdHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CkBAIC05MjgsMTEg
KzkyOCwxMSBAQCBpbnQgcWNhY2hlX2luaXQoKQogCWNoYXIgKmZpbGVuYW1lOwogCXVuc2lnbmVk
IGludCBsZW47CiAKLQlsZW4gICAgICA9IHNpemVvZihjaGFyKSAqIChzdHJsZW4ocG9ydGRpcikg
KyBzdHJsZW4oIi9wcm9maWxlcy9hcmNoLmxpc3QiKSArIDEpOworCWxlbiAgICAgID0gc2l6ZW9m
KGNoYXIpICogKHN0cmxlbihvdmVybGF5X2dlbnRvby0+cGF0aCkgKyBzdHJsZW4oIi9wcm9maWxl
cy9hcmNoLmxpc3QiKSArIDEpOwogCWZpbGVuYW1lID0geG1hbGxvYyhsZW4pOwogCiAJbWVtc2V0
KGZpbGVuYW1lLCAwLCBsZW4pOwotCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4sICIlcy9wcm9maWxl
cy9hcmNoLmxpc3QiLCBwb3J0ZGlyKTsKKwlzbnByaW50ZihmaWxlbmFtZSwgbGVuLCAiJXMvcHJv
ZmlsZXMvYXJjaC5saXN0Iiwgb3ZlcmxheV9nZW50b28tPnBhdGgpOwogCiAJaWYgKE5VTEwgPT0g
KGFyY2hsaXN0ID0gcWNhY2hlX3JlYWRfbGluZXMoZmlsZW5hbWUpKSkgewogCQlmcmVlKGZpbGVu
YW1lKTsKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9xY2hlY2suYyBwb3J0YWdl
LXV0aWxzLTIwMDcwMTE1Lm5ldy9xY2hlY2suYwotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS9x
Y2hlY2suYwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11
dGlscy0yMDA3MDExNS5uZXcvcWNoZWNrLmMJMjAwNy0wMS0xNSAxOToyMTo1OC4zMjY5MzI2NDUg
KzAxMDAKQEAgLTQ5LDEwICs0OSwxMCBAQCBpbnQgcWNoZWNrX21haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogCWlmICgoYXJnYyA9PSBvcHRpbmQpICYmICFzZWFyY2hfYWxsKQogCQlxY2hlY2tf
dXNhZ2UoRVhJVF9GQUlMVVJFKTsKIAotCWlmIChjaGRpcihwb3J0cm9vdCkpCi0JCWVycnAoImNv
dWxkIG5vdCBjaGRpciglcykgZm9yIFJPT1QiLCBwb3J0cm9vdCk7CisJaWYgKGNoZGlyKHBvcnR2
ZGIpKQorCQllcnJwKCJjb3VsZCBub3QgY2hkaXIoJXMpIGZvciBWREIiLCBwb3J0dmRiKTsKIAot
CWlmIChjaGRpcihwb3J0dmRiKSAhPSAwIHx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwp
CisJaWYgKChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCiAJCXJldHVybiBFWElUX0ZBSUxV
UkU7CiAKIAkvKiBvcGVuIC92YXIvZGIvcGtnICovCkBAIC04NCw3ICs4NCw3IEBAIGludCBxY2hl
Y2tfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWNvbnRpbnVlOwogCQkJfQogCi0J
CQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy9DT05URU5UUyIsIHBvcnRy
b290LCBwb3J0dmRiLAorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzLyVzL0NP
TlRFTlRTIiwgcG9ydHZkYiwKIAkJCSAgICAgICAgIGRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1l
KTsKIAkJCWlmICgoZnAgPSBmb3BlbihidWYsICJyIikpID09IE5VTEwpCiAJCQkJY29udGludWU7
CkBAIC0xOTksNyArMTk5LDcgQEAgZnJlZV9hbmRfbW9yZV9oYXNoOgogCQkJZmNsb3NlKGZwKTsK
IAkJCWlmIChxY191cGRhdGUpIHsKIAkJCQlmY2xvc2UoZnB4KTsKLQkJCQlzbnByaW50ZihidWYs
IHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy9DT05URU5UUyIsIHBvcnRyb290LCBwb3J0dmRiLAor
CQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcy8lcy9DT05URU5UUyIsIHBvcnR2
ZGIsCiAJCQkJCWRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKTsKIAkJCQlzdHJjcHkoYnVmZmVy
LCBidWYpOwogCQkJCXN0cm5jYXQoYnVmZmVyLCAifiIsIHNpemVvZihidWZmZXIpKTsKZGlmZiAt
TmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS9xZGVwZW5kcy5jIHBvcnRhZ2UtdXRpbHMtMjAw
NzAxMTUubmV3L3FkZXBlbmRzLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvcWRlcGVuZHMu
YwkyMDA3LTAxLTE1IDE5OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0y
MDA3MDExNS5uZXcvcWRlcGVuZHMuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjMzNTkzMTI3MyArMDEw
MApAQCAtMzU5LDEwICszNTksMTAgQEAgaW50IHFkZXBlbmRzX21haW5fdmRiKGNvbnN0IGNoYXIg
KmRlcGVuZAogCWNoYXIgZGVwZW5kWzE2Mzg0XSwgdXNlWzgxOTJdOwogCWRlcF9ub2RlICpkZXBf
dHJlZTsKIAotCWlmIChjaGRpcihwb3J0cm9vdCkpCi0JCWVycnAoImNvdWxkIG5vdCBjaGRpcigl
cykgZm9yIFJPT1QiLCBwb3J0cm9vdCk7CisJaWYgKGNoZGlyKHBvcnR2ZGIpKQorCQllcnJwKCJj
b3VsZCBub3QgY2hkaXIoJXMpIGZvciBWREIiLCBwb3J0dmRiKTsKIAotCWlmIChjaGRpcihwb3J0
dmRiKSAhPSAwIHx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCisJaWYgKChkaXIgPSBv
cGVuZGlyKCIuIikpID09IE5VTEwpCiAJCXJldHVybiBFWElUX0ZBSUxVUkU7CiAKIAkvKiBvcGVu
IC92YXIvZGIvcGtnICovCkBAIC0zOTAsNyArMzkwLDcgQEAgaW50IHFkZXBlbmRzX21haW5fdmRi
KGNvbnN0IGNoYXIgKmRlcGVuZAogCQkJCWNvbnRpbnVlOwogCiAJCQlJRl9ERUJVRyh3YXJuKCJt
YXRjaGVkICVzLyVzIiwgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpKTsKLQkJCXNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVzLyVzIiwgcG9ydHJvb3QsIHBvcnR2ZGIsCisJ
CQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMvJXMvJXMiLCBwb3J0dmRiLAogCQkJ
ICAgICAgICAgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUsIGRlcGVuZF9maWxlKTsKIAogCQkJ
LyogPj1wb3J0YWdlLTIuMV9wcmUzIHdvbnQgZW5zdXJlIHRoZXNlIGZpbGVzIGFsd2F5cyBleGlz
dC4KQEAgLTQyMSw3ICs0MjEsNyBAQCBpbnQgcWRlcGVuZHNfbWFpbl92ZGIoY29uc3QgY2hhciAq
ZGVwZW5kCiAJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczogIiwgQk9MRCwgZGVudHJ5LT5kX25hbWUs
IEJMVUUsIGRlLT5kX25hbWUsIE5PUk0pOwogCQkJfQogCi0JCQlzbnByaW50ZihidWYsIHNpemVv
ZihidWYpLCAiJXMlcy8lcy8lcy9VU0UiLCBwb3J0cm9vdCwgcG9ydHZkYiwKKwkJCXNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcy8lcy9VU0UiLCBwb3J0dmRiLAogCQkJICAgICAgICAg
ZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpOwogCiAJCQlpZiAoYWNjZXNzKGJ1ZiwgUl9PSykg
IT0gMCkgewpAQCAtNDY4LDEwICs0NjgsMTAgQEAgaW50IHFkZXBlbmRzX3ZkYl9kZWVwKGNvbnN0
IGNoYXIgKmRlcGVuZAogCWNoYXIgZGVwZW5kWzE2Mzg0XSwgdXNlWzgxOTJdOwogCWRlcF9ub2Rl
ICpkZXBfdHJlZTsKIAotCWlmIChjaGRpcihwb3J0cm9vdCkpCi0JCWVycnAoImNvdWxkIG5vdCBj
aGRpciglcykgZm9yIFJPT1QiLCBwb3J0cm9vdCk7CisJaWYgKGNoZGlyKHBvcnR2ZGIpKQorCQll
cnJwKCJjb3VsZCBub3QgY2hkaXIoJXMpIGZvciBWREIiLCBwb3J0dmRiKTsKIAotCWlmIChjaGRp
cihwb3J0dmRiKSAhPSAwIHx8IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCisJaWYgKChk
aXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpCiAJCXJldHVybiBFWElUX0ZBSUxVUkU7CiAKIAkv
KiBvcGVuIC92YXIvZGIvcGtnICovCkBAIC00ODcsNyArNDg3LDcgQEAgaW50IHFkZXBlbmRzX3Zk
Yl9kZWVwKGNvbnN0IGNoYXIgKmRlcGVuZAogCQkJCWNvbnRpbnVlOwogCiAJCQlJRl9ERUJVRyh3
YXJuKCJtYXRjaGVkICVzLyVzIiwgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpKTsKLQkJCXNu
cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzLyVzLyVzLyVzIiwgcG9ydHJvb3QsIHBvcnR2
ZGIsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMvJXMvJXMiLCBwb3J0dmRi
LAogCQkJICAgICAgICAgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUsIGRlcGVuZF9maWxlKTsK
IAogCQkJaWYgKGFjY2VzcyhidWYsIFJfT0spICE9IDApCkBAIC01MDQsNyArNTA0LDcgQEAgaW50
IHFkZXBlbmRzX3ZkYl9kZWVwKGNvbnN0IGNoYXIgKmRlcGVuZAogCQkJSUZfREVCVUcocHV0cyhk
ZXBlbmQpKTsKIAkJCUlGX0RFQlVHKGRlcF9kdW1wX3RyZWUoZGVwX3RyZWUpKTsKIAotCQkJc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMvJXMvJXMvVVNFIiwgcG9ydHJvb3QsIHBvcnR2
ZGIsCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMvJXMvVVNFIiwgcG9ydHZk
YiwKIAkJCSAgICAgICAgIGRlbnRyeS0+ZF9uYW1lLCBkZS0+ZF9uYW1lKTsKIAkJCWFzc2VydChl
YXRfZmlsZShidWYsIHVzZSwgc2l6ZW9mKHVzZSkpID09IDEpOwogCQkJZm9yIChwdHIgPSB1c2U7
ICpwdHI7ICsrcHRyKQpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L3FmaWxlLmMg
cG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWZpbGUuYwotLS0gcG9ydGFnZS11dGlscy0yMDA3
MDExNS9xZmlsZS5jCTIwMDctMDEtMTUgMTk6MjA6MTIuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0
YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xZmlsZS5jCTIwMDctMDEtMTUgMTk6MjE6NTguMzM2OTMx
MTIwICswMTAwCkBAIC02MDAsMTYgKzYwMCwxNCBAQCBpbnQgcWZpbGVfbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAJCWlmIChuYl9vZl9xdWVyaWVzIDwgMCkKIAkJCWdvdG8gZXhpdDsKIAot
CQlpZiAoY2hkaXIocG9ydHJvb3QpCi0JCQkJfHwgY2hkaXIocG9ydHZkYikgIT0gMAotCQkJCXx8
IChkaXIgPSBvcGVuZGlyKCIuIikpID09IE5VTEwpIHsKLQkJCXdhcm5wKCJjb3VsZCBub3QgY2hk
aXIoUk9PVC8lcykgZm9yIGluc3RhbGxlZCBwYWNrYWdlcyBkYXRhYmFzZSIsIHBvcnR2ZGIpOwor
CQlpZiAoY2hkaXIocG9ydHZkYikgIT0gMCB8fCAoZGlyID0gb3BlbmRpcigiLiIpKSA9PSBOVUxM
KSB7CisJCQl3YXJucCgiY291bGQgbm90IGNoZGlyKCVzKSBmb3IgaW5zdGFsbGVkIHBhY2thZ2Vz
IGRhdGFiYXNlIiwgcG9ydHZkYik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAogCQkvKiBJdGVyYXRp
b24gb3ZlciBWREIgY2F0ZWdvcmllcyAqLwogCQl3aGlsZSAobmJfb2ZfcXVlcmllcyAmJiAoZGVu
dHJ5ID0gcV92ZGJfZ2V0X25leHRfZGlyKGRpcikpKSB7Ci0JCQlzbnByaW50ZihwYXRoLCBfUV9Q
QVRIX01BWCwgIiVzLyVzLyVzIiwgcWZpbGVfYXJncy0+cmVhbF9yb290LCBwb3J0dmRiLCBkZW50
cnktPmRfbmFtZSk7CisJCQlzbnByaW50ZihwYXRoLCBfUV9QQVRIX01BWCwgIiVzLyVzIiwgcG9y
dHZkYiwgZGVudHJ5LT5kX25hbWUpOwogCQkJcWZpbGUocGF0aCwgKGFzc3VtZV9yb290X3ByZWZp
eCA/IHJvb3RfcHJlZml4IDogTlVMTCksIHFmaWxlX2FyZ3MpOwogCQl9CiAKZGlmZiAtTmFydXAg
cG9ydGFnZS11dGlscy0yMDA3MDExNS9xZ3JlcC5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3
L3FncmVwLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvcWdyZXAuYwkyMDA3LTAxLTE1IDE5
OjIwOjEyLjAwMDAwMDAwMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWdy
ZXAuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjM0MzkzMDA1MiArMDEwMApAQCAtMTAsMTEgKzEwLDEy
IEBACiAKICNpZmRlZiBBUFBMRVRfcWdyZXAKIAotI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIY2Ui
IENPTU1PTl9GTEFHUworI2RlZmluZSBRR1JFUF9GTEFHUyAiSWlIbzpjZSIgQ09NTU9OX0ZMQUdT
CiBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxZ3JlcF9sb25nX29wdHNbXSA9IHsKIAl7Imlu
dmVydC1tYXRjaCIsICBub19hcmd1bWVudCwgTlVMTCwgJ0knfSwKIAl7Imlnbm9yZS1jYXNlIiwg
ICBub19hcmd1bWVudCwgTlVMTCwgJ2knfSwKIAl7IndpdGgtZmlsZW5hbWUiLCBub19hcmd1bWVu
dCwgTlVMTCwgJ0gnfSwKKwl7Im92ZXJsYXkiLCAgICAgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28n
fSwKIAl7ImNvdW50IiwgICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKIAl7InJlZ2V4
cCIsICAgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ2UnfSwKIAlDT01NT05fTE9OR19PUFRTCkBA
IC0yMyw2ICsyNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpxZ3JlcF9vcHRzX2hlbHBbXSA9IHsK
IAkiU2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcyIsCiAJIklnbm9yZSBjYXNlIGRpc3RpbmN0aW9u
cyIsCiAJIlByaW50IHRoZSBmaWxlbmFtZSBmb3IgZWFjaCBtYXRjaCIsCisJIk9ubHkgY29uc2lk
ZXIgdGhlIDxhcmc+IG92ZXJsYXkiLAogCSJPbmx5IHByaW50IGEgY291bnQgb2YgbWF0Y2hpbmcg
bGluZXMgcGVyIEZJTEUiLAogCSJVc2UgUEFUVEVSTiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiIs
CiAJQ09NTU9OX09QVFNfSEVMUApAQCAtMzQsNiArMzYsOCBAQCBpbnQgcWdyZXBfbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJaW50IGNvdW50ID0gMDsKKwlzaG9ydCBt
eWVycm9yID0gMCwgcmVwbyA9IDAsIGJhZF9vdmVybGF5PTA7CisJY2hhciBvdmVybGF5X25hbWVb
NjRdLCByZXBvX3NlYXJjaFs2NF07CiAJY2hhciAqcDsKIAljaGFyIGRvX2NvdW50LCBkb19yZWdl
eDsKIAljaGFyIHNob3dfZmlsZW5hbWU7CkBAIC00MiwxMCArNDYsMTUgQEAgaW50IHFncmVwX21h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWNoYXIgYnVmMFtCVUZTSVpdOwogCWludCByZWZs
YWdzID0gUkVHX05PU1VCOwogCWNoYXIgaW52ZXJ0X21hdGNoID0gMDsKKwlvdmVybGF5X3QgKmN1
cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CiAKIAl0eXBlZGVmIGNoYXIgKigqRlVOQykgKGNoYXIg
KiwgY2hhciAqKTsKIAlGVU5DIHN0cmZ1bmMgPSAoRlVOQykgc3Ryc3RyOwogCisJY3VyX292ZXJs
YXkgPSBmaXJzdF9vdmVybGF5OworCW92ZXJsYXlfbmFtZVswXSA9IDA7CisJcmVwb19zZWFyY2hb
MF0gPSAwOworCiAJREJHKCJhcmdjPSVkIGFyZ3ZbMF09JXMgYXJndlsxXT0lcyIsCiAJICAgIGFy
Z2MsIGFyZ3ZbMF0sIGFyZ2MgPiAxID8gYXJndlsxXSA6ICJOVUxMPyIpOwogCkBAIC01OCwxMiAr
NjcsMjYgQEAgaW50IHFncmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJc3RyZnVu
YyA9IChGVU5DKSBzdHJjYXNlc3RyOwogCQkJcmVmbGFncyB8PSBSRUdfSUNBU0U7CiAJCQlicmVh
azsKKwkJY2FzZSAnSCc6IHNob3dfZmlsZW5hbWUgPSAxOyBicmVhazsKKwkJY2FzZSAnbyc6CisJ
CQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19zZWFyY2gsIG9wdGFyZywgc2l6ZW9mKHJlcG9f
c2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IGRvX2NvdW50ID0gMTsgYnJlYWs7CiAJ
CWNhc2UgJ2UnOiBkb19yZWdleCA9IDE7IGJyZWFrOwotCQljYXNlICdIJzogc2hvd19maWxlbmFt
ZSA9IDE7IGJyZWFrOwogCQlDT01NT05fR0VUT1BUU19DQVNFUyhxZ3JlcCkKIAkJfQogCX0KKwor
CWlmIChyZXBvKSB7CisJCWRvIHsKKwkJCWlmICghc3RybmNtcChjdXJfb3ZlcmxheS0+bmFtZSwg
cmVwb19zZWFyY2gsIHNpemVvZihjdXJfb3ZlcmxheS0+bmFtZSkpKQorCQkJCWJyZWFrOworCQl9
IHdoaWxlICgoY3VyX292ZXJsYXk9Y3VyX292ZXJsYXktPm5leHQpKTsKKwkJaWYgKE5VTEwgPT0g
Y3VyX292ZXJsYXkpCisJCQllcnIoIiVzIDogVW5rbm93biBvdmVybGF5LCB0cnkgJ3EgLS1scy1v
dmVybGF5cyciLCByZXBvX3NlYXJjaCk7CisJfQorCiAJaWYgKGFyZ2MgPT0gb3B0aW5kKQogCQlx
Z3JlcF91c2FnZShFWElUX0ZBSUxVUkUpOwogCkBAIC03NSw2ICs5OCw1MSBAQCBpbnQgcWdyZXBf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCUZJTEUgKm5ld2ZwOwogCQlpZiAoKHAgPSBz
dHJjaHIoZWJ1aWxkLCAnXG4nKSkgIT0gTlVMTCkKIAkJCSpwID0gMDsKKworCQkvKiBmaW5kIHRo
ZSBvdmVybGF5LCB3ZSdyZSB3b3JraW5nIG9uLCBhbmQgY2hhbmdlIHRvIHRoZQorCQkgKiBjb3Jy
ZXNwb25kaW5nIChsb2NhdGlvbnxjYWNoZSkgZGlyZWN0b3J5ICovCisJCWlmICgocCA9IHN0cmNo
cihlYnVpbGQsICc6JykpKSB7CisJCQkvKiBkZWxldGUgdGhlIDo6b3ZlcmxheSAqLworCQkJKnAg
PSAwOworCisJCQkvKiByZXN0cmljdCB0aGUgc2VhcmNoIHRvIG9uZSBvdmVybGF5IGlmIHRoZSB1
c2VycyB3YW50cyBpdCAqLworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCsy
LCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChiYWRfb3Zlcmxh
eSAmJiAhc3RybmNtcChvdmVybGF5X25hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpKQor
CQkJCWNvbnRpbnVlOworCQkJZWxzZSB7CisJCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9uYW1lLCBw
KzIsIHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCQlvdmVybGF5X3RtcD1maXJzdF9vdmVy
bGF5OworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHAr
Miwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0gd2hp
bGUgKChvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCisJCQkJCWlmIChvdmVybGF5
X3RtcCkgeworCQkJCQkJY3VyX292ZXJsYXkgPSBvdmVybGF5X3RtcDsKKwkJCQkJCWlmIChjaGRp
cihjdXJfb3ZlcmxheS0+cGF0aCkgIT0gMCkgeworCQkJCQkJCXdhcm5wKCJjaGRpciB0byAnJXMn
IGZhaWxlZCIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkJCQlteWVycm9yID0gMTsKKwkJCQkJ
CX0gZWxzZQorCQkJCQkJCWJhZF9vdmVybGF5ID0gMDsKKwkJCQkJfSBlbHNlCisJCQkJCQlteWVy
cm9yID0gMTsKKworCQkJCQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCsyLCBzaXplb2Yob3Zlcmxh
eV9uYW1lKSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKwkJCW15ZXJyb3I9MTsKKworCQlpZiAo
bXllcnJvcikgeworCQkJaWYgKCFyZWluaXRpYWxpemUpCisJCQkJd2FybmYoIihjYWNoZSB1cGRh
dGUgcGVuZGluZykgJXMgOiBVbmtub3duIG92ZXJsYXkiLCBvdmVybGF5X25hbWUpOworCQkJYmFk
X292ZXJsYXkgPSAxOworCQkJbXllcnJvciA9IDA7CisJCQlyZWluaXRpYWxpemUgPSAxOworCQkJ
Y29udGludWU7CisJCX0KKwogCQlpZiAoKG5ld2ZwID0gZm9wZW4oZWJ1aWxkLCAiciIpKSAhPSBO
VUxMKSB7CiAJCQl1bnNpZ25lZCBpbnQgbGluZW5vID0gMDsKIAkJCWNvdW50ID0gMDsKQEAgLTEw
Miw3ICsxNzAsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJ
Y291bnQrKzsKIAkJCQlpZiAoZG9fY291bnQpIGNvbnRpbnVlOwogCQkJCWlmICh2ZXJib3NlIHx8
IHNob3dfZmlsZW5hbWUpIHsKLQkJCQkJcHJpbnRmKCIlczoiLCBlYnVpbGQpOworCQkJCQlwcmlu
dGYoIiVzOjolczoiLCBjdXJfb3ZlcmxheS0+bmFtZSwgZWJ1aWxkKTsKIAkJCQkJaWYgKHZlcmJv
c2UgPiAxKSBwcmludGYoIiVkOiIsIGxpbmVubyk7CiAJCQkJCXByaW50ZigiICIpOwogCQkJCX0K
QEAgLTExMCw3ICsxNzgsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CiAJCQl9CiAJCQlmY2xvc2UobmV3ZnApOwogCQkJaWYgKGRvX2NvdW50ICYmIGNvdW50KSB7Ci0J
CQkJaWYgKHZlcmJvc2UgfHwgc2hvd19maWxlbmFtZSkgcHJpbnRmKCIlczoiLCBlYnVpbGQpOwor
CQkJCWlmICh2ZXJib3NlIHx8IHNob3dfZmlsZW5hbWUpIHByaW50ZigiJXM6OiVzOiIsIGN1cl9v
dmVybGF5LT5uYW1lLCBlYnVpbGQpOwogCQkJCXByaW50ZigiJWQiLCBjb3VudCk7CiAJCQkJcHV0
cygiIik7CiAJCQl9CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUvcXNlYXJjaC5j
IHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FzZWFyY2guYwotLS0gcG9ydGFnZS11dGlscy0y
MDA3MDExNS9xc2VhcmNoLmMJMjAwNy0wMS0xNSAxOToyMDoxMi4wMDAwMDAwMDAgKzAxMDAKKysr
IHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FzZWFyY2guYwkyMDA3LTAxLTE1IDE5OjIxOjU4
LjM1MzkyODUyNyArMDEwMApAQCAtOSwxMCArOSwxMiBAQAogCiAjaWZkZWYgQVBQTEVUX3FzZWFy
Y2gKIAotI2RlZmluZSBRU0VBUkNIX0ZMQUdTICJhY3NTTkgiIENPTU1PTl9GTEFHUworI2RlZmlu
ZSBRU0VBUkNIX0ZMQUdTICJhY286cHNTTkgiIENPTU1PTl9GTEFHUwogc3RhdGljIHN0cnVjdCBv
cHRpb24gY29uc3QgcXNlYXJjaF9sb25nX29wdHNbXSA9IHsKIAl7ImFsbCIsICAgICAgIG5vX2Fy
Z3VtZW50LCBOVUxMLCAnYSd9LAogCXsiY2FjaGUiLCAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdj
J30sCisJeyJvdmVybGF5IiwgICAgYV9hcmd1bWVudCwgTlVMTCwgJ28nfSwKKwl7InNob3ctcGF0
aCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAogCXsic2VhcmNoIiwgICAgbm9fYXJndW1lbnQs
IE5VTEwsICdzJ30sCiAJeyJkZXNjIiwgICAgICAgYV9hcmd1bWVudCwgTlVMTCwgJ1MnfSwKIAl7
Im5hbWUtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LApAQCAtMjIsNiArMjQsOCBAQCBz
dGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBxc2VhcmNoX2xvbmdfCiBzdGF0aWMgY29uc3QgY2hh
ciAqcXNlYXJjaF9vcHRzX2hlbHBbXSA9IHsKIAkiTGlzdCB0aGUgZGVzY3JpcHRpb25zIG9mIGV2
ZXJ5IHBhY2thZ2UgaW4gdGhlIGNhY2hlIiwKIAkiVXNlIHRoZSBwb3J0YWdlIGNhY2hlIiwKKwki
U2VhcmNoIG9ubHkgaW4gdGhlIDxhcmc+IG92ZXJsYXkiLAorCSJTaG93IHRoZSBwYXRoIHRvIHRo
ZSBlYnVpbGQiLAogCSJSZWdleCBzZWFyY2ggcGFja2FnZSBiYXNlbmFtZXMiLAogCSJSZWdleCBz
ZWFyY2ggcGFja2FnZSBkZXNjcmlwdGlvbnMiLAogCSJPbmx5IHNob3cgcGFja2FnZSBuYW1lIiwK
QEAgLTQwLDEzICs0NCwyMiBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKIAljaGFyIGxhc3RbMTI2XSA9ICIiOwogCWNoYXIgZHBbMTI2XSA9ICIiOwogCWNoYXIgYnBb
MTI2XSA9ICIiOwotCWNoYXIgKnAsICpxLCAqc3RyOworCWNoYXIgZGVidWlsZFsxMjZdID0gIiI7
CisJc2hvcnQgcmVwbyA9IDA7CisJY2hhciByZXBvX3NlYXJjaFs2NF07CisJY2hhciAqcCwgKnEs
ICpzdHIsIG92ZXJsYXlfbmFtZVs2NF07CiAJY2hhciAqc2VhcmNoX21lID0gTlVMTDsKLQljaGFy
IHNob3dfaG9tZXBhZ2UgPSAwLCBzaG93X25hbWVfb25seSA9IDA7CisJY2hhciBzaG93X2hvbWVw
YWdlID0gMCwgc2hvd19uYW1lX29ubHkgPSAwLCBzaG93X3BhdGhfdG9fZWJ1aWxkID0gMDsKIAlj
aGFyIHNlYXJjaF9kZXNjID0gMCwgc2VhcmNoX2FsbCA9IDAsIHNlYXJjaF9uYW1lID0gMSwgc2Vh
cmNoX2NhY2hlID0gQ0FDSEVfRUJVSUxEOwogCWNvbnN0IGNoYXIgKnNlYXJjaF92YXJzW10gPSB7
ICJERVNDUklQVElPTj0iLCAiSE9NRVBBR0U9IiB9OwogCXNpemVfdCBzZWFyY2hfbGVuOwotCWlu
dCBpLCBpZHg9MDsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisJaW50
IGksIGlkeD0wLCBteWVycm9yPTAsIGJhZF9vdmVybGF5PTA7CisKKwljdXJfb3ZlcmxheSA9IGZp
cnN0X292ZXJsYXk7CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7
CisJc3RyID0gTlVMTDsKIAogCURCRygiYXJnYz0lZCBhcmd2WzBdPSVzIGFyZ3ZbMV09JXMiLAog
CSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiTlVMTD8iKTsKQEAgLTU2
LDYgKzY5LDggQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCUNP
TU1PTl9HRVRPUFRTX0NBU0VTKHFzZWFyY2gpCiAJCWNhc2UgJ2EnOiBzZWFyY2hfYWxsID0gMTsg
YnJlYWs7CiAJCWNhc2UgJ2MnOiBzZWFyY2hfY2FjaGUgPSBDQUNIRV9NRVRBREFUQTsgYnJlYWs7
CisJCWNhc2UgJ28nOiByZXBvID0gMTsgc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXpl
b2YocmVwb19zZWFyY2gpKTsgYnJlYWs7CisJCWNhc2UgJ3AnOiBzaG93X3BhdGhfdG9fZWJ1aWxk
ID0gMTsgYnJlYWs7CiAJCWNhc2UgJ3MnOiBzZWFyY2hfZGVzYyA9IDA7IHNlYXJjaF9uYW1lID0g
MTsgYnJlYWs7CiAJCWNhc2UgJ1MnOiBzZWFyY2hfZGVzYyA9IDE7IHNlYXJjaF9uYW1lID0gMDsg
YnJlYWs7CiAJCWNhc2UgJ04nOiBzaG93X25hbWVfb25seSA9IDE7IGJyZWFrOwpAQCAtNjMsNiAr
NzgsMTggQEAgaW50IHFzZWFyY2hfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9
CiAKKwlpZiAocmVwbykgeworCQlkbyB7CisJCQlpZiAoISBzdHJuY21wKGN1cl9vdmVybGF5LT5u
YW1lLCByZXBvX3NlYXJjaCwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSkpCisJCQkJYnJlYWs7
CisJCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQlpZiAoTlVM
TCA9PSBjdXJfb3ZlcmxheSkKKwkJCWVycigiJXMgOiBVbmtub3duIG92ZXJsYXksIHRyeSAncSAt
LWxzLW92ZXJsYXlzJyIsIHJlcG9fc2VhcmNoKTsKKwkJaWYgKHNlYXJjaF9jYWNoZSA9PSBDQUNI
RV9NRVRBREFUQSAmJiAhc3RybmNtcChjdXJfb3ZlcmxheS0+Y2FjaGUsIi92YXIvZW1wdHkiLHNp
emVvZihjdXJfb3ZlcmxheS0+Y2FjaGUpKSkKKwkJCWVycigiTm8gY2FjaGUgZGVmaW5lZCBmb3Ig
dGhlICclcycgb3ZlcmxheSIsIGN1cl9vdmVybGF5LT5uYW1lKTsKKwl9CisKKwogCWlmIChzZWFy
Y2hfYWxsKSB7CiAJCXNlYXJjaF9kZXNjID0gMTsKIAkJc2VhcmNoX25hbWUgPSAwOwpAQCAtODYs
NiArMTEzLDYwIEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlp
ZiAoIWVidWlsZFswXSkKIAkJCWNvbnRpbnVlOwogCisJCS8qIGZpbmQgdGhlIG92ZXJsYXksIHdl
J3JlIHdvcmtpbmcgb24sIGFuZCBjaGFuZ2UgdG8gdGhlCisJCSAqIGNvcnJlc3BvbmRpbmcgKGxv
Y2F0aW9ufGNhY2hlKSBkaXJlY3RvcnkgKi8KKwkJaWYgKChwID0gc3RyY2hyKGVidWlsZCwgJzon
KSkpIHsKKwkJCS8qIHNlcGFyYXRvciBpcyAnOjonICovCisJCQkvKiByZXN0cmljdCB0aGUgc2Vh
cmNoIHRvIG9uZSBvdmVybGF5IGlmIHRoZSB1c2VycyB3YW50cyBpdCAqLworCQkJaWYgKHJlcG8g
JiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCsyLCBzaXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQlj
b250aW51ZTsKKwkJCWlmIChiYWRfb3ZlcmxheSAmJiAhc3RybmNtcChvdmVybGF5X25hbWUsIHAr
Miwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0cm5jbXAo
b3ZlcmxheV9uYW1lLCBwKzIsIHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCWxhc3RbMF0g
PSAwOworCQkJCW92ZXJsYXlfdG1wPWZpcnN0X292ZXJsYXk7CisJCQkJZG8geworCQkJCQlpZiAo
IXN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1l
KSkpCisJCQkJCQlicmVhazsKKwkJCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3ZlcmxheV90bXAt
Pm5leHQpKTsKKworCQkJCWlmIChvdmVybGF5X3RtcCkgeworCQkJCQljdXJfb3ZlcmxheT1vdmVy
bGF5X3RtcDsKKwkJCQkJc3dpdGNoIChzZWFyY2hfY2FjaGUpIHsKKwkJCQkJY2FzZSBDQUNIRV9F
QlVJTEQ6CisJCQkJCQlpZiAoY2hkaXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJ
CQl3YXJucCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJ
CQkJbXllcnJvciA9IDE7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9IGVsc2UKKwkJCQkJCQli
YWRfb3ZlcmxheSA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBDQUNIRV9NRVRBREFUQToK
KwkJCQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+Y2FjaGUpICE9IDApIHsKKwkJCQkJCQl3YXJu
cCgiY2hkaXIgdG8gJyVzJyBmYWlsZWQsIHNraXBwaW5nIHRoZSAlcyByZXBvc2l0b3J5IiwgY3Vy
X292ZXJsYXktPmNhY2hlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJCQkJbXllcnJvciA9IDE7
CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9IGVsc2UKKwkJCQkJCQliYWRfb3ZlcmxheSA9IDA7
CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZQorCQkJCQlteWVycm9yID0gMTsKKwkJ
CQlzdHJuY3B5KG92ZXJsYXlfbmFtZSwgcCsyLCBzaXplb2Yob3ZlcmxheV9uYW1lKSk7CisJCQl9
CisJCX0gZWxzZQorCQkJbXllcnJvcisrOworCisJCWlmIChteWVycm9yKSB7CisJCQlpZiAoIXJl
aW5pdGlhbGl6ZSkKKwkJCQl3YXJuZigiKGNhY2hlIHVwZGF0ZSBwZW5kaW5nKSAlcyA6IFVua25v
d24gb3ZlcmxheSIsIG92ZXJsYXlfbmFtZSk7CisJCQliYWRfb3ZlcmxheSA9IDE7CisJCQlteWVy
cm9yID0gMDsKKwkJCXJlaW5pdGlhbGl6ZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisKIAkJ
c3dpdGNoIChzZWFyY2hfY2FjaGUpIHsKIAogCQljYXNlIENBQ0hFX01FVEFEQVRBOiB7CkBAIC05
MywxMSArMTc0LDI4IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
CQkJaWYgKChwY2FjaGUgPSBjYWNoZV9yZWFkX2ZpbGUoZWJ1aWxkKSkgIT0gTlVMTCkgewogCQkJ
CWlmICgoc3RyY21wKHBjYWNoZS0+YXRvbS0+UE4sIGxhc3QpKSAhPSAwKSB7CiAJCQkJCXN0cm5j
cHkobGFzdCwgcGNhY2hlLT5hdG9tLT5QTiwgc2l6ZW9mKGxhc3QpKTsKLQkJCQkJaWYgKChyZW1h
dGNoKHNlYXJjaF9tZSwgKHNlYXJjaF9kZXNjID8gcGNhY2hlLT5ERVNDUklQVElPTiA6IGVidWls
ZCksIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSkpID09IDApCi0JCQkJCQlwcmludGYoIiVzJXMv
JXMlcyVzICVzXG4iLCBCT0xELCBwY2FjaGUtPmF0b20tPkNBVEVHT1JZLCBCTFVFLAotCQkJCQkJ
ICAgICAgIHBjYWNoZS0+YXRvbS0+UE4sIE5PUk0sCi0JCQkJCQkgICAgICAgKHNob3dfbmFtZV9v
bmx5ID8gIiIgOgotCQkJCQkJICAgICAgICAoc2hvd19ob21lcGFnZSA/IHBjYWNoZS0+SE9NRVBB
R0UgOiBwY2FjaGUtPkRFU0NSSVBUSU9OKSkpOworCQkJCQlpZiAoIXNlYXJjaF9hbGwgJiYgKHJl
bWF0Y2goc2VhcmNoX21lLCAoc2VhcmNoX2Rlc2MgPyBwY2FjaGUtPkRFU0NSSVBUSU9OIDogZWJ1
aWxkKSwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFKSkgIT0gMCkgeworCQkJCQkJY2FjaGVfZnJl
ZShwY2FjaGUpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlpZiAoc2hvd19wYXRo
X3RvX2VidWlsZCkgeworCQkJCQkJLyogZGVsZXRlIHRoZSA6Om92ZXJsYXkgKi8KKwkJCQkJCSpw
ID0gMDsKKwkJCQkJCXN0cm5jcHkoZGVidWlsZCwgZWJ1aWxkLCBzaXplb2YoZGVidWlsZCkpOwor
CQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXNcdCAlcyVzLyVzL1xuIiwKKwkJCQkJCUJPTEQs
IHBjYWNoZS0+YXRvbS0+Q0FURUdPUlksCisJCQkJCQlCTFVFLCBwY2FjaGUtPmF0b20tPlBOLAor
CQkJCQkJWUVMTE9XLCBwY2FjaGUtPmF0b20tPk9WRVJMQVksIE5PUk0sCisJCQkJCQljdXJfb3Zl
cmxheS0+cGF0aCwgZGlybmFtZShkZWJ1aWxkKSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlwcmlu
dGYoIiVzJXMvJXMlcyVzOjolcyAlcyVzXG4iLAorCQkJCQkJQk9MRCwgcGNhY2hlLT5hdG9tLT5D
QVRFR09SWSwKKwkJCQkJCUJMVUUsIHBjYWNoZS0+YXRvbS0+UE4sCisJCQkJCQlZRUxMT1csIHBj
YWNoZS0+YXRvbS0+T1ZFUkxBWSwgTk9STSwKKwkJCQkJCShzaG93X25hbWVfb25seSA/ICIiIDoK
KwkJCQkJCShzaG93X2hvbWVwYWdlID8gcGNhY2hlLT5IT01FUEFHRSA6IHBjYWNoZS0+REVTQ1JJ
UFRJT04pKSk7CisJCQkJCX0KIAkJCQl9CiAJCQkJY2FjaGVfZnJlZShwY2FjaGUpOwogCQkJfSBl
bHNlIHsKQEAgLTExMCw2ICsyMDgsOSBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFy
ICoqYXJndikKIAogCQljYXNlIENBQ0hFX0VCVUlMRDogewogCQkJRklMRSAqZWJ1aWxkZnA7CisJ
CQkvKiBkZWxldGUgdGhlIDo6b3ZlcmxheSAqLworCQkJKnAgPSAwOworCiAJCQlzdHIgPSB4c3Ry
ZHVwKGVidWlsZCk7CiAJCQlwID0gKGNoYXIgKikgZGlybmFtZShzdHIpOwogCkBAIC0xMzQsOSAr
MjM1LDE4IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkJ
CS8qIGRvaW5nIG9wZXJhdGlvbnMgd2l0aCB0aGVtLiAqLwogCQkJCQkJCXN0cm5jcHkoZHAsIHAs
IHNpemVvZihkcCkpOwogCQkJCQkJCXN0cm5jcHkoYnAsIHAsIHNpemVvZihicCkpOwotCQkJCQkJ
CXByaW50ZigiJXMlcy8lcyVzJXMgJXNcbiIsCi0JCQkJCQkJCUJPTEQsIGRpcm5hbWUoZHApLCBC
TFVFLCBiYXNlbmFtZShicCksIE5PUk0sCisJCQkJCQkJc3RybmNweShkZWJ1aWxkLCBlYnVpbGQs
IHNpemVvZihkZWJ1aWxkKSk7CisJCQkJCQkJaWYgKHNob3dfcGF0aF90b19lYnVpbGQpIHsKKwkJ
CQkJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXNcdCAlcyVzLyVzL1xuIiwKKwkJCQkJCQkJQk9M
RCwgZGlybmFtZShkcCksIEJMVUUsIGJhc2VuYW1lKGJwKSwKKwkJCQkJCQkJWUVMTE9XLCBjdXJf
b3ZlcmxheS0+bmFtZSwgTk9STSwKKwkJCQkJCQkJY3VyX292ZXJsYXktPnBhdGgsIGRpcm5hbWUo
ZGVidWlsZCkpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXByaW50ZigiJXMlcy8lcyVzJXM6
OiVzICVzJXNcbiIsCisJCQkJCQkJCUJPTEQsIGRpcm5hbWUoZHApLCBCTFVFLCBiYXNlbmFtZShi
cCksCisJCQkJCQkJCVlFTExPVywgY3VyX292ZXJsYXktPm5hbWUsIE5PUk0sCiAJCQkJCQkJCShz
aG93X25hbWVfb25seSA/ICIiIDogcSkpOworCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKIAkJCQkJ
CX0KIAkJCQkJfQpkaWZmIC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1L3F1c2UuYyBwb3J0
YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xdXNlLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUv
cXVzZS5jCTIwMDctMDEtMTUgMTk6MjA6MTIuMDAwMDAwMDAwICswMTAwCisrKyBwb3J0YWdlLXV0
aWxzLTIwMDcwMTE1Lm5ldy9xdXNlLmMJMjAwNy0wMS0xNSAxOToyMTo1OC4zNjE5MjczMDcgKzAx
MDAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBHZW50b28gRm91
bmRhdGlvbgogICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSB2MgotICogJEhlYWRlcjogL3Zhci9jdnNyb290L2dlbnRvby1wcm9q
ZWN0cy9wb3J0YWdlLXV0aWxzL3F1c2UuYyx2IDEuNTUgMjAwNy8wMS8wOSAxMzoxNTo0MyB2YXBp
ZXIgRXhwICQKKyAqICRIZWFkZXI6IC92YXIvY3Zzcm9vdC9nZW50b28tcHJvamVjdHMvcG9ydGFn
ZS11dGlscy9xdXNlLmMsdiAxLjU0IDIwMDYvMTIvMjUgMTY6Mzg6Mzcgc29sYXIgRXhwICQKICAq
CiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA2IE5lZCBMdWRkICAgICAgICAtIDxzb2xhckBnZW50b28u
b3JnPgogICogQ29weXJpZ2h0IDIwMDUtMjAwNiBNaWtlIEZyeXNpbmdlciAgLSA8dmFwaWVyQGdl
bnRvby5vcmc+CkBAIC0xNCwxMCArMTQsMTEgQEAKICBxdXNlIC1LZSAtLSAgbmxzCiAqLwogCi0j
ZGVmaW5lIFFVU0VfRkxBR1MgImVhdktMREY6TiIgQ09NTU9OX0ZMQUdTCisjZGVmaW5lIFFVU0Vf
RkxBR1MgImVhbzp2S0xERjpOIiBDT01NT05fRkxBR1MKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNv
bnN0IHF1c2VfbG9uZ19vcHRzW10gPSB7CiAJeyJleGFjdCIsICAgICBub19hcmd1bWVudCwgTlVM
TCwgJ2UnfSwKIAl7ImFsbCIsICAgICAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnYSd9LAorCXsib3Zl
cmxheSIsICAgIGFfYXJndW1lbnQsIE5VTEwsICdvJ30sCiAJeyJrZXl3b3JkcyIsICBub19hcmd1
bWVudCwgTlVMTCwgJ0snfSwKIAl7ImxpY2Vuc2UiLCAgIG5vX2FyZ3VtZW50LCBOVUxMLCAnTCd9
LAogCXsiZGVzY3JpYmUiLCAgbm9fYXJndW1lbnQsIE5VTEwsICdEJ30sCkBAIC0yOCw2ICsyOSw3
IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IHF1c2VfbG9uZ19vcHQKIHN0YXRpYyBjb25z
dCBjaGFyICpxdXNlX29wdHNfaGVscFtdID0gewogCSJTaG93IGV4YWN0IG5vbiByZWdleHAgbWF0
Y2hpbmcgdXNpbmcgc3RyY21wIiwKIAkiU2hvdyBhbm5veWluZyB0aGluZ3MgaW4gSVVTRSIsCisJ
Ik9ubHkgY29uc2lkZXIgdGhlIDxhcmc+IG92ZXJsYXkiLAogCSJVc2UgdGhlIEtFWVdPUkRTIHZz
IElVU0UiLAogCSJVc2UgdGhlIExJQ0VOU0UgdnMgSVVTRSIsCiAJIkRlc2NyaWJlIHRoZSBVU0Ug
ZmxhZyIsCkBAIC0zNSwxMCArMzcsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnF1c2Vfb3B0c19o
ZWxwW10gPSB7CiAJIk9ubHkgc2hvdyBwYWNrYWdlIG5hbWUiLAogCUNPTU1PTl9PUFRTX0hFTFAK
IH07Ci1zdGF0aWMgY29uc3QgY2hhciBxdXNlX3Jjc2lkW10gPSAiJElkOiBxdXNlLmMsdiAxLjU1
IDIwMDcvMDEvMDkgMTM6MTU6NDMgdmFwaWVyIEV4cCAkIjsKK3N0YXRpYyBjb25zdCBjaGFyIHF1
c2VfcmNzaWRbXSA9ICIkSWQ6IHF1c2UuYyx2IDEuNTQgMjAwNi8xMi8yNSAxNjozODozNyBzb2xh
ciBFeHAgJCI7CiAjZGVmaW5lIHF1c2VfdXNhZ2UocmV0KSB1c2FnZShyZXQsIFFVU0VfRkxBR1Ms
IHF1c2VfbG9uZ19vcHRzLCBxdXNlX29wdHNfaGVscCwgbG9va3VwX2FwcGxldF9pZHgoInF1c2Ui
KSkKIAotaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBpbnQgYXJnYywgY2hhciAqKmFy
Z3YpOworaW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBzaG9ydCByZXBvLCBjaGFyIHJl
cG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJndik7CiAKIGNoYXIgcXVzZV9uYW1lX29u
bHkgPSAwOwogCkBAIC04MSw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHByaW50X2hpZ2hsaWdodGVk
X3VzZV9mbGFncygKIAl9CiB9CiAKLWludCBxdXNlX2Rlc2NyaWJlX2ZsYWcoaW50IGluZCwgaW50
IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IHF1c2VfZGVzY3JpYmVfZmxhZyhpbnQgaW5kLCBzaG9y
dCByZXBvLCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICNk
ZWZpbmUgTlVNX1NFQVJDSF9GSUxFUyBBUlJfU0laRShzZWFyY2hfZmlsZXMpCiAJY2hhciBidWZb
QlVGU0laRV0sICpwOwpAQCAtOTEsMTE1ICs5MywxNTIgQEAgaW50IHF1c2VfZGVzY3JpYmVfZmxh
ZyhpbnQgaW5kLCBpbnQgYXJnYwogCUZJTEUgKmZwW05VTV9TRUFSQ0hfRklMRVNdOwogCURJUiAq
ZDsKIAlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlvdmVybGF5X3QgKmN1cl9vdmVybGF5OwogCi0JZm9y
IChpID0gMDsgaSA8IE5VTV9TRUFSQ0hfRklMRVM7ICsraSkgewotCQlzbnByaW50ZihidWYsIHNp
emVvZihidWYpLCAiJXMvcHJvZmlsZXMvJXMiLCBwb3J0ZGlyLCBzZWFyY2hfZmlsZXNbaV0pOwot
CQlpZiAoKGZwW2ldID0gZm9wZW4oYnVmLCAiciIpKSA9PSBOVUxMKQotCQkJd2FybnAoInNraXBw
aW5nICVzIiwgc2VhcmNoX2ZpbGVzW2ldKTsKLQl9CisJY3VyX292ZXJsYXk9Zmlyc3Rfb3Zlcmxh
eTsKIAotCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykgewotCQlzID0gc3RybGVuKGFyZ3Zb
aV0pOworCWRvIHsKKwkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgY3VyX292ZXJs
YXktPm5hbWUsIHNpemVvZihyZXBvX3NlYXJjaCkpKQorCQkJY29udGludWU7CisJCWZvciAoaSA9
IDA7IGkgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2kpIHsKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9m
KGJ1ZiksICIlcy9wcm9maWxlcy8lcyIsIGN1cl9vdmVybGF5LT5wYXRoLCBzZWFyY2hfZmlsZXNb
aV0pOworCQkJaWYgKChmcFtpXSA9IGZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkKKwkJCQlpZiAo
dmVyYm9zZT4yKQorCQkJCQl3YXJucCgic2tpcHBpbmcgJXMgZm9yIHRoZSAlcyBvdmVybGF5Iiwg
c2VhcmNoX2ZpbGVzW2ldLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCX0KIAotCQlmb3IgKGYgPSAw
OyBmIDwgTlVNX1NFQVJDSF9GSUxFUzsgKytmKSB7Ci0JCQlpZiAoZnBbZl0gPT0gTlVMTCkKLQkJ
CQljb250aW51ZTsKKwkJZm9yIChpID0gaW5kOyBpIDwgYXJnYzsgaSsrKSB7CisJCQlzID0gc3Ry
bGVuKGFyZ3ZbaV0pOwogCi0JCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbZl0p
ICE9IE5VTEwpIHsKLQkJCQlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJ
CWZvciAoZiA9IDA7IGYgPCBOVU1fU0VBUkNIX0ZJTEVTOyArK2YpIHsKKwkJCQlpZiAoZnBbZl0g
PT0gTlVMTCkKIAkJCQkJY29udGludWU7CiAKLQkJCQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xu
JykpICE9IE5VTEwpCi0JCQkJCSpwID0gJ1wwJzsKKwkJCQl3aGlsZSAoZmdldHMoYnVmLCBzaXpl
b2YoYnVmKSwgZnBbZl0pICE9IE5VTEwpIHsKKwkJCQkJaWYgKGJ1ZlswXSA9PSAnIycgfHwgYnVm
WzBdID09ICdcbicpCisJCQkJCQljb250aW51ZTsKIAotCQkJCXN3aXRjaCAoZikgewotCQkJCQlj
YXNlIDA6IC8qIEdsb2JhbCB1c2UuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJn
dltpXSwgcykpCi0JCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0gJy0nKSB7
Ci0JCQkJCQkJCXByaW50ZigiICVzZ2xvYmFsJXM6JXMlcyVzOiAlc1xuIiwgQk9MRCwgTk9STSwg
QkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7Ci0JCQkJCQkJCWdvdG8gc2tpcF9maWxlOwot
CQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQlpZiAoKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xuJykp
ICE9IE5VTEwpCisJCQkJCQkqcCA9ICdcMCc7CiAKLQkJCQkJY2FzZSAxOiAvKiBMb2NhbCB1c2Uu
bG9jYWwuZGVzYyAqLwotCQkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkgPT0gTlVMTCkK
KwkJCQkJc3dpdGNoIChmKSB7CisJCQkJCQljYXNlIDA6IC8qIEdsb2JhbCB1c2UuZGVzYyAqLwor
CQkJCQkJCWlmICghc3RybmNtcChidWYsIGFyZ3ZbaV0sIHMpKQorCQkJCQkJCQlpZiAoYnVmW3Nd
ID09ICcgJyAmJiBidWZbcysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCWlmIChvdmVybGF5X2dlbnRv
byAmJiBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlwcmludGYoIiAl
c2dsb2JhbCVzOiVzJXMlczogJXNcbiIsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0s
IGJ1ZitzKzMpOworCQkJCQkJCQkJZWxzZQorCQkJCQkJCQkJCXByaW50ZigiICglcykgJXNnbG9i
YWwlczolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwg
YXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJ
CQkJfQogCQkJCQkJCWJyZWFrOwotCQkJCQkJKytwOwotCQkJCQkJaWYgKCFzdHJuY21wKHAsIGFy
Z3ZbaV0sIHMpKSB7Ci0JCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBbcysxXSA9PSAnLScpIHsK
LQkJCQkJCQkJKnAgPSAnXDAnOwotCQkJCQkJCQlwcmludGYoIiAlc2xvY2FsJXM6JXMlcyVzOiVz
JXMlcyAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgQk9MRCwgYnVmLCBO
T1JNLCBwK3MrMyk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJYnJlYWs7CiAKLQkJCQkJY2Fz
ZSAyOiAvKiBBcmNoaXRlY3R1cmVzIGFyY2gubGlzdCAqLwotCQkJCQkJaWYgKCFzdHJjbXAoYnVm
LCBhcmd2W2ldKSkgewotCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMlczogJXMgYXJjaGl0
ZWN0dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBhcmd2W2ldKTsKLQkJ
CQkJCQlnb3RvIHNraXBfZmlsZTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAx
OiAvKiBMb2NhbCB1c2UubG9jYWwuZGVzYyAqLworCQkJCQkJCWlmICgocCA9IHN0cmNocihidWYs
ICc6JykpID09IE5VTEwpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCSsrcDsKKwkJCQkJCQlpZiAo
IXN0cm5jbXAocCwgYXJndltpXSwgcykpIHsKKwkJCQkJCQkJaWYgKHBbc10gPT0gJyAnICYmIHBb
cysxXSA9PSAnLScpIHsKKwkJCQkJCQkJCSpwID0gJ1wwJzsKKwkJCQkJCQkJCWlmIChvdmVybGF5
X2dlbnRvbyAmJiBjdXJfb3ZlcmxheSA9PSBvdmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCQlwcmlu
dGYoIiAlc2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xuIiwgQk9MRCwgTk9STSwgQkxVRSwgYXJn
dltpXSwgTk9STSwgQk9MRCwgYnVmLCBOT1JNLCBwK3MrMyk7CisJCQkJCQkJCQllbHNlCisJCQkJ
CQkJCQkJcHJpbnRmKCIgKCVzKSAlc2xvY2FsJXM6JXMlcyVzOiVzJXMlcyAlc1xuIiwgY3VyX292
ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFyZ3ZbaV0sIE5PUk0sIEJPTEQsIGJ1Ziwg
Tk9STSwgcCtzKzMpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOwogCi0JCQkJ
CWNhc2UgMzogLyogTGFuZ3VhZ2VzIGxhbmcuZGVzYyAqLwotCQkJCQkJaWYgKCFzdHJuY21wKGJ1
ZiwgYXJndltpXSwgcykpCi0JCQkJCQkJaWYgKGJ1ZltzXSA9PSAnICcgJiYgYnVmW3MrMV0gPT0g
Jy0nKSB7Ci0JCQkJCQkJCXByaW50ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBC
T0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCWNhc2UgMjog
LyogQXJjaGl0ZWN0dXJlcyBhcmNoLmxpc3QgKi8KKwkJCQkJCQlpZiAoIXN0cmNtcChidWYsIGFy
Z3ZbaV0pKSB7CisJCQkJCQkJCWlmIChvdmVybGF5X2dlbnRvbyAmJiBjdXJfb3ZlcmxheSA9PSBv
dmVybGF5X2dlbnRvbykKKwkJCQkJCQkJCXByaW50ZigiICVzYXJjaCVzOiVzJXMlczogJXMgYXJj
aGl0ZWN0dXJlXG4iLCBCT0xELCBOT1JNLCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBhcmd2W2ldKTsK
KwkJCQkJCQkJZWxzZQorCQkJCQkJCQkJcHJpbnRmKCIgKCVzKSAlc2FyY2glczolcyVzJXM6ICVz
IGFyY2hpdGVjdHVyZVxuIiwgY3VyX292ZXJsYXktPm5hbWUsIEJPTEQsIE5PUk0sIEJMVUUsIGFy
Z3ZbaV0sIE5PUk0sIGFyZ3ZbaV0pOwogCQkJCQkJCQlnb3RvIHNraXBfZmlsZTsKIAkJCQkJCQl9
Ci0JCQkJCQlicmVhazsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSAzOiAvKiBMYW5ndWFn
ZXMgbGFuZy5kZXNjICovCisJCQkJCQkJaWYgKCFzdHJuY21wKGJ1ZiwgYXJndltpXSwgcykpCisJ
CQkJCQkJCWlmIChidWZbc10gPT0gJyAnICYmIGJ1ZltzKzFdID09ICctJykgeworCQkJCQkJCQkJ
aWYgKG92ZXJsYXlfZ2VudG9vICYmIGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vKQorCQkJ
CQkJCQkJCXByaW50ZigiICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBCT0xELCBOT1JN
LCBCTFVFLCBhcmd2W2ldLCBOT1JNLCBidWYrcyszKTsKKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJ
CQlwcmludGYoIiAoJXMpICVzbGFuZyVzOiVzJXMlczogJXMgbGluZ3VhXG4iLCBjdXJfb3Zlcmxh
eS0+bmFtZSwgQk9MRCwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgYnVmK3MrMyk7CisJCQkJ
CQkJCQlnb3RvIHNraXBfZmlsZTsKKwkJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQl9CiAJ
CQkJfQotCQkJfQogCiBza2lwX2ZpbGU6Ci0JCQlyZXdpbmQoZnBbZl0pOworCQkJCXJld2luZChm
cFtmXSk7CisJCQl9CisKKwkJCWlmIChpID09IChhcmdjIC0gMSkpCisJCQkJZm9yIChmPTA7IGY8
TlVNX1NFQVJDSF9GSUxFUzsgKytmKQorCQkJCQlpZiAoZnBbZl0pIHsKKwkJCQkJCWZjbG9zZShm
cFtmXSk7CisJCQkJCQlmcFtmXSA9IE5VTEw7CisJCQkJCX0KIAkJfQotCX0KIAotCWZvciAoZj0w
OyBmPE5VTV9TRUFSQ0hfRklMRVM7ICsrZikKLQkJaWYgKGZwW2ZdICE9IE5VTEwpCi0JCQlmY2xv
c2UoZnBbZl0pOworCX0gd2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOwog
CiAJLyogbm93IHNjYW4gdGhlIGRlc2MgZGlyICovCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwgcG9ydGRpcik7Ci0JZCA9IG9wZW5kaXIoYnVmKTsKLQl3
aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKGRlLT5kX25h
bWUrc3RybGVuKGRlLT5kX25hbWUpLTUsICIuZGVzYyIpKQorCWN1cl9vdmVybGF5PWZpcnN0X292
ZXJsYXk7CisJZG8geworCQlpZiAocmVwbyAmJiBzdHJuY21wKHJlcG9fc2VhcmNoLCBjdXJfb3Zl
cmxheS0+bmFtZSwgc2l6ZW9mKHJlcG9fc2VhcmNoKSkpCiAJCQljb250aW51ZTsKLQotCQlzbnBy
aW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvcHJvZmlsZXMvZGVzYy8lcyIsIHBvcnRkaXIsIGRl
LT5kX25hbWUpOwotCQlpZiAoKGZwWzBdPWZvcGVuKGJ1ZiwgInIiKSkgPT0gTlVMTCkgewotCQkJ
d2FybigiQ291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzsgc2tpcHBpbmciLCBkZS0+ZF9u
YW1lKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvIiwg
Y3VyX292ZXJsYXktPnBhdGgpOworCQlpZiAoIShkID0gb3BlbmRpcihidWYpKSkgeworCQkJaWYg
KHZlcmJvc2U+MikKKwkJCQl3YXJuKCJDb3VsZCBub3Qgb3BlbiAlcyAtPiBza2lwcGluZyIsIGJ1
Zik7CiAJCQljb250aW51ZTsKIAkJfQorCQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVM
TCkgeworCQkJaWYgKHN0cmNtcChkZS0+ZF9uYW1lK3N0cmxlbihkZS0+ZF9uYW1lKS01LCAiLmRl
c2MiKSkKKwkJCQljb250aW51ZTsKIAotCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwg
ZnBbMF0pICE9IE5VTEwpIHsKLQkJCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXG4n
KQorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3Byb2ZpbGVzL2Rlc2MvJXMiLCBj
dXJfb3ZlcmxheS0+cGF0aCwgZGUtPmRfbmFtZSk7CisJCQlpZiAoKGZwWzBdPWZvcGVuKGJ1Ziwg
InIiKSkgPT0gTlVMTCkgeworCQkJCXdhcm4oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRp
bmc7IHNraXBwaW5nIiwgZGUtPmRfbmFtZSk7CiAJCQkJY29udGludWU7CisJCQl9CiAKLQkJCWlm
ICgocCA9IHN0cnJjaHIoYnVmLCAnXG4nKSkgIT0gTlVMTCkKLQkJCQkqcCA9ICdcMCc7CisJCQl3
aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnBbMF0pICE9IE5VTEwpIHsKKwkJCQlpZiAo
YnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1xuJykKKwkJCQkJY29udGludWU7CiAKLQkJCWlm
ICgocCA9IHN0cmNocihidWYsICctJykpID09IE5VTEwpIHsKKwkJCQlpZiAoKHAgPSBzdHJyY2hy
KGJ1ZiwgJ1xuJykpICE9IE5VTEwpCisJCQkJCSpwID0gJ1wwJzsKKworCQkJCWlmICgocCA9IHN0
cmNocihidWYsICctJykpID09IE5VTEwpIHsKIGludmFsaWRfbGluZToKLQkJCQl3YXJuKCJJbnZh
bGlkIGxpbmUgaW4gJyVzJzogJXMiLCBkZS0+ZF9uYW1lLCBidWYpOwotCQkJCWNvbnRpbnVlOwot
CQkJfQotCQkJd2hpbGUgKHBbLTFdICE9ICcgJyAmJiBwWzFdICE9ICcgJykgewotCQkJCS8qIG1h
eWJlIHRoZSBmbGFnIGhhcyBhICctJyBpbiBpdCAuLi4gKi8KLQkJCQlpZiAoKHAgPSBzdHJjaHIo
cCsxLCAnLScpKSA9PSBOVUxMKQotCQkJCQlnb3RvIGludmFsaWRfbGluZTsKLQkJCX0KLQkJCXBb
LTFdID0gJ1wwJzsKLQkJCXAgKz0gMjsKKwkJCQkJd2FybigiSW52YWxpZCBsaW5lIGluICclcyc6
ICVzIiwgZGUtPmRfbmFtZSwgYnVmKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXdoaWxl
IChwWy0xXSAhPSAnICcgJiYgcFsxXSAhPSAnICcpIHsKKwkJCQkJLyogbWF5YmUgdGhlIGZsYWcg
aGFzIGEgJy0nIGluIGl0IC4uLiAqLworCQkJCQlpZiAoKHAgPSBzdHJjaHIocCsxLCAnLScpKSA9
PSBOVUxMKQorCQkJCQkJZ290byBpbnZhbGlkX2xpbmU7CisJCQkJfQorCQkJCXBbLTFdID0gJ1ww
JzsKKwkJCQlwICs9IDI7CiAKLQkJCWZvciAoaSA9IGluZDsgaSA8IGFyZ2M7IGkrKykKLQkJCQlp
ZiAoIXN0cmNtcChhcmd2W2ldLCBidWYpKQotCQkJCQlwcmludGYoIiAlcyVzJXM6JXMlcyVzOiAl
c1xuIiwgQk9MRCwgZGUtPmRfbmFtZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7Ci0J
CX0KLQkJY2xvc2UoZik7Ci0JfQotCWNsb3NlZGlyKGQpOworCQkJCWZvciAoaSA9IGluZDsgaSA8
IGFyZ2M7IGkrKykKKwkJCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgYnVmKSkgeworCQkJCQkJaWYg
KG92ZXJsYXlfZ2VudG9vICYmIGN1cl9vdmVybGF5ID09IG92ZXJsYXlfZ2VudG9vKQorCQkJCQkJ
CXByaW50ZigiICVzJXMlczolcyVzJXM6ICVzXG4iLCBCT0xELCBkZS0+ZF9uYW1lLCBOT1JNLCBC
TFVFLCBhcmd2W2ldLCBOT1JNLCBwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwcmludGYoIiAoJXMp
ICVzJXMlczolcyVzJXM6ICVzXG4iLCBjdXJfb3ZlcmxheS0+bmFtZSwgQk9MRCwgZGUtPmRfbmFt
ZSwgTk9STSwgQkxVRSwgYXJndltpXSwgTk9STSwgcCk7CisJCQkJCX0KIAorCQkJfQorCQkJZmNs
b3NlKGZwWzBdKTsKKwkJfQorCQljbG9zZWRpcihkKTsKKwl9IHdoaWxlICgoY3VyX292ZXJsYXk9
Y3VyX292ZXJsYXktPm5leHQpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA3LDYgKzI0Niw5IEBA
IGludCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCUZJTEUgKmZwOwogCWNo
YXIgKnA7CisJc2hvcnQgbXllcnJvciA9IDAsIHJlcG8gPSAwOworCWNoYXIgcmVwb19zZWFyY2hb
NjRdOworCWNoYXIgb3ZlcmxheV9uYW1lWzY0XTsKIAogCWNoYXIgYnVmMFtfUV9QQVRIX01BWF07
CiAJY2hhciBidWYxW19RX1BBVEhfTUFYXTsKQEAgLTIxNyw4ICsyNTksMTMgQEAgaW50IHF1c2Vf
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJY29uc3QgY2hhciAqc2VhcmNoX3ZhciA9IE5V
TEw7CiAJY29uc3QgY2hhciAqc2VhcmNoX3ZhcnNbXSA9IHsgIklVU0U9IiwgIktFWVdPUkRTPSIs
ICJMSUNFTlNFPSIsIHNlYXJjaF92YXIgfTsKIAlzaG9ydCBxdXNlX2FsbCA9IDA7Ci0JaW50IHJl
Z2V4cF9tYXRjaGluZyA9IDEsIGksIGlkeCA9IDA7CisJaW50IHJlZ2V4cF9tYXRjaGluZyA9IDEs
IGksIGlkeCA9IDAsIGJhZF9vdmVybGF5ID0gMDsKIAlzaXplX3Qgc2VhcmNoX2xlbjsKKwlvdmVy
bGF5X3QgKmN1cl9vdmVybGF5LCAqb3ZlcmxheV90bXA7CisKKwljdXJfb3ZlcmxheSA9IGZpcnN0
X292ZXJsYXk7CisJb3ZlcmxheV9uYW1lWzBdID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAK
IAlEQkcoImFyZ2M9JWQgYXJndlswXT0lcyBhcmd2WzFdPSVzIiwKIAkgICAgYXJnYywgYXJndlsw
XSwgYXJnYyA+IDEgPyBhcmd2WzFdIDogIk5VTEw/Iik7CkBAIC0yMjcsNiArMjc0LDEwIEBAIGlu
dCBxdXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlzd2l0Y2ggKGkpIHsKIAkJY2Fz
ZSAnZSc6IHJlZ2V4cF9tYXRjaGluZyA9IDA7IGJyZWFrOwogCQljYXNlICdhJzogcXVzZV9hbGwg
PSAxOyBicmVhazsKKwkJY2FzZSAnbyc6CisJCQlyZXBvID0gMTsKKwkJCXN0cm5jcHkocmVwb19z
ZWFyY2gsIG9wdGFyZywgc2l6ZW9mKHJlcG9fc2VhcmNoKSk7CisJCQlicmVhazsKIAkJY2FzZSAn
Syc6IGlkeCA9IDE7IGJyZWFrOwogCQljYXNlICdMJzogaWR4ID0gMjsgYnJlYWs7CiAJCWNhc2Ug
J0QnOiBpZHggPSAtMTsgYnJlYWs7CkBAIC0yMzUsMTMgKzI4NiwyNSBAQCBpbnQgcXVzZV9tYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJQ09NTU9OX0dFVE9QVFNfQ0FTRVMocXVzZSkKIAkJ
fQogCX0KLQlpZiAoYXJnYyA9PSBvcHRpbmQgJiYgIXF1c2VfYWxsICYmIGlkeCA+PSAwKQorCisJ
aWYgKHJlcG8pIHsKKwkJZG8geworCQkJaWYgKCFzdHJuY21wKGN1cl9vdmVybGF5LT5uYW1lLCBy
ZXBvX3NlYXJjaCwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSkpCisJCQkJYnJlYWs7CisJCX0g
d2hpbGUgKChjdXJfb3ZlcmxheT1jdXJfb3ZlcmxheS0+bmV4dCkpOworCQlpZiAoTlVMTCA9PSBj
dXJfb3ZlcmxheSkKKwkJCWVycigiJXMgOiBVbmtub3duIG92ZXJsYXksIHRyeSAncSAtLWxzLW92
ZXJsYXlzJyIsIHJlcG9fc2VhcmNoKTsKKwl9CisKKwlpZiAoYXJnYyA9PSBvcHRpbmQgJiYgIXF1
c2VfYWxsICYmIGlkeCA+PSAwKSB7CisJCWlmIChpZHggPT0gMykKKwkJCWZyZWUoc2VhcmNoX3Zh
cnNbaWR4XSk7CiAJCXF1c2VfdXNhZ2UoRVhJVF9GQUlMVVJFKTsKKwl9CiAKIAlpZiAoaWR4ID09
IC0xKQotCQlyZXR1cm4gcXVzZV9kZXNjcmliZV9mbGFnKG9wdGluZCwgYXJnYywgYXJndik7CisJ
CXJldHVybiBxdXNlX2Rlc2NyaWJlX2ZsYWcob3B0aW5kLCByZXBvLCByZXBvX3NlYXJjaCwgYXJn
YywgYXJndik7CiAKLQlpZiAocXVzZV9hbGwpIG9wdGluZCA9IGFyZ2M7CiAJaW5pdGlhbGl6ZV9l
YnVpbGRfZmxhdCgpOwkvKiBzZXRzIG91ciBwd2QgdG8gJFBPUlRESVIgKi8KIAogCXNlYXJjaF9s
ZW4gPSBzdHJsZW4oc2VhcmNoX3ZhcnNbaWR4XSk7CkBAIC0yNTMsNiArMzE2LDU0IEBAIGludCBx
dXNlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlGSUxFICpuZXdmcDsKIAkJaWYgKChw
ID0gc3RyY2hyKGVidWlsZCwgJ1xuJykpICE9IE5VTEwpCiAJCQkqcCA9IDA7CisJCWlmICgocCA9
IHN0cmNocihlYnVpbGQsICc6JykpKQorCQl7CisJCQkvKiBkZWxldGUgdGhlIDo6b3ZlcmxheSAq
LworCQkJKnAgPSAwOworCQkJaWYgKHJlcG8gJiYgc3RybmNtcChyZXBvX3NlYXJjaCwgcCsyLCBz
aXplb2YocmVwb19zZWFyY2gpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChiYWRfb3ZlcmxheSAm
JiAhc3RybmNtcChvdmVybGF5X25hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfbmFtZSkpKQorCQkJ
CWNvbnRpbnVlOworCQkJZWxzZSB7CisJCQkJaWYgKHN0cm5jbXAob3ZlcmxheV9uYW1lLCBwKzIs
IHNpemVvZihvdmVybGF5X25hbWUpKSkgeworCQkJCQlvdmVybGF5X3RtcD1maXJzdF9vdmVybGF5
OworCQkJCQlkbyB7CisJCQkJCQlpZiAoIXN0cm5jbXAob3ZlcmxheV90bXAtPm5hbWUsIHArMiwg
c2l6ZW9mKG92ZXJsYXlfdG1wLT5uYW1lKSkpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0gd2hpbGUg
KChvdmVybGF5X3RtcD1vdmVybGF5X3RtcC0+bmV4dCkpOworCQkJCQlpZiAob3ZlcmxheV90bXAp
CisJCQkJCXsKKwkJCQkJCWN1cl9vdmVybGF5ID0gb3ZlcmxheV90bXA7CisJCQkJCQlpZiAoY2hk
aXIoY3VyX292ZXJsYXktPnBhdGgpICE9IDApIHsKKwkJCQkJCQl3YXJucCgiY2hkaXIgdG8gJyVz
JyBmYWlsZWQiLCBjdXJfb3ZlcmxheS0+cGF0aCk7CisJCQkJCQkJbXllcnJvcj0xOworCQkJCQkJ
fSBlbHNlCisJCQkJCQkJYmFkX292ZXJsYXkgPSAwOworCQkJCQl9IGVsc2UKKwkJCQkJCW15ZXJy
b3I9MTsKKwkJCQkJc3RybmNweShvdmVybGF5X25hbWUsIHArMiwgc2l6ZW9mKG92ZXJsYXlfbmFt
ZSkpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlCisJCQlteWVycm9yPTE7CisKKwkJaWYgKG15ZXJy
b3IpIHsKKwkJCWlmICghcmVpbml0aWFsaXplKQorCQkJCXdhcm5mKCIoY2FjaGUgdXBkYXRlIHBl
bmRpbmcpICVzIDogVW5rbm93biBvdmVybGF5Iiwgb3ZlcmxheV9uYW1lKTsKKwkJCWJhZF9vdmVy
bGF5ID0gMTsKKwkJCW15ZXJyb3IgPSAwOworCQkJcmVpbml0aWFsaXplID0gMTsKKwkJCWNvbnRp
bnVlOworCQl9CisKKwkJaWYgKChxdXNlX2FsbCkgJiYgb3B0aW5kIT1hcmdjKSB7CisJCQlmb3Ig
KGk9b3B0aW5kO2k8YXJnYztpKyspCisJCQkJaWYgKChzdHJzdHIoZWJ1aWxkLGFyZ3ZbaV0pKSkK
KwkJCQkJYnJlYWs7CisJCQlpZiAoaT09YXJnYykKKwkJCQljb250aW51ZTsKKwkJfQorCiAJCWlm
ICgobmV3ZnAgPSBmb3BlbihlYnVpbGQsICJyIikpICE9IE5VTEwpIHsKIAkJCXVuc2lnbmVkIGlu
dCBsaW5lbm8gPSAwOwogCQkJY2hhciByZXZpc2lvbltzaXplb2YoYnVmMCldOwpAQCAtMzc2LDE1
ICs0ODcsMTggQEAgaW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWlm
ICh2ZXJib3NlID4gMykKIAkJCQkJCXByaW50ZigiJXMgJXMgJXMgIiwgKnVzZXIgPyB1c2VyIDog
Ik1JU1NJTkciLCAqcmV2aXNpb24gPyByZXZpc2lvbiA6ICJNSVNTSU5HIiwgKmRhdGUgPyBkYXRl
IDogIk1JU1NJTkciKTsKIAotCQkJCQlwcmludGYoIiVzJXMlcyAiLCBDWUFOLCBlYnVpbGQsIE5P
Uk0pOwotCQkJCQlwcmludF9oaWdobGlnaHRlZF91c2VfZmxhZ3MoJmJ1ZjBbc2VhcmNoX2xlbisx
XSwgb3B0aW5kLCBhcmdjLCBhcmd2KTsKKwkJCQkJcHJpbnRmKCIlcyVzOjolcyVzICIsIENZQU4s
IGN1cl9vdmVybGF5LT5uYW1lLCBlYnVpbGQsIE5PUk0pOworCQkJCQlpZiAocXVzZV9hbGwpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9oaWdo
bGlnaHRlZF91c2VfZmxhZ3MoJmJ1ZjBbc2VhcmNoX2xlbisxXSwgYXJnYywgYXJnYywgYXJndik7
CisJCQkJCWVsc2UKKwkJCQkJCXByaW50X2hpZ2hsaWdodGVkX3VzZV9mbGFncygmYnVmMFtzZWFy
Y2hfbGVuKzFdLCBvcHRpbmQsIGFyZ2MsIGFyZ3YpOwogCQkJCQlwdXRzKE5PUk0pOwogCQkJCQlp
ZiAodmVyYm9zZSA+IDEpIHsKIAkJCQkJCWNoYXIgKipBUkdWID0gTlVMTDsKIAkJCQkJCWludCBB
UkdDID0gMDsKIAkJCQkJCW1ha2Vhcmd2KCZidWYwW3NlYXJjaF9sZW4rMV0sICZBUkdDLCAmQVJH
Vik7CiAJCQkJCQlpZiAoQVJHQyA+IDApIHsKLQkJCQkJCQlxdXNlX2Rlc2NyaWJlX2ZsYWcoMSwg
QVJHQywgQVJHVik7CisJCQkJCQkJcXVzZV9kZXNjcmliZV9mbGFnKDEsIDAsIHJlcG9fc2VhcmNo
LCBBUkdDLCBBUkdWKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgQVJHQzsgaSsrKQogCQkJCQkJ
CQlmcmVlKEFSR1ZbaV0pOwogCQkJCQkJCWZyZWUoQVJHVik7CkBAIC00MDEsNiArNTE1LDggQEAg
aW50IHF1c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAJZmNsb3NlKGZw
KTsKKwlpZiAoaWR4ID09IDMpCisJCWZyZWUoc2VhcmNoX3ZhcnNbaWR4XSk7CiAJcmV0dXJuIEVY
SVRfU1VDQ0VTUzsKIH0KIAo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107184</attachid>
            <date>2007-01-16 15:53 0000</date>
            <desc>portage2paludis.patch</desc>
            <filename>portage2paludis.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvYXBwbGV0LWxpc3QgcG9ydGFn
ZS11dGlscy0yMDA3MDExNS5ORVcvYXBwbGV0LWxpc3QKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAx
MTUubmV3L2FwcGxldC1saXN0CTIwMDctMDEtMTUgMTk6MjE6MDUuMDE4MDY1MjQ3ICswMTAwCisr
KyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9hcHBsZXQtbGlzdAkyMDA3LTAxLTE1IDE5OjIz
OjEyLjI3NTY1MTMwNSArMDEwMApAQCAtMSwxNSArMSwxMSBAQAogcWF0b20KLXFjYWNoZQogcWNo
ZWNrCiBxZGVwZW5kcwogcWZpbGUKLXFnbHNhCiBxZ3JlcAogcWxpc3QKIHFsb3AKLXFtZXJnZQog
cXBrZwotcXB5CiBxc2VhcmNoCiBxc2l6ZQogcXRiejIKZGlmZiAtTmFydXAgcG9ydGFnZS11dGls
cy0yMDA3MDExNS5uZXcvYXBwbGV0cy5oIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL2FwcGxl
dHMuaAotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvYXBwbGV0cy5oCTIwMDctMDEtMTUg
MTk6MjE6MDUuMDA5MDY2NjIwICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9h
cHBsZXRzLmgJMjAwNy0wMS0xNSAxOToyMzoxMi4yODQ2NDk5MzIgKzAxMDAKQEAgLTI5LDkgKzI5
LDkgQEAgREVDTEFSRV9BUFBMRVQocXhwYWspCiBERUNMQVJFX0FQUExFVChxcGtnKQogREVDTEFS
RV9BUFBMRVQocWdyZXApCiBERUNMQVJFX0FQUExFVChxYXRvbSkKLURFQ0xBUkVfQVBQTEVUKHFt
ZXJnZSkKLURFQ0xBUkVfQVBQTEVUKHFjYWNoZSkKLURFQ0xBUkVfQVBQTEVUKHFweSkKK0RFQ0xB
UkVfQVBQTEVUKHFtZXJnZSkgLyogZGlzYWJsZSAqLworREVDTEFSRV9BUFBMRVQocWNhY2hlKSAv
KiBkaXNhYmxlICovCitERUNMQVJFX0FQUExFVChxcHkpIC8qIGRpc2FibGUgKi8KIERFQ0xBUkVf
QVBQTEVUKHFnbHNhKSAvKiBkaXNhYmxlICovCiAjdW5kZWYgREVDTEFSRV9BUFBMRVQKIApAQCAt
NDksMjIgKzQ5LDIyIEBAIHN0cnVjdCBhcHBsZXRfdCB7CiAJLyogcSBtdXN0IGFsd2F5cyBiZSB0
aGUgZmlyc3QgYXBwbGV0ICovCiAJeyJxIiwgICAgICAgICBxX21haW4sICAgICAgICAgIjxhcHBs
ZXQ+IDxhcmdzPiIsICJ2aXJ0dWFsIGFwcGxldCJ9LAogCXsicWF0b20iLCAgICAgcWF0b21fbWFp
biwgICAgICI8cGtnPiIsICAgICAgICAgICAic3BsaXQgYXRvbSBzdHJpbmdzIn0sCi0JeyJxY2Fj
aGUiLCAgICBxY2FjaGVfbWFpbiwgICAgIjxhY3Rpb24+IDxhcmdzPiIsICJzZWFyY2ggdGhlIG1l
dGFkYXRhIGNhY2hlIn0sCiAJeyJxY2hlY2siLCAgICBxY2hlY2tfbWFpbiwgICAgIjxwa2duYW1l
PiIsICAgICAgICJ2ZXJpZnkgbXRpbWVzL2RpZ2VzdHMifSwKIAl7InFkZXBlbmRzIiwgIHFkZXBl
bmRzX21haW4sICAiPHBrZ25hbWU+IiwgICAgICAgInNob3cgZGVwZW5kZW5jeSBpbmZvIn0sCiAJ
eyJxZmlsZSIsICAgICBxZmlsZV9tYWluLCAgICAgIjxmaWxlbmFtZT4iLCAgICAgICJsaXN0IGFs
bCBwa2dzIG93bmluZyBmaWxlcyJ9LAotCXsicWdsc2EiLCAgICAgcWdsc2FfbWFpbiwgICAgICI8
YWN0aW9uPiA8bGlzdD4iLCAiY2hlY2sgR0xTQXMgYWdhaW5zdCBzeXN0ZW0ifSwKIAl7InFncmVw
IiwgICAgIHFncmVwX21haW4sICAgICAiPG1pc2MgYXJncz4iLCAgICAgImdyZXAgaW4gZWJ1aWxk
cyJ9LAogCXsicWxpc3QiLCAgICAgcWxpc3RfbWFpbiwgICAgICI8cGtnbmFtZT4iLCAgICAgICAi
bGlzdCBmaWxlcyBvd25lZCBieSBwa2duYW1lIn0sCiAJeyJxbG9wIiwgICAgICBxbG9wX21haW4s
ICAgICAgIjxwa2duYW1lPiIsICAgICAgICJlbWVyZ2UgbG9nIGFuYWx5emVyIn0sCi0JeyJxbWVy
Z2UiLCAgICBxbWVyZ2VfbWFpbiwgICAgIjxwa2duYW1lcz4iLCAgICAgICJmZXRjaCBhbmQgbWVy
Z2UgYmluYXJ5IHBhY2thZ2UifSwKIAl7InFwa2ciLCAgICAgIHFwa2dfbWFpbiwgICAgICAiPG1p
c2MgYXJncz4iLCAgICAgIm1hbmlwdWxhdGUgR2VudG9vIGJpbnBrZ3MifSwKLQl7InFweSIsICAg
ICAgcXB5X21haW4sICAgICAgIjxtaXNjIGFyZ3M+IiwgICAgICJweXRob24gaW50ZXJmYWNlIn0s
CiAJeyJxc2VhcmNoIiwgICBxc2VhcmNoX21haW4sICAgIjxyZWdleD4iLCAgICAgICAgICJzZWFy
Y2ggcGtnbmFtZS9kZXNjIn0sCiAJeyJxc2l6ZSIsICAgICBxc2l6ZV9tYWluLCAgICAgIjxwa2du
YW1lPiIsICAgICAgICJjYWxjdWxhdGUgc2l6ZSB1c2FnZSJ9LAogCXsicXRiejIiLCAgICAgcXRi
ejJfbWFpbiwgICAgICI8bWlzYyBhcmdzPiIsICAgICAibWFuaXB1bGF0ZSB0YnoyIHBhY2thZ2Vz
In0sCiAJeyJxdXNlIiwgICAgICBxdXNlX21haW4sICAgICAgIjx1c2VmbGFnPiIsICAgICAgICJm
aW5kIHBrZ3MgdXNpbmcgdXNlZmxhZ3MifSwKIAl7InF4cGFrIiwgICAgIHF4cGFrX21haW4sICAg
ICAiPG1pc2MgYXJncz4iLCAgICAgIm1hbmlwdWxhdGUgeHBhayBhcmNoaXZlcyJ9LAorCXsicWNh
Y2hlIiwgICAgcWNhY2hlX21haW4sICAgICI8YWN0aW9uPiA8YXJncz4iLCBOVUxMfSwJCS8qICJz
ZWFyY2ggdGhlIG1ldGFkYXRhIGNhY2hlIiAqLworCXsicWdsc2EiLCAgICAgcWdsc2FfbWFpbiwg
ICAgICI8YWN0aW9uPiA8bGlzdD4iLCBOVUxMfSwJCS8qICJjaGVjayBHTFNBcyBhZ2FpbnN0IHN5
c3RlbSIgKi8KKwl7InFtZXJnZSIsICAgIHFtZXJnZV9tYWluLCAgICAiPHBrZ25hbWVzPiIsICAg
ICAgTlVMTH0sCQkvKiAiZmV0Y2ggYW5kIG1lcmdlIGJpbmFyeSBwYWNrYWdlIiAqLworCXsicXB5
IiwgICAgICAgcXB5X21haW4sICAgICAgICI8bWlzYyBhcmdzPiIsICAgICBOVUxMfSwJCS8qICJw
eXRob24gaW50ZXJmYWNlIiAqLwogCiAKIAkvKiBhbGlhc2VzIGZvciBlcXVlcnkgY2FwYXRhYmls
aXR5ICovCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L21haW4uYyBwb3J0
YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9tYWluLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUu
bmV3L21haW4uYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjI1Nzk0MzE3MCArMDEwMAorKysgcG9ydGFn
ZS11dGlscy0yMDA3MDExNS5ORVcvbWFpbi5jCTIwMDctMDEtMTUgMTk6MjM6MTIuMjkzNjQ4NTU5
ICswMTAwCkBAIC03MSw5ICs3MSw4IEBAIGludCByZW1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLCAKIHN0YXRpYyBjaGFyICpybXNwYWNlKGNoYXIgKik7CiAKIHZvaWQgaW5pdGlhbGl6
ZV9wb3J0YWdlX2Vudih2b2lkKTsKLXZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5cyAoY2hhciBwb3J0
ZGlyX292ZXJsYXlbXSk7Ci12b2lkIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQodm9pZCk7Ci12b2lk
IHJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCh2b2lkKTsKK3ZvaWQgaW5pdGlhbGl6ZV9vdmVybGF5
cyh2b2lkKTsKK3ZvaWQgcmVpbml0aWFsaXplX2VidWlsZF9mbGF0KHNob3J0IGZvcmNlKTsKIHZv
aWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKTsKIHZvaWQgY2xlYW51cCh2b2lkKTsKIGlu
dCBsb29rdXBfYXBwbGV0X2lkeChjb25zdCBjaGFyICopOwpAQCAtODYsMTEgKzg1LDEzIEBAIHN0
YXRpYyBpbnQgcXVpZXQgPSAwOwogc3RhdGljIGNoYXIgcHJldGVuZCA9IDA7CiBzdGF0aWMgY2hh
ciByZWluaXRpYWxpemUgPSAwOwogc3RhdGljIGNoYXIgcmVpbml0aWFsaXplX21ldGFjYWNoZSA9
IDA7Ci1zdGF0aWMgY2hhciBwb3J0YXJjaFsyMF0gPSAiIjsKLXN0YXRpYyBjaGFyIHBvcnR2ZGJb
X1FfUEFUSF9NQVhdID0gInZhci9kYi9wa2ciOwotc3RhdGljIGNoYXIgcG9ydGNhY2hlZGlyW10g
PSAibWV0YWRhdGEvY2FjaGUiOwotc3RhdGljIGNoYXIgcG9ydHJvb3RbX1FfUEFUSF9NQVhdID0g
Ii8iOwotc3RhdGljIGNoYXIgY29uZmlnX3Byb3RlY3RbX1FfUEFUSF9NQVhdID0gIi9ldGMvIjsK
Ky8qIHN0YXRpYyBjaGFyIHBvcnRhcmNoWzIwXSA9ICIiOyAqLworc3RhdGljIGNoYXIgcG9ydHZk
YltfUV9QQVRIX01BWF0gPSAiIjsKK3N0YXRpYyBjaGFyIGNhY2hlX2ZpbGVfZGlyW19RX1BBVEhf
TUFYXT0idmFyL2NhY2hlL3BhbHVkaXMiOworc3RhdGljIGNoYXIgbWV0YWNhY2hlX2ZpbGVfZGly
W19RX1BBVEhfTUFYXT0idmFyL2NhY2hlL3BhbHVkaXMvbWV0YWRhdGEiOworc3RhdGljIGNoYXIg
cmVwb2NhY2hlZGlyW10gPSAibWV0YWRhdGEvY2FjaGUiOworc3RhdGljIGNoYXIgcG9ydHJvb3Rb
X1FfUEFUSF9NQVhdID0gIiI7CisvKiBzdGF0aWMgY2hhciBjb25maWdfcHJvdGVjdFtfUV9QQVRI
X01BWF0gPSAiL2V0Yy8iOyAqLwogCiB0eXBlZGVmIHN0cnVjdCBvdmVybGF5X3Qgb3ZlcmxheV90
Owogc3RydWN0IG92ZXJsYXlfdCB7CkBAIC0xMDEsMTEgKzEwMiwxMCBAQCBzdHJ1Y3Qgb3Zlcmxh
eV90IHsKIH07CiAKIHN0YXRpYyBvdmVybGF5X3QgKmZpcnN0X292ZXJsYXkgPSBOVUxMOwotLyog
dGVtcG9yYXJ5IHdvcmthcm91bmQgPyAqLwogc3RhdGljIG92ZXJsYXlfdCAqb3ZlcmxheV9nZW50
b28gPSBOVUxMOwogCi1jaGFyIHBrZ2Rpcls1MTJdID0gIi91c3IvcG9ydGFnZS9wYWNrYWdlcy8i
OwotY2hhciBwb3J0X3RtcGRpcls1MTJdID0gIi92YXIvdG1wL3BvcnRhZ2UvIjsKK2NoYXIgcGtn
ZGlyWzUxMl0gPSAiL3Zhci9wYWx1ZGlzL3JlcG9zaXRvcmllcy9nZW50b28vcGFja2FnZXMvIjsK
K2NoYXIgcG9ydF90bXBkaXJbNTEyXSA9ICIvdmFyL3RtcC9wYWx1ZGlzLyI7CiAKIGNoYXIgYmlu
aG9zdFs1MTJdID0gUE9SVEFHRV9CSU5IT1NUOwogY2hhciBmZWF0dXJlc1s1MTJdID0gIm5vbWFu
IG5vaW5mbyBub2RvYyI7CkBAIC0yMjcsNyArMjI3LDggQEAgc3RhdGljIHZvaWQgdmVyc2lvbl9i
YXJmKGNvbnN0IGNoYXIgKklkKQogIyBkZWZpbmUgVkVSU0lPTiAiY3ZzIgogI2VuZGlmCiAJcHJp
bnRmKCJwb3J0YWdlLXV0aWxzLSVzOiBjb21waWxlZCBvbiAlc1xuJXNcbiIKLQkgICAgICAgIiVz
IHdyaXR0ZW4gZm9yIEdlbnRvbyBieSA8c29sYXIgYW5kIHZhcGllciBAIGdlbnRvby5vcmc+XG4i
LAorCSAgICAgICAiJXMgd3JpdHRlbiBmb3IgR2VudG9vIGJ5IDxzb2xhciBhbmQgdmFwaWVyIEAg
Z2VudG9vLm9yZz5cbiIKKwkgICAgICAgIm1vZGlmaWVkIGZvciBvdmVybGF5IGFuZCBwYWx1ZGlz
IGNvbXBhdGliaWxpdHkgYnkgc2FtdWVsZXRoaWVjIEAgaG90bWFpbC5jb21cbiIsCiAJICAgICAg
IFZFUlNJT04sIF9fREFURV9fLCBJZCwgYXJndjApOwogCWV4aXQoRVhJVF9TVUNDRVNTKTsKIH0K
QEAgLTQ3OSw3NCArNDgwLDE5NiBAQCBjaGFyICpzdHJpbmNyX3Zhcihjb25zdCBjaGFyICpuYW1l
LCBjaGFyCiAJcmV0dXJuIChjaGFyICopIHZhbHVlOwogfQogCi12b2lkIGluaXRpYWxpemVfb3Zl
cmxheXMgKGNoYXIgcG9ydGRpcl9vdmVybGF5W10pCit2b2lkIGluaXRpYWxpemVfb3ZlcmxheXMo
dm9pZCkKIHsKLQlzaG9ydCBtZXJyb3IgPSAwOwotCWNoYXIgYnVmW0JVRlNJWkVdLCBmaWxlW19R
X1BBVEhfTUFYXSwgKnMsICpwLCAqdDsKLQlvdmVybGF5X3QgKmN1cl9vdmVybGF5OwotCUZJTEUg
KnJlcG9fbmFtZUZQOwotCXMgPSBwb3J0ZGlyX292ZXJsYXk7CisgCXNob3J0IG1lcnJvciA9IDAs
IGZpcnN0ID0gMTsKKwlpbnQgaSxqOworIAljaGFyICpzLCAqcCwgKnQ7CisgCWNoYXIgYnVmW0JV
RlNJWkVdLCBjb25mZmlsZVtfUV9QQVRIX01BWF0sIGNvbmZkaXJbX1FfUEFUSF9NQVhdLCBwYXRo
W19RX1BBVEhfTUFYXTsKKwljaGFyIGxvY2F0aW9uW19RX1BBVEhfTUFYXSwgd3JpdGVfY2FjaGVb
X1FfUEFUSF9NQVhdLCBjYWNoZVtfUV9QQVRIX01BWF0sIGZvcm1hdFszMl07CisgCUZJTEUgKkNP
TkZGSUxFLCAqUkVQT19OQU1FOworIAlESVIgKkNPTkZESVI7CisgCXN0cnVjdCBkaXJlbnQgKmY7
CisJc3RydWN0IHN0YXQgc3RhdGNhY2hlOworIAlvdmVybGF5X3QgKmN1cl9vdmVybGF5OworCisJ
c3RydWN0IHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJY29uc3Qgc2l6ZV90IG5hbWVfbGVuOwor
CQljaGFyICp2YWx1ZTsKKwkJY29uc3Qgc2l6ZV90IHZhbHVlX2xlbjsKKwl9IHZhcnNfdG9fcmVh
ZFtdID0geworCQkvKiBvcmRlciBpcyBpbXBvcnRhbnQgKi8KKwkJeyJST09UIiwJNCwJcG9ydHJv
b3QsCXNpemVvZihwb3J0cm9vdCl9LAorCQl7ImxvY2F0aW9uIiwJOCwJbG9jYXRpb24sCXNpemVv
Zihsb2NhdGlvbil9LAorCQl7IndyaXRlX2NhY2hlIiwJMTEsCXdyaXRlX2NhY2hlLAlzaXplb2Yo
d3JpdGVfY2FjaGUpfSwKKwkJeyJjYWNoZSIsCTUsCWNhY2hlLAkJc2l6ZW9mKGNhY2hlKX0sCisJ
CXsiZm9ybWF0IiwJNiwJZm9ybWF0LAkJc2l6ZW9mKGZvcm1hdCl9CisJfTsKIAogCWZpcnN0X292
ZXJsYXkgPSB4bWFsbG9jKHNpemVvZigqZmlyc3Rfb3ZlcmxheSkpOwotCWN1cl9vdmVybGF5ID0g
Zmlyc3Rfb3ZlcmxheTsKKyAgCWN1cl9vdmVybGF5ID0gZmlyc3Rfb3ZlcmxheTsKIAotCXdoaWxl
ICgqcykgewotCQkvKiBleGNlcHQgb24gdGhlIGZpcnN0IGxvb3AgKi8KLQkJaWYgKHMhPXBvcnRk
aXJfb3ZlcmxheSkgewotCQkJY3VyX292ZXJsYXktPm5leHQgPSB4bWFsbG9jIChzaXplb2YgKCpj
dXJfb3ZlcmxheS0+bmV4dCkpOwotCQkJY3VyX292ZXJsYXkgPSBjdXJfb3ZlcmxheS0+bmV4dDsK
KyAJc25wcmludGYoY29uZmRpciwgc2l6ZW9mKGNvbmZkaXIpLCAiJXMvZXRjL3BhbHVkaXMvcmVw
b3NpdG9yaWVzIiwgcG9ydHJvb3QpOworCisgCWlmIChOVUxMID09IChDT05GRElSID0gb3BlbmRp
cihjb25mZGlyKSkpCisgCQllcnIoIiVzIDogY291bGQgbm90IG9wZW4gZGlyZWN0b3J5IiwgY29u
ZmRpcik7CisKKyAJd2hpbGUgKChmID0gIHJlYWRkaXIoQ09ORkRJUikpKSB7CisJCWxvY2F0aW9u
WzBdID0gMDsKKwkJY2FjaGVbMF0gPSAwOworCQl3cml0ZV9jYWNoZVswXSA9IDA7CisJCWZvcm1h
dFswXSA9IDA7CisKKyAJCWlmIChmLT5kX25hbWVbMF0gPT0gJy4nKQorIAkJCWNvbnRpbnVlOwor
CisgCQlzbnByaW50Zihjb25mZmlsZSwgc2l6ZW9mKGNvbmZmaWxlKSwgIiVzLyVzIiwgY29uZmRp
ciwgZi0+ZF9uYW1lKTsKKworIAkJaWYgKE5VTEwgPT0gKENPTkZGSUxFID0gZm9wZW4oY29uZmZp
bGUsICJyIikpKQorIAkJCWNvbnRpbnVlOworIAkJbWVycm9yID0gMDsKKworIAkJd2hpbGUgKGZn
ZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIENPTkZGSUxFICkpIHsKKyAJCQlybXNwYWNlKGJ1Zik7Cisg
CQkJaWYgKCpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1wwJykKKyAJCQkJY29udGludWU7CisJCQlm
b3IgKGk9MTsgaTxBUlJfU0laRSh2YXJzX3RvX3JlYWQpOyArK2kpIHsKKwkJCQlpZiAoYnVmW3Zh
cnNfdG9fcmVhZFtpXS5uYW1lX2xlbl0gIT0gJz0nICYmIGJ1Zlt2YXJzX3RvX3JlYWRbaV0ubmFt
ZV9sZW5dICE9ICcgJykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHN0cm5jbXAoYnVmLCB2YXJz
X3RvX3JlYWRbaV0ubmFtZSwgdmFyc190b19yZWFkW2ldLm5hbWVfbGVuKSkKKwkJCQkJY29udGlu
dWU7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGFuZGxlIHNwYWNlcyBiZXR3ZWVuIHRoZSB2YXJu
YW1lLCB0aGUgPSwgYW5kIHRoZSB2YWx1ZToKKwkJCQkgKiBWQVI9dmFsICAgVkFSID0gdmFsICAg
VkFSPSJ2YWwiCisJCQkJICovCisJCQkJcyA9IGJ1ZiArIHZhcnNfdG9fcmVhZFtpXS5uYW1lX2xl
bjsKKwkJCQlpZiAoKHAgPSBzdHJjaHIocywgJz0nKSkgIT0gTlVMTCkKKwkJCQkJcyA9IHAgKyAx
OworCQkJCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJCQkJKytzOworCQkJCWlmICgqcyA9PSAnIicg
fHwgKnMgPT0gJ1wnJykgeworCQkJCQkrK3M7CisJCQkJCXNbc3RybGVuKHMpLTFdID0gJ1wwJzsK
KwkJCQl9CisKKwkJCQlzdHJuY3B5KHZhcnNfdG9fcmVhZFtpXS52YWx1ZSwgcywgdmFyc190b19y
ZWFkW2ldLnZhbHVlX2xlbik7CisJCQl9CisgCQl9CisgCQlmY2xvc2UoQ09ORkZJTEUpOworCisg
CQlpZiAoIWZvcm1hdFswXSkKKyAJCQljb250aW51ZTsKKworCQkvKiBkZWxldGUgdHJhaWxpbmcg
Jy8nICovCisJCWZvciAoaT0wOyBpPEFSUl9TSVpFKHZhcnNfdG9fcmVhZCk7ICsraSkgeworCQkJ
aWYgKChwID0gc3RycmNocih2YXJzX3RvX3JlYWRbaV0udmFsdWUsICcvJykpICYmIChwKzEpICYm
ICoocCsxKT09MCkKKwkJCQkqcCA9IDA7CiAJCX0KLQkJY3VyX292ZXJsYXktPm5leHQgPSBOVUxM
OwogCi0JCWlmICgocD1zdHJjaHIocywnICcpKSkKLQkJCSpwID0gMDsKKwkJaWYgKHN0cm5jbXAo
Zm9ybWF0LCAiZWJ1aWxkIiwgc2l6ZW9mKGZvcm1hdCkpICYmIHN0cm5jbXAoZm9ybWF0LCAidmRi
Iiwgc2l6ZW9mKGZvcm1hdCkpKQorCQkJY29udGludWU7CiAKLQkJc25wcmludGYoY3VyX292ZXJs
YXktPnBhdGgsIHNpemVvZihjdXJfb3ZlcmxheS0+cGF0aCksICIlcyVzIiwgKHN0cmNtcChwb3J0
cm9vdCwgIi8iKSA/IHBvcnRyb290IDogIiIpLCBzKTsKKwkJLyogaWYgdGhlIHBhdGggYmVnaW5z
IHdpdGggYSB2YXJpYWJsZSBzdWNoIGFzICR7Uk9PVH0sICRST09ULCBvciAkbG9jYXRpb24gYW5k
IHNvIG9uCisJCSAqIHdlIHRyeSB0byByZXBsYWNlIGl0IHdpdGggaXRzIHZhbHVlICovCisJCWZv
ciAoaT0xOyBpPEFSUl9TSVpFKHZhcnNfdG9fcmVhZCk7ICsraSkgeworCQkJcGF0aFswXSA9IDA7
CisJCQlpZiAodmFyc190b19yZWFkW2ldLnZhbHVlWzBdID09ICckJykgeworCQkJCXAgPSBzdHJj
aHIodmFyc190b19yZWFkW2ldLnZhbHVlLCAnLycpOworCQkJCSpwID0gMDsKKworCQkJCWlmICh2
YXJzX3RvX3JlYWRbaV0udmFsdWVbMV09PSd7JyAmJiAqKHAtMSk9PSd9JykgeworCQkJCQkqKHAt
MSkgPSAwOworCQkJCQlzID0gJnZhcnNfdG9fcmVhZFtpXS52YWx1ZVsyXTsKKwkJCQl9IGVsc2UK
KwkJCQkJcyA9ICZ2YXJzX3RvX3JlYWRbaV0udmFsdWVbMV07CisKKwkJCQlmb3IgKGo9MDsgajxB
UlJfU0laRSh2YXJzX3RvX3JlYWQpOyArK2opCisJCQkJCWlmICghc3RyY21wKHMsIHZhcnNfdG9f
cmVhZFtqXS5uYW1lKSkgeworCQkJCQkJc3RyY3B5KHBhdGgsIHZhcnNfdG9fcmVhZFtqXS52YWx1
ZSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQogCi0JCS8qIGZpbmQgdGhlIG5hbWUgZm9yIHRoZSBv
dmVybGF5ICovCi0JCXNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwgIiVzL3Byb2ZpbGVzL3Jl
cG9fbmFtZSIsIGN1cl9vdmVybGF5LT5wYXRoKTsKKwkJCQkvKiBwdXQgdGhlIHNsYXNoIGJhY2sg
Ki8KKwkJCQkqcCA9ICcvJzsKKwkJCQlzdHJuY2F0KHBhdGgsIHAsIHNpemVvZihwYXRoKSk7CisJ
CQkJc3RyY3B5KHZhcnNfdG9fcmVhZFtpXS52YWx1ZSwgcGF0aCk7CisJCQl9CisJCX0KIAotCQlp
ZiAoKHJlcG9fbmFtZUZQID0gZm9wZW4oZmlsZSwgInIiKSkpIHsKLQkJCWlmICghKGZnZXRzKGJ1
Ziwgc2l6ZW9mKGJ1ZikscmVwb19uYW1lRlApKSkKLQkJCQltZXJyb3IrKzsKLQkJCXJtc3BhY2Uo
YnVmKTsKLQkJCWlmICgodCA9IHN0cmNocihidWYsJ1xuJykpKQotCQkJCSp0ID0gMDsKLQkJCXN0
cm5jcHkoY3VyX292ZXJsYXktPm5hbWUsIGJ1Ziwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7
CisJCS8qIHZkYiBsb2NhdGlvbiBkZWZpbmVkIGluIGV0Yy9wYWx1ZGlzL3JlcG9zaXRvcmllcy9p
bnN0YWxsZWQuY29uZiAqLworCQlpZiAoIXN0cmNtcCgiaW5zdGFsbGVkLmNvbmYiLCBmLT5kX25h
bWUpICYmICFzdHJjbXAoInZkYiIsIGZvcm1hdCkpIHsKKwkJCXN0cm5jcHkocG9ydHZkYiwgbG9j
YXRpb24sIHNpemVvZihwb3J0dmRiKSk7CisJCQljb250aW51ZTsKKwkJfQogCi0JCQlmY2xvc2Uo
cmVwb19uYW1lRlApOwotCQl9IGVsc2UKLQkJCW1lcnJvcisrOwotCi0JCWlmIChtZXJyb3IpIHsK
LQkJCS8qIGRlbGV0ZSB0cmFpbGluZyAnLycgKi8KLQkJCXQgPSBjdXJfb3ZlcmxheS0+cGF0aCAr
IHN0cmxlbihjdXJfb3ZlcmxheS0+cGF0aCkgLSAxOwotCQkJaWYgKCp0ID09ICcvJykKLQkJCQkq
dCA9IDA7Ci0JCQlzdHJuY3B5KGZpbGUsIGN1cl9vdmVybGF5LT5wYXRoLCBzaXplb2YoZmlsZSkp
OwotCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYmFzZW5hbWUoZmlsZSksIHNpemVvZihj
dXJfb3ZlcmxheS0+bmFtZSkpOwotCQkJbWVycm9yPTA7CisgCQlpZiAoIWZpcnN0KSB7CisJCQlj
dXJfb3ZlcmxheS0+bmV4dCA9IHhtYWxsb2Moc2l6ZW9mKCooY3VyX292ZXJsYXktPm5leHQpKSk7
CisJCQljdXJfb3ZlcmxheSA9IGN1cl9vdmVybGF5LT5uZXh0OwogCQl9CisgCQljdXJfb3Zlcmxh
eS0+bmV4dCA9IE5VTEw7CisJCWN1cl9vdmVybGF5LT5jYWNoZVswXSA9IDA7CiAKLQkJaWYgKCFz
dHJuY21wKGN1cl9vdmVybGF5LT5uYW1lLCAiZ2VudG9vIiwgc2l6ZW9mKGN1cl9vdmVybGF5LT5u
YW1lKSkpIHsKLQkJCXNucHJpbnRmKGN1cl9vdmVybGF5LT5jYWNoZSwgc2l6ZW9mKGN1cl9vdmVy
bGF5LT5jYWNoZSksICIlcy8lcyIsIGN1cl9vdmVybGF5LT5wYXRoLCBwb3J0Y2FjaGVkaXIpOwor
CQkvKiB0aW1lIHRvIHNlYXJjaCBmb3IgdGhlIG92ZXJsYXktPm5hbWUgKi8KKyAJCXNucHJpbnRm
KGNvbmZmaWxlLCBzaXplb2YoY29uZmZpbGUpLCAiJXMvcHJvZmlsZXMvcmVwb19uYW1lIiwgbG9j
YXRpb24pOworIAkJaWYgKE5VTEwgIT0gKFJFUE9fTkFNRSA9IGZvcGVuKGNvbmZmaWxlLCAiciIp
KSkgeworIAkJCWlmICghKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksUkVQT19OQU1FKSkpCisgCQkJ
CW1lcnJvcisrOworIAkJCXJtc3BhY2UoYnVmKTsKKyAJCQlpZiAoKHQgPSBzdHJjaHIoYnVmLCdc
bicpKSkKKyAgCQkJCSp0ID0gMDsKKworCQkJc3RybmNweShjdXJfb3ZlcmxheS0+bmFtZSwgYnVm
LCBzaXplb2YoY3VyX292ZXJsYXktPm5hbWUpKTsKKyAJCQlmY2xvc2UoUkVQT19OQU1FKTsKKyAJ
CX0gZWxzZSB7CisgCQkJc3RyY3B5KGN1cl9vdmVybGF5LT5uYW1lLCAieC0iKTsKKwkJCS8qIHRo
ZXJlIGlzIG5vIHRyYWlsaW5nICcvJyAqLworCQkJaWYgKChwPXN0cnJjaHIobG9jYXRpb24sJy8n
KSkpCisJCQkJcCA9IHArMTsKKwkJCWVsc2UKKwkJCQlwID0gbG9jYXRpb247CisgCQkJc3RybmNh
dChjdXJfb3ZlcmxheS0+bmFtZSwgcCwgc2l6ZW9mKGN1cl9vdmVybGF5LT5uYW1lKSk7CisgCQl9
CisKKwkJaWYgKCFzdHJjbXAoY3VyX292ZXJsYXktPm5hbWUsICJnZW50b28iKSkKIAkJCW92ZXJs
YXlfZ2VudG9vID0gY3VyX292ZXJsYXk7Ci0JCX0gZWxzZQorCisJCXN0cm5jcHkoY3VyX292ZXJs
YXktPnBhdGgsIGxvY2F0aW9uLCBzaXplb2YoY3VyX292ZXJsYXktPnBhdGgpKTsKKworCQlpZiAo
IWNhY2hlWzBdKQorCQkJc25wcmludGYoY2FjaGUsIHNpemVvZihjYWNoZSksICIlcy8lcyIsIGxv
Y2F0aW9uLCByZXBvY2FjaGVkaXIpOworCisJCS8qIG5vdyB3ZSBmaWxsIGN1cl9vdmVybGF5LT5j
YWNoZSAqLworCQlpZiAoIXN0cnN0cihjYWNoZSwgIi92YXIvZW1wdHkiKSkgeworCQkJaWYgKHN0
YXQoY2FjaGUsICZzdGF0Y2FjaGUpICE9IC0xICYmIFNfSVNESVIoc3RhdGNhY2hlLnN0X21vZGUp
KQorCQkJCXN0cmNweShjdXJfb3ZlcmxheS0+Y2FjaGUsIGNhY2hlKTsKKwkJCWVsc2UgeworCQkJ
CWlmICgqd3JpdGVfY2FjaGUpIHsKKwkJCQkJc25wcmludGYoY2FjaGUsIHNpemVvZihjYWNoZSks
ICIlcy8lcyIsIHdyaXRlX2NhY2hlLCBjdXJfb3ZlcmxheS0+bmFtZSk7CisJCQkJCWlmIChzdGF0
KGNhY2hlLCAmc3RhdGNhY2hlKSAhPSAtMSAmJiBTX0lTRElSKHN0YXRjYWNoZS5zdF9tb2RlKSkK
KwkJCQkJCXN0cm5jcHkoY3VyX292ZXJsYXktPmNhY2hlLCBjYWNoZSwgc2l6ZW9mKGN1cl9vdmVy
bGF5LT5jYWNoZSkpOworCQkJCQllbHNlCisJCQkJCQlzdHJuY3B5KGN1cl9vdmVybGF5LT5jYWNo
ZSwgIi92YXIvZW1wdHkiLCBzaXplb2YoY3VyX292ZXJsYXktPmNhY2hlKSk7CisJCQkJfSBlbHNl
CisJCQkJCXN0cm5jcHkoY3VyX292ZXJsYXktPmNhY2hlLCAiL3Zhci9lbXB0eSIsIHNpemVvZihj
dXJfb3ZlcmxheS0+Y2FjaGUpKTsKKwkJCX0KKyAJCX0gZWxzZQogCQkJc3RyY3B5KGN1cl9vdmVy
bGF5LT5jYWNoZSwgIi92YXIvZW1wdHkiKTsKIAotCQlpZiAocCkKLQkJCXMgPSBwKzE7IC8qIGJl
Y2F1c2UgcG9ydGRpcl9vdmVybGF5IGhhcyBubyB0cmFpbGluZyBzcGFjZSAqLwotCQllbHNlCi0J
CQlicmVhazsKKwkJLyogb25jZSB3ZSBnZXQgdGhlcmUgd2UgaGF2ZSBhdCBsZWFzdCBkb25lIHdp
dGggdGhlIGZpcnN0IG92ZXJsYXkgKi8KKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSAwOwogCX0K
LQorIAljbG9zZWRpcihDT05GRElSKTsKIH0KIAotCiB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9l
bnYodm9pZCkKIHsKIAljaGFyIG5vY29sb3IgPSAwOwotCWludCBpLCBmOworCWludCBpOworCWNo
YXIgKnM7CisJY2hhciB0bXBbX1FfUEFUSF9NQVhdOworLyoKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlG
SUxFICpmcDsKIAljaGFyIHRtcF9wb3J0ZGlyW19RX1BBVEhfTUFYXTsKQEAgLTU1Niw2ICs2Nzks
NyBAQCB2b2lkIGluaXRpYWxpemVfcG9ydGFnZV9lbnYodm9pZCkKIAljaGFyIHBvcnRkaXJfb3Zl
cmxheVtCVUZTSVpFXSA9ICIiOwogCiAJY29uc3QgY2hhciAqZmlsZXNbXSA9IHtwb3J0YWdlX2Zp
bGUsICIvZXRjL21ha2UuZ2xvYmFscyIsICIvZXRjL21ha2UuY29uZiJ9OworKi8KIAl0eXBlZGVm
IGVudW0geyBfUV9CT09MLCBfUV9TVFIsIF9RX0lTVFIgfSB2YXJfdHlwZXM7CiAKIAlzdHJ1Y3Qg
ewpAQCAtNTY1LDcgKzY4OSw3IEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0YWdlX2Vudih2b2lkKQog
CQljaGFyICp2YWx1ZTsKIAkJY29uc3Qgc2l6ZV90IHZhbHVlX2xlbjsKIAl9IHZhcnNfdG9fcmVh
ZFtdID0gewotCQl7IkFDQ0VQVF9MSUNFTlNFIiwgICAxNCwgX1FfU1RSLCAgYWNjZXB0X2xpY2Vu
c2UsIHNpemVvZihhY2NlcHRfbGljZW5zZSl9LAorLyoJCXsiQUNDRVBUX0xJQ0VOU0UiLCAgIDE0
LCBfUV9TVFIsICBhY2NlcHRfbGljZW5zZSwgc2l6ZW9mKGFjY2VwdF9saWNlbnNlKX0sCiAJCXsi
SU5TVEFMTF9NQVNLIiwgICAgIDEyLCBfUV9JU1RSLCBpbnN0YWxsX21hc2ssICAgc2l6ZW9mKGlu
c3RhbGxfbWFzayl9LAogCQl7IkFSQ0giLCAgICAgICAgICAgICAgNCwgX1FfU1RSLCAgcG9ydGFy
Y2gsICAgICAgIHNpemVvZihwb3J0YXJjaCl9LAogCQl7IkNPTkZJR19QUk9URUNUIiwgICAxNCwg
X1FfU1RSLCAgY29uZmlnX3Byb3RlY3QsIHNpemVvZihjb25maWdfcHJvdGVjdCl9LApAQCAtNTc2
LDEzICs3MDAsMTEgQEAgdm9pZCBpbml0aWFsaXplX3BvcnRhZ2VfZW52KHZvaWQpCiAJCXsiUE9S
VEFHRV9CSU5IT1NUIiwgIDE1LCBfUV9TVFIsICBiaW5ob3N0LCAgICAgICAgc2l6ZW9mKGJpbmhv
c3QpfSwKIAkJeyJQT1JUQUdFX1RNUERJUiIsICAgMTQsIF9RX1NUUiwgIHBvcnRfdG1wZGlyLCAg
ICBzaXplb2YocG9ydF90bXBkaXIpfSwKIAkJeyJQS0dESVIiLCAgICAgICAgICAgIDYsIF9RX1NU
UiwgIHBrZ2RpciwgICAgICAgICBzaXplb2YocGtnZGlyKX0sCisqLwogCQl7IlJPT1QiLCAgICAg
ICAgICAgICAgNCwgX1FfU1RSLCAgcG9ydHJvb3QsICAgICAgIHNpemVvZihwb3J0cm9vdCl9CiAJ
fTsKIAotCWlmICgocCA9IHN0cmNocihwb3J0cm9vdCwgJy8nKSkgIT0gTlVMTCkKLQkJaWYgKHN0
cmxlbihwKSAhPSAxKQotCQkJc3RybmNhdChwb3J0cm9vdCwgIi8iLCBzaXplb2YocG9ydHJvb3Qp
KTsKLQorI2lmIDAKIAlmID0gMDsKIAlpZiAocmVhZGxpbmsoIi9ldGMvbWFrZS5wcm9maWxlIiwg
cHJvZmlsZSwgc2l6ZW9mKHByb2ZpbGUpKSA9PSAtMSkKIAkJc3RyY3B5KHByb2ZpbGUsICIvZXRj
L21ha2UucHJvZmlsZSIpOwpAQCAtNjQzLDYgKzc2NSw3IEBAIHZvaWQgaW5pdGlhbGl6ZV9wb3J0
YWdlX2Vudih2b2lkKQogCQkJZiA9IDE7CiAJCX0KIAl9IHdoaWxlICgxKTsKKyNlbmRpZgogCiAJ
LyogZmluYWxseSwgY2hlY2sgdGhlIGVudiAqLwogCWZvciAoaT0wOyBpPEFSUl9TSVpFKHZhcnNf
dG9fcmVhZCk7ICsraSkgewpAQCAtNjcxLDEyICs3OTQsMTIgQEAgdm9pZCBpbml0aWFsaXplX3Bv
cnRhZ2VfZW52KHZvaWQpCiAJZWxzZQogCQljb2xvcl9yZW1hcCgpOwogCi0Jc25wcmludGYodG1w
X3BvcnRkaXIsIHNpemVvZih0bXBfcG9ydGRpciksICIlcy8lcyIsIChzdHJjbXAocG9ydHJvb3Qs
ICIvIikgPyBwb3J0cm9vdCA6ICIiKSwgcG9ydHZkYik7Ci0Jc3RybmNweShwb3J0dmRiLCB0bXBf
cG9ydGRpciwgc2l6ZW9mKHBvcnR2ZGIpKTsKLQlzdHJpbmNyX3ZhcigiUE9SVERJUl9PVkVSTEFZ
IiwgdG1wX3BvcnRkaXIsIHBvcnRkaXJfb3ZlcmxheSwgc2l6ZW9mKHBvcnRkaXJfb3ZlcmxheSkp
OwotCisJc25wcmludGYodG1wLHNpemVvZih0bXApLCIlcy8lcyIsIHBvcnRyb290LCBjYWNoZV9m
aWxlX2Rpcik7CisJc3RyY3B5KGNhY2hlX2ZpbGVfZGlyLCB0bXApOworCXNucHJpbnRmKHRtcCxz
aXplb2YodG1wKSwiJXMvJXMiLCBwb3J0cm9vdCwgbWV0YWNhY2hlX2ZpbGVfZGlyKTsKKwlzdHJj
cHkobWV0YWNhY2hlX2ZpbGVfZGlyLCB0bXApOwogCS8qIG5vdyB3ZSBpbml0aWxpYXNlIHRoZSBv
dmVybGF5IGNoYWluZWQgbGlzdCAqLwotCWluaXRpYWxpemVfb3ZlcmxheXMocG9ydGRpcl9vdmVy
bGF5KTsKKwlpbml0aWFsaXplX292ZXJsYXlzKCk7CiAKIH0KIApAQCAtNjk0LDkgKzgxNyw5IEBA
IGludCBmaWx0ZXJfaGlkZGVuKGNvbnN0IHN0cnVjdCBkaXJlbnQgKmQKIH0KIAogI2RlZmluZSBD
QUNIRV9FQlVJTERfRklMRSAoZ2V0ZW52KCJDQUNIRV9FQlVJTERfRklMRSIpID8gZ2V0ZW52KCJD
QUNIRV9FQlVJTERfRklMRSIpIDogIi5lYnVpbGQueCIpCi0jZGVmaW5lIENBQ0hFX01FVEFEQVRB
X0ZJTEUgIi5tZXRhZGF0YS54IgotY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNo
ZV90eXBlKTsKLWNvbnN0IGNoYXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHlwZSkKKyNk
ZWZpbmUgQ0FDSEVfTUVUQURBVEFfRklMRSAoZ2V0ZW52KCJDQUNIRV9NRVRBREFUQV9GSUxFIikg
PyBnZXRlbnYoIkNBQ0hFX01FVEFEQVRBX0ZJTEUiKSA6ICIubWV0YWRhdGEueCIpCitjb25zdCBj
aGFyICppbml0aWFsaXplX2ZsYXQoaW50IGNhY2hlX3R5cGUsIHNob3J0IGZvcmNlKTsKK2NvbnN0
IGNoYXIgKmluaXRpYWxpemVfZmxhdChpbnQgY2FjaGVfdHlwZSwgc2hvcnQgZm9yY2UpCiB7CiAJ
c3RydWN0IGRpcmVudCAqKmNhdGVnb3J5LCAqKnBuLCAqKmViOwogCXN0cnVjdCBzdGF0IHN0OwpA
QCAtNzE0LDM5ICs4MzcsMzcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0KGludCBjYWNo
ZV90eQogCiAJY2FjaGVfZmlsZSA9IChjYWNoZV90eXBlID09IENBQ0hFX0VCVUlMRCA/IENBQ0hF
X0VCVUlMRF9GSUxFIDogQ0FDSEVfTUVUQURBVEFfRklMRSk7CiAKLQkvKiBTQU0gcmV2aWV3IHdp
dGhvdXQgZ2VudG9vISAqLwotCWlmIChjYWNoZV90eXBlID09IENBQ0hFX01FVEFEQVRBKSB7Ci0J
CWlmIChjaGRpcihvdmVybGF5X2dlbnRvby0+Y2FjaGUpICE9IDApIHsKLQkJCXdhcm5wKCJjaGRp
ciB0byBwb3J0YWdlIGNhY2hlICclcycgZmFpbGVkIiwgb3ZlcmxheV9nZW50b28tPmNhY2hlKTsK
LQkJCWdvdG8gcmV0OwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGNoZGlyKG92ZXJsYXlfZ2VudG9v
LT5wYXRoKSAhPSAwKSB7Ci0JCQl3YXJucCgiY2hkaXIgdG8gUE9SVERJUiAnJXMnIGZhaWxlZCIs
IG92ZXJsYXlfZ2VudG9vLT5wYXRoKTsKLQkJCWdvdG8gcmV0OwotCQl9CisgCWlmIChjYWNoZV90
eXBlID09IENBQ0hFX01FVEFEQVRBKSB7CisgCQlpZiAoY2hkaXIobWV0YWNhY2hlX2ZpbGVfZGly
KSAhPSAwKSB7CisgCQkJd2FybnAoImNoZGlyIHRvIGNhY2hlICclcycgZmFpbGVkIiwgbWV0YWNh
Y2hlX2ZpbGVfZGlyKTsKKyAJCQlnb3RvIHJldDsKKyAJCX0KKyAJfSBlbHNlIHsKKyAJCWlmIChj
aGRpcihjYWNoZV9maWxlX2RpcikgIT0gMCkgeworIAkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZh
aWxlZCIsIGNhY2hlX2ZpbGVfZGlyKTsKKyAJCQlnb3RvIHJldDsKKyAJCX0KIAl9CiAKLQlpZiAo
KHN0YXQoY2FjaGVfZmlsZSwgJnN0KSkgIT0gKC0xKSkKLQkJaWYgKHN0LnN0X3NpemUgPT0gMCkK
KwlpZiAoKHN0YXQoY2FjaGVfZmlsZSwgJnN0KSkgIT0gKC0xKSkgeworCQlpZiAoZm9yY2UgfHwg
c3Quc3Rfc2l6ZSA9PSAwKQogCQkJdW5saW5rKGNhY2hlX2ZpbGUpOworCQllbHNlCisJCQlnb3Rv
IHJldDsKKwl9CiAKLQkvKiBhc3N1bWluZyAtLXN5bmMgaXMgdXNlZCB3aXRoIC0tZGVsZXRlIHRo
aXMgd2lsbCBnZXQgcmVjcmVhdGVkIGFmdGVyIGV2ZXJ5IG1lcmdlICovCi0JaWYgKGFjY2Vzcyhj
YWNoZV9maWxlLCBSX09LKSA9PSAwKQotCQlnb3RvIHJldDsKIAlpZiAoIXF1aWV0KQogCQl3YXJu
KCJVcGRhdGluZyBlYnVpbGQgJXNjYWNoZSAuLi4gIiwgY2FjaGVfdHlwZSA9PSBDQUNIRV9FQlVJ
TEQgPyAiIiA6ICJtZXRhIik7CiAKIAl1bmxpbmsoY2FjaGVfZmlsZSk7CiAJaWYgKGVycm5vICE9
IEVOT0VOVCkgewotCQkvKiBTQU0gcmV2aWV3IHdpdGhvdXQgZ2VudG9vISAqLwotCQl3YXJuZnAo
InVubGlua2luZyAnJXMvJXMnIGZhaWxlZCIsIG92ZXJsYXlfZ2VudG9vLT5wYXRoLCBjYWNoZV9m
aWxlKTsKKwkJd2FybmZwKCJ1bmxpbmtpbmcgJyVzLyVzJyBmYWlsZWQiLCAoY2FjaGVfdHlwZSA9
PSBDQUNIRV9FQlVJTEQgPyBjYWNoZV9maWxlX2RpciA6IG1ldGFjYWNoZV9maWxlX2RpciksIGNh
Y2hlX2ZpbGUpOworCQl3YXJuKCJkZWZpbmUgQ0FDSEVfTUVUQURBVEFfRklMRSBhbmQvb3IgQ0FD
SEVfRUJVSUxEX0ZJTEUgdG8gdXNlIGRpZmZlcmVudCBjYWNoZSBmaWxlIik7CiAJCWdvdG8gcmV0
OwogCX0KIAotCS8qIFNBTSByZXZpZXcgd2l0aG91dCBnZW50b28hICovCiAJaWYgKChmcCA9IGZv
cGVuKGNhY2hlX2ZpbGUsICJ3IikpID09IE5VTEwpIHsKLQkJd2FybmZwKCJvcGVuaW5nICclcy8l
cycgZmFpbGVkIiwgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfRUJVSUxEID8gb3ZlcmxheV9nZW50b28t
PnBhdGggOiBvdmVybGF5X2dlbnRvby0+Y2FjaGUpLCBjYWNoZV9maWxlKTsKKwkJd2FybmZwKCJv
cGVuaW5nICclcy8lcycgZmFpbGVkIiwgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfRUJVSUxEID8gY2Fj
aGVfZmlsZV9kaXIgOiBtZXRhY2FjaGVfZmlsZV9kaXIpLCBjYWNoZV9maWxlKTsKIAkJZ290byBy
ZXQ7CiAJfQogCkBAIC03OTksNiArOTIwLDcgQEAgY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9mbGF0
KGludCBjYWNoZV90eQogCQkJCQlicmVhazsKIAkJCQljYXNlIENBQ0hFX01FVEFEQVRBOgogCQkJ
CQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCQkJCWNvdW50Kys7CiAJCQkJCQlmcHJpbnRm
KGZwLCAiJXM6OiVzXG4iLCBkZSwgY3VyX292ZXJsYXktPm5hbWUpOwogCQkJCQljb250aW51ZTsK
IAkJCQkJYnJlYWs7CkBAIC04NDIsMjUgKzk2NCwyNSBAQCBjb25zdCBjaGFyICppbml0aWFsaXpl
X2ZsYXQoaW50IGNhY2hlX3R5CiByZXQ6CiAJcmV0dXJuIGNhY2hlX2ZpbGU7CiB9Ci0jZGVmaW5l
IGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQoKSBpbml0aWFsaXplX2ZsYXQoQ0FDSEVfRUJVSUxEKQot
I2RlZmluZSBpbml0aWFsaXplX21ldGFkYXRhX2ZsYXQoKSBpbml0aWFsaXplX2ZsYXQoQ0FDSEVf
TUVUQURBVEEpCisjZGVmaW5lIGluaXRpYWxpemVfZWJ1aWxkX2ZsYXQoZm9yY2UpIGluaXRpYWxp
emVfZmxhdChDQUNIRV9FQlVJTEQsIGZvcmNlKQorI2RlZmluZSBpbml0aWFsaXplX21ldGFkYXRh
X2ZsYXQoZm9yY2UpIGluaXRpYWxpemVfZmxhdChDQUNIRV9NRVRBREFUQSwgZm9yY2UpCiAKLXZv
aWQgcmVpbml0aWFsaXplX2VidWlsZF9mbGF0KHZvaWQpCit2b2lkIHJlaW5pdGlhbGl6ZV9lYnVp
bGRfZmxhdChzaG9ydCBmb3JjZSkKIHsKIAlpZiAoKGNoZGlyKGZpcnN0X292ZXJsYXktPnBhdGgp
KSAhPSAwKSB7CiAJCXdhcm5wKCJjaGRpciB0byBQT1JURElSICclcycgZmFpbGVkIiwgZmlyc3Rf
b3ZlcmxheS0+cGF0aCk7CiAJCXJldHVybjsKIAl9CiAJdW5saW5rKENBQ0hFX0VCVUlMRF9GSUxF
KTsKLQlpbml0aWFsaXplX2VidWlsZF9mbGF0KCk7CisJaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdChm
b3JjZSk7CiB9CiAKIHZvaWQgcmVpbml0aWFsaXplX2FzX25lZWRlZCh2b2lkKQogewogCWlmIChy
ZWluaXRpYWxpemUpCi0JCXJlaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCgpOworCQlyZWluaXRpYWxp
emVfZWJ1aWxkX2ZsYXQoMSk7CiAJaWYgKHJlaW5pdGlhbGl6ZV9tZXRhY2FjaGUpCi0JCWluaXRp
YWxpemVfbWV0YWRhdGFfZmxhdCgpOworCQlpbml0aWFsaXplX21ldGFkYXRhX2ZsYXQoMSk7CiB9
CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTEwMzksNyArMTE2MSw3IEBAIGNoYXIgKmdyYWJfdmRi
X2l0ZW0oY29uc3QgY2hhciAqaXRlbSwgY28KIAljaGFyICpwOwogCUZJTEUgKmZwOwogCi0Jc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMvJXMvJXMvJXMiLCBwb3J0cm9vdCwgcG9ydHZk
YiwgQ0FURUdPUlksIFBGLCBpdGVtKTsKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMv
JXMvJXMvJXMiLCBwb3J0dmRiLCBDQVRFR09SWSwgUEYsIGl0ZW0pOwogCWlmICgoZnAgPSBmb3Bl
bihidWYsICJyIikpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCWZnZXRzKGJ1Ziwgc2l6ZW9m
KGJ1ZiksIGZwKTsKQEAgLTEwNzAsOSArMTE5Miw2IEBAIHF1ZXVlICpnZXRfdmRiX2F0b21zKHZv
aWQpCiAKIAlhc3NlcnQoY2hkaXIoc2F2ZWN3ZCkgPT0gMCk7CiAKLQlpZiAoY2hkaXIocG9ydHJv
b3QpICE9IDApCi0JCWdvdG8gZnVja2l0OwotCiAJaWYgKGNoZGlyKHBvcnR2ZGIpICE9IDApCiAJ
CWdvdG8gZnVja2l0OwogCkBAIC0xMTY3LDMgKzEyODYsNSBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiB9CiAKICNpbmNsdWRlICJpbmNsdWRlX2FwcGxldHMuaCIKKy8qIHZpbTog
c2V0IG5vZXQgc3RzPTggc3c9OCA6ICovCisKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0yMDA3
MDExNS5uZXcvbWFuL3Fsb3AuMSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9tYW4vcWxvcC4x
Ci0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9tYW4vcWxvcC4xCTIwMDctMDEtMTUgMTk6
MjE6MDUuMDEzMDY2MDExICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9tYW4v
cWxvcC4xCTIwMDctMDEtMTUgMTk6MjM6MTIuMzAxNjQ3MzM5ICswMTAwCkBAIC01LDcgKzUsNyBA
QCBxbG9wIFwtIGVtZXJnZSBsb2cgYW5hbHl6ZXIKIC5CIHFsb3AKIFxmSTxwa2duYW1lPlxmUgog
LlNIIERFU0NSSVBUSU9OCi1PcHRpb25zOiBcZkJcLVtndGx1c2NmOkY6SHZxQ2hWXVxmUgorT3B0
aW9uczogXGZCXC1bZ3RsdXNvOmNmXGZSOkY6SHZxQ2hWXQogLlRQCiBcZkJcLWdcZlIsIFxmQlwt
XC1nYXVnZVxmUgogKiBHYXVnZSBudW1iZXIgb2YgdGltZXMgYSBwYWNrYWdlIGhhcyBiZWVuIG1l
cmdlZApAQCAtMjUsNiArMjUsMTEgQEAgT3B0aW9uczogXGZCXC1bZ3RsdXNjZjpGOkh2cUNoVl1c
ZlIKIFxmQlwtc1xmUiwgXGZCXC1cLXN5bmNcZlIKICogU2hvdyBzeW5jIGhpc3RvcnkKIC5UUAor
XGZCXC1vXGZSLCBcZkJcLVwtb3ZlcmxheVxmUgorPGFyZz4KKy5CUgorKiBPbmx5IGNvbnNpZGVy
IHRoZSA8YXJnPiBvdmVybGF5CisuVFAKIFxmQlwtY1xmUiwgXGZCXC1cLWN1cnJlbnRcZlIKICog
U2hvdyBjdXJyZW50IGVtZXJnaW5nIHBhY2thZ2VzCiAuVFAKZGlmZiAtTmFydXAgcG9ydGFnZS11
dGlscy0yMDA3MDExNS5uZXcvcS5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL3EuYwotLS0g
cG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcS5jCTIwMDctMDEtMTUgMTk6MjE6NTguMzA5OTM1
MjM4ICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xLmMJMjAwNy0wMS0xNSAx
OToyMzoxMi4zMDk2NDYxMTkgKzAxMDAKQEAgLTE0NSwzICsxNDUsNSBAQCBpbnQgcV9tYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKIAogCXJldHVybiAoZnVuYykoYXJnYyAtIDEsICsrYXJndik7
CiB9CisvKiB2aW06IHNldCBub2V0IHN0cz04IHN3PTggOiAqLworCmRpZmYgLU5hcnVwIHBvcnRh
Z2UtdXRpbHMtMjAwNzAxMTUubmV3L3FmaWxlLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcv
cWZpbGUuYwotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcWZpbGUuYwkyMDA3LTAxLTE1
IDE5OjIxOjU4LjMzNjkzMTEyMCArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcv
cWZpbGUuYwkyMDA3LTAxLTE1IDE5OjIzOjEyLjMxODY0NDc0NiArMDEwMApAQCAtNTQzLDExICs1
NDMsNiBAQCBpbnQgcWZpbGVfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKChhcmdz
X2ZpbGUgPT0gTlVMTCkgJiYgKG1heF9hcmdzICE9IFFGSUxFX0RFRkFVTFRfTUFYX0FSR1MpKQog
CQl3YXJuKCItLW1heC1hcmdzIGlzIG9ubHkgdXNlZCB3aGVuIHJlYWRpbmcgYXJndW1lbnRzIGZy
b20gYSBmaWxlICh3aXRoIC1mKSIpOwogCi0JaWYgKGNoZGlyKHBvcnRyb290KSkgewotCQl3YXJu
cCgiY291bGQgbm90IGNoZGlyKCVzKSBmb3IgUk9PVCIsIHBvcnRyb290KTsKLQkJZ290byBleGl0
OwotCX0KLQogCWlmIChjaGRpcihwb3J0dmRiKSAhPSAwKSB7CiAJCXdhcm5wKCJjb3VsZCBub3Qg
Y2hkaXIoUk9PVC8lcykgZm9yIGluc3RhbGxlZCBwYWNrYWdlcyBkYXRhYmFzZSIsIHBvcnR2ZGIp
OwogCQlnb3RvIGV4aXQ7CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3Fn
cmVwLmMgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcvcWdyZXAuYwotLS0gcG9ydGFnZS11dGls
cy0yMDA3MDExNS5uZXcvcWdyZXAuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjM0MzkzMDA1MiArMDEw
MAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcvcWdyZXAuYwkyMDA3LTAxLTE1IDE5OjIz
OjEyLjMyNjY0MzUyNiArMDEwMApAQCAtOTAsNyArOTAsNyBAQCBpbnQgcWdyZXBfbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKGFyZ2MgPT0gb3B0aW5kKQogCQlxZ3JlcF91c2FnZShF
WElUX0ZBSUxVUkUpOwogCi0JaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCgpOwkvKiBzZXRzIG91ciBw
d2QgdG8gJFBPUlRESVIgKi8KKwlpbml0aWFsaXplX2VidWlsZF9mbGF0KDApOwkvKiBzZXRzIG91
ciBwd2QgdG8gJFBPUlRESVIgKi8KIAogCWlmICgoZnAgPSBmb3BlbihDQUNIRV9FQlVJTERfRklM
RSwgInIiKSkgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CkBAIC0xOTEsMyArMTkxLDUgQEAgaW50IHFn
cmVwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogI2Vsc2UKIERFRklORV9BUFBMRVRfU1RV
QihxZ3JlcCkKICNlbmRpZgorLyogdmltOiBzZXQgbm9ldCBzdHM9OCBzdz04IDogKi8KKwpkaWZm
IC1OYXJ1cCBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xbGlzdC5jIHBvcnRhZ2UtdXRpbHMt
MjAwNzAxMTUuTkVXL3FsaXN0LmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3FsaXN0
LmMJMjAwNy0wMS0xNSAxOToyMTowNS4wMTAwNjY0NjggKzAxMDAKKysrIHBvcnRhZ2UtdXRpbHMt
MjAwNzAxMTUuTkVXL3FsaXN0LmMJMjAwNy0wMS0xNSAxOToyMzoxMi4zMzU2NDIxNTIgKzAxMDAK
QEAgLTEzNyw2ICsxMzcsNyBAQCBpbnQgcWxpc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CiAJY2hhciBxbGlzdF9hbGwgPSAwLCBqdXN0X3BrZ25hbWUgPSAwLCBkdXBzX29ubHkgPSAwOwog
CWNoYXIgc2hvd19kaXIsIHNob3dfb2JqLCBzaG93X3N5bSwgc2hvd19zbG90cywgc2hvd191bWFw
OwogCXN0cnVjdCBkaXJlbnQgKipkZSwgKipjYXQ7CisJY2hhciBvdmVybGF5WzY0XTsKIAljaGFy
IGJ1ZltfUV9QQVRIX01BWF07CiAJY2hhciBzd2FwW19RX1BBVEhfTUFYXTsKIAlxdWV1ZSAqc2V0
cyA9IE5VTEw7CkBAIC0xNDYsNiArMTQ3LDcgQEAgaW50IHFsaXN0X21haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogCSAgICBhcmdjLCBhcmd2WzBdLCBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiTlVM
TD8iKTsKIAogCXNob3dfZGlyID0gc2hvd19vYmogPSBzaG93X3N5bSA9IHNob3dfc2xvdHMgPSBz
aG93X3VtYXAgPSAwOworCW92ZXJsYXlbMF0gPSAwOwogCiAJd2hpbGUgKChpID0gR0VUT1BUX0xP
TkcoUUxJU1QsIHFsaXN0LCAiIikpICE9IC0xKSB7CiAJCXN3aXRjaCAoaSkgewpAQCAtMTY4LDEy
ICsxNzAsOCBAQCBpbnQgcWxpc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKChh
cmdjID09IG9wdGluZCkgJiYgKCFqdXN0X3BrZ25hbWUpKQogCQlxbGlzdF91c2FnZShFWElUX0ZB
SUxVUkUpOwogCi0JaWYgKGNoZGlyKHBvcnRyb290KSkKLQkJZXJycCgiY291bGQgbm90IGNoZGly
KCVzKSBmb3IgUk9PVCIsIHBvcnRyb290KTsKLQogCWlmIChjaGRpcihwb3J0dmRiKSAhPSAwKQot
CQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCisJCWVycnAoImNvdWxkIG5vdCBjaGRpciglcykgZm9y
IFZEQiIsIHBvcnR2ZGIpOwogCiAJaWYgKChkZmQgPSBzY2FuZGlyKCIuIiwgJmNhdCwgZmlsdGVy
X2hpZGRlbiwgYWxwaGFzb3J0KSkgPCAwKQogCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwpAQCAtMjIz
LDYgKzIyMSw5IEBAIGludCBxbGlzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWlm
ICgoaSA9PSBhcmdjKSAmJiAoYXJnYyAhPSBvcHRpbmQpKQogCQkJCWNvbnRpbnVlOwogCisJCQlp
ZiAodmVyYm9zZT4xKQorCQkJCXNucHJpbnRmKG92ZXJsYXksIHNpemVvZihvdmVybGF5KSwgIjo6
JXMiLGdyYWJfdmRiX2l0ZW0oIlJFUE9TSVRPUlkiLCBjYXRbal0tPmRfbmFtZSwgZGVbeF0tPmRf
bmFtZSkpOworCiAJCQlpZiAoanVzdF9wa2duYW1lKSB7CiAJCQkJaWYgKGR1cHNfb25seSkgewog
CQkJCQlwa2duYW1lID0gYXRvbV9leHBsb2RlKGRlW3hdLT5kX25hbWUpOwpAQCAtMjQxLDkgKzI0
MiwxMCBAQCBpbnQgcWxpc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQlzbG90
ID0gZ3JhYl92ZGJfaXRlbSgiU0xPVCIsIGNhdFtqXS0+ZF9uYW1lLCBkZVt4XS0+ZF9uYW1lKTsK
IAogCQkJCQkvKiBkaXNwbGF5IGl0ICovCi0JCQkJCXByaW50ZigiJXMlcy8lcyVzJXMlcyVzJXMl
cyIsIEJPTEQsIGNhdFtqXS0+ZF9uYW1lLCBCTFVFLAorCQkJCQlwcmludGYoIiVzJXMvJXMlcyVz
JXMlcyVzJXMlcyVzIiwgQk9MRCwgY2F0W2pdLT5kX25hbWUsIEJMVUUsCiAJCQkJCSAgICAgICAo
cGtnbmFtZSA/IHBrZ25hbWUtPlBOIDogZGVbeF0tPmRfbmFtZSksIE5PUk0sCi0JCQkJCQlZRUxM
T1csIHNsb3QgPyAiICI6ICIiLCBzbG90ID8gc2xvdCA6ICIiLCBOT1JNKTsKKwkJCQkJCVlFTExP
Vywgb3ZlcmxheSwKKwkJCQkJCVJFRCwgc2xvdCA/ICIgIjogIiIsIHNsb3QgPyBzbG90IDogIiIs
IE5PUk0pOwogCQkJCQlwdXRzKHVtYXBzdHIoc2hvd191bWFwLCBjYXRbal0tPmRfbmFtZSwgZGVb
eF0tPmRfbmFtZSkpOwogCQkJCX0KIAkJCQlpZiAocGtnbmFtZSkKQEAgLTI1Myw3ICsyNTUsNyBA
QCBpbnQgcWxpc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWNvbnRpbnVlOwog
CQkJfQogCi0JCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy9DT05URU5U
UyIsIHBvcnRyb290LCBwb3J0dmRiLAorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVz
LyVzLyVzL0NPTlRFTlRTIiwgcG9ydHZkYiwKIAkJCSAgICAgICAgIGNhdFtqXS0+ZF9uYW1lLCBk
ZVt4XS0+ZF9uYW1lKTsKIAogCQkJaWYgKHZlcmJvc2UgPiAxKQpAQCAtMzExLDkgKzMxMywxMCBA
QCBpbnQgcWxpc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJY2hhciAqc2xvdCA9
IE5VTEw7CiAJCQkJaWYgKHNob3dfc2xvdHMpCiAJCQkJCXNsb3QgPSAoY2hhciAqKSBncmFiX3Zk
Yl9pdGVtKCJTTE9UIiwgKGNvbnN0IGNoYXIgKikgYXRvbS0+Q0FURUdPUlksIChjb25zdCBjaGFy
ICopIGF0b20tPlApOwotCQkJCXByaW50ZigiJXMlcy8lcyVzJXMlcyVzJXMlcyIsIEJPTEQsIGF0
b20tPkNBVEVHT1JZLCBCTFVFLAorCQkJCXByaW50ZigiJXMlcy8lcyVzJXMlcyVzJXMlcyVzJXMi
LCBCT0xELCBhdG9tLT5DQVRFR09SWSwgQkxVRSwKIAkJCQkJKHZlcmJvc2UgPyBhdG9tLT5QIDog
YXRvbS0+UE4pLCBOT1JNLAotCQkJCQlZRUxMT1csIHNsb3QgPyAiICIgOiAiIiwgc2xvdCA/IHNs
b3QgOiAiIiwgTk9STSk7CisJCQkJCVlFTExPVywgb3ZlcmxheSwKKwkJCQkJUkVELCBzbG90ID8g
IiAiIDogIiIsIHNsb3QgPyBzbG90IDogIiIsIE5PUk0pOwogCQkJCXB1dHModW1hcHN0cihzaG93
X3VtYXAsIGF0b20tPkNBVEVHT1JZLCBhdG9tLT5QKSk7CiAJCQl9CiAJCQlhdG9tX2ltcGxvZGUo
YXRvbSk7CmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3Fsb3AuYyBwb3J0
YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xbG9wLmMKLS0tIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUu
bmV3L3Fsb3AuYwkyMDA3LTAxLTE1IDE5OjIxOjA1LjAxMTA2NjMxNSArMDEwMAorKysgcG9ydGFn
ZS11dGlscy0yMDA3MDExNS5ORVcvcWxvcC5jCTIwMDctMDEtMTUgMTk6MjM6MTIuMzQ1NjQwNjI3
ICswMTAwCkBAIC0yMSwxMSArMjEsMTEgQEAKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRp
ZgogCi0jZGVmaW5lIFFMT1BfREVGQVVMVF9MT0dGSUxFICIvdmFyL2xvZy9lbWVyZ2UubG9nIgor
I2RlZmluZSBRTE9QX0RFRkFVTFRfTE9HRklMRSAiL3Zhci9sb2cvcGFsdWRpcy5sb2ciCiAKIAog
Ci0jZGVmaW5lIFFMT1BfRkxBR1MgImd0bHVzY2Y6RjpIIiBDT01NT05fRkxBR1MKKyNkZWZpbmUg
UUxPUF9GTEFHUyAiZ3RsdXNvOmNmOkY6SCIgQ09NTU9OX0ZMQUdTCiBzdGF0aWMgc3RydWN0IG9w
dGlvbiBjb25zdCBxbG9wX2xvbmdfb3B0c1tdID0gewogCXsiZ2F1Z2UiLCAgICAgbm9fYXJndW1l
bnQsIE5VTEwsICdnJ30sCiAJeyJ0aW1lIiwgICAgICBub19hcmd1bWVudCwgTlVMTCwgJ3QnfSwK
QEAgLTMzLDYgKzMzLDcgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgcWxvcF9sb25nX29w
dAogCXsibGlzdCIsICAgICAgbm9fYXJndW1lbnQsIE5VTEwsICdsJ30sCiAJeyJ1bmxpc3QiLCAg
ICBub19hcmd1bWVudCwgTlVMTCwgJ3UnfSwKIAl7InN5bmMiLCAgICAgIG5vX2FyZ3VtZW50LCBO
VUxMLCAncyd9LAorCXsib3ZlcmxheSIsICAgYV9hcmd1bWVudCwgIE5VTEwsICdvJ30sCiAJeyJj
dXJyZW50IiwgICBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKIAl7ImxvZ2ZpbGUiLCAgICBhX2Fy
Z3VtZW50LCBOVUxMLCAnZid9LAogCUNPTU1PTl9MT05HX09QVFMKQEAgLTQ0LDYgKzQ1LDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIgKnFsb3Bfb3B0c19oZWxwW10gPSB7CiAJIlNob3cgbWVyZ2UgaGlz
dG9yeSIsCiAJIlNob3cgdW5tZXJnZSBoaXN0b3J5IiwKIAkiU2hvdyBzeW5jIGhpc3RvcnkiLAor
CSJEbyBvbmx5IGNvbnNpZGVyIHRoZSA8YXJnPiByZXBvc2l0b3J5IiwKIAkiU2hvdyBjdXJyZW50
IGVtZXJnaW5nIHBhY2thZ2VzIiwKIAkiUmVhZCBlbWVyZ2UgbG9nZmlsZSBpbnN0ZWFkIG9mICIg
UUxPUF9ERUZBVUxUX0xPR0ZJTEUsCiAJQ09NTU9OX09QVFNfSEVMUApAQCAtNzksMzAgKzgxLDI5
IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjaG9wX2N0aW1lKHRpbWVfdCB0KQogCXJldHVybiBjdGlt
ZV9vdXQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgc2hvd19tZXJnZV90aW1lcyhjaGFyICpwYWNrYWdl
LCBjb25zdCBjaGFyICpsb2dmaWxlLCBpbnQgYXZlcmFnZSwgY2hhciBodW1hbl9yZWFkYWJsZSk7
Ci11bnNpZ25lZCBsb25nIHNob3dfbWVyZ2VfdGltZXMoY2hhciAqcGFja2FnZSwgY29uc3QgY2hh
ciAqbG9nZmlsZSwgaW50IGF2ZXJhZ2UsIGNoYXIgaHVtYW5fcmVhZGFibGUpCit1bnNpZ25lZCBs
b25nIHNob3dfbWVyZ2VfdGltZXMoY2hhciAqcGFja2FnZSwgY29uc3Qgc2hvcnQgcmVwbywgY29u
c3QgY2hhciByZXBvX3NlYXJjaFtdLCBjb25zdCBjaGFyICpsb2dmaWxlLCBpbnQgYXZlcmFnZSwg
Y2hhciBodW1hbl9yZWFkYWJsZSk7Cit1bnNpZ25lZCBsb25nIHNob3dfbWVyZ2VfdGltZXMoY2hh
ciAqcGFja2FnZSwgY29uc3Qgc2hvcnQgcmVwbywgY29uc3QgY2hhciByZXBvX3NlYXJjaFtdLCBj
b25zdCBjaGFyICpsb2dmaWxlLCBpbnQgYXZlcmFnZSwgY2hhciBodW1hbl9yZWFkYWJsZSkKIHsK
IAlGSUxFICpmcDsKLQljaGFyIGNhdFsxMjZdLCBidWZbMl1bQlVGU0laXTsKLQljaGFyICpwa2cs
ICpwOworCWNoYXIgY2F0UE5bQlVGU0laXSwgYnVmWzJdW0JVRlNJWl0sIG1hdGNoZWQ7CisJY2hh
ciAqcCwgKnE7CiAJdW5zaWduZWQgbG9uZyBjb3VudCwgbWVyZ2VfdGltZTsKIAl0aW1lX3QgdFsy
XTsKLQlkZXBlbmRfYXRvbSAqYXRvbTsKKwlkZXBlbmRfYXRvbSAqYXRvbSwqc2VhcmNoOworCWlu
dCBsOworCWxvbmcgcG9zOwogCiAJdFswXSA9IHRbMV0gPSAwVUw7CiAJY291bnQgPSBtZXJnZV90
aW1lID0gMDsKLQljYXRbMF0gPSAwOworCW1hdGNoZWQgPSAwOworCXBvcyA9IDA7CiAKLQlpZiAo
KHAgPSBzdHJjaHIocGFja2FnZSwgJy8nKSkgIT0gTlVMTCkgewotCQlwa2cgPSBwICsgMTsKLQkJ
c3RybmNweShjYXQsIHBhY2thZ2UsIHNpemVvZihjYXQpKTsKLQkJaWYgKChwID0gc3RyY2hyKGNh
dCwgJy8nKSkgIT0gTlVMTCkKLQkJCSpwID0gMDsKLQl9IGVsc2UgewotCQlwa2cgPSBwYWNrYWdl
OwotCX0KKwlpZiAoKHNlYXJjaCA9IGF0b21fZXhwbG9kZShwYWNrYWdlKSkgPT0gTlVMTCApCisJ
CWVycigiJXMgaXMgbm90IGEgdmFsaWQgYXRvbSIsIHBhY2thZ2UpOworCWlmICghc2VhcmNoLT5D
QVRFR09SWSAmJiAhc2VhcmNoLT5QTiAmJiAhc2VhcmNoLT5PVkVSTEFZKQorCQllcnIoIllvdSBu
ZWVkIHRvIHNwZWNpZnkgYXQgbGVhc3QgYW4gb3ZlcmxheSwgYSBjYXRlZ29yeSwgb3IgYSBwYWNr
YWdlIG5hbWUiKTsKIAotCURCRygiU2VhcmNoaW5nIGZvciAlcyBpbiAlc1xuIiwgcGtnLCBsb2dm
aWxlKTsKKwlEQkcoIlNlYXJjaGluZyBmb3IgJXMgaW4gJXNcbiIsIHBhY2thZ2UsIGxvZ2ZpbGUp
OwogCiAJaWYgKChmcCA9IGZvcGVuKGxvZ2ZpbGUsICJyIikpID09IE5VTEwpIHsKIAkJd2FybnAo
IkNvdWxkIG5vdCBvcGVuIGxvZ2ZpbGUgJyVzJyIsIGxvZ2ZpbGUpOwpAQCAtMTEwLDcgKzExMSwx
OCBAQCB1bnNpZ25lZCBsb25nIHNob3dfbWVyZ2VfdGltZXMoY2hhciAqcGFjCiAJfQogCiAJd2hp
bGUgKChmZ2V0cyhidWZbMF0sIHNpemVvZihidWZbMF0pLCBmcCkpICE9IE5VTEwpIHsKLQkJaWYg
KHN0cnN0cihidWZbMF0sIHBrZykgPT0gTlVMTCkKKwkJaWYgKG1hdGNoZWQpIHsKKwkJCW1hdGNo
ZWQgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJLyogbGVuKCB0aW1lOntzdGFydGluZyxmaW5p
c2hlZH0gaW5zdGFsbCBvZiBwYWNrYWdlICkgPSA0MSAqLworCQlpZiAoc2VhcmNoLT5DQVRFR09S
WSAmJiAhc3Ryc3RyKCZidWZbMF1bNDBdLCBzZWFyY2gtPkNBVEVHT1JZKSkKKwkJCWNvbnRpbnVl
OworCisJCWlmIChzZWFyY2gtPlBOICYmICFzdHJzdHIoJmJ1ZlswXVs0MF0sIHNlYXJjaC0+UE4p
KQorCQkJY29udGludWU7CisKKwkJaWYgKHNlYXJjaC0+T1ZFUkxBWSAmJiAhc3Ryc3RyKCZidWZb
MF1bNDBdLCBzZWFyY2gtPk9WRVJMQVkpKQogCQkJY29udGludWU7CiAKIAkJaWYgKChwID0gc3Ry
Y2hyKGJ1ZlswXSwgJ1xuJykpICE9IE5VTEwpCkBAIC0xMjEsODAgKzEzMywxMzcgQEAgdW5zaWdu
ZWQgbG9uZyBzaG93X21lcmdlX3RpbWVzKGNoYXIgKnBhYwogCQl0WzBdID0gYXRvbChidWZbMF0p
OwogCQlzdHJjcHkoYnVmWzFdLCBwICsgMSk7CiAJCXJtc3BhY2UoYnVmWzFdKTsKLQkJaWYgKChz
dHJuY21wKGJ1ZlsxXSwgIj4+PiBlbWVyZ2UgKCIsIDEyKSkgPT0gMCkgewotCQkJY2hhciBtYXRj
aGVkID0gMDsKLQkJCWlmICgocCA9IHN0cmNocihidWZbMV0sICcpJykpID09IE5VTEwpCisJCWlm
ICgoc3RybmNtcChidWZbMV0sICJzdGFydGluZyBpbnN0YWxsIG9mIHBhY2thZ2UiLCAyNikpID09
IDApIHsKKwkJCXAgPSAmYnVmWzFdWzI4XTsKKwkJCWlmIChyZXBvICYmICFzdHJzdHIocCwgcmVw
b19zZWFyY2gpKQogCQkJCWNvbnRpbnVlOwotCQkJKnAgPSAwOwotCQkJc3RyY3B5KGJ1ZlswXSwg
cCArIDEpOwotCQkJcm1zcGFjZShidWZbMF0pOwotCQkJaWYgKChwID0gc3RyY2hyKGJ1ZlswXSwg
JyAnKSkgPT0gTlVMTCkKKworCQkJaWYgKChxID0gc3RyY2hyKHAsICcgJykpID09IE5VTEwpCiAJ
CQkJY29udGludWU7Ci0JCQkqcCA9IDA7CisJCQkqcSA9IDA7CisKKwkJCXN0cmNweShidWZbMF0s
IHApOworCQkJcm1zcGFjZShidWZbMF0pOwogCQkJaWYgKChhdG9tID0gYXRvbV9leHBsb2RlKGJ1
ZlswXSkpID09IE5VTEwpCiAJCQkJY29udGludWU7CiAKLQkJCWlmICgqY2F0KSB7Ci0JCQkJaWYg
KChzdHJjbXAoY2F0LCBhdG9tLT5DQVRFR09SWSkgPT0gMCkgJiYgKHN0cmNtcChwa2csIGF0b20t
PlBOKSA9PSAwKSkKLQkJCQkJbWF0Y2hlZCA9IDE7Ci0JCQl9IGVsc2UgaWYgKHN0cmNtcChwa2cs
IGF0b20tPlBOKSA9PSAwKQotCQkJCW1hdGNoZWQgPSAxOworCQkJaWYgKHNlYXJjaC0+Q0FURUdP
UlkgJiYgc3RyY21wKGF0b20tPkNBVEVHT1JZLCBzZWFyY2gtPkNBVEVHT1JZKSkgeworCQkJCWF0
b21faW1wbG9kZShhdG9tKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHNlYXJjaC0+
UE4gJiYgKnNlYXJjaC0+UE4gJiYgc3RyY21wKGF0b20tPlBOLCBzZWFyY2gtPlBOKSkgeworCQkJ
CWF0b21faW1wbG9kZShhdG9tKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHNlYXJj
aC0+UFYgJiYgc3RyY21wKGF0b20tPlBWLCBzZWFyY2gtPlBWKSkgeworCQkJCWF0b21faW1wbG9k
ZShhdG9tKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHNlYXJjaC0+UFJfaW50ICYm
IGF0b20tPlBSX2ludCE9c2VhcmNoLT5QUl9pbnQpIHsKKwkJCQlhdG9tX2ltcGxvZGUoYXRvbSk7
CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChzZWFyY2gtPk9WRVJMQVkgJiYgc3RyY21w
KGF0b20tPk9WRVJMQVksIHNlYXJjaC0+T1ZFUkxBWSkpIHsKKwkJCQlhdG9tX2ltcGxvZGUoYXRv
bSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwb3MgPSBmdGVsbChmcCk7CisJCQltYXRjaGVk
ID0gMTsKIAogCQkJaWYgKG1hdGNoZWQpIHsKLQkJCQl3aGlsZSAoKGZnZXRzKGJ1ZlswXSwgc2l6
ZW9mKGJ1ZlswXSksIGZwKSkgIT0gTlVMTCkgeworCQkJCS8qIEluIGNhc2Ugb2Ygc2ltdWx0YW5l
b3VzIGluc3RhbGwsIHdlIHNlYXJjaCB0aGUgY29ycmVzcG9uZGluZyAqLworCQkJCS8qICJmaW5p
c2hlZCBpbnN0YWxsIG9mIHBhY2thZ2UiIHBrZyB1cCB0byAyMCBsaW5lcyBhZnRlciB0aGUgJ3N0
YXJ0aW5nIGxpbmUnICovCisJCQkJbD0wOworCQkJCXNucHJpbnRmKGNhdFBOLCBzaXplb2YoY2F0
UE4pLCAiJXMvJXMtJXM6OiVzIiwgYXRvbS0+Q0FURUdPUlksIGF0b20tPlBOLCAoYXRvbS0+UFJf
aW50ID8gYXRvbS0+UFZSIDogYXRvbS0+UFYpLCBhdG9tLT5PVkVSTEFZKTsKKwkJCQl3aGlsZSAo
KGZnZXRzKGJ1ZlswXSwgc2l6ZW9mKGJ1ZlswXSksIGZwKSkgIT0gTlVMTCAmJiBsKysgPCAyMCkg
eworCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmWzBdLCc6JykpID09IE5VTEwpCisJCQkJCQljb250
aW51ZTsKKwkJCQkJcCA9IHArMjsKKworCQkJCQkvKiBTdG9wIHRoZSBzZWFyY2ggaW4gY2FzZSB0
aGUgcGFja2FnZSBpcyBhbHJlYWR5IGJlaW5nIHJlaW5zdGFsbGVkIGV2ZW4gaW4gYSBkaWZmZXJl
bnQgdmVyc2lvbi9yZXZpc2lvbiAqLworCQkJCQlpZiAoIXN0cm5jbXAocCwgInN0YXJ0aW5nIiwg
OCkgJiYgc3RyY21wKHArMjgsIGNhdFBOKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlmIChzdHJu
Y21wKHAsICJmaW5pc2hlZCBpbnN0YWxsIG9mIHBhY2thZ2UiLCAyNikgIT0gMCkKKwkJCQkJCWNv
bnRpbnVlOworCQkJCQlpZiAoIXN0cmNtcChwKzI4LCBjYXRQTikpCisJCQkJCQljb250aW51ZTsK
KwogCQkJCQlpZiAoKHAgPSBzdHJjaHIoYnVmWzBdLCAnXG4nKSkgIT0gTlVMTCkKIAkJCQkJCSpw
ID0gMDsKIAkJCQkJaWYgKChwID0gc3RyY2hyKGJ1ZlswXSwgJzonKSkgPT0gTlVMTCkKLQkJCQkJ
CWNvbnRpbnVlOwotCQkJCQkqcCA9IDA7CisJCQkJCQkqcCA9IDA7CiAJCQkJCXRbMV0gPSBhdG9s
KGJ1ZlswXSk7CiAJCQkJCXN0cmNweShidWZbMV0sIHAgKyAxKTsKIAkJCQkJcm1zcGFjZShidWZb
MV0pOwotCQkJCQlpZiAoKmJ1ZlsxXSA9PSAnKicpCi0JCQkJCQlicmVhazsKLQkJCQkJaWYgKChz
dHJuY21wKGJ1ZlsxXSwgIjo6OiBjb21wbGV0ZWQgZW1lcmdlICgiLCAyMikpID09IDApIHsKLQkJ
CQkJCWlmICghYXZlcmFnZSkgewotCQkJCQkJCXN0cmNweShidWZbMV0sICIiKTsKLQkJCQkJCQlp
ZiAodmVyYm9zZSkgewotCQkJCQkJCQlpZiAoYXRvbS0+UFJfaW50KQotCQkJCQkJCQkJc25wcmlu
dGYoYnVmWzFdLCBzaXplb2YoYnVmWzFdKSwgIi0lcy1yJWkiLCBhdG9tLT5QViwgIGF0b20tPlBS
X2ludCk7Ci0JCQkJCQkJCWVsc2UKLQkJCQkJCQkJCXNucHJpbnRmKGJ1ZlsxXSwgc2l6ZW9mKGJ1
ZlsxXSksICItJXMiLCBhdG9tLT5QVik7Ci0JCQkJCQkJfQotCQkJCQkJCXByaW50ZigiJXMlcyVz
JXM6ICVzOiAiLCBCTFVFLCBhdG9tLT5QTiwgYnVmWzFdLCBOT1JNLCBjaG9wX2N0aW1lKHRbMF0p
KTsKLQkJCQkJCQlpZiAoaHVtYW5fcmVhZGFibGUpCi0JCQkJCQkJCXByaW50X3NlY29uZHNfZm9y
X2VhcnRobGluZ3ModFsxXSAtIHRbMF0pOwotCQkJCQkJCWVsc2UKLQkJCQkJCQkJcHJpbnRmKCIl
cyVsdSVzIHNlY29uZHMiLCBHUkVFTiwgKHRbMV0gLSB0WzBdKSwgTk9STSk7Ci0JCQkJCQkJcHV0
cygiIik7Ci0JCQkJCQl9Ci0JCQkJCQltZXJnZV90aW1lICs9ICh0WzFdIC0gdFswXSk7Ci0JCQkJ
CQljb3VudCsrOwotCQkJCQkJYnJlYWs7CisKKwkJCQkJaWYgKCFhdmVyYWdlKSB7CisJCQkJCQlz
dHJjcHkoYnVmWzFdLCAiIik7CisJCQkJCQlpZiAodmVyYm9zZSkKKwkJCQkJCQlzbnByaW50Zihi
dWZbMV0sIHNpemVvZihidWZbMV0pLCAiLSVzJXM6OiVzICIsIChhdG9tLT5QUl9pbnQgPyBhdG9t
LT5QVlIgOiBhdG9tLT5QViksIFlFTExPVywgYXRvbS0+T1ZFUkxBWSk7CisKKwkJCQkJCXByaW50
ZigiJXMlcy8lcyVzJXMlczogJXM6ICIsIEdSRUVOLCBhdG9tLT5DQVRFR09SWSwgQkxVRSwgYXRv
bS0+UE4sIGJ1ZlsxXSwgTk9STSwgY2hvcF9jdGltZSh0WzBdKSk7CisJCQkJCQlpZiAoaHVtYW5f
cmVhZGFibGUpCisJCQkJCQkJcHJpbnRfc2Vjb25kc19mb3JfZWFydGhsaW5ncyh0WzFdIC0gdFsw
XSk7CisJCQkJCQllbHNlCisJCQkJCQkJcHJpbnRmKCIlcyVsdSVzIHNlY29uZHMiLCBHUkVFTiwg
KHRbMV0gLSB0WzBdKSwgTk9STSk7CisJCQkJCQlwdXRzKCIiKTsKIAkJCQkJfQorCQkJCQltZXJn
ZV90aW1lICs9ICh0WzFdIC0gdFswXSk7CisJCQkJCWNvdW50Kys7CisJCQkJCWJyZWFrOworCiAJ
CQkJfQogCQkJfQogCQkJYXRvbV9pbXBsb2RlKGF0b20pOworCQkJLyogdGltZSB0byBnbyBiYWNr
IHdoZXJlIHdlIHdlcmUgKi8KKwkJCWZzZWVrKGZwLCBwb3MsIFNFRUtfU0VUKTsKIAkJfQogCX0K
IAlmY2xvc2UoZnApOwogCWlmIChjb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKIAlpZiAoYXZlcmFn
ZSA9PSAxKSB7Ci0JCXByaW50ZigiJXMlcyVzOiAiLCBCTFVFLCBwa2csIE5PUk0pOworCQlwcmlu
dGYoIiVzJXMlcyVzJXMlcyVzJXMlcyVzJXMgOiAiLCBHUkVFTiwgKHNlYXJjaC0+Q0FURUdPUlk/
IHNlYXJjaC0+Q0FURUdPUlkgOiAiIiksIChzZWFyY2gtPkNBVEVHT1JZID8gIi8iOiAiIiksCisJ
CQkJCUJMVUUsIHNlYXJjaC0+UE4sIChzZWFyY2gtPlBWID8gIi0iIDogIiIpLCAoc2VhcmNoLT5Q
ViA/IChzZWFyY2gtPlBSX2ludCA/IHNlYXJjaC0+UFZSIDogc2VhcmNoLT5QVikgOiAiIiksCisJ
CQkJCVlFTExPVywgKHNlYXJjaC0+T1ZFUkxBWSA/ICI6OiIgOiAiIiksIChzZWFyY2gtPk9WRVJM
QVkgPyBzZWFyY2gtPk9WRVJMQVkgOiAiIiksIE5PUk0pOwogCQlpZiAoaHVtYW5fcmVhZGFibGUp
CiAJCQlwcmludF9zZWNvbmRzX2Zvcl9lYXJ0aGxpbmdzKG1lcmdlX3RpbWUgLyBjb3VudCk7CiAJ
CWVsc2UKLQkJCXByaW50ZigiJXMlbHUlcyBzZWNvbmRzIGF2ZXJhZ2UiLCBHUkVFTiwgbWVyZ2Vf
dGltZSAvIGNvdW50LCBOT1JNKTsKLQkJcHJpbnRmKCIgZm9yICVzJWx1JXMgbWVyZ2VzXG4iLCBH
UkVFTiwgY291bnQsIE5PUk0pOworCQkJcHJpbnRmKCIlcyVsdSVzIHNlY29uZHMiLCBHUkVFTiwg
bWVyZ2VfdGltZSAvIGNvdW50LCBOT1JNKTsKKwkJcHJpbnRmKCIgYXZlcmFnZSBmb3IgJXMlbHUl
cyBtZXJnZXMlcyIsIEdSRUVOLCBjb3VudCwgTk9STSwgKHZlcmJvc2UgPyAiLCBmb3IgYSB0b3Rh
bCB0aW1lIG9mICIgOiAiIikpOworCisJCWlmICh2ZXJib3NlKSB7CisJCQlpZiAoaHVtYW5fcmVh
ZGFibGUpCisJCQkJcHJpbnRfc2Vjb25kc19mb3JfZWFydGhsaW5ncyhtZXJnZV90aW1lKTsKKwkJ
CWVsc2UKKwkJCQlwcmludGYoIiVzJWx1JXMgc2Vjb25kcyIsIEdSRUVOLCBtZXJnZV90aW1lLCBO
T1JNKTsKKwkJfQorCQlmcHV0YygnXG4nLCBzdGRvdXQpOwogCX0gZWxzZSB7Ci0JCXByaW50Zigi
JXMlcyVzOiAlcyVsdSVzIHRpbWVzXG4iLCBCTFVFLCBwa2csIE5PUk0sIEdSRUVOLCBjb3VudCwg
Tk9STSk7CisJCXByaW50ZigiJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyA6ICVzJWx1JXMgdGltZXMl
cyIsIEdSRUVOLCAoc2VhcmNoLT5DQVRFR09SWSA/IHNlYXJjaC0+Q0FURUdPUlkgOiAiIiksIChz
ZWFyY2gtPkNBVEVHT1JZID8gIi8iOiAiIiksCisJCQkJCQkJQkxVRSwgKHNlYXJjaC0+UE4gPyBz
ZWFyY2gtPlBOIDogIiIpLCAgKHNlYXJjaC0+UFYgPyAiLSIgOiAiIiksIChzZWFyY2gtPlBWID8g
KHNlYXJjaC0+UFJfaW50ID8gc2VhcmNoLT5QVlIgOiBzZWFyY2gtPlBWKSA6ICIiKSwKKwkJCQkJ
CQlZRUxMT1csIChzZWFyY2gtPk9WRVJMQVkgPyAiOjoiIDogIiIpLCAoc2VhcmNoLT5PVkVSTEFZ
ID8gc2VhcmNoLT5PVkVSTEFZIDogIiIpLAorCQkJCQkJCU5PUk0sIEdSRUVOLCBjb3VudCwgTk9S
TSwKKwkJCQkJCQkodmVyYm9zZSA/ICIsIGZvciBhIHRvdGFsIHRpbWUgb2YgIiA6ICIiKSk7CisJ
CWlmICh2ZXJib3NlKSB7CisJCQlpZiAoaHVtYW5fcmVhZGFibGUpCisJCQkJcHJpbnRfc2Vjb25k
c19mb3JfZWFydGhsaW5ncyhtZXJnZV90aW1lKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiVzJWx1
JXMgc2Vjb25kcyIsIEdSRUVOLCBtZXJnZV90aW1lLCBOT1JNKTsKKwkJfQorCQlmcHV0YygnXG4n
LCBzdGRvdXQpOwogCX0KKwlhdG9tX2ltcGxvZGUoc2VhcmNoKTsKIAlyZXR1cm4gMDsKIH0KIAot
dm9pZCBzaG93X2VtZXJnZV9oaXN0b3J5KGNoYXIgbGlzdGZsYWcsIGludCBhcmdjLCBjaGFyICoq
YXJndiwgY29uc3QgY2hhciAqbG9nZmlsZSk7Ci12b2lkIHNob3dfZW1lcmdlX2hpc3RvcnkoY2hh
ciBsaXN0ZmxhZywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpsb2dmaWxlKQor
dm9pZCBzaG93X2VtZXJnZV9oaXN0b3J5KGNoYXIgbGlzdGZsYWcsIGNvbnN0IHNob3J0IHJlcG8s
IGNvbnN0IGNoYXIgcmVwb19zZWFyY2hbXSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBj
aGFyICpsb2dmaWxlKTsKK3ZvaWQgc2hvd19lbWVyZ2VfaGlzdG9yeShjaGFyIGxpc3RmbGFnLCBj
b25zdCBzaG9ydCByZXBvLCBjb25zdCBjaGFyIHJlcG9fc2VhcmNoW10sIGludCBhcmdjLCBjaGFy
ICoqYXJndiwgY29uc3QgY2hhciAqbG9nZmlsZSkKIHsKIAlGSUxFICpmcDsKIAljaGFyIGJ1ZltC
VUZTSVpdLCBtZXJnZWQ7CkBAIC0yMjIsMjMgKzI5MSwzMCBAQCB2b2lkIHNob3dfZW1lcmdlX2hp
c3RvcnkoY2hhciBsaXN0ZmxhZywgCiAJCWlmICgocCA9IHN0cmNocihidWYsICc6JykpID09IE5V
TEwpCiAJCQljb250aW51ZTsKIAkJKnAgPSAwOwotCQlxID0gcCArIDM7CisJCXEgPSBwICsgMjsK
IAogCQl0ID0gKHRpbWVfdCkgYXRvbChidWYpOwogCi0JCWlmICgobGlzdGZsYWcgJiBRTE9QX0xJ
U1QpICYmICFzdHJuY21wKHEsICI6OjogY29tcGxldGVkIGVtZXJnZSAoIiwgMjIpKSB7CisJCWlm
ICgobGlzdGZsYWcgJiBRTE9QX0xJU1QpICYmICFzdHJuY21wKHEsICJmaW5pc2hlZCBpbnN0YWxs
IG9mIHBhY2thZ2UiLCAyNSkpIHsKIAkJCW1lcmdlZCA9IDE7Ci0JCQlpZiAoKHAgPSBzdHJjaHIo
cSwgJyknKSkgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQkJCXEgPSBwICsgMjsKKwkJCXAgPSBz
dHJzdHIocSwgInBhY2thZ2UiKTsKKwkJCXEgPSBwICsgMTsKIAkJCWlmICgocCA9IHN0cmNocihx
LCAnICcpKSA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwotCQkJKnAgPSAwOwotCQl9IGVsc2UgaWYg
KChsaXN0ZmxhZyAmIFFMT1BfVU5MSVNUKSAmJiAhc3RybmNtcChxLCAiPj4+IHVubWVyZ2Ugc3Vj
Y2VzczogIiwgMjEpKSB7CisJCQlxID0gcCArIDE7CisJCQlpZiAocmVwbykgeworCQkJCWlmICgo
cCA9IHN0cnN0cihxLCAiOjoiKSkgJiYgc3RybmNtcChwKzIsIHJlcG9fc2VhcmNoLCBzaXplb2Yo
cmVwb19zZWFyY2gpKSkKKwkJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAoKGxpc3Rm
bGFnICYgUUxPUF9VTkxJU1QpICYmICFzdHJuY21wKHEsICJmaW5pc2hlZCB1bmluc3RhbGwgb2Yg
cGFja2FnZSIsIDI5KSkgewogCQkJbWVyZ2VkID0gMDsKLQkJCWlmICgocCA9IHN0cmNocihxLCAn
OicpKSA9PSBOVUxMKQorCQkJcCA9IHN0cnN0cihxLCAicGFja2FnZSIpOworCQkJcSA9IHAgKyAx
OworCQkJaWYgKChwID0gc3RyY2hyKHEsICcgJykpID09IE5VTEwpCiAJCQkJY29udGludWU7Ci0J
CQlxID0gcCArIDI7CisJCQlxID0gcCArIDE7CisJCQlpZiAoKHAgPSBzdHJjaHIocCwgJzonKSkg
IT0gTlVMTCkKKwkJCQkqcCA9IDA7CiAJCX0KIAkJZWxzZQogCQkJY29udGludWU7CkBAIC0yNTgs
OCArMzM0LDggQEAgdm9pZCBzaG93X2VtZXJnZV9oaXN0b3J5KGNoYXIgbGlzdGZsYWcsIAogCWZj
bG9zZShmcCk7CiB9CiAKLXZvaWQgc2hvd19zeW5jX2hpc3RvcnkoY29uc3QgY2hhciAqbG9nZmls
ZSk7Ci12b2lkIHNob3dfc3luY19oaXN0b3J5KGNvbnN0IGNoYXIgKmxvZ2ZpbGUpCit2b2lkIHNo
b3dfc3luY19oaXN0b3J5KGNvbnN0IGNoYXIgKmxvZ2ZpbGUsIGNvbnN0IHNob3J0IHJlcG8sIGNo
YXIgcmVwb19zZWFyY2hbXSk7Cit2b2lkIHNob3dfc3luY19oaXN0b3J5KGNvbnN0IGNoYXIgKmxv
Z2ZpbGUsIGNvbnN0IHNob3J0IHJlcG8sIGNoYXIgcmVwb19zZWFyY2hbXSkKIHsKIAlGSUxFICpm
cDsKIAljaGFyIGJ1ZltCVUZTSVpdOwpAQCAtMjc0LDcgKzM1MCwxMCBAQCB2b2lkIHNob3dfc3lu
Y19oaXN0b3J5KGNvbnN0IGNoYXIgKmxvZ2ZpCiAJd2hpbGUgKChmZ2V0cyhidWYsIHNpemVvZihi
dWYpLCBmcCkpICE9IE5VTEwpIHsKIAkJaWYgKHN0cmxlbihidWYpIDwgMzUpCiAJCQljb250aW51
ZTsKLQkJaWYgKHN0cm5jbXAoYnVmKzEyLCAiPT09IFN5bmMgY29tcGxldGVkIHdpdGgiLCAyMykg
IT0gMCkKKwkJaWYgKHN0cm5jbXAoYnVmKzEyLCAiZmluaXNoZWQgc3luYyIsIDEzKSAhPSAwKQor
CQkJY29udGludWU7CisKKwkJaWYgKHJlcG8gJiYgc3Ryc3RyKGJ1ZiwgcmVwb19zZWFyY2gpID09
IE5VTEwpCiAJCQljb250aW51ZTsKIAogCQlpZiAoKHAgPSBzdHJjaHIoYnVmLCAnXG4nKSkgIT0g
TlVMTCkKQEAgLTI4MiwxMyArMzYxLDEzIEBAIHZvaWQgc2hvd19zeW5jX2hpc3RvcnkoY29uc3Qg
Y2hhciAqbG9nZmkKIAkJaWYgKChwID0gc3RyY2hyKGJ1ZiwgJzonKSkgPT0gTlVMTCkKIAkJCWNv
bnRpbnVlOwogCQkqcCA9IDA7Ci0JCXEgPSBwKzI7CisJCXEgPSBwKzE7CiAKIAkJdCA9ICh0aW1l
X3QpYXRvbChidWYpOwogCi0JCWlmICgocCA9IHN0cnN0cihxLCAid2l0aCIpKSA9PSBOVUxMKQor
CQlpZiAoKHAgPSBzdHJzdHIocSwgInJlcG9zaXRvcnkiKSkgPT0gTlVMTCkKIAkJCWNvbnRpbnVl
OwotCQlxID0gcCArIDU7CisJCXEgPSBwICsgMTE7CiAKIAkJcHJpbnRmKCIlcyA+Pj4gJXMlcyVz
XG4iLCBjaG9wX2N0aW1lKHQpLCBHUkVFTiwgcSwgTk9STSk7CiAJfQpAQCAtMzA0LDEwICszODMs
MTEgQEAgdm9pZCBzaG93X2N1cnJlbnRfZW1lcmdlKHZvaWQpCiAJcGlkX3QgcGlkOwogCWNoYXIg
YnVmW0JVRlNJWkVdLCBidWZzdGF0WzMwMF07CiAJY2hhciBwYXRoWzUwXTsKLQljaGFyICpwLCAq
cTsKKwljaGFyICpwLCAqcSwgKmNhdCwgKnBudjsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnRf
dGltZSA9IDA7CiAJZG91YmxlIHVwdGltZV9zZWNzOwogCXRpbWVfdCBzdGFydF9kYXRlOworCW92
ZXJsYXlfdCAqb3ZlcmxheV90bXA7CiAKIAlpZiAoKHByb2MgPSBvcGVuZGlyKCIvcHJvYyIpKSA9
PSBOVUxMKSB7CiAJCXdhcm5wKCJDb3VsZCBub3Qgb3BlbiAvcHJvYyIpOwpAQCAtMzE5LDE1ICsz
OTksNDMgQEAgdm9pZCBzaG93X2N1cnJlbnRfZW1lcmdlKHZvaWQpCiAJCWlmICgocGlkID0gKHBp
ZF90KWF0b2woZGUtPmRfbmFtZSkpID09IDApCiAJCQljb250aW51ZTsKIAotCQkvKiBwb3J0YWdl
IHJlbmFtZXMgdGhlIGNtZGxpbmUgc28gdGhlIHBhY2thZ2UgbmFtZSBpcyBmaXJzdCAqLwogCQlz
bnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIvcHJvYy8laS9jbWRsaW5lIiwgcGlkKTsKIAkJ
aWYgKCFlYXRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkKIAkJCWNvbnRpbnVlOwogCi0J
CWlmIChidWZbMF0gPT0gJ1snICYmIChwID0gc3RyY2hyKGJ1ZiwgJ10nKSkgIT0gTlVMTCAmJiBz
dHJzdHIoYnVmLCAic2FuZGJveCIpICE9IE5VTEwpIHsKLQkJCSpwID0gJ1wwJzsKLQkJCXAgPSBi
dWYrMTsKLQkJCXEgPSBwICsgc3RybGVuKHApICsgMTsKKwkJaWYgKCEgc3RybmNtcChidWYsICJz
YW5kYm94IiwgNykpIHsKKwkJCS8qCQkJICAwMTIzNDU2Nzg5MDEyMzQ1Njc4ICovCisJCQlpZiAo
IShwID0gc3Ryc3RyKCZidWZbOF0sInBhbHVkaXMvZWJ1aWxkLmJhc2giKSkpCisJCQkJY29udGlu
dWU7CisKKwkJCXEgPSBwICsgMjA7CisJCQlpZiAoKnEgIT0gJy8nKQorCQkJCWNvbnRpbnVlOwor
CisJCQkvKgorCQkJICogZXg6IC92YXIvcGFsdWRpcy9yZXBvc2l0b3JpZXMvbG9jYWwvY2F0ZWdv
cnkvcGFja2FnZV9uYW1lL3BhY2thZ2VfbmFtZV92ZXJzaW9uLmVidWlsZAorCQkJICogZXhwZWN0
ZWQ6CisJCQkgKiAgICAgcQkJCSAgICAgICBjYXQgICAgIDAJICAgICBwbnYKKwkJCSAqLworCQkJ
aWYgKHEgPT0gKHBudj1zdHJyY2hyKHEsICcvJykpKQorCQkJCWNvbnRpbnVlOworCQkJKnBudiA9
IDA7CisJCQlwbnYrKzsKKwkJCWlmIChxID09IChjYXQ9c3RycmNocihxLCAnLycpKSkKKwkJCQlj
b250aW51ZTsKKwkJCSpjYXQgPSAwOworCQkJaWYgKHEgPT0gKGNhdD1zdHJyY2hyKHEsICcvJykp
KQorCQkJCWNvbnRpbnVlOworCQkJKmNhdCA9IDA7CisJCQljYXQrKzsKKwkJCW92ZXJsYXlfdG1w
PWZpcnN0X292ZXJsYXk7CisJCQlkbyB7CisJCQkJaWYgKCFzdHJjbXAocSwgb3ZlcmxheV90bXAt
PnBhdGgpKQorCQkJCQlicmVhazsKKwkJCX0gd2hpbGUgKChvdmVybGF5X3RtcD1vdmVybGF5X3Rt
cC0+bmV4dCkpOworCisJCQlpZiAoTlVMTCA9PSBvdmVybGF5X3RtcCkKKwkJCQljb250aW51ZTsK
IAogCQkJLyogb3BlbiB0aGUgc3RhdCBmaWxlIHRvIGZpZ3VyZSBvdXQgaG93IGxvbmcgd2UgaGF2
ZSBiZWVuIHJ1bm5pbmcgKi8KIAkJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9wcm9j
LyVpL3N0YXQiLCBwaWQpOwpAQCAtMzU2LDEwICs0NjQsMTAgQEAgdm9pZCBzaG93X2N1cnJlbnRf
ZW1lcmdlKHZvaWQpCiAJCQkvKiBmaWd1cmUgb3V0IHdoZW4gdGhpcyB0aGluZyBzdGFydGVkIGFu
ZCB0aGVuIHNob3cgaXQgKi8KIAkJCXN0YXJ0X2RhdGUgPSB0aW1lKDApIC0gKHVwdGltZV9zZWNz
IC0gKHN0YXJ0X3RpbWUgLyBIWikpOwogCQkJcHJpbnRmKAotCQkJCSIgJXMqJXMgJXMlcyVzXG4i
CisJCQkJIiAlcyolcyAlczo6JXMlcyVzLyVzJXNcbiIKIAkJCQkiICAgICBzdGFydGVkOiAlcyVz
JXNcbiIKIAkJCQkiICAgICBlbGFwc2VkOiAiLCAvKiVzJWxsdSVzIHNlY29uZHNcbiIsKi8KLQkJ
CQlCT0xELCBOT1JNLCBCTFVFLCBwLCBOT1JNLAorCQkJCUJPTEQsIFlFTExPVywgb3ZlcmxheV90
bXAtPm5hbWUsIE5PUk0sIEJMVUUsIGNhdCwgcG52LCBOT1JNLAogCQkJCUdSRUVOLCBjaG9wX2N0
aW1lKHN0YXJ0X2RhdGUpLCBOT1JNKTsKIAkJCXByaW50X3NlY29uZHNfZm9yX2VhcnRobGluZ3Mo
dXB0aW1lX3NlY3MgLSAoc3RhcnRfdGltZSAvIEhaKSk7CiAJCQlwdXRzKE5PUk0pOwpAQCAtMzgw
LDYgKzQ4OCwxMCBAQCB2b2lkIHNob3dfY3VycmVudF9lbWVyZ2Uodm9pZCkKIAljaGFyICpwLCAq
cTsKIAl0aW1lX3Qgc3RhcnRfZGF0ZSA9IDA7CiAKKwkvKiB0aGlzIHdvdWxkIG5lZWQgdG8gYmUg
d3JpdHRlbiBmb3IgcGFsdWRpcywgYnV0IEkgZG9uJ3QgcmVhbGx5IGtub3cgKkJTRCAqLworCXdh
cm4oIllvdSBuZWVkIHRvIGFkYXB0IHRoZSBzaG93X2N1cnJlbnRfZW1lcmdlKHZvaWQpIGZ1bmN0
aW9uIGZvciBfX0ZyZWVCU0RfX1xuIgorCQkidGhpcyBtYXkgYmUgdHJpdmlhbCwganVzdCBkbyBh
cyBpbiB0aGUgX19saW51eF9fIG9uZSwgYnV0IGFzIEkgY2FuJ3QgdGVzdCBpdCwgSSBkaWRuJ3Qg
bWFrZSBpdCIpOworCiAJaWYgKCEgKGtkID0ga3ZtX29wZW4oIi9kZXYvbnVsbCIsICIvZGV2L251
bGwiLCAiL2Rldi9udWxsIiwgT19SRE9OTFksICJrdm1fb3BlbiIpKSkgewogCQl3YXJucCgiQ291
bGQgbm90IG9wZW4ga3ZtOiAlcyIsIGt2bV9nZXRlcnIoa2QpKTsKIAkJcmV0dXJuOwpAQCAtNDMz
LDEyICs1NDUsMTcgQEAgaW50IHFsb3BfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaW50
IGksIGF2ZXJhZ2UgPSAxOwogCWNoYXIgZG9fdGltZSwgZG9fbGlzdCwgZG9fdW5saXN0LCBkb19z
eW5jLCBkb19jdXJyZW50LCBkb19odW1hbl9yZWFkYWJsZSA9IDA7CiAJY2hhciAqb3B0X2xvZ2Zp
bGU7CisJc2hvcnQgcmVwbzsKKwljaGFyIHJlcG9fc2VhcmNoWzY0XTsKIAljb25zdCBjaGFyICps
b2dmaWxlID0gUUxPUF9ERUZBVUxUX0xPR0ZJTEU7CisJb3ZlcmxheV90ICpvdmVybGF5X3RtcDsK
IAogCURCRygiYXJnYz0lZCBhcmd2WzBdPSVzIGFyZ3ZbMV09JXMiLAogCQlhcmdjLCBhcmd2WzBd
LCBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiTlVMTD8iKTsKIAogCW9wdF9sb2dmaWxlID0gTlVMTDsK
KwlyZXBvID0gMDsKKwlyZXBvX3NlYXJjaFswXSA9IDA7CiAJZG9fdGltZSA9IGRvX2xpc3QgPSBk
b191bmxpc3QgPSBkb19zeW5jID0gZG9fY3VycmVudCA9IDA7CiAKIAl3aGlsZSAoKGkgPSBHRVRP
UFRfTE9ORyhRTE9QLCBxbG9wLCAiIikpICE9IC0xKSB7CkBAIC00NDgsNyArNTY1LDE0IEBAIGlu
dCBxbG9wX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJY2FzZSAndCc6IGRvX3RpbWUg
PSAxOyBicmVhazsKIAkJCWNhc2UgJ2wnOiBkb19saXN0ID0gMTsgYnJlYWs7CiAJCQljYXNlICd1
JzogZG9fdW5saXN0ID0gMTsgYnJlYWs7Ci0JCQljYXNlICdzJzogZG9fc3luYyA9IDE7IGJyZWFr
OworCQkJY2FzZSAncyc6CisJCQkJaWYgKGRvX3N5bmMpIGVycigiT25seSB1c2UgLXMgb3IgLVMg
b25jZSIpOworCQkJCWRvX3N5bmMgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnbyc6CisJCQkJ
cmVwbyA9IDE7CisJCQkJc3RybmNweShyZXBvX3NlYXJjaCwgb3B0YXJnLCBzaXplb2YocmVwb19z
ZWFyY2gpKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2MnOiBkb19jdXJyZW50ID0gMTsgYnJlYWs7
CiAJCQljYXNlICdnJzogZG9fdGltZSA9IDE7IGF2ZXJhZ2UgPSAwOyBicmVhazsKIAkJCWNhc2Ug
J0gnOiBkb19odW1hbl9yZWFkYWJsZSA9IDE7IGJyZWFrOwpAQCAtNDU4LDYgKzU4MiwxNiBAQCBp
bnQgcWxvcF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlicmVhazsKIAkJfQogCX0K
KwlpZiAocmVwbykgeworCQlvdmVybGF5X3RtcCA9IGZpcnN0X292ZXJsYXk7CisJCWRvIHsKKwkJ
CWlmICghc3RybmNtcChvdmVybGF5X3RtcC0+bmFtZSwgcmVwb19zZWFyY2gsIHNpemVvZihvdmVy
bGF5X3RtcC0+bmFtZSkpKQorCQkJCWJyZWFrOworCQl9IHdoaWxlICgob3ZlcmxheV90bXA9b3Zl
cmxheV90bXAtPm5leHQpKTsKKwkJaWYgKE5VTEwgPT0gb3ZlcmxheV90bXApCisJCQllcnIoIiVz
IDogVW5rbm93biBvdmVybGF5LCB0cnkgJ3EgLS1scy1vdmVybGF5cyciLCByZXBvX3NlYXJjaCk7
CisJfQorCiAJaWYgKCFkb19saXN0ICYmICFkb191bmxpc3QgJiYgIWRvX3RpbWUgJiYgIWRvX3N5
bmMgJiYgIWRvX2N1cnJlbnQpCiAJCXFsb3BfdXNhZ2UoRVhJVF9GQUlMVVJFKTsKIAlpZiAob3B0
X2xvZ2ZpbGUgIT0gTlVMTCkKQEAgLTQ2NywxOSArNjAxLDE5IEBAIGludCBxbG9wX21haW4oaW50
IGFyZ2MsIGNoYXIgKiphcmd2KQogCWFyZ3YgKz0gb3B0aW5kOwogCiAJaWYgKGRvX2xpc3QgJiYg
ZG9fdW5saXN0KQotCQlzaG93X2VtZXJnZV9oaXN0b3J5KFFMT1BfTElTVCB8IFFMT1BfVU5MSVNU
LCBhcmdjLCBhcmd2LCBsb2dmaWxlKTsKKwkJc2hvd19lbWVyZ2VfaGlzdG9yeShRTE9QX0xJU1Qg
fCBRTE9QX1VOTElTVCwgcmVwbywgcmVwb19zZWFyY2gsYXJnYywgYXJndiwgbG9nZmlsZSk7CiAJ
ZWxzZSBpZiAoZG9fbGlzdCkKLQkJc2hvd19lbWVyZ2VfaGlzdG9yeShRTE9QX0xJU1QsIGFyZ2Ms
IGFyZ3YsIGxvZ2ZpbGUpOworCQlzaG93X2VtZXJnZV9oaXN0b3J5KFFMT1BfTElTVCwgcmVwbywg
cmVwb19zZWFyY2gsIGFyZ2MsIGFyZ3YsIGxvZ2ZpbGUpOwogCWVsc2UgaWYgKGRvX3VubGlzdCkK
LQkJc2hvd19lbWVyZ2VfaGlzdG9yeShRTE9QX1VOTElTVCwgYXJnYywgYXJndiwgbG9nZmlsZSk7
CisJCXNob3dfZW1lcmdlX2hpc3RvcnkoUUxPUF9VTkxJU1QsIHJlcG8sIHJlcG9fc2VhcmNoLCBh
cmdjLCBhcmd2LCBsb2dmaWxlKTsKIAlpZiAoZG9fY3VycmVudCkKIAkJc2hvd19jdXJyZW50X2Vt
ZXJnZSgpOwogCWlmIChkb19zeW5jKQotCQlzaG93X3N5bmNfaGlzdG9yeShsb2dmaWxlKTsKKwkJ
c2hvd19zeW5jX2hpc3RvcnkobG9nZmlsZSwgcmVwbywgcmVwb19zZWFyY2gpOwogCiAJaWYgKGRv
X3RpbWUpIHsKIAkJZm9yIChpID0gMDsgaSA8IGFyZ2M7ICsraSkKLQkJCXNob3dfbWVyZ2VfdGlt
ZXMoYXJndltpXSwgbG9nZmlsZSwgYXZlcmFnZSwgZG9faHVtYW5fcmVhZGFibGUpOworCQkJc2hv
d19tZXJnZV90aW1lcyhhcmd2W2ldLCByZXBvLCByZXBvX3NlYXJjaCwgbG9nZmlsZSwgYXZlcmFn
ZSwgZG9faHVtYW5fcmVhZGFibGUpOwogCX0KIAogCWlmIChvcHRfbG9nZmlsZSkgZnJlZShvcHRf
bG9nZmlsZSk7CkBAIC00OTAsMyArNjI0LDUgQEAgaW50IHFsb3BfbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCiAjZWxzZQogREVGSU5FX0FQUExFVF9TVFVCKHFsb3ApCiAjZW5kaWYKKy8qIHZp
bTogc2V0IG5vZXQgc3RzPTggc3c9OCA6ICovCisKZGlmZiAtTmFydXAgcG9ydGFnZS11dGlscy0y
MDA3MDExNS5uZXcvcXNlYXJjaC5jIHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUuTkVXL3FzZWFyY2gu
YwotLS0gcG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcXNlYXJjaC5jCTIwMDctMDEtMTUgMTk6
MjE6NTguMzUzOTI4NTI3ICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xc2Vh
cmNoLmMJMjAwNy0wMS0xNSAxOToyMzoxMi4zNTM2Mzk0MDcgKzAxMDAKQEAgLTEwMCw3ICsxMDAs
NyBAQCBpbnQgcXNlYXJjaF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAl9CiAKIAlsYXN0
WzBdID0gMDsKLQlmcCA9IGZvcGVuKGluaXRpYWxpemVfZmxhdChzZWFyY2hfY2FjaGUpLCAiciIp
OworCWZwID0gZm9wZW4oaW5pdGlhbGl6ZV9mbGF0KHNlYXJjaF9jYWNoZSwgMCksICJyIik7CiAJ
aWYgKCFmcCkKIAkJcmV0dXJuIDE7CiAKQEAgLTEzNyw3ICsxMzcsNiBAQCBpbnQgcXNlYXJjaF9t
YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJCWlmIChjaGRpcihjdXJfb3ZlcmxheS0+
cGF0aCkgIT0gMCkgewogCQkJCQkJCXdhcm5wKCJjaGRpciB0byAnJXMnIGZhaWxlZCIsIGN1cl9v
dmVybGF5LT5wYXRoKTsKIAkJCQkJCQlteWVycm9yID0gMTsKLQkJCQkJCQljb250aW51ZTsKIAkJ
CQkJCX0gZWxzZQogCQkJCQkJCWJhZF9vdmVybGF5ID0gMDsKIAkJCQkJCWJyZWFrOwpAQCAtMTQ1
LDcgKzE0NCw2IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ
CQkJaWYgKGNoZGlyKGN1cl9vdmVybGF5LT5jYWNoZSkgIT0gMCkgewogCQkJCQkJCXdhcm5wKCJj
aGRpciB0byAnJXMnIGZhaWxlZCwgc2tpcHBpbmcgdGhlICVzIHJlcG9zaXRvcnkiLCBjdXJfb3Zl
cmxheS0+Y2FjaGUsIGN1cl9vdmVybGF5LT5uYW1lKTsKIAkJCQkJCQlteWVycm9yID0gMTsKLQkJ
CQkJCQljb250aW51ZTsKIAkJCQkJCX0gZWxzZQogCQkJCQkJCWJhZF9vdmVybGF5ID0gMDsKIAkJ
CQkJCWJyZWFrOwpAQCAtMTU0LDcgKzE1Miw3IEBAIGludCBxc2VhcmNoX21haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQogCQkJCQlteWVycm9yID0gMTsKIAkJCQlzdHJuY3B5KG92ZXJsYXlfbmFt
ZSwgcCsyLCBzaXplb2Yob3ZlcmxheV9uYW1lKSk7CiAJCQl9Ci0JCX0gZWxzZQorCQl9IGVsc2Ug
CiAJCQlteWVycm9yKys7CiAKIAkJaWYgKG15ZXJyb3IpIHsKQEAgLTI3MSwzICsyNjksNSBAQCBu
b19jYWNoZV9lYnVpbGRfbWF0Y2g6CiAjZWxzZQogREVGSU5FX0FQUExFVF9TVFVCKHFzZWFyY2gp
CiAjZW5kaWYKKy8qIHZpbTogc2V0IG5vZXQgc3RzPTggc3c9OCA6ICovCisKZGlmZiAtTmFydXAg
cG9ydGFnZS11dGlscy0yMDA3MDExNS5uZXcvcXNpemUuYyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1
Lk5FVy9xc2l6ZS5jCi0tLSBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lm5ldy9xc2l6ZS5jCTIwMDct
MDEtMTUgMTk6MjE6MDUuMDEyMDY2MTYzICswMTAwCisrKyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1
Lk5FVy9xc2l6ZS5jCTIwMDctMDEtMTUgMTk6MjM6MTIuMzYyNjM4MDM1ICswMTAwCkBAIC02OCwx
MCArNjgsMTAgQEAgaW50IHFzaXplX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICgo
YXJnYyA9PSBvcHRpbmQpICYmICFzZWFyY2hfYWxsKQogCQlxc2l6ZV91c2FnZShFWElUX0ZBSUxV
UkUpOwogCi0JaWYgKGNoZGlyKHBvcnRyb290KSkKLQkJZXJycCgiY291bGQgbm90IGNoZGlyKCVz
KSBmb3IgUk9PVCIsIHBvcnRyb290KTsKKwlpZiAoY2hkaXIocG9ydHZkYikpCisJCWVycnAoImNv
dWxkIG5vdCBjaGRpciglcykgZm9yIFZEQiIsIHBvcnR2ZGIpOwogCi0JaWYgKGNoZGlyKHBvcnR2
ZGIpICE9IDAgfHwgKGRpciA9IG9wZW5kaXIoIi4iKSkgPT0gTlVMTCkKKwlpZiAoKGRpciA9IG9w
ZW5kaXIoIi4iKSkgPT0gTlVMTCkKIAkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKIAogCW51bV9hbGxf
Ynl0ZXMgPSBudW1fYWxsX2ZpbGVzID0gbnVtX2FsbF9ub25maWxlcyA9IDA7CkBAIC05MSw5ICs5
MSw5IEBAIGludCBxc2l6ZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQkJLyogc2Vl
IGlmIHRoaXMgY2F0L3BrZyBpcyByZXF1ZXN0ZWQgKi8KIAkJCWlmICghc2VhcmNoX2FsbCkgewor
CQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lczo6JXMiLCBkZW50cnktPmRfbmFt
ZSwKKwkJCQkJIGRlLT5kX25hbWUsIGdyYWJfdmRiX2l0ZW0oIlJFUE9TSVRPUlkiLCBkZW50cnkt
PmRfbmFtZSwgZGUtPmRfbmFtZSkpOwogCQkJCWZvciAoaSA9IG9wdGluZDsgaSA8IGFyZ2M7ICsr
aSkgewotCQkJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXMiLCBkZW50cnktPmRf
bmFtZSwKLQkJCQkJICAgICAgICAgZGUtPmRfbmFtZSk7CiAJCQkJCWlmIChyZW1hdGNoKGFyZ3Zb
aV0sIGJ1ZiwgUkVHX0VYVEVOREVEKSA9PSAwKQogCQkJCQkJYnJlYWs7CiAJCQkJCWlmIChyZW1h
dGNoKGFyZ3ZbaV0sIGRlLT5kX25hbWUsIFJFR19FWFRFTkRFRCkgPT0gMCkKQEAgLTEwMyw3ICsx
MDMsNyBAQCBpbnQgcXNpemVfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWNvbnRp
bnVlOwogCQkJfQogCi0JCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcy8lcy8lcy9D
T05URU5UUyIsIHBvcnRyb290LCBwb3J0dmRiLAorCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIiVzLyVzLyVzL0NPTlRFTlRTIiwgcG9ydHZkYiwKIAkJCSAgICAgICAgIGRlbnRyeS0+ZF9u
YW1lLCBkZS0+ZF9uYW1lKTsKIAkJCWlmICgoZnAgPSBmb3BlbihidWYsICJyIikpID09IE5VTEwp
CiAJCQkJY29udGludWU7CkBAIC0xMjgsOCArMTI4LDkgQEAgaW50IHFzaXplX21haW4oaW50IGFy
Z2MsIGNoYXIgKiphcmd2KQogCQkJbnVtX2FsbF9maWxlcyArPSBudW1fZmlsZXM7CiAJCQludW1f
YWxsX25vbmZpbGVzICs9IG51bV9ub25maWxlczsKIAkJCWlmICghc3VtbWFyeV9vbmx5KSB7Ci0J
CQkJcHJpbnRmKCIlcyVzLyVzJXMlczogJWx1IGZpbGVzLCAlbHUgbm9uLWZpbGVzLCAiLCBCT0xE
LAotCQkJCSAgICAgICBiYXNlbmFtZShkZW50cnktPmRfbmFtZSksIEJMVUUsIGRlLT5kX25hbWUs
IE5PUk0sCisJCQkJcHJpbnRmKCIlcyVzLyVzJXMlczo6JXMlcyA6ICVsdSBmaWxlcywgJWx1IG5v
bi1maWxlcywgIiwgQk9MRCwKKwkJCQkgICAgICAgYmFzZW5hbWUoZGVudHJ5LT5kX25hbWUpLCBC
TFVFLCBkZS0+ZF9uYW1lLCAKKwkJCQkgICAgICAgWUVMTE9XLCBncmFiX3ZkYl9pdGVtKCJSRVBP
U0lUT1JZIiwgZGVudHJ5LT5kX25hbWUsIGRlLT5kX25hbWUpLCBOT1JNLAogCQkJCSAgICAgICAo
dW5zaWduZWQgbG9uZyludW1fZmlsZXMsCiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKW51bV9u
b25maWxlcyk7CiAJCQkJaWYgKGRpc3BfdW5pdHMpCmRpZmYgLU5hcnVwIHBvcnRhZ2UtdXRpbHMt
MjAwNzAxMTUubmV3L3F1c2UuYyBwb3J0YWdlLXV0aWxzLTIwMDcwMTE1Lk5FVy9xdXNlLmMKLS0t
IHBvcnRhZ2UtdXRpbHMtMjAwNzAxMTUubmV3L3F1c2UuYwkyMDA3LTAxLTE1IDE5OjIxOjU4LjM2
MTkyNzMwNyArMDEwMAorKysgcG9ydGFnZS11dGlscy0yMDA3MDExNS5ORVcvcXVzZS5jCTIwMDct
MDEtMTUgMTk6MjM6MTIuMzcwNjM2ODE1ICswMTAwCkBAIC0zMDUsNyArMzA1LDcgQEAgaW50IHF1
c2VfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKGlkeCA9PSAtMSkKIAkJcmV0dXJu
IHF1c2VfZGVzY3JpYmVfZmxhZyhvcHRpbmQsIHJlcG8sIHJlcG9fc2VhcmNoLCBhcmdjLCBhcmd2
KTsKIAotCWluaXRpYWxpemVfZWJ1aWxkX2ZsYXQoKTsJLyogc2V0cyBvdXIgcHdkIHRvICRQT1JU
RElSICovCisJaW5pdGlhbGl6ZV9lYnVpbGRfZmxhdCgwKTsJLyogc2V0cyBvdXIgcHdkIHRvICRQ
T1JURElSICovCiAKIAlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaF92YXJzW2lkeF0pOwogCWFz
c2VydChzZWFyY2hfbGVuIDwgc2l6ZW9mKGJ1ZjApKTsKQEAgLTUyMywzICs1MjMsNSBAQCBpbnQg
cXVzZV9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICNlbHNlCiBERUZJTkVfQVBQTEVUX1NU
VUIocXVzZSkKICNlbmRpZgorLyogdmltOiBzZXQgbm9ldCBzdHM9OCBzdz04IDogKi8KKwo=
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>107450</attachid>
            <date>2007-01-19 15:18 0000</date>
            <desc>overlay-support.patch portage2paludis.patch and more..</desc>
            <filename></filename>
            <type>text/plain</type>
            <data encoding="base64">aHR0cDovL2ZhdGltYWRlbWUuZnJlZS5mci9wb3J0YWdlLXV0aWxzL3BhdGNoZXNfaWZfVV93YW50
XzJfc2VlX3RoZW0v
</data>        

          </attachment>
    </bug>

</bugzilla>