public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/3649: Internal compiler error in tsubst, at cp/pt.c:   6376
@ 2001-11-08 11:08 lerdsuwa
  0 siblings, 0 replies; 3+ messages in thread
From: lerdsuwa @ 2001-11-08 11:08 UTC (permalink / raw)
  To: gcc-bugs, gcc-gnats, gcc-prs, morandini, nobody

Synopsis: Internal compiler error in tsubst, at cp/pt.c:   6376

State-Changed-From-To: open->closed
State-Changed-By: lerdsuwa
State-Changed-When: Sat Nov 17 00:10:40 2001
State-Changed-Why:
    Fixed in the main trunk.  Correct error messages are displayed.

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


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

* Re: c++/3649: Internal compiler error in tsubst, at cp/pt.c:   6376
@ 2001-11-08 11:16 lerdsuwa
  0 siblings, 0 replies; 3+ messages in thread
From: lerdsuwa @ 2001-11-08 11:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/3649; it has been noted by GNATS.

From: lerdsuwa@gcc.gnu.org
To: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
  morandini@aero.polimi.it, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/3649: Internal compiler error in tsubst, at cp/pt.c:   6376
Date: 17 Nov 2001 08:10:41 -0000

 Synopsis: Internal compiler error in tsubst, at cp/pt.c:   6376
 
 State-Changed-From-To: open->closed
 State-Changed-By: lerdsuwa
 State-Changed-When: Sat Nov 17 00:10:40 2001
 State-Changed-Why:
     Fixed in the main trunk.  Correct error messages are displayed.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=3649&database=gcc


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

* c++/3649: Internal compiler error in tsubst, at cp/pt.c:   6376
@ 2001-07-11  8:46 morandini
  0 siblings, 0 replies; 3+ messages in thread
From: morandini @ 2001-07-11  8:46 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3649
>Category:       c++
>Synopsis:       Internal compiler error in tsubst, at cp/pt.c:   6376
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Wed Jul 11 08:46:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Marco Morandini
>Release:        gcc version 3.0.1 20010626 (prerelease)
>Organization:
>Environment:
CodeSourcery's online compilation:
Reading specs from /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0.1/specs
    Configured with: ../configure --prefix=/tmp/gcc-20010626-root/usr/local --enable-shared --enable-threads --disable-checking i386-pc-linux-gnu
    Thread model: posix
    gcc version 3.0.1 20010626 (prerelease)
     /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0.1/cc1plus -v -iprefix /usr/local/bin/../lib/gcc-lib/i386-pc-linux-gnu/3.0.1/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=1 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Wall -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ /usr/tmp/@6236.7.cc -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase @6236.7.cc -g -Wall -version -o /tmp/ccoJkJ37.s
    GNU CPP version 3.0.1 20010626 (prerelease) (cpplib) (i386 Linux/ELF)
    GNU C++ version 3.0.1 20010626 (prerelease) (i386-pc-linux-gnu)
            compiled by GNU C version 3.0.1 20010626 (prerelease).
    ignoring nonexistent directory "/usr/local/i386-pc-linux-gnu/include"
    ignoring nonexistent directory "/tmp/gcc-20010626-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0.1/../../../../include/g++-v3"
    ignoring nonexistent directory "/tmp/gcc-20010626-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0.1/../../../../include/g++-v3/i386-pc-linux-gnu"
    ignoring nonexistent directory "/tmp/gcc-20010626-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0.1/../../../../include/g++-v3/backward"
    ignoring nonexistent directory "/tmp/gcc-20010626-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0.1/include"
    ignoring nonexistent directory "/tmp/gcc-20010626-root/usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0.1/../../../../i386-pc-linux-gnu/include"
    #include "..." search starts here:
    #include <...> search starts here:
     /usr/local/include/g++-v3
     /usr/local/include/g++-v3/i386-pc-linux-gnu
     /usr/local/include/g++-v3/backward
     /usr/local/lib/gcc-lib/i386-pc-linux-gnu/3.0.1/include
     /usr/local/include
     /usr/include
    End of search list.
    DepIntegratedConnection.hh: In instantiation of `BaseDepIntegPtField, IndepIntegPtData >':
    Field2.C:60:   instantiated from `InterpolatedDepIntegPtField, FieldGradientInterpolator, IndepIntegPtData >'
    Field2.C:60:   instantiated from here
    DepIntegratedConnection.hh:89: Internal compiler error in tsubst, at cp/pt.c:
       6376

g++ 3.0 on my pc:
Reading specs from /home2/marco/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../configure --prefix=/home2/marco/local
Thread model: single
gcc version 3.0
 /home2/marco/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1plus -fpreprocessed Field2.ii -quiet -dumpbase Field2.ii -g -Wall -version -o /tmp/cc41O62v.s
GNU CPP version 3.0 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0 (i686-pc-linux-gnu)
        compiled by GNU C version 3.0.
DepIntegratedConnection.hh: In instantiation of `BaseDepIntegPtField<Tensor2, SystemContributor<Tensor1>, IndepIntegPtData<Tensor1> >':
Field2.C:60:   instantiated from `InterpolatedDepIntegPtField<Tensor2, Tensor1, SystemContributor<Tensor1>, FieldGradientInterpolator<linear>, IndepIntegPtData<Tensor1> >'
Field2.C:60:   instantiated from here
DepIntegratedConnection.hh:89: Internal compiler error in tsubst, at cp/pt.c:
   6376
>Description:
I'm not sure the code is illegal.
I'll try to reduce the size of the preprocessed file.

The original error message was
Internal compiler error in dbxout_type, at dbxout.c:1635
tsubst, at cp/pt.c: 6376 occurred while trying to reduce
the test case.
>How-To-Repeat:
g++ -c -Wall -g Field2.ii
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="Field2.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Field2.ii"

IyAxNCAiRmllbGQyLkMiCiMgMSAiRGVwSW50ZWdyYXRlZENvbm5lY3Rpb24uaGgiIDEKCgoKIyAx
ICIvaG9tZS9tYXJjby9IbWZlL0hlbE1vL0luY2x1ZGUvR2VvTWF0aExpYi9UZW5zb3IuaGgiIDEK
CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI1MCAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEg
MwojIDI1MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3OCAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDI3OSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDIgMwoKCgoKCgoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE5OSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAz
CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7
CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBp
bnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25n
IGludCByZW07CiAgfSBsbGRpdl90OwojIDgwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGlu
dCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9h
dCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo
cm93ICgpOwoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz
ZSkgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0
b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyAx
MzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv
bmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpfX2V4dGVuc2lvbl9f
CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CiMgMTU3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVm
IHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVz
WzZdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50
ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9j
YWxlX3Q7CiMgMTU4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBp
bnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0
ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0
aHJvdyAoKTsKCgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0
b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9p
bnRlcm5hbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDMzMyAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy
b3cgKCk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFy
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
X191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0
eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50
MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpf
X3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9f
dWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7
CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlw
ZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVm
IGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19y
bGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19p
ZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsK
Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVm
IGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYg
bG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mZF9tYXNr
OwojIDEwMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsK
CgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykp
XTsKCgoKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr
Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg
X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl
ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf
dDsKCgp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2Zm
NjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl
L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAx
IDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJh
bQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0
cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25n
IGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0
aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2No
ZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29w
ZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpf
X3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5
cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0
aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9y
ZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBp
bnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJl
YWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhy
ZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVk
ZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg
X19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0
ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3Ig
X19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsK
fSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7
CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE1MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3Vf
Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1
X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5
cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5
cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0
eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5
cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoK
dHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoK
CgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKdHlw
ZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5
cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNTcgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg
MwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDEyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAyIDMKCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMg
MTcwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVf
aW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
U0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDE5MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2lu
Y2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMiAzCiMgMTkzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0
cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2Yg
KHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDgz
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50
IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyAzOSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVk
ZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBfX3NlbGVjdCAoaW50IF9fbmZk
cywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpf
X2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpf
X3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVv
dXQpIHRocm93ICgpOwojIDg3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBp
bnQgcHNlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9f
d3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3RpbWVvdXQsIGNvbnN0IF9fc2lnc2V0X3QgKl9fc2lnbWFzaykgdGhyb3cgKCk7CgoKCgoKfQoj
IDE5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9z
eXMvc3lzbWFjcm9zLmgiIDEgMwojIDE5OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMK
CgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZz
YmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CgoKCgoKCgp0eXBlZGVm
IF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250
NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM0MCAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lk
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqIGluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2Vl
ZCwgdm9pZCAqIF9fc3RhdGVidWYsIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkICogc2V0c3RhdGUgKHZvaWQgKiBfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoK
CnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpy
cHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRf
ZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJu
IGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQz
Ml90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kb21f
ciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICog
X19yZXN0cmljdCBfX3N0YXRlYnVmLCBzaXplX3QgX19zdGF0ZWxlbiwgc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0c3RhdGVf
ciAodm9pZCAqIF9fcmVzdHJpY3QgX19zdGF0ZWJ1Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJv
dyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUg
ZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5k
NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1
bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3Jh
bmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0
IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsK
ZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93
ICgpOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgeFsz
XTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGM7
CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsKICB9OwoKCgpl
eHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1
ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
ZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
YnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3NlZWQxNnZbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA0NzQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cg
KCk7CgpleHRlcm4gdm9pZCAqIGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUp
IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICogcmVhbGxvYyAodm9pZCAqIF9fcHRyLCBzaXpl
X3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKiBfX3B0cikgdGhy
b3cgKCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCgoj
IDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2Eu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl
L2FsbG9jYS5oIiAyIDMKCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqIGFsbG9jYSAo
c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDQ5MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICogdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9p
ZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChp
bnQgX19zdGF0dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRl
cm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBfX2Fy
ZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBf
X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0
ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25h
bWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNo
YXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3Ry
aW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25h
bWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiB2b2lkIHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDU2NiAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hh
ciAqX19uYW1lKSB0aHJvdyAoKTsKIyA1OTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl
cm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsIGNoYXIg
Kl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCgp0eXBlZGVmIGludCAoKl9f
Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYg
X19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKiBic2VhcmNo
IChfX2NvbnN0IHZvaWQgKiBfX2tleSwgX19jb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCgoKZXh0ZXJu
IHZvaWQgcXNvcnQgKHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXpl
LCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJz
IChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194
KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJu
IGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwg
bG9uZyBpbnQgX19kZW5vbSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9f
bnVtZXIsIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo
YXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hh
ciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCk7CgpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRo
cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAq
X19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQg
Kl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4p
IHRocm93ICgpOwojIDY5NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWJs
ZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFy
ICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93
Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CiMgNzE4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDcyOSAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19y
ZXN0cmljdCBfX29wdGlvbnAsIF9fY29uc3QgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rv
a2VucywgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwojIDczOCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tl
eSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNu
YW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgp9CiMgOSAiL2hvbWUvbWFy
Y28vSG1mZS9IZWxNby9JbmNsdWRlL0dlb01hdGhMaWIvVGVuc29yLmhoIiAyCiMgMSAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtLmgiIDEgMwojIDMxICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0uaCIgMwojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMKIyAzOCAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDMKCiMg
MSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMu
aCIgMSAzCiMgMzcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAzOCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQw
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIg
MiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJl
YW0uaCIgMSAzCiMgMzggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9vc3RyZWFtLmgiIDMKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2lvcy5oIiAxIDMKIyAzOCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2lvcy5oIiAzCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgMzggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMwoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAz
CiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgi
IDEgMwojIDM4ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdm
d2QuaCIgMwoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8
PiBjbGFzcyBjaGFyX3RyYWl0czxjaGFyPjsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9j
PgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9B
bGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCgp9CiMgNDEgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCiMgMSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAzOCAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAzCgojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDEg
MwojIDM1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytpby5oIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2NzdGRpbyIgMSAzCiMgMzEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9jc3Rk
aW8iIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
ZGlvLmgiIDEgMwojIDM3ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0ZGlvLmgiIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzggIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgMSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL2hvbWUyL21hcmNvL2xvY2FsL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0
cmRpZmZfdDsKIyAzOSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1
c2luZyA6OnNpemVfdDsKfQojIDM5ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDQxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAz
CiMgMjcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoK
IyAxICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK
CgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9f
YnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDExMCAiL2hvbWUyL21hcmNvL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5
cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAzOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgi
IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA1
NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAz
CiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMK
CgoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi9ob21lMi9tYXJjby9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm
IHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAz
CiMgMzUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwp0eXBlZGVmIGludCBfR19pbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA0OCAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMiAzCiMgMTU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1
bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlw
ZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBf
SU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9z
OwojIDE4NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAg
aW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2Vu
ZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIq
IF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jh
c2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAq
X0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJr
ZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87
CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hv
cnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hv
cnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoK
CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y
XzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpl
eHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDI2MiAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICog
X19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3MSAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqIF9f
Y29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAyODAgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqIF9fY29va2ll
LCBfX29mZl90IF9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2
b2lkICogX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVu
Y3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0
eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9f
Y2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9f
aW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4g
KnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNf
dDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNf
dDsKCgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwog
IGNvbnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVfaW9f
ZnVuY3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4g
aW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAq
LCBpbnQpIHRocm93ICgpOwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGlu
dCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRj
IChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2Yg
KF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklM
RSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxF
ICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAo
KTsKIyAzNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYg
KF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fZ251Y192
YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fdmZwcmlu
dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2dudWNf
dmFfbGlzdCkgdGhyb3cgKCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAq
LCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9f
RklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19z
ZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93
ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93
ICgpOwoKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9fb2Zm
X3QgZnBvc190OwoKCgoKdHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMK
IyAxMTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpl
eHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGlu
dCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cg
KCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAo
KTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9f
Y29uc3QgY2hhciAqX19wZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBGSUxF
ICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwojIDIwMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j
b29raWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lvX2Z1
bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Blbl9t
ZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJpY3Qg
X19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0bGlu
ZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3Ms
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNu
cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoK
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4
dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVu
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn
KSB0aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18s
IDMsIDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9f
cHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2FyZykg
dGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIs
IDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3By
aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkK
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4
dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt
dCwgLi4uKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50
Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCgog
ICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0
ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBn
ZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hh
cl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhy
b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2Ms
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChp
bnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBf
X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIg
Kl9fcykgdGhyb3cgKCk7CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19z
c2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmlj
dCBfX2xpbmVwdHIsIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zc2l6ZV90IGdl
dGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f
biwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg
ZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90
IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0
IF9fcHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxv
bmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0
ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy
biBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNl
KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZw
b3NfdCAqX19yZXN0cmljdCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmc2V0cG9zIChG
SUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MjYgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFt
LCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0
X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9z
NjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9z
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25z
dCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtd
OwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9z
eXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5k
LCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIg
Kl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhy
b3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChz
dHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRm
IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKIyA2MTIg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CiMgNjM2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp9CiMgNDIgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgODYgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6
Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVy
cm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9z
OwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAg
dXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcg
OjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpm
c2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRj
OwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAg
dXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2lu
ZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpy
ZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZi
dWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmls
ZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRm
OwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTQyICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKbmFtZXNwYWNl
IF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNp
bmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251
X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9j
eHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzMiAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMiAzCiMgMzYgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIg
MwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMKIyAz
NyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvYysraW8uaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyAxMDIgIi9ob21lMi9tYXJjby9sb2Nh
bC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0
aHItc2luZ2xlLmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLXNpbmdsZS5oIiAzCnR5cGVkZWYgaW50IF9fZ3Ro
cmVhZF9tdXRleF90OwojIDIxMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1zaW5nbGUuaCIgMwpzdGF0aWMgaW5saW5lIGludApf
X2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBp
bnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJu
IDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJl
YWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl
YWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9CiMg
MTAzICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9ndGhyLmgiIDIgMwojIDM4ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0
eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgoK
CiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0
ZXhfdCBfX2NfbG9jazsKCgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsKCgogIHN0cnVj
dCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9
IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
c2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3di
YXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0g
MHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAw
ODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAw
eDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUg
PSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVu
YyA9IDB4MjA7CiAgfTsKfQojIDQwICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9mcG9zLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jd2NoYXIuaCIgMSAzCiMgMzcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAx
IDMKIyAzOSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hh
ci5oIiAyIDMKIyA0MiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDI3ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAx
IDMKIyAzMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBjb3VudDsKICB3aW50X3QgdmFsdWU7
Cn0gbWJzdGF0ZV90OwojIDc3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpzdHJ1Y3QgdG07CgoK
ZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpl
eHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAq
d2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2NzY21w
IChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hh
cl90ICpfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgd2NzY2FzZWNt
cCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z
dCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL3hsb2NhbGUuaCIgMSAzCiMgMTEzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgpleHRl
cm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No
YXJfdCAqX19zMiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3dj
c25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My
LCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKIyAxMzYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiBpbnQgX193Y3Njb2xsX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3Qg
Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2NoYXJfdCAq
X19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90
ICpfX3djcywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hy
IChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRl
cm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJf
dCAqX19yZWplY3QpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3
Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7CgpleHRl
cm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh
cl90ICpfX2FjY2VwdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25z
dCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKSB0aHJvdyAo
KTsKIyAxNzQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k
ZWxpbSwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNp
emVfdCBfX3djc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpOwpleHRlcm4gc2l6
ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6
ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3
Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNw
eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUg
KHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19j
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2Mp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3ApIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2No
YXJfdCBfX3djLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVy
biBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf
X24sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qg
bWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBtYnN0YXRl
X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwg
X19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3Qg
Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMg
KGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0
LCBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsIHNpemVfdCBf
X2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBz
aXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sIG1ic3RhdGVf
dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAzCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdj
c3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
aW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRl
bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCgoKX19leHRl
bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz
ZSkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg
aW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDM1NSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAz
NTYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9s
X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz
ZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoK
CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp
IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVy
bmFsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBp
bnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5h
bCAoX19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKiogX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoK
X19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9f
Y29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwg
KF9fY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqIF9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA0ODIgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9f
ZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90
ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVf
dCBfX24pIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDQzICIv
aG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwoj
IDU3ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyA0MSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK
ewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHByaXZh
dGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKCiAg
ICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9N
X3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0
KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRl
X3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0
KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01f
b2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBf
TV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0
b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAg
ICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAgICAgICAgcmV0dXJu
IF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFtb2ZmIF9fb2Zm
KQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAtPSBfX29mZjsK
ICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0o
Y29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5f
TV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3Bvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3Ry
ZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAg
ICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29m
ZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCgoKfQoj
IDQyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgi
IDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhj
ZXB0LmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9m
dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4
Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAg
X190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9j
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Ro
cm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFu
Z2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFy
KiBfX3MpOwp9CiMgNDMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3Nmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUg
X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
ICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlw
ZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+
IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFt
PGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1
ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVm
IGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19m
aWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwojIDEyOSAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCn0KIyA0MCAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl
IHN0ZAp7CiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRo
cm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVhbCBj
b25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhjZXB0
aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkg
dGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07Cgog
IHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQgKCp1
bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRl
KHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0
ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0
aHJvdygpOwp9Cgp9CiMgNDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pb3MuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgMzggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzcgIi9ob21lMi9tYXJjby9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKIyAxICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RyaW5n
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKiBtZW1jcHkg
KHZvaWQgKiBfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogbWVtbW92ZSAodm9pZCAq
IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gdm9pZCAqIG1lbWNjcHkgKHZvaWQgKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9f
c3JjLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqIG1l
bXNldCAodm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIG1lbWNociAoX19jb25zdCB2b2lk
ICogX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICog
cmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKiBfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIg
Kl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc3Ry
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgc3Ry
eGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2Nh
bGUuaCIgMSAzCiMgMTAwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQg
X19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xv
Y2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAq
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNp
emVfdCBfX24pIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVy
biBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCmV4
dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVqZWN0KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAo
X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpIHRocm93ICgpOwoKZXh0
ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj
ZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlz
dGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpf
X3N0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25l
ZWRsZSkgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpf
X2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLCBjaGFyICoq
X19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19y
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s
IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDE5NCAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzCmV4dGVybiB2b2lkICogbWVtbWVtIChfX2NvbnN0IHZvaWQgKiBfX2hh
eXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwgX19jb25zdCB2b2lkICogX19uZWVkbGUsIHNp
emVfdCBfX25lZWRsZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIF9fbWVtcGNweSAo
dm9pZCAqIF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogbWVtcGNweSAodm9pZCAqIF9f
cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nLCBzaXplX3QgX19tYXhsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVy
cm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9y
IChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwpl
eHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90
IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKiBfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lk
ICogX19zcmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2
b2lkIGJ6ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGJjbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9faSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBp
bnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKSB0aHJvdyAoKQogICAgIF9fYXR0
cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzdHJj
YXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fc3RyY2Fz
ZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJp
Y3QgX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg
Y2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2ln
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIGNo
YXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJv
dyAoKTsKIyAzNTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwojIDY2ICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6
OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpz
dHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3Ry
Y29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3Ry
Y3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNl
dDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNo
cjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9f
bikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBf
X24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciog
X19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNo
YXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9f
YnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoK
ICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwg
aW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNo
YXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAg
c3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGlu
X3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQojIDQwICIv
aG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMK
IyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwoj
IDQxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0
cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7Cgog
ICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt
cG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2ln
bihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0g
X19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0
aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5
cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAw
OyBfX2kgPCBfX247ICsrX19pKQogICAgICAgICAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19p
XSkpCiAgICAgICAgICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7
CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVu
Z3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7CiAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX3AgPSBfX3M7CiAgICAgICAgd2hpbGUgKCpfX3ApICsrX19wOwogICAgICAgIHJldHVybiAo
X19wIC0gX19zKTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBf
X2EpCiAgICAgIHsKICAgICAgICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXpl
X3QoX19wIC0gX19zKSA8IF9fbjsgKytfX3ApCiAgICAgICAgICBpZiAoKl9fcCA9PSBfX2EpIHJl
dHVybiBfX3A7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIs
IF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg
ICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBz
aXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2ln
bihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgewogICAg
ICAgIGZvciAoY2hhcl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApCiAg
ICAgICAgICBhc3NpZ24oKl9fcCwgX19hKTsKICAgICAgICByZXR1cm4gX19zOwogICAgICB9Cgog
ICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYg
X19jKQogICAgICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRf
dHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBp
bnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEg
PT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBu
b3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9f
YywgZW9mKCkpID8gaW50X3R5cGUoMCkgOiBfX2M7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8Pgog
ICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBv
cyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24o
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAg
ICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
cl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGlj
IGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl
KiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19u
KTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBf
X3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hh
cl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25z
dCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90
eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoK
ICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90
IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3Mx
LCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFy
X3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNp
emVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJf
dHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUK
ICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg
ICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
bnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAg
IHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlw
ZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGlu
dF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQog
IH07CiMgMjY0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3Ry
YWl0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAg
ICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0K
CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4g
X1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsKfQojIDQyICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzCiMgNDMgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDM4ICIv
aG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwoKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgMzYgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xv
Y2FsZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBfX2NfbG9jYWxlOwp9CiMg
NDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy
IDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0
cy5oIiAxIDMKIyAzOCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NsaW1pdHMuaCIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTEgIi9ob21lMi9tYXJjby9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIg
MwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMK
IyAxMzAgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgx
X2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDI3ICIv
dXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9s
aW1pdHMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAx
MjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVk
ZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAx
IDMKIyAzNSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2lu
Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMzkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg
MiAzCiMgMTMxICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi9ob21lMi9tYXJjby9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMg
MTIgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMzkgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAxIDMKIyAzOCAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAzCgojIDEgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyA0MCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3N0cmluZy5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgNDIgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDEgMwojIDMxICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMwojIDEgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr
K2NvbmZpZy5oIiAxIDMKIyAzMiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDMzICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzNCAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDEgMwojIDQwICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnN0cnVjdCBpbnB1
dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg
Zm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1
Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90
YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgaW5wdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0
eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlw
ZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ2F0ZWdvcnksIGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgY2xhc3MgX1BvaW50ZXIg
PSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0IGl0ZXJhdG9yIHsKICB0eXBl
ZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9Qb2ludGVy
IHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlwZW5h
bWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBw
b2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29u
c3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7Cn07CiMgMTQw
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFz
ZV90eXBlcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBf
SXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRv
cl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0
ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5
cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9f
aSk7IH0KCn0KIyAzNSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2l0ZXJhdG9yLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDQwICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAx
IDMKIyAzNCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9j
aGVjay5oIiAzCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNiAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA0MSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3Is
IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlz
dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewoKICBfX2Rpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsr
X19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpCnsKCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX0NhdGVnb3J5OwogIHJldHVybiBf
X2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lu
cHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogIGlmIChfX24gPiAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3
aGlsZSAoX19uKyspIC0tX19pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNz
SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIF9f
aSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBf
X24pCnsKCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoK
fQojIDM2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0
b3IuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u
dGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhw
bGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigm
X194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShj
b25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250
YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFja19p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9
CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr
KGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpp
bmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4o
X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0
eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlw
ZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9D
b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZh
bHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVy
biBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u
dGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsK
cHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91
dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9p
bnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRh
aW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICA6IGNvbnRh
aW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+Jgog
IG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVl
KSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0
ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUKaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKewog
IHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOwogIHJldHVybiBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVu
Y2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PgpjbGFzcyBy
ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+IF9TZWxm
Owpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAg
dHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNl
OwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVy
c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkKICAg
IDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3Qg
eyByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190
bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq
KCkpOyB9CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0
b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3Bl
cmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAg
ICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KAog
ICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl
ZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5i
YXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KAog
ICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl
ZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194
ID09IF9feSk7Cn0KIyAxOTMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVy
c2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRl
Z29yeQogICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAg
ICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2Vf
aXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBf
X3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9f
eCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICBy
ZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6
IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfSXRl
cmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVy
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYg
b3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl
bGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJl
bnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytj
dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK
ICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICBy
ZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZl
cmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0
dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJl
bmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1
cm4gKigqdGhpcyArIF9fbik7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJh
c2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy
biAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkg
ewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJh
dG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4Kb3BlcmF0b3Ir
KHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9f
biwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ2hhclQgPSBjaGFyLCBjbGFz
cyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgIGNsYXNzIF9EaXN0ID0g
cHRyZGlmZl90PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICB0eXBlZGVmIGlu
cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CgogIGlzdHJlYW1faXRl
cmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRv
cihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KCiAg
cmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CiAgcG9pbnRl
ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgaXN0cmVh
bV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgaXN0cmVhbV9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXN0cmVhbV9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KCiAgYm9vbCBfTV9lcXVhbChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0CiAg
ICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAmJiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9
PSBfX3guX01fc3RyZWFtKTsgfQoKcHJpdmF0ZToKICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsK
ICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9vazsKCiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01f
b2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9N
X29rKSB7CiAgICAgICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAgICAgIF9NX29rID0gKl9NX3N0
cmVhbSA/IHRydWUgOiBmYWxzZTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgppbmxpbmUgYm9vbApvcGVy
YXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0
PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9U
cmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9lcXVhbChfX3kpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0
PgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hh
clQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0
b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuICFfX3guX01f
ZXF1YWwoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ2hh
clQgPSBjaGFyLCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CmNsYXNzIG9z
dHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIDogX01f
c3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1f
dHlwZSYgX19zLCBjb25zdCBfQ2hhclQqIF9fYykKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9z
dHJpbmcoX19jKSB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U
cCYgX192YWx1ZSkgewogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYgKF9NX3N0cmlu
ZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJl
YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFt
X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1f
aXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CnByaXZhdGU6
CiAgb3N0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7Cn07
CiMgNDE3ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0
b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAg
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVj
dGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0
eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVy
IHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVm
ZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg
eyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6
IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGlu
ZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRh
aW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5j
ZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIK
ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsg
fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYK
ICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxf
aXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZl
cmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBu
b3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg
X19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QK
ICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3Jt
YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u
KQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0
b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJl
bmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u
c3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0
ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D
b250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMu
YmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg
dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3Bl
cmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNl
KCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9y
Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGlu
ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoK
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAh
KF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgMzcgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MyAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMK
IyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5Lmgi
IDEgMwojIDE5ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVt
b3J5LmgiIDMKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDEgMwojIDM1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNiAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMK
IyAzNCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0
IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5
cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vj
b25kKCkge30KCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJz
dChfX2EpLCBzZWNvbmQoX19iKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+
CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNl
Y29uZChfX3Auc2Vjb25kKSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBf
X3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8
CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5z
ZWNvbmQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1
cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVDEsIGNsYXNzIF9UMj4KCgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBf
X3gsIF9UMiBfX3kpCgoKCnsKICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9
CiMgMzggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAyIDMKCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5
cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy90eXBlX3RyYWl0cy5oIiAzCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAyMSAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMK
dGVtcGxhdGUgPGJvb2wgX1RydXRoPiBzdHJ1Y3QgX0Jvb2wge307CnR5cGVkZWYgX0Jvb2w8dHJ1
ZT4gX190cnVlX3R5cGU7CnR5cGVkZWYgX0Jvb2w8ZmFsc2U+IF9fZmFsc2VfdHlwZTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDgxICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19m
YWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19m
YWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8
Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19m
YWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJv
b2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf
SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBzdGQgewogICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9
OwoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1
Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNDEg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy
IDMKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJp
bmcuaCIgMSAzCiMgNDMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0NCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM3ICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDM4ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGxpYi5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDEgMwojIDQyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGxpYi5oIiAyIDMKIyA3MyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVz
aW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6
YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwog
IHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2lu
ZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFi
czsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1
c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNp
bmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6
c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5
c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9u
ZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QK
ICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMg
MTI1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o
IiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9F
eGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9f
eCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBs
b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRp
dl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsg
X19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0K
CiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQog
IHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19k
OyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNp
bmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVf
Y3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6Omxs
YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAg
dXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA0NSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQ2ICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzQgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVk
ZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgMzUgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9uZXciIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9leGNl
cHRpb24iIDEgMwojIDM2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAy
IDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBiYWRfYWxsb2MgOiBw
dWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9
CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93
X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQg
KCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRs
ZXIpOwp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRf
YWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk
X2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6
ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1td
KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0
b3IgZGVsZXRlKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w
ZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoK
CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJv
dygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNp
emVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfQojIDQ3ICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoj
IDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIg
MSAzCiMgNDkgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyA1MCAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwoj
IDUxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDEgMwojIDUyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyA1MyAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoK
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFz
cyBfVHA+CmlubGluZSB2b2lkIF9faXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2Fy
ZEl0ZXIyIF9fYiwgX1RwKikKewogIF9UcCBfX3RtcCA9ICpfX2E7CiAgKl9fYSA9ICpfX2I7CiAg
Kl9fYiA9IF9fdG1wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zv
cndhcmRJdGVyMj4KaW5saW5lIHZvaWQgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9y
d2FyZEl0ZXIyIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgX19pdGVyX3N3YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlw
ZShfX2EpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9f
YSwgX1RwJiBfX2IpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgX1RwIF9fdG1wID0gX19hOwogIF9fYSA9IF9fYjsKICBfX2Ig
PSBfX3RtcDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYg
bWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2Ig
PCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0
IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CgogIGlmIChfX2Nv
bXAoX19iLCBfX2EpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CgogIGlmIChfX2NvbXAoX19hLCBf
X2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9CiMgMTM3ICIvaG9tZTIvbWFyY28vbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRw
dXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091
dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19y
ZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1
cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4
MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJl
dHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1
dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp
cnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1Rw
KiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90
eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBf
VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1
eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlw
ZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
CiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9P
dXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0K
CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxp
bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlf
bmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFs
IF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFz
ZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHR5cGVk
ZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19O
b3JtYWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19O
b3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRl
cj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9J
bnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2Fy
ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jl
c3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZv
ciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAg
Ki0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
MiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNw
YXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJ
dGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2Nv
cHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNl
KikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2Fy
ZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHko
Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewog
ICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShf
X3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4g
X19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2Nv
cHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBz
dGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9U
cCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwg
X1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIg
X19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVz
dWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAg
ICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVu
YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRw
dXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9f
dHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlw
ZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRl
cmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsK
ICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
fQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9f
Y29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1h
bF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0
LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+
CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0
dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ
Mj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBf
QkkyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICBy
ZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBf
X2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3Ig
KCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRl
ciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
QUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRl
ciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwK
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1
cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+
Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIg
X19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpp
bmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1
dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3Qg
PSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWdu
ZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7
CiAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZv
aWQgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVkIGNoYXIgX190bXAg
PSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1w
KSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwg
Y2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1wID0gX19jOwogIG1l
bXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAt
IF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1bnNpZ25lZCBjaGFy
KiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJz
dCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9TaXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0
LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFy
JiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9f
Zmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxf
bihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKewogIGZpbGwoX19m
aXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lu
cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsK
ICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVy
Mj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVy
MSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAr
K19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEs
IF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBf
X2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCEoKl9f
Zmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg
X0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3Qy
KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0
dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJz
dDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwog
ICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICBy
ZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFy
ZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19m
aXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21w
YXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xh
c3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0
MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4o
X19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6
IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUo
Y29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBf
X2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVk
IGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGlj
YWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAg
ICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJu
IDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNl
IHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29t
cGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewog
IGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRy
ZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQg
PSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1
cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19s
ZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGlu
ZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3Qx
LCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDIxICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyAyOCAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAz
NCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIg
MwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5l
cy5oIiAxIDMKIyAzNSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4
Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlk
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291
dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDI5
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAz
CiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYu
aCIgMSAzCiMgMzAgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGxvYy5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0ZGxpYi5oIiAxIDMKIyAzMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDMyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg
MiAzCiMgNTggIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4g
dm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNo
YXIgKl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9u
KSB0aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRl
cm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIg
Kl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSB0
aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCn0KIyAzOCAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAz
CiMgMzMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5o
IiAyIDMKCgoKCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF90aHJlYWRzLmgiIDEgMwojIDMzICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdGhyZWFkcy5oIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyAzNCAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMiAzCiMgNTEgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CiMgNjYgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF90aHJlYWRzLmgiIDMKc3RydWN0IF9SZWZjb3VudF9CYXNlCnsKCgoKCiAgdHlwZWRlZiBzaXpl
X3QgX1JDX3Q7CgoKCiAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgoKCiAgX19ndGhy
ZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7CiAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19u
KSA6IF9NX3JlZl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3Rt
cCA9IDA7CiAgICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KIyAxMTIg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMK
ICB2b2lkIF9NX2luY3IoKSB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50
X2xvY2spOwogICAgKytfTV9yZWZfY291bnQ7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZf
TV9yZWZfY291bnRfbG9jayk7CiAgfQogIF9SQ190IF9NX2RlY3IoKSB7CiAgICBfX2d0aHJlYWRf
bXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgdm9sYXRpbGUgX1JDX3QgX190bXAg
PSAtLV9NX3JlZl9jb3VudDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3Vu
dF9sb2NrKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiMgMTYzICIvaG9tZTIvbWFyY28vbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCn07CiMgMjg0ICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnRlbXBsYXRlIDxp
bnQgX19pbnN0PgpzdHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsKICBlbnVtIHsgX19sb3dfbWF4ID0g
MzAsIF9faGlnaF9tYXggPSAxMDAwIH07CgoKICBzdGF0aWMgdW5zaWduZWQgX19tYXg7CiAgc3Rh
dGljIHVuc2lnbmVkIF9fbGFzdDsKfTsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBf
U1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6
X19sb3dfbWF4OwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3Bp
bjxfX2luc3Q+OjpfX2xhc3QgPSAwOwojIDMxMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCnsKCgoK
CgoKCiAgX19ndGhyZWFkX211dGV4X3QgX01fbG9jazsKICB2b2lkIF9NX2luaXRpYWxpemUoKSB7
CiMgMzQyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFk
cy5oIiAzCiAgfQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211
dGV4X2xvY2soJl9NX2xvY2spOwogIH0KICB2b2lkIF9NX3JlbGVhc2VfbG9jaygpIHsKCgoKICAg
IF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogIH0KIyA0NTMgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKfTsKIyA0OTIgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKc3Ry
dWN0IF9TVExfYXV0b19sb2NrCnsKICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogIF9TVExf
YXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAg
eyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CiAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9s
b2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9Cgpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IF9TVExfYXV0b19sb2NrJik7CiAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2sm
KTsKfTsKCn0KIyAzOSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsbG9jLmgiIDIgMwojIDY4ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+
CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lk
KiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZv
aWQqLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
KSgpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAg
ICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9f
cmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJlZShf
X3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBz
aXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19u
ZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2Mo
X19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCAo
KiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQgKCog
X19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+Ojpf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4K
dm9pZCoKX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXpl
X3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBf
X3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9f
bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hh
bmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21hbGxv
Y19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYg
KF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Mo
dm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIp
KCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxs
b2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09
IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAg
ICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhf
X3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9
Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBs
YXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGlj
OgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9
PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsg
fQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9B
bGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0
ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxs
b2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChf
VHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxv
YyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNo
YXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3Qq
KV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAg
fQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAg
ICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9p
ZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIioo
c2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAxOTAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwog
ICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAg
fQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwg
c2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChp
bnQpIF9TX2V4dHJhOwogICAgKCh2b2lkKSAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9z
eikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oi
LCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAx
OTcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hh
ciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBf
U19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiArIChp
bnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgcmV0
dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxib29s
IHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUgewoKcHJp
dmF0ZToKCgogIGVudW0ge19BTElHTiA9IDh9OwogIGVudW0ge19NQVhfQllURVMgPSAxMjh9Owog
IGVudW0ge19ORlJFRUxJU1RTID0gMTZ9OwogIHN0YXRpYyBzaXplX3QKICBfU19yb3VuZF91cChz
aXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdO
LTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgdW5pb24gX09iaiB7CiAgICAgICAg
dW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0
YVsxXTsKICB9OwoKICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W107CgogIHN0
YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsKICAgICAgICBy
ZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEp
OwogIH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKICBzdGF0aWMg
Y2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgogIHN0
YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBz
dGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBf
U19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCiAgICBjbGFzcyBfTG9jazsKICAgIGZyaWVuZCBj
bGFzcyBfTG9jazsKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAg
IF9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX2FjcXVp
cmVfbG9jaygpOyB9OyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nf
bm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQogICAgfTsKCnB1Ymxp
YzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9f
cmV0ID0gMDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICBfX3Jl
dCA9IG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAgICBf
T2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsg
X1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7
CgogICAgICBfT2JqKiBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgaWYgKF9fcmVz
dWx0ID09IDApCiAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAg
ICAgIGVsc2UgewogICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVf
bGlzdF9saW5rOwogICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgICBy
ZXR1cm4gX19yZXQ7CiAgfTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBz
aXplX3QgX19uKQogIHsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICBt
YWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgZWxzZSB7CiAgICAgIF9PYmoq
IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19m
cmVlbGlzdF9pbmRleChfX24pOwogICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAg
ICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5r
ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CgogICAgfQog
IH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3os
IHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PHRydWUsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwg
MD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVl
Owp9Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCnRlbXBsYXRl
IDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX3RvdGFsX2J5
dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRf
ZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5
dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBl
bHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQp
KF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf
X25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFy
dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0g
ZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgIDIgKiBfX3Rv
dGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICBpZiAo
X19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVl
X2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz
dF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVl
KSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9f
bXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9T
X3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAo
MCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAg
IF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgX09iaiogX19wOwoK
CgogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICAgICBfX2kgPD0g
KHNpemVfdCkgX01BWF9CWVRFUzsKICAgICAgICAgICAgICAgICBfX2kgKz0gKHNpemVfdCkgX0FM
SUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9T
X2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xp
c3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAgICAq
X19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAg
ICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgX1Nf
ZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJldHVy
bihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9CiAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAgX1Nf
c3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0
KTsKCgoKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0Owog
ICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAg
ICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0KfQoKCgoK
CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCnsK
ICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2Mo
X19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgIF9P
YmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9v
Ymo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsK
ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19u
KTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVlX2xp
c3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChfX2kg
PSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAg
ICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAg
IGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBf
TV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRf
b2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUg
PGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0
aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdf
c3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29weV9zejsKCiAgICBpZiAo
X19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01B
WF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgIH0K
ICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSBy
ZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgX19jb3B5
X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19zejsKICAgIG1lbWNw
eShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6
KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUgPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICAgICAg
PSB7IDAgfTsKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVl
ID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoK
dGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBs
YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9ORlJFRUxJU1RTCl0gPSB7
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsKIyA1MjYg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxs
b2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZm
X3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29u
c3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRl
ZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9j
YXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxsb2Nh
dG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g
YWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2NhdG9y
KCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyBy
ZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194
KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19u
LCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9U
cCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAg
ICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBf
X24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoK
ICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXplX3Qo
LTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0
IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2lu
dGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8
dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRy
ZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9j
YXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFs
bG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBj
b25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2MDIgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2MgX191
bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAg
dHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVm
IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0
aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQog
ICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBf
QWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVy
bHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFk
ZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50
ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoK
ICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0
dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxs
b2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lk
IGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWlu
Z19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXpl
b2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3Zh
bCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7
IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9j
YXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0
eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5
cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2Nh
dG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2Fs
bG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdf
YWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxf
VHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0
b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9j
ICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUgPGludCBpbnN0Pgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+
JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp
bnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1
Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxv
YzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRv
cjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFsbG9jYXRv
cjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19p
bnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4g
PiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3RhdGlj
IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxv
YzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAg
ICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9j
X3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVn
X2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg
ZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0cnVj
dCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9U
cDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j
ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+
ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9j
YXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVn
X2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg
ZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKfQojIDIyICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAz
CiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1
Y3QuaCIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDEgMwoj
IDM1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1
ZSkgewpuZXcgKCh2b2lkKikgX19wKSBfVDEoX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VDE+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBuZXcgKCh2b2lkKikgX19w
KSBfVDEoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX1Rw
KiBfX3BvaW50ZXIpIHsKICBfX3BvaW50ZXItPn5fVHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CnZvaWQKX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYqX19maXJzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lfYXV4
KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19k
ZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs
IF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ryb3lf
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9EZXN0cm95KF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfX2Rlc3Ryb3koX19m
aXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgppbmxpbmUgdm9pZCBfRGVz
dHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGludCosIGludCopIHt9
CmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcqLCBsb25nKikge30KaW5saW5lIHZvaWQgX0Rlc3Ry
b3koZmxvYXQqLCBmbG9hdCopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGRvdWJsZSosIGRvdWJs
ZSopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSog
X19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBfQ29uc3RydWN0KF9fcCwgX192YWx1ZSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkgewog
IF9Db25zdHJ1Y3QoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVz
dHJveShfVHAqIF9fcG9pbnRlcikgewogIF9EZXN0cm95KF9fcG9pbnRlcik7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfRGVzdHJveShfX2Zp
cnN0LCBfX2xhc3QpOwp9Cgp9CiMgMjMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgMjQgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMg
MzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgi
IDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0cmRp
ZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsKICBp
ZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9fbGVu
ID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBf
VHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwog
ICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190
bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJk
aWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxf
VHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgewog
IHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVt
cG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVt
cG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2
b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9y
YXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJk
aWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZl
cigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7Cgog
ICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAg
ICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVu
ID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihf
VHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89
IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9f
dHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWws
IF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9s
ZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
X01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01f
b3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQogIF9U
cCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVm
ZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsK
CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAgICBf
TV9sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAg
IF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9p
bml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCgu
Li4pIHsgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJvdzsg
fTsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBf
TV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6Cgog
IF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgX1RwCiAgICAgICAgICAgICAgICAg
ICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5
cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1YmxpYyBfVGVtcG9yYXJ5
X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9UZW1w
b3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19sYXN0KSB7fQog
IH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0KIyAyNSAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNCAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg
MwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5n
LmgiIDEgMwojIDM1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dW5pbml0aWFsaXplZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191
bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBjb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3Ry
dWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4u
KSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93OyB9Owp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwg
X1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojppc19QT0RfdHlw
ZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgogIHVuaW5pdGlhbGl6ZWRf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7Cn0KCmlubGluZSBjaGFyKiB1bmluaXRpYWxp
emVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jl
c3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCoKdW5pbml0aWFsaXplZF9jb3B5KGNv
bnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwg
c2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg
KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ
dGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19j
b3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgX0ZvcndhcmRJdGVyIF9f
Y3VyID0gX19yZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19jb3VudCA+IDAgOyAtLV9fY291
bnQsICsrX19maXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJz
dCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9f
Y3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93
OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBj
bGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2Fy
ZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsK
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4g
cGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAgICAgICAgICAgICAgICBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRl
cj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291
bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVy
biBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3
YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1bmluaXRpYWxp
emVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6
ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxp
emVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAg
ZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19m
aXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAg
IF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9f
Zmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlw
ZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3VuaW5p
dGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7Cgp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVuaW5p
dGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3QsIF9f
bGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIK
X191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl
KQp7CiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7
CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX24g
PiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAg
cmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIp
OyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUs
IGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194
LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9E
X3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJz
dCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKdW5pbml0aWFsaXpl
ZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gp
CnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQojIDIzMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9y
d2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkgewogICAgcmV0
dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KICBj
YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4K
aW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQs
IF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQs
IF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2Nv
cHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9Gb3J3
YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0Miwg
X194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOyB0aHJv
dzsgfTsKfQoKfQojIDI2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfbWVtb3J5LmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBz
dGQKewoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3Mg
cmF3X3N0b3JhZ2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBfTV9p
dGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsK
CiAgZXhwbGljaXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDog
X01faXRlcihfX3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsgcmV0
dXJuICp0aGlzOyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBfVHAm
IF9fZWxlbWVudCkgewogICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwg
X1RwPiYgb3BlcmF0b3IrKygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisr
KGludCkgewogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBf
X3RtcCA9ICp0aGlzOwogICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCgp9
CiMgMjcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnku
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiB0ZW1wbGF0ZTxjbGFzcyBfVHAxPiBzdHJ1Y3QgYXV0
b19wdHJfcmVmIHsKICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6
IF9NX3B0cihfX3ApIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBhdXRvX3B0ciB7
CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgZWxlbWVudF90
eXBlOwoKICBleHBsaWNpdCBhdXRvX3B0cihfVHAqIF9fcCA9IDApIHRocm93KCkgOiBfTV9wdHIo
X19wKSB7fQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJl
bGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1dG9fcHRyPF9U
cDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgogIGF1dG9f
cHRyJiBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKSB7CiAgICByZXNldChfX2EucmVs
ZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgog
IGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKSB7CiAgICBy
ZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoKICB+YXV0b19w
dHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB0aHJvdygp
IHsKICAgIHJldHVybiAqX01fcHRyOwogIH0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJv
dygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3coKSB7
CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygpIHsKICAgIF9U
cCogX190bXAgPSBfTV9wdHI7CiAgICBfTV9wdHIgPSAwOwogICAgcmV0dXJuIF9fdG1wOwogIH0K
ICB2b2lkIHJlc2V0KF9UcCogX19wID0gMCkgdGhyb3coKSB7CiAgICBpZiAoX19wICE9IF9NX3B0
cikgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX3A7CiAgICB9CiAgfQoK
CgoKCnB1YmxpYzoKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3coKQog
ICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9f
cHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsKICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhp
cy0+Z2V0KCkpIHsKICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0gX19yZWYuX01f
cHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+
IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgIHsgcmV0dXJuIGF1dG9f
cHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g
b3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cjxf
VHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cn07Cgp9CiMgNDQgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNDUgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0
NiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAy
IDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJp
bmcuaCIgMSAzCiMgMzggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jh
c2ljX3N0cmluZy5oIiAzCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5Lmgi
IDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQK
X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxl
IF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29y
ZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgog
ICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKF9fcmVzdWx0KQogICAgICAgICAgICAgICAg
ICAgICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAg
ICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQK
X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9t
aWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9j
azsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwg
Im0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIGNoYXIKX19hdHRyaWJ1
dGVfXyAoKF9fdW51c2VkX18pKQpfX2NvbXBhcmVfYW5kX3N3YXAgKHZvbGF0aWxlIGxvbmcqIF9f
cCwgbG9uZyBfX29sZHZhbCwgbG9uZyBfX25ld3ZhbCkKewogIGNoYXIgX19yZXQ7CiAgbG9uZyBf
X3JlYWR2YWw7CgogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgY21weGNoZ2wgJTMsICUx
OyBzZXRlICUwIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9cSIgKF9fcmV0KSwgIj1tIiAo
Kl9fcCksICI9YSIgKF9fcmVhZHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKF9f
bmV3dmFsKSwgIm0iICgqX19wKSwgImEiIChfX29sZHZhbCkpOwogIHJldHVybiBfX3JldDsKfQoj
IDQwICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmlu
ZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAg
ICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs
b2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxfaXRl
cmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX25v
cm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJhdG9y
OwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4g
cmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDExOCAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAK
ICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+Ojpv
dGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDEzNiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
eXBlIF9TX21heF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7
CgogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFj
aXR5OwogICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAg
ICAgICAgX01faXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz
IDwgMDsgfQoKICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAg
ICB7IHJldHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01f
c2V0X2xlYWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9p
ZAogICAgICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsg
fQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7
IHJldHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+ICh0aGlzICsgMSk7IH0KCiAgICAgICAg
X0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01f
Z3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQogICAg
ICAgIHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpID8K
ICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOyB9CgoKICAgICAg
ICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2MmKTsK
CiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2EpCiAgICAg
ICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEp
IDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAgICB9CgogICAgICAgIHZv
aWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAgICAgIF9D
aGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAgIHsKICAgICAgICAgIF9f
YXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0
YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNvbnN0IF9B
bGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwojIDIwOCAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBpbmxpbmUgc3RhdGlj
IGJvb2wKICAgICAgICBfU19leGNlc3Nfc2xvcChzaXplX3QsIHNpemVfdCk7CgogICAgICB9OwoK
CiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxv
Y19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxv
YyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoK
ICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9j
X2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3Jl
cF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5
cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRh
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJU
KgogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMu
X01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoK
CiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAg
ICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2Vk
KCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAg
ICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9f
cG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6X01fY2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsK
ICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9f
b2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0g
X190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4g
KF9NX2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9j
aGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAg
IHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAg
ICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0
YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEs
IGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBf
X2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0No
YXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAg
IHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAg
IHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19r
MSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19r
MiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFy
VCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0
cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAog
ICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5
cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0
aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgog
ICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBi
YXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlw
ZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNv
bnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0Fs
bG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxv
YyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0No
YXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3Ig
X19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsg
X01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyBy
ZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv
cGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVy
biB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkK
ICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0
YSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAog
ICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRv
cgogICAgICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0
X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9y
KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAg
ICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7
IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAg
IHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAg
ICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhp
cy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhf
c2l6ZTsgfQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f
Yyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6
ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJl
c2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigp
IHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1w
dHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3Jl
ZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRv
cltdKHNpemVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICBy
ZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAg
ICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRo
aXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6
OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZl
cmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0g
c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQi
KTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAg
ICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhp
cy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShf
Q2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyBy
ZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJp
bmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVu
ZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hh
clQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9f
Yyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAg
ICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3RyLl9N
X2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFz
c2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhp
cy0+YXNzaWduKF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh
c3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Ms
IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAg
ICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkK
ICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9f
Zmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwg
c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19w
LCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg
ICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1
dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcs
IF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9f
cG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIGl0ZXJhdG9y
IF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwg
X19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9NX2llbmQoKSk7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19w
b3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9f
cG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2No
ZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01fY2hl
Y2soX19wb3MyKSwKICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBf
X24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3Bvcyk7CiAg
ICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6
ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5z
ZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0No
YXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9f
biwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewog
ICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMt
Pmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9y
ZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSAr
IF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlw
ZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoK
ICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewog
ICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAg
dGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9k
YXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJu
IF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShp
dGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5
cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19m
aXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9N
X3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIHJldHVy
biB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOwog
ICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z
MSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D
aGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24x
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOwogICAgICB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhp
cy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
KTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9f
cG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIu
YmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxh
Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0No
YXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp
dGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRl
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3Jl
cGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgogICAg
cHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p
MiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRl
cmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAg
ICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1w
bGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29u
c3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9f
YSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5k
LCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBf
X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3Ry
dWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxs
b2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2Vy
PF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0
cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAg
ICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9j
JiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAg
IF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9BbGxv
YyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAg
ICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hh
clQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9
IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigp
IGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAg
ICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5h
bCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJU
KgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0
b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp
bmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl
KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9f
cG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
ZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVf
dHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w
b3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCks
IF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3Ms
IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmlu
ZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
dHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2Yo
X19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBz
aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywg
X19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkp
OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0g
bnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3Ms
IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k
X2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihf
X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29m
KF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAw
KSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu
c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2Yo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxl
bmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0No
YXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJp
bmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9z
KSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAg
cmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGlu
dAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlw
ZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf
X3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo
X01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAg
ICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoK
ICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJl
KHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25z
dDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoK
ICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwg
Y29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAg
OiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3Bl
cmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJu
IF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs
b2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJU
IF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgewogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAg
X19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRv
cisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9D
aGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJp
bmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3Ry
KF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAg
IHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl
KF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9f
bGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz
KSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo
cy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz
KSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8
PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJU
KiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBf
X2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMu
Y29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3
YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAg
ICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDQ3ICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwoKCiMgMSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyAzMSAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAz
CgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAxIDMKIyAzMyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2FsZ29yaXRobS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM1ICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwoj
IDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgi
IDEgMwojIDM2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxn
b3JpdGhtLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvLmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgMzMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lk
Cl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBf
RGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkK
ewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAo
X19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFs
dWUpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50
KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRl
eCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBj
bGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
IF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9f
bGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAoKihf
X2xhc3QgLSAxKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp
bmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9EaXN0YW5jZSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19w
dXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJ
bmRleCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29t
cGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAv
IDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0
ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9f
cGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJ
bmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpp
bmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBf
X2NvbXAsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAo
X19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCks
CiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQK
cHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19jb21wLAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5k
ZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJ
bmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKCooX19m
aXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkp
CiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo
X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxk
OwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAo
X19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vj
b25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190
b3BJbmRleCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUs
IF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9f
Zmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVl
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwPgpp
bmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1RwKikKewogIF9f
cG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwKICAgICAgICAgICAgIF9U
cCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is
IGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZv
aWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNl
IF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUs
IF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7
CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxl
IChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19z
ZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19z
ZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg
X19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3Nl
Y29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENo
aWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3Qg
KyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAt
IDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBf
X3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICBfRGlz
dGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0
LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAg
ICAgIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBf
YXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3BvcF9o
ZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwg
X19jb21wLAogICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2
b2lkCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtl
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0g
X19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7
CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJz
dCArIF9fcGFyZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFy
ZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxp
bmUgdm9pZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwK
ICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAo
X19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3Qg
LSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxl
ICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1Rw
KCooX19maXJzdCArIF9fcGFyZW50KSksCiAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBp
ZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9p
ZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlw
ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CnZv
aWQgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAo
X19maXJzdCwgX19sYXN0LS0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19j
b21wKTsKfQoKfQojIDM1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f
YiwgY29uc3QgX1RwJiBfX2MpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAoX19i
IDwgX19jKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICBy
ZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8IF9f
YykKICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9fYzsK
ICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIGNvbnN0IF9UcCYKX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U
cCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2IsIF9f
YykpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAg
ICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29t
cChfX2EsIF9fYykpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykp
CiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9fZmly
c3QpOwogIHJldHVybiBfX2Y7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgKytfX2ZpcnN0OwogIHJldHVy
biBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0
ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsKICBy
ZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoK
ICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAo
Kl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlm
ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAg
aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9
CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2ZpcnN0
ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBp
ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNh
c2UgMToKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFuZG9t
QWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykK
ewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZv
ciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3By
ZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0
Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp
KSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAg
aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNh
c2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZChfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJ
dGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0Zvcndh
cmRJdGVyIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg
IHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUo
KytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRl
PgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz
dDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpf
X2ZpcnN0LCAqX19uZXh0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19u
ZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAgX1Np
emUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBf
U2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3Zh
bHVlKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19m
aXJzdCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChf
Rm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9
PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoK
ICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9
PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7
CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3Ax
OwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSkgewogICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAq
X19maXJzdDIpOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xh
c3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgr
K19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAo
Kl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAg
IHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAg
ICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9f
Zmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJ
dGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRl
cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1w
KF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJz
dDIpKQogICAgICArK19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBfRm9y
d2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3
YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19wcmVk
aWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmly
c3QxOwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRl
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2ZpcnN0
MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAg
X19jdXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0
dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7
CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAg
ICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAg
ICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJk
SXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJl
dHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIg
X19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAg
ICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9
PSBfX3ZhbCkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAgIGlm
IChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIF9f
Zmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19sYXN0
OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGls
ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qs
IF9fdmFsKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxl
IChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwp
KSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9
PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAo
X19pICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwp
KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBf
X2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0Zvcndh
cmRJdGVyMiBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19f
Zmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmly
c3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwg
Y2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAg
ICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9P
dXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIg
dHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9f
YmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2UoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBjb25z
dCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9fZmly
c3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0
SXRlciByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192
YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9f
b2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1By
ZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRp
Y2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAg
Kl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAg
cmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2Vu
KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9H
ZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1Np
emUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQp7CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAtLV9f
biwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0Owp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg
X1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
Y29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1
ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lm
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAg
ICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9f
Zmlyc3QsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9pZihf
X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAg
cmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
VHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX1RwKikKewoKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFs
dWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09ICpf
X2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0g
X192YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlx
dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9y
d2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZv
cndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgr
K19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAg
ICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Owog
IHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVk
aWNhdGUsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsIF9UcCopCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsK
ICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZChfX3Zh
bHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jl
c3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0
ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3Vu
aXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5h
cnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICBy
ZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9P
dXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0
dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7
CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJk
SXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJz
dCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICByZXR1cm47CiAgICBlbHNlCiAgICAgIGl0
ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmlyc3Qr
KywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxp
bmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfX3JldmVy
c2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRw
dXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xh
c3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJu
IF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+Cl9F
dWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewogIHdo
aWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9f
bjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIg
X19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAg
ICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19m
aXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAgc3dh
cCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkK
ICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3Qp
OwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIgPSBf
X21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9fZmly
c3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9f
bWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAg
IF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlm
IChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVy
c2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAg
KCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAg
ICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWco
KSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0KICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2ZpcnN0
LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19m
aXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rp
c3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFz
dCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBfRGlz
dGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0gX19m
aXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVybiBf
X2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBfX2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlzdGFu
Y2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kg
PCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8IF9fbCkgewogICAgICBmb3IgKF9E
aXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgIGlmIChfX3Ag
PiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAg
ICAgX19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAg
ICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAgIGVsc2UgewogICAgICBmb3IgKF9E
aXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAgaWYg
KF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAg
ICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAgICAqX19wID0gKiAoX19wIC0gX19s
KTsKICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1wOwog
ICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19y
b3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1
dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0
dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1
bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSBf
X3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUgX19u
OwoKCgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQg
cmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9S
YW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkK
ICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmly
c3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9S
YW5kb21OdW1iZXJHZW5lcmF0b3I+CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
IF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9t
QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBp
dGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg
X0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsK
CiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcp
IDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAt
LV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1
cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJh
dG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAg
d2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAg
ICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0K
CiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9E
aXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBf
X247ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19y
YW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0g
Kl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAg
ICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRv
bUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1i
ZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9EaXN0YW5jZSBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBf
X3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19t
LCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9fdCk7
CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVy
CnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19vdXRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX291dF9maXJzdCwgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAg
ICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRl
cgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fb3V0X2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19y
YW5kKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4g
X19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fb3V0X2ZpcnN0LCBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9sYXN0
IC0gX19vdXRfZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm4gX19maXJzdDsKCiAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2Zp
cnN0OwoKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19uZXh0
KSkgewogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgKytfX2ZpcnN0OwogICAg
fQoKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
ciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUpCiAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAg
ZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVsc2UK
ICAgICAgICBicmVhazsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAo
IV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAtLV9fbGFzdDsKICAgICAgZWxzZQogICAgICAgIGJy
ZWFrOwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUg
X0ZvcndhcmRJdGVyIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lucGxh
Y2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNl
IF9fbGVuKQp7CiAgaWYgKF9fbGVuID09IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/
IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICBh
ZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0
YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBf
X21pZGRsZSwKICAgICAgICAgICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlk
ZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX0Rp
c3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlm
IChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0g
X19maXJzdDsKICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
IHsKICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAg
ICsrX19yZXN1bHQyOwogICAgICB9CiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVz
dWx0MSk7CiAgICByZXR1cm4gX19yZXN1bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwog
ICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAgICAg
ICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRp
b25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFzdCwg
X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSkpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRl
ciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQog
ICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9f
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9f
YnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lu
cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3Np
emUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRl
PgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRp
b25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVk
X3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAodHJ1
ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAg
LS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0Owog
ICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRl
cl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5k
b21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Rw
IF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAo
X19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7
CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAg
IGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJf
c3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9f
c3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwIF9fdmFsKQp7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19s
YXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xhc3Qg
PSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xh
c3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xh
c3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICpf
X2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQog
ICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHA+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAqKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJz
dCkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAg
Kl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2Vy
dChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9fdmFs
ID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlfYmFj
a3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7
CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCwg
X19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9t
QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBf
X2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQo
X19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsK
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRf
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3VhcmRl
ZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9p
bnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly
c3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90
aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3Rs
X3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19z
dGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9fc3Rs
X3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19z
dGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAgICBf
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7CiAg
Zm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19rOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1Np
emU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAg
ICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3QgLSBf
X2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7
CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJldHVy
bjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0
ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkv
MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAx
KSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVw
dGhfbGltaXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPgp2
b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAg
ICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxl
IChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9s
aW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwg
X19jb21wKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCAr
IChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBfX2lu
dHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBfX2Nv
bXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9v
cChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2Zp
cnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwog
ICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQg
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9f
aW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX3Zh
bHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19m
aXJzdCkgKiAyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maW5hbF9pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9t
QWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwog
IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxl
IC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9p
ZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBf
X2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBf
X2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRo
b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0
IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFj
Y2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19y
ZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0g
MiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVw
KSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190
d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCArPSBf
X3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9f
Zmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9z
aXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19t
ZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190d29f
c3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190
d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw
X3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJz
dCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBfX3N0
ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsK
CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgIF9fZmlyc3Qg
KyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29tcCk7
Cn0KCmNvbnN0IGludCBfX3N0bF9jaHVua19zaXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewogIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0gX19j
aHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBf
Q29tcGFyZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBf
Q29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3Np
emUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6
ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVy
Z2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAgX0Rp
c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0
ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1
bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVw
X3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0
X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19zdGVw
X3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0
LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rp
c3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhf
YnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkKewog
IF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJf
bGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3Rs
X2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
c3RlcF9zaXplLCBfX2NvbXApOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAg
X19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUs
IF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19i
dWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAg
X19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2Fk
YXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlzdGFu
Y2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRl
ciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXpl
KSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBf
X2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdl
X3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNl
KikwKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1
ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50
ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fc3Rh
YmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwg
X0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3Qg
KyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47
CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlk
ZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZl
cihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy
KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlz
dGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVm
KF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgpp
bmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1Zihf
X2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJsZV9z
b3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxp
bmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFibGVf
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwog
IGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytf
X2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2ksIF9UcCgqX19pKSwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUo
X19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBf
X3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtlX2hl
YXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwg
Kl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgq
X19pKSwgX19jb21wLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7
CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFs
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlz
dGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9z
b3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikK
ewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRf
bGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9m
aXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0g
X19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAg
KytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jl
c3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xh
c3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1c3Rf
aGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAg
ICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChf
X3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRfcmVh
bF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19yZXN1bHRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBf
RGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXAsIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRf
bGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf
cmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYg
X19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFs
X2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0
OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19j
b21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9fZmly
c3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVh
bF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJz
dCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAgc29y
dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0
dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21BY2Nl
c3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0
LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29t
cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlz
dGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAz
KSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19t
ZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0gX19u
dGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7
CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9f
bGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1lbnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9f
Y29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3Qg
LSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
KF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX2N1
dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xhc3Qg
PSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+Cmlu
bGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBf
X3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dl
cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9E
aXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAg
X0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xl
biA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFs
KSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xl
biA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hh
bGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBy
ZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4K
X0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7
CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsK
ICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFs
ZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlk
ZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBf
X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAt
IF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICBy
ZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19m
aXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlz
dGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xl
biA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9f
aGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAg
IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNl
KF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xl
biA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsr
X19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJl
dHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+
CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBl
cl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVy
IF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9f
Y29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIg
X19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7
CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwog
ICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAg
ICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAg
IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBf
X3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp
cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3Jhbmdl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f
dmFsLAogICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwog
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+
IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7
CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9
IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxl
KQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9f
bGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9f
dmFsKTsKICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVm
dCwgX19yaWdodCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zvcndh
cmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1
YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1
YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0Zvcndh
cmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3
YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7
CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2
YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkp
IHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAq
X19taWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQg
PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgIGFk
dmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21p
ZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJk
SXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4g
cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cmlu
bGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWws
IF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5
X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192
YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBi
aW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwg
X19jb21wKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsr
X19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHko
X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9P
dXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
aXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsK
ICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19m
aXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJn
ZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAgaWYg
KF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBf
X2xlbjIgPT0gMikgewogICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3
YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9j
dXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVu
MjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAy
OwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBs
b3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2Uo
X19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4y
MiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBf
X2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0
KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9f
bWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
MTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3Nl
Y29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xl
bjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlm
IChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBf
X21pZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1
dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxl
OwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYg
KF9fbGVuMSA+IF9fbGVuMikgewogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNl
KF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9f
bWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBf
X2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJz
dF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19j
b21wKTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQs
IF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAg
ICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRp
dmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3Rh
bmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1
ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6
ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7
CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJu
IGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9f
bGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3Qp
OwogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0
KTsKICB9CiAgZWxzZQogICAgcmV0dXJuIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJl
Y3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmlyc3Qx
ID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0Miwg
X19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xh
c3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAg
ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkK
ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3Vs
dCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9
ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19s
YXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2Fy
ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2Jh
Y2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1
bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChf
X2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3Qx
OwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAg
IH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19m
aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg
KytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1Bv
aW50ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAg
ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAg
aWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Q
b2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsK
ICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmly
c3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50
ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBf
X21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5k
LCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1
dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRk
bGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7
CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwog
ICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0g
bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlzdGFu
Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xl
bjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg
Kl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xl
bjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBf
X3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s
ZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRs
ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xh
c3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0
aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl
ciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUs
IF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwg
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9f
Zmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAg
ICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBp
ZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBh
ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJf
Ym91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBkaXN0
YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2Ugewog
ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9f
bGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl
LCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxl
ID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29u
ZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdlX2Fk
YXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVu
MTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFjZV9t
ZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5j
ZSopCnsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwg
X19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIs
IF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQog
ICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xl
bjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVn
aW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwog
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIg
PSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3Jhcnlf
YnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwog
IGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAg
IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl
bjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5z
aXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0
dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBl
KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlk
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3Qp
CiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3Rh
bmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5j
bHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAg
ICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJl
dHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEs
IGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3Qx
LCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+
Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJz
dDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19f
Zmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2Ug
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsr
X19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0
MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly
c3QxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBl
bHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAg
ICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRw
dXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0
MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsK
ICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7
CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVz
dWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBz
ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19m
aXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAr
K19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAg
KytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu
cHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikg
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsr
X19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAg
ICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0
cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVy
ZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29t
cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYg
KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBp
ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVs
c2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBj
b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRl
cgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYg
KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAr
K19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsrX19m
aXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9f
bGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVy
ZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVz
dWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19y
ZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4K
X0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdo
aWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQog
ICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVt
ZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgog
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChf
X2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4g
X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBt
aW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmly
c3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0
ICE9IF9fbGFzdCkKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1bHQg
PSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
LCAqX19yZXN1bHQpKQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVy
bXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
aSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFs
c2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kg
PCAqLS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJl
dmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19p
ID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1
cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
LCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkK
ICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykgewog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChfX2Nv
bXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7
CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAge30KICAgICAgaXRl
cl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1
cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAr
K19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xh
c3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBf
X2k7CiAgICAtLV9faTsKICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAg
ICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xh
c3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewog
ICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0K
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJl
Pgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kg
PSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNl
OwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkp
IHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFf
X2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2op
OwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQog
ICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0
SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVy
ICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAg
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRl
PgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRl
ciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkaWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3
YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQog
ICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmly
c3QxOwogIHJldHVybiBfX2xhc3QxOwp9CiMgMzM5MCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJk
SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7
CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxl
ICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2go
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgaWYgKF9fbmV3X3Jl
c3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAg
ICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19y
ZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFz
cyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVy
MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3Jf
dGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsK
ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2Ugewog
ICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAg
ICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jlc3Vs
dCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAg
ICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1
bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPgpfQmlk
aXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7Cgog
IF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmly
c3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwg
X19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0
MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBf
X2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJl
c3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f
bGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xh
c3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsK
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIy
OwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0Mihf
X2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0
MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9f
bGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNl
IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwog
ICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj
bGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2Fy
ZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJk
SXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFz
dDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3
YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX0Zvcndh
cmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19s
YXN0MiwKICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wgX19pc19oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2Ug
X19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19u
OyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGls
ZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAgICAg
ICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4K
Ym9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtPcmRl
cmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2Ug
X19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19u
OyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmlyc3Rb
X19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAw
KQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0gX19m
aXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TdHJp
Y3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9TdHJp
Y3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBfX2xhc3QgLSBfX2ZpcnN0
KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJvb2wgaXNfc29ydGVkKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7CgogIF9Gb3J3
YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xh
c3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoKl9fbmV4dCA8ICpfX2Zp
cnN0KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBpc19z
b3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0
ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBf
X2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19m
aXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp9CiMgMzcg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIg
MiAzCiMgNTAgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJp
bmcuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfc3RyaW5nLnRjYyIgMSAzCiMgNDMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25z
dCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
X1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3NpemUg
PSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpu
cG9zOwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0No
YXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3Qo
X0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcg
PT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3Jl
cCgpLl9NX3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6
ZV90eXBlIF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNp
emVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19i
dWZbX19pKytdID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAg
ICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRz
X3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+
X01fbGVuZ3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBm
b3IgKDs7KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19y
LT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCog
X19sYXN0ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAg
ICAgICAgZm9yICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlm
IChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAg
ICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAg
ICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsK
ICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9f
bGVuKTsKICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAg
ICAgX19yID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xl
bjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAg
ICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5J
dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19j
YXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgogICAgICAgIGlmIChfX2Jl
ZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlf
cmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRl
KF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3It
Pl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAg
ICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBf
X3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0
dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAgaWYg
KF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVw
KCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX24s
IF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAgICAgICAgICAg
IHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsKICAgICAg
ICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3ko
X19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBf
X247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAg
ICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFi
KF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9fc3Ry
LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKQog
ICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2Ep
LCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVj
dChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp
Y19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9k
YXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19hKQog
ICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgKyBf
X24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25z
dCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhz
aXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0
YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lu
cHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2Nv
bnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
IHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAg
ICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAg
ICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRf
YWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAg
ICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEp
ICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtf
aGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAg
X01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6
ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9f
bGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9f
cG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3Np
emUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkg
fHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRv
cl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9SZXAqIF9fciA9IF9SZXA6
Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYg
KF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3Jl
ZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4p
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRv
cigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVw
KCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkp
OwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikK
ICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3Mg
KyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5f
TV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7
CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+
Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAg
ICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5n
dGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwogICAgICAgICAgYWxsb2NhdG9yX3R5
cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3Jl
cCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3Jl
cCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9N
X2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAg
aWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5f
TV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3Mu
Z2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9k
YXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9N
X2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBi
YXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2Nh
dG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9f
cy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxv
Y2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1w
MTsKICAgICAgICB9CiAgICB9CiMgMzU2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0
IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkg
PiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3Ry
aW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSAr
IDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CgoKICAgICAgdm9pZCogX19wbGFj
ZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19zaXplKTsKICAgICAgX1Jl
cCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19j
YXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5n
dGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUo
Y29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIF9SZXAq
IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBfX3JlcywgX19hbGxvYyk7CiAgICAg
IGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgdHJh
aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3Ro
KTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19y
LT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJu
IF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbAoKCgoKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfZXhjZXNz
X3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9fcikKCiAgICB7CiAgICAgIHJldHVybiAyICogKF9f
cyA8PSAxNiA/IDE2IDogX19zKSA8IF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190
aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAg
dGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19z
aXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXIg
X19rMSwKICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3Rh
ZykKICAgICAgewogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBfX3MuX01f
aWVuZCgpKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAg
ICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBf
X2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0
aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKCiAgICAgICAgaWYgKF9f
ZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3Ry
aW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2li
ZWdpbigpOwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKICAgICAg
ICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwg
X19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVf
dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICByZXR1cm4gdGhpcy0+cmVw
bGFjZShfTV9jaGVjayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBfX24yKSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg
c2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4g
PiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICBy
ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2lu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgewoKCgogICAg
ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlz
LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp
cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwg
X01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
KQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAg
IGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xl
bik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3Ms
IF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBh
cHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0
eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9D
aGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9f
bGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsK
ICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFw
cGVuZChfX2xocywgX19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAg
ICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAg
ICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNp
emUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQo
X19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAg
cmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIs
IF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAg
ICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhf
c2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19s
ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9f
b2ZmMSwgX19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6
YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0
CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291
dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhpcy0+
c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7CgogICAg
ICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAgICAg
cmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOwogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCogX19k
YXRhID0gX01fZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytf
X3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywg
X19zLCBfX24pID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBv
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5w
b3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBfX3Np
emUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZp
bmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAg
ICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
cmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg
Y29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg
aWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihf
X3NpemUgLSBfX24gLF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01f
ZGF0YSgpOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFp
dHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAg
ICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bv
cy0tID4gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywg
c2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBf
X3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAg
ICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+
IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwg
X19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRo
aXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
cCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAg
ICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAg
aWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAg
ICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChf
X3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6
ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAg
IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlzLT5zaXpl
KCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9N
X2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBu
cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8
IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01f
ZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1
cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAg
ICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAg
ICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6Zmlu
ZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9f
c2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9
CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBf
X3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0s
IF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAg
ICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg
aWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z
dHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0g
X19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
LCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19y
c2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
CiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUg
X19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3Bv
czIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6
OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9z
MSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3My
LCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsK
ICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9z
MiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3Np
emU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCog
X19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6
ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBi
YXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4g
X19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBh
cmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
OwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsK
ICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJl
dHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf
X3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n
Ojpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUg
LSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29z
aXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9f
cG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAt
IF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hh
clQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19j
b3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAog
ICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5
cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5
cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwog
ICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAg
ICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9f
YnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyA0MyAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMgMzggIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL2N0eXBlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNDAgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8
ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/
ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgy
KSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdp
dCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAg
X0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+
IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwg
KDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDog
KCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8
PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8
ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/
ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgx
MCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNh
bG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4
KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWdu
ZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlw
ZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5
MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93
ICgpOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRy
bCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
cHVuY3QgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChp
bnQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVy
IChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAo
aW50KSB0aHJvdyAoKTsKIyAyMTMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjE0ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMg
MjI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51bV9sIChpbnQs
IF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChpbnQsIF9fbG9j
YWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9fbG9jYWxlX3Qp
IHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93
ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpl
eHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4g
aW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9f
aXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNzcGFj
ZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1cHBlcl9sIChp
bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGludCwgX19sb2Nh
bGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBfX2MsIF9fbG9j
YWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBf
X2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwp9
CiMgMzkgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUu
aCIgMiAzCiMgNTUgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
Y3R5cGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcgOjpp
c2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcgOjpp
c2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcgOjpp
c3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcgOjpp
c3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDQgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx
IDMKIyAzNCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25f
ZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3df
YmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRf
dHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50
aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsK
fQojIDQ1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2Qu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA1NiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGNsYXNzIHZlY3RvcjsKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1
cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hh
clQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0
IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog
ICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3Jh
cGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9D
aGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBl
PGNoYXI+OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5
bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu
VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0
OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUg
X1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K
ICAgIGNsYXNzIG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4gY2xhc3MKICAgIGNvbGxhdGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAg
Y2xhc3MgdGltZV9nZXRfYnluYW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGlt
ZV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9z
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoK
ICBjbGFzcyBtb25leV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9n
ZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xh
c3MgbW9uZXlwdW5jdF9ieW5hbWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsK
ICBwdWJsaWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNz
IGZhY2V0OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3Mg
ZmFjZXQ7CiAgICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9j
YWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAog
ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25z
dCBjYXRlZ29yeSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFM
IDw8IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBz
dGF0aWMgY29uc3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3Qg
Y2F0ZWdvcnkgdGltZSA9IDFMIDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRh
cnkgPSAxTCA8PCA0OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwg
NTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9u
ZXRhcnkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJp
YyB8IHRpbWUgfCBtZXNzYWdlcyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxl
KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxl
KGNvbnN0IGNoYXIqIF9fc3RkX25hbWUpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFz
ZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxv
Y2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290
aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9j
YWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0
IGxvY2FsZSYgX19vdGhlcik7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsK
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNv
bnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0
aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxv
Y2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgog
ICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2Jh
bDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsKICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgX1NfbnVtX2ZhY2V0cyA9IDEzOwoKICAgIGV4cGxpY2l0CiAgICBs
b2NhbGUoX0ltcGwqKSB0aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5p
dGlhbGl6ZSgpCiAgICB7IGlmICghX1NfY2xhc3NpYykgY2xhc3NpYygpOyB9CgogICAgc3RhdGlj
IGNhdGVnb3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQK
ICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRk
LCBjYXRlZ29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1
YmxpYzoKCiAgICB0eXBlZGVmIHZlY3RvcjxmYWNldCosIGFsbG9jYXRvcjxmYWNldCo+ID4gX192
ZWNfZmFjZXQ7CgoKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9j
YWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBj
b25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25z
dCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2YXRlOgoKICAgIHNpemVfdCBfTV9yZWZlcmVuY2Vz
OwogICAgX192ZWNfZmFjZXQqIF9NX2ZhY2V0czsKICAgIHN0cmluZyBfTV9uYW1lc1tfU19udW1f
Y2F0ZWdvcmllc107CiAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOwogICAgc3RhdGljIGNvbnN0
IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxl
OjppZCogY29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQq
IGNvbnN0IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25z
dCBfU19pZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRf
bW9uZXRhcnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNz
YWdlc1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNl
dF9jYXRlZ29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0
aHJvdygpCiAgICB7ICsrX01fcmVmZXJlbmNlczsgfQoKICAgIGlubGluZSB2b2lkCiAgICBfTV9y
ZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX01fcmVmZXJlbmNlcy0t
ID09IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7
IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoK
ICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKHN0cmluZyBfX25hbWUs
IHNpemVfdCk7CiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgYm9vbAogICAgX01fY2hlY2tfc2Ft
ZV9uYW1lKCkKICAgIHsKICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgX1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpCiAgICAgICAgX19yZXQgJj0g
X01fbmFtZXNbaV0gPT0gX01fbmFtZXNbaSArIDFdOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9
CiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29y
eSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0
IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25z
dCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2Zh
Y2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G
YWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFj
ZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBs
b2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9J
bXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0
KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19u
dW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIq
IjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgICBmcmllbmQgY2xhc3MgbG9j
YWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogIHByb3RlY3RlZDoKICAgIGV4
cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFs
CiAgICB+ZmFjZXQoKSB7IH07CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2Fs
ZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcyk7CgogICAgc3RhdGljIHZvaWQK
ICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToK
ICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOwoKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2Uo
KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoK
ICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZh
Y2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmll
bmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVz
ZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
ICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoK
CgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgc2l6ZV90IF9TX2hp
Z2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25z
dCBpZCYpOwoKICBwdWJsaWM6CgoKCiAgICBpZCgpIHsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm
IF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2Zh
Y2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0NCAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyAzOCAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgoKCgogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8
PCAxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdz
IF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9z
X0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9f
YikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRp
Y19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4o
X0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10
ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK
ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBf
SW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5l
IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRm
bGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0Zt
dGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19i
KQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog
IG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5z
dGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nf
b3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy
YXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9J
b3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2Ip
KTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9f
YSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2Fz
dDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09w
ZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikK
ICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19j
YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9J
b3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19h
IHwgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5t
b2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsg
fQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19h
LCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1
cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9z
X0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lv
c19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2Ip
CiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19j
YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9z
X0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShz
dGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGlu
ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRl
IF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3Rh
dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8
PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBf
X2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0
YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBf
SW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUg
X0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lv
c19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGly
IHsgX01faW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAg
ewogIHB1YmxpYzoKCgogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsK
ICAgIHB1YmxpYzoKCgogICAgICBleHBsaWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYg
X19zdHIpIHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7Cgog
ICAgcHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBf
TV9uYW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBm
bXRmbGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVj
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3MgZml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2lu
dGVybmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3Nf
ZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBzY2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X3Nob3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBz
aG93cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
YWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf
U19iYXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0
YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9f
aW9zX2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0g
aW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRl
IGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBj
b25zdCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Bl
bm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUo
X19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Bl
bm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmlu
YXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Bl
bm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0
IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGlj
IGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsK
CgogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVr
ZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVr
ZGlyKDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMTYg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMKICAg
IGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50LAog
ICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxi
YWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCiAgICB2b2lkCiAgICByZWdpc3Rlcl9jYWxs
YmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7CgogIHByb3RlY3RlZDoKCiAg
ICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAgIHN0cmVhbXNpemUgX01fd2lkdGg7CiAgICBm
bXRmbGFncyBfTV9mbGFnczsKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAg
ICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFj
ayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBpbnQgX01fcmVmY291bnQ7CgogICAg
ICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5k
ZXgsCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9N
X25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQo
MCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7ICsrX01fcmVmY291
bnQ7IH0KCiAgICAgIGludAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX01f
cmVmY291bnQtLTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsK
CiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAg
IHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRz
CiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgfTsK
CiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2FsX3dvcmRzID0gODsKICAgIF9Xb3JkcyBfTV93
b3JkX2FycmF5W19TX2xvY2FsX3dvcmRzXTsKICAgIF9Xb3JkcyBfTV9kdW1teTsKICAgIF9Xb3Jk
cyogX01fd29yZHM7CiAgICBpbnQgX01fd29yZF9saW1pdDsKCiAgICBfV29yZHMmCiAgICBfTV9n
cm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7CgogICAg
dm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAgIHsK
ICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0KCk7CiAg
ICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfY3JlYXRlKGJvb2wg
X19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19kZXN0cm95KCk7CgogICAg
cHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMg
Ym9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKICAgIGlubGluZSBmbXRmbGFncwog
ICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoKICAgIGlubGluZSBmbXRmbGFn
cwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg
PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7
CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpCiAg
ICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzIHw9IF9f
Zm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAg
IHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNrKQogICAgewogICAgICBmbXRm
bGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAmPSB+X19tYXNrOwogICAgICBf
TV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K
CiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9fbWFzaykgeyBfTV9mbGFncyAm
PSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0
IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVj
aXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBf
TV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJlYzsKICAgICAgcmV0dXJuIF9f
b2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKHN0cmVhbXNp
emUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7CiAgICAg
IF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgc3RhdGlj
IGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRydWUpOwoKCiAgICBsb2Nh
bGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgIGlubGluZSBsb2NhbGUKICAg
IGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7IH0KCgogICAgc3RhdGljIGlu
dAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9uZyYKICAgIGl3b3JkKGludCBf
X2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9saW1pdCkK
ICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMo
X19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZv
aWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9f
aXggPCBfTV93b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19f
aXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsK
ICAgIH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoK
ICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBpb3NfYmFzZSYK
ICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCiAgaW5saW5lIGlvc19iYXNl
JgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19i
YXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYo
aW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo
aW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNl
dGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz
ZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s
aW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNl
dGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51
bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s
aW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFz
ZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAg
aW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGxlZnQoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFk
anVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
cmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmln
aHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlu
bGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7
CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9jdChpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQp
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9z
X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19i
YXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv
c19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCn0KIyA0NSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2lvcy5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfc3RyZWFtYnVmLmgiIDEgMwojIDM4ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQw
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgi
IDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nm
d2QuaCIgMSAzCiMgNDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyA0MiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDMgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0
eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRz
X3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9zPGNo
YXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxj
aGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVmX2l0
ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0cmVh
bWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBzdHJl
YW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVkOgoK
CgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6
ZTsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVm
X3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5
cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlw
ZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5
cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAg
ICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7
CgoKCgoKCiAgICAgIGludF90eXBlIF9NX3BiYWNrX3NpemU7CiAgICAgIGNoYXJfdHlwZSogX01f
cGJhY2s7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgIGNoYXJfdHlw
ZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAgIGJvb2wgX01fcGJhY2tfaW5pdDsKCgoKCiAgICAg
IHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAgICAgewogICAgICAgIGlmICghX01fcGJh
Y2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgaW50X3R5cGUgX19kaXN0ID0gX01faW5f
ZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBpbnRfdHlwZSBfX2xlbiA9IG1pbihfTV9wYmFj
a19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywg
X01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5f
Y3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAg
ICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAg
ICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAg
ICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlmIChfTV9w
YmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfY3VyID0g
X01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfZW5kID0g
MDsKICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFj
azsKICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0g
X01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQogICAgICAg
ICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgICAgICAg
IHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9fb2ZmX2N1ciwKICAgICAg
ICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7CiAgICAgICAg
ICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19lbmRf
c2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICAgICAg
ICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5fY3VyX21vdmUob2ZmX3R5cGUg
X19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOwogICAgICAg
IF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBfTV9idWZfdW5pZmll
ZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICB9CiMgMTkzICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9p
ZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9v
bCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAg
ICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9
IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAg
ICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVz
dGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0K
CgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAg
ICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7
CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19y
ZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiMgMjM2ICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9pZAog
ICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAgaWYgKF9NX21v
ZGUgJiBpb3NfYmFzZTo6aW4pCiAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBf
TV9idWYpOwogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHRo
aXMtPnNldHAoX01fYnVmLCBfTV9idWYpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3Nl
dF9kZXRlcm1pbmF0ZShvZmZfdHlwZSBfX29mZikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0
aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01f
bW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgdGhp
cy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAgICAgIGlmIChfX3Rl
c3RvdXQpCiAgICAgICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAg
ICB9CgogICAgICBib29sCiAgICAgIF9NX2lzX2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewog
ICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKCiAgICAgICAgaWYgKF9NX2J1ZikKICAgICAgICAg
IHsKICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCiAgICAgICAgICAgICAg
X19yZXQgPSBfTV9pbl9iZWcgPT0gX01faW5fY3VyICYmIF9NX2luX2N1ciA9PSBfTV9pbl9lbmQ7
CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICBf
X3JldCA9IF9NX291dF9iZWcgPT0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9l
bmQ7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoK
ICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9N
X2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9N
X2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgw
KTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxv
Y2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAg
bG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7
CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9j
KCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAg
ICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9j
YWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRi
dWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBl
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg
eyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBv
c190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK
ICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQK
ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1z
aXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAg
ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7
CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNr
X2N1cl9zYXZlOwogICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9j
dXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJh
Y2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9f
cmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBf
X3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAg
ICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAo
dGhpcy0+c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9
CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNn
ZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9j
dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBf
X3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoK
ICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRf
dHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAg
ICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7
CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxs
KSwgX01fYnVmX3NpemUoMCksCiAgICAgIF9NX2J1Zl9zaXplX29wdChzdGF0aWNfY2FzdDxpbnRf
dHlwZT4oODE5MikpLCBfTV9idWZfdW5pZmllZChmYWxzZSksCiAgICAgIF9NX2luX2JlZygwKSwg
X01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCks
CiAgICAgIF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01f
YnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9N
X3BiYWNrX3NpemUoMSksIF9NX3BiYWNrKF9fbnVsbCksCiAgICAgIF9NX3BiYWNrX2N1cl9zYXZl
KF9fbnVsbCksIF9NX3BiYWNrX2VuZF9zYXZlKF9fbnVsbCksIF9NX3BiYWNrX2luaXQoZmFsc2Up
CiAgICAgIHsgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVy
biBfTV9pbl9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0
dXJuIF9NX2luX2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsg
cmV0dXJuIF9NX2luX2VuZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9N
X2luX2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2Jl
ZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAg
IF9NX2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAg
IF9NX2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Omlu
KSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01f
bW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJh
c2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAg
IHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAg
ICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAg
ICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAg
IHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAg
ICAgX01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9
IF9fcGVuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVn
ICYmIF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsK
ICAgICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAg
aWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19s
b2M7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1Ry
YWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVy
biB0aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUs
IGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlv
c19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90
eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlw
ZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3Nf
YmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwg
c3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFs
IHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7
CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJu
IHRyYWl0c190eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1Zmxv
dygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRoaXMtPnVuZGVyZmxvdygpID09IF9fcmV0OwogICAg
ICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9l
bmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykKICAgICAgICAgIHsK
ICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7
CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQg
JiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytfTV9vdXRfY3VyOwog
ICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwg
aW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQog
ICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVh
bXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7
CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRz
X3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA1MTYg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIg
MwogICAgcHJpdmF0ZToKICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5
cGUmKTsKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0
cmVhbWJ1Zl90eXBlJik7CgogICAgfTsKCn0KCgoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzcgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKbmFtZXNwYWNlIHN0ZCB7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19y
ZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAg
IHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqZ3B0cigpOwogICAgICAgICAgX01faW5fY3Vy
X21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Mp
OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsKICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5
cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhj
aGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rl
c3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBib29sIF9f
dGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClb
LTFdKTsKICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19yZXQgPSBw
YmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAg
ICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9N
X2luX2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAg
ICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl
CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFyX3R5
cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9idWZf
c2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAgICAg
X01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPm92
ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9fcmV0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4
c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1z
aXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAg
ICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBp
ZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3Jl
bWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihf
X2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf
X3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAg
ICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xl
bik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAgICAg
ICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRv
X2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAw
OwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2ZmX3R5cGUg
X19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4g
MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5nID0gX19u
IC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVuLCBf
X3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1ciwg
X19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAg
X19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7CiAgICAg
ICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAg
ICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQg
PSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAg
ICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQtPl9N
X21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkgewogICAgICAgIHdoaWxlIChfX3Rlc3Rw
dXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgewogICAgICAgICAgICBfX3h0cmN0ID0g
X19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAgIF9f
cmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJj
dCk7CiAgICAgICAgICAgIGlmIChfX3h0cmN0ID09IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiaW4tPnNnZXRjKCk7CiAgICAgICAg
ICAgICAgICBpZiAoX19jID09IF9UcmFpdHM6OmVvZigpKQogICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgfQogICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkgewogICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICB0aHJvdzsKICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA1MzAgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgNDYgIi9ob21lMi9tYXJjby9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM0ICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zYnVmX2l0ZXIuaCIgMSAzCiMgMzYgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAzCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRw
dXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg
dHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSog
X01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUK
ICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAg
ICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAg
IG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAg
OiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVm
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVm
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlz
OyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhy
b3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAg
IGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWls
ZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19j
KQogICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50
X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSxfVHJhaXRzOjplb2YoKSkpCiAgICAgIF9NX2ZhaWxl
ZCA9IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9y
CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hh
clQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICAgIHR5cGVkZWYgaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZTsKCiAg
ICBwcml2YXRlOgoKCgoKCgoKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGlu
dF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhy
b3coKQogICAgICA6IF9NX3NidWYoX19udWxsKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFt
YnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1Zihf
X3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJl
YW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKC0yKSB7
IH0KCgoKCiAgICAgIGNoYXJfdHlwZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7Cgog
ICAgICAgIGNoYXJfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01fc2J1ZiAmJiBfTV9jICE9IHN0
YXRpY19jYXN0PGludF90eXBlPigtMikpCiAgICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAg
ZWxzZSBpZiAoX01fc2J1ZikKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf
dHlwZShfTV9zYnVmLT5zZ2V0YygpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHN0
YXRpY19jYXN0PGNoYXJfdHlwZT4odHJhaXRzX3R5cGU6OmVvZigpKTsKICAgICAgICByZXR1cm4g
X19yZXQ7CiAgICAgIH0KCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYKICAgICAgb3BlcmF0
b3IrKygpCiAgICAgIHsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAgICAgIF9NX3NidWYtPnNi
dW1wYygpOwogICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0K
CiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZQogICAgICBvcGVyYXRvcisrKGludCkKICAgICAg
ewogICAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSBfX29sZCA9ICp0aGlzOwogICAgICAgIGlm
IChfTV9zYnVmKQogICAgICAgICAgX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpOwogICAg
ICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGJvb2wK
ICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBlJiBfX2IpCiAgICAgIHsKICAg
ICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9f
dGhpc2VvZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAg
Ym9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYKICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYi5f
TV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9f
YmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wK
ICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBlJiBfX2IpIGNvbnN0CiAgICAg
IHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBi
b29sIF9fdGhpc2VvZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAg
ICAgICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYKICAgICAgICAgICAgICAgICAgICAgIHx8
IF9fYi5fTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190aGlzZW9m
ICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
YWl0cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4m
IF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U
cmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7IH0KfQojIDM2ICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgMSAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAx
IDMKIyA0MCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2Zh
Y2V0cy5oIiAzCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jdGltZS5oIiAxIDMKIyAzNyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2N0aW1lLmgiIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIgMwojIDQwICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCmV4dGVybiAiQyIgewoK
CgoKCgoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy
IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAyIDMKIyA5NSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0Kewog
IGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsK
ICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5
OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIg
KnRtX3pvbmU7CgoKCgp9OwoKCgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgp
OwoKCmV4dGVybiB0aW1lX3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRl
cm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApIHRocm93
ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0
aW1lIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRp
bWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19z
LCBfX2NvbnN0IGNoYXIgKl9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1l
cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpfX2dtdGltZV9yIChfX2NvbnN0IHRp
bWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy
b3cgKCk7CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVz
dHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0
IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4
dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBf
X3RwLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmN0
aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJu
IGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBj
aGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVy
biBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwojIDIyOCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRtICpfX3Rw
KSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpfX3RwKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3Rl
ZF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKIyAyNTcgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4g
c3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAy
NzIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3N0cmluZywgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVm
cCkgdGhyb3cgKCk7CgoKCgp9CiMgNDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMKIyA1MyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9j
a190OwogIHVzaW5nIDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAg
dXNpbmcgOjpkaWZmdGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNp
bmcgOjphc2N0aW1lOwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcg
Ojpsb2NhbHRpbWU7CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDQyICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgNDMgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoK
CgoKCm5hbWVzcGFjZSBzdGQKewoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyA1MCAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVf
YmFzZS5oIiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQq
IF9fdG9fdHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsKICAgIHN0YXRp
YyBjb25zdCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dl
ciA9IF9JU2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNhbHBoYTsKICAg
IHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IF9JU3Nw
YWNlOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9
IF9JU2NudHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5jdDsKICAgIHN0
YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA1NCAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1
YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNr
IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19t
LCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlw
ZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2Fu
X2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nh
bl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9f
aGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsg
fQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAg
ICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4oY29u
c3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAg
Y2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1bHQs
IF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9
CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAg
IHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Qg
PSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNrKiBf
X3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf
X2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq
IF9faGksCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJv
dyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAg
ICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1h
c2s7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCkgeyB9
CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu
X25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QK
ICAgICAgeyByZXR1cm4gX19jOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0KCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3QK
ICAgICAgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioK
ICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90
eXBlKiBfX2Rlc3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwg
Y2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAg
ICB7IHJldHVybiBfX2RmYXVsdDsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX19oaTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNz
IGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcml2YXRlOgoK
ICAgICAgYm9vbCBfTV9kZWw7CiAgICAgIF9fdG9fdHlwZSBjb25zdCYgX01fdG91cHBlcjsKICAg
ICAgX190b190eXBlIGNvbnN0JiBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBjb25zdCYg
X01fY3RhYmxlOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAg
IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3Np
emUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwg
c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFzayBfX20s
IGNoYXIgX19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBpcyhjb25z
dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAg
ICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciog
X19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioK
ICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9f
aGkpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsK
CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJl
dHVybiBfTV90YWJsZTsgfQoKICAgICAgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fY3RhYmxlOyB9CgogICAgICB2aXJ0dWFsIGJvb2wK
ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq
IF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBk
b193aWRlbihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9f
d2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rl
c3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUs
IGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSwKICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0Owog
ICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8
Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmIF9fbG9jKTsKIyAzOTIgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwojIDEgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lu
bGluZS5oIiAxIDMKIyAzNyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46
OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtfX2Nd
ICYgX19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIq
IF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdo
aWxlIChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107
CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAg
c2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkg
Y29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgIShfTV90YWJsZVsqX19sb3dd
ICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNo
YXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xv
dywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGln
aAogICAgICAgICAgICYmIChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQogICAgICArK19f
bG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyAzOTMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgog
ICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBl
eHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw
KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsg
fQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiMgMTczICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMKICBjbGFzcyBjb2RlY3Z0X2Jh
c2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBh
cnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRl
VD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBp
bnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlw
ZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90
eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3Qg
aW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQs
CiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1
cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsK
ICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg
ZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBl
eHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5z
aGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAog
ICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUq
JiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBf
X3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsK
ICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBf
X2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9f
dG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93
KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAg
ICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19h
bHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0
IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBp
bnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBf
X2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFz
ZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRl
cm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAg
ICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAg
ICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlw
ZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk
b19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUq
JiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0g
MDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9
IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRo
cm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRl
X3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3Qg
ZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3Ry
YWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg
X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6
OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVU
PiAoX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVj
dnQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf
RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJu
VCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKIyA1OTQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVj
dnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0
X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBjaGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAg
ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsK
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZp
cnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRl
cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9l
bmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5f
dHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5z
aGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAg
ICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBl
KiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg
ICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBp
bnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBk
b19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9f
YWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBk
b19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAg
ICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3co
KTsKICB9OwojIDcwMCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29k
ZWN2dC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U
LCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29k
ZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAg
IGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZz
KSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9ieW5hbWUo
KSB7IH0KICAgIH07CiMgNDE2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQ7CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX0Zvcm1hdF9jYWNoZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRz
PF9DaGFyVD4gdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlw
ZSBzaXplX3R5cGU7CgoKICAgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgICAgZnJpZW5kIGNsYXNzIF9O
dW1lcmljX2dldDsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ8X0NoYXJUPjsKICAgICAgZnJp
ZW5kIGNsYXNzIG51bV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0PF9D
aGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5k
IGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8X0No
YXJUPjsKCgoKCiAgICAgIHN0YXRpYyBpbnQgX1NfcHdvcmRfaXg7CgoKCiAgICAgIGJvb2wgX01f
dmFsaWQ7CgoKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2xpdGVyYWxzW107CgoKCgogICAg
ICBlbnVtCiAgICAgIHsKICAgICAgICBfU19taW51cywKICAgICAgICBfU19wbHVzLAogICAgICAg
IF9TX3gsCiAgICAgICAgX1NfWCwKICAgICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGlnaXRz
X2VuZCA9IF9TX2RpZ2l0cyArIDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNfZW5k
LAogICAgICAgIF9TX3VkaWdpdHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9TX2Vl
ID0gX1NfZGlnaXRzICsgMTQsCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQKICAgICAg
fTsKCgoKCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwoKCgoKCiAgICAgIGNoYXJf
dHlwZSBfTV90aG91c2FuZHNfc2VwOwoKCgogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsK
ICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKCgogICAgICBib29sIF9NX3VzZV9ncm91
cGluZzsKCgoKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwoKICAgICAgX0Zvcm1hdF9jYWNoZSgp
OwoKICAgICAgfl9Gb3JtYXRfY2FjaGUoKSB0aHJvdygpIHsgfQoKCgoKICAgICAgc3RhdGljIF9G
b3JtYXRfY2FjaGU8X0NoYXJUPioKICAgICAgX1NfZ2V0KGlvc19iYXNlJiBfX2lvcyk7CgogICAg
ICB2b2lkCiAgICAgIF9NX3BvcHVsYXRlKGlvc19iYXNlJik7CgogICAgICBzdGF0aWMgdm9pZAog
ICAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldmVudCwgaW9zX2Jhc2UmIF9faW9z
LCBpbnQgX19peCkgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX3B3b3JkX2l4OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAg
ICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RFRiI7
CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz
cyBfTnVtZXJpY19nZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBu
dW1fZ2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+
CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0OwogICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVu
ZCBjbGFzcyBudW1fcHV0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUg
X0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsKICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlf
cHV0OwoKICAgIHByaXZhdGU6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX2dldCgpIHsg
fQoKICAgICAgdmlydHVhbAogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kKSBj
b25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0
ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf
dHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg
bnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29s
JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0
ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1
cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZv
aWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7
IH0KCgoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLAogICAgICAgICAgICAgICAgIGludCYgX19iYXNl
LCBib29sIF9fZnAgPSB0cnVlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9y
dCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldCAoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7CiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LAogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg
aXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBk
b3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVy
X3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAg
ICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtX2dldDxjaGFyLCBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFjdChpc3RyZWFtYnVmX2l0ZXJh
dG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBib29sIF9f
ZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19wdXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAg
IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX051bWVyaWNfcHV0KCkgeyB9CgogICAg
ICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19wdXQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVi
bGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9f
cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBi
b29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19m
LCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7
IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmls
bCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJv
b2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19m
aWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVk
IGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i
YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
cHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlw
ZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmlu
Z190eXBlIF9NX3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7CgogICAg
cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkg
OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7
IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXpl
X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFs
aXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3Bv
aW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBj
aGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3Ro
b3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1
ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJp
bmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb19mYWxzZW5h
bWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKSB7
IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhv
dXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l
OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5p
dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46
OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBudW1wdW5jdDxf
Q2hhclQ+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQogICAgewoKICAgIH0K
CiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVf
bnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdF9ieW5hbWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJU
PgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9i
eW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5j
dDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9j
X2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9N
X2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9N
X2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFy
VCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fY29tcGFyZShfX2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KCiAgICAgIHN0cmluZ190
eXBlCiAgICAgIHRyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19o
aSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9
CgogICAgICBsb25nCiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQq
IF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0K
CiAgcHJvdGVjdGVkOgogICAgICB+Y29sbGF0ZSgpIHsgfQoKICAgICAgdmlydHVhbCBpbnQKICAg
ICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAog
ICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0oY29u
c3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBsb25nCiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9f
aGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxl
OjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xs
YXRlPGNoYXI+Ojpkb19jb21wYXJlKGNvbnN0IGNoYXIqIF9fbG8xLCBjb25zdCBjaGFyKiBfX2hp
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19sbzIsIGNvbnN0
IGNoYXIqIF9faGkyKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBjb2xsYXRl
PGNoYXI+Ojpkb190cmFuc2Zvcm0oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkg
Y29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIGxvbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2hhc2go
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CiMgMTAxNCAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMg
Y29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0
ZV9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbGxhdGVfYnluYW1lPGNo
YXI+Ojpjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgoKCgoKICBj
bGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRl
ciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXpl
X3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpLCBfTV9kYXluYW1l
cygwKSwgX01fbW9udGhuYW1lcygwKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29y
ZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF90aW1lKF9fcywgX19lbmQsIF9fZiwgX19l
cnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19z
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X2Rh
dGUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
ZiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXRfd2Vla2RheShfX3MsX19lbmQsX19mLF9fZXJyLF9f
dCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dl
dF9tb250aG5hbWUoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKQogICAgICB7
CiAgICAgICAgZGVsZXRlIFtdIF9NX21vbnRobmFtZXM7CiAgICAgICAgZGVsZXRlIFtdIF9NX2Rh
eW5hbWVzOwogICAgICB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29y
ZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0KCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAs
IGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkg
Y29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsCiAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXko
aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYs
CiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAg
ICB7IHJldHVybiBfX3M7IH0KCiAgICAgIG11dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9N
X2RheW5hbWVzOwogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9tb250aG5h
bWVzOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXRf
YnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAgIHsKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIg
aXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNo
YXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0
X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBs
b2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCgogICAgICBpdGVyX3R5cGUKICAg
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsCiAgICAgICAgICBj
b25zdCB0bSogLCBjb25zdCBfQ2hhclQqICwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogKSBjb25z
dAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0
IHRtKiBfX3RtYiwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZGlmaWVyID0gMCkgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBfX2Zvcm1hdCwgX19t
b2RpZmllcik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0
KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiAsCiAgICAgICAgICAgICBjaGFyICwg
Y2hhciApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0
PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBs
aWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+IChfX3JlZnMpIHsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CiAgICB9
OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh
c3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg
ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9nZXQo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19p
bnRsLAogICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs
b25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19l
bmQsIF9faW50bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jh
c2UmIF9fZiwKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBl
JiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50
bCwgX19mLCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAgICAgICAgICAgIGlvc19i
YXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSYgKSBj
b25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAgICAgICAgICAgIGlv
c19iYXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBzdHJpbmdfdHlwZSYg
KSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2lu
dGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJs
ZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2ludGwsIF9fZiwg
X19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUg
X19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgIGNoYXJfdHlwZSBfX2Zp
bGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9f
cHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFy
X3R5cGUgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgKSBjb25zdAogICAgICB7IHJldHVybiBf
X3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5n
X3R5cGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9w
dXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICBzdHJ1Y3QgbW9uZXlfYmFzZQogIHsKICAgIGVu
dW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3Qg
cGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1Nf
ZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9w
YXR0ZXJuKGNoYXIgX19wcmVjZWVkcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlw
dW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgog
ICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3Vz
YW5kc19zZXA7CiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKICAgICAgc3RyaW5nX3R5cGUgX01f
Y3Vycl9zeW1ib2w7CiAgICAgIHN0cmluZ190eXBlIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIHN0
cmluZ190eXBlIF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAg
ICAgcGF0dGVybiBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7Cgog
ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMg
PSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlw
dW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBf
TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg
IGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3Bv
aW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAg
ICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9
CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBv
c2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWdu
KCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBm
cmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7
IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCkgeyB9CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0K
CiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f
Y3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAg
ICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw
ZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRp
dmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJu
CiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0
OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRp
YWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5
cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
b2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIHZvaWQKICAgIG1v
bmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9j
YWxlICkKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8
Y2hhcj46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlw
dW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAg
ICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
PiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6
ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMp
CiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5j
dCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9u
ZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1v
bmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxl
X21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wg
X0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+Ojpp
bnRsOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9n
OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDog
cHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK
ICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2lj
X3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJl
dHVybiBkb19vcGVuKF9fcywgX19sb2MpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQo
Y2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBf
X3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9
CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVy
biBkb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5t
ZXNzYWdlcygpIHsgfQoKCgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25z
dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgICB7IHJldHVy
biAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBp
bnQsIGludCAsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1
cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9n
KSBjb25zdCB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2Fs
ZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkgeyB9CiAgICB9
OwoKICB0ZW1wbGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFt
ZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CiMgMTUzMiAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3Qg
bG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5p
cyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f
bG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5
cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykK
ICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh
c2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2Vy
LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19j
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNk
aWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3Qo
X0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxj
dHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hh
clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBf
X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBj
b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykK
ICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19j
KTsgfQp9CiMgMzcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj
X2lvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UK
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVh
bWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRl
cj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hh
clQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcml2YXRlOgogICAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgY2hhcl90eXBl
IF9NX2ZpbGw7CiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKICAgICAg
aW9zdGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBf
TV9pb3NfZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsKCiAg
ICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGljOgogICAgICBp
bmxpbmUgY29uc3QgX19jdHlwZV90eXBlKgogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQog
ICAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlOyB9CgogICAgICBvcGVyYXRvciB2b2lkKigpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lv
cyo+KHRoaXMpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlubGluZSBpb3N0YXRlCiAgICAg
IHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAg
ICAgIGlubGluZSB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpCiAg
ICAgIHsKICAgICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9z
dGF0ZSA9IF9fc3RhdGU7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRl
ID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMt
PmV4Y2VwdGlvbnMoKSkpCiAgICAgICAgICBfX3Rocm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6
OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgfQoKICAgICAgaW5saW5l
IHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFy
KHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBn
b29kKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAg
IGlubGluZSBib29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0
YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGZhaWwoKSBj
b25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQp
KSAhPSAwOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJl
dHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpbmxpbmUgaW9z
dGF0ZQogICAgICBleGNlcHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9u
OyB9CgogICAgICBpbmxpbmUgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQp
CiAgICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5j
bGVhcihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19i
YXNlKCkKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5i
YXNpY19pb3MoKSB7IH0KCgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGlu
bGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGllc3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBf
X3RpZXN0cjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGlubGluZSBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z
Yik7CgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jo
cyk7CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9maWxsOyB9CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hhcl90
eXBlIF9fY2gpCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQgPSBfTV9maWxsOwogICAg
ICAgIF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAg
IGxvY2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAg
ICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hh
cl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAg
ICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGlu
aXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAog
ICAgICBfTV9jaGVja19mYWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpCiAgICAgIHsKICAg
ICAgICBib29sIF9fcmV0ID0gZmFsc2U7CiAgICAgICAgaWYgKF9fZikKICAgICAgICAgIF9fcmV0
ID0gdHJ1ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0
cyhjb25zdCBsb2NhbGUmIF9fbG9jKTsKICAgIH07Cn0KCgoKIyAxICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzMyAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwpuYW1lc3BhY2Ug
c3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAg
IHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3Ry
ZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwog
ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAg
IHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX2xpbWl0IDw9IF9T
X2xvY2FsX3dvcmRzKSA/CiAgICAgICAgX01fd29yZF9hcnJheSA6IG5ldyBfV29yZHNbX19yaHMu
X01fd29yZF9saW1pdF07CiMgNjMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBfX3Jocy5f
TV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVu
Y2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOwogICAgICBpZiAoX01f
d29yZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUgW10gX01fd29yZHM7CiAgICAg
IF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAg
ICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX2xpbWl0OyArK19faSkKICAg
ICAgICBfX3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3Jkc1tfX2ldOwogICAgICBpZiAoX01fd29y
ZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUgW10gX01fd29yZHM7CiAgICAgIF9N
X3dvcmRzID0gX193b3JkczsKICAgICAgX01fd29yZF9saW1pdCA9IF9fcmhzLl9NX3dvcmRfbGlt
aXQ7CgogICAgICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgo
X19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7
CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmls
bCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAg
IF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRfZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNo
YXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywg
Y2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPm5hcnJvdyhf
X2MsIF9fZGZhdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihj
aGFyIF9fYykgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPndpZGVuKF9fYyk7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGxvY2Fs
ZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgIGlvc19i
YXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlm
ICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19s
b2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewoK
ICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9NX2lvc19s
b2NhbGUpOwogICAgICBfTV90aWUgPSAwOwogICAgICBfTV9maWxsID0gdGhpcy0+d2lkZW4oJyAn
KTsKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFtYnVmID0gX19z
YjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZv
aWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9mYWNldHMoY29uc3Qg
bG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9f
bG9jKSkKICAgICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9f
bG9jKTsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQogICAgICAg
IF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsKICAgICAgaWYg
KGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1
c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgfQp9CiMgMjE0ICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgNDcgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgNDAgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAg
dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAg
IHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBl
OwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgeyB0
aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19vc3RyZWFtKCkg
eyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpf
X3BmKShfX29zdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsK
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIF9fbik7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbik7Cgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChib29sIF9fbik7CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChzaG9ydCBfX24pCiAgICAgIHsKICAgICAg
ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJh
c2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9z
X2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1
cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgX19uKQog
ICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KF9fbikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpbnQgX19u
KQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3Mo
KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9j
dCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0
b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKSkpOwogICAgICAgIGVsc2UK
ICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikp
OwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBpbnQgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KF9fbikpOyB9CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwobG9uZyBsb25nIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I8PChkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGZsb2F0IF9fZikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0
aWNfY2FzdDxkb3VibGU+KF9fZikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChsb25nIGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwoY29uc3Qgdm9pZCogX19wKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBwdXQoY2hhcl90eXBlIF9fYyk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
d3JpdGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBmbHVzaCgpOwoKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxwKCk7
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3AocG9zX3R5cGUpOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7Cgog
ICAgcHJpdmF0ZToKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0
IF9fb3N0cmVhbV90eXBlJik7CgogICAgICBiYXNpY19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90
eXBlJik7CgogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQog
ICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0
cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2lj
X29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7
CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1
Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVm
KCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29z
LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBv
cGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2Mp
CiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRl
IDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsK
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg
c2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+
KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGlj
X2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0
b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQq
IF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1w
bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNo
YXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxj
aGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hh
ciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0
KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRz
KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3Mu
cHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNo
KCk7IH0KCn0KCgoKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
b3N0cmVhbS50Y2MiIDEgMwojIDMyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9vc3RyZWFtLnRjYyIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMwoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDAgIi9ob21lMi9tYXJjby9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0MSAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRj
YyIgMSAzCiMgMzUgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NlcnJuby5oIiAxIDMKIyAzOCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NlcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwoj
IDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0
cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vy
cm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vz
ci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQg
Kl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUv
ZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFt
X2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg
Mwp0eXBlZGVmIGludCBlcnJvcl90OwojIDM5ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMwojIDM2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAzCiMgMzggIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sb2Nh
bGUuaCIgMiAzCgoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9j
YWxlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNDUgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpz
dHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNf
c2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7
CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNo
YXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3Np
dGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7
CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2Vw
X2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7
CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwp9OwoKCgpleHRl
cm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2Fs
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhy
b3cgKCk7CiMgMTA5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
eGxvY2FsZS5oIiAxIDMKIyAxMTAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgoKCgoKCgpl
eHRlcm4gX19sb2NhbGVfdCBfX25ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywgX19jb25z
dCBjaGFyICpfX2xvY2FsZSwgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7
CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93
ICgpOwoKCn0KIyAzOSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2Nsb2NhbGUuaCIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1
c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAzNyAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEg
MwojIDM4ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0NSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAz
CiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQ2ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGltaXRzLmgiIDIgMwojIDEgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzCiMgMzgg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMwoj
IDEgIi9ob21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAzOSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NmbG9hdC5oIiAyIDMKIyA0NyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQgewoKICAgIGVudW0gZmxvYXRfcm91bmRfc3R5bGUgewogICAgICAgIHJvdW5kX2lu
ZGV0ZXJtaW5hdGUgPSAtMSwKICAgICAgICByb3VuZF90b3dhcmRfemVybyA9IDAsCiAgICAgICAg
cm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICAgICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwK
ICAgICAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gMwogICAgfTsKCiAgICBlbnVtIGZs
b2F0X2Rlbm9ybV9zdHlsZSB7CiAgICAgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAg
ICAgICBkZW5vcm1fYWJzZW50ID0gMCwKICAgICAgICBkZW5vcm1fcHJlc2VudCA9IDEKICAgIH07
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgewogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgICAgIHN0
YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAg
ICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4o
MCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np
Z25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOwoKICAgICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0
aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMgX1Rw
IHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0
YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KICAgICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgZGVu
b3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRz
X2luZmluaXR5KCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19xdWll
dF9OYU4oKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3NpZ25hbGlu
Z19OYU4oKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX2Rlbm9ybV9t
aW4oKTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPiB7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0
aWMgYm9vbCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICBz
dGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAgICAgICBzdGF0aWMgYm9vbCBx
dWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7
IH0KICAgICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
Y2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK
CiAgICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgtMTI4
KTsgfQogICAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAx
Mjc7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np
Z25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBz
dGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGlj
IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBu
dW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNo
YXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQg
Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg
fQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgp
IHRocm93KCkKICAgICAgICB7IHJldHVybiAyNTU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSA4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl
Zm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBudW1lcmljX2xpbWl0czxzaG9ydD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAoLTMyNzY3LTEpOyB9CiAgICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAg
IHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAg
ICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg
ICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8c2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBz
dGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
emVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgc2hvcnQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gNjU1MzU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSAxNjsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsg
fQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBz
aG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4g
c3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3LTEpOyB9CiAgICAgICAgc3RhdGljIGludCBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw
OyB9CiAgICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7
CgogICAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0
aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7
CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07
CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PiB7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
KDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gMzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y
bV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxs
b25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0yMTQ3
NDgzNjQ3TC0xKTsgfQogICAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBs
b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRp
YyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGlj
IGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u
Zz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRl
bXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgyMTQ3
NDgzNjQ3TCAqIDJVTCArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
MzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt
X2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz
ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0
aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9u
ZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21p
bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigw
KTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8bG9uZyBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKTsgfQogICAgICAgIHN0YXRpYyBs
b25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4
MDdMTDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9uZyBsb25nIGVwc2ls
b24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBsb25nIGxv
bmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9u
ZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgICAg
c3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u
ZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2
ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSA2NDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW5m
aW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4o
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDAp
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xp
bWl0czxmbG9hdD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g
dHJ1ZTsKCiAgICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDI0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3Owog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg
ICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4x
OTIwOTI5MGUtMDdGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIDEuMGY7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQgPSAtMTI1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAtMzc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAgICAg
ICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAg
ICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRl
PD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4gewogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAg
ICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjc5NzY5MzEz
NDg2MjMxNTdlKzMwODsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBkb3Vi
bGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFl
LTE2OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAxLjA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAtMTAyMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
bmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CiAgICAgICAg
c3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CiAgICAg
ICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k
X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBs
YXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPiB7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBk
b3VibGUgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2
MjZlLTQ5MzJMOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAxOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICAgIHN0
YXRpYyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAx
LjBMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9CiAgICAg
ICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3Vi
bGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs
b25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG93YXJkX3plcm87CiAgICB9OwoKfQojIDM5ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMK
IyA0MSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0
cy50Y2MiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jY3R5cGUuaCIgMSAzCiMgNDIgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVk
ZS9nKystdjMvdHlwZWluZm8iIDEgMwojIDMzICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvdHlwZWluZm8iIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
ZXhjZXB0aW9uIiAxIDMKIyAzNCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL3R5
cGVpbmZvIiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xh
c3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1MCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIHR5cGVfaW5mbwogIHsK
ICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6CgogICAg
dHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2luZm8oY29u
c3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAg
cHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFt
ZShfX24pIHsgfQoKICBwdWJsaWM6CgogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7
IHJldHVybiBfX25hbWU7IH0KIyA4NiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25z
dAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBf
X2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2Fy
ZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoK
ICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9v
bCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19j
YXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmly
dHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZv
ICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRy
KSBjb25zdDsKICB9OwoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAg
cHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2Nhc3Qo
KSB0aHJvdygpOwogIH07CgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAg
ewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJh
ZF90eXBlaWQgKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDMgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDEgMwojIDMxICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDMKCiMgMSAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAz
CiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2Rl
ZmluZXMuaCIgMSAzCiMgMzUgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5
cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGlt
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0K
IyAzMyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5o
IiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMSAzCiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzYgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMg
MzcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIg
MiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAxIDMKIyAzNCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3ZlY3Rvci5oIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgMzUgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMg
MzUgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9p
ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19p
bnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0
aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQK
ICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyAzNiAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwoj
IDM3ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGlj
OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxv
Y2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0
b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2Fs
bG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFn
ZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7
CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9y
YWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRh
X2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRl
KF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
PgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1Ymxp
YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxs
b2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0
b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBf
TV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBfVHAq
IF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7Cgog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2Nf
dHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJl
dHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShf
VHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBf
X24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0
b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2lu
c3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf
U19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl
OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShzaXplX3Qg
X19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAgX01fc3Rh
cnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFzZSgpIHsg
X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+
CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+CnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnBy
aXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVk
ZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29u
c3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9y
PHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJh
dG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVm
IHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0
X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZm
X3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3Jf
dHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl
ZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVk
OgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0
ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2ZpbmlzaDsKICB1
c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbnNl
cnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIF9NX2lu
c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4o
KSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsgfQogIGl0ZXJh
dG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CiAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KCiAg
cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl
bmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJl
dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1
cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CiAgc2l6ZV90
eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRv
cihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdAog
ICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShz
aXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJl
bmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsg
X19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAg
IGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVj
dG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01fcmFuZ2Vf
Y2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVyZW5jZSBhdChz
aXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0
aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0b3Ioc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19uLCBfX2EpCiAgICB7IF9N
X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9
CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShfX24sIGFsbG9j
YXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0
YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg
X194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBf
TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01f
c3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdmVjdG9yKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn
cmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0lu
dGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5p
dGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkg
ewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9N
X3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl
KSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBf
TV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAg
ICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9f
biwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz
aCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01f
c3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBfX3RtcCAr
IF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAg
ICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192
YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KICB2b2lkIF9NX2ZpbGxfYXNzaWdu
KHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1
dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf
X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50
ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f
dmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAo
X1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9h
c3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19m
YWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7Cgog
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogIHJlZmVyZW5jZSBmcm9udCgp
IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyBy
ZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAx
KTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEp
OyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX01fZmluaXNo
ICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7
CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVu
ZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9maW5pc2ggIT0g
X01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsr
X01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9
CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgc3RkOjpzd2FwKF9N
X3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2Zp
bmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3Rv
cmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3Qg
X1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAg
IGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQo
KSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsK
ICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwg
X194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdp
bigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9u
ID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2Zpbmlz
aDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9u
KSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2lu
c2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRl
cmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6
ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01f
cmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194
KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9f
biwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7
CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f
cG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShf
X3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBk
ZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3Ig
ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBf
X2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBkZXN0cm95KF9faSwgZW5kKCkp
OwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0
dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29u
c3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShi
ZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCks
IF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBf
X25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkg
eyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5
cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAg
cG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewogICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBf
X24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90
YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBw
dXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsK
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0
b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01f
cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAs
IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJu
IF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwg
X194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
eCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYg
X194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29u
c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j
PiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwg
X194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9w
ZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgY29u
c3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4gY2FwYWNp
dHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVu
LCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmlu
aXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVu
KSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2lu
KCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2UgewogICAgICBj
b3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQpOwogICAgICB1
bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwgX01fZmlu
aXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwogIH0KICByZXR1
cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0
b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90
eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0b3I8X1RwLCBf
QWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBfX3RtcC5zd2Fw
KCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxsKGJlZ2luKCks
IGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9m
aW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFzZShmaWxsX24o
YmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0b3I8X1RwLCBf
QWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIg
PSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5k
KCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
Pgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgp
KSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0
LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFs
bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0
YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0
ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRlcmF0b3Ig
X19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwogICAgZGVzdHJv
eShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNl
KCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFk
dmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7
CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmlu
aXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0
b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0
IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAg
Y29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsK
ICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRl
cmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwogICAgKl9fcG9z
aXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRf
c2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0g
MCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9j
YXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAg
dHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9N
X3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNlKCksIF9f
eCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCgu
Li4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShf
X25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigp
LCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmlu
aXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdf
c3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAg
Y29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsK
ICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAg
ICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9u
ID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz
aXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICog
X19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19s
ZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAg
ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCks
IF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l
d19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3X2Zp
bmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24s
IGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3
X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKTsg
dGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRl
KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0g
X19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQo
aXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0gMCkgewog
ICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7
CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNf
YWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChf
TV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAg
ICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
X19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlv
biwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwg
X194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2Zpbmlz
aCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bv
c2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBz
aXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAg
IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9y
IF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmlu
aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0
KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5p
c2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAg
IGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFs
bG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ry
b3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0
LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVy
YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICArK19fcG9zOwog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNl
cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2Zpbmlz
aCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkg
LSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAg
ICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHko
X01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNo
ICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAt
IF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3Np
dGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21p
ZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAgICAg
ICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAg
X01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9j
b3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5p
c2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0
aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29s
ZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXpl
ICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2Fs
bG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7
CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0
ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19u
ZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVy
YXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikg
eyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3
X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3koX01fc3RhcnQs
IF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAg
ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyAzOCAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAx
IDMKIyAzNCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0
b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGlu
dCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CiAgdW5z
aWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNl
KHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9N
X21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9t
YXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9N
X21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAg
aWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0Jp
dF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVy
biBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0
X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2wo
X194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUg
dm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9v
bCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0
X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBwdHJk
aWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsK
CiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195
KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91cCgp
IHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZz
ZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewog
ICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAt
IDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19p
KSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCAr
PSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChf
X24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9C
SVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQg
aW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9
PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9y
X2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9
PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g
ISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9y
X2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9w
ZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVy
biAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0
b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoK
aW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gs
IGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAo
X194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoK
CnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlw
ZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSog
cG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0
b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWdu
ZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShf
X3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVy
ZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7
CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJh
dG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgp
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9N
X2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0t
KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh
dG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5
cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9f
dG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g
X19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyBy
ZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9y
KyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCAr
IF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0
b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3Rf
cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRf
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6
IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5zaWdu
ZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShf
X3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9f
eCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoK
ICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVm
ZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVy
YXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25z
dF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRl
cmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJh
dG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsK
ICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewog
ICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYg
b3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90
eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJl
dHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJl
bmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwog
ICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10o
ZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsK
CmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25z
dCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0
b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8
Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlw
ZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0
YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5p
c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB1bnNpZ25lZCBpbnQq
IF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3Iu
YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01f
ZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9j
YXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5
cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7
CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3Rv
cmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxs
b2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9B
bGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBh
bGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9z
dG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2Nf
dHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0
dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9C
SVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAg
ICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoK
ICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVu
c2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
PgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxs
b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9B
bGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxf
QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwg
X0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2
ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+
X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMK
IyAzMTggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9y
LmgiIDIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xh
c3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAg
ewogIHB1YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXpl
X3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAg
dHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3Rf
cmVmZXJlbmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVk
ZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3Ig
aXRlcmF0b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7
CgogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl
cnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+
OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9h
bGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Omdl
dF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46
Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0
OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBf
QnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAg
ICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICB1bnNpZ25lZCBpbnQq
IF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSAr
IChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVy
YXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlw
ZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24s
IGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFn
ZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5p
c2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsK
ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAy
ICogc2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2Jp
dF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bv
c2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAqX19pKysgPSBfX3g7CiAgICAgICAg
X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICBfTV9kZWFs
bG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dP
UkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwg
MCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
ICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9
IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7
CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9N
X2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX24pOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgICAgX19wb3Mg
PSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAgICB9CiAgICB9
CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2Vy
dF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlmIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICAgIGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+
PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zp
bmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUo
X19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4g
PSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgdW5zaWduZWQgaW50KiBfX3Eg
PSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdp
bigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAgIF9faSA9IGNvcHko
X19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0
aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9C
SVQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgfQogICAg
ICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3Rh
cnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7
IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgp
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBz
aXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29u
c3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29u
c3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9y
YWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg
X19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0K
ICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAg
IHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQg
X01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19uID49IHRo
aXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4iKTsK
ICAgIH0KCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgeyBfTV9yYW5nZV9j
aGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYXQo
c2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g
KCp0aGlzKVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBl
JiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihf
X2EpIHt9CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAgICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAg
OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICBfTV9pbml0aWFsaXplKF9f
bik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUg
PyB+MCA6IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAg
ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0b3JfdHlwZSgpKQogICAgewogICAgICBf
TV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0
b3JhZ2UsIDApOwogICAgfQoKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkgOiBfQnZlY3Rv
cl9iYXNlPF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3IoKSkgewogICAgICBfTV9pbml0aWFsaXpl
KF9feC5zaXplKCkpOwogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0
KTsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5p
dGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUp
IHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9N
X2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2Uo
X19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgY29uc3QgYWxs
b2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luaXRpYWxpemVf
ZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgfnZlY3Rv
cigpIHsgfQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICAg
IGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsKICAgICAgaWYgKF9feC5zaXplKCkgPiBj
YXBhY2l0eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2luaXRpYWxp
emUoX194LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgp
LCBiZWdpbigpKTsKICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShf
X3guc2l6ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCgogICAgdm9pZCBfTV9m
aWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID4gc2l6ZSgp
KSB7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8g
fjAgOiAwKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAg
ICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsK
ICAgICAgfQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7IF9N
X2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0
ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9f
Zmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
SW50ZWdlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVn
ZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9f
biwgKGJvb2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogICAg
dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgX19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0
LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf
aXRlcmF0b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2Zp
cnN0KQogICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2Vy
dChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgICAgIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkp
CiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAg
ICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAg
ICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwg
YmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQog
ICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0
eSgpIDwgX19uKSB7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19u
KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgpLCBpdGVyYXRvcihfX3Es
IDApKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRv
cihfX3EsIDApOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09S
RF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250
KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0
IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5k
KCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVu
ZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9m
aW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBf
X3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQog
ICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2Fw
KF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3gu
X01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5k
X29mX3N0b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bv
c2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9z
dG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194
OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAg
ICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50
ZWdlcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdl
ciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90
eXBlKSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2Zp
cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5w
dXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRj
aChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2
b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJv
b2wgX194KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHko
KSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVu
ZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bv
c2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAg
X01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2Ugewog
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAg
ICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJh
dG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAg
ICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19w
b3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICBfTV9k
ZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBf
X1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f
cSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0
aW9uLCBfX24sIF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7
IH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9f
cG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgp
LCBfX3Bvc2l0aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRp
b247CiAgICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpIHsKICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsK
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19u
ZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXpl
KCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwg
ZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6
ZSgpLCBfX3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKHVuc2lnbmVkIGlu
dCogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9vZl9zdG9yYWdlOyArK19fcCkK
ICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn
aW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3Zl
Y3RvcjsKCn0KIyAzOSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3ZlY3Rvci5oIiAyIDMKIyA0NCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2Fs
ZSYgX19vdGhlcikKICAgIHsKICAgICAgbG9jYWxlIF9fY29weSgqdGhpcyk7CiAgICAgIF9fY29w
eS5fTV9pbXBsLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQp
OwogICAgICByZXR1cm4gX19jb3B5OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxvY2FsZTo6
b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3RkOjpjb2xs
YXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlKiBf
X2Zjb2xsID0gJnVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4g
KF9fZmNvbGwtPmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEo
KSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl
dD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgewogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0
OwogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAgX192ZWNfZmFj
ZXQqIF9fZmFjZXQgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGNvbnN0IGxvY2Fs
ZTo6ZmFjZXQqIF9fZnAgPSAoKl9fZmFjZXQpW19faV07CiAgICAgIGlmIChfX2ZwID09IDAgfHwg
X19pID49IF9fZmFjZXQtPnNpemUoKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mcCk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUm
IF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1wbDo6X192ZWNf
ZmFjZXQgX192ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2luZGV4
OwogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsK
ICAgICAgcmV0dXJuIChfX2kgPCBfX2ZhY2V0LT5zaXplKCkgJiYgKCpfX2ZhY2V0KVtfX2ldICE9
IDApOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBf
Q2hhclQ+CiAgICBfSW5JdGVyCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIgX19zLCBfSW5J
dGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQ+KiBfX3RhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgIGludCogX19t
YXRjaGVzLCBpbnQmIF9fcmVtYWluLCBib29sJiBfX2VvZikKICAgIHsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICBfX2VvZiA9IGZhbHNlOwog
ICAgICBmb3IgKGludCBfX3RpID0gMDsgX190aSA8IF9fbnRhcmdzOyArK19fdGkpCiAgICAgICAg
X19tYXRjaGVzW19fdGldID0gX190aTsKICAgICAgX19yZW1haW4gPSBfX250YXJnczsKICAgICAg
c2l6ZV90IF9fcG9zID0gMDsKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBpbnQgX190aSA9
IDA7CiAgICAgICAgICB3aGlsZSAoX190aSA8IF9fcmVtYWluICYmIF9fcG9zID09IF9fdGFyZ2V0
c1tfX21hdGNoZXNbX190aV1dLnNpemUoKSkKICAgICAgICAgICAgKytfX3RpOwogICAgICAgICAg
aWYgKF9fdGkgPT0gX19yZW1haW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19w
b3MgPT0gMCkgX19yZW1haW4gPSAwOwogICAgICAgICAgICAgIHJldHVybiBfX3M7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChfX3MgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZW9mID0gdHJ1
ZTsKICAgICAgICAgIGJvb2wgX19tYXRjaGVkID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGludCBf
X3RpMiA9IDA7IF9fdGkyIDwgX19yZW1haW47ICkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fdGFyZ2V0ID0gX190YXJnZXRzW19fbWF0Y2hlc1tfX3Rp
Ml1dOwogICAgICAgICAgICAgIGlmIChfX3BvcyA8IF9fdGFyZ2V0LnNpemUoKSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fZW9mIHx8IF9fdGFyZ2V0W19fcG9zXSAh
PSAqX19zKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fbWF0
Y2hlc1tfX3RpMl0gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fbWF0
Y2hlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytfX3RpMjsKICAg
ICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbWF0Y2hlZCkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICsrX19zOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjspCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX19wb3MgPiBfX3RhcmdldHNbX19tYXRjaGVzW19fdGkzXV0uc2l6
ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aTNd
ID0gX19tYXRjaGVzWy0tX19yZW1haW5dOwogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICArK19fdGkzOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICB3aGlsZSAoX19yZW1haW4pOwogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9Gb3Jt
YXRfY2FjaGUoKQogICAgOiBfTV92YWxpZCh0cnVlKSwgX01fdXNlX2dyb3VwaW5nKGZhbHNlKQog
ICAgeyB9CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2Fj
aGUoKTsKCiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9j
YWNoZSgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfRm9ybWF0
X2NhY2hlPF9DaGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQogICAgewogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYyAoKTsKICAgICAgbnVtcHVuY3Q8X0NoYXJUPiBjb25z
dCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfTV90
cnVlbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgX01fZmFsc2VuYW1lID0gX19ucC5mYWxz
ZW5hbWUoKTsKICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwog
ICAgICBfTV9kZWNpbWFsX3BvaW50ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CiAgICAgIF9NX2dy
b3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91
cGluZy5zaXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsKICAgICAgX01f
dmFsaWQgPSB0cnVlOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZv
aWQKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6
ZXZlbnQgX19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQogICAgewogICAg
ICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX19peCk7CiAgICAgIHN3aXRjaCAoX19ldikKICAg
ICAgICB7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6ZXJhc2VfZXZlbnQ6CiAgICAgICAgICBkZWxl
dGUgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgICAgIF9f
cCA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjpjb3B5Zm10X2V2
ZW50OgoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hl
PF9DaGFyVD47IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAg
ICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjppbWJ1ZV9ldmVudDoKICAgICAgICAgIHN0
YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCktPl9NX3ZhbGlkID0gZmFsc2U7
CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJU
Pjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykKICAgIHsKICAgICAgaWYgKCFfU19wd29yZF9peCkK
ICAgICAgICBfU19wd29yZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsKICAgICAgdm9pZComIF9f
cCA9IF9faW9zLnB3b3JkKF9TX3B3b3JkX2l4KTsKCgogICAgICBpZiAoX19wID09IDApCiAgICAg
ICAgewogICAgICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+ID4gX19hcChuZXcg
X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KTsKICAgICAgICAgIF9faW9zLnJlZ2lzdGVyX2NhbGxiYWNr
KCZfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1NfcHdvcmRfaXgpOwogICAgICAgICAgX19wID0gX19hcC5yZWxlYXNl
KCk7CiAgICAgICAgfQogICAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fbmNwID0gc3RhdGlj
X2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgaWYgKCFfX25jcC0+X01f
dmFsaWQpCiAgICAgICAgX19uY3AtPl9NX3BvcHVsYXRlKF9faW9zKTsKCiAgICAgIHJldHVybiBf
X25jcDsKICAgIH0KIyAyNTAgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9N
X2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAogICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAgIGludCYgLCBib29sICkg
Y29uc3QKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bV9nZXQ8Y2hh
ciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3QoaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRv
cjxjaGFyPiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwKICAgICAgICAgICAgICAg
Ym9vbCBfX2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAg
IHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQogICAg
ICAgIHsKCgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAgICAgICAg
IGludCBfX2Jhc2U7CiAgICAgICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgICAgIGNoYXIqIF9fc2FuaXR5Owog
ICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgICAgICBsb25nIF9fbCA9
IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJy
ICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19sIDw9IDEKICAgICAgICAg
ICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgICAgICBfX3YgPSBfX2w7CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgog
ICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2NhY2hlPGNoYXJf
dHlwZT4gX19mY2FjaGVfdHlwZTsKICAgICAgICAgIF9fZmNhY2hlX3R5cGUqIF9fZm10ID0gX19m
Y2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8pOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3Ry
dWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19mYWxzZSA9IF9fZm10LT5fTV9mYWxzZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0
IHNpemVfdCBfX3RydWVsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX190cnVlKSAtIDE7CiAg
ICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChf
X2ZhbHNlKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19wb3MgPSAwOyBfX2JlZyAhPSBf
X2VuZDsgKytfX3BvcykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2Mg
PSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX2MgPT0gX19mYWxzZVtf
X3Bvc107CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107
CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYg
KF9fdGVzdGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9PSBfX3RydWVs
ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
ICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2Zi
aXQ7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1ww
J307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsK
ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19sID0gc3RydG9s
KF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl
OjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9
PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYgX19sID49
ICgtMzI3NjctMSkgJiYgX19sIDw9IDMyNzY3KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHNo
b3J0PihfX2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50JiBfX3YpIGNv
bnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAgICAgaW50IF9f
YmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMs
IF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9f
bG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5p
dHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAg
ICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0yMTQ3NDgzNjQ3IC0x
KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9f
bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAog
ICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsK
ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
ZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9f
YmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAm
JiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xv
Y2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog
ICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBf
X3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBj
aGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxv
bmcgbG9uZyBfX2xsID0gc3RydG9sbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAg
aWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9
IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09
IDApCiAgICAgICAgX192ID0gX19sbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1sz
Ml09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9f
c2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgdW5zaWduZWQg
bG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYg
KCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9f
eHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAK
ICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydc
MCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7
CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9f
dWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2Vy
ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm
ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAg
ICAgJiYgX191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNb
MzJdID0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciog
X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25l
ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBp
ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g
X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0g
MCkKICAgICAgICBfX3YgPSBfX3VsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRy
Y1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIq
IF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIF9fdWxsID0gc3RydG91bGwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7
CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nh
bml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWxsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMy
XT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nh
bml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBmbG9hdCBfX2Yg
PSBzdHJ0b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2VyciAmIGlvc19i
YXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0
eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBf
X2Y7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QK
ICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7
CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh
c2UsIHRydWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMDsKICAgICAgZG91YmxlIF9fZCA9IHN0cnRvZChfX3h0cmMsICZfX3Nhbml0eSk7
CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nh
bml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fZDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRy
Y1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciog
X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIGRv
dWJsZSBfX2xkID0gc3RydG9sZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAgIGlmICghKF9fZXJy
ICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYg
Kl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAg
IF9fdiA9IF9fbGQ7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2NzggIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2
b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
Zm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRm
bGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVs
ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlv
c19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAo
aW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKCgoKICAgICAgY2hhciBfX3h0
cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcs
IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFy
KiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIHZvaWQq
IF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5
LCBfX2Jhc2UpKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAg
ICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX192cDsKICAgICAgZWxzZQogICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQp
OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGlubGluZSBfT3V0SXRlcgogICAgX19wYWQoX091dEl0
ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKTsKCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1JhSXRlcj4KICAgIF9SYUl0ZXIKICAgIF9fcGFkKF9SYUl0
ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nLAogICAgICAgICAgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZpbGxfbihfX3MsIF9fZmlsbCk7CiAgICAg
IHJldHVybiBfX3MgKyBfX3BhZGRpbmc7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVGFnPgogICAgX091dEl0ZXIKICAgIF9f
cGFkKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywgX1RhZykKICAg
IHsKICAgICAgd2hpbGUgKC0tX19wYWRkaW5nID49IDApIHsgKl9fcyA9IF9fZmlsbDsgKytfX3M7
IH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVy
IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZykKICAgIHsKICAgICAgcmV0dXJuIF9f
cGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X091dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgIH0KCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgX19wYWRfbnVtZXJpYyhfT3V0SXRlciBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyAsCiAg
ICAgICAgICAgICAgICAgIF9DaGFyVCAsIGludCAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBj
b25zdCogLCBfQ2hhclQgY29uc3QqICwKICAgICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiAp
CiAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4KICAgIF9fcGFkX251bWVyaWMob3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3Ms
CiAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGwsIGludCBfX3dpZHRoLCBfQ2hhclQgY29u
c3QqIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9D
aGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJUPiBfX291dF9pdGVyOwogICAgICBpbnQgX19wYWRkaW5nID0gX193aWR0aCAtIChf
X2xhc3QgLSBfX2ZpcnN0KTsKICAgICAgaWYgKF9fcGFkZGluZyA8IDApCiAgICAgICAgX19wYWRk
aW5nID0gMDsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAmIGlv
c19iYXNlOjphZGp1c3RmaWVsZDsKICAgICAgYm9vbCBfX3Rlc3RmaWVsZCA9IF9fcGFkZGluZyA9
PSAwIHx8IF9fYWZsYWdzID09IGlvc19iYXNlOjpsZWZ0CiAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6aW50ZXJuYWw7CgoKICAgICAgaWYgKF9fZmlyc3Qg
IT0gX19taWRkbGUpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Rlc3RmaWVsZCkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOwogICAg
ICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19m
aXJzdCwgX19taWRkbGUsIF9fcyk7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9fczIgPSBf
X3M7CgogICAgICBpZiAoX19wYWRkaW5nICYmIF9fYWZsYWdzICE9IGlvc19iYXNlOjpsZWZ0KQog
ICAgICAgIHsKICAgICAgICAgIF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAg
ICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9fczMgPSBjb3B5
KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOwogICAgICBpZiAoX19wYWRkaW5nKQogICAgICAgIF9f
cGFkKF9fczMsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgcmV0dXJuIF9fczM7CiAgICB9Cgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAg
IHsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFn
cyA9IF9faW8uZmxhZ3MoKTsKCiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpib29sYWxw
aGEpID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192Owog
ICAgICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNl
LCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fZmlyc3Q7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbGFzdDsKICAg
ICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2ZpcnN0ID0gX19m
bXQtPl9NX3RydWVuYW1lLmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsg
X19mbXQtPl9NX3RydWVuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxzZW5hbWUu
ZGF0YSgpOwogICAgICAgICAgICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fZmFsc2Vu
YW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fZ3JvdXBfZGlnaXRzKF9DaGFyVCog
X19zLCBfQ2hhclQgX19ncnNlcCwgY2hhciBjb25zdCogX19ncm91cGluZywKICAgICAgICAgICAg
ICAgICAgICBjaGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xh
c3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19n
cm91cF9kaWdpdHMoX19zLCBfX2dyc2VwLAogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9
PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwKICAgICAgICAgICAgICBf
X2dyZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19ncm91cGluZyk7CiAgICAgICAgICBfX2ZpcnN0
ID0gX19sYXN0IC0gKl9fZ3JvdXBpbmc7CiAgICAgICAgICAqX19zKysgPSBfX2dyc2VwOwogICAg
ICAgIH0KICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwog
ICAgICAgIH0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJuIF9f
czsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIs
IHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRfaW50ZWdlcihfT3V0
SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29sIF9fbmVnLAogICAg
ICAgICAgICAgIF9WYWx1ZVQgX192KQogICAgewoKICAgICAgY29uc3QgbG9uZyBfTV9yb29tID0g
bnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICogMiArIDQ7CiAgICAgIF9DaGFyVCBf
X2RpZ2l0c1tfTV9yb29tXTsKICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdpdHMgKyBfTV9y
b29tOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAg
ICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2FjaGU8X0No
YXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0gX19mbXQtPl9T
X2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf
X2Jhc2VmaWVsZCA9IChfX2ZsYWdzICYgX19pby5iYXNlZmllbGQpOwogICAgICBfQ2hhclQqIF9f
c2lnbl9lbmQgPSBfX2Zyb250OwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Omhl
eCkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2Up
CiAgICAgICAgICAgIF9fdGFibGUgKz0gMTY7CiAgICAgICAgICBkbwogICAgICAgICAgICAqLS1f
X2Zyb250ID0gX190YWJsZVtfX3YgJiAxNV07CiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gNCkg
IT0gMCk7CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICAgIGlmIChfX2Zs
YWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKi0t
X19mcm9udCA9IF9fZm10LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfeCArCiAgICAgICAgICAgICAg
ICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDogMCldOwogICAg
ICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIHsK
ICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19fdiAmIDddOwog
ICAgICAgICAgd2hpbGUgKChfX3YgPj49IDMpICE9IDApOwogICAgICAgICAgaWYgKF9fZmxhZ3Mg
JiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxjaGFyPigq
X19mcm9udCkgIT0gX190YWJsZVswXSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVb
MF07CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CgogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVb
X192ICUgMTBdOwogICAgICAgICAgd2hpbGUgKChfX3YgLz0gMTApICE9IDApOwogICAgICAgICAg
X19zaWduX2VuZCA9IF9fZnJvbnQ7CgogICAgICAgICAgaWYgKF9fbmVnIHx8IChfX2ZsYWdzICYg
aW9zX2Jhc2U6OnNob3dwb3MpKQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQtPl9TX2xp
dGVyYWxzW19fZm10LT5fU19wbHVzIC0gX19uZWddOwogICAgICAgIH0KCgogICAgICBpZiAoIV9f
Zm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkKICAgICAgICByZXR1cm4gY29w
eShfX2Zyb250LCBfX2RpZ2l0cyArIF9NX3Jvb20sIF9fcyk7CgogICAgICBpZiAoIV9fZm10LT5f
TV91c2VfZ3JvdXBpbmcpCiAgICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMoX19zLCBfX2ZsYWdz
LCBfX2ZpbGwsIF9faW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19m
cm9udCwgX19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9yb29tKTsKCiAgICAgIF9DaGFyVCogX19w
ID0gX19kaWdpdHM7CiAgICAgIHdoaWxlIChfX2Zyb250IDwgX19zaWduX2VuZCkKICAgICAgICAq
X19wKysgPSAqX19mcm9udCsrOwogICAgICBjb25zdCBjaGFyKiBfX2dyID0gX19mbXQtPl9NX2dy
b3VwaW5nLmRhdGEoKTsKICAgICAgX19mcm9udCA9IF9fZ3JvdXBfZGlnaXRzKF9fcCwgX19mbXQt
Pl9NX3Rob3VzYW5kc19zZXAsIF9fZ3IsCiAgICAgICAgX19nciArIF9fZm10LT5fTV9ncm91cGlu
Zy5zaXplKCksIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CiAgICAgIHJldHVybiBf
X3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBfX2lvLndpZHRoKDApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2RpZ2l0cywgX19wLCBfX2Zyb250KTsKICAgIH0KCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog
ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgewog
ICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsK
ICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcgPSB0cnVlOwogICAg
ICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVn
ZXIoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbmVnLCBfX3V2KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1
dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNv
bnN0CiAgICB7IHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxz
ZSwgX192KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBs
b25nIF9fdikgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdXYgPSBfX3Y7
CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewog
ICAgICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2IsIF9fZmlsbCwgX19uZWcsIF9f
dXYpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX19vdXRwdXRf
aW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7IH0KCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIF9fb3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8s
IF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBz
aXplX3QgX19zbGVuKQogICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJULCBfVHJhaXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRv
cjxfQ2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAg
ICBfQ2hhclQgX19maWxsLCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3NsZW4pCiAgICB7
CiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xl
bikgPwogICAgICAgICAgICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1fX3NsZW4gOiAwOwog
ICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNv
bnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlvc19i
YXNlOjpmbXRmbGFncyBfX2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVz
dGZpZWxkOwogICAgICBjb25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3NwdHIgKyBfX3NsZW47
CgogICAgICBpZiAoX19hZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAgICAgICB7Cgog
ICAgICAgICBpZiAoX19zcHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcrJyB8fCAqX19zcHRy
ID09ICctJykpCiAgICAgICAgICAgewogICAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19z
cHRyKTsKICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgKytfX3NwdHI7CiAgICAgICAg
ICAgfQogICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAg
ICAgX19wYWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpmaWVsZCAhPSBp
b3NfYmFzZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmls
bCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQoKICAgICAg
Y2hhciBfX2RlY2ltYWxfcG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludCk7CiAg
ICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9D
aGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7ICsrX19z
LCArK19fc3B0cikKICAgICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9w
b2ludCkKICAgICAgICAgICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2ludDsKCiAgICAgICAg
IGVsc2UKICAgICAgICAgICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAgICAgfQoKICAg
ICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsK
ICAgICAgX19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgYm9vbAogIF9f
YnVpbGRfZmxvYXRfZm9ybWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19t
b2RpZmllciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK
ICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAg
ewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpkaWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNp
b24oKTsKCiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9fcHJlYyA9IF9f
bWF4X3ByZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07CiAgICAgIHNpemVf
dCBfX3NsZW47CgogICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChfX2J1aWxkX2Zsb2F0
X2Zvcm1hdChfX2lvLCBfX2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19zbGVuID0gc3ByaW50
ZihfX3NidWYsIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgX19zbGVu
ID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBfX291dHB1dF9m
bG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9IG51bWVyaWNf
bGltaXRzPGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXplIF9fcHJl
YyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJlYykKICAg
ICAgICBfX3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAq
IDJdOwogICAgICBzaXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwoKICAgICAg
aWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3ByZWMpKQogICAg
ICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsKICAgICAg
ZWxzZQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7CgogICAg
ICByZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVu
KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGlvc19iYXNlOjpm
bXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAg
ICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6
YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJj
YXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10
bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAgICAgIHRyeSB7
CiAgICAgICAgX091dEl0ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2Zp
bGwsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsKICAg
ICAgICByZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgX19p
by5mbGFncyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAgc3RydWN0IF9X
ZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfV2Vl
a2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9T
X25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hh
ciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFtZXNbMTRdID0K
ICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRheSIsICJUdWUi
LCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJUaHVyc2RheSIs
ICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CiMgMTEzNSAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0cnVj
dCBfTW9udGhuYW1lczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9N
b250aG5hbWVzPGNoYXIsX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgX1Nf
bmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCBjaGFy
KiBjb25zdAogICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQogICAg
ewogICAgICAiSmFuIiwgIkphbnVhcnkiLCAiRmViIiwgIkZlYnJ1YXJ5IiwgIk1hciIsICJNYXJj
aCIsCiAgICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsCiAg
ICAgICJKdWwiLCAiSnVseSIsICJBdWciLCAiQXVndXN0IiwgIlNlcCIsICJTZXB0ZW1iZXIiLAog
ICAgICAiT2N0IiwgIk9jdG9iZXIiLCAiTm92IiwgIk5vdmVtYmVyIiwgIkRlYyIsICJEZWNlbWJl
ciIKICAgIH07CiMgMTE2OCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
bG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01fZGF5bmFtZXMpCiAgICAgICAgewogICAgICAg
ICAgX01fZGF5bmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMTRdOwogICAgICAgICAg
Zm9yIChpbnQgX19pID0gMDsgX19pIDwgMTQ7ICsrX19pKQogICAgICAgICAgICBfTV9kYXluYW1l
c1tfX2ldID0gX1dlZWtkYXluYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOwogICAgICAgIH0K
ICAgICAgYm9vbCBfX2F0X2VvZiA9IGZhbHNlOwogICAgICBpbnQgX19yZW1haW4gPSAwOwogICAg
ICBpbnQgX19tYXRjaGVzWzE0XTsKICAgICAgaXRlcl90eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJh
bGxlbChfX3MsIF9fZW5kLCAxNCwgX01fZGF5bmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwogICAgICBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9
IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAgICAgX19yZW1h
aW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkKICAgICAg
ICBfX3QtPnRtX3dkYXkgPSAoX19tYXRjaGVzWzBdPj4xKTsKICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1l
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9f
cywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgewogICAgICBpZiAo
IV9NX21vbnRobmFtZXMpCiAgICAgICAgewogICAgICAgICAgX01fbW9udGhuYW1lcyA9IG5ldyBi
YXNpY19zdHJpbmc8X0NoYXJUPlsyNF07CiAgICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kg
PCAyNDsgKytfX2kpCiAgICAgICAgICAgIF9NX21vbnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVz
PF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAgICAgfQogICAgICBib29sIF9fYXRfZW9mID0g
ZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAgICAgIGludCBfX21hdGNoZXNbMjRdOwog
ICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKCBfX3MsIF9fZW5kLCAyNCwg
X01fbW9udGhuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwogICAgICBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9IF9faW8uZW9mYml0OwogICAg
ICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAgICAgX19yZW1haW4gPT0gMiAmJiAoX19tYXRj
aGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkKICAgICAgICBfX3QtPnRtX21vbiA9IChf
X21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gX19pby5mYWlsYml0
OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cn0KIyA0MiAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAzMyAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJl
YW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29z
KF9fb3MpCiAgICB7CgogICAgICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29z
LnRpZSgpLT5mbHVzaCgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlw
ZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5
cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
eyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAo
Kl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYo
KnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz
LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy
YXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkK
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAg
ICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVk
KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24p
LmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo
aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19i
YXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYg
aW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAg
X19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWls
ZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo
aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAg
ICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCks
IF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91
YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51
bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAg
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRo
aXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
ZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzdHJlYW1zaXpl
IF9feHRyY3QgPSAwOwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRi
dWYoKTsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX3NiaW4gJiYgX19j
ZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBf
X3Nib3V0KTsKICAgICAgaWYgKCFfX3NiaW4gfHwgIV9feHRyY3QpCiAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYo
KS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmIChfX3B1dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoX19jKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0No
YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0
ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAh
PSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQog
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAg
ICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBib29sIF9fdGVz
dG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAg
X19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19i
YXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBl
IF9fcG9zKQogICAgewogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7
CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2Vy
ciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAg
ICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9f
ZCkKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAg
ICAgaWYgKF9fdGVzdG9rKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0
aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAg
ICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShmYWlsYml0KTsKICAgICAgICB9CgogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CiMgNDU3ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRj
YyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZv
aWQKICAgIF9fcGFkX2NoYXIoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAg
ICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sIGNvbnN0IHN0cmVhbXNpemUgX19vbGRs
ZW4pCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpp
bnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIGludF90eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNp
emVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIGNoYXJfdHlwZSogX19wYWRzID0gc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAq
IF9fcGxlbikpOwogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2lv
cy5maWxsKCkpOwoKICAgICAgY2hhcl90eXBlKiBfX2JlZzsKICAgICAgY2hhcl90eXBlKiBfX2Vu
ZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVz
dGZpZWxkOwoKICAgICAgaWYgKF9fZm10ID09IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKCiAg
ICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICAg
IF9fYmVnbGVuID0gX19vbGRsZW47CiAgICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAgICB9
CiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19iYXNlOjppbnRlcm5hbCkKICAgICAgICB7CgoK
CiAgICAgICAgICB0eXBlZGVmIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiBfX2NhY2hlX3R5cGU7CiAg
ICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10ID0gX19jYWNoZV90eXBlOjpfU19nZXQo
X19pb3MpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21pbnVzID0gdHJhaXRzX3R5cGU6
OmZpbmQoX19vbGRzLCBfX29sZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19taW51cyk7CiAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10
LT5fU19wbHVzKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9fbWludXMgfHwgX19wbHVz
OwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29sZHNbMF0gPT0gJzAnCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0gPT0gJ3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcp
OwoKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFd
OwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBjb25zdF9j
YXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9
IF9fb2xkbGVuIC0gX19tb2Q7CiAgICAgICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX21vZCArPSBfX3BsZW47CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf
X3NpZ24gPSBfX21pbnVzID8gX19taW51cyArIDE6IF9fcGx1cyArIDE7CiAgICAgICAgICAgICAg
X19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgICAgX19i
ZWdsZW4gPSBfX3NpZ24gLSBfX29sZHM7CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0
PGNoYXJfdHlwZSo+KF9fc2lnbiArIF9fcGxlbik7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywgX19wbGVuKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRz
OwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0g
Y29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAg
X19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBl
Kj4oX19vbGRzKTsKICAgICAgICB9CgogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX25ld3MsIF9f
YmVnLCBfX2JlZ2xlbik7CiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVu
LCBfX2VuZCwgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9fb3V0LCBfQ2hhclQgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFt
X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cg
PSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAg
ICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVu
ID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgJl9fYywgX193LCBfX2xl
bik7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0
LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAg
IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBf
X3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7CiAg
ICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19s
ZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3csIF9f
bGVuKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19v
dXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0
LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0g
X19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0
PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAg
ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0
czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3Ms
IF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAg
ICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0
LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVh
bV90eXBlOwoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7
CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fY3Ry
YWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19j
YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsg
MSkpKTsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8PSBfX2NsZW47ICsrX19p
KQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAg
ICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2Ns
ZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAg
ICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h
bGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9f
bGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0
LCBfX3BhZHMsIF9fd3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9f
cGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291
dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsK
ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl
OwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAg
Y2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+
KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFk
cywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAg
ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6
c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXpl
IF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19j
YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAg
ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5z
aXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAg
ICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAg
ICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRu
KF9fcywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19y
ZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KfQojIDI3OSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzCiMgNDEgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMK
IyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5o
IiAxIDMKIyAzOCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lz
dHJlYW0uaCIgMwoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zLmgiIDEgMwojIDQwICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGltaXRzLmgiIDEgMwojIDQxICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVk
ZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAg
ICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAg
ICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAg
IHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAg
ICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2Nv
dW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5k
IGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
X19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUm
KSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpf
X3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+
Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hv
cnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGlu
dCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVk
IGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcm
IF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBs
b25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcg
bG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2ln
bmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxv
bmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
dm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291
bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlw
ZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJf
dHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19p
c3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICAgIHsgcmV0dXJuIGdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlw
ZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3Ry
ZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIGdldChfX3NiLCB0aGlzLT53aWRlbign
XG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9f
aXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bikKICAgICAgeyByZXR1cm4gZ2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0gMSwg
aW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRfdHlwZQog
ICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgcmVhZHNv
bWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAgICBwb3Nf
dHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVr
Zyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5cGUs
IGlvc19iYXNlOjpzZWVrZGlyKTsKCiAgICBwcml2YXRlOgoKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj0oY29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJhc2ljX2lz
dHJlYW0oY29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgX19pc3RyZWFtX3R5cGU6
Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0
czo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNl
KTsKCiAgICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6
CiAgICAgIGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYg
X19jKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwg
X1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9f
aW4sIHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo
YXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4g
Pj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
IF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFp
dHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAo
X19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0K
ICAgIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGlj
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl
OwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0
cmVhbV90eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9z
dHJlYW0oKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwp9CgoKCgojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzMiAiL2hvbWUy
L21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDMKIyAxICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDEgMwojIDMz
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFtLnRjYyIgMiAz
CiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0u
aCIgMSAzCiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJl
YW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vu
dHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJv
b2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAg
ICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwog
ICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tp
cHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBf
X2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBf
X2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19jICE9IF9fZW9mICYm
IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgX19j
ID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAg
ICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAg
ICB9CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1
ZTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAg
ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikp
CiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewog
ICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0
aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29s
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f
ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv
cj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6
Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0
KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg
ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4obG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp
OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg
ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVu
c2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm
YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAg
ICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g
aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl
dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxv
bmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo
aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs
IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgIHN0cmVh
bXNpemUgX194dHJjdCA9IDA7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMt
PnJkYnVmKCk7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9f
c2JvdXQgJiYgX19jZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhp
cywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBf
X2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAg
ICAgICAgaWYgKF9fYyAhPSBfX2VvZikKICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYnVmdmFs
ID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmIChfX2J1ZnZhbCAh
PSBfX2VvZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0g
MTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1
ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19u
ID4gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVs
aW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp
OwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAg
ICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgYm9v
bCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291
bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl
KF9fYyk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBf
X2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09
IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2Nv
dW50ID09IF9fbiAtIDEpCiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAg
ICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2dj
b3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBj
aGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgaW50X3R5cGUgX19jOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g
dGhpcy0+cmRidWYoKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
Y29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxp
bSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAg
ICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wg
X190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0cHV0ID0g
dHJ1ZTsKCiAgICAgICAgICAgICAgd2hpbGUgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAg
ICAgICAgICAgICAgICAgICAgJiYgKF9fdGVzdHB1dCA9IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6
OnRvX2NoYXJfdHlwZShfX2MpKQogICAgICAgICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAg
ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190
ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9f
YyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0
ZGVsaW0gfHwgIV9fdGVzdHB1dCkKICAgICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tj
KHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgaWYgKF9fdGVz
dGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9f
Y2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2dj
b3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2Mg
PSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg
ICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Rl
bGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwog
ICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAg
ICB3aGlsZSAoX01fZ2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6
dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygp
OwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX190ZXN0
ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9
PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVv
ZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9f
c2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAg
IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7
CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9f
c2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19p
ZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAg
ICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgo
KSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv
ZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsr
X01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg
ICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBf
X3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBpZiAoKF9NX2djb3VudCA9PSBfX24gLSAxICYmICFfX3Rlc3Rlb2YpIHx8IF9fdGVzdGRl
bGltKQogICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgaWYgKF9fdGVz
dGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsK
ICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1Zigp
LT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f
biA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1
ZigpOwogICAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAg
ICAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAg
ICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBl
Ojp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog
ICAgICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAg
ICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg
ICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg
ICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0
cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlm
IChfX24gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5p
bl9hdmFpbCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0gIT0gc3RhdGljX2Nhc3Q8c3Ry
ZWFtc2l6ZT4oX19lb2YpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICAgICAgX01fZ2Nv
dW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHB1dGJhY2soY2hhcl90
eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAg
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAg
ICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9fYykgPT0gX19lb2YpCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq
IF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX2VvZiA9
PSBfX3NiLT5zdW5nZXRjKCkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1
ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX3JldCA9PSBfX3NiLT5wdWJzeW5jKCkp
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IDA7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0
eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAg
cG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJk
YnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19w
b3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUo
b2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9z
X2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9
IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoK
CiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0
KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9f
aW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19z
dHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
bnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0
eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0g
MDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAg
ICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmlj
X2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIGludF90
eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5
cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0
ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBf
X251bSAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJh
Y3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg
ICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0
c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICBfX3NiLT5z
cHV0YmFja2MoX19jKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5
cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2lu
LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAg
ICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpjaGFyX3R5cGUgX19jaGFy
X3R5cGU7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAg
ICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7
CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19p
bnRfdHlwZSBfX2M7CiAgICAgIGJvb2wgX190ZXN0ZW9mOwogICAgICBib29sIF9fdGVzdHNwOwoK
ICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg
ICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw
ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgfQogICAgICB3aGlsZSAoIV9f
dGVzdGVvZiAmJiBfX3Rlc3RzcCk7CgogICAgICBpZiAoIV9fdGVzdGVvZiAmJiAhX190ZXN0c3Ap
CiAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJl
YW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlw
ZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19z
dHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4
dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy
YihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19z
dHIuZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAg
ICAgICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19j
YXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgY29uc3QgX19jdHlw
ZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgX19p
bnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUg
X19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBl
LT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbiAmJiAhX190
ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9
IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7
CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0
ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMo
Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX190
ZXN0ZW9mKQogICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9f
aW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAg
X19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkK
ICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry
ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBl
IF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3Ry
ZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAg
ICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0g
ZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s
IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNl
KCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAg
ICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsK
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg
ICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRf
dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg
PT0gX19pZGVsaW07CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAg
ICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
dGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9f
Y2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAg
ICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0g
X19lb2Y7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgIF9faW4uc2V0c3Rh
dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYm
ICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U
cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikK
ICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9Cn0K
IyAyOTEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt
LmgiIDIgMwojIDQyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
aW9zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBleHRlcm4gaXN0cmVhbSBjaW47CiAg
ZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVhbSBjZXJyOwogIGV4dGVybiBvc3Ry
ZWFtIGNsb2c7CiMgNTcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3N0cmVhbS5oIiAzCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMzIg
Ii9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pb3N0cmVhbS5oIiAyIDMKCnVzaW5n
IHN0ZDo6aW9zdHJlYW07CnVzaW5nIHN0ZDo6b3N0cmVhbTsKdXNpbmcgc3RkOjppc3RyZWFtOwp1
c2luZyBzdGQ6OmlvczsKdXNpbmcgc3RkOjpzdHJlYW1idWY7Cgp1c2luZyBzdGQ6OmNvdXQ7CnVz
aW5nIHN0ZDo6Y2luOwp1c2luZyBzdGQ6OmNlcnI7CnVzaW5nIHN0ZDo6Y2xvZzsKCgoKCgoKCnVz
aW5nIHN0ZDo6d3M7CnVzaW5nIHN0ZDo6ZW5kbDsKdXNpbmcgc3RkOjplbmRzOwp1c2luZyBzdGQ6
OmZsdXNoOwojIDEwICIvaG9tZS9tYXJjby9IbWZlL0hlbE1vL0luY2x1ZGUvR2VvTWF0aExpYi9U
ZW5zb3IuaGgiIDIKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaW9tYW5p
cC5oIiAxIDMKIyAzMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2lvbWFuaXAu
aCIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9pb3N0cmVhbS5oIiAx
IDMKIyAzMiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2lvbWFuaXAuaCIgMiAz
CiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvbWFuaXAu
aCIgMSAzCiMgMzggIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p
b21hbmlwLmgiIDMKCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9tYW5pcC5oIiAyIDMKIyAxICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyA0MSAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvbWFuaXAuaCIgMiAzCiMg
MSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Z1bmN0aW9uYWwu
aCIgMSAzCiMgMTkgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9m
dW5jdGlvbmFsLmgiIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMjAgIi9ob21lMi9tYXJjby9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDEgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDIx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVuY3Rpb25hbC5o
IiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVu
Y3Rpb24uaCIgMSAzCiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9Bcmcs
IGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFy
Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9m
dW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYg
X0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBl
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1Rw
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy
biBfX3ggKiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9
Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChw
bHVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGlu
ZSBfVHAgaWRlbnRpdHlfZWxlbWVudChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDEp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
Pgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCA8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJf
ZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCA+PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0
dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9u
ZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1
bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1Ymxp
YzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3By
ZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjph
cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVk
aWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25l
Z2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4K
Y2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf
UHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpw
dWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDog
X01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNh
dGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlw
ZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAg
ICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJl
ZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVk
aWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJl
ZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1
bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0
IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6
Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30K
ICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3Vs
dF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09w
ZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkK
ewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJn
MV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShf
X3gpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz
dWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29u
c3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkg
e30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3Qg
dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz
dWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50
X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9P
cGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gp
CnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9B
cmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBl
KF9feCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlv
bjI+CmNsYXNzIHVuYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFt
ZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+CnsKcHJvdGVjdGVkOgogIF9PcGVyYXRp
b24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9mbjI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3Nl
KGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpCiAgICA6IF9N
X2ZuMShfX3gpLCBfTV9mbjIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRf
dHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5
cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSk7CiAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVu
YXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+CmNvbXBvc2UxKGNvbnN0IF9PcGVy
YXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjImIF9fZm4yKQp7CiAgcmV0dXJuIHVuYXJ5
X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+KF9fZm4xLCBfX2ZuMik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRp
b24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVu
YW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJh
dGlvbjEgX01fZm4xOwogIF9PcGVyYXRpb24yIF9NX2ZuMjsKICBfT3BlcmF0aW9uMyBfTV9mbjM7
CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBf
T3BlcmF0aW9uMiYgX195LAogICAgICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX3op
CiAgICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195KSwgX01fZm4zKF9feikgeyB9CiAgdHlwZW5h
bWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf
T3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4x
KF9NX2ZuMihfX3gpLCBfTV9mbjMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy
YXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5h
cnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPgpjb21wb3Nl
Mihjb25zdCBfT3BlcmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2ZuMiwKICAg
ICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fZm4zKQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3Nl
PF9PcGVyYXRpb24xLF9PcGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAgKF9fZm4xLCBfX2ZuMiwg
X19mbjMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVz
dWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBv
aW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlf
ZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0
IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5h
cnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkK
ewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNs
YXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0ciko
X0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7
fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCko
X0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRv
cigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194
LCBfX3kpOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xh
c3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9Bcmcy
LF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVy
biBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJl
dHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0
IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5
IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3Ry
dWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9Q
YWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9y
KCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3Qg
dHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Bh
aXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBl
bmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUm
IG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAg
fQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBf
UGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFp
cj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBf
U2VsZWN0Mm5kPF9QYWlyPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9Bcmcy
PgpzdHJ1Y3QgX1Byb2plY3Qxc3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJn
MiwgX0FyZzE+IHsKICBfQXJnMSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9B
cmcyJikgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs
YXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9B
cmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29u
c3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVjdDFz
dDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4K
c3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7fTsK
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IF9Db25zdGFudF92b2lkX2Z1biB7
CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAg
X0NvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFsKF9fdikg
e30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Zh
bDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudD4Kc3RydWN0
IF9Db25zdGFudF91bmFyeV9mdW4gewogIHR5cGVkZWYgX0FyZ3VtZW50IGFyZ3VtZW50X3R5cGU7
CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAg
X0NvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3Yp
IHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29u
c3QgeyByZXR1cm4gX01fdmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3Mg
X0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4gewogIHR5cGVk
ZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1
bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICBfUmVzdWx0IF9NX3Zh
bDsKCiAgX0NvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChf
X3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25z
dCBfQXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRf
dm9pZF9mdW48X1Jlc3VsdD4gewogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1bHQmIF9f
dikgOiBfQ29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192KSB7fQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4Kc3RydWN0
IGNvbnN0YW50X3VuYXJ5X2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQs
IF9Bcmd1bWVudD4KewogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAg
ICA6IF9Db25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCwgX0FyZ3VtZW50PihfX3YpIHt9Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMSA9IF9SZXN1bHQs
CiAgICAgICAgICBjbGFzcyBfQXJnMiA9IF9BcmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1
bgogIDogcHVibGljIF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4K
ewogIGNvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3Rh
bnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+KF9fdikge30KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gY29uc3Rh
bnQwKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9S
ZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFu
dF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192
YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4oX192YWwp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48
X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkK
ewogIHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0Pihf
X3ZhbCk7Cn0KCgoKY2xhc3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQgaW50IF9N
X3RhYmxlWzU1XTsKICBzaXplX3QgX01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7CnB1Ymxp
YzoKICB1bnNpZ25lZCBpbnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkgewogICAg
X01faW5kZXgxID0gKF9NX2luZGV4MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAoX01faW5k
ZXgyICsgMSkgJSA1NTsKICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRl
eDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFd
ICUgX19saW1pdDsKICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVk
KQogIHsKICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0gX19zZWVk
OwogICAgc2l6ZV90IF9faTsKICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKSB7CiAg
ICAgICAgc2l6ZV90IF9faWkgPSAoMjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAgICAgIF9N
X3RhYmxlW19faWldID0gX19rOwogICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAgICAgICBf
X3NlZWQgPSBfTV90YWJsZVtfX2lpXTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9IDA7IF9f
bG9vcCA8IDQ7IF9fbG9vcCsrKSB7CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19p
KyspCiAgICAgICAgICAgIF9NX3RhYmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01fdGFibGVb
KDEgKyBfX2kgKyAzMCkgJSA1NV07CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAgX01faW5k
ZXgyID0gMzE7CiAgfQoKICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkgeyBf
TV9pbml0aWFsaXplKF9fc2VlZCk7IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxp
emUoMTYxODAzMzk4dSk7IH0KfTsKIyA1MzMgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2Yo
X19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3At
PipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBf
UmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9m
KSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90
KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShf
VHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQg
KF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFz
cyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYp
KCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
cikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6
Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9B
cmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3Bm
KShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJn
IF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0
IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBf
UmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1
cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJn
KSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxf
UmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3Bm
KShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJn
IF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQg
KF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwg
Y2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4x
X3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBf
UmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAo
X19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29u
c3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l
bV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh
dG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lk
IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVt
X2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lk
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZiko
KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19w
KSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko
KSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9p
ZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhw
bGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30K
ICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2
YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz
cyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAo
X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
Y2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChf
VHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCog
X19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZv
aWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBj
b25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7
IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykg
Y29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVu
MV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
QXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6
Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3Is
IF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs
YXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f
ci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0
Owp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9m
dW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVt
X2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
PgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9f
ZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90PF9S
ZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1
bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQg
KF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQs
X1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9f
ZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3Rf
bWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykg
Y29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVt
X2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShf
QXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3Rf
bWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m
KShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf
QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6Oipf
X2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0
X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJn
KSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBt
ZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19m
KShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29u
c3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6
Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKfQojIDIyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfZnVuY3Rpb25hbC5oIiAyIDMKIyA0MiAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvbWFuaXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg
c3RydWN0IF9SZXNldGlvc2ZsYWdzIHsgaW9zX2Jhc2U6OmZtdGZsYWdzIF9NX21hc2s7IH07Cgog
IGlubGluZSBfUmVzZXRpb3NmbGFncwogIHJlc2V0aW9zZmxhZ3MoaW9zX2Jhc2U6OmZtdGZsYWdz
IF9fbWFzaykKICB7CiAgICBfUmVzZXRpb3NmbGFncyBfX3g7CiAgICBfX3guX01fbWFzayA9IF9f
bWFzazsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfUmVzZXRpb3NmbGFncyBf
X2YpCiAgICB7CiAgICAgIF9faXMuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIF9fZi5fTV9t
YXNrKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9SZXNldGlvc2Zs
YWdzIF9fZikKICAgIHsKICAgICAgX19vcy5zZXRmKGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19m
Ll9NX21hc2spOwogICAgICByZXR1cm4gX19vczsKICAgIH0KCgogIHN0cnVjdCBfU2V0aW9zZmxh
Z3MgeyBpb3NfYmFzZTo6Zm10ZmxhZ3MgX01fbWFzazsgfTsKCiAgaW5saW5lIF9TZXRpb3NmbGFn
cwogIHNldGlvc2ZsYWdzIChpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9TZXRp
b3NmbGFncyBfX3g7CiAgICBfX3guX01fbWFzayA9IF9fbWFzazsKICAgIHJldHVybiBfX3g7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU
LF9UcmFpdHM+JiBfX2lzLCBfU2V0aW9zZmxhZ3MgX19mKQogICAgewogICAgICBfX2lzLnNldGYo
X19mLl9NX21hc2spOwogICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1Nl
dGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19vcy5zZXRmKF9fZi5fTV9tYXNrKTsKICAgICAg
cmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldGJhc2UgeyBpbnQgX01fYmFzZTsgfTsK
CiAgaW5saW5lIF9TZXRiYXNlCiAgc2V0YmFzZSAoaW50IF9fYmFzZSkKICB7CiAgICBfU2V0YmFz
ZSBfX3g7CiAgICBfX3guX01fYmFzZSA9IF9fYmFzZTsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFp
dHM+JiBfX2lzLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAgICAgIF9faXMuc2V0ZihfX2YuX01fYmFz
ZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAgICAgX19mLl9NX2Jhc2UgPT0gMTAg
PyBpb3NfYmFzZTo6ZGVjIDoKICAgICAgICAgICAgICBfX2YuX01fYmFzZSA9PSAxNiA/IGlvc19i
YXNlOjpoZXggOgogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6
OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX2lzOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0
YmFzZSBfX2YpCiAgICB7CiAgICAgIF9fb3Muc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jh
c2U6Om9jdCA6CiAgICAgICAgICAgICAgICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpk
ZWMgOgogICAgICAgICAgICAgICAgX19mLl9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDoK
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVs
ZCk7CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgog
ICAgc3RydWN0IF9TZXRmaWxsIHsgX0NoYXJUIF9NX2M7IH07CgogIHRlbXBsYXRlPGNsYXNzIF9D
aGFyVD4KICAgIF9TZXRmaWxsPF9DaGFyVD4KICAgIHNldGZpbGwoX0NoYXJUIF9fYykKICAgIHsK
ICAgICAgX1NldGZpbGw8X0NoYXJUPiBfX3g7CiAgICAgIF9feC5fTV9jID0gX19jOwogICAgICBy
ZXR1cm4gX194OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2lj
X2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKICAg
IHsKICAgICAgX19pcy5maWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1Ry
YWl0cz4mIF9fb3MsIF9TZXRmaWxsPF9DaGFyVD4gX19mKQogICAgewogICAgICBfX29zLmZpbGwo
X19mLl9NX2MpOwogICAgICByZXR1cm4gX19vczsKICAgIH0KCgogIHN0cnVjdCBfU2V0cHJlY2lz
aW9uIHsgaW50IF9NX247IH07CgogIGlubGluZSBfU2V0cHJlY2lzaW9uCiAgc2V0cHJlY2lzaW9u
KGludCBfX24pCiAgewogICAgX1NldHByZWNpc2lvbiBfX3g7CiAgICBfX3guX01fbiA9IF9fbjsK
ICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh
c2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0cHJlY2lzaW9uIF9fZikKICAg
IHsKICAgICAgX19pcy5wcmVjaXNpb24oX19mLl9NX24pOwogICAgICByZXR1cm4gX19pczsKICAg
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYgX19vcywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9fb3MucHJl
Y2lzaW9uKF9fZi5fTV9uKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1Nl
dHcgeyBpbnQgX01fbjsgfTsKCiAgaW5saW5lIF9TZXR3CiAgc2V0dyhpbnQgX19uKQogIHsKICAg
IF9TZXR3IF9feDsKICAgIF9feC5fTV9uID0gX19uOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRl
bXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0
cz4mIF9faXMsIF9TZXR3IF9fZikKICAgIHsKICAgICAgX19pcy53aWR0aChfX2YuX01fbik7CiAg
ICAgIHJldHVybiBfX2lzOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0dyBfX2YpCiAgICB7CiAg
ICAgIF9fb3Mud2lkdGgoX19mLl9NX24pOwogICAgICByZXR1cm4gX19vczsKICAgIH0KCn0KIyAz
MyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2lvbWFuaXAuaCIgMiAzCgoKdXNp
bmcgc3RkOjpib29sYWxwaGE7CnVzaW5nIHN0ZDo6bm9ib29sYWxwaGE7CnVzaW5nIHN0ZDo6c2hv
d2Jhc2U7CnVzaW5nIHN0ZDo6bm9zaG93YmFzZTsKdXNpbmcgc3RkOjpzaG93cG9pbnQ7CnVzaW5n
IHN0ZDo6bm9zaG93cG9pbnQ7CnVzaW5nIHN0ZDo6c2hvd3BvczsKdXNpbmcgc3RkOjpub3Nob3dw
b3M7CnVzaW5nIHN0ZDo6c2tpcHdzOwp1c2luZyBzdGQ6Om5vc2tpcHdzOwp1c2luZyBzdGQ6OnVw
cGVyY2FzZTsKdXNpbmcgc3RkOjpub3VwcGVyY2FzZTsKdXNpbmcgc3RkOjppbnRlcm5hbDsKdXNp
bmcgc3RkOjpsZWZ0Owp1c2luZyBzdGQ6OnJpZ2h0Owp1c2luZyBzdGQ6OmRlYzsKdXNpbmcgc3Rk
OjpoZXg7CnVzaW5nIHN0ZDo6b2N0Owp1c2luZyBzdGQ6OmZpeGVkOwp1c2luZyBzdGQ6OnNjaWVu
dGlmaWM7CgoKCnVzaW5nIHN0ZDo6cmVzZXRpb3NmbGFnczsKdXNpbmcgc3RkOjpzZXRpb3NmbGFn
czsKdXNpbmcgc3RkOjpzZXRiYXNlOwp1c2luZyBzdGQ6OnNldGZpbGw7CnVzaW5nIHN0ZDo6c2V0
cHJlY2lzaW9uOwp1c2luZyBzdGQ6OnNldHc7CiMgMTEgIi9ob21lL21hcmNvL0htZmUvSGVsTW8v
SW5jbHVkZS9HZW9NYXRoTGliL1RlbnNvci5oaCIgMgoKIyAxICIvaG9tZS9tYXJjby9IbWZlL0hl
bE1vL0luY2x1ZGUvTGFuZ3VhZ2UvTXlEZWJ1Zy5oaCIgMQojIDEzICIvaG9tZS9tYXJjby9IbWZl
L0hlbE1vL0luY2x1ZGUvR2VvTWF0aExpYi9UZW5zb3IuaGgiIDIKIyAxICIvaG9tZS9tYXJjby9I
bWZlL0hlbE1vL0luY2x1ZGUvTGFuZ3VhZ2UvTXlUeXBlcy5oaCIgMQoKCgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDkgIi9ob21lL21hcmNvL0htZmUvSGVsTW8vSW5jbHVk
ZS9MYW5ndWFnZS9NeVR5cGVzLmhoIiAyCgoKdHlwZWRlZiBzaXplX3QgTXlVbnM7CnR5cGVkZWYg
aW50IE15SW50Owp0eXBlZGVmIGRvdWJsZSBNeUZsb2F0OwojIDE0ICIvaG9tZS9tYXJjby9IbWZl
L0hlbE1vL0luY2x1ZGUvR2VvTWF0aExpYi9UZW5zb3IuaGgiIDIKIyAxICIvaG9tZS9tYXJjby9N
YXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hdHJpeC5oIiAxCiMgMzUgIi9ob21lL21hcmNv
L01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWF0cml4LmgiCiMgMSAiL2hvbWUvbWFyY28v
TWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYWNoaW5lLmgiIDEKIyA3NCAiL2hvbWUvbWFy
Y28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYWNoaW5lLmgiCiMgMSAiL3Vzci9pbmNs
dWRlL21hbGxvYy5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAzCiMgMSAiL2hv
bWUyL21hcmNvL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAyIDMKIyA5OCAiL3Vz
ci9pbmNsdWRlL21hbGxvYy5oIiAzCmV4dGVybiAiQyIgewojIDEwNyAiL3Vzci9pbmNsdWRlL21h
bGxvYy5oIiAzCmV4dGVybiBpbnQgX19tYWxsb2NfaW5pdGlhbGl6ZWQ7CgoKCgoKCgpleHRlcm4g
dm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiBj
YWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgKiByZWFsbG9jICh2b2lkICogX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
Y2ZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiBtZW1hbGlnbiAo
c2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCAqIHZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogcHZh
bGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogKCpfX21vcmVj
b3JlKSAocHRyZGlmZl90IF9fc2l6ZSk7CgoKZXh0ZXJuIHZvaWQgKiBfX2RlZmF1bHRfbW9yZWNv
cmUgKHB0cmRpZmZfdCBfX3NpemUpIHRocm93ICgpOwoKCnN0cnVjdCBtYWxsaW5mbyB7CiAgaW50
IGFyZW5hOwogIGludCBvcmRibGtzOwogIGludCBzbWJsa3M7CiAgaW50IGhibGtzOwogIGludCBo
YmxraGQ7CiAgaW50IHVzbWJsa3M7CiAgaW50IGZzbWJsa3M7CiAgaW50IHVvcmRibGtzOwogIGlu
dCBmb3JkYmxrczsKICBpbnQga2VlcGNvc3Q7Cn07CgoKZXh0ZXJuIHN0cnVjdCBtYWxsaW5mbyBt
YWxsaW5mbyAodm9pZCkgdGhyb3cgKCk7CiMgMTg2ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDMK
ZXh0ZXJuIGludCBtYWxsb3B0IChpbnQgX19wYXJhbSwgaW50IF9fdmFsKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBtYWxsb2NfdHJpbSAoc2l6ZV90IF9fcGFkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCBtYWxsb2NfdXNhYmxlX3NpemUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgbWFsbG9jX3N0YXRzICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqIG1h
bGxvY19nZXRfc3RhdGUgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1hbGxvY19zZXRf
c3RhdGUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICgqX19tYWxsb2Nf
aW5pdGlhbGl6ZV9ob29rKSAodm9pZCk7CmV4dGVybiB2b2lkICgqX19mcmVlX2hvb2spICh2b2lk
ICogX19wdHIsIF9fY29uc3Qgdm9pZCAqKTsKCmV4dGVybiB2b2lkICogKCpfX21hbGxvY19ob29r
KSAoc2l6ZV90IF9fc2l6ZSwgX19jb25zdCB2b2lkICopOwoKZXh0ZXJuIHZvaWQgKiAoKl9fcmVh
bGxvY19ob29rKSAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplLCBfX2NvbnN0IHZvaWQgKik7
CgoKZXh0ZXJuIHZvaWQgKiAoKl9fbWVtYWxpZ25faG9vaykgKHNpemVfdCBfX3NpemUsIHNpemVf
dCBfX2FsaWdubWVudCwgX19jb25zdCB2b2lkICopOwoKCmV4dGVybiB2b2lkICgqX19hZnRlcl9t
b3JlY29yZV9ob29rKSAodm9pZCk7CgoKZXh0ZXJuIHZvaWQgX19tYWxsb2NfY2hlY2tfaW5pdCAo
dm9pZCkgdGhyb3cgKCk7CgoKCn07CiMgNzUgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2Nj
My4wL2luY2x1ZGUvbWFjaGluZS5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAx
IDMKIyA4MCAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYWNoaW5l
LmgiIDIKIyAxMDEgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWFj
aGluZS5oIgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMTAyICIvaG9tZS9tYXJj
by9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hY2hpbmUuaCIgMgojIDEgIi9ob21lMi9t
YXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMTAzICIvaG9tZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRl
L21hY2hpbmUuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMTA0ICIvaG9t
ZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hY2hpbmUuaCIgMgojIDEgIi9o
b21lMi9tYXJjby9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9mbG9hdC5oIiAxIDMKIyAxMDUgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2lu
Y2x1ZGUvbWFjaGluZS5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzCiMgMjcgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2Vf
dmFsLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5j
bHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDIgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRf
dDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIg
MwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAo
ZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91
YmxlIF9fYXNpbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gp
OyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4y
IChkb3VibGUgX195LCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUg
X195LCBkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCk7IGV4dGVy
biBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBf
X3gpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgdGFu
IChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCk7CgoKCmV4dGVy
biB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4
KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3Vi
bGUgKl9fY29zeCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCk7IGV4dGVy
biBkb3VibGUgX19jb3NoIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgc2luaCAoZG91Ymxl
IF9feCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUg
dGFuaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUgX194KTsKCgoK
ZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAo
ZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KTsgZXh0ZXJuIGRv
dWJsZSBfX2FzaW5oIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgYXRhbmggKGRvdWJsZSBf
X3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpOwoKCgoKCmV4dGVybiBkb3Vi
bGUgZXhwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91YmxlIF9feCk7CgoK
CmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fZXhwMTAg
KGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBwb3cxMCAoZG91YmxlIF9feCk7IGV4dGVybiBk
b3VibGUgX19wb3cxMCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJs
ZSBfX3gsIGludCAqX19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAoZG91YmxlIF9f
eCwgaW50ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBp
bnQgX19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9f
ZXhwb25lbnQpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJs
ZSBfX2xvZyAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCk7
IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2Rm
IChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cik7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3Vi
bGUgX194LCBkb3VibGUgKl9faXB0cik7CgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBf
X3gpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUg
bG9nMXAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gpOwoK
CmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2diIChk
b3VibGUgX194KTsKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9feCk7IGV4dGVybiBk
b3VibGUgX19leHAyIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBf
X3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCk7CgoKCgoKCmV4dGVybiBkb3Vi
bGUgcG93IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91
YmxlIF9feCwgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KTsg
ZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIGh5cG90
IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUg
X194LCBkb3VibGUgX195KTsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCk7IGV4
dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWls
IChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpOwoKCmV4dGVy
biBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9f
Zmxvb3IgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91
YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KTsK
CgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFs
dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91
YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBk
b3VibGUgaW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZG91YmxlIF9faW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4
dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgoKZXh0ZXJuIGRv
dWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2Fu
ZCAoZG91YmxlIF9feCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBk
b3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19j
b3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAq
X190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNu
YW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy
biBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUp
OwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSk7
CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQs
IGRvdWJsZSk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX195MCAo
ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChk
b3VibGUpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX195
biAoaW50LCBkb3VibGUpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpOyBleHRlcm4g
ZG91YmxlIF9fZXJmIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSk7IGV4dGVy
biBkb3VibGUgX19lcmZjIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKTsg
ZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRv
dWJsZSk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSk7CgoKCgpleHRlcm4gZG91Ymxl
IGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSk7CgoKCgoKCmV4
dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKTsgZXh0ZXJuIGRv
dWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCk7CgoKCgoKCmV4dGVybiBk
b3VibGUgcmludCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194
KTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4g
ZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy
biBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJs
ZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCmV4dGVybiBkb3VibGUg
c2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX24pOwoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9f
eCwgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24p
OwoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpOyBleHRlcm4gaW50IF9faWxvZ2IgKGRv
dWJsZSBfX3gpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGlu
dCBfX24pOyBleHRlcm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19u
KTsKCgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl
IF9fbmVhcmJ5aW50IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSByb3VuZCAoZG91Ymxl
IF9feCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBkb3Vi
bGUgdHJ1bmMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGRvdWJsZSBfX3RydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpf
X3F1byk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGlu
dCAqX19xdW8pOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gpOyBleHRl
cm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs
cmludCAoZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUg
X194KTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCk7IGV4dGVybiBsb25n
IGludCBfX2xyb3VuZCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmQg
KGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRvdWJsZSBfX3gp
OwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOyBleHRlcm4g
ZG91YmxlIF9fZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGRvdWJsZSBm
bWF4IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwgZG91
YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3VibGUgX195KTsK
CgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFs
dWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZt
YSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feik7IGV4dGVybiBkb3VibGUgX19m
bWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opOwojIDY0ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh
bGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19h
Y29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194KTsgZXh0ZXJu
IGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9f
eCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0YW4y
ZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9f
eSwgZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZs
b2F0IF9fY29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9hdCBfX3gpOyBl
eHRlcm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0
IF9feCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiB2b2lkIHNp
bmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCk7IGV4dGVybiB2
b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KTsK
CgoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19jb3No
ZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZs
b2F0IF9fc2luaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCk7
IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hm
IChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCk7CgpleHRlcm4g
ZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKGZsb2F0IF9f
eCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFu
aGYgKGZsb2F0IF9feCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCk7IGV4dGVy
biBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0
IF9feCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBw
b3cxMGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KTsKCgoK
ZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpOyBleHRlcm4g
ZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gZmxv
YXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsgZXh0ZXJuIGZsb2F0IF9fbGRl
eHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxv
YXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQg
bG9nMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCk7CgoK
ZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpOyBleHRlcm4gZmxv
YXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKTsKCgoKZXh0ZXJuIGZsb2F0IGV4
cG0xZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpOwoKCmV4
dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoZmxv
YXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBf
X2xvZ2JmIChmbG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCBfX3gpOyBl
eHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nMmYgKGZs
b2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpOwoKCgoKCgpleHRlcm4g
ZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19wb3dmIChm
bG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpOyBl
eHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZsb2F0IF9feCwg
ZmxvYXQgX195KTsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZs
b2F0IF9fY2JydGYgKGZsb2F0IF9feCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQg
X194KTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGZh
YnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0
IF9fZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy
biBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQg
X194KTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJu
IGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKCmV4dGVybiBpbnQgX19p
c2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBpbmZuYW5mIChpbnQg
X19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19pbmZu
YW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBm
bG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9h
dCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCk7CgoKCgpleHRl
cm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQg
X195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAo
X19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCk7
IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCk7IGV4
dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KTsg
ZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQp
OyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpOyBl
eHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCk7
IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYg
KGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgZXJmY2Yg
KGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGxnYW1t
YWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQg
dGdhbW1hZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCk7CgoKCgpleHRl
cm4gZmxvYXQgZ2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpOwoK
CgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsgZXh0
ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsKCgoKCgoKZXh0
ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQg
X194KTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBm
bG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwg
bG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBm
bG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBmbG9hdCBfX3Jl
bWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAo
ZmxvYXQgX194LCBmbG9hdCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwg
ZmxvYXQgX19uKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbik7
IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbik7CgoKZXh0ZXJuIGlu
dCBpbG9nYmYgKGZsb2F0IF9feCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCk7CgoK
CgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKTsgZXh0ZXJu
IGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKTsKCgoKZXh0ZXJuIGZs
b2F0IG5lYXJieWludGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZs
b2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9h
dCBfX3JvdW5kZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxv
YXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVt
cXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pOyBleHRlcm4gZmxvYXQgX19y
ZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1byk7CgoKCgoKCmV4dGVybiBs
b25nIGludCBscmludGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxv
YXQgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KTsgZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gbG9uZyBpbnQg
bHJvdW5kZiAoZmxvYXQgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194
KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25n
IGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBl
eHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCmV4dGVybiBmbG9h
dCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9f
dmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19z
aWduYml0ZiAoZmxvYXQgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KTsg
ZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feik7CiMg
ODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91
YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19hc2lubCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFu
bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91
YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxv
bmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUg
X195LCBsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRv
dWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAo
bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9uZyBkb3VibGUg
X194KTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gp
OwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5obCAo
bG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUg
X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lu
aGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBk
b3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KTsKCgoKCgpleHRl
cm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fZXhwbCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAo
bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJs
ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhw
b25lbnQpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50
IF9fZXhwb25lbnQpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2xvZzEwbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cik7IGV4dGVybiBsb25nIGRvdWJsZSBf
X21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19leHBtMWwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAo
bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJs
ZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7CgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4
cDJsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBk
b3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCk7
CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f
eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KTsKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19jZWlsbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxv
bmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCgoK
ZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVl
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9u
ZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp
bnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGluZm5hbmwgKGludCBfX2Vycm9yKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2luZm5hbmwgKGlu
dCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KTsKCgoKCmV4dGVybiBs
b25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdu
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFn
YikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5s
IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
ZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxv
bmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSk7CmV4dGVy
biBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFs
IChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpOwpleHRlcm4gbG9u
ZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9u
ZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeW5sIChp
bnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91
YmxlKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZj
bCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUp
OwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFs
IChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91Ymxl
KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOwoKCgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0
YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19u
ZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWlu
ZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCgpleHRlcm4gbG9uZyBk
b3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbik7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKTsK
CgpleHRlcm4gaW50IGlsb2dibCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGludCBfX2lsb2di
bCAobG9uZyBkb3VibGUgX194KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGludCBfX24pOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmxu
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
bmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5
aW50bCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9u
ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBf
X3gpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChsb25n
IGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpf
X3F1byk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAo
bG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBf
X3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRl
cm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBs
b25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBpbnQgX19scm91
bmRsIChsb25nIGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9u
ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3Vi
bGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYXhsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZt
aW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKCmV4dGVybiBp
bnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3Zh
bHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf
X3opOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSwgbG9uZyBkb3VibGUgX196KTsKIyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg
MwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTU0
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5G
SU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgog
IH07CiMgMjM2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVf
ID0gLTEsCiAgX1NWSURfLAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZF
UlNJT05fVFlQRTsKCgoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMg
MjU5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAg
IGludCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFy
ZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3Qg
X19leGNlcHRpb24gKl9fZXhjKSB0aHJvdyAoKTsKIyAyODkgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZmxvYXQuaCIgMSAzCiMgMjkwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMK
IyA0MDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDEwNiAiL2hvbWUvbWFyY28vTWF0aC9t
ZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYWNoaW5lLmgiIDIKIyAyMjggIi9ob21lL21hcmNvL01h
dGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWFjaGluZS5oIgpleHRlcm4gIkMiIGludCBpc2F0
dHkoaW50KTsKIyAzNiAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9t
YXRyaXguaCIgMgojIDEgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUv
ZXJyLmgiIDEKIyAzNiAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9l
cnIuaCIKIyAxICIvdXNyL2luY2x1ZGUvc2V0am1wLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
c2V0am1wLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv
aW5jbHVkZS9zZXRqbXAuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2V0am1wLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy9zZXRqbXAuaCIgMwp0eXBl
ZGVmIGludCBfX2ptcF9idWZbNl07CiMgMzEgIi91c3IvaW5jbHVkZS9zZXRqbXAuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc2V0
am1wLmgiIDIgMwoKCnR5cGVkZWYgc3RydWN0IF9fam1wX2J1Zl90YWcKICB7CgoKCiAgICBfX2pt
cF9idWYgX19qbXBidWY7CiAgICBpbnQgX19tYXNrX3dhc19zYXZlZDsKICAgIF9fc2lnc2V0X3Qg
X19zYXZlZF9tYXNrOwogIH0gam1wX2J1ZlsxXTsKCgoKCgpleHRlcm4gaW50IF9fc2lnc2V0am1w
IChqbXBfYnVmIF9fZW52LCBpbnQgX19zYXZlbWFzaykgdGhyb3cgKCk7CiMgNzAgIi91c3IvaW5j
bHVkZS9zZXRqbXAuaCIgMwpleHRlcm4gdm9pZCBsb25nam1wIChqbXBfYnVmIF9fZW52LCBpbnQg
X192YWwpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoK
ZXh0ZXJuIHZvaWQgX2xvbmdqbXAgKGptcF9idWYgX19lbnYsIGludCBfX3ZhbCkgdGhyb3cgKCkK
ICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCgp0eXBlZGVmIGptcF9i
dWYgc2lnam1wX2J1ZjsKIyA5NSAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAzCmV4dGVybiB2b2lk
IHNpZ2xvbmdqbXAgKHNpZ2ptcF9idWYgX19lbnYsIGludCBfX3ZhbCkgdGhyb3cgKCkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDM3ICIvaG9tZS9tYXJjby9NYXRo
L21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL2Vyci5oIiAyCiMgMSAiL2hvbWUvbWFyY28vTWF0aC9t
ZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYXRyaXguaCIgMQojIDM4ICIvaG9tZS9tYXJjby9NYXRo
L21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL2Vyci5oIiAyCgoKCmV4dGVybiBqbXBfYnVmIHJlc3Rh
cnQ7CiMgNjAgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvZXJyLmgi
CnZvaWQgY2F0Y2hfRlBFKCk7CgpleHRlcm4gaW50IGV2X2VycihjaGFyICosaW50LGludCxjaGFy
ICosaW50KTsKZXh0ZXJuIGludCBzZXRfZXJyX2ZsYWcoaW50IGZsYWcpOwoKZXh0ZXJuIGludCBj
b3VudF9lcnJzKGludCB0cnVlX2ZhbHNlKTsKZXh0ZXJuIGludCBlcnJfbGlzdF9hdHRhY2goaW50
IGxpc3RfbnVtLCBpbnQgbGlzdF9sZW4sCiAgICAgICAgICAgICAgIGNoYXIgKiplcnJfcHRyLGlu
dCB3YXJuKTsKZXh0ZXJuIGludCBlcnJfaXNfbGlzdF9hdHRhY2hlZChpbnQgbGlzdF9udW0pOwoK
ZXh0ZXJuIGludCBlcnJfbGlzdF9mcmVlKGludCBsaXN0X251bSk7CiMgMzcgIi9ob21lL21hcmNv
L01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWF0cml4LmgiIDIKIyAxICIvaG9tZS9tYXJj
by9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21lbWluZm8uaCIgMQojIDcxICIvaG9tZS9t
YXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21lbWluZm8uaCIKdHlwZWRlZiBzdHJ1
Y3QgewogIGxvbmcgYnl0ZXM7CiAgaW50IG51bXZhcjsKfSBNRU1fQVJSQVk7CgoKCgoKaW50IG1l
bV9pbmZvX2lzX29uKHZvaWQpOwppbnQgbWVtX2luZm9fb24oaW50IHN3KTsKCmxvbmcgbWVtX2lu
Zm9fYnl0ZXMoaW50IHR5cGUsaW50IGxpc3QpOwppbnQgbWVtX2luZm9fbnVtdmFyKGludCB0eXBl
LGludCBsaXN0KTsKdm9pZCBtZW1faW5mb19maWxlKEZJTEUgKiBmcCxpbnQgbGlzdCk7Cgp2b2lk
IG1lbV9ieXRlc19saXN0KGludCB0eXBlLGludCBvbGRfc2l6ZSxpbnQgbmV3X3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGxpc3QpOwp2b2lkIG1lbV9udW12YXJfbGlzdChpbnQgdHlw
ZSwgaW50IG51bSwgaW50IGxpc3QpOwoKaW50IG1lbV9zdGF0X3JlZ19saXN0KHZvaWQgKip2YXIs
aW50IHR5cGUsaW50IGxpc3QpOwppbnQgbWVtX3N0YXRfbWFyayhpbnQgbWFyayk7CmludCBtZW1f
c3RhdF9mcmVlX2xpc3QoaW50IG1hcmssaW50IGxpc3QpOwppbnQgbWVtX3N0YXRfc2hvd19tYXJr
KHZvaWQpOwp2b2lkIG1lbV9zdGF0X2R1bXAoRklMRSAqZnAsaW50IGxpc3QpOwppbnQgbWVtX2F0
dGFjaF9saXN0KGludCBsaXN0LGludCBudHlwZXMsY2hhciAqdHlwZV9uYW1lc1tdLAogICAgICAg
IGludCAoKmZyZWVfZnVuY3NbXSkodm9pZCAqKSwgTUVNX0FSUkFZIGluZm9fc3VtW10pOwppbnQg
bWVtX2ZyZWVfdmFycyhpbnQgbGlzdCk7CmludCBtZW1faXNfbGlzdF9hdHRhY2hlZChpbnQgbGlz
dCk7CnZvaWQgbWVtX2R1bXBfbGlzdChGSUxFICpmcCxpbnQgbGlzdCk7CmludCBtZW1fc3RhdF9y
ZWdfdmFycyhpbnQgbGlzdCxpbnQgdHlwZSwuLi4pOwojIDE0MyAiL2hvbWUvbWFyY28vTWF0aC9t
ZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tZW1pbmZvLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgY2hh
ciAqKnR5cGVfbmFtZXM7CiAgIGludCAoKipmcmVlX2Z1bmNzKSh2b2lkICopOwogICB1bnNpZ25l
ZCBudHlwZXM7CiAgIE1FTV9BUlJBWSAqaW5mb19zdW07Cn0gTUVNX0NPTk5FQ1Q7CgoKCgpleHRl
cm4gaW50IG1lbV9hdHRhY2hfbGlzdChpbnQgbGlzdCwgaW50IG50eXBlcywgY2hhciAqdHlwZV9u
YW1lc1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnJlZV9mdW5jc1td
KSh2b2lkICopLCBNRU1fQVJSQVkgaW5mb19zdW1bXSk7CiMgMzggIi9ob21lL21hcmNvL01hdGgv
bWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWF0cml4LmgiIDIKCgoKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgdV9pbnQ7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1X2ludCBkaW0s
IG1heF9kaW07CiAgICAgICAgICAgICAgICBkb3VibGUgKnZlOwogICAgICAgICAgICAgICAgfSBW
RUM7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdV9pbnQgbSwgbjsKICAgICAg
ICAgICAgICAgIHVfaW50IG1heF9tLCBtYXhfbiwgbWF4X3NpemU7CiAgICAgICAgICAgICAgICBk
b3VibGUgKiptZSwqYmFzZTsKICAgICAgICAgICAgICAgIH0gTUFUOwoKCnR5cGVkZWYgc3RydWN0
IHsKICAgICAgICAgICAgICAgTUFUICptYXQ7CiAgICAgICAgICAgICAgIGludCBsYix1YjsKICAg
ICAgICAgICAgICAgfSBCQU5EOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1
X2ludCBzaXplLCBtYXhfc2l6ZSwgKnBlOwogICAgICAgICAgICAgICAgfSBQRVJNOwoKCnR5cGVk
ZWYgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVfaW50IGRpbSwgbWF4X2RpbTsKICAgICAgICAg
ICAgICAgIGludCAqaXZlOwogICAgICAgICAgICAgICAgfSBJVkVDOwojIDkwICIvaG9tZS9tYXJj
by9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hdHJpeC5oIgp2b2lkIG1fdmVyc2lvbigg
dm9pZCApOwojIDE2NiAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9t
YXRyaXguaCIKZXh0ZXJuIFZFQyAqdl9nZXQoaW50KSwgKnZfcmVzaXplKFZFQyAqLGludCk7Cgpl
eHRlcm4gTUFUICptX2dldChpbnQsaW50KSwgKm1fcmVzaXplKE1BVCAqLGludCxpbnQpOwoKZXh0
ZXJuIFBFUk0gKnB4X2dldChpbnQpLCAqcHhfcmVzaXplKFBFUk0gKixpbnQpOwoKZXh0ZXJuIElW
RUMgKml2X2dldChpbnQpLCAqaXZfcmVzaXplKElWRUMgKixpbnQpOwoKZXh0ZXJuIEJBTkQgKmJk
X2dldChpbnQsaW50LGludCksICpiZF9yZXNpemUoQkFORCAqLGludCxpbnQsaW50KTsKCgoKZXh0
ZXJuIGludCBpdl9mcmVlKElWRUMgKik7CmV4dGVybiBpbnQgbV9mcmVlKE1BVCAqKSwgdl9mcmVl
KFZFQyAqKSwgcHhfZnJlZShQRVJNICopOwpleHRlcm4gaW50IGJkX2ZyZWUoQkFORCAqKTsKCgoK
ZXh0ZXJuIFZFQyAqdl9jb3VudChWRUMgKngpOwoKCmV4dGVybiBJVkVDICppaXZfZmlucHV0KEZJ
TEUgKmZwLCBJVkVDICppdik7CmV4dGVybiBJVkVDICpiaXZfZmlucHV0KEZJTEUgKmZwLElWRUMg
Kml2KTsKCgpleHRlcm4gTUFUICppbV9maW5wdXQoRklMRSAqZnAsIE1BVCAqbWF0KTsKZXh0ZXJu
IE1BVCAqYm1fZmlucHV0KEZJTEUgKmZwLCBNQVQgKm1hdCk7CmV4dGVybiBQRVJNICppcHhfZmlu
cHV0KEZJTEUgKmZwLCBQRVJNICpweCk7CmV4dGVybiBQRVJNICpicHhfZmlucHV0KEZJTEUgKmZw
LCBQRVJNICpweCk7CmV4dGVybiBWRUMgKmlmaW5fdmVjKEZJTEUgKmZwLCBWRUMgKnZlYyk7CmV4
dGVybiBWRUMgKmJmaW5fdmVjKEZJTEUgKmZwLCBWRUMgKnZlYyk7CmV4dGVybiBjaGFyICpzZXRm
b3JtYXQoY2hhciAqZl9zdHJpbmcpOwoKCgpleHRlcm4gTUFUICpiaWZhY3RvcihNQVQgKkEsTUFU
ICpVLE1BVCAqVik7CiMgMjk5ICIvaG9tZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNs
dWRlL21hdHJpeC5oIgp2b2lkIHZfZm91dHB1dChGSUxFICpmcCxWRUMgKngpLAoKICAgICAgICBt
X2ZvdXRwdXQoRklMRSAqZnAsTUFUICpBKSwKCiAgICAgICAgcHhfZm91dHB1dChGSUxFICpmcCxQ
RVJNICpweCk7Cgp2b2lkIGl2X2ZvdXRwdXQoRklMRSAqZnAsSVZFQyAqaXgpOwoKCgoKClZFQyAq
dl9maW5wdXQoRklMRSAqZnAsVkVDICpvdXQpOwoKTUFUICptX2ZpbnB1dChGSUxFICpmcCxNQVQg
Km91dCk7CgpQRVJNICpweF9maW5wdXQoRklMRSAqZnAsUEVSTSAqb3V0KTsKCklWRUMgKml2X2Zp
bnB1dChGSUxFICpmcCxJVkVDICpvdXQpOwoKCgoKaW50IGZ5X29yX24oRklMRSAqZnAsY2hhciAq
cyk7CgoKaW50IHluX2RmbHQoaW50IHZhbCk7CgoKCgoKCmludCBmaW5faW50KEZJTEUgKmZwLGNo
YXIgKnMsaW50IGxvdyxpbnQgaGlnaCk7CgoKCgoKCmRvdWJsZSBmaW5fZG91YmxlKEZJTEUgKmZw
LGNoYXIgKnMsaW50IGxvdywgaW50IGhpZ2gpOwoKCgppbnQgc2tpcGp1bmsoRklMRSAqZnApOwoj
IDM4MyAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYXRyaXguaCIK
ZXh0ZXJuIE1BVCAqX21fY29weShNQVQgKmluLE1BVCAqb3V0LHVfaW50IGkwLHVfaW50IGowKSwK
ICAgICAgICAgICAgICAgICogbV9tb3ZlKE1BVCAqaW4sIGludCwgaW50LCBpbnQsIGludCwgTUFU
ICpvdXQsIGludCwgaW50KSwKICAgICAgICAgICAgICAgICp2bV9tb3ZlKFZFQyAqaW4sIGludCwg
TUFUICpvdXQsIGludCwgaW50LCBpbnQsIGludCk7CgpleHRlcm4gVkVDICpfdl9jb3B5KFZFQyAq
aW4sVkVDICpvdXQsdV9pbnQgaTApLAogICAgICAgICAgICAgICAgKiB2X21vdmUoVkVDICppbiwg
aW50LCBpbnQsIFZFQyAqb3V0LCBpbnQpLAogICAgICAgICAgICAgICAgKm12X21vdmUoTUFUICpp
biwgaW50LCBpbnQsIGludCwgaW50LCBWRUMgKm91dCwgaW50KTsKZXh0ZXJuIFBFUk0gKnB4X2Nv
cHkoUEVSTSAqaW4sUEVSTSAqb3V0KTsKZXh0ZXJuIElWRUMgKml2X2NvcHkoSVZFQyAqaW4sSVZF
QyAqb3V0KSwKICAgICAgICAgICAgICAgICppdl9tb3ZlKElWRUMgKmluLCBpbnQsIGludCwgSVZF
QyAqb3V0LCBpbnQpOwpleHRlcm4gQkFORCAqYmRfY29weShCQU5EICppbixCQU5EICpvdXQpOwoj
IDQxMCAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYXRyaXguaCIK
ZXh0ZXJuIFZFQyAqdl96ZXJvKFZFQyAqKSwgKnZfcmFuZChWRUMgKiksICp2X29uZXMoVkVDICop
OwpleHRlcm4gTUFUICptX3plcm8oTUFUICopLCAqbV9pZGVudChNQVQgKiksICptX3JhbmQoTUFU
ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9v
bmVzKE1BVCAqKTsKZXh0ZXJuIFBFUk0gKnB4X2lkZW50KFBFUk0gKik7CmV4dGVybiBJVkVDICpp
dl96ZXJvKElWRUMgKik7CiMgNDI5ICIvaG9tZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9p
bmNsdWRlL21hdHJpeC5oIgpWRUMgKmJkX212X21sdChCQU5EICpBLCBWRUMgKngsIFZFQyAqb3V0
KTsKCmV4dGVybiBWRUMgKnN2X21sdChkb3VibGUsVkVDICosVkVDICopLAogICAgICAgICAgICAg
ICAgKm12X21sdChNQVQgKixWRUMgKixWRUMgKiksCiAgICAgICAgICAgICAgICAqdm1fbWx0KE1B
VCAqLFZFQyAqLFZFQyAqKSwKICAgICAgICAgICAgICAgICp2X2FkZChWRUMgKixWRUMgKixWRUMg
KiksCiAgICAgICAgICAgICAgICAqdl9zdWIoVkVDICosVkVDICosVkVDICopLAogICAgICAgICAg
ICAgICAgKnB4X3ZlYyhQRVJNICosVkVDICosVkVDICopLAogICAgICAgICAgICAgICAgKnB4aW52
X3ZlYyhQRVJNICosVkVDICosVkVDICopLAogICAgICAgICAgICAgICAgKnZfbWx0YWRkKFZFQyAq
LFZFQyAqLGRvdWJsZSxWRUMgKiksCgogICAgICAgICAgICAgICAgKnZfbWFwKGRvdWJsZSAoKmYp
KGRvdWJsZSksVkVDICosVkVDICopLAoKICAgICAgICAgICAgICAgICpfdl9tYXAoZG91YmxlICgq
Zikodm9pZCAqLGRvdWJsZSksdm9pZCAqLFZFQyAqLFZFQyAqKSwKCgoKCiAgICAgICAgICAgICAg
ICAqdl9saW5jb21iKGludCxWRUMgKiosZG91YmxlICosVkVDICopLAoKICAgICAgICAgICAgICAg
ICp2X2xpbmxpc3QoVkVDICpvdXQsVkVDICp2MSxkb3VibGUgYTEsLi4uKTsKCgoKZXh0ZXJuIGRv
dWJsZSB2X21pbihWRUMgKiwgaW50ICopLAoKICAgICAgICB2X21heChWRUMgKiwgaW50ICopLAoK
ICAgICAgICB2X3N1bShWRUMgKik7CgoKZXh0ZXJuIFZFQyAqdl9zdGFyKFZFQyAqLCBWRUMgKiwg
VkVDICopLAoKICAgICAgICAgICAgICAgICp2X3NsYXNoKFZFQyAqLCBWRUMgKiwgVkVDICopLAoK
ICAgICAgICAgICAgICAgICp2X3NvcnQoVkVDICosIFBFUk0gKik7CgoKZXh0ZXJuIFZFQyAqdl9j
b252KFZFQyAqeDEsIFZFQyAqeDIsIFZFQyAqb3V0KTsKZXh0ZXJuIFZFQyAqdl9wY29udihWRUMg
KngxLCBWRUMgKngyLCBWRUMgKm91dCk7CgoKCmV4dGVybiBkb3VibGUgX2luX3Byb2QoVkVDICp4
LFZFQyAqeSx1X2ludCBpMCksCgogICAgICAgICAgICAgICAgX19pcF9fKGRvdWJsZSAqLGRvdWJs
ZSAqLGludCk7CgoKZXh0ZXJuIHZvaWQgX19tbHRhZGRfXyhkb3VibGUgKixkb3VibGUgKixkb3Vi
bGUsaW50KSwKICAgICAgICAgICAgICAgIF9fYWRkX18oZG91YmxlICosZG91YmxlICosZG91Ymxl
ICosaW50KSwKICAgICAgICAgICAgICAgIF9fc3ViX18oZG91YmxlICosZG91YmxlICosZG91Ymxl
ICosaW50KSwKICAgICAgICAgICAgICAgIF9fc21sdF9fKGRvdWJsZSAqLGRvdWJsZSxkb3VibGUg
KixpbnQpLAogICAgICAgICAgICAgICAgX196ZXJvX18oZG91YmxlICosaW50KTsKIyA0OTkgIi9o
b21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWF0cml4LmgiCmV4dGVybiBk
b3VibGUgX3Zfbm9ybTEoVkVDICp4LFZFQyAqc2NhbGUpLAoKICAgICAgICAgICAgICAgIF92X25v
cm0yKFZFQyAqeCxWRUMgKnNjYWxlKSwKCiAgICAgICAgICAgICAgICBfdl9ub3JtX2luZihWRUMg
KngsVkVDICpzY2FsZSk7CgoKZXh0ZXJuIGRvdWJsZSBtX25vcm0xKE1BVCAqQSksIG1fbm9ybV9p
bmYoTUFUICpBKSwgbV9ub3JtX2Zyb2IoTUFUICpBKTsKIyA1MzEgIi9ob21lL21hcmNvL01hdGgv
bWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWF0cml4LmgiCmV4dGVybiBNQVQgKnNtX21sdChkb3Vi
bGUgcyxNQVQgKkEsTUFUICpvdXQpLAogICAgICAgICAgICAgICAgKm1fbWx0KE1BVCAqQSxNQVQg
KkIsTUFUICpvdXQpLAogICAgICAgICAgICAgICAgKm1tdHJfbWx0KE1BVCAqQSxNQVQgKkIsTUFU
ICpvdXQpLAogICAgICAgICAgICAgICAgKm10cm1fbWx0KE1BVCAqQSxNQVQgKkIsTUFUICpvdXQp
LAogICAgICAgICAgICAgICAgKm1fYWRkKE1BVCAqQSxNQVQgKkIsTUFUICpvdXQpLAogICAgICAg
ICAgICAgICAgKm1fc3ViKE1BVCAqQSxNQVQgKkIsTUFUICpvdXQpLAogICAgICAgICAgICAgICAg
KnN1Yl9tYXQoTUFUICpBLHVfaW50LHVfaW50LHVfaW50LHVfaW50LE1BVCAqb3V0KSwKICAgICAg
ICAgICAgICAgICptX3RyYW5zcChNQVQgKkEsTUFUICpvdXQpLAoKICAgICAgICAgICAgICAgICpt
c19tbHRhZGQoTUFUICpBLE1BVCAqQixkb3VibGUgcyxNQVQgKm91dCk7CgoKZXh0ZXJuIEJBTkQg
KmJkX3RyYW5zcChCQU5EICppbiwgQkFORCAqb3V0KTsKZXh0ZXJuIE1BVCAqcHhfcm93cyhQRVJN
ICpweCxNQVQgKkEsTUFUICpvdXQpLAogICAgICAgICAgICAgICAgKnB4X2NvbHMoUEVSTSAqcHgs
TUFUICpBLE1BVCAqb3V0KSwKICAgICAgICAgICAgICAgICpzd2FwX3Jvd3MoTUFUICosaW50LGlu
dCxpbnQsaW50KSwKICAgICAgICAgICAgICAgICpzd2FwX2NvbHMoTUFUICosaW50LGludCxpbnQs
aW50KSwKCiAgICAgICAgICAgICAgICAqX3NldF9jb2woTUFUICpBLHVfaW50IGksVkVDICpvdXQs
dV9pbnQgajApLAoKICAgICAgICAgICAgICAgICpfc2V0X3JvdyhNQVQgKkEsdV9pbnQgaixWRUMg
Km91dCx1X2ludCBpMCk7CgpleHRlcm4gVkVDICpnZXRfcm93KE1BVCAqLHVfaW50LFZFQyAqKSwK
ICAgICAgICAgICAgICAgICpnZXRfY29sKE1BVCAqLHVfaW50LFZFQyAqKSwKICAgICAgICAgICAg
ICAgICpzdWJfdmVjKFZFQyAqLGludCxpbnQsVkVDICopLAoKICAgICAgICAgICAgICAgICptdl9t
bHRhZGQoVkVDICp4LFZFQyAqeSxNQVQgKkEsZG91YmxlIHMsVkVDICpvdXQpLAoKICAgICAgICAg
ICAgICAgICp2bV9tbHRhZGQoVkVDICp4LFZFQyAqeSxNQVQgKkEsZG91YmxlIHMsVkVDICpvdXQp
OwojIDU3OCAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYXRyaXgu
aCIKZXh0ZXJuIFBFUk0gKnB4X21sdChQRVJNICpweDEsUEVSTSAqcHgyLFBFUk0gKm91dCksCiAg
ICAgICAgICAgICAgICAqcHhfaW52KFBFUk0gKnB4LFBFUk0gKm91dCksCgogICAgICAgICAgICAg
ICAgKnB4X3RyYW5zcChQRVJNICpweCx1X2ludCBpLHVfaW50IGopOwoKCgpleHRlcm4gaW50IHB4
X3NpZ24oUEVSTSAqKTsKIyA1OTcgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2lu
Y2x1ZGUvbWF0cml4LmgiCmV4dGVybiBJVkVDICppdl9hZGQoSVZFQyAqaXgsSVZFQyAqaXksSVZF
QyAqb3V0KSwKICAgICAgICAgICAgICAgICppdl9zdWIoSVZFQyAqaXgsSVZFQyAqaXksSVZFQyAq
b3V0KSwKCiAgICAgICAgICAgICAgICAqaXZfc29ydChJVkVDICppeCwgUEVSTSAqb3JkZXIpOwoj
IDYxNyAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYXRyaXguaCIK
ZG91YmxlIHNxdWFyZShkb3VibGUgeCksCiAgY3ViZShkb3VibGUgeCksCiAgbXJhbmQodm9pZCk7
Cgp2b2lkIHNtcmFuZChpbnQgc2VlZCksCiAgbXJhbmRsaXN0KGRvdWJsZSAqeCwgaW50IGxlbik7
Cgp2b2lkIG1fZHVtcChGSUxFICpmcCxNQVQgKmEpLCBweF9kdW1wKEZJTEUgKixQRVJNICpweCks
CiAgICAgICAgdl9kdW1wKEZJTEUgKmZwLFZFQyAqeCksIGl2X2R1bXAoRklMRSAqZnAsIElWRUMg
Kml4KTsKCk1BVCAqYmFuZDJtYXQoQkFORCAqYkEsIE1BVCAqQSk7CkJBTkQgKm1hdDJiYW5kKE1B
VCAqQSwgaW50IGxiLGludCB1YiwgQkFORCAqYkEpOwojIDY0NSAiL2hvbWUvbWFyY28vTWF0aC9t
ZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYXRyaXguaCIKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwoj
IDY0NiAiL2hvbWUvbWFyY28vTWF0aC9tZXNjaDEyYS5nY2MzLjAvaW5jbHVkZS9tYXRyaXguaCIg
MgoKCgppbnQgdl9nZXRfdmFycyhpbnQgZGltLC4uLik7CmludCBpdl9nZXRfdmFycyhpbnQgZGlt
LC4uLik7CmludCBtX2dldF92YXJzKGludCBtLGludCBuLC4uLik7CmludCBweF9nZXRfdmFycyhp
bnQgZGltLC4uLik7CgppbnQgdl9yZXNpemVfdmFycyhpbnQgbmV3X2RpbSwuLi4pOwppbnQgaXZf
cmVzaXplX3ZhcnMoaW50IG5ld19kaW0sLi4uKTsKaW50IG1fcmVzaXplX3ZhcnMoaW50IG0saW50
IG4sLi4uKTsKaW50IHB4X3Jlc2l6ZV92YXJzKGludCBuZXdfZGltLC4uLik7CgppbnQgdl9mcmVl
X3ZhcnMoVkVDICoqLC4uLik7CmludCBpdl9mcmVlX3ZhcnMoSVZFQyAqKiwuLi4pOwppbnQgcHhf
ZnJlZV92YXJzKFBFUk0gKiosLi4uKTsKaW50IG1fZnJlZV92YXJzKE1BVCAqKiwuLi4pOwojIDE1
ICIvaG9tZS9tYXJjby9IbWZlL0hlbE1vL0luY2x1ZGUvR2VvTWF0aExpYi9UZW5zb3IuaGgiIDIK
IyAxICIvaG9tZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hdHJpeDIuaCIg
MQojIDM1ICIvaG9tZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hdHJpeDIu
aCIKIyAxICIvaG9tZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hdHJpeC5o
IiAxCiMgMzYgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWF0cml4
Mi5oIiAyCiMgOTEgIi9ob21lL21hcmNvL01hdGgvbWVzY2gxMmEuZ2NjMy4wL2luY2x1ZGUvbWF0
cml4Mi5oIgpleHRlcm4gTUFUICpCS1BmYWN0b3IoTUFUICpBLFBFUk0gKnBpdm90LFBFUk0gKmJs
b2NrcyksCgoKICAgICAgICAgICAgICAgICpDSGZhY3RvcihNQVQgKkEpLAoKICAgICAgICAgICAg
ICAgICpMVWZhY3RvcihNQVQgKkEsUEVSTSAqcGl2b3QpLAoKICAgICAgICAgICAgICAgICpRUmZh
Y3RvcihNQVQgKkEsVkVDICpkaWFnKSwKCiAgICAgICAgICAgICAgICAqUVJDUGZhY3RvcihNQVQg
KkEsVkVDICpkaWFnLFBFUk0gKnBpdm90KSwKCiAgICAgICAgICAgICAgICAqTERMZmFjdG9yKE1B
VCAqQSksCgogICAgICAgICAgICAgICAgKkhmYWN0b3IoTUFUICpBLFZFQyAqZGlhZzEsVkVDICpk
aWFnMiksCgoKCiAgICAgICAgICAgICAgICAqTUNIZmFjdG9yKE1BVCAqQSxkb3VibGUgdG9sKSwK
ICAgICAgICAgICAgICAgICptX2ludmVyc2UoTUFUICpBLE1BVCAqb3V0KTsKCgpleHRlcm4gZG91
YmxlIExVY29uZGVzdChNQVQgKkEsUEVSTSAqcGl2b3QpLAoKICAgICAgICAgICAgICAgIFFSY29u
ZGVzdChNQVQgKkEpOwoKCgoKCmV4dGVybiBNQVQgKm1ha2VRKE1BVCAqQSxWRUMgKmRpYWcsTUFU
ICpRb3V0KSwKCgogICAgICAgICAgICAgICAgKm1ha2VSKE1BVCAqQSxNQVQgKlJvdXQpLAoKICAg
ICAgICAgICAgICAgICptYWtlSFEoTUFUICpBLFZFQyAqZGlhZzEsVkVDICpkaWFnMixNQVQgKlFv
dXQpLAoKICAgICAgICAgICAgICAgICptYWtlSChNQVQgKkEsTUFUICpIb3V0KTsKCgpleHRlcm4g
TUFUICpMREx1cGRhdGUoTUFUICpBLFZFQyAqdSxkb3VibGUgYWxwaGEpLAoKCgogICAgICAgICAg
ICAgICAgKlFSdXBkYXRlKE1BVCAqUSxNQVQgKlIsVkVDICp1LFZFQyAqdik7CiMgMTQ2ICIvaG9t
ZS9tYXJjby9NYXRoL21lc2NoMTJhLmdjYzMuMC9pbmNsdWRlL21hdHJpeDIuaCIKZXh0ZXJuIFZF
QyAqQktQc29sdmUoTUFUICpBLFBFUk0gKnBpdm90LFBFUk0gKmJsb2NrcyxWRUMgKmIsVkVDICp4
KSwKICAgICAgICAgICAgICAgICpDSHNvbHZlKE1BVCAqQSxWRUMgKmIsVkVDICp4KSwKICAgICAg
ICAgICAgICAgICpMRExzb2x2ZShNQVQgKkEsVkVDICpiLFZFQyAqeCksCiAgICAgICAgICAgICAg
ICAqTFVzb2x2ZShNQVQgKkEsUEVSTSAqcGl2b3QsVkVDICpiLFZFQyAqeCksCiAgICAgICAgICAg
ICAgICAqX1Fzb2x2ZShNQVQgKkEsVkVDICosVkVDICosVkVDICosIFZFQyAqKSwKICAgICAgICAg
ICAgICAgICpRUnNvbHZlKE1BVCAqQSxWRUMgKixWRUMgKmIsVkVDICp4KSwKICAgICAgICAgICAg
ICAgICpRUlRzb2x2ZShNQVQgKkEsVkVDICosVkVDICpiLFZFQyAqeCksCgoKCgoKCiAgICAgICAg
ICAgICAgICAqVXNvbHZlKE1BVCAqQSxWRUMgKmIsVkVDICp4LGRvdWJsZSBkaWFnX3ZhbCksCiAg
ICAgICAgICAgICAgICAqTHNvbHZlKE1BVCAqQSxWRUMgKmIsVkVDICp4LGRvdWJsZSBkaWFnX3Zh
bCksCiAgICAgICAgICAgICAgICAqRHNvbHZlKE1BVCAqQSxWRUMgKmIsVkVDICp4KSwKICAgICAg
ICAgICAgICAgICpMVHNvbHZlKE1BVCAqQSxWRUMgKmIsVkVDICp4LGRvdWJsZSBkaWFnX3ZhbCks
CiAgICAgICAgICAgICAgICAqVVRzb2x2ZShNQVQgKkEsVkVDICpiLFZFQyAqeCxkb3VibGUgZGlh
Z192YWwpLAogICAgICAgICAgICAgICAgKkxVVHNvbHZlKE1BVCAqQSxQRVJNICosVkVDICosVkVD
ICopLAogICAgICAgICAgICAgICAgKlFSQ1Bzb2x2ZShNQVQgKlFSLFZFQyAqZGlhZyxQRVJNICpw
aXZvdCxWRUMgKmIsVkVDICp4KTsKCmV4dGVybiBCQU5EICpiZExVZmFjdG9yKEJBTkQgKkEsUEVS
TSAqcGl2b3QpLAogICAgICAgICAgICAgICAgKmJkTERMZmFjdG9yKEJBTkQgKkEpOwpleHRlcm4g
VkVDICpiZExVc29sdmUoQkFORCAqQSxQRVJNICpwaXZvdCxWRUMgKmIsVkVDICp4KSwKICAgICAg
ICAgICAgICAgICpiZExETHNvbHZlKEJBTkQgKkEsVkVDICpiLFZFQyAqeCk7CgoKCmV4dGVybiBW
RUMgKmhodmVjKFZFQyAqLHVfaW50LGRvdWJsZSAqLFZFQyAqLGRvdWJsZSAqKTsKZXh0ZXJuIFZF
QyAqaGh0cnZlYyhWRUMgKixkb3VibGUsdV9pbnQsVkVDICosVkVDICopOwpleHRlcm4gTUFUICpo
aHRycm93cyhNQVQgKix1X2ludCx1X2ludCxWRUMgKixkb3VibGUpOwpleHRlcm4gTUFUICpoaHRy
Y29scyhNQVQgKix1X2ludCx1X2ludCxWRUMgKixkb3VibGUpOwoKZXh0ZXJuIHZvaWQgZ2l2ZW5z
KGRvdWJsZSxkb3VibGUsZG91YmxlICosZG91YmxlICopOwpleHRlcm4gVkVDICpyb3RfdmVjKFZF
QyAqLHVfaW50LHVfaW50LGRvdWJsZSxkb3VibGUsVkVDICopOwpleHRlcm4gTUFUICpyb3Rfcm93
cyhNQVQgKix1X2ludCx1X2ludCxkb3VibGUsZG91YmxlLE1BVCAqKTsKZXh0ZXJuIE1BVCAqcm90
X2NvbHMoTUFUICosdV9pbnQsdV9pbnQsZG91YmxlLGRvdWJsZSxNQVQgKik7CgoKCgoKCgpleHRl
cm4gVkVDICp0cmllaWcoVkVDICphLFZFQyAqYixNQVQgKlEpLAoKCiAgICAgICAgICAgICAgICAq
c3ltbWVpZyhNQVQgKkEsTUFUICpRLFZFQyAqb3V0KTsKCgpleHRlcm4gTUFUICpzY2h1cihNQVQg
KkEsTUFUICpRKTsKCgpleHRlcm4gdm9pZCBzY2h1cl9ldmFscyhNQVQgKkEsVkVDICpyZV9wYXJ0
LFZFQyAqaW1fcGFydCk7CgoKZXh0ZXJuIE1BVCAqc2NodXJfdmVjcyhNQVQgKlQsTUFUICpRLE1B
VCAqWF9yZSxNQVQgKlhfaW0pOwoKCgoKCgoKVkVDICpiaXN2ZChWRUMgKmEsVkVDICpiLE1BVCAq
VSxNQVQgKlYpLAoKCiAgICAgICAgKnN2ZChNQVQgKkEsTUFUICpVLE1BVCAqVixWRUMgKm91dCk7
CgoKTUFUICpfbV9wb3coTUFUICosaW50LE1BVCAqLE1BVCAqKTsKTUFUICptX3BvdyhNQVQgKixp
bnQsIE1BVCAqKTsKTUFUICptX2V4cChNQVQgKixkb3VibGUsTUFUICopOwpNQVQgKl9tX2V4cChN
QVQgKixkb3VibGUsTUFUICosaW50ICosaW50ICopOwpNQVQgKm1fcG9seShNQVQgKixWRUMgKixN
QVQgKik7CgoKdm9pZCBmZnQoVkVDICosVkVDICopOwp2b2lkIGlmZnQoVkVDICosVkVDICopOwoj
IDE2ICIvaG9tZS9tYXJjby9IbWZlL0hlbE1vL0luY2x1ZGUvR2VvTWF0aExpYi9UZW5zb3IuaGgi
IDIKCgpjbGFzcyBUZW5zb3IxOwpjbGFzcyBUZW5zb3IyOwpjbGFzcyBUZW5zb3IzOwpjbGFzcyBU
ZW5zb3I0OwoKCmNsYXNzIFRlbnNvcjEgewpwcml2YXRlOgogICAgTXlGbG9hdCB4WzNdOwpwdWJs
aWM6CgogICAgVGVuc29yMQogICAgICAgICAgICAodm9pZCk7CiAgICBUZW5zb3IxCiAgICAgICAg
ICAgIChjb25zdCBNeUZsb2F0ICYgYSwKICAgICAgICAgICAgY29uc3QgTXlGbG9hdCAmIGIsCiAg
ICAgICAgICAgIGNvbnN0IE15RmxvYXQgJiBjKTsKICAgIFRlbnNvcjEKICAgICAgICAgICAgKGNv
bnN0IE15RmxvYXQgYVszXSk7CiAgICBUZW5zb3IxCiAgICAgICAgICAgIChjb25zdCBUZW5zb3Ix
ICYgYSk7CiAgICB2aXJ0dWFsIH5UZW5zb3IxCiAgICAgICAgICAgICh2b2lkKSB7fTsKCiAgICBN
eUZsb2F0ICYgb3BlcmF0b3IgW10KICAgICAgICAgICAgKGNvbnN0IE15VW5zICYgaW5kZXgpOwog
ICAgY29uc3QgTXlGbG9hdCAmIG9wZXJhdG9yIFtdCiAgICAgICAgICAgIChjb25zdCBNeVVucyAm
IGluZGV4KQogICAgICAgICAgICBjb25zdDsKCiAgICBUZW5zb3IxICYgb3BlcmF0b3IgPQogICAg
ICAgICAgICAoY29uc3QgVGVuc29yMSAmIGEpOwogICAgVGVuc29yMSAmIG9wZXJhdG9yICs9CiAg
ICAgICAgICAgIChjb25zdCBUZW5zb3IxICYgYSk7CiAgICBUZW5zb3IxICYgb3BlcmF0b3IgLT0K
ICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjEgJiBhKTsKICAgIFRlbnNvcjEgb3BlcmF0b3IgLQog
ICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IxIG9wZXJhdG9y
ICsKICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjEgJiBhKQogICAgICAgICAgICBjb25zdDsKICAg
IFRlbnNvcjEgb3BlcmF0b3IgLQogICAgICAgICAgICAoY29uc3QgVGVuc29yMSAmIGEpCiAgICAg
ICAgICAgIGNvbnN0OwogICAgVGVuc29yMSBvcGVyYXRvciAqCiAgICAgICAgICAgIChjb25zdCBN
eUZsb2F0ICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IxIG9wZXJhdG9yIC8KICAg
ICAgICAgICAgKGNvbnN0IE15RmxvYXQgJiBhKQogICAgICAgICAgICBjb25zdDsKCiAgICBNeUZs
b2F0IE1hZ25pdHVkZQogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBU
ZW5zb3IyIENyb3NzCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKCiAgICBN
eUZsb2F0IERvdAogICAgICAgICAgICAoY29uc3QgVGVuc29yMSAmIGEpCiAgICAgICAgICAgIGNv
bnN0OwogICAgVGVuc29yMSBEb3QKICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjIgJiBhKQogICAg
ICAgICAgICBjb25zdDsKICAgIFRlbnNvcjIgRG90CiAgICAgICAgICAgIChjb25zdCBUZW5zb3Iz
ICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIERvdAogICAgICAgICAgICAoY29u
c3QgVGVuc29yNCAmIGEpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yMiBPcGVuCiAgICAg
ICAgICAgIChjb25zdCBUZW5zb3IxICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3Iz
IE9wZW4KICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjIgJiBhKQogICAgICAgICAgICBjb25zdDsK
ICAgIFRlbnNvcjQgT3BlbgogICAgICAgICAgICAoY29uc3QgVGVuc29yMyAmIGEpCiAgICAgICAg
ICAgIGNvbnN0OwogICAgVGVuc29yMSBDcm9zcwogICAgICAgICAgICAoY29uc3QgVGVuc29yMSAm
IGEpCiAgICAgICAgICAgIGNvbnN0OwoKICAgIFZFQyAqIENvcHkKICAgICAgICAoVkVDICogcmVz
LAogICAgICAgIGNvbnN0IE15VW5zIHJvdykKICAgICAgICBjb25zdDsKICAgIFZFQyAqIEFkZAog
ICAgICAgIChWRUMgKiByZXMsCiAgICAgICAgY29uc3QgTXlVbnMgcm93KQogICAgICAgIGNvbnN0
OwogICAgVkVDICogU3ViCiAgICAgICAgKFZFQyAqIHJlcywKICAgICAgICBjb25zdCBNeVVucyBy
b3cpCiAgICAgICAgY29uc3Q7CiAgICBNQVQgKiBDb3B5CiAgICAgICAgKE1BVCAqIHJlcywKICAg
ICAgICBjb25zdCBNeVVucyByb3csCiAgICAgICAgY29uc3QgTXlVbnMgY29sKQogICAgICAgIGNv
bnN0OwogICAgTUFUICogQWRkCiAgICAgICAgKE1BVCAqIHJlcywKICAgICAgICBjb25zdCBNeVVu
cyByb3csCiAgICAgICAgY29uc3QgTXlVbnMgY29sKQogICAgICAgIGNvbnN0OwogICAgTUFUICog
U3ViCiAgICAgICAgKE1BVCAqIHJlcywKICAgICAgICBjb25zdCBNeVVucyByb3csCiAgICAgICAg
Y29uc3QgTXlVbnMgY29sKQogICAgICAgIGNvbnN0Owp9OwoKCmV4dGVybiBjb25zdCBUZW5zb3Ix
IFpFUk8xOwoKCm9zdHJlYW0gJiBvcGVyYXRvciA8PAogICAgICAgIChvc3RyZWFtICYgcywKICAg
ICAgICBjb25zdCBUZW5zb3IxICYgeik7CgoKY2xhc3MgVGVuc29yMiB7CnByaXZhdGU6CiAgICBU
ZW5zb3IxIHhbM107CnB1YmxpYzoKCiAgICBUZW5zb3IyCiAgICAgICAgICAgICh2b2lkKTsKICAg
IFRlbnNvcjIKICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjEgJiBhLAogICAgICAgICAgICBjb25z
dCBUZW5zb3IxICYgYiwKICAgICAgICAgICAgY29uc3QgVGVuc29yMSAmIGMpOwogICAgVGVuc29y
MgogICAgICAgICAgICAoY29uc3QgVGVuc29yMSBhWzNdKTsKICAgIFRlbnNvcjIKICAgICAgICAg
ICAgKGNvbnN0IFRlbnNvcjIgJiBhKTsKICAgIHZpcnR1YWwgflRlbnNvcjIKICAgICAgICAgICAg
KHZvaWQpIHt9OwoKICAgIFRlbnNvcjEgJiBvcGVyYXRvciBbXQogICAgICAgICAgICAoY29uc3Qg
TXlVbnMgJiBpbmRleCk7CiAgICBjb25zdCBUZW5zb3IxICYgb3BlcmF0b3IgW10KICAgICAgICAg
ICAgKGNvbnN0IE15VW5zICYgaW5kZXgpCiAgICAgICAgICAgIGNvbnN0OwoKICAgIFRlbnNvcjIg
JiBvcGVyYXRvciA9CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IyICYgYSk7CiAgICBUZW5zb3Iy
ICYgb3BlcmF0b3IgKz0KICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjIgJiBhKTsKICAgIFRlbnNv
cjIgJiBvcGVyYXRvciAtPQogICAgICAgICAgICAoY29uc3QgVGVuc29yMiAmIGEpOwogICAgVGVu
c29yMiBvcGVyYXRvciAtCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKICAg
IFRlbnNvcjIgb3BlcmF0b3IgKwogICAgICAgICAgICAoY29uc3QgVGVuc29yMiAmIGEpCiAgICAg
ICAgICAgIGNvbnN0OwogICAgVGVuc29yMiBvcGVyYXRvciAtCiAgICAgICAgICAgIChjb25zdCBU
ZW5zb3IyICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IyIG9wZXJhdG9yICoKICAg
ICAgICAgICAgKGNvbnN0IE15RmxvYXQgJiBhKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNv
cjIgb3BlcmF0b3IgLwogICAgICAgICAgICAoY29uc3QgTXlGbG9hdCAmIGEpCiAgICAgICAgICAg
IGNvbnN0OwoKICAgIFRlbnNvcjIgVHJhbnNwb3NlCiAgICAgICAgICAgICh2b2lkKQogICAgICAg
ICAgICBjb25zdDsKICAgIFRlbnNvcjIgU3ltbQogICAgICAgICAgICAodm9pZCkKICAgICAgICAg
ICAgY29uc3QgOwogICAgVGVuc29yMSBBeGlhbAogICAgICAgICAgICAodm9pZCkKICAgICAgICAg
ICAgY29uc3Q7CiAgICBNeUZsb2F0IFRyYWNlCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAg
ICBjb25zdDsKICAgIE15RmxvYXQgSW52YXIyCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAg
ICBjb25zdDsKICAgIE15RmxvYXQgRGV0CiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBj
b25zdDsKICAgIFRlbnNvcjIgSW52ZXJzZQogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAg
Y29uc3Q7CiAgICBUZW5zb3IzIENyb3NzCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBj
b25zdDsKCiAgICBNeUZsb2F0IEREb3QKICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjIgJiBhKQog
ICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjEgRERvdAogICAgICAgICAgICAoY29uc3QgVGVu
c29yMyAmIGEpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yMiBERG90CiAgICAgICAgICAg
IChjb25zdCBUZW5zb3I0ICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IxIERvdAog
ICAgICAgICAgICAoY29uc3QgVGVuc29yMSAmIGEpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVu
c29yMiBEb3QKICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjIgJiBhKQogICAgICAgICAgICBjb25z
dDsKICAgIFRlbnNvcjMgRG90CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IzICYgYSkKICAgICAg
ICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IERvdAogICAgICAgICAgICAoY29uc3QgVGVuc29yNCAm
IGEpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yMyBPcGVuCiAgICAgICAgICAgIChjb25z
dCBUZW5zb3IxICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IE9wZW4KICAgICAg
ICAgICAgKGNvbnN0IFRlbnNvcjIgJiBhKQogICAgICAgICAgICBjb25zdDsKCiAgICBNQVQgKiBD
b3B5CiAgICAgICAgICAgIChNQVQgKiByZXMsCiAgICAgICAgICAgIGNvbnN0IE15VW5zIHJvdywK
ICAgICAgICAgICAgY29uc3QgTXlVbnMgY29sKQogICAgICAgICAgICBjb25zdDsKICAgIE1BVCAq
IEFkZAogICAgICAgICAgICAoTUFUICogcmVzLAogICAgICAgICAgICBjb25zdCBNeVVucyByb3cs
CiAgICAgICAgICAgIGNvbnN0IE15VW5zIGNvbCkKICAgICAgICAgICAgY29uc3Q7CiAgICBNQVQg
KiBTdWIKICAgICAgICAgICAgKE1BVCAqIHJlcywKICAgICAgICAgICAgY29uc3QgTXlVbnMgcm93
LAogICAgICAgICAgICBjb25zdCBNeVVucyBjb2wpCiAgICAgICAgICAgIGNvbnN0Owp9OwoKCmV4
dGVybiBjb25zdCBUZW5zb3IyIFpFUk8yOwpleHRlcm4gY29uc3QgVGVuc29yMiBJREVOVElUWTsK
Cgpvc3RyZWFtICYgb3BlcmF0b3IgPDwKICAgICAgICAob3N0cmVhbSAmIHMsCiAgICAgICAgY29u
c3QgVGVuc29yMiAmIHopOwoKCmNsYXNzIFRlbnNvcjMgewpwcml2YXRlOgogICAgVGVuc29yMiB4
WzNdOwpwdWJsaWM6CgogICAgVGVuc29yMwogICAgICAgICAgICAodm9pZCk7CiAgICBUZW5zb3Iz
CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IyICYgYSwKICAgICAgICAgICAgY29uc3QgVGVuc29y
MiAmIGIsCiAgICAgICAgICAgIGNvbnN0IFRlbnNvcjIgJiBjKTsKICAgIFRlbnNvcjMKICAgICAg
ICAgICAgKGNvbnN0IFRlbnNvcjMgJiBhKTsKICAgIFRlbnNvcjMKICAgICAgICAgICAgKGNvbnN0
IFRlbnNvcjIgYVszXSk7CiAgICB2aXJ0dWFsIH5UZW5zb3IzCiAgICAgICAgICAgICh2b2lkKSB7
fTsKCiAgICBUZW5zb3IyICYgb3BlcmF0b3IgW10KICAgICAgICAgICAgKGNvbnN0IE15VW5zICYg
aW5kZXgpOwogICAgY29uc3QgVGVuc29yMiAmIG9wZXJhdG9yW10KICAgICAgICAgICAgKGNvbnN0
IE15VW5zICYgaW5kZXgpCiAgICAgICAgICAgIGNvbnN0OwoKICAgIFRlbnNvcjMgJiBvcGVyYXRv
ciA9CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IzICYgYSk7CiAgICBUZW5zb3IzICYgb3BlcmF0
b3IgKz0KICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjMgJiBhKTsKICAgIFRlbnNvcjMgJiBvcGVy
YXRvciAtPQogICAgICAgICAgICAoY29uc3QgVGVuc29yMyAmIGEpOwogICAgVGVuc29yMyBvcGVy
YXRvciAtCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjMg
b3BlcmF0b3IgKwogICAgICAgICAgICAoY29uc3QgVGVuc29yMyAmIGEpCiAgICAgICAgICAgIGNv
bnN0OwogICAgVGVuc29yMyBvcGVyYXRvciAtCiAgICAgICAgICAgIChjb25zdCBUZW5zb3IzICYg
YSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIG9wZXJhdG9yICoKICAgICAgICAgICAg
KGNvbnN0IE15RmxvYXQgJiBhKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjMgb3BlcmF0
b3IgLwogICAgICAgICAgICAoY29uc3QgTXlGbG9hdCAmIGEpCiAgICAgICAgICAgIGNvbnN0OwoK
CiAgICBUZW5zb3IzIFRyYW5zcG9zZTIxMwogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAg
Y29uc3Q7CiAgICBUZW5zb3IzIFRyYW5zcG9zZTEzMgogICAgICAgICAgICAodm9pZCkKICAgICAg
ICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIFRyYW5zcG9zZTMyMQogICAgICAgICAgICAodm9pZCkK
ICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIFRyYW5zcG9zZTIzMQogICAgICAgICAgICAo
dm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIFRyYW5zcG9zZTMxMgogICAgICAg
ICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIFN5bW0yMTMKICAgICAg
ICAgICAgKHZvaWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yMyBTeW1tMTMyCiAgICAg
ICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjMgU3ltbTMyMQogICAg
ICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIERvdWJsZVN5bW0K
ICAgICAgICAgICAgKHZvaWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yMyBGdWxsU3lt
bQogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IyIEF4aWFs
CiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKCiAgICBNeUZsb2F0IFREb3QK
ICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjMgJiBhKQogICAgICAgICAgICBjb25zdDsKICAgIFRl
bnNvcjEgVERvdAogICAgICAgICAgICAoY29uc3QgVGVuc29yNCAmIGEpCiAgICAgICAgICAgIGNv
bnN0OwogICAgVGVuc29yMSBERG90CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IyICYgYSkKICAg
ICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IyIEREb3QKICAgICAgICAgICAgKGNvbnN0IFRlbnNv
cjMgJiBhKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjMgRERvdAogICAgICAgICAgICAo
Y29uc3QgVGVuc29yNCAmIGEpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yMiBEb3QKICAg
ICAgICAgICAgKGNvbnN0IFRlbnNvcjEgJiBhKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNv
cjMgRG90CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IyICYgYSkKICAgICAgICAgICAgY29uc3Q7
CiAgICBUZW5zb3I0IERvdAogICAgICAgICAgICAoY29uc3QgVGVuc29yMyAmIGEpCiAgICAgICAg
ICAgIGNvbnN0OwogICAgVGVuc29yNCBPcGVuCiAgICAgICAgICAgIChjb25zdCBUZW5zb3IxICYg
YSkKICAgICAgICAgICAgY29uc3Q7Cn07CgoKZXh0ZXJuIGNvbnN0IFRlbnNvcjMgWkVSTzM7CmV4
dGVybiBjb25zdCBUZW5zb3IzIElfQ1JPU1M7CgoKb3N0cmVhbSAmIG9wZXJhdG9yIDw8CiAgICAg
ICAgKG9zdHJlYW0gJiBzLAogICAgICAgIGNvbnN0IFRlbnNvcjMgJiB6KTsKCgpjbGFzcyBUZW5z
b3I0IHsKcHJpdmF0ZToKICAgIFRlbnNvcjMgeFszXTsKcHVibGljOgoKICAgIFRlbnNvcjQKICAg
ICAgICAgICAgKHZvaWQpOwogICAgVGVuc29yNAogICAgICAgICAgICAoY29uc3QgVGVuc29yMyAm
IGEsCiAgICAgICAgICAgIGNvbnN0IFRlbnNvcjMgJiBiLAogICAgICAgICAgICBjb25zdCBUZW5z
b3IzICYgYyk7CiAgICBUZW5zb3I0CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IzIGFbM10pOwog
ICAgVGVuc29yNAogICAgICAgICAgICAoY29uc3QgVGVuc29yNCAmIGEpOwogICAgdmlydHVhbCB+
VGVuc29yNAogICAgICAgICAgICAodm9pZCkge307CgogICAgVGVuc29yMyAmIG9wZXJhdG9yIFtd
CiAgICAgICAgICAgIChjb25zdCBNeVVucyAmIGluZGV4KTsKICAgIGNvbnN0IFRlbnNvcjMgJiBv
cGVyYXRvcltdCiAgICAgICAgICAgIChjb25zdCBNeVVucyAmIGluZGV4KQogICAgICAgICAgICBj
b25zdDsKCiAgICBUZW5zb3I0ICYgb3BlcmF0b3IgPQogICAgICAgICAgICAoY29uc3QgVGVuc29y
NCAmIGEpOwogICAgVGVuc29yNCAmIG9wZXJhdG9yICs9CiAgICAgICAgICAgIChjb25zdCBUZW5z
b3I0ICYgYSk7CiAgICBUZW5zb3I0ICYgb3BlcmF0b3IgLT0KICAgICAgICAgICAgKGNvbnN0IFRl
bnNvcjQgJiBhKTsKICAgIFRlbnNvcjQgb3BlcmF0b3IgLQogICAgICAgICAgICAodm9pZCkgY29u
c3Q7CiAgICBUZW5zb3I0IG9wZXJhdG9yICsKICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjQgJiBh
KQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQgb3BlcmF0b3IgLQogICAgICAgICAgICAo
Y29uc3QgVGVuc29yNCAmIGEpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yNCBvcGVyYXRv
ciAqCiAgICAgICAgICAgIChjb25zdCBNeUZsb2F0ICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAg
ICBUZW5zb3I0IG9wZXJhdG9yIC8KICAgICAgICAgICAgKGNvbnN0IE15RmxvYXQgJiBhKQogICAg
ICAgICAgICBjb25zdDsKCgogICAgVGVuc29yNCBUcmFuc3Bvc2UyMTM0CiAgICAgICAgICAgICh2
b2lkKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQgVHJhbnNwb3NlMTMyNAogICAgICAg
ICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IFRyYW5zcG9zZTEyNDMK
ICAgICAgICAgICAgKHZvaWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yNCBUcmFuc3Bv
c2U0MjMxCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQg
VHJhbnNwb3NlMzIxNAogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBU
ZW5zb3I0IFRyYW5zcG9zZTE0MzIKICAgICAgICAgICAgKHZvaWQpCiAgICAgICAgICAgIGNvbnN0
OwogICAgVGVuc29yNCBUcmFuc3Bvc2UyMzE0CiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAg
ICBjb25zdDsKICAgIFRlbnNvcjQgVHJhbnNwb3NlMzEyNAogICAgICAgICAgICAodm9pZCkKICAg
ICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IFRyYW5zcG9zZTI0MzEKICAgICAgICAgICAgKHZv
aWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yNCBUcmFuc3Bvc2U0MTMyCiAgICAgICAg
ICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQgVHJhbnNwb3NlMzI0MQog
ICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IFRyYW5zcG9z
ZTQyMTMKICAgICAgICAgICAgKHZvaWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yNCBU
cmFuc3Bvc2UxMzQyCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKICAgIFRl
bnNvcjQgVHJhbnNwb3NlMTQyMwogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7
CiAgICBUZW5zb3I0IFRyYW5zcG9zZTIxNDMKICAgICAgICAgICAgKHZvaWQpCiAgICAgICAgICAg
IGNvbnN0OwogICAgVGVuc29yNCBUcmFuc3Bvc2UzNDIxCiAgICAgICAgICAgICh2b2lkKQogICAg
ICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQgVHJhbnNwb3NlNDMxMgogICAgICAgICAgICAodm9p
ZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IFRyYW5zcG9zZTQzMjEKICAgICAgICAg
ICAgKHZvaWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yNCBUcmFuc3Bvc2UyNDEzCiAg
ICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQgVHJhbnNwb3Nl
MzE0MgogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IFRy
YW5zcG9zZTM0MTIKICAgICAgICAgICAgKHZvaWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVu
c29yNCBUcmFuc3Bvc2UyMzQxCiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAgICBjb25zdDsK
ICAgIFRlbnNvcjQgVHJhbnNwb3NlNDEyMwogICAgICAgICAgICAodm9pZCkKICAgICAgICAgICAg
Y29uc3Q7CiAgICBUZW5zb3I0IFN5bW0yMTM0CiAgICAgICAgICAgICh2b2lkKQogICAgICAgICAg
ICBjb25zdDsKICAgIFRlbnNvcjQgU3ltbTEzMjQKICAgICAgICAgICAgKHZvaWQpCiAgICAgICAg
ICAgIGNvbnN0OwogICAgVGVuc29yNCBTeW1tMTI0MwogICAgICAgICAgICAodm9pZCkKICAgICAg
ICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IFN5bW00MjMxCiAgICAgICAgICAgICh2b2lkKQogICAg
ICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQgU3ltbTMyMTQKICAgICAgICAgICAgKHZvaWQpCiAg
ICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yNCBTeW1tMTQzMgogICAgICAgICAgICAodm9pZCkK
ICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3I0IERvdWJsZVN5bW0yMzQKICAgICAgICAgICAg
KHZvaWQpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yNCBGdWxsU3ltbTIzNAogICAgICAg
ICAgICAodm9pZCkKICAgICAgICAgICAgY29uc3Q7CgogICAgTXlGbG9hdCBRRG90CiAgICAgICAg
ICAgIChjb25zdCBUZW5zb3I0ICYgYSkKICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IxIFRE
b3QKICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjMgJiBhKQogICAgICAgICAgICBjb25zdDsKICAg
IFRlbnNvcjIgVERvdAogICAgICAgICAgICAoY29uc3QgVGVuc29yNCAmIGEpCiAgICAgICAgICAg
IGNvbnN0OwogICAgVGVuc29yMiBERG90CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IyICYgYSkK
ICAgICAgICAgICAgY29uc3Q7CiAgICBUZW5zb3IzIEREb3QKICAgICAgICAgICAgKGNvbnN0IFRl
bnNvcjMgJiBhKQogICAgICAgICAgICBjb25zdDsKICAgIFRlbnNvcjQgRERvdAogICAgICAgICAg
ICAoY29uc3QgVGVuc29yNCAmIGEpCiAgICAgICAgICAgIGNvbnN0OwogICAgVGVuc29yMyBEb3QK
ICAgICAgICAgICAgKGNvbnN0IFRlbnNvcjEgJiBhKQogICAgICAgICAgICBjb25zdDsKICAgIFRl
bnNvcjQgRG90CiAgICAgICAgICAgIChjb25zdCBUZW5zb3IyICYgYSkKICAgICAgICAgICAgY29u
c3Q7Cn07CgoKZXh0ZXJuIGNvbnN0IFRlbnNvcjQgWkVSTzQ7CmV4dGVybiBjb25zdCBUZW5zb3I0
IElERU5UX0ZPVVI7CmV4dGVybiBjb25zdCBUZW5zb3I0IElERU5UX0lOTkVSOwpleHRlcm4gY29u
c3QgVGVuc29yNCBJREVOVF9PVVRFUjsKCgpvc3RyZWFtICYgb3BlcmF0b3IgPDwKICAgICAgICAo
b3N0cmVhbSAmIHMsCiAgICAgICAgY29uc3QgVGVuc29yNCAmIHopOwojIDUgIkRlcEludGVncmF0
ZWRDb25uZWN0aW9uLmhoIiAyCiMgMSAiSW50ZXJwV0Z1bmN0LmhoIiAxCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyA1ICJJbnRlcnBXRnVuY3QuaGgiIDIKIyAxICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAxIDMKIyA2ICJJbnRlcnBXRnVuY3QuaGgiIDIKIyAxICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0uaCIgMSAzCiMgNyAiSW50ZXJwV0Z1bmN0
LmhoIiAyCgojIDEgIi9ob21lL21hcmNvL0htZmUvSGVsTW8vSW5jbHVkZS9MYW5ndWFnZS9NeURl
YnVnLmhoIiAxCiMgOSAiSW50ZXJwV0Z1bmN0LmhoIiAyCiMgMSAiL2hvbWUvbWFyY28vSG1mZS9I
ZWxNby9JbmNsdWRlL0xhbmd1YWdlL015VHlwZXMuaGgiIDEKIyAxMCAiSW50ZXJwV0Z1bmN0Lmho
IiAyCiMgMSAiL2hvbWUvbWFyY28vSG1mZS9IZWxNby9JbmNsdWRlL0xhbmd1YWdlL0FycmF5cy5o
aCIgMQoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDkgIi9ob21lL21h
cmNvL0htZmUvSGVsTW8vSW5jbHVkZS9MYW5ndWFnZS9BcnJheXMuaGgiIDIKCgp0ZW1wbGF0ZTxj
bGFzcyBUPiBjbGFzcyBBcnJheTIgewpwcml2YXRlOgogICAgc2l6ZV90IGQwOwogICAgc2l6ZV90
IGQxOwogICAgVCAqIGRhdGE7CiAgICBBcnJheTI8VD4gJiBvcGVyYXRvciA9IChjb25zdCBBcnJh
eTI8VD4gJik7CiAgICBBcnJheTI8VD4gKGNvbnN0IEFycmF5MjxUPiAmKTsKcHVibGljOgogICAg
QXJyYXkyPFQ+IChzaXplX3QgczAsIHNpemVfdCBzMSkge2QwID0gczA7IGQxID0gczE7IGRhdGEg
PSBuZXcgVFtkMCpkMV07fTsKICAgIHZpcnR1YWwgfkFycmF5MjxUPiAoKSB7ZGVsZXRlW10gZGF0
YTt9OwogICAgVCAmIG9wZXJhdG9yICgpIChzaXplX3QgczAsIHNpemVfdCBzMSkge3JldHVybiAq
KGRhdGErZDEqczArczEpO307CiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKHNpemVfdCBzMCwg
c2l6ZV90IHMxKSBjb25zdCB7cmV0dXJuICooZGF0YStkMSpzMCtzMSk7fTsKICAgIGNvbnN0IHNp
emVfdCBTaXplMCh2b2lkKSBjb25zdCB7cmV0dXJuIGQwO307CiAgICBjb25zdCBzaXplX3QgU2l6
ZTEodm9pZCkgY29uc3Qge3JldHVybiBkMTt9Owp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3Mg
QXJyYXkzIHsKcHJpdmF0ZToKICAgIHNpemVfdCBkMDsKICAgIHNpemVfdCBkMTsKICAgIHNpemVf
dCBkMjsKICAgIFQgKiBkYXRhOwogICAgQXJyYXkzPFQ+ICYgb3BlcmF0b3IgPSAoY29uc3QgQXJy
YXkzPFQ+ICYgYSk7CiAgICBBcnJheTM8VD4gKGNvbnN0IEFycmF5MzxUPiAmKTsKcHVibGljOgog
ICAgQXJyYXkzPFQ+IChzaXplX3QgczAsIHNpemVfdCBzMSwgc2l6ZV90IHMyKSB7ZDAgPSBzMDsg
ZDEgPSBzMTsgZDIgPSBzMjsgZGF0YSA9IG5ldyBUW2QwKmQxKmQyXTt9OwogICAgdmlydHVhbCB+
QXJyYXkzPFQ+ICgpIHtkZWxldGVbXSBkYXRhO307CiAgICBUICYgb3BlcmF0b3IgKCkgKHNpemVf
dCBzMCwgc2l6ZV90IHMxLCBzaXplX3QgczIpIHtyZXR1cm4gKihkYXRhK2QyKihkMSpzMCtzMSkr
czIpO307CiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKHNpemVfdCBzMCwgc2l6ZV90IHMxLCBz
aXplX3QgczIpIGNvbnN0IHtyZXR1cm4gKihkYXRhK2QyKihkMSpzMCtzMSkrczIpO307CiAgICBj
b25zdCBzaXplX3QgU2l6ZTAodm9pZCkgY29uc3Qge3JldHVybiBkMDt9OwogICAgY29uc3Qgc2l6
ZV90IFNpemUxKHZvaWQpIGNvbnN0IHtyZXR1cm4gZDE7fTsKICAgIGNvbnN0IHNpemVfdCBTaXpl
Mih2b2lkKSBjb25zdCB7cmV0dXJuIGQyO307Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBB
cnJheTQgewpwcml2YXRlOgogICAgc2l6ZV90IGQwOwogICAgc2l6ZV90IGQxOwogICAgc2l6ZV90
IGQyOwogICAgc2l6ZV90IGQzOwogICAgVCAqIGRhdGE7CiAgICBBcnJheTQ8VD4gJiBvcGVyYXRv
ciA9IChjb25zdCBBcnJheTQ8VD4gJiBhKTsKICAgIEFycmF5NDxUPiAoY29uc3QgQXJyYXk0PFQ+
ICYpOwpwdWJsaWM6CiAgICBBcnJheTQ8VD4gKHNpemVfdCBzMCwgc2l6ZV90IHMxLCBzaXplX3Qg
czIsIHNpemVfdCBzMykge2QwID0gczA7IGQxID0gczE7IGQyID0gczI7IGQzID0gczM7IGRhdGEg
PSBuZXcgVFtkMCpkMSpkMipkM107fTsKICAgIHZpcnR1YWwgfkFycmF5NDxUPiAoKSB7ZGVsZXRl
W10gZGF0YTt9OwogICAgVCAmIG9wZXJhdG9yICgpIChzaXplX3QgczAsIHNpemVfdCBzMSwgc2l6
ZV90IHMyLCBzaXplX3QgczMpIHtyZXR1cm4gKihkYXRhK2QzKihkMiooZDEqczArczEpK3MyKStz
Myk7fTsKICAgIGNvbnN0IFQgJiBvcGVyYXRvciAoKSAoc2l6ZV90IHMwLCBzaXplX3QgczEsIHNp
emVfdCBzMiwgc2l6ZV90IHMzKSBjb25zdCB7cmV0dXJuICooZGF0YStkMyooZDIqKGQxKnMwK3Mx
KStzMikrczMpO307CiAgICBjb25zdCBzaXplX3QgU2l6ZTAodm9pZCkgY29uc3Qge3JldHVybiBk
MDt9OwogICAgY29uc3Qgc2l6ZV90IFNpemUxKHZvaWQpIGNvbnN0IHtyZXR1cm4gZDE7fTsKICAg
IGNvbnN0IHNpemVfdCBTaXplMih2b2lkKSBjb25zdCB7cmV0dXJuIGQyO307CiAgICBjb25zdCBz
aXplX3QgU2l6ZTModm9pZCkgY29uc3Qge3JldHVybiBkMzt9Owp9OwojIDExICJJbnRlcnBXRnVu
Y3QuaGgiIDIKCiMgMSAiQ29ubmVjdGlvblRyYWl0cy5oaCIgMQoKCgojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDUgIkNvbm5lY3Rpb25UcmFpdHMu
aGgiIDIKCiMgMSAibXlhc3NlcnQuaGgiIDEKIyA0MCAibXlhc3NlcnQuaGgiCiMgMSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyA0MSAibXlhc3NlcnQuaGgiIDIKIyAxICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0uaCIgMSAzCiMgNDIgIm15YXNzZXJ0Lmho
IiAyCgoKCgoKCgogIGNsYXNzIE15QXNzZXJ0IHsKICAgcHVibGljOgogICAgIGNsYXNzIEVyckdl
bmVyaWMge307CiAgfTsKCgogIGV4dGVybiB2b2lkIF9Bc3NlcnQoY29uc3QgY2hhciogZmlsZSwg
Y29uc3QgaW50IGxpbmUsIGNvbnN0IGNoYXIqIG1zZyA9IF9fbnVsbCk7CgogIGV4dGVybiBvc3Ry
ZWFtJiBfT3V0KG9zdHJlYW0mIG91dCwgY29uc3QgY2hhciogZmlsZSwgY29uc3QgaW50IGxpbmUp
OwojIDcgIkNvbm5lY3Rpb25UcmFpdHMuaGgiIDIKIyAxICIvaG9tZS9tYXJjby9IbWZlL0hlbE1v
L0luY2x1ZGUvR2VvTWF0aExpYi9UZW5zb3IuaGgiIDEKIyA4ICJDb25uZWN0aW9uVHJhaXRzLmho
IiAyCiMgMSAiL2hvbWUvbWFyY28vSG1mZS9IZWxNby9JbmNsdWRlL0xhbmd1YWdlL0FycmF5cy5o
aCIgMQojIDkgIkNvbm5lY3Rpb25UcmFpdHMuaGgiIDIKCiMgMSAiRG9GLmhoIiAxCgoKCgojIDEg
Im15YXNzZXJ0LmhoIiAxCiMgNiAiRG9GLmhoIiAyCiMgMSAiL2hvbWUvbWFyY28vSG1mZS9IZWxN
by9JbmNsdWRlL0xhbmd1YWdlL015VHlwZXMuaGgiIDEKIyA3ICJEb0YuaGgiIDIKCiMgMSAiL2hv
bWUvbWFyY28vSG1mZS9IZWxNby9JbmNsdWRlL0dlb01hdGhMaWIvVGVuc29yLmhoIiAxCiMgOSAi
RG9GLmhoIiAyCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQ2xhc3NXcmFwCnsKcHJpdmF0
ZToKICAgICAgICBUIHg7CnB1YmxpYzoKICAgICAgICBDbGFzc1dyYXAoKSB7fTsKICAgICAgICBD
bGFzc1dyYXAoY29uc3QgVCYgYSkge3g9YTt9OwogICAgICAgIG9wZXJhdG9yIFQoKSBjb25zdCB7
cmV0dXJuIHg7fTsKICAgICAgICBDbGFzc1dyYXA8VD4mIG9wZXJhdG9yID0gKGNvbnN0IFQmIGEp
IHsKICAgICAgICAgICAgICAgIHggPSBhOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgIH07CiAgICAgICAgQ2xhc3NXcmFwPFQ+JiBvcGVyYXRvciArPSAoY29uc3QgVCYgYSkg
ewogICAgICAgICAgICAgICAgeCArPSBhOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgIH07CiAgICAgICAgQ2xhc3NXcmFwPFQ+JiBvcGVyYXRvciAtPSAoY29uc3QgVCYgYSkg
ewogICAgICAgICAgICAgICAgeCAtPSBhOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgIH07CiAgICAgICAgdHlwZWRlZiBUIGRhdGFfdHlwZTsKfTsKCgp0ZW1wbGF0ZTxjbGFz
cyBUPgpzdHJ1Y3QgZG9mX3RyYWl0czsKCnN0cnVjdCBkb2ZfdHJhaXRzPE15RmxvYXQ+IHsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBIYXNHZGwgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBNeVVucyBOR0RMID0gMTsKCiAgICAgICAgdHlwZWRlZiBNeUZsb2F0IHJlYWxfdHlwZTsKICAg
ICAgICBzdGF0aWMgaW5saW5lIHJlYWxfdHlwZSBaRVJPKCkge3JldHVybiAwLjt9Owp9OwoKc3Ry
dWN0IGRvZl90cmFpdHM8VGVuc29yMT4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIEhhc0dk
bCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IE15VW5zIE5HREwgPSAzOwoKICAgICAgICB0
eXBlZGVmIFRlbnNvcjEgcmVhbF90eXBlOwogICAgICAgIHN0YXRpYyBpbmxpbmUgcmVhbF90eXBl
IFpFUk8oKSB7cmV0dXJuIFpFUk8xO307Cn07CgpzdHJ1Y3QgZG9mX3RyYWl0czxUZW5zb3IyPiB7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgSGFzR2RsID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgTXlVbnMgTkdETCA9IDk7CgogICAgICAgIHR5cGVkZWYgVGVuc29yMiByZWFsX3R5cGU7
CiAgICAgICAgc3RhdGljIGlubGluZSByZWFsX3R5cGUgWkVSTygpIHtyZXR1cm4gWkVSTzI7fTsK
fTsKCnN0cnVjdCBkb2ZfdHJhaXRzPFRlbnNvcjM+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBIYXNHZGwgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBOR0RMID0gMjc7Cgog
ICAgICAgIHR5cGVkZWYgVGVuc29yMyByZWFsX3R5cGU7CiAgICAgICAgc3RhdGljIGlubGluZSBy
ZWFsX3R5cGUgWkVSTygpIHtyZXR1cm4gWkVSTzM7fTsKfTsKCnN0cnVjdCBkb2ZfdHJhaXRzPFRl
bnNvcjQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBIYXNHZGwgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBNeVVucyBOR0RMID0gODE7CgogICAgICAgIHR5cGVkZWYgVGVuc29yNCBy
ZWFsX3R5cGU7CiAgICAgICAgc3RhdGljIGlubGluZSByZWFsX3R5cGUgWkVSTygpIHtyZXR1cm4g
WkVSTzQ7fTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgZG9mX3RyYWl0czxDbGFzc1dy
YXA8VD4gPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgSGFzR2RsID0gZG9mX3RyYWl0czxU
Pjo6SGFzR2RsOwogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBOR0RMID0gZG9mX3RyYWl0czxU
Pjo6TkdETDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGRvZl90cmFpdHM8VD46OnJlYWxfdHlw
ZSByZWFsX3R5cGU7CiAgICAgICAgc3RhdGljIGlubGluZSByZWFsX3R5cGUgWkVSTygpIHtyZXR1
cm4gZG9mX3RyYWl0czxyZWFsX3R5cGU+OjpaRVJPKCk7fTsKfTsKCgpjbGFzcyBXaXRoRG9GSW5k
ZXgKewpwcml2YXRlOgogICAgICAgIE15VW5zIGRvZjsKcHVibGljOgogICAgICAgIE15VW5zIEdl
dERvRkluZGV4KCkgY29uc3QgeyByZXR1cm4gZG9mOyB9OwogICAgICAgIE15VW5zIFNldERvRklu
ZGV4KE15VW5zIGEpIHsgcmV0dXJuIGRvZj1hOyB9OwogICAgICAgIGJvb2wgSGFzRG9GOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBBdXRvR2V0RG9GKE15VW5zICZuZXh0X2ZyZWVfZG9mKSA9IDA7Cn07
CgoKY2xhc3MgV2l0aElkCnsKcHJpdmF0ZToKICAgICAgICBNeVVucyBpZDsKcHVibGljOgogICAg
ICAgIE15VW5zIEdldElkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH07CiAgICAgICAgTXlVbnMgU2V0
SWQoTXlVbnMgYSkgeyByZXR1cm4gaWQ9YTsgfTsKfTsKCnRlbXBsYXRlPGNsYXNzIFRfZGF0YT4K
Y2xhc3MgV2l0aElkV3JhcHBlciA6IHB1YmxpYyBUX2RhdGEsIHB1YmxpYyBXaXRoSWQgewpwdWJs
aWM6CiAgICAgICAgV2l0aElkV3JhcHBlcihjb25zdCBUX2RhdGEmIGQgPSBUX2RhdGEoKSkgOiBU
X2RhdGEoZCkge307CiAgICAgICAgV2l0aElkV3JhcHBlcjxUX2RhdGE+KGNvbnN0IFdpdGhJZFdy
YXBwZXI8VF9kYXRhPiYgYSkgOgogICAgICAgICAgICAgICAgVF9kYXRhKGEpIHt9OwogICAgICAg
IHZpcnR1YWwgfldpdGhJZFdyYXBwZXIoKSB7fTsKICAgICAgICBXaXRoSWRXcmFwcGVyPFRfZGF0
YT4mIG9wZXJhdG9yID0gKAogICAgICAgICAgICAgICAgY29uc3QgV2l0aElkV3JhcHBlcjxUX2Rh
dGE+JiBhKSB7CiAgICAgICAgICAgICAgICBUX2RhdGE6Om9wZXJhdG9yPShhKTsKICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9OwogICAgICAgIFdpdGhJZFdyYXBwZXI8VF9k
YXRhPiYgb3BlcmF0b3IgPSAoY29uc3QgVF9kYXRhJiBhKSB7CiAgICAgICAgICAgICAgICBUX2Rh
dGE6Om9wZXJhdG9yPShhKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9
OwoKICAgICAgICBvcGVyYXRvciBUX2RhdGEoKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1
cm4gKFRfZGF0YSkoKnRoaXMpOwogICAgICAgIH07Cn07CiMgMTQxICJEb0YuaGgiCnRlbXBsYXRl
IDxjbGFzcyBUX2RhdGE+CmNsYXNzIFN5c3RlbUNvbnRyaWJ1dG9yIDogcHVibGljIFRfZGF0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2l0aERvRkluZGV4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBXaXRoSWQKCnsKcHJpdmF0ZToKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIGRvZl90cmFpdHM8VF9kYXRhPjo6cmVhbF90eXBlIHJlYWxfdHlwZTsKCgoKCnB1
YmxpYzoKCgoKCgogICAgICAgIFN5c3RlbUNvbnRyaWJ1dG9yKGNvbnN0IFRfZGF0YSYgZCA9IFRf
ZGF0YSgpKSA6IFRfZGF0YShkKSB7CiAgICAgICAgICAgICAgICBkbyB7IGlmICghKGRvZl90cmFp
dHM8VF9kYXRhPjo6SGFzR2RsKSkgeyBfQXNzZXJ0KCJEb0YuaGgiLCAxNjAsICgiRXJyb3IsIGNs
YXNzIFRfZGF0YSBkb2VzIG5vdCBoYXZlIEdETCIpKTsgdGhyb3cgTXlBc3NlcnQ6OkVyckdlbmVy
aWMoKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgICAgICAgICAgICBIYXNEb0YgPSBmYWxzZTsKICAg
ICAgICB9OwogICAgICAgIFN5c3RlbUNvbnRyaWJ1dG9yPFRfZGF0YT4oCiAgICAgICAgICAgICAg
ICBjb25zdCBTeXN0ZW1Db250cmlidXRvcjxUX2RhdGE+JiBhKSA6IFRfZGF0YShhKSB7fTsKICAg
ICAgICB2aXJ0dWFsIH5TeXN0ZW1Db250cmlidXRvcigpIHt9OwogICAgICAgIFN5c3RlbUNvbnRy
aWJ1dG9yPFRfZGF0YT4mIG9wZXJhdG9yID0gKAogICAgICAgICAgICAgICAgY29uc3QgU3lzdGVt
Q29udHJpYnV0b3I8VF9kYXRhPiYgYSkgewogICAgICAgICAgICAgICAgVF9kYXRhOjpvcGVyYXRv
cj0oYSk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfTsKICAgICAgICBN
eVVucyBOR2RMKCkge3JldHVybiBkb2ZfdHJhaXRzPFRfZGF0YT46Ok5HREw7fQoKICAgICAgICBv
cGVyYXRvciByZWFsX3R5cGUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gKFRfZGF0
YSkoKnRoaXMpOwogICAgICAgIH07CiAgICAgICAgU3lzdGVtQ29udHJpYnV0b3I8VF9kYXRhPiYg
b3BlcmF0b3IgPSAoY29uc3QgcmVhbF90eXBlJiBhKSB7CiAgICAgICAgICAgICAgICBUX2RhdGE6
Om9wZXJhdG9yPShhKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9OwoK
CiAgICAgICAgdmlydHVhbCB2b2lkIEF1dG9HZXREb0YoTXlVbnMgJm5leHRfZnJlZV9pZCkgewog
ICAgICAgICAgICAgICAgaWYgKEhhc0RvRikgewogICAgICAgICAgICAgICAgICAgICAgICBTZXRE
b0ZJbmRleChuZXh0X2ZyZWVfaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0X2ZyZWVf
aWQrPWRvZl90cmFpdHM8VF9kYXRhPjo6TkdETDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
OwogICAgICAgIHR5cGVkZWYgVF9kYXRhIGRhdGFfdHlwZTsKfTsKIyAxMSAiQ29ubmVjdGlvblRy
YWl0cy5oaCIgMgoKdGVtcGxhdGU8Y2xhc3MgY29vcmRzPgpzdHJ1Y3QgY29vcmRfdHJhaXRzOwoK
Y2xhc3MgYzRzcGFjZTsKY2xhc3MgYzNzcGFjZTsKY2xhc3MgYzJzcGFjZTsKY2xhc3MgYzFzcGFj
ZTsKY2xhc3MgYzBzcGFjZTsKCnN0cnVjdCBjb29yZF90cmFpdHM8YzRzcGFjZT57CiAgICAgICAg
c3RhdGljIGNvbnN0IE15VW5zIE51bWJlck9mQ29vcmQgPSA0OwogICAgICAgIHR5cGVkZWYgYzNz
cGFjZSBzdWJfc3BhY2U7Cn07CgpzdHJ1Y3QgY29vcmRfdHJhaXRzPGMzc3BhY2U+ewogICAgICAg
IHN0YXRpYyBjb25zdCBNeVVucyBOdW1iZXJPZkNvb3JkID0gMzsKICAgICAgICB0eXBlZGVmIGMy
c3BhY2Ugc3ViX3NwYWNlOwp9OwoKc3RydWN0IGNvb3JkX3RyYWl0czxjMnNwYWNlPnsKICAgICAg
ICBzdGF0aWMgY29uc3QgTXlVbnMgTnVtYmVyT2ZDb29yZCA9IDI7CiAgICAgICAgdHlwZWRlZiBj
MXNwYWNlIHN1Yl9zcGFjZTsKfTsKCnN0cnVjdCBjb29yZF90cmFpdHM8YzFzcGFjZT57CiAgICAg
ICAgc3RhdGljIGNvbnN0IE15VW5zIE51bWJlck9mQ29vcmQgPSAxOwogICAgICAgIHR5cGVkZWYg
YzBzcGFjZSBzdWJfc3BhY2U7Cn07CgoKc3RydWN0IGNvb3JkX3RyYWl0czxjMHNwYWNlPnsKICAg
ICAgICBzdGF0aWMgY29uc3QgTXlVbnMgTnVtYmVyT2ZDb29yZCA9IDA7Cn07CgoKdGVtcGxhdGU8
Y2xhc3MgY29ubmVjdGlvbiwgTXlVbnMgTnVtYmVyT2ZDb29yZD4Kc3RydWN0IGNvbm5lY3Rpb25f
dHJhaXRzOwoKY2xhc3MgbGluZWFyOwoKc3RydWN0IGNvbm5lY3Rpb25fdHJhaXRzPGxpbmVhciwg
Y29vcmRfdHJhaXRzPGMzc3BhY2U+OjpOdW1iZXJPZkNvb3JkPiB7CiAgICAgICAgc3RhdGljIGNv
bnN0IE15VW5zIE51bWJlck9mTm9kZXMgPSA4OwogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBO
dW1iZXJPZlN1YkNvbm5lY3Rpb24gPSA2OwogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyogU3Vi
Q29ubmVjdGlvbihNeVVucyBpKSB7CiAgICAgICAgZG8geyBpZiAoIShpPE51bWJlck9mU3ViQ29u
bmVjdGlvbikpIHsgX0Fzc2VydCgiQ29ubmVjdGlvblRyYWl0cy5oaCIsIDU2LCAoIkVycm9yLCBp
bmRleCBvdXQgb2YgcmFuZ2UgaW4gY29ubmVjdGlvbl90cmFpdHM8bGluZWFyLGNvb3JkX3RyYWl0
czxjM3NwYWNlPjo6TnVtYmVyT2ZDb29yZD46OlN1YkNvbm5lY3Rpb24iKSk7IHRocm93IE15QXNz
ZXJ0OjpFcnJHZW5lcmljKCk7IH0gfSB3aGlsZSAoMCk7CgogICAgICAgICAgICAgICAgTXlVbnMg
Y29ubls2XVs0XT0gewogICAgICAgICAgICAgICAgICAgICAgICB7MCwxLDIsM30sCiAgICAgICAg
ICAgICAgICAgICAgICAgIHs0LDcsNiw1fSwKICAgICAgICAgICAgICAgICAgICAgICAgezEsNSw2
LDJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7Miw2LDcsM30sCiAgICAgICAgICAgICAgICAg
ICAgICAgIHszLDcsNCwwfSwKICAgICAgICAgICAgICAgICAgICAgICAgezAsNCw1LDF9CiAgICAg
ICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5baV07CiAgICAgICAgfTsK
fTsKCnN0cnVjdCBjb25uZWN0aW9uX3RyYWl0czxsaW5lYXIsIGNvb3JkX3RyYWl0czxjMnNwYWNl
Pjo6TnVtYmVyT2ZDb29yZD4gewogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBOdW1iZXJPZk5v
ZGVzID0gNDsKICAgICAgICBzdGF0aWMgY29uc3QgTXlVbnMgTnVtYmVyT2ZTdWJDb25uZWN0aW9u
ID0gNDsKICAgICAgICBzdGF0aWMgY29uc3QgTXlVbnMqIFN1YkNvbm5lY3Rpb24oTXlVbnMgaSkg
ewogICAgICAgIGRvIHsgaWYgKCEoaTxOdW1iZXJPZlN1YkNvbm5lY3Rpb24pKSB7IF9Bc3NlcnQo
IkNvbm5lY3Rpb25UcmFpdHMuaGgiLCA3NCwgKCJFcnJvciwgaW5kZXggb3V0IG9mIHJhbmdlIGNv
bm5lY3Rpb25fdHJhaXRzPGxpbmVhcixjb29yZF90cmFpdHM8YzJzcGFjZT46Ok51bWJlck9mQ29v
cmQ+OjpTdWJDb25uZWN0aW9uIikpOyB0aHJvdyBNeUFzc2VydDo6RXJyR2VuZXJpYygpOyB9IH0g
d2hpbGUgKDApOwoKICAgICAgICAgICAgICAgIE15VW5zIGNvbm5bNF1bMl09IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgezAsMX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsxLDJ9LAogICAg
ICAgICAgICAgICAgICAgICAgICB7MiwzfSwKICAgICAgICAgICAgICAgICAgICAgICAgezMsMH0s
CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5baV07CiAgICAg
ICAgfTsKfTsKCnN0cnVjdCBjb25uZWN0aW9uX3RyYWl0czxsaW5lYXIsIGNvb3JkX3RyYWl0czxj
MXNwYWNlPjo6TnVtYmVyT2ZDb29yZD4gewogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBOdW1i
ZXJPZk5vZGVzID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgTXlVbnMgTnVtYmVyT2ZTdWJDb25u
ZWN0aW9uID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgTXlVbnMqIFN1YkNvbm5lY3Rpb24oTXlV
bnMgaSkgewogICAgICAgIGRvIHsgaWYgKCEoaTxOdW1iZXJPZlN1YkNvbm5lY3Rpb24pKSB7IF9B
c3NlcnQoIkNvbm5lY3Rpb25UcmFpdHMuaGgiLCA5MCwgKCJFcnJvciwgaW5kZXggb3V0IG9mIHJh
bmdlIGNvbm5lY3Rpb25fdHJhaXRzPGxpbmVhcixjb29yZF90cmFpdHM8YzFzcGFjZT46Ok51bWJl
ck9mQ29vcmQ+OjpTdWJDb25uZWN0aW9uIikpOyB0aHJvdyBNeUFzc2VydDo6RXJyR2VuZXJpYygp
OyB9IH0gd2hpbGUgKDApOwoKICAgICAgICAgICAgICAgIE15VW5zIGNvbm5bMl0gPSB7MCwxfTsK
ICAgICAgICAgICAgICAgIHJldHVybiBjb25uK2k7CiAgICAgICAgfTsKfTsKCnN0cnVjdCBjb25u
ZWN0aW9uX3RyYWl0czxsaW5lYXIsIGNvb3JkX3RyYWl0czxjMHNwYWNlPjo6TnVtYmVyT2ZDb29y
ZD4gewogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBOdW1iZXJPZk5vZGVzID0gMTsKICAgICAg
ICBzdGF0aWMgY29uc3QgTXlVbnMgTnVtYmVyT2ZTdWJDb25uZWN0aW9uID0gMDsKICAgICAgICBz
dGF0aWMgY29uc3QgTXlVbnMqIFN1YkNvbm5lY3Rpb24oTXlVbnMgaSkgewogICAgICAgIGRvIHsg
aWYgKCEoZmFsc2UpKSB7IF9Bc3NlcnQoIkNvbm5lY3Rpb25UcmFpdHMuaGgiLCAxMDEsICgiRXJy
b3IsIG5vIFN1YkNvbm5lY3Rpb24gaW4gY29ubmVjdGlvbl90cmFpdHM8bGluZWFyLGNvb3JkX3Ry
YWl0czxjMHNwYWNlPjo6TnVtYmVyT2ZDb29yZD46OlN1YkNvbm5lY3Rpb24iKSk7IHRocm93IE15
QXNzZXJ0OjpFcnJHZW5lcmljKCk7IH0gfSB3aGlsZSAoMCk7CgoKICAgICAgICAgICAgICAgIHJl
dHVybiAmaTsKICAgICAgICB9Owp9OwoKCnRlbXBsYXRlPGNsYXNzIGRpbWVuc2lvbj4Kc3RydWN0
IGRpbV90cmFpdHM7CgpzdHJ1Y3QgZGltX3RyYWl0czxjM3NwYWNlPiB7CiAgICAgICAgc3RhdGlj
IGNvbnN0IE15VW5zIE51bWJlck9mRGltID0gMzsKfTsKIyAxMzUgIkNvbm5lY3Rpb25UcmFpdHMu
aGgiCnN0cnVjdCBpbnRlcnBfdHJhaXRzIHsKICAgICAgICBzdGF0aWMgdm9pZCBCYXNlSW52KGNv
bnN0IE15VW5zIE51bWJlck9mQ29vcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE15
VW5zIE51bWJlck9mRGltLAogICAgICAgICAgICAgICAgICAgICAgICBUZW5zb3IyJiBCYXNlLAog
ICAgICAgICAgICAgICAgICAgICAgICBUZW5zb3IyJiBCYXNlSSkgewoKICAgICAgICAgICAgICAg
IGRvIHsgaWYgKCEoTnVtYmVyT2ZEaW0gPT0gZGltX3RyYWl0czxjM3NwYWNlPjo6TnVtYmVyT2ZE
aW0pKSB7IF9Bc3NlcnQoIkNvbm5lY3Rpb25UcmFpdHMuaGgiLCAxNDEsICgiRXJyb3IsIGludGVy
cF90cmFpdHMgaW1wbGVtZW50ZWQgb25seSBmb3IgMyBkaW1lbnNpb24iKSk7IHRocm93IE15QXNz
ZXJ0OjpFcnJHZW5lcmljKCk7IH0gfSB3aGlsZSAoMCk7CgogICAgICAgICAgICAgICAgc3dpdGNo
IChOdW1iZXJPZkNvb3JkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlSSA9IEJhc2UuSW52ZXJzZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVsyXSA9IEJhc2VbMF0u
Q3Jvc3MoQmFzZVsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVsyXSA9
IEJhc2VbMl0vc3FydChCYXNlWzJdLkRvdChCYXNlWzJdKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQmFzZUkgPSBCYXNlLkludmVyc2UoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogY2VyciA8
PCAiRXJyb3IsIGludGVycF90cmFpdHM6OkJhc2VJbnYgbm90IGltcGxlbWVudGVkIGZvciAiIDw8
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDb29yZCA8PCAiY29vcmRp
bmF0ZXMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfTsKfTsKCiMgMSAiQ29u
bmVjdGlvbi5oaCIgMQoKCgojIDEgIlNjYXR0ZXJGaWVsZC5oaCIgMQoKCgoKCgojIDEgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9saXN0IiAxIDMKIyAzMSAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3QiIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAxIDMKIyAzMSAiL2hvbWUyL21hcmNvL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMwoKIyAxICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzMgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDEgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyAzNCAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMg
MSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5o
IiAxIDMKIyAzNSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xp
c3QuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgMzYgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDM0ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfbGlzdC5oIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzNSAiL2hvbWUyL21hcmNv
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk
CnsKCnN0cnVjdCBfTGlzdF9ub2RlX2Jhc2UgewogIF9MaXN0X25vZGVfYmFzZSogX01fbmV4dDsK
ICBfTGlzdF9ub2RlX2Jhc2UqIF9NX3ByZXY7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgX0xpc3Rfbm9kZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2UgewogIF9UcCBfTV9kYXRhOwp9
OwoKc3RydWN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UgewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgX0xpc3Rfbm9kZV9iYXNl
KiBfTV9ub2RlOwoKICBfTGlzdF9pdGVyYXRvcl9iYXNlKF9MaXN0X25vZGVfYmFzZSogX194KSA6
IF9NX25vZGUoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoKSB7fQoKICB2b2lkIF9NX2lu
Y3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9CiAgdm9pZCBfTV9kZWNyKCkgeyBf
TV9ub2RlID0gX01fbm9kZS0+X01fcHJldjsgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0xp
c3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fbm9kZSA9PSBfX3gu
X01fbm9kZTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2Um
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7CiAgfQp9OwoK
dGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX0xpc3Rf
aXRlcmF0b3IgOiBwdWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFzZSB7CiAgdHlwZWRlZiBfTGlzdF9p
dGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9y
PF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX0xp
c3RfaXRlcmF0b3I8X1RwLF9SZWYsX1B0cj4gX1NlbGY7CgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICB0
eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKCiAgX0xpc3RfaXRlcmF0b3IoX05vZGUqIF9f
eCkgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feCkge30KICBfTGlzdF9pdGVyYXRvcigpIHt9CiAg
X0xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkgOiBfTGlzdF9pdGVyYXRvcl9iYXNl
KF9feC5fTV9ub2RlKSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
KChfTm9kZSopIF9NX25vZGUpLT5fTV9kYXRhOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAg
ICB0aGlzLT5fTV9pbmNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9y
KysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgdGhpcy0+X01faW5jcigpOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgIHRoaXMtPl9N
X2RlY3IoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsK
ICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICByZXR1cm4g
X190bXA7CiAgfQp9OwojIDExOCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2xpc3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBi
b29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9Ob2RlX2FsbG9jYXRvcihfX2EpIHt9Cgpwcm90
ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpCiAgIHsgcmV0dXJuIF9Ob2Rl
X2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxf
VHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnBy
b3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9j
YXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yOwogIF9MaXN0
X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5
cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAg
X0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIHt9Cgpwcm90ZWN0ZWQ6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRv
cj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKICBfTGlzdF9ub2RlPF9UcD4q
IF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9p
ZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVhbGxv
Y2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfTGlzdF9iYXNlCiAg
OiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsK
cHVibGljOgogIHR5cGVkZWYgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNl
bGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv
cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl
JiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9ub2RlID0gX01fZ2V0X25vZGUoKTsKICAgIF9N
X25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7
CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xlYXIoKTsKICAgIF9NX3B1dF9ub2RlKF9NX25v
ZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kdm9pZApfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpjbGVhcigpCnsKICBfTGlzdF9u
b2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAg
d2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBf
X2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAg
X0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICB9CiAg
X01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4K
Y2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPgp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVk
ZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIHZv
aWQqIF9Wb2lkX3BvaW50ZXI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBj
b25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYg
Y29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxf
VHA+IF9Ob2RlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90
eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBf
TGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0
ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwoKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y
OwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9w
dXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7Cgpwcm90ZWN0ZWQ6CiAgX05vZGUq
IF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9n
ZXRfbm9kZSgpOwogICAgdHJ5IHsKICAgICAgX0NvbnN0cnVjdCgmX19wLT5fTV9kYXRhLCBfX3gp
OwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX3B1dF9ub2RlKF9fcCk7IHRocm93OyB9OwogICAg
cmV0dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBfTV9jcmVhdGVfbm9kZSgpCiAgewogICAgX05vZGUq
IF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0cnkgewogICAgICBfQ29uc3RydWN0KCZfX3AtPl9N
X2RhdGEpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX3B1dF9ub2RlKF9fcCk7IHRocm93OyB9
OwogICAgcmV0dXJuIF9fcDsKICB9CgpwdWJsaWM6CiAgZXhwbGljaXQgbGlzdChjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHt9CgogIGl0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01fbmV4dCk7IH0KICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9N
X25leHQpOyB9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX25vZGU7IH0KICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlOyB9CgogIHJldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdp
bigpKTsgfQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZS0+X01fbmV4dCA9
PSBfTV9ub2RlOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7CiAgICBzaXplX3R5cGUgX19y
ZXN1bHQgPSAwOwogICAgZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCksIF9fcmVzdWx0KTsKICAgIHJl
dHVybiBfX3Jlc3VsdDsKICB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g
c2l6ZV90eXBlKC0xKTsgfQoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsg
fQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAg
cmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKC0tZW5kKCkpOyB9CiAgY29uc3RfcmVmZXJlbmNl
IGJhY2soKSBjb25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogIHZvaWQgc3dhcChsaXN0PF9U
cCwgX0FsbG9jPiYgX194KSB7IHN0ZDo6c3dhcChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAg
aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAg
ICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgX190bXAtPl9NX25leHQg
PSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01fcHJldiA9IF9fcG9zaXRpb24uX01f
bm9kZS0+X01fcHJldjsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9
IF9fdG1wOwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAgICByZXR1
cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IHJl
dHVybiBpbnNlcnQoX19wb3NpdGlvbiwgX1RwKCkpOyB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50
ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIg
X19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUp
IHsKICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9feCk7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRf
ZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2Vy
PF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNw
YXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB2b2lkIGlu
c2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7
IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KICB2b2lkIF9NX2ZpbGxfaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZvaWQg
cHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoYmVnaW4oKSwgX194KTsgfQogIHZv
aWQgcHVzaF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQogIHZvaWQgcHVzaF9iYWNrKGNvbnN0
IF9UcCYgX194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQogIHZvaWQgcHVzaF9iYWNrKCkge2lu
c2VydChlbmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAg
ICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9u
ZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9k
ZS0+X01fcHJldjsKICAgIF9Ob2RlKiBfX24gPSAoX05vZGUqKSBfX3Bvc2l0aW9uLl9NX25vZGU7
CiAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAgX19uZXh0X25vZGUt
Pl9NX3ByZXYgPSBfX3ByZXZfbm9kZTsKICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEpOwogICAg
X01fcHV0X25vZGUoX19uKTsKICAgIHJldHVybiBpdGVyYXRvcigoX05vZGUqKSBfX25leHRfbm9k
ZSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCk7CiAgdm9pZCBjbGVhcigpIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgdm9pZCByZXNpemUoc2l6
ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShzaXplX3R5
cGUgX19uZXdfc2l6ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogIHZv
aWQgcG9wX2Zyb250KCkgeyBlcmFzZShiZWdpbigpKTsgfQogIHZvaWQgcG9wX2JhY2soKSB7CiAg
ICBpdGVyYXRvciBfX3RtcCA9IGVuZCgpOwogICAgZXJhc2UoLS1fX3RtcCk7CiAgfQogIGxpc3Qo
c2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsgaW5z
ZXJ0KGJlZ2luKCksIF9fbiwgX192YWx1ZSk7IH0KICBleHBsaWNpdCBsaXN0KHNpemVfdHlwZSBf
X24pCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IGluc2VydChiZWdpbigpLCBf
X24sIF9UcCgpKTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBsaXN0
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShf
X2EpCiAgICB7IGluc2VydChiZWdpbigpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIGxpc3QoY29u
c3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQog
ICAgeyBpbnNlcnQoYmVnaW4oKSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KCiAgfmxpc3Qo
KSB7IH0KCiAgbGlzdDxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0Fs
bG9jPiYgX194KTsKCnB1YmxpYzoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNv
bnN0IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgdm9pZCBf
TV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3Np
Z25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19u
LCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXpl
X3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90
eXBlKTsKCnByb3RlY3RlZDoKICB2b2lkIHRyYW5zZmVyKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGl0
ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYgKF9fcG9zaXRpb24gIT0g
X19sYXN0KSB7CgogICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fcG9z
aXRpb24uX01fbm9kZTsKICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0g
X19sYXN0Ll9NX25vZGU7CiAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4
dCA9IF9fZmlyc3QuX01fbm9kZTsKCgogICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19w
b3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3By
ZXYgPSBfX2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgX19sYXN0Ll9NX25vZGUtPl9NX3By
ZXYgPSBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01f
cHJldiA9IF9fdG1wOwogICAgfQogIH0KCnB1YmxpYzoKICB2b2lkIHNwbGljZShpdGVyYXRvciBf
X3Bvc2l0aW9uLCBsaXN0JiBfX3gpIHsKICAgIGlmICghX194LmVtcHR5KCkpCiAgICAgIHRoaXMt
PnRyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogIH0KICB2b2lk
IHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19pKSB7CiAgICBp
dGVyYXRvciBfX2ogPSBfX2k7CiAgICArK19fajsKICAgIGlmIChfX3Bvc2l0aW9uID09IF9faSB8
fCBfX3Bvc2l0aW9uID09IF9faikgcmV0dXJuOwogICAgdGhpcy0+dHJhbnNmZXIoX19wb3NpdGlv
biwgX19pLCBfX2opOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0
JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpZiAoX19maXJzdCAh
PSBfX2xhc3QpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFz
dCk7CiAgfQogIHZvaWQgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CiAgdm9pZCB1bmlxdWUo
KTsKICB2b2lkIG1lcmdlKGxpc3QmIF9feCk7CiAgdm9pZCByZXZlcnNlKCk7CiAgdm9pZCBzb3J0
KCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2b2lkIHJlbW92ZV9pZihfUHJlZGlj
YXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4gdm9pZCB1bmlxdWUoX0Jp
bmFyeVByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+IHZv
aWQgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwogIHRlbXBsYXRlIDxjbGFzcyBf
U3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0o
Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kp
CnsKICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICBjb25z
dF9pdGVyYXRvciBfX2VuZDIgPSBfX3kuZW5kKCk7CgogIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBf
X3guYmVnaW4oKTsKICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAgd2hpbGUg
KF9faTEgIT0gX19lbmQxICYmIF9faTIgIT0gX19lbmQyICYmICpfX2kxID09ICpfX2kyKSB7CiAg
ICArK19faTE7CiAgICArK19faTI7CiAgfQogIHJldHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2ky
ID09IF9fZW5kMjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxf
VHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgdm9pZApzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGxpc3Q8X1RwLCBfQWxs
b2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkCmxpc3Q8X1RwLCBfQWxs
b2M+OjpfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw
ZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGluc2VydChf
X3Bvc2l0aW9uLCAqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3Np
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNv
bnN0IF9UcCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgIGluc2VydChfX3Bv
c2l0aW9uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnR5cGVu
YW1lIGxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8X1RwLCBfQWxsb2M+OjplcmFzZShp
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0KQp7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KQogICAgZXJhc2UoX19maXJzdCsrKTsKICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJl
c2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpCnsKICBpdGVyYXRvciBf
X2kgPSBiZWdpbigpOwogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZm9yICggOyBfX2kgIT0gZW5k
KCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAgIDsKICBpZiAoX19s
ZW4gPT0gX19uZXdfc2l6ZSkKICAgIGVyYXNlKF9faSwgZW5kKCkpOwogIGVsc2UKICAgIGluc2Vy
dChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+Cmxpc3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwgX0FsbG9jPjo6b3Bl
cmF0b3I9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAodGhpcyAhPSAmX194
KSB7CiAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICBpdGVyYXRvciBfX2xhc3Qx
ID0gZW5kKCk7CiAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAg
Y29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICpfX2ZpcnN0MSsrID0gKl9f
Zmlyc3QyKys7CiAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgZXJhc2UoX19maXJz
dDEsIF9fbGFzdDEpOwogICAgZWxzZQogICAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9f
bGFzdDIpOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90eXBl
IF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgZm9y
ICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19uKQogICAgKl9faSA9IF9f
dmFsOwogIGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgpLCBfX24sIF9fdmFsKTsKICBlbHNl
CiAgICBlcmFzZShfX2ksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6
X01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdDIsIF9JbnB1dEl0ZXIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsK
ICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgp
OwogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOwogIGlmIChf
X2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogIGVsc2UK
ICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlKGNvbnN0
IF9UcCYgX192YWx1ZSkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9y
IF9fbGFzdCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaXRlcmF0
b3IgX19uZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0OwogICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsdWUpIGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6dW5p
cXVlKCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9
IGVuZCgpOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0ZXJhdG9yIF9fbmV4
dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2Zp
cnN0ID09ICpfX25leHQpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICBlbHNlCiAgICAgIF9fZmly
c3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjptZXJnZShsaXN0PF9U
cCwgX0FsbG9jPiYgX194KQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJh
dG9yIF9fbGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwog
IGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp
IHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRyYW5zZmVyKF9fZmly
c3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgIH0K
ICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgdHJh
bnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9CgppbmxpbmUgdm9pZCBfX0xpc3Rf
YmFzZV9yZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQp7CiAgX0xpc3Rfbm9kZV9iYXNlKiBf
X3RtcCA9IF9fcDsKICBkbyB7CiAgICBzdGQ6OnN3YXAoX190bXAtPl9NX25leHQsIF9fdG1wLT5f
TV9wcmV2KTsKICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7CiAgfSB3aGlsZSAoX190bXAgIT0g
X19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBs
aXN0PF9UcCwgX0FsbG9jPjo6cmV2ZXJzZSgpCnsKICBfX0xpc3RfYmFzZV9yZXZlcnNlKHRoaXMt
Pl9NX25vZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlz
dDxfVHAsIF9BbGxvYz46OnNvcnQoKQp7CgogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25v
ZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9U
cCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsK
ICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnku
c3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0g
MDsKICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7
CiAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgX19jYXJyeS5z
d2FwKF9fY291bnRlcltfX2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50
ZXJbX19pXSk7CiAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgIH0KCiAgICBm
b3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19p
XS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz
cyBfUHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmVfaWYoX1ByZWRpY2F0
ZSBfX3ByZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xh
c3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9f
bmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBl
cmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgp2
b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0g
ZW5kKCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgaXRlcmF0b3IgX19uZXh0
ID0gX19maXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoX19iaW5h
cnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICBlbHNl
CiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdl
YWtPcmRlcmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlzdDxfVHAsIF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmlu
ZyBfX2NvbXApCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19s
YXN0MSA9IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAgaXRlcmF0
b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
IHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRyYW5zZmVyKF9fZmly
c3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgIH0K
ICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgdHJh
bnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgp2b2lk
IGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7Cgog
IGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01f
bmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlz
dDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hp
bGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRo
aXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxs
ICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVy
Z2UoX19jYXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsr
XSk7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgaWYg
KF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAgIGZvciAoaW50IF9faSA9IDE7IF9f
aSA8IF9fZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltf
X2ktMV0sIF9fY29tcCk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKfQoj
IDM3ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAy
IDMKIyAzMiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3QiIDIgMwojIDgg
IlNjYXR0ZXJGaWVsZC5oaCIgMgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9leHQvaGFzaF9tYXAiIDEKIyAzNCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2V4dC9oYXNoX21hcCIKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZXh0
L3N0bF9oYXNodGFibGUuaCIgMSAzCiMgMzcgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9leHQvc3RsX2hhc2h0YWJsZS5oIiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDM4ICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvZXh0L3N0bF9oYXNodGFibGUuaCIgMiAzCiMgMSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM5ICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZXh0L3N0bF9oYXNodGFibGUuaCIgMiAzCiMg
MSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5o
IiAxIDMKIyA0MCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4dC9zdGxfaGFz
aHRhYmxlLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90ZW1wYnVmLmgiIDEgMwojIDQxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKyst
djMvZXh0L3N0bF9oYXNodGFibGUuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgNDIgIi9ob21lMi9tYXJjby9sb2NhbC9p
bmNsdWRlL2crKy12My9leHQvc3RsX2hhc2h0YWJsZS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA0MyAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4dC9zdGxfaGFzaHRhYmxlLmgiIDIg
MwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlv
bi5oIiAxIDMKIyA0NCAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4dC9zdGxf
aGFzaHRhYmxlLmgiIDIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF92ZWN0b3IuaCIgMSAzCiMgNDUgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9leHQvc3RsX2hhc2h0YWJsZS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvZXh0L3N0bF9oYXNoX2Z1bi5oIiAxIDMKIyAzNCAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2V4dC9zdGxfaGFzaF9mdW4uaCIgMwojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM1ICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZXh0L3N0bF9oYXNoX2Z1bi5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9LZXk+IHN0cnVjdCBoYXNoIHsgfTsKCmlu
bGluZSBzaXplX3QgX19zdGxfaGFzaF9zdHJpbmcoY29uc3QgY2hhciogX19zKQp7CiAgdW5zaWdu
ZWQgbG9uZyBfX2ggPSAwOwogIGZvciAoIDsgKl9fczsgKytfX3MpCiAgICBfX2ggPSA1Kl9faCAr
ICpfX3M7CgogIHJldHVybiBzaXplX3QoX19oKTsKfQoKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaDxj
aGFyKj4KewogIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QgeyByZXR1
cm4gX19zdGxfaGFzaF9zdHJpbmcoX19zKTsgfQp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaDxj
b25zdCBjaGFyKj4KewogIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3Qg
eyByZXR1cm4gX19zdGxfaGFzaF9zdHJpbmcoX19zKTsgfQp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
aGFzaDxjaGFyPiB7CiAgc2l6ZV90IG9wZXJhdG9yKCkoY2hhciBfX3gpIGNvbnN0IHsgcmV0dXJu
IF9feDsgfQp9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPHVuc2lnbmVkIGNoYXI+IHsKICBzaXpl
X3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07
CnRlbXBsYXRlPD4gc3RydWN0IGhhc2g8c2lnbmVkIGNoYXI+IHsKICBzaXplX3Qgb3BlcmF0b3Io
KSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07CnRlbXBsYXRlPD4g
c3RydWN0IGhhc2g8c2hvcnQ+IHsKICBzaXplX3Qgb3BlcmF0b3IoKShzaG9ydCBfX3gpIGNvbnN0
IHsgcmV0dXJuIF9feDsgfQp9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPHVuc2lnbmVkIHNob3J0
PiB7CiAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQgc2hvcnQgX194KSBjb25zdCB7IHJldHVy
biBfX3g7IH0KfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaDxpbnQ+IHsKICBzaXplX3Qgb3BlcmF0
b3IoKShpbnQgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKdGVtcGxhdGU8PiBzdHJ1Y3Qg
aGFzaDx1bnNpZ25lZCBpbnQ+IHsKICBzaXplX3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX194
KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaDxsb25nPiB7
CiAgc2l6ZV90IG9wZXJhdG9yKCkobG9uZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9Owp0
ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPHVuc2lnbmVkIGxvbmc+IHsKICBzaXplX3Qgb3BlcmF0b3Io
KSh1bnNpZ25lZCBsb25nIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp9CiMgNDYgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9leHQvc3RsX2hhc2h0YWJsZS5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9WYWw+CnN0cnVjdCBfSGFzaHRhYmxl
X25vZGUKewogIF9IYXNodGFibGVfbm9kZSogX01fbmV4dDsKICBfVmFsIF9NX3ZhbDsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwKICAgICAgICAg
IGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYyA9IGFsbG9j
PgpjbGFzcyBoYXNodGFibGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xh
c3MgX0hhc2hGY24sCiAgICAgICAgICBjbGFzcyBfRXh0cmFjdEtleSwgY2xhc3MgX0VxdWFsS2V5
LCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfSGFzaHRhYmxlX2l0ZXJhdG9yOwoKdGVtcGxhdGUgPGNs
YXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLAogICAgICAgICAgY2xhc3MgX0V4
dHJhY3RLZXksIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0hhc2h0YWJs
ZV9jb25zdF9pdGVyYXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFz
cyBfSGFzaEZjbiwKICAgICAgICAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXks
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3IgewogIHR5cGVkZWYgaGFz
aHRhYmxlPF9WYWwsX0tleSxfSGFzaEZjbixfRXh0cmFjdEtleSxfRXF1YWxLZXksX0FsbG9jPgog
ICAgICAgICAgX0hhc2h0YWJsZTsKICB0eXBlZGVmIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwg
X0tleSwgX0hhc2hGY24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FeHRyYWN0S2V5
LCBfRXF1YWxLZXksIF9BbGxvYz4KICAgICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgX0hhc2h0
YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgogICAg
ICAgICAgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfSGFzaHRhYmxlX25vZGU8X1ZhbD4gX05v
ZGU7CgogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIF9WYWwmIHJlZmVyZW5j
ZTsKICB0eXBlZGVmIF9WYWwqIHBvaW50ZXI7CgogIF9Ob2RlKiBfTV9jdXI7CiAgX0hhc2h0YWJs
ZSogX01faHQ7CgogIF9IYXNodGFibGVfaXRlcmF0b3IoX05vZGUqIF9fbiwgX0hhc2h0YWJsZSog
X190YWIpCiAgICA6IF9NX2N1cihfX24pLCBfTV9odChfX3RhYikge30KICBfSGFzaHRhYmxlX2l0
ZXJhdG9yKCkge30KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fY3Vy
LT5fTV92YWw7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh
dG9yKigpKTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CiAgaXRlcmF0b3Igb3BlcmF0b3Ir
KyhpbnQpOwogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgX19pdCkgY29uc3QKICAg
IHsgcmV0dXJuIF9NX2N1ciA9PSBfX2l0Ll9NX2N1cjsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgX19pdCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2N1ciAhPSBfX2l0Ll9NX2N1
cjsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZj
biwKICAgICAgICAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9B
bGxvYz4Kc3RydWN0IF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IgewogIHR5cGVkZWYgaGFzaHRh
YmxlPF9WYWwsX0tleSxfSGFzaEZjbixfRXh0cmFjdEtleSxfRXF1YWxLZXksX0FsbG9jPgogICAg
ICAgICAgX0hhc2h0YWJsZTsKICB0eXBlZGVmIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCxfS2V5
LF9IYXNoRmNuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXh0cmFjdEtleSxfRXF1
YWxLZXksX0FsbG9jPgogICAgICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfSGFzaHRhYmxlX2Nv
bnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRXh0cmFjdEtleSwgX0VxdWFsS2V5LCBfQWxsb2M+CiAgICAgICAgICBj
b25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9IYXNodGFibGVfbm9kZTxfVmFsPiBfTm9kZTsKCiAg
dHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IF9WYWwgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1ZhbCYgcmVmZXJlbmNl
OwogIHR5cGVkZWYgY29uc3QgX1ZhbCogcG9pbnRlcjsKCiAgY29uc3QgX05vZGUqIF9NX2N1cjsK
ICBjb25zdCBfSGFzaHRhYmxlKiBfTV9odDsKCiAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihj
b25zdCBfTm9kZSogX19uLCBjb25zdCBfSGFzaHRhYmxlKiBfX3RhYikKICAgIDogX01fY3VyKF9f
biksIF9NX2h0KF9fdGFiKSB7fQogIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoKSB7fQogIF9I
YXNodGFibGVfY29uc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpCiAgICA6IF9NX2N1
cihfX2l0Ll9NX2N1ciksIF9NX2h0KF9faXQuX01faHQpIHt9CiAgcmVmZXJlbmNlIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1ci0+X01fdmFsOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+
KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KICBjb25zdF9pdGVyYXRvciYgb3Bl
cmF0b3IrKygpOwogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KTsKICBib29sIG9wZXJh
dG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j
dXIgPT0gX19pdC5fTV9jdXI7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0
b3ImIF9faXQpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jdXIgIT0gX19pdC5fTV9jdXI7IH0KfTsK
CgplbnVtIHsgX19zdGxfbnVtX3ByaW1lcyA9IDI4IH07CgpzdGF0aWMgY29uc3QgdW5zaWduZWQg
bG9uZyBfX3N0bF9wcmltZV9saXN0W19fc3RsX251bV9wcmltZXNdID0KewogIDUzdWwsIDk3dWws
IDE5M3VsLCAzODl1bCwgNzY5dWwsCiAgMTU0M3VsLCAzMDc5dWwsIDYxNTF1bCwgMTIyODl1bCwg
MjQ1OTN1bCwKICA0OTE1N3VsLCA5ODMxN3VsLCAxOTY2MTN1bCwgMzkzMjQxdWwsIDc4NjQzM3Vs
LAogIDE1NzI4Njl1bCwgMzE0NTczOXVsLCA2MjkxNDY5dWwsIDEyNTgyOTE3dWwsIDI1MTY1ODQz
dWwsCiAgNTAzMzE2NTN1bCwgMTAwNjYzMzE5dWwsIDIwMTMyNjYxMXVsLCA0MDI2NTMxODl1bCwg
ODA1MzA2NDU3dWwsCiAgMTYxMDYxMjc0MXVsLCAzMjIxMjI1NDczdWwsIDQyOTQ5NjcyOTF1bAp9
OwoKaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zdGxfbmV4dF9wcmltZSh1bnNpZ25lZCBsb25nIF9f
bikKewogIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fZmlyc3QgPSBfX3N0bF9wcmltZV9saXN0Owog
IGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fbGFzdCA9IF9fc3RsX3ByaW1lX2xpc3QgKyAoaW50KV9f
c3RsX251bV9wcmltZXM7CiAgY29uc3QgdW5zaWduZWQgbG9uZyogcG9zID0gbG93ZXJfYm91bmQo
X19maXJzdCwgX19sYXN0LCBfX24pOwogIHJldHVybiBwb3MgPT0gX19sYXN0ID8gKihfX2xhc3Qg
LSAxKSA6ICpwb3M7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNz
IF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CmNsYXNzIGhhc2h0YWJsZTsK
CnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwg
Y2xhc3MgX0VxLCBjbGFzcyBfQWxsPgpib29sIG9wZXJhdG9yPT0oY29uc3QgaGFzaHRhYmxlPF9W
YWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPiYgX19odDEsCiAgICAgICAgICAgICAgICBjb25zdCBo
YXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+JiBfX2h0Mik7CiMgMTgzICIvaG9t
ZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZXh0L3N0bF9oYXNodGFibGUuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sCiAgICAgICAgICBj
bGFzcyBfRXh0cmFjdEtleSwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CmNsYXNzIGhh
c2h0YWJsZSB7CnB1YmxpYzoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFs
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfSGFzaEZjbiBoYXNoZXI7CiAgdHlwZWRlZiBfRXF1YWxL
ZXkga2V5X2VxdWFsOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0
eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90
eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVu
Y2U7CgogIGhhc2hlciBoYXNoX2Z1bmN0KCkgY29uc3QgeyByZXR1cm4gX01faGFzaDsgfQogIGtl
eV9lcXVhbCBrZXlfZXEoKSBjb25zdCB7IHJldHVybiBfTV9lcXVhbHM7IH0KCnByaXZhdGU6CiAg
dHlwZWRlZiBfSGFzaHRhYmxlX25vZGU8X1ZhbD4gX05vZGU7CgpwdWJsaWM6CiAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9WYWwsX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2Nh
dG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX25vZGVfYWxsb2NhdG9yOyB9CnByaXZhdGU6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf
Tm9kZSwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgX01fbm9kZV9hbGxvY2F0b3I7CiAgX05vZGUq
IF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0K
ICB2b2lkIF9NX3B1dF9ub2RlKF9Ob2RlKiBfX3ApIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxv
Y2F0ZShfX3AsIDEpOyB9Cgpwcml2YXRlOgogIGhhc2hlciBfTV9oYXNoOwogIGtleV9lcXVhbCBf
TV9lcXVhbHM7CiAgX0V4dHJhY3RLZXkgX01fZ2V0X2tleTsKICB2ZWN0b3I8X05vZGUqLF9BbGxv
Yz4gX01fYnVja2V0czsKICBzaXplX3R5cGUgX01fbnVtX2VsZW1lbnRzOwoKcHVibGljOgogIHR5
cGVkZWYgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLF9LZXksX0hhc2hGY24sX0V4dHJhY3RLZXks
X0VxdWFsS2V5LF9BbGxvYz4KICAgICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgX0hhc2h0YWJs
ZV9jb25zdF9pdGVyYXRvcjxfVmFsLF9LZXksX0hhc2hGY24sX0V4dHJhY3RLZXksX0VxdWFsS2V5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2M+CiAgICAgICAgICBj
b25zdF9pdGVyYXRvcjsKCiAgZnJpZW5kIHN0cnVjdAogIF9IYXNodGFibGVfaXRlcmF0b3I8X1Zh
bCxfS2V5LF9IYXNoRmNuLF9FeHRyYWN0S2V5LF9FcXVhbEtleSxfQWxsb2M+OwogIGZyaWVuZCBz
dHJ1Y3QKICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsX0tleSxfSGFzaEZjbixfRXh0
cmFjdEtleSxfRXF1YWxLZXksX0FsbG9jPjsKCnB1YmxpYzoKICBoYXNodGFibGUoc2l6ZV90eXBl
IF9fbiwKICAgICAgICAgICAgY29uc3QgX0hhc2hGY24mIF9faGYsCiAgICAgICAgICAgIGNvbnN0
IF9FcXVhbEtleSYgX19lcWwsCiAgICAgICAgICAgIGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4dCwK
ICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
CiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksCiAgICAgIF9NX2hhc2goX19oZiksCiAgICAg
IF9NX2VxdWFscyhfX2VxbCksCiAgICAgIF9NX2dldF9rZXkoX19leHQpLAogICAgICBfTV9idWNr
ZXRzKF9fYSksCiAgICAgIF9NX251bV9lbGVtZW50cygwKQogIHsKICAgIF9NX2luaXRpYWxpemVf
YnVja2V0cyhfX24pOwogIH0KCiAgaGFzaHRhYmxlKHNpemVfdHlwZSBfX24sCiAgICAgICAgICAg
IGNvbnN0IF9IYXNoRmNuJiBfX2hmLAogICAgICAgICAgICBjb25zdCBfRXF1YWxLZXkmIF9fZXFs
LAogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkKICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKSwKICAgICAgX01faGFzaChfX2hmKSwKICAg
ICAgX01fZXF1YWxzKF9fZXFsKSwKICAgICAgX01fZ2V0X2tleShfRXh0cmFjdEtleSgpKSwKICAg
ICAgX01fYnVja2V0cyhfX2EpLAogICAgICBfTV9udW1fZWxlbWVudHMoMCkKICB7CiAgICBfTV9p
bml0aWFsaXplX2J1Y2tldHMoX19uKTsKICB9CgogIGhhc2h0YWJsZShjb25zdCBoYXNodGFibGUm
IF9faHQpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9faHQuZ2V0X2FsbG9jYXRvcigpKSwKICAg
ICAgX01faGFzaChfX2h0Ll9NX2hhc2gpLAogICAgICBfTV9lcXVhbHMoX19odC5fTV9lcXVhbHMp
LAogICAgICBfTV9nZXRfa2V5KF9faHQuX01fZ2V0X2tleSksCiAgICAgIF9NX2J1Y2tldHMoX19o
dC5nZXRfYWxsb2NhdG9yKCkpLAogICAgICBfTV9udW1fZWxlbWVudHMoMCkKICB7CiAgICBfTV9j
b3B5X2Zyb20oX19odCk7CiAgfQoKICBoYXNodGFibGUmIG9wZXJhdG9yPSAoY29uc3QgaGFzaHRh
YmxlJiBfX2h0KQogIHsKICAgIGlmICgmX19odCAhPSB0aGlzKSB7CiAgICAgIGNsZWFyKCk7CiAg
ICAgIF9NX2hhc2ggPSBfX2h0Ll9NX2hhc2g7CiAgICAgIF9NX2VxdWFscyA9IF9faHQuX01fZXF1
YWxzOwogICAgICBfTV9nZXRfa2V5ID0gX19odC5fTV9nZXRfa2V5OwogICAgICBfTV9jb3B5X2Zy
b20oX19odCk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB+aGFzaHRhYmxlKCkgeyBj
bGVhcigpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbnVtX2VsZW1l
bnRzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0x
KTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplKCkgPT0gMDsgfQoKICB2b2lk
IHN3YXAoaGFzaHRhYmxlJiBfX2h0KQogIHsKICAgIHN0ZDo6c3dhcChfTV9oYXNoLCBfX2h0Ll9N
X2hhc2gpOwogICAgc3RkOjpzd2FwKF9NX2VxdWFscywgX19odC5fTV9lcXVhbHMpOwogICAgc3Rk
Ojpzd2FwKF9NX2dldF9rZXksIF9faHQuX01fZ2V0X2tleSk7CiAgICBfTV9idWNrZXRzLnN3YXAo
X19odC5fTV9idWNrZXRzKTsKICAgIHN0ZDo6c3dhcChfTV9udW1fZWxlbWVudHMsIF9faHQuX01f
bnVtX2VsZW1lbnRzKTsKICB9CgogIGl0ZXJhdG9yIGJlZ2luKCkKICB7CiAgICBmb3IgKHNpemVf
dHlwZSBfX24gPSAwOyBfX24gPCBfTV9idWNrZXRzLnNpemUoKTsgKytfX24pCiAgICAgIGlmIChf
TV9idWNrZXRzW19fbl0pCiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2J1Y2tldHNbX19uXSwg
dGhpcyk7CiAgICByZXR1cm4gZW5kKCk7CiAgfQoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBp
dGVyYXRvcigwLCB0aGlzKTsgfQoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgewog
ICAgZm9yIChzaXplX3R5cGUgX19uID0gMDsgX19uIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19u
KQogICAgICBpZiAoX01fYnVja2V0c1tfX25dKQogICAgICAgIHJldHVybiBjb25zdF9pdGVyYXRv
cihfTV9idWNrZXRzW19fbl0sIHRoaXMpOwogICAgcmV0dXJuIGVuZCgpOwogIH0KCiAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoMCwgdGhpcyk7IH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9WbCwgY2xhc3MgX0t5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwg
Y2xhc3MgX0VxLCBjbGFzcyBfQWw+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgaGFz
aHRhYmxlPF9WbCwgX0t5LCBfSEYsIF9FeCwgX0VxLCBfQWw+JiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBoYXNodGFibGU8X1ZsLCBfS3ksIF9IRiwgX0V4LCBfRXEsIF9BbD4mKTsK
cHVibGljOgoKICBzaXplX3R5cGUgYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01fYnVj
a2V0cy5zaXplKCk7IH0KCiAgc2l6ZV90eXBlIG1heF9idWNrZXRfY291bnQoKSBjb25zdAogICAg
eyByZXR1cm4gX19zdGxfcHJpbWVfbGlzdFsoaW50KV9fc3RsX251bV9wcmltZXMgLSAxXTsgfQoK
ICBzaXplX3R5cGUgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX2J1Y2tldCkgY29uc3QKICB7
CiAgICBzaXplX3R5cGUgX19yZXN1bHQgPSAwOwogICAgZm9yIChfTm9kZSogX19jdXIgPSBfTV9i
dWNrZXRzW19fYnVja2V0XTsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCiAgICAgIF9f
cmVzdWx0ICs9IDE7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBwYWlyPGl0ZXJhdG9yLCBi
b29sPiBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQogIHsKICAgIHJlc2l6
ZShfTV9udW1fZWxlbWVudHMgKyAxKTsKICAgIHJldHVybiBpbnNlcnRfdW5pcXVlX25vcmVzaXpl
KF9fb2JqKTsKICB9CgogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBf
X29iaikKICB7CiAgICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgMSk7CiAgICByZXR1cm4gaW5z
ZXJ0X2VxdWFsX25vcmVzaXplKF9fb2JqKTsKICB9CgogIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGlu
c2VydF91bmlxdWVfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopOwogIGl0ZXJhdG9y
IGluc2VydF9lcXVhbF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaik7CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF91bmlxdWUoX0lucHV0SXRl
cmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCiAgewogICAgaW5zZXJ0X3VuaXF1ZShfX2Ys
IF9fbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2YpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2YsIF9J
bnB1dEl0ZXJhdG9yIF9fbCkKICB7CiAgICBpbnNlcnRfZXF1YWwoX19mLCBfX2wsIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19mKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3Ig
X19sLAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9y
ICggOyBfX2YgIT0gX19sOyArK19fZikKICAgICAgaW5zZXJ0X3VuaXF1ZSgqX19mKTsKICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF9lcXVhbChfSW5w
dXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwKICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2YgIT0gX19sOyArK19fZikKICAg
ICAgaW5zZXJ0X2VxdWFsKCpfX2YpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbCwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
CiAgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2YsIF9fbCwgX19uKTsK
ICAgIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyBfX24pOwogICAgZm9yICggOyBfX24gPiAwOyAt
LV9fbiwgKytfX2YpCiAgICAgIGluc2VydF91bmlxdWVfbm9yZXNpemUoKl9fZik7CiAgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIGluc2VydF9lcXVhbChfRm9y
d2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX2wsCiAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBk
aXN0YW5jZShfX2YsIF9fbCwgX19uKTsKICAgIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyBfX24p
OwogICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2YpCiAgICAgIGluc2VydF9lcXVhbF9u
b3Jlc2l6ZSgqX19mKTsKICB9CgogIHJlZmVyZW5jZSBmaW5kX29yX2luc2VydChjb25zdCB2YWx1
ZV90eXBlJiBfX29iaik7CgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQog
IHsKICAgIHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CiAgICBfTm9kZSog
X19maXJzdDsKICAgIGZvciAoIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07CiAgICAgICAgICBf
X2ZpcnN0ICYmICFfTV9lcXVhbHMoX01fZ2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBfX2tleSk7
CiAgICAgICAgICBfX2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkKICAgICAge30KICAgIHJldHVy
biBpdGVyYXRvcihfX2ZpcnN0LCB0aGlzKTsKICB9CgogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29u
c3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAogIHsKICAgIHNpemVfdHlwZSBfX24gPSBfTV9ia3Rf
bnVtX2tleShfX2tleSk7CiAgICBjb25zdCBfTm9kZSogX19maXJzdDsKICAgIGZvciAoIF9fZmly
c3QgPSBfTV9idWNrZXRzW19fbl07CiAgICAgICAgICBfX2ZpcnN0ICYmICFfTV9lcXVhbHMoX01f
Z2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBfX2tleSk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19m
aXJzdC0+X01fbmV4dCkKICAgICAge30KICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX2ZpcnN0
LCB0aGlzKTsKICB9CgogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNv
bnN0CiAgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsK
ICAgIHNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7CgogICAgZm9yIChjb25zdCBfTm9kZSogX19jdXIg
PSBfTV9idWNrZXRzW19fbl07IF9fY3VyOyBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQogICAgICBp
ZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9fa2V5KSkKICAgICAgICAr
K19fcmVzdWx0OwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgcGFpcjxpdGVyYXRvciwgaXRl
cmF0b3I+CiAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KTsKCiAgcGFpcjxjb25z
dF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CiAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm
IF9fa2V5KSBjb25zdDsKCiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSk7
CiAgdm9pZCBlcmFzZShjb25zdCBpdGVyYXRvciYgX19pdCk7CiAgdm9pZCBlcmFzZShpdGVyYXRv
ciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwoKICB2b2lkIGVyYXNlKGNvbnN0IGNvbnN0X2l0
ZXJhdG9yJiBfX2l0KTsKICB2b2lkIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0
X2l0ZXJhdG9yIF9fbGFzdCk7CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX251bV9lbGVtZW50
c19oaW50KTsKICB2b2lkIGNsZWFyKCk7Cgpwcml2YXRlOgogIHNpemVfdHlwZSBfTV9uZXh0X3Np
emUoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgcmV0dXJuIF9fc3RsX25leHRfcHJpbWUoX19u
KTsgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVja2V0cyhzaXplX3R5cGUgX19uKQogIHsKICAg
IGNvbnN0IHNpemVfdHlwZSBfX25fYnVja2V0cyA9IF9NX25leHRfc2l6ZShfX24pOwogICAgX01f
YnVja2V0cy5yZXNlcnZlKF9fbl9idWNrZXRzKTsKICAgIF9NX2J1Y2tldHMuaW5zZXJ0KF9NX2J1
Y2tldHMuZW5kKCksIF9fbl9idWNrZXRzLCAoX05vZGUqKSAwKTsKICAgIF9NX251bV9lbGVtZW50
cyA9IDA7CiAgfQoKICBzaXplX3R5cGUgX01fYmt0X251bV9rZXkoY29uc3Qga2V5X3R5cGUmIF9f
a2V5KSBjb25zdAogIHsKICAgIHJldHVybiBfTV9ia3RfbnVtX2tleShfX2tleSwgX01fYnVja2V0
cy5zaXplKCkpOwogIH0KCiAgc2l6ZV90eXBlIF9NX2JrdF9udW0oY29uc3QgdmFsdWVfdHlwZSYg
X19vYmopIGNvbnN0CiAgewogICAgcmV0dXJuIF9NX2JrdF9udW1fa2V5KF9NX2dldF9rZXkoX19v
YmopKTsKICB9CgogIHNpemVfdHlwZSBfTV9ia3RfbnVtX2tleShjb25zdCBrZXlfdHlwZSYgX19r
ZXksIHNpemVfdCBfX24pIGNvbnN0CiAgewogICAgcmV0dXJuIF9NX2hhc2goX19rZXkpICUgX19u
OwogIH0KCiAgc2l6ZV90eXBlIF9NX2JrdF9udW0oY29uc3QgdmFsdWVfdHlwZSYgX19vYmosIHNp
emVfdCBfX24pIGNvbnN0CiAgewogICAgcmV0dXJuIF9NX2JrdF9udW1fa2V5KF9NX2dldF9rZXko
X19vYmopLCBfX24pOwogIH0KCiAgX05vZGUqIF9NX25ld19ub2RlKGNvbnN0IHZhbHVlX3R5cGUm
IF9fb2JqKQogIHsKICAgIF9Ob2RlKiBfX24gPSBfTV9nZXRfbm9kZSgpOwogICAgX19uLT5fTV9u
ZXh0ID0gMDsKICAgIHRyeSB7CiAgICAgIGNvbnN0cnVjdCgmX19uLT5fTV92YWwsIF9fb2JqKTsK
ICAgICAgcmV0dXJuIF9fbjsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX24p
OyB0aHJvdzsgfTsKICB9CgogIHZvaWQgX01fZGVsZXRlX25vZGUoX05vZGUqIF9fbikKICB7CiAg
ICBkZXN0cm95KCZfX24tPl9NX3ZhbCk7CiAgICBfTV9wdXRfbm9kZShfX24pOwogIH0KCiAgdm9p
ZCBfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fZmlyc3QsIF9O
b2RlKiBfX2xhc3QpOwogIHZvaWQgX01fZXJhc2VfYnVja2V0KGNvbnN0IHNpemVfdHlwZSBfX24s
IF9Ob2RlKiBfX2xhc3QpOwoKICB2b2lkIF9NX2NvcHlfZnJvbShjb25zdCBoYXNodGFibGUmIF9f
aHQpOwoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNs
YXNzIF9FeEssIGNsYXNzIF9FcUssCiAgICAgICAgICBjbGFzcyBfQWxsPgpfSGFzaHRhYmxlX2l0
ZXJhdG9yPF9WYWwsX0tleSxfSEYsX0V4SyxfRXFLLF9BbGw+JgpfSGFzaHRhYmxlX2l0ZXJhdG9y
PF9WYWwsX0tleSxfSEYsX0V4SyxfRXFLLF9BbGw+OjpvcGVyYXRvcisrKCkKewogIGNvbnN0IF9O
b2RlKiBfX29sZCA9IF9NX2N1cjsKICBfTV9jdXIgPSBfTV9jdXItPl9NX25leHQ7CiAgaWYgKCFf
TV9jdXIpIHsKICAgIHNpemVfdHlwZSBfX2J1Y2tldCA9IF9NX2h0LT5fTV9ia3RfbnVtKF9fb2xk
LT5fTV92YWwpOwogICAgd2hpbGUgKCFfTV9jdXIgJiYgKytfX2J1Y2tldCA8IF9NX2h0LT5fTV9i
dWNrZXRzLnNpemUoKSkKICAgICAgX01fY3VyID0gX01faHQtPl9NX2J1Y2tldHNbX19idWNrZXRd
OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5
LCBjbGFzcyBfSEYsIGNsYXNzIF9FeEssIGNsYXNzIF9FcUssCiAgICAgICAgICBjbGFzcyBfQWxs
PgppbmxpbmUgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLF9LZXksX0hGLF9FeEssX0VxSyxfQWxs
PgpfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsX0tleSxfSEYsX0V4SyxfRXFLLF9BbGw+OjpvcGVy
YXRvcisrKGludCkKewogIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgKysqdGhpczsKICByZXR1
cm4gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYs
IGNsYXNzIF9FeEssIGNsYXNzIF9FcUssCiAgICAgICAgICBjbGFzcyBfQWxsPgpfSGFzaHRhYmxl
X2NvbnN0X2l0ZXJhdG9yPF9WYWwsX0tleSxfSEYsX0V4SyxfRXFLLF9BbGw+JgpfSGFzaHRhYmxl
X2NvbnN0X2l0ZXJhdG9yPF9WYWwsX0tleSxfSEYsX0V4SyxfRXFLLF9BbGw+OjpvcGVyYXRvcisr
KCkKewogIGNvbnN0IF9Ob2RlKiBfX29sZCA9IF9NX2N1cjsKICBfTV9jdXIgPSBfTV9jdXItPl9N
X25leHQ7CiAgaWYgKCFfTV9jdXIpIHsKICAgIHNpemVfdHlwZSBfX2J1Y2tldCA9IF9NX2h0LT5f
TV9ia3RfbnVtKF9fb2xkLT5fTV92YWwpOwogICAgd2hpbGUgKCFfTV9jdXIgJiYgKytfX2J1Y2tl
dCA8IF9NX2h0LT5fTV9idWNrZXRzLnNpemUoKSkKICAgICAgX01fY3VyID0gX01faHQtPl9NX2J1
Y2tldHNbX19idWNrZXRdOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeEssIGNsYXNzIF9FcUssCiAgICAg
ICAgICBjbGFzcyBfQWxsPgppbmxpbmUgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLF9L
ZXksX0hGLF9FeEssX0VxSyxfQWxsPgpfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsX0tl
eSxfSEYsX0V4SyxfRXFLLF9BbGw+OjpvcGVyYXRvcisrKGludCkKewogIGNvbnN0X2l0ZXJhdG9y
IF9fdG1wID0gKnRoaXM7CiAgKysqdGhpczsKICByZXR1cm4gX190bXA7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBj
bGFzcyBfQWxsPgpib29sIG9wZXJhdG9yPT0oY29uc3QgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYs
X0V4LF9FcSxfQWxsPiYgX19odDEsCiAgICAgICAgICAgICAgICBjb25zdCBoYXNodGFibGU8X1Zh
bCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+JiBfX2h0MikKewogIHR5cGVkZWYgdHlwZW5hbWUgaGFz
aHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPjo6X05vZGUgX05vZGU7CiAgaWYgKF9f
aHQxLl9NX2J1Y2tldHMuc2l6ZSgpICE9IF9faHQyLl9NX2J1Y2tldHMuc2l6ZSgpKQogICAgcmV0
dXJuIGZhbHNlOwogIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fbiA8IF9faHQxLl9NX2J1Y2tldHMu
c2l6ZSgpOyArK19fbikgewogICAgX05vZGUqIF9fY3VyMSA9IF9faHQxLl9NX2J1Y2tldHNbX19u
XTsKICAgIF9Ob2RlKiBfX2N1cjIgPSBfX2h0Mi5fTV9idWNrZXRzW19fbl07CiAgICBmb3IgKCA7
IF9fY3VyMSAmJiBfX2N1cjIgJiYgX19jdXIxLT5fTV92YWwgPT0gX19jdXIyLT5fTV92YWw7CiAg
ICAgICAgICBfX2N1cjEgPSBfX2N1cjEtPl9NX25leHQsIF9fY3VyMiA9IF9fY3VyMi0+X01fbmV4
dCkKICAgICAge30KICAgIGlmIChfX2N1cjEgfHwgX19jdXIyKQogICAgICByZXR1cm4gZmFsc2U7
CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwg
Y2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+JiBf
X2h0MSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNodGFibGU8X1ZhbCxfS2V5LF9I
RixfRXgsX0VxLF9BbGw+JiBfX2h0MikgewogIHJldHVybiAhKF9faHQxID09IF9faHQyKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4dHJh
Y3QsIGNsYXNzIF9FcUtleSwKICAgICAgICAgIGNsYXNzIF9BbGw+CmlubGluZSB2b2lkIHN3YXAo
aGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4dHJhY3QsIF9FcUtleSwgX0FsbD4mIF9faHQx
LAogICAgICAgICAgICAgICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeHRyYWN0LCBf
RXFLZXksIF9BbGw+JiBfX2h0MikgewogIF9faHQxLnN3YXAoX19odDIpOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEs
IGNsYXNzIF9BbGw+CnBhaXI8dHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9F
cSxfQWxsPjo6aXRlcmF0b3IsIGJvb2w+Cmhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEs
X0FsbD4KICA6Omluc2VydF91bmlxdWVfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmop
CnsKICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bShfX29iaik7CiAgX05vZGUqIF9f
Zmlyc3QgPSBfTV9idWNrZXRzW19fbl07CgogIGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsg
X19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCiAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9r
ZXkoX19jdXItPl9NX3ZhbCksIF9NX2dldF9rZXkoX19vYmopKSkKICAgICAgcmV0dXJuIHBhaXI8
aXRlcmF0b3IsIGJvb2w+KGl0ZXJhdG9yKF9fY3VyLCB0aGlzKSwgZmFsc2UpOwoKICBfTm9kZSog
X190bXAgPSBfTV9uZXdfbm9kZShfX29iaik7CiAgX190bXAtPl9NX25leHQgPSBfX2ZpcnN0Owog
IF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOwogICsrX01fbnVtX2VsZW1lbnRzOwogIHJldHVybiBw
YWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3RtcCwgdGhpcyksIHRydWUpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNz
IF9FcSwgY2xhc3MgX0FsbD4KdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9F
cSxfQWxsPjo6aXRlcmF0b3IKaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPgog
IDo6aW5zZXJ0X2VxdWFsX25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQp7CiAgY29u
c3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19vYmopOwogIF9Ob2RlKiBfX2ZpcnN0ID0g
X01fYnVja2V0c1tfX25dOwoKICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3Q7IF9fY3VyOyBf
X2N1ciA9IF9fY3VyLT5fTV9uZXh0KQogICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3Vy
LT5fTV92YWwpLCBfTV9nZXRfa2V5KF9fb2JqKSkpIHsKICAgICAgX05vZGUqIF9fdG1wID0gX01f
bmV3X25vZGUoX19vYmopOwogICAgICBfX3RtcC0+X01fbmV4dCA9IF9fY3VyLT5fTV9uZXh0Owog
ICAgICBfX2N1ci0+X01fbmV4dCA9IF9fdG1wOwogICAgICArK19NX251bV9lbGVtZW50czsKICAg
ICAgcmV0dXJuIGl0ZXJhdG9yKF9fdG1wLCB0aGlzKTsKICAgIH0KCiAgX05vZGUqIF9fdG1wID0g
X01fbmV3X25vZGUoX19vYmopOwogIF9fdG1wLT5fTV9uZXh0ID0gX19maXJzdDsKICBfTV9idWNr
ZXRzW19fbl0gPSBfX3RtcDsKICArK19NX251bV9lbGVtZW50czsKICByZXR1cm4gaXRlcmF0b3Io
X190bXAsIHRoaXMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3Mg
X0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KdHlwZW5hbWUgaGFzaHRhYmxl
PF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPjo6cmVmZXJlbmNlCmhhc2h0YWJsZTxfVmFsLF9L
ZXksX0hGLF9FeCxfRXEsX0FsbD46OmZpbmRfb3JfaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9f
b2JqKQp7CiAgcmVzaXplKF9NX251bV9lbGVtZW50cyArIDEpOwoKICBzaXplX3R5cGUgX19uID0g
X01fYmt0X251bShfX29iaik7CiAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07Cgog
IGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25l
eHQpCiAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9NX2dldF9r
ZXkoX19vYmopKSkKICAgICAgcmV0dXJuIF9fY3VyLT5fTV92YWw7CgogIF9Ob2RlKiBfX3RtcCA9
IF9NX25ld19ub2RlKF9fb2JqKTsKICBfX3RtcC0+X01fbmV4dCA9IF9fZmlyc3Q7CiAgX01fYnVj
a2V0c1tfX25dID0gX190bXA7CiAgKytfTV9udW1fZWxlbWVudHM7CiAgcmV0dXJuIF9fdG1wLT5f
TV92YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNs
YXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgpwYWlyPHR5cGVuYW1lIGhhc2h0YWJsZTxf
VmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIGhhc2h0
YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD46Oml0ZXJhdG9yPgpoYXNodGFibGU8X1Zh
bCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+OjplcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19r
ZXkpCnsKICB0eXBlZGVmIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBfUGlpOwogIGNvbnN0IHNp
emVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CgogIGZvciAoX05vZGUqIF9fZmly
c3QgPSBfTV9idWNrZXRzW19fbl07IF9fZmlyc3Q7IF9fZmlyc3QgPSBfX2ZpcnN0LT5fTV9uZXh0
KQogICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KSkg
ewogICAgICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3QtPl9NX25leHQ7IF9fY3VyOyBfX2N1
ciA9IF9fY3VyLT5fTV9uZXh0KQogICAgICAgIGlmICghX01fZXF1YWxzKF9NX2dldF9rZXkoX19j
dXItPl9NX3ZhbCksIF9fa2V5KSkKICAgICAgICAgIHJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmly
c3QsIHRoaXMpLCBpdGVyYXRvcihfX2N1ciwgdGhpcykpOwogICAgICBmb3IgKHNpemVfdHlwZSBf
X20gPSBfX24gKyAxOyBfX20gPCBfTV9idWNrZXRzLnNpemUoKTsgKytfX20pCiAgICAgICAgaWYg
KF9NX2J1Y2tldHNbX19tXSkKICAgICAgICAgIHJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmlyc3Qs
IHRoaXMpLAogICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihfTV9idWNrZXRzW19fbV0sIHRo
aXMpKTsKICAgICAgcmV0dXJuIF9QaWkoaXRlcmF0b3IoX19maXJzdCwgdGhpcyksIGVuZCgpKTsK
ICAgIH0KICByZXR1cm4gX1BpaShlbmQoKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Zh
bCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0Fs
bD4KcGFpcjx0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+Ojpj
b25zdF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgs
X0VxLF9BbGw+Ojpjb25zdF9pdGVyYXRvcj4KaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9F
cSxfQWxsPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAp7CiAg
dHlwZWRlZiBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX1BpaTsKICBjb25z
dCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOwoKICBmb3IgKGNvbnN0IF9O
b2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dIDsKICAgICAgIF9fZmlyc3Q7CiAgICAgICBf
X2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkgewogICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5
KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KSkgewogICAgICBmb3IgKGNvbnN0IF9Ob2RlKiBfX2N1
ciA9IF9fZmlyc3QtPl9NX25leHQ7CiAgICAgICAgICAgX19jdXI7CiAgICAgICAgICAgX19jdXIg
PSBfX2N1ci0+X01fbmV4dCkKICAgICAgICBpZiAoIV9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3Vy
LT5fTV92YWwpLCBfX2tleSkpCiAgICAgICAgICByZXR1cm4gX1BpaShjb25zdF9pdGVyYXRvcihf
X2ZpcnN0LCB0aGlzKSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fY3Vy
LCB0aGlzKSk7CiAgICAgIGZvciAoc2l6ZV90eXBlIF9fbSA9IF9fbiArIDE7IF9fbSA8IF9NX2J1
Y2tldHMuc2l6ZSgpOyArK19fbSkKICAgICAgICBpZiAoX01fYnVja2V0c1tfX21dKQogICAgICAg
ICAgcmV0dXJuIF9QaWkoY29uc3RfaXRlcmF0b3IoX19maXJzdCwgdGhpcyksCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdF9pdGVyYXRvcihfTV9idWNrZXRzW19fbV0sIHRoaXMpKTsKICAgICAg
cmV0dXJuIF9QaWkoY29uc3RfaXRlcmF0b3IoX19maXJzdCwgdGhpcyksIGVuZCgpKTsKICAgIH0K
ICB9CiAgcmV0dXJuIF9QaWkoZW5kKCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWws
IGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+
CnR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD46OnNpemVfdHlw
ZQpoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+OjplcmFzZShjb25zdCBrZXlf
dHlwZSYgX19rZXkpCnsKICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19r
ZXkpOwogIF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOwogIHNpemVfdHlwZSBfX2Vy
YXNlZCA9IDA7CgogIGlmIChfX2ZpcnN0KSB7CiAgICBfTm9kZSogX19jdXIgPSBfX2ZpcnN0Owog
ICAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwogICAgd2hpbGUgKF9fbmV4dCkgewog
ICAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19uZXh0LT5fTV92YWwpLCBfX2tleSkpIHsK
ICAgICAgICBfX2N1ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKICAgICAgICBfTV9kZWxl
dGVfbm9kZShfX25leHQpOwogICAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwogICAgICAg
ICsrX19lcmFzZWQ7CiAgICAgICAgLS1fTV9udW1fZWxlbWVudHM7CiAgICAgIH0KICAgICAgZWxz
ZSB7CiAgICAgICAgX19jdXIgPSBfX25leHQ7CiAgICAgICAgX19uZXh0ID0gX19jdXItPl9NX25l
eHQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2ZpcnN0LT5f
TV92YWwpLCBfX2tleSkpIHsKICAgICAgX01fYnVja2V0c1tfX25dID0gX19maXJzdC0+X01fbmV4
dDsKICAgICAgX01fZGVsZXRlX25vZGUoX19maXJzdCk7CiAgICAgICsrX19lcmFzZWQ7CiAgICAg
IC0tX01fbnVtX2VsZW1lbnRzOwogICAgfQogIH0KICByZXR1cm4gX19lcmFzZWQ7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3Mg
X0VxLCBjbGFzcyBfQWxsPgp2b2lkIGhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0Fs
bD46OmVyYXNlKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KQp7CiAgX05vZGUqIF9fcCA9IF9faXQuX01f
Y3VyOwogIGlmIChfX3ApIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtKF9f
cC0+X01fdmFsKTsKICAgIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsKCiAgICBpZiAo
X19jdXIgPT0gX19wKSB7CiAgICAgIF9NX2J1Y2tldHNbX19uXSA9IF9fY3VyLT5fTV9uZXh0Owog
ICAgICBfTV9kZWxldGVfbm9kZShfX2N1cik7CiAgICAgIC0tX01fbnVtX2VsZW1lbnRzOwogICAg
fQogICAgZWxzZSB7CiAgICAgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKICAgICAg
d2hpbGUgKF9fbmV4dCkgewogICAgICAgIGlmIChfX25leHQgPT0gX19wKSB7CiAgICAgICAgICBf
X2N1ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKICAgICAgICAgIF9NX2RlbGV0ZV9ub2Rl
KF9fbmV4dCk7CiAgICAgICAgICAtLV9NX251bV9lbGVtZW50czsKICAgICAgICAgIGJyZWFrOwog
ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fY3VyID0gX19uZXh0OwogICAgICAg
ICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgs
IGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4Kdm9pZCBoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgs
X0VxLF9BbGw+CiAgOjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsK
ICBzaXplX3R5cGUgX19mX2J1Y2tldCA9IF9fZmlyc3QuX01fY3VyID8KICAgIF9NX2JrdF9udW0o
X19maXJzdC5fTV9jdXItPl9NX3ZhbCkgOiBfTV9idWNrZXRzLnNpemUoKTsKICBzaXplX3R5cGUg
X19sX2J1Y2tldCA9IF9fbGFzdC5fTV9jdXIgPwogICAgX01fYmt0X251bShfX2xhc3QuX01fY3Vy
LT5fTV92YWwpIDogX01fYnVja2V0cy5zaXplKCk7CgogIGlmIChfX2ZpcnN0Ll9NX2N1ciA9PSBf
X2xhc3QuX01fY3VyKQogICAgcmV0dXJuOwogIGVsc2UgaWYgKF9fZl9idWNrZXQgPT0gX19sX2J1
Y2tldCkKICAgIF9NX2VyYXNlX2J1Y2tldChfX2ZfYnVja2V0LCBfX2ZpcnN0Ll9NX2N1ciwgX19s
YXN0Ll9NX2N1cik7CiAgZWxzZSB7CiAgICBfTV9lcmFzZV9idWNrZXQoX19mX2J1Y2tldCwgX19m
aXJzdC5fTV9jdXIsIDApOwogICAgZm9yIChzaXplX3R5cGUgX19uID0gX19mX2J1Y2tldCArIDE7
IF9fbiA8IF9fbF9idWNrZXQ7ICsrX19uKQogICAgICBfTV9lcmFzZV9idWNrZXQoX19uLCAwKTsK
ICAgIGlmIChfX2xfYnVja2V0ICE9IF9NX2J1Y2tldHMuc2l6ZSgpKQogICAgICBfTV9lcmFzZV9i
dWNrZXQoX19sX2J1Y2tldCwgX19sYXN0Ll9NX2N1cik7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3Mg
X0FsbD4KaW5saW5lIHZvaWQKaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPjo6
ZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgX19sYXN0KQp7CiAgZXJhc2UoaXRlcmF0
b3IoY29uc3RfY2FzdDxfTm9kZSo+KF9fZmlyc3QuX01fY3VyKSwKICAgICAgICAgICAgICAgICBj
b25zdF9jYXN0PGhhc2h0YWJsZSo+KF9fZmlyc3QuX01faHQpKSwKICAgICAgICBpdGVyYXRvcihj
b25zdF9jYXN0PF9Ob2RlKj4oX19sYXN0Ll9NX2N1ciksCiAgICAgICAgICAgICAgICAgY29uc3Rf
Y2FzdDxoYXNodGFibGUqPihfX2xhc3QuX01faHQpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFs
LCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxs
PgppbmxpbmUgdm9pZApoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+OjplcmFz
ZShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCkKewogIGVyYXNlKGl0ZXJhdG9yKGNvbnN0X2Nh
c3Q8X05vZGUqPihfX2l0Ll9NX2N1ciksCiAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxoYXNo
dGFibGUqPihfX2l0Ll9NX2h0KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tl
eSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4Kdm9pZCBoYXNo
dGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+CiAgOjpyZXNpemUoc2l6ZV90eXBlIF9f
bnVtX2VsZW1lbnRzX2hpbnQpCnsKICBjb25zdCBzaXplX3R5cGUgX19vbGRfbiA9IF9NX2J1Y2tl
dHMuc2l6ZSgpOwogIGlmIChfX251bV9lbGVtZW50c19oaW50ID4gX19vbGRfbikgewogICAgY29u
c3Qgc2l6ZV90eXBlIF9fbiA9IF9NX25leHRfc2l6ZShfX251bV9lbGVtZW50c19oaW50KTsKICAg
IGlmIChfX24gPiBfX29sZF9uKSB7CiAgICAgIHZlY3RvcjxfTm9kZSosIF9BbGw+IF9fdG1wKF9f
biwgKF9Ob2RlKikoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2J1Y2tl
dHMuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKHNpemVfdHlwZSBf
X2J1Y2tldCA9IDA7IF9fYnVja2V0IDwgX19vbGRfbjsgKytfX2J1Y2tldCkgewogICAgICAgICAg
X05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fYnVja2V0XTsKICAgICAgICAgIHdoaWxlIChf
X2ZpcnN0KSB7CiAgICAgICAgICAgIHNpemVfdHlwZSBfX25ld19idWNrZXQgPSBfTV9ia3RfbnVt
KF9fZmlyc3QtPl9NX3ZhbCwgX19uKTsKICAgICAgICAgICAgX01fYnVja2V0c1tfX2J1Y2tldF0g
PSBfX2ZpcnN0LT5fTV9uZXh0OwogICAgICAgICAgICBfX2ZpcnN0LT5fTV9uZXh0ID0gX190bXBb
X19uZXdfYnVja2V0XTsKICAgICAgICAgICAgX190bXBbX19uZXdfYnVja2V0XSA9IF9fZmlyc3Q7
CiAgICAgICAgICAgIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fYnVja2V0XTsKICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgICAgX01fYnVja2V0cy5zd2FwKF9fdG1wKTsKICAgICAgfQoKICAgICAg
Y2F0Y2goLi4uKSB7CiAgICAgICAgZm9yIChzaXplX3R5cGUgX19idWNrZXQgPSAwOyBfX2J1Y2tl
dCA8IF9fdG1wLnNpemUoKTsgKytfX2J1Y2tldCkgewogICAgICAgICAgd2hpbGUgKF9fdG1wW19f
YnVja2V0XSkgewogICAgICAgICAgICBfTm9kZSogX19uZXh0ID0gX190bXBbX19idWNrZXRdLT5f
TV9uZXh0OwogICAgICAgICAgICBfTV9kZWxldGVfbm9kZShfX3RtcFtfX2J1Y2tldF0pOwogICAg
ICAgICAgICBfX3RtcFtfX2J1Y2tldF0gPSBfX25leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAgIHRocm93OwogICAgICB9CgogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWws
IGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+
CnZvaWQgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPgogIDo6X01fZXJhc2Vf
YnVja2V0KGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2ZpcnN0LCBfTm9kZSogX19sYXN0
KQp7CiAgX05vZGUqIF9fY3VyID0gX01fYnVja2V0c1tfX25dOwogIGlmIChfX2N1ciA9PSBfX2Zp
cnN0KQogICAgX01fZXJhc2VfYnVja2V0KF9fbiwgX19sYXN0KTsKICBlbHNlIHsKICAgIF9Ob2Rl
KiBfX25leHQ7CiAgICBmb3IgKF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwogICAgICAgICBfX25l
eHQgIT0gX19maXJzdDsKICAgICAgICAgX19jdXIgPSBfX25leHQsIF9fbmV4dCA9IF9fY3VyLT5f
TV9uZXh0KQogICAgICA7CiAgICB3aGlsZSAoX19uZXh0ICE9IF9fbGFzdCkgewogICAgICBfX2N1
ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0
KTsKICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CiAgICAgIC0tX01fbnVtX2VsZW1lbnRz
OwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9I
RiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CnZvaWQgaGFzaHRhYmxlPF9WYWws
X0tleSxfSEYsX0V4LF9FcSxfQWxsPgogIDo6X01fZXJhc2VfYnVja2V0KGNvbnN0IHNpemVfdHlw
ZSBfX24sIF9Ob2RlKiBfX2xhc3QpCnsKICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07
CiAgd2hpbGUgKF9fY3VyICE9IF9fbGFzdCkgewogICAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5f
TV9uZXh0OwogICAgX01fZGVsZXRlX25vZGUoX19jdXIpOwogICAgX19jdXIgPSBfX25leHQ7CiAg
ICBfTV9idWNrZXRzW19fbl0gPSBfX2N1cjsKICAgIC0tX01fbnVtX2VsZW1lbnRzOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBj
bGFzcyBfRXEsIGNsYXNzIF9BbGw+CnZvaWQgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9F
cSxfQWxsPjo6Y2xlYXIoKQp7CiAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX01fYnVj
a2V0cy5zaXplKCk7ICsrX19pKSB7CiAgICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19faV07
CiAgICB3aGlsZSAoX19jdXIgIT0gMCkgewogICAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9N
X25leHQ7CiAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fY3VyKTsKICAgICAgX19jdXIgPSBfX25leHQ7
CiAgICB9CiAgICBfTV9idWNrZXRzW19faV0gPSAwOwogIH0KICBfTV9udW1fZWxlbWVudHMgPSAw
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3Mg
X0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CnZvaWQgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYs
X0V4LF9FcSxfQWxsPgogIDo6X01fY29weV9mcm9tKGNvbnN0IGhhc2h0YWJsZSYgX19odCkKewog
IF9NX2J1Y2tldHMuY2xlYXIoKTsKICBfTV9idWNrZXRzLnJlc2VydmUoX19odC5fTV9idWNrZXRz
LnNpemUoKSk7CiAgX01fYnVja2V0cy5pbnNlcnQoX01fYnVja2V0cy5lbmQoKSwgX19odC5fTV9i
dWNrZXRzLnNpemUoKSwgKF9Ob2RlKikgMCk7CiAgdHJ5IHsKICAgIGZvciAoc2l6ZV90eXBlIF9f
aSA9IDA7IF9faSA8IF9faHQuX01fYnVja2V0cy5zaXplKCk7ICsrX19pKSB7CiAgICAgIGNvbnN0
IF9Ob2RlKiBfX2N1ciA9IF9faHQuX01fYnVja2V0c1tfX2ldOwogICAgICBpZiAoX19jdXIpIHsK
ICAgICAgICBfTm9kZSogX19sb2NhbF9jb3B5ID0gX01fbmV3X25vZGUoX19jdXItPl9NX3ZhbCk7
CiAgICAgICAgX01fYnVja2V0c1tfX2ldID0gX19sb2NhbF9jb3B5OwoKICAgICAgICBmb3IgKF9O
b2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKICAgICAgICAgICAgIF9fbmV4dDsKICAgICAg
ICAgICAgIF9fY3VyID0gX19uZXh0LCBfX25leHQgPSBfX2N1ci0+X01fbmV4dCkgewogICAgICAg
ICAgX19sb2NhbF9jb3B5LT5fTV9uZXh0ID0gX01fbmV3X25vZGUoX19uZXh0LT5fTV92YWwpOwog
ICAgICAgICAgX19sb2NhbF9jb3B5ID0gX19sb2NhbF9jb3B5LT5fTV9uZXh0OwogICAgICAgIH0K
ICAgICAgfQogICAgfQogICAgX01fbnVtX2VsZW1lbnRzID0gX19odC5fTV9udW1fZWxlbWVudHM7
CiAgfQogIGNhdGNoKC4uLikgeyBjbGVhcigpOyB0aHJvdzsgfTsKfQoKfQojIDM1ICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZXh0L2hhc2hfbWFwIiAyCiMgMSAiL2hvbWUyL21h
cmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzNiAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4dC9oYXNoX21hcCIgMgoKbmFtZXNw
YWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAgICAgICBj
bGFzcyBfSGFzaEZjbiA9IGhhc2g8X0tleT4sCiAgICAgICAgICBjbGFzcyBfRXF1YWxLZXkgPSBl
cXVhbF90bzxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4K
Y2xhc3MgaGFzaF9tYXA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf
SGFzaEZuLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcUtleSwgX0FsbG9jPiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBf
RXFLZXksIF9BbGxvYz4mKTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksCiAgICAgICAgICBjbGFzcyBfQWxsb2M+CmNsYXNz
IGhhc2hfbWFwCnsKcHJpdmF0ZToKICB0eXBlZGVmIGhhc2h0YWJsZTxwYWlyPGNvbnN0IF9LZXks
X1RwPixfS2V5LF9IYXNoRmNuLAogICAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8cGFpcjxj
b25zdCBfS2V5LF9UcD4gPixfRXF1YWxLZXksX0FsbG9jPiBfSHQ7CiAgX0h0IF9NX2h0OwoKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKICB0eXBlZGVm
IF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6
aGFzaGVyIGhhc2hlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVh
bDsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSHQ6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6
Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpyZWZl
cmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2Ug
Y29uc3RfcmVmZXJlbmNlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgaXRlcmF0
b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OwoKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7
CgogIGhhc2hlciBoYXNoX2Z1bmN0KCkgY29uc3QgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgp
OyB9CiAga2V5X2VxdWFsIGtleV9lcSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lmdl
dF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIGhhc2hfbWFwKCkgOiBfTV9odCgxMDAsIGhhc2hl
cigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBoYXNoX21h
cChzaXplX3R5cGUgX19uKQogICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwg
YWxsb2NhdG9yX3R5cGUoKSkge30KICBoYXNoX21hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNo
ZXImIF9faGYpCiAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90
eXBlKCkpIHt9CiAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBj
b25zdCBrZXlfZXF1YWwmIF9fZXFsLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2Ep
IHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBoYXNoX21hcChfSW5wdXRJ
dGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKICAgIDogX01faHQoMTAwLCBoYXNoZXIo
KSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2h0Lmluc2VydF91bmlx
dWUoX19mLCBfX2wpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGhhc2hf
bWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19u
KQogICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJ
dGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hm
KQogICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQog
ICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJh
dG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICBjb25zdCBoYXNoZXImIF9faGYsIGNv
bnN0IGtleV9lcXVhbCYgX19lcWwsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkK
ICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KCnB1YmxpYzoKICBzaXplX3R5
cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KICBib29sIGVtcHR5KCkg
Y29uc3QgeyByZXR1cm4gX01faHQuZW1wdHkoKTsgfQogIHZvaWQgc3dhcChoYXNoX21hcCYgX19o
cykgeyBfTV9odC5zd2FwKF9faHMuX01faHQpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNs
YXNzIF9UMSwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLLCBjbGFzcyBfQWw+CiAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I9PSAoY29uc3QgaGFzaF9tYXA8X0sxLCBfVDEsIF9IRiwgX0VxSywgX0FsPiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzaF9tYXA8X0sxLCBfVDEsIF9IRiwgX0Vx
SywgX0FsPiYpOwoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0K
ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9odC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CgpwdWJsaWM6CiAgcGFpcjxpdGVy
YXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCiAgICB7IHJldHVybiBf
TV9odC5pbnNlcnRfdW5pcXVlKF9fb2JqKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9f
bCkKICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsX19sKTsgfQogIHBhaXI8aXRlcmF0b3Is
Ym9vbD4gaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQogICAgeyByZXR1
cm4gX01faHQuaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShfX29iaik7IH0KCiAgaXRlcmF0b3IgZmlu
ZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CiAg
Y29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CiAgICB7IHJl
dHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQoKICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5
cGUmIF9fa2V5KSB7CiAgICByZXR1cm4gX01faHQuZmluZF9vcl9pbnNlcnQodmFsdWVfdHlwZShf
X2tleSwgX1RwKCkpKS5zZWNvbmQ7CiAgfQoKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5
cGUmIF9fa2V5KSBjb25zdCB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KCiAgcGFpcjxp
dGVyYXRvciwgaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKICAg
IHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQogIHBhaXI8Y29uc3RfaXRlcmF0
b3IsIGNvbnN0X2l0ZXJhdG9yPgogIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkg
Y29uc3QKICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQoKICBzaXplX3R5
cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7cmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5
KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19pdCkgeyBfTV9odC5lcmFzZShfX2l0KTsgfQog
IHZvaWQgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpIHsgX01faHQuZXJhc2UoX19m
LCBfX2wpOyB9CiAgdm9pZCBjbGVhcigpIHsgX01faHQuY2xlYXIoKTsgfQoKICB2b2lkIHJlc2l6
ZShzaXplX3R5cGUgX19oaW50KSB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9CiAgc2l6ZV90eXBl
IGJ1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9CiAg
c2l6ZV90eXBlIG1heF9idWNrZXRfY291bnQoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfYnVj
a2V0X2NvdW50KCk7IH0KICBzaXplX3R5cGUgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24p
IGNvbnN0CiAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcWxL
ZXksIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBoYXNoX21hcDxf
S2V5LF9UcCxfSGFzaEZjbixfRXFsS2V5LF9BbGxvYz4mIF9faG0xLAogICAgICAgICAgIGNvbnN0
IGhhc2hfbWFwPF9LZXksX1RwLF9IYXNoRmNuLF9FcWxLZXksX0FsbG9jPiYgX19obTIpCnsKICBy
ZXR1cm4gX19obTEuX01faHQgPT0gX19obTIuX01faHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgaGFzaF9tYXA8X0tleSxfVHAsX0hhc2hGY24s
X0VxbEtleSxfQWxsb2M+JiBfX2htMSwKICAgICAgICAgICBjb25zdCBoYXNoX21hcDxfS2V5LF9U
cCxfSGFzaEZjbixfRXFsS2V5LF9BbGxvYz4mIF9faG0yKSB7CiAgcmV0dXJuICEoX19obTEgPT0g
X19obTIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZj
biwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKGhhc2hfbWFw
PF9LZXksX1RwLF9IYXNoRmNuLF9FcWxLZXksX0FsbG9jPiYgX19obTEsCiAgICAgaGFzaF9tYXA8
X0tleSxfVHAsX0hhc2hGY24sX0VxbEtleSxfQWxsb2M+JiBfX2htMikKewogIF9faG0xLnN3YXAo
X19obTIpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAgICAgICBj
bGFzcyBfSGFzaEZjbiA9IGhhc2g8X0tleT4sCiAgICAgICAgICBjbGFzcyBfRXF1YWxLZXkgPSBl
cXVhbF90bzxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4K
Y2xhc3MgaGFzaF9tdWx0aW1hcDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNs
YXNzIF9IRiwgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9y
PT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LF9UcCxfSEYsX0VxS2V5LF9BbGxvYz4mIF9faG0x
LAogICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSxfVHAsX0hGLF9FcUtleSxfQWxs
b2M+JiBfX2htMik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFz
aEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CmNsYXNzIGhhc2hfbXVsdGltYXAK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0eXBl
ZGVmIGhhc2h0YWJsZTxwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9LZXksIF9IYXNoRmNuLAogICAg
ICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sIF9FcXVh
bEtleSwgX0FsbG9jPgogICAgICAgICAgX0h0OwogIF9IdCBfTV9odDsKCnB1YmxpYzoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90
eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2
YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNo
ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0h0Ojpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50
ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cmVmZXJlbmNlIHJlZmVy
ZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVy
ZW5jZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBoYXNoZXIg
aGFzaF9mdW5jdCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQogIGtleV9l
cXVhbCBrZXlfZXEoKSBjb25zdCB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9y
KCk7IH0KCnB1YmxpYzoKICBoYXNoX211bHRpbWFwKCkgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBr
ZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBoYXNoX211bHRpbWFw
KHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBh
bGxvY2F0b3JfdHlwZSgpKSB7fQogIGhhc2hfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiwgY29uc3Qg
aGFzaGVyJiBfX2hmKQogICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0
b3JfdHlwZSgpKSB7fQogIGhhc2hfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVy
JiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAogICAgICAgICAgICAgICAgY29uc3QgYWxs
b2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX2h0KF9fbiwgX19o
ZiwgX19lcWwsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGhh
c2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCiAgICA6
IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAg
eyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVy
YXRvciBfX2wsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9l
cXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBf
X2wpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGhhc2hfbXVsdGltYXAo
X0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCiAg
ICAgICAgICAgICAgICBjb25zdCBoYXNoZXImIF9faGYpCiAgICA6IF9NX2h0KF9fbiwgX19oZiwg
a2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChf
X2YsIF9fbCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgaGFzaF9tdWx0
aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9f
biwKICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBf
X2VxbCwKICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCiAgICB7IF9NX2h0
Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KCnB1YmxpYzoKICBzaXplX3R5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1
cm4gX01faHQuZW1wdHkoKTsgfQogIHZvaWQgc3dhcChoYXNoX211bHRpbWFwJiBfX2hzKSB7IF9N
X2h0LnN3YXAoX19ocy5fTV9odCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1Qx
LCBjbGFzcyBfSEYsIGNsYXNzIF9FcUssIGNsYXNzIF9BbD4KICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09IChjb25zdCBoYXNoX211bHRpbWFwPF9LMSwgX1QxLCBfSEYsIF9FcUssIF9BbD4mLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0sxLCBfVDEsIF9IRiwg
X0VxSywgX0FsPiYpOwoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7
IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9odC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CgpwdWJsaWM6CiAgaXRlcmF0
b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQogICAgeyByZXR1cm4gX01faHQuaW5z
ZXJ0X2VxdWFsKF9fb2JqKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKICAgIHsg
X01faHQuaW5zZXJ0X2VxdWFsKF9fZixfX2wpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0X25vcmVzaXpl
KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQogICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFs
X25vcmVzaXplKF9fb2JqKTsgfQoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tl
eSkgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNv
bnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkp
OyB9CgogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0IHsgcmV0
dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQoKICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gZXF1
YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQogICAgeyByZXR1cm4gX01faHQuZXF1YWxf
cmFuZ2UoX19rZXkpOyB9CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CiAg
ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAogICAgeyByZXR1cm4gX01f
aHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CgogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlw
ZSYgX19rZXkpIHtyZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CiAgdm9pZCBlcmFzZShpdGVy
YXRvciBfX2l0KSB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBf
X2YsIGl0ZXJhdG9yIF9fbCkgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KICB2b2lkIGNsZWFy
KCkgeyBfTV9odC5jbGVhcigpOyB9CgpwdWJsaWM6CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9f
aGludCkgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQogIHNpemVfdHlwZSBidWNrZXRfY291bnQo
KSBjb25zdCB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQogIHNpemVfdHlwZSBtYXhf
YnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9
CiAgc2l6ZV90eXBlIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBy
ZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IRiwgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LF9UcCxfSEYsX0Vx
S2V5LF9BbGxvYz4mIF9faG0xLAogICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSxf
VHAsX0hGLF9FcUtleSxfQWxsb2M+JiBfX2htMikKewogIHJldHVybiBfX2htMS5fTV9odCA9PSBf
X2htMi5fTV9odDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hG
LCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25z
dCBoYXNoX211bHRpbWFwPF9LZXksX1RwLF9IRixfRXFLZXksX0FsbG9jPiYgX19obTEsCiAgICAg
ICAgICAgY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LF9UcCxfSEYsX0VxS2V5LF9BbGxvYz4mIF9f
aG0yKSB7CiAgcmV0dXJuICEoX19obTEgPT0gX19obTIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgdm9pZApzd2FwKGhhc2hfbXVsdGltYXA8X0tleSxfVHAsX0hhc2hGY24sX0VxbEtl
eSxfQWxsb2M+JiBfX2htMSwKICAgICBoYXNoX211bHRpbWFwPF9LZXksX1RwLF9IYXNoRmNuLF9F
cWxLZXksX0FsbG9jPiYgX19obTIpCnsKICBfX2htMS5zd2FwKF9faG0yKTsKfQoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sIGNsYXNzIF9FcUtleSwg
Y2xhc3MgX0FsbG9jPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3I8aGFzaF9tYXA8X0tleSwgX1RwLCBf
SGFzaEZuLCBfRXFLZXksIF9BbGxvYz4gPiB7CnByb3RlY3RlZDoKICB0eXBlZGVmIGhhc2hfbWFw
PF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxS2V5LCBfQWxsb2M+IF9Db250YWluZXI7CiAgX0NvbnRh
aW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90
eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGluc2Vy
dF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgaW5zZXJ0
X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3Ip
CiAgICA6IGNvbnRhaW5lcigmX194KSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYK
ICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1
ZSkgewogICAgY29udGFpbmVyLT5pbnNlcnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBj
bGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KY2xhc3MgaW5zZXJ0X2l0
ZXJhdG9yPGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFLZXksIF9BbGxvYz4g
PiB7CnByb3RlY3RlZDoKICB0eXBlZGVmIGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZu
LCBfRXFLZXksIF9BbGxvYz4gX0NvbnRhaW5lcjsKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAg
dHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0Nv
bnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQg
cmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5l
cigmX194KSB7fQogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9D
b250YWluZXI6Oml0ZXJhdG9yKQogICAgOiBjb250YWluZXIoJl9feCkge30KICBpbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6
OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+aW5zZXJ0KF9fdmFsdWUpOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh
dG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKfQojIDkgIlNjYXR0ZXJG
aWVsZC5oaCIgMgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9zZXQiIDEg
MwojIDMxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvc2V0IiAzCiMgMSAiL2hv
bWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NldC5oIiAxIDMKIyAzMSAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NldC5oIiAzCgoKIyAx
ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAxIDMK
IyA1NiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIg
MwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAxIDMKIyA1NyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3RyZWUuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsbG9jLmgiIDEgMwojIDU4ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDU5ICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgNjAgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7Cgp0eXBlZGVmIGJvb2wgX1JiX3RyZWVfQ29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVfQ29s
b3JfdHlwZSBfU19yYl90cmVlX3JlZCA9IGZhbHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBl
IF9TX3JiX3RyZWVfYmxhY2sgPSB0cnVlOwoKc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7CiAg
dHlwZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CgogIF9Db2xvcl90eXBlIF9NX2NvbG9yOwogIF9CYXNl
X3B0ciBfTV9wYXJlbnQ7CiAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgX0Jhc2VfcHRyIF9NX3JpZ2h0
OwoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3
aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVybiBf
X3g7CiAgfQoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKICB7
CiAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OwogICAg
cmV0dXJuIF9feDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgpzdHJ1Y3QgX1JiX3Ry
ZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3RyZWVf
bm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwogIF9WYWx1ZSBfTV92YWx1ZV9maWVsZDsKfTsKCgpz
dHJ1Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jh
c2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5
cGU7CiAgX0Jhc2VfcHRyIF9NX25vZGU7CgogIHZvaWQgX01faW5jcmVtZW50KCkKICB7CiAgICBp
ZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkgewogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01f
cmlnaHQ7CiAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX01fbm9k
ZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9f
eSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9y
aWdodCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJl
bnQ7CiAgICAgIH0KICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAgICBf
TV9ub2RlID0gX195OwogICAgfQogIH0KCiAgdm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAgIGlm
IChfTV9ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCAmJgogICAgICAgIF9NX25vZGUt
Pl9NX3BhcmVudC0+X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9ub2Rl
LT5fTV9yaWdodDsKICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAgICBf
QmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01fcmln
aHQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0gX195
OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJl
bnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkgewogICAgICAgIF9NX25v
ZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgX01f
bm9kZSA9IF9feTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBf
UmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1JiX3Ry
ZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVm
IF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JiX3Ry
ZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPgogICAgaXRlcmF0b3I7CiAgdHlw
ZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1
ZSo+CiAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1
ZSwgX1JlZiwgX1B0cj4KICAgIF9TZWxmOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+
KiBfTGlua190eXBlOwoKICBfUmJfdHJlZV9pdGVyYXRvcigpIHt9CiAgX1JiX3RyZWVfaXRlcmF0
b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9kZSA9IF9feDsgfQogIF9SYl90cmVlX2l0ZXJhdG9y
KGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9NX25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgcmVm
ZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9N
X3ZhbHVlX2ZpZWxkOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihv
cGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7IF9NX2luY3JlbWVudCgpOyBy
ZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAg
PSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1Nl
bGYmIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2Vs
ZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2RlY3Jl
bWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUs
IGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX1Ji
X3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkg
ewogIHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUq
PiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0
ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0
IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRy
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9W
YWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01f
bm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1
ZSo+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8
X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9
IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs
dWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9N
X25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVlX3JvdGF0ZV9sZWZ0
KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsK
ICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgX194LT5fTV9yaWdo
dCA9IF9feS0+X01fbGVmdDsKICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgIF9feS0+X01fbGVm
dC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7Cgog
IGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBf
X3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195
OwogIGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9NX2xl
ZnQgPSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVl
X3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNl
KiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAg
X194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQog
ICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194
LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVs
c2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3BhcmVu
dC0+X01fcmlnaHQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBf
X3k7CiAgX195LT5fTV9yaWdodCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5s
aW5lIHZvaWQKX1JiX3RyZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJf
dHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfX3gtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9y
ZWQ7CiAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID09
IF9TX3JiX3RyZWVfcmVkKSB7CiAgICBpZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5fTV9wYXJl
bnQtPl9NX3BhcmVudC0+X01fbGVmdCkgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9
IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICBpZiAoX195ICYmIF9f
eS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+
X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19y
Yl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9y
ID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu
dDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50
LT5fTV9yaWdodCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICBf
UmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+
X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9w
YXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAg
ICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194
LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgaWYgKF9feSAmJiBfX3ktPl9N
X2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2Nv
bG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9T
X3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01f
bGVmdCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICBfUmJfdHJl
ZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gtPl9NX3Bh
cmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50
LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3RyZWVf
cm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgfQog
ICAgfQogIH0KICBfX3Jvb3QtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKfQoKaW5saW5l
IF9SYl90cmVlX25vZGVfYmFzZSoKX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfUmJfdHJl
ZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9u
b2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVf
bm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJf
dHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195
ID0gX196OwogIF9SYl90cmVlX25vZGVfYmFzZSogX194ID0gMDsKICBfUmJfdHJlZV9ub2RlX2Jh
c2UqIF9feF9wYXJlbnQgPSAwOwogIGlmIChfX3ktPl9NX2xlZnQgPT0gMCkKICAgIF9feCA9IF9f
eS0+X01fcmlnaHQ7CiAgZWxzZQogICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgX194
ID0gX195LT5fTV9sZWZ0OwogICAgZWxzZSB7CiAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAg
ICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7
CiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsKICAg
IF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0gX195OwogICAgX195LT5fTV9sZWZ0ID0gX196LT5f
TV9sZWZ0OwogICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQg
PSBfX3ktPl9NX3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9N
X3BhcmVudDsKICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIF9feS0+
X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICBfX3otPl9NX3JpZ2h0LT5fTV9wYXJlbnQg
PSBfX3k7CiAgICB9CiAgICBlbHNlCiAgICAgIF9feF9wYXJlbnQgPSBfX3k7CiAgICBpZiAoX19y
b290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196LT5fTV9wYXJl
bnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsK
ICAgIGVsc2UKICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgX195LT5f
TV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9yLCBf
X3otPl9NX2NvbG9yKTsKICAgIF9feSA9IF9fejsKCiAgfQogIGVsc2UgewogICAgX194X3BhcmVu
dCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9N
X3BhcmVudDsKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAgICBl
bHNlCiAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196
LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3Bh
cmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAgIGlm
IChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50
OwoKICAgICAgZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9T
X21pbmltdW0oX194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgIGlmIChfX3ot
Pl9NX2xlZnQgPT0gMCkKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAg
ICAgZWxzZQogICAgICAgIF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhp
bXVtKF9feCk7CiAgfQogIGlmIChfX3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7CiAg
ICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBf
U19yYl90cmVlX2JsYWNrKSkKICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KSB7
CiAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsK
ICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAg
X193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5f
TV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQo
X194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0
OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAg
ICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAg
ICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9N
X2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0g
X1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194
X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgaWYgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQt
Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+X01f
bGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAg
ICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVf
cm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+
X01fcmlnaHQ7CiAgICAgICAgICB9CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVu
dC0+X01fY29sb3I7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
YmxhY2s7CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29s
b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194
X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNl
IHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7
CiAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+
X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdo
dChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVm
dDsKICAgICAgICB9CiAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAg
ICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAg
ICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5f
TV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9
IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgIF9f
eF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+
X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9y
aWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAg
ICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVl
X3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+
X01fbGVmdDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50
LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9i
bGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3Ig
PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9w
YXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIGlm
IChfX3gpIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4gX195
Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIGJvb2wgX1NfaW5z
dGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9NX2hlYWRlcigw
KSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxf
VHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9NX25vZGVfYWxsb2NhdG9y
OwogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICBfUmJfdHJlZV9ub2RlPF9UcD4q
IF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEp
OyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX01f
bm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9j
LCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfUmJf
dHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkge30K
CnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0FsbG9j
X3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dl
dF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZvaWQg
X01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBlOjpk
ZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNlPF9U
cCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1JiX3RyZWVfYWxsb2Nf
YmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBf
UmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSkg
eyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgfl9SYl90cmVlX2Jhc2UoKSB7IF9NX3B1
dF9ub2RlKF9NX2hlYWRlcik7IH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W
YWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3Mg
X0FsbG9jID0gYWxsb2NhdG9yPF9WYWx1ZT4gPgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBf
UmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9W
YWx1ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9i
YXNlKiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3RyZWVf
bm9kZTsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1YmxpYzoK
ICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBj
b25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYg
Y29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9k
ZSogX0xpbmtfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgogIHVz
aW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgdXNp
bmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCnByb3RlY3RlZDoKCiAgX0xpbmtfdHlwZSBfTV9jcmVhdGVf
bm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9N
X2dldF9ub2RlKCk7CiAgICB0cnkgewogICAgICBjb25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9m
aWVsZCwgX194KTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3RtcCk7IHRo
cm93OyB9OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX0xpbmtfdHlwZSBfTV9jbG9uZV9ub2Rl
KF9MaW5rX3R5cGUgX194KQogIHsKICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9jcmVhdGVfbm9k
ZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9fdG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29s
b3I7CiAgICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICBfX3RtcC0+X01fcmlnaHQgPSAwOwogICAg
cmV0dXJuIF9fdG1wOwogIH0KCiAgdm9pZCBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAg
ewogICAgZGVzdHJveSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICBfTV9wdXRfbm9kZShfX3Ap
OwogIH0KCnByb3RlY3RlZDoKICBzaXplX3R5cGUgX01fbm9kZV9jb3VudDsKICBfQ29tcGFyZSBf
TV9rZXlfY29tcGFyZTsKCiAgX0xpbmtfdHlwZSYgX01fcm9vdCgpIGNvbnN0CiAgICB7IHJldHVy
biAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcGFyZW50OyB9CiAgX0xpbmtfdHlwZSYgX01f
bGVmdG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9N
X2xlZnQ7IH0KICBfTGlua190eXBlJiBfTV9yaWdodG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4g
KF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogIHN0YXRpYyBfTGlua190eXBl
JiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gt
Pl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194
KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBf
TGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtf
dHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUoX0xp
bmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGlj
IGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9LZXlPZlZh
bHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9M
aW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX194LT5fTV9jb2xvcik7
IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0
dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBf
U19yaWdodChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N
X3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkK
ICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJl
ZmVyZW5jZSBfU192YWx1ZShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKChfTGlua190eXBl
KV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfQmFz
ZV9wdHIgX194KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190eXBl
KF9feCkpKTt9CiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfQmFzZV9wdHIgX194KQog
ICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0K
CiAgc3RhdGljIF9MaW5rX3R5cGUgX1NfbWluaW11bShfTGlua190eXBlIF9feCkKICAgIHsgcmV0
dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoK
ICBzdGF0aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1
cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9Cgpw
dWJsaWM6CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2Us
IHBvaW50ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlw
ZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICAgICAgY29uc3RfaXRlcmF0
b3I7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVy
c2VfaXRlcmF0b3I7Cgpwcml2YXRlOgogIGl0ZXJhdG9yIF9NX2luc2VydChfQmFzZV9wdHIgX194
LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOwogIF9MaW5rX3R5cGUgX01f
Y29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwogIHZvaWQgX01fZXJhc2UoX0xp
bmtfdHlwZSBfX3gpOwoKcHVibGljOgoKICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRv
cl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2Vt
cHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wKQog
ICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2Nv
bXBhcmUoX19jb21wKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUo
Y29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDog
X0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQogICAg
eyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KQogICAgOiBfQmFzZShf
X3guZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBh
cmUoX194Ll9NX2tleV9jb21wYXJlKQogIHsKICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAg
ICAgIF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAgIGVsc2UgewogICAgICBfU19jb2xvcihfTV9o
ZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9N
X3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01f
cm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAg
ICB9CiAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgfQogIH5fUmJfdHJl
ZSgpIHsgY2xlYXIoKTsgfQogIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCk7Cgpwcml2YXRlOgogIHZvaWQgX01fZW1wdHlf
aW5pdGlhbGl6ZSgpIHsKICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsK
CiAgICBfTV9yb290KCkgPSAwOwogICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgIF9N
X3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogIH0KCnB1YmxpYzoKCiAgX0NvbXBhcmUga2V5X2Nv
bXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQogIGl0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2hl
YWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2hlYWRlcjsg
fQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl
bmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgIHJl
dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICB9CiAgcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKGJlZ2luKCkpOwogIH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9k
ZV9jb3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9ub2Rl
X2NvdW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBl
KC0xKTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX190KSB7CiAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVh
ZGVyKTsKICAgIHN0ZDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAg
ICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgfQoKcHVi
bGljOgoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlw
ZSYgX194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYgX194KTsK
CiAgaXRlcmF0b3IgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1
ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCk7CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
aW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCk7CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CiAgc2l6ZV90eXBlIGVyYXNl
KGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRl
cmF0b3IgX19sYXN0KTsKICB2b2lkIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25z
dCBrZXlfdHlwZSogX19sYXN0KTsKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9NX25vZGVfY291
bnQgIT0gMCkgewogICAgICBfTV9lcmFzZShfTV9yb290KCkpOwogICAgICBfTV9sZWZ0bW9zdCgp
ID0gX01faGVhZGVyOwogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9yaWdodG1vc3QoKSA9
IF9NX2hlYWRlcjsKICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICB9CiAgfQoKcHVibGljOgoK
ICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGZp
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtl
eV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IGNvbnN0OwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNv
bnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIHBh
aXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwog
IHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBr
ZXlfdHlwZSYgX194KSBjb25zdDsKCnB1YmxpYzoKCiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNvbnN0
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs
dWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApv
cGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBf
X3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5i
ZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAg
ICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBj
b25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9S
Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0
dXJuICEoX194IDwgX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIHZvaWQKc3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6b3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsK
CiAgICBjbGVhcigpOwogICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICBfTV9rZXlfY29tcGFyZSA9
IF9feC5fTV9rZXlfY29tcGFyZTsKICAgIGlmIChfX3guX01fcm9vdCgpID09IDApIHsKICAgICAg
X01fcm9vdCgpID0gMDsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01f
cmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX01fcm9vdCgp
ID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgp
ID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGlt
dW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50Owog
ICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195
XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBf
X3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgX0xpbmtfdHlwZSBf
X3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgIF9NX2tleV9j
b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9j
cmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgIGlmIChfX3kgPT0g
X01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgX01fcmlnaHRtb3N0KCkg
PSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgX01f
bGVmdG1vc3QoKSA9IF9fejsKICB9CiAgZWxzZSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShf
X3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsKICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0
KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogIH0KICBfU19wYXJlbnQoX196KSA9IF9f
eTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9TX3JpZ2h0KF9feikgPSAwOwogIF9SYl90cmVlX3Jl
YmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFyZW50KTsKICArK19NX25vZGVfY291bnQ7CiAg
cmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtf
dHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hp
bGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShf
S2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194
KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5hbWUg
X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0
b3IsCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5
cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wg
X19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9f
Y29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwog
ICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRl
cmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBi
ZWdpbigpKQogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBf
X3ksIF9fdiksIHRydWUpOwogICAgZWxzZQogICAgICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBh
cmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBw
YWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0
dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19qLCBmYWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZW
YWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksIF9WYWwsIF9L
ZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09
IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgIF9NX2tl
eV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikp
KQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5f
TV9ub2RlLCBfX3YpOwoKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5m
aXJzdDsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsKICAg
IGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgp
KF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwog
ICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSB7
CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAg
aWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUo
KShfX3YpKQogICAgICAgICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf
a2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5f
TV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9k
ZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5f
TV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJldHVy
biBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25z
dCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01f
bGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAhX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVy
biBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7
CgogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlmIChf
X3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJl
KF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJldHVy
biBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVy
biBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBf
X3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9m
VmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgJiYgIV9NX2tl
eV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikp
KSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJl
dHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgZWxzZQogICAg
ICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25v
ZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBf
Q21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxhdGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBf
SUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
aW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W
YWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFz
cyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNl
cnRfdW5pcXVlKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3Ig
X19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195ID0KICAgIChfTGlua190eXBlKSBfUmJfdHJl
ZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9s
ZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVh
ZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9ub2RlKF9feSk7CiAgLS1fTV9ub2RlX2NvdW50Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQpfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjplcmFzZShjb25z
dCBfS2V5JiBfX3gpCnsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5n
ZShfX3gpOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNl
Y29uZCwgX19uKTsKICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogIHJldHVybiBfX247
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29W
LCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQpfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixf
Q29tcGFyZSxfQWxsb2M+CiAgOjpfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9f
cCkKewoKICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5f
TV9wYXJlbnQgPSBfX3A7CgogIHRyeSB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgX190
b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3AgPSBf
X3RvcDsKICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsKICAg
ICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01fbGVm
dCA9IF9feTsKICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9NX3Jp
Z2h0KQogICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9feSk7
CiAgICAgIF9fcCA9IF9feTsKICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0KICBj
YXRjaCguLi4pIHsgX01fZXJhc2UoX190b3ApOyB0aHJvdzsgfTsKCiAgcmV0dXJuIF9fdG9wOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01fZXJhc2UoX0xpbmtf
dHlwZSBfX3gpCnsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfTV9lcmFzZShfU19yaWdodChf
X3gpKTsKICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgZGVzdHJveV9ub2Rl
KF9feCk7CiAgICBfX3ggPSBfX3k7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQp7CiAg
aWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICBjbGVhcigpOwog
IGVsc2UKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsrKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGNvbnN0IF9LZXkq
IF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgZXJhc2UoKl9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9IF9N
X2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAw
KQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0g
X194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9f
eCk7CgogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgcmV0dXJuIChfX2ogPT0gZW5k
KCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgIGVu
ZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVu
YW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNv
bnN0X2l0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBf
TV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0g
MCkgewogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195
ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAg
cmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9N
X25vZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0IF9LZXkmIF9faykgY29uc3QKewogIHBh
aXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX2sp
OwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCwg
X19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVl
LCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4KICA6Omxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUg
X195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICB3aGlsZSAo
X194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAg
ICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1Nf
cmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tl
eSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlw
ZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkKICAgIGlmICghX01fa2V5X2Nv
bXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChf
X3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gY29uc3Rf
aXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xh
c3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0
eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9
IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChfX3gg
IT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICBf
X3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBfU19y
aWdodChfX3gpOwoKICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6dXBwZXJfYm91bmQoY29uc3QgX0tl
eSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlw
ZSBfX3ggPSBfTV9yb290KCk7CgogICB3aGlsZSAoX194ICE9IDApCiAgICAgaWYgKF9NX2tleV9j
b21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0
KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgIHJldHVybiBj
b25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVl
LCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShj
b25zdCBfS2V5JiBfX2spCnsKICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2Vy
X2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJl
LCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBf
VmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8
X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29u
c3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3Rf
aXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9faykpOwp9CgppbmxpbmUgaW50Cl9fYmxhY2tf
Y291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19y
b290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0dXJuIDA7CiAgaW50IF9fc3VtID0gMDsK
ICBkbyB7CiAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKQogICAg
ICArK19fc3VtOwogICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgIGJyZWFrOwogICAgX19u
b2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgfSB3aGlsZSAoMSk7CiAgcmV0dXJuIF9fc3VtOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25z
dAp7CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgcmV0
dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9NX2hl
YWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9o
ZWFkZXI7CgogIGludCBfX2xlbiA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01fcm9v
dCgpKTsKICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVuZCgp
OyArK19faXQpIHsKICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9faXQuX01fbm9k
ZTsKICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgX0xpbmtfdHlwZSBfX1Ig
PSBfU19yaWdodChfX3gpOwoKICAgIGlmIChfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVk
KQogICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB8fAog
ICAgICAgICAgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSkKICAgICAg
ICByZXR1cm4gZmFsc2U7CgogICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194
KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX19SICYmIF9NX2tl
eV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCiAgICAgIHJldHVybiBmYWxzZTsK
CiAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tfY291bnQoX194LCBfTV9yb290KCkpICE9
IF9fbGVuKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoX01fbGVmdG1vc3QoKSAhPSBf
UmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxz
ZTsKICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVt
KF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7CgogIHJldHVybiB0cnVlOwp9CgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3Mg
X0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+CnN0
cnVjdCByYl90cmVlIDogcHVibGljIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUs
IF9Db21wYXJlLCBfQWxsb2M+CnsKICB0eXBlZGVmIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tl
eU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh
c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICByYl90cmVlKGNvbnN0IF9Db21w
YXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAogICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7fQoKICB+
cmJfdHJlZSgpIHt9Cn07Cgp9CiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zZXQuaCIgMiAzCgojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9zZXQuaCIgMSAzCiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9zZXQuaCIgMwojIDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzUgIi9ob21lMi9tYXJjby9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zZXQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAg
ICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfS2V5PiA+CmNsYXNzIHNldDsKCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPChjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFz
cyBzZXQKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5
IGtleV90eXBlOwogIHR5cGVkZWYgX0tleSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUg
a2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21wYXJlOwpwcml2YXRlOgog
IHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAg
IF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwog
IF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv
bnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3Rf
cG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25z
dF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25z
dF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxv
Y2F0b3JfdHlwZTsKCgoKICBzZXQoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUo
KSkge30KICBleHBsaWNpdCBzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAg
ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9N
X3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBz
ZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBf
TV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1
ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICBzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBjb25z
dCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs
b2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF91bmlx
dWUoX19maXJzdCwgX19sYXN0KTsgfQoKICBzZXQoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0Fs
bG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CiAgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9j
PiYgb3BlcmF0b3I9KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsK
ICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBh
cmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9j
b21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxs
b2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2lu
KCk7IH0KICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAg
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBi
b29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNp
emUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIHZvaWQgc3dhcChzZXQ8X0tleSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKCiAgcGFpcjxp
dGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBwYWlyPHR5
cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IsIGJvb2w+IF9fcCA9IF9NX3QuaW5zZXJ0X3VuaXF1
ZShfX3gpOwogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGJvb2w+KF9fcC5maXJzdCwgX19wLnNl
Y29uZCk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2
YWx1ZV90eXBlJiBfX3gpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRv
ciBfUmVwX2l0ZXJhdG9yOwogICAgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZSgoX1JlcF9pdGVy
YXRvciYpX19wb3NpdGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQog
IHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0
ZXJhdG9yJilfX3Bvc2l0aW9uKTsKICB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBl
JiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVyYXNlKF9feCk7CiAgfQogIHZvaWQgZXJhc2UoaXRl
cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRl
cmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOwogIH0KICB2b2lkIGNsZWFy
KCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZmluZChfX3gpID09IF9NX3QuZW5kKCkgPyAw
IDogMTsKICB9CgoKCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVy
biBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9i
b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChf
X3gpOwogIH0KICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRv
ciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC51cHBl
cl9ib3VuZChfX3gpOwogIH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0K
ICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194
KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0
ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KIyAxOTAgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zZXQuaCIgMwogIHRlbXBsYXRl
IDxjbGFzcyBfSzEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9y
PT0gKGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mLCBjb25zdCBzZXQ8X0sxLF9DMSxfQTE+Jik7CiAg
dGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I8IChjb25zdCBzZXQ8X0sxLF9DMSxfQTE+JiwgY29uc3Qgc2V0PF9LMSxfQzEsX0Ex
PiYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qgc2V0PF9L
ZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHNldDxf
S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
ZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg
X195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAoc2V0PF9LZXksX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIHNldDxfS2V5LF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyAzNiAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NldC5oIiAyIDMKIyAxICIvaG9tZTIvbWFyY28v
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbXVsdGlzZXQuaCIgMSAzCiMgMzQgIi9ob21l
Mi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9tdWx0aXNldC5oIiAzCiMgMSAi
L2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAx
IDMKIyAzNSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211bHRp
c2V0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0
b3I8X0tleT4gPgpjbGFzcyBtdWx0aXNldDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRp
c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cjwoY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3Mg
bXVsdGlzZXQKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCgoKICB0eXBlZGVm
IF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfS2V5IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29t
cGFyZSBrZXlfY29tcGFyZTsKICB0eXBlZGVmIF9Db21wYXJlIHZhbHVlX2NvbXBhcmU7CnByaXZh
dGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAg
ICAgICAgX0lkZW50aXR5PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5
cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6Y29uc3RfcG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj
b25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OmNvbnN0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXpl
X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBl
IGFsbG9jYXRvcl90eXBlOwoKCgogIG11bHRpc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9j
YXRvcl90eXBlKCkpIHt9CiAgZXhwbGljaXQgbXVsdGlzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29t
cCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2Nh
dG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgp
KQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29t
cCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBf
X2xhc3QpOyB9CgogIG11bHRpc2V0KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9j
PiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CgogIG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0Fs
bG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5
X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2
YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7
IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5n
ZXRfYWxsb2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90
LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9
CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigp
OyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7
IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90
eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIHZvaWQgc3dhcChtdWx0
aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9
CgoKICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4g
X01fdC5pbnNlcnRfZXF1YWwoX194KTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICByZXR1cm4gX01fdC5pbnNlcnRf
ZXF1YWwoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24sIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0
LCBfX2xhc3QpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01f
dC5lcmFzZSgoX1JlcF9pdGVyYXRvciYpX19wb3NpdGlvbik7CiAgfQogIHNpemVfdHlwZSBlcmFz
ZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOwogIH0K
ICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90
LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX2ZpcnN0LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsK
ICB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgc2l6ZV90eXBlIGNvdW50
KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQoK
CgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5k
KF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0
IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qg
a2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAg
Y29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194
KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiAgcGFpcjxpdGVy
YXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0
dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25z
dF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgMTkxICIvaG9tZTIvbWFyY28vbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbXVsdGlzZXQuaCIgMwogIHRlbXBsYXRlIDxjbGFz
cyBfSzEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNv
bnN0IG11bHRpc2V0PF9LMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXVsdGlzZXQ8X0sxLF9DMSxfQTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3Mg
X0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aXNldDxf
SzEsX0MxLF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0sx
LF9DMSxfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfS2V5LF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3ku
X01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4o
Y29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG11bHRpc2V0PF9LZXks
X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRp
c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCht
dWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICBtdWx0
aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0K
IyAzNyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NldC5oIiAy
IDMKIyAzMiAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NldCIgMiAzCiMgMTAg
IlNjYXR0ZXJGaWVsZC5oaCIgMgoKIyAxICJteWFzc2VydC5oaCIgMQojIDEyICJTY2F0dGVyRmll
bGQuaGgiIDIKIyAxICIvaG9tZS9tYXJjby9IbWZlL0hlbE1vL0luY2x1ZGUvTGFuZ3VhZ2UvTXlU
eXBlcy5oaCIgMQojIDEzICJTY2F0dGVyRmllbGQuaGgiIDIKCgojIDEgIlN1cHBvcnQvU3RsT3Zl
cmxvYWQuaGgiIDEKCgoKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvZnVu
Y3Rpb25hbCIgMSAzCiMgNSAiU3VwcG9ydC9TdGxPdmVybG9hZC5oaCIgMgojIDEgIi9ob21lMi9t
YXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9leHQvaGFzaF9tYXAiIDEKIyA2ICJTdXBwb3J0L1N0
bE92ZXJsb2FkLmhoIiAyCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL3Zl
Y3RvciIgMSAzCiMgNyAiU3VwcG9ydC9TdGxPdmVybG9hZC5oaCIgMgojIDEgIi9ob21lMi9tYXJj
by9sb2NhbC9pbmNsdWRlL2crKy12My9saXN0IiAxIDMKIyA4ICJTdXBwb3J0L1N0bE92ZXJsb2Fk
LmhoIiAyCgoKdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IGl0ZXJfbGVzcwogICAgICAgIDogcHVi
bGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPFQsVCxib29sPgp7CiAgICAgICAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IFQmIHgsIGNvbnN0IFQmIHkpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVy
biAoJigqeCkpPCgmKCp4KSk7CiAgICAgICAgfTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVj
dCBpdGVyX2hhc2ggewpzaXplX3Qgb3BlcmF0b3IoKShUIHgpIGNvbnN0IHsKICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KCYoKngpKTsKfQp9OwoKbmFtZXNwYWNlIHN0ZHsK
CnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBzdGQ6Omhhc2g8VCo+IHsKc2l6ZV90IG9wZXJhdG9y
KCkoVCogY29uc3QgeCkgY29uc3QgewogICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHNp
emVfdD4oeCk7Cn0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBzdGQ6Omhhc2g8VCogY29u
c3Q+IHsKc2l6ZV90IG9wZXJhdG9yKCkoVCogY29uc3QgeCkgY29uc3QgewogICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHNpemVfdD4oeCk7Cn0KfTsKCmlubGluZSBzaXplX3QgX19zdGxf
aGFzaF9zdHJpbmcoY29uc3Qgc3RyaW5nJiBfX3MpCnsKICAgICAgICBjb25zdCBzaXplX3QgX19z
aXplID0gX19zLmxlbmd0aCgpOwogICAgICAgIHNpemVfdCBfX2ggPSAwOwogICAgICAgIGZvciAo
c2l6ZV90IF9faT0wOyBfX2k8X19zaXplOyBfX2krKykKICAgICAgICAgICAgICAgIF9faCA9IDUq
X19oICsgX19zW19faV07CiAgICAgICAgcmV0dXJuIF9faDsKfTsKCnRlbXBsYXRlPD4Kc3RydWN0
IGhhc2g8c3RyaW5nPiB7CiAgICAgICAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nICYg
cykgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIF9fc3RsX2hhc2hfc3RyaW5nKHMpOwog
ICAgICAgIH0KfTsKCnRlbXBsYXRlPD4Kc3RydWN0IGhhc2g8Y29uc3Qgc3RyaW5nPiB7CiAgICAg
ICAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nICYgcykgY29uc3QgewogICAgICAgICAg
ICAgICAgcmV0dXJuIF9fc3RsX2hhc2hfc3RyaW5nKHMpOwogICAgICAgIH0KfTsKCnRlbXBsYXRl
PGNsYXNzIFQ+Cm9zdHJlYW0gJiBvcGVyYXRvciA8PCAob3N0cmVhbSAmcywgY29uc3Qgc3RkOjp2
ZWN0b3I8VD4mYSkgewogICAgICAgIHN0ZDo6dmVjdG9yPFQ+OjppdGVyYXRvciBpLGU7CiAgICAg
ICAgaSA9IGEuYmVnaW4oKTsKICAgICAgICBlID0gYS5lbmQoKTsKICAgICAgICBkbyB7CiAgICAg
ICAgICAgICAgICBzIDw8ICIgIiA8PCAqaTsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICB9
IHdoaWxlKGkgIT0gZSk7CiAgICAgICAgcmV0dXJuIHM7Cn07CgoKfQoKCgoKCgp0ZW1wbGF0ZTxj
bGFzcyBUMSwgY2xhc3MgVDI+IHN0cnVjdCBwdHJfY2FzdF9oZWxwZXIgewogICAgICAgIHN0YXRp
YyBUMSBjYXN0KFQyJik7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+IHN0cnVjdCBw
dHJfY2FzdF9oZWxwZXI8VDEqLCBUMj4gewogICAgICAgIHN0YXRpYyBUMSogY2FzdChUMiZhcmcp
IHsKICAgICAgICAgICAgICAgIFQxKiBvdXQgPSBkeW5hbWljX2Nhc3Q8VDEqPihhcmcpOwogICAg
ICAgICAgICAgICAgaWYgKG91dCA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OmNlcnIgPDwgInB0cl9jYXN0IGVycm9yIiA8PCBzdGQ6OmVuZGw7CgogICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBzdGQ6OmJhZF9jYXN0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH07Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xh
c3MgVDI+IHN0cnVjdCBwdHJfY2FzdF9oZWxwZXI8VDEqY29uc3QsIFQyPiB7CiAgICAgICAgc3Rh
dGljIFQxKmNvbnN0IGNhc3QoVDImYXJnKSB7CiAgICAgICAgICAgICAgICBUMSpjb25zdCBvdXQg
PSBkeW5hbWljX2Nhc3Q8VDEqY29uc3Q+KGFyZyk7CiAgICAgICAgICAgICAgICBpZiAob3V0ID09
IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAicHRyX2Nhc3QgZXJy
b3IiIDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0ZDo6YmFk
X2Nhc3QoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7CiAg
ICAgICAgfTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4gc3RydWN0IHB0cl9jYXN0
X2hlbHBlcjxjb25zdCBUMSosIFQyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IFQxKiBjYXN0KFQy
JmFyZykgewogICAgICAgICAgICAgICAgY29uc3QgVDEqIG91dCA9IGR5bmFtaWNfY2FzdDxjb25z
dCBUMSo+KGFyZyk7CiAgICAgICAgICAgICAgICBpZiAob3V0ID09IDApIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAicHRyX2Nhc3QgZXJyb3IiIDw8IHN0ZDo6ZW5kbDsK
CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0ZDo6YmFkX2Nhc3QoKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfTsKfTsKCnRlbXBs
YXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4gc3RydWN0IHB0cl9jYXN0X2hlbHBlcjxjb25zdCBUMSpj
b25zdCwgVDI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgVDEqY29uc3QgY2FzdChUMiZhcmcpIHsK
ICAgICAgICAgICAgICAgIGNvbnN0IFQxKmNvbnN0IG91dCA9IGR5bmFtaWNfY2FzdDxjb25zdCBU
MSpjb25zdD4oYXJnKTsKICAgICAgICAgICAgICAgIGlmIChvdXQgPT0gMCkgewoKICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICJwdHJfY2FzdCBlcnJvciIgPDwgc3RkOjplbmRs
OwoKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RkOjpiYWRfY2FzdCgpOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICB9Owp9OwoKdGVt
cGxhdGU8Y2xhc3MgVDEsY2xhc3MgVDI+ClQxIHB0cl9jYXN0KFQyJiBhcmcpIHsKICAgICAgICBy
ZXR1cm4gcHRyX2Nhc3RfaGVscGVyPFQxLFQyPjo6Y2FzdChhcmcpOwp9OwojIDE2ICJTY2F0dGVy
RmllbGQuaGgiIDIKCmNsYXNzIEJhc2VTY2F0dGVyRmllbGQKewpwcml2YXRlOgogICAgICAgIHN0
ZDo6c2V0PEJhc2VTY2F0dGVyRmllbGQgKj4gZGVwX2ZpZWxkczsKICAgICAgICBib29sIHVwX3Rv
X2RhdGU7CnB1YmxpYzoKICAgICAgICBCYXNlU2NhdHRlckZpZWxkKCkge3VwX3RvX2RhdGU9dHJ1
ZTt9OwogICAgICAgIHZpcnR1YWwgfkJhc2VTY2F0dGVyRmllbGQoKSB7fTsKICAgICAgICB2b2lk
IEJpbmQgKEJhc2VTY2F0dGVyRmllbGQgKmNvbnN0IGRlcCkgewogICAgICAgICAgICAgICAgZGVw
X2ZpZWxkcy5pbnNlcnQoZGVwKTsKICAgICAgICB9OwogICAgICAgIHZvaWQgVW5CaW5kIChCYXNl
U2NhdHRlckZpZWxkICpjb25zdCBkZXApIHsKICAgICAgICAgICAgICAgIGRlcF9maWVsZHMuZXJh
c2UoZGVwKTsKICAgICAgICB9OwogICAgICAgIGNvbnN0IGJvb2wgSXNVcERhdGVkKHZvaWQpIGNv
bnN0IHtyZXR1cm4gdXBfdG9fZGF0ZTt9OwogICAgICAgIGNvbnN0IGJvb2wgSW52YWxpZGF0ZSh2
b2lkKSB7cmV0dXJuIHVwX3RvX2RhdGU9ZmFsc2U7fTsKICAgICAgICBjb25zdCBib29sIFZhbGlk
YXRlKHZvaWQpIHtyZXR1cm4gdXBfdG9fZGF0ZT10cnVlO307Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VF9pbmRleD4KY2xhc3MgSW5kZXhlZFNldAp7CnB1YmxpYzoKICAgICAgICBJbmRleGVkU2V0KCkg
e307CiAgICAgICAgdmlydHVhbCB+SW5kZXhlZFNldCgpIHt9OwogICAgICAgIHZpcnR1YWwgY29u
c3Qgc3RkOjpwYWlyPGJvb2wsVF9pbmRleD4gTmV4dEluZGV4KGNvbnN0IFRfaW5kZXgmIGkpID0g
MDsKICAgICAgICB2aXJ0dWFsIGNvbnN0IHN0ZDo6cGFpcjxib29sLFRfaW5kZXg+IEZpcnN0SW5k
ZXgoKSA9IDA7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVF9pbmRleD4KY2xhc3MgSW5kZXhTZXQKICAg
ICAgICA6IHB1YmxpYyBzdGQ6OnNldDxUX2luZGV4PiwKICAgICAgICAgIHB1YmxpYyBJbmRleGVk
U2V0PFRfaW5kZXg+CnsKcHJpdmF0ZToKICAgICAgICB0eXBlZGVmIHN0ZDo6c2V0PFRfaW5kZXg+
IGNvbnRfdDsKcHVibGljOgogICAgICAgIEluZGV4U2V0KCkgOiBzdGQ6OnNldDxUX2luZGV4Pigp
LCBJbmRleGVkU2V0PFRfaW5kZXg+KCkge307CiAgICAgICAgdmlydHVhbCB+SW5kZXhTZXQoKSB7
fTsKICAgICAgICB2aXJ0dWFsIGNvbnN0IHN0ZDo6cGFpcjxib29sLFRfaW5kZXg+IE5leHRJbmRl
eChjb25zdCBUX2luZGV4JiBpKSB7CiAgICAgICAgICAgICAgICBjb250X3Q6Oml0ZXJhdG9yIGl0
OwogICAgICAgICAgICAgICAgaXQ9ZmluZChpKTsKICAgICAgICAgICAgICAgIGRvIHsgaWYgKCEo
KGl0ICE9IGVuZCgpKSkpIHsgX0Fzc2VydCgiU2NhdHRlckZpZWxkLmhoIiwgNTksICgiTm9uZXhp
c3RlbnQgaW5kZXggaW4gU2NhdHRlckZpZWxkPFRfZGF0YSxUX2luZGV4PiIpKTsgdGhyb3cgTXlB
c3NlcnQ6OkVyckdlbmVyaWMoKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgICAgICAgICAgICBpZiAo
KGl0KyspICE9IGVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpwYWly
PGJvb2wsVF9pbmRleD4odHJ1ZSxpKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjxib29sLFRfaW5kZXg+KGZhbHNlLChUX2luZGV4
KSgwKSk7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIGNvbnN0IHN0ZDo6cGFpcjxib29sLFRf
aW5kZXg+IEZpcnN0SW5kZXggKCkgewogICAgICAgICAgICAgICAgaWYgKGJlZ2luKCkgIT0gZW5k
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8Ym9vbCxUX2luZGV4
Pih0cnVlLCooYmVnaW4oKSkpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpwYWlyPGJvb2wsVF9pbmRleD4oZmFsc2UsKFRfaW5kZXgpKDAp
KTsKICAgICAgICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBUX2RhdGE+IGNsYXNzIEluZGVwQ29u
bmVjdGlvbk1hcDsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVF9kYXRhPgpjbGFzcyBTY2F0dGVyRmllbGQK
ICAgICAgICA6IHB1YmxpYyBCYXNlU2NhdHRlckZpZWxkLAoKICAgICAgICAgIHB1YmxpYyBzdGQ6
Omxpc3Q8VF9kYXRhPgp7CnByaXZhdGU6CiAgICAgICAgdHlwZWRlZiBzdGQ6Omxpc3Q8VF9kYXRh
PiBjb250X3Q7CiAgICAgICAgc3RkOjpzZXQ8SW5kZXBDb25uZWN0aW9uTWFwPFRfZGF0YT4gKj4g
ZGVwX2Nvbm5lY3Rpb25zOwpwdWJsaWM6CiAgICAgICAgU2NhdHRlckZpZWxkKCkgOiBCYXNlU2Nh
dHRlckZpZWxkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8VF9kYXRhPigp
IHt9OwogICAgICAgIHZpcnR1YWwgflNjYXR0ZXJGaWVsZCgpIHt9OwogICAgICAgIGNvbnN0IFRf
ZGF0YSogY29uc3QgR2V0SW5kZXgoY29udF90Ojpjb25zdF9pdGVyYXRvciYgaXQpIGNvbnN0IHsK
ICAgICAgICAgICAgICAgIHJldHVybiAmKCppdCk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBU
X2RhdGEqIGNvbnN0IEdldEluZGV4KGNvbnRfdDo6Y29uc3RfcmVmZXJlbmNlIGl0KSBjb25zdCB7
CiAgICAgICAgICAgICAgICByZXR1cm4gJml0OwogICAgICAgIH07CiAgICAgICAgdm9pZCBCaW5k
Q29ubmVjdGlvbiAoSW5kZXBDb25uZWN0aW9uTWFwPFRfZGF0YT4gKmNvbnN0IGRlcCkgewogICAg
ICAgICAgICAgICAgZGVwX2Nvbm5lY3Rpb25zLmluc2VydChkZXApOwogICAgICAgIH07CiAgICAg
ICAgdm9pZCBVbkJpbmRDb25uZWN0aW9uIChJbmRlcENvbm5lY3Rpb25NYXA8VF9kYXRhPiAqY29u
c3QgZGVwKSB7CiAgICAgICAgICAgICAgICBkZXBfY29ubmVjdGlvbnMuZXJhc2UoZGVwKTsKICAg
ICAgICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBUX2RhdGEsCiAgICAgICAgICAgICAgICBjbGFz
cyBUX2luZGVwZGF0YSwKICAgICAgICAgICAgICAgIGNsYXNzIEluZGVwQ29udGFpbmVyID0gU2Nh
dHRlckZpZWxkPFRfaW5kZXBkYXRhPiwKICAgICAgICAgICAgICAgIGNsYXNzIEhhc2hGbmMgPSBp
dGVyX2hhc2g8dHlwZW5hbWUgSW5kZXBDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yID4gPgpjbGFz
cyBEZXBTY2F0dGVyRmllbGQKICAgICAgICA6IHB1YmxpYyBCYXNlU2NhdHRlckZpZWxkLAogICAg
ICAgICAgcHVibGljIHN0ZDo6aGFzaF9tYXA8dHlwZW5hbWUgSW5kZXBDb250YWluZXI6OmNvbnN0
X2l0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfZGF0YSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoRm5jID4Kewpwcml2YXRlOgogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgSW5kZXBDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIFRfaW5kZXg7CiAg
ICAgICAgdHlwZWRlZiBzdGQ6Omhhc2hfbWFwPFRfaW5kZXgsIFRfZGF0YSwgSGFzaEZuYz4gYmFz
ZV90eXBlOwogICAgICAgIEluZGVwQ29udGFpbmVyICogaW5kZXBfZGF0YTsKcHVibGljOgoKICAg
ICAgICBEZXBTY2F0dGVyRmllbGQoQmFzZVNjYXR0ZXJGaWVsZCAqY29uc3QgaW5kZXApCiAgICAg
ICAgOiBiYXNlX3R5cGUoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluZGVwX2RhdGEgPSBw
dHJfY2FzdDxJbmRlcENvbnRhaW5lciAqY29uc3Q+KGluZGVwKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXBfZGF0YS0+QmluZCh0aGlzKTsKICAgICAgICB9OwogICAgICAgIHZpcnR1YWwg
fkRlcFNjYXR0ZXJGaWVsZCgpIHsKICAgICAgICAgICAgICAgIGluZGVwX2RhdGEtPlVuQmluZCh0
aGlzKTsKICAgICAgICB9OwogICAgICAgIFRfZGF0YSYgb3BlcmF0b3JbXShjb25zdCBUX2luZGV4
JiBpKSB7CgogICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VfdHlwZTo6b3BlcmF0b3JbXShpKTsK
ICAgICAgICB9OwogICAgICAgIFRfZGF0YSYgb3BlcmF0b3IoKSAoY29uc3QgVF9pbmRleCYgaSkg
ewoKICAgICAgICAgICAgICAgIGRvIHsgaWYgKCEoKGZpbmQoaSkgIT0gKGVuZCgpKSkpKSB7IF9B
c3NlcnQoIlNjYXR0ZXJGaWVsZC5oaCIsIDEzNiwgKCJOb25leGlzdGVudCBpbmRleCBpbiBEZXBT
Y2F0dGVyRmllbGQ8VF9kYXRhLFRfaW5kZXBkYXRhPiIpKTsgdGhyb3cgTXlBc3NlcnQ6OkVyckdl
bmVyaWMoKTsgfSB9IHdoaWxlICgwKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZmluZChpKS0+
c2Vjb25kOwogICAgICAgIH07CiAgICAgICAgY29uc3QgVF9kYXRhJiBvcGVyYXRvcigpIChjb25z
dCBUX2luZGV4JiBpKSBjb25zdCB7CgogICAgICAgICAgICAgICAgZG8geyBpZiAoISgoZmluZChp
KSAhPSAoZW5kKCkpKSkpIHsgX0Fzc2VydCgiU2NhdHRlckZpZWxkLmhoIiwgMTQyLCAoIk5vbmV4
aXN0ZW50IGluZGV4IGluIERlcFNjYXR0ZXJGaWVsZDxUX2RhdGEsVF9pbmRlcGRhdGE+IikpOyB0
aHJvdyBNeUFzc2VydDo6RXJyR2VuZXJpYygpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICAgICAg
ICAgIHJldHVybiBmaW5kKGkpLT5zZWNvbmQ7CiAgICAgICAgfTsKICAgICAgICBJbmRlcENvbnRh
aW5lciAmIEdldEluZGVwKCkgY29uc3QgewoKICAgICAgICAgICAgICAgIHJldHVybiAqaW5kZXBf
ZGF0YTsKICAgICAgICB9Owp9OwojIDUgIkNvbm5lY3Rpb24uaGgiIDIKIyAxICJEb0YuaGgiIDEK
IyA2ICJDb25uZWN0aW9uLmhoIiAyCgoKCnRlbXBsYXRlIDxjbGFzcyBUX2RhdGE+IGNsYXNzIElu
ZGVwQ29ubmVjdGlvbk1hcAogICAgICAgIDogcHVibGljIFNjYXR0ZXJGaWVsZDwKICAgICAgICAg
ICAgICAgIFdpdGhJZFdyYXBwZXI8CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjYXR0ZXJGaWVsZDxUX2RhdGE+Ojpp
dGVyYXRvciA+CiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgID4Kewpw
cml2YXRlOgogICAgICAgIFNjYXR0ZXJGaWVsZDxUX2RhdGE+ICogc2NhdHRlcl9jb250YWluZXI7
CiAgICAgICAgTXlVbnMgbm5vZGVzOwoKCgpwdWJsaWM6CiAgICAgICAgSW5kZXBDb25uZWN0aW9u
TWFwKEJhc2VTY2F0dGVyRmllbGQgKmNvbnN0IGEsIE15VW5zIGIpIHsKICAgICAgICAgICAgICAg
IHNjYXR0ZXJfY29udGFpbmVyID0KICAgICAgICAgICAgICAgICAgICAgICAgcHRyX2Nhc3Q8U2Nh
dHRlckZpZWxkPFRfZGF0YT4gKj4oYSk7CiAgICAgICAgICAgICAgICBzY2F0dGVyX2NvbnRhaW5l
ci0+QmluZENvbm5lY3Rpb24odGhpcyk7CiAgICAgICAgICAgICAgICBubm9kZXMgPSBiOwogICAg
ICAgIH07CiAgICAgICAgdmlydHVhbCB+SW5kZXBDb25uZWN0aW9uTWFwKCkge307CiAgICAgICAg
QmFzZVNjYXR0ZXJGaWVsZCAmIEdldEluZGVwKCkge3JldHVybiAqc2NhdHRlcl9jb250YWluZXI7
fTsKICAgICAgICBjb25zdCBNeVVucyBOdW1iZXJPZk5vZGVzKCkgY29uc3Qge3JldHVybiBubm9k
ZXM7fTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIFRfZGF0YSxjbGFzcyBUX2luZGVwZGF0YT4gY2xh
c3MgRGVwQ29ubmVjdGlvbkZpZWxkCiAgICAgICAgOiBwdWJsaWMgRGVwU2NhdHRlckZpZWxkPFRf
ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXBDb25uZWN0aW9uTWFwPFRfaW5kZXBk
YXRhPjo6dmFsdWVfdHlwZSA+CnsKcHJpdmF0ZToKCgogICAgICAgIHR5cGVkZWYgRGVwU2NhdHRl
ckZpZWxkPFRfZGF0YSwgSW5kZXBDb25uZWN0aW9uTWFwPFRfaW5kZXBkYXRhPjo6dmFsdWVfdHlw
ZSA+IGJhc2VfdHlwZTsKICAgICAgICB0eXBlZGVmIEluZGVwQ29ubmVjdGlvbk1hcDxUX2luZGVw
ZGF0YT4gaW5kZXBfY29ubjsKcHVibGljOgogICAgICAgIERlcENvbm5lY3Rpb25GaWVsZChCYXNl
U2NhdHRlckZpZWxkICpjb25zdCBpbmRfY29ubikgOgogICAgICAgICAgICAgICAgYmFzZV90eXBl
KGluZF9jb25uKSB7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIH5EZXBDb25uZWN0aW9uRmll
bGQoKSB7CgogICAgICAgIH07Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFRfZGF0YSxjbGFzcyBU
X2luZGVwZGF0YT4gY2xhc3MgRGVwQ29ubmVjdGlvbk1hcAoKCiAgICAgICAgOiBwdWJsaWMgRGVw
Q29ubmVjdGlvbkZpZWxkPHN0ZDo6dmVjdG9yPFRfZGF0YSo+LCBUX2luZGVwZGF0YSA+CnsKcHJp
dmF0ZToKCgogICAgICAgIHR5cGVkZWYgRGVwU2NhdHRlckZpZWxkPFRfZGF0YSwgVF9pbmRlcGRh
dGE+IGRlcF9zY2F0dGVyX2NvbnQ7CiAgICAgICAgdHlwZWRlZiBJbmRlcENvbm5lY3Rpb25NYXA8
VF9pbmRlcGRhdGE+IGluZGVwX2Nvbm47CiAgICAgICAgZGVwX3NjYXR0ZXJfY29udCAqIHNjYXR0
ZXJfY29udGFpbmVyOwogICAgICAgIGluZGVwX2Nvbm4gKiBpbmRlcF9jb25uZWN0aW9uOwpwdWJs
aWM6CiAgICAgICAgRGVwQ29ubmVjdGlvbk1hcChCYXNlU2NhdHRlckZpZWxkICpjb25zdCBkZXBf
c2NhdHRlciwgQmFzZVNjYXR0ZXJGaWVsZCAqY29uc3QgaW5kX2Nvbm4pIDoKICAgICAgICAgICAg
ICAgIERlcENvbm5lY3Rpb25GaWVsZDwKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfZGF0YSoKICAgICAgICAgICAg
ICAgICAgICAgICAgPiwKICAgICAgICAgICAgICAgICAgICAgICAgVF9pbmRlcGRhdGE+KGluZF9j
b25uKSB7CiAgICAgICAgICAgICAgICBpbmRlcF9jb25uZWN0aW9uID0gcHRyX2Nhc3Q8aW5kZXBf
Y29ubipjb25zdD4oaW5kX2Nvbm4pOwogICAgICAgICAgICAgICAgc2NhdHRlcl9jb250YWluZXIg
PSBwdHJfY2FzdDxkZXBfc2NhdHRlcl9jb250ICpjb25zdD4oZGVwX3NjYXR0ZXIpOwogICAgICAg
ICAgICAgICAgaWYgKCYoc2NhdHRlcl9jb250YWluZXItPkdldEluZGVwKCkpIT0mKGluZGVwX2Nv
bm5lY3Rpb24tPkdldEluZGVwKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlcnIgPDwg
IkZhdGFsX2Vycm9yLCB5b3UgYXJlIGJ1aWxkaW5nIGEgRGVwQ29ubmVjdGlvbk1hcCBmcm9tIGEg
RGVwU2NhdHRlckZpZWxkIHRoYXQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8
ICJoYXMgYSBkaWZmZXJlbnQgU2NhdHRlckZpZWxkIHRoYW4gdGhlIEluZGVwQ29ubmVjdGlvbk1h
cCdzIG9uZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAg
ICB9OwogICAgICAgICAgICAgICAgQnVpbGRfQ29ubmVjdGlvbigpOwogICAgICAgIH07CiAgICAg
ICAgdm9pZCBCdWlsZF9Db25uZWN0aW9uKHZvaWQpIHsKICAgICAgICAgICAgICAgIGluZGVwX2Nv
bm46Oml0ZXJhdG9yIGkgPSBpbmRlcF9jb25uZWN0aW9uLT5iZWdpbigpOwogICAgICAgICAgICAg
ICAgaW5kZXBfY29ubjo6aXRlcmF0b3IgZW5kID0gaW5kZXBfY29ubmVjdGlvbi0+ZW5kKCk7CiAg
ICAgICAgICAgICAgICB3aGlsZSAoaSAhPSBlbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIG4gPSAoKmkpLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBp
ZiAoIShuID09IE51bWJlck9mTm9kZXMoKSkpIHsgX0Fzc2VydCgiQ29ubmVjdGlvbi5oaCIsIDkz
LCAoIlJ1biB0aW1lIGVycm9yLCBJbmRlcENvbm5lY3Rpb25NYXAgTnVtYmVyT2ZOb2RlcyBhbmQg
dmVjdG9yIGRpbWVuc2lvbiBkbyBub3QgYWdyZWUiKSk7IHRocm93IE15QXNzZXJ0OjpFcnJHZW5l
cmljKCk7IH0gfSB3aGlsZSAoMCk7CgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGUg
JmQgPSBvcGVyYXRvcltdKGkpOwogICAgICAgICAgICAgICAgICAgICAgICBkLnJlc2VydmUobik7
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90eXBlIGlpPTA7IGlpPG47IGlpKysp
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbaWldID0gJihzY2F0dGVyX2NvbnRh
aW5lci0+ZmluZCgoKmkpW2lpXSktPnNlY29uZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGkr
KzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgfkRlcENvbm5l
Y3Rpb25NYXAoKSB7CgogICAgICAgIH07CiAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZOb2Rl
cygpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiBpbmRlcF9jb25uZWN0aW9uLT5OdW1i
ZXJPZk5vZGVzKCk7CiAgICAgICAgfTsKfTsKIyAxNjEgIkNvbm5lY3Rpb25UcmFpdHMuaGgiIDIK
IyAyMDEgIkNvbm5lY3Rpb25UcmFpdHMuaGgiCnRlbXBsYXRlPGNsYXNzIGNvbm5lY3Rpb24+CmNs
YXNzIEZpZWxkSW50ZXJwb2xhdG9yIHsKcHVibGljOgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBG
SUVMRCwgY2xhc3MgVD4KICAgICAgICB2b2lkIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAg
ICAgICAgIE15RmxvYXQgKmNvbnN0IFdlaWdodEosCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFycmF5MjxNeUZsb2F0PiYgV2VpZ2h0SkRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8VD4mIGZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUZW5zb3IyJiBCYXNlSSwKICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQmIHBvcywKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZOb2RlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZDb29yZAogICAgICAgICAgICAgICAg
ICAgICAgICApOwp9OwoKdGVtcGxhdGU8Y2xhc3MgY29ubmVjdGlvbj4KY2xhc3MgRmllbGRHcmFk
aWVudEludGVycG9sYXRvciB7CnB1YmxpYzoKCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRklFTERH
UkFELGNsYXNzIFQ+CiAgICAgICAgdm9pZCBvcGVyYXRvcigpKAogICAgICAgICAgICAgICAgICAg
ICAgICBNeUZsb2F0ICpjb25zdCBXZWlnaHRKLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBcnJheTI8TXlGbG9hdD4mIFdlaWdodEpEZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFQ+JiBmaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VGVuc29yMiYgQmFzZUksCiAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxER1JBRCYgRiwKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZOb2RlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZDb29yZCk7Cn07CgoKY2xhc3MgRmll
bGRJbnRlcnBvbGF0b3I8bGluZWFyPiB7CnB1YmxpYzoKCiAgICAgICAgdGVtcGxhdGU8Y2xhc3Mg
RklFTEQsIGNsYXNzIFQ+CiAgICAgICAgdm9pZCBvcGVyYXRvcigpKAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBNeUZsb2F0ICpjb25zdCBXZWlnaHRKLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBBcnJheTI8TXlGbG9hdD4mIFdlaWdodEpEZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiBmaWVsZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVuc29yMiYgQmFzZUksCiAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEJiBw
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE15VW5zIE51bWJlck9mTm9kZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE15VW5zIE51bWJlck9mQ29vcmQKICAgICAgICAg
ICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBwb3MgPSBGSUVMRCgpOwogICAgICAg
ICAgICAgICAgZm9yIChNeVVucyBub2RlPTA7IG5vZGUgPCBOdW1iZXJPZk5vZGVzOyBub2RlKysp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9ICgqKGZpZWxkW25vZGVdKSkqV2VpZ2h0
Sltub2RlXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owp9OwpjbGFzcyBGaWVsZEdyYWRp
ZW50SW50ZXJwb2xhdG9yPGxpbmVhcj4gewpwdWJsaWM6CgogICAgICAgIHRlbXBsYXRlPGNsYXNz
IEZJRUxER1JBRCwgY2xhc3MgVD4KICAgICAgICB2b2lkIG9wZXJhdG9yKCkoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IE15RmxvYXQgKmNvbnN0IFdlaWdodEosCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEFycmF5MjxNeUZsb2F0PiYgV2VpZ2h0SkRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIGZpZWxkLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUZW5zb3IyJiBCYXNlSSwKICAgICAgICAgICAgICAgICAgICAgICAgRklF
TERHUkFEJiBGLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNeVVucyBOdW1iZXJPZk5v
ZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNeVVucyBOdW1iZXJPZkNvb3JkKSB7
CgogICAgICAgICAgICAgICAgZG8geyBpZiAoIShXZWlnaHRKRGVyLlNpemUwKCkgPT0gTnVtYmVy
T2ZOb2RlcykpIHsgX0Fzc2VydCgiQ29ubmVjdGlvblRyYWl0cy5oaCIsIDI2NSwgKCJFcnJvciBp
biBXZWlnaHRKRGVyIGZpcnN0IGRpbWVuc2lvbiIpKTsgdGhyb3cgTXlBc3NlcnQ6OkVyckdlbmVy
aWMoKTsgfSB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIGRvIHsgaWYgKCEoV2VpZ2h0SkRl
ci5TaXplMSgpID09IE51bWJlck9mQ29vcmQpKSB7IF9Bc3NlcnQoIkNvbm5lY3Rpb25UcmFpdHMu
aGgiLCAyNjYsICgiRXJyb3IgaW4gV2VpZ2h0SkRlciBzZWNvbmQgZGltZW5zaW9uIikpOyB0aHJv
dyBNeUFzc2VydDo6RXJyR2VuZXJpYygpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICAgICAgICAg
IEYgPSBkb2ZfdHJhaXRzPEZJRUxER1JBRD46OlpFUk8oKTsKICAgICAgICAgICAgICAgIGZvciAo
TXlVbnMgbmM9MDsgbmM8TnVtYmVyT2ZDb29yZDsgbmMrKykgewogICAgICAgICAgICAgICAgZm9y
IChNeVVucyBub2RlPTA7IG5vZGU8TnVtYmVyT2ZOb2Rlczsgbm9kZSsrKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIEZbbmNdICs9ICgqKGZpZWxkW25vZGVdKSkqV2VpZ2h0SkRlcihub2RlLG5j
KTsKICAgICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICBGID0gRi5Eb3QoQmFzZUkpOwog
ICAgICAgIH07Cn07CiMgMTMgIkludGVycFdGdW5jdC5oaCIgMgoKCmNsYXNzIEludGVycFdGIHsK
cHVibGljOgogICAgICAgIHZpcnR1YWwgfkludGVycFdGKCl7fTsKICAgICAgICB2aXJ0dWFsIGNv
bnN0IE15VW5zIE51bWJlck9mTm9kZXMgKHZvaWQpIGNvbnN0ID0gMDsKICAgICAgICB2aXJ0dWFs
IGNvbnN0IE15VW5zIE51bWJlck9mQ29vcmRpbmF0ZXMgKHZvaWQpIGNvbnN0ID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgV2VpZ2h0cygKICAgICAgICAgICAgICAgIGNvbnN0IE15RmxvYXQgKmNv
bnN0IFBsYWNlLAogICAgICAgICAgICAgICAgTXlGbG9hdCAqY29uc3QgV2VpZ2h0SikgY29uc3Qg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBXZWlnaHREZXIoCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE15RmxvYXQgKmNvbnN0IFBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICBB
cnJheTI8TXlGbG9hdD4gJiBXZWlnaHRKRGVyKSBjb25zdCA9IDA7Cn07CgoKdGVtcGxhdGU8TXlV
bnMgTnVtYmVyT2ZDb29yZD4KY2xhc3MgTGluZWFySW50ZXJwV0YgOiBwdWJsaWMgSW50ZXJwV0Yg
ewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBjb25zdCBNeUZsb2F0IFBsYWNlSlsxNl1bNF07CnB1
YmxpYzoKICAgICAgICBMaW5lYXJJbnRlcnBXRiAoKTsKICAgICAgICB2aXJ0dWFsIH5MaW5lYXJJ
bnRlcnBXRiAodm9pZCk7CiAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZOb2RlcyAodm9pZCkg
Y29uc3Q7CiAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZDb29yZGluYXRlcyAodm9pZCkgY29u
c3Q7CiAgICAgICAgdmlydHVhbCB2b2lkIFdlaWdodHMgKAogICAgICAgICAgICAgICAgY29uc3Qg
TXlGbG9hdCAqY29uc3QgUGxhY2UsCiAgICAgICAgICAgICAgICBNeUZsb2F0ICpjb25zdCBXZWln
aHRKKSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHZvaWQgV2VpZ2h0RGVyICgKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTXlGbG9hdCAqY29uc3QgUGxhY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgIEFycmF5MjxNeUZsb2F0PiAmIFdlaWdodEpEZXIpIGNvbnN0Owp9OwojIDYgIkRlcElu
dGVncmF0ZWRDb25uZWN0aW9uLmhoIiAyCiMgMSAiSW50ZWdyYXRvci5oaCIgMQoKCgojIDEgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDUgIkludGVncmF0b3IuaGgiIDIKIyAxICIvaG9tZTIv
bWFyY28vbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0uaCIgMSAzCiMgNiAiSW50ZWdyYXRv
ci5oaCIgMgoKIyAxICIvaG9tZS9tYXJjby9IbWZlL0hlbE1vL0luY2x1ZGUvTGFuZ3VhZ2UvTXlU
eXBlcy5oaCIgMQojIDggIkludGVncmF0b3IuaGgiIDIKCgpjbGFzcyBJbnRlZ3JhdG9yIHsKcHJv
dGVjdGVkOgogICAgICAgIE15VW5zIE5JTlQ7CiAgICAgICAgTXlVbnMgTkM7CiAgICAgICAgTXlG
bG9hdCAqKiBwbGFjZXM7CiAgICAgICAgTXlGbG9hdCAqIHdlaWdodHM7CnB1YmxpYzoKICAgICAg
ICB2aXJ0dWFsIH5JbnRlZ3JhdG9yKCk7CiAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZJbnRl
Z1BvaW50cyAodm9pZCkgY29uc3Q7CiAgICAgICAgY29uc3QgTXlVbnMgTnVtYmVyT2ZDb29yZGlu
YXRlcyAodm9pZCkgY29uc3Q7CiAgICAgICAgY29uc3QgTXlGbG9hdCAqY29uc3QgUGxhY2VzIChj
b25zdCBpbnQgaSkgY29uc3Q7CiAgICAgICAgY29uc3QgTXlGbG9hdCBXZWlnaHRzIChjb25zdCBp
bnQgaSkgY29uc3Q7Cn07CgoKY2xhc3MgR2F1c3NJbnRlZ3JhdG9yIDogcHVibGljIEludGVncmF0
b3Igewpwcml2YXRlOgoKCgoKCgpwdWJsaWM6CiAgICAgICAgR2F1c3NJbnRlZ3JhdG9yICgKICAg
ICAgICAgICAgICAgIGNvbnN0IE15VW5zIG5jb29yZCwKICAgICAgICAgICAgICAgIGNvbnN0IE15
VW5zIG9yZGVyLAogICAgICAgICAgICAgICAgY29uc3QgTXlGbG9hdCAqY29uc3QgR2F1c3N4LAog
ICAgICAgICAgICAgICAgY29uc3QgTXlGbG9hdCAqY29uc3QgR2F1c3N3KTsKICAgICAgICB2aXJ0
dWFsIH5HYXVzc0ludGVncmF0b3IgKHZvaWQpOwoKCgoKCgp9OwoKCmNsYXNzIEdhdXNzMUludGVn
cmF0b3IgOiBwdWJsaWMgR2F1c3NJbnRlZ3JhdG9yIHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMg
Y29uc3QgTXlGbG9hdCBHYXVzc3hbMV07CiAgICAgICAgc3RhdGljIGNvbnN0IE15RmxvYXQgR2F1
c3N3WzFdOwogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBPcmRlcjsKcHVibGljOgogICAgICAg
IEdhdXNzMUludGVncmF0b3IgKGNvbnN0IE15VW5zIG5jb29yZCk7Cn07CgoKY2xhc3MgR2F1c3My
SW50ZWdyYXRvciA6IHB1YmxpYyBHYXVzc0ludGVncmF0b3Igewpwcml2YXRlOgogICAgICAgIHN0
YXRpYyBjb25zdCBNeUZsb2F0IEdhdXNzeFsyXTsKICAgICAgICBzdGF0aWMgY29uc3QgTXlGbG9h
dCBHYXVzc3dbMl07CiAgICAgICAgc3RhdGljIGNvbnN0IE15VW5zIE9yZGVyOwpwdWJsaWM6CiAg
ICAgICAgR2F1c3MySW50ZWdyYXRvciAoY29uc3QgTXlVbnMgbmNvb3JkKTsKfTsKCgpjbGFzcyBH
YXVzczNJbnRlZ3JhdG9yIDogcHVibGljIEdhdXNzSW50ZWdyYXRvciB7CnByaXZhdGU6CiAgICAg
ICAgc3RhdGljIGNvbnN0IE15RmxvYXQgR2F1c3N4WzNdOwogICAgICAgIHN0YXRpYyBjb25zdCBN
eUZsb2F0IEdhdXNzd1szXTsKICAgICAgICBzdGF0aWMgY29uc3QgTXlVbnMgT3JkZXI7CnB1Ymxp
YzoKICAgICAgICBHYXVzczNJbnRlZ3JhdG9yIChjb25zdCBNeVVucyBuY29vcmQpOwp9OwoKCmNs
YXNzIEdhdXNzNEludGVncmF0b3IgOiBwdWJsaWMgR2F1c3NJbnRlZ3JhdG9yIHsKcHJpdmF0ZToK
ICAgICAgICBzdGF0aWMgY29uc3QgTXlGbG9hdCBHYXVzc3hbNF07CiAgICAgICAgc3RhdGljIGNv
bnN0IE15RmxvYXQgR2F1c3N3WzRdOwogICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBPcmRlcjsK
cHVibGljOgogICAgICAgIEdhdXNzNEludGVncmF0b3IgKGNvbnN0IE15VW5zIG5jb29yZCk7Cn07
CgoKY2xhc3MgR2F1c3M1SW50ZWdyYXRvciA6IHB1YmxpYyBHYXVzc0ludGVncmF0b3Igewpwcml2
YXRlOgogICAgICAgIHN0YXRpYyBjb25zdCBNeUZsb2F0IEdhdXNzeFs1XTsKICAgICAgICBzdGF0
aWMgY29uc3QgTXlGbG9hdCBHYXVzc3dbNV07CiAgICAgICAgc3RhdGljIGNvbnN0IE15VW5zIE9y
ZGVyOwpwdWJsaWM6CiAgICAgICAgR2F1c3M1SW50ZWdyYXRvciAoY29uc3QgTXlVbnMgbmNvb3Jk
KTsKfTsKCgpjbGFzcyBHYXVzczZJbnRlZ3JhdG9yIDogcHVibGljIEdhdXNzSW50ZWdyYXRvciB7
CnByaXZhdGU6CiAgICAgICAgc3RhdGljIGNvbnN0IE15RmxvYXQgR2F1c3N4WzZdOwogICAgICAg
IHN0YXRpYyBjb25zdCBNeUZsb2F0IEdhdXNzd1s2XTsKICAgICAgICBzdGF0aWMgY29uc3QgTXlV
bnMgT3JkZXI7CnB1YmxpYzoKICAgICAgICBHYXVzczZJbnRlZ3JhdG9yIChjb25zdCBNeVVucyBu
Y29vcmQpOwp9OwoKCmNsYXNzIEdhdXNzN0ludGVncmF0b3IgOiBwdWJsaWMgR2F1c3NJbnRlZ3Jh
dG9yIHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgY29uc3QgTXlGbG9hdCBHYXVzc3hbN107CiAg
ICAgICAgc3RhdGljIGNvbnN0IE15RmxvYXQgR2F1c3N3WzddOwogICAgICAgIHN0YXRpYyBjb25z
dCBNeVVucyBPcmRlcjsKcHVibGljOgogICAgICAgIEdhdXNzN0ludGVncmF0b3IgKGNvbnN0IE15
VW5zIG5jb29yZCk7Cn07CgoKY2xhc3MgR2F1c3M4SW50ZWdyYXRvciA6IHB1YmxpYyBHYXVzc0lu
dGVncmF0b3Igewpwcml2YXRlOgogICAgICAgIHN0YXRpYyBjb25zdCBNeUZsb2F0IEdhdXNzeFs4
XTsKICAgICAgICBzdGF0aWMgY29uc3QgTXlGbG9hdCBHYXVzc3dbOF07CiAgICAgICAgc3RhdGlj
IGNvbnN0IE15VW5zIE9yZGVyOwpwdWJsaWM6CiAgICAgICAgR2F1c3M4SW50ZWdyYXRvciAoY29u
c3QgTXlVbnMgbmNvb3JkKTsKfTsKCgpjbGFzcyBHYXVzczlJbnRlZ3JhdG9yIDogcHVibGljIEdh
dXNzSW50ZWdyYXRvciB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIGNvbnN0IE15RmxvYXQgR2F1
c3N4WzldOwogICAgICAgIHN0YXRpYyBjb25zdCBNeUZsb2F0IEdhdXNzd1s5XTsKICAgICAgICBz
dGF0aWMgY29uc3QgTXlVbnMgT3JkZXI7CnB1YmxpYzoKICAgICAgICBHYXVzczlJbnRlZ3JhdG9y
IChjb25zdCBNeVVucyBuY29vcmQpOwp9OwoKCmNsYXNzIEdhdXNzMTBJbnRlZ3JhdG9yIDogcHVi
bGljIEdhdXNzSW50ZWdyYXRvciB7CnByaXZhdGU6CiAgICAgICAgc3RhdGljIGNvbnN0IE15Rmxv
YXQgR2F1c3N4WzEwXTsKICAgICAgICBzdGF0aWMgY29uc3QgTXlGbG9hdCBHYXVzc3dbMTBdOwog
ICAgICAgIHN0YXRpYyBjb25zdCBNeVVucyBPcmRlcjsKcHVibGljOgogICAgICAgIEdhdXNzMTBJ
bnRlZ3JhdG9yIChjb25zdCBNeVVucyBuY29vcmQpOwp9OwoKY2xhc3MgVHJhcGV6b2lkYWxJbnRl
Z3JhdG9yIDogcHVibGljIEdhdXNzSW50ZWdyYXRvciB7CnByaXZhdGU6CiAgICAgICAgc3RhdGlj
IGNvbnN0IE15RmxvYXQgR2F1c3N4WzJdOwogICAgICAgIHN0YXRpYyBjb25zdCBNeUZsb2F0IEdh
dXNzd1syXTsKICAgICAgICBzdGF0aWMgY29uc3QgTXlVbnMgT3JkZXI7CnB1YmxpYzoKICAgICAg
ICBUcmFwZXpvaWRhbEludGVncmF0b3IgKGNvbnN0IE15VW5zIG5jb29yZCk7Cn07CgpjbGFzcyBT
aW1wc29uSW50ZWdyYXRvciA6IHB1YmxpYyBHYXVzc0ludGVncmF0b3Igewpwcml2YXRlOgogICAg
ICAgIHN0YXRpYyBjb25zdCBNeUZsb2F0IEdhdXNzeFszXTsKICAgICAgICBzdGF0aWMgY29uc3Qg
TXlGbG9hdCBHYXVzc3dbM107CiAgICAgICAgc3RhdGljIGNvbnN0IE15VW5zIE9yZGVyOwpwdWJs
aWM6CiAgICAgICAgU2ltcHNvbkludGVncmF0b3IgKGNvbnN0IE15VW5zIG5jb29yZCk7Cn07CgoK
Y2xhc3MgTWlkRmFjZTNESW50ZWdyYXRvciA6IHB1YmxpYyBJbnRlZ3JhdG9yIHsKcHJpdmF0ZToK
ICAgICAgICBzdGF0aWMgY29uc3QgTXlGbG9hdCBjOwogICAgICAgIHN0YXRpYyBNeUZsb2F0IHBs
YWNlc1s2XVszXTsKICAgICAgICBzdGF0aWMgTXlGbG9hdCB3ZWlnaHRzWzZdOwpwdWJsaWM6CiAg
ICAgICAgTWlkRmFjZTNESW50ZWdyYXRvcigpOwogICAgICAgIHZpcnR1YWwgfk1pZEZhY2UzRElu
dGVncmF0b3IoKTsKCgoKCgoKfTsKIyA3ICJEZXBJbnRlZ3JhdGVkQ29ubmVjdGlvbi5oaCIgMgoj
IDEgIkludGVncmF0ZWRDb25uZWN0aW9uLmhoIiAxCgoKCgojIDEgIkNvbm5lY3Rpb24uaGgiIDEK
IyA2ICJJbnRlZ3JhdGVkQ29ubmVjdGlvbi5oaCIgMgojIDEgIkNvbm5lY3Rpb25UcmFpdHMuaGgi
IDEKIyA3ICJJbnRlZ3JhdGVkQ29ubmVjdGlvbi5oaCIgMgoKIyAxICJJbnRlZ3JhdG9yLmhoIiAx
CiMgOSAiSW50ZWdyYXRlZENvbm5lY3Rpb24uaGgiIDIKIyAxICJJbnRlcnBXRnVuY3QuaGgiIDEK
IyAxMCAiSW50ZWdyYXRlZENvbm5lY3Rpb24uaGgiIDIKCgp0ZW1wbGF0ZTxjbGFzcyBUX2RhdGE+
CnN0cnVjdCBJbmRlcEludGVnUHREYXRhIHsKICAgICAgICB0eXBlZGVmIFRfZGF0YSBQb3NfdHlw
ZTsKICAgICAgICBQb3NfdHlwZSBQb3M7CiAgICAgICAgTXlGbG9hdCBWb2w7CgogICAgICAgIFRl
bnNvcjIgQmFzZTsKICAgICAgICBUZW5zb3IyIEJhc2VJbnY7CiAgICAgICAgVGVuc29yMiBGOwp9
OwoKCgoKCgoKdGVtcGxhdGU8CiAgICAgICAgY2xhc3MgVF9pbmRlcGRhdGEsCiAgICAgICAgY2xh
c3MgVF9kYXRhID0gSW5kZXBJbnRlZ1B0RGF0YTx0eXBlbmFtZSBUX2luZGVwZGF0YTo6ZGF0YV90
eXBlPgo+CmNsYXNzIEJhc2VJbmRlcEludGVnUHRGaWVsZCA6IHB1YmxpYyBEZXBDb25uZWN0aW9u
RmllbGQ8c3RkOjp2ZWN0b3I8VF9kYXRhPiwgVF9pbmRlcGRhdGE+IHsKcHJpdmF0ZToKICAgICAg
ICB0eXBlZGVmIERlcENvbm5lY3Rpb25GaWVsZDxzdGQ6OnZlY3RvcjxUX2RhdGE+LCBUX2luZGVw
ZGF0YT4gYmFzZV90eXBlOwogICAgICAgIHR5cGVkZWYgSW5kZXBDb25uZWN0aW9uTWFwPFRfaW5k
ZXBkYXRhPiBpbmRfY29ubl90eXBlOwoKcHJvdGVjdGVkOgoKICAgICAgICBJbnRlcnBXRiogV0Y7
CgogICAgICAgIEludGVncmF0b3IqIElOVDsKCgoKICAgICAgICBNeVVucyBOdW1iZXJPZk5vZGU7
CgogICAgICAgIE15VW5zIE51bWJlck9mQ29vcmQ7CgogICAgICAgIE15VW5zIE51bWJlck9mSW50
ZWdQb2ludHM7CgoKICAgICAgICBNeUZsb2F0ICoqSW50ZWdQb2ludFdlaWdodDsKCiAgICAgICAg
QXJyYXkyPE15RmxvYXQ+ICogSW50ZWdQb2ludFdlaWdodERlcjsKCnB1YmxpYzoKICAgICAgICBC
YXNlSW5kZXBJbnRlZ1B0RmllbGQoSW50ZXJwV0YgKmNvbnN0IHcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50ZWdyYXRvciAqY29uc3QgaSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNlU2NhdHRlckZpZWxkICpjb25zdCBpYykgOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2VfdHlwZShpYykgewogICAgICAgICAgICAgICAgZG8geyBpZiAo
ISh3LT5OdW1iZXJPZkNvb3JkaW5hdGVzKCkgPT0gaS0+TnVtYmVyT2ZDb29yZGluYXRlcygpKSkg
eyBfQXNzZXJ0KCJJbnRlZ3JhdGVkQ29ubmVjdGlvbi5oaCIsIDYyLCAoIkludGVncmF0b3IgYW5k
IGludGVycG9sYXRvciBudW1iZXIgb2YgY29vcmQgZG8gbm90IGFncmVlIikpOyB0aHJvdyBNeUFz
c2VydDo6RXJyR2VuZXJpYygpOyB9IH0gd2hpbGUgKDApOwoKICAgICAgICAgICAgICAgIFdGID0g
dzsKICAgICAgICAgICAgICAgIElOVCA9IGk7CiAgICAgICAgICAgICAgICBOdW1iZXJPZk5vZGUg
PSBXRi0+TnVtYmVyT2ZOb2RlcygpOwogICAgICAgICAgICAgICAgTnVtYmVyT2ZDb29yZCA9IFdG
LT5OdW1iZXJPZkNvb3JkaW5hdGVzKCk7CiAgICAgICAgICAgICAgICBOdW1iZXJPZkludGVnUG9p
bnRzID0gSU5ULT5OdW1iZXJPZkludGVnUG9pbnRzKCk7CgogICAgICAgICAgICAgICAgZG8geyBp
ZiAoIShkeW5hbWljX2Nhc3Q8Y29uc3QgaW5kX2Nvbm5fdHlwZSY+KEdldEluZGVwKCkpLk51bWJl
ck9mTm9kZXMoKSA9PSBOdW1iZXJPZk5vZGUpKSB7IF9Bc3NlcnQoIkludGVncmF0ZWRDb25uZWN0
aW9uLmhoIiwgNzAsICgiV2VpZ2h0IGZ1bmN0aW9uIGFuZCBJbmRlcENvbm5lY3Rpb24gbnVtYmVy
IG9mIG5vZGUgZG8gbm90IGFncmVlIikpOyB0aHJvdyBNeUFzc2VydDo6RXJyR2VuZXJpYygpOyB9
IH0gd2hpbGUgKDApOwoKCgoKICAgICAgICAgICAgICAgIEludGVnUG9pbnRXZWlnaHQgPSBuZXcg
TXlGbG9hdCpbTnVtYmVyT2ZJbnRlZ1BvaW50c107CiAgICAgICAgICAgICAgICBJbnRlZ1BvaW50
V2VpZ2h0RGVyID0gbmV3IEFycmF5MjxNeUZsb2F0PltOdW1iZXJPZkludGVnUG9pbnRzXShOdW1i
ZXJPZk5vZGUsTnVtYmVyT2ZDb29yZCk7CiAgICAgICAgICAgICAgICBmb3IgKE15VW5zIGk9MDsg
aTxOdW1iZXJPZk5vZGU7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ1BvaW50
V2VpZ2h0W2ldID0gbmV3IE15RmxvYXRbTnVtYmVyT2ZOb2RlXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTXlGbG9hdCAqIFBsYWNlID0gSU5ULT5QbGFjZXMoaSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIFdGLT5XZWlnaHRzKFBsYWNlLEludGVnUG9pbnRXZWlnaHRbaV0pOwogICAg
ICAgICAgICAgICAgICAgICAgICBXRi0+V2VpZ2h0RGVyKFBsYWNlLEludGVnUG9pbnRXZWlnaHRE
ZXJbaV0pOwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgfkJh
c2VJbmRlcEludGVnUHRGaWVsZCgpIHsKICAgICAgICAgICAgICAgIGZvciAoTXlVbnMgaT0wOyBp
PE51bWJlck9mSW50ZWdQb2ludHM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGVbXSBJbnRlZ1BvaW50V2VpZ2h0W2ldOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg
ICAgIGRlbGV0ZVtdIEludGVnUG9pbnRXZWlnaHQ7CiAgICAgICAgICAgICAgICBkZWxldGVbXSBJ
bnRlZ1BvaW50V2VpZ2h0RGVyOwogICAgICAgIH07CgogICAgICAgIHZvaWQgRmlsbCh2b2lkKSB7
CiAgICAgICAgICAgICAgICBpbmRfY29ubl90eXBlOjppdGVyYXRvciBpID0gR2V0SW5kZXAoKS5i
ZWdpbigpOwogICAgICAgICAgICAgICAgaW5kX2Nvbm5fdHlwZTo6aXRlcmF0b3IgZW5kID0gR2V0
SW5kZXAoKS5lbmQoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChpICE9IGVuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRvcltdKGkpOwogICAgICAgICAgICAgICAgICAgICAgICBp
Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkYXRhX3R5cGUmIG9wZXJh
dG9yW10oY29uc3QgaW5kX2Nvbm5fdHlwZTo6Y29uc3RfaXRlcmF0b3IgJmkpIHsKCiAgICAgICAg
ICAgICAgICBkYXRhX3R5cGUgJnggPSBiYXNlX3R5cGU6Om9wZXJhdG9yW10oaSk7CiAgICAgICAg
ICAgICAgICB4LnJlc2VydmUoTnVtYmVyT2ZJbnRlZ1BvaW50cyk7CiAgICAgICAgICAgICAgICB4
LnJlc2l6ZShOdW1iZXJPZkludGVnUG9pbnRzKTsKICAgICAgICAgICAgICAgIHJldHVybiB4Owog
ICAgICAgIH07CiAgICAgICAgY29uc3QgTXlVbnMmIE51bWJlck9mSW50ZWdQb2ludCgpIGNvbnN0
IHsKICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXJPZkludGVnUG9pbnRzOwogICAgICAgIH07
CiAgICAgICAgY29uc3QgTXlVbnMmIE51bWJlck9mQ29vcmRpbmF0ZXMoKWNvbnN0IHsKICAgICAg
ICAgICAgICAgIHJldHVybiBOdW1iZXJPZkNvb3JkOwogICAgICAgIH07CiAgICAgICAgY29uc3Qg
TXlVbnMmIE51bWJlck9mTm9kZXMoKWNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiBOdW1i
ZXJPZk5vZGU7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBNeUZsb2F0ICpjb25zdCBXZWlnaHQo
Y29uc3QgTXlVbnMmIGkpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ1BvaW50
V2VpZ2h0W2ldOwogICAgICAgIH07CiAgICAgICAgY29uc3QgQXJyYXkyPE15RmxvYXQ+JiBXZWln
aHREZXIoY29uc3QgTXlVbnMmIGkpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiBJbnRl
Z1BvaW50V2VpZ2h0RGVyW2ldOwogICAgICAgIH07CiAgICAgICAgdmlydHVhbCB2b2lkIFNldE1l
dHJpYyhpdGVyYXRvciAmaXRlcikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBVcGRhdGVQb3Np
dGlvbihpdGVyYXRvciAmaXRlcikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBVcGRhdGVEZWZH
cmFkaWVudChpdGVyYXRvciAmaXRlcikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBTZXRBbGxN
ZXRyaWMoKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIFVwZGF0ZUFsbFBvc2l0aW9uKCkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBVcGRhdGVBbGxEZWZHcmFkaWVudCgpID0gMDsKfTsKCgoK
Cgp0ZW1wbGF0ZTxjbGFzcyBUX2luZGVwZGF0YSwKICAgICAgICBjbGFzcyBpbnRlcnBvbGF0b3Is
CiAgICAgICAgY2xhc3MgVF9kYXRhID0gSW5kZXBJbnRlZ1B0RGF0YTx0eXBlbmFtZSBUX2luZGVw
ZGF0YTo6ZGF0YV90eXBlPiA+CmNsYXNzIEluZGVwSW50ZWdQdEZpZWxkIDoKICAgICAgICBwdWJs
aWMgQmFzZUluZGVwSW50ZWdQdEZpZWxkPFRfaW5kZXBkYXRhLCBUX2RhdGE+IHsKcHJpdmF0ZToK
ICAgICAgICB0eXBlZGVmIEJhc2VJbmRlcEludGVnUHRGaWVsZDxUX2luZGVwZGF0YSwgVF9kYXRh
PiBiYXNlX3R5cGU7CiAgICAgICAgdHlwZWRlZiBJbmRlcENvbm5lY3Rpb25NYXA8VF9pbmRlcGRh
dGE+IGluZF9jb25uX3R5cGU7CgoKICAgICAgICBGaWVsZEludGVycG9sYXRvcjxpbnRlcnBvbGF0
b3I+IGZpbnRlcnA7CiAgICAgICAgRmllbGRHcmFkaWVudEludGVycG9sYXRvcjxpbnRlcnBvbGF0
b3I+IGZnaW50ZXJwOwoKICAgICAgICB2b2lkIFVwZGF0ZVBvc2l0aW9uKGluZF9jb25uX3R5cGU6
OmNvbnN0X2l0ZXJhdG9yICZub2RlcywgZGF0YV90eXBlICZ4KSB7CgogICAgICAgICAgICAgICAg
Zm9yIChNeVVucyBpPTA7IGk8TnVtYmVyT2ZJbnRlZ1BvaW50czsgaSsrKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbnRlcnAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
ZWdQb2ludFdlaWdodFtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ1Bv
aW50V2VpZ2h0RGVyW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpub2RlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2ldLkJhc2VJbnYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeFtpXS5Qb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTnVtYmVyT2ZOb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJl
ck9mQ29vcmQpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdm9pZCBVcGRh
dGVEZWZHcmFkaWVudChpbmRfY29ubl90eXBlOjpjb25zdF9pdGVyYXRvciAmbm9kZXMsIGRhdGFf
dHlwZSAmeCkgewoKICAgICAgICAgICAgICAgIGZvciAoTXlVbnMgaT0wOyBpPE51bWJlck9mSW50
ZWdQb2ludHM7IGkrKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgZmdpbnRlcnAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdQb2ludFdlaWdodFtpXSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ1BvaW50V2VpZ2h0RGVyW2ldLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpub2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4W2ldLkJhc2VJbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtpXS5G
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mTm9kZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNvb3JkKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9OwogICAgICAgIHZvaWQgU2V0TWV0cmljKGluZF9jb25uX3R5cGU6OmNvbnN0X2l0
ZXJhdG9yICZub2RlcywgZGF0YV90eXBlICZ4KSB7CgogICAgICAgICAgICAgICAgZm9yIChNeVVu
cyBpPTA7IGk8TnVtYmVyT2ZJbnRlZ1BvaW50czsgaSsrKSB7CgogICAgICAgICAgICAgICAgICAg
ICAgICB4W2ldLkJhc2UgPSBaRVJPMjsKICAgICAgICAgICAgICAgICAgICAgICAgZmdpbnRlcnAo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdQb2ludFdlaWdodFtpXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ1BvaW50V2VpZ2h0RGVyW2ldLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpub2RlcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJREVOVElUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2ld
LkJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZOb2RlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ29vcmQpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgaW50ZXJwX3RyYWl0czo6QmFzZUludihOdW1iZXJPZkNvb3JkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1fdHJhaXRzPGMzc3Bh
Y2U+OjpOdW1iZXJPZkRpbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeFtpXS5CYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4W2ldLkJhc2VJbnYpOwogICAgICAgICAgICAgICAgICAgICAgICB4W2ldLlZv
bCA9IHhbaV0uQmFzZS5EZXQoKSpJTlQtPldlaWdodHMoaSk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgfTsKcHVibGljOgogICAgICAgIEluZGVwSW50ZWdQdEZpZWxkKEludGVycFdGICpjb25z
dCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVncmF0b3IgKmNvbnN0IGks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZVNjYXR0ZXJGaWVsZCAqY29uc3Qg
aWMpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3R5cGUodyxpLGljKSB7
fTsKICAgICAgICB2aXJ0dWFsIH5JbmRlcEludGVnUHRGaWVsZCgpIHt9OwojIDIxNSAiSW50ZWdy
YXRlZENvbm5lY3Rpb24uaGgiCiAgICAgICAgdmlydHVhbCB2b2lkIFNldE1ldHJpYyhpdGVyYXRv
ciAmaXRlcikgewogICAgICAgICAgICAgICAgaW5kX2Nvbm5fdHlwZTo6Y29uc3RfaXRlcmF0b3Ig
bm9kZXMgPSBpdGVyLT5maXJzdDsKICAgICAgICAgICAgICAgIGRhdGFfdHlwZSAmIHggPSBpdGVy
LT5zZWNvbmQ7CiAgICAgICAgICAgICAgICBTZXRNZXRyaWMobm9kZXMseCk7CiAgICAgICAgfTsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgVXBkYXRlUG9zaXRpb24oaXRlcmF0b3IgJml0ZXIpIHsKICAg
ICAgICAgICAgICAgIGluZF9jb25uX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIG5vZGVzID0gaXRlci0+
Zmlyc3Q7CiAgICAgICAgICAgICAgICBkYXRhX3R5cGUgJiB4ID0gaXRlci0+c2Vjb25kOwogICAg
ICAgICAgICAgICAgVXBkYXRlUG9zaXRpb24obm9kZXMseCk7CiAgICAgICAgfTsKICAgICAgICB2
aXJ0dWFsIHZvaWQgVXBkYXRlRGVmR3JhZGllbnQoaXRlcmF0b3IgJml0ZXIpIHsKICAgICAgICAg
ICAgICAgIGluZF9jb25uX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIG5vZGVzID0gaXRlci0+Zmlyc3Q7
CiAgICAgICAgICAgICAgICBkYXRhX3R5cGUgJiB4ID0gaXRlci0+c2Vjb25kOwogICAgICAgICAg
ICAgICAgVXBkYXRlRGVmR3JhZGllbnQobm9kZXMseCk7CiAgICAgICAgfTsKICAgICAgICB2aXJ0
dWFsIHZvaWQgU2V0QWxsTWV0cmljKCkgewogICAgICAgICAgICAgICAgaXRlcmF0b3IgaSA9IGJl
Z2luKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvciBlID0gZW5kKCk7CiAgICAgICAgICAgICAg
ICBmb3IgKDsgaSAhPSBlOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5kX2Nvbm5f
dHlwZTo6Y29uc3RfaXRlcmF0b3Igbm9kZXMgPSBpLT5maXJzdDsKICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YV90eXBlICYgeCA9IGktPnNlY29uZDsKICAgICAgICAgICAgICAgICAgICAgICAg
U2V0TWV0cmljKG5vZGVzLHgpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAg
dmlydHVhbCB2b2lkIFVwZGF0ZUFsbFBvc2l0aW9uKCkgewogICAgICAgICAgICAgICAgaXRlcmF0
b3IgaSA9IGJlZ2luKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvciBlID0gZW5kKCk7CiAgICAg
ICAgICAgICAgICBmb3IgKDsgaSAhPSBlOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aW5kX2Nvbm5fdHlwZTo6Y29uc3RfaXRlcmF0b3Igbm9kZXMgPSBpLT5maXJzdDsKICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YV90eXBlICYgeCA9IGktPnNlY29uZDsKICAgICAgICAgICAgICAg
ICAgICAgICAgVXBkYXRlUG9zaXRpb24obm9kZXMseCk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgfTsKICAgICAgICB2aXJ0dWFsIHZvaWQgVXBkYXRlQWxsRGVmR3JhZGllbnQoKSB7CiAgICAg
ICAgICAgICAgICBpdGVyYXRvciBpID0gYmVnaW4oKTsKICAgICAgICAgICAgICAgIGl0ZXJhdG9y
IGUgPSBlbmQoKTsKICAgICAgICAgICAgICAgIGZvciAoOyBpICE9IGU7IGkrKykgewogICAgICAg
ICAgICAgICAgICAgICAgICBpbmRfY29ubl90eXBlOjpjb25zdF9pdGVyYXRvciBub2RlcyA9IGkt
PmZpcnN0OwogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGUgJiB4ID0gaS0+c2Vjb25k
OwogICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVEZWZHcmFkaWVudChub2Rlcyx4KTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Owp9OwojIDggIkRlcEludGVncmF0ZWRDb25uZWN0aW9u
LmhoIiAyCgojIDEgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC9zbWFydF9wdHIuaHBw
IiAxCiMgNTUgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC9zbWFydF9wdHIuaHBwIgoj
IDEgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC9jb25maWcuaHBwIiAxCiMgMjU3ICIv
aG9tZS9tYXJjby9ib29zdF8xXzIyXzAvYm9vc3QvY29uZmlnLmhwcCIKIyAxICIvaG9tZTIvbWFy
Y28vbG9jYWwvaW5jbHVkZS9nKystdjMvaXRlcmF0b3IiIDEgMwojIDI1OCAiL2hvbWUvbWFyY28v
Ym9vc3RfMV8yMl8wL2Jvb3N0L2NvbmZpZy5ocHAiIDIKIyA1NiAiL2hvbWUvbWFyY28vYm9vc3Rf
MV8yMl8wL2Jvb3N0L3NtYXJ0X3B0ci5ocHAiIDIKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgNTcgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9i
b29zdC9zbWFydF9wdHIuaHBwIiAyCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysr
LXYzL21lbW9yeSIgMSAzCiMgNTggIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC9zbWFy
dF9wdHIuaHBwIiAyCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2FsZ29y
aXRobSIgMSAzCiMgNTkgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC9zbWFydF9wdHIu
aHBwIiAyCiMgMSAiL2hvbWUvbWFyY28vYm9vc3RfMV8yMl8wL2Jvb3N0L3V0aWxpdHkuaHBwIiAx
CiMgMjggIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC91dGlsaXR5LmhwcCIKIyAxICIv
aG9tZS9tYXJjby9ib29zdF8xXzIyXzAvYm9vc3QvY29uZmlnLmhwcCIgMQojIDI5ICIvaG9tZS9t
YXJjby9ib29zdF8xXzIyXzAvYm9vc3QvdXRpbGl0eS5ocHAiIDIKIyAxICIvaG9tZS9tYXJjby9i
b29zdF8xXzIyXzAvYm9vc3Qvc3RhdGljX2Fzc2VydC5ocHAiIDEKIyAxOCAiL2hvbWUvbWFyY28v
Ym9vc3RfMV8yMl8wL2Jvb3N0L3N0YXRpY19hc3NlcnQuaHBwIgojIDEgIi9ob21lL21hcmNvL2Jv
b3N0XzFfMjJfMC9ib29zdC9jb25maWcuaHBwIiAxCiMgMTkgIi9ob21lL21hcmNvL2Jvb3N0XzFf
MjJfMC9ib29zdC9zdGF0aWNfYXNzZXJ0LmhwcCIgMgoKCgoKCgoKbmFtZXNwYWNlIGJvb3N0ewoK
CnRlbXBsYXRlIDxib29sIHg+IHN0cnVjdCBTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU7Cgp0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgU1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPHRydWU+e307CgoKdGVtcGxh
dGU8aW50IHg+IHN0cnVjdCBzdGF0aWNfYXNzZXJ0X3Rlc3R7fTsKCn0KIyAzMCAiL2hvbWUvbWFy
Y28vYm9vc3RfMV8yMl8wL2Jvb3N0L3V0aWxpdHkuaHBwIiAyCiMgMSAiL2hvbWUyL21hcmNvL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDMxICIvaG9tZS9tYXJjby9ib29zdF8x
XzIyXzAvYm9vc3QvdXRpbGl0eS5ocHAiIDIKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVk
ZS9nKystdjMvdXRpbGl0eSIgMSAzCiMgMzEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My91dGlsaXR5IiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX3V0aWxpdHkuaCIgMSAzCiMgMzEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF91dGlsaXR5LmgiIDMKIyAxICIvaG9tZTIvbWFyY28vbG9jYWwvaW5jbHVk
ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzIgIi9o
b21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF91dGlsaXR5LmgiIDIgMwoj
IDEgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yZWxvcHMuaCIg
MSAzCiMgNDQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yZWxv
cHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBuYW1lc3BhY2UgcmVsX29wcwogIHsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0
IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAh
KF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9y
Pj0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195
KTsKfQoKICB9Cn0KIyAzMyAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3V0aWxpdHkuaCIgMiAzCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgMzQgIi9ob21lMi9tYXJjby9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF91dGlsaXR5LmgiIDIgMwojIDMyICIvaG9tZTIvbWFyY28vbG9jYWwvaW5j
bHVkZS9nKystdjMvdXRpbGl0eSIgMiAzCiMgMzIgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9i
b29zdC91dGlsaXR5LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0CnsKCgoKCiAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgVCA+CiAgICBpbmxpbmUgdm9pZCBjaGVja2VkX2RlbGV0ZShUICogeCkKICAgIHsK
ICAgICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9v
c3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBzaXplb2YoVCkgIT0gMCApID4p
PiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNDI7CgogICAgICAgIGRlbGV0ZSB4OwogICAg
fQoKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4KICAgIGlubGluZSB2b2lkIGNoZWNrZWRfYXJy
YXlfZGVsZXRlKFQgKiB4KQogICAgewogICAgICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fz
c2VydF90ZXN0PCBzaXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9v
bCkoIHNpemVvZihUKSAhPSAwICkgPik+IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl81MDsK
CiAgICAgICAgZGVsZXRlIFtdIHg7CiAgICB9CiMgNjYgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJf
MC9ib29zdC91dGlsaXR5LmhwcCIKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgaW5saW5lIFQg
bmV4dChUIHgpIHsgcmV0dXJuICsreDsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgaW5s
aW5lIFQgcHJpb3IoVCB4KSB7IHJldHVybiAtLXg7IH0KIyA4MCAiL2hvbWUvbWFyY28vYm9vc3Rf
MV8yMl8wL2Jvb3N0L3V0aWxpdHkuaHBwIgogICAgY2xhc3Mgbm9uY29weWFibGUKICAgIHsKICAg
IHByb3RlY3RlZDoKICAgICAgICBub25jb3B5YWJsZSgpe30KICAgICAgICB+bm9uY29weWFibGUo
KXt9CiAgICBwcml2YXRlOgogICAgICAgIG5vbmNvcHlhYmxlKCBjb25zdCBub25jb3B5YWJsZSYg
KTsKICAgICAgICBjb25zdCBub25jb3B5YWJsZSYgb3BlcmF0b3I9KCBjb25zdCBub25jb3B5YWJs
ZSYgKTsKICAgIH07CiMgOTggIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC91dGlsaXR5
LmhwcCIKICAgIHRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgogICAgY2xhc3MgdGllZCB7CiAg
ICBwdWJsaWM6CiAgICAgIGlubGluZSB0aWVkKEEmIGEsIEImIGIpIDogX2EoYSksIF9iKGIpIHsg
fQogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MgVj4KICAgICAgaW5saW5lIHRpZWQmIG9w
ZXJhdG9yPShjb25zdCBzdGQ6OnBhaXI8VSxWPiYgcCkgewogICAgICAgIF9hID0gcC5maXJzdDsK
ICAgICAgICBfYiA9IHAuc2Vjb25kOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQogICAg
cHJvdGVjdGVkOgogICAgICBBJiBfYTsKICAgICAgQiYgX2I7CiAgICB9OwoKICAgIHRlbXBsYXRl
IDxjbGFzcyBBLCBjbGFzcyBCPgogICAgaW5saW5lIHRpZWQ8QSxCPiB0aWUoQSYgYSwgQiYgYikg
eyByZXR1cm4gdGllZDxBLEI+KGEsIGIpOyB9Cgp9CiMgNjAgIi9ob21lL21hcmNvL2Jvb3N0XzFf
MjJfMC9ib29zdC9zbWFydF9wdHIuaHBwIiAyCiMgMSAiL2hvbWUyL21hcmNvL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2Z1bmN0aW9uYWwiIDEgMwojIDYxICIvaG9tZS9tYXJjby9ib29zdF8xXzIyXzAv
Ym9vc3Qvc21hcnRfcHRyLmhwcCIgMgojIDEgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29z
dC9zdGF0aWNfYXNzZXJ0LmhwcCIgMQojIDYyICIvaG9tZS9tYXJjby9ib29zdF8xXzIyXzAvYm9v
c3Qvc21hcnRfcHRyLmhwcCIgMgoKCgoKCgpuYW1lc3BhY2UgYm9vc3QgewojIDc3ICIvaG9tZS9t
YXJjby9ib29zdF8xXzIyXzAvYm9vc3Qvc21hcnRfcHRyLmhwcCIKdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY2xhc3Mgc2NvcGVkX3B0ciA6IG5vbmNvcHlhYmxlIHsKCiAgVCogcHRyOwoKIHB1YmxpYzoK
ICB0eXBlZGVmIFQgZWxlbWVudF90eXBlOwoKICBleHBsaWNpdCBzY29wZWRfcHRyKCBUKiBwPTAg
KSA6IHB0cihwKSB7fQogIH5zY29wZWRfcHRyKCkgeyBjaGVja2VkX2RlbGV0ZShwdHIpOyB9CiAg
dm9pZCByZXNldCggVCogcD0wICkgeyBpZiAoIHB0ciAhPSBwICkgeyBjaGVja2VkX2RlbGV0ZShw
dHIpOyBwdHIgPSBwOyB9IH0KICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqcHRyOyB9
CiAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQogIFQqIGdldCgpIGNvbnN0
IHsgcmV0dXJuIHB0cjsgfQoKCgoKICB9OwoKCgoKCgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3Mgc2NvcGVkX2FycmF5IDogbm9uY29weWFibGUgewoKICBUKiBwdHI7CgogcHVibGljOgogIHR5
cGVkZWYgVCBlbGVtZW50X3R5cGU7CgogIGV4cGxpY2l0IHNjb3BlZF9hcnJheSggVCogcD0wICkg
OiBwdHIocCkge30KICB+c2NvcGVkX2FycmF5KCkgeyBjaGVja2VkX2FycmF5X2RlbGV0ZShwdHIp
OyB9CgogIHZvaWQgcmVzZXQoIFQqIHA9MCApIHsgaWYgKCBwdHIgIT0gcCApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoZWNrZWRfYXJyYXlfZGVsZXRlKHB0cik7
IHB0cj1wO30gfQoKICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBwdHI7IH0KCgoKCiAgVCYgb3Bl
cmF0b3JbXShzdGQ6OnNpemVfdCBpKSBjb25zdCB7IHJldHVybiBwdHJbaV07IH0KCiAgfTsKCgoK
CgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIHNoYXJlZF9wdHIgewogIHB1YmxpYzoKICAg
dHlwZWRlZiBUIGVsZW1lbnRfdHlwZTsKCiAgIGV4cGxpY2l0IHNoYXJlZF9wdHIoVCogcCA9MCkg
OiBweChwKSB7CiAgICAgIHRyeSB7IHBuID0gbmV3IGxvbmcoMSk7IH0KICAgICAgY2F0Y2ggKC4u
LikgeyBjaGVja2VkX2RlbGV0ZShwKTsgdGhyb3c7IH0KICAgfQoKICAgc2hhcmVkX3B0cihjb25z
dCBzaGFyZWRfcHRyJiByKSA6IHB4KHIucHgpIHsgKysqKHBuID0gci5wbik7IH0KCiAgIH5zaGFy
ZWRfcHRyKCkgeyBkaXNwb3NlKCk7IH0KCiAgIHNoYXJlZF9wdHImIG9wZXJhdG9yPShjb25zdCBz
aGFyZWRfcHRyJiByKSB7CiAgICAgIHNoYXJlKHIucHgsci5wbik7CiAgICAgIHJldHVybiAqdGhp
czsKICAgfQoKCiAgIHRlbXBsYXRlPHR5cGVuYW1lIFk+CiAgICAgIHNoYXJlZF9wdHIoY29uc3Qg
c2hhcmVkX3B0cjxZPiYgcikgOiBweChyLnB4KSB7CiAgICAgICAgICsrKihwbiA9IHIucG4pOwog
ICAgICB9CgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBZPgogICAgICBleHBsaWNpdCBzaGFyZWRfcHRy
KHN0ZDo6YXV0b19wdHI8WT4mIHIpIHsKICAgICAgICAgcG4gPSBuZXcgbG9uZygxKTsKICAgICAg
ICAgcHggPSByLnJlbGVhc2UoKTsKICAgICAgfQoKCiAgIHRlbXBsYXRlPHR5cGVuYW1lIFk+CiAg
ICAgIHNoYXJlZF9wdHImIG9wZXJhdG9yPShjb25zdCBzaGFyZWRfcHRyPFk+JiByKSB7CiAgICAg
ICAgIHNoYXJlKHIucHgsci5wbik7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg
IHRlbXBsYXRlPHR5cGVuYW1lIFk+CiAgICAgIHNoYXJlZF9wdHImIG9wZXJhdG9yPShzdGQ6OmF1
dG9fcHRyPFk+JiByKSB7CgogICAgICAgICBpZiAoKnBuID09IDEpIHsgY2hlY2tlZF9kZWxldGUo
cHgpOyB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgIGxvbmcgKiB0bXAgPSBuZXcgbG9uZygx
KTsKICAgICAgICAgICAtLSpwbjsKICAgICAgICAgICBwbiA9IHRtcDsKICAgICAgICAgfQogICAg
ICAgICBweCA9IHIucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KIyAy
MDIgIi9ob21lL21hcmNvL2Jvb3N0XzFfMjJfMC9ib29zdC9zbWFydF9wdHIuaHBwIgogICB2b2lk
IHJlc2V0KFQqIHA9MCkgewogICAgICBpZiAoIHB4ID09IHAgKSByZXR1cm47CiAgICAgIGlmICgt
LSpwbiA9PSAwKSB7IGNoZWNrZWRfZGVsZXRlKHB4KTsgfQogICAgICBlbHNlIHsKICAgICAgICB0
cnkgeyBwbiA9IG5ldyBsb25nOyB9CiAgICAgICAgY2F0Y2ggKC4uLikgewogICAgICAgICAgKysq
cG47CiAgICAgICAgICBjaGVja2VkX2RlbGV0ZShwKTsKICAgICAgICAgIHRocm93OwogICAgICAg
IH0KICAgICAgfQogICAgICAqcG4gPSAxOwogICAgICBweCA9IHA7CiAgIH0KCiAgIFQmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICpweDsgfQogICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gcHg7IH0KICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gcHg7IH0KCgoKCgogICBsb25n
IHVzZV9jb3VudCgpIGNvbnN0IHsgcmV0dXJuICpwbjsgfQogICBib29sIHVuaXF1ZSgpIGNvbnN0
IHsgcmV0dXJuICpwbiA9PSAxOyB9CgogICB2b2lkIHN3YXAoc2hhcmVkX3B0cjxUPiYgb3RoZXIp
CiAgICAgeyBzdGQ6OnN3YXAocHgsb3RoZXIucHgpOyBzdGQ6OnN3YXAocG4sb3RoZXIucG4pOyB9
CgoKCgoKICAgcHJpdmF0ZToKCgogICBUKiBweDsKICAgbG9uZyogcG47CgoKCiAgIHRlbXBsYXRl
PHR5cGVuYW1lIFk+IGZyaWVuZCBjbGFzcyBzaGFyZWRfcHRyOwoKCiAgIHZvaWQgZGlzcG9zZSgp
IHsgaWYgKC0tKnBuID09IDApIHsgY2hlY2tlZF9kZWxldGUocHgpOyBkZWxldGUgcG47IH0gfQoK
ICAgdm9pZCBzaGFyZShUKiBycHgsIGxvbmcqIHJwbikgewogICAgICBpZiAocG4gIT0gcnBuKSB7
CiAgICAgICAgICsrKnJwbjsKCiAgICAgICAgIGRpc3Bvc2UoKTsKICAgICAgICAgcHggPSBycHg7
CiAgICAgICAgIHBuID0gcnBuOwogICAgICB9CiAgIH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+CiAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzaGFyZWRfcHRyPFQ+
JiBhLCBjb25zdCBzaGFyZWRfcHRyPFU+JiBiKQogICAgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdl
dCgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogIGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3Qgc2hhcmVkX3B0cjxUPiYgYSwgY29uc3Qgc2hhcmVkX3B0cjxVPiYgYikK
ICAgIHsgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsgfQoKCgoKCgoKdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY2xhc3Mgc2hhcmVkX2FycmF5IHsKICBwdWJsaWM6CiAgIHR5cGVkZWYgVCBlbGVtZW50
X3R5cGU7CgogICBleHBsaWNpdCBzaGFyZWRfYXJyYXkoVCogcCA9MCkgOiBweChwKSB7CiAgICAg
IHRyeSB7IHBuID0gbmV3IGxvbmcoMSk7IH0KICAgICAgY2F0Y2ggKC4uLikgeyBjaGVja2VkX2Fy
cmF5X2RlbGV0ZShwKTsgdGhyb3c7IH0KICAgfQoKICAgc2hhcmVkX2FycmF5KGNvbnN0IHNoYXJl
ZF9hcnJheSYgcikgOiBweChyLnB4KQogICAgICB7ICsrKihwbiA9IHIucG4pOyB9CgogICB+c2hh
cmVkX2FycmF5KCkgeyBkaXNwb3NlKCk7IH0KCiAgIHNoYXJlZF9hcnJheSYgb3BlcmF0b3I9KGNv
bnN0IHNoYXJlZF9hcnJheSYgcikgewogICAgICBpZiAocG4gIT0gci5wbikgewogICAgICAgICAr
KypyLnBuOwoKICAgICAgICAgZGlzcG9zZSgpOwogICAgICAgICBweCA9IHIucHg7CiAgICAgICAg
IHBuID0gci5wbjsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgIH0KCiAgIHZvaWQgcmVz
ZXQoVCogcD0wKSB7CiAgICAgIGlmICggcHggPT0gcCApIHJldHVybjsKICAgICAgaWYgKC0tKnBu
ID09IDApIHsgY2hlY2tlZF9hcnJheV9kZWxldGUocHgpOyB9CiAgICAgIGVsc2UgewogICAgICAg
IHRyeSB7IHBuID0gbmV3IGxvbmc7IH0KICAgICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgICAr
KypwbjsKICAgICAgICAgIGNoZWNrZWRfYXJyYXlfZGVsZXRlKHApOwogICAgICAgICAgdGhyb3c7
CiAgICAgICAgfQogICAgICB9CiAgICAgICpwbiA9IDE7CiAgICAgIHB4ID0gcDsKICAgfQoKICAg
VCogZ2V0KCkgY29uc3QgeyByZXR1cm4gcHg7IH0KCgoKCiAgIFQmIG9wZXJhdG9yW10oc3RkOjpz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gcHhbaV07IH0KCgogICBsb25nIHVzZV9jb3VudCgpIGNv
bnN0IHsgcmV0dXJuICpwbjsgfQogICBib29sIHVuaXF1ZSgpIGNvbnN0IHsgcmV0dXJuICpwbiA9
PSAxOyB9CgogICB2b2lkIHN3YXAoc2hhcmVkX2FycmF5PFQ+JiBvdGhlcikKICAgICB7IHN0ZDo6
c3dhcChweCxvdGhlci5weCk7IHN0ZDo6c3dhcChwbixvdGhlci5wbik7IH0KCiAgcHJpdmF0ZToK
CiAgIFQqIHB4OwogICBsb25nKiBwbjsKCiAgIHZvaWQgZGlzcG9zZSgpIHsgaWYgKC0tKnBuID09
IDApIHsgY2hlY2tlZF9hcnJheV9kZWxldGUocHgpOyBkZWxldGUgcG47IH0gfQoKfTsKCnRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzaGFyZWRfYXJy
YXk8VD4mIGEsIGNvbnN0IHNoYXJlZF9hcnJheTxUPiYgYikKICAgIHsgcmV0dXJuIGEuZ2V0KCkg
PT0gYi5nZXQoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KICBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IHNoYXJlZF9hcnJheTxUPiYgYSwgY29uc3Qgc2hhcmVkX2FycmF5PFQ+JiBiKQog
ICAgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9Cgp9CgoKCgoKbmFtZXNwYWNlIHN0ZCB7
CgoKCgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KICBpbmxpbmUgdm9pZCBzd2FwKGJvb3N0OjpzaGFy
ZWRfcHRyPFQ+JiBhLCBib29zdDo6c2hhcmVkX3B0cjxUPiYgYikKICAgIHsgYS5zd2FwKGIpOyB9
Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogIGlubGluZSB2b2lkIHN3YXAoYm9vc3Q6OnNoYXJlZF9h
cnJheTxUPiYgYSwgYm9vc3Q6OnNoYXJlZF9hcnJheTxUPiYgYikKICAgIHsgYS5zd2FwKGIpOyB9
CgoKCgoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogIHN0cnVjdCBsZXNzPCBib29zdDo6c2hhcmVk
X3B0cjxUPiA+CiAgICA6IGJpbmFyeV9mdW5jdGlvbjxib29zdDo6c2hhcmVkX3B0cjxUPiwgYm9v
c3Q6OnNoYXJlZF9wdHI8VD4sIGJvb2w+CiAgewogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IGJv
b3N0OjpzaGFyZWRfcHRyPFQ+JiBhLAogICAgICAgIGNvbnN0IGJvb3N0OjpzaGFyZWRfcHRyPFQ+
JiBiKSBjb25zdAogICAgICB7IHJldHVybiBsZXNzPFQqPigpKGEuZ2V0KCksYi5nZXQoKSk7IH0K
ICB9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KICBzdHJ1Y3QgbGVzczwgYm9vc3Q6OnNoYXJlZF9h
cnJheTxUPiA+CiAgICA6IGJpbmFyeV9mdW5jdGlvbjxib29zdDo6c2hhcmVkX2FycmF5PFQ+LCBi
b29zdDo6c2hhcmVkX2FycmF5PFQ+LCBib29sPgogIHsKICAgIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBib29zdDo6c2hhcmVkX2FycmF5PFQ+JiBhLAogICAgICAgIGNvbnN0IGJvb3N0OjpzaGFyZWRf
YXJyYXk8VD4mIGIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGxlc3M8VCo+KCkoYS5nZXQoKSxiLmdl
dCgpKTsgfQogIH07Cgp9CiMgMTAgIkRlcEludGVncmF0ZWRDb25uZWN0aW9uLmhoIiAyCgp0ZW1w
bGF0ZTwKICAgICAgICBjbGFzcyBUX2RhdGEsCiAgICAgICAgY2xhc3MgVF9pbmRlcGRhdGEsCiAg
ICAgICAgY2xhc3MgVF9pbmRlcF9pbnRlZ2RhdGEKPgpzdHJ1Y3QgQmFzZUludGVnUHREYXRhIHsK
CiAgICAgICAgQmFzZUluZGVwSW50ZWdQdEZpZWxkPAogICAgICAgICAgICAgICAgVF9pbmRlcGRh
dGEsCiAgICAgICAgICAgICAgICBUX2luZGVwX2ludGVnZGF0YQogICAgICAgID46OmNvbnN0X2l0
ZXJhdG9yIE1ldHJpY0RhdGE7CgogICAgICAgIHN0ZDo6dmVjdG9yPFRfZGF0YT4gRGF0YTsKICAg
ICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRfZGF0YT4gSW50ZWdQdERhdGFUeXBlOwp9OwoKdGVt
cGxhdGU8CiAgICAgICAgY2xhc3MgVF9kYXRhLAogICAgICAgIGNsYXNzIFRfYmFzZWRhdGEsCiAg
ICAgICAgY2xhc3MgVF9pbmRlcGRhdGEsCiAgICAgICAgY2xhc3MgVF9pbmRlcF9pbnRlZ2RhdGEK
PgpzdHJ1Y3QgSW50ZXJwSW50ZWdQdERhdGEgOgpwdWJsaWMgQmFzZUludGVnUHREYXRhPFRfZGF0
YSxUX2luZGVwZGF0YSxUX2luZGVwX2ludGVnZGF0YT4gewoKICAgICAgICBEZXBDb25uZWN0aW9u
TWFwPFRfYmFzZWRhdGEsVF9pbmRlcGRhdGE+Ojpjb25zdF9pdGVyYXRvciBDb25uTWFwRGF0YTsK
fTsKCnRlbXBsYXRlPAogICAgICAgIGNsYXNzIFRfZGF0YSwKICAgICAgICBjbGFzcyBUX2luZGVw
ZGF0YSwKICAgICAgICBjbGFzcyBUX2luZGVwX2ludGVnZGF0YQo+CnN0cnVjdCBDb3N0SW50ZWdQ
dERhdGEgOgpwdWJsaWMgQmFzZUludGVnUHREYXRhPFRfZGF0YSxUX2luZGVwZGF0YSxUX2luZGVw
X2ludGVnZGF0YT4gewoKICAgICAgICBEZXBDb25uZWN0aW9uRmllbGQ8VF9kYXRhLFRfaW5kZXBk
YXRhPjo6Y29uc3RfaXRlcmF0b3IgQ29ubkRhdGE7Cn07CgoKCnRlbXBsYXRlPGNsYXNzIFRfZGF0
YSwKICAgICAgICBjbGFzcyBUX2luZGVwZGF0YSwKICAgICAgICBjbGFzcyBUX2luZGVwX2ludGVn
ZGF0YSA9IEluZGVwSW50ZWdQdERhdGE8dHlwZW5hbWUgVF9pbmRlcGRhdGE6OmRhdGFfdHlwZT4K
PgpjbGFzcyBCYXNlRGVwSW50ZWdQdEZpZWxkIDoKcHVibGljIERlcENvbm5lY3Rpb25GaWVsZDwK
ICAgICAgICBib29zdDo6c2hhcmVkX3B0cjwKICAgICAgICAgICAgICAgIEJhc2VJbnRlZ1B0RGF0
YTxUX2RhdGEsVF9pbmRlcGRhdGEsVF9pbmRlcF9pbnRlZ2RhdGE+CiAgICAgICAgPiwKICAgICAg
ICBUX2luZGVwZGF0YQo+CnsKcHJpdmF0ZToKICAgICAgICB0eXBlZGVmIEJhc2VJbnRlZ1B0RGF0
YTwKICAgICAgICAgICAgICAgICAgICAgICAgVF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAg
ICBUX2luZGVwZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgVF9pbmRlcF9pbnRlZ2RhdGEK
ICAgICAgICAgICAgICAgID4gYmFzZV9pbmRlcF9wdF9kYXRhX3R5cGU7CiAgICAgICAgdHlwZWRl
ZiBEZXBDb25uZWN0aW9uRmllbGQ8CiAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0OjpzaGFy
ZWRfcHRyPGJhc2VfaW5kZXBfcHRfZGF0YV90eXBlPiwKICAgICAgICAgICAgICAgICAgICAgICAg
VF9pbmRlcGRhdGEKICAgICAgICAgICAgICAgID4gYmFzZV90eXBlOwogICAgICAgIHR5cGVkZWYg
QmFzZUluZGVwSW50ZWdQdEZpZWxkPAogICAgICAgICAgICAgICAgICAgICAgICBUX2luZGVwZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgVF9pbmRlcF9pbnRlZ2RhdGEKICAgICAgICAgICAg
ICAgID4gaW5kZXBpbnRlZ3B0X2NvbnRhaW5lcjsKICAgICAgICB0eXBlZGVmIEluZGVwQ29ubmVj
dGlvbk1hcDxUX2luZGVwZGF0YT4gY29ubl9jb250YWluZXI7CnByb3RlY3RlZDoKCiAgICAgICAg
aW5kZXBpbnRlZ3B0X2NvbnRhaW5lciAqIEludFB0RGF0YUNvbnQ7CgogICAgICAgIE15VW5zIE51
bWJlck9mSW50ZWdQb2ludHM7CgogICAgICAgIE15VW5zIE51bWJlck9mQ29vcmQ7CgogICAgICAg
IGRhdGFfdHlwZSYgYnVpbGQgKAogICAgICAgICAgICAgICAgY29ubl9jb250YWluZXI6Oml0ZXJh
dG9yICZpLAogICAgICAgICAgICAgICAgYmFzZV9pbmRlcF9wdF9kYXRhX3R5cGUgKiBwdHIpIHsK
CiAgICAgICAgICAgICAgICBkYXRhX3R5cGUgJnggPSBiYXNlX3R5cGU6Om9wZXJhdG9yW10oaSk7
CiAgICAgICAgICAgICAgICB4ID0gYmFzZV90eXBlOjpkYXRhX3R5cGUocHRyKTsKICAgICAgICAg
ICAgICAgIHgtPkRhdGEucmVzZXJ2ZShOdW1iZXJPZkludGVnUG9pbnRzKTsKICAgICAgICAgICAg
ICAgIHgtPk1ldHJpY0RhdGEgPSAoSW50UHREYXRhQ29udC0+ZmluZChpKSk7CiAgICAgICAgICAg
ICAgICByZXR1cm4geDsKICAgICAgICB9OwpwdWJsaWM6CiAgICAgICAgQmFzZURlcEludGVnUHRG
aWVsZChCYXNlU2NhdHRlckZpZWxkICpjb25zdCBjMSwgQmFzZVNjYXR0ZXJGaWVsZCAqY29uc3Qg
YzIpIDoKICAgICAgICAgICAgICAgIGJhc2VfdHlwZShjMSkgewogICAgICAgICAgICAgICAgSW50
UHREYXRhQ29udCA9IHB0cl9jYXN0PGluZGVwaW50ZWdwdF9jb250YWluZXIgKmNvbnN0PihjMik7
CgoKCiAgICAgICAgICAgICAgICBOdW1iZXJPZkludGVnUG9pbnRzID0gSW50UHREYXRhQ29udC0+
TnVtYmVyT2ZJbnRlZ1BvaW50KCk7CiAgICAgICAgICAgICAgICBOdW1iZXJPZkNvb3JkID0gSW50
UHREYXRhQ29udC0+TnVtYmVyT2ZDb29yZGluYXRlcygpOwoKICAgICAgICAgICAgICAgIGRvIHsg
aWYgKCEoJihJbnRQdERhdGFDb250LT5HZXRJbmRlcCgpKSA9PSBjMSkpIHsgX0Fzc2VydCgiRGVw
SW50ZWdyYXRlZENvbm5lY3Rpb24uaGgiLCAxMDcsICgiRXJyb3JlIGlkZW50aXTgIGNvbnRlbml0
b3JpIikpOyB0aHJvdyBNeUFzc2VydDo6RXJyR2VuZXJpYygpOyB9IH0gd2hpbGUgKDApOwogICAg
ICAgIH07CiAgICAgICAgdmlydHVhbCBkYXRhX3R5cGUmIG9wZXJhdG9yW10oCiAgICAgICAgICAg
ICAgICBjb25uX2NvbnRhaW5lcjo6aXRlcmF0b3IgJmkKICAgICAgICApID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgVXBkYXRlKGNvbnN0IGl0ZXJhdG9yICZpKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIFVwZGF0ZUFsbCgpID0gMDsKfTsKIyAxMzIgIkRlcEludGVncmF0ZWRDb25uZWN0aW9u
LmhoIgp0ZW1wbGF0ZTxjbGFzcyBUX2RhdGEsCiAgICAgICAgY2xhc3MgVF9iYXNlZGF0YSwKICAg
ICAgICBjbGFzcyBUX2luZGVwZGF0YSwKICAgICAgICBjbGFzcyBmLAogICAgICAgIGNsYXNzIFRf
aW5kZXBfaW50ZWdkYXRhID0gSW5kZXBJbnRlZ1B0RGF0YTx0eXBlbmFtZSBUX2luZGVwZGF0YTo6
ZGF0YV90eXBlPgo+CmNsYXNzIEludGVycG9sYXRlZERlcEludGVnUHRGaWVsZCA6CnB1YmxpYyBC
YXNlRGVwSW50ZWdQdEZpZWxkPAogICAgICAgICAgICAgICAgVF9kYXRhLAogICAgICAgICAgICAg
ICAgVF9pbmRlcGRhdGEsCiAgICAgICAgICAgICAgICBUX2luZGVwX2ludGVnZGF0YQogICAgICAg
ID4Kewpwcml2YXRlOgogICAgICAgIHR5cGVkZWYgSW50ZXJwSW50ZWdQdERhdGE8CiAgICAgICAg
ICAgICAgICBUX2RhdGEsCiAgICAgICAgICAgICAgICBUX2Jhc2VkYXRhLAogICAgICAgICAgICAg
ICAgVF9pbmRlcGRhdGEsCiAgICAgICAgICAgICAgICBUX2luZGVwX2ludGVnZGF0YQogICAgICAg
ID4gaW50ZXJwX2ludGVnX3B0X2RhdGFfdHlwZTsKICAgICAgICB0eXBlZGVmIEJhc2VEZXBJbnRl
Z1B0RmllbGQ8CiAgICAgICAgICAgICAgICAgICAgICAgIFRfZGF0YSwKICAgICAgICAgICAgICAg
ICAgICAgICAgVF9pbmRlcGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFRfaW5kZXBfaW50
ZWdkYXRhCiAgICAgICAgICAgICAgICA+IGJhc2VfdHlwZTsKICAgICAgICB0eXBlZGVmIERlcENv
bm5lY3Rpb25NYXA8VF9iYXNlZGF0YSxUX2luZGVwZGF0YT4gZGVwX2Nvbm5fY29udGFpbmVyOwog
ICAgICAgIGRlcF9jb25uX2NvbnRhaW5lciAqY29ubjsKCiAgICAgICAgTXlVbnMgTnVtYmVyT2ZO
b2RlczsKCiAgICAgICAgdm9pZCBsb2NhbF91cGRhdGUoY29uc3QgaXRlcmF0b3IgJml0ZXIpIHsK
ICAgICAgICAgICAgICAgIGludGVycF9pbnRlZ19wdF9kYXRhX3R5cGUqIHB0ciA9CiAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludGVycF9pbnRlZ19wdF9kYXRhX3R5cGUqPigK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQuZ2V0KCkKICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGNvbnN0IGRlcF9jb25uX2NvbnRh
aW5lcjo6ZGF0YV90eXBlICZub2RlcyhwdHItPkNvbm5NYXBEYXRhLT5zZWNvbmQpOwogICAgICAg
ICAgICAgICAgZm9yIChNeVVucyBpPTA7IGk8TnVtYmVyT2ZJbnRlZ1BvaW50czsgaSsrKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGYoKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRQdERhdGFDb250LT5XZWlnaHQoaSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50UHREYXRhQ29udC0+V2VpZ2h0RGVyKGkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqcHRyKS5NZXRy
aWNEYXRhLT5zZWNvbmRbaV0uQmFzZUludiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKnB0cikuRGF0YVtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJP
Zk5vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ29vcmQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAg
IH07CnB1YmxpYzoKICAgICAgICBJbnRlcnBvbGF0ZWREZXBJbnRlZ1B0RmllbGQoCiAgICAgICAg
ICAgICAgICBCYXNlU2NhdHRlckZpZWxkICpjb25zdCBjMSwKICAgICAgICAgICAgICAgIEJhc2VT
Y2F0dGVyRmllbGQgKmNvbnN0IGMyCiAgICAgICAgKSA6IGJhc2VfdHlwZShjMSxjMikgewogICAg
ICAgICAgICAgICAgY29ubiA9IHB0cl9jYXN0PGRlcF9jb25uX2NvbnRhaW5lcio+KGMxKTsKICAg
ICAgICAgICAgICAgIE51bWJlck9mTm9kZXMgPSBJbnRQdERhdGFDb250LT5OdW1iZXJPZk5vZGVz
KCk7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIGRhdGFfdHlwZSYgb3BlcmF0b3JbXShjb25u
X2NvbnRhaW5lcjo6aXRlcmF0b3IgJmkpIHsKCiAgICAgICAgICAgICAgICBpbnRlcnBfaW50ZWdf
cHRfZGF0YV90eXBlKiBwdHIgPSBuZXcgaW50ZXJwX2ludGVnX3B0X2RhdGFfdHlwZTsKICAgICAg
ICAgICAgICAgIGJhc2VfaW5kZXBfcHRfZGF0YV90eXBlICogcHRyMiA9IHB0cjsKCiAgICAgICAg
ICAgICAgICBkYXRhX3R5cGUgeDsKICAgICAgICAgICAgICAgIGJhc2VfdHlwZTo6YnVpbGQoaSxw
dHIyKTsKICAgICAgICAgICAgICAgIHguQ29ubk1hcERhdGEgPSBjb25uLT5maW5kKGkpOwogICAg
ICAgICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIHZvaWQgVXBk
YXRlKGNvbnN0IGl0ZXJhdG9yICZpdGVyKSB7CiAgICAgICAgICAgICAgICBsb2NhbF91cGRhdGUo
aXRlcik7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIHZvaWQgVXBkYXRlQWxsKCkgewogICAg
ICAgICAgICAgICAgaXRlcmF0b3IgaSA9IGJlZ2luKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRv
ciBlbmRpID0gZW5kKCk7CiAgICAgICAgICAgICAgICB3aGlsZSAoaSAhPSBlbmRpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2FsX3VwZGF0ZShpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgaSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07Cn07CgoKCnRlbXBsYXRlPGNsYXNz
IFRfZGF0YSwKICAgICAgICBjbGFzcyBUX2Jhc2VkYXRhLAogICAgICAgIGNsYXNzIFRfaW5kZXBk
YXRhLAogICAgICAgIGNsYXNzIFRfaW5kZXBfaW50ZWdkYXRhID0gSW5kZXBJbnRlZ1B0RGF0YTx0
eXBlbmFtZSBUX2luZGVwZGF0YTo6ZGF0YV90eXBlPgo+CmNsYXNzIENvc3RhbnREZXBJbnRlZ1B0
RmllbGQgOgpwdWJsaWMgQmFzZURlcEludGVnUHRGaWVsZDwKICAgICAgICAgICAgICAgIFRfZGF0
YSwKICAgICAgICAgICAgICAgIFRfaW5kZXBkYXRhLAogICAgICAgICAgICAgICAgVF9pbmRlcF9p
bnRlZ2RhdGEKICAgICAgICA+CnsKcHJpdmF0ZToKICAgICAgICB0eXBlZGVmIENvc3RJbnRlZ1B0
RGF0YTwKICAgICAgICAgICAgICAgICAgICAgICAgVF9kYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICBUX2luZGVwZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgVF9pbmRlcF9pbnRlZ2Rh
dGEKICAgICAgICAgICAgICAgID4gY29zdF9pbnRlZ19wdF9kYXRhX3R5cGU7CiAgICAgICAgdHlw
ZWRlZiBCYXNlRGVwSW50ZWdQdEZpZWxkPAogICAgICAgICAgICAgICAgICAgICAgICBUX2RhdGEs
CiAgICAgICAgICAgICAgICAgICAgICAgIFRfaW5kZXBkYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICBUX2luZGVwX2ludGVnZGF0YQogICAgICAgICAgICAgICAgPiBiYXNlX3R5cGU7CiAgICAg
ICAgdHlwZWRlZiBEZXBDb25uZWN0aW9uRmllbGQ8VF9kYXRhLFRfaW5kZXBkYXRhPiBkZXBfY29u
dGFpbmVyOwogICAgICAgIGRlcF9jb250YWluZXIgKmNvbnQ7CgogICAgICAgIHZvaWQgbG9jYWxf
dXBkYXRlKGNvbnN0IGl0ZXJhdG9yICZpdGVyKSB7CiAgICAgICAgICAgICAgICBjb3N0X2ludGVn
X3B0X2RhdGFfdHlwZSogcHRyID0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29zdF9pbnRlZ19wdF9kYXRhX3R5cGUqPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpdGVyLT5zZWNvbmQuZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAg
ICAgICAgIGNvbnN0IGRlcF9jb250YWluZXI6OmRhdGFfdHlwZSAmbm9kZXMocHRyLT5Db25uRGF0
YS0+c2Vjb25kKTsKCiAgICAgICAgICAgICAgICBmb3IgKE15VW5zIGk9MDsgaTxOdW1iZXJPZklu
dGVnUG9pbnRzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgKCpwdHIpLkRhdGFbaV0g
PSBub2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CnB1YmxpYzoKICAgICAgICBDb3N0
YW50RGVwSW50ZWdQdEZpZWxkKAogICAgICAgICAgICAgICAgQmFzZVNjYXR0ZXJGaWVsZCAqY29u
c3QgYzEsCiAgICAgICAgICAgICAgICBCYXNlU2NhdHRlckZpZWxkICpjb25zdCBjMgogICAgICAg
ICkgOiBiYXNlX3R5cGUoYzEsYzIpIHsKICAgICAgICAgICAgICAgIGNvbnQgPSBwdHJfY2FzdDxk
ZXBfY29udGFpbmVyKj4oYzEpOwogICAgICAgIH07CiAgICAgICAgdmlydHVhbCBkYXRhX3R5cGUm
IG9wZXJhdG9yW10oY29ubl9jb250YWluZXI6Oml0ZXJhdG9yICZpKSB7CgogICAgICAgICAgICAg
ICAgY29zdF9pbnRlZ19wdF9kYXRhX3R5cGUqIHB0ciA9IG5ldyBjb3N0X2ludGVnX3B0X2RhdGFf
dHlwZTsKICAgICAgICAgICAgICAgIGRhdGFfdHlwZSAmeCA9IGJhc2VfdHlwZTo6YnVpbGQoaSxw
dHIpOwogICAgICAgICAgICAgICAgeC5Db25uRGF0YSA9IGNvbnQtPmZpbmQoaSk7CiAgICAgICAg
ICAgICAgICByZXR1cm4geDsKICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgdm9pZCBVcGRhdGUo
Y29uc3QgaXRlcmF0b3IgJml0ZXIpIHsKICAgICAgICAgICAgICAgIGxvY2FsX3VwZGF0ZShpdGVy
KTsKICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgdm9pZCBVcGRhdGVBbGwoKSB7CiAgICAgICAg
ICAgICAgICBpdGVyYXRvciBpID0gYmVnaW4oKTsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yIGVu
ZGkgPSBlbmQoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChpICE9IGVuZGkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYWxfdXBkYXRlKGkpOwogICAgICAgICAgICAgICAgICAgICAgICBp
Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKfTsKIyAxNSAiRmllbGQyLkMiIDIKIyA1
NyAiRmllbGQyLkMiCnRlbXBsYXRlIGNsYXNzCkludGVycG9sYXRlZERlcEludGVnUHRGaWVsZDwK
ICAgIFRlbnNvcjIsIFRlbnNvcjEsIFN5c3RlbUNvbnRyaWJ1dG9yPFRlbnNvcjE+LCBGaWVsZEdy
YWRpZW50SW50ZXJwb2xhdG9yPGxpbmVhcj4KPjsK


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

end of thread, other threads:[~2001-11-17  8:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-11-08 11:08 c++/3649: Internal compiler error in tsubst, at cp/pt.c: 6376 lerdsuwa
  -- strict thread matches above, loose matches on Subject: below --
2001-11-08 11:16 lerdsuwa
2001-07-11  8:46 morandini

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).