info-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

unsubscribe


From: Kelly, Linda
Subject: unsubscribe
Date: Mon, 26 Mar 2001 17:00:37 -0500

I do not wish to receive these newsletters.  But thanks for letting me try
it!

Linda Kelly

-----Original Message-----
From: address@hidden [mailto:address@hidden
Sent: Monday, March 26, 2001 2:42 PM
To: address@hidden
Subject: Info-cvs digest, Vol 1 #394 - 11 msgs


Send Info-cvs mailing list submissions to
        address@hidden

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.gnu.org/mailman/listinfo/info-cvs
or, via email, send a message with subject or body 'help' to
        address@hidden

You can reach the person managing the list at
        address@hidden

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Info-cvs digest..."


Today's Topics:

   1. Heres your Surprise!!! From Erica!! (Miss Erica)
   2. Re: Why the split for rcvs? (Alexandre Parenteau)
   3. Uninstall CVS (Jeeva Sarma)
   4. Re: Problem... (Gerhard Sittig)
   5. Re:Uninstall CVS (Jeeva Sarma)
   6. Re: update -p on removed files. (Larry Jones)
   7. Re: Uninstall CVS (Larry Jones)
   8. Re: EmptyDir in CVSROOT direcotory (Eric Siegerman)
   9. Re: EmptyDir in CVSROOT direcotory (Larry Jones)
  10. Re: Build system with CVS (Greg A. Woods)
  11. RE: feature question (Noel L Yap)

--__--__--

Message: 1
From: "Miss Erica" <address@hidden>
To: <address@hidden>
Date: Tue, 27 Mar 01 03:10:13 -0800
Subject: Heres your Surprise!!! From Erica!!
Reply-To: "Miss Erica" <address@hidden>


I hope you liked my new homepage..

well you all asked me to do it.. so here it is :))

http://go.to/ericasmovies/
Ive put my whole collection every photo ive taken up on the web, plus Ive
made over 20 
movies LOL.. theres over 40 megs of movies alone. hehehe

I hope you like my new site as much as I loved making it all :))
Luv
Erica Web !!! 



--__--__--

Message: 2
From: "Alexandre Parenteau" <address@hidden>
To: "Greg A. Woods" <address@hidden>,
        "Jerzy Kaczorowski" <address@hidden>
Cc: "Derek R. Price" <address@hidden>,
        "Noel L Yap" <address@hidden>,
        <address@hidden>
Subject: Re: Why the split for rcvs?
Date: Mon, 26 Mar 2001 10:30:02 -0700

> Then there are the bells&whistles feature nuts....  "No patch must ever
> go un-applied!"  :-)
> 
> Now if someone with deep pockets were to pay someone like me to do a
> slight re-design and full re-write....   :-)

Yeah right....

There won't be any deep pockets.

There will be more and more users.

The questions is not how to reorganize the source code, it's when.

Regards,
alex.

> 
> -- 
> Greg A. Woods
> 
> +1 416 218-0098      VE3TCP      <address@hidden>      <robohack!woods>
> Planix, Inc. <address@hidden>; Secrets of the Weird <address@hidden>
> 
> _______________________________________________
> Info-cvs mailing list
> address@hidden
> http://mail.gnu.org/mailman/listinfo/info-cvs
> 



--__--__--

Message: 3
Date: Mon, 26 Mar 2001 11:11:08 -0800 (PST)
From: Jeeva Sarma <address@hidden>
Subject: Uninstall CVS
To: address@hidden

Hi

I want to upgrade my cvs server to 1.11.To uninstall
the old version,which are all the files/exes that I
need to remove??Can someone help me with this?

Thanks in advance,
Jeeva Sarma

__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/


--__--__--

Message: 4
Date: Mon, 26 Mar 2001 20:15:55 +0200
From: Gerhard Sittig <address@hidden>
To: address@hidden
Subject: Re: Problem...
Organization: System Defenestrators Inc.

On Mon, Mar 26, 2001 at 12:16 -0800, Danijel Kopcinovic wrote:
> 
> My problem is as follows: I import a directory containing
> certain text file to CVS repository. When I do the checkout of
> the same directory, I get a copy of that file with different
> size than before it was imported, and when running diff tool on
> the two files, I get that the files differ "totally", with the
> same text being recognized as different. I guess the problem is
> some text converting, but I don't get why it occurs only on
> that specific file.

Count the lines, this will be the difference in size.  Visit the
list's archive as well as thoroughly look at the program's
accompanying doc and make sure you understand the line end thingy
which is handled in completely different ways on every platform.
Plus how this is treated by the different clients and access
methods.  Read on about the "binary" flags and how they can solve
or worsen your problem.

Since you neither specify which OS you run on nor the CVS
version(s) you use nor the method you acces the repo with there's
not much more help you can get ...


virtually yours   82D1 9B9C 01DC 4FB4 D7B4  61BE 3F49 4F77 72DE DA76
Gerhard Sittig   true | mail -s "get gpg key" address@hidden
-- 
     If you don't understand or are scared by any of the above
             ask your parents or an adult to help you.


--__--__--

Message: 5
Date: Mon, 26 Mar 2001 11:29:40 -0800 (PST)
From: Jeeva Sarma <address@hidden>
Subject: Re:Uninstall CVS
To: address@hidden

Hi
I forgot to mention that my server(version 1.10.7) is
on Unix.(Free BSD)
Thanks,
Jeeva Sarma

Hi

I want to upgrade my cvs server to 1.11.To uninstall
the old version,which are all the files/exes that I
need to remove??Can someone help me with this?

Thanks in advance,
Jeeva Sarma


__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/


--__--__--

Message: 6
Subject: Re: update -p on removed files.
To: address@hidden (Milos Kleint)
Date: Mon, 26 Mar 2001 14:48:38 -0500 (EST)
Cc: address@hidden
From: address@hidden (Larry Jones)

Milos Kleint writes:
> 
> to obtain the right revision I perform cvs update -p -r 1.1 to get one
> of the revisions being compared.
> 
> This works just fine, except the case when the file was locally removed.
> Then the server returns this line:
> E cvs server: conflict: removed
> javacvs/libsrc/org/netbeans/lib/cvsclient/Client.java was modified by
> second party
[...]
> Is this intended behaviour or a bug?

I don't think it was intended, but I'm not sure I'd call it a bug,
either; more an unintended interaction.  I've checked in a fix.

-Larry Jones

Who, ME?  Who?! Me??  WHO... Me?!  Who, me??? -- Calvin


--__--__--

Message: 7
Subject: Re: Uninstall CVS
To: address@hidden (Jeeva Sarma)
Date: Mon, 26 Mar 2001 14:56:04 -0500 (EST)
Cc: address@hidden
From: address@hidden (Larry Jones)

Jeeva Sarma writes:
> 
> I want to upgrade my cvs server to 1.11.To uninstall
> the old version,which are all the files/exes that I
> need to remove??Can someone help me with this?

You shouldn't need to uninstall anything -- just install the new
version.

-Larry Jones

He piqued my curiosity. -- Calvin


--__--__--

Message: 8
Date: Mon, 26 Mar 2001 15:23:14 -0500
From: Eric Siegerman <address@hidden>
To: address@hidden
Subject: Re: EmptyDir in CVSROOT direcotory
Organization: Telepresence Systems Inc.

On Mon, Mar 26, 2001 at 11:17:29AM -0500, Larry Jones wrote:
> Once [CVSROOT/Emptydir] has been created
> (by whatever means), there's no longer any need to have CVSROOT be
> writable for the sake of Emptydir.

Is it also the case that Emptydir itself doesn't need to be
writable?

--

|  | /\
|-_|/  >   Eric Siegerman, Toronto, Ont.        address@hidden
|  |  /
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea.
        - RFC 1925 (quoting an unnamed source)


--__--__--

Message: 9
Subject: Re: EmptyDir in CVSROOT direcotory
To: address@hidden (Eric Siegerman)
Date: Mon, 26 Mar 2001 15:58:57 -0500 (EST)
Cc: address@hidden
From: address@hidden (Larry Jones)

Eric Siegerman writes:
> 
> Is it also the case that Emptydir itself doesn't need to be
> writable?

If you're not using LockDir in CVSROOT/config, Emptydir needs to be
writable so that users can create lock files in it; if you are using
LockDir to put the lock files elsewhere, then it does not need to be
writable.

-Larry Jones

It's no fun to play games with a poor sport. -- Calvin


--__--__--

Message: 10
From: address@hidden (Greg A. Woods)
To: Jakob Hummes <address@hidden>
Cc: CVS-II Discussion Mailing List <address@hidden>
Subject: Re: Build system with CVS
Reply-To: address@hidden (CVS-II Discussion Mailing List)
Organization: Planix, Inc.; Toronto, Ontario; Canada
Date: Mon, 26 Mar 2001 16:10:20 -0500 (EST)

[ On Monday, March 26, 2001 at 11:59:35 (+0200), Jakob Hummes wrote: ]
> Subject: Re: Build system with CVS
>
> Well, you're right.  This would be a solution.
> Unfortunately branching and especially merging is heavy-weight (i.e.
> complicated) in CVS.  Since, in general, no two branches exist for the
> same file in our repository, I wanted to avoid branching if possible.

In CVS branches are designed to work across all of the files in a given
module simultaneously.  You should never branch one file at a time.

Though the implications aren't as dire, the same can be said of tags.

> Is there a reason, why CVS does not support the possibilty to specify a
> set of tags or revision numbers in the checkout or update functions,
> which will checkout the latest of these revisions (if more than one
> tag/revision numbres matches)?

CVS is designed to expect all files in a module to be tagged
simultaneously.

-- 
                                                        Greg A. Woods

+1 416 218-0098      VE3TCP      <address@hidden>      <robohack!woods>
Planix, Inc. <address@hidden>; Secrets of the Weird <address@hidden>


--__--__--

Message: 11
From: "Noel L Yap" <address@hidden>
To: address@hidden
cc: address@hidden, address@hidden
Date: Mon, 26 Mar 2001 17:35:00 -0400
Subject: RE: feature question

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: text/plain; charset=us-ascii
Content-Disposition: inline

Great!  More volunteers.  I've enclosed some of my patches (against
cvs-1.11).
What's needed are tests in sanity.sh (I've listed test cases in another
email --
if you need me to repeat, I'll find the email and do so) and documentation.

I'm not sure who else is working on these but I see no problems with people
working in parallel (even on the same stuff), so it's up to you to
coordinate if
you want.

Thanks,
Noel

Enc
(See attached file: enh-multiple_edits.diff)(See attached file:
enh-unedit_editor.diff)(See attached file: enh-reservations.diff)(See
attached
file: enh-multiple_edits+reservations.diff)(See attached file:
fix-clean_update_no_abort_on_merge.diff)(See attached file:
fix-default_fileattrs.diff)(See attached file:
fix-edit_fields_with_plus.diff)




address@hidden on 2001.03.26 11:51:02

To:   address@hidden, address@hidden
cc:   address@hidden
Subject:  RE: feature question




Ah, that's what it does... FWIW, I'd appreciate seeing this in the main CVS
distribution, since otherwise I always simulate all this with my awful shell
scripts.

For those who care, it's not because reserved locks are useful in code, it's
because they're useful when the repository is holding the Linux config
files, which are somewhat more difficult to test merges with, so I usually
apply KISS rules to it. Code, I feel, makes no difference whether you allow
concurrent edits or not - the testing / reintegration problem stays the
same.

Noel, if there's anything I can do to help get these patches into the main
distribution, then feel free to drop me a mail.

-----Original Message-----
From: Noel L Yap [mailto:address@hidden
Sent: Monday, March 26, 2001 4:37 PM
To: address@hidden
Cc: address@hidden
Subject: RE: feature question


For the major enhancements (reserved locks and multiple edits per user),
I've
fished them out into separate (and merged) patches.  These need to be tested
(I've done very minor testing -- sometimes just to check if they compile)
and
documented.

Specifically, the features that need testing are:
1. "cvs edit -c" actually aborts the edit if other edits exist.
2. "cvs edit -f" will force the edit in the event that "edit -c" is in
~/.cvsrc.
3. "cvs ci -c" actually aborts the edit if a valid edit doesn't exist.
4. "cvs editors" reports edits properly.
5. "cvs unedit" unedits edits properly.

All of the above must work for different combinations of feature-support
between
client and server.  For example:
1. Non-patched client against patched server.
2. Patched client against non-patched server.
3. Patched client against patched server.

As Derek has pointed out, sanity.sh can cover the first five, but it can't
test
the different combinations of client/server.

I think I've covered all the cases, but I may still be missing something.

Noel




address@hidden on 2001.03.25 17:44:09

To:   address@hidden
cc:   address@hidden
Subject:  RE: feature question




I'm using the distribution from http://www.cvsnt.com/. And it's been working
just fine. The accompanying readme file does not specify that a patch has
been applied, so I just assumed that it is now a standard option.

Noel, what exactly are you still left with there? I do not have much free
time, but a little that I have I would be willing to look at whatever is
left outstanding. I need to see how much is left before I can tell you if I
can take it on or not.

have a day,
     Sasa

-----Original Message-----
From: Noel L Yap [mailto:address@hidden
Sent: Saturday, 24 March 2001 1:50 AM
To: address@hidden
Cc: address@hidden
Subject: Re: feature question


Are you sure you're not using a Windows version that's been patched?

Noel




address@hidden on 2001.03.23 01:39:59

To:   address@hidden
cc:   (bcc: Noel L Yap)
Subject:  feature question




Clear DayWhy did not 'edit -c' make it to the cvs 1.11 and yet it is on the
windows version of cvs 1.10.8?

have a day,
    Sasa
==========================================
Sasa Brcerevic
Technology Partners Group

Phone:   +61 1800 155 577
Direct:  +61 (02) 4925 1535
Mobile:  +61 (0416) 297 442
Email:   address@hidden
WWW:     www.technologypartnersgroup.com
==========================================








_______________________________________________
Info-cvs mailing list
address@hidden
http://mail.gnu.org/mailman/listinfo/info-cvs





This communication is for informational purposes only.  It is not intended
as
an offer or solicitation for the purchase or sale of any financial
instrument
or as an official confirmation of any transaction. All market prices, data
and other information are not warranted as to completeness or accuracy and
are subject to change without notice. Any comments or statements made herein
do not necessarily reflect those of J.P. Morgan Chase & Co., its
subsidiaries and affiliates.


_______________________________________________
Info-cvs mailing list
address@hidden
http://mail.gnu.org/mailman/listinfo/info-cvs


--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: text/html; 
        name="att1.htm"
Content-Disposition: attachment; filename="att1.htm"
Content-transfer-encoding: base64
Content-Description: Internet HTML

PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMi8vRU4iPg0KPEhUTUw+
DQo8SEVBRD4NCjxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9o
dG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPg0KPE1FVEEgTkFNRT0iR2VuZXJhdG9yIiBDT05URU5U
PSJNUyBFeGNoYW5nZSBTZXJ2ZXIgdmVyc2lvbiA1LjUuMjY1My4xMiI+DQo8VElUTEU+UkU6IGZl
YXR1cmUgcXVlc3Rpb248L1RJVExFPg0KPC9IRUFEPg0KPEJPRFk+DQoNCjxQPjxGT05UIFNJWkU9
Mj5BaCwgdGhhdCdzIHdoYXQgaXQgZG9lcy4uLiBGV0lXLCBJJ2QgYXBwcmVjaWF0ZSBzZWVpbmcg
dGhpcyBpbiB0aGUgbWFpbiBDVlMgZGlzdHJpYnV0aW9uLCBzaW5jZSBvdGhlcndpc2UgSSBhbHdh
eXMgc2ltdWxhdGUgYWxsIHRoaXMgd2l0aCBteSBhd2Z1bCBzaGVsbCBzY3JpcHRzLjwvRk9OVD48
L1A+DQoNCjxQPjxGT05UIFNJWkU9Mj5Gb3IgdGhvc2Ugd2hvIGNhcmUsIGl0J3Mgbm90IGJlY2F1
c2UgcmVzZXJ2ZWQgbG9ja3MgYXJlIHVzZWZ1bCBpbiBjb2RlLCBpdCdzIGJlY2F1c2UgdGhleSdy
ZSB1c2VmdWwgd2hlbiB0aGUgcmVwb3NpdG9yeSBpcyBob2xkaW5nIHRoZSBMaW51eCBjb25maWcg
ZmlsZXMsIHdoaWNoIGFyZSBzb21ld2hhdCBtb3JlIGRpZmZpY3VsdCB0byB0ZXN0IG1lcmdlcyB3
aXRoLCBzbyBJIHVzdWFsbHkgYXBwbHkgS0lTUyBydWxlcyB0byBpdC4gQ29kZSwgSSBmZWVsLCBt
YWtlcyBubyBkaWZmZXJlbmNlIHdoZXRoZXIgeW91IGFsbG93IGNvbmN1cnJlbnQgZWRpdHMgb3Ig
bm90IC0gdGhlIHRlc3RpbmcgLyByZWludGVncmF0aW9uIHByb2JsZW0gc3RheXMgdGhlIHNhbWUu
PC9GT05UPjwvUD4NCg0KPFA+PEZPTlQgU0laRT0yPk5vZWwsIGlmIHRoZXJlJ3MgYW55dGhpbmcg
SSBjYW4gZG8gdG8gaGVscCBnZXQgdGhlc2UgcGF0Y2hlcyBpbnRvIHRoZSBtYWluIGRpc3RyaWJ1
dGlvbiwgdGhlbiBmZWVsIGZyZWUgdG8gZHJvcCBtZSBhIG1haWwuPC9GT05UPjwvUD4NCg0KPFA+
PEZPTlQgU0laRT0yPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tPC9GT05UPg0KPEJSPjxGT05U
IFNJWkU9Mj5Gcm9tOiBOb2VsIEwgWWFwIFs8QSBIUkVGPSJtYWlsdG86eWFwX25vZWxAanBtb3Jn
YW4uY29tIj5tYWlsdG86eWFwX25vZWxAanBtb3JnYW4uY29tPC9BPl08L0ZPTlQ+DQo8QlI+PEZP
TlQgU0laRT0yPlNlbnQ6IE1vbmRheSwgTWFyY2ggMjYsIDIwMDEgNDozNyBQTTwvRk9OVD4NCjxC
Uj48Rk9OVCBTSVpFPTI+VG86IHNhc2hhQHRlY2hub2xvZ3lwYXJ0bmVyc2dyb3VwLmNvbTwvRk9O
VD4NCjxCUj48Rk9OVCBTSVpFPTI+Q2M6IEluZm8tQ3ZzQEdudS5Pcmc8L0ZPTlQ+DQo8QlI+PEZP
TlQgU0laRT0yPlN1YmplY3Q6IFJFOiBmZWF0dXJlIHF1ZXN0aW9uPC9GT05UPg0KPC9QPg0KPEJS
Pg0KDQo8UD48Rk9OVCBTSVpFPTI+Rm9yIHRoZSBtYWpvciBlbmhhbmNlbWVudHMgKHJlc2VydmVk
IGxvY2tzIGFuZCBtdWx0aXBsZSBlZGl0cyBwZXIgdXNlciksIEkndmU8L0ZPTlQ+DQo8QlI+PEZP
TlQgU0laRT0yPmZpc2hlZCB0aGVtIG91dCBpbnRvIHNlcGFyYXRlIChhbmQgbWVyZ2VkKSBwYXRj
aGVzLiZuYnNwOyBUaGVzZSBuZWVkIHRvIGJlIHRlc3RlZDwvRk9OVD4NCjxCUj48Rk9OVCBTSVpF
PTI+KEkndmUgZG9uZSB2ZXJ5IG1pbm9yIHRlc3RpbmcgLS0gc29tZXRpbWVzIGp1c3QgdG8gY2hl
Y2sgaWYgdGhleSBjb21waWxlKSBhbmQ8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPmRvY3VtZW50
ZWQuPC9GT05UPg0KPC9QPg0KDQo8UD48Rk9OVCBTSVpFPTI+U3BlY2lmaWNhbGx5LCB0aGUgZmVh
dHVyZXMgdGhhdCBuZWVkIHRlc3RpbmcgYXJlOjwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+MS4g
JnF1b3Q7Y3ZzIGVkaXQgLWMmcXVvdDsgYWN0dWFsbHkgYWJvcnRzIHRoZSBlZGl0IGlmIG90aGVy
IGVkaXRzIGV4aXN0LjwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+Mi4gJnF1b3Q7Y3ZzIGVkaXQg
LWYmcXVvdDsgd2lsbCBmb3JjZSB0aGUgZWRpdCBpbiB0aGUgZXZlbnQgdGhhdCAmcXVvdDtlZGl0
IC1jJnF1b3Q7IGlzIGluIH4vLmN2c3JjLjwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+My4gJnF1
b3Q7Y3ZzIGNpIC1jJnF1b3Q7IGFjdHVhbGx5IGFib3J0cyB0aGUgZWRpdCBpZiBhIHZhbGlkIGVk
aXQgZG9lc24ndCBleGlzdC48L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPjQuICZxdW90O2N2cyBl
ZGl0b3JzJnF1b3Q7IHJlcG9ydHMgZWRpdHMgcHJvcGVybHkuPC9GT05UPg0KPEJSPjxGT05UIFNJ
WkU9Mj41LiAmcXVvdDtjdnMgdW5lZGl0JnF1b3Q7IHVuZWRpdHMgZWRpdHMgcHJvcGVybHkuPC9G
T05UPg0KPC9QPg0KDQo8UD48Rk9OVCBTSVpFPTI+QWxsIG9mIHRoZSBhYm92ZSBtdXN0IHdvcmsg
Zm9yIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgZmVhdHVyZS1zdXBwb3J0IGJldHdlZW48L0ZP
TlQ+DQo8QlI+PEZPTlQgU0laRT0yPmNsaWVudCBhbmQgc2VydmVyLiZuYnNwOyBGb3IgZXhhbXBs
ZTo8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPjEuIE5vbi1wYXRjaGVkIGNsaWVudCBhZ2FpbnN0
IHBhdGNoZWQgc2VydmVyLjwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+Mi4gUGF0Y2hlZCBjbGll
bnQgYWdhaW5zdCBub24tcGF0Y2hlZCBzZXJ2ZXIuPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj4z
LiBQYXRjaGVkIGNsaWVudCBhZ2FpbnN0IHBhdGNoZWQgc2VydmVyLjwvRk9OVD4NCjwvUD4NCg0K
PFA+PEZPTlQgU0laRT0yPkFzIERlcmVrIGhhcyBwb2ludGVkIG91dCwgc2FuaXR5LnNoIGNhbiBj
b3ZlciB0aGUgZmlyc3QgZml2ZSwgYnV0IGl0IGNhbid0IHRlc3Q8L0ZPTlQ+DQo8QlI+PEZPTlQg
U0laRT0yPnRoZSBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIGNsaWVudC9zZXJ2ZXIuPC9GT05U
Pg0KPC9QPg0KDQo8UD48Rk9OVCBTSVpFPTI+SSB0aGluayBJJ3ZlIGNvdmVyZWQgYWxsIHRoZSBj
YXNlcywgYnV0IEkgbWF5IHN0aWxsIGJlIG1pc3Npbmcgc29tZXRoaW5nLjwvRk9OVD4NCjwvUD4N
Cg0KPFA+PEZPTlQgU0laRT0yPk5vZWw8L0ZPTlQ+DQo8L1A+DQo8QlI+DQo8QlI+DQo8QlI+DQoN
CjxQPjxGT05UIFNJWkU9Mj5zYXNoYUB0ZWNobm9sb2d5cGFydG5lcnNncm91cC5jb20gb24gMjAw
MS4wMy4yNSAxNzo0NDowOTwvRk9OVD4NCjwvUD4NCg0KPFA+PEZPTlQgU0laRT0yPlRvOiZuYnNw
OyZuYnNwOyB5YXBfbm9lbEBqcG1vcmdhbi5jb208L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPmNj
OiZuYnNwOyZuYnNwOyBJbmZvLUN2c0BnbnUub3JnPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj5T
dWJqZWN0OiZuYnNwOyBSRTogZmVhdHVyZSBxdWVzdGlvbjwvRk9OVD4NCjwvUD4NCjxCUj4NCjxC
Uj4NCjxCUj4NCg0KPFA+PEZPTlQgU0laRT0yPkknbSB1c2luZyB0aGUgZGlzdHJpYnV0aW9uIGZy
b20gPEEgSFJFRj0iaHR0cDovL3d3dy5jdnNudC5jb20vIiBUQVJHRVQ9Il9ibGFuayI+aHR0cDov
L3d3dy5jdnNudC5jb20vPC9BPi4gQW5kIGl0J3MgYmVlbiB3b3JraW5nPC9GT05UPg0KPEJSPjxG
T05UIFNJWkU9Mj5qdXN0IGZpbmUuIFRoZSBhY2NvbXBhbnlpbmcgcmVhZG1lIGZpbGUgZG9lcyBu
b3Qgc3BlY2lmeSB0aGF0IGEgcGF0Y2ggaGFzPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj5iZWVu
IGFwcGxpZWQsIHNvIEkganVzdCBhc3N1bWVkIHRoYXQgaXQgaXMgbm93IGEgc3RhbmRhcmQgb3B0
aW9uLjwvRk9OVD4NCjwvUD4NCg0KPFA+PEZPTlQgU0laRT0yPk5vZWwsIHdoYXQgZXhhY3RseSBh
cmUgeW91IHN0aWxsIGxlZnQgd2l0aCB0aGVyZT8gSSBkbyBub3QgaGF2ZSBtdWNoIGZyZWU8L0ZP
TlQ+DQo8QlI+PEZPTlQgU0laRT0yPnRpbWUsIGJ1dCBhIGxpdHRsZSB0aGF0IEkgaGF2ZSBJIHdv
dWxkIGJlIHdpbGxpbmcgdG8gbG9vayBhdCB3aGF0ZXZlciBpczwvRk9OVD4NCjxCUj48Rk9OVCBT
SVpFPTI+bGVmdCBvdXRzdGFuZGluZy4gSSBuZWVkIHRvIHNlZSBob3cgbXVjaCBpcyBsZWZ0IGJl
Zm9yZSBJIGNhbiB0ZWxsIHlvdSBpZiBJPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj5jYW4gdGFr
ZSBpdCBvbiBvciBub3QuPC9GT05UPg0KPC9QPg0KDQo8UD48Rk9OVCBTSVpFPTI+aGF2ZSBhIGRh
eSw8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBTYXNh
PC9GT05UPg0KPC9QPg0KDQo8UD48Rk9OVCBTSVpFPTI+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t
LS08L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPkZyb206IE5vZWwgTCBZYXAgWzxBIEhSRUY9Im1h
aWx0bzp5YXBfbm9lbEBqcG1vcmdhbi5jb20iPm1haWx0bzp5YXBfbm9lbEBqcG1vcmdhbi5jb208
L0E+XTwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+U2VudDogU2F0dXJkYXksIDI0IE1hcmNoIDIw
MDEgMTo1MCBBTTwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+VG86IHNhc2hhQHRlY2hub2xvZ3lw
YXJ0bmVyc2dyb3VwLmNvbTwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+Q2M6IEluZm8tQ3ZzQEdu
dS5Pcmc8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPlN1YmplY3Q6IFJlOiBmZWF0dXJlIHF1ZXN0
aW9uPC9GT05UPg0KPC9QPg0KPEJSPg0KDQo8UD48Rk9OVCBTSVpFPTI+QXJlIHlvdSBzdXJlIHlv
dSdyZSBub3QgdXNpbmcgYSBXaW5kb3dzIHZlcnNpb24gdGhhdCdzIGJlZW4gcGF0Y2hlZD88L0ZP
TlQ+DQo8L1A+DQoNCjxQPjxGT05UIFNJWkU9Mj5Ob2VsPC9GT05UPg0KPC9QPg0KPEJSPg0KPEJS
Pg0KPEJSPg0KDQo8UD48Rk9OVCBTSVpFPTI+c2FzaGFAdGVjaG5vbG9neXBhcnRuZXJzZ3JvdXAu
Y29tIG9uIDIwMDEuMDMuMjMgMDE6Mzk6NTk8L0ZPTlQ+DQo8L1A+DQoNCjxQPjxGT05UIFNJWkU9
Mj5UbzombmJzcDsmbmJzcDsgaW5mby1jdnNAZ251Lm9yZzwvRk9OVD4NCjxCUj48Rk9OVCBTSVpF
PTI+Y2M6Jm5ic3A7Jm5ic3A7IChiY2M6IE5vZWwgTCBZYXApPC9GT05UPg0KPEJSPjxGT05UIFNJ
WkU9Mj5TdWJqZWN0OiZuYnNwOyBmZWF0dXJlIHF1ZXN0aW9uPC9GT05UPg0KPC9QPg0KPEJSPg0K
PEJSPg0KPEJSPg0KDQo8UD48Rk9OVCBTSVpFPTI+Q2xlYXIgRGF5V2h5IGRpZCBub3QgJ2VkaXQg
LWMnIG1ha2UgaXQgdG8gdGhlIGN2cyAxLjExIGFuZCB5ZXQgaXQgaXMgb24gdGhlPC9GT05UPg0K
PEJSPjxGT05UIFNJWkU9Mj53aW5kb3dzIHZlcnNpb24gb2YgY3ZzIDEuMTAuOD88L0ZPTlQ+DQo8
L1A+DQoNCjxQPjxGT05UIFNJWkU9Mj5oYXZlIGEgZGF5LDwvRk9OVD4NCjxCUj48Rk9OVCBTSVpF
PTI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IFNhc2E8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRk9OVD4NCjxCUj48Rk9OVCBT
SVpFPTI+U2FzYSBCcmNlcmV2aWM8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPlRlY2hub2xvZ3kg
UGFydG5lcnMgR3JvdXA8L0ZPTlQ+DQo8L1A+DQoNCjxQPjxGT05UIFNJWkU9Mj5QaG9uZTombmJz
cDsmbmJzcDsgKzYxIDE4MDAgMTU1IDU3NzwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+RGlyZWN0
OiZuYnNwOyArNjEgKDAyKSA0OTI1IDE1MzU8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPk1vYmls
ZTombmJzcDsgKzYxICgwNDE2KSAyOTcgNDQyPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj5FbWFp
bDombmJzcDsmbmJzcDsgc2FzaGFAdGVjaG5vbG9neXBhcnRuZXJzZ3JvdXAuY29tPC9GT05UPg0K
PEJSPjxGT05UIFNJWkU9Mj5XV1c6Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHd3dy50ZWNobm9s
b2d5cGFydG5lcnNncm91cC5jb208L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRk9OVD4NCjwvUD4NCjxCUj4NCjxCUj4N
CjxCUj4NCjxCUj4NCjxCUj4NCjxCUj4NCjxCUj4NCg0KPFA+PEZPTlQgU0laRT0yPl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPC9GT05UPg0KPEJSPjxGT05U
IFNJWkU9Mj5JbmZvLWN2cyBtYWlsaW5nIGxpc3Q8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPklu
Zm8tY3ZzQGdudS5vcmc8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPjxBIEhSRUY9Imh0dHA6Ly9t
YWlsLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9pbmZvLWN2cyIgVEFSR0VUPSJfYmxhbmsiPmh0
dHA6Ly9tYWlsLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9pbmZvLWN2czwvQT48L0ZPTlQ+DQo8
L1A+DQo8QlI+DQo8QlI+DQo8QlI+DQo8QlI+DQoNCjxQPjxGT05UIFNJWkU9Mj5UaGlzIGNvbW11
bmljYXRpb24gaXMgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seS4mbmJzcDsgSXQgaXMg
bm90IGludGVuZGVkIGFzPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj5hbiBvZmZlciBvciBzb2xp
Y2l0YXRpb24gZm9yIHRoZSBwdXJjaGFzZSBvciBzYWxlIG9mIGFueSBmaW5hbmNpYWwgaW5zdHJ1
bWVudDwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+b3IgYXMgYW4gb2ZmaWNpYWwgY29uZmlybWF0
aW9uIG9mIGFueSB0cmFuc2FjdGlvbi4gQWxsIG1hcmtldCBwcmljZXMsIGRhdGE8L0ZPTlQ+DQo8
QlI+PEZPTlQgU0laRT0yPmFuZCBvdGhlciBpbmZvcm1hdGlvbiBhcmUgbm90IHdhcnJhbnRlZCBh
cyB0byBjb21wbGV0ZW5lc3Mgb3IgYWNjdXJhY3kgYW5kPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9
Mj5hcmUgc3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuIEFueSBjb21tZW50cyBvciBz
dGF0ZW1lbnRzIG1hZGUgaGVyZWluPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj5kbyBub3QgbmVj
ZXNzYXJpbHkgcmVmbGVjdCB0aG9zZSBvZiBKLlAuIE1vcmdhbiBDaGFzZSAmYW1wOyBDby4sIGl0
czwvRk9OVD4NCjxCUj48Rk9OVCBTSVpFPTI+c3Vic2lkaWFyaWVzIGFuZCBhZmZpbGlhdGVzLjwv
Rk9OVD4NCjwvUD4NCjxCUj4NCg0KPFA+PEZPTlQgU0laRT0yPl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fPC9GT05UPg0KPEJSPjxGT05UIFNJWkU9Mj5JbmZv
LWN2cyBtYWlsaW5nIGxpc3Q8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPkluZm8tY3ZzQGdudS5v
cmc8L0ZPTlQ+DQo8QlI+PEZPTlQgU0laRT0yPjxBIEhSRUY9Imh0dHA6Ly9tYWlsLmdudS5vcmcv
bWFpbG1hbi9saXN0aW5mby9pbmZvLWN2cyIgVEFSR0VUPSJfYmxhbmsiPmh0dHA6Ly9tYWlsLmdu
dS5vcmcvbWFpbG1hbi9saXN0aW5mby9pbmZvLWN2czwvQT48L0ZPTlQ+DQo8L1A+DQoNCjwvQk9E
WT4NCjwvSFRNTD4NCg==

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: application/octet-stream; 
        name="enh-multiple_edits.diff"
Content-Disposition: attachment; filename="enh-multiple_edits.diff"
Content-transfer-encoding: base64

PyBlbmgtbXVsdGlwbGVfZWRpdHMuZGlmZgo/IHZtcy9NYWtlZmlsZQpJbmRleDogbGliL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9saWIvQ2hh
bmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xLjEuMS40LjEKZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuNC4xCioqKiBsaWIv
Q2hhbmdlTG9nCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gbGliL0NoYW5nZUxvZwky
MDAxLzAzLzA2IDIyOjQ3OjE2CTEuMS4xLjEuNC4xCioqKioqKioqKioqKioqKgoqKiogMSwxNiAq
KioqCi0tLSAxLDI1IC0tLS0KKyAyMDAxLTAzLTA2ICBOb2VsIFlhcCA8eWFwX25vZWxAeWFob28u
Y29tPgorIAorIAkqIHN0cmlwc2xhc2guYyAoc3RyaXBfdHJhaWxpbmdfc2xhc2hlcykKKyAJQ2hh
bmdlZCB0byB1c2UgSVNESVJTRVAoKS4KKyAKKyAJKiBzeXN0ZW0uaCAoSVNESVJTRVApCisgCUNo
YW5nZWQgb24gTlQgdG8gY2hlY2sgZm9yICdcXCcgYXMgd2VsbC4KKyAJRElSU0VQIGFkZGVkIHRv
IGJlIHRoZSB0eXBpY2FsIGRpcmVjdG9yeSBzZXBhcmF0b3Igc3RyaW5nLgorIAogIDIwMDAtMDct
MTAgIExhcnJ5IEpvbmVzICA8bGFycnkuam9uZXNAc2RyYy5jb20+CiAgCiAgCSogc2F2ZWN3ZC5j
OiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IGJlZm9yZSA8ZmNudGwuaD4uCiAgCiAgMjAwMC0wNy0w
NCAgS2FybCBGb2dlbCAgPGtmb2dlbEByZWQtYmVhbi5jb20+CiAgCiAgCSogZ2V0bGluZS5oLCBn
ZXRsaW5lLmMgKGdldHN0cik6IHRha2UgbmV3IGxpbWl0IGFyZy4KICAJKEdFVExJTkVfTk9fTElN
SVQpOiBuZXcgI2RlZmluZS4KICAJKGdldGxpbmVfc2FmZSk6IG5ldyBmdW5jdGlvbiwgdGFrZXMg
bGltaXQgYXJnIGFuZCBwYXNzZXMgaXQgb24uCiAgCShnZXRsaW5lKTogcGFzcyBHRVRMSU5FX05P
X0xJTUlUIHRvIGdldHN0cigpLgogIAogIAlTZWUgcmVsYXRlZCBjaGFuZ2Ugb2Ygc2FtZSBkYXRl
IGluIC4uL3NyYy9DaGFuZ2VMb2cuCiAgCiAgMjAwMC0wNi0xOSAgTGFycnkgSm9uZXMgIDxsYXJy
eS5qb25lc0BzZHJjLmNvbT4KICAKICAJKiByZWdleC5jLCByZWdleC5oOiBWZXJzaW9uIGZyb20g
ZW1hY3MgMjAuNyB0byBwbHVnIG1lbW9yeSBsZWFrcwpJbmRleDogbGliL3N0cmlwc2xhc2guYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9saWIvc3RyaXBzbGFz
aC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
LjEuMS40LjEKZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuNC4xCioqKiBsaWIvc3Ry
aXBzbGFzaC5jCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gbGliL3N0cmlwc2xhc2gu
YwkyMDAxLzAzLzA2IDIyOjQ3OjE2CTEuMS4xLjEuNC4xCioqKioqKioqKioqKioqKgoqKiogMiw0
MCAqKioqCiAgICAgQ29weXJpZ2h0IChDKSAxOTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLgogIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24p
CiAgICAgYW55IGxhdGVyIHZlcnNpb24uCiAgCiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICov
CiAgCiAgI2lmZGVmIEhBVkVfQ09ORklHX0gKICAjaW5jbHVkZSAiY29uZmlnLmgiCiAgI2VuZGlm
CiAgCiAgI2lmIFNURENfSEVBREVSUyB8fCBIQVZFX1NUUklOR19ICiAgI2luY2x1ZGUgPHN0cmlu
Zy5oPgogIC8qIEFuIEFOU0kgc3RyaW5nLmggYW5kIHByZS1BTlNJIG1lbW9yeS5oIG1pZ2h0IGNv
bmZsaWN0LiAqLwogICNpZiAhU1REQ19IRUFERVJTICYmIEhBVkVfTUVNT1JZX0gKICAjaW5jbHVk
ZSA8bWVtb3J5Lmg+CiAgI2VuZGlmIC8qIG5vdCBTVERDX0hFQURFUlMgYW5kIEhBVkVfTUVNT1JZ
X0ggKi8KICAjZWxzZSAvKiBub3QgU1REQ19ISkVBREVSUyBhbmQgbm90IEhBVkVfU1RSSU5HX0gg
Ki8KICAjaW5jbHVkZSA8c3RyaW5ncy5oPgogIC8qIG1lbW9yeS5oIGFuZCBzdHJpbmdzLmggY29u
ZmxpY3Qgb24gc29tZSBzeXN0ZW1zLiAqLwogICNlbmRpZiAvKiBub3QgU1REQ19IRUFERVJTIGFu
ZCBub3QgSEFWRV9TVFJJTkdfSCAqLwogIAogIC8qIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIGZy
b20gUEFUSC4gKi8KICAKICB2b2lkCiAgc3RyaXBfdHJhaWxpbmdfc2xhc2hlcyAocGF0aCkKICAg
ICAgIGNoYXIgKnBhdGg7CiAgewogICAgaW50IGxhc3Q7CiAgCiAgICBsYXN0ID0gc3RybGVuIChw
YXRoKSAtIDE7CiEgICB3aGlsZSAobGFzdCA+IDAgJiYgcGF0aFtsYXN0XSA9PSAnLycpCiAgICAg
IHBhdGhbbGFzdC0tXSA9ICdcMCc7CiAgfQotLS0gMiw0MiAtLS0tCiAgICAgQ29weXJpZ2h0IChD
KSAxOTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIAogICAgIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiAgICAgYW55IGxhdGVyIHZlcnNpb24u
CiAgCiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICovCiAgCiAgI2lmZGVmIEhBVkVfQ09ORklH
X0gKICAjaW5jbHVkZSAiY29uZmlnLmgiCiAgI2VuZGlmCiAgCisgI2luY2x1ZGUgInN5c3RlbS5o
IgorIAogICNpZiBTVERDX0hFQURFUlMgfHwgSEFWRV9TVFJJTkdfSAogICNpbmNsdWRlIDxzdHJp
bmcuaD4KICAvKiBBbiBBTlNJIHN0cmluZy5oIGFuZCBwcmUtQU5TSSBtZW1vcnkuaCBtaWdodCBj
b25mbGljdC4gKi8KICAjaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9SWV9ICiAgI2luY2x1
ZGUgPG1lbW9yeS5oPgogICNlbmRpZiAvKiBub3QgU1REQ19IRUFERVJTIGFuZCBIQVZFX01FTU9S
WV9IICovCiAgI2Vsc2UgLyogbm90IFNURENfSEpFQURFUlMgYW5kIG5vdCBIQVZFX1NUUklOR19I
ICovCiAgI2luY2x1ZGUgPHN0cmluZ3MuaD4KICAvKiBtZW1vcnkuaCBhbmQgc3RyaW5ncy5oIGNv
bmZsaWN0IG9uIHNvbWUgc3lzdGVtcy4gKi8KICAjZW5kaWYgLyogbm90IFNURENfSEVBREVSUyBh
bmQgbm90IEhBVkVfU1RSSU5HX0ggKi8KICAKICAvKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBm
cm9tIFBBVEguICovCiAgCiAgdm9pZAogIHN0cmlwX3RyYWlsaW5nX3NsYXNoZXMgKHBhdGgpCiAg
ICAgICBjaGFyICpwYXRoOwogIHsKICAgIGludCBsYXN0OwogIAogICAgbGFzdCA9IHN0cmxlbiAo
cGF0aCkgLSAxOwohICAgd2hpbGUgKGxhc3QgPiAwICYmIElTRElSU0VQIChwYXRoW2xhc3RdKSkK
ICAgICAgcGF0aFtsYXN0LS1dID0gJ1wwJzsKICB9CkluZGV4OiBsaWIvc3lzdGVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvbGliL3N5c3RlbS5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS40LjEK
ZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuNC4xCioqKiBsaWIvc3lzdGVtLmgJMjAw
MS8wMy8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBsaWIvc3lzdGVtLmgJMjAwMS8wMy8wNiAyMjo0
NzoxNgkxLjEuMS4xLjQuMQoqKioqKioqKioqKioqKioKKioqIDQ2Nyw1MjcgKioqKgogIC8qIFdp
bGRjYXJkIG1hdGNoZXIuICBTaG91bGQgYmUgY2FzZS1pbnNlbnNpdGl2ZSBpZiB0aGUgc3lzdGVt
IGlzLiAgKi8KICAjaWZuZGVmIENWU19GTk1BVENICiAgI2RlZmluZSBDVlNfRk5NQVRDSCBmbm1h
dGNoCiAgI2VuZGlmCiAgCiAgI2lmIGRlZmluZWQgKF9fQ1lHV0lOMzJfXykgfHwgZGVmaW5lZCAo
V0lOMzIpCiAgCiAgLyogVW5kZXIgV2luZG93cyBOVCwgZmlsZW5hbWVzIGFyZSBjYXNlLWluc2Vu
c2l0aXZlLCBhbmQgYm90aCAvIGFuZCBcCiAgICAgYXJlIHBhdGggY29tcG9uZW50IHNlcGFyYXRv
cnMuICAqLwogIAogICNkZWZpbmUgRk9MRF9GTl9DSEFSKGMpIChXTlRfZmlsZW5hbWVfY2xhc3Nl
c1sodW5zaWduZWQgY2hhcikgKGMpXSkKICBleHRlcm4gdW5zaWduZWQgY2hhciBXTlRfZmlsZW5h
bWVfY2xhc3Nlc1tdOwogICNkZWZpbmUgRklMRU5BTUVTX0NBU0VfSU5TRU5TSVRJVkUgMQogIAog
IC8qIElzIHRoZSBjaGFyYWN0ZXIgQyBhIHBhdGggbmFtZSBzZXBhcmF0b3I/ICBVbmRlcgogICAg
IFdpbmRvd3MgTlQsIHlvdSBjYW4gdXNlIGVpdGhlciAvIG9yIFwuICAqLwohICNkZWZpbmUgSVNE
SVJTRVAoYykgKEZPTERfRk5fQ0hBUihjKSA9PSAnLycpCiAgCiAgLyogTGlrZSBzdHJjbXAsIGJ1
dCB3aXRoIHRoZSBhcHByb3ByaWF0ZSB0d2Vha3MgZm9yIGZpbGUgbmFtZXMuCiAgICAgVW5kZXIg
V2luZG93cyBOVCwgZmlsZW5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGJ1dCBjYXNlLXByZXNl
cnZpbmcsCiAgICAgYW5kIGJvdGggXCBhbmQgLyBhcmUgcGF0aCBlbGVtZW50IHNlcGFyYXRvcnMu
ICAqLwogIGV4dGVybiBpbnQgZm5jbXAgKGNvbnN0IGNoYXIgKm4xLCBjb25zdCBjaGFyICpuMik7
CiAgCiAgLyogRm9sZCBjaGFyYWN0ZXJzIGluIEZJTEVOQU1FIHRvIHRoZWlyIGNhbm9uaWNhbCBm
b3Jtcy4gIAogICAgIElmIEZPTERfRk5fQ0hBUiBpcyBub3QgI2RlZmluZWQsIHRoZSBzeXN0ZW0g
cHJvdmlkZXMgYSBkZWZhdWx0CiAgICAgZGVmaW5pdGlvbiBmb3IgdGhpcy4gICovCiAgZXh0ZXJu
IHZvaWQgZm5mb2xkIChjaGFyICpGSUxFTkFNRSk7CiAgCiAgI2VuZGlmIC8qIGRlZmluZWQgKF9f
Q1lHV0lOMzJfXykgfHwgZGVmaW5lZCAoV0lOMzIpICovCiAgCiAgLyogU29tZSBmaWxlIHN5c3Rl
bXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuICBJZiBGT0xEX0ZOX0NIQVIgaXMKICAgICAjZGVmaW5l
ZCwgaXQgbWFwcyB0aGUgY2hhcmFjdGVyIEMgb250byBpdHMgImNhbm9uaWNhbCIgZm9ybS4gIElu
IGEKICAgICBjYXNlLWluc2Vuc2l0aXZlIHN5c3RlbSwgaXQgd291bGQgbWFwIGFsbCBhbHBoYW51
bWVyaWMgY2hhcmFjdGVycwogICAgIHRvIGxvd2VyIGNhc2UuICBVbmRlciBXaW5kb3dzIE5ULCAv
IGFuZCBcIGFyZSBib3RoIHBhdGggY29tcG9uZW50CiAgICAgc2VwYXJhdG9ycywgc28gRk9MRF9G
Tl9DSEFSIHdvdWxkIG1hcCB0aGVtIGJvdGggdG8gLy4gICovCiAgI2lmbmRlZiBGT0xEX0ZOX0NI
QVIKICAjZGVmaW5lIEZPTERfRk5fQ0hBUihjKSAoYykKICAjZGVmaW5lIGZuZm9sZChmaWxlbmFt
ZSkgKGZpbGVuYW1lKQogICNkZWZpbmUgZm5jbXAgc3RyY21wCiAgI2VuZGlmCiAgCiAgLyogRGlm
ZmVyZW50IGZpbGUgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCBwYXRoIGNvbXBvbmVudCBzZXBhcmF0
b3JzLgogICAgIEZvciB0aGUgVk1TIHBvcnQgd2UgbWlnaHQgbmVlZCB0byBhYnN0cmFjdCBmdXJ0
aGVyIGJhY2sgdGhhbiB0aGlzLiAgKi8KICAjaWZuZGVmIElTRElSU0VQCiAgI2RlZmluZSBJU0RJ
UlNFUChjKSAoKGMpID09ICcvJykKICAjZW5kaWYKICAKICAKICAvKiBPbiBzb21lIHN5c3RlbXMs
IHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCB3cml0aW5nL3JlYWRpbmcgZmlsZXMKICAgICBp
biB0ZXh0IG9yIGJpbmFyeSBtb2RlIChzbyBpbiB0ZXh0IG1vZGUgdGhlIHN5c3RlbSBjYW4gaGFu
ZGxlIENSTEYKICAgICB2cy4gTEYsIFZNUyB0ZXh0IGZpbGUgY29udmVudGlvbnMsICZjKS4gIFdl
IGRlY2lkZSB0byBqdXN0IGFsd2F5cwogICAgIGJlIGNhcmVmdWwuICBUaGF0IHdheSB3ZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoZXRoZXIgdGV4dCBhbmQKICAgICBiaW5hcnkgZGlmZmVy
IG9uIHRoaXMgc3lzdGVtLiAgV2UganVzdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoZXRoZXIKICAg
ICB0aGUgc3lzdGVtIGhhcyBPX0JJTkFSWSBhbmQgInJiIi4gIFRoZSBsYXR0ZXIgaXMgZWFzeTsg
YWxsIEFOU0kgQwogICAgIGxpYnJhcmllcyBoYXZlIGl0LCBTdW5PUzQgaGFzIGl0LCBhbmQgQ1ZT
IGhhcyB1c2VkIGl0IHVuZ3VhcmRlZAogICAgIHNvbWUgcGxhY2VzIGZvciBhIHdoaWxlIG5vdyB3
aXRob3V0IGNvbXBsYWludHMgKGUuZy4gInJiIiBpbgogICAgIHNlcnZlci5jIChzZXJ2ZXJfdXBk
YXRlZCksIHNpbmNlIENWUyAxLjgpLiAgVGhlIGZvcm1lciBpcyBqdXN0IGFuCiAgICAgI2lmZGVm
LiAgKi8KICAKICAjZGVmaW5lIEZPUEVOX0JJTkFSWV9SRUFEICgicmIiKQogICNkZWZpbmUgRk9Q
RU5fQklOQVJZX1dSSVRFICgid2IiKQotLS0gNDY3LDUzNSAtLS0tCiAgLyogV2lsZGNhcmQgbWF0
Y2hlci4gIFNob3VsZCBiZSBjYXNlLWluc2Vuc2l0aXZlIGlmIHRoZSBzeXN0ZW0gaXMuICAqLwog
ICNpZm5kZWYgQ1ZTX0ZOTUFUQ0gKICAjZGVmaW5lIENWU19GTk1BVENIIGZubWF0Y2gKICAjZW5k
aWYKICAKICAjaWYgZGVmaW5lZCAoX19DWUdXSU4zMl9fKSB8fCBkZWZpbmVkIChXSU4zMikKICAK
ICAvKiBVbmRlciBXaW5kb3dzIE5ULCBmaWxlbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGFu
ZCBib3RoIC8gYW5kIFwKICAgICBhcmUgcGF0aCBjb21wb25lbnQgc2VwYXJhdG9ycy4gICovCiAg
CiAgI2RlZmluZSBGT0xEX0ZOX0NIQVIoYykgKFdOVF9maWxlbmFtZV9jbGFzc2VzWyh1bnNpZ25l
ZCBjaGFyKSAoYyldKQogIGV4dGVybiB1bnNpZ25lZCBjaGFyIFdOVF9maWxlbmFtZV9jbGFzc2Vz
W107CiAgI2RlZmluZSBGSUxFTkFNRVNfQ0FTRV9JTlNFTlNJVElWRSAxCiAgCiAgLyogSXMgdGhl
IGNoYXJhY3RlciBDIGEgcGF0aCBuYW1lIHNlcGFyYXRvcj8gIFVuZGVyCiAgICAgV2luZG93cyBO
VCwgeW91IGNhbiB1c2UgZWl0aGVyIC8gb3IgXC4gICovCiEgI2RlZmluZSBJU0RJUlNFUChjKSAo
Rk9MRF9GTl9DSEFSKGMpID09ICcvJyAgfHwgIEZPTERfRk5fQ0hBUihjKSA9PSAnXFwnKQogIAog
IC8qIExpa2Ugc3RyY21wLCBidXQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdHdlYWtzIGZvciBmaWxl
IG5hbWVzLgogICAgIFVuZGVyIFdpbmRvd3MgTlQsIGZpbGVuYW1lcyBhcmUgY2FzZS1pbnNlbnNp
dGl2ZSBidXQgY2FzZS1wcmVzZXJ2aW5nLAogICAgIGFuZCBib3RoIFwgYW5kIC8gYXJlIHBhdGgg
ZWxlbWVudCBzZXBhcmF0b3JzLiAgKi8KICBleHRlcm4gaW50IGZuY21wIChjb25zdCBjaGFyICpu
MSwgY29uc3QgY2hhciAqbjIpOwogIAogIC8qIEZvbGQgY2hhcmFjdGVycyBpbiBGSUxFTkFNRSB0
byB0aGVpciBjYW5vbmljYWwgZm9ybXMuCiAgICAgSWYgRk9MRF9GTl9DSEFSIGlzIG5vdCAjZGVm
aW5lZCwgdGhlIHN5c3RlbSBwcm92aWRlcyBhIGRlZmF1bHQKICAgICBkZWZpbml0aW9uIGZvciB0
aGlzLiAgKi8KICBleHRlcm4gdm9pZCBmbmZvbGQgKGNoYXIgKkZJTEVOQU1FKTsKICAKICAjZW5k
aWYgLyogZGVmaW5lZCAoX19DWUdXSU4zMl9fKSB8fCBkZWZpbmVkIChXSU4zMikgKi8KICAKICAv
KiBTb21lIGZpbGUgc3lzdGVtcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4gIElmIEZPTERfRk5fQ0hB
UiBpcwogICAgICNkZWZpbmVkLCBpdCBtYXBzIHRoZSBjaGFyYWN0ZXIgQyBvbnRvIGl0cyAiY2Fu
b25pY2FsIiBmb3JtLiAgSW4gYQogICAgIGNhc2UtaW5zZW5zaXRpdmUgc3lzdGVtLCBpdCB3b3Vs
ZCBtYXAgYWxsIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzCiAgICAgdG8gbG93ZXIgY2FzZS4gIFVu
ZGVyIFdpbmRvd3MgTlQsIC8gYW5kIFwgYXJlIGJvdGggcGF0aCBjb21wb25lbnQKICAgICBzZXBh
cmF0b3JzLCBzbyBGT0xEX0ZOX0NIQVIgd291bGQgbWFwIHRoZW0gYm90aCB0byAvLiAgKi8KICAj
aWZuZGVmIEZPTERfRk5fQ0hBUgogICNkZWZpbmUgRk9MRF9GTl9DSEFSKGMpIChjKQogICNkZWZp
bmUgZm5mb2xkKGZpbGVuYW1lKSAoZmlsZW5hbWUpCiAgI2RlZmluZSBmbmNtcCBzdHJjbXAKICAj
ZW5kaWYKICAKICAvKiBEaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IHBhdGgg
Y29tcG9uZW50IHNlcGFyYXRvcnMuCiAgICAgRm9yIHRoZSBWTVMgcG9ydCB3ZSBtaWdodCBuZWVk
IHRvIGFic3RyYWN0IGZ1cnRoZXIgYmFjayB0aGFuIHRoaXMuICAqLwogICNpZm5kZWYgSVNESVJT
RVAKICAjZGVmaW5lIElTRElSU0VQKGMpICgoYykgPT0gJy8nKQorICNlbmRpZgorIAorICNpZm5k
ZWYgRElSU0VQCisgI2lmIGRlZmluZWQgKFdJTjMyKQorICNkZWZpbmUgRElSU0VQICJcXCIKKyAj
ZWxzZQorICNkZWZpbmUgRElSU0VQICIvIgorICNlbmRpZiAvKiBkZWZpbmVkIChXSU4zMikgKi8K
ICAjZW5kaWYKICAKICAKICAvKiBPbiBzb21lIHN5c3RlbXMsIHdlIGhhdmUgdG8gYmUgY2FyZWZ1
bCBhYm91dCB3cml0aW5nL3JlYWRpbmcgZmlsZXMKICAgICBpbiB0ZXh0IG9yIGJpbmFyeSBtb2Rl
IChzbyBpbiB0ZXh0IG1vZGUgdGhlIHN5c3RlbSBjYW4gaGFuZGxlIENSTEYKICAgICB2cy4gTEYs
IFZNUyB0ZXh0IGZpbGUgY29udmVudGlvbnMsICZjKS4gIFdlIGRlY2lkZSB0byBqdXN0IGFsd2F5
cwogICAgIGJlIGNhcmVmdWwuICBUaGF0IHdheSB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0
IHdoZXRoZXIgdGV4dCBhbmQKICAgICBiaW5hcnkgZGlmZmVyIG9uIHRoaXMgc3lzdGVtLiAgV2Ug
anVzdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoZXRoZXIKICAgICB0aGUgc3lzdGVtIGhhcyBPX0JJ
TkFSWSBhbmQgInJiIi4gIFRoZSBsYXR0ZXIgaXMgZWFzeTsgYWxsIEFOU0kgQwogICAgIGxpYnJh
cmllcyBoYXZlIGl0LCBTdW5PUzQgaGFzIGl0LCBhbmQgQ1ZTIGhhcyB1c2VkIGl0IHVuZ3VhcmRl
ZAogICAgIHNvbWUgcGxhY2VzIGZvciBhIHdoaWxlIG5vdyB3aXRob3V0IGNvbXBsYWludHMgKGUu
Zy4gInJiIiBpbgogICAgIHNlcnZlci5jIChzZXJ2ZXJfdXBkYXRlZCksIHNpbmNlIENWUyAxLjgp
LiAgVGhlIGZvcm1lciBpcyBqdXN0IGFuCiAgICAgI2lmZGVmLiAgKi8KICAKICAjZGVmaW5lIEZP
UEVOX0JJTkFSWV9SRUFEICgicmIiKQogICNkZWZpbmUgRk9QRU5fQklOQVJZX1dSSVRFICgid2Ii
KQpJbmRleDogc3JjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5j
dnNyb290L2N2cy9zcmMvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS40LjIKZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEu
MS4xLjEuNC4yCioqKiBzcmMvQ2hhbmdlTG9nCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQot
LS0gc3JjL0NoYW5nZUxvZwkyMDAxLzAzLzA2IDIyOjQ3OjE2CTEuMS4xLjEuNC4yCioqKioqKioq
KioqKioqKgoqKiogMSwxNiAqKioqCi0tLSAxLDQ1IC0tLS0KKyAyMDAxLTAzLTA2ICBOb2VsIFlh
cCA8eWFwX25vZWxAeWFob28uY29tPgorIAorIAkqIHZlcnNpb24uYzogVmVyc2lvbiAxLjExICht
dWx0aXBsZSBlZGl0cykKKyAKKyAJKiBjb21taXQuYyAoZmluZF9maWxlcHJvYywgY29tbWl0LCBj
b21taXRfZmlsZXByb2MsIHVwZGF0ZV9kZWxwcm9jKToKKyAJRmlsZSBpbmZvcm1hdGlvbiBzZW50
IHRvIHNlcnZlciBhbmQgdXNlZCB0byB1bmVkaXQgZmlsZS4KKyAKKyAJKiBjdnMuaDoKKyAJcmVw
b3NpdG9yeSwgaG9zdG5hbWUsIHdkLCBhbmQgZWRpdG9yIGFkZGVkIHRvIGxvZ2ZpbGVfaW5mbwor
IAorIAkqIGVkaXQuYyAobmNoZWNrX2ZpbGVwcm9jLCBub3RpZnlfcHV0LCB1bmVkaXRfZmlsZXBy
b2MsIG5vdGlmeV9wcm9jLAorIAlub3RpZnlfZG8pOgorIAlFZGl0b3Iga2V5IGNoYW5nZWQgdG8g
aW5jbHVkZSBmaWxlIGxvY2F0aW9uLgorIAorIAkqIGVkaXQuYyAobm90aWZ5X3B1dCkKKyAJUmVs
YXRpdmUgcGF0aHMgcmVtb3ZlZCBmcm9tIHdvcmtpbmcgZGlyZWN0b3JpZXMuCisgCisgCSogZWRp
dC5oIChub3RpZnlfZG8pOgorIAllZGl0b3IgYXJndW1lbnQgYWRkZWQuCisgCisgCSogcmNzLmMg
KFJDU191bmxvY2spOgorIAlOb3RpZmljYXRpb24gcmVtb3ZlZC4KKyAKKyAJKiBzZXJ2ZXIuYywg
c2VydmVyLmggKHNlcnZlX2ZpbGVpbmZvLCBzZXJ2ZXJfZ2V0ZmlsZWluZm8sCisgCXNlcnZlcl9k
ZWxmaWxlaW5mb2xpc3QsIHNlcnZlX25vdGlmeSwgc2VydmVyX25vdGlmeSk6CisgCUZpbGVJbmZv
IGFkZGVkIHRvIGFsbG93IGNsaWVudCB0byB0ZWxsIHNlcnZlciBhYm91dCBmaWxlCisgCWluZm9y
bWF0aW9uIChlZyBmaWxlIGxvY2F0aW9uLCBlZGl0b3IpLiAgVGhpcyBpbmZvcm1hdGlvbgorIAlp
cyB1c2VkIGJ5IGNvbW1pdCB0byBrbm93IHdoaWNoIGVkaXRvciB0byB1bmVkaXQuCisgCiAgMjAw
MC0wOS0xOSAgTGFycnkgSm9uZXMgIDxsYXJyeS5qb25lc0BzZHJjLmNvbT4KICAKICAJKiB2ZXJz
aW9uLmM6IFZlcnNpb24gMS4xMS4KICAKICAyMDAwLTA5LTA3ICBMYXJyeSBKb25lcyAgPGxhcnJ5
LmpvbmVzQHNkcmMuY29tPgogIAogIAkqIE1ha2VmaWxlLmluOiBVc2UgQGJpbmRpckAsIEBsaWJk
aXJALCBAaW5mb2RpckAsIGFuZCBAbWFuZGlyQAogIAlmcm9tIGF1dG9jb25mLgogIAogIDIwMDAt
MDgtMjMgIExhcnJ5IEpvbmVzICA8bGFycnkuam9uZXNAc2RyYy5jb20+CiAgCiAgCSogbWttb2R1
bGVzLmMgKGluaXQpOiBDcmVhdGUgYW4gZW1wdHkgdmFsLXRhZ3MgZmlsZSBpZiBpdCBkb2Vzbid0
CiAgCWFscmVhZHkgZXhpc3QgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB1c2VycyBub3QgaGF2aW5n
IHN1ZmZpY2llbnQKICAJcGVybWlzc2lvbnMgdG8gY3JlYXRlIGl0IGxhdGVyLgogIAogIDIwMDAt
MDktMDYgIEppbSBLaW5nZG9uICA8amtpbmdkb25AZGhjcC1uZXQyMDAtODkuc3UudmFsaW51eC5j
b20+CkluZGV4OiBzcmMvYWRkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zz
cm9vdC9jdnMvc3JjL2FkZC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xLjEuMS40LjEKZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEu
NC4xCioqKiBzcmMvYWRkLmMJMjAwMS8wMy8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvYWRk
LmMJMjAwMS8wMy8wOCAxNDoyNjowNQkxLjEuMS4xLjQuMQoqKioqKioqKioqKioqKioKKioqIDc3
Nyw4MDggKioqKgotLS0gNzc3LDgxMiAtLS0tCiAgCWZpbGVhdHRyX3NldGFsbCAoTlVMTCwgYXR0
cnMpOwogIAlmaWxlYXR0cl93cml0ZSAoKTsKICAJZmlsZWF0dHJfZnJlZSAoKTsKICAJaWYgKGF0
dHJzICE9IE5VTEwpCiAgCSAgICBmcmVlIChhdHRycyk7CiAgCiAgCS8qCiAgCSAqIFNldCB1cCBh
biB1cGRhdGUgbGlzdCB3aXRoIGEgc2luZ2xlIHRpdGxlIG5vZGUgZm9yIFVwZGF0ZV9Mb2dmaWxl
CiAgCSAqLwogIAl1bGlzdCA9IGdldGxpc3QgKCk7CiAgCXAgPSBnZXRub2RlICgpOwogIAlwLT50
eXBlID0gVVBEQVRFOwogIAlwLT5kZWxwcm9jID0gdXBkYXRlX2RlbHByb2M7CiAgCXAtPmtleSA9
IHhzdHJkdXAgKCItIE5ldyBkaXJlY3RvcnkiKTsKICAJbGkgPSAoc3RydWN0IGxvZ2ZpbGVfaW5m
byAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBsb2dmaWxlX2luZm8pKTsKICAJbGktPnR5cGUg
PSBUX1RJVExFOworICAgICAgICAgbGktPnJlcG9zaXRvcnkgPSBOVUxMOworICAgICAgICAgbGkt
Pmhvc3RuYW1lID0gTlVMTDsKKyAgICAgICAgIGxpLT53ZCA9IE5VTEw7CisgICAgICAgICBsaS0+
ZWRpdG9yID0gTlVMTDsKICAJbGktPnRhZyA9IHhzdHJkdXAgKHRhZyk7CiAgCWxpLT5yZXZfb2xk
ID0gbGktPnJldl9uZXcgPSBOVUxMOwogIAlwLT5kYXRhID0gKGNoYXIgKikgbGk7CiAgCSh2b2lk
KSBhZGRub2RlICh1bGlzdCwgcCk7CiAgCVVwZGF0ZV9Mb2dmaWxlIChyY3NkaXIsIG1lc3NhZ2Us
IChGSUxFICopIE5VTEwsIHVsaXN0KTsKICAJZGVsbGlzdCAoJnVsaXN0KTsKICAgICAgfQogIAog
ICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogICAgICBpZiAoIXNlcnZlcl9hY3RpdmUpCiAgI2VuZGlm
CiAgICAgICAgICBDcmVhdGVfQWRtaW4gKCIuIiwgZmluZm8tPmZ1bGxuYW1lLCByY3NkaXIsIHRh
ZywgZGF0ZSwgbm9uYnJhbmNoLCAwLCAxKTsKICAgICAgaWYgKHRhZykKICAJZnJlZSAodGFnKTsK
ICAgICAgaWYgKGRhdGUpCiAgCWZyZWUgKGRhdGUpOwpJbmRleDogc3JjL2NvbW1pdC5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9jb21taXQuYyx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuNC4y
CmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjQuMgoqKiogc3JjL2NvbW1pdC5jCTIw
MDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL2NvbW1pdC5jCTIwMDEvMDMvMDggMTQ6
MTY6NTcJMS4xLjEuMS40LjIKKioqKioqKioqKioqKioqCioqKiAyODEsMzEyICoqKioKLS0tIDI4
MSwzMTcgLS0tLQogIAlzdGF0dXMgPSBUX01PRElGSUVEOwogICAgICBlbHNlCiAgICAgIHsKICAJ
LyogVGhpcyBjb3ZlcnMgdW5tb2RpZmllZCBmaWxlcywgYXMgd2VsbCBhcyBhIHZhcmlldHkgb2Yg
b3RoZXIKICAJICAgY2FzZXMuICBGSVhNRTogd2UgcHJvYmFibHkgc2hvdWxkIGJlIHByaW50aW5n
IGEgbWVzc2FnZSBhbmQKICAJICAgcmV0dXJuaW5nIDEgZm9yIG1hbnkgb2YgdGhvc2UgY2FzZXMg
KGJ1dCBJJ20gbm90IHN1cmUKICAJICAgZXhhY3RseSB3aGljaCBvbmVzKS4gICovCiAgCWZyZWV2
ZXJzX3RzICgmdmVycyk7CiAgCXJldHVybiAwOwogICAgICB9CiAgCiAgICAgIG5vZGUgPSBnZXRu
b2RlICgpOwogICAgICBub2RlLT5rZXkgPSB4c3RyZHVwIChmaW5mby0+ZnVsbG5hbWUpOwogIAog
ICAgICBkYXRhID0gKHN0cnVjdCBsb2dmaWxlX2luZm8gKikgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1
Y3QgbG9nZmlsZV9pbmZvKSk7CiAgICAgIGRhdGEtPnR5cGUgPSBzdGF0dXM7CisgICAgIGRhdGEt
PnJlcG9zaXRvcnkgPSB4c3RyZHVwIChmaW5mby0+cmVwb3NpdG9yeSk7CisgICAgIGRhdGEtPmhv
c3RuYW1lID0geHN0cmR1cCAoaG9zdG5hbWUpOworICAgICBkYXRhLT53ZCA9IChjaGFyICopIHht
YWxsb2MgKHN0cmxlbiAoQ3VyRGlyKSArIHNpemVvZiAoJy8nKSArIHN0cmxlbiAoZmluZm8tPnVw
ZGF0ZV9kaXIpICsgMSk7CisgICAgIHNwcmludGYgKGRhdGEtPndkLCAiJXMlYyVzIiwgQ3VyRGly
LCBmaW5mby0+dXBkYXRlX2RpciAhPSBOVUxMICAmJiAgKmZpbmZvLT51cGRhdGVfZGlyICE9ICdc
MCcgICA/ICAgJy8nICAgOiAgICdcMCcsIGZpbmZvLT51cGRhdGVfZGlyKTsKKyAgICAgZGF0YS0+
ZWRpdG9yID0gTlVMTDsKICAgICAgZGF0YS0+dGFnID0geHN0cmR1cCAodmVycy0+dGFnKTsKICAg
ICAgZGF0YS0+cmV2X29sZCA9IGRhdGEtPnJldl9uZXcgPSBOVUxMOwogIAogICAgICBub2RlLT50
eXBlID0gVVBEQVRFOwogICAgICBub2RlLT5kZWxwcm9jID0gdXBkYXRlX2RlbHByb2M7CiAgICAg
IG5vZGUtPmRhdGEgPSAoY2hhciAqKSBkYXRhOwogICAgICAodm9pZClhZGRub2RlIChhcmdzLT51
bGlzdCwgbm9kZSk7CiAgCiAgICAgICsrYXJncy0+YXJnYzsKICAKICAgICAgZnJlZXZlcnNfdHMg
KCZ2ZXJzKTsKICAgICAgcmV0dXJuIDA7CiAgfQogIAogIHN0YXRpYyBpbnQgY29weV91bGlzdCBQ
Uk9UTyAoKE5vZGUgKiwgdm9pZCAqKSk7CiAgCioqKioqKioqKioqKioqKgoqKiogNTMzLDU5NSAq
KioqCi0tLSA1MzgsNjU2IC0tLS0KICAJCSAgICBzZW5kX3RvX3NlcnZlciAocC0+cmVwb3MsIDAp
OwogIAkJICAgIHNlbmRfdG9fc2VydmVyICgiXDAxMiIsIDEpOwogIAogIAkJICAgIHNlbmRfdG9f
c2VydmVyICgiUXVlc3Rpb25hYmxlICIsIDApOwogIAkJICAgIHNlbmRfdG9fc2VydmVyIChwLT5m
aWxlLCAwKTsKICAJCSAgICBzZW5kX3RvX3NlcnZlciAoIlwwMTIiLCAxKTsKICAJCX0KICAJCWZy
ZWUgKHAtPmRpcik7CiAgCQlmcmVlIChwLT5yZXBvcyk7CiAgCQlmcmVlIChwLT5maWxlKTsKICAJ
CXEgPSBwLT5uZXh0OwogIAkJZnJlZSAocCk7CiAgCQlwID0gcTsKICAJICAgIH0KICAJfQogIAor
ICAgICAgICAgLyogc2VuZCBsb2NhbCBmaWxlIGluZm8gdG8gc2VydmVyICovCisgICAgICAgICBp
ZiAoc3VwcG9ydGVkX3JlcXVlc3QgKCJGaWxlSW5mbyIpKQorICAgICAgICAgeworICAgICAgICAg
ICAgIGNoYXIgKip2ID0gTlVMTDsKKyAKKyAgICAgICAgICAgICBmb3IodiA9IGZpbmRfYXJncy5h
cmd2OyB2IDwgZmluZF9hcmdzLmFyZ3YgKyBmaW5kX2FyZ3MuYXJnYzsgKyt2KQorICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgTm9kZSAqcCA9IE5VTEw7CisgCisgICAgICAgICAgICAg
ICAgIHAgPSBmaW5kbm9kZSAoZmluZF9hcmdzLnVsaXN0LCAqdik7CisgICAgICAgICAgICAgICAg
IGlmIChwICE9IE5VTEwpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
IHNlbmRfdG9fc2VydmVyICgiRmlsZUluZm8gIiwgMCk7CisgICAgICAgICAgICAgICAgICAgICBz
ZW5kX3RvX3NlcnZlciAoKnYsIDApOworICAgICAgICAgICAgICAgICAgICAgc2VuZF90b19zZXJ2
ZXIgKCJcMDEyIiwgMSk7CisgICAgICAgICAgICAgICAgICAgICBzZW5kX3RvX3NlcnZlciAoKChz
dHJ1Y3QgbG9nZmlsZV9pbmZvICopIHAtPmRhdGEpLT5ob3N0bmFtZSwgMCk7CisgICAgICAgICAg
ICAgICAgICAgICBzZW5kX3RvX3NlcnZlciAoIlx0IiwgMSk7CisgICAgICAgICAgICAgICAgICAg
ICBzZW5kX3RvX3NlcnZlciAoKChzdHJ1Y3QgbG9nZmlsZV9pbmZvICopIHAtPmRhdGEpLT53ZCwg
MCk7CisgICAgICAgICAgICAgICAgICAgICBzZW5kX3RvX3NlcnZlciAoIlx0IiwgMSk7CisgICAg
ICAgICAgICAgICAgICAgICBzZW5kX3RvX3NlcnZlciAoIlwwMTIiLCAxKTsKKyAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAKICAJaWYgKGxvY2FsKQogIAkg
ICAgc2VuZF9hcmcoIi1sIik7CiAgCWlmIChmb3JjZV9jaSkKICAJICAgIHNlbmRfYXJnKCItZiIp
OwogIAlpZiAoIXJ1bl9tb2R1bGVfcHJvZykKICAJICAgIHNlbmRfYXJnKCItbiIpOwogIAlvcHRp
b25fd2l0aF9hcmcgKCItciIsIHNhdmVkX3RhZyk7CiAgCiAgCS8qIEZJWE1FOiBUaGlzIHdob2xl
IGZpbmRfYXJncy5mb3JjZS9TRU5EX0ZPUkNFIGJ1c2luZXNzIGlzIGEKICAJICAga2x1ZGdlLiAg
SXQgd291bGQgc2VlbSB0byBiZSBhIHNlcnZlciBidWcgdGhhdCB3ZSBoYXZlIHRvCiAgCSAgIHNh
eSB0aGF0IGZpbGVzIGFyZSBtb2RpZmllZCB3aGVuIHRoZXkgYXJlIG5vdC4gIFRoaXMgbWFrZXMK
ICAJICAgImN2cyBjb21taXQgLXIgMiIgYWNyb3NzIGEgd2hvbGUgYnVuY2ggb2YgZmlsZXMgYSB2
ZXJ5IHNsb3cKICAJICAgb3BlcmF0aW9uIChhbmQgaXQgaXNuJ3QgZG9jdW1lbnRlZCBpbiBjdnNj
bGllbnQudGV4aSkuICBJCiAgCSAgIGhhdmVuJ3QgbG9va2VkIGF0IHRoZSBzZXJ2ZXIgY29kZSBj
YXJlZnVsbHkgZW5vdWdoIHRvIGJlCiAgCSAgIF9zdXJlXyB3aHkgdGhpcyBpcyBuZWVkZWQsIGJ1
dCBpZiBpdCBpcyBiZWNhdXNlIHRoZSAiY2kiCiAgCSAgIHByb2dyYW0sIHdoaWNoIHdlIHVzZWQg
dG8gY2FsbCwgd2FudGVkIHRoZSBmaWxlIHRvIGV4aXN0LAogIAkgICB0aGVuIGl0IHdvdWxkIGJl
IHJlbGF0aXZlbHkgc2ltcGxlIHRvIGZpeCBpbiB0aGUgc2VydmVyLiAgKi8KICAJc2VuZF9maWxl
cyAoZmluZF9hcmdzLmFyZ2MsIGZpbmRfYXJncy5hcmd2LCBsb2NhbCwgMCwKICAJCSAgICBmaW5k
X2FyZ3MuZm9yY2UgPyBTRU5EX0ZPUkNFIDogMCk7CiAgCiAgCS8qIFNlbmRpbmcgb25seSB0aGUg
bmFtZXMgb2YgdGhlIGZpbGVzIHdoaWNoIHdlcmUgbW9kaWZpZWQsIGFkZGVkLAogIAkgICBvciBy
ZW1vdmVkIG1lYW5zIHRoYXQgdGhlIHNlcnZlciB3aWxsIG9ubHkgZG8gYW4gdXAtdG8tZGF0ZQog
IAkgICBjaGVjayBvbiB0aG9zZSBmaWxlcy4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gbG9jYWwg
Q1ZTIGFuZAogIAkgICBwcmV2aW91cyB2ZXJzaW9ucyBvZiBjbGllbnQvc2VydmVyIENWUywgYnV0
IGl0IHByb2JhYmx5IGlzIGEgR29vZAogIAkgICBUaGluZywgb3IgYXQgbGVhc3QgTm90IFN1Y2gg
QSBCYWQgVGhpbmcuICAqLwogIAlzZW5kX2ZpbGVfbmFtZXMgKGZpbmRfYXJncy5hcmdjLCBmaW5k
X2FyZ3MuYXJndiwgMCk7CiAgCWZyZWUgKGZpbmRfYXJncy5hcmd2KTsKICAJZGVsbGlzdCAoJmZp
bmRfYXJncy51bGlzdCk7CiAgCiAgCXNlbmRfdG9fc2VydmVyICgiY2lcMDEyIiwgMCk7CiAgCWVy
ciA9IGdldF9yZXNwb25zZXNfYW5kX2Nsb3NlICgpOworICAgICAgICAgaWYgKGVyciA9PSAwICAm
JiAgIXN1cHBvcnRlZF9yZXF1ZXN0ICgiRmlsZUluZm8iKSkKKyAgICAgICAgIHsKKyAgICAgICAg
ICAgICAvKiBGSVhNRTogTm9lbCBZYXAgKHlhcF9ub2VsQHlhaG9vLmNvbSkgMjAwMCBGZWIgMjgK
KyAgICAgICAgICAgICAgICBUaGlzIGJsb2NrIGlzIHRvIHN1cHBvcnQgb2xkIHNlcnZlcnMuICBJ
dCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICByZW1vdmVkIG9uY2UgaXQncyBkZWVtZWQgdGhh
dCBhbGwgc2VydmVycyBzdXBwb3J0IHRoZQorICAgICAgICAgICAgICAgICJGaWxlSW5mbyIgcmVx
dWVzdC4gIElNSE8sIGl0IHNob3VsZCBiZSBzYWZlIHRvIHJlbW92ZQorICAgICAgICAgICAgICAg
IGJ5IDIwMDIgRmViIDI4IChpZSBpbiB0d28geWVhcnMpLgorICAgICAgICAgICAgICovCisgICAg
ICAgICAgICAgY2hhciAqKnYgPSBOVUxMOworIAorICAgICAgICAgICAgIGZvcih2ID0gZmluZF9h
cmdzLmFyZ3Y7IHYgPCBmaW5kX2FyZ3MuYXJndiArIGZpbmRfYXJncy5hcmdjOyArK3YpCisgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICBOb2RlICpwID0gTlVMTDsKKyAKKyAgICAgICAg
ICAgICAgICAgcCA9IGZpbmRub2RlIChmaW5kX2FyZ3MudWxpc3QsICp2KTsKKyAgICAgICAgICAg
ICAgICAgaWYgKHAgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqcmVwb3NpdG9yeSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICBjaGFy
ICp1c2VyID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBnZXRjYWxsZXIg
KCk7CisgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5ID0gKChzdHJ1Y3QgbG9nZmlsZV9p
bmZvICopIHAtPmRhdGEpLT5yZXBvc2l0b3J5OworIAorICAgICAgICAgICAgICAgICAgICAgZmls
ZWF0dHJfc3RhcnRkaXIgKHJlcG9zaXRvcnkpOworIAorICAgICAgICAgICAgICAgICAgICAgbm90
aWZ5X2RvICgnQycsICp2LCB1c2VyLCB1c2VyLCBOVUxMLCAiIiwgcmVwb3NpdG9yeSk7CisgCisg
ICAgICAgICAgICAgICAgICAgICBmaWxlYXR0cl9mcmVlICgpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorIAogIAlpZiAoZXJyICE9IDAgJiYgdXNlX2Vk
aXRvciAmJiBzYXZlZF9tZXNzYWdlICE9IE5VTEwpCiAgCXsKICAJICAgIC8qIElmIHRoZXJlIHdh
cyBhbiBlcnJvciwgZG9uJ3QgbnVrZSB0aGUgdXNlcidzIGNhcmVmdWxseQogIAkgICAgICAgY29u
c3RydWN0ZWQgcHJvc2UuICBUaGlzIGlzIHNvbWV0aGluZyBvZiBhIGtsdWRnZTsgYSBiZXR0ZXIK
ICAJICAgICAgIHNvbHV0aW9uIGlzIHByb2JhYmx5IG1vcmUgYWxvbmcgdGhlIGxpbmVzIG9mICMx
NTAgaW4gVE9ETwogIAkgICAgICAgKGRvaW5nIGEgc2Vjb25kIHVwLXRvLWRhdGUgY2hlY2sgYmVm
b3JlIGFjY2VwdGluZyB0aGUKICAJICAgICAgIGxvZyBtZXNzYWdlIGhhcyBhbHNvIGJlZW4gc3Vn
Z2VzdGVkLCBidXQgdGhhdCBzZWVtcyBraW5kIG9mCiAgCSAgICAgICBpZmZ5IGJlY2F1c2UgdGhl
IHJlYWwgdXAtdG8tZGF0ZSBjaGVjayBjb3VsZCBzdGlsbCBmYWlsLAogIAkgICAgICAgYW5vdGhl
ciBlcnJvciBjb3VsZCBvY2N1ciwgJmMuICBBbHNvLCBhIHNlY29uZCBjaGVjayB3b3VsZAogIAkg
ICAgICAgc2xvdyB0aGluZ3MgZG93bikuICAqLwogIAogIAkgICAgY2hhciAqZm5hbWU7CiAgCSAg
ICBGSUxFICpmcDsKICAKICAJICAgIGZuYW1lID0gY3ZzX3RlbXBfbmFtZSAoKTsKICAJICAgIGZw
ID0gQ1ZTX0ZPUEVOIChmbmFtZSwgIncrIik7CioqKioqKioqKioqKioqKgoqKiogNjM0LDY2NSAq
KioqCi0tLSA2OTUsNzMzIC0tLS0KICAJd29ya2luZ19kaXIgPSB4Z2V0d2QoKTsKICAgICAgfQog
ICNlbmRpZgogIAogICAgICAvKgogICAgICAgKiBSdW4gdGhlIHJlY3Vyc2lvbiBwcm9jZXNzb3Ig
dG8gdmVyaWZ5IHRoZSBmaWxlcyBhcmUgYWxsIHVwLXRvLWRhdGUKICAgICAgICovCiAgICAgIGVy
ciA9IHN0YXJ0X3JlY3Vyc2lvbiAoY2hlY2tfZmlsZXByb2MsIGNoZWNrX2ZpbGVzZG9uZXByb2Ms
CiAgCQkJICAgY2hlY2tfZGlyZW50cHJvYywgKERJUkxFQVZFUFJPQykgTlVMTCwgTlVMTCwgYXJn
YywKICAJCQkgICBhcmd2LCBsb2NhbCwgV19MT0NBTCwgYWZsYWcsIDAsIChjaGFyICopIE5VTEws
IDEpOwogICAgICBpZiAoZXJyKQogICAgICB7CiAgCUxvY2tfQ2xlYW51cCAoKTsKICAJZXJyb3Ig
KDEsIDAsICJjb3JyZWN0IGFib3ZlIGVycm9ycyBmaXJzdCEiKTsKICAgICAgfQogIAorICNpZmRl
ZiBTRVJWRVJfU1VQUE9SVAorICAgICBpZiAoc2VydmVyX2FjdGl2ZSkKKyAgICAgeworICAgICAg
IHNlcnZlcl9kZWxmaWxlaW5mb2xpc3QgKCk7CisgICAgIH0KKyAjZW5kaWYKKyAKICAgICAgLyoK
ICAgICAgICogUnVuIHRoZSByZWN1cnNpb24gcHJvY2Vzc29yIHRvIGNvbW1pdCB0aGUgZmlsZXMK
ICAgICAgICovCiAgICAgIHdyaXRlX2Rpcm5vbmJyYW5jaCA9IDA7CiAgICAgIGlmIChub2V4ZWMg
PT0gMCkKICAJZXJyID0gc3RhcnRfcmVjdXJzaW9uIChjb21taXRfZmlsZXByb2MsIGNvbW1pdF9m
aWxlc2RvbmVwcm9jLAogIAkJCSAgICAgICBjb21taXRfZGlyZW50cHJvYywgY29tbWl0X2Rpcmxl
YXZlcHJvYywgTlVMTCwKICAJCQkgICAgICAgYXJnYywgYXJndiwgbG9jYWwsIFdfTE9DQUwsIGFm
bGFnLCAwLAogIAkJCSAgICAgICAoY2hhciAqKSBOVUxMLCAxKTsKICAKICAgICAgLyoKICAgICAg
ICogVW5sb2NrIGFsbCB0aGUgZGlycyBhbmQgY2xlYW4gdXAKICAgICAgICovCiAgICAgIExvY2tf
Q2xlYW51cCAoKTsKICAgICAgZGVsbGlzdCAoJm11bGlzdCk7CiAgCioqKioqKioqKioqKioqKgoq
KiogODA5LDg0MCAqKioqCi0tLSA4NzcsOTA5IC0tLS0KICAKICAgICAgc3dpdGNoIChzdGF0dXMp
CiAgICAgIHsKICAJY2FzZSBUX0NIRUNLT1VUOgogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogIAlj
YXNlIFRfUEFUQ0g6CiAgI2VuZGlmCiAgCWNhc2UgVF9ORUVEU19NRVJHRToKICAJY2FzZSBUX0NP
TkZMSUNUOgogIAljYXNlIFRfUkVNT1ZFX0VOVFJZOgogIAkgICAgZXJyb3IgKDAsIDAsICJVcC10
by1kYXRlIGNoZWNrIGZhaWxlZCBmb3IgYCVzJyIsIGZpbmZvLT5mdWxsbmFtZSk7CiAgCSAgICBm
cmVldmVyc190cyAoJnZlcnMpOwogIAkgICAgcmV0dXJuICgxKTsKICAJY2FzZSBUX01PRElGSUVE
OgogIAljYXNlIFRfQURERUQ6CiAgCWNhc2UgVF9SRU1PVkVEOgorICAgICAgICAgewogIAkgICAg
LyoKICAJICAgICAqIHNvbWUgcXVpY2sgc2FuaXR5IGNoZWNrczsgaWYgbm8gbnVtZXJpYyAtciBv
cHRpb24gc3BlY2lmaWVkOgogIAkgICAgICoJLSBjYW4ndCBoYXZlIGEgc3RpY2t5IGRhdGUKICAJ
ICAgICAqCS0gY2FuJ3QgaGF2ZSBhIHN0aWNreSB0YWcgdGhhdCBpcyBub3QgYSBicmFuY2gKICAJ
ICAgICAqIEFsc28sCiAgCSAgICAgKgktIGlmIHN0YXR1cyBpcyBUX1JFTU9WRUQsIGNhbid0IGhh
dmUgYSBudW1lcmljIHRhZwogIAkgICAgICoJLSBpZiBzdGF0dXMgaXMgVF9BRERFRCwgcmNzIGZp
bGUgbXVzdCBub3QgZXhpc3QgdW5sZXNzIG9uCiAgCSAgICAgKiAgICBhIGJyYW5jaAogIAkgICAg
ICoJLSBpZiBzdGF0dXMgaXMgVF9BRERFRCwgY2FuJ3QgaGF2ZSBhIG5vbi10cnVuayBudW1lcmlj
IHJldgogIAkgICAgICoJLSBpZiBzdGF0dXMgaXMgVF9NT0RJRklFRCBhbmQgYSBDb25mbGljdCBt
YXJrZXIgZXhpc3RzLCBkb24ndAogIAkgICAgICogICAgYWxsb3cgdGhlIGNvbW1pdCBpZiB0aW1l
c3RhbXAgaXMgaWRlbnRpY2FsIG9yIGlmIHdlIGZpbmQKICAJICAgICAqICAgIGFuIFJDU19NRVJH
RV9QQVQgaW4gdGhlIGZpbGUuCiAgCSAgICAgKi8KICAJICAgIGlmICghc2F2ZWRfdGFnIHx8ICFp
c2RpZ2l0ICgodW5zaWduZWQgY2hhcikgKnNhdmVkX3RhZykpCiAgCSAgICB7CiAgCQlpZiAodmVy
cy0+ZGF0ZSkKKioqKioqKioqKioqKioqCioqKiA5ODIsMTAxMyAqKioqCi0tLSAxMDUxLDExNzkg
LS0tLQogIAkJICAgIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IG1hc3Rlcl9saXN0cykpOwogIAkJ
bWwtPnVsaXN0ID0gdWxpc3Q7CiAgCQltbC0+Y2lsaXN0ID0gY2lsaXN0OwogIAkJcC0+ZGF0YSA9
IChjaGFyICopIG1sOwogIAkJcC0+ZGVscHJvYyA9IG1hc3Rlcmxpc3RfZGVscHJvYzsKICAJCSh2
b2lkKSBhZGRub2RlIChtdWxpc3QsIHApOwogIAkgICAgfQogIAogIAkgICAgLyogZmlyc3QgZG8g
dWxpc3QsIHRoZW4gY2lsaXN0ICovCiAgCSAgICBwID0gZ2V0bm9kZSAoKTsKICAJICAgIHAtPmtl
eSA9IHhzdHJkdXAgKGZpbmZvLT5maWxlKTsKICAJICAgIHAtPnR5cGUgPSBVUERBVEU7CiAgCSAg
ICBwLT5kZWxwcm9jID0gdXBkYXRlX2RlbHByb2M7CiAgCSAgICBsaSA9ICgoc3RydWN0IGxvZ2Zp
bGVfaW5mbyAqKQogIAkJICB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBsb2dmaWxlX2luZm8pKSk7
CiAgCSAgICBsaS0+dHlwZSA9IHN0YXR1czsKKyAKKyAjaWYgU0VSVkVSX1NVUFBPUlQKKyAgICAg
ICAgICAgICBpZiAoc2VydmVyX2FjdGl2ZSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgIHN0cnVjdCBsb2dmaWxlX2luZm8gKmNsaWVudF9maWxlaW5mbyA9IE5VTEw7CisgCisgICAg
ICAgICAgICAgICAgIGNsaWVudF9maWxlaW5mbyA9IHNlcnZlcl9nZXRmaWxlaW5mbyAoZmluZm8t
PmZ1bGxuYW1lKTsKKyAgICAgICAgICAgICAgICAgaWYgKGNsaWVudF9maWxlaW5mbyA9PSBOVUxM
KQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBsaS0+cmVwb3NpdG9y
eSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICBsaS0+aG9zdG5hbWUgPSBOVUxMOworICAg
ICAgICAgICAgICAgICAgICAgbGktPndkID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgIGxpLT5yZXBvc2l0b3J5ID0geHN0cmR1cCAoY2xpZW50X2ZpbGVpbmZvLT5yZXBvc2l0b3J5
KTsKKyAgICAgICAgICAgICAgICAgICAgIGxpLT5ob3N0bmFtZSA9IHhzdHJkdXAgKGNsaWVudF9m
aWxlaW5mby0+aG9zdG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgbGktPndkID0geHN0cmR1
cCAoY2xpZW50X2ZpbGVpbmZvLT53ZCk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgZWxzZQorICNlbmRpZgorICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgbGktPnJlcG9zaXRvcnkgPSB4c3RyZHVwIChmaW5mby0+cmVwb3NpdG9yeSk7Cisg
ICAgICAgICAgICAgICAgIGxpLT5ob3N0bmFtZSA9IHhzdHJkdXAgKGhvc3RuYW1lKTsKKyAgICAg
ICAgICAgICAgICAgbGktPndkID0gKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChDdXJEaXIpICsg
c2l6ZW9mICgnLycpICsgc3RybGVuIChmaW5mby0+dXBkYXRlX2RpcikgKyAxKTsKKyAKKyAgICAg
ICAgICAgICAgICAgc3RyY3B5IChsaS0+d2QsIEN1ckRpcik7CisgICAgICAgICAgICAgICAgIGlm
IChmaW5mby0+dXBkYXRlX2RpciAhPSBOVUxMICAmJiAgKmZpbmZvLT51cGRhdGVfZGlyICE9ICdc
MCcpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIHN0cmNhdCAobGkt
PndkLCAiLyIpOworICAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChsaS0+d2QsIGZpbmZvLT51
cGRhdGVfZGlyKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAKKyAgICAg
ICAgICAgICBpZiAobGktPmhvc3RuYW1lID09IE5VTEwgIHx8ICBsaS0+d2QgPT0gTlVMTCkKKyAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGxpLT5lZGl0b3IgPSBOVUxMOworICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICBjaGFyICplZGl0b3JzID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAgICAgZWRpdG9ycyA9
IGZpbGVhdHRyX2dldDAgKGZpbmZvLT5maWxlLCAiX2VkaXRvcnMiKTsKKyAgICAgICAgICAgICAg
ICAgaWYgKGVkaXRvcnMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgbGktPmVkaXRvciA9IE5VTEw7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBj
aGFyICplZGl0b3IgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNlciA9IE5V
TEw7CisgICAgICAgICAgICAgICAgICAgICBjaGFyICpwID0gTlVMTDsKKyAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKnAwID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBn
ZXRjYWxsZXIgKCk7CisgCisgICAgICAgICAgICAgICAgICAgICBlZGl0b3IgPSAoY2hhciAqKSB4
bWFsbG9jIChzdHJsZW4gKHVzZXIpICsgc2l6ZW9mICgnQCcpICsgc3RybGVuIChsaS0+aG9zdG5h
bWUpICsgc2l6ZW9mICgnOicpICsgc3RybGVuIChsaS0+d2QpICsgMSk7CisgICAgICAgICAgICAg
ICAgICAgICBzcHJpbnRmIChlZGl0b3IsICIlc0AlczolcyIsIHVzZXIsIGxpLT5ob3N0bmFtZSwg
bGktPndkKTsKKyAKKyAgICAgICAgICAgICAgICAgICAgIHAgPSBlZGl0b3JzOworICAgICAgICAg
ICAgICAgICAgICAgcDAgPSBwOworICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdc
MCcpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcCA9
IHN0cmNociAocCwgJz4nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBOVUxM
KQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wIChl
ZGl0b3IsIHAwKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgIHAgPSBzdHJjaHIgKHAsICcsJyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgcDAgPSBwOworICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0cmNtcCAoZWRpdG9yLCBwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaS0+ZWRpdG9yID0gZWRpdG9yOworICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIGxpLT5lZGl0b3IgPSBOVUxMOwor
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGVkaXRvcik7CisgICAgICAgICAgICAgICAg
ICAgICB9CisgCisgICAgICAgICAgICAgICAgICAgICBmcmVlIChlZGl0b3JzKTsKKyAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAKICAJICAgIGxpLT50YWcgPSB4c3RyZHVwICh2
ZXJzLT50YWcpOwogIAkgICAgbGktPnJldl9vbGQgPSB4c3RyZHVwICh2ZXJzLT52bl9yY3MpOwog
IAkgICAgbGktPnJldl9uZXcgPSBOVUxMOwogIAkgICAgcC0+ZGF0YSA9IChjaGFyICopIGxpOwog
IAkgICAgKHZvaWQpIGFkZG5vZGUgKHVsaXN0LCBwKTsKICAKICAJICAgIHAgPSBnZXRub2RlICgp
OwogIAkgICAgcC0+a2V5ID0geHN0cmR1cCAoZmluZm8tPmZpbGUpOwogIAkgICAgcC0+dHlwZSA9
IFVQREFURTsKICAJICAgIHAtPmRlbHByb2MgPSBjaV9kZWxwcm9jOwogIAkgICAgY2kgPSAoc3Ry
dWN0IGNvbW1pdF9pbmZvICopIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IGNvbW1pdF9pbmZvKSk7
CiAgCSAgICBjaS0+c3RhdHVzID0gc3RhdHVzOwogIAkgICAgaWYgKHZlcnMtPnRhZykKICAJCWlm
IChpc2RpZ2l0ICgodW5zaWduZWQgY2hhcikgKnZlcnMtPnRhZykpCiAgCQkgICAgY2ktPnJldiA9
IHhzdHJkdXAgKHZlcnMtPnRhZyk7CiAgCQllbHNlCioqKioqKioqKioqKioqKgoqKiogMTA0Miwx
MDczICoqKioKLS0tIDEyMDgsMTI0MSAtLS0tCiAgCQkgICB3ZSdyZSBkb2luZyBhIHJlbW92ZSBv
cGVyYXRpb24/ICovCiAgCQlpZiAobGlua3AgIT0gTlVMTCkKICAJCXsKICAJCSAgICAvKiBDcmVh
dGUgYSBuZXcgaGFyZGxpbmtfaW5mbyBub2RlLCB3aGljaCB3aWxsIHJlY29yZAogIAkJICAgICAg
IHRoZSBjdXJyZW50IGZpbGUncyBzdGF0dXMgYW5kIHRoZSBsaW5rcyBsaXN0ZWQgaW4gaXRzCiAg
CQkgICAgICAgYGhhcmRsaW5rcycgZGVsdGEgZmllbGQuICBXZSB3aWxsIGFwcGVuZCB0aGlzCiAg
CQkgICAgICAgaGFyZGxpbmtfaW5mbyBub2RlIHRvIHRoZSBhcHByb3ByaWF0ZSBoYXJkbGlzdCBl
bnRyeS4gKi8KICAJCSAgICBobGluZm8gPSAoc3RydWN0IGhhcmRsaW5rX2luZm8gKikKICAJCQl4
bWFsbG9jIChzaXplb2YgKHN0cnVjdCBoYXJkbGlua19pbmZvKSk7CiAgCQkgICAgaGxpbmZvLT5z
dGF0dXMgPSBzdGF0dXM7CiAgCQkgICAgbGlua3AtPmRhdGEgPSAoY2hhciAqKSBobGluZm87CiAg
CQl9CiAgCSAgICB9CiAgI2VuZGlmCiAgCiAgCSAgICBicmVhazsKKyAgICAgICAgIH0KKyAKICAJ
Y2FzZSBUX1VOS05PV046CiAgCSAgICBlcnJvciAoMCwgMCwgIm5vdGhpbmcga25vd24gYWJvdXQg
YCVzJyIsIGZpbmZvLT5mdWxsbmFtZSk7CiAgCSAgICBmcmVldmVyc190cyAoJnZlcnMpOwogIAkg
ICAgcmV0dXJuICgxKTsKICAJY2FzZSBUX1VQVE9EQVRFOgogIAkgICAgYnJlYWs7CiAgCWRlZmF1
bHQ6CiAgCSAgICBlcnJvciAoMCwgMCwgIkNWUyBpbnRlcm5hbCBlcnJvcjogdW5rbm93biBzdGF0
dXMgJWQiLCBzdGF0dXMpOwogIAkgICAgYnJlYWs7CiAgICAgIH0KICAKICAgICAgZnJlZXZlcnNf
dHMgKCZ2ZXJzKTsKICAgICAgcmV0dXJuICgwKTsKICB9CiAgCiAgLyoKKioqKioqKioqKioqKioq
CioqKiAxMzQ0LDEzNzYgKioqKgogIAkgICAgc2VydmVyX3NjcmF0Y2hfZW50cnlfb25seSAoKTsK
ICAJICAgIHNlcnZlcl91cGRhdGVkIChmaW5mbywKICAJCQkgICAgTlVMTCwKICAKICAJCQkgICAg
LyogRG9lc24ndCBtYXR0ZXIsIGl0IHdvbid0IGdldCBjaGVja2VkLiAgKi8KICAJCQkgICAgU0VS
VkVSX1VQREFURUQsCiAgCiAgCQkJICAgIChtb2RlX3QpIC0xLAogIAkJCSAgICAodW5zaWduZWQg
Y2hhciAqKSBOVUxMLAogIAkJCSAgICAoc3RydWN0IGJ1ZmZlciAqKSBOVUxMKTsKICAJfQogICNl
bmRpZgogICAgICB9CiAgCiAgICAgIC8qIENsZWFybHkgdGhpcyBpcyByaWdodCBmb3IgVF9NT0RJ
RklFRC4gIEkgaGF2ZW4ndCB0aG91Z2h0IHNvIG11Y2gKICAgICAgICAgYWJvdXQgVF9BRERFRCBv
ciBUX1JFTU9WRUQuICAqLwohICAgICBub3RpZnlfZG8gKCdDJywgZmluZm8tPmZpbGUsIGdldGNh
bGxlciAoKSwgTlVMTCwgTlVMTCwgZmluZm8tPnJlcG9zaXRvcnkpOwogIAogIG91dDoKICAgICAg
aWYgKGVyciAhPSAwKQogICAgICB7CiAgCS8qIG9uIGZhaWx1cmUsIHJlbW92ZSB0aGUgZmlsZSBm
cm9tIHVsaXN0ICovCiAgCXAgPSBmaW5kbm9kZSAodWxpc3QsIGZpbmZvLT5maWxlKTsKICAJaWYg
KHApCiAgCSAgICBkZWxub2RlIChwKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAJLyog
T24gc3VjY2VzcywgcmV0cmlldmUgdGhlIG5ldyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZmlsZSBh
bmQKICAgICAgICAgICAgIGNvcHkgaXQgaW50byB0aGUgbG9nIGluZm9ybWF0aW9uIChzZWUgbG9n
bXNnLmMKICAgICAgICAgICAgIChsb2dmaWxlX3dyaXRlKSBmb3IgbW9yZSBkZXRhaWxzKS4gIFdl
IHNob3VsZCBvbmx5IHVwZGF0ZQogICAgICAgICAgICAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBm
aWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvcgogICAgICAgICAgICAgbW9kaWZpZWQgYnV0IG5v
dCByZW1vdmVkLiAgV2h5PyAgY2xhc3NpZnlfZmlsZV9pbnRlcm5hbAotLS0gMTUxMiwxNTgyIC0t
LS0KICAJICAgIHNlcnZlcl9zY3JhdGNoX2VudHJ5X29ubHkgKCk7CiAgCSAgICBzZXJ2ZXJfdXBk
YXRlZCAoZmluZm8sCiAgCQkJICAgIE5VTEwsCiAgCiAgCQkJICAgIC8qIERvZXNuJ3QgbWF0dGVy
LCBpdCB3b24ndCBnZXQgY2hlY2tlZC4gICovCiAgCQkJICAgIFNFUlZFUl9VUERBVEVELAogIAog
IAkJCSAgICAobW9kZV90KSAtMSwKICAJCQkgICAgKHVuc2lnbmVkIGNoYXIgKikgTlVMTCwKICAJ
CQkgICAgKHN0cnVjdCBidWZmZXIgKikgTlVMTCk7CiAgCX0KICAjZW5kaWYKICAgICAgfQogIAog
ICAgICAvKiBDbGVhcmx5IHRoaXMgaXMgcmlnaHQgZm9yIFRfTU9ESUZJRUQuICBJIGhhdmVuJ3Qg
dGhvdWdodCBzbyBtdWNoCiAgICAgICAgIGFib3V0IFRfQURERUQgb3IgVF9SRU1PVkVELiAgKi8K
ISAgICAgewohICAgICAgICAgY2hhciAqZWRpdG9yID0gTlVMTDsKISAKISAjaWZkZWYgU0VSVkVS
X1NVUFBPUlQKISAgICAgICAgIGlmIChzZXJ2ZXJfYWN0aXZlKQohICAgICAgICAgewohICAgICAg
ICAgICAgIE5vZGUgKnAgPSBOVUxMOwohIAohICAgICAgICAgICAgIHAgPSBmaW5kbm9kZSAodWxp
c3QsIGZpbmZvLT5maWxlKTsKISAgICAgICAgICAgICBpZiAocCAhPSBOVUxMKQohICAgICAgICAg
ICAgIHsKISAgICAgICAgICAgICAgICAgc3RydWN0IGxvZ2ZpbGVfaW5mbyAqbGkgPSBOVUxMOwoh
IAohICAgICAgICAgICAgICAgICBsaSA9IChzdHJ1Y3QgbG9nZmlsZV9pbmZvICopIHAtPmRhdGE7
CiEgICAgICAgICAgICAgICAgIGlmIChsaSAhPSBOVUxMKQohICAgICAgICAgICAgICAgICB7CiEg
ICAgICAgICAgICAgICAgICAgICBlZGl0b3IgPSBsaS0+ZWRpdG9yOwohICAgICAgICAgICAgICAg
ICB9CiEgICAgICAgICAgICAgfQohIAohICAgICAgICAgICAgIG5vdGlmeV9kbyAoJ0MnLCBmaW5m
by0+ZmlsZSwgZ2V0Y2FsbGVyICgpLCBlZGl0b3IgPyBlZGl0b3IgOiBnZXRjYWxsZXIgKCksIE5V
TEwsICIiLCBmaW5mby0+cmVwb3NpdG9yeSk7CiEgICAgICAgICB9CiEgICAgICAgICBlbHNlCiEg
I2VuZGlmCiEgICAgICAgICB7CiEgICAgICAgICAgICAgZWRpdG9yID0gKGNoYXIgKikgeG1hbGxv
YyAoc3RybGVuIChnZXRjYWxsZXIgKCkpICsgc2l6ZW9mICgnQCcpICsgc3RybGVuIChob3N0bmFt
ZSkgKyBzaXplb2YgKCc6JykgKyBzdHJsZW4gKEN1ckRpcikgKyBzaXplb2YgKCcvJykgKyBzdHJs
ZW4gKGZpbmZvLT51cGRhdGVfZGlyKSArIDEpOwohICAgICAgICAgICAgIHNwcmludGYgKGVkaXRv
ciwgIiVzQCVzOiVzIiwgZ2V0Y2FsbGVyICgpLCBob3N0bmFtZSwgQ3VyRGlyKTsKISAKISAgICAg
ICAgICAgICBpZiAoKmZpbmZvLT51cGRhdGVfZGlyICE9ICdcMCcpCiEgICAgICAgICAgICAgewoh
ICAgICAgICAgICAgICAgICBzdHJjYXQgKGVkaXRvciwgIi8iKTsKISAgICAgICAgICAgICAgICAg
c3RyY2F0IChlZGl0b3IsIGZpbmZvLT51cGRhdGVfZGlyKTsKISAgICAgICAgICAgICB9CiEgCiEg
ICAgICAgICAgICAgbm90aWZ5X2RvICgnQycsIGZpbmZvLT5maWxlLCBnZXRjYWxsZXIgKCksIGVk
aXRvciwgTlVMTCwgIiIsIGZpbmZvLT5yZXBvc2l0b3J5KTsKISAKISAgICAgICAgICAgICBmcmVl
IChlZGl0b3IpOwohICAgICAgICAgfQohICAgICB9CiAgCiAgb3V0OgogICAgICBpZiAoZXJyICE9
IDApCiAgICAgIHsKICAJLyogb24gZmFpbHVyZSwgcmVtb3ZlIHRoZSBmaWxlIGZyb20gdWxpc3Qg
Ki8KICAJcCA9IGZpbmRub2RlICh1bGlzdCwgZmluZm8tPmZpbGUpOwogIAlpZiAocCkKICAJICAg
IGRlbG5vZGUgKHApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogIAkvKiBPbiBzdWNjZXNz
LCByZXRyaWV2ZSB0aGUgbmV3IHZlcnNpb24gbnVtYmVyIG9mIHRoZSBmaWxlIGFuZAogICAgICAg
ICAgICAgY29weSBpdCBpbnRvIHRoZSBsb2cgaW5mb3JtYXRpb24gKHNlZSBsb2dtc2cuYwogICAg
ICAgICAgICAgKGxvZ2ZpbGVfd3JpdGUpIGZvciBtb3JlIGRldGFpbHMpLiAgV2Ugc2hvdWxkIG9u
bHkgdXBkYXRlCiAgICAgICAgICAgICB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIGZpbGVzIHRoYXQg
aGF2ZSBiZWVuIGFkZGVkIG9yCiAgICAgICAgICAgICBtb2RpZmllZCBidXQgbm90IHJlbW92ZWQu
ICBXaHk/ICBjbGFzc2lmeV9maWxlX2ludGVybmFsCioqKioqKioqKioqKioqKgoqKiogMjI4OSwy
MzIwICoqKioKLS0tIDI0OTUsMjUzNCAtLS0tCiAgCiAgICAgIGlmIChicmFuY2gpCiAgCWZyZWUg
KGJyYW5jaCk7CiAgICAgIHJldHVybiAoMSk7CiAgfQogIAogIC8qCiAgICogZnJlZSBhbiBVUERB
VEUgbm9kZSdzIGRhdGEKICAgKi8KICB2b2lkCiAgdXBkYXRlX2RlbHByb2MgKHApCiAgICAgIE5v
ZGUgKnA7CiAgewogICAgICBzdHJ1Y3QgbG9nZmlsZV9pbmZvICpsaTsKICAKICAgICAgbGkgPSAo
c3RydWN0IGxvZ2ZpbGVfaW5mbyAqKSBwLT5kYXRhOworICAgICBpZiAobGktPnJlcG9zaXRvcnkp
CisgICAgICAgICBmcmVlIChsaS0+cmVwb3NpdG9yeSk7CisgICAgIGlmIChsaS0+aG9zdG5hbWUp
CisgICAgICAgICBmcmVlIChsaS0+aG9zdG5hbWUpOworICAgICBpZiAobGktPndkKQorICAgICAg
ICAgZnJlZSAobGktPndkKTsKKyAgICAgaWYgKGxpLT5lZGl0b3IpCisgICAgICAgICBmcmVlIChs
aS0+ZWRpdG9yKTsKICAgICAgaWYgKGxpLT50YWcpCiAgCWZyZWUgKGxpLT50YWcpOwogICAgICBp
ZiAobGktPnJldl9vbGQpCiAgCWZyZWUgKGxpLT5yZXZfb2xkKTsKICAgICAgaWYgKGxpLT5yZXZf
bmV3KQogIAlmcmVlIChsaS0+cmV2X25ldyk7CiAgICAgIGZyZWUgKGxpKTsKICB9CiAgCiAgLyoK
ICAgKiBGcmVlIHRoZSBjb21taXRfaW5mbyBzdHJ1Y3R1cmUgaW4gcC4KICAgKi8KICBzdGF0aWMg
dm9pZAogIGNpX2RlbHByb2MgKHApCiAgICAgIE5vZGUgKnA7CiAgewpJbmRleDogc3JjL2N2cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9jdnMuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEu
NC4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjQuMQoqKiogc3JjL2N2cy5oCTIw
MDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL2N2cy5oCTIwMDEvMDMvMDYgMjI6MTY6
MTgJMS4xLjEuMS40LjEKKioqKioqKioqKioqKioqCioqKiA3ODAsODExICoqKioKLS0tIDc4MCw4
MTUgLS0tLQogICNlbmRpZgogICAgICBUX1RJVExFCQkJCS8qIHRpdGxlIGZvciBub2RlIHR5cGUg
CQkgKi8KICB9OwogIHR5cGVkZWYgZW51bSBjbGFzc2lmeV90eXBlIEN0eXBlOwogIAogIEN0eXBl
IENsYXNzaWZ5X0ZpbGUgUFJPVE8KICAgICAgKChzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbywgY2hh
ciAqdGFnLCBjaGFyICpkYXRlLCBjaGFyICpvcHRpb25zLAogICAgICAgIGludCBmb3JjZV90YWdf
bWF0Y2gsIGludCBhZmxhZywgVmVyc19UUyAqKnZlcnNwLCBpbnQgcGlwZW91dCkpOwogIAogIC8q
CiAgICogc3RydWN0dXJlIHVzZWQgZm9yIGxpc3Qgbm9kZXMgcGFzc2VkIHRvIFVwZGF0ZV9Mb2dm
aWxlKCkgYW5kCiAgICogZG9fZWRpdG9yKCkuCiAgICovCiAgc3RydWN0IGxvZ2ZpbGVfaW5mbwog
IHsKICAgIGVudW0gY2xhc3NpZnlfdHlwZSB0eXBlOworICAgY2hhciAqcmVwb3NpdG9yeTsKKyAg
IGNoYXIgKmhvc3RuYW1lOworICAgY2hhciAqd2Q7ICAgICAvKiB3b3JraW5nIGRpcmVjdG9yeSAq
LworICAgY2hhciAqZWRpdG9yOwogICAgY2hhciAqdGFnOwogICAgY2hhciAqcmV2X29sZDsJCS8q
IHJldiBudW1iZXIgYmVmb3JlIGEgY29tbWl0L21vZGlmeSwKICAJCQkJICAgTlVMTCBmb3IgYWRk
IG9yIGltcG9ydCAqLwogICAgY2hhciAqcmV2X25ldzsJCS8qIHJldiBudW1iZXIgYWZ0ZXIgYSBj
b21taXQvbW9kaWZ5LAogIAkJCQkgICBhZGQsIG9yIGltcG9ydCwgTlVMTCBmb3IgcmVtb3ZlICov
CiAgfTsKICAMCiAgLyogV3JhcHBlcnMuICAqLwogIAogIHR5cGVkZWYgZW51bSB7IFdSQVBfTUVS
R0UsIFdSQVBfQ09QWSB9IFdyYXBNZXJnZU1ldGhvZDsKICB0eXBlZGVmIGVudW0gewogICAgICAv
KiAtdCBhbmQgLWYgd3JhcHBlciBvcHRpb25zLiAgVHJlYXRpbmcgZGlyZWN0b3JpZXMgYXMgc2lu
Z2xlIGZpbGVzLiAgKi8KICAgICAgV1JBUF9UT0NWUywKICAgICAgV1JBUF9GUk9NQ1ZTLAogICAg
ICAvKiAtayB3cmFwcGVyIG9wdGlvbi4gIERlZmF1bHQga2V5d29yZCBleHBhbnNpb24gb3B0aW9u
cy4gICovCiAgICAgIFdSQVBfUkNTT1BUSU9OCkluZGV4OiBzcmMvZWRpdC5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9lZGl0LmMsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xLjQuMgpkaWZmIC1D
MTYgLXcgLXIxLjEuMS4xIC1yMS4xLjEuMS40LjIKKioqIHNyYy9lZGl0LmMJMjAwMS8wMy8wNiAx
NjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvZWRpdC5jCTIwMDEvMDMvMDYgMjI6NDc6MTcJMS4xLjEu
MS40LjIKKioqKioqKioqKioqKioqCioqKiAzLDM0ICoqKioKLS0tIDMsMzYgLS0tLQogICAgIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiAgICAgYW55IGxhdGVy
IHZlcnNpb24uCiAgCiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICovCiAgCiAgI2luY2x1ZGUg
ImN2cy5oIgogICNpbmNsdWRlICJnZXRsaW5lLmgiCiAgI2luY2x1ZGUgIndhdGNoLmgiCiAgI2lu
Y2x1ZGUgImVkaXQuaCIKICAjaW5jbHVkZSAiZmlsZWF0dHIuaCIKICAKKyAjaW5jbHVkZSA8YXNz
ZXJ0Lmg+CisgCiAgc3RhdGljIGludCB3YXRjaF9vbm9mZiBQUk9UTyAoKGludCwgY2hhciAqKikp
OwogIAogIHN0YXRpYyBpbnQgc2V0dGluZ19kZWZhdWx0OwogIHN0YXRpYyBpbnQgdHVybmluZ19v
bjsKICAKICBzdGF0aWMgaW50IHNldHRpbmdfdGVkaXQ7CiAgc3RhdGljIGludCBzZXR0aW5nX3R1
bmVkaXQ7CiAgc3RhdGljIGludCBzZXR0aW5nX3Rjb21taXQ7CiAgCiAgc3RhdGljIGludCBvbm9m
Zl9maWxlcHJvYyBQUk9UTyAoKHZvaWQgKmNhbGxlcmRhdCwgc3RydWN0IGZpbGVfaW5mbyAqZmlu
Zm8pKTsKICAKICBzdGF0aWMgaW50CiAgb25vZmZfZmlsZXByb2MgKGNhbGxlcmRhdCwgZmluZm8p
CiAgICAgIHZvaWQgKmNhbGxlcmRhdDsKICAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87CiAg
ewoqKioqKioqKioqKioqKioKKioqIDE0MSwxNzIgKioqKgotLS0gMTQzLDE3NSAtLS0tCiAgfQog
IAogIHN0YXRpYyBpbnQgbmNoZWNrX2ZpbGVwcm9jIFBST1RPICgodm9pZCAqY2FsbGVyZGF0LCBz
dHJ1Y3QgZmlsZV9pbmZvICpmaW5mbykpOwogIAogIC8qIENoZWNrIGZvciBhbmQgcHJvY2VzcyBu
b3RpZmljYXRpb25zLiAgTG9jYWwgb25seS4gIEkgdGhpbmsgdGhhdCBkb2luZwogICAgIHRoaXMg
YXMgYSBmaWxlcHJvYyBpcyB0aGUgb25seSB3YXkgdG8gY2F0Y2ggYWxsIHRoZQogICAgIGNhc2Vz
IChlLmcuIGZvby9iYXIuYyksIGV2ZW4gdGhvdWdoIHRoYXQgbWVhbnMgY2hlY2tpbmcgb3ZlciBh
bmQgb3ZlcgogICAgIGZvciB0aGUgc2FtZSBDVlNBRE1fTk9USUZZIGZpbGUgd2hpY2ggd2UgcmVt
b3ZlZCB0aGUgZmlyc3QgdGltZSB3ZQogICAgIHByb2Nlc3NlZCB0aGUgZGlyZWN0b3J5LiAgKi8K
ICAKICBzdGF0aWMgaW50CiAgbmNoZWNrX2ZpbGVwcm9jIChjYWxsZXJkYXQsIGZpbmZvKQogICAg
ICB2b2lkICpjYWxsZXJkYXQ7CiAgICAgIHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvOwogIHsKICAg
ICAgaW50IG5vdGlmX3R5cGU7CisgICAgIGNoYXIgKmVkaXRvciA9IE5VTEw7CiAgICAgIGNoYXIg
KmZpbGVuYW1lOwogICAgICBjaGFyICp2YWw7CiAgICAgIGNoYXIgKmNwOwogICAgICBjaGFyICp3
YXRjaGVzOwogIAogICAgICBGSUxFICpmcDsKICAgICAgY2hhciAqbGluZSA9IE5VTEw7CiAgICAg
IHNpemVfdCBsaW5lX2xlbiA9IDA7CiAgCiAgICAgIC8qIFdlIHNlbmQgbm90aWZpY2F0aW9ucyBl
dmVuIGlmIG5vZXhlYy4gIEknbSBub3Qgc3VyZSB3aGljaCBiZWhhdmlvcgogICAgICAgICBpcyBt
b3N0IHNlbnNpYmxlLiAgKi8KICAKICAgICAgZnAgPSBDVlNfRk9QRU4gKENWU0FETV9OT1RJRlks
ICJyIik7CiAgICAgIGlmIChmcCA9PSBOVUxMKQogICAgICB7CiAgCWlmICghZXhpc3RlbmNlX2Vy
cm9yIChlcnJubykpCioqKioqKioqKioqKioqKgoqKiogMTg1LDIyMiAqKioqCiAgCSAgICBjb250
aW51ZTsKICAJKmNwKysgPSAnXDAnOwogIAl2YWwgPSBjcDsKICAJY3AgPSBzdHJjaHIgKHZhbCwg
J1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgY29udGludWU7CiAgCSpjcCsrID0gJysn
OwogIAljcCA9IHN0cmNociAoY3AsICdcdCcpOwogIAlpZiAoY3AgPT0gTlVMTCkKICAJICAgIGNv
bnRpbnVlOwogIAkqY3ArKyA9ICcrJzsKICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJaWYg
KGNwID09IE5VTEwpCiAgCSAgICBjb250aW51ZTsKICAJKmNwKysgPSAnXDAnOwogIAl3YXRjaGVz
ID0gY3A7CiEgCWNwID0gc3RyY2hyIChjcCwgJ1xuJyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkg
ICAgY29udGludWU7CiAgCSpjcCA9ICdcMCc7CiAgCiEgCW5vdGlmeV9kbyAobm90aWZfdHlwZSwg
ZmlsZW5hbWUsIGdldGNhbGxlciAoKSwgdmFsLCB3YXRjaGVzLAogIAkJICAgZmluZm8tPnJlcG9z
aXRvcnkpOwogICAgICB9CiAgICAgIGZyZWUgKGxpbmUpOwogIAogICAgICBpZiAoZmVycm9yIChm
cCkpCiAgCWVycm9yICgwLCBlcnJubywgImNhbm5vdCByZWFkICVzIiwgQ1ZTQURNX05PVElGWSk7
CiAgICAgIGlmIChmY2xvc2UgKGZwKSA8IDApCiAgCWVycm9yICgwLCBlcnJubywgImNhbm5vdCBj
bG9zZSAlcyIsIENWU0FETV9OT1RJRlkpOwogIAogICAgICBpZiAoIENWU19VTkxJTksgKENWU0FE
TV9OT1RJRlkpIDwgMCkKICAJZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IHJlbW92ZSAlcyIsIENW
U0FETV9OT1RJRlkpOwogIAogICAgICByZXR1cm4gMDsKICB9CiAgCiAgc3RhdGljIGludCBzZW5k
X25vdGlmaWNhdGlvbnMgUFJPVE8gKChpbnQsIGNoYXIgKiosIGludCkpOwotLS0gMTg4LDIzMCAt
LS0tCiAgCSAgICBjb250aW51ZTsKICAJKmNwKysgPSAnXDAnOwogIAl2YWwgPSBjcDsKICAJY3Ag
PSBzdHJjaHIgKHZhbCwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgY29udGludWU7
CiAgCSpjcCsrID0gJysnOwogIAljcCA9IHN0cmNociAoY3AsICdcdCcpOwogIAlpZiAoY3AgPT0g
TlVMTCkKICAJICAgIGNvbnRpbnVlOwogIAkqY3ArKyA9ICcrJzsKICAJY3AgPSBzdHJjaHIgKGNw
LCAnXHQnKTsKICAJaWYgKGNwID09IE5VTEwpCiAgCSAgICBjb250aW51ZTsKICAJKmNwKysgPSAn
XDAnOwogIAl3YXRjaGVzID0gY3A7CiEgCWNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChj
cCA9PSBOVUxMKQogIAkgICAgY29udGludWU7CisgCSpjcCsrID0gJ1wwJzsKKyAgICAgICAgIGVk
aXRvciA9IGNwOworICAgICAgICAgY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKKyAgICAgICAgIGlm
IChjcCA9PSBOVUxMKQorIAkgICAgY29udGludWU7CiAgCSpjcCA9ICdcMCc7CiAgCiEgCW5vdGlm
eV9kbyAobm90aWZfdHlwZSwgZmlsZW5hbWUsIGdldGNhbGxlciAoKSwgZWRpdG9yLCB2YWwsIHdh
dGNoZXMsCiAgCQkgICBmaW5mby0+cmVwb3NpdG9yeSk7CiAgICAgIH0KICAgICAgZnJlZSAobGlu
ZSk7CiAgCiAgICAgIGlmIChmZXJyb3IgKGZwKSkKICAJZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90
IHJlYWQgJXMiLCBDVlNBRE1fTk9USUZZKTsKICAgICAgaWYgKGZjbG9zZSAoZnApIDwgMCkKICAJ
ZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IGNsb3NlICVzIiwgQ1ZTQURNX05PVElGWSk7CiAgCiAg
ICAgIGlmICggQ1ZTX1VOTElOSyAoQ1ZTQURNX05PVElGWSkgPCAwKQogIAllcnJvciAoMCwgZXJy
bm8sICJjYW5ub3QgcmVtb3ZlICVzIiwgQ1ZTQURNX05PVElGWSk7CiAgCiAgICAgIHJldHVybiAw
OwogIH0KICAKICBzdGF0aWMgaW50IHNlbmRfbm90aWZpY2F0aW9ucyBQUk9UTyAoKGludCwgY2hh
ciAqKiwgaW50KSk7CioqKioqKioqKioqKioqKgoqKiogMjU2LDMzOCAqKioqCiAgICAgIH0KICAg
ICAgZWxzZQogICNlbmRpZgogICAgICB7CiAgCS8qIExvY2FsLiAgKi8KICAKICAJbG9ja190cmVl
X2Zvcl93cml0ZSAoYXJnYywgYXJndiwgbG9jYWwsIDApOwogIAllcnIgKz0gc3RhcnRfcmVjdXJz
aW9uIChuY2hlY2tfZmlsZXByb2MsIChGSUxFU0RPTkVQUk9DKSBOVUxMLAogIAkJCQkoRElSRU5U
UFJPQykgTlVMTCwgKERJUkxFQVZFUFJPQykgTlVMTCwgTlVMTCwKICAJCQkJYXJnYywgYXJndiwg
bG9jYWwsIFdfTE9DQUwsIDAsIDAsIChjaGFyICopTlVMTCwKICAJCQkJMCk7CiAgCUxvY2tfQ2xl
YW51cCAoKTsKICAgICAgfQogICAgICByZXR1cm4gZXJyOwogIH0KICAMCiEgc3RhdGljIGludCBl
ZGl0X2ZpbGVwcm9jIFBST1RPICgodm9pZCAqY2FsbGVyZGF0LCBzdHJ1Y3QgZmlsZV9pbmZvICpm
aW5mbykpOwogIAohIHN0YXRpYyBpbnQKISBlZGl0X2ZpbGVwcm9jIChjYWxsZXJkYXQsIGZpbmZv
KQohICAgICB2b2lkICpjYWxsZXJkYXQ7CiAgICAgIHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvOwog
IHsKICAgICAgRklMRSAqZnA7CiAgICAgIHRpbWVfdCBub3c7CiAgICAgIGNoYXIgKmFzY25vdzsK
ISAgICAgY2hhciAqYmFzZWZpbGVuYW1lOwohIAohICAgICBpZiAobm9leGVjKQohIAlyZXR1cm4g
MDsKISAKISAgICAgLyogVGhpcyBpcyBhIHNvbWV3aGF0IHNjcmV3eSB3YXkgdG8gY2hlY2sgZm9y
IHRoaXMsIGJlY2F1c2UgaXQKISAgICAgICAgZG9lc24ndCBoZWxwIGVycm9ycyBvdGhlciB0aGFu
IHRoZSBub25leGlzdGVuY2Ugb2YgdGhlIGZpbGUKISAgICAgICAgKGUuZy4gcGVybWlzc2lvbnMg
cHJvYmxlbXMpLiAgSXQgbWlnaHQgYmUgYmV0dGVyIHRvIHJlYXJyYW5nZQohICAgICAgICB0aGUg
Y29kZSBzbyB0aGF0IENWU0FETV9OT1RJRlkgZ2V0cyB3cml0dGVuIG9ubHkgYWZ0ZXIgdGhlCiEg
ICAgICAgIHZhcmlvdXMgYWN0aW9ucyBzdWNjZWVkIChidXQgd2hhdCBpZiBvbmx5IHNvbWUgb2Yg
dGhlbQohICAgICAgICBzdWNjZWVkKS4gICovCiEgICAgIGlmICghaXNmaWxlIChmaW5mby0+Zmls
ZSkpCiEgICAgIHsKISAJZXJyb3IgKDAsIDAsICJubyBzdWNoIGZpbGUgJXM7IGlnbm9yZWQiLCBm
aW5mby0+ZnVsbG5hbWUpOwohIAlyZXR1cm4gMDsKISAgICAgfQogIAogICAgICBmcCA9IG9wZW5f
ZmlsZSAoQ1ZTQURNX05PVElGWSwgImEiKTsKICAKICAgICAgKHZvaWQpIHRpbWUgKCZub3cpOwog
ICAgICBhc2Nub3cgPSBhc2N0aW1lIChnbXRpbWUgKCZub3cpKTsKICAgICAgYXNjbm93WzI0XSA9
ICdcMCc7CiEgICAgIGZwcmludGYgKGZwLCAiRSVzXHQlcyBHTVRcdCVzXHQlc1x0IiwgZmluZm8t
PmZpbGUsCiEgCSAgICAgYXNjbm93LCBob3N0bmFtZSwgQ3VyRGlyKTsKISAgICAgaWYgKHNldHRp
bmdfdGVkaXQpCiAgCWZwcmludGYgKGZwLCAiRSIpOwohICAgICBpZiAoc2V0dGluZ190dW5lZGl0
KQogIAlmcHJpbnRmIChmcCwgIlUiKTsKISAgICAgaWYgKHNldHRpbmdfdGNvbW1pdCkKICAJZnBy
aW50ZiAoZnAsICJDIik7CiAgICAgIGZwcmludGYgKGZwLCAiXG4iKTsKICAKICAgICAgaWYgKGZj
bG9zZSAoZnApIDwgMCkKICAgICAgewogIAlpZiAoZmluZm8tPnVwZGF0ZV9kaXJbMF0gPT0gJ1ww
JykKICAJICAgIGVycm9yICgwLCBlcnJubywgImNhbm5vdCBjbG9zZSAlcyIsIENWU0FETV9OT1RJ
RlkpOwogIAllbHNlCiAgCSAgICBlcnJvciAoMCwgZXJybm8sICJjYW5ub3QgY2xvc2UgJXMvJXMi
LCBmaW5mby0+dXBkYXRlX2RpciwKICAJCSAgIENWU0FETV9OT1RJRlkpOwogICAgICB9CiAgCiAg
ICAgIHhjaG1vZCAoZmluZm8tPmZpbGUsIDEpOwogIAogICAgICAvKiBOb3cgc3Rhc2ggdGhlIGZp
bGUgYXdheSBpbiBDVlNBRE0gc28gdGhhdCB1bmVkaXQgY2FuIHJldmVydCBldmVuIGlmCiAgICAg
ICAgIGl0IGNhbid0IGNvbW11bmljYXRlIHdpdGggdGhlIHNlcnZlci4gIFdlIHN0YXNoIGF3YXkg
YSB3cml0YWJsZQogICAgICAgICBjb3B5IHNvIHRoYXQgaWYgdGhlIHVzZXIgcmVtb3ZlcyB0aGUg
d29ya2luZyBmaWxlLCB0aGVuIHJlc3RvcmVzIGl0CiAgICAgICAgIHdpdGggImN2cyB1cGRhdGUi
ICh3aGljaCBjbGVhcnMgX2VkaXRvcnMgYnV0IGRvZXMgbm90IHVwZGF0ZQogICAgICAgICBDVlNB
RE1fQkFTRSksIHRoZW4gYSBmdXR1cmUgImN2cyBlZGl0IiBjYW4gc3RpbGwgd2luLiAgKi8KICAg
ICAgLyogQ291bGQgc2F2ZSBhIHN5c3RlbSBjYWxsIGJ5IG9ubHkgY2FsbGluZyBta2Rpcl9pZl9u
ZWVkZWQgaWYKICAgICAgICAgdHJ5aW5nIHRvIGNyZWF0ZSB0aGUgb3V0cHV0IGZpbGUgZmFpbHMu
ICBCdXQgY29weV9maWxlIGlzbid0CiAgICAgICAgIHNldCB1cCB0byBmYWNpbGl0YXRlIHRoYXQu
ICAqLwogICAgICBta2Rpcl9pZl9uZWVkZWQgKENWU0FETV9CQVNFKTsKICAgICAgYmFzZWZpbGVu
YW1lID0geG1hbGxvYyAoMTAgKyBzaXplb2YgQ1ZTQURNX0JBU0UgKyBzdHJsZW4gKGZpbmZvLT5m
aWxlKSk7CiAgICAgIHN0cmNweSAoYmFzZWZpbGVuYW1lLCBDVlNBRE1fQkFTRSk7CiAgICAgIHN0
cmNhdCAoYmFzZWZpbGVuYW1lLCAiLyIpOwogICAgICBzdHJjYXQgKGJhc2VmaWxlbmFtZSwgZmlu
Zm8tPmZpbGUpOwogICAgICBjb3B5X2ZpbGUgKGZpbmZvLT5maWxlLCBiYXNlZmlsZW5hbWUpOwot
LS0gMjY0LDQ1NSAtLS0tCiAgICAgIH0KICAgICAgZWxzZQogICNlbmRpZgogICAgICB7CiAgCS8q
IExvY2FsLiAgKi8KICAKICAJbG9ja190cmVlX2Zvcl93cml0ZSAoYXJnYywgYXJndiwgbG9jYWws
IDApOwogIAllcnIgKz0gc3RhcnRfcmVjdXJzaW9uIChuY2hlY2tfZmlsZXByb2MsIChGSUxFU0RP
TkVQUk9DKSBOVUxMLAogIAkJCQkoRElSRU5UUFJPQykgTlVMTCwgKERJUkxFQVZFUFJPQykgTlVM
TCwgTlVMTCwKICAJCQkJYXJnYywgYXJndiwgbG9jYWwsIFdfTE9DQUwsIDAsIDAsIChjaGFyICop
TlVMTCwKICAJCQkJMCk7CiAgCUxvY2tfQ2xlYW51cCAoKTsKICAgICAgfQogICAgICByZXR1cm4g
ZXJyOwogIH0KICAMCiEgc3RhdGljIHZvaWQgbm90aWZ5X3B1dCBQUk9UTyAoKHN0cnVjdCBmaWxl
X2luZm8gKmZpbmZvLCBjaGFyICplZGl0b3IsIGNoYXIgYWN0aW9uLCBpbnQgdGVkaXQsIGludCB0
dW5lZGl0LCBpbnQgdGNvbW1pdCkpOwogIAohIHN0YXRpYyB2b2lkCiEgbm90aWZ5X3B1dCAoZmlu
Zm8sIGVkaXRvciwgYWN0aW9uLCB0ZWRpdCwgdHVuZWRpdCwgdGNvbW1pdCkKICAgICAgc3RydWN0
IGZpbGVfaW5mbyAqZmluZm87CisgICAgIGNoYXIgKmVkaXRvcjsKKyAgICAgY2hhciBhY3Rpb247
CisgICAgIGludCB0ZWRpdDsKKyAgICAgaW50IHR1bmVkaXQ7CisgICAgIGludCB0Y29tbWl0Owog
IHsKICAgICAgRklMRSAqZnA7CiAgICAgIHRpbWVfdCBub3c7CiAgICAgIGNoYXIgKmFzY25vdzsK
ISAgICAgY2hhciAqd2QgPSBOVUxMOwogIAogICAgICBmcCA9IG9wZW5fZmlsZSAoQ1ZTQURNX05P
VElGWSwgImEiKTsKICAKICAgICAgKHZvaWQpIHRpbWUgKCZub3cpOwogICAgICBhc2Nub3cgPSBh
c2N0aW1lIChnbXRpbWUgKCZub3cpKTsKICAgICAgYXNjbm93WzI0XSA9ICdcMCc7CiEgCiEgICAg
IHdkID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKEN1ckRpcikgKyBzdHJsZW4gKERJUlNFUCkg
KyBzdHJsZW4gKGZpbmZvLT51cGRhdGVfZGlyKSArIDEpOwohICAgICBzdHJjcHkod2QsIEN1ckRp
cik7CiEgICAgIGlmIChmaW5mby0+dXBkYXRlX2RpciAhPSBOVUxMICYmICpmaW5mby0+dXBkYXRl
X2RpciAhPSAnXDAnKQohICAgICB7CiEgICAgICAgICBzdHJjYXQgKHdkLCBESVJTRVApOwohICAg
ICAgICAgc3RyY2F0ICh3ZCwgZmluZm8tPnVwZGF0ZV9kaXIpOwohICAgICB9CiEgCiEgICAgIC8q
IHJlbW92ZSAiLi8iICovCiEgICAgIHsKISAgICAgICAgIGNoYXIgKnAgPSBOVUxMOwohIAohICAg
ICAgICAgYXNzZXJ0IChzdHJsZW4gKHdkKSA+IDEKISAgICAgICAgICAgICAgICAgJiYgKHdkWzBd
ICE9ICcuJyAgfHwgICFJU0RJUlNFUCh3ZFsxXSkpKTsKISAKISAgICAgICAgIGZvciAocCA9IHN0
cnN0ciAod2QsICIuIik7CiEgICAgICAgICAgICAgIHAgPCB3ZCArIHN0cmxlbiAod2QpICAmJiAg
cCAhPSBOVUxMOwohICAgICAgICAgICAgICBwID0gc3Ryc3RyIChwICsgMSwgIi4iKSkKISAgICAg
ICAgIHsKISAgICAgICAgICAgICBpZiAoSVNESVJTRVAgKCoocCAtIDEpKQohICAgICAgICAgICAg
ICAgICAmJiBJU0RJUlNFUCAoKihwICsgMSkpKQohICAgICAgICAgICAgIHsKISAgICAgICAgICAg
ICAgICAgY2hhciAqcDAgPSBOVUxMOwohICAgICAgICAgICAgICAgICBjaGFyICpwMSA9IE5VTEw7
CiEgCiEgICAgICAgICAgICAgICAgIGZvciAocDAgPSBwLCBwMSA9IHAgKyAyOwohICAgICAgICAg
ICAgICAgICAgICAgIHAxIDwgd2QgKyBzdHJsZW4gKHdkKSAgJiYgICpwMSAhPSAnXDAnOwohICAg
ICAgICAgICAgICAgICAgICAgICsrcDAsICsrcDEpCiEgICAgICAgICAgICAgICAgIHsKISAgICAg
ICAgICAgICAgICAgICAgICpwMCA9ICpwMTsKISAgICAgICAgICAgICAgICAgfQohIAohICAgICAg
ICAgICAgICAgICAqcDAgPSAnXDAnOwohICAgICAgICAgICAgIH0KISAgICAgICAgIH0KISAgICAg
fQohIAohICAgICAvKiByZW1vdmUgIi4uLyIgKi8KISAgICAgewohICAgICAgICAgY2hhciAqcCA9
IE5VTEw7CiEgCiEgICAgICAgICBhc3NlcnQgKHN0cmxlbiAod2QpID4gMgohICAgICAgICAgICAg
ICAgICAmJiAod2RbMF0gIT0gJy4nICB8fCAgd2RbMV0gIT0gJy4nICB8fCAgIUlTRElSU0VQKHdk
WzJdKSkpOwohIAohICAgICAgICAgZm9yIChwID0gc3Ryc3RyICh3ZCwgIi4uIik7CiEgICAgICAg
ICAgICAgIHAgPCB3ZCArIHN0cmxlbiAod2QpICAmJiAgcCAhPSBOVUxMOwohICAgICAgICAgICAg
ICBwID0gc3Ryc3RyIChwICsgMiwgIi4uIikpCiEgICAgICAgICB7CiEgICAgICAgICAgICAgaWYg
KElTRElSU0VQICgqKHAgLSAxKSkKISAgICAgICAgICAgICAgICAgJiYgSVNESVJTRVAgKCoocCAr
IDIpKSkKISAgICAgICAgICAgICB7CiEgICAgICAgICAgICAgICAgIGNoYXIgKnAwID0gTlVMTDsK
ISAgICAgICAgICAgICAgICAgY2hhciAqcDEgPSBOVUxMOwohIAohICAgICAgICAgICAgICAgICBw
MCA9IHAgLSAxOwohICAgICAgICAgICAgICAgICBkbwohICAgICAgICAgICAgICAgICB7CiEgICAg
ICAgICAgICAgICAgICAgICAtLXAwOwohICAgICAgICAgICAgICAgICB9CiEgICAgICAgICAgICAg
ICAgIHdoaWxlIChwMCA+d2QgICYmICAhSVNESVJTRVAgKCpwMCkpOwohIAohICAgICAgICAgICAg
ICAgICBwMSA9IHAgKyAyOwohICAgICAgICAgICAgICAgICBkbwohICAgICAgICAgICAgICAgICB7
CiEgICAgICAgICAgICAgICAgICAgICArK3AxOwohICAgICAgICAgICAgICAgICB9CiEgICAgICAg
ICAgICAgICAgIHdoaWxlIChwMSA8IHdkICsgc3RybGVuICh3ZCkgICYmICAhSVNESVJTRVAgKCpw
MSkpOwohIAohICAgICAgICAgICAgICAgICBmb3IgKDsgcDEgPCB3ZCArIHN0cmxlbiAod2QpICAm
JiAgKnAxICE9ICdcMCc7ICsrcDAsICsrcDEpCiEgICAgICAgICAgICAgICAgIHsKISAgICAgICAg
ICAgICAgICAgICAgICpwMCA9ICpwMTsKISAgICAgICAgICAgICAgICAgfQohIAohICAgICAgICAg
ICAgICAgICAqcDAgPSAnXDAnOwohICAgICAgICAgICAgIH0KISAgICAgICAgIH0KISAgICAgfQoh
IAohICAgICBzdHJpcF90cmFpbGluZ19zbGFzaGVzICh3ZCk7CiEgCiEgICAgIGZwcmludGYgKGZw
LCAiJWMlc1x0JXMgR01UXHQlc1x0JXNcdCIsIGFjdGlvbiwgZmluZm8tPmZpbGUsIGFzY25vdywg
aG9zdG5hbWUsIHdkKTsKISAgICAgaWYgKHRlZGl0KQogIAlmcHJpbnRmIChmcCwgIkUiKTsKISAg
ICAgaWYgKHR1bmVkaXQpCiAgCWZwcmludGYgKGZwLCAiVSIpOwohICAgICBpZiAodGNvbW1pdCkK
ICAJZnByaW50ZiAoZnAsICJDIik7CisgCisgICAgIGlmIChlZGl0b3IgPT0gTlVMTCAgfHwgIHN0
cmNtcCAoZWRpdG9yLCAiIikgPT0gMCkKKyAgICAgeworICAgICAgICAgZnByaW50ZiAoZnAsICJc
dCVzQCVzOiVzXHQiLCBnZXRjYWxsZXIgKCksIGhvc3RuYW1lLCB3ZCk7CisgICAgIH0KKyAgICAg
ZWxzZQorICAgICB7CisgICAgICAgICBmcHJpbnRmIChmcCwgIlx0JXNcdCIsIGVkaXRvcik7Cisg
ICAgIH0KKyAKICAgICAgZnByaW50ZiAoZnAsICJcbiIpOwogIAogICAgICBpZiAoZmNsb3NlIChm
cCkgPCAwKQogICAgICB7CiAgCWlmIChmaW5mby0+dXBkYXRlX2RpclswXSA9PSAnXDAnKQogIAkg
ICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IGNsb3NlICVzIiwgQ1ZTQURNX05PVElGWSk7CiAg
CWVsc2UKICAJICAgIGVycm9yICgwLCBlcnJubywgImNhbm5vdCBjbG9zZSAlcy8lcyIsIGZpbmZv
LT51cGRhdGVfZGlyLAogIAkJICAgQ1ZTQURNX05PVElGWSk7CiAgICAgIH0KICAKKyAgICAgaWYg
KHdkICE9IE5VTEwpCisgICAgICAgICBmcmVlICh3ZCk7CisgfQorIAwKKyBzdGF0aWMgaW50IGVk
aXRfZmlsZXByb2MgUFJPVE8gKCh2b2lkICpjYWxsZXJkYXQsIHN0cnVjdCBmaWxlX2luZm8gKmZp
bmZvKSk7CisgCisgc3RhdGljIGludAorIGVkaXRfZmlsZXByb2MgKGNhbGxlcmRhdCwgZmluZm8p
CisgICAgIHZvaWQgKmNhbGxlcmRhdDsKKyAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87Cisg
eworICAgICBjaGFyICpiYXNlZmlsZW5hbWU7CisgCisgICAgIGlmIChub2V4ZWMpCisgCXJldHVy
biAwOworIAorICAgICAvKiBUaGlzIGlzIGEgc29tZXdoYXQgc2NyZXd5IHdheSB0byBjaGVjayBm
b3IgdGhpcywgYmVjYXVzZSBpdAorICAgICAgICBkb2Vzbid0IGhlbHAgZXJyb3JzIG90aGVyIHRo
YW4gdGhlIG5vbmV4aXN0ZW5jZSBvZiB0aGUgZmlsZQorICAgICAgICAoZS5nLiBwZXJtaXNzaW9u
cyBwcm9ibGVtcykuICBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gcmVhcnJhbmdlCisgICAgICAgIHRo
ZSBjb2RlIHNvIHRoYXQgQ1ZTQURNX05PVElGWSBnZXRzIHdyaXR0ZW4gb25seSBhZnRlciB0aGUK
KyAgICAgICAgdmFyaW91cyBhY3Rpb25zIHN1Y2NlZWQgKGJ1dCB3aGF0IGlmIG9ubHkgc29tZSBv
ZiB0aGVtCisgICAgICAgIHN1Y2NlZWQpLiAgKi8KKyAgICAgaWYgKCFpc2ZpbGUgKGZpbmZvLT5m
aWxlKSkKKyAgICAgeworIAllcnJvciAoMCwgMCwgIm5vIHN1Y2ggZmlsZSAlczsgaWdub3JlZCIs
IGZpbmZvLT5mdWxsbmFtZSk7CisgCXJldHVybiAwOworICAgICB9CisgCisgICAgIG5vdGlmeV9w
dXQgKGZpbmZvLCBOVUxMLCAnRScsIHNldHRpbmdfdGVkaXQsIHNldHRpbmdfdHVuZWRpdCwgc2V0
dGluZ190Y29tbWl0KTsKKyAKICAgICAgeGNobW9kIChmaW5mby0+ZmlsZSwgMSk7CiAgCiAgICAg
IC8qIE5vdyBzdGFzaCB0aGUgZmlsZSBhd2F5IGluIENWU0FETSBzbyB0aGF0IHVuZWRpdCBjYW4g
cmV2ZXJ0IGV2ZW4gaWYKICAgICAgICAgaXQgY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgc2Vy
dmVyLiAgV2Ugc3Rhc2ggYXdheSBhIHdyaXRhYmxlCiAgICAgICAgIGNvcHkgc28gdGhhdCBpZiB0
aGUgdXNlciByZW1vdmVzIHRoZSB3b3JraW5nIGZpbGUsIHRoZW4gcmVzdG9yZXMgaXQKICAgICAg
ICAgd2l0aCAiY3ZzIHVwZGF0ZSIgKHdoaWNoIGNsZWFycyBfZWRpdG9ycyBidXQgZG9lcyBub3Qg
dXBkYXRlCiAgICAgICAgIENWU0FETV9CQVNFKSwgdGhlbiBhIGZ1dHVyZSAiY3ZzIGVkaXQiIGNh
biBzdGlsbCB3aW4uICAqLwogICAgICAvKiBDb3VsZCBzYXZlIGEgc3lzdGVtIGNhbGwgYnkgb25s
eSBjYWxsaW5nIG1rZGlyX2lmX25lZWRlZCBpZgogICAgICAgICB0cnlpbmcgdG8gY3JlYXRlIHRo
ZSBvdXRwdXQgZmlsZSBmYWlscy4gIEJ1dCBjb3B5X2ZpbGUgaXNuJ3QKICAgICAgICAgc2V0IHVw
IHRvIGZhY2lsaXRhdGUgdGhhdC4gICovCiAgICAgIG1rZGlyX2lmX25lZWRlZCAoQ1ZTQURNX0JB
U0UpOwogICAgICBiYXNlZmlsZW5hbWUgPSB4bWFsbG9jICgxMCArIHNpemVvZiBDVlNBRE1fQkFT
RSArIHN0cmxlbiAoZmluZm8tPmZpbGUpKTsKICAgICAgc3RyY3B5IChiYXNlZmlsZW5hbWUsIENW
U0FETV9CQVNFKTsKICAgICAgc3RyY2F0IChiYXNlZmlsZW5hbWUsICIvIik7CiAgICAgIHN0cmNh
dCAoYmFzZWZpbGVuYW1lLCBmaW5mby0+ZmlsZSk7CiAgICAgIGNvcHlfZmlsZSAoZmluZm8tPmZp
bGUsIGJhc2VmaWxlbmFtZSk7CioqKioqKioqKioqKioqKgoqKiogMzU5LDM5MSAqKioqCiAgICAg
ICIoU3BlY2lmeSB0aGUgLS1oZWxwIGdsb2JhbCBvcHRpb24gZm9yIGEgbGlzdCBvZiBvdGhlciBo
ZWxwIG9wdGlvbnMpXG4iLAogICAgICBOVUxMCiAgfTsKICAKICBpbnQKICBlZGl0IChhcmdjLCBh
cmd2KQogICAgICBpbnQgYXJnYzsKICAgICAgY2hhciAqKmFyZ3Y7CiAgewogICAgICBpbnQgbG9j
YWwgPSAwOwogICAgICBpbnQgYzsKICAgICAgaW50IGVycjsKICAgICAgaW50IGFfb21pdHRlZDsK
ICAKICAgICAgaWYgKGFyZ2MgPT0gLTEpCiAgCXVzYWdlIChlZGl0X3VzYWdlKTsKLSAKICAgICAg
YV9vbWl0dGVkID0gMTsKICAgICAgc2V0dGluZ190ZWRpdCA9IDA7CiAgICAgIHNldHRpbmdfdHVu
ZWRpdCA9IDA7CiAgICAgIHNldHRpbmdfdGNvbW1pdCA9IDA7CiAgICAgIG9wdGluZCA9IDA7CiAg
ICAgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIitsUmE6IikpICE9IC0xKQogICAg
ICB7CiAgCXN3aXRjaCAoYykKICAJewogIAkgICAgY2FzZSAnbCc6CiAgCQlsb2NhbCA9IDE7CiAg
CQlicmVhazsKICAJICAgIGNhc2UgJ1InOgogIAkJbG9jYWwgPSAwOwogIAkJYnJlYWs7CiAgCSAg
ICBjYXNlICdhJzoKLS0tIDQ3Niw1MDcgLS0tLQoqKioqKioqKioqKioqKioKKioqIDQ3NCw1MjIg
KioqKgogIAlmcmVlIChiYXNlZmlsZW5hbWUpOwogIAlyZXR1cm4gMDsKICAgICAgfQogIAogICAg
ICBpZiAoeGNtcCAoZmluZm8tPmZpbGUsIGJhc2VmaWxlbmFtZSkgIT0gMCkKICAgICAgewogIAlw
cmludGYgKCIlcyBoYXMgYmVlbiBtb2RpZmllZDsgcmV2ZXJ0IGNoYW5nZXM/ICIsIGZpbmZvLT5m
dWxsbmFtZSk7CiAgCWlmICgheWVzbm8gKCkpCiAgCXsKICAJICAgIC8qICJubyIuICAqLwogIAkg
ICAgZnJlZSAoYmFzZWZpbGVuYW1lKTsKICAJICAgIHJldHVybiAwOwogIAl9CiAgICAgIH0KICAg
ICAgcmVuYW1lX2ZpbGUgKGJhc2VmaWxlbmFtZSwgZmluZm8tPmZpbGUpOwogICAgICBmcmVlIChi
YXNlZmlsZW5hbWUpOwotIAotICAgICBmcCA9IG9wZW5fZmlsZSAoQ1ZTQURNX05PVElGWSwgImEi
KTsKLSAKLSAgICAgKHZvaWQpIHRpbWUgKCZub3cpOwotICAgICBhc2Nub3cgPSBhc2N0aW1lIChn
bXRpbWUgKCZub3cpKTsKLSAgICAgYXNjbm93WzI0XSA9ICdcMCc7Ci0gICAgIGZwcmludGYgKGZw
LCAiVSVzXHQlcyBHTVRcdCVzXHQlc1x0XG4iLCBmaW5mby0+ZmlsZSwKLSAJICAgICBhc2Nub3cs
IGhvc3RuYW1lLCBDdXJEaXIpOwogIAohICAgICBpZiAoZmNsb3NlIChmcCkgPCAwKQohICAgICB7
CiEgCWlmIChmaW5mby0+dXBkYXRlX2RpclswXSA9PSAnXDAnKQohIAkgICAgZXJyb3IgKDAsIGVy
cm5vLCAiY2Fubm90IGNsb3NlICVzIiwgQ1ZTQURNX05PVElGWSk7CiEgCWVsc2UKISAJICAgIGVy
cm9yICgwLCBlcnJubywgImNhbm5vdCBjbG9zZSAlcy8lcyIsIGZpbmZvLT51cGRhdGVfZGlyLAoh
IAkJICAgQ1ZTQURNX05PVElGWSk7CiEgICAgIH0KICAKICAgICAgLyogTm93IHVwZGF0ZSB0aGUg
cmV2aXNpb24gbnVtYmVyIGluIENWUy9FbnRyaWVzIGZyb20gQ1ZTL0Jhc2VyZXYuCiAgICAgICAg
IFRoZSBiYXNpYyBpZGVhIGhlcmUgaXMgdGhhdCB3ZSBhcmUgcmV2ZXJ0aW5nIHRvIHRoZSByZXZp
c2lvbgogICAgICAgICB0aGF0IHRoZSB1c2VyIGVkaXRlZC4gIElmIHdlIHdhbnRlZCAiY3ZzIHVw
ZGF0ZSIgdG8gdXBkYXRlCiAgICAgICAgIENWUy9CYXNlIGFzIHdlIGdvIGFsb25nIChzbyB0aGF0
IGFuIHVuZWRpdCBjb3VsZCByZXZlcnQgdG8gdGhlCiAgICAgICAgIGN1cnJlbnQgcmVwb3NpdG9y
eSByZXZpc2lvbiksIHdlIHdvdWxkIG5lZWQ6CiAgCiAgICAgICAgIHVwZGF0ZSAob3IgYWxsIHNl
bmRfZmlsZXM/KSAoY2xpZW50KSBuZWVkcyB0byBzZW5kIHJldmlzaW9uIGluCiAgICAgICAgIG5l
dyBFbnRyeS1iYXNlIHJlcXVlc3QuICB1cGRhdGUgKHNlcnZlci9sb2NhbCkgbmVlZHMgdG8gY2hl
Y2sKICAgICAgICAgcmV2aXNpb24gYWdhaW5zdCByZXBvc2l0b3J5IGFuZCBzZW5kIG5ldyBVcGRh
dGUtYmFzZSByZXNwb25zZQogICAgICAgICAobGlrZSBVcGRhdGUtZXhpc3RpbmcgaW4gdGhhdCB0
aGUgZmlsZSBhbHJlYWR5IGV4aXN0cy4gIFdoaWxlCiAgICAgICAgIHdlIGFyZSBhdCBpdCwgbWln
aHQgdHJ5IHRvIGNsZWFuIHVwIHRoZSBzeW50YXggYnkgaGF2aW5nIHRoZQogICAgICAgICBtb2Rl
IG9ubHkgaW4gYSAiTW9kZSIgcmVzcG9uc2UsIG5vdCBpbiB0aGUgVXBkYXRlLWJhc2UgaXRzZWxm
KS4gICovCiAgICAgIHsKICAJY2hhciAqYmFzZXJldjsKICAJTm9kZSAqbm9kZTsKLS0tIDU5MCw2
MjMgLS0tLQogIAlmcmVlIChiYXNlZmlsZW5hbWUpOwogIAlyZXR1cm4gMDsKICAgICAgfQogIAog
ICAgICBpZiAoeGNtcCAoZmluZm8tPmZpbGUsIGJhc2VmaWxlbmFtZSkgIT0gMCkKICAgICAgewog
IAlwcmludGYgKCIlcyBoYXMgYmVlbiBtb2RpZmllZDsgcmV2ZXJ0IGNoYW5nZXM/ICIsIGZpbmZv
LT5mdWxsbmFtZSk7CiAgCWlmICgheWVzbm8gKCkpCiAgCXsKICAJICAgIC8qICJubyIuICAqLwog
IAkgICAgZnJlZSAoYmFzZWZpbGVuYW1lKTsKICAJICAgIHJldHVybiAwOwogIAl9CiAgICAgIH0K
ICAgICAgcmVuYW1lX2ZpbGUgKGJhc2VmaWxlbmFtZSwgZmluZm8tPmZpbGUpOwogICAgICBmcmVl
IChiYXNlZmlsZW5hbWUpOwogIAohICAgICBub3RpZnlfcHV0IChmaW5mbywgTlVMTCwgJ1UnLCAw
LCAwLCAwKTsKICAKICAgICAgLyogTm93IHVwZGF0ZSB0aGUgcmV2aXNpb24gbnVtYmVyIGluIENW
Uy9FbnRyaWVzIGZyb20gQ1ZTL0Jhc2VyZXYuCiAgICAgICAgIFRoZSBiYXNpYyBpZGVhIGhlcmUg
aXMgdGhhdCB3ZSBhcmUgcmV2ZXJ0aW5nIHRvIHRoZSByZXZpc2lvbgogICAgICAgICB0aGF0IHRo
ZSB1c2VyIGVkaXRlZC4gIElmIHdlIHdhbnRlZCAiY3ZzIHVwZGF0ZSIgdG8gdXBkYXRlCiAgICAg
ICAgIENWUy9CYXNlIGFzIHdlIGdvIGFsb25nIChzbyB0aGF0IGFuIHVuZWRpdCBjb3VsZCByZXZl
cnQgdG8gdGhlCiAgICAgICAgIGN1cnJlbnQgcmVwb3NpdG9yeSByZXZpc2lvbiksIHdlIHdvdWxk
IG5lZWQ6CiAgCiAgICAgICAgIHVwZGF0ZSAob3IgYWxsIHNlbmRfZmlsZXM/KSAoY2xpZW50KSBu
ZWVkcyB0byBzZW5kIHJldmlzaW9uIGluCiAgICAgICAgIG5ldyBFbnRyeS1iYXNlIHJlcXVlc3Qu
ICB1cGRhdGUgKHNlcnZlci9sb2NhbCkgbmVlZHMgdG8gY2hlY2sKICAgICAgICAgcmV2aXNpb24g
YWdhaW5zdCByZXBvc2l0b3J5IGFuZCBzZW5kIG5ldyBVcGRhdGUtYmFzZSByZXNwb25zZQogICAg
ICAgICAobGlrZSBVcGRhdGUtZXhpc3RpbmcgaW4gdGhhdCB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0
cy4gIFdoaWxlCiAgICAgICAgIHdlIGFyZSBhdCBpdCwgbWlnaHQgdHJ5IHRvIGNsZWFuIHVwIHRo
ZSBzeW50YXggYnkgaGF2aW5nIHRoZQogICAgICAgICBtb2RlIG9ubHkgaW4gYSAiTW9kZSIgcmVz
cG9uc2UsIG5vdCBpbiB0aGUgVXBkYXRlLWJhc2UgaXRzZWxmKS4gICovCiAgICAgIHsKICAJY2hh
ciAqYmFzZXJldjsKICAJTm9kZSAqbm9kZTsKKioqKioqKioqKioqKioqCioqKiA1NDMsNTc3ICoq
KioKICAJCSAgIGtlZXBpbmcgaXQgYXJvdW5kIHdvdWxkIGJlIGFza2luZyBmb3IgdHJvdWJsZS4g
ICovCiAgCQlpZiAodW5saW5rX2ZpbGUgKGZpbmZvLT5maWxlKSA8IDApCiAgCQkgICAgZXJyb3Ig
KDAsIGVycm5vLCAiY2Fubm90IHJlbW92ZSAlcyIsIGZpbmZvLT5mdWxsbmFtZSk7CiAgCiAgCQkv
KiBUaGlzIGlzIGNoZWVzeSwgaW4gYSBzZW5zZTsgd2h5IHNob3VsZG4ndCB3ZSBkbyB0aGUKICAJ
CSAgIHVwZGF0ZSBmb3IgdGhlIHVzZXI/ICBIb3dldmVyLCBkb2luZyB0aGF0IHdvdWxkIHJlcXVp
cmUKICAJCSAgIGNvbnRhY3RpbmcgdGhlIHNlcnZlciwgc28gbWF5YmUgdGhpcyBpcyBPSy4gICov
CiAgCQllcnJvciAoMCwgMCwgInJ1biB1cGRhdGUgdG8gY29tcGxldGUgdGhlIHVuZWRpdCIpOwog
IAkJcmV0dXJuIDA7CiAgCSAgICB9CiAgCSAgICBSZWdpc3RlciAoZmluZm8tPmVudHJpZXMsIGZp
bmZvLT5maWxlLCBiYXNlcmV2LCBlbnRkYXRhLT50aW1lc3RhbXAsCiAgCQkgICAgICBlbnRkYXRh
LT5vcHRpb25zLCBlbnRkYXRhLT50YWcsIGVudGRhdGEtPmRhdGUsCiAgCQkgICAgICBlbnRkYXRh
LT5jb25mbGljdCk7CiAgCX0KICAJZnJlZSAoYmFzZXJldik7CiAgCWJhc2VfZGVyZWdpc3RlciAo
ZmluZm8pOwotICAgICB9CiAgCiAgICAgIHhjaG1vZCAoZmluZm8tPmZpbGUsIDApOwogICAgICBy
ZXR1cm4gMDsKICB9CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVuZWRpdF91c2FnZVtd
ID0KICB7CiAgICAgICJVc2FnZTogJXMgJXMgWy1sUl0gW2ZpbGVzLi4uXVxuIiwKICAgICAgIi1s
OiBMb2NhbCBkaXJlY3Rvcnkgb25seSwgbm90IHJlY3Vyc2l2ZVxuIiwKICAgICAgIi1SOiBQcm9j
ZXNzIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5XG4iLAogICAgICAiKFNwZWNpZnkgdGhlIC0taGVs
cCBnbG9iYWwgb3B0aW9uIGZvciBhIGxpc3Qgb2Ygb3RoZXIgaGVscCBvcHRpb25zKVxuIiwKICAg
ICAgTlVMTAogIH07CiAgCiAgaW50CiAgdW5lZGl0IChhcmdjLCBhcmd2KQogICAgICBpbnQgYXJn
YzsKICAgICAgY2hhciAqKmFyZ3Y7Ci0tLSA2NDQsNjc5IC0tLS0KICAJCSAgIGtlZXBpbmcgaXQg
YXJvdW5kIHdvdWxkIGJlIGFza2luZyBmb3IgdHJvdWJsZS4gICovCiAgCQlpZiAodW5saW5rX2Zp
bGUgKGZpbmZvLT5maWxlKSA8IDApCiAgCQkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IHJl
bW92ZSAlcyIsIGZpbmZvLT5mdWxsbmFtZSk7CiAgCiAgCQkvKiBUaGlzIGlzIGNoZWVzeSwgaW4g
YSBzZW5zZTsgd2h5IHNob3VsZG4ndCB3ZSBkbyB0aGUKICAJCSAgIHVwZGF0ZSBmb3IgdGhlIHVz
ZXI/ICBIb3dldmVyLCBkb2luZyB0aGF0IHdvdWxkIHJlcXVpcmUKICAJCSAgIGNvbnRhY3Rpbmcg
dGhlIHNlcnZlciwgc28gbWF5YmUgdGhpcyBpcyBPSy4gICovCiAgCQllcnJvciAoMCwgMCwgInJ1
biB1cGRhdGUgdG8gY29tcGxldGUgdGhlIHVuZWRpdCIpOwogIAkJcmV0dXJuIDA7CiAgCSAgICB9
CiAgCSAgICBSZWdpc3RlciAoZmluZm8tPmVudHJpZXMsIGZpbmZvLT5maWxlLCBiYXNlcmV2LCBl
bnRkYXRhLT50aW1lc3RhbXAsCiAgCQkgICAgICBlbnRkYXRhLT5vcHRpb25zLCBlbnRkYXRhLT50
YWcsIGVudGRhdGEtPmRhdGUsCiAgCQkgICAgICBlbnRkYXRhLT5jb25mbGljdCk7CiAgCX0KICAJ
ZnJlZSAoYmFzZXJldik7CiAgCWJhc2VfZGVyZWdpc3RlciAoZmluZm8pOwogIAogICAgICAgICAg
eGNobW9kIChmaW5mby0+ZmlsZSwgMCk7CisgICAgIH0KKyAKICAgICAgcmV0dXJuIDA7CiAgfQog
IAogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1bmVkaXRfdXNhZ2VbXSA9CiAgewogICAgICAi
VXNhZ2U6ICVzICVzIFstbFJdIFtmaWxlcy4uLl1cbiIsCiAgICAgICItbDogTG9jYWwgZGlyZWN0
b3J5IG9ubHksIG5vdCByZWN1cnNpdmVcbiIsCiAgICAgICItUjogUHJvY2VzcyBkaXJlY3Rvcmll
cyByZWN1cnNpdmVseVxuIiwKICAgICAgIihTcGVjaWZ5IHRoZSAtLWhlbHAgZ2xvYmFsIG9wdGlv
biBmb3IgYSBsaXN0IG9mIG90aGVyIGhlbHAgb3B0aW9ucylcbiIsCiAgICAgIE5VTEwKICB9Owog
IAogIGludAogIHVuZWRpdCAoYXJnYywgYXJndikKICAgICAgaW50IGFyZ2M7CiAgICAgIGNoYXIg
Kiphcmd2OwoqKioqKioqKioqKioqKioKKioqIDY0OSw3MTYgKioqKgogIAkgIHx8IChlZGxpc3Qg
IT0gTlVMTAogIAkgICAgICAmJiBuZXdsaXN0ICE9IE5VTEwKICAJICAgICAgJiYgc3RyY21wIChl
ZGxpc3QsIG5ld2xpc3QpID09IDApKSkKICAJZmlsZWF0dHJfc2V0IChmaWxlbmFtZSwgIl9lZGl0
b3JzIiwgbmV3bGlzdCk7CiAgICAgIGlmIChlZGxpc3QgIT0gTlVMTCkKICAJZnJlZSAoZWRsaXN0
KTsKICAgICAgaWYgKG5ld2xpc3QgIT0gTlVMTCkKICAJZnJlZSAobmV3bGlzdCk7CiAgfQogIAog
IHN0cnVjdCBub3RpZnlfcHJvY19hcmdzIHsKICAgICAgLyogV2hhdCBraW5kIG9mIG5vdGlmaWNh
dGlvbiwgImVkaXQiLCAidGVkaXQiLCBldGMuICAqLwogICAgICBjaGFyICp0eXBlOwogICAgICAv
KiBVc2VyIHdobyBpcyBydW5uaW5nIHRoZSBjb21tYW5kIHdoaWNoIGNhdXNlcyBub3RpZmljYXRp
b24uICAqLwogICAgICBjaGFyICp3aG87CiAgICAgIC8qIFVzZXIgdG8gYmUgbm90aWZpZWQuICAq
LwohICAgICBjaGFyICpub3RpZnllZTsKICAgICAgLyogRmlsZS4gICovCiAgICAgIGNoYXIgKmZp
bGU7CiAgfTsKICAKICAvKiBQYXNzIGFzIGEgc3RhdGljIHVudGlsIHdlIGdldCBhcm91bmQgdG8g
Zml4aW5nIFBhcnNlX0luZm8gdG8gcGFzcyBhbG9uZwogICAgIGEgdm9pZCAqIHdoZXJlIHdlIGNh
biBzdGFzaCBpdC4gICovCiAgc3RhdGljIHN0cnVjdCBub3RpZnlfcHJvY19hcmdzICpub3RpZnlf
YXJnczsKICAKICBzdGF0aWMgaW50IG5vdGlmeV9wcm9jIFBST1RPICgoY2hhciAqcmVwb3NpdG9y
eSwgY2hhciAqZmlsdGVyKSk7CiAgCiAgc3RhdGljIGludAogIG5vdGlmeV9wcm9jIChyZXBvc2l0
b3J5LCBmaWx0ZXIpCiAgICAgIGNoYXIgKnJlcG9zaXRvcnk7CiAgICAgIGNoYXIgKmZpbHRlcjsK
ICB7CiAgICAgIEZJTEUgKnBpcGVmcDsKICAgICAgY2hhciAqcHJvZzsKICAgICAgY2hhciAqZXhw
YW5kZWRfcHJvZzsKICAgICAgY2hhciAqcDsKICAgICAgY2hhciAqcTsKICAgICAgY2hhciAqc3Jl
cG9zOwogICAgICBzdHJ1Y3Qgbm90aWZ5X3Byb2NfYXJncyAqYXJncyA9IG5vdGlmeV9hcmdzOwog
IAogICAgICBzcmVwb3MgPSBTaG9ydF9SZXBvc2l0b3J5IChyZXBvc2l0b3J5KTsKISAgICAgcHJv
ZyA9IHhtYWxsb2MgKHN0cmxlbiAoZmlsdGVyKSArIHN0cmxlbiAoYXJncy0+bm90aWZ5ZWUpICsg
MSk7CiAgICAgIC8qIENvcHkgRklMVEVSIHRvIFBST0csIHJlcGxhY2luZyB0aGUgZmlyc3Qgb2Nj
dXJyZW5jZSBvZiAlcyB3aXRoCiEgICAgICAgIHRoZSBub3RpZnllZS4gIFdlIG9ubHkgYWxsb2Nh
dGVkIGVub3VnaCBtZW1vcnkgZm9yIG9uZSAlcywgYW5kIEkgZG91YnQKICAgICAgICAgdGhlcmUg
aXMgYSBuZWVkIGZvciBtb3JlLiAgKi8KICAgICAgZm9yIChwID0gZmlsdGVyLCBxID0gcHJvZzsg
KnAgIT0gJ1wwJzsgKytwKQogICAgICB7CiAgCWlmIChwWzBdID09ICclJykKICAJewogIAkgICAg
aWYgKHBbMV0gPT0gJ3MnKQogIAkgICAgewohIAkJc3RyY3B5IChxLCBhcmdzLT5ub3RpZnllZSk7
CiAgCQlxICs9IHN0cmxlbiAocSk7CiAgCQlzdHJjcHkgKHEsIHAgKyAyKTsKICAJCXEgKz0gc3Ry
bGVuIChxKTsKICAJCWJyZWFrOwogIAkgICAgfQogIAkgICAgZWxzZQogIAkJY29udGludWU7CiAg
CX0KICAJKnErKyA9ICpwOwogICAgICB9CiAgICAgICpxID0gJ1wwJzsKICAKICAgICAgLyogRklY
TUU6IHdoeSBhcmUgd2UgY2FsbGluZyBleHBhbmRfcHJvYz8gIERpZG4ndCB3ZSBhbHJlYWR5CiAg
ICAgICAgIGV4cGFuZCBpdCBpbiBQYXJzZV9JbmZvLCBiZWZvcmUgcGFzc2luZyBpdCB0byBub3Rp
ZnlfcHJvYz8gICovCiAgICAgIGV4cGFuZGVkX3Byb2cgPSBleHBhbmRfcGF0aCAocHJvZywgIm5v
dGlmeSIsIDApOwogICAgICBpZiAoIWV4cGFuZGVkX3Byb2cpCi0tLSA3NTEsODE4IC0tLS0KICAJ
ICB8fCAoZWRsaXN0ICE9IE5VTEwKICAJICAgICAgJiYgbmV3bGlzdCAhPSBOVUxMCiAgCSAgICAg
ICYmIHN0cmNtcCAoZWRsaXN0LCBuZXdsaXN0KSA9PSAwKSkpCiAgCWZpbGVhdHRyX3NldCAoZmls
ZW5hbWUsICJfZWRpdG9ycyIsIG5ld2xpc3QpOwogICAgICBpZiAoZWRsaXN0ICE9IE5VTEwpCiAg
CWZyZWUgKGVkbGlzdCk7CiAgICAgIGlmIChuZXdsaXN0ICE9IE5VTEwpCiAgCWZyZWUgKG5ld2xp
c3QpOwogIH0KICAKICBzdHJ1Y3Qgbm90aWZ5X3Byb2NfYXJncyB7CiAgICAgIC8qIFdoYXQga2lu
ZCBvZiBub3RpZmljYXRpb24sICJlZGl0IiwgInRlZGl0IiwgZXRjLiAgKi8KICAgICAgY2hhciAq
dHlwZTsKICAgICAgLyogVXNlciB3aG8gaXMgcnVubmluZyB0aGUgY29tbWFuZCB3aGljaCBjYXVz
ZXMgbm90aWZpY2F0aW9uLiAgKi8KICAgICAgY2hhciAqd2hvOwogICAgICAvKiBVc2VyIHRvIGJl
IG5vdGlmaWVkLiAgKi8KISAgICAgY2hhciAqd2F0Y2hlcjsKICAgICAgLyogRmlsZS4gICovCiAg
ICAgIGNoYXIgKmZpbGU7CiAgfTsKICAKICAvKiBQYXNzIGFzIGEgc3RhdGljIHVudGlsIHdlIGdl
dCBhcm91bmQgdG8gZml4aW5nIFBhcnNlX0luZm8gdG8gcGFzcyBhbG9uZwogICAgIGEgdm9pZCAq
IHdoZXJlIHdlIGNhbiBzdGFzaCBpdC4gICovCiAgc3RhdGljIHN0cnVjdCBub3RpZnlfcHJvY19h
cmdzICpub3RpZnlfYXJnczsKICAKICBzdGF0aWMgaW50IG5vdGlmeV9wcm9jIFBST1RPICgoY2hh
ciAqcmVwb3NpdG9yeSwgY2hhciAqZmlsdGVyKSk7CiAgCiAgc3RhdGljIGludAogIG5vdGlmeV9w
cm9jIChyZXBvc2l0b3J5LCBmaWx0ZXIpCiAgICAgIGNoYXIgKnJlcG9zaXRvcnk7CiAgICAgIGNo
YXIgKmZpbHRlcjsKICB7CiAgICAgIEZJTEUgKnBpcGVmcDsKICAgICAgY2hhciAqcHJvZzsKICAg
ICAgY2hhciAqZXhwYW5kZWRfcHJvZzsKICAgICAgY2hhciAqcDsKICAgICAgY2hhciAqcTsKICAg
ICAgY2hhciAqc3JlcG9zOwogICAgICBzdHJ1Y3Qgbm90aWZ5X3Byb2NfYXJncyAqYXJncyA9IG5v
dGlmeV9hcmdzOwogIAogICAgICBzcmVwb3MgPSBTaG9ydF9SZXBvc2l0b3J5IChyZXBvc2l0b3J5
KTsKISAgICAgcHJvZyA9IHhtYWxsb2MgKHN0cmxlbiAoZmlsdGVyKSArIHN0cmxlbiAoYXJncy0+
d2F0Y2hlcikgKyAxKTsKICAgICAgLyogQ29weSBGSUxURVIgdG8gUFJPRywgcmVwbGFjaW5nIHRo
ZSBmaXJzdCBvY2N1cnJlbmNlIG9mICVzIHdpdGgKISAgICAgICAgdGhlIHdhdGNoZXIuICBXZSBv
bmx5IGFsbG9jYXRlZCBlbm91Z2ggbWVtb3J5IGZvciBvbmUgJXMsIGFuZCBJIGRvdWJ0CiAgICAg
ICAgIHRoZXJlIGlzIGEgbmVlZCBmb3IgbW9yZS4gICovCiAgICAgIGZvciAocCA9IGZpbHRlciwg
cSA9IHByb2c7ICpwICE9ICdcMCc7ICsrcCkKICAgICAgewogIAlpZiAocFswXSA9PSAnJScpCiAg
CXsKICAJICAgIGlmIChwWzFdID09ICdzJykKICAJICAgIHsKISAJCXN0cmNweSAocSwgYXJncy0+
d2F0Y2hlcik7CiAgCQlxICs9IHN0cmxlbiAocSk7CiAgCQlzdHJjcHkgKHEsIHAgKyAyKTsKICAJ
CXEgKz0gc3RybGVuIChxKTsKICAJCWJyZWFrOwogIAkgICAgfQogIAkgICAgZWxzZQogIAkJY29u
dGludWU7CiAgCX0KICAJKnErKyA9ICpwOwogICAgICB9CiAgICAgICpxID0gJ1wwJzsKICAKICAg
ICAgLyogRklYTUU6IHdoeSBhcmUgd2UgY2FsbGluZyBleHBhbmRfcHJvYz8gIERpZG4ndCB3ZSBh
bHJlYWR5CiAgICAgICAgIGV4cGFuZCBpdCBpbiBQYXJzZV9JbmZvLCBiZWZvcmUgcGFzc2luZyBp
dCB0byBub3RpZnlfcHJvYz8gICovCiAgICAgIGV4cGFuZGVkX3Byb2cgPSBleHBhbmRfcGF0aCAo
cHJvZywgIm5vdGlmeSIsIDApOwogICAgICBpZiAoIWV4cGFuZGVkX3Byb2cpCioqKioqKioqKioq
KioqKgoqKiogNzMxLDgyMCAqKioqCiAgICAgIGZwcmludGYgKHBpcGVmcCwgIiVzICVzXG4tLS1c
biIsIHNyZXBvcywgYXJncy0+ZmlsZSk7CiAgICAgIGZwcmludGYgKHBpcGVmcCwgIlRyaWdnZXJl
ZCAlcyB3YXRjaCBvbiAlc1xuIiwgYXJncy0+dHlwZSwgcmVwb3NpdG9yeSk7CiAgICAgIGZwcmlu
dGYgKHBpcGVmcCwgIkJ5ICVzXG4iLCBhcmdzLT53aG8pOwogIAogICAgICAvKiBMb3RzIG1vcmUg
cG90ZW50aWFsbHkgdXNlZnVsIGluZm9ybWF0aW9uIHdlIGNvdWxkIGFkZCBoZXJlOyBzZWUKICAg
ICAgICAgbG9nZmlsZV93cml0ZSBmb3IgaW5zcGlyYXRpb24uICAqLwogIAogICAgICBmcmVlIChw
cm9nKTsKICAgICAgZnJlZSAoZXhwYW5kZWRfcHJvZyk7CiAgICAgIHJldHVybiAocGNsb3NlIChw
aXBlZnApKTsKICB9CiAgCiAgLyogRklYTUU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYSB3
YXkgdG8gcmVwb3J0IHdoZXRoZXIgdGhlcmUgd2FzCiAgICAgYW4gZXJyb3Igc28gdGhhdCBzZXJ2
ZXIuYyBjYW4ga25vdyB3aGV0aGVyIHRvIHJlcG9ydCBOb3RpZmllZCBiYWNrCiAgICAgdG8gdGhl
IGNsaWVudC4gICovCiAgdm9pZAohIG5vdGlmeV9kbyAodHlwZSwgZmlsZW5hbWUsIHdobywgdmFs
LCB3YXRjaGVzLCByZXBvc2l0b3J5KQogICAgICBpbnQgdHlwZTsKICAgICAgY2hhciAqZmlsZW5h
bWU7CiAgICAgIGNoYXIgKndobzsKICAgICAgY2hhciAqdmFsOwogICAgICBjaGFyICp3YXRjaGVz
OwogICAgICBjaGFyICpyZXBvc2l0b3J5OwogIHsKICAgICAgc3RhdGljIHN0cnVjdCBhZGRyZW1v
dmVfYXJncyBibGFuazsKICAgICAgc3RydWN0IGFkZHJlbW92ZV9hcmdzIGFyZ3M7CiAgICAgIGNo
YXIgKndhdGNoZXJzOwogICAgICBjaGFyICpwOwogICAgICBjaGFyICplbmRwOwogICAgICBjaGFy
ICpuZXh0cDsKICAKICAgICAgLyogSW5pdGlhbGl6ZSBmaWVsZHMgdG8gMCwgTlVMTCwgb3IgMC4w
LiAgKi8KICAgICAgYXJncyA9IGJsYW5rOwogICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgIHsKICAJ
Y2FzZSAnRSc6CiAgCSAgICBpZiAoc3RycGJyayAodmFsLCAiLD47PVxuIikgIT0gTlVMTCkKICAJ
ICAgIHsKICAJCWVycm9yICgwLCAwLCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gZWRpdG9yIHZhbHVl
Iik7CiAgCQlyZXR1cm47CiAgCSAgICB9CiEgCSAgICBlZGl0b3Jfc2V0IChmaWxlbmFtZSwgd2hv
LCB2YWwpOwogIAkgICAgYnJlYWs7CiAgCWNhc2UgJ1UnOgogIAljYXNlICdDJzoKISAJICAgIGVk
aXRvcl9zZXQgKGZpbGVuYW1lLCB3aG8sIE5VTEwpOwogIAkgICAgYnJlYWs7CiAgCWRlZmF1bHQ6
CiAgCSAgICByZXR1cm47CiAgICAgIH0KICAKICAgICAgd2F0Y2hlcnMgPSBmaWxlYXR0cl9nZXQw
IChmaWxlbmFtZSwgIl93YXRjaGVycyIpOwogICAgICBwID0gd2F0Y2hlcnM7CiAgICAgIHdoaWxl
IChwICE9IE5VTEwpCiAgICAgIHsKICAJY2hhciAqcTsKICAJY2hhciAqZW5kcTsKICAJY2hhciAq
bmV4dHE7CiAgCWNoYXIgKm5vdGlmOwogIAogIAllbmRwID0gc3RyY2hyIChwLCAnPicpOwogIAlp
ZiAoZW5kcCA9PSBOVUxMKQogIAkgICAgYnJlYWs7CiAgCW5leHRwID0gc3RyY2hyIChwLCAnLCcp
OwogIAogIAlpZiAoKHNpemVfdCkoZW5kcCAtIHApID09IHN0cmxlbiAod2hvKSAmJiBzdHJuY21w
ICh3aG8sIHAsIGVuZHAgLSBwKSA9PSAwKQogIAl7CiEgCSAgICAvKiBEb24ndCBub3RpZnkgdXNl
ciBvZiB0aGVpciBvd24gY2hhbmdlcy4gIFdvdWxkIHBlcmhhcHMKISAJICAgICAgIGJlIGJldHRl
ciB0byBjaGVjayB3aGV0aGVyIGl0IGlzIHRoZSBzYW1lIHdvcmtpbmcKISAJICAgICAgIGRpcmVj
dG9yeSwgbm90IHRoZSBzYW1lIHVzZXIsIGJ1dCB0aGF0IGlzIGhhaXJ5LiAgKi8KICAJICAgIHAg
PSBuZXh0cCA9PSBOVUxMID8gbmV4dHAgOiBuZXh0cCArIDE7CiAgCSAgICBjb250aW51ZTsKICAJ
fQogIAogIAkvKiBOb3cgd2UgcG9pbnQgcSBhdCBhIHN0cmluZyB3aGljaCBsb29rcyBsaWtlCiAg
CSAgICJlZGl0K3VuZWRpdCtjb21taXQsIi4uLiBhbmQgd2FsayBkb3duIGl0LiAgKi8KICAJcSA9
IGVuZHAgKyAxOwogIAlub3RpZiA9IE5VTEw7CiAgCXdoaWxlIChxICE9IE5VTEwpCiAgCXsKICAJ
ICAgIGVuZHEgPSBzdHJjaHIgKHEsICcrJyk7CiAgCSAgICBpZiAoZW5kcSA9PSBOVUxMIHx8IChu
ZXh0cCAhPSBOVUxMICYmIGVuZHEgPiBuZXh0cCkpCiAgCSAgICB7CiAgCQlpZiAobmV4dHAgPT0g
TlVMTCkKICAJCSAgICBlbmRxID0gcSArIHN0cmxlbiAocSk7CiAgCQllbHNlCiAgCQkgICAgZW5k
cSA9IG5leHRwOwogIAkJbmV4dHEgPSBOVUxMOwogIAkgICAgfQogIAkgICAgZWxzZQotLS0gODMz
LDk1OCAtLS0tCiAgICAgIGZwcmludGYgKHBpcGVmcCwgIiVzICVzXG4tLS1cbiIsIHNyZXBvcywg
YXJncy0+ZmlsZSk7CiAgICAgIGZwcmludGYgKHBpcGVmcCwgIlRyaWdnZXJlZCAlcyB3YXRjaCBv
biAlc1xuIiwgYXJncy0+dHlwZSwgcmVwb3NpdG9yeSk7CiAgICAgIGZwcmludGYgKHBpcGVmcCwg
IkJ5ICVzXG4iLCBhcmdzLT53aG8pOwogIAogICAgICAvKiBMb3RzIG1vcmUgcG90ZW50aWFsbHkg
dXNlZnVsIGluZm9ybWF0aW9uIHdlIGNvdWxkIGFkZCBoZXJlOyBzZWUKICAgICAgICAgbG9nZmls
ZV93cml0ZSBmb3IgaW5zcGlyYXRpb24uICAqLwogIAogICAgICBmcmVlIChwcm9nKTsKICAgICAg
ZnJlZSAoZXhwYW5kZWRfcHJvZyk7CiAgICAgIHJldHVybiAocGNsb3NlIChwaXBlZnApKTsKICB9
CiAgCiAgLyogRklYTUU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYSB3YXkgdG8gcmVwb3J0
IHdoZXRoZXIgdGhlcmUgd2FzCiAgICAgYW4gZXJyb3Igc28gdGhhdCBzZXJ2ZXIuYyBjYW4ga25v
dyB3aGV0aGVyIHRvIHJlcG9ydCBOb3RpZmllZCBiYWNrCiAgICAgdG8gdGhlIGNsaWVudC4gICov
CiAgdm9pZAohIG5vdGlmeV9kbyAodHlwZSwgZmlsZW5hbWUsIHdobywgZWRpdG9yLCB2YWwsIHdh
dGNoZXMsIHJlcG9zaXRvcnkpCiAgICAgIGludCB0eXBlOwogICAgICBjaGFyICpmaWxlbmFtZTsK
ICAgICAgY2hhciAqd2hvOworICAgICBjaGFyICplZGl0b3I7CiAgICAgIGNoYXIgKnZhbDsKICAg
ICAgY2hhciAqd2F0Y2hlczsKICAgICAgY2hhciAqcmVwb3NpdG9yeTsKICB7CiAgICAgIHN0YXRp
YyBzdHJ1Y3QgYWRkcmVtb3ZlX2FyZ3MgYmxhbms7CiAgICAgIHN0cnVjdCBhZGRyZW1vdmVfYXJn
cyBhcmdzOworICAgICBpbnQgZWRpdF9jb3VudCA9IDA7CiAgICAgIGNoYXIgKndhdGNoZXJzOwog
ICAgICBjaGFyICpwOwogICAgICBjaGFyICplbmRwOwogICAgICBjaGFyICpuZXh0cDsKICAKICAg
ICAgLyogSW5pdGlhbGl6ZSBmaWVsZHMgdG8gMCwgTlVMTCwgb3IgMC4wLiAgKi8KICAgICAgYXJn
cyA9IGJsYW5rOwogICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgIHsKICAJY2FzZSAnRSc6CiAgCSAg
ICBpZiAoc3RycGJyayAodmFsLCAiLD47PVxuIikgIT0gTlVMTCkKICAJICAgIHsKICAJCWVycm9y
ICgwLCAwLCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gZWRpdG9yIHZhbHVlIik7CiAgCQlyZXR1cm47
CiAgCSAgICB9CiEgCSAgICBlZGl0b3Jfc2V0IChmaWxlbmFtZSwgZWRpdG9yLCB2YWwpOwogIAkg
ICAgYnJlYWs7CiAgCWNhc2UgJ1UnOgogIAljYXNlICdDJzoKISAJICAgIGVkaXRvcl9zZXQgKGZp
bGVuYW1lLCBlZGl0b3IsIE5VTEwpOwogIAkgICAgYnJlYWs7CiAgCWRlZmF1bHQ6CiAgCSAgICBy
ZXR1cm47CiAgICAgIH0KICAKICAgICAgd2F0Y2hlcnMgPSBmaWxlYXR0cl9nZXQwIChmaWxlbmFt
ZSwgIl93YXRjaGVycyIpOwogICAgICBwID0gd2F0Y2hlcnM7CiAgICAgIHdoaWxlIChwICE9IE5V
TEwpCiAgICAgIHsKICAJY2hhciAqcTsKICAJY2hhciAqZW5kcTsKICAJY2hhciAqbmV4dHE7CiAg
CWNoYXIgKm5vdGlmOwogIAogIAllbmRwID0gc3RyY2hyIChwLCAnPicpOwogIAlpZiAoZW5kcCA9
PSBOVUxMKQogIAkgICAgYnJlYWs7CiAgCW5leHRwID0gc3RyY2hyIChwLCAnLCcpOwogIAogIAlp
ZiAoKHNpemVfdCkoZW5kcCAtIHApID09IHN0cmxlbiAod2hvKSAmJiBzdHJuY21wICh3aG8sIHAs
IGVuZHAgLSBwKSA9PSAwKQorIAl7CisgICAgICAgICAgICAgY2hhciAqZSA9IE5VTEw7CisgICAg
ICAgICAgICAgY2hhciAqZWRpdG9ycyA9IE5VTEw7CisgCisgICAgICAgICAgICAgZWRpdG9ycyA9
IGZpbGVhdHRyX2dldDAgKGZpbGVuYW1lLCAiX2VkaXRvcnMiKTsKKyAgICAgICAgICAgICBlID0g
ZWRpdG9yczsKKyAgICAgICAgICAgICB3aGlsZSAoZSAhPSBOVUxMKQogIAl7CiEgICAgICAgICAg
ICAgICAgIGNoYXIgKmVfYXQgPSBOVUxMOwohICAgICAgICAgICAgICAgICBjaGFyICplX2VuZCA9
IE5VTEw7CiEgICAgICAgICAgICAgICAgIGNoYXIgKmVfZ3QgPSBOVUxMOwohIAohICAgICAgICAg
ICAgICAgICBlX2F0ID0gc3RyY2hyIChlLCAnQCcpOwohICAgICAgICAgICAgICAgICBlX2d0ID0g
c3RyY2hyIChlLCAnPicpOwohIAohICAgICAgICAgICAgICAgICBlX2VuZCA9IChlX2F0ICE9IE5V
TEwpICAgPyAgIGVfYXQgICA6ICAgZV9ndDsKISAKISAgICAgICAgICAgICAgICAgaWYgKChzaXpl
X3QpIChlX2VuZCAtIGUpID09IHN0cmxlbiAod2hvKSAgJiYKISAgICAgICAgICAgICAgICAgICAg
IHN0cm5jbXAgKHdobywgZSwgZV9lbmQgLSBlKSA9PSAwKQohICAgICAgICAgICAgICAgICB7CiEg
ICAgICAgICAgICAgICAgICAgICArK2VkaXRfY291bnQ7CiEgICAgICAgICAgICAgICAgIH0KISAK
ISAgICAgICAgICAgICAgICAgZSA9IHN0cmNociAoZSwgJywnKTsKISAgICAgICAgICAgICAgICAg
aWYgKGUgIT0gTlVMTCkKISAgICAgICAgICAgICAgICAgewohICAgICAgICAgICAgICAgICAgICAg
KytlOwohICAgICAgICAgICAgICAgICB9CiEgICAgICAgICAgICAgfQohIAohICAgICAgICAgICAg
IGlmIChlZGl0X2NvdW50IDw9IDEpCiEgICAgICAgICAgICAgewogIAkgICAgcCA9IG5leHRwID09
IE5VTEwgPyBuZXh0cCA6IG5leHRwICsgMTsKICAJICAgIGNvbnRpbnVlOwogIAl9CiAgCisgICAg
ICAgICAgICAgaWYgKGVkaXRvcnMgIT0gTlVMTCkKKyAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIGZyZWUgKGVkaXRvcnMpOworICAgICAgICAgICAgIH0KKyAJfQorIAogIAkvKiBOb3cg
d2UgcG9pbnQgcSBhdCBhIHN0cmluZyB3aGljaCBsb29rcyBsaWtlCiAgCSAgICJlZGl0K3VuZWRp
dCtjb21taXQsIi4uLiBhbmQgd2FsayBkb3duIGl0LiAgKi8KICAJcSA9IGVuZHAgKyAxOwogIAlu
b3RpZiA9IE5VTEw7CiAgCXdoaWxlIChxICE9IE5VTEwpCiAgCXsKICAJICAgIGVuZHEgPSBzdHJj
aHIgKHEsICcrJyk7CiAgCSAgICBpZiAoZW5kcSA9PSBOVUxMIHx8IChuZXh0cCAhPSBOVUxMICYm
IGVuZHEgPiBuZXh0cCkpCiAgCSAgICB7CiAgCQlpZiAobmV4dHAgPT0gTlVMTCkKICAJCSAgICBl
bmRxID0gcSArIHN0cmxlbiAocSk7CiAgCQllbHNlCiAgCQkgICAgZW5kcSA9IG5leHRwOwogIAkJ
bmV4dHEgPSBOVUxMOwogIAkgICAgfQogIAkgICAgZWxzZQoqKioqKioqKioqKioqKioKKioqIDg1
NSw5NzUgKioqKgogIAkJICAgIG5vdGlmID0gInRlbXBvcmFyeSBjb21taXQiOwogIAkgICAgfQog
IAkgICAgcSA9IG5leHRxOwogIAl9CiAgCWlmIChuZXh0cCAhPSBOVUxMKQogIAkgICAgKytuZXh0
cDsKICAKICAJaWYgKG5vdGlmICE9IE5VTEwpCiAgCXsKICAJICAgIHN0cnVjdCBub3RpZnlfcHJv
Y19hcmdzIGFyZ3M7CiAgCSAgICBzaXplX3QgbGVuID0gZW5kcCAtIHA7CiAgCSAgICBGSUxFICpm
cDsKICAJICAgIGNoYXIgKnVzZXJzbmFtZTsKICAJICAgIGNoYXIgKmxpbmUgPSBOVUxMOwogIAkg
ICAgc2l6ZV90IGxpbmVfbGVuID0gMDsKICAKISAJICAgIGFyZ3Mubm90aWZ5ZWUgPSBOVUxMOwog
IAkgICAgdXNlcnNuYW1lID0geG1hbGxvYyAoc3RybGVuIChDVlNyb290X2RpcmVjdG9yeSkKICAJ
CQkJICsgc2l6ZW9mIENWU1JPT1RBRE0KICAJCQkJICsgc2l6ZW9mIENWU1JPT1RBRE1fVVNFUlMK
ICAJCQkJICsgMjApOwogIAkgICAgc3RyY3B5ICh1c2Vyc25hbWUsIENWU3Jvb3RfZGlyZWN0b3J5
KTsKICAJICAgIHN0cmNhdCAodXNlcnNuYW1lLCAiLyIpOwogIAkgICAgc3RyY2F0ICh1c2Vyc25h
bWUsIENWU1JPT1RBRE0pOwogIAkgICAgc3RyY2F0ICh1c2Vyc25hbWUsICIvIik7CiAgCSAgICBz
dHJjYXQgKHVzZXJzbmFtZSwgQ1ZTUk9PVEFETV9VU0VSUyk7CiAgCSAgICBmcCA9IENWU19GT1BF
TiAodXNlcnNuYW1lLCAiciIpOwogIAkgICAgaWYgKGZwID09IE5VTEwgJiYgIWV4aXN0ZW5jZV9l
cnJvciAoZXJybm8pKQogIAkJZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IHJlYWQgJXMiLCB1c2Vy
c25hbWUpOwogIAkgICAgaWYgKGZwICE9IE5VTEwpCiAgCSAgICB7CiAgCQl3aGlsZSAoZ2V0bGlu
ZSAoJmxpbmUsICZsaW5lX2xlbiwgZnApID49IDApCiAgCQl7CiAgCQkgICAgaWYgKHN0cm5jbXAg
KGxpbmUsIHAsIGxlbikgPT0gMAogIAkJCSYmIGxpbmVbbGVuXSA9PSAnOicpCiAgCQkgICAgewog
IAkJCWNoYXIgKmNwOwohIAkJCWFyZ3Mubm90aWZ5ZWUgPSB4c3RyZHVwIChsaW5lICsgbGVuICsg
MSk7CiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlcmUgbWF5IG9yIG1heSBub3Qg
YmUgbW9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9uLXNlcGFyYXRlZCBmaWVs
ZHMgYWRkZWQgdG8gdGhpcyBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1
cmU7IGluIGFueSBjYXNlLCB3ZSBpZ25vcmUgdGhlbSByaWdodAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vdywgYW5kIGlmIHRoZXJlIGFyZSBub25lIHdlIG1ha2Ugc3VyZSB0bwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Agb2ZmIHRoZSBmaW5hbCBuZXdsaW5lLCBpZiBh
bnkuICovCiEgCQkJY3AgPSBzdHJwYnJrIChhcmdzLm5vdGlmeWVlLCAiOlxuIik7CiAgCiAgCQkJ
aWYgKGNwICE9IE5VTEwpCiAgCQkJICAgICpjcCA9ICdcMCc7CiAgCQkJYnJlYWs7CiAgCQkgICAg
fQogIAkJfQogIAkJaWYgKGZlcnJvciAoZnApKQogIAkJICAgIGVycm9yICgwLCBlcnJubywgImNh
bm5vdCByZWFkICVzIiwgdXNlcnNuYW1lKTsKICAJCWlmIChmY2xvc2UgKGZwKSA8IDApCiAgCQkg
ICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IGNsb3NlICVzIiwgdXNlcnNuYW1lKTsKICAJICAg
IH0KICAJICAgIGZyZWUgKHVzZXJzbmFtZSk7CiAgCSAgICBpZiAobGluZSAhPSBOVUxMKQogIAkJ
ZnJlZSAobGluZSk7CiAgCiEgCSAgICBpZiAoYXJncy5ub3RpZnllZSA9PSBOVUxMKQogIAkgICAg
ewohIAkJYXJncy5ub3RpZnllZSA9IHhtYWxsb2MgKGVuZHAgLSBwICsgMSk7CiEgCQlzdHJuY3B5
IChhcmdzLm5vdGlmeWVlLCBwLCBlbmRwIC0gcCk7CiEgCQlhcmdzLm5vdGlmeWVlW2VuZHAgLSBw
XSA9ICdcMCc7CiAgCSAgICB9CiAgCiAgCSAgICBub3RpZnlfYXJncyA9ICZhcmdzOwogIAkgICAg
YXJncy50eXBlID0gbm90aWY7CiAgCSAgICBhcmdzLndobyA9IHdobzsKICAJICAgIGFyZ3MuZmls
ZSA9IGZpbGVuYW1lOwogIAogIAkgICAgKHZvaWQpIFBhcnNlX0luZm8gKENWU1JPT1RBRE1fTk9U
SUZZLCByZXBvc2l0b3J5LCBub3RpZnlfcHJvYywgMSk7CiEgCSAgICBmcmVlIChhcmdzLm5vdGlm
eWVlKTsKICAJfQogIAogIAlwID0gbmV4dHA7CiAgICAgIH0KICAgICAgaWYgKHdhdGNoZXJzICE9
IE5VTEwpCiAgCWZyZWUgKHdhdGNoZXJzKTsKICAKICAgICAgc3dpdGNoICh0eXBlKQogICAgICB7
CiAgCWNhc2UgJ0UnOgogIAkgICAgaWYgKCp3YXRjaGVzID09ICdFJykKICAJICAgIHsKICAJCWFy
Z3MuYWRkX3RlZGl0ID0gMTsKICAJCSsrd2F0Y2hlczsKICAJICAgIH0KICAJICAgIGlmICgqd2F0
Y2hlcyA9PSAnVScpCiAgCSAgICB7CiAgCQlhcmdzLmFkZF90dW5lZGl0ID0gMTsKICAJCSsrd2F0
Y2hlczsKICAJICAgIH0KICAJICAgIGlmICgqd2F0Y2hlcyA9PSAnQycpCiAgCSAgICB7CiAgCQlh
cmdzLmFkZF90Y29tbWl0ID0gMTsKICAJICAgIH0KICAJICAgIHdhdGNoX21vZGlmeV93YXRjaGVy
cyAoZmlsZW5hbWUsICZhcmdzKTsKICAJICAgIGJyZWFrOwogIAljYXNlICdVJzoKICAJY2FzZSAn
Qyc6CiAgCSAgICBhcmdzLnJlbW92ZV90ZW1wID0gMTsKICAJICAgIHdhdGNoX21vZGlmeV93YXRj
aGVycyAoZmlsZW5hbWUsICZhcmdzKTsKICAJICAgIGJyZWFrOwogICAgICB9CiAgfQogIAogICNp
ZmRlZiBDTElFTlRfU1VQUE9SVAogIC8qIENoZWNrIGFuZCBzZW5kIG5vdGlmaWNhdGlvbnMuICBU
aGlzIGlzIG9ubHkgZm9yIHRoZSBjbGllbnQuICAqLwogIHZvaWQKICBub3RpZnlfY2hlY2sgKHJl
cG9zaXRvcnksIHVwZGF0ZV9kaXIpCiAgICAgIGNoYXIgKnJlcG9zaXRvcnk7CiAgICAgIGNoYXIg
KnVwZGF0ZV9kaXI7CiAgewogICAgICBGSUxFICpmcDsKICAgICAgY2hhciAqbGluZSA9IE5VTEw7
CiAgICAgIHNpemVfdCBsaW5lX2xlbiA9IDA7CiAgCiAgICAgIGlmICghIHNlcnZlcl9zdGFydGVk
KQogIAkvKiBXZSBhcmUgaW4gdGhlIG1pZHN0IG9mIGEgY29tbWFuZCB3aGljaCBpcyBub3QgdG8g
dGFsayB0bwotLS0gOTkzLDExMTYgLS0tLQogIAkJICAgIG5vdGlmID0gInRlbXBvcmFyeSBjb21t
aXQiOwogIAkgICAgfQogIAkgICAgcSA9IG5leHRxOwogIAl9CiAgCWlmIChuZXh0cCAhPSBOVUxM
KQogIAkgICAgKytuZXh0cDsKICAKICAJaWYgKG5vdGlmICE9IE5VTEwpCiAgCXsKICAJICAgIHN0
cnVjdCBub3RpZnlfcHJvY19hcmdzIGFyZ3M7CiAgCSAgICBzaXplX3QgbGVuID0gZW5kcCAtIHA7
CiAgCSAgICBGSUxFICpmcDsKICAJICAgIGNoYXIgKnVzZXJzbmFtZTsKICAJICAgIGNoYXIgKmxp
bmUgPSBOVUxMOwogIAkgICAgc2l6ZV90IGxpbmVfbGVuID0gMDsKICAKISAJICAgIGFyZ3Mud2F0
Y2hlciA9IE5VTEw7CiAgCSAgICB1c2Vyc25hbWUgPSB4bWFsbG9jIChzdHJsZW4gKENWU3Jvb3Rf
ZGlyZWN0b3J5KQogIAkJCQkgKyBzaXplb2YgQ1ZTUk9PVEFETQogIAkJCQkgKyBzaXplb2YgQ1ZT
Uk9PVEFETV9VU0VSUwogIAkJCQkgKyAyMCk7CiAgCSAgICBzdHJjcHkgKHVzZXJzbmFtZSwgQ1ZT
cm9vdF9kaXJlY3RvcnkpOwogIAkgICAgc3RyY2F0ICh1c2Vyc25hbWUsICIvIik7CiAgCSAgICBz
dHJjYXQgKHVzZXJzbmFtZSwgQ1ZTUk9PVEFETSk7CiAgCSAgICBzdHJjYXQgKHVzZXJzbmFtZSwg
Ii8iKTsKICAJICAgIHN0cmNhdCAodXNlcnNuYW1lLCBDVlNST09UQURNX1VTRVJTKTsKICAJICAg
IGZwID0gQ1ZTX0ZPUEVOICh1c2Vyc25hbWUsICJyIik7CiAgCSAgICBpZiAoZnAgPT0gTlVMTCAm
JiAhZXhpc3RlbmNlX2Vycm9yIChlcnJubykpCiAgCQllcnJvciAoMCwgZXJybm8sICJjYW5ub3Qg
cmVhZCAlcyIsIHVzZXJzbmFtZSk7CiAgCSAgICBpZiAoZnAgIT0gTlVMTCkKICAJICAgIHsKICAJ
CXdoaWxlIChnZXRsaW5lICgmbGluZSwgJmxpbmVfbGVuLCBmcCkgPj0gMCkKICAJCXsKICAJCSAg
ICBpZiAoc3RybmNtcCAobGluZSwgcCwgbGVuKSA9PSAwCiAgCQkJJiYgbGluZVtsZW5dID09ICc6
JykKICAJCSAgICB7CiAgCQkJY2hhciAqY3A7CiEgCQkJYXJncy53YXRjaGVyID0geHN0cmR1cCAo
bGluZSArIGxlbiArIDEpOwogIAogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXJlIG1h
eSBvciBtYXkgbm90IGJlIG1vcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvbi1z
ZXBhcmF0ZWQgZmllbGRzIGFkZGVkIHRvIHRoaXMgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnV0dXJlOyBpbiBhbnkgY2FzZSwgd2UgaWdub3JlIHRoZW0gcmlnaHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub3csIGFuZCBpZiB0aGVyZSBhcmUgbm9uZSB3ZSBtYWtl
IHN1cmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9wIG9mZiB0aGUgZmluYWwg
bmV3bGluZSwgaWYgYW55LiAqLwohIAkJCWNwID0gc3RycGJyayAoYXJncy53YXRjaGVyLCAiOlxu
Iik7CiAgCiAgCQkJaWYgKGNwICE9IE5VTEwpCiAgCQkJICAgICpjcCA9ICdcMCc7CiAgCQkJYnJl
YWs7CiAgCQkgICAgfQogIAkJfQogIAkJaWYgKGZlcnJvciAoZnApKQogIAkJICAgIGVycm9yICgw
LCBlcnJubywgImNhbm5vdCByZWFkICVzIiwgdXNlcnNuYW1lKTsKICAJCWlmIChmY2xvc2UgKGZw
KSA8IDApCiAgCQkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IGNsb3NlICVzIiwgdXNlcnNu
YW1lKTsKICAJICAgIH0KICAJICAgIGZyZWUgKHVzZXJzbmFtZSk7CiAgCSAgICBpZiAobGluZSAh
PSBOVUxMKQogIAkJZnJlZSAobGluZSk7CiAgCiEgCSAgICBpZiAoYXJncy53YXRjaGVyID09IE5V
TEwpCiAgCSAgICB7CiEgCQlhcmdzLndhdGNoZXIgPSB4bWFsbG9jIChlbmRwIC0gcCArIDEpOwoh
IAkJc3RybmNweSAoYXJncy53YXRjaGVyLCBwLCBlbmRwIC0gcCk7CiEgCQlhcmdzLndhdGNoZXJb
ZW5kcCAtIHBdID0gJ1wwJzsKICAJICAgIH0KICAKICAJICAgIG5vdGlmeV9hcmdzID0gJmFyZ3M7
CiAgCSAgICBhcmdzLnR5cGUgPSBub3RpZjsKICAJICAgIGFyZ3Mud2hvID0gd2hvOwogIAkgICAg
YXJncy5maWxlID0gZmlsZW5hbWU7CiAgCiAgCSAgICAodm9pZCkgUGFyc2VfSW5mbyAoQ1ZTUk9P
VEFETV9OT1RJRlksIHJlcG9zaXRvcnksIG5vdGlmeV9wcm9jLCAxKTsKISAJICAgIGZyZWUgKGFy
Z3Mud2F0Y2hlcik7CiAgCX0KICAKICAJcCA9IG5leHRwOwogICAgICB9CiAgICAgIGlmICh3YXRj
aGVycyAhPSBOVUxMKQogIAlmcmVlICh3YXRjaGVycyk7CiAgCisgICAgIGlmIChlZGl0X2NvdW50
IDw9IDEpCisgICAgIHsKICAgICAgc3dpdGNoICh0eXBlKQogICAgICB7CiAgCWNhc2UgJ0UnOgog
IAkgICAgaWYgKCp3YXRjaGVzID09ICdFJykKICAJICAgIHsKICAJCWFyZ3MuYWRkX3RlZGl0ID0g
MTsKICAJCSsrd2F0Y2hlczsKICAJICAgIH0KICAJICAgIGlmICgqd2F0Y2hlcyA9PSAnVScpCiAg
CSAgICB7CiAgCQlhcmdzLmFkZF90dW5lZGl0ID0gMTsKICAJCSsrd2F0Y2hlczsKICAJICAgIH0K
ICAJICAgIGlmICgqd2F0Y2hlcyA9PSAnQycpCiAgCSAgICB7CiAgCQlhcmdzLmFkZF90Y29tbWl0
ID0gMTsKICAJICAgIH0KICAJICAgIHdhdGNoX21vZGlmeV93YXRjaGVycyAoZmlsZW5hbWUsICZh
cmdzKTsKICAJICAgIGJyZWFrOwogIAljYXNlICdVJzoKICAJY2FzZSAnQyc6CiAgCSAgICBhcmdz
LnJlbW92ZV90ZW1wID0gMTsKICAJICAgIHdhdGNoX21vZGlmeV93YXRjaGVycyAoZmlsZW5hbWUs
ICZhcmdzKTsKICAJICAgIGJyZWFrOworICAgICB9CiAgICAgIH0KICB9CiAgCiAgI2lmZGVmIENM
SUVOVF9TVVBQT1JUCiAgLyogQ2hlY2sgYW5kIHNlbmQgbm90aWZpY2F0aW9ucy4gIFRoaXMgaXMg
b25seSBmb3IgdGhlIGNsaWVudC4gICovCiAgdm9pZAogIG5vdGlmeV9jaGVjayAocmVwb3NpdG9y
eSwgdXBkYXRlX2RpcikKICAgICAgY2hhciAqcmVwb3NpdG9yeTsKICAgICAgY2hhciAqdXBkYXRl
X2RpcjsKICB7CiAgICAgIEZJTEUgKmZwOwogICAgICBjaGFyICpsaW5lID0gTlVMTDsKICAgICAg
c2l6ZV90IGxpbmVfbGVuID0gMDsKICAKICAgICAgaWYgKCEgc2VydmVyX3N0YXJ0ZWQpCiAgCS8q
IFdlIGFyZSBpbiB0aGUgbWlkc3Qgb2YgYSBjb21tYW5kIHdoaWNoIGlzIG5vdCB0byB0YWxrIHRv
CkluZGV4OiBzcmMvZWRpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jv
b3QvY3ZzL3NyYy9lZGl0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEuMS4xLjQuMQpkaWZmIC1DMTYgLXcgLXIxLjEuMS4xIC1yMS4xLjEuMS40
LjEKKioqIHNyYy9lZGl0LmgJMjAwMS8wMy8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvZWRp
dC5oCTIwMDEvMDMvMDYgMjI6MTY6MTgJMS4xLjEuMS40LjEKKioqKioqKioqKioqKioqCioqKiAx
MywzOCAqKioqCi0tLSAxMywzOSAtLS0tCiAgZXh0ZXJuIGludCB3YXRjaF9vbiBQUk9UTyAoKGlu
dCBhcmdjLCBjaGFyICoqYXJndikpOwogIGV4dGVybiBpbnQgd2F0Y2hfb2ZmIFBST1RPICgoaW50
IGFyZ2MsIGNoYXIgKiphcmd2KSk7CiAgCiAgI2lmZGVmIENMSUVOVF9TVVBQT1JUCiAgLyogQ2hl
Y2sgdG8gc2VlIGlmIGFueSBub3RpZmljYXRpb25zIGFyZSBzaXR0aW5nIGFyb3VuZCBpbiBuZWVk
IG9mIGJlaW5nCiAgICAgc2VudC4gIFRoZXNlIGFyZSB0aGUgbm90aWZpY2F0aW9ucyBzdG9yZWQg
aW4gQ1ZTQURNX05PVElGWSAoZWRpdCx1bmVkaXQpOwogICAgIGNvbW1pdCBjYWxscyBub3RpZnlf
ZG8gZGlyZWN0bHkuICAqLwogIGV4dGVybiB2b2lkIG5vdGlmeV9jaGVjayBQUk9UTyAoKGNoYXIg
KnJlcG9zaXRvcnksIGNoYXIgKnVwZGF0ZV9kaXIpKTsKICAjZW5kaWYgLyogQ0xJRU5UX1NVUFBP
UlQgKi8KICAKICAvKiBJc3N1ZSBhIG5vdGlmaWNhdGlvbiBmb3IgZmlsZSBGSUxFTkFNRS4gIFRZ
UEUgaXMgJ0UnIGZvciBlZGl0LCAnVScKICAgICBmb3IgdW5lZGl0LCBhbmQgJ0MnIGZvciBjb21t
aXQuICBXSE8gaXMgdGhlIHVzZXIgY3VycmVudGx5IHJ1bm5pbmcuCiAgICAgRm9yIFRZUEUgJ0Un
LCBWQUwgaXMgdGhlIHRpbWUraG9zdCtkaXJlY3RvcnkgZGF0YSB3aGljaCBnb2VzIGluCiAgICAg
X2VkaXRvcnMsIGFuZCBXQVRDSEVTIGlzIHplcm8gb3IgbW9yZSBvZiBFLFUsQywgaW4gdGhhdCBv
cmRlciwgdG8gc3BlY2lmeQogICAgIHdoYXQga2luZHMgb2YgdGVtcG9yYXJ5IHdhdGNoZXMgdG8g
c2V0LiAgKi8KICBleHRlcm4gdm9pZCBub3RpZnlfZG8gUFJPVE8gKChpbnQgdHlwZSwgY2hhciAq
ZmlsZW5hbWUsIGNoYXIgKndobywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICplZGl0b3IsCiAgCQkJICAgICAgY2hhciAqdmFsLCBjaGFyICp3YXRjaGVzLCBjaGFyICpyZXBv
c2l0b3J5KSk7CiAgCiAgLyogU2V0IGF0dHJpYnV0ZXMgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0
IEVESVRPUiBpcyBlZGl0aW5nIEZJTEVOQU1FLgogICAgIFZBTCBpcyB0aW1lK2hvc3QrZGlyZWN0
b3J5LCBvciBOVUxMIGlmIHdlIGFyZSB0byBzYXkgdGhhdCBFRElUT1IgaXMKICAgICAqbm90KiBl
ZGl0aW5nIEZJTEVOQU1FLiAgKi8KICBleHRlcm4gdm9pZCBlZGl0b3Jfc2V0IFBST1RPICgoY2hh
ciAqZmlsZW5hbWUsIGNoYXIgKmVkaXRvciwgY2hhciAqdmFsKSk7CiAgCiAgLyogVGFrZSBub3Rl
IG9mIHRoZSBmYWN0IHRoYXQgRklMRSBpcyB1cCB0byBkYXRlICh0aGlzIG11bmdlcyBDVlMvQmFz
ZTsKICAgICBwcm9jZXNzaW5nIG9mIENWUy9FbnRyaWVzIGlzIGRvbmUgc2VwYXJhdGVseSkuICAq
LwogIGV4dGVybiB2b2lkIG1hcmtfdXBfdG9fZGF0ZSBQUk9UTyAoKGNoYXIgKmZpbGUpKTsKSW5k
ZXg6IHNyYy9pbXBvcnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290
L2N2cy9zcmMvaW1wb3J0LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEuMS4xLjQuMQpkaWZmIC1DMTYgLXcgLXIxLjEuMS4xIC1yMS4xLjEuMS40
LjEKKioqIHNyYy9pbXBvcnQuYwkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIHNyYy9p
bXBvcnQuYwkyMDAxLzAzLzA4IDE0OjI2OjA1CTEuMS4xLjEuNC4xCioqKioqKioqKioqKioqKgoq
KiogMzYxLDM5MiAqKioqCi0tLSAzNjEsMzk2IC0tLS0KICAgICAgewogIAlpZiAoIXJlYWxseV9x
dWlldCkKICAJICAgIGN2c19vdXRwdXQgKCJcbk5vIGNvbmZsaWN0cyBjcmVhdGVkIGJ5IHRoaXMg
aW1wb3J0XG5cbiIsIDApOwogIAkodm9pZCkgZnByaW50ZiAobG9nZnAsICJcbk5vIGNvbmZsaWN0
cyBjcmVhdGVkIGJ5IHRoaXMgaW1wb3J0XG5cbiIpOwogICAgICB9CiAgCiAgICAgIC8qCiAgICAg
ICAqIFdyaXRlIG91dCB0aGUgbG9nZmlsZSBhbmQgY2xlYW4gdXAuCiAgICAgICAqLwogICAgICB1
bGlzdCA9IGdldGxpc3QgKCk7CiAgICAgIHAgPSBnZXRub2RlICgpOwogICAgICBwLT50eXBlID0g
VVBEQVRFOwogICAgICBwLT5kZWxwcm9jID0gdXBkYXRlX2RlbHByb2M7CiAgICAgIHAtPmtleSA9
IHhzdHJkdXAgKCItIEltcG9ydGVkIHNvdXJjZXMiKTsKICAgICAgbGkgPSAoc3RydWN0IGxvZ2Zp
bGVfaW5mbyAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBsb2dmaWxlX2luZm8pKTsKICAgICAg
bGktPnR5cGUgPSBUX1RJVExFOworICAgICBsaS0+cmVwb3NpdG9yeSA9IE5VTEw7CisgICAgIGxp
LT5ob3N0bmFtZSA9IE5VTEw7CisgICAgIGxpLT53ZCA9IE5VTEw7CisgICAgIGxpLT5lZGl0b3Ig
PSBOVUxMOwogICAgICBsaS0+dGFnID0geHN0cmR1cCAodmJyYW5jaCk7CiAgICAgIGxpLT5yZXZf
b2xkID0gbGktPnJldl9uZXcgPSBOVUxMOwogICAgICBwLT5kYXRhID0gKGNoYXIgKikgbGk7CiAg
ICAgICh2b2lkKSBhZGRub2RlICh1bGlzdCwgcCk7CiAgICAgIFVwZGF0ZV9Mb2dmaWxlIChyZXBv
c2l0b3J5LCBtZXNzYWdlLCBsb2dmcCwgdWxpc3QpOwogICAgICBkZWxsaXN0ICgmdWxpc3QpOwog
ICAgICBpZiAoZmNsb3NlIChsb2dmcCkgPCAwKQogIAllcnJvciAoMCwgZXJybm8sICJlcnJvciBj
bG9zaW5nICVzIiwgdG1wZmlsZSk7CiAgCiAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgdGVtcG9yYXJ5
IGZpbGUgZ29lcyBhd2F5LCBldmVuIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBsZXQKICAgICAgICAg
eW91IGRlbGV0ZSBhIGZpbGUgdGhhdCdzIGluIHVzZS4gICovCiAgICAgIGlmIChDVlNfVU5MSU5L
ICh0bXBmaWxlKSA8IDAgJiYgIWV4aXN0ZW5jZV9lcnJvciAoZXJybm8pKQogIAllcnJvciAoMCwg
ZXJybm8sICJjYW5ub3QgcmVtb3ZlICVzIiwgdG1wZmlsZSk7CiAgICAgIGZyZWUgKHRtcGZpbGUp
OwogIAogICAgICBpZiAobWVzc2FnZSkKSW5kZXg6IHNyYy9yY3MuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMvcmNzLmMsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xLjQuMQpkaWZmIC1DMTYgLXcg
LXIxLjEuMS4xIC1yMS4xLjEuMS40LjEKKioqIHNyYy9yY3MuYwkyMDAxLzAzLzA2IDE2OjIxOjIx
CTEuMS4xLjEKLS0tIHNyYy9yY3MuYwkyMDAxLzAzLzA2IDIyOjE2OjE4CTEuMS4xLjEuNC4xCioq
KioqKioqKioqKioqKgoqKiogNTc3OSw1ODEyICoqKioKICAgICAgKHZvaWQpIGFkZG5vZGVfYXRf
ZnJvbnQgKGxvY2tzLCBwKTsKICAKICAgICAgaWYgKCFsb2NrX3F1aWV0KQogICAgICB7CiAgCWN2
c19vdXRwdXQgKHhyZXYsIDApOwogIAljdnNfb3V0cHV0ICgiIGxvY2tlZFxuIiwgMCk7CiAgICAg
IH0KICAKICAgICAgcmV0dXJuIDA7CiAgfQogIAogIC8qIFVubG9jayByZXZpc2lvbiBSRVYuICBV
TkxPQ0tfUVVJRVQgaXMgMSB0byBzdXBwcmVzcyBvdXRwdXQuICBGSVhNRToKICAgICBMaWtlIFJD
U19sb2NrLCB0aGlzIGNhbiBiZWNvbWUgYSBuby1vcCBpZiB3ZSBkbyB0aGUgY2hlY2tpbgogICAg
IG91cnNlbHZlcy4KICAKICAgICBJZiBSRVYgaXMgbm90IG51bGwgYW5kIGlzIGxvY2tlZCBieSBz
b21lb25lIGVsc2UsIGJyZWFrIHRoZWlyCiEgICAgbG9jayBhbmQgbm90aWZ5IHRoZW0uICBJdCBp
cyBhbiBvcGVuIGlzc3VlIHdoZXRoZXIgUkNTX3VubG9jawohICAgIHF1ZXJpZXMgdGhlIHVzZXIg
YWJvdXQgd2hldGhlciBvciBub3QgdG8gYnJlYWsgdGhlIGxvY2suICovCiAgCiAgaW50CiAgUkNT
X3VubG9jayAocmNzLCByZXYsIHVubG9ja19xdWlldCkKICAgICAgIFJDU05vZGUgKnJjczsKICAg
ICAgIGNvbnN0IGNoYXIgKnJldjsKICAgICAgIGludCB1bmxvY2tfcXVpZXQ7CiAgewogICAgICBO
b2RlICpsb2NrOwogICAgICBMaXN0ICpsb2NrczsKICAgICAgY2hhciAqdXNlcjsKICAgICAgY2hh
ciAqeHJldiA9IE5VTEw7CiAgCiAgICAgIHVzZXIgPSBnZXRjYWxsZXIoKTsKICAgICAgaWYgKHJj
cy0+ZmxhZ3MgJiBQQVJUSUFMKQogIAlSQ1NfcmVwYXJzZXJjc2ZpbGUgKHJjcywgKEZJTEUgKiop
IE5VTEwsIChzdHJ1Y3QgcmNzYnVmZmVyICopIE5VTEwpOwogIAotLS0gNTc3OSw1ODEyIC0tLS0K
ICAgICAgKHZvaWQpIGFkZG5vZGVfYXRfZnJvbnQgKGxvY2tzLCBwKTsKICAKICAgICAgaWYgKCFs
b2NrX3F1aWV0KQogICAgICB7CiAgCWN2c19vdXRwdXQgKHhyZXYsIDApOwogIAljdnNfb3V0cHV0
ICgiIGxvY2tlZFxuIiwgMCk7CiAgICAgIH0KICAKICAgICAgcmV0dXJuIDA7CiAgfQogIAogIC8q
IFVubG9jayByZXZpc2lvbiBSRVYuICBVTkxPQ0tfUVVJRVQgaXMgMSB0byBzdXBwcmVzcyBvdXRw
dXQuICBGSVhNRToKICAgICBMaWtlIFJDU19sb2NrLCB0aGlzIGNhbiBiZWNvbWUgYSBuby1vcCBp
ZiB3ZSBkbyB0aGUgY2hlY2tpbgogICAgIG91cnNlbHZlcy4KICAKICAgICBJZiBSRVYgaXMgbm90
IG51bGwgYW5kIGlzIGxvY2tlZCBieSBzb21lb25lIGVsc2UsIGJyZWFrIHRoZWlyCiEgICAgbG9j
ay4gIEl0IGlzIGFuIG9wZW4gaXNzdWUgd2hldGhlciBSQ1NfdW5sb2NrIHF1ZXJpZXMgdGhlIHVz
ZXIKISAgICBhYm91dCB3aGV0aGVyIG9yIG5vdCB0byBicmVhayB0aGUgbG9jay4gKi8KICAKICBp
bnQKICBSQ1NfdW5sb2NrIChyY3MsIHJldiwgdW5sb2NrX3F1aWV0KQogICAgICAgUkNTTm9kZSAq
cmNzOwogICAgICAgY29uc3QgY2hhciAqcmV2OwogICAgICAgaW50IHVubG9ja19xdWlldDsKICB7
CiAgICAgIE5vZGUgKmxvY2s7CiAgICAgIExpc3QgKmxvY2tzOwogICAgICBjaGFyICp1c2VyOwog
ICAgICBjaGFyICp4cmV2ID0gTlVMTDsKICAKICAgICAgdXNlciA9IGdldGNhbGxlcigpOwogICAg
ICBpZiAocmNzLT5mbGFncyAmIFBBUlRJQUwpCiAgCVJDU19yZXBhcnNlcmNzZmlsZSAocmNzLCAo
RklMRSAqKikgTlVMTCwgKHN0cnVjdCByY3NidWZmZXIgKikgTlVMTCk7CiAgCioqKioqKioqKioq
KioqKgoqKiogNTg1OCw1OTAzICoqKioKICAJICAgIGVycm9yICgwLCAwLCAiJXM6IGJyYW5jaCAl
cyBhYnNlbnQiLCByY3MtPnBhdGgsIHJldik7CiAgCSAgICByZXR1cm4gMTsKICAJfQogICAgICB9
CiAgICAgIGVsc2UKICAJLyogUkVWIGlzIGFuIGV4YWN0IHJldmlzaW9uIG51bWJlci4gKi8KICAJ
eHJldiA9IHhzdHJkdXAgKHJldik7CiAgCiAgICAgIGxvY2sgPSBmaW5kbm9kZSAoUkNTX2dldGxv
Y2tzIChyY3MpLCB4cmV2KTsKICAgICAgaWYgKGxvY2sgPT0gTlVMTCkKICAgICAgewogIAkvKiBU
aGlzIHJldmlzaW9uIGlzbid0IGxvY2tlZC4gKi8KICAJZnJlZSAoeHJldik7CiAgCXJldHVybiAw
OwogICAgICB9CiAgCi0gICAgIGlmICghIFNUUkVRIChsb2NrLT5kYXRhLCB1c2VyKSkKLSAgICAg
ewotICAgICAgICAgLyogSWYgdGhlIHJldmlzaW9uIGlzIGxvY2tlZCBieSBzb21lb25lIGVsc2Us
IG5vdGlmeQotIAkgICB0aGVtLiAgTm90ZSB0aGF0IHRoaXMgc2hvdWxkbid0IGV2ZXIgaGFwcGVu
IGlmIFJDU191bmxvY2sKLSAJICAgaXMgY2FsbGVkIHdpdGggYSBOVUxMIHJldmlzaW9uLCBzaW5j
ZSB0aGF0IG1lYW5zICJ3aGF0ZXZlcgotIAkgICByZXZpc2lvbiBpcyBjdXJyZW50bHkgbG9ja2Vk
IGJ5IHRoZSBjYWxsZXIuIiAqLwotIAljaGFyICpyZXBvcywgKndvcmtmaWxlOwotIAlyZXBvcyA9
IHhzdHJkdXAgKHJjcy0+cGF0aCk7Ci0gCXdvcmtmaWxlID0gc3RycmNociAocmVwb3MsICcvJyk7
Ci0gCSp3b3JrZmlsZSsrID0gJ1wwJzsKLSAJbm90aWZ5X2RvICgnQycsIHdvcmtmaWxlLCB1c2Vy
LCBOVUxMLCBOVUxMLCByZXBvcyk7Ci0gCWZyZWUgKHJlcG9zKTsKLSAgICAgfQotIAogICAgICBk
ZWxub2RlIChsb2NrKTsKICAgICAgaWYgKCF1bmxvY2tfcXVpZXQpCiAgICAgIHsKICAJY3ZzX291
dHB1dCAoeHJldiwgMCk7CiAgCWN2c19vdXRwdXQgKCIgdW5sb2NrZWRcbiIsIDApOwogICAgICB9
CiAgCiAgICAgIGZyZWUgKHhyZXYpOwogICAgICByZXR1cm4gMDsKICB9CiAgCiAgLyogQWRkIFVT
RVIgdG8gdGhlIGFjY2VzcyBsaXN0IG9mIFJDUy4gIERvIG5vdGhpbmcgaWYgYWxyZWFkeSBwcmVz
ZW50LgogICAgIEZJWE1FLXR3cDogY2hlY2sgc3ludGF4IG9mIFVTRVIgdG8gbWFrZSBzdXJlIGl0
J3MgYSB2YWxpZCBpZC4gKi8KICAKICB2b2lkCiAgUkNTX2FkZGFjY2VzcyAocmNzLCB1c2VyKQot
LS0gNTg1OCw1ODg5IC0tLS0KSW5kZXg6IHNyYy9zZXJ2ZXIuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMvc2VydmVyLmMsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xLjQuMgpkaWZmIC1DMTYgLXcg
LXIxLjEuMS4xIC1yMS4xLjEuMS40LjIKKioqIHNyYy9zZXJ2ZXIuYwkyMDAxLzAzLzA2IDE2OjIx
OjIxCTEuMS4xLjEKLS0tIHNyYy9zZXJ2ZXIuYwkyMDAxLzAzLzA4IDE0OjI2OjA1CTEuMS4xLjEu
NC4yCioqKioqKioqKioqKioqKgoqKiogMTkwMCwxOTQ1ICoqKioKLS0tIDE5MDAsMjA3MCAtLS0t
CiAgCX0KICAJZnJlZSAocC0+ZW50cnkpOwogIAlxID0gcC0+bmV4dDsKICAJZnJlZSAocCk7CiAg
CXAgPSBxOwogICAgICB9CiAgICAgIGVudHJpZXMgPSBOVUxMOwogICAgICBpZiAoZiAhPSBOVUxM
ICYmIGZjbG9zZSAoZikgPT0gRU9GICYmICFlcnJvcl9wZW5kaW5nICgpKQogICAgICB7CiAgCWlu
dCBzYXZlX2Vycm5vID0gZXJybm87CiAgCWlmIChhbGxvY19wZW5kaW5nICg4MCArIHN0cmxlbiAo
Q1ZTQURNX0VOVCkpKQogIAkgICAgc3ByaW50ZiAocGVuZGluZ19lcnJvcl90ZXh0LCAiRSBjYW5u
b3QgY2xvc2UgJXMiLCBDVlNBRE1fRU5UKTsKICAJcGVuZGluZ19lcnJvciA9IHNhdmVfZXJybm87
CiAgICAgIH0KICB9CiAgDAorIExpc3QgKmZpbGVpbmZvX2xpc3QgPSBOVUxMOworIAorIHN0YXRp
YyB2b2lkIHNlcnZlX2ZpbGVpbmZvIFBST1RPICgoY2hhciAqKSk7CisgCisgc3RhdGljIHZvaWQK
KyBzZXJ2ZV9maWxlaW5mbyAoYXJnKQorICAgICAgY2hhciAqYXJnOworIHsKKyAgICAgY2hhciAq
ZGF0YSA9IE5VTEw7CisgICAgIGludCBzdGF0dXM7CisgCisgICAgIHN0YXR1cyA9IGJ1Zl9yZWFk
X2xpbmUgKGJ1Zl9mcm9tX25ldCwgJmRhdGEsIChpbnQgKikgTlVMTCk7CisgICAgIGlmIChzdGF0
dXMgIT0gMCkKKyAgICAgeworIAlpZiAoc3RhdHVzID09IC0yKQorICAgICAgICAgeworIAkgICAg
cGVuZGluZ19lcnJvciA9IEVOT01FTTsKKyAgICAgICAgIH0KKyAJZWxzZQorIAl7CisgCSAgICBw
ZW5kaW5nX2Vycm9yX3RleHQgPSBtYWxsb2MgKDgwICsgc3RybGVuIChhcmcpKTsKKyAJICAgIGlm
IChwZW5kaW5nX2Vycm9yX3RleHQgPT0gTlVMTCkKKyAgICAgICAgICAgICB7CisgCQlwZW5kaW5n
X2Vycm9yID0gRU5PTUVNOworICAgICAgICAgICAgIH0KKyAJICAgIGVsc2UKKyAJICAgIHsKKyAJ
CWlmIChzdGF0dXMgPT0gLTEpCisgICAgICAgICAgICAgICAgIHsKKyAJCSAgICBzcHJpbnRmICgK
KyAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX2Vycm9yX3RleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIkUgZW5kIG9mIGZpbGUgcmVhZGluZyBub3RpZmljYXRpb24gZm9yICVz
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmcpOworICAgICAgICAgICAgICAgICB9Cisg
CQllbHNlCisgCQl7CisgCQkgICAgc3ByaW50ZiAoCisgICAgICAgICAgICAgICAgICAgICAgICAg
cGVuZGluZ19lcnJvcl90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJFIGVycm9yIHJl
YWRpbmcgbm90aWZpY2F0aW9uIGZvciAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
KTsKKyAJCSAgICBwZW5kaW5nX2Vycm9yID0gc3RhdHVzOworIAkJfQorIAkgICAgfQorIAl9Cisg
ICAgIH0KKyAgICAgZWxzZQorICAgICB7CisgICAgICAgICBjaGFyICpjcCA9IE5VTEw7CisgICAg
ICAgICBjaGFyICpjcDAgPSBOVUxMOworICAgICAgICAgc3RydWN0IGxvZ2ZpbGVfaW5mbyAqbGk7
CisgICAgICAgICBOb2RlICpwID0gTlVMTDsKKyAKKyAgICAgICAgIGlmIChmaWxlaW5mb19saXN0
ID09IE5VTEwpCisgICAgICAgICB7CisgICAgICAgICAgICAgZmlsZWluZm9fbGlzdCA9IGdldGxp
c3QgKCk7CisgICAgICAgICB9CisgCisgICAgICAgICBwID0gZ2V0bm9kZSAoKTsKKyAgICAgICAg
IHAtPmtleSA9IHhzdHJkdXAgKGFyZyk7CisgICAgICAgICBwLT50eXBlID0gVVBEQVRFOworICAg
ICAgICAgcC0+ZGVscHJvYyA9IHVwZGF0ZV9kZWxwcm9jOworIAorICAgICAgICAgbGkgPSAoc3Ry
dWN0IGxvZ2ZpbGVfaW5mbyAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBsb2dmaWxlX2luZm8p
KTsKKyAgICAgICAgIGxpLT50eXBlID0gVF9VTktOT1dOOworICAgICAgICAgbGktPnJlcG9zaXRv
cnkgPSBOVUxMOworIAorICAgICAgICAgY3AgPSBkYXRhOworIAorICAgICAgICAgY3AwID0gY3A7
CisgICAgICAgICBjcCA9IHN0cmNociAoY3AwLCAnXHQnKTsKKyAgICAgICAgIGlmIChjcCA9PSBO
VUxMKQorICAgICAgICAgeworICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICB9Cisg
ICAgICAgICAqY3ArKyA9ICdcMCc7CisgCisgICAgICAgICBsaS0+aG9zdG5hbWUgPSB4c3RyZHVw
IChjcDApOworIAorICAgICAgICAgY3AwID0gY3A7CisgICAgICAgICBjcCA9IHN0cmNociAoY3Aw
LCAnXHQnKTsKKyAgICAgICAgIGlmIChjcCAhPSBOVUxMKQorICAgICAgICAgeworICAgICAgICAg
ICAgICpjcCA9ICdcMCc7CisgICAgICAgICB9CisgCisgICAgICAgICBsaS0+d2QgPSB4c3RyZHVw
IChjcDApOworICAgICAgICAgbGktPmVkaXRvciA9IE5VTEw7CisgCisgICAgICAgICBsaS0+dGFn
ID0gTlVMTDsKKyAgICAgICAgIGxpLT5yZXZfb2xkID0gTlVMTDsKKyAgICAgICAgIGxpLT5yZXZf
bmV3ID0gTlVMTDsKKyAKKyAgICAgICAgIHAtPmRhdGEgPSAoY2hhciAqKSBsaTsKKyAgICAgICAg
ICh2b2lkKSBhZGRub2RlIChmaWxlaW5mb19saXN0LCBwKTsKKyAgICAgfQorIAorIGVycm9yOgor
ICAgICByZXR1cm47CisgfQorIAorIHN0cnVjdCBsb2dmaWxlX2luZm8gKgorIHNlcnZlcl9nZXRm
aWxlaW5mbyAoZmlsZW5hbWUpCisgICAgIGNoYXIgKmZpbGVuYW1lOworIHsKKyAgICAgTm9kZSAq
cCA9IE5VTEw7CisgCisgICAgIHAgPSBmaW5kbm9kZSAoZmlsZWluZm9fbGlzdCwgZmlsZW5hbWUp
OworICAgICBpZiAocCAhPSBOVUxMKQorICAgICB7CisgICAgICAgICByZXR1cm4gKHN0cnVjdCBs
b2dmaWxlX2luZm8gKikgcC0+ZGF0YTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKyAgICAg
ICAgIHJldHVybiBOVUxMOworICAgICB9CisgfQorIAorIHZvaWQKKyBzZXJ2ZXJfZGVsZmlsZWlu
Zm9saXN0ICh2b2lkKQorIHsKKyAgICAgaWYgKGZpbGVpbmZvX2xpc3QgIT0gTlVMTCkKKyAgICAg
ICAgIGRlbGxpc3QgKCZmaWxlaW5mb19saXN0KTsKKyB9CisgDAogIHN0cnVjdCBub3RpZnlfbm90
ZSB7CiAgICAgIC8qIERpcmVjdG9yeSBpbiB3aGljaCB0aGlzIG5vdGlmaWNhdGlvbiBoYXBwZW5z
LiAgbWFsbG9jJ2QqLwogICAgICBjaGFyICpkaXI7CiAgCiAgICAgIC8qIG1hbGxvYydkLiAgKi8K
ICAgICAgY2hhciAqZmlsZW5hbWU7CiAgCiAgICAgIC8qIFRoZSBmb2xsb3dpbmcgdGhyZWUgYWxs
IGluIG9uZSBtYWxsb2MnZCBibG9jaywgcG9pbnRlZCB0byBieSBUWVBFLgogICAgICAgICBFYWNo
ICdcMCcgdGVybWluYXRlZC4gICovCiAgICAgIC8qICJFIiBvciAiVSIuICAqLwogICAgICBjaGFy
ICp0eXBlOwogICAgICAvKiB0aW1lK2hvc3QrZGlyICovCiAgICAgIGNoYXIgKnZhbDsKICAgICAg
Y2hhciAqd2F0Y2hlczsKKyAgICAgY2hhciAqZWRpdG9yOwogIAogICAgICBzdHJ1Y3Qgbm90aWZ5
X25vdGUgKm5leHQ7CiAgfTsKICAKICBzdGF0aWMgc3RydWN0IG5vdGlmeV9ub3RlICpub3RpZnlf
bGlzdDsKICAvKiBVc2VkIHdoaWxlIGJ1aWxkaW5nIGxpc3QsIHRvIHBvaW50IHRvIHRoZSBsYXN0
IG5vZGUgdGhhdCBhbHJlYWR5IGV4aXN0cy4gICovCiAgc3RhdGljIHN0cnVjdCBub3RpZnlfbm90
ZSAqbGFzdF9ub2RlOwogIAogIHN0YXRpYyB2b2lkIHNlcnZlX25vdGlmeSBQUk9UTyAoKGNoYXIg
KikpOwogIAogIHN0YXRpYyB2b2lkCiAgc2VydmVfbm90aWZ5IChhcmcpCiAgICAgIGNoYXIgKmFy
ZzsKICB7CiAgICAgIHN0cnVjdCBub3RpZnlfbm90ZSAqbmV3ID0gTlVMTDsKICAgICAgY2hhciAq
ZGF0YSA9IE5VTEw7CioqKioqKioqKioqKioqKgoqKiogMjAxNSwyMDUwICoqKioKLS0tIDIxNDAs
MjIwNSAtLS0tCiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQog
IAkgICAgZ290byBlcnJvcjsKICAJKmNwKysgPSAnKyc7CiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0
Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgZ290byBlcnJvcjsKICAJKmNwKysgPSAnKyc7
CiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgZ290
byBlcnJvcjsKICAJKmNwKysgPSAnXDAnOwogIAluZXctPndhdGNoZXMgPSBjcDsKICAJLyogSWYg
dGhlcmUgaXMgYW5vdGhlciB0YWIsIGlnbm9yZSBldmVyeXRoaW5nIGFmdGVyIGl0LAogIAkgICBm
b3IgZnV0dXJlIGV4cGFuc2lvbi4gICovCiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CisgCWlm
IChjcCA9PSBOVUxMKQorICAgICAgICAgeworICAgICAgICAgICAgIC8qIEZJWE1FOiBOb2VsIFlh
cCAoeWFwX25vZWxAeWFob28uY29tKSAyMDAxIE1hciAxNQorICAgICAgICAgICAgICAgIFRoaXMg
YmxvY2sgaXMgdG8gc3VwcG9ydCBvbGQgY2xpZW50cy4gIEl0IHNob3VsZCBiZQorICAgICAgICAg
ICAgICAgIHJlbW92ZWQgb25jZSBpdCdzIGRlZW1lZCB0aGF0IGFsbCBjbGllbnRzIHNlbmQgdGhl
CisgICAgICAgICAgICAgICAgZWRpdG9yIGZpZWxkLiAgSU1ITywgaXQgc2hvdWxkIGJlIHNhZmUg
dG8gcmVtb3ZlCisgICAgICAgICAgICAgICAgYnkgMjAwMyBNYXIgMTUgKGllIGluIHR3byB5ZWFy
cykuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICBuZXctPmVkaXRvciA9IGdldGNhbGxl
cigpOyAgLyogdG8gc3VwcG9ydCBvbGQgY2xpZW50cyAqLworICAgICAgICAgfQorICAgICAgICAg
ZWxzZQorIAl7CisgCSAgICAqY3ArKyA9ICdcMCc7CisgICAgICAgICAgICAgbmV3LT5lZGl0b3Ig
PSBjcDsKKyAKKyAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbm90aGVyIHRhYiwgaWdub3Jl
IGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQsCisgICAgICAgICAgICAgICAgZm9yIGZ1dHVyZSBleHBhbnNp
b24uICAqLworICAgICAgICAgICAgIGNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CisgICAgICAgICAg
ICAgaWYgKGNwICE9IE5VTEwpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAqY3Ag
PSAnXDAnOworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAvKiBsb2Igb2ZmIGV4dHJh
IHZhbCBmaWVsZHMgKi8KKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGNoYXIgKmNw
ID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAgICAgY3AgPSBzdHJjaHIgKG5ldy0+dmFsLCAnKycp
OwogIAlpZiAoY3AgIT0gTlVMTCkKICAJewogIAkgICAgKmNwID0gJ1wwJzsKICAJfQorICAgICAg
ICAgICAgIH0KKyAJfQogIAogIAluZXctPm5leHQgPSBOVUxMOwogIAogIAlpZiAobGFzdF9ub2Rl
ID09IE5VTEwpCiAgCXsKICAJICAgIG5vdGlmeV9saXN0ID0gbmV3OwogIAl9CiAgCWVsc2UKICAJ
ICAgIGxhc3Rfbm9kZS0+bmV4dCA9IG5ldzsKICAJbGFzdF9ub2RlID0gbmV3OwogICAgICB9CiAg
ICAgIHJldHVybjsKICAgIGVycm9yOgogICAgICBwZW5kaW5nX2Vycm9yID0gMDsKICAgICAgaWYg
KGFsbG9jX3BlbmRpbmcgKDgwKSkKICAJc3RyY3B5IChwZW5kaW5nX2Vycm9yX3RleHQsCioqKioq
KioqKioqKioqKgoqKiogMjA3MCwyMTAxICoqKioKLS0tIDIyMjUsMjI1NyAtLS0tCiAgICAgIGNo
YXIgKnJlcG9zOwogIAogICAgICB3aGlsZSAobm90aWZ5X2xpc3QgIT0gTlVMTCkKICAgICAgewog
IAlpZiAoIENWU19DSERJUiAobm90aWZ5X2xpc3QtPmRpcikgPCAwKQogIAl7CiAgCSAgICBlcnJv
ciAoMCwgZXJybm8sICJjYW5ub3QgY2hhbmdlIHRvICVzIiwgbm90aWZ5X2xpc3QtPmRpcik7CiAg
CSAgICByZXR1cm4gLTE7CiAgCX0KICAJcmVwb3MgPSBOYW1lX1JlcG9zaXRvcnkgKE5VTEwsIE5V
TEwpOwogIAogIAlsb2NrX2Rpcl9mb3Jfd3JpdGUgKHJlcG9zKTsKICAKICAJZmlsZWF0dHJfc3Rh
cnRkaXIgKHJlcG9zKTsKICAKICAJbm90aWZ5X2RvICgqbm90aWZ5X2xpc3QtPnR5cGUsIG5vdGlm
eV9saXN0LT5maWxlbmFtZSwgZ2V0Y2FsbGVyKCksCisgICAgICAgICAgICAgICAgICAgIG5vdGlm
eV9saXN0LT5lZGl0b3IsCiAgCQkgICBub3RpZnlfbGlzdC0+dmFsLCBub3RpZnlfbGlzdC0+d2F0
Y2hlcywgcmVwb3MpOwogIAogIAlidWZfb3V0cHV0MCAoYnVmX3RvX25ldCwgIk5vdGlmaWVkICIp
OwogIAl7CiAgCSAgICBjaGFyICpkaXIgPSBub3RpZnlfbGlzdC0+ZGlyICsgc3RybGVuIChzZXJ2
ZXJfdGVtcF9kaXIpICsgMTsKICAJICAgIGlmIChkaXJbMF0gPT0gJ1wwJykKICAJICAgICAgICBi
dWZfYXBwZW5kX2NoYXIgKGJ1Zl90b19uZXQsICcuJyk7CiAgCSAgICBlbHNlCiAgCSAgICAgICAg
YnVmX291dHB1dDAgKGJ1Zl90b19uZXQsIGRpcik7CiAgCSAgICBidWZfYXBwZW5kX2NoYXIgKGJ1
Zl90b19uZXQsICcvJyk7CiAgCSAgICBidWZfYXBwZW5kX2NoYXIgKGJ1Zl90b19uZXQsICdcbicp
OwogIAl9CiAgCWJ1Zl9vdXRwdXQwIChidWZfdG9fbmV0LCByZXBvcyk7CiAgCWJ1Zl9hcHBlbmRf
Y2hhciAoYnVmX3RvX25ldCwgJy8nKTsKICAJYnVmX291dHB1dDAgKGJ1Zl90b19uZXQsIG5vdGlm
eV9saXN0LT5maWxlbmFtZSk7CiAgCWJ1Zl9hcHBlbmRfY2hhciAoYnVmX3RvX25ldCwgJ1xuJyk7
CioqKioqKioqKioqKioqKgoqKiogNDY1MCw0NjgxICoqKioKLS0tIDQ4MDYsNDgzOCAtLS0tCiAg
ICBSRVFfTElORSgiU3RhdGljLWRpcmVjdG9yeSIsIHNlcnZlX3N0YXRpY19kaXJlY3RvcnksIDAp
LAogICAgUkVRX0xJTkUoIlN0aWNreSIsIHNlcnZlX3N0aWNreSwgMCksCiAgICBSRVFfTElORSgi
Q2hlY2tpbi1wcm9nIiwgc2VydmVfY2hlY2tpbl9wcm9nLCAwKSwKICAgIFJFUV9MSU5FKCJVcGRh
dGUtcHJvZyIsIHNlcnZlX3VwZGF0ZV9wcm9nLCAwKSwKICAgIFJFUV9MSU5FKCJFbnRyeSIsIHNl
cnZlX2VudHJ5LCBSUV9FU1NFTlRJQUwpLAogICAgUkVRX0xJTkUoIktvcHQiLCBzZXJ2ZV9rb3B0
LCAwKSwKICAgIFJFUV9MSU5FKCJDaGVja2luLXRpbWUiLCBzZXJ2ZV9jaGVja2luX3RpbWUsIDAp
LAogICAgUkVRX0xJTkUoIk1vZGlmaWVkIiwgc2VydmVfbW9kaWZpZWQsIFJRX0VTU0VOVElBTCks
CiAgICBSRVFfTElORSgiSXMtbW9kaWZpZWQiLCBzZXJ2ZV9pc19tb2RpZmllZCwgMCksCiAgCiAg
ICAvKiBUaGUgY2xpZW50IG11c3Qgc2VuZCB0aGlzIHJlcXVlc3QgdG8gaW50ZXJvcGVyYXRlIHdp
dGggQ1ZTIDEuNQogICAgICAgdGhyb3VnaCAxLjkgc2VydmVycy4gIFRoZSBzZXJ2ZXIgbXVzdCBz
dXBwb3J0IGl0IChhbHRob3VnaCBpdCBjYW4KICAgICAgIGJlIGFuZCBpcyBhIG5vb3ApIHRvIGlu
dGVyb3BlcmF0ZSB3aXRoIENWUyAxLjUgdG8gMS45IGNsaWVudHMuICAqLwogICAgUkVRX0xJTkUo
IlVzZVVuY2hhbmdlZCIsIHNlcnZlX2VuYWJsZV91bmNoYW5nZWQsIFJRX0VOQUJMRU1FIHwgUlFf
Uk9PVExFU1MpLAogIAogICAgUkVRX0xJTkUoIlVuY2hhbmdlZCIsIHNlcnZlX3VuY2hhbmdlZCwg
UlFfRVNTRU5USUFMKSwKKyAgIFJFUV9MSU5FKCJGaWxlSW5mbyIsIHNlcnZlX2ZpbGVpbmZvLCAw
KSwKICAgIFJFUV9MSU5FKCJOb3RpZnkiLCBzZXJ2ZV9ub3RpZnksIDApLAogICAgUkVRX0xJTkUo
IlF1ZXN0aW9uYWJsZSIsIHNlcnZlX3F1ZXN0aW9uYWJsZSwgMCksCiAgICBSRVFfTElORSgiQ2Fz
ZSIsIHNlcnZlX2Nhc2UsIDApLAogICAgUkVRX0xJTkUoIkFyZ3VtZW50Iiwgc2VydmVfYXJndW1l
bnQsIFJRX0VTU0VOVElBTCksCiAgICBSRVFfTElORSgiQXJndW1lbnR4Iiwgc2VydmVfYXJndW1l
bnR4LCBSUV9FU1NFTlRJQUwpLAogICAgUkVRX0xJTkUoIkdsb2JhbF9vcHRpb24iLCBzZXJ2ZV9n
bG9iYWxfb3B0aW9uLCBSUV9ST09UTEVTUyksCiAgICBSRVFfTElORSgiR3ppcC1zdHJlYW0iLCBz
ZXJ2ZV9nemlwX3N0cmVhbSwgMCksCiAgICBSRVFfTElORSgid3JhcHBlci1zZW5kbWUtcmNzT3B0
aW9ucyIsCiAgICAgICAgICAgICBzZXJ2ZV93cmFwcGVyX3NlbmRtZV9yY3Nfb3B0aW9ucywKICAg
ICAgICAgICAgIDApLAogICAgUkVRX0xJTkUoIlNldCIsIHNlcnZlX3NldCwgUlFfUk9PVExFU1Mp
LAogICNpZmRlZiBFTkNSWVBUSU9OCiAgIyAgaWZkZWYgSEFWRV9LRVJCRVJPUwogICAgUkVRX0xJ
TkUoIktlcmJlcm9zLWVuY3J5cHQiLCBzZXJ2ZV9rZXJiZXJvc19lbmNyeXB0LCAwKSwKICAjICBl
bmRpZgogICMgIGlmZGVmIEhBVkVfR1NTQVBJCkluZGV4OiBzcmMvc2VydmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3JjL3NlcnZlci5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS40LjEKZGlm
ZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuNC4xCioqKiBzcmMvc2VydmVyLmgJMjAwMS8w
My8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvc2VydmVyLmgJMjAwMS8wMy8wNiAyMjoxNjox
OQkxLjEuMS4xLjQuMQoqKioqKioqKioqKioqKioKKioqIDEwNiwxMzcgKioqKgotLS0gMTA2LDE0
MCAtLS0tCiAgCiAgLyogU2V0IG9yIGNsZWFyIGEgcGVyLWRpcmVjdG9yeSBzdGlja3kgdGFnIG9y
IGRhdGUuICAqLwogIGV4dGVybiB2b2lkIHNlcnZlcl9zZXRfc3RpY2t5IFBST1RPKChjaGFyICp1
cGRhdGVfZGlyLCBjaGFyICpyZXBvc2l0b3J5LAogIAkJCQkgICAgIGNoYXIgKnRhZywgY2hhciAq
ZGF0ZSwgaW50IG5vbmJyYW5jaCkpOwogIC8qIFNlbmQgVGVtcGxhdGUgcmVzcG9uc2UuICAqLwog
IGV4dGVybiB2b2lkIHNlcnZlcl90ZW1wbGF0ZSBQUk9UTyAoKGNoYXIgKiwgY2hhciAqKSk7CiAg
CiAgZXh0ZXJuIHZvaWQgc2VydmVyX3VwZGF0ZV9lbnRyaWVzCiAgICAgIFBST1RPKChjaGFyICpm
aWxlLCBjaGFyICp1cGRhdGVfZGlyLCBjaGFyICpyZXBvc2l0b3J5LAogIAkgICBlbnVtIHNlcnZl
cl91cGRhdGVkX2FyZzQgdXBkYXRlZCkpOwogIAogIC8qIFBvaW50ZXIgdG8gYSBtYWxsb2MnZCBz
dHJpbmcgd2hpY2ggaXMgdGhlIGRpcmVjdG9yeSB3aGljaAogICAgIHRoZSBzZXJ2ZXIgc2hvdWxk
IHByZXBlbmQgdG8gdGhlIHBhdGhuYW1lcyB3aGljaCBpdCBzZW5kcwogICAgIHRvIHRoZSBjbGll
bnQuICAqLwogIGV4dGVybiBjaGFyICpzZXJ2ZXJfZGlyOwogIAorIGV4dGVybiBzdHJ1Y3QgbG9n
ZmlsZV9pbmZvICpzZXJ2ZXJfZ2V0ZmlsZWluZm8gUFJPVE8oKGNoYXIgKikpOworIGV4dGVybiB2
b2lkIHNlcnZlcl9kZWxmaWxlaW5mb2xpc3QgUFJPVE8oKHZvaWQpKTsKKyAKICBlbnVtIHByb2dz
IHtQUk9HX0NIRUNLSU4sIFBST0dfVVBEQVRFfTsKICBleHRlcm4gdm9pZCBzZXJ2ZXJfcHJvZyBQ
Uk9UTygoY2hhciAqLCBjaGFyICosIGVudW0gcHJvZ3MpKTsKICBleHRlcm4gdm9pZCBzZXJ2ZXJf
Y2xlYW51cCBQUk9UTygoaW50IHNpZykpOwogIAogICNpZmRlZiBTRVJWRVJfRkxPV0NPTlRST0wK
ICAvKiBQYXVzZSBpZiBpdCdzIGNvbnZlbmllbnQgdG8gYXZvaWQgbWVtb3J5IGJsb3dvdXQgKi8K
ICBleHRlcm4gdm9pZCBzZXJ2ZXJfcGF1c2VfY2hlY2sgUFJPVE8oKHZvaWQpKTsKICAjZW5kaWYg
LyogU0VSVkVSX0ZMT1dDT05UUk9MICovCiAgCiAgI2lmZGVmIEFVVEhfU0VSVkVSX1NVUFBPUlQK
ICBleHRlcm4gY2hhciAqQ1ZTX1VzZXJuYW1lOwogIGV4dGVybiBpbnQgc3lzdGVtX2F1dGg7CiAg
I2VuZGlmIC8qIEFVVEhfU0VSVkVSX1NVUFBPUlQgKi8KICAKICAjZW5kaWYgLyogU0VSVkVSX1NV
UFBPUlQgKi8KICAMCkluZGV4OiBzcmMvdmVyc2lvbi5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9o
b21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy92ZXJzaW9uLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xLjQuMQpkaWZmIC1DMTYgLXcgLXIx
LjEuMS4xIC1yMS4xLjEuMS40LjEKKioqIHNyYy92ZXJzaW9uLmMJMjAwMS8wMy8wNiAxNjoyMToy
MQkxLjEuMS4xCi0tLSBzcmMvdmVyc2lvbi5jCTIwMDEvMDMvMDYgMjI6MTY6MTkJMS4xLjEuMS40
LjEKKioqKioqKioqKioqKioqCioqKiAxLDMxICoqKioKICAvKgogICAqIENvcHlyaWdodCAoYykg
MTk5NCBkYXZpZCBkIGB6b28nIHp1aG4KICAgKiBDb3B5cmlnaHQgKGMpIDE5OTQgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICogQ29weXJpZ2h0IChjKSAxOTkyLCBCcmlhbiBCZXJs
aW5lciBhbmQgSmVmZiBQb2xrCiAgICogQ29weXJpZ2h0IChjKSAxOTg5LTE5OTIsIEJyaWFuIEJl
cmxpbmVyCiAgICogCiAgICogWW91IG1heSBkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAgKiBzcGVjaWZpZWQgaW4gdGhlIFJF
QURNRSBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGlzICBDVlMgc291cmNlIGRpc3RyaWJ1dGlvbi4K
ICAgKiAKICAgKiB2ZXJzaW9uLmMgLSB0aGUgQ1ZTIHZlcnNpb24gbnVtYmVyCiAgICovCiAgCiAg
I2luY2x1ZGUgImN2cy5oIgogIAohIGNoYXIgKnZlcnNpb25fc3RyaW5nID0gIkNvbmN1cnJlbnQg
VmVyc2lvbnMgU3lzdGVtIChDVlMpIDEuMTEiOwogIAogICNpZmRlZiBDTElFTlRfU1VQUE9SVAog
ICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChjbGllbnQv
c2VydmVyKVxuIjsKICAjZWxzZQogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChjbGllbnQpXG4i
OwogICNlbmRpZgogICNlbHNlCiAgI2lmZGVmIFNFUlZFUl9TVVBQT1JUCiAgY2hhciAqY29uZmln
X3N0cmluZyA9ICIgKHNlcnZlcilcbiI7CiAgI2Vsc2UKICBjaGFyICpjb25maWdfc3RyaW5nID0g
IlxuIjsKICAjZW5kaWYKICAjZW5kaWYKICAKICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmVy
c2lvbl91c2FnZVtdID0KLS0tIDEsMzEgLS0tLQogIC8qCiAgICogQ29weXJpZ2h0IChjKSAxOTk0
IGRhdmlkIGQgYHpvbycgenVobgogICAqIENvcHlyaWdodCAoYykgMTk5NCBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4KICAgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIEJyaWFuIEJlcmxpbmVy
IGFuZCBKZWZmIFBvbGsKICAgKiBDb3B5cmlnaHQgKGMpIDE5ODktMTk5MiwgQnJpYW4gQmVybGlu
ZXIKICAgKgogICAqIFlvdSBtYXkgZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgICogc3BlY2lmaWVkIGluIHRoZSBSRUFETUUg
ZmlsZSB0aGF0IGNvbWVzIHdpdGggdGhpcyAgQ1ZTIHNvdXJjZSBkaXN0cmlidXRpb24uCiAgICoK
ICAgKiB2ZXJzaW9uLmMgLSB0aGUgQ1ZTIHZlcnNpb24gbnVtYmVyCiAgICovCiAgCiAgI2luY2x1
ZGUgImN2cy5oIgogIAohIGNoYXIgKnZlcnNpb25fc3RyaW5nID0gIkNvbmN1cnJlbnQgVmVyc2lv
bnMgU3lzdGVtIChDVlMpIDEuMTEgKG11bHRpcGxlIGVkaXRzKSI7CiAgCiAgI2lmZGVmIENMSUVO
VF9TVVBQT1JUCiAgI2lmZGVmIFNFUlZFUl9TVVBQT1JUCiAgY2hhciAqY29uZmlnX3N0cmluZyA9
ICIgKGNsaWVudC9zZXJ2ZXIpXG4iOwogICNlbHNlCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICIg
KGNsaWVudClcbiI7CiAgI2VuZGlmCiAgI2Vsc2UKICAjaWZkZWYgU0VSVkVSX1NVUFBPUlQKICBj
aGFyICpjb25maWdfc3RyaW5nID0gIiAoc2VydmVyKVxuIjsKICAjZWxzZQogIGNoYXIgKmNvbmZp
Z19zdHJpbmcgPSAiXG4iOwogICNlbmRpZgogICNlbmRpZgogIAogIHN0YXRpYyBjb25zdCBjaGFy
ICpjb25zdCB2ZXJzaW9uX3VzYWdlW10gPQoqKioqKioqKioqKioqKioKKioqIDU5LDc1ICoqKioK
ICAgICAgaWYgKGNsaWVudF9hY3RpdmUpCiAgICAgIHsKICAJKHZvaWQpIGZwdXRzICgiU2VydmVy
OiAiLCBzdGRvdXQpOwogIAlzdGFydF9zZXJ2ZXIgKCk7CiAgCWlmIChzdXBwb3J0ZWRfcmVxdWVz
dCAoInZlcnNpb24iKSkKICAJICAgIHNlbmRfdG9fc2VydmVyICgidmVyc2lvblwwMTIiLCAwKTsK
ICAJZWxzZQogIAl7CiAgCSAgICBzZW5kX3RvX3NlcnZlciAoIm5vb3BcMDEyIiwgMCk7CiAgCSAg
ICBmcHV0cyAoIih1bmtub3duKVxuIiwgc3Rkb3V0KTsKICAJfQogIAllcnIgPSBnZXRfcmVzcG9u
c2VzX2FuZF9jbG9zZSAoKTsKICAgICAgfQogICNlbmRpZgogICAgICByZXR1cm4gZXJyOwogIH0K
LSAJCi0tLSA1OSw3NCAtLS0tCg==

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: application/octet-stream; 
        name="enh-unedit_editor.diff"
Content-Disposition: attachment; filename="enh-unedit_editor.diff"
Content-transfer-encoding: base64

PyBlbmgtdW5lZGl0X2VkaXRvci5kaWZmCkluZGV4OiBzcmMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9DaGFuZ2VMb2csdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xLjEyLjEKZGlm
ZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuMTIuMQoqKiogc3JjL0NoYW5nZUxvZwkyMDAx
LzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIHNyYy9DaGFuZ2VMb2cJMjAwMS8wMy8wOCAxOToy
Mzo0NwkxLjEuMS4xLjEyLjEKKioqKioqKioqKioqKioqCioqKiAxLDE2ICoqKioKLS0tIDEsMjIg
LS0tLQorIDIwMDEtMDMtMDggIE5vZWwgWWFwICA8eWFwX25vZWxAeWFob28uY29tPgorIAorIAkq
IGVkaXQuYyAodW5lZGl0X2ZpbGVwcm9jLCB1bmVkaXQsIGVkaXRvcl9zZXQsIG5vdGlmeV9kbyk6
CisgCSJjdnMgdW5lZGl0IC1lIDxlZGl0b3I+IiBvcHRpb24gYWRkZWQgdG8gYWxsb3cgc3BlY2lm
aWNhdGlvbiBvZgorIAl3aGljaCBlZGl0b3IgdG8gdW5lZGl0LgorIAogIDIwMDAtMDktMTkgIExh
cnJ5IEpvbmVzICA8bGFycnkuam9uZXNAc2RyYy5jb20+CiAgCiAgCSogdmVyc2lvbi5jOiBWZXJz
aW9uIDEuMTEuCiAgCiAgMjAwMC0wOS0wNyAgTGFycnkgSm9uZXMgIDxsYXJyeS5qb25lc0BzZHJj
LmNvbT4KICAKICAJKiBNYWtlZmlsZS5pbjogVXNlIEBiaW5kaXJALCBAbGliZGlyQCwgQGluZm9k
aXJALCBhbmQgQG1hbmRpckAKICAJZnJvbSBhdXRvY29uZi4KICAKICAyMDAwLTA4LTIzICBMYXJy
eSBKb25lcyAgPGxhcnJ5LmpvbmVzQHNkcmMuY29tPgogIAogIAkqIG1rbW9kdWxlcy5jIChpbml0
KTogQ3JlYXRlIGFuIGVtcHR5IHZhbC10YWdzIGZpbGUgaWYgaXQgZG9lc24ndAogIAlhbHJlYWR5
IGV4aXN0IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggdXNlcnMgbm90IGhhdmluZyBzdWZmaWNpZW50
CiAgCXBlcm1pc3Npb25zIHRvIGNyZWF0ZSBpdCBsYXRlci4KICAKICAyMDAwLTA5LTA2ICBKaW0g
S2luZ2RvbiAgPGpraW5nZG9uQGRoY3AtbmV0MjAwLTg5LnN1LnZhbGludXguY29tPgpJbmRleDog
c3JjL2VkaXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9z
cmMvZWRpdC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xLjEuMS4xMi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjEyLjEKKioq
IHNyYy9lZGl0LmMJMjAwMS8wMy8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvZWRpdC5jCTIw
MDEvMDMvMDggMTk6MjM6NDcJMS4xLjEuMS4xMi4xCioqKioqKioqKioqKioqKgoqKiogNSwzNiAq
KioqCi0tLSA1LDM4IC0tLS0KICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiAgICAgYW55IGxhdGVyIHZlcnNpb24u
CiAgCiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICovCiAgCiAgI2luY2x1ZGUgImN2cy5oIgog
ICNpbmNsdWRlICJnZXRsaW5lLmgiCiAgI2luY2x1ZGUgIndhdGNoLmgiCiAgI2luY2x1ZGUgImVk
aXQuaCIKICAjaW5jbHVkZSAiZmlsZWF0dHIuaCIKICAKICBzdGF0aWMgaW50IHdhdGNoX29ub2Zm
IFBST1RPICgoaW50LCBjaGFyICoqKSk7CiAgCisgc3RhdGljIGNoYXIgKnVuZWRpdF9lZGl0b3Ig
PSBOVUxMOworIAogIHN0YXRpYyBpbnQgc2V0dGluZ19kZWZhdWx0OwogIHN0YXRpYyBpbnQgdHVy
bmluZ19vbjsKICAKICBzdGF0aWMgaW50IHNldHRpbmdfdGVkaXQ7CiAgc3RhdGljIGludCBzZXR0
aW5nX3R1bmVkaXQ7CiAgc3RhdGljIGludCBzZXR0aW5nX3Rjb21taXQ7CiAgCiAgc3RhdGljIGlu
dCBvbm9mZl9maWxlcHJvYyBQUk9UTyAoKHZvaWQgKmNhbGxlcmRhdCwgc3RydWN0IGZpbGVfaW5m
byAqZmluZm8pKTsKICAKICBzdGF0aWMgaW50CiAgb25vZmZfZmlsZXByb2MgKGNhbGxlcmRhdCwg
ZmluZm8pCiAgICAgIHZvaWQgKmNhbGxlcmRhdDsKICAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmlu
Zm87CiAgewogICAgICBmaWxlYXR0cl9zZXQgKGZpbmZvLT5maWxlLCAiX3dhdGNoZWQiLCB0dXJu
aW5nX29uID8gIiIgOiBOVUxMKTsKICAgICAgcmV0dXJuIDA7CioqKioqKioqKioqKioqKgoqKiog
NDQ1LDUzNSAqKioqCiAgCiAgICAgIGVyciArPSBzZW5kX25vdGlmaWNhdGlvbnMgKGFyZ2MsIGFy
Z3YsIGxvY2FsKTsKICAKICAgICAgcmV0dXJuIGVycjsKICB9CiAgCiAgc3RhdGljIGludCB1bmVk
aXRfZmlsZXByb2MgUFJPVE8gKCh2b2lkICpjYWxsZXJkYXQsIHN0cnVjdCBmaWxlX2luZm8gKmZp
bmZvKSk7CiAgCiAgc3RhdGljIGludAogIHVuZWRpdF9maWxlcHJvYyAoY2FsbGVyZGF0LCBmaW5m
bykKICAgICAgdm9pZCAqY2FsbGVyZGF0OwogICAgICBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbzsK
ICB7CiAgICAgIEZJTEUgKmZwOwogICAgICB0aW1lX3Qgbm93OwogICAgICBjaGFyICphc2Nub3c7
Ci0gICAgIGNoYXIgKmJhc2VmaWxlbmFtZTsKICAKICAgICAgaWYgKG5vZXhlYykKICAJcmV0dXJu
IDA7CiAgCiAgICAgIGJhc2VmaWxlbmFtZSA9IHhtYWxsb2MgKDEwICsgc2l6ZW9mIENWU0FETV9C
QVNFICsgc3RybGVuIChmaW5mby0+ZmlsZSkpOwogICAgICBzdHJjcHkgKGJhc2VmaWxlbmFtZSwg
Q1ZTQURNX0JBU0UpOwogICAgICBzdHJjYXQgKGJhc2VmaWxlbmFtZSwgIi8iKTsKICAgICAgc3Ry
Y2F0IChiYXNlZmlsZW5hbWUsIGZpbmZvLT5maWxlKTsKICAgICAgaWYgKCFpc2ZpbGUgKGJhc2Vm
aWxlbmFtZSkpCiAgICAgIHsKICAJLyogVGhpcyBmaWxlIGFwcGFyZW50bHkgd2FzIG5ldmVyIGN2
cyBlZGl0J2QgKGUuZy4gd2UgYXJlIHVuZWRpdHRpbmcKICAJICAgYSBkaXJlY3Rvcnkgd2hlcmUg
b25seSBzb21lIG9mIHRoZSBmaWxlcyB3ZXJlIGN2cyBlZGl0J2QuICAqLwogIAlmcmVlIChiYXNl
ZmlsZW5hbWUpOwogIAlyZXR1cm4gMDsKICAgICAgfQogIAogICAgICBpZiAoeGNtcCAoZmluZm8t
PmZpbGUsIGJhc2VmaWxlbmFtZSkgIT0gMCkKICAgICAgewogIAlwcmludGYgKCIlcyBoYXMgYmVl
biBtb2RpZmllZDsgcmV2ZXJ0IGNoYW5nZXM/ICIsIGZpbmZvLT5mdWxsbmFtZSk7CiAgCWlmICgh
eWVzbm8gKCkpCiAgCXsKICAJICAgIC8qICJubyIuICAqLwogIAkgICAgZnJlZSAoYmFzZWZpbGVu
YW1lKTsKICAJICAgIHJldHVybiAwOwogIAl9CiAgICAgIH0KICAgICAgcmVuYW1lX2ZpbGUgKGJh
c2VmaWxlbmFtZSwgZmluZm8tPmZpbGUpOwogICAgICBmcmVlIChiYXNlZmlsZW5hbWUpOwogIAog
ICAgICBmcCA9IG9wZW5fZmlsZSAoQ1ZTQURNX05PVElGWSwgImEiKTsKICAKICAgICAgKHZvaWQp
IHRpbWUgKCZub3cpOwogICAgICBhc2Nub3cgPSBhc2N0aW1lIChnbXRpbWUgKCZub3cpKTsKICAg
ICAgYXNjbm93WzI0XSA9ICdcMCc7CiAgICAgIGZwcmludGYgKGZwLCAiVSVzXHQlcyBHTVRcdCVz
XHQlc1x0XG4iLCBmaW5mby0+ZmlsZSwKICAJICAgICBhc2Nub3csIGhvc3RuYW1lLCBDdXJEaXIp
OwogIAogICAgICBpZiAoZmNsb3NlIChmcCkgPCAwKQogICAgICB7CiAgCWlmIChmaW5mby0+dXBk
YXRlX2RpclswXSA9PSAnXDAnKQogIAkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IGNsb3Nl
ICVzIiwgQ1ZTQURNX05PVElGWSk7CiAgCWVsc2UKICAJICAgIGVycm9yICgwLCBlcnJubywgImNh
bm5vdCBjbG9zZSAlcy8lcyIsIGZpbmZvLT51cGRhdGVfZGlyLAogIAkJICAgQ1ZTQURNX05PVElG
WSk7CiAgICAgIH0KICAKICAgICAgLyogTm93IHVwZGF0ZSB0aGUgcmV2aXNpb24gbnVtYmVyIGlu
IENWUy9FbnRyaWVzIGZyb20gQ1ZTL0Jhc2VyZXYuCiAgICAgICAgIFRoZSBiYXNpYyBpZGVhIGhl
cmUgaXMgdGhhdCB3ZSBhcmUgcmV2ZXJ0aW5nIHRvIHRoZSByZXZpc2lvbgogICAgICAgICB0aGF0
IHRoZSB1c2VyIGVkaXRlZC4gIElmIHdlIHdhbnRlZCAiY3ZzIHVwZGF0ZSIgdG8gdXBkYXRlCiAg
ICAgICAgIENWUy9CYXNlIGFzIHdlIGdvIGFsb25nIChzbyB0aGF0IGFuIHVuZWRpdCBjb3VsZCBy
ZXZlcnQgdG8gdGhlCiAgICAgICAgIGN1cnJlbnQgcmVwb3NpdG9yeSByZXZpc2lvbiksIHdlIHdv
dWxkIG5lZWQ6CiAgCiAgICAgICAgIHVwZGF0ZSAob3IgYWxsIHNlbmRfZmlsZXM/KSAoY2xpZW50
KSBuZWVkcyB0byBzZW5kIHJldmlzaW9uIGluCiAgICAgICAgIG5ldyBFbnRyeS1iYXNlIHJlcXVl
c3QuICB1cGRhdGUgKHNlcnZlci9sb2NhbCkgbmVlZHMgdG8gY2hlY2sKICAgICAgICAgcmV2aXNp
b24gYWdhaW5zdCByZXBvc2l0b3J5IGFuZCBzZW5kIG5ldyBVcGRhdGUtYmFzZSByZXNwb25zZQog
ICAgICAgICAobGlrZSBVcGRhdGUtZXhpc3RpbmcgaW4gdGhhdCB0aGUgZmlsZSBhbHJlYWR5IGV4
aXN0cy4gIFdoaWxlCiAgICAgICAgIHdlIGFyZSBhdCBpdCwgbWlnaHQgdHJ5IHRvIGNsZWFuIHVw
IHRoZSBzeW50YXggYnkgaGF2aW5nIHRoZQogICAgICAgICBtb2RlIG9ubHkgaW4gYSAiTW9kZSIg
cmVzcG9uc2UsIG5vdCBpbiB0aGUgVXBkYXRlLWJhc2UgaXRzZWxmKS4gICovCiAgICAgIHsKICAJ
Y2hhciAqYmFzZXJldjsKICAJTm9kZSAqbm9kZTsKICAJRW50bm9kZSAqZW50ZGF0YTsKICAKICAJ
YmFzZXJldiA9IGJhc2VfZ2V0IChmaW5mbyk7CiAgCW5vZGUgPSBmaW5kbm9kZV9mbiAoZmluZm8t
PmVudHJpZXMsIGZpbmZvLT5maWxlKTsKICAJLyogVGhlIGNhc2Ugd2hlcmUgbm9kZSBpcyBOVUxM
IHByb2JhYmx5IHNob3VsZCBiZSBhbiBlcnJvciBvcgogIAkgICBzb21ldGhpbmcsIGJ1dCBJIGRv
bid0IHdhbnQgdG8gdGhpbmsgYWJvdXQgaXQgdG9vIGhhcmQgcmlnaHQKICAJICAgbm93LiAgKi8K
ICAJaWYgKG5vZGUgIT0gTlVMTCkKICAJewogIAkgICAgZW50ZGF0YSA9IChFbnRub2RlICopIG5v
ZGUtPmRhdGE7CiAgCSAgICBpZiAoYmFzZXJldiA9PSBOVUxMKQogIAkgICAgewogIAkJLyogVGhp
cyBjYW4gb25seSBoYXBwZW4gaWYgdGhlIENWUy9CYXNlcmV2IGZpbGUgZ290Ci0tLSA0NDcsNTQy
IC0tLS0KICAKICAgICAgZXJyICs9IHNlbmRfbm90aWZpY2F0aW9ucyAoYXJnYywgYXJndiwgbG9j
YWwpOwogIAogICAgICByZXR1cm4gZXJyOwogIH0KICAKICBzdGF0aWMgaW50IHVuZWRpdF9maWxl
cHJvYyBQUk9UTyAoKHZvaWQgKmNhbGxlcmRhdCwgc3RydWN0IGZpbGVfaW5mbyAqZmluZm8pKTsK
ICAKICBzdGF0aWMgaW50CiAgdW5lZGl0X2ZpbGVwcm9jIChjYWxsZXJkYXQsIGZpbmZvKQogICAg
ICB2b2lkICpjYWxsZXJkYXQ7CiAgICAgIHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvOwogIHsKICAg
ICAgRklMRSAqZnA7CiAgICAgIHRpbWVfdCBub3c7CiAgICAgIGNoYXIgKmFzY25vdzsKICAKICAg
ICAgaWYgKG5vZXhlYykKICAJcmV0dXJuIDA7CiAgCisgICAgIGlmICh1bmVkaXRfZWRpdG9yID09
IE5VTEwpCisgICAgIHsKKyAgICAgICAgIGNoYXIgKmJhc2VmaWxlbmFtZSA9IE5VTEw7CisgCiAg
ICAgIGJhc2VmaWxlbmFtZSA9IHhtYWxsb2MgKDEwICsgc2l6ZW9mIENWU0FETV9CQVNFICsgc3Ry
bGVuIChmaW5mby0+ZmlsZSkpOwogICAgICBzdHJjcHkgKGJhc2VmaWxlbmFtZSwgQ1ZTQURNX0JB
U0UpOwogICAgICBzdHJjYXQgKGJhc2VmaWxlbmFtZSwgIi8iKTsKICAgICAgc3RyY2F0IChiYXNl
ZmlsZW5hbWUsIGZpbmZvLT5maWxlKTsKICAgICAgaWYgKCFpc2ZpbGUgKGJhc2VmaWxlbmFtZSkp
CiAgICAgIHsKICAJLyogVGhpcyBmaWxlIGFwcGFyZW50bHkgd2FzIG5ldmVyIGN2cyBlZGl0J2Qg
KGUuZy4gd2UgYXJlIHVuZWRpdHRpbmcKICAJICAgYSBkaXJlY3Rvcnkgd2hlcmUgb25seSBzb21l
IG9mIHRoZSBmaWxlcyB3ZXJlIGN2cyBlZGl0J2QuICAqLwogIAlmcmVlIChiYXNlZmlsZW5hbWUp
OwogIAlyZXR1cm4gMDsKICAgICAgfQogIAogICAgICBpZiAoeGNtcCAoZmluZm8tPmZpbGUsIGJh
c2VmaWxlbmFtZSkgIT0gMCkKICAgICAgewogIAlwcmludGYgKCIlcyBoYXMgYmVlbiBtb2RpZmll
ZDsgcmV2ZXJ0IGNoYW5nZXM/ICIsIGZpbmZvLT5mdWxsbmFtZSk7CiAgCWlmICgheWVzbm8gKCkp
CiAgCXsKICAJICAgIC8qICJubyIuICAqLwogIAkgICAgZnJlZSAoYmFzZWZpbGVuYW1lKTsKICAJ
ICAgIHJldHVybiAwOwogIAl9CiAgICAgIH0KICAgICAgcmVuYW1lX2ZpbGUgKGJhc2VmaWxlbmFt
ZSwgZmluZm8tPmZpbGUpOwogICAgICBmcmVlIChiYXNlZmlsZW5hbWUpOworICAgICB9CiAgCiAg
ICAgIGZwID0gb3Blbl9maWxlIChDVlNBRE1fTk9USUZZLCAiYSIpOwogIAogICAgICAodm9pZCkg
dGltZSAoJm5vdyk7CiAgICAgIGFzY25vdyA9IGFzY3RpbWUgKGdtdGltZSAoJm5vdykpOwogICAg
ICBhc2Nub3dbMjRdID0gJ1wwJzsKICAgICAgZnByaW50ZiAoZnAsICJVJXNcdCVzIEdNVFx0JXNc
dCVzXHRcbiIsIGZpbmZvLT5maWxlLAogIAkgICAgIGFzY25vdywgaG9zdG5hbWUsIEN1ckRpcik7
CiAgCiAgICAgIGlmIChmY2xvc2UgKGZwKSA8IDApCiAgICAgIHsKICAJaWYgKGZpbmZvLT51cGRh
dGVfZGlyWzBdID09ICdcMCcpCiAgCSAgICBlcnJvciAoMCwgZXJybm8sICJjYW5ub3QgY2xvc2Ug
JXMiLCBDVlNBRE1fTk9USUZZKTsKICAJZWxzZQogIAkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fu
bm90IGNsb3NlICVzLyVzIiwgZmluZm8tPnVwZGF0ZV9kaXIsCiAgCQkgICBDVlNBRE1fTk9USUZZ
KTsKICAgICAgfQogIAogICAgICAvKiBOb3cgdXBkYXRlIHRoZSByZXZpc2lvbiBudW1iZXIgaW4g
Q1ZTL0VudHJpZXMgZnJvbSBDVlMvQmFzZXJldi4KICAgICAgICAgVGhlIGJhc2ljIGlkZWEgaGVy
ZSBpcyB0aGF0IHdlIGFyZSByZXZlcnRpbmcgdG8gdGhlIHJldmlzaW9uCiAgICAgICAgIHRoYXQg
dGhlIHVzZXIgZWRpdGVkLiAgSWYgd2Ugd2FudGVkICJjdnMgdXBkYXRlIiB0byB1cGRhdGUKICAg
ICAgICAgQ1ZTL0Jhc2UgYXMgd2UgZ28gYWxvbmcgKHNvIHRoYXQgYW4gdW5lZGl0IGNvdWxkIHJl
dmVydCB0byB0aGUKICAgICAgICAgY3VycmVudCByZXBvc2l0b3J5IHJldmlzaW9uKSwgd2Ugd291
bGQgbmVlZDoKICAKICAgICAgICAgdXBkYXRlIChvciBhbGwgc2VuZF9maWxlcz8pIChjbGllbnQp
IG5lZWRzIHRvIHNlbmQgcmV2aXNpb24gaW4KICAgICAgICAgbmV3IEVudHJ5LWJhc2UgcmVxdWVz
dC4gIHVwZGF0ZSAoc2VydmVyL2xvY2FsKSBuZWVkcyB0byBjaGVjawogICAgICAgICByZXZpc2lv
biBhZ2FpbnN0IHJlcG9zaXRvcnkgYW5kIHNlbmQgbmV3IFVwZGF0ZS1iYXNlIHJlc3BvbnNlCiAg
ICAgICAgIChsaWtlIFVwZGF0ZS1leGlzdGluZyBpbiB0aGF0IHRoZSBmaWxlIGFscmVhZHkgZXhp
c3RzLiAgV2hpbGUKICAgICAgICAgd2UgYXJlIGF0IGl0LCBtaWdodCB0cnkgdG8gY2xlYW4gdXAg
dGhlIHN5bnRheCBieSBoYXZpbmcgdGhlCiAgICAgICAgIG1vZGUgb25seSBpbiBhICJNb2RlIiBy
ZXNwb25zZSwgbm90IGluIHRoZSBVcGRhdGUtYmFzZSBpdHNlbGYpLiAgKi8KKyAgICAgaWYgKHVu
ZWRpdF9lZGl0b3IgPT0gTlVMTCkKICAgICAgewogIAljaGFyICpiYXNlcmV2OwogIAlOb2RlICpu
b2RlOwogIAlFbnRub2RlICplbnRkYXRhOwogIAogIAliYXNlcmV2ID0gYmFzZV9nZXQgKGZpbmZv
KTsKICAJbm9kZSA9IGZpbmRub2RlX2ZuIChmaW5mby0+ZW50cmllcywgZmluZm8tPmZpbGUpOwog
IAkvKiBUaGUgY2FzZSB3aGVyZSBub2RlIGlzIE5VTEwgcHJvYmFibHkgc2hvdWxkIGJlIGFuIGVy
cm9yIG9yCiAgCSAgIHNvbWV0aGluZywgYnV0IEkgZG9uJ3Qgd2FudCB0byB0aGluayBhYm91dCBp
dCB0b28gaGFyZCByaWdodAogIAkgICBub3cuICAqLwogIAlpZiAobm9kZSAhPSBOVUxMKQogIAl7
CiAgCSAgICBlbnRkYXRhID0gKEVudG5vZGUgKikgbm9kZS0+ZGF0YTsKICAJICAgIGlmIChiYXNl
cmV2ID09IE5VTEwpCiAgCSAgICB7CiAgCQkvKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUg
Q1ZTL0Jhc2VyZXYgZmlsZSBnb3QKKioqKioqKioqKioqKioqCioqKiA1NTEsNjA2ICoqKioKICAJ
CXJldHVybiAwOwogIAkgICAgfQogIAkgICAgUmVnaXN0ZXIgKGZpbmZvLT5lbnRyaWVzLCBmaW5m
by0+ZmlsZSwgYmFzZXJldiwgZW50ZGF0YS0+dGltZXN0YW1wLAogIAkJICAgICAgZW50ZGF0YS0+
b3B0aW9ucywgZW50ZGF0YS0+dGFnLCBlbnRkYXRhLT5kYXRlLAogIAkJICAgICAgZW50ZGF0YS0+
Y29uZmxpY3QpOwogIAl9CiAgCWZyZWUgKGJhc2VyZXYpOwogIAliYXNlX2RlcmVnaXN0ZXIgKGZp
bmZvKTsKICAgICAgfQogIAogICAgICB4Y2htb2QgKGZpbmZvLT5maWxlLCAwKTsKICAgICAgcmV0
dXJuIDA7CiAgfQogIAogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1bmVkaXRfdXNhZ2VbXSA9
CiAgewohICAgICAiVXNhZ2U6ICVzICVzIFstbFJdIFtmaWxlcy4uLl1cbiIsCiAgICAgICItbDog
TG9jYWwgZGlyZWN0b3J5IG9ubHksIG5vdCByZWN1cnNpdmVcbiIsCiAgICAgICItUjogUHJvY2Vz
cyBkaXJlY3RvcmllcyByZWN1cnNpdmVseVxuIiwKICAgICAgIihTcGVjaWZ5IHRoZSAtLWhlbHAg
Z2xvYmFsIG9wdGlvbiBmb3IgYSBsaXN0IG9mIG90aGVyIGhlbHAgb3B0aW9ucylcbiIsCiAgICAg
IE5VTEwKICB9OwogIAogIGludAogIHVuZWRpdCAoYXJnYywgYXJndikKICAgICAgaW50IGFyZ2M7
CiAgICAgIGNoYXIgKiphcmd2OwogIHsKICAgICAgaW50IGxvY2FsID0gMDsKICAgICAgaW50IGM7
CiAgICAgIGludCBlcnI7CiAgCiAgICAgIGlmIChhcmdjID09IC0xKQogIAl1c2FnZSAodW5lZGl0
X3VzYWdlKTsKICAKICAgICAgb3B0aW5kID0gMDsKISAgICAgd2hpbGUgKChjID0gZ2V0b3B0IChh
cmdjLCBhcmd2LCAiK2xSIikpICE9IC0xKQogICAgICB7CiAgCXN3aXRjaCAoYykKICAJewogIAkg
ICAgY2FzZSAnbCc6CiAgCQlsb2NhbCA9IDE7CiAgCQlicmVhazsKICAJICAgIGNhc2UgJ1InOgog
IAkJbG9jYWwgPSAwOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlICc/JzoKICAJICAgIGRlZmF1bHQ6
CiAgCQl1c2FnZSAodW5lZGl0X3VzYWdlKTsKICAJCWJyZWFrOwogIAl9CiAgICAgIH0KICAgICAg
YXJnYyAtPSBvcHRpbmQ7CiAgICAgIGFyZ3YgKz0gb3B0aW5kOwogIAogICAgICAvKiBObyBuZWVk
IHRvIHJlYWRsb2NrIHNpbmNlIHdlIGFyZW4ndCBkb2luZyBhbnl0aGluZyB0byB0aGUKLS0tIDU1
OCw2MTcgLS0tLQogIAkJcmV0dXJuIDA7CiAgCSAgICB9CiAgCSAgICBSZWdpc3RlciAoZmluZm8t
PmVudHJpZXMsIGZpbmZvLT5maWxlLCBiYXNlcmV2LCBlbnRkYXRhLT50aW1lc3RhbXAsCiAgCQkg
ICAgICBlbnRkYXRhLT5vcHRpb25zLCBlbnRkYXRhLT50YWcsIGVudGRhdGEtPmRhdGUsCiAgCQkg
ICAgICBlbnRkYXRhLT5jb25mbGljdCk7CiAgCX0KICAJZnJlZSAoYmFzZXJldik7CiAgCWJhc2Vf
ZGVyZWdpc3RlciAoZmluZm8pOwogICAgICB9CiAgCiAgICAgIHhjaG1vZCAoZmluZm8tPmZpbGUs
IDApOwogICAgICByZXR1cm4gMDsKICB9CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVu
ZWRpdF91c2FnZVtdID0KICB7CiEgICAgICJVc2FnZTogJXMgJXMgWy1sUl0gWy1lIGVkaXRvcl0g
W2ZpbGVzLi4uXVxuIiwKICAgICAgIi1sOiBMb2NhbCBkaXJlY3Rvcnkgb25seSwgbm90IHJlY3Vy
c2l2ZVxuIiwKICAgICAgIi1SOiBQcm9jZXNzIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5XG4iLAor
ICAgICAiLWUgZWRpdG9yXHRTcGVjaWZ5IGVkaXRvclxuIiwKICAgICAgIihTcGVjaWZ5IHRoZSAt
LWhlbHAgZ2xvYmFsIG9wdGlvbiBmb3IgYSBsaXN0IG9mIG90aGVyIGhlbHAgb3B0aW9ucylcbiIs
CiAgICAgIE5VTEwKICB9OwogIAogIGludAogIHVuZWRpdCAoYXJnYywgYXJndikKICAgICAgaW50
IGFyZ2M7CiAgICAgIGNoYXIgKiphcmd2OwogIHsKICAgICAgaW50IGxvY2FsID0gMDsKICAgICAg
aW50IGM7CiAgICAgIGludCBlcnI7CiAgCiAgICAgIGlmIChhcmdjID09IC0xKQogIAl1c2FnZSAo
dW5lZGl0X3VzYWdlKTsKICAKICAgICAgb3B0aW5kID0gMDsKISAgICAgd2hpbGUgKChjID0gZ2V0
b3B0IChhcmdjLCBhcmd2LCAiK2xSZToiKSkgIT0gLTEpCiAgICAgIHsKICAJc3dpdGNoIChjKQog
IAl7CisgICAgICAgICAgICAgY2FzZSAnZSc6CisgICAgICAgICAgICAgICAgIHVuZWRpdF9lZGl0
b3IgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgIGJyZWFrOwogIAkgICAgY2FzZSAnbCc6CiAg
CQlsb2NhbCA9IDE7CiAgCQlicmVhazsKICAJICAgIGNhc2UgJ1InOgogIAkJbG9jYWwgPSAwOwog
IAkJYnJlYWs7CiAgCSAgICBjYXNlICc/JzoKICAJICAgIGRlZmF1bHQ6CiAgCQl1c2FnZSAodW5l
ZGl0X3VzYWdlKTsKICAJCWJyZWFrOwogIAl9CiAgICAgIH0KICAgICAgYXJnYyAtPSBvcHRpbmQ7
CiAgICAgIGFyZ3YgKz0gb3B0aW5kOwogIAogICAgICAvKiBObyBuZWVkIHRvIHJlYWRsb2NrIHNp
bmNlIHdlIGFyZW4ndCBkb2luZyBhbnl0aGluZyB0byB0aGUKKioqKioqKioqKioqKioqCioqKiA2
MjksNjgxICoqKioKICAgICAgc3RyY2F0IChiYXNlLCBmaWxlKTsKICAgICAgaWYgKHVubGlua19m
aWxlIChiYXNlKSA8IDAgJiYgISBleGlzdGVuY2VfZXJyb3IgKGVycm5vKSkKICAJZXJyb3IgKDAs
IGVycm5vLCAiY2Fubm90IHJlbW92ZSAlcyIsIGZpbGUpOwogICAgICBmcmVlIChiYXNlKTsKICB9
CiAgCiAgDAogIHZvaWQKICBlZGl0b3Jfc2V0IChmaWxlbmFtZSwgZWRpdG9yLCB2YWwpCiAgICAg
IGNoYXIgKmZpbGVuYW1lOwogICAgICBjaGFyICplZGl0b3I7CiAgICAgIGNoYXIgKnZhbDsKICB7
CiAgICAgIGNoYXIgKmVkbGlzdDsKICAgICAgY2hhciAqbmV3bGlzdDsKICAKICAgICAgZWRsaXN0
ID0gZmlsZWF0dHJfZ2V0MCAoZmlsZW5hbWUsICJfZWRpdG9ycyIpOwogICAgICBuZXdsaXN0ID0g
ZmlsZWF0dHJfbW9kaWZ5IChlZGxpc3QsIGVkaXRvciwgdmFsLCAnPicsICcsJyk7CiAgICAgIC8q
IElmIHRoZSBhdHRyaWJ1dGVzIGlzIHVuY2hhbmdlZCwgZG9uJ3QgcmV3cml0ZSB0aGUgYXR0cmli
dXRlIGZpbGUuICAqLwogICAgICBpZiAoISgoZWRsaXN0ID09IE5VTEwgJiYgbmV3bGlzdCA9PSBO
VUxMKQogIAkgIHx8IChlZGxpc3QgIT0gTlVMTAogIAkgICAgICAmJiBuZXdsaXN0ICE9IE5VTEwK
ICAJICAgICAgJiYgc3RyY21wIChlZGxpc3QsIG5ld2xpc3QpID09IDApKSkKICAJZmlsZWF0dHJf
c2V0IChmaWxlbmFtZSwgIl9lZGl0b3JzIiwgbmV3bGlzdCk7CiAgICAgIGlmIChlZGxpc3QgIT0g
TlVMTCkKICAJZnJlZSAoZWRsaXN0KTsKICAgICAgaWYgKG5ld2xpc3QgIT0gTlVMTCkKICAJZnJl
ZSAobmV3bGlzdCk7CiAgfQogIAogIHN0cnVjdCBub3RpZnlfcHJvY19hcmdzIHsKICAgICAgLyog
V2hhdCBraW5kIG9mIG5vdGlmaWNhdGlvbiwgImVkaXQiLCAidGVkaXQiLCBldGMuICAqLwogICAg
ICBjaGFyICp0eXBlOwogICAgICAvKiBVc2VyIHdobyBpcyBydW5uaW5nIHRoZSBjb21tYW5kIHdo
aWNoIGNhdXNlcyBub3RpZmljYXRpb24uICAqLwohICAgICBjaGFyICp3aG87CiAgICAgIC8qIFVz
ZXIgdG8gYmUgbm90aWZpZWQuICAqLwogICAgICBjaGFyICpub3RpZnllZTsKICAgICAgLyogRmls
ZS4gICovCiAgICAgIGNoYXIgKmZpbGU7CiAgfTsKICAKICAvKiBQYXNzIGFzIGEgc3RhdGljIHVu
dGlsIHdlIGdldCBhcm91bmQgdG8gZml4aW5nIFBhcnNlX0luZm8gdG8gcGFzcyBhbG9uZwogICAg
IGEgdm9pZCAqIHdoZXJlIHdlIGNhbiBzdGFzaCBpdC4gICovCiAgc3RhdGljIHN0cnVjdCBub3Rp
ZnlfcHJvY19hcmdzICpub3RpZnlfYXJnczsKICAKICBzdGF0aWMgaW50IG5vdGlmeV9wcm9jIFBS
T1RPICgoY2hhciAqcmVwb3NpdG9yeSwgY2hhciAqZmlsdGVyKSk7CiAgCiAgc3RhdGljIGludAog
IG5vdGlmeV9wcm9jIChyZXBvc2l0b3J5LCBmaWx0ZXIpCiAgICAgIGNoYXIgKnJlcG9zaXRvcnk7
CiAgICAgIGNoYXIgKmZpbHRlcjsKICB7CiAgICAgIEZJTEUgKnBpcGVmcDsKLS0tIDY0MCw2OTkg
LS0tLQogICAgICBzdHJjYXQgKGJhc2UsIGZpbGUpOwogICAgICBpZiAodW5saW5rX2ZpbGUgKGJh
c2UpIDwgMCAmJiAhIGV4aXN0ZW5jZV9lcnJvciAoZXJybm8pKQogIAllcnJvciAoMCwgZXJybm8s
ICJjYW5ub3QgcmVtb3ZlICVzIiwgZmlsZSk7CiAgICAgIGZyZWUgKGJhc2UpOwogIH0KICAKICAM
CiAgdm9pZAogIGVkaXRvcl9zZXQgKGZpbGVuYW1lLCBlZGl0b3IsIHZhbCkKICAgICAgY2hhciAq
ZmlsZW5hbWU7CiAgICAgIGNoYXIgKmVkaXRvcjsKICAgICAgY2hhciAqdmFsOwogIHsKICAgICAg
Y2hhciAqZWRsaXN0OwogICAgICBjaGFyICpuZXdsaXN0OwogIAorICAgICBpZiAodW5lZGl0X2Vk
aXRvciAhPSBOVUxMKQorICAgICB7CisgICAgICAgICBlZGl0b3IgPSB1bmVkaXRfZWRpdG9yOwor
ICAgICB9CisgCiAgICAgIGVkbGlzdCA9IGZpbGVhdHRyX2dldDAgKGZpbGVuYW1lLCAiX2VkaXRv
cnMiKTsKICAgICAgbmV3bGlzdCA9IGZpbGVhdHRyX21vZGlmeSAoZWRsaXN0LCBlZGl0b3IsIHZh
bCwgJz4nLCAnLCcpOwogICAgICAvKiBJZiB0aGUgYXR0cmlidXRlcyBpcyB1bmNoYW5nZWQsIGRv
bid0IHJld3JpdGUgdGhlIGF0dHJpYnV0ZSBmaWxlLiAgKi8KICAgICAgaWYgKCEoKGVkbGlzdCA9
PSBOVUxMICYmIG5ld2xpc3QgPT0gTlVMTCkKICAJICB8fCAoZWRsaXN0ICE9IE5VTEwKICAJICAg
ICAgJiYgbmV3bGlzdCAhPSBOVUxMCiAgCSAgICAgICYmIHN0cmNtcCAoZWRsaXN0LCBuZXdsaXN0
KSA9PSAwKSkpCiAgCWZpbGVhdHRyX3NldCAoZmlsZW5hbWUsICJfZWRpdG9ycyIsIG5ld2xpc3Qp
OwogICAgICBpZiAoZWRsaXN0ICE9IE5VTEwpCiAgCWZyZWUgKGVkbGlzdCk7CiAgICAgIGlmIChu
ZXdsaXN0ICE9IE5VTEwpCiAgCWZyZWUgKG5ld2xpc3QpOwogIH0KICAKICBzdHJ1Y3Qgbm90aWZ5
X3Byb2NfYXJncyB7CiAgICAgIC8qIFdoYXQga2luZCBvZiBub3RpZmljYXRpb24sICJlZGl0Iiwg
InRlZGl0IiwgZXRjLiAgKi8KICAgICAgY2hhciAqdHlwZTsKICAgICAgLyogVXNlciB3aG8gaXMg
cnVubmluZyB0aGUgY29tbWFuZCB3aGljaCBjYXVzZXMgbm90aWZpY2F0aW9uLiAgKi8KISAgICAg
Y2hhciAqbm90aWZpZXI7CiAgICAgIC8qIFVzZXIgdG8gYmUgbm90aWZpZWQuICAqLwogICAgICBj
aGFyICpub3RpZnllZTsKKyAgICAgLyogRWRpdG9yIGFmZmVjdGVkICovCisgICAgIGNoYXIgKmVk
aXRvcjsKICAgICAgLyogRmlsZS4gICovCiAgICAgIGNoYXIgKmZpbGU7CiAgfTsKICAKICAvKiBQ
YXNzIGFzIGEgc3RhdGljIHVudGlsIHdlIGdldCBhcm91bmQgdG8gZml4aW5nIFBhcnNlX0luZm8g
dG8gcGFzcyBhbG9uZwogICAgIGEgdm9pZCAqIHdoZXJlIHdlIGNhbiBzdGFzaCBpdC4gICovCiAg
c3RhdGljIHN0cnVjdCBub3RpZnlfcHJvY19hcmdzICpub3RpZnlfYXJnczsKICAKICBzdGF0aWMg
aW50IG5vdGlmeV9wcm9jIFBST1RPICgoY2hhciAqcmVwb3NpdG9yeSwgY2hhciAqZmlsdGVyKSk7
CiAgCiAgc3RhdGljIGludAogIG5vdGlmeV9wcm9jIChyZXBvc2l0b3J5LCBmaWx0ZXIpCiAgICAg
IGNoYXIgKnJlcG9zaXRvcnk7CiAgICAgIGNoYXIgKmZpbHRlcjsKICB7CiAgICAgIEZJTEUgKnBp
cGVmcDsKKioqKioqKioqKioqKioqCioqKiA3MTcsNzQ5ICoqKioKICAgICAgewogIAlmcmVlIChw
cm9nKTsKICAJcmV0dXJuIDE7CiAgICAgIH0KICAKICAgICAgcGlwZWZwID0gcnVuX3BvcGVuIChl
eHBhbmRlZF9wcm9nLCAidyIpOwogICAgICBpZiAocGlwZWZwID09IE5VTEwpCiAgICAgIHsKICAJ
ZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IHdyaXRlIGVudHJ5IHRvIG5vdGlmeSBmaWx0ZXI6ICVz
IiwgcHJvZyk7CiAgCWZyZWUgKHByb2cpOwogIAlmcmVlIChleHBhbmRlZF9wcm9nKTsKICAJcmV0
dXJuIDE7CiAgICAgIH0KICAKICAgICAgZnByaW50ZiAocGlwZWZwLCAiJXMgJXNcbi0tLVxuIiwg
c3JlcG9zLCBhcmdzLT5maWxlKTsKICAgICAgZnByaW50ZiAocGlwZWZwLCAiVHJpZ2dlcmVkICVz
IHdhdGNoIG9uICVzXG4iLCBhcmdzLT50eXBlLCByZXBvc2l0b3J5KTsKISAgICAgZnByaW50ZiAo
cGlwZWZwLCAiQnkgJXNcbiIsIGFyZ3MtPndobyk7CiAgCiAgICAgIC8qIExvdHMgbW9yZSBwb3Rl
bnRpYWxseSB1c2VmdWwgaW5mb3JtYXRpb24gd2UgY291bGQgYWRkIGhlcmU7IHNlZQogICAgICAg
ICBsb2dmaWxlX3dyaXRlIGZvciBpbnNwaXJhdGlvbi4gICovCiAgCiAgICAgIGZyZWUgKHByb2cp
OwogICAgICBmcmVlIChleHBhbmRlZF9wcm9nKTsKICAgICAgcmV0dXJuIChwY2xvc2UgKHBpcGVm
cCkpOwogIH0KICAKICAvKiBGSVhNRTogdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBhIHdheSB0
byByZXBvcnQgd2hldGhlciB0aGVyZSB3YXMKICAgICBhbiBlcnJvciBzbyB0aGF0IHNlcnZlci5j
IGNhbiBrbm93IHdoZXRoZXIgdG8gcmVwb3J0IE5vdGlmaWVkIGJhY2sKICAgICB0byB0aGUgY2xp
ZW50LiAgKi8KICB2b2lkCiAgbm90aWZ5X2RvICh0eXBlLCBmaWxlbmFtZSwgd2hvLCB2YWwsIHdh
dGNoZXMsIHJlcG9zaXRvcnkpCiAgICAgIGludCB0eXBlOwogICAgICBjaGFyICpmaWxlbmFtZTsK
LS0tIDczNSw3NzIgLS0tLQogICAgICB7CiAgCWZyZWUgKHByb2cpOwogIAlyZXR1cm4gMTsKICAg
ICAgfQogIAogICAgICBwaXBlZnAgPSBydW5fcG9wZW4gKGV4cGFuZGVkX3Byb2csICJ3Iik7CiAg
ICAgIGlmIChwaXBlZnAgPT0gTlVMTCkKICAgICAgewogIAllcnJvciAoMCwgZXJybm8sICJjYW5u
b3Qgd3JpdGUgZW50cnkgdG8gbm90aWZ5IGZpbHRlcjogJXMiLCBwcm9nKTsKICAJZnJlZSAocHJv
Zyk7CiAgCWZyZWUgKGV4cGFuZGVkX3Byb2cpOwogIAlyZXR1cm4gMTsKICAgICAgfQogIAogICAg
ICBmcHJpbnRmIChwaXBlZnAsICIlcyAlc1xuLS0tXG4iLCBzcmVwb3MsIGFyZ3MtPmZpbGUpOwog
ICAgICBmcHJpbnRmIChwaXBlZnAsICJUcmlnZ2VyZWQgJXMgd2F0Y2ggb24gJXNcbiIsIGFyZ3Mt
PnR5cGUsIHJlcG9zaXRvcnkpOwohICAgICBmcHJpbnRmIChwaXBlZnAsICJCeSAlc1xuIiwgYXJn
cy0+bm90aWZpZXIpOwohIAohICAgICBpZihhcmdzLT5lZGl0b3IgIT0gTlVMTCAmJiBzdHJjbXAo
YXJncy0+ZWRpdG9yLCAiIikgIT0gMCkKISAgICAgewohICAgICAgICAgZnByaW50ZiAocGlwZWZw
LCAiRm9yICVzXG4iLCBhcmdzLT5lZGl0b3IpOwohICAgICB9CiAgCiAgICAgIC8qIExvdHMgbW9y
ZSBwb3RlbnRpYWxseSB1c2VmdWwgaW5mb3JtYXRpb24gd2UgY291bGQgYWRkIGhlcmU7IHNlZQog
ICAgICAgICBsb2dmaWxlX3dyaXRlIGZvciBpbnNwaXJhdGlvbi4gICovCiAgCiAgICAgIGZyZWUg
KHByb2cpOwogICAgICBmcmVlIChleHBhbmRlZF9wcm9nKTsKICAgICAgcmV0dXJuIChwY2xvc2Ug
KHBpcGVmcCkpOwogIH0KICAKICAvKiBGSVhNRTogdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBh
IHdheSB0byByZXBvcnQgd2hldGhlciB0aGVyZSB3YXMKICAgICBhbiBlcnJvciBzbyB0aGF0IHNl
cnZlci5jIGNhbiBrbm93IHdoZXRoZXIgdG8gcmVwb3J0IE5vdGlmaWVkIGJhY2sKICAgICB0byB0
aGUgY2xpZW50LiAgKi8KICB2b2lkCiAgbm90aWZ5X2RvICh0eXBlLCBmaWxlbmFtZSwgd2hvLCB2
YWwsIHdhdGNoZXMsIHJlcG9zaXRvcnkpCiAgICAgIGludCB0eXBlOwogICAgICBjaGFyICpmaWxl
bmFtZTsKKioqKioqKioqKioqKioqCioqKiA5MDgsOTQwICoqKioKICAJCWlmIChmY2xvc2UgKGZw
KSA8IDApCiAgCQkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IGNsb3NlICVzIiwgdXNlcnNu
YW1lKTsKICAJICAgIH0KICAJICAgIGZyZWUgKHVzZXJzbmFtZSk7CiAgCSAgICBpZiAobGluZSAh
PSBOVUxMKQogIAkJZnJlZSAobGluZSk7CiAgCiAgCSAgICBpZiAoYXJncy5ub3RpZnllZSA9PSBO
VUxMKQogIAkgICAgewogIAkJYXJncy5ub3RpZnllZSA9IHhtYWxsb2MgKGVuZHAgLSBwICsgMSk7
CiAgCQlzdHJuY3B5IChhcmdzLm5vdGlmeWVlLCBwLCBlbmRwIC0gcCk7CiAgCQlhcmdzLm5vdGlm
eWVlW2VuZHAgLSBwXSA9ICdcMCc7CiAgCSAgICB9CiAgCiAgCSAgICBub3RpZnlfYXJncyA9ICZh
cmdzOwogIAkgICAgYXJncy50eXBlID0gbm90aWY7CiEgCSAgICBhcmdzLndobyA9IHdobzsKICAJ
ICAgIGFyZ3MuZmlsZSA9IGZpbGVuYW1lOwogIAogIAkgICAgKHZvaWQpIFBhcnNlX0luZm8gKENW
U1JPT1RBRE1fTk9USUZZLCByZXBvc2l0b3J5LCBub3RpZnlfcHJvYywgMSk7CiAgCSAgICBmcmVl
IChhcmdzLm5vdGlmeWVlKTsKICAJfQogIAogIAlwID0gbmV4dHA7CiAgICAgIH0KICAgICAgaWYg
KHdhdGNoZXJzICE9IE5VTEwpCiAgCWZyZWUgKHdhdGNoZXJzKTsKICAKICAgICAgc3dpdGNoICh0
eXBlKQogICAgICB7CiAgCWNhc2UgJ0UnOgogIAkgICAgaWYgKCp3YXRjaGVzID09ICdFJykKICAJ
ICAgIHsKLS0tIDkzMSw5NjQgLS0tLQogIAkJaWYgKGZjbG9zZSAoZnApIDwgMCkKICAJCSAgICBl
cnJvciAoMCwgZXJybm8sICJjYW5ub3QgY2xvc2UgJXMiLCB1c2Vyc25hbWUpOwogIAkgICAgfQog
IAkgICAgZnJlZSAodXNlcnNuYW1lKTsKICAJICAgIGlmIChsaW5lICE9IE5VTEwpCiAgCQlmcmVl
IChsaW5lKTsKICAKICAJICAgIGlmIChhcmdzLm5vdGlmeWVlID09IE5VTEwpCiAgCSAgICB7CiAg
CQlhcmdzLm5vdGlmeWVlID0geG1hbGxvYyAoZW5kcCAtIHAgKyAxKTsKICAJCXN0cm5jcHkgKGFy
Z3Mubm90aWZ5ZWUsIHAsIGVuZHAgLSBwKTsKICAJCWFyZ3Mubm90aWZ5ZWVbZW5kcCAtIHBdID0g
J1wwJzsKICAJICAgIH0KICAKICAJICAgIG5vdGlmeV9hcmdzID0gJmFyZ3M7CiAgCSAgICBhcmdz
LnR5cGUgPSBub3RpZjsKISAJICAgIGFyZ3Mubm90aWZpZXIgPSB3aG87CiEgICAgICAgICAgICAg
YXJncy5lZGl0b3IgPSB1bmVkaXRfZWRpdG9yOwogIAkgICAgYXJncy5maWxlID0gZmlsZW5hbWU7
CiAgCiAgCSAgICAodm9pZCkgUGFyc2VfSW5mbyAoQ1ZTUk9PVEFETV9OT1RJRlksIHJlcG9zaXRv
cnksIG5vdGlmeV9wcm9jLCAxKTsKICAJICAgIGZyZWUgKGFyZ3Mubm90aWZ5ZWUpOwogIAl9CiAg
CiAgCXAgPSBuZXh0cDsKICAgICAgfQogICAgICBpZiAod2F0Y2hlcnMgIT0gTlVMTCkKICAJZnJl
ZSAod2F0Y2hlcnMpOwogIAogICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgIHsKICAJY2FzZSAnRSc6
CiAgCSAgICBpZiAoKndhdGNoZXMgPT0gJ0UnKQogIAkgICAgewpJbmRleDogc3JjL3ZlcnNpb24u
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMvdmVyc2lv
bi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
LjEuMS4xMi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjEyLjEKKioqIHNyYy92
ZXJzaW9uLmMJMjAwMS8wMy8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvdmVyc2lvbi5jCTIw
MDEvMDMvMDggMTk6MjM6NDcJMS4xLjEuMS4xMi4xCioqKioqKioqKioqKioqKgoqKiogMSwzMSAq
KioqCiAgLyoKICAgKiBDb3B5cmlnaHQgKGMpIDE5OTQgZGF2aWQgZCBgem9vJyB6dWhuCiAgICog
Q29weXJpZ2h0IChjKSAxOTk0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAqIENv
cHlyaWdodCAoYykgMTk5MiwgQnJpYW4gQmVybGluZXIgYW5kIEplZmYgUG9sawogICAqIENvcHly
aWdodCAoYykgMTk4OS0xOTkyLCBCcmlhbiBCZXJsaW5lcgogICAqIAogICAqIFlvdSBtYXkgZGlz
dHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzCiAgICogc3BlY2lmaWVkIGluIHRoZSBSRUFETUUgZmlsZSB0aGF0IGNvbWVzIHdpdGggdGhp
cyAgQ1ZTIHNvdXJjZSBkaXN0cmlidXRpb24uCiAgICogCiAgICogdmVyc2lvbi5jIC0gdGhlIENW
UyB2ZXJzaW9uIG51bWJlcgogICAqLwogIAogICNpbmNsdWRlICJjdnMuaCIKICAKISBjaGFyICp2
ZXJzaW9uX3N0cmluZyA9ICJDb25jdXJyZW50IFZlcnNpb25zIFN5c3RlbSAoQ1ZTKSAxLjExIjsK
ICAKICAjaWZkZWYgQ0xJRU5UX1NVUFBPUlQKICAjaWZkZWYgU0VSVkVSX1NVUFBPUlQKICBjaGFy
ICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50L3NlcnZlcilcbiI7CiAgI2Vsc2UKICBjaGFyICpj
b25maWdfc3RyaW5nID0gIiAoY2xpZW50KVxuIjsKICAjZW5kaWYKICAjZWxzZQogICNpZmRlZiBT
RVJWRVJfU1VQUE9SVAogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChzZXJ2ZXIpXG4iOwogICNl
bHNlCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICJcbiI7CiAgI2VuZGlmCiAgI2VuZGlmCiAgCiAg
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZlcnNpb25fdXNhZ2VbXSA9Ci0tLSAxLDMxIC0tLS0K
ICAvKgogICAqIENvcHlyaWdodCAoYykgMTk5NCBkYXZpZCBkIGB6b28nIHp1aG4KICAgKiBDb3B5
cmlnaHQgKGMpIDE5OTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICogQ29weXJp
Z2h0IChjKSAxOTkyLCBCcmlhbiBCZXJsaW5lciBhbmQgSmVmZiBQb2xrCiAgICogQ29weXJpZ2h0
IChjKSAxOTg5LTE5OTIsIEJyaWFuIEJlcmxpbmVyCiAgICoKICAgKiBZb3UgbWF5IGRpc3RyaWJ1
dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwog
ICAqIHNwZWNpZmllZCBpbiB0aGUgUkVBRE1FIGZpbGUgdGhhdCBjb21lcyB3aXRoIHRoaXMgIENW
UyBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICAqCiAgICogdmVyc2lvbi5jIC0gdGhlIENWUyB2ZXJz
aW9uIG51bWJlcgogICAqLwogIAogICNpbmNsdWRlICJjdnMuaCIKICAKISBjaGFyICp2ZXJzaW9u
X3N0cmluZyA9ICJDb25jdXJyZW50IFZlcnNpb25zIFN5c3RlbSAoQ1ZTKSAxLjExICh1bmVkaXQg
ZWRpdG9yKSI7CiAgCiAgI2lmZGVmIENMSUVOVF9TVVBQT1JUCiAgI2lmZGVmIFNFUlZFUl9TVVBQ
T1JUCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICIgKGNsaWVudC9zZXJ2ZXIpXG4iOwogICNlbHNl
CiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICIgKGNsaWVudClcbiI7CiAgI2VuZGlmCiAgI2Vsc2UK
ICAjaWZkZWYgU0VSVkVSX1NVUFBPUlQKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoc2VydmVy
KVxuIjsKICAjZWxzZQogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiXG4iOwogICNlbmRpZgogICNl
bmRpZgogIAogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2ZXJzaW9uX3VzYWdlW10gPQoqKioq
KioqKioqKioqKioKKioqIDU5LDc1ICoqKioKICAgICAgaWYgKGNsaWVudF9hY3RpdmUpCiAgICAg
IHsKICAJKHZvaWQpIGZwdXRzICgiU2VydmVyOiAiLCBzdGRvdXQpOwogIAlzdGFydF9zZXJ2ZXIg
KCk7CiAgCWlmIChzdXBwb3J0ZWRfcmVxdWVzdCAoInZlcnNpb24iKSkKICAJICAgIHNlbmRfdG9f
c2VydmVyICgidmVyc2lvblwwMTIiLCAwKTsKICAJZWxzZQogIAl7CiAgCSAgICBzZW5kX3RvX3Nl
cnZlciAoIm5vb3BcMDEyIiwgMCk7CiAgCSAgICBmcHV0cyAoIih1bmtub3duKVxuIiwgc3Rkb3V0
KTsKICAJfQogIAllcnIgPSBnZXRfcmVzcG9uc2VzX2FuZF9jbG9zZSAoKTsKICAgICAgfQogICNl
bmRpZgogICAgICByZXR1cm4gZXJyOwogIH0KLSAJCi0tLSA1OSw3NCAtLS0tCg==

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: application/octet-stream; 
        name="enh-reservations.diff"
Content-Disposition: attachment; filename="enh-reservations.diff"
Content-transfer-encoding: base64

PyBlbmgtcmVzZXJ2YXRpb25zLmRpZmYKPyBzcmMvZWRpdC5jLTAKPyB2bXMvTWFrZWZpbGUKSW5k
ZXg6IHNyYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9v
dC9jdnMvc3JjL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMS4xLjEuMi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4x
LjIuMQoqKiogc3JjL0NoYW5nZUxvZwkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIHNy
Yy9DaGFuZ2VMb2cJMjAwMS8wMy8wNyAyMzowMTozMgkxLjEuMS4xLjIuMQoqKioqKioqKioqKioq
KioKKioqIDEsMTYgKioqKgotLS0gMSwyNyAtLS0tCisgMjAwMS0wMy0wNyAgTm9lbCBZYXAgPHlh
cF9ub2VsQHlhaG9vLmNvbT4KKyAKKyAJKiBjbGllbnQuYyAodG9fc2VydmVyX2J1ZmZlcl9mbHVz
aCwgZnJvbV9zZXJ2ZXJfYnVmZmVyX3JlYWQpOiBjcmVhdGVkCisgCWZ1bmN0aW9ucy4KKyAKKyAJ
KiBjb21taXQuYyAoY29tbWl0LCBjaGVja19maWxlcHJvYyk6ICItYyIgb3B0aW9uIGFkZGVkIHRv
IGNoZWNrIGZvciB2YWxpZAorIAllZGl0LgorIAorIAkqIGVkaXQuYyAoZWRpdG9yc19vdXRwdXQs
IGNoZWNrX2ZpbGVwcm9jLCBjaGVja19lZGl0cywgZWRpdCk6ICItYyIgb3B0aW9uCisgCWFkZGVk
IHRvIGNoZWNrIGZvciBleGlzdGluZyBlZGl0b3JzLiAgIi1mIiBvcHRpb24gYWRkZWQgdG8gZm9y
Y2UgZWRpdC4KKyAKICAyMDAwLTA5LTE5ICBMYXJyeSBKb25lcyAgPGxhcnJ5LmpvbmVzQHNkcmMu
Y29tPgogIAogIAkqIHZlcnNpb24uYzogVmVyc2lvbiAxLjExLgogIAogIDIwMDAtMDktMDcgIExh
cnJ5IEpvbmVzICA8bGFycnkuam9uZXNAc2RyYy5jb20+CiAgCiAgCSogTWFrZWZpbGUuaW46IFVz
ZSBAYmluZGlyQCwgQGxpYmRpckAsIEBpbmZvZGlyQCwgYW5kIEBtYW5kaXJACiAgCWZyb20gYXV0
b2NvbmYuCiAgCiAgMjAwMC0wOC0yMyAgTGFycnkgSm9uZXMgIDxsYXJyeS5qb25lc0BzZHJjLmNv
bT4KICAKICAJKiBta21vZHVsZXMuYyAoaW5pdCk6IENyZWF0ZSBhbiBlbXB0eSB2YWwtdGFncyBm
aWxlIGlmIGl0IGRvZXNuJ3QKICAJYWxyZWFkeSBleGlzdCB0byBhdm9pZCBwcm9ibGVtcyB3aXRo
IHVzZXJzIG5vdCBoYXZpbmcgc3VmZmljaWVudAogIAlwZXJtaXNzaW9ucyB0byBjcmVhdGUgaXQg
bGF0ZXIuCiAgCiAgMjAwMC0wOS0wNiAgSmltIEtpbmdkb24gIDxqa2luZ2RvbkBkaGNwLW5ldDIw
MC04OS5zdS52YWxpbnV4LmNvbT4KSW5kZXg6IHNyYy9jbGllbnQuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMvY2xpZW50LmMsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xLjIuMQpkaWZmIC1DMTYg
LXcgLXIxLjEuMS4xIC1yMS4xLjEuMS4yLjEKKioqIHNyYy9jbGllbnQuYwkyMDAxLzAzLzA2IDE2
OjIxOjIxCTEuMS4xLjEKLS0tIHNyYy9jbGllbnQuYwkyMDAxLzAzLzA3IDIzOjAxOjMyCTEuMS4x
LjEuMi4xCioqKioqKioqKioqKioqKgoqKiogNTgyMSw1ODM5ICoqKioKLS0tIDU4MjEsNTg1MyAt
LS0tCiAgY2xpZW50X3NlbmRkYXRlIChkYXRlKQogICAgICBjb25zdCBjaGFyICpkYXRlOwogIHsK
ICAgICAgY2hhciBidWZbTUFYREFURUxFTl07CiAgCiAgICAgIGRhdGVfdG9faW50ZXJuZXQgKGJ1
ZiwgKGNoYXIgKilkYXRlKTsKICAgICAgb3B0aW9uX3dpdGhfYXJnICgiLUQiLCBidWYpOwogIH0K
ICAMCiAgdm9pZAogIHNlbmRfaW5pdF9jb21tYW5kICgpCiAgewogICAgICAvKiBUaGlzIGlzIGhl
cmUgYmVjYXVzZSB3ZSBuZWVkIHRoZSBDVlNyb290X2RpcmVjdG9yeSB2YXJpYWJsZS4gICovCiAg
ICAgIHNlbmRfdG9fc2VydmVyICgiaW5pdCAiLCAwKTsKICAgICAgc2VuZF90b19zZXJ2ZXIgKENW
U3Jvb3RfZGlyZWN0b3J5LCAwKTsKICAgICAgc2VuZF90b19zZXJ2ZXIgKCJcMDEyIiwgMCk7Cisg
fQorIAorIHZvaWQKKyB0b19zZXJ2ZXJfYnVmZmVyX2ZsdXNoICh2b2lkKQorIHsKKyAgICAgYnVm
X2ZsdXNoICh0b19zZXJ2ZXIsIDEpOworIH0KKyAKKyB2b2lkCisgZnJvbV9zZXJ2ZXJfYnVmZmVy
X3JlYWQgKGxpbmUsIGxlbnApCisgICAgIGNoYXIgKipsaW5lOworICAgICBpbnQgKmxlbnA7Cisg
eworICAgICBidWZfcmVhZF9saW5lIChmcm9tX3NlcnZlciwgbGluZSwgbGVucCk7CiAgfQogIAog
ICNlbmRpZiAvKiBDTElFTlRfU1VQUE9SVCAqLwpJbmRleDogc3JjL2NsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9jbGllbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuMi4xCmRp
ZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjIuMQoqKiogc3JjL2NsaWVudC5oCTIwMDEv
MDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL2NsaWVudC5oCTIwMDEvMDMvMDcgMjM6MDE6
MzIJMS4xLjEuMS4yLjEKKioqKioqKioqKioqKioqCioqKiAxODUsMjAxICoqKioKLS0tIDE4NSwy
MDQgLS0tLQogIGV4dGVybiB2b2lkIGNsaWVudF9zZW5kX2V4cGFuc2lvbnMgUFJPVE8oKGludCBs
b2NhbCwgY2hhciAqd2hlcmUsCiAgCQkJCQkgIGludCBidWlsZF9kaXJzKSk7CiAgZXh0ZXJuIHZv
aWQgY2xpZW50X25vbmV4cGFuZGVkX3NldHVwIFBST1RPKCh2b2lkKSk7CiAgCiAgZXh0ZXJuIHZv
aWQgc2VuZF9pbml0X2NvbW1hbmQgUFJPVE8gKCh2b2lkKSk7CiAgDAogIGV4dGVybiBjaGFyICoq
ZmFpbGVkX3BhdGNoZXM7CiAgZXh0ZXJuIGludCBmYWlsZWRfcGF0Y2hlc19jb3VudDsKICBleHRl
cm4gY2hhciAqdG9wbGV2ZWxfd2Q7CiAgZXh0ZXJuIHZvaWQgY2xpZW50X2ltcG9ydF9zZXR1cCBQ
Uk9UTygoY2hhciAqcmVwb3NpdG9yeSkpOwogIGV4dGVybiBpbnQgY2xpZW50X3Byb2Nlc3NfaW1w
b3J0X2ZpbGUKICAgICAgUFJPVE8oKGNoYXIgKm1lc3NhZ2UsIGNoYXIgKnZmaWxlLCBjaGFyICp2
dGFnLAogIAkgICBpbnQgdGFyZ2MsIGNoYXIgKnRhcmd2W10sIGNoYXIgKnJlcG9zaXRvcnksIGlu
dCBhbGxfZmlsZXNfYmluYXJ5LAogIAkgICBpbnQgbW9kdGltZSkpOwogIGV4dGVybiB2b2lkIGNs
aWVudF9pbXBvcnRfZG9uZSBQUk9UTygodm9pZCkpOwogIGV4dGVybiB2b2lkIGNsaWVudF9ub3Rp
ZnkgUFJPVE8oKGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCwgY2hhciAqKSk7CisgCisgZXh0
ZXJuIHZvaWQgZnJvbV9zZXJ2ZXJfYnVmZmVyX3JlYWQgUFJPVE8oKGNoYXIgKiosIGludCAqKSk7
CisgZXh0ZXJuIHZvaWQgdG9fc2VydmVyX2J1ZmZlcl9mbHVzaCBQUk9UTygodm9pZCkpOwogICNl
bmRpZiAvKiBDTElFTlRfU1VQUE9SVCAqLwpJbmRleDogc3JjL2NvbW1pdC5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9jb21taXQuYyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuMi4xCmRpZmYg
LUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjIuMQoqKiogc3JjL2NvbW1pdC5jCTIwMDEvMDMv
MDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL2NvbW1pdC5jCTIwMDEvMDMvMDcgMjM6MDE6MzMJ
MS4xLjEuMS4yLjEKKioqKioqKioqKioqKioqCioqKiA1NiwxMDMgKioqKgogIHN0YXRpYyB2b2lk
IG1hc3Rlcmxpc3RfZGVscHJvYyBQUk9UTygoTm9kZSAqcCkpOwogIHN0YXRpYyBjaGFyICpsb2Nh
dGVfcmNzIFBST1RPKChjaGFyICpmaWxlLCBjaGFyICpyZXBvc2l0b3J5KSk7CiAgCiAgc3RydWN0
IGNvbW1pdF9pbmZvCiAgewogICAgICBDdHlwZSBzdGF0dXM7CQkJLyogYXMgcmV0dXJuZWQgZnJv
bSBDbGFzc2lmeV9GaWxlKCkgKi8KICAgICAgY2hhciAqcmV2OwkJCQkvKiBhIG51bWVyaWMgcmV2
LCBpZiB3ZSBrbm93IGl0ICovCiAgICAgIGNoYXIgKnRhZzsJCQkJLyogYW55IHN0aWNreSB0YWcs
IG9yIC1yIG9wdGlvbiAqLwogICAgICBjaGFyICpvcHRpb25zOwkJCS8qIEFueSBzdGlja3kgLWsg
b3B0aW9uICovCiAgfTsKICBzdHJ1Y3QgbWFzdGVyX2xpc3RzCiAgewogICAgICBMaXN0ICp1bGlz
dDsJCQkvKiBsaXN0IGZvciBVcGRhdGVfTG9nZmlsZSAqLwogICAgICBMaXN0ICpjaWxpc3Q7CQkJ
LyogbGlzdCB3aXRoIGNvbW1pdF9pbmZvIHN0cnVjdHMgKi8KICB9OwogIAogIHN0YXRpYyBpbnQg
Zm9yY2VfY2kgPSAwOwogIHN0YXRpYyBpbnQgZ290X21lc3NhZ2U7CiAgc3RhdGljIGludCBydW5f
bW9kdWxlX3Byb2cgPSAxOwogIHN0YXRpYyBpbnQgYWZsYWc7CiAgc3RhdGljIGNoYXIgKnNhdmVk
X3RhZzsKICBzdGF0aWMgY2hhciAqd3JpdGVfZGlydGFnOwogIHN0YXRpYyBpbnQgd3JpdGVfZGly
bm9uYnJhbmNoOwogIHN0YXRpYyBjaGFyICpsb2dmaWxlOwogIHN0YXRpYyBMaXN0ICptdWxpc3Q7
CiAgc3RhdGljIExpc3QgKnNhdmVkX3VsaXN0OwogIHN0YXRpYyBjaGFyICpzYXZlZF9tZXNzYWdl
OwogIHN0YXRpYyB0aW1lX3QgbGFzdF9yZWdpc3Rlcl90aW1lOwogIAogIHN0YXRpYyBjb25zdCBj
aGFyICpjb25zdCBjb21taXRfdXNhZ2VbXSA9CiAgewohICAgICAiVXNhZ2U6ICVzICVzIFstblJs
Zl0gWy1tIG1zZyB8IC1GIGxvZ2ZpbGVdIFstciByZXZdIGZpbGVzLi4uXG4iLAogICAgICAiXHQt
blx0RG8gbm90IHJ1biB0aGUgbW9kdWxlIHByb2dyYW0gKGlmIGFueSkuXG4iLAogICAgICAiXHQt
Ulx0UHJvY2VzcyBkaXJlY3RvcmllcyByZWN1cnNpdmVseS5cbiIsCiAgICAgICJcdC1sXHRMb2Nh
bCBkaXJlY3Rvcnkgb25seSAobm90IHJlY3Vyc2l2ZSkuXG4iLAogICAgICAiXHQtZlx0Rm9yY2Ug
dGhlIGZpbGUgdG8gYmUgY29tbWl0dGVkOyBkaXNhYmxlcyByZWN1cnNpb24uXG4iLAogICAgICAi
XHQtRiBmaWxlXHRSZWFkIHRoZSBsb2cgbWVzc2FnZSBmcm9tIGZpbGUuXG4iLAogICAgICAiXHQt
bSBtc2dcdExvZyBtZXNzYWdlLlxuIiwKICAgICAgIlx0LXIgcmV2XHRDb21taXQgdG8gdGhpcyBi
cmFuY2ggb3IgdHJ1bmsgcmV2aXNpb24uXG4iLAogICAgICAiKFNwZWNpZnkgdGhlIC0taGVscCBn
bG9iYWwgb3B0aW9uIGZvciBhIGxpc3Qgb2Ygb3RoZXIgaGVscCBvcHRpb25zKVxuIiwKICAgICAg
TlVMTAogIH07CiAgCiAgI2lmZGVmIENMSUVOVF9TVVBQT1JUCiAgLyogSWRlbnRpZnkgYSBmaWxl
IHdoaWNoIG5lZWRzICI/IGZvbyIgb3IgYSBRdWVzdGlvbmFibGUgcmVxdWVzdC4gICovCiAgc3Ry
dWN0IHF1ZXN0aW9uIHsKICAgICAgLyogVGhlIHR3byBmaWVsZHMgZm9yIHRoZSBEaXJlY3Rvcnkg
cmVxdWVzdC4gICovCiAgICAgIGNoYXIgKmRpcjsKLS0tIDU2LDEwNSAtLS0tCiAgc3RhdGljIHZv
aWQgbWFzdGVybGlzdF9kZWxwcm9jIFBST1RPKChOb2RlICpwKSk7CiAgc3RhdGljIGNoYXIgKmxv
Y2F0ZV9yY3MgUFJPVE8oKGNoYXIgKmZpbGUsIGNoYXIgKnJlcG9zaXRvcnkpKTsKICAKICBzdHJ1
Y3QgY29tbWl0X2luZm8KICB7CiAgICAgIEN0eXBlIHN0YXR1czsJCQkvKiBhcyByZXR1cm5lZCBm
cm9tIENsYXNzaWZ5X0ZpbGUoKSAqLwogICAgICBjaGFyICpyZXY7CQkJCS8qIGEgbnVtZXJpYyBy
ZXYsIGlmIHdlIGtub3cgaXQgKi8KICAgICAgY2hhciAqdGFnOwkJCQkvKiBhbnkgc3RpY2t5IHRh
Zywgb3IgLXIgb3B0aW9uICovCiAgICAgIGNoYXIgKm9wdGlvbnM7CQkJLyogQW55IHN0aWNreSAt
ayBvcHRpb24gKi8KICB9OwogIHN0cnVjdCBtYXN0ZXJfbGlzdHMKICB7CiAgICAgIExpc3QgKnVs
aXN0OwkJCS8qIGxpc3QgZm9yIFVwZGF0ZV9Mb2dmaWxlICovCiAgICAgIExpc3QgKmNpbGlzdDsJ
CQkvKiBsaXN0IHdpdGggY29tbWl0X2luZm8gc3RydWN0cyAqLwogIH07CiAgCisgc3RhdGljIGlu
dCBjaGVja192YWxpZF9lZGl0ID0gMDsKICBzdGF0aWMgaW50IGZvcmNlX2NpID0gMDsKICBzdGF0
aWMgaW50IGdvdF9tZXNzYWdlOwogIHN0YXRpYyBpbnQgcnVuX21vZHVsZV9wcm9nID0gMTsKICBz
dGF0aWMgaW50IGFmbGFnOwogIHN0YXRpYyBjaGFyICpzYXZlZF90YWc7CiAgc3RhdGljIGNoYXIg
KndyaXRlX2RpcnRhZzsKICBzdGF0aWMgaW50IHdyaXRlX2Rpcm5vbmJyYW5jaDsKICBzdGF0aWMg
Y2hhciAqbG9nZmlsZTsKICBzdGF0aWMgTGlzdCAqbXVsaXN0OwogIHN0YXRpYyBMaXN0ICpzYXZl
ZF91bGlzdDsKICBzdGF0aWMgY2hhciAqc2F2ZWRfbWVzc2FnZTsKICBzdGF0aWMgdGltZV90IGxh
c3RfcmVnaXN0ZXJfdGltZTsKICAKICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY29tbWl0X3Vz
YWdlW10gPQogIHsKISAgICAgIlVzYWdlOiAlcyAlcyBbLWNuUmxmXSBbLW0gbXNnIHwgLUYgbG9n
ZmlsZV0gWy1yIHJldl0gZmlsZXMuLi5cbiIsCiEgICAgICJcdC1jXHRDaGVjayBmb3IgdmFsaWQg
ZWRpdHMgYmVmb3JlIGNvbW1pdHRpbmcuXG4iLAogICAgICAiXHQtblx0RG8gbm90IHJ1biB0aGUg
bW9kdWxlIHByb2dyYW0gKGlmIGFueSkuXG4iLAogICAgICAiXHQtUlx0UHJvY2VzcyBkaXJlY3Rv
cmllcyByZWN1cnNpdmVseS5cbiIsCiAgICAgICJcdC1sXHRMb2NhbCBkaXJlY3Rvcnkgb25seSAo
bm90IHJlY3Vyc2l2ZSkuXG4iLAogICAgICAiXHQtZlx0Rm9yY2UgdGhlIGZpbGUgdG8gYmUgY29t
bWl0dGVkOyBkaXNhYmxlcyByZWN1cnNpb24uXG4iLAogICAgICAiXHQtRiBmaWxlXHRSZWFkIHRo
ZSBsb2cgbWVzc2FnZSBmcm9tIGZpbGUuXG4iLAogICAgICAiXHQtbSBtc2dcdExvZyBtZXNzYWdl
LlxuIiwKICAgICAgIlx0LXIgcmV2XHRDb21taXQgdG8gdGhpcyBicmFuY2ggb3IgdHJ1bmsgcmV2
aXNpb24uXG4iLAogICAgICAiKFNwZWNpZnkgdGhlIC0taGVscCBnbG9iYWwgb3B0aW9uIGZvciBh
IGxpc3Qgb2Ygb3RoZXIgaGVscCBvcHRpb25zKVxuIiwKICAgICAgTlVMTAogIH07CiAgCiAgI2lm
ZGVmIENMSUVOVF9TVVBQT1JUCiAgLyogSWRlbnRpZnkgYSBmaWxlIHdoaWNoIG5lZWRzICI/IGZv
byIgb3IgYSBRdWVzdGlvbmFibGUgcmVxdWVzdC4gICovCiAgc3RydWN0IHF1ZXN0aW9uIHsKICAg
ICAgLyogVGhlIHR3byBmaWVsZHMgZm9yIHRoZSBEaXJlY3RvcnkgcmVxdWVzdC4gICovCiAgICAg
IGNoYXIgKmRpcjsKKioqKioqKioqKioqKioqCioqKiAzNDUsNDEwICoqKioKICAjICBpZmRlZiBD
TElFTlRfU1VQUE9SVAogIAkvKiBXaG8gd2UgYXJlIG9uIHRoZSBjbGllbnQgc2lkZSBkb2Vzbid0
IGFmZmVjdCBsb2dnaW5nLiAgKi8KICAJJiYgIWNsaWVudF9hY3RpdmUKICAjICBlbmRpZgogIAkp
CiAgICAgIHsKICAJc3RydWN0IHBhc3N3ZCAqcHc7CiAgCiAgCWlmICgocHcgPSAoc3RydWN0IHBh
c3N3ZCAqKSBnZXRwd25hbSAoZ2V0Y2FsbGVyICgpKSkgPT0gTlVMTCkKICAJICAgIGVycm9yICgx
LCAwLCAieW91IGFyZSB1bmtub3duIHRvIHRoaXMgc3lzdGVtIik7CiAgCWlmIChwdy0+cHdfdWlk
ID09ICh1aWRfdCkgMCkKICAJICAgIGVycm9yICgxLCAwLCAiY2Fubm90IGNvbW1pdCBmaWxlcyBh
cyAncm9vdCciKTsKICAgICAgfQogICNlbmRpZiAvKiBDVlNfQkFEUk9PVCAqLwogIAogICAgICBv
cHRpbmQgPSAwOwohICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICIrbmxSbTpm
RjpyOiIpKSAhPSAtMSkKICAgICAgewogIAlzd2l0Y2ggKGMpCiAgCXsKICAJICAgIGNhc2UgJ24n
OgogIAkJcnVuX21vZHVsZV9wcm9nID0gMDsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnbSc6CiAg
I2lmZGVmIEZPUkNFX1VTRV9FRElUT1IKICAJCXVzZV9lZGl0b3IgPSAxOwogICNlbHNlCiAgCQl1
c2VfZWRpdG9yID0gMDsKICAjZW5kaWYKICAJCWlmIChzYXZlZF9tZXNzYWdlKQogIAkJewogIAkJ
ICAgIGZyZWUgKHNhdmVkX21lc3NhZ2UpOwogIAkJICAgIHNhdmVkX21lc3NhZ2UgPSBOVUxMOwog
IAkJfQogIAogIAkJc2F2ZWRfbWVzc2FnZSA9IHhzdHJkdXAob3B0YXJnKTsKICAJCWJyZWFrOwog
IAkgICAgY2FzZSAncic6CiAgCQlpZiAoc2F2ZWRfdGFnKQogIAkJICAgIGZyZWUgKHNhdmVkX3Rh
Zyk7CiAgCQlzYXZlZF90YWcgPSB4c3RyZHVwIChvcHRhcmcpOwogIAkJYnJlYWs7CiAgCSAgICBj
YXNlICdsJzoKICAJCWxvY2FsID0gMTsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnUic6CiAgCQls
b2NhbCA9IDA7CiAgCQlicmVhazsKICAJICAgIGNhc2UgJ2YnOgogIAkJZm9yY2VfY2kgPSAxOwog
IAkJbG9jYWwgPSAxOwkJLyogYWxzbyBkaXNhYmxlIHJlY3Vyc2lvbiAqLwogIAkJYnJlYWs7CiAg
CSAgICBjYXNlICdGJzoKICAjaWZkZWYgRk9SQ0VfVVNFX0VESVRPUgogIAkJdXNlX2VkaXRvciA9
IDE7CiAgI2Vsc2UKICAJCXVzZV9lZGl0b3IgPSAwOwogICNlbmRpZgogIAkJbG9nZmlsZSA9IG9w
dGFyZzsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnPyc6CiAgCSAgICBkZWZhdWx0OgogIAkJdXNh
Z2UgKGNvbW1pdF91c2FnZSk7CiAgCQlicmVhazsKICAJfQogICAgICB9Ci0tLSAzNDcsNDE2IC0t
LS0KICAjICBpZmRlZiBDTElFTlRfU1VQUE9SVAogIAkvKiBXaG8gd2UgYXJlIG9uIHRoZSBjbGll
bnQgc2lkZSBkb2Vzbid0IGFmZmVjdCBsb2dnaW5nLiAgKi8KICAJJiYgIWNsaWVudF9hY3RpdmUK
ICAjICBlbmRpZgogIAkpCiAgICAgIHsKICAJc3RydWN0IHBhc3N3ZCAqcHc7CiAgCiAgCWlmICgo
cHcgPSAoc3RydWN0IHBhc3N3ZCAqKSBnZXRwd25hbSAoZ2V0Y2FsbGVyICgpKSkgPT0gTlVMTCkK
ICAJICAgIGVycm9yICgxLCAwLCAieW91IGFyZSB1bmtub3duIHRvIHRoaXMgc3lzdGVtIik7CiAg
CWlmIChwdy0+cHdfdWlkID09ICh1aWRfdCkgMCkKICAJICAgIGVycm9yICgxLCAwLCAiY2Fubm90
IGNvbW1pdCBmaWxlcyBhcyAncm9vdCciKTsKICAgICAgfQogICNlbmRpZiAvKiBDVlNfQkFEUk9P
VCAqLwogIAogICAgICBvcHRpbmQgPSAwOwohICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2Ms
IGFyZ3YsICIrY25sUm06ZkY6cjoiKSkgIT0gLTEpCiAgICAgIHsKICAJc3dpdGNoIChjKQogIAl7
CisgICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgIGNoZWNrX3ZhbGlkX2Vk
aXQgPSAxOworICAgICAgICAgICAgICAgICBicmVhazsKICAJICAgIGNhc2UgJ24nOgogIAkJcnVu
X21vZHVsZV9wcm9nID0gMDsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnbSc6CiAgI2lmZGVmIEZP
UkNFX1VTRV9FRElUT1IKICAJCXVzZV9lZGl0b3IgPSAxOwogICNlbHNlCiAgCQl1c2VfZWRpdG9y
ID0gMDsKICAjZW5kaWYKICAJCWlmIChzYXZlZF9tZXNzYWdlKQogIAkJewogIAkJICAgIGZyZWUg
KHNhdmVkX21lc3NhZ2UpOwogIAkJICAgIHNhdmVkX21lc3NhZ2UgPSBOVUxMOwogIAkJfQogIAog
IAkJc2F2ZWRfbWVzc2FnZSA9IHhzdHJkdXAob3B0YXJnKTsKICAJCWJyZWFrOwogIAkgICAgY2Fz
ZSAncic6CiAgCQlpZiAoc2F2ZWRfdGFnKQogIAkJICAgIGZyZWUgKHNhdmVkX3RhZyk7CiAgCQlz
YXZlZF90YWcgPSB4c3RyZHVwIChvcHRhcmcpOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlICdsJzoK
ICAJCWxvY2FsID0gMTsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnUic6CiAgCQlsb2NhbCA9IDA7
CiAgCQlicmVhazsKICAJICAgIGNhc2UgJ2YnOgogIAkJZm9yY2VfY2kgPSAxOworICAgICAgICAg
ICAgICAgICBjaGVja192YWxpZF9lZGl0ID0gMDsKICAJCWxvY2FsID0gMTsJCS8qIGFsc28gZGlz
YWJsZSByZWN1cnNpb24gKi8KICAJCWJyZWFrOwogIAkgICAgY2FzZSAnRic6CiAgI2lmZGVmIEZP
UkNFX1VTRV9FRElUT1IKICAJCXVzZV9lZGl0b3IgPSAxOwogICNlbHNlCiAgCQl1c2VfZWRpdG9y
ID0gMDsKICAjZW5kaWYKICAJCWxvZ2ZpbGUgPSBvcHRhcmc7CiAgCQlicmVhazsKICAJICAgIGNh
c2UgJz8nOgogIAkgICAgZGVmYXVsdDoKICAJCXVzYWdlIChjb21taXRfdXNhZ2UpOwogIAkJYnJl
YWs7CiAgCX0KICAgICAgfQoqKioqKioqKioqKioqKioKKioqIDUzNSw1NjYgKioqKgotLS0gNTQx
LDU3NCAtLS0tCiAgCiAgCQkgICAgc2VuZF90b19zZXJ2ZXIgKCJRdWVzdGlvbmFibGUgIiwgMCk7
CiAgCQkgICAgc2VuZF90b19zZXJ2ZXIgKHAtPmZpbGUsIDApOwogIAkJICAgIHNlbmRfdG9fc2Vy
dmVyICgiXDAxMiIsIDEpOwogIAkJfQogIAkJZnJlZSAocC0+ZGlyKTsKICAJCWZyZWUgKHAtPnJl
cG9zKTsKICAJCWZyZWUgKHAtPmZpbGUpOwogIAkJcSA9IHAtPm5leHQ7CiAgCQlmcmVlIChwKTsK
ICAJCXAgPSBxOwogIAkgICAgfQogIAl9CiAgCiAgCWlmIChsb2NhbCkKICAJICAgIHNlbmRfYXJn
KCItbCIpOworICAgICAgICAgaWYgKGNoZWNrX3ZhbGlkX2VkaXQpCisgICAgICAgICAgICAgc2Vu
ZF9hcmcoIi1jIik7CiAgCWlmIChmb3JjZV9jaSkKICAJICAgIHNlbmRfYXJnKCItZiIpOwogIAlp
ZiAoIXJ1bl9tb2R1bGVfcHJvZykKICAJICAgIHNlbmRfYXJnKCItbiIpOwogIAlvcHRpb25fd2l0
aF9hcmcgKCItciIsIHNhdmVkX3RhZyk7CiAgCiAgCS8qIEZJWE1FOiBUaGlzIHdob2xlIGZpbmRf
YXJncy5mb3JjZS9TRU5EX0ZPUkNFIGJ1c2luZXNzIGlzIGEKICAJICAga2x1ZGdlLiAgSXQgd291
bGQgc2VlbSB0byBiZSBhIHNlcnZlciBidWcgdGhhdCB3ZSBoYXZlIHRvCiAgCSAgIHNheSB0aGF0
IGZpbGVzIGFyZSBtb2RpZmllZCB3aGVuIHRoZXkgYXJlIG5vdC4gIFRoaXMgbWFrZXMKICAJICAg
ImN2cyBjb21taXQgLXIgMiIgYWNyb3NzIGEgd2hvbGUgYnVuY2ggb2YgZmlsZXMgYSB2ZXJ5IHNs
b3cKICAJICAgb3BlcmF0aW9uIChhbmQgaXQgaXNuJ3QgZG9jdW1lbnRlZCBpbiBjdnNjbGllbnQu
dGV4aSkuICBJCiAgCSAgIGhhdmVuJ3QgbG9va2VkIGF0IHRoZSBzZXJ2ZXIgY29kZSBjYXJlZnVs
bHkgZW5vdWdoIHRvIGJlCiAgCSAgIF9zdXJlXyB3aHkgdGhpcyBpcyBuZWVkZWQsIGJ1dCBpZiBp
dCBpcyBiZWNhdXNlIHRoZSAiY2kiCiAgCSAgIHByb2dyYW0sIHdoaWNoIHdlIHVzZWQgdG8gY2Fs
bCwgd2FudGVkIHRoZSBmaWxlIHRvIGV4aXN0LAogIAkgICB0aGVuIGl0IHdvdWxkIGJlIHJlbGF0
aXZlbHkgc2ltcGxlIHRvIGZpeCBpbiB0aGUgc2VydmVyLiAgKi8KICAJc2VuZF9maWxlcyAoZmlu
ZF9hcmdzLmFyZ2MsIGZpbmRfYXJncy5hcmd2LCBsb2NhbCwgMCwKKioqKioqKioqKioqKioqCioq
KiA4MDksODQwICoqKioKLS0tIDgxNyw4NTEgLS0tLQogIAogICAgICBzd2l0Y2ggKHN0YXR1cykK
ICAgICAgewogIAljYXNlIFRfQ0hFQ0tPVVQ6CiAgI2lmZGVmIFNFUlZFUl9TVVBQT1JUCiAgCWNh
c2UgVF9QQVRDSDoKICAjZW5kaWYKICAJY2FzZSBUX05FRURTX01FUkdFOgogIAljYXNlIFRfQ09O
RkxJQ1Q6CiAgCWNhc2UgVF9SRU1PVkVfRU5UUlk6CiAgCSAgICBlcnJvciAoMCwgMCwgIlVwLXRv
LWRhdGUgY2hlY2sgZmFpbGVkIGZvciBgJXMnIiwgZmluZm8tPmZ1bGxuYW1lKTsKICAJICAgIGZy
ZWV2ZXJzX3RzICgmdmVycyk7CiAgCSAgICByZXR1cm4gKDEpOwogIAljYXNlIFRfTU9ESUZJRUQ6
CiAgCWNhc2UgVF9BRERFRDoKICAJY2FzZSBUX1JFTU9WRUQ6CisgICAgICAgICB7CisgICAgICAg
ICAgICAgY2hhciAqZWRpdG9yID0gTlVMTDsKKyAKICAJICAgIC8qCiAgCSAgICAgKiBzb21lIHF1
aWNrIHNhbml0eSBjaGVja3M7IGlmIG5vIG51bWVyaWMgLXIgb3B0aW9uIHNwZWNpZmllZDoKICAJ
ICAgICAqCS0gY2FuJ3QgaGF2ZSBhIHN0aWNreSBkYXRlCiAgCSAgICAgKgktIGNhbid0IGhhdmUg
YSBzdGlja3kgdGFnIHRoYXQgaXMgbm90IGEgYnJhbmNoCiAgCSAgICAgKiBBbHNvLAogIAkgICAg
ICoJLSBpZiBzdGF0dXMgaXMgVF9SRU1PVkVELCBjYW4ndCBoYXZlIGEgbnVtZXJpYyB0YWcKICAJ
ICAgICAqCS0gaWYgc3RhdHVzIGlzIFRfQURERUQsIHJjcyBmaWxlIG11c3Qgbm90IGV4aXN0IHVu
bGVzcyBvbgogIAkgICAgICogICAgYSBicmFuY2gKICAJICAgICAqCS0gaWYgc3RhdHVzIGlzIFRf
QURERUQsIGNhbid0IGhhdmUgYSBub24tdHJ1bmsgbnVtZXJpYyByZXYKICAJICAgICAqCS0gaWYg
c3RhdHVzIGlzIFRfTU9ESUZJRUQgYW5kIGEgQ29uZmxpY3QgbWFya2VyIGV4aXN0cywgZG9uJ3QK
ICAJICAgICAqICAgIGFsbG93IHRoZSBjb21taXQgaWYgdGltZXN0YW1wIGlzIGlkZW50aWNhbCBv
ciBpZiB3ZSBmaW5kCiAgCSAgICAgKiAgICBhbiBSQ1NfTUVSR0VfUEFUIGluIHRoZSBmaWxlLgog
IAkgICAgICovCiAgCSAgICBpZiAoIXNhdmVkX3RhZyB8fCAhaXNkaWdpdCAoKHVuc2lnbmVkIGNo
YXIpICpzYXZlZF90YWcpKQogIAkgICAgewogIAkJaWYgKHZlcnMtPmRhdGUpCioqKioqKioqKioq
KioqKgoqKiogOTgyLDEwMTMgKioqKgotLS0gOTkzLDEwNzQgLS0tLQogIAkJICAgIHhtYWxsb2Mg
KHNpemVvZiAoc3RydWN0IG1hc3Rlcl9saXN0cykpOwogIAkJbWwtPnVsaXN0ID0gdWxpc3Q7CiAg
CQltbC0+Y2lsaXN0ID0gY2lsaXN0OwogIAkJcC0+ZGF0YSA9IChjaGFyICopIG1sOwogIAkJcC0+
ZGVscHJvYyA9IG1hc3Rlcmxpc3RfZGVscHJvYzsKICAJCSh2b2lkKSBhZGRub2RlIChtdWxpc3Qs
IHApOwogIAkgICAgfQogIAogIAkgICAgLyogZmlyc3QgZG8gdWxpc3QsIHRoZW4gY2lsaXN0ICov
CiAgCSAgICBwID0gZ2V0bm9kZSAoKTsKICAJICAgIHAtPmtleSA9IHhzdHJkdXAgKGZpbmZvLT5m
aWxlKTsKICAJICAgIHAtPnR5cGUgPSBVUERBVEU7CiAgCSAgICBwLT5kZWxwcm9jID0gdXBkYXRl
X2RlbHByb2M7CiAgCSAgICBsaSA9ICgoc3RydWN0IGxvZ2ZpbGVfaW5mbyAqKQogIAkJICB4bWFs
bG9jIChzaXplb2YgKHN0cnVjdCBsb2dmaWxlX2luZm8pKSk7CiAgCSAgICBsaS0+dHlwZSA9IHN0
YXR1czsKKyAKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGNoYXIgKmVkaXRvcnMg
PSBOVUxMOworIAorICAgICAgICAgICAgICAgICBlZGl0b3JzID0gZmlsZWF0dHJfZ2V0MCAoZmlu
Zm8tPmZpbGUsICJfZWRpdG9ycyIpOworICAgICAgICAgICAgICAgICBpZiAoZWRpdG9ycyAhPSBO
VUxMKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBjaGFyICpjYWxs
ZXIgPSBnZXRjYWxsZXIgKCk7CisgICAgICAgICAgICAgICAgICAgICBjaGFyICpwID0gTlVMTDsK
KyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnAwID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAg
ICAgICAgIHAgPSBlZGl0b3JzOworICAgICAgICAgICAgICAgICAgICAgcDAgPSBwOworICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcpCisgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN0cmNociAocCwgJz4nKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RyY21wIChjYWxsZXIsIHAwKSA9PSAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBz
dHJjaHIgKHAgKyAxLCAnLCcpOworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IE5V
TEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgKytwOworICAgICAgICAgICAgICAgICAgICAgICAgIHAwID0gcDsKKyAgICAgICAg
ICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAgKGNhbGxl
ciwgcDApID09IDApCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgZWRpdG9yID0gY2FsbGVyOworICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAg
ICAgICAgICAgICAgICAgZnJlZSAoZWRpdG9ycyk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICB9CisgCisgICAgICAgICAgICAgaWYgKGNoZWNrX3ZhbGlkX2VkaXQgJiYgZWRpdG9y
ID09IE5VTEwpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBlcnJvciAoMCwgMCwg
IlZhbGlkIGVkaXQgZG9lcyBub3QgZXhpc3QgZm9yICVzIiwgZmluZm8tPmZ1bGxuYW1lKTsKKyAg
ICAgICAgICAgICAgICAgZnJlZXZlcnNfdHMgKCZ2ZXJzKTsKKyAgICAgICAgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgICAgICAgfQorIAogIAkgICAgbGktPnRhZyA9IHhzdHJkdXAgKHZlcnMt
PnRhZyk7CiAgCSAgICBsaS0+cmV2X29sZCA9IHhzdHJkdXAgKHZlcnMtPnZuX3Jjcyk7CiAgCSAg
ICBsaS0+cmV2X25ldyA9IE5VTEw7CiAgCSAgICBwLT5kYXRhID0gKGNoYXIgKikgbGk7CiAgCSAg
ICAodm9pZCkgYWRkbm9kZSAodWxpc3QsIHApOwogIAogIAkgICAgcCA9IGdldG5vZGUgKCk7CiAg
CSAgICBwLT5rZXkgPSB4c3RyZHVwIChmaW5mby0+ZmlsZSk7CiAgCSAgICBwLT50eXBlID0gVVBE
QVRFOwogIAkgICAgcC0+ZGVscHJvYyA9IGNpX2RlbHByb2M7CiAgCSAgICBjaSA9IChzdHJ1Y3Qg
Y29tbWl0X2luZm8gKikgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgY29tbWl0X2luZm8pKTsKICAJ
ICAgIGNpLT5zdGF0dXMgPSBzdGF0dXM7CiAgCSAgICBpZiAodmVycy0+dGFnKQogIAkJaWYgKGlz
ZGlnaXQgKCh1bnNpZ25lZCBjaGFyKSAqdmVycy0+dGFnKSkKICAJCSAgICBjaS0+cmV2ID0geHN0
cmR1cCAodmVycy0+dGFnKTsKICAJCWVsc2UKKioqKioqKioqKioqKioqCioqKiAxMDQyLDEwNzMg
KioqKgotLS0gMTEwMywxMTM2IC0tLS0KICAJCSAgIHdlJ3JlIGRvaW5nIGEgcmVtb3ZlIG9wZXJh
dGlvbj8gKi8KICAJCWlmIChsaW5rcCAhPSBOVUxMKQogIAkJewogIAkJICAgIC8qIENyZWF0ZSBh
IG5ldyBoYXJkbGlua19pbmZvIG5vZGUsIHdoaWNoIHdpbGwgcmVjb3JkCiAgCQkgICAgICAgdGhl
IGN1cnJlbnQgZmlsZSdzIHN0YXR1cyBhbmQgdGhlIGxpbmtzIGxpc3RlZCBpbiBpdHMKICAJCSAg
ICAgICBgaGFyZGxpbmtzJyBkZWx0YSBmaWVsZC4gIFdlIHdpbGwgYXBwZW5kIHRoaXMKICAJCSAg
ICAgICBoYXJkbGlua19pbmZvIG5vZGUgdG8gdGhlIGFwcHJvcHJpYXRlIGhhcmRsaXN0IGVudHJ5
LiAqLwogIAkJICAgIGhsaW5mbyA9IChzdHJ1Y3QgaGFyZGxpbmtfaW5mbyAqKQogIAkJCXhtYWxs
b2MgKHNpemVvZiAoc3RydWN0IGhhcmRsaW5rX2luZm8pKTsKICAJCSAgICBobGluZm8tPnN0YXR1
cyA9IHN0YXR1czsKICAJCSAgICBsaW5rcC0+ZGF0YSA9IChjaGFyICopIGhsaW5mbzsKICAJCX0K
ICAJICAgIH0KICAjZW5kaWYKICAKICAJICAgIGJyZWFrOworICAgICAgICAgfQorIAogIAljYXNl
IFRfVU5LTk9XTjoKICAJICAgIGVycm9yICgwLCAwLCAibm90aGluZyBrbm93biBhYm91dCBgJXMn
IiwgZmluZm8tPmZ1bGxuYW1lKTsKICAJICAgIGZyZWV2ZXJzX3RzICgmdmVycyk7CiAgCSAgICBy
ZXR1cm4gKDEpOwogIAljYXNlIFRfVVBUT0RBVEU6CiAgCSAgICBicmVhazsKICAJZGVmYXVsdDoK
ICAJICAgIGVycm9yICgwLCAwLCAiQ1ZTIGludGVybmFsIGVycm9yOiB1bmtub3duIHN0YXR1cyAl
ZCIsIHN0YXR1cyk7CiAgCSAgICBicmVhazsKICAgICAgfQogIAogICAgICBmcmVldmVyc190cyAo
JnZlcnMpOwogICAgICByZXR1cm4gKDApOwogIH0KICAKICAvKgpJbmRleDogc3JjL2VkaXQuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMvZWRpdC5jLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS4y
LjEKZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuMi4xCioqKiBzcmMvZWRpdC5jCTIw
MDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL2VkaXQuYwkyMDAxLzAzLzA3IDIzOjAx
OjMzCTEuMS4xLjEuMi4xCioqKioqKioqKioqKioqKgoqKiogNSwzNiAqKioqCi0tLSA1LDM3IC0t
LS0KICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBv
ciAoYXQgeW91ciBvcHRpb24pCiAgICAgYW55IGxhdGVyIHZlcnNpb24uCiAgCiAgICAgVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4gICovCiAgCiAgI2luY2x1ZGUgImN2cy5oIgogICNpbmNsdWRlICJnZXRs
aW5lLmgiCiAgI2luY2x1ZGUgIndhdGNoLmgiCiAgI2luY2x1ZGUgImVkaXQuaCIKICAjaW5jbHVk
ZSAiZmlsZWF0dHIuaCIKICAKICBzdGF0aWMgaW50IHdhdGNoX29ub2ZmIFBST1RPICgoaW50LCBj
aGFyICoqKSk7CiAgCisgc3RhdGljIGludCBjaGVja19lZGl0ZWQgPSAwOwogIHN0YXRpYyBpbnQg
c2V0dGluZ19kZWZhdWx0OwogIHN0YXRpYyBpbnQgdHVybmluZ19vbjsKICAKICBzdGF0aWMgaW50
IHNldHRpbmdfdGVkaXQ7CiAgc3RhdGljIGludCBzZXR0aW5nX3R1bmVkaXQ7CiAgc3RhdGljIGlu
dCBzZXR0aW5nX3Rjb21taXQ7CiAgCiAgc3RhdGljIGludCBvbm9mZl9maWxlcHJvYyBQUk9UTyAo
KHZvaWQgKmNhbGxlcmRhdCwgc3RydWN0IGZpbGVfaW5mbyAqZmluZm8pKTsKICAKICBzdGF0aWMg
aW50CiAgb25vZmZfZmlsZXByb2MgKGNhbGxlcmRhdCwgZmluZm8pCiAgICAgIHZvaWQgKmNhbGxl
cmRhdDsKICAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87CiAgewogICAgICBmaWxlYXR0cl9z
ZXQgKGZpbmZvLT5maWxlLCAiX3dhdGNoZWQiLCB0dXJuaW5nX29uID8gIiIgOiBOVUxMKTsKICAg
ICAgcmV0dXJuIDA7CioqKioqKioqKioqKioqKgoqKiogMjU2LDI4NyAqKioqCi0tLSAyNTcsNTI5
IC0tLS0KICAgICAgfQogICAgICBlbHNlCiAgI2VuZGlmCiAgICAgIHsKICAJLyogTG9jYWwuICAq
LwogIAogIAlsb2NrX3RyZWVfZm9yX3dyaXRlIChhcmdjLCBhcmd2LCBsb2NhbCwgMCk7CiAgCWVy
ciArPSBzdGFydF9yZWN1cnNpb24gKG5jaGVja19maWxlcHJvYywgKEZJTEVTRE9ORVBST0MpIE5V
TEwsCiAgCQkJCShESVJFTlRQUk9DKSBOVUxMLCAoRElSTEVBVkVQUk9DKSBOVUxMLCBOVUxMLAog
IAkJCQlhcmdjLCBhcmd2LCBsb2NhbCwgV19MT0NBTCwgMCwgMCwgKGNoYXIgKilOVUxMLAogIAkJ
CQkwKTsKICAJTG9ja19DbGVhbnVwICgpOwogICAgICB9CiAgICAgIHJldHVybiBlcnI7CiAgfQog
IAwKKyAKKyBzdGF0aWMgaW50IGVkaXRvcnNfb3V0cHV0IFBST1RPICgoc3RydWN0IGZpbGVfaW5m
byAqZmluZm8pKTsKKyAKKyBzdGF0aWMgaW50CisgICAgIGVkaXRvcnNfb3V0cHV0IChmaW5mbykK
KyAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87CisgeworICAgICBjaGFyICp0aGVtOworICAg
ICBjaGFyICpwOworIAorICAgICB0aGVtID0gZmlsZWF0dHJfZ2V0MCAoZmluZm8tPmZpbGUsICJf
ZWRpdG9ycyIpOworICAgICBpZiAodGhlbSA9PSBOVUxMKQorICAgICAgICAgcmV0dXJuIDA7Cisg
CisgICAgIGN2c19vdXRwdXQgKGZpbmZvLT5mdWxsbmFtZSwgMCk7CisgCisgICAgIHAgPSB0aGVt
OworICAgICB3aGlsZSAoMSkKKyAgICAgeworICAgICAgICAgY3ZzX291dHB1dCAoIlx0IiwgMSk7
CisgICAgICAgICB3aGlsZSAoKnAgIT0gJz4nICYmICpwICE9ICdcMCcpCisgICAgICAgICAgICAg
Y3ZzX291dHB1dCAocCsrLCAxKTsKKyAgICAgICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICAg
eworICAgICAgICAgICAgIC8qIE9ubHkgaGFwcGVucyBpZiBhdHRyaWJ1dGUgaXMgbWlzZm9ybWVk
LiAgKi8KKyAgICAgICAgICAgICBjdnNfb3V0cHV0ICgiXG4iLCAxKTsKKyAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgICsrcDsKKyAgICAgICAgIGN2c19vdXRwdXQgKCJc
dCIsIDEpOworICAgICAgICAgd2hpbGUgKDEpCisgICAgICAgICB7CisgICAgICAgICAgICAgd2hp
bGUgKCpwICE9ICcrJyAmJiAqcCAhPSAnLCcgJiYgKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAg
ICAgY3ZzX291dHB1dCAocCsrLCAxKTsKKyAgICAgICAgICAgICBpZiAoKnAgPT0gJ1wwJykKKyAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGN2c19vdXRwdXQgKCJcbiIsIDEpOworICAg
ICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYg
KCpwID09ICcsJykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICsrcDsKKyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgICsrcDsKKyAg
ICAgICAgICAgICBjdnNfb3V0cHV0ICgiXHQiLCAxKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGN2
c19vdXRwdXQgKCJcbiIsIDEpOworICAgICB9CisgCisgb3V0OgorICAgICBmcmVlICh0aGVtKTsK
KyAKKyAgICAgcmV0dXJuIDA7CisgfQorIAwKKyAKKyBzdGF0aWMgaW50IGNoZWNrX2ZpbGVwcm9j
IFBST1RPICgodm9pZCAqY2FsbGVyZGF0LCBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbykpOworIAor
IC8qIGNoZWNrIGZpbGUgdGhhdCBpcyB0byBiZSBlZGl0ZWQgaWYgaXQncyBhbHJlYWR5IGJlaW5n
IGVkaXRlZCAqLworIAorIHN0YXRpYyBpbnQKKyBjaGVja19maWxlcHJvYyAoY2FsbGVyZGF0LCBm
aW5mbykKKyAgICAgdm9pZCAqY2FsbGVyZGF0OworICAgICBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5m
bzsKKyB7CisgICAgIGNoYXIgKmVkaXRvcnMgPSBOVUxMOworICAgICBpbnQgZWRpdG9yc19mb3Vu
ZCA9IDA7CisgICAgIEZJTEUgKmZwOworICAgICB0aW1lX3Qgbm93OworICAgICBpbnQgc3RhdHVz
OworICAgICBjaGFyICphc2Nub3c7CisgICAgIGNoYXIgKmJhc2VmaWxlbmFtZTsKKyAKKyAjaWZk
ZWYgQ0xJRU5UX1NVUFBPUlQKKyAgICAgaWYgKGNsaWVudF9hY3RpdmUpCisgICAgIHsKKyAgICAg
ICAgIGludCBsZW4gPSAwOworICAgICAgICAgaW50IHBvc3NpYmx5X21vcmVfZWRpdG9ycyA9IDA7
CisgCisgICAgICAgICBzZW5kX2ZpbGVfbmFtZXMgKDEsICZmaW5mby0+ZnVsbG5hbWUsIFNFTkRf
RVhQQU5EX1dJTEQpOworICAgICAgICAgc2VuZF90b19zZXJ2ZXIgKCJlZGl0b3JzXDAxMiIsIDAp
OworIAorICAgICAgICAgZG8KKyAgICAgICAgIHsKKyAgICAgICAgICAgICBwb3NzaWJseV9tb3Jl
X2VkaXRvcnMgPSAwOworIAorICAgICAgICAgICAgIHRvX3NlcnZlcl9idWZmZXJfZmx1c2ggKCk7
CisgICAgICAgICAgICAgZnJvbV9zZXJ2ZXJfYnVmZmVyX3JlYWQgKCZlZGl0b3JzLCAmbGVuKTsK
KyAKKyAgICAgICAgICAgICBpZiAoZWRpdG9ycyAhPSBOVUxMKQorICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgaWYgKHN0cmNtcCAoZWRpdG9ycywgIm9rIikgIT0gMCkKKyAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcG9zc2libHlfbW9yZV9lZGl0b3JzID0g
MTsKKyAKKyAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JzWzBdID09ICdNJykKKyAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JzX2ZvdW5k
ID0gMTsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZighcmVhbGx5X3F1aWV0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Zz
X291dHB1dCAoZWRpdG9ycyArIDIsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dnNfb3V0cHV0ICgiXG4iLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc3BvbnNlICpycyA9
IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY21kID0gTlVMTDsKKyAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBlZGl0b3JzOworIAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAocnMgPSByZXNwb25zZXM7IHJzLT5uYW1lICE9IE5VTEw7ICsrcnMpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RybmNtcCAoY21kLCBycy0+bmFtZSwgc3RybGVuIChycy0+bmFtZSkpID09IDApCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjbWRsZW4gPSBzdHJsZW4gKHJzLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjbWRbY21kbGVuXSA9PSAnICcpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKytjbWRsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjbWRbY21kbGVuXSAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICogVGhlIGZpcnN0IGxlbiBjaGFyYWN0ZXJzIG1hdGNoLCBidXQgaXQncyBhIGRpZmZlcmVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc3BvbnNlLiAgZS5nLiB0
aGUgcmVzcG9uc2UgaXMgIm9rbGFob21hIiBidXQgd2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBtYXRjaGVkICJvayIuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnJzLT5mdW5jKSAoY21k
ICsgY21kbGVuLCBsZW4gLSBjbWRsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJzLT5uYW1lID09
IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBJdCdzIE9LIHRvIHByaW50IGp1c3QgdG8gdGhlIGZpcnN0ICdcMCcuICAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBtaWdodCB3YW50IHRvIGhhbmRsZSBj
b250cm9sIGNoYXJhY3RlcnMgYW5kIHRoZSBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIHNvbWUgb3RoZXIgd2F5IG90aGVyIHRoYW4ganVzdCBzZW5kaW5nIHRoZW0gdG8g
c3Rkb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmUgY29tbW9uIHJlYXNv
biBmb3IgdGhpcyBlcnJvciBpcyBpZiBwZW9wbGUgdXNlIDpleHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpdGggYSB2ZXJzaW9uIG9mIHJzaCB3aGljaCBpcyBkb2luZyBDUkxG
IHRyYW5zbGF0aW9uIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWV0aGlu
ZywgYW5kIHNvIHRoZSBjbGllbnQgZ2V0cyAib2teTSIgaW5zdGVhZCBvZiAib2siLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSaWdodCBub3cgdGhhdCB3aWxsIHRlbmQgdG8gcHJp
bnQgcGFydCBvZiB0aGlzIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2Ugb3ZlciB0aGUgb3RoZXIgcGFydCBvZiBpdC4gIEl0IHNlZW1zIGxpa2Ugd2UgY291bGQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gYmV0dGVyIChlaXRoZXIgaW4gZ2Vu
ZXJhbCwgYnkgcXVvdGluZyBvciBvbWl0dGluZyBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udHJvbCBjaGFyYWN0ZXJzLCBhbmQvb3Igc3BlY2lmaWNhbGx5LCBieSBkZXRl
Y3RpbmcgdGhlIENSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBhbmQg
cHJpbnRpbmcgYSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlKS4gICovCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yICgwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIndhcm5pbmc6IHVucmVjb2duaXplZCByZXNwb25zZSBgJXMnIGZyb20gY3ZzIHNlcnZl
ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgfQorIAorICAgICAgICAgICAgICAgICBmcmVlKGVkaXRvcnMpOworICAgICAgICAgICAgIH0K
KyAgICAgICAgIH0gd2hpbGUgKHBvc3NpYmx5X21vcmVfZWRpdG9ycyk7CisgICAgIH0KKyAgICAg
ZWxzZQorICNlbmRpZiAvKiBDTElFTlRfU1VQUE9SVCAqLworICAgICB7CisgICAgICAgICAvKiBU
aGlzIGlzIGEgc29tZXdoYXQgc2NyZXd5IHdheSB0byBjaGVjayBmb3IgdGhpcywgYmVjYXVzZSBp
dAorICAgICAgICAgICAgZG9lc24ndCBoZWxwIGVycm9ycyBvdGhlciB0aGFuIHRoZSBub25leGlz
dGVuY2Ugb2YgdGhlIGZpbGUKKyAgICAgICAgICAgIChlLmcuIHBlcm1pc3Npb25zIHByb2JsZW1z
KS4gIEl0IG1pZ2h0IGJlIGJldHRlciB0byByZWFycmFuZ2UKKyAgICAgICAgICAgIHRoZSBjb2Rl
IHNvIHRoYXQgQ1ZTQURNX05PVElGWSBnZXRzIHdyaXR0ZW4gb25seSBhZnRlciB0aGUKKyAgICAg
ICAgICAgIHZhcmlvdXMgYWN0aW9ucyBzdWNjZWVkIChidXQgd2hhdCBpZiBvbmx5IHNvbWUgb2Yg
dGhlbQorICAgICAgICAgICAgc3VjY2VlZCkuICAqLworICAgICAgICAgaWYgKCFpc2ZpbGUgKGZp
bmZvLT5maWxlKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBlcnJvciAoMCwgMCwgIm5vIHN1
Y2ggZmlsZSAlczsgaWdub3JlZCIsIGZpbmZvLT5mdWxsbmFtZSk7CisgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICB9CisgCisgICAgICAgICBlZGl0b3JzID0gZmlsZWF0dHJfZ2V0MCAo
ZmluZm8tPmZpbGUsICJfZWRpdG9ycyIpOworICAgICAgICAgaWYoIXJlYWxseV9xdWlldCAmJiBl
ZGl0b3JzICE9IE5VTEwpCisgICAgICAgICB7CisgICAgICAgICAgICAgZWRpdG9yc19vdXRwdXQg
KGZpbmZvKTsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIGlmKGVkaXRvcnMgIT0gTlVMTCkKKyAg
ICAgICAgIHsKKyAgICAgICAgICAgICBlZGl0b3JzX2ZvdW5kID0gMTsKKyAKKyAgICAgICAgICAg
ICBmcmVlIChlZGl0b3JzKTsKKyAgICAgICAgIH0KKyAgICAgfQorIAorICAgICBpZihjaGVja19l
ZGl0ZWQgJiYgZWRpdG9yc19mb3VuZCkKKyAgICAgeworICAgICAgICAgc3RhdHVzID0gMTsKKyAg
ICAgfQorICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgIH0KKyAK
KyAgICAgcmV0dXJuIHN0YXR1czsKKyB9CisgCisgc3RhdGljIGludCBjaGVja19lZGl0cyBQUk9U
TyAoKGludCwgY2hhciAqKiwgaW50KSk7CisgCisgLyogTG9vayB0aHJvdWdoIHRoZSBDVlMvZmls
ZWF0dHIgZmlsZSBhbmQgY2hlY2sgZm9yIGVkaXRvcnMgKi8KKyBzdGF0aWMgaW50CisgY2hlY2tf
ZWRpdHMgKGFyZ2MsIGFyZ3YsIGxvY2FsKQorICAgICBpbnQgYXJnYzsKKyAgICAgY2hhciAqKmFy
Z3Y7CisgICAgIGludCBsb2NhbDsKKyB7CisgICAgIGludCBlcnIgPSAwOworIAorICNpZmRlZiBD
TElFTlRfU1VQUE9SVAorICAgICBpZiAoY2xpZW50X2FjdGl2ZSkKKyAgICAgeworICAgICAgICAg
aWYgKHN0cmNtcCAoY29tbWFuZF9uYW1lLCAicmVsZWFzZSIpICE9IDApCisgICAgICAgICB7Cisg
ICAgICAgICAgICAgc3RhcnRfc2VydmVyICgpOworICAgICAgICAgICAgIGlnbl9zZXR1cCAoKTsK
KyAgICAgICAgIH0KKyAKKyAgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAgICBzZW5kX2Fy
ZyAoIi1sIik7CisgICAgICAgICBzZW5kX2ZpbGVzIChhcmdjLCBhcmd2LCBsb2NhbCwgMCwgU0VO
RF9OT19DT05URU5UUyk7CisgICAgIH0KKyAjZW5kaWYKKyAKKyAJZXJyICs9IHN0YXJ0X3JlY3Vy
c2lvbiAoY2hlY2tfZmlsZXByb2MsIChGSUxFU0RPTkVQUk9DKSBOVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoRElSRU5UUFJPQykgTlVMTCwgKERJUkxFQVZFUFJPQykgTlVMTCwg
TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnYywgYXJndiwgbG9jYWwsIFdf
TE9DQUwsIDAsIDAsIChjaGFyICopTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCk7CisgCisgI2lmZGVmIENMSUVOVF9TVVBQT1JUCisgICAgIGlmIChjbGllbnRfYWN0aXZlKQor
ICAgICB7CisgICAgICAgICBzZW5kX3RvX3NlcnZlciAoIm5vb3BcMDEyIiwgMCk7CisgICAgICAg
ICBpZiAoc3RyY21wIChjb21tYW5kX25hbWUsICJyZWxlYXNlIikgPT0gMCkKKyAgICAgICAgICAg
ICBlcnIgKz0gZ2V0X3NlcnZlcl9yZXNwb25zZXMgKCk7CisgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgZXJyICs9IGdldF9yZXNwb25zZXNfYW5kX2Nsb3NlICgpOworICAgICB9CisgI2VuZGlm
CisgICAgIHJldHVybiBlcnI7CisgfQorIAwKICBzdGF0aWMgaW50IGVkaXRfZmlsZXByb2MgUFJP
VE8gKCh2b2lkICpjYWxsZXJkYXQsIHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvKSk7CiAgCiAgc3Rh
dGljIGludAogIGVkaXRfZmlsZXByb2MgKGNhbGxlcmRhdCwgZmluZm8pCiAgICAgIHZvaWQgKmNh
bGxlcmRhdDsKICAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87CiAgewogICAgICBGSUxFICpm
cDsKICAgICAgdGltZV90IG5vdzsKICAgICAgY2hhciAqYXNjbm93OwogICAgICBjaGFyICpiYXNl
ZmlsZW5hbWU7CiAgCiAgICAgIGlmIChub2V4ZWMpCiAgCXJldHVybiAwOwogIAogICAgICAvKiBU
aGlzIGlzIGEgc29tZXdoYXQgc2NyZXd5IHdheSB0byBjaGVjayBmb3IgdGhpcywgYmVjYXVzZSBp
dAoqKioqKioqKioqKioqKioKKioqIDMzOCw0MDAgKioqKgogICAgICBjb3B5X2ZpbGUgKGZpbmZv
LT5maWxlLCBiYXNlZmlsZW5hbWUpOwogICAgICBmcmVlIChiYXNlZmlsZW5hbWUpOwogIAogICAg
ICB7CiAgCU5vZGUgKm5vZGU7CiAgCiAgCW5vZGUgPSBmaW5kbm9kZV9mbiAoZmluZm8tPmVudHJp
ZXMsIGZpbmZvLT5maWxlKTsKICAJaWYgKG5vZGUgIT0gTlVMTCkKICAJICAgIGJhc2VfcmVnaXN0
ZXIgKGZpbmZvLCAoKEVudG5vZGUgKikgbm9kZS0+ZGF0YSktPnZlcnNpb24pOwogICAgICB9CiAg
CiAgICAgIHJldHVybiAwOwogIH0KICAKICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZWRpdF91
c2FnZVtdID0KICB7CiEgICAgICJVc2FnZTogJXMgJXMgWy1sUl0gW2ZpbGVzLi4uXVxuIiwKICAg
ICAgIi1sOiBMb2NhbCBkaXJlY3Rvcnkgb25seSwgbm90IHJlY3Vyc2l2ZVxuIiwKICAgICAgIi1S
OiBQcm9jZXNzIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5XG4iLAogICAgICAiLWE6IFNwZWNpZnkg
d2hhdCBhY3Rpb25zIGZvciB0ZW1wb3Jhcnkgd2F0Y2gsIG9uZSBvZlxuIiwKICAgICAgIiAgICBl
ZGl0LHVuZWRpdCxjb21taXQsYWxsLG5vbmVcbiIsCiAgICAgICIoU3BlY2lmeSB0aGUgLS1oZWxw
IGdsb2JhbCBvcHRpb24gZm9yIGEgbGlzdCBvZiBvdGhlciBoZWxwIG9wdGlvbnMpXG4iLAogICAg
ICBOVUxMCiAgfTsKICAKICBpbnQKICBlZGl0IChhcmdjLCBhcmd2KQogICAgICBpbnQgYXJnYzsK
ICAgICAgY2hhciAqKmFyZ3Y7CiAgewogICAgICBpbnQgbG9jYWwgPSAwOwogICAgICBpbnQgYzsK
ISAgICAgaW50IGVycjsKICAgICAgaW50IGFfb21pdHRlZDsKICAKICAgICAgaWYgKGFyZ2MgPT0g
LTEpCiAgCXVzYWdlIChlZGl0X3VzYWdlKTsKICAKICAgICAgYV9vbWl0dGVkID0gMTsKICAgICAg
c2V0dGluZ190ZWRpdCA9IDA7CiAgICAgIHNldHRpbmdfdHVuZWRpdCA9IDA7CiAgICAgIHNldHRp
bmdfdGNvbW1pdCA9IDA7CiAgICAgIG9wdGluZCA9IDA7CiEgICAgIHdoaWxlICgoYyA9IGdldG9w
dCAoYXJnYywgYXJndiwgIitsUmE6IikpICE9IC0xKQogICAgICB7CiAgCXN3aXRjaCAoYykKICAJ
ewogIAkgICAgY2FzZSAnbCc6CiAgCQlsb2NhbCA9IDE7CiAgCQlicmVhazsKICAJICAgIGNhc2Ug
J1InOgogIAkJbG9jYWwgPSAwOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlICdhJzoKICAJCWFfb21p
dHRlZCA9IDA7CiAgCQlpZiAoc3RyY21wIChvcHRhcmcsICJlZGl0IikgPT0gMCkKICAJCSAgICBz
ZXR0aW5nX3RlZGl0ID0gMTsKICAJCWVsc2UgaWYgKHN0cmNtcCAob3B0YXJnLCAidW5lZGl0Iikg
PT0gMCkKICAJCSAgICBzZXR0aW5nX3R1bmVkaXQgPSAxOwogIAkJZWxzZSBpZiAoc3RyY21wIChv
cHRhcmcsICJjb21taXQiKSA9PSAwKQogIAkJICAgIHNldHRpbmdfdGNvbW1pdCA9IDE7CiAgCQll
bHNlIGlmIChzdHJjbXAgKG9wdGFyZywgImFsbCIpID09IDApCiAgCQl7Ci0tLSA1ODAsNjUwIC0t
LS0KICAgICAgY29weV9maWxlIChmaW5mby0+ZmlsZSwgYmFzZWZpbGVuYW1lKTsKICAgICAgZnJl
ZSAoYmFzZWZpbGVuYW1lKTsKICAKICAgICAgewogIAlOb2RlICpub2RlOwogIAogIAlub2RlID0g
ZmluZG5vZGVfZm4gKGZpbmZvLT5lbnRyaWVzLCBmaW5mby0+ZmlsZSk7CiAgCWlmIChub2RlICE9
IE5VTEwpCiAgCSAgICBiYXNlX3JlZ2lzdGVyIChmaW5mbywgKChFbnRub2RlICopIG5vZGUtPmRh
dGEpLT52ZXJzaW9uKTsKICAgICAgfQogIAogICAgICByZXR1cm4gMDsKICB9CiAgCiAgc3RhdGlj
IGNvbnN0IGNoYXIgKmNvbnN0IGVkaXRfdXNhZ2VbXSA9CiAgewohICAgICAiVXNhZ2U6ICVzICVz
IFstY2ZsUl0gW2ZpbGVzLi4uXVxuIiwKISAgICAgIi1jOiBDaGVjayB0aGF0IHdvcmtpbmcgZmls
ZXMgYXJlIHVuZWRpdGVkXG4iLAohICAgICAiLWY6IEZvcmNlIGVkaXQgaWYgd29ya2luZyBmaWxl
cyBhcmUgZWRpdGVkIChkZWZhdWx0KVxuIiwKICAgICAgIi1sOiBMb2NhbCBkaXJlY3Rvcnkgb25s
eSwgbm90IHJlY3Vyc2l2ZVxuIiwKICAgICAgIi1SOiBQcm9jZXNzIGRpcmVjdG9yaWVzIHJlY3Vy
c2l2ZWx5XG4iLAogICAgICAiLWE6IFNwZWNpZnkgd2hhdCBhY3Rpb25zIGZvciB0ZW1wb3Jhcnkg
d2F0Y2gsIG9uZSBvZlxuIiwKICAgICAgIiAgICBlZGl0LHVuZWRpdCxjb21taXQsYWxsLG5vbmVc
biIsCiAgICAgICIoU3BlY2lmeSB0aGUgLS1oZWxwIGdsb2JhbCBvcHRpb24gZm9yIGEgbGlzdCBv
ZiBvdGhlciBoZWxwIG9wdGlvbnMpXG4iLAogICAgICBOVUxMCiAgfTsKICAKICBpbnQKICBlZGl0
IChhcmdjLCBhcmd2KQogICAgICBpbnQgYXJnYzsKICAgICAgY2hhciAqKmFyZ3Y7CiAgewogICAg
ICBpbnQgbG9jYWwgPSAwOwogICAgICBpbnQgYzsKISAgICAgaW50IGVyciA9IDA7CiAgICAgIGlu
dCBhX29taXR0ZWQ7CiAgCiAgICAgIGlmIChhcmdjID09IC0xKQogIAl1c2FnZSAoZWRpdF91c2Fn
ZSk7CiAgCiAgICAgIGFfb21pdHRlZCA9IDE7CiAgICAgIHNldHRpbmdfdGVkaXQgPSAwOwogICAg
ICBzZXR0aW5nX3R1bmVkaXQgPSAwOwogICAgICBzZXR0aW5nX3Rjb21taXQgPSAwOwogICAgICBv
cHRpbmQgPSAwOwohICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICIrY2ZsUmE6
IikpICE9IC0xKQogICAgICB7CiAgCXN3aXRjaCAoYykKICAJeworICAgICAgICAgICAgIGNhc2Ug
J2MnOgorICAgICAgICAgICAgICAgICBjaGVja19lZGl0ZWQgPSAxOworICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgY2hlY2tf
ZWRpdGVkID0gMDsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CiAgCSAgICBjYXNlICdsJzoKICAJ
CWxvY2FsID0gMTsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnUic6CiAgCQlsb2NhbCA9IDA7CiAg
CQlicmVhazsKICAJICAgIGNhc2UgJ2EnOgogIAkJYV9vbWl0dGVkID0gMDsKICAJCWlmIChzdHJj
bXAgKG9wdGFyZywgImVkaXQiKSA9PSAwKQogIAkJICAgIHNldHRpbmdfdGVkaXQgPSAxOwogIAkJ
ZWxzZSBpZiAoc3RyY21wIChvcHRhcmcsICJ1bmVkaXQiKSA9PSAwKQogIAkJICAgIHNldHRpbmdf
dHVuZWRpdCA9IDE7CiAgCQllbHNlIGlmIChzdHJjbXAgKG9wdGFyZywgImNvbW1pdCIpID09IDAp
CiAgCQkgICAgc2V0dGluZ190Y29tbWl0ID0gMTsKICAJCWVsc2UgaWYgKHN0cmNtcCAob3B0YXJn
LCAiYWxsIikgPT0gMCkKICAJCXsKKioqKioqKioqKioqKioqCioqKiA0MjUsNDYyICoqKioKLS0t
IDY3NSw3MjAgLS0tLQogIAlzZXR0aW5nX3RlZGl0ID0gMTsKICAJc2V0dGluZ190dW5lZGl0ID0g
MTsKICAJc2V0dGluZ190Y29tbWl0ID0gMTsKICAgICAgfQogIAogICAgICBpZiAoc3RycGJyayAo
aG9zdG5hbWUsICIrLD47PVx0XG4iKSAhPSBOVUxMKQogIAllcnJvciAoMSwgMCwKICAJICAgICAg
ICJob3N0IG5hbWUgKCVzKSBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3RlciAoKyw+Oz1cXHRc
XG4pIiwKICAJICAgICAgIGhvc3RuYW1lKTsKICAgICAgaWYgKHN0cnBicmsgKEN1ckRpciwgIiss
Pjs9XHRcbiIpICE9IE5VTEwpCiAgCWVycm9yICgxLCAwLAogICJjdXJyZW50IGRpcmVjdG9yeSAo
JXMpIGNvbnRhaW5zIGFuIGludmFsaWQgY2hhcmFjdGVyICgrLD47PVxcdFxcbikiLAogIAkgICAg
ICAgQ3VyRGlyKTsKICAKICAgICAgLyogTm8gbmVlZCB0byByZWFkbG9jayBzaW5jZSB3ZSBhcmVu
J3QgZG9pbmcgYW55dGhpbmcgdG8gdGhlCiAgICAgICAgIHJlcG9zaXRvcnkuICAqLworICAgICBl
cnIgPSBjaGVja19lZGl0cyAoYXJnYywgYXJndiwgbG9jYWwpOworICAgICBpZihlcnIpCisgICAg
IHsKKyAgICAgICAgIGVycm9yICgxLCAwLCAiZmlsZXMgYmVpbmcgZWRpdGVkISIpOworICAgICB9
CisgICAgIGVsc2UKKyAgICAgewogICAgICBlcnIgPSBzdGFydF9yZWN1cnNpb24gKGVkaXRfZmls
ZXByb2MsIChGSUxFU0RPTkVQUk9DKSBOVUxMLAogIAkJCSAgIChESVJFTlRQUk9DKSBOVUxMLCAo
RElSTEVBVkVQUk9DKSBOVUxMLCBOVUxMLAogIAkJCSAgIGFyZ2MsIGFyZ3YsIGxvY2FsLCBXX0xP
Q0FMLCAwLCAwLCAoY2hhciAqKU5VTEwsCiAgCQkJICAgMCk7CiAgCiAgICAgIGVyciArPSBzZW5k
X25vdGlmaWNhdGlvbnMgKGFyZ2MsIGFyZ3YsIGxvY2FsKTsKKyAgICAgfQogIAogICAgICByZXR1
cm4gZXJyOwogIH0KICAKICBzdGF0aWMgaW50IHVuZWRpdF9maWxlcHJvYyBQUk9UTyAoKHZvaWQg
KmNhbGxlcmRhdCwgc3RydWN0IGZpbGVfaW5mbyAqZmluZm8pKTsKICAKICBzdGF0aWMgaW50CiAg
dW5lZGl0X2ZpbGVwcm9jIChjYWxsZXJkYXQsIGZpbmZvKQogICAgICB2b2lkICpjYWxsZXJkYXQ7
CiAgICAgIHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvOwogIHsKICAgICAgRklMRSAqZnA7CiAgICAg
IHRpbWVfdCBub3c7CiAgICAgIGNoYXIgKmFzY25vdzsKICAgICAgY2hhciAqYmFzZWZpbGVuYW1l
OwogIAoqKioqKioqKioqKioqKioKKioqIDEwMjEsMTA5OCAqKioqCiAgCiAgc3RhdGljIGNvbnN0
IGNoYXIgKmNvbnN0IGVkaXRvcnNfdXNhZ2VbXSA9CiAgewogICAgICAiVXNhZ2U6ICVzICVzIFst
bFJdIFtmaWxlcy4uLl1cbiIsCiAgICAgICJcdC1sXHRQcm9jZXNzIHRoaXMgZGlyZWN0b3J5IG9u
bHkgKG5vdCByZWN1cnNpdmUpLlxuIiwKICAgICAgIlx0LVJcdFByb2Nlc3MgZGlyZWN0b3JpZXMg
cmVjdXJzaXZlbHkuXG4iLAogICAgICAiKFNwZWNpZnkgdGhlIC0taGVscCBnbG9iYWwgb3B0aW9u
IGZvciBhIGxpc3Qgb2Ygb3RoZXIgaGVscCBvcHRpb25zKVxuIiwKICAgICAgTlVMTAogIH07CiAg
CiAgc3RhdGljIGludCBlZGl0b3JzX2ZpbGVwcm9jIFBST1RPICgodm9pZCAqY2FsbGVyZGF0LCBz
dHJ1Y3QgZmlsZV9pbmZvICpmaW5mbykpOwogIAogIHN0YXRpYyBpbnQKICBlZGl0b3JzX2ZpbGVw
cm9jIChjYWxsZXJkYXQsIGZpbmZvKQogICAgICB2b2lkICpjYWxsZXJkYXQ7CiAgICAgIHN0cnVj
dCBmaWxlX2luZm8gKmZpbmZvOwotIHsKLSAgICAgY2hhciAqdGhlbTsKLSAgICAgY2hhciAqcDsK
LSAKLSAgICAgdGhlbSA9IGZpbGVhdHRyX2dldDAgKGZpbmZvLT5maWxlLCAiX2VkaXRvcnMiKTsK
LSAgICAgaWYgKHRoZW0gPT0gTlVMTCkKLSAJcmV0dXJuIDA7Ci0gCi0gICAgIGN2c19vdXRwdXQg
KGZpbmZvLT5mdWxsbmFtZSwgMCk7Ci0gCi0gICAgIHAgPSB0aGVtOwotICAgICB3aGlsZSAoMSkK
LSAgICAgewotIAljdnNfb3V0cHV0ICgiXHQiLCAxKTsKLSAJd2hpbGUgKCpwICE9ICc+JyAmJiAq
cCAhPSAnXDAnKQotIAkgICAgY3ZzX291dHB1dCAocCsrLCAxKTsKLSAJaWYgKCpwID09ICdcMCcp
Ci0gCXsKLSAJICAgIC8qIE9ubHkgaGFwcGVucyBpZiBhdHRyaWJ1dGUgaXMgbWlzZm9ybWVkLiAg
Ki8KLSAJICAgIGN2c19vdXRwdXQgKCJcbiIsIDEpOwotIAkgICAgYnJlYWs7Ci0gCX0KLSAJKytw
OwotIAljdnNfb3V0cHV0ICgiXHQiLCAxKTsKLSAJd2hpbGUgKDEpCi0gCXsKLSAJICAgIHdoaWxl
ICgqcCAhPSAnKycgJiYgKnAgIT0gJywnICYmICpwICE9ICdcMCcpCi0gCQljdnNfb3V0cHV0IChw
KyssIDEpOwotIAkgICAgaWYgKCpwID09ICdcMCcpCi0gCSAgICB7Ci0gCQljdnNfb3V0cHV0ICgi
XG4iLCAxKTsKLSAJCWdvdG8gb3V0OwotIAkgICAgfQotIAkgICAgaWYgKCpwID09ICcsJykKICAJ
ICAgIHsKISAJCSsrcDsKISAJCWJyZWFrOwohIAkgICAgfQohIAkgICAgKytwOwohIAkgICAgY3Zz
X291dHB1dCAoIlx0IiwgMSk7CiEgCX0KISAJY3ZzX291dHB1dCAoIlxuIiwgMSk7CiEgICAgIH0K
ISAgIG91dDo7CiEgICAgIGZyZWUgKHRoZW0pOwohICAgICByZXR1cm4gMDsKICB9CiAgCiAgaW50
CiAgZWRpdG9ycyAoYXJnYywgYXJndikKICAgICAgaW50IGFyZ2M7CiAgICAgIGNoYXIgKiphcmd2
OwogIHsKICAgICAgaW50IGxvY2FsID0gMDsKICAgICAgaW50IGM7CiAgCiAgICAgIGlmIChhcmdj
ID09IC0xKQogIAl1c2FnZSAoZWRpdG9yc191c2FnZSk7CiAgCiAgICAgIG9wdGluZCA9IDA7CiAg
ICAgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIitsUiIpKSAhPSAtMSkKICAgICAg
ewotLS0gMTI3OSwxMzEyIC0tLS0KICAKICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZWRpdG9y
c191c2FnZVtdID0KICB7CiAgICAgICJVc2FnZTogJXMgJXMgWy1sUl0gW2ZpbGVzLi4uXVxuIiwK
ICAgICAgIlx0LWxcdFByb2Nlc3MgdGhpcyBkaXJlY3Rvcnkgb25seSAobm90IHJlY3Vyc2l2ZSku
XG4iLAogICAgICAiXHQtUlx0UHJvY2VzcyBkaXJlY3RvcmllcyByZWN1cnNpdmVseS5cbiIsCiAg
ICAgICIoU3BlY2lmeSB0aGUgLS1oZWxwIGdsb2JhbCBvcHRpb24gZm9yIGEgbGlzdCBvZiBvdGhl
ciBoZWxwIG9wdGlvbnMpXG4iLAogICAgICBOVUxMCiAgfTsKICAKICBzdGF0aWMgaW50IGVkaXRv
cnNfZmlsZXByb2MgUFJPVE8gKCh2b2lkICpjYWxsZXJkYXQsIHN0cnVjdCBmaWxlX2luZm8gKmZp
bmZvKSk7CiAgCiAgc3RhdGljIGludAogIGVkaXRvcnNfZmlsZXByb2MgKGNhbGxlcmRhdCwgZmlu
Zm8pCiAgICAgIHZvaWQgKmNhbGxlcmRhdDsKICAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87
CiAgewohICAgICByZXR1cm4gZWRpdG9yc19vdXRwdXQgKGZpbmZvKTsKICB9CiAgCiAgaW50CiAg
ZWRpdG9ycyAoYXJnYywgYXJndikKICAgICAgaW50IGFyZ2M7CiAgICAgIGNoYXIgKiphcmd2Owog
IHsKICAgICAgaW50IGxvY2FsID0gMDsKICAgICAgaW50IGM7CiAgCiAgICAgIGlmIChhcmdjID09
IC0xKQogIAl1c2FnZSAoZWRpdG9yc191c2FnZSk7CiAgCiAgICAgIG9wdGluZCA9IDA7CiAgICAg
IHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIitsUiIpKSAhPSAtMSkKICAgICAgewpJ
bmRleDogc3JjL3ZlcnNpb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNy
b290L2N2cy9zcmMvdmVyc2lvbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xLjEuMS4yLjEKZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4x
LjEuMi4xCioqKiBzcmMvdmVyc2lvbi5jCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0g
c3JjL3ZlcnNpb24uYwkyMDAxLzAzLzA3IDIzOjAxOjMzCTEuMS4xLjEuMi4xCioqKioqKioqKioq
KioqKgoqKiogMSwzMSAqKioqCiAgLyoKICAgKiBDb3B5cmlnaHQgKGMpIDE5OTQgZGF2aWQgZCBg
em9vJyB6dWhuCiAgICogQ29weXJpZ2h0IChjKSAxOTk0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLgogICAqIENvcHlyaWdodCAoYykgMTk5MiwgQnJpYW4gQmVybGluZXIgYW5kIEplZmYg
UG9sawogICAqIENvcHlyaWdodCAoYykgMTk4OS0xOTkyLCBCcmlhbiBCZXJsaW5lcgogICAqIAog
ICAqIFlvdSBtYXkgZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGFzCiAgICogc3BlY2lmaWVkIGluIHRoZSBSRUFETUUgZmlsZSB0aGF0
IGNvbWVzIHdpdGggdGhpcyAgQ1ZTIHNvdXJjZSBkaXN0cmlidXRpb24uCiAgICogCiAgICogdmVy
c2lvbi5jIC0gdGhlIENWUyB2ZXJzaW9uIG51bWJlcgogICAqLwogIAogICNpbmNsdWRlICJjdnMu
aCIKICAKISBjaGFyICp2ZXJzaW9uX3N0cmluZyA9ICJDb25jdXJyZW50IFZlcnNpb25zIFN5c3Rl
bSAoQ1ZTKSAxLjExIjsKICAKICAjaWZkZWYgQ0xJRU5UX1NVUFBPUlQKICAjaWZkZWYgU0VSVkVS
X1NVUFBPUlQKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50L3NlcnZlcilcbiI7CiAg
I2Vsc2UKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50KVxuIjsKICAjZW5kaWYKICAj
ZWxzZQogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChz
ZXJ2ZXIpXG4iOwogICNlbHNlCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICJcbiI7CiAgI2VuZGlm
CiAgI2VuZGlmCiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZlcnNpb25fdXNhZ2VbXSA9
Ci0tLSAxLDMxIC0tLS0KICAvKgogICAqIENvcHlyaWdodCAoYykgMTk5NCBkYXZpZCBkIGB6b28n
IHp1aG4KICAgKiBDb3B5cmlnaHQgKGMpIDE5OTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuCiAgICogQ29weXJpZ2h0IChjKSAxOTkyLCBCcmlhbiBCZXJsaW5lciBhbmQgSmVmZiBQb2xr
CiAgICogQ29weXJpZ2h0IChjKSAxOTg5LTE5OTIsIEJyaWFuIEJlcmxpbmVyCiAgICoKICAgKiBZ
b3UgbWF5IGRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcwogICAqIHNwZWNpZmllZCBpbiB0aGUgUkVBRE1FIGZpbGUgdGhhdCBjb21l
cyB3aXRoIHRoaXMgIENWUyBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICAqCiAgICogdmVyc2lvbi5j
IC0gdGhlIENWUyB2ZXJzaW9uIG51bWJlcgogICAqLwogIAogICNpbmNsdWRlICJjdnMuaCIKICAK
ISBjaGFyICp2ZXJzaW9uX3N0cmluZyA9ICJDb25jdXJyZW50IFZlcnNpb25zIFN5c3RlbSAoQ1ZT
KSAxLjExIChyZXNlcnZhdGlvbnMpIjsKICAKICAjaWZkZWYgQ0xJRU5UX1NVUFBPUlQKICAjaWZk
ZWYgU0VSVkVSX1NVUFBPUlQKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50L3NlcnZl
cilcbiI7CiAgI2Vsc2UKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50KVxuIjsKICAj
ZW5kaWYKICAjZWxzZQogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogIGNoYXIgKmNvbmZpZ19zdHJp
bmcgPSAiIChzZXJ2ZXIpXG4iOwogICNlbHNlCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICJcbiI7
CiAgI2VuZGlmCiAgI2VuZGlmCiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZlcnNpb25f
dXNhZ2VbXSA9CioqKioqKioqKioqKioqKgoqKiogNTksNzUgKioqKgogICAgICBpZiAoY2xpZW50
X2FjdGl2ZSkKICAgICAgewogIAkodm9pZCkgZnB1dHMgKCJTZXJ2ZXI6ICIsIHN0ZG91dCk7CiAg
CXN0YXJ0X3NlcnZlciAoKTsKICAJaWYgKHN1cHBvcnRlZF9yZXF1ZXN0ICgidmVyc2lvbiIpKQog
IAkgICAgc2VuZF90b19zZXJ2ZXIgKCJ2ZXJzaW9uXDAxMiIsIDApOwogIAllbHNlCiAgCXsKICAJ
ICAgIHNlbmRfdG9fc2VydmVyICgibm9vcFwwMTIiLCAwKTsKICAJICAgIGZwdXRzICgiKHVua25v
d24pXG4iLCBzdGRvdXQpOwogIAl9CiAgCWVyciA9IGdldF9yZXNwb25zZXNfYW5kX2Nsb3NlICgp
OwogICAgICB9CiAgI2VuZGlmCiAgICAgIHJldHVybiBlcnI7CiAgfQotIAkKLS0tIDU5LDc0IC0t
LS0K

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: application/octet-stream; 
        name="enh-multiple_edits+reservations.diff"
Content-Disposition: attachment;
filename="enh-multiple_edits+reservations.diff"
Content-transfer-encoding: base64

PyBlbmgtbXVsdGlwbGVfZWRpdHMrcmVzZXJ2YXRpb25zLmRpZmYKPyB2bXMvTWFrZWZpbGUKSW5k
ZXg6IGxpYi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9v
dC9jdnMvbGliL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMS4xLjEuNi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4x
LjYuMQoqKiogbGliL0NoYW5nZUxvZwkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIGxp
Yi9DaGFuZ2VMb2cJMjAwMS8wMy8wNyAyMzozNTowMAkxLjEuMS4xLjYuMQoqKioqKioqKioqKioq
KioKKioqIDEsMTYgKioqKgotLS0gMSwyNSAtLS0tCisgMjAwMS0wMy0wNiAgTm9lbCBZYXAgPHlh
cF9ub2VsQHlhaG9vLmNvbT4KKyAKKyAJKiBzdHJpcHNsYXNoLmMgKHN0cmlwX3RyYWlsaW5nX3Ns
YXNoZXMpCisgCUNoYW5nZWQgdG8gdXNlIElTRElSU0VQKCkuCisgCisgCSogc3lzdGVtLmggKElT
RElSU0VQKQorIAlDaGFuZ2VkIG9uIE5UIHRvIGNoZWNrIGZvciAnXFwnIGFzIHdlbGwuCisgCURJ
UlNFUCBhZGRlZCB0byBiZSB0aGUgdHlwaWNhbCBkaXJlY3Rvcnkgc2VwYXJhdG9yIHN0cmluZy4K
KyAKICAyMDAwLTA3LTEwICBMYXJyeSBKb25lcyAgPGxhcnJ5LmpvbmVzQHNkcmMuY29tPgogIAog
IAkqIHNhdmVjd2QuYzogI2luY2x1ZGUgPHN5cy90eXBlcy5oPiBiZWZvcmUgPGZjbnRsLmg+Lgog
IAogIDIwMDAtMDctMDQgIEthcmwgRm9nZWwgIDxrZm9nZWxAcmVkLWJlYW4uY29tPgogIAogIAkq
IGdldGxpbmUuaCwgZ2V0bGluZS5jIChnZXRzdHIpOiB0YWtlIG5ldyBsaW1pdCBhcmcuCiAgCShH
RVRMSU5FX05PX0xJTUlUKTogbmV3ICNkZWZpbmUuCiAgCShnZXRsaW5lX3NhZmUpOiBuZXcgZnVu
Y3Rpb24sIHRha2VzIGxpbWl0IGFyZyBhbmQgcGFzc2VzIGl0IG9uLgogIAkoZ2V0bGluZSk6IHBh
c3MgR0VUTElORV9OT19MSU1JVCB0byBnZXRzdHIoKS4KICAKICAJU2VlIHJlbGF0ZWQgY2hhbmdl
IG9mIHNhbWUgZGF0ZSBpbiAuLi9zcmMvQ2hhbmdlTG9nLgogIAogIDIwMDAtMDYtMTkgIExhcnJ5
IEpvbmVzICA8bGFycnkuam9uZXNAc2RyYy5jb20+CiAgCiAgCSogcmVnZXguYywgcmVnZXguaDog
VmVyc2lvbiBmcm9tIGVtYWNzIDIwLjcgdG8gcGx1ZyBtZW1vcnkgbGVha3MKSW5kZXg6IGxpYi9z
dHJpcHNsYXNoLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMv
bGliL3N0cmlwc2xhc2guYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMS4xLjEuNi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjYu
MQoqKiogbGliL3N0cmlwc2xhc2guYwkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIGxp
Yi9zdHJpcHNsYXNoLmMJMjAwMS8wMy8wNyAyMzozNTowMAkxLjEuMS4xLjYuMQoqKioqKioqKioq
KioqKioKKioqIDIsNDAgKioqKgogICAgIENvcHlyaWdodCAoQykgMTk5MCBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4KICAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0
IHlvdXIgb3B0aW9uKQogICAgIGFueSBsYXRlciB2ZXJzaW9uLgogIAogICAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuICAqLwogIAogICNpZmRlZiBIQVZFX0NPTkZJR19ICiAgI2luY2x1ZGUgImNvbmZp
Zy5oIgogICNlbmRpZgogIAogICNpZiBTVERDX0hFQURFUlMgfHwgSEFWRV9TVFJJTkdfSAogICNp
bmNsdWRlIDxzdHJpbmcuaD4KICAvKiBBbiBBTlNJIHN0cmluZy5oIGFuZCBwcmUtQU5TSSBtZW1v
cnkuaCBtaWdodCBjb25mbGljdC4gKi8KICAjaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9S
WV9ICiAgI2luY2x1ZGUgPG1lbW9yeS5oPgogICNlbmRpZiAvKiBub3QgU1REQ19IRUFERVJTIGFu
ZCBIQVZFX01FTU9SWV9IICovCiAgI2Vsc2UgLyogbm90IFNURENfSEpFQURFUlMgYW5kIG5vdCBI
QVZFX1NUUklOR19IICovCiAgI2luY2x1ZGUgPHN0cmluZ3MuaD4KICAvKiBtZW1vcnkuaCBhbmQg
c3RyaW5ncy5oIGNvbmZsaWN0IG9uIHNvbWUgc3lzdGVtcy4gKi8KICAjZW5kaWYgLyogbm90IFNU
RENfSEVBREVSUyBhbmQgbm90IEhBVkVfU1RSSU5HX0ggKi8KICAKICAvKiBSZW1vdmUgdHJhaWxp
bmcgc2xhc2hlcyBmcm9tIFBBVEguICovCiAgCiAgdm9pZAogIHN0cmlwX3RyYWlsaW5nX3NsYXNo
ZXMgKHBhdGgpCiAgICAgICBjaGFyICpwYXRoOwogIHsKICAgIGludCBsYXN0OwogIAogICAgbGFz
dCA9IHN0cmxlbiAocGF0aCkgLSAxOwohICAgd2hpbGUgKGxhc3QgPiAwICYmIHBhdGhbbGFzdF0g
PT0gJy8nKQogICAgICBwYXRoW2xhc3QtLV0gPSAnXDAnOwogIH0KLS0tIDIsNDIgLS0tLQogICAg
IENvcHlyaWdodCAoQykgMTk5MCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAKICAg
ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICAgIGFueSBs
YXRlciB2ZXJzaW9uLgogIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAqLwogIAogICNpZmRl
ZiBIQVZFX0NPTkZJR19ICiAgI2luY2x1ZGUgImNvbmZpZy5oIgogICNlbmRpZgogIAorICNpbmNs
dWRlICJzeXN0ZW0uaCIKKyAKICAjaWYgU1REQ19IRUFERVJTIHx8IEhBVkVfU1RSSU5HX0gKICAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAgLyogQW4gQU5TSSBzdHJpbmcuaCBhbmQgcHJlLUFOU0kgbWVt
b3J5LmggbWlnaHQgY29uZmxpY3QuICovCiAgI2lmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1P
UllfSAogICNpbmNsdWRlIDxtZW1vcnkuaD4KICAjZW5kaWYgLyogbm90IFNURENfSEVBREVSUyBh
bmQgSEFWRV9NRU1PUllfSCAqLwogICNlbHNlIC8qIG5vdCBTVERDX0hKRUFERVJTIGFuZCBub3Qg
SEFWRV9TVFJJTkdfSCAqLwogICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAgLyogbWVtb3J5LmggYW5k
IHN0cmluZ3MuaCBjb25mbGljdCBvbiBzb21lIHN5c3RlbXMuICovCiAgI2VuZGlmIC8qIG5vdCBT
VERDX0hFQURFUlMgYW5kIG5vdCBIQVZFX1NUUklOR19IICovCiAgCiAgLyogUmVtb3ZlIHRyYWls
aW5nIHNsYXNoZXMgZnJvbSBQQVRILiAqLwogIAogIHZvaWQKICBzdHJpcF90cmFpbGluZ19zbGFz
aGVzIChwYXRoKQogICAgICAgY2hhciAqcGF0aDsKICB7CiAgICBpbnQgbGFzdDsKICAKICAgIGxh
c3QgPSBzdHJsZW4gKHBhdGgpIC0gMTsKISAgIHdoaWxlIChsYXN0ID4gMCAmJiBJU0RJUlNFUCAo
cGF0aFtsYXN0XSkpCiAgICAgIHBhdGhbbGFzdC0tXSA9ICdcMCc7CiAgfQpJbmRleDogbGliL3N5
c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL2xpYi9z
eXN0ZW0uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMS4xLjEuNi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjYuMQoqKiogbGli
L3N5c3RlbS5oCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gbGliL3N5c3RlbS5oCTIw
MDEvMDMvMDcgMjM6MzU6MDEJMS4xLjEuMS42LjEKKioqKioqKioqKioqKioqCioqKiA0NjcsNTI3
ICoqKioKICAvKiBXaWxkY2FyZCBtYXRjaGVyLiAgU2hvdWxkIGJlIGNhc2UtaW5zZW5zaXRpdmUg
aWYgdGhlIHN5c3RlbSBpcy4gICovCiAgI2lmbmRlZiBDVlNfRk5NQVRDSAogICNkZWZpbmUgQ1ZT
X0ZOTUFUQ0ggZm5tYXRjaAogICNlbmRpZgogIAogICNpZiBkZWZpbmVkIChfX0NZR1dJTjMyX18p
IHx8IGRlZmluZWQgKFdJTjMyKQogIAogIC8qIFVuZGVyIFdpbmRvd3MgTlQsIGZpbGVuYW1lcyBh
cmUgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIGJvdGggLyBhbmQgXAogICAgIGFyZSBwYXRoIGNvbXBv
bmVudCBzZXBhcmF0b3JzLiAgKi8KICAKICAjZGVmaW5lIEZPTERfRk5fQ0hBUihjKSAoV05UX2Zp
bGVuYW1lX2NsYXNzZXNbKHVuc2lnbmVkIGNoYXIpIChjKV0pCiAgZXh0ZXJuIHVuc2lnbmVkIGNo
YXIgV05UX2ZpbGVuYW1lX2NsYXNzZXNbXTsKICAjZGVmaW5lIEZJTEVOQU1FU19DQVNFX0lOU0VO
U0lUSVZFIDEKICAKICAvKiBJcyB0aGUgY2hhcmFjdGVyIEMgYSBwYXRoIG5hbWUgc2VwYXJhdG9y
PyAgVW5kZXIKICAgICBXaW5kb3dzIE5ULCB5b3UgY2FuIHVzZSBlaXRoZXIgLyBvciBcLiAgKi8K
ISAjZGVmaW5lIElTRElSU0VQKGMpIChGT0xEX0ZOX0NIQVIoYykgPT0gJy8nKQogIAogIC8qIExp
a2Ugc3RyY21wLCBidXQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdHdlYWtzIGZvciBmaWxlIG5hbWVz
LgogICAgIFVuZGVyIFdpbmRvd3MgTlQsIGZpbGVuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBi
dXQgY2FzZS1wcmVzZXJ2aW5nLAogICAgIGFuZCBib3RoIFwgYW5kIC8gYXJlIHBhdGggZWxlbWVu
dCBzZXBhcmF0b3JzLiAgKi8KICBleHRlcm4gaW50IGZuY21wIChjb25zdCBjaGFyICpuMSwgY29u
c3QgY2hhciAqbjIpOwogIAogIC8qIEZvbGQgY2hhcmFjdGVycyBpbiBGSUxFTkFNRSB0byB0aGVp
ciBjYW5vbmljYWwgZm9ybXMuICAKICAgICBJZiBGT0xEX0ZOX0NIQVIgaXMgbm90ICNkZWZpbmVk
LCB0aGUgc3lzdGVtIHByb3ZpZGVzIGEgZGVmYXVsdAogICAgIGRlZmluaXRpb24gZm9yIHRoaXMu
ICAqLwogIGV4dGVybiB2b2lkIGZuZm9sZCAoY2hhciAqRklMRU5BTUUpOwogIAogICNlbmRpZiAv
KiBkZWZpbmVkIChfX0NZR1dJTjMyX18pIHx8IGRlZmluZWQgKFdJTjMyKSAqLwogIAogIC8qIFNv
bWUgZmlsZSBzeXN0ZW1zIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiAgSWYgRk9MRF9GTl9DSEFSIGlz
CiAgICAgI2RlZmluZWQsIGl0IG1hcHMgdGhlIGNoYXJhY3RlciBDIG9udG8gaXRzICJjYW5vbmlj
YWwiIGZvcm0uICBJbiBhCiAgICAgY2FzZS1pbnNlbnNpdGl2ZSBzeXN0ZW0sIGl0IHdvdWxkIG1h
cCBhbGwgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMKICAgICB0byBsb3dlciBjYXNlLiAgVW5kZXIg
V2luZG93cyBOVCwgLyBhbmQgXCBhcmUgYm90aCBwYXRoIGNvbXBvbmVudAogICAgIHNlcGFyYXRv
cnMsIHNvIEZPTERfRk5fQ0hBUiB3b3VsZCBtYXAgdGhlbSBib3RoIHRvIC8uICAqLwogICNpZm5k
ZWYgRk9MRF9GTl9DSEFSCiAgI2RlZmluZSBGT0xEX0ZOX0NIQVIoYykgKGMpCiAgI2RlZmluZSBm
bmZvbGQoZmlsZW5hbWUpIChmaWxlbmFtZSkKICAjZGVmaW5lIGZuY21wIHN0cmNtcAogICNlbmRp
ZgogIAogIC8qIERpZmZlcmVudCBmaWxlIHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgcGF0aCBjb21w
b25lbnQgc2VwYXJhdG9ycy4KICAgICBGb3IgdGhlIFZNUyBwb3J0IHdlIG1pZ2h0IG5lZWQgdG8g
YWJzdHJhY3QgZnVydGhlciBiYWNrIHRoYW4gdGhpcy4gICovCiAgI2lmbmRlZiBJU0RJUlNFUAog
ICNkZWZpbmUgSVNESVJTRVAoYykgKChjKSA9PSAnLycpCiAgI2VuZGlmCiAgCiAgCiAgLyogT24g
c29tZSBzeXN0ZW1zLCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgd3JpdGluZy9yZWFkaW5n
IGZpbGVzCiAgICAgaW4gdGV4dCBvciBiaW5hcnkgbW9kZSAoc28gaW4gdGV4dCBtb2RlIHRoZSBz
eXN0ZW0gY2FuIGhhbmRsZSBDUkxGCiAgICAgdnMuIExGLCBWTVMgdGV4dCBmaWxlIGNvbnZlbnRp
b25zLCAmYykuICBXZSBkZWNpZGUgdG8ganVzdCBhbHdheXMKICAgICBiZSBjYXJlZnVsLiAgVGhh
dCB3YXkgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3aGV0aGVyIHRleHQgYW5kCiAgICAg
YmluYXJ5IGRpZmZlciBvbiB0aGlzIHN5c3RlbS4gIFdlIGp1c3QgaGF2ZSB0byB3b3JyeSBhYm91
dCB3aGV0aGVyCiAgICAgdGhlIHN5c3RlbSBoYXMgT19CSU5BUlkgYW5kICJyYiIuICBUaGUgbGF0
dGVyIGlzIGVhc3k7IGFsbCBBTlNJIEMKICAgICBsaWJyYXJpZXMgaGF2ZSBpdCwgU3VuT1M0IGhh
cyBpdCwgYW5kIENWUyBoYXMgdXNlZCBpdCB1bmd1YXJkZWQKICAgICBzb21lIHBsYWNlcyBmb3Ig
YSB3aGlsZSBub3cgd2l0aG91dCBjb21wbGFpbnRzIChlLmcuICJyYiIgaW4KICAgICBzZXJ2ZXIu
YyAoc2VydmVyX3VwZGF0ZWQpLCBzaW5jZSBDVlMgMS44KS4gIFRoZSBmb3JtZXIgaXMganVzdCBh
bgogICAgICNpZmRlZi4gICovCiAgCiAgI2RlZmluZSBGT1BFTl9CSU5BUllfUkVBRCAoInJiIikK
ICAjZGVmaW5lIEZPUEVOX0JJTkFSWV9XUklURSAoIndiIikKLS0tIDQ2Nyw1MzUgLS0tLQogIC8q
IFdpbGRjYXJkIG1hdGNoZXIuICBTaG91bGQgYmUgY2FzZS1pbnNlbnNpdGl2ZSBpZiB0aGUgc3lz
dGVtIGlzLiAgKi8KICAjaWZuZGVmIENWU19GTk1BVENICiAgI2RlZmluZSBDVlNfRk5NQVRDSCBm
bm1hdGNoCiAgI2VuZGlmCiAgCiAgI2lmIGRlZmluZWQgKF9fQ1lHV0lOMzJfXykgfHwgZGVmaW5l
ZCAoV0lOMzIpCiAgCiAgLyogVW5kZXIgV2luZG93cyBOVCwgZmlsZW5hbWVzIGFyZSBjYXNlLWlu
c2Vuc2l0aXZlLCBhbmQgYm90aCAvIGFuZCBcCiAgICAgYXJlIHBhdGggY29tcG9uZW50IHNlcGFy
YXRvcnMuICAqLwogIAogICNkZWZpbmUgRk9MRF9GTl9DSEFSKGMpIChXTlRfZmlsZW5hbWVfY2xh
c3Nlc1sodW5zaWduZWQgY2hhcikgKGMpXSkKICBleHRlcm4gdW5zaWduZWQgY2hhciBXTlRfZmls
ZW5hbWVfY2xhc3Nlc1tdOwogICNkZWZpbmUgRklMRU5BTUVTX0NBU0VfSU5TRU5TSVRJVkUgMQog
IAogIC8qIElzIHRoZSBjaGFyYWN0ZXIgQyBhIHBhdGggbmFtZSBzZXBhcmF0b3I/ICBVbmRlcgog
ICAgIFdpbmRvd3MgTlQsIHlvdSBjYW4gdXNlIGVpdGhlciAvIG9yIFwuICAqLwohICNkZWZpbmUg
SVNESVJTRVAoYykgKEZPTERfRk5fQ0hBUihjKSA9PSAnLycgIHx8ICBGT0xEX0ZOX0NIQVIoYykg
PT0gJ1xcJykKICAKICAvKiBMaWtlIHN0cmNtcCwgYnV0IHdpdGggdGhlIGFwcHJvcHJpYXRlIHR3
ZWFrcyBmb3IgZmlsZSBuYW1lcy4KICAgICBVbmRlciBXaW5kb3dzIE5ULCBmaWxlbmFtZXMgYXJl
IGNhc2UtaW5zZW5zaXRpdmUgYnV0IGNhc2UtcHJlc2VydmluZywKICAgICBhbmQgYm90aCBcIGFu
ZCAvIGFyZSBwYXRoIGVsZW1lbnQgc2VwYXJhdG9ycy4gICovCiAgZXh0ZXJuIGludCBmbmNtcCAo
Y29uc3QgY2hhciAqbjEsIGNvbnN0IGNoYXIgKm4yKTsKICAKICAvKiBGb2xkIGNoYXJhY3RlcnMg
aW4gRklMRU5BTUUgdG8gdGhlaXIgY2Fub25pY2FsIGZvcm1zLgogICAgIElmIEZPTERfRk5fQ0hB
UiBpcyBub3QgI2RlZmluZWQsIHRoZSBzeXN0ZW0gcHJvdmlkZXMgYSBkZWZhdWx0CiAgICAgZGVm
aW5pdGlvbiBmb3IgdGhpcy4gICovCiAgZXh0ZXJuIHZvaWQgZm5mb2xkIChjaGFyICpGSUxFTkFN
RSk7CiAgCiAgI2VuZGlmIC8qIGRlZmluZWQgKF9fQ1lHV0lOMzJfXykgfHwgZGVmaW5lZCAoV0lO
MzIpICovCiAgCiAgLyogU29tZSBmaWxlIHN5c3RlbXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuICBJ
ZiBGT0xEX0ZOX0NIQVIgaXMKICAgICAjZGVmaW5lZCwgaXQgbWFwcyB0aGUgY2hhcmFjdGVyIEMg
b250byBpdHMgImNhbm9uaWNhbCIgZm9ybS4gIEluIGEKICAgICBjYXNlLWluc2Vuc2l0aXZlIHN5
c3RlbSwgaXQgd291bGQgbWFwIGFsbCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycwogICAgIHRvIGxv
d2VyIGNhc2UuICBVbmRlciBXaW5kb3dzIE5ULCAvIGFuZCBcIGFyZSBib3RoIHBhdGggY29tcG9u
ZW50CiAgICAgc2VwYXJhdG9ycywgc28gRk9MRF9GTl9DSEFSIHdvdWxkIG1hcCB0aGVtIGJvdGgg
dG8gLy4gICovCiAgI2lmbmRlZiBGT0xEX0ZOX0NIQVIKICAjZGVmaW5lIEZPTERfRk5fQ0hBUihj
KSAoYykKICAjZGVmaW5lIGZuZm9sZChmaWxlbmFtZSkgKGZpbGVuYW1lKQogICNkZWZpbmUgZm5j
bXAgc3RyY21wCiAgI2VuZGlmCiAgCiAgLyogRGlmZmVyZW50IGZpbGUgc3lzdGVtcyBoYXZlIGRp
ZmZlcmVudCBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3JzLgogICAgIEZvciB0aGUgVk1TIHBvcnQg
d2UgbWlnaHQgbmVlZCB0byBhYnN0cmFjdCBmdXJ0aGVyIGJhY2sgdGhhbiB0aGlzLiAgKi8KICAj
aWZuZGVmIElTRElSU0VQCiAgI2RlZmluZSBJU0RJUlNFUChjKSAoKGMpID09ICcvJykKKyAjZW5k
aWYKKyAKKyAjaWZuZGVmIERJUlNFUAorICNpZiBkZWZpbmVkIChXSU4zMikKKyAjZGVmaW5lIERJ
UlNFUCAiXFwiCisgI2Vsc2UKKyAjZGVmaW5lIERJUlNFUCAiLyIKKyAjZW5kaWYgLyogZGVmaW5l
ZCAoV0lOMzIpICovCiAgI2VuZGlmCiAgCiAgCiAgLyogT24gc29tZSBzeXN0ZW1zLCB3ZSBoYXZl
IHRvIGJlIGNhcmVmdWwgYWJvdXQgd3JpdGluZy9yZWFkaW5nIGZpbGVzCiAgICAgaW4gdGV4dCBv
ciBiaW5hcnkgbW9kZSAoc28gaW4gdGV4dCBtb2RlIHRoZSBzeXN0ZW0gY2FuIGhhbmRsZSBDUkxG
CiAgICAgdnMuIExGLCBWTVMgdGV4dCBmaWxlIGNvbnZlbnRpb25zLCAmYykuICBXZSBkZWNpZGUg
dG8ganVzdCBhbHdheXMKICAgICBiZSBjYXJlZnVsLiAgVGhhdCB3YXkgd2UgZG9uJ3QgaGF2ZSB0
byB3b3JyeSBhYm91dCB3aGV0aGVyIHRleHQgYW5kCiAgICAgYmluYXJ5IGRpZmZlciBvbiB0aGlz
IHN5c3RlbS4gIFdlIGp1c3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3aGV0aGVyCiAgICAgdGhlIHN5
c3RlbSBoYXMgT19CSU5BUlkgYW5kICJyYiIuICBUaGUgbGF0dGVyIGlzIGVhc3k7IGFsbCBBTlNJ
IEMKICAgICBsaWJyYXJpZXMgaGF2ZSBpdCwgU3VuT1M0IGhhcyBpdCwgYW5kIENWUyBoYXMgdXNl
ZCBpdCB1bmd1YXJkZWQKICAgICBzb21lIHBsYWNlcyBmb3IgYSB3aGlsZSBub3cgd2l0aG91dCBj
b21wbGFpbnRzIChlLmcuICJyYiIgaW4KICAgICBzZXJ2ZXIuYyAoc2VydmVyX3VwZGF0ZWQpLCBz
aW5jZSBDVlMgMS44KS4gIFRoZSBmb3JtZXIgaXMganVzdCBhbgogICAgICNpZmRlZi4gICovCiAg
CiAgI2RlZmluZSBGT1BFTl9CSU5BUllfUkVBRCAoInJiIikKICAjZGVmaW5lIEZPUEVOX0JJTkFS
WV9XUklURSAoIndiIikKSW5kZXg6IHNyYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3JjL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuNi4xCmRpZmYgLUMxNiAtdyAt
cjEuMS4xLjEgLXIxLjEuMS4xLjYuMQoqKiogc3JjL0NoYW5nZUxvZwkyMDAxLzAzLzA2IDE2OjIx
OjIxCTEuMS4xLjEKLS0tIHNyYy9DaGFuZ2VMb2cJMjAwMS8wMy8wNyAyMzozNTowMQkxLjEuMS4x
LjYuMQoqKioqKioqKioqKioqKioKKioqIDEsMTYgKioqKgotLS0gMSw1NSAtLS0tCisgMjAwMS0w
My0wOCAgTm9lbCBZYXAgPHlhcF9ub2VsQHlhaG9vLmNvbT4KKyAKKyAJKiB2ZXJzaW9uLmM6IFZl
cnNpb24gMS4xMSAobXVsdGlwbGUgZWRpdHMrcmVzZXJ2YXRpb25zKQorIAorIAkqIGNsaWVudC5j
LCBjbGllbnQuaCAodG9fc2VydmVyX2J1ZmZlcl9mbHVzaCwgZnJvbV9zZXJ2ZXJfYnVmZmVyX3Jl
YWQpOgorIAljcmVhdGVkIGZ1bmN0aW9ucy4KKyAKKyAJKiBjb21taXQuYyAoY29tbWl0LCBjaGVj
a19maWxlcHJvYyk6CisgCSItYyIgb3B0aW9uIGFkZGVkIHRvIGNoZWNrIGZvciB2YWxpZCBlZGl0
LgorIAorIAkqIGNvbW1pdC5jIChmaW5kX2ZpbGVwcm9jLCBjb21taXQsIGNvbW1pdF9maWxlcHJv
YywgdXBkYXRlX2RlbHByb2MpOgorIAlGaWxlIGluZm9ybWF0aW9uIHNlbnQgdG8gc2VydmVyIGFu
ZCB1c2VkIHRvIHVuZWRpdCBmaWxlLgorIAorIAkqIGN2cy5oOgorIAlyZXBvc2l0b3J5LCBob3N0
bmFtZSwgd2QsIGFuZCBlZGl0b3IgYWRkZWQgdG8gbG9nZmlsZV9pbmZvCisgCisgCSogZWRpdC5j
IChlZGl0b3JzX291dHB1dCwgY2hlY2tfZmlsZXByb2MsIGNoZWNrX2VkaXRzLCBlZGl0KToKKyAJ
Ii1jIiBvcHRpb24gYWRkZWQgdG8gY2hlY2sgZm9yIGV4aXN0aW5nIGVkaXRvcnMuICAiLWYiIG9w
dGlvbiBhZGRlZCB0bworIAlmb3JjZSBlZGl0LgorIAorIAkqIGVkaXQuYyAobmNoZWNrX2ZpbGVw
cm9jLCBub3RpZnlfcHV0LCB1bmVkaXRfZmlsZXByb2MsIG5vdGlmeV9wcm9jLAorIAlub3RpZnlf
ZG8pOgorIAlFZGl0b3Iga2V5IGNoYW5nZWQgdG8gaW5jbHVkZSBmaWxlIGxvY2F0aW9uLgorIAor
IAkqIGVkaXQuYyAobm90aWZ5X3B1dCkKKyAJUmVsYXRpdmUgcGF0aHMgcmVtb3ZlZCBmcm9tIHdv
cmtpbmcgZGlyZWN0b3JpZXMuCisgCisgCSogZWRpdC5oIChub3RpZnlfZG8pOgorIAllZGl0b3Ig
YXJndW1lbnQgYWRkZWQuCisgCisgCSogcmNzLmMgKFJDU191bmxvY2spOgorIAlOb3RpZmljYXRp
b24gcmVtb3ZlZC4KKyAKKyAJKiBzZXJ2ZXIuYywgc2VydmVyLmggKHNlcnZlX2ZpbGVpbmZvLCBz
ZXJ2ZXJfZ2V0ZmlsZWluZm8sCisgCXNlcnZlcl9kZWxmaWxlaW5mb2xpc3QsIHNlcnZlX25vdGlm
eSwgc2VydmVyX25vdGlmeSk6CisgCUZpbGVJbmZvIGFkZGVkIHRvIGFsbG93IGNsaWVudCB0byB0
ZWxsIHNlcnZlciBhYm91dCBmaWxlCisgCWluZm9ybWF0aW9uIChlZyBmaWxlIGxvY2F0aW9uLCBl
ZGl0b3IpLiAgVGhpcyBpbmZvcm1hdGlvbgorIAlpcyB1c2VkIGJ5IGNvbW1pdCB0byBrbm93IHdo
aWNoIGVkaXRvciB0byB1bmVkaXQuCisgCiAgMjAwMC0wOS0xOSAgTGFycnkgSm9uZXMgIDxsYXJy
eS5qb25lc0BzZHJjLmNvbT4KICAKICAJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMS4xMS4KICAKICAy
MDAwLTA5LTA3ICBMYXJyeSBKb25lcyAgPGxhcnJ5LmpvbmVzQHNkcmMuY29tPgogIAogIAkqIE1h
a2VmaWxlLmluOiBVc2UgQGJpbmRpckAsIEBsaWJkaXJALCBAaW5mb2RpckAsIGFuZCBAbWFuZGly
QAogIAlmcm9tIGF1dG9jb25mLgogIAogIDIwMDAtMDgtMjMgIExhcnJ5IEpvbmVzICA8bGFycnku
am9uZXNAc2RyYy5jb20+CiAgCiAgCSogbWttb2R1bGVzLmMgKGluaXQpOiBDcmVhdGUgYW4gZW1w
dHkgdmFsLXRhZ3MgZmlsZSBpZiBpdCBkb2Vzbid0CiAgCWFscmVhZHkgZXhpc3QgdG8gYXZvaWQg
cHJvYmxlbXMgd2l0aCB1c2VycyBub3QgaGF2aW5nIHN1ZmZpY2llbnQKICAJcGVybWlzc2lvbnMg
dG8gY3JlYXRlIGl0IGxhdGVyLgogIAogIDIwMDAtMDktMDYgIEppbSBLaW5nZG9uICA8amtpbmdk
b25AZGhjcC1uZXQyMDAtODkuc3UudmFsaW51eC5jb20+CkluZGV4OiBzcmMvYWRkLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3JjL2FkZC5jLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS42LjEKZGlm
ZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuNi4xCioqKiBzcmMvYWRkLmMJMjAwMS8wMy8w
NiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvYWRkLmMJMjAwMS8wMy8wOCAxNDoyNjowNgkxLjEu
MS4xLjYuMQoqKioqKioqKioqKioqKioKKioqIDc3Nyw4MDggKioqKgotLS0gNzc3LDgxMiAtLS0t
CiAgCWZpbGVhdHRyX3NldGFsbCAoTlVMTCwgYXR0cnMpOwogIAlmaWxlYXR0cl93cml0ZSAoKTsK
ICAJZmlsZWF0dHJfZnJlZSAoKTsKICAJaWYgKGF0dHJzICE9IE5VTEwpCiAgCSAgICBmcmVlIChh
dHRycyk7CiAgCiAgCS8qCiAgCSAqIFNldCB1cCBhbiB1cGRhdGUgbGlzdCB3aXRoIGEgc2luZ2xl
IHRpdGxlIG5vZGUgZm9yIFVwZGF0ZV9Mb2dmaWxlCiAgCSAqLwogIAl1bGlzdCA9IGdldGxpc3Qg
KCk7CiAgCXAgPSBnZXRub2RlICgpOwogIAlwLT50eXBlID0gVVBEQVRFOwogIAlwLT5kZWxwcm9j
ID0gdXBkYXRlX2RlbHByb2M7CiAgCXAtPmtleSA9IHhzdHJkdXAgKCItIE5ldyBkaXJlY3Rvcnki
KTsKICAJbGkgPSAoc3RydWN0IGxvZ2ZpbGVfaW5mbyAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVj
dCBsb2dmaWxlX2luZm8pKTsKICAJbGktPnR5cGUgPSBUX1RJVExFOworICAgICAgICAgbGktPnJl
cG9zaXRvcnkgPSBOVUxMOworICAgICAgICAgbGktPmhvc3RuYW1lID0gTlVMTDsKKyAgICAgICAg
IGxpLT53ZCA9IE5VTEw7CisgICAgICAgICBsaS0+ZWRpdG9yID0gTlVMTDsKICAJbGktPnRhZyA9
IHhzdHJkdXAgKHRhZyk7CiAgCWxpLT5yZXZfb2xkID0gbGktPnJldl9uZXcgPSBOVUxMOwogIAlw
LT5kYXRhID0gKGNoYXIgKikgbGk7CiAgCSh2b2lkKSBhZGRub2RlICh1bGlzdCwgcCk7CiAgCVVw
ZGF0ZV9Mb2dmaWxlIChyY3NkaXIsIG1lc3NhZ2UsIChGSUxFICopIE5VTEwsIHVsaXN0KTsKICAJ
ZGVsbGlzdCAoJnVsaXN0KTsKICAgICAgfQogIAogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogICAg
ICBpZiAoIXNlcnZlcl9hY3RpdmUpCiAgI2VuZGlmCiAgICAgICAgICBDcmVhdGVfQWRtaW4gKCIu
IiwgZmluZm8tPmZ1bGxuYW1lLCByY3NkaXIsIHRhZywgZGF0ZSwgbm9uYnJhbmNoLCAwLCAxKTsK
ICAgICAgaWYgKHRhZykKICAJZnJlZSAodGFnKTsKICAgICAgaWYgKGRhdGUpCiAgCWZyZWUgKGRh
dGUpOwpJbmRleDogc3JjL2NsaWVudC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL255YXAv
LmN2c3Jvb3QvY3ZzL3NyYy9jbGllbnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuNi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIx
LjEuMS4xLjYuMQoqKiogc3JjL2NsaWVudC5jCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQot
LS0gc3JjL2NsaWVudC5jCTIwMDEvMDMvMDcgMjM6MzU6MDEJMS4xLjEuMS42LjEKKioqKioqKioq
KioqKioqCioqKiA1ODIxLDU4MzkgKioqKgotLS0gNTgyMSw1ODUzIC0tLS0KICBjbGllbnRfc2Vu
ZGRhdGUgKGRhdGUpCiAgICAgIGNvbnN0IGNoYXIgKmRhdGU7CiAgewogICAgICBjaGFyIGJ1ZltN
QVhEQVRFTEVOXTsKICAKICAgICAgZGF0ZV90b19pbnRlcm5ldCAoYnVmLCAoY2hhciAqKWRhdGUp
OwogICAgICBvcHRpb25fd2l0aF9hcmcgKCItRCIsIGJ1Zik7CiAgfQogIAwKICB2b2lkCiAgc2Vu
ZF9pbml0X2NvbW1hbmQgKCkKICB7CiAgICAgIC8qIFRoaXMgaXMgaGVyZSBiZWNhdXNlIHdlIG5l
ZWQgdGhlIENWU3Jvb3RfZGlyZWN0b3J5IHZhcmlhYmxlLiAgKi8KICAgICAgc2VuZF90b19zZXJ2
ZXIgKCJpbml0ICIsIDApOwogICAgICBzZW5kX3RvX3NlcnZlciAoQ1ZTcm9vdF9kaXJlY3Rvcnks
IDApOwogICAgICBzZW5kX3RvX3NlcnZlciAoIlwwMTIiLCAwKTsKKyB9CisgCisgdm9pZAorIHRv
X3NlcnZlcl9idWZmZXJfZmx1c2ggKHZvaWQpCisgeworICAgICBidWZfZmx1c2ggKHRvX3NlcnZl
ciwgMSk7CisgfQorIAorIHZvaWQKKyBmcm9tX3NlcnZlcl9idWZmZXJfcmVhZCAobGluZSwgbGVu
cCkKKyAgICAgY2hhciAqKmxpbmU7CisgICAgIGludCAqbGVucDsKKyB7CisgICAgIGJ1Zl9yZWFk
X2xpbmUgKGZyb21fc2VydmVyLCBsaW5lLCBsZW5wKTsKICB9CiAgCiAgI2VuZGlmIC8qIENMSUVO
VF9TVVBQT1JUICovCkluZGV4OiBzcmMvY2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv
bWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3JjL2NsaWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS42LjEKZGlmZiAtQzE2IC13IC1yMS4x
LjEuMSAtcjEuMS4xLjEuNi4xCioqKiBzcmMvY2xpZW50LmgJMjAwMS8wMy8wNiAxNjoyMToyMQkx
LjEuMS4xCi0tLSBzcmMvY2xpZW50LmgJMjAwMS8wMy8wNyAyMzozNTowMQkxLjEuMS4xLjYuMQoq
KioqKioqKioqKioqKioKKioqIDE4NSwyMDEgKioqKgotLS0gMTg1LDIwNCAtLS0tCiAgZXh0ZXJu
IHZvaWQgY2xpZW50X3NlbmRfZXhwYW5zaW9ucyBQUk9UTygoaW50IGxvY2FsLCBjaGFyICp3aGVy
ZSwKICAJCQkJCSAgaW50IGJ1aWxkX2RpcnMpKTsKICBleHRlcm4gdm9pZCBjbGllbnRfbm9uZXhw
YW5kZWRfc2V0dXAgUFJPVE8oKHZvaWQpKTsKICAKICBleHRlcm4gdm9pZCBzZW5kX2luaXRfY29t
bWFuZCBQUk9UTyAoKHZvaWQpKTsKICAMCiAgZXh0ZXJuIGNoYXIgKipmYWlsZWRfcGF0Y2hlczsK
ICBleHRlcm4gaW50IGZhaWxlZF9wYXRjaGVzX2NvdW50OwogIGV4dGVybiBjaGFyICp0b3BsZXZl
bF93ZDsKICBleHRlcm4gdm9pZCBjbGllbnRfaW1wb3J0X3NldHVwIFBST1RPKChjaGFyICpyZXBv
c2l0b3J5KSk7CiAgZXh0ZXJuIGludCBjbGllbnRfcHJvY2Vzc19pbXBvcnRfZmlsZQogICAgICBQ
Uk9UTygoY2hhciAqbWVzc2FnZSwgY2hhciAqdmZpbGUsIGNoYXIgKnZ0YWcsCiAgCSAgIGludCB0
YXJnYywgY2hhciAqdGFyZ3ZbXSwgY2hhciAqcmVwb3NpdG9yeSwgaW50IGFsbF9maWxlc19iaW5h
cnksCiAgCSAgIGludCBtb2R0aW1lKSk7CiAgZXh0ZXJuIHZvaWQgY2xpZW50X2ltcG9ydF9kb25l
IFBST1RPKCh2b2lkKSk7CiAgZXh0ZXJuIHZvaWQgY2xpZW50X25vdGlmeSBQUk9UTygoY2hhciAq
LCBjaGFyICosIGNoYXIgKiwgaW50LCBjaGFyICopKTsKKyAKKyBleHRlcm4gdm9pZCBmcm9tX3Nl
cnZlcl9idWZmZXJfcmVhZCBQUk9UTygoY2hhciAqKiwgaW50ICopKTsKKyBleHRlcm4gdm9pZCB0
b19zZXJ2ZXJfYnVmZmVyX2ZsdXNoIFBST1RPKCh2b2lkKSk7CiAgI2VuZGlmIC8qIENMSUVOVF9T
VVBQT1JUICovCkluZGV4OiBzcmMvY29tbWl0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv
bnlhcC8uY3Zzcm9vdC9jdnMvc3JjL2NvbW1pdC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEu
MS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS42LjIKZGlmZiAtQzE2IC13IC1yMS4xLjEu
MSAtcjEuMS4xLjEuNi4yCioqKiBzcmMvY29tbWl0LmMJMjAwMS8wMy8wNiAxNjoyMToyMQkxLjEu
MS4xCi0tLSBzcmMvY29tbWl0LmMJMjAwMS8wMy8wOCAxNDoxNjozNQkxLjEuMS4xLjYuMgoqKioq
KioqKioqKioqKioKKioqIDU2LDEwMyAqKioqCiAgc3RhdGljIHZvaWQgbWFzdGVybGlzdF9kZWxw
cm9jIFBST1RPKChOb2RlICpwKSk7CiAgc3RhdGljIGNoYXIgKmxvY2F0ZV9yY3MgUFJPVE8oKGNo
YXIgKmZpbGUsIGNoYXIgKnJlcG9zaXRvcnkpKTsKICAKICBzdHJ1Y3QgY29tbWl0X2luZm8KICB7
CiAgICAgIEN0eXBlIHN0YXR1czsJCQkvKiBhcyByZXR1cm5lZCBmcm9tIENsYXNzaWZ5X0ZpbGUo
KSAqLwogICAgICBjaGFyICpyZXY7CQkJCS8qIGEgbnVtZXJpYyByZXYsIGlmIHdlIGtub3cgaXQg
Ki8KICAgICAgY2hhciAqdGFnOwkJCQkvKiBhbnkgc3RpY2t5IHRhZywgb3IgLXIgb3B0aW9uICov
CiAgICAgIGNoYXIgKm9wdGlvbnM7CQkJLyogQW55IHN0aWNreSAtayBvcHRpb24gKi8KICB9Owog
IHN0cnVjdCBtYXN0ZXJfbGlzdHMKICB7CiAgICAgIExpc3QgKnVsaXN0OwkJCS8qIGxpc3QgZm9y
IFVwZGF0ZV9Mb2dmaWxlICovCiAgICAgIExpc3QgKmNpbGlzdDsJCQkvKiBsaXN0IHdpdGggY29t
bWl0X2luZm8gc3RydWN0cyAqLwogIH07CiAgCiAgc3RhdGljIGludCBmb3JjZV9jaSA9IDA7CiAg
c3RhdGljIGludCBnb3RfbWVzc2FnZTsKICBzdGF0aWMgaW50IHJ1bl9tb2R1bGVfcHJvZyA9IDE7
CiAgc3RhdGljIGludCBhZmxhZzsKICBzdGF0aWMgY2hhciAqc2F2ZWRfdGFnOwogIHN0YXRpYyBj
aGFyICp3cml0ZV9kaXJ0YWc7CiAgc3RhdGljIGludCB3cml0ZV9kaXJub25icmFuY2g7CiAgc3Rh
dGljIGNoYXIgKmxvZ2ZpbGU7CiAgc3RhdGljIExpc3QgKm11bGlzdDsKICBzdGF0aWMgTGlzdCAq
c2F2ZWRfdWxpc3Q7CiAgc3RhdGljIGNoYXIgKnNhdmVkX21lc3NhZ2U7CiAgc3RhdGljIHRpbWVf
dCBsYXN0X3JlZ2lzdGVyX3RpbWU7CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbW1p
dF91c2FnZVtdID0KICB7CiEgICAgICJVc2FnZTogJXMgJXMgWy1uUmxmXSBbLW0gbXNnIHwgLUYg
bG9nZmlsZV0gWy1yIHJldl0gZmlsZXMuLi5cbiIsCiAgICAgICJcdC1uXHREbyBub3QgcnVuIHRo
ZSBtb2R1bGUgcHJvZ3JhbSAoaWYgYW55KS5cbiIsCiAgICAgICJcdC1SXHRQcm9jZXNzIGRpcmVj
dG9yaWVzIHJlY3Vyc2l2ZWx5LlxuIiwKICAgICAgIlx0LWxcdExvY2FsIGRpcmVjdG9yeSBvbmx5
IChub3QgcmVjdXJzaXZlKS5cbiIsCiAgICAgICJcdC1mXHRGb3JjZSB0aGUgZmlsZSB0byBiZSBj
b21taXR0ZWQ7IGRpc2FibGVzIHJlY3Vyc2lvbi5cbiIsCiAgICAgICJcdC1GIGZpbGVcdFJlYWQg
dGhlIGxvZyBtZXNzYWdlIGZyb20gZmlsZS5cbiIsCiAgICAgICJcdC1tIG1zZ1x0TG9nIG1lc3Nh
Z2UuXG4iLAogICAgICAiXHQtciByZXZcdENvbW1pdCB0byB0aGlzIGJyYW5jaCBvciB0cnVuayBy
ZXZpc2lvbi5cbiIsCiAgICAgICIoU3BlY2lmeSB0aGUgLS1oZWxwIGdsb2JhbCBvcHRpb24gZm9y
IGEgbGlzdCBvZiBvdGhlciBoZWxwIG9wdGlvbnMpXG4iLAogICAgICBOVUxMCiAgfTsKICAKICAj
aWZkZWYgQ0xJRU5UX1NVUFBPUlQKICAvKiBJZGVudGlmeSBhIGZpbGUgd2hpY2ggbmVlZHMgIj8g
Zm9vIiBvciBhIFF1ZXN0aW9uYWJsZSByZXF1ZXN0LiAgKi8KICBzdHJ1Y3QgcXVlc3Rpb24gewog
ICAgICAvKiBUaGUgdHdvIGZpZWxkcyBmb3IgdGhlIERpcmVjdG9yeSByZXF1ZXN0LiAgKi8KICAg
ICAgY2hhciAqZGlyOwotLS0gNTYsMTA1IC0tLS0KICBzdGF0aWMgdm9pZCBtYXN0ZXJsaXN0X2Rl
bHByb2MgUFJPVE8oKE5vZGUgKnApKTsKICBzdGF0aWMgY2hhciAqbG9jYXRlX3JjcyBQUk9UTygo
Y2hhciAqZmlsZSwgY2hhciAqcmVwb3NpdG9yeSkpOwogIAogIHN0cnVjdCBjb21taXRfaW5mbwog
IHsKICAgICAgQ3R5cGUgc3RhdHVzOwkJCS8qIGFzIHJldHVybmVkIGZyb20gQ2xhc3NpZnlfRmls
ZSgpICovCiAgICAgIGNoYXIgKnJldjsJCQkJLyogYSBudW1lcmljIHJldiwgaWYgd2Uga25vdyBp
dCAqLwogICAgICBjaGFyICp0YWc7CQkJCS8qIGFueSBzdGlja3kgdGFnLCBvciAtciBvcHRpb24g
Ki8KICAgICAgY2hhciAqb3B0aW9uczsJCQkvKiBBbnkgc3RpY2t5IC1rIG9wdGlvbiAqLwogIH07
CiAgc3RydWN0IG1hc3Rlcl9saXN0cwogIHsKICAgICAgTGlzdCAqdWxpc3Q7CQkJLyogbGlzdCBm
b3IgVXBkYXRlX0xvZ2ZpbGUgKi8KICAgICAgTGlzdCAqY2lsaXN0OwkJCS8qIGxpc3Qgd2l0aCBj
b21taXRfaW5mbyBzdHJ1Y3RzICovCiAgfTsKICAKKyBzdGF0aWMgaW50IGNoZWNrX3ZhbGlkX2Vk
aXQgPSAwOwogIHN0YXRpYyBpbnQgZm9yY2VfY2kgPSAwOwogIHN0YXRpYyBpbnQgZ290X21lc3Nh
Z2U7CiAgc3RhdGljIGludCBydW5fbW9kdWxlX3Byb2cgPSAxOwogIHN0YXRpYyBpbnQgYWZsYWc7
CiAgc3RhdGljIGNoYXIgKnNhdmVkX3RhZzsKICBzdGF0aWMgY2hhciAqd3JpdGVfZGlydGFnOwog
IHN0YXRpYyBpbnQgd3JpdGVfZGlybm9uYnJhbmNoOwogIHN0YXRpYyBjaGFyICpsb2dmaWxlOwog
IHN0YXRpYyBMaXN0ICptdWxpc3Q7CiAgc3RhdGljIExpc3QgKnNhdmVkX3VsaXN0OwogIHN0YXRp
YyBjaGFyICpzYXZlZF9tZXNzYWdlOwogIHN0YXRpYyB0aW1lX3QgbGFzdF9yZWdpc3Rlcl90aW1l
OwogIAogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjb21taXRfdXNhZ2VbXSA9CiAgewohICAg
ICAiVXNhZ2U6ICVzICVzIFstY25SbGZdIFstbSBtc2cgfCAtRiBsb2dmaWxlXSBbLXIgcmV2XSBm
aWxlcy4uLlxuIiwKISAgICAgIlx0LWNcdENoZWNrIGZvciB2YWxpZCBlZGl0cyBiZWZvcmUgY29t
bWl0dGluZy5cbiIsCiAgICAgICJcdC1uXHREbyBub3QgcnVuIHRoZSBtb2R1bGUgcHJvZ3JhbSAo
aWYgYW55KS5cbiIsCiAgICAgICJcdC1SXHRQcm9jZXNzIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5
LlxuIiwKICAgICAgIlx0LWxcdExvY2FsIGRpcmVjdG9yeSBvbmx5IChub3QgcmVjdXJzaXZlKS5c
biIsCiAgICAgICJcdC1mXHRGb3JjZSB0aGUgZmlsZSB0byBiZSBjb21taXR0ZWQ7IGRpc2FibGVz
IHJlY3Vyc2lvbi5cbiIsCiAgICAgICJcdC1GIGZpbGVcdFJlYWQgdGhlIGxvZyBtZXNzYWdlIGZy
b20gZmlsZS5cbiIsCiAgICAgICJcdC1tIG1zZ1x0TG9nIG1lc3NhZ2UuXG4iLAogICAgICAiXHQt
ciByZXZcdENvbW1pdCB0byB0aGlzIGJyYW5jaCBvciB0cnVuayByZXZpc2lvbi5cbiIsCiAgICAg
ICIoU3BlY2lmeSB0aGUgLS1oZWxwIGdsb2JhbCBvcHRpb24gZm9yIGEgbGlzdCBvZiBvdGhlciBo
ZWxwIG9wdGlvbnMpXG4iLAogICAgICBOVUxMCiAgfTsKICAKICAjaWZkZWYgQ0xJRU5UX1NVUFBP
UlQKICAvKiBJZGVudGlmeSBhIGZpbGUgd2hpY2ggbmVlZHMgIj8gZm9vIiBvciBhIFF1ZXN0aW9u
YWJsZSByZXF1ZXN0LiAgKi8KICBzdHJ1Y3QgcXVlc3Rpb24gewogICAgICAvKiBUaGUgdHdvIGZp
ZWxkcyBmb3IgdGhlIERpcmVjdG9yeSByZXF1ZXN0LiAgKi8KICAgICAgY2hhciAqZGlyOwoqKioq
KioqKioqKioqKioKKioqIDI4MSwzMTIgKioqKgotLS0gMjgzLDMxOSAtLS0tCiAgCXN0YXR1cyA9
IFRfTU9ESUZJRUQ7CiAgICAgIGVsc2UKICAgICAgewogIAkvKiBUaGlzIGNvdmVycyB1bm1vZGlm
aWVkIGZpbGVzLCBhcyB3ZWxsIGFzIGEgdmFyaWV0eSBvZiBvdGhlcgogIAkgICBjYXNlcy4gIEZJ
WE1FOiB3ZSBwcm9iYWJseSBzaG91bGQgYmUgcHJpbnRpbmcgYSBtZXNzYWdlIGFuZAogIAkgICBy
ZXR1cm5pbmcgMSBmb3IgbWFueSBvZiB0aG9zZSBjYXNlcyAoYnV0IEknbSBub3Qgc3VyZQogIAkg
ICBleGFjdGx5IHdoaWNoIG9uZXMpLiAgKi8KICAJZnJlZXZlcnNfdHMgKCZ2ZXJzKTsKICAJcmV0
dXJuIDA7CiAgICAgIH0KICAKICAgICAgbm9kZSA9IGdldG5vZGUgKCk7CiAgICAgIG5vZGUtPmtl
eSA9IHhzdHJkdXAgKGZpbmZvLT5mdWxsbmFtZSk7CiAgCiAgICAgIGRhdGEgPSAoc3RydWN0IGxv
Z2ZpbGVfaW5mbyAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBsb2dmaWxlX2luZm8pKTsKICAg
ICAgZGF0YS0+dHlwZSA9IHN0YXR1czsKKyAgICAgZGF0YS0+cmVwb3NpdG9yeSA9IHhzdHJkdXAg
KGZpbmZvLT5yZXBvc2l0b3J5KTsKKyAgICAgZGF0YS0+aG9zdG5hbWUgPSB4c3RyZHVwIChob3N0
bmFtZSk7CisgICAgIGRhdGEtPndkID0gKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChDdXJEaXIp
ICsgc2l6ZW9mICgnLycpICsgc3RybGVuIChmaW5mby0+dXBkYXRlX2RpcikgKyAxKTsKKyAgICAg
c3ByaW50ZiAoZGF0YS0+d2QsICIlcyVjJXMiLCBDdXJEaXIsIGZpbmZvLT51cGRhdGVfZGlyICE9
IE5VTEwgICYmICAqZmluZm8tPnVwZGF0ZV9kaXIgIT0gJ1wwJyAgID8gICAnLycgICA6ICAgJ1ww
JywgZmluZm8tPnVwZGF0ZV9kaXIpOworICAgICBkYXRhLT5lZGl0b3IgPSBOVUxMOwogICAgICBk
YXRhLT50YWcgPSB4c3RyZHVwICh2ZXJzLT50YWcpOwogICAgICBkYXRhLT5yZXZfb2xkID0gZGF0
YS0+cmV2X25ldyA9IE5VTEw7CiAgCiAgICAgIG5vZGUtPnR5cGUgPSBVUERBVEU7CiAgICAgIG5v
ZGUtPmRlbHByb2MgPSB1cGRhdGVfZGVscHJvYzsKICAgICAgbm9kZS0+ZGF0YSA9IChjaGFyICop
IGRhdGE7CiAgICAgICh2b2lkKWFkZG5vZGUgKGFyZ3MtPnVsaXN0LCBub2RlKTsKICAKICAgICAg
KythcmdzLT5hcmdjOwogIAogICAgICBmcmVldmVyc190cyAoJnZlcnMpOwogICAgICByZXR1cm4g
MDsKICB9CiAgCiAgc3RhdGljIGludCBjb3B5X3VsaXN0IFBST1RPICgoTm9kZSAqLCB2b2lkICop
KTsKICAKKioqKioqKioqKioqKioqCioqKiAzNDUsNDEwICoqKioKICAjICBpZmRlZiBDTElFTlRf
U1VQUE9SVAogIAkvKiBXaG8gd2UgYXJlIG9uIHRoZSBjbGllbnQgc2lkZSBkb2Vzbid0IGFmZmVj
dCBsb2dnaW5nLiAgKi8KICAJJiYgIWNsaWVudF9hY3RpdmUKICAjICBlbmRpZgogIAkpCiAgICAg
IHsKICAJc3RydWN0IHBhc3N3ZCAqcHc7CiAgCiAgCWlmICgocHcgPSAoc3RydWN0IHBhc3N3ZCAq
KSBnZXRwd25hbSAoZ2V0Y2FsbGVyICgpKSkgPT0gTlVMTCkKICAJICAgIGVycm9yICgxLCAwLCAi
eW91IGFyZSB1bmtub3duIHRvIHRoaXMgc3lzdGVtIik7CiAgCWlmIChwdy0+cHdfdWlkID09ICh1
aWRfdCkgMCkKICAJICAgIGVycm9yICgxLCAwLCAiY2Fubm90IGNvbW1pdCBmaWxlcyBhcyAncm9v
dCciKTsKICAgICAgfQogICNlbmRpZiAvKiBDVlNfQkFEUk9PVCAqLwogIAogICAgICBvcHRpbmQg
PSAwOwohICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICIrbmxSbTpmRjpyOiIp
KSAhPSAtMSkKICAgICAgewogIAlzd2l0Y2ggKGMpCiAgCXsKICAJICAgIGNhc2UgJ24nOgogIAkJ
cnVuX21vZHVsZV9wcm9nID0gMDsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnbSc6CiAgI2lmZGVm
IEZPUkNFX1VTRV9FRElUT1IKICAJCXVzZV9lZGl0b3IgPSAxOwogICNlbHNlCiAgCQl1c2VfZWRp
dG9yID0gMDsKICAjZW5kaWYKICAJCWlmIChzYXZlZF9tZXNzYWdlKQogIAkJewogIAkJICAgIGZy
ZWUgKHNhdmVkX21lc3NhZ2UpOwogIAkJICAgIHNhdmVkX21lc3NhZ2UgPSBOVUxMOwogIAkJfQog
IAogIAkJc2F2ZWRfbWVzc2FnZSA9IHhzdHJkdXAob3B0YXJnKTsKICAJCWJyZWFrOwogIAkgICAg
Y2FzZSAncic6CiAgCQlpZiAoc2F2ZWRfdGFnKQogIAkJICAgIGZyZWUgKHNhdmVkX3RhZyk7CiAg
CQlzYXZlZF90YWcgPSB4c3RyZHVwIChvcHRhcmcpOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlICds
JzoKICAJCWxvY2FsID0gMTsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnUic6CiAgCQlsb2NhbCA9
IDA7CiAgCQlicmVhazsKICAJICAgIGNhc2UgJ2YnOgogIAkJZm9yY2VfY2kgPSAxOwogIAkJbG9j
YWwgPSAxOwkJLyogYWxzbyBkaXNhYmxlIHJlY3Vyc2lvbiAqLwogIAkJYnJlYWs7CiAgCSAgICBj
YXNlICdGJzoKICAjaWZkZWYgRk9SQ0VfVVNFX0VESVRPUgogIAkJdXNlX2VkaXRvciA9IDE7CiAg
I2Vsc2UKICAJCXVzZV9lZGl0b3IgPSAwOwogICNlbmRpZgogIAkJbG9nZmlsZSA9IG9wdGFyZzsK
ICAJCWJyZWFrOwogIAkgICAgY2FzZSAnPyc6CiAgCSAgICBkZWZhdWx0OgogIAkJdXNhZ2UgKGNv
bW1pdF91c2FnZSk7CiAgCQlicmVhazsKICAJfQogICAgICB9Ci0tLSAzNTIsNDIxIC0tLS0KICAj
ICBpZmRlZiBDTElFTlRfU1VQUE9SVAogIAkvKiBXaG8gd2UgYXJlIG9uIHRoZSBjbGllbnQgc2lk
ZSBkb2Vzbid0IGFmZmVjdCBsb2dnaW5nLiAgKi8KICAJJiYgIWNsaWVudF9hY3RpdmUKICAjICBl
bmRpZgogIAkpCiAgICAgIHsKICAJc3RydWN0IHBhc3N3ZCAqcHc7CiAgCiAgCWlmICgocHcgPSAo
c3RydWN0IHBhc3N3ZCAqKSBnZXRwd25hbSAoZ2V0Y2FsbGVyICgpKSkgPT0gTlVMTCkKICAJICAg
IGVycm9yICgxLCAwLCAieW91IGFyZSB1bmtub3duIHRvIHRoaXMgc3lzdGVtIik7CiAgCWlmIChw
dy0+cHdfdWlkID09ICh1aWRfdCkgMCkKICAJICAgIGVycm9yICgxLCAwLCAiY2Fubm90IGNvbW1p
dCBmaWxlcyBhcyAncm9vdCciKTsKICAgICAgfQogICNlbmRpZiAvKiBDVlNfQkFEUk9PVCAqLwog
IAogICAgICBvcHRpbmQgPSAwOwohICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3Ys
ICIrY25sUm06ZkY6cjoiKSkgIT0gLTEpCiAgICAgIHsKICAJc3dpdGNoIChjKQogIAl7CisgICAg
ICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgIGNoZWNrX3ZhbGlkX2VkaXQgPSAx
OworICAgICAgICAgICAgICAgICBicmVhazsKICAJICAgIGNhc2UgJ24nOgogIAkJcnVuX21vZHVs
ZV9wcm9nID0gMDsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnbSc6CiAgI2lmZGVmIEZPUkNFX1VT
RV9FRElUT1IKICAJCXVzZV9lZGl0b3IgPSAxOwogICNlbHNlCiAgCQl1c2VfZWRpdG9yID0gMDsK
ICAjZW5kaWYKICAJCWlmIChzYXZlZF9tZXNzYWdlKQogIAkJewogIAkJICAgIGZyZWUgKHNhdmVk
X21lc3NhZ2UpOwogIAkJICAgIHNhdmVkX21lc3NhZ2UgPSBOVUxMOwogIAkJfQogIAogIAkJc2F2
ZWRfbWVzc2FnZSA9IHhzdHJkdXAob3B0YXJnKTsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAncic6
CiAgCQlpZiAoc2F2ZWRfdGFnKQogIAkJICAgIGZyZWUgKHNhdmVkX3RhZyk7CiAgCQlzYXZlZF90
YWcgPSB4c3RyZHVwIChvcHRhcmcpOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlICdsJzoKICAJCWxv
Y2FsID0gMTsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnUic6CiAgCQlsb2NhbCA9IDA7CiAgCQli
cmVhazsKICAJICAgIGNhc2UgJ2YnOgogIAkJZm9yY2VfY2kgPSAxOworICAgICAgICAgICAgICAg
ICBjaGVja192YWxpZF9lZGl0ID0gMDsKICAJCWxvY2FsID0gMTsJCS8qIGFsc28gZGlzYWJsZSBy
ZWN1cnNpb24gKi8KICAJCWJyZWFrOwogIAkgICAgY2FzZSAnRic6CiAgI2lmZGVmIEZPUkNFX1VT
RV9FRElUT1IKICAJCXVzZV9lZGl0b3IgPSAxOwogICNlbHNlCiAgCQl1c2VfZWRpdG9yID0gMDsK
ICAjZW5kaWYKICAJCWxvZ2ZpbGUgPSBvcHRhcmc7CiAgCQlicmVhazsKICAJICAgIGNhc2UgJz8n
OgogIAkgICAgZGVmYXVsdDoKICAJCXVzYWdlIChjb21taXRfdXNhZ2UpOwogIAkJYnJlYWs7CiAg
CX0KICAgICAgfQoqKioqKioqKioqKioqKioKKioqIDUzMyw1OTUgKioqKgotLS0gNTQ0LDY2NCAt
LS0tCiAgCQkgICAgc2VuZF90b19zZXJ2ZXIgKHAtPnJlcG9zLCAwKTsKICAJCSAgICBzZW5kX3Rv
X3NlcnZlciAoIlwwMTIiLCAxKTsKICAKICAJCSAgICBzZW5kX3RvX3NlcnZlciAoIlF1ZXN0aW9u
YWJsZSAiLCAwKTsKICAJCSAgICBzZW5kX3RvX3NlcnZlciAocC0+ZmlsZSwgMCk7CiAgCQkgICAg
c2VuZF90b19zZXJ2ZXIgKCJcMDEyIiwgMSk7CiAgCQl9CiAgCQlmcmVlIChwLT5kaXIpOwogIAkJ
ZnJlZSAocC0+cmVwb3MpOwogIAkJZnJlZSAocC0+ZmlsZSk7CiAgCQlxID0gcC0+bmV4dDsKICAJ
CWZyZWUgKHApOwogIAkJcCA9IHE7CiAgCSAgICB9CiAgCX0KICAKKyAgICAgICAgIC8qIHNlbmQg
bG9jYWwgZmlsZSBpbmZvIHRvIHNlcnZlciAqLworICAgICAgICAgaWYgKHN1cHBvcnRlZF9yZXF1
ZXN0ICgiRmlsZUluZm8iKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBjaGFyICoqdiA9IE5V
TEw7CisgCisgICAgICAgICAgICAgZm9yKHYgPSBmaW5kX2FyZ3MuYXJndjsgdiA8IGZpbmRfYXJn
cy5hcmd2ICsgZmluZF9hcmdzLmFyZ2M7ICsrdikKKyAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIE5vZGUgKnAgPSBOVUxMOworIAorICAgICAgICAgICAgICAgICBwID0gZmluZG5vZGUg
KGZpbmRfYXJncy51bGlzdCwgKnYpOworICAgICAgICAgICAgICAgICBpZiAocCAhPSBOVUxMKQor
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBzZW5kX3RvX3NlcnZlciAo
IkZpbGVJbmZvICIsIDApOworICAgICAgICAgICAgICAgICAgICAgc2VuZF90b19zZXJ2ZXIgKCp2
LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgIHNlbmRfdG9fc2VydmVyICgiXDAxMiIsIDEpOwor
ICAgICAgICAgICAgICAgICAgICAgc2VuZF90b19zZXJ2ZXIgKCgoc3RydWN0IGxvZ2ZpbGVfaW5m
byAqKSBwLT5kYXRhKS0+aG9zdG5hbWUsIDApOworICAgICAgICAgICAgICAgICAgICAgc2VuZF90
b19zZXJ2ZXIgKCJcdCIsIDEpOworICAgICAgICAgICAgICAgICAgICAgc2VuZF90b19zZXJ2ZXIg
KCgoc3RydWN0IGxvZ2ZpbGVfaW5mbyAqKSBwLT5kYXRhKS0+d2QsIDApOworICAgICAgICAgICAg
ICAgICAgICAgc2VuZF90b19zZXJ2ZXIgKCJcdCIsIDEpOworICAgICAgICAgICAgICAgICAgICAg
c2VuZF90b19zZXJ2ZXIgKCJcMDEyIiwgMSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICB9CisgICAgICAgICB9CisgCiAgCWlmIChsb2NhbCkKICAJICAgIHNlbmRfYXJnKCItbCIp
OworICAgICAgICAgaWYgKGNoZWNrX3ZhbGlkX2VkaXQpCisgICAgICAgICAgICAgc2VuZF9hcmco
Ii1jIik7CiAgCWlmIChmb3JjZV9jaSkKICAJICAgIHNlbmRfYXJnKCItZiIpOwogIAlpZiAoIXJ1
bl9tb2R1bGVfcHJvZykKICAJICAgIHNlbmRfYXJnKCItbiIpOwogIAlvcHRpb25fd2l0aF9hcmcg
KCItciIsIHNhdmVkX3RhZyk7CiAgCiAgCS8qIEZJWE1FOiBUaGlzIHdob2xlIGZpbmRfYXJncy5m
b3JjZS9TRU5EX0ZPUkNFIGJ1c2luZXNzIGlzIGEKICAJICAga2x1ZGdlLiAgSXQgd291bGQgc2Vl
bSB0byBiZSBhIHNlcnZlciBidWcgdGhhdCB3ZSBoYXZlIHRvCiAgCSAgIHNheSB0aGF0IGZpbGVz
IGFyZSBtb2RpZmllZCB3aGVuIHRoZXkgYXJlIG5vdC4gIFRoaXMgbWFrZXMKICAJICAgImN2cyBj
b21taXQgLXIgMiIgYWNyb3NzIGEgd2hvbGUgYnVuY2ggb2YgZmlsZXMgYSB2ZXJ5IHNsb3cKICAJ
ICAgb3BlcmF0aW9uIChhbmQgaXQgaXNuJ3QgZG9jdW1lbnRlZCBpbiBjdnNjbGllbnQudGV4aSku
ICBJCiAgCSAgIGhhdmVuJ3QgbG9va2VkIGF0IHRoZSBzZXJ2ZXIgY29kZSBjYXJlZnVsbHkgZW5v
dWdoIHRvIGJlCiAgCSAgIF9zdXJlXyB3aHkgdGhpcyBpcyBuZWVkZWQsIGJ1dCBpZiBpdCBpcyBi
ZWNhdXNlIHRoZSAiY2kiCiAgCSAgIHByb2dyYW0sIHdoaWNoIHdlIHVzZWQgdG8gY2FsbCwgd2Fu
dGVkIHRoZSBmaWxlIHRvIGV4aXN0LAogIAkgICB0aGVuIGl0IHdvdWxkIGJlIHJlbGF0aXZlbHkg
c2ltcGxlIHRvIGZpeCBpbiB0aGUgc2VydmVyLiAgKi8KICAJc2VuZF9maWxlcyAoZmluZF9hcmdz
LmFyZ2MsIGZpbmRfYXJncy5hcmd2LCBsb2NhbCwgMCwKICAJCSAgICBmaW5kX2FyZ3MuZm9yY2Ug
PyBTRU5EX0ZPUkNFIDogMCk7CiAgCiAgCS8qIFNlbmRpbmcgb25seSB0aGUgbmFtZXMgb2YgdGhl
IGZpbGVzIHdoaWNoIHdlcmUgbW9kaWZpZWQsIGFkZGVkLAogIAkgICBvciByZW1vdmVkIG1lYW5z
IHRoYXQgdGhlIHNlcnZlciB3aWxsIG9ubHkgZG8gYW4gdXAtdG8tZGF0ZQogIAkgICBjaGVjayBv
biB0aG9zZSBmaWxlcy4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gbG9jYWwgQ1ZTIGFuZAogIAkg
ICBwcmV2aW91cyB2ZXJzaW9ucyBvZiBjbGllbnQvc2VydmVyIENWUywgYnV0IGl0IHByb2JhYmx5
IGlzIGEgR29vZAogIAkgICBUaGluZywgb3IgYXQgbGVhc3QgTm90IFN1Y2ggQSBCYWQgVGhpbmcu
ICAqLwogIAlzZW5kX2ZpbGVfbmFtZXMgKGZpbmRfYXJncy5hcmdjLCBmaW5kX2FyZ3MuYXJndiwg
MCk7CiAgCWZyZWUgKGZpbmRfYXJncy5hcmd2KTsKICAJZGVsbGlzdCAoJmZpbmRfYXJncy51bGlz
dCk7CiAgCiAgCXNlbmRfdG9fc2VydmVyICgiY2lcMDEyIiwgMCk7CiAgCWVyciA9IGdldF9yZXNw
b25zZXNfYW5kX2Nsb3NlICgpOworICAgICAgICAgaWYgKGVyciA9PSAwICAmJiAgIXN1cHBvcnRl
ZF9yZXF1ZXN0ICgiRmlsZUluZm8iKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAvKiBGSVhN
RTogTm9lbCBZYXAgKHlhcF9ub2VsQHlhaG9vLmNvbSkgMjAwMCBGZWIgMjgKKyAgICAgICAgICAg
ICAgICBUaGlzIGJsb2NrIGlzIHRvIHN1cHBvcnQgb2xkIHNlcnZlcnMuICBJdCBzaG91bGQgYmUK
KyAgICAgICAgICAgICAgICByZW1vdmVkIG9uY2UgaXQncyBkZWVtZWQgdGhhdCBhbGwgc2VydmVy
cyBzdXBwb3J0IHRoZQorICAgICAgICAgICAgICAgICJGaWxlSW5mbyIgcmVxdWVzdC4gIElNSE8s
IGl0IHNob3VsZCBiZSBzYWZlIHRvIHJlbW92ZQorICAgICAgICAgICAgICAgIGJ5IDIwMDIgRmVi
IDI4IChpZSBpbiB0d28geWVhcnMpLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICAgY2hh
ciAqKnYgPSBOVUxMOworIAorICAgICAgICAgICAgIGZvcih2ID0gZmluZF9hcmdzLmFyZ3Y7IHYg
PCBmaW5kX2FyZ3MuYXJndiArIGZpbmRfYXJncy5hcmdjOyArK3YpCisgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICBOb2RlICpwID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAgICAgcCA9
IGZpbmRub2RlIChmaW5kX2FyZ3MudWxpc3QsICp2KTsKKyAgICAgICAgICAgICAgICAgaWYgKHAg
IT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgY2hhciAq
cmVwb3NpdG9yeSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c2VyID0gTlVM
TDsKKyAKKyAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBnZXRjYWxsZXIgKCk7CisgICAgICAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5ID0gKChzdHJ1Y3QgbG9nZmlsZV9pbmZvICopIHAtPmRh
dGEpLT5yZXBvc2l0b3J5OworIAorICAgICAgICAgICAgICAgICAgICAgZmlsZWF0dHJfc3RhcnRk
aXIgKHJlcG9zaXRvcnkpOworIAorICAgICAgICAgICAgICAgICAgICAgbm90aWZ5X2RvICgnQycs
ICp2LCB1c2VyLCB1c2VyLCBOVUxMLCAiIiwgcmVwb3NpdG9yeSk7CisgCisgICAgICAgICAgICAg
ICAgICAgICBmaWxlYXR0cl9mcmVlICgpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgfQorICAgICAgICAgfQorIAogIAlpZiAoZXJyICE9IDAgJiYgdXNlX2VkaXRvciAmJiBzYXZl
ZF9tZXNzYWdlICE9IE5VTEwpCiAgCXsKICAJICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciwg
ZG9uJ3QgbnVrZSB0aGUgdXNlcidzIGNhcmVmdWxseQogIAkgICAgICAgY29uc3RydWN0ZWQgcHJv
c2UuICBUaGlzIGlzIHNvbWV0aGluZyBvZiBhIGtsdWRnZTsgYSBiZXR0ZXIKICAJICAgICAgIHNv
bHV0aW9uIGlzIHByb2JhYmx5IG1vcmUgYWxvbmcgdGhlIGxpbmVzIG9mICMxNTAgaW4gVE9ETwog
IAkgICAgICAgKGRvaW5nIGEgc2Vjb25kIHVwLXRvLWRhdGUgY2hlY2sgYmVmb3JlIGFjY2VwdGlu
ZyB0aGUKICAJICAgICAgIGxvZyBtZXNzYWdlIGhhcyBhbHNvIGJlZW4gc3VnZ2VzdGVkLCBidXQg
dGhhdCBzZWVtcyBraW5kIG9mCiAgCSAgICAgICBpZmZ5IGJlY2F1c2UgdGhlIHJlYWwgdXAtdG8t
ZGF0ZSBjaGVjayBjb3VsZCBzdGlsbCBmYWlsLAogIAkgICAgICAgYW5vdGhlciBlcnJvciBjb3Vs
ZCBvY2N1ciwgJmMuICBBbHNvLCBhIHNlY29uZCBjaGVjayB3b3VsZAogIAkgICAgICAgc2xvdyB0
aGluZ3MgZG93bikuICAqLwogIAogIAkgICAgY2hhciAqZm5hbWU7CiAgCSAgICBGSUxFICpmcDsK
ICAKICAJICAgIGZuYW1lID0gY3ZzX3RlbXBfbmFtZSAoKTsKICAJICAgIGZwID0gQ1ZTX0ZPUEVO
IChmbmFtZSwgIncrIik7CioqKioqKioqKioqKioqKgoqKiogNjM0LDY2NSAqKioqCi0tLSA3MDMs
NzQxIC0tLS0KICAJd29ya2luZ19kaXIgPSB4Z2V0d2QoKTsKICAgICAgfQogICNlbmRpZgogIAog
ICAgICAvKgogICAgICAgKiBSdW4gdGhlIHJlY3Vyc2lvbiBwcm9jZXNzb3IgdG8gdmVyaWZ5IHRo
ZSBmaWxlcyBhcmUgYWxsIHVwLXRvLWRhdGUKICAgICAgICovCiAgICAgIGVyciA9IHN0YXJ0X3Jl
Y3Vyc2lvbiAoY2hlY2tfZmlsZXByb2MsIGNoZWNrX2ZpbGVzZG9uZXByb2MsCiAgCQkJICAgY2hl
Y2tfZGlyZW50cHJvYywgKERJUkxFQVZFUFJPQykgTlVMTCwgTlVMTCwgYXJnYywKICAJCQkgICBh
cmd2LCBsb2NhbCwgV19MT0NBTCwgYWZsYWcsIDAsIChjaGFyICopIE5VTEwsIDEpOwogICAgICBp
ZiAoZXJyKQogICAgICB7CiAgCUxvY2tfQ2xlYW51cCAoKTsKICAJZXJyb3IgKDEsIDAsICJjb3Jy
ZWN0IGFib3ZlIGVycm9ycyBmaXJzdCEiKTsKICAgICAgfQogIAorICNpZmRlZiBTRVJWRVJfU1VQ
UE9SVAorICAgICBpZiAoc2VydmVyX2FjdGl2ZSkKKyAgICAgeworICAgICAgICAgc2VydmVyX2Rl
bGZpbGVpbmZvbGlzdCAoKTsKKyAgICAgfQorICNlbmRpZgorIAogICAgICAvKgogICAgICAgKiBS
dW4gdGhlIHJlY3Vyc2lvbiBwcm9jZXNzb3IgdG8gY29tbWl0IHRoZSBmaWxlcwogICAgICAgKi8K
ICAgICAgd3JpdGVfZGlybm9uYnJhbmNoID0gMDsKICAgICAgaWYgKG5vZXhlYyA9PSAwKQogIAll
cnIgPSBzdGFydF9yZWN1cnNpb24gKGNvbW1pdF9maWxlcHJvYywgY29tbWl0X2ZpbGVzZG9uZXBy
b2MsCiAgCQkJICAgICAgIGNvbW1pdF9kaXJlbnRwcm9jLCBjb21taXRfZGlybGVhdmVwcm9jLCBO
VUxMLAogIAkJCSAgICAgICBhcmdjLCBhcmd2LCBsb2NhbCwgV19MT0NBTCwgYWZsYWcsIDAsCiAg
CQkJICAgICAgIChjaGFyICopIE5VTEwsIDEpOwogIAogICAgICAvKgogICAgICAgKiBVbmxvY2sg
YWxsIHRoZSBkaXJzIGFuZCBjbGVhbiB1cAogICAgICAgKi8KICAgICAgTG9ja19DbGVhbnVwICgp
OwogICAgICBkZWxsaXN0ICgmbXVsaXN0KTsKICAKKioqKioqKioqKioqKioqCioqKiA4MDksODQw
ICoqKioKLS0tIDg4NSw5MTcgLS0tLQogIAogICAgICBzd2l0Y2ggKHN0YXR1cykKICAgICAgewog
IAljYXNlIFRfQ0hFQ0tPVVQ6CiAgI2lmZGVmIFNFUlZFUl9TVVBQT1JUCiAgCWNhc2UgVF9QQVRD
SDoKICAjZW5kaWYKICAJY2FzZSBUX05FRURTX01FUkdFOgogIAljYXNlIFRfQ09ORkxJQ1Q6CiAg
CWNhc2UgVF9SRU1PVkVfRU5UUlk6CiAgCSAgICBlcnJvciAoMCwgMCwgIlVwLXRvLWRhdGUgY2hl
Y2sgZmFpbGVkIGZvciBgJXMnIiwgZmluZm8tPmZ1bGxuYW1lKTsKICAJICAgIGZyZWV2ZXJzX3Rz
ICgmdmVycyk7CiAgCSAgICByZXR1cm4gKDEpOwogIAljYXNlIFRfTU9ESUZJRUQ6CiAgCWNhc2Ug
VF9BRERFRDoKICAJY2FzZSBUX1JFTU9WRUQ6CisgICAgICAgICB7CiAgCSAgICAvKgogIAkgICAg
ICogc29tZSBxdWljayBzYW5pdHkgY2hlY2tzOyBpZiBubyBudW1lcmljIC1yIG9wdGlvbiBzcGVj
aWZpZWQ6CiAgCSAgICAgKgktIGNhbid0IGhhdmUgYSBzdGlja3kgZGF0ZQogIAkgICAgICoJLSBj
YW4ndCBoYXZlIGEgc3RpY2t5IHRhZyB0aGF0IGlzIG5vdCBhIGJyYW5jaAogIAkgICAgICogQWxz
bywKICAJICAgICAqCS0gaWYgc3RhdHVzIGlzIFRfUkVNT1ZFRCwgY2FuJ3QgaGF2ZSBhIG51bWVy
aWMgdGFnCiAgCSAgICAgKgktIGlmIHN0YXR1cyBpcyBUX0FEREVELCByY3MgZmlsZSBtdXN0IG5v
dCBleGlzdCB1bmxlc3Mgb24KICAJICAgICAqICAgIGEgYnJhbmNoCiAgCSAgICAgKgktIGlmIHN0
YXR1cyBpcyBUX0FEREVELCBjYW4ndCBoYXZlIGEgbm9uLXRydW5rIG51bWVyaWMgcmV2CiAgCSAg
ICAgKgktIGlmIHN0YXR1cyBpcyBUX01PRElGSUVEIGFuZCBhIENvbmZsaWN0IG1hcmtlciBleGlz
dHMsIGRvbid0CiAgCSAgICAgKiAgICBhbGxvdyB0aGUgY29tbWl0IGlmIHRpbWVzdGFtcCBpcyBp
ZGVudGljYWwgb3IgaWYgd2UgZmluZAogIAkgICAgICogICAgYW4gUkNTX01FUkdFX1BBVCBpbiB0
aGUgZmlsZS4KICAJICAgICAqLwogIAkgICAgaWYgKCFzYXZlZF90YWcgfHwgIWlzZGlnaXQgKCh1
bnNpZ25lZCBjaGFyKSAqc2F2ZWRfdGFnKSkKICAJICAgIHsKICAJCWlmICh2ZXJzLT5kYXRlKQoq
KioqKioqKioqKioqKioKKioqIDk4MiwxMDEzICoqKioKLS0tIDEwNTksMTE5NCAtLS0tCiAgCQkg
ICAgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbWFzdGVyX2xpc3RzKSk7CiAgCQltbC0+dWxpc3Qg
PSB1bGlzdDsKICAJCW1sLT5jaWxpc3QgPSBjaWxpc3Q7CiAgCQlwLT5kYXRhID0gKGNoYXIgKikg
bWw7CiAgCQlwLT5kZWxwcm9jID0gbWFzdGVybGlzdF9kZWxwcm9jOwogIAkJKHZvaWQpIGFkZG5v
ZGUgKG11bGlzdCwgcCk7CiAgCSAgICB9CiAgCiAgCSAgICAvKiBmaXJzdCBkbyB1bGlzdCwgdGhl
biBjaWxpc3QgKi8KICAJICAgIHAgPSBnZXRub2RlICgpOwogIAkgICAgcC0+a2V5ID0geHN0cmR1
cCAoZmluZm8tPmZpbGUpOwogIAkgICAgcC0+dHlwZSA9IFVQREFURTsKICAJICAgIHAtPmRlbHBy
b2MgPSB1cGRhdGVfZGVscHJvYzsKICAJICAgIGxpID0gKChzdHJ1Y3QgbG9nZmlsZV9pbmZvICop
CiAgCQkgIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxvZ2ZpbGVfaW5mbykpKTsKICAJICAgIGxp
LT50eXBlID0gc3RhdHVzOworIAorICNpZiBTRVJWRVJfU1VQUE9SVAorICAgICAgICAgICAgIGlm
IChzZXJ2ZXJfYWN0aXZlKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgc3RydWN0
IGxvZ2ZpbGVfaW5mbyAqY2xpZW50X2ZpbGVpbmZvID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAg
ICAgY2xpZW50X2ZpbGVpbmZvID0gc2VydmVyX2dldGZpbGVpbmZvIChmaW5mby0+ZnVsbG5hbWUp
OworICAgICAgICAgICAgICAgICBpZiAoY2xpZW50X2ZpbGVpbmZvID09IE5VTEwpCisgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGxpLT5yZXBvc2l0b3J5ID0gTlVMTDsK
KyAgICAgICAgICAgICAgICAgICAgIGxpLT5ob3N0bmFtZSA9IE5VTEw7CisgICAgICAgICAgICAg
ICAgICAgICBsaS0+d2QgPSBOVUxMOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgbGktPnJl
cG9zaXRvcnkgPSB4c3RyZHVwIChjbGllbnRfZmlsZWluZm8tPnJlcG9zaXRvcnkpOworICAgICAg
ICAgICAgICAgICAgICAgbGktPmhvc3RuYW1lID0geHN0cmR1cCAoY2xpZW50X2ZpbGVpbmZvLT5o
b3N0bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBsaS0+d2QgPSB4c3RyZHVwIChjbGllbnRf
ZmlsZWluZm8tPndkKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICBlbHNlCisgI2VuZGlmCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBs
aS0+cmVwb3NpdG9yeSA9IHhzdHJkdXAgKGZpbmZvLT5yZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
ICAgICAgbGktPmhvc3RuYW1lID0geHN0cmR1cCAoaG9zdG5hbWUpOworICAgICAgICAgICAgICAg
ICBsaS0+d2QgPSAoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKEN1ckRpcikgKyBzaXplb2YgKCcv
JykgKyBzdHJsZW4gKGZpbmZvLT51cGRhdGVfZGlyKSArIDEpOworIAorICAgICAgICAgICAgICAg
ICBzdHJjcHkgKGxpLT53ZCwgQ3VyRGlyKTsKKyAgICAgICAgICAgICAgICAgaWYgKGZpbmZvLT51
cGRhdGVfZGlyICE9IE5VTEwgICYmICAqZmluZm8tPnVwZGF0ZV9kaXIgIT0gJ1wwJykKKyAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgc3RyY2F0IChsaS0+d2QsICIvIik7
CisgICAgICAgICAgICAgICAgICAgICBzdHJjYXQgKGxpLT53ZCwgZmluZm8tPnVwZGF0ZV9kaXIp
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgIGlm
IChsaS0+aG9zdG5hbWUgPT0gTlVMTCAgfHwgIGxpLT53ZCA9PSBOVUxMKQorICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgbGktPmVkaXRvciA9IE5VTEw7CisgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGNoYXIg
KmVkaXRvcnMgPSBOVUxMOworIAorICAgICAgICAgICAgICAgICBlZGl0b3JzID0gZmlsZWF0dHJf
Z2V0MCAoZmluZm8tPmZpbGUsICJfZWRpdG9ycyIpOworICAgICAgICAgICAgICAgICBpZiAoZWRp
dG9ycyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBs
aS0+ZWRpdG9yID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmVkaXRv
ciA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c2VyID0gTlVMTDsKKyAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKnAgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqcDAgPSBOVUxMOworIAorICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGdldGNhbGxlciAo
KTsKKyAKKyAgICAgICAgICAgICAgICAgICAgIGVkaXRvciA9IChjaGFyICopIHhtYWxsb2MgKHN0
cmxlbiAodXNlcikgKyBzaXplb2YgKCdAJykgKyBzdHJsZW4gKGxpLT5ob3N0bmFtZSkgKyBzaXpl
b2YgKCc6JykgKyBzdHJsZW4gKGxpLT53ZCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgIHNw
cmludGYgKGVkaXRvciwgIiVzQCVzOiVzIiwgdXNlciwgbGktPmhvc3RuYW1lLCBsaS0+d2QpOwor
IAorICAgICAgICAgICAgICAgICAgICAgcCA9IGVkaXRvcnM7CisgICAgICAgICAgICAgICAgICAg
ICBwMCA9IHA7CisgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKyAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RyY2hyIChw
LCAnPicpOworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IE5VTEwpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgKnAg
PSAnXDAnOworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAgKGVkaXRvciwgcDAp
ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgcCA9IHN0cmNociAocCwgJywnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwMCA9
IHA7CisgICAgICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgICAgICBpZiAo
c3RyY21wIChlZGl0b3IsIHAwKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpLT5lZGl0b3IgPSBlZGl0b3I7CisgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgbGktPmVkaXRvciA9IE5VTEw7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJlZSAoZWRpdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAK
KyAgICAgICAgICAgICAgICAgICAgIGZyZWUgKGVkaXRvcnMpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgIGlmIChjaGVja192YWxpZF9lZGl0ICYm
IGxpLT5lZGl0b3IgPT0gTlVMTCkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGVy
cm9yICgwLCAwLCAiVmFsaWQgZWRpdCBkb2VzIG5vdCBleGlzdCBmb3IgJXMiLCBmaW5mby0+ZnVs
bG5hbWUpOworICAgICAgICAgICAgICAgICBmcmVldmVyc190cyAoJnZlcnMpOworICAgICAgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICB9CisgCiAgCSAgICBsaS0+dGFnID0geHN0
cmR1cCAodmVycy0+dGFnKTsKICAJICAgIGxpLT5yZXZfb2xkID0geHN0cmR1cCAodmVycy0+dm5f
cmNzKTsKICAJICAgIGxpLT5yZXZfbmV3ID0gTlVMTDsKICAJICAgIHAtPmRhdGEgPSAoY2hhciAq
KSBsaTsKICAJICAgICh2b2lkKSBhZGRub2RlICh1bGlzdCwgcCk7CiAgCiAgCSAgICBwID0gZ2V0
bm9kZSAoKTsKICAJICAgIHAtPmtleSA9IHhzdHJkdXAgKGZpbmZvLT5maWxlKTsKICAJICAgIHAt
PnR5cGUgPSBVUERBVEU7CiAgCSAgICBwLT5kZWxwcm9jID0gY2lfZGVscHJvYzsKICAJICAgIGNp
ID0gKHN0cnVjdCBjb21taXRfaW5mbyAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBjb21taXRf
aW5mbykpOwogIAkgICAgY2ktPnN0YXR1cyA9IHN0YXR1czsKICAJICAgIGlmICh2ZXJzLT50YWcp
CiAgCQlpZiAoaXNkaWdpdCAoKHVuc2lnbmVkIGNoYXIpICp2ZXJzLT50YWcpKQogIAkJICAgIGNp
LT5yZXYgPSB4c3RyZHVwICh2ZXJzLT50YWcpOwogIAkJZWxzZQoqKioqKioqKioqKioqKioKKioq
IDEwNDIsMTA3MyAqKioqCi0tLSAxMjIzLDEyNTYgLS0tLQogIAkJICAgd2UncmUgZG9pbmcgYSBy
ZW1vdmUgb3BlcmF0aW9uPyAqLwogIAkJaWYgKGxpbmtwICE9IE5VTEwpCiAgCQl7CiAgCQkgICAg
LyogQ3JlYXRlIGEgbmV3IGhhcmRsaW5rX2luZm8gbm9kZSwgd2hpY2ggd2lsbCByZWNvcmQKICAJ
CSAgICAgICB0aGUgY3VycmVudCBmaWxlJ3Mgc3RhdHVzIGFuZCB0aGUgbGlua3MgbGlzdGVkIGlu
IGl0cwogIAkJICAgICAgIGBoYXJkbGlua3MnIGRlbHRhIGZpZWxkLiAgV2Ugd2lsbCBhcHBlbmQg
dGhpcwogIAkJICAgICAgIGhhcmRsaW5rX2luZm8gbm9kZSB0byB0aGUgYXBwcm9wcmlhdGUgaGFy
ZGxpc3QgZW50cnkuICovCiAgCQkgICAgaGxpbmZvID0gKHN0cnVjdCBoYXJkbGlua19pbmZvICop
CiAgCQkJeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaGFyZGxpbmtfaW5mbykpOwogIAkJICAgIGhs
aW5mby0+c3RhdHVzID0gc3RhdHVzOwogIAkJICAgIGxpbmtwLT5kYXRhID0gKGNoYXIgKikgaGxp
bmZvOwogIAkJfQogIAkgICAgfQogICNlbmRpZgogIAogIAkgICAgYnJlYWs7CisgICAgICAgICB9
CisgCiAgCWNhc2UgVF9VTktOT1dOOgogIAkgICAgZXJyb3IgKDAsIDAsICJub3RoaW5nIGtub3du
IGFib3V0IGAlcyciLCBmaW5mby0+ZnVsbG5hbWUpOwogIAkgICAgZnJlZXZlcnNfdHMgKCZ2ZXJz
KTsKICAJICAgIHJldHVybiAoMSk7CiAgCWNhc2UgVF9VUFRPREFURToKICAJICAgIGJyZWFrOwog
IAlkZWZhdWx0OgogIAkgICAgZXJyb3IgKDAsIDAsICJDVlMgaW50ZXJuYWwgZXJyb3I6IHVua25v
d24gc3RhdHVzICVkIiwgc3RhdHVzKTsKICAJICAgIGJyZWFrOwogICAgICB9CiAgCiAgICAgIGZy
ZWV2ZXJzX3RzICgmdmVycyk7CiAgICAgIHJldHVybiAoMCk7CiAgfQogIAogIC8qCioqKioqKioq
KioqKioqKgoqKiogMTM0NCwxMzc2ICoqKioKICAJICAgIHNlcnZlcl9zY3JhdGNoX2VudHJ5X29u
bHkgKCk7CiAgCSAgICBzZXJ2ZXJfdXBkYXRlZCAoZmluZm8sCiAgCQkJICAgIE5VTEwsCiAgCiAg
CQkJICAgIC8qIERvZXNuJ3QgbWF0dGVyLCBpdCB3b24ndCBnZXQgY2hlY2tlZC4gICovCiAgCQkJ
ICAgIFNFUlZFUl9VUERBVEVELAogIAogIAkJCSAgICAobW9kZV90KSAtMSwKICAJCQkgICAgKHVu
c2lnbmVkIGNoYXIgKikgTlVMTCwKICAJCQkgICAgKHN0cnVjdCBidWZmZXIgKikgTlVMTCk7CiAg
CX0KICAjZW5kaWYKICAgICAgfQogIAogICAgICAvKiBDbGVhcmx5IHRoaXMgaXMgcmlnaHQgZm9y
IFRfTU9ESUZJRUQuICBJIGhhdmVuJ3QgdGhvdWdodCBzbyBtdWNoCiAgICAgICAgIGFib3V0IFRf
QURERUQgb3IgVF9SRU1PVkVELiAgKi8KISAgICAgbm90aWZ5X2RvICgnQycsIGZpbmZvLT5maWxl
LCBnZXRjYWxsZXIgKCksIE5VTEwsIE5VTEwsIGZpbmZvLT5yZXBvc2l0b3J5KTsKICAKICBvdXQ6
CiAgICAgIGlmIChlcnIgIT0gMCkKICAgICAgewogIAkvKiBvbiBmYWlsdXJlLCByZW1vdmUgdGhl
IGZpbGUgZnJvbSB1bGlzdCAqLwogIAlwID0gZmluZG5vZGUgKHVsaXN0LCBmaW5mby0+ZmlsZSk7
CiAgCWlmIChwKQogIAkgICAgZGVsbm9kZSAocCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7
CiAgCS8qIE9uIHN1Y2Nlc3MsIHJldHJpZXZlIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIgb2YgdGhl
IGZpbGUgYW5kCiAgICAgICAgICAgICBjb3B5IGl0IGludG8gdGhlIGxvZyBpbmZvcm1hdGlvbiAo
c2VlIGxvZ21zZy5jCiAgICAgICAgICAgICAobG9nZmlsZV93cml0ZSkgZm9yIG1vcmUgZGV0YWls
cykuICBXZSBzaG91bGQgb25seSB1cGRhdGUKICAgICAgICAgICAgIHRoZSB2ZXJzaW9uIG51bWJl
ciBmb3IgZmlsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgb3IKICAgICAgICAgICAgIG1vZGlmaWVk
IGJ1dCBub3QgcmVtb3ZlZC4gIFdoeT8gIGNsYXNzaWZ5X2ZpbGVfaW50ZXJuYWwKLS0tIDE1Mjcs
MTU5NyAtLS0tCiAgCSAgICBzZXJ2ZXJfc2NyYXRjaF9lbnRyeV9vbmx5ICgpOwogIAkgICAgc2Vy
dmVyX3VwZGF0ZWQgKGZpbmZvLAogIAkJCSAgICBOVUxMLAogIAogIAkJCSAgICAvKiBEb2Vzbid0
IG1hdHRlciwgaXQgd29uJ3QgZ2V0IGNoZWNrZWQuICAqLwogIAkJCSAgICBTRVJWRVJfVVBEQVRF
RCwKICAKICAJCQkgICAgKG1vZGVfdCkgLTEsCiAgCQkJICAgICh1bnNpZ25lZCBjaGFyICopIE5V
TEwsCiAgCQkJICAgIChzdHJ1Y3QgYnVmZmVyICopIE5VTEwpOwogIAl9CiAgI2VuZGlmCiAgICAg
IH0KICAKICAgICAgLyogQ2xlYXJseSB0aGlzIGlzIHJpZ2h0IGZvciBUX01PRElGSUVELiAgSSBo
YXZlbid0IHRob3VnaHQgc28gbXVjaAogICAgICAgICBhYm91dCBUX0FEREVEIG9yIFRfUkVNT1ZF
RC4gICovCiEgICAgIHsKISAgICAgICAgIGNoYXIgKmVkaXRvciA9IE5VTEw7CiEgCiEgI2lmZGVm
IFNFUlZFUl9TVVBQT1JUCiEgICAgICAgICBpZiAoc2VydmVyX2FjdGl2ZSkKISAgICAgICAgIHsK
ISAgICAgICAgICAgICBOb2RlICpwID0gTlVMTDsKISAKISAgICAgICAgICAgICBwID0gZmluZG5v
ZGUgKHVsaXN0LCBmaW5mby0+ZmlsZSk7CiEgICAgICAgICAgICAgaWYgKHAgIT0gTlVMTCkKISAg
ICAgICAgICAgICB7CiEgICAgICAgICAgICAgICAgIHN0cnVjdCBsb2dmaWxlX2luZm8gKmxpID0g
TlVMTDsKISAKISAgICAgICAgICAgICAgICAgbGkgPSAoc3RydWN0IGxvZ2ZpbGVfaW5mbyAqKSBw
LT5kYXRhOwohICAgICAgICAgICAgICAgICBpZiAobGkgIT0gTlVMTCkKISAgICAgICAgICAgICAg
ICAgewohICAgICAgICAgICAgICAgICAgICAgZWRpdG9yID0gbGktPmVkaXRvcjsKISAgICAgICAg
ICAgICAgICAgfQohICAgICAgICAgICAgIH0KISAKISAgICAgICAgICAgICBub3RpZnlfZG8gKCdD
JywgZmluZm8tPmZpbGUsIGdldGNhbGxlciAoKSwgZWRpdG9yID8gZWRpdG9yIDogZ2V0Y2FsbGVy
ICgpLCBOVUxMLCAiIiwgZmluZm8tPnJlcG9zaXRvcnkpOwohICAgICAgICAgfQohICAgICAgICAg
ZWxzZQohICNlbmRpZgohICAgICAgICAgewohICAgICAgICAgICAgIGVkaXRvciA9IChjaGFyICop
IHhtYWxsb2MgKHN0cmxlbiAoZ2V0Y2FsbGVyICgpKSArIHNpemVvZiAoJ0AnKSArIHN0cmxlbiAo
aG9zdG5hbWUpICsgc2l6ZW9mICgnOicpICsgc3RybGVuIChDdXJEaXIpICsgc2l6ZW9mICgnLycp
ICsgc3RybGVuIChmaW5mby0+dXBkYXRlX2RpcikgKyAxKTsKISAgICAgICAgICAgICBzcHJpbnRm
IChlZGl0b3IsICIlc0AlczolcyIsIGdldGNhbGxlciAoKSwgaG9zdG5hbWUsIEN1ckRpcik7CiEg
CiEgICAgICAgICAgICAgaWYgKCpmaW5mby0+dXBkYXRlX2RpciAhPSAnXDAnKQohICAgICAgICAg
ICAgIHsKISAgICAgICAgICAgICAgICAgc3RyY2F0IChlZGl0b3IsICIvIik7CiEgICAgICAgICAg
ICAgICAgIHN0cmNhdCAoZWRpdG9yLCBmaW5mby0+dXBkYXRlX2Rpcik7CiEgICAgICAgICAgICAg
fQohIAohICAgICAgICAgICAgIG5vdGlmeV9kbyAoJ0MnLCBmaW5mby0+ZmlsZSwgZ2V0Y2FsbGVy
ICgpLCBlZGl0b3IsIE5VTEwsICIiLCBmaW5mby0+cmVwb3NpdG9yeSk7CiEgCiEgICAgICAgICAg
ICAgZnJlZSAoZWRpdG9yKTsKISAgICAgICAgIH0KISAgICAgfQogIAogIG91dDoKICAgICAgaWYg
KGVyciAhPSAwKQogICAgICB7CiAgCS8qIG9uIGZhaWx1cmUsIHJlbW92ZSB0aGUgZmlsZSBmcm9t
IHVsaXN0ICovCiAgCXAgPSBmaW5kbm9kZSAodWxpc3QsIGZpbmZvLT5maWxlKTsKICAJaWYgKHAp
CiAgCSAgICBkZWxub2RlIChwKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAJLyogT24g
c3VjY2VzcywgcmV0cmlldmUgdGhlIG5ldyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZmlsZSBhbmQK
ICAgICAgICAgICAgIGNvcHkgaXQgaW50byB0aGUgbG9nIGluZm9ybWF0aW9uIChzZWUgbG9nbXNn
LmMKICAgICAgICAgICAgIChsb2dmaWxlX3dyaXRlKSBmb3IgbW9yZSBkZXRhaWxzKS4gIFdlIHNo
b3VsZCBvbmx5IHVwZGF0ZQogICAgICAgICAgICAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBmaWxl
cyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvcgogICAgICAgICAgICAgbW9kaWZpZWQgYnV0IG5vdCBy
ZW1vdmVkLiAgV2h5PyAgY2xhc3NpZnlfZmlsZV9pbnRlcm5hbAoqKioqKioqKioqKioqKioKKioq
IDIyODksMjMyMCAqKioqCi0tLSAyNTEwLDI1NDkgLS0tLQogIAogICAgICBpZiAoYnJhbmNoKQog
IAlmcmVlIChicmFuY2gpOwogICAgICByZXR1cm4gKDEpOwogIH0KICAKICAvKgogICAqIGZyZWUg
YW4gVVBEQVRFIG5vZGUncyBkYXRhCiAgICovCiAgdm9pZAogIHVwZGF0ZV9kZWxwcm9jIChwKQog
ICAgICBOb2RlICpwOwogIHsKICAgICAgc3RydWN0IGxvZ2ZpbGVfaW5mbyAqbGk7CiAgCiAgICAg
IGxpID0gKHN0cnVjdCBsb2dmaWxlX2luZm8gKikgcC0+ZGF0YTsKKyAgICAgaWYgKGxpLT5yZXBv
c2l0b3J5KQorICAgICAgICAgZnJlZSAobGktPnJlcG9zaXRvcnkpOworICAgICBpZiAobGktPmhv
c3RuYW1lKQorICAgICAgICAgZnJlZSAobGktPmhvc3RuYW1lKTsKKyAgICAgaWYgKGxpLT53ZCkK
KyAgICAgICAgIGZyZWUgKGxpLT53ZCk7CisgICAgIGlmIChsaS0+ZWRpdG9yKQorICAgICAgICAg
ZnJlZSAobGktPmVkaXRvcik7CiAgICAgIGlmIChsaS0+dGFnKQogIAlmcmVlIChsaS0+dGFnKTsK
ICAgICAgaWYgKGxpLT5yZXZfb2xkKQogIAlmcmVlIChsaS0+cmV2X29sZCk7CiAgICAgIGlmIChs
aS0+cmV2X25ldykKICAJZnJlZSAobGktPnJldl9uZXcpOwogICAgICBmcmVlIChsaSk7CiAgfQog
IAogIC8qCiAgICogRnJlZSB0aGUgY29tbWl0X2luZm8gc3RydWN0dXJlIGluIHAuCiAgICovCiAg
c3RhdGljIHZvaWQKICBjaV9kZWxwcm9jIChwKQogICAgICBOb2RlICpwOwogIHsKSW5kZXg6IHNy
Yy9jdnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMv
Y3ZzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEuMS4xLjYuMQpkaWZmIC1DMTYgLXcgLXIxLjEuMS4xIC1yMS4xLjEuMS42LjEKKioqIHNyYy9j
dnMuaAkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIHNyYy9jdnMuaAkyMDAxLzAzLzA3
IDIzOjM1OjAyCTEuMS4xLjEuNi4xCioqKioqKioqKioqKioqKgoqKiogNzgwLDgxMSAqKioqCi0t
LSA3ODAsODE1IC0tLS0KICAjZW5kaWYKICAgICAgVF9USVRMRQkJCQkvKiB0aXRsZSBmb3Igbm9k
ZSB0eXBlIAkJICovCiAgfTsKICB0eXBlZGVmIGVudW0gY2xhc3NpZnlfdHlwZSBDdHlwZTsKICAK
ICBDdHlwZSBDbGFzc2lmeV9GaWxlIFBST1RPCiAgICAgICgoc3RydWN0IGZpbGVfaW5mbyAqZmlu
Zm8sIGNoYXIgKnRhZywgY2hhciAqZGF0ZSwgY2hhciAqb3B0aW9ucywKICAgICAgICBpbnQgZm9y
Y2VfdGFnX21hdGNoLCBpbnQgYWZsYWcsIFZlcnNfVFMgKip2ZXJzcCwgaW50IHBpcGVvdXQpKTsK
ICAKICAvKgogICAqIHN0cnVjdHVyZSB1c2VkIGZvciBsaXN0IG5vZGVzIHBhc3NlZCB0byBVcGRh
dGVfTG9nZmlsZSgpIGFuZAogICAqIGRvX2VkaXRvcigpLgogICAqLwogIHN0cnVjdCBsb2dmaWxl
X2luZm8KICB7CiAgICBlbnVtIGNsYXNzaWZ5X3R5cGUgdHlwZTsKKyAgIGNoYXIgKnJlcG9zaXRv
cnk7CisgICBjaGFyICpob3N0bmFtZTsKKyAgIGNoYXIgKndkOyAgICAgLyogd29ya2luZyBkaXJl
Y3RvcnkgKi8KKyAgIGNoYXIgKmVkaXRvcjsKICAgIGNoYXIgKnRhZzsKICAgIGNoYXIgKnJldl9v
bGQ7CQkvKiByZXYgbnVtYmVyIGJlZm9yZSBhIGNvbW1pdC9tb2RpZnksCiAgCQkJCSAgIE5VTEwg
Zm9yIGFkZCBvciBpbXBvcnQgKi8KICAgIGNoYXIgKnJldl9uZXc7CQkvKiByZXYgbnVtYmVyIGFm
dGVyIGEgY29tbWl0L21vZGlmeSwKICAJCQkJICAgYWRkLCBvciBpbXBvcnQsIE5VTEwgZm9yIHJl
bW92ZSAqLwogIH07CiAgDAogIC8qIFdyYXBwZXJzLiAgKi8KICAKICB0eXBlZGVmIGVudW0geyBX
UkFQX01FUkdFLCBXUkFQX0NPUFkgfSBXcmFwTWVyZ2VNZXRob2Q7CiAgdHlwZWRlZiBlbnVtIHsK
ICAgICAgLyogLXQgYW5kIC1mIHdyYXBwZXIgb3B0aW9ucy4gIFRyZWF0aW5nIGRpcmVjdG9yaWVz
IGFzIHNpbmdsZSBmaWxlcy4gICovCiAgICAgIFdSQVBfVE9DVlMsCiAgICAgIFdSQVBfRlJPTUNW
UywKICAgICAgLyogLWsgd3JhcHBlciBvcHRpb24uICBEZWZhdWx0IGtleXdvcmQgZXhwYW5zaW9u
IG9wdGlvbnMuICAqLwogICAgICBXUkFQX1JDU09QVElPTgpJbmRleDogc3JjL2VkaXQuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMvZWRpdC5jLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS42LjEK
ZGlmZiAtQzE2IC13IC1yMS4xLjEuMSAtcjEuMS4xLjEuNi4xCioqKiBzcmMvZWRpdC5jCTIwMDEv
MDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL2VkaXQuYwkyMDAxLzAzLzA3IDIzOjM1OjAy
CTEuMS4xLjEuNi4xCioqKioqKioqKioqKioqKgoqKiogMywzNiAqKioqCi0tLSAzLDM5IC0tLS0K
ICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICAgIGFu
eSBsYXRlciB2ZXJzaW9uLgogIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAg
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAqLwogIAogICNp
bmNsdWRlICJjdnMuaCIKICAjaW5jbHVkZSAiZ2V0bGluZS5oIgogICNpbmNsdWRlICJ3YXRjaC5o
IgogICNpbmNsdWRlICJlZGl0LmgiCiAgI2luY2x1ZGUgImZpbGVhdHRyLmgiCiAgCisgI2luY2x1
ZGUgPGFzc2VydC5oPgorIAogIHN0YXRpYyBpbnQgd2F0Y2hfb25vZmYgUFJPVE8gKChpbnQsIGNo
YXIgKiopKTsKICAKKyBzdGF0aWMgaW50IGNoZWNrX2VkaXRlZCA9IDA7CiAgc3RhdGljIGludCBz
ZXR0aW5nX2RlZmF1bHQ7CiAgc3RhdGljIGludCB0dXJuaW5nX29uOwogIAogIHN0YXRpYyBpbnQg
c2V0dGluZ190ZWRpdDsKICBzdGF0aWMgaW50IHNldHRpbmdfdHVuZWRpdDsKICBzdGF0aWMgaW50
IHNldHRpbmdfdGNvbW1pdDsKICAKICBzdGF0aWMgaW50IG9ub2ZmX2ZpbGVwcm9jIFBST1RPICgo
dm9pZCAqY2FsbGVyZGF0LCBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbykpOwogIAogIHN0YXRpYyBp
bnQKICBvbm9mZl9maWxlcHJvYyAoY2FsbGVyZGF0LCBmaW5mbykKICAgICAgdm9pZCAqY2FsbGVy
ZGF0OwogICAgICBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbzsKICB7CiAgICAgIGZpbGVhdHRyX3Nl
dCAoZmluZm8tPmZpbGUsICJfd2F0Y2hlZCIsIHR1cm5pbmdfb24gPyAiIiA6IE5VTEwpOwogICAg
ICByZXR1cm4gMDsKKioqKioqKioqKioqKioqCioqKiAxNDEsMTcyICoqKioKLS0tIDE0NCwxNzYg
LS0tLQogIH0KICAKICBzdGF0aWMgaW50IG5jaGVja19maWxlcHJvYyBQUk9UTyAoKHZvaWQgKmNh
bGxlcmRhdCwgc3RydWN0IGZpbGVfaW5mbyAqZmluZm8pKTsKICAKICAvKiBDaGVjayBmb3IgYW5k
IHByb2Nlc3Mgbm90aWZpY2F0aW9ucy4gIExvY2FsIG9ubHkuICBJIHRoaW5rIHRoYXQgZG9pbmcK
ICAgICB0aGlzIGFzIGEgZmlsZXByb2MgaXMgdGhlIG9ubHkgd2F5IHRvIGNhdGNoIGFsbCB0aGUK
ICAgICBjYXNlcyAoZS5nLiBmb28vYmFyLmMpLCBldmVuIHRob3VnaCB0aGF0IG1lYW5zIGNoZWNr
aW5nIG92ZXIgYW5kIG92ZXIKICAgICBmb3IgdGhlIHNhbWUgQ1ZTQURNX05PVElGWSBmaWxlIHdo
aWNoIHdlIHJlbW92ZWQgdGhlIGZpcnN0IHRpbWUgd2UKICAgICBwcm9jZXNzZWQgdGhlIGRpcmVj
dG9yeS4gICovCiAgCiAgc3RhdGljIGludAogIG5jaGVja19maWxlcHJvYyAoY2FsbGVyZGF0LCBm
aW5mbykKICAgICAgdm9pZCAqY2FsbGVyZGF0OwogICAgICBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5m
bzsKICB7CiAgICAgIGludCBub3RpZl90eXBlOworICAgICBjaGFyICplZGl0b3IgPSBOVUxMOwog
ICAgICBjaGFyICpmaWxlbmFtZTsKICAgICAgY2hhciAqdmFsOwogICAgICBjaGFyICpjcDsKICAg
ICAgY2hhciAqd2F0Y2hlczsKICAKICAgICAgRklMRSAqZnA7CiAgICAgIGNoYXIgKmxpbmUgPSBO
VUxMOwogICAgICBzaXplX3QgbGluZV9sZW4gPSAwOwogIAogICAgICAvKiBXZSBzZW5kIG5vdGlm
aWNhdGlvbnMgZXZlbiBpZiBub2V4ZWMuICBJJ20gbm90IHN1cmUgd2hpY2ggYmVoYXZpb3IKICAg
ICAgICAgaXMgbW9zdCBzZW5zaWJsZS4gICovCiAgCiAgICAgIGZwID0gQ1ZTX0ZPUEVOIChDVlNB
RE1fTk9USUZZLCAiciIpOwogICAgICBpZiAoZnAgPT0gTlVMTCkKICAgICAgewogIAlpZiAoIWV4
aXN0ZW5jZV9lcnJvciAoZXJybm8pKQoqKioqKioqKioqKioqKioKKioqIDE4NSwyMjIgKioqKgog
IAkgICAgY29udGludWU7CiAgCSpjcCsrID0gJ1wwJzsKICAJdmFsID0gY3A7CiAgCWNwID0gc3Ry
Y2hyICh2YWwsICdcdCcpOwogIAlpZiAoY3AgPT0gTlVMTCkKICAJICAgIGNvbnRpbnVlOwogIAkq
Y3ArKyA9ICcrJzsKICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJaWYgKGNwID09IE5VTEwp
CiAgCSAgICBjb250aW51ZTsKICAJKmNwKysgPSAnKyc7CiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0
Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgY29udGludWU7CiAgCSpjcCsrID0gJ1wwJzsK
ICAJd2F0Y2hlcyA9IGNwOwohIAljcCA9IHN0cmNociAoY3AsICdcbicpOwogIAlpZiAoY3AgPT0g
TlVMTCkKICAJICAgIGNvbnRpbnVlOwogIAkqY3AgPSAnXDAnOwogIAohIAlub3RpZnlfZG8gKG5v
dGlmX3R5cGUsIGZpbGVuYW1lLCBnZXRjYWxsZXIgKCksIHZhbCwgd2F0Y2hlcywKICAJCSAgIGZp
bmZvLT5yZXBvc2l0b3J5KTsKICAgICAgfQogICAgICBmcmVlIChsaW5lKTsKICAKICAgICAgaWYg
KGZlcnJvciAoZnApKQogIAllcnJvciAoMCwgZXJybm8sICJjYW5ub3QgcmVhZCAlcyIsIENWU0FE
TV9OT1RJRlkpOwogICAgICBpZiAoZmNsb3NlIChmcCkgPCAwKQogIAllcnJvciAoMCwgZXJybm8s
ICJjYW5ub3QgY2xvc2UgJXMiLCBDVlNBRE1fTk9USUZZKTsKICAKICAgICAgaWYgKCBDVlNfVU5M
SU5LIChDVlNBRE1fTk9USUZZKSA8IDApCiAgCWVycm9yICgwLCBlcnJubywgImNhbm5vdCByZW1v
dmUgJXMiLCBDVlNBRE1fTk9USUZZKTsKICAKICAgICAgcmV0dXJuIDA7CiAgfQogIAogIHN0YXRp
YyBpbnQgc2VuZF9ub3RpZmljYXRpb25zIFBST1RPICgoaW50LCBjaGFyICoqLCBpbnQpKTsKLS0t
IDE4OSwyMzEgLS0tLQogIAkgICAgY29udGludWU7CiAgCSpjcCsrID0gJ1wwJzsKICAJdmFsID0g
Y3A7CiAgCWNwID0gc3RyY2hyICh2YWwsICdcdCcpOwogIAlpZiAoY3AgPT0gTlVMTCkKICAJICAg
IGNvbnRpbnVlOwogIAkqY3ArKyA9ICcrJzsKICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJ
aWYgKGNwID09IE5VTEwpCiAgCSAgICBjb250aW51ZTsKICAJKmNwKysgPSAnKyc7CiAgCWNwID0g
c3RyY2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgY29udGludWU7CiAg
CSpjcCsrID0gJ1wwJzsKICAJd2F0Y2hlcyA9IGNwOwohIAljcCA9IHN0cmNociAoY3AsICdcdCcp
OwohIAlpZiAoY3AgPT0gTlVMTCkKISAJICAgIGNvbnRpbnVlOwohIAkqY3ArKyA9ICdcMCc7CiEg
ICAgICAgICBlZGl0b3IgPSBjcDsKISAgICAgICAgIGNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CiAg
ICAgICAgICBpZiAoY3AgPT0gTlVMTCkKICAJICAgIGNvbnRpbnVlOwogIAkqY3AgPSAnXDAnOwog
IAohIAlub3RpZnlfZG8gKG5vdGlmX3R5cGUsIGZpbGVuYW1lLCBnZXRjYWxsZXIgKCksIGVkaXRv
ciwgdmFsLCB3YXRjaGVzLAogIAkJICAgZmluZm8tPnJlcG9zaXRvcnkpOwogICAgICB9CiAgICAg
IGZyZWUgKGxpbmUpOwogIAogICAgICBpZiAoZmVycm9yIChmcCkpCiAgCWVycm9yICgwLCBlcnJu
bywgImNhbm5vdCByZWFkICVzIiwgQ1ZTQURNX05PVElGWSk7CiAgICAgIGlmIChmY2xvc2UgKGZw
KSA8IDApCiAgCWVycm9yICgwLCBlcnJubywgImNhbm5vdCBjbG9zZSAlcyIsIENWU0FETV9OT1RJ
RlkpOwogIAogICAgICBpZiAoIENWU19VTkxJTksgKENWU0FETV9OT1RJRlkpIDwgMCkKICAJZXJy
b3IgKDAsIGVycm5vLCAiY2Fubm90IHJlbW92ZSAlcyIsIENWU0FETV9OT1RJRlkpOwogIAogICAg
ICByZXR1cm4gMDsKICB9CiAgCiAgc3RhdGljIGludCBzZW5kX25vdGlmaWNhdGlvbnMgUFJPVE8g
KChpbnQsIGNoYXIgKiosIGludCkpOwoqKioqKioqKioqKioqKioKKioqIDI1Niw0MDAgKioqKgog
ICAgICB9CiAgICAgIGVsc2UKICAjZW5kaWYKICAgICAgewogIAkvKiBMb2NhbC4gICovCiAgCiAg
CWxvY2tfdHJlZV9mb3Jfd3JpdGUgKGFyZ2MsIGFyZ3YsIGxvY2FsLCAwKTsKICAJZXJyICs9IHN0
YXJ0X3JlY3Vyc2lvbiAobmNoZWNrX2ZpbGVwcm9jLCAoRklMRVNET05FUFJPQykgTlVMTCwKICAJ
CQkJKERJUkVOVFBST0MpIE5VTEwsIChESVJMRUFWRVBST0MpIE5VTEwsIE5VTEwsCiAgCQkJCWFy
Z2MsIGFyZ3YsIGxvY2FsLCBXX0xPQ0FMLCAwLCAwLCAoY2hhciAqKU5VTEwsCiAgCQkJCTApOwog
IAlMb2NrX0NsZWFudXAgKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVycjsKICB9CiAgDAohIHN0
YXRpYyBpbnQgZWRpdF9maWxlcHJvYyBQUk9UTyAoKHZvaWQgKmNhbGxlcmRhdCwgc3RydWN0IGZp
bGVfaW5mbyAqZmluZm8pKTsKICAKICBzdGF0aWMgaW50CiEgZWRpdF9maWxlcHJvYyAoY2FsbGVy
ZGF0LCBmaW5mbykKICAgICAgdm9pZCAqY2FsbGVyZGF0OwogICAgICBzdHJ1Y3QgZmlsZV9pbmZv
ICpmaW5mbzsKICB7CiAgICAgIEZJTEUgKmZwOwogICAgICB0aW1lX3Qgbm93OwogICAgICBjaGFy
ICphc2Nub3c7CiAgICAgIGNoYXIgKmJhc2VmaWxlbmFtZTsKICAKISAgICAgaWYgKG5vZXhlYykK
ISAJcmV0dXJuIDA7CiAgCiAgICAgIC8qIFRoaXMgaXMgYSBzb21ld2hhdCBzY3Jld3kgd2F5IHRv
IGNoZWNrIGZvciB0aGlzLCBiZWNhdXNlIGl0CiAgICAgICAgIGRvZXNuJ3QgaGVscCBlcnJvcnMg
b3RoZXIgdGhhbiB0aGUgbm9uZXhpc3RlbmNlIG9mIHRoZSBmaWxlCiAgICAgICAgIChlLmcuIHBl
cm1pc3Npb25zIHByb2JsZW1zKS4gIEl0IG1pZ2h0IGJlIGJldHRlciB0byByZWFycmFuZ2UKICAg
ICAgICAgdGhlIGNvZGUgc28gdGhhdCBDVlNBRE1fTk9USUZZIGdldHMgd3JpdHRlbiBvbmx5IGFm
dGVyIHRoZQogICAgICAgICB2YXJpb3VzIGFjdGlvbnMgc3VjY2VlZCAoYnV0IHdoYXQgaWYgb25s
eSBzb21lIG9mIHRoZW0KICAgICAgICAgc3VjY2VlZCkuICAqLwogICAgICBpZiAoIWlzZmlsZSAo
ZmluZm8tPmZpbGUpKQogICAgICB7CiAgCWVycm9yICgwLCAwLCAibm8gc3VjaCBmaWxlICVzOyBp
Z25vcmVkIiwgZmluZm8tPmZ1bGxuYW1lKTsKICAJcmV0dXJuIDA7CiAgICAgIH0KICAKISAgICAg
ZnAgPSBvcGVuX2ZpbGUgKENWU0FETV9OT1RJRlksICJhIik7CiAgCiEgICAgICh2b2lkKSB0aW1l
ICgmbm93KTsKISAgICAgYXNjbm93ID0gYXNjdGltZSAoZ210aW1lICgmbm93KSk7CiEgICAgIGFz
Y25vd1syNF0gPSAnXDAnOwohICAgICBmcHJpbnRmIChmcCwgIkUlc1x0JXMgR01UXHQlc1x0JXNc
dCIsIGZpbmZvLT5maWxlLAohIAkgICAgIGFzY25vdywgaG9zdG5hbWUsIEN1ckRpcik7CiEgICAg
IGlmIChzZXR0aW5nX3RlZGl0KQohIAlmcHJpbnRmIChmcCwgIkUiKTsKISAgICAgaWYgKHNldHRp
bmdfdHVuZWRpdCkKISAJZnByaW50ZiAoZnAsICJVIik7CiEgICAgIGlmIChzZXR0aW5nX3Rjb21t
aXQpCiEgCWZwcmludGYgKGZwLCAiQyIpOwohICAgICBmcHJpbnRmIChmcCwgIlxuIik7CiAgCiEg
ICAgIGlmIChmY2xvc2UgKGZwKSA8IDApCiAgICAgIHsKISAJaWYgKGZpbmZvLT51cGRhdGVfZGly
WzBdID09ICdcMCcpCiEgCSAgICBlcnJvciAoMCwgZXJybm8sICJjYW5ub3QgY2xvc2UgJXMiLCBD
VlNBRE1fTk9USUZZKTsKICAJZWxzZQohIAkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90IGNs
b3NlICVzLyVzIiwgZmluZm8tPnVwZGF0ZV9kaXIsCiEgCQkgICBDVlNBRE1fTk9USUZZKTsKICAg
ICAgfQogIAogICAgICB4Y2htb2QgKGZpbmZvLT5maWxlLCAxKTsKICAKICAgICAgLyogTm93IHN0
YXNoIHRoZSBmaWxlIGF3YXkgaW4gQ1ZTQURNIHNvIHRoYXQgdW5lZGl0IGNhbiByZXZlcnQgZXZl
biBpZgogICAgICAgICBpdCBjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBzZXJ2ZXIuICBXZSBz
dGFzaCBhd2F5IGEgd3JpdGFibGUKICAgICAgICAgY29weSBzbyB0aGF0IGlmIHRoZSB1c2VyIHJl
bW92ZXMgdGhlIHdvcmtpbmcgZmlsZSwgdGhlbiByZXN0b3JlcyBpdAogICAgICAgICB3aXRoICJj
dnMgdXBkYXRlIiAod2hpY2ggY2xlYXJzIF9lZGl0b3JzIGJ1dCBkb2VzIG5vdCB1cGRhdGUKICAg
ICAgICAgQ1ZTQURNX0JBU0UpLCB0aGVuIGEgZnV0dXJlICJjdnMgZWRpdCIgY2FuIHN0aWxsIHdp
bi4gICovCiAgICAgIC8qIENvdWxkIHNhdmUgYSBzeXN0ZW0gY2FsbCBieSBvbmx5IGNhbGxpbmcg
bWtkaXJfaWZfbmVlZGVkIGlmCiAgICAgICAgIHRyeWluZyB0byBjcmVhdGUgdGhlIG91dHB1dCBm
aWxlIGZhaWxzLiAgQnV0IGNvcHlfZmlsZSBpc24ndAogICAgICAgICBzZXQgdXAgdG8gZmFjaWxp
dGF0ZSB0aGF0LiAgKi8KICAgICAgbWtkaXJfaWZfbmVlZGVkIChDVlNBRE1fQkFTRSk7CiAgICAg
IGJhc2VmaWxlbmFtZSA9IHhtYWxsb2MgKDEwICsgc2l6ZW9mIENWU0FETV9CQVNFICsgc3RybGVu
IChmaW5mby0+ZmlsZSkpOwogICAgICBzdHJjcHkgKGJhc2VmaWxlbmFtZSwgQ1ZTQURNX0JBU0Up
OwogICAgICBzdHJjYXQgKGJhc2VmaWxlbmFtZSwgIi8iKTsKICAgICAgc3RyY2F0IChiYXNlZmls
ZW5hbWUsIGZpbmZvLT5maWxlKTsKICAgICAgY29weV9maWxlIChmaW5mby0+ZmlsZSwgYmFzZWZp
bGVuYW1lKTsKICAgICAgZnJlZSAoYmFzZWZpbGVuYW1lKTsKICAKICAgICAgewogIAlOb2RlICpu
b2RlOwogIAogIAlub2RlID0gZmluZG5vZGVfZm4gKGZpbmZvLT5lbnRyaWVzLCBmaW5mby0+Zmls
ZSk7CiAgCWlmIChub2RlICE9IE5VTEwpCiAgCSAgICBiYXNlX3JlZ2lzdGVyIChmaW5mbywgKChF
bnRub2RlICopIG5vZGUtPmRhdGEpLT52ZXJzaW9uKTsKICAgICAgfQogIAogICAgICByZXR1cm4g
MDsKICB9CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVkaXRfdXNhZ2VbXSA9CiAgewoh
ICAgICAiVXNhZ2U6ICVzICVzIFstbFJdIFtmaWxlcy4uLl1cbiIsCiAgICAgICItbDogTG9jYWwg
ZGlyZWN0b3J5IG9ubHksIG5vdCByZWN1cnNpdmVcbiIsCiAgICAgICItUjogUHJvY2VzcyBkaXJl
Y3RvcmllcyByZWN1cnNpdmVseVxuIiwKICAgICAgIi1hOiBTcGVjaWZ5IHdoYXQgYWN0aW9ucyBm
b3IgdGVtcG9yYXJ5IHdhdGNoLCBvbmUgb2ZcbiIsCiAgICAgICIgICAgZWRpdCx1bmVkaXQsY29t
bWl0LGFsbCxub25lXG4iLAogICAgICAiKFNwZWNpZnkgdGhlIC0taGVscCBnbG9iYWwgb3B0aW9u
IGZvciBhIGxpc3Qgb2Ygb3RoZXIgaGVscCBvcHRpb25zKVxuIiwKICAgICAgTlVMTAogIH07CiAg
CiAgaW50CiAgZWRpdCAoYXJnYywgYXJndikKICAgICAgaW50IGFyZ2M7CiAgICAgIGNoYXIgKiph
cmd2OwogIHsKICAgICAgaW50IGxvY2FsID0gMDsKICAgICAgaW50IGM7CiEgICAgIGludCBlcnI7
CiAgICAgIGludCBhX29taXR0ZWQ7CiAgCiAgICAgIGlmIChhcmdjID09IC0xKQogIAl1c2FnZSAo
ZWRpdF91c2FnZSk7Ci0gCiAgICAgIGFfb21pdHRlZCA9IDE7CiAgICAgIHNldHRpbmdfdGVkaXQg
PSAwOwogICAgICBzZXR0aW5nX3R1bmVkaXQgPSAwOwogICAgICBzZXR0aW5nX3Rjb21taXQgPSAw
OwogICAgICBvcHRpbmQgPSAwOwohICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3Ys
ICIrbFJhOiIpKSAhPSAtMSkKICAgICAgewogIAlzd2l0Y2ggKGMpCiAgCXsKICAJICAgIGNhc2Ug
J2wnOgogIAkJbG9jYWwgPSAxOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlICdSJzoKICAJCWxvY2Fs
ID0gMDsKICAJCWJyZWFrOwogIAkgICAgY2FzZSAnYSc6CiAgCQlhX29taXR0ZWQgPSAwOwogIAkJ
aWYgKHN0cmNtcCAob3B0YXJnLCAiZWRpdCIpID09IDApCiAgCQkgICAgc2V0dGluZ190ZWRpdCA9
IDE7CiAgCQllbHNlIGlmIChzdHJjbXAgKG9wdGFyZywgInVuZWRpdCIpID09IDApCiAgCQkgICAg
c2V0dGluZ190dW5lZGl0ID0gMTsKICAJCWVsc2UgaWYgKHN0cmNtcCAob3B0YXJnLCAiY29tbWl0
IikgPT0gMCkKICAJCSAgICBzZXR0aW5nX3Rjb21taXQgPSAxOwogIAkJZWxzZSBpZiAoc3RyY21w
IChvcHRhcmcsICJhbGwiKSA9PSAwKQogIAkJewotLS0gMjY1LDc2NSAtLS0tCiAgICAgIH0KICAg
ICAgZWxzZQogICNlbmRpZgogICAgICB7CiAgCS8qIExvY2FsLiAgKi8KICAKICAJbG9ja190cmVl
X2Zvcl93cml0ZSAoYXJnYywgYXJndiwgbG9jYWwsIDApOwogIAllcnIgKz0gc3RhcnRfcmVjdXJz
aW9uIChuY2hlY2tfZmlsZXByb2MsIChGSUxFU0RPTkVQUk9DKSBOVUxMLAogIAkJCQkoRElSRU5U
UFJPQykgTlVMTCwgKERJUkxFQVZFUFJPQykgTlVMTCwgTlVMTCwKICAJCQkJYXJnYywgYXJndiwg
bG9jYWwsIFdfTE9DQUwsIDAsIDAsIChjaGFyICopTlVMTCwKICAJCQkJMCk7CiAgCUxvY2tfQ2xl
YW51cCAoKTsKICAgICAgfQogICAgICByZXR1cm4gZXJyOwogIH0KICAMCiEgc3RhdGljIHZvaWQg
bm90aWZ5X3B1dCBQUk9UTyAoKHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvLCBjaGFyICplZGl0b3Is
IGNoYXIgYWN0aW9uLCBpbnQgdGVkaXQsIGludCB0dW5lZGl0LCBpbnQgdGNvbW1pdCkpOwohIAoh
IHN0YXRpYyB2b2lkCiEgbm90aWZ5X3B1dCAoZmluZm8sIGVkaXRvciwgYWN0aW9uLCB0ZWRpdCwg
dHVuZWRpdCwgdGNvbW1pdCkKISAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87CiEgICAgIGNo
YXIgKmVkaXRvcjsKISAgICAgY2hhciBhY3Rpb247CiEgICAgIGludCB0ZWRpdDsKISAgICAgaW50
IHR1bmVkaXQ7CiEgICAgIGludCB0Y29tbWl0OwohIHsKISAgICAgRklMRSAqZnA7CiEgICAgIHRp
bWVfdCBub3c7CiEgICAgIGNoYXIgKmFzY25vdzsKISAgICAgY2hhciAqd2QgPSBOVUxMOwohIAoh
ICAgICBmcCA9IG9wZW5fZmlsZSAoQ1ZTQURNX05PVElGWSwgImEiKTsKISAKISAgICAgKHZvaWQp
IHRpbWUgKCZub3cpOwohICAgICBhc2Nub3cgPSBhc2N0aW1lIChnbXRpbWUgKCZub3cpKTsKISAg
ICAgYXNjbm93WzI0XSA9ICdcMCc7CiEgCiEgICAgIHdkID0gKGNoYXIgKikgbWFsbG9jIChzdHJs
ZW4gKEN1ckRpcikgKyBzdHJsZW4gKERJUlNFUCkgKyBzdHJsZW4gKGZpbmZvLT51cGRhdGVfZGly
KSArIDEpOwohICAgICBzdHJjcHkod2QsIEN1ckRpcik7CiEgICAgIGlmIChmaW5mby0+dXBkYXRl
X2RpciAhPSBOVUxMICYmICpmaW5mby0+dXBkYXRlX2RpciAhPSAnXDAnKQohICAgICB7CiEgICAg
ICAgICBzdHJjYXQgKHdkLCBESVJTRVApOwohICAgICAgICAgc3RyY2F0ICh3ZCwgZmluZm8tPnVw
ZGF0ZV9kaXIpOwohICAgICB9CiEgCiEgICAgIC8qIHJlbW92ZSAiLi8iICovCiEgICAgIHsKISAg
ICAgICAgIGNoYXIgKnAgPSBOVUxMOwohIAohICAgICAgICAgYXNzZXJ0IChzdHJsZW4gKHdkKSA+
IDEKISAgICAgICAgICAgICAgICAgJiYgKHdkWzBdICE9ICcuJyAgfHwgICFJU0RJUlNFUCh3ZFsx
XSkpKTsKISAKISAgICAgICAgIGZvciAocCA9IHN0cnN0ciAod2QsICIuIik7CiEgICAgICAgICAg
ICAgIHAgPCB3ZCArIHN0cmxlbiAod2QpICAmJiAgcCAhPSBOVUxMOwohICAgICAgICAgICAgICBw
ID0gc3Ryc3RyIChwICsgMSwgIi4iKSkKISAgICAgICAgIHsKISAgICAgICAgICAgICBpZiAoSVNE
SVJTRVAgKCoocCAtIDEpKQohICAgICAgICAgICAgICAgICAmJiBJU0RJUlNFUCAoKihwICsgMSkp
KQohICAgICAgICAgICAgIHsKISAgICAgICAgICAgICAgICAgY2hhciAqcDAgPSBOVUxMOwohICAg
ICAgICAgICAgICAgICBjaGFyICpwMSA9IE5VTEw7CiEgCiEgICAgICAgICAgICAgICAgIGZvciAo
cDAgPSBwLCBwMSA9IHAgKyAyOwohICAgICAgICAgICAgICAgICAgICAgIHAxIDwgd2QgKyBzdHJs
ZW4gKHdkKSAgJiYgICpwMSAhPSAnXDAnOwohICAgICAgICAgICAgICAgICAgICAgICsrcDAsICsr
cDEpCiEgICAgICAgICAgICAgICAgIHsKISAgICAgICAgICAgICAgICAgICAgICpwMCA9ICpwMTsK
ISAgICAgICAgICAgICAgICAgfQohIAohICAgICAgICAgICAgICAgICAqcDAgPSAnXDAnOwohICAg
ICAgICAgICAgIH0KISAgICAgICAgIH0KISAgICAgfQohIAohICAgICAvKiByZW1vdmUgIi4uLyIg
Ki8KISAgICAgewohICAgICAgICAgY2hhciAqcCA9IE5VTEw7CiEgCiEgICAgICAgICBhc3NlcnQg
KHN0cmxlbiAod2QpID4gMgohICAgICAgICAgICAgICAgICAmJiAod2RbMF0gIT0gJy4nICB8fCAg
d2RbMV0gIT0gJy4nICB8fCAgIUlTRElSU0VQKHdkWzJdKSkpOwohIAohICAgICAgICAgZm9yIChw
ID0gc3Ryc3RyICh3ZCwgIi4uIik7CiEgICAgICAgICAgICAgIHAgPCB3ZCArIHN0cmxlbiAod2Qp
ICAmJiAgcCAhPSBOVUxMOwohICAgICAgICAgICAgICBwID0gc3Ryc3RyIChwICsgMiwgIi4uIikp
CiEgICAgICAgICB7CiEgICAgICAgICAgICAgaWYgKElTRElSU0VQICgqKHAgLSAxKSkKISAgICAg
ICAgICAgICAgICAgJiYgSVNESVJTRVAgKCoocCArIDIpKSkKISAgICAgICAgICAgICB7CiEgICAg
ICAgICAgICAgICAgIGNoYXIgKnAwID0gTlVMTDsKISAgICAgICAgICAgICAgICAgY2hhciAqcDEg
PSBOVUxMOwohIAohICAgICAgICAgICAgICAgICBwMCA9IHAgLSAxOwohICAgICAgICAgICAgICAg
ICBkbwohICAgICAgICAgICAgICAgICB7CiEgICAgICAgICAgICAgICAgICAgICAtLXAwOwohICAg
ICAgICAgICAgICAgICB9CiEgICAgICAgICAgICAgICAgIHdoaWxlIChwMCA+d2QgICYmICAhSVNE
SVJTRVAgKCpwMCkpOwogIAorICAgICAgICAgICAgICAgICBwMSA9IHAgKyAyOworICAgICAgICAg
ICAgICAgICBkbworICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICArK3Ax
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHdoaWxlIChwMSA8IHdkICsg
c3RybGVuICh3ZCkgICYmICAhSVNESVJTRVAgKCpwMSkpOworIAorICAgICAgICAgICAgICAgICBm
b3IgKDsgcDEgPCB3ZCArIHN0cmxlbiAod2QpICAmJiAgKnAxICE9ICdcMCc7ICsrcDAsICsrcDEp
CisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICpwMCA9ICpwMTsKKyAg
ICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAqcDAgPSAnXDAnOworICAgICAg
ICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorIAorICAgICBzdHJpcF90cmFpbGluZ19zbGFz
aGVzICh3ZCk7CisgCisgICAgIGZwcmludGYgKGZwLCAiJWMlc1x0JXMgR01UXHQlc1x0JXNcdCIs
IGFjdGlvbiwgZmluZm8tPmZpbGUsIGFzY25vdywgaG9zdG5hbWUsIHdkKTsKKyAgICAgaWYgKHRl
ZGl0KQorIAlmcHJpbnRmIChmcCwgIkUiKTsKKyAgICAgaWYgKHR1bmVkaXQpCisgCWZwcmludGYg
KGZwLCAiVSIpOworICAgICBpZiAodGNvbW1pdCkKKyAJZnByaW50ZiAoZnAsICJDIik7CisgCisg
ICAgIGlmIChlZGl0b3IgPT0gTlVMTCAgfHwgIHN0cmNtcCAoZWRpdG9yLCAiIikgPT0gMCkKKyAg
ICAgeworICAgICAgICAgZnByaW50ZiAoZnAsICJcdCVzQCVzOiVzXHQiLCBnZXRjYWxsZXIgKCks
IGhvc3RuYW1lLCB3ZCk7CisgICAgIH0KKyAgICAgZWxzZQorICAgICB7CisgICAgICAgICBmcHJp
bnRmIChmcCwgIlx0JXNcdCIsIGVkaXRvcik7CisgICAgIH0KKyAKKyAgICAgZnByaW50ZiAoZnAs
ICJcbiIpOworIAorICAgICBpZiAoZmNsb3NlIChmcCkgPCAwKQorICAgICB7CisgCWlmIChmaW5m
by0+dXBkYXRlX2RpclswXSA9PSAnXDAnKQorIAkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fubm90
IGNsb3NlICVzIiwgQ1ZTQURNX05PVElGWSk7CisgCWVsc2UKKyAJICAgIGVycm9yICgwLCBlcnJu
bywgImNhbm5vdCBjbG9zZSAlcy8lcyIsIGZpbmZvLT51cGRhdGVfZGlyLAorIAkJICAgQ1ZTQURN
X05PVElGWSk7CisgICAgIH0KKyAKKyAgICAgaWYgKHdkICE9IE5VTEwpCisgICAgICAgICBmcmVl
ICh3ZCk7CisgfQorIAwKKyBzdGF0aWMgaW50IGVkaXRvcnNfb3V0cHV0IFBST1RPICgoc3RydWN0
IGZpbGVfaW5mbyAqZmluZm8pKTsKKyAKICBzdGF0aWMgaW50CiEgICAgIGVkaXRvcnNfb3V0cHV0
IChmaW5mbykKISAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87CiEgewohICAgICBjaGFyICp0
aGVtOwohICAgICBjaGFyICpwOwohIAohICAgICB0aGVtID0gZmlsZWF0dHJfZ2V0MCAoZmluZm8t
PmZpbGUsICJfZWRpdG9ycyIpOwohICAgICBpZiAodGhlbSA9PSBOVUxMKQohICAgICAgICAgcmV0
dXJuIDA7CiEgCiEgICAgIGN2c19vdXRwdXQgKGZpbmZvLT5mdWxsbmFtZSwgMCk7CiEgCiEgICAg
IHAgPSB0aGVtOwohICAgICB3aGlsZSAoMSkKISAgICAgewohICAgICAgICAgY3ZzX291dHB1dCAo
Ilx0IiwgMSk7CiEgICAgICAgICB3aGlsZSAoKnAgIT0gJz4nICYmICpwICE9ICdcMCcpCiEgICAg
ICAgICAgICAgY3ZzX291dHB1dCAocCsrLCAxKTsKISAgICAgICAgIGlmICgqcCA9PSAnXDAnKQoh
ICAgICAgICAgewohICAgICAgICAgICAgIC8qIE9ubHkgaGFwcGVucyBpZiBhdHRyaWJ1dGUgaXMg
bWlzZm9ybWVkLiAgKi8KISAgICAgICAgICAgICBjdnNfb3V0cHV0ICgiXG4iLCAxKTsKISAgICAg
ICAgICAgICBicmVhazsKISAgICAgICAgIH0KISAgICAgICAgICsrcDsKISAgICAgICAgIGN2c19v
dXRwdXQgKCJcdCIsIDEpOwohICAgICAgICAgd2hpbGUgKDEpCiEgICAgICAgICB7CiEgICAgICAg
ICAgICAgd2hpbGUgKCpwICE9ICcrJyAmJiAqcCAhPSAnLCcgJiYgKnAgIT0gJ1wwJykKISAgICAg
ICAgICAgICAgICAgY3ZzX291dHB1dCAocCsrLCAxKTsKISAgICAgICAgICAgICBpZiAoKnAgPT0g
J1wwJykKISAgICAgICAgICAgICB7CiEgICAgICAgICAgICAgICAgIGN2c19vdXRwdXQgKCJcbiIs
IDEpOwohICAgICAgICAgICAgICAgICBnb3RvIG91dDsKISAgICAgICAgICAgICB9CiEgICAgICAg
ICAgICAgaWYgKCpwID09ICcsJykKISAgICAgICAgICAgICB7CiEgICAgICAgICAgICAgICAgICsr
cDsKISAgICAgICAgICAgICAgICAgYnJlYWs7CiEgICAgICAgICAgICAgfQohICAgICAgICAgICAg
ICsrcDsKISAgICAgICAgICAgICBjdnNfb3V0cHV0ICgiXHQiLCAxKTsKISAgICAgICAgIH0KISAg
ICAgICAgIGN2c19vdXRwdXQgKCJcbiIsIDEpOwohICAgICB9CiEgCiEgb3V0OgohICAgICBmcmVl
ICh0aGVtKTsKISAKISAgICAgcmV0dXJuIDA7CiEgfQohIAwKISAKISBzdGF0aWMgaW50IGNoZWNr
X2ZpbGVwcm9jIFBST1RPICgodm9pZCAqY2FsbGVyZGF0LCBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5m
bykpOwohIAohIC8qIGNoZWNrIGZpbGUgdGhhdCBpcyB0byBiZSBlZGl0ZWQgaWYgaXQncyBhbHJl
YWR5IGJlaW5nIGVkaXRlZCAqLwohIAohIHN0YXRpYyBpbnQKISBjaGVja19maWxlcHJvYyAoY2Fs
bGVyZGF0LCBmaW5mbykKICAgICAgdm9pZCAqY2FsbGVyZGF0OwogICAgICBzdHJ1Y3QgZmlsZV9p
bmZvICpmaW5mbzsKICB7CisgICAgIGNoYXIgKmVkaXRvcnMgPSBOVUxMOworICAgICBpbnQgZWRp
dG9yc19mb3VuZCA9IDA7CiAgICAgIEZJTEUgKmZwOwogICAgICB0aW1lX3Qgbm93OworICAgICBp
bnQgc3RhdHVzOwogICAgICBjaGFyICphc2Nub3c7CiAgICAgIGNoYXIgKmJhc2VmaWxlbmFtZTsK
ICAKISAjaWZkZWYgQ0xJRU5UX1NVUFBPUlQKISAgICAgaWYgKGNsaWVudF9hY3RpdmUpCiEgICAg
IHsKISAgICAgICAgIGludCBsZW4gPSAwOwohICAgICAgICAgaW50IHBvc3NpYmx5X21vcmVfZWRp
dG9ycyA9IDA7CiEgCiEgICAgICAgICBzZW5kX2ZpbGVfbmFtZXMgKDEsICZmaW5mby0+ZnVsbG5h
bWUsIFNFTkRfRVhQQU5EX1dJTEQpOwohICAgICAgICAgc2VuZF90b19zZXJ2ZXIgKCJlZGl0b3Jz
XDAxMiIsIDApOwohIAohICAgICAgICAgZG8KISAgICAgICAgIHsKISAgICAgICAgICAgICBwb3Nz
aWJseV9tb3JlX2VkaXRvcnMgPSAwOwohIAohICAgICAgICAgICAgIHRvX3NlcnZlcl9idWZmZXJf
Zmx1c2ggKCk7CiEgICAgICAgICAgICAgZnJvbV9zZXJ2ZXJfYnVmZmVyX3JlYWQgKCZlZGl0b3Jz
LCAmbGVuKTsKISAKISAgICAgICAgICAgICBpZiAoZWRpdG9ycyAhPSBOVUxMKQohICAgICAgICAg
ICAgIHsKISAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCAoZWRpdG9ycywgIm9rIikgIT0gMCkK
ISAgICAgICAgICAgICAgICAgewohICAgICAgICAgICAgICAgICAgICAgcG9zc2libHlfbW9yZV9l
ZGl0b3JzID0gMTsKISAKISAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JzWzBdID09ICdN
JykKISAgICAgICAgICAgICAgICAgICAgIHsKISAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0
b3JzX2ZvdW5kID0gMTsKISAKISAgICAgICAgICAgICAgICAgICAgICAgICBpZighcmVhbGx5X3F1
aWV0KQohICAgICAgICAgICAgICAgICAgICAgICAgIHsKISAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3ZzX291dHB1dCAoZWRpdG9ycyArIDIsIDApOwohICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdnNfb3V0cHV0ICgiXG4iLCAwKTsKISAgICAgICAgICAgICAgICAgICAgICAgICB9
CiEgICAgICAgICAgICAgICAgICAgICB9CiEgICAgICAgICAgICAgICAgICAgICBlbHNlCiEgICAg
ICAgICAgICAgICAgICAgICB7CiEgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlc3Bv
bnNlICpycyA9IE5VTEw7CiEgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY21kID0gTlVM
TDsKICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBlZGl0b3JzOworIAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAocnMgPSByZXNwb25zZXM7IHJzLT5uYW1lICE9IE5VTEw7
ICsrcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RybmNtcCAoY21kLCBycy0+bmFtZSwgc3RybGVuIChycy0+bmFtZSkpID09
IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjbWRsZW4gPSBzdHJsZW4gKHJzLT5uYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjbWRbY21kbGVuXSA9PSAnICcpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjbWRsZW47CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChjbWRbY21kbGVuXSAhPSAnXDAnKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogVGhlIGZpcnN0IGxlbiBjaGFyYWN0ZXJzIG1hdGNoLCBidXQgaXQncyBhIGRp
ZmZlcmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc3BvbnNl
LiAgZS5nLiB0aGUgcmVzcG9uc2UgaXMgIm9rbGFob21hIiBidXQgd2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBtYXRjaGVkICJvayIuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnJzLT5m
dW5jKSAoY21kICsgY21kbGVuLCBsZW4gLSBjbWRsZW4pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJz
LT5uYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBJdCdzIE9LIHRvIHByaW50IGp1c3QgdG8gdGhlIGZpcnN0ICdc
MCcuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBtaWdodCB3YW50IHRv
IGhhbmRsZSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHRoZSBsaWtlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIHNvbWUgb3RoZXIgd2F5IG90aGVyIHRoYW4ganVzdCBzZW5kaW5n
IHRoZW0gdG8gc3Rkb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmUgY29t
bW9uIHJlYXNvbiBmb3IgdGhpcyBlcnJvciBpcyBpZiBwZW9wbGUgdXNlIDpleHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSB2ZXJzaW9uIG9mIHJzaCB3aGljaCBpcyBk
b2luZyBDUkxGIHRyYW5zbGF0aW9uIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvbWV0aGluZywgYW5kIHNvIHRoZSBjbGllbnQgZ2V0cyAib2teTSIgaW5zdGVhZCBvZiAib2si
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSaWdodCBub3cgdGhhdCB3aWxsIHRl
bmQgdG8gcHJpbnQgcGFydCBvZiB0aGlzIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2Ugb3ZlciB0aGUgb3RoZXIgcGFydCBvZiBpdC4gIEl0IHNlZW1zIGxpa2Ug
d2UgY291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gYmV0dGVyIChlaXRo
ZXIgaW4gZ2VuZXJhbCwgYnkgcXVvdGluZyBvciBvbWl0dGluZyBhbGwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udHJvbCBjaGFyYWN0ZXJzLCBhbmQvb3Igc3BlY2lmaWNhbGx5
LCBieSBkZXRlY3RpbmcgdGhlIENSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBhbmQgcHJpbnRpbmcgYSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlKS4gICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yICgwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIndhcm5pbmc6IHVucmVjb2duaXplZCByZXNwb25zZSBgJXMnIGZyb20g
Y3ZzIHNlcnZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICBmcmVlKGVkaXRvcnMpOworICAgICAg
ICAgICAgIH0KKyAgICAgICAgIH0gd2hpbGUgKHBvc3NpYmx5X21vcmVfZWRpdG9ycyk7CisgICAg
IH0KKyAgICAgZWxzZQorICNlbmRpZiAvKiBDTElFTlRfU1VQUE9SVCAqLworICAgICB7CiAgICAg
ICAgICAvKiBUaGlzIGlzIGEgc29tZXdoYXQgc2NyZXd5IHdheSB0byBjaGVjayBmb3IgdGhpcywg
YmVjYXVzZSBpdAogICAgICAgICAgICAgZG9lc24ndCBoZWxwIGVycm9ycyBvdGhlciB0aGFuIHRo
ZSBub25leGlzdGVuY2Ugb2YgdGhlIGZpbGUKICAgICAgICAgICAgIChlLmcuIHBlcm1pc3Npb25z
IHByb2JsZW1zKS4gIEl0IG1pZ2h0IGJlIGJldHRlciB0byByZWFycmFuZ2UKICAgICAgICAgICAg
IHRoZSBjb2RlIHNvIHRoYXQgQ1ZTQURNX05PVElGWSBnZXRzIHdyaXR0ZW4gb25seSBhZnRlciB0
aGUKICAgICAgICAgICAgIHZhcmlvdXMgYWN0aW9ucyBzdWNjZWVkIChidXQgd2hhdCBpZiBvbmx5
IHNvbWUgb2YgdGhlbQogICAgICAgICAgICAgc3VjY2VlZCkuICAqLwogICAgICAgICAgaWYgKCFp
c2ZpbGUgKGZpbmZvLT5maWxlKSkKICAgICAgICAgIHsKICAgICAgICAgICAgICBlcnJvciAoMCwg
MCwgIm5vIHN1Y2ggZmlsZSAlczsgaWdub3JlZCIsIGZpbmZvLT5mdWxsbmFtZSk7CiAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgICB9CiAgCiEgICAgICAgICBlZGl0b3JzID0gZmlsZWF0
dHJfZ2V0MCAoZmluZm8tPmZpbGUsICJfZWRpdG9ycyIpOwohICAgICAgICAgaWYoIXJlYWxseV9x
dWlldCAmJiBlZGl0b3JzICE9IE5VTEwpCiEgICAgICAgICB7CiEgICAgICAgICAgICAgZWRpdG9y
c19vdXRwdXQgKGZpbmZvKTsKISAgICAgICAgIH0KICAKISAgICAgICAgIGlmKGVkaXRvcnMgIT0g
TlVMTCkKISAgICAgICAgIHsKISAgICAgICAgICAgICBlZGl0b3JzX2ZvdW5kID0gMTsKICAKISAg
ICAgICAgICAgICBmcmVlIChlZGl0b3JzKTsKISAgICAgICAgIH0KISAgICAgfQohIAohICAgICBp
ZihjaGVja19lZGl0ZWQgJiYgZWRpdG9yc19mb3VuZCkKICAgICAgewohICAgICAgICAgc3RhdHVz
ID0gMTsKISAgICAgfQogICAgICBlbHNlCiEgICAgIHsKISAgICAgICAgIHN0YXR1cyA9IDA7CiEg
ICAgIH0KISAKISAgICAgcmV0dXJuIHN0YXR1czsKISB9CiEgCiEgc3RhdGljIGludCBjaGVja19l
ZGl0cyBQUk9UTyAoKGludCwgY2hhciAqKiwgaW50KSk7CiEgCiEgLyogTG9vayB0aHJvdWdoIHRo
ZSBDVlMvZmlsZWF0dHIgZmlsZSBhbmQgY2hlY2sgZm9yIGVkaXRvcnMgKi8KISBzdGF0aWMgaW50
CiEgY2hlY2tfZWRpdHMgKGFyZ2MsIGFyZ3YsIGxvY2FsKQohICAgICBpbnQgYXJnYzsKISAgICAg
Y2hhciAqKmFyZ3Y7CiEgICAgIGludCBsb2NhbDsKISB7CiEgICAgIGludCBlcnIgPSAwOwohIAoh
ICNpZmRlZiBDTElFTlRfU1VQUE9SVAohICAgICBpZiAoY2xpZW50X2FjdGl2ZSkKISAgICAgewoh
ICAgICAgICAgaWYgKHN0cmNtcCAoY29tbWFuZF9uYW1lLCAicmVsZWFzZSIpICE9IDApCiEgICAg
ICAgICB7CiEgICAgICAgICAgICAgc3RhcnRfc2VydmVyICgpOwohICAgICAgICAgICAgIGlnbl9z
ZXR1cCAoKTsKISAgICAgICAgIH0KISAKISAgICAgICAgIGlmIChsb2NhbCkKISAgICAgICAgICAg
ICBzZW5kX2FyZyAoIi1sIik7CiEgICAgICAgICBzZW5kX2ZpbGVzIChhcmdjLCBhcmd2LCBsb2Nh
bCwgMCwgU0VORF9OT19DT05URU5UUyk7CiEgICAgIH0KISAjZW5kaWYKISAKISAJZXJyICs9IHN0
YXJ0X3JlY3Vyc2lvbiAoY2hlY2tfZmlsZXByb2MsIChGSUxFU0RPTkVQUk9DKSBOVUxMLAohICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoRElSRU5UUFJPQykgTlVMTCwgKERJUkxFQVZFUFJP
QykgTlVMTCwgTlVMTCwKISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnYywgYXJndiwg
bG9jYWwsIFdfTE9DQUwsIDAsIDAsIChjaGFyICopTlVMTCwKISAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCk7CiEgCiEgI2lmZGVmIENMSUVOVF9TVVBQT1JUCiEgICAgIGlmIChjbGllbnRf
YWN0aXZlKQohICAgICB7CiEgICAgICAgICBzZW5kX3RvX3NlcnZlciAoIm5vb3BcMDEyIiwgMCk7
CiEgICAgICAgICBpZiAoc3RyY21wIChjb21tYW5kX25hbWUsICJyZWxlYXNlIikgPT0gMCkKISAg
ICAgICAgICAgICBlcnIgKz0gZ2V0X3NlcnZlcl9yZXNwb25zZXMgKCk7CiEgICAgICAgICBlbHNl
CiEgICAgICAgICAgICAgZXJyICs9IGdldF9yZXNwb25zZXNfYW5kX2Nsb3NlICgpOwohICAgICB9
CiEgI2VuZGlmCiEgICAgIHJldHVybiBlcnI7CiEgfQohIAwKISBzdGF0aWMgaW50IGVkaXRfZmls
ZXByb2MgUFJPVE8gKCh2b2lkICpjYWxsZXJkYXQsIHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvKSk7
CiEgCiEgc3RhdGljIGludAohIGVkaXRfZmlsZXByb2MgKGNhbGxlcmRhdCwgZmluZm8pCiEgICAg
IHZvaWQgKmNhbGxlcmRhdDsKISAgICAgc3RydWN0IGZpbGVfaW5mbyAqZmluZm87CiEgewohICAg
ICBjaGFyICpiYXNlZmlsZW5hbWU7CiEgCiEgICAgIGlmIChub2V4ZWMpCiEgCXJldHVybiAwOwoh
IAohICAgICAvKiBUaGlzIGlzIGEgc29tZXdoYXQgc2NyZXd5IHdheSB0byBjaGVjayBmb3IgdGhp
cywgYmVjYXVzZSBpdAohICAgICAgICBkb2Vzbid0IGhlbHAgZXJyb3JzIG90aGVyIHRoYW4gdGhl
IG5vbmV4aXN0ZW5jZSBvZiB0aGUgZmlsZQohICAgICAgICAoZS5nLiBwZXJtaXNzaW9ucyBwcm9i
bGVtcykuICBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gcmVhcnJhbmdlCiEgICAgICAgIHRoZSBjb2Rl
IHNvIHRoYXQgQ1ZTQURNX05PVElGWSBnZXRzIHdyaXR0ZW4gb25seSBhZnRlciB0aGUKISAgICAg
ICAgdmFyaW91cyBhY3Rpb25zIHN1Y2NlZWQgKGJ1dCB3aGF0IGlmIG9ubHkgc29tZSBvZiB0aGVt
CiEgICAgICAgIHN1Y2NlZWQpLiAgKi8KISAgICAgaWYgKCFpc2ZpbGUgKGZpbmZvLT5maWxlKSkK
ISAgICAgewohIAllcnJvciAoMCwgMCwgIm5vIHN1Y2ggZmlsZSAlczsgaWdub3JlZCIsIGZpbmZv
LT5mdWxsbmFtZSk7CiEgCXJldHVybiAwOwogICAgICB9CiAgCisgICAgIG5vdGlmeV9wdXQgKGZp
bmZvLCBOVUxMLCAnRScsIHNldHRpbmdfdGVkaXQsIHNldHRpbmdfdHVuZWRpdCwgc2V0dGluZ190
Y29tbWl0KTsKKyAKICAgICAgeGNobW9kIChmaW5mby0+ZmlsZSwgMSk7CiAgCiAgICAgIC8qIE5v
dyBzdGFzaCB0aGUgZmlsZSBhd2F5IGluIENWU0FETSBzbyB0aGF0IHVuZWRpdCBjYW4gcmV2ZXJ0
IGV2ZW4gaWYKICAgICAgICAgaXQgY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgc2VydmVyLiAg
V2Ugc3Rhc2ggYXdheSBhIHdyaXRhYmxlCiAgICAgICAgIGNvcHkgc28gdGhhdCBpZiB0aGUgdXNl
ciByZW1vdmVzIHRoZSB3b3JraW5nIGZpbGUsIHRoZW4gcmVzdG9yZXMgaXQKICAgICAgICAgd2l0
aCAiY3ZzIHVwZGF0ZSIgKHdoaWNoIGNsZWFycyBfZWRpdG9ycyBidXQgZG9lcyBub3QgdXBkYXRl
CiAgICAgICAgIENWU0FETV9CQVNFKSwgdGhlbiBhIGZ1dHVyZSAiY3ZzIGVkaXQiIGNhbiBzdGls
bCB3aW4uICAqLwogICAgICAvKiBDb3VsZCBzYXZlIGEgc3lzdGVtIGNhbGwgYnkgb25seSBjYWxs
aW5nIG1rZGlyX2lmX25lZWRlZCBpZgogICAgICAgICB0cnlpbmcgdG8gY3JlYXRlIHRoZSBvdXRw
dXQgZmlsZSBmYWlscy4gIEJ1dCBjb3B5X2ZpbGUgaXNuJ3QKICAgICAgICAgc2V0IHVwIHRvIGZh
Y2lsaXRhdGUgdGhhdC4gICovCiAgICAgIG1rZGlyX2lmX25lZWRlZCAoQ1ZTQURNX0JBU0UpOwog
ICAgICBiYXNlZmlsZW5hbWUgPSB4bWFsbG9jICgxMCArIHNpemVvZiBDVlNBRE1fQkFTRSArIHN0
cmxlbiAoZmluZm8tPmZpbGUpKTsKICAgICAgc3RyY3B5IChiYXNlZmlsZW5hbWUsIENWU0FETV9C
QVNFKTsKICAgICAgc3RyY2F0IChiYXNlZmlsZW5hbWUsICIvIik7CiAgICAgIHN0cmNhdCAoYmFz
ZWZpbGVuYW1lLCBmaW5mby0+ZmlsZSk7CiAgICAgIGNvcHlfZmlsZSAoZmluZm8tPmZpbGUsIGJh
c2VmaWxlbmFtZSk7CiAgICAgIGZyZWUgKGJhc2VmaWxlbmFtZSk7CiAgCiAgICAgIHsKICAJTm9k
ZSAqbm9kZTsKICAKICAJbm9kZSA9IGZpbmRub2RlX2ZuIChmaW5mby0+ZW50cmllcywgZmluZm8t
PmZpbGUpOwogIAlpZiAobm9kZSAhPSBOVUxMKQogIAkgICAgYmFzZV9yZWdpc3RlciAoZmluZm8s
ICgoRW50bm9kZSAqKSBub2RlLT5kYXRhKS0+dmVyc2lvbik7CiAgICAgIH0KICAKICAgICAgcmV0
dXJuIDA7CiAgfQogIAogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlZGl0X3VzYWdlW10gPQog
IHsKISAgICAgIlVzYWdlOiAlcyAlcyBbLWNmbFJdIFtmaWxlcy4uLl1cbiIsCiEgICAgICItYzog
Q2hlY2sgdGhhdCB3b3JraW5nIGZpbGVzIGFyZSB1bmVkaXRlZFxuIiwKISAgICAgIi1mOiBGb3Jj
ZSBlZGl0IGlmIHdvcmtpbmcgZmlsZXMgYXJlIGVkaXRlZCAoZGVmYXVsdClcbiIsCiAgICAgICIt
bDogTG9jYWwgZGlyZWN0b3J5IG9ubHksIG5vdCByZWN1cnNpdmVcbiIsCiAgICAgICItUjogUHJv
Y2VzcyBkaXJlY3RvcmllcyByZWN1cnNpdmVseVxuIiwKICAgICAgIi1hOiBTcGVjaWZ5IHdoYXQg
YWN0aW9ucyBmb3IgdGVtcG9yYXJ5IHdhdGNoLCBvbmUgb2ZcbiIsCiAgICAgICIgICAgZWRpdCx1
bmVkaXQsY29tbWl0LGFsbCxub25lXG4iLAogICAgICAiKFNwZWNpZnkgdGhlIC0taGVscCBnbG9i
YWwgb3B0aW9uIGZvciBhIGxpc3Qgb2Ygb3RoZXIgaGVscCBvcHRpb25zKVxuIiwKICAgICAgTlVM
TAogIH07CiAgCiAgaW50CiAgZWRpdCAoYXJnYywgYXJndikKICAgICAgaW50IGFyZ2M7CiAgICAg
IGNoYXIgKiphcmd2OwogIHsKICAgICAgaW50IGxvY2FsID0gMDsKICAgICAgaW50IGM7CiEgICAg
IGludCBlcnIgPSAwOwogICAgICBpbnQgYV9vbWl0dGVkOwogIAogICAgICBpZiAoYXJnYyA9PSAt
MSkKICAJdXNhZ2UgKGVkaXRfdXNhZ2UpOwogICAgICBhX29taXR0ZWQgPSAxOwogICAgICBzZXR0
aW5nX3RlZGl0ID0gMDsKICAgICAgc2V0dGluZ190dW5lZGl0ID0gMDsKICAgICAgc2V0dGluZ190
Y29tbWl0ID0gMDsKICAgICAgb3B0aW5kID0gMDsKISAgICAgd2hpbGUgKChjID0gZ2V0b3B0IChh
cmdjLCBhcmd2LCAiK2NmbFJhOiIpKSAhPSAtMSkKICAgICAgewogIAlzd2l0Y2ggKGMpCiAgCXsK
KyAgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICAgY2hlY2tfZWRpdGVkID0g
MTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSAnZic6CisgICAg
ICAgICAgICAgICAgIGNoZWNrX2VkaXRlZCA9IDA7CisgICAgICAgICAgICAgICAgIGJyZWFrOwog
IAkgICAgY2FzZSAnbCc6CiAgCQlsb2NhbCA9IDE7CiAgCQlicmVhazsKICAJICAgIGNhc2UgJ1In
OgogIAkJbG9jYWwgPSAwOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlICdhJzoKICAJCWFfb21pdHRl
ZCA9IDA7CiAgCQlpZiAoc3RyY21wIChvcHRhcmcsICJlZGl0IikgPT0gMCkKICAJCSAgICBzZXR0
aW5nX3RlZGl0ID0gMTsKICAJCWVsc2UgaWYgKHN0cmNtcCAob3B0YXJnLCAidW5lZGl0IikgPT0g
MCkKICAJCSAgICBzZXR0aW5nX3R1bmVkaXQgPSAxOwogIAkJZWxzZSBpZiAoc3RyY21wIChvcHRh
cmcsICJjb21taXQiKSA9PSAwKQogIAkJICAgIHNldHRpbmdfdGNvbW1pdCA9IDE7CiAgCQllbHNl
IGlmIChzdHJjbXAgKG9wdGFyZywgImFsbCIpID09IDApCiAgCQl7CioqKioqKioqKioqKioqKgoq
KiogNDI1LDQ2MiAqKioqCi0tLSA3OTAsODM1IC0tLS0KICAJc2V0dGluZ190ZWRpdCA9IDE7CiAg
CXNldHRpbmdfdHVuZWRpdCA9IDE7CiAgCXNldHRpbmdfdGNvbW1pdCA9IDE7CiAgICAgIH0KICAK
ICAgICAgaWYgKHN0cnBicmsgKGhvc3RuYW1lLCAiKyw+Oz1cdFxuIikgIT0gTlVMTCkKICAJZXJy
b3IgKDEsIDAsCiAgCSAgICAgICAiaG9zdCBuYW1lICglcykgY29udGFpbnMgYW4gaW52YWxpZCBj
aGFyYWN0ZXIgKCssPjs9XFx0XFxuKSIsCiAgCSAgICAgICBob3N0bmFtZSk7CiAgICAgIGlmIChz
dHJwYnJrIChDdXJEaXIsICIrLD47PVx0XG4iKSAhPSBOVUxMKQogIAllcnJvciAoMSwgMCwKICAi
Y3VycmVudCBkaXJlY3RvcnkgKCVzKSBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3RlciAoKyw+
Oz1cXHRcXG4pIiwKICAJICAgICAgIEN1ckRpcik7CiAgCiAgICAgIC8qIE5vIG5lZWQgdG8gcmVh
ZGxvY2sgc2luY2Ugd2UgYXJlbid0IGRvaW5nIGFueXRoaW5nIHRvIHRoZQogICAgICAgICByZXBv
c2l0b3J5LiAgKi8KKyAgICAgZXJyID0gY2hlY2tfZWRpdHMgKGFyZ2MsIGFyZ3YsIGxvY2FsKTsK
KyAgICAgaWYoZXJyKQorICAgICB7CisgICAgICAgICBlcnJvciAoMSwgMCwgImZpbGVzIGJlaW5n
IGVkaXRlZCEiKTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKICAgICAgZXJyID0gc3RhcnRf
cmVjdXJzaW9uIChlZGl0X2ZpbGVwcm9jLCAoRklMRVNET05FUFJPQykgTlVMTCwKICAJCQkgICAo
RElSRU5UUFJPQykgTlVMTCwgKERJUkxFQVZFUFJPQykgTlVMTCwgTlVMTCwKICAJCQkgICBhcmdj
LCBhcmd2LCBsb2NhbCwgV19MT0NBTCwgMCwgMCwgKGNoYXIgKilOVUxMLAogIAkJCSAgIDApOwog
IAogICAgICBlcnIgKz0gc2VuZF9ub3RpZmljYXRpb25zIChhcmdjLCBhcmd2LCBsb2NhbCk7Cisg
ICAgIH0KICAKICAgICAgcmV0dXJuIGVycjsKICB9CiAgCiAgc3RhdGljIGludCB1bmVkaXRfZmls
ZXByb2MgUFJPVE8gKCh2b2lkICpjYWxsZXJkYXQsIHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvKSk7
CiAgCiAgc3RhdGljIGludAogIHVuZWRpdF9maWxlcHJvYyAoY2FsbGVyZGF0LCBmaW5mbykKICAg
ICAgdm9pZCAqY2FsbGVyZGF0OwogICAgICBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbzsKICB7CiAg
ICAgIEZJTEUgKmZwOwogICAgICB0aW1lX3Qgbm93OwogICAgICBjaGFyICphc2Nub3c7CiAgICAg
IGNoYXIgKmJhc2VmaWxlbmFtZTsKICAKKioqKioqKioqKioqKioqCioqKiA0NzQsNTIyICoqKioK
ICAJZnJlZSAoYmFzZWZpbGVuYW1lKTsKICAJcmV0dXJuIDA7CiAgICAgIH0KICAKICAgICAgaWYg
KHhjbXAgKGZpbmZvLT5maWxlLCBiYXNlZmlsZW5hbWUpICE9IDApCiAgICAgIHsKICAJcHJpbnRm
ICgiJXMgaGFzIGJlZW4gbW9kaWZpZWQ7IHJldmVydCBjaGFuZ2VzPyAiLCBmaW5mby0+ZnVsbG5h
bWUpOwogIAlpZiAoIXllc25vICgpKQogIAl7CiAgCSAgICAvKiAibm8iLiAgKi8KICAJICAgIGZy
ZWUgKGJhc2VmaWxlbmFtZSk7CiAgCSAgICByZXR1cm4gMDsKICAJfQogICAgICB9CiAgICAgIHJl
bmFtZV9maWxlIChiYXNlZmlsZW5hbWUsIGZpbmZvLT5maWxlKTsKICAgICAgZnJlZSAoYmFzZWZp
bGVuYW1lKTsKLSAKLSAgICAgZnAgPSBvcGVuX2ZpbGUgKENWU0FETV9OT1RJRlksICJhIik7Ci0g
Ci0gICAgICh2b2lkKSB0aW1lICgmbm93KTsKLSAgICAgYXNjbm93ID0gYXNjdGltZSAoZ210aW1l
ICgmbm93KSk7Ci0gICAgIGFzY25vd1syNF0gPSAnXDAnOwotICAgICBmcHJpbnRmIChmcCwgIlUl
c1x0JXMgR01UXHQlc1x0JXNcdFxuIiwgZmluZm8tPmZpbGUsCi0gCSAgICAgYXNjbm93LCBob3N0
bmFtZSwgQ3VyRGlyKTsKICAKISAgICAgaWYgKGZjbG9zZSAoZnApIDwgMCkKISAgICAgewohIAlp
ZiAoZmluZm8tPnVwZGF0ZV9kaXJbMF0gPT0gJ1wwJykKISAJICAgIGVycm9yICgwLCBlcnJubywg
ImNhbm5vdCBjbG9zZSAlcyIsIENWU0FETV9OT1RJRlkpOwohIAllbHNlCiEgCSAgICBlcnJvciAo
MCwgZXJybm8sICJjYW5ub3QgY2xvc2UgJXMvJXMiLCBmaW5mby0+dXBkYXRlX2RpciwKISAJCSAg
IENWU0FETV9OT1RJRlkpOwohICAgICB9CiAgCiAgICAgIC8qIE5vdyB1cGRhdGUgdGhlIHJldmlz
aW9uIG51bWJlciBpbiBDVlMvRW50cmllcyBmcm9tIENWUy9CYXNlcmV2LgogICAgICAgICBUaGUg
YmFzaWMgaWRlYSBoZXJlIGlzIHRoYXQgd2UgYXJlIHJldmVydGluZyB0byB0aGUgcmV2aXNpb24K
ICAgICAgICAgdGhhdCB0aGUgdXNlciBlZGl0ZWQuICBJZiB3ZSB3YW50ZWQgImN2cyB1cGRhdGUi
IHRvIHVwZGF0ZQogICAgICAgICBDVlMvQmFzZSBhcyB3ZSBnbyBhbG9uZyAoc28gdGhhdCBhbiB1
bmVkaXQgY291bGQgcmV2ZXJ0IHRvIHRoZQogICAgICAgICBjdXJyZW50IHJlcG9zaXRvcnkgcmV2
aXNpb24pLCB3ZSB3b3VsZCBuZWVkOgogIAogICAgICAgICB1cGRhdGUgKG9yIGFsbCBzZW5kX2Zp
bGVzPykgKGNsaWVudCkgbmVlZHMgdG8gc2VuZCByZXZpc2lvbiBpbgogICAgICAgICBuZXcgRW50
cnktYmFzZSByZXF1ZXN0LiAgdXBkYXRlIChzZXJ2ZXIvbG9jYWwpIG5lZWRzIHRvIGNoZWNrCiAg
ICAgICAgIHJldmlzaW9uIGFnYWluc3QgcmVwb3NpdG9yeSBhbmQgc2VuZCBuZXcgVXBkYXRlLWJh
c2UgcmVzcG9uc2UKICAgICAgICAgKGxpa2UgVXBkYXRlLWV4aXN0aW5nIGluIHRoYXQgdGhlIGZp
bGUgYWxyZWFkeSBleGlzdHMuICBXaGlsZQogICAgICAgICB3ZSBhcmUgYXQgaXQsIG1pZ2h0IHRy
eSB0byBjbGVhbiB1cCB0aGUgc3ludGF4IGJ5IGhhdmluZyB0aGUKICAgICAgICAgbW9kZSBvbmx5
IGluIGEgIk1vZGUiIHJlc3BvbnNlLCBub3QgaW4gdGhlIFVwZGF0ZS1iYXNlIGl0c2VsZikuICAq
LwogICAgICB7CiAgCWNoYXIgKmJhc2VyZXY7CiAgCU5vZGUgKm5vZGU7Ci0tLSA4NDcsODgwIC0t
LS0KICAJZnJlZSAoYmFzZWZpbGVuYW1lKTsKICAJcmV0dXJuIDA7CiAgICAgIH0KICAKICAgICAg
aWYgKHhjbXAgKGZpbmZvLT5maWxlLCBiYXNlZmlsZW5hbWUpICE9IDApCiAgICAgIHsKICAJcHJp
bnRmICgiJXMgaGFzIGJlZW4gbW9kaWZpZWQ7IHJldmVydCBjaGFuZ2VzPyAiLCBmaW5mby0+ZnVs
bG5hbWUpOwogIAlpZiAoIXllc25vICgpKQogIAl7CiAgCSAgICAvKiAibm8iLiAgKi8KICAJICAg
IGZyZWUgKGJhc2VmaWxlbmFtZSk7CiAgCSAgICByZXR1cm4gMDsKICAJfQogICAgICB9CiAgICAg
IHJlbmFtZV9maWxlIChiYXNlZmlsZW5hbWUsIGZpbmZvLT5maWxlKTsKICAgICAgZnJlZSAoYmFz
ZWZpbGVuYW1lKTsKICAKISAgICAgbm90aWZ5X3B1dCAoZmluZm8sIE5VTEwsICdVJywgMCwgMCwg
MCk7CiAgCiAgICAgIC8qIE5vdyB1cGRhdGUgdGhlIHJldmlzaW9uIG51bWJlciBpbiBDVlMvRW50
cmllcyBmcm9tIENWUy9CYXNlcmV2LgogICAgICAgICBUaGUgYmFzaWMgaWRlYSBoZXJlIGlzIHRo
YXQgd2UgYXJlIHJldmVydGluZyB0byB0aGUgcmV2aXNpb24KICAgICAgICAgdGhhdCB0aGUgdXNl
ciBlZGl0ZWQuICBJZiB3ZSB3YW50ZWQgImN2cyB1cGRhdGUiIHRvIHVwZGF0ZQogICAgICAgICBD
VlMvQmFzZSBhcyB3ZSBnbyBhbG9uZyAoc28gdGhhdCBhbiB1bmVkaXQgY291bGQgcmV2ZXJ0IHRv
IHRoZQogICAgICAgICBjdXJyZW50IHJlcG9zaXRvcnkgcmV2aXNpb24pLCB3ZSB3b3VsZCBuZWVk
OgogIAogICAgICAgICB1cGRhdGUgKG9yIGFsbCBzZW5kX2ZpbGVzPykgKGNsaWVudCkgbmVlZHMg
dG8gc2VuZCByZXZpc2lvbiBpbgogICAgICAgICBuZXcgRW50cnktYmFzZSByZXF1ZXN0LiAgdXBk
YXRlIChzZXJ2ZXIvbG9jYWwpIG5lZWRzIHRvIGNoZWNrCiAgICAgICAgIHJldmlzaW9uIGFnYWlu
c3QgcmVwb3NpdG9yeSBhbmQgc2VuZCBuZXcgVXBkYXRlLWJhc2UgcmVzcG9uc2UKICAgICAgICAg
KGxpa2UgVXBkYXRlLWV4aXN0aW5nIGluIHRoYXQgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuICBX
aGlsZQogICAgICAgICB3ZSBhcmUgYXQgaXQsIG1pZ2h0IHRyeSB0byBjbGVhbiB1cCB0aGUgc3lu
dGF4IGJ5IGhhdmluZyB0aGUKICAgICAgICAgbW9kZSBvbmx5IGluIGEgIk1vZGUiIHJlc3BvbnNl
LCBub3QgaW4gdGhlIFVwZGF0ZS1iYXNlIGl0c2VsZikuICAqLwogICAgICB7CiAgCWNoYXIgKmJh
c2VyZXY7CiAgCU5vZGUgKm5vZGU7CioqKioqKioqKioqKioqKgoqKiogNTQzLDU3NyAqKioqCiAg
CQkgICBrZWVwaW5nIGl0IGFyb3VuZCB3b3VsZCBiZSBhc2tpbmcgZm9yIHRyb3VibGUuICAqLwog
IAkJaWYgKHVubGlua19maWxlIChmaW5mby0+ZmlsZSkgPCAwKQogIAkJICAgIGVycm9yICgwLCBl
cnJubywgImNhbm5vdCByZW1vdmUgJXMiLCBmaW5mby0+ZnVsbG5hbWUpOwogIAogIAkJLyogVGhp
cyBpcyBjaGVlc3ksIGluIGEgc2Vuc2U7IHdoeSBzaG91bGRuJ3Qgd2UgZG8gdGhlCiAgCQkgICB1
cGRhdGUgZm9yIHRoZSB1c2VyPyAgSG93ZXZlciwgZG9pbmcgdGhhdCB3b3VsZCByZXF1aXJlCiAg
CQkgICBjb250YWN0aW5nIHRoZSBzZXJ2ZXIsIHNvIG1heWJlIHRoaXMgaXMgT0suICAqLwogIAkJ
ZXJyb3IgKDAsIDAsICJydW4gdXBkYXRlIHRvIGNvbXBsZXRlIHRoZSB1bmVkaXQiKTsKICAJCXJl
dHVybiAwOwogIAkgICAgfQogIAkgICAgUmVnaXN0ZXIgKGZpbmZvLT5lbnRyaWVzLCBmaW5mby0+
ZmlsZSwgYmFzZXJldiwgZW50ZGF0YS0+dGltZXN0YW1wLAogIAkJICAgICAgZW50ZGF0YS0+b3B0
aW9ucywgZW50ZGF0YS0+dGFnLCBlbnRkYXRhLT5kYXRlLAogIAkJICAgICAgZW50ZGF0YS0+Y29u
ZmxpY3QpOwogIAl9CiAgCWZyZWUgKGJhc2VyZXYpOwogIAliYXNlX2RlcmVnaXN0ZXIgKGZpbmZv
KTsKLSAgICAgfQogIAogICAgICB4Y2htb2QgKGZpbmZvLT5maWxlLCAwKTsKICAgICAgcmV0dXJu
IDA7CiAgfQogIAogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1bmVkaXRfdXNhZ2VbXSA9CiAg
ewogICAgICAiVXNhZ2U6ICVzICVzIFstbFJdIFtmaWxlcy4uLl1cbiIsCiAgICAgICItbDogTG9j
YWwgZGlyZWN0b3J5IG9ubHksIG5vdCByZWN1cnNpdmVcbiIsCiAgICAgICItUjogUHJvY2VzcyBk
aXJlY3RvcmllcyByZWN1cnNpdmVseVxuIiwKICAgICAgIihTcGVjaWZ5IHRoZSAtLWhlbHAgZ2xv
YmFsIG9wdGlvbiBmb3IgYSBsaXN0IG9mIG90aGVyIGhlbHAgb3B0aW9ucylcbiIsCiAgICAgIE5V
TEwKICB9OwogIAogIGludAogIHVuZWRpdCAoYXJnYywgYXJndikKICAgICAgaW50IGFyZ2M7CiAg
ICAgIGNoYXIgKiphcmd2OwotLS0gOTAxLDkzNiAtLS0tCiAgCQkgICBrZWVwaW5nIGl0IGFyb3Vu
ZCB3b3VsZCBiZSBhc2tpbmcgZm9yIHRyb3VibGUuICAqLwogIAkJaWYgKHVubGlua19maWxlIChm
aW5mby0+ZmlsZSkgPCAwKQogIAkJICAgIGVycm9yICgwLCBlcnJubywgImNhbm5vdCByZW1vdmUg
JXMiLCBmaW5mby0+ZnVsbG5hbWUpOwogIAogIAkJLyogVGhpcyBpcyBjaGVlc3ksIGluIGEgc2Vu
c2U7IHdoeSBzaG91bGRuJ3Qgd2UgZG8gdGhlCiAgCQkgICB1cGRhdGUgZm9yIHRoZSB1c2VyPyAg
SG93ZXZlciwgZG9pbmcgdGhhdCB3b3VsZCByZXF1aXJlCiAgCQkgICBjb250YWN0aW5nIHRoZSBz
ZXJ2ZXIsIHNvIG1heWJlIHRoaXMgaXMgT0suICAqLwogIAkJZXJyb3IgKDAsIDAsICJydW4gdXBk
YXRlIHRvIGNvbXBsZXRlIHRoZSB1bmVkaXQiKTsKICAJCXJldHVybiAwOwogIAkgICAgfQogIAkg
ICAgUmVnaXN0ZXIgKGZpbmZvLT5lbnRyaWVzLCBmaW5mby0+ZmlsZSwgYmFzZXJldiwgZW50ZGF0
YS0+dGltZXN0YW1wLAogIAkJICAgICAgZW50ZGF0YS0+b3B0aW9ucywgZW50ZGF0YS0+dGFnLCBl
bnRkYXRhLT5kYXRlLAogIAkJICAgICAgZW50ZGF0YS0+Y29uZmxpY3QpOwogIAl9CiAgCWZyZWUg
KGJhc2VyZXYpOwogIAliYXNlX2RlcmVnaXN0ZXIgKGZpbmZvKTsKICAKICAgICAgICAgIHhjaG1v
ZCAoZmluZm8tPmZpbGUsIDApOworICAgICB9CisgCiAgICAgIHJldHVybiAwOwogIH0KICAKICBz
dGF0aWMgY29uc3QgY2hhciAqY29uc3QgdW5lZGl0X3VzYWdlW10gPQogIHsKICAgICAgIlVzYWdl
OiAlcyAlcyBbLWxSXSBbZmlsZXMuLi5dXG4iLAogICAgICAiLWw6IExvY2FsIGRpcmVjdG9yeSBv
bmx5LCBub3QgcmVjdXJzaXZlXG4iLAogICAgICAiLVI6IFByb2Nlc3MgZGlyZWN0b3JpZXMgcmVj
dXJzaXZlbHlcbiIsCiAgICAgICIoU3BlY2lmeSB0aGUgLS1oZWxwIGdsb2JhbCBvcHRpb24gZm9y
IGEgbGlzdCBvZiBvdGhlciBoZWxwIG9wdGlvbnMpXG4iLAogICAgICBOVUxMCiAgfTsKICAKICBp
bnQKICB1bmVkaXQgKGFyZ2MsIGFyZ3YpCiAgICAgIGludCBhcmdjOwogICAgICBjaGFyICoqYXJn
djsKKioqKioqKioqKioqKioqCioqKiA2NDksNzE2ICoqKioKICAJICB8fCAoZWRsaXN0ICE9IE5V
TEwKICAJICAgICAgJiYgbmV3bGlzdCAhPSBOVUxMCiAgCSAgICAgICYmIHN0cmNtcCAoZWRsaXN0
LCBuZXdsaXN0KSA9PSAwKSkpCiAgCWZpbGVhdHRyX3NldCAoZmlsZW5hbWUsICJfZWRpdG9ycyIs
IG5ld2xpc3QpOwogICAgICBpZiAoZWRsaXN0ICE9IE5VTEwpCiAgCWZyZWUgKGVkbGlzdCk7CiAg
ICAgIGlmIChuZXdsaXN0ICE9IE5VTEwpCiAgCWZyZWUgKG5ld2xpc3QpOwogIH0KICAKICBzdHJ1
Y3Qgbm90aWZ5X3Byb2NfYXJncyB7CiAgICAgIC8qIFdoYXQga2luZCBvZiBub3RpZmljYXRpb24s
ICJlZGl0IiwgInRlZGl0IiwgZXRjLiAgKi8KICAgICAgY2hhciAqdHlwZTsKICAgICAgLyogVXNl
ciB3aG8gaXMgcnVubmluZyB0aGUgY29tbWFuZCB3aGljaCBjYXVzZXMgbm90aWZpY2F0aW9uLiAg
Ki8KICAgICAgY2hhciAqd2hvOwogICAgICAvKiBVc2VyIHRvIGJlIG5vdGlmaWVkLiAgKi8KISAg
ICAgY2hhciAqbm90aWZ5ZWU7CiAgICAgIC8qIEZpbGUuICAqLwogICAgICBjaGFyICpmaWxlOwog
IH07CiAgCiAgLyogUGFzcyBhcyBhIHN0YXRpYyB1bnRpbCB3ZSBnZXQgYXJvdW5kIHRvIGZpeGlu
ZyBQYXJzZV9JbmZvIHRvIHBhc3MgYWxvbmcKICAgICBhIHZvaWQgKiB3aGVyZSB3ZSBjYW4gc3Rh
c2ggaXQuICAqLwogIHN0YXRpYyBzdHJ1Y3Qgbm90aWZ5X3Byb2NfYXJncyAqbm90aWZ5X2FyZ3M7
CiAgCiAgc3RhdGljIGludCBub3RpZnlfcHJvYyBQUk9UTyAoKGNoYXIgKnJlcG9zaXRvcnksIGNo
YXIgKmZpbHRlcikpOwogIAogIHN0YXRpYyBpbnQKICBub3RpZnlfcHJvYyAocmVwb3NpdG9yeSwg
ZmlsdGVyKQogICAgICBjaGFyICpyZXBvc2l0b3J5OwogICAgICBjaGFyICpmaWx0ZXI7CiAgewog
ICAgICBGSUxFICpwaXBlZnA7CiAgICAgIGNoYXIgKnByb2c7CiAgICAgIGNoYXIgKmV4cGFuZGVk
X3Byb2c7CiAgICAgIGNoYXIgKnA7CiAgICAgIGNoYXIgKnE7CiAgICAgIGNoYXIgKnNyZXBvczsK
ICAgICAgc3RydWN0IG5vdGlmeV9wcm9jX2FyZ3MgKmFyZ3MgPSBub3RpZnlfYXJnczsKICAKICAg
ICAgc3JlcG9zID0gU2hvcnRfUmVwb3NpdG9yeSAocmVwb3NpdG9yeSk7CiEgICAgIHByb2cgPSB4
bWFsbG9jIChzdHJsZW4gKGZpbHRlcikgKyBzdHJsZW4gKGFyZ3MtPm5vdGlmeWVlKSArIDEpOwog
ICAgICAvKiBDb3B5IEZJTFRFUiB0byBQUk9HLCByZXBsYWNpbmcgdGhlIGZpcnN0IG9jY3VycmVu
Y2Ugb2YgJXMgd2l0aAohICAgICAgICB0aGUgbm90aWZ5ZWUuICBXZSBvbmx5IGFsbG9jYXRlZCBl
bm91Z2ggbWVtb3J5IGZvciBvbmUgJXMsIGFuZCBJIGRvdWJ0CiAgICAgICAgIHRoZXJlIGlzIGEg
bmVlZCBmb3IgbW9yZS4gICovCiAgICAgIGZvciAocCA9IGZpbHRlciwgcSA9IHByb2c7ICpwICE9
ICdcMCc7ICsrcCkKICAgICAgewogIAlpZiAocFswXSA9PSAnJScpCiAgCXsKICAJICAgIGlmIChw
WzFdID09ICdzJykKICAJICAgIHsKISAJCXN0cmNweSAocSwgYXJncy0+bm90aWZ5ZWUpOwogIAkJ
cSArPSBzdHJsZW4gKHEpOwogIAkJc3RyY3B5IChxLCBwICsgMik7CiAgCQlxICs9IHN0cmxlbiAo
cSk7CiAgCQlicmVhazsKICAJICAgIH0KICAJICAgIGVsc2UKICAJCWNvbnRpbnVlOwogIAl9CiAg
CSpxKysgPSAqcDsKICAgICAgfQogICAgICAqcSA9ICdcMCc7CiAgCiAgICAgIC8qIEZJWE1FOiB3
aHkgYXJlIHdlIGNhbGxpbmcgZXhwYW5kX3Byb2M/ICBEaWRuJ3Qgd2UgYWxyZWFkeQogICAgICAg
ICBleHBhbmQgaXQgaW4gUGFyc2VfSW5mbywgYmVmb3JlIHBhc3NpbmcgaXQgdG8gbm90aWZ5X3By
b2M/ICAqLwogICAgICBleHBhbmRlZF9wcm9nID0gZXhwYW5kX3BhdGggKHByb2csICJub3RpZnki
LCAwKTsKICAgICAgaWYgKCFleHBhbmRlZF9wcm9nKQotLS0gMTAwOCwxMDc1IC0tLS0KICAJICB8
fCAoZWRsaXN0ICE9IE5VTEwKICAJICAgICAgJiYgbmV3bGlzdCAhPSBOVUxMCiAgCSAgICAgICYm
IHN0cmNtcCAoZWRsaXN0LCBuZXdsaXN0KSA9PSAwKSkpCiAgCWZpbGVhdHRyX3NldCAoZmlsZW5h
bWUsICJfZWRpdG9ycyIsIG5ld2xpc3QpOwogICAgICBpZiAoZWRsaXN0ICE9IE5VTEwpCiAgCWZy
ZWUgKGVkbGlzdCk7CiAgICAgIGlmIChuZXdsaXN0ICE9IE5VTEwpCiAgCWZyZWUgKG5ld2xpc3Qp
OwogIH0KICAKICBzdHJ1Y3Qgbm90aWZ5X3Byb2NfYXJncyB7CiAgICAgIC8qIFdoYXQga2luZCBv
ZiBub3RpZmljYXRpb24sICJlZGl0IiwgInRlZGl0IiwgZXRjLiAgKi8KICAgICAgY2hhciAqdHlw
ZTsKICAgICAgLyogVXNlciB3aG8gaXMgcnVubmluZyB0aGUgY29tbWFuZCB3aGljaCBjYXVzZXMg
bm90aWZpY2F0aW9uLiAgKi8KICAgICAgY2hhciAqd2hvOwogICAgICAvKiBVc2VyIHRvIGJlIG5v
dGlmaWVkLiAgKi8KISAgICAgY2hhciAqd2F0Y2hlcjsKICAgICAgLyogRmlsZS4gICovCiAgICAg
IGNoYXIgKmZpbGU7CiAgfTsKICAKICAvKiBQYXNzIGFzIGEgc3RhdGljIHVudGlsIHdlIGdldCBh
cm91bmQgdG8gZml4aW5nIFBhcnNlX0luZm8gdG8gcGFzcyBhbG9uZwogICAgIGEgdm9pZCAqIHdo
ZXJlIHdlIGNhbiBzdGFzaCBpdC4gICovCiAgc3RhdGljIHN0cnVjdCBub3RpZnlfcHJvY19hcmdz
ICpub3RpZnlfYXJnczsKICAKICBzdGF0aWMgaW50IG5vdGlmeV9wcm9jIFBST1RPICgoY2hhciAq
cmVwb3NpdG9yeSwgY2hhciAqZmlsdGVyKSk7CiAgCiAgc3RhdGljIGludAogIG5vdGlmeV9wcm9j
IChyZXBvc2l0b3J5LCBmaWx0ZXIpCiAgICAgIGNoYXIgKnJlcG9zaXRvcnk7CiAgICAgIGNoYXIg
KmZpbHRlcjsKICB7CiAgICAgIEZJTEUgKnBpcGVmcDsKICAgICAgY2hhciAqcHJvZzsKICAgICAg
Y2hhciAqZXhwYW5kZWRfcHJvZzsKICAgICAgY2hhciAqcDsKICAgICAgY2hhciAqcTsKICAgICAg
Y2hhciAqc3JlcG9zOwogICAgICBzdHJ1Y3Qgbm90aWZ5X3Byb2NfYXJncyAqYXJncyA9IG5vdGlm
eV9hcmdzOwogIAogICAgICBzcmVwb3MgPSBTaG9ydF9SZXBvc2l0b3J5IChyZXBvc2l0b3J5KTsK
ISAgICAgcHJvZyA9IHhtYWxsb2MgKHN0cmxlbiAoZmlsdGVyKSArIHN0cmxlbiAoYXJncy0+d2F0
Y2hlcikgKyAxKTsKICAgICAgLyogQ29weSBGSUxURVIgdG8gUFJPRywgcmVwbGFjaW5nIHRoZSBm
aXJzdCBvY2N1cnJlbmNlIG9mICVzIHdpdGgKISAgICAgICAgdGhlIHdhdGNoZXIuICBXZSBvbmx5
IGFsbG9jYXRlZCBlbm91Z2ggbWVtb3J5IGZvciBvbmUgJXMsIGFuZCBJIGRvdWJ0CiAgICAgICAg
IHRoZXJlIGlzIGEgbmVlZCBmb3IgbW9yZS4gICovCiAgICAgIGZvciAocCA9IGZpbHRlciwgcSA9
IHByb2c7ICpwICE9ICdcMCc7ICsrcCkKICAgICAgewogIAlpZiAocFswXSA9PSAnJScpCiAgCXsK
ICAJICAgIGlmIChwWzFdID09ICdzJykKICAJICAgIHsKISAJCXN0cmNweSAocSwgYXJncy0+d2F0
Y2hlcik7CiAgCQlxICs9IHN0cmxlbiAocSk7CiAgCQlzdHJjcHkgKHEsIHAgKyAyKTsKICAJCXEg
Kz0gc3RybGVuIChxKTsKICAJCWJyZWFrOwogIAkgICAgfQogIAkgICAgZWxzZQogIAkJY29udGlu
dWU7CiAgCX0KICAJKnErKyA9ICpwOwogICAgICB9CiAgICAgICpxID0gJ1wwJzsKICAKICAgICAg
LyogRklYTUU6IHdoeSBhcmUgd2UgY2FsbGluZyBleHBhbmRfcHJvYz8gIERpZG4ndCB3ZSBhbHJl
YWR5CiAgICAgICAgIGV4cGFuZCBpdCBpbiBQYXJzZV9JbmZvLCBiZWZvcmUgcGFzc2luZyBpdCB0
byBub3RpZnlfcHJvYz8gICovCiAgICAgIGV4cGFuZGVkX3Byb2cgPSBleHBhbmRfcGF0aCAocHJv
ZywgIm5vdGlmeSIsIDApOwogICAgICBpZiAoIWV4cGFuZGVkX3Byb2cpCioqKioqKioqKioqKioq
KgoqKiogNzMxLDgyMCAqKioqCiAgICAgIGZwcmludGYgKHBpcGVmcCwgIiVzICVzXG4tLS1cbiIs
IHNyZXBvcywgYXJncy0+ZmlsZSk7CiAgICAgIGZwcmludGYgKHBpcGVmcCwgIlRyaWdnZXJlZCAl
cyB3YXRjaCBvbiAlc1xuIiwgYXJncy0+dHlwZSwgcmVwb3NpdG9yeSk7CiAgICAgIGZwcmludGYg
KHBpcGVmcCwgIkJ5ICVzXG4iLCBhcmdzLT53aG8pOwogIAogICAgICAvKiBMb3RzIG1vcmUgcG90
ZW50aWFsbHkgdXNlZnVsIGluZm9ybWF0aW9uIHdlIGNvdWxkIGFkZCBoZXJlOyBzZWUKICAgICAg
ICAgbG9nZmlsZV93cml0ZSBmb3IgaW5zcGlyYXRpb24uICAqLwogIAogICAgICBmcmVlIChwcm9n
KTsKICAgICAgZnJlZSAoZXhwYW5kZWRfcHJvZyk7CiAgICAgIHJldHVybiAocGNsb3NlIChwaXBl
ZnApKTsKICB9CiAgCiAgLyogRklYTUU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYSB3YXkg
dG8gcmVwb3J0IHdoZXRoZXIgdGhlcmUgd2FzCiAgICAgYW4gZXJyb3Igc28gdGhhdCBzZXJ2ZXIu
YyBjYW4ga25vdyB3aGV0aGVyIHRvIHJlcG9ydCBOb3RpZmllZCBiYWNrCiAgICAgdG8gdGhlIGNs
aWVudC4gICovCiAgdm9pZAohIG5vdGlmeV9kbyAodHlwZSwgZmlsZW5hbWUsIHdobywgdmFsLCB3
YXRjaGVzLCByZXBvc2l0b3J5KQogICAgICBpbnQgdHlwZTsKICAgICAgY2hhciAqZmlsZW5hbWU7
CiAgICAgIGNoYXIgKndobzsKICAgICAgY2hhciAqdmFsOwogICAgICBjaGFyICp3YXRjaGVzOwog
ICAgICBjaGFyICpyZXBvc2l0b3J5OwogIHsKICAgICAgc3RhdGljIHN0cnVjdCBhZGRyZW1vdmVf
YXJncyBibGFuazsKICAgICAgc3RydWN0IGFkZHJlbW92ZV9hcmdzIGFyZ3M7CiAgICAgIGNoYXIg
KndhdGNoZXJzOwogICAgICBjaGFyICpwOwogICAgICBjaGFyICplbmRwOwogICAgICBjaGFyICpu
ZXh0cDsKICAKICAgICAgLyogSW5pdGlhbGl6ZSBmaWVsZHMgdG8gMCwgTlVMTCwgb3IgMC4wLiAg
Ki8KICAgICAgYXJncyA9IGJsYW5rOwogICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgIHsKICAJY2Fz
ZSAnRSc6CiAgCSAgICBpZiAoc3RycGJyayAodmFsLCAiLD47PVxuIikgIT0gTlVMTCkKICAJICAg
IHsKICAJCWVycm9yICgwLCAwLCAiaW52YWxpZCBjaGFyYWN0ZXIgaW4gZWRpdG9yIHZhbHVlIik7
CiAgCQlyZXR1cm47CiAgCSAgICB9CiEgCSAgICBlZGl0b3Jfc2V0IChmaWxlbmFtZSwgd2hvLCB2
YWwpOwogIAkgICAgYnJlYWs7CiAgCWNhc2UgJ1UnOgogIAljYXNlICdDJzoKISAJICAgIGVkaXRv
cl9zZXQgKGZpbGVuYW1lLCB3aG8sIE5VTEwpOwogIAkgICAgYnJlYWs7CiAgCWRlZmF1bHQ6CiAg
CSAgICByZXR1cm47CiAgICAgIH0KICAKICAgICAgd2F0Y2hlcnMgPSBmaWxlYXR0cl9nZXQwIChm
aWxlbmFtZSwgIl93YXRjaGVycyIpOwogICAgICBwID0gd2F0Y2hlcnM7CiAgICAgIHdoaWxlIChw
ICE9IE5VTEwpCiAgICAgIHsKICAJY2hhciAqcTsKICAJY2hhciAqZW5kcTsKICAJY2hhciAqbmV4
dHE7CiAgCWNoYXIgKm5vdGlmOwogIAogIAllbmRwID0gc3RyY2hyIChwLCAnPicpOwogIAlpZiAo
ZW5kcCA9PSBOVUxMKQogIAkgICAgYnJlYWs7CiAgCW5leHRwID0gc3RyY2hyIChwLCAnLCcpOwog
IAogIAlpZiAoKHNpemVfdCkoZW5kcCAtIHApID09IHN0cmxlbiAod2hvKSAmJiBzdHJuY21wICh3
aG8sIHAsIGVuZHAgLSBwKSA9PSAwKQogIAl7Ci0gCSAgICAvKiBEb24ndCBub3RpZnkgdXNlciBv
ZiB0aGVpciBvd24gY2hhbmdlcy4gIFdvdWxkIHBlcmhhcHMKLSAJICAgICAgIGJlIGJldHRlciB0
byBjaGVjayB3aGV0aGVyIGl0IGlzIHRoZSBzYW1lIHdvcmtpbmcKLSAJICAgICAgIGRpcmVjdG9y
eSwgbm90IHRoZSBzYW1lIHVzZXIsIGJ1dCB0aGF0IGlzIGhhaXJ5LiAgKi8KICAJICAgIHAgPSBu
ZXh0cCA9PSBOVUxMID8gbmV4dHAgOiBuZXh0cCArIDE7CiAgCSAgICBjb250aW51ZTsKICAJfQog
IAogIAkvKiBOb3cgd2UgcG9pbnQgcSBhdCBhIHN0cmluZyB3aGljaCBsb29rcyBsaWtlCiAgCSAg
ICJlZGl0K3VuZWRpdCtjb21taXQsIi4uLiBhbmQgd2FsayBkb3duIGl0LiAgKi8KICAJcSA9IGVu
ZHAgKyAxOwogIAlub3RpZiA9IE5VTEw7CiAgCXdoaWxlIChxICE9IE5VTEwpCiAgCXsKICAJICAg
IGVuZHEgPSBzdHJjaHIgKHEsICcrJyk7CiAgCSAgICBpZiAoZW5kcSA9PSBOVUxMIHx8IChuZXh0
cCAhPSBOVUxMICYmIGVuZHEgPiBuZXh0cCkpCiAgCSAgICB7CiAgCQlpZiAobmV4dHAgPT0gTlVM
TCkKICAJCSAgICBlbmRxID0gcSArIHN0cmxlbiAocSk7CiAgCQllbHNlCiAgCQkgICAgZW5kcSA9
IG5leHRwOwogIAkJbmV4dHEgPSBOVUxMOwogIAkgICAgfQogIAkgICAgZWxzZQotLS0gMTA5MCwx
MjE1IC0tLS0KICAgICAgZnByaW50ZiAocGlwZWZwLCAiJXMgJXNcbi0tLVxuIiwgc3JlcG9zLCBh
cmdzLT5maWxlKTsKICAgICAgZnByaW50ZiAocGlwZWZwLCAiVHJpZ2dlcmVkICVzIHdhdGNoIG9u
ICVzXG4iLCBhcmdzLT50eXBlLCByZXBvc2l0b3J5KTsKICAgICAgZnByaW50ZiAocGlwZWZwLCAi
QnkgJXNcbiIsIGFyZ3MtPndobyk7CiAgCiAgICAgIC8qIExvdHMgbW9yZSBwb3RlbnRpYWxseSB1
c2VmdWwgaW5mb3JtYXRpb24gd2UgY291bGQgYWRkIGhlcmU7IHNlZQogICAgICAgICBsb2dmaWxl
X3dyaXRlIGZvciBpbnNwaXJhdGlvbi4gICovCiAgCiAgICAgIGZyZWUgKHByb2cpOwogICAgICBm
cmVlIChleHBhbmRlZF9wcm9nKTsKICAgICAgcmV0dXJuIChwY2xvc2UgKHBpcGVmcCkpOwogIH0K
ICAKICAvKiBGSVhNRTogdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBhIHdheSB0byByZXBvcnQg
d2hldGhlciB0aGVyZSB3YXMKICAgICBhbiBlcnJvciBzbyB0aGF0IHNlcnZlci5jIGNhbiBrbm93
IHdoZXRoZXIgdG8gcmVwb3J0IE5vdGlmaWVkIGJhY2sKICAgICB0byB0aGUgY2xpZW50LiAgKi8K
ICB2b2lkCiEgbm90aWZ5X2RvICh0eXBlLCBmaWxlbmFtZSwgd2hvLCBlZGl0b3IsIHZhbCwgd2F0
Y2hlcywgcmVwb3NpdG9yeSkKICAgICAgaW50IHR5cGU7CiAgICAgIGNoYXIgKmZpbGVuYW1lOwog
ICAgICBjaGFyICp3aG87CisgICAgIGNoYXIgKmVkaXRvcjsKICAgICAgY2hhciAqdmFsOwogICAg
ICBjaGFyICp3YXRjaGVzOwogICAgICBjaGFyICpyZXBvc2l0b3J5OwogIHsKICAgICAgc3RhdGlj
IHN0cnVjdCBhZGRyZW1vdmVfYXJncyBibGFuazsKICAgICAgc3RydWN0IGFkZHJlbW92ZV9hcmdz
IGFyZ3M7CisgICAgIGludCBlZGl0X2NvdW50ID0gMDsKICAgICAgY2hhciAqd2F0Y2hlcnM7CiAg
ICAgIGNoYXIgKnA7CiAgICAgIGNoYXIgKmVuZHA7CiAgICAgIGNoYXIgKm5leHRwOwogIAogICAg
ICAvKiBJbml0aWFsaXplIGZpZWxkcyB0byAwLCBOVUxMLCBvciAwLjAuICAqLwogICAgICBhcmdz
ID0gYmxhbms7CiAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgewogIAljYXNlICdFJzoKICAJICAg
IGlmIChzdHJwYnJrICh2YWwsICIsPjs9XG4iKSAhPSBOVUxMKQogIAkgICAgewogIAkJZXJyb3Ig
KDAsIDAsICJpbnZhbGlkIGNoYXJhY3RlciBpbiBlZGl0b3IgdmFsdWUiKTsKICAJCXJldHVybjsK
ICAJICAgIH0KISAJICAgIGVkaXRvcl9zZXQgKGZpbGVuYW1lLCBlZGl0b3IsIHZhbCk7CiAgCSAg
ICBicmVhazsKICAJY2FzZSAnVSc6CiAgCWNhc2UgJ0MnOgohIAkgICAgZWRpdG9yX3NldCAoZmls
ZW5hbWUsIGVkaXRvciwgTlVMTCk7CiAgCSAgICBicmVhazsKICAJZGVmYXVsdDoKICAJICAgIHJl
dHVybjsKICAgICAgfQogIAogICAgICB3YXRjaGVycyA9IGZpbGVhdHRyX2dldDAgKGZpbGVuYW1l
LCAiX3dhdGNoZXJzIik7CiAgICAgIHAgPSB3YXRjaGVyczsKICAgICAgd2hpbGUgKHAgIT0gTlVM
TCkKICAgICAgewogIAljaGFyICpxOwogIAljaGFyICplbmRxOwogIAljaGFyICpuZXh0cTsKICAJ
Y2hhciAqbm90aWY7CiAgCiAgCWVuZHAgPSBzdHJjaHIgKHAsICc+Jyk7CiAgCWlmIChlbmRwID09
IE5VTEwpCiAgCSAgICBicmVhazsKICAJbmV4dHAgPSBzdHJjaHIgKHAsICcsJyk7CiAgCiAgCWlm
ICgoc2l6ZV90KShlbmRwIC0gcCkgPT0gc3RybGVuICh3aG8pICYmIHN0cm5jbXAgKHdobywgcCwg
ZW5kcCAtIHApID09IDApCisgCXsKKyAgICAgICAgICAgICBjaGFyICplID0gTlVMTDsKKyAgICAg
ICAgICAgICBjaGFyICplZGl0b3JzID0gTlVMTDsKKyAKKyAgICAgICAgICAgICBlZGl0b3JzID0g
ZmlsZWF0dHJfZ2V0MCAoZmlsZW5hbWUsICJfZWRpdG9ycyIpOworICAgICAgICAgICAgIGUgPSBl
ZGl0b3JzOworICAgICAgICAgICAgIHdoaWxlIChlICE9IE5VTEwpCisgCXsKKyAgICAgICAgICAg
ICAgICAgY2hhciAqZV9hdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgIGNoYXIgKmVfZW5kID0g
TlVMTDsKKyAgICAgICAgICAgICAgICAgY2hhciAqZV9ndCA9IE5VTEw7CisgCisgICAgICAgICAg
ICAgICAgIGVfYXQgPSBzdHJjaHIgKGUsICdAJyk7CisgICAgICAgICAgICAgICAgIGVfZ3QgPSBz
dHJjaHIgKGUsICc+Jyk7CisgCisgICAgICAgICAgICAgICAgIGVfZW5kID0gKGVfYXQgIT0gTlVM
TCkgICA/ICAgZV9hdCAgIDogICBlX2d0OworIAorICAgICAgICAgICAgICAgICBpZiAoKHNpemVf
dCkgKGVfZW5kIC0gZSkgPT0gc3RybGVuICh3aG8pICAmJgorICAgICAgICAgICAgICAgICAgICAg
c3RybmNtcCAod2hvLCBlLCBlX2VuZCAtIGUpID09IDApCisgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICsrZWRpdF9jb3VudDsKKyAgICAgICAgICAgICAgICAgfQorIAor
ICAgICAgICAgICAgICAgICBlID0gc3RyY2hyIChlLCAnLCcpOworICAgICAgICAgICAgICAgICBp
ZiAoZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAr
K2U7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAg
aWYgKGVkaXRfY291bnQgPD0gMSkKICAgICAgICAgICAgICB7CiAgCSAgICBwID0gbmV4dHAgPT0g
TlVMTCA/IG5leHRwIDogbmV4dHAgKyAxOwogIAkgICAgY29udGludWU7CiAgCX0KICAKKyAgICAg
ICAgICAgICBpZiAoZWRpdG9ycyAhPSBOVUxMKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgZnJlZSAoZWRpdG9ycyk7CisgICAgICAgICAgICAgfQorIAl9CisgCiAgCS8qIE5vdyB3
ZSBwb2ludCBxIGF0IGEgc3RyaW5nIHdoaWNoIGxvb2tzIGxpa2UKICAJICAgImVkaXQrdW5lZGl0
K2NvbW1pdCwiLi4uIGFuZCB3YWxrIGRvd24gaXQuICAqLwogIAlxID0gZW5kcCArIDE7CiAgCW5v
dGlmID0gTlVMTDsKICAJd2hpbGUgKHEgIT0gTlVMTCkKICAJewogIAkgICAgZW5kcSA9IHN0cmNo
ciAocSwgJysnKTsKICAJICAgIGlmIChlbmRxID09IE5VTEwgfHwgKG5leHRwICE9IE5VTEwgJiYg
ZW5kcSA+IG5leHRwKSkKICAJICAgIHsKICAJCWlmIChuZXh0cCA9PSBOVUxMKQogIAkJICAgIGVu
ZHEgPSBxICsgc3RybGVuIChxKTsKICAJCWVsc2UKICAJCSAgICBlbmRxID0gbmV4dHA7CiAgCQlu
ZXh0cSA9IE5VTEw7CiAgCSAgICB9CiAgCSAgICBlbHNlCioqKioqKioqKioqKioqKgoqKiogODU1
LDk3NyAqKioqCiAgCQkgICAgbm90aWYgPSAidGVtcG9yYXJ5IGNvbW1pdCI7CiAgCSAgICB9CiAg
CSAgICBxID0gbmV4dHE7CiAgCX0KICAJaWYgKG5leHRwICE9IE5VTEwpCiAgCSAgICArK25leHRw
OwogIAogIAlpZiAobm90aWYgIT0gTlVMTCkKICAJewogIAkgICAgc3RydWN0IG5vdGlmeV9wcm9j
X2FyZ3MgYXJnczsKICAJICAgIHNpemVfdCBsZW4gPSBlbmRwIC0gcDsKICAJICAgIEZJTEUgKmZw
OwogIAkgICAgY2hhciAqdXNlcnNuYW1lOwogIAkgICAgY2hhciAqbGluZSA9IE5VTEw7CiAgCSAg
ICBzaXplX3QgbGluZV9sZW4gPSAwOwogIAohIAkgICAgYXJncy5ub3RpZnllZSA9IE5VTEw7CiAg
CSAgICB1c2Vyc25hbWUgPSB4bWFsbG9jIChzdHJsZW4gKENWU3Jvb3RfZGlyZWN0b3J5KQogIAkJ
CQkgKyBzaXplb2YgQ1ZTUk9PVEFETQogIAkJCQkgKyBzaXplb2YgQ1ZTUk9PVEFETV9VU0VSUwog
IAkJCQkgKyAyMCk7CiAgCSAgICBzdHJjcHkgKHVzZXJzbmFtZSwgQ1ZTcm9vdF9kaXJlY3Rvcnkp
OwogIAkgICAgc3RyY2F0ICh1c2Vyc25hbWUsICIvIik7CiAgCSAgICBzdHJjYXQgKHVzZXJzbmFt
ZSwgQ1ZTUk9PVEFETSk7CiAgCSAgICBzdHJjYXQgKHVzZXJzbmFtZSwgIi8iKTsKICAJICAgIHN0
cmNhdCAodXNlcnNuYW1lLCBDVlNST09UQURNX1VTRVJTKTsKICAJICAgIGZwID0gQ1ZTX0ZPUEVO
ICh1c2Vyc25hbWUsICJyIik7CiAgCSAgICBpZiAoZnAgPT0gTlVMTCAmJiAhZXhpc3RlbmNlX2Vy
cm9yIChlcnJubykpCiAgCQllcnJvciAoMCwgZXJybm8sICJjYW5ub3QgcmVhZCAlcyIsIHVzZXJz
bmFtZSk7CiAgCSAgICBpZiAoZnAgIT0gTlVMTCkKICAJICAgIHsKICAJCXdoaWxlIChnZXRsaW5l
ICgmbGluZSwgJmxpbmVfbGVuLCBmcCkgPj0gMCkKICAJCXsKICAJCSAgICBpZiAoc3RybmNtcCAo
bGluZSwgcCwgbGVuKSA9PSAwCiAgCQkJJiYgbGluZVtsZW5dID09ICc6JykKICAJCSAgICB7CiAg
CQkJY2hhciAqY3A7CiEgCQkJYXJncy5ub3RpZnllZSA9IHhzdHJkdXAgKGxpbmUgKyBsZW4gKyAx
KTsKICAKICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSBtYXkgb3IgbWF5IG5vdCBi
ZSBtb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb24tc2VwYXJhdGVkIGZpZWxk
cyBhZGRlZCB0byB0aGlzIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVy
ZTsgaW4gYW55IGNhc2UsIHdlIGlnbm9yZSB0aGVtIHJpZ2h0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm93LCBhbmQgaWYgdGhlcmUgYXJlIG5vbmUgd2UgbWFrZSBzdXJlIHRvCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hvcCBvZmYgdGhlIGZpbmFsIG5ld2xpbmUsIGlmIGFu
eS4gKi8KISAJCQljcCA9IHN0cnBicmsgKGFyZ3Mubm90aWZ5ZWUsICI6XG4iKTsKICAKICAJCQlp
ZiAoY3AgIT0gTlVMTCkKICAJCQkgICAgKmNwID0gJ1wwJzsKICAJCQlicmVhazsKICAJCSAgICB9
CiAgCQl9CiAgCQlpZiAoZmVycm9yIChmcCkpCiAgCQkgICAgZXJyb3IgKDAsIGVycm5vLCAiY2Fu
bm90IHJlYWQgJXMiLCB1c2Vyc25hbWUpOwogIAkJaWYgKGZjbG9zZSAoZnApIDwgMCkKICAJCSAg
ICBlcnJvciAoMCwgZXJybm8sICJjYW5ub3QgY2xvc2UgJXMiLCB1c2Vyc25hbWUpOwogIAkgICAg
fQogIAkgICAgZnJlZSAodXNlcnNuYW1lKTsKICAJICAgIGlmIChsaW5lICE9IE5VTEwpCiAgCQlm
cmVlIChsaW5lKTsKICAKISAJICAgIGlmIChhcmdzLm5vdGlmeWVlID09IE5VTEwpCiAgCSAgICB7
CiEgCQlhcmdzLm5vdGlmeWVlID0geG1hbGxvYyAoZW5kcCAtIHAgKyAxKTsKISAJCXN0cm5jcHkg
KGFyZ3Mubm90aWZ5ZWUsIHAsIGVuZHAgLSBwKTsKISAJCWFyZ3Mubm90aWZ5ZWVbZW5kcCAtIHBd
ID0gJ1wwJzsKICAJICAgIH0KICAKICAJICAgIG5vdGlmeV9hcmdzID0gJmFyZ3M7CiAgCSAgICBh
cmdzLnR5cGUgPSBub3RpZjsKICAJICAgIGFyZ3Mud2hvID0gd2hvOwogIAkgICAgYXJncy5maWxl
ID0gZmlsZW5hbWU7CiAgCiAgCSAgICAodm9pZCkgUGFyc2VfSW5mbyAoQ1ZTUk9PVEFETV9OT1RJ
RlksIHJlcG9zaXRvcnksIG5vdGlmeV9wcm9jLCAxKTsKISAJICAgIGZyZWUgKGFyZ3Mubm90aWZ5
ZWUpOwogIAl9CiAgCiAgCXAgPSBuZXh0cDsKICAgICAgfQogICAgICBpZiAod2F0Y2hlcnMgIT0g
TlVMTCkKICAJZnJlZSAod2F0Y2hlcnMpOwogIAogICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgIHsK
ICAJY2FzZSAnRSc6CiAgCSAgICBpZiAoKndhdGNoZXMgPT0gJ0UnKQogIAkgICAgewogIAkJYXJn
cy5hZGRfdGVkaXQgPSAxOwogIAkJKyt3YXRjaGVzOwogIAkgICAgfQogIAkgICAgaWYgKCp3YXRj
aGVzID09ICdVJykKICAJICAgIHsKICAJCWFyZ3MuYWRkX3R1bmVkaXQgPSAxOwogIAkJKyt3YXRj
aGVzOwogIAkgICAgfQogIAkgICAgaWYgKCp3YXRjaGVzID09ICdDJykKICAJICAgIHsKICAJCWFy
Z3MuYWRkX3Rjb21taXQgPSAxOwogIAkgICAgfQogIAkgICAgd2F0Y2hfbW9kaWZ5X3dhdGNoZXJz
IChmaWxlbmFtZSwgJmFyZ3MpOwogIAkgICAgYnJlYWs7CiAgCWNhc2UgJ1UnOgogIAljYXNlICdD
JzoKICAJICAgIGFyZ3MucmVtb3ZlX3RlbXAgPSAxOwogIAkgICAgd2F0Y2hfbW9kaWZ5X3dhdGNo
ZXJzIChmaWxlbmFtZSwgJmFyZ3MpOwogIAkgICAgYnJlYWs7CiAgICAgIH0KICB9CiAgCiAgI2lm
ZGVmIENMSUVOVF9TVVBQT1JUCiAgLyogQ2hlY2sgYW5kIHNlbmQgbm90aWZpY2F0aW9ucy4gIFRo
aXMgaXMgb25seSBmb3IgdGhlIGNsaWVudC4gICovCiAgdm9pZAogIG5vdGlmeV9jaGVjayAocmVw
b3NpdG9yeSwgdXBkYXRlX2RpcikKICAgICAgY2hhciAqcmVwb3NpdG9yeTsKICAgICAgY2hhciAq
dXBkYXRlX2RpcjsKICB7CiAgICAgIEZJTEUgKmZwOwogICAgICBjaGFyICpsaW5lID0gTlVMTDsK
ICAgICAgc2l6ZV90IGxpbmVfbGVuID0gMDsKICAKICAgICAgaWYgKCEgc2VydmVyX3N0YXJ0ZWQp
CiAgCS8qIFdlIGFyZSBpbiB0aGUgbWlkc3Qgb2YgYSBjb21tYW5kIHdoaWNoIGlzIG5vdCB0byB0
YWxrIHRvCiAgCSAgIHRoZSBzZXJ2ZXIgKGUuZy4gdGhlIGZpcnN0IHBoYXNlIG9mIGEgY3ZzIGVk
aXQpLiAgSnVzdCBjaGlsbAogIAkgICBvdXQsIHdlJ2xsIGNhdGNoIHRoZSBub3RpZmljYXRpb25z
IG9uIHRoZSBmbGlwIHNpZGUuICAqLwotLS0gMTI1MCwxMzc1IC0tLS0KICAJCSAgICBub3RpZiA9
ICJ0ZW1wb3JhcnkgY29tbWl0IjsKICAJICAgIH0KICAJICAgIHEgPSBuZXh0cTsKICAJfQogIAlp
ZiAobmV4dHAgIT0gTlVMTCkKICAJICAgICsrbmV4dHA7CiAgCiAgCWlmIChub3RpZiAhPSBOVUxM
KQogIAl7CiAgCSAgICBzdHJ1Y3Qgbm90aWZ5X3Byb2NfYXJncyBhcmdzOwogIAkgICAgc2l6ZV90
IGxlbiA9IGVuZHAgLSBwOwogIAkgICAgRklMRSAqZnA7CiAgCSAgICBjaGFyICp1c2Vyc25hbWU7
CiAgCSAgICBjaGFyICpsaW5lID0gTlVMTDsKICAJICAgIHNpemVfdCBsaW5lX2xlbiA9IDA7CiAg
CiEgCSAgICBhcmdzLndhdGNoZXIgPSBOVUxMOwogIAkgICAgdXNlcnNuYW1lID0geG1hbGxvYyAo
c3RybGVuIChDVlNyb290X2RpcmVjdG9yeSkKICAJCQkJICsgc2l6ZW9mIENWU1JPT1RBRE0KICAJ
CQkJICsgc2l6ZW9mIENWU1JPT1RBRE1fVVNFUlMKICAJCQkJICsgMjApOwogIAkgICAgc3RyY3B5
ICh1c2Vyc25hbWUsIENWU3Jvb3RfZGlyZWN0b3J5KTsKICAJICAgIHN0cmNhdCAodXNlcnNuYW1l
LCAiLyIpOwogIAkgICAgc3RyY2F0ICh1c2Vyc25hbWUsIENWU1JPT1RBRE0pOwogIAkgICAgc3Ry
Y2F0ICh1c2Vyc25hbWUsICIvIik7CiAgCSAgICBzdHJjYXQgKHVzZXJzbmFtZSwgQ1ZTUk9PVEFE
TV9VU0VSUyk7CiAgCSAgICBmcCA9IENWU19GT1BFTiAodXNlcnNuYW1lLCAiciIpOwogIAkgICAg
aWYgKGZwID09IE5VTEwgJiYgIWV4aXN0ZW5jZV9lcnJvciAoZXJybm8pKQogIAkJZXJyb3IgKDAs
IGVycm5vLCAiY2Fubm90IHJlYWQgJXMiLCB1c2Vyc25hbWUpOwogIAkgICAgaWYgKGZwICE9IE5V
TEwpCiAgCSAgICB7CiAgCQl3aGlsZSAoZ2V0bGluZSAoJmxpbmUsICZsaW5lX2xlbiwgZnApID49
IDApCiAgCQl7CiAgCQkgICAgaWYgKHN0cm5jbXAgKGxpbmUsIHAsIGxlbikgPT0gMAogIAkJCSYm
IGxpbmVbbGVuXSA9PSAnOicpCiAgCQkgICAgewogIAkJCWNoYXIgKmNwOwohIAkJCWFyZ3Mud2F0
Y2hlciA9IHhzdHJkdXAgKGxpbmUgKyBsZW4gKyAxKTsKICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKiBUaGVyZSBtYXkgb3IgbWF5IG5vdCBiZSBtb3JlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29sb24tc2VwYXJhdGVkIGZpZWxkcyBhZGRlZCB0byB0aGlzIGluIHRoZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZTsgaW4gYW55IGNhc2UsIHdlIGlnbm9yZSB0
aGVtIHJpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93LCBhbmQgaWYgdGhlcmUg
YXJlIG5vbmUgd2UgbWFrZSBzdXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hv
cCBvZmYgdGhlIGZpbmFsIG5ld2xpbmUsIGlmIGFueS4gKi8KISAJCQljcCA9IHN0cnBicmsgKGFy
Z3Mud2F0Y2hlciwgIjpcbiIpOwogIAogIAkJCWlmIChjcCAhPSBOVUxMKQogIAkJCSAgICAqY3Ag
PSAnXDAnOwogIAkJCWJyZWFrOwogIAkJICAgIH0KICAJCX0KICAJCWlmIChmZXJyb3IgKGZwKSkK
ICAJCSAgICBlcnJvciAoMCwgZXJybm8sICJjYW5ub3QgcmVhZCAlcyIsIHVzZXJzbmFtZSk7CiAg
CQlpZiAoZmNsb3NlIChmcCkgPCAwKQogIAkJICAgIGVycm9yICgwLCBlcnJubywgImNhbm5vdCBj
bG9zZSAlcyIsIHVzZXJzbmFtZSk7CiAgCSAgICB9CiAgCSAgICBmcmVlICh1c2Vyc25hbWUpOwog
IAkgICAgaWYgKGxpbmUgIT0gTlVMTCkKICAJCWZyZWUgKGxpbmUpOwogIAohIAkgICAgaWYgKGFy
Z3Mud2F0Y2hlciA9PSBOVUxMKQogIAkgICAgewohIAkJYXJncy53YXRjaGVyID0geG1hbGxvYyAo
ZW5kcCAtIHAgKyAxKTsKISAJCXN0cm5jcHkgKGFyZ3Mud2F0Y2hlciwgcCwgZW5kcCAtIHApOwoh
IAkJYXJncy53YXRjaGVyW2VuZHAgLSBwXSA9ICdcMCc7CiAgCSAgICB9CiAgCiAgCSAgICBub3Rp
ZnlfYXJncyA9ICZhcmdzOwogIAkgICAgYXJncy50eXBlID0gbm90aWY7CiAgCSAgICBhcmdzLndo
byA9IHdobzsKICAJICAgIGFyZ3MuZmlsZSA9IGZpbGVuYW1lOwogIAogIAkgICAgKHZvaWQpIFBh
cnNlX0luZm8gKENWU1JPT1RBRE1fTk9USUZZLCByZXBvc2l0b3J5LCBub3RpZnlfcHJvYywgMSk7
CiEgCSAgICBmcmVlIChhcmdzLndhdGNoZXIpOwogIAl9CiAgCiAgCXAgPSBuZXh0cDsKICAgICAg
fQogICAgICBpZiAod2F0Y2hlcnMgIT0gTlVMTCkKICAJZnJlZSAod2F0Y2hlcnMpOwogIAorICAg
ICBpZiAoZWRpdF9jb3VudCA8PSAxKQorICAgICB7CiAgICAgIHN3aXRjaCAodHlwZSkKICAgICAg
ewogIAljYXNlICdFJzoKICAJICAgIGlmICgqd2F0Y2hlcyA9PSAnRScpCiAgCSAgICB7CiAgCQlh
cmdzLmFkZF90ZWRpdCA9IDE7CiAgCQkrK3dhdGNoZXM7CiAgCSAgICB9CiAgCSAgICBpZiAoKndh
dGNoZXMgPT0gJ1UnKQogIAkgICAgewogIAkJYXJncy5hZGRfdHVuZWRpdCA9IDE7CiAgCQkrK3dh
dGNoZXM7CiAgCSAgICB9CiAgCSAgICBpZiAoKndhdGNoZXMgPT0gJ0MnKQogIAkgICAgewogIAkJ
YXJncy5hZGRfdGNvbW1pdCA9IDE7CiAgCSAgICB9CiAgCSAgICB3YXRjaF9tb2RpZnlfd2F0Y2hl
cnMgKGZpbGVuYW1lLCAmYXJncyk7CiAgCSAgICBicmVhazsKICAJY2FzZSAnVSc6CiAgCWNhc2Ug
J0MnOgogIAkgICAgYXJncy5yZW1vdmVfdGVtcCA9IDE7CiAgCSAgICB3YXRjaF9tb2RpZnlfd2F0
Y2hlcnMgKGZpbGVuYW1lLCAmYXJncyk7CiAgCSAgICBicmVhazsKICAgICAgfQogICAgICB9Cisg
fQogIAogICNpZmRlZiBDTElFTlRfU1VQUE9SVAogIC8qIENoZWNrIGFuZCBzZW5kIG5vdGlmaWNh
dGlvbnMuICBUaGlzIGlzIG9ubHkgZm9yIHRoZSBjbGllbnQuICAqLwogIHZvaWQKICBub3RpZnlf
Y2hlY2sgKHJlcG9zaXRvcnksIHVwZGF0ZV9kaXIpCiAgICAgIGNoYXIgKnJlcG9zaXRvcnk7CiAg
ICAgIGNoYXIgKnVwZGF0ZV9kaXI7CiAgewogICAgICBGSUxFICpmcDsKICAgICAgY2hhciAqbGlu
ZSA9IE5VTEw7CiAgICAgIHNpemVfdCBsaW5lX2xlbiA9IDA7CiAgCiAgICAgIGlmICghIHNlcnZl
cl9zdGFydGVkKQogIAkvKiBXZSBhcmUgaW4gdGhlIG1pZHN0IG9mIGEgY29tbWFuZCB3aGljaCBp
cyBub3QgdG8gdGFsayB0bwogIAkgICB0aGUgc2VydmVyIChlLmcuIHRoZSBmaXJzdCBwaGFzZSBv
ZiBhIGN2cyBlZGl0KS4gIEp1c3QgY2hpbGwKICAJICAgb3V0LCB3ZSdsbCBjYXRjaCB0aGUgbm90
aWZpY2F0aW9ucyBvbiB0aGUgZmxpcCBzaWRlLiAgKi8KKioqKioqKioqKioqKioqCioqKiAxMDIy
LDEwOTggKioqKgogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlZGl0b3JzX3VzYWdlW10gPQog
IHsKICAgICAgIlVzYWdlOiAlcyAlcyBbLWxSXSBbZmlsZXMuLi5dXG4iLAogICAgICAiXHQtbFx0
UHJvY2VzcyB0aGlzIGRpcmVjdG9yeSBvbmx5IChub3QgcmVjdXJzaXZlKS5cbiIsCiAgICAgICJc
dC1SXHRQcm9jZXNzIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5LlxuIiwKICAgICAgIihTcGVjaWZ5
IHRoZSAtLWhlbHAgZ2xvYmFsIG9wdGlvbiBmb3IgYSBsaXN0IG9mIG90aGVyIGhlbHAgb3B0aW9u
cylcbiIsCiAgICAgIE5VTEwKICB9OwogIAogIHN0YXRpYyBpbnQgZWRpdG9yc19maWxlcHJvYyBQ
Uk9UTyAoKHZvaWQgKmNhbGxlcmRhdCwgc3RydWN0IGZpbGVfaW5mbyAqZmluZm8pKTsKICAKICBz
dGF0aWMgaW50CiAgZWRpdG9yc19maWxlcHJvYyAoY2FsbGVyZGF0LCBmaW5mbykKICAgICAgdm9p
ZCAqY2FsbGVyZGF0OwogICAgICBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbzsKICB7CiEgICAgIGNo
YXIgKnRoZW07CiEgICAgIGNoYXIgKnA7CiEgCiEgICAgIHRoZW0gPSBmaWxlYXR0cl9nZXQwIChm
aW5mby0+ZmlsZSwgIl9lZGl0b3JzIik7CiEgICAgIGlmICh0aGVtID09IE5VTEwpCiEgCXJldHVy
biAwOwohIAohICAgICBjdnNfb3V0cHV0IChmaW5mby0+ZnVsbG5hbWUsIDApOwohIAohICAgICBw
ID0gdGhlbTsKISAgICAgd2hpbGUgKDEpCiEgICAgIHsKISAJY3ZzX291dHB1dCAoIlx0IiwgMSk7
CiEgCXdoaWxlICgqcCAhPSAnPicgJiYgKnAgIT0gJ1wwJykKISAJICAgIGN2c19vdXRwdXQgKHAr
KywgMSk7CiEgCWlmICgqcCA9PSAnXDAnKQohIAl7CiEgCSAgICAvKiBPbmx5IGhhcHBlbnMgaWYg
YXR0cmlidXRlIGlzIG1pc2Zvcm1lZC4gICovCiEgCSAgICBjdnNfb3V0cHV0ICgiXG4iLCAxKTsK
ISAJICAgIGJyZWFrOwohIAl9CiEgCSsrcDsKISAJY3ZzX291dHB1dCAoIlx0IiwgMSk7CiEgCXdo
aWxlICgxKQohIAl7CiEgCSAgICB3aGlsZSAoKnAgIT0gJysnICYmICpwICE9ICcsJyAmJiAqcCAh
PSAnXDAnKQohIAkJY3ZzX291dHB1dCAocCsrLCAxKTsKISAJICAgIGlmICgqcCA9PSAnXDAnKQoh
IAkgICAgewohIAkJY3ZzX291dHB1dCAoIlxuIiwgMSk7CiEgCQlnb3RvIG91dDsKISAJICAgIH0K
ISAJICAgIGlmICgqcCA9PSAnLCcpCiEgCSAgICB7CiEgCQkrK3A7CiEgCQlicmVhazsKISAJICAg
IH0KISAJICAgICsrcDsKISAJICAgIGN2c19vdXRwdXQgKCJcdCIsIDEpOwohIAl9CiEgCWN2c19v
dXRwdXQgKCJcbiIsIDEpOwohICAgICB9CiEgICBvdXQ6OwohICAgICBmcmVlICh0aGVtKTsKISAg
ICAgcmV0dXJuIDA7CiAgfQogIAogIGludAogIGVkaXRvcnMgKGFyZ2MsIGFyZ3YpCiAgICAgIGlu
dCBhcmdjOwogICAgICBjaGFyICoqYXJndjsKICB7CiAgICAgIGludCBsb2NhbCA9IDA7CiAgICAg
IGludCBjOwogIAogICAgICBpZiAoYXJnYyA9PSAtMSkKICAJdXNhZ2UgKGVkaXRvcnNfdXNhZ2Up
OwogIAogICAgICBvcHRpbmQgPSAwOwogICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFy
Z3YsICIrbFIiKSkgIT0gLTEpCiAgICAgIHsKLS0tIDE0MjAsMTQ1MiAtLS0tCiAgc3RhdGljIGNv
bnN0IGNoYXIgKmNvbnN0IGVkaXRvcnNfdXNhZ2VbXSA9CiAgewogICAgICAiVXNhZ2U6ICVzICVz
IFstbFJdIFtmaWxlcy4uLl1cbiIsCiAgICAgICJcdC1sXHRQcm9jZXNzIHRoaXMgZGlyZWN0b3J5
IG9ubHkgKG5vdCByZWN1cnNpdmUpLlxuIiwKICAgICAgIlx0LVJcdFByb2Nlc3MgZGlyZWN0b3Jp
ZXMgcmVjdXJzaXZlbHkuXG4iLAogICAgICAiKFNwZWNpZnkgdGhlIC0taGVscCBnbG9iYWwgb3B0
aW9uIGZvciBhIGxpc3Qgb2Ygb3RoZXIgaGVscCBvcHRpb25zKVxuIiwKICAgICAgTlVMTAogIH07
CiAgCiAgc3RhdGljIGludCBlZGl0b3JzX2ZpbGVwcm9jIFBST1RPICgodm9pZCAqY2FsbGVyZGF0
LCBzdHJ1Y3QgZmlsZV9pbmZvICpmaW5mbykpOwogIAogIHN0YXRpYyBpbnQKICBlZGl0b3JzX2Zp
bGVwcm9jIChjYWxsZXJkYXQsIGZpbmZvKQogICAgICB2b2lkICpjYWxsZXJkYXQ7CiAgICAgIHN0
cnVjdCBmaWxlX2luZm8gKmZpbmZvOwogIHsKISAgICAgcmV0dXJuIGVkaXRvcnNfb3V0cHV0IChm
aW5mbyk7CiAgfQogIAogIGludAogIGVkaXRvcnMgKGFyZ2MsIGFyZ3YpCiAgICAgIGludCBhcmdj
OwogICAgICBjaGFyICoqYXJndjsKICB7CiAgICAgIGludCBsb2NhbCA9IDA7CiAgICAgIGludCBj
OwogIAogICAgICBpZiAoYXJnYyA9PSAtMSkKICAJdXNhZ2UgKGVkaXRvcnNfdXNhZ2UpOwogIAog
ICAgICBvcHRpbmQgPSAwOwogICAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICIr
bFIiKSkgIT0gLTEpCiAgICAgIHsKSW5kZXg6IHNyYy9lZGl0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3JjL2VkaXQuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuNi4xCmRpZmYgLUMxNiAtdyAt
cjEuMS4xLjEgLXIxLjEuMS4xLjYuMQoqKiogc3JjL2VkaXQuaAkyMDAxLzAzLzA2IDE2OjIxOjIx
CTEuMS4xLjEKLS0tIHNyYy9lZGl0LmgJMjAwMS8wMy8wNyAyMzozNTowMgkxLjEuMS4xLjYuMQoq
KioqKioqKioqKioqKioKKioqIDEzLDM4ICoqKioKLS0tIDEzLDM5IC0tLS0KICBleHRlcm4gaW50
IHdhdGNoX29uIFBST1RPICgoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSk7CiAgZXh0ZXJuIGludCB3
YXRjaF9vZmYgUFJPVE8gKChpbnQgYXJnYywgY2hhciAqKmFyZ3YpKTsKICAKICAjaWZkZWYgQ0xJ
RU5UX1NVUFBPUlQKICAvKiBDaGVjayB0byBzZWUgaWYgYW55IG5vdGlmaWNhdGlvbnMgYXJlIHNp
dHRpbmcgYXJvdW5kIGluIG5lZWQgb2YgYmVpbmcKICAgICBzZW50LiAgVGhlc2UgYXJlIHRoZSBu
b3RpZmljYXRpb25zIHN0b3JlZCBpbiBDVlNBRE1fTk9USUZZIChlZGl0LHVuZWRpdCk7CiAgICAg
Y29tbWl0IGNhbGxzIG5vdGlmeV9kbyBkaXJlY3RseS4gICovCiAgZXh0ZXJuIHZvaWQgbm90aWZ5
X2NoZWNrIFBST1RPICgoY2hhciAqcmVwb3NpdG9yeSwgY2hhciAqdXBkYXRlX2RpcikpOwogICNl
bmRpZiAvKiBDTElFTlRfU1VQUE9SVCAqLwogIAogIC8qIElzc3VlIGEgbm90aWZpY2F0aW9uIGZv
ciBmaWxlIEZJTEVOQU1FLiAgVFlQRSBpcyAnRScgZm9yIGVkaXQsICdVJwogICAgIGZvciB1bmVk
aXQsIGFuZCAnQycgZm9yIGNvbW1pdC4gIFdITyBpcyB0aGUgdXNlciBjdXJyZW50bHkgcnVubmlu
Zy4KICAgICBGb3IgVFlQRSAnRScsIFZBTCBpcyB0aGUgdGltZStob3N0K2RpcmVjdG9yeSBkYXRh
IHdoaWNoIGdvZXMgaW4KICAgICBfZWRpdG9ycywgYW5kIFdBVENIRVMgaXMgemVybyBvciBtb3Jl
IG9mIEUsVSxDLCBpbiB0aGF0IG9yZGVyLCB0byBzcGVjaWZ5CiAgICAgd2hhdCBraW5kcyBvZiB0
ZW1wb3Jhcnkgd2F0Y2hlcyB0byBzZXQuICAqLwogIGV4dGVybiB2b2lkIG5vdGlmeV9kbyBQUk9U
TyAoKGludCB0eXBlLCBjaGFyICpmaWxlbmFtZSwgY2hhciAqd2hvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKmVkaXRvciwKICAJCQkgICAgICBjaGFyICp2YWwsIGNoYXIg
KndhdGNoZXMsIGNoYXIgKnJlcG9zaXRvcnkpKTsKICAKICAvKiBTZXQgYXR0cmlidXRlcyB0byBy
ZWZsZWN0IHRoZSBmYWN0IHRoYXQgRURJVE9SIGlzIGVkaXRpbmcgRklMRU5BTUUuCiAgICAgVkFM
IGlzIHRpbWUraG9zdCtkaXJlY3RvcnksIG9yIE5VTEwgaWYgd2UgYXJlIHRvIHNheSB0aGF0IEVE
SVRPUiBpcwogICAgICpub3QqIGVkaXRpbmcgRklMRU5BTUUuICAqLwogIGV4dGVybiB2b2lkIGVk
aXRvcl9zZXQgUFJPVE8gKChjaGFyICpmaWxlbmFtZSwgY2hhciAqZWRpdG9yLCBjaGFyICp2YWwp
KTsKICAKICAvKiBUYWtlIG5vdGUgb2YgdGhlIGZhY3QgdGhhdCBGSUxFIGlzIHVwIHRvIGRhdGUg
KHRoaXMgbXVuZ2VzIENWUy9CYXNlOwogICAgIHByb2Nlc3Npbmcgb2YgQ1ZTL0VudHJpZXMgaXMg
ZG9uZSBzZXBhcmF0ZWx5KS4gICovCiAgZXh0ZXJuIHZvaWQgbWFya191cF90b19kYXRlIFBST1RP
ICgoY2hhciAqZmlsZSkpOwpJbmRleDogc3JjL2ltcG9ydC5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9pbXBvcnQuYyx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuNi4xCmRpZmYgLUMxNiAtdyAt
cjEuMS4xLjEgLXIxLjEuMS4xLjYuMQoqKiogc3JjL2ltcG9ydC5jCTIwMDEvMDMvMDYgMTY6MjE6
MjEJMS4xLjEuMQotLS0gc3JjL2ltcG9ydC5jCTIwMDEvMDMvMDggMTQ6MjY6MDYJMS4xLjEuMS42
LjEKKioqKioqKioqKioqKioqCioqKiAzNjEsMzkyICoqKioKLS0tIDM2MSwzOTYgLS0tLQogICAg
ICB7CiAgCWlmICghcmVhbGx5X3F1aWV0KQogIAkgICAgY3ZzX291dHB1dCAoIlxuTm8gY29uZmxp
Y3RzIGNyZWF0ZWQgYnkgdGhpcyBpbXBvcnRcblxuIiwgMCk7CiAgCSh2b2lkKSBmcHJpbnRmIChs
b2dmcCwgIlxuTm8gY29uZmxpY3RzIGNyZWF0ZWQgYnkgdGhpcyBpbXBvcnRcblxuIik7CiAgICAg
IH0KICAKICAgICAgLyoKICAgICAgICogV3JpdGUgb3V0IHRoZSBsb2dmaWxlIGFuZCBjbGVhbiB1
cC4KICAgICAgICovCiAgICAgIHVsaXN0ID0gZ2V0bGlzdCAoKTsKICAgICAgcCA9IGdldG5vZGUg
KCk7CiAgICAgIHAtPnR5cGUgPSBVUERBVEU7CiAgICAgIHAtPmRlbHByb2MgPSB1cGRhdGVfZGVs
cHJvYzsKICAgICAgcC0+a2V5ID0geHN0cmR1cCAoIi0gSW1wb3J0ZWQgc291cmNlcyIpOwogICAg
ICBsaSA9IChzdHJ1Y3QgbG9nZmlsZV9pbmZvICopIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxv
Z2ZpbGVfaW5mbykpOwogICAgICBsaS0+dHlwZSA9IFRfVElUTEU7CisgICAgIGxpLT5yZXBvc2l0
b3J5ID0gTlVMTDsKKyAgICAgbGktPmhvc3RuYW1lID0gTlVMTDsKKyAgICAgbGktPndkID0gTlVM
TDsKKyAgICAgbGktPmVkaXRvciA9IE5VTEw7CiAgICAgIGxpLT50YWcgPSB4c3RyZHVwICh2YnJh
bmNoKTsKICAgICAgbGktPnJldl9vbGQgPSBsaS0+cmV2X25ldyA9IE5VTEw7CiAgICAgIHAtPmRh
dGEgPSAoY2hhciAqKSBsaTsKICAgICAgKHZvaWQpIGFkZG5vZGUgKHVsaXN0LCBwKTsKICAgICAg
VXBkYXRlX0xvZ2ZpbGUgKHJlcG9zaXRvcnksIG1lc3NhZ2UsIGxvZ2ZwLCB1bGlzdCk7CiAgICAg
IGRlbGxpc3QgKCZ1bGlzdCk7CiAgICAgIGlmIChmY2xvc2UgKGxvZ2ZwKSA8IDApCiAgCWVycm9y
ICgwLCBlcnJubywgImVycm9yIGNsb3NpbmcgJXMiLCB0bXBmaWxlKTsKICAKICAgICAgLyogTWFr
ZSBzdXJlIHRoZSB0ZW1wb3JhcnkgZmlsZSBnb2VzIGF3YXksIGV2ZW4gb24gc3lzdGVtcyB0aGF0
IGRvbid0IGxldAogICAgICAgICB5b3UgZGVsZXRlIGEgZmlsZSB0aGF0J3MgaW4gdXNlLiAgKi8K
ICAgICAgaWYgKENWU19VTkxJTksgKHRtcGZpbGUpIDwgMCAmJiAhZXhpc3RlbmNlX2Vycm9yIChl
cnJubykpCiAgCWVycm9yICgwLCBlcnJubywgImNhbm5vdCByZW1vdmUgJXMiLCB0bXBmaWxlKTsK
ICAgICAgZnJlZSAodG1wZmlsZSk7CiAgCiAgICAgIGlmIChtZXNzYWdlKQpJbmRleDogc3JjL3Jj
cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9yY3Mu
Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4x
LjEuNi4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjYuMQoqKiogc3JjL3Jjcy5j
CTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL3Jjcy5jCTIwMDEvMDMvMDcgMjM6
MzU6MDIJMS4xLjEuMS42LjEKKioqKioqKioqKioqKioqCioqKiA1Nzc5LDU4MTIgKioqKgogICAg
ICAodm9pZCkgYWRkbm9kZV9hdF9mcm9udCAobG9ja3MsIHApOwogIAogICAgICBpZiAoIWxvY2tf
cXVpZXQpCiAgICAgIHsKICAJY3ZzX291dHB1dCAoeHJldiwgMCk7CiAgCWN2c19vdXRwdXQgKCIg
bG9ja2VkXG4iLCAwKTsKICAgICAgfQogIAogICAgICByZXR1cm4gMDsKICB9CiAgCiAgLyogVW5s
b2NrIHJldmlzaW9uIFJFVi4gIFVOTE9DS19RVUlFVCBpcyAxIHRvIHN1cHByZXNzIG91dHB1dC4g
IEZJWE1FOgogICAgIExpa2UgUkNTX2xvY2ssIHRoaXMgY2FuIGJlY29tZSBhIG5vLW9wIGlmIHdl
IGRvIHRoZSBjaGVja2luCiAgICAgb3Vyc2VsdmVzLgogIAogICAgIElmIFJFViBpcyBub3QgbnVs
bCBhbmQgaXMgbG9ja2VkIGJ5IHNvbWVvbmUgZWxzZSwgYnJlYWsgdGhlaXIKISAgICBsb2NrIGFu
ZCBub3RpZnkgdGhlbS4gIEl0IGlzIGFuIG9wZW4gaXNzdWUgd2hldGhlciBSQ1NfdW5sb2NrCiEg
ICAgcXVlcmllcyB0aGUgdXNlciBhYm91dCB3aGV0aGVyIG9yIG5vdCB0byBicmVhayB0aGUgbG9j
ay4gKi8KICAKICBpbnQKICBSQ1NfdW5sb2NrIChyY3MsIHJldiwgdW5sb2NrX3F1aWV0KQogICAg
ICAgUkNTTm9kZSAqcmNzOwogICAgICAgY29uc3QgY2hhciAqcmV2OwogICAgICAgaW50IHVubG9j
a19xdWlldDsKICB7CiAgICAgIE5vZGUgKmxvY2s7CiAgICAgIExpc3QgKmxvY2tzOwogICAgICBj
aGFyICp1c2VyOwogICAgICBjaGFyICp4cmV2ID0gTlVMTDsKICAKICAgICAgdXNlciA9IGdldGNh
bGxlcigpOwogICAgICBpZiAocmNzLT5mbGFncyAmIFBBUlRJQUwpCiAgCVJDU19yZXBhcnNlcmNz
ZmlsZSAocmNzLCAoRklMRSAqKikgTlVMTCwgKHN0cnVjdCByY3NidWZmZXIgKikgTlVMTCk7CiAg
Ci0tLSA1Nzc5LDU4MTIgLS0tLQogICAgICAodm9pZCkgYWRkbm9kZV9hdF9mcm9udCAobG9ja3Ms
IHApOwogIAogICAgICBpZiAoIWxvY2tfcXVpZXQpCiAgICAgIHsKICAJY3ZzX291dHB1dCAoeHJl
diwgMCk7CiAgCWN2c19vdXRwdXQgKCIgbG9ja2VkXG4iLCAwKTsKICAgICAgfQogIAogICAgICBy
ZXR1cm4gMDsKICB9CiAgCiAgLyogVW5sb2NrIHJldmlzaW9uIFJFVi4gIFVOTE9DS19RVUlFVCBp
cyAxIHRvIHN1cHByZXNzIG91dHB1dC4gIEZJWE1FOgogICAgIExpa2UgUkNTX2xvY2ssIHRoaXMg
Y2FuIGJlY29tZSBhIG5vLW9wIGlmIHdlIGRvIHRoZSBjaGVja2luCiAgICAgb3Vyc2VsdmVzLgog
IAogICAgIElmIFJFViBpcyBub3QgbnVsbCBhbmQgaXMgbG9ja2VkIGJ5IHNvbWVvbmUgZWxzZSwg
YnJlYWsgdGhlaXIKISAgICBsb2NrLiAgSXQgaXMgYW4gb3BlbiBpc3N1ZSB3aGV0aGVyIFJDU191
bmxvY2sgcXVlcmllcyB0aGUgdXNlcgohICAgIGFib3V0IHdoZXRoZXIgb3Igbm90IHRvIGJyZWFr
IHRoZSBsb2NrLiAqLwogIAogIGludAogIFJDU191bmxvY2sgKHJjcywgcmV2LCB1bmxvY2tfcXVp
ZXQpCiAgICAgICBSQ1NOb2RlICpyY3M7CiAgICAgICBjb25zdCBjaGFyICpyZXY7CiAgICAgICBp
bnQgdW5sb2NrX3F1aWV0OwogIHsKICAgICAgTm9kZSAqbG9jazsKICAgICAgTGlzdCAqbG9ja3M7
CiAgICAgIGNoYXIgKnVzZXI7CiAgICAgIGNoYXIgKnhyZXYgPSBOVUxMOwogIAogICAgICB1c2Vy
ID0gZ2V0Y2FsbGVyKCk7CiAgICAgIGlmIChyY3MtPmZsYWdzICYgUEFSVElBTCkKICAJUkNTX3Jl
cGFyc2VyY3NmaWxlIChyY3MsIChGSUxFICoqKSBOVUxMLCAoc3RydWN0IHJjc2J1ZmZlciAqKSBO
VUxMKTsKICAKKioqKioqKioqKioqKioqCioqKiA1ODU4LDU5MDMgKioqKgogIAkgICAgZXJyb3Ig
KDAsIDAsICIlczogYnJhbmNoICVzIGFic2VudCIsIHJjcy0+cGF0aCwgcmV2KTsKICAJICAgIHJl
dHVybiAxOwogIAl9CiAgICAgIH0KICAgICAgZWxzZQogIAkvKiBSRVYgaXMgYW4gZXhhY3QgcmV2
aXNpb24gbnVtYmVyLiAqLwogIAl4cmV2ID0geHN0cmR1cCAocmV2KTsKICAKICAgICAgbG9jayA9
IGZpbmRub2RlIChSQ1NfZ2V0bG9ja3MgKHJjcyksIHhyZXYpOwogICAgICBpZiAobG9jayA9PSBO
VUxMKQogICAgICB7CiAgCS8qIFRoaXMgcmV2aXNpb24gaXNuJ3QgbG9ja2VkLiAqLwogIAlmcmVl
ICh4cmV2KTsKICAJcmV0dXJuIDA7CiAgICAgIH0KICAKLSAgICAgaWYgKCEgU1RSRVEgKGxvY2st
PmRhdGEsIHVzZXIpKQotICAgICB7Ci0gICAgICAgICAvKiBJZiB0aGUgcmV2aXNpb24gaXMgbG9j
a2VkIGJ5IHNvbWVvbmUgZWxzZSwgbm90aWZ5Ci0gCSAgIHRoZW0uICBOb3RlIHRoYXQgdGhpcyBz
aG91bGRuJ3QgZXZlciBoYXBwZW4gaWYgUkNTX3VubG9jawotIAkgICBpcyBjYWxsZWQgd2l0aCBh
IE5VTEwgcmV2aXNpb24sIHNpbmNlIHRoYXQgbWVhbnMgIndoYXRldmVyCi0gCSAgIHJldmlzaW9u
IGlzIGN1cnJlbnRseSBsb2NrZWQgYnkgdGhlIGNhbGxlci4iICovCi0gCWNoYXIgKnJlcG9zLCAq
d29ya2ZpbGU7Ci0gCXJlcG9zID0geHN0cmR1cCAocmNzLT5wYXRoKTsKLSAJd29ya2ZpbGUgPSBz
dHJyY2hyIChyZXBvcywgJy8nKTsKLSAJKndvcmtmaWxlKysgPSAnXDAnOwotIAlub3RpZnlfZG8g
KCdDJywgd29ya2ZpbGUsIHVzZXIsIE5VTEwsIE5VTEwsIHJlcG9zKTsKLSAJZnJlZSAocmVwb3Mp
OwotICAgICB9Ci0gCiAgICAgIGRlbG5vZGUgKGxvY2spOwogICAgICBpZiAoIXVubG9ja19xdWll
dCkKICAgICAgewogIAljdnNfb3V0cHV0ICh4cmV2LCAwKTsKICAJY3ZzX291dHB1dCAoIiB1bmxv
Y2tlZFxuIiwgMCk7CiAgICAgIH0KICAKICAgICAgZnJlZSAoeHJldik7CiAgICAgIHJldHVybiAw
OwogIH0KICAKICAvKiBBZGQgVVNFUiB0byB0aGUgYWNjZXNzIGxpc3Qgb2YgUkNTLiAgRG8gbm90
aGluZyBpZiBhbHJlYWR5IHByZXNlbnQuCiAgICAgRklYTUUtdHdwOiBjaGVjayBzeW50YXggb2Yg
VVNFUiB0byBtYWtlIHN1cmUgaXQncyBhIHZhbGlkIGlkLiAqLwogIAogIHZvaWQKICBSQ1NfYWRk
YWNjZXNzIChyY3MsIHVzZXIpCi0tLSA1ODU4LDU4ODkgLS0tLQpJbmRleDogc3JjL3NlcnZlci5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9zZXJ2ZXIu
Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4x
LjEuNi4yCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjYuMgoqKiogc3JjL3NlcnZl
ci5jCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL3NlcnZlci5jCTIwMDEvMDMv
MDggMTQ6MjY6MDcJMS4xLjEuMS42LjIKKioqKioqKioqKioqKioqCioqKiAxOTAwLDE5NDUgKioq
KgotLS0gMTkwMCwyMDcwIC0tLS0KICAJfQogIAlmcmVlIChwLT5lbnRyeSk7CiAgCXEgPSBwLT5u
ZXh0OwogIAlmcmVlIChwKTsKICAJcCA9IHE7CiAgICAgIH0KICAgICAgZW50cmllcyA9IE5VTEw7
CiAgICAgIGlmIChmICE9IE5VTEwgJiYgZmNsb3NlIChmKSA9PSBFT0YgJiYgIWVycm9yX3BlbmRp
bmcgKCkpCiAgICAgIHsKICAJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKICAJaWYgKGFsbG9jX3Bl
bmRpbmcgKDgwICsgc3RybGVuIChDVlNBRE1fRU5UKSkpCiAgCSAgICBzcHJpbnRmIChwZW5kaW5n
X2Vycm9yX3RleHQsICJFIGNhbm5vdCBjbG9zZSAlcyIsIENWU0FETV9FTlQpOwogIAlwZW5kaW5n
X2Vycm9yID0gc2F2ZV9lcnJubzsKICAgICAgfQogIH0KICAMCisgTGlzdCAqZmlsZWluZm9fbGlz
dCA9IE5VTEw7CisgCisgc3RhdGljIHZvaWQgc2VydmVfZmlsZWluZm8gUFJPVE8gKChjaGFyICop
KTsKKyAKKyBzdGF0aWMgdm9pZAorIHNlcnZlX2ZpbGVpbmZvIChhcmcpCisgICAgICBjaGFyICph
cmc7CisgeworICAgICBjaGFyICpkYXRhID0gTlVMTDsKKyAgICAgaW50IHN0YXR1czsKKyAKKyAg
ICAgc3RhdHVzID0gYnVmX3JlYWRfbGluZSAoYnVmX2Zyb21fbmV0LCAmZGF0YSwgKGludCAqKSBO
VUxMKTsKKyAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICB7CisgCWlmIChzdGF0dXMgPT0gLTIp
CisgICAgICAgICB7CisgCSAgICBwZW5kaW5nX2Vycm9yID0gRU5PTUVNOworICAgICAgICAgfQor
IAllbHNlCisgCXsKKyAJICAgIHBlbmRpbmdfZXJyb3JfdGV4dCA9IG1hbGxvYyAoODAgKyBzdHJs
ZW4gKGFyZykpOworIAkgICAgaWYgKHBlbmRpbmdfZXJyb3JfdGV4dCA9PSBOVUxMKQorICAgICAg
ICAgICAgIHsKKyAJCXBlbmRpbmdfZXJyb3IgPSBFTk9NRU07CisgICAgICAgICAgICAgfQorIAkg
ICAgZWxzZQorIAkgICAgeworIAkJaWYgKHN0YXR1cyA9PSAtMSkKKyAgICAgICAgICAgICAgICAg
eworIAkJICAgIHNwcmludGYgKAorICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfZXJy
b3JfdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRSBlbmQgb2YgZmlsZSByZWFkaW5n
IG5vdGlmaWNhdGlvbiBmb3IgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyk7Cisg
ICAgICAgICAgICAgICAgIH0KKyAJCWVsc2UKKyAJCXsKKyAJCSAgICBzcHJpbnRmICgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX2Vycm9yX3RleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIkUgZXJyb3IgcmVhZGluZyBub3RpZmljYXRpb24gZm9yICVzIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmcpOworIAkJICAgIHBlbmRpbmdfZXJyb3IgPSBzdGF0dXM7Cisg
CQl9CisgCSAgICB9CisgCX0KKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgIGNo
YXIgKmNwID0gTlVMTDsKKyAgICAgICAgIGNoYXIgKmNwMCA9IE5VTEw7CisgICAgICAgICBzdHJ1
Y3QgbG9nZmlsZV9pbmZvICpsaTsKKyAgICAgICAgIE5vZGUgKnAgPSBOVUxMOworIAorICAgICAg
ICAgaWYgKGZpbGVpbmZvX2xpc3QgPT0gTlVMTCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBm
aWxlaW5mb19saXN0ID0gZ2V0bGlzdCAoKTsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIHAgPSBn
ZXRub2RlICgpOworICAgICAgICAgcC0+a2V5ID0geHN0cmR1cCAoYXJnKTsKKyAgICAgICAgIHAt
PnR5cGUgPSBVUERBVEU7CisgICAgICAgICBwLT5kZWxwcm9jID0gdXBkYXRlX2RlbHByb2M7Cisg
CisgICAgICAgICBsaSA9IChzdHJ1Y3QgbG9nZmlsZV9pbmZvICopIHhtYWxsb2MgKHNpemVvZiAo
c3RydWN0IGxvZ2ZpbGVfaW5mbykpOworICAgICAgICAgbGktPnR5cGUgPSBUX1VOS05PV047Cisg
ICAgICAgICBsaS0+cmVwb3NpdG9yeSA9IE5VTEw7CisgCisgICAgICAgICBjcCA9IGRhdGE7Cisg
CisgICAgICAgICBjcDAgPSBjcDsKKyAgICAgICAgIGNwID0gc3RyY2hyIChjcDAsICdcdCcpOwor
ICAgICAgICAgaWYgKGNwID09IE5VTEwpCisgICAgICAgICB7CisgICAgICAgICAgICAgZ290byBl
cnJvcjsKKyAgICAgICAgIH0KKyAgICAgICAgICpjcCsrID0gJ1wwJzsKKyAKKyAgICAgICAgIGxp
LT5ob3N0bmFtZSA9IHhzdHJkdXAgKGNwMCk7CisgCisgICAgICAgICBjcDAgPSBjcDsKKyAgICAg
ICAgIGNwID0gc3RyY2hyIChjcDAsICdcdCcpOworICAgICAgICAgaWYgKGNwICE9IE5VTEwpCisg
ICAgICAgICB7CisgICAgICAgICAgICAgKmNwID0gJ1wwJzsKKyAgICAgICAgIH0KKyAKKyAgICAg
ICAgIGxpLT53ZCA9IHhzdHJkdXAgKGNwMCk7CisgICAgICAgICBsaS0+ZWRpdG9yID0gTlVMTDsK
KyAKKyAgICAgICAgIGxpLT50YWcgPSBOVUxMOworICAgICAgICAgbGktPnJldl9vbGQgPSBOVUxM
OworICAgICAgICAgbGktPnJldl9uZXcgPSBOVUxMOworIAorICAgICAgICAgcC0+ZGF0YSA9IChj
aGFyICopIGxpOworICAgICAgICAgKHZvaWQpIGFkZG5vZGUgKGZpbGVpbmZvX2xpc3QsIHApOwor
ICAgICB9CisgCisgZXJyb3I6CisgICAgIHJldHVybjsKKyB9CisgCisgc3RydWN0IGxvZ2ZpbGVf
aW5mbyAqCisgc2VydmVyX2dldGZpbGVpbmZvIChmaWxlbmFtZSkKKyAgICAgY2hhciAqZmlsZW5h
bWU7CisgeworICAgICBOb2RlICpwID0gTlVMTDsKKyAKKyAgICAgcCA9IGZpbmRub2RlIChmaWxl
aW5mb19saXN0LCBmaWxlbmFtZSk7CisgICAgIGlmIChwICE9IE5VTEwpCisgICAgIHsKKyAgICAg
ICAgIHJldHVybiAoc3RydWN0IGxvZ2ZpbGVfaW5mbyAqKSBwLT5kYXRhOworICAgICB9CisgICAg
IGVsc2UKKyAgICAgeworICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKyB9CisgCisgdm9p
ZAorIHNlcnZlcl9kZWxmaWxlaW5mb2xpc3QgKHZvaWQpCisgeworICAgICBpZiAoZmlsZWluZm9f
bGlzdCAhPSBOVUxMKQorICAgICAgICAgZGVsbGlzdCAoJmZpbGVpbmZvX2xpc3QpOworIH0KKyAM
CiAgc3RydWN0IG5vdGlmeV9ub3RlIHsKICAgICAgLyogRGlyZWN0b3J5IGluIHdoaWNoIHRoaXMg
bm90aWZpY2F0aW9uIGhhcHBlbnMuICBtYWxsb2MnZCovCiAgICAgIGNoYXIgKmRpcjsKICAKICAg
ICAgLyogbWFsbG9jJ2QuICAqLwogICAgICBjaGFyICpmaWxlbmFtZTsKICAKICAgICAgLyogVGhl
IGZvbGxvd2luZyB0aHJlZSBhbGwgaW4gb25lIG1hbGxvYydkIGJsb2NrLCBwb2ludGVkIHRvIGJ5
IFRZUEUuCiAgICAgICAgIEVhY2ggJ1wwJyB0ZXJtaW5hdGVkLiAgKi8KICAgICAgLyogIkUiIG9y
ICJVIi4gICovCiAgICAgIGNoYXIgKnR5cGU7CiAgICAgIC8qIHRpbWUraG9zdCtkaXIgKi8KICAg
ICAgY2hhciAqdmFsOwogICAgICBjaGFyICp3YXRjaGVzOworICAgICBjaGFyICplZGl0b3I7CiAg
CiAgICAgIHN0cnVjdCBub3RpZnlfbm90ZSAqbmV4dDsKICB9OwogIAogIHN0YXRpYyBzdHJ1Y3Qg
bm90aWZ5X25vdGUgKm5vdGlmeV9saXN0OwogIC8qIFVzZWQgd2hpbGUgYnVpbGRpbmcgbGlzdCwg
dG8gcG9pbnQgdG8gdGhlIGxhc3Qgbm9kZSB0aGF0IGFscmVhZHkgZXhpc3RzLiAgKi8KICBzdGF0
aWMgc3RydWN0IG5vdGlmeV9ub3RlICpsYXN0X25vZGU7CiAgCiAgc3RhdGljIHZvaWQgc2VydmVf
bm90aWZ5IFBST1RPICgoY2hhciAqKSk7CiAgCiAgc3RhdGljIHZvaWQKICBzZXJ2ZV9ub3RpZnkg
KGFyZykKICAgICAgY2hhciAqYXJnOwogIHsKICAgICAgc3RydWN0IG5vdGlmeV9ub3RlICpuZXcg
PSBOVUxMOwogICAgICBjaGFyICpkYXRhID0gTlVMTDsKKioqKioqKioqKioqKioqCioqKiAyMDE1
LDIwNTAgKioqKgotLS0gMjE0MCwyMjA1IC0tLS0KICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsK
ICAJaWYgKGNwID09IE5VTEwpCiAgCSAgICBnb3RvIGVycm9yOwogIAkqY3ArKyA9ICcrJzsKICAJ
Y3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJaWYgKGNwID09IE5VTEwpCiAgCSAgICBnb3RvIGVy
cm9yOwogIAkqY3ArKyA9ICcrJzsKICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJaWYgKGNw
ID09IE5VTEwpCiAgCSAgICBnb3RvIGVycm9yOwogIAkqY3ArKyA9ICdcMCc7CiAgCW5ldy0+d2F0
Y2hlcyA9IGNwOwogIAkvKiBJZiB0aGVyZSBpcyBhbm90aGVyIHRhYiwgaWdub3JlIGV2ZXJ5dGhp
bmcgYWZ0ZXIgaXQsCiAgCSAgIGZvciBmdXR1cmUgZXhwYW5zaW9uLiAgKi8KICAJY3AgPSBzdHJj
aHIgKGNwLCAnXHQnKTsKKyAJaWYgKGNwID09IE5VTEwpCisgICAgICAgICB7CisgICAgICAgICAg
ICAgLyogRklYTUU6IE5vZWwgWWFwICh5YXBfbm9lbEB5YWhvby5jb20pIDIwMDEgTWFyIDE1Cisg
ICAgICAgICAgICAgICAgVGhpcyBibG9jayBpcyB0byBzdXBwb3J0IG9sZCBjbGllbnRzLiAgSXQg
c2hvdWxkIGJlCisgICAgICAgICAgICAgICAgcmVtb3ZlZCBvbmNlIGl0J3MgZGVlbWVkIHRoYXQg
YWxsIGNsaWVudHMgc2VuZCB0aGUKKyAgICAgICAgICAgICAgICBlZGl0b3IgZmllbGQuICBJTUhP
LCBpdCBzaG91bGQgYmUgc2FmZSB0byByZW1vdmUKKyAgICAgICAgICAgICAgICBieSAyMDAzIE1h
ciAxNSAoaWUgaW4gdHdvIHllYXJzKS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgIG5l
dy0+ZWRpdG9yID0gZ2V0Y2FsbGVyKCk7ICAvKiB0byBzdXBwb3J0IG9sZCBjbGllbnRzICovCisg
ICAgICAgICB9CisgICAgICAgICBlbHNlCisgCXsKKyAJICAgICpjcCsrID0gJ1wwJzsKKyAgICAg
ICAgICAgICBuZXctPmVkaXRvciA9IGNwOworIAorICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlz
IGFub3RoZXIgdGFiLCBpZ25vcmUgZXZlcnl0aGluZyBhZnRlciBpdCwKKyAgICAgICAgICAgICAg
ICBmb3IgZnV0dXJlIGV4cGFuc2lvbi4gICovCisgICAgICAgICAgICAgY3AgPSBzdHJjaHIgKGNw
LCAnXHQnKTsKKyAgICAgICAgICAgICBpZiAoY3AgIT0gTlVMTCkKKyAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICpjcCA9ICdcMCc7CisgICAgICAgICAgICAgfQorIAorICAgICAgICAg
ICAgIC8qIGxvYiBvZmYgZXh0cmEgdmFsIGZpZWxkcyAqLworICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgY2hhciAqY3AgPSBOVUxMOworIAorICAgICAgICAgICAgICAgICBjcCA9IHN0
cmNociAobmV3LT52YWwsICcrJyk7CiAgCWlmIChjcCAhPSBOVUxMKQogIAl7CiAgCSAgICAqY3Ag
PSAnXDAnOwogIAl9CisgICAgICAgICAgICAgfQorIAl9CiAgCiAgCW5ldy0+bmV4dCA9IE5VTEw7
CiAgCiAgCWlmIChsYXN0X25vZGUgPT0gTlVMTCkKICAJewogIAkgICAgbm90aWZ5X2xpc3QgPSBu
ZXc7CiAgCX0KICAJZWxzZQogIAkgICAgbGFzdF9ub2RlLT5uZXh0ID0gbmV3OwogIAlsYXN0X25v
ZGUgPSBuZXc7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgZXJyb3I6CiAgICAgIHBlbmRpbmdf
ZXJyb3IgPSAwOwogICAgICBpZiAoYWxsb2NfcGVuZGluZyAoODApKQogIAlzdHJjcHkgKHBlbmRp
bmdfZXJyb3JfdGV4dCwKKioqKioqKioqKioqKioqCioqKiAyMDcwLDIxMDEgKioqKgotLS0gMjIy
NSwyMjU3IC0tLS0KICAgICAgY2hhciAqcmVwb3M7CiAgCiAgICAgIHdoaWxlIChub3RpZnlfbGlz
dCAhPSBOVUxMKQogICAgICB7CiAgCWlmICggQ1ZTX0NIRElSIChub3RpZnlfbGlzdC0+ZGlyKSA8
IDApCiAgCXsKICAJICAgIGVycm9yICgwLCBlcnJubywgImNhbm5vdCBjaGFuZ2UgdG8gJXMiLCBu
b3RpZnlfbGlzdC0+ZGlyKTsKICAJICAgIHJldHVybiAtMTsKICAJfQogIAlyZXBvcyA9IE5hbWVf
UmVwb3NpdG9yeSAoTlVMTCwgTlVMTCk7CiAgCiAgCWxvY2tfZGlyX2Zvcl93cml0ZSAocmVwb3Mp
OwogIAogIAlmaWxlYXR0cl9zdGFydGRpciAocmVwb3MpOwogIAogIAlub3RpZnlfZG8gKCpub3Rp
ZnlfbGlzdC0+dHlwZSwgbm90aWZ5X2xpc3QtPmZpbGVuYW1lLCBnZXRjYWxsZXIoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbm90aWZ5X2xpc3QtPmVkaXRvciwKICAJCSAgIG5vdGlmeV9saXN0LT52
YWwsIG5vdGlmeV9saXN0LT53YXRjaGVzLCByZXBvcyk7CiAgCiAgCWJ1Zl9vdXRwdXQwIChidWZf
dG9fbmV0LCAiTm90aWZpZWQgIik7CiAgCXsKICAJICAgIGNoYXIgKmRpciA9IG5vdGlmeV9saXN0
LT5kaXIgKyBzdHJsZW4gKHNlcnZlcl90ZW1wX2RpcikgKyAxOwogIAkgICAgaWYgKGRpclswXSA9
PSAnXDAnKQogIAkgICAgICAgIGJ1Zl9hcHBlbmRfY2hhciAoYnVmX3RvX25ldCwgJy4nKTsKICAJ
ICAgIGVsc2UKICAJICAgICAgICBidWZfb3V0cHV0MCAoYnVmX3RvX25ldCwgZGlyKTsKICAJICAg
IGJ1Zl9hcHBlbmRfY2hhciAoYnVmX3RvX25ldCwgJy8nKTsKICAJICAgIGJ1Zl9hcHBlbmRfY2hh
ciAoYnVmX3RvX25ldCwgJ1xuJyk7CiAgCX0KICAJYnVmX291dHB1dDAgKGJ1Zl90b19uZXQsIHJl
cG9zKTsKICAJYnVmX2FwcGVuZF9jaGFyIChidWZfdG9fbmV0LCAnLycpOwogIAlidWZfb3V0cHV0
MCAoYnVmX3RvX25ldCwgbm90aWZ5X2xpc3QtPmZpbGVuYW1lKTsKICAJYnVmX2FwcGVuZF9jaGFy
IChidWZfdG9fbmV0LCAnXG4nKTsKKioqKioqKioqKioqKioqCioqKiA0NjUwLDQ2ODEgKioqKgot
LS0gNDgwNiw0ODM4IC0tLS0KICAgIFJFUV9MSU5FKCJTdGF0aWMtZGlyZWN0b3J5Iiwgc2VydmVf
c3RhdGljX2RpcmVjdG9yeSwgMCksCiAgICBSRVFfTElORSgiU3RpY2t5Iiwgc2VydmVfc3RpY2t5
LCAwKSwKICAgIFJFUV9MSU5FKCJDaGVja2luLXByb2ciLCBzZXJ2ZV9jaGVja2luX3Byb2csIDAp
LAogICAgUkVRX0xJTkUoIlVwZGF0ZS1wcm9nIiwgc2VydmVfdXBkYXRlX3Byb2csIDApLAogICAg
UkVRX0xJTkUoIkVudHJ5Iiwgc2VydmVfZW50cnksIFJRX0VTU0VOVElBTCksCiAgICBSRVFfTElO
RSgiS29wdCIsIHNlcnZlX2tvcHQsIDApLAogICAgUkVRX0xJTkUoIkNoZWNraW4tdGltZSIsIHNl
cnZlX2NoZWNraW5fdGltZSwgMCksCiAgICBSRVFfTElORSgiTW9kaWZpZWQiLCBzZXJ2ZV9tb2Rp
ZmllZCwgUlFfRVNTRU5USUFMKSwKICAgIFJFUV9MSU5FKCJJcy1tb2RpZmllZCIsIHNlcnZlX2lz
X21vZGlmaWVkLCAwKSwKICAKICAgIC8qIFRoZSBjbGllbnQgbXVzdCBzZW5kIHRoaXMgcmVxdWVz
dCB0byBpbnRlcm9wZXJhdGUgd2l0aCBDVlMgMS41CiAgICAgICB0aHJvdWdoIDEuOSBzZXJ2ZXJz
LiAgVGhlIHNlcnZlciBtdXN0IHN1cHBvcnQgaXQgKGFsdGhvdWdoIGl0IGNhbgogICAgICAgYmUg
YW5kIGlzIGEgbm9vcCkgdG8gaW50ZXJvcGVyYXRlIHdpdGggQ1ZTIDEuNSB0byAxLjkgY2xpZW50
cy4gICovCiAgICBSRVFfTElORSgiVXNlVW5jaGFuZ2VkIiwgc2VydmVfZW5hYmxlX3VuY2hhbmdl
ZCwgUlFfRU5BQkxFTUUgfCBSUV9ST09UTEVTUyksCiAgCiAgICBSRVFfTElORSgiVW5jaGFuZ2Vk
Iiwgc2VydmVfdW5jaGFuZ2VkLCBSUV9FU1NFTlRJQUwpLAorICAgUkVRX0xJTkUoIkZpbGVJbmZv
Iiwgc2VydmVfZmlsZWluZm8sIDApLAogICAgUkVRX0xJTkUoIk5vdGlmeSIsIHNlcnZlX25vdGlm
eSwgMCksCiAgICBSRVFfTElORSgiUXVlc3Rpb25hYmxlIiwgc2VydmVfcXVlc3Rpb25hYmxlLCAw
KSwKICAgIFJFUV9MSU5FKCJDYXNlIiwgc2VydmVfY2FzZSwgMCksCiAgICBSRVFfTElORSgiQXJn
dW1lbnQiLCBzZXJ2ZV9hcmd1bWVudCwgUlFfRVNTRU5USUFMKSwKICAgIFJFUV9MSU5FKCJBcmd1
bWVudHgiLCBzZXJ2ZV9hcmd1bWVudHgsIFJRX0VTU0VOVElBTCksCiAgICBSRVFfTElORSgiR2xv
YmFsX29wdGlvbiIsIHNlcnZlX2dsb2JhbF9vcHRpb24sIFJRX1JPT1RMRVNTKSwKICAgIFJFUV9M
SU5FKCJHemlwLXN0cmVhbSIsIHNlcnZlX2d6aXBfc3RyZWFtLCAwKSwKICAgIFJFUV9MSU5FKCJ3
cmFwcGVyLXNlbmRtZS1yY3NPcHRpb25zIiwKICAgICAgICAgICAgIHNlcnZlX3dyYXBwZXJfc2Vu
ZG1lX3Jjc19vcHRpb25zLAogICAgICAgICAgICAgMCksCiAgICBSRVFfTElORSgiU2V0Iiwgc2Vy
dmVfc2V0LCBSUV9ST09UTEVTUyksCiAgI2lmZGVmIEVOQ1JZUFRJT04KICAjICBpZmRlZiBIQVZF
X0tFUkJFUk9TCiAgICBSRVFfTElORSgiS2VyYmVyb3MtZW5jcnlwdCIsIHNlcnZlX2tlcmJlcm9z
X2VuY3J5cHQsIDApLAogICMgIGVuZGlmCiAgIyAgaWZkZWYgSEFWRV9HU1NBUEkKSW5kZXg6IHNy
Yy9zZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9z
cmMvc2VydmVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEuMS4xLjYuMQpkaWZmIC1DMTYgLXcgLXIxLjEuMS4xIC1yMS4xLjEuMS42LjEKKioq
IHNyYy9zZXJ2ZXIuaAkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIHNyYy9zZXJ2ZXIu
aAkyMDAxLzAzLzA3IDIzOjM1OjAzCTEuMS4xLjEuNi4xCioqKioqKioqKioqKioqKgoqKiogMTA2
LDEzNyAqKioqCi0tLSAxMDYsMTQwIC0tLS0KICAKICAvKiBTZXQgb3IgY2xlYXIgYSBwZXItZGly
ZWN0b3J5IHN0aWNreSB0YWcgb3IgZGF0ZS4gICovCiAgZXh0ZXJuIHZvaWQgc2VydmVyX3NldF9z
dGlja3kgUFJPVE8oKGNoYXIgKnVwZGF0ZV9kaXIsIGNoYXIgKnJlcG9zaXRvcnksCiAgCQkJCSAg
ICAgY2hhciAqdGFnLCBjaGFyICpkYXRlLCBpbnQgbm9uYnJhbmNoKSk7CiAgLyogU2VuZCBUZW1w
bGF0ZSByZXNwb25zZS4gICovCiAgZXh0ZXJuIHZvaWQgc2VydmVyX3RlbXBsYXRlIFBST1RPICgo
Y2hhciAqLCBjaGFyICopKTsKICAKICBleHRlcm4gdm9pZCBzZXJ2ZXJfdXBkYXRlX2VudHJpZXMK
ICAgICAgUFJPVE8oKGNoYXIgKmZpbGUsIGNoYXIgKnVwZGF0ZV9kaXIsIGNoYXIgKnJlcG9zaXRv
cnksCiAgCSAgIGVudW0gc2VydmVyX3VwZGF0ZWRfYXJnNCB1cGRhdGVkKSk7CiAgCiAgLyogUG9p
bnRlciB0byBhIG1hbGxvYydkIHN0cmluZyB3aGljaCBpcyB0aGUgZGlyZWN0b3J5IHdoaWNoCiAg
ICAgdGhlIHNlcnZlciBzaG91bGQgcHJlcGVuZCB0byB0aGUgcGF0aG5hbWVzIHdoaWNoIGl0IHNl
bmRzCiAgICAgdG8gdGhlIGNsaWVudC4gICovCiAgZXh0ZXJuIGNoYXIgKnNlcnZlcl9kaXI7CiAg
CisgZXh0ZXJuIHN0cnVjdCBsb2dmaWxlX2luZm8gKnNlcnZlcl9nZXRmaWxlaW5mbyBQUk9UTygo
Y2hhciAqKSk7CisgZXh0ZXJuIHZvaWQgc2VydmVyX2RlbGZpbGVpbmZvbGlzdCBQUk9UTygodm9p
ZCkpOworIAogIGVudW0gcHJvZ3Mge1BST0dfQ0hFQ0tJTiwgUFJPR19VUERBVEV9OwogIGV4dGVy
biB2b2lkIHNlcnZlcl9wcm9nIFBST1RPKChjaGFyICosIGNoYXIgKiwgZW51bSBwcm9ncykpOwog
IGV4dGVybiB2b2lkIHNlcnZlcl9jbGVhbnVwIFBST1RPKChpbnQgc2lnKSk7CiAgCiAgI2lmZGVm
IFNFUlZFUl9GTE9XQ09OVFJPTAogIC8qIFBhdXNlIGlmIGl0J3MgY29udmVuaWVudCB0byBhdm9p
ZCBtZW1vcnkgYmxvd291dCAqLwogIGV4dGVybiB2b2lkIHNlcnZlcl9wYXVzZV9jaGVjayBQUk9U
Tygodm9pZCkpOwogICNlbmRpZiAvKiBTRVJWRVJfRkxPV0NPTlRST0wgKi8KICAKICAjaWZkZWYg
QVVUSF9TRVJWRVJfU1VQUE9SVAogIGV4dGVybiBjaGFyICpDVlNfVXNlcm5hbWU7CiAgZXh0ZXJu
IGludCBzeXN0ZW1fYXV0aDsKICAjZW5kaWYgLyogQVVUSF9TRVJWRVJfU1VQUE9SVCAqLwogIAog
ICNlbmRpZiAvKiBTRVJWRVJfU1VQUE9SVCAqLwogIAwKSW5kZXg6IHNyYy92ZXJzaW9uLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3JjL3ZlcnNpb24uYyx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEu
Ni4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjYuMQoqKiogc3JjL3ZlcnNpb24u
YwkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIHNyYy92ZXJzaW9uLmMJMjAwMS8wMy8w
NyAyMzozNTowMwkxLjEuMS4xLjYuMQoqKioqKioqKioqKioqKioKKioqIDEsMzEgKioqKgogIC8q
CiAgICogQ29weXJpZ2h0IChjKSAxOTk0IGRhdmlkIGQgYHpvbycgenVobgogICAqIENvcHlyaWdo
dCAoYykgMTk5NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgKiBDb3B5cmlnaHQg
KGMpIDE5OTIsIEJyaWFuIEJlcmxpbmVyIGFuZCBKZWZmIFBvbGsKICAgKiBDb3B5cmlnaHQgKGMp
IDE5ODktMTk5MiwgQnJpYW4gQmVybGluZXIKICAgKiAKICAgKiBZb3UgbWF5IGRpc3RyaWJ1dGUg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICAq
IHNwZWNpZmllZCBpbiB0aGUgUkVBRE1FIGZpbGUgdGhhdCBjb21lcyB3aXRoIHRoaXMgIENWUyBz
b3VyY2UgZGlzdHJpYnV0aW9uLgogICAqIAogICAqIHZlcnNpb24uYyAtIHRoZSBDVlMgdmVyc2lv
biBudW1iZXIKICAgKi8KICAKICAjaW5jbHVkZSAiY3ZzLmgiCiAgCiEgY2hhciAqdmVyc2lvbl9z
dHJpbmcgPSAiQ29uY3VycmVudCBWZXJzaW9ucyBTeXN0ZW0gKENWUykgMS4xMSI7CiAgCiAgI2lm
ZGVmIENMSUVOVF9TVVBQT1JUCiAgI2lmZGVmIFNFUlZFUl9TVVBQT1JUCiAgY2hhciAqY29uZmln
X3N0cmluZyA9ICIgKGNsaWVudC9zZXJ2ZXIpXG4iOwogICNlbHNlCiAgY2hhciAqY29uZmlnX3N0
cmluZyA9ICIgKGNsaWVudClcbiI7CiAgI2VuZGlmCiAgI2Vsc2UKICAjaWZkZWYgU0VSVkVSX1NV
UFBPUlQKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoc2VydmVyKVxuIjsKICAjZWxzZQogIGNo
YXIgKmNvbmZpZ19zdHJpbmcgPSAiXG4iOwogICNlbmRpZgogICNlbmRpZgogIAogIHN0YXRpYyBj
b25zdCBjaGFyICpjb25zdCB2ZXJzaW9uX3VzYWdlW10gPQotLS0gMSwzMSAtLS0tCiAgLyoKICAg
KiBDb3B5cmlnaHQgKGMpIDE5OTQgZGF2aWQgZCBgem9vJyB6dWhuCiAgICogQ29weXJpZ2h0IChj
KSAxOTk0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAqIENvcHlyaWdodCAoYykg
MTk5MiwgQnJpYW4gQmVybGluZXIgYW5kIEplZmYgUG9sawogICAqIENvcHlyaWdodCAoYykgMTk4
OS0xOTkyLCBCcmlhbiBCZXJsaW5lcgogICAqCiAgICogWW91IG1heSBkaXN0cmlidXRlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAgKiBzcGVj
aWZpZWQgaW4gdGhlIFJFQURNRSBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGlzICBDVlMgc291cmNl
IGRpc3RyaWJ1dGlvbi4KICAgKgogICAqIHZlcnNpb24uYyAtIHRoZSBDVlMgdmVyc2lvbiBudW1i
ZXIKICAgKi8KICAKICAjaW5jbHVkZSAiY3ZzLmgiCiAgCiEgY2hhciAqdmVyc2lvbl9zdHJpbmcg
PSAiQ29uY3VycmVudCBWZXJzaW9ucyBTeXN0ZW0gKENWUykgMS4xMSAobXVsdGlwbGUgZWRpdHMr
cmVzZXJ2YXRpb25zKSI7CiAgCiAgI2lmZGVmIENMSUVOVF9TVVBQT1JUCiAgI2lmZGVmIFNFUlZF
Ul9TVVBQT1JUCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICIgKGNsaWVudC9zZXJ2ZXIpXG4iOwog
ICNlbHNlCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICIgKGNsaWVudClcbiI7CiAgI2VuZGlmCiAg
I2Vsc2UKICAjaWZkZWYgU0VSVkVSX1NVUFBPUlQKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAo
c2VydmVyKVxuIjsKICAjZWxzZQogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiXG4iOwogICNlbmRp
ZgogICNlbmRpZgogIAogIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2ZXJzaW9uX3VzYWdlW10g
PQoqKioqKioqKioqKioqKioKKioqIDU5LDc1ICoqKioKICAgICAgaWYgKGNsaWVudF9hY3RpdmUp
CiAgICAgIHsKICAJKHZvaWQpIGZwdXRzICgiU2VydmVyOiAiLCBzdGRvdXQpOwogIAlzdGFydF9z
ZXJ2ZXIgKCk7CiAgCWlmIChzdXBwb3J0ZWRfcmVxdWVzdCAoInZlcnNpb24iKSkKICAJICAgIHNl
bmRfdG9fc2VydmVyICgidmVyc2lvblwwMTIiLCAwKTsKICAJZWxzZQogIAl7CiAgCSAgICBzZW5k
X3RvX3NlcnZlciAoIm5vb3BcMDEyIiwgMCk7CiAgCSAgICBmcHV0cyAoIih1bmtub3duKVxuIiwg
c3Rkb3V0KTsKICAJfQogIAllcnIgPSBnZXRfcmVzcG9uc2VzX2FuZF9jbG9zZSAoKTsKICAgICAg
fQogICNlbmRpZgogICAgICByZXR1cm4gZXJyOwogIH0KLSAJCi0tLSA1OSw3NCAtLS0tCg==

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: application/octet-stream; 
        name="fix-clean_update_no_abort_on_merge.diff"
Content-Disposition: attachment;
filename="fix-clean_update_no_abort_on_merge.diff"
Content-transfer-encoding: base64

PyBmaXgtY2xlYW5fdXBkYXRlX25vX2Fib3J0X29uX21lcmdlLmRpZmYKPyB2bXMvTWFrZWZpbGUK
SW5kZXg6IHNyYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zz
cm9vdC9jdnMvc3JjL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuMTguMQpkaWZmIC1DMTYgLXcgLXIxLjEuMS4xIC1yMS4x
LjEuMS4xOC4xCioqKiBzcmMvQ2hhbmdlTG9nCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQot
LS0gc3JjL0NoYW5nZUxvZwkyMDAxLzAzLzA5IDE3OjA1OjIzCTEuMS4xLjEuMTguMQoqKioqKioq
KioqKioqKioKKioqIDEsMTYgKioqKgotLS0gMSwyMSAtLS0tCisgMjAwMS0wMy0wOSAgTm9lbCBZ
YXAgIDx5YXBfbm9lbEB5YWhvby5jb20+CisgCisgCSogdXBkYXRlLmMgKHVwZGF0ZV9maWxlcHJv
YykKKyAJdG9zc19sb2NhbF9jaGFuZ2VzIGNoZWNrIGFkZGVkIGZvciB3aGVuIHN0YXR1cyBpcyBU
X05FRURTX01FUkdFLgorIAogIDIwMDAtMDktMTkgIExhcnJ5IEpvbmVzICA8bGFycnkuam9uZXNA
c2RyYy5jb20+CiAgCiAgCSogdmVyc2lvbi5jOiBWZXJzaW9uIDEuMTEuCiAgCiAgMjAwMC0wOS0w
NyAgTGFycnkgSm9uZXMgIDxsYXJyeS5qb25lc0BzZHJjLmNvbT4KICAKICAJKiBNYWtlZmlsZS5p
bjogVXNlIEBiaW5kaXJALCBAbGliZGlyQCwgQGluZm9kaXJALCBhbmQgQG1hbmRpckAKICAJZnJv
bSBhdXRvY29uZi4KICAKICAyMDAwLTA4LTIzICBMYXJyeSBKb25lcyAgPGxhcnJ5LmpvbmVzQHNk
cmMuY29tPgogIAogIAkqIG1rbW9kdWxlcy5jIChpbml0KTogQ3JlYXRlIGFuIGVtcHR5IHZhbC10
YWdzIGZpbGUgaWYgaXQgZG9lc24ndAogIAlhbHJlYWR5IGV4aXN0IHRvIGF2b2lkIHByb2JsZW1z
IHdpdGggdXNlcnMgbm90IGhhdmluZyBzdWZmaWNpZW50CiAgCXBlcm1pc3Npb25zIHRvIGNyZWF0
ZSBpdCBsYXRlci4KICAKICAyMDAwLTA5LTA2ICBKaW0gS2luZ2RvbiAgPGpraW5nZG9uQGRoY3At
bmV0MjAwLTg5LnN1LnZhbGludXguY29tPgpJbmRleDogc3JjL3VwZGF0ZS5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy91cGRhdGUuYyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuMTguMQpkaWZm
IC1DMTYgLXcgLXIxLjEuMS4xIC1yMS4xLjEuMS4xOC4xCioqKiBzcmMvdXBkYXRlLmMJMjAwMS8w
My8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvdXBkYXRlLmMJMjAwMS8wMy8wOSAxNzowNToy
MwkxLjEuMS4xLjE4LjEKKioqKioqKioqKioqKioqCioqKiA2MzcsNjk1ICoqKioKICAJfQogICAg
ICB9CiAgICAgIGVsc2UKICAgICAgewogIAlzd2l0Y2ggKHN0YXR1cykKICAJewogIAkgICAgY2Fz
ZSBUX1VOS05PV046CQkvKiB1bmtub3duIGZpbGUgd2FzIGV4cGxpY2l0bHkgYXNrZWQKICAJCQkJ
CSAqIGFib3V0ICovCiAgCSAgICBjYXNlIFRfVVBUT0RBVEU6CQkvKiBmaWxlIHdhcyBhbHJlYWR5
IHVwLXRvLWRhdGUgKi8KICAJCXJldHZhbCA9IDA7CiAgCQlicmVhazsKICAJICAgIGNhc2UgVF9D
T05GTElDVDoJCS8qIG9sZCBwdW50LXR5cGUgZXJyb3JzICovCiAgCQlyZXR2YWwgPSAxOwogIAkJ
d3JpdGVfbGV0dGVyIChmaW5mbywgJ0MnKTsKICAJCWJyZWFrOwogIAkgICAgY2FzZSBUX05FRURT
X01FUkdFOgkJLyogbmVlZHMgbWVyZ2luZyAqLwotIAkJcmV0dmFsID0gbWVyZ2VfZmlsZSAoZmlu
Zm8sIHZlcnMpOwotIAkJYnJlYWs7CiAgCSAgICBjYXNlIFRfTU9ESUZJRUQ6CQkvKiBsb2NhbGx5
IG1vZGlmaWVkICovCi0gCQlyZXR2YWwgPSAwOwogICAgICAgICAgICAgICAgICBpZiAodG9zc19s
b2NhbF9jaGFuZ2VzKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBj
aGFyICpiYWtuYW1lOwogICAgICAgICAgICAgICAgICAgICAgYmFrbmFtZSA9IGJhY2t1cF9maWxl
IChmaW5mby0+ZmlsZSwgdmVycy0+dm5fdXNlcik7CiAgICAgICAgICAgICAgICAgICAgICAvKiBU
aGlzIGJlaGF2aW9yIGlzIHN1ZmZpY2llbnRseSB1bmV4cGVjdGVkIHRvCiAgICAgICAgICAgICAg
ICAgICAgICAgICBqdXN0aWZ5IG92ZXJpbmZvcm1hdGl2ZW5lc3MsIEkgdGhpbmsuICovCiAgI2lm
ZGVmIFNFUlZFUl9TVVBQT1JUCiAgICAgICAgICAgICAgICAgICAgICBpZiAoKCEgcmVhbGx5X3F1
aWV0KSAmJiAoISBzZXJ2ZXJfYWN0aXZlKSkKICAjZWxzZSAvKiAhIFNFUlZFUl9TVVBQT1JUICov
CiAgICAgICAgICAgICAgICAgICAgICBpZiAoISByZWFsbHlfcXVpZXQpCiAgI2VuZGlmIC8qIFNF
UlZFUl9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHByaW50ZiAo
IihMb2NhbGx5IG1vZGlmaWVkICVzIG1vdmVkIHRvICVzKVxuIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaW5mby0+ZmlsZSwgYmFrbmFtZSk7CiAgICAgICAgICAg
ICAgICAgICAgICBmcmVlIChiYWtuYW1lKTsKICAKICAgICAgICAgICAgICAgICAgICAgIC8qIFRo
ZSBsb2NhbGx5IG1vZGlmaWVkIGZpbGUgaXMgc3RpbGwgcHJlc2VudCwgYnV0CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSByZXBvc2l0b3J5IGNv
cHkKICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoaXMuICovCiAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBUX0NIRUNLT1VUOwogICAgICAgICAgICAgICAgICAgICAgcmV0dmFs
ID0gY2hlY2tvdXRfZmlsZSAoZmluZm8sIHZlcnMsIDAsIDAsIDEpOwogICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJzLT50c19jb25mbGljdCkKICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmaWxlc3RhbXA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHJldGNvZGU7CiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
LyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiB0aGUgdGltZXN0YW1wIGhhcyBjaGFu
Z2VkIGFuZCBubwogICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNvbmZsaWN0IGluZGljYXRv
cnMgYXJlIGZvdW5kLCBpdCBpc24ndCBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICogJ0Mn
IGFueSBtb3JlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIAogICNpZmRlZiBTRVJW
RVJfU1VQUE9SVAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXJfYWN0aXZlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRjb2RlID0gdmVycy0+dHNfY29uZmxpY3Rb
MF0gIT0gJz0nOwogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgewotLS0gNjM3LDY5NyAtLS0tCiAgCX0KICAgICAgfQogICAgICBlbHNlCiAg
ICAgIHsKICAJc3dpdGNoIChzdGF0dXMpCiAgCXsKICAJICAgIGNhc2UgVF9VTktOT1dOOgkJLyog
dW5rbm93biBmaWxlIHdhcyBleHBsaWNpdGx5IGFza2VkCiAgCQkJCQkgKiBhYm91dCAqLwogIAkg
ICAgY2FzZSBUX1VQVE9EQVRFOgkJLyogZmlsZSB3YXMgYWxyZWFkeSB1cC10by1kYXRlICovCiAg
CQlyZXR2YWwgPSAwOwogIAkJYnJlYWs7CiAgCSAgICBjYXNlIFRfQ09ORkxJQ1Q6CQkvKiBvbGQg
cHVudC10eXBlIGVycm9ycyAqLwogIAkJcmV0dmFsID0gMTsKICAJCXdyaXRlX2xldHRlciAoZmlu
Zm8sICdDJyk7CiAgCQlicmVhazsKICAJICAgIGNhc2UgVF9ORUVEU19NRVJHRToJCS8qIG5lZWRz
IG1lcmdpbmcgKi8KICAJICAgIGNhc2UgVF9NT0RJRklFRDoJCS8qIGxvY2FsbHkgbW9kaWZpZWQg
Ki8KICAgICAgICAgICAgICAgICAgaWYgKHRvc3NfbG9jYWxfY2hhbmdlcykKICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFrbmFtZTsKICAgICAgICAgICAg
ICAgICAgICAgIGJha25hbWUgPSBiYWNrdXBfZmlsZSAoZmluZm8tPmZpbGUsIHZlcnMtPnZuX3Vz
ZXIpOwogICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBiZWhhdmlvciBpcyBzdWZmaWNpZW50
bHkgdW5leHBlY3RlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeSBvdmVyaW5m
b3JtYXRpdmVuZXNzLCBJIHRoaW5rLiAqLwogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogICAgICAg
ICAgICAgICAgICAgICAgaWYgKCghIHJlYWxseV9xdWlldCkgJiYgKCEgc2VydmVyX2FjdGl2ZSkp
CiAgI2Vsc2UgLyogISBTRVJWRVJfU1VQUE9SVCAqLwogICAgICAgICAgICAgICAgICAgICAgaWYg
KCEgcmVhbGx5X3F1aWV0KQogICNlbmRpZiAvKiBTRVJWRVJfU1VQUE9SVCAqLwogICAgICAgICAg
ICAgICAgICAgICAgICAgICh2b2lkKSBwcmludGYgKCIoTG9jYWxseSBtb2RpZmllZCAlcyBtb3Zl
ZCB0byAlcylcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu
Zm8tPmZpbGUsIGJha25hbWUpOwogICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYmFrbmFtZSk7
CiAgCiAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbG9jYWxseSBtb2RpZmllZCBmaWxlIGlz
IHN0aWxsIHByZXNlbnQsIGJ1dAogICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBiZSBv
dmVyd3JpdHRlbiBieSB0aGUgcmVwb3NpdG9yeSBjb3B5CiAgICAgICAgICAgICAgICAgICAgICAg
ICBhZnRlciB0aGlzLiAqLwogICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gVF9DSEVDS09V
VDsKICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGNoZWNrb3V0X2ZpbGUgKGZpbmZvLCB2
ZXJzLCAwLCAwLCAxKTsKICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBlbHNl
IGlmIChzdGF0dXMgPT0gVF9ORUVEU19NRVJHRSkKKyAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgcmV0dmFsID0gbWVyZ2VfZmlsZSAoZmluZm8sIHZlcnMpOworICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJzLT50c19jb25mbGljdCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICpmaWxlc3RhbXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHJldGNvZGU7CiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBJZiB0aGUgdGltZXN0YW1wIGhhcyBjaGFuZ2VkIGFuZCBubwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIGNvbmZsaWN0IGluZGljYXRvcnMgYXJlIGZvdW5kLCBp
dCBpc24ndCBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICogJ0MnIGFueSBtb3JlLgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAqLwogIAogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXJfYWN0aXZlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXRjb2RlID0gdmVycy0+dHNfY29uZmxpY3RbMF0gIT0gJz0nOwogICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICB7Cioq
KioqKioqKioqKioqKgoqKiogNzEwLDc0OCAqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldGNvZGUgPSAhZmlsZV9oYXNfbWFya2VycyAoZmluZm8pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldGNvZGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZV9sZXR0ZXIgKGZpbmZvLCAnQycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR2YWwgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBSZXJlZ2lzdGVyIHRvIGNsZWFyIGNvbmZsaWN0IGZsYWcuICovCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIChmaW5mby0+ZW50cmllcywgZmlu
Zm8tPmZpbGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVycy0+
dm5fcmNzLCB2ZXJzLT50c19yY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZXJzLT5vcHRpb25zLCB2ZXJzLT50YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJzLT5kYXRlLCAoY2hhciAqKTApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcmV0dmFsKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlX2xldHRlciAoZmluZm8sICdNJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dmFsID0gMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQog
IAkJYnJlYWs7CiAgI2lmZGVmIFNFUlZFUl9TVVBQT1JUCiAgCSAgICBjYXNlIFRfUEFUQ0g6CQkv
KiBuZWVkcyBwYXRjaCAqLwogIAkJaWYgKHBhdGNoZXMpCiAgCQl7CiAgCQkgICAgaW50IGRvY2hl
Y2tvdXQ7CiAgCQkgICAgc3RydWN0IHN0YXQgZmlsZV9pbmZvOwogIAkJICAgIHVuc2lnbmVkIGNo
YXIgY2hlY2tzdW1bMTZdOwogIAogIAkJICAgIHJldHZhbCA9IHBhdGNoX2ZpbGUgKGZpbmZvLAog
IAkJCQkJIHZlcnMsICZkb2NoZWNrb3V0LAogIAkJCQkJICZmaWxlX2luZm8sIGNoZWNrc3VtKTsK
ICAJCSAgICBpZiAoISBkb2NoZWNrb3V0KQogIAkJICAgIHsKICAJCSAgICAgICAgaWYgKHNlcnZl
cl9hY3RpdmUgJiYgcmV0dmFsID09IDApCiAgCQkJICAgIHNlcnZlcl91cGRhdGVkIChmaW5mbywg
dmVycywKLS0tIDcxMiw3NTAgLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRj
b2RlID0gIWZpbGVfaGFzX21hcmtlcnMgKGZpbmZvKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXRjb2RlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbGV0
dGVyIChmaW5mbywgJ0MnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0g
MTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogUmVyZWdpc3RlciB0byBjbGVhciBjb25mbGljdCBmbGFnLiAqLwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAoZmluZm8tPmVudHJpZXMsIGZpbmZvLT5maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVycy0+dm5fcmNzLCB2
ZXJzLT50c19yY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJz
LT5vcHRpb25zLCB2ZXJzLT50YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZXJzLT5kYXRlLCAoY2hhciAqKTApOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldHZhbCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2xldHRlciAoZmlu
Zm8sICdNJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICB9CiAgCQlicmVhazsKICAjaWZkZWYgU0VSVkVSX1NVUFBPUlQKICAJICAgIGNhc2Ug
VF9QQVRDSDoJCS8qIG5lZWRzIHBhdGNoICovCiAgCQlpZiAocGF0Y2hlcykKICAJCXsKICAJCSAg
ICBpbnQgZG9jaGVja291dDsKICAJCSAgICBzdHJ1Y3Qgc3RhdCBmaWxlX2luZm87CiAgCQkgICAg
dW5zaWduZWQgY2hhciBjaGVja3N1bVsxNl07CiAgCiAgCQkgICAgcmV0dmFsID0gcGF0Y2hfZmls
ZSAoZmluZm8sCiAgCQkJCQkgdmVycywgJmRvY2hlY2tvdXQsCiAgCQkJCQkgJmZpbGVfaW5mbywg
Y2hlY2tzdW0pOwogIAkJICAgIGlmICghIGRvY2hlY2tvdXQpCiAgCQkgICAgewogIAkJICAgICAg
ICBpZiAoc2VydmVyX2FjdGl2ZSAmJiByZXR2YWwgPT0gMCkKICAJCQkgICAgc2VydmVyX3VwZGF0
ZWQgKGZpbmZvLCB2ZXJzLApJbmRleDogc3JjL3ZlcnNpb24uYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMvdmVyc2lvbi5jLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMS4xOC4xCmRpZmYgLUMxNiAt
dyAtcjEuMS4xLjEgLXIxLjEuMS4xLjE4LjEKKioqIHNyYy92ZXJzaW9uLmMJMjAwMS8wMy8wNiAx
NjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvdmVyc2lvbi5jCTIwMDEvMDMvMDkgMTc6MDU6MjMJMS4x
LjEuMS4xOC4xCioqKioqKioqKioqKioqKgoqKiogMSwzMSAqKioqCiAgLyoKICAgKiBDb3B5cmln
aHQgKGMpIDE5OTQgZGF2aWQgZCBgem9vJyB6dWhuCiAgICogQ29weXJpZ2h0IChjKSAxOTk0IEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAqIENvcHlyaWdodCAoYykgMTk5MiwgQnJp
YW4gQmVybGluZXIgYW5kIEplZmYgUG9sawogICAqIENvcHlyaWdodCAoYykgMTk4OS0xOTkyLCBC
cmlhbiBCZXJsaW5lcgogICAqIAogICAqIFlvdSBtYXkgZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgICogc3BlY2lmaWVkIGlu
IHRoZSBSRUFETUUgZmlsZSB0aGF0IGNvbWVzIHdpdGggdGhpcyAgQ1ZTIHNvdXJjZSBkaXN0cmli
dXRpb24uCiAgICogCiAgICogdmVyc2lvbi5jIC0gdGhlIENWUyB2ZXJzaW9uIG51bWJlcgogICAq
LwogIAogICNpbmNsdWRlICJjdnMuaCIKICAKISBjaGFyICp2ZXJzaW9uX3N0cmluZyA9ICJDb25j
dXJyZW50IFZlcnNpb25zIFN5c3RlbSAoQ1ZTKSAxLjExIjsKICAKICAjaWZkZWYgQ0xJRU5UX1NV
UFBPUlQKICAjaWZkZWYgU0VSVkVSX1NVUFBPUlQKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAo
Y2xpZW50L3NlcnZlcilcbiI7CiAgI2Vsc2UKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xp
ZW50KVxuIjsKICAjZW5kaWYKICAjZWxzZQogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogIGNoYXIg
KmNvbmZpZ19zdHJpbmcgPSAiIChzZXJ2ZXIpXG4iOwogICNlbHNlCiAgY2hhciAqY29uZmlnX3N0
cmluZyA9ICJcbiI7CiAgI2VuZGlmCiAgI2VuZGlmCiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNv
bnN0IHZlcnNpb25fdXNhZ2VbXSA9Ci0tLSAxLDMxIC0tLS0KICAvKgogICAqIENvcHlyaWdodCAo
YykgMTk5NCBkYXZpZCBkIGB6b28nIHp1aG4KICAgKiBDb3B5cmlnaHQgKGMpIDE5OTQgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICogQ29weXJpZ2h0IChjKSAxOTkyLCBCcmlhbiBC
ZXJsaW5lciBhbmQgSmVmZiBQb2xrCiAgICogQ29weXJpZ2h0IChjKSAxOTg5LTE5OTIsIEJyaWFu
IEJlcmxpbmVyCiAgICoKICAgKiBZb3UgbWF5IGRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICAqIHNwZWNpZmllZCBpbiB0aGUg
UkVBRE1FIGZpbGUgdGhhdCBjb21lcyB3aXRoIHRoaXMgIENWUyBzb3VyY2UgZGlzdHJpYnV0aW9u
LgogICAqCiAgICogdmVyc2lvbi5jIC0gdGhlIENWUyB2ZXJzaW9uIG51bWJlcgogICAqLwogIAog
ICNpbmNsdWRlICJjdnMuaCIKICAKISBjaGFyICp2ZXJzaW9uX3N0cmluZyA9ICJDb25jdXJyZW50
IFZlcnNpb25zIFN5c3RlbSAoQ1ZTKSAxLjExIChjbGVhbiB1cGRhdGUgbm8gYWJvcnQgb24gbWVy
Z2UpIjsKICAKICAjaWZkZWYgQ0xJRU5UX1NVUFBPUlQKICAjaWZkZWYgU0VSVkVSX1NVUFBPUlQK
ICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50L3NlcnZlcilcbiI7CiAgI2Vsc2UKICBj
aGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50KVxuIjsKICAjZW5kaWYKICAjZWxzZQogICNp
ZmRlZiBTRVJWRVJfU1VQUE9SVAogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChzZXJ2ZXIpXG4i
OwogICNlbHNlCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICJcbiI7CiAgI2VuZGlmCiAgI2VuZGlm
CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZlcnNpb25fdXNhZ2VbXSA9CioqKioqKioq
KioqKioqKgoqKiogNTksNzUgKioqKgogICAgICBpZiAoY2xpZW50X2FjdGl2ZSkKICAgICAgewog
IAkodm9pZCkgZnB1dHMgKCJTZXJ2ZXI6ICIsIHN0ZG91dCk7CiAgCXN0YXJ0X3NlcnZlciAoKTsK
ICAJaWYgKHN1cHBvcnRlZF9yZXF1ZXN0ICgidmVyc2lvbiIpKQogIAkgICAgc2VuZF90b19zZXJ2
ZXIgKCJ2ZXJzaW9uXDAxMiIsIDApOwogIAllbHNlCiAgCXsKICAJICAgIHNlbmRfdG9fc2VydmVy
ICgibm9vcFwwMTIiLCAwKTsKICAJICAgIGZwdXRzICgiKHVua25vd24pXG4iLCBzdGRvdXQpOwog
IAl9CiAgCWVyciA9IGdldF9yZXNwb25zZXNfYW5kX2Nsb3NlICgpOwogICAgICB9CiAgI2VuZGlm
CiAgICAgIHJldHVybiBlcnI7CiAgfQotIAkKLS0tIDU5LDc0IC0tLS0K

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: application/octet-stream; 
        name="fix-default_fileattrs.diff"
Content-Disposition: attachment; filename="fix-default_fileattrs.diff"
Content-transfer-encoding: base64

PyBmaXgtZGVmYXVsdF9maWxlYXR0cnMuZGlmZgo/IHZtcy9NYWtlZmlsZQpJbmRleDogc3JjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290L2N2cy9zcmMv
Q2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xLjEuMS4xNC4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjE0LjEKKioq
IHNyYy9DaGFuZ2VMb2cJMjAwMS8wMy8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBzcmMvQ2hhbmdl
TG9nCTIwMDEvMDMvMDggMjA6MjI6NDkJMS4xLjEuMS4xNC4xCioqKioqKioqKioqKioqKgoqKiog
MSwxNiAqKioqCi0tLSAxLDIxIC0tLS0KKyAyMDAxLTAzLTA4ICBOb2VsIFlhcCAgPHlhcF9ub2Vs
QHlhaG9vLmNvbT4KKyAKKyAJKiBjaGVja2luLmMgKENoZWNraW4pOgorIAlEZWZhdWx0IGZpbGVh
dHRyIHNldCBvbiBuZXdseSBhZGRlZCBmaWxlcy4KKyAKICAyMDAwLTA5LTE5ICBMYXJyeSBKb25l
cyAgPGxhcnJ5LmpvbmVzQHNkcmMuY29tPgogIAogIAkqIHZlcnNpb24uYzogVmVyc2lvbiAxLjEx
LgogIAogIDIwMDAtMDktMDcgIExhcnJ5IEpvbmVzICA8bGFycnkuam9uZXNAc2RyYy5jb20+CiAg
CiAgCSogTWFrZWZpbGUuaW46IFVzZSBAYmluZGlyQCwgQGxpYmRpckAsIEBpbmZvZGlyQCwgYW5k
IEBtYW5kaXJACiAgCWZyb20gYXV0b2NvbmYuCiAgCiAgMjAwMC0wOC0yMyAgTGFycnkgSm9uZXMg
IDxsYXJyeS5qb25lc0BzZHJjLmNvbT4KICAKICAJKiBta21vZHVsZXMuYyAoaW5pdCk6IENyZWF0
ZSBhbiBlbXB0eSB2YWwtdGFncyBmaWxlIGlmIGl0IGRvZXNuJ3QKICAJYWxyZWFkeSBleGlzdCB0
byBhdm9pZCBwcm9ibGVtcyB3aXRoIHVzZXJzIG5vdCBoYXZpbmcgc3VmZmljaWVudAogIAlwZXJt
aXNzaW9ucyB0byBjcmVhdGUgaXQgbGF0ZXIuCiAgCiAgMjAwMC0wOS0wNiAgSmltIEtpbmdkb24g
IDxqa2luZ2RvbkBkaGNwLW5ldDIwMC04OS5zdS52YWxpbnV4LmNvbT4KSW5kZXg6IHNyYy9jaGVj
a2luLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3JjL2No
ZWNraW4uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMS4xLjEuMTQuMQpkaWZmIC1DMTYgLXcgLXIxLjEuMS4xIC1yMS4xLjEuMS4xNC4xCioqKiBz
cmMvY2hlY2tpbi5jCTIwMDEvMDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL2NoZWNraW4u
YwkyMDAxLzAzLzA4IDIwOjIyOjQ5CTEuMS4xLjEuMTQuMQoqKioqKioqKioqKioqKioKKioqIDEw
NSwxMzYgKioqKgotLS0gMTA1LDE0OCAtLS0tCiAgCiAgCSAgICAvKgogIAkgICAgICogSWYgd2Ug
d2FudCByZWFkLW9ubHkgZmlsZXMsIG11Y2sgdGhlIHBlcm1pc3Npb25zIGhlcmUsIGJlZm9yZQog
IAkgICAgICogZ2V0dGluZyB0aGUgZmlsZSB0aW1lLXN0YW1wLgogIAkgICAgICovCiAgCSAgICBp
ZiAoIWN2c3dyaXRlIHx8IGZpbGVhdHRyX2dldCAoZmluZm8tPmZpbGUsICJfd2F0Y2hlZCIpKQog
IAkJeGNobW9kIChmaW5mby0+ZmlsZSwgMCk7CiAgCiAgCSAgICAvKiBSZS1yZWdpc3RlciB3aXRo
IHRoZSBuZXcgZGF0YS4gICovCiAgCSAgICB2ZXJzID0gVmVyc2lvbl9UUyAoZmluZm8sIE5VTEws
IHRhZywgTlVMTCwgMSwgc2V0X3RpbWUpOwogIAkgICAgaWYgKHN0cmNtcCAodmVycy0+b3B0aW9u
cywgIi1WNCIpID09IDApCiAgCQl2ZXJzLT5vcHRpb25zWzBdID0gJ1wwJzsKICAJICAgIFJlZ2lz
dGVyIChmaW5mby0+ZW50cmllcywgZmluZm8tPmZpbGUsIHZlcnMtPnZuX3JjcywgdmVycy0+dHNf
dXNlciwKICAJCSAgICAgIHZlcnMtPm9wdGlvbnMsIHZlcnMtPnRhZywgdmVycy0+ZGF0ZSwgKGNo
YXIgKikgMCk7CiAgCSAgICBoaXN0b3J5X3dyaXRlICh0eXBlLCBOVUxMLCB2ZXJzLT52bl9yY3Ms
CiAgCQkJICAgZmluZm8tPmZpbGUsIGZpbmZvLT5yZXBvc2l0b3J5KTsKKyAKKyAgICAgICAgICAg
ICBpZiAodHlwZSA9PSAnQScpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBjaGFy
ICphdHRyID0gTlVMTDsKKyAKKyAgICAgICAgICAgICAgICAgYXR0ciA9IGZpbGVhdHRyX2dldGFs
bCAoTlVMTCk7CisgICAgICAgICAgICAgICAgIGlmIChhdHRyICE9IE5VTEwpCisgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGZpbGVhdHRyX3NldGFsbCAoZmluZm8tPmZp
bGUsIGF0dHIpOworICAgICAgICAgICAgICAgICAgICAgZnJlZSAoYXR0cik7CisgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICB9CiAgCiAgCSAgICBpZiAodG9jdnNQYXRoKQogIAkJaWYg
KHVubGlua19maWxlX2RpciAodG9jdnNQYXRoKSA8IDApCiAgCQkgICAgZXJyb3IgKDAsIGVycm5v
LCAiY2Fubm90IHJlbW92ZSAlcyIsIHRvY3ZzUGF0aCk7CiAgCiAgCSAgICBicmVhazsKICAKICAJ
Y2FzZSAtMToJCQkvKiBmb3JrIGZhaWxlZCAqLwogIAkgICAgaWYgKHRvY3ZzUGF0aCkKICAJCWlm
ICh1bmxpbmtfZmlsZV9kaXIgKHRvY3ZzUGF0aCkgPCAwKQogIAkJICAgIGVycm9yICgwLCBlcnJu
bywgImNhbm5vdCByZW1vdmUgJXMiLCB0b2N2c1BhdGgpOwogIAogIAkgICAgaWYgKCFub2V4ZWMp
CiAgCQllcnJvciAoMSwgZXJybm8sICJjb3VsZCBub3QgY2hlY2sgaW4gJXMgLS0gZm9yayBmYWls
ZWQiLAogIAkJICAgICAgIGZpbmZvLT5mdWxsbmFtZSk7CiAgCSAgICByZXR1cm4gKDEpOwpJbmRl
eDogc3JjL3ZlcnNpb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9ueWFwLy5jdnNyb290
L2N2cy9zcmMvdmVyc2lvbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xLjEuMS4xNC4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4x
LjE0LjEKKioqIHNyYy92ZXJzaW9uLmMJMjAwMS8wMy8wNiAxNjoyMToyMQkxLjEuMS4xCi0tLSBz
cmMvdmVyc2lvbi5jCTIwMDEvMDMvMDggMjA6MjI6NTAJMS4xLjEuMS4xNC4xCioqKioqKioqKioq
KioqKgoqKiogMSwzMSAqKioqCiAgLyoKICAgKiBDb3B5cmlnaHQgKGMpIDE5OTQgZGF2aWQgZCBg
em9vJyB6dWhuCiAgICogQ29weXJpZ2h0IChjKSAxOTk0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLgogICAqIENvcHlyaWdodCAoYykgMTk5MiwgQnJpYW4gQmVybGluZXIgYW5kIEplZmYg
UG9sawogICAqIENvcHlyaWdodCAoYykgMTk4OS0xOTkyLCBCcmlhbiBCZXJsaW5lcgogICAqIAog
ICAqIFlvdSBtYXkgZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGFzCiAgICogc3BlY2lmaWVkIGluIHRoZSBSRUFETUUgZmlsZSB0aGF0
IGNvbWVzIHdpdGggdGhpcyAgQ1ZTIHNvdXJjZSBkaXN0cmlidXRpb24uCiAgICogCiAgICogdmVy
c2lvbi5jIC0gdGhlIENWUyB2ZXJzaW9uIG51bWJlcgogICAqLwogIAogICNpbmNsdWRlICJjdnMu
aCIKICAKISBjaGFyICp2ZXJzaW9uX3N0cmluZyA9ICJDb25jdXJyZW50IFZlcnNpb25zIFN5c3Rl
bSAoQ1ZTKSAxLjExIjsKICAKICAjaWZkZWYgQ0xJRU5UX1NVUFBPUlQKICAjaWZkZWYgU0VSVkVS
X1NVUFBPUlQKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50L3NlcnZlcilcbiI7CiAg
I2Vsc2UKICBjaGFyICpjb25maWdfc3RyaW5nID0gIiAoY2xpZW50KVxuIjsKICAjZW5kaWYKICAj
ZWxzZQogICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChz
ZXJ2ZXIpXG4iOwogICNlbHNlCiAgY2hhciAqY29uZmlnX3N0cmluZyA9ICJcbiI7CiAgI2VuZGlm
CiAgI2VuZGlmCiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZlcnNpb25fdXNhZ2VbXSA9
Ci0tLSAxLDMxIC0tLS0KICAvKgogICAqIENvcHlyaWdodCAoYykgMTk5NCBkYXZpZCBkIGB6b28n
IHp1aG4KICAgKiBDb3B5cmlnaHQgKGMpIDE5OTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuCiAgICogQ29weXJpZ2h0IChjKSAxOTkyLCBCcmlhbiBCZXJsaW5lciBhbmQgSmVmZiBQb2xr
CiAgICogQ29weXJpZ2h0IChjKSAxOTg5LTE5OTIsIEJyaWFuIEJlcmxpbmVyCiAgICoKICAgKiBZ
b3UgbWF5IGRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcwogICAqIHNwZWNpZmllZCBpbiB0aGUgUkVBRE1FIGZpbGUgdGhhdCBjb21l
cyB3aXRoIHRoaXMgIENWUyBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICAqCiAgICogdmVyc2lvbi5j
IC0gdGhlIENWUyB2ZXJzaW9uIG51bWJlcgogICAqLwogIAogICNpbmNsdWRlICJjdnMuaCIKICAK
ISBjaGFyICp2ZXJzaW9uX3N0cmluZyA9ICJDb25jdXJyZW50IFZlcnNpb25zIFN5c3RlbSAoQ1ZT
KSAxLjExIChkZWZhdWx0IGZpbGVhdHRycykiOwogIAogICNpZmRlZiBDTElFTlRfU1VQUE9SVAog
ICNpZmRlZiBTRVJWRVJfU1VQUE9SVAogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChjbGllbnQv
c2VydmVyKVxuIjsKICAjZWxzZQogIGNoYXIgKmNvbmZpZ19zdHJpbmcgPSAiIChjbGllbnQpXG4i
OwogICNlbmRpZgogICNlbHNlCiAgI2lmZGVmIFNFUlZFUl9TVVBQT1JUCiAgY2hhciAqY29uZmln
X3N0cmluZyA9ICIgKHNlcnZlcilcbiI7CiAgI2Vsc2UKICBjaGFyICpjb25maWdfc3RyaW5nID0g
IlxuIjsKICAjZW5kaWYKICAjZW5kaWYKICAKICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmVy
c2lvbl91c2FnZVtdID0KKioqKioqKioqKioqKioqCioqKiA1OSw3NSAqKioqCiAgICAgIGlmIChj
bGllbnRfYWN0aXZlKQogICAgICB7CiAgCSh2b2lkKSBmcHV0cyAoIlNlcnZlcjogIiwgc3Rkb3V0
KTsKICAJc3RhcnRfc2VydmVyICgpOwogIAlpZiAoc3VwcG9ydGVkX3JlcXVlc3QgKCJ2ZXJzaW9u
IikpCiAgCSAgICBzZW5kX3RvX3NlcnZlciAoInZlcnNpb25cMDEyIiwgMCk7CiAgCWVsc2UKICAJ
ewogIAkgICAgc2VuZF90b19zZXJ2ZXIgKCJub29wXDAxMiIsIDApOwogIAkgICAgZnB1dHMgKCIo
dW5rbm93bilcbiIsIHN0ZG91dCk7CiAgCX0KICAJZXJyID0gZ2V0X3Jlc3BvbnNlc19hbmRfY2xv
c2UgKCk7CiAgICAgIH0KICAjZW5kaWYKICAgICAgcmV0dXJuIGVycjsKICB9Ci0gCQotLS0gNTks
NzQgLS0tLQo=

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp
Content-type: application/octet-stream; 
        name="fix-edit_fields_with_plus.diff"
Content-Disposition: attachment; filename="fix-edit_fields_with_plus.diff"
Content-transfer-encoding: base64

PyBmaXgtZWRpdF9maWVsZHNfd2l0aF9wbHVzLmRpZmYKPyB2bXMvTWFrZWZpbGUKSW5kZXg6IHNy
Yy9lZGl0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbnlhcC8uY3Zzcm9vdC9jdnMvc3Jj
L2VkaXQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMS4xLjEuOC4xCmRpZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjguMQoqKiogc3Jj
L2VkaXQuYwkyMDAxLzAzLzA2IDE2OjIxOjIxCTEuMS4xLjEKLS0tIHNyYy9lZGl0LmMJMjAwMS8w
My8wOCAxMzoyMjowNAkxLjEuMS4xLjguMQoqKioqKioqKioqKioqKioKKioqIDE3NSwyMTEgKioq
KgogICAgICB9CiAgCiAgICAgIHdoaWxlIChnZXRsaW5lICgmbGluZSwgJmxpbmVfbGVuLCBmcCkg
PiAwKQogICAgICB7CiAgCW5vdGlmX3R5cGUgPSBsaW5lWzBdOwogIAlpZiAobm90aWZfdHlwZSA9
PSAnXDAnKQogIAkgICAgY29udGludWU7CiAgCWZpbGVuYW1lID0gbGluZSArIDE7CiAgCWNwID0g
c3RyY2hyIChmaWxlbmFtZSwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgY29udGlu
dWU7CiAgCSpjcCsrID0gJ1wwJzsKICAJdmFsID0gY3A7CiAgCWNwID0gc3RyY2hyICh2YWwsICdc
dCcpOwogIAlpZiAoY3AgPT0gTlVMTCkKICAJICAgIGNvbnRpbnVlOwohIAkqY3ArKyA9ICcrJzsK
ICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJaWYgKGNwID09IE5VTEwpCiAgCSAgICBjb250
aW51ZTsKISAJKmNwKysgPSAnKyc7CiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChj
cCA9PSBOVUxMKQogIAkgICAgY29udGludWU7CiAgCSpjcCsrID0gJ1wwJzsKICAJd2F0Y2hlcyA9
IGNwOwogIAljcCA9IHN0cmNociAoY3AsICdcbicpOwogIAlpZiAoY3AgPT0gTlVMTCkKICAJICAg
IGNvbnRpbnVlOwogIAkqY3AgPSAnXDAnOwogIAogIAlub3RpZnlfZG8gKG5vdGlmX3R5cGUsIGZp
bGVuYW1lLCBnZXRjYWxsZXIgKCksIHZhbCwgd2F0Y2hlcywKICAJCSAgIGZpbmZvLT5yZXBvc2l0
b3J5KTsKICAgICAgfQogICAgICBmcmVlIChsaW5lKTsKICAKICAgICAgaWYgKGZlcnJvciAoZnAp
KQotLS0gMTc1LDIxMSAtLS0tCiAgICAgIH0KICAKICAgICAgd2hpbGUgKGdldGxpbmUgKCZsaW5l
LCAmbGluZV9sZW4sIGZwKSA+IDApCiAgICAgIHsKICAJbm90aWZfdHlwZSA9IGxpbmVbMF07CiAg
CWlmIChub3RpZl90eXBlID09ICdcMCcpCiAgCSAgICBjb250aW51ZTsKICAJZmlsZW5hbWUgPSBs
aW5lICsgMTsKICAJY3AgPSBzdHJjaHIgKGZpbGVuYW1lLCAnXHQnKTsKICAJaWYgKGNwID09IE5V
TEwpCiAgCSAgICBjb250aW51ZTsKICAJKmNwKysgPSAnXDAnOwogIAl2YWwgPSBjcDsKICAJY3Ag
PSBzdHJjaHIgKHZhbCwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgY29udGludWU7
CiEgCSpjcCsrID0gJyYnOwogIAljcCA9IHN0cmNociAoY3AsICdcdCcpOwogIAlpZiAoY3AgPT0g
TlVMTCkKICAJICAgIGNvbnRpbnVlOwohIAkqY3ArKyA9ICcmJzsKICAJY3AgPSBzdHJjaHIgKGNw
LCAnXHQnKTsKICAJaWYgKGNwID09IE5VTEwpCiAgCSAgICBjb250aW51ZTsKICAJKmNwKysgPSAn
XDAnOwogIAl3YXRjaGVzID0gY3A7CiAgCWNwID0gc3RyY2hyIChjcCwgJ1xuJyk7CiAgCWlmIChj
cCA9PSBOVUxMKQogIAkgICAgY29udGludWU7CiAgCSpjcCA9ICdcMCc7CiAgCiAgCW5vdGlmeV9k
byAobm90aWZfdHlwZSwgZmlsZW5hbWUsIGdldGNhbGxlciAoKSwgdmFsLCB3YXRjaGVzLAogIAkJ
ICAgZmluZm8tPnJlcG9zaXRvcnkpOwogICAgICB9CiAgICAgIGZyZWUgKGxpbmUpOwogIAogICAg
ICBpZiAoZmVycm9yIChmcCkpCioqKioqKioqKioqKioqKgoqKiogNDE0LDQ1MiAqKioqCiAgCSAg
ICBjYXNlICc/JzoKICAJICAgIGRlZmF1bHQ6CiAgCQl1c2FnZSAoZWRpdF91c2FnZSk7CiAgCQli
cmVhazsKICAJfQogICAgICB9CiAgICAgIGFyZ2MgLT0gb3B0aW5kOwogICAgICBhcmd2ICs9IG9w
dGluZDsKICAKICAgICAgaWYgKGFfb21pdHRlZCkKICAgICAgewogIAlzZXR0aW5nX3RlZGl0ID0g
MTsKICAJc2V0dGluZ190dW5lZGl0ID0gMTsKICAJc2V0dGluZ190Y29tbWl0ID0gMTsKICAgICAg
fQogIAohICAgICBpZiAoc3RycGJyayAoaG9zdG5hbWUsICIrLD47PVx0XG4iKSAhPSBOVUxMKQog
IAllcnJvciAoMSwgMCwKISAJICAgICAgICJob3N0IG5hbWUgKCVzKSBjb250YWlucyBhbiBpbnZh
bGlkIGNoYXJhY3RlciAoKyw+Oz1cXHRcXG4pIiwKICAJICAgICAgIGhvc3RuYW1lKTsKISAgICAg
aWYgKHN0cnBicmsgKEN1ckRpciwgIissPjs9XHRcbiIpICE9IE5VTEwpCiAgCWVycm9yICgxLCAw
LAohICJjdXJyZW50IGRpcmVjdG9yeSAoJXMpIGNvbnRhaW5zIGFuIGludmFsaWQgY2hhcmFjdGVy
ICgrLD47PVxcdFxcbikiLAogIAkgICAgICAgQ3VyRGlyKTsKICAKICAgICAgLyogTm8gbmVlZCB0
byByZWFkbG9jayBzaW5jZSB3ZSBhcmVuJ3QgZG9pbmcgYW55dGhpbmcgdG8gdGhlCiAgICAgICAg
IHJlcG9zaXRvcnkuICAqLwogICAgICBlcnIgPSBzdGFydF9yZWN1cnNpb24gKGVkaXRfZmlsZXBy
b2MsIChGSUxFU0RPTkVQUk9DKSBOVUxMLAogIAkJCSAgIChESVJFTlRQUk9DKSBOVUxMLCAoRElS
TEVBVkVQUk9DKSBOVUxMLCBOVUxMLAogIAkJCSAgIGFyZ2MsIGFyZ3YsIGxvY2FsLCBXX0xPQ0FM
LCAwLCAwLCAoY2hhciAqKU5VTEwsCiAgCQkJICAgMCk7CiAgCiAgICAgIGVyciArPSBzZW5kX25v
dGlmaWNhdGlvbnMgKGFyZ2MsIGFyZ3YsIGxvY2FsKTsKICAKICAgICAgcmV0dXJuIGVycjsKICB9
CiAgCiAgc3RhdGljIGludCB1bmVkaXRfZmlsZXByb2MgUFJPVE8gKCh2b2lkICpjYWxsZXJkYXQs
IHN0cnVjdCBmaWxlX2luZm8gKmZpbmZvKSk7CiAgCi0tLSA0MTQsNDUyIC0tLS0KICAJICAgIGNh
c2UgJz8nOgogIAkgICAgZGVmYXVsdDoKICAJCXVzYWdlIChlZGl0X3VzYWdlKTsKICAJCWJyZWFr
OwogIAl9CiAgICAgIH0KICAgICAgYXJnYyAtPSBvcHRpbmQ7CiAgICAgIGFyZ3YgKz0gb3B0aW5k
OwogIAogICAgICBpZiAoYV9vbWl0dGVkKQogICAgICB7CiAgCXNldHRpbmdfdGVkaXQgPSAxOwog
IAlzZXR0aW5nX3R1bmVkaXQgPSAxOwogIAlzZXR0aW5nX3Rjb21taXQgPSAxOwogICAgICB9CiAg
CiEgICAgIGlmIChzdHJwYnJrIChob3N0bmFtZSwgIiYsPjs9XHRcbiIpICE9IE5VTEwpCiAgCWVy
cm9yICgxLCAwLAohIAkgICAgICAgImhvc3QgbmFtZSAoJXMpIGNvbnRhaW5zIGFuIGludmFsaWQg
Y2hhcmFjdGVyICgmLD47PVxcdFxcbikiLAogIAkgICAgICAgaG9zdG5hbWUpOwohICAgICBpZiAo
c3RycGJyayAoQ3VyRGlyLCAiJiw+Oz1cdFxuIikgIT0gTlVMTCkKICAJZXJyb3IgKDEsIDAsCiEg
ImN1cnJlbnQgZGlyZWN0b3J5ICglcykgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKCYs
Pjs9XFx0XFxuKSIsCiAgCSAgICAgICBDdXJEaXIpOwogIAogICAgICAvKiBObyBuZWVkIHRvIHJl
YWRsb2NrIHNpbmNlIHdlIGFyZW4ndCBkb2luZyBhbnl0aGluZyB0byB0aGUKICAgICAgICAgcmVw
b3NpdG9yeS4gICovCiAgICAgIGVyciA9IHN0YXJ0X3JlY3Vyc2lvbiAoZWRpdF9maWxlcHJvYywg
KEZJTEVTRE9ORVBST0MpIE5VTEwsCiAgCQkJICAgKERJUkVOVFBST0MpIE5VTEwsIChESVJMRUFW
RVBST0MpIE5VTEwsIE5VTEwsCiAgCQkJICAgYXJnYywgYXJndiwgbG9jYWwsIFdfTE9DQUwsIDAs
IDAsIChjaGFyICopTlVMTCwKICAJCQkgICAwKTsKICAKICAgICAgZXJyICs9IHNlbmRfbm90aWZp
Y2F0aW9ucyAoYXJnYywgYXJndiwgbG9jYWwpOwogIAogICAgICByZXR1cm4gZXJyOwogIH0KICAK
ICBzdGF0aWMgaW50IHVuZWRpdF9maWxlcHJvYyBQUk9UTyAoKHZvaWQgKmNhbGxlcmRhdCwgc3Ry
dWN0IGZpbGVfaW5mbyAqZmluZm8pKTsKICAKKioqKioqKioqKioqKioqCioqKiA3OTUsODI3ICoq
KioKICAKICAJaWYgKChzaXplX3QpKGVuZHAgLSBwKSA9PSBzdHJsZW4gKHdobykgJiYgc3RybmNt
cCAod2hvLCBwLCBlbmRwIC0gcCkgPT0gMCkKICAJewogIAkgICAgLyogRG9uJ3Qgbm90aWZ5IHVz
ZXIgb2YgdGhlaXIgb3duIGNoYW5nZXMuICBXb3VsZCBwZXJoYXBzCiAgCSAgICAgICBiZSBiZXR0
ZXIgdG8gY2hlY2sgd2hldGhlciBpdCBpcyB0aGUgc2FtZSB3b3JraW5nCiAgCSAgICAgICBkaXJl
Y3RvcnksIG5vdCB0aGUgc2FtZSB1c2VyLCBidXQgdGhhdCBpcyBoYWlyeS4gICovCiAgCSAgICBw
ID0gbmV4dHAgPT0gTlVMTCA/IG5leHRwIDogbmV4dHAgKyAxOwogIAkgICAgY29udGludWU7CiAg
CX0KICAKICAJLyogTm93IHdlIHBvaW50IHEgYXQgYSBzdHJpbmcgd2hpY2ggbG9va3MgbGlrZQog
IAkgICAiZWRpdCt1bmVkaXQrY29tbWl0LCIuLi4gYW5kIHdhbGsgZG93biBpdC4gICovCiAgCXEg
PSBlbmRwICsgMTsKICAJbm90aWYgPSBOVUxMOwogIAl3aGlsZSAocSAhPSBOVUxMKQogIAl7CiEg
CSAgICBlbmRxID0gc3RyY2hyIChxLCAnKycpOwogIAkgICAgaWYgKGVuZHEgPT0gTlVMTCB8fCAo
bmV4dHAgIT0gTlVMTCAmJiBlbmRxID4gbmV4dHApKQogIAkgICAgewogIAkJaWYgKG5leHRwID09
IE5VTEwpCiAgCQkgICAgZW5kcSA9IHEgKyBzdHJsZW4gKHEpOwogIAkJZWxzZQogIAkJICAgIGVu
ZHEgPSBuZXh0cDsKICAJCW5leHRxID0gTlVMTDsKICAJICAgIH0KICAJICAgIGVsc2UKICAJCW5l
eHRxID0gZW5kcSArIDE7CiAgCiAgCSAgICAvKiBJZiB0aGVyZSBpcyBhIHRlbXBvcmFyeSBhbmQg
YSByZWd1bGFyIHdhdGNoLCBzZW5kIGEgc2luZ2xlCiAgCSAgICAgICBub3RpZmljYXRpb24sIGZv
ciB0aGUgcmVndWxhciB3YXRjaC4gICovCiAgCSAgICBpZiAodHlwZSA9PSAnRScgJiYgZW5kcSAt
IHEgPT0gNCAmJiBzdHJuY21wICgiZWRpdCIsIHEsIDQpID09IDApCiAgCSAgICB7CiAgCQlub3Rp
ZiA9ICJlZGl0IjsKLS0tIDc5NSw4MjcgLS0tLQogIAogIAlpZiAoKHNpemVfdCkoZW5kcCAtIHAp
ID09IHN0cmxlbiAod2hvKSAmJiBzdHJuY21wICh3aG8sIHAsIGVuZHAgLSBwKSA9PSAwKQogIAl7
CiAgCSAgICAvKiBEb24ndCBub3RpZnkgdXNlciBvZiB0aGVpciBvd24gY2hhbmdlcy4gIFdvdWxk
IHBlcmhhcHMKICAJICAgICAgIGJlIGJldHRlciB0byBjaGVjayB3aGV0aGVyIGl0IGlzIHRoZSBz
YW1lIHdvcmtpbmcKICAJICAgICAgIGRpcmVjdG9yeSwgbm90IHRoZSBzYW1lIHVzZXIsIGJ1dCB0
aGF0IGlzIGhhaXJ5LiAgKi8KICAJICAgIHAgPSBuZXh0cCA9PSBOVUxMID8gbmV4dHAgOiBuZXh0
cCArIDE7CiAgCSAgICBjb250aW51ZTsKICAJfQogIAogIAkvKiBOb3cgd2UgcG9pbnQgcSBhdCBh
IHN0cmluZyB3aGljaCBsb29rcyBsaWtlCiAgCSAgICJlZGl0K3VuZWRpdCtjb21taXQsIi4uLiBh
bmQgd2FsayBkb3duIGl0LiAgKi8KICAJcSA9IGVuZHAgKyAxOwogIAlub3RpZiA9IE5VTEw7CiAg
CXdoaWxlIChxICE9IE5VTEwpCiAgCXsKISAJICAgIGVuZHEgPSBzdHJjaHIgKHEsICcmJyk7CiAg
CSAgICBpZiAoZW5kcSA9PSBOVUxMIHx8IChuZXh0cCAhPSBOVUxMICYmIGVuZHEgPiBuZXh0cCkp
CiAgCSAgICB7CiAgCQlpZiAobmV4dHAgPT0gTlVMTCkKICAJCSAgICBlbmRxID0gcSArIHN0cmxl
biAocSk7CiAgCQllbHNlCiAgCQkgICAgZW5kcSA9IG5leHRwOwogIAkJbmV4dHEgPSBOVUxMOwog
IAkgICAgfQogIAkgICAgZWxzZQogIAkJbmV4dHEgPSBlbmRxICsgMTsKICAKICAJICAgIC8qIElm
IHRoZXJlIGlzIGEgdGVtcG9yYXJ5IGFuZCBhIHJlZ3VsYXIgd2F0Y2gsIHNlbmQgYSBzaW5nbGUK
ICAJICAgICAgIG5vdGlmaWNhdGlvbiwgZm9yIHRoZSByZWd1bGFyIHdhdGNoLiAgKi8KICAJICAg
IGlmICh0eXBlID09ICdFJyAmJiBlbmRxIC0gcSA9PSA0ICYmIHN0cm5jbXAgKCJlZGl0IiwgcSwg
NCkgPT0gMCkKICAJICAgIHsKICAJCW5vdGlmID0gImVkaXQiOwoqKioqKioqKioqKioqKioKKioq
IDEwNDcsMTA3OSAqKioqCiAgICAgIHAgPSB0aGVtOwogICAgICB3aGlsZSAoMSkKICAgICAgewog
IAljdnNfb3V0cHV0ICgiXHQiLCAxKTsKICAJd2hpbGUgKCpwICE9ICc+JyAmJiAqcCAhPSAnXDAn
KQogIAkgICAgY3ZzX291dHB1dCAocCsrLCAxKTsKICAJaWYgKCpwID09ICdcMCcpCiAgCXsKICAJ
ICAgIC8qIE9ubHkgaGFwcGVucyBpZiBhdHRyaWJ1dGUgaXMgbWlzZm9ybWVkLiAgKi8KICAJICAg
IGN2c19vdXRwdXQgKCJcbiIsIDEpOwogIAkgICAgYnJlYWs7CiAgCX0KICAJKytwOwogIAljdnNf
b3V0cHV0ICgiXHQiLCAxKTsKICAJd2hpbGUgKDEpCiAgCXsKISAJICAgIHdoaWxlICgqcCAhPSAn
KycgJiYgKnAgIT0gJywnICYmICpwICE9ICdcMCcpCiAgCQljdnNfb3V0cHV0IChwKyssIDEpOwog
IAkgICAgaWYgKCpwID09ICdcMCcpCiAgCSAgICB7CiAgCQljdnNfb3V0cHV0ICgiXG4iLCAxKTsK
ICAJCWdvdG8gb3V0OwogIAkgICAgfQogIAkgICAgaWYgKCpwID09ICcsJykKICAJICAgIHsKICAJ
CSsrcDsKICAJCWJyZWFrOwogIAkgICAgfQogIAkgICAgKytwOwogIAkgICAgY3ZzX291dHB1dCAo
Ilx0IiwgMSk7CiAgCX0KICAJY3ZzX291dHB1dCAoIlxuIiwgMSk7CiAgICAgIH0KLS0tIDEwNDcs
MTA3OSAtLS0tCiAgICAgIHAgPSB0aGVtOwogICAgICB3aGlsZSAoMSkKICAgICAgewogIAljdnNf
b3V0cHV0ICgiXHQiLCAxKTsKICAJd2hpbGUgKCpwICE9ICc+JyAmJiAqcCAhPSAnXDAnKQogIAkg
ICAgY3ZzX291dHB1dCAocCsrLCAxKTsKICAJaWYgKCpwID09ICdcMCcpCiAgCXsKICAJICAgIC8q
IE9ubHkgaGFwcGVucyBpZiBhdHRyaWJ1dGUgaXMgbWlzZm9ybWVkLiAgKi8KICAJICAgIGN2c19v
dXRwdXQgKCJcbiIsIDEpOwogIAkgICAgYnJlYWs7CiAgCX0KICAJKytwOwogIAljdnNfb3V0cHV0
ICgiXHQiLCAxKTsKICAJd2hpbGUgKDEpCiAgCXsKISAJICAgIHdoaWxlICgqcCAhPSAnLCcgJiYg
KnAgIT0gJ1wwJykKICAJCWN2c19vdXRwdXQgKHArKywgMSk7CiAgCSAgICBpZiAoKnAgPT0gJ1ww
JykKICAJICAgIHsKICAJCWN2c19vdXRwdXQgKCJcbiIsIDEpOwogIAkJZ290byBvdXQ7CiAgCSAg
ICB9CiAgCSAgICBpZiAoKnAgPT0gJywnKQogIAkgICAgewogIAkJKytwOwogIAkJYnJlYWs7CiAg
CSAgICB9CiAgCSAgICArK3A7CiAgCSAgICBjdnNfb3V0cHV0ICgiXHQiLCAxKTsKICAJfQogIAlj
dnNfb3V0cHV0ICgiXG4iLCAxKTsKICAgICAgfQpJbmRleDogc3JjL3NlcnZlci5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9ob21lL255YXAvLmN2c3Jvb3QvY3ZzL3NyYy9zZXJ2ZXIuYyx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEuOC4xCmRp
ZmYgLUMxNiAtdyAtcjEuMS4xLjEgLXIxLjEuMS4xLjguMQoqKiogc3JjL3NlcnZlci5jCTIwMDEv
MDMvMDYgMTY6MjE6MjEJMS4xLjEuMQotLS0gc3JjL3NlcnZlci5jCTIwMDEvMDMvMDggMTM6MjI6
MDQJMS4xLjEuMS44LjEKKioqKioqKioqKioqKioqCioqKiAxOTkwLDIwMzggKioqKgogIAkJZWxz
ZQogIAkJewogIAkJICAgIHNwcmludGYgKHBlbmRpbmdfZXJyb3JfdGV4dCwKICAJCQkgICAgICJF
IGVycm9yIHJlYWRpbmcgbm90aWZpY2F0aW9uIGZvciAlcyIsIGFyZyk7CiAgCQkgICAgcGVuZGlu
Z19lcnJvciA9IHN0YXR1czsKICAJCX0KICAJICAgIH0KICAJfQogIAlmcmVlIChuZXctPmZpbGVu
YW1lKTsKICAJZnJlZSAobmV3LT5kaXIpOwogIAlmcmVlIChuZXcpOwogICAgICB9CiAgICAgIGVs
c2UKICAgICAgewogIAljaGFyICpjcDsKICAKISAJaWYgKHN0cmNociAoZGF0YSwgJysnKSkKICAJ
ICAgIGdvdG8gZXJyb3I7CiAgCiAgCW5ldy0+dHlwZSA9IGRhdGE7CiAgCWlmIChkYXRhWzFdICE9
ICdcdCcpCiAgCSAgICBnb3RvIGVycm9yOwogIAlkYXRhWzFdID0gJ1wwJzsKICAJY3AgPSBkYXRh
ICsgMjsKICAJbmV3LT52YWwgPSBjcDsKICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJaWYg
KGNwID09IE5VTEwpCiAgCSAgICBnb3RvIGVycm9yOwohIAkqY3ArKyA9ICcrJzsKICAJY3AgPSBz
dHJjaHIgKGNwLCAnXHQnKTsKICAJaWYgKGNwID09IE5VTEwpCiAgCSAgICBnb3RvIGVycm9yOwoh
IAkqY3ArKyA9ICcrJzsKICAJY3AgPSBzdHJjaHIgKGNwLCAnXHQnKTsKICAJaWYgKGNwID09IE5V
TEwpCiAgCSAgICBnb3RvIGVycm9yOwogIAkqY3ArKyA9ICdcMCc7CiAgCW5ldy0+d2F0Y2hlcyA9
IGNwOwogIAkvKiBJZiB0aGVyZSBpcyBhbm90aGVyIHRhYiwgaWdub3JlIGV2ZXJ5dGhpbmcgYWZ0
ZXIgaXQsCiAgCSAgIGZvciBmdXR1cmUgZXhwYW5zaW9uLiAgKi8KICAJY3AgPSBzdHJjaHIgKGNw
LCAnXHQnKTsKICAJaWYgKGNwICE9IE5VTEwpCiAgCXsKICAJICAgICpjcCA9ICdcMCc7CiAgCX0K
ICAKICAJbmV3LT5uZXh0ID0gTlVMTDsKICAKICAJaWYgKGxhc3Rfbm9kZSA9PSBOVUxMKQotLS0g
MTk5MCwyMDM4IC0tLS0KICAJCWVsc2UKICAJCXsKICAJCSAgICBzcHJpbnRmIChwZW5kaW5nX2Vy
cm9yX3RleHQsCiAgCQkJICAgICAiRSBlcnJvciByZWFkaW5nIG5vdGlmaWNhdGlvbiBmb3IgJXMi
LCBhcmcpOwogIAkJICAgIHBlbmRpbmdfZXJyb3IgPSBzdGF0dXM7CiAgCQl9CiAgCSAgICB9CiAg
CX0KICAJZnJlZSAobmV3LT5maWxlbmFtZSk7CiAgCWZyZWUgKG5ldy0+ZGlyKTsKICAJZnJlZSAo
bmV3KTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAJY2hhciAqY3A7CiAgCiEgCWlmIChz
dHJjaHIgKGRhdGEsICcmJykpCiAgCSAgICBnb3RvIGVycm9yOwogIAogIAluZXctPnR5cGUgPSBk
YXRhOwogIAlpZiAoZGF0YVsxXSAhPSAnXHQnKQogIAkgICAgZ290byBlcnJvcjsKICAJZGF0YVsx
XSA9ICdcMCc7CiAgCWNwID0gZGF0YSArIDI7CiAgCW5ldy0+dmFsID0gY3A7CiAgCWNwID0gc3Ry
Y2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgZ290byBlcnJvcjsKISAJ
KmNwKysgPSAnJic7CiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxM
KQogIAkgICAgZ290byBlcnJvcjsKISAJKmNwKysgPSAnJic7CiAgCWNwID0gc3RyY2hyIChjcCwg
J1x0Jyk7CiAgCWlmIChjcCA9PSBOVUxMKQogIAkgICAgZ290byBlcnJvcjsKICAJKmNwKysgPSAn
XDAnOwogIAluZXctPndhdGNoZXMgPSBjcDsKICAJLyogSWYgdGhlcmUgaXMgYW5vdGhlciB0YWIs
IGlnbm9yZSBldmVyeXRoaW5nIGFmdGVyIGl0LAogIAkgICBmb3IgZnV0dXJlIGV4cGFuc2lvbi4g
ICovCiAgCWNwID0gc3RyY2hyIChjcCwgJ1x0Jyk7CiAgCWlmIChjcCAhPSBOVUxMKQogIAl7CiAg
CSAgICAqY3AgPSAnXDAnOwogIAl9CiAgCiAgCW5ldy0+bmV4dCA9IE5VTEw7CiAgCiAgCWlmIChs
YXN0X25vZGUgPT0gTlVMTCkK

--0__=a6Tg9VWWsW4kmwTlkBpYklxVcFDK5wEUPsimFEjMU0ZJDGnJLWPyMEqp--


This communication is for informational purposes only.  It is not intended
as
an offer or solicitation for the purchase or sale of any financial
instrument
or as an official confirmation of any transaction. All market prices, data
and other information are not warranted as to completeness or accuracy and
are subject to change without notice. Any comments or statements made herein
do not necessarily reflect those of J.P. Morgan Chase & Co., its
subsidiaries and affiliates.




--__--__--

_______________________________________________
Info-cvs mailing list
address@hidden
http://mail.gnu.org/mailman/listinfo/info-cvs


End of Info-cvs Digest

_____________________________________________________________________
This e-mail message has been scanned for the presence of all known computer
viruses by the MessageLabs Virus Control Center.  However, it is still
recommended that you use local virus scanning software to monitor for the
presence of viruses.  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]