public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/3899: Compile with -O2 generates "internal compiler error"
@ 2001-07-31  9:46 lupoja
  0 siblings, 0 replies; 2+ messages in thread
From: lupoja @ 2001-07-31  9:46 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3899
>Category:       c++
>Synopsis:       Compile with -O2 generates "internal compiler error"
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jul 31 09:46:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     (?) James A. Lupo
>Release:        gcc version 2.95.4 20010703 (Debian prerelease)
>Organization:
>Environment:
/usr/lib/gcc-lib/i386-linux/2.95.4/cpp0 -lang-c++ -v -I../unix/../include -I../unix/../src -I. -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__ -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ derived.cpp derived.ii
GNU CPP version 2.95.4 20010703 (Debian prerelease) (i386 Linux/ELF)
>Description:
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20010703 (Debian prerelease)
 /usr/lib/gcc-lib/i386-linux/2.95.4/cpp0 -lang-c++ -v -I../unix/../include -I../unix/../src -I. -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__ -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ derived.cpp derived.ii
GNU CPP version 2.95.4 20010703 (Debian prerelease) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 ../unix/../include
 ../unix/../src
 .
 /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3
 /usr/local/include
 /usr/lib/gcc-lib/i386-linux/2.95.4/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../i386-linux/include
End of omitted list.
 /usr/lib/gcc-lib/i386-linux/2.95.4/cc1plus derived.ii -quiet -dumpbase derived.cc -O2 -version -fomit-frame-pointer -o derived.s
GNU C++ version 2.95.4 20010703 (Debian prerelease) (i386-linux) compiled by GNU C version 2.95.4 20010703 (Debian prerelease).
derived.cpp: In method `c4_SortSeq::c4_SortSeq(c4_Sequence &, c4_Sequence *)':
derived.cpp:662: Internal compiler error.
derived.cpp:662: Please submit a full bug report.
derived.cpp:662: Internal compiler error:
derived.cpp:662: See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
>How-To-Repeat:

>Fix:
Compile completes successfully if "-O2" is left off the
command line.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="derived.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="derived.ii"

IyAxICJkZXJpdmVkLmNwcCIKIAoKIAoKCgojIDEgIi4uL3VuaXgvLi4vc3JjL2hlYWRlci5oIiAx
CiAKCiAKCgoKCgoKIAoKIyAxICJjb25maWcuaCIgMQogCgoKCgoKIyAxMiAiLi4vdW5peC8uLi9z
cmMvaGVhZGVyLmgiIDIKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAoKCgogICAgIAoKCgoKIAogCiAKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoj
IDgyICIuLi91bml4Ly4uL3NyYy9oZWFkZXIuaCIKCgogCiAKIAoKCgoKCgojIDEgIi4uL3VuaXgv
Li4vc3JjL2dudWMuaCIgMQogCgogCgoKCgoKCgoKIyA5MyAiLi4vdW5peC8uLi9zcmMvaGVhZGVy
LmgiIDIKCiMgMTAyICIuLi91bml4Ly4uL3NyYy9oZWFkZXIuaCIKCgogCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHQ0X2J5dGU7ICAgCgoKCgp0eXBl
ZGVmIGxvbmcgdDRfaTMyOyAgICAgICAgICAgICAKCgogCiAKCgoKCgogCiAKCgoKCgoKCgoKCgoK
CgogCiAKCiMgMSAiLi4vdW5peC8uLi9pbmNsdWRlL21rNC5oIiAxCiAKCiAKCgoKCgoKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCgogICAgIAoKCiAKIAoKICAgIGNsYXNzIGM0X1ZpZXc7ICAgICAgICAgICAg
ICAgICAgICAgICAKICAgIGNsYXNzIGM0X0N1cnNvcjsgICAgICAgICAgICAgICAgICAgICAKICAg
IGNsYXNzIGM0X1Jvd1JlZjsgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBjbGFzcyBjNF9S
b3c7ICAgICAgICAgICAgICAgICAgICAKICAgIGNsYXNzIGM0X0J5dGVzOyAgICAgICAgICAgICAg
ICAgICAgICAKICAgIGNsYXNzIGM0X1N0b3JhZ2U7ICAgICAgICAgICAgICAgICAgICAKICAgIGNs
YXNzIGM0X0N1c3RvbVZpZXdlcjsgICAgICAgICAgICAgICAKICAgIGNsYXNzIGM0X1N0cmVhbTsg
ICAgICAgICAgICAgICAgICAgICAKICAgIGNsYXNzIGM0X1N0cmF0ZWd5OyAgICAgICAgICAgICAg
ICAgICAKCiAgICBjbGFzcyBjNF9Qcm9wZXJ0eTsgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
Y2xhc3MgYzRfSW50UHJvcDsKICAgICAgICBjbGFzcyBjNF9Mb25nUHJvcDsKICAgICAgICBjbGFz
cyBjNF9GbG9hdFByb3A7CiAgICAgICAgY2xhc3MgYzRfRG91YmxlUHJvcDsKICAgICAgICBjbGFz
cyBjNF9TdHJpbmdQcm9wOwogICAgICAgIGNsYXNzIGM0X0J5dGVzUHJvcDsKICAgICAgICBjbGFz
cyBjNF9WaWV3UHJvcDsKCiAgICAgCgogICAgY2xhc3MgYzRfU2VxdWVuY2U7ICAgICAgICAgICAg
ICAgICAgIAoKICAgIGNsYXNzIGM0X1JlZmVyZW5jZTsgICAgICAgICAgICAgICAgICAKICAgICAg
ICBjbGFzcyBjNF9JbnRSZWY7CiAgICAgICAgY2xhc3MgYzRfTG9uZ1JlZjsKICAgICAgICBjbGFz
cyBjNF9GbG9hdFJlZjsKICAgICAgICBjbGFzcyBjNF9Eb3VibGVSZWY7CiAgICAgICAgY2xhc3Mg
YzRfQnl0ZXNSZWY7CiAgICAgICAgY2xhc3MgYzRfU3RyaW5nUmVmOwogICAgICAgIGNsYXNzIGM0
X1ZpZXdSZWY7CgogICAgY2xhc3MgYzRfRGVwZW5kZW5jaWVzOyAgICAgICAgICAgICAgIAogICAg
Y2xhc3MgYzRfSGFuZGxlcjsgICAgICAgICAgICAgICAgICAgIAogICAgY2xhc3MgYzRfTm90aWZp
ZXI7ICAgICAgICAgICAgICAgICAgIAogICAgY2xhc3MgYzRfUGVyc2lzdDsgICAgICAgICAgICAg
ICAgICAgIAoKIAoKICAgICAKCgoKCiAgICAgCgoKCgogICAgIAoKCgoKICAgICAKCgoKCiAKCiAg
ICAgCiMgMTI3ICIuLi91bml4Ly4uL2luY2x1ZGUvbWs0LmgiCgoKICAgICAKCgoKCgoKCiAgICAg
CiMgMTQ2ICIuLi91bml4Ly4uL2luY2x1ZGUvbWs0LmgiCgoKICAgICAKIyAxNjAgIi4uL3VuaXgv
Li4vaW5jbHVkZS9tazQuaCIKCgogCiAKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgdDRfYnl0ZTsgICAKCgoKCnR5cGVkZWYgbG9uZyB0NF9pMzI7ICAgICAgICAgICAgIAoK
CgoKCgoKdHlwZWRlZiBsb25nIGxvbmcgdDRfaTY0OwoKCgoKCgogCgpjbGFzcyBjNF9WaWV3CnsK
ICAgIGM0X1NlcXVlbmNlKiBfc2VxOwoKcHVibGljOgogCiAgICBjNF9WaWV3IChjNF9TZXF1ZW5j
ZSogPTApOwogICAgYzRfVmlldyAoYzRfQ3VzdG9tVmlld2VyKik7CiAgICBjNF9WaWV3IChjNF9T
dHJlYW0qKTsKICAgIGM0X1ZpZXcgKGNvbnN0IGM0X1Byb3BlcnR5JiBwcm9wZXJ0eV8pOwogICAg
YzRfVmlldyAoY29uc3QgYzRfVmlldyYpOwogICAgfmM0X1ZpZXcgKCk7CiAgICAKICAgIGM0X1Zp
ZXcmIG9wZXJhdG9yPSAoY29uc3QgYzRfVmlldyYpOwogICAgYzRfUGVyc2lzdCogUGVyc2lzdCgp
IGNvbnN0OyAgCgogCiAgICBpbnQgR2V0U2l6ZSgpIGNvbnN0OyAgICAKICAgIHZvaWQgU2V0U2l6
ZShpbnQsIGludCA9LTEpOyAKCiAgICB2b2lkIFJlbW92ZUFsbCgpOwoKIAogICAgYzRfUm93UmVm
IEdldEF0KGludCkgY29uc3Q7CiAgICBjNF9Sb3dSZWYgb3BlcmF0b3JbXSAoaW50KSBjb25zdDsK
ICAgIAogICAgdm9pZCBTZXRBdChpbnQsIGNvbnN0IGM0X1Jvd1JlZiYpOwogICAgYzRfUm93UmVm
IEVsZW1lbnRBdChpbnQpOwoKICAgIGJvb2wgR2V0SXRlbShpbnQsIGludCwgYzRfQnl0ZXMmKSBj
b25zdDsKICAgIHZvaWQgU2V0SXRlbShpbnQsIGludCwgY29uc3QgYzRfQnl0ZXMmKSBjb25zdDsK
CiAKICAgIHZvaWQgU2V0QXRHcm93KGludCwgY29uc3QgYzRfUm93UmVmJik7ICAgCiAgICBpbnQg
QWRkKGNvbnN0IGM0X1Jvd1JlZiYpOwoKIAogICAgdm9pZCBJbnNlcnRBdChpbnQsIGNvbnN0IGM0
X1Jvd1JlZiYsIGludCA9MSk7CiAgICB2b2lkIFJlbW92ZUF0KGludCwgaW50ID0xKTsKICAgIHZv
aWQgSW5zZXJ0QXQoaW50LCBjb25zdCBjNF9WaWV3Jik7CiAgICBib29sIFJlbG9jYXRlUm93cyhp
bnQsIGludCwgYzRfVmlldyYsIGludCk7CgogCiAgICBpbnQgTnVtUHJvcGVydGllcygpIGNvbnN0
OyAKICAgIGNvbnN0IGM0X1Byb3BlcnR5JiBOdGhQcm9wZXJ0eShpbnQpIGNvbnN0OwogICAgaW50
IEZpbmRQcm9wZXJ0eShpbnQpOwogICAgaW50IEZpbmRQcm9wSW5kZXhCeU5hbWUoY29uc3QgY2hh
ciopIGNvbnN0OwogICAgYzRfVmlldyBEdXBsaWNhdGUoKSBjb25zdDsKICAgIGM0X1ZpZXcgQ2xv
bmUoKSBjb25zdDsKICAgIGludCBBZGRQcm9wZXJ0eShjb25zdCBjNF9Qcm9wZXJ0eSYpOwogICAg
YzRfVmlldyBvcGVyYXRvciwgKGNvbnN0IGM0X1Byb3BlcnR5JikgY29uc3Q7CgogICAgY29uc3Qg
Y2hhciogRGVzY3JpcHRpb24oKSBjb25zdDsKICAgIAogCiAgICBjNF9WaWV3IFNvcnQoKSBjb25z
dDsKICAgIGM0X1ZpZXcgU29ydE9uKGNvbnN0IGM0X1ZpZXcmKSBjb25zdDsKICAgIGM0X1ZpZXcg
U29ydE9uUmV2ZXJzZShjb25zdCBjNF9WaWV3JiwgY29uc3QgYzRfVmlldyYpIGNvbnN0OwoKICAg
IGM0X1ZpZXcgU2VsZWN0KGNvbnN0IGM0X1Jvd1JlZiYpIGNvbnN0OwogICAgYzRfVmlldyBTZWxl
Y3RSYW5nZShjb25zdCBjNF9Sb3dSZWYmLCBjb25zdCBjNF9Sb3dSZWYmKSBjb25zdDsKCiAgICBj
NF9WaWV3IFByb2plY3QoY29uc3QgYzRfVmlldyYpIGNvbnN0OwogICAgYzRfVmlldyBQcm9qZWN0
V2l0aG91dChjb25zdCBjNF9WaWV3JikgY29uc3Q7CgogICAgaW50IEdldEluZGV4T2YoY29uc3Qg
YzRfUm93UmVmJikgY29uc3Q7CiAgICBpbnQgUmVzdHJpY3RTZWFyY2goY29uc3QgYzRfUm93UmVm
JiwgaW50JiwgaW50Jik7CgogCiAgICBjNF9WaWV3IFNsaWNlKGludCwgaW50ID0tMSwgaW50ID0x
KSBjb25zdDsKICAgIGM0X1ZpZXcgUHJvZHVjdChjb25zdCBjNF9WaWV3JikgY29uc3Q7CiAgICBj
NF9WaWV3IFJlbWFwV2l0aChjb25zdCBjNF9WaWV3JikgY29uc3Q7CiAgICBjNF9WaWV3IFBhaXIo
Y29uc3QgYzRfVmlldyYpIGNvbnN0OwogICAgYzRfVmlldyBDb25jYXQoY29uc3QgYzRfVmlldyYp
IGNvbnN0OwogICAgYzRfVmlldyBSZW5hbWUoY29uc3QgYzRfUHJvcGVydHkmLCBjb25zdCBjNF9Q
cm9wZXJ0eSYpIGNvbnN0OwoKICAgIGM0X1ZpZXcgR3JvdXBCeShjb25zdCBjNF9WaWV3JiwgY29u
c3QgYzRfVmlld1Byb3AmKSBjb25zdDsKICAgIGM0X1ZpZXcgQ291bnRzKGNvbnN0IGM0X1ZpZXcm
LCBjb25zdCBjNF9JbnRQcm9wJikgY29uc3Q7CiAgICBjNF9WaWV3IFVuaXF1ZSgpIGNvbnN0OwoK
ICAgIGM0X1ZpZXcgVW5pb24oY29uc3QgYzRfVmlldyYpIGNvbnN0OwogICAgYzRfVmlldyBJbnRl
cnNlY3QoY29uc3QgYzRfVmlldyYpIGNvbnN0OwogICAgYzRfVmlldyBEaWZmZXJlbnQoY29uc3Qg
YzRfVmlldyYpIGNvbnN0OwogICAgYzRfVmlldyBNaW51cyhjb25zdCBjNF9WaWV3JikgY29uc3Q7
CgogICAgYzRfVmlldyBKb2luUHJvcChjb25zdCBjNF9WaWV3UHJvcCYsIGJvb2wgPWZhbHNlKSBj
b25zdDsKICAgIGM0X1ZpZXcgSm9pbihjb25zdCBjNF9WaWV3JiwgY29uc3QgYzRfVmlldyYsIGJv
b2wgPWZhbHNlKSBjb25zdDsKCiAgICBjNF9WaWV3IFJlYWRPbmx5KCkgY29uc3Q7CiAgICBjNF9W
aWV3IEhhc2goY29uc3QgYzRfVmlldyYsIGludCA9MSkgY29uc3Q7CiAgICBjNF9WaWV3IEJsb2Nr
ZWQoKSBjb25zdDsKICAgIGM0X1ZpZXcgT3JkZXJlZChpbnQgPTEpIGNvbnN0OwogICAgYzRfVmll
dyBJbmRleGVkKGNvbnN0IGM0X1ZpZXcmLCBjb25zdCBjNF9WaWV3JiwgYm9vbCA9ZmFsc2UpIGNv
bnN0OwoKIAogICAgaW50IEZpbmQoY29uc3QgYzRfUm93UmVmJiwgaW50ID0wKSBjb25zdDsKICAg
IGludCBTZWFyY2goY29uc3QgYzRfUm93UmVmJikgY29uc3Q7CiAgICBpbnQgTG9jYXRlKGNvbnN0
IGM0X1Jvd1JlZiYsIGludCogPTApIGNvbnN0OwogICAgCiAKICAgIGludCBDb21wYXJlKGNvbnN0
IGM0X1ZpZXcmKSBjb25zdDsKCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBjNF9W
aWV3JiwgY29uc3QgYzRfVmlldyYpOwogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPSAoY29uc3Qg
YzRfVmlldyYsIGNvbnN0IGM0X1ZpZXcmKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29u
c3QgYzRfVmlldyYsIGNvbnN0IGM0X1ZpZXcmKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPiAo
Y29uc3QgYzRfVmlldyYsIGNvbnN0IGM0X1ZpZXcmKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PD0gKGNvbnN0IGM0X1ZpZXcmLCBjb25zdCBjNF9WaWV3Jik7CiAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj49IChjb25zdCBjNF9WaWV3JiwgY29uc3QgYzRfVmlldyYpOwogICAgCnByb3RlY3RlZDoK
ICAgIHZvaWQgX0luY1NlcVJlZigpOwogICAgdm9pZCBfRGVjU2VxUmVmKCk7CgogICAgCSAKICAg
IGZyaWVuZCBjbGFzcyBjNF9WaWV3UmVmOwoKICAgICAKICAgICAKfTsKCiAKCmNsYXNzIGM0X0N1
cnNvcgp7CnB1YmxpYzogCiAgICAgICAgIAogICAgYzRfU2VxdWVuY2UqIF9zZXE7CiAgICAgICAg
IAogICAgaW50IF9pbmRleDsKCiAKICAgICAgICAgCiAgICBjNF9DdXJzb3IgKGM0X1NlcXVlbmNl
JiwgaW50KTsKICAgIAogICAgICAgICAKICAgIGM0X1Jvd1JlZiBvcGVyYXRvciogKCkgY29uc3Q7
CiAgICAKICAgICAgICAgCiAgICBjNF9Sb3dSZWYgb3BlcmF0b3JbXSAoaW50KSBjb25zdDsKCiAK
ICAgICAgICAgCiAgICBjNF9DdXJzb3ImIG9wZXJhdG9yKysgKCk7CiAgICAgICAgIAogICAgYzRf
Q3Vyc29yIG9wZXJhdG9yKysgKGludCk7CiAgICAgICAgIAogICAgYzRfQ3Vyc29yJiBvcGVyYXRv
ci0tICgpOwogICAgICAgICAKICAgIGM0X0N1cnNvciBvcGVyYXRvci0tIChpbnQpOwoKICAgICAg
ICAgCiAgICBjNF9DdXJzb3ImIG9wZXJhdG9yKz0gKGludCk7CiAgICAgICAgIAogICAgYzRfQ3Vy
c29yJiBvcGVyYXRvci09IChpbnQpOwoKICAgICAgICAgCiAgICBjNF9DdXJzb3Igb3BlcmF0b3It
IChpbnQpIGNvbnN0OwogICAgICAgICAKICAgIGludCBvcGVyYXRvci0gKGM0X0N1cnNvcikgY29u
c3Q7CiAgICAKICAgICAgICAgCiAgICBmcmllbmQgYzRfQ3Vyc29yIG9wZXJhdG9yKyAoYzRfQ3Vy
c29yLCBpbnQpOwogICAgICAgICAKICAgIGZyaWVuZCBjNF9DdXJzb3Igb3BlcmF0b3IrIChpbnQs
IGM0X0N1cnNvcik7CgogCiAgICAgICAgIAogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoYzRf
Q3Vyc29yLCBjNF9DdXJzb3IpOwogICAgICAgICAKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0g
KGM0X0N1cnNvciwgYzRfQ3Vyc29yKTsKICAgICAgICAgCiAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cjwgKGM0X0N1cnNvciwgYzRfQ3Vyc29yKTsKICAgICAgICAgCiAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj4gKGM0X0N1cnNvciwgYzRfQ3Vyc29yKTsKICAgICAgICAgCiAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcjw9IChjNF9DdXJzb3IsIGM0X0N1cnNvcik7CiAgICAgICAgIAogICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I+PSAoYzRfQ3Vyc29yLCBjNF9DdXJzb3IpOwoKIAogICAgICAgICAKICAgIGZy
aWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGM0X1Jvd1JlZiYsIGNvbnN0IGM0X1Jvd1JlZiYp
OwogICAgICAgICAKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGM0X1Jvd1JlZiYs
IGNvbnN0IGM0X1Jvd1JlZiYpOwogICAgICAgICAKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPCAo
Y29uc3QgYzRfUm93UmVmJiwgY29uc3QgYzRfUm93UmVmJik7CiAgICAgICAgIAogICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I+IChjb25zdCBjNF9Sb3dSZWYmLCBjb25zdCBjNF9Sb3dSZWYmKTsKICAg
ICAgICAgCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9IChjb25zdCBjNF9Sb3dSZWYmLCBjb25z
dCBjNF9Sb3dSZWYmKTsKICAgICAgICAgCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj49IChjb25z
dCBjNF9Sb3dSZWYmLCBjb25zdCBjNF9Sb3dSZWYmKTsKfTsKCiAKCmNsYXNzIGM0X1Jvd1JlZgp7
CiAgICAgICAgIAogICAgYzRfQ3Vyc29yIF9jdXJzb3I7CgpwdWJsaWM6IAogCiAgICAgICAgIAog
ICAgYzRfUm93UmVmIG9wZXJhdG9yPSAoY29uc3QgYzRfUm93UmVmJik7CiAgICAgICAgIAogICAg
YzRfQ3Vyc29yIG9wZXJhdG9yJiAoKSBjb25zdDsKICAgICAgICAgCiAgICBjNF9WaWV3IENvbnRh
aW5lcigpIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgICAgICAKICAgIGM0X1Jvd1JlZiAoYzRfQ3Vy
c29yKTsKCiAgICBmcmllbmQgY2xhc3MgYzRfQ3Vyc29yOwogICAgZnJpZW5kIGNsYXNzIGM0X1Jv
dzsKfTsKCiAKIAogCiAKIAogCiAKCmNsYXNzIGM0X1JvdyA6IHB1YmxpYyBjNF9Sb3dSZWYgCnsK
cHVibGljOgogICAgICAgICAKICAgIGM0X1JvdyAoKTsKICAgICAgICAgCiAgICBjNF9Sb3cgKGNv
bnN0IGM0X1JvdyYpOwogICAgICAgICAKICAgIGM0X1JvdyAoY29uc3QgYzRfUm93UmVmJik7CiAg
ICAgICAgIAogICAgfmM0X1JvdyAoKTsKICAgIAogICAgICAgICAKICAgIGM0X1JvdyYgb3BlcmF0
b3I9IChjb25zdCBjNF9Sb3cmKTsKICAgICAgICAgCiAgICBjNF9Sb3cmIG9wZXJhdG9yPSAoY29u
c3QgYzRfUm93UmVmJik7CiAgICAKICAgICAgICAgCiAgICB2b2lkIENvbmNhdFJvdyhjb25zdCBj
NF9Sb3dSZWYmKTsKICAgICAgICAgCiAgICBmcmllbmQgYzRfUm93IG9wZXJhdG9yKyAoY29uc3Qg
YzRfUm93UmVmJiwgY29uc3QgYzRfUm93UmVmJik7CiAgICAKcHJpdmF0ZToKICAgIHN0YXRpYyBj
NF9DdXJzb3IgQWxsb2NhdGUoKTsKICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoYzRfQ3Vyc29yKTsK
fTsKCiAKCmNsYXNzIGM0X0J5dGVzCnsKICAgIHVuaW9uIHsKCXQ0X2J5dGUgX2J1ZmZlciBbMTZd
OwogICAgICAgIGRvdWJsZSBfYWxpZ25lcjsgIAogICAgfTsKCiAgICB0NF9ieXRlKiBfY29udGVu
dHM7CiAgICBpbnQgX3NpemU7CiAgICBib29sIF9jb3B5OwoKcHVibGljOgogICAgYzRfQnl0ZXMg
KCk7CiAgICBjNF9CeXRlcyAoY29uc3Qgdm9pZCosIGludCk7CiAgICBjNF9CeXRlcyAoY29uc3Qg
dm9pZCosIGludCwgYm9vbCk7CiAgICBjNF9CeXRlcyAoY29uc3QgYzRfQnl0ZXMmKTsKICAgIH5j
NF9CeXRlcyAoKTsKICAgIAogICAgYzRfQnl0ZXMmIG9wZXJhdG9yPSAoY29uc3QgYzRfQnl0ZXMm
KTsKICAgIHZvaWQgU3dhcChjNF9CeXRlcyYpOwogICAgCiAgICBpbnQgU2l6ZSgpIGNvbnN0Owog
ICAgY29uc3QgdDRfYnl0ZSogQ29udGVudHMoKSBjb25zdDsKICAgIAogICAgdDRfYnl0ZSogU2V0
QnVmZmVyKGludCk7CiAgICB0NF9ieXRlKiBTZXRCdWZmZXJDbGVhcihpbnQpOwoKICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGM0X0J5dGVzJiwgY29uc3QgYzRfQnl0ZXMmKTsKICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGM0X0J5dGVzJiwgY29uc3QgYzRfQnl0ZXMm
KTsKCnByaXZhdGU6CiAgICB2b2lkIF9NYWtlQ29weSgpOwogICAgdm9pZCBfTG9zZUNvcHkoKTsK
fTsKCiAKCmNsYXNzIGM0X1N0b3JhZ2UgOiBwdWJsaWMgYzRfVmlldwp7CnB1YmxpYzoKICAgICAg
ICAgCiAgICBjNF9TdG9yYWdlICgpOyAKICAgICAgICAgCiAgICBjNF9TdG9yYWdlIChjNF9TdHJh
dGVneSYsIGJvb2wgPWZhbHNlLCBpbnQgPTEpOyAKICAgICAgICAgCiAgICBjNF9TdG9yYWdlIChj
b25zdCBjaGFyKiwgaW50KTsKICAgIAkgCiAgICBjNF9TdG9yYWdlIChjb25zdCBjNF9WaWV3Jik7
CiAgICAgICAgIAogICAgfmM0X1N0b3JhZ2UgKCk7CiAgICAKICAgIHZvaWQgU2V0U3RydWN0dXJl
KGNvbnN0IGNoYXIqKTsKICAgIGJvb2wgQXV0b0NvbW1pdChib29sID10cnVlKTsKICAgIGM0X1N0
cmF0ZWd5JiBTdHJhdGVneSgpIGNvbnN0OwogICAgY29uc3QgY2hhciogRGVzY3JpcHRpb24oY29u
c3QgY2hhciogPTApOwogICAgCiAgICBib29sIFNldEFzaWRlKGM0X1N0b3JhZ2UmKTsKICAgIGM0
X1N0b3JhZ2UqIEdldEFzaWRlKCkgY29uc3Q7CgogICAgYm9vbCBDb21taXQoYm9vbCA9ZmFsc2Up
OwogICAgYm9vbCBSb2xsYmFjayhib29sID1mYWxzZSk7CiAgICAKICAgIGM0X1ZpZXdSZWYgVmll
dyhjb25zdCBjaGFyKik7CiAgICBjNF9WaWV3IEdldEFzKGNvbnN0IGNoYXIqKTsKCiAgICBib29s
IExvYWRGcm9tKGM0X1N0cmVhbSYpOwogICAgdm9pZCBTYXZlVG8oYzRfU3RyZWFtJik7CgogICAg
IAogICAgIAogICAgIAogICAgIAoKcHJpdmF0ZToKICAgIHZvaWQgSW5pdGlhbGl6ZShjNF9TdHJh
dGVneSYsIGJvb2wsIGludCk7Cn07CgogCgpjbGFzcyBjNF9Qcm9wZXJ0eQp7CiAgICBzaG9ydCBf
aWQ7CiAgICBjaGFyIF90eXBlOwoKcHVibGljOgogICAgICAgICAKICAgIGM0X1Byb3BlcnR5IChj
aGFyLCBpbnQpOwogICAgICAgICAKICAgIGM0X1Byb3BlcnR5IChjaGFyLCBjb25zdCBjaGFyKik7
CiAgICB+YzRfUHJvcGVydHkgKCk7CiAgICAKICAgIGM0X1Byb3BlcnR5IChjb25zdCBjNF9Qcm9w
ZXJ0eSYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IGM0X1Byb3BlcnR5Jik7CgogICAgY29u
c3QgY2hhciogTmFtZSgpIGNvbnN0OwogICAgY2hhciBUeXBlKCkgY29uc3Q7CgogICAgaW50IEdl
dElkKCkgY29uc3Q7CgogICAgYzRfUmVmZXJlbmNlIG9wZXJhdG9yKCkgKGNvbnN0IGM0X1Jvd1Jl
ZiYpIGNvbnN0OwoKICAgIHZvaWQgUmVmcyhpbnQpIGNvbnN0OwoKICAgIGM0X1ZpZXcgb3BlcmF0
b3IsIChjb25zdCBjNF9Qcm9wZXJ0eSYpIGNvbnN0OwoKICAgIHN0YXRpYyB2b2lkIENsZWFudXBJ
bnRlcm5hbERhdGEoKTsKfTsKCiAgICAgCmNsYXNzIGM0X0ludFByb3AgOiBwdWJsaWMgYzRfUHJv
cGVydHkgCnsKcHVibGljOgogICAgICAgICAKICAgIGM0X0ludFByb3AgKGNvbnN0IGNoYXIqKTsK
ICAgICAgICAgCiAgICB+YzRfSW50UHJvcCAoKTsKICAgIAogICAgICAgICAKICAgIGM0X0ludFJl
ZiBvcGVyYXRvcigpIChjb25zdCBjNF9Sb3dSZWYmKSBjb25zdDsKICAgICAgICAgCiAgICB0NF9p
MzIgR2V0KGNvbnN0IGM0X1Jvd1JlZiYpIGNvbnN0OwogICAgICAgICAKICAgIHZvaWQgU2V0KGNv
bnN0IGM0X1Jvd1JlZiYsIHQ0X2kzMikgY29uc3Q7CgogICAgICAgICAKICAgIGM0X1JvdyBvcGVy
YXRvcltdICh0NF9pMzIpIGNvbnN0OwogICAgICAgICAKICAgIGM0X1JvdyBBc1Jvdyh0NF9pMzIp
IGNvbnN0Owp9OwoKCgogICAgIApjbGFzcyBjNF9Mb25nUHJvcCA6IHB1YmxpYyBjNF9Qcm9wZXJ0
eSAKewpwdWJsaWM6CiAgICAgICAgIAogICAgYzRfTG9uZ1Byb3AgKGNvbnN0IGNoYXIqKTsKICAg
ICAgICAgCiAgICB+YzRfTG9uZ1Byb3AgKCk7CiAgICAKICAgICAgICAgCiAgICBjNF9Mb25nUmVm
IG9wZXJhdG9yKCkgKGNvbnN0IGM0X1Jvd1JlZiYpIGNvbnN0OwogICAgICAgICAKICAgIHQ0X2k2
NCBHZXQoY29uc3QgYzRfUm93UmVmJikgY29uc3Q7CiAgICAgICAgIAogICAgdm9pZCBTZXQoY29u
c3QgYzRfUm93UmVmJiwgdDRfaTY0KSBjb25zdDsKCiAgICAgICAgIAogICAgYzRfUm93IG9wZXJh
dG9yW10gKHQ0X2k2NCkgY29uc3Q7CiAgICAgICAgIAogICAgYzRfUm93IEFzUm93KHQ0X2k2NCkg
Y29uc3Q7Cn07CgogICAgIApjbGFzcyBjNF9GbG9hdFByb3AgOiBwdWJsaWMgYzRfUHJvcGVydHkg
CnsKcHVibGljOgogICAgICAgICAKICAgIGM0X0Zsb2F0UHJvcCAoY29uc3QgY2hhciopOwogICAg
ICAgICAKICAgIH5jNF9GbG9hdFByb3AgKCk7CiAgICAKICAgICAgICAgCiAgICBjNF9GbG9hdFJl
ZiBvcGVyYXRvcigpIChjb25zdCBjNF9Sb3dSZWYmKSBjb25zdDsKICAgICAgICAgCiAgICBkb3Vi
bGUgR2V0KGNvbnN0IGM0X1Jvd1JlZiYpIGNvbnN0OwogICAgICAgICAKICAgIHZvaWQgU2V0KGNv
bnN0IGM0X1Jvd1JlZiYsIGRvdWJsZSkgY29uc3Q7CgogICAgICAgICAKICAgIGM0X1JvdyBvcGVy
YXRvcltdIChkb3VibGUpIGNvbnN0OwogICAgICAgICAKICAgIGM0X1JvdyBBc1Jvdyhkb3VibGUp
IGNvbnN0Owp9OwoKICAgICAKY2xhc3MgYzRfRG91YmxlUHJvcCA6IHB1YmxpYyBjNF9Qcm9wZXJ0
eSAKewpwdWJsaWM6CiAgICAgICAgIAogICAgYzRfRG91YmxlUHJvcCAoY29uc3QgY2hhciopOwog
ICAgICAgICAKICAgIH5jNF9Eb3VibGVQcm9wICgpOwogICAgCiAgICAgICAgIAogICAgYzRfRG91
YmxlUmVmIG9wZXJhdG9yKCkgKGNvbnN0IGM0X1Jvd1JlZiYpIGNvbnN0OwogICAgICAgICAKICAg
IGRvdWJsZSBHZXQoY29uc3QgYzRfUm93UmVmJikgY29uc3Q7CiAgICAgICAgIAogICAgdm9pZCBT
ZXQoY29uc3QgYzRfUm93UmVmJiwgZG91YmxlKSBjb25zdDsKCiAgICAgICAgIAogICAgYzRfUm93
IG9wZXJhdG9yW10gKGRvdWJsZSkgY29uc3Q7CiAgICAgICAgIAogICAgYzRfUm93IEFzUm93KGRv
dWJsZSkgY29uc3Q7Cn07CgoKICAgICAKY2xhc3MgYzRfU3RyaW5nUHJvcCA6IHB1YmxpYyBjNF9Q
cm9wZXJ0eQp7CnB1YmxpYzoKICAgICAgICAgCiAgICBjNF9TdHJpbmdQcm9wIChjb25zdCBjaGFy
Kik7CiAgICAgICAgIAogICAgfmM0X1N0cmluZ1Byb3AgKCk7CiAgICAKICAgICAgICAgCiAgICBj
NF9TdHJpbmdSZWYgb3BlcmF0b3IoKSAoY29uc3QgYzRfUm93UmVmJikgY29uc3Q7CiAgICAgICAg
IAogICAgY29uc3QgY2hhciogR2V0KGNvbnN0IGM0X1Jvd1JlZiYpIGNvbnN0OwogICAgICAgICAK
ICAgIHZvaWQgU2V0KGNvbnN0IGM0X1Jvd1JlZiYsIGNvbnN0IGNoYXIqKSBjb25zdDsKCiAgICAg
ICAgIAogICAgYzRfUm93IG9wZXJhdG9yW10gKGNvbnN0IGNoYXIqKSBjb25zdDsKICAgICAgICAg
CiAgICBjNF9Sb3cgQXNSb3coY29uc3QgY2hhciopIGNvbnN0Owp9OwoKICAgICAKY2xhc3MgYzRf
Qnl0ZXNQcm9wIDogcHVibGljIGM0X1Byb3BlcnR5CnsKcHVibGljOgogICAgICAgICAKICAgIGM0
X0J5dGVzUHJvcCAoY29uc3QgY2hhciopOwogICAgICAgICAKICAgIH5jNF9CeXRlc1Byb3AgKCk7
CiAgICAKICAgICAgICAgCiAgICBjNF9CeXRlc1JlZiBvcGVyYXRvcigpIChjb25zdCBjNF9Sb3dS
ZWYmKSBjb25zdDsKICAgICAgICAgCiAgICBjNF9CeXRlcyBHZXQoY29uc3QgYzRfUm93UmVmJikg
Y29uc3Q7CiAgICAgICAgIAogICAgdm9pZCBTZXQoY29uc3QgYzRfUm93UmVmJiwgY29uc3QgYzRf
Qnl0ZXMmKSBjb25zdDsKCiAgICAgICAgIAogICAgYzRfUm93IG9wZXJhdG9yW10gKGNvbnN0IGM0
X0J5dGVzJikgY29uc3Q7CiAgICAgICAgIAogICAgYzRfUm93IEFzUm93KGNvbnN0IGM0X0J5dGVz
JikgY29uc3Q7Cn07CgogICAgIApjbGFzcyBjNF9WaWV3UHJvcCA6IHB1YmxpYyBjNF9Qcm9wZXJ0
eQp7CnB1YmxpYzoKICAgICAgICAgCiAgICBjNF9WaWV3UHJvcCAoY29uc3QgY2hhciopOwogICAg
ICAgICAKICAgIH5jNF9WaWV3UHJvcCAoKTsKICAgIAogICAgICAgICAKICAgIGM0X1ZpZXdSZWYg
b3BlcmF0b3IoKSAoY29uc3QgYzRfUm93UmVmJikgY29uc3Q7CiAgICAgICAgIAogICAgYzRfVmll
dyBHZXQoY29uc3QgYzRfUm93UmVmJikgY29uc3Q7CiAgICAgICAgIAogICAgdm9pZCBTZXQoY29u
c3QgYzRfUm93UmVmJiwgY29uc3QgYzRfVmlldyYpIGNvbnN0OwoKICAgICAgICAgCiAgICBjNF9S
b3cgb3BlcmF0b3JbXSAoY29uc3QgYzRfVmlldyYpIGNvbnN0OwogICAgICAgICAKICAgIGM0X1Jv
dyBBc1Jvdyhjb25zdCBjNF9WaWV3JikgY29uc3Q7Cn07CgogCgpjbGFzcyBjNF9DdXN0b21WaWV3
ZXIKewpwcm90ZWN0ZWQ6IAogICAgICAgICAKICAgIGM0X0N1c3RvbVZpZXdlciAoKTsKcHVibGlj
OiAKICAgICAgICAgCiAgICB2aXJ0dWFsIH5jNF9DdXN0b21WaWV3ZXIgKCk7CiAgICAKICAgICAg
ICAgCiAgICB2aXJ0dWFsIGM0X1ZpZXcgR2V0VGVtcGxhdGUoKSA9IDA7CiAgICAgICAgIAogICAg
dmlydHVhbCBpbnQgR2V0U2l6ZSgpID0gMDsKICAgIHZpcnR1YWwgaW50IExvb2t1cChjNF9DdXJz
b3IsIGludCYpOwogICAgICAgICAKICAgIHZpcnR1YWwgYm9vbCBHZXRJdGVtKGludCwgaW50LCBj
NF9CeXRlcyYpID0gMDsKICAgIHZpcnR1YWwgYm9vbCBTZXRJdGVtKGludCwgaW50LCBjb25zdCBj
NF9CeXRlcyYpOwogICAgdmlydHVhbCBib29sIEluc2VydFJvd3MoaW50LCBjNF9DdXJzb3IsIGlu
dCA9MSk7CiAgICB2aXJ0dWFsIGJvb2wgUmVtb3ZlUm93cyhpbnQsIGludCA9MSk7Cn07CgogCiAK
CmNsYXNzIGM0X1N0cmVhbQp7CnB1YmxpYzoKICAgIHZpcnR1YWwgfmM0X1N0cmVhbSAoKTsKCiAg
ICAgICAgIAogICAgdmlydHVhbCBpbnQgUmVhZCh2b2lkKiwgaW50KSA9IDA7CiAgICAgICAgIAog
ICAgdmlydHVhbCBib29sIFdyaXRlKGNvbnN0IHZvaWQqLCBpbnQpID0gMDsKfTsKCiAKIAoKY2xh
c3MgYzRfU3RyYXRlZ3kKewpwdWJsaWM6CiAgICBjNF9TdHJhdGVneSAoKTsKICAgIHZpcnR1YWwg
fmM0X1N0cmF0ZWd5ICgpOwoKICAgIHZpcnR1YWwgYm9vbCBJc1ZhbGlkKCkgY29uc3Q7CiAgICB2
aXJ0dWFsIGludCAgRGF0YVJlYWQodDRfaTMyLCB2b2lkKiwgaW50KTsKICAgIHZpcnR1YWwgdm9p
ZCBEYXRhV3JpdGUodDRfaTMyLCBjb25zdCB2b2lkKiwgaW50KTsKICAgIHZpcnR1YWwgdm9pZCBE
YXRhQ29tbWl0KHQ0X2kzMik7CiAgICB2aXJ0dWFsIHZvaWQgUmVzZXRGaWxlTWFwcGluZygpOwog
ICAgdmlydHVhbCB0NF9pMzIgRmlsZVNpemUoKTsKICAgIHZpcnR1YWwgdDRfaTMyIEZyZXNoR2Vu
ZXJhdGlvbigpOwoKICAgIHZvaWQgU2V0QmFzZSh0NF9pMzIpOwogICAgdDRfaTMyIEVuZE9mRGF0
YSh0NF9pMzIgPS0xKTsKCiAgICAgICAgIAogICAgYm9vbCBfYnl0ZXNGbGlwcGVkOwogICAgICAg
ICAKICAgIGludCBfZmFpbHVyZTsKICAgICAgICAgCiAgICBjb25zdCB0NF9ieXRlKiBfbWFwU3Rh
cnQ7CiAgICAgICAgIAogICAgdDRfaTMyIF9kYXRhU2l6ZTsKCSAKICAgIHQ0X2kzMiBfYmFzZU9m
ZnNldDsKCSAKICAgIHQ0X2kzMiBfcm9vdFBvczsKCSAKICAgIHQ0X2kzMiBfcm9vdExlbjsKfTsK
CiAKIAogCiAKIAogCgpjbGFzcyBjNF9TZXF1ZW5jZQp7CiAgICAgICAgIAogICAgaW50IF9yZWZD
b3VudDsKICAgICAgICAgCiAgICBjNF9EZXBlbmRlbmNpZXMqIF9kZXBlbmRlbmNpZXM7Cgpwcm90
ZWN0ZWQ6CiAgICAgICAgIAogICAgaW50IF9wcm9wZXJ0eUxpbWl0OwogICAgICAgICAKICAgIHNo
b3J0KiBfcHJvcGVydHlNYXA7ICAKICAgICAgICAgCiAgICBjNF9CeXRlcyogX3RlbXBCdWY7Cgpw
dWJsaWM6IAogCiAgICAgICAgIAogICAgYzRfU2VxdWVuY2UgKCk7CiAgICAKICAgIHZpcnR1YWwg
aW50IENvbXBhcmUoaW50LCBjNF9DdXJzb3IpIGNvbnN0OwogICAgdmlydHVhbCBib29sIFJlc3Ry
aWN0U2VhcmNoKGM0X0N1cnNvciwgaW50JiwgaW50Jik7CiAgICB2b2lkIFNldEF0KGludCwgYzRf
Q3Vyc29yKTsKICAgIHZpcnR1YWwgaW50IFJlbWFwSW5kZXgoaW50LCBjb25zdCBjNF9TZXF1ZW5j
ZSopIGNvbnN0OwogICAgCiAKICAgIHZvaWQgSW5jUmVmKCk7CiAgICB2b2lkIERlY1JlZigpOwoK
IAogICAgICAgICAKICAgIHZpcnR1YWwgaW50IE51bVJvd3MoKSBjb25zdCA9IDA7CiAgICB2b2lk
IFJlc2l6ZShpbnQsIGludCA9LTEpOwogICAgCiAgICB2aXJ0dWFsIHZvaWQgSW5zZXJ0QXQoaW50
LCBjNF9DdXJzb3IsIGludCA9MSk7CiAgICB2aXJ0dWFsIHZvaWQgUmVtb3ZlQXQoaW50LCBpbnQg
PTEpOwogICAgdmlydHVhbCB2b2lkIE1vdmUoaW50LCBpbnQpOwoKIAogICAgaW50IE50aFByb3BJ
ZChpbnQpIGNvbnN0OwogICAgaW50IFByb3BJbmRleChpbnQpOwogICAgaW50IFByb3BJbmRleChj
b25zdCBjNF9Qcm9wZXJ0eSYpOwogICAgCiAgICAgICAgIAogICAgdmlydHVhbCBpbnQgTnVtSGFu
ZGxlcnMoKSBjb25zdCA9IDA7CiAgICAgICAgIAogICAgdmlydHVhbCBjNF9IYW5kbGVyJiBOdGhI
YW5kbGVyKGludCkgY29uc3QgPSAwOwogICAgICAgICAKICAgIHZpcnR1YWwgY29uc3QgYzRfU2Vx
dWVuY2UqIEhhbmRsZXJDb250ZXh0KGludCkgY29uc3QgPSAwOwogICAgICAgICAKICAgIHZpcnR1
YWwgaW50IEFkZEhhbmRsZXIoYzRfSGFuZGxlciopID0gMDsKICAgICAgICAgCiAgICB2aXJ0dWFs
IGM0X0hhbmRsZXIqIENyZWF0ZUhhbmRsZXIoY29uc3QgYzRfUHJvcGVydHkmKSA9IDA7CgogICAg
dmlydHVhbCBjb25zdCBjaGFyKiBEZXNjcmlwdGlvbigpOwoKIAogICAgICAgICAKICAgIHZpcnR1
YWwgaW50IEl0ZW1TaXplKGludCwgaW50KTsKICAgICAgICAgCiAgICB2aXJ0dWFsIGJvb2wgR2V0
KGludCwgaW50LCBjNF9CeXRlcyYpOwogICAgICAgICAKICAgIHZpcnR1YWwgdm9pZCBTZXQoaW50
LCBjb25zdCBjNF9Qcm9wZXJ0eSYsIGNvbnN0IGM0X0J5dGVzJik7CiAgICAKIAogICAgdm9pZCBB
dHRhY2goYzRfU2VxdWVuY2UqKTsKICAgIHZvaWQgRGV0YWNoKGM0X1NlcXVlbmNlKik7CiAgICAg
ICAgIAogICAgYzRfRGVwZW5kZW5jaWVzKiBHZXREZXBlbmRlbmNpZXMoKSBjb25zdDsKCiAgICB2
aXJ0dWFsIGM0X05vdGlmaWVyKiBQcmVDaGFuZ2UoYzRfTm90aWZpZXImKTsKICAgIHZpcnR1YWwg
dm9pZCBQb3N0Q2hhbmdlKGM0X05vdGlmaWVyJik7CiAgICAKICAgIGNvbnN0IGNoYXIqIFVzZVRl
bXBCdWZmZXIoY29uc3QgY2hhciopOwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+YzRfU2VxdWVu
Y2UgKCk7CgogICAgdm9pZCBDbGVhckNhY2hlKCk7CgpwdWJsaWM6ICAKICAgIHZpcnR1YWwgdm9p
ZCBTZXROdW1Sb3dzKGludCkgPSAwOwogICAgdmlydHVhbCBjNF9QZXJzaXN0KiBQZXJzaXN0KCkg
Y29uc3Q7CgogICAgYzRfQnl0ZXMmIEJ1ZmZlcigpOwoKcHJpdmF0ZToKICAgIGM0X1NlcXVlbmNl
IChjb25zdCBjNF9TZXF1ZW5jZSYpOyAgICAKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBjNF9T
ZXF1ZW5jZSYpOyAgCn07CgogCiAKIAogCiAKIAoKY2xhc3MgYzRfUmVmZXJlbmNlCnsKcHJvdGVj
dGVkOgogICAgICAgICAKICAgIGM0X0N1cnNvciBfY3Vyc29yOwogICAgICAgICAKICAgIGNvbnN0
IGM0X1Byb3BlcnR5JiBfcHJvcGVydHk7CgpwdWJsaWM6CiAgICAgICAgIAogICAgYzRfUmVmZXJl
bmNlIChjb25zdCBjNF9Sb3dSZWYmLCBjb25zdCBjNF9Qcm9wZXJ0eSYpOwoKICAgICAgICAgCiAg
ICBjNF9SZWZlcmVuY2UmIG9wZXJhdG9yPSAoY29uc3QgYzRfUmVmZXJlbmNlJik7CgogICAgICAg
ICAKICAgIGludCBHZXRTaXplKCkgY29uc3Q7CiAgICAgICAgIAogICAgYm9vbCBHZXREYXRhKGM0
X0J5dGVzJikgY29uc3Q7CiAgICAgICAgIAogICAgdm9pZCBTZXREYXRhKGNvbnN0IGM0X0J5dGVz
JikgY29uc3Q7CiAgICAKICAgICAgICAgCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25z
dCBjNF9SZWZlcmVuY2UmLCBjb25zdCBjNF9SZWZlcmVuY2UmKTsKICAgICAgICAgCiAgICBmcmll
bmQgYm9vbCBvcGVyYXRvciE9IChjb25zdCBjNF9SZWZlcmVuY2UmLCBjb25zdCBjNF9SZWZlcmVu
Y2UmKTsKCnByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yJiAoKSBjb25zdDsgICAgICAgICAgICAg
Cn07CgogCgogICAgIApjbGFzcyBjNF9JbnRSZWYgOiBwdWJsaWMgYzRfUmVmZXJlbmNlCnsKcHVi
bGljOgogICAgICAgICAKICAgIGM0X0ludFJlZiAoY29uc3QgYzRfUmVmZXJlbmNlJik7CiAgICAg
ICAgIAogICAgb3BlcmF0b3IgdDRfaTMyICgpIGNvbnN0OwogICAgICAgICAKICAgIGM0X0ludFJl
ZiYgb3BlcmF0b3I9ICh0NF9pMzIpOwp9OwoKCgogICAgIApjbGFzcyBjNF9Mb25nUmVmIDogcHVi
bGljIGM0X1JlZmVyZW5jZQp7CnB1YmxpYzoKICAgICAgICAgCiAgICBjNF9Mb25nUmVmIChjb25z
dCBjNF9SZWZlcmVuY2UmKTsKICAgICAgICAgCiAgICBvcGVyYXRvciB0NF9pNjQgKCkgY29uc3Q7
CiAgICAgICAgIAogICAgYzRfTG9uZ1JlZiYgb3BlcmF0b3I9ICh0NF9pNjQpOwp9OwoKICAgICAK
Y2xhc3MgYzRfRmxvYXRSZWYgOiBwdWJsaWMgYzRfUmVmZXJlbmNlCnsKcHVibGljOgogICAgICAg
ICAKICAgIGM0X0Zsb2F0UmVmIChjb25zdCBjNF9SZWZlcmVuY2UmKTsKICAgICAgICAgCiAgICBv
cGVyYXRvciBkb3VibGUgKCkgY29uc3Q7CiAgICAgICAgIAogICAgYzRfRmxvYXRSZWYmIG9wZXJh
dG9yPSAoZG91YmxlKTsKfTsKCiAgICAgCmNsYXNzIGM0X0RvdWJsZVJlZiA6IHB1YmxpYyBjNF9S
ZWZlcmVuY2UKewpwdWJsaWM6CiAgICAgICAgIAogICAgYzRfRG91YmxlUmVmIChjb25zdCBjNF9S
ZWZlcmVuY2UmKTsKICAgICAgICAgCiAgICBvcGVyYXRvciBkb3VibGUgKCkgY29uc3Q7CiAgICAg
ICAgIAogICAgYzRfRG91YmxlUmVmJiBvcGVyYXRvcj0gKGRvdWJsZSk7Cn07CgoKCiAgICAgCmNs
YXNzIGM0X0J5dGVzUmVmIDogcHVibGljIGM0X1JlZmVyZW5jZQp7CnB1YmxpYzoKICAgICAgICAg
CiAgICBjNF9CeXRlc1JlZiAoY29uc3QgYzRfUmVmZXJlbmNlJik7CiAgICAgICAgIAogICAgb3Bl
cmF0b3IgYzRfQnl0ZXMgKCkgY29uc3Q7CiAgICAgICAgIAogICAgYzRfQnl0ZXNSZWYmIG9wZXJh
dG9yPSAoY29uc3QgYzRfQnl0ZXMmKTsKCiAgICAgICAgIAogICAgYzRfQnl0ZXMgQWNjZXNzKHQ0
X2kzMiwgaW50ID0wKSBjb25zdDsKICAgICAgICAgCiAgICBib29sIE1vZGlmeShjb25zdCBjNF9C
eXRlcyYsIHQ0X2kzMiwgaW50ID0wKSBjb25zdDsKfTsKCiAgICAgCmNsYXNzIGM0X1N0cmluZ1Jl
ZiA6IHB1YmxpYyBjNF9SZWZlcmVuY2UKewpwdWJsaWM6CiAgICAgICAgIAogICAgYzRfU3RyaW5n
UmVmIChjb25zdCBjNF9SZWZlcmVuY2UmKTsKICAgICAgICAgCiAgICBvcGVyYXRvciBjb25zdCBj
aGFyKiAoKSBjb25zdDsKICAgICAgICAgCiAgICBjNF9TdHJpbmdSZWYmIG9wZXJhdG9yPSAoY29u
c3QgY2hhciopOwp9OwoKICAgICAKY2xhc3MgYzRfVmlld1JlZiA6IHB1YmxpYyBjNF9SZWZlcmVu
Y2UKewpwdWJsaWM6CiAgICAgICAgIAogICAgYzRfVmlld1JlZiAoY29uc3QgYzRfUmVmZXJlbmNl
Jik7CiAgICAgICAgIAogICAgb3BlcmF0b3IgYzRfVmlldyAoKSBjb25zdDsKICAgICAgICAgCiAg
ICBjNF9WaWV3UmVmJiBvcGVyYXRvcj0gKGNvbnN0IGM0X1ZpZXcmKTsKfTsKCiAKCgojIDEgIi4u
L3VuaXgvLi4vaW5jbHVkZS9tazQuaW5sIiAxCiAKCiAKCgoKIAogCiAKaW5saW5lICBjNF9DdXJz
b3IgYzRfUm93UmVmOjpvcGVyYXRvciYgKCkgY29uc3QKewogICAgcmV0dXJuIF9jdXJzb3I7Cn0K
CiAKCgoKCgoKCgoKaW5saW5lICBpbnQgYzRfUHJvcGVydHk6OkdldElkKCkgY29uc3QKewogICAg
cmV0dXJuIF9pZDsKfQoKIAoKIyA0NCAiLi4vdW5peC8uLi9pbmNsdWRlL21rNC5pbmwiCgoKIAog
CgogCmlubGluZSAgaW50IGM0X1ZpZXc6OkdldFNpemUoKSBjb25zdAp7CiAgICByZXR1cm4gX3Nl
cS0+TnVtUm93cygpOwp9CgogCgoKCgoKaW5saW5lICB2b2lkIGM0X1ZpZXc6OlNldFNpemUoaW50
IG5ld1NpemVfLCBpbnQgZ3Jvd0J5XykKewogICAgX3NlcS0+UmVzaXplKG5ld1NpemVfLCBncm93
QnlfKTsKfQoKIAppbmxpbmUgIHZvaWQgYzRfVmlldzo6UmVtb3ZlQWxsKCkKewogICAgU2V0U2l6
ZSgwKTsKfQoKIAppbmxpbmUgIGM0X1BlcnNpc3QqIGM0X1ZpZXc6OlBlcnNpc3QoKSBjb25zdAp7
CiAgICByZXR1cm4gX3NlcS0+UGVyc2lzdCgpOwp9CgogCgoKCgoKCmlubGluZSAgdm9pZCBjNF9W
aWV3OjpTZXRBdChpbnQgaW5kZXhfLCBjb25zdCBjNF9Sb3dSZWYmIG5ld0VsZW1fKQp7CiAgICBf
c2VxLT5TZXRBdChpbmRleF8sICZuZXdFbGVtXyk7Cn0KCiAKCgoKCmlubGluZSAgdm9pZCBjNF9W
aWV3OjpJbnNlcnRBdCgKCWludCBpbmRleF8sICAKCWNvbnN0IGM0X1Jvd1JlZiYgbmV3RWxlbV8s
ICAKCWludCBjb3VudF8gIAogICAgKQp7CiAgICBfc2VxLT5JbnNlcnRBdChpbmRleF8sICZuZXdF
bGVtXywgY291bnRfKTsKfQoKIAoKCgoKCgoKaW5saW5lICB2b2lkIGM0X1ZpZXc6OlJlbW92ZUF0
KGludCBpbmRleF8sIGludCBjb3VudF8pCnsKICAgIF9zZXEtPlJlbW92ZUF0KGluZGV4XywgY291
bnRfKTsKfQoKIAoKCmlubGluZSAgaW50IGM0X1ZpZXc6Ok51bVByb3BlcnRpZXMoKSBjb25zdAp7
CiAgICByZXR1cm4gX3NlcS0+TnVtSGFuZGxlcnMoKTsKfQoKIAoKCgppbmxpbmUgIGludCBjNF9W
aWV3OjpGaW5kUHJvcGVydHkoaW50IHByb3BJZF8pCnsKICAgIHJldHVybiBfc2VxLT5Qcm9wSW5k
ZXgocHJvcElkXyk7Cn0KCiAgICAgCmlubGluZSAgY29uc3QgY2hhciogYzRfVmlldzo6RGVzY3Jp
cHRpb24oKSBjb25zdAp7CiAgICByZXR1cm4gX3NlcS0+RGVzY3JpcHRpb24oKTsKfQoKICAgICAK
aW5saW5lICB2b2lkIGM0X1ZpZXc6Ol9JbmNTZXFSZWYoKQp7CiAgICBfc2VxLT5JbmNSZWYoKTsK
fQoKICAgICAKaW5saW5lICB2b2lkIGM0X1ZpZXc6Ol9EZWNTZXFSZWYoKQp7CiAgICBfc2VxLT5E
ZWNSZWYoKTsKfQoKIAppbmxpbmUgIGM0X1ZpZXc6On5jNF9WaWV3ICgpCnsKICAgIF9EZWNTZXFS
ZWYoKTsKfQoKICAgICAKaW5saW5lICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGM0X1ZpZXcmIGFf
LCBjb25zdCBjNF9WaWV3JiBiXykKewogICAgcmV0dXJuIGFfLkdldFNpemUoKSA9PSBiXy5HZXRT
aXplKCkgJiYgYV8uQ29tcGFyZShiXykgPT0gMDsKfQoKICAgICAKaW5saW5lICBib29sIG9wZXJh
dG9yIT0gKGNvbnN0IGM0X1ZpZXcmIGFfLCBjb25zdCBjNF9WaWV3JiBiXykKewogICAgcmV0dXJu
ICEoYV8gPT0gYl8pOwp9CgogICAgIAppbmxpbmUgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBjNF9W
aWV3JiBhXywgY29uc3QgYzRfVmlldyYgYl8pCnsKICAgIHJldHVybiBhXy5Db21wYXJlKGJfKSA8
IDA7Cn0KCiAgICAgCmlubGluZSAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IGM0X1ZpZXcmIGFfLCBj
b25zdCBjNF9WaWV3JiBiXykKewogICAgcmV0dXJuIGJfIDwgYV87Cn0KCiAgICAgCmlubGluZSAg
Ym9vbCBvcGVyYXRvcjw9IChjb25zdCBjNF9WaWV3JiBhXywgY29uc3QgYzRfVmlldyYgYl8pCnsK
ICAgIHJldHVybiAhKGJfIDwgYV8pOwp9CgogICAgIAppbmxpbmUgIGJvb2wgb3BlcmF0b3I+PSAo
Y29uc3QgYzRfVmlldyYgYV8sIGNvbnN0IGM0X1ZpZXcmIGJfKQp7ICAgICAgICAgICAgICAgICAg
ICAgCiAgICByZXR1cm4gIShhXyA8IGJfKTsKfQoKIAogCgogCgoKCgoKaW5saW5lICBjNF9DdXJz
b3I6OmM0X0N1cnNvciAoYzRfU2VxdWVuY2UmIHNlcV8sIGludCBpbmRleF8pCiAgICA6IF9zZXEg
KCZzZXFfKSwgX2luZGV4IChpbmRleF8pCnsKfQoKIAppbmxpbmUgIGM0X0N1cnNvciYgYzRfQ3Vy
c29yOjpvcGVyYXRvcisrICgpCnsKICAgICsrX2luZGV4OwogICAgcmV0dXJuICp0aGlzOwp9Cgog
CmlubGluZSAgYzRfQ3Vyc29yIGM0X0N1cnNvcjo6b3BlcmF0b3IrKyAoaW50KQp7CiAgICByZXR1
cm4gYzRfQ3Vyc29yICgqX3NlcSwgX2luZGV4KyspOwp9CgogCmlubGluZSAgYzRfQ3Vyc29yJiBj
NF9DdXJzb3I6Om9wZXJhdG9yLS0gKCkKewogICAgLS1faW5kZXg7CiAgICByZXR1cm4gKnRoaXM7
Cn0KCiAKaW5saW5lICBjNF9DdXJzb3IgYzRfQ3Vyc29yOjpvcGVyYXRvci0tIChpbnQpCnsKICAg
IHJldHVybiBjNF9DdXJzb3IgKCpfc2VxLCBfaW5kZXgtLSk7Cn0KCiAKaW5saW5lICBjNF9DdXJz
b3ImIGM0X0N1cnNvcjo6b3BlcmF0b3IrPSAoaW50IG9mZnNldF8pCnsKICAgIF9pbmRleCArPSBv
ZmZzZXRfOwogICAgcmV0dXJuICp0aGlzOwp9CgogCmlubGluZSAgYzRfQ3Vyc29yJiBjNF9DdXJz
b3I6Om9wZXJhdG9yLT0gKGludCBvZmZzZXRfKQp7CiAgICBfaW5kZXggLT0gb2Zmc2V0XzsKICAg
IHJldHVybiAqdGhpczsKfQoKIAppbmxpbmUgIGM0X0N1cnNvciBjNF9DdXJzb3I6Om9wZXJhdG9y
LSAoaW50IG9mZnNldF8pIGNvbnN0CnsKICAgIHJldHVybiBjNF9DdXJzb3IgKCpfc2VxLCBfaW5k
ZXggLSBvZmZzZXRfKTsKfQoKIAppbmxpbmUgIGludCBjNF9DdXJzb3I6Om9wZXJhdG9yLSAoYzRf
Q3Vyc29yIGN1cnNvcl8pIGNvbnN0CnsKICAgIHJldHVybiBfaW5kZXggLSBjdXJzb3JfLl9pbmRl
eDsKfQoKIAppbmxpbmUgIGM0X0N1cnNvciBvcGVyYXRvcisgKGM0X0N1cnNvciBjdXJzb3JfLCBp
bnQgb2Zmc2V0XykKewogICAgcmV0dXJuIGM0X0N1cnNvciAoKmN1cnNvcl8uX3NlcSwgY3Vyc29y
Xy5faW5kZXggKyBvZmZzZXRfKTsKfQoKIAppbmxpbmUgIGM0X0N1cnNvciBvcGVyYXRvcisgKGlu
dCBvZmZzZXRfLCBjNF9DdXJzb3IgY3Vyc29yXykKewogICAgcmV0dXJuIGN1cnNvcl8gKyBvZmZz
ZXRfOwp9CgppbmxpbmUgIGJvb2wgb3BlcmF0b3I9PSAoYzRfQ3Vyc29yIGFfLCBjNF9DdXJzb3Ig
Yl8pCnsKICAgIHJldHVybiBhXy5fc2VxID09IGJfLl9zZXEgJiYgYV8uX2luZGV4ID09IGJfLl9p
bmRleDsKfQoKaW5saW5lICBib29sIG9wZXJhdG9yIT0gKGM0X0N1cnNvciBhXywgYzRfQ3Vyc29y
IGJfKQp7CiAgICByZXR1cm4gIShhXyA9PSBiXyk7Cn0KCmlubGluZSAgYm9vbCBvcGVyYXRvcjwg
KGM0X0N1cnNvciBhXywgYzRfQ3Vyc29yIGJfKQp7CiAgICByZXR1cm4gYV8uX3NlcSA8IGJfLl9z
ZXEgfHwKICAgICAgICAgICAgYV8uX3NlcSA9PSBiXy5fc2VxICYmIGFfLl9pbmRleCA8IGJfLl9p
bmRleDsKfQoKaW5saW5lICBib29sIG9wZXJhdG9yPiAoYzRfQ3Vyc29yIGFfLCBjNF9DdXJzb3Ig
Yl8pCnsKICAgIHJldHVybiBiXyA8IGFfOwp9CgppbmxpbmUgIGJvb2wgb3BlcmF0b3I8PSAoYzRf
Q3Vyc29yIGFfLCBjNF9DdXJzb3IgYl8pCnsKICAgIHJldHVybiAhKGJfIDwgYV8pOwp9Cgppbmxp
bmUgIGJvb2wgb3BlcmF0b3I+PSAoYzRfQ3Vyc29yIGFfLCBjNF9DdXJzb3IgYl8pCnsgICAgICAg
ICAgICAgICAgICAgICAKICAgIHJldHVybiAhKGFfIDwgYl8pOwp9CgogCiAKCmlubGluZSAgYzRf
Um93UmVmOjpjNF9Sb3dSZWYgKGM0X0N1cnNvciBjdXJzb3JfKQogICAgOiBfY3Vyc29yIChjdXJz
b3JfKQp7Cn0KCmlubGluZSAgYzRfUm93UmVmIGM0X1Jvd1JlZjo6b3BlcmF0b3I9IChjb25zdCBj
NF9Sb3dSZWYmIHJvd1JlZl8pCnsKICAgIGlmIChfY3Vyc29yICE9IHJvd1JlZl8uX2N1cnNvcikK
ICAgICAgICBfY3Vyc29yLl9zZXEtPlNldEF0KF9jdXJzb3IuX2luZGV4LCAmcm93UmVmXyk7CiAg
ICAKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lICBjNF9WaWV3IGM0X1Jvd1JlZjo6Q29udGFp
bmVyKCkgY29uc3QKewogICAgcmV0dXJuIF9jdXJzb3IuX3NlcTsKfQoKaW5saW5lICBib29sIG9w
ZXJhdG9yPT0gKGNvbnN0IGM0X1Jvd1JlZiYgYV8sIGNvbnN0IGM0X1Jvd1JlZiYgYl8pCnsKICAg
IHJldHVybiAoJmFfKS5fc2VxLT5Db21wYXJlKCgmYV8pLl9pbmRleCwgJmJfKSA9PSAwOwp9ICAg
ICAgICAgICAgICAgCgppbmxpbmUgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgYzRfUm93UmVmJiBh
XywgY29uc3QgYzRfUm93UmVmJiBiXykKewogICAgcmV0dXJuICEoYV8gPT0gYl8pOwp9Cgppbmxp
bmUgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBjNF9Sb3dSZWYmIGFfLCBjb25zdCBjNF9Sb3dSZWYm
IGJfKQp7CiAgICAgICAgIAogICAgcmV0dXJuICgmYV8pLl9zZXEtPkNvbXBhcmUoKCZhXykuX2lu
ZGV4LCAmYl8pIDwgMDsKfSAgICAgICAgICAgICAgIAoKaW5saW5lICBib29sIG9wZXJhdG9yPiAo
Y29uc3QgYzRfUm93UmVmJiBhXywgY29uc3QgYzRfUm93UmVmJiBiXykKewogICAgICAgICAKICAg
IHJldHVybiAoJmFfKS5fc2VxLT5Db21wYXJlKCgmYV8pLl9pbmRleCwgJmJfKSA+IDA7Cn0KCmlu
bGluZSAgYm9vbCBvcGVyYXRvcjw9IChjb25zdCBjNF9Sb3dSZWYmIGFfLCBjb25zdCBjNF9Sb3dS
ZWYmIGJfKQp7CiAgICByZXR1cm4gIShhXyA+IGJfKTsKfQoKaW5saW5lICBib29sIG9wZXJhdG9y
Pj0gKGNvbnN0IGM0X1Jvd1JlZiYgYV8sIGNvbnN0IGM0X1Jvd1JlZiYgYl8pCnsgICAgICAgICAg
ICAgICAgICAgICAKICAgIHJldHVybiAhKGFfIDwgYl8pOwp9CgogCiAKCiAgICAgCmlubGluZSAg
YzRfQnl0ZXM6OmM0X0J5dGVzICgpCiAgICA6IF9zaXplICgwKSwgX2NvcHkgKGZhbHNlKQp7IAog
ICAgX2NvbnRlbnRzID0gMDsgIAp9CgogICAgIAppbmxpbmUgIGM0X0J5dGVzOjpjNF9CeXRlcyAo
Y29uc3Qgdm9pZCogYnVmXywgaW50IGxlbl8pCiAgICA6IF9zaXplIChsZW5fKSwgX2NvcHkgKGZh
bHNlKQp7CiAgICBfY29udGVudHMgPSAodDRfYnl0ZSopIGJ1Zl87ICAKfQoKIAppbmxpbmUgIGNv
bnN0IHQ0X2J5dGUqIGM0X0J5dGVzOjpDb250ZW50cygpIGNvbnN0CnsKICAgIHJldHVybiBfY29u
dGVudHM7Cn0KCiAKaW5saW5lICBpbnQgYzRfQnl0ZXM6OlNpemUoKSBjb25zdAp7CiAgICByZXR1
cm4gX3NpemU7Cn0KCmlubGluZSAgdm9pZCBjNF9CeXRlczo6X0xvc2VDb3B5KCkKewogICAgaWYg
KF9jb3B5KQogICAgICAgIGRlbGV0ZSBbXSAoY2hhciopIF9jb250ZW50czsKfQoKIAppbmxpbmUg
IGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgYzRfQnl0ZXMmIGFfLCBjb25zdCBjNF9CeXRlcyYgYl8p
CnsKICAgIHJldHVybiAhKGFfID09IGJfKTsKfQoKIAppbmxpbmUgIGM0X0J5dGVzOjp+YzRfQnl0
ZXMgKCkKewogICAgX0xvc2VDb3B5KCk7Cn0KICAgIAogCiAKCmlubGluZSAgYzRfUmVmZXJlbmNl
OjpjNF9SZWZlcmVuY2UgKGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVmXywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGM0X1Byb3BlcnR5JiBwcm9wXykKICAgIDog
X2N1cnNvciAoJnJvd1JlZl8pLCBfcHJvcGVydHkgKHByb3BfKQp7Cn0KCmlubGluZSAgaW50IGM0
X1JlZmVyZW5jZTo6R2V0U2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiBfY3Vyc29yLl9zZXEtPkl0
ZW1TaXplKF9jdXJzb3IuX2luZGV4LCBfcHJvcGVydHkuR2V0SWQoKSk7Cn0KCmlubGluZSAgYm9v
bCBjNF9SZWZlcmVuY2U6OkdldERhdGEoYzRfQnl0ZXMmIGJ1Zl8pIGNvbnN0CnsKICAgIHJldHVy
biBfY3Vyc29yLl9zZXEtPkdldChfY3Vyc29yLl9pbmRleCwgX3Byb3BlcnR5LkdldElkKCksIGJ1
Zl8pOwp9CgppbmxpbmUgIHZvaWQgYzRfUmVmZXJlbmNlOjpTZXREYXRhKGNvbnN0IGM0X0J5dGVz
JiBidWZfKSBjb25zdAp7CiAgICBfY3Vyc29yLl9zZXEtPlNldChfY3Vyc29yLl9pbmRleCwgX3By
b3BlcnR5LCBidWZfKTsKfQoKaW5saW5lICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGM0X1JlZmVy
ZW5jZSYgYV8sIGNvbnN0IGM0X1JlZmVyZW5jZSYgYl8pCnsKICAgIHJldHVybiAhKGFfID09IGJf
KTsKfQoKIAogCgppbmxpbmUgIGM0X0ludFJlZjo6YzRfSW50UmVmIChjb25zdCBjNF9SZWZlcmVu
Y2UmIHZhbHVlXykKICAgIDogYzRfUmVmZXJlbmNlICh2YWx1ZV8pCnsKfQoKIAoKIAogCgppbmxp
bmUgIGM0X0xvbmdSZWY6OmM0X0xvbmdSZWYgKGNvbnN0IGM0X1JlZmVyZW5jZSYgdmFsdWVfKQog
ICAgOiBjNF9SZWZlcmVuY2UgKHZhbHVlXykKewp9CgogCiAKCmlubGluZSAgYzRfRmxvYXRSZWY6
OmM0X0Zsb2F0UmVmIChjb25zdCBjNF9SZWZlcmVuY2UmIHZhbHVlXykKICAgIDogYzRfUmVmZXJl
bmNlICh2YWx1ZV8pCnsKfQoKIAogCgppbmxpbmUgIGM0X0RvdWJsZVJlZjo6YzRfRG91YmxlUmVm
IChjb25zdCBjNF9SZWZlcmVuY2UmIHZhbHVlXykKICAgIDogYzRfUmVmZXJlbmNlICh2YWx1ZV8p
CnsKfQoKIAoKIAogCgppbmxpbmUgIGM0X0J5dGVzUmVmOjpjNF9CeXRlc1JlZiAoY29uc3QgYzRf
UmVmZXJlbmNlJiB2YWx1ZV8pCiAgICA6IGM0X1JlZmVyZW5jZSAodmFsdWVfKQp7Cn0KCiAKIAoK
aW5saW5lICBjNF9TdHJpbmdSZWY6OmM0X1N0cmluZ1JlZiAoY29uc3QgYzRfUmVmZXJlbmNlJiB2
YWx1ZV8pCiAgICA6IGM0X1JlZmVyZW5jZSAodmFsdWVfKQp7Cn0KCiAKIAoKaW5saW5lICBjNF9W
aWV3UmVmOjpjNF9WaWV3UmVmIChjb25zdCBjNF9SZWZlcmVuY2UmIHZhbHVlXykKICAgIDogYzRf
UmVmZXJlbmNlICh2YWx1ZV8pCnsKfQoKIAogCgppbmxpbmUgIGM0X1Byb3BlcnR5OjpjNF9Qcm9w
ZXJ0eSAoY2hhciB0eXBlXywgaW50IGlkXykKICAgIDogX2lkICgoc2hvcnQpIGlkXyksIF90eXBl
ICh0eXBlXykKewp9CgogICAgIAppbmxpbmUgIGM0X1JlZmVyZW5jZSBjNF9Qcm9wZXJ0eTo6b3Bl
cmF0b3IoKSAoY29uc3QgYzRfUm93UmVmJiByb3dSZWZfKSBjb25zdAp7CiAgICByZXR1cm4gYzRf
UmVmZXJlbmNlIChyb3dSZWZfLCAqdGhpcyk7Cn0KCiAgICAgCmlubGluZSAgYzRfVmlldyBjNF9Q
cm9wZXJ0eTo6b3BlcmF0b3IsIChjb25zdCBjNF9Qcm9wZXJ0eSYgcHJvcF8pIGNvbnN0CnsKICAg
IHJldHVybiBjNF9WaWV3ICgqdGhpcyksIHByb3BfOwp9CgogICAgIAppbmxpbmUgIGNoYXIgYzRf
UHJvcGVydHk6OlR5cGUoKSBjb25zdAp7CiAgICByZXR1cm4gX3R5cGU7Cn0KCiAKIAoKaW5saW5l
ICBjNF9JbnRQcm9wOjpjNF9JbnRQcm9wIChjb25zdCBjaGFyKiBuYW1lXykgCiAgICA6IGM0X1By
b3BlcnR5ICgnSScsIG5hbWVfKQp7Cn0KCmlubGluZSAgYzRfSW50UHJvcDo6fmM0X0ludFByb3Ag
KCkKewp9CgppbmxpbmUgIGM0X0ludFJlZiBjNF9JbnRQcm9wOjpvcGVyYXRvcigpIChjb25zdCBj
NF9Sb3dSZWYmIHJvd1JlZl8pIGNvbnN0CnsKICAgIHJldHVybiBjNF9SZWZlcmVuY2UgKHJvd1Jl
Zl8sICp0aGlzKTsKfQoKaW5saW5lICB0NF9pMzIgYzRfSW50UHJvcDo6R2V0KGNvbnN0IGM0X1Jv
d1JlZiYgcm93UmVmXykgY29uc3QKewogICAgcmV0dXJuIG9wZXJhdG9yKCkgKHJvd1JlZl8pOwp9
CgppbmxpbmUgIHZvaWQgYzRfSW50UHJvcDo6U2V0KGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVmXywg
dDRfaTMyIHZhbHVlXykgY29uc3QKewogICAgb3BlcmF0b3IoKSAocm93UmVmXykgPSB2YWx1ZV87
Cn0KCmlubGluZSAgYzRfUm93IGM0X0ludFByb3A6OkFzUm93KHQ0X2kzMiB2YWx1ZV8pIGNvbnN0
CnsKICAgIGM0X1JvdyByb3c7CiAgICBvcGVyYXRvcigpIChyb3cpID0gdmFsdWVfOwogICAgcmV0
dXJuIHJvdzsKfQogICAgCmlubGluZSAgYzRfUm93IGM0X0ludFByb3A6Om9wZXJhdG9yW10gKHQ0
X2kzMiB2YWx1ZV8pIGNvbnN0CnsKICAgIHJldHVybiBBc1Jvdyh2YWx1ZV8pOwp9CiAgICAKIAoK
IAogCgppbmxpbmUgIGM0X0xvbmdQcm9wOjpjNF9Mb25nUHJvcCAoY29uc3QgY2hhciogbmFtZV8p
IAogICAgOiBjNF9Qcm9wZXJ0eSAoJ0wnLCBuYW1lXykKewp9CgppbmxpbmUgIGM0X0xvbmdQcm9w
Ojp+YzRfTG9uZ1Byb3AgKCkKewp9CgppbmxpbmUgIGM0X0xvbmdSZWYgYzRfTG9uZ1Byb3A6Om9w
ZXJhdG9yKCkgKGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVmXykgY29uc3QKewogICAgcmV0dXJuIGM0
X1JlZmVyZW5jZSAocm93UmVmXywgKnRoaXMpOwp9CgppbmxpbmUgIHQ0X2k2NCBjNF9Mb25nUHJv
cDo6R2V0KGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVmXykgY29uc3QKewogICAgcmV0dXJuIG9wZXJh
dG9yKCkgKHJvd1JlZl8pOwp9CgppbmxpbmUgIHZvaWQgYzRfTG9uZ1Byb3A6OlNldChjb25zdCBj
NF9Sb3dSZWYmIHJvd1JlZl8sIHQ0X2k2NCB2YWx1ZV8pIGNvbnN0CnsKICAgIG9wZXJhdG9yKCkg
KHJvd1JlZl8pID0gdmFsdWVfOwp9CgppbmxpbmUgIGM0X1JvdyBjNF9Mb25nUHJvcDo6QXNSb3co
dDRfaTY0IHZhbHVlXykgY29uc3QKewogICAgYzRfUm93IHJvdzsKICAgIG9wZXJhdG9yKCkgKHJv
dykgPSB2YWx1ZV87CiAgICByZXR1cm4gcm93Owp9CiAgICAKaW5saW5lICBjNF9Sb3cgYzRfTG9u
Z1Byb3A6Om9wZXJhdG9yW10gKHQ0X2k2NCB2YWx1ZV8pIGNvbnN0CnsKICAgIHJldHVybiBBc1Jv
dyh2YWx1ZV8pOwp9CiAgICAKIAogCgppbmxpbmUgIGM0X0Zsb2F0UHJvcDo6YzRfRmxvYXRQcm9w
IChjb25zdCBjaGFyKiBuYW1lXykgCiAgICA6IGM0X1Byb3BlcnR5ICgnRicsIG5hbWVfKQp7Cn0K
CmlubGluZSAgYzRfRmxvYXRQcm9wOjp+YzRfRmxvYXRQcm9wICgpCnsKfQoKaW5saW5lICBjNF9G
bG9hdFJlZiBjNF9GbG9hdFByb3A6Om9wZXJhdG9yKCkgKGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVm
XykgY29uc3QKewogICAgcmV0dXJuIGM0X1JlZmVyZW5jZSAocm93UmVmXywgKnRoaXMpOwp9Cgpp
bmxpbmUgIGRvdWJsZSBjNF9GbG9hdFByb3A6OkdldChjb25zdCBjNF9Sb3dSZWYmIHJvd1JlZl8p
IGNvbnN0CnsKICAgIHJldHVybiBvcGVyYXRvcigpIChyb3dSZWZfKTsKfQoKaW5saW5lICB2b2lk
IGM0X0Zsb2F0UHJvcDo6U2V0KGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVmXywgZG91YmxlIHZhbHVl
XykgY29uc3QKewogICAgb3BlcmF0b3IoKSAocm93UmVmXykgPSB2YWx1ZV87Cn0KCmlubGluZSAg
YzRfUm93IGM0X0Zsb2F0UHJvcDo6QXNSb3coZG91YmxlIHZhbHVlXykgY29uc3QKewogICAgYzRf
Um93IHJvdzsKICAgIG9wZXJhdG9yKCkgKHJvdykgPSB2YWx1ZV87CiAgICByZXR1cm4gcm93Owp9
CiAgICAKaW5saW5lICBjNF9Sb3cgYzRfRmxvYXRQcm9wOjpvcGVyYXRvcltdIChkb3VibGUgdmFs
dWVfKSBjb25zdAp7CiAgICByZXR1cm4gQXNSb3codmFsdWVfKTsKfQogICAgCiAKIAoKaW5saW5l
ICBjNF9Eb3VibGVQcm9wOjpjNF9Eb3VibGVQcm9wIChjb25zdCBjaGFyKiBuYW1lXykgCiAgICA6
IGM0X1Byb3BlcnR5ICgnRCcsIG5hbWVfKQp7Cn0KCmlubGluZSAgYzRfRG91YmxlUHJvcDo6fmM0
X0RvdWJsZVByb3AgKCkKewp9CgppbmxpbmUgIGM0X0RvdWJsZVJlZiBjNF9Eb3VibGVQcm9wOjpv
cGVyYXRvcigpIChjb25zdCBjNF9Sb3dSZWYmIHJvd1JlZl8pIGNvbnN0CnsKICAgIHJldHVybiBj
NF9SZWZlcmVuY2UgKHJvd1JlZl8sICp0aGlzKTsKfQoKaW5saW5lICBkb3VibGUgYzRfRG91Ymxl
UHJvcDo6R2V0KGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVmXykgY29uc3QKewogICAgcmV0dXJuIG9w
ZXJhdG9yKCkgKHJvd1JlZl8pOwp9CgppbmxpbmUgIHZvaWQgYzRfRG91YmxlUHJvcDo6U2V0KGNv
bnN0IGM0X1Jvd1JlZiYgcm93UmVmXywgZG91YmxlIHZhbHVlXykgY29uc3QKewogICAgb3BlcmF0
b3IoKSAocm93UmVmXykgPSB2YWx1ZV87Cn0KCmlubGluZSAgYzRfUm93IGM0X0RvdWJsZVByb3A6
OkFzUm93KGRvdWJsZSB2YWx1ZV8pIGNvbnN0CnsKICAgIGM0X1JvdyByb3c7CiAgICBvcGVyYXRv
cigpIChyb3cpID0gdmFsdWVfOwogICAgcmV0dXJuIHJvdzsKfQogICAgCmlubGluZSAgYzRfUm93
IGM0X0RvdWJsZVByb3A6Om9wZXJhdG9yW10gKGRvdWJsZSB2YWx1ZV8pIGNvbnN0CnsKICAgIHJl
dHVybiBBc1Jvdyh2YWx1ZV8pOwp9CiAgICAKIAoKIAogCgppbmxpbmUgIGM0X0J5dGVzUHJvcDo6
YzRfQnl0ZXNQcm9wIChjb25zdCBjaGFyKiBuYW1lXykgCiAgICA6IGM0X1Byb3BlcnR5ICgnQics
IG5hbWVfKQp7Cn0KICAgIAppbmxpbmUgIGM0X0J5dGVzUHJvcDo6fmM0X0J5dGVzUHJvcCAoKQp7
Cn0KCmlubGluZSAgYzRfQnl0ZXNSZWYgYzRfQnl0ZXNQcm9wOjpvcGVyYXRvcigpIChjb25zdCBj
NF9Sb3dSZWYmIHJvd1JlZl8pIGNvbnN0CnsKICAgIHJldHVybiBjNF9SZWZlcmVuY2UgKHJvd1Jl
Zl8sICp0aGlzKTsKfQoKaW5saW5lICBjNF9CeXRlcyBjNF9CeXRlc1Byb3A6OkdldChjb25zdCBj
NF9Sb3dSZWYmIHJvd1JlZl8pIGNvbnN0CnsKICAgIHJldHVybiBvcGVyYXRvcigpIChyb3dSZWZf
KTsKfQoKaW5saW5lICB2b2lkIGM0X0J5dGVzUHJvcDo6U2V0KGNvbnN0IGM0X1Jvd1JlZiYgcm93
UmVmXywgY29uc3QgYzRfQnl0ZXMmIHZhbHVlXykgY29uc3QKewogICAgb3BlcmF0b3IoKSAocm93
UmVmXykgPSB2YWx1ZV87Cn0KCmlubGluZSAgYzRfUm93IGM0X0J5dGVzUHJvcDo6QXNSb3coY29u
c3QgYzRfQnl0ZXMmIHZhbHVlXykgY29uc3QKewogICAgYzRfUm93IHJvdzsKICAgIG9wZXJhdG9y
KCkgKHJvdykgPSB2YWx1ZV87CiAgICByZXR1cm4gcm93Owp9CiAgICAKaW5saW5lICBjNF9Sb3cg
YzRfQnl0ZXNQcm9wOjpvcGVyYXRvcltdIChjb25zdCBjNF9CeXRlcyYgdmFsdWVfKSBjb25zdAp7
CiAgICByZXR1cm4gQXNSb3codmFsdWVfKTsKfQogICAgCiAKIAoKaW5saW5lICBjNF9TdHJpbmdQ
cm9wOjpjNF9TdHJpbmdQcm9wIChjb25zdCBjaGFyKiBuYW1lXykgCiAgICA6IGM0X1Byb3BlcnR5
ICgnUycsIG5hbWVfKQp7Cn0KICAgIAppbmxpbmUgIGM0X1N0cmluZ1Byb3A6On5jNF9TdHJpbmdQ
cm9wICgpCnsKfQoKaW5saW5lICBjNF9TdHJpbmdSZWYgYzRfU3RyaW5nUHJvcDo6b3BlcmF0b3Io
KSAoY29uc3QgYzRfUm93UmVmJiByb3dSZWZfKSBjb25zdAp7CiAgICByZXR1cm4gYzRfUmVmZXJl
bmNlIChyb3dSZWZfLCAqdGhpcyk7Cn0KCmlubGluZSAgY29uc3QgY2hhciogYzRfU3RyaW5nUHJv
cDo6R2V0KGNvbnN0IGM0X1Jvd1JlZiYgcm93UmVmXykgY29uc3QKewogICAgcmV0dXJuIG9wZXJh
dG9yKCkgKHJvd1JlZl8pOwp9CgppbmxpbmUgIHZvaWQgYzRfU3RyaW5nUHJvcDo6U2V0KGNvbnN0
IGM0X1Jvd1JlZiYgcm93UmVmXywgY29uc3QgY2hhciogdmFsdWVfKSBjb25zdAp7CiAgICBvcGVy
YXRvcigpIChyb3dSZWZfKSA9IHZhbHVlXzsKfQoKaW5saW5lICBjNF9Sb3cgYzRfU3RyaW5nUHJv
cDo6QXNSb3coY29uc3QgY2hhciogdmFsdWVfKSBjb25zdAp7CiAgICBjNF9Sb3cgcm93OwogICAg
b3BlcmF0b3IoKSAocm93KSA9IHZhbHVlXzsKICAgIHJldHVybiByb3c7Cn0KICAgIAppbmxpbmUg
IGM0X1JvdyBjNF9TdHJpbmdQcm9wOjpvcGVyYXRvcltdIChjb25zdCBjaGFyKiB2YWx1ZV8pIGNv
bnN0CnsKICAgIHJldHVybiBBc1Jvdyh2YWx1ZV8pOwp9CiAgICAKIAogCgppbmxpbmUgIGM0X1Zp
ZXdQcm9wOjpjNF9WaWV3UHJvcCAoY29uc3QgY2hhciogbmFtZV8pCiAgICA6IGM0X1Byb3BlcnR5
ICgnVicsIG5hbWVfKQp7Cn0KICAgIAppbmxpbmUgIGM0X1ZpZXdQcm9wOjp+YzRfVmlld1Byb3Ag
KCkKewp9CgppbmxpbmUgIGM0X1ZpZXdSZWYgYzRfVmlld1Byb3A6Om9wZXJhdG9yKCkgKGNvbnN0
IGM0X1Jvd1JlZiYgcm93UmVmXykgY29uc3QKewogICAgcmV0dXJuIGM0X1JlZmVyZW5jZSAocm93
UmVmXywgKnRoaXMpOwp9CgppbmxpbmUgIGM0X1ZpZXcgYzRfVmlld1Byb3A6OkdldChjb25zdCBj
NF9Sb3dSZWYmIHJvd1JlZl8pIGNvbnN0CnsKICAgIHJldHVybiBvcGVyYXRvcigpIChyb3dSZWZf
KTsKfQoKaW5saW5lICB2b2lkIGM0X1ZpZXdQcm9wOjpTZXQoY29uc3QgYzRfUm93UmVmJiByb3dS
ZWZfLCBjb25zdCBjNF9WaWV3JiB2YWx1ZV8pIGNvbnN0CnsKICAgIG9wZXJhdG9yKCkgKHJvd1Jl
Zl8pID0gdmFsdWVfOwp9CgppbmxpbmUgIGM0X1JvdyBjNF9WaWV3UHJvcDo6QXNSb3coY29uc3Qg
YzRfVmlldyYgdmFsdWVfKSBjb25zdAp7CiAgICBjNF9Sb3cgcm93OwogICAgb3BlcmF0b3IoKSAo
cm93KSA9IHZhbHVlXzsKICAgIHJldHVybiByb3c7Cn0KICAgIAppbmxpbmUgIGM0X1JvdyBjNF9W
aWV3UHJvcDo6b3BlcmF0b3JbXSAoY29uc3QgYzRfVmlldyYgdmFsdWVfKSBjb25zdAp7CiAgICBy
ZXR1cm4gQXNSb3codmFsdWVfKTsKfQogICAgCiAKIAoKICAgICAKaW5saW5lICBib29sIGM0X1N0
cmF0ZWd5OjpJc1ZhbGlkKCkgY29uc3QKeyAKICAgIHJldHVybiBmYWxzZTsgCn0KCiAKIAoKaW5s
aW5lICBjNF9DdXN0b21WaWV3ZXI6OmM0X0N1c3RvbVZpZXdlcigpCnsKfQoKIAogCgppbmxpbmUg
IGM0X0RlcGVuZGVuY2llcyogYzRfU2VxdWVuY2U6OkdldERlcGVuZGVuY2llcygpIGNvbnN0CnsK
ICAgIHJldHVybiBfZGVwZW5kZW5jaWVzOwp9CgogCiAKIAogCmlubGluZSAgYzRfUm93UmVmIGM0
X0N1cnNvcjo6b3BlcmF0b3IqICgpIGNvbnN0CnsKICAgIHJldHVybiAqKGM0X1Jvd1JlZiopIHRo
aXM7ICAKfQoKIAppbmxpbmUgIGM0X1Jvd1JlZiBjNF9DdXJzb3I6Om9wZXJhdG9yW10gKGludCBv
ZmZzZXRfKSBjb25zdAp7CiAgICByZXR1cm4gKigqdGhpcyArIG9mZnNldF8pOwp9CgogCmlubGlu
ZSAgYzRfUm93UmVmIGM0X1ZpZXc6OkdldEF0KGludCBpbmRleF8pIGNvbnN0CnsKICAgIHJldHVy
biAqIGM0X0N1cnNvciAoKl9zZXEsIGluZGV4Xyk7Cn0KCiAKCgoKaW5saW5lICBjNF9Sb3dSZWYg
YzRfVmlldzo6b3BlcmF0b3JbXSAoCglpbnQgaW5kZXhfICAKICAgICkgY29uc3QKewogICAgcmV0
dXJuIEdldEF0KGluZGV4Xyk7Cn0KICAgIAogCgoKCmlubGluZSAgYzRfUm93UmVmIGM0X1ZpZXc6
OkVsZW1lbnRBdCgKCWludCBpbmRleF8gIAogICAgKQp7CiAgICByZXR1cm4gR2V0QXQoaW5kZXhf
KTsKfQoKIAojIDEwMzAgIi4uL3VuaXgvLi4vaW5jbHVkZS9tazQuaCIgMgoKCgogCgoKIyAxNjcg
Ii4uL3VuaXgvLi4vc3JjL2hlYWRlci5oIiAyCgoKCgoKCgojIDEgIi4uL3VuaXgvLi4vc3JjL3Vu
aXYuaCIgMQogCgogCgoKCgoKIyAxICIuLi91bml4Ly4uL2luY2x1ZGUvbWs0c3RyLmgiIDEKIAoK
IAoKCgoKCgogCgojIDk0ICIuLi91bml4Ly4uL2luY2x1ZGUvbWs0c3RyLmgiCgoKICAgICAKY2xh
c3MgYzRfU3RyaW5nCnsKcHVibGljOgogICAgYzRfU3RyaW5nICgpOwogICAgYzRfU3RyaW5nIChj
aGFyIGNoLCBpbnQgbkR1cCA9MSk7CiAgICBjNF9TdHJpbmcgKGNvbnN0IGNoYXIqIHN0cik7CiAg
ICBjNF9TdHJpbmcgKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN0cik7CiAgICBjNF9TdHJpbmcgKGNv
bnN0IHZvaWQqIHB0ciwgaW50IGxlbik7CiAgICBjNF9TdHJpbmcgKGNvbnN0IGM0X1N0cmluZyYg
cyk7CiAgICB+YzRfU3RyaW5nICgpOwoKICAgIGNvbnN0IGM0X1N0cmluZyYgb3BlcmF0b3I9IChj
b25zdCBjNF9TdHJpbmcmKTsKCiAgICBvcGVyYXRvciBjb25zdCBjaGFyKiAoKSBjb25zdDsKICAg
IG9wZXJhdG9yIGNvbnN0IHVuc2lnbmVkIGNoYXIqICgpIGNvbnN0OwogICAgCiAgICBjaGFyIG9w
ZXJhdG9yW10gKGludCBpKSBjb25zdDsKICAgIAogICAgZnJpZW5kIGM0X1N0cmluZyBvcGVyYXRv
cisgKGNvbnN0IGM0X1N0cmluZyYsIGNvbnN0IGM0X1N0cmluZyYpOwogICAgZnJpZW5kIGM0X1N0
cmluZyBvcGVyYXRvcisgKGNvbnN0IGM0X1N0cmluZyYsIGNvbnN0IGNoYXIqKTsKICAgIGZyaWVu
ZCBjNF9TdHJpbmcgb3BlcmF0b3IrIChjb25zdCBjaGFyKiwgY29uc3QgYzRfU3RyaW5nJik7CiAK
IAoKICAgIGNvbnN0IGM0X1N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgYzRfU3RyaW5nJiBzKTsK
ICAgIGNvbnN0IGM0X1N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhciogcyk7CiAKICAgIAog
ICAgaW50IEdldExlbmd0aCgpIGNvbnN0OwogICAgYm9vbCBJc0VtcHR5KCkgY29uc3Q7CiAgICB2
b2lkIEVtcHR5KCk7ICAKICAgIAogICAgYzRfU3RyaW5nIE1pZChpbnQgbkZpcnN0LCBpbnQgbkNv
dW50ID0yNTAwMCkgY29uc3Q7CiAgICBjNF9TdHJpbmcgTGVmdChpbnQgbkNvdW50KSBjb25zdDsg
IAogICAgYzRfU3RyaW5nIFJpZ2h0KGludCBuQ291bnQpIGNvbnN0OyAgCiAgICAgICAgICAgICAg
ICAgICAgCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBjNF9TdHJpbmcmLCBjb25z
dCBjNF9TdHJpbmcmKTsgIAogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgYzRfU3Ry
aW5nJiwgY29uc3QgYzRfU3RyaW5nJik7ICAKICAgIAogICAgICAgICAKICAgICAgICAKICAgIGlu
dCBDb21wYXJlKGNvbnN0IGNoYXIqIHN0cikgY29uc3Q7ICAKICAgIGludCBDb21wYXJlTm9DYXNl
KGNvbnN0IGNoYXIqIHN0cikgY29uc3Q7ICAKICAgIAogICAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0
IGM0X1N0cmluZyYgc3RyKSBjb25zdDsKCiAgICBpbnQgRmluZChjaGFyIGNoKSBjb25zdDsgIAog
ICAgaW50IFJldmVyc2VGaW5kKGNoYXIgY2gpIGNvbnN0OyAgCiAgICBpbnQgRmluZE9uZU9mKGNv
bnN0IGNoYXIqIHNldCkgY29uc3Q7ICAKICAgIAogICAgaW50IEZpbmQoY29uc3QgY2hhciogc3Vi
KSBjb25zdDsgIAogICAgCiAgICBjNF9TdHJpbmcgU3BhbkluY2x1ZGluZyhjb25zdCBjaGFyKiBz
ZXQpIGNvbnN0OyAgCiAgICBjNF9TdHJpbmcgU3BhbkV4Y2x1ZGluZyhjb25zdCBjaGFyKiBzZXQp
IGNvbnN0OyAgCiAgICAKcHJpdmF0ZToKICAgIHZvaWQgSW5pdChjb25zdCB2b2lkKiBwLCBpbnQg
bik7CiAgICBjb25zdCBjaGFyKiBEYXRhKCkgY29uc3Q7CiAgICBpbnQgRnVsbExlbmd0aCgpIGNv
bnN0OwogICAgCiAgICB1bnNpZ25lZCBjaGFyKiBfdmFsdWU7Cn07Cgpib29sIG9wZXJhdG9yPT0g
KGNvbnN0IGM0X1N0cmluZyYgczEsIGNvbnN0IGNoYXIqIHMyKTsKYm9vbCBvcGVyYXRvcj09IChj
b25zdCBjaGFyKiBzMSwgY29uc3QgYzRfU3RyaW5nJiBzMik7Cgpib29sIG9wZXJhdG9yIT0gKGNv
bnN0IGM0X1N0cmluZyYgczEsIGNvbnN0IGNoYXIqIHMyKTsKYm9vbCBvcGVyYXRvciE9IChjb25z
dCBjaGFyKiBzMSwgY29uc3QgYzRfU3RyaW5nJiBzMik7CgoKCiAKCgojIDEgIi4uL3VuaXgvLi4v
aW5jbHVkZS9tazRzdHIuaW5sIiAxCiAKCiAKCgoKIAogCgojIDE5MCAiLi4vdW5peC8uLi9pbmNs
dWRlL21rNHN0ci5pbmwiCgoKIAppbmxpbmUgIGM0X1N0cmluZzo6YzRfU3RyaW5nICgpCnsKICAg
IEluaXQoMCwgMCk7Cn0KCiAKaW5saW5lICBjNF9TdHJpbmc6OmM0X1N0cmluZyAoY29uc3QgdW5z
aWduZWQgY2hhciogcHRyKQp7CiAgICBJbml0KHB0ciArIDEsIHB0ciA/ICpwdHIgOiAwKTsKfQoK
IAppbmxpbmUgIGM0X1N0cmluZzo6YzRfU3RyaW5nIChjb25zdCB2b2lkKiBwdHIsIGludCBsZW4p
CnsKICAgIEluaXQocHRyLCBsZW4pOwp9CgppbmxpbmUgIGNvbnN0IGM0X1N0cmluZyYgYzRfU3Ry
aW5nOjpvcGVyYXRvcis9IChjb25zdCBjNF9TdHJpbmcmIHMpCnsKICAgIHJldHVybiAqdGhpcyA9
ICp0aGlzICsgczsKfQoKaW5saW5lICBjb25zdCBjNF9TdHJpbmcmIGM0X1N0cmluZzo6b3BlcmF0
b3IrPSAoY29uc3QgY2hhciogcykKewogICAgcmV0dXJuICp0aGlzICs9IChjNF9TdHJpbmcpIHM7
Cn0KCmlubGluZSAgY29uc3QgY2hhciogYzRfU3RyaW5nOjpEYXRhKCkgY29uc3QKewogICAgcmV0
dXJuIChjb25zdCBjaGFyKikgKF92YWx1ZSArIDIpOwp9CgppbmxpbmUgIGM0X1N0cmluZzo6b3Bl
cmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QKewogICAgcmV0dXJuIERhdGEoKTsKfQoKaW5saW5l
ICBjNF9TdHJpbmc6Om9wZXJhdG9yIGNvbnN0IHVuc2lnbmVkIGNoYXIqICgpIGNvbnN0CnsKICAg
IHJldHVybiAodW5zaWduZWQgY2hhciopIERhdGEoKSAtIDE7Cn0KCmlubGluZSAgY2hhciBjNF9T
dHJpbmc6Om9wZXJhdG9yW10gKGludCBpKSBjb25zdAp7CiAgICByZXR1cm4gRGF0YSgpW2ldOwp9
CiAgICAKaW5saW5lICBpbnQgYzRfU3RyaW5nOjpHZXRMZW5ndGgoKSBjb25zdAp7CiAgICByZXR1
cm4gX3ZhbHVlWzFdICE9IDI1NSA/IF92YWx1ZVsxXSA6IEZ1bGxMZW5ndGgoKTsKfQoKaW5saW5l
ICBib29sIGM0X1N0cmluZzo6SXNFbXB0eSgpIGNvbnN0CnsKICAgIHJldHVybiBHZXRMZW5ndGgo
KSA9PSAwOwp9CgppbmxpbmUgIHZvaWQgYzRfU3RyaW5nOjpFbXB0eSgpCnsKICAgICp0aGlzID0g
IiI7Cn0KCmlubGluZSAgYm9vbCBjNF9TdHJpbmc6Om9wZXJhdG9yPCAoY29uc3QgYzRfU3RyaW5n
JiBhKSBjb25zdAp7CiAgICByZXR1cm4gQ29tcGFyZShhKSA8IDA7Cn0KCmlubGluZSAgYzRfU3Ry
aW5nIG9wZXJhdG9yKyAoY29uc3QgY2hhciogYSwgY29uc3QgYzRfU3RyaW5nJiBiKQp7CiAgICBy
ZXR1cm4gKGM0X1N0cmluZykgYSArIGI7Cn0KCmlubGluZSAgYzRfU3RyaW5nIG9wZXJhdG9yKyAo
Y29uc3QgYzRfU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKQp7CiAgICByZXR1cm4gYSArIChjNF9T
dHJpbmcpIGI7Cn0KCmlubGluZSAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBjaGFyKiBhLCBjb25z
dCBjNF9TdHJpbmcmIGIpCnsKICAgIHJldHVybiBiLkNvbXBhcmUoYSkgPT0gMDsKfQoKaW5saW5l
ICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGM0X1N0cmluZyYgYSwgY29uc3QgY2hhciogYikKewog
ICAgcmV0dXJuIGEuQ29tcGFyZShiKSA9PSAwOwp9CgppbmxpbmUgIGJvb2wgb3BlcmF0b3IhPSAo
Y29uc3QgYzRfU3RyaW5nJiBhLCBjb25zdCBjNF9TdHJpbmcmIGIpCnsKICAgIHJldHVybiAhKGEg
PT0gYik7Cn0KCmlubGluZSAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBjaGFyKiBhLCBjb25zdCBj
NF9TdHJpbmcmIGIpCnsKICAgIHJldHVybiBiLkNvbXBhcmUoYSkgIT0gMDsKfQoKaW5saW5lICBi
b29sIG9wZXJhdG9yIT0gKGNvbnN0IGM0X1N0cmluZyYgYSwgY29uc3QgY2hhciogYikKewogICAg
cmV0dXJuIGEuQ29tcGFyZShiKSAhPSAwOwp9CgoKCiAKIyAxNzEgIi4uL3VuaXgvLi4vaW5jbHVk
ZS9tazRzdHIuaCIgMgoKCgogCgoKIyA5ICIuLi91bml4Ly4uL3NyYy91bml2LmgiIDIKCgogCgpj
bGFzcyBjNF9CYXNlQXJyYXkKewpwdWJsaWM6CiAgICBjNF9CYXNlQXJyYXkgKCk7CiAgICB+YzRf
QmFzZUFycmF5ICgpOwoKICAgIGludCBHZXRMZW5ndGgoKSBjb25zdDsKICAgIHZvaWQgU2V0TGVu
Z3RoKGludCBuTmV3U2l6ZSk7CgogICAgY29uc3Qgdm9pZCogR2V0RGF0YShpbnQgbkluZGV4KSBj
b25zdDsKICAgIHZvaWQqIEdldERhdGEoaW50IG5JbmRleCk7CgogICAgdm9pZCBHcm93KGludCBu
SW5kZXgpOwoKICAgIHZvaWQgSW5zZXJ0QXQoaW50IG5JbmRleCwgaW50IG5Db3VudCk7CiAgICB2
b2lkIFJlbW92ZUF0KGludCBuSW5kZXgsIGludCBuQ291bnQpOwoKcHJpdmF0ZToKICAgIGNoYXIq
IF9kYXRhOwogICAgaW50IF9zaXplOwogCn07CgpjbGFzcyBjNF9QdHJBcnJheQp7CnB1YmxpYzoK
ICAgIGM0X1B0ckFycmF5ICgpOwogICAgfmM0X1B0ckFycmF5ICgpOwoKICAgIGludCBHZXRTaXpl
KCkgY29uc3Q7CiAgICB2b2lkIFNldFNpemUoaW50IG5OZXdTaXplLCBpbnQgbkdyb3dCeSA9IC0x
KTsKCiAgICB2b2lkKiBHZXRBdChpbnQgbkluZGV4KSBjb25zdDsKICAgIHZvaWQgU2V0QXQoaW50
IG5JbmRleCwgY29uc3Qgdm9pZCogbmV3RWxlbWVudCk7CiAgICB2b2lkKiYgRWxlbWVudEF0KGlu
dCBuSW5kZXgpOwoKICAgIGludCBBZGQodm9pZCogbmV3RWxlbWVudCk7CgogICAgdm9pZCBJbnNl
cnRBdChpbnQgbkluZGV4LCB2b2lkKiBuZXdFbGVtZW50LCBpbnQgbkNvdW50ID0gMSk7CiAgICB2
b2lkIFJlbW92ZUF0KGludCBuSW5kZXgsIGludCBuQ291bnQgPSAxKTsKCnByaXZhdGU6CiAgICBz
dGF0aWMgaW50IE9mZihpbnQgbl8pOwoKICAgIGM0X0Jhc2VBcnJheSBfdmVjdG9yOwp9OwoKY2xh
c3MgYzRfRFdvcmRBcnJheQp7CnB1YmxpYzoKICAgIGM0X0RXb3JkQXJyYXkgKCk7CiAgICB+YzRf
RFdvcmRBcnJheSAoKTsKCiAgICBpbnQgR2V0U2l6ZSgpIGNvbnN0OwogICAgdm9pZCBTZXRTaXpl
KGludCBuTmV3U2l6ZSwgaW50IG5Hcm93QnkgPSAtMSk7CgogICAgdDRfaTMyIEdldEF0KGludCBu
SW5kZXgpIGNvbnN0OwogICAgdm9pZCBTZXRBdChpbnQgbkluZGV4LCB0NF9pMzIgbmV3RWxlbWVu
dCk7CiAgICB0NF9pMzImIEVsZW1lbnRBdChpbnQgbkluZGV4KTsKCiAgICBpbnQgQWRkKHQ0X2kz
MiBuZXdFbGVtZW50KTsKCiAgICB2b2lkIEluc2VydEF0KGludCBuSW5kZXgsIHQ0X2kzMiBuZXdF
bGVtZW50LCBpbnQgbkNvdW50ID0gMSk7CiAgICB2b2lkIFJlbW92ZUF0KGludCBuSW5kZXgsIGlu
dCBuQ291bnQgPSAxKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgaW50IE9mZihpbnQgbl8pOwoKICAg
IGM0X0Jhc2VBcnJheSBfdmVjdG9yOwp9OwoKY2xhc3MgYzRfU3RyaW5nQXJyYXkKewpwdWJsaWM6
CiAgICBjNF9TdHJpbmdBcnJheSAoKTsKICAgIH5jNF9TdHJpbmdBcnJheSAoKTsKCiAgICBpbnQg
R2V0U2l6ZSgpIGNvbnN0OwogICAgdm9pZCBTZXRTaXplKGludCBuTmV3U2l6ZSwgaW50IG5Hcm93
QnkgPSAtMSk7CgogICAgY29uc3QgY2hhciogR2V0QXQoaW50IG5JbmRleCkgY29uc3Q7CiAgICB2
b2lkIFNldEF0KGludCBuSW5kZXgsIGNvbnN0IGNoYXIqIG5ld0VsZW1lbnQpOwogCgogICAgaW50
IEFkZChjb25zdCBjaGFyKiBuZXdFbGVtZW50KTsKCiAgICB2b2lkIEluc2VydEF0KGludCBuSW5k
ZXgsIGNvbnN0IGNoYXIqIG5ld0VsZW1lbnQsIGludCBuQ291bnQgPSAxKTsKICAgIHZvaWQgUmVt
b3ZlQXQoaW50IG5JbmRleCwgaW50IG5Db3VudCA9IDEpOwoKcHJpdmF0ZToKICAgIGM0X1B0ckFy
cmF5IF9wdHJzOwp9OwoKIAoKCiAgICAKIyAxICIuLi91bml4Ly4uL3NyYy91bml2LmlubCIgMQog
CgogCgoKCiAKIAoKaW5saW5lICBjNF9QdHJBcnJheTo6YzRfUHRyQXJyYXkgKCkKeyAKfQoKaW5s
aW5lICBjNF9QdHJBcnJheTo6fmM0X1B0ckFycmF5ICgpCnsgCn0KCmlubGluZSAgaW50IGM0X1B0
ckFycmF5OjpPZmYoaW50IG5fKQp7CiAgICByZXR1cm4gbl8gKiBzaXplb2YgKHZvaWQqKTsgCn0K
CmlubGluZSAgaW50IGM0X1B0ckFycmF5OjpHZXRTaXplKCkgY29uc3QKeyAKICAgIHJldHVybiBf
dmVjdG9yLkdldExlbmd0aCgpIC8gc2l6ZW9mICh2b2lkKik7IAp9CgppbmxpbmUgIHZvaWQgYzRf
UHRyQXJyYXk6OlNldFNpemUoaW50IG5OZXdTaXplLCBpbnQpCnsgCiAgICBfdmVjdG9yLlNldExl
bmd0aChPZmYobk5ld1NpemUpKTsgCn0KCmlubGluZSAgdm9pZCogYzRfUHRyQXJyYXk6OkdldEF0
KGludCBuSW5kZXgpIGNvbnN0CnsgCiAgICByZXR1cm4gKih2b2lkKiBjb25zdCopIF92ZWN0b3Iu
R2V0RGF0YShPZmYobkluZGV4KSk7IAp9CgppbmxpbmUgIHZvaWQgYzRfUHRyQXJyYXk6OlNldEF0
KGludCBuSW5kZXgsIGNvbnN0IHZvaWQqIG5ld0VsZW1lbnQpCnsgCiAgICAqKGNvbnN0IHZvaWQq
KikgX3ZlY3Rvci5HZXREYXRhKE9mZihuSW5kZXgpKSA9IG5ld0VsZW1lbnQ7IAp9CgppbmxpbmUg
IHZvaWQqJiBjNF9QdHJBcnJheTo6RWxlbWVudEF0KGludCBuSW5kZXgpCnsgCiAgICByZXR1cm4g
Kih2b2lkKiopIF92ZWN0b3IuR2V0RGF0YShPZmYobkluZGV4KSk7IAp9CgogCiAKCmlubGluZSAg
YzRfRFdvcmRBcnJheTo6YzRfRFdvcmRBcnJheSAoKQp7IAp9CgppbmxpbmUgIGM0X0RXb3JkQXJy
YXk6On5jNF9EV29yZEFycmF5ICgpCnsgCn0KCmlubGluZSAgaW50IGM0X0RXb3JkQXJyYXk6Ok9m
ZihpbnQgbl8pCnsKICAgIHJldHVybiBuXyAqIHNpemVvZiAodDRfaTMyKTsgCn0KCmlubGluZSAg
aW50IGM0X0RXb3JkQXJyYXk6OkdldFNpemUoKSBjb25zdAp7IAogICAgcmV0dXJuIF92ZWN0b3Iu
R2V0TGVuZ3RoKCkgLyBzaXplb2YgKHQ0X2kzMik7IAp9CgppbmxpbmUgIHZvaWQgYzRfRFdvcmRB
cnJheTo6U2V0U2l6ZShpbnQgbk5ld1NpemUsIGludCkKeyAKICAgIF92ZWN0b3IuU2V0TGVuZ3Ro
KE9mZihuTmV3U2l6ZSkpOyAKfQoKaW5saW5lICB0NF9pMzIgYzRfRFdvcmRBcnJheTo6R2V0QXQo
aW50IG5JbmRleCkgY29uc3QKeyAKICAgIHJldHVybiAqKGNvbnN0IHQ0X2kzMiopIF92ZWN0b3Iu
R2V0RGF0YShPZmYobkluZGV4KSk7IAp9CgppbmxpbmUgIHZvaWQgYzRfRFdvcmRBcnJheTo6U2V0
QXQoaW50IG5JbmRleCwgdDRfaTMyIG5ld0VsZW1lbnQpCnsgCiAgICAqKHQ0X2kzMiopIF92ZWN0
b3IuR2V0RGF0YShPZmYobkluZGV4KSkgPSBuZXdFbGVtZW50OyAKfQoKaW5saW5lICB0NF9pMzIm
IGM0X0RXb3JkQXJyYXk6OkVsZW1lbnRBdChpbnQgbkluZGV4KQp7IAogICAgcmV0dXJuICoodDRf
aTMyKikgX3ZlY3Rvci5HZXREYXRhKE9mZihuSW5kZXgpKTsgCn0KCiAKIAoKaW5saW5lICBjNF9T
dHJpbmdBcnJheTo6YzRfU3RyaW5nQXJyYXkgKCkKeyAKfQoKaW5saW5lICBpbnQgYzRfU3RyaW5n
QXJyYXk6OkdldFNpemUoKSBjb25zdAp7IAogICAgcmV0dXJuIF9wdHJzLkdldFNpemUoKTsgCn0K
CmlubGluZSAgY29uc3QgY2hhciogYzRfU3RyaW5nQXJyYXk6OkdldEF0KGludCBuSW5kZXgpIGNv
bnN0CnsgCiAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSBfcHRycy5HZXRBdChuSW5kZXgpOyAKfQoK
IAojIDEwOSAiLi4vdW5peC8uLi9zcmMvdW5pdi5oIiAyCgoKCiAKCiMgMTc0ICIuLi91bml4Ly4u
L3NyYy9oZWFkZXIuaCIgMgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCiAKCgoKIAoKCgoKCgoKIAojIDE0MiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgog
CgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA4ICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgogCgoKIAoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgog
CgoKCgoKCiAKCgoKCgogCgoKCgoKCgoKIAoKCgojIDY1ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZz
LmgiIDMKCgogCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoK
IAoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
IyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKIAoKCgoKCgoKCiAKCgoKCgog
CgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNiAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCgoKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK
CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
NC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCiAKZXh0ZXJuIHZvaWQgKm1l
bWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCgkJICAgICBfX2NvbnN0IHZvaWQgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpIDsKIAoKZXh0ZXJuIHZvaWQgKm1lbW1v
dmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSA7CgogCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAoJCSAgICAgIGludCBfX2MsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgOwoKCgogCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQg
Kl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IG1lbWNt
cCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCkgICA7CgogCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19z
LCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSAgIDsKCiMgNzMgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCkg
OwogCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpIDsK
CiAKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKSA7CiAKZXh0ZXJuIGNoYXIgKnN0
cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMsCgkJICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHN0cmNt
cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkg
ICA7CiAKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIGludCBzdHJj
b2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSAgIDsKIApleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJ
CSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93
ICgpIDsKCiMgMTE2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKIApleHRlcm4gY2hhciAq
c3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgICA7CgoKIAoKCgoKCgoKIyAxNTIg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAgOwogCmV4dGVybiBjaGFyICpzdHJyY2hy
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgICA7CgoKCgoKCgogCgpleHRl
cm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVq
ZWN0KQogICAgIHRocm93ICgpICAgOwogCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBj
aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgICA7CiAKZXh0
ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj
ZXB0KQogICAgIHRocm93ICgpICAgOwogCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hh
ciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSAgIDsK
CgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpIDsKCiAKCmV4dGVybiBj
aGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2RlbGltLAoJCQkgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhy
b3cgKCkgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCgkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fc2F2ZV9wdHIpIHRocm93ICgpIDsKCgojIDIxNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSAg
IDsKCgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cg
KCkgOwoKIAoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19i
dWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiB2b2lkIF9fYnplcm8g
KHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHZvaWQgYmNvcHkg
KF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCkg
OwoKIApleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7
CgogCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9f
czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgogCmV4dGVybiBjaGFyICppbmRleCAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAgOwoKIApleHRlcm4gY2hhciAq
cmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgICA7CgogCgpleHRl
cm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCiAKCgoKCgoKCgoKIApleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4gaW50IHN0
cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSAgIDsKCgojIDI4OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CgoKCiAKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwK
CQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKSA7CgoKIyAz
MzIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgoKIyAzNjEgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMwoKCgp9IAoKCiMgMTgxICIuLi91bml4Ly4uL3NyYy9oZWFkZXIuaCIgMgoKCiAKIAoK
CgoKCgoKCgogICAgCiAKCgojIDcgImRlcml2ZWQuY3BwIiAyCgojIDEgIi4uL3VuaXgvLi4vc3Jj
L2hhbmRsZXIuaCIgMQogCgogCgoKCgoKCiAKIAoKICAgIGNsYXNzIGM0X0hhbmRsZXI7ICAgICAg
ICAgICAgICAgICAgICAKCiAKICAgICAgICBjbGFzcyBjNF9IYW5kbGVyU2VxOyAgICAgICAgICAg
ICAKCiAgICBjbGFzcyBjNF9Db2x1bW47ICAgICAgICAgICAgICAgICAgICAgCiAgICBjbGFzcyBj
NF9GaWVsZDsgICAgICAgICAgICAgICAgICAgICAgCiAgICBjbGFzcyBjNF9QZXJzaXN0OyAgICAg
ICAgICAgICAgICAgICAgCiAgICBjbGFzcyBjNF9TYXZlQ29udGV4dDsgICAgICAgICAgICAgICAg
CgogCgpjbGFzcyBjNF9IYW5kbGVyCnsKICAgIGM0X1Byb3BlcnR5IF9wcm9wZXJ0eTsKCnB1Ymxp
YzoKICAgIGM0X0hhbmRsZXIgKGNvbnN0IGM0X1Byb3BlcnR5JiBfcHJvcCk7CiAgICAgICAgIAog
ICAgdmlydHVhbCB+YzRfSGFuZGxlciAoKTsKCiAgICB2aXJ0dWFsIHZvaWQgRGVmaW5lKGludCwg
Y29uc3QgdDRfYnl0ZSoqKTsKICAgICAgICAgCiAgICB2aXJ0dWFsIHZvaWQgRmxpcEJ5dGVzKCk7
CiAgICAJIAogICAgdmlydHVhbCB2b2lkIENvbW1pdChjNF9TYXZlQ29udGV4dCYgYXJfKTsKICAg
ICAgICAgCiAgICB2aXJ0dWFsIHZvaWQgT2xkRGVmaW5lKGNoYXIsIGM0X1BlcnNpc3QmKTsKCiAg
ICBjb25zdCBjNF9Qcm9wZXJ0eSYgUHJvcGVydHkoKSBjb25zdDsKICAgICAgICAgCiAgICBpbnQg
UHJvcElkKCkgY29uc3Q7CiAgICAgICAgIAoKICAgIHZvaWQgQ2xlYXJCeXRlcyhjNF9CeXRlcyYg
YnVmXykgY29uc3Q7CiAgICAgICAgIAoKICAgIHZpcnR1YWwgaW50IEl0ZW1TaXplKGludCBpbmRl
eF8pID0gMDsKICAgICAgICAgCiAgICB2b2lkIEdldEJ5dGVzKGludCBpbmRleF8sIGM0X0J5dGVz
JiBidWZfLCBib29sIGNvcHlTbWFsbF8gPWZhbHNlKTsKICAgICAgICAgCiAgICB2aXJ0dWFsIHZv
aWQgU2V0KGludCBpbmRleF8sIGNvbnN0IGM0X0J5dGVzJiBidWZfKSA9IDA7CiAgICAgICAgIAoK
ICAgIGludCBDb21wYXJlKGludCBpbmRleF8sIGNvbnN0IGM0X0J5dGVzJiBidWZfKTsKICAgICAg
ICAgCgogICAgdmlydHVhbCB2b2lkIEluc2VydChpbnQgaW5kZXhfLCBjb25zdCBjNF9CeXRlcyYg
YnVmXywgaW50IGNvdW50XykgPSAwOwogICAgICAgICAKICAgIHZpcnR1YWwgdm9pZCBSZW1vdmUo
aW50IGluZGV4XywgaW50IGNvdW50XykgPSAwOwogICAgICAgICAKICAgIHZvaWQgTW92ZShpbnQg
ZnJvbV8sIGludCB0b18pOwogICAgICAgICAKCiAgICB2aXJ0dWFsIGM0X0NvbHVtbiogR2V0TnRo
TWVtb0NvbChpbnQgaW5kZXhfLCBib29sIGFsbG9jXyA9ZmFsc2UpOwogICAgICAgICAKCiAgICB2
aXJ0dWFsIGJvb2wgSXNQZXJzaXN0ZW50KCkgY29uc3Q7CiAgICAgICAgIAoKcHJvdGVjdGVkOgog
ICAgdmlydHVhbCBjb25zdCB2b2lkKiBHZXQoaW50IGluZGV4XywgaW50JiBsZW5ndGhfKSA9IDA7
CiAgICAgICAgIAp9OwoKIAoKY2xhc3MgYzRfSGFuZGxlclNlcSA6IHB1YmxpYyBjNF9TZXF1ZW5j
ZQp7CiAgICBjNF9QdHJBcnJheSBfaGFuZGxlcnM7CiAgICBjNF9QZXJzaXN0KiBfcGVyc2lzdDsK
ICAgIGM0X0ZpZWxkKiBfZmllbGQ7ICAgCiAgICBjNF9IYW5kbGVyU2VxKiBfcGFyZW50OwogICAg
aW50IF9udW1Sb3dzOwoKcHVibGljOgogICAgYzRfSGFuZGxlclNlcSAoYzRfUGVyc2lzdCopOwog
ICAgYzRfSGFuZGxlclNlcSAoYzRfSGFuZGxlclNlcSYgb3duZXJfLCBjNF9IYW5kbGVyKiBoYW5k
bGVyXyk7CgogICAgdmlydHVhbCBpbnQgTnVtUm93cygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk
IFNldE51bVJvd3MoaW50KTsKICAgIAogICAgdmlydHVhbCBpbnQgTnVtSGFuZGxlcnMoKSBjb25z
dDsKICAgIHZpcnR1YWwgYzRfSGFuZGxlciYgTnRoSGFuZGxlcihpbnQpIGNvbnN0OwogICAgdmly
dHVhbCBjb25zdCBjNF9TZXF1ZW5jZSogSGFuZGxlckNvbnRleHQoaW50KSBjb25zdDsKICAgIHZp
cnR1YWwgaW50IEFkZEhhbmRsZXIoYzRfSGFuZGxlciopOwoKICAgIHZvaWQgRGVmaW5lUm9vdCgp
OwogICAgdm9pZCBSZXN0cnVjdHVyZShjNF9GaWVsZCYsIGJvb2wgcmVtb3ZlXyk7CiAgICB2b2lk
IERldGFjaEZyb21QYXJlbnQoKTsKICAgIHZvaWQgRGV0YWNoRnJvbVN0b3JhZ2UoYm9vbCBmdWxs
Xyk7CiAgICB2b2lkIERldGVybWluZVNwYWNlVXNhZ2UoKTsKICAgICAgICAKICAgIGM0X0ZpZWxk
JiBEZWZpbml0aW9uKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBEZXNjcmlwdGlvbigpOwogICAg
YzRfSGFuZGxlclNlcSYgUGFyZW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIGM0X1BlcnNpc3QqIFBl
cnNpc3QoKSBjb25zdDsKICAgIAogICAgYzRfRmllbGQmIEZpZWxkKGludCkgY29uc3Q7CiAgICBp
bnQgTnVtRmllbGRzKCkgY29uc3Q7CiAgICBjaGFyIENvbHVtblR5cGUoaW50IGluZGV4XykgY29u
c3Q7CiAgICBib29sIElzTmVzdGVkKGludCkgY29uc3Q7CiAgICAKICAgIHZvaWQgUHJlcGFyZShj
b25zdCB0NF9ieXRlKiogcHRyXywgYm9vbCBzZWxmRGVzY18pOwogICAgdm9pZCBPbGRQcmVwYXJl
KCk7CgogICAgdm9pZCBGbGlwQWxsQnl0ZXMoKTsKICAgIHZvaWQgRXhjaGFuZ2VFbnRyaWVzKGlu
dCBzcmNQb3NfLCBjNF9IYW5kbGVyU2VxJiBkc3RfLCBpbnQgZHN0UG9zXyk7CgogICAgYzRfSGFu
ZGxlclNlcSYgU3ViRW50cnkoaW50LCBpbnQpIGNvbnN0OwogICAgCiAgICBjNF9GaWVsZCogRmlu
ZEZpZWxkKGNvbnN0IGM0X0hhbmRsZXIqIGhhbmRsZXJfKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1
YWwgYzRfSGFuZGxlciogQ3JlYXRlSGFuZGxlcihjb25zdCBjNF9Qcm9wZXJ0eSYpOwoKICAgIHZp
cnR1YWwgfmM0X0hhbmRsZXJTZXEgKCk7Cn07CgogCgoKIyAxICIuLi91bml4Ly4uL3NyYy9oYW5k
bGVyLmlubCIgMQogCgogCgoKCiAKIAoKaW5saW5lICBjNF9IYW5kbGVyOjpjNF9IYW5kbGVyIChj
b25zdCBjNF9Qcm9wZXJ0eSYgcHJvcF8pCiAgICA6IF9wcm9wZXJ0eSAocHJvcF8pCnsKfQoKaW5s
aW5lICBjNF9IYW5kbGVyOjp+YzRfSGFuZGxlciAoKQp7Cn0KCmlubGluZSAgdm9pZCBjNF9IYW5k
bGVyOjpEZWZpbmUoaW50LCBjb25zdCB0NF9ieXRlKiopCnsKfQoKaW5saW5lICB2b2lkIGM0X0hh
bmRsZXI6OkZsaXBCeXRlcygpCnsKfQoKaW5saW5lICBjb25zdCBjNF9Qcm9wZXJ0eSYgYzRfSGFu
ZGxlcjo6UHJvcGVydHkoKSBjb25zdAp7CiAgICByZXR1cm4gX3Byb3BlcnR5Owp9CgppbmxpbmUg
IGludCBjNF9IYW5kbGVyOjpQcm9wSWQoKSBjb25zdAp7CiAgICByZXR1cm4gX3Byb3BlcnR5Lkdl
dElkKCk7Cn0KCmlubGluZSAgYzRfQ29sdW1uKiBjNF9IYW5kbGVyOjpHZXROdGhNZW1vQ29sKGlu
dCBpbmRleF8sIGJvb2wgYWxsb2NfKQp7CiAgICAgOyAgCgogICAgcmV0dXJuIDA7Cn0KCmlubGlu
ZSAgYm9vbCBjNF9IYW5kbGVyOjpJc1BlcnNpc3RlbnQoKSBjb25zdAp7CiAgICByZXR1cm4gZmFs
c2U7Cn0KCiAKIAoKaW5saW5lICBpbnQgYzRfSGFuZGxlclNlcTo6TnVtUm93cygpIGNvbnN0CnsK
ICAgICA7CgogICAgcmV0dXJuIF9udW1Sb3dzOwp9CiAgICAKaW5saW5lICBpbnQgYzRfSGFuZGxl
clNlcTo6TnVtSGFuZGxlcnMoKSBjb25zdAp7CiAgICByZXR1cm4gX2hhbmRsZXJzLkdldFNpemUo
KTsKfQoKaW5saW5lICBjNF9IYW5kbGVyJiBjNF9IYW5kbGVyU2VxOjpOdGhIYW5kbGVyKGludCBp
bmRleF8pIGNvbnN0CnsKICAgICA7CiAgICAKICAgIHJldHVybiAqKGM0X0hhbmRsZXIqKSBfaGFu
ZGxlcnMuR2V0QXQoaW5kZXhfKTsKfQoKaW5saW5lICBjb25zdCBjNF9TZXF1ZW5jZSogYzRfSGFu
ZGxlclNlcTo6SGFuZGxlckNvbnRleHQoaW50KSBjb25zdAp7CiAgICByZXR1cm4gdGhpczsKfQoK
aW5saW5lICBjNF9IYW5kbGVyU2VxJiBjNF9IYW5kbGVyU2VxOjpQYXJlbnQoKSBjb25zdAp7CiAg
ICByZXR1cm4gKl9wYXJlbnQ7Cn0KCiAKIyAxMzUgIi4uL3VuaXgvLi4vc3JjL2hhbmRsZXIuaCIg
MgoKCgogCgoKIyA4ICJkZXJpdmVkLmNwcCIgMgoKIyAxICIuLi91bml4Ly4uL3NyYy9zdG9yZS5o
IiAxCiAKCiAKCgoKCgoKIAoKY2xhc3MgYzRfRGVwZW5kZW5jaWVzCnsKICAgIGM0X1B0ckFycmF5
IF9yZWZzOwoKcHVibGljOgogICAgYzRfRGVwZW5kZW5jaWVzICgpOwogICAgfmM0X0RlcGVuZGVu
Y2llcyAoKTsKCiAgICB2b2lkIEFkZChjNF9TZXF1ZW5jZSogc2VxXyk7CiAgICBib29sIFJlbW92
ZShjNF9TZXF1ZW5jZSogc2VxXyk7CgogICAgZnJpZW5kIGNsYXNzIGM0X05vdGlmaWVyOwp9OwoK
IAoKY2xhc3MgYzRfTm90aWZpZXIKewogICAgYzRfU2VxdWVuY2UqIF9vcmlnaW47CiAgICBjNF9O
b3RpZmllciogX2NoYWluOwogICAgYzRfTm90aWZpZXIqIF9uZXh0OwoKcHVibGljOgogICAgZW51
bSB7IGtOb25lLCBrU2V0QXQsIGtJbnNlcnRBdCwga1JlbW92ZUF0LCBrTW92ZSwga1NldCwga0xp
bWl0IH07CgogICAgYzRfTm90aWZpZXIgKGM0X1NlcXVlbmNlKiBvcmlnaW5fKTsKICAgIH5jNF9O
b3RpZmllciAoKTsKCiAgICBib29sIEhhc0RlcGVuZGVudHMoKSBjb25zdDsKCiAgICB2b2lkIFN0
YXJ0U2V0QXQoaW50IGluZGV4XywgYzRfQ3Vyc29yJiBjdXJzb3JfKTsKICAgIHZvaWQgU3RhcnRJ
bnNlcnRBdChpbnQgaW5kZXhfLCBjNF9DdXJzb3ImIGN1cnNvcl8sIGludCBjb3VudF8pOwogICAg
dm9pZCBTdGFydFJlbW92ZUF0KGludCBpbmRleF8sIGludCBjb3VudF8pOwogICAgdm9pZCBTdGFy
dE1vdmUoaW50IGZyb21fLCBpbnQgdG9fKTsKICAgIHZvaWQgU3RhcnRTZXQoaW50IGluZGV4Xywg
aW50IHByb3BJZF8sIGNvbnN0IGM0X0J5dGVzJiBidWZfKTsKCiAgICBpbnQgX3R5cGU7CiAgICBp
bnQgX2luZGV4OwogICAgaW50IF9wcm9wSWQ7CiAgICBpbnQgX2NvdW50OwogICAgYzRfQ3Vyc29y
KiBfY3Vyc29yOwogICAgY29uc3QgYzRfQnl0ZXMqIF9ieXRlczsKCnByaXZhdGU6CiAgICB2b2lk
IE5vdGlmeSgpOwp9OwoKIAoKY2xhc3MgYzRfRGVyaXZlZFNlcSA6IHB1YmxpYyBjNF9TZXF1ZW5j
ZQp7CnByb3RlY3RlZDoKICAgIGM0X1NlcXVlbmNlJiBfc2VxOwoKcHJvdGVjdGVkOgogICAgYzRf
RGVyaXZlZFNlcSAoYzRfU2VxdWVuY2UmIHNlcV8pOwogICAgdmlydHVhbCB+YzRfRGVyaXZlZFNl
cSAoKTsKICAgIApwdWJsaWM6CiAgICB2aXJ0dWFsIGludCBSZW1hcEluZGV4KGludCwgY29uc3Qg
YzRfU2VxdWVuY2UqKSBjb25zdDsKCiAgICB2aXJ0dWFsIGludCBOdW1Sb3dzKCkgY29uc3Q7CiAg
ICB2aXJ0dWFsIHZvaWQgU2V0TnVtUm93cyhpbnQgc2l6ZV8pOwoKICAgIHZpcnR1YWwgaW50IE51
bUhhbmRsZXJzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGM0X0hhbmRsZXImIE50aEhhbmRsZXIoaW50
KSBjb25zdDsKICAgIHZpcnR1YWwgY29uc3QgYzRfU2VxdWVuY2UqIEhhbmRsZXJDb250ZXh0KGlu
dCkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBBZGRIYW5kbGVyKGM0X0hhbmRsZXIqKTsKICAgIHZp
cnR1YWwgYzRfSGFuZGxlciogQ3JlYXRlSGFuZGxlcihjb25zdCBjNF9Qcm9wZXJ0eSYpOwoKICAg
IHZpcnR1YWwgYzRfTm90aWZpZXIqIFByZUNoYW5nZShjNF9Ob3RpZmllciYgbmZfKTsKfTsKCiAK
CmNsYXNzIGM0X1N0cmVhbVN0cmF0ZWd5IDogcHVibGljIGM0X1N0cmF0ZWd5CnsKICAgIGM0X1N0
cmVhbSogX3N0cmVhbTsKICAgIHQ0X2J5dGUqIF9idWZmZXI7CiAgICB0NF9pMzIgX2J1ZmxlbjsK
ICAgIHQ0X2kzMiBfcG9zaXRpb247CnB1YmxpYzoKICAgIGM0X1N0cmVhbVN0cmF0ZWd5ICh0NF9p
MzIgYnVmbGVuXyk7CiAgICBjNF9TdHJlYW1TdHJhdGVneSAoYzRfU3RyZWFtKiBzdHJlYW1fKTsK
ICAgIHZpcnR1YWwgfmM0X1N0cmVhbVN0cmF0ZWd5ICgpOwoKICAgIHZpcnR1YWwgYm9vbCBJc1Zh
bGlkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCAgRGF0YVJlYWQodDRfaTMyIHBvc18sIHZvaWQq
IGJ1ZmZlcl8sIGludCBsZW5ndGhfKTsKICAgIHZpcnR1YWwgdm9pZCBEYXRhV3JpdGUodDRfaTMy
IHBvc18sIGNvbnN0IHZvaWQqIGJ1ZmZlcl8sIGludCBsZW5ndGhfKTsKICAgIHZpcnR1YWwgdDRf
aTMyIEZpbGVTaXplKCk7Cn07CgogCgoKIyAxICIuLi91bml4Ly4uL3NyYy9zdG9yZS5pbmwiIDEK
IAoKIAoKCgogCiAKCmlubGluZSAgYzRfTm90aWZpZXI6OmM0X05vdGlmaWVyIChjNF9TZXF1ZW5j
ZSogb3JpZ2luXykKICAgIDogX29yaWdpbiAob3JpZ2luXyksIF9jaGFpbiAoMCksIF9uZXh0ICgw
KSwKICAgICAgX3R5cGUgKGtOb25lKSwgX2luZGV4ICgwKSwgX3Byb3BJZCAoMCksIF9jb3VudCAo
MCksIAogICAgICBfY3Vyc29yICgwKSwgX2J5dGVzICgwKQp7CiAgICAgOwp9CgogCiMgMTA3ICIu
Li91bml4Ly4uL3NyYy9zdG9yZS5oIiAyCgoKCiAKCgojIDkgImRlcml2ZWQuY3BwIiAyCgojIDEg
Ii4uL3VuaXgvLi4vc3JjL2Rlcml2ZWQuaCIgMQogCgogCgoKCgoKCiAKIAoKICAgIGNsYXNzIGM0
X0N1cnNvcjsgICAgICAgICAgICAgICAgICAgICAKICAgIGNsYXNzIGM0X1NlcXVlbmNlOyAgICAg
ICAgICAgICAgICAgICAKCiAgICBleHRlcm4gYzRfU2VxdWVuY2UqIGY0X0NyZWF0ZUZpbHRlcihj
NF9TZXF1ZW5jZSYsIGM0X0N1cnNvciwgYzRfQ3Vyc29yKTsKICAgIGV4dGVybiBjNF9TZXF1ZW5j
ZSogZjRfQ3JlYXRlU29ydChjNF9TZXF1ZW5jZSYsIGM0X1NlcXVlbmNlKiA9MCk7CiAgICBleHRl
cm4gYzRfU2VxdWVuY2UqIGY0X0NyZWF0ZVByb2plY3QoYzRfU2VxdWVuY2UmLCBjNF9TZXF1ZW5j
ZSYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sLCBjNF9TZXF1ZW5jZSogPTApOwoKIAoKCiMgMTAgImRlcml2ZWQuY3BwIiAyCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoK
CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCmV4dGVybiAiQyIg
eyAKCgoKCiMgOTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCiAKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBpbnQgcXVvdDsJCQkgCiAgICBpbnQgcmVtOwkJCSAKICB9IGRpdl90OwoKIAoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJ
IAogIH0gbGRpdl90OwoKCgojIDExOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgoK
IAoKCgoKCiAKCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhy
b3cgKCkgOwoKCiAKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhy
b3cgKCkgICA7CiAKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cg
KCkgICA7CiAKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKSAgIDsKCgogCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9f
Y29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgpICAgOwoKCiAKZXh0ZXJuIGRvdWJsZSBz
dHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpIDsKCgoKCgoKCgoKCiAKZXh0ZXJuIGxvbmcgaW50
IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpIDsKIApleHRlcm4gdW5zaWduZWQg
bG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCkgOwoK
CiAKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCgkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpIHRocm93ICgpIDsKIApfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJ
CQkgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy
b3cgKCkgOwoKCgogCgogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9s
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpIDsKIApfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAoJCQkJCWNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KQogICAgIHRocm93ICgpIDsKCgoKIyAyNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgog
CgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKCQkJCSBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp
CiAgICAgdGhyb3cgKCkgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCkgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xk
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAo
KSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCgkJCQkgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAg
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKSA7CgoKCmV4dGVybiB1bnNpZ25lZCBs
b25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCgkJCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs
b25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKCQkJCQkgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKCQkJ
CQkJICAgX19yZXN0cmljdCBfX25wdHIsCgkJCQkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAoJCQkJCQkgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKSA7CgoK
CgoKIAoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKSAKewogIHJl
dHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9f
aW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCglpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJl
dHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpl
eHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkgaW50IF9fYmFz
ZSkgdGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5k
cHRyLCBfX2Jhc2UsIDApOwp9CgojIDMyMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCWlu
dCBfX2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRy
LCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1
bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJIGludCBfX2Jhc2UpIHRocm93ICgp
IAp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz
ZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApz
dHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKCSBpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvbGxf
aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBl
eHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBj
aGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJICBp
bnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25w
dHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9m
IChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9kIChfX25w
dHIsIChjaGFyICoqKSBfX251bGwgKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0
ciwgKGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRv
bCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIHN0cnRvbCAoX19u
cHRyLCAoY2hhciAqKikgX19udWxsICwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19p
bmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgp
IAp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQoK
CgoKCiAKCgpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKSA7CgogCmV4
dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgICA7CgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCmV4dGVybiAiQyIgeyAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoK
CgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAx
MzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDIgMwoKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBp
bnQgX19xdWFkX3Q7CiMgNDggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYg
c2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5
cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBl
ZGVmIF9fdV9pbnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBl
ZGVmIF9fdV9pbnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0
eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkg
CnR5cGVkZWYgaW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBl
ZGVmIF9fdV9sb25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJ
CSAKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGlu
dCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJ
CQkgCnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNl
Y29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CQkgCgwKdHlwZWRlZiBsb25nIGlu
dCBfX2Nsb2NrX3Q7CgogCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKIAp0eXBlZGVmIGludCBf
X3RpbWVyX3Q7CgoKIAoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX2lwY19waWRfdDsKCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7
CgogCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Js
a2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9x
dWFkX3QgX19mc2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgogCnR5cGVkZWYgX191X3F1YWRfdCBf
X2lubzY0X3Q7CgogCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKIAp0eXBlZGVmIGxvbmcg
aW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90
OwoKIAp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Nv
Y2tsZW5fdDsKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAzCgoKCgoKIApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3Nj
aGVkX3ByaW9yaXR5OwogIH07CgoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1
czsgICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgIAoKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9w
dGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVkZWYgc3RydWN0
IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9s
aWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0
c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNr
YWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0
aHJlYWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9
IHB0aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0
aHJlYWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsK
CgogCiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAg
ICAKICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBf
X21fb3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBz
dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoK
IAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRy
X3Q7CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDExNyAiL3Vzci9pbmNsdWRl
L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKCgojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh
ZHR5cGVzLmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgoj
IDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCgojIDMwICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYg
X191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9u
ZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9x
dWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2Zm
X3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3Qg
ZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1v
ZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3Qg
dWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgoKCgoKCnR5cGVkZWYgX19w
aWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVf
dCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRk
cl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwoKCgoKCgoKCgojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDYxICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCgoKCgoKCgoKIAp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKCgoKCgoKCgoKCiAKdHlwZWRl
ZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CgoKCgoKCgoKCgogCnR5cGVkZWYgX190aW1lcl90IHRp
bWVyX3Q7CgoKCgoKIyAxMTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCiMgMzY0ICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MwoKCiMgMTQzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK
IyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNDYgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1
aW50OwoKCiAKCiMgMTgwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgogCgoKCgoKCgp0
eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fUUlfXyApKSkg
Owp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0hJX18g
KSkpIDsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19T
SV9fICkpKSA7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICgg
IF9fRElfXyApKSkgOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0hJX18gKSkpIDsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1NJX18gKSkp
IDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoICBfX0RJX18gKSkpIDsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCgogCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvZW5k
aWFuLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgojIDM3ICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjEyICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c2VsZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2ICIvdXNyL2luY2x1
ZGUvYml0cy9zZWxlY3QuaCIgMwoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2luY2x1ZGUvYml0cy9z
ZWxlY3QuaCIgMwoKIyA3MiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgMzEgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdzZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRv
bWljX3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3Zh
bFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSBdOwogIH0gX19zaWdz
ZXRfdDsKCgoKCiAKCgoKCgojIDEyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCiMg
MzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgoKdHlwZWRlZiBfX3NpZ3NldF90
IHNpZ3NldF90OwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCiMg
NjEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA3MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwoKCgojIDg0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgOTYgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKCgoKCgoKCgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9z
ZWM7CQkgCiAgICBsb25nIGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKIyAzNjQgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDMKCgoKIyA0MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKIyA1NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCgoKCgoKCgoKIAoKc3RydWN0IHRp
bWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CQkgCiAgICBfX3N1c2Vjb25kc190IHR2X3Vz
ZWM7CSAKICB9OwoKCiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgogCnR5
cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKIAoKCgoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAg
ICAKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAgLyAoOCAqIHNpemVvZiAoX19m
ZF9tYXNrKSkgXTsKCgogIH0gZmRfc2V0OwoKIAoKCgogCnR5cGVkZWYgX19mZF9tYXNrIGZkX21h
c2s7CgogCgoKCgogCgoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCgoKCmV4dGVybiBpbnQgc2VsZWN0
IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAoJCSAgIGZkX3NldCAq
X19yZXN0cmljdCBfX3dyaXRlZmRzLAoJCSAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk
cywKCQkgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93ICgpIDsK
CiMgMTEwICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKfSAKCgojIDIxNSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNy
b3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgNDcgIi91c3IvaW5j
bHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKCgoKIyAyMTggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzCgoKCgoKCgoKCiAKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAgCgoKCnR5
cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7ICAKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3Qg
ZnNmaWxjbnRfdDsgIAoKCiMgMjU0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgoKCgoK
Cgp9IAoKCiMgMzkwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAKCgoKIApleHRlcm4g
bG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKSA7CgogCmV4dGVybiB2b2lkIHNyYW5kb20g
KHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpIDsKCiAKCgoKZXh0ZXJuIGNoYXIgKmluaXRz
dGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKCQkJc2l6ZV90IF9f
c3RhdGVsZW4pIHRocm93ICgpIDsKCiAKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19z
dGF0ZWJ1ZikgdGhyb3cgKCkgOwoKCgogCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGlu
dDMyX3QgKmZwdHI7CQkgCiAgICBpbnQzMl90ICpycHRyOwkJIAogICAgaW50MzJfdCAqc3RhdGU7
CQkgCiAgICBpbnQgcmFuZF90eXBlOwkJIAogICAgaW50IHJhbmRfZGVnOwkJIAogICAgaW50IHJh
bmRfc2VwOwkJIAogICAgaW50MzJfdCAqZW5kX3B0cjsJCSAKICB9OwoKZXh0ZXJuIGludCByYW5k
b21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAoJCSAgICAgaW50MzJf
dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3Ig
KHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgp
IDsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9f
cmVzdHJpY3QgX19zdGF0ZWJ1ZiwKCQkJc2l6ZV90IF9fc3RhdGVsZW4sCgkJCXN0cnVjdCByYW5k
b21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzZXRzdGF0
ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCgkJICAgICAgIHN0cnVjdCByYW5kb21f
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCkgOwoKCgoKIApleHRlcm4gaW50IHJhbmQg
KHZvaWQpIHRocm93ICgpIDsKIApleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2Vl
ZCkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVk
KSB0aHJvdyAoKSA7CgoKCgogCgogCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cg
KCkgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd
KSB0aHJvdyAoKSA7CgogCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKSA7
CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkg
dGhyb3cgKCkgOwoKIApleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCkgOwpl
eHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRo
cm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJv
dyAoKSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQg
aW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCkgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCkgOwoKCiAKCgpzdHJ1Y3QgZHJhbmQ0OF9k
YXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsJIAogICAgdW5zaWduZWQgc2hv
cnQgaW50IF9fb2xkX3hbM107ICAKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CSAKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX2luaXQ7CSAKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19h
OwkgCiAgfTsKCiAKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCgkJICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSwKCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJ
CSAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwoKIApleHRlcm4g
aW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK
CQkgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwpleHRlcm4g
aW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJICAgICAgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBsb25nIGludCAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IG1yYW5kNDhfciAo
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBsb25nIGlu
dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJICAgICAgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl
c3VsdCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVk
dmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKSA7CgpleHRl
cm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAoJCSAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpIDsKCmV4dGVybiBpbnQgbGNv
bmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKCQkgICAgICBzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCkgOwoKCgoKCgoKIApleHRlcm4gdm9pZCAqbWFs
bG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSAgIDsKIApleHRlcm4gdm9pZCAqY2FsbG9jIChz
aXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSAgIDsKCgoKIAoKZXh0
ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSAg
IDsKIApleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCkgOwoKCiAKZXh0ZXJu
IHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKSA7CgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2FsbG9jYS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMg
MTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjUgIi91c3IvaW5jbHVkZS9h
bGxvY2EuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKZXh0ZXJuIHZvaWQgKmFsbG9jYSAo
c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgOwoKCgoKCn0gCgoKIyA1NDYgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMiAzCgoKCgogCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRo
cm93ICgpICAgOwoKCgoKCgoKCiAKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKIApleHRlcm4gaW50IGF0ZXhpdCAodm9p
ZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKSA7CgoKIAoKZXh0ZXJuIGludCBvbl9leGl0ICh2
b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQog
ICAgIHRocm93ICgpIDsKCgogCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJv
dyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKCiAKZXh0ZXJuIGNo
YXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpIDsKCiAKCmV4dGVybiBj
aGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKSA7CgoK
IAogCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpIDsKCgoKIAoK
ZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9f
dmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHVuc2V0
ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCkgOwoKCgogCgoKZXh0ZXJuIGludCBj
bGVhcmVudiAodm9pZCkgdGhyb3cgKCkgOwoKCgoKIAoKCgpleHRlcm4gY2hhciAqbWt0ZW1wIChj
aGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKSA7CgogCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChj
aGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgogCgoKCgpleHRlcm4gY2hh
ciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBpbnQg
c3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCkgOwoKCgoKCgoKCgoKIAoK
CgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFt
ZSwKCQkgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKSA7CgoKCiAK
Cgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2
b2lkICopOwoKCgoKCgogCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tl
eSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCgkJICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf
X3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKIAoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZv
aWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCgkJICAgX19jb21wYXJf
Zm5fdCBfX2NvbXBhcik7CgoKIApleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50
IF9feCkgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKIAoKIApl
eHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGlu
dCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgoKCgoKIAoKCiAKCgpleHRlcm4gY2hhciAqZWN2dCAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJICAgaW50
ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCkgOwoKIAoKCmV4dGVybiBjaGFyICpmY3Z0IChk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkg
ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKSA7CgogCgoKZXh0ZXJuIGNoYXIgKmdj
dnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKSA7
CgoKCiAKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsCgkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu
KSB0aHJvdyAoKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbikgdGhyb3cgKCkgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpIDsKCgogCgpleHRlcm4gaW50
IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsCgkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKCQkgICBzaXplX3QgX19sZW4pIHRocm93ICgpIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCSAgIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgc2l6ZV90
IF9fbGVuKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwKCQkgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24sCgkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xl
bikgdGhyb3cgKCkgOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwKCQkgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmlj
dCBfX3NpZ24sCgkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCkgOwoKCgoKIAoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpIDsKIAoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19wd2MsCgkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCkgOwogCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2No
YXIpIHRocm93ICgpIDsKCgogCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgIF9fcHdjcywKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bikgdGhyb3cgKCkgOwogCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAoJCQlfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpIDsKCgoKIAoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAq
X19yZXNwb25zZSkgdGhyb3cgKCkgOwoKCgojIDgxMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CgoKCgoKCgoKCiAKCgoKCgoKIyA4NDIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCiMgODUy
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAo
ZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCkgOwoKCgoKCn0gCgoKIyAx
MiAiZGVyaXZlZC5jcHAiIDIKCgogCiAKCiAKICAgICAgICBjbGFzcyBjNF9EZXJpdmVkU2VxOwog
ICAgICAgICAgICBjbGFzcyBjNF9GaWx0ZXJTZXE7CiAgICAgICAgICAgICAgICBjbGFzcyBjNF9T
b3J0U2VxOwogICAgICAgICAgICBjbGFzcyBjNF9Qcm9qZWN0U2VxOwoKIAoKY2xhc3MgYzRfRmls
dGVyU2VxIDogcHVibGljIGM0X0Rlcml2ZWRTZXEKewpwcm90ZWN0ZWQ6CiAgICBjNF9EV29yZEFy
cmF5IF9yb3dNYXA7CiAgICBjNF9EV29yZEFycmF5IF9yZXZNYXA7CiAgICBjNF9Sb3cgX2xvd1Jv
dzsKICAgIGM0X1JvdyBfaGlnaFJvdzsKICAgIGM0X0J5dGVzIF9yb3dJZHM7Cgpwcm90ZWN0ZWQ6
CiAgICBjNF9GaWx0ZXJTZXEgKGM0X1NlcXVlbmNlJiBzZXFfKTsKICAgIHZpcnR1YWwgfmM0X0Zp
bHRlclNlcSAoKTsKICAgIAogICAgdm9pZCBGaXh1cFJldmVyc2VNYXAoKTsKICAgIGludCBQb3NJ
bk1hcChpbnQgaW5kZXhfKSBjb25zdDsKICAgIGJvb2wgTWF0Y2goaW50IGluZGV4XywgYzRfU2Vx
dWVuY2UmIHNlcV8sCiAgICAgICAgICAgICAgICBjb25zdCBpbnQqID0wLCBjb25zdCBpbnQqID0w
KSBjb25zdDsKICAgIGJvb2wgTWF0Y2hPbmUoaW50IHByb3BfLCBjb25zdCBjNF9CeXRlcyYgZGF0
YV8pIGNvbnN0OwoKcHVibGljOgogICAgYzRfRmlsdGVyU2VxIChjNF9TZXF1ZW5jZSYgc2VxXywg
YzRfQ3Vyc29yIGxvd18sIGM0X0N1cnNvciBoaWdoXyk7CgogICAgdmlydHVhbCBpbnQgUmVtYXBJ
bmRleChpbnQsIGNvbnN0IGM0X1NlcXVlbmNlKikgY29uc3Q7CgogICAgdmlydHVhbCBpbnQgTnVt
Um93cygpIGNvbnN0OwogICAgCiAgICB2aXJ0dWFsIGludCBDb21wYXJlKGludCwgYzRfQ3Vyc29y
KSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBHZXQoaW50LCBpbnQsIGM0X0J5dGVzJik7CgogICAg
dmlydHVhbCB2b2lkIEluc2VydEF0KGludCwgYzRfQ3Vyc29yLCBpbnQgPTEpOwogICAgdmlydHVh
bCB2b2lkIFJlbW92ZUF0KGludCwgaW50ID0xKTsKICAgIHZpcnR1YWwgdm9pZCBTZXQoaW50LCBj
b25zdCBjNF9Qcm9wZXJ0eSYsIGNvbnN0IGM0X0J5dGVzJik7CiAgICB2aXJ0dWFsIHZvaWQgU2V0
U2l6ZShpbnQpOwoKICAgIHZpcnR1YWwgYzRfTm90aWZpZXIqIFByZUNoYW5nZShjNF9Ob3RpZmll
ciYgbmZfKTsKICAgIHZpcnR1YWwgdm9pZCBQb3N0Q2hhbmdlKGM0X05vdGlmaWVyJiBuZl8pOwp9
OwoKIAoKYzRfRmlsdGVyU2VxOjpjNF9GaWx0ZXJTZXEgKGM0X1NlcXVlbmNlJiBzZXFfKQogICAg
OiBjNF9EZXJpdmVkU2VxIChzZXFfKQp7CiAgICBfcm93TWFwLlNldFNpemUoX3NlcS5OdW1Sb3dz
KCkpOwogICAgX3Jldk1hcC5TZXRTaXplKF9zZXEuTnVtUm93cygpKTsKICAgICA7CgogICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBOdW1Sb3dzKCk7ICsraSkKICAgIHsKICAgICAgICBfcm93TWFwLlNl
dEF0KGksIGkpOwogICAgICAgIF9yZXZNYXAuU2V0QXQoaSwgaSk7CiAgICB9Cn0KCmM0X0ZpbHRl
clNlcTo6YzRfRmlsdGVyU2VxIChjNF9TZXF1ZW5jZSYgc2VxXywgYzRfQ3Vyc29yIGxvd18sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjNF9DdXJz
b3IgaGlnaF8pCiAgICA6IGM0X0Rlcml2ZWRTZXEgKHNlcV8pLCBfbG93Um93ICgqbG93XyksIF9o
aWdoUm93ICgqaGlnaF8pCnsKICAgICA7CiAgICAgOwoKICAgICAgICAgCiAgICBjNF9TZXF1ZW5j
ZSogbG93U2VxID0gKCYgX2xvd1JvdykuX3NlcTsKICAgIGM0X1NlcXVlbmNlKiBoaWdoU2VxID0g
KCYgX2hpZ2hSb3cpLl9zZXE7CiAgICAgOwoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAK
ICAgIGludCBubCA9IGxvd1NlcS0+TnVtSGFuZGxlcnMoKSwgbmggPSBoaWdoU2VxLT5OdW1IYW5k
bGVycygpOwogICAgYzRfQnl0ZXMgbG93VmVjLCBoaWdoVmVjOwogICAgaW50KiBsb3dDb2xzID0g
KGludCopIGxvd1ZlYy5TZXRCdWZmZXJDbGVhcihubCAqIHNpemVvZiAoaW50KSk7CiAgICBpbnQq
IGhpZ2hDb2xzID0gKGludCopIGhpZ2hWZWMuU2V0QnVmZmVyQ2xlYXIobmggKiBzaXplb2YgKGlu
dCkpOwoKICAgIGZvciAoaW50IGlsID0gMDsgaWwgPCBubDsgKytpbCkKICAgICAgICBsb3dDb2xz
W2lsXSA9IHNlcV8uUHJvcEluZGV4KGxvd1NlcS0+TnRoUHJvcElkKGlsKSk7CiAgICBmb3IgKGlu
dCBpaCA9IDA7IGloIDwgbmg7ICsraWgpCiAgICAgICAgaGlnaENvbHNbaWhdID0gc2VxXy5Qcm9w
SW5kZXgoaGlnaFNlcS0+TnRoUHJvcElkKGloKSk7CgogICAgICAgICAKICAgIHsKICAgICAgICBp
bnQgbWF4ID0gLTE7CiAgICAgICAgCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBpMSA9
IDA7IGkxIDwgbmw7ICsraTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBuID0g
bG93U2VxLT5OdGhQcm9wSWQoaTEpOwogICAgICAgICAgICAgICAgaWYgKG1heCA8IG4pCiAgICAg
ICAgICAgICAgICAgICAgbWF4ID0gbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGlu
dCBpMiA9IDA7IGkyIDwgbmg7ICsraTIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlu
dCBuID0gaGlnaFNlcS0+TnRoUHJvcElkKGkyKTsKICAgICAgICAgICAgICAgIGlmIChtYXggPCBu
KQogICAgICAgICAgICAgICAgICAgIG1heCA9IG47CiAgICAgICAgICAgIH0KICAgICAgICB9Cgog
ICAgICAgIHQ0X2J5dGUqIHAgPSBfcm93SWRzLlNldEJ1ZmZlckNsZWFyKG1heCArIDEpOwoKICAg
ICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGkxID0gMDsgaTEgPCBubDsgKytpMSkKICAgICAg
ICAgICAgICAgIHBbbG93U2VxLT5OdGhQcm9wSWQoaTEpXSB8PSAxOwogICAgICAgICAgICBmb3Ig
KGludCBpMiA9IDA7IGkyIDwgbmg7ICsraTIpCiAgICAgICAgICAgICAgICBwW2hpZ2hTZXEtPk50
aFByb3BJZChpMildIHw9IDI7CiAgICAgICAgfQogICAgfQoKICAgICAgICAgCgogICAgX3Jvd01h
cC5TZXRTaXplKF9zZXEuTnVtUm93cygpKTsgICAgCiAgICAKICAgIGludCBuID0gMDsKCiAgICBm
b3IgKGludCBpID0gMDsgaSA8IF9zZXEuTnVtUm93cygpOyArK2kpCiAgICAgICAgaWYgKE1hdGNo
KGksIF9zZXEsIGxvd0NvbHMsIGhpZ2hDb2xzKSkKICAgICAgICAgICAgX3Jvd01hcC5TZXRBdChu
KyssIGkpOwogICAgCiAgICBfcm93TWFwLlNldFNpemUobik7CgogICAgRml4dXBSZXZlcnNlTWFw
KCk7Cn0KCmM0X0ZpbHRlclNlcTo6fmM0X0ZpbHRlclNlcSAoKQp7Cn0KCnZvaWQgYzRfRmlsdGVy
U2VxOjpGaXh1cFJldmVyc2VNYXAoKQp7CiAgICBpbnQgbiA9IF9zZXEuTnVtUm93cygpOwoKICAg
IF9yZXZNYXAuU2V0U2l6ZSgwKTsKCiAgICBpZiAobiA+IDApCiAgICB7CiAgICAgICAgX3Jldk1h
cC5JbnNlcnRBdCgwLCB+ICh0NF9pMzIpIDAsIG4pOyAgCgogICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgX3Jvd01hcC5HZXRTaXplKCk7ICsraSkKICAgICAgICAgICAgX3Jldk1hcC5TZXRBdCgo
aW50KSBfcm93TWFwLkdldEF0KGkpLCBpKTsKICAgIH0KfQoKYm9vbCBjNF9GaWx0ZXJTZXE6Ok1h
dGNoT25lKGludCBwcm9wXywgY29uc3QgYzRfQnl0ZXMmIGRhdGFfKSBjb25zdAp7CiAgICAgOwoK
ICAgIHQ0X2J5dGUgZmxhZyA9IF9yb3dJZHMuQ29udGVudHMoKVtwcm9wX107CiAgICAgOwoKICAg
IGlmIChmbGFnICYgMSkKICAgIHsKICAgICAgICBjNF9TZXF1ZW5jZSogbG93U2VxID0gKCYgX2xv
d1JvdykuX3NlcTsKCiAgICAgICAgYzRfSGFuZGxlciYgaCA9IGxvd1NlcS0+TnRoSGFuZGxlcihs
b3dTZXEtPlByb3BJbmRleChwcm9wXykpOwogICAgICAgIGlmIChoLkNvbXBhcmUoMCwgZGF0YV8p
ID4gMCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChmbGFnICYgMikK
ICAgIHsKICAgICAgICBjNF9TZXF1ZW5jZSogaGlnaFNlcSA9ICgmIF9oaWdoUm93KS5fc2VxOwoK
ICAgICAgICBjNF9IYW5kbGVyJiBoID0gaGlnaFNlcS0+TnRoSGFuZGxlcihoaWdoU2VxLT5Qcm9w
SW5kZXgocHJvcF8pKTsKICAgICAgICBpZiAoaC5Db21wYXJlKDAsIGRhdGFfKSA8IDApCiAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBjNF9G
aWx0ZXJTZXE6Ok1hdGNoKGludCBpbmRleF8sIGM0X1NlcXVlbmNlJiBzZXFfLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiBsb3dDb2xzXywgY29uc3QgaW50KiBoaWdoQ29s
c18pIGNvbnN0CnsKICAgICAgICAgCiAgICBjNF9TZXF1ZW5jZSogbG93U2VxID0gKCYgX2xvd1Jv
dykuX3NlcTsKICAgIGM0X1NlcXVlbmNlKiBoaWdoU2VxID0gKCYgX2hpZ2hSb3cpLl9zZXE7CiAg
ICAgOwoKICAgIGludCBubCA9IGxvd1NlcS0+TnVtSGFuZGxlcnMoKSwgbmggPSBoaWdoU2VxLT5O
dW1IYW5kbGVycygpOwoKICAgIGM0X0J5dGVzIGRhdGE7CgogICAgICAgICAKICAgIGZvciAoaW50
IGNsID0gMDsgY2wgPCBubDsgKytjbCkKICAgIHsKICAgICAgICBjNF9IYW5kbGVyJiBobCA9IGxv
d1NlcS0+TnRoSGFuZGxlcihjbCk7CgogICAgICAgIGludCBuID0gbG93Q29sc18gPyBsb3dDb2xz
X1tjbF0gIAogICAgICAgICAgICAgICAgICAgICAgICAgOiBzZXFfLlByb3BJbmRleChsb3dTZXEt
Pk50aFByb3BJZChjbCkpOwogICAgICAgIGlmIChuID49IDApCiAgICAgICAgewogICAgICAgICAg
ICBjNF9IYW5kbGVyJiBoID0gc2VxXy5OdGhIYW5kbGVyKG4pOwogICAgICAgICAgICBjb25zdCBj
NF9TZXF1ZW5jZSogaGMgPSBzZXFfLkhhbmRsZXJDb250ZXh0KG4pOwogICAgICAgICAgICBpbnQg
aSA9IHNlcV8uUmVtYXBJbmRleChpbmRleF8sIGhjKTsKCiAgICAgICAgICAgIGguR2V0Qnl0ZXMo
aSwgZGF0YSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgaGwuQ2xlYXJCeXRl
cyhkYXRhKTsKCiAgICAgICAgaWYgKGhsLkNvbXBhcmUoMCwgZGF0YSkgPiAwKQogICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgICAgICAgCiAgICBmb3IgKGludCBjaCA9IDA7
IGNoIDwgbmg7ICsrY2gpCiAgICB7CiAgICAgICAgYzRfSGFuZGxlciYgaGggPSBoaWdoU2VxLT5O
dGhIYW5kbGVyKGNoKTsKCiAgICAgICAgaW50IG4gPSBoaWdoQ29sc18gPyBoaWdoQ29sc19bY2hd
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlcV8uUHJvcEluZGV4KGhpZ2hTZXEtPk50
aFByb3BJZChjaCkpOwogICAgICAgIGlmIChuID49IDApCiAgICAgICAgewogICAgICAgICAgICBj
NF9IYW5kbGVyJiBoID0gc2VxXy5OdGhIYW5kbGVyKG4pOwogICAgICAgICAgICBjb25zdCBjNF9T
ZXF1ZW5jZSogaGMgPSBzZXFfLkhhbmRsZXJDb250ZXh0KG4pOwogICAgICAgICAgICBpbnQgaSA9
IHNlcV8uUmVtYXBJbmRleChpbmRleF8sIGhjKTsKCiAgICAgICAgICAgIGguR2V0Qnl0ZXMoaSwg
ZGF0YSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgaGguQ2xlYXJCeXRlcyhk
YXRhKTsKCiAgICAgICAgaWYgKGhoLkNvbXBhcmUoMCwgZGF0YSkgPCAwKQogICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgIHJldHVybiB0cnVlOwp9CgppbnQgYzRfRmlsdGVy
U2VxOjpSZW1hcEluZGV4KGludCBpbmRleF8sIGNvbnN0IGM0X1NlcXVlbmNlKiBzZXFfKSBjb25z
dAp7CiAgICByZXR1cm4gc2VxXyA9PSB0aGlzID8gaW5kZXhfIAogICAgICAgICAgICAgICAgICAg
ICAgICA6IF9zZXEuUmVtYXBJbmRleCgoaW50KSBfcm93TWFwLkdldEF0KGluZGV4XyksIHNlcV8p
Owp9CiAgICAKaW50IGM0X0ZpbHRlclNlcTo6TnVtUm93cygpIGNvbnN0CnsKICAgIHJldHVybiBf
cm93TWFwLkdldFNpemUoKTsKfQoKaW50IGM0X0ZpbHRlclNlcTo6Q29tcGFyZShpbnQgaW5kZXhf
LCBjNF9DdXJzb3IgY3Vyc29yXykgY29uc3QKewogICAgcmV0dXJuIF9zZXEuQ29tcGFyZSgoaW50
KSBfcm93TWFwLkdldEF0KGluZGV4XyksIGN1cnNvcl8pOwp9Cgpib29sIGM0X0ZpbHRlclNlcTo6
R2V0KGludCBpbmRleF8sIGludCBwcm9wSWRfLCBjNF9CeXRlcyYgYnl0ZXNfKQp7CiAgICByZXR1
cm4gX3NlcS5HZXQoKGludCkgX3Jvd01hcC5HZXRBdChpbmRleF8pLCBwcm9wSWRfLCBieXRlc18p
Owp9Cgp2b2lkIGM0X0ZpbHRlclNlcTo6SW5zZXJ0QXQoaW50LCBjNF9DdXJzb3IsIGludCkKewog
ICAgIDsKfQoKdm9pZCBjNF9GaWx0ZXJTZXE6OlJlbW92ZUF0KGludCwgaW50KQp7CiAgICAgOwp9
Cgp2b2lkIGM0X0ZpbHRlclNlcTo6U2V0KGludCwgY29uc3QgYzRfUHJvcGVydHkmLCBjb25zdCBj
NF9CeXRlcyYpCnsKICAgICA7Cn0KCnZvaWQgYzRfRmlsdGVyU2VxOjpTZXRTaXplKGludCkKewog
ICAgIDsKfQoKaW50IGM0X0ZpbHRlclNlcTo6UG9zSW5NYXAoaW50IGluZGV4XykgY29uc3QKewog
ICAgaW50IGkgPSAwOwoKICAgIHdoaWxlIChpIDwgTnVtUm93cygpKQogICAgICAgIGlmICgoaW50
KSBfcm93TWFwLkdldEF0KGkpID49IGluZGV4XykKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ZWxzZQogICAgICAgICAgICArK2k7CgogICAgcmV0dXJuIGk7Cn0KCmM0X05vdGlmaWVyKiBjNF9G
aWx0ZXJTZXE6OlByZUNoYW5nZShjNF9Ob3RpZmllciYgbmZfKQp7CiAgICBpZiAoIUdldERlcGVu
ZGVuY2llcygpKQogICAgICAgIHJldHVybiAwOwoKICAgIGM0X05vdGlmaWVyKiBjaGcgPSBuZXcg
IGM0X05vdGlmaWVyICh0aGlzKTsKCiAgICBib29sIHBhc3MgPSBmYWxzZTsKCiAgICBzd2l0Y2gg
KG5mXy5fdHlwZSkKICAgIHsKICAgICAgICBjYXNlIGM0X05vdGlmaWVyOjprU2V0OgogICAgICAg
ICAgICBwYXNzID0gbmZfLl9wcm9wSWQgPj0gX3Jvd0lkcy5TaXplKCkgfHwKICAgICAgICAgICAg
ICAgICAgICBfcm93SWRzLkNvbnRlbnRzKClbbmZfLl9wcm9wSWRdID09IDA7CiAgICAgICAgICAg
ICAKCiAgICAgICAgY2FzZSBjNF9Ob3RpZmllcjo6a1NldEF0OgogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBpbnQgciA9IChpbnQpIF9yZXZNYXAuR2V0QXQobmZfLl9pbmRleCk7CgogICAg
ICAgICAgICAgICAgYm9vbCBpbmNsdWRlUm93ID0gciA+PSAwOwogICAgICAgICAgICAgICAgaWYg
KCFwYXNzKQogICAgICAgICAgICAgICAgICAgIGlmIChuZl8uX3R5cGUgPT0gYzRfTm90aWZpZXI6
OmtTZXRBdCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVSb3cgPSBNYXRjaChuZl8uX2N1cnNvci0+
X2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZl8u
X2N1cnNvci0+X3NlcSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IGVsc2UgIAogICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlUm93ID0gTWF0Y2hPbmUobmZf
Ll9wcm9wSWQsICpuZl8uX2J5dGVzKTsKCiAgICAgICAgICAgICAgICBpZiAociA+PSAwICYmICFp
bmNsdWRlUm93KQogICAgICAgICAgICAgICAgICAgIGNoZy0+U3RhcnRSZW1vdmVBdChyLCAxKTsK
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIgPCAwICYmIGluY2x1ZGVSb3cpCiAgICAgICAgICAg
ICAgICAgICAgY2hnLT5TdGFydEluc2VydEF0KFBvc0luTWFwKG5mXy5faW5kZXgpLCAqbmZfLl9j
dXJzb3IsIDEpOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5jbHVkZVJvdykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICBpZiAo
bmZfLl90eXBlID09IGM0X05vdGlmaWVyOjprU2V0QXQpCiAgICAgICAgICAgICAgICAgICAgICAg
IGNoZy0+U3RhcnRTZXRBdChyLCAqbmZfLl9jdXJzb3IpOwogICAgICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgICAgY2hnLT5TdGFydFNldChyLCBuZl8uX3Byb3BJZCwg
Km5mXy5fYnl0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAg
IGJyZWFrOwoKICAgICAgICBjYXNlIGM0X05vdGlmaWVyOjprSW5zZXJ0QXQ6CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGludCBpID0gUG9zSW5NYXAobmZfLl9pbmRleCk7CgogICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGlmIChNYXRjaChuZl8uX2N1cnNvci0+X2luZGV4
LCAqbmZfLl9jdXJzb3ItPl9zZXEpKQogICAgICAgICAgICAgICAgICAgIGNoZy0+U3RhcnRJbnNl
cnRBdChpLCAqbmZfLl9jdXJzb3IsIG5mXy5fY291bnQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGJyZWFrOwoKICAgICAgICBjYXNlIGM0X05vdGlmaWVyOjprUmVtb3ZlQXQ6CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIGludCBpID0gUG9zSW5NYXAobmZfLl9pbmRleCk7CiAgICAg
ICAgICAgICAgICBpbnQgaiA9IFBvc0luTWFwKG5mXy5faW5kZXggKyBuZl8uX2NvdW50KTsKICAg
ICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgaWYgKGogPiBpKQogICAgICAgICAgICAg
ICAgICAgIGNoZy0+U3RhcnRSZW1vdmVBdChpLCBqIC0gaSk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgYzRfTm90aWZpZXI6OmtNb3ZlOgogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBpbnQgaSA9IFBvc0luTWFwKG5mXy5faW5kZXgpOwogICAgICAg
ICAgICAgICAgYm9vbCBpbk1hcCA9IGkgPCBOdW1Sb3dzKCkgJiYgKGludCkgX3Jvd01hcC5HZXRB
dChpKSA9PSBuZl8uX2luZGV4OwoKICAgICAgICAgICAgICAgIGlmIChpbk1hcCAmJiBuZl8uX2lu
ZGV4ICE9IG5mXy5fY291bnQpCiAgICAgICAgICAgICAgICAgICAgY2hnLT5TdGFydE1vdmUoaSwg
UG9zSW5NYXAobmZfLl9jb3VudCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwog
ICAgfQoKICAgIHJldHVybiBjaGc7Cn0KCnZvaWQgYzRfRmlsdGVyU2VxOjpQb3N0Q2hhbmdlKGM0
X05vdGlmaWVyJiBuZl8pCnsKICAgIGJvb2wgcGFzcyA9IGZhbHNlOwoKICAgIHN3aXRjaCAobmZf
Ll90eXBlKQogICAgewogICAgICAgIGNhc2UgYzRfTm90aWZpZXI6OmtTZXQ6CiAgICAgICAgICAg
IHBhc3MgPSBuZl8uX3Byb3BJZCA+PSBfcm93SWRzLlNpemUoKSB8fAogICAgICAgICAgICAgICAg
ICAgIF9yb3dJZHMuQ29udGVudHMoKVtuZl8uX3Byb3BJZF0gPT0gMDsKICAgICAgICAgICAgIAoK
ICAgICAgICBjYXNlIGM0X05vdGlmaWVyOjprU2V0QXQ6CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGludCByID0gKGludCkgX3Jldk1hcC5HZXRBdChuZl8uX2luZGV4KTsKCiAgICAgICAg
ICAgICAgICBib29sIGluY2x1ZGVSb3cgPSByID49IDA7CiAgICAgICAgICAgICAgICBpZiAoIXBh
c3MpCiAgICAgICAgICAgICAgICAgICAgaWYgKG5mXy5fdHlwZSA9PSBjNF9Ob3RpZmllcjo6a1Nl
dEF0KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZVJvdyA9IE1hdGNoKG5mXy5fY3Vyc29yLT5faW5k
ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5mXy5fY3Vy
c29yLT5fc2VxKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxz
ZSAgCiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVSb3cgPSBNYXRjaE9uZShuZl8uX3By
b3BJZCwgKm5mXy5fYnl0ZXMpOwoKICAgICAgICAgICAgICAgIGlmIChyID49IDAgJiYgIWluY2x1
ZGVSb3cpCiAgICAgICAgICAgICAgICAgICAgX3Jvd01hcC5SZW1vdmVBdChyKTsKICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHIgPCAwICYmIGluY2x1ZGVSb3cpCiAgICAgICAgICAgICAgICAgICAg
X3Jvd01hcC5JbnNlcnRBdChQb3NJbk1hcChuZl8uX2luZGV4KSwgbmZfLl9pbmRleCk7CiAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAg
ICAgRml4dXBSZXZlcnNlTWFwKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7Cgog
ICAgICAgIGNhc2UgYzRfTm90aWZpZXI6OmtJbnNlcnRBdDoKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgaW50IGkgPSBuZl8uX2luZGV4IDwgX3Jldk1hcC5HZXRTaXplKCkgPwogICAgICAg
ICAgICAgICAgICAgIChpbnQpIF9yZXZNYXAuR2V0QXQobmZfLl9pbmRleCkgOiBOdW1Sb3dzKCk7
CgogICAgICAgICAgICAgICAgaWYgKE1hdGNoKG5mXy5faW5kZXgsIF9zZXEpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIF9yb3dNYXAuSW5zZXJ0QXQoaSwgMCwgbmZfLl9j
b3VudCk7CgogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmZfLl9jb3Vu
dDsgKytqKQogICAgICAgICAgICAgICAgICAgICAgICBfcm93TWFwLlNldEF0KGkrKywgbmZfLl9p
bmRleCArIGopOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHdoaWxlIChpIDwg
TnVtUm93cygpKQogICAgICAgICAgICAgICAgICAgIF9yb3dNYXAuRWxlbWVudEF0KGkrKykgKz0g
bmZfLl9jb3VudDsKCiAgICAgICAgICAgICAgICBGaXh1cFJldmVyc2VNYXAoKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBjNF9Ob3RpZmllcjo6a1JlbW92
ZUF0OgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgaSA9IFBvc0luTWFwKG5mXy5f
aW5kZXgpOwogICAgICAgICAgICAgICAgaW50IGogPSBQb3NJbk1hcChuZl8uX2luZGV4ICsgbmZf
Ll9jb3VudCk7CiAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgIGlmIChqID4gaSkK
ICAgICAgICAgICAgICAgICAgICBfcm93TWFwLlJlbW92ZUF0KGksIGogLSBpKTsKCiAgICAgICAg
ICAgICAgICB3aGlsZSAoaSA8IE51bVJvd3MoKSkKICAgICAgICAgICAgICAgICAgICBfcm93TWFw
LkVsZW1lbnRBdChpKyspIC09IG5mXy5fY291bnQ7CgogICAgICAgICAgICAgICAgRml4dXBSZXZl
cnNlTWFwKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2Ug
YzRfTm90aWZpZXI6OmtNb3ZlOgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgaSA9
IFBvc0luTWFwKG5mXy5faW5kZXgpOwogICAgICAgICAgICAgICAgYm9vbCBpbk1hcCA9IGkgPCBO
dW1Sb3dzKCkgJiYgKGludCkgX3Jvd01hcC5HZXRBdChpKSA9PSBuZl8uX2luZGV4OwoKICAgICAg
ICAgICAgICAgIGlmIChpbk1hcCAmJiBuZl8uX2luZGV4ICE9IG5mXy5fY291bnQpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW50IGogPSBQb3NJbk1hcChuZl8uX2NvdW50
KTsKCiAgICAgICAgICAgICAgICAgICAgX3Jvd01hcC5SZW1vdmVBdChpKTsKCiAgICAgICAgICAg
ICAgICAgICAgaWYgKGogPiBpKQogICAgICAgICAgICAgICAgICAgICAgICAtLWo7CgogICAgICAg
ICAgICAgICAgICAgIF9yb3dNYXAuSW5zZXJ0QXQoaiwgbmZfLl9jb3VudCk7CgogICAgICAgICAg
ICAgICAgICAgIEZpeHVwUmV2ZXJzZU1hcCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9CgogCgpjbGFzcyBjNF9Tb3J0U2VxIDogcHVi
bGljIGM0X0ZpbHRlclNlcQp7CnB1YmxpYzoKICAgIHR5cGVkZWYgdDRfaTMyIFQ7CgogICAgYzRf
U29ydFNlcSAoYzRfU2VxdWVuY2UmIHNlcV8sIGM0X1NlcXVlbmNlKiBkb3duXyk7CiAgICB2aXJ0
dWFsIH5jNF9Tb3J0U2VxICgpOwoKICAgIHZpcnR1YWwgYzRfTm90aWZpZXIqIFByZUNoYW5nZShj
NF9Ob3RpZmllciYgbmZfKTsKICAgIHZpcnR1YWwgdm9pZCBQb3N0Q2hhbmdlKGM0X05vdGlmaWVy
JiBuZl8pOwoKcHJpdmF0ZToKICAgIHN0cnVjdCBjNF9Tb3J0SW5mbwogICAgewogICAgICAgIGM0
X0hhbmRsZXIqICAgICAgICAgX2hhbmRsZXI7CiAgICAgICAgY29uc3QgYzRfU2VxdWVuY2UqICBf
Y29udGV4dDsKICAgICAgICBjNF9CeXRlcyAgICAgICAgICAgIF9idWZmZXI7CgogICAgICAgIGlu
dCBDb21wYXJlT25lKGM0X1NlcXVlbmNlJiBzZXFfLCBUIGEsIFQgYikKICAgICAgICB7CiAgICAg
ICAgICAgIF9oYW5kbGVyLT5HZXRCeXRlcyhzZXFfLlJlbWFwSW5kZXgoKGludCkgYiwgX2NvbnRl
eHQpLCBfYnVmZmVyLCB0cnVlKTsKICAgICAgICAgICAgcmV0dXJuIF9oYW5kbGVyLT5Db21wYXJl
KHNlcV8uUmVtYXBJbmRleCgoaW50KSBhLCBfY29udGV4dCksIF9idWZmZXIpOwogICAgICAgIH0K
ICAgIH07CgogICAgYm9vbCBMZXNzVGhhbihUIGEsIFQgYik7CiAgICBib29sIFRlc3RTd2FwKCBU
JiBmaXJzdCAsIFQmIHNlY29uZCApOwogICAgdm9pZCBNZXJnZVNvcnRUaGlzKCBUKiBhciwgaW50
IHNpemUgLCBUIHNjcmF0Y2hbXSApOwogICAgdm9pZCBNZXJnZVNvcnQoIFQgYXJbXSAsIGludCBz
aXplICk7CgogICAgdmlydHVhbCBpbnQgQ29tcGFyZShpbnQsIGM0X0N1cnNvcikgY29uc3Q7CiAg
ICBpbnQgUG9zSW5NYXAoYzRfQ3Vyc29yIGN1cnNvcl8pIGNvbnN0OwoKICAgIGM0X1NvcnRJbmZv
KiBfaW5mbzsKICAgIGM0X0J5dGVzIF9kb3duOwogICAgaW50IF93aWR0aDsKfTsKCiAKCmJvb2wg
YzRfU29ydFNlcTo6TGVzc1RoYW4oVCBhLCBUIGIpCnsKICAgIGlmIChhID09IGIpCiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgIAogICAgICAgICAKICAgICAgICAgCgogICAgYzRfU29ydElu
Zm8qIGluZm87CgogICAgZm9yIChpbmZvID0gX2luZm87IGluZm8tPl9oYW5kbGVyOyArK2luZm8p
CiAgICB7CiAgICAgICAgaW50IGYgPSBpbmZvLT5Db21wYXJlT25lKF9zZXEsIGEsIGIpOwogICAg
ICAgIGlmIChmKQogICAgICAgIHsKICAgICAgICAgICAgaW50IG4gPSBpbmZvIC0gX2luZm87CiAg
ICAgICAgICAgIGlmIChfd2lkdGggPCBuKQogICAgICAgICAgICAgICAgX3dpZHRoID0gbjsKCiAg
ICAgICAgICAgIHJldHVybiAoX2Rvd24uQ29udGVudHMoKVtuXSA/IC1mIDogZikgPCAwOwogICAg
ICAgIH0KICAgIH0KCiAgICBfd2lkdGggPSBpbmZvIC0gX2luZm87CiAgICByZXR1cm4gYSA8IGI7
Cn0KCmlubGluZSBib29sIGM0X1NvcnRTZXE6OlRlc3RTd2FwKCBUJiBmaXJzdCAsIFQmIHNlY29u
ZCApCnsKICAgIGlmICggTGVzc1RoYW4oIHNlY29uZCAsIGZpcnN0ICkgKQogICAgewogICAgICAg
IFQgdGVtcCA9IGZpcnN0OyBmaXJzdCA9IHNlY29uZDsgc2Vjb25kID0gdGVtcDsKICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCnZvaWQgYzRfU29ydFNlcTo6
TWVyZ2VTb3J0VGhpcyggVCogYXIsIGludCBzaXplICwgVCBzY3JhdGNoW10gKQp7CiAgICBzd2l0
Y2goIHNpemUgKQogICAgewogICAgIAogICAgY2FzZSAyOgogICAgICAgIFRlc3RTd2FwKCBhclsg
MCBdICwgYXJbIDEgXSApOwogICAgYnJlYWs7CgogICAgY2FzZSAzOgogICAgICAgIFRlc3RTd2Fw
KCBhclsgMCBdICwgYXJbIDEgXSApOwogICAgICAgIGlmICggVGVzdFN3YXAoIGFyWyAxIF0gLCBh
clsgMiBdICkgKQogICAgICAgICAgICBUZXN0U3dhcCggYXJbIDAgXSAsIGFyWyAxIF0gKTsKICAg
ICAgICBicmVhazsKCiAgICBjYXNlIDQ6CiAgICAgICAgIAogICAgICAgIFRlc3RTd2FwKCBhclsg
MCBdICwgYXJbIDEgXSApOwogICAgICAgIFRlc3RTd2FwKCBhclsgMiBdICwgYXJbIDMgXSApOwog
ICAgICAgIFRlc3RTd2FwKCBhclsgMCBdICwgYXJbIDIgXSApOwogICAgICAgIFRlc3RTd2FwKCBh
clsgMSBdICwgYXJbIDMgXSApOwogICAgICAgIFRlc3RTd2FwKCBhclsgMSBdICwgYXJbIDIgXSAp
OwogICAgICAgIGJyZWFrOwoKICAgICAgICAgCgogICAgZGVmYXVsdDoKICAgICAgICAgCiAgICAg
ICAgewogICAgICAgICAgICBpbnQgczEgPSBzaXplIC8gMjsKICAgICAgICAgICAgaW50IHMyID0g
c2l6ZSAtIHMxOwogICAgICAgICAgICBUKiBmcm9tMV8gPSBzY3JhdGNoOwogICAgICAgICAgICBU
KiBmcm9tMl8gPSBzY3JhdGNoICsgczE7CiAgICAgICAgICAgIE1lcmdlU29ydFRoaXMoIGZyb20x
XyAsIHMxICwgYXIgKTsKICAgICAgICAgICAgTWVyZ2VTb3J0VGhpcyggZnJvbTJfICwgczIgLCBh
ciArIHMxICk7CgogICAgICAgICAgICBUKiB0bzFfID0gZnJvbTFfICsgczE7CiAgICAgICAgICAg
IFQqIHRvMl8gPSBmcm9tMl8gKyBzMjsKCiAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGlmICggTGVzc1RoYW4oICpmcm9tMV8sICpmcm9tMl8pICkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAqYXIrKyA9ICpmcm9tMV8rKzsKCiAg
ICAgICAgICAgICAgICAgICAgaWYgIChmcm9tMV8gPj0gdG8xXykKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCBmcm9tMl8gPCB0bzJfICkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICphcisrID0gKmZyb20yXysrOwogICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
KmFyKysgPSAqZnJvbTJfKys7CgogICAgICAgICAgICAgICAgICAgIGlmICAoZnJvbTJfID49IHRv
Ml8pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgg
ZnJvbTFfIDwgdG8xXyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXIrKyA9ICpmcm9t
MV8rKzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CiAgICAK
dm9pZCBjNF9Tb3J0U2VxOjpNZXJnZVNvcnQoIFQgYXJbXSAsIGludCBzaXplICkKewogICAgaWYg
KCBzaXplID4gMSApCiAgICB7CiAgICAgICAgVCogc2NyYXRjaCA9IG5ldyAgVCBbc2l6ZV07CiAg
ICAgICAgbWVtY3B5KHNjcmF0Y2ggLCBhciAsIHNpemUgKiBzaXplb2YgKFQpKTsKICAgICAgICBN
ZXJnZVNvcnRUaGlzKGFyICwgc2l6ZSAsIHNjcmF0Y2gpOwogICAgICAgIGRlbGV0ZSBbXSBzY3Jh
dGNoOwogICAgfQp9CgpjNF9Tb3J0U2VxOjpjNF9Tb3J0U2VxIChjNF9TZXF1ZW5jZSYgc2VxXywg
YzRfU2VxdWVuY2UqIGRvd25fKQogICAgOiBjNF9GaWx0ZXJTZXEgKHNlcV8pLCBfaW5mbyAoMCks
IF93aWR0aCAoLTEpCnsKICAgICA7CgogICAgaWYgKE51bVJvd3MoKSA+IDApCiAgICB7CiAgICAg
ICAgICAgICAKICAgICAgICBjaGFyKiBkb3duID0gKGNoYXIqKSBfZG93bi5TZXRCdWZmZXJDbGVh
cihOdW1IYW5kbGVycygpKTsKCiAgICAgICAgICAgICAKICAgICAgICBpZiAoZG93bl8pCiAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTnVtSGFuZGxlcnMoKTsgKytpKQogICAgICAgICAg
ICAgICAgaWYgKGRvd25fLT5Qcm9wSW5kZXgoTnRoUHJvcElkKGkpKSA+PSAwKQogICAgICAgICAg
ICAgICAgICAgIGRvd25baV0gPSAxOwoKICAgICAgICBfd2lkdGggPSAtMTsKICAgICAgICBfaW5m
byA9IG5ldyAgYzRfU29ydEluZm8gW051bUhhbmRsZXJzKCkgKyAxXTsKCiAgICAgICAgaW50IGo7
CgogICAgICAgIGZvciAoaiA9IDA7IGogPCBOdW1IYW5kbGVycygpOyArK2opCiAgICAgICAgewog
ICAgICAgICAgICBfaW5mb1tqXS5faGFuZGxlciA9ICYgX3NlcS5OdGhIYW5kbGVyKGopOwogICAg
ICAgICAgICBfaW5mb1tqXS5fY29udGV4dCA9IF9zZXEuSGFuZGxlckNvbnRleHQoaik7CiAgICAg
ICAgfQoKICAgICAgICBfaW5mb1tqXS5faGFuZGxlciA9IDA7CgogICAgICAgICAgICAgCiAgICAg
ICAgTWVyZ2VTb3J0KChUKikgJl9yb3dNYXAuRWxlbWVudEF0KDApLCBOdW1Sb3dzKCkpOwoKICAg
ICAgICBkZWxldGUgW10gX2luZm87CiAgICAgICAgX2luZm8gPSAwOwoKICAgICAgICBGaXh1cFJl
dmVyc2VNYXAoKTsKICAgIH0KfQoKYzRfU29ydFNlcTo6fmM0X1NvcnRTZXEgKCkKewogICAgIDsK
fQoKaW50IGM0X1NvcnRTZXE6OkNvbXBhcmUoaW50IGluZGV4XywgYzRfQ3Vyc29yIGN1cnNvcl8p
IGNvbnN0CnsKICAgICA7CgogICAgY29uc3QgY2hhciogZG93biA9IChjb25zdCBjaGFyKikgX2Rv
d24uQ29udGVudHMoKTsKICAgICA7CgogICAgYzRfQnl0ZXMgZGF0YTsKCiAgICBmb3IgKGludCBj
b2xOdW0gPSAwOyBjb2xOdW0gPCBOdW1IYW5kbGVycygpOyArK2NvbE51bSkKICAgIHsKICAgICAg
ICBjNF9IYW5kbGVyJiBoID0gTnRoSGFuZGxlcihjb2xOdW0pOwogICAgICAgIGNvbnN0IGM0X1Nl
cXVlbmNlKiBoYyA9IEhhbmRsZXJDb250ZXh0KGNvbE51bSk7CgogICAgICAgIGlmICghY3Vyc29y
Xy5fc2VxLT5HZXQoY3Vyc29yXy5faW5kZXgsIGguUHJvcElkKCksIGRhdGEpKQogICAgICAgICAg
ICBoLkNsZWFyQnl0ZXMoZGF0YSk7CiAgICAgICAgICAgICAgICAKICAgICAgICBpbnQgZiA9IGgu
Q29tcGFyZShSZW1hcEluZGV4KGluZGV4XywgaGMpLCBkYXRhKTsKICAgICAgICBpZiAoZiAhPSAw
KQogICAgICAgICAgICByZXR1cm4gY29sTnVtIDwgX2Rvd24uU2l6ZSgpICYmIGRvd25bY29sTnVt
XSA/IC1mIDogK2Y7CiAgICB9ICAgICAgICAgICAgICAgIAogICAgCiAgICByZXR1cm4gMDsKfQoK
aW50IGM0X1NvcnRTZXE6OlBvc0luTWFwKGM0X0N1cnNvciBjdXJzb3JfKSBjb25zdAp7CiAgICBp
bnQgaSA9IDA7CgogICAgd2hpbGUgKGkgPCBOdW1Sb3dzKCkpCiAgICAgICAgaWYgKENvbXBhcmUo
aSwgY3Vyc29yXykgPj0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZWxzZQogICAgICAg
ICAgICArK2k7CgogICAgIDsKICAgIHJldHVybiBpOwp9CgpjNF9Ob3RpZmllciogYzRfU29ydFNl
cTo6UHJlQ2hhbmdlKGM0X05vdGlmaWVyJiBuZl8pCnsKICAgIGlmICghR2V0RGVwZW5kZW5jaWVz
KCkpCiAgICAgICAgcmV0dXJuIDA7CgojIDc4MyAiZGVyaXZlZC5jcHAiCgoKIAogICAgcmV0dXJu
IDA7Cn0KCnZvaWQgYzRfU29ydFNlcTo6UG9zdENoYW5nZShjNF9Ob3RpZmllciYgbmZfKQp7CiAg
ICBzd2l0Y2ggKG5mXy5fdHlwZSkKICAgIHsKICAgICAgICBjYXNlIGM0X05vdGlmaWVyOjprU2V0
OgogICAgICAgICAgICBpZiAoX3NlcS5Qcm9wSW5kZXgobmZfLl9wcm9wSWQpID4gX3dpZHRoKQog
ICAgICAgICAgICAgICAgYnJlYWs7ICAKCiAgICAgICAgY2FzZSBjNF9Ob3RpZmllcjo6a1NldEF0
OgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgb2kgPSAoaW50KSBfcmV2TWFwLkdl
dEF0KG5mXy5faW5kZXgpOwogICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICBjNF9D
dXJzb3IgY3Vyc29yIChfc2VxLCBuZl8uX2luZGV4KTsKCiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgaWYgKChvaSA+IDAgJiYgQ29tcGFyZShvaSAtIDEsIGN1cnNvcikgPiAw
KSB8fAogICAgICAgICAgICAgICAgICAgIChvaSsxIDwgTnVtUm93cygpICYmIENvbXBhcmUob2kr
MSwgY3Vyc29yKSA8IDApKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9y
b3dNYXAuUmVtb3ZlQXQob2kpOwogICAgICAgICAgICAgICAgICAgIF9yb3dNYXAuSW5zZXJ0QXQo
UG9zSW5NYXAoY3Vyc29yKSwgbmZfLl9pbmRleCk7CgogICAgICAgICAgICAgICAgICAgIEZpeHVw
UmV2ZXJzZU1hcCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIF93aWR0aCA9
IE51bUhhbmRsZXJzKCk7ICAKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKCiAgICAg
ICAgY2FzZSBjNF9Ob3RpZmllcjo6a0luc2VydEF0OgogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgYzRfQ3Vyc29yIGN1cnNvciAoX3NlcSwgbmZfLl9p
bmRleCk7CiAgICAgICAgICAgICAgICBpZiAobmZfLl9jdXJzb3IpCiAgICAgICAgICAgICAgICAg
ICAgY3Vyc29yID0gKm5mXy5fY3Vyc29yOwoKICAgICAgICAgICAgICAgIGZvciAoaW50IG4gPSAw
OyBuIDwgTnVtUm93cygpOyArK24pCiAgICAgICAgICAgICAgICAgICAgaWYgKChpbnQpIF9yb3dN
YXAuR2V0QXQobikgPj0gbmZfLl9pbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgX3Jvd01h
cC5FbGVtZW50QXQobikgKz0gbmZfLl9jb3VudDsKCiAgICAgICAgICAgICAgICBpbnQgaSA9IFBv
c0luTWFwKGN1cnNvcik7CiAgICAgICAgICAgICAgICBfcm93TWFwLkluc2VydEF0KGksIDAsIG5m
Xy5fY291bnQpOwoKICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbmZfLl9jb3Vu
dDsgKytqKQogICAgICAgICAgICAgICAgICAgIF9yb3dNYXAuU2V0QXQoaSsrLCBuZl8uX2luZGV4
ICsgaik7CgogICAgICAgICAgICAgICAgRml4dXBSZXZlcnNlTWFwKCk7CgogICAgICAgICAgICAg
ICAgX3dpZHRoID0gTnVtSGFuZGxlcnMoKTsgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGJy
ZWFrOwoKICAgICAgICBjYXNlIGM0X05vdGlmaWVyOjprUmVtb3ZlQXQ6CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIGludCBsbyA9IG5mXy5faW5kZXg7CiAgICAgICAgICAgICAgICBpbnQg
aGkgPSBuZl8uX2luZGV4ICsgbmZfLl9jb3VudDsKICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgaW50IGogPSAwOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1S
b3dzKCk7ICsraSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpbnQgbiA9
IChpbnQpIF9yb3dNYXAuR2V0QXQoaSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuID49IGhp
KQogICAgICAgICAgICAgICAgICAgICAgICBfcm93TWFwLkVsZW1lbnRBdChpKSAtPSBuZl8uX2Nv
dW50OwoKICAgICAgICAgICAgICAgICAgICBpZiAoIShsbyA8PSBuICYmIG4gPCBoaSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9yb3dNYXAuU2V0QXQoaisrLCBfcm93TWFwLkdldEF0KGkpKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgX3Jv
d01hcC5TZXRTaXplKGopOwoKICAgICAgICAgICAgICAgIEZpeHVwUmV2ZXJzZU1hcCgpOwoKICAg
ICAgICAgICAgICAgIF93aWR0aCA9IE51bUhhbmRsZXJzKCk7ICAKICAgICAgICAgICAgfQogICAg
ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBjNF9Ob3RpZmllcjo6a01vdmU6CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsK
ICAgIH0KfQoKIAoKY2xhc3MgYzRfUHJvamVjdFNlcSA6IHB1YmxpYyBjNF9EZXJpdmVkU2VxCnsK
ICAgIGM0X0RXb3JkQXJyYXkgX2NvbE1hcDsgIAogICAgYm9vbCBfZnJvemVuOwogICAgaW50IF9v
bWl0Q291bnQ7ICAKCnB1YmxpYzoKICAgIGM0X1Byb2plY3RTZXEgKGM0X1NlcXVlbmNlJiBzZXFf
LCBjNF9TZXF1ZW5jZSYgaW5fLCBib29sLCBjNF9TZXF1ZW5jZSogb3V0Xyk7CiAgICB2aXJ0dWFs
IH5jNF9Qcm9qZWN0U2VxICgpOwoKICAgIHZpcnR1YWwgaW50IE51bUhhbmRsZXJzKCkgY29uc3Q7
CiAgICB2aXJ0dWFsIGM0X0hhbmRsZXImIE50aEhhbmRsZXIoaW50KSBjb25zdDsKICAgIHZpcnR1
YWwgY29uc3QgYzRfU2VxdWVuY2UqIEhhbmRsZXJDb250ZXh0KGludCkgY29uc3Q7CiAgICB2aXJ0
dWFsIGludCBBZGRIYW5kbGVyKGM0X0hhbmRsZXIqKTsKCiAgICB2aXJ0dWFsIGJvb2wgR2V0KGlu
dCwgaW50LCBjNF9CeXRlcyYpOwogICAgdmlydHVhbCB2b2lkIFNldChpbnQsIGNvbnN0IGM0X1By
b3BlcnR5JiwgY29uc3QgYzRfQnl0ZXMmKTsKfTsKCiAKCmM0X1Byb2plY3RTZXE6OmM0X1Byb2pl
Y3RTZXEgKGM0X1NlcXVlbmNlJiBzZXFfLCBjNF9TZXF1ZW5jZSYgaW5fLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlb3JkZXJfLCBjNF9TZXF1ZW5jZSogb3V0XykK
ICAgIDogYzRfRGVyaXZlZFNlcSAoc2VxXyksIF9mcm96ZW4gKCFyZW9yZGVyXyAmJiAhb3V0Xyks
IF9vbWl0Q291bnQgKDApCnsKICAgICAgICAgCiAgICBmb3IgKGludCBqID0gMDsgaiA8IGluXy5O
dW1IYW5kbGVycygpOyArK2opCiAgICB7CiAgICAgICAgaW50IHByb3BJZCA9IGluXy5OdGhQcm9w
SWQoaik7CiAgICAgICAgaW50IGluZGV4ID0gX3NlcS5Qcm9wSW5kZXgocHJvcElkKTsKCiAgICAg
ICAgICAgICAKICAgICAgICBpZiAoaW5kZXggPj0gMCkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgIGlmIChvdXRfICYmIG91dF8tPlByb3BJbmRleChwcm9wSWQpID49IDAp
CiAgICAgICAgICAgICAgICArK19vbWl0Q291bnQ7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIF9jb2xNYXAuQWRkKGluZGV4KTsKICAgICAgICB9CiAgICB9CgogICAgICAgICAKICAg
IGlmIChyZW9yZGVyXykKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9zZXEuTnVt
SGFuZGxlcnMoKTsgKytpKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHByb3BJZCA9IF9zZXEu
TnRoUHJvcElkKGkpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
aWYgKGluXy5Qcm9wSW5kZXgocHJvcElkKSA8IDApCiAgICAgICAgICAgICAgICBfY29sTWFwLkFk
ZChpKTsKICAgICAgICB9CgogICAgICAgICA7CiAgICB9Cn0KCmM0X1Byb2plY3RTZXE6On5jNF9Q
cm9qZWN0U2VxICgpCnsKfQoKaW50IGM0X1Byb2plY3RTZXE6Ok51bUhhbmRsZXJzKCkgY29uc3QK
ewogICAgcmV0dXJuIF9mcm96ZW4gPyBfY29sTWFwLkdldFNpemUoKSA6IF9zZXEuTnVtSGFuZGxl
cnMoKSAtIF9vbWl0Q291bnQ7Cn0KCmM0X0hhbmRsZXImIGM0X1Byb2plY3RTZXE6Ok50aEhhbmRs
ZXIoaW50IGNvbE51bV8pIGNvbnN0CnsKICAgIGludCBuID0gY29sTnVtXyA8IF9jb2xNYXAuR2V0
U2l6ZSgpID8gX2NvbE1hcC5HZXRBdChjb2xOdW1fKSA6IGNvbE51bV87CiAgICByZXR1cm4gX3Nl
cS5OdGhIYW5kbGVyKG4pOwp9Cgpjb25zdCBjNF9TZXF1ZW5jZSogYzRfUHJvamVjdFNlcTo6SGFu
ZGxlckNvbnRleHQoaW50IGNvbE51bV8pIGNvbnN0CnsKICAgIGludCBuID0gY29sTnVtXyA8IF9j
b2xNYXAuR2V0U2l6ZSgpID8gX2NvbE1hcC5HZXRBdChjb2xOdW1fKSA6IGNvbE51bV87CiAgICBy
ZXR1cm4gX3NlcS5IYW5kbGVyQ29udGV4dChuKTsKfQoKaW50IGM0X1Byb2plY3RTZXE6OkFkZEhh
bmRsZXIoYzRfSGFuZGxlciogaGFuZGxlcl8pCnsKICAgIGludCBuID0gX3NlcS5BZGRIYW5kbGVy
KGhhbmRsZXJfKTsKICAgIHJldHVybiBfZnJvemVuID8gX2NvbE1hcC5BZGQobikgOiBuIC0gX29t
aXRDb3VudDsKfQoKYm9vbCBjNF9Qcm9qZWN0U2VxOjpHZXQoaW50IGluZGV4XywgaW50IHByb3BJ
ZF8sIGM0X0J5dGVzJiBidWZfKQp7CiAgICAgICAgIAogICAgcmV0dXJuIFByb3BJbmRleChwcm9w
SWRfKSA+PSAwICYmIF9zZXEuR2V0KGluZGV4XywgcHJvcElkXywgYnVmXyk7Cn0KCnZvaWQgYzRf
UHJvamVjdFNlcTo6U2V0KGludCBpbmRleF8sIGNvbnN0IGM0X1Byb3BlcnR5JiBwcm9wXywgY29u
c3QgYzRfQnl0ZXMmIGJ5dGVzXykKewogICAgaW50IG4gPSBfc2VxLk51bUhhbmRsZXJzKCk7CiAg
ICBfc2VxLlNldChpbmRleF8sIHByb3BfLCBieXRlc18pOwoKICAgICAgICAgCiAgICBpZiAobiAh
PSBfc2VxLk51bUhhbmRsZXJzKCkpCiAgICB7CiAgICAgICAgIDsKCiAgICAgICAgaWYgKF9mcm96
ZW4pCiAgICAgICAgICAgIF9jb2xNYXAuQWRkKG4pOwogICAgfQp9CgogCgpjNF9TZXF1ZW5jZSog
ZjRfQ3JlYXRlRmlsdGVyKGM0X1NlcXVlbmNlJiBzZXFfLCBjNF9DdXJzb3IgbF8sIGM0X0N1cnNv
ciBoXykKewogICAgcmV0dXJuIG5ldyAgYzRfRmlsdGVyU2VxIChzZXFfLCBsXywgaF8pOwp9Cgpj
NF9TZXF1ZW5jZSogZjRfQ3JlYXRlU29ydChjNF9TZXF1ZW5jZSYgc2VxXywgYzRfU2VxdWVuY2Uq
IGRvd25fKQp7CiAgICByZXR1cm4gbmV3ICBjNF9Tb3J0U2VxIChzZXFfLCBkb3duXyk7Cn0KCmM0
X1NlcXVlbmNlKiBmNF9DcmVhdGVQcm9qZWN0KGM0X1NlcXVlbmNlJiBzZXFfLCBjNF9TZXF1ZW5j
ZSYgaW5fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlb3JkZXJf
LCBjNF9TZXF1ZW5jZSogb3V0XykKewogICAgcmV0dXJuIG5ldyAgYzRfUHJvamVjdFNlcSAoc2Vx
XywgaW5fLCByZW9yZGVyXywgb3V0Xyk7Cn0KCiAK


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

* Re: c++/3899: Compile with -O2 generates "internal compiler error"
@ 2001-08-01  3:50 nathan
  0 siblings, 0 replies; 2+ messages in thread
From: nathan @ 2001-08-01  3:50 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, lupoja, nobody

Synopsis: Compile with -O2 generates "internal compiler error"

State-Changed-From-To: open->closed
State-Changed-By: nathan
State-Changed-When: Wed Aug  1 03:50:02 2001
State-Changed-Why:
    this is fixed in 3.0

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3899&database=gcc


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

end of thread, other threads:[~2001-08-01  3:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-07-31  9:46 c++/3899: Compile with -O2 generates "internal compiler error" lupoja
2001-08-01  3:50 nathan

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