public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: optimization/6323: GCC 3.1 regression from previous snapshot
@ 2002-04-17  0:06 Gwenole Beauchesne
  0 siblings, 0 replies; 7+ messages in thread
From: Gwenole Beauchesne @ 2002-04-17  0:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/6323; it has been noted by GNATS.

From: Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
To: rth@gcc.gnu.org, gbeauchesne@mandrakesoft.com,
	gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, mark@codesourcery.com,
	jason@redhat.com, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: optimization/6323: GCC 3.1 regression from previous snapshot
Date: Wed, 17 Apr 2002 09:02:36 +0200

 Hi,
 
 Actually, I usually build with -O3 + other flags and caught the ICE in 
 libjava, for the first time, in the 2002/04/15 snapshot. Previous one 
 was virtually fine, probably due to the fact that CFLAGS et al. were not 
 propagated down to libjava at this time. Then, I determined "-O1 
 -finline-functions" was enough to trigger the ICE even on previous 
 snapshots until the 2002/03/25 one or minus Roger's patch. Anyway, he 
 got a patch.
 
 Thanks,
 Gwenole.
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: optimization/6323: GCC 3.1 regression from previous snapshot
@ 2002-04-18 10:28 mmitchel
  0 siblings, 0 replies; 7+ messages in thread
From: mmitchel @ 2002-04-18 10:28 UTC (permalink / raw)
  To: gbeauchesne, gcc-bugs, gcc-prs, mark, jason, nobody

Synopsis: GCC 3.1 regression from previous snapshot

State-Changed-From-To: open->closed
State-Changed-By: mmitchel
State-Changed-When: Thu Apr 18 10:28:08 2002
State-Changed-Why:
    Duplicate of PR6352.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6323


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: optimization/6323: GCC 3.1 regression from previous snapshot
@ 2002-04-16 18:55 rth
  0 siblings, 0 replies; 7+ messages in thread
From: rth @ 2002-04-16 18:55 UTC (permalink / raw)
  To: gbeauchesne, gcc-bugs, gcc-prs, mark, jason, nobody, rth

Synopsis: GCC 3.1 regression from previous snapshot

Responsible-Changed-From-To: rth->unassigned
Responsible-Changed-By: rth
Responsible-Changed-When: Tue Apr 16 18:55:29 2002
Responsible-Changed-Why:
    I was wrong: this is a front end crash.  The reason everyone
    else can build libjava is that they're using -O2 instead of -O1
    which doesn't show the problem.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6323


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: optimization/6323: GCC 3.1 regression from previous snapshot
@ 2002-04-16 18:11 rth
  0 siblings, 0 replies; 7+ messages in thread
From: rth @ 2002-04-16 18:11 UTC (permalink / raw)
  To: gbeauchesne, gcc-bugs, gcc-prs, mark

Synopsis: GCC 3.1 regression from previous snapshot

Responsible-Changed-From-To: unassigned->rth
Responsible-Changed-By: rth
Responsible-Changed-When: Tue Apr 16 18:11:52 2002
Responsible-Changed-Why:
    Suspect it's somehow specific to i586 code generation,
    since i386 and i686 work fine.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6323


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: optimization/6323: GCC 3.1 regression from previous snapshot
@ 2002-04-16  6:56 Gwenole Beauchesne
  0 siblings, 0 replies; 7+ messages in thread
From: Gwenole Beauchesne @ 2002-04-16  6:56 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/6323; it has been noted by GNATS.

From: Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
To: gcc-gnats@gcc.gnu.org, <gcc-prs@gcc.gnu.org>, <mark@codesourcery.com>,
        <gcc-bugs@gcc.gnu.org>, <nobody@gcc.gnu.org>, <jason@redhat.com>,
        <roger@eyesopen.com>
Cc:  
Subject: Re: optimization/6323: GCC 3.1 regression from previous snapshot
Date: Tue, 16 Apr 2002 15:49:09 +0200 (CEST)

 Hi,
 
 The following patch appears to have caused the regression:
 <http://gcc.gnu.org/ml/gcc-patches/2002-03/msg01513.html>
 
 2002-03-28  Roger Sayle  <roger@eyesopen.com>
 
         PR c++/5998:
         * decl.c (cxx_init_decl_processing): Re-enable built-in functions
         in the g++ front-end.
         (duplicate_decl): Allow redefinition of anticipated built-ins.
         Fix inlining problem by over-writing the old DECL_RTL.
         (lookup_namespace_name): Fail to find an identifier in the
         specified namespace if its still anticipated.
         (builtin_function_1): New function split out from builtin_function
         to create a builtin in the current namespace with given context.
         (builtin_function): Call builtin_function_1 to define the
         appropriate builtins in both the std and global namespaces.
         (select_decl): Don't test for anticipated decls here.
         (unqualified_namespace_lookup): Instead ignore them whilst
         searching through scopes and namespaces.
         * decl2.c (do_nonmember_using_decl): If a using declaration
         specifies an anticipated built-in function, mark it as no longer
         anticipated in that scope.
         (ambiguous_decl):  Avoid resolving to an anticipated decl.
         * lex.c (do_scoped_id): Fail to find an identifier in the global
         namespace if its still anticipated.
 
 Bye,
 Gwenole.
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: optimization/6323: GCC 3.1 regression from previous snapshot
@ 2002-04-16  6:26 Gwenole Beauchesne
  0 siblings, 0 replies; 7+ messages in thread
From: Gwenole Beauchesne @ 2002-04-16  6:26 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/6323; it has been noted by GNATS.

From: Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
To: gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org, mark@codesourcery.com,
        gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org, jason@redhat.com
Cc:  
Subject: Re: optimization/6323: GCC 3.1 regression from previous snapshot
Date: Tue, 16 Apr 2002 15:21:21 +0200

 Hi,
 
 Sirs, sorry for having concatenated your e-mail addresses in the 
 original report. ;-)
 
 FWIW, the error message from GNU C++ version 3.1 20020401 (prerelease) 
 is different from the 2002/04/16 snapshot:
 
 In file included from ../../../libjava/include/jvm.h:110:
 ../../../libjava/exception.cc: At global scope:
 ../../../libjava/exception.cc:28: Internal compiler error in 
 expand_call_inline
    , at tree-inline.c:898
 Please submit a full bug report,
 with preprocessed source if appropriate.
 See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
 
 It works with GNU C++ version 3.1 20020325 (prerelease).
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6323 
 
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* optimization/6323: GCC 3.1 regression from previous snapshot
@ 2002-04-16  6:06 gbeauchesne
  0 siblings, 0 replies; 7+ messages in thread
From: gbeauchesne @ 2002-04-16  6:06 UTC (permalink / raw)
  To: gcc-gnats; +Cc: mark


>Number:         6323
>Category:       optimization
>Synopsis:       GCC 3.1 regression from previous snapshot
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Apr 16 06:06:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Gwenole Beauchesne
>Release:        GNU C++ version 3.1 20020416 (prerelease)
>Organization:
>Environment:
i586-mandrake-linux-gnu
>Description:
GCC now fails to compile libjava/exception.cc with optimizations.

../../../libjava/exception.cc:30: Internal compiler error in
   genrtl_finish_function, at cp/semantics.c:2622
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
Compile the attached preprocessed source from libjava/exception.cc with -O1 -finline-functions.
>Fix:
Don't use -finline-functions or fallback to snapshot 2002/03/25. Note that the problem appears with snapshot from 2002/04/01.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="exception.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="exception.ii"

IyAxICIuLi8uLi8uLi9saWJqYXZhL2V4Y2VwdGlvbi5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEg
Ijxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNjIgojIDEx
ICIuLi8uLi8uLi9saWJqYXZhL2V4Y2VwdGlvbi5jYyIKIyAxICJpbmNsdWRlL2NvbmZpZy5oIiAx
CiMgMTIgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNjIiAyCgojIDEgIi9ob21lL2diL3Jw
bS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMTQ3ICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1t
YW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRy
ZGlmZl90OwojIDIwMSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJh
a2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50
IHNpemVfdDsKIyAxNCAiLi4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiIDIKIyAxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEg
Ii9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9n
Y2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIg
MSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNy
L2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVz
LmgiIDIgMwoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAg
ICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVk
IGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsK
ICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVk
OwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7
CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50
OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0
cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVm
IHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2
X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBp
bnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXgg
KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19u
cHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRv
aSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u
ZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9s
ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxv
bmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo
cm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRl
cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CiMgMjEx
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAx
IDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2Fs
ZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9s
b3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAyMTIg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9s
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNp
Z25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j
YWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBk
b3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf
dCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4
dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBf
X3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRl
bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gX19pbmxp
bmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJu
YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0
b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xf
aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l
IHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJv
dyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i
YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRl
cm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4g
X19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lv
bl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50
IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5z
aWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhy
b3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf
X2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp
bnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4g
X19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwg
KF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3Vs
bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lu
bGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1
cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBp
bnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkg
c3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUg
bG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4g
c3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRy
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwg
MTApOwp9CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEg
KGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQv
Z2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2ln
bmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7
CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90
OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQg
X19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVm
IHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19l
eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5
cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0
eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYg
X191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9p
bnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3Qg
X19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlw
ZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5
cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsy
XTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpf
X2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxv
bmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYg
aW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBp
bnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoK
dHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtj
bnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf
X2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVm
IF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90
OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29m
ZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9w
dGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVk
ZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hl
ZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIg
MiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBp
bnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVj
dCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7
CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2No
ZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29w
ZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpf
X3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5
cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0
aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9y
ZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBp
bnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJl
YWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhy
ZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVk
ZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg
X19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0
ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3Ig
X19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsK
fSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7
CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9s
YXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0
IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQg
X19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2Jh
cnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2Jh
cnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMg
MTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3No
b3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xv
bmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7
CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoK
CnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsK
CgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoK
CnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsK
CgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoK
CgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7
CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsK
CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90
OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU5ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5
cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi9ob21lL2diL3JwbS9C
VUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hv
cnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19R
SV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I
SV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19T
SV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19E
SV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlw
ZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkp
OwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIv
dXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK
CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQg
LyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAz
NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBz
aWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7
CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2lu
Y2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9z
ZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRl
ZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9f
ZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgog
IH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVj
dCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAg
ICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0
IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAg
ICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAg
ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93
ICgpOwoKCn0KIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRl
ZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90
OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYg
X19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmls
Y250NjRfdDsKCgp9CiMgMzkxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRl
cm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9t
ICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0
YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpz
ZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9t
X2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMy
X3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCBy
YW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3Ig
KHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNy
YW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1Zikg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEg
Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFy
ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJh
bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJh
bmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3Nl
ZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsK
ZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
aW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpl
eHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4g
dW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZb
M10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19w
YXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2ln
bmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0
OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5k
NDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19y
ZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50
IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5k
NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyNyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9f
c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lk
IGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQg
Kl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1
ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMu
MS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJu
IHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBf
X3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4g
aW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwg
c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQp
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBf
X3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2Vj
dXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3Jl
cGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJv
dyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1w
IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAo
Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1
MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpf
X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIg
Kl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmls
ZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNjcyICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19y
ZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9f
Y29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNv
bXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpf
X2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVy
biB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBp
bnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4
dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMg
KGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBs
ZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3Qg
bGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
Y2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy
ICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0
aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAq
X19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0
cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hh
ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBx
ZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2No
YXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3
Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkg
dGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRz
dWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
c2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
cG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdy
YW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9f
ZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBf
X25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgMTUgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9u
LmNjIiAyCgojIDEgIi4uLy4uLy4uL2xpYmphdmEvamF2YS9sYW5nL0NsYXNzLmgiIDEKIyAxNSAi
Li4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcvQ2xhc3MuaCIKI3ByYWdtYSBpbnRlcmZhY2UKCiMg
MSAiLi4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcvT2JqZWN0LmgiIDEKIyAxNCAiLi4vLi4vLi4v
bGliamF2YS9qYXZhL2xhbmcvT2JqZWN0LmgiCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgIi4uLy4u
Ly4uL2xpYmphdmEvZ2NqL2phdmFwcmltcy5oIiAxCiMgMTUgIi4uLy4uLy4uL2xpYmphdmEvZ2Nq
L2phdmFwcmltcy5oIgojcHJhZ21hIEdDQyBqYXZhX2V4Y2VwdGlvbnMKCiMgMSAiZ2NqL2xpYmdj
ai1jb25maWcuaCIgMQojIDE4ICIuLi8uLi8uLi9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIgMgoj
IDI5ICIuLi8uLi8uLi9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIKZXh0ZXJuICJKYXZhIgp7CiAg
dHlwZWRlZiBfX2phdmFfYnl0ZSBqYnl0ZTsKICB0eXBlZGVmIF9famF2YV9zaG9ydCBqc2hvcnQ7
CiAgdHlwZWRlZiBfX2phdmFfaW50IGppbnQ7CiAgdHlwZWRlZiBfX2phdmFfbG9uZyBqbG9uZzsK
ICB0eXBlZGVmIF9famF2YV9mbG9hdCBqZmxvYXQ7CiAgdHlwZWRlZiBfX2phdmFfZG91YmxlIGpk
b3VibGU7CiAgdHlwZWRlZiBfX2phdmFfY2hhciBqY2hhcjsKICB0eXBlZGVmIF9famF2YV9ib29s
ZWFuIGpib29sZWFuOwogIHR5cGVkZWYgamludCBqc2l6ZTsKCgoKICBuYW1lc3BhY2UgamF2YQog
IHsKICAgIG5hbWVzcGFjZSBpbwogICAgewogICAgICBjbGFzcyBCdWZmZXJlZElucHV0U3RyZWFt
OwogICAgICBjbGFzcyBCdWZmZXJlZE91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnVmZmVyZWRS
ZWFkZXI7CiAgICAgIGNsYXNzIEJ1ZmZlcmVkV3JpdGVyOwogICAgICBjbGFzcyBCeXRlQXJyYXlJ
bnB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwogICAgICBjbGFz
cyBDaGFyQXJyYXlSZWFkZXI7CiAgICAgIGNsYXNzIENoYXJBcnJheVdyaXRlcjsKICAgICAgY2xh
c3MgQ2hhckNvbnZlcnNpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIERhdGFJbnB1dDsKICAgICAg
Y2xhc3MgRGF0YUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBEYXRhT3V0cHV0OwogICAgICBjbGFz
cyBEYXRhT3V0cHV0U3RyZWFtOwogICAgICBjbGFzcyBFT0ZFeGNlcHRpb247CiAgICAgIGNsYXNz
IEV4dGVybmFsaXphYmxlOwogICAgICBjbGFzcyBGaWxlOwogICAgICBjbGFzcyBGaWxlRGVzY3Jp
cHRvcjsKICAgICAgY2xhc3MgRmlsZUZpbHRlcjsKICAgICAgY2xhc3MgRmlsZUlucHV0U3RyZWFt
OwogICAgICBjbGFzcyBGaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAgIGNsYXNzIEZpbGVPdXRw
dXRTdHJlYW07CiAgICAgIGNsYXNzIEZpbGVQZXJtaXNzaW9uOwogICAgICBjbGFzcyBGaWxlUmVh
ZGVyOwogICAgICBjbGFzcyBGaWxlV3JpdGVyOwogICAgICBjbGFzcyBGaWxlbmFtZUZpbHRlcjsK
ICAgICAgY2xhc3MgRmlsdGVySW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIEZpbHRlck91dHB1dFN0
cmVhbTsKICAgICAgY2xhc3MgRmlsdGVyUmVhZGVyOwogICAgICBjbGFzcyBGaWx0ZXJXcml0ZXI7
CiAgICAgIGNsYXNzIElPRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnB1dFN0cmVhbTsKICAgICAg
Y2xhc3MgSW5wdXRTdHJlYW1SZWFkZXI7CiAgICAgIGNsYXNzIEludGVyZmFjZUNvbXBhcmF0b3I7
CiAgICAgIGNsYXNzIEludGVycnVwdGVkSU9FeGNlcHRpb247CiAgICAgIGNsYXNzIEludmFsaWRD
bGFzc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSW52YWxpZE9iamVjdEV4Y2VwdGlvbjsKICAgICAg
Y2xhc3MgTGluZU51bWJlcklucHV0U3RyZWFtOwogICAgICBjbGFzcyBMaW5lTnVtYmVyUmVhZGVy
OwogICAgICBjbGFzcyBNZW1iZXJDb21wYXJhdG9yOwogICAgICBjbGFzcyBOb3RBY3RpdmVFeGNl
cHRpb247CiAgICAgIGNsYXNzIE5vdFNlcmlhbGl6YWJsZUV4Y2VwdGlvbjsKICAgICAgY2xhc3Mg
T2JqZWN0SW5wdXQ7CiAgICAgIGNsYXNzIE9iamVjdElucHV0U3RyZWFtOwogICAgICBjbGFzcyBP
YmplY3RJbnB1dFN0cmVhbSRHZXRGaWVsZDsKICAgICAgY2xhc3MgT2JqZWN0SW5wdXRWYWxpZGF0
aW9uOwogICAgICBjbGFzcyBPYmplY3RPdXRwdXQ7CiAgICAgIGNsYXNzIE9iamVjdE91dHB1dFN0
cmVhbTsKICAgICAgY2xhc3MgT2JqZWN0T3V0cHV0U3RyZWFtJFB1dEZpZWxkOwogICAgICBjbGFz
cyBPYmplY3RTdHJlYW1DbGFzczsKICAgICAgY2xhc3MgT2JqZWN0U3RyZWFtQ29uc3RhbnRzOwog
ICAgICBjbGFzcyBPYmplY3RTdHJlYW1FeGNlcHRpb247CiAgICAgIGNsYXNzIE9iamVjdFN0cmVh
bUZpZWxkOwogICAgICBjbGFzcyBPcHRpb25hbERhdGFFeGNlcHRpb247CiAgICAgIGNsYXNzIE91
dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgT3V0cHV0U3RyZWFtV3JpdGVyOwogICAgICBjbGFzcyBQ
aXBlZElucHV0U3RyZWFtOwogICAgICBjbGFzcyBQaXBlZE91dHB1dFN0cmVhbTsKICAgICAgY2xh
c3MgUGlwZWRSZWFkZXI7CiAgICAgIGNsYXNzIFBpcGVkV3JpdGVyOwogICAgICBjbGFzcyBQcmlu
dFN0cmVhbTsKICAgICAgY2xhc3MgUHJpbnRXcml0ZXI7CiAgICAgIGNsYXNzIFB1c2hiYWNrSW5w
dXRTdHJlYW07CiAgICAgIGNsYXNzIFB1c2hiYWNrUmVhZGVyOwogICAgICBjbGFzcyBSYW5kb21B
Y2Nlc3NGaWxlOwogICAgICBjbGFzcyBSZWFkZXI7CiAgICAgIGNsYXNzIFNlcXVlbmNlSW5wdXRT
dHJlYW07CiAgICAgIGNsYXNzIFNlcmlhbGl6YWJsZTsKICAgICAgY2xhc3MgU2VyaWFsaXphYmxl
UGVybWlzc2lvbjsKICAgICAgY2xhc3MgU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uOwogICAgICBj
bGFzcyBTdHJlYW1Ub2tlbml6ZXI7CiAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcklucHV0U3RyZWFt
OwogICAgICBjbGFzcyBTdHJpbmdSZWFkZXI7CiAgICAgIGNsYXNzIFN0cmluZ1dyaXRlcjsKICAg
ICAgY2xhc3MgU3luY0ZhaWxlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgVVRGRGF0YUZvcm1hdEV4
Y2VwdGlvbjsKICAgICAgY2xhc3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKICAgICAg
Y2xhc3MgVmFsaWRhdG9yQW5kUHJpb3JpdHk7CiAgICAgIGNsYXNzIFdyaXRlQWJvcnRlZEV4Y2Vw
dGlvbjsKICAgICAgY2xhc3MgV3JpdGVyOwogICAgfTsKCiAgICBuYW1lc3BhY2UgbGFuZwogICAg
ewogICAgICBjbGFzcyBBYnN0cmFjdE1ldGhvZEVycm9yOwogICAgICBjbGFzcyBBcml0aG1ldGlj
RXhjZXB0aW9uOwogICAgICBjbGFzcyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb247CiAg
ICAgIGNsYXNzIEFycmF5U3RvcmVFeGNlcHRpb247CiAgICAgIGNsYXNzIEJvb2xlYW47CiAgICAg
IGNsYXNzIEJ5dGU7CiAgICAgIGNsYXNzIENQbHVzUGx1c0RlbWFuZ2xlcjsKICAgICAgY2xhc3Mg
Q2hhclNlcXVlbmNlOwogICAgICBjbGFzcyBDaGFyYWN0ZXI7CiAgICAgIGNsYXNzIENoYXJhY3Rl
ciRTdWJzZXQ7CiAgICAgIGNsYXNzIENoYXJhY3RlciRVbmljb2RlQmxvY2s7CiAgICAgIGNsYXNz
IENsYXNzOwogICAgICBjbGFzcyBDbGFzc0Nhc3RFeGNlcHRpb247CiAgICAgIGNsYXNzIENsYXNz
Q2lyY3VsYXJpdHlFcnJvcjsKICAgICAgY2xhc3MgQ2xhc3NGb3JtYXRFcnJvcjsKICAgICAgY2xh
c3MgQ2xhc3NMb2FkZXI7CiAgICAgIGNsYXNzIENsYXNzTm90Rm91bmRFeGNlcHRpb247CiAgICAg
IGNsYXNzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogICAgICBjbGFzcyBDbG9uZWFibGU7
CiAgICAgIGNsYXNzIENvbXBhcmFibGU7CiAgICAgIGNsYXNzIENvbXBpbGVyOwogICAgICBjbGFz
cyBDb25jcmV0ZVByb2Nlc3M7CiAgICAgIGNsYXNzIERvdWJsZTsKICAgICAgY2xhc3MgRXJyb3I7
CiAgICAgIGNsYXNzIEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgRXhjZXB0aW9uSW5Jbml0aWFsaXpl
ckVycm9yOwogICAgICBjbGFzcyBGbG9hdDsKICAgICAgY2xhc3MgSWxsZWdhbEFjY2Vzc0Vycm9y
OwogICAgICBjbGFzcyBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRp
b247CiAgICAgIGNsYXNzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgSWxsZWdh
bFRocmVhZFN0YXRlRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbmNvbXBhdGlibGVDbGFzc0NoYW5n
ZUVycm9yOwogICAgICBjbGFzcyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uOwogICAgICBjbGFz
cyBJbmhlcml0YWJsZVRocmVhZExvY2FsOwogICAgICBjbGFzcyBJbnN0YW50aWF0aW9uRXJyb3I7
CiAgICAgIGNsYXNzIEluc3RhbnRpYXRpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIEludGVnZXI7
CiAgICAgIGNsYXNzIEludGVybmFsRXJyb3I7CiAgICAgIGNsYXNzIEludGVycnVwdGVkRXhjZXB0
aW9uOwogICAgICBjbGFzcyBMaW5rYWdlRXJyb3I7CiAgICAgIGNsYXNzIExvbmc7CiAgICAgIGNs
YXNzIE1hdGg7CiAgICAgIGNsYXNzIE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uOwogICAgICBj
bGFzcyBOb0NsYXNzRGVmRm91bmRFcnJvcjsKICAgICAgY2xhc3MgTm9TdWNoRmllbGRFcnJvcjsK
ICAgICAgY2xhc3MgTm9TdWNoRmllbGRFeGNlcHRpb247CiAgICAgIGNsYXNzIE5vU3VjaE1ldGhv
ZEVycm9yOwogICAgICBjbGFzcyBOb1N1Y2hNZXRob2RFeGNlcHRpb247CiAgICAgIGNsYXNzIE51
bGxQb2ludGVyRXhjZXB0aW9uOwogICAgICBjbGFzcyBOdW1iZXI7CiAgICAgIGNsYXNzIE51bWJl
ckZvcm1hdEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgT2JqZWN0OwogICAgICBjbGFzcyBPdXRPZk1l
bW9yeUVycm9yOwogICAgICBjbGFzcyBQYWNrYWdlOwogICAgICBjbGFzcyBQcm9jZXNzOwogICAg
ICBjbGFzcyBSdW5uYWJsZTsKICAgICAgY2xhc3MgUnVudGltZTsKICAgICAgY2xhc3MgUnVudGlt
ZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgUnVudGltZVBlcm1pc3Npb247CiAgICAgIGNsYXNzIFNl
Y3VyaXR5Q29udGV4dDsKICAgICAgY2xhc3MgU2VjdXJpdHlFeGNlcHRpb247CiAgICAgIGNsYXNz
IFNlY3VyaXR5TWFuYWdlcjsKICAgICAgY2xhc3MgU2hvcnQ7CiAgICAgIGNsYXNzIFN0YWNrT3Zl
cmZsb3dFcnJvcjsKICAgICAgY2xhc3MgU3RyaWN0TWF0aDsKICAgICAgY2xhc3MgU3RyaW5nOwog
ICAgICBjbGFzcyBTdHJpbmckQ2FzZUluc2Vuc2l0aXZlQ29tcGFyYXRvcjsKICAgICAgY2xhc3Mg
U3RyaW5nQnVmZmVyOwogICAgICBjbGFzcyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9u
OwogICAgICBjbGFzcyBTeXN0ZW07CiAgICAgIGNsYXNzIFRocmVhZDsKICAgICAgY2xhc3MgVGhy
ZWFkRGVhdGg7CiAgICAgIGNsYXNzIFRocmVhZEdyb3VwOwogICAgICBjbGFzcyBUaHJlYWRMb2Nh
bDsKICAgICAgY2xhc3MgVGhyZWFkTG9jYWwkVmFsdWU7CiAgICAgIGNsYXNzIFRocm93YWJsZTsK
ICAgICAgY2xhc3MgVW5rbm93bkVycm9yOwogICAgICBjbGFzcyBVbnNhdGlzZmllZExpbmtFcnJv
cjsKICAgICAgY2xhc3MgVW5zdXBwb3J0ZWRDbGFzc1ZlcnNpb25FcnJvcjsKICAgICAgY2xhc3Mg
VW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CiAgICAgIGNsYXNzIFZNQ2xhc3NMb2FkZXI7
CiAgICAgIGNsYXNzIFZNU2VjdXJpdHlNYW5hZ2VyOwogICAgICBjbGFzcyBWZXJpZnlFcnJvcjsK
ICAgICAgY2xhc3MgVmlydHVhbE1hY2hpbmVFcnJvcjsKICAgICAgY2xhc3MgVm9pZDsKICAgICAg
bmFtZXNwYWNlIHJlZgogICAgICB7CiAgICAgICAgY2xhc3MgUGhhbnRvbVJlZmVyZW5jZTsKICAg
ICAgICBjbGFzcyBSZWZlcmVuY2U7CiAgICAgICAgY2xhc3MgUmVmZXJlbmNlUXVldWU7CiAgICAg
ICAgY2xhc3MgU29mdFJlZmVyZW5jZTsKICAgICAgICBjbGFzcyBXZWFrUmVmZXJlbmNlOwogICAg
ICB9OwoKICAgICAgbmFtZXNwYWNlIHJlZmxlY3QKICAgICAgewogICAgICAgIGNsYXNzIEFjY2Vz
c2libGVPYmplY3Q7CiAgICAgICAgY2xhc3MgQXJyYXk7CiAgICAgICAgY2xhc3MgQ29uc3RydWN0
b3I7CiAgICAgICAgY2xhc3MgRmllbGQ7CiAgICAgICAgY2xhc3MgSW52b2NhdGlvblRhcmdldEV4
Y2VwdGlvbjsKICAgICAgICBjbGFzcyBNZW1iZXI7CiAgICAgICAgY2xhc3MgTWV0aG9kOwogICAg
ICAgIGNsYXNzIE1vZGlmaWVyOwogICAgICAgIGNsYXNzIFJlZmxlY3RQZXJtaXNzaW9uOwogICAg
ICB9OwogICAgfTsKCiAgICBuYW1lc3BhY2UgdXRpbAogICAgewogICAgICBjbGFzcyBBYnN0cmFj
dENvbGxlY3Rpb247CiAgICAgIGNsYXNzIEFic3RyYWN0TGlzdDsKICAgICAgY2xhc3MgQWJzdHJh
Y3RMaXN0JEFic3RyYWN0TGlzdEl0cjsKICAgICAgY2xhc3MgQWJzdHJhY3RNYXA7CiAgICAgIGNs
YXNzIEFic3RyYWN0U2VxdWVudGlhbExpc3Q7CiAgICAgIGNsYXNzIEFic3RyYWN0U2V0OwogICAg
ICBjbGFzcyBBcnJheUxpc3Q7CiAgICAgIGNsYXNzIEFycmF5czsKICAgICAgY2xhc3MgQXJyYXlz
JExpc3RJbXBsOwogICAgICBjbGFzcyBCYXNpY01hcEVudHJ5OwogICAgICBjbGFzcyBCaXRTZXQ7
CiAgICAgIGNsYXNzIENhbGVuZGFyOwogICAgICBjbGFzcyBDb2xsZWN0aW9uOwogICAgICBjbGFz
cyBDb2xsZWN0aW9uczsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkUmV2ZXJzZUNvbXBhcmF0b3I7
CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZENvbGxlY3Rpb247CiAgICAgIGNs
YXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZEl0ZXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0
aW9ucyRTeW5jaHJvbml6ZWRMaXN0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6
ZWRMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5bmNocm9uaXplZE1hcDsK
ICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkU2V0OwogICAgICBjbGFzcyBDb2xs
ZWN0aW9ucyRTeW5jaHJvbml6ZWRTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFN5
bmNocm9uaXplZFNvcnRlZFNldDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxl
Q29sbGVjdGlvbjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlSXRlcmF0b3I7
CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3Q7CiAgICAgIGNsYXNzIENv
bGxlY3Rpb25zJFVubW9kaWZpYWJsZUxpc3RJdGVyYXRvcjsKICAgICAgY2xhc3MgQ29sbGVjdGlv
bnMkVW5tb2RpZmlhYmxlTWFwOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRVbm1vZGlmaWFibGVT
ZXQ7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZVNvcnRlZE1hcDsKICAgICAg
Y2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlU29ydGVkU2V0OwogICAgICBjbGFzcyBDb21w
YXJhdG9yOwogICAgICBjbGFzcyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uOwogICAg
ICBjbGFzcyBEYXRlOwogICAgICBjbGFzcyBEaWN0aW9uYXJ5OwogICAgICBjbGFzcyBFbXB0eVN0
YWNrRXhjZXB0aW9uOwogICAgICBjbGFzcyBFbnVtZXJhdGlvbjsKICAgICAgY2xhc3MgRXZlbnRM
aXN0ZW5lcjsKICAgICAgY2xhc3MgRXZlbnRPYmplY3Q7CiAgICAgIGNsYXNzIEdyZWdvcmlhbkNh
bGVuZGFyOwogICAgICBjbGFzcyBIYXNoTWFwOwogICAgICBjbGFzcyBIYXNoTWFwJEhhc2hFbnRy
eTsKICAgICAgY2xhc3MgSGFzaE1hcCRIYXNoSXRlcmF0b3I7CiAgICAgIGNsYXNzIEhhc2hTZXQ7
CiAgICAgIGNsYXNzIEhhc2h0YWJsZTsKICAgICAgY2xhc3MgSGFzaHRhYmxlJEVudW1lcmF0b3I7
CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRIYXNoRW50cnk7CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRI
YXNoSXRlcmF0b3I7CiAgICAgIGNsYXNzIElkZW50aXR5SGFzaE1hcDsKICAgICAgY2xhc3MgSWRl
bnRpdHlIYXNoTWFwJElkZW50aXR5SXRlcmF0b3I7CiAgICAgIGNsYXNzIEl0ZXJhdG9yOwogICAg
ICBjbGFzcyBMaW5rZWRIYXNoTWFwOwogICAgICBjbGFzcyBMaW5rZWRIYXNoTWFwJExpbmtlZEhh
c2hFbnRyeTsKICAgICAgY2xhc3MgTGlua2VkTGlzdDsKICAgICAgY2xhc3MgTGlua2VkTGlzdCRF
bnRyeTsKICAgICAgY2xhc3MgTGlua2VkTGlzdCRMaW5rZWRMaXN0SXRyOwogICAgICBjbGFzcyBM
aXN0OwogICAgICBjbGFzcyBMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIExpc3RSZXNvdXJjZUJ1
bmRsZTsKICAgICAgY2xhc3MgTG9jYWxlOwogICAgICBjbGFzcyBNYXA7CiAgICAgIGNsYXNzIE1h
cCRFbnRyeTsKICAgICAgY2xhc3MgTWFwJE1hcDsKICAgICAgY2xhc3MgTWlzc2luZ1Jlc291cmNl
RXhjZXB0aW9uOwogICAgICBjbGFzcyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwogICAgICBjbGFz
cyBPYnNlcnZhYmxlOwogICAgICBjbGFzcyBPYnNlcnZlcjsKICAgICAgY2xhc3MgUHJvcGVydGll
czsKICAgICAgY2xhc3MgUHJvcGVydHlQZXJtaXNzaW9uOwogICAgICBjbGFzcyBQcm9wZXJ0eVJl
c291cmNlQnVuZGxlOwogICAgICBjbGFzcyBSYW5kb207CiAgICAgIGNsYXNzIFJhbmRvbUFjY2Vz
czsKICAgICAgY2xhc3MgUmVzb3VyY2VCdW5kbGU7CiAgICAgIGNsYXNzIFNldDsKICAgICAgY2xh
c3MgU2ltcGxlVGltZVpvbmU7CiAgICAgIGNsYXNzIFNvcnRlZE1hcDsKICAgICAgY2xhc3MgU29y
dGVkU2V0OwogICAgICBjbGFzcyBTdGFjazsKICAgICAgY2xhc3MgU3RyaW5nVG9rZW5pemVyOwog
ICAgICBjbGFzcyBTdWJMaXN0OwogICAgICBjbGFzcyBUaW1lWm9uZTsKICAgICAgY2xhc3MgVGlt
ZXI7CiAgICAgIGNsYXNzIFRpbWVyJFNjaGVkdWxlcjsKICAgICAgY2xhc3MgVGltZXIkVGFza1F1
ZXVlOwogICAgICBjbGFzcyBUaW1lclRhc2s7CiAgICAgIGNsYXNzIFRvb01hbnlMaXN0ZW5lcnNF
eGNlcHRpb247CiAgICAgIGNsYXNzIFRyZWVNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkTm9kZTsK
ICAgICAgY2xhc3MgVHJlZU1hcCRTdWJNYXA7CiAgICAgIGNsYXNzIFRyZWVNYXAkVHJlZUl0ZXJh
dG9yOwogICAgICBjbGFzcyBUcmVlTWFwJFZlcmlmeVJlc3VsdDsKICAgICAgY2xhc3MgVHJlZVNl
dDsKICAgICAgY2xhc3MgVmVjdG9yOwogICAgICBjbGFzcyBXZWFrSGFzaE1hcDsKICAgICAgY2xh
c3MgV2Vha0hhc2hNYXAkRW50cnk7CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJFdlYWtCdWNrZXQ7
CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJFdlYWtFbnRyeVNldDsKICAgICAgbmFtZXNwYWNlIGph
cgogICAgICB7CiAgICAgICAgY2xhc3MgQXR0cmlidXRlczsKICAgICAgICBjbGFzcyBBdHRyaWJ1
dGVzJE5hbWU7CiAgICAgICAgY2xhc3MgSmFyRW50cnk7CiAgICAgICAgY2xhc3MgSmFyRXhjZXB0
aW9uOwogICAgICAgIGNsYXNzIEphckZpbGU7CiAgICAgICAgY2xhc3MgSmFyRmlsZSRKYXJFbnVt
ZXJhdGlvbjsKICAgICAgICBjbGFzcyBKYXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBKYXJP
dXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgTWFuaWZlc3Q7CiAgICAgIH07CgogICAgICBuYW1l
c3BhY2UgemlwCiAgICAgIHsKICAgICAgICBjbGFzcyBBZGxlcjMyOwogICAgICAgIGNsYXNzIENS
QzMyOwogICAgICAgIGNsYXNzIENoZWNrZWRJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBDaGVj
a2VkT3V0cHV0U3RyZWFtOwogICAgICAgIGNsYXNzIENoZWNrc3VtOwogICAgICAgIGNsYXNzIERh
dGFGb3JtYXRFeGNlcHRpb247CiAgICAgICAgY2xhc3MgRGVmbGF0ZXI7CiAgICAgICAgY2xhc3Mg
RGVmbGF0ZXJPdXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgR1pJUElucHV0U3RyZWFtOwogICAg
ICAgIGNsYXNzIEdaSVBPdXRwdXRTdHJlYW07CiAgICAgICAgY2xhc3MgSW5mbGF0ZXI7CiAgICAg
ICAgY2xhc3MgSW5mbGF0ZXJJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBaaXBDb25zdGFudHM7
CiAgICAgICAgY2xhc3MgWmlwRW50cnk7CiAgICAgICAgY2xhc3MgWmlwRW51bWVyYXRpb247CiAg
ICAgICAgY2xhc3MgWmlwRXhjZXB0aW9uOwogICAgICAgIGNsYXNzIFppcEZpbGU7CiAgICAgICAg
Y2xhc3MgWmlwSW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgWmlwT3V0cHV0U3RyZWFtOwogICAg
ICB9OwogICAgfTsKICB9Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgamF2YTo6bGFuZzo6T2JqZWN0KiBq
b2JqZWN0Owp0eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzKiBqY2xhc3M7CnR5cGVkZWYg
Y2xhc3MgamF2YTo6bGFuZzo6VGhyb3dhYmxlKiBqdGhyb3dhYmxlOwp0eXBlZGVmIGNsYXNzIGph
dmE6Omxhbmc6OlN0cmluZyoganN0cmluZzsKc3RydWN0IF9Kdl9KTklFbnY7Cgp0eXBlZGVmIHN0
cnVjdCBfSnZfRmllbGQgKmpmaWVsZElEOwp0eXBlZGVmIHN0cnVjdCBfSnZfTWV0aG9kICpqbWV0
aG9kSUQ7CgpleHRlcm4gIkMiIGpvYmplY3QgX0p2X0FsbG9jT2JqZWN0IChqY2xhc3MsIGppbnQp
IF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxv
Y09iamVjdE5vRmluYWxpemVyIChqY2xhc3MsIGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9j
X18pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9BbGxvY09iamVjdE5vSW5pdE5vRmluYWxpemVy
IChqY2xhc3MsIGppbnQpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCiAgZXh0ZXJuICJD
IiBqb2JqZWN0IF9Kdl9BbGxvY1B0ckZyZWVPYmplY3QgKGpjbGFzcywgamludCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgoKCgoKCmV4
dGVybiAiQyIgamJvb2xlYW4gX0p2X0lzSW5zdGFuY2VPZihqb2JqZWN0LCBqY2xhc3MpOwpleHRl
cm4gIkMiIGpzdHJpbmcgX0p2X0FsbG9jU3RyaW5nKGpzaXplKSBfX2F0dHJpYnV0ZV9fKChfX21h
bGxvY19fKSk7CmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3U3RyaW5nIChjb25zdCBqY2hhcios
IGpzaXplKQogIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuIGppbnQgX0p2X0Zv
cm1hdEludCAoamNoYXIqIGJ1ZmVuZCwgamludCBudW0pOwpleHRlcm4gIkMiIGpjaGFyKiBfSnZf
R2V0U3RyaW5nQ2hhcnMgKGpzdHJpbmcgc3RyKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9Nb25pdG9y
RW50ZXIgKGpvYmplY3QpOwpleHRlcm4gIkMiIHZvaWQgX0p2X01vbml0b3JFeGl0IChqb2JqZWN0
KTsKZXh0ZXJuICJDIiBqc3RyaW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEoY29uc3QgY2hhciosIGpz
aXplKQogIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZf
R2V0U3RyaW5nVVRGTGVuZ3RoIChqc3RyaW5nKTsKZXh0ZXJuICJDIiBqc2l6ZSBfSnZfR2V0U3Ry
aW5nVVRGUmVnaW9uIChqc3RyaW5nLCBqc2l6ZSwganNpemUsIGNoYXIgKik7CgpleHRlcm4gamlu
dCBfSnZfQ3JlYXRlSmF2YVZNICh2b2lkKiApOwoKdm9pZApfSnZfVGhyZWFkUnVuIChqYXZhOjps
YW5nOjpUaHJlYWQqIHRocmVhZCk7CmppbnQKX0p2X0F0dGFjaEN1cnJlbnRUaHJlYWQoamF2YTo6
bGFuZzo6VGhyZWFkKiB0aHJlYWQpOwpleHRlcm4gIkMiIGphdmE6Omxhbmc6OlRocmVhZCoKX0p2
X0F0dGFjaEN1cnJlbnRUaHJlYWQoanN0cmluZyBuYW1lLCBqYXZhOjpsYW5nOjpUaHJlYWRHcm91
cCogZ3JvdXApOwpleHRlcm4gIkMiIGppbnQgX0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQp
OwoKZXh0ZXJuICJDIiB2b2lkIF9Kdl9UaHJvdyAoanRocm93YWJsZSkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwpleHRlcm4gIkMiIHZvaWQqIF9Kdl9NYWxsb2MgKGpzaXplKSBfX2F0
dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIgdm9pZCogX0p2X1JlYWxsb2MgKHZv
aWQgKiwganNpemUpOwpleHRlcm4gIkMiIHZvaWQgX0p2X0ZyZWUgKHZvaWQqKTsKZXh0ZXJuIHZv
aWQgKCpfSnZfUmVnaXN0ZXJDbGFzc0hvb2spIChqY2xhc3MgY2wpOwpleHRlcm4gIkMiIHZvaWQg
X0p2X1JlZ2lzdGVyQ2xhc3NIb29rRGVmYXVsdCAoamNsYXNzKTsKCnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgX0p2X3VzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9Kdl91aW50IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykp
KTsKCnN0cnVjdCBfSnZfVXRmOENvbnN0CnsKICBfSnZfdXNob3J0IGhhc2g7CiAgX0p2X3VzaG9y
dCBsZW5ndGg7CiAgY2hhciBkYXRhWzFdOwp9OwojIDE3ICIuLi8uLi8uLi9saWJqYXZhL2phdmEv
bGFuZy9PYmplY3QuaCIgMgoKCgpzdHJ1Y3QgX0p2T2JqZWN0UHJlZml4CnsKcHJvdGVjdGVkOgoK
ICB2aXJ0dWFsIHZvaWQgbmFjZF8xICh2b2lkKSB7fTsKCgogICAgdmlydHVhbCB2b2lkIG5hY2Rf
MiAodm9pZCkge307Cgp9OwoKY2xhc3MgamF2YTo6bGFuZzo6T2JqZWN0IDogcHVibGljIF9Kdk9i
amVjdFByZWZpeAp7CnByb3RlY3RlZDoKICB2aXJ0dWFsIHZvaWQgZmluYWxpemUgKHZvaWQpOwpw
dWJsaWM6CgogIGpjbGFzcyBnZXRDbGFzcyAodm9pZCk7CiAgdmlydHVhbCBqaW50IGhhc2hDb2Rl
ICh2b2lkKTsKICB2b2lkIG5vdGlmeSAodm9pZCk7CiAgdm9pZCBub3RpZnlBbGwgKHZvaWQpOwog
IHZvaWQgd2FpdCAoamxvbmcgdGltZW91dCwgamludCBuYW5vcyk7CiAgdmlydHVhbCBqYm9vbGVh
biBlcXVhbHMgKGpvYmplY3Qgb2JqKTsKICBPYmplY3QgKHZvaWQpOwogIHZpcnR1YWwganN0cmlu
ZyB0b1N0cmluZyAodm9pZCk7CiAgdm9pZCB3YWl0ICh2b2lkKTsKICB2b2lkIHdhaXQgKGpsb25n
IHRpbWVvdXQpOwoKICBmcmllbmQgdm9pZCBfSnZfTW9uaXRvckVudGVyIChqb2JqZWN0IG9iaik7
CiAgZnJpZW5kIHZvaWQgX0p2X01vbml0b3JFeGl0IChqb2JqZWN0IG9iaik7CiAgZnJpZW5kIHZv
aWQgX0p2X0luaXRpYWxpemVTeW5jTXV0ZXggKHZvaWQpOwogIGZyaWVuZCB2b2lkIF9Kdl9GaW5h
bGl6ZU9iamVjdCAoam9iamVjdCBvYmopOwojIDYwICIuLi8uLi8uLi9saWJqYXZhL2phdmEvbGFu
Zy9PYmplY3QuaCIKICBzdGF0aWMgamF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwoKcHJvdGVjdGVk
OgogIHZpcnR1YWwgam9iamVjdCBjbG9uZSAodm9pZCk7Cgpwcml2YXRlOgojIDc0ICIuLi8uLi8u
Li9saWJqYXZhL2phdmEvbGFuZy9PYmplY3QuaCIKICAgIHZvaWQgc3luY19pbml0ICh2b2lkKTsK
fTsKIyAxOCAiLi4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEv
bGFuZy9TdHJpbmcuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKIyAxICIuLi8uLi8uLi9s
aWJqYXZhL2djai9hcnJheS5oIiAxCiMgMTYgIi4uLy4uLy4uL2xpYmphdmEvZ2NqL2FycmF5Lmgi
CmV4dGVybiAiSmF2YSIgewoKY2xhc3MgX19KQXJyYXkgOiBwdWJsaWMgamF2YTo6bGFuZzo6T2Jq
ZWN0CnsKcHJvdGVjdGVkOgoKCgogIF9fSkFycmF5ICgpIDogbGVuZ3RoICgwKQogIHsKICB9CnB1
YmxpYzoKICBjb25zdCBqc2l6ZSBsZW5ndGg7CiAgZnJpZW5kIGpzaXplIEp2R2V0QXJyYXlMZW5n
dGggKF9fSkFycmF5Kik7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBKQXJyYXkgOiBwdWJs
aWMgX19KQXJyYXkKewogIFQgZGF0YVswXTsKcHVibGljOgogIGZyaWVuZCBUKiBlbGVtZW50czw+
KEpBcnJheTxUPiYgeCk7CiAgZnJpZW5kIFQqIGVsZW1lbnRzPD4oSkFycmF5PFQ+KiB4KTsKCgp9
OwoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIFQqIGVsZW1lbnRzKEpBcnJheTxUPiYgeCkgeyBy
ZXR1cm4geC5kYXRhOyB9CnRlbXBsYXRlPGNsYXNzIFQ+CmlubGluZSBUKiBlbGVtZW50cyhKQXJy
YXk8VD4qIHgpIHsgcmV0dXJuIHgtPmRhdGE7IH0KCn07CgoKdHlwZWRlZiBfX0pBcnJheSAqamFy
cmF5Owp0eXBlZGVmIEpBcnJheTxqb2JqZWN0PiAqam9iamVjdEFycmF5Owp0eXBlZGVmIEpBcnJh
eTxqYm9vbGVhbj4gKmpib29sZWFuQXJyYXk7CnR5cGVkZWYgSkFycmF5PGpieXRlPiAqamJ5dGVB
cnJheTsKdHlwZWRlZiBKQXJyYXk8amNoYXI+ICpqY2hhckFycmF5Owp0eXBlZGVmIEpBcnJheTxq
c2hvcnQ+ICpqc2hvcnRBcnJheTsKdHlwZWRlZiBKQXJyYXk8amludD4gKmppbnRBcnJheTsKdHlw
ZWRlZiBKQXJyYXk8amxvbmc+ICpqbG9uZ0FycmF5Owp0eXBlZGVmIEpBcnJheTxqZmxvYXQ+ICpq
ZmxvYXRBcnJheTsKdHlwZWRlZiBKQXJyYXk8amRvdWJsZT4gKmpkb3VibGVBcnJheTsKdHlwZWRl
ZiBKQXJyYXk8anN0cmluZz4gKmpzdHJpbmdBcnJheTsKCmV4dGVybiBqYXZhOjpsYW5nOjpDbGFz
cyBfSnZfYnl0ZUNsYXNzLCBfSnZfc2hvcnRDbGFzcywgX0p2X2ludENsYXNzLAogIF9Kdl9sb25n
Q2xhc3MsIF9Kdl9ib29sZWFuQ2xhc3MsIF9Kdl9jaGFyQ2xhc3MsIF9Kdl9mbG9hdENsYXNzLAog
IF9Kdl9kb3VibGVDbGFzcywgX0p2X3ZvaWRDbGFzczsKCgpleHRlcm4gIkMiIGpvYmplY3RBcnJh
eSBfSnZfTmV3T2JqZWN0QXJyYXkoanNpemUgbGVuZ3RoLCBqY2xhc3MsIGpvYmplY3QgaW5pdCk7
CmV4dGVybiAiQyIgam9iamVjdCBfSnZfTmV3UHJpbUFycmF5IChqY2xhc3MgZWx0eXBlLCBqaW50
IGNvdW50KTsKCmV4dGVybiBpbmxpbmUgam9iamVjdEFycmF5Ckp2TmV3T2JqZWN0QXJyYXkgKGpz
aXplIGxlbmd0aCwgamNsYXNzIGNscywgam9iamVjdCBpbml0KQp7CiAgcmV0dXJuIF9Kdl9OZXdP
YmplY3RBcnJheSAobGVuZ3RoLCBjbHMsIGluaXQpOwp9CgpleHRlcm4gaW5saW5lIGpjaGFyQXJy
YXkKSnZOZXdDaGFyQXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqY2hhckFycmF5KSBf
SnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfY2hhckNsYXNzKSwgbGVuZ3RoKTsKfQoKZXh0ZXJuIGlu
bGluZSBqYm9vbGVhbkFycmF5Ckp2TmV3Qm9vbGVhbkFycmF5IChqaW50IGxlbmd0aCkKewogIHJl
dHVybiAoamJvb2xlYW5BcnJheSkgX0p2X05ld1ByaW1BcnJheSAoKCYgX0p2X2Jvb2xlYW5DbGFz
cyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamJ5dGVBcnJheQpKdk5ld0J5dGVBcnJheSAo
amludCBsZW5ndGgpCnsKICByZXR1cm4gKGpieXRlQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgm
IF9Kdl9ieXRlQ2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGpzaG9ydEFycmF5Ckp2
TmV3U2hvcnRBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4gKGpzaG9ydEFycmF5KSBfSnZf
TmV3UHJpbUFycmF5ICgoJiBfSnZfc2hvcnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxp
bmUgamludEFycmF5Ckp2TmV3SW50QXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqaW50
QXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9pbnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4
dGVybiBpbmxpbmUgamxvbmdBcnJheQpKdk5ld0xvbmdBcnJheSAoamludCBsZW5ndGgpCnsKICBy
ZXR1cm4gKGpsb25nQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9sb25nQ2xhc3MpLCBs
ZW5ndGgpOwp9CgpleHRlcm4gaW5saW5lIGpmbG9hdEFycmF5Ckp2TmV3RmxvYXRBcnJheSAoamlu
dCBsZW5ndGgpCnsKICByZXR1cm4gKGpmbG9hdEFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBf
SnZfZmxvYXRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamRvdWJsZUFycmF5Ckp2
TmV3RG91YmxlQXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqZG91YmxlQXJyYXkpIF9K
dl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9kb3VibGVDbGFzcyksIGxlbmd0aCk7Cn0KCgpleHRlcm4g
IkMiIGpzdHJpbmdBcnJheSBKdkNvbnZlcnRBcmd2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJn
dik7CgppbmxpbmUganNpemUgSnZHZXRBcnJheUxlbmd0aCAoamFycmF5IGFycmF5KSB7IHJldHVy
biBhcnJheS0+bGVuZ3RoOyB9CiMgMTAgImphdmEvbGFuZy9TdHJpbmcuaCIgMgoKZXh0ZXJuICJK
YXZhIgp7CiAgbmFtZXNwYWNlIGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAg
bmFtZXNwYWNlIHJ1bnRpbWUKICAgICAgewogICAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcjsKICAg
ICAgfQogICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6bGFuZzo6U3RyaW5nIDogcHVibGljIDo6
amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFN0cmluZyAoKTsKICBTdHJpbmcgKDo6amF2
YTo6bGFuZzo6U3RyaW5nICopOwogIFN0cmluZyAoOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIg
Kik7CnB1YmxpYzoKICBTdHJpbmcgKDo6Z251OjpnY2o6OnJ1bnRpbWU6OlN0cmluZ0J1ZmZlciAq
KTsKcHVibGljOgogIFN0cmluZyAoamNoYXJBcnJheSk7CiAgU3RyaW5nIChqY2hhckFycmF5LCBq
aW50LCBqaW50KTsKICBTdHJpbmcgKGpieXRlQXJyYXkpOwogIFN0cmluZyAoamJ5dGVBcnJheSwg
amludCwgamludCk7CiAgU3RyaW5nIChqYnl0ZUFycmF5LCA6OmphdmE6Omxhbmc6OlN0cmluZyAq
KTsKICBTdHJpbmcgKGpieXRlQXJyYXksIGppbnQsIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5n
ICopOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJy
YXkpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJy
YXksIGppbnQsIGppbnQpOwogIFN0cmluZyAoamJ5dGVBcnJheSwgamludCk7CiAgU3RyaW5nIChq
Ynl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9T
dHJpbmcgKCkgeyByZXR1cm4gdGhpczsgfQogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5n
OjpPYmplY3QgKik7CiAgamludCBoYXNoQ29kZSAoKTsKICBqaW50IGxlbmd0aCAoKSB7IHJldHVy
biBjb3VudDsgfQogIGpjaGFyIGNoYXJBdCAoamludCk7CiAgdm9pZCBnZXRDaGFycyAoamludCwg
amludCwgamNoYXJBcnJheSwgamludCk7CiAgamJ5dGVBcnJheSBnZXRCeXRlcyAoKTsKICBqYnl0
ZUFycmF5IGdldEJ5dGVzICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICB2b2lkIGdldEJ5dGVz
IChqaW50LCBqaW50LCBqYnl0ZUFycmF5LCBqaW50KTsKICBqY2hhckFycmF5IHRvQ2hhckFycmF5
ICgpOwogIGpib29sZWFuIGVxdWFsc0lnbm9yZUNhc2UgKDo6amF2YTo6bGFuZzo6U3RyaW5nICop
OwogIGppbnQgY29tcGFyZVRvICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGNvbXBh
cmVUbyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamludCBjb21wYXJlVG9JZ25vcmVDYXNl
ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqYm9vbGVhbiByZWdpb25NYXRjaGVzIChqaW50
LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50LCBqaW50KTsKICBqYm9vbGVhbiByZWdpb25N
YXRjaGVzIChqYm9vbGVhbiwgamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgamlu
dCk7CiAgamJvb2xlYW4gc3RhcnRzV2l0aCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamJv
b2xlYW4gc3RhcnRzV2l0aCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamJvb2xl
YW4gZW5kc1dpdGggKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgaW5kZXhPZiAoamlu
dCk7CiAgamludCBpbmRleE9mIChqaW50LCBqaW50KTsKICBqaW50IGluZGV4T2YgKDo6amF2YTo6
bGFuZzo6U3RyaW5nICopOwogIGppbnQgaW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwg
amludCk7CiAgamludCBsYXN0SW5kZXhPZiAoamludCk7CiAgamludCBsYXN0SW5kZXhPZiAoamlu
dCwgamludCk7CiAgamludCBsYXN0SW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAg
amludCBsYXN0SW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgOjpqYXZh
OjpsYW5nOjpDaGFyU2VxdWVuY2UgKnN1YlNlcXVlbmNlIChqaW50LCBqaW50KTsKICA6OmphdmE6
Omxhbmc6OlN0cmluZyAqc3Vic3RyaW5nIChqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAq
c3Vic3RyaW5nIChqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29uY2F0ICg6
OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqcmVwbGFjZSAo
amNoYXIsIGpjaGFyKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9Mb3dlckNhc2UgKDo6amF2
YTo6dXRpbDo6TG9jYWxlICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAo
OjpqYXZhOjp1dGlsOjpMb2NhbGUgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvTG93ZXJD
YXNlICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAoKTsKICA6OmphdmE6
Omxhbmc6OlN0cmluZyAqdHJpbSAoKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZh
bHVlT2YgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0
cmluZyAqdmFsdWVPZiAoamNoYXJBcnJheSk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5n
ICp2YWx1ZU9mIChqY2hhckFycmF5LCBqaW50LCBqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKnZhbHVlT2YgKGpib29sZWFuKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKnZhbHVlT2YgKGpjaGFyKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVl
T2YgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamxvbmcp
OwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamZsb2F0KTsKICBzdGF0
aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpkb3VibGUpOwogIDo6amF2YTo6bGFu
Zzo6U3RyaW5nICppbnRlcm4gKCk7CnByaXZhdGU6CiAgdm9pZCBpbml0ICgpOwogIHZvaWQgaW5p
dCAoamNoYXJBcnJheSwgamludCwgamludCwgamJvb2xlYW4pOwogIHZvaWQgaW5pdCAoamJ5dGVB
cnJheSwgamludCwgamludCwgamludCk7CiAgdm9pZCBpbml0IChqYnl0ZUFycmF5LCBqaW50LCBq
aW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgdm9pZCByZWhhc2ggKCk7CiAg
OjpqYXZhOjpsYW5nOjpPYmplY3QgKmRhdGE7CiAgamludCBib2Zmc2V0OwogIGppbnQgY291bnQ7
CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNjg0OTc5NDQ3MDc1NDY2
NzcxMExMOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6dXRpbDo6Q29tcGFyYXRvciAqQ0FTRV9J
TlNFTlNJVElWRV9PUkRFUjsKICBmcmllbmQgamNoYXIqIF9Kdl9HZXRTdHJpbmdDaGFycyAoanN0
cmluZyBzdHIpOwogIGZyaWVuZCBqc3RyaW5nKiBfSnZfU3RyaW5nRmluZFNsb3QgKGpjaGFyKiwg
amludCwgamludCk7CiAgZnJpZW5kIGpzdHJpbmcqIF9Kdl9TdHJpbmdHZXRTbG90IChqc3RyaW5n
KTsKICBmcmllbmQganN0cmluZyBfSnZfTmV3U3RyaW5nVXRmOENvbnN0IChfSnZfVXRmOENvbnN0
KiBzdHIpOwogIGZyaWVuZCBqc3RyaW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIq
LCBqc2l6ZSk7CiAgZnJpZW5kIGpzdHJpbmcgX0p2X0FsbG9jU3RyaW5nIChqc2l6ZSk7CgogIHN0
YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAxOSAiLi4vLi4vLi4vbGliamF2
YS9qYXZhL2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvbmV0L1VSTC5oIiAxCgoKCgoKI3ByYWdt
YSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGphdmEKICB7CiAgICBu
YW1lc3BhY2UgbmV0CiAgICB7CiAgICAgIGNsYXNzIFVSTENvbm5lY3Rpb247CiAgICAgIGNsYXNz
IFVSTDsKICAgICAgY2xhc3MgVVJMU3RyZWFtSGFuZGxlckZhY3Rvcnk7CiAgICAgIGNsYXNzIFVS
TFN0cmVhbUhhbmRsZXI7CiAgICB9CiAgfQp9OwoKY2xhc3MgOjpqYXZhOjpuZXQ6OlVSTCA6IHB1
YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBVUkwgKDo6amF2YTo6bGFuZzo6
U3RyaW5nICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGppbnQsIDo6amF2YTo6bGFuZzo6U3Ry
aW5nICopOwogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAq
LCA6OmphdmE6Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqKTsKICBVUkwgKDo6amF2YTo6bGFuZzo6
U3RyaW5nICopOwogIFVSTCAoOjpqYXZhOjpuZXQ6OlVSTCAqLCA6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqKTsKICBVUkwgKDo6amF2YTo6bmV0OjpVUkwgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwg
OjpqYXZhOjpuZXQ6OlVSTFN0cmVhbUhhbmRsZXIgKik7CiAgamJvb2xlYW4gZXF1YWxzICg6Omph
dmE6Omxhbmc6Ok9iamVjdCAqKTsKICA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0Q29udGVudCAo
KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0RmlsZSAoKSB7IHJldHVybiBmaWxlOyB9CiAg
OjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFBhdGggKCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcg
KmdldEhvc3QgKCkgeyByZXR1cm4gaG9zdDsgfQogIGppbnQgZ2V0UG9ydCAoKSB7IHJldHVybiBw
b3J0OyB9CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFByb3RvY29sICgpIHsgcmV0dXJuIHBy
b3RvY29sOyB9CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFJlZiAoKSB7IHJldHVybiByZWY7
IH0KICBqaW50IGhhc2hDb2RlICgpOwogIDo6amF2YTo6bmV0OjpVUkxDb25uZWN0aW9uICpvcGVu
Q29ubmVjdGlvbiAoKTsKICA6OmphdmE6OmlvOjpJbnB1dFN0cmVhbSAqb3BlblN0cmVhbSAoKTsK
ICBqYm9vbGVhbiBzYW1lRmlsZSAoOjpqYXZhOjpuZXQ6OlVSTCAqKTsKcHVibGljOgogIHZvaWQg
c2V0ICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50
LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVibGlj
OgogIHN0YXRpYyB2b2lkIHNldFVSTFN0cmVhbUhhbmRsZXJGYWN0b3J5ICg6OmphdmE6Om5ldDo6
VVJMU3RyZWFtSGFuZGxlckZhY3RvcnkgKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvRXh0
ZXJuYWxGb3JtICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKcHJpdmF0
ZToKICA6OmphdmE6Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqc2V0VVJMU3RyZWFtSGFuZGxlciAo
OjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgdm9pZCByZWFkT2JqZWN0ICg6OmphdmE6OmlvOjpP
YmplY3RJbnB1dFN0cmVhbSAqKTsKICB2b2lkIHdyaXRlT2JqZWN0ICg6OmphdmE6OmlvOjpPYmpl
Y3RPdXRwdXRTdHJlYW0gKik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnByb3RvY29sOwogIDo6
amF2YTo6bGFuZzo6U3RyaW5nICpob3N0OwogIGppbnQgcG9ydDsKICA6OmphdmE6Omxhbmc6OlN0
cmluZyAqZmlsZTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqcmVmOwogIGppbnQgaGFzaENvZGVf
XzsKICA6OmphdmE6Om5ldDo6VVJMU3RyZWFtSGFuZGxlciAqaGFuZGxlcjsKICBzdGF0aWMgOjpq
YXZhOjp1dGlsOjpIYXNodGFibGUgKmhhbmRsZXJzOwogIHN0YXRpYyA6OmphdmE6Om5ldDo6VVJM
U3RyZWFtSGFuZGxlckZhY3RvcnkgKmZhY3Rvcnk7CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlh
bFZlcnNpb25VSUQgPSAtNzYyNzYyOTY4ODM2MTUyNDExMExMOwpwdWJsaWM6CgogIHN0YXRpYyA6
OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAyMCAiLi4vLi4vLi4vbGliamF2YS9qYXZh
L2xhbmcvQ2xhc3MuaCIgMgojIDEgImphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyLmgiIDEKCgoK
CgojcHJhZ21hIGludGVyZmFjZQoKCgpjbGFzcyA6OmphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1vZGlm
aWVyIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIE1vZGlmaWVyICgp
OwogIHN0YXRpYyBqYm9vbGVhbiBpc0Fic3RyYWN0IChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4g
aXNGaW5hbCAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzSW50ZXJmYWNlIChqaW50KTsKICBz
dGF0aWMgamJvb2xlYW4gaXNOYXRpdmUgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1ByaXZh
dGUgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1Byb3RlY3RlZCAoamludCk7CiAgc3RhdGlj
IGpib29sZWFuIGlzUHVibGljIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNTdGF0aWMgKGpp
bnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1N0cmljdCAoamludCk7CiAgc3RhdGljIGpib29sZWFu
IGlzU3luY2hyb25pemVkIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNUcmFuc2llbnQgKGpp
bnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1ZvbGF0aWxlIChqaW50KTsKICBzdGF0aWMgOjpqYXZh
OjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nIChqaW50KTsKcHVibGljOgogIHN0YXRpYyA6OmphdmE6
Omxhbmc6OlN0cmluZ0J1ZmZlciAqdG9TdHJpbmcgKGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5n
QnVmZmVyICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGppbnQgUFVCTElDID0gMUw7CiAgc3Rh
dGljIGNvbnN0IGppbnQgUFJJVkFURSA9IDJMOwogIHN0YXRpYyBjb25zdCBqaW50IFBST1RFQ1RF
RCA9IDRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUQVRJQyA9IDhMOwogIHN0YXRpYyBjb25zdCBq
aW50IEZJTkFMID0gMTZMOwogIHN0YXRpYyBjb25zdCBqaW50IFNZTkNIUk9OSVpFRCA9IDMyTDsK
ICBzdGF0aWMgY29uc3QgamludCBWT0xBVElMRSA9IDY0TDsKICBzdGF0aWMgY29uc3QgamludCBU
UkFOU0lFTlQgPSAxMjhMOwogIHN0YXRpYyBjb25zdCBqaW50IE5BVElWRSA9IDI1Nkw7CiAgc3Rh
dGljIGNvbnN0IGppbnQgSU5URVJGQUNFID0gNTEyTDsKICBzdGF0aWMgY29uc3QgamludCBBQlNU
UkFDVCA9IDEwMjRMOwogIHN0YXRpYyBjb25zdCBqaW50IFNUUklDVCA9IDIwNDhMOwpwdWJsaWM6
CiAgc3RhdGljIGNvbnN0IGppbnQgU1VQRVIgPSAzMkw7CiAgc3RhdGljIGNvbnN0IGppbnQgQUxM
X0ZMQUdTID0gNDA5NUw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xh
c3MkOwp9OwojIDIxICIuLi8uLi8uLi9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAyCiMgMSAi
amF2YS9zZWN1cml0eS9Qcm90ZWN0aW9uRG9tYWluLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFj
ZQoKCgpleHRlcm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBz
ZWN1cml0eQogICAgewogICAgICBjbGFzcyBQcm90ZWN0aW9uRG9tYWluOwogICAgICBjbGFzcyBQ
ZXJtaXNzaW9uOwogICAgICBjbGFzcyBQZXJtaXNzaW9uQ29sbGVjdGlvbjsKICAgICAgY2xhc3Mg
Q29kZVNvdXJjZTsKICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6OnNlY3VyaXR5OjpQcm90ZWN0
aW9uRG9tYWluIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFByb3Rl
Y3Rpb25Eb21haW4gKDo6amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKiwgOjpqYXZhOjpzZWN1
cml0eTo6UGVybWlzc2lvbkNvbGxlY3Rpb24gKik7CiAgOjpqYXZhOjpzZWN1cml0eTo6Q29kZVNv
dXJjZSAqZ2V0Q29kZVNvdXJjZSAoKSB7IHJldHVybiBjb2RlX3NvdXJjZTsgfQogIDo6amF2YTo6
c2VjdXJpdHk6OlBlcm1pc3Npb25Db2xsZWN0aW9uICpnZXRQZXJtaXNzaW9ucyAoKSB7IHJldHVy
biBwZXJtczsgfQogIHZpcnR1YWwgamJvb2xlYW4gaW1wbGllcyAoOjpqYXZhOjpzZWN1cml0eTo6
UGVybWlzc2lvbiAqKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAo
KTsKcHJpdmF0ZToKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmxpbmVzZXA7CiAgOjpq
YXZhOjpzZWN1cml0eTo6Q29kZVNvdXJjZSAqY29kZV9zb3VyY2U7CiAgOjpqYXZhOjpzZWN1cml0
eTo6UGVybWlzc2lvbkNvbGxlY3Rpb24gKnBlcm1zOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6
Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAyMiAiLi4vLi4vLi4vbGliamF2YS9qYXZhL2xhbmcv
Q2xhc3MuaCIgMgoKCmV4dGVybiAiQyIgdm9pZCBfSnZfSW5pdENsYXNzIChqY2xhc3Mga2xhc3Mp
OwpleHRlcm4gIkMiIHZvaWQgX0p2X1JlZ2lzdGVyQ2xhc3NlcyAoamNsYXNzICpjbGFzc2VzKTsK
CgpleHRlcm4gIkMiIHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2RJZHggKGpjbGFzcyBr
bGFzcywgamNsYXNzIGlmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtZXRoX2lkeCk7CgoKCgplbnVtCnsKICBKVl9TVEFURV9OT1RISU5HID0g
MCwKCiAgSlZfU1RBVEVfUFJFTE9BRElORyA9IDEsCiAgSlZfU1RBVEVfTE9BRElORyA9IDMsCiAg
SlZfU1RBVEVfTE9BREVEID0gNSwKCiAgSlZfU1RBVEVfQ09NUElMRUQgPSA2LAoKICBKVl9TVEFU
RV9QUkVQQVJFRCA9IDcsCiAgSlZfU1RBVEVfTElOS0VEID0gOSwKCiAgSlZfU1RBVEVfSU5fUFJP
R1JFU1MgPSAxMCwKICBKVl9TVEFURV9ET05FID0gMTIsCgogIEpWX1NUQVRFX0VSUk9SID0gMTQK
fTsKCnN0cnVjdCBfSnZfRmllbGQ7CnN0cnVjdCBfSnZfVlRhYmxlOwp1bmlvbiBfSnZfd29yZDsK
c3RydWN0IF9Kdl9BcnJheVZUYWJsZTsKCnN0cnVjdCBfSnZfQ29uc3RhbnRzCnsKICBqaW50IHNp
emU7CiAgamJ5dGUgKnRhZ3M7CiAgX0p2X3dvcmQgKmRhdGE7Cn07CgpzdHJ1Y3QgX0p2X01ldGhv
ZAp7CgogIF9Kdl9VdGY4Q29uc3QgKm5hbWU7CgogIF9Kdl9VdGY4Q29uc3QgKnNpZ25hdHVyZTsK
CiAgX0p2X3VzaG9ydCBhY2NmbGFnczsKCiAgX0p2X3VzaG9ydCBpbmRleDsKCiAgdm9pZCAqbmNv
ZGU7CgoKICBfSnZfVXRmOENvbnN0ICoqdGhyb3dzOwoKICBfSnZfTWV0aG9kICpnZXROZXh0TWV0
aG9kICgpCiAgeyByZXR1cm4gdGhpcyArIDE7IH0KfTsKCgp1bmlvbiBfSnZfSURpc3BhdGNoVGFi
bGUKewogIHN0cnVjdAogIHsKCiAgICBqc2hvcnQgaWluZGV4OwogICAganNob3J0IGl0YWJsZV9s
ZW5ndGg7CgogICAgdm9pZCAqKml0YWJsZTsKICB9IGNsczsKCiAgc3RydWN0CiAgewoKICAgIGpz
aG9ydCAqaW9mZnNldHM7CiAgfSBpZmFjZTsKfTsKCgpzdHJ1Y3QgX0p2X2lmYWNlcwp7CiAgamNs
YXNzICpsaXN0OwogIGpzaG9ydCBsZW47CiAganNob3J0IGNvdW50Owp9OwoKc3RydWN0IF9Kdl9N
ZXRob2RTeW1ib2wKewogIF9Kdl9VdGY4Q29uc3QgKmNsYXNzX25hbWU7CiAgX0p2X1V0ZjhDb25z
dCAqbmFtZTsKICBfSnZfVXRmOENvbnN0ICpzaWduYXR1cmU7Cn07CgpzdHJ1Y3QgX0p2X09mZnNl
dFRhYmxlCnsKICBqaW50IHN0YXRlOwogIGppbnQgb2Zmc2V0c1tdOwp9OwoKCgoKCmNsYXNzIGph
dmE6Omxhbmc6OkNsYXNzIDogcHVibGljIGphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBz
dGF0aWMgamNsYXNzIGZvck5hbWUgKGpzdHJpbmcgY2xhc3NOYW1lLCBqYm9vbGVhbiBpbml0aWFs
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmxv
YWRlcik7CiAgc3RhdGljIGpjbGFzcyBmb3JOYW1lIChqc3RyaW5nIGNsYXNzTmFtZSk7CiAgSkFy
cmF5PGpjbGFzcz4gKmdldENsYXNzZXMgKHZvaWQpOwoKICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRl
ciAqZ2V0Q2xhc3NMb2FkZXIgKHZvaWQpOwoKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1
Y3RvciAqZ2V0Q29uc3RydWN0b3IgKEpBcnJheTxqY2xhc3M+ICopOwogIEpBcnJheTxqYXZhOjps
YW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAqPiAqZ2V0Q29uc3RydWN0b3JzICh2b2lkKTsKICBq
YXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAqZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvciAo
SkFycmF5PGpjbGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVj
dG9yICo+ICpnZXREZWNsYXJlZENvbnN0cnVjdG9ycyAodm9pZCk7CiAgamF2YTo6bGFuZzo6cmVm
bGVjdDo6RmllbGQgKmdldERlY2xhcmVkRmllbGQgKGpzdHJpbmcpOwogIEpBcnJheTxqYXZhOjps
YW5nOjpyZWZsZWN0OjpGaWVsZCAqPiAqZ2V0RGVjbGFyZWRGaWVsZHMgKHZvaWQpOwogIGphdmE6
Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqZ2V0RGVjbGFyZWRNZXRob2QgKGpzdHJpbmcsIEpBcnJh
eTxqY2xhc3M+ICopOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKj4gKmdl
dERlY2xhcmVkTWV0aG9kcyAodm9pZCk7CgogIEpBcnJheTxqY2xhc3M+ICpnZXREZWNsYXJlZENs
YXNzZXMgKHZvaWQpOwogIGpjbGFzcyBnZXREZWNsYXJpbmdDbGFzcyAodm9pZCk7CgogIGphdmE6
Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICpnZXRGaWVsZCAoanN0cmluZyk7CnByaXZhdGU6CiAgamlu
dCBfZ2V0RmllbGRzIChKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKj4gKnJlc3Vs
dCwgamludCBvZmZzZXQpOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3Rv
ciAqPiAqX2dldENvbnN0cnVjdG9ycyAoamJvb2xlYW4pOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6
OkZpZWxkICpnZXRGaWVsZCAoanN0cmluZywgamludCk7CiAgamludCBfZ2V0TWV0aG9kcyAoSkFy
cmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqPiAqcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgIGppbnQgb2Zmc2V0KTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCAqZ2V0UHJp
dmF0ZUZpZWxkIChqc3RyaW5nKTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKmdldFBy
aXZhdGVNZXRob2QgKGpzdHJpbmcsIEpBcnJheTxqY2xhc3M+ICopOwogIGphdmE6OnNlY3VyaXR5
OjpQcm90ZWN0aW9uRG9tYWluICpnZXRQcm90ZWN0aW9uRG9tYWluMCAoKTsKCnB1YmxpYzoKICBK
QXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKj4gKmdldEZpZWxkcyAodm9pZCk7Cgog
IEpBcnJheTxqY2xhc3M+ICpnZXRJbnRlcmZhY2VzICh2b2lkKTsKCiAgdm9pZCBnZXRTaWduYXR1
cmUgKGphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqYnVmZmVyKTsKICBzdGF0aWMganN0cmluZyBn
ZXRTaWduYXR1cmUgKEpBcnJheTxqY2xhc3M+ICosIGpib29sZWFuIGlzX2NvbnN0cnVjdG9yKTsK
ICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKmdldE1ldGhvZCAoanN0cmluZywgSkFycmF5
PGpjbGFzcz4gKik7CiAgSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqPiAqZ2V0
TWV0aG9kcyAodm9pZCk7CgogIGlubGluZSBqaW50IGdldE1vZGlmaWVycyAodm9pZCkKICAgIHsK
ICAgICAgcmV0dXJuIGFjY2ZsYWdzOwogICAgfQoKICBqc3RyaW5nIGdldE5hbWUgKHZvaWQpOwoK
ICBqYXZhOjpuZXQ6OlVSTCAqZ2V0UmVzb3VyY2UgKGpzdHJpbmcgcmVzb3VyY2VOYW1lKTsKICBq
YXZhOjppbzo6SW5wdXRTdHJlYW0gKmdldFJlc291cmNlQXNTdHJlYW0gKGpzdHJpbmcgcmVzb3Vy
Y2VOYW1lKTsKICBKQXJyYXk8am9iamVjdD4gKmdldFNpZ25lcnMgKHZvaWQpOwoKICBpbmxpbmUg
amNsYXNzIGdldFN1cGVyY2xhc3MgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNz
OwogICAgfQoKICBpbmxpbmUgamJvb2xlYW4gaXNBcnJheSAodm9pZCkKICAgIHsKICAgICAgcmV0
dXJuIG5hbWUtPmRhdGFbMF0gPT0gJ1snOwogICAgfQoKICBpbmxpbmUgamNsYXNzIGdldENvbXBv
bmVudFR5cGUgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiBpc0FycmF5ICgpID8gKCogKGpjbGFz
cyAqKSAmbWV0aG9kcykgOiAwOwogICAgfQoKICBqYm9vbGVhbiBpc0Fzc2lnbmFibGVGcm9tIChq
Y2xhc3MgY2xzKTsKICBqYm9vbGVhbiBpc0luc3RhbmNlIChqb2JqZWN0IG9iaik7CgogIGlubGlu
ZSBqYm9vbGVhbiBpc0ludGVyZmFjZSAodm9pZCkKICB7CiAgICByZXR1cm4gKGFjY2ZsYWdzICYg
amF2YTo6bGFuZzo6cmVmbGVjdDo6TW9kaWZpZXI6OklOVEVSRkFDRSkgIT0gMDsKICB9CgogIGlu
bGluZSBqYm9vbGVhbiBpc1ByaW1pdGl2ZSAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIHZ0YWJs
ZSA9PSAoKF9Kdl9WVGFibGUgKikgLTEpOwogICAgfQoKICBqb2JqZWN0IG5ld0luc3RhbmNlICh2
b2lkKTsKICBqc3RyaW5nIHRvU3RyaW5nICh2b2lkKTsKCgogIGppbnQgc2l6ZSAodm9pZCkKICAg
IHsKICAgICAgcmV0dXJuIHNpemVfaW5fYnl0ZXM7CiAgICB9CgoKICB2b2lkIGZpbmFsaXplICgp
OwoKCgogIENsYXNzICgpOwoKICBzdGF0aWMgamF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwoKcHJp
dmF0ZToKCiAgdm9pZCBjaGVja01lbWJlckFjY2VzcyAoamludCBmbGFncyk7CgogIHZvaWQgaW5p
dGlhbGl6ZUNsYXNzICh2b2lkKTsKCgogIGZyaWVuZCBfSnZfTWV0aG9kICpfSnZfR2V0TWV0aG9k
TG9jYWwgKGpjbGFzcyBrbGFzcywgX0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSnZfVXRmOENvbnN0ICpzaWduYXR1cmUpOwogIGZy
aWVuZCBqYm9vbGVhbiBfSnZfSXNBc3NpZ25hYmxlRnJvbShqY2xhc3MsIGpjbGFzcyk7CiAgZnJp
ZW5kIGpib29sZWFuIF9Kdl9JbnRlcmZhY2VBc3NpZ25hYmxlRnJvbSAoamNsYXNzLCBqY2xhc3Mp
OwogIGZyaWVuZCB2b2lkICpfSnZfTG9va3VwSW50ZXJmYWNlTWV0aG9kSWR4IChqY2xhc3Mga2xh
c3MsIGpjbGFzcyBpZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1ldGhvZF9pZHgpOwoKICBpbmxpbmUgZnJpZW5kIHZvaWQKICBfSnZfSW5pdENs
YXNzIChqY2xhc3Mga2xhc3MpCiAgewogICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGtsYXNzLT5z
dGF0ZSA9PSBKVl9TVEFURV9ET05FLCB0cnVlKSkKICAgICAgcmV0dXJuOwogICAga2xhc3MtPmlu
aXRpYWxpemVDbGFzcyAoKTsKICB9CgogIGZyaWVuZCBfSnZfTWV0aG9kKiBfSnZfTG9va3VwRGVj
bGFyZWRNZXRob2QgKGpjbGFzcywgX0p2X1V0ZjhDb25zdCAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9VdGY4Q29uc3QqKTsKICBmcmllbmQgamZp
ZWxkSUQgSnZHZXRGaXJzdEluc3RhbmNlRmllbGQgKGpjbGFzcyk7CiAgZnJpZW5kIGppbnQgSnZO
dW1JbnN0YW5jZUZpZWxkcyAoamNsYXNzKTsKICBmcmllbmQgamZpZWxkSUQgSnZHZXRGaXJzdFN0
YXRpY0ZpZWxkIChqY2xhc3MpOwogIGZyaWVuZCBqaW50IEp2TnVtU3RhdGljRmllbGRzIChqY2xh
c3MpOwoKICBmcmllbmQgam9iamVjdCBfSnZfQWxsb2NPYmplY3QgKGpjbGFzcywgamludCk7CiAg
ZnJpZW5kIHZvaWQgKl9Kdl9BbGxvY09iaiAoamludCwgamNsYXNzKTsKICBmcmllbmQgdm9pZCAq
X0p2X0FsbG9jUHRyRnJlZU9iaiAoamludCwgamNsYXNzKTsKICBmcmllbmQgdm9pZCAqX0p2X0Fs
bG9jQXJyYXkgKGppbnQsIGpjbGFzcyk7CgogIGZyaWVuZCBqb2JqZWN0IF9Kdl9KTklfVG9SZWZs
ZWN0ZWRGaWVsZCAoX0p2X0pOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElELAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4pOwogIGZyaWVuZCBqb2JqZWN0
IF9Kdl9KTklfVG9SZWZsZWN0ZWRNZXRob2QgKF9Kdl9KTklFbnYgKiwgamNsYXNzLCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4p
OwogIGZyaWVuZCBqZmllbGRJRCBfSnZfRnJvbVJlZmxlY3RlZEZpZWxkIChqYXZhOjpsYW5nOjpy
ZWZsZWN0OjpGaWVsZCAqKTsKCiAgZnJpZW5kIGptZXRob2RJRCBfSnZfRnJvbVJlZmxlY3RlZE1l
dGhvZCAoamF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICopOwogIGZyaWVuZCBqbWV0aG9kSUQg
X0p2X0Zyb21SZWZsZWN0ZWRDb25zdHJ1Y3RvciAoamF2YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3Ry
dWN0b3IgKik7CiAgZnJpZW5kIGppbnQgSnZOdW1NZXRob2RzIChqY2xhc3MpOwogIGZyaWVuZCBq
bWV0aG9kSUQgSnZHZXRGaXJzdE1ldGhvZCAoamNsYXNzKTsKCgogIGZyaWVuZCBjbGFzcyBqYXZh
OjpsYW5nOjpDbGFzc0xvYWRlcjsKCiAgZnJpZW5kIGNsYXNzIGphdmE6OmlvOjpPYmplY3RPdXRw
dXRTdHJlYW07CiAgZnJpZW5kIGNsYXNzIGphdmE6OmlvOjpPYmplY3RJbnB1dFN0cmVhbTsKICBm
cmllbmQgY2xhc3MgamF2YTo6aW86Ok9iamVjdFN0cmVhbUNsYXNzOwoKICBmcmllbmQgdm9pZCBf
SnZfV2FpdEZvclN0YXRlIChqY2xhc3MsIGludCk7CiAgZnJpZW5kIHZvaWQgX0p2X1JlZ2lzdGVy
Q2xhc3NlcyAoamNsYXNzICpjbGFzc2VzKTsKICBmcmllbmQgdm9pZCBfSnZfUmVnaXN0ZXJDbGFz
c0hvb2tEZWZhdWx0IChqY2xhc3Mga2xhc3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9SZWdpc3Rlcklu
aXRpYXRpbmdMb2FkZXIgKGpjbGFzcyxqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciopOwogIGZyaWVu
ZCB2b2lkIF9Kdl9VbnJlZ2lzdGVyQ2xhc3MgKGpjbGFzcyk7CiAgZnJpZW5kIGpjbGFzcyBfSnZf
RmluZENsYXNzIChfSnZfVXRmOENvbnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlcik7CiAgZnJpZW5kIGpjbGFzcyBf
SnZfRmluZENsYXNzSW5DYWNoZSAoX0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsK
ICBmcmllbmQgdm9pZCBfSnZfTmV3QXJyYXlDbGFzcyAoamNsYXNzIGVsZW1lbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9WVGFibGUgKmFycmF5X3Z0YWJs
ZSA9IDApOwogIGZyaWVuZCBqY2xhc3MgX0p2X05ld0NsYXNzIChfSnZfVXRmOENvbnN0ICpuYW1l
LCBqY2xhc3Mgc3VwZXJjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YTo6
bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlcik7CiAgZnJpZW5kIHZvaWQgX0p2X0luaXROZXdDbGFz
c0ZpZWxkcyAoamNsYXNzIGtsYXNzKTsKCgogIGZyaWVuZCB2b2lkIF9Kdl9Jbml0UHJpbUNsYXNz
IChqY2xhc3MsIGNoYXIgKiwgY2hhciwgaW50LCBfSnZfQXJyYXlWVGFibGUgKik7CgogIGZyaWVu
ZCB2b2lkIF9Kdl9QcmVwYXJlQ29tcGlsZWRDbGFzcyAoamNsYXNzKTsKICBmcmllbmQgdm9pZCBf
SnZfUHJlcGFyZUNvbnN0YW50VGltZVRhYmxlcyAoamNsYXNzKTsKICBmcmllbmQganNob3J0IF9K
dl9HZXRJbnRlcmZhY2VzIChqY2xhc3MsIF9Kdl9pZmFjZXMgKik7CiAgZnJpZW5kIHZvaWQgX0p2
X0dlbmVyYXRlSVRhYmxlIChqY2xhc3MsIF9Kdl9pZmFjZXMgKiwganNob3J0ICopOwogIGZyaWVu
ZCBqc3RyaW5nIF9Kdl9HZXRNZXRob2RTdHJpbmcoamNsYXNzLCBfSnZfVXRmOENvbnN0ICopOwog
IGZyaWVuZCBqc2hvcnQgX0p2X0FwcGVuZFBhcnRpYWxJVGFibGUgKGpjbGFzcywgamNsYXNzLCB2
b2lkICoqLCBqc2hvcnQpOwogIGZyaWVuZCBqc2hvcnQgX0p2X0ZpbmRJSW5kZXggKGpjbGFzcyAq
LCBqc2hvcnQgKiwganNob3J0KTsKICBmcmllbmQgdm9pZCBfSnZfTGlua09mZnNldFRhYmxlIChq
Y2xhc3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9MYXlvdXRWVGFibGVNZXRob2RzIChqY2xhc3Mga2xh
c3MpOwogIGZyaWVuZCB2b2lkIF9Kdl9TZXRWVGFibGVFbnRyaWVzIChqY2xhc3MsIF9Kdl9WVGFi
bGUgKik7CiAgZnJpZW5kIHZvaWQgX0p2X01ha2VWVGFibGUgKGpjbGFzcyk7CgoKCiAgaW5saW5l
IGZyaWVuZCBqY2xhc3MKICBfSnZfR2V0QXJyYXlDbGFzcyAoamNsYXNzIGtsYXNzLCBqYXZhOjps
YW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKQogIHsKICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgh
a2xhc3MtPmFycmF5Y2xhc3MsIGZhbHNlKSkKICAgICAgX0p2X05ld0FycmF5Q2xhc3MgKGtsYXNz
LCBsb2FkZXIpOwogICAgcmV0dXJuIGtsYXNzLT5hcnJheWNsYXNzOwogIH0KCgogIGZyaWVuZCBq
Ym9vbGVhbiBfSnZfSXNJbnRlcnByZXRlZENsYXNzIChqY2xhc3MpOwogIGZyaWVuZCB2b2lkIF9K
dl9Jbml0RmllbGQgKGpvYmplY3QsIGpjbGFzcywgX0p2X0ZpZWxkKik7CiAgZnJpZW5kIGludCBf
SnZfRGV0ZXJtaW5lVlRhYmxlSW5kZXggKGpjbGFzcywgX0p2X1V0ZjhDb25zdCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSnZfVXRmOENvbnN0Kik7CiAgZnJpZW5k
IHZvaWQgX0p2X0luaXRGaWVsZCAoam9iamVjdCwgamNsYXNzLCBpbnQpOwogIGZyaWVuZCBfSnZf
d29yZCBfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoamNsYXNzLCBpbnQpOwogIGZyaWVuZCBfSnZfTWV0
aG9kICpfSnZfU2VhcmNoTWV0aG9kSW5DbGFzcyAoamNsYXNzIGNscywgamNsYXNzIGtsYXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0p2X1V0ZjhDb25z
dCAqbWV0aG9kX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSnZfVXRmOENvbnN0ICptZXRob2Rfc2lnbmF0dXJlKTsKCiAgZnJpZW5kIHZvaWQgX0p2
X1ByZXBhcmVDbGFzcyAoamNsYXNzKTsKCiAgZnJpZW5kIGNsYXNzIF9Kdl9DbGFzc1JlYWRlcjsK
ICBmcmllbmQgY2xhc3MgX0p2X0ludGVycENsYXNzOwogIGZyaWVuZCBjbGFzcyBfSnZfSW50ZXJw
TWV0aG9kOwogIGZyaWVuZCBjbGFzcyBfSnZfSW50ZXJwTWV0aG9kSW52b2NhdGlvbjsKCgoKCgoK
ICBmcmllbmQgY2xhc3MgX0p2X0J5dGVjb2RlVmVyaWZpZXI7CgoKICBqY2xhc3MgbmV4dDsKCiAg
X0p2X1V0ZjhDb25zdCAqbmFtZTsKCiAgX0p2X3VzaG9ydCBhY2NmbGFnczsKCiAgamNsYXNzIHN1
cGVyY2xhc3M7CgogIF9Kdl9Db25zdGFudHMgY29uc3RhbnRzOwoKCiAgX0p2X01ldGhvZCAqbWV0
aG9kczsKCgogIGpzaG9ydCBtZXRob2RfY291bnQ7CgogIGpzaG9ydCB2dGFibGVfbWV0aG9kX2Nv
dW50OwoKICBfSnZfRmllbGQgKmZpZWxkczsKCiAgamludCBzaXplX2luX2J5dGVzOwoKICBqc2hv
cnQgZmllbGRfY291bnQ7CgogIGpzaG9ydCBzdGF0aWNfZmllbGRfY291bnQ7CgogIF9Kdl9WVGFi
bGUgKnZ0YWJsZTsKCiAgX0p2X09mZnNldFRhYmxlICpvdGFibGU7CgogIF9Kdl9NZXRob2RTeW1i
b2wgKm90YWJsZV9zeW1zOwoKICBqY2xhc3MgKmludGVyZmFjZXM7CgogIGphdmE6Omxhbmc6OkNs
YXNzTG9hZGVyICpsb2FkZXI7CgogIGpzaG9ydCBpbnRlcmZhY2VfY291bnQ7CgogIGpieXRlIHN0
YXRlOwoKCiAgamF2YTo6bGFuZzo6VGhyZWFkICp0aHJlYWQ7CgogIGpzaG9ydCBkZXB0aDsKCiAg
amNsYXNzICphbmNlc3RvcnM7CgogIF9Kdl9JRGlzcGF0Y2hUYWJsZSAqaWR0OwoKICBqY2xhc3Mg
YXJyYXljbGFzczsKCiAgamF2YTo6c2VjdXJpdHk6OlByb3RlY3Rpb25Eb21haW4gKnByb3RlY3Rp
b25Eb21haW47Cn07CiMgMTcgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNjIiAyCiMgMSAi
amF2YS9sYW5nL051bGxQb2ludGVyRXhjZXB0aW9uLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFj
ZQoKIyAxICJqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRl
cmZhY2UKCiMgMSAiamF2YS9sYW5nL0V4Y2VwdGlvbi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZh
Y2UKCiMgMSAiamF2YS9sYW5nL1Rocm93YWJsZS5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK
CgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6VGhyb3dhYmxlIDogcHVibGljIDo6amF2YTo6bGFuZzo6
T2JqZWN0CnsKcHVibGljOgogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpUaHJvd2FibGUgKmZpbGxJ
blN0YWNrVHJhY2UgKCk7CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0TG9jYWxp
emVkTWVzc2FnZSAoKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXRNZXNzYWdl
ICgpIHsgcmV0dXJuIGRldGFpbE1lc3NhZ2U7IH0KICB2aXJ0dWFsIHZvaWQgcHJpbnRTdGFja1Ry
YWNlICgpOwogIHZpcnR1YWwgdm9pZCBwcmludFN0YWNrVHJhY2UgKDo6amF2YTo6aW86OlByaW50
U3RyZWFtICopOwogIHZpcnR1YWwgdm9pZCBwcmludFN0YWNrVHJhY2UgKDo6amF2YTo6aW86OlBy
aW50V3JpdGVyICopOwogIFRocm93YWJsZSAoKTsKICBUaHJvd2FibGUgKDo6amF2YTo6bGFuZzo6
U3RyaW5nICopOwogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nICgpOwpw
cml2YXRlOgogIHZvaWQgcHJpbnRSYXdTdGFja1RyYWNlICg6OmphdmE6OmlvOjpQcmludFdyaXRl
ciAqKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqZGV0YWlsTWVzc2FnZTsKcHVibGljOgogIHN0
YXRpYyBqYm9vbGVhbiB0cmFjZV9lbmFibGVkOwpwcml2YXRlOgogIGpieXRlQXJyYXkgc3RhY2tU
cmFjZTsKICBzdGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0zMDQyNjg2MDU1
NjU4MDQ3Mjg1TEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3Mk
Owp9OwojIDkgImphdmEvbGFuZy9FeGNlcHRpb24uaCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpF
eGNlcHRpb24gOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpUaHJvd2FibGUKewpwdWJsaWM6CiAgRXhj
ZXB0aW9uICgpOwogIEV4Y2VwdGlvbiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoK
ICBzdGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0zMzg3NTE2OTkzMTI0MjI5
OTQ4TEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9Owoj
IDkgImphdmEvbGFuZy9SdW50aW1lRXhjZXB0aW9uLmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6
UnVudGltZUV4Y2VwdGlvbiA6IHB1YmxpYyA6OmphdmE6Omxhbmc6OkV4Y2VwdGlvbgp7CnB1Ymxp
YzoKICBSdW50aW1lRXhjZXB0aW9uICgpOwogIFJ1bnRpbWVFeGNlcHRpb24gKDo6amF2YTo6bGFu
Zzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25V
SUQgPSAtNzAzNDg5NzE5MDc0NTc2NjkzOUxMOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxh
bmc6OkNsYXNzIGNsYXNzJDsKfTsKIyA5ICJqYXZhL2xhbmcvTnVsbFBvaW50ZXJFeGNlcHRpb24u
aCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpOdWxsUG9pbnRlckV4Y2VwdGlvbiA6IHB1YmxpYyA6
OmphdmE6Omxhbmc6OlJ1bnRpbWVFeGNlcHRpb24KewpwdWJsaWM6CiAgTnVsbFBvaW50ZXJFeGNl
cHRpb24gKCk7CiAgTnVsbFBvaW50ZXJFeGNlcHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5nICop
OwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA1MTYyNzEw
MTgzMzg5MDI4NzkyTEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xh
c3MkOwp9OwojIDE4ICIuLi8uLi8uLi9saWJqYXZhL2V4Y2VwdGlvbi5jYyIgMgojIDEgIi4uLy4u
Ly4uL2xpYmphdmEvZ2NqL2NuaS5oIiAxCiMgMjEgIi4uLy4uLy4uL2xpYmphdmEvZ2NqL2NuaS5o
IgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEv
b2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz
NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9p
ZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1l
bW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBf
X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAq
bWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikK
ICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9p
ZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9p
ZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7Cgpl
eHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQg
c3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBf
X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu
dCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZy
bSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKIyAxMTEgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9s
IChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf
X3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJj
aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hh
ciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3Qg
Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIg
Kl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywg
X19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg
X19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlz
dGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpl
eHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9f
Y29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9f
bWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4
dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVu
IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGlu
dCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19l
cnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qg
dm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmlu
ZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRl
cm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBf
X2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwK
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVy
biBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZy
eSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lk
ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUg
KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKfQojIDIyICIuLi8uLi8uLi9saWJqYXZhL2djai9jbmkuaCIgMgoKZXh0ZXJu
IGlubGluZSBqb2JqZWN0Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMpCnsKICByZXR1cm4gX0p2
X0FsbG9jT2JqZWN0IChjbHMsIGNscy0+c2l6ZSgpKTsKfQoKZXh0ZXJuIGlubGluZSBqb2JqZWN0
Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMsIGpzaXplIHN6KQp7CiAgcmV0dXJuIF9Kdl9BbGxv
Y09iamVjdCAoY2xzLCBzeik7Cn0KCmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3U3RyaW5nVVRG
IChjb25zdCBjaGFyICpieXRlcyk7CmV4dGVybiAiQyIgdm9pZCBfSnZfSW5pdENsYXNzIChqY2xh
c3MpOwoKZXh0ZXJuIGlubGluZSB2b2lkCkp2SW5pdENsYXNzIChqY2xhc3MgY2xzKQp7CiAgcmV0
dXJuIF9Kdl9Jbml0Q2xhc3MgKGNscyk7Cn0KCmV4dGVybiBpbmxpbmUganN0cmluZwpKdkFsbG9j
U3RyaW5nIChqc2l6ZSBzeikKewogIHJldHVybiBfSnZfQWxsb2NTdHJpbmcgKHN6KTsKfQoKZXh0
ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nIChjb25zdCBqY2hhciAqY2hhcnMsIGpzaXpl
IGxlbikKewogIHJldHVybiBfSnZfTmV3U3RyaW5nIChjaGFycywgbGVuKTsKfQoKZXh0ZXJuIGlu
bGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nTGF0aW4xIChjb25zdCBjaGFyICpieXRlcywganNpemUg
bGVuKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBsZW4pOwp9CgpleHRl
cm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIgKmJ5dGVzKQp7
CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBzdHJsZW4gKGJ5dGVzKSk7Cn0K
CmV4dGVybiBpbmxpbmUgamNoYXIgKgpfSnZfR2V0U3RyaW5nQ2hhcnMgKGpzdHJpbmcgc3RyKQp7
CiAgcmV0dXJuIChqY2hhciopKChjaGFyKikgc3RyLT5kYXRhICsgc3RyLT5ib2Zmc2V0KTsKfQoK
ZXh0ZXJuIGlubGluZSBqY2hhcioKSnZHZXRTdHJpbmdDaGFycyAoanN0cmluZyBzdHIpCnsKICBy
ZXR1cm4gX0p2X0dldFN0cmluZ0NoYXJzIChzdHIpOwp9CgpleHRlcm4gaW5saW5lIGpzaXplCkp2
R2V0U3RyaW5nVVRGTGVuZ3RoIChqc3RyaW5nIHN0cmluZykKewogIHJldHVybiBfSnZfR2V0U3Ry
aW5nVVRGTGVuZ3RoIChzdHJpbmcpOwp9CgpleHRlcm4gaW5saW5lIGpzaXplCkp2R2V0U3RyaW5n
VVRGUmVnaW9uIChqc3RyaW5nIHN0ciwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgY2hhciAqYnVm
KQp7CiAgcmV0dXJuIF9Kdl9HZXRTdHJpbmdVVEZSZWdpb24gKHN0ciwgc3RhcnQsIGxlbiwgYnVm
KTsKfQoKZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nVVRGIChjb25zdCBjaGFyICpi
eXRlcykKewogIHJldHVybiBfSnZfTmV3U3RyaW5nVVRGIChieXRlcyk7Cn0KCmNsYXNzIEp2U3lu
Y2hyb25pemUKewpwcml2YXRlOgogIGpvYmplY3Qgb2JqOwpwdWJsaWM6CiAgSnZTeW5jaHJvbml6
ZSAoY29uc3Qgam9iamVjdCAmbykgOiBvYmogKG8pCiAgICB7IF9Kdl9Nb25pdG9yRW50ZXIgKG9i
aik7IH0KICB+SnZTeW5jaHJvbml6ZSAoKQogICAgeyBfSnZfTW9uaXRvckV4aXQgKG9iaik7IH0K
fTsKCgpleHRlcm4gaW5saW5lIHZvaWQgKgpKdk1hbGxvYyAoanNpemUgc2l6ZSkKewogIHJldHVy
biBfSnZfTWFsbG9jIChzaXplKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkCkp2RnJlZSAodm9pZCAq
cHRyKQp7CiAgcmV0dXJuIF9Kdl9GcmVlIChwdHIpOwp9CgpleHRlcm4gaW5saW5lIGppbnQKSnZD
cmVhdGVKYXZhVk0gKHZvaWQqIHZtX2FyZ3MpCnsKICByZXR1cm4gX0p2X0NyZWF0ZUphdmFWTSAo
dm1fYXJncyk7Cn0KCmV4dGVybiBpbmxpbmUgamF2YTo6bGFuZzo6VGhyZWFkKgpKdkF0dGFjaEN1
cnJlbnRUaHJlYWQgKGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFkR3JvdXAqIGdyb3Vw
KQp7CiAgcmV0dXJuIF9Kdl9BdHRhY2hDdXJyZW50VGhyZWFkIChuYW1lLCBncm91cCk7Cn0KCmV4
dGVybiBpbmxpbmUgamludApKdkRldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQpCnsKICByZXR1cm4g
X0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKCk7Cn0KIyAxOSAiLi4vLi4vLi4vbGliamF2YS9leGNl
cHRpb24uY2MiIDIKIyAxICIuLi8uLi8uLi9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDEKIyAyMiAi
Li4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIgojIDEgIi4uLy4uLy4uL2xpYmphdmEvaW5j
bHVkZS9qYXZhLWFzc2VydC5oIiAxCiMgMTYgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qYXZh
LWFzc2VydC5oIgp2b2lkIF9Kdl9BYm9ydCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGlu
dCwgY29uc3QgY2hhciAqKQogIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAyMyAi
Li4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIiAyCiMgMSAiaW5jbHVkZS9qYXZhLXRocmVh
ZHMuaCIgMQojIDIwICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgojIDEgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2NoZWQuaCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlv
cml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4p
ICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGlu
dCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUv
c2NoZWQuaCIgMiAzCgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFt
IChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAg
ICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRf
c2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQs
IHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi9ob21lL2diL3JwbS9CVUlM
RC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDExOCAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRt
X21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0
bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgog
IGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoK
c3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAg
ICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYz
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90
IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0
cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
bXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRt
ICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0
cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3Qg
X190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29u
c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBj
aGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l
ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4
dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoK
ZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0
OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVy
biB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpf
X3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lk
X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVj
ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBf
X2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQg
X19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAq
X19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3Qg
X19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRp
bWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9f
dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVz
dHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGlt
ZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93
ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJy
OwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcp
IHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRh
dGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAy
MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFs
LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25h
bC5oIiAyIDMKIyAzNzEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o
IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvaW5pdHNwaW4uaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoK
CmV4dGVybiAiQyIgewojIDU5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBU
SFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVu
dW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoK
fTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NF
U1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhf
UkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01V
VEVYX0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVU
RVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01VVEVYX1JF
Q1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VS
Uk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JN
QUwKCgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURBUFRJVkVf
TlAKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9D
RVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05Q
LAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJF
RkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9OUCA9
IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKIyAxMzEgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19y
b3V0aW5lKSAodm9pZCAqKTsKICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0
cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhS
RUFEX0NBTkNFTF9FTkFCTEUsCgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0Kewog
IFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMK
Cn07CiMgMTYzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9j
cmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVhZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cg
KCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9f
dGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3Jl
dHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9y
ZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRf
dCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw
YXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0
ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3Qg
cHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3Bl
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3Qg
X19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2
b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAq
X19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z
dGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXpl
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmlj
dCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0
dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3Rhcmdl
dF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9s
aWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nl
dGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJp
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211
dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChw
dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0
cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRf
bXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkK
ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9f
Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAq
X19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
cHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0
cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpf
X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9t
dXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0
cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0
cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25z
dCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9y
d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y
d2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChw
dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xv
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Js
b2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9y
d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0
aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3Bz
aGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRf
bnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90
ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X3ByZWYpIHRocm93ICgpOwojIDUwOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4g
aW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9f
cHNoYXJlZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95
IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3NwaW5fbG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9zcGluX3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2Nr
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3Bp
bmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVy
X2luaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB1bnNpZ25l
ZCBpbnQgX19jb3VudCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0
cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
cHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSAocHRocmVh
ZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh
cnJpZXJhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJf
c2V0cHNoYXJlZCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX3dhaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJp
ZXIpIHRocm93ICgpOwojIDU1NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50
IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5
X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf
X3BvaW50ZXIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChw
dGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA1NzYgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29u
dHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZv
aWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChp
bnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHJlYWQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2
MTAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51
cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRf
Y2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhy
ZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9w
X3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190
aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9f
Y2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQu
aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQg
cHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19uZXdtYXNrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8p
IHRocm93ICgpOwojIDY1NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgNjcxICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpf
X3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFy
ZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAo
dm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVh
ZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKfQojIDIxICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIiAy
CgoKCgoKCnR5cGVkZWYgc3RydWN0IF9Kdl9UaHJlYWRfdAp7CgogIGludCBmbGFnczsKCgogIHB0
aHJlYWRfdCB0aHJlYWQ7CgoKICBqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZF9vYmo7CgoKCiAg
cHRocmVhZF9jb25kX3Qgd2FpdF9jb25kOwogIHB0aHJlYWRfbXV0ZXhfdCB3YWl0X211dGV4OwoK
CiAgX0p2X1RocmVhZF90ICpuZXh0OwoKfSBfSnZfVGhyZWFkX3Q7Cgp0eXBlZGVmIHZvaWQgX0p2
X1RocmVhZFN0YXJ0RnVuYyAoamF2YTo6bGFuZzo6VGhyZWFkICopOwoKCgp0eXBlZGVmIHN0cnVj
dAp7CgogIF9Kdl9UaHJlYWRfdCAqZmlyc3Q7Cgp9IF9Kdl9Db25kaXRpb25WYXJpYWJsZV90OwoK
dHlwZWRlZiBzdHJ1Y3QKewoKCgoKICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CgoKICBwdGhyZWFk
X3Qgb3duZXI7CgoKICBpbnQgY291bnQ7Cn0gX0p2X011dGV4X3Q7CgoKCgoKCmlubGluZSBpbnQK
X0p2X1B0aHJlYWRDaGVja01vbml0b3IgKF9Kdl9NdXRleF90ICptdSkKewogIHB0aHJlYWRfdCBz
ZWxmID0gcHRocmVhZF9zZWxmKCk7CiAgaWYgKG11LT5vd25lciA9PSBzZWxmKQogICAgcmV0dXJu
IDA7CiAgZWxzZSByZXR1cm4gMTsKfQoKCgoKCmludCBfSnZfQ29uZFdhaXQgKF9Kdl9Db25kaXRp
b25WYXJpYWJsZV90ICpjdiwgX0p2X011dGV4X3QgKm11LAogICAgICAgICAgICAgICAgICBqbG9u
ZyBtaWxsaXMsIGppbnQgbmFub3MpOwoKaW50IF9Kdl9Db25kTm90aWZ5IChfSnZfQ29uZGl0aW9u
VmFyaWFibGVfdCAqY3YsIF9Kdl9NdXRleF90ICptdSk7CgppbnQgX0p2X0NvbmROb3RpZnlBbGwg
KF9Kdl9Db25kaXRpb25WYXJpYWJsZV90ICpjdiwgX0p2X011dGV4X3QgKm11KTsKCmlubGluZSB2
b2lkCl9Kdl9Db25kSW5pdCAoX0p2X0NvbmRpdGlvblZhcmlhYmxlX3QgKmN2KQp7CiAgY3YtPmZp
cnN0ID0gMDsKfQojIDExMyAiaW5jbHVkZS9qYXZhLXRocmVhZHMuaCIKaW5saW5lIHZvaWQKX0p2
X011dGV4SW5pdCAoX0p2X011dGV4X3QgKm11KQp7CgoKCgoKCiAgcHRocmVhZF9tdXRleF9pbml0
ICgmbXUtPm11dGV4LCAwKTsKCgogIG11LT5jb3VudCA9IDA7CiAgbXUtPm93bmVyID0gMDsKfQoK
aW5saW5lIGludApfSnZfTXV0ZXhMb2NrIChfSnZfTXV0ZXhfdCAqbXUpCnsKICBwdGhyZWFkX3Qg
c2VsZiA9IHB0aHJlYWRfc2VsZiAoKTsKICBpZiAobXUtPm93bmVyID09IHNlbGYpCiAgICB7CiAg
ICAgIG11LT5jb3VudCsrOwogICAgfQogIGVsc2UKICAgIHsKIyAxNDcgImluY2x1ZGUvamF2YS10
aHJlYWRzLmgiCiAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrICgmbXUtPm11dGV4KTsKCiAgICAg
IG11LT5jb3VudCA9IDE7CiAgICAgIG11LT5vd25lciA9IHNlbGY7CiAgICB9CiAgcmV0dXJuIDA7
Cn0KCmlubGluZSBpbnQKX0p2X011dGV4VW5sb2NrIChfSnZfTXV0ZXhfdCAqbXUpCnsKICBpZiAo
X0p2X1B0aHJlYWRDaGVja01vbml0b3IgKG11KSkKICAgIHsKCgoKCiAgICAgIHJldHVybiAxOwog
ICAgfQoKICBtdS0+Y291bnQtLTsKCiAgaWYgKG11LT5jb3VudCA9PSAwKQogICAgewogICAgICBt
dS0+b3duZXIgPSAwOwojIDE4MCAiaW5jbHVkZS9qYXZhLXRocmVhZHMuaCIKICAgICAgICBwdGhy
ZWFkX211dGV4X3VubG9jayAoJm11LT5tdXRleCk7CgogICAgfQogIHJldHVybiAwOwp9CiMgMjA1
ICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgp2b2lkIF9Kdl9Jbml0VGhyZWFkcyAodm9pZCk7Cgpf
SnZfVGhyZWFkX3QgKl9Kdl9UaHJlYWRJbml0RGF0YSAoamF2YTo6bGFuZzo6VGhyZWFkICp0aHJl
YWQpOwp2b2lkIF9Kdl9UaHJlYWREZXN0cm95RGF0YSAoX0p2X1RocmVhZF90ICpkYXRhKTsKCmlu
bGluZSBqYXZhOjpsYW5nOjpUaHJlYWQgKgpfSnZfVGhyZWFkQ3VycmVudCAodm9pZCkKewogIGV4
dGVybiBwdGhyZWFkX2tleV90IF9Kdl9UaHJlYWRLZXk7CiAgcmV0dXJuIChqYXZhOjpsYW5nOjpU
aHJlYWQgKikgcHRocmVhZF9nZXRzcGVjaWZpYyAoX0p2X1RocmVhZEtleSk7Cn0KIyAyNzAgImlu
Y2x1ZGUvamF2YS10aHJlYWRzLmgiCiMgMSAic3lzZGVwL2xvY2tzLmgiIDEKIyAxNCAic3lzZGVw
L2xvY2tzLmgiCnR5cGVkZWYgc2l6ZV90IG9ial9hZGRyX3Q7CgoKCgoKCmlubGluZSBzdGF0aWMg
Ym9vbApjb21wYXJlX2FuZF9zd2FwKHZvbGF0aWxlIG9ial9hZGRyX3QgKmFkZHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpfYWRkcl90IG9sZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ial9hZGRyX3QgbmV3
X3ZhbCkKewogIGNoYXIgcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBjbXB4
Y2hnbCAlMiwgJTA7IHNldHogJTEiCiAgICAgICAgICAgICAgOiAiK20iKCooYWRkcikpLCAiPXEi
KHJlc3VsdCkKICAgICAgICAgICAgICA6ICJyIiAobmV3X3ZhbCksICJhIihvbGQpCiAgICAgICAg
ICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIChib29sKSByZXN1bHQ7Cn0KCgoKCgoKaW5saW5l
IHN0YXRpYyB2b2lkCnJlbGVhc2Vfc2V0KHZvbGF0aWxlIG9ial9hZGRyX3QgKmFkZHIsIG9ial9h
ZGRyX3QgbmV3X3ZhbCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fKCIgIiA6IDogOiAibWVtb3J5
Iik7CiAgKihhZGRyKSA9IG5ld192YWw7Cn0KCgoKCmlubGluZSBzdGF0aWMgYm9vbApjb21wYXJl
X2FuZF9zd2FwX3JlbGVhc2Uodm9sYXRpbGUgb2JqX2FkZHJfdCAqYWRkciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpfYWRkcl90IG9sZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpf
YWRkcl90IG5ld192YWwpCnsKICByZXR1cm4gY29tcGFyZV9hbmRfc3dhcChhZGRyLCBvbGQsIG5l
d192YWwpOwp9CgoKCgppbmxpbmUgc3RhdGljIHZvaWQKcmVhZF9iYXJyaWVyKCkKewp9CgoKCmlu
bGluZSBzdGF0aWMgdm9pZAp3cml0ZV9iYXJyaWVyKCkKewoKICBfX2FzbV9fIF9fdm9sYXRpbGVf
XygiICIgOiA6IDogIm1lbW9yeSIpOwp9CiMgMjcxICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIiAy
Cgp0eXBlZGVmIHB0aHJlYWRfdCBfSnZfVGhyZWFkSWRfdDsKIyAzMDMgImluY2x1ZGUvamF2YS10
aHJlYWRzLmgiCmV4dGVybiB2b2xhdGlsZQpzdHJ1Y3Qgc2VsZl9jYWNoZV9lbnRyeSB7CiAgc2l6
ZV90IGhpZ2hfc3BfYml0czsKICBwdGhyZWFkX3Qgc2VsZjsKfSBfSnZfc2VsZl9jYWNoZVtdOwoK
dm9pZCBfSnZfU2VsZl9DYWNoZV9Jbml0KCk7CgpfSnZfVGhyZWFkSWRfdApfSnZfVGhyZWFkU2Vs
Zl9vdXRfb2ZfbGluZSh2b2xhdGlsZSBzZWxmX2NhY2hlX2VudHJ5ICpzY2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBoaWdoX3NwX2JpdHMpOwoKaW5saW5lIF9Kdl9UaHJlYWRJ
ZF90Cl9Kdl9UaHJlYWRTZWxmICh2b2lkKQp7CiAgaW50IGR1bW15OwogIHNpemVfdCBzcCA9IChz
aXplX3QpKCZkdW1teSk7CiAgdW5zaWduZWQgaCA9ICgoKHVuc2lnbmVkIGxvbmcpKHNwKSA+PiAx
OSkgJiAoMTAyNCAtMSkpOwogIHZvbGF0aWxlIHNlbGZfY2FjaGVfZW50cnkgKnNjZSA9IF9Kdl9z
ZWxmX2NhY2hlICsgaDsKICBwdGhyZWFkX3QgY2FuZGlkYXRlX3NlbGYgPSBzY2UgLT4gc2VsZjsK
ICByZWFkX2JhcnJpZXIoKTsKICBpZiAoc2NlIC0+IGhpZ2hfc3BfYml0cyA9PSBzcCA+PiAxMikK
ICAgIHsKCgoKCiAgICAgIHJldHVybiBjYW5kaWRhdGVfc2VsZjsKICAgIH0KICBlbHNlCiAgICBy
ZXR1cm4gX0p2X1RocmVhZFNlbGZfb3V0X29mX2xpbmUoc2NlLCBzcCA+PiAxMik7Cn0KIyAzNTQg
ImluY2x1ZGUvamF2YS10aHJlYWRzLmgiCmlubGluZSBfSnZfVGhyZWFkX3QgKgpfSnZfVGhyZWFk
Q3VycmVudERhdGEgKHZvaWQpCnsKICBleHRlcm4gcHRocmVhZF9rZXlfdCBfSnZfVGhyZWFkRGF0
YUtleTsKICByZXR1cm4gKF9Kdl9UaHJlYWRfdCAqKSBwdGhyZWFkX2dldHNwZWNpZmljIChfSnZf
VGhyZWFkRGF0YUtleSk7Cn0KCmlubGluZSB2b2lkCl9Kdl9UaHJlYWRZaWVsZCAodm9pZCkKewoK
ICBzY2hlZF95aWVsZCAoKTsKCn0KCnZvaWQgX0p2X1RocmVhZFJlZ2lzdGVyIChfSnZfVGhyZWFk
X3QgKmRhdGEpOwp2b2lkIF9Kdl9UaHJlYWRVblJlZ2lzdGVyICgpOwoKdm9pZCBfSnZfVGhyZWFk
U2V0UHJpb3JpdHkgKF9Kdl9UaHJlYWRfdCAqZGF0YSwgamludCBwcmlvKTsKCnZvaWQgX0p2X1Ro
cmVhZFN0YXJ0IChqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZCwgX0p2X1RocmVhZF90ICpkYXRh
LAogICAgICAgICAgICAgICAgICAgICAgX0p2X1RocmVhZFN0YXJ0RnVuYyAqbWV0aCk7Cgp2b2lk
IF9Kdl9UaHJlYWRXYWl0ICh2b2lkKTsKCnZvaWQgX0p2X1RocmVhZEludGVycnVwdCAoX0p2X1Ro
cmVhZF90ICpkYXRhKTsKIyAyNCAiLi4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIiAyCgoj
IDEgImluY2x1ZGUvamF2YS1nYy5oIiAxCiMgMTggImluY2x1ZGUvamF2YS1nYy5oIgpleHRlcm4g
IkMiCnsKICB2b2lkICpfSnZfTWFya09iaiAodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAq
KTsKICB2b2lkICpfSnZfTWFya0FycmF5ICh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCB2b2lkICop
Owp9OwoKCgoKCgpleHRlcm4gIkMiIHZvaWQgKiBHQ19nY2pfbWFsbG9jKHNpemVfdCwgdm9pZCAq
KTsKZXh0ZXJuICJDIiB2b2lkICogR0NfbWFsbG9jX2F0b21pYyhzaXplX3QpOwoKZXh0ZXJuICJD
IiB2b2lkICogR0NfbG9jYWxfZ2NqX21hbGxvYyhzaXplX3QsIHZvaWQgKik7CmV4dGVybiAiQyIg
dm9pZCAqIEdDX2xvY2FsX21hbGxvY19hdG9taWMoc2l6ZV90KTsKCgppbmxpbmUgdm9pZCAqCl9K
dl9BbGxvY09iaiAoanNpemUgc2l6ZSwgamNsYXNzIGtsYXNzKQp7CgoKCiAgcmV0dXJuIEdDX2xv
Y2FsX2djal9tYWxsb2MgKHNpemUsIGtsYXNzLT52dGFibGUpOwoKCgp9CgppbmxpbmUgdm9pZCAq
Cl9Kdl9BbGxvY1B0ckZyZWVPYmogKGpzaXplIHNpemUsIGpjbGFzcyBrbGFzcykKewoKCiAgICB2
b2lkICogb2JqID0gR0NfbG9jYWxfbWFsbG9jX2F0b21pYyhzaXplKTsKCgoKICAqKChfSnZfVlRh
YmxlICoqKSBvYmopID0ga2xhc3MtPnZ0YWJsZTsKCgoKCgoKCiAgcmV0dXJuIG9iajsKfQojIDI2
ICIuLi8uLi8uLi9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDIKCgoKCgojIDEgIi4uLy4uLy4uL2xp
YmphdmEvZ2NqL2ZpZWxkLmgiIDEKIyAxNSAiLi4vLi4vLi4vbGliamF2YS9nY2ovZmllbGQuaCIK
IyAxICJqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZC5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK
CiMgMSAiamF2YS9sYW5nL3JlZmxlY3QvQWNjZXNzaWJsZU9iamVjdC5oIiAxCgoKCgoKI3ByYWdt
YSBpbnRlcmZhY2UKCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6cmVmbGVjdDo6QWNjZXNzaWJsZU9i
amVjdCA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBBY2Nlc3NpYmxl
T2JqZWN0ICgpOwpwdWJsaWM6CiAgdmlydHVhbCBqYm9vbGVhbiBpc0FjY2Vzc2libGUgKCkgeyBy
ZXR1cm4gZmxhZzsgfQogIHN0YXRpYyB2b2lkIHNldEFjY2Vzc2libGUgKEpBcnJheTwgOjpqYXZh
OjpsYW5nOjpyZWZsZWN0OjpBY2Nlc3NpYmxlT2JqZWN0ICo+ICosIGpib29sZWFuKTsKICB2aXJ0
dWFsIHZvaWQgc2V0QWNjZXNzaWJsZSAoamJvb2xlYW4pOwpwcml2YXRlOgogIHN0YXRpYyB2b2lk
IGNoZWNrUGVybWlzc2lvbiAoKTsKICB2b2lkIHNlY3VyZVNldEFjY2Vzc2libGUgKGpib29sZWFu
KTsKcHVibGljOgogIGpib29sZWFuIGZsYWc7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFu
Zzo6Q2xhc3MgY2xhc3MkOwp9OwojIDkgImphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkLmgiIDIKCmNs
YXNzIDo6amF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpy
ZWZsZWN0OjpBY2Nlc3NpYmxlT2JqZWN0CnsKcHVibGljOgogIEZpZWxkICgpOwpwdWJsaWM6CiAg
amJvb2xlYW4gZXF1YWxzICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICA6OmphdmE6Omxhbmc6
OkNsYXNzICpnZXREZWNsYXJpbmdDbGFzcyAoKSB7IHJldHVybiBkZWNsYXJpbmdDbGFzczsgfQog
IDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXROYW1lICgpOwogIDo6amF2YTo6bGFuZzo6Q2xhc3Mg
KmdldFR5cGUgKCk7CiAgamludCBnZXRNb2RpZmllcnMgKCk7CiAgamludCBoYXNoQ29kZSAoKTsK
ICBqYm9vbGVhbiBnZXRCb29sZWFuICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqY2hhciBn
ZXRDaGFyICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqYnl0ZSBnZXRCeXRlICg6OmphdmE6
Omxhbmc6Ok9iamVjdCAqKTsKICBqc2hvcnQgZ2V0U2hvcnQgKDo6amF2YTo6bGFuZzo6T2JqZWN0
ICopOwogIGppbnQgZ2V0SW50ICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqbG9uZyBnZXRM
b25nICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqZmxvYXQgZ2V0RmxvYXQgKDo6amF2YTo6
bGFuZzo6T2JqZWN0ICopOwogIGpkb3VibGUgZ2V0RG91YmxlICg6OmphdmE6Omxhbmc6Ok9iamVj
dCAqKTsKICA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0ICg6OmphdmE6Omxhbmc6Ok9iamVjdCAq
KTsKcHJpdmF0ZToKICBqYm9vbGVhbiBnZXRCb29sZWFuICg6OmphdmE6Omxhbmc6OkNsYXNzICos
IDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpjaGFyIGdldENoYXIgKDo6amF2YTo6bGFuZzo6
Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamJ5dGUgZ2V0Qnl0ZSAoOjpqYXZh
OjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqc2hvcnQgZ2V0U2hv
cnQgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamlu
dCBnZXRJbnQgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7
CiAgamxvbmcgZ2V0TG9uZyAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9i
amVjdCAqKTsKICBqZmxvYXQgZ2V0RmxvYXQgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZh
OjpsYW5nOjpPYmplY3QgKik7CiAgamRvdWJsZSBnZXREb3VibGUgKDo6amF2YTo6bGFuZzo6Q2xh
c3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgOjpqYXZhOjpsYW5nOjpPYmplY3QgKmdl
dCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKcHVibGlj
OgogIHZvaWQgc2V0Qnl0ZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamJ5dGUpOwogIHZvaWQg
c2V0U2hvcnQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpzaG9ydCk7CiAgdm9pZCBzZXRJbnQg
KDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGppbnQpOwogIHZvaWQgc2V0TG9uZyAoOjpqYXZhOjps
YW5nOjpPYmplY3QgKiwgamxvbmcpOwogIHZvaWQgc2V0RmxvYXQgKDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICosIGpmbG9hdCk7CiAgdm9pZCBzZXREb3VibGUgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICos
IGpkb3VibGUpOwogIHZvaWQgc2V0Q2hhciAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamNoYXIp
OwogIHZvaWQgc2V0Qm9vbGVhbiAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamJvb2xlYW4pOwpw
cml2YXRlOgogIHZvaWQgc2V0Qnl0ZSAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxh
bmc6Ok9iamVjdCAqLCBqYnl0ZSk7CiAgdm9pZCBzZXRTaG9ydCAoOjpqYXZhOjpsYW5nOjpDbGFz
cyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqc2hvcnQpOwogIHZvaWQgc2V0SW50ICg6Omph
dmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGppbnQpOwogIHZvaWQg
c2V0TG9uZyAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBq
bG9uZyk7CiAgdm9pZCBzZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxh
bmc6Ok9iamVjdCAqLCBqZmxvYXQpOwogIHZvaWQgc2V0RG91YmxlICg6OmphdmE6Omxhbmc6OkNs
YXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpkb3VibGUpOwogIHZvaWQgc2V0Q2hhciAo
OjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqY2hhcik7CiAg
dm9pZCBzZXRCb29sZWFuICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICosIGpib29sZWFuKTsKICB2b2lkIHNldCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6Omph
dmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6Omxhbmc6
OkNsYXNzICopOwpwdWJsaWM6CiAgdm9pZCBzZXQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIDo6
amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwcml2YXRlOgogIHZvaWQgc2V0ICg6OmphdmE6Omxhbmc6
OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICop
OwpwdWJsaWM6CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nICgpOwpwcml2YXRlOgog
IDo6amF2YTo6bGFuZzo6Q2xhc3MgKmRlY2xhcmluZ0NsYXNzOwogIDo6amF2YTo6bGFuZzo6U3Ry
aW5nICpuYW1lOwogIGppbnQgb2Zmc2V0OwogIGZyaWVuZCBqZmllbGRJRCBfSnZfRnJvbVJlZmxl
Y3RlZEZpZWxkIChqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCAqKTsKICBmcmllbmQgam9iamVj
dCBfSnZfSk5JX1RvUmVmbGVjdGVkRmllbGQgKF9Kdl9KTklFbnYqLCBqY2xhc3MsIGpmaWVsZElE
LCBqYm9vbGVhbik7CiAgZnJpZW5kIGNsYXNzIGphdmE6Omxhbmc6OkNsYXNzOwpwdWJsaWM6Cgog
IHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAxNiAiLi4vLi4vLi4vbGli
amF2YS9nY2ovZmllbGQuaCIgMgoKIyAxICJnbnUvZ2NqL1Jhd0RhdGEuaCIgMQoKCgoKCiNwcmFn
bWEgaW50ZXJmYWNlCgoKCmV4dGVybiAiSmF2YSIKewogIG5hbWVzcGFjZSBnbnUKICB7CiAgICBu
YW1lc3BhY2UgZ2NqCiAgICB7CiAgICAgIGNsYXNzIFJhd0RhdGE7CiAgICB9CiAgfQp9OwoKY2xh
c3MgOjpnbnU6Omdjajo6UmF3RGF0YSA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnBy
aXZhdGU6CiAgUmF3RGF0YSAoKTsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cn07CiMgMTggIi4uLy4uLy4uL2xpYmphdmEvZ2NqL2ZpZWxkLmgiIDIKCgoKCnN0
cnVjdCBfSnZfRmllbGQKewoKICBzdHJ1Y3QgX0p2X1V0ZjhDb25zdCogbmFtZTsKCgoKCiAgamNs
YXNzIHR5cGU7CgogIF9Kdl91c2hvcnQgZmxhZ3M7CgoKCgogIF9Kdl91c2hvcnQgYnNpemU7CgoK
ICB1bmlvbiB7CiAgICBqaW50IGJvZmZzZXQ7CiAgICB2b2lkKiBhZGRyOwogIH0gdTsKCgogIGpi
b29sZWFuIGlzUmVzb2x2ZWQgKCkKICB7IHJldHVybiAhIChmbGFncyAmIDB4ODAwMCk7IH0KCiAg
cHVibGljOgoKICBpbnQgZ2V0T2Zmc2V0ICgpIHsgcmV0dXJuIHUuYm9mZnNldDsgfQoKICBqb2Jq
ZWN0IGdldE9iamVjdEZpZWxkIChqb2JqZWN0IG9iaikKICB7IHJldHVybiAqKGpvYmplY3QgKiko
KGNoYXIgKilvYmogKyBnZXRPZmZzZXQgKCkpOyB9CgogIGpmaWVsZElEIGdldE5leHRGaWVsZCAo
KSB7IHJldHVybiB0aGlzICsgMTsgfQoKICBqYm9vbGVhbiBpc1JlZiAoKQogICAgewogICAgICBp
ZiAoIWlzUmVzb2x2ZWQgKCkpCiAgICAgICAgewogICAgICAgICAgY2hhciBmaXJzdCA9ICgoX0p2
X1V0ZjhDb25zdCopdHlwZSktPmRhdGFbMF07CiAgICAgICAgICByZXR1cm4gZmlyc3QgPT0gJ1sn
IHx8IGZpcnN0ID09ICdMJzsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICByZXR1cm4gISB0eXBlLT5pc1ByaW1pdGl2ZSAoKTsKICAgICAgICB9CiAgICB9CgogIGpjbGFz
cyBnZXRDbGFzcyAoKQogIHsKCgoKICAgIHJldHVybiB0eXBlOwogIH0KCgogIGludCBnZXRNb2Rp
ZmllcnMoKQogIHsKICAgIHJldHVybiBmbGFncyAmIGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1vZGlm
aWVyOjpBTExfRkxBR1M7CiAgfQoKCgoKCiAgX0p2X1V0ZjhDb25zdCAqIGdldE5hbWVVdGY4Q29u
c3QgKGpjbGFzcykgeyByZXR1cm4gbmFtZTsgfQoKCn07CgoKCmlubGluZSBqYnl0ZQpfSnZfR2V0
U3RhdGljQnl0ZUZpZWxkIChqY2xhc3MsIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAo
amJ5dGUgKikgZmllbGQtPnUuYWRkcjsKfQoKaW5saW5lIGpzaG9ydApfSnZfR2V0U3RhdGljU2hv
cnRGaWVsZCAoamNsYXNzLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpzaG9ydCAq
KSBmaWVsZC0+dS5hZGRyOwp9CgppbmxpbmUgamludApfSnZfR2V0U3RhdGljSW50RmllbGQgKGpj
bGFzcywgX0p2X0ZpZWxkKiBmaWVsZCkKewogIHJldHVybiAqIChqaW50ICopIGZpZWxkLT51LmFk
ZHI7Cn0KCmlubGluZSBqbG9uZwpfSnZfR2V0U3RhdGljTG9uZ0ZpZWxkIChqY2xhc3MsIF9Kdl9G
aWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamxvbmcgKikgZmllbGQtPnUuYWRkcjsKfQoKaW5s
aW5lIGpvYmplY3QKX0p2X0dldE9iamVjdEZpZWxkIChqb2JqZWN0IG9iaiwgX0p2X0ZpZWxkKiBm
aWVsZCkKewogIHJldHVybiBmaWVsZC0+Z2V0T2JqZWN0RmllbGQgKG9iaik7Cn0KCmlubGluZSBq
Ynl0ZQpfSnZfR2V0Qnl0ZUZpZWxkIChqb2JqZWN0IG9iaiwgX0p2X0ZpZWxkKiBmaWVsZCkKewog
IHJldHVybiAqIChqYnl0ZSAqKSAoKGNoYXIqKSBvYmogKyBmaWVsZC0+Z2V0T2Zmc2V0ICgpKTsK
fQoKaW5saW5lIGpzaG9ydApfSnZfR2V0U2hvcnRGaWVsZCAoam9iamVjdCBvYmosIF9Kdl9GaWVs
ZCogZmllbGQpCnsKICByZXR1cm4gKiAoanNob3J0ICopICgoY2hhciopIG9iaiArIGZpZWxkLT5n
ZXRPZmZzZXQgKCkpOwp9CmlubGluZSBqaW50Cl9Kdl9HZXRJbnRGaWVsZCAoam9iamVjdCBvYmos
IF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamludCAqKSAoKGNoYXIqKSBvYmogKyBm
aWVsZC0+Z2V0T2Zmc2V0ICgpKTsKfQppbmxpbmUgamxvbmcKX0p2X0dldExvbmdGaWVsZCAoam9i
amVjdCBvYmosIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamxvbmcgKikgKChjaGFy
Kikgb2JqICsgZmllbGQtPmdldE9mZnNldCAoKSk7Cn0KCmV4dGVybiBpbmxpbmUgamZpZWxkSUQK
X0p2X0Zyb21SZWZsZWN0ZWRGaWVsZCAoamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmZpZWxk
KQp7CiAgcmV0dXJuIChqZmllbGRJRCkgKChjaGFyICopIGZpZWxkLT5kZWNsYXJpbmdDbGFzcy0+
ZmllbGRzICsgZmllbGQtPm9mZnNldCk7Cn0KCgoKZXh0ZXJuIGlubGluZSBqZmllbGRJRApKdkdl
dEZpcnN0SW5zdGFuY2VGaWVsZCAoamNsYXNzIGtsYXNzKQp7CiAgcmV0dXJuICYoa2xhc3MtPmZp
ZWxkc1trbGFzcy0+c3RhdGljX2ZpZWxkX2NvdW50XSk7Cn0KCmV4dGVybiBpbmxpbmUgamludApK
dk51bUluc3RhbmNlRmllbGRzIChqY2xhc3Mga2xhc3MpCnsKICByZXR1cm4ga2xhc3MtPmZpZWxk
X2NvdW50IC0ga2xhc3MtPnN0YXRpY19maWVsZF9jb3VudDsKfQoKZXh0ZXJuIGlubGluZSBqZmll
bGRJRApKdkdldEZpcnN0U3RhdGljRmllbGQgKGpjbGFzcyBrbGFzcykKewogIHJldHVybiAmKGts
YXNzLT5maWVsZHNbMF0pOwp9CgpleHRlcm4gaW5saW5lIGppbnQKSnZOdW1TdGF0aWNGaWVsZHMg
KGpjbGFzcyBrbGFzcykKewogIHJldHVybiBrbGFzcy0+c3RhdGljX2ZpZWxkX2NvdW50Owp9Cgpl
eHRlcm4gaW5saW5lIGpib29sZWFuCkp2RmllbGRJc1JlZiAoamZpZWxkSUQgZmllbGQpCnsKICBy
ZXR1cm4gZmllbGQtPmlzUmVmICgpICYmIGZpZWxkLT50eXBlICE9ICZnbnU6Omdjajo6UmF3RGF0
YTo6Y2xhc3MkOwp9CgpleHRlcm4gaW5saW5lIGpvYmplY3QKSnZHZXRPYmplY3RGaWVsZCAoam9i
amVjdCBvYmosIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gX0p2X0dldE9iamVjdEZpZWxk
IChvYmosIGZpZWxkKTsKfQojIDMyICIuLi8uLi8uLi9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDIK
CgpzdHJ1Y3QgX0p2X1ZUYWJsZQp7CgoKCiAgdHlwZWRlZiB2b2lkICp2dGFibGVfZWx0OwoKICBq
Y2xhc3MgY2xhczsKICB2b2lkICpnY19kZXNjcjsKCgoKICB2dGFibGVfZWx0IG1ldGhvZFsxXTsK
IyA2MCAiLi4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIgogIHZvaWQgKmdldF9tZXRob2Qo
aW50IGkpIHsgcmV0dXJuIG1ldGhvZFtpXTsgfQogIHZvaWQgc2V0X21ldGhvZChpbnQgaSwgdm9p
ZCAqZnB0cikgeyBtZXRob2RbaV0gPSBmcHRyOyB9CiAgdm9pZCAqZ2V0X2ZpbmFsaXplcigpIHsg
cmV0dXJuIGdldF9tZXRob2QoMCk7IH0KCgogIHN0YXRpYyBzaXplX3QgdnRhYmxlX2VsdF9zaXpl
KCkgeyByZXR1cm4gc2l6ZW9mKHZ0YWJsZV9lbHQpOyB9CgoKICBzdGF0aWMgamludCBpZHhfdG9f
b2Zmc2V0IChpbnQgaW5kZXgpCiAgewogICAgcmV0dXJuICgyICogc2l6ZW9mICh2b2lkICopKSAr
IChpbmRleCAqIHZ0YWJsZV9lbHRfc2l6ZSAoKSk7CiAgfQogIHN0YXRpYyBfSnZfVlRhYmxlICpu
ZXdfdnRhYmxlIChpbnQgY291bnQpOwp9OwoKCgoKCgpzdHJ1Y3QgX0p2X0FycmF5VlRhYmxlIDog
cHVibGljIF9Kdl9WVGFibGUKewogIHZ0YWJsZV9lbHQgZXh0cmFfbWV0aG9kWzUgLSAxXTsKfTsK
CnVuaW9uIF9Kdl93b3JkCnsKICBqb2JqZWN0IG87CiAgamludCBpOwogIGpmbG9hdCBmOwogIGpp
bnQgaWFbMV07CiAgdm9pZCogcDsKIyAxMDAgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qdm0u
aCIKICBqY2xhc3MgY2xheno7CiAganN0cmluZyBzdHJpbmc7CiAgc3RydWN0IF9Kdl9GaWVsZCAq
ZmllbGQ7CiAgc3RydWN0IF9Kdl9VdGY4Q29uc3QgKnV0Zjg7CiAgc3RydWN0IF9Kdl9SZXNvbHZl
ZE1ldGhvZCAqcm1ldGhvZDsKfTsKCnVuaW9uIF9Kdl93b3JkMgp7CiAgamludCBpYVsyXTsKICBq
bG9uZyBsOwogIGpkb3VibGUgZDsKfTsKIyAxMjkgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9q
dm0uaCIKZXh0ZXJuIGludCBfSnZfc3RyTGVuZ3RoVXRmOChjaGFyKiBzdHIsIGludCBsZW4pOwoK
dHlwZWRlZiBzdHJ1Y3QgX0p2X1V0ZjhDb25zdCBVdGY4Q29uc3Q7Cl9Kdl9VdGY4Q29uc3QgKl9K
dl9tYWtlVXRmOENvbnN0IChjaGFyICpzLCBpbnQgbGVuKTsKX0p2X1V0ZjhDb25zdCAqX0p2X21h
a2VVdGY4Q29uc3QgKGpzdHJpbmcgc3RyaW5nKTsKZXh0ZXJuIGpib29sZWFuIF9Kdl9lcXVhbFV0
ZjhDb25zdHMgKF9Kdl9VdGY4Q29uc3QgKiwgX0p2X1V0ZjhDb25zdCAqKTsKZXh0ZXJuIGpib29s
ZWFuIF9Kdl9lcXVhbCAoX0p2X1V0ZjhDb25zdCAqLCBqc3RyaW5nLCBqaW50KTsKZXh0ZXJuIGpi
b29sZWFuIF9Kdl9lcXVhbG4gKF9Kdl9VdGY4Q29uc3QgKiwganN0cmluZywgamludCk7CgoKCgpu
YW1lc3BhY2UgZ2NqCnsKCiAgZXh0ZXJuIF9Kdl9VdGY4Q29uc3QgKnZvaWRfc2lnbmF0dXJlOwog
IGV4dGVybiBfSnZfVXRmOENvbnN0ICpjbGluaXRfbmFtZTsKICBleHRlcm4gX0p2X1V0ZjhDb25z
dCAqaW5pdF9uYW1lOwogIGV4dGVybiBfSnZfVXRmOENvbnN0ICpmaW5pdF9uYW1lOwoKCiAgZXh0
ZXJuIGJvb2wgcnVudGltZUluaXRpYWxpemVkOwp9OwoKCnR5cGVkZWYgdm9pZCBfSnZfRmluYWxp
emVyRnVuYyAoam9iamVjdCk7CgoKdm9pZCAqX0p2X0FsbG9jT2JqIChqc2l6ZSBzaXplLCBqY2xh
c3MgY2wpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgp2b2lkICpfSnZfQWxsb2NQdHJG
cmVlT2JqIChqc2l6ZSBzaXplLCBqY2xhc3MgY2wpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18p
KTsKCnZvaWQgKl9Kdl9BbGxvY0FycmF5IChqc2l6ZSBzaXplLCBqY2xhc3MgY2wpIF9fYXR0cmli
dXRlX18oKF9fbWFsbG9jX18pKTsKCnZvaWQgKl9Kdl9BbGxvY0J5dGVzIChqc2l6ZSBzaXplKSBf
X2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgoKdm9pZCAqX0p2X0FsbG9jUmF3T2JqIChqc2l6
ZSBzaXplKSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7Cgp2b2lkIF9Kdl9UaHJvd05vTWVt
b3J5KCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CgoKdm9pZCAqX0p2X0FsbG9jVHJh
Y2VPbmUgKGpzaXplIHNpemUgKTsKCnZvaWQgKl9Kdl9BbGxvY1RyYWNlVHdvIChqc2l6ZSBzaXpl
ICk7Cgp2b2lkIF9Kdl9Jbml0R0MgKHZvaWQpOwoKdm9pZCBfSnZfUmVnaXN0ZXJGaW5hbGl6ZXIg
KHZvaWQgKm9iamVjdCwgX0p2X0ZpbmFsaXplckZ1bmMgKm1ldGhvZCk7Cgp2b2lkICogX0p2X0J1
aWxkR0NEZXNjcihqY2xhc3MpOwoKCgp2b2lkICpfSnZfTWFsbG9jVW5jaGVja2VkIChqc2l6ZSBz
aXplKSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgoKCnZvaWQgX0p2X0dDSW5pdGlhbGl6
ZUZpbmFsaXplcnMgKHZvaWQgKCpub3RpZmllcikgKHZvaWQpKTsKCnZvaWQgX0p2X1J1bkZpbmFs
aXplcnMgKHZvaWQpOwoKdm9pZCBfSnZfUnVuQWxsRmluYWxpemVycyAodm9pZCk7Cgp2b2lkIF9K
dl9SdW5HQyAodm9pZCk7Cgp2b2lkIF9Kdl9EaXNhYmxlR0MgKHZvaWQpOwp2b2lkIF9Kdl9FbmFi
bGVHQyAodm9pZCk7CgoKCnZvaWQgX0p2X0dDUmVnaXN0ZXJEaXNhcHBlYXJpbmdMaW5rIChqb2Jq
ZWN0ICpvYmpwKTsKCgpqYm9vbGVhbiBfSnZfR0NDYW5SZWNsYWltU29mdFJlZmVyZW5jZSAoam9i
amVjdCBvYmopOwoKCmxvbmcgX0p2X0dDVG90YWxNZW1vcnkgKHZvaWQpOwoKbG9uZyBfSnZfR0NG
cmVlTWVtb3J5ICh2b2lkKTsKCgoKdm9pZCBfSnZfR0NTZXRJbml0aWFsSGVhcFNpemUgKHNpemVf
dCBzaXplKTsKCgoKdm9pZCBfSnZfR0NTZXRNYXhpbXVtSGVhcFNpemUgKHNpemVfdCBzaXplKTsK
CgoKCnZvaWQgX0p2X1NldEluaXRpYWxIZWFwU2l6ZSAoY29uc3QgY2hhciAqYXJnKTsKCgoKCnZv
aWQgX0p2X1NldE1heGltdW1IZWFwU2l6ZSAoY29uc3QgY2hhciAqYXJnKTsKCmV4dGVybiAiQyIg
dm9pZCBKdlJ1bk1haW4gKGpjbGFzcyBrbGFzcywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2
KTsKdm9pZCBfSnZfUnVuTWFpbiAoamNsYXNzIGtsYXNzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQg
YXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCiAgICAgICAgICAgICAgICAgIGJvb2wgaXNfamFyKTsK
CgoKCgoKaW5saW5lIF9Kdl9WVGFibGUgKgpfSnZfVlRhYmxlOjpuZXdfdnRhYmxlIChpbnQgY291
bnQpCnsKICBzaXplX3Qgc2l6ZSA9IHNpemVvZihfSnZfVlRhYmxlKSArIChjb3VudCAtIDEpICog
dnRhYmxlX2VsdF9zaXplICgpOwogIHJldHVybiAoX0p2X1ZUYWJsZSAqKSBfSnZfQWxsb2NCeXRl
cyAoc2l6ZSk7Cn0KCgppbmxpbmUgamludApfSnZfSGFzaENvZGUgKGpvYmplY3Qgb2JqKQp7CgoK
CiAgcmV0dXJuIChqaW50KSAoKHVuc2lnbmVkIGxvbmcpIG9iaiAlIDB4N2ZmZmZmZmYpOwp9CgoK
CgoKCmlubGluZSBjaGFyICoKX0p2X0dldEFycmF5RWxlbWVudEZyb21FbGVtZW50VHlwZSAoam9i
amVjdCBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzIGVs
ZW1lbnRfdHlwZSkKewogIGNoYXIgKmVsdHM7CiAgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBfSnZf
Ynl0ZUNsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBlbGVtZW50cyAoKGpieXRlQXJyYXkpIGFy
cmF5KTsKICBlbHNlIGlmIChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X3Nob3J0Q2xhc3MpKQogICAg
ZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoanNob3J0QXJyYXkpIGFycmF5KTsKICBlbHNlIGlm
IChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X2ludENsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBl
bGVtZW50cyAoKGppbnRBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAo
JiBfSnZfbG9uZ0NsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBlbGVtZW50cyAoKGpsb25nQXJy
YXkpIGFycmF5KTsKICBlbHNlIGlmIChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X2Jvb2xlYW5DbGFz
cykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVudHMgKChqYm9vbGVhbkFycmF5KSBhcnJheSk7
CiAgZWxzZSBpZiAoZWxlbWVudF90eXBlID09ICgmIF9Kdl9jaGFyQ2xhc3MpKQogICAgZWx0cyA9
IChjaGFyICopIGVsZW1lbnRzICgoamNoYXJBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1l
bnRfdHlwZSA9PSAoJiBfSnZfZmxvYXRDbGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVu
dHMgKChqZmxvYXRBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBf
SnZfZG91YmxlQ2xhc3MpKQogICAgZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoamRvdWJsZUFy
cmF5KSBhcnJheSk7CiAgZWxzZQogICAgZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoam9iamVj
dEFycmF5KSBhcnJheSk7CiAgcmV0dXJuIGVsdHM7Cn0KCmV4dGVybiAiQyIgdm9pZCBfSnZfVGhy
b3dCYWRBcnJheUluZGV4IChqaW50IGJhZF9pbmRleCkKICBfX2F0dHJpYnV0ZV9fKChub3JldHVy
bikpOwpleHRlcm4gIkMiIHZvaWQgX0p2X1Rocm93TnVsbFBvaW50ZXJFeGNlcHRpb24gKHZvaWQp
CiAgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKZXh0ZXJuICJDIiBqb2JqZWN0IF9Kdl9OZXdB
cnJheSAoamludCB0eXBlLCBqaW50IHNpemUpCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykp
OwpleHRlcm4gIkMiIGpvYmplY3QgX0p2X05ld011bHRpQXJyYXkgKGpjbGFzcyBrbGFzcywgamlu
dCBkaW1zLCAuLi4pCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwpleHRlcm4gIkMiIHZv
aWQgKl9Kdl9DaGVja0Nhc3QgKGpjbGFzcyBrbGFzcywgam9iamVjdCBvYmopOwpleHRlcm4gIkMi
IHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2QgKGpjbGFzcyBrbGFzcywgVXRmOENvbnN0
ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRmOENv
bnN0ICpzaWduYXR1cmUpOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRo
b2RJZHggKGpjbGFzcyBrbGFzcywgamNsYXNzIGlmYWNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXRoX2lkeCk7CmV4dGVybiAiQyIgdm9pZCBf
SnZfQ2hlY2tBcnJheVN0b3JlIChqb2JqZWN0IGFycmF5LCBqb2JqZWN0IG9iaik7CmV4dGVybiAi
QyIgdm9pZCBfSnZfUmVnaXN0ZXJDbGFzcyAoamNsYXNzIGtsYXNzKTsKZXh0ZXJuICJDIiB2b2lk
IF9Kdl9SZWdpc3RlckNsYXNzZXMgKGpjbGFzcyAqY2xhc3Nlcyk7CmV4dGVybiAiQyIgdm9pZCBf
SnZfUmVnaXN0ZXJSZXNvdXJjZSAodm9pZCAqdnB0cik7CmV4dGVybiB2b2lkIF9Kdl9VbnJlZ2lz
dGVyQ2xhc3MgKF9Kdl9VdGY4Q29uc3QqLCBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciopOwpleHRl
cm4gdm9pZCBfSnZfUmVzb2x2ZUZpZWxkIChfSnZfRmllbGQgKiwgamF2YTo6bGFuZzo6Q2xhc3NM
b2FkZXIqKTsKCmV4dGVybiBqY2xhc3MgX0p2X0ZpbmRDbGFzcyAoX0p2X1V0ZjhDb25zdCAqbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAq
bG9hZGVyKTsKZXh0ZXJuIGpjbGFzcyBfSnZfRmluZENsYXNzRnJvbVNpZ25hdHVyZSAoY2hhciAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpD
bGFzc0xvYWRlciAqbG9hZGVyKTsKZXh0ZXJuIHZvaWQgX0p2X0dldFR5cGVzRnJvbVNpZ25hdHVy
ZSAoam1ldGhvZElEIG1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamNsYXNzIGRlY2xhcmluZ0NsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBKQXJyYXk8amNsYXNzPiAqKmFyZ190eXBlc19vdXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpjbGFzcyAqcmV0dXJuX3R5cGVfb3V0KTsKCmV4dGVybiBq
b2JqZWN0IF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmosIGpjbGFzcyByZXR1cm5fdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aCwgamJv
b2xlYW4gaXNfY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SkFycmF5PGpjbGFzcz4gKnBhcmFtZXRlcl90eXBlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqb2JqZWN0QXJyYXkgYXJncyk7Cgp1bmlvbiBqdmFsdWU7CmV4dGVybiBqdGhy
b3dhYmxlIF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamNsYXNzIHJldHVybl90eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGlzX2NvbnN0cnVjdG9yLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEpBcnJheTxqY2xhc3M+ICpwYXJhbWV0ZXJfdHlwZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICphcmdzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqcmVzdWx0KTsKCmV4dGVy
biBqb2JqZWN0IF9Kdl9OZXdNdWx0aUFycmF5IChqY2xhc3MsIGppbnQgbmRpbXMsIGppbnQqIGRp
bXMpCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKCmV4dGVybiAiQyIKewogIGppbnQg
X0p2X2RpdkkgKGppbnQsIGppbnQpOwogIGppbnQgX0p2X3JlbUkgKGppbnQsIGppbnQpOwogIGps
b25nIF9Kdl9kaXZKIChqbG9uZywgamxvbmcpOwogIGpsb25nIF9Kdl9yZW1KIChqbG9uZywgamxv
bmcpOwp9CgoKZXh0ZXJuIGNoYXIgKl9Kdl9UaGlzRXhlY3V0YWJsZSAodm9pZCk7CmV4dGVybiB2
b2lkIF9Kdl9UaGlzRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsKCgp2b2lkICpfSnZfRmluZFN5
bWJvbEluRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gdm9pZCBfSnZfSk5JX0lu
aXQgKHZvaWQpOwoKCl9Kdl9KTklFbnYgKl9Kdl9HZXRDdXJyZW50Sk5JRW52ICgpOwp2b2lkIF9K
dl9TZXRDdXJyZW50Sk5JRW52IChfSnZfSk5JRW52ICopOwoKc3RydWN0IF9Kdl9KYXZhVk07Cl9K
dl9KYXZhVk0gKl9Kdl9HZXRKYXZhVk0gKCk7CgoKYm9vbCBfSnZfVmVyaWZ5RmllbGRTaWduYXR1
cmUgKF9Kdl9VdGY4Q29uc3Qqc2lnKTsKYm9vbCBfSnZfVmVyaWZ5TWV0aG9kU2lnbmF0dXJlIChf
SnZfVXRmOENvbnN0KnNpZyk7CmJvb2wgX0p2X1ZlcmlmeUNsYXNzTmFtZSAodW5zaWduZWQgY2hh
ciogcHRyLCBfSnZfdXNob3J0IGxlbmd0aCk7CmJvb2wgX0p2X1ZlcmlmeUNsYXNzTmFtZSAoX0p2
X1V0ZjhDb25zdCAqbmFtZSk7CmJvb2wgX0p2X1ZlcmlmeUlkZW50aWZpZXIgKF9Kdl9VdGY4Q29u
c3QgKik7CmJvb2wgX0p2X0NsYXNzTmFtZVNhbWVQYWNrYWdlIChfSnZfVXRmOENvbnN0ICpuYW1l
MSwgX0p2X1V0ZjhDb25zdCAqbmFtZTIpOwoKCgojIDEgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVk
ZS9qdm1waS5oIiAxCiMgMTcgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qdm1waS5oIgojIDEg
Ii4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmkuaCIgMQojIDE3ICIuLi8uLi8uLi9saWJqYXZh
L2luY2x1ZGUvam5pLmgiCiMgMSAiZ2NqL2xpYmdjai1jb25maWcuaCIgMQojIDE4ICIuLi8uLi8u
Li9saWJqYXZhL2luY2x1ZGUvam5pLmgiIDIKCgojIDEgIi9ob21lL2diL3JwbS9CVUlMRC9nY2Mt
My4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRpby5oIiAxIDMK
IyAzOSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgt
Z251L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL2hvbWUvZ2Iv
cnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyA0NCAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYt
bWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDU0ICIvaG9tZS9n
Yi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1
ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvaG9tZS9n
Yi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1
ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi9ob21l
L2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5j
bHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMg
MTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi9ob21lL2diL3JwbS9CVUlMRC9n
Y2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCiMgMzIxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1s
aW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2lu
dF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2Jq
LWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5o
IiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAg
ICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0
YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVj
dAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsK
dHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRl
Owp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwojIDEgIi9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4
LWdudS9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL2hvbWUvZ2IvcnBt
L0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0Kewog
IF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dD
T05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQs
CiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAg
X19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoK
CgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJS
T1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJh
bnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0
ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGlu
dCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29u
dl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29u
dl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9f
Z2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp
Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp
bnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlw
ZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2dj
b252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2dj
b252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFu
c19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1
Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIg
Kl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hh
ciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9f
aW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVl
ZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87
CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2Rh
dGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19v
dXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoK
CiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAg
X19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0
IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29u
dl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVw
czsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0g
Kl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1
bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVj
dCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7
CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ
X18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5k
cmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvaG9tZS9nYi9y
cG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUv
c3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1
NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFy
a2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1
ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51
bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWws
CiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjEgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hh
ciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9i
YXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hh
ciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9l
bmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNo
YXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9f
b2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2ln
bmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xv
Y2tfdCAqX2xvY2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBf
b2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2Rl
OwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAq
KV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklM
RV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJf
MV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoj
IDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFk
X2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoK
Cgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25z
dCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
bik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29m
ZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lk
ICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlv
bl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVk
ZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9z
ZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19y
ZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2Vl
azsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0
eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoK
c3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0
cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rp
b25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAo
X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4g
d2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dv
dmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgp
OwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9f
cGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
X0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5s
b2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmls
ZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpl
eHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIg
KiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50
ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxF
ICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRu
IChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lP
X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19v
ZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90
LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19G
SUxFICopIHRocm93ICgpOwojIDUxNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDc1ICIv
aG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2Nj
L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3Zh
X2xpc3RfXzsKIyA4OSAiL2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJh
a2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBv
c190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi9ob21lL2diL3Jw
bS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9z
dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOSAi
L2hvbWUvZ2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2dj
Yy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxF
ICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChf
X2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9f
Y29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2NyAiL2hvbWUvZ2IvcnBtL0JV
SUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGlv
LmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNo
YXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1f
ciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxODcgIi9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4x
L29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy
biBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4g
aW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2gg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2Nj
LTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMwpl
eHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rlcykg
dGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19j
b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29r
aWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsK
CgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0
IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFt
IChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9p
ZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9f
bW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNl
dGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50
ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHBy
aW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0
ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h
cmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywg
MCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19y
ZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVz
dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192
YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5m
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2Fu
ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0
ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2Fu
Zl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3Nj
YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkp
KTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFy
ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM1ICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2Nj
LTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkaW8uaCIgMwpl
eHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGlu
dCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFy
ICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBf
X3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tl
ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0
cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50
IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2
b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVy
biBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf
X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0
IF9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9f
cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRl
cm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRy
LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
biwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZz
ZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4
dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDQ5OCAiL2hvbWUv
Z2IvcnBtL0JVSUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNs
dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90
IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9f
cG9zKSB0aHJvdyAoKTsKIyA1MzIgIi9ob21lL2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2
LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNl
ZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhy
b3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2
NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2
NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAq
X19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo
YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu
IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZp
bGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVu
IChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4
dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy
ICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0
ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0
YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1
Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
ZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVu
bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2MzkgIi9ob21lL2diL3JwbS9C
VUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5jbHVkZS9zdGRp
by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91c3IvaW5j
bHVkZS9iaXRzL3N0ZGlvLmgiIDMKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJu
IHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIg
KHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5l
IGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19m
cCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnAp
IDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5l
IGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4p
LT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4p
IDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5s
aW5lIGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChf
X2MsIHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFt
LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+
X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tl
ZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJl
YW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVy
ZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikg
KCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApw
dXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCkt
Pl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAo
c3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91
dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90Cmdl
dGxpbmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJl
YW0pOwp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoK
aW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAg
cmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDAgIi9ob21l
L2diL3JwbS9CVUlMRC9nY2MtMy4xL29iai1pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS9nY2MvaW5j
bHVkZS9zdGRpby5oIiAyIDMKCgp9CiMgMjEgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmku
aCIgMgoKIyAxICIvaG9tZS9nYi9ycG0vQlVJTEQvZ2NjLTMuMS9vYmotaTU4Ni1tYW5kcmFrZS1s
aW51eC1nbnUvZ2NjL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDExMCAiL2hvbWUvZ2IvcnBtL0JV
SUxEL2djYy0zLjEvb2JqLWk1ODYtbWFuZHJha2UtbGludXgtZ251L2djYy9pbmNsdWRlL3N0ZGFy
Zy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAyMyAiLi4vLi4vLi4vbGli
amF2YS9pbmNsdWRlL2puaS5oIiAyCiMgMzIgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmku
aCIKIyAxICJnbnUvZ2NqL3J1bnRpbWUvSk5JV2Vha1JlZi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRl
cmZhY2UKCiMgMSAiamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNlLmgiIDEKCgoKCgojcHJhZ21h
IGludGVyZmFjZQoKIyAxICJqYXZhL2xhbmcvcmVmL1JlZmVyZW5jZS5oIiAxCgoKCgoKI3ByYWdt
YSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGdudQogIHsKICAgIG5h
bWVzcGFjZSBnY2oKICAgIHsKICAgICAgY2xhc3MgUmF3RGF0YTsKICAgIH0KICB9Cn07CgpjbGFz
cyA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJlbmNlIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2Jq
ZWN0CnsKcHVibGljOgogIFJlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgUmVm
ZXJlbmNlICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJl
bmNlUXVldWUgKik7CnByaXZhdGU6CiAgdm9pZCBjcmVhdGUgKDo6amF2YTo6bGFuZzo6T2JqZWN0
ICopOwpwdWJsaWM6CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0ICgpOwogIHZp
cnR1YWwgdm9pZCBjbGVhciAoKTsKICB2aXJ0dWFsIGpib29sZWFuIGlzRW5xdWV1ZWQgKCk7CiAg
dmlydHVhbCBqYm9vbGVhbiBlbnF1ZXVlICgpOwpwdWJsaWM6CiAgOjpnbnU6Omdjajo6UmF3RGF0
YSAqcmVmZXJlbnQ7CiAgOjpnbnU6Omdjajo6UmF3RGF0YSAqY29weTsKICA6OmphdmE6Omxhbmc6
OnJlZjo6UmVmZXJlbmNlUXVldWUgKnF1ZXVlOwogIDo6amF2YTo6bGFuZzo6cmVmOjpSZWZlcmVu
Y2UgKm5leHRPblF1ZXVlOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6Ok9iamVjdCAqbG9jazsKcHVi
bGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAiamF2YS9s
YW5nL3JlZi9XZWFrUmVmZXJlbmNlLmgiIDIKCmNsYXNzIDo6amF2YTo6bGFuZzo6cmVmOjpXZWFr
UmVmZXJlbmNlIDogcHVibGljIDo6amF2YTo6bGFuZzo6cmVmOjpSZWZlcmVuY2UKewpwdWJsaWM6
CiAgV2Vha1JlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgV2Vha1JlZmVyZW5j
ZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjpsYW5nOjpyZWY6OlJlZmVyZW5jZVF1
ZXVlICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAiZ251
L2djai9ydW50aW1lL0pOSVdlYWtSZWYuaCIgMgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNl
IGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAgbmFtZXNwYWNlIHJ1bnRpbWUK
ICAgICAgewogICAgICAgIGNsYXNzIEpOSVdlYWtSZWY7CiAgICAgIH0KICAgIH0KICB9Cn07Cgpj
bGFzcyA6OmdudTo6Z2NqOjpydW50aW1lOjpKTklXZWFrUmVmIDogcHVibGljIDo6amF2YTo6bGFu
Zzo6cmVmOjpXZWFrUmVmZXJlbmNlCnsKcHVibGljOgogIEpOSVdlYWtSZWYgKDo6amF2YTo6bGFu
Zzo6T2JqZWN0ICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMg
MzMgIi4uLy4uLy4uL2xpYmphdmEvaW5jbHVkZS9qbmkuaCIgMgoKdHlwZWRlZiBnbnU6Omdjajo6
cnVudGltZTo6Sk5JV2Vha1JlZiAqandlYWs7Cgp0eXBlZGVmIHN0cnVjdCBfSnZfSk5JRW52IEpO
SUVudjsKdHlwZWRlZiBzdHJ1Y3QgX0p2X0phdmFWTSBKYXZhVk07CiMgMTgyICIuLi8uLi8uLi9s
aWJqYXZhL2luY2x1ZGUvam5pLmgiCmV4dGVybiAiQyIKewoKCgoKZXh0ZXJuIGppbnQgSk5JX09u
TG9hZCAoSmF2YVZNICosIHZvaWQgKik7CmV4dGVybiB2b2lkIEpOSV9PblVubG9hZCAoSmF2YVZN
ICosIHZvaWQgKik7CgoKCmV4dGVybiBqaW50IEpOSV9HZXREZWZhdWx0SmF2YVZNSW5pdEFyZ3Mg
KHZvaWQgKik7CmV4dGVybiBqaW50IEpOSV9DcmVhdGVKYXZhVk0gKEphdmFWTSAqKiwgdm9pZCAq
Kiwgdm9pZCAqKTsKZXh0ZXJuIGppbnQgSk5JX0dldENyZWF0ZWRKYXZhVk1zKEphdmFWTSAqKiwg
anNpemUsIGpzaXplICopOwoKCn07CgoKdHlwZWRlZiB1bmlvbiBqdmFsdWUKewogIGpib29sZWFu
IHo7CiAgamJ5dGUgYjsKICBqY2hhciBjOwogIGpzaG9ydCBzOwogIGppbnQgaTsKICBqbG9uZyBq
OwogIGpmbG9hdCBmOwogIGpkb3VibGUgZDsKICBqb2JqZWN0IGw7Cn0ganZhbHVlOwoKCnR5cGVk
ZWYgdm9pZCAqICgqX0p2X2Z1bmMpICguLi4pOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBjaGFy
ICpuYW1lOwogIGNoYXIgKnNpZ25hdHVyZTsKICB2b2lkICpmblB0cjsKfSBKTklOYXRpdmVNZXRo
b2Q7CgpzdHJ1Y3QgSk5JTmF0aXZlSW50ZXJmYWNlCnsKICBfSnZfZnVuYyByZXNlcnZlZDA7CiAg
X0p2X2Z1bmMgcmVzZXJ2ZWQxOwogIF9Kdl9mdW5jIHJlc2VydmVkMjsKICBfSnZfZnVuYyByZXNl
cnZlZDM7CgogIGppbnQgKCpHZXRWZXJzaW9uKSAoSk5JRW52ICopOwogIGpjbGFzcyAoKkRlZmlu
ZUNsYXNzKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgamJ5dGUgKiwganNpemUpOwogIGpjbGFzcyAoKkZpbmRDbGFz
cykgKEpOSUVudiAqLCBjb25zdCBjaGFyICopOwoKICBqbWV0aG9kSUQgKCpGcm9tUmVmbGVjdGVk
TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGpmaWVsZElEICgqRnJvbVJlZmxlY3RlZEZp
ZWxkKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGpvYmplY3QgKCpUb1JlZmxlY3RlZE1ldGhvZCkg
KEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqYm9vbGVhbik7CgogIGpjbGFzcyAoKkdldFN1cGVyY2xhc3MpIChK
TklFbnYgKiwgamNsYXNzKTsKICBqYm9vbGVhbiAoKklzQXNzaWduYWJsZUZyb20pIChKTklFbnYg
KiwgamNsYXNzLCBqY2xhc3MpOwoKICBqb2JqZWN0ICgqVG9SZWZsZWN0ZWRGaWVsZCkgKEpOSUVu
diAqLCBqY2xhc3MsIGpmaWVsZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpib29sZWFuKTsKCiAgamludCAoKlRocm93KSAoSk5JRW52ICosIGp0aHJvd2Fi
bGUpOwogIGppbnQgKCpUaHJvd05ldykgKEpOSUVudiAqLCBqY2xhc3MsIGNvbnN0IGNoYXIgKik7
CiAganRocm93YWJsZSAoKkV4Y2VwdGlvbk9jY3VycmVkKSAoSk5JRW52ICopOwogIHZvaWQgKCpF
eGNlcHRpb25EZXNjcmliZSkgKEpOSUVudiAqKTsKICB2b2lkICgqRXhjZXB0aW9uQ2xlYXIpIChK
TklFbnYgKik7CiAgdm9pZCAoKkZhdGFsRXJyb3IpIChKTklFbnYgKiwgY29uc3QgY2hhciAqKTsK
CiAgamludCAoKlB1c2hMb2NhbEZyYW1lKSAoSk5JRW52ICosIGppbnQpOwogIGpvYmplY3QgKCpQ
b3BMb2NhbEZyYW1lKSAoSk5JRW52ICosIGpvYmplY3QpOwoKICBqb2JqZWN0ICgqTmV3R2xvYmFs
UmVmKSAoSk5JRW52ICosIGpvYmplY3QpOwogIHZvaWQgKCpEZWxldGVHbG9iYWxSZWYpIChKTklF
bnYgKiwgam9iamVjdCk7CiAgdm9pZCAoKkRlbGV0ZUxvY2FsUmVmKSAoSk5JRW52ICosIGpvYmpl
Y3QpOwogIGpib29sZWFuICgqSXNTYW1lT2JqZWN0KSAoSk5JRW52ICosIGpvYmplY3QsIGpvYmpl
Y3QpOwoKICBqb2JqZWN0ICgqTmV3TG9jYWxSZWYpIChKTklFbnYgKiwgam9iamVjdCk7CiAgamlu
dCAoKkVuc3VyZUxvY2FsQ2FwYWNpdHkpIChKTklFbnYgKiwgamludCk7CgogIGpvYmplY3QgKCpB
bGxvY09iamVjdCkgKEpOSUVudiAqLCBqY2xhc3MpOwogIGpvYmplY3QgKCpOZXdPYmplY3QpIChK
TklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsIC4uLik7CiAgam9iamVjdCAoKk5ld09iamVjdFYp
IChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgam9iamVjdCAoKk5ld09iamVjdEEpIChKTklF
bnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganZhbHVlICopOwoKICBqY2xhc3MgKCpHZXRPYmplY3RDbGFzcykgKEpOSUVu
diAqLCBqb2JqZWN0KTsKICBqYm9vbGVhbiAoKklzSW5zdGFuY2VPZikgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqY2xhc3MpOwogIGptZXRob2RJRCAoKkdldE1ldGhvZElEKSAoSk5JRW52ICosIGpjbGFz
cywgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKik7CgogIGpvYmplY3QgKCpDYWxsT2JqZWN0TWV0aG9kKSAoSk5JRW52
ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuLi4pOwogIGpvYmplY3QgKCpDYWxsT2JqZWN0TWV0aG9kVikgKEpOSUVudiAq
LCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFfbGlzdCk7CiAgam9iamVjdCAoKkNhbGxPYmplY3RNZXRob2RBKSAoSk5JRW52
ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqdmFsdWUgKik7CiAgamJvb2xlYW4gKCpDYWxsQm9vbGVhbk1ldGhvZCkgKEpO
SUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLi4uKTsKICBqYm9vbGVhbiAoKkNhbGxCb29sZWFuTWV0aG9kVikgKEpO
SUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamJvb2xlYW4gKCpDYWxsQm9vbGVhbk1ldGhvZEEp
IChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqYnl0ZSAoKkNhbGxCeXRlTWV0aG9kKSAo
Sk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuLi4pOwogIGpieXRlICgqQ2FsbEJ5dGVNZXRob2RWKSAoSk5JRW52
ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YV9saXN0KTsKICBqYnl0ZSAoKkNhbGxCeXRlTWV0aG9kQSkgKEpOSUVudiAq
LCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganZhbHVlICopOwogIGpjaGFyICgqQ2FsbENoYXJNZXRob2QpIChKTklFbnYgKiwg
am9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC4uLik7CiAgamNoYXIgKCpDYWxsQ2hhck1ldGhvZFYpIChKTklFbnYgKiwgam9iamVj
dCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhX2xpc3QpOwogIGpjaGFyICgqQ2FsbENoYXJNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3Qs
IGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dmFsdWUgKik7CiAganNob3J0ICgqQ2FsbFNob3J0TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3Qs
IGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Li4pOwogIGpzaG9ydCAoKkNhbGxTaG9ydE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xp
c3QpOwogIGpzaG9ydCAoKkNhbGxTaG9ydE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1
ZSAqKTsKICBqaW50ICgqQ2FsbEludE1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBq
aW50ICgqQ2FsbEludE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGppbnQg
KCpDYWxsSW50TWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGpsb25nICgq
Q2FsbExvbmdNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgamxvbmcgKCpDYWxsTG9u
Z01ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpsb25nICgqQ2FsbExvbmdN
ZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CiAgamZsb2F0ICgqQ2FsbEZsb2F0
TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpmbG9hdCAoKkNhbGxGbG9hdE1ldGhv
ZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpmbG9hdCAoKkNhbGxGbG9hdE1ldGhv
ZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqZG91YmxlICgqQ2FsbERvdWJsZU1l
dGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqZG91YmxlICgqQ2FsbERvdWJsZU1ldGhv
ZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpkb3VibGUgKCpDYWxsRG91YmxlTWV0
aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIHZvaWQgKCpDYWxsVm9pZE1ldGhv
ZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICB2b2lkICgqQ2FsbFZvaWRNZXRob2RWKSAoSk5J
RW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YV9saXN0KTsKICB2b2lkICgqQ2FsbFZvaWRNZXRob2RBKSAoSk5JRW52
ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqdmFsdWUgKik7CgogIGpvYmplY3QgKCpDYWxsTm9udmlydHVhbE9iamVjdE1l
dGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCAuLi4pOwogIGpvYmplY3QgKCpDYWxsTm9u
dmlydHVhbE9iamVjdE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7
CiAgam9iamVjdCAoKkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kQSkgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
am1ldGhvZElELCBqdmFsdWUgKik7CiAgamJvb2xlYW4gKCpDYWxsTm9udmlydHVhbEJvb2xlYW5N
ZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqYm9vbGVhbiAoKkNhbGxO
b252aXJ0dWFsQm9vbGVhbk1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIHZhX2xp
c3QpOwogIGpib29sZWFuICgqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kQSkgKEpOSUVudiAq
LCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpieXRlICgqQ2FsbE5vbnZpcnR1YWxCeXRl
TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgamJ5dGUgKCpDYWxsTm9u
dmlydHVhbEJ5dGVNZXRob2RWKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIHZhX2xpc3QpOwog
IGpieXRlICgqQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBq
Y2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhv
ZElELCBqdmFsdWUgKik7CiAgamNoYXIgKCpDYWxsTm9udmlydHVhbENoYXJNZXRob2QpIChKTklF
bnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqY2hhciAoKkNhbGxOb252aXJ0dWFsQ2hhck1l
dGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamNoYXIgKCpDYWxs
Tm9udmlydHVhbENoYXJNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAq
KTsKICBqc2hvcnQgKCpDYWxsTm9udmlydHVhbFNob3J0TWV0aG9kKSAoSk5JRW52ICosIGpvYmpl
Y3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
bWV0aG9kSUQsIC4uLik7CiAganNob3J0ICgqQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZFYpIChK
TklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAganNob3J0ICgqQ2FsbE5vbnZpcnR1
YWxTaG9ydE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpp
bnQgKCpDYWxsTm9udmlydHVhbEludE1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCAu
Li4pOwogIGppbnQgKCpDYWxsTm9udmlydHVhbEludE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVj
dCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpt
ZXRob2RJRCwgdmFfbGlzdCk7CiAgamludCAoKkNhbGxOb252aXJ0dWFsSW50TWV0aG9kQSkgKEpO
SUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgam1ldGhvZElELCBqdmFsdWUgKik7CiAgamxvbmcgKCpDYWxsTm9udmlydHVh
bExvbmdNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqbG9uZyAoKkNh
bGxOb252aXJ0dWFsTG9uZ01ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlz
dCk7CiAgamxvbmcgKCpDYWxsTm9udmlydHVhbExvbmdNZXRob2RBKSAoSk5JRW52ICosIGpvYmpl
Y3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
bWV0aG9kSUQsIGp2YWx1ZSAqKTsKICBqZmxvYXQgKCpDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9k
KSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgamZsb2F0ICgqQ2FsbE5vbnZpcnR1
YWxGbG9hdE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamZs
b2F0ICgqQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgamNs
YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ
RCwganZhbHVlICopOwogIGpkb3VibGUgKCpDYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZCkgKEpO
SUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgam1ldGhvZElELCAuLi4pOwogIGpkb3VibGUgKCpDYWxsTm9udmlydHVhbERv
dWJsZU1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamRvdWJs
ZSAoKkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xh
c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElE
LCBqdmFsdWUgKik7CiAgdm9pZCAoKkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZCkgKEpOSUVudiAq
LCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgam1ldGhvZElELCAuLi4pOwogIHZvaWQgKCpDYWxsTm9udmlydHVhbFZvaWRNZXRob2RW
KSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIHZhX2xpc3QpOwogIHZvaWQgKCpDYWxsTm9udmly
dHVhbFZvaWRNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKCiAg
amZpZWxkSUQgKCpHZXRGaWVsZElEKSAoSk5JRW52ICosIGpjbGFzcywgY29uc3QgY2hhciAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7
CgogIGpvYmplY3QgKCpHZXRPYmplY3RGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJ
RCk7CiAgamJvb2xlYW4gKCpHZXRCb29sZWFuRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwgamZp
ZWxkSUQpOwogIGpieXRlICgqR2V0Qnl0ZUZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsIGpmaWVs
ZElEKTsKICBqY2hhciAoKkdldENoYXJGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJ
RCk7CiAganNob3J0ICgqR2V0U2hvcnRGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJ
RCk7CiAgamludCAoKkdldEludEZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsK
ICBqbG9uZyAoKkdldExvbmdGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJRCk7CiAg
amZsb2F0ICgqR2V0RmxvYXRGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJRCk7CiAg
amRvdWJsZSAoKkdldERvdWJsZUZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsK
CiAgdm9pZCAoKlNldE9iamVjdEZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpvYmplY3QpOwogIHZv
aWQgKCpTZXRCb29sZWFuRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamJvb2xlYW4pOwogIHZvaWQg
KCpTZXRCeXRlRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamJ5dGUpOwogIHZvaWQgKCpTZXRDaGFy
RmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqZmllbGRJRCwgamNoYXIpOwogIHZvaWQgKCpTZXRTaG9ydEZpZWxkKSAo
Sk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgamZpZWxkSUQsIGpzaG9ydCk7CiAgdm9pZCAoKlNldEludEZpZWxkKSAoSk5JRW52ICos
IGpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZp
ZWxkSUQsIGppbnQpOwogIHZvaWQgKCpTZXRMb25nRmllbGQpIChKTklFbnYgKiwgam9iamVjdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamxv
bmcpOwogIHZvaWQgKCpTZXRGbG9hdEZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpmbG9hdCk7CiAg
dm9pZCAoKlNldERvdWJsZUZpZWxkKSAoSk5JRW52ICosIGpvYmplY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpkb3VibGUpOwoKICBqbWV0
aG9kSUQgKCpHZXRTdGF0aWNNZXRob2RJRCkgKEpOSUVudiAqLCBqY2xhc3MsIGNvbnN0IGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICopOwoKICBqb2JqZWN0ICgqQ2FsbFN0YXRpY09iamVjdE1ldGhvZCkgKEpOSUVudiAqLCBqY2xh
c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4pOwogIGpvYmplY3QgKCpDYWxsU3RhdGljT2JqZWN0TWV0aG9kVikgKEpOSUVudiAqLCBq
Y2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YV9saXN0KTsKICBqb2JqZWN0ICgqQ2FsbFN0YXRpY09iamVjdE1ldGhvZEEpIChKTklF
bnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganZhbHVlICopOwogIGpib29sZWFuICgqQ2FsbFN0YXRpY0Jvb2xlYW5NZXRo
b2QpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqYm9vbGVhbiAoKkNhbGxTdGF0aWNCb29sZWFu
TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamJvb2xlYW4gKCpDYWxsU3Rh
dGljQm9vbGVhbk1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqYnl0ZSAo
KkNhbGxTdGF0aWNCeXRlTWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgamJ5dGUgKCpD
YWxsU3RhdGljQnl0ZU1ldGhvZFYpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamJ5dGUg
KCpDYWxsU3RhdGljQnl0ZU1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGpj
aGFyICgqQ2FsbFN0YXRpY0NoYXJNZXRob2QpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqY2hh
ciAoKkNhbGxTdGF0aWNDaGFyTWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBq
Y2hhciAoKkNhbGxTdGF0aWNDaGFyTWV0aG9kQSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7
CiAganNob3J0ICgqQ2FsbFN0YXRpY1Nob3J0TWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7
CiAganNob3J0ICgqQ2FsbFN0YXRpY1Nob3J0TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGpt
ZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9s
aXN0KTsKICBqc2hvcnQgKCpDYWxsU3RhdGljU2hvcnRNZXRob2RBKSAoSk5JRW52ICosIGpjbGFz
cywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGp2YWx1ZSAqKTsKICBqaW50ICgqQ2FsbFN0YXRpY0ludE1ldGhvZCkgKEpOSUVudiAqLCBqY2xh
c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuLi4pOwogIGppbnQgKCpDYWxsU3RhdGljSW50TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3Ms
IGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YV9saXN0KTsKICBqaW50ICgqQ2FsbFN0YXRpY0ludE1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNz
LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anZhbHVlICopOwogIGpsb25nICgqQ2FsbFN0YXRpY0xvbmdNZXRob2QpIChKTklFbnYgKiwgamNs
YXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKICBqbG9uZyAoKkNhbGxTdGF0aWNMb25nTWV0aG9kVikgKEpOSUVudiAqLCBqY2xh
c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YV9saXN0KTsKICBqbG9uZyAoKkNhbGxTdGF0aWNMb25nTWV0aG9kQSkgKEpOSUVudiAqLCBq
Y2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdmFsdWUgKik7CiAgamZsb2F0ICgqQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kKSAoSk5JRW52
ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC4uLik7CiAgamZsb2F0ICgqQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kVikgKEpOSUVu
diAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YV9saXN0KTsKICBqZmxvYXQgKCpDYWxsU3RhdGljRmxvYXRNZXRob2RBKSAo
Sk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqZG91YmxlICgqQ2FsbFN0YXRpY0RvdWJsZU1l
dGhvZCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpkb3VibGUgKCpDYWxsU3RhdGljRG91Ymxl
TWV0aG9kVikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBqZG91YmxlICgqQ2FsbFN0YXRp
Y0RvdWJsZU1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIHZvaWQgKCpDYWxs
U3RhdGljVm9pZE1ldGhvZCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIHZvaWQgKCpDYWxsU3Rh
dGljVm9pZE1ldGhvZFYpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgdm9pZCAoKkNhbGxT
dGF0aWNWb2lkTWV0aG9kQSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CgogIGpmaWVsZElE
ICgqR2V0U3RhdGljRmllbGRJRCkgKEpOSUVudiAqLCBqY2xhc3MsIGNvbnN0IGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwoK
ICBqb2JqZWN0ICgqR2V0U3RhdGljT2JqZWN0RmllbGQpIChKTklFbnYgKiwgamNsYXNzLCBqZmll
bGRJRCk7CiAgamJvb2xlYW4gKCpHZXRTdGF0aWNCb29sZWFuRmllbGQpIChKTklFbnYgKiwgamNs
YXNzLCBqZmllbGRJRCk7CiAgamJ5dGUgKCpHZXRTdGF0aWNCeXRlRmllbGQpIChKTklFbnYgKiwg
amNsYXNzLCBqZmllbGRJRCk7CiAgamNoYXIgKCpHZXRTdGF0aWNDaGFyRmllbGQpIChKTklFbnYg
KiwgamNsYXNzLCBqZmllbGRJRCk7CiAganNob3J0ICgqR2V0U3RhdGljU2hvcnRGaWVsZCkgKEpO
SUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqaW50ICgqR2V0U3RhdGljSW50RmllbGQpIChK
TklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCk7CiAgamxvbmcgKCpHZXRTdGF0aWNMb25nRmllbGQp
IChKTklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCk7CiAgamZsb2F0ICgqR2V0U3RhdGljRmxvYXRG
aWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqZG91YmxlICgqR2V0U3RhdGlj
RG91YmxlRmllbGQpIChKTklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCk7CgogIHZvaWQgKCpTZXRT
dGF0aWNPYmplY3RGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpvYmplY3QpOwogIHZvaWQgKCpTZXRT
dGF0aWNCb29sZWFuRmllbGQpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBqYm9vbGVhbik7CiAgdm9pZCAoKlNl
dFN0YXRpY0J5dGVGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpieXRlKTsKICB2b2lkICgqU2V0U3Rh
dGljQ2hhckZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamNoYXIpOwogIHZvaWQgKCpTZXRTdGF0aWNT
aG9ydEZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqZmllbGRJRCwganNob3J0KTsKICB2b2lkICgqU2V0U3RhdGljSW50
RmllbGQpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpmaWVsZElELCBqaW50KTsKICB2b2lkICgqU2V0U3RhdGljTG9uZ0ZpZWxk
KSAoSk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqZmllbGRJRCwgamxvbmcpOwogIHZvaWQgKCpTZXRTdGF0aWNGbG9hdEZpZWxkKSAo
Sk5JRW52ICosIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqZmllbGRJRCwgamZsb2F0KTsKICB2b2lkICgqU2V0U3RhdGljRG91YmxlRmllbGQpIChK
TklFbnYgKiwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpmaWVsZElELCBqZG91YmxlKTsKCiAganN0cmluZyAoKk5ld1N0cmluZykgKEpOSUVudiAq
LCBjb25zdCBqY2hhciAqLCBqc2l6ZSk7CiAganNpemUgKCpHZXRTdHJpbmdMZW5ndGgpIChKTklF
bnYgKiwganN0cmluZyk7CiAgY29uc3QgamNoYXIgKiAoKkdldFN0cmluZ0NoYXJzKSAoSk5JRW52
ICosIGpzdHJpbmcsIGpib29sZWFuICopOwogIHZvaWQgKCpSZWxlYXNlU3RyaW5nQ2hhcnMpIChK
TklFbnYgKiwganN0cmluZywgY29uc3QgamNoYXIgKik7CiAganN0cmluZyAoKk5ld1N0cmluZ1VU
RikgKEpOSUVudiAqLCBjb25zdCBjaGFyICopOwogIGpzaXplICgqR2V0U3RyaW5nVVRGTGVuZ3Ro
KSAoSk5JRW52ICosIGpzdHJpbmcpOwogIGNvbnN0IGNoYXIgKiAoKkdldFN0cmluZ1VURkNoYXJz
KSAoSk5JRW52ICosIGpzdHJpbmcsIGpib29sZWFuICopOwogIHZvaWQgKCpSZWxlYXNlU3RyaW5n
VVRGQ2hhcnMpIChKTklFbnYgKiwganN0cmluZywgY29uc3QgY2hhciAqKTsKICBqc2l6ZSAoKkdl
dEFycmF5TGVuZ3RoKSAoSk5JRW52ICosIGphcnJheSk7CiAgamFycmF5ICgqTmV3T2JqZWN0QXJy
YXkpIChKTklFbnYgKiwganNpemUsIGpjbGFzcywgam9iamVjdCk7CiAgam9iamVjdCAoKkdldE9i
amVjdEFycmF5RWxlbWVudCkgKEpOSUVudiAqLCBqb2JqZWN0QXJyYXksIGpzaXplKTsKICB2b2lk
ICgqU2V0T2JqZWN0QXJyYXlFbGVtZW50KSAoSk5JRW52ICosIGpvYmplY3RBcnJheSwganNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCk7Cgog
IGpib29sZWFuQXJyYXkgKCpOZXdCb29sZWFuQXJyYXkpIChKTklFbnYgKiwganNpemUpOwogIGpi
eXRlQXJyYXkgKCpOZXdCeXRlQXJyYXkpIChKTklFbnYgKiwganNpemUpOwogIGpjaGFyQXJyYXkg
KCpOZXdDaGFyQXJyYXkpIChKTklFbnYgKiwganNpemUpOwogIGpzaG9ydEFycmF5ICgqTmV3U2hv
cnRBcnJheSkgKEpOSUVudiAqLCBqc2l6ZSk7CiAgamludEFycmF5ICgqTmV3SW50QXJyYXkpIChK
TklFbnYgKiwganNpemUpOwogIGpsb25nQXJyYXkgKCpOZXdMb25nQXJyYXkpIChKTklFbnYgKiwg
anNpemUpOwogIGpmbG9hdEFycmF5ICgqTmV3RmxvYXRBcnJheSkgKEpOSUVudiAqLCBqc2l6ZSk7
CiAgamRvdWJsZUFycmF5ICgqTmV3RG91YmxlQXJyYXkpIChKTklFbnYgKiwganNpemUpOwoKICBq
Ym9vbGVhbiAqICgqR2V0Qm9vbGVhbkFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamJvb2xlYW5B
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh
biAqKTsKICBqYnl0ZSAqICgqR2V0Qnl0ZUFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamJ5dGVB
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh
biAqKTsKICBqY2hhciAqICgqR2V0Q2hhckFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamNoYXJB
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh
biAqKTsKICBqc2hvcnQgKiAoKkdldFNob3J0QXJyYXlFbGVtZW50cykgKEpOSUVudiAqLCBqc2hv
cnRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9v
bGVhbiAqKTsKICBqaW50ICogKCpHZXRJbnRBcnJheUVsZW1lbnRzKSAoSk5JRW52ICosIGppbnRB
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh
biAqKTsKICBqbG9uZyAqICgqR2V0TG9uZ0FycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamxvbmdB
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVh
biAqKTsKICBqZmxvYXQgKiAoKkdldEZsb2F0QXJyYXlFbGVtZW50cykgKEpOSUVudiAqLCBqZmxv
YXRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9v
bGVhbiAqKTsKICBqZG91YmxlICogKCpHZXREb3VibGVBcnJheUVsZW1lbnRzKSAoSk5JRW52ICos
IGpkb3VibGVBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqYm9vbGVhbiAqKTsKCiAgdm9pZCAoKlJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cykgKEpO
SUVudiAqLCBqYm9vbGVhbkFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqYm9vbGVhbiAqLCBqaW50KTsKICB2b2lkICgqUmVsZWFzZUJ5dGVBcnJh
eUVsZW1lbnRzKSAoSk5JRW52ICosIGpieXRlQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpieXRlICosIGppbnQpOwogIHZvaWQgKCpSZWxlYXNl
Q2hhckFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamNoYXJBcnJheSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNoYXIgKiwgamludCk7CiAgdm9pZCAo
KlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMpIChKTklFbnYgKiwganNob3J0QXJyYXksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaG9ydCAqLCBqaW50
KTsKICB2b2lkICgqUmVsZWFzZUludEFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamludEFycmF5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50ICos
IGppbnQpOwogIHZvaWQgKCpSZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamxv
bmdBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
amxvbmcgKiwgamludCk7CiAgdm9pZCAoKlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMpIChKTklF
bnYgKiwgamZsb2F0QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpmbG9hdCAqLCBqaW50KTsKICB2b2lkICgqUmVsZWFzZURvdWJsZUFycmF5RWxl
bWVudHMpIChKTklFbnYgKiwgamRvdWJsZUFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqZG91YmxlICosIGppbnQpOwoKICB2b2lkICgqR2V0Qm9v
bGVhbkFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpib29sZWFuQXJyYXksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqYm9vbGVhbiAqKTsK
ICB2b2lkICgqR2V0Qnl0ZUFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpieXRlQXJyYXksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqYnl0
ZSAqKTsKICB2b2lkICgqR2V0Q2hhckFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpjaGFyQXJyYXks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXpl
LCBqY2hhciAqKTsKICB2b2lkICgqR2V0U2hvcnRBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqc2hv
cnRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6
ZSwganNpemUsIGpzaG9ydCAqKTsKICB2b2lkICgqR2V0SW50QXJyYXlSZWdpb24pIChKTklFbnYg
KiwgamludEFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpzaXplLCBqc2l6ZSwgamludCAqKTsKICB2b2lkICgqR2V0TG9uZ0FycmF5UmVnaW9uKSAoSk5J
RW52ICosIGpsb25nQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganNpemUsIGpzaXplLCBqbG9uZyAqKTsKICB2b2lkICgqR2V0RmxvYXRBcnJheVJlZ2lv
bikgKEpOSUVudiAqLCBqZmxvYXRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqc2l6ZSwganNpemUsIGpmbG9hdCAqKTsKICB2b2lkICgqR2V0RG91Ymxl
QXJyYXlSZWdpb24pIChKTklFbnYgKiwgamRvdWJsZUFycmF5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamRvdWJsZSAqKTsKCiAgdm9p
ZCAoKlNldEJvb2xlYW5BcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqYm9vbGVhbkFycmF5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamJv
b2xlYW4gKik7CiAgdm9pZCAoKlNldEJ5dGVBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqYnl0ZUFy
cmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBq
c2l6ZSwgamJ5dGUgKik7CiAgdm9pZCAoKlNldENoYXJBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBq
Y2hhckFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpz
aXplLCBqc2l6ZSwgamNoYXIgKik7CiAgdm9pZCAoKlNldFNob3J0QXJyYXlSZWdpb24pIChKTklF
bnYgKiwganNob3J0QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganNpemUsIGpzaXplLCBqc2hvcnQgKik7CiAgdm9pZCAoKlNldEludEFycmF5UmVnaW9u
KSAoSk5JRW52ICosIGppbnRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqc2l6ZSwganNpemUsIGppbnQgKik7CiAgdm9pZCAoKlNldExvbmdBcnJheVJl
Z2lvbikgKEpOSUVudiAqLCBqbG9uZ0FycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamxvbmcgKik7CiAgdm9pZCAoKlNldEZsb2F0
QXJyYXlSZWdpb24pIChKTklFbnYgKiwgamZsb2F0QXJyYXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqZmxvYXQgKik7CiAgdm9pZCAo
KlNldERvdWJsZUFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpkb3VibGVBcnJheSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSwganNpemUsIGpkb3VibGUg
Kik7CgogIGppbnQgKCpSZWdpc3Rlck5hdGl2ZXMpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEpOSU5hdGl2ZU1ldGhv
ZCAqLCBqaW50KTsKICBqaW50ICgqVW5yZWdpc3Rlck5hdGl2ZXMpIChKTklFbnYgKiwgamNsYXNz
KTsKICBqaW50ICgqTW9uaXRvckVudGVyKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGppbnQgKCpN
b25pdG9yRXhpdCkgKEpOSUVudiAqLCBqb2JqZWN0KTsKICBqaW50ICgqR2V0SmF2YVZNKSAoSk5J
RW52ICosIEphdmFWTSAqKik7CgogIHZvaWQgKCpHZXRTdHJpbmdSZWdpb24pIChKTklFbnYgKiwg
anN0cmluZywganNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganNpemUsIGpjaGFyICopOwogIHZvaWQgKCpHZXRTdHJpbmdVVEZSZWdpb24pIChKTklFbnYg
KiwganN0cmluZywganNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganNpemUsIGNoYXIgKik7CgogIHZvaWQgKiAoKkdldFByaW1pdGl2ZUFycmF5Q3JpdGlj
YWwpIChKTklFbnYgKiwgamFycmF5LCBqYm9vbGVhbiAqKTsKICB2b2lkICgqUmVsZWFzZVByaW1p
dGl2ZUFycmF5Q3JpdGljYWwpIChKTklFbnYgKiwgamFycmF5LCB2b2lkICosIGppbnQpOwoKICBj
b25zdCBqY2hhciAqICgqR2V0U3RyaW5nQ3JpdGljYWwpIChKTklFbnYgKiwganN0cmluZywgamJv
b2xlYW4gKik7CiAgdm9pZCAoKlJlbGVhc2VTdHJpbmdDcml0aWNhbCkgKEpOSUVudiAqLCBqc3Ry
aW5nLCBjb25zdCBqY2hhciAqKTsKCiAgandlYWsgKCpOZXdXZWFrR2xvYmFsUmVmKSAoSk5JRW52
ICosIGpvYmplY3QpOwogIHZvaWQgKCpEZWxldGVXZWFrR2xvYmFsUmVmKSAoSk5JRW52ICosIGp3
ZWFrKTsKCiAgamJvb2xlYW4gKCpFeGNlcHRpb25DaGVjaykgKEpOSUVudiAqKTsKfTsKCgoKY2xh
c3MgX0p2X0pOSUVudgp7CnB1YmxpYzoKCiAgc3RydWN0IEpOSU5hdGl2ZUludGVyZmFjZSAqcDsK
CgoKCgoKICBqdGhyb3dhYmxlIGV4OwoKCiAgamNsYXNzIGtsYXNzOwoKCiAgc3RydWN0IF9Kdl9K
TklfTG9jYWxGcmFtZSAqbG9jYWxzOwoKcHVibGljOgogIGppbnQgR2V0VmVyc2lvbiAoKQogIHsg
cmV0dXJuIHAtPkdldFZlcnNpb24gKHRoaXMpOyB9CgogIGpjbGFzcyBEZWZpbmVDbGFzcyAoam9i
amVjdCBvYmowLCBjb25zdCBqYnl0ZSAqIHZhbDEsIGpzaXplIHZhbDIpCiAgeyByZXR1cm4gcC0+
RGVmaW5lQ2xhc3MgKHRoaXMsIG9iajAsIHZhbDEsIHZhbDIpOyB9CgogIGpjbGFzcyBGaW5kQ2xh
c3MgKGNvbnN0IGNoYXIgKiB2YWwwKQogIHsgcmV0dXJuIHAtPkZpbmRDbGFzcyAodGhpcywgdmFs
MCk7IH0KCiAgam1ldGhvZElEIEZyb21SZWZsZWN0ZWRNZXRob2QgKGpvYmplY3Qgb2JqMCkKICB7
IHJldHVybiBwLT5Gcm9tUmVmbGVjdGVkTWV0aG9kICh0aGlzLCBvYmowKTsgfQoKICBqZmllbGRJ
RCBGcm9tUmVmbGVjdGVkRmllbGQgKGpvYmplY3Qgb2JqMCkKICB7IHJldHVybiBwLT5Gcm9tUmVm
bGVjdGVkRmllbGQgKHRoaXMsIG9iajApOyB9CgogIGpvYmplY3QgVG9SZWZsZWN0ZWRNZXRob2Qg
KGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgamJvb2xlYW4gdmFsMikKICB7IHJldHVybiBw
LT5Ub1JlZmxlY3RlZE1ldGhvZCAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamNsYXNz
IEdldFN1cGVyY2xhc3MgKGpjbGFzcyBjbDApCiAgeyByZXR1cm4gcC0+R2V0U3VwZXJjbGFzcyAo
dGhpcywgY2wwKTsgfQoKICBqYm9vbGVhbiBJc0Fzc2lnbmFibGVGcm9tIChqY2xhc3MgY2wwLCBq
Y2xhc3MgY2wxKQogIHsgcmV0dXJuIHAtPklzQXNzaWduYWJsZUZyb20gKHRoaXMsIGNsMCwgY2wx
KTsgfQoKICBqb2JqZWN0IFRvUmVmbGVjdGVkRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZs
ZDEsIGpib29sZWFuIHZhbDIpCiAgeyByZXR1cm4gcC0+VG9SZWZsZWN0ZWRGaWVsZCAodGhpcywg
Y2wwLCBmbGQxLCB2YWwyKTsgfQoKICBqaW50IFRocm93IChqdGhyb3dhYmxlIHZhbDApCiAgeyBy
ZXR1cm4gcC0+VGhyb3cgKHRoaXMsIHZhbDApOyB9CgogIGppbnQgVGhyb3dOZXcgKGpjbGFzcyBj
bDAsIGNvbnN0IGNoYXIgKiB2YWwxKQogIHsgcmV0dXJuIHAtPlRocm93TmV3ICh0aGlzLCBjbDAs
IHZhbDEpOyB9CgogIGp0aHJvd2FibGUgRXhjZXB0aW9uT2NjdXJyZWQgKCkKICB7IHJldHVybiBw
LT5FeGNlcHRpb25PY2N1cnJlZCAodGhpcyk7IH0KCiAgdm9pZCBFeGNlcHRpb25EZXNjcmliZSAo
KQogIHsgcC0+RXhjZXB0aW9uRGVzY3JpYmUgKHRoaXMpOyB9CgogIHZvaWQgRXhjZXB0aW9uQ2xl
YXIgKCkKICB7IHAtPkV4Y2VwdGlvbkNsZWFyICh0aGlzKTsgfQoKICB2b2lkIEZhdGFsRXJyb3Ig
KGNvbnN0IGNoYXIgKiB2YWwwKQogIHsgcC0+RmF0YWxFcnJvciAodGhpcywgdmFsMCk7IH0KCiAg
amludCBQdXNoTG9jYWxGcmFtZSAoamludCB2YWwwKQogIHsgcmV0dXJuIHAtPlB1c2hMb2NhbEZy
YW1lICh0aGlzLCB2YWwwKTsgfQoKICBqb2JqZWN0IFBvcExvY2FsRnJhbWUgKGpvYmplY3Qgb2Jq
MCkKICB7IHJldHVybiBwLT5Qb3BMb2NhbEZyYW1lICh0aGlzLCBvYmowKTsgfQoKICBqb2JqZWN0
IE5ld0dsb2JhbFJlZiAoam9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPk5ld0dsb2JhbFJlZiAo
dGhpcywgb2JqMCk7IH0KCiAgdm9pZCBEZWxldGVHbG9iYWxSZWYgKGpvYmplY3Qgb2JqMCkKICB7
IHAtPkRlbGV0ZUdsb2JhbFJlZiAodGhpcywgb2JqMCk7IH0KCiAgdm9pZCBEZWxldGVMb2NhbFJl
ZiAoam9iamVjdCBvYmowKQogIHsgcC0+RGVsZXRlTG9jYWxSZWYgKHRoaXMsIG9iajApOyB9Cgog
IGpib29sZWFuIElzU2FtZU9iamVjdCAoam9iamVjdCBvYmowLCBqb2JqZWN0IG9iajEpCiAgeyBy
ZXR1cm4gcC0+SXNTYW1lT2JqZWN0ICh0aGlzLCBvYmowLCBvYmoxKTsgfQoKICBqb2JqZWN0IE5l
d0xvY2FsUmVmIChqb2JqZWN0IG9iajApCiAgeyByZXR1cm4gcC0+TmV3TG9jYWxSZWYgKHRoaXMs
IG9iajApOyB9CgogIGppbnQgRW5zdXJlTG9jYWxDYXBhY2l0eSAoamludCB2YWwwKQogIHsgcmV0
dXJuIHAtPkVuc3VyZUxvY2FsQ2FwYWNpdHkgKHRoaXMsIHZhbDApOyB9CgogIGpvYmplY3QgQWxs
b2NPYmplY3QgKGpjbGFzcyBjbDApCiAgeyByZXR1cm4gcC0+QWxsb2NPYmplY3QgKHRoaXMsIGNs
MCk7IH0KCiAgam9iamVjdCBOZXdPYmplY3QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg
Li4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFy
Z3MpLG1ldGgxKTsKICAgIGpvYmplY3QgcmVzdWx0ID0gcC0+TmV3T2JqZWN0ViAodGhpcywgY2ww
LCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiBy
ZXN1bHQ7CiAgfQoKICBqb2JqZWN0IE5ld09iamVjdFYgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBt
ZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPk5ld09iamVjdFYgKHRoaXMsIGNsMCwg
bWV0aDEsIHZhbDIpOyB9CgogIGpvYmplY3QgTmV3T2JqZWN0QSAoamNsYXNzIGNsMCwgam1ldGhv
ZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPk5ld09iamVjdEEgKHRoaXMs
IGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpjbGFzcyBHZXRPYmplY3RDbGFzcyAoam9iamVjdCBv
YmowKQogIHsgcmV0dXJuIHAtPkdldE9iamVjdENsYXNzICh0aGlzLCBvYmowKTsgfQoKICBqYm9v
bGVhbiBJc0luc3RhbmNlT2YgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSkKICB7IHJldHVybiBw
LT5Jc0luc3RhbmNlT2YgKHRoaXMsIG9iajAsIGNsMSk7IH0KCiAgam1ldGhvZElEIEdldE1ldGhv
ZElEIChqY2xhc3MgY2wwLCBjb25zdCBjaGFyICogdmFsMSwgY29uc3QgY2hhciAqIHZhbDIpCiAg
eyByZXR1cm4gcC0+R2V0TWV0aG9kSUQgKHRoaXMsIGNsMCwgdmFsMSwgdmFsMik7IH0KCiAgam9i
amVjdCBDYWxsT2JqZWN0TWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgLi4u
KQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3Mp
LG1ldGgxKTsKICAgIGpvYmplY3QgcmVzdWx0ID0gcC0+Q2FsbE9iamVjdE1ldGhvZFYgKHRoaXMs
IG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0
dXJuIHJlc3VsdDsKICB9CgogIGpvYmplY3QgQ2FsbE9iamVjdE1ldGhvZFYgKGpvYmplY3Qgb2Jq
MCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbE9iamVj
dE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqb2JqZWN0IENhbGxPYmpl
Y3RNZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikK
ICB7IHJldHVybiBwLT5DYWxsT2JqZWN0TWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIp
OyB9CgogIGpib29sZWFuIENhbGxCb29sZWFuTWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJ
RCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdf
c3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGpib29sZWFuIHJlc3VsdCA9IHAtPkNhbGxCb29sZWFu
TWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAo
YXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamJvb2xlYW4gQ2FsbEJvb2xlYW5NZXRo
b2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0
dXJuIHAtPkNhbGxCb29sZWFuTWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9Cgog
IGpib29sZWFuIENhbGxCb29sZWFuTWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0
aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbEJvb2xlYW5NZXRob2RBICh0aGlz
LCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAgamJ5dGUgQ2FsbEJ5dGVNZXRob2QgKGpvYmplY3Qg
b2JqMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19i
dWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgamJ5dGUgcmVzdWx0ID0gcC0+
Q2FsbEJ5dGVNZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5f
dmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqYnl0ZSBDYWxsQnl0ZU1l
dGhvZFYgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyBy
ZXR1cm4gcC0+Q2FsbEJ5dGVNZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAg
amJ5dGUgQ2FsbEJ5dGVNZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZh
bHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsQnl0ZU1ldGhvZEEgKHRoaXMsIG9iajAsIG1l
dGgxLCB2YWwyKTsgfQoKICBqY2hhciBDYWxsQ2hhck1ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0
aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3Rk
YXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqY2hhciByZXN1bHQgPSBwLT5DYWxsQ2hhck1l
dGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFy
Z3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpjaGFyIENhbGxDaGFyTWV0aG9kViAoam9i
amVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5D
YWxsQ2hhck1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqY2hhciBDYWxs
Q2hhck1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwy
KQogIHsgcmV0dXJuIHAtPkNhbGxDaGFyTWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIp
OyB9CgogIGpzaG9ydCBDYWxsU2hvcnRNZXRob2QgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1l
dGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFy
dCgoYXJncyksbWV0aDEpOwogICAganNob3J0IHJlc3VsdCA9IHAtPkNhbGxTaG9ydE1ldGhvZFYg
KHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpzaG9ydCBDYWxsU2hvcnRNZXRob2RWIChqb2JqZWN0
IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxT
aG9ydE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqc2hvcnQgQ2FsbFNo
b3J0TWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIp
CiAgeyByZXR1cm4gcC0+Q2FsbFNob3J0TWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIp
OyB9CgogIGppbnQgQ2FsbEludE1ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEs
IC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChh
cmdzKSxtZXRoMSk7CiAgICBqaW50IHJlc3VsdCA9IHAtPkNhbGxJbnRNZXRob2RWICh0aGlzLCBv
YmowLCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVy
biByZXN1bHQ7CiAgfQoKICBqaW50IENhbGxJbnRNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRo
b2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxJbnRNZXRob2RWICh0
aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAgamludCBDYWxsSW50TWV0aG9kQSAoam9iamVj
dCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2Fs
bEludE1ldGhvZEEgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqbG9uZyBDYWxsTG9u
Z01ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9s
aXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBq
bG9uZyByZXN1bHQgPSBwLT5DYWxsTG9uZ01ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCBhcmdz
KTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog
IGpsb25nIENhbGxMb25nTWV0aG9kViAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIHZh
X2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsTG9uZ01ldGhvZFYgKHRoaXMsIG9iajAsIG1l
dGgxLCB2YWwyKTsgfQoKICBqbG9uZyBDYWxsTG9uZ01ldGhvZEEgKGpvYmplY3Qgb2JqMCwgam1l
dGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxMb25nTWV0aG9k
QSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpmbG9hdCBDYWxsRmxvYXRNZXRob2Qg
KGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdz
OwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgamZsb2F0IHJl
c3VsdCA9IHAtPkNhbGxGbG9hdE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAg
IF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpmbG9h
dCBDYWxsRmxvYXRNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlz
dCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxGbG9hdE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgx
LCB2YWwyKTsgfQoKICBqZmxvYXQgQ2FsbEZsb2F0TWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0
aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbEZsb2F0TWV0aG9k
QSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpkb3VibGUgQ2FsbERvdWJsZU1ldGhv
ZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFy
Z3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqZG91Ymxl
IHJlc3VsdCA9IHAtPkNhbGxEb3VibGVNZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgYXJncyk7
CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBq
ZG91YmxlIENhbGxEb3VibGVNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwg
dmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxEb3VibGVNZXRob2RWICh0aGlzLCBvYmow
LCBtZXRoMSwgdmFsMik7IH0KCiAgamRvdWJsZSBDYWxsRG91YmxlTWV0aG9kQSAoam9iamVjdCBv
YmowLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbERv
dWJsZU1ldGhvZEEgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICB2b2lkIENhbGxWb2lk
TWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xp
c3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIHAt
PkNhbGxWb2lkTWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGlu
X3ZhX2VuZCAoYXJncyk7CiAgfQoKICB2b2lkIENhbGxWb2lkTWV0aG9kViAoam9iamVjdCBvYmow
LCBqbWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHAtPkNhbGxWb2lkTWV0aG9kViAo
dGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIHZvaWQgQ2FsbFZvaWRNZXRob2RBIChqb2Jq
ZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHAtPkNhbGxWb2lk
TWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpvYmplY3QgQ2FsbE5vbnZp
cnR1YWxPYmplY3RNZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1l
dGgyLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFy
dCgoYXJncyksbWV0aDIpOwogICAgam9iamVjdCByZXN1bHQgPSBwLT5DYWxsTm9udmlydHVhbE9i
amVjdE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWlsdGlu
X3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgam9iamVjdCBDYWxsTm9u
dmlydHVhbE9iamVjdE1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElE
IG1ldGgyLCB2YV9saXN0IHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxPYmplY3RN
ZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqb2JqZWN0IENhbGxO
b252aXJ0dWFsT2JqZWN0TWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9k
SUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxPYmpl
Y3RNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqYm9vbGVhbiBD
YWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1l
dGhvZElEIG1ldGgyLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0
ZGFyZ19zdGFydCgoYXJncyksbWV0aDIpOwogICAgamJvb2xlYW4gcmVzdWx0ID0gcC0+Q2FsbE5v
bnZpcnR1YWxCb29sZWFuTWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgYXJncyk7CiAg
ICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqYm9v
bGVhbiBDYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBj
bDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252
aXJ0dWFsQm9vbGVhbk1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMpOyB9Cgog
IGpib29sZWFuIENhbGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNs
YXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNh
bGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZEEgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMp
OyB9CgogIGpieXRlIENhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZCAoam9iamVjdCBvYmowLCBqY2xh
c3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBf
X2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMik7CiAgICBqYnl0ZSByZXN1bHQgPSBw
LT5DYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCBhcmdz
KTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog
IGpieXRlIENhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNs
MSwgam1ldGhvZElEIG1ldGgyLCB2YV9saXN0IHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZp
cnR1YWxCeXRlTWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAgamJ5
dGUgQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBq
bWV0aG9kSUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1
YWxCeXRlTWV0aG9kQSAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAgamNoYXIg
Q2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRo
b2RJRCBtZXRoMiwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRh
cmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsKICAgIGpjaGFyIHJlc3VsdCA9IHAtPkNhbGxOb252aXJ0
dWFsQ2hhck1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWls
dGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamNoYXIgQ2FsbE5v
bnZpcnR1YWxDaGFyTWV0aG9kViAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQg
bWV0aDIsIHZhX2xpc3QgdmFsMykKICB7IHJldHVybiBwLT5DYWxsTm9udmlydHVhbENoYXJNZXRo
b2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqY2hhciBDYWxsTm9udmly
dHVhbENoYXJNZXRob2RBIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRo
MiwganZhbHVlICogdmFsMykKICB7IHJldHVybiBwLT5DYWxsTm9udmlydHVhbENoYXJNZXRob2RB
ICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqc2hvcnQgQ2FsbE5vbnZpcnR1
YWxTaG9ydE1ldGhvZCAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIs
IC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChh
cmdzKSxtZXRoMik7CiAgICBqc2hvcnQgcmVzdWx0ID0gcC0+Q2FsbE5vbnZpcnR1YWxTaG9ydE1l
dGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2Vu
ZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganNob3J0IENhbGxOb252aXJ0dWFs
U2hvcnRNZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwg
dmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RWICh0
aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqc2hvcnQgQ2FsbE5vbnZpcnR1YWxT
aG9ydE1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBq
dmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RBICh0
aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqaW50IENhbGxOb252aXJ0dWFsSW50
TWV0aG9kIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgLi4uKQog
IHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l
dGgyKTsKICAgIGppbnQgcmVzdWx0ID0gcC0+Q2FsbE5vbnZpcnR1YWxJbnRNZXRob2RWICh0aGlz
LCBvYmowLCBjbDEsIG1ldGgyLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGppbnQgQ2FsbE5vbnZpcnR1YWxJbnRNZXRob2RWIChq
b2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQog
IHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsSW50TWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBt
ZXRoMiwgdmFsMyk7IH0KCiAgamludCBDYWxsTm9udmlydHVhbEludE1ldGhvZEEgKGpvYmplY3Qg
b2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0
dXJuIHAtPkNhbGxOb252aXJ0dWFsSW50TWV0aG9kQSAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwg
dmFsMyk7IH0KCiAgamxvbmcgQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kIChqb2JqZWN0IG9iajAs
IGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsK
ICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsKICAgIGpsb25nIHJlc3Vs
dCA9IHAtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIs
IGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0Owog
IH0KCiAgamxvbmcgQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kViAoam9iamVjdCBvYmowLCBqY2xh
c3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIHZhX2xpc3QgdmFsMykKICB7IHJldHVybiBwLT5DYWxs
Tm9udmlydHVhbExvbmdNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoK
ICBqbG9uZyBDYWxsTm9udmlydHVhbExvbmdNZXRob2RBIChqb2JqZWN0IG9iajAsIGpjbGFzcyBj
bDEsIGptZXRob2RJRCBtZXRoMiwganZhbHVlICogdmFsMykKICB7IHJldHVybiBwLT5DYWxsTm9u
dmlydHVhbExvbmdNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBq
ZmxvYXQgQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZCAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wx
LCBqbWV0aG9kSUQgbWV0aDIsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0
aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMik7CiAgICBqZmxvYXQgcmVzdWx0ID0gcC0+Q2Fs
bE5vbnZpcnR1YWxGbG9hdE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwog
ICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamZs
b2F0IENhbGxOb252aXJ0dWFsRmxvYXRNZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEs
IGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0
dWFsRmxvYXRNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqZmxv
YXQgQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwg
am1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0
dWFsRmxvYXRNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqZG91
YmxlIENhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEs
IGptZXRob2RJRCBtZXRoMiwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRp
bl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsKICAgIGpkb3VibGUgcmVzdWx0ID0gcC0+Q2Fs
bE5vbnZpcnR1YWxEb3VibGVNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCBhcmdzKTsK
ICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpk
b3VibGUgQ2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBj
bDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252
aXJ0dWFsRG91YmxlTWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAg
amRvdWJsZSBDYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgamNsYXNz
IGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxO
b252aXJ0dWFsRG91YmxlTWV0aG9kQSAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0K
CiAgdm9pZCBDYWxsTm9udmlydHVhbFZvaWRNZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNs
MSwgam1ldGhvZElEIG1ldGgyLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWls
dGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDIpOwogICAgcC0+Q2FsbE5vbnZpcnR1YWxWb2lk
TWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFf
ZW5kIChhcmdzKTsKICB9CgogIHZvaWQgQ2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kViAoam9iamVj
dCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIHZhX2xpc3QgdmFsMykKICB7IHAt
PkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMp
OyB9CgogIHZvaWQgQ2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xh
c3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyBwLT5DYWxsTm9udmly
dHVhbFZvaWRNZXRob2RBICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqZmll
bGRJRCBHZXRGaWVsZElEIChqY2xhc3MgY2wwLCBjb25zdCBjaGFyICogdmFsMSwgY29uc3QgY2hh
ciAqIHZhbDIpCiAgeyByZXR1cm4gcC0+R2V0RmllbGRJRCAodGhpcywgY2wwLCB2YWwxLCB2YWwy
KTsgfQoKICBqb2JqZWN0IEdldE9iamVjdEZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZs
ZDEpCiAgeyByZXR1cm4gcC0+R2V0T2JqZWN0RmllbGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9Cgog
IGpib29sZWFuIEdldEJvb2xlYW5GaWVsZCAoam9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxKQog
IHsgcmV0dXJuIHAtPkdldEJvb2xlYW5GaWVsZCAodGhpcywgb2JqMCwgZmxkMSk7IH0KCiAgamJ5
dGUgR2V0Qnl0ZUZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4g
cC0+R2V0Qnl0ZUZpZWxkICh0aGlzLCBvYmowLCBmbGQxKTsgfQoKICBqY2hhciBHZXRDaGFyRmll
bGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRDaGFyRmll
bGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9CgogIGpzaG9ydCBHZXRTaG9ydEZpZWxkIChqb2JqZWN0
IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0U2hvcnRGaWVsZCAodGhpcywg
b2JqMCwgZmxkMSk7IH0KCiAgamludCBHZXRJbnRGaWVsZCAoam9iamVjdCBvYmowLCBqZmllbGRJ
RCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldEludEZpZWxkICh0aGlzLCBvYmowLCBmbGQxKTsgfQoK
ICBqbG9uZyBHZXRMb25nRmllbGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSkKICB7IHJl
dHVybiBwLT5HZXRMb25nRmllbGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9CgogIGpmbG9hdCBHZXRG
bG9hdEZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0
RmxvYXRGaWVsZCAodGhpcywgb2JqMCwgZmxkMSk7IH0KCiAgamRvdWJsZSBHZXREb3VibGVGaWVs
ZCAoam9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldERvdWJsZUZp
ZWxkICh0aGlzLCBvYmowLCBmbGQxKTsgfQoKICB2b2lkIFNldE9iamVjdEZpZWxkIChqb2JqZWN0
IG9iajAsIGpmaWVsZElEIGZsZDEsIGpvYmplY3Qgb2JqMikKICB7IHAtPlNldE9iamVjdEZpZWxk
ICh0aGlzLCBvYmowLCBmbGQxLCBvYmoyKTsgfQoKICB2b2lkIFNldEJvb2xlYW5GaWVsZCAoam9i
amVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqYm9vbGVhbiB2YWwyKQogIHsgcC0+U2V0Qm9vbGVh
bkZpZWxkICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldEJ5dGVGaWVsZCAo
am9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqYnl0ZSB2YWwyKQogIHsgcC0+U2V0Qnl0ZUZp
ZWxkICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldENoYXJGaWVsZCAoam9i
amVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqY2hhciB2YWwyKQogIHsgcC0+U2V0Q2hhckZpZWxk
ICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldFNob3J0RmllbGQgKGpvYmpl
Y3Qgb2JqMCwgamZpZWxkSUQgZmxkMSwganNob3J0IHZhbDIpCiAgeyBwLT5TZXRTaG9ydEZpZWxk
ICh0aGlzLCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldEludEZpZWxkIChqb2JqZWN0
IG9iajAsIGpmaWVsZElEIGZsZDEsIGppbnQgdmFsMikKICB7IHAtPlNldEludEZpZWxkICh0aGlz
LCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldExvbmdGaWVsZCAoam9iamVjdCBvYmow
LCBqZmllbGRJRCBmbGQxLCBqbG9uZyB2YWwyKQogIHsgcC0+U2V0TG9uZ0ZpZWxkICh0aGlzLCBv
YmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldEZsb2F0RmllbGQgKGpvYmplY3Qgb2JqMCwg
amZpZWxkSUQgZmxkMSwgamZsb2F0IHZhbDIpCiAgeyBwLT5TZXRGbG9hdEZpZWxkICh0aGlzLCBv
YmowLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldERvdWJsZUZpZWxkIChqb2JqZWN0IG9iajAs
IGpmaWVsZElEIGZsZDEsIGpkb3VibGUgdmFsMikKICB7IHAtPlNldERvdWJsZUZpZWxkICh0aGlz
LCBvYmowLCBmbGQxLCB2YWwyKTsgfQoKICBqbWV0aG9kSUQgR2V0U3RhdGljTWV0aG9kSUQgKGpj
bGFzcyBjbDAsIGNvbnN0IGNoYXIgKiB2YWwxLCBjb25zdCBjaGFyICogdmFsMikKICB7IHJldHVy
biBwLT5HZXRTdGF0aWNNZXRob2RJRCAodGhpcywgY2wwLCB2YWwxLCB2YWwyKTsgfQoKICBqb2Jq
ZWN0IENhbGxTdGF0aWNPYmplY3RNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg
Li4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFy
Z3MpLG1ldGgxKTsKICAgIGpvYmplY3QgcmVzdWx0ID0gcC0+Q2FsbFN0YXRpY09iamVjdE1ldGhv
ZFYgKHRoaXMsIGNsMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgam9iamVjdCBDYWxsU3RhdGljT2JqZWN0TWV0aG9k
ViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4g
cC0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9Cgog
IGpvYmplY3QgQ2FsbFN0YXRpY09iamVjdE1ldGhvZEEgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBt
ZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljT2JqZWN0TWV0aG9k
QSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamJvb2xlYW4gQ2FsbFN0YXRpY0Jvb2xl
YW5NZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xp
c3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGpi
b29sZWFuIHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kViAodGhpcywgY2wwLCBt
ZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1
bHQ7CiAgfQoKICBqYm9vbGVhbiBDYWxsU3RhdGljQm9vbGVhbk1ldGhvZFYgKGpjbGFzcyBjbDAs
IGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxTdGF0aWNC
b29sZWFuTWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamJvb2xlYW4gQ2Fs
bFN0YXRpY0Jvb2xlYW5NZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1
ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2RBICh0aGlzLCBj
bDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqYnl0ZSBDYWxsU3RhdGljQnl0ZU1ldGhvZCAoamNsYXNz
IGNsMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19i
dWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgamJ5dGUgcmVzdWx0ID0gcC0+
Q2FsbFN0YXRpY0J5dGVNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVp
bHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpieXRlIENhbGxT
dGF0aWNCeXRlTWV0aG9kViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZh
bDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0J5dGVNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgx
LCB2YWwyKTsgfQoKICBqYnl0ZSBDYWxsU3RhdGljQnl0ZU1ldGhvZEEgKGpjbGFzcyBjbDAsIGpt
ZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljQnl0
ZU1ldGhvZEEgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpjaGFyIENhbGxTdGF0aWND
aGFyTWV0aG9kIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9s
aXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBq
Y2hhciByZXN1bHQgPSBwLT5DYWxsU3RhdGljQ2hhck1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEs
IGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0Owog
IH0KCiAgamNoYXIgQ2FsbFN0YXRpY0NoYXJNZXRob2RWIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQg
bWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljQ2hhck1ldGhvZFYg
KHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpjaGFyIENhbGxTdGF0aWNDaGFyTWV0aG9k
QSAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJu
IHAtPkNhbGxTdGF0aWNDaGFyTWV0aG9kQSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAg
anNob3J0IENhbGxTdGF0aWNTaG9ydE1ldGhvZCAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgx
LCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgo
YXJncyksbWV0aDEpOwogICAganNob3J0IHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNTaG9ydE1ldGhv
ZFYgKHRoaXMsIGNsMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganNob3J0IENhbGxTdGF0aWNTaG9ydE1ldGhvZFYg
KGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAt
PkNhbGxTdGF0aWNTaG9ydE1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpz
aG9ydCBDYWxsU3RhdGljU2hvcnRNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEs
IGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9kQSAodGhp
cywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamludCBDYWxsU3RhdGljSW50TWV0aG9kIChqY2xh
c3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBf
X2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqaW50IHJlc3VsdCA9IHAt
PkNhbGxTdGF0aWNJbnRNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVp
bHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGppbnQgQ2FsbFN0
YXRpY0ludE1ldGhvZFYgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwy
KQogIHsgcmV0dXJuIHAtPkNhbGxTdGF0aWNJbnRNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCB2
YWwyKTsgfQoKICBqaW50IENhbGxTdGF0aWNJbnRNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9k
SUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0ludE1ldGhv
ZEEgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpsb25nIENhbGxTdGF0aWNMb25nTWV0
aG9kIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFy
Z3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqbG9uZyBy
ZXN1bHQgPSBwLT5DYWxsU3RhdGljTG9uZ01ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIGFyZ3Mp
OwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAg
amxvbmcgQ2FsbFN0YXRpY0xvbmdNZXRob2RWIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEs
IHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljTG9uZ01ldGhvZFYgKHRoaXMs
IGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpsb25nIENhbGxTdGF0aWNMb25nTWV0aG9kQSAoamNs
YXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPkNh
bGxTdGF0aWNMb25nTWV0aG9kQSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamZsb2F0
IENhbGxTdGF0aWNGbG9hdE1ldGhvZCAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCAuLi4p
CiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyks
bWV0aDEpOwogICAgamZsb2F0IHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNGbG9hdE1ldGhvZFYgKHRo
aXMsIGNsMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICBy
ZXR1cm4gcmVzdWx0OwogIH0KCiAgamZsb2F0IENhbGxTdGF0aWNGbG9hdE1ldGhvZFYgKGpjbGFz
cyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxT
dGF0aWNGbG9hdE1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpmbG9hdCBD
YWxsU3RhdGljRmxvYXRNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1
ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0Zsb2F0TWV0aG9kQSAodGhpcywgY2ww
LCBtZXRoMSwgdmFsMik7IH0KCiAgamRvdWJsZSBDYWxsU3RhdGljRG91YmxlTWV0aG9kIChqY2xh
c3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBf
X2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqZG91YmxlIHJlc3VsdCA9
IHAtPkNhbGxTdGF0aWNEb3VibGVNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAg
IF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpkb3Vi
bGUgQ2FsbFN0YXRpY0RvdWJsZU1ldGhvZFYgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg
dmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxTdGF0aWNEb3VibGVNZXRob2RWICh0aGlz
LCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqZG91YmxlIENhbGxTdGF0aWNEb3VibGVNZXRob2RB
IChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4g
cC0+Q2FsbFN0YXRpY0RvdWJsZU1ldGhvZEEgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9Cgog
IHZvaWQgQ2FsbFN0YXRpY1ZvaWRNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg
Li4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFy
Z3MpLG1ldGgxKTsKICAgIHAtPkNhbGxTdGF0aWNWb2lkTWV0aG9kViAodGhpcywgY2wwLCBtZXRo
MSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICB9CgogIHZvaWQgQ2FsbFN0
YXRpY1ZvaWRNZXRob2RWIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFs
MikKICB7IHAtPkNhbGxTdGF0aWNWb2lkTWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7
IH0KCiAgdm9pZCBDYWxsU3RhdGljVm9pZE1ldGhvZEEgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBt
ZXRoMSwganZhbHVlICogdmFsMikKICB7IHAtPkNhbGxTdGF0aWNWb2lkTWV0aG9kQSAodGhpcywg
Y2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamZpZWxkSUQgR2V0U3RhdGljRmllbGRJRCAoamNsYXNz
IGNsMCwgY29uc3QgY2hhciAqIHZhbDEsIGNvbnN0IGNoYXIgKiB2YWwyKQogIHsgcmV0dXJuIHAt
PkdldFN0YXRpY0ZpZWxkSUQgKHRoaXMsIGNsMCwgdmFsMSwgdmFsMik7IH0KCiAgam9iamVjdCBH
ZXRTdGF0aWNPYmplY3RGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVy
biBwLT5HZXRTdGF0aWNPYmplY3RGaWVsZCAodGhpcywgY2wwLCBmbGQxKTsgfQoKICBqYm9vbGVh
biBHZXRTdGF0aWNCb29sZWFuRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEpCiAgeyBy
ZXR1cm4gcC0+R2V0U3RhdGljQm9vbGVhbkZpZWxkICh0aGlzLCBjbDAsIGZsZDEpOyB9CgogIGpi
eXRlIEdldFN0YXRpY0J5dGVGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJl
dHVybiBwLT5HZXRTdGF0aWNCeXRlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSk7IH0KCiAgamNoYXIg
R2V0U3RhdGljQ2hhckZpZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJu
IHAtPkdldFN0YXRpY0NoYXJGaWVsZCAodGhpcywgY2wwLCBmbGQxKTsgfQoKICBqc2hvcnQgR2V0
U3RhdGljU2hvcnRGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBw
LT5HZXRTdGF0aWNTaG9ydEZpZWxkICh0aGlzLCBjbDAsIGZsZDEpOyB9CgogIGppbnQgR2V0U3Rh
dGljSW50RmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0
U3RhdGljSW50RmllbGQgKHRoaXMsIGNsMCwgZmxkMSk7IH0KCiAgamxvbmcgR2V0U3RhdGljTG9u
Z0ZpZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldFN0YXRp
Y0xvbmdGaWVsZCAodGhpcywgY2wwLCBmbGQxKTsgfQoKICBqZmxvYXQgR2V0U3RhdGljRmxvYXRG
aWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRTdGF0aWNG
bG9hdEZpZWxkICh0aGlzLCBjbDAsIGZsZDEpOyB9CgogIGpkb3VibGUgR2V0U3RhdGljRG91Ymxl
RmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0U3RhdGlj
RG91YmxlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSk7IH0KCiAgdm9pZCBTZXRTdGF0aWNPYmplY3RG
aWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgam9iamVjdCBvYmoyKQogIHsgcC0+U2V0
U3RhdGljT2JqZWN0RmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgb2JqMik7IH0KCiAgdm9pZCBTZXRT
dGF0aWNCb29sZWFuRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEsIGpib29sZWFuIHZh
bDIpCiAgeyBwLT5TZXRTdGF0aWNCb29sZWFuRmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7
IH0KCiAgdm9pZCBTZXRTdGF0aWNCeXRlRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEs
IGpieXRlIHZhbDIpCiAgeyBwLT5TZXRTdGF0aWNCeXRlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSwg
dmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNDaGFyRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElE
IGZsZDEsIGpjaGFyIHZhbDIpCiAgeyBwLT5TZXRTdGF0aWNDaGFyRmllbGQgKHRoaXMsIGNsMCwg
ZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNTaG9ydEZpZWxkIChqY2xhc3MgY2wwLCBq
ZmllbGRJRCBmbGQxLCBqc2hvcnQgdmFsMikKICB7IHAtPlNldFN0YXRpY1Nob3J0RmllbGQgKHRo
aXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNJbnRGaWVsZCAoamNsYXNz
IGNsMCwgamZpZWxkSUQgZmxkMSwgamludCB2YWwyKQogIHsgcC0+U2V0U3RhdGljSW50RmllbGQg
KHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNMb25nRmllbGQgKGpj
bGFzcyBjbDAsIGpmaWVsZElEIGZsZDEsIGpsb25nIHZhbDIpCiAgeyBwLT5TZXRTdGF0aWNMb25n
RmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0aWNGbG9hdEZp
ZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQxLCBqZmxvYXQgdmFsMikKICB7IHAtPlNldFN0
YXRpY0Zsb2F0RmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAgdm9pZCBTZXRTdGF0
aWNEb3VibGVGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgamRvdWJsZSB2YWwyKQog
IHsgcC0+U2V0U3RhdGljRG91YmxlRmllbGQgKHRoaXMsIGNsMCwgZmxkMSwgdmFsMik7IH0KCiAg
anN0cmluZyBOZXdTdHJpbmcgKGNvbnN0IGpjaGFyICogdmFsMCwganNpemUgdmFsMSkKICB7IHJl
dHVybiBwLT5OZXdTdHJpbmcgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGppbnQgR2V0U3RyaW5n
TGVuZ3RoIChqc3RyaW5nIHZhbDApCiAgeyByZXR1cm4gcC0+R2V0U3RyaW5nTGVuZ3RoICh0aGlz
LCB2YWwwKTsgfQoKICBjb25zdCBqY2hhciAqIEdldFN0cmluZ0NoYXJzIChqc3RyaW5nIHZhbDAs
IGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRTdHJpbmdDaGFycyAodGhpcywgdmFs
MCwgdmFsMSk7IH0KCiAgdm9pZCBSZWxlYXNlU3RyaW5nQ2hhcnMgKGpzdHJpbmcgdmFsMCwgY29u
c3QgamNoYXIgKiB2YWwxKQogIHsgcC0+UmVsZWFzZVN0cmluZ0NoYXJzICh0aGlzLCB2YWwwLCB2
YWwxKTsgfQoKICBqc3RyaW5nIE5ld1N0cmluZ1VURiAoY29uc3QgY2hhciAqIHZhbDApCiAgeyBy
ZXR1cm4gcC0+TmV3U3RyaW5nVVRGICh0aGlzLCB2YWwwKTsgfQoKICBqc2l6ZSBHZXRTdHJpbmdV
VEZMZW5ndGggKGpzdHJpbmcgdmFsMCkKICB7IHJldHVybiBwLT5HZXRTdHJpbmdVVEZMZW5ndGgg
KHRoaXMsIHZhbDApOyB9CgogIGNvbnN0IGNoYXIgKiBHZXRTdHJpbmdVVEZDaGFycyAoanN0cmlu
ZyB2YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyByZXR1cm4gcC0+R2V0U3RyaW5nVVRGQ2hhcnMg
KHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIHZvaWQgUmVsZWFzZVN0cmluZ1VURkNoYXJzIChqc3Ry
aW5nIHZhbDAsIGNvbnN0IGNoYXIgKiB2YWwxKQogIHsgcC0+UmVsZWFzZVN0cmluZ1VURkNoYXJz
ICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqc2l6ZSBHZXRBcnJheUxlbmd0aCAoamFycmF5IHZh
bDApCiAgeyByZXR1cm4gcC0+R2V0QXJyYXlMZW5ndGggKHRoaXMsIHZhbDApOyB9CgogIGphcnJh
eSBOZXdPYmplY3RBcnJheSAoanNpemUgdmFsMCwgamNsYXNzIGNsMSwgam9iamVjdCBvYmoyKQog
IHsgcmV0dXJuIHAtPk5ld09iamVjdEFycmF5ICh0aGlzLCB2YWwwLCBjbDEsIG9iajIpOyB9Cgog
IGpvYmplY3QgR2V0T2JqZWN0QXJyYXlFbGVtZW50IChqb2JqZWN0QXJyYXkgdmFsMCwganNpemUg
dmFsMSkKICB7IHJldHVybiBwLT5HZXRPYmplY3RBcnJheUVsZW1lbnQgKHRoaXMsIHZhbDAsIHZh
bDEpOyB9CgogIHZvaWQgU2V0T2JqZWN0QXJyYXlFbGVtZW50IChqb2JqZWN0QXJyYXkgdmFsMCwg
anNpemUgdmFsMSwgam9iamVjdCBvYmoyKQogIHsgcC0+U2V0T2JqZWN0QXJyYXlFbGVtZW50ICh0
aGlzLCB2YWwwLCB2YWwxLCBvYmoyKTsgfQoKICBqYm9vbGVhbkFycmF5IE5ld0Jvb2xlYW5BcnJh
eSAoanNpemUgdmFsMCkKICB7IHJldHVybiBwLT5OZXdCb29sZWFuQXJyYXkgKHRoaXMsIHZhbDAp
OyB9CgogIGpieXRlQXJyYXkgTmV3Qnl0ZUFycmF5IChqc2l6ZSB2YWwwKQogIHsgcmV0dXJuIHAt
Pk5ld0J5dGVBcnJheSAodGhpcywgdmFsMCk7IH0KCiAgamNoYXJBcnJheSBOZXdDaGFyQXJyYXkg
KGpzaXplIHZhbDApCiAgeyByZXR1cm4gcC0+TmV3Q2hhckFycmF5ICh0aGlzLCB2YWwwKTsgfQoK
ICBqc2hvcnRBcnJheSBOZXdTaG9ydEFycmF5IChqc2l6ZSB2YWwwKQogIHsgcmV0dXJuIHAtPk5l
d1Nob3J0QXJyYXkgKHRoaXMsIHZhbDApOyB9CgogIGppbnRBcnJheSBOZXdJbnRBcnJheSAoanNp
emUgdmFsMCkKICB7IHJldHVybiBwLT5OZXdJbnRBcnJheSAodGhpcywgdmFsMCk7IH0KCiAgamxv
bmdBcnJheSBOZXdMb25nQXJyYXkgKGpzaXplIHZhbDApCiAgeyByZXR1cm4gcC0+TmV3TG9uZ0Fy
cmF5ICh0aGlzLCB2YWwwKTsgfQoKICBqZmxvYXRBcnJheSBOZXdGbG9hdEFycmF5IChqc2l6ZSB2
YWwwKQogIHsgcmV0dXJuIHAtPk5ld0Zsb2F0QXJyYXkgKHRoaXMsIHZhbDApOyB9CgogIGpkb3Vi
bGVBcnJheSBOZXdEb3VibGVBcnJheSAoanNpemUgdmFsMCkKICB7IHJldHVybiBwLT5OZXdEb3Vi
bGVBcnJheSAodGhpcywgdmFsMCk7IH0KCiAgamJvb2xlYW4gKiBHZXRCb29sZWFuQXJyYXlFbGVt
ZW50cyAoamJvb2xlYW5BcnJheSB2YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyByZXR1cm4gcC0+
R2V0Qm9vbGVhbkFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGpieXRlICog
R2V0Qnl0ZUFycmF5RWxlbWVudHMgKGpieXRlQXJyYXkgdmFsMCwgamJvb2xlYW4gKiB2YWwxKQog
IHsgcmV0dXJuIHAtPkdldEJ5dGVBcnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoK
ICBqY2hhciAqIEdldENoYXJBcnJheUVsZW1lbnRzIChqY2hhckFycmF5IHZhbDAsIGpib29sZWFu
ICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRDaGFyQXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwg
dmFsMSk7IH0KCiAganNob3J0ICogR2V0U2hvcnRBcnJheUVsZW1lbnRzIChqc2hvcnRBcnJheSB2
YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyByZXR1cm4gcC0+R2V0U2hvcnRBcnJheUVsZW1lbnRz
ICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqaW50ICogR2V0SW50QXJyYXlFbGVtZW50cyAoamlu
dEFycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRJbnRBcnJheUVs
ZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqbG9uZyAqIEdldExvbmdBcnJheUVsZW1l
bnRzIChqbG9uZ0FycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRM
b25nQXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFsMSk7IH0KCiAgamZsb2F0ICogR2V0Rmxv
YXRBcnJheUVsZW1lbnRzIChqZmxvYXRBcnJheSB2YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyBy
ZXR1cm4gcC0+R2V0RmxvYXRBcnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBq
ZG91YmxlICogR2V0RG91YmxlQXJyYXlFbGVtZW50cyAoamRvdWJsZUFycmF5IHZhbDAsIGpib29s
ZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXREb3VibGVBcnJheUVsZW1lbnRzICh0aGlzLCB2
YWwwLCB2YWwxKTsgfQoKICB2b2lkIFJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cyAoamJvb2xl
YW5BcnJheSB2YWwwLCBqYm9vbGVhbiAqIHZhbDEsIGppbnQgdmFsMikKICB7IHAtPlJlbGVhc2VC
b29sZWFuQXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFsMSwgdmFsMik7IH0KCiAgdm9pZCBS
ZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMgKGpieXRlQXJyYXkgdmFsMCwgamJ5dGUgKiB2YWwxLCBq
aW50IHZhbDIpCiAgeyBwLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZh
bDEsIHZhbDIpOyB9CgogIHZvaWQgUmVsZWFzZUNoYXJBcnJheUVsZW1lbnRzIChqY2hhckFycmF5
IHZhbDAsIGpjaGFyICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZUNoYXJBcnJheUVs
ZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyKTsgfQoKICB2b2lkIFJlbGVhc2VTaG9ydEFy
cmF5RWxlbWVudHMgKGpzaG9ydEFycmF5IHZhbDAsIGpzaG9ydCAqIHZhbDEsIGppbnQgdmFsMikK
ICB7IHAtPlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIp
OyB9CgogIHZvaWQgUmVsZWFzZUludEFycmF5RWxlbWVudHMgKGppbnRBcnJheSB2YWwwLCBqaW50
ICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZUludEFycmF5RWxlbWVudHMgKHRoaXMs
IHZhbDAsIHZhbDEsIHZhbDIpOyB9CgogIHZvaWQgUmVsZWFzZUxvbmdBcnJheUVsZW1lbnRzIChq
bG9uZ0FycmF5IHZhbDAsIGpsb25nICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZUxv
bmdBcnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyKTsgfQoKICB2b2lkIFJlbGVh
c2VGbG9hdEFycmF5RWxlbWVudHMgKGpmbG9hdEFycmF5IHZhbDAsIGpmbG9hdCAqIHZhbDEsIGpp
bnQgdmFsMikKICB7IHAtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZh
bDEsIHZhbDIpOyB9CgogIHZvaWQgUmVsZWFzZURvdWJsZUFycmF5RWxlbWVudHMgKGpkb3VibGVB
cnJheSB2YWwwLCBqZG91YmxlICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZURvdWJs
ZUFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIpOyB9CgogIHZvaWQgR2V0Qm9v
bGVhbkFycmF5UmVnaW9uIChqYm9vbGVhbkFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpzaXplIHZh
bDIsIGpib29sZWFuICogdmFsMykKICB7IHAtPkdldEJvb2xlYW5BcnJheVJlZ2lvbiAodGhpcywg
dmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBHZXRCeXRlQXJyYXlSZWdpb24gKGpi
eXRlQXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamJ5dGUgKiB2YWwzKQogIHsg
cC0+R2V0Qnl0ZUFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoK
ICB2b2lkIEdldENoYXJBcnJheVJlZ2lvbiAoamNoYXJBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBq
c2l6ZSB2YWwyLCBqY2hhciAqIHZhbDMpCiAgeyBwLT5HZXRDaGFyQXJyYXlSZWdpb24gKHRoaXMs
IHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgR2V0U2hvcnRBcnJheVJlZ2lvbiAo
anNob3J0QXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwganNob3J0ICogdmFsMykK
ICB7IHAtPkdldFNob3J0QXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMp
OyB9CgogIHZvaWQgR2V0SW50QXJyYXlSZWdpb24gKGppbnRBcnJheSB2YWwwLCBqc2l6ZSB2YWwx
LCBqc2l6ZSB2YWwyLCBqaW50ICogdmFsMykKICB7IHAtPkdldEludEFycmF5UmVnaW9uICh0aGlz
LCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkIEdldExvbmdBcnJheVJlZ2lvbiAo
amxvbmdBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqbG9uZyAqIHZhbDMpCiAg
eyBwLT5HZXRMb25nQXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9
CgogIHZvaWQgR2V0RmxvYXRBcnJheVJlZ2lvbiAoamZsb2F0QXJyYXkgdmFsMCwganNpemUgdmFs
MSwganNpemUgdmFsMiwgamZsb2F0ICogdmFsMykKICB7IHAtPkdldEZsb2F0QXJyYXlSZWdpb24g
KHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgR2V0RG91YmxlQXJyYXlS
ZWdpb24gKGpkb3VibGVBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqZG91Ymxl
ICogdmFsMykKICB7IHAtPkdldERvdWJsZUFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2
YWwyLCB2YWwzKTsgfQoKICB2b2lkIFNldEJvb2xlYW5BcnJheVJlZ2lvbiAoamJvb2xlYW5BcnJh
eSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqYm9vbGVhbiAqIHZhbDMpCiAgeyBwLT5T
ZXRCb29sZWFuQXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9Cgog
IHZvaWQgU2V0Qnl0ZUFycmF5UmVnaW9uIChqYnl0ZUFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpz
aXplIHZhbDIsIGpieXRlICogdmFsMykKICB7IHAtPlNldEJ5dGVBcnJheVJlZ2lvbiAodGhpcywg
dmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBTZXRDaGFyQXJyYXlSZWdpb24gKGpj
aGFyQXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamNoYXIgKiB2YWwzKQogIHsg
cC0+U2V0Q2hhckFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoK
ICB2b2lkIFNldFNob3J0QXJyYXlSZWdpb24gKGpzaG9ydEFycmF5IHZhbDAsIGpzaXplIHZhbDEs
IGpzaXplIHZhbDIsIGpzaG9ydCAqIHZhbDMpCiAgeyBwLT5TZXRTaG9ydEFycmF5UmVnaW9uICh0
aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkIFNldEludEFycmF5UmVnaW9u
IChqaW50QXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamludCAqIHZhbDMpCiAg
eyBwLT5TZXRJbnRBcnJheVJlZ2lvbiAodGhpcywgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0K
CiAgdm9pZCBTZXRMb25nQXJyYXlSZWdpb24gKGpsb25nQXJyYXkgdmFsMCwganNpemUgdmFsMSwg
anNpemUgdmFsMiwgamxvbmcgKiB2YWwzKQogIHsgcC0+U2V0TG9uZ0FycmF5UmVnaW9uICh0aGlz
LCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkIFNldEZsb2F0QXJyYXlSZWdpb24g
KGpmbG9hdEFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpzaXplIHZhbDIsIGpmbG9hdCAqIHZhbDMp
CiAgeyBwLT5TZXRGbG9hdEFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwz
KTsgfQoKICB2b2lkIFNldERvdWJsZUFycmF5UmVnaW9uIChqZG91YmxlQXJyYXkgdmFsMCwganNp
emUgdmFsMSwganNpemUgdmFsMiwgamRvdWJsZSAqIHZhbDMpCiAgeyBwLT5TZXREb3VibGVBcnJh
eVJlZ2lvbiAodGhpcywgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgamludCBSZWdpc3Rl
ck5hdGl2ZXMgKGpjbGFzcyBjbDAsIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCAqIHZhbDEsIGppbnQg
dmFsMikKICB7IHJldHVybiBwLT5SZWdpc3Rlck5hdGl2ZXMgKHRoaXMsIGNsMCwgdmFsMSwgdmFs
Mik7IH0KCiAgamludCBVbnJlZ2lzdGVyTmF0aXZlcyAoamNsYXNzIGNsMCkKICB7IHJldHVybiBw
LT5VbnJlZ2lzdGVyTmF0aXZlcyAodGhpcywgY2wwKTsgfQoKICBqaW50IE1vbml0b3JFbnRlciAo
am9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPk1vbml0b3JFbnRlciAodGhpcywgb2JqMCk7IH0K
CiAgamludCBNb25pdG9yRXhpdCAoam9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPk1vbml0b3JF
eGl0ICh0aGlzLCBvYmowKTsgfQoKICBqaW50IEdldEphdmFWTSAoSmF2YVZNICoqIHZhbDApCiAg
eyByZXR1cm4gcC0+R2V0SmF2YVZNICh0aGlzLCB2YWwwKTsgfQoKICB2b2lkIEdldFN0cmluZ1Jl
Z2lvbiAoanN0cmluZyB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqY2hhciAqIHZhbDMp
CiAgeyBwLT5HZXRTdHJpbmdSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9
CgogIHZvaWQgR2V0U3RyaW5nVVRGUmVnaW9uIChqc3RyaW5nIHZhbDAsIGpzaXplIHZhbDEsIGpz
aXplIHZhbDIsIGNoYXIgKiB2YWwzKQogIHsgcC0+R2V0U3RyaW5nVVRGUmVnaW9uICh0aGlzLCB2
YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkICogR2V0UHJpbWl0aXZlQXJyYXlDcml0
aWNhbCAoamFycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRQcmlt
aXRpdmVBcnJheUNyaXRpY2FsICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICB2b2lkIFJlbGVhc2VQ
cmltaXRpdmVBcnJheUNyaXRpY2FsIChqYXJyYXkgdmFsMCwgdm9pZCAqIHZhbDEsIGppbnQgdmFs
MikKICB7IHAtPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsICh0aGlzLCB2YWwwLCB2YWwx
LCB2YWwyKTsgfQoKICBjb25zdCBqY2hhciAqIEdldFN0cmluZ0NyaXRpY2FsIChqc3RyaW5nIHZh
bDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRTdHJpbmdDcml0aWNhbCAodGhp
cywgdmFsMCwgdmFsMSk7IH0KCiAgdm9pZCBSZWxlYXNlU3RyaW5nQ3JpdGljYWwgKGpzdHJpbmcg
dmFsMCwgY29uc3QgamNoYXIgKiB2YWwxKQogIHsgcC0+UmVsZWFzZVN0cmluZ0NyaXRpY2FsICh0
aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqd2VhayBOZXdXZWFrR2xvYmFsUmVmIChqb2JqZWN0IG9i
ajApCiAgeyByZXR1cm4gcC0+TmV3V2Vha0dsb2JhbFJlZiAodGhpcywgb2JqMCk7IH0KCiAgdm9p
ZCBEZWxldGVXZWFrR2xvYmFsUmVmIChqd2VhayB2YWwwKQogIHsgcC0+RGVsZXRlV2Vha0dsb2Jh
bFJlZiAodGhpcywgdmFsMCk7IH0KCiAgamJvb2xlYW4gRXhjZXB0aW9uQ2hlY2sgKCkKICB7IHJl
dHVybiBwLT5FeGNlcHRpb25DaGVjayAodGhpcyk7IH0KfTsKCgoKCgoKc3RydWN0IEpOSUludm9r
ZUludGVyZmFjZQp7CiAgX0p2X2Z1bmMgcmVzZXJ2ZWQwOwogIF9Kdl9mdW5jIHJlc2VydmVkMTsK
ICBfSnZfZnVuYyByZXNlcnZlZDI7CgogIGppbnQgKCpEZXN0cm95SmF2YVZNKSAoSmF2YVZNICop
OwogIGppbnQgKCpBdHRhY2hDdXJyZW50VGhyZWFkKSAoSmF2YVZNICosIHZvaWQgKiosIHZvaWQg
Kik7CiAgamludCAoKkRldGFjaEN1cnJlbnRUaHJlYWQpIChKYXZhVk0gKik7CiAgamludCAoKkdl
dEVudikgKEphdmFWTSAqLCB2b2lkICoqLCBqaW50KTsKfTsKCgoKY2xhc3MgX0p2X0phdmFWTQp7
CnB1YmxpYzoKICBjb25zdCBzdHJ1Y3QgSk5JSW52b2tlSW50ZXJmYWNlICpmdW5jdGlvbnM7Cgpw
cml2YXRlOgoKCnB1YmxpYzoKICBqaW50IERlc3Ryb3lKYXZhVk0gKCkKICB7IHJldHVybiBmdW5j
dGlvbnMtPkRlc3Ryb3lKYXZhVk0gKHRoaXMpOyB9CgogIGppbnQgQXR0YWNoQ3VycmVudFRocmVh
ZCAodm9pZCAqKnBlbnYsIHZvaWQgKmFyZ3MpCiAgeyByZXR1cm4gZnVuY3Rpb25zLT5BdHRhY2hD
dXJyZW50VGhyZWFkICh0aGlzLCBwZW52LCBhcmdzKTsgfQoKICBqaW50IERldGFjaEN1cnJlbnRU
aHJlYWQgKCkKICB7IHJldHVybiBmdW5jdGlvbnMtPkRldGFjaEN1cnJlbnRUaHJlYWQgKHRoaXMp
OyB9CgogIGppbnQgR2V0RW52ICh2b2lkICoqcGVudiwgamludCB2ZXJzaW9uKQogIHsgcmV0dXJu
IGZ1bmN0aW9ucy0+R2V0RW52ICh0aGlzLCBwZW52LCB2ZXJzaW9uKTsgfQp9OwoKCnR5cGVkZWYg
c3RydWN0IEphdmFWTUF0dGFjaEFyZ3MKewogIGppbnQgdmVyc2lvbjsKICBjaGFyICpuYW1lOwog
IGpvYmplY3QgZ3JvdXA7Cgp9IEphdmFWTUF0dGFjaEFyZ3M7Cgp0eXBlZGVmIHN0cnVjdCBKYXZh
Vk1PcHRpb24KewogIGNoYXIgKm9wdGlvblN0cmluZzsKICB2b2lkICpleHRyYUluZm87Cn0gSmF2
YVZNT3B0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgSmF2YVZNSW5pdEFyZ3MKewoKICBqaW50IHZlcnNp
b247CgoKICBqaW50IG5PcHRpb25zOwoKCiAgSmF2YVZNT3B0aW9uICpvcHRpb25zOwoKCiAgamJv
b2xlYW4gaWdub3JlVW5yZWNvZ25pemVkOwp9IEphdmFWTUluaXRBcmdzOwojIDE4ICIuLi8uLi8u
Li9saWJqYXZhL2luY2x1ZGUvanZtcGkuaCIgMgojIDMwICIuLi8uLi8uLi9saWJqYXZhL2luY2x1
ZGUvanZtcGkuaCIKc3RydWN0IF9qb2JqZWN0SUQ7CnR5cGVkZWYgc3RydWN0IF9qb2JqZWN0SUQg
KiBqb2JqZWN0SUQ7Cgp0eXBlZGVmIHN0cnVjdAp7CgogIGppbnQgbGluZW5vOwoKICBqbWV0aG9k
SUQgbWV0aG9kX2lkOwp9IEpWTVBJX0NhbGxGcmFtZTsKCnR5cGVkZWYgc3RydWN0CnsKICBKTklF
bnYgKmVudl9pZDsKCiAgamludCBudW1fZnJhbWVzOwoKICBKVk1QSV9DYWxsRnJhbWUgKmZyYW1l
czsKfSBKVk1QSV9DYWxsVHJhY2U7Cgp0eXBlZGVmIHN0cnVjdAp7CgogIGNoYXIgKmZpZWxkX25h
bWU7CgogIGNoYXIgKmZpZWxkX3NpZ25hdHVyZTsKfSBKVk1QSV9GaWVsZDsKIyA2NiAiLi4vLi4v
Li4vbGliamF2YS9pbmNsdWRlL2p2bXBpLmgiCnR5cGVkZWYgc3RydWN0CnsKCgogIGppbnQgaGVh
cF9kdW1wX2xldmVsOwp9IEpWTVBJX0hlYXBEdW1wQXJnOwoKdHlwZWRlZiBzdHJ1Y3QKewoKICBq
aW50IG9mZnNldDsKCiAgamludCBsaW5lbm87Cn0gSlZNUElfTGluZW5vOwoKdHlwZWRlZiBzdHJ1
Y3QKewoKICBjaGFyICptZXRob2RfbmFtZTsKCiAgY2hhciAqbWV0aG9kX3NpZ25hdHVyZTsKCiAg
amludCBzdGFydF9saW5lbm87CgogIGppbnQgZW5kX2xpbmVubzsKCiAgam1ldGhvZElEIG1ldGhv
ZF9pZDsKfSBKVk1QSV9NZXRob2Q7CgoKc3RydWN0IF9KVk1QSV9SYXdNb25pdG9yOwp0eXBlZGVm
IHN0cnVjdCBfSlZNUElfUmF3TW9uaXRvciAqSlZNUElfUmF3TW9uaXRvcjsKIyAxNDAgIi4uLy4u
Ly4uL2xpYmphdmEvaW5jbHVkZS9qdm1waS5oIgp0eXBlZGVmIHN0cnVjdAp7CgogIGppbnQgZXZl
bnRfdHlwZTsKCgogIEpOSUVudiAqZW52X2lkOwoKICB1bmlvbgogIHsKICAgIHN0cnVjdAogICAg
ewogICAgICBjaGFyICpjbGFzc19uYW1lOwogICAgICBjaGFyICpzb3VyY2VfbmFtZTsKICAgICAg
amludCBudW1faW50ZXJmYWNlczsKICAgICAgamludCBudW1fbWV0aG9kczsKICAgICAgSlZNUElf
TWV0aG9kICptZXRob2RzOwogICAgICBqaW50IG51bV9zdGF0aWNfZmllbGRzOwogICAgICBKVk1Q
SV9GaWVsZCAqc3RhdGljczsKICAgICAgamludCBudW1faW5zdGFuY2VfZmllbGRzOwogICAgICBK
Vk1QSV9GaWVsZCAqaW5zdGFuY2VzOwogICAgICBqb2JqZWN0SUQgY2xhc3NfaWQ7CiAgICB9IGNs
YXNzX2xvYWQ7CgogICAgc3RydWN0CiAgICB7CiAgICAgIGpvYmplY3RJRCBjbGFzc19pZDsKICAg
IH0gY2xhc3NfdW5sb2FkOwoKICAgIHN0cnVjdAogICAgewogICAgICBqaW50IGFyZW5hX2lkOwog
ICAgICBqb2JqZWN0SUQgY2xhc3NfaWQ7CiAgICAgIGppbnQgaXNfYXJyYXk7CiAgICAgIGppbnQg
c2l6ZTsKICAgICAgam9iamVjdElEIG9ial9pZDsKICAgIH0gb2JqX2FsbG9jOwoKICAgIHN0cnVj
dAogICAgewogICAgICBjaGFyICp0aHJlYWRfbmFtZTsKICAgICAgY2hhciAqZ3JvdXBfbmFtZTsK
ICAgICAgY2hhciAqcGFyZW50X25hbWU7CiAgICAgIGpvYmplY3RJRCB0aHJlYWRfaWQ7CiAgICAg
IEpOSUVudiAqdGhyZWFkX2Vudl9pZDsKICAgIH0gdGhyZWFkX3N0YXJ0OwoKICB9IHU7Cgp9IEpW
TVBJX0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QKewoKICBqaW50IHZlcnNpb247CgoKICB2b2lkICgq
Tm90aWZ5RXZlbnQpIChKVk1QSV9FdmVudCAqZXZlbnQpOwoKCiAgamludCAoKkVuYWJsZUV2ZW50
KSAoamludCBldmVudF90eXBlLCB2b2lkICphcmcpOwogIGppbnQgKCpEaXNhYmxlRXZlbnQpIChq
aW50IGV2ZW50X3R5cGUsIHZvaWQgKmFyZyk7CiAgamludCAoKlJlcXVlc3RFdmVudCkgKGppbnQg
ZXZlbnRfdHlwZSwgdm9pZCAqYXJnKTsKICB2b2lkICgqR2V0Q2FsbFRyYWNlKSAoSlZNUElfQ2Fs
bFRyYWNlICp0cmFjZSwgamludCBkZXB0aCk7CiAgdm9pZCAoKlByb2ZpbGVyRXhpdCkgKGppbnQp
OwogIEpWTVBJX1Jhd01vbml0b3IgKCpSYXdNb25pdG9yQ3JlYXRlKSAoY2hhciAqbG9ja19uYW1l
KTsKICB2b2lkICgqUmF3TW9uaXRvckVudGVyKSAoSlZNUElfUmF3TW9uaXRvciBsb2NrX2lkKTsK
ICB2b2lkICgqUmF3TW9uaXRvckV4aXQpIChKVk1QSV9SYXdNb25pdG9yIGxvY2tfaWQpOwogIHZv
aWQgKCpSYXdNb25pdG9yV2FpdCkgKEpWTVBJX1Jhd01vbml0b3IgbG9ja19pZCwgamxvbmcgbXMp
OwogIHZvaWQgKCpSYXdNb25pdG9yTm90aWZ5QWxsKSAoSlZNUElfUmF3TW9uaXRvciBsb2NrX2lk
KTsKICB2b2lkICgqUmF3TW9uaXRvckRlc3Ryb3kpIChKVk1QSV9SYXdNb25pdG9yIGxvY2tfaWQp
OwogIGpsb25nICgqR2V0Q3VycmVudFRocmVhZENwdVRpbWUpICh2b2lkKTsKICB2b2lkICgqU3Vz
cGVuZFRocmVhZCkgKEpOSUVudiAqZW52KTsKICB2b2lkICgqUmVzdW1lVGhyZWFkKSAoSk5JRW52
ICplbnYpOwogIGppbnQgKCpHZXRUaHJlYWRTdGF0dXMpIChKTklFbnYgKmVudik7CiAgamJvb2xl
YW4gKCpUaHJlYWRIYXNSdW4pIChKTklFbnYgKmVudik7CiAgamludCAoKkNyZWF0ZVN5c3RlbVRo
cmVhZCkgKGNoYXIgKm5hbWUsIGppbnQgcHJpb3JpdHksIHZvaWQgKCpmKSAodm9pZCAqKSk7CiAg
dm9pZCAoKlNldFRocmVhZExvY2FsU3RvcmFnZSkgKEpOSUVudiAqZW52X2lkLCB2b2lkICpwdHIp
OwogIHZvaWQgKigqR2V0VGhyZWFkTG9jYWxTdG9yYWdlKSAoSk5JRW52ICplbnZfaWQpOwogIHZv
aWQgKCpEaXNhYmxlR0MpICh2b2lkKTsKICB2b2lkICgqRW5hYmxlR0MpICh2b2lkKTsKICB2b2lk
ICgqUnVuR0MpICh2b2lkKTsKICBqb2JqZWN0SUQgKCpHZXRUaHJlYWRPYmplY3QpIChKTklFbnYg
KmVudik7CiAgam9iamVjdElEICgqR2V0TWV0aG9kQ2xhc3MpIChqbWV0aG9kSUQgbWlkKTsKCn0g
SlZNUElfSW50ZXJmYWNlOwojIDM2OSAiLi4vLi4vLi4vbGliamF2YS9pbmNsdWRlL2p2bS5oIiAy
CgpleHRlcm4gdm9pZCAoKl9Kdl9KVk1QSV9Ob3RpZnlfT0JKRUNUX0FMTE9DKSAoSlZNUElfRXZl
bnQgKmV2ZW50KTsKZXh0ZXJuIHZvaWQgKCpfSnZfSlZNUElfTm90aWZ5X1RIUkVBRF9TVEFSVCkg
KEpWTVBJX0V2ZW50ICpldmVudCk7CmV4dGVybiB2b2lkICgqX0p2X0pWTVBJX05vdGlmeV9USFJF
QURfRU5EKSAoSlZNUElfRXZlbnQgKmV2ZW50KTsKIyAyMCAiLi4vLi4vLi4vbGliamF2YS9leGNl
cHRpb24uY2MiIDIKCgoKCm5hbWVzcGFjZSBzdGQKewogIHN0YXRpYyBfX2F0dHJpYnV0ZV9fICgo
X19ub3JldHVybl9fKSkgdm9pZAogIGFib3J0ICgpCiAgewogICAgOjphYm9ydCAoKTsKICB9Cn0K
IyAxICIuLi8uLi8uLi9nY2MvdW53aW5kLmgiIDEKIyAyNSAiLi4vLi4vLi4vZ2NjL3Vud2luZC5o
IgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBfVW53aW5kX1dvcmQgX19hdHRy
aWJ1dGVfXygoX19tb2RlX18oX193b3JkX18pKSk7CnR5cGVkZWYgc2lnbmVkIF9VbndpbmRfU3dv
cmQgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX193b3JkX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
X1Vud2luZF9QdHIgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19wb2ludGVyX18pKSk7CgoKCgoK
dHlwZWRlZiB1bnNpZ25lZCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBfX2F0dHJpYnV0ZV9fKChf
X21vZGVfXyhfX0RJX18pKSk7CgoKCnR5cGVkZWYgZW51bQp7CiAgX1VSQ19OT19SRUFTT04gPSAw
LAogIF9VUkNfRk9SRUlHTl9FWENFUFRJT05fQ0FVR0hUID0gMSwKICBfVVJDX0ZBVEFMX1BIQVNF
Ml9FUlJPUiA9IDIsCiAgX1VSQ19GQVRBTF9QSEFTRTFfRVJST1IgPSAzLAogIF9VUkNfTk9STUFM
X1NUT1AgPSA0LAogIF9VUkNfRU5EX09GX1NUQUNLID0gNSwKICBfVVJDX0hBTkRMRVJfRk9VTkQg
PSA2LAogIF9VUkNfSU5TVEFMTF9DT05URVhUID0gNywKICBfVVJDX0NPTlRJTlVFX1VOV0lORCA9
IDgKfSBfVW53aW5kX1JlYXNvbl9Db2RlOwojIDY0ICIuLi8uLi8uLi9nY2MvdW53aW5kLmgiCnN0
cnVjdCBfVW53aW5kX0V4Y2VwdGlvbjsKCnR5cGVkZWYgdm9pZCAoKl9VbndpbmRfRXhjZXB0aW9u
X0NsZWFudXBfRm4pIChfVW53aW5kX1JlYXNvbl9Db2RlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwoKc3Ry
dWN0IF9VbndpbmRfRXhjZXB0aW9uCnsKICBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBleGNlcHRp
b25fY2xhc3M7CiAgX1Vud2luZF9FeGNlcHRpb25fQ2xlYW51cF9GbiBleGNlcHRpb25fY2xlYW51
cDsKICBfVW53aW5kX1dvcmQgcHJpdmF0ZV8xOwogIF9VbndpbmRfV29yZCBwcml2YXRlXzI7CgoK
Cgp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKSk7CgoKCgp0eXBlZGVmIGludCBfVW53aW5k
X0FjdGlvbjsKIyA5NiAiLi4vLi4vLi4vZ2NjL3Vud2luZC5oIgpzdHJ1Y3QgX1Vud2luZF9Db250
ZXh0OwoKCmV4dGVybiBfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfUmFpc2VFeGNlcHRpb24g
KHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKCgoKdHlwZWRlZiBfVW53aW5kX1JlYXNvbl9D
b2RlICgqX1Vud2luZF9TdG9wX0ZuKQogICAgIChpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5k
X0V4Y2VwdGlvbl9DbGFzcywKICAgICAgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosIHN0cnVj
dCBfVW53aW5kX0NvbnRleHQgKiwgdm9pZCAqKTsKCmV4dGVybiBfVW53aW5kX1JlYXNvbl9Db2Rl
IF9VbndpbmRfRm9yY2VkVW53aW5kIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9VbndpbmRfU3RvcF9G
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
Kik7CgoKZXh0ZXJuIHZvaWQgX1Vud2luZF9EZWxldGVFeGNlcHRpb24gKHN0cnVjdCBfVW53aW5k
X0V4Y2VwdGlvbiAqKTsKCgoKZXh0ZXJuIHZvaWQgX1Vud2luZF9SZXN1bWUgKHN0cnVjdCBfVW53
aW5kX0V4Y2VwdGlvbiAqKTsKCgoKCgoKZXh0ZXJuIF9VbndpbmRfV29yZCBfVW53aW5kX0dldEdS
IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIGludCk7CmV4dGVybiB2b2lkIF9VbndpbmRfU2V0
R1IgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50LCBfVW53aW5kX1dvcmQpOwoKZXh0ZXJu
IF9VbndpbmRfUHRyIF9VbndpbmRfR2V0SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CmV4
dGVybiB2b2lkIF9VbndpbmRfU2V0SVAgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgX1Vud2lu
ZF9QdHIpOwoKZXh0ZXJuIHZvaWQgKl9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEgKHN0
cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CgpleHRlcm4gX1Vud2luZF9QdHIgX1Vud2luZF9HZXRS
ZWdpb25TdGFydCAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKIyAxNDggIi4uLy4uLy4uL2dj
Yy91bndpbmQuaCIKdHlwZWRlZiBfVW53aW5kX1JlYXNvbl9Db2RlICgqX1Vud2luZF9QZXJzb25h
bGl0eV9GbikKICAgICAoaW50LCBfVW53aW5kX0FjdGlvbiwgX1Vud2luZF9FeGNlcHRpb25fQ2xh
c3MsCiAgICAgIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLCBzdHJ1Y3QgX1Vud2luZF9Db250
ZXh0ICopOwoKCgoKc3RydWN0IFNqTGpfRnVuY3Rpb25fQ29udGV4dDsKZXh0ZXJuIHZvaWQgX1Vu
d2luZF9TakxqX1JlZ2lzdGVyIChzdHJ1Y3QgU2pMal9GdW5jdGlvbl9Db250ZXh0ICopOwpleHRl
cm4gdm9pZCBfVW53aW5kX1NqTGpfVW5yZWdpc3RlciAoc3RydWN0IFNqTGpfRnVuY3Rpb25fQ29u
dGV4dCAqKTsKCmV4dGVybiBfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9SYWlzZUV4
Y2VwdGlvbgogICAgIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CmV4dGVybiBfVW53aW5k
X1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9Gb3JjZWRVbndpbmQKICAgICAoc3RydWN0IF9Vbndp
bmRfRXhjZXB0aW9uICosIF9VbndpbmRfU3RvcF9Gbiwgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgX1Vu
d2luZF9TakxqX1Jlc3VtZSAoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwojIDE4NiAiLi4v
Li4vLi4vZ2NjL3Vud2luZC5oIgpleHRlcm4gX1Vud2luZF9QdHIgX1Vud2luZF9HZXREYXRhUmVs
QmFzZSAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKZXh0ZXJuIF9VbndpbmRfUHRyIF9Vbndp
bmRfR2V0VGV4dFJlbEJhc2UgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CgoKCn0KIyAzMyAi
Li4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiIDIKCnN0cnVjdCBhbGlnbm1lbnRfdGVzdF9z
dHJ1Y3QKewogIGNoYXIgc3BhY2U7CiAgY2hhciBlbmRbMF0gX19hdHRyaWJ1dGVfXygoYWxpZ25l
ZCkpOwp9OwoKc3RydWN0IGphdmFfZXhjZXB0aW9uX2hlYWRlcgp7CgogIF9VbndpbmRfUHRyIGxh
bmRpbmdQYWQ7CiAgaW50IGhhbmRsZXJTd2l0Y2hWYWx1ZTsKCgoKCgogIGNoYXIgcGFkW3NpemVv
ZihqdGhyb3dhYmxlKSA8IHNpemVvZihhbGlnbm1lbnRfdGVzdF9zdHJ1Y3QpCiAgICAgICAgICAg
PyBzaXplb2YoYWxpZ25tZW50X3Rlc3Rfc3RydWN0KSAtIHNpemVvZihqdGhyb3dhYmxlKSA6IDBd
CiAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKSk7CgogIGp0aHJvd2FibGUgdmFsdWU7CgoKICBf
VW53aW5kX0V4Y2VwdGlvbiB1bndpbmRIZWFkZXI7Cn07CgoKY29uc3QgX1Vud2luZF9FeGNlcHRp
b25fQ2xhc3MgX19nY2pfZXhjZXB0aW9uX2NsYXNzCj0gKCgoKCgoKChfVW53aW5kX0V4Y2VwdGlv
bl9DbGFzcykgJ0cnCiAgICAgICAgIDw8IDggfCAoX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MpICdO
JykKICAgICAgICA8PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzKSAnVScpCiAgICAgICA8
PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzKSAnQycpCiAgICAgIDw8IDggfCAoX1Vud2lu
ZF9FeGNlcHRpb25fQ2xhc3MpICdKJykKICAgICA8PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0Ns
YXNzKSAnQScpCiAgICA8PCA4IHwgKF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzKSAnVicpCiAgIDw8
IDggfCAoX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MpICdBJyk7CgoKc3RhdGljIGlubGluZSBqYXZh
X2V4Y2VwdGlvbl9oZWFkZXIgKgpnZXRfZXhjZXB0aW9uX2hlYWRlcl9mcm9tX3VlIChfVW53aW5k
X0V4Y2VwdGlvbiAqZXhjKQp7CiAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amF2YV9leGNlcHRp
b25faGVhZGVyICo+KGV4YyArIDEpIC0gMTsKfQoKCgoKZXh0ZXJuICJDIiB2b2lkCl9Kdl9UaHJv
dyAoanRocm93YWJsZSB2YWx1ZSkKewogIGphdmFfZXhjZXB0aW9uX2hlYWRlciAqeGgKICAgID0g
c3RhdGljX2Nhc3Q8amF2YV9leGNlcHRpb25faGVhZGVyICo+KF9Kdl9BbGxvY1Jhd09iaiAoc2l6
ZW9mICgqeGgpKSk7CgogIGlmICh2YWx1ZSA9PSBfX251bGwpCiAgICB2YWx1ZSA9IG5ldyBqYXZh
OjpsYW5nOjpOdWxsUG9pbnRlckV4Y2VwdGlvbiAoKTsKICB4aC0+dmFsdWUgPSB2YWx1ZTsKCiAg
eGgtPnVud2luZEhlYWRlci5leGNlcHRpb25fY2xhc3MgPSBfX2djal9leGNlcHRpb25fY2xhc3M7
CiAgeGgtPnVud2luZEhlYWRlci5leGNlcHRpb25fY2xlYW51cCA9IF9fbnVsbDsKCgoKICBfVW53
aW5kX1JlYXNvbl9Db2RlIGNvZGU7CgoKCiAgY29kZSA9IF9VbndpbmRfUmFpc2VFeGNlcHRpb24g
KCZ4aC0+dW53aW5kSGVhZGVyKTsKIyAxMTAgIi4uLy4uLy4uL2xpYmphdmEvZXhjZXB0aW9uLmNj
IgogIGFib3J0KCk7Cn0KCgojIDEgIi4uLy4uLy4uL2djYy91bndpbmQtcGUuaCIgMQojIDU5ICIu
Li8uLi8uLi9nY2MvdW53aW5kLXBlLmgiCnN0YXRpYyB1bnNpZ25lZCBpbnQKc2l6ZV9vZl9lbmNv
ZGVkX3ZhbHVlICh1bnNpZ25lZCBjaGFyIGVuY29kaW5nKQp7CiAgaWYgKGVuY29kaW5nID09IDB4
ZmYpCiAgICByZXR1cm4gMDsKCiAgc3dpdGNoIChlbmNvZGluZyAmIDB4MDcpCiAgICB7CiAgICBj
YXNlIDB4MDA6CiAgICAgIHJldHVybiBzaXplb2YgKHZvaWQgKik7CiAgICBjYXNlIDB4MDI6CiAg
ICAgIHJldHVybiAyOwogICAgY2FzZSAweDAzOgogICAgICByZXR1cm4gNDsKICAgIGNhc2UgMHgw
NDoKICAgICAgcmV0dXJuIDg7CiAgICB9CiAgc3RkOjphYm9ydCAoKTsKfQojIDg2ICIuLi8uLi8u
Li9nY2MvdW53aW5kLXBlLmgiCnN0YXRpYyBfVW53aW5kX1B0cgpiYXNlX29mX2VuY29kZWRfdmFs
dWUgKHVuc2lnbmVkIGNoYXIgZW5jb2RpbmcsIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRl
eHQpCnsKICBpZiAoZW5jb2RpbmcgPT0gMHhmZikKICAgIHJldHVybiAwOwoKICBzd2l0Y2ggKGVu
Y29kaW5nICYgMHg3MCkKICAgIHsKICAgIGNhc2UgMHgwMDoKICAgIGNhc2UgMHgxMDoKICAgIGNh
c2UgMHg1MDoKICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSAweDIwOgogICAgICByZXR1cm4gX1Vu
d2luZF9HZXRUZXh0UmVsQmFzZSAoY29udGV4dCk7CiAgICBjYXNlIDB4MzA6CiAgICAgIHJldHVy
biBfVW53aW5kX0dldERhdGFSZWxCYXNlIChjb250ZXh0KTsKICAgIGNhc2UgMHg0MDoKICAgICAg
cmV0dXJuIF9VbndpbmRfR2V0UmVnaW9uU3RhcnQgKGNvbnRleHQpOwogICAgfQogIHN0ZDo6YWJv
cnQgKCk7Cn0KIyAxMTYgIi4uLy4uLy4uL2djYy91bndpbmQtcGUuaCIKc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKgpyZWFkX3VsZWIxMjggKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsIF9Vbndp
bmRfV29yZCAqdmFsKQp7CiAgdW5zaWduZWQgaW50IHNoaWZ0ID0gMDsKICB1bnNpZ25lZCBjaGFy
IGJ5dGU7CiAgX1Vud2luZF9Xb3JkIHJlc3VsdDsKCiAgcmVzdWx0ID0gMDsKICBkbwogICAgewog
ICAgICBieXRlID0gKnArKzsKICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7
CiAgICAgIHNoaWZ0ICs9IDc7CiAgICB9CiAgd2hpbGUgKGJ5dGUgJiAweDgwKTsKCiAgKnZhbCA9
IHJlc3VsdDsKICByZXR1cm4gcDsKfQoKCgpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqCnJl
YWRfc2xlYjEyOCAoY29uc3QgdW5zaWduZWQgY2hhciAqcCwgX1Vud2luZF9Td29yZCAqdmFsKQp7
CiAgdW5zaWduZWQgaW50IHNoaWZ0ID0gMDsKICB1bnNpZ25lZCBjaGFyIGJ5dGU7CiAgX1Vud2lu
ZF9Xb3JkIHJlc3VsdDsKCiAgcmVzdWx0ID0gMDsKICBkbwogICAgewogICAgICBieXRlID0gKnAr
KzsKICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7CiAgICAgIHNoaWZ0ICs9
IDc7CiAgICB9CiAgd2hpbGUgKGJ5dGUgJiAweDgwKTsKCgogIGlmIChzaGlmdCA8IDggKiBzaXpl
b2YocmVzdWx0KSAmJiAoYnl0ZSAmIDB4NDApICE9IDApCiAgICByZXN1bHQgfD0gLSgxTCA8PCBz
aGlmdCk7CgogICp2YWwgPSAoX1Vud2luZF9Td29yZCkgcmVzdWx0OwogIHJldHVybiBwOwp9CgoK
CgoKc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKgpyZWFkX2VuY29kZWRfdmFsdWVfd2l0aF9i
YXNlICh1bnNpZ25lZCBjaGFyIGVuY29kaW5nLCBfVW53aW5kX1B0ciBiYXNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCBfVW53aW5kX1B0ciAq
dmFsKQp7CiAgdW5pb24gdW5hbGlnbmVkCiAgICB7CiAgICAgIHZvaWQgKnB0cjsKICAgICAgdW5z
aWduZWQgdTIgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKEhJKSkpOwogICAgICB1bnNpZ25lZCB1NCBf
X2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7CiAgICAgIHVuc2lnbmVkIHU4IF9fYXR0cmlidXRl
X18gKChtb2RlIChESSkpKTsKICAgICAgc2lnbmVkIHMyIF9fYXR0cmlidXRlX18gKChtb2RlIChI
SSkpKTsKICAgICAgc2lnbmVkIHM0IF9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKICAgICAg
c2lnbmVkIHM4IF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKICAgIH0gX19hdHRyaWJ1dGVf
XygoX19wYWNrZWRfXykpOwoKICB1bmlvbiB1bmFsaWduZWQgKnUgPSAodW5pb24gdW5hbGlnbmVk
ICopIHA7CiAgX1Vud2luZF9QdHIgcmVzdWx0OwoKICBpZiAoZW5jb2RpbmcgPT0gMHg1MCkKICAg
IHsKICAgICAgX1Vud2luZF9QdHIgYSA9IChfVW53aW5kX1B0cikgcDsKICAgICAgYSA9IChhICsg
c2l6ZW9mICh2b2lkICopIC0gMSkgJiAtIHNpemVvZih2b2lkICopOwogICAgICByZXN1bHQgPSAq
KF9VbndpbmRfUHRyICopIGE7CiAgICAgIHAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAoYSAr
IHNpemVvZiAodm9pZCAqKSk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBzd2l0Y2ggKGVuY29k
aW5nICYgMHgwZikKICAgICAgICB7CiAgICAgICAgY2FzZSAweDAwOgogICAgICAgICAgcmVzdWx0
ID0gKF9VbndpbmRfUHRyKSB1LT5wdHI7CiAgICAgICAgICBwICs9IHNpemVvZiAodm9pZCAqKTsK
ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4MDE6CiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9VbndpbmRfV29yZCB0bXA7CiAgICAgICAgICAgIHAgPSByZWFkX3VsZWIxMjggKHAsICZ0
bXApOwogICAgICAgICAgICByZXN1bHQgPSAoX1Vud2luZF9QdHIpIHRtcDsKICAgICAgICAgIH0K
ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4MDk6CiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9VbndpbmRfU3dvcmQgdG1wOwogICAgICAgICAgICBwID0gcmVhZF9zbGViMTI4IChwLCAm
dG1wKTsKICAgICAgICAgICAgcmVzdWx0ID0gKF9VbndpbmRfUHRyKSB0bXA7CiAgICAgICAgICB9
CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDAyOgogICAgICAgICAgcmVzdWx0ID0g
dS0+dTI7CiAgICAgICAgICBwICs9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4
MDM6CiAgICAgICAgICByZXN1bHQgPSB1LT51NDsKICAgICAgICAgIHAgKz0gNDsKICAgICAgICAg
IGJyZWFrOwogICAgICAgIGNhc2UgMHgwNDoKICAgICAgICAgIHJlc3VsdCA9IHUtPnU4OwogICAg
ICAgICAgcCArPSA4OwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHgwQToKICAgICAg
ICAgIHJlc3VsdCA9IHUtPnMyOwogICAgICAgICAgcCArPSAyOwogICAgICAgICAgYnJlYWs7CiAg
ICAgICAgY2FzZSAweDBCOgogICAgICAgICAgcmVzdWx0ID0gdS0+czQ7CiAgICAgICAgICBwICs9
IDQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4MEM6CiAgICAgICAgICByZXN1bHQg
PSB1LT5zODsKICAgICAgICAgIHAgKz0gODsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgc3RkOjphYm9ydCAoKTsKICAgICAgICB9CgogICAgICBpZiAocmVzdWx0
ICE9IDApCiAgICAgICAgewogICAgICAgICAgcmVzdWx0ICs9ICgoZW5jb2RpbmcgJiAweDcwKSA9
PSAweDEwCiAgICAgICAgICAgICAgICAgICAgID8gKF9VbndpbmRfUHRyKSB1IDogYmFzZSk7CiAg
ICAgICAgICBpZiAoZW5jb2RpbmcgJiAweDgwKQogICAgICAgICAgICByZXN1bHQgPSAqKF9Vbndp
bmRfUHRyICopIHJlc3VsdDsKICAgICAgICB9CiAgICB9CgogICp2YWwgPSByZXN1bHQ7CiAgcmV0
dXJuIHA7Cn0KCgoKCgoKc3RhdGljIGlubGluZSBjb25zdCB1bnNpZ25lZCBjaGFyICoKcmVhZF9l
bmNvZGVkX3ZhbHVlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBj
aGFyIGVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAs
IF9VbndpbmRfUHRyICp2YWwpCnsKICByZXR1cm4gcmVhZF9lbmNvZGVkX3ZhbHVlX3dpdGhfYmFz
ZSAoZW5jb2RpbmcsCiAgICAgICAgICAgICAgICBiYXNlX29mX2VuY29kZWRfdmFsdWUgKGVuY29k
aW5nLCBjb250ZXh0KSwKICAgICAgICAgICAgICAgIHAsIHZhbCk7Cn0KIyAxMTUgIi4uLy4uLy4u
L2xpYmphdmEvZXhjZXB0aW9uLmNjIiAyCgpzdHJ1Y3QgbHNkYV9oZWFkZXJfaW5mbwp7CiAgX1Vu
d2luZF9QdHIgU3RhcnQ7CiAgX1Vud2luZF9QdHIgTFBTdGFydDsKICBjb25zdCB1bnNpZ25lZCBj
aGFyICpUVHlwZTsKICBjb25zdCB1bnNpZ25lZCBjaGFyICphY3Rpb25fdGFibGU7CiAgdW5zaWdu
ZWQgY2hhciB0dHlwZV9lbmNvZGluZzsKICB1bnNpZ25lZCBjaGFyIGNhbGxfc2l0ZV9lbmNvZGlu
ZzsKfTsKCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICoKcGFyc2VfbHNkYV9oZWFkZXIgKF9V
bndpbmRfQ29udGV4dCAqY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqcCwKICAgICAgICAg
ICAgICAgICAgIGxzZGFfaGVhZGVyX2luZm8gKmluZm8pCnsKICBfVW53aW5kX1dvcmQgdG1wOwog
IHVuc2lnbmVkIGNoYXIgbHBzdGFydF9lbmNvZGluZzsKCiAgaW5mby0+U3RhcnQgPSAoY29udGV4
dCA/IF9VbndpbmRfR2V0UmVnaW9uU3RhcnQgKGNvbnRleHQpIDogMCk7CgoKICBscHN0YXJ0X2Vu
Y29kaW5nID0gKnArKzsKICBpZiAobHBzdGFydF9lbmNvZGluZyAhPSAweGZmKQogICAgcCA9IHJl
YWRfZW5jb2RlZF92YWx1ZSAoY29udGV4dCwgbHBzdGFydF9lbmNvZGluZywgcCwgJmluZm8tPkxQ
U3RhcnQpOwogIGVsc2UKICAgIGluZm8tPkxQU3RhcnQgPSBpbmZvLT5TdGFydDsKCgogIGluZm8t
PnR0eXBlX2VuY29kaW5nID0gKnArKzsKICBpZiAoaW5mby0+dHR5cGVfZW5jb2RpbmcgIT0gMHhm
ZikKICAgIHsKICAgICAgcCA9IHJlYWRfdWxlYjEyOCAocCwgJnRtcCk7CiAgICAgIGluZm8tPlRU
eXBlID0gcCArIHRtcDsKICAgIH0KICBlbHNlCiAgICBpbmZvLT5UVHlwZSA9IDA7CgoKCiAgaW5m
by0+Y2FsbF9zaXRlX2VuY29kaW5nID0gKnArKzsKICBwID0gcmVhZF91bGViMTI4IChwLCAmdG1w
KTsKICBpbmZvLT5hY3Rpb25fdGFibGUgPSBwICsgdG1wOwoKICByZXR1cm4gcDsKfQoKc3RhdGlj
IGpjbGFzcwpnZXRfdHR5cGVfZW50cnkgKF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgbHNkYV9o
ZWFkZXJfaW5mbyAqaW5mbywgbG9uZyBpKQp7CiAgX1Vud2luZF9QdHIgcHRyOwoKICBpICo9IHNp
emVfb2ZfZW5jb2RlZF92YWx1ZSAoaW5mby0+dHR5cGVfZW5jb2RpbmcpOwogIHJlYWRfZW5jb2Rl
ZF92YWx1ZSAoY29udGV4dCwgaW5mby0+dHR5cGVfZW5jb2RpbmcsIGluZm8tPlRUeXBlIC0gaSwg
JnB0cik7CgogIHJldHVybiByZWludGVycHJldF9jYXN0PGpjbGFzcz4ocHRyKTsKfQojIDE4MiAi
Li4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiCmV4dGVybiAiQyIgX1Vud2luZF9SZWFzb25f
Q29kZQpfX2djal9wZXJzb25hbGl0eV92MCAoaW50IHZlcnNpb24sCiAgICAgICAgICAgICAgICAg
ICAgICBfVW53aW5kX0FjdGlvbiBhY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgX1Vud2lu
ZF9FeGNlcHRpb25fQ2xhc3MgZXhjZXB0aW9uX2NsYXNzLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICp1ZV9oZWFkZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpjb250ZXh0KQp7CiAgamF2YV9leGNlcHRpb25faGVh
ZGVyICp4aCA9IGdldF9leGNlcHRpb25faGVhZGVyX2Zyb21fdWUgKHVlX2hlYWRlcik7CgogIGxz
ZGFfaGVhZGVyX2luZm8gaW5mbzsKICBjb25zdCB1bnNpZ25lZCBjaGFyICpsYW5ndWFnZV9zcGVj
aWZpY19kYXRhOwogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFjdGlvbl9yZWNvcmQ7CiAgY29uc3Qg
dW5zaWduZWQgY2hhciAqcDsKICBfVW53aW5kX1B0ciBsYW5kaW5nX3BhZCwgaXA7CiAgaW50IGhh
bmRsZXJfc3dpdGNoX3ZhbHVlOwogIGJvb2wgc2F3X2NsZWFudXA7CiAgYm9vbCBzYXdfaGFuZGxl
cjsKCgoKICBpZiAodmVyc2lvbiAhPSAxKQogICAgcmV0dXJuIF9VUkNfRkFUQUxfUEhBU0UxX0VS
Uk9SOwoKCiAgaWYgKGFjdGlvbnMgPT0gKDIgfCA0KQogICAgICAmJiBleGNlcHRpb25fY2xhc3Mg
PT0gX19nY2pfZXhjZXB0aW9uX2NsYXNzKQogICAgewogICAgICBoYW5kbGVyX3N3aXRjaF92YWx1
ZSA9IHhoLT5oYW5kbGVyU3dpdGNoVmFsdWU7CiAgICAgIGxhbmRpbmdfcGFkID0geGgtPmxhbmRp
bmdQYWQ7CiAgICAgIGdvdG8gaW5zdGFsbF9jb250ZXh0OwogICAgfQojIDIyMyAiLi4vLi4vLi4v
bGliamF2YS9leGNlcHRpb24uY2MiCiAgbGFuZ3VhZ2Vfc3BlY2lmaWNfZGF0YSA9IChjb25zdCB1
bnNpZ25lZCBjaGFyICopCiAgICBfVW53aW5kX0dldExhbmd1YWdlU3BlY2lmaWNEYXRhIChjb250
ZXh0KTsKCgogIGlmICghIGxhbmd1YWdlX3NwZWNpZmljX2RhdGEpCiAgICByZXR1cm4gX1VSQ19D
T05USU5VRV9VTldJTkQ7CgoKICBwID0gcGFyc2VfbHNkYV9oZWFkZXIgKGNvbnRleHQsIGxhbmd1
YWdlX3NwZWNpZmljX2RhdGEsICZpbmZvKTsKICBpcCA9IF9VbndpbmRfR2V0SVAgKGNvbnRleHQp
IC0gMTsKICBsYW5kaW5nX3BhZCA9IDA7CiAgYWN0aW9uX3JlY29yZCA9IDA7CiAgaGFuZGxlcl9z
d2l0Y2hfdmFsdWUgPSAwOwojIDI2MyAiLi4vLi4vLi4vbGliamF2YS9leGNlcHRpb24uY2MiCiAg
d2hpbGUgKHAgPCBpbmZvLmFjdGlvbl90YWJsZSkKICAgIHsKICAgICAgX1Vud2luZF9QdHIgY3Nf
c3RhcnQsIGNzX2xlbiwgY3NfbHA7CiAgICAgIF9VbndpbmRfV29yZCBjc19hY3Rpb247CgoKICAg
ICAgcCA9IHJlYWRfZW5jb2RlZF92YWx1ZSAoMCwgaW5mby5jYWxsX3NpdGVfZW5jb2RpbmcsIHAs
ICZjc19zdGFydCk7CiAgICAgIHAgPSByZWFkX2VuY29kZWRfdmFsdWUgKDAsIGluZm8uY2FsbF9z
aXRlX2VuY29kaW5nLCBwLCAmY3NfbGVuKTsKICAgICAgcCA9IHJlYWRfZW5jb2RlZF92YWx1ZSAo
MCwgaW5mby5jYWxsX3NpdGVfZW5jb2RpbmcsIHAsICZjc19scCk7CiAgICAgIHAgPSByZWFkX3Vs
ZWIxMjggKHAsICZjc19hY3Rpb24pOwoKCiAgICAgIGlmIChpcCA8IGluZm8uU3RhcnQgKyBjc19z
dGFydCkKICAgICAgICBwID0gaW5mby5hY3Rpb25fdGFibGU7CiAgICAgIGVsc2UgaWYgKGlwIDwg
aW5mby5TdGFydCArIGNzX3N0YXJ0ICsgY3NfbGVuKQogICAgICAgIHsKICAgICAgICAgIGlmIChj
c19scCkKICAgICAgICAgICAgbGFuZGluZ19wYWQgPSBpbmZvLkxQU3RhcnQgKyBjc19scDsKICAg
ICAgICAgIGlmIChjc19hY3Rpb24pCiAgICAgICAgICAgIGFjdGlvbl9yZWNvcmQgPSBpbmZvLmFj
dGlvbl90YWJsZSArIGNzX2FjdGlvbiAtIDE7CiAgICAgICAgICBnb3RvIGZvdW5kX3NvbWV0aGlu
ZzsKICAgICAgICB9CiAgICB9CgoKCgoKICByZXR1cm4gX1VSQ19DT05USU5VRV9VTldJTkQ7Cgog
Zm91bmRfc29tZXRoaW5nOgogIHNhd19jbGVhbnVwID0gZmFsc2U7CiAgc2F3X2hhbmRsZXIgPSBm
YWxzZTsKCiAgaWYgKGxhbmRpbmdfcGFkID09IDApCiAgICB7CgoKICAgIH0KICBlbHNlIGlmIChh
Y3Rpb25fcmVjb3JkID09IDApCiAgICB7CgoKCiAgICAgIHNhd19jbGVhbnVwID0gdHJ1ZTsKICAg
IH0KICBlbHNlCiAgICB7CgogICAgICBfVW53aW5kX1N3b3JkIGFyX2ZpbHRlciwgYXJfZGlzcDsK
CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIHAgPSBhY3Rpb25fcmVjb3JkOwog
ICAgICAgICAgcCA9IHJlYWRfc2xlYjEyOCAocCwgJmFyX2ZpbHRlcik7CiAgICAgICAgICByZWFk
X3NsZWIxMjggKHAsICZhcl9kaXNwKTsKCiAgICAgICAgICBpZiAoYXJfZmlsdGVyID09IDApCiAg
ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc2F3X2NsZWFudXAgPSB0cnVlOwogICAgICAgICAg
ICB9CgoKCiAgICAgICAgICBlbHNlIGlmICgoYWN0aW9ucyAmIDgpCiAgICAgICAgICAgICAgfHwg
ZXhjZXB0aW9uX2NsYXNzICE9IF9fZ2NqX2V4Y2VwdGlvbl9jbGFzcykKICAgICAgICAgICAgOwoK
ICAgICAgICAgIGVsc2UgaWYgKGFyX2ZpbHRlciA+IDApCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIGpjbGFzcyBjYXRjaF90eXBlID0gZ2V0X3R0eXBlX2VudHJ5IChjb250ZXh0LCAmaW5m
bywgYXJfZmlsdGVyKTsKCgoKICAgICAgICAgICAgICBpZiAoKHNpemVfdCljYXRjaF90eXBlICYg
MSkKICAgICAgICAgICAgICAgIGNhdGNoX3R5cGUgPSBfSnZfRmluZENsYXNzICgoVXRmOENvbnN0
KiljYXRjaF90eXBlIC0gMSwgX19udWxsKTsKCiAgICAgICAgICAgICAgaWYgKF9Kdl9Jc0luc3Rh
bmNlT2YgKHhoLT52YWx1ZSwgY2F0Y2hfdHlwZSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIGhhbmRsZXJfc3dpdGNoX3ZhbHVlID0gYXJfZmlsdGVyOwogICAgICAgICAgICAg
ICAgICBzYXdfaGFuZGxlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgoK
CgogICAgICAgICAgICAgIGFib3J0ICgpOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKGFy
X2Rpc3AgPT0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBhY3Rpb25fcmVjb3JkID0g
cCArIGFyX2Rpc3A7CiAgICAgICAgfQogICAgfQoKICBpZiAoISBzYXdfaGFuZGxlciAmJiAhIHNh
d19jbGVhbnVwKQogICAgcmV0dXJuIF9VUkNfQ09OVElOVUVfVU5XSU5EOwoKICBpZiAoYWN0aW9u
cyAmIDEpCiAgICB7CiAgICAgIGlmICghIHNhd19oYW5kbGVyKQogICAgICAgIHJldHVybiBfVVJD
X0NPTlRJTlVFX1VOV0lORDsKCgogICAgICBpZiAoZXhjZXB0aW9uX2NsYXNzID09IF9fZ2NqX2V4
Y2VwdGlvbl9jbGFzcykKICAgICAgICB7CiAgICAgICAgICB4aC0+aGFuZGxlclN3aXRjaFZhbHVl
ID0gaGFuZGxlcl9zd2l0Y2hfdmFsdWU7CiAgICAgICAgICB4aC0+bGFuZGluZ1BhZCA9IGxhbmRp
bmdfcGFkOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9VUkNfSEFORExFUl9GT1VORDsKICAgIH0K
CiBpbnN0YWxsX2NvbnRleHQ6CiAgX1Vud2luZF9TZXRHUiAoY29udGV4dCwgX19idWlsdGluX2Vo
X3JldHVybl9kYXRhX3JlZ25vICgwKSwKICAgICAgICAgICAgICAgICAoX1Vud2luZF9QdHIpICZ4
aC0+dW53aW5kSGVhZGVyKTsKICBfVW53aW5kX1NldEdSIChjb250ZXh0LCBfX2J1aWx0aW5fZWhf
cmV0dXJuX2RhdGFfcmVnbm8gKDEpLAogICAgICAgICAgICAgICAgIGhhbmRsZXJfc3dpdGNoX3Zh
bHVlKTsKICBfVW53aW5kX1NldElQIChjb250ZXh0LCBsYW5kaW5nX3BhZCk7CiAgcmV0dXJuIF9V
UkNfSU5TVEFMTF9DT05URVhUOwp9Cg==


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2002-04-18 17:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-17  0:06 optimization/6323: GCC 3.1 regression from previous snapshot Gwenole Beauchesne
  -- strict thread matches above, loose matches on Subject: below --
2002-04-18 10:28 mmitchel
2002-04-16 18:55 rth
2002-04-16 18:11 rth
2002-04-16  6:56 Gwenole Beauchesne
2002-04-16  6:26 Gwenole Beauchesne
2002-04-16  6:06 gbeauchesne

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).