This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/3180: ICE on bad code. (calling some undefined functions).



>Number:         3180
>Category:       c++
>Synopsis:       ICE on bad code.  (calling some undefined functions).
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Wed Jun 13 15:36:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Lance Page (lpage@draper.com)
>Release:        2.95.3 19991030 (prerelease)
>Organization:
>Environment:
Linux Mandrake
kernel 2.2.17-21mdksmp #1 SMP Thu Oct 5 13:03:01 CEST 2000 i686 unknown 
>Description:
ICE on bad code.

Maybe a function-overloading problem.
Called set(double,double,double) on an object with several 
set() functions but none that take double,double,double.

>How-To-Repeat:
Preprocessed source code (bug.ii) is attached.
Here is the command line and its output:

g++ -v -save-temps              -D_LINUX_ -DDEBUG  -I. -I/u/lpage/workarea/root/usr/simlab/release/autonomousSystems1.1.1/include  -g -Wall -O2 -c bug.cc -o bug.o

Reading specs from /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/specs
gcc version 2.95.3 19991030 (prerelease)
 /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/cpp -lang-c++ -v -I. -I/u/lpage/workarea/root/usr/simlab/release/autonomousSystems1.1.1/include -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -g -Wall -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di586 -Dpentium -D__i586 -D__i586__ -D__pentium -D__pentium__ -D_LINUX_ -DDEBUG bug.cc bug.ii
GNU CPP version 2.95.3 19991030 (prerelease) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 .
 /u/lpage/workarea/root/usr/simlab/release/autonomousSystems1.1.1/include
 /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/../../../../include/g++-3
 /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/../../../../i586-mandrake-linux/include
 /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/local/include
End of omitted list.
 /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/cc1plus bug.ii -quiet -dumpbase bug.cc -g -O2 -Wall -version -o bug.s
GNU C++ version 2.95.3 19991030 (prerelease) (i586-mandrake-linux) compiled by GNU C version 2.95.3 19991030 (prerelease).
bug.cc: In function `void blah()':
bug.cc:17: Internal compiler error.
bug.cc:17: Please submit a full bug report.
bug.cc:17: See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.  


>Fix:
Replace the statement...
    rawpath[p].set(xform.indexToNorth(rawpath[p].x),
                   xform.indexToEast(rawpath[p].y),
                   moveDB->zIndexToValue(rawpath[p].z));
with...
    nedpath[p].set(xform.indexToNorth(rawpath[p].x),
                   xform.indexToEast(rawpath[p].y),
                   moveDB->zIndexToValue(rawpath[p].z));
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug.ii"

IyAxICJidWcuY2MiCiMgMSAiUG9zZVRvU3RhdGVYZm9ybS5oIiAxCiAKCgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCiAKIyAxMzggIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAzCgoKIAoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDE5NiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKCiAKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9jZGVmcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgog
CgoKCgoKCgoKIAoKCgoKIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzCgoKIAoKCgoK
CgoKIAoKCgojIDEwMyAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzCgoKCiAKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoj
IDI1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCiAKCgoKCgoKCgogCgoKCgoKIAoK
IAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjc4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMiAzCgoKCgojIDI3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgpleHRlcm4gIkMiIHsg
CgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9o
dWdlX3ZhbC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgogCgoKCiAKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwoKIyA0MCAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvcyAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hY29zICAgICAg
ICAgIChkb3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFzaW4g
ICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNp
biAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg
ICBhdGFuICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAg
ICBfX2F0YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUg
ICAgICAgICAgYXRhbjIgICAgICAgICAgKGRvdWJsZSAgX195LCBkb3VibGUgIF9feCkgICAgOyBl
eHRlcm4gICBkb3VibGUgICAgICAgICBfX2F0YW4yICAgICAgICAgIChkb3VibGUgIF9feSwgZG91
YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY29zICAgICAgICAg
IChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NvcyAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzaW4gICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2luICAg
ICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHRh
biAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX190
YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgoKCgoKCiAKCiAKZXh0ZXJuICAgZG91
YmxlICAgICAgICAgIGNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fY29zaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVy
biAgIGRvdWJsZSAgICAgICAgICBzaW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRl
cm4gICBkb3VibGUgICAgICAgICBfX3NpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsK
IApleHRlcm4gICBkb3VibGUgICAgICAgICAgdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAg
IDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX190YW5oICAgICAgICAgIChkb3VibGUgIF9feCkg
ICAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvc2ggICAgICAgICAgKGRvdWJs
ZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYWNvc2ggICAgICAgICAgKGRv
dWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXNpbmggICAgICAg
ICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbmggICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRh
bmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f
YXRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgogCgogCmV4dGVybiAgIGRvdWJs
ZSAgICAgICAgICBleHAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fZXhwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKCgoKCgoKIApl
eHRlcm4gICBkb3VibGUgICAgICAgICAgZnJleHAgICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQg
Kl9fZXhwb25lbnQpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mcmV4cCAgICAgICAg
ICAoZG91YmxlICBfX3gsIGludCAqX19leHBvbmVudCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJs
ZSAgICAgICAgICBsZGV4cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX2V4cG9uZW50KSAg
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbGRleHAgICAgICAgICAgKGRvdWJsZSAgX194
LCBpbnQgX19leHBvbmVudCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsb2cg
ICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9n
ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg
ICBsb2cxMCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19sb2cxMCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3Vi
bGUgICAgICAgICAgbW9kZiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgKl9faXB0cikg
ICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX21vZGYgICAgICAgICAgKGRvdWJsZSAgX194
LCBkb3VibGUgICpfX2lwdHIpICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGV4
cG0xICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf
X2V4cG0xICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAg
ICAgICAgICBsb2cxcCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91Ymxl
ICAgICAgICAgX19sb2cxcCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4g
ICBkb3VibGUgICAgICAgICAgbG9nYiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgX19sb2diICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoK
CgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgcG93ICAgICAgICAgIChkb3Vi
bGUgIF9feCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19wb3cg
ICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgogCmV4dGVybiAgIGRv
dWJsZSAgICAgICAgICBzcXJ0ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBk
b3VibGUgICAgICAgICBfX3NxcnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgogCmV4
dGVybiAgIGRvdWJsZSAgICAgICAgICBoeXBvdCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJs
ZSAgX195KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9faHlwb3QgICAgICAgICAgKGRv
dWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIGNicnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAg
ICAgIF9fY2JydCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCgogCgogCmV4dGVybiAg
IGRvdWJsZSAgICAgICAgICBjZWlsICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2NlaWwgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAK
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZhYnMgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAg
X19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBkb3VibGUgICAgICAg
ICBfX2ZhYnMgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChf
X2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmbG9vciAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mbG9vciAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZm1v
ZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fZm1vZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICAg
IDsKCgogCgpleHRlcm4gIGludCAgICAgX19pc2luZiAgICAgIChkb3VibGUgIF9fdmFsdWUpICAg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICAgX19maW5pdGUg
ICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgog
CgpleHRlcm4gIGludCAgICAgaXNpbmYgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIGZpbml0ZSAgICAgIChkb3Vi
bGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIAoKCgoKCmV4dGVy
biAgIGRvdWJsZSAgICAgICAgICBpbmZuYW4gICAgICAgICAgKGludCBfX2Vycm9yKSAgICAgX19h
dHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf
X2luZm5hbiAgICAgICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9f
Y29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGRyZW0gICAgICAgICAg
KGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf
X2RyZW0gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKIApleHRl
cm4gICBkb3VibGUgICAgICAgICAgc2lnbmlmaWNhbmQgICAgICAgICAgKGRvdWJsZSAgX194KSAg
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2lnbmlmaWNhbmQgICAgICAgICAgKGRvdWJs
ZSAgX194KSAgICAgIDsKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY29weXNpZ24gICAg
ICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAo
X19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19jb3B5c2lnbiAgICAgICAg
ICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2Nv
bnN0X18pICApICA7CgoKCgoKCgoKIApleHRlcm4gIGludCAgICAgX19pc25hbiAgICAgIChkb3Vi
bGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKZXh0ZXJuICBp
bnQgICAgIGlzbmFuICAgICAgKGRvdWJsZSAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBqMCAgICAgICAgICAoZG91Ymxl
ICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2owICAgICAgICAgIChkb3VibGUgKSAg
ICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGoxICAgICAgICAgIChkb3VibGUgKSAgICA7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fajEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpl
eHRlcm4gICBkb3VibGUgICAgICAgICAgam4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgOyBl
eHRlcm4gICBkb3VibGUgICAgICAgICBfX2puICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgICAg
OwpleHRlcm4gICBkb3VibGUgICAgICAgICAgeTAgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0
ZXJuICAgZG91YmxlICAgICAgICAgX195MCAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVy
biAgIGRvdWJsZSAgICAgICAgICB5MSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBk
b3VibGUgICAgICAgICBfX3kxICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91
YmxlICAgICAgICAgIHluICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX195biAgICAgICAgICAoaW50LCBkb3VibGUgKSAgICAgIDsKCgoKCiAKZXh0
ZXJuICAgZG91YmxlICAgICAgICAgIGVyZiAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2VyZiAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAg
IGRvdWJsZSAgICAgICAgICBlcmZjICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fZXJmYyAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRv
dWJsZSAgICAgICAgICBsZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19sZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBk
b3VibGUgICAgICAgICAgdGdhbW1hICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fdGdhbW1hICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKCgoKIApleHRl
cm4gICBkb3VibGUgICAgICAgICAgZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgX19nYW1tYSAgICAgICAgICAoZG91YmxlICkgICAgICA7CgoKCiAK
CgpleHRlcm4gICBkb3VibGUgICAgICAgICAgbGdhbW1hX3IgICAgICAgICAgICAgIChkb3VibGUg
LCBpbnQgKl9fc2lnbmdhbXApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sZ2FtbWFf
ciAgICAgICAgICAgICAgKGRvdWJsZSAsIGludCAqX19zaWduZ2FtcCkgICAgICA7CgoKCgogCgpl
eHRlcm4gICBkb3VibGUgICAgICAgICAgcmludCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsg
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yaW50ICAgICAgICAgIChkb3VibGUgIF9feCkgICAg
ICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBuZXh0YWZ0ZXIgICAgICAgICAgKGRvdWJs
ZSAgX194LCBkb3VibGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAg
KTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19uZXh0YWZ0ZXIgICAgICAgICAgKGRvdWJsZSAg
X194LCBkb3VibGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAg
OwoKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgcmVtYWluZGVyICAgICAgICAgIChkb3Vi
bGUgIF9feCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yZW1h
aW5kZXIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKIApleHRl
cm4gICBkb3VibGUgICAgICAgICAgc2NhbGIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUg
IF9fbikgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NjYWxiICAgICAgICAgIChkb3Vi
bGUgIF9feCwgZG91YmxlICBfX24pICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IHNjYWxibiAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX24pICAgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19zY2FsYm4gICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19uKSAgICAg
IDsKCiAKZXh0ZXJuICAgaW50ICAgICAgICBpbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgIDsg
ZXh0ZXJuICAgaW50ICAgICAgICBfX2lsb2diICAgICAgICAoZG91YmxlICBfX3gpICAgIDsKCgoj
IDMzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCiMgNjMgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDIgMwoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhY29zZiAgICAgICAgIChm
bG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYWNvc2YgICAgICAgICAo
ZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFzaW5mICAgICAg
ICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hc2luZiAgICAg
ICAgIChmbG9hdCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXRhbmYg
ICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2F0YW5m
ICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBh
dGFuMmYgICAgICAgICAoZmxvYXQgICBfX3ksIGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZs
b2F0ICAgICAgICAgX19hdGFuMmYgICAgICAgICAoZmxvYXQgICBfX3ksIGZsb2F0ICAgX194KSAg
ICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgY29zZiAgICAgICAgIChmbG9hdCAgIF9f
eCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29zZiAgICAgICAgIChmbG9hdCAgIF9f
eCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc2luZiAgICAgICAgIChmbG9hdCAg
IF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2luZiAgICAgICAgIChmbG9hdCAg
IF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgdGFuZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fdGFuZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgICA7CgoKCgoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvc2hm
ICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3No
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAg
c2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf
X3NpbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAg
ICAgICB0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAg
ICAgIF9fdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCiAKZXh0ZXJuICAgZmxv
YXQgICAgICAgICAgYWNvc2hmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZs
b2F0ICAgICAgICAgX19hY29zaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIGFzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRl
cm4gICBmbG9hdCAgICAgICAgIF9fYXNpbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK
IApleHRlcm4gICBmbG9hdCAgICAgICAgICBhdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAg
IDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2F0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkg
ICAgICA7CgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBleHBmICAgICAgICAgKGZsb2F0
ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19leHBmICAgICAgICAgKGZsb2F0
ICAgX194KSAgICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZyZXhwZiAg
ICAgICAgIChmbG9hdCAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICA7IGV4dGVybiAgIGZsb2F0
ICAgICAgICAgX19mcmV4cGYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCAqX19leHBvbmVudCkg
ICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxkZXhwZiAgICAgICAgIChmbG9hdCAg
IF9feCwgaW50IF9fZXhwb25lbnQpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xkZXhw
ZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4g
ICBmbG9hdCAgICAgICAgICBsb2dmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAg
IGZsb2F0ICAgICAgICAgX19sb2dmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgbG9nMTBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4
dGVybiAgIGZsb2F0ICAgICAgICAgX19sb2cxMGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAg
OwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBtb2RmZiAgICAgICAgIChmbG9hdCAgIF9feCwg
ZmxvYXQgICAqX19pcHRyKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19tb2RmZiAgICAg
ICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICAqX19pcHRyKSAgICAgIDsKCgogCmV4dGVybiAgIGZs
b2F0ICAgICAgICAgIGV4cG0xZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBm
bG9hdCAgICAgICAgIF9fZXhwbTFmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgbG9nMXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4
dGVybiAgIGZsb2F0ICAgICAgICAgX19sb2cxcGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAg
OwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBsb2diZiAgICAgICAgIChmbG9hdCAgIF9feCkg
ICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gp
ICAgICAgOwoKCgoKCgoKCgoKCiAKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgcG93ZiAgICAg
ICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAg
ICBfX3Bvd2YgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgc3FydGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0
ZXJuICAgZmxvYXQgICAgICAgICBfX3NxcnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK
CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGh5cG90ZiAgICAgICAgIChmbG9hdCAgIF9feCwg
ZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2h5cG90ZiAgICAgICAg
IChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAg
ICAgICAgIGNicnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19jYnJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKCiAKCiAKZXh0ZXJu
ICAgZmxvYXQgICAgICAgICAgY2VpbGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX2NlaWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAK
ZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZmFic2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgICBf
X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg
X19mYWJzZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19j
b25zdF9fKSAgKSAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbG9vcmYgICAgICAgICAo
ZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Zsb29yZiAgICAgICAg
IChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZtb2RmICAg
ICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgOyBleHRlcm4gICBmbG9hdCAgICAg
ICAgIF9fZm1vZGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgog
CgpleHRlcm4gIGludCAgICBfX2lzaW5mZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgICBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgaW50ICAgIF9fZmluaXRlZiAgICAgKGZs
b2F0ICAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIAoKZXh0ZXJu
ICBpbnQgICAgaXNpbmZmICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlZiAgICAgKGZsb2F0ICAgX192YWx1
ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCgoKCgoKZXh0ZXJuICAgZmxvYXQg
ICAgICAgICAgaW5mbmFuZiAgICAgICAgIChpbnQgX19lcnJvcikgICAgIF9fYXR0cmlidXRlX18g
KCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2luZm5hbmYgICAg
ICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkg
IDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZHJlbWYgICAgICAgICAoZmxvYXQgICBfX3gs
IGZsb2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19kcmVtZiAgICAgICAg
IChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAg
ICAgICAgc2lnbmlmaWNhbmRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZs
b2F0ICAgICAgICAgX19zaWduaWZpY2FuZGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoK
CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvcHlzaWduZiAgICAgICAgIChmbG9hdCAgIF9f
eCwgZmxvYXQgICBfX3kpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4
dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3B5c2lnbmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZs
b2F0ICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgoK
CgoKIApleHRlcm4gIGludCAgICBfX2lzbmFuZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmYgICAgIChm
bG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4g
ICBmbG9hdCAgICAgICAgICBqMGYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9fajBmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBmbG9hdCAg
ICAgICAgICBqMWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg
IF9fajFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICBq
bmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19q
bmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAg
eTBmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3kwZiAg
ICAgICAgIChmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgeTFmICAgICAg
ICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3kxZiAgICAgICAgIChm
bG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgeW5mICAgICAgICAgKGludCwg
ZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9feW5mICAgICAgICAgKGludCwg
ZmxvYXQgICkgICAgICA7CgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGVyZmYgICAgICAg
ICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZXJmZiAgICAgICAgIChm
bG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZXJmY2YgICAgICAgICAoZmxv
YXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZXJmY2YgICAgICAgICAoZmxvYXQg
ICkgICAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxnYW1tYWYgICAgICAgICAoZmxvYXQg
ICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZiAgICAgICAgIChmbG9hdCAg
KSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgdGdhbW1hZiAgICAgICAgIChmbG9hdCAg
KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX190Z2FtbWFmICAgICAgICAgKGZsb2F0ICAp
ICAgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGdhbW1hZiAgICAgICAgIChmbG9h
dCAgKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19nYW1tYWYgICAgICAgICAoZmxvYXQg
ICkgICAgICA7CgoKCiAKCgpleHRlcm4gICBmbG9hdCAgICAgICAgICBsZ2FtbWFmX3IgICAgICAg
ICAgICAoZmxvYXQgICwgaW50ICpfX3NpZ25nYW1wKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAg
ICAgX19sZ2FtbWFmX3IgICAgICAgICAgICAoZmxvYXQgICwgaW50ICpfX3NpZ25nYW1wKSAgICAg
IDsKCgoKCiAKCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHJpbnRmICAgICAgICAgKGZsb2F0ICAg
X194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19yaW50ZiAgICAgICAgIChmbG9hdCAg
IF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG5leHRhZnRlcmYgICAgICAg
ICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2Nv
bnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbmV4dGFmdGVyZiAgICAgICAgIChm
bG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3Rf
XykgICkgIDsKCgoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgcmVtYWluZGVyZiAgICAgICAg
IChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf
X3JlbWFpbmRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgog
CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNjYWxiZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxv
YXQgICBfX24pICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NjYWxiZiAgICAgICAgIChm
bG9hdCAgIF9feCwgZmxvYXQgICBfX24pICAgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAg
ICAgc2NhbGJuZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fbikgICAgOyBleHRlcm4gICBm
bG9hdCAgICAgICAgIF9fc2NhbGJuZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fbikgICAg
ICA7CgogCmV4dGVybiAgIGludCAgICAgICBpbG9nYmYgICAgICAgKGZsb2F0ICAgX194KSAgIDsg
ZXh0ZXJuICAgaW50ICAgICAgIF9faWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICAgOwoKCiMg
MzM2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA4MiAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMiAzCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhY29zbCAgICAgICAg
IChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9f
YWNvc2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgIGFzaW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCkgICAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYXRhbmwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X2F0YW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKIApleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgICBhdGFuMmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3ksIGxvbmcg
ZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hdGFuMmwg
ICAgICAgICAobG9uZyBkb3VibGUgICBfX3ksIGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCiAK
ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY29zbCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY29zbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAg
c2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgIF9fc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CiAKZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgdGFubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f
eCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fdGFubCAgICAgICAgIChsb25n
IGRvdWJsZSAgIF9feCkgICAgICA7CgoKCgoKCgogCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgIGNvc2hsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgX19jb3NobCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg
ICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgc2luaGwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3NpbmhsICAg
ICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgICB0YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgIF9fdGFuaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg
ICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYWNvc2hsICAgICAgICAgKGxv
bmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hY29z
aGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGxvbmcgZG91
YmxlICAgICAgICAgIGFzaW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRl
cm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXNpbmhsICAgICAgICAgKGxvbmcgZG91YmxlICAg
X194KSAgICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhdGFuaGwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X2F0YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgoKIAoKIApleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgICBleHBsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAg
ICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19leHBsICAgICAgICAgKGxvbmcgZG91
YmxlICAgX194KSAgICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
IGZyZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICA7
IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19mcmV4cGwgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gsIGludCAqX19leHBvbmVudCkgICAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgIGxkZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50IF9fZXhwb25l
bnQpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xkZXhwbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgICBsb2dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sb2dsICAgICAgICAgKGxvbmcgZG91YmxlICAg
X194KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgbG9nMTBsICAgICAg
ICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
X19sb2cxMGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBtb2RmbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9u
ZyBkb3VibGUgICAqX19pcHRyKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19t
b2RmbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICAqX19pcHRyKSAg
ICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGV4cG0xbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXhw
bTFsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBk
b3VibGUgICAgICAgICAgbG9nMXBsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sb2cxcGwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gpICAgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsb2dibCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
IF9fbG9nYmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwoKCgoKCgoKCgoKCiAK
CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgcG93bCAgICAgICAgIChsb25nIGRvdWJs
ZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg
ICAgICBfX3Bvd2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195
KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgc3FydGwgICAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3Nx
cnRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgIGh5cG90bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBk
b3VibGUgICBfX3kpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2h5cG90bCAg
ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgICAgOwoKCgog
CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGNicnRsICAgICAgICAgKGxvbmcgZG91Ymxl
ICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19jYnJ0bCAgICAgICAg
IChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgoKCiAKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUg
ICAgICAgICAgY2VpbGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAg
bG9uZyBkb3VibGUgICAgICAgICBfX2NlaWxsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAg
ICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZmFic2wgICAgICAgICAobG9u
ZyBkb3VibGUgICBfX3gpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19mYWJzbCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKIApleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgICBmbG9vcmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp
ICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Zsb29ybCAgICAgICAgIChsb25n
IGRvdWJsZSAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGZt
b2RsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgOyBl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZm1vZGwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgIDsKCgogCgpleHRlcm4gIGludCAgICBfX2lz
aW5mbCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgogCmV4dGVybiAgaW50ICAgIF9fZmluaXRlbCAgICAgKGxvbmcgZG91YmxlICAgX192
YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIAoKZXh0ZXJuICBpbnQgICAg
aXNpbmZsICAgICAobG9uZyBkb3VibGUgICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlbCAgICAgKGxvbmcgZG91YmxlICAgX192
YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCgoKCgoKZXh0ZXJuICAgbG9u
ZyBkb3VibGUgICAgICAgICAgaW5mbmFubCAgICAgICAgIChpbnQgX19lcnJvcikgICAgIF9fYXR0
cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICBfX2luZm5hbmwgICAgICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAg
KF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZHJlbWwg
ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICA7IGV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgX19kcmVtbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f
eCwgbG9uZyBkb3VibGUgICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg
ICAgICAgc2lnbmlmaWNhbmRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgX19zaWduaWZpY2FuZGwgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gpICAgICAgOwoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGNvcHlz
aWdubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgICBf
X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19jb3B5c2lnbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91Ymxl
ICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgoKCgoK
IApleHRlcm4gIGludCAgICBfX2lzbmFubCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgICBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmwgICAg
IChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
IApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBqMGwgICAgICAgICAobG9uZyBkb3VibGUg
ICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fajBsICAgICAgICAgKGxvbmcg
ZG91YmxlICApICAgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBqMWwgICAgICAg
ICAobG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fajFs
ICAgICAgICAgKGxvbmcgZG91YmxlICApICAgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgICBqbmwgICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX19qbmwgICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICAgIDsK
ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgeTBsICAgICAgICAgKGxvbmcgZG91YmxlICAp
ICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3kwbCAgICAgICAgIChsb25nIGRv
dWJsZSAgKSAgICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgeTFsICAgICAgICAg
KGxvbmcgZG91YmxlICApICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3kxbCAg
ICAgICAgIChsb25nIGRvdWJsZSAgKSAgICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICAgeW5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgIF9feW5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgICA7CgoK
CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGVyZmwgICAgICAgICAobG9uZyBkb3Vi
bGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXJmbCAgICAgICAgIChs
b25nIGRvdWJsZSAgKSAgICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZXJmY2wg
ICAgICAgICAobG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
IF9fZXJmY2wgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CmV4dGVybiAgIGxvbmcgZG91
YmxlICAgICAgICAgIGxnYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgIF9fbGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAg
ICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgdGdhbW1hbCAgICAgICAgIChsb25n
IGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX190Z2FtbWFsICAg
ICAgICAgKGxvbmcgZG91YmxlICApICAgICAgOwoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgIGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX19nYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CgoK
CiAKCgpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsZ2FtbWFsX3IgICAgICAgICAgICAo
bG9uZyBkb3VibGUgICwgaW50ICpfX3NpZ25nYW1wKSAgICA7IGV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgX19sZ2FtbWFsX3IgICAgICAgICAgICAobG9uZyBkb3VibGUgICwgaW50ICpfX3Np
Z25nYW1wKSAgICAgIDsKCgoKCiAKCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHJpbnRs
ICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19yaW50bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgogCmV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgIG5leHRhZnRlcmwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0
X18pICApOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbmV4dGFmdGVybCAgICAgICAg
IChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgICBfX2F0dHJpYnV0ZV9f
ICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICAgcmVtYWluZGVybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBf
X3kpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3JlbWFpbmRlcmwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgIDsKCgogCmV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgIHNjYWxibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f
eCwgbG9uZyBkb3VibGUgICBfX24pICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X3NjYWxibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX24pICAg
ICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgc2NhbGJubCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCwgaW50IF9fbikgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgIF9fc2NhbGJubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50IF9fbikgICAgICA7
CgogCmV4dGVybiAgIGludCAgICAgICBpbG9nYmwgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAg
IDsgZXh0ZXJuICAgaW50ICAgICAgIF9faWxvZ2JsICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkg
ICAgOwoKCiMgMzM2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA5OSAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKCgoKCgoKCgogCmV4dGVybiBpbnQgc2lnbmdhbTsK
CgoKIAojIDIzMiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCgogCnR5cGVkZWYgZW51bQp7CiAg
X0lFRUVfID0gLTEsCSAKICBfU1ZJRF8sCSAKICBfWE9QRU5fLAkgCiAgX1BPU0lYXywKICBfSVNP
Q18JIAp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKIAoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBf
TElCX1ZFUlNJT047CgoKCgogCgoKCgoKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50
IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsK
ICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgIChzdHJ1Y3QgX19l
eGNlcHRpb24gKl9fZXhjKSAgdGhyb3cgKCkgIDsKCgoKCgoKIAoKCgoKCgoKIAoKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvZmxvYXQuaCIg
MSAzCiAKCgoKIAoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg
IAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg
IAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCiAgICAKCgogICAgCgoKICAg
IAoKCgp1bmlvbiBfX2NvbnZlcnRfbG9uZ19kb3VibGUgewogIHVuc2lnbmVkIF9fY29udmVydF9s
b25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9kOwp9
OwoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCgoKIyAyODkgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMjk5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDMzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCgog
CgoKCgoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu
bGluZS5oIiAzCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKX19p
bmxpbmUgICBkb3VibGUgICAgIF9fc2duICAgKCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUg
ICAgIF9fc2duICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZXR1cm4gX194ID09IDAu
MCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKSAgOwl9IAlfX2lubGluZSAgIGZsb2F0
ICAgICAgX19zZ25mICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIF9fc2duZiAg
ICAoIGZsb2F0ICAgICAgX194ICApCXsJICAgICAgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAo
X194ID4gMC4wID8gMS4wIDogLTEuMCkgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAg
IF9fc2dubCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBf
X3NnbmwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBfX3ggPT0g
MC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApICA7CX0gIAoKCl9faW5saW5lICAg
ZG91YmxlICAgICBfX3BvdzIgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgX19w
b3cyICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJCQkJ
CSAgICAgICAgX19leHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50
KSBfX3g7CQkgICAgICAgIGlmIChfX3ggPT0gKGxvbmcgZG91YmxlKSBfX3ApCQkJCQkJICAgICAg
ICAgIHsJCQkJCQkJCQkgICAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkgICAgICAJ
KCJmc2NhbGUiCQkJCQkJCSAgICAgIAkgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUi
IChfX3gpKTsJCQkgICAgICAgICAgICByZXR1cm4gX192YWx1ZTsJCQkJCQkJICAgICAgICAgIH0J
CQkJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmbGQJ
JSVzdCgwKVxuXHQiCQkJCQkJICAgICAgICAgICAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIJCQkJ
ICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCQkgICAgICAgICAgICJmc3ViCSUlc3QoMSkJCSMg
ZnJhY3QoeClcblx0IgkJCQkgICAgICAgICAgICJmMnhtMQkJCSMgMl4oZnJhY3QoeCkpIC0gMVxu
XHQiCQkJICAgICAgICAgICA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIw
IiAoX194KSk7CQkJICAgICAgICBfX3ZhbHVlICs9IDEuMDsJCQkJCQkJICAgICAgICBfX2FzbSBf
X3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnNjYWxlIgkJCQkJCQkJICAgICAgICAgICA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7CQkgICAg
ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBfX3BvdzJmICAg
ICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIF9fcG93MmYgICAgKCBmbG9hdCAgICAg
IF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAg
ICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwkJCQkJICAgICAgICBfX2V4dGVuc2lv
bl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQpIF9feDsJCSAgICAgICAgaWYg
KF9feCA9PSAobG9uZyBkb3VibGUpIF9fcCkJCQkJCQkgICAgICAgICAgewkJCQkJCQkJCSAgICAg
ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCSAgICAgIAkoImZzY2FsZSIJCQkJCQkJICAg
ICAgCSA6ICI9dCIgKF9fdmFsdWUpIDogIjAiICgxLjApLCAidSIgKF9feCkpOwkJCSAgICAgICAg
ICAgIHJldHVybiBfX3ZhbHVlOwkJCQkJCQkgICAgICAgICAgfQkJCQkJCQkJCSAgICAgICAgX19h
c20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZsZAklJXN0KDApXG5cdCIJCQkJCQkg
ICAgICAgICAgICJmcm5kaW50CQkJIyBpbnQoeClcblx0IgkJCQkgICAgICAgICAgICJmeGNoXG5c
dCIJCQkJCQkJCSAgICAgICAgICAgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4KVxuXHQiCQkJCSAg
ICAgICAgICAgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIJCQkgICAgICAgICAgIDog
Ij10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsJCQkgICAgICAg
IF9fdmFsdWUgKz0gMS4wOwkJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkg
ICAgICAgICAgKCJmc2NhbGUiCQkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUg
IDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIF9fcG93MmwgICAgKCBsb25nIGRvdWJs
ZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgX19wb3cybCAgICAoIGxvbmcgZG91Ymxl
ICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkg
ICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CQkJCQkgICAgICAgIF9fZXh0
ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194OwkJICAgICAg
ICBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKQkJCQkJCSAgICAgICAgICB7CQkJCQkJCQkJ
ICAgICAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJICAgICAgCSgiZnNjYWxlIgkJCQkJ
CQkgICAgICAJIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKDEuMCksICJ1IiAoX194KSk7CQkJICAg
ICAgICAgICAgcmV0dXJuIF9fdmFsdWU7CQkJCQkJCSAgICAgICAgICB9CQkJCQkJCQkJICAgICAg
ICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZmxkCSUlc3QoMClcblx0IgkJ
CQkJCSAgICAgICAgICAgImZybmRpbnQJCQkjIGludCh4KVxuXHQiCQkJCSAgICAgICAgICAgImZ4
Y2hcblx0IgkJCQkJCQkJICAgICAgICAgICAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIJ
CQkJICAgICAgICAgICAiZjJ4bTEJCQkjIDJeKGZyYWN0KHgpKSAtIDFcblx0IgkJCSAgICAgICAg
ICAgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOwkJCSAg
ICAgICAgX192YWx1ZSArPSAxLjA7CQkJCQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJ
CQkJCSAgICAgICAgICAoImZzY2FsZSIJCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVl
KSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOwkJICAgICAgICByZXR1cm4gX192
YWx1ZSAgOwl9ICAKIyAyNjAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKCiMg
MjgyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCl9faW5saW5lICB2b2lkIF9f
c2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwpfX2lu
bGluZSAgdm9pZApfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAq
X19jb3N4KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19jb3NyOwlyZWdpc3RlciBsb25nIGRv
dWJsZSBfX3NpbnI7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZzaW5jb3Ncblx0IgkiZm5zdHN3CSUl
YXhcblx0IgkidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiCSJqegkxZlxuXHQiCSJmbGRwaVxuXHQi
CSJmYWRkCSUlc3QoMClcblx0IgkiZnhjaAklJXN0KDEpXG5cdCIJIjI6IGZwcmVtMVxuXHQiCSJm
bnN0c3cJJSVheFxuXHQiCSJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIJImpuegkyYlxuXHQiCSJm
c3RwCSUlc3QoMSlcblx0IgkiZnNpbmNvc1xuXHQiCSIxOiIJOiAiPXQiIChfX2Nvc3IpLCAiPXUi
IChfX3NpbnIpIDogIjAiIChfX3gpKTsJKl9fc2lueCA9IF9fc2lucjsJKl9fY29zeCA9IF9fY29z
ciA7Cn0KCl9faW5saW5lICB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54
LCBmbG9hdCAqX19jb3N4KTsKX19pbmxpbmUgIHZvaWQKX19zaW5jb3NmIChmbG9hdCBfX3gsIGZs
b2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2Nv
c3I7CXJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fc2lucjsJX19hc20gX192b2xhdGlsZV9fCSgiZnNp
bmNvc1xuXHQiCSJmbnN0c3cJJSVheFxuXHQiCSJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIJImp6
CTFmXG5cdCIJImZsZHBpXG5cdCIJImZhZGQJJSVzdCgwKVxuXHQiCSJmeGNoCSUlc3QoMSlcblx0
IgkiMjogZnByZW0xXG5cdCIJImZuc3RzdwklJWF4XG5cdCIJInRlc3RsCSQweDQwMCwgJSVlYXhc
blx0Igkiam56CTJiXG5cdCIJImZzdHAJJSVzdCgxKVxuXHQiCSJmc2luY29zXG5cdCIJIjE6Igk6
ICI9dCIgKF9fY29zciksICI9dSIgKF9fc2lucikgOiAiMCIgKF9feCkpOwkqX19zaW54ID0gX19z
aW5yOwkqX19jb3N4ID0gX19jb3NyIDsKfQoKX19pbmxpbmUgIHZvaWQgX19zaW5jb3NsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsCgkJCSAgICAgIGxvbmcgZG91YmxlICpf
X2Nvc3gpOwpfX2lubGluZSAgdm9pZApfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkKewogIHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fY29zcjsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19zaW5yOwlfX2FzbSBfX3ZvbGF0aWxl
X18JKCJmc2luY29zXG5cdCIJImZuc3RzdwklJWF4XG5cdCIJInRlc3RsCSQweDQwMCwgJSVlYXhc
blx0IgkianoJMWZcblx0IgkiZmxkcGlcblx0IgkiZmFkZAklJXN0KDApXG5cdCIJImZ4Y2gJJSVz
dCgxKVxuXHQiCSIyOiBmcHJlbTFcblx0IgkiZm5zdHN3CSUlYXhcblx0IgkidGVzdGwJJDB4NDAw
LCAlJWVheFxuXHQiCSJqbnoJMmJcblx0IgkiZnN0cAklJXN0KDEpXG5cdCIJImZzaW5jb3Ncblx0
IgkiMToiCTogIj10IiAoX19jb3NyKSwgIj11IiAoX19zaW5yKSA6ICIwIiAoX194KSk7CSpfX3Np
bnggPSBfX3NpbnI7CSpfX2Nvc3ggPSBfX2Nvc3IgOwp9CgoKIAoKCgojIDMyOCAiL3Vzci9pbmNs
dWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lICAgbG9uZyBkb3VibGUgICAgX19leHBt
MWwgICggbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2V4cG0xbCAg
KCBsb25nIGRvdWJsZSAgICBfX3ggKQl7CSAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJ
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190
ZW1wOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9n
MihlKSkgLSAxXG5cdCIJImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiCSJmc3QJJSVz
dCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIJImZ4Y2hcblx0Igki
ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiCSJmMnhtMQkJCSMgMl4oZnJh
Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IgkiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAy
XihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25l
bnQpIDogIjAiIChfX3gpKTsJX19hc20gX192b2xhdGlsZV9fCSgiZnNjYWxlCQkJIyAyXmludCh4
ICogbG9nMihlKSlcblx0Igk6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBv
bmVudCkpOwlfX3RlbXAgLT0gMS4wOwlyZXR1cm4gX190ZW1wICsgX192YWx1ZSAgOwl9IAoKCgoj
IDM0OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lICAgZG91Ymxl
ICAgICBleHAgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgZXhwICAgKCBkb3Vi
bGUgICAgICBfX3ggICkJewkgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJX19hc20gX192b2xhdGlsZV9fCSgiZmxkbDJlCQkJ
IyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IgkiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUp
XG5cdCIJImZzdAklJXN0KDEpXG5cdCIJImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0
IgkiZnhjaFxuXHQiCSJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIJImYy
eG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiCTogIj10IiAoX192YWx1ZSks
ICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsJX192YWx1ZSArPSAxLjA7CV9fYXNtIF9f
dm9sYXRpbGVfXwkoImZzY2FsZSIJOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1
IiAoX19leHBvbmVudCkpOwlyZXR1cm4gX192YWx1ZSAgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAg
ICAgIGV4cGYgICAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgZXhwZiAgICAoIGZs
b2F0ICAgICAgX194ICApCXsJICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CXJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZsZGwyZQkJ
CSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIJImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihl
KVxuXHQiCSJmc3QJJSVzdCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5c
dCIJImZ4Y2hcblx0IgkiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiCSJm
MnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0Igk6ICI9dCIgKF9fdmFsdWUp
LCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7CV9fdmFsdWUgKz0gMS4wOwlfX2FzbSBf
X3ZvbGF0aWxlX18JKCJmc2NhbGUiCTogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAi
dSIgKF9fZXhwb25lbnQpKTsJcmV0dXJuIF9fdmFsdWUgICA7CX0gCV9faW5saW5lICAgbG9uZyBk
b3VibGUgICAgICBleHBsICAgICggbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJs
ZSAgICAgIGV4cGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOwlyZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwlfX2Fz
bSBfX3ZvbGF0aWxlX18JKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiCSJm
bXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IgkiZnN0CSUlc3QoMSlcblx0IgkiZnJuZGlu
dAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiCSJmeGNoXG5cdCIJImZzdWIJJSVzdCgxKQkJIyBm
cmFjdCh4ICogbG9nMihlKSlcblx0IgkiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkg
LSAxXG5cdCIJOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkp
OwlfX3ZhbHVlICs9IDEuMDsJX19hc20gX192b2xhdGlsZV9fCSgiZnNjYWxlIgk6ICI9dCIgKF9f
dmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7CXJldHVybiBfX3ZhbHVl
ICAgOwl9ICAKX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2V4cGwgICggbG9uZyBkb3VibGUg
KTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2V4cGwgICggbG9uZyBkb3VibGUgICAgX194
ICkJewkgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CXJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fZXhwb25lbnQ7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAq
IGxvZzIoZSkpXG5cdCIJImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiCSJmc3QJJSVz
dCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIJImZ4Y2hcblx0Igki
ZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiCSJmMnhtMQkJCSMgMl4oZnJh
Y3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0Igk6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9u
ZW50KSA6ICIwIiAoX194KSk7CV9fdmFsdWUgKz0gMS4wOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJm
c2NhbGUiCTogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQp
KTsJcmV0dXJuIF9fdmFsdWUgIDsJfSAKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgdGFuICAgKCBk
b3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIHRhbiAgICggZG91YmxlICAgICAgX194ICAp
CXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CQkg
ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmcHRhbiIJCQkJCQkJ
CSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gp
KTsJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICB0
YW5mICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIHRhbmYgICAgKCBmbG9hdCAg
ICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAg
ICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0dHJpYnV0ZV9fICgoX191bnVz
ZWRfXykpOwkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnB0
YW4iCQkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSk7CQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxv
bmcgZG91YmxlICAgICAgdGFubCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBk
b3VibGUgICAgICB0YW5sICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsJCSAgICAgICAgX19hc20g
X192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZwdGFuIgkJCQkJCQkJICAgICAgICAgICA6
ICI9dCIgKF9fdmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOwkJCSAgICAgICAg
cmV0dXJuIF9fdmFsdWUgIDsJfSAgCgoKCgoKCgoKCgoKCgoKX19pbmxpbmUgICBkb3VibGUgICAg
IGF0YW4yICAgKCBkb3VibGUgLCAgZG91YmxlICk7CV9faW5saW5lICAgZG91YmxlICAgICBhdGFu
MiAgICggZG91YmxlICAgICAgX195ICAsICBkb3VibGUgICAgICBfX3ggICkJewkgICAgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJX19hc20gX192b2xhdGlsZV9fCSgiZnBhdGFuIgk6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsJcmV0dXJuIF9f
dmFsdWUgICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhdGFuMmYgICAgKCBmbG9hdCAsICBm
bG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgYXRhbjJmICAgICggZmxvYXQgICAgICBfX3kg
ICwgIGZsb2F0ICAgICAgX194ICApCXsJICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7
CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZwYXRhbiIJOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSwgInUiIChfX3kpIDogInN0KDEpIik7CXJldHVybiBfX3ZhbHVlICAgOwl9IAlfX2lubGluZSAg
IGxvbmcgZG91YmxlICAgICAgYXRhbjJsICAgICggbG9uZyBkb3VibGUgLCAgbG9uZyBkb3VibGUg
KTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGF0YW4ybCAgICAoIGxvbmcgZG91YmxlICAg
ICAgX195ICAsICBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3ZhbHVlOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmcGF0YW4iCTogIj10IiAoX192YWx1
ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOwlyZXR1cm4gX192YWx1ZSAgIDsJ
fSAgCl9faW5saW5lICAgbG9uZyBkb3VibGUgICAgX19hdGFuMmwgICggbG9uZyBkb3VibGUgLCAg
bG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2F0YW4ybCAgKCBsb25n
IGRvdWJsZSAgICBfX3kgLCAgbG9uZyBkb3VibGUgICAgX194ICkJewkgIHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZwYXRhbiIJOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7CXJldHVybiBfX3ZhbHVlICA7
CX0gCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGZtb2QgICAoIGRvdWJsZSAsICBkb3VibGUgKTsJ
X19pbmxpbmUgICBkb3VibGUgICAgIGZtb2QgICAoIGRvdWJsZSAgICAgIF9feCAgLCAgZG91Ymxl
ICAgICAgX195ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkg
ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbVxuXHQi
CQkJCQkJICAgICAgICAgICAiZm5zdHN3CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZc
blx0IgkJCQkJCQkJICAgICAgICAgICAianAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7CQkgICAgICAgIHJl
dHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBmbW9kZiAgICAoIGZsb2F0
ICwgIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBmbW9kZiAgICAoIGZsb2F0ICAgICAg
X194ICAsICBmbG9hdCAgICAgIF9feSAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7CQkJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgi
MToJZnByZW1cblx0IgkJCQkJCSAgICAgICAgICAgImZuc3RzdwklJWF4XG5cdCIJCQkJCQkgICAg
ICAgICAgICJzYWhmXG5cdCIJCQkJCQkJCSAgICAgICAgICAgImpwCTFiIgkJCQkJCQkgICAgICAg
ICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIp
OwkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAg
ICAgZm1vZGwgICAgKCBsb25nIGRvdWJsZSAsICBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxv
bmcgZG91YmxlICAgICAgZm1vZGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBk
b3VibGUgICAgICBfX3kgICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJ
CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoIjE6CWZwcmVt
XG5cdCIJCQkJCQkgICAgICAgICAgICJmbnN0c3cJJSVheFxuXHQiCQkJCQkJICAgICAgICAgICAi
c2FoZlxuXHQiCQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJCQkJCQkJICAgICAgICAgICA6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsJCSAgICAg
ICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAgCiMgMzgwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgcG93ICAgKCBkb3VibGUgLCAgZG91Ymxl
ICk7CV9faW5saW5lICAgZG91YmxlICAgICBwb3cgICAoIGRvdWJsZSAgICAgIF9feCAgLCAgZG91
YmxlICAgICAgX195ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ
CQkgICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CQkJCQkgICAgICAgIF9f
ZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX195OwkJICAg
ICAgICBpZiAoX194ID09IDAuMCAmJiBfX3kgPiAwLjApCQkJCQkJICAgICAgICAgIHJldHVybiAw
LjA7CQkJCQkJCQkgICAgICAgIGlmIChfX3kgPT0gKGRvdWJsZSkgX19wKQkJCQkJCSAgICAgICAg
ICB7CQkJCQkJCQkJICAgICAgICAgICAgbG9uZyBkb3VibGUgX19yID0gMS4wOwkJCQkJCSAgICAg
ICAgICAgIGlmIChfX3AgPT0gMCkJCQkJCQkJICAgICAgCXJldHVybiAxLjA7CQkJCQkJCSAgICAg
ICAgICAgIGlmIChfX3AgPCAwKQkJCQkJCQkgICAgICAJewkJCQkJCQkJICAgICAgCSAgX19wID0g
LV9fcDsJCQkJCQkJICAgICAgCSAgX194ID0gMS4wIC8gX194OwkJCQkJCSAgICAgIAl9CQkJCQkJ
CQkgICAgICAgICAgICB3aGlsZSAoMSkJCQkJCQkJCSAgICAgIAl7CQkJCQkJCQkgICAgICAJICBp
ZiAoX19wICYgMSkJCQkJCQkJICAgICAgCSAgICBfX3IgKj0gX194OwkJCQkJCQkgICAgICAJICBf
X3AgPj49IDE7CQkJCQkJCSAgICAgIAkgIGlmIChfX3AgPT0gMCkJCQkJCQkJICAgICAgCSAgICBy
ZXR1cm4gX19yOwkJCQkJCQkgICAgICAJICBfX3ggKj0gX194OwkJCQkJCQkgICAgICAJfQkJCQkJ
CQkJICAgICAgICAgICAgIAkJCQkJCQkgICAgICAgICAgfQkJCQkJCQkJCSAgICAgICAgX19hc20g
X192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZ5bDJ4IiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpLCAidSIgKDEuMCkgOiAic3QoMSkiKTsJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxl
X18JCQkJCQkJICAgICAgICAgICgiZm11bAklJXN0KDEpCQkjIHkgKiBsb2cyKHgpXG5cdCIJCQkg
ICAgICAgICAgICJmc3QJJSVzdCgxKVxuXHQiCQkJCQkJICAgICAgICAgICAiZnJuZGludAkJCSMg
aW50KHkgKiBsb2cyKHgpKVxuXHQiCQkJICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCQkgICAg
ICAgICAgICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeSAqIGxvZzIoeCkpXG5cdCIJCSAgICAgICAg
ICAgImYyeG0xCQkJIyAyXihmcmFjdCh5ICogbG9nMih4KSkpIC0gMVxuXHQiCSAgICAgICAgICAg
OiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feSksICIxIiAoX192
YWx1ZSkpOwkgICAgICAgIF9fdmFsdWUgKz0gMS4wOwkJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9s
YXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmc2NhbGUiCQkJCQkJCQkgICAgICAgICAgIDogIj10
IiAoX192YWx1ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsJCSAgICAgICAg
cmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIHBvd2YgICAgKCBmbG9h
dCAsICBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgcG93ZiAgICAoIGZsb2F0ICAgICAg
X194ICAsICBmbG9hdCAgICAgIF9feSAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7CQkJCQkJICAgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwkJCQkJ
ICAgICAgICBfX2V4dGVuc2lvbl9fIGxvbmcgbG9uZyBpbnQgX19wID0gKGxvbmcgbG9uZyBpbnQp
IF9feTsJCSAgICAgICAgaWYgKF9feCA9PSAwLjAgJiYgX195ID4gMC4wKQkJCQkJCSAgICAgICAg
ICByZXR1cm4gMC4wOwkJCQkJCQkJICAgICAgICBpZiAoX195ID09IChkb3VibGUpIF9fcCkJCQkJ
CQkgICAgICAgICAgewkJCQkJCQkJCSAgICAgICAgICAgIGxvbmcgZG91YmxlIF9fciA9IDEuMDsJ
CQkJCQkgICAgICAgICAgICBpZiAoX19wID09IDApCQkJCQkJCSAgICAgIAlyZXR1cm4gMS4wOwkJ
CQkJCQkgICAgICAgICAgICBpZiAoX19wIDwgMCkJCQkJCQkJICAgICAgCXsJCQkJCQkJCSAgICAg
IAkgIF9fcCA9IC1fX3A7CQkJCQkJCSAgICAgIAkgIF9feCA9IDEuMCAvIF9feDsJCQkJCQkgICAg
ICAJfQkJCQkJCQkJICAgICAgICAgICAgd2hpbGUgKDEpCQkJCQkJCQkgICAgICAJewkJCQkJCQkJ
ICAgICAgCSAgaWYgKF9fcCAmIDEpCQkJCQkJCSAgICAgIAkgICAgX19yICo9IF9feDsJCQkJCQkJ
ICAgICAgCSAgX19wID4+PSAxOwkJCQkJCQkgICAgICAJICBpZiAoX19wID09IDApCQkJCQkJCSAg
ICAgIAkgICAgcmV0dXJuIF9fcjsJCQkJCQkJICAgICAgCSAgX194ICo9IF9feDsJCQkJCQkJICAg
ICAgCX0JCQkJCQkJCSAgICAgICAgICAgICAJCQkJCQkJICAgICAgICAgIH0JCQkJCQkJCQkgICAg
ICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmeWwyeCIgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgxLjApIDogInN0KDEpIik7CSAgICAgICAgX19hc20g
X192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4
KVxuXHQiCQkJICAgICAgICAgICAiZnN0CSUlc3QoMSlcblx0IgkJCQkJCSAgICAgICAgICAgImZy
bmRpbnQJCQkjIGludCh5ICogbG9nMih4KSlcblx0IgkJCSAgICAgICAgICAgImZ4Y2hcblx0IgkJ
CQkJCQkJICAgICAgICAgICAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgpKVxuXHQi
CQkgICAgICAgICAgICJmMnhtMQkJCSMgMl4oZnJhY3QoeSAqIGxvZzIoeCkpKSAtIDFcblx0Igkg
ICAgICAgICAgIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3kp
LCAiMSIgKF9fdmFsdWUpKTsJICAgICAgICBfX3ZhbHVlICs9IDEuMDsJCQkJCQkJICAgICAgICBf
X2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnNjYWxlIgkJCQkJCQkJICAgICAg
ICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7
CQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAg
ICBwb3dsICAgICggbG9uZyBkb3VibGUgLCAgbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25n
IGRvdWJsZSAgICAgIHBvd2wgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBkb3Vi
bGUgICAgICBfX3kgICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJ
CSAgICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsJCQkJCSAgICAgICAgX19l
eHRlbnNpb25fXyBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBfX3k7CQkgICAg
ICAgIGlmIChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkJCQkJCQkgICAgICAgICAgcmV0dXJuIDAu
MDsJCQkJCQkJCSAgICAgICAgaWYgKF9feSA9PSAoZG91YmxlKSBfX3ApCQkJCQkJICAgICAgICAg
IHsJCQkJCQkJCQkgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3IgPSAxLjA7CQkJCQkJICAgICAg
ICAgICAgaWYgKF9fcCA9PSAwKQkJCQkJCQkgICAgICAJcmV0dXJuIDEuMDsJCQkJCQkJICAgICAg
ICAgICAgaWYgKF9fcCA8IDApCQkJCQkJCSAgICAgIAl7CQkJCQkJCQkgICAgICAJICBfX3AgPSAt
X19wOwkJCQkJCQkgICAgICAJICBfX3ggPSAxLjAgLyBfX3g7CQkJCQkJICAgICAgCX0JCQkJCQkJ
CSAgICAgICAgICAgIHdoaWxlICgxKQkJCQkJCQkJICAgICAgCXsJCQkJCQkJCSAgICAgIAkgIGlm
IChfX3AgJiAxKQkJCQkJCQkgICAgICAJICAgIF9fciAqPSBfX3g7CQkJCQkJCSAgICAgIAkgIF9f
cCA+Pj0gMTsJCQkJCQkJICAgICAgCSAgaWYgKF9fcCA9PSAwKQkJCQkJCQkgICAgICAJICAgIHJl
dHVybiBfX3I7CQkJCQkJCSAgICAgIAkgIF9feCAqPSBfX3g7CQkJCQkJCSAgICAgIAl9CQkJCQkJ
CQkgICAgICAgICAgICAgCQkJCQkJCSAgICAgICAgICB9CQkJCQkJCQkJICAgICAgICBfX2FzbSBf
X3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnlsMngiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9feCksICJ1IiAoMS4wKSA6ICJzdCgxKSIpOwkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVf
XwkJCQkJCQkgICAgICAgICAgKCJmbXVsCSUlc3QoMSkJCSMgeSAqIGxvZzIoeClcblx0IgkJCSAg
ICAgICAgICAgImZzdAklJXN0KDEpXG5cdCIJCQkJCQkgICAgICAgICAgICJmcm5kaW50CQkJIyBp
bnQoeSAqIGxvZzIoeCkpXG5cdCIJCQkgICAgICAgICAgICJmeGNoXG5cdCIJCQkJCQkJCSAgICAg
ICAgICAgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh5ICogbG9nMih4KSlcblx0IgkJICAgICAgICAg
ICAiZjJ4bTEJCQkjIDJeKGZyYWN0KHkgKiBsb2cyKHgpKSkgLSAxXG5cdCIJICAgICAgICAgICA6
ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX195KSwgIjEiIChfX3Zh
bHVlKSk7CSAgICAgICAgX192YWx1ZSArPSAxLjA7CQkJCQkJCSAgICAgICAgX19hc20gX192b2xh
dGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZzY2FsZSIJCQkJCQkJCSAgICAgICAgICAgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOwkJICAgICAgICBy
ZXR1cm4gX192YWx1ZSAgOwl9ICAKIyA0MjQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu
aCIgMwoKCl9faW5saW5lICAgIGRvdWJsZSAgICAgICAgc3FydCAgICAoICBkb3VibGUgICk7CV9f
aW5saW5lICAgIGRvdWJsZSAgICAgICAgc3FydCAgICAoICBkb3VibGUgICBfX3gpCXsJcmVnaXN0
ZXIgICBkb3VibGUgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgICAiZnNxcnQi
ICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9
ICAJX19pbmxpbmUgICAgZmxvYXQgICAgICAgICBzcXJ0ZiAgICAgKCAgZmxvYXQgICk7CV9faW5s
aW5lICAgIGZsb2F0ICAgICAgICAgc3FydGYgICAgICggIGZsb2F0ICAgX194KQl7CXJlZ2lzdGVy
ICAgZmxvYXQgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgICAiZnNxcnQiICAg
IDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAJ
X19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAgICAgICBzcXJ0bCAgICAgKCAgbG9uZyBkb3VibGUg
ICk7CV9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAgICAgc3FydGwgICAgICggIGxvbmcgZG91
YmxlICAgX194KQl7CXJlZ2lzdGVyICAgbG9uZyBkb3VibGUgICBfX3Jlc3VsdDsJX19hc20gX192
b2xhdGlsZV9fICggICAgICAiZnNxcnQiICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9f
eCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAgCl9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAg
IF9fc3FydGwgICAoICBsb25nIGRvdWJsZSAgKTsJX19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAg
ICAgX19zcXJ0bCAgICggIGxvbmcgZG91YmxlICAgX194KQl7CXJlZ2lzdGVyICAgbG9uZyBkb3Vi
bGUgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZzcXJ0IiAgIDogIj10IiAo
X19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAKCgpfX2lubGlu
ZSAgIGRvdWJsZSAgICBmYWJzICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICBmYWJz
ICAoIGRvdWJsZSAgICBfX3ggKQl7CSAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpIDsJfSAK
X19pbmxpbmUgICBmbG9hdCAgICBmYWJzZiAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAg
IGZhYnNmICAoIGZsb2F0ICAgIF9feCApCXsJICByZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gp
IDsJfSAKX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBmYWJzbCAgKCBsb25nIGRvdWJsZSApOwlf
X2lubGluZSAgIGxvbmcgZG91YmxlICAgIGZhYnNsICAoIGxvbmcgZG91YmxlICAgIF9feCApCXsJ
ICByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpIDsJfSAKX19pbmxpbmUgICBsb25nIGRvdWJs
ZSAgICBfX2ZhYnNsICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAg
X19mYWJzbCAgKCBsb25nIGRvdWJsZSAgICBfX3ggKQl7CSAgcmV0dXJuIF9fYnVpbHRpbl9mYWJz
bCAoX194KSA7CX0gCgoKCgoKIApfX2lubGluZSAgICBkb3VibGUgICAgICAgIHNpbiAgICAoICBk
b3VibGUgICk7CV9faW5saW5lICAgIGRvdWJsZSAgICAgICAgc2luICAgICggIGRvdWJsZSAgIF9f
eCkJewlyZWdpc3RlciAgIGRvdWJsZSAgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18gKCAg
ICAgICJmc2luIiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgIjAiIChfX3gpICk7CXJldHVybiBf
X3Jlc3VsdDsJfSAgCV9faW5saW5lICAgIGZsb2F0ICAgICAgICAgc2luZiAgICAgKCAgZmxvYXQg
ICk7CV9faW5saW5lICAgIGZsb2F0ICAgICAgICAgc2luZiAgICAgKCAgZmxvYXQgICBfX3gpCXsJ
cmVnaXN0ZXIgICBmbG9hdCAgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18gKCAgICAgICJm
c2luIiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgIjAiIChfX3gpICk7CXJldHVybiBfX3Jlc3Vs
dDsJfSAgCV9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAgICAgc2lubCAgICAgKCAgbG9uZyBk
b3VibGUgICk7CV9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAgICAgc2lubCAgICAgKCAgbG9u
ZyBkb3VibGUgICBfX3gpCXsJcmVnaXN0ZXIgICBsb25nIGRvdWJsZSAgIF9fcmVzdWx0OwlfX2Fz
bSBfX3ZvbGF0aWxlX18gKCAgICAgICJmc2luIiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgIjAi
IChfX3gpICk7CXJldHVybiBfX3Jlc3VsdDsJfSAgIAogCl9faW5saW5lICAgIGRvdWJsZSAgICAg
ICAgY29zICAgICggIGRvdWJsZSAgKTsJX19pbmxpbmUgICAgZG91YmxlICAgICAgICBjb3MgICAg
KCAgZG91YmxlICAgX194KQl7CXJlZ2lzdGVyICAgZG91YmxlICAgX19yZXN1bHQ7CV9fYXNtIF9f
dm9sYXRpbGVfXyAoICAgICAgImZjb3MiICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9f
eCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAJX19pbmxpbmUgICAgZmxvYXQgICAgICAgICBjb3Nm
ICAgICAoICBmbG9hdCAgKTsJX19pbmxpbmUgICAgZmxvYXQgICAgICAgICBjb3NmICAgICAoICBm
bG9hdCAgIF9feCkJewlyZWdpc3RlciAgIGZsb2F0ICAgX19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRp
bGVfXyAoICAgICAgImZjb3MiICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJ
cmV0dXJuIF9fcmVzdWx0Owl9ICAJX19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAgICAgICBjb3Ns
ICAgICAoICBsb25nIGRvdWJsZSAgKTsJX19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAgICAgICBj
b3NsICAgICAoICBsb25nIGRvdWJsZSAgIF9feCkJewlyZWdpc3RlciAgIGxvbmcgZG91YmxlICAg
X19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgImZjb3MiICAgIDogIj10IiAoX19y
ZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAgCgpfX2lubGluZSAg
IGRvdWJsZSAgICAgYXRhbiAgICggZG91YmxlICk7CV9faW5saW5lICAgZG91YmxlICAgICBhdGFu
ICAgKCBkb3VibGUgIF9feCkJewlyZWdpc3RlciAgZG91YmxlICBfX3Jlc3VsdDsJX19hc20gX192
b2xhdGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAi
MCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gCV9faW5saW5lICAgZmxv
YXQgICAgICBhdGFuZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBhdGFuZiAg
ICAoIGZsb2F0ICBfX3gpCXsJcmVnaXN0ZXIgIGZsb2F0ICBfX3Jlc3VsdDsJX19hc20gX192b2xh
dGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAiMCIg
KF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gCV9faW5saW5lICAgbG9uZyBk
b3VibGUgICAgICBhdGFubCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3Vi
bGUgICAgICBhdGFubCAgICAoIGxvbmcgZG91YmxlICBfX3gpCXsJcmVnaXN0ZXIgIGxvbmcgZG91
YmxlICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6
ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19y
ZXN1bHQ7CX0gIApfX2lubGluZSAgIGRvdWJsZSAgICAgbG9nICAgKCBkb3VibGUgKTsJX19pbmxp
bmUgICBkb3VibGUgICAgIGxvZyAgICggZG91YmxlICBfX3gpCXsJcmVnaXN0ZXIgIGRvdWJsZSAg
X19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRpbGVfXyAoICAgICJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiAg
IDogIj10IiAoX19yZXN1bHQpIDogICAgICIwIiAoX194KSA6ICJzdCgxKSIgICk7CXJldHVybiBf
X3Jlc3VsdDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGxvZ2YgICAgKCBmbG9hdCApOwlfX2lu
bGluZSAgIGZsb2F0ICAgICAgbG9nZiAgICAoIGZsb2F0ICBfX3gpCXsJcmVnaXN0ZXIgIGZsb2F0
ICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZsZGxuMjsgZnhjaDsgZnlsMngi
ICAgOiAiPXQiIChfX3Jlc3VsdCkgOiAgICAgIjAiIChfX3gpIDogInN0KDEpIiAgKTsJcmV0dXJu
IF9fcmVzdWx0Owl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgbG9nbCAgICAoIGxvbmcg
ZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2dsICAgICggbG9uZyBkb3Vi
bGUgIF9feCkJewlyZWdpc3RlciAgbG9uZyBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0
aWxlX18gKCAgICAiZmxkbG4yOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAg
ICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gIApfX2lubGluZSAg
IGRvdWJsZSAgICAgbG9nMTAgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgbG9n
MTAgICAoIGRvdWJsZSAgX194KQl7CXJlZ2lzdGVyICBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBf
X3ZvbGF0aWxlX18gKCAgICAiZmxkbGcyOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9fcmVzdWx0
KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gCV9faW5s
aW5lICAgZmxvYXQgICAgICBsb2cxMGYgICAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0ICAg
ICAgbG9nMTBmICAgICggZmxvYXQgIF9feCkJewlyZWdpc3RlciAgZmxvYXQgIF9fcmVzdWx0Owlf
X2FzbSBfX3ZvbGF0aWxlX18gKCAgICAiZmxkbGcyOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9f
cmVzdWx0KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0g
CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2cxMGwgICAgKCBsb25nIGRvdWJsZSApOwlf
X2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgbG9nMTBsICAgICggbG9uZyBkb3VibGUgIF9feCkJ
ewlyZWdpc3RlciAgbG9uZyBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18gKCAg
ICAiZmxkbGcyOyBmeGNoOyBmeWwyeCIgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAiMCIgKF9f
eCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gIAoKX19pbmxpbmUgICBkb3VibGUg
ICAgIGFzaW4gICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgYXNpbiAgICggZG91
YmxlICAgICAgX194ICApCXsJICAgIHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRsICgxLjAg
LSBfX3ggKiBfX3gpKSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAgICAgYXNpbmYgICAgKCBmbG9h
dCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgYXNpbmYgICAgKCBmbG9hdCAgICAgIF9feCAgKQl7
CSAgICByZXR1cm4gX19hdGFuMmwgKF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSkgIDsJ
fSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGFzaW5sICAgICggbG9uZyBkb3VibGUgKTsJ
X19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGFzaW5sICAgICggbG9uZyBkb3VibGUgICAgICBf
X3ggICkJewkgICAgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9f
eCkpICA7CX0gIApfX2lubGluZSAgIGRvdWJsZSAgICAgYWNvcyAgICggZG91YmxlICk7CV9faW5s
aW5lICAgZG91YmxlICAgICBhY29zICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgcmV0dXJu
IF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBfX3gpLCBfX3gpICA7CX0gCV9faW5saW5l
ICAgZmxvYXQgICAgICBhY29zZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBh
Y29zZiAgICAoIGZsb2F0ICAgICAgX194ICApCXsJICAgIHJldHVybiBfX2F0YW4ybCAoX19zcXJ0
bCAoMS4wIC0gX194ICogX194KSwgX194KSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAg
ICAgYWNvc2wgICAgKCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAg
YWNvc2wgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZXR1cm4gX19hdGFuMmwg
KF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCksIF9feCkgIDsJfSAgCgpfX2lubGluZSAgIGxvbmcg
ZG91YmxlICAgIF9fc2duMWwgICggbG9uZyBkb3VibGUgKTsJX19pbmxpbmUgICBsb25nIGRvdWJs
ZSAgICBfX3NnbjFsICAoIGxvbmcgZG91YmxlICAgIF9feCApCXsJICByZXR1cm4gX194ID49IDAu
MCA/IDEuMCA6IC0xLjAgOwl9IAoKCiAKX19pbmxpbmUgICBkb3VibGUgICAgIHNpbmggICAoIGRv
dWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgc2luaCAgICggZG91YmxlICAgICAgX194ICAp
CXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wg
KF9feCkpOwkJICAgICAgICByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsg
X19leG0xKSAqIF9fc2duMWwgKF9feCkgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIHNpbmhm
ICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIHNpbmhmICAgICggZmxvYXQgICAg
ICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAo
X19mYWJzbCAoX194KSk7CQkgICAgICAgIHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSAr
IDEuMCkgKyBfX2V4bTEpICogX19zZ24xbCAoX194KSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91
YmxlICAgICAgc2luaGwgICAgKCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91Ymxl
ICAgICAgc2luaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2ZhYnNsIChfX3gpKTsJCSAgICAgICAg
cmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXhtMSkgKiBfX3NnbjFs
IChfX3gpICA7CX0gIAoKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgY29zaCAgICggZG91YmxlICk7
CV9faW5saW5lICAgZG91YmxlICAgICBjb3NoICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAg
ICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4ID0gX19leHBsIChfX3gpOwkJCQkgICAgICAgIHJl
dHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAg
ICBjb3NoZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBjb3NoZiAgICAoIGZs
b2F0ICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhw
bCAoX194KTsJCQkJICAgICAgICByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KSAgOwl9
IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgY29zaGwgICAgKCBsb25nIGRvdWJsZSApOwlf
X2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgY29zaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9f
eCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7CQkJ
CSAgICAgICAgcmV0dXJuIDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCkgIDsJfSAgCgoKCl9faW5s
aW5lICAgZG91YmxlICAgICB0YW5oICAgKCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAg
IHRhbmggICAoIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7CSAgICAgICAgcmV0dXJu
IF9fZXhtMSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCkgIDsJfSAJX19pbmxpbmUg
ICBmbG9hdCAgICAgIHRhbmhmICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIHRh
bmhmICAgICggZmxvYXQgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBf
X2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFic2wgKF9feCArIF9feCkpOwkgICAgICAgIHJldHVybiBf
X2V4bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpICA7CX0gCV9faW5saW5lICAg
bG9uZyBkb3VibGUgICAgICB0YW5obCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9u
ZyBkb3VibGUgICAgICB0YW5obCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICApCXsJICAgICAg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBf
X3gpKTsJICAgICAgICByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFsICgt
X194KSAgOwl9ICAKCgoKCl9faW5saW5lICAgZG91YmxlICAgICBmbG9vciAgICggZG91YmxlICk7
CV9faW5saW5lICAgZG91YmxlICAgICBmbG9vciAgICggZG91YmxlICAgICAgX194ICApCXsJICAg
ICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQg
c2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl
MCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8
IDB4MDQwMDsgIAkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg
KF9fY3d0bXApKTsJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3
ICUwIiA6IDogIm0iIChfX2N3KSk7CQkJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19p
bmxpbmUgICBmbG9hdCAgICAgIGZsb29yZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQg
ICAgICBmbG9vcmYgICAgKCBmbG9hdCAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu
dCBfX2N3OwkJCQkJICAgICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1w
OwkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp
OwkJCQkgICAgICAgIF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7ICAJCSAgICAg
ICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7CQkJICAg
ICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
dykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3Vi
bGUgICAgICBmbG9vcmwgICAgKCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91Ymxl
ICAgICAgZmxvb3JsICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jdzsJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQg
X19jd3RtcDsJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIg
KF9fY3cpKTsJCQkJICAgICAgICBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyAg
CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkp
OwkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkg
OiAiMCIgKF9feCkpOwkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAi
bSIgKF9fY3cpKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9ICAKIyA0NzggIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKX19pbmxpbmUgICBkb3VibGUgICAgIGNlaWwg
ICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgY2VpbCAgICggZG91YmxlICAgICAg
X194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAg
IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGls
ZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3
ICYgMHhmM2ZmKSB8IDB4MDgwMDsgIAkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3
ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJu
ZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9s
YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJldHVybiBfX3Zh
bHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBjZWlsZiAgICAoIGZsb2F0ICk7CV9faW5s
aW5lICAgZmxvYXQgICAgICBjZWlsZiAgICAoIGZsb2F0ICAgICAgX194ICApCXsJICAgICAgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
aW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAi
PW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgw
MDsgIAkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3
dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIg
OiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5l
ICAgbG9uZyBkb3VibGUgICAgICBjZWlsbCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAg
bG9uZyBkb3VibGUgICAgICBjZWlsbCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICApCXsJICAg
ICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQg
c2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAl
MCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8
IDB4MDgwMDsgIAkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i
IChfX2N3dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj
dyAlMCIgOiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gIAoj
IDQ4OSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKCgoKCgoKX19pbmxpbmUg
IGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSk7Cl9faW5saW5lICBkb3VibGUKbGRl
eHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl
OwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmc2NhbGUiCTogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsJcmV0dXJuIF9fdmFsdWUgOwp9CgoKIAoKCl9f
aW5saW5lICAgZG91YmxlICAgICBleHBtMSAgICggZG91YmxlICk7CV9faW5saW5lICAgZG91Ymxl
ICAgICBleHBtMSAgICggZG91YmxlICAgICAgX194ICApCXsJICAgIHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7CXJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7CXJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fdGVtcDsJX19hc20gX192b2xhdGlsZV9fCSgiZmxkbDJlCQkJIyBlXnggLSAx
ID0gMl4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiCSJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlc
blx0IgkiZnN0CSUlc3QoMSlcblx0IgkiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQi
CSJmeGNoXG5cdCIJImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IgkiZjJ4
bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIJImZzY2FsZQkJCSMgMl4oeCAq
IGxvZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAi
PXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZzY2Fs
ZQkJCSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIJOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjAp
LCAidSIgKF9fZXhwb25lbnQpKTsJX190ZW1wIC09IDEuMDsJcmV0dXJuIF9fdGVtcCArIF9fdmFs
dWUgICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBleHBtMWYgICAgKCBmbG9hdCApOwlfX2lu
bGluZSAgIGZsb2F0ICAgICAgZXhwbTFmICAgICggZmxvYXQgICAgICBfX3ggICkJewkgICAgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVu
dDsJcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmbGRs
MmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIJImZtdWwJJSVzdCgxKQkJ
IyB4ICogbG9nMihlKVxuXHQiCSJmc3QJJSVzdCgxKVxuXHQiCSJmcm5kaW50CQkJIyBpbnQoeCAq
IGxvZzIoZSkpXG5cdCIJImZ4Y2hcblx0IgkiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cy
KGUpKVxuXHQiCSJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IgkiZnNj
YWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10
IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsJX19hc20gX192b2xh
dGlsZV9fCSgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihlKSlcblx0Igk6ICI9dCIgKF9fdGVt
cCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOwlfX3RlbXAgLT0gMS4wOwlyZXR1cm4g
X190ZW1wICsgX192YWx1ZSAgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGV4cG0x
bCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBleHBtMWwg
ICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3ZhbHVlOwlyZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OwlyZWdpc3RlciBsb25nIGRv
dWJsZSBfX3RlbXA7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJe
KHggKiBsb2cyKGUpKSAtIDFcblx0IgkiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIJ
ImZzdAklJXN0KDEpXG5cdCIJImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IgkiZnhj
aFxuXHQiCSJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIJImYyeG0xCQkJ
IyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiCSJmc2NhbGUJCQkjIDJeKHggKiBsb2cy
KGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAo
X19leHBvbmVudCkgOiAiMCIgKF9feCkpOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmc2NhbGUJCQkj
IDJeaW50KHggKiBsb2cyKGUpKVxuXHQiCTogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUi
IChfX2V4cG9uZW50KSk7CV9fdGVtcCAtPSAxLjA7CXJldHVybiBfX3RlbXAgKyBfX3ZhbHVlICAg
Owl9ICAKCiAKCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGxvZzFwICAgKCBkb3VibGUgKTsJX19p
bmxpbmUgICBkb3VibGUgICAgIGxvZzFwICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgaWYgKF9fZmFic2wgKF9f
eCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwgKQkJCQkgICAgICAgICAg
X192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7CQkJCQkJICAgICAgICBlbHNlCQkJCQkJCQkJICAg
ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgICAoImZsZGxuMlxuXHQi
CQkJCQkJCSAgICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCSAgICAgICAgICAgICAiZnlsMnhw
MSIJCQkJCQkJICAgICAgICAgICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3Qo
MSkiKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAg
ICAgbG9nMXBmICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIGxvZzFwZiAgICAo
IGZsb2F0ICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJ
CQkJCQkgICAgICAgIGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYy
MzczMDk1MDQ4ODBMICkJCQkJICAgICAgICAgIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOwkJ
CQkJCSAgICAgICAgZWxzZQkJCQkJCQkJCSAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJ
CQkJICAgICAgICAgICAgKCJmbGRsbjJcblx0IgkJCQkJCQkgICAgICAgICAgICAgImZ4Y2hcblx0
IgkJCQkJCQkgICAgICAgICAgICAgImZ5bDJ4cDEiCQkJCQkJCSAgICAgICAgICAgICA6ICI9dCIg
KF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7CQkJCSAgICAgICAgcmV0dXJuIF9fdmFs
dWUgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGxvZzFwbCAgICAoIGxvbmcgZG91
YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2cxcGwgICAgKCBsb25nIGRvdWJs
ZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJ
ICAgICAgICBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5
NTA0ODgwTCApCQkJCSAgICAgICAgICBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsJCQkJCQkg
ICAgICAgIGVsc2UJCQkJCQkJCQkgICAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAg
ICAgICAgICAgICgiZmxkbG4yXG5cdCIJCQkJCQkJICAgICAgICAgICAgICJmeGNoXG5cdCIJCQkJ
CQkJICAgICAgICAgICAgICJmeWwyeHAxIgkJCQkJCQkgICAgICAgICAgICAgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7
CX0gIAojIDUyNSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKIApfX2lubGlu
ZSAgIGRvdWJsZSAgICAgYXNpbmggICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAg
YXNpbmggICAoIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91Ymxl
ICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAgICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBf
X3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICog
X19zZ24xbCAoX194KSkgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGFzaW5oZiAgICAoIGZs
b2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBhc2luaGYgICAgKCBmbG9hdCAgICAgIF9feCAg
KQl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkg
ICAgICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsg
MS4wKSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICogX19zZ24xbCAoX194KSkgIDsJfSAJX19pbmxp
bmUgICBsb25nIGRvdWJsZSAgICAgIGFzaW5obCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5l
ICAgbG9uZyBkb3VibGUgICAgICBhc2luaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7
CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAg
ICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4w
KSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICogX19zZ24xbCAoX194KSkgIDsJfSAgCgoKCgpfX2lu
bGluZSAgIGRvdWJsZSAgICAgYWNvc2ggICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAg
ICAgYWNvc2ggICAoIGRvdWJsZSAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBsb2dsIChfX3gg
KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSkgIDsJfSAJX19pbmxp
bmUgICBmbG9hdCAgICAgIGFjb3NoZiAgICAoIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAg
ICBhY29zaGYgICAgKCBmbG9hdCAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBsb2dsIChfX3gg
KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSkgIDsJfSAJX19pbmxp
bmUgICBsb25nIGRvdWJsZSAgICAgIGFjb3NobCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5l
ICAgbG9uZyBkb3VibGUgICAgICBhY29zaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKQl7
CSAgICAgIHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAo
X194ICsgMS4wKSkgIDsJfSAgCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGF0YW5oICAgKCBkb3Vi
bGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIGF0YW5oICAgKCBkb3VibGUgICAgICBfX3ggICkJ
ewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAg
ICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBf
X3NnbjFsIChfX3gpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhdGFuaGYgICAgKCBmbG9h
dCApOwlfX2lubGluZSAgIGZsb2F0ICAgICAgYXRhbmhmICAgICggZmxvYXQgICAgICBfX3ggICkJ
ewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAg
ICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBf
X3NnbjFsIChfX3gpICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBhdGFuaGwgICAg
KCBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgYXRhbmhsICAgICgg
bG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kg
PSBfX2ZhYnNsIChfX3gpOwkJCQkgICAgICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSAr
IF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpICA7CX0gIAoKCgogCl9faW5saW5l
ICAgZG91YmxlICAgICBoeXBvdCAgICggZG91YmxlICwgIGRvdWJsZSApOwlfX2lubGluZSAgIGRv
dWJsZSAgICAgaHlwb3QgICAoIGRvdWJsZSAgICAgIF9feCAgLCAgZG91YmxlICAgICAgX195ICAp
CXsJICAgIHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0gCV9faW5s
aW5lICAgZmxvYXQgICAgICBoeXBvdGYgICAgKCBmbG9hdCAsICBmbG9hdCApOwlfX2lubGluZSAg
IGZsb2F0ICAgICAgaHlwb3RmICAgICggZmxvYXQgICAgICBfX3ggICwgIGZsb2F0ICAgICAgX195
ICApCXsJICAgIHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0gCV9f
aW5saW5lICAgbG9uZyBkb3VibGUgICAgICBoeXBvdGwgICAgKCBsb25nIGRvdWJsZSAsICBsb25n
IGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgaHlwb3RsICAgICggbG9uZyBk
b3VibGUgICAgICBfX3ggICwgIGxvbmcgZG91YmxlICAgICAgX195ICApCXsJICAgIHJldHVybiBf
X3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0gIAoKX19pbmxpbmUgICBkb3VibGUg
ICAgIGxvZ2IgICAoIGRvdWJsZSApOwlfX2lubGluZSAgIGRvdWJsZSAgICAgbG9nYiAgICggZG91
YmxlICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ
CQkgICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNt
IF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAg
ICAgICA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAg
ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBsb2diZiAgICAo
IGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBsb2diZiAgICAoIGZsb2F0ICAgICAgX194
ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVf
XwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAgICAgICA6ICI9dCIg
KF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAgICAgIHJldHVybiBf
X3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2dibCAgICAoIGxvbmcg
ZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2dibCAgICAoIGxvbmcgZG91
YmxlICAgICAgX194ICApCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ
CQkgICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNt
IF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAg
ICAgICA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAg
ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gIAoKCgoKCgoKCgojIDYyMCAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGlubGluZS5oIiAzCgoKCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGRyZW0gICAoIGRv
dWJsZSAsICBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIGRyZW0gICAoIGRvdWJsZSAg
ICAgIF9feCAgLCAgZG91YmxlICAgICAgX195ICApCXsJICAgICAgcmVnaXN0ZXIgZG91YmxlIF9f
dmFsdWU7CQkJCQkJICAgICAgICByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7CQkJCQkJICAgICAg
ICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiMToJZnByZW0xXG5cdCIJCQkJ
CQkgICAgICAgICAgICJmc3RzdwklJWF4XG5cdCIJCQkJCQkgICAgICAgICAgICJzYWhmXG5cdCIJ
CQkJCQkJCSAgICAgICAgICAgImpwCTFiIgkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1
ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyAg
ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBkcmVtZiAgICAo
IGZsb2F0ICwgIGZsb2F0ICk7CV9faW5saW5lICAgZmxvYXQgICAgICBkcmVtZiAgICAoIGZsb2F0
ICAgICAgX194ICAsICBmbG9hdCAgICAgIF9feSAgKQl7CSAgICAgIHJlZ2lzdGVyIGRvdWJsZSBf
X3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOwkJCQkJCSAgICAg
ICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoIjE6CWZwcmVtMVxuXHQiCQkJ
CQkJICAgICAgICAgICAiZnN0c3cJJSVheFxuXHQiCQkJCQkJICAgICAgICAgICAic2FoZlxuXHQi
CQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJCQkJCQkJICAgICAgICAgICA6ICI9dCIgKF9fdmFs
dWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsg
ICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgZHJl
bWwgICAgKCBsb25nIGRvdWJsZSAsICBsb25nIGRvdWJsZSApOwlfX2lubGluZSAgIGxvbmcgZG91
YmxlICAgICAgZHJlbWwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBkb3VibGUg
ICAgICBfX3kgICkJewkgICAgICByZWdpc3RlciBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAg
IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVf
XwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbTFcblx0IgkJCQkJCSAgICAgICAgICAgImZzdHN3
CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZcblx0IgkJCQkJCQkJICAgICAgICAgICAi
anAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJl
cmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7ICAgICAgcmV0dXJuIF9fdmFsdWUg
IDsJfSAgCiMgNjM1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCgogCl9faW5s
aW5lICBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKX19pbmxpbmUgIGludApfX2Zpbml0ZSAoZG91YmxlIF9feCkKewogIHJldHVybiAoX19leHRl
bnNpb25fXwoJICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSkge19fZDog
X194fSkuX19pWzFdCgkgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoKIAoKX19p
bmxpbmUgICBkb3VibGUgICAgIF9fY29zaG0xICAgKCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3Vi
bGUgICAgIF9fY29zaG0xICAgKCBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBs
b25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7CQkgICAgICAgIHJl
dHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xICA7CX0gCV9faW5s
aW5lICAgZmxvYXQgICAgICBfX2Nvc2htMWYgICAgKCBmbG9hdCApOwlfX2lubGluZSAgIGZsb2F0
ICAgICAgX19jb3NobTFmICAgICggZmxvYXQgICAgICBfX3ggICkJewkgICAgICByZWdpc3RlciBs
b25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7CQkgICAgICAgIHJl
dHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xICA7CX0gCV9faW5s
aW5lICAgbG9uZyBkb3VibGUgICAgICBfX2Nvc2htMWwgICAgKCBsb25nIGRvdWJsZSApOwlfX2lu
bGluZSAgIGxvbmcgZG91YmxlICAgICAgX19jb3NobTFsICAgICggbG9uZyBkb3VibGUgICAgICBf
X3ggICkJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19m
YWJzbCAoX194KSk7CQkgICAgICAgIHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEu
MCkpICogX19leG0xICA7CX0gIAoKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgX19hY29zaDFwICAg
KCBkb3VibGUgKTsJX19pbmxpbmUgICBkb3VibGUgICAgIF9fYWNvc2gxcCAgICggZG91YmxlICAg
ICAgX194ICApCXsJICAgICAgcmV0dXJuIGxvZzFwbCAoX194ICsgX19zcXJ0bCAoX194KSAqIF9f
c3FydGwgKF9feCArIDIuMCkpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBfX2Fjb3NoMXBm
ICAgICggZmxvYXQgKTsJX19pbmxpbmUgICBmbG9hdCAgICAgIF9fYWNvc2gxcGYgICAgKCBmbG9h
dCAgICAgIF9feCAgKQl7CSAgICAgIHJldHVybiBsb2cxcGwgKF9feCArIF9fc3FydGwgKF9feCkg
KiBfX3NxcnRsIChfX3ggKyAyLjApKSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAg
X19hY29zaDFwbCAgICAoIGxvbmcgZG91YmxlICk7CV9faW5saW5lICAgbG9uZyBkb3VibGUgICAg
ICBfX2Fjb3NoMXBsICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkJewkgICAgICByZXR1cm4g
bG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194ICsgMi4wKSkgIDsJfSAg
CgoKCgogCgoKCgoKCgoKIAojIDY3NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAz
CgoKCiMgMzQ4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCiMgNDA3ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzCgoKfSAKCgoKIyA4ICJQb3NlVG9TdGF0ZVhmb3JtLmgiIDIKCiMgMSAiL3Uv
bHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMx
LjEuMS9pbmNsdWRlL1JhbmdlLmgiIDEKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMK
IAoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDEgMwogCiAKCiAKIAogCiAK
IAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9jc3RkZGVmIiAxIDMKIAogCgoKCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoK
CgoKIAoKCgoKCgoKIAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxp
Yi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlw
ZWRlZiBpbnQgcHRyZGlmZl90OwoKCgoKCgoKCgogCgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2ln
bmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t
YW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKIyA2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMiAzCgoKIyAzNSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRz
LmgiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoK
CgoKIAojcHJhZ21hIGludGVyZmFjZSAic3RkL3N0cmFpdHMuaCIKCgoKCmV4dGVybiAiQysrIiB7
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyB7CiAgdHlw
ZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKCiAgIAoKICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNoYXJf
dHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMxID0gYzI7IH0KICBzdGF0aWMg
Ym9vbCBlcSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsg
cmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBj
MSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuICEoYzEgPT0gYzIpOyB9CiAgc3Rh
dGljIGJvb2wgbHQgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAg
ICB7IHJldHVybiAoYzEgPCBjMik7IH0KICBzdGF0aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJldHVy
biBjaGFyX3R5cGUoKTsgfSAgCiAgc3RhdGljIGJvb2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJl
dHVybiAwOyB9CiAgIAogIAogICAKCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5
cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgc2l6ZV90
IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglpZiAobmUgKHMxW2ldLCBzMltpXSkp
CgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsKCiAgICAgIHJldHVybiAwOwog
ICAgfQogICAgCiAgc3RhdGljIHNpemVfdCBsZW5ndGggKGNvbnN0IGNoYXJfdHlwZSogcykKICAg
IHsKICAgICAgc2l6ZV90IGwgPSAwOwogICAgICB3aGlsZSAobmUgKCpzKyssIGVvcyAoKSkpCgkr
K2w7CiAgICAgIHJldHVybiBsOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBjb3B5IChjaGFy
X3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgZm9y
ICg7IG4tLTsgKQoJYXNzaWduIChzMVtuXSwgczJbbl0pOwogICAgICByZXR1cm4gczE7CiAgICB9
CgogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw
ZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsKICAgICAgc2l6ZV90
IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKGFbaV0sIHMyW2ldKTsK
ICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoczFbaV0sIGFbaV0pOwogICAg
ICByZXR1cm4gczE7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBz
MSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3QgbikKICAgIHsKICAgICAgZm9yICg7IG4tLTsg
KQoJYXNzaWduIChzMVtuXSwgYyk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KfTsKCmNsYXNzIGlz
dHJlYW07CmNsYXNzIG9zdHJlYW07CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NjdHlwZSIgMSAzCiAKIAoK
CgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoK
IAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45
NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45
NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK
CiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90
eXBlcy5oIiAyIDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25n
IGxvbmcgaW50IF9fcXVhZF90OwojIDQ4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCgp0
eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50
OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25l
ZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsK
CnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsJ
CSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsJ
CSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190
OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBlZGVmIF9fcXVhZF90IF9fbG9m
Zl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRlZiBpbnQgX19zc2l6ZV90OwkJ
CSAKdHlwZWRlZiBsb25nIGludCBfX3JsaW1fdDsJCSAKdHlwZWRlZiBfX3F1YWRfdCBfX3JsaW02
NF90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwkJCSAKCnR5cGVkZWYgc3RydWN0CiAgewog
ICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CQkJCSAKCiAKdHlwZWRlZiBpbnQgX19kYWRk
cl90OwkJCSAKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1l
X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwkJIAoMCnR5cGVkZWYgbG9uZyBpbnQgX19j
bG9ja190OwoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKCiAKCgogCgoK
CgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgIAoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0
c1sxMDI0ICAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKSBdOwoKCiAgfSBfX2ZkX3NldDsKCgp0
eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19w
aWRfdDsKCgogCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRf
dCBfX2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVm
IF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu
dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgogCnR5cGVkZWYgX191X2xv
bmcgX19pbm82NF90OwoKIAp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCiAKdHlwZWRlZiBs
b25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2Fs
YXJfdDsKCiAKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgogCgoKCgoKIyAyNyAiL3Vzci9pbmNs
dWRlL2N0eXBlLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgogCgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgojIDM1ICIvdXNyL2lu
Y2x1ZGUvZW5kaWFuLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCiMgNDAgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAyIDMKCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCggMCApIDwgOCA/ICgoMSA8
PCAoIDAgKSkgPDwgOCkgOiAoKDEgPDwgKCAwICkpID4+IDgpKSAsCSAKICBfSVNsb3dlciA9ICgo
IDEgKSA8IDggPyAoKDEgPDwgKCAxICkpIDw8IDgpIDogKCgxIDw8ICggMSApKSA+PiA4KSkgLAkg
CiAgX0lTYWxwaGEgPSAoKCAyICkgPCA4ID8gKCgxIDw8ICggMiApKSA8PCA4KSA6ICgoMSA8PCAo
IDIgKSkgPj4gOCkpICwJIAogIF9JU2RpZ2l0ID0gKCggMyApIDwgOCA/ICgoMSA8PCAoIDMgKSkg
PDwgOCkgOiAoKDEgPDwgKCAzICkpID4+IDgpKSAsCSAKICBfSVN4ZGlnaXQgPSAoKCA0ICkgPCA4
ID8gKCgxIDw8ICggNCApKSA8PCA4KSA6ICgoMSA8PCAoIDQgKSkgPj4gOCkpICwJIAogIF9JU3Nw
YWNlID0gKCggNSApIDwgOCA/ICgoMSA8PCAoIDUgKSkgPDwgOCkgOiAoKDEgPDwgKCA1ICkpID4+
IDgpKSAsCSAKICBfSVNwcmludCA9ICgoIDYgKSA8IDggPyAoKDEgPDwgKCA2ICkpIDw8IDgpIDog
KCgxIDw8ICggNiApKSA+PiA4KSkgLAkgCiAgX0lTZ3JhcGggPSAoKCA3ICkgPCA4ID8gKCgxIDw8
ICggNyApKSA8PCA4KSA6ICgoMSA8PCAoIDcgKSkgPj4gOCkpICwJIAogIF9JU2JsYW5rID0gKCgg
OCApIDwgOCA/ICgoMSA8PCAoIDggKSkgPDwgOCkgOiAoKDEgPDwgKCA4ICkpID4+IDgpKSAsCSAK
ICBfSVNjbnRybCA9ICgoIDkgKSA8IDggPyAoKDEgPDwgKCA5ICkpIDw8IDgpIDogKCgxIDw8ICgg
OSApKSA+PiA4KSkgLAkgCiAgX0lTcHVuY3QgPSAoKCAxMCApIDwgOCA/ICgoMSA8PCAoIDEwICkp
IDw8IDgpIDogKCgxIDw8ICggMTAgKSkgPj4gOCkpICwJIAogIF9JU2FsbnVtID0gKCggMTEgKSA8
IDggPyAoKDEgPDwgKCAxMSApKSA8PCA4KSA6ICgoMSA8PCAoIDExICkpID4+IDgpKSAJIAp9OwoK
CiAKCgoKCgoKCgoKCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9i
OwkgCmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOyAgCmV4dGVybiBf
X2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOyAgCgoKCgoKCgoKCiAKCgoKZXh0ZXJu
IGludCAgaXNhbG51bSAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNhbHBoYSAg
IChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNjbnRybCAgIChpbnQpICB0aHJvdyAo
KSAgIDsKZXh0ZXJuIGludCAgaXNkaWdpdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGlu
dCAgaXNsb3dlciAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNncmFwaCAgIChp
bnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNwcmludCAgIChpbnQpICB0aHJvdyAoKSAg
IDsKZXh0ZXJuIGludCAgaXNwdW5jdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAg
aXNzcGFjZSAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXN1cHBlciAgIChpbnQp
ICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXN4ZGlnaXQgICAoaW50KSAgdGhyb3cgKCkgICA7
CgoKCgoKCiAKZXh0ZXJuIGludCB0b2xvd2VyICAoaW50IF9fYykgIHRocm93ICgpICA7CgogCmV4
dGVybiBpbnQgdG91cHBlciAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKCgoKIAoKZXh0ZXJuIGlu
dCBpc2FzY2lpICAoaW50IF9fYykgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHRvYXNjaWkg
IChpbnQgX19jKSAgdGhyb3cgKCkgIDsKCgoKCiAKCmV4dGVybiBpbnQgIF90b3VwcGVyICAgKGlu
dCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBfdG9sb3dlciAgIChpbnQpICB0aHJvdyAoKSAg
IDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQg
X19jKSB0aHJvdyAoKSAKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0
eXBlX3RvbG93ZXJbX19jXSA6IF9fYzsKfQoKZXh0ZXJuIF9faW5saW5lIGludAp0b3VwcGVyIChp
bnQgX19jKSB0aHJvdyAoKSAKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBf
X2N0eXBlX3RvdXBwZXJbX19jXSA6IF9fYzsKfQoKCiMgMTg2ICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMwoKCgoKCgoKCgoKCgoKIyAyNzMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgoKfSAKCgoj
IDYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9jY3R5cGUiIDIgMwoKCiMgMTA1ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0
cmFpdHMuaCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAxIDMKIAogCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
ZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMx
NyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDIgMwoKCgogCmV4dGVybiB2b2lkICogIG1lbWNweSAgKHZvaWQgKiAgX19yZXN0
cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiB2b2lkICogIG1lbW1vdmUgICh2b2lkICog
IF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNpemVfdCBfX24pICB0aHJv
dyAoKSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9pZCAqICBfX2Rlc3QsIF9f
Y29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXplX3QgX19uKSAgdGhyb3cg
KCkgIDsKCgoKIApleHRlcm4gdm9pZCAqICBtZW1zZXQgICh2b2lkICogIF9fcywgaW50IF9fYywg
c2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgbWVtY21wICAoX19jb25zdCB2
b2lkICogIF9fczEsIF9fY29uc3Qgdm9pZCAqICBfX3MyLAoJCQlzaXplX3QgX19uKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25zdCB2b2lkICogIF9fcywgaW50
IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3Ry
Y3B5ICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNweSAgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gY2hhciAqc3RyY2F0ICAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSAgdGhy
b3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNhdCAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0
LAoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJv
dyAoKSAgOwoKIApleHRlcm4gaW50IHN0cmNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z
dCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHN0cm5jbXAgIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7
CgogCmV4dGVybiBpbnQgc3RyY29sbCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gc2l6ZV90IHN0cnhmcm0gIChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwKCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgIHRocm93ICgpICA7CgojIDEwNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoK
CiAKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAg
OwpleHRlcm4gY2hhciAqc3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoK
CiAKCgoKCgoKIyAxNDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCiAKZXh0ZXJuIGNoYXIg
KnN0cmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsKIApleHRl
cm4gY2hhciAqc3RycmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkg
IDsKCgoKCgoKCiAKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAgKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVqZWN0KSAgdGhyb3cgKCkgIDsKIAoKZXh0ZXJuIHNpemVfdCBzdHJz
cG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgIHRocm93ICgp
ICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnBicmsgIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2FjY2VwdCkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnN0ciAgKF9fY29u
c3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgIHRocm93ICgpICA7
CgoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJ
CQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSAgdGhyb3cgKCkgIDsKCiAKCmV4
dGVybiBjaGFyICpfX3N0cnRva19yICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLAoJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s
CgkJCSAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCgojIDIw
MyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4gIChf
X2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3Ry
ZXJyb3IgIChpbnQgX19lcnJudW0pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKl9fc3Ry
ZXJyb3JfciAgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRo
cm93ICgpICA7CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yICAoaW50IF9fZXJybnVtLCBjaGFyICpf
X2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6
ZXJvICAodm9pZCAqICBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZv
aWQgYmNvcHkgIChfX2NvbnN0IHZvaWQgKiAgX19zcmMsIHZvaWQgKiAgX19kZXN0LCBzaXplX3Qg
X19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywgc2l6
ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgYmNtcCAgKF9fY29uc3Qgdm9pZCAq
ICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAgX19zMiwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7Cgog
CmV4dGVybiBjaGFyICppbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgX19mZnMgIChpbnQgX19pKSAgdGhyb3cgKCkg
ICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgIChpbnQgX19pKSAgdGhy
b3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCiAKCgoKCgoKCgoKIApleHRlcm4gaW50
IF9fc3RyY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzdHJjYXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cm5jYXNlY21w
ICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAgc2l6ZV90
IF9fbikgIHRocm93ICgpICA7CgoKIyAyNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgog
CgpleHRlcm4gY2hhciAqc3Ryc2VwICAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAoJCQkg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSAgdGhyb3cgKCkgIDsKCgojIDMxOSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCgojIDM0NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAzCgoKCn0gCgoKIyA3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMiAzCgoKIyA5NCAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2NzdHJpbmciIDMKCgoKIyAxMDYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr
ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAy
IDMKCgpzdHJ1Y3Qgc3RyaW5nX2NoYXJfdHJhaXRzIDxjaGFyPiB7CiAgdHlwZWRlZiBjaGFyIGNo
YXJfdHlwZTsKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFy
X3R5cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJf
dHlwZSAmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsg
fQogIHN0YXRpYyBib29sIG5lIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUm
IGMyKQogICAgeyByZXR1cm4gKGMxICE9IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBj
aGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIp
OyB9CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gMDsgfQogIHN0YXRpYyBib29s
IGlzX2RlbChjaGFyX3R5cGUgYSkgeyByZXR1cm4gKF9fY3R5cGVfYlsoaW50KSAoICggYSApICld
ICYgKHVuc2lnbmVkIHNob3J0IGludCkgICBfSVNzcGFjZSApICA7IH0KCiAgc3RhdGljIGludCBj
b21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3Qg
bikKICAgIHsgcmV0dXJuIG1lbWNtcCAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVu
Z3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3Rh
dGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwg
c2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9
CiAgc3RhdGljIGNoYXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBl
KiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMy
LCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hh
cl90eXBlJiBjLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMx
LCBjLCBuKTsgfQp9OwoKIyAxNTkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51
eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAzCgp9ICAK
CiMgMzYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCgoKIAojIDEgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9hbGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2NvbmZpZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKCgogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCgogCiAKIAog
CiAKIAogCgoKCgoKCgoKIyAxNDggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51
eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwogCgoKCgoKIAoKCgoKCgojIDEgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAxNTEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29u
ZmlnLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCgogICAgICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut
bGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAzCgoK
IyAyNDggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAojIDMxNiAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKIAogCiMgMTggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKCgoKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2FsbG9jLmgiIDEgMwogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKIAogCiAKIAogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvbmV3IiAxIDMKIAogCgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3Igoj
IDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL25ldyIgMiAzCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAK
CgoKCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNw
YWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQog
IHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkg
Y29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1Ymxp
YzoKICBiYWRfZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9
Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAo
KnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRl
ICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVj
dGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMK
CgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1
YmxpYyBleGNlcHRpb24gewogIHB1YmxpYzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgp
IGNvbnN0IHRocm93KCkgeyByZXR1cm4gImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90
aHJvd190IHt9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZv
aWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIgKG5ld19o
YW5kbGVyKTsKCn0gIAoKIAp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6
YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk
X2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVy
YXRvciBkZWxldGVbXSAodm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVf
dCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAo
c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs
ZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv
ciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgogCmlu
bGluZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJl
dHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpw
bGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9ICAKCgojIDQyICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
IyA1MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgojIDEgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgpleHRlcm4gIkMiIHsg
CgoKCgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CQkJIAogICAgaW50IHJlbTsJ
CQkgCiAgfSBkaXZfdDsKCiAKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsJ
CSAKICAgIGxvbmcgaW50IHJlbTsJCSAKICB9IGxkaXZfdDsKCgoKIyA2NSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRf
bWJfY3VyX21heCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGRvdWJsZSBhdG9mICAo
X19jb25zdCBjaGFyICpfX25wdHIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgYXRvaSAgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gbG9uZyBpbnQgYXRvbCAg
KF9fY29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKCgogCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgp
ICA7CgoKIApleHRlcm4gZG91YmxlIHN0cnRvZCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCgkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCgoK
CgoKCgoKCiAKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCgkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
ICB0aHJvdyAoKSAgOwogCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsICAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKCQkJCSAgICAgICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgogCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xICAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKCQkJCSAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
ICB0aHJvdyAoKSAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgc3RydG91cSAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCSAgICBpbnQgX19iYXNlKSAgdGhyb3cgKCkg
IDsKCgoKIAoKIApfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAoJCQkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAg
ICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgoKIyAxOTAgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwoKCgogCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKCQkJCSAgICAgIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGZsb2F0IF9fc3Ry
dG9mX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKZXh0
ZXJuIGxvbmcgZG91YmxlICBfX3N0cnRvbGRfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJ
CQlfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJ
CQkJCWludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9p
bnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApICB0aHJvdyAo
KSAgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsICAoX19j
b25zdCBjaGFyICoKCQkJCQkJICBfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93
ICgpICA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9p
bnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv
dXApICB0aHJvdyAoKSAgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJCQkJX19yZXN0
cmljdCBfX25wdHIsCgkJCQkJCQljaGFyICoqCgkJCQkJCQlfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJ
CQkJCQkJaW50IF9fYmFzZSwKCQkJCQkJCWludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCgoK
IAoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKSAKewogIHJldHVy
biBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5s
aW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCglpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVy
biBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRl
cm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkgaW50IF9fYmFzZSkg
dGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy
LCBfX2Jhc2UsIDApOwp9CgojIDI3MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCWludCBf
X2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNp
Z25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJIGludCBfX2Jhc2UpIHRocm93ICgpIAp7
CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg
MCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0
b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKCSBpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvbGxfaW50
ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRl
cm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFy
ICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJICBpbnQg
X19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIs
IF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIs
IChjaGFyICoqKSBfX251bGwgKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3Qg
Y2hhciAqX19ucHRyKSB0aHJvdyAoKSAKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwg
KGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRy
LCAoY2hhciAqKikgX19udWxsICwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp
bmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIAp7
CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQoKCgoK
CiAKCgpleHRlcm4gY2hhciAqbDY0YSAgKGxvbmcgaW50IF9fbikgIHRocm93ICgpICA7CgogCmV4
dGVybiBsb25nIGludCBhNjRsICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgpleHRlcm4gIkMiIHsgCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBf
X3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25n
IHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1
YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7
CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2
X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVf
dDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlk
X3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgoKCgoKCnR5cGVkZWYgX19waWRf
dCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNz
aXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj
YWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgNTEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoK
CgoKCiAKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoKCgoKIyA4OSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwoKCgoKIyAyNzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAxMjMgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAx
ODggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgog
CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDEyNiAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50
IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHVpbnQ7CgoKIAoKIyAxNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiAK
CgoKCgoKCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19R
SV9fICkpKSA7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICgg
IF9fSElfXyApKSkgOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoICBfX1NJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKCAgX19ESV9fICkpKSA7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fUUlfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fSElfXyApKSkgOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9f
U0lfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fICggIF9fRElfXyApKSkgOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoKCiAKCgoKCgoKIAoKCiAKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK
CgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwoKCgoKCgoKCgoK
CgojIDU2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwoKIyA3MiAiL3Vzci9pbmNsdWRl
L2JpdHMvc2VsZWN0LmgiIDMKCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK
CiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QKICB7
CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25l
ZCBsb25nIGludCkpKSBdOwogIH0gX19zaWdzZXRfdDsKCgoKCiAKCgoKCgojIDEyNSAiL3Vzci9p
bmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCiMgMzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDIgMwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDYyICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNzMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoK
CgoKCgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CQkgCiAgICBs
b25nIGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKIyAyNzkgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKZXh0ZXJuICJDIiB7
IAoKIAoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgogCnR5
cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoKIAoKCgogCgoKCgogCgoKCgoKCiAKCgoKCmV4dGVybiBp
bnQgX19zZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLAoJCQkgIF9fZmRf
c2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJCSAgc3RydWN0IHRpbWV2
YWwgKl9fdGltZW91dCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2VsZWN0ICAoaW50IF9fbmZk
cywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0
ICpfX2V4Y2VwdGZkcywKCQkJc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgIHRocm93ICgpICA7
CgojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKfSAKCgojIDE5NSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNy
b3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgNDcgIi91c3IvaW5j
bHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKCgoKIyAxOTggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzCgoKCgogCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAgCnR5cGVkZWYgX19m
c2Jsa2NudF90IGZzYmxrY250X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsg
IAoKCgoKCgoKCgoKCgp9IAoKCiMgMzM5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAK
CgoKIApleHRlcm4gaW50MzJfdCByYW5kb20gICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu
IHZvaWQgc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAoKSAgOwoKIAoKCgpl
eHRlcm4gdm9pZCAqICBpbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogIF9f
c3RhdGVidWYsCgkJCSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93ICgpICA7CgogCgpl
eHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQgKiAgX19zdGF0ZWJ1ZikgIHRocm93ICgpICA7
CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsJCSAKICAg
IGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAgIGludCByYW5kX3R5
cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7CQkgCiAgICBpbnQz
Ml90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRv
bV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAoJCQkgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1
bHQpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgICh1bnNpZ25lZCBpbnQgX19z
ZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQg
aW5pdHN0YXRlX3IgICh1bnNpZ25lZCBpbnQgX19zZWVkLAoJCQkgICAgIHZvaWQgKiAgX19yZXN0
cmljdCBfX3N0YXRlYnVmLAoJCQkgICAgIHNpemVfdCBfX3N0YXRlbGVuLAoJCQkgICAgIHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7CgpleHRlcm4gaW50
IHNldHN0YXRlX3IgICh2b2lkICogIF9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKCQkJICAgIHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7CgoKCgogCmV4dGVy
biBpbnQgcmFuZCAgKHZvaWQpICB0aHJvdyAoKSAgOwogCmV4dGVybiB2b2lkIHNyYW5kICAodW5z
aWduZWQgaW50IF9fc2VlZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50IHJhbmRfciAgKHVu
c2lnbmVkIGludCAqX19zZWVkKSAgdGhyb3cgKCkgIDsKCgoKCiAKCiAKZXh0ZXJuIGRvdWJsZSBk
cmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAgKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50
IGxyYW5kNDggICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggICh1
bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgIHRocm93ICgpICA7CgogCmV4dGVybiBsb25n
IGludCBtcmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4
ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
dm9pZCBzcmFuZDQ4ICAobG9uZyBpbnQgX19zZWVkdmFsKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHVu
c2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz
XSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkIGxjb25nNDggICh1bnNpZ25lZCBzaG9ydCBpbnQg
X19wYXJhbVs3XSkgIHRocm93ICgpICA7CgogCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CSAK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hb
M107ICAKICAgIGludCBpbml0OwkJCSAKICB9OwoKCiAKZXh0ZXJuIGludCBkcmFuZDQ4X3IgIChz
dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBkb3VibGUgKl9f
cmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGVyYW5kNDhfciAgKHVu
c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0
aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl
ciwKCQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApl
eHRlcm4gaW50IG1yYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsK
ZXh0ZXJuIGludCBqcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJ
ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkJICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHNyYW5k
NDhfciAgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp
ICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBf
X3NlZWQxNnZbM10sCgkJCSAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJvdyAo
KSAgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3
XSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJvdyAoKSAgOwoKCgoK
CgoKIApleHRlcm4gdm9pZCAqICBtYWxsb2MgIChzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsK
IApleHRlcm4gdm9pZCAqICBjYWxsb2MgIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkg
IHRocm93ICgpICA7CgoKCiAKCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2b2lkICogIF9fcHRy
LCBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBmcmVlICAodm9pZCAq
ICBfX3B0cikgIHRocm93ICgpICA7CgoKIApleHRlcm4gdm9pZCBjZnJlZSAgKHZvaWQgKiAgX19w
dHIpICB0aHJvdyAoKSAgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAz
MTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAyNSAiL3Vzci9pbmNsdWRl
L2FsbG9jYS5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCgoKIApleHRlcm4gdm9pZCAqICBhbGxv
Y2EgIChzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCgoKCgp9IAoKCiMgNDkyICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKIApleHRlcm4gdm9pZCAqICB2YWxsb2MgIChzaXplX3Qg
X19zaXplKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gdm9pZCBhYm9ydCAgKHZvaWQpICB0aHJv
dyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBpbnQgYXRl
eGl0ICAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gaW50
IF9fb25fZXhpdCAgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcp
LAoJCQkgICB2b2lkICogIF9fYXJnKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBvbl9leGl0ICAo
dm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBfX2FyZyksCgkJCSB2b2lkICog
IF9fYXJnKSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIHZvaWQgZXhpdCAgKGludCBfX3N0YXR1
cykgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKCiAK
ZXh0ZXJuIGNoYXIgKmdldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsK
CiAKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
IHRocm93ICgpICA7CgoKIAogCgpleHRlcm4gaW50IHB1dGVudiAgKGNoYXIgKl9fc3RyaW5nKSAg
dGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBzZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFt
ZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLAoJCQlpbnQgX19yZXBsYWNlKSAgdGhyb3cgKCkgIDsK
CiAKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgp
ICA7CgoKCiAKCgpleHRlcm4gaW50IGNsZWFyZW52ICAodm9pZCkgIHRocm93ICgpICA7CgoKCgog
CgoKCmV4dGVybiBjaGFyICpta3RlbXAgIChjaGFyICpfX3RlbXBsYXRlKSAgdGhyb3cgKCkgIDsK
CiAKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICB0aHJvdyAoKSAg
OwoKCgogCmV4dGVybiBpbnQgc3lzdGVtICAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpICB0aHJv
dyAoKSAgOwoKCgoKCgoKCgoKIAoKCgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25hbWUsCgkJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2
ZWQpICB0aHJvdyAoKSAgOwoKCgogCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAgKF9f
Y29uc3Qgdm9pZCAqICwgX19jb25zdCB2b2lkICogKSAgOwoKCgoKCgogCgpleHRlcm4gdm9pZCAq
ICBic2VhcmNoICAoX19jb25zdCB2b2lkICogIF9fa2V5LCBfX2NvbnN0IHZvaWQgKiAgX19iYXNl
LAoJCQkgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgICBfX2Nv
bXBhcl9mbl90IF9fY29tcGFyKSAgOwoKIAoKZXh0ZXJuIHZvaWQgcXNvcnQgICh2b2lkICogIF9f
YmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCgkJCSAgX19jb21wYXJfZm5fdCBf
X2NvbXBhcikgIDsKCgogCmV4dGVybiBpbnQgYWJzICAoaW50IF9feCkgIHRocm93ICgpICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAgKGxvbmcgaW50
IF9feCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgogCgog
CmV4dGVybiBkaXZfdCBkaXYgIChpbnQgX19udW1lciwgaW50IF9fZGVub20pICB0aHJvdyAoKSAg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2ICAobG9uZyBp
bnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgoKIAoKCiAKCgpleHRlcm4gY2hhciAqZWN2dCAgKGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCQlp
bnQgKl9fcmVzdHJpY3QgX19zaWduKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gY2hhciAqZmN2
dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gY2hh
ciAqZ2N2dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnFlY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg
X19zaWduKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0ICAobG9uZyBkb3VibGUgIF9f
dmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGNoYXIgKnFnY3Z0ICAobG9uZyBk
b3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpICB0aHJvdyAoKSAgOwoK
CgogCgpleHRlcm4gaW50IGVjdnRfciAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLAoJCQlzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50
IGZjdnRfciAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAoJCQlzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBxZWN2dF9yICAobG9u
ZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBxZmN2dF9yICAobG9uZyBkb3Vi
bGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp
bnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90
IF9fbGVuKSAgdGhyb3cgKCkgIDsKCgoKCiAKCmV4dGVybiBpbnQgbWJsZW4gIChfX2NvbnN0IGNo
YXIgKl9fcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiBpbnQgbWJ0b3djICAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiBpbnQgd2N0b21iICAoY2hhciAq
X19zLCB3Y2hhcl90IF9fd2NoYXIpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBtYnN0
b3djcyAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgIF9fcHdjcywKCQkJICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gc2l6ZV90
IHdjc3RvbWJzICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCiAKCgoKZXh0
ZXJuIGludCBycG1hdGNoICAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSAgdGhyb3cgKCkgIDsK
CgoKIyA3MzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgojIDc1NiAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCgoKIyA3NjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoKCn0gCgoK
IyA1NCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9h
c3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9h
c3NlcnQuaCIgMwoKCgoKCiAKCgoKCiMgNTYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4
dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAgKF9fY29uc3QgY2hhciAq
X19hc3NlcnRpb24sCgkJCQlfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJCXVuc2lnbmVkIGludCBf
X2xpbmUsCgkJCQlfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pICB0aHJvdyAoKSAgCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJy
b3JfZmFpbCAgKGludCBfX2Vycm51bSwKCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fZmlsZSwK
CQkJCSAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAoJCQkJICAgICAgIF9fY29uc3QgY2hhciAq
X19mdW5jdGlvbikgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7Cgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgogICAgIAogICAgIAogICAgIAojIDEg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoj
IDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDI3OSAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwoKCgojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CiAKCgoKCgoKCgoKCgogCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlv
cml0eTsKICB9OwoKZXh0ZXJuICJDIiB7IAoKIAoKZXh0ZXJuIGludCBjbG9uZSAgKGludCAoKl9f
Zm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCgkJICAgICAgIGludCBfX2Zs
YWdzLCB2b2lkICpfX2FyZykgIHRocm93ICgpICA7CgoKfSAKCgoKCgoKIApzdHJ1Y3QgX19zY2hl
ZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwoKCiMgMzIgIi91c3IvaW5j
bHVkZS9zY2hlZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCmV4dGVybiBpbnQgX19zY2hlZF9z
ZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsCgkJCQkgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAgKF9fcGlk
X3QgX19waWQsCgkJCQlfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93
ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsIHN0
cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRf
Z2V0cGFyYW0gIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0
aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVyICAoX19waWRfdCBf
X3BpZCwgaW50IF9fcG9saWN5LAoJCQkJICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcGFyYW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAgKF9f
cGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9w
YXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRzY2hl
ZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9nZXRz
Y2hlZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3Nj
aGVkX3lpZWxkICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfeWllbGQgICh2
b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXgg
IChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlv
cml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9f
c2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRobSkgIHRocm93ICgpICA7CmV4
dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRobSkgIHRocm93
ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIChfX3BpZF90IF9f
cGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRf
cnJfZ2V0X2ludGVydmFsICAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpICB0
aHJvdyAoKSAgOwoKfSAKCgojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgpl
eHRlcm4gIkMiIHsgCgoKCgogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut
bGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut
bGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMg
MzE3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMzggIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDIgMwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKIAoKCgoKCiAKCgoKCgoKCiMgNTkgIi91c3Iv
aW5jbHVkZS9iaXRzL3RpbWUuaCIgMwogCiMgNDIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoK
CiAKCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgojIDczICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK
CgoKIApzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CQkJIAogIGludCB0bV9taW47CQkJIAogIGlu
dCB0bV9ob3VyOwkJCSAKICBpbnQgdG1fbWRheTsJCQkgCiAgaW50IHRtX21vbjsJCQkgCiAgaW50
IHRtX3llYXI7CQkJIAogIGludCB0bV93ZGF5OwkJCSAKICBpbnQgdG1feWRheTsJCQkgCiAgaW50
IHRtX2lzZHN0OwkJCSAKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsJCSAKICBfX2NvbnN0IGNoYXIg
KnRtX3pvbmU7CSAKCgoKCn07CgoKIAoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgICh2b2lkKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIHRpbWVfdCB0aW1lICAodGltZV90ICpfX3RpbWVyKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3Qg
X190aW1lMCkgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cgog
CmV4dGVybiB0aW1lX3QgbWt0aW1lICAoc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsKCgog
CgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19tYXhzaXplLAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkJ
ICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSAgdGhyb3cgKCkgIDsKCgoK
CgoKCgoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lICAoX19jb25zdCB0aW1lX3QgKl9fdGlt
ZXIpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lICAoX19jb25z
dCB0aW1lX3QgKl9fdGltZXIpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKl9f
Z210aW1lX3IgIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkJICAgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApICB0aHJvdyAoKSAgOwpleHRlcm4gc3RydWN0IHRtICpn
bXRpbWVfciAgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCgkJCQkgc3RydWN0
IHRtICpfX3Jlc3RyaWN0IF9fdHApICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAq
bG9jYWx0aW1lX3IgIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkJICAg
IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gY2hh
ciAqYXNjdGltZSAgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGNoYXIgKmN0aW1lICAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpICB0aHJvdyAoKSAgOwoK
CiAKCiAKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0
cmljdCBfX3RwLAoJCQkgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoK
IApleHRlcm4gY2hhciAqY3RpbWVfciAgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGlt
ZXIsCgkJCSAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVy
biBjaGFyICpfX3R6bmFtZVsyXTsJIApleHRlcm4gaW50IF9fZGF5bGlnaHQ7CQkgCmV4dGVybiBs
b25nIGludCBfX3RpbWV6b25lOwkgCgoKCiAKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCiAKCmV4
dGVybiB2b2lkIHR6c2V0ICAodm9pZCkgIHRocm93ICgpICA7CgoKCmV4dGVybiBpbnQgZGF5bGln
aHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKIAoKZXh0ZXJuIGludCBzdGltZSAgKF9f
Y29uc3QgdGltZV90ICpfX3doZW4pICB0aHJvdyAoKSAgOwoKCgogCgoKCgoKCiAKCgogCmV4dGVy
biB0aW1lX3QgdGltZWdtICAoc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu
IHRpbWVfdCB0aW1lbG9jYWwgIChzdHJ1Y3QgdG0gKl9fdHApICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IGR5c2l6ZSAgKGludCBfX3llYXIpICB0aHJvdyAoKSAgOwoKCgoKIApleHRlcm4gaW50
IG5hbm9zbGVlcCAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAoJ
CQkgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSAgdGhyb3cgKCkgIDsKCgoKIyAyNjQg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDI3NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK
Cgp9IAoKCgoKIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3NpZ25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgpleHRl
cm4gIkMiIHsgCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwoKCgogCgoKCgoK
IyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUv
c2lnbmFsLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRf
dDsKCgoKIyAzNjAgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKCn0gCgoKIyAyNCAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl
cy5oIiAxIDMKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2lu
Y2x1ZGUvYml0cy9zY2hlZC5oIiAzCgoKIyA3MyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIg
MwoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCiAKc3RydWN0
IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsgICAgICAgICAgICAgCiAg
aW50IF9fc3BpbmxvY2s7ICAgICAgICAgICAgICAgIAp9OwoKCiAKdHlwZWRlZiBzdHJ1Y3QgX3B0
aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj
aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv
cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq
X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCiAK
dHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsgIAog
IF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9IHB0aHJlYWRfY29uZF90OwoK
CiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsK
CiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgogCiAKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAgICAKICBpbnQgX19tX2NvdW50
OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7ICAgICAgICAK
ICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz
dGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoKIAp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKIAp0eXBlZGVmIGlu
dCBwdGhyZWFkX29uY2VfdDsKCgojIDExNiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgojIDI1ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKCgoKCgoK
CgoKCgoKIAoKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JF
QVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhS
RUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgog
IFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfRkFTVF9O
UCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hF
Q0tfTlAKCgoKCgoKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRI
UkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCiMgMTAzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz
CgoKCgogCgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRp
bmUpICAodm9pZCAqKSAgOwkgICAKICB2b2lkICpfX2FyZzsJCQkJICAgCiAgaW50IF9fY2FuY2Vs
dHlwZTsJCQkgICAKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsgIAp9
OwoKIAoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9E
SVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9D
QU5DRUxfQVNZTkNIUk9OT1VTCgp9OwoKCgogCgogCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0
ZSAgKHB0aHJlYWRfdCAqX190aHJlYWQsCgkJCQlfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQl2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCgkJCQl2b2lkICpfX2Fy
ZykgIHRocm93ICgpICA7CgogCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICAodm9pZCkg
IHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAgKHB0aHJlYWRfdCBfX3Ro
cmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBw
dGhyZWFkX2V4aXQgICh2b2lkICpfX3JldHZhbCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9qb2luICAocHRocmVhZF90
IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4g
aW50IHB0aHJlYWRfZGV0YWNoICAocHRocmVhZF90IF9fdGgpICB0aHJvdyAoKSAgOwoKCiAKCiAK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0ICAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikg
IHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgIChwdGhyZWFk
X2F0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
c2V0ZGV0YWNoc3RhdGUgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICAgaW50IF9f
ZGV0YWNoc3RhdGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRk
ZXRhY2hzdGF0ZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGlu
dCAqX19kZXRhY2hzdGF0ZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHNjaGVkcGFyYW0gIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJICAgICAgICBfX2Nv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIsCgkJCQkJICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5ICAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX3BvbGljeSkgIHRocm93ICgpICA7CgogCmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5ICAoX19jb25zdCBwdGhyZWFkX2F0dHJf
dCAqX19hdHRyLAoJCQkJCSAgICAgaW50ICpfX3BvbGljeSkgIHRocm93ICgpICA7CgogCmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQkJICAgICAgaW50IF9faW5oZXJpdCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwKCQkJCQkgICAgICBpbnQgKl9faW5oZXJpdCkgIHRocm93ICgpICA7CgogCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHNjb3BlICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9f
c2NvcGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAg
KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCSAgICAgICBpbnQgKl9fc2NvcGUp
ICB0aHJvdyAoKSAgOwoKIyAyMjQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKCgogCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQkJICAgdm9pZCAqX19zdGFja2FkZHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQkJICAgdm9pZCAqKl9fc3RhY2thZGRyKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJ
CQkJCSAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwK
CQkJCQkgICBzaXplX3QgKl9fc3RhY2tzaXplKSAgdGhyb3cgKCkgIDsKCiAKCiAKCmV4dGVybiBp
bnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtICAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50
IF9fcG9saWN5LAoJCQkJICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFt
KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gIChwdGhy
ZWFkX3QgX190YXJnZXRfdGhyZWFkLAoJCQkJICAgICAgIGludCAqX19wb2xpY3ksCgkJCQkgICAg
ICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKIAoK
IAoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfaW5pdCAgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCwKCQkJCSAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19tdXRleF9hdHRyKSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQgIChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhf
YXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kg
IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJl
YWRfbXV0ZXhfZGVzdHJveSAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7
CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3RyeWxvY2sgIChwdGhyZWFkX211dGV4X3Qg
Kl9fbXV0ZXgpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAg
KHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19w
dGhyZWFkX211dGV4X2xvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAg
OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAgKHB0
aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleF91bmxvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKCiAK
CiAKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9pbml0ICAocHRocmVhZF9tdXRleGF0
dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9p
bml0ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu
IGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4YXR0cl90ICpf
X2F0dHIpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kg
IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpICB0aHJvdyAoKSAgOwoKIyAzMTYgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKCgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5p
dCAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0
dHJfdCAqX19jb25kX2F0dHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29u
ZF9kZXN0cm95ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgIHRocm93ICgpICA7CgogCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpICB0aHJv
dyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgIChwdGhyZWFkX2Nv
bmRfdCAqX19jb25kKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dh
aXQgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kLAoJCQkJICAgcHRocmVhZF9tdXRleF90ICpfX211
dGV4KSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0
ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCwKCQkJCQlwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgs
CgkJCQkJX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fYWJzdGltZSkgIHRocm93ICgpICA7Cgog
CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0ICAocHRocmVhZF9jb25kYXR0cl90
ICpfX2F0dHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVz
dHJveSAgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCgojIDQwOSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoKCgogCgogCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJl
YWRfa2V5X2NyZWF0ZSAgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAoJCQkJICAgICAgdm9pZCAoKl9f
ZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFk
X2tleV9jcmVhdGUgIChwdGhyZWFkX2tleV90ICpfX2tleSwKCQkJCSAgICB2b2lkICgqX19kZXN0
cl9mdW5jdGlvbikgKHZvaWQgKikpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRf
a2V5X2RlbGV0ZSAgKHB0aHJlYWRfa2V5X3QgX19rZXkpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
aW50IF9fcHRocmVhZF9zZXRzcGVjaWZpYyAgKHB0aHJlYWRfa2V5X3QgX19rZXksCgkJCQkgICAg
ICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJl
YWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJICAgICBfX2NvbnN0IHZv
aWQgKl9fcG9pbnRlcikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICpfX3B0aHJlYWRfZ2V0
c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQg
KnB0aHJlYWRfZ2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkgIDsK
CgogCgogCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX29uY2UgIChwdGhyZWFkX29uY2VfdCAqX19v
bmNlX2NvbnRyb2wsCgkJCQl2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgIHRocm93ICgp
ICA7CmV4dGVybiBpbnQgcHRocmVhZF9vbmNlICAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250
cm9sLAoJCQkgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgIHRocm93ICgpICA7
CgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlICAoaW50IF9fc3RhdGUs
IGludCAqX19vbGRzdGF0ZSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0
Y2FuY2VsdHlwZSAgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSAgdGhyb3cgKCkgIDsKCiAK
ZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAgKHB0aHJlYWRfdCBfX3RocmVhZCkgIHRocm93ICgp
ICA7CgogCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICAodm9pZCkgIHRocm93ICgp
ICA7CgoKIAoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoICAoc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCQl2b2lkICgqX19yb3V0
aW5lKSAodm9pZCAqKSwKCQkJCQl2b2lkICpfX2FyZykgIHRocm93ICgpICA7CgogCgoKCgoKZXh0
ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i
dWZmZXIgKl9fYnVmZmVyLAoJCQkJICAgICAgIGludCBfX2V4ZWN1dGUpICB0aHJvdyAoKSAgOwoK
IAoKCiMgNTE1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKIAojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoK
ZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgIChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRf
dCAqX19uZXdtYXNrLAoJCQkJIF9fc2lnc2V0X3QgKl9fb2xkbWFzaykgIHRocm93ICgpICA7Cgog
CmV4dGVybiBpbnQgcHRocmVhZF9raWxsICAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdu
bykgIHRocm93ICgpICA7CgoKIyA1MTggIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCgog
CgogCgoKCgoKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9hdGZvcmsgICh2b2lkICgqX19wcmVw
YXJlKSAodm9pZCksCgkJCQkgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAoJCQkJICB2b2lkICgq
X19jaGlsZCkgKHZvaWQpKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAg
KHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJCXZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAoJ
CQkJdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIHZvaWQg
cHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgogCmV4
dGVybiB2b2lkIF9fcHRocmVhZF9pbml0aWFsaXplICAodm9pZCkgIHRocm93ICgpICA7Cgp9IAoK
CiMgNzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzCgoKCgoKCgoKIyA4NyAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDk3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMK
CiMgMTE1ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgoKCgoKCgoKIAoKCgoKCiAKIAoK
CgoKCgoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBz
dGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CgoKICBzdGF0aWMgdm9p
ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9j
KF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9f
bik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90ICApCiAgewogICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQq
IHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAg
IHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9f
cmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0
dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIo
dm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAg
IHJldHVybihfX29sZCk7CiAgfQoKfTsKCiAKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAo
KiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAo
KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7
OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHRocm93IGJhZF9h
bGxvYygpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jl
c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0
KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewog
ICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7Cgog
ICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHRo
cm93IGJhZF9hbGxvYygpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAg
ICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkg
cmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTwwPiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xh
c3Mgc2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVf
dCBfX24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9j
YXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQp
CiAgICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0K
ICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsg
aWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkp
OyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KfTsKCiAKIAogCiAKIAp0ZW1wbGF0ZSA8
Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19l
eHRyYSA9IDh9OyAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg
ewogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyBfU19l
eHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1cm4gX19yZXN1bHQg
KyBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIF9TX2V4dHJhOwog
ICAgKCh2b2lkKSAoKCAqKHNpemVfdCopX19yZWFsX3AgPT0gX19uICkgPyAwIDoJKF9fYXNzZXJ0
X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiAsCSIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs
bG9jLmgiLCAyNjMsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICBfQWxsb2M6OmRl
YWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAg
ewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQp
ICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiApID8gMCA6CShfX2Fzc2VydF9mYWls
ICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiAsCSIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs
bG9jLmgiLCAyNzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICBjaGFyKiBfX3Jl
c3VsdCA9IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9z
eiArIF9TX2V4dHJhLCBfX25ld19zeiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3Vs
dCA9IF9fbmV3X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKfTsKCgoK
CgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKCgoK
CgoKCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKICAgCiAgIAoKICAgIGVudW0ge19BTElHTiA9IDh9Owog
ICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhf
QllURVMvX0FMSUdOfTsKCiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5
dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyBfQUxJR04tMSkgJiB+KF9BTElHTiAtIDEp
KTsgfQoKcHJpdmF0ZSA6CiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJl
ZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsgICAgIAogIH07CnBy
aXZhdGU6CgoKCgogICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlICBfU19mcmVlX2xpc3RbX05GUkVF
TElTVFNdOwoKICBzdGF0aWMgIHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRl
cykgewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsK
ICB9CgogICAKICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwogICAKICAgCiAg
c3RhdGljIGNoYXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7
CgogICAKICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5k
X2ZyZWU7CiAgc3RhdGljIHNpemVfdCBfU19oZWFwX3NpemU7CgoKCgoKCgoKICAgIHN0YXRpYyBw
dGhyZWFkX211dGV4X3QgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCgoKCgoKIyAzODkgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGlj
OgogICAgICAgICAgICBfTG9jaygpIHsgaWYgKHRocmVhZHMpIHB0aHJlYWRfbXV0ZXhfbG9jaygm
X1Nfbm9kZV9hbGxvY2F0b3JfbG9jaykgOyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgaWYgKHRo
cmVhZHMpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU19ub2RlX2FsbG9jYXRvcl9sb2NrKSA7IH0K
ICAgIH07CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7CgpwdWJsaWM6CgogICAKICBzdGF0aWMgdm9p
ZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJl
ZV9saXN0OwogICAgX09iaiogICBfX3Jlc3VsdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01B
WF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fbikpOwog
ICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRl
eChfX24pOwogICAgIAogICAgIAogICAgIAoKICAgICAgICAgCiAgICAgICAgX0xvY2sgX19sb2Nr
X2luc3RhbmNlOwoKICAgIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgaWYgKF9fcmVz
dWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3IgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19u
KSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0KICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVz
dWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgcmV0dXJuIChfX3Jlc3VsdCk7CiAgfTsKCiAg
IAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAg
IF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJlZV9s
aXN0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9j
X2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBf
X215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAg
ICAgCgogICAgICAgICAKICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CgogICAgX19xIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgKl9fbXlfZnJlZV9saXN0
ID0gX19xOwogICAgIAogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBz
aXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPCB0cnVlICwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoKCgogCiAKIAogCnRlbXBs
YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX3RvdGFs
X2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19l
bmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFs
X2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0
YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAg
fSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChp
bnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUg
KiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19z
dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAg
IH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxf
Ynl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CiAgICAgICAgIAogICAgICAg
IGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlICogX19t
eV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19m
cmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilfU19zdGFy
dF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAg
ICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAg
ICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CgkgICAgX09iaiogX19wOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICBmb3Ig
KF9faSA9IF9fc2l6ZTsgX19pIDw9IF9NQVhfQllURVM7IF9faSArPSBfQUxJR04pIHsKICAgICAg
ICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k
ZXgoX19pKTsKICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAg
ICAgICAgIGlmICgwICE9IF9fcCkgewogICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlz
dCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICBfU19zdGFy
dF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9T
X3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2Fs
bG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCSAgICBfU19lbmRfZnJl
ZSA9IDA7CSAKICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6
OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9f
Z2V0OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0
OwogICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0K
fQoKCiAKIAogCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVf
dCBfX24pCnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1
bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xp
c3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2Jq
KiBfX25leHRfb2JqOwogICAgaW50IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4o
X19jaHVuayk7CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7CgogICAgIAogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAg
ICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsK
ICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9f
bmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmog
KyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19j
dXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0
X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0
KTsKfQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19v
bGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29w
eV9zejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6
ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19u
ZXdfc3opKTsKICAgIH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRf
dXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdf
c3opOwogICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25l
d19zejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0
ZShfX3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUg
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgcHRocmVhZF9tdXRleF90CiAgICBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRv
cl9sb2NrCiAgICAgICAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9GQVNUX05QLCB7MCwgMH19
IDsKCgoKCgoKCgoKIyA2MDIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiMgNjg5ICIv
dXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p
bnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf
U19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnNp
emVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFw
X3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZSAKX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsK
ICAgIF9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgfTsKIAogCiAKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsgICAg
ICAgICAgIApwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKICB0eXBlZGVm
IHB0cmRpZmZfdCAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVy
OwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAg
ICByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl
ZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVj
dCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxs
b2NhdG9yKCkgdGhyb3coKSAge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3co
KSAge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxf
VHAxPiYpIHRocm93KCkgIHt9CiAgfmFsbG9jYXRvcigpIHRocm93KCkgIHt9CgogIHBvaW50ZXIg
YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9p
bnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K
CiAgIAogICAKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkg
ewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0
ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCiAgIAog
IHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9j
OjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhf
c2l6ZSgpIGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9U
cCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsg
bmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3At
Pn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewogIHR5cGVk
ZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZv
aWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRv
cjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9j
YXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25z
dCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0Fs
bG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9U
cCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBv
dGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgX19hbGxvY2F0b3IoY29u
c3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f
YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxv
Y2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpIAogICAg
OiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxv
Y2F0b3IoKSB0aHJvdygpICB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29u
c3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVu
Y2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAKICBfVHAqIGFsbG9jYXRlKHNpemVf
dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAg
PyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6
ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRl
ciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRl
KF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9p
ZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1Rw
KF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9j
PiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVl
X3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp
bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0
b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19h
bGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCiAKIAogCgp0ZW1wbGF0ZSA8aW50
IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+
CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGJvb2wgX190aHJl
YWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQp7CiAg
cmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1
Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxv
YzxfQWxsb2M+JikgewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBm
YWxzZTsKfQoKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAogCiAKIAog
CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9j
X3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjogICByZWJpbmQ8X1RwPjo6b3RoZXIKICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
YXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3Rh
bmNlbGVzczsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsK
CiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRz
PF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8
X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog
IHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190
eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxs
b2NhdG9yX3R5cGU7Cn07CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGlu
dCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAg
X19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4Kewog
IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1w
bGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5
cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
VHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAg
ICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+
ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3Jf
dHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+
CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8
X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j
X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBh
bGxvY2F0b3JfdHlwZTsKfTsKCgoKCgoKCgogCgoKCgoKIAogCiAKIyAyMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2FsbG9jLmgiIDIgMwoKCgojIDQwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMwoKCgoKIAogCiAK
IyAzOSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpj
bGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
bWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3Ii
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1
cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8
IF9feSk7Cn0KCiAKCgoKIAogCiAKIyAzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y
Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyAzMiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAy
IDMKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1i
dWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK
CiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsKCgoKIAoKIyAx
MjIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA5ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCiMgNDggIi91
c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCiMgNjcgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgOTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpz
dHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAKCgoKCgoKCnR5cGVkZWYgdm9p
ZCBfSU9fbG9ja190OwoKCgogCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJr
ZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7
CiMgMTg2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAg
aW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lPX3JlYWRfcHRyOwkgCiAgY2hhciog
X0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFzZTsJIAogIGNoYXIqIF9JT193cml0
ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAogIGNoYXIqIF9JT193cml0ZV9lbmQ7
CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBfSU9fYnVmX2VuZDsJIAogICAKICBj
aGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIAogIGNoYXIg
Kl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVj
dCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19v
ZmZfdCAgIF9vbGRfb2Zmc2V0OyAgCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47
CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAK
CiAgX0lPX2xvY2tfdCAqX2xvY2s7CgoKCgoKCgoKICBfX29mZjY0X3QgICBfb2Zmc2V0OwogICAK
ICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP
XzJfMV9zdGRlcnJfOwoKCgoKCgoKCgoKCiAKCiAKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVh
ZF9mbiAgKHZvaWQgKiAgX19jb29raWUsIGNoYXIgKl9fYnVmLAoJCQkJICAgICAgIHNpemVfdCBf
X25ieXRlcykgIDsKCiAKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICAodm9p
ZCAqICBfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKCQkJCSAgICAgIHNpemVfdCBfX24p
ICA7CgogCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwg
X19vZmZfdCAgIF9fcG9zLCBpbnQgX193KSAgOwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2Zu
ICAodm9pZCAqICBfX2Nvb2tpZSkgIDsKCgojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
CgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChfSU9fRklMRSAqKSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7
CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIHRocm93ICgpICA7CgoK
CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICB0aHJv
dyAoKSAgOwpleHRlcm4gaW50IF9JT19wdXRjICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICB0
aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAo
KSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7
CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgp
ICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cg
KCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93ICgp
ICA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAoKSAg
OwoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mICAoX0lPX0ZJTEUgKiBfX3Jlc3Ry
aWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAsIGlu
dCAqX19yZXN0cmljdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmICAoX0lP
X0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCgkJCSAgICAgIF9fZ251
Y192YV9saXN0ICkgIHRocm93ICgpICA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAgKF9J
T19GSUxFICosIGludCwgX19zc2l6ZV90ICApICB0aHJvdyAoKSAgOwpleHRlcm4gc2l6ZV90ICAg
X0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QgICkgIHRocm93ICgpICA7Cgpl
eHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwg
aW50LCBpbnQpICB0aHJvdyAoKSAgOwpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgIChf
SU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50KSAgdGhyb3cgKCkgIDsKCmV4dGVybiB2b2lkIF9J
T19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CgoKfQoKCgojIDM2
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKfQogCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCnZvaWQgdmFfZW5kIChfX2du
dWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgogCgoKCgogCgogCgogCgp0eXBl
ZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDAg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpl
eHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVh
bWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2NF90ICAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9fb2Zm
NjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6ZTsKCnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19p
b3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwog
ICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsK
ICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUg
X2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOyAgCn07
CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgpjbGFz
cyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAog
IGlvcyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10
ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7
CiAgICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsK
CWdvb2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAg
fTsKICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJ
YXBwID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQg
LAoJYmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJl
ZywgY3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAg
ICBlbnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFs
PSAwMTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFz
ZT0gMDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bv
cz0gMDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVu
aXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJh
c2VmaWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRq
dXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGll
OyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsg
X3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAgd2NoYXJfdCAgIGZpbGwoKSBjb25z
dCB7IHJldHVybiBfZmlsbDsgfQogICAgd2NoYXJfdCAgIGZpbGwod2NoYXJfdCAgIG5ld2YpCgl7
d2NoYXJfdCAgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBm
bXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxh
Z3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdz
ID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7
IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7Cgl1bnNp
Z25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9y
dCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7
CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJp
dHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7Cglm
bXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2
YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFn
cyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5tYXNrOyBy
ZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9
CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFs
OyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0K
CiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBfc3RyYnVmID8g
c3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19m
YWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsK
CWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBz
ZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBf
ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJl
dHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAm
IGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChp
b3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4g
X3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkg
PyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBf
ZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CglfZXhj
ZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1
cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9
CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpf
b2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAg
ICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3lu
Y193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFn
cyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChp
bnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAg
ICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFzcyBJbml0IHsK
ICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlu
bGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDApOwogICAgaW5s
aW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBv
c3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7
CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2Vy
IHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9m
ZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVh
bWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsgcmV0dXJu
ICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsK
CnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmllbmQgY2xhc3Mg
aW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsK
ICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgp
IHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3Rl
Y3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4
Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQg
X2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3Mg
ICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAgY2hhciogcHB0
cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRyKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2VuZCA6IF9JT19y
ZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5k
OyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAg
ICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBf
SU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lP
X2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBf
SU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0
cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0KICAgIGludCB4
ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30K
ICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAgdm9pZCB4c2V0
ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNr
KSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICAm
IDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9CiAgICB2b2lk
IHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBzZXRiKGNoYXIq
IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBjaGFyKiBlcCkK
ICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7
IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsKICAgICAgaWYg
KF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAKICAgICAgX0lP
X3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQog
ICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQgaW5fYmFj
a3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpHYmFzZSgp
IHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0K
ICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9l
bmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5f
YmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0
cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJwdHIoKSB7
IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAg
Y2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigp
IHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4g
X0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1
cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAg
ICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9m
bGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAgCiAgICBz
dHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxs
KCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1
YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7
ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1Zmxvdygp
OyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVh
bXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0
cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVh
bXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6
b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1v
ZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1v
ZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0
dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNl
ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7
IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNz
ZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsK
ICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58
aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVu
KTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsK
CiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAg
IGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZm
ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVy
ZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9pZCB1bmJ1ZmZl
cmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0K
ICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsg
ZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFz
ZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2FsbG9jYXRlKCk7
IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9h
bGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFpbCgpIHsg
cmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93YWl0aW5n
KCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1z
aXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMs
IG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikgeyByZXR1
cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBz
LCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQogICAgaW50
IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29sdW1uKGlu
dCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6ZV90ICAgbiwgY2hhciBkZWxpbSwg
aW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0
YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9
CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyID49ICgg
IHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICApID09ICgtMSkg
ID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAg
OyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQg
JiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVsc2UgcmV0
dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYgKF9J
T19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2c2Nh
bihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19u
dWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0o
Y2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3JtKGNoYXIg
Y29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hh
ciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0
ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2Vl
ayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAg
IHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKICAgIHZpcnR1YWwgaW50IHNob3dtYW55
YygpOwogICAgdmlydHVhbCB2b2lkIGltYnVlKHZvaWQgKik7Cgp9OwoKIAogCgpjbGFzcyBmaWxl
YnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7CiAgcHJvdGVjdGVkOgogICAgdm9pZCBpbml0KCk7CiAg
cHVibGljOgogICAgc3RhdGljIGNvbnN0IGludCBvcGVucHJvdDsgIAogICAgZmlsZWJ1ZigpOwog
ICAgZmlsZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAsIGludCBsZW4p
OwoKCgogICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOwogICAgZmls
ZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7CiAgICBm
aWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpb3M6Om9wZW5tb2RlIG1vZGUsIGlu
dCBwcm90ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZpcnR1YWwg
aW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOwogICAgaW50IGlzX29wZW4oKSBjb25zdCB7IHJl
dHVybiBfZmlsZW5vID49IDA7IH0KICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIGlzX29wZW4o
KSA/IF9maWxlbm8gOiAoLTEpIDsgfQogICAgZmlsZWJ1ZiogY2xvc2UoKTsKICAgIHZpcnR1YWwg
aW50IGRvYWxsb2NhdGUoKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2Zm
LCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJl
YW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHN0cmVhbXNpemUgeHNwdXRuKGNv
bnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBz
LCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogIHByb3RlY3RlZDogIAog
CiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdwdHIoKTsgfQogICAg
Y2hhciogY3VyX3B0cigpIHsgcmV0dXJuIGlzX3JlYWRpbmcoKSA/ICBncHRyKCkgOiBwcHRyKCk7
IH0KICAgICAKICAgIGNoYXIqIGZpbGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsgfQogICAgIAog
ICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXpl
KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUp
OwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgCiAgICB2aXJ0dWFsIGludCBzeXNf
Y2xvc2UoKTsKCgoKCn07CgppbmxpbmUgdm9pZCBpb3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0
cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2IgPyBpb3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJp
dDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsg
X2ZpbGw9JyAnOwoKCQlfZmxhZ3M9aW9zOjpza2lwd3N8aW9zOjpkZWM7CgoKCgkJX3ByZWNpc2lv
bj02OyBfYXJyYXlzID0gMDsgfQoKaW5saW5lIGlvczo6aW9zKHN0cmVhbWJ1Ziogc2IsIG9zdHJl
YW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9CgppbmxpbmUgaW9zOjp+aW9zKCkgewoK
CgogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9hcnJheXMpOwp9Cn0gIAoKIyAz
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlz
dHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBl
ZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9f
b21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0
ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChv
c3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFz
cyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgp
OwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwg
b3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSBy
ZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9
CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9z
OjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAg
b3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9
CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAg
ICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAg
ICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0
ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0
ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywg
c3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQog
ICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9m
ZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShj
b25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZv
cm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hh
ciBjKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAo
KnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIg
YykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBj
aGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwg
KGNvbnN0IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
dW5zaWduZWQgaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0
cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0m
IG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwoc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGlu
dCluKTt9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9y
PDwoKGludCliKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7
IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0
dXJuICp0aGlzO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07Cgpj
bGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKcHJvdGVjdGVkOgogICAg
c2l6ZV90ICAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3Ry
ZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFt
KnRpZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh
ciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50
IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBk
ZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNp
Z25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRs
aW5lKGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYg
Z2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJ
eyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYg
Z2V0KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVh
bSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyBy
ZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5l
KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4g
Z2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFy
ICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0
ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAg
ICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyBy
ZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIs
IHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAg
aXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJl
YW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBu
ZWVkID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9
CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9h
dmFpbCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAm
IGlvczo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAg
ICB9CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQp
OyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJ
ICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSBy
ZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0
KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYg
cmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0K
ICAgIH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgp
KSByZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAg
ICAgICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsK
CQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90
ICAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBu
PTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vl
a2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7Cglp
ZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6
YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29k
KCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly
ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsK
ICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFy
Z3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXAp
OyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJh
dG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAg
aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4o
KGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1
cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsK
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVh
bSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNo
b3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVh
bSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVu
c2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0
cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUm
KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0
aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlv
c3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBp
b3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBf
X251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVh
bSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYp
OwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNz
aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAo
cmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVh
bSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYp
OwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNz
aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAo
cmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4g
X0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dp
dGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpl
eHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2Nr
KG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoK
c3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsg
aS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9
CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6
OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5z
ZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0g
IAoKCiMgMzYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK
CnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFn
IHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3Jf
dGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAogCiAKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg
ICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRl
cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAg
ICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAiL3Vzci9saWIvZ2NjLWxp
Yi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9pdGVyYXRvci5oIiAzCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRl
cmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0
ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZh
bHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6
OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAg
ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJl
ZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8
Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBl
ZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgogCiAKIAogCgog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVy
JikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRp
Y19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+
KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAg
cmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVl
X3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9CgoK
dGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsg
cmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cmlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90
eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9CgoKCgoK
IyAyNTkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24g
Kz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5j
ZSYgX19uKQp7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5s
aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rp
c3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgcmV0
dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv
cj46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVy
JiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24t
LSkgKytfX2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0tKSAr
K19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIAogICAg
ICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfX2kgKz0g
X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKSB7
CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVj
dGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5l
ciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFp
bmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5
cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh
dG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgMzc4
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRh
aW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0
ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9p
bnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJs
aWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVk
ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250
X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBl
bmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5w
dXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJv
bnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50
KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3Iu
aCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJl
dHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBf
Q29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRl
cjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsK
ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg
ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9p
bnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBpbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBf
X2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
dWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBf
X3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7
IH0KfTsKCiMgNDU5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4g
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVy
ZW5jZSA9IF9UcCYsIAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoK
CmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNl
X2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFu
Y2U+ICBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsK
cHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZl
cmVuY2UgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Io
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVm
ZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190
bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9y
KysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh
dG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxm
IF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoK
IyA1NTAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBf
QmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxf
aXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsIAogICAgY29uc3Qg
cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3Rh
bmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKCgogCiAK
IAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3Ig
CnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAg
ICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5j
ZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkg
e30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJl
bnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVu
dChfX3guY3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRl
cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChf
X3guYmFzZSgpKSB7fQoKICAgIAogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9y
IF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3Bl
cmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg
b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7
CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJy
ZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAg
X1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9
CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1
cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVu
Y2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJu
IF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNl
X3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
cmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4g
KigqdGhpcyArIF9fbik7IH0gIAp9OyAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194
LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194
LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICBjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194
LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiAKb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoKIyA4MDUgIi91c3IvbGliL2djYy1saWIvaTU4Ni1t
YW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0
b3IuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZm
X3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+
ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAg
aXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7
CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRy
dWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVl
OwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1
YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCAg
ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVmZXJlbmNlOwoKICBp
c3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNpbiksIF9NX2VuZF9tYXJrZXIoZmFsc2Up
IHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsg
X01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3Zh
bHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq
KCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9yKysoKSB7IAog
ICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxf
VHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf
RGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9
Cn07CgojIDg2NCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlz
dHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVy
biAoX194Ll9NX3N0cmVhbSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5k
X21hcmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJr
ZXIgPT0gZmFsc2UgJiYgX195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSog
X01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYgb3V0
cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAg
ICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0
cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9p
dGVyYXRvcihvc3RyZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVhbSgm
X19zKSwgX01fc3RyaW5nKF9fYykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRv
cj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAg
aWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7
IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fSAKICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp
czsgfSAKfTsKCiMgOTA3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCgoKCiAK
IAogCiMgMzggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgogCiAKIAojIDQ0ICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgX19vdXRfb2ZfcmFu
Z2UgKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIF9fbGVuZ3RoX2Vycm9yIChjb25zdCBjaGFy
ICopOwoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzID0g
c3RyaW5nX2NoYXJfdHJhaXRzPGNoYXJUPiwKCSAgY2xhc3MgQWxsb2NhdG9yID0gYWxsb2MgPgpj
bGFzcyBiYXNpY19zdHJpbmcKewpwcml2YXRlOgogIHN0cnVjdCBSZXAgewogICAgc2l6ZV90IGxl
biwgcmVzLCByZWY7CiAgICBib29sIHNlbGZpc2g7CgogICAgY2hhclQqIGRhdGEgKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyVCAqPih0aGlzICsgMSk7IH0KICAgIGNoYXJUJiBvcGVy
YXRvcltdIChzaXplX3QgcykgeyByZXR1cm4gZGF0YSAoKSBbc107IH0KICAgIGNoYXJUKiBncmFi
ICgpIHsgaWYgKHNlbGZpc2gpIHJldHVybiBjbG9uZSAoKTsgKytyZWY7IHJldHVybiBkYXRhICgp
OyB9CgogICAgdm9pZCByZWxlYXNlICgpCiAgICAgIHsKCXNpemVfdCBfX3ZhbDsKCSAKCSAKCSAK
CSAKCWFzbSAoIi5ieXRlIDB4ZjAsIDB4MGYsIDB4YzEsIDB4MDIiICAKCSAgICA6ICI9YSIgKF9f
dmFsKQoJICAgIDogIjAiICgtMSksICJtIiAocmVmKSwgImQiICgmcmVmKQoJICAgIDogIm1lbW9y
eSIpOwoKCWlmIChfX3ZhbCA9PSAxKQoJICBkZWxldGUgdGhpczsKICAgICAgfQojIDExMCAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAzCgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9w
ZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVf
dCk7CiAgICBjaGFyVCogY2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBj
b25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25z
dCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBj
aGFyVCwgICBzaXplX3QpOwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6
ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3Qp
OwoKICBwcml2YXRlOgogICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVi
bGljOgogCiAgdHlwZWRlZgkgICB0cmFpdHMJCXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5h
bWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFsdWVfdHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJ
YWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5
cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2lu
dGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0
eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0
eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxSZXAgKj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVw
ICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hh
clQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90
eXBlIGxlbmd0aCAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5
cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUg
Y2FwYWNpdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBl
IG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQp
OyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9
CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQog
ICAgewogICAgICBpZiAoJnN0ciAhPSB0aGlzKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0g
c3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxp
Y2l0IGJhc2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3Ry
aW5nIChjb25zdCBiYXNpY19zdHJpbmcmIF9zdHIpOiBkYXQgKF9zdHIucmVwICgpLT5ncmFiICgp
KSB7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGJhc2ljX3N0cmluZyYgX3N0ciwgc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFz
c2lnbiAoX3N0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBuKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAocywgbik7IH0K
ICBiYXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgp
KSB7IGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQog
ICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAobiwgYyk7IH0KCiAgdGVtcGxhdGU8
Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyhJbnB1dEl0ZXJhdG9yIF9fYmVn
aW4sIElucHV0SXRlcmF0b3IgX19lbmQpCgoKCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsg
YXNzaWduIChfX2JlZ2luLCBfX2VuZCk7IH0KCiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAg
KCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNpY19zdHJpbmcgJnMpIHsgY2hhclQg
KmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0KCiAgYmFzaWNfc3RyaW5nJiBhcHBl
bmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgX3N0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVf
dHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgX3N0ciwg
cG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90
eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIHMsIG4pOyB9CiAgYmFz
aWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChz
LCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKHNpemVfdHlw
ZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsg
fQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhcHBl
bmQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1
cm4gcmVwbGFjZSAoaWVuZCAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0
cmluZyYgYXNzaWduIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAs
CgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIHN0
ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBzLCBuKTsgfQogIGJhc2lj
X3N0cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFzc2lnbiAocywg
dHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChzaXplX3R5cGUg
biwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIG4sIGMpOyB9CgogIHRl
bXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIGFzc2lnbihJbnB1
dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJldHVybiByZXBs
YWNlIChpYmVnaW4gKCksIGllbmQgKCksIGZpcnN0LCBsYXN0KTsgfQoKICBiYXNpY19zdHJpbmcm
IG9wZXJhdG9yPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMpOyB9CiAg
YmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNoYXJUIGMpCiAgICB7IHJldHVybiBhc3NpZ24gKDEs
IGMpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBy
aHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHJocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9y
Kz0gKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChzKTsgfQogIGJhc2ljX3N0
cmluZyYgb3BlcmF0b3IrPSAoY2hhclQgYykKICAgIHsgcmV0dXJuIGFwcGVuZCAoMSwgYyk7IH0K
CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MxLCBjb25zdCBiYXNpY19zdHJp
bmcmIHN0ciwKCQkJc2l6ZV90eXBlIHBvczIgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7
IHJldHVybiByZXBsYWNlIChwb3MxLCAwLCBzdHIsIHBvczIsIG4pOyB9CiAgYmFzaWNfc3RyaW5n
JiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAg
IHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2Vy
dCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBpbnNlcnQgKHBv
cywgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXpl
X3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBv
cywgMCwgbiwgYyk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgcCwgY2hhclQgYykKICAg
IHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdp
biAoKSwgMSwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0K
ICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgcCwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7
IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwogICAgICBpbnNlcnQgKHAgLSBpYmVnaW4g
KCksIG4sIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9Cgog
IHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBw
LCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJlcGxh
Y2UgKHAsIHAsIGZpcnN0LCBsYXN0KTsgfQoKICBiYXNpY19zdHJpbmcmIGVyYXNlIChzaXplX3R5
cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9z
LCBuLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9y
IHApCiAgICB7IHNpemVfdHlwZSBfX28gPSBwIC0gYmVnaW4oKTsKICAgICAgcmVwbGFjZSAoX19v
LCAxLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGli
ZWdpbigpICsgX19vOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgZiwgaXRlcmF0b3IgbCkK
ICAgIHsgc2l6ZV90eXBlIF9fbyA9IGYgLSBpYmVnaW4oKTsKICAgICAgcmVwbGFjZSAoX19vLCBs
LWYsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApO3NlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVn
aW4oKSArIF9fbzsgfQoKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MxLCBz
aXplX3R5cGUgbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQkgc2l6ZV90eXBlIHBvczIg
PSAwLCBzaXplX3R5cGUgbjIgPSBucG9zKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsCgkJCSBzaXplX3R5cGUgbjIp
OwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBj
b25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbjEsIHMsIHRyYWl0czo6
bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNp
emVfdHlwZSBuMSwgc2l6ZV90eXBlIG4yLCBjaGFyVCBjKTsKICBiYXNpY19zdHJpbmcmIHJlcGxh
Y2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVw
bGFjZSAocG9zLCBuLCAxLCBjKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3Ig
aTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0cikKICAgIHsgcmV0dXJuIHJl
cGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBzdHIpOyB9CiAgYmFzaWNfc3RyaW5nJiBy
ZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5
cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBzLCBu
KTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBj
b25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAt
IGkxLCBzKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9y
IGkyLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJl
Z2luICgpLCBpMiAtIGkxLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9y
PgogICAgYmFzaWNfc3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwKCQkJ
ICBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKTsKCgoKCgpwcml2YXRlOgogIHN0
YXRpYyBjaGFyVCBlb3MgKCkgeyByZXR1cm4gdHJhaXRzOjplb3MgKCk7IH0KICB2b2lkIHVuaXF1
ZSAoKSB7IGlmIChyZXAgKCktPnJlZiA+IDEpIGFsbG9jIChsZW5ndGggKCksIHRydWUpOyB9CiAg
dm9pZCBzZWxmaXNoICgpIHsgdW5pcXVlICgpOyByZXAgKCktPnNlbGZpc2ggPSB0cnVlOyB9Cgpw
dWJsaWM6CiAgY2hhclQgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAg
ICAgaWYgKHBvcyA9PSBsZW5ndGggKCkpCglyZXR1cm4gZW9zICgpOwogICAgICByZXR1cm4gZGF0
YSAoKVtwb3NdOwogICAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykK
ICAgIHsgc2VsZmlzaCAoKTsgcmV0dXJuICgqcmVwICgpKVtwb3NdOyB9CgogIHJlZmVyZW5jZSBh
dCAoc2l6ZV90eXBlIHBvcykKICAgIHsKICAgICAgZG8geyBpZiAoIHBvcyA+PSBsZW5ndGggKCkg
KSBfX291dF9vZl9yYW5nZSAoInBvcyA+PSBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwogICAg
ICByZXR1cm4gKCp0aGlzKVtwb3NdOwogICAgfQogIGNvbnN0X3JlZmVyZW5jZSBhdCAoc2l6ZV90
eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgZG8geyBpZiAoIHBvcyA+PSBsZW5ndGggKCkgKSBf
X291dF9vZl9yYW5nZSAoInBvcyA+PSBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwogICAgICBy
ZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKcHJpdmF0ZToKICB2b2lkIHRlcm1pbmF0ZSAoKSBj
b25zdAogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0aCAoKV0sIGVvcyAoKSk7
IH0KCnB1YmxpYzoKICBjb25zdCBjaGFyVCogY19zdHIgKCkgY29uc3QKICAgIHsgY29uc3QgY2hh
clQqIG51bGxfc3RyID0gIiI7IAogICAgICBpZiAobGVuZ3RoICgpID09IDApIHJldHVybiBudWxs
X3N0cjsgdGVybWluYXRlICgpOyByZXR1cm4gZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXpl
X3R5cGUgbiwgY2hhclQgYyk7CiAgdm9pZCByZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNp
emUgKG4sIGVvcyAoKSk7IH0KICB2b2lkIHJlc2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVf
dHlwZSBjb3B5IChjaGFyVCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z
dDsKCiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUg
cG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxl
bmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBv
cywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywg
c2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChzLCBwb3MsIHRyYWl0
czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBv
cyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3Ry
LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0
YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJU
KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5k
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVy
biByZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5k
IChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5k
X2ZpcnN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNv
bnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5n
dGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAo
Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmlu
ZF9maXJzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZp
bmRfZmlyc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1
cm4gZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBm
aW5kX2xhc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlw
ZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUg
bikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3Ms
IHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBj
LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3Mp
OyB9CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBz
dHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rf
b2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2Zp
cnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBj
b25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBw
b3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2Yg
KGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFz
dF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykg
Y29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3Ry
Lmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCog
cywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xh
c3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAg
ICB7IHJldHVybiBmaW5kX2xhc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7
IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9
IG5wb3MpIGNvbnN0OwoKICBiYXNpY19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwg
c2l6ZV90eXBlIG4gPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhp
cywgcG9zLCBuKTsgfQoKICBpbnQgY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp
emVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0OwogICAKICBpbnQgY29t
cGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsK
ICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAog
ICAgeyByZXR1cm4gY29tcGFyZSAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0
ZXJhdG9yIGJlZ2luICgpIHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRl
cmF0b3IgZW5kICgpIHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0K
CnByaXZhdGU6CiAgaXRlcmF0b3IgaWJlZ2luICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlb
MF07IH0KICBpdGVyYXRvciBpZW5kICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3Ro
ICgpXTsgfQoKcHVibGljOgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJu
IGliZWdpbiAoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5k
ICgpOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJz
ZV9pdGVyYXRvciAoZW5kICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkg
Y29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICBy
ZXZlcnNlX2l0ZXJhdG9yICAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChi
ZWdpbiAoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyBy
ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZv
aWQgYWxsb2MgKHNpemVfdHlwZSBzaXplLCBib29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUg
X2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5
cGUgbGVuKTsKICBpbmxpbmUgYm9vbCBjaGVja19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7
CgogIHN0YXRpYyBSZXAgbmlsUmVwOwogIGNoYXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElu
cHV0SXRlcmF0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3Ig
aTEsIGl0ZXJhdG9yIGkyLCBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoK
CnsKICBjb25zdCBzaXplX3R5cGUgbGVuID0gbGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBp
MSAtIGliZWdpbiAoKTsKICBzaXplX3R5cGUgbjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9
IGoyIC0gajE7CgogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+
IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4g
LSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3Ro
X2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBz
aXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xl
bikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5j
b3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSAr
IHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2ox
LCArK3BvcykKCXRyYWl0czo6YXNzaWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChw
KTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEg
KCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsg
KytqMSwgKytwb3MpCgl0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9
CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gX3N0ciAobGhzKTsKICBfc3RyLmFwcGVuZCAocmhzKTsK
ICByZXR1cm4gX3N0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPgpvcGVyYXRvcisgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+IF9zdHIgKGxocyk7CiAgX3N0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJu
IF9zdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3Bl
cmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
IF9zdHIgKDEsIGxocyk7CiAgX3N0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIF9zdHI7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hh
clQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBfc3Ry
IChsaHMpOwogIF9zdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBfc3RyOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJUIHJocykKewogIGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFw
cGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09IChjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVy
biAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0
IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA9PSAwKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhz
LmNvbXBhcmUgKGxocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhz
KQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywK
CSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykK
ewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8
IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPiAwKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo
cmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo
cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID49IDApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBh
cmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0IGNoYXJUKiBsaHMs
IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg
cmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAo
Y29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0
IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID49IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi
b29sCm9wZXJhdG9yPiAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv
cGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJl
YW07IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9yPj4gKGlzdHJlYW0mLCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVh
bSYsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFt
JgpnZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0gIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jh
c3RyaW5nLmNjIiAxIDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAK
CiAKIAoKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIG5ldyAoc2l6ZV90IHMsIHNpemVfdCBleHRy
YSkKewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9jYXRlKHMgKyBleHRyYSAqIHNpemVvZiAoY2hh
clQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpSZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQgKiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxs
b2NhdGUocHRyLCBzaXplb2YoUmVwKSArCgkJCXJlaW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0cikt
PnJlcyAqCgkJCXNpemVvZiAoY2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBz
aXplX3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykgaSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJh
KQp7CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJhICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRy
YSkgUmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAtPnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZh
bHNlOwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwog
IHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5k
YXRhICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qgcywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAq
IChzIDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90
eXBlIHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAoY2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9
IGZhbHNlOwogIHJldHVybiAocmVwICgpLT5yZWYgPiAxCgkgIHx8IHMgPiBjYXBhY2l0eSAoKQoJ
ICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVf
dHlwZSBfX3NpemUsIGJvb2wgX19zYXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXpl
KSkKICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChf
X3NhdmUpCiAgICB7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAg
IHAtPmxlbiA9IGxlbmd0aCAoKTsKICAgIH0KICBlbHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1
cCAocCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEs
IHNpemVfdHlwZSBuMSwKCSBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvczIs
IHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdCBsZW4yID0gc3RyLmxlbmd0aCAoKTsKCiAg
aWYgKHBvczEgPT0gMCAmJiBuMSA+PSBsZW5ndGggKCkgJiYgcG9zMiA9PSAwICYmIG4yID49IGxl
bjIpCiAgICByZXR1cm4gb3BlcmF0b3I9IChzdHIpOwoKICBkbyB7IGlmICggcG9zMiA+IGxlbjIg
KSBfX291dF9vZl9yYW5nZSAoInBvczIgPiBsZW4yIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4y
ID4gbGVuMiAtIHBvczIpCiAgICBuMiA9IGxlbjIgLSBwb3MyOwoKICByZXR1cm4gcmVwbGFjZSAo
cG9zMSwgbjEsIHN0ci5kYXRhICgpICsgcG9zMiwgbjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNvcHkgKHNpemVfdCBwb3MsIGNv
bnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjpjb3B5IChkYXRh
ICgpICsgcG9zLCBzLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6Ogptb3ZlIChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6
ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6bW92ZSAoZGF0YSAoKSArIHBvcywgcywgbik7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90
eXBlIG4xLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4yKQp7CiAgY29uc3Qgc2l6ZV90eXBl
IGxlbiA9IGxlbmd0aCAoKTsKICBkbyB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2Ug
KCJwb3MgPiBsZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4x
ID0gbGVuIC0gcG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBf
X2xlbmd0aF9lcnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgw
KSA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9j
IChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAg
ICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRh
dGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywg
cywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCkt
Pm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwog
ICAgICByZXAgKCktPmNvcHkgKHBvcywgcywgbjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3
bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKc2V0IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBz
aXplX3QgbikKewogIHRyYWl0czo6c2V0ICAoZGF0YSAoKSArIHBvcywgYywgbik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBz
aXplX3R5cGUgbjIsIGNoYXJUIGMpCnsKICBjb25zdCBzaXplX3QgbGVuID0gbGVuZ3RoICgpOwog
IGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdo
aWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8g
eyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVu
IC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVu
ID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAg
ICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRh
ICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBs
ZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+c2V0ICAocG9zLCBjLCBuMik7CiAgICAgIHJlcHVw
IChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRh
dGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHJlcCAoKS0+c2V0ICAo
cG9zLCBjLCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhp
czsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUg
KHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgZG8geyBpZiAoIG4gPiBtYXhfc2l6ZSAoKSApIF9f
bGVuZ3RoX2Vycm9yICgibiA+IG1heF9zaXplICgpIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4g
PiBsZW5ndGggKCkpCiAgICBhcHBlbmQgKG4gLSBsZW5ndGggKCksIGMpOwogIGVsc2UKICAgIGVy
YXNlIChuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29weSAoY2hhclQq
IHMsIHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+
IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUg
KDApIDsKCiAgaWYgKG4gPiBsZW5ndGggKCkgLSBwb3MpCiAgICBuID0gbGVuZ3RoICgpIC0gcG9z
OwoKICB0cmFpdHM6OmNvcHkgKHMsIGRhdGEgKCkgKyBwb3MsIG4pOwogIHJldHVybiBuOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBm
b3IgKDsgeHBvcyArIG4gPD0gbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjplcSAo
ZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgeHBvcywg
cywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmluZCAoY29uc3QgY2hhclQqIHB0ciwg
Y2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pCnsKICBmb3IgKDsgeHBvcyA8
IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0ciBbeHBvc10sIGMpKQogICAgICBy
ZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHJldHVybiBfZmlu
ZCAoZGF0YSAoKSwgYywgcG9zLCBsZW5ndGggKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OgpyZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuKSBjb25zdAp7CiAgaWYgKG4gPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6
ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBv
czsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRh
ICgpIFt4cG9zXSwgKnMpCgkmJiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBu
KSA9PSAwKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0
CnsKICBpZiAoMSA+IGxlbmd0aCAoKSkKICAgIHJldHVybiBucG9zOwoKICBzaXplX3QgeHBvcyA9
IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwoKICBmb3Ig
KCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3Nd
LCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5
cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAo
OyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hw
b3NdLCAwLCBuKSAhPSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkg
PT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBp
ZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7
KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAg
cmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywg
c2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8
IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwg
bikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXpl
X3R5cGUgcG9zKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBs
ZW5ndGggKCk7ICsreHBvcykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykp
CiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVy
biBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykK
ICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5k
IChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAg
cmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6
ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFz
dF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkg
PT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBp
ZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7
KQogICAgaWYgKHRyYWl0czo6bmUgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhw
b3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46Ogpjb21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywg
c2l6ZV90eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlmICggcG9zID4gbGVuZ3RoICgpICkgX19vdXRf
b2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwoKICBzaXplX3Qgcmxl
biA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0gbjsKICBpZiAo
cmxlbiA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVuID0gc3RyLmxlbmd0aCAoKTsKICBpbnQgciA9
IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgc3RyLmRhdGEgKCksIHJsZW4pOwogIGlm
IChyICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAocmxlbiA9PSBuKQogICAgcmV0dXJuIDA7CiAg
cmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3RyLmxlbmd0aCAoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5n
dGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7
CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJs
ZW4gPSBuOwogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVu
KTsKICBpZiAociAhPSAwKQogICAgcmV0dXJuIHI7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3Mp
IC0gbjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppc3RyZWFtICYKb3BlcmF0b3I+PiAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiAmcykKewogIGludCB3ID0gaXMud2lkdGggKDApOwog
IGlmIChpcy5pcGZ4MCAoKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlz
LnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7CiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQg
Y2ggPSBzYi0+c2J1bXBjICgpOwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMu
c2V0c3RhdGUgKGlvczo6ZW9mYml0KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgZWxzZSBpZiAo
dHJhaXRzOjppc19kZWwgKGNoKSkKCSAgICB7CgkgICAgICBzYi0+c3VuZ2V0YyAoKTsKCSAgICAg
IGJyZWFrOwoJICAgIH0KCSAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCSAgaWYgKC0t
dyA9PSAxKQoJICAgIGJyZWFrOwoJfQogICAgfQoKICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0
aCAoKSA9PSAwKQogICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsK
fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
b3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0gJm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcykKewogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCks
IHMubGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMu
aXBmeDEgKCkpCiAgICB7CiAgICAgIHNpemVfdCAgIGNvdW50ID0gMDsKICAgICAgc3RyZWFtYnVm
ICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7CgogICAgICB3aGlsZSAoMSkK
CXsKCSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsK
CSAgICAgIGlzLnNldHN0YXRlIChjb3VudCA9PSAwCgkJCSAgID8gKGlvczo6ZmFpbGJpdHxpb3M6
OmVvZmJpdCkKCQkJICAgOiBpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgoJICAr
K2NvdW50OwoKCSAgaWYgKGNoID09IGRlbGltKQoJICAgIGJyZWFrOwoKCSAgcyArPSBzdGF0aWNf
Y2FzdDxjaGFyVD4gKGNoKTsKCgkgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAg
IHsKCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAg
fQoJfQogICAgfQoKICAgCiAgIAogIGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bnBvczsKCn0gIAojIDY1MyAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoKIyA2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAyIDMK
CgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8Y2hhcj4gc3RyaW5nOwoKCgp9
ICAKCgojIDQgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9u
b21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVkZS9SYW5nZS5oIiAyCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9p
b3N0cmVhbSIgMSAzCiAKIAoKCgoKCiMgNSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2lt
bGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL1JhbmdlLmgiIDIKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL2FsZ29yaXRobSIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9wYWlyLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz
cyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7
CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwog
IHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQogIHBhaXIoY29uc3QgX1Qx
JiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1Uy
PiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQoKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJl
dHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsg
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsg
CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fCAKICAgICAgICAgKCEoX195LmZpcnN0
IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7IAp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoY29u
c3QgX1QxJiBfX3gsIGNvbnN0IF9UMiYgX195KQp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9f
eCwgX195KTsKfQoKIAoKCgogCiAKIAojIDQyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgi
IDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX190cnVl
X3R5cGUgewp9OwoKc3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IAogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlz
X2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwogICAgICAgICAgICAgICAgICAgIAoKCgoKCiAg
ICAKCgoKCgoKCgogCgogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CgoKIAogCiAKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlw
ZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5
cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9f
dHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90
eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAq
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCiMgMjk1ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvdHlwZV90cmFpdHMuaCIgMwoKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVj
dCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1
bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGlu
dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3Ry
dWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNf
aW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKCgogCiAKIAojIDQ1ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
bWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKCgoKCiAK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUv
c3lzbGltaXRzLmgiIDEgMwogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKIyAxMTQgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK
IAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoK
CiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAojIDEg
Ii91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI3
ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCgoKIAoKCgoKCiAKCiAKCgogCgog
CgoKIAoKIAoKCiAKCgoKIAoKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIg
MiAzCgoKCgoKCgoKIAoKCgoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCgogCgoKCgogCgoKCiAKCgogCgoKCiAK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAzNCAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMKCgoKCgoKCgogCgoKCgoKIAoKIyAxMjEgIi91c3IvaW5jbHVkZS9s
aW1pdHMuaCIgMwoKCgoKICAKCgoKCgoKCgojIDExNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAyIDMKCgojIDExICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z
L2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKIAoKCgog
CgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoK
IAoKCgojIDEwNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgNDkgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDUxICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
bWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbmV3LmgiIDEgMwogCgoKCgoKCnVzaW5nIHN0
ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwoKCiMgNTIgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZCBfX2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCop
IHsKICBfVHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGlu
ZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsK
ICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9U
cCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYikgewogIHJldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4o
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1
cm4gX19jb21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2Ip
ID8gX19iIDogX19hOwp9CgogCiAKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1
dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0
cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0g
X19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9f
Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jl
c3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVy
biBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29w
eV9kaXNwYXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwog
ICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwg
KF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2Nv
cHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5
KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsK
ICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9U
cCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9f
Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19j
b3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgog
ICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBf
T3V0cHV0SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7Cn0KCiMgMjEzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy
LCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIg
X19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz
dCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
ciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNr
d2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f
biA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVz
dWx0Owp9CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1
Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAg
ICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFs
SXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9C
aWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90
eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCog
X19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFz
dCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9m
KF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAq
LCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2Zp
cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2Nv
cHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJ
MSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9C
STEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAg
ICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAg
ICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIs
IF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKfQoKIyAzMDMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFp
cjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7
CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7
CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091
dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0
ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+
KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBw
YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9u
KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091
dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f
cmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9f
Zmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9f
Zmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAg
fQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmly
c3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1p
c21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpf
X2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4g
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29s
IGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0g
X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9f
Zmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNh
dGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgogCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg
ICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9f
Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJl
dHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGlu
ZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsK
ICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVf
dCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVt
Y21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9f
cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBi
b29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBj
aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19m
aXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2Zp
cnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9Cgppbmxp
bmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19s
YXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19m
aXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwg
bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAK
ICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg
PCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGljYWxfY29t
cGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNo
YXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq
KSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg
Y2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzMCAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL2FsZ29yaXRobSIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uc3RydWN0LmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2lu
dGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZv
aWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBuZXcgKF9fcCkg
X1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1
Y3QoX1QxKiBfX3ApIHsKICBuZXcgKF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVzdHJv
eV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpIHt9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9fZGVz
dHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95
KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKaW5saW5lIHZv
aWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3kod2NoYXJfdCos
IHdjaGFyX3QqKSB7fQoKIAoKCgogCiAKIAojIDMxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb3JpdGhtIiAy
IDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCiAKCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlh
bGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXI+Cl9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
CnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsKICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYq
X19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBk
ZXN0cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAq
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9J
c19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoIF9fcmVzdWx0ICkgKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6
ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVz
dWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19s
YXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90KiAKdW5pbml0aWFsaXplZF9jb3B5KGNv
bnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwg
c2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg
KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJk
SXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
Y291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIF9Gb3J3YXJkSXRlciBf
X2N1ciA9IF9fcmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19j
b3VudCwgKytfX2ZpcnN0LCArK19fY3VyKSAKICAgICAgY29uc3RydWN0KCYqX19jdXIsICpfX2Zp
cnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg
X19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fY3VyKSA7IHRo
cm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0Zv
cndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0
dXJuIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4oCiAgICAgICAgICAgICAg
ICAgX19sYXN0LAogICAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
U2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2Fy
ZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsKICBy
ZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2Zp
cnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFz
cyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KdW5p
bml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX191bmlu
aXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoK
IAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQK
X191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3Ry
dWVfdHlwZSkKewogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0
ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7
ICsrX19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4p
IHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSB2b2lkIF9fdW5p
bml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEq
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBf
SXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwg
X0lzX1BPRCgpKTsKICAgICAgICAgICAgICAgICAgIAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gp
CnsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90
eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVk
X2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGZp
bGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmls
bF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVy
IF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsr
X19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgcmV0dXJuIF9fY3VyOwog
IH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBj
bGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewog
IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BP
RDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gs
IF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgCnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgcmV0dXJu
IF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZSgg
X19maXJzdCApICk7Cn0KCiAKIAoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJ
dGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5ICB7CiAgICByZXR1cm4g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgfQogIGNhdGNo
KC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0gOwp9CgogCiAKIAp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+
CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3Vs
dCwgX19taWQsIF9feCk7CiAgdHJ5ICB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1
bHQsIF9fbWlkKSA7IHRocm93OyB9IDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlh
bGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7
CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIpOwogIHRyeSAgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwg
X19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QyLCBfX21p
ZDIpIDsgdGhyb3c7IH0gOwp9CgogCgoKCiAKIAogCiMgMzIgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGdvcml0
aG0iIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RlbXBidWYuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnBhaXI8X1Rw
KiwgcHRyZGlmZl90PiAKX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9U
cCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9mKF9UcCkp
KQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVu
ID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNp
emVvZihfVHApKTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBw
dHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBh
aXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp
ZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1Rw
KikgMCk7Cn0KCgoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9U
cCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAq
KSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9pZCByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9f
cCkgewogIGZyZWUoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNs
YXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIgewpwcml2YXRlOgogIHB0cmRpZmZfdCAg
X01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCAgX01fbGVuOwogIF9UcCogICAgICAgX01fYnVm
ZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9
IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3Qp
KDIxNDc0ODM2NDcgICAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAg
IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVy
ID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZm
ZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBf
TV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9N
X2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVu
aW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoK
ICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQogIHB0cmRpZmZfdCBy
ZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQogIF9UcCog
YmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1
ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAg
ICAgICBfVHJpdmlhbDsKICAgIHRyeSAgewogICAgICBfTV9sZW4gPSAwOwogICAgICBkaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwog
ICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJz
dCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIGZyZWUoX01fYnVmZmVyKTsg
X01fYnVmZmVyID0gMDsgX01fbGVuID0gMCA7IHRocm93OyB9IDsKICB9CiAKICB+X1RlbXBvcmFy
eV9idWZmZXIoKSB7ICAKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4p
OwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CiAgIAogIF9UZW1wb3JhcnlfYnVm
ZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBf
VGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
YXRvciwgCiAgICAgICAgICBjbGFzcyBfVHAgCgogICAgICAgICAgICAgICAgICAgID0gdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCgogICAgICAg
ICA+CnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1wb3JhcnlfYnVmZmVyPF9G
b3J3YXJkSXRlcmF0b3IsIF9UcD4KewogIHRlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX1RlbXBvcmFyeV9idWZm
ZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9CiAgfnRlbXBvcmFy
eV9idWZmZXIoKSB7fQp9OwogICAgCiAKCgoKIAogCiAKIyAzMyAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsZ29y
aXRobSIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnby5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr
ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaGVhcC5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9p
ZCAKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVl
KQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxl
IChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192
YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJl
bnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUlu
ZGV4IC0gMSkgLyAyOwogIH0gICAgCiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1
ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3Rh
bmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksIAogICAgICAgICAgICAg
IF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+CmlubGluZSB2b2lkIApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBfX3B1c2hfaGVhcF9hdXgoX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3Qg
KSAsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwLCAKICAgICAgICAgIGNs
YXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcElu
ZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50
ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5k
ZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUlu
ZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9
CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBf
RGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSos
IF9UcCopIAp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2Zp
cnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksIAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEp
KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh
c3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAg
ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgX192YWx1ZV90eXBl
KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQgCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgg
PSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRl
eCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKCooX19maXJz
dCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAg
ICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19m
aXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwog
ICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19z
ZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf
X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25k
Q2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJ
bmRleCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is
IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCAKX19wb3BfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf
RGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2Zp
cnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQgCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfVHAqKQp7CiAgX19w
b3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCAKICAgICAgICAgICAgIF9U
cCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4s
IF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9
IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4
ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCoo
X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
KSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENo
aWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBp
ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp
ID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9f
c2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwg
X190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgCiAgICAgICAgICBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwK
ICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1
c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0
KSwgCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
dm9pZCAKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9f
Y29tcCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1Rw
KCooX19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9f
Zmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz
cyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBf
X2NvbXApCnsKICAgIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBl
KCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCAKX19tYWtlX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8
IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0
YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CiAgICAKICB3aGlsZSAodHJ1ZSkgewogICAg
X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBf
X3BhcmVudCkpKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0t
OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZv
aWQgCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCkKewogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg
ICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2VfdHlwZSggX19maXJz
dCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9D
b21wYXJlLAogICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtl
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikK
ewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsK
ICAgIAogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50
LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSksCiAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJl
PgppbmxpbmUgdm9pZCAKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAK
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK
ewogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgIF9f
dmFsdWVfdHlwZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qp
CnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBf
X2xhc3QtLSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9Db21wYXJlPgp2b2lkIApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp
CnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBf
X2xhc3QtLSwgX19jb21wKTsKfQoKCgoKCiAKCgoKIAogCiAKIyAzNCAiL3Vzci9saWIvZ2NjLWxp
Yi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9hbGdvLmgiIDIgMwoKCiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29u
c3QgX1RwJiBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9U
cCYgX19jKSB7CiAgaWYgKF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAgIHJldHVy
biBfX2I7CiAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNl
CiAgICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJuIF9fYTsK
ICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBf
X2I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3Qg
X1RwJgpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYg
X19jLCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgIGlmIChf
X2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19jb21wKF9f
YSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYTsKICBl
bHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2Nv
bXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgog
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9GdW5jdGlvbiBm
b3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24g
X19mKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgX19mKCpf
X2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwK
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19m
aXJzdCAhPSBfX2xhc3QgJiYgKl9fZmlyc3QgIT0gX192YWwpCiAgICArK19fZmlyc3Q7CiAgcmV0
dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGlj
YXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgKytfX2ZpcnN0Owog
IHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4g
MjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlm
ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAg
aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoK
ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7
CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19m
aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
ICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX1Jh
bmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoK
ICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAg
c3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAgICBpZiAoX19wcmVkKCpfX2Zp
cnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToK
ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
ICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsKQp7CiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3Zh
bCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xh
c3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCiAKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz
dDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19u
ZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJl
dHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5h
cnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg
ICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxl
KCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpf
X25leHQpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQog
IHJldHVybiBfX2xhc3Q7Cn0KCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBf
X24pIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAg
ICAgICAgICBfU2l6ZSYgX19uKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUp
CiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46
OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19u
OwogIHJldHVybiBfX247Cn0KCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj
bGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9f
Zmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikgCnsKICAgCiAgaWYgKF9f
Zmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2Zp
cnN0MTsKCiAgIAogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAg
aWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwg
Kl9fZmlyc3QyKTsKCiAgIAoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9f
Zmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7Cgog
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJz
dDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmly
c3QxOyAKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0
MTsKCiAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBf
X2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09
IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsK
ICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg
Y2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2Vh
cmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCAgX19wcmVkaWNhdGUpIAp7CiAg
IAogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBy
ZXR1cm4gX19maXJzdDE7CgogICAKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAr
K19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEs
IF9fbGFzdDEsICpfX2ZpcnN0Mik7CgogICAKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7Cgog
IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9f
Zmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0Mikp
CiAgICAgICsrX19maXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0
dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOyAK
ICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICB3aGls
ZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19wID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0g
X19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwog
IH0KICByZXR1cm4gX19maXJzdDE7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpIHsKICBpZiAoX19jb3VudCA8PSAw
KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0
LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBf
SW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmly
c3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAm
JiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0K
ICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAg
ICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAgIHJldHVy
biBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50
ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9u
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAg
ICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19jb3VudCA8PSAw
KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh
c3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICBi
cmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0ZXIg
X19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYm
IF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgKytfX2k7
CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewog
ICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICBicmVh
azsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAg
ICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfSAKCiAKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFu
Z2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBf
X2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRlcl9zd2Fw
KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9wZXJhdGlv
bj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5
T3BlcmF0aW9uIF9fb3BlcikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fb3BlcigqX19maXJzdCk7CiAgcmV0dXJu
IF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVyYXRpb24+
Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24g
X19iaW5hcnlfb3ApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs
ICsrX19maXJzdDIsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19m
aXJzdDEsICpfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRf
dmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICpf
X2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3Qg
PSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xk
X3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9f
bGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0g
X19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsK
fQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1By
ZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoSXRlcmF0b3Ig
X19maXJzdCwgSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19m
aXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9pZCBnZW5l
cmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRv
ciBfX2dlbikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpf
X2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
U2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pIHsKICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgcmV0dXJuIF9f
Zmlyc3Q7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRl
ciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ICE9IF9fdmFsdWUpIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1
bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJ
dGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBfX2ZpcnN0ID0gZmluZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog
IHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJk
SXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBfX2ZpcnN0ID0g
ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBf
X3ByZWQpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfVHAqKSB7CiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1
bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKF9fdmFs
dWUgIT0gKl9fZmlyc3QpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jl
c3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9f
dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJu
IF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKCBf
X2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJk
SXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCAhPSAqX19maXJz
dCkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KCBfX3Jlc3VsdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAgICAg
IGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19i
aW5hcnlfcHJlZCwgX1RwKikgewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0
ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5h
cnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0Owog
ICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Jp
bmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBfX3VuaXF1ZV9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0Zv
cndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYg
KCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0
SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQp
IHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191
bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fcmVzdWx0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIF9fZmlyc3QgPSBhZGphY2Vu
dF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkKSB7CiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19s
YXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcj4Kdm9pZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8
IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJldHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9z
d2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAt
LV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2
b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QpIHsKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
Y2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkgewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAq
X19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0
Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVjbGlkZWFu
UmluZ0VsZW1lbnQgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCnsKICB3aGlsZSAoX19u
ICE9IDApIHsKICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICBf
X20gPSBfX247CiAgICBfX24gPSBfX3Q7CiAgfQogIHJldHVybiBfX207Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fcm90YXRl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJu
IF9fbGFzdDsKICBpZiAoX19sYXN0ICA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoK
ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICBkbyB7CiAgICBzd2FwKCpfX2Zp
cnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBf
X21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogIF9G
b3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9fbWlkZGxl
OwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICBzd2FwICgqX19maXJzdCsrLCAq
X19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgX19maXJz
dDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVybiBfX25ld19taWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFs
SXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJl
dHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCAgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJz
dDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsICAgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxl
ICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2Zp
cnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2Ug
ewogICAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJ
dGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSAqLCBfVHAgKikgewoKICBfRGlzdGFuY2UgX19uID0gX19sYXN0ICAgLSBf
X2ZpcnN0OwogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNl
IF9fbCA9IF9fbiAtIF9fazsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Qg
KyAoX19sYXN0IC0gX19taWRkbGUpOwoKICBpZiAoX19rID09IF9fbCkgewogICAgc3dhcF9yYW5n
ZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9
CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAoX0Rpc3RhbmNlIF9f
aSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0OwogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19rIDwgX19sKSB7CiAg
ICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAgICAg
ICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9f
bCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICooX19w
ICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9CgogICAgZWxzZSB7CiAg
ICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsK
ICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAqX19wID0gKihfX3Ag
KyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAq
IChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAgIH0KCiAgICAqX19w
ID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgcm90YXRlKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICByZXR1cm4gX19yb3RhdGUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBf
X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0
ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+
Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlk
ZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCiAKIAogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJlcihfRGlz
dGFuY2UgX19uKSB7CgoKCiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCn0KCiAKCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAg
Zm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsg
KytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kg
LSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpIHsKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Qg
KyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBf
X3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciBy
YW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rp
c3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9f
cmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIo
X19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19f
b3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0
OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9t
TnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewogIF9EaXN0YW5j
ZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmlu
Zyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9f
bSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291
dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9f
cmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3Rh
bmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBf
X3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19t
LCArK19fZmlyc3QpIAogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251
bWJlcihfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFz
cyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19v
dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJh
dG9yJiBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlz
dGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJz
dCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlmIChf
X00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9
CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3Nh
bXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9s
YXN0KSAKewogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KaW5saW5lIF9SYW5kb21B
Y2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJh
dG9yJiBfX3JhbmQpIAp7CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKIAoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFy
dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAoJCSAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCgkJCSBfUHJlZGljYXRlICAgX19wcmVkLAoJCQkgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsK
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVk
KCpfX2ZpcnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK
CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBf
X2xhc3QpCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpf
X25leHQpOwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAoJCQkg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCgkJCSAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZykgewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3By
ZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFr
OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xh
c3QpKQogICAgICAgIC0tX19sYXN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVy
X3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIg
cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAJCQkgICAgICBfRm9yd2FyZEl0ZXIg
X19sYXN0LAoJCQkgICAgICBfUHJlZGljYXRlICAgX19wcmVkKSB7CiAgcmV0dXJuIF9fcGFydGl0
aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0
ICkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUs
IGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9u
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pIHsKICBpZiAoX19s
ZW4gPT0gMSkKICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsK
ICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRkbGUsIF9f
bGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2Zp
cnN0LCBfX21pZGRsZSwgX19wcmVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19s
ZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVy
LCBjbGFzcyBfUHJlZGljYXRlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJ
dGVyIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIAp7CiAgaWYgKF9fbGVuIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgX1Bv
aW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICpfX3Jl
c3VsdDEgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNl
IHsKICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDI7CiAg
ICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgIHJldHVy
biBfX3Jlc3VsdDE7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19m
aXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4gcm90YXRl
KF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
IC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAgIF9fbWlk
ZGxlLAogICAgICAgICAgICAgICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9z
aXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGlj
YXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3N0
YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1RwKiwgX0Rp
c3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBfX2J1Zihf
X2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJuIF9fc3Rh
YmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9z
aXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp
bigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3
YXJkSXRlciBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBf
X3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21B
Y2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg
X19waXZvdCkgCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZv
dCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpf
X2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19f
Zmlyc3Q7CiAgfQp9ICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0
aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkg
CnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkp
CiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChfX3Bpdm90
LCAqX19sYXN0KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkK
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAg
ICsrX19maXJzdDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsKCiAKCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFy
ZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpIHsK
ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUg
KF9fdmFsIDwgKl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBf
X25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg
X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBf
X3ZhbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsK
ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7ICAKICB3aGls
ZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBf
X2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQg
X19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgX1RwIF9f
dmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgY29weV9iYWNrd2Fy
ZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9
CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9f
Y29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFz
dCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3Vu
Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuOyAKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2Zp
cnN0LCBfX2ksIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRpb25fc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf
X2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9f
dmFsdWVfdHlwZSggX19maXJzdCApICwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRf
YXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICBmb3IgKF9SYW5k
b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191
bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9u
X3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAq
LCBfQ29tcGFyZSBfX2NvbXApIHsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf
X2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX191bmd1YXJkZWRfaW5z
ZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkg
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhy
ZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90
aHJlc2hvbGQpOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3Rs
X3RocmVzaG9sZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9Db21wYXJlPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxf
dGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0
bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2Zp
cnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgfQogIGVsc2UKICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikgewogIF9TaXplIF9fazsKICBm
b3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwogIHJldHVybiBfX2s7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6
ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosCiAgICAgICAg
ICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9f
Zmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK
ICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgcmV0dXJu
OwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQg
PQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8y
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEp
KSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwgX19kZXB0
aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0NvbXBhcmU+CnZv
aWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAg
ICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xp
bWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBf
X2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgX19jb21wKTsKICAgIF9faW50
cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQsIF9fY29t
cCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9f
aW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX3Zh
bHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0g
X19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlm
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAg
ICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz
dCwgX19jb21wKTsKICB9Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4K
dm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYg
KF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9f
Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChf
X2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xh
c3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sYXN0IC0g
X19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j
b21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp
cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19m
aXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxl
LCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+
CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVw
X3NpemUpIHsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hp
bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJn
ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9f
Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3Rl
cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwog
IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9z
aXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBf
RGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21B
Y2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyMSBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBf
X3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXpl
OwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3Vs
dCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAg
ICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5j
ZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3Qs
CiAgICAgICAgX19yZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2No
dW5rX3NpemUgPSA3OwogICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAg
fQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lk
IF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2Nv
bXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsK
ICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRo
X2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xl
biA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVy
ICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAg
X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAg
d2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmly
c3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7
CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwg
X19zdGVwX3NpemUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNl
IF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19i
dWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6
ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUs
IF9fY29tcCk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3Nv
cnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsK
ICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19i
dWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6
ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
UG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIHsKICBfRGlzdGFuY2UgX19sZW4g
PSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
ZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBf
X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0
aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICAg
IF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9E
aXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksIAogICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz
cyBfRGlzdGFuY2UsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwgX0NvbXBh
cmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAv
IDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYg
KF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwg
X19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19t
aWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLCAKICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZl
cl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQg
X19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFu
Y2UqKSB7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3Rh
YmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlIAogICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5s
aW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq
LCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19m
aXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFi
bGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgZWxzZSAKICAgIF9fc3RhYmxlX3Nv
cnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGlu
ZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIF9fc3RhYmxlX3NvcnRf
YXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9f
Zmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkg
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4K
aW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApIHsKICBfX3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgIF9fZGlz
dGFuY2VfdHlwZSggX19maXJzdCApICwgCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoK
IAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19w
YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
VHAqKSB7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5kb21BY2Nl
c3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKCpfX2kg
PCAqX19maXJzdCkgCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1Rw
KCpfX2kpLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7CiAg
c29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAg
X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBf
X2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgbWFr
ZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoX19jb21wKCpf
X2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBf
VHAoKl9faSksIF9fY29tcCwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmly
c3QgKSApOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQg
cGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgX19wYXJ0
aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0
ICkgLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRv
bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgewogIGlmIChfX3Jlc3VsdF9maXJz
dCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNz
SXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0
ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAg
Kl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7
CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf
cmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJz
dCA8ICpfX3Jlc3VsdF9maXJzdCkgCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVh
bF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJz
dCkpOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVz
dWx0X3JlYWxfbGFzdCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRv
bUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf
Zmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3Qp
IHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBj
bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3Nv
cnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopIHsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19y
ZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
ZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xh
c3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3Vs
dF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytf
X2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFz
dCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRf
Zmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1
bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgq
X19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9
CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7
CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5k
b21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0
LCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3Rh
bmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICB3aGlsZSAoX19sYXN0IC0gX19maXJz
dCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9U
cChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIGlmIChfX2N1dCA8
PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZSAKICAgICAgX19sYXN0ID0g
X19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX19udGhfZWxlbWVu
dChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo
X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0
OwogICAgZWxzZSAKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIF9fbnRoX2Vs
ZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBf
X2NvbXApOwp9CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKSAKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAg
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9
IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxl
LCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBf
X21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0g
MTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2Zp
cnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBf
Rm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3ZhbCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlz
dGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4g
MCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg
IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192
YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf
X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBf
X2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIGxvd2Vy
X2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29t
cCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29t
cCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsK
ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0g
X19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVw
cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpIHsKICByZXR1cm4g
X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAg
ICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0Zv
cndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9D
b21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9y
d2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9f
bGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2hhbGYpOwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBf
X2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmly
c3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4g
X19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX191cHBl
cl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVy
LCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rpc3RhbmNl
KikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVm
dCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4g
MTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7
CiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog
ICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQog
ICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAg
ZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3Zh
bCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJf
Ym91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFpcjxfRm9y
d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0
dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9G
b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkgewogIHJldHVybiBfX2Vx
dWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAg
X19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9G
b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAg
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4g
MCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg
IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192
YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf
X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcChfX3Zh
bCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19s
ZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAg
ICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsr
X19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gcGFpcjxfRm9y
d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0
dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9
ICAgICAgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmU+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVh
bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fZXF1
YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAg
ICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0gCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX192YWwpIHsKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19s
YXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
Pgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5k
KF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3Qg
JiYgIV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJn
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly
c3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9f
bGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2Zp
cnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg
ICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lk
IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikg
ewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19s
ZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAg
aXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z
ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5j
ZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0gX19s
ZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRf
Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgIGRp
c3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAg
IF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vj
b25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAg
fQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3Rf
Y3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f
Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRs
ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4xID09IDAg
fHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7
CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICBpdGVyX3N3YXAoX19m
aXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBf
X21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAw
OwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg
YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i
b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5j
ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAgZWxzZSB7CiAgICBfX2xl
bjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAg
IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9j
dXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9fZmly
c3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsIF9fbGVuMjIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy
LAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcm90YXRl
X2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewogIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19i
dWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAg
IHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogIH0KICBlbHNl
IGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShf
X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
IF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVybiByb3RhdGUoX19maXJzdCwgX19taWRkbGUs
IF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMz4K
X0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkgewogIGlmIChf
X2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9f
bGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBj
b3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwog
IC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEp
IHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9f
bGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0Miwg
X19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19y
ZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAg
cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAg
ICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2Vf
YmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEs
IF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAg
ICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgKi0tX19yZXN1bHQgPSAq
X19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNv
cHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz
dDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAg
aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m
aXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs
IAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg
ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUpIHsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkg
ewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19i
dWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFz
dCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAg
ICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy
KTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQg
PSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xl
bjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVu
MSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29u
ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAg
ICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsgCiAgICB9CiAgICBl
bHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRf
Y3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf
X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUg
PQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25k
X2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwg
X19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBf
X2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBf
X2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9f
bmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0
YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21l
cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwgCiAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2lu
dGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8
PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5k
LCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBlbHNlIGlmIChfX2xl
bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf
X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBf
X21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xlbjIy
ID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVuMSAv
IDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29uZF9j
dXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7
CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOyAgIAogICAg
fQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZhbmNlKF9f
c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9f
Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFw
dGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsK
ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwg
X19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwg
X19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwg
X1RwKiwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRp
cmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5i
ZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAg
ICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgCiAgICAgICAgICBjbGFzcyBf
RGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5j
ZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9E
aXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7
CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2Zp
cnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2Nv
bXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9E
aXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21l
cmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwg
X19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlu
cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlm
IChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsK
ICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2VfdHlwZSgg
X19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAogCiAKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVk
ZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpIHsKICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJz
dDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+
CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
IF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIp
KSAKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0
MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRl
ciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYg
KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp
IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQog
ICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5
KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
T3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfdW5p
b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXAp
IHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAo
Kl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg
ICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVz
dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNl
Y3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
IHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSAK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwogICAgZWxz
ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSAKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2Ug
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsr
X19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0
cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJz
ZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg
ICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsK
ICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlm
ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7
CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg
IGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAo
Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAg
ICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsIAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgq
X19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAg
ICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciAKc2V0X3N5
bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVs
c2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShf
X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091
dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgCnNldF9zeW1t
ZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29t
cCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f
Zmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAgaWYgKCpfX3Jlc3VsdCA8
ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJ
dGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg
PSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSAKICAgIGlmIChfX2NvbXAo
Kl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1
bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5fZWxl
bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkgCiAgICBpZiAoKl9fZmly
c3QgPCAqX19yZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1
bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9y
d2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAgaWYgKF9f
Y29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJl
dHVybiBfX3Jlc3VsdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
Pgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1
cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAg
aWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0t
X19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAg
LS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAg
ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg
ICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2
ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBu
ZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0
dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19p
LCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAg
d2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAo
X19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVl
OwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwg
X19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBf
X2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog
IF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqLS1fX2ogPCAq
X19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNl
KF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBf
X2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxz
ZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19p
ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7Cgog
IGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsK
ICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAg
e30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3Qp
OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg
ICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9
Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9J
bnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9G
b3J3YXJkSXRlciBfX2xhc3QyKQp7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxKSAKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIg
IT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAg
ICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+
Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVy
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2NvbXApCnsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJz
dDEpIAogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBf
X2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQog
ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQoKCiAKIAogCiAKCiAK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3
YXJkSXRlcjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdDIgPT0g
X19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBf
X3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9f
bmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg
X19sYXN0Mik7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0
OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAg
ICAgIH0KICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBf
Rm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJ
dGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G
b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRl
cmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBf
X2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQK
ICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9f
Y29tcCk7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0Owog
ICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAg
IH0KICAgIH0KICB9Cn0KCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5k
KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9C
aWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19m
aXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJl
c3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogIGlmIChf
X3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5j
ZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9C
aWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx
LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgCiAg
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICB0eXBlZGVmIHJldmVyc2VfaXRl
cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3Js
YXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRl
cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9
PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0
LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9
Cn0KCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy
Mj4KaW5saW5lIF9Gb3J3YXJkSXRlcjEgCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwgCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0MSApICwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KCBfX2ZpcnN0MiApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj
bGFzcyBfRm9yd2FyZEl0ZXIyLCAKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIxIApmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9y
d2FyZEl0ZXIxIF9fbGFzdDEsIAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y
d2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAg
cmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAog
ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QxICkgLAogICAg
ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QyICkgLAogICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAg
Zm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewog
ICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwgX19maXJzdFtfX2NoaWxkXSkgCiAgICAgIHJldHVy
biBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAg
fQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBfX2lzX2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsCiAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwog
IGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsK
ICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQogICAg
ICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFy
ZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0
IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9TdHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
IF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0
LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsK
CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0
ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgqX19uZXh0
IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgpi
b29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9f
Zmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4
dCwgKytfX25leHQpIHsKICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogICAgICBy
ZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKCgoKCiAKCgoKIAogCiAKIyAzNCAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2FsZ29yaXRobSIgMiAzCgoKCgogCiAKIAojIDYgIi91L2xwYWdlL3dvcmth
cmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9ub21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVk
ZS9SYW5nZS5oIiAyCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBSYW5nZSB7CiBwcml2
YXRlOgogIFQgX21pbjsKICBUIF9tYXg7CiBwdWJsaWM6CiAgc3RhdGljIGNvbnN0IFJhbmdlIGVt
cHR5X3JuZzsKICBzdGF0aWMgY29uc3QgY2hhciAqVF9uYW1lOwogICAKICAgCiAgIAogICAKICBz
dGF0aWMgc3RkOjpzdHJpbmcgcm5nX25hbWUoKTsgIAogcHVibGljOgogIAogIFJhbmdlKCkgICAg
ICAgICAgICAgICA6IF9taW4oZW1wdHlfcm5nLl9taW4pLCBfbWF4KGVtcHR5X3JuZy5fbWF4KSB7
fSAgCiAgUmFuZ2UoVCBtaW5fLCBUIG1heF8pIDogX21pbihtaW5fKSwgX21heChtYXhfKSAgICAg
e30KICBSYW5nZShjb25zdCBSYW5nZSAmcikgOiBfbWluKHIuX21pbiksIF9tYXgoci5fbWF4KSB7
fQoKICBSYW5nZSAmb3BlcmF0b3I9KGNvbnN0IFJhbmdlICZyKSB7IF9taW49ci5fbWluOyBfbWF4
PXIuX21heDsgcmV0dXJuICp0aGlzOyB9CiAgUmFuZ2UgJnNldChUIG1pbl8sIFQgbWF4XykgICAg
ICAgeyBfbWluPW1pbl87IF9tYXg9bWF4XzsgcmV0dXJuICp0aGlzOyB9CiAgUmFuZ2UgJnNldE9y
ZGVyZWQoVCB2MSwgVCB2Mik7ICAgIAogIFJhbmdlICZzZXRFbXB0eSgpICAgICAgICAgICAgICAg
IHsgcmV0dXJuICgqdGhpcyA9IGVtcHR5X3JuZyk7IH0KCiAgVCAgbWluKCkgY29uc3QgeyByZXR1
cm4gX21pbjsgfQogIFQgIG1heCgpIGNvbnN0IHsgcmV0dXJuIF9tYXg7IH0KICBUICZtaW4oKSAg
ICAgICB7IHJldHVybiBfbWluOyB9CiAgVCAmbWF4KCkgICAgICAgeyByZXR1cm4gX21heDsgfQoK
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmFuZ2UgJnIyKSBjb25zdCB7CiAgICAgCiAgICAgIGlm
IChpc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuIHIyLmlzRW1wdHkoKTsKICAgICAgZWxzZSAgICAg
ICAgICAgIAogICAgICAgIHJldHVybiAoKG1pbigpPT1yMi5taW4oKSkmJihtYXgoKT09cjIubWF4
KCkpKTsgCiAgfQogICAgCiAgYm9vbCBjb250YWlucyhUIHZhbCkgY29uc3QgewogICAgcmV0dXJu
ICgobWluKCkgPD0gdmFsKSAmJiAodmFsIDw9IG1heCgpKSk7IH0KCiAgVCBjbGFtcCAoVCB2YWwp
IGNvbnN0IHsKICAgICAKICAgIGlmICh2YWwgPD0gX21pbikKICAgICAgcmV0dXJuIF9taW47CiAg
ICBlbHNlIGlmICh2YWwgPj0gX21heCkgCiAgICAgIHJldHVybiBfbWF4OwogICAgcmV0dXJuIHZh
bDsKICB9CiAgCiAgUmFuZ2UgZGlsYXRlZEJ5KFQgdmFsKSBjb25zdCB7CiAgICByZXR1cm4gUmFu
Z2UoX21pbi12YWwsIF9tYXgrdmFsKTsKICB9CgogIFJhbmdlIGNvbnRyYWN0ZWRCeShUIHZhbCkg
Y29uc3QgewogICAgcmV0dXJuIFJhbmdlKF9taW4rdmFsLCBfbWF4LXZhbCk7CiAgfQoKICBUICAg
IGxlbmd0aCgpICBjb25zdCB7IHJldHVybiBfbWF4IC0gX21pbjsgfQogICAKCiAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gKG1pbigpID4gbWF4KCkpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4KUmFuZ2U8VD4gcGx1c01pbnVzKFQgcG9zVmFsKTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpi
b29sIGRvX2ludGVyc2VjdChjb25zdCBSYW5nZTxUPiAmcjEsIGNvbnN0IFJhbmdlPFQ+ICZyMik7
CiAKCnRlbXBsYXRlIDxjbGFzcyBUPgpSYW5nZTxUPiBpbnRlcnNlY3Rpb24oY29uc3QgUmFuZ2U8
VD4gJnIxLCBjb25zdCBSYW5nZTxUPiAmcjIpOwoKdGVtcGxhdGUgPGNsYXNzIFQ+ClJhbmdlPFQ+
IGNvbnZvbHZlKGNvbnN0IFJhbmdlPFQ+ICZyMSwgY29uc3QgUmFuZ2U8VD4gJnIyKTsKCnRlbXBs
YXRlIDxjbGFzcyBUPgpvc3RyZWFtICZvcGVyYXRvcjw8KG9zdHJlYW0gJm9zLCBjb25zdCBSYW5n
ZTxUPiAmcik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaXN0cmVhbSAmb3BlcmF0b3I+Pihpc3RyZWFt
ICZpcywgUmFuZ2U8VD4gJnIpOwoKDAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKc3Rk
OjpzdHJpbmcgUmFuZ2U8VD46OnJuZ19uYW1lKCkKewogIHJldHVybiAoc3RkOjpzdHJpbmcoIlJh
bmdlPCIpICsgVF9uYW1lICsgIj4iKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKUmFu
Z2U8VD4gJlJhbmdlPFQ+OjpzZXRPcmRlcmVkKFQgdjEsIFQgdjIpCnsKICBpZiAodjEgPCB2MikK
ICAgIHNldCh2MSwgdjIpOwogIGVsc2UKICAgIHNldCh2MiwgdjEpOwogIHJldHVybiAqdGhpczsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKUmFuZ2U8VD4gcGx1c01pbnVzKFQgcG9zVmFs
KQp7CiAgcmV0dXJuIFJhbmdlPFQ+KC1wb3NWYWwsIHBvc1ZhbCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4KaW5saW5lCmJvb2wgZG9faW50ZXJzZWN0KGNvbnN0IFJhbmdlPFQ+ICZyMSwgY29uc3Qg
UmFuZ2U8VD4gJnIyKQp7CiAgcmV0dXJuICggIXIxLmlzRW1wdHkoKSAmJiAhcjIuaXNFbXB0eSgp
ICYmIAogICAgICAgICAgIChyMS5taW4oKSA8PSByMi5tYXgoKSkgJiYgCiAgICAgICAgICAgKHIy
Lm1pbigpIDw9IHIxLm1heCgpKSApOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpSYW5n
ZTxUPiBpbnRlcnNlY3Rpb24oY29uc3QgUmFuZ2U8VD4gJnIxLCBjb25zdCBSYW5nZTxUPiAmcjIp
CnsKICBpZiAoZG9faW50ZXJzZWN0KHIxLHIyKSkKICAgIHJldHVybiBSYW5nZTxUPihzdGQ6Om1h
eChyMS5taW4oKSxyMi5taW4oKSksCiAgICAgICAgICAgICAgICAgICAgc3RkOjptaW4ocjEubWF4
KCkscjIubWF4KCkpKTsgCiAgcmV0dXJuIFJhbmdlPFQ+OjplbXB0eV9ybmc7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4KaW5saW5lClJhbmdlPFQ+IGNvbnZvbHZlKGNvbnN0IFJhbmdlPFQ+ICZyMSwg
Y29uc3QgUmFuZ2U8VD4gJnIyKQp7CiAgaWYgKHIxLmlzRW1wdHkoKSB8fCByMi5pc0VtcHR5KCkp
CiAgICByZXR1cm4gUmFuZ2U8VD46OmVtcHR5X3JuZzsKICByZXR1cm4gUmFuZ2U8VD4ocjEubWlu
KCkgKyByMi5taW4oKSwgcjEubWF4KCkgKyByMi5tYXgoKSk7IAp9CgoKCiMgMSAiL3UvbHBhZ2Uv
d29ya2FyZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9p
bmNsdWRlL1N0cmVhbU1vZGUuaCIgMQogCiAKIAogCgoKCgoKCgogCiAKIAogCiAKIAogCmNsYXNz
IFN0cmVhbU1vZGUgewogcHVibGljOgogIGVudW0gU3R5bGUgeyBQTEFJTiwgICAgICAgIAoJICAg
ICAgIEFHR1JFR0FURSwgICAgCgkgICAgICAgQ09OU1RSVUNUT1IsICAKCSAgICAgICBNRU1CRVJf
TEFCRUwsIAoJICAgICAgIEFSUkFZX0xBQkVMLCAgCgkgICAgICAgQkVZT05EIH07ICAgICAKCiAg
U3RyZWFtTW9kZSgpIHt9ICAgICAgICAgICAgIAogcHJpdmF0ZToKICAgCiAgIAogICAKICAgCiAg
IAogIFN0cmVhbU1vZGUoU3RyZWFtTW9kZSAmbSk7ICAKIHB1YmxpYzoKICBzdGF0aWMgU3RyZWFt
TW9kZSAmZ2V0SW5zdGFuY2UoKTsgICAKICBjb25zdCBjaGFyICppbmRlbnQoKTsKICBpbnQgICAg
ICAgICBpbmRlbnRMZXZlbCgpICAgICAgIHsgcmV0dXJuIGQuaW5kZW50TGV2ZWw7IH0KICBpbnQg
ICAgICAgICBpbmRlbnRMZW4oKTsgIAogIHZvaWQgaW5jSW5kZW50TGV2ZWwoKTsKICB2b2lkIGRl
Y0luZGVudExldmVsKCk7CgogIFN0eWxlICBzdHlsZSgpICAgICAgICAgICAgICAgICAgeyByZXR1
cm4gZC5zdHlsZVN0YWNrLnRvcCgpOyB9CiAgdm9pZCAgIHB1c2hTdHlsZShTdHlsZSBzdCkgICAg
ICB7IGQuc3R5bGVTdGFjay5wdXNoKHN0KTsgfQogIHZvaWQgICBwb3BTdHlsZSgpICAgICAgICAg
ICAgICAgeyBkLnN0eWxlU3RhY2sucG9wKCk7IH0KICB2b2lkICAgc2V0U3R5bGUoU3R5bGUgc3Qp
ICAgICAgIHsgcmV0dXJuIGQuc3R5bGVTdGFjay5zZXRUb3Aoc3QpOyB9CgogIGJvb2wgICByZXR1
cm5Nb2RlKCkgICAgICAgICAgICAgeyByZXR1cm4gKHN0eWxlKCk+PWQucmV0dXJuTW9kZVN0YWNr
LnRvcCgpKTt9CiAgdm9pZCAgIHB1c2hSZXR1cm5Nb2RlKFN0eWxlIHN0KSB7IGQucmV0dXJuTW9k
ZVN0YWNrLnB1c2goc3QpOyB9CiAgdm9pZCAgIHBvcFJldHVybk1vZGUoKSAgICAgICAgICB7IGQu
cmV0dXJuTW9kZVN0YWNrLnBvcCgpOyB9CiBwdWJsaWM6CiAgIAogICAKICAgCiAgIAogICAKICAg
CiAgIAogICAKICBjbGFzcyBJbmRlbnRUaGlzQ29udGV4dCB7CiAgICBTdHJlYW1Nb2RlICZzbTsK
ICBwdWJsaWM6CiAgICBJbmRlbnRUaGlzQ29udGV4dCgpICAgICAgOiBzbShnZXRJbnN0YW5jZSgp
KSB7IHNtLmluY0luZGVudExldmVsKCk7IH0KICAgIEluZGVudFRoaXNDb250ZXh0KFN0cmVhbU1v
ZGUgJnNtXykgOiBzbShzbV8pIHsgc20uaW5jSW5kZW50TGV2ZWwoKTsgfQogICAgfkluZGVudFRo
aXNDb250ZXh0KCkgICAgICAgICAgICAgICAgICAgICAgICAgeyBzbS5kZWNJbmRlbnRMZXZlbCgp
OyB9CiAgfTsKICBjbGFzcyBTdHlsZVRoaXNDb250ZXh0IHsgCiAgICBTdHJlYW1Nb2RlICZzbTsK
ICBwdWJsaWM6CiAgICBTdHlsZVRoaXNDb250ZXh0KFN0eWxlIHN0KSA6ICAgICAgICBzbShnZXRJ
bnN0YW5jZSgpKSB7IHNtLnB1c2hTdHlsZShzdCk7IH0KICAgIFN0eWxlVGhpc0NvbnRleHQoU3Ry
ZWFtTW9kZSAmc21fLCBTdHlsZSBzdCkgOiBzbShzbV8pIHsgc20ucHVzaFN0eWxlKHN0KTsgfQog
ICAgflN0eWxlVGhpc0NvbnRleHQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBzbS5wb3BTdHlsZSgpOyB9CiAgfTsKICBjbGFzcyBDaGVja1RoaXNDb250ZXh0IHsKICAgIFN0
cmVhbU1vZGUgJnNtOwogICAgaW50IHN0eWxlTGV2ZWw7CiAgICBpbnQgcmV0dXJuTGV2ZWw7CiAg
ICBpbnQgaW5kZW50TGV2ZWw7CiAgcHVibGljOgogICAgQ2hlY2tUaGlzQ29udGV4dChTdHJlYW1N
b2RlICZzbV8pOwogICAgfkNoZWNrVGhpc0NvbnRleHQoKTsKICB9OwogIGZyaWVuZCBjbGFzcyBT
dHJlYW1Nb2RlOjpDaGVja1RoaXNDb250ZXh0OwogcHJpdmF0ZToKICAgCiAgIAogICAKICAgCiAg
IAogIGNsYXNzIGFnZ3Jfc3RhcnRfaGxwIHsKICAgcHVibGljOgogICAgU3RyZWFtTW9kZSAgICAg
ICAmc207CiAgICBjb25zdCBjaGFyICAgICAgICpuYW1lOwogICAgY29uc3QgY2hhciAgICAgICAq
YnJhY2tldDsKICAgIFN0cmVhbU1vZGU6OlN0eWxlIGVuZGxTdHlsZTsKICAgIGFnZ3Jfc3RhcnRf
aGxwKFN0cmVhbU1vZGUgICAgICAgJnNtXywgCgkJICAgY29uc3QgY2hhciAgICAgICAqdHlwZU5h
bWUsCgkJICAgU3RyZWFtTW9kZTo6U3R5bGUgc3RfPVN0cmVhbU1vZGU6Ok1FTUJFUl9MQUJFTCwK
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgKmJyYWNrZXRfID0gIigiICkKICAg
IDogc20oc21fKSwgbmFtZSh0eXBlTmFtZSksIGJyYWNrZXQoYnJhY2tldF8pLCBlbmRsU3R5bGUo
c3RfKSB7fQogIH07CiAgY2xhc3MgYWdncl9zcGFjZV9obHAgewogICBwdWJsaWM6CiAgICBTdHJl
YW1Nb2RlICAgICAgICZzbTsKICAgIGNvbnN0IGNoYXIgICAgICAgKmRlbGltOwogICAgU3RyZWFt
TW9kZTo6U3R5bGUgc3BlY2lhbEVuZGxTdHlsZTsKICAgIGFnZ3Jfc3BhY2VfaGxwKFN0cmVhbU1v
ZGUgJnNtXywgY29uc3QgY2hhciAqZGVsaW1fLAogICAgICAgICAgICAgICAgICAgU3RyZWFtTW9k
ZTo6U3R5bGUgc3BlY2lhbFN0Xz1TdHJlYW1Nb2RlOjpCRVlPTkQpCiAgICAgIDogc20oc21fKSwg
ZGVsaW0oZGVsaW1fKSwgc3BlY2lhbEVuZGxTdHlsZShzcGVjaWFsU3RfKSB7fQogIH07CiAgY2xh
c3MgYWdncl9maW5pc2hfaGxwIHsKICAgcHVibGljOgogICAgU3RyZWFtTW9kZSAgICAgICAmc207
CiAgICBjb25zdCBjaGFyICAgICAgICpicmFja2V0OwogICAgYWdncl9maW5pc2hfaGxwKFN0cmVh
bU1vZGUgJnNtXywgY29uc3QgY2hhciAqYnJhY2tldF8gPSAiKSIgKSAKICAgICAgOiBzbShzbV8p
LCBicmFja2V0KGJyYWNrZXRfKSB7fQogIH07CiAgY2xhc3MgbWVtYmVyX2hscCB7CiAgIHB1Ymxp
YzoKICAgIFN0cmVhbU1vZGUgICZzbTsKICAgIGNvbnN0IGNoYXIgICpzdHI7CiAgICBtZW1iZXJf
aGxwKFN0cmVhbU1vZGUgJnNtXywgY29uc3QgY2hhciAqdHlwZU5hbWUpIAogICAgICA6IHNtKHNt
XyksIHN0cih0eXBlTmFtZSkge30KICB9OwogIGNsYXNzIGFycmF5X2luZGV4X2hscCB7CiAgIHB1
YmxpYzoKICAgIFN0cmVhbU1vZGUgJnNtOwogICAgaW50ICAgICAgICAgaTsKICAgIGludCAgICAg
ICAgIGo7CiAgICBib29sICAgICAgICB1c2VKOwogICAgYXJyYXlfaW5kZXhfaGxwKFN0cmVhbU1v
ZGUgJnNtXywgaW50IGlfLCBib29sIHVzZUpfLCBpbnQgal8pCiAgICAgIDogc20oc21fKSwgaShp
XyksIGooal8pLCB1c2VKKHVzZUpfKSB7fQogIH07CiBwdWJsaWM6CiAgIAogICAKICAgCiAgIAog
IGFnZ3Jfc3RhcnRfaGxwICBhZ2dyX3N0YXJ0KGNvbnN0IGNoYXIgKmNsYXNzTmFtZSwgCgkJCSAg
ICAgU3R5bGUgICAgICAgZW5kbFN0eWxlPU1FTUJFUl9MQUJFTCk7CiAgIAogICAKICAgCiAgIAoK
ICBtZW1iZXJfaGxwICAgICAgbWVtYmVyX25hbWUoY29uc3QgY2hhciAqbWVtYmVyTmFtZSk7CiAg
YWdncl9zcGFjZV9obHAgIGFnZ3Jfc3BhY2UoY29uc3QgY2hhciAqZGVsaW09IiwiLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0eWxlICAgICAgIHNwZWNpYWxFbmRsU3R5bGU9QkVZT05E
KTsKICAgCiAgIAogICAKICAgCiAgIAogICAKCiAgYWdncl9maW5pc2hfaGxwIGFnZ3JfZmluaXNo
KCk7CSAgICAgCgogIGFnZ3Jfc3RhcnRfaGxwICBhcnJheV9zdGFydChjb25zdCBjaGFyICpjbGFz
c05hbWUsIAoJCQkgICAgICBTdHlsZSAgICAgICBlbmRsU3R5bGU9Q09OU1RSVUNUT1IsCgkJCSAg
ICAgIGNvbnN0IGNoYXIgKmJyYWNrZXQ9IlsiKTsKICBhcnJheV9pbmRleF9obHAgYXJyYXlfaW5k
ZXgoaW50IGkpOwogIGFycmF5X2luZGV4X2hscCBhcnJheV9pbmRleChpbnQgaSwgaW50IGopOwog
IGFnZ3Jfc3BhY2VfaGxwICBhcnJheV9zcGFjZSAoY29uc3QgY2hhciAqZGVsaW0gID0iLCIpOwog
IGFnZ3JfZmluaXNoX2hscCBhcnJheV9maW5pc2goY29uc3QgY2hhciAqYnJhY2tldD0iXSIpOwoK
IHByaXZhdGU6CiAgIAogIAogIAogIAoKICAKCiAgY2xhc3MgU3R5bGVTdGFjayB7CiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCiAgICBTdHlsZSAgc3RhY2tbMTYgXTsKICAgIGludCAgICBpbmRleDsK
ICAgIGludCAgICBpbmRleERlc2lyZWQ7ICAKICBwdWJsaWM6CiAgICBTdHlsZVN0YWNrKCk7CiAg
ICB2b2lkICBwdXNoKFN0eWxlIHN0KTsKICAgIHZvaWQgIHBvcCgpOwogICAgU3R5bGUgdG9wKCkg
Y29uc3Q7CiAgICB2b2lkICBzZXRUb3AoU3R5bGUgc3QpOwogICAgaW50ICAgZ2V0SW5kZXgoKSBj
b25zdDsgIAogIH07CiAgc3RydWN0IERhdGEgewogICAgU3R5bGVTdGFjayBzdHlsZVN0YWNrOyAg
ICAgICAKICAgIFN0eWxlU3RhY2sgcmV0dXJuTW9kZVN0YWNrOwogICAgaW50ICAgICAgICBpbmRl
bnRMZXZlbDsKICAgIERhdGEoKTsKICB9OwogIERhdGEgZDsgCiAgc3RhdGljIGNoYXIgYmxhbmtz
WzgwIF07Cn07Cgpjb25zdCBjaGFyICp0b1N0cmluZyhTdHJlYW1Nb2RlOjpTdHlsZSBzdCk7Cgpv
c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJlYW1Nb2RlOjphZ2dyX3N0
YXJ0X2hscCAgJm0pOwpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJl
YW1Nb2RlOjphZ2dyX3NwYWNlX2hscCAgJm0pOwpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0m
IG9zLCBjb25zdCBTdHJlYW1Nb2RlOjphZ2dyX2ZpbmlzaF9obHAgJm0pOwpvc3RyZWFtJiBvcGVy
YXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJlYW1Nb2RlOjptZW1iZXJfaGxwICAgICAgJm0p
Owpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdHJlYW1Nb2RlOjphcnJh
eV9pbmRleF9obHAgJm0pOwoKCgoKDAogCgppbmxpbmUgU3RyZWFtTW9kZTo6U3R5bGVTdGFjazo6
U3R5bGVTdGFjaygpIAp7IAogIGluZGV4ID0gaW5kZXhEZXNpcmVkID0gMDsKICBzdGFja1swXSA9
IENPTlNUUlVDVE9SOyAKfQoKaW5saW5lIFN0cmVhbU1vZGU6OlN0eWxlIFN0cmVhbU1vZGU6OlN0
eWxlU3RhY2s6OnRvcCgpIGNvbnN0CnsKICByZXR1cm4gc3RhY2tbaW5kZXhdOwp9CgppbmxpbmUg
dm9pZCBTdHJlYW1Nb2RlOjpTdHlsZVN0YWNrOjpzZXRUb3AoU3RyZWFtTW9kZTo6U3R5bGUgc3Qp
CnsKICBzdGFja1tpbmRleF0gPSBzdDsKfQoKaW5saW5lIGludCBTdHJlYW1Nb2RlOjpTdHlsZVN0
YWNrOjpnZXRJbmRleCgpIGNvbnN0CnsKICByZXR1cm4gaW5kZXg7Cn0KCgwKIAogCiAKCmlubGlu
ZSBjb25zdCBjaGFyICpTdHJlYW1Nb2RlOjppbmRlbnQoKQp7CiAgcmV0dXJuIGJsYW5rcyArICg4
MCAgLSAxIC0gaW5kZW50TGVuKCkpOwp9CgppbmxpbmUgaW50IFN0cmVhbU1vZGU6OmluZGVudExl
bigpCnsKICByZXR1cm4gZC5pbmRlbnRMZXZlbCAqIDMgOwp9CgppbmxpbmUgdm9pZCBTdHJlYW1N
b2RlOjppbmNJbmRlbnRMZXZlbCgpCnsKICBpbnQgdGVtcD1kLmluZGVudExldmVsOwogIGlmICh0
ZW1wIDwgKCg4MCAtMSkgLyAzICkgKQogICAgZC5pbmRlbnRMZXZlbCA9IHRlbXArMTsKICBlbHNl
IAogICAgc3RkOjpjZXJyIDw8ICIqKiBXQVJOSU5HOiAqKiAgU3RyZWFtTW9kZSBtYXggaW5kZW50
LWxldmVsIGV4Y2VlZGVkLiIKCSAgICAgIDw8IGVuZGw7Cn0KCmlubGluZSB2b2lkIFN0cmVhbU1v
ZGU6OmRlY0luZGVudExldmVsKCkKewogIGludCB0ZW1wPWQuaW5kZW50TGV2ZWw7CiAgaWYgKHRl
bXAgPiAwKQogICAgZC5pbmRlbnRMZXZlbCA9IHRlbXAtMTsKICBlbHNlIAogICAgc3RkOjpjZXJy
IDw8ICIqKiBXQVJOSU5HOiAqKiAgU3RyZWFtTW9kZSBpbmRlbnQtbGV2ZWwgJ3VuZGVyZmxvdycu
IiAKCSAgICAgIDw8IGVuZGw7Cn0KCgppbmxpbmUgU3RyZWFtTW9kZTo6YWdncl9zdGFydF9obHAK
U3RyZWFtTW9kZTo6YWdncl9zdGFydChjb25zdCBjaGFyICpjbGFzc05hbWUsIAoJCSAgICAgICBT
dHJlYW1Nb2RlOjpTdHlsZSBlbmRsU3R5bGUpCnsKICByZXR1cm4gYWdncl9zdGFydF9obHAoKnRo
aXMsIGNsYXNzTmFtZSwgZW5kbFN0eWxlLCAiKCIpOwp9CgppbmxpbmUgU3RyZWFtTW9kZTo6bWVt
YmVyX2hscCBTdHJlYW1Nb2RlOjptZW1iZXJfbmFtZShjb25zdCBjaGFyICptZW1iZXJOYW1lKQp7
CiAgcmV0dXJuIG1lbWJlcl9obHAoKnRoaXMsIG1lbWJlck5hbWUpOwp9CgppbmxpbmUgU3RyZWFt
TW9kZTo6YWdncl9zcGFjZV9obHAgIFN0cmVhbU1vZGU6OmFnZ3Jfc3BhY2UoY29uc3QgY2hhciAq
ZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJlYW1Nb2RlOjpTdHlsZSBzcGVjaWFsRW5kbFN0eWxlKQp7CiAgcmV0dXJuIGFn
Z3Jfc3BhY2VfaGxwKCp0aGlzLGRlbGltLHNwZWNpYWxFbmRsU3R5bGUpOwp9CgppbmxpbmUgU3Ry
ZWFtTW9kZTo6YWdncl9maW5pc2hfaGxwIFN0cmVhbU1vZGU6OmFnZ3JfZmluaXNoKCkKewogIHJl
dHVybiBhZ2dyX2ZpbmlzaF9obHAoKnRoaXMsICIpIik7Cn0KCmlubGluZSBTdHJlYW1Nb2RlOjph
Z2dyX3N0YXJ0X2hscApTdHJlYW1Nb2RlOjphcnJheV9zdGFydChjb25zdCBjaGFyICpjbGFzc05h
bWUsICAKCQkJU3RyZWFtTW9kZTo6U3R5bGUgZW5kbFN0eWxlLAoJCQljb25zdCBjaGFyICpicmFj
a2V0KQp7CiAgcmV0dXJuIGFnZ3Jfc3RhcnRfaGxwKCp0aGlzLCBjbGFzc05hbWUsIGVuZGxTdHls
ZSwgYnJhY2tldCk7Cn0KICAKaW5saW5lIFN0cmVhbU1vZGU6OmFycmF5X2luZGV4X2hscCBTdHJl
YW1Nb2RlOjphcnJheV9pbmRleChpbnQgaSkKewogIHJldHVybiBhcnJheV9pbmRleF9obHAoKnRo
aXMsIGksIGZhbHNlLCAwKTsKfQoKaW5saW5lIFN0cmVhbU1vZGU6OmFycmF5X2luZGV4X2hscCBT
dHJlYW1Nb2RlOjphcnJheV9pbmRleChpbnQgaSwgaW50IGopCnsKICByZXR1cm4gYXJyYXlfaW5k
ZXhfaGxwKCp0aGlzLCBpLCB0cnVlLCBqKTsKfQoKaW5saW5lIFN0cmVhbU1vZGU6OmFnZ3Jfc3Bh
Y2VfaGxwICBTdHJlYW1Nb2RlOjphcnJheV9zcGFjZShjb25zdCBjaGFyICpkZWxpbSkKewogIHJl
dHVybiBhZ2dyX3NwYWNlX2hscCgqdGhpcywgZGVsaW0pOwp9CgppbmxpbmUgU3RyZWFtTW9kZTo6
YWdncl9maW5pc2hfaGxwIFN0cmVhbU1vZGU6OmFycmF5X2ZpbmlzaChjb25zdCBjaGFyICpicmFr
KQp7CiAgcmV0dXJuIGFnZ3JfZmluaXNoX2hscCgqdGhpcywgYnJhayk7Cn0KCgoKCiMgMTU4ICIv
dS9scGFnZS93b3JrYXJlYS9yb290L3Vzci9zaW1sYWIvcmVsZWFzZS9hdXRvbm9tb3VzU3lzdGVt
czEuMS4xL2luY2x1ZGUvUmFuZ2UuaCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm9z
dHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3MsIGNvbnN0IFJhbmdlPFQ+ICZyKQp7CgogIFN0
cmVhbU1vZGUgJnNtKFN0cmVhbU1vZGU6OmdldEluc3RhbmNlKCkpOwogIG9zIDw8IHNtLmFnZ3Jf
c3RhcnQoUmFuZ2U8VD46OnJuZ19uYW1lKCkuY19zdHIoKSwgU3RyZWFtTW9kZTo6QkVZT05EKQog
ICAgIDw8IHNtLm1lbWJlcl9uYW1lKCJtaW4iKSA8PCByLm1pbigpIDw8IHNtLmFnZ3Jfc3BhY2Uo
KQogICAgIDw8IHNtLm1lbWJlcl9uYW1lKCJtYXgiKSA8PCByLm1heCgpIDw8IHNtLmFnZ3JfZmlu
aXNoKCk7CgoKCiAgcmV0dXJuIG9zOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQppc3Ry
ZWFtICZvcGVyYXRvcj4+KGlzdHJlYW0gJmlzLCBSYW5nZTxUPiAmcikKewogIGlzID4+IHIubWlu
KCkgPj4gci5tYXgoKTsKICByZXR1cm4gaXM7Cn0KCgoKCiMgOSAiUG9zZVRvU3RhdGVYZm9ybS5o
IiAyCgojIDEgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9u
b21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVkZS9Cb3VuZGluZ0JveC5oIiAxCgoKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKCiMgMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVh
c2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL1BvaW50LmgiIDEKCgogCiAKIAogCiAK
IAogCiAKIAogCiAKIAoKCmNsYXNzIFBvaW50IAp7CgogcHVibGljOgogIGRvdWJsZSB4OwogIGRv
dWJsZSB5OwogIGlubGluZSAgUG9pbnQgKCk6IHggKDApLCB5ICgwKSB7IH0gOyAKICBpbmxpbmUg
IFBvaW50IChkb3VibGUgeDAsIGRvdWJsZSB5MCk6IHggKHgwKSwgeSAoeTApIHsgfSA7IAogIHZv
aWQgc2V0KGRvdWJsZSB4MCwgZG91YmxlIHkwKSB7eD14MDt5PXkwO307CiAgflBvaW50ICgpIHt9
OwoKICBkb3VibGUgZGlzdChQb2ludCBwKSBjb25zdDsgICAgICAgIAogIGRvdWJsZSBDcm9zcyhQ
b2ludCBwMSwgUG9pbnQgcDIpIGNvbnN0OwogICAKICAgCiAgIAogICAKfTsKaXN0cmVhbSYgb3Bl
cmF0b3I+Pihpc3RyZWFtJiBzLCBQb2ludCYgcCk7Cm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVh
bSYgcywgY29uc3QgUG9pbnQmIHApOwoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CgoKCiMgMTYgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9u
b21vdXNTeXN0ZW1zMS4xLjEvaW5jbHVkZS9Cb3VuZGluZ0JveC5oIiAyCgoKCmNsYXNzIEJvdW5k
aW5nQm94IAp7CiBwdWJsaWM6CiAgdm9pZCBTZXRFbXB0eSgpOwogIHZvaWQgU2V0KGNvbnN0IFBv
aW50ICZwMSwgY29uc3QgUG9pbnQgJnAyKTsgIAogIHZvaWQgUmVjb21wdXRlKGNvbnN0IFBvaW50
ICpwLCBpbnQgbik7ICAgICAgIAogIHZvaWQgVXBkYXRlKGNvbnN0IFBvaW50ICZwKTsgICAgICAg
ICAgICAgICAgIAoKICBQb2ludCBnZXRfTEwoKSBjb25zdCB7cmV0dXJuIExMO30KICBQb2ludCBn
ZXRfVVIoKSBjb25zdCB7cmV0dXJuIFVSO30KICB2b2lkICBzZXRfTEwoY29uc3QgUG9pbnQgJmxs
KSB7IExMPWxsOyB9CiAgdm9pZCAgc2V0X1VSKGNvbnN0IFBvaW50ICZ1cikgeyBVUj11cjsgfQoK
ICBSYW5nZTxkb3VibGU+IGdldFhSYW5nZSgpIGNvbnN0OwogIFJhbmdlPGRvdWJsZT4gZ2V0WVJh
bmdlKCkgY29uc3Q7CiAgdm9pZCBzZXRYUmFuZ2UoY29uc3QgUmFuZ2U8ZG91YmxlPiAmcik7CiAg
dm9pZCBzZXRZUmFuZ2UoY29uc3QgUmFuZ2U8ZG91YmxlPiAmcik7CgogIGJvb2wgIENvbnRhaW5z
IChjb25zdCBQb2ludCAmcCkgY29uc3Q7ICAgICAgICAgIAogIGJvb2wgIElzRW1wdHkoKSBjb25z
dDsgICAgICAgICAgICAgICAgICAgICAgICAgIAogIFBvaW50IFRydW5jYXRlSW50b1JhbmdlKGNv
bnN0IFBvaW50ICZwKSBjb25zdDsgIAogIAogIEJvdW5kaW5nQm94KCk7CiAgQm91bmRpbmdCb3go
Y29uc3QgUG9pbnQgJnAxLCBjb25zdCBQb2ludCAmcDIpICB7IFNldChwMSxwMik7IH0KICB+Qm91
bmRpbmdCb3goKTsKICAKIHByaXZhdGU6CiAgUG9pbnQgTEw7CiAgUG9pbnQgVVI7Cn07CgogCgoK
Y2xhc3Mgc3RkOjpvc3RyZWFtOwpzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt
ICZvcywgY29uc3QgQm91bmRpbmdCb3ggJmIpOwoKCgwKIAogCgppbmxpbmUgClJhbmdlPGRvdWJs
ZT4gQm91bmRpbmdCb3g6OmdldFhSYW5nZSgpIGNvbnN0CnsKICByZXR1cm4gUmFuZ2U8ZG91Ymxl
PihMTC54LCBVUi54KTsKfQoKaW5saW5lIApSYW5nZTxkb3VibGU+IEJvdW5kaW5nQm94OjpnZXRZ
UmFuZ2UoKSBjb25zdAp7CiAgcmV0dXJuIFJhbmdlPGRvdWJsZT4oTEwueSwgVVIueSk7Cn0KCmlu
bGluZSAKdm9pZCBCb3VuZGluZ0JveDo6c2V0WFJhbmdlKGNvbnN0IFJhbmdlPGRvdWJsZT4gJnIp
CnsKICBMTC54ID0gci5taW4oKTsKICBVUi54ID0gci5tYXgoKTsKfQoKaW5saW5lIAp2b2lkIEJv
dW5kaW5nQm94OjpzZXRZUmFuZ2UoY29uc3QgUmFuZ2U8ZG91YmxlPiAmcikKewogIExMLnkgPSBy
Lm1pbigpOwogIFVSLnkgPSByLm1heCgpOwp9CgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCgojIDEwICJQb3NlVG9TdGF0ZVhmb3JtLmgiIDIKCiMgMSAiL3UvbHBhZ2Uvd29ya2Fy
ZWEvcm9vdC91c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRl
L1ZlY3RvcjIuaCIgMQoKCiAKIAogCiAKIAogCiAKIAoKCmNsYXNzIEFuZ2xlOwoKY2xhc3MgVmVj
dG9yMiB7CiBwdWJsaWM6CiAgZG91YmxlIHg7CiAgZG91YmxlIHk7CgogcHVibGljOgogICAKICBj
bGFzcyBOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uIHt9OwogIAogICAKICBzdGF0aWMgY29u
c3QgVmVjdG9yMiB6ZXJvOyAgICAgCiAgc3RhdGljIGNvbnN0IFZlY3RvcjIgZWxlbVsyXTsgIAoK
ICAgCiAgVmVjdG9yMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSAgCiAgVmVj
dG9yMihkb3VibGUgeF8sIGRvdWJsZSB5XykgICAgICAgICAgICA6IHgoeF8pLCB5KHlfKSB7fQog
IGV4cGxpY2l0IFZlY3RvcjIoY29uc3QgZG91YmxlICp2YWxzKSAgICAgOiB4KHZhbHNbMF0pLCB5
KHZhbHNbMV0pIHt9CgogIFZlY3RvcjIgJnNldChkb3VibGUgeF8sIGRvdWJsZSB5XykgICAgICAg
eyB4PXhfOyB5PXlfOyByZXR1cm4gKnRoaXM7IH0KICBWZWN0b3IyICZzZXQoY29uc3QgZG91Ymxl
ICp2YWxzKSAgICAgICAgIHsgcmV0dXJuIHNldCh2YWxzWzBdLHZhbHNbMV0pOyB9CgogICAKICAg
CgogIGRvdWJsZSAmb3BlcmF0b3JbXShpbnQgaSkgICAgICAgICAgICAgICAgeyByZXR1cm4gKigm
eCArIGkpOyB9CiAgZG91YmxlICBvcGVyYXRvcltdKGludCBpKSBjb25zdCAgICAgICAgICB7IHJl
dHVybiAqKCZ4ICsgaSk7IH0KCiAgIAogIGRvdWJsZSAgICAgICAqYmVnaW4oKSAgICAgICAgICAg
ICAgICAgICAgeyByZXR1cm4gJng7IH0KICBjb25zdCBkb3VibGUgKmJlZ2luKCkgY29uc3QgICAg
ICAgICAgICAgIHsgcmV0dXJuICZ4OyB9CiAgZG91YmxlICAgICAgICplbmQoKSAgICAgICAgICAg
ICAgICAgICAgICB7IHJldHVybiAoJngpKzI7IH0KICBjb25zdCBkb3VibGUgKmVuZCgpICAgY29u
c3QgICAgICAgICAgICAgIHsgcmV0dXJuICgmeCkrMjsgfQoKICAgCiAgZG91YmxlICBtYWduaXR1
ZGUoKSBjb25zdDsKICBkb3VibGUgIG1hZ25pdHVkZVNxdWFyZWQoKSBjb25zdDsKICBWZWN0b3Iy
IHVuaXRWZWN0b3IoKSBjb25zdAogICAgdGhyb3cgKE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRp
b24pOwoKICBWZWN0b3IyIHJvdGF0ZWRCeShBbmdsZSBhbmcpIGNvbnN0OwogIFZlY3RvcjIgcm90
YXRlZDkwKCkgY29uc3Q7CgogIFZlY3RvcjIgb3BlcmF0b3ItKCkgY29uc3Q7CiAgVmVjdG9yMiBv
cGVyYXRvcisoY29uc3QgVmVjdG9yMiAmdikgY29uc3Q7CiAgVmVjdG9yMiBvcGVyYXRvci0oY29u
c3QgVmVjdG9yMiAmdikgY29uc3Q7CiAgVmVjdG9yMiBvcGVyYXRvciooZG91YmxlIGEpIGNvbnN0
OwogIFZlY3RvcjIgb3BlcmF0b3IvKGRvdWJsZSBhKSBjb25zdDsKCiAgYm9vbCAgICBvcGVyYXRv
cj09KGNvbnN0IFZlY3RvcjIgJnYpIGNvbnN0OwoKICAgCiAgdm9pZCBub3JtYWxpemUoKSB0aHJv
dyAoTm9ybWFsaXplWmVyb0xlbmd0aEV4Y2VwdGlvbik7CiAgdm9pZCBzY2FsZShkb3VibGUgcyk7
CgogIFZlY3RvcjIgJm9wZXJhdG9yKj0oZG91YmxlIGEpOwogIFZlY3RvcjIgJm9wZXJhdG9yLz0o
ZG91YmxlIGEpOwogIFZlY3RvcjIgJm9wZXJhdG9yKz0oY29uc3QgVmVjdG9yMiAmdik7CiAgVmVj
dG9yMiAmb3BlcmF0b3ItPShjb25zdCBWZWN0b3IyICZ2KTsKfTsKClZlY3RvcjIgb3BlcmF0b3Iq
KGRvdWJsZSBhLCBjb25zdCBWZWN0b3IyICZ2KTsKCmRvdWJsZSAgY3Jvc3NQcm9kdWN0KGNvbnN0
IFZlY3RvcjIgJnYxLCBjb25zdCBWZWN0b3IyICZ2Mik7CiAKCmRvdWJsZSAgaW5uZXJQcm9kdWN0
KGNvbnN0IFZlY3RvcjIgJnYxLCBjb25zdCBWZWN0b3IyICZ2Mik7CiAKCmJvb2wgZXF1YWxzV2l0
aGluKGRvdWJsZSB2MSwgICAgICAgICBkb3VibGUgdjIsICAgICAgICAgZG91YmxlIHRvbCk7CmJv
b2wgZXF1YWxzV2l0aGluKGNvbnN0IFZlY3RvcjIgJnYxLCBjb25zdCBWZWN0b3IyICZ2MiwgZG91
YmxlIHRvbCk7IAoKc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNv
bnN0IFZlY3RvcjIgJnYpOwpzdGQ6OmlzdHJlYW0gJm9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICZp
cywgVmVjdG9yMiAmdik7CgoMCiAKIAoKaW5saW5lIGRvdWJsZSAgVmVjdG9yMjo6bWFnbml0dWRl
KCkgY29uc3QKeyByZXR1cm4gc3FydCh4KnggKyB5KnkpOyB9CgppbmxpbmUgZG91YmxlICBWZWN0
b3IyOjptYWduaXR1ZGVTcXVhcmVkKCkgY29uc3QKeyByZXR1cm4gKHgqeCArIHkqeSk7IH0KCmlu
bGluZSBWZWN0b3IyIFZlY3RvcjI6OnVuaXRWZWN0b3IoKSBjb25zdAp0aHJvdyAoTm9ybWFsaXpl
WmVyb0xlbmd0aEV4Y2VwdGlvbikKewogIGRvdWJsZSBtYWcobWFnbml0dWRlKCkpOwogIGlmICht
YWcgPT0gMC4pIHRocm93IE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRpb24oKTsKICByZXR1cm4g
KCp0aGlzIC8gbWFnKTsKfQoKaW5saW5lIFZlY3RvcjIgVmVjdG9yMjo6cm90YXRlZDkwKCkgY29u
c3QKeyByZXR1cm4gVmVjdG9yMigteSwgeCk7IH0KCmlubGluZSBWZWN0b3IyIFZlY3RvcjI6Om9w
ZXJhdG9yLSgpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjIoLXgsIC15KTsgfQoKaW5saW5lIFZlY3Rv
cjIgVmVjdG9yMjo6b3BlcmF0b3IrKGNvbnN0IFZlY3RvcjIgJnYpIGNvbnN0CnsgcmV0dXJuIFZl
Y3RvcjIoeCt2LngsICB5K3YueSk7IH0KCmlubGluZSBWZWN0b3IyIFZlY3RvcjI6Om9wZXJhdG9y
LShjb25zdCBWZWN0b3IyICZ2KSBjb25zdAp7IHJldHVybiBWZWN0b3IyKHgtdi54LCAgeS12Lnkp
OyB9CgppbmxpbmUgVmVjdG9yMiBWZWN0b3IyOjpvcGVyYXRvciooZG91YmxlIGEpIGNvbnN0Cnsg
cmV0dXJuIFZlY3RvcjIoeCphLCB5KmEpOyB9CgppbmxpbmUgVmVjdG9yMiBWZWN0b3IyOjpvcGVy
YXRvci8oZG91YmxlIGEpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjIoeC9hLCB5L2EpOyB9Cgppbmxp
bmUgYm9vbCBWZWN0b3IyOjpvcGVyYXRvcj09KGNvbnN0IFZlY3RvcjIgJnYpIGNvbnN0CnsgcmV0
dXJuICgoeD09di54KSAmJiAoeT09di55KSk7IH0KCmlubGluZSB2b2lkIFZlY3RvcjI6Om5vcm1h
bGl6ZSgpIHRocm93IChOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uKQp7CiAgZG91YmxlIG1h
ZyhtYWduaXR1ZGUoKSk7CiAgaWYgKG1hZyA9PSAwLikgdGhyb3cgTm9ybWFsaXplWmVyb0xlbmd0
aEV4Y2VwdGlvbigpOwogIHNjYWxlKDEgLyBtYWcpOwp9CgppbmxpbmUgdm9pZCBWZWN0b3IyOjpz
Y2FsZShkb3VibGUgcykKewogIHggKj0gczsKICB5ICo9IHM7Cn0KCmlubGluZSBWZWN0b3IyICZW
ZWN0b3IyOjpvcGVyYXRvcio9KGRvdWJsZSBhKSAKeyAKICBzY2FsZShhKTsgCiAgcmV0dXJuICp0
aGlzOyAKfQoKaW5saW5lIFZlY3RvcjIgJlZlY3RvcjI6Om9wZXJhdG9yLz0oZG91YmxlIGEpCnsK
ICBzY2FsZSgxL2EpOwogIHJldHVybiAqdGhpczsgCn0KCmlubGluZSBWZWN0b3IyICZWZWN0b3Iy
OjpvcGVyYXRvcis9KGNvbnN0IFZlY3RvcjIgJnYpCnsKICB4ICs9IHYueDsKICB5ICs9IHYueTsK
ICByZXR1cm4gKnRoaXM7IAp9CgppbmxpbmUgVmVjdG9yMiAmVmVjdG9yMjo6b3BlcmF0b3ItPShj
b25zdCBWZWN0b3IyICZ2KQp7CiAgeCAtPSB2Lng7CiAgeSAtPSB2Lnk7CiAgcmV0dXJuICp0aGlz
OyAKfQoKaW5saW5lIFZlY3RvcjIgb3BlcmF0b3IqKGRvdWJsZSBhLCBjb25zdCBWZWN0b3IyICZ2
KSAKeyByZXR1cm4gdiphOyB9CgppbmxpbmUgZG91YmxlICBpbm5lclByb2R1Y3QoY29uc3QgVmVj
dG9yMiAmdjEsIGNvbnN0IFZlY3RvcjIgJnYyKQp7IHJldHVybiB2MS54KnYyLnggKyB2MS55KnYy
Lnk7IH0KCmlubGluZSBkb3VibGUgY3Jvc3NQcm9kdWN0KGNvbnN0IFZlY3RvcjIgJnYxLCBjb25z
dCBWZWN0b3IyICZ2MikKeyByZXR1cm4gdjEueCp2Mi55IC0gdjEueSp2Mi54OyB9CgppbmxpbmUg
Ym9vbCBlcXVhbHNXaXRoaW4oZG91YmxlIHYxLCBkb3VibGUgdjIsIGRvdWJsZSB0b2wpCnsgcmV0
dXJuICgodjEgPj0gdjItdG9sKSAmJiAodjEgPD0gdjIrdG9sKSk7IH0KCmlubGluZSBib29sIGVx
dWFsc1dpdGhpbihjb25zdCBWZWN0b3IyICZ2MSwgY29uc3QgVmVjdG9yMiAmdjIsIGRvdWJsZSB0
b2wpCnsgcmV0dXJuICggZXF1YWxzV2l0aGluKHYxLngsdjIueCx0b2wpICYmIGVxdWFsc1dpdGhp
bih2MS55LHYyLnksdG9sKSApOyB9CgoKIyAxMSAiUG9zZVRvU3RhdGVYZm9ybS5oIiAyCgoKY2xh
c3MgUG9zZVRvU3RhdGVYZm9ybSB7CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKIHB1
YmxpYzoKICBQb3NlVG9TdGF0ZVhmb3JtKCk7CiAgUG9zZVRvU3RhdGVYZm9ybShjb25zdCBCb3Vu
ZGluZ0JveCAmdGVzdGJveF8sCiAgICAgICAgICAgICAgICAgICBkb3VibGUgZ3JpZFJlc29sdXRp
b25fZnRfKTsKCiAgdm9pZCBzZXRSZXNvbHV0aW9uKGRvdWJsZSBncmlkUmVzb2x1dGlvbl9mdF8p
OwogIHZvaWQgc2V0VGVzdEJveChjb25zdCBCb3VuZGluZ0JveCAmdGVzdGJveF8pOwogIGRvdWJs
ZSAgICAgICAgICAgICBnZXRSZXNvbHV0aW9uKCkgY29uc3Q7CiAgY29uc3QgQm91bmRpbmdCb3gg
JmdldFRlc3RCb3goKSBjb25zdDsKCiAgIAogIGNvbnN0IFJhbmdlPHNob3J0PiAmZ2V0WFJhbmdl
KCkgY29uc3QgIHsgcmV0dXJuIHhSYW5nZTsgfQogIGNvbnN0IFJhbmdlPHNob3J0PiAmZ2V0WVJh
bmdlKCkgY29uc3QgIHsgcmV0dXJuIHlSYW5nZTsgfQoKICBzaG9ydCBtYXhYKCkgY29uc3Q7CiAg
c2hvcnQgbWF4WSgpIGNvbnN0OwogIHNob3J0IG51bVgoKSBjb25zdDsKICBzaG9ydCBudW1ZKCkg
Y29uc3Q7CiAgCiAgc2hvcnQgbm9ydGhUb0luZGV4KGRvdWJsZSBOLCBib29sIHRydW5jYXRlPWZh
bHNlKSBjb25zdDsgIAogIHNob3J0IGVhc3RUb0luZGV4IChkb3VibGUgRSwgYm9vbCB0cnVuY2F0
ZT1mYWxzZSkgY29uc3Q7ICAKICAgCgogIGRvdWJsZSBpbmRleFRvTm9ydGggKHNob3J0IHgpIGNv
bnN0OwogIGRvdWJsZSBpbmRleFRvRWFzdCAgKHNob3J0IHkpIGNvbnN0OwoKICAgCiAgUmFuZ2U8
c2hvcnQ+IG5vcnRoVG9JbmRleChjb25zdCBSYW5nZTxkb3VibGU+ICZOLCBib29sIHRydW5jYXRl
KSBjb25zdDsgCiAgUmFuZ2U8c2hvcnQ+IGVhc3RUb0luZGV4IChjb25zdCBSYW5nZTxkb3VibGU+
ICZFLCBib29sIHRydW5jYXRlKSBjb25zdDsgIAogICAKICAgCgoKICBCb3VuZGluZ0JveCBORURU
b0luZGV4VHJ1bmNhdGVkKGNvbnN0IEJvdW5kaW5nQm94ICZuZWRib3gpOwogICAKICAgCiAgIAog
ICAKCiAgIAogICAKCiAgIAogICAKCiBwcml2YXRlOgogIEJvdW5kaW5nQm94IHRlc3Rib3g7ICAg
CiAgZG91YmxlICAgICAgZ3JpZFJlc29sdXRpb247CgogICAKICB2b2lkIGRlcml2ZVJhbmdlcygp
OwogIFZlY3RvcjIgICAgICBMTF9vZl9ncmlkOyAgCiAgUmFuZ2U8c2hvcnQ+IHhSYW5nZTsKICBS
YW5nZTxzaG9ydD4geVJhbmdlOwp9OwoKb3N0cmVhbSAmb3BlcmF0b3I+Pihvc3RyZWFtICZvcywg
Y29uc3QgUG9zZVRvU3RhdGVYZm9ybSAmcCk7CgoMCiAKIAoKCmlubGluZSB2b2lkIFBvc2VUb1N0
YXRlWGZvcm06OnNldFJlc29sdXRpb24oZG91YmxlIGdyaWRSZXNvbHV0aW9uX2Z0XykKewogIGdy
aWRSZXNvbHV0aW9uID0gZ3JpZFJlc29sdXRpb25fZnRfOwogIGRlcml2ZVJhbmdlcygpOwp9CgoK
aW5saW5lIHZvaWQgUG9zZVRvU3RhdGVYZm9ybTo6c2V0VGVzdEJveChjb25zdCBCb3VuZGluZ0Jv
eCAmdGVzdGJveF8pCnsKICB0ZXN0Ym94ID0gdGVzdGJveF87CiAgZGVyaXZlUmFuZ2VzKCk7Cn0K
CgppbmxpbmUgZG91YmxlIFBvc2VUb1N0YXRlWGZvcm06OmdldFJlc29sdXRpb24oKSBjb25zdAp7
CiAgcmV0dXJuIGdyaWRSZXNvbHV0aW9uOwp9CgoKaW5saW5lIGNvbnN0IEJvdW5kaW5nQm94ICZQ
b3NlVG9TdGF0ZVhmb3JtOjpnZXRUZXN0Qm94KCkgY29uc3QKewogIHJldHVybiB0ZXN0Ym94Owp9
CgoKaW5saW5lIHNob3J0IFBvc2VUb1N0YXRlWGZvcm06Om1heFgoKSBjb25zdCAKewogIHJldHVy
biB4UmFuZ2UubWF4KCk7Cn0KCgppbmxpbmUgc2hvcnQgUG9zZVRvU3RhdGVYZm9ybTo6bWF4WSgp
IGNvbnN0CnsKICByZXR1cm4geVJhbmdlLm1heCgpOwp9CgoKaW5saW5lIHNob3J0IFBvc2VUb1N0
YXRlWGZvcm06Om51bVgoKSBjb25zdAp7CiAgcmV0dXJuIG1heFgoKSsxOwp9CgoKaW5saW5lIHNo
b3J0IFBvc2VUb1N0YXRlWGZvcm06Om51bVkoKSBjb25zdAp7CiAgcmV0dXJuIG1heFkoKSsxOwp9
CgoKaW5saW5lIHNob3J0IFBvc2VUb1N0YXRlWGZvcm06Om5vcnRoVG9JbmRleChkb3VibGUgTiwg
Ym9vbCB0cnVuY2F0ZSkgIGNvbnN0CnsKICBzaG9ydCB1bnNhZmVJbmRleCA9IHNob3J0KHJpbnQo
IChOIC0gTExfb2ZfZ3JpZC54KSAvIGdyaWRSZXNvbHV0aW9uICkpOwogIGlmICh0cnVuY2F0ZSkg
CiAgICByZXR1cm4geFJhbmdlLmNsYW1wKHVuc2FmZUluZGV4KTsKICBlbHNlCiAgICByZXR1cm4g
dW5zYWZlSW5kZXg7Cn0KCgppbmxpbmUgc2hvcnQgUG9zZVRvU3RhdGVYZm9ybTo6ZWFzdFRvSW5k
ZXggKGRvdWJsZSBFLCBib29sIHRydW5jYXRlKSAgY29uc3QKewogIHNob3J0IHVuc2FmZUluZGV4
ID0gc2hvcnQocmludCggKEUgLSBMTF9vZl9ncmlkLnkpIC8gZ3JpZFJlc29sdXRpb24gKSk7CiAg
aWYgKHRydW5jYXRlKSAKICAgIHJldHVybiB5UmFuZ2UuY2xhbXAodW5zYWZlSW5kZXgpOwogIGVs
c2UKICAgIHJldHVybiB1bnNhZmVJbmRleDsKfQoKCmlubGluZSBkb3VibGUgUG9zZVRvU3RhdGVY
Zm9ybTo6aW5kZXhUb05vcnRoIChzaG9ydCB4KSAgIGNvbnN0CnsKICByZXR1cm4gTExfb2ZfZ3Jp
ZC54ICsgZ3JpZFJlc29sdXRpb24qeDsKfQoKCmlubGluZSBkb3VibGUgUG9zZVRvU3RhdGVYZm9y
bTo6aW5kZXhUb0Vhc3QgICAoc2hvcnQgeSkgICBjb25zdAp7CiAgcmV0dXJuIExMX29mX2dyaWQu
eSArIGdyaWRSZXNvbHV0aW9uKnk7Cn0KCgppbmxpbmUgClJhbmdlPHNob3J0PiBQb3NlVG9TdGF0
ZVhmb3JtOjpub3J0aFRvSW5kZXgoY29uc3QgUmFuZ2U8ZG91YmxlPiAmTiwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cnVuY2F0ZSkgY29uc3QKewog
IHJldHVybiBSYW5nZTxzaG9ydD4obm9ydGhUb0luZGV4KE4ubWluKCksIHRydW5jYXRlKSwKICAg
ICAgICAgICAgICAgICAgICAgIG5vcnRoVG9JbmRleChOLm1heCgpLCB0cnVuY2F0ZSkpOwp9CgoK
aW5saW5lIApSYW5nZTxzaG9ydD4gUG9zZVRvU3RhdGVYZm9ybTo6ZWFzdFRvSW5kZXggKGNvbnN0
IFJhbmdlPGRvdWJsZT4gJkUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgdHJ1bmNhdGUpIGNvbnN0CnsKICByZXR1cm4gUmFuZ2U8c2hvcnQ+KGVhc3RU
b0luZGV4KEUubWluKCksIHRydW5jYXRlKSwKICAgICAgICAgICAgICAgICAgICAgIGVhc3RUb0lu
ZGV4KEUubWF4KCksIHRydW5jYXRlKSk7Cn0KCgoKIyAxICJidWcuY2MiIDIKCgojIDEgIk1vdmVE
Qi5oIiAxCgoKCiAKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy
YWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVj
dG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAgCgoKCgoKCiAK
IAogCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wg
X0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSks
IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIAogIHt9CiAg
CnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9N
X3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9U
cCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9y
LmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBf
X24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24p
OyB9Cn07CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3Mg
X1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90
eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfVmVjdG9yX2FsbG9j
X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNo
KDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSAKICB7fQogIApwcm90ZWN0ZWQ6CiAgX1RwKiBfTV9z
dGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUg
X0FsbG9jX3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g
X0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBf
X3AsIHNpemVfdCBfX24pCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfVmVjdG9yX2Jh
c2UKICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5j
ZWxlc3M+CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2lu
c3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFs
bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24s
IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9
IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OyAg
ICAKCiMgMTUwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVHAgPiAgPgpjbGFzcyB2ZWN0b3IgOiBw
cm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiAKewpwcml2YXRlOgogIHR5cGVkZWYg
X1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qg
dmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIGl0ZXJhdG9y
OwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2
YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5
cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCgogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgpwcm90
ZWN0ZWQ6CgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fZGVh
bGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zpbmlz
aDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7CgoKcHJvdGVjdGVkOgogIHZvaWQg
X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9p
ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgogIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmlu
aXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9
CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0
b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAg
eyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZlcnNlX2l0ZXJh
dG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsg
cmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXpl
KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1RwKTsgfQogIHNp
emVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoX01fZW5kX29m
X3N0b3JhZ2UgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4g
YmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19u
KSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y
W10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQoKICBl
eHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9U
cCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpIAogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0
aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVj
dG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAg
IHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkp
OyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFz
ZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBfTV9maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CgoKICAg
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvcihfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy
YWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVfYXV4
KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpIHsKICAgIF9NX3N0
YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg
KyBfX247IAogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9f
biwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9N
X3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBf
X2ZpcnN0ICkgKTsKICB9CgoKCgoKCgoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBf
TV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAg
ICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShf
X24sIF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N
X3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bXAg
KyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog
ICAgfQogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBj
b25zdCBfVHAmIF9fdmFsKTsKCgogIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+Ojpf
SW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFz
dCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQg
X01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90
eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9h
c3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCAp
ICk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWdu
X2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZyk7IAoKCgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdp
bigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7
IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3Jl
ZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVz
aF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9z
dG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmlu
aXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0K
ICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh
Z2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAg
fQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgIDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0
YXJ0KTsKICAgICA6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICA6OnN3YXAo
X01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRv
ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVf
dHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01f
ZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3Qo
X01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAg
X01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247
CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5
cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2Vu
ZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29uc3RydWN0KF9N
X2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl
cnRfYXV4KF9fcG9zaXRpb24pOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKICAgCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3Qs
IF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9N
X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgaW5zZXJ0
KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90
eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
YXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQoKCgoKCiAgdm9pZCBpbnNlcnQgKGl0ZXJh
dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZvaWQgcG9wX2Jh
Y2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICB9CiAgaXRl
cmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAx
ICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBfTV9maW5pc2gsIF9fcG9zaXRp
b24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4g
X19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBf
X2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNoID0gX01f
ZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2
b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlm
IChfX25ld19zaXplIDwgc2l6ZSgpKSAKICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUs
IGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgp
LCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyByZXNpemUo
X19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5k
KCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
ICBpdGVyYXRvciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQp7CiAgICBpdGVyYXRvciBfX3Jlc3VsdCA9
IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiAg
ICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbikgOyB0aHJvdzsgfSA7
CiAgfQojIDQ0MCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCiAgIAog
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlh
bGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBz
aXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAg
IF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f
c3RhcnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpOwoKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIApvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVj
dG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUo
KSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgCm9wZXJh
dG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4o
KSwgX194LmVuZCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2lu
KCksIF9feS5lbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYgCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3Bl
cmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRo
aXMpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAgaWYgKF9f
eGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9h
bmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBkZXN0cm95KF9N
X3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRf
b2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNp
emUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pID0gY29weShfX3guYmVnaW4oKSwg
X194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgZGVzdHJveShfX2ksIF9NX2ZpbmlzaCk7CiAgICB9
CiAgICBlbHNlIHsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCks
IF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgp
LCBfX3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCAr
IF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6YXNzaWduKHNpemVfdCBfX24sIGNv
bnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZl
Y3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAg
IF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZp
bGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVy
YXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQg
dmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz
dCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVy
YXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xh
c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBf
X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChfX2xl
biA+IGNhcGFjaXR5KCkpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2Nv
cHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9m
aW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4p
IHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9z
dGFydCk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgIF9NX2Zpbmlz
aCA9IF9fbmV3X2ZpbmlzaDsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBf
X2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19t
aWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwg
X19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
Zl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsK
ICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2Fy
ZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2ggLSAxKTsKICAgICpfX3Bvc2l0
aW9uID0gX194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np
emUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAg
PyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9j
YXRlKF9fbGVuKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAg
dHJ5ICB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwg
X19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLCBf
X3gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgIH0KICAg
IGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgCiAgICAg
ICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9
IDsKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFy
dCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0
YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9y
IF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAg
ICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNo
OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2gg
LSAxKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6
ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBf
X29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19z
dGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9f
bmV3X3N0YXJ0OwogICAgdHJ5ICB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf
Y29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICBjb25zdHJ1Y3Qo
X19uZXdfZmluaXNoKTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9
IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7
CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2Zpbmlz
aCksIAogICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkg
OyB0aHJvdzsgfSA7CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2Nh
dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQg
PSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppbnNlcnQoaXRlcmF0
b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90
eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9f
eF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IF9NX2Zp
bmlzaCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9IF9NX2Zpbmlz
aDsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVk
X2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f
ZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2Zp
bmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9z
aXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB1bmlu
aXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5
KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAg
ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwg
X19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBj
b25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsgICAgICAgIAogICAgICBjb25zdCBz
aXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAg
IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgICBpdGVyYXRv
ciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgICAgdHJ5ICB7CiAgICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19z
dGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdf
ZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAg
IH0KICAgICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCAKICAgICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkg
OyB0aHJvdzsgfSA7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9N
X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg
ICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7
CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2Vy
dChpdGVyYXRvciBfX3BvcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsr
X19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y
YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19m
aXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVy
ID0gX01fZmluaXNoIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0g
X01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAg
ICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
X19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1z
X2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmlu
aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1
bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwog
ICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwg
X19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xl
biA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19u
ZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2Zpbmlz
aCA9IF9fbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX25l
d19maW5pc2gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVk
X2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAg
IGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgCiAgICAg
ICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7
IH0gOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9j
YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3Rh
cnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgICB9CiAgfQp9CgojIDgx
MCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCgoKCgoKICAKCgoKIAogCiAKIyAzNCAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogIAoKc3RhdGljIGNvbnN0
IGludCBfX1dPUkRfQklUID0gaW50KDggKnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCgoKCgoKc3Ry
dWN0IF9CaXRfcmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50
IF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGlu
dCBfX3kpIAogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRf
cmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBv
cGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgICpfTV9wIHw9IF9NX21hc2s7CiAg
ICBlbHNlICAgICAgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9C
aXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgCiAgICB7
IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0
X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChf
X3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7CiAgfQogIHZvaWQgZmxpcCgp
IHsgKl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5j
ZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0g
X195OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1YmxpYyByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4gewogIHR5cGVkZWYgX0JpdF9yZWZl
cmVuY2UgIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5
cGVkZWYgX0JpdF9pdGVyYXRvciAgIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAg
dW5zaWduZWQgaW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zm
c2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytf
TV9wOwogICAgfQogIH0KICB2b2lkIGJ1bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9
PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAg
ICB9CiAgfQoKICBfQml0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBf
Qml0X2l0ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KSAKICAgIDog
X01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7fQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkgewogICAgYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp
dGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IGJ1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0o
KSB7CiAgICBidW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3Bl
cmF0b3ItLShpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBidW1wX2Rvd24o
KTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5j
ZV90eXBlIF9faSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsK
ICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJVDsKICAgIF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7
CiAgICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24g
KyBfX1dPUkRfQklUOwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0g
KHVuc2lnbmVkIGludCkgX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3Bl
cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkg
Y29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBf
X2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7
CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9
CiAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShpdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfX1dPUkRfQklUICogKF9NX3AgLSBfX3guX01fcCkgKyBfTV9vZmZzZXQgLSBfX3guX01f
b2Zmc2V0OwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7
IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQg
PT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBf
X3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChpdGVyYXRvciBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zm
c2V0IDwgX194Ll9NX29mZnNldCk7CiAgfQp9OwoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IK
ICA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHR5
cGVkZWYgYm9vbCAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCAgICAg
ICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgIGNvbnN0X2l0ZXJhdG9y
OwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKICB2b2lk
IGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAg
ICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIGJ1bXBfZG93
bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09S
RF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICBfQml0X2NvbnN0X2l0ZXJhdG9y
KCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKHVuc2ln
bmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KSAKICAgIDogX01fcChfX3gpLCBfTV9vZmZz
ZXQoX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194
KSAKICAgIDogX01fcChfX3guX01fcCksIF9NX29mZnNldChfX3guX01fb2Zmc2V0KSB7fQogIGNv
bnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVu
Y2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9y
KysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwog
ICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3Bl
cmF0b3ItLSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25z
dF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVy
YXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5
cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwog
ICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29m
ZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAg
IH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf
X2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0
ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29u
c3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNv
bnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0K
ICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0X2l0ZXJhdG9yIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9f
eC5fTV9vZmZzZXQ7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2Vf
dHlwZSBfX2kpIHsgCiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7IAogIH0KICBib29sIG9wZXJh
dG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3Ag
PT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0ID09IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01f
cCAhPSBfX3guX01fcCB8fCBfTV9vZmZzZXQgIT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBv
cGVyYXRvcjwoY29uc3RfaXRlcmF0b3IgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9f
eC5fTV9wIHx8IChfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA8IF9feC5fTV9vZmZzZXQp
OwogIH0KfTsKCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNf
c3RhdGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAg
ICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSks
IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVj
dGVkOgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pIAogICAgeyByZXR1
cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP
UkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9w
KQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3Rh
cnQuX01fcCk7CiAgfSAgCgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBf
QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUgCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsK
ICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVu
c2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgogCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6
YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9C
dmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgp
LCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6X0Fs
bG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwogICAgICAgICAgCiAgdW5zaWduZWQgaW50
KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxs
b2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVh
bGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9l
bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0gIAoKICBfQml0X2l0ZXJhdG9yIF9N
X3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5k
X29mX3N0b3JhZ2U7Cn07ICAKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9y
X2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFu
Y2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh
c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkg
eyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07CgojIDM0OCAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9i
dmVjdG9yLmgiIDMKCgogCiAKIAogCgoKCgoKCgoKCgogICAgICAgIAoKICAgICAgICAKdGVtcGxh
dGU8Y2xhc3MgX0FsbG9jPiBjbGFzcyB2ZWN0b3I8Ym9vbCxfQWxsb2M+CiAgOiBwdWJsaWMgX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+CgoKCgp7CgogIHR5cGVkZWYgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+
IF9CYXNlOwoKCgpwdWJsaWM6CiAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBz
aXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsgCiAg
dHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3Jl
ZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgY29u
c3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgICAgICAg
ICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgICAgICAgICBj
b25zdF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRv
cj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRl
cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0
ZWQ6CgoKCgoKCgoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19u
KSB7CiAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAg
ICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCAr
IGRpZmZlcmVuY2VfdHlwZShfX24pOwogIH0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf
b2Zfc3RvcmFnZSkgewogICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwg
X01fZmluaXNoICsgMSk7CiAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICArK19NX2Zpbmlz
aDsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAyICog
c2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxs
b2MoX19sZW4pOwogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24s
IGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAqX19pKysgPSBfX3g7CiAgICAgIF9NX2ZpbmlzaCA9
IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19X
T1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgfQogIH0KCgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVfcmFu
Z2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIF9NX3N0YXJ0ID0g
aXRlcmF0b3IoKTsKICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSA9IDA7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIAogICAg
ICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgIGNvcHko
X19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgIF9fcG9zID0gaW5zZXJ0
KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICsrX19wb3M7CiAgICB9CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBf
X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpIHsKICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBzaXpl
X3R5cGUgX19uID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAg
ICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJk
KF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAg
ICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgIF9NX2Zpbmlz
aCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBz
aXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgIHVuc2ln
bmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kg
PSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9f
aSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHko
X19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9
CiAgfSAgICAgIAoKCgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFy
dDsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0K
ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVn
aW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yKGVuZCgpKTsgCiAgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBj
b25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IAogIH0K
CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdp
bigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgt
MSk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICByZXR1cm4gc2l6ZV90eXBl
KGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogIH0KICBi
b29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQogIHJlZmVyZW5j
ZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZm
ZXJlbmNlX3R5cGUoX19uKSk7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVf
dHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUo
X19uKSk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3IgKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg
PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvciAoc2l6ZV90
eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAgIF9NX2luaXRp
YWxpemUoX19uKTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9f
dmFsdWUgPyB+MCA6IDApOwogIH0KCiAgZXhwbGljaXQgdmVjdG9yIChzaXplX3R5cGUgX19uKQog
ICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQogIHsKICAgIF9NX2luaXRpYWxpemUoX19uKTsK
ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogIH0KCiAgdmVj
dG9yIChjb25zdCB2ZWN0b3IgJiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkgewog
ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5l
bmQoKSwgX01fc3RhcnQpOwogIH0KCgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdmVjdG9yIChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw
ZSgpKQogICAgOiBfQmFzZShfX2EpCiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdl
cjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXpl
X2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KICAgIAogIHRlbXBs
YXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVn
ZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplKF9f
bik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6
IDApOwogIH0KICAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsK
ICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KCBfX2ZpcnN0ICkgKTsKICB9CiMgNTg3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIg
MwoKCiAgfnZlY3RvciAoKSB7IH0KCiAgdmVjdG9yICYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciAm
IF9feCkgewogICAgaWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgaWYgKF9feC5z
aXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01faW5p
dGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIH0KICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQo
KSwgYmVnaW4oKSk7CiAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f
eC5zaXplKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lk
IGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgaWYgKF9fbiA+IHNpemUoKSkgewog
ICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDAp
OwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwoX01fc3RhcnQu
X01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CiAgfQoKCgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f
YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2Vy
IF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdCkg
X19uLCAoYm9vbCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpIHsKICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAgIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAg
Kl9fY3VyID0gKl9fZmlyc3Q7CiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgIGVyYXNl
KF9fY3VyLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19s
YXN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01f
YXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6
ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwog
ICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
YmVnaW4oKSksIGVuZCgpKTsKICAgIGVsc2UgewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlk
ID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgY29weShfX2Zp
cnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7
CiAgICB9CiAgfSAgICAKCgoKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYg
KGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxs
b2MoX19uKTsKICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3Io
X19xLCAwKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRv
cihfX3EsIDApOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRf
QklUIC0gMSkvX19XT1JEX0JJVDsKICAgIH0KICB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0
dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4g
KmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQog
IGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAg
dm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBf
TV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHN3YXAodmVjdG9yICYgX194KSB7
CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgIDo6c3dhcChfTV9maW5p
c2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9N
X2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3Np
dGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3Jh
Z2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAg
ZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICByZXR1cm4gYmVn
aW4oKSArIF9fbjsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
IF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3Jh
bCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9k
aXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIGluc2VydChfX3BvcywgKHNp
emVfdHlwZSkgX19uLCAoYm9vbCkgX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBf
TV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y
eSggX19maXJzdCApICk7CiAgfQojIDc2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMK
CiAgCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9v
bCBfX3gpIHsKICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgaWYgKGNhcGFjaXR5KCkgLSBz
aXplKCkgPj0gX19uKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9N
X2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgZmlsbChfX3Bvc2l0aW9uLCBf
X3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgIF9NX2ZpbmlzaCAr
PSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUg
X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICB1bnNpZ25lZCBpbnQqIF9f
cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4o
KSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIGZpbGxfbihfX2ksIF9fbiwg
X194KTsKICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlm
ZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAg
ICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIH0KICB9CgogIHZvaWQgcG9wX2Jh
Y2soKSB7IC0tX01fZmluaXNoOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlv
bikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRp
b24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0tX01fZmluaXNoOwogICAgcmV0dXJu
IF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJh
dG9yIF9fbGFzdCkgewogICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0
KTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf
c2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKSAK
ICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkp
OwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7
CiAgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQp9OwoKCgp0eXBl
ZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsKCiMgODIyICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2J2ZWN0b3IuaCIgMwoKCgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3ZlY3RvciIgMiAzCgoKCgogCiAKIAojIDE4ICJNb3ZlREIuaCIgMgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc2V0IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF90cmVlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz
cyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYg
X0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBi
aW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0
eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1
bHRfdHlwZTsKfTsgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0
IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCAvIF9feTsgfQp9OwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVu
dGl0eV9lbGVtZW50KHBsdXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNs
YXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewog
IHJldHVybiBfVHAoMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25z
dCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxf
dG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
PT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4g
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z
dCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2Fs
X29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
fHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJl
ZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBl
bmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJl
ZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1By
ZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0
eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxp
bmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJl
ZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9QcmVkaWNhdGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAogIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJn
dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6
CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShj
b25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwgCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVu
dF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsgCiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9Q
cmVkaWNhdGU+IApub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5h
cnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0
aW9uPiAKY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy
YXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1
ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAg
IGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAg
ICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0
X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1
bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsgCiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFz
dDxfT3BlcmF0aW9uPiAKYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9U
cCYgX194KSAKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRf
dHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBf
QXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJp
bmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBi
aW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSAKICAgICAgOiBvcChfX3gp
LCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVy
YXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+
IApiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90
eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMl90eXBlKF9f
eCkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24y
PgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiAKewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlv
bjEgX19vcDE7CiAgX09wZXJhdGlvbjIgX19vcDI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNv
bnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpIAogICAgOiBfX29w
MShfX3gpLCBfX29wMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl
CiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYg
X194KSBjb25zdCB7CiAgICByZXR1cm4gX19vcDEoX19vcDIoX194KSk7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2Nv
bXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+IApjb21wb3NlMShjb25zdCBfT3BlcmF0aW9u
MSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewogIHJldHVybiB1bmFyeV9jb21w
b3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19vcDIpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4K
Y2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf
T3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24x
IF9NX29wMTsKICBfT3BlcmF0aW9uMiBfTV9vcDI7CiAgX09wZXJhdGlvbjMgX01fb3AzOwpwdWJs
aWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJh
dGlvbjImIF9feSwgCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikgCiAg
ICA6IF9NX29wMShfX3gpLCBfTV9vcDIoX195KSwgX01fb3AzKF9feikgeyB9CiAgdHlwZW5hbWUg
X09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3Bl
cmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fb3AxKF9N
X29wMihfX3gpLCBfTV9vcDMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp
b24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlf
Y29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPiAKY29tcG9zZTIo
Y29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIsIAogICAg
ICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19vcDMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8
X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19vcDEsIF9fb3AyLCBf
X29wMyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2lu
dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1
bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9m
dW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQg
b3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFy
eV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7
CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xh
c3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOiAKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0ciko
X0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7
fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCko
X0FyZzEsIF9BcmcyKSkgCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0
b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9f
eCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNs
YXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJn
MixfUmVzdWx0PiAKcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0
dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7
Cn0KCiAKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVj
dCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNz
IF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwg
dHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmly
c3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qy
bmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRf
dHlwZT4KewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShj
b25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFz
dDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1
YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz
cyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJn
MSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBj
b25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9B
cmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJn
MSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4gCnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Q
cm9qZWN0MXN0PF9BcmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz
IF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0Fy
ZzI+IHt9OwoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92
b2lkX2Z1bgp7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9f
dmFsOwogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX192YWwo
X192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4g
X192YWw7IH0KfTsgIAoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQg
PSBfUmVzdWx0PgoKCgpzdHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPF9Bcmd1bWVudCwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50
X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBf
UmVzdWx0JiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3Zh
bDsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQs
IGNsYXNzIF9BcmcyID0gX0FyZzE+CgoKCnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9N
X3ZhbDsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwo
X192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBf
QXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29u
c3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4o
X192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3VuYXJ5
X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewog
IHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0
LF9SZXN1bHQsX1Jlc3VsdD4gCmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJl
dHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7
Cn0KCiAKIApjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5z
aWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFi
bGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgog
IHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9p
bmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIg
KyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0g
LSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBf
X2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAg
ewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAg
ICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAg
ICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFi
bGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9fc2Vl
ZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29w
IDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykK
ICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSAr
IF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIg
PSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2lu
aXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgx
NjE4MDMzOTh1KTsgfQp9OwoKCiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAog
CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1
bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K
Y2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCos
X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq
IF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf
VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+
CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBf
TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAo
X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9
CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipf
TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19w
LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf
bWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZiko
X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq
IF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K
ICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19y
LipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9t
ZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZiko
X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19w
ZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7
IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZiko
KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9p
ZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYg
X19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9m
KSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2
b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAo
X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwg
X1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg
KF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4x
X3Q8dm9pZCwgX1RwLCBfQXJnPiAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw
KixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAo
X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0K
cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0Fy
Zz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihf
X3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f
ci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVm
X3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2
b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6
OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZh
dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCiAKIAogCiAKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1l
bV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4o
X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21l
bV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyBy
ZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9y
ZWYoX1JldCAoX1RwOjoqX19mKSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1Rw
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3Rf
bWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNv
bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJl
dHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQs
X1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVy
biBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0
LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJu
IG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxf
UmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQog
IHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyBy
ZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0
dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9S
ZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0
dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZf
dDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z
dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
CgogCgoKCiAKIAogCiMgNTkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAyIDMKCgogIAoKCgoK
CnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90
eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1Nf
cmJfdHJlZV9ibGFjayA9IHRydWU7CgpzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBl
ZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CiAgdHlwZWRlZiBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgX0NvbG9yX3R5cGUgX01fY29sb3I7IAogIF9CYXNlX3B0
ciBfTV9wYXJlbnQ7CiAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoK
ICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGls
ZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVybiBfX3g7
CiAgfQoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAg
ICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0OwogICAgcmV0
dXJuIF9feDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgpzdHJ1Y3QgX1JiX3RyZWVf
bm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9k
ZTxfVmFsdWU+KiBfTGlua190eXBlOwogIF9WYWx1ZSBfTV92YWx1ZV9maWVsZDsKfTsKCgpzdHJ1
Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6
Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CiAgX0Jhc2VfcHRyIF9NX25vZGU7CgogIHZvaWQgX01faW5jcmVtZW50KCkKICB7CiAgICBpZiAo
X01fbm9kZS0+X01fcmlnaHQgIT0gMCkgewogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmln
aHQ7CiAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX01fbm9kZSA9
IF9NX25vZGUtPl9NX2xlZnQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9
IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdo
dCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7
CiAgICAgIH0KICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAgICBfTV9u
b2RlID0gX195OwogICAgfQogIH0KCiAgdm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAgIGlmIChf
TV9ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCAmJgogICAgICAgIF9NX25vZGUtPl9N
X3BhcmVudC0+X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5f
TV9yaWdodDsKICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAgICBfQmFz
ZV9wdHIgX195ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQg
IT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0gX195Owog
ICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7
CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkgewogICAgICAgIF9NX25vZGUg
PSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgX01fbm9k
ZSA9IF9feTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfUmVm
LCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVf
YmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9S
ZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JiX3RyZWVf
aXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiAgICAgICAgICAgICAKICAgIGl0ZXJh
dG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBjb25zdCBfVmFsdWUmLCBj
b25zdCBfVmFsdWUqPiAKICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRl
cmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiAgICAgICAgICAgICAgICAgICAKICAgIF9TZWxmOwog
IHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwoKICBfUmJfdHJlZV9p
dGVyYXRvcigpIHt9CiAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9k
ZSA9IF9feDsgfQogIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9N
X25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogIHBvaW50ZXIg
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYg
b3BlcmF0b3IrKygpIHsgX01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9w
ZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50
KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogICAgCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9N
X2RlY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2RlY3JlbWVudCgpOwogICAgcmV0dXJuIF9f
dG1wOwogIH0KfTsKCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfYmFzZV9p
dGVyYXRvciYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2Vf
aXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoK
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX195
KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOwp9CgojIDIxNCAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF90cmVlLmgiIDMKCgppbmxpbmUgdm9pZCAKX1JiX3RyZWVfcm90YXRlX2xlZnQo
X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewog
IF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICBfX3gtPl9NX3JpZ2h0
ID0gX195LT5fTV9sZWZ0OwogIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgX195LT5fTV9sZWZ0
LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAg
aWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9f
eC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7
CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIF9feS0+X01fbGVm
dCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQgCl9SYl90cmVl
X3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNl
KiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAg
X194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQog
ICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194
LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVs
c2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3BhcmVu
dC0+X01fcmlnaHQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBf
X3k7CiAgX195LT5fTV9yaWdodCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5s
aW5lIHZvaWQgCl9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1Ji
X3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
cmVkOwogIHdoaWxlIChfX3ggIT0gX19yb290ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9
PSBfU19yYl90cmVlX3JlZCkgewogICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFy
ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kg
PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdodDsKICAgICAgaWYgKF9feSAmJiBf
X3ktPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQt
Pl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1Nf
cmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xv
ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQ7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVu
dC0+X01fcmlnaHQpIHsKICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAg
X1JiX3RyZWVfcm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gt
Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01f
cGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAg
ICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9f
eC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5f
TV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9j
b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50Owog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9N
X2xlZnQpIHsKICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3Ry
ZWVfcm90YXRlX3JpZ2h0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9w
YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVl
X3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0K
ICAgIH0KICB9CiAgX19yb290LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7Cn0KCmlubGlu
ZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCl9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVf
bm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVl
X25vZGVfYmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Ji
X3RyZWVfbm9kZV9iYXNlKiYgX19yaWdodG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
eSA9IF9fejsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3hfcGFyZW50ID0gMDsKICBpZiAoX195LT5fTV9sZWZ0ID09IDApICAgICAgCiAgICBf
X3ggPSBfX3ktPl9NX3JpZ2h0OyAgICAgIAogIGVsc2UKICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09
IDApICAgCiAgICAgIF9feCA9IF9feS0+X01fbGVmdDsgICAgIAogICAgZWxzZSB7ICAgICAgICAg
ICAgICAgICAgICAKICAgICAgX195ID0gX195LT5fTV9yaWdodDsgICAgCiAgICAgIHdoaWxlIChf
X3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9
IF9feS0+X01fcmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsgICAgICAgICAgIAogICAg
X196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7IAogICAgX195LT5fTV9sZWZ0ID0gX196LT5f
TV9sZWZ0OwogICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQg
PSBfX3ktPl9NX3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9N
X3BhcmVudDsKICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7ICAgICAgIAogICAg
ICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgX196LT5fTV9yaWdodC0+X01f
cGFyZW50ID0gX195OwogICAgfQogICAgZWxzZQogICAgICBfX3hfcGFyZW50ID0gX195OyAgCiAg
ICBpZiAoX19yb290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196
LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVm
dCA9IF9feTsKICAgIGVsc2UgCiAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsK
ICAgIF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgOjpzd2FwKF9feS0+X01f
Y29sb3IsIF9fei0+X01fY29sb3IpOwogICAgX195ID0gX196OwogICAgIAogIH0KICBlbHNlIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7
CiAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OyAgIAogICAgaWYg
KF9fcm9vdCA9PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UgCiAgICAgIGlmIChf
X3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9N
X2xlZnQgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQg
PSBfX3g7CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opIAogICAgICBpZiAoX196LT5fTV9yaWdo
dCA9PSAwKSAgICAgICAgIAogICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKICAg
ICAKICAgICAgZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9T
X21pbmltdW0oX194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opICAKICAgICAgaWYgKF9f
ei0+X01fbGVmdCA9PSAwKSAgICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01f
cGFyZW50OyAgCiAgICAgCiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
IF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQog
IGlmIChfX3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7IAogICAgd2hpbGUgKF9feCAh
PSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFj
aykpCiAgICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkgewogICAgICAgIF9SYl90
cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgaWYgKF9f
dy0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3Ig
PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19y
Yl90cmVlX3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9f
cm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICB9CiAg
ICAgICAgaWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVm
dC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01f
cmlnaHQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9T
X3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9y
ZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9f
eF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+
X01fcmlnaHQgPT0gMCB8fCAKICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9
PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+
X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9N
X2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdo
dChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0Owog
ICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9y
OwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAg
ICAgICAgaWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9ibGFjazsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9f
cm9vdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7ICAgICAgICAg
ICAgICAgICAgIAogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+
X01fbGVmdDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewog
ICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hf
cGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90
YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50
LT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fCAK
ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2sp
ICYmCiAgICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+
X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+
X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAg
ICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICAgX193
LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlm
IChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxh
Y2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAg
ICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBf
X3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9
IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVf
cmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAg
ICAgfQogICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgfQog
IHJldHVybiBfX3k7Cn0KCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlIHsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFs
bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0
b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBfUmJfdHJlZV9hbGxv
Y19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9y
KF9fYSksIF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAg
IF9NX25vZGVfYWxsb2NhdG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICBf
UmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgCiAgICB7IHJldHVybiBfTV9ub2RlX2Fs
bG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxf
VHA+KiBfX3ApIAogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0K
fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfUmJfdHJlZV9h
bGxvY19iYXNlPF9UcCwgX0FsbG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw
ZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2Nh
dG9yX3R5cGUoKTsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl
JikgOiBfTV9oZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9N
X2hlYWRlcjsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8
X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfUmJf
dHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjph
bGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3Ap
CiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6IHB1YmxpYyBf
UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5
cGVkZWYgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4K
ICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBl
IGFsbG9jYXRvcl90eXBlOwoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EpIAogICAgOiBfQmFzZShfX2EpIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogIH5f
UmJfdHJlZV9iYXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9Cgp9OwoKIyA1MTkgIi91
c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfdHJlZS5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W
YWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3Mg
X0FsbG9jID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAgPgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3Rl
ZCBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNl
PF9WYWx1ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3Ry
ZWVfbm9kZTsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1Ymxp
YzoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl
KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVf
bm9kZSogX0xpbmtfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgoK
CgoKCgpwcm90ZWN0ZWQ6CgogIF9MaW5rX3R5cGUgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVf
dHlwZSYgX194KQogIHsKICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRfbm9kZSgpOwogICAg
dHJ5ICB7CiAgICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAg
fQogICAgY2F0Y2goLi4uKSB7ICBfTV9wdXRfbm9kZShfX3RtcCkgOyB0aHJvdzsgfSA7CiAgICBy
ZXR1cm4gX190bXA7CiAgfQoKICBfTGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBf
X3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFs
dWVfZmllbGQpOwogICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1w
LT5fTV9sZWZ0ID0gMDsKICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7
CiAgfQoKICB2b2lkIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95
KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVj
dGVkOgogIHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OyAgCiAgX0NvbXBhcmUgX01fa2V5X2NvbXBh
cmU7CgogIF9MaW5rX3R5cGUmIF9NX3Jvb3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190
eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgp
IGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0K
ICBfTGlua190eXBlJiBfTV9yaWdodG1vc3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190
eXBlJikgX01faGVhZGVyLT5fTV9yaWdodDsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVm
dChfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0
KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChfTGlua190eXBlIF9feCkKICAgIHsg
cmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KICBzdGF0aWMgX0xpbmtfdHlw
ZSYgX1NfcGFyZW50KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf
X3gtPl9NX3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9MaW5rX3R5cGUg
X194KQogICAgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQogIHN0YXRpYyBjb25zdCBf
S2V5JiBfU19rZXkoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9T
X3ZhbHVlKF9feCkpOyB9CiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfTGlua190eXBl
IF9feCkKICAgIHsgcmV0dXJuIChfQ29sb3JfdHlwZSYpKF9feC0+X01fY29sb3IpOyB9CgogIHN0
YXRpYyBfTGlua190eXBlJiBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xp
bmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcmlnaHQo
X0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7
IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcGFyZW50KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJl
dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2Ug
X1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5f
TV92YWx1ZV9maWVsZDsgfQogIHN0YXRpYyBjb25zdCBfS2V5JiBfU19rZXkoX0Jhc2VfcHRyIF9f
eCkKICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7
fSAKICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJl
dHVybiAoX0NvbG9yX3R5cGUmKShfTGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0
aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9MaW5rX3R5cGUgX194KSAKICAgIHsgcmV0dXJuIChf
TGlua190eXBlKSAgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgc3Rh
dGljIF9MaW5rX3R5cGUgX1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChf
TGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKcHVibGlj
OgogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJlbmNlLCBwb2lu
dGVyPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIGNv
bnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4gCiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsK
CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2Vf
aXRlcmF0b3I7CgoKCgoKCgogCgpwcml2YXRlOgogIGl0ZXJhdG9yIF9NX2luc2VydChfQmFzZV9w
dHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOwogIF9MaW5rX3R5
cGUgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwogIHZvaWQgX01fZXJh
c2UoX0xpbmtfdHlwZSBfX3gpOwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2Rl
X2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsg
fQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wKQogICAgOiBfQmFzZShhbGxvY2F0
b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKSAKICAg
IHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBf
X2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX25v
ZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkgCiAgICB7IF9NX2VtcHR5X2luaXRp
YWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRv
cigpKSwKICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9j
b21wYXJlKQogIHsgCiAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICBfTV9lbXB0eV9p
bml0aWFsaXplKCk7CiAgICBlbHNlIHsKICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3Ji
X3RyZWVfcmVkOwogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hl
YWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAg
IF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgfQogICAgX01fbm9k
ZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogIH0KICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7
IH0KICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiAK
ICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPiYgX194KTsKCnByaXZhdGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkg
ewogICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOyAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBf
TV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7
CiAgfQoKcHVibGljOiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgX0Nv
bXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQogIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIF9NX2hlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IF9NX2hlYWRlcjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJz
ZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNv
bnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICBy
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkp
OyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0gCiAgYm9vbCBlbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIF9NX25vZGVfY291bnQgPT0gMDsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fbm9kZV9jb3VudDsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgIDo6c3dhcChfTV9oZWFk
ZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgIDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9k
ZV9jb3VudCk7CiAgICAgOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUp
OwogIH0KICAgIApwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHBh
aXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwog
IGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRv
ciBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZh
bHVlX3R5cGUmIF9feCk7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCk7CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2Vx
dWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgoKCgoK
CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CiAgc2l6ZV90eXBlIGVyYXNlKGNv
bnN0IGtleV90eXBlJiBfX3gpOwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KTsKICB2b2lkIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBr
ZXlfdHlwZSogX19sYXN0KTsKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9NX25vZGVfY291bnQg
IT0gMCkgewogICAgICBfTV9lcmFzZShfTV9yb290KCkpOwogICAgICBfTV9sZWZ0bW9zdCgpID0g
X01faGVhZGVyOwogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9N
X2hlYWRlcjsKICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICB9CiAgfSAgICAgIAoKcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBpdGVyYXRvciBmaW5kKGNvbnN0
IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3Q7CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0Owog
IGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJh
dG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVw
cGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+
IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHBhaXI8Y29uc3RfaXRlcmF0b3Is
IGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsK
CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYm9vbCBfX3JiX3Zl
cmlmeSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xh
c3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgCm9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4g
X194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBf
X3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W
YWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wgCm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgY29uc3QgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAg
cmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCAK
c3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsIAogICAgIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+CiAgOjpvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0g
MDsKICAgIF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOyAgICAgICAgCiAgICBp
ZiAoX194Ll9NX3Jvb3QoKSA9PSAwKSB7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX2xl
ZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwog
ICAgfQogICAgZWxzZSB7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwg
X01faGVhZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsK
ICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX25v
ZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgIH0KICB9CiAgcmV0dXJuICp0aGlzOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwg
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNl
cnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewog
IF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAo
X0xpbmtfdHlwZSkgX195XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFk
ZXIgfHwgX194ICE9IDAgfHwgCiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192
KSwgX1Nfa2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1Nf
bGVmdChfX3kpID0gX196OyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICBpZiAoX195ID09IF9NX2hlYWRlcikgewogICAgICBfTV9yb290
KCkgPSBfX3o7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgfQogICAgZWxzZSBpZiAo
X195ID09IF9NX2xlZnRtb3N0KCkpCiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7ICAgIAogIH0K
ICBlbHNlIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kp
ID0gX196OwogICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0
KCkgPSBfX3o7ICAgCiAgfQogIF9TX3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9
IDA7CiAgX1NfcmlnaHQoX196KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVh
ZGVyLT5fTV9wYXJlbnQpOwogICsrX01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs
dWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IK
X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5z
ZXJ0X2VxdWFsKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFk
ZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAg
ICBfX3kgPSBfX3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiks
IF9TX2tleShfX3gpKSA/IAogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gp
OwogIH0KICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwgCiAgICAgYm9vbD4K
X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5z
ZXJ0X3VuaXF1ZShjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVh
ZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsK
ICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9j
b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21w
ID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRl
cmF0b3IoX195KTsgICAKICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKSAgICAg
CiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192
KSwgdHJ1ZSk7CiAgICBlbHNlCiAgICAgIC0tX19qOwogIGlmIChfTV9rZXlfY29tcGFyZShfU19r
ZXkoX19qLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgcmV0dXJuIHBhaXI8aXRl
cmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICByZXR1cm4gcGFp
cjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwg
X0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZW
YWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3Np
dGlvbiwgY29uc3QgX1ZhbCYgX192KQp7CiAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9o
ZWFkZXItPl9NX2xlZnQpIHsgIAogICAgaWYgKHNpemUoKSA+IDAgJiYgCiAgICAgICAgX01fa2V5
X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkp
CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9N
X25vZGUsIF9fdik7CiAgICAgCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9f
dikuZmlyc3Q7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7
ICAKICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZW
YWx1ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBf
X3YpOwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0g
ZWxzZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3Jl
OwogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9m
VmFsdWUoKShfX3YpKSAKICAgICAgICAmJiBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f
diksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkgewogICAgICBpZiAoX1NfcmlnaHQoX19i
ZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3Jl
Ll9NX25vZGUsIF9fdik7IAogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bv
c2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIH0gZWxz
ZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09
IF9NX2hlYWRlci0+X01fbGVmdCkgeyAgCiAgICBpZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25v
ZGUpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRp
b24uX01fbm9kZSwgX192KTsKICAgICAKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVh
bChfX3YpOwogIH0gZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlcikgeyAK
ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmln
aHRtb3N0KCkpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192
KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxzZSB7CiAg
ICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYg
KCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9u
b2RlKSkKICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k
ZSksIF9LZXlPZlZhbHVlKCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9N
X25vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2Rl
LCBfX3YpOyAKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5f
TV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CiAgICAgCiAgICB9IGVsc2UKICAgICAg
cmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3MgX0FsbG9jPgogIHRlbXBs
YXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4K
ICA6Omluc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKewogIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGluc2VydF9lcXVhbCgqX19maXJzdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21w
LCBjbGFzcyBfQWxsb2M+IAogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9J
SSBfX2xhc3QpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp
bnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKfQoKIyAxMDIxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
bWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUu
aCIgMwoKICAgICAgICAgCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz
IF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSB2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4KICA6OmVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBfTGlua190eXBlIF9feSA9IAog
ICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5f
TV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f
aGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195
KTsKICAtLV9NX25vZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OnNpemVfdHlwZSAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQp7CiAgcGFpcjxpdGVyYXRvcixp
dGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX194KTsKICBzaXplX3R5cGUgX19uID0gMDsKICBk
aXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQsIF9fbik7CiAgZXJhc2UoX19wLmZpcnN0LCBf
X3Auc2Vjb25kKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUg
X1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUg
Cl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xp
bmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5fTV9wYXJl
bnQgPSBfX3A7CiAKICB0cnkgIHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3RvcC0+
X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9fdG9w
OwogICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBf
TGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0g
X195OwogICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQp
CiAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAg
ICAgX19wID0gX195OwogICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogIGNhdGNo
KC4uLikgeyAgX01fZXJhc2UoX190b3ApIDsgdGhyb3c7IH0gOwoKICByZXR1cm4gX190b3A7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01fZXJhc2UoX0xpbmtf
dHlwZSBfX3gpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgd2hpbGUgKF9f
eCAhPSAwKSB7CiAgICBfTV9lcmFzZShfU19yaWdodChfX3gpKTsKICAgIF9MaW5rX3R5cGUgX195
ID0gX1NfbGVmdChfX3gpOwogICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICBfX3ggPSBfX3k7CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGl0ZXJh
dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkg
JiYgX19sYXN0ID09IGVuZCgpKQogICAgY2xlYXIoKTsKICBlbHNlCiAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpIGVyYXNlKF9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSog
X19sYXN0KSAKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoKl9fZmlyc3QrKyk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl
LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNv
bnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOyAgICAgICAKICBf
TGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgICAgICAgCgogIHdoaWxlIChfX3ggIT0gMCkgCiAg
ICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gs
IF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsK
CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsgICAKICByZXR1cm4gKF9faiA9PSBlbmQo
KSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/IAogICAgIGVu
ZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBf
S2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBl
bmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpj
b25zdF9pdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9
IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogIHdoaWxlIChf
X3ggIT0gMCkgewogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAg
ICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9T
X3JpZ2h0KF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9f
eSk7ICAgCiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19r
ZXkoX19qLl9NX25vZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZSAKX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tleSYgX19rKSBj
b25zdAp7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9IGVxdWFs
X3JhbmdlKF9fayk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBf
X3Auc2Vjb25kLCBfX24pOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCnsK
ICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9v
dCgpOyAgCgogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tl
eShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVs
c2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9y
IApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjps
b3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9N
X2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogIHdoaWxlIChfX3gg
IT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBf
X3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1Nfcmln
aHQoX194KTsKCiAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5
JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194
ID0gX01fcm9vdCgpOyAgCgogICB3aGlsZSAoX194ICE9IDApIAogICAgIGlmIChfTV9rZXlfY29t
cGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChf
X3gpOwogICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gaXRl
cmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg
X0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlw
ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKewogIF9MaW5r
X3R5cGUgX195ID0gX01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAK
CiAgIHdoaWxlIChfX3ggIT0gMCkgCiAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5
KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgZWxzZQog
ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgCnBhaXI8
dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6aXRlcmF0b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykK
ewogIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwgdXBw
ZXJfYm91bmQoX19rKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSAKcGFpcjx0eXBl
bmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25z
dF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9D
b21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBf
S29WLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBj
b25zdAp7CiAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2Vy
X2JvdW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVwcGVyX2JvdW5kKF9faykpOwp9CgppbmxpbmUgaW50IApfX2JsYWNrX2NvdW50KF9SYl90cmVl
X25vZGVfYmFzZSogX19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkKewogIGlmIChf
X25vZGUgPT0gMCkKICAgIHJldHVybiAwOwogIGVsc2UgewogICAgaW50IF9fYmMgPSBfX25vZGUt
Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2sgPyAxIDogMDsKICAgIGlmIChfX25vZGUgPT0g
X19yb290KQogICAgICByZXR1cm4gX19iYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYmMgKyBf
X2JsYWNrX2NvdW50KF9fbm9kZS0+X01fcGFyZW50LCBfX3Jvb3QpOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBpZiAo
X01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01fbm9k
ZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5fTV9s
ZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKICAK
ICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jvb3QoKSk7CiAg
Zm9yIChjb25zdF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytfX2l0
KSB7CiAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX2l0Ll9NX25vZGU7CiAgICBf
TGlua190eXBlIF9fTCA9IF9TX2xlZnQoX194KTsKICAgIF9MaW5rX3R5cGUgX19SID0gX1Nfcmln
aHQoX194KTsKCiAgICBpZiAoX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkKICAgICAg
aWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgfHwKICAgICAgICAg
IChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkpCiAgICAgICAgcmV0dXJu
IGZhbHNlOwoKICAgIGlmIChfX0wgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9TX2tl
eShfX0wpKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9fUiAmJiBfTV9rZXlfY29tcGFy
ZShfU19rZXkoX19SKSwgX1Nfa2V5KF9feCkpKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYg
KCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikK
ICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVf
bm9kZV9iYXNlOjpfU19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7CiAgaWYg
KF9NX3JpZ2h0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfTV9yb290
KCkpKQogICAgcmV0dXJuIGZhbHNlOwoKICByZXR1cm4gdHJ1ZTsKfQoKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBh
cmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9WYWx1ZSA+ICA+CnN0cnVj
dCByYl90cmVlIDogcHVibGljIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUsIF9D
b21wYXJlLCBfQWxsb2M+CnsKICB0eXBlZGVmIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9m
VmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICByYl90cmVlKGNvbnN0IF9Db21wYXJl
JiBfX2NvbXAgPSBfQ29tcGFyZSgpLAogICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7fQogIAogIH5y
Yl90cmVlKCkge30KfTsKCgoKCgogIAoKCgogCiAKIAojIDMxICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc2V0IiAy
IDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29t
cGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9L
ZXkgPiAgPgoKCgoKY2xhc3Mgc2V0IHsKcHVibGljOgogICAKCiAgdHlwZWRlZiBfS2V5ICAgICBr
ZXlfdHlwZTsKICB0eXBlZGVmIF9LZXkgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFy
ZSBrZXlfY29tcGFyZTsKICB0eXBlZGVmIF9Db21wYXJlIHZhbHVlX2NvbXBhcmU7CnByaXZhdGU6
CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAgICAgICAg
ICAgIF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBl
OwogIF9SZXBfdHlwZSBfTV90OyAgIApwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6
ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKCiAgIAoKICBzZXQoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2Nh
dG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAg
ICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
CiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmlu
c2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5p
bnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAxMDcgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
c2V0LmgiIDMKCgogIHNldChjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDog
X01fdChfX3guX01fdCkge30KICBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBvcGVyYXRvcj0o
Y29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgeyAKICAgIF9NX3QgPSBf
X3guX01fdDsgCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICAgCgogIGtleV9jb21wYXJlIGtleV9j
b21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2
YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigp
OyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfSAKICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1w
dHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKHNldDxfS2V5LF9Db21wYXJl
LF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgogICAKICBwYWlyPGl0ZXJh
dG9yLGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgCiAgICBwYWlyPHR5cGVu
YW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IsIGJvb2w+IF9fcCA9IF9NX3QuaW5zZXJ0X3VuaXF1ZShf
X3gpOyAKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNv
bmQpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFs
dWVfdHlwZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3Ig
X1JlcF9pdGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBfaXRlcmF0
b3ImKV9fcG9zaXRpb24sIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsKICB9CgoK
CgoKCgoKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgCiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2Uo
KF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24pOyAKICB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0
IGtleV90eXBlJiBfX3gpIHsgCiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOyAKICB9CiAgdm9p
ZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgCiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJh
c2UoKF9SZXBfaXRlcmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOyAKICB9
CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgogICAKCiAgaXRlcmF0b3IgZmluZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNp
emVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNv
dW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1
cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51
cHBlcl9ib3VuZChfX3gpOyAKICB9CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFu
Z2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFu
Z2UoX194KTsKICB9CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IHNldCYsIGNv
bnN0IHNldCYpOwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCA8PiAgKGNvbnN0IHNldCYsIGNvbnN0
IHNldCYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0Fs
bG9jPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHNldDxfS2V5LF9D
b21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKCgoKCgoKCiAKCgoKIAogCiAKIyAz
MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3NldCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfbXVsdGlzZXQu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwgCiAgICAgICAgICBj
bGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9LZXkgPiAgPgoKCgoKY2xhc3MgbXVsdGlzZXQgewpw
dWJsaWM6CiAgIAoKICB0eXBlZGVmIF9LZXkgICAgIGtleV90eXBlOwogIHR5cGVkZWYgX0tleSAg
ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYg
X0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90
eXBlLCB2YWx1ZV90eXBlLCAKICAgICAgICAgICAgICAgICAgX0lkZW50aXR5PHZhbHVlX3R5cGU+
LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAgCnB1
YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBwb2ludGVy
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50
ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSByZWZlcmVu
Y2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgCgog
IG11bHRpc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhw
bGljaXQgbXVsdGlzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f
dChfX2NvbXAsIF9fYSkge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
bXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQog
ICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0
X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29t
cCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiMgMTEzICIv
dXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX211bHRpc2V0LmgiIDMKCgogIG11bHRpc2V0KGNvbnN0IG11bHRpc2V0
PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CiAgbXVsdGlz
ZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aXNldDxfS2V5
LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgewogICAgX01fdCA9IF9feC5fTV90OyAKICAgIHJldHVy
biAqdGhpczsKICB9CgogICAKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVy
biBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7
IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25z
dCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9IAogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNv
bnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5z
aXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9z
aXplKCk7IH0KICB2b2lkIHN3YXAobXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gp
IHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKICAgCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZh
bHVlX3R5cGUmIF9feCkgeyAKICAgIHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3gpOwogIH0K
ICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYg
X194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVy
YXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF9lcXVhbCgoX1JlcF9pdGVyYXRvciYpX19wb3Np
dGlvbiwgX194KTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7
CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCgoKCgoKCgogIHZv
aWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyAKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVy
YXRvciYpX19wb3NpdGlvbik7IAogIH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUm
IF9feCkgeyAKICAgIHJldHVybiBfTV90LmVyYXNlKF9feCk7IAogIH0KICB2b2lkIGVyYXNlKGl0
ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgeyAKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9p
dGVyYXRvciYpX19maXJzdCwgKF9SZXBfaXRlcmF0b3ImKV9fbGFzdCk7IAogIH0KICB2b2lkIGNs
ZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCiAgIAoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgc2l6ZV90eXBlIGNv
dW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsg
fQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5k
KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5k
KF9feCk7IAogIH0KICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBr
ZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwog
IH0KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgbXVsdGlzZXQmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0Jik7
CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IDw+ICAoY29uc3QgbXVsdGlzZXQmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQmKTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg
X194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m
IF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11
bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICBtdWx0
aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCgoK
CgoKCgogCgoKCiAKIAogCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51
eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zZXQiIDIgMwoKCgoKIAogCiAKIyAx
OSAiTW92ZURCLmgiIDIKCgojIDEgInN0YXRlLmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL2lvbWFuaXAuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKZXh0ZXJuICJDKysiIHsKIAogCiAKCiAKIAog
CiAKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIHNtYW5pcDsgIAoKdGVtcGxhdGU8Y2xhc3MgVFA+
IGNsYXNzIHNhcHAgewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CnB1YmxpYzogCiAgICBzYXBw
KGlvcyYgKCpmKShpb3MmLCBUUCkpIDogX2YoZikge30KICAgICAKICAgIHNtYW5pcDxUUD4gb3Bl
cmF0b3IoKShUUCBhKSAKICAgICAgeyByZXR1cm4gc21hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRl
bXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBj
b25zdCBzbWFuaXA8VFA+JiBtKTsKdGVtcGxhdGU8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwoKdGVtcGxhdGUgPGNs
YXNzIFRQPiBjbGFzcyBzbWFuaXAgewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CiAgICBUUCBf
YTsKcHVibGljOgogICAgc21hbmlwKGlvcyYgKCpmKShpb3MmLCBUUCksIFRQIGEpIDogX2YoZiks
IF9hKGEpIHt9CiAgICAgCiAgICBmcmllbmQgCiAgICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4gPD4o
aXN0cmVhbSYgaSwgY29uc3Qgc21hbmlwPFRQPiYgbSk7CiAgICBmcmllbmQKICAgICAgb3N0cmVh
bSYgb3BlcmF0b3I8PCA8Pihvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKfTsKCgpf
X2V4dGVuc2lvbl9fIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBzbWFuaXA8aW50PjsKX19leHRlbnNp
b25fXyBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGlvczo6Zm10ZmxhZ3M+OwoKCnRlbXBs
YXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25z
dCBzbWFuaXA8VFA+JiBtKQp7ICgqbS5fZikoaSwgbS5fYSk7IHJldHVybiBpOyB9Cgp0ZW1wbGF0
ZTxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29uc3Qg
c21hbmlwPFRQPiYgbSkKeyAoKm0uX2YpKG8sIG0uX2EpOyByZXR1cm4gbzt9CgoKX19leHRlbnNp
b25fXyBleHRlcm4gCnRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0
IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBpc3RyZWFtJiBv
cGVyYXRvcj4+KGlzdHJlYW0mLCBjb25zdCBzbWFuaXA8aW9zOjpmbXRmbGFncz4mKTsKX19leHRl
bnNpb25fXyBleHRlcm4gCnRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNv
bnN0IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBvc3RyZWFt
JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBzbWFuaXA8aW9zOjpmbXRmbGFncz4mKTsKCgog
CiAKIAogCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBpbWFuaXA7IAoKdGVtcGxhdGU8Y2xhc3Mg
VFA+IGNsYXNzIGlhcHAgewogICAgaXN0cmVhbSYgKCpfZikoaXN0cmVhbSYsIFRQKTsKcHVibGlj
OiAKICAgIGlhcHAoaXN0cmVhbSYgKCpmKShpc3RyZWFtJixUUCkpIDogX2YoZikge30KICAgICAK
ICAgIGltYW5pcDxUUD4gb3BlcmF0b3IoKShUUCBhKQogICAgICAgeyByZXR1cm4gaW1hbmlwPFRQ
PihfZiwgYSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJh
dG9yPj4oaXN0cmVhbSYsIGNvbnN0IGltYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4g
Y2xhc3MgaW1hbmlwIHsKICAgIGlzdHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7CiAgICBUUCBf
YTsKcHVibGljOgogICAgaW1hbmlwKGlzdHJlYW0mICgqZikoaXN0cmVhbSYsIFRQKSwgVFAgYSkg
OiBfZihmKSwgX2EoYSkge30KICAgICAKICAgIGZyaWVuZAogICAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+IDw+KGlzdHJlYW0mIGksIGNvbnN0IGltYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25zdCBpbWFu
aXA8VFA+JiBtKQp7IHJldHVybiAoKm0uX2YpKCBpLCBtLl9hKTsgfQoKIAogCiAKIAp0ZW1wbGF0
ZTxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwOyAKCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBvYXBw
IHsKICAgIG9zdHJlYW0mICgqX2YpKG9zdHJlYW0mLCBUUCk7CnB1YmxpYzogCiAgICBvYXBwKG9z
dHJlYW0mICgqZikob3N0cmVhbSYsVFApKSA6IF9mKGYpIHt9CiAgICAgCiAgICBvbWFuaXA8VFA+
IG9wZXJhdG9yKCkoVFAgYSkKICAgICAgeyByZXR1cm4gb21hbmlwPFRQPihfZiwgYSk7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYs
IGNvbnN0IG9tYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwIHsK
ICAgIG9zdHJlYW0mICgqX2YpKG9zdHJlYW0mLCBUUCk7CiAgICBUUCBfYTsKcHVibGljOgogICAg
b21hbmlwKG9zdHJlYW0mICgqZikob3N0cmVhbSYsIFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkg
e30KICAgICAKICAgIGZyaWVuZAogICAgICBvc3RyZWFtJiBvcGVyYXRvcjw8IDw+KG9zdHJlYW0m
IG8sIGNvbnN0IG9tYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFRQPgppbmxpbmUg
b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvLCBjb25zdCBvbWFuaXA8VFA+JiBtKQp7IHJl
dHVybiAoKm0uX2YpKG8sIG0uX2EpOyB9CgogCiAKIAoKIAogCiAKIAoKCgoKCmV4dGVybiBpb3Mm
IF9faW9tYW5pcF9zZXRiYXNlICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGlu
dCA+ICAgc2V0YmFzZSAgKCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19p
b21hbmlwX3NldGJhc2UgLCBuKTsgfSAKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3NldGZpbGwgIChp
b3MmLCAgIGludCApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW50ID4gICBzZXRmaWxsICAoICBpbnQg
IG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGludCA+IChfX2lvbWFuaXBfc2V0ZmlsbCAsIG4pOyB9
IApleHRlcm4gaW9zJiBfX2lvbWFuaXBfc2V0cHJlY2lzaW9uICAoaW9zJiwgICBpbnQgKTsgaW5s
aW5lICAgc21hbmlwIDwgIGludCA+ICAgc2V0cHJlY2lzaW9uICAoICBpbnQgIG4pIHsgcmV0dXJu
ICAgc21hbmlwIDwgIGludCA+IChfX2lvbWFuaXBfc2V0cHJlY2lzaW9uICwgbik7IH0gCmV4dGVy
biBpb3MmIF9faW9tYW5pcF9zZXR3ICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwg
IGludCA+ICAgc2V0dyAgKCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19p
b21hbmlwX3NldHcgLCBuKTsgfSAKCmV4dGVybiBpb3MmIF9faW9tYW5pcF9yZXNldGlvc2ZsYWdz
ICAoaW9zJiwgICBpb3M6OmZtdGZsYWdzICk7IGlubGluZSAgIHNtYW5pcCA8ICBpb3M6OmZtdGZs
YWdzID4gICByZXNldGlvc2ZsYWdzICAoICBpb3M6OmZtdGZsYWdzICBuKSB7IHJldHVybiAgIHNt
YW5pcCA8ICBpb3M6OmZtdGZsYWdzID4gKF9faW9tYW5pcF9yZXNldGlvc2ZsYWdzICwgbik7IH0g
CmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXRpb3NmbGFncyAgKGlvcyYsICAgaW9zOjpmbXRmbGFn
cyApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW9zOjpmbXRmbGFncyA+ICAgc2V0aW9zZmxhZ3MgICgg
IGlvczo6Zm10ZmxhZ3MgIG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGlvczo6Zm10ZmxhZ3MgPiAo
X19pb21hbmlwX3NldGlvc2ZsYWdzICwgbik7IH0gCn0gIAoKCiMgMjggInN0YXRlLmgiIDIKCgpj
bGFzcyBQbGFuR3JpZENlbGw7ICAgCmNsYXNzIEdyaWRTdGF0ZURpbWVuc2lvbnM7CgoKY2xhc3Mg
U3RhdGUKewogcHVibGljOgogIHR5cGVkZWYgc2hvcnQgaHR5cGU7ICAKICB0eXBlZGVmIGNoYXIg
IHp0eXBlOyAgCiAgdHlwZWRlZiBzaG9ydCBhdHlwZTsgIAoKIHB1YmxpYzoKICAgCiAgIAogIGh0
eXBlIHg7CiAgaHR5cGUgeTsKICB6dHlwZSB6OwogIGF0eXBlIHBzaTsKICBQbGFuR3JpZENlbGwg
ICpwOyAgIAoKICBTdGF0ZSgpICAgICAgICAgICAgICAgICAgICAgOiB6KDApLCBwc2koMCksIHAo
MCkge30KICBTdGF0ZShodHlwZSB4XywKICAgICAgICBodHlwZSB5XykgICAgICAgICAgICAgOiB4
KHhfKSwgeSh5XyksIHooMCksIHBzaSgwKSwgcCgwKSB7fQogIFN0YXRlKGh0eXBlIHhfLAogICAg
ICAgIGh0eXBlIHlfLAogICAgICAgIHp0eXBlIHpfLAogICAgICAgIGF0eXBlIHBzaV8pICAgICAg
ICAgICA6IHgoeF8pLCB5KHlfKSwgeih6XyksIHBzaShwc2lfKSwgcCgwKSB7fQogIFN0YXRlJiBh
c3NpZ24gICAgIChodHlwZSB4XywgaHR5cGUgeV8pICAgICAgICAgICAgIHsgcmV0dXJuIGFzc2ln
bih4Xyx5XywgMCwgMCk7IH0KICBTdGF0ZSYgYXNzaWduWFlaICAoaHR5cGUgeF8sIGh0eXBlIHlf
LCB6dHlwZSB6XykgICB7IHJldHVybiBhc3NpZ24oeF8seV8sel8sIDApOyB9CiAgU3RhdGUmIGFz
c2lnblhZWWF3KGh0eXBlIHhfLCBodHlwZSB5XywgYXR5cGUgcHNpXykgeyByZXR1cm4gYXNzaWdu
KHhfLHlfLCAwLCBwc2lfKTsgfQogIFN0YXRlJiBhc3NpZ24gICAgIChodHlwZSB4XywgaHR5cGUg
eV8sIHp0eXBlIHpfLCBhdHlwZSBwc2lfKTsKICBTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IFN0YXRl
ICZzKTsKCiAgYm9vbCBpc0luUmFuZ2UoY29uc3QgR3JpZFN0YXRlRGltZW5zaW9ucyAmZCkgY29u
c3Q7CiAgdm9pZCBjbGVhclB0cigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBwPTA7IH0KfTsKCmNsYXNzIEdyaWRTdGF0ZURpbWVuc2lvbnMgewogcHVibGljOgogIHNob3J0
IHg7CiAgc2hvcnQgeTsKICBzaG9ydCB6OwogIHNob3J0IHBzaTsKCiAgR3JpZFN0YXRlRGltZW5z
aW9ucygpICAgICAgICAgICAgICAgIDogeCgwKSwgeSgwKSwgeigwKSwgcHNpKDApIHt9CiAgR3Jp
ZFN0YXRlRGltZW5zaW9ucyhzaG9ydCB4XywKICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHlf
LAogICAgICAgICAgICAgICAgICAgICAgc2hvcnQgel8sCiAgICAgICAgICAgICAgICAgICAgICBz
aG9ydCBwc2lfKSAgICAgIDogeCh4XyksIHkoeV8pLCB6KHpfKSwgcHNpKHBzaV8pIHt9CgogIHZv
aWQgYXNzaWduWFkgIChzaG9ydCB4Xywgc2hvcnQgeV8pICAgICAgICAgICAgICAgICAgICAgICB7
IHg9eF87IHk9eV87IH0KICB2b2lkIGFzc2lnblpZYXcoc2hvcnQgel8sIHNob3J0IHlhd18pICAg
ICAgICAgICAgICAgICAgICAgeyB6PXpfOyBwc2k9eWF3XzsgfQogIHZvaWQgYXNzaWduICAgIChz
aG9ydCB4Xywgc2hvcnQgeV8sIHNob3J0IHpfLCBzaG9ydCBwc2lfKSB7IHg9eF87IHk9eV87IHo9
el87IHBzaT1wc2lfOyB9CgogIGxvbmcgbnVtU3RhdGVzKCkgY29uc3QgeyByZXR1cm4geCp5Knoq
cHNpOyB9Cn07Cgpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBTdGF0ZSYg
cyk7CgoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGF0ZSAmYSwgY29uc3QgU3RhdGUg
JmIpCnsKICByZXR1cm4oYS54ID09IGIueCAmJiBhLnkgPT0gYi55ICYmIGEueiA9PSBiLnogJiYg
YS5wc2kgPT0gYi5wc2kpOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0YXRlICZh
LCBjb25zdCBTdGF0ZSAmYikKewogIHJldHVybighKGE9PWIpKTsgCn0KCgogCiAKIApib29sIG9w
ZXJhdG9yPChjb25zdCBTdGF0ZSAmYSwgY29uc3QgU3RhdGUgJmIpOwoKDAogCiAKCmlubGluZSBT
dGF0ZSYgU3RhdGU6OmFzc2lnbihTdGF0ZTo6aHR5cGUgeF8sIFN0YXRlOjpodHlwZSB5XywgU3Rh
dGU6Onp0eXBlIHpfLCBTdGF0ZTo6YXR5cGUgcHNpXykKewogIHggID14XzsKICB5ICA9eV87CiAg
eiAgPXpfOwogIHBzaT1wc2lfOwogIHAgID0wOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFN0
YXRlJiBTdGF0ZTo6b3BlcmF0b3I9KGNvbnN0IFN0YXRlICZzKQp7CiAgeSA9IHMueTsKICB4ID0g
cy54OwogIHogPSBzLno7CiAgcHNpID0gcy5wc2k7CiAgcCA9IHMucDsKICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSBib29sIFN0YXRlOjppc0luUmFuZ2UoY29uc3QgR3JpZFN0YXRlRGltZW5zaW9u
cyAmZCkgY29uc3QKewogIHJldHVybiAoMDw9eCAgICYmIHg8ZC54ICYmCiAgICAgICAgICAwPD15
ICAgJiYgeTxkLnkgJiYKICAgICAgICAgIDA8PXogICAmJiB6PGQueiAmJgogICAgICAgICAgMDw9
cHNpICYmIHBzaTxkLnBzaSk7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBTdGF0ZSAm
YSwgY29uc3QgU3RhdGUgJmIpCnsKICBpZiAoYS54ICE9IGIueCkgICAgICAgcmV0dXJuIChhLngg
PCBiLngpOwogIGVsc2UgaWYgKGEueSAhPSBiLnkpICByZXR1cm4gKGEueSA8IGIueSk7CiAgZWxz
ZSBpZiAoYS56ICE9IGIueikgIHJldHVybiAoYS56IDwgYi56KTsKICByZXR1cm4gKGEucHNpIDwg
Yi5wc2kpOwp9ICAgICAgCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyAyMSAiTW92ZURCLmgiIDIKCiMgMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91
c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL0FuZ2xlLmgi
IDEKIAogCiAKIAoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY21hdGgiIDEgMwogCiAKCgoKCgoKCiNw
cmFnbWEgaW50ZXJmYWNlICJjbWF0aCIKCgpleHRlcm4gIkMrKyIgewojIDM4ICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvY21hdGgiIDMKCgppbmxpbmUgZmxvYXQgIGFicyAoZmxvYXQgIHgpIHsgcmV0dXJuIGZhYnMg
KHgpOyB9CgppbmxpbmUgZG91YmxlIGFicyAoZG91YmxlIHgpIHsgcmV0dXJuIGZhYnMgKHgpOyB9
CgoKIyA3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL2NtYXRoIiAzCgppbmxpbmUgbG9uZyBkb3VibGUgYWJzIChs
b25nIGRvdWJsZSB4KSB7IHJldHVybiBmYWJzICh4KTsgfQoKfSAgCgoKIyA5ICIvdS9scGFnZS93
b3JrYXJlYS9yb290L3Vzci9zaW1sYWIvcmVsZWFzZS9hdXRvbm9tb3VzU3lzdGVtczEuMS4xL2lu
Y2x1ZGUvQW5nbGUuaCIgMgoKCiMgMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91c3Ivc2ltbGFi
L3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL0NvbnZlcnRVbml0cy5oIiAx
CiAKIAogCiAKCgoKCgoKCgoKCmNsYXNzIENvbnZlcnRVbml0cyB7CiAgIAogcHVibGljOgoKICAg
CiAgc3RhdGljIGRvdWJsZSBkZWdyZWVzVG9SYWRpYW5zKGRvdWJsZSBkKTsKICBzdGF0aWMgZG91
YmxlIHJhZGlhbnNUb0RlZ3JlZXMoZG91YmxlIHIpOwogIAogICAKICBzdGF0aWMgZG91YmxlIG1l
dGVyc1RvRmVldChkb3VibGUgbSk7CiAgc3RhdGljIGRvdWJsZSBmZWV0VG9NZXRlcnMoZG91Ymxl
IGZ0KTsKCiAgc3RhdGljIGRvdWJsZSBtZXRlcnNUb0luY2hlcyhkb3VibGUgbSk7CiAgc3RhdGlj
IGRvdWJsZSBpbmNoZXNUb01ldGVycyhkb3VibGUgaW4pOwoKICBzdGF0aWMgZG91YmxlIGZlZXRU
b0luY2hlcyhkb3VibGUgZnQpOwogIHN0YXRpYyBkb3VibGUgaW5jaGVzVG9GZWV0KGRvdWJsZSBp
bik7Cgp9OwoKDAogCiAKCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjpkZWdyZWVzVG9SYWRp
YW5zKGRvdWJsZSBkKSB7CiAgcmV0dXJuIGQgKiAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2ICAvIDE4
MC47IH0KCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjpyYWRpYW5zVG9EZWdyZWVzKGRvdWJs
ZSByKSB7CiAgcmV0dXJuIHIgKiAxODAuIC8gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NiA7IH0KCmlu
bGluZSBkb3VibGUgQ29udmVydFVuaXRzOjptZXRlcnNUb0luY2hlcyhkb3VibGUgbSkgewogIHJl
dHVybiBtIC8gLjAyNTQ7IH0KCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjppbmNoZXNUb01l
dGVycyhkb3VibGUgaW4pIHsKICByZXR1cm4gaW4gKiAuMDI1NDsgfQoKaW5saW5lIGRvdWJsZSBD
b252ZXJ0VW5pdHM6Om1ldGVyc1RvRmVldChkb3VibGUgbSkgewogIHJldHVybiBtZXRlcnNUb0lu
Y2hlcyhtKSAvIDEyLiA7IH0KCmlubGluZSBkb3VibGUgQ29udmVydFVuaXRzOjpmZWV0VG9NZXRl
cnMoZG91YmxlIGZ0KSB7CiAgcmV0dXJuIGluY2hlc1RvTWV0ZXJzKDEyLiAqIGZ0KTsgfQoKaW5s
aW5lIGRvdWJsZSBDb252ZXJ0VW5pdHM6OmZlZXRUb0luY2hlcyhkb3VibGUgdikgewogIHJldHVy
biAxMip2OyB9CgppbmxpbmUgZG91YmxlIENvbnZlcnRVbml0czo6aW5jaGVzVG9GZWV0KGRvdWJs
ZSB2KSB7CiAgcmV0dXJuIHYvMTIuOyB9CgoKIyAxMSAiL3UvbHBhZ2Uvd29ya2FyZWEvcm9vdC91
c3Ivc2ltbGFiL3JlbGVhc2UvYXV0b25vbW91c1N5c3RlbXMxLjEuMS9pbmNsdWRlL0FuZ2xlLmgi
IDIKCgpjbGFzcyBBbmdsZSB7CiBwcml2YXRlOgogIGRvdWJsZSBkX3ZhbHVlOwogcHJvdGVjdGVk
OgogIHN0YXRpYyBkb3VibGUgaW50b1JhbmdlT25lU3RlcCAoZG91YmxlIGEpOwogIHN0YXRpYyBk
b3VibGUgaW50b1JhbmdlKGRvdWJsZSBhKSB7IAogICAgcmV0dXJuIGludG9SYW5nZU9uZVN0ZXAo
Zm1vZChhLCAyKiAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2ICkpOyAKICB9CiAgY2xhc3MgUHJpdmF0
ZSB7fTsKICBBbmdsZShQcml2YXRlIHAsIGRvdWJsZSByYWQpIDogZF92YWx1ZShyYWQpIHt9IAoK
IHB1YmxpYzoKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCgogIGVudW0gVW5pdHMgeyBSQURJQU5TLCBERUdSRUVTIH07CiAgc3RhdGljIGNvbnN0IEFu
Z2xlIHplcm87CgogIEFuZ2xlKCk7ICAKICBBbmdsZShVbml0cyB1LCBkb3VibGUgdmFsKTsKICBB
bmdsZShjb25zdCBBbmdsZSAmZnJvbSk7CiAgZXhwbGljaXQgQW5nbGUoY29uc3QgVmVjdG9yMiAm
dik7CgogIEFuZ2xlJiBvcGVyYXRvcj0oY29uc3QgQW5nbGUgJmZyb20pOwogIHZvaWQgc2V0UmFk
aWFucyhkb3VibGUgcmFkKTsKICB2b2lkIHNldERlZ3JlZXMoZG91YmxlIGRlZyk7CiAgdm9pZCBz
ZXQoVW5pdHMgdSwgZG91YmxlIHZhbCk7CgogIGRvdWJsZSBpblJhZGlhbnMoKSBjb25zdDsKICBk
b3VibGUgaW5EZWdyZWVzKCkgY29uc3Q7CiAgZG91YmxlIGluVW5pdHMoVW5pdHMgdSkgY29uc3Q7
CgogICAKICBkb3VibGUgcG9zTmVnKFVuaXRzIHUpICAgY29uc3Q7ICAgCiAgZG91YmxlIHBvc05l
Z1JhZGlhbnMoKSAgIGNvbnN0OwogIGRvdWJsZSBwb3NpdGl2ZShVbml0cyB1KSBjb25zdDsgICAK
ICBkb3VibGUgcG9zaXRpdmVSYWRpYW5zKCkgY29uc3Q7CgogIFZlY3RvcjIgdW5pdFZlY3Rvcigp
ICAgICBjb25zdDsKCiAgQW5nbGUgIGFicygpICAgICAgICAgICAgICAgY29uc3Q7ICAKICBBbmds
ZSAgb3BlcmF0b3ItKCkgICAgICAgICBjb25zdDsKICBBbmdsZSAgb3BlcmF0b3IrKEFuZ2xlIGIp
ICBjb25zdDsKICBBbmdsZSAgb3BlcmF0b3ItKEFuZ2xlIGIpICBjb25zdDsKICBBbmdsZSAgb3Bl
cmF0b3IqKGRvdWJsZSBiKSBjb25zdDsKICBBbmdsZSAgb3BlcmF0b3IvKGRvdWJsZSBiKSBjb25z
dDsKCiAgQW5nbGUgJm9wZXJhdG9yKz0oQW5nbGUgYik7CiAgQW5nbGUgJm9wZXJhdG9yLT0oQW5n
bGUgYik7CiAgQW5nbGUgJm9wZXJhdG9yKj0oZG91YmxlIGIpOwogIEFuZ2xlICZvcGVyYXRvci89
KGRvdWJsZSBiKTsKCiAgYm9vbCAgICAgICBvcGVyYXRvcj09KEFuZ2xlIGIpIGNvbnN0OwogIGJv
b2wgICAgICAgb3BlcmF0b3IhPShBbmdsZSBiKSBjb25zdDsKCiAgdm9pZCB0b1N0cmVhbShzdGQ6
Om9zdHJlYW0gJm9zLCBVbml0cyB1LCBib29sIGZsYWdTaG93VW5pdHM9dHJ1ZSkgY29uc3Q7CiAg
IAp9OwoKY29uc3QgY2hhciAqdG9TdHJpbmcoQW5nbGU6OlVuaXRzIHUsIGJvb2wgbG9uZ2Zvcm09
ZmFsc2UpOwogCiAKIAogCgpkb3VibGUgc2luKEFuZ2xlIGEpOwpkb3VibGUgY29zKEFuZ2xlIGEp
Owpkb3VibGUgdGFuKEFuZ2xlIGEpOwoKQW5nbGUgb3BlcmF0b3IqKGRvdWJsZSBhLCBBbmdsZSBi
KTsKCgogCiAKIAogCiAKY2xhc3MgQW5nbGVSYWRpYW5zIDogcHVibGljIEFuZ2xlIHsKIHB1Ymxp
YzoKICBBbmdsZVJhZGlhbnMoZG91YmxlIGEpICAgeyBzZXRSYWRpYW5zKGEpOyB9ICAgCiAgZXhw
bGljaXQgQW5nbGVSYWRpYW5zKGNvbnN0IEFuZ2xlICZhKSA6IEFuZ2xlKGEpIHt9Cn07CgpjbGFz
cyBBbmdsZURlZ3JlZXMgOiBwdWJsaWMgQW5nbGUgewogcHVibGljOgogIEFuZ2xlRGVncmVlcyhk
b3VibGUgYSkgICB7IHNldERlZ3JlZXMoYSk7IH0gICAKICBleHBsaWNpdCBBbmdsZURlZ3JlZXMo
Y29uc3QgQW5nbGUgJmEpIDogQW5nbGUoYSkge30KfTsKCmJvb2wgZXF1YWxzV2l0aGluKEFuZ2xl
IGExLCBBbmdsZSBhMiwgQW5nbGUgdG9sKTsgIAogCiAKIAogCiAKCnN0ZDo6b3N0cmVhbSAmb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBBbmdsZVJhZGlhbnMgYSk7CnN0ZDo6b3N0cmVhbSAm
b3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBBbmdsZURlZ3JlZXMgYSk7CgoMCiAKIAoKaW5s
aW5lIEFuZ2xlOjpBbmdsZSgpIAogIDogZF92YWx1ZSgwLikge30gIAoKaW5saW5lIEFuZ2xlOjpB
bmdsZShVbml0cyB1LCBkb3VibGUgdmFsKSB7CiAgc2V0KHUsIHZhbCk7IH0KCmlubGluZSBBbmds
ZTo6QW5nbGUoY29uc3QgQW5nbGUgJmZyb20pCiAgOiBkX3ZhbHVlKGZyb20uZF92YWx1ZSkge30K
CmlubGluZSBBbmdsZTo6QW5nbGUoY29uc3QgVmVjdG9yMiAmdikKICA6IGRfdmFsdWUoYXRhbjIo
di55LHYueCkpIHt9CgppbmxpbmUgQW5nbGUmIEFuZ2xlOjpvcGVyYXRvcj0oY29uc3QgQW5nbGUg
JmZyb20pIHsKICBkX3ZhbHVlID0gZnJvbS5kX3ZhbHVlOyAKICByZXR1cm4gKnRoaXM7IH0KCmlu
bGluZSBkb3VibGUgQW5nbGU6OmluUmFkaWFucygpIGNvbnN0IHsKICByZXR1cm4gZF92YWx1ZTsg
fQoKaW5saW5lIGRvdWJsZSBBbmdsZTo6aW5EZWdyZWVzKCkgY29uc3QgewogIHJldHVybiBDb252
ZXJ0VW5pdHM6OnJhZGlhbnNUb0RlZ3JlZXMoZF92YWx1ZSk7IH0KCmlubGluZSB2b2lkIEFuZ2xl
OjpzZXRSYWRpYW5zKGRvdWJsZSBhKSB7CiAgZF92YWx1ZSA9IGludG9SYW5nZShhKTsgfQoKaW5s
aW5lIHZvaWQgQW5nbGU6OnNldERlZ3JlZXMoZG91YmxlIGEpIHsKICBkX3ZhbHVlID0gaW50b1Jh
bmdlKENvbnZlcnRVbml0czo6ZGVncmVlc1RvUmFkaWFucyhhKSk7IH0KCmlubGluZSBkb3VibGUg
QW5nbGU6OnBvc05lZyhVbml0cyB1KSBjb25zdCB7CiAgcmV0dXJuIGluVW5pdHModSk7IH0KCmlu
bGluZSBkb3VibGUgQW5nbGU6OnBvc05lZ1JhZGlhbnMoKSBjb25zdCB7CiAgcmV0dXJuIGRfdmFs
dWU7IH0KCmlubGluZSBkb3VibGUgQW5nbGU6OnBvc2l0aXZlUmFkaWFucygpIGNvbnN0IHsKICBy
ZXR1cm4gKChkX3ZhbHVlID49IDApID8gZF92YWx1ZSA6IGRfdmFsdWUrMiogMy4xNDE1OTI2NTM1
ODk3OTMyMzg0NiApOyB9CgppbmxpbmUgVmVjdG9yMiBBbmdsZTo6dW5pdFZlY3RvcigpIGNvbnN0
IHsKICByZXR1cm4gVmVjdG9yMihjb3MoZF92YWx1ZSksIHNpbihkX3ZhbHVlKSk7IH0KCmlubGlu
ZSBBbmdsZSBBbmdsZTo6YWJzKCkgY29uc3QgeyByZXR1cm4gQW5nbGUoUHJpdmF0ZSgpLCBmYWJz
KGRfdmFsdWUpKTsgfQppbmxpbmUgZG91YmxlICAgIHNpbihBbmdsZSBhKSB7IHJldHVybiA6OnNp
bihhLmluUmFkaWFucygpKTsgfQppbmxpbmUgZG91YmxlICAgIGNvcyhBbmdsZSBhKSB7IHJldHVy
biA6OmNvcyhhLmluUmFkaWFucygpKTsgfQppbmxpbmUgZG91YmxlICAgIHRhbihBbmdsZSBhKSB7
IHJldHVybiA6OnRhbihhLmluUmFkaWFucygpKTsgfQoKaW5saW5lIEFuZ2xlICBBbmdsZTo6b3Bl
cmF0b3ItKCkgY29uc3QgewogIHJldHVybiBBbmdsZShQcml2YXRlKCksIC1kX3ZhbHVlKTsgfQoK
aW5saW5lIEFuZ2xlICBBbmdsZTo6b3BlcmF0b3IrKEFuZ2xlIGIpICBjb25zdCB7CiAgcmV0dXJu
IEFuZ2xlKFByaXZhdGUoKSwgaW50b1JhbmdlT25lU3RlcChkX3ZhbHVlICsgYi5kX3ZhbHVlKSk7
IH0KCmlubGluZSBBbmdsZSAgQW5nbGU6Om9wZXJhdG9yLShBbmdsZSBiKSAgY29uc3QgewogIHJl
dHVybiBBbmdsZShQcml2YXRlKCksIGludG9SYW5nZU9uZVN0ZXAoZF92YWx1ZSAtIGIuZF92YWx1
ZSkpOyB9CgppbmxpbmUgQW5nbGUgIEFuZ2xlOjpvcGVyYXRvciooZG91YmxlIGIpICAgICAgICAg
ICAgY29uc3QgewogIHJldHVybiBBbmdsZShQcml2YXRlKCksIGludG9SYW5nZShkX3ZhbHVlICog
YikpOyB9CgppbmxpbmUgQW5nbGUgIEFuZ2xlOjpvcGVyYXRvci8oZG91YmxlIGIpICAgICAgICAg
ICAgY29uc3QgewogIHJldHVybiBBbmdsZShQcml2YXRlKCksIGludG9SYW5nZShkX3ZhbHVlIC8g
YikpOyB9CgppbmxpbmUgQW5nbGUgJkFuZ2xlOjpvcGVyYXRvcis9KEFuZ2xlIGIpIHsKICAqdGhp
cyA9ICgqdGhpcyArIGIpOwogIHJldHVybiAqdGhpczsgfQoKaW5saW5lIEFuZ2xlICZBbmdsZTo6
b3BlcmF0b3ItPShBbmdsZSBiKSB7CiAgKnRoaXMgPSAoKnRoaXMgLSBiKTsKICByZXR1cm4gKnRo
aXM7IH0KCmlubGluZSBBbmdsZSAmQW5nbGU6Om9wZXJhdG9yKj0oZG91YmxlIGIpIHsKICAqdGhp
cyA9ICgqdGhpcyAqIGIpOwogIHJldHVybiAqdGhpczsgfQoKaW5saW5lIEFuZ2xlICZBbmdsZTo6
b3BlcmF0b3IvPShkb3VibGUgYikgewogICp0aGlzID0gKCp0aGlzIC8gYik7CiAgcmV0dXJuICp0
aGlzOyB9CgppbmxpbmUgYm9vbCBBbmdsZTo6b3BlcmF0b3I9PShBbmdsZSBiKSBjb25zdCB7IAog
IHJldHVybiBkX3ZhbHVlID09IGIuZF92YWx1ZTsgfQoKaW5saW5lIGJvb2wgQW5nbGU6Om9wZXJh
dG9yIT0oQW5nbGUgYikgY29uc3QgewogIHJldHVybiBkX3ZhbHVlICE9IGIuZF92YWx1ZTsgfQoK
aW5saW5lIEFuZ2xlIG9wZXJhdG9yKiAoZG91YmxlIGEsIEFuZ2xlIGIpIHsKICByZXR1cm4gYiph
OyB9CgppbmxpbmUgc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIEFu
Z2xlUmFkaWFucyBhKSB7CiAgYS50b1N0cmVhbShvcywgQW5nbGU6OlJBRElBTlMpOwogIHJldHVy
biBvczsgfQoKaW5saW5lIHN0ZDo6b3N0cmVhbSAmb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9z
LCBBbmdsZURlZ3JlZXMgYSkgewogIGEudG9TdHJlYW0ob3MsIEFuZ2xlOjpERUdSRUVTKTsKICBy
ZXR1cm4gb3M7IH0KCgojIDIyICJNb3ZlREIuaCIgMgoKCmNsYXNzIE1vdmVSZWMgCnsKcHVibGlj
OgogIHN0cnVjdCBUcmFuc2xhdGlvbiB7CiAgICBTdGF0ZTo6aHR5cGUgZHg7CiAgICBTdGF0ZTo6
aHR5cGUgZHk7CiAgICBUcmFuc2xhdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7fQogICAgVHJhbnNsYXRpb24oU3RhdGU6Omh0eXBlIGR4XywgU3RhdGU6Omh0eXBlIGR5
XykgOiBkeChkeF8pLCBkeShkeV8pIHt9CiAgfTsKCiAgTW92ZVJlYygpIHt9OwogIFN0YXRlOjp6
dHlwZSBzdGFydF96OwogIFN0YXRlOjp6dHlwZSBlbmRfejsKICBTdGF0ZTo6YXR5cGUgc3RhcnRf
cHNpOwogIFN0YXRlOjphdHlwZSBlbmRfcHNpOwogIFN0YXRlOjpodHlwZSBkeDsKICBTdGF0ZTo6
aHR5cGUgZHk7CiAgZmxvYXQgICAgICAgIGNvc3Q7CgogIHN0ZDo6dmVjdG9yPFRyYW5zbGF0aW9u
PiB0cmFuc2l0UG9pbnRzOyAgCiAgIAogICAKICAgCiAgIAoKICAgCiAgYm9vbCBoYXNIb3JpelRy
YW5zbGF0aW9uKCkgY29uc3Q7CiAgYm9vbCBoYXNWZXJ0aWNhbFRyYW5zbGF0aW9uKCkgY29uc3Q7
CiAgYm9vbCBoYXNUcmFuc2xhdGlvbigpICAgICAgY29uc3Q7CiAgYm9vbCBoYXNSb3RhdGlvbigp
ICAgICAgICAgY29uc3Q7CiAgYm9vbCBpc1B1cmVUcmFuc2xhdGlvbigpICAgY29uc3Q7CiAgYm9v
bCBpc1B1cmVIb3JpelRyYW5zbGF0aW9uKCkgY29uc3Q7CiAgYm9vbCBpc1B1cmVWZXJ0VHJhbnNs
YXRpb24oKSBjb25zdDsKICBib29sIGlzUHVyZVJvdGF0aW9uKCkgICAgICBjb25zdDsKfTsKCnN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBNb3ZlUmVjOjpU
cmFuc2xhdGlvbiAmdCk7CnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9z
LCBjb25zdCBNb3ZlUmVjICZtKTsKCgpjbGFzcyBNb3ZlREIKewogcHVibGljOgogIE1vdmVEQigp
OwogIHZpcnR1YWwgfk1vdmVEQigpOwoKICAgCiAgc2l6ZV90ICAgICAgICAgICAgICAgbnVtUHNp
KCkgY29uc3QgICAgICAgICAgICAgICAgICB7IHJldHVybiBfbnVtUHNpOyB9CiAgdmlydHVhbCBT
dGF0ZTo6YXR5cGUgcHNpQW5nbGVUb0luZGV4KGNvbnN0IEFuZ2xlICZhKSBjb25zdD0wOwogIHZp
cnR1YWwgQW5nbGUgICAgICAgIHBzaUluZGV4VG9BbmdsZShTdGF0ZTo6YXR5cGUgYSkgY29uc3Q9
MDsKCiAgIAogIHNpemVfdCAgICAgICAgICAgICAgIG51bVooKSBjb25zdCAgICAgICAgICAgICAg
ICAgICAgeyByZXR1cm4gX251bVo7IH0KICB2aXJ0dWFsIFN0YXRlOjp6dHlwZSB6VmFsdWVUb0lu
ZGV4KGRvdWJsZSB6KSAgICAgICAgIGNvbnN0PTA7CiAgdmlydHVhbCBkb3VibGUgICAgICAgeklu
ZGV4VG9WYWx1ZShTdGF0ZTo6enR5cGUgaSkgICBjb25zdD0wOwoKIHByb3RlY3RlZDoKICAgCiAg
IAogICAKICAgCiAgIAogIHN0cnVjdCBDb25maWd1cmF0aW9uUmVjIHsKICAgIHZlY3RvcjxNb3Zl
UmVjPiAgIHJldjsgIAogICAgdmVjdG9yPE1vdmVSZWMgKj4gZndkOyAgCiAgfTsKICB2ZWN0b3I8
IHZlY3RvcjxDb25maWd1cmF0aW9uUmVjPiA+IF9tb3ZlczsgIAoKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgc3RkOjpzZXQ8U3RhdGU+IF94eU9ic3RhY2xlTGlzdDsKCiAgZnJpZW5kIGNs
YXNzIEZvcndhcmROZWlnaGJvcmhvb2Q7CiAgZnJpZW5kIGNsYXNzIFJldmVyc2VOZWlnaGJvcmhv
b2Q7CgogcHVibGljOgogIGNvbnN0IHN0ZDo6c2V0PFN0YXRlPiAmZ2V0WFlPYnN0YWNsZUxpc3Qo
KSBjb25zdCB7IHJldHVybiBfeHlPYnN0YWNsZUxpc3Q7IH0KCiBwcm90ZWN0ZWQ6CiAgdmlydHVh
bCB2b2lkIGNsZWFyKCk7CiAgIAogICAKICAgCiAgIAoKICAgCiAgdm9pZCBzZXREaW1zKHNpemVf
dCBudW1aXywgc2l6ZV90IG51bVBzaV8sCiAgICAgICAgICAgICAgIHNpemVfdCByZXNlcnZlTW92
ZXNQZXJDb25maWc9MCk7CiAgIAogICAKICAgCiAgIAogICAKCiAgdm9pZCBhZGRNb3ZlKGNvbnN0
IE1vdmVSZWMgJm1vdmUpOwogICAKCiAgdm9pZCBjb21wdXRlRndkTW92ZXMoKTsKICAgCgogIHN0
cnVjdCBNb3ZlU3RhdHMgewogICAgc2l6ZV90IGN0TW92ZXM7CiAgICBzaXplX3QgY3RQdXJlUm90
OwogICAgc2l6ZV90IGN0UHVyZVRyYW5zOwogICAgc2l6ZV90IGN0UHVyZUhUcmFuczsKICAgIHNp
emVfdCBjdFB1cmVWVHJhbnM7CiAgICB2ZWN0b3I8c2l6ZV90PiBjdE1vdmVzT25aOwogICAgaW50
ICAgIG1heFhEaXN0YW5jZTsKICB9OwogIHZvaWQgY29tcHV0ZU1vdmVTdGF0cyhNb3ZlU3RhdHMg
JnN0YXRzKTsKICB2b2lkIHByaW50U3RhdHMoY29uc3QgTW92ZVN0YXRzICZzdGF0cywgc3RkOjpv
c3RyZWFtICZvcyk7CiAgdm9pZCBjb21wdXRlQW5kUHJpbnRTdGF0cyhzdGQ6Om9zdHJlYW0gJm9z
KTsKCiBwcml2YXRlOgogIHNpemVfdCBfbnVtWjsKICBzaXplX3QgX251bVBzaTsKfTsgIAoKCgwK
IAogCmlubGluZQpib29sIE1vdmVSZWM6Omhhc0hvcml6VHJhbnNsYXRpb24oKSBjb25zdCB7CiAg
cmV0dXJuIChkeCB8fCBkeSk7Cn0KaW5saW5lCmJvb2wgTW92ZVJlYzo6aGFzVmVydGljYWxUcmFu
c2xhdGlvbigpIGNvbnN0IHsKICByZXR1cm4gKGVuZF96ICE9IHN0YXJ0X3opOwp9CmlubGluZQpi
b29sIE1vdmVSZWM6Omhhc1RyYW5zbGF0aW9uKCkgY29uc3QgewogIHJldHVybiAoaGFzSG9yaXpU
cmFuc2xhdGlvbigpIHx8IGhhc1ZlcnRpY2FsVHJhbnNsYXRpb24oKSk7Cn0KaW5saW5lCmJvb2wg
TW92ZVJlYzo6aGFzUm90YXRpb24oKSBjb25zdCB7CiAgcmV0dXJuIChlbmRfcHNpICE9IHN0YXJ0
X3BzaSk7Cn0KaW5saW5lCmJvb2wgTW92ZVJlYzo6aXNQdXJlVHJhbnNsYXRpb24oKSBjb25zdCB7
CiAgcmV0dXJuIChoYXNUcmFuc2xhdGlvbigpICYmICFoYXNSb3RhdGlvbigpKTsKfQppbmxpbmUK
Ym9vbCBNb3ZlUmVjOjppc1B1cmVIb3JpelRyYW5zbGF0aW9uKCkgY29uc3QgewogIHJldHVybiAo
aGFzSG9yaXpUcmFuc2xhdGlvbigpICYmICFoYXNWZXJ0aWNhbFRyYW5zbGF0aW9uKCkgJiYgIWhh
c1JvdGF0aW9uKCkpOyAKfQppbmxpbmUKYm9vbCBNb3ZlUmVjOjppc1B1cmVWZXJ0VHJhbnNsYXRp
b24oKSBjb25zdCB7CiAgcmV0dXJuICghaGFzSG9yaXpUcmFuc2xhdGlvbigpICYmIGhhc1ZlcnRp
Y2FsVHJhbnNsYXRpb24oKSAmJiAhaGFzUm90YXRpb24oKSk7IAp9CmlubGluZQpib29sIE1vdmVS
ZWM6OmlzUHVyZVJvdGF0aW9uKCkgY29uc3QgewogIHJldHVybiAoaGFzUm90YXRpb24oKSAmJiAh
aGFzVHJhbnNsYXRpb24oKSk7Cn0KDAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMyAiYnVnLmNjIiAyCgoj
IDEgIi91L2xwYWdlL3dvcmthcmVhL3Jvb3QvdXNyL3NpbWxhYi9yZWxlYXNlL2F1dG9ub21vdXNT
eXN0ZW1zMS4xLjEvaW5jbHVkZS9WZWN0b3IzLmgiIDEKCgogCiAKIAogCiAKIAogCiAKIAogCiAK
IAoKCgoKY2xhc3MgVmVjdG9yMyB7CiBwdWJsaWM6CiAgZG91YmxlIHg7CiAgZG91YmxlIHk7CiAg
ZG91YmxlIHo7CgogcHVibGljOgogICAKICBjbGFzcyBOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0
aW9uIHt9OwogIAogICAKICBzdGF0aWMgY29uc3QgVmVjdG9yMyB6ZXJvOwogIHN0YXRpYyBjb25z
dCBWZWN0b3IzIGVsZW1bM107ICAKCiAgIAogIFZlY3RvcjMoKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7fSAgIAogIFZlY3RvcjMoZG91YmxlIHhfLCBkb3VibGUgeV8sIGRvdWJs
ZSB6XykgICB7IHNldCh4Xyx5Xyx6Xyk7IH0KICBWZWN0b3IzKGNvbnN0IFZlY3RvcjIgJnh5LCAg
ICBkb3VibGUgel8pICAgeyBzZXQoeHkueCwgeHkueSwgel8pOyB9CiAgZXhwbGljaXQgVmVjdG9y
Myhjb25zdCBkb3VibGUgKnZhbHMpICAgICAgIHsgc2V0KHZhbHMpOyB9CgogIFZlY3RvcjMgJnNl
dChkb3VibGUgeF8sIGRvdWJsZSB5XywgZG91YmxlIHpfKSB7CiAgICB4PXhfOyB5PXlfOyB6PXpf
OyAKICAgIHJldHVybiAqdGhpczsgfQogIFZlY3RvcjMgJnNldChjb25zdCBWZWN0b3IyICZ4eSwg
ZG91YmxlIHpfKSAgICB7IHJldHVybiBzZXQoeHkueCwgeHkueSwgel8pOyB9CiAgVmVjdG9yMyAm
c2V0KGNvbnN0IGRvdWJsZSAqdmFscykgICAgIHsgcmV0dXJuIHNldCh2YWxzWzBdLHZhbHNbMV0s
dmFsc1syXSk7IH0KCiAgdm9pZCAgICBzZXRYWShjb25zdCBWZWN0b3IyICZ4eSkgICAgICAgICAg
ICAgIHsgeD14eS54OyB5PXh5Lnk7IH0KICBWZWN0b3IyIGdldFhZKCkgY29uc3QgICAgICAgICAg
ICAgICAgICAgICAgICAgeyByZXR1cm4gVmVjdG9yMih4LHkpOyB9CgoKICAgCiAgZG91YmxlICAg
ICAgICpiZWdpbigpICAgICAgICAgeyByZXR1cm4gJng7IH0KICBjb25zdCBkb3VibGUgKmJlZ2lu
KCkgICBjb25zdCB7IHJldHVybiAmeDsgfQogIGRvdWJsZSAgICAgICAqZW5kKCkgICAgICAgICAg
IHsgcmV0dXJuICgmeCkrMzsgfQogIGNvbnN0IGRvdWJsZSAqZW5kKCkgICAgIGNvbnN0IHsgcmV0
dXJuICgmeCkrMzsgfQoKICAgCiAgIAoKICBkb3VibGUgJm9wZXJhdG9yW10oaW50IGkpICAgICAg
IHsgcmV0dXJuICooJnggKyBpKTsgfQogIGRvdWJsZSAgb3BlcmF0b3JbXShpbnQgaSkgY29uc3Qg
eyByZXR1cm4gKigmeCArIGkpOyB9CgogICAKICBkb3VibGUgIG1hZ25pdHVkZSgpIGNvbnN0Owog
IGRvdWJsZSAgbWFnbml0dWRlU3F1YXJlZCgpIGNvbnN0OwogIFZlY3RvcjMgdW5pdFZlY3Rvcigp
IGNvbnN0CiAgICB0aHJvdyAoTm9ybWFsaXplWmVyb0xlbmd0aEV4Y2VwdGlvbik7CgogIHZvaWQg
ICAgZ2V0T3J0aG9ub3JtYWxWZWN0b3JzKFZlY3RvcjMgJm4xLCBWZWN0b3IzICZuMikgY29uc3QK
ICAgIHRocm93IChOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uKTsKICAgCiAgIAogIAogIHZv
aWQgICAgZ2V0T3J0aG9ub3JtYWxWZWN0b3JzTm9ybWFsKFZlY3RvcjMgJm4xLCBWZWN0b3IzICZu
MikgY29uc3Q7CiAgIAoKICBWZWN0b3IzIG9wZXJhdG9yLSgpIGNvbnN0OwogIFZlY3RvcjMgb3Bl
cmF0b3IrKGNvbnN0IFZlY3RvcjMgJnYpIGNvbnN0OwogIFZlY3RvcjMgb3BlcmF0b3ItKGNvbnN0
IFZlY3RvcjMgJnYpIGNvbnN0OwogIFZlY3RvcjMgb3BlcmF0b3IqKGRvdWJsZSBhKSBjb25zdDsK
ICBWZWN0b3IzIG9wZXJhdG9yLyhkb3VibGUgYSkgY29uc3Q7CgogIGJvb2wgICAgb3BlcmF0b3I9
PShjb25zdCBWZWN0b3IzICZ2KSBjb25zdDsKCiAgIAogIHZvaWQgbm9ybWFsaXplKCkgdGhyb3cg
KE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRpb24pOwogIHZvaWQgc2NhbGUoZG91YmxlIHMpOwoK
ICBWZWN0b3IzICZvcGVyYXRvcio9KGRvdWJsZSBhKTsKICBWZWN0b3IzICZvcGVyYXRvci89KGRv
dWJsZSBhKTsKICBWZWN0b3IzICZvcGVyYXRvcis9KGNvbnN0IFZlY3RvcjMgJnYpOwogIFZlY3Rv
cjMgJm9wZXJhdG9yLT0oY29uc3QgVmVjdG9yMyAmdik7Cn07CgpWZWN0b3IzIG9wZXJhdG9yKihk
b3VibGUgYSwgY29uc3QgVmVjdG9yMyAmdik7CgpWZWN0b3IzIGNyb3NzUHJvZHVjdChjb25zdCBW
ZWN0b3IzICZ2MSwgY29uc3QgVmVjdG9yMyAmdjIpOwpkb3VibGUgIGlubmVyUHJvZHVjdChjb25z
dCBWZWN0b3IzICZ2MSwgY29uc3QgVmVjdG9yMyAmdjIpOwogCgpib29sIGVxdWFsc1dpdGhpbihj
b25zdCBWZWN0b3IzICZ2MSwgY29uc3QgVmVjdG9yMyAmdjIsIGRvdWJsZSB0b2wpOyAKCnN0ZDo6
b3N0cmVhbSAmb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBWZWN0b3IzICZ2KTsK
c3RkOjppc3RyZWFtICZvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSAmaXMsIFZlY3RvcjMgJnYpOwoK
CgwKIAogCgppbmxpbmUgZG91YmxlICBWZWN0b3IzOjptYWduaXR1ZGUoKSBjb25zdAp7CiAgcmV0
dXJuIHNxcnQoeCp4ICsgeSp5ICsgeip6KTsKfQoKaW5saW5lIGRvdWJsZSAgVmVjdG9yMzo6bWFn
bml0dWRlU3F1YXJlZCgpIGNvbnN0CnsKICByZXR1cm4gKHgqeCArIHkqeSArIHoqeik7Cn0KCmlu
bGluZSBWZWN0b3IzIFZlY3RvcjM6OnVuaXRWZWN0b3IoKSBjb25zdAp0aHJvdyAoTm9ybWFsaXpl
WmVyb0xlbmd0aEV4Y2VwdGlvbikKewogIGRvdWJsZSBtYWcobWFnbml0dWRlKCkpOwogIGlmICht
YWcgPT0gMC4pIHRocm93IE5vcm1hbGl6ZVplcm9MZW5ndGhFeGNlcHRpb24oKTsKICByZXR1cm4g
KCp0aGlzIC8gbWFnKTsKfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9yMzo6b3BlcmF0b3ItKCkgY29u
c3QKeyByZXR1cm4gVmVjdG9yMygteCwgLXksIC16KTsgfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9y
Mzo6b3BlcmF0b3IrKGNvbnN0IFZlY3RvcjMgJnYpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjMoeCt2
LngsICB5K3YueSwgIHordi56KTsgfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9yMzo6b3BlcmF0b3It
KGNvbnN0IFZlY3RvcjMgJnYpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjMoeC12LngsICB5LXYueSwg
IHotdi56KTsgfQoKaW5saW5lIFZlY3RvcjMgVmVjdG9yMzo6b3BlcmF0b3IqKGRvdWJsZSBhKSBj
b25zdAp7IHJldHVybiBWZWN0b3IzKHgqYSwgeSphLCB6KmEpOyB9CgppbmxpbmUgVmVjdG9yMyBW
ZWN0b3IzOjpvcGVyYXRvci8oZG91YmxlIGEpIGNvbnN0CnsgcmV0dXJuIFZlY3RvcjMoeC9hLCB5
L2EsIHovYSk7IH0KCmlubGluZSBib29sIFZlY3RvcjM6Om9wZXJhdG9yPT0oY29uc3QgVmVjdG9y
MyAmdikgY29uc3QKeyByZXR1cm4gKCh4PT12LngpICYmICh5PT12LnkpICYmICh6PT12LnopKTsg
fQoKaW5saW5lIHZvaWQgVmVjdG9yMzo6bm9ybWFsaXplKCkgdGhyb3cgKE5vcm1hbGl6ZVplcm9M
ZW5ndGhFeGNlcHRpb24pCnsKICBkb3VibGUgbWFnKG1hZ25pdHVkZSgpKTsKICBpZiAobWFnID09
IDAuKSB0aHJvdyBOb3JtYWxpemVaZXJvTGVuZ3RoRXhjZXB0aW9uKCk7CiAgc2NhbGUoMSAvIG1h
Zyk7Cn0KCmlubGluZSB2b2lkIFZlY3RvcjM6OnNjYWxlKGRvdWJsZSBzKQp7CiAgeCAqPSBzOwog
IHkgKj0gczsKICB6ICo9IHM7Cn0KCmlubGluZSBWZWN0b3IzICZWZWN0b3IzOjpvcGVyYXRvcio9
KGRvdWJsZSBhKSAKeyAKICBzY2FsZShhKTsgCiAgcmV0dXJuICp0aGlzOyAKfQoKaW5saW5lIFZl
Y3RvcjMgJlZlY3RvcjM6Om9wZXJhdG9yLz0oZG91YmxlIGEpCnsKICBzY2FsZSgxL2EpOwogIHJl
dHVybiAqdGhpczsgCn0KCmlubGluZSBWZWN0b3IzICZWZWN0b3IzOjpvcGVyYXRvcis9KGNvbnN0
IFZlY3RvcjMgJnYpCnsKICB4ICs9IHYueDsKICB5ICs9IHYueTsKICB6ICs9IHYuejsKICByZXR1
cm4gKnRoaXM7IAp9CgppbmxpbmUgVmVjdG9yMyAmVmVjdG9yMzo6b3BlcmF0b3ItPShjb25zdCBW
ZWN0b3IzICZ2KQp7CiAgeCAtPSB2Lng7CiAgeSAtPSB2Lnk7CiAgeiAtPSB2Lno7CiAgcmV0dXJu
ICp0aGlzOyAKfQoKaW5saW5lIFZlY3RvcjMgb3BlcmF0b3IqKGRvdWJsZSBhLCBjb25zdCBWZWN0
b3IzICZ2KSAKeyByZXR1cm4gdiphOyB9CgppbmxpbmUgZG91YmxlICBpbm5lclByb2R1Y3QoY29u
c3QgVmVjdG9yMyAmdjEsIGNvbnN0IFZlY3RvcjMgJnYyKQp7IHJldHVybiB2MVswXSp2MlswXSAr
IHYxWzFdKnYyWzFdICsgdjFbMl0qdjJbMl07IH0KCgoKCiMgNCAiYnVnLmNjIiAyCgoKdm9pZCBi
bGFoKCkKewogIFBvc2VUb1N0YXRlWGZvcm0gICAgICB4Zm9ybTsKICBNb3ZlREIgICAgICAgICAg
ICAgICAqbW92ZURCOwoKICB2ZWN0b3I8U3RhdGU+IHJhd3BhdGg7CiAgdmVjdG9yPFZlY3RvcjM+
IG5lZHBhdGg7CiAgbmVkcGF0aC5yZXNpemUocmF3cGF0aC5zaXplKCkpOwogIGZvciAoc2l6ZV90
IHA9MDsgcDxyYXdwYXRoLnNpemUoKTsgKytwKSB7CiAgICByYXdwYXRoW3BdLnNldCh4Zm9ybS5p
bmRleFRvTm9ydGgocmF3cGF0aFtwXS54KSwKICAgICAgICAgICAgICAgICAgIHhmb3JtLmluZGV4
VG9FYXN0KHJhd3BhdGhbcF0ueSksCiAgICAgICAgICAgICAgICAgICBtb3ZlREItPnpJbmRleFRv
VmFsdWUocmF3cGF0aFtwXS56KSk7CiAgfQogIHJldHVybiAxOwp9Cg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]