public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/3559: Internal compiler error compiling XTL 1.4 example
@ 2001-07-07  7:16 lerdsuwa
  0 siblings, 0 replies; 2+ messages in thread
From: lerdsuwa @ 2001-07-07  7:16 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, ra9569

Synopsis: Internal compiler error compiling XTL 1.4 example

State-Changed-From-To: open->closed
State-Changed-By: lerdsuwa
State-Changed-When: Sat Jul  7 07:16:52 2001
State-Changed-Why:
    Fixed in GCC 3.0.  The code contains some illegal construct 
    that is correctly detected by GCC 3.0.

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


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

* c++/3559: Internal compiler error compiling XTL 1.4 example
@ 2001-07-04  8:36 ra9569
  0 siblings, 0 replies; 2+ messages in thread
From: ra9569 @ 2001-07-04  8:36 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3559
>Category:       c++
>Synopsis:       Internal compiler error compiling XTL 1.4 example
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jul 04 08:36:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Casey Marshall
>Release:        gcc version 2.95.2 19991024 (release)
>Organization:
>Environment:
SunOS devomniapp 5.8 Generic_108528-05 sun4u sparc SUNW,Ultra-80
That is, sparc-sun-solaris2.8.
>Description:
I got this message compiling the XTL 1.4 examples:

g++  -o auto -I/mfg/groups/ohtse/pkgs/xtl-1.4/examples/../../include -I../../include auto.cpp
auto.cpp: In method `void obj::composite<obj_output<v_format,no_refs> >(obj_output<v_format,no_refs> &)':
auto.cpp:18:   instantiated from here
auto.cpp:24: Internal compiler error.
auto.cpp:24: Please submit a full bug report.
auto.cpp:24: See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.
make[1]: *** [auto] Error 1
make[1]: Leaving directory `/mfg/groups/ohtse/pkgs/xtl-1.4/examples/auto'
gmake: *** [all] Error 2

Attached is the preprocessed .ii file.  I do not know the precise options used to build this gcc.
It is the gcc that Sun distributes w/Solaris 2.8:
   PKGINST:  SFWgcc
      NAME:  GNU compilers
  CATEGORY:  system
      ARCH:  sparc
   VERSION:  2.95.2,REV=1999.11.25.13.20
   BASEDIR:  /opt
    VENDOR:  www.gnu.org
      DESC:  GNU compilers
    PSTAMP:  yavin19991125132419
  INSTDATE:  May 02 2001 11:01
   HOTLINE:  Please contact the owners of this freeware
    STATUS:  completely installed
     FILES:    322 installed pathnames
                 7 shared pathnames
                 2 linked files
                18 directories
                22 executables
             51029 blocks used (approx)
>How-To-Repeat:

>Fix:

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

IyAxICJhdXRvLmNwcCIKIAoKCgoKCgoKCgojIDEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFt
IiAxIDMKIAogCgoKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL29wdC9zZncv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3By
YWdtYSBpbnRlcmZhY2UKCgogICAKCgoKZXh0ZXJuICJDIiB7CiMgMSAiL29wdC9zZncvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9z
ZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL3Nw
YXJjLXN1bi1zb2xhcmlzMi44L2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0CiAgCgoKCgoKCgoK
CnR5cGVkZWYgICAgICAgICAgaW50ICAgX0dfaW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9f
KF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIF9HX3VpbnQ4X3QgX19hdHRyaWJ1dGVf
XygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50MTZfdCBf
X2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H
X3VpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsKdHlwZWRlZiAgICAg
ICAgICBpbnQgIF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0
eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhf
X1NJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQ2NF90IF9fYXR0cmlidXRlX18o
KF9fbW9kZV9fKF9fRElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDY0X3QgX19h
dHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIGxv
bmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBfR191bGxvbmc7CgoKCgoKCgoKdHlwZWRlZiBsb25nIF9HX2Nsb2NrX3Q7CnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlwZWRlZiBsb25n
IF9HX2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfaW5vX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19ubGlua190Owp0eXBl
ZGVmIGxvbmcgX0dfb2ZmX3Q7CnR5cGVkZWYgbG9uZyBfR19waWRfdDsKCgoKdHlwZWRlZiBpbnQg
X0dfcHRyZGlmZl90Owp0eXBlZGVmIGludCAgIF9HX3NpZ3NldF90OwoKCgp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR19zaXplX3Q7CnR5cGVkZWYgbG9uZyBfR190aW1lX3Q7CnR5cGVkZWYgbG9uZyBf
R191aWRfdDsKdHlwZWRlZiBsb25nIGludCBfR193Y2hhcl90OwoKCgoKCgoKCgoKCgoKCgp0eXBl
ZGVmIGludCBfR19zc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfR193aW50X3Q7CnR5cGVk
ZWYgdm9pZCAqIF9HX3ZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L3Nmdy9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
IDQKCgoKCgoKIAoKCiMgMTkgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAi
L29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMgNAoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoj
IDEzMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMgMTkwICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCiAKCgoK
CiAKCiMgMjcxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIyAyODMgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgogCgogCgoj
IDMxNyAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDg2ICIvb3B0
L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4v
c3BhcmMtc3VuLXNvbGFyaXMyLjgvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKCgojIDMwICIv
b3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9saWJpby5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCgojIDU1ICIvb3B0
L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCiMgMTA0ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1
bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAKIyAxNzQgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlv
LmgiIDMKCgoKCgoKCgoKICAgIHR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCiAKCnN0cnVj
dCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19G
SUxFICpfc2J1ZjsKICAgCgogICAKICBpbnQgX3BvczsKIyAyMDcgIi9vcHQvc2Z3L2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2xpYmlvLmgiIDMKCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCgoKICAg
CiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2VuZDsJIAogIGNo
YXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAogIGNoYXIqIF9J
T193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciogX0lPX2J1Zl9i
YXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsg
IAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9lbmQ7ICAKCiAg
c3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsK
CiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwoKCgogIF9HX29mZl90ICBfb2Zmc2V0OwoK
CgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBjaGFyIF91bnVzZWQ7CiAgY2hh
ciBfc2hvcnRidWZbMV07CgogICAKCgoKCgoKCgp9OwoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fRklM
RV9wbHVzOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPX3N0ZGluXywgX0lPX3N0ZG91
dF8sIF9JT19zdGRlcnJfOwoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIF9HX3NzaXplX3QgICgq
cmVhZCkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zc2l6ZV90ICkgIDsKICBfR19z
c2l6ZV90ICAoKndyaXRlKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBjb25zdCB2b2lkICosIF9HX3Nz
aXplX3QgKSAgOwogIF9HX2Zwb3NfdCAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBfR19v
ZmZfdCAsIGludCkgIDsKICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsKfSBf
SU9fY29va2llX2lvX2Z1bmN0aW9uc190OwoKIApzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBz
dHJ1Y3QgX0lPX0ZJTEUgZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9pZCAqY29va2ll
OwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwoKCgpleHRlcm4g
IkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93ICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGlu
dCBfX3VmbG93ICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfX292ZXJmbG93ICAoX0lPX0ZJ
TEUgKiwgaW50KSAgOwoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX2dldGMgIChfSU9f
RklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAgKGludCBfX2MsIF9JT19GSUxFICpf
X2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBp
bnQgX0lPX2ZlcnJvciAgKF9JT19GSUxFICpfX2ZwKSAgOwoKZXh0ZXJuIGludCBfSU9fcGVla2Nf
bG9ja2VkICAoX0lPX0ZJTEUgKl9fZnApICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2Zp
bGUgIChfSU9fRklMRSAqKSAgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgIChfSU9fRklM
RSAqKSAgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOwoKCgoK
CgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICosIGNvbnN0IGNoYXIg
KiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAgKF9JT19G
SUxFICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCApICA7CmV4dGVybiBfR19zc2l6ZV90ICBf
SU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7CmV4dGVybiBfR19zaXpl
X3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgX0dfc2l6ZV90ICkgIDsKCgoKCgpl
eHRlcm4gX0dfZnBvc190ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50
LCBpbnQpICA7CmV4dGVybiBfR19mcG9zX3QgIF9JT19zZWVrcG9zICAoX0lPX0ZJTEUgKiwgX0df
ZnBvc190ICwgaW50KSAgOwoKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lP
X0ZJTEUgKikgIDsKCgp9CgoKCiMgMzYgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAy
IDMKCn0KIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlz
dHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKCgoKdHlwZWRl
ZiBfR19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX2Zwb3NfdCAgc3RyZWFtcG9zOwoKdHlw
ZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10
ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1Y3QgX2lvc19maWVs
ZHMKeyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50
IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgc2hvcnQgIF9maWxsOwogICAgX19p
b3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGludCBfcHJlY2lz
aW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoKCgoKCgoKCgoKIyAxMjQgIi9vcHQv
c2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmll
bGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAg
cHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQg
aW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfR19zc2l6ZV90
ICBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQg
PSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7
CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAs
Cglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFy
eSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVk
ZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJ
ICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwg
b2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0
MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlm
aWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0g
MDQwMDAwIAoKCgoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglm
bG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtp
bnRlcm5hbAogICAgfTsKCiMgMTc3ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoK
CiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0
aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBz
YXZlOyB9CgogICAgIAogICAgc2hvcnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQog
ICAgc2hvcnQgIGZpbGwoc2hvcnQgIG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwg
PSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJu
IF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10Zmxh
Z3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0K
ICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQg
cHJlY2lzaW9uKGludCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsg
X3ByZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZt
dGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJ
X2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10Zmxh
Z3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2Zs
YWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0K
ICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0g
X2ZsYWdzOwoJX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQg
c2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQg
X3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUg
PSAwKSB7Cglfc3RhdGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0
YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3Rh
dGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Ro
cm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRl
IHw9IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsg
fQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVv
ZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgp
IGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAg
ICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlv
c3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9p
ZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAg
ICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4
Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRp
b25zKGlvc3RhdGUgZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUg
JiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYo
KSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1
ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBj
bGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhp
bnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3Rk
aW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4
YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25z
dDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoK
CgoKCiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0K
ICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9z
dHJlYW0qIHRpZV90byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5l
IHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVk
ZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFt
bWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7
CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVi
bGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigp
OwogICAgaW50IHNhdmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFy
a2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lP
X0ZJTEUgeyAgCiAgICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07
CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7
CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lP
X0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9s
aXN0X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAg
IHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBj
b25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9J
T19yZWFkX3B0cjsgfQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9w
dHI7IH0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4
MTAwICA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBj
b25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9
CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFy
KiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29u
c3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9j
aGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsg
cmV0dXJuIF9mbGFncyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3Mg
OyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9m
bGFncyAgfD0gZjsgfQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7
IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1
bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKToo
X0lPX3JlYWRfcHRyKz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIg
Kz0gbjsgfQogICAgdm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZv
aWQgc2V0cChjaGFyKiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3Jp
dGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hh
ciogZywgY2hhciAqZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2Jh
Y2t1cF9hcmVhKHRoaXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIg
PSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBf
c2hvcnRidWY7IH0KCiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAg
OyB9CiAgICAgCiAgICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3Nh
dmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1
cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAg
IGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lP
X3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsg
fQogICAgIAogICAgY2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFk
X2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2
ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAg
aW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAg
ICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAg
dm9pZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAg
IGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRj
aF90b19nZXRfbW9kZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1Ymxp
YzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxf
bGluZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBp
bnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygp
OyAgCiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwo
aW50IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0
cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVh
bXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtf
ZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNl
ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBz
dHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlv
czo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBt
b2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUg
PSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9z
LCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBp
bnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1w
b3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1i
dWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAg
IHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2Vy
JiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGlu
dCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8g
MSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAg
PyAxIDogMDsgfQogICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9
IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJ
eyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAg
aW50IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7
CgllbHNlIHJldHVybiBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7
IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2Ni
dWYoKTsKICAgIGludCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFk
X3B0cjsgfQogICAgaW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9J
T193cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVh
bXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hh
ciBwYWQsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQog
ICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19z
Z2V0bih0aGlzLCBzLCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1
bW4oKTsKICAgIGludCBzZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1
ZiwgX0dfc2l6ZV90ICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQg
c3B1dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBj
KCkgeyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgo
ICB0aGlzICApLT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9f
dW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAq
KSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAo
X0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEp
ICkKCSAgcmV0dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7
IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBf
SU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xp
c3QgIGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAq
Zm10MCAuLi4pOwogICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFw
KTsKICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0
cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVh
bCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0
dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFs
IGludCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoK
fTsKCiAKIAoKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoK
ICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7
ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZk
LCBjaGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRh
Y2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0
IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9z
OjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJm
bG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBp
c19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25z
dCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNs
b3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBv
cyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0
KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBz
dHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFt
c2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMo
KTsKICBwcm90ZWN0ZWQ6ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygp
ICE9IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkg
PyAgZ3B0cigpIDogcHB0cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJu
IGVHcHRyKCk7IH0KICAgICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBi
dWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJl
YW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0
IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAog
ICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0
KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpn
b29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9
IHRpZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6
ZGVjOwoKCgoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6Omlvcyhz
dHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5s
aW5lIGlvczo6fmlvcygpIHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChf
YXJyYXlzKTsKfQp9ICAKCiMgMzEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoK
CmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9z
JiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0m
KTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVh
bSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVu
ZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsK
ICAgICAKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAg
IG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQg
b3BmeCgpIHsKCWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+
Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxh
Z3MoKSAmIChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAg
ICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5z
cHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNo
YXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBj
aGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilz
LCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6
ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVh
bSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0
ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAg
IG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxs
cCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJl
YW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CgogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBj
aGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJ
eyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7Cgog
ICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9f
ZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7Cgog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludClu
KTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3Bl
cmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wg
YikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9w
ZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRv
dWJsZSBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4g
KnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNz
IGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90ZWN0ZWQ6CiAgICBfR19z
aXplX3QgIF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVibGljOgogICAgaXN0cmVh
bSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0
aWVkPSBfX251bGwgKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIg
ZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBs
ZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVs
aW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWdu
ZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0bGlu
ZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdl
dGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsg
cmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdl
dChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0m
IGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0
dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShz
aWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdl
dGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAq
cHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVhbSYgcmVhZCh1bnNpZ25lZCBjaGFyICpwdHIs
IHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAg
aXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0
dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQodm9pZCAqcHRyLCBz
dHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlz
dHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFt
JiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpbnQgaXBmeChpbnQgbmVl
ZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJ
ZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZh
aWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBp
b3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAg
fQogICAgaW50IGlwZngwKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsg
cmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsKCSAg
aWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0
dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChp
b3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIHJk
YnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKCSAgcmV0dXJuIDE7Cgl9CiAg
ICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0KICAgIGludCBnZXQoKSB7IGlmICghaXBmeDEoKSkg
cmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsKCQkgICAg
ICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9zOjplb2ZiaXQpOwoJCSAgICAgICBpc2Z4KCk7CgkJ
ICAgICAgIHJldHVybiBjaDsKCQkgICAgIH0gfQogICAgaW50IHBlZWsoKTsKICAgIF9HX3NpemVf
dCAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBu
PTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vl
a2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7Cglp
ZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6
YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29k
KCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly
ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsK
ICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7
CgoKCgoKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAgIGlzdHJlYW0mIG9wZXJh
dG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0K
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyByZXR1cm4gb3BlcmF0b3I+
PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciYgYyk7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hh
ciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhciYgYykge3JldHVybiBv
cGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGludCYpOwogICAg
aXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBv
cGVyYXRvcj4+KGxvbmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRv
cj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQm
KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWdu
ZWQgc2hvcnQmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMp
OyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJl
YW0gOiBwdWJsaWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3Ry
ZWFtKCkgeyB9CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVs
bCApOwp9OwoKY2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBpc3RyZWFtIHsK
cHVibGljOgogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7CiAg
X0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dpdGhhc3NpZ24m
IHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVhbSY+IChyaHMp
KTsgfQp9OwoKY2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsK
cHVibGljOgogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAg
X0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24m
IHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMp
KTsgfQp9OwoKZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwogCmV4dGVybiBfSU9f
b3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFz
c2lnbiBjbG9nCgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVy
biBpc3RyZWFtJiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGxvY2sob3N0
cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0cyk7CgpzdHJ1
Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVjKGlvcyYgaSkKeyBpLnNl
dGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5s
aW5lIGlvcyYgaGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVjfGlvczo6aGV4
fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlvcyYgaSkKeyBpLnNldGYo
aW9zOjpvY3QsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KfSAgCgoK
IyA2ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pb3N0cmVhbSIgMiAzCgoKIyAxMSAiYXV0by5jcHAiIDIK
CgojIDEgIi4uLy4uL2luY2x1ZGUveHRsL2F1dG9pby5oIiAxCiAKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDEgIi4uLy4uL2luY2x1ZGUveHRsL29iamlvLmgiIDEKIAoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS94dGwvY29uZmlnLmgiIDEKIAoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgl0eXBlZGVmIGxvbmcgbG9uZyBs
b25nbG9uZzsKCXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkbG9uZ2xvbmc7Cgoj
IDc2ICIuLi8uLi9pbmNsdWRlL3h0bC9jb25maWcuaCIKCgogCgoKCgoKCgojIDk2ICIuLi8uLi9p
bmNsdWRlL3h0bC9jb25maWcuaCIKCgoKCgoKCgoKCgogCgoKCmlubGluZSB1bnNpZ25lZCBzaG9y
dCBic3dhcF8xNih1bnNpZ25lZCBzaG9ydCBiKSB7CglyZXR1cm4gKChiJjB4ZmYwMCk+PjgpfCgo
YiYweDAwZmYpPj44KTsKfQoKaW5saW5lIHVuc2lnbmVkIGludCBic3dhcF8zMih1bnNpZ25lZCBp
bnQgYikgewoJcmV0dXJuICgoYiYweGZmMDAwMDAwKT4+MjQpfCgoYiYweDAwZmYwMDAwKT4+OCl8
CgkJKChiJjB4MDAwMGZmMDApPDw4KXwoKGImMHgwMDAwMDBmZik8PDI0KTsKfQoKaW5saW5lIHVu
c2lnbmVkbG9uZ2xvbmcgYnN3YXBfNjQodW5zaWduZWRsb25nbG9uZyBiKSB7IAoJcmV0dXJuICgg
KChiJjB4ZmYwMDAwMDAwMDAwMDAwMExMKSA+PiA1NikgfAoJCSAoKGImMHgwMGZmMDAwMDAwMDAw
MDAwTEwpID4+IDQwKSB8CgkJICgoYiYweDAwMDBmZjAwMDAwMDAwMDBMTCkgPj4gMjQpIHwKCQkg
KChiJjB4MDAwMDAwZmYwMDAwMDAwMExMKSA+PiA4KSB8CgkJICgoYiYweDAwMDAwMDAwZmYwMDAw
MDBMTCkgPDwgOCkgfAoJCSAoKGImMHgwMDAwMDAwMDAwZmYwMDAwTEwpIDw8IDI0KSB8CgkJICgo
YiYweDAwMDAwMDAwMDAwMGZmMDBMTCkgPDwgNDApIHwKCQkgKChiJjB4MDAwMDAwMDAwMDAwMDBm
ZkxMKSA8PCA1NikgKTsKfQoKCiAKCgoKIyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAx
IDMKIAogCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIAogCgogCiAKIAoK
IAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0cmluZy5oCTEuMjQJOTkvMDgvMTAgU01JIgkK
CiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAK
CgoKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RyaW5nX2lzby5oCTEuMgk5
OS8xMS8wOSBTTUkiCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
MyA0CiAKCgoKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpZmVhdHVyZV90ZXN0cy5oCTEu
MTgJOTkvMDcvMjYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0
CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpc2FfZGVmcy5oCTEuMjAJOTkvMDUvMDQgU01J
IgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoK
CgoKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0CgoKIAoKCgoKCgogCgoK
CgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCiAKCgoKCgoK
CiAKCgoKCgoKCgogCgoKCiMgMzY2ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoK
CiAKCgoKCgoKCgoKCgp9CgoKCiMgMTUgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5o
IiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCn0KCgoKIyAzMSAiL3Vzci9pbmNsdWRlL2lzby9zdHJpbmdf
aXNvLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQg
aW50CXNpemVfdDsJCSAKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgbWVtY21wKGNvbnN0IHZvaWQg
KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29u
c3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICosIGNvbnN0IHZv
aWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsK
ZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3Ry
Y21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cmNweShjaGFy
ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKik7CmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kik7CmV4dGVybiBjaGFyICpzdHJlcnJvcihpbnQpOwpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25z
dCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6
ZV90KTsKZXh0ZXJuIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl
X3QpOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsK
ZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
Y2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt
KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwojIDExMSAiL3Vzci9pbmNsdWRlL2lzby9z
dHJpbmdfaXNvLmgiIDMgNAoKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICosIGludCwg
c2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBj
aGFyICpzdHJwYnJrKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0
cnJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqKTsKCgojIDE0NCAiL3Vzci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgi
IDMgNAoKCgoKCgoKfQoKCgojIDE4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CgoKIAoK
CgojIDQ4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKCgoK
CgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXpl
X3QpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQp
OwpleHRlcm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl
cm4gaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpl
eHRlcm4gc2l6ZV90IHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVy
biBzaXplX3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKCgpleHRl
cm4gY2hhciAqc3RyZHVwKGNvbnN0IGNoYXIgKik7CgoKIyAxMTAgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMyA0CgoKCn0KCgoKIyA3ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAyIDMKCgoj
IDk0ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAzCgoKCiMgMTM2ICIuLi8uLi9pbmNsdWRl
L3h0bC9jb25maWcuaCIgMgoKCgoKIyAzMCAiLi4vLi4vaW5jbHVkZS94dGwvb2JqaW8uaCIgMgoK
CiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2lu
Y2x1ZGUvdHlwZWluZm8iIDEgMyA0CiAKIAoKCgoKI3ByYWdtYSBpbnRlcmZhY2UgInR5cGVpbmZv
IgoKIyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIv
aW5jbHVkZS9leGNlcHRpb24iIDEgMyA0CiAKIAoKCgoKI3ByYWdtYSBpbnRlcmZhY2UgImV4Y2Vw
dGlvbiIKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7
CnB1YmxpYzoKICBleGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+ZXhjZXB0aW9uICgpIHsgfQog
IHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCAoKSBjb25zdDsKfTsKCmNsYXNzIGJhZF9leGNlcHRp
b24gOiBwdWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgogIGJhZF9leGNlcHRpb24gKCkgeyB9CiAg
dmlydHVhbCB+YmFkX2V4Y2VwdGlvbiAoKSB7IH0KfTsKCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0
ZV9oYW5kbGVyKSAoKTsKdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRl
cm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0
ZXJtaW5hdGUgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwp1bmV4cGVjdGVkX2hh
bmRsZXIgc2V0X3VuZXhwZWN0ZWQgKHVuZXhwZWN0ZWRfaGFuZGxlcik7CnZvaWQgdW5leHBlY3Rl
ZCAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CmJvb2wgdW5jYXVnaHRfZXhjZXB0
aW9uICgpOwoKfSAgCgp9ICAKCgojIDkgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzIuOTUuMi9pbmNsdWRlL3R5cGVpbmZvIiAyIDMgNAoKCmV4dGVybiAiQysrIiB7
CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIHR5cGVfaW5mbyB7CnByaXZhdGU6CiAgIAogIHR5cGVf
aW5mbyYgb3BlcmF0b3I9IChjb25zdCB0eXBlX2luZm8mKTsKICB0eXBlX2luZm8gKGNvbnN0IHR5
cGVfaW5mbyYpOwoKcHJvdGVjdGVkOgogIGV4cGxpY2l0IHR5cGVfaW5mbyAoY29uc3QgY2hhciAq
bik6IF9uYW1lIChuKSB7IH0KCiAgY29uc3QgY2hhciAqX25hbWU7CgpwdWJsaWM6CiAgIAogIHZp
cnR1YWwgfnR5cGVfaW5mbyAoKTsKICAgIAogIGJvb2wgYmVmb3JlIChjb25zdCB0eXBlX2luZm8m
IGFyZykgY29uc3Q7CiAgY29uc3QgY2hhciogbmFtZSAoKSBjb25zdAogICAgeyByZXR1cm4gX25h
bWU7IH0KICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHR5cGVfaW5mbyYgYXJnKSBjb25zdDsKICBi
b29sIG9wZXJhdG9yIT0gKGNvbnN0IHR5cGVfaW5mbyYgYXJnKSBjb25zdDsKfTsKCmlubGluZSBi
b29sIHR5cGVfaW5mbzo6Cm9wZXJhdG9yIT0gKGNvbnN0IHR5cGVfaW5mbyYgYXJnKSBjb25zdAp7
CiAgcmV0dXJuICFvcGVyYXRvcj09IChhcmcpOwp9CgpjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBl
eGNlcHRpb24gewpwdWJsaWM6CiAgYmFkX2Nhc3QoKSB7IH0KICB2aXJ0dWFsIH5iYWRfY2FzdCgp
IHsgfQp9OwoKY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24gewogcHVibGljOgog
IGJhZF90eXBlaWQgKCkgeyB9CiAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB7IH0KfTsKCn0gIAoK
fSAgCgojIDMyICIuLi8uLi9pbmNsdWRlL3h0bC9vYmppby5oIiAyCgojIDEgIi9vcHQvc2Z3L2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0ZGV4Y2VwdCIgMSAzCiAKIAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAog
CiAKIAogCgogCiAKCgoKCgojcHJhZ21hIGludGVyZmFjZSAic3RkZXhjZXB0IgoKCgojIDEgIi9v
cHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0cmluZyIgMSAzCiAKCgoKCiMgMSAiL29wdC9zZncvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RkL2Jhc3RyaW5nLmgiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKCiAKIAog
CiAKIAoKIAogCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgojIDEgIi9vcHQvc2Z3L2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2NzdGRkZWYiIDEgMwogCiAKCgoKIyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKCgoKCgoKIAoKCgoKCgoK
IAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg
aW50IHB0cmRpZmZfdDsKCgoKCgoKCgoKIAoKCgoKIAoKIAoKCgojIDE4NyAiL29wdC9zZncvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMg
NAoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKCiAKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCiMgNiAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMiAzCgoKIyAz
NSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKIyAxICIvb3B0L3Nmdy9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAog
CgogCiAKIAogCiAKCiAKIAoKCgoKCiAKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRzLmgi
CgoKCgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+CnN0cnVjdCBzdHJpbmdf
Y2hhcl90cmFpdHMgewogIHR5cGVkZWYgY2hhclQgY2hhcl90eXBlOyAgCgogICAKCiAgc3RhdGlj
IHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBj
MSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNo
YXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUg
KGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAh
KGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25z
dCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJf
dHlwZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2Rl
bChjaGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCgogIHN0YXRpYyBpbnQgY29t
cGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4p
CiAgICB7CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJaWYg
KG5lIChzMVtpXSwgczJbaV0pKQoJICByZXR1cm4gbHQgKHMxW2ldLCBzMltpXSkgPyAtMSA6IDE7
CgogICAgICByZXR1cm4gMDsKICAgIH0KICAgIAogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25z
dCBjaGFyX3R5cGUqIHMpCiAgICB7CiAgICAgIHNpemVfdCBsID0gMDsKICAgICAgd2hpbGUgKG5l
ICgqcysrLCBlb3MgKCkpKQoJKytsOwogICAgICByZXR1cm4gbDsKICAgIH0KCiAgc3RhdGljIGNo
YXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90
IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAg
ICAgcmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUq
IHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgY2hhcl90eXBl
IGFbbl07CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJYXNz
aWduIChhW2ldLCBzMltpXSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24g
KHMxW2ldLCBhW2ldKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBl
KiBzZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSYgYywgc2l6ZV90IG4pCiAgICB7
CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIGMpOwogICAgICByZXR1cm4gczE7
CiAgICB9Cn07CgpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi9vcHQvc2Z3L2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2NjdHlwZSIgMSAzCiAKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMg
NAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY3R5cGUuaAkxLjMzCTk5
LzA4LzEwIFNNSSIJCgojIDEgIi91c3IvaW5jbHVkZS9pc28vY3R5cGVfaXNvLmgiIDEgMyA0CiAK
IAoKIAogCiAKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY3R5cGVf
aXNvLmgJMS4xCTk5LzA4LzA5IFNNSSIgCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IGlzYWxudW0oaW50KTsKZXh0ZXJuIGludCBpc2FscGhh
KGludCk7CmV4dGVybiBpbnQgaXNjbnRybChpbnQpOwpleHRlcm4gaW50IGlzZGlnaXQoaW50KTsK
ZXh0ZXJuIGludCBpc2dyYXBoKGludCk7CmV4dGVybiBpbnQgaXNsb3dlcihpbnQpOwpleHRlcm4g
aW50IGlzcHJpbnQoaW50KTsKZXh0ZXJuIGludCBpc3B1bmN0KGludCk7CmV4dGVybiBpbnQgaXNz
cGFjZShpbnQpOwpleHRlcm4gaW50IGlzdXBwZXIoaW50KTsKZXh0ZXJuIGludCBpc3hkaWdpdChp
bnQpOwoKCgoKCgoKZXh0ZXJuIGludCB0b2xvd2VyKGludCk7CmV4dGVybiBpbnQgdG91cHBlcihp
bnQpOwoKCgoKCmV4dGVybiB1bnNpZ25lZCBjaGFyCV9fY3R5cGVbXTsKZXh0ZXJuIHVuc2lnbmVk
IGludAkqX19jdHlwZV9tYXNrOwpleHRlcm4gaW50CQkqX190cmFuc191cHBlcjsKZXh0ZXJuIGlu
dAkJKl9fdHJhbnNfbG93ZXI7CgoKCiMgMTI5ICIvdXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5o
IiAzIDQKCgojIDE0NCAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMyA0CgoKCgoKCgoK
CgoKCgoKCgoKCgojIDE4MyAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMyA0CgoKCn0K
CgoKIyAxOCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CgoKIAoKCgojIDM4ICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKZXh0ZXJuIGludCBpc2Fz
Y2lpKGludCk7CmV4dGVybiBpbnQgdG9hc2NpaShpbnQpOwpleHRlcm4gaW50IF90b2xvd2VyKGlu
dCk7CmV4dGVybiBpbnQgX3RvdXBwZXIoaW50KTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDg3
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgoKCn0KCgoKIyA2ICIvb3B0L3Nmdy9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9jY3R5cGUiIDIgMwoKCiMgMTA1ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAy
IDMKCgoKc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyA8Y2hhcj4gewogIHR5cGVkZWYgY2hhciBj
aGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hh
cl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFy
X3R5cGUgJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7
IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl
JiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3Qg
Y2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMy
KTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9v
bCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuICgoX19jdHlwZSArIDEpWyBhIF0gJiAweDAw
MDAwMDA4ICkgOyB9CgogIHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwg
Y29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiBtZW1jbXAgKHMxLCBz
Miwgbik7IH0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90eXBlKiBzKQogICAg
eyByZXR1cm4gc3RybGVuIChzKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlw
ZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJf
dHlwZSopIG1lbWNweSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNo
YXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4g
KGNoYXJfdHlwZSopIG1lbW1vdmUgKHMxLCBzMiwgbik7IH0KICBzdGF0aWMgY2hhcl90eXBlKiBz
ZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSYgYywgc2l6ZV90IG4pCiAgICB7IHJl
dHVybiAoY2hhcl90eXBlKikgbWVtc2V0IChzMSwgYywgbik7IH0KfTsKCiMgMTU5ICIvb3B0L3Nm
dy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAzCgp9ICAKCiMgMzYgIi9vcHQvc2Z3L2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0ZC9iYXN0cmluZy5oIiAyIDMKCgogCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKCgogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCgogCiAKIAogCiAKIAogCgoK
CgoKCgoKIyAxNDggIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMTc4ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIzNCAiL29wdC9zZncvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Nv
bmZpZy5oIiAzCgoKIyAyNDggIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoK
IAogCiMgMzE2ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1
LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAojIDE4ICIvb3B0L3Nmdy9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9h
bGxvYy5oIiAyIDMKCgoKIyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoK
CiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDUzICIvb3B0L3Nm
dy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MSAzIDQKIAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGxpYi5oCTEu
NDcJOTkvMTEvMDMgU01JIgkKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgiIDEg
MyA0CiAKCgoKCiAKIAoKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMp
c3RkbGliX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiIAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCnR5
cGVkZWYJc3RydWN0IHsKCWludAlxdW90OwoJaW50CXJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3Ry
dWN0IHsKCWxvbmcJcXVvdDsKCWxvbmcJcmVtOwp9IGxkaXZfdDsKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJX19jdHlwZVtdOwoKCmV4dGVybiB2
b2lkIGFib3J0KHZvaWQpOwpleHRlcm4gaW50IGFicyhpbnQpOwpleHRlcm4gaW50IGF0ZXhpdCh2
b2lkICgqKSh2b2lkKSk7CmV4dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFyICopOwpleHRlcm4g
aW50IGF0b2koY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAq
KTsKZXh0ZXJuIHZvaWQgKmJzZWFyY2goY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf
dCwgc2l6ZV90LAoJaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4g
dm9pZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIGRpdl90IGRpdihpbnQsIGludCk7
CmV4dGVybiB2b2lkIGV4aXQoaW50KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRlcm4g
Y2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGludCBsYWJzKGxvbmcpOwpl
eHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7CmV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90
KTsKZXh0ZXJuIGludCBtYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qg
bWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgbWJ0
b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCBxc29ydCh2
b2lkICosIHNpemVfdCwgc2l6ZV90LAoJaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQg
KikpOwpleHRlcm4gaW50IHJhbmQodm9pZCk7CmV4dGVybiB2b2lkICpyZWFsbG9jKHZvaWQgKiwg
c2l6ZV90KTsKZXh0ZXJuIHZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKZXh0ZXJuIGRvdWJsZSBz
dHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25z
dCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs
KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGludCBzeXN0ZW0oY29uc3QgY2hh
ciAqKTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3Y2hhcl90KTsKZXh0ZXJuIHNpemVfdCB3
Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKCiMgMTUwICIvdXNyL2lu
Y2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0CgoKCgoKCgp9CgoKCiMgMTggIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzIDQKCgoKCgoKCiAKCgoKIyA2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgc3RydWN0IHsKCWxvbmcgbG9uZwlxdW90
OwoJbG9uZyBsb25nCXJlbTsKfSBsbGRpdl90OwoKCgoKCgoKdHlwZWRlZiBsb25nCXVpZF90OwkJ
CSAKCgoKCgogCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKIAojIDEwNSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKCgoKCgoKCmV4dGVybiB2b2lkIF9leGl0aGFuZGxlKHZv
aWQpOwoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4KHZvaWQpOwpleHRlcm4gZG91YmxlIGVyYW5k
NDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnQg
Kik7CmV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGxy
YW5kNDgodm9pZCk7CmV4dGVybiBsb25nIG1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIG5yYW5k
NDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2ln
bmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBzcmFuZDQ4KGxvbmcpOwpleHRlcm4gaW50IHB1dGVu
dihjaGFyICopOwpleHRlcm4gdm9pZCBzZXRrZXkoY29uc3QgY2hhciAqKTsKCgoKCgoKCgoKCgoK
dHlwZWRlZiBpbnQJc3NpemVfdDsJIAoKCgpleHRlcm4gdm9pZCBzd2FiKGNvbnN0IGNoYXIgKiwg
Y2hhciAqLCBzc2l6ZV90KTsKCgoKCgpleHRlcm4gaW50CW1rc3RlbXAoY2hhciAqKTsKCgoKCmV4
dGVybiBpbnQJbWtzdGVtcDY0KGNoYXIgKik7CgoKCgoKZXh0ZXJuIGxvbmcgYTY0bChjb25zdCBj
aGFyICopOwpleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0
ZXJuIGNoYXIgKmZjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpn
Y3Z0KGRvdWJsZSwgaW50LCBjaGFyICopOwpleHRlcm4gaW50IGdldHN1Ym9wdChjaGFyICoqLCBj
aGFyICpjb25zdCAqLCBjaGFyICoqKTsKZXh0ZXJuIGludCAgZ3JhbnRwdChpbnQpOwpleHRlcm4g
Y2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICps
NjRhKGxvbmcpOwpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7CmV4dGVybiBjaGFyICpwdHNu
YW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNoYXIgKnJlYWxwYXRo
KGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIg
Kik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRlcm4gaW50IHR0eXNsb3Qodm9p
ZCk7CmV4dGVybiBpbnQgIHVubG9ja3B0KGludCk7CmV4dGVybiB2b2lkICp2YWxsb2Moc2l6ZV90
KTsKCgoKCmV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7CmV4dGVybiBjaGFyICpxZWN2dChsb25n
IGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3Vi
bGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBp
bnQsIGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwpleHRlcm4g
Y29uc3QgY2hhciAqZ2V0ZXhlY25hbWUodm9pZCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lk
KTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwpl
eHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4
dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRwYXNzcGhy
YXNlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7CmV4dGVy
biBpbnQgaXNhdHR5KGludCk7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXplX3QsIHNpemVfdCk7
CmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7CgoKZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25z
dCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRp
dl90IGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKZXh0ZXJuIGNoYXIgKmxsdG9zdHIobG9u
ZyBsb25nLCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBj
aGFyICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNo
YXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2lnbmVkIGxvbmcg
bG9uZywgY2hhciAqKTsKCgoKCiMgMzA1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCgp9
CgoKCiMgNTQgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu
Mi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgojIDEgIi9vcHQv
c2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9z
cGFyYy1zdW4tc29sYXJpczIuOC9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAogCgoKCgoKCgoKIyAx
OSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4u
Ly4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi44L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAoKCgoKIAoK
ZXh0ZXJuICJDIiB7CmV4dGVybiB2b2lkIF9fZXByaW50ZiAoY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICosIHVuc2lnbmVkLCBjb25zdCBjaGFyICopCiAgICBfX2F0dHJpYnV0ZV9fICgobm9yZXR1
cm4pKTsKfQoKCgoKCgoKCgoKCgojIDUyICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vc3BhcmMtc3VuLXNvbGFyaXMyLjgvaW5jbHVk
ZS9hc3NlcnQuaCIgMyA0CgoKCiMgNTYgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAy
IDMKCgoKCgoKCgoKCgojIDc4ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKIyA4
NyAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCiMgOTcgIi9vcHQvc2Z3L2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAzCgojIDExNSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgi
IDMKCgogCgoKCgoKCiAKCgoKCgogCiAKCgoKCgoKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNs
YXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lkKiBf
U19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQq
LCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIp
KCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAg
ICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9f
cmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAgKQogIHsKICAgIGZyZWUo
X19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAs
IHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBf
X25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxv
YyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lk
ICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAo
KiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQpOwogIH0KCn07CgogCgoKdGVt
cGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19p
bnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9j
KHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZv
aWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVy
ID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxs
b2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpIDsg
fQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1h
bGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0K
fQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAo
KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7
OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91
dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19o
YW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAg
aWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCog
YWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCop
IF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCog
YWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6
ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90
IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAq
IHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAg
ICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKIAogCiAK
IAogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6
CgogIGVudW0ge19TX2V4dHJhID0gOH07ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIAoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9j
YXRlKF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJl
dHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2
b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19w
IC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/
IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL29w
dC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiICwgICAyNjMgLCAgIiooc2l6ZV90KilfX3JlYWxf
cCA9PSBfX24iICksIDApICkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19u
ICsgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBz
aXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9
IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9w
ID09IF9fb2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9u
IGAlcydcbiIsCSAgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjcwICwgICIq
KHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiICksIDApICkpIDsKICAgIGNoYXIqIF9fcmVz
dWx0ID0gKGNoYXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6
ICsgX1NfZXh0cmEsIF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0
ID0gX19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoK
CgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoK
CgoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZSB7Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAg
ICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9C
WVRFUy9fQUxJR059OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0
ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkp
OyB9Cgpwcml2YXRlIDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVl
X2xpc3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJp
dmF0ZToKCgoKCiAgICBzdGF0aWMgX09iaiogICBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoK
ICBzdGF0aWMgIHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykgewogICAg
ICAgIHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsKICB9CgogICAK
ICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwogICAKICAgCiAgc3RhdGljIGNo
YXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgogICAKICBz
dGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAg
c3RhdGljIHNpemVfdCBfU19oZWFwX3NpemU7CgoKCgoKCgoKCgoKCgoKCiMgMzg5ICIvb3B0L3Nm
dy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVi
bGljOgogICAgICAgICAgICBfTG9jaygpIHsgIDsgfQogICAgICAgICAgICB+X0xvY2soKSB7ICA7
IH0KICAgIH07CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7CgpwdWJsaWM6CgogICAKICBzdGF0aWMg
dm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlz
dDsKICAgIF9PYmoqICAgX19yZXN1bHQ7CgogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllU
RVMpIHsKICAgICAgICByZXR1cm4obWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24pKTsKICAgIH0K
ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19u
KTsKICAgICAKICAgICAKICAgICAKCgoKCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsK
ICAgIGlmIChfX3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9T
X3JvdW5kX3VwKF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVl
X2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1
bHQpOwogIH07CgogICAKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90
IF9fbikKICB7CiAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwogICAgX09iaiogICogX19teV9m
cmVlX2xpc3Q7CgogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICBt
YWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIHJldHVybjsKICAgIH0K
ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19u
KTsKICAgICAKCgoKCiAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xp
c3Q7CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgCiAgfQoKICBzdGF0aWMgdm9pZCog
cmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsK
Cn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8IGZhbHNlICwgMD4gYWxsb2M7
CnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50
X2FsbG9jOwoKCgogCiAKIAogCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
Y2hhcioKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1
bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jl
c3VsdDsKICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNp
emVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYg
KF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19z
dGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAg
ICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXpl
KSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAg
IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nf
c3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAg
ICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNf
dG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUg
Pj4gNCk7CiAgICAgICAgIAogICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAg
ICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1Nf
ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAg
ICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVl
X2xpc3Q7CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVl
OwogICAgICAgIH0KICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVz
X3RvX2dldCk7CiAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBz
aXplX3QgX19pOwogICAgICAgICAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlzdDsKCSAgICBfT2Jq
KiBfX3A7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
ICAgIGZvciAoX19pID0gX19zaXplOyBfX2kgPD0gX01BWF9CWVRFUzsgX19pICs9IF9BTElHTikg
ewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVl
bGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0Owog
ICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlf
ZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAg
IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9m
cmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1Nf
Y2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJICAgIF9T
X2VuZF9mcmVlID0gMDsJIAogICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxv
Y19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICBfU19oZWFwX3NpemUgKz0gX19i
eXRlc190b19nZXQ7CiAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRl
c190b19nZXQ7CiAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcykp
OwogICAgfQp9CgoKIAogCiAKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp2
b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZp
bGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAyMDsKICAgIGNoYXIqIF9fY2h1bmsg
PSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgX09iaiogICogX19teV9mcmVlX2xp
c3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2Jq
KiBfX25leHRfb2JqOwogICAgaW50IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4o
X19jaHVuayk7CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7CgogICAgIAogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAg
ICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsK
ICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9f
bmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmog
KyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19j
dXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0
X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0
KTsKfQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19v
bGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29w
eV9zejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6
ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19u
ZXdfc3opKTsKICAgIH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRf
dXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdf
c3opOwogICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25l
d19zejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0
ZShfX3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgoKCgoKCgoKCgoKCgoK
IyA2MDIgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKIyA2ODkgIi9vcHQvc2Z3
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfU19zdGFydF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf
ZW5kX2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXpl
X3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9z
aXplID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogIApfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX05GUkVF
TElTVFMKXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCB9OwogCiAKIAoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpjbGFzcyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOyAgICAgICAgICAgCnB1
YmxpYzoKICB0eXBlZGVmIHNpemVfdCAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRl
ZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5j
ZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAg
ICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7
CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0
aHJvdygpICB7fQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7fQogIHRl
bXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhy
b3coKSAge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSAge30KCiAgcG9pbnRlciBhZGRyZXNzKHJl
ZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJl
c3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgCiAgIAog
IF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1
cm4gX19uICE9IDAgPyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNp
emVvZihfVHApKSkKICAgICAgICAgICAgICAgICAgICA6IDA7CiAgfQoKICAgCiAgdm9pZCBkZWFs
bG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2Nh
dGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29u
c3QgdGhyb3coKSAKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2
b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBf
VHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9
Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBzaXplX3Qg
ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3Rf
cG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90
aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4m
KQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRv
cjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQoKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2MgX191bmRl
cmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICBy
ZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm
IF9UcCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCBy
ZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07
CgogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9j
YXRvciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJs
eWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25z
dCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkgCiAgICA6IF9fdW5kZXJs
eWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRvcigpIHRo
cm93KCkgIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNv
bnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwg
Y29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19j
YXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkp
CiAgICAgICAgOiAwOwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6
ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24g
KiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSAK
ICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVj
dChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9
CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBl
ZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2
b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFsdWVfdHlwZTsKCiAg
dGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9j
YXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1Rw
LCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9y
PF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9
PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9B
bGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1Rw
LCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9f
YTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKIAogCiAKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5z
dD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1
ZTsKfQoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9B
bGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4m
KSB7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNlOwp9CgoK
IAogCiAKIAogCiAKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsK
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY2F0b3I6OiAgIHJlYmluZDxfVHA+OjpvdGhlcgogICAgICAgICAgYWxsb2Nh
dG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25z
dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK
IAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlw
ZTsKICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21h
bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRv
cjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3Ry
dWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4K
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4K
ewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBz
aW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlw
ZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlw
ZTsKfTsKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4K
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRv
cjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNv
bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxf
VHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFs
bG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wg
X190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0
aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2Fs
bG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAg
ICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9B
bGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90
eXBlOwp9OwoKCgoKCgoKCiAKCgoKCgogCiAKIAojIDIxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxv
Yy5oIiAyIDMKCgoKIyA0MCAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMwoKCgoKIAogCiAK
IyAzOSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCmV4dGVybiAiQysr
IiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CgojIDEgIi9vcHQvc2Z3L2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2l0ZXJhdG9yIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9z
ZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewog
IHJldHVybiAhKF9feCA8IF9feSk7Cn0KCiAKCgoKIAogCiAKIyAzMSAiL29wdC9zZncvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvaXRlcmF0b3IiIDIgMwoKIyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNDIgIi9vcHQvc2Z3L2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
IDQKCiMgMzIgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu
Mi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCgoKCgoKIyAxICIvb3B0
L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKIAoKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1
dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBp
bnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6
IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKIAogCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRl
cmF0b3IgewogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFu
Y2UgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAg
IHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKc3Ry
dWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg
IHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3Ry
dWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAg
ICAgICAgIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAg
ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAg
ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgojIDk4ICIv
b3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl
cmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlw
ZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewog
IHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVm
IHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAg
ICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAg
ICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAg
ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgICAgcmVmZXJl
bmNlOwp9OwoKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9j
YXRlZ29yeShjb25zdCBfSXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5
KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVy
JikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBl
KGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4K
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5
Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19pKTsgfQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShj
b25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6
dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVl
X3R5cGUoX19pKTsgfQoKCgoKCiMgMjU5ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3Iu
aCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRf
aXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsg
KytfX247IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg
X0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s
YXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcpCnsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3Rh
bmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQp7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9f
biA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19u
OwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVn
b3J5OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2
b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJh
dG9yX3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Fk
dmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAg
ICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+
PSAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0t
X19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg
X0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBf
X2ksIF9EaXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpIHsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRv
ciYgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9j
YXRlZ29yeShfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tf
aW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVi
bGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBl
ZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lk
ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg
IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNr
X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAg
YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVu
YW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1
c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyBy
ZXR1cm4gKnRoaXM7IH0KfTsKCiMgMzc4ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3Iu
aCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1
cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoK
ICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAg
ICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg
IHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUm
IF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDQx
NyAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NvbnRhaW5lcj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9u
dF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFz
cyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwog
IHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9D
b250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9f
eCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKSAKICAgIDogY29udGFpbmVyKCZf
X3gpLCBpdGVyKF9faSkge30KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0
b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAg
ICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
ZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDQ1OSAiL29wdC9zZncv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwg
Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNl
cnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsIAogICAg
ICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlk
aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRl
cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+ICBfU2VsZjsKcHJvdGVj
dGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf
VHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNl
ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg
ICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBl
eHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigp
IGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAg
cmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJl
bnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0K
ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg
ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA1NTAgIi9vcHQvc2Z3L2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX1JlZiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJ
dGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwgCiAgICBjb25zdCByZXZlcnNlX2JpZGly
ZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsK
ICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CgoKCiAKIAogCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvciAKewpwcm90ZWN0ZWQ6
CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpw
b2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNlOwoKICB0eXBlZGVm
IF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0
IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHt9Cgog
IHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW50
KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHt9
CgogICAgCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQog
IHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJy
ZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewog
ICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGlu
dCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBf
X3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9
ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYgb3Bl
cmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJy
ZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikg
ewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh
dG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVu
dCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsK
ICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVuY2Ugb3Bl
cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19u
KTsgfSAgCn07IAogCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAg
cmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+IApvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNl
KCkgLSBfX24pOwp9CgojIDgwNSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK
CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0ID0gcHRyZGlmZl90PiAKY2xh
c3MgaXN0cmVhbV9pdGVyYXRvciB7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0
IGlzdHJlYW1faXRlcmF0b3ImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImKTsKcHJvdGVjdGVkOgogIGlzdHJlYW0q
IF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9lbmRfbWFya2VyOwogIHZvaWQg
X01fcmVhZCgpIHsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFs
c2U7CiAgICBpZiAoX01fZW5kX21hcmtlcikgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgIF9N
X2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgfQpwdWJsaWM6CiAg
dHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
X1RwICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3QgICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgIHBvaW50
ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9p
dGVyYXRvcigpIDogX01fc3RyZWFtKCZjaW4pLCBfTV9lbmRfbWFya2VyKGZhbHNlKSB7fQogIGlz
dHJlYW1faXRlcmF0b3IoaXN0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQo
KTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQoK
ICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoK
ICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JiBvcGVyYXRvcisrKCkgeyAKICAgIF9NX3Jl
YWQoKTsgCiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlz
dD4gb3BlcmF0b3IrKyhpbnQpICB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IF9f
dG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA4
NjQgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJl
YW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVybiAo
X194Ll9NX3N0cmVhbSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5kX21h
cmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIg
PT0gZmFsc2UgJiYgX195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01f
c3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYg
dm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVh
bSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVy
YXRvcihvc3RyZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVhbSgmX19z
KSwgX01fc3RyaW5nKF9fYykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0o
Y29uc3QgX1RwJiBfX3ZhbHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYg
KF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K
ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfSAK
ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg
fSAKfTsKCiMgOTA3ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCiAKCgoK
IAogCiAKIyAzOCAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDIgMwoKCgoKIAogCiAKIyA0
NCAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQg
X19vdXRfb2ZfcmFuZ2UgKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIF9fbGVuZ3RoX2Vycm9y
IChjb25zdCBjaGFyICopOwoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzID0gc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXJUPiwKCSAgY2xhc3MgQWxsb2NhdG9y
ID0gYWxsb2MgPgpjbGFzcyBiYXNpY19zdHJpbmcKewpwcml2YXRlOgogIHN0cnVjdCBSZXAgewog
ICAgc2l6ZV90IGxlbiwgcmVzLCByZWY7CiAgICBib29sIHNlbGZpc2g7CgogICAgY2hhclQqIGRh
dGEgKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyVCAqPih0aGlzICsgMSk7IH0KICAg
IGNoYXJUJiBvcGVyYXRvcltdIChzaXplX3QgcykgeyByZXR1cm4gZGF0YSAoKSBbc107IH0KICAg
IGNoYXJUKiBncmFiICgpIHsgaWYgKHNlbGZpc2gpIHJldHVybiBjbG9uZSAoKTsgKytyZWY7IHJl
dHVybiBkYXRhICgpOyB9CiMgMTA4ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIg
MwoKICAgIHZvaWQgcmVsZWFzZSAoKSB7IGlmICgtLXJlZiA9PSAwKSBkZWxldGUgdGhpczsgfQoK
CiAgICBpbmxpbmUgc3RhdGljIHZvaWQgKiBvcGVyYXRvciBuZXcgKHNpemVfdCwgc2l6ZV90KTsK
ICAgIGlubGluZSBzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKik7CiAgICBpbmxp
bmUgc3RhdGljIFJlcCogY3JlYXRlIChzaXplX3QpOwogICAgY2hhclQqIGNsb25lICgpOwoKICAg
IGlubGluZSB2b2lkIGNvcHkgKHNpemVfdCwgY29uc3QgY2hhclQgKiwgc2l6ZV90KTsKICAgIGlu
bGluZSB2b2lkIG1vdmUgKHNpemVfdCwgY29uc3QgY2hhclQgKiwgc2l6ZV90KTsKICAgIGlubGlu
ZSB2b2lkIHNldCAgKHNpemVfdCwgY29uc3QgY2hhclQsICAgc2l6ZV90KTsKCiAgICBpbmxpbmUg
c3RhdGljIGJvb2wgZXhjZXNzX3Nsb3AgKHNpemVfdCwgc2l6ZV90KTsKICAgIGlubGluZSBzdGF0
aWMgc2l6ZV90IGZyb2Jfc2l6ZSAoc2l6ZV90KTsKCiAgcHJpdmF0ZToKICAgIFJlcCAmb3BlcmF0
b3I9IChjb25zdCBSZXAgJik7CiAgfTsKCnB1YmxpYzoKIAogIHR5cGVkZWYJICAgdHJhaXRzCQl0
cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6Y2hhcl90eXBlCXZhbHVlX3R5
cGU7CiAgdHlwZWRlZgkgICBBbGxvY2F0b3IJCWFsbG9jYXRvcl90eXBlOwoKICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgY2hhclQmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IGNoYXJUJiBjb25zdF9yZWZl
cmVuY2U7CiAgdHlwZWRlZiBjaGFyVCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IGNoYXJUKiBj
b25zdF9wb2ludGVyOwogIHR5cGVkZWYgcG9pbnRlciBpdGVyYXRvcjsKICB0eXBlZGVmIGNvbnN0
X3BvaW50ZXIgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiA6OnJldmVyc2VfaXRlcmF0b3I8aXRl
cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiA6OnJldmVyc2VfaXRlcmF0b3I8Y29u
c3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgc3RhdGljIGNvbnN0IHNpemVf
dHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7Cgpwcml2YXRlOgogIFJlcCAq
cmVwICgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVwICo+KGRhdCkgLSAxOyB9
CiAgdm9pZCByZXB1cCAoUmVwICpwKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gcC0+ZGF0
YSAoKTsgfQoKcHVibGljOgogIGNvbnN0IGNoYXJUKiBkYXRhICgpIGNvbnN0CiAgICB7IHJldHVy
biByZXAgKCktPmRhdGEoKTsgfQogIHNpemVfdHlwZSBsZW5ndGggKCkgY29uc3QKICAgIHsgcmV0
dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBlIHNpemUgKCkgY29uc3QKICAgIHsgcmV0dXJu
IHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5ICgpIGNvbnN0CiAgICB7IHJldHVy
biByZXAgKCktPnJlczsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSAoKSBjb25zdAogICAgeyByZXR1
cm4gKG5wb3MgLSAxKS9zaXplb2YgKGNoYXJUKTsgfQkJIAogIGJvb2wgZW1wdHkgKCkgY29uc3QK
ICAgIHsgcmV0dXJuIHNpemUgKCkgPT0gMDsgfQoKIAogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9
IChjb25zdCBiYXNpY19zdHJpbmcmIHN0cikKICAgIHsKICAgICAgaWYgKCZzdHIgIT0gdGhpcykg
eyByZXAgKCktPnJlbGVhc2UgKCk7IGRhdCA9IHN0ci5yZXAgKCktPmdyYWIgKCk7IH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICBleHBsaWNpdCBiYXNpY19zdHJpbmcgKCk6IGRhdCAobmls
UmVwLmdyYWIgKCkpIHsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIp
OiBkYXQgKHN0ci5yZXAgKCktPmdyYWIgKCkpIHsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgYmFz
aWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIDog
ZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0
cmluZyAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgOiBkYXQgKG5pbFJlcC5ncmFi
ICgpKSB7IGFzc2lnbiAocywgbik7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzKQog
ICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcg
KHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2ln
biAobiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0
cmluZyhJbnB1dEl0ZXJhdG9yIGJlZ2luLCBJbnB1dEl0ZXJhdG9yIGVuZCkKCgoKICAgIDogZGF0
IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKGJlZ2luLCBlbmQpOyB9CgogIH5iYXNpY19zdHJp
bmcgKCkKICAgIHsgcmVwICgpLT5yZWxlYXNlICgpOyB9CgogIHZvaWQgc3dhcCAoYmFzaWNfc3Ry
aW5nICZzKSB7IGNoYXJUICpkID0gZGF0OyBkYXQgPSBzLmRhdDsgcy5kYXQgPSBkOyB9CgogIGJh
c2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBv
cyA9IDAsCgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0
aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNo
YXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwg
cywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJl
dHVybiBhcHBlbmQgKHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFw
cGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5ndGgg
KCksIDAsIG4sIGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNp
Y19zdHJpbmcmIGFwcGVuZChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3Qp
CgoKCiAgICB7IHJldHVybiByZXBsYWNlIChpZW5kICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7
IH0KCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXpl
X3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFj
ZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIHMs
IG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1
cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3Np
Z24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywg
biwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmlu
ZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkKCgoKICAg
IHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3QpOyB9Cgog
IGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFz
c2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY2hhclQgYykKICAgIHsgcmV0
dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjb25zdCBi
YXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsgfQogIGJhc2ljX3N0
cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHMp
OyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQogICAgeyByZXR1cm4gYXBw
ZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvczEsIGNv
bnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQlzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBu
ID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvczEsIDAsIHN0ciwgcG9zMiwgbik7IH0K
ICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBuKTsgfQogIGJhc2lj
X3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcykKICAgIHsgcmV0
dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5n
JiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1
cm4gcmVwbGFjZSAocG9zLCAwLCBuLCBjKTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBw
LCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5z
ZXJ0IChwIC0gaWJlZ2luICgpLCAxLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdp
biAoKSArIF9fbzsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwLCBzaXplX3R5cGUgbiwg
Y2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2Vy
dCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4g
KCkgKyBfX287IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5z
ZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkK
CgoKICAgIHsgcmVwbGFjZSAocCwgcCwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYg
ZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVy
biByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9CiAgaXRlcmF0b3Ig
ZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBiZWdpbigpOwogICAg
ICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyBzZWxmaXNoICgpOwog
ICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBm
LCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAtIGliZWdpbigpOwogICAgICBy
ZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAoKTsKICAg
ICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CgogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6
ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsCgkJCSBz
aXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3MpOwogIGJhc2ljX3N0cmluZyYg
cmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywKCQkJ
IHNpemVfdHlwZSBuMik7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCBu
MSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpOwogIGJhc2lj
X3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAg
ICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIDEsIGMpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBs
YWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQog
ICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHN0cik7IH0KICBi
YXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgY2hh
clQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCks
IGkyIC0gaTEsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwg
aXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBp
YmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRv
ciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVw
bGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4sIGMpOyB9CgogIHRlbXBsYXRlPGNsYXNz
IElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIHJlcGxhY2UoaXRlcmF0b3IgaTEsIGl0
ZXJhdG9yIGkyLAoJCQkgIElucHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIpOwoKCgoK
CnByaXZhdGU6CiAgc3RhdGljIGNoYXJUIGVvcyAoKSB7IHJldHVybiB0cmFpdHM6OmVvcyAoKTsg
fQogIHZvaWQgdW5pcXVlICgpIHsgaWYgKHJlcCAoKS0+cmVmID4gMSkgYWxsb2MgKGxlbmd0aCAo
KSwgdHJ1ZSk7IH0KICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUgKCk7IHJlcCAoKS0+c2VsZmlz
aCA9IHRydWU7IH0KCnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKSBj
b25zdAogICAgewogICAgICBpZiAocG9zID09IGxlbmd0aCAoKSkKCXJldHVybiBlb3MgKCk7CiAg
ICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdIChz
aXplX3R5cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkpW3Bvc107IH0K
CiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKQogICAgewogICAgICBkbyB7IGlmICggcG9z
ID49IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0aCAoKSIpOyB9IHdo
aWxlICgwKSA7CiAgICAgIHJldHVybiAoKnRoaXMpW3Bvc107CiAgICB9CiAgY29uc3RfcmVmZXJl
bmNlIGF0IChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBkbyB7IGlmICggcG9zID49
IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0aCAoKSIpOyB9IHdoaWxl
ICgwKSA7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9Cgpwcml2YXRlOgogIHZvaWQg
dGVybWluYXRlICgpIGNvbnN0CiAgICB7IHRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlbbGVuZ3Ro
ICgpXSwgZW9zICgpKTsgfQoKcHVibGljOgogIGNvbnN0IGNoYXJUKiBjX3N0ciAoKSBjb25zdAog
ICAgeyBpZiAobGVuZ3RoICgpID09IDApIHJldHVybiAiIjsgdGVybWluYXRlICgpOyByZXR1cm4g
ZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYyk7CiAgdm9pZCBy
ZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNpemUgKG4sIGVvcyAoKSk7IH0KICB2b2lkIHJl
c2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVfdHlwZSBjb3B5IChjaGFyVCogcywgc2l6ZV90
eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0
IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJu
IGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5k
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNp
emVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAg
ICB7IHJldHVybiBmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5
cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUg
cmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29u
c3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0K
ICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5
cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiByZmluZCAocywgcG9zLCB0cmFpdHM6Omxl
bmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0g
bnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBiYXNpY19zdHJp
bmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0
X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9m
aXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25z
dDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBw
b3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9vZiAocywgcG9zLCB0cmFpdHM6
Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNoYXJUIGMsIHNpemVf
dHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoYywgcG9zKTsgfQoKICBzaXpl
X3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBv
cyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHN0ci5kYXRhKCksIHBv
cywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGNoYXJU
KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRf
bGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAg
eyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBz
aXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29u
c3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0
X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z
dAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxl
bmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMs
IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJz
dF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsg
cmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0K
ICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAw
KSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFz
dF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBm
aW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl
IG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywg
c2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfbm90X29m
IChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X25v
dF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwoKICBiYXNpY19zdHJp
bmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKSBjb25zdAog
ICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhpcywgcG9zLCBuKTsgfQoKICBpbnQgY29tcGFy
ZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUg
biA9IG5wb3MpIGNvbnN0OwogICAKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gY29tcGFyZSAocywgcG9z
LCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0ZXJhdG9yIGJlZ2luICgpIHsgc2VsZmlzaCAo
KTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRlcmF0b3IgZW5kICgpIHsgc2VsZmlzaCAoKTsg
cmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0KCnByaXZhdGU6CiAgaXRlcmF0b3IgaWJlZ2lu
ICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbMF07IH0KICBpdGVyYXRvciBpZW5kICgpIGNv
bnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3RoICgpXTsgfQoKcHVibGljOgogIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJuIGliZWdpbiAoKTsgfQogIGNvbnN0X2l0ZXJh
dG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5kICgpOyB9CgogIHJldmVyc2VfaXRlcmF0b3Ig
ICAgICAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsgfQogIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yICAgICAgIHJlbmQo
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KICBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZvaWQgYWxsb2MgKHNpemVfdHlwZSBzaXplLCBi
b29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUgX2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNo
YXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKTsKICBpbmxpbmUgYm9vbCBjaGVj
a19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7CgogIHN0YXRpYyBSZXAgbmlsUmVwOwogIGNo
YXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CmJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBJbnB1dEl0ZXJh
dG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoKCnsKICBjb25zdCBzaXplX3R5cGUgbGVuID0g
bGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBpMSAtIGliZWdpbiAoKTsKICBzaXplX3R5cGUg
bjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9IGoyIC0gajE7CgogIGRvIHsgaWYgKCBwb3Mg
PiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYg
KG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4x
ID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6
ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBu
MjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJl
cDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAg
ICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEp
KTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNzaWduICgo
KnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAg
IHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyAr
IG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCgl0cmFpdHM6OmFzc2ln
biAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47Cgog
IHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3Ry
IChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGNoYXJUKiBs
aHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7
CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBz
dHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwg
Y2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAoMSwgbGhzKTsKICBzdHIuYXBwZW5kIChyaHMp
OwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4g
c3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJh
dG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMs
IGNoYXJUIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBz
dHIgKGxocyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9v
bApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s
Cm9wZXJhdG9yPT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA9
PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxo
cy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBjaGFy
VCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJo
cykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJh
dG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhz
LCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAhPSAwKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
aW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s
aW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUg
KGxocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVy
biAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBj
aGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3Bl
cmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxo
cywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
aW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21w
YXJlIChsaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewog
IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0g
KGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChy
aHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykg
PiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDw9
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0g
MCk7Cn0KCmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9yPj4gKGlz
dHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0cmVhbSYK
b3BlcmF0b3I8PCAob3N0cmVhbSYsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPiBpc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0gIAoKIyAxICIv
b3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiIDEgMwogCiAKCiAKIAogCiAKIAoKIAog
CiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCAqIGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKb3BlcmF0b3IgbmV3
IChzaXplX3Qgcywgc2l6ZV90IGV4dHJhKQp7CiAgcmV0dXJuIEFsbG9jYXRvcjo6YWxsb2NhdGUo
cyArIGV4dHJhICogc2l6ZW9mIChjaGFyVCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqIHB0
cikKewogIEFsbG9jYXRvcjo6ZGVhbGxvY2F0ZShwdHIsIHNpemVvZihSZXApICsKCQkJcmVpbnRl
cnByZXRfY2FzdDxSZXAgKj4ocHRyKS0+cmVzICoKCQkJc2l6ZW9mIChjaGFyVCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
c2l6ZV90IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKZnJv
Yl9zaXplIChzaXplX3QgcykKewogIHNpemVfdCBpID0gMTY7CiAgd2hpbGUgKGkgPCBzKSBpICo9
IDI7CiAgcmV0dXJuIGk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OlJlcCAqCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVw
OjoKY3JlYXRlIChzaXplX3QgZXh0cmEpCnsKICBleHRyYSA9IGZyb2Jfc2l6ZSAoZXh0cmEgKyAx
KTsKICBSZXAgKnAgPSBuZXcgKGV4dHJhKSBSZXA7CiAgcC0+cmVzID0gZXh0cmE7CiAgcC0+cmVm
ID0gMTsKICBwLT5zZWxmaXNoID0gZmFsc2U7CiAgcmV0dXJuIHA7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNoYXJUICogYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpjbG9uZSAoKQp7CiAgUmVwICpw
ID0gUmVwOjpjcmVhdGUgKGxlbik7CiAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuKTsKICBwLT5s
ZW4gPSBsZW47CiAgcmV0dXJuIHAtPmRhdGEgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwg
Y2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKZXhjZXNzX3Nsb3AgKHNpemVfdCBzLCBz
aXplX3QgcikKewogIHJldHVybiAyICogKHMgPD0gMTYgPyAxNiA6IHMpIDwgcjsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJv
b2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY2hlY2tfcmVhbGxv
YyAoYmFzaWNfc3RyaW5nOjpzaXplX3R5cGUgcykgY29uc3QKewogIHMgKz0gc2l6ZW9mIChjaGFy
VCk7CiAgcmVwICgpLT5zZWxmaXNoID0gZmFsc2U7CiAgcmV0dXJuIChyZXAgKCktPnJlZiA+IDEK
CSAgfHwgcyA+IGNhcGFjaXR5ICgpCgkgIHx8IFJlcDo6ZXhjZXNzX3Nsb3AgKHMsIGNhcGFjaXR5
ICgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKYWxs
b2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIHNpemUsIGJvb2wgc2F2ZSkKewogIGlmICghIGNo
ZWNrX3JlYWxsb2MgKHNpemUpKQogICAgcmV0dXJuOwoKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAo
c2l6ZSk7CgogIGlmIChzYXZlKQogICAgewogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBsZW5n
dGggKCkpOwogICAgICBwLT5sZW4gPSBsZW5ndGggKCk7CiAgICB9CiAgZWxzZQogICAgcC0+bGVu
ID0gMDsKCiAgcmVwdXAgKHApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNp
emVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsCgkgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp
emVfdHlwZSBwb3MyLCBzaXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3QgbGVuMiA9IHN0ci5s
ZW5ndGggKCk7CgogIGlmIChwb3MxID09IDAgJiYgbjEgPj0gbGVuZ3RoICgpICYmIHBvczIgPT0g
MCAmJiBuMiA+PSBsZW4yKQogICAgcmV0dXJuIG9wZXJhdG9yPSAoc3RyKTsKCiAgZG8geyBpZiAo
IHBvczIgPiBsZW4yICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MyID4gbGVuMiIpOyB9IHdoaWxlICgw
KSA7CgogIGlmIChuMiA+IGxlbjIgLSBwb3MyKQogICAgbjIgPSBsZW4yIC0gcG9zMjsKCiAgcmV0
dXJuIHJlcGxhY2UgKHBvczEsIG4xLCBzdHIuZGF0YSAoKSArIHBvczIsIG4yKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZv
aWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpjb3B5IChz
aXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0
czo6Y29weSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwg
Y2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKbW92ZSAoc2l6ZV90IHBvcywgY29uc3Qg
Y2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFpdHM6Om1vdmUgKGRhdGEgKCkg
KyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlw
ZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuMikKewogIGNv
bnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9f
b3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4g
LSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6
ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIi
KTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAo
Y2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUg
KG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkg
KHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBw
LT5jb3B5IChwb3MsIHMsIG4yKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsK
ICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAo
cG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgIH0KICByZXAg
KCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CnNldCAoc2l6ZV90IHBvcywgY29u
c3QgY2hhclQgYywgc2l6ZV90IG4pCnsKICB0cmFpdHM6OnNldCAgKGRhdGEgKCkgKyBwb3MsIGMs
IG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNp
emVfdHlwZSBuMSwgc2l6ZV90eXBlIG4yLCBjaGFyVCBjKQp7CiAgY29uc3Qgc2l6ZV90IGxlbiA9
IGxlbmd0aCAoKTsKICBkbyB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3Mg
PiBsZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVu
IC0gcG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0
aF9lcnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAg
c2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXds
ZW4pKQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+
Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkg
KyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPnNldCAgKHBvcywgYywgbjIp
OwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUg
KHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBy
ZXAgKCktPnNldCAgKHBvcywgYywgbjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoK
ICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYykKewogIGRvIHsgaWYgKCBuID4gbWF4
X3NpemUgKCkgKSBfX2xlbmd0aF9lcnJvciAoIm4gPiBtYXhfc2l6ZSAoKSIpOyB9IHdoaWxlICgw
KSA7CgogIGlmIChuID4gbGVuZ3RoICgpKQogICAgYXBwZW5kIChuIC0gbGVuZ3RoICgpLCBjKTsK
ICBlbHNlCiAgICBlcmFzZSAobik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
CmNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIGRv
IHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAo
KSIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuID4gbGVuZ3RoICgpIC0gcG9zKQogICAgbiA9IGxl
bmd0aCAoKSAtIHBvczsKCiAgdHJhaXRzOjpjb3B5IChzLCBkYXRhICgpICsgcG9zLCBuKTsKICBy
ZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhw
b3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYg
KHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0
YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0
IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAg
Zm9yICg7IHhwb3MgPCBsZW47ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3Nd
LCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsK
ICByZXR1cm4gX2ZpbmQgKGRhdGEgKCksIGMsIHBvcywgbGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJu
IG5wb3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gbjsKICBpZiAoeHBvcyA+IHBvcykK
ICAgIHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJh
aXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgp
ICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5
cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAg
c2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9
IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChk
YXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9
IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChz
LCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0
dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90
eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9v
ZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAg
aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0
aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z
OyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9
IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAg
Zm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0YSAo
KSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAo
Y2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZv
ciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAo
KSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09
IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYg
KHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykK
ICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJl
dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAg
aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0
aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z
OyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAg
ICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp
emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0
aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsK
CiAgc2l6ZV90IHJsZW4gPSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAgcmxl
biA9IG47CiAgaWYgKHJsZW4gPiBzdHIubGVuZ3RoICgpKQogICAgcmxlbiA9IHN0ci5sZW5ndGgg
KCk7CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHN0ci5kYXRhICgp
LCBybGVuKTsKICBpZiAociAhPSAwKQogICAgcmV0dXJuIHI7CiAgaWYgKHJsZW4gPT0gbikKICAg
IHJldHVybiAwOwogIHJldHVybiAobGVuZ3RoICgpIC0gcG9zKSAtIHN0ci5sZW5ndGggKCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb21wYXJlIChjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlm
ICggcG9zID4gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsg
fSB3aGlsZSAoMCkgOwoKICBzaXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxl
biA+IG4pCiAgICBybGVuID0gbjsKICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSAr
IHBvcywgcywgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIHJldHVybiAobGVu
Z3RoICgpIC0gcG9zKSAtIG47Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gJnMpCnsKICBpbnQgdyA9IGlz
LndpZHRoICgwKTsKICBpZiAoaXMuaXBmeDAgKCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVh
bWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwogICAgICB3aGlsZSAo
MSkKCXsKCSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAg
IHsKCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9
CgkgIGVsc2UgaWYgKHRyYWl0czo6aXNfZGVsIChjaCkpCgkgICAgewoJICAgICAgc2ItPnN1bmdl
dGMgKCk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChj
aCk7CgkgIGlmICgtLXcgPT0gMSkKCSAgICBicmVhazsKCX0KICAgIH0KCiAgaXMuaXNmeCAoKTsK
ICBpZiAocy5sZW5ndGggKCkgPT0gMCkKICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoK
ICByZXR1cm4gaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+Cm9zdHJlYW0gJgpvcGVyYXRvcjw8IChvc3RyZWFtICZvLCBjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMpCnsKICByZXR1cm4gby53cml0
ZSAocy5kYXRhICgpLCBzLmxlbmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0gJmlz
LCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMsIGNoYXJUIGRlbGlt
KQp7CiAgaWYgKGlzLmlwZngxICgpKQogICAgewogICAgICBfR19zaXplX3QgIGNvdW50ID0gMDsK
ICAgICAgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7Cgog
ICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09
ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRlIChjb3VudCA9PSAwCgkJCSAgID8gKGlv
czo6ZmFpbGJpdHxpb3M6OmVvZmJpdCkKCQkJICAgOiBpb3M6OmVvZmJpdCk7CgkgICAgICBicmVh
azsKCSAgICB9CgoJICArK2NvdW50OwoKCSAgaWYgKGNoID09IGRlbGltKQoJICAgIGJyZWFrOwoK
CSAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCgkgIGlmIChzLmxlbmd0aCAoKSA9PSBz
Lm5wb3MgLSAxKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoJICAg
ICAgYnJlYWs7CgkgICAgfQoJfQogICAgfQoKICAgCiAgIAogIGlzLmlzZnggKCk7CgogIHJldHVy
biBpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNf
c3RyaW5nPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFs
c2UgfTsKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90
eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bnBvczsKCn0gIAoj
IDY1MiAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgojIDYgIi9vcHQv
c2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0cmluZyIgMiAzCgoKZXh0ZXJuICJDKysiIHsKdHlwZWRlZiBiYXNpY19z
dHJpbmcgPGNoYXI+IHN0cmluZzsKIAp9ICAKCgojIDM2ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGRl
eGNlcHQiIDIgMwoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGxvZ2lj
X2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgc3RyaW5nIF93aGF0OwpwdWJsaWM6CiAgbG9n
aWNfZXJyb3IoY29uc3Qgc3RyaW5nJiB3aGF0X2FyZyk6IF93aGF0ICh3aGF0X2FyZykgeyB9CiAg
dmlydHVhbCBjb25zdCBjaGFyKiB3aGF0ICgpIGNvbnN0IHsgcmV0dXJuIF93aGF0LmNfc3RyICgp
OyB9Cn07CgpjbGFzcyBkb21haW5fZXJyb3IgOiBwdWJsaWMgbG9naWNfZXJyb3IgewpwdWJsaWM6
CiAgZG9tYWluX2Vycm9yIChjb25zdCBzdHJpbmcmIHdoYXRfYXJnKTogbG9naWNfZXJyb3IgKHdo
YXRfYXJnKSB7IH0KfTsKCmNsYXNzIGludmFsaWRfYXJndW1lbnQgOiBwdWJsaWMgbG9naWNfZXJy
b3IgewpwdWJsaWM6CiAgaW52YWxpZF9hcmd1bWVudCAoY29uc3Qgc3RyaW5nJiB3aGF0X2FyZyk6
IGxvZ2ljX2Vycm9yICh3aGF0X2FyZykgeyB9Cn07CgpjbGFzcyBsZW5ndGhfZXJyb3IgOiBwdWJs
aWMgbG9naWNfZXJyb3IgewpwdWJsaWM6CiAgbGVuZ3RoX2Vycm9yIChjb25zdCBzdHJpbmcmIHdo
YXRfYXJnKTogbG9naWNfZXJyb3IgKHdoYXRfYXJnKSB7IH0KfTsKCmNsYXNzIG91dF9vZl9yYW5n
ZSA6IHB1YmxpYyBsb2dpY19lcnJvciB7CnB1YmxpYzoKICBvdXRfb2ZfcmFuZ2UgKGNvbnN0IHN0
cmluZyYgd2hhdF9hcmcpOiBsb2dpY19lcnJvciAod2hhdF9hcmcpIHsgfQp9OwoKY2xhc3MgcnVu
dGltZV9lcnJvciA6IHB1YmxpYyBleGNlcHRpb24gewogIHN0cmluZyBfd2hhdDsKcHVibGljOgog
IHJ1bnRpbWVfZXJyb3IoY29uc3Qgc3RyaW5nJiB3aGF0X2FyZyk6IF93aGF0ICh3aGF0X2FyZykg
eyB9CiAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0ICgpIGNvbnN0IHsgcmV0dXJuIF93aGF0LmNf
c3RyICgpOyB9CnByb3RlY3RlZDoKICBydW50aW1lX2Vycm9yKCk6IGV4Y2VwdGlvbiAoKSB7IH0K
fTsKCmNsYXNzIHJhbmdlX2Vycm9yIDogcHVibGljIHJ1bnRpbWVfZXJyb3IgewpwdWJsaWM6CiAg
cmFuZ2VfZXJyb3IgKGNvbnN0IHN0cmluZyYgd2hhdF9hcmcpOiBydW50aW1lX2Vycm9yICh3aGF0
X2FyZykgeyB9Cn07CgpjbGFzcyBvdmVyZmxvd19lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9y
IHsKcHVibGljOgogIG92ZXJmbG93X2Vycm9yIChjb25zdCBzdHJpbmcmIHdoYXRfYXJnKTogcnVu
dGltZV9lcnJvciAod2hhdF9hcmcpIHsgfQp9OwoKY2xhc3MgdW5kZXJmbG93X2Vycm9yIDogcHVi
bGljIHJ1bnRpbWVfZXJyb3IgewpwdWJsaWM6CiAgdW5kZXJmbG93X2Vycm9yIChjb25zdCBzdHJp
bmcmIHdoYXRfYXJnKTogcnVudGltZV9lcnJvciAod2hhdF9hcmcpIHsgfQp9OwoKfSAgCiAKfSAg
CgoKIyAzMyAiLi4vLi4vaW5jbHVkZS94dGwvb2JqaW8uaCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
QnVmZmVyPgpjbGFzcyBnZW5lcmljX2Zvcm1hdCB7CnByaXZhdGU6CglCdWZmZXImIGJ1ZmZlcjsK
cHJvdGVjdGVkOgoJdm9pZCogcmVxdWlyZShpbnQgbikJe3JldHVybiBidWZmZXIucmVxdWlyZShu
KTt9Cgl2b2lkIHVucmVxdWlyZShpbnQgbikJe2J1ZmZlci51bnJlcXVpcmUobik7fQoJdm9pZCog
ZGVzaXJlKGludCBuKQl7cmV0dXJuIGJ1ZmZlci5kZXNpcmUobik7fQoJdm9pZCB1bmRlc2lyZShp
bnQgbikJe2J1ZmZlci51bmRlc2lyZShuKTt9CgoJdm9pZCByZWFkKGNoYXIqIGRhdGEsIGludCBz
aXplKQkJe2J1ZmZlci5yZWFkKGRhdGEsIHNpemUpO30KCXZvaWQgd3JpdGUoY2hhciBjb25zdCog
ZGF0YSwgaW50IHNpemUpCXtidWZmZXIud3JpdGUoZGF0YSwgc2l6ZSk7fQpwdWJsaWM6CiAJZ2Vu
ZXJpY19mb3JtYXQoQnVmZmVyJiBidWYpOmJ1ZmZlcihidWYpIHt9CgoJdm9pZCBpbnB1dF9zdGFy
dCgpIHt9CgoJdm9pZCBpbnB1dF9zdGFydF9jb21wb3NpdGUoKSB7fQoJdm9pZCBpbnB1dF9lbmRf
Y29tcG9zaXRlKCkge30KCgl2b2lkIGlucHV0X3N0YXJ0X3ZlY3RvcigpIHt9Cgl2b2lkIGlucHV0
X2VuZF92ZWN0b3IoKSB7fQoKCXZpcnR1YWwgdm9pZCBvdXRwdXRfc3RhcnQoKSB7fQoKCXZvaWQg
b3V0cHV0X3N0YXJ0X2NvbXBvc2l0ZSgpIHt9Cgl2b2lkIG91dHB1dF9lbmRfY29tcG9zaXRlKCkg
e30KCgl2b2lkIG91dHB1dF9zdGFydF92ZWN0b3IoKSB7fQoJdm9pZCBvdXRwdXRfZW5kX3ZlY3Rv
cigpIHt9CgoJdm9pZCByZXNldF9idWZmZXIoKSB7CgkJYnVmZmVyLnJld2luZCgpOwoJCW91dHB1
dF9zdGFydCgpOwoJfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEJ1ZmZlcj4KY2xhc3MgcmF3X2Zvcm1h
dDogcHVibGljIGdlbmVyaWNfZm9ybWF0PEJ1ZmZlcj4gewogcHVibGljOgogCXR5cGVkZWYgQnVm
ZmVyIGJ1ZmZlcjsKCiAJcmF3X2Zvcm1hdChCdWZmZXImIGJ1Zik6Z2VuZXJpY19mb3JtYXQ8QnVm
ZmVyPihidWYpIHt9CgkKCXRlbXBsYXRlIDxjbGFzcyBUPgoJaW5saW5lIHZvaWQgaW5wdXRfc2lt
cGxlKFQmIGRhdGEpCgkJe2RhdGE9KigoVCopcmVxdWlyZShzaXplb2YoVCkpKTt9CgoJdGVtcGxh
dGUgPGNsYXNzIElkeD4KCXZvaWQgaW5wdXRfc3RhcnRfYXJyYXkoSWR4JiBuKSB7aW5wdXRfc2lt
cGxlKG4pO30KCXRlbXBsYXRlIDxjbGFzcyBJZHg+Cglib29sIGlucHV0X2VuZF9hcnJheShJZHgm
IG4pIHtyZXR1cm4gIShuLS0+MCk7fQoKCXZvaWQgaW5wdXRfY2hhcnMoY2hhciogZGF0YSwgaW50
IHNpemUpIHtpbnB1dF9yYXcoZGF0YSwgc2l6ZSk7fQoKCXZvaWQgaW5wdXRfcmF3KGNoYXIqIGRh
dGEsIGludCBzaXplKSB7CgkJaW50IGk7CgkJZm9yKGk9MDtpPChzaXplPj44KS0xO2krKyxkYXRh
Kz0yNTYpCgkJCXN0ZDo6bWVtY3B5KGRhdGEsIHJlcXVpcmUoMjU2KSwgMjU2KTsKCQlpbnQgcmVz
PXNpemUtKGk8PDgpOwoJCXN0ZDo6bWVtY3B5KGRhdGEsIHJlcXVpcmUocmVzKSwgcmVzKTsKCX0K
Cgl0ZW1wbGF0ZSA8Y2xhc3MgVD4KCWlubGluZSB2b2lkIG91dHB1dF9zaW1wbGUoVCBjb25zdCYg
ZGF0YSkKCQl7KigoVCopZGVzaXJlKHNpemVvZihUKSkpPWRhdGE7fQoKCXRlbXBsYXRlIDxjbGFz
cyBJZHg+Cgl2b2lkIG91dHB1dF9zdGFydF9hcnJheShJZHggbikge291dHB1dF9zaW1wbGUobik7
fQoJdm9pZCBvdXRwdXRfZW5kX2FycmF5KCkge30KCgl2b2lkIG91dHB1dF9jaGFycyhjaGFyIGNv
bnN0KiBkYXRhLCBpbnQgc2l6ZSkge291dHB1dF9yYXcoZGF0YSwgc2l6ZSk7fQoKCXZvaWQgb3V0
cHV0X3JhdyhjaGFyIGNvbnN0KiBkYXRhLCBpbnQgc2l6ZSkgewoJCWludCBpOwoJCWZvcihpPTA7
aTwoc2l6ZT4+OCktMTtpKyssZGF0YSs9MjU2KQoJCQlzdGQ6Om1lbWNweShkZXNpcmUoMjU2KSwg
ZGF0YSwgMjU2KTsKCQlpbnQgcmVzPXNpemUtKGk8PDgpOwoJCXN0ZDo6bWVtY3B5KGRlc2lyZShy
ZXMpLCBkYXRhLCByZXMpOwoJfQp9OwoKCiMgMSAiLi4vLi4vaW5jbHVkZS94dGwvbWFjcm9zLmgi
IDEKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxMTIg
Ii4uLy4uL2luY2x1ZGUveHRsL21hY3Jvcy5oIgoKCiMgMTI0ICIuLi8uLi9pbmNsdWRlL3h0bC9t
YWNyb3MuaCIKCgojIDEzNyAiLi4vLi4vaW5jbHVkZS94dGwvbWFjcm9zLmgiCgoKIyAxNTAgIi4u
Ly4uL2luY2x1ZGUveHRsL21hY3Jvcy5oIgoKCiMgMTE5ICIuLi8uLi9pbmNsdWRlL3h0bC9vYmpp
by5oIiAyCgoKCgoKCgoKCgoKY2xhc3Mgbm9fcmVmczsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBG
b3JtYXQsIGNsYXNzIFJlZmVyZW5jZXM9bm9fcmVmcz4KY2xhc3Mgb2JqX2lucHV0IHsKIHByaXZh
dGU6CglGb3JtYXQmIGZvcm1hdDsKIAlSZWZlcmVuY2VzIHJlZnM7CgogcHVibGljOgogCW9ial9p
bnB1dChGb3JtYXQmIGJ1Zik6Zm9ybWF0KGJ1ZikKCQl7Zm9ybWF0LmlucHV0X3N0YXJ0KCk7fQoK
CWlubGluZSBvYmpfaW5wdXQmIHNpbXBsZSggYm9vbCAmIGRhdGEpIHsgZm9ybWF0LmlucHV0X3Np
bXBsZShkYXRhKTsgcmV0dXJuICp0aGlzOyB9IDsKCWlubGluZSBvYmpfaW5wdXQmIHNpbXBsZSgg
Y2hhciAmIGRhdGEpIHsgZm9ybWF0LmlucHV0X3NpbXBsZShkYXRhKTsgcmV0dXJuICp0aGlzOyB9
IDsKCWlubGluZSBvYmpfaW5wdXQmIHNpbXBsZSggdW5zaWduZWQgY2hhciAmIGRhdGEpIHsgZm9y
bWF0LmlucHV0X3NpbXBsZShkYXRhKTsgcmV0dXJuICp0aGlzOyB9IDsKCWlubGluZSBvYmpfaW5w
dXQmIHNpbXBsZSggc2hvcnQgJiBkYXRhKSB7IGZvcm1hdC5pbnB1dF9zaW1wbGUoZGF0YSk7IHJl
dHVybiAqdGhpczsgfSA7CglpbmxpbmUgb2JqX2lucHV0JiBzaW1wbGUoIHVuc2lnbmVkIHNob3J0
ICYgZGF0YSkgeyBmb3JtYXQuaW5wdXRfc2ltcGxlKGRhdGEpOyByZXR1cm4gKnRoaXM7IH0gOwoJ
aW5saW5lIG9ial9pbnB1dCYgc2ltcGxlKCBpbnQgJiBkYXRhKSB7IGZvcm1hdC5pbnB1dF9zaW1w
bGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7CglpbmxpbmUgb2JqX2lucHV0JiBzaW1wbGUoIHVu
c2lnbmVkIGludCAmIGRhdGEpIHsgZm9ybWF0LmlucHV0X3NpbXBsZShkYXRhKTsgcmV0dXJuICp0
aGlzOyB9IDsKCWlubGluZSBvYmpfaW5wdXQmIHNpbXBsZSggbG9uZyAmIGRhdGEpIHsgZm9ybWF0
LmlucHV0X3NpbXBsZShkYXRhKTsgcmV0dXJuICp0aGlzOyB9IDsKCWlubGluZSBvYmpfaW5wdXQm
IHNpbXBsZSggdW5zaWduZWQgbG9uZyAmIGRhdGEpIHsgZm9ybWF0LmlucHV0X3NpbXBsZShkYXRh
KTsgcmV0dXJuICp0aGlzOyB9IDsKCWlubGluZSBvYmpfaW5wdXQmIHNpbXBsZSggbG9uZ2xvbmcg
JiBkYXRhKSB7IGZvcm1hdC5pbnB1dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7Cglp
bmxpbmUgb2JqX2lucHV0JiBzaW1wbGUoIHVuc2lnbmVkbG9uZ2xvbmcgJiBkYXRhKSB7IGZvcm1h
dC5pbnB1dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7CglpbmxpbmUgb2JqX2lucHV0
JiBzaW1wbGUoIGZsb2F0ICYgZGF0YSkgeyBmb3JtYXQuaW5wdXRfc2ltcGxlKGRhdGEpOyByZXR1
cm4gKnRoaXM7IH0gOwoJaW5saW5lIG9ial9pbnB1dCYgc2ltcGxlKCBkb3VibGUgJiBkYXRhKSB7
IGZvcm1hdC5pbnB1dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7CgoJaW5saW5lIG9i
al9pbnB1dCYgY3N0cmluZyhjaGFyKiYgZGF0YSkgewoJCWludCBzaXplOwoJCWZvcm1hdC5pbnB1
dF9zdGFydF9hcnJheShzaXplKTsKCQlkYXRhPW5ldyBjaGFyW3NpemUrMV07CgkJZm9ybWF0Lmlu
cHV0X2NoYXJzKGRhdGEsIHNpemUpOwoJCWRhdGFbc2l6ZV09MDsKCQlmb3JtYXQuaW5wdXRfZW5k
X2FycmF5KHNpemUpOwoJCXJldHVybiAqdGhpczsKCX0KCglpbmxpbmUgb2JqX2lucHV0JiBjc3Ry
aW5nKGNoYXIqIGRhdGEsIGludCBtYXgpIHsKCQlpbnQgc2l6ZTsKCQlmb3JtYXQuaW5wdXRfc3Rh
cnRfYXJyYXkoc2l6ZSk7CgkJZm9ybWF0LmlucHV0X2NoYXJzKGRhdGEsIHNpemU+bWF4P21heDpz
aXplKTsKCQlkYXRhW3NpemU+bWF4P21heDpzaXplXT0wOwoJCWZvcm1hdC5pbnB1dF9lbmRfYXJy
YXkoc2l6ZSk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCWlubGluZSBvYmpfaW5wdXQmIHNpbXBsZShz
dGQ6OnN0cmluZyYgZGF0YSkgewoJCWludCBzaXplOwoJCWZvcm1hdC5pbnB1dF9zdGFydF9hcnJh
eShzaXplKTsKCQljaGFyKiB0bXA9bmV3IGNoYXJbc2l6ZV07CgkJZm9ybWF0LmlucHV0X2NoYXJz
KHRtcCwgc2l6ZSk7CgkJZGF0YT1zdGQ6OnN0cmluZyh0bXAsIHNpemUpOwoJCSAKCQkgCgkJZm9y
bWF0LmlucHV0X2VuZF9hcnJheShzaXplKTsKCQlyZXR1cm4gKnRoaXM7Cgl9CgoJdGVtcGxhdGUg
PGNsYXNzIFQ+CglpbmxpbmUgb2JqX2lucHV0JiB2ZWN0b3IoVCBkYXRhW10sIGludCBzaXplKSB7
CgkJZm9ybWF0LmlucHV0X3N0YXJ0X3ZlY3RvcigpOwoJCWZvcihpbnQgaT0wO2k8c2l6ZTtpKysp
CgkJCXNpbXBsZSggZGF0YVtpXSApIDsKCQlmb3JtYXQuaW5wdXRfZW5kX3ZlY3RvcigpOwoJCXJl
dHVybiAqdGhpczsKCX0KCgl0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgSWR4PgoJaW5saW5lIG9i
al9pbnB1dCYgYXJyYXkoVComIGRhdGEsIElkeCYgc2l6ZSkgewoJCWZvcm1hdC5pbnB1dF9zdGFy
dF9hcnJheShzaXplKTsKCQlkYXRhPW5ldyBUW3NpemVdOwoJCWZvcihpbnQgaj1zaXplLGk9MDsh
Zm9ybWF0LmlucHV0X2VuZF9hcnJheShqKTtpKyspCgkJCXNpbXBsZSggZGF0YVtpXSApIDsKCQly
ZXR1cm4gKnRoaXM7Cgl9CgojIDIyOSAiLi4vLi4vaW5jbHVkZS94dGwvb2JqaW8uaCIKCgoJaW5s
aW5lIG9ial9pbnB1dCYgb3BhcXVlKGNoYXIgZGF0YVtdLCBpbnQgc2l6ZSkgewoJCWZvcm1hdC5p
bnB1dF9zdGFydF92ZWN0b3IoKTsKCQlmb3JtYXQuaW5wdXRfcmF3KGRhdGEsIHNpemUpOwoJCWZv
cm1hdC5pbnB1dF9lbmRfdmVjdG9yKCk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCXRlbXBsYXRlIDxj
bGFzcyBJZHg+CglpbmxpbmUgb2JqX2lucHV0JiBieXRlcyhjaGFyKiYgZGF0YSwgSWR4JiBzaXpl
KSB7CgkJaW50IHM9c2l6ZTsKCQlmb3JtYXQuaW5wdXRfc3RhcnRfYXJyYXkoc2l6ZSk7CgkJZGF0
YT1uZXcgY2hhcltzaXplXTsKCQlmb3JtYXQuaW5wdXRfcmF3KGRhdGEsIHNpemUpOwoJCWZvcm1h
dC5pbnB1dF9lbmRfYXJyYXkocyk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCSAKCSAKCXRlbXBsYXRl
IDxjbGFzcyBUPgoJaW5saW5lIG9ial9pbnB1dCYgY29tcG9zaXRlKFQmIGRhdGEpIHsKCQlmb3Jt
YXQuaW5wdXRfc3RhcnRfY29tcG9zaXRlKCk7CgkJOjpjb21wb3NpdGUoKnRoaXMsIGRhdGEpOwoJ
CWZvcm1hdC5pbnB1dF9lbmRfY29tcG9zaXRlKCk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCgl0ZW1w
bGF0ZSA8Y2xhc3MgVD4KCWlubGluZSBvYmpfaW5wdXQmIHNpbXBsZShUJiBkYXRhKSB7CgkJZm9y
bWF0LmlucHV0X3N0YXJ0X2NvbXBvc2l0ZSgpOwoJCTo6Y29tcG9zaXRlKCp0aGlzLCBkYXRhKTsK
CQlmb3JtYXQuaW5wdXRfZW5kX2NvbXBvc2l0ZSgpOwoJCXJldHVybiAqdGhpczsKCX0KCgoJdGVt
cGxhdGUgPGNsYXNzIFQ+CglpbmxpbmUgb2JqX2lucHV0JiByZWZlcmVuY2UoVComIGRhdGEpIHsK
CQlyZWZzLnJlZmVyZW5jZSgqdGhpcywgZGF0YSk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCXRlbXBs
YXRlIDxjbGFzcyBUPgoJaW5saW5lIG9ial9pbnB1dCYgcG9pbnRlcihUKiYgZGF0YSkgewoJCWJv
b2wgZXhpc3RzOwoJCXNpbXBsZShleGlzdHMpOwoJCWlmIChleGlzdHMpIAoJCQlyZWZlcmVuY2Uo
ZGF0YSk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCXRlbXBsYXRlIDxjbGFzcyBUPgoJaW5saW5lIG9i
al9pbnB1dCYgY29udGFpbmVyKFQmIGRhdGEpIHsKCQlpbnQgaj0wOwoJCWZvcm1hdC5pbnB1dF9z
dGFydF9hcnJheShqKTsKCQl3aGlsZSghZm9ybWF0LmlucHV0X2VuZF9hcnJheShqKSkgewoJCQl0
eXBlbmFtZSBUOjp2YWx1ZV90eXBlIHY7CgkJCXNpbXBsZSggdiApIDsKCQkJZGF0YS5pbnNlcnQo
ZGF0YS5lbmQoKSwgdik7CgkJfQoJCXJldHVybiAqdGhpczsKCX0KCgoJdGVtcGxhdGUgPGNsYXNz
IERpc2NyLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAgICAgID4gaW5saW5lIG9ial9pbnB1dCYgY2hv
aWNlcyhEaXNjciYgZGlzY3IsIFQwICYgdmFsMCAgLCBUMSAmIHZhbDEgICAgICApIHsgc2ltcGxl
KGRpc2NyKTsgc3dpdGNoKGRpc2NyKSB7IGNhc2UgIDAgOglzaW1wbGUodmFsMCApOwlicmVhazsg
IGNhc2UgIDEgOglzaW1wbGUodmFsMSApOwlicmVhazsgICAgICBkZWZhdWx0OiB0aHJvdyBzdGQ6
OnJhbmdlX2Vycm9yKCJYVEwgaW52YWxpZCBjaG9pY2UiKTsgfTsgcmV0dXJuICp0aGlzOyB9IAoJ
dGVtcGxhdGUgPGNsYXNzIERpc2NyLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAgICwgY2xhc3MgVDIg
ICAgICA+IGlubGluZSBvYmpfaW5wdXQmIGNob2ljZXMoRGlzY3ImIGRpc2NyLCBUMCAmIHZhbDAg
ICwgVDEgJiB2YWwxICAgLCBUMiAmIHZhbDIgICAgICApIHsgc2ltcGxlKGRpc2NyKTsgc3dpdGNo
KGRpc2NyKSB7IGNhc2UgIDAgOglzaW1wbGUodmFsMCApOwlicmVhazsgIGNhc2UgIDEgOglzaW1w
bGUodmFsMSApOwlicmVhazsgICBjYXNlICAyIDoJc2ltcGxlKHZhbDIgKTsJYnJlYWs7ICAgICAg
ZGVmYXVsdDogdGhyb3cgc3RkOjpyYW5nZV9lcnJvcigiWFRMIGludmFsaWQgY2hvaWNlIik7IH07
IHJldHVybiAqdGhpczsgfSAKCXRlbXBsYXRlIDxjbGFzcyBEaXNjciwgY2xhc3MgVDAgICwgY2xh
c3MgVDEgICAsIGNsYXNzIFQyICAgLCBjbGFzcyBUMyAgICAgID4gaW5saW5lIG9ial9pbnB1dCYg
Y2hvaWNlcyhEaXNjciYgZGlzY3IsIFQwICYgdmFsMCAgLCBUMSAmIHZhbDEgICAsIFQyICYgdmFs
MiAgICwgVDMgJiB2YWwzICAgICAgKSB7IHNpbXBsZShkaXNjcik7IHN3aXRjaChkaXNjcikgeyBj
YXNlICAwIDoJc2ltcGxlKHZhbDAgKTsJYnJlYWs7ICBjYXNlICAxIDoJc2ltcGxlKHZhbDEgKTsJ
YnJlYWs7ICAgY2FzZSAgMiA6CXNpbXBsZSh2YWwyICk7CWJyZWFrOyAgIGNhc2UgIDMgOglzaW1w
bGUodmFsMyApOwlicmVhazsgICAgICBkZWZhdWx0OiB0aHJvdyBzdGQ6OnJhbmdlX2Vycm9yKCJY
VEwgaW52YWxpZCBjaG9pY2UiKTsgfTsgcmV0dXJuICp0aGlzOyB9IAoJdGVtcGxhdGUgPGNsYXNz
IERpc2NyLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAgICwgY2xhc3MgVDIgICAsIGNsYXNzIFQzICAg
LCBjbGFzcyBUNCAgICAgID4gaW5saW5lIG9ial9pbnB1dCYgY2hvaWNlcyhEaXNjciYgZGlzY3Is
IFQwICYgdmFsMCAgLCBUMSAmIHZhbDEgICAsIFQyICYgdmFsMiAgICwgVDMgJiB2YWwzICAgLCBU
NCAmIHZhbDQgICAgICApIHsgc2ltcGxlKGRpc2NyKTsgc3dpdGNoKGRpc2NyKSB7IGNhc2UgIDAg
OglzaW1wbGUodmFsMCApOwlicmVhazsgIGNhc2UgIDEgOglzaW1wbGUodmFsMSApOwlicmVhazsg
ICBjYXNlICAyIDoJc2ltcGxlKHZhbDIgKTsJYnJlYWs7ICAgY2FzZSAgMyA6CXNpbXBsZSh2YWwz
ICk7CWJyZWFrOyAgIGNhc2UgIDQgOglzaW1wbGUodmFsNCApOwlicmVhazsgICAgICBkZWZhdWx0
OiB0aHJvdyBzdGQ6OnJhbmdlX2Vycm9yKCJYVEwgaW52YWxpZCBjaG9pY2UiKTsgfTsgcmV0dXJu
ICp0aGlzOyB9IAoKCXRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAg
ICAgID4gaW5saW5lIG9ial9pbnB1dCYgb2JqZWN0KEJhc2UqJiBwdHIsIFQwICogdGFnMCAgLCBU
MSAqIHRhZzEgICAgICApIHsgaW50IGRpc2NyOyBzaW1wbGUoZGlzY3IpOyBzd2l0Y2goZGlzY3Ip
IHsgY2FzZSAgMCA6CXJlZmVyZW5jZSh0YWcwICk7CXB0cj0oQmFzZSopdGFnMCA7CWJyZWFrOyAg
IGNhc2UgIDEgOglyZWZlcmVuY2UodGFnMSApOwlwdHI9KEJhc2UqKXRhZzEgOwlicmVhazsgICAg
ICBkZWZhdWx0OiB0aHJvdyBzdGQ6OnJhbmdlX2Vycm9yKCJYVEwgaW52YWxpZCBjaG9pY2UiKTsg
fTsgcmV0dXJuICp0aGlzOyB9IAoJdGVtcGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIFQwICAsIGNs
YXNzIFQxICAgLCBjbGFzcyBUMiAgICAgID4gaW5saW5lIG9ial9pbnB1dCYgb2JqZWN0KEJhc2Uq
JiBwdHIsIFQwICogdGFnMCAgLCBUMSAqIHRhZzEgICAsIFQyICogdGFnMiAgICAgICkgeyBpbnQg
ZGlzY3I7IHNpbXBsZShkaXNjcik7IHN3aXRjaChkaXNjcikgeyBjYXNlICAwIDoJcmVmZXJlbmNl
KHRhZzAgKTsJcHRyPShCYXNlKil0YWcwIDsJYnJlYWs7ICAgY2FzZSAgMSA6CXJlZmVyZW5jZSh0
YWcxICk7CXB0cj0oQmFzZSopdGFnMSA7CWJyZWFrOyAgIGNhc2UgIDIgOglyZWZlcmVuY2UodGFn
MiApOwlwdHI9KEJhc2UqKXRhZzIgOwlicmVhazsgICAgICBkZWZhdWx0OiB0aHJvdyBzdGQ6OnJh
bmdlX2Vycm9yKCJYVEwgaW52YWxpZCBjaG9pY2UiKTsgfTsgcmV0dXJuICp0aGlzOyB9IAoJdGVt
cGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIFQwICAsIGNsYXNzIFQxICAgLCBjbGFzcyBUMiAgICwg
Y2xhc3MgVDMgICAgICA+IGlubGluZSBvYmpfaW5wdXQmIG9iamVjdChCYXNlKiYgcHRyLCBUMCAq
IHRhZzAgICwgVDEgKiB0YWcxICAgLCBUMiAqIHRhZzIgICAsIFQzICogdGFnMyAgICAgICkgeyBp
bnQgZGlzY3I7IHNpbXBsZShkaXNjcik7IHN3aXRjaChkaXNjcikgeyBjYXNlICAwIDoJcmVmZXJl
bmNlKHRhZzAgKTsJcHRyPShCYXNlKil0YWcwIDsJYnJlYWs7ICAgY2FzZSAgMSA6CXJlZmVyZW5j
ZSh0YWcxICk7CXB0cj0oQmFzZSopdGFnMSA7CWJyZWFrOyAgIGNhc2UgIDIgOglyZWZlcmVuY2Uo
dGFnMiApOwlwdHI9KEJhc2UqKXRhZzIgOwlicmVhazsgICBjYXNlICAzIDoJcmVmZXJlbmNlKHRh
ZzMgKTsJcHRyPShCYXNlKil0YWczIDsJYnJlYWs7ICAgICAgZGVmYXVsdDogdGhyb3cgc3RkOjpy
YW5nZV9lcnJvcigiWFRMIGludmFsaWQgY2hvaWNlIik7IH07IHJldHVybiAqdGhpczsgfSAKCXRl
bXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAgICwgY2xhc3MgVDIgICAs
IGNsYXNzIFQzICAgLCBjbGFzcyBUNCAgICAgID4gaW5saW5lIG9ial9pbnB1dCYgb2JqZWN0KEJh
c2UqJiBwdHIsIFQwICogdGFnMCAgLCBUMSAqIHRhZzEgICAsIFQyICogdGFnMiAgICwgVDMgKiB0
YWczICAgLCBUNCAqIHRhZzQgICAgICApIHsgaW50IGRpc2NyOyBzaW1wbGUoZGlzY3IpOyBzd2l0
Y2goZGlzY3IpIHsgY2FzZSAgMCA6CXJlZmVyZW5jZSh0YWcwICk7CXB0cj0oQmFzZSopdGFnMCA7
CWJyZWFrOyAgIGNhc2UgIDEgOglyZWZlcmVuY2UodGFnMSApOwlwdHI9KEJhc2UqKXRhZzEgOwli
cmVhazsgICBjYXNlICAyIDoJcmVmZXJlbmNlKHRhZzIgKTsJcHRyPShCYXNlKil0YWcyIDsJYnJl
YWs7ICAgY2FzZSAgMyA6CXJlZmVyZW5jZSh0YWczICk7CXB0cj0oQmFzZSopdGFnMyA7CWJyZWFr
OyAgIGNhc2UgIDQgOglyZWZlcmVuY2UodGFnNCApOwlwdHI9KEJhc2UqKXRhZzQgOwlicmVhazsg
ICAgICBkZWZhdWx0OiB0aHJvdyBzdGQ6OnJhbmdlX2Vycm9yKCJYVEwgaW52YWxpZCBjaG9pY2Ui
KTsgfTsgcmV0dXJuICp0aGlzOyB9IAoKfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBGb3JtYXQs
IGNsYXNzIFJlZmVyZW5jZXM9bm9fcmVmcz4KY2xhc3Mgb2JqX291dHB1dCB7CiBwcml2YXRlOgog
CUZvcm1hdCYgZm9ybWF0OwogCVJlZmVyZW5jZXMgcmVmczsKCiBwdWJsaWM6CiAJb2JqX291dHB1
dChGb3JtYXQmIGJ1Zik6Zm9ybWF0KGJ1ZikKCQl7Zm9ybWF0Lm91dHB1dF9zdGFydCgpO30KCglp
bmxpbmUgb2JqX291dHB1dCYgc2ltcGxlKCBib29sICBjb25zdCYgZGF0YSkgeyBmb3JtYXQub3V0
cHV0X3NpbXBsZShkYXRhKTsgcmV0dXJuICp0aGlzOyB9IDsKCWlubGluZSBvYmpfb3V0cHV0JiBz
aW1wbGUoIGNoYXIgIGNvbnN0JiBkYXRhKSB7IGZvcm1hdC5vdXRwdXRfc2ltcGxlKGRhdGEpOyBy
ZXR1cm4gKnRoaXM7IH0gOwoJaW5saW5lIG9ial9vdXRwdXQmIHNpbXBsZSggdW5zaWduZWQgY2hh
ciAgY29uc3QmIGRhdGEpIHsgZm9ybWF0Lm91dHB1dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhp
czsgfSA7CglpbmxpbmUgb2JqX291dHB1dCYgc2ltcGxlKCBzaG9ydCAgY29uc3QmIGRhdGEpIHsg
Zm9ybWF0Lm91dHB1dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7CglpbmxpbmUgb2Jq
X291dHB1dCYgc2ltcGxlKCB1bnNpZ25lZCBzaG9ydCAgY29uc3QmIGRhdGEpIHsgZm9ybWF0Lm91
dHB1dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7CglpbmxpbmUgb2JqX291dHB1dCYg
c2ltcGxlKCBpbnQgIGNvbnN0JiBkYXRhKSB7IGZvcm1hdC5vdXRwdXRfc2ltcGxlKGRhdGEpOyBy
ZXR1cm4gKnRoaXM7IH0gOwoJaW5saW5lIG9ial9vdXRwdXQmIHNpbXBsZSggdW5zaWduZWQgaW50
ICBjb25zdCYgZGF0YSkgeyBmb3JtYXQub3V0cHV0X3NpbXBsZShkYXRhKTsgcmV0dXJuICp0aGlz
OyB9IDsKCWlubGluZSBvYmpfb3V0cHV0JiBzaW1wbGUoIGxvbmcgIGNvbnN0JiBkYXRhKSB7IGZv
cm1hdC5vdXRwdXRfc2ltcGxlKGRhdGEpOyByZXR1cm4gKnRoaXM7IH0gOwoJaW5saW5lIG9ial9v
dXRwdXQmIHNpbXBsZSggdW5zaWduZWQgbG9uZyAgY29uc3QmIGRhdGEpIHsgZm9ybWF0Lm91dHB1
dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7CglpbmxpbmUgb2JqX291dHB1dCYgc2lt
cGxlKCBsb25nbG9uZyAgY29uc3QmIGRhdGEpIHsgZm9ybWF0Lm91dHB1dF9zaW1wbGUoZGF0YSk7
IHJldHVybiAqdGhpczsgfSA7CglpbmxpbmUgb2JqX291dHB1dCYgc2ltcGxlKCB1bnNpZ25lZGxv
bmdsb25nICBjb25zdCYgZGF0YSkgeyBmb3JtYXQub3V0cHV0X3NpbXBsZShkYXRhKTsgcmV0dXJu
ICp0aGlzOyB9IDsKCWlubGluZSBvYmpfb3V0cHV0JiBzaW1wbGUoIGZsb2F0ICBjb25zdCYgZGF0
YSkgeyBmb3JtYXQub3V0cHV0X3NpbXBsZShkYXRhKTsgcmV0dXJuICp0aGlzOyB9IDsKCWlubGlu
ZSBvYmpfb3V0cHV0JiBzaW1wbGUoIGRvdWJsZSAgY29uc3QmIGRhdGEpIHsgZm9ybWF0Lm91dHB1
dF9zaW1wbGUoZGF0YSk7IHJldHVybiAqdGhpczsgfSA7CgoJaW5saW5lIG9ial9vdXRwdXQmIGNz
dHJpbmcoY2hhciBjb25zdCogZGF0YSkgewoJCWludCBzaXplPXN0ZDo6c3RybGVuKGRhdGEpOwoJ
CWZvcm1hdC5vdXRwdXRfc3RhcnRfYXJyYXkoc2l6ZSk7CgkJZm9ybWF0Lm91dHB1dF9jaGFycyhk
YXRhLCBzaXplKTsKCQlmb3JtYXQub3V0cHV0X2VuZF9hcnJheSgpOwoJCXJldHVybiAqdGhpczsK
CX0KCglpbmxpbmUgb2JqX291dHB1dCYgY3N0cmluZyhjaGFyIGNvbnN0KiBkYXRhLCBpbnQgbWF4
KSB7CgkJaW50IHNpemU9c3RkOjpzdHJsZW4oZGF0YSk7CgkJZm9ybWF0Lm91dHB1dF9zdGFydF9h
cnJheShzaXplKTsKCQlmb3JtYXQub3V0cHV0X2NoYXJzKGRhdGEsIHNpemUpOwoJCWZvcm1hdC5v
dXRwdXRfZW5kX2FycmF5KCk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCWlubGluZSBvYmpfb3V0cHV0
JiBzaW1wbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGRhdGEpIHsKCQlpbnQgc2l6ZT1kYXRhLnNpemUo
KTsKCQlmb3JtYXQub3V0cHV0X3N0YXJ0X2FycmF5KHNpemUpOwoJCWZvcm1hdC5vdXRwdXRfY2hh
cnMoZGF0YS5kYXRhKCksIHNpemUpOwoJCWZvcm1hdC5vdXRwdXRfZW5kX2FycmF5KCk7CgkJcmV0
dXJuICp0aGlzOwoJfQoKCXRlbXBsYXRlIDxjbGFzcyBUPgoJaW5saW5lIG9ial9vdXRwdXQmIHZl
Y3Rvcihjb25zdCBUIGRhdGFbXSwgaW50IHNpemUpIHsKCQlmb3JtYXQub3V0cHV0X3N0YXJ0X3Zl
Y3RvcigpOwoJCWZvcihpbnQgaT0wO2k8c2l6ZTtpKyspCgkJCXNpbXBsZSggZGF0YVtpXSApIDsK
CQlmb3JtYXQub3V0cHV0X2VuZF92ZWN0b3IoKTsKCQlyZXR1cm4gKnRoaXM7Cgl9CgoJdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIElkeD4KCWlubGluZSBvYmpfb3V0cHV0JiBhcnJheShUIGNvbnN0
KiBkYXRhLCBJZHggc2l6ZSkgewoJCWZvcm1hdC5vdXRwdXRfc3RhcnRfYXJyYXkoc2l6ZSk7CgkJ
Zm9yKGludCBpPTA7aTxzaXplO2krKykKCQkJc2ltcGxlKCBkYXRhW2ldICkgOwoJCWZvcm1hdC5v
dXRwdXRfZW5kX2FycmF5KCk7CgkJcmV0dXJuICp0aGlzOwoJfQojIDM5NyAiLi4vLi4vaW5jbHVk
ZS94dGwvb2JqaW8uaCIKCgoJaW5saW5lIG9ial9vdXRwdXQmIG9wYXF1ZShjb25zdCBjaGFyIGRh
dGFbXSwgaW50IHNpemUpIHsKCQlmb3JtYXQub3V0cHV0X3N0YXJ0X3ZlY3RvcigpOwoJCWZvcm1h
dC5vdXRwdXRfcmF3KGRhdGEsIHNpemUpOwoJCWZvcm1hdC5vdXRwdXRfZW5kX3ZlY3RvcigpOwoJ
CXJldHVybiAqdGhpczsKCX0KCgl0ZW1wbGF0ZSA8Y2xhc3MgSWR4PgoJaW5saW5lIG9ial9vdXRw
dXQmIGJ5dGVzKGNoYXIgY29uc3QqIGRhdGEsIElkeCBzaXplKSB7CgkJZm9ybWF0Lm91dHB1dF9z
dGFydF9hcnJheShzaXplKTsKCQlmb3JtYXQub3V0cHV0X3JhdyhkYXRhLCBzaXplKTsKCQlmb3Jt
YXQub3V0cHV0X2VuZF9hcnJheSgpOwoJCXJldHVybiAqdGhpczsKCX0KCgkgCgkgCgl0ZW1wbGF0
ZSA8Y2xhc3MgVD4KCWlubGluZSBvYmpfb3V0cHV0JiBjb21wb3NpdGUoVCBjb25zdCYgZGF0YSkg
ewoJCWZvcm1hdC5vdXRwdXRfc3RhcnRfY29tcG9zaXRlKCk7CgkJOjpjb21wb3NpdGUoKnRoaXMs
IGNvbnN0X2Nhc3Q8VCY+KGRhdGEpKTsKCQlmb3JtYXQub3V0cHV0X2VuZF9jb21wb3NpdGUoKTsK
CQlyZXR1cm4gKnRoaXM7Cgl9CgoKCXRlbXBsYXRlIDxjbGFzcyBUPgoJaW5saW5lIG9ial9vdXRw
dXQmIHNpbXBsZShUIGNvbnN0JiBkYXRhKSB7CgkJZm9ybWF0Lm91dHB1dF9zdGFydF9jb21wb3Np
dGUoKTsKCQk6OmNvbXBvc2l0ZSgqdGhpcywgY29uc3RfY2FzdDxUJj4oZGF0YSkpOwoJCWZvcm1h
dC5vdXRwdXRfZW5kX2NvbXBvc2l0ZSgpOwoJCXJldHVybiAqdGhpczsKCX0KCgoJdGVtcGxhdGUg
PGNsYXNzIFQ+CglpbmxpbmUgb2JqX291dHB1dCYgcmVmZXJlbmNlKFQgY29uc3QqIGRhdGEpIHsK
CQlyZWZzLnJlZmVyZW5jZSgqdGhpcywgZGF0YSk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCXRlbXBs
YXRlIDxjbGFzcyBUPgoJaW5saW5lIG9ial9vdXRwdXQmIHBvaW50ZXIoVCBjb25zdCogZGF0YSkg
ewoJCWJvb2wgZXhpc3RzPWRhdGEhPSBfX251bGwgOwoJCXNpbXBsZShleGlzdHMpOwoJCWlmIChl
eGlzdHMpCgkJCXJlZmVyZW5jZShkYXRhKTsKCQlyZXR1cm4gKnRoaXM7Cgl9CgoJdGVtcGxhdGUg
PGNsYXNzIFQ+CglpbmxpbmUgb2JqX291dHB1dCYgY29udGFpbmVyKFQgY29uc3QmIGRhdGEpIHsK
CQlpbnQgaj1kYXRhLnNpemUoKTsKCQlmb3JtYXQub3V0cHV0X3N0YXJ0X2FycmF5KGopOwoJCWZv
cih0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBpPWRhdGEuYmVnaW4oKTsKCQkJaSE9ZGF0YS5l
bmQoKTsKCQkJaSsrKQoJCQlzaW1wbGUoICppICkgOwoJCWZvcm1hdC5vdXRwdXRfZW5kX2FycmF5
KCk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCgl0ZW1wbGF0ZSA8Y2xhc3MgRGlzY3IsIGNsYXNzIFQw
ICAsIGNsYXNzIFQxICAgICAgPiBpbmxpbmUgb2JqX291dHB1dCYgY2hvaWNlcyhjb25zdCBEaXNj
ciYgZGlzY3IsIGNvbnN0IFQwICYgdmFsMCAgLCBjb25zdCBUMSAmIHZhbDEgICAgICApIHsgc2lt
cGxlKGRpc2NyKTsgc3dpdGNoKGRpc2NyKSB7IGNhc2UgIDAgOglzaW1wbGUodmFsMCApOwlicmVh
azsgIGNhc2UgIDEgOglzaW1wbGUodmFsMSApOwlicmVhazsgICAgICBkZWZhdWx0OiB0aHJvdyBz
dGQ6OnJhbmdlX2Vycm9yKCJYVEwgaW52YWxpZCBjaG9pY2UiKTsgfTsgcmV0dXJuICp0aGlzOyB9
IAoJdGVtcGxhdGUgPGNsYXNzIERpc2NyLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAgICwgY2xhc3Mg
VDIgICAgICA+IGlubGluZSBvYmpfb3V0cHV0JiBjaG9pY2VzKGNvbnN0IERpc2NyJiBkaXNjciwg
Y29uc3QgVDAgJiB2YWwwICAsIGNvbnN0IFQxICYgdmFsMSAgICwgY29uc3QgVDIgJiB2YWwyICAg
ICAgKSB7IHNpbXBsZShkaXNjcik7IHN3aXRjaChkaXNjcikgeyBjYXNlICAwIDoJc2ltcGxlKHZh
bDAgKTsJYnJlYWs7ICBjYXNlICAxIDoJc2ltcGxlKHZhbDEgKTsJYnJlYWs7ICAgY2FzZSAgMiA6
CXNpbXBsZSh2YWwyICk7CWJyZWFrOyAgICAgIGRlZmF1bHQ6IHRocm93IHN0ZDo6cmFuZ2VfZXJy
b3IoIlhUTCBpbnZhbGlkIGNob2ljZSIpOyB9OyByZXR1cm4gKnRoaXM7IH0gCgl0ZW1wbGF0ZSA8
Y2xhc3MgRGlzY3IsIGNsYXNzIFQwICAsIGNsYXNzIFQxICAgLCBjbGFzcyBUMiAgICwgY2xhc3Mg
VDMgICAgICA+IGlubGluZSBvYmpfb3V0cHV0JiBjaG9pY2VzKGNvbnN0IERpc2NyJiBkaXNjciwg
Y29uc3QgVDAgJiB2YWwwICAsIGNvbnN0IFQxICYgdmFsMSAgICwgY29uc3QgVDIgJiB2YWwyICAg
LCBjb25zdCBUMyAmIHZhbDMgICAgICApIHsgc2ltcGxlKGRpc2NyKTsgc3dpdGNoKGRpc2NyKSB7
IGNhc2UgIDAgOglzaW1wbGUodmFsMCApOwlicmVhazsgIGNhc2UgIDEgOglzaW1wbGUodmFsMSAp
OwlicmVhazsgICBjYXNlICAyIDoJc2ltcGxlKHZhbDIgKTsJYnJlYWs7ICAgY2FzZSAgMyA6CXNp
bXBsZSh2YWwzICk7CWJyZWFrOyAgICAgIGRlZmF1bHQ6IHRocm93IHN0ZDo6cmFuZ2VfZXJyb3Io
IlhUTCBpbnZhbGlkIGNob2ljZSIpOyB9OyByZXR1cm4gKnRoaXM7IH0gCgl0ZW1wbGF0ZSA8Y2xh
c3MgRGlzY3IsIGNsYXNzIFQwICAsIGNsYXNzIFQxICAgLCBjbGFzcyBUMiAgICwgY2xhc3MgVDMg
ICAsIGNsYXNzIFQ0ICAgICAgPiBpbmxpbmUgb2JqX291dHB1dCYgY2hvaWNlcyhjb25zdCBEaXNj
ciYgZGlzY3IsIGNvbnN0IFQwICYgdmFsMCAgLCBjb25zdCBUMSAmIHZhbDEgICAsIGNvbnN0IFQy
ICYgdmFsMiAgICwgY29uc3QgVDMgJiB2YWwzICAgLCBjb25zdCBUNCAmIHZhbDQgICAgICApIHsg
c2ltcGxlKGRpc2NyKTsgc3dpdGNoKGRpc2NyKSB7IGNhc2UgIDAgOglzaW1wbGUodmFsMCApOwli
cmVhazsgIGNhc2UgIDEgOglzaW1wbGUodmFsMSApOwlicmVhazsgICBjYXNlICAyIDoJc2ltcGxl
KHZhbDIgKTsJYnJlYWs7ICAgY2FzZSAgMyA6CXNpbXBsZSh2YWwzICk7CWJyZWFrOyAgIGNhc2Ug
IDQgOglzaW1wbGUodmFsNCApOwlicmVhazsgICAgICBkZWZhdWx0OiB0aHJvdyBzdGQ6OnJhbmdl
X2Vycm9yKCJYVEwgaW52YWxpZCBjaG9pY2UiKTsgfTsgcmV0dXJuICp0aGlzOyB9IAoKCXRlbXBs
YXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAgICAgID4gaW5saW5lIG9ial9v
dXRwdXQmIG9iamVjdChCYXNlKiYgcHRyLCBUMCAqIHRhZzAgICwgVDEgKiB0YWcxICAgICAgKSAg
eyBpZiAodHlwZWlkKCpwdHIpPT10eXBlaWQoVDApKSB7IHNpbXBsZSgwKTsgdGFnMD0oVDAqKXB0
cjsgcmVmZXJlbmNlKHRhZzApOyB9IGVsc2UgaWYgKHR5cGVpZCgqcHRyKT09dHlwZWlkKFQxICkp
IHsgc2ltcGxlKCAxICk7IHRhZzEgPShUMSAqKXB0cjsgcmVmZXJlbmNlKHRhZzEgKTsgfSAgICAg
IGVsc2UgdGhyb3cgc3RkOjpyYW5nZV9lcnJvcigiWFRMIGludmFsaWQgY2hvaWNlIik7IHJldHVy
biAqdGhpczsgfSAKCXRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAg
ICwgY2xhc3MgVDIgICAgICA+IGlubGluZSBvYmpfb3V0cHV0JiBvYmplY3QoQmFzZSomIHB0ciwg
VDAgKiB0YWcwICAsIFQxICogdGFnMSAgICwgVDIgKiB0YWcyICAgICAgKSAgeyBpZiAodHlwZWlk
KCpwdHIpPT10eXBlaWQoVDApKSB7IHNpbXBsZSgwKTsgdGFnMD0oVDAqKXB0cjsgcmVmZXJlbmNl
KHRhZzApOyB9IGVsc2UgaWYgKHR5cGVpZCgqcHRyKT09dHlwZWlkKFQxICkpIHsgc2ltcGxlKCAx
ICk7IHRhZzEgPShUMSAqKXB0cjsgcmVmZXJlbmNlKHRhZzEgKTsgfSAgIGVsc2UgaWYgKHR5cGVp
ZCgqcHRyKT09dHlwZWlkKFQyICkpIHsgc2ltcGxlKCAyICk7IHRhZzIgPShUMiAqKXB0cjsgcmVm
ZXJlbmNlKHRhZzIgKTsgfSAgICAgIGVsc2UgdGhyb3cgc3RkOjpyYW5nZV9lcnJvcigiWFRMIGlu
dmFsaWQgY2hvaWNlIik7IHJldHVybiAqdGhpczsgfSAKCXRlbXBsYXRlIDxjbGFzcyBCYXNlLCBj
bGFzcyBUMCAgLCBjbGFzcyBUMSAgICwgY2xhc3MgVDIgICAsIGNsYXNzIFQzICAgICAgPiBpbmxp
bmUgb2JqX291dHB1dCYgb2JqZWN0KEJhc2UqJiBwdHIsIFQwICogdGFnMCAgLCBUMSAqIHRhZzEg
ICAsIFQyICogdGFnMiAgICwgVDMgKiB0YWczICAgICAgKSAgeyBpZiAodHlwZWlkKCpwdHIpPT10
eXBlaWQoVDApKSB7IHNpbXBsZSgwKTsgdGFnMD0oVDAqKXB0cjsgcmVmZXJlbmNlKHRhZzApOyB9
IGVsc2UgaWYgKHR5cGVpZCgqcHRyKT09dHlwZWlkKFQxICkpIHsgc2ltcGxlKCAxICk7IHRhZzEg
PShUMSAqKXB0cjsgcmVmZXJlbmNlKHRhZzEgKTsgfSAgIGVsc2UgaWYgKHR5cGVpZCgqcHRyKT09
dHlwZWlkKFQyICkpIHsgc2ltcGxlKCAyICk7IHRhZzIgPShUMiAqKXB0cjsgcmVmZXJlbmNlKHRh
ZzIgKTsgfSAgIGVsc2UgaWYgKHR5cGVpZCgqcHRyKT09dHlwZWlkKFQzICkpIHsgc2ltcGxlKCAz
ICk7IHRhZzMgPShUMyAqKXB0cjsgcmVmZXJlbmNlKHRhZzMgKTsgfSAgICAgIGVsc2UgdGhyb3cg
c3RkOjpyYW5nZV9lcnJvcigiWFRMIGludmFsaWQgY2hvaWNlIik7IHJldHVybiAqdGhpczsgfSAK
CXRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUMCAgLCBjbGFzcyBUMSAgICwgY2xhc3MgVDIg
ICAsIGNsYXNzIFQzICAgLCBjbGFzcyBUNCAgICAgID4gaW5saW5lIG9ial9vdXRwdXQmIG9iamVj
dChCYXNlKiYgcHRyLCBUMCAqIHRhZzAgICwgVDEgKiB0YWcxICAgLCBUMiAqIHRhZzIgICAsIFQz
ICogdGFnMyAgICwgVDQgKiB0YWc0ICAgICAgKSAgeyBpZiAodHlwZWlkKCpwdHIpPT10eXBlaWQo
VDApKSB7IHNpbXBsZSgwKTsgdGFnMD0oVDAqKXB0cjsgcmVmZXJlbmNlKHRhZzApOyB9IGVsc2Ug
aWYgKHR5cGVpZCgqcHRyKT09dHlwZWlkKFQxICkpIHsgc2ltcGxlKCAxICk7IHRhZzEgPShUMSAq
KXB0cjsgcmVmZXJlbmNlKHRhZzEgKTsgfSAgIGVsc2UgaWYgKHR5cGVpZCgqcHRyKT09dHlwZWlk
KFQyICkpIHsgc2ltcGxlKCAyICk7IHRhZzIgPShUMiAqKXB0cjsgcmVmZXJlbmNlKHRhZzIgKTsg
fSAgIGVsc2UgaWYgKHR5cGVpZCgqcHRyKT09dHlwZWlkKFQzICkpIHsgc2ltcGxlKCAzICk7IHRh
ZzMgPShUMyAqKXB0cjsgcmVmZXJlbmNlKHRhZzMgKTsgfSAgIGVsc2UgaWYgKHR5cGVpZCgqcHRy
KT09dHlwZWlkKFQ0ICkpIHsgc2ltcGxlKCA0ICk7IHRhZzQgPShUNCAqKXB0cjsgcmVmZXJlbmNl
KHRhZzQgKTsgfSAgICAgIGVsc2UgdGhyb3cgc3RkOjpyYW5nZV9lcnJvcigiWFRMIGludmFsaWQg
Y2hvaWNlIik7IHJldHVybiAqdGhpczsgfSAKCgoKCn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgU3Ry
ZWFtLCBjbGFzcyBUPgppbmxpbmUgdm9pZCBjb21wb3NpdGUoU3RyZWFtJiBzdHJlYW0sIFQmIGRh
dGEpIHsKCWRhdGEuY29tcG9zaXRlKHN0cmVhbSk7Cn0KCmNsYXNzIG5vX3JlZnMgewogcHVibGlj
OgogCXRlbXBsYXRlIDxjbGFzcyBGb3JtYXQsIGNsYXNzIFQ+Cgl2b2lkIHJlZmVyZW5jZShvYmpf
aW5wdXQ8Rm9ybWF0PiYgc3RyZWFtLCBUKiYgZGF0YSkgewoJCWRlbGV0ZSBkYXRhOwoJCWRhdGE9
bmV3IFQ7CgkJc3RyZWFtLiBzaW1wbGUoICpkYXRhICkgOwoJfQoKIAl0ZW1wbGF0ZSA8Y2xhc3Mg
Rm9ybWF0LCBjbGFzcyBUPgoJdm9pZCByZWZlcmVuY2Uob2JqX291dHB1dDxGb3JtYXQ+JiBzdHJl
YW0sIFQgY29uc3QqIGRhdGEpIHsKCQlzdHJlYW0uIHNpbXBsZSggKmRhdGEgKSA7Cgl9Cn07Cgog
CgpjbGFzcyBtZW1fYnVmZmVyIHsKIHByaXZhdGU6CiAJY2hhciAqYnVmZmVyLCAqcHRyLCAqbGlt
OwoKIHB1YmxpYzoKCWNsYXNzIGJ1ZmZlcl9vdmVyZmxvd19lcnJvcjogcHVibGljIHN0ZDo6b3Zl
cmZsb3dfZXJyb3IgewoJIHB1YmxpYzoKCSAJaW50IGJ5dGVzX2xlZnQ7CgkJaW50IGJ5dGVzX25l
ZWRlZDsKCgkJYnVmZmVyX292ZXJmbG93X2Vycm9yKGludCBsZWZ0LCBpbnQgbmVlZGVkKToKCQlz
dGQ6Om92ZXJmbG93X2Vycm9yKCJYVEwgbWVtX2J1ZmZlciBvdmVyZmxvdyIpLAoJCQlieXRlc19s
ZWZ0KGxlZnQpLGJ5dGVzX25lZWRlZChuZWVkZWQpIHt9Cgl9OwoKIAltZW1fYnVmZmVyKHZvaWQg
KmJ1ZiwgaW50IHNpemUpOgoJCWJ1ZmZlcigoY2hhciopYnVmKSxwdHIoKGNoYXIqKWJ1ZiksbGlt
KCgoY2hhciopYnVmKStzaXplKSB7fQoKCWlubGluZSB2b2lkIHJlYWQoY2hhciogcHRyLCBpbnQg
c2l6ZSkKCQl7c3RkOjptZW1jcHkocHRyLCByZXF1aXJlKHNpemUpLCBzaXplKTt9CglpbmxpbmUg
dm9pZCB3cml0ZShjaGFyIGNvbnN0KiBwdHIsIGludCBzaXplKQoJCXtzdGQ6Om1lbWNweShkZXNp
cmUoc2l6ZSksIHB0ciwgc2l6ZSk7fQoKCWlubGluZSB2b2lkKiByZXF1aXJlKGludCBzaXplKSB7
CgkJY2hhciogYXV4PXB0cjsKCQlpZiAoKHB0cis9c2l6ZSk+bGltKQoJCQl0aHJvdyBidWZmZXJf
b3ZlcmZsb3dfZXJyb3IobGltLWF1eCxzaXplKTsKCQlyZXR1cm4gYXV4OwoJfQoJaW5saW5lIHZv
aWQqIGRlc2lyZShpbnQgc2l6ZSkKCQl7cmV0dXJuIHJlcXVpcmUoc2l6ZSk7fQoJaW5saW5lIHZv
aWQgZmx1c2goKQoJCXt9CgoJaW5saW5lIHZvaWQgdW5yZXF1aXJlKGludCBuKQoJCXtwdHItPW47
fQoJaW5saW5lIHZvaWQgdW5kZXNpcmUoaW50IG4pCgkJe3VucmVxdWlyZShuKTt9CglpbmxpbmUg
dm9pZCByZXdpbmQoKQoJCXtwdHI9YnVmZmVyO30KCWlubGluZSBpbnQgc2l6ZSgpCgkJe3JldHVy
biBwdHItYnVmZmVyO30KCWlubGluZSBjaGFyKiBkYXRhKCkKCQl7cmV0dXJuIGJ1ZmZlcjt9CgoJ
dGVtcGxhdGUgPGNsYXNzIEZvcm1hdD4KCWlubGluZSB2b2lkIGNvbXBvc2l0ZShvYmpfaW5wdXQ8
Rm9ybWF0PiYgc3RyZWFtKSB7CgkJaW50IHNpemUsIGlkeDsKCQlzdHJlYW0uYXJyYXkoYnVmZmVy
LCBzaXplKS5zaW1wbGUoaWR4KTsKCQlwdHI9YnVmZmVyK2lkeDsKCQlsaW09YnVmZmVyK3NpemU7
Cgl9CgoJdGVtcGxhdGUgPGNsYXNzIEZvcm1hdD4KCWlubGluZSB2b2lkIGNvbXBvc2l0ZShvYmpf
b3V0cHV0PEZvcm1hdD4mIHN0cmVhbSkgewoJCXN0cmVhbS5hcnJheShidWZmZXIsIGxpbS1idWZm
ZXIpLnNpbXBsZSgoaW50KXB0ci1idWZmZXIpOwoJfQoKfTsKCgoKIyAxICIvb3B0L3Nmdy9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy91dGlsaXR5IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9v
cHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9wYWlyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIg
ewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7Cgog
IF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwogIHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25k
KF9UMigpKSB7fQogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0
KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+
CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNl
Y29uZChfX3Auc2Vjb25kKSB7fQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYm
IF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsgCn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsgCiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJz
dCB8fCAKICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwg
X195LnNlY29uZCk7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBw
YWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoY29uc3QgX1QxJiBfX3gsIGNvbnN0IF9UMiYgX195KQp7
CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKIAoKCgogCiAKIAojIDMyICIv
b3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy91dGlsaXR5IiAyIDMKCgoKCiAKIAogCiMgNTY0ICIuLi8uLi9pbmNs
dWRlL3h0bC9vYmppby5oIiAyCgojIDEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs
Z29iYXNlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKIyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX190cnVl
X3R5cGUgewp9OwoKc3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IAogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlz
X2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwogICAgICAgICAgICAgICAgICAgIAoKCgoKCiAg
ICAKCgoKCgoKCgogCgogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CgoKIAogCiAKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlw
ZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5
cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9f
dHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90
eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAq
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCiMgMjk1ICIvb3B0L3Nm
dy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAzCgoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4g
c3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07
CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxj
aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFy
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gIHN0
cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVk
ZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl
Z2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWdu
ZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgoKCiAKIAogCiMgNDUgIi9v
cHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKCiMgMSAiL29wdC9zZncvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2luY2x1ZGUvbGltaXRzLmgiIDEg
MyA0CiAKCgogCgoKCgoKIAojIDEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMgNAogCgoKCgoKIyAxICIvb3B0
L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvaW5jbHVkZS9saW1p
dHMuaCIgMSAzIDQKIAoKCiAKCiMgMTE0ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMyA0CgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAxIDMgNAogCgoKCgogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJA
KCMpbGltaXRzLmgJMS41MQk5OS8xMC8wOCBTTUkiCQoKCgojIDEgIi91c3IvaW5jbHVkZS9pc28v
bGltaXRzX2lzby5oIiAxIDMgNAogCgoKCgogCiAKCiAKIAogCgogCgoKCgoKCgoKCgoKCgoKI3By
YWdtYSBpZGVudAkiQCgjKWxpbWl0c19pc28uaAkxLjEJOTkvMDgvMDkgU01JIiAKCgpleHRlcm4g
IkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCQkJCSAKCgoKCgp9
CgoKCiMgMjAgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKCgogCgoKCgoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy9pbnRfbGltaXRzLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRl
bnQJIkAoIylpbnRfbGltaXRzLmgJMS42CTk5LzA4LzA2IFNNSSIKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoKIyAzMiAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMgNAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCQkJCSAKCgoKCgoKCgoKCgoK
CgoKCgkJCQkJCSAKCgkJCQkJCSAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBsb25nCWNsb2NrX3Q7CgoKZXh0ZXJuIGxvbmcgX3N5
c2NvbmYoaW50KTsJIAoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKIyAyNjUgIi91c3IvaW5jbHVkZS9s
aW1pdHMuaCIgMyA0CgoKCn0KCgoKIyAxMTcgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoKCgoKIyA3ICIvb3B0
L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvaW5jbHVkZS9zeXNs
aW1pdHMuaCIgMiAzIDQKCgojIDExICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKCgoKCgogCgoKCiAKCgoKIAoK
CgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgogCgogCgoKCgogCgoKCiAKCgoKCgoKCgogCgoK
CiAKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKIyA0OSAi
L29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL29wdC9zZncvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MyA0CiMgMzQyICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDUxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCgojIDEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzIuOTUuMi9pbmNsdWRlL25ldy5oIiAxIDMgNAogCgoKCgojIDEgIi9vcHQvc2Z3L2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi9pbmNsdWRlL25ldyIgMSAzIDQKIAog
CgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAi
L29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMgNAoKIyA4ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8yLjk1LjIvaW5jbHVkZS9uZXciIDIgMyA0CgoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh
Y2Ugc3RkIHsKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgcHVibGlj
OgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiAi
YmFkX2FsbG9jIjsgfQogIH07CgogIHN0cnVjdCBub3Rocm93X3Qge307CiAgZXh0ZXJuIGNvbnN0
IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5l
d19oYW5kbGVyIHNldF9uZXdfaGFuZGxlciAobmV3X2hhbmRsZXIpOwoKfSAgCgogCnZvaWQgKm9w
ZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRv
ciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRl
bGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkICopIHRo
cm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJv
d190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKiwgY29uc3Qgc3RkOjpu
b3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkICosIGNvbnN0
IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCiAKaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhz
aXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lk
ICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBs
YWNlOyB9Cn0gIAoKCiMgNiAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMi45NS4yL2luY2x1ZGUvbmV3LmgiIDIgMyA0CgoKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsK
dXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyA1MiAiL29wdC9zZncvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwoKCgoKCgoKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3
YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKSB7CiAgX1RwIF9f
dG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVy
X3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7CiAgX19pdGVyX3N3
YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlwZSggX19hICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBfVHAgX190bXAgPSBf
X2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgogCiAKCgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm
IF9fYikgewogIHJldHVybiBfX2IgPCBfX2EgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBf
X2IpIHsKICByZXR1cm4gIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYg
X19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChf
X2IsIF9fYSkgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i
LCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9f
YTsKfQoKIAogCgogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19j
b3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywg
X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f
biA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsK
ICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly
c3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg
KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2gg
ewogIHN0YXRpYyBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgIHJldHVybiBf
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdGVnb3J5KCksIChfRGlzdGFuY2Uq
KSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNo
PF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAq
IF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4g
X19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBf
X3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV90cml2aWFs
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfVHA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9U
cml2aWFsOwogIHJldHVybiBfX2NvcHlfZGlzcGF0Y2g8X0lucHV0SXRlciwgX091dHB1dEl0ZXIs
IF9Ucml2aWFsPgogICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgojIDIx
MyAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLCAKICAg
ICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5
X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQog
ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7
IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19j
b3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBfQ2F0
OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+
OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVj
dGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3Vs
dCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7
CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0
LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9f
Zmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkg
KiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAq
LCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj
b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlfYmFj
a3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xh
c3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAg
ICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJp
dmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2
aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoK
IyAzMDMgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCgoKIAogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWly
PF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsK
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsK
ICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVz
dWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0
cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0
ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3Qg
PSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4o
X19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBh
aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwg
X1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24o
X19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0
cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1
dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19y
ZXN1bHQpOwp9CgogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+
CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
c3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19uID4g
MDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19m
aXJzdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEg
X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19m
aXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9
CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJz
dDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlz
bWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBw
YWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJvb2wg
ZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAqX19m
aXJzdDIpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0
ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAq
X19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCiAKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGxleGlj
b2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAg
IGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19m
aXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYgKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKF9f
Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0
dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKaW5saW5l
IGJvb2wgCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmly
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewog
IGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90
IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1j
bXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19y
ZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJv
b2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNo
YXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFw
aGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
bGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYg
KCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0
MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2Zp
cnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmly
c3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGlu
ZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xh
c3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2Zp
cnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBt
aW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IAog
ICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVuMSA8
IF9fbGVuMiA/IC0xIDogMSkpOwp9CgppbmxpbmUgaW50IApfX2xleGljb2dyYXBoaWNhbF9jb21w
YXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hh
ciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp
Z25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MikKewogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9f
bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKIAoKCgogCiAKIAojIDMwICIvb3B0L3Nmdy9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy92ZWN0b3IiIDIgMwoKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0cnVj
dC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiAKIAoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewog
IF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAgbmV3
IChfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQg
Y29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCnsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYqX19m
aXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBf
X2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90
eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Rw
Pjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRlc3Ryb3ko
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewogIF9f
ZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCmlu
bGluZSB2b2lkIGRlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBkZXN0cm95KHdj
aGFyX3QqLCB3Y2hhcl90Kikge30KCiAKCgoKIAogCiAKIyAzMiAiL29wdC9zZncvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
dmVjdG9yIiAyIDMKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKIAoKIAogCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0
ZXIgCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICByZXR1cm4gY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSAg
ewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAg
ICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBj
YXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4K
aW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKICB1bmlu
aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgcmV0dXJuIF9fdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19yZXN1bHQgKSApOwp9CgppbmxpbmUgY2hh
ciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBfX3Jlc3VsdCkgewog
IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogIHJldHVybiBf
X3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdjaGFyX3QqIAp1bmluaXRp
YWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0
LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVz
dWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJl
dHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0
SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAg
X0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fY291
bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIpIAogICAgICBjb25zdHJ1Y3Qo
JipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ
dGVyPihfX2ZpcnN0LCBfX2N1cik7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3Vs
dCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21B
Y2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsg
X19jb3VudDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigK
ICAgICAgICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1
dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291
bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0Zv
cndhcmRJdGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewog
IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9f
Zmlyc3QgKSApOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
PgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkK
ewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9f
Y3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAg
fQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5s
aW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46
OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgICAgICAgICAgICAgICAgCn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXpl
ZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3QsIF9fbGFzdCwg
X194LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUp
CnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5p
bml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsK
ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewogICAgZm9yICggOyBfX24g
PiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICBy
ZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0LCBfX2N1cikg
OyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFs
aXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBf
X3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19Q
T0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2Zp
cnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciAKdW5pbml0aWFs
aXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBf
X3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwg
X192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQg
PSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkg
IHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlk
KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0aHJvdzsg
fSA7Cn0KCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2ZpbGxf
Y29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXpl
ZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgIHsKICAgIHJldHVybiB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyAg
ZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0gOwp9CgogCiAKIAp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2
b2lkCl9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0
SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2Zp
cnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3gpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgdHJ5ICB7CiAgICB1bmluaXRpYWxpemVk
X2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3ko
X19maXJzdDIsIF9fbWlkMikgOyB0aHJvdzsgfSA7Cn0KCiAKCgoKIAogCiAKIyAzMyAiL29wdC9z
ZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rv
ci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogIAoKCgoKCgogCiAK
IAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9J
c1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBf
TV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSAKICB7fQogIApw
cm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7CiAgX1RwKiBfTV9z
dGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICBfVHAq
IF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5h
bGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u
KQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsg
fQp9OwoKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9W
ZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgw
KSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJvdGVjdGVkOgogIF9UcCogX01fc3Rh
cnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9B
bGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9B
bGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNl
CiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAgX01fc3RhcnQgPSBf
TV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVh
bGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7IH0KfTsgICAg
CgojIDE1MCAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVHAgPiAgPgpjbGFzcyB2ZWN0b3Ig
OiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiAKewpwcml2YXRlOgogIHR5cGVk
ZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29u
c3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIGl0ZXJh
dG9yOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25z
dF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9y
X3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCgogIHR5cGVkZWYgcmV2ZXJz
ZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgpw
cm90ZWN0ZWQ6CgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01f
ZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zp
bmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7CgoKcHJvdGVjdGVkOgogIHZv
aWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAg
dm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgogIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01f
ZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNo
OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAog
ICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQog
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QKICAg
IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9z
aXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1RwKTsgfQog
IHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoX01fZW5k
X29mX3N0b3JhZ2UgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1
cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg
X19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJh
dG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQoK
ICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90
eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpIAogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5p
bml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQg
dmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkK
ICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1Rw
KCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIAogICAgOiBf
QmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBfTV9maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CgoK
ICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvcihfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgewogICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50
ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgp
KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVf
YXV4KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpIHsKICAgIF9N
X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3Rh
cnQgKyBfX247IAogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQs
IF9fbiwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
dm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAg
IF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5
KCBfX2ZpcnN0ICkgKTsKICB9CgoKCgoKCgoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0
LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7
CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRf
c2l6ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29w
eShfX24sIF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9m
aW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190
bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u
OwogICAgfQogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19u
LCBjb25zdCBfVHAmIF9fdmFsKTsKCgogIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1
ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBf
TV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJz
dCApICk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz
aWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZyk7IAoKCgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpi
ZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2lu
KCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0
X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgogIHZvaWQg
cHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
Zl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01f
ZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwog
IH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0
b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwog
ICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9pZCBzd2Fw
KHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgIDo6c3dhcChfTV9zdGFydCwgX194Ll9N
X3N0YXJ0KTsKICAgICA6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICA6OnN3
YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVy
YXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNp
emVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0g
X01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1
Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAg
ICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBf
X247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBzaXpl
X3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9N
X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29uc3RydWN0
KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p
bnNlcnRfYXV4KF9fcG9zaXRpb24pOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKICAg
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdy
YWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xh
c3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lk
IF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdl
ciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgaW5z
ZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRv
ciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxz
ZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQoKCgoKCiAgdm9pZCBpbnNlcnQgKGl0
ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZvaWQgcG9w
X2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICB9CiAg
aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24g
KyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBfTV9maW5pc2gsIF9fcG9z
aXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1
cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRl
cmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9fbGFzdCwgX01fZmluaXNo
LCBfX2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNoID0g
X01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoK
ICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAg
IGlmIChfX25ld19zaXplIDwgc2l6ZSgpKSAKICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3Np
emUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6
ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyByZXNp
emUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwg
ZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICBpdGVyYXRvciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQp7CiAgICBpdGVyYXRvciBfX3Jlc3Vs
dCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CiAgICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbikgOyB0aHJvdzsg
fSA7CiAgfQojIDQ0MCAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgIAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg
fQoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5n
ZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQog
IHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0
b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZyk7CgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBf
X3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5i
ZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCAKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9f
eC5iZWdpbigpLCBfX3guZW5kKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+JiAKdmVjdG9yPF9UcCxfQWxs
b2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZf
X3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAg
ICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2Fs
bG9jYXRlX2FuZF9jb3B5KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIGRl
c3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQs
IF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwog
ICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxz
ZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9feC5i
ZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpOwogICAgICBkZXN0cm95KF9faSwgX01fZmluaXNo
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSAr
IHNpemUoKSwgX01fc3RhcnQpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkg
KyBzaXplKCksIF9feC5lbmQoKSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9N
X3N0YXJ0ICsgX194bGVuOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojphc3NpZ24oc2l6ZV90
IF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpIHsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkg
ewogICAgdmVjdG9yPF9UcCwgX0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9y
KCkpOwogICAgX190bXAuc3dhcCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkg
ewogICAgZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0
aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxz
ZQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cj4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwg
KytfX2ZpcnN0KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmly
c3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3Np
Z25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6
ZV90eXBlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKCiAg
aWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewogICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0
ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KTsKICAgIGRlc3Ryb3koX01fc3RhcnQs
IF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+
PSBfX2xlbikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9NX3N0YXJ0KTsKICAgIGRlc3Ryb3koX19uZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAg
X01fZmluaXNoID0gX19uZXdfZmluaXNoOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBf
X21pZCA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2Zp
cnN0LCBfX21pZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0g
X01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNo
IC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5
X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAg
Kl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUg
X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3Np
emUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0g
X01fYWxsb2NhdGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3Rh
cnQ7CiAgICB0cnkgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9N
X3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19m
aW5pc2gsIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwog
ICAgfQogICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCAKICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsg
dGhyb3c7IH0gOwogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRl
KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0g
X19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgo
aXRlcmF0b3IgX19wb3NpdGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh
Z2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytf
TV9maW5pc2g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9N
X2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBj
b25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBf
X2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9y
IF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmlu
aXNoID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0
aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNv
bnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdf
ZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19u
ZXdfZmluaXNoKSwgCiAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs
X19sZW4pKSA7IHRocm93OyB9IDsKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01f
ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBf
TV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Omluc2Vy
dChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAgIGlm
IChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAg
ICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVy
ID0gX01fZmluaXNoIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0g
X01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAg
ICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
X19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlv
biwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwg
X194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2Zpbmlz
aCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bv
c2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOyAgICAgICAgCiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19u
KTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAg
IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24s
IF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxf
bihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAg
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNo
KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3
X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs
X19sZW4pKSA7IHRocm93OyB9IDsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsK
ICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy
dCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3
X2ZpbmlzaDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwog
ICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFu
Z2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3Qp
OwogICAgKytfX3BvczsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxv
Yz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewog
IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9z
dG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxl
bXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9m
aW5pc2ggPSBfTV9maW5pc2g7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAg
ICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5p
c2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bv
c2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg
IF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQs
IF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0
LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwog
ICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2Zp
bmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgY29weShf
X2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAg
ICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBpdGVy
YXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19u
ZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAgIHRyeSAgewogICAgICAgIF9fbmV3X2Zpbmlz
aCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQp
OwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAg
IH0KICAgICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCAKICAgICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkg
OyB0aHJvdzsgfSA7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9N
X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg
ICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7
CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9
Cn0KCiMgODEwICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1
LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKCgoKCgoKCiAgCgoK
CiAKIAogCiMgMzQgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi9vcHQvc2Z3
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCiAgCgpzdGF0aWMgY29uc3QgaW50IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVu
c2lnbmVkIGludCkpOwoKCgoKCgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGlu
dCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZSh1bnNpZ25l
ZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkgCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhf
X3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkg
e30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykp
OyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194
KSAgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgICAgICAqX01fcCAmPSB+X01fbWFzazsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0
X3JlZmVyZW5jZSYgX194KSAKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVy
biBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0
X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2wo
X194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUg
dm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9v
bCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0
X2l0ZXJhdG9yIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90
PiB7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSAgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9y
ZWZlcmVuY2UqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgaXRlcmF0b3I7Cgog
IHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZvaWQgYnVt
cF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBf
TV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9kb3duKCkg
ewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJ
VCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9NX3Ao
MCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVu
c2lnbmVkIGludCBfX3kpIAogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVm
ZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBf
TV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVy
YXRvciBfX3RtcCA9ICp0aGlzOwogICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0K
ICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAg
PSAqdGhpczsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRv
ciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUg
X19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAg
X19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNl
dCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0g
ZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAg
ICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9y
KyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlz
OwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZl
cmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBy
ZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJh
dG9yIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9w
KSArIF9NX29mZnNldCAtIF9feC5fTV9vZmZzZXQ7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltd
KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9CiAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09
IF9feC5fTV9wICYmIF9NX29mZnNldCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194
Ll9NX3AgfHwgX01fb2Zmc2V0ICE9IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8
KGl0ZXJhdG9yIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01f
cCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsKICB9Cn07CgpzdHJ1
Y3QgX0JpdF9jb25zdF9pdGVyYXRvcgogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8
Ym9vbCwgcHRyZGlmZl90Pgp7CiAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7CiAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgdHlw
ZWRlZiBjb25zdCBib29sKiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9p
dGVyYXRvciAgY29uc3RfaXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25l
ZCBpbnQgX01fb2Zmc2V0OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9
PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAg
ICB9CiAgfQogIHZvaWQgYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsK
ICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9
CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9C
aXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAog
ICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihj
b25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIAogICAgOiBfTV9wKF9feC5fTV9wKSwgX01fb2Zmc2V0
KF9feC5fTV9vZmZzZXQpIHt9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsK
ICAgIHJldHVybiBfQml0X3JlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBj
b25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0
ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAg
fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBj
b25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4g
X190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBf
X2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9w
ICs9IF9fbiAvIF9fV09SRF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYg
KF9fbiA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JE
X0JJVDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25l
ZCBpbnQpIF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJh
dG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBf
X2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4g
X190bXAgKz0gX19pOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90
eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJl
dHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3Rf
aXRlcmF0b3IgX194KSBjb25zdCB7CiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194
Ll9NX3ApICsgX01fb2Zmc2V0IC0gX194Ll9NX29mZnNldDsKICB9CiAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyAKICAgIHJldHVybiAqKCp0aGlzICsg
X19pKTsgCiAgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9N
X29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3gu
X01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdF9pdGVyYXRvciBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01f
b2Zmc2V0IDwgX194Ll9NX29mZnNldCk7CiAgfQp9OwoKIAogCgoKCiAKdGVtcGxhdGUgPGNsYXNz
IF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2Ug
ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9
CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDog
X01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9v
Zl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Mo
c2l6ZV90IF9fbikgCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19u
ICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkg
ewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2Nh
dGUoX01fc3RhcnQuX01fcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9ICAKCiAgdHlwZW5hbWUgX0FsbG9j
X3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZSAKICAgICAg
ICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9p
dGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsK
CiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8
X0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJh
aXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9y
X3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFs
bG9jYXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgw
KSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25l
ZCBpbnQsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAg
ICAgICAgICAKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSAKICAgIHsg
cmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3Ap
CiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAg
fSAgCgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7
CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsgIAoKdGVtcGxhdGUgPGNsYXNz
IF9BbGxvYz4KY2xhc3MgX0J2ZWN0b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jh
c2U8X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxi
b29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9j
X2Jhc2U8X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6
CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7
CgogIF9CdmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2Ep
IHt9CiAgfl9CdmVjdG9yX2Jhc2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCiMg
MzQ4ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzCgoKIAogCiAKIAoKCgoKCgoK
CgoKICAgICAgICAKCiAgICAgICAgCnRlbXBsYXRlPGNsYXNzIF9BbGxvYz4gY2xhc3MgdmVjdG9y
PGJvb2wsX0FsbG9jPgogIDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgoKCgoKewoKICB0
eXBlZGVmIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPiBfQmFzZTsKCgoKcHVibGljOgogIHR5cGVkZWYg
Ym9vbCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7IAogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJl
bmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVy
ZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogIHR5
cGVkZWYgX0JpdF9pdGVyYXRvciAgICAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9C
aXRfY29uc3RfaXRlcmF0b3IgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CgoKICB0eXBlZGVmIHJl
dmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoK
CgoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw
ZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6
OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgoKCgoKCgoKCnByb3RlY3RlZDoKICB2b2lk
IF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgdW5zaWduZWQgaW50KiBfX3EgPSBf
TV9iaXRfYWxsb2MoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9f
V09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDAp
OwogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CiAg
dm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICBp
ZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29weV9iYWNr
d2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAqX19wb3Np
dGlvbiA9IF9feDsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgIHVu
c2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19p
ID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgKl9f
aSsrID0gX194OwogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kp
OwogICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsg
KF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRl
cmF0b3IoX19xLCAwKTsKICAgIH0KICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKSB7CiAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9maW5pc2ggPSBp
dGVyYXRvcigpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSAKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9y
YW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6
ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBf
TV9pbml0aWFsaXplKF9fbik7CiAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwog
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3Jh
bmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkgewogICAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICArK19f
cG9zOwogICAgfQogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9p
ZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBpZiAoX19m
aXJzdCAhPSBfX2xhc3QpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNl
KF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0g
X19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNo
ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBf
X3Bvc2l0aW9uKTsKICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4
KHNpemUoKSwgX19uKTsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhf
X2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBp
dGVyYXRvcihfX3EsIDApKTsKICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19p
KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAg
ICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf
X2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRl
cmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQogIH0gICAgICAKCgoKcHVibGljOgogIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01f
ZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNo
OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv
cihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgCiAg
ICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyAKICB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkg
Y29uc3QgewogICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3Rv
cmFnZSwgMCkgLSBiZWdpbigpKTsKICB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJl
Z2luKCkgPT0gZW5kKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7
CiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogIH0KICBjb25z
dF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4g
KihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogIH0KCiAgZXhwbGljaXQgdmVjdG9y
IChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jh
c2UoX19hKSB7fQoKICB2ZWN0b3IgKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAg
ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6
IF9CYXNlKF9fYSkKICB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0
Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICB9CgogIGV4cGxp
Y2l0IHZlY3RvciAoc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkK
ICB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2Vu
ZF9vZl9zdG9yYWdlLCAwKTsKICB9CgogIHZlY3RvciAoY29uc3QgdmVjdG9yICYgX194KSA6IF9C
YXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7
CiAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICB9CgoKICAgCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvciAoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICB9CiAgICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBf
TV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVf
dHlwZSkgewogICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBf
TV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICB9CiAgICAKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmly
c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDU4NyAi
L29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKCiAgfnZlY3RvciAoKSB7IH0KCiAg
dmVjdG9yICYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciAmIF9feCkgewogICAgaWYgKCZfX3ggPT0g
dGhpcykgcmV0dXJuICp0aGlzOwogICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAg
ICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAg
IH0KICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICBfTV9maW5p
c2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgcmV0dXJuICp0
aGlzOwogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29s
IF9feCkgewogICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As
IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgICBpbnNlcnQoZW5kKCksIF9f
biAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsg
X19uLCBlbmQoKSk7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9feCA/IH4wIDogMCk7CiAgICB9CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0
b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3Qs
IF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgog
IHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9f
dHJ1ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsg
X01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmly
c3QgKSApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fz
c2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGl0ZXJhdG9yIF9f
Y3VyID0gYmVnaW4oKTsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0g
ZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICBlbHNl
CiAgICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQog
ICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgIGVs
c2UgewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5j
ZShfX21pZCwgc2l6ZSgpKTsKICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAg
ICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7CiAgICB9CiAgfSAgICAKCgoKICB2b2lk
IHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAg
ICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZmluaXNo
ID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIF9NX2RlYWxs
b2NhdGUoKTsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9lbmRf
b2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAg
IH0KICB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3Rf
cmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2Ug
YmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkg
Y29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gp
IHsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgKl9N
X2ZpbmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gp
OwogIH0KICB2b2lkIHN3YXAodmVjdG9yICYgX194KSB7CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBf
X3guX01fc3RhcnQpOwogICAgIDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAg
IDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAg
aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7
CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAo
X01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQo
KSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4
KF9fcG9zaXRpb24sIF9feCk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgoKICAgCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sCiAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0
ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bv
c2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvcywg
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190
cnVlX3R5cGUpIHsKICAgIGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoYm9vbCkgX194
KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2Vy
dF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDc2
MSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKICAKICB2b2lkIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgaWYgKF9f
biA9PSAwKSByZXR1cm47CiAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAg
ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5j
ZV90eXBlKF9fbikpOwogICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJl
bmNlX3R5cGUoX19uKSwgX194KTsKICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShf
X24pOwogICAgfQogICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1h
eChzaXplKCksIF9fbik7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9f
bGVuKTsKICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVy
YXRvcihfX3EsIDApKTsKICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICBfTV9maW5p
c2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7
CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAo
X19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVy
YXRvcihfX3EsIDApOwogICAgfQogIH0KCiAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7
IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3Np
dGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bv
c2l0aW9uKTsKICAgICAgLS1fTV9maW5pc2g7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAg
aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBf
TV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmly
c3Q7CiAgfQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJv
b2woKSkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpIAogICAgICBlcmFzZShiZWdpbigp
ICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGlu
c2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCBjbGVhcigp
IHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cn07CgoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFs
bG9jPiBiaXRfdmVjdG9yOwoKIyA4MjIgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgi
IDMKCgoKCgoKCgoKCiAgCgoKCiAKIAogCiMgMzUgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIg
MiAzCgoKCgogCiAKIAojIDU2NSAiLi4vLi4vaW5jbHVkZS94dGwvb2JqaW8uaCIgMgoKIyAxICIv
b3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9saXN0IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2xpc3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
X0xpc3Rfbm9kZSB7CiAgdHlwZWRlZiB2b2lkKiBfVm9pZF9wb2ludGVyOwogIF9Wb2lkX3BvaW50
ZXIgX01fbmV4dDsKICBfVm9pZF9wb2ludGVyIF9NX3ByZXY7CiAgX1RwIF9NX2RhdGE7Cn07Cgp0
ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfTGlzdF9p
dGVyYXRvciB7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiAgICAgICAg
ICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNv
bnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9S
ZWYsX1B0cj4gICAgICAgICAgICAgX1NlbGY7CgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYg
X0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIF9Ob2RlKiBfTV9ub2RlOwoKICBfTGlz
dF9pdGVyYXRvcihfTm9kZSogX194KSA6IF9NX25vZGUoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9y
KCkge30KICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KSA6IF9NX25vZGUoX194
Ll9NX25vZGUpIHt9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfU2VsZiYgX194KSBjb25zdCB7
IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7IH0KICBy
ZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKCpfTV9ub2RlKS5fTV9kYXRhOyB9
CgoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg
fQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7IAogICAgX01fbm9kZSA9IChfTm9kZSopKF9NX25v
ZGUtPl9NX25leHQpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGlu
dCkgeyAKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArKyp0aGlzOwogICAgcmV0dXJuIF9f
dG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsgCiAgICBfTV9ub2RlID0gKF9Ob2RlKiko
X01fbm9kZS0+X01fcHJldik7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9y
LS0oaW50KSB7IAogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tKnRoaXM7CiAgICByZXR1
cm4gX190bXA7CiAgfQp9OwoKIyAxMjAgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9saXN0LmgiIDMK
CgoKIAogCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
LCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5
cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0
b3IoKSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAgX0xpc3RfYWxsb2NfYmFz
ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9Ob2RlX2FsbG9jYXRvcihfX2EpIHt9Cgpw
cm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpCiAgIHsgcmV0dXJuIF9O
b2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX0xpc3Rfbm9k
ZTxfVHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0K
CnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0Fs
bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yOwogIF9M
aXN0X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvY2F0b3I+CmNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl
PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSB7fQoKcHJvdGVjdGVk
OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxv
Y2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgX0xpc3Rfbm9kZTxf
VHA+KiBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQog
IHZvaWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRl
YWxsb2NhdGUoX19wLCAxKTsgfQoKcHJvdGVjdGVkOgogIF9MaXN0X25vZGU8X1RwPiogX01fbm9k
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX0xpc3RfYmFz
ZSAKICA6IHB1YmxpYyBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVz
cz4KewpwdWJsaWM6CiAgdHlwZWRlZiBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5z
dGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7IAogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFs
bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9ub2RlID0gX01fZ2V0X25vZGUoKTsK
ICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgX01fbm9kZS0+X01fcHJldiA9IF9N
X25vZGU7CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xlYXIoKTsKICAgIF9NX3B1dF9ub2Rl
KF9NX25vZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoKIyAyMjkgIi9vcHQvc2Z3L2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9saXN0LmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZv
aWQgCl9MaXN0X2Jhc2U8X1RwLF9BbGxvYz46OmNsZWFyKCkgCnsKICBfTGlzdF9ub2RlPF9UcD4q
IF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAgd2hpbGUgKF9f
Y3VyICE9IF9NX25vZGUpIHsKICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1cjsKICAg
IF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAgZGVzdHJveSgm
X190bXAtPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX190bXApOwogIH0KICBfTV9ub2RlLT5f
TV9uZXh0ID0gX01fbm9kZTsKICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVHAgPiAgPgpjbGFzcyBs
aXN0IDogcHJvdGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IHsKICB0eXBlZGVmIF9MaXN0
X2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB2b2lkKiBfVm9p
ZF9wb2ludGVyOwoKcHVibGljOiAgICAgIAogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u
c3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNv
bnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25vZGU8X1Rw
PiBfTm9kZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVkZWYgX0xp
c3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gICAgICAgICAgICAgaXRlcmF0b3I7CiAgdHlwZWRl
ZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRv
cjsKCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAg
IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgoKCnByb3RlY3RlZDoKCiAgdXNpbmcgX0Jhc2U6Ol9N
X25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9nZXRf
bm9kZTsKCgpwcm90ZWN0ZWQ6CiAgX05vZGUqIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194
KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgdHJ5ICB7CiAgICAgIGNv
bnN0cnVjdCgmX19wLT5fTV9kYXRhLCBfX3gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7ICBfTV9w
dXRfbm9kZShfX3ApIDsgdGhyb3c7IH0gOwogICAgcmV0dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBf
TV9jcmVhdGVfbm9kZSgpCiAgewogICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0
cnkgIHsKICAgICAgY29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgfQogICAgY2F0Y2goLi4u
KSB7ICBfTV9wdXRfbm9kZShfX3ApIDsgdGhyb3c7IH0gOwogICAgcmV0dXJuIF9fcDsKICB9Cgpw
dWJsaWM6CiAgZXhwbGljaXQgbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2Nh
dG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHt9CgogIGl0ZXJhdG9yIGJlZ2luKCkgICAgICAgICAg
ICAgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01fbmV4dCk7IH0KICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9Cgog
IGl0ZXJhdG9yIGVuZCgpICAgICAgICAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlOyB9CgogIHJldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgCiAgICB7IHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJl
Z2luKCkpOyB9CgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlLT5fTV9uZXh0
ID09IF9NX25vZGU7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsKICAgIHNpemVfdHlwZSBf
X3Jlc3VsdCA9IDA7CiAgICBkaXN0YW5jZShiZWdpbigpLCBlbmQoKSwgX19yZXN1bHQpOwogICAg
cmV0dXJuIF9fcmVzdWx0OwogIH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVy
biBzaXplX3R5cGUoLTEpOyB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigp
OyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0K
ICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KICBjb25zdF9yZWZlcmVu
Y2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAgdm9pZCBzd2FwKGxpc3Q8
X1RwLCBfQWxsb2M+JiBfX3gpIHsgIDo6c3dhcChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAg
aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAg
ICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgX190bXAtPl9NX25leHQg
PSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01fcHJldiA9IF9fcG9zaXRpb24uX01f
bm9kZS0+X01fcHJldjsKICAgICgoX05vZGUqKSAoX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2
KSktPl9NX25leHQgPSBfX3RtcDsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9f
dG1wOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19w
b3NpdGlvbikgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIF9UcCgpKTsgfQoKICAgCgogIHRl
bXBsYXRlPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9y
IF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3RydWVfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChf
VHApIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBf
TV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2lu
c2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoK
CgoKCgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBf
VHAmIF9feCk7CiAKICB2b2lkIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpIHsgaW5zZXJ0KGJl
Z2luKCksIF9feCk7IH0KICB2b2lkIHB1c2hfZnJvbnQoKSB7aW5zZXJ0KGJlZ2luKCkpO30KICB2
b2lkIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoZW5kKCksIF9feCk7IH0KICB2
b2lkIHB1c2hfYmFjaygpIHtpbnNlcnQoZW5kKCkpO30KCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
b3IgX19wb3NpdGlvbikgewogICAgX05vZGUqIF9fbmV4dF9ub2RlID0gKF9Ob2RlKikgKF9fcG9z
aXRpb24uX01fbm9kZS0+X01fbmV4dCk7CiAgICBfTm9kZSogX19wcmV2X25vZGUgPSAoX05vZGUq
KSAoX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2KTsKICAgIF9fcHJldl9ub2RlLT5fTV9uZXh0
ID0gX19uZXh0X25vZGU7CiAgICBfX25leHRfbm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2RlOwog
ICAgZGVzdHJveSgmX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2Rl
KF9fcG9zaXRpb24uX01fbm9kZSk7CiAgICByZXR1cm4gaXRlcmF0b3IoX19uZXh0X25vZGUpOwog
IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwog
IHZvaWQgY2xlYXIoKSB7IF9CYXNlOjpjbGVhcigpOyB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlw
ZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9f
bmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKICB2b2lkIHBvcF9mcm9u
dCgpIHsgZXJhc2UoYmVnaW4oKSk7IH0KICB2b2lkIHBvcF9iYWNrKCkgeyAKICAgIGl0ZXJhdG9y
IF9fdG1wID0gZW5kKCk7CiAgICBlcmFzZSgtLV9fdG1wKTsKICB9CiAgbGlzdChzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogICAgeyBpbnNlcnQoYmVnaW4o
KSwgX19uLCBfX3ZhbHVlKTsgfQogIGV4cGxpY2l0IGxpc3Qoc2l6ZV90eXBlIF9fbikKICAgIDog
X0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX1RwKCkp
OyB9CgoKCiAgIAogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbGlzdChf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19h
KQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsgfQoKIyA0MzMgIi9vcHQv
c2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9saXN0LmgiIDMKCiAgbGlzdChjb25zdCBsaXN0PF9UcCwgX0FsbG9j
PiYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IGluc2VydChiZWdpbigp
LCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsgfQoKICB+bGlzdCgpIHsgfQoKICBsaXN0PF9UcCwg
X0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpOwoKcHVibGlj
OgogICAKICAgCiAgIAogICAKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1Rw
JiBfX3ZhbCk7CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNz
aWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAg
dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBf
SW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdy
YWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25f
ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7
IGFzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSk7CgoKCnByb3RlY3RlZDoKICB2b2lkIHRyYW5zZmVyKGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYg
KF9fcG9zaXRpb24gIT0gX19sYXN0KSB7CiAgICAgICAKICAgICAgKChfTm9kZSopIChfX2xhc3Qu
X01fbm9kZS0+X01fcHJldikpLT5fTV9uZXh0ICAgICA9IF9fcG9zaXRpb24uX01fbm9kZTsKICAg
ICAgKChfTm9kZSopIChfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXYpKS0+X01fbmV4dCAgICA9IF9f
bGFzdC5fTV9ub2RlOwogICAgICAoKF9Ob2RlKikgKF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJl
dikpLT5fTV9uZXh0ID0gX19maXJzdC5fTV9ub2RlOyAKCiAgICAgICAKICAgICAgX05vZGUqIF9f
dG1wID0gKF9Ob2RlKikgKF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldik7CiAgICAgIF9fcG9z
aXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBf
X2xhc3QuX01fbm9kZS0+X01fcHJldiAgICAgID0gX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2OyAK
ICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2ICAgID0gX190bXA7CiAgICB9CiAgfQoKcHVi
bGljOgogIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkgewogICAg
aWYgKCFfX3guZW1wdHkoKSkgCiAgICAgIHRyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigp
LCBfX3guZW5kKCkpOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0
JiwgaXRlcmF0b3IgX19pKSB7CiAgICBpdGVyYXRvciBfX2ogPSBfX2k7CiAgICArK19fajsKICAg
IGlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0dXJuOwogICAg
dHJhbnNmZXIoX19wb3NpdGlvbiwgX19pLCBfX2opOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRv
ciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7
CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIAogICAgICB0cmFuc2ZlcihfX3Bvc2l0aW9uLCBf
X2ZpcnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpOwog
IHZvaWQgdW5pcXVlKCk7CiAgdm9pZCBtZXJnZShsaXN0JiBfX3gpOwogIHZvaWQgcmV2ZXJzZSgp
OwogIHZvaWQgc29ydCgpOwoKCiAgdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+IHZvaWQgcmVt
b3ZlX2lmKF9QcmVkaWNhdGUpOwogIHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPiB2
b2lkIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdl
YWtPcmRlcmluZz4gdm9pZCBtZXJnZShsaXN0JiwgX1N0cmljdFdlYWtPcmRlcmluZyk7CiAgdGVt
cGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+IHZvaWQgc29ydChfU3RyaWN0V2Vha09y
ZGVyaW5nKTsKCgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gICgKICAgIGNvbnN0IGxpc3Qm
IF9feCwgY29uc3QgbGlzdCYgX195KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAg
dHlwZWRlZiB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjpfTm9kZSBfTm9kZTsKICBfTm9kZSog
X19lMSA9IF9feC5fTV9ub2RlOwogIF9Ob2RlKiBfX2UyID0gX195Ll9NX25vZGU7CiAgX05vZGUq
IF9fbjEgPSAoX05vZGUqKSBfX2UxLT5fTV9uZXh0OwogIF9Ob2RlKiBfX24yID0gKF9Ob2RlKikg
X19lMi0+X01fbmV4dDsKICBmb3IgKCA7IF9fbjEgIT0gX19lMSAmJiBfX24yICE9IF9fZTIgOwog
ICAgICAgICAgX19uMSA9IChfTm9kZSopIF9fbjEtPl9NX25leHQsIF9fbjIgPSAoX05vZGUqKSBf
X24yLT5fTV9uZXh0KQogICAgaWYgKF9fbjEtPl9NX2RhdGEgIT0gX19uMi0+X01fZGF0YSkKICAg
ICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiBfX24xID09IF9fZTEgJiYgX19uMiA9PSBfX2UyOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgdm9pZCAKc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBsaXN0
PF9UcCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQg
Cmxpc3Q8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgIGluc2VydChfX3Bvc2l0aW9uLCAqX19maXJzdCk7Cn0KCiMgNTgyICIvb3B0L3Nmdy9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfbGlzdC5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
Pgp2b2lkIApsaXN0PF9UcCwgX0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNp
emVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbikK
ICAgIGluc2VydChfX3Bvc2l0aW9uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+Cmxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8X1RwLCBfQWxsb2M+Ojpl
cmFzZShpdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkKICAgIGVyYXNlKF9fZmlyc3QrKyk7CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZXNp
emUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KQp7CiAgaXRlcmF0b3IgX19p
ID0gYmVnaW4oKTsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGZvciAoIDsgX19pICE9IGVuZCgp
ICYmIF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICA7CiAgaWYgKF9fbGVu
ID09IF9fbmV3X3NpemUpCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKICBlbHNlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBfX2xlbiwgX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpsaXN0PF9UcCwgX0FsbG9j
PiYgbGlzdDxfVHAsIF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYg
X194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdp
bigpOwogICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgY29uc3RfaXRlcmF0b3IgX19m
aXJzdDIgPSBfX3guYmVnaW4oKTsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5k
KCk7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KSAKICAgICAgKl9fZmlyc3QxKysgPSAqX19maXJzdDIrKzsKICAgIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICBlbHNlCiAgICAgIGlu
c2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgfQogIHJldHVybiAqdGhpczsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+
Ojphc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9yIF9f
aSA9IGJlZ2luKCk7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0t
X19uKQogICAgKl9faSA9IF9fdmFsOwogIGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgpLCBf
X24sIF9fdmFsKTsKICBlbHNlCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lk
Cmxpc3Q8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0
MiwgX0lucHV0SXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkKewogIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVy
YXRvciBfX2xhc3QxID0gZW5kKCk7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDI7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAqX19maXJzdDEg
PSAqX19maXJzdDI7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBlcmFzZShfX2ZpcnN0
MSwgX19sYXN0MSk7CiAgZWxzZQogICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3Qy
KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAs
IF9BbGxvYz46OnJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpCnsKICBpdGVyYXRvciBfX2ZpcnN0
ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsK
ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3Qg
PSBfX25leHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQg
bGlzdDxfVHAsIF9BbGxvYz46OnVuaXF1ZSgpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4o
KTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybjsKICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fbmV4dCAhPSBf
X2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICBlcmFzZShfX25leHQp
OwogICAgZWxzZQogICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwg
X0FsbG9jPjo6bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKewogIGl0ZXJhdG9yIF9fZmly
c3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgaXRlcmF0b3IgX19m
aXJzdDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAo
Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Qy
OwogICAgICB0cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgX19m
aXJzdDIgPSBfX25leHQ7CiAgICB9CiAgICBlbHNlCiAgICAgICsrX19maXJzdDE7CiAgaWYgKF9f
Zmlyc3QyICE9IF9fbGFzdDIpIHRyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxs
b2M+OjpyZXZlcnNlKCkgCnsKICAgCiAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAm
JgogICAgICAoKF9Ob2RlKikgKF9NX25vZGUtPl9NX25leHQpKS0+X01fbmV4dCAhPSBfTV9ub2Rl
KSB7CiAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICsrX19maXJzdDsKICAgIHdo
aWxlIChfX2ZpcnN0ICE9IGVuZCgpKSB7CiAgICAgIGl0ZXJhdG9yIF9fb2xkID0gX19maXJzdDsK
ICAgICAgKytfX2ZpcnN0OwogICAgICB0cmFuc2ZlcihiZWdpbigpLCBfX29sZCwgX19maXJzdCk7
CiAgICB9CiAgfQp9ICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
IGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KCkKewogICAKICBpZiAoX01fbm9kZS0+X01fbmV4dCAh
PSBfTV9ub2RlICYmCiAgICAgICgoX05vZGUqKSAoX01fbm9kZS0+X01fbmV4dCkpLT5fTV9uZXh0
ICE9IF9NX25vZGUpIHsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICBsaXN0PF9U
cCwgX0FsbG9jPiBfX2NvdW50ZXJbNjRdOwogICAgaW50IF9fZmlsbCA9IDA7CiAgICB3aGlsZSAo
IWVtcHR5KCkpIHsKICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhpcywg
YmVnaW4oKSk7CiAgICAgIGludCBfX2kgPSAwOwogICAgICB3aGlsZShfX2kgPCBfX2ZpbGwgJiYg
IV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShf
X2NhcnJ5KTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgIH0K
ICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsgICAgICAgICAKICAgICAgaWYgKF9f
aSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfSAKCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kg
PCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19p
LTFdKTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CnZvaWQg
bGlzdDxfVHAsIF9BbGxvYz46OnJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKewogIGl0ZXJh
dG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAg
ICsrX19uZXh0OwogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIGVyYXNlKF9fZmlyc3QpOwogICAg
X19maXJzdCA9IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4gdGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnZvaWQgbGlzdDxfVHAsIF9BbGxv
Yz46OnVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKICBpdGVyYXRvciBf
X2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxl
ICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAq
X19uZXh0KSkKICAgICAgZXJhc2UoX19uZXh0KTsKICAgIGVsc2UKICAgICAgX19maXJzdCA9IF9f
bmV4dDsKICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgp2b2lkIGxp
c3Q8X1RwLCBfQWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewogIGl0ZXJh
dG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgaXRl
cmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVu
ZCgpOwogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICBpdGVyYXRvciBf
X25leHQgPSBfX2ZpcnN0MjsKICAgICAgdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19f
bmV4dCk7CiAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgfQogICAgZWxzZQogICAgICArK19f
Zmlyc3QxOwogIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSB0cmFuc2ZlcihfX2xhc3QxLCBfX2Zp
cnN0MiwgX19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt
cGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46
OnNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICAgCiAgaWYgKF9NX25vZGUtPl9N
X25leHQgIT0gX01fbm9kZSAmJgogICAgICAoKF9Ob2RlKikgKF9NX25vZGUtPl9NX25leHQpKS0+
X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAg
bGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAg
d2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwg
KnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19m
aWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0u
bWVyZ2UoX19jYXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19f
aSsrXSk7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsgICAgICAg
ICAKICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfSAKCiAgICBmb3IgKGlu
dCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKSAKICAgICAgX19jb3VudGVyW19faV0ubWVy
Z2UoX19jb3VudGVyW19faS0xXSwgX19jb21wKTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0x
XSk7CiAgfQp9CgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNCAiL29wdC9zZncvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGlz
dCIgMiAzCgoKCgogCiAKIAojIDU2NiAiLi4vLi4vaW5jbHVkZS94dGwvb2JqaW8uaCIgMgoKIyAx
ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9tYXAiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9z
ZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3Qg
dW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYg
X1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0Fy
ZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0Fy
ZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90
eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsgICAgICAKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9U
cD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29u
c3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
LSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKIAoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBsdXM8X1RwPikgewogIHJl
dHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9l
bGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiAKewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNz
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwg
X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBl
LCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBs
aWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7
fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApu
b3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1By
ZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+IApjbGFzcyBi
aW5hcnlfbmVnYXRlIAogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGlj
YXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6
CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJl
ZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZp
cnN0X2FyZ3VtZW50X3R5cGUmIF9feCwgCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1l
IF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0
dXJuICFfTV9wcmVkKF9feCwgX195KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh
dGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QyKGNvbnN0IF9QcmVkaWNh
dGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPiAKY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0
X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlv
bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBf
T3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVu
YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBvcCh2YWx1ZSwgX194KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24s
IGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPiAKYmluZDFzdChjb25zdCBf
T3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVkZWYgdHlwZW5hbWUg
X09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5k
ZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVj
dGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3Vt
ZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194
LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSYgX195KSAKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwg
dmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgpp
bmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+IApiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9f
b3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpz
ZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJh
dGlvbj4oX19vcGVyLCBfQXJnMl90eXBlKF9feCkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w
ZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl
PiAKewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX19vcDE7CiAgX09wZXJhdGlvbjIgX19vcDI7
CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9P
cGVyYXRpb24yJiBfX3kpIAogICAgOiBfX29wMShfX3gpLCBfX29wMihfX3kpIHt9CiAgdHlwZW5h
bWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf
T3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX19vcDEo
X19vcDIoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBf
T3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+
IApjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBf
X29wMikKewogIHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihf
X29wMSwgX19vcDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVy
YXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+
IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX29wMTsKICBfT3BlcmF0aW9uMiBfTV9vcDI7
CiAgX09wZXJhdGlvbjMgX01fb3AzOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09w
ZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwgCiAgICAgICAgICAgICAgICAg
Y29uc3QgX09wZXJhdGlvbjMmIF9feikgCiAgICA6IF9NX29wMShfX3gpLCBfTV9vcDIoX195KSwg
X01fb3AzKF9feikgeyB9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3Bl
cmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX01fb3AxKF9NX29wMihfX3gpLCBfTV9vcDMoX194KSk7CiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3Mg
X09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlv
bjIsIF9PcGVyYXRpb24zPiAKY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25z
dCBfT3BlcmF0aW9uMiYgX19vcDIsIAogICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19vcDMp
CnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJh
dGlvbjM+CiAgICAoX19vcDEsIF9fb3AyLCBfX29wMyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpf
TV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAg
ZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkg
OiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyBy
ZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVz
dWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJf
ZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVu
Y3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz
cyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24g
OiAKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVj
dGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9p
bnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5h
cnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgCiAgICAgIDogX01fcHRy
KF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29u
c3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3Rv
X2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiAKcHRyX2Z1bihfUmVzdWx0ICgq
X194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9u
PF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCiAKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgY29uc3Qg
X1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8
X1RwPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsK
ICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFp
ciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Bh
aXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIGNvbnN0IHR5cGVuYW1lIF9QYWly
OjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBz
ZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBf
UGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCiAK
dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3Bl
cmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9f
eDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9q
ZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAg
X0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4gCnN0
cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Qcm9qZWN0MXN0PF9BcmcxLCBfQXJnMj4ge307Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1
YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+IHt9OwoKIAogCiAKdGVtcGxhdGUgPGNsYXNz
IF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1bgp7CiAgdHlwZWRlZiBfUmVzdWx0IHJl
c3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9fdmFsOwogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0
IHJlc3VsdF90eXBlJiBfX3YpIDogX192YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBv
cGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gX192YWw7IH0KfTsgIAoKCnRlbXBsYXRlIDxjbGFz
cyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0PgoKCgpzdHJ1Y3QgY29uc3RhbnRf
dW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Bcmd1bWVudCwgX1Jlc3VsdD4gewog
IF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3Yp
IDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1
bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVz
dWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsIGNsYXNzIF9BcmcyID0gX0FyZzE+CgoKCnN0cnVj
dCBjb25zdGFudF9iaW5hcnlfZnVuIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0Fy
ZzIsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNv
bnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJh
dG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92
YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lk
X2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4g
Y29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
c3VsdD4KaW5saW5lIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50
MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jl
c3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUg
Y29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4gCmNvbnN0YW50Mihj
b25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1
bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCiAKIApjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJp
dmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFibGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAg
c2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgogIHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2ln
bmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9pbmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsK
ICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIgKyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5k
ZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0gLSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0
dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBfX2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFs
aXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAgewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAg
ICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAgICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAw
OyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAgICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAx
KSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFibGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0g
X19zZWVkIC0gX19rOwogICAgICAgIF9fc2VlZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAg
Zm9yIChpbnQgX19sb29wID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3Ig
KF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykKICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9N
X3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSArIF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9N
X2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIgPSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1
bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0
aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9OwoKCiAKCiAKIAogCiAK
IAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9f
cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9N
X2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMg
dW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVm
X3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigp
KF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1Jl
dCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNs
YXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19w
ZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1Rw
OjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCos
X0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9f
cGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9B
cmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l
bV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJl
dHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9B
cmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJn
LF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9f
cGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9B
cmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1Jl
dCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1
bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJu
IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBj
b25zdDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9U
cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp
dCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv
cGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAg
dm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0
X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCos
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9f
cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAq
IF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90
PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0K
cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
Y2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZv
aWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9p
ZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9p
ZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShf
VHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiAKICA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNv
bnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShf
QXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1l
bV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAo
X1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAm
IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZv
aWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25z
dF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9f
cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3Qg
eyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykg
Y29uc3Q7Cn07CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu
bGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsg
cmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0
IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1Rw
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1
bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKSAKICB7IHJl
dHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1
bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5f
cmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1Jl
dCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChf
VHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0
IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9S
ZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp
bmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6
OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAs
X0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0
IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B
cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYo
X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9y
ZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgogCgoKCiAKIAogCiMgNTkgIi9vcHQvc2Z3L2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF90cmVlLmgiIDIgMwoKCiAgCgoKCgoKdHlwZWRlZiBib29sIF9SYl90cmVlX0Nv
bG9yX3R5cGU7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9yZWQgPSBmYWxz
ZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlwZSBfU19yYl90cmVlX2JsYWNrID0gdHJ1ZTsKCnN0
cnVjdCBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBf
Q29sb3JfdHlwZTsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwoKICBf
Q29sb3JfdHlwZSBfTV9jb2xvcjsgCiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFzZV9wdHIg
X01fbGVmdDsKICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWlu
aW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194
ID0gX194LT5fTV9sZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFzZV9wdHIg
X1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9
IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVmFsdWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25v
ZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAg
X1ZhbHVlIF9NX3ZhbHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9y
CnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICB0
eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9kZTsKCiAg
dm9pZCBfTV9pbmNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAwKSB7
CiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9NX25vZGUt
Pl9NX2xlZnQgIT0gMCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgIH0K
ICAgIGVsc2UgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAg
ICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9kZSA9IF9f
eTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAoX01fbm9k
ZS0+X01fcmlnaHQgIT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgfQoKICB2
b2lkIF9NX2RlY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9TX3Ji
X3RyZWVfcmVkICYmCiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01f
bm9kZSkKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBpZiAoX01f
bm9kZS0+X01fbGVmdCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9s
ZWZ0OwogICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9IF9feS0+
X01fcmlnaHQ7CiAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jh
c2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0g
X195LT5fTV9sZWZ0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBfX3kt
Pl9NX3BhcmVudDsKICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfUmJf
dHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVm
IF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBf
UHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYs
IF9WYWx1ZSo+ICAgICAgICAgICAgIAogICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9p
dGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+IAogICAgY29uc3Rf
aXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+
ICAgICAgICAgICAgICAgICAgIAogICAgX1NlbGY7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9W
YWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVlX2l0ZXJhdG9yKCkge30KICBfUmJfdHJlZV9p
dGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9CiAgX1JiX3RyZWVfaXRl
cmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoK
ICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2Rl
KS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkgeyBfTV9pbmNyZW1l
bnQoKTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxm
IF9fdG1wID0gKnRoaXM7CiAgICBfTV9pbmNyZW1lbnQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9
CiAgICAKICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7IHJldHVybiAqdGhp
czsgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwog
ICAgX01fZGVjcmVtZW50KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX195KSB7CiAgcmV0dXJu
IF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUg
IT0gX195Ll9NX25vZGU7Cn0KCiMgMjE0ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAz
CgoKaW5saW5lIHZvaWQgCl9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVfYmFzZSog
X194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2Uq
IF9feSA9IF9feC0+X01fcmlnaHQ7CiAgX194LT5fTV9yaWdodCA9IF9feS0+X01fbGVmdDsKICBp
ZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgIF9feS0+X01fbGVmdC0+X01fcGFyZW50ID0gX194Owog
IF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQog
ICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVm
dCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIGVsc2UKICAgIF9feC0+X01f
cGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9NX2xlZnQgPSBfX3g7CiAgX194LT5fTV9w
YXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkIApfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90
cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogIF9feC0+X01fbGVmdCA9IF9feS0+
X01fcmlnaHQ7CiAgaWYgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgIF9feS0+X01fcmlnaHQtPl9N
X3BhcmVudCA9IF9feDsKICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICBpZiAo
X194ID09IF9fcm9vdCkKICAgIF9fcm9vdCA9IF9feTsKICBlbHNlIGlmIChfX3ggPT0gX194LT5f
TV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195Owog
IGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIF9feS0+X01fcmlnaHQg
PSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkIApfUmJfdHJlZV9y
ZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9f
cm9vdCkKewogIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICB3aGlsZSAoX194ICE9
IF9fcm9vdCAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsK
ICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9s
ZWZ0KSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19y
Yl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg
ICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK
ICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVs
c2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KSB7CiAgICAg
ICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0
KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9y
ID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5f
TV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChf
X3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgICBlbHNl
IHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFy
ZW50LT5fTV9sZWZ0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJl
ZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2Js
YWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9f
eC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAg
ICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsK
ICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgICBf
X3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gs
IF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9T
X3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29s
b3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgfQogIF9fcm9vdC0+
X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwp9CgppbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNl
KgpfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRt
b3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9f
cmlnaHRtb3N0KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgX1JiX3RyZWVf
bm9kZV9iYXNlKiBfX3ggPSAwOwogIF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7
CiAgaWYgKF9feS0+X01fbGVmdCA9PSAwKSAgICAgIAogICAgX194ID0gX195LT5fTV9yaWdodDsg
ICAgICAKICBlbHNlCiAgICBpZiAoX195LT5fTV9yaWdodCA9PSAwKSAgIAogICAgICBfX3ggPSBf
X3ktPl9NX2xlZnQ7ICAgICAKICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgCiAgICAgIF9f
eSA9IF9feS0+X01fcmlnaHQ7ICAgIAogICAgICB3aGlsZSAoX195LT5fTV9sZWZ0ICE9IDApCiAg
ICAgICAgX195ID0gX195LT5fTV9sZWZ0OwogICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAg
fQogIGlmIChfX3kgIT0gX196KSB7ICAgICAgICAgICAKICAgIF9fei0+X01fbGVmdC0+X01fcGFy
ZW50ID0gX195OyAKICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgIGlmIChfX3kg
IT0gX196LT5fTV9yaWdodCkgewogICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAg
ICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIF9feS0+
X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OyAgICAgICAKICAgICAgX195LT5fTV9yaWdodCA9IF9f
ei0+X01fcmlnaHQ7CiAgICAgIF9fei0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgIH0K
ICAgIGVsc2UKICAgICAgX194X3BhcmVudCA9IF9feTsgIAogICAgaWYgKF9fcm9vdCA9PSBfX3op
CiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0
ID09IF9feikKICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBlbHNlIAog
ICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3ktPl9NX3BhcmVudCA9
IF9fei0+X01fcGFyZW50OwogICAgIDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9NX2NvbG9y
KTsKICAgIF9feSA9IF9fejsKICAgICAKICB9CiAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9feCkgX194LT5f
TV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsgICAKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAg
ICBfX3Jvb3QgPSBfX3g7CiAgICBlbHNlIAogICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xl
ZnQgPT0gX196KQogICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICBl
bHNlCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgaWYgKF9fbGVm
dG1vc3QgPT0gX196KSAKICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkgICAgICAgICAKICAg
ICAgICBfX2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgCiAgICAgIGVsc2UKICAgICAg
ICBfX2xlZnRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7CiAgICBp
ZiAoX19yaWdodG1vc3QgPT0gX196KSAgCiAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkgICAg
ICAgICAgCiAgICAgICAgX19yaWdodG1vc3QgPSBfX3otPl9NX3BhcmVudDsgIAogICAgIAogICAg
ICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90
cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOwogIH0KICBpZiAoX195LT5fTV9jb2xvciAh
PSBfU19yYl90cmVlX3JlZCkgeyAKICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0g
MCB8fCBfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKQogICAgICBpZiAoX194ID09
IF9feF9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9
IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9TX3Ji
X3RyZWVfcmVkKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsK
ICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAg
ICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193
ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmICgoX193LT5fTV9s
ZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3Ji
X3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwgCiAgICAg
ICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkgewog
ICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX194ID0g
X194X3BhcmVudDsKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7
CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwgCiAg
ICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykg
ewogICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0g
X1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
cmVkOwogICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAg
ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgIH0KICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJl
bnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX3Jp
Z2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAg
ICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgYnJl
YWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAKICAgICAgICBf
UmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgaWYg
KF9fdy0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29s
b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50
LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICB9
CiAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9N
X3JpZ2h0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSAmJgogICAgICAgICAgICAoX193
LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09
IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9
IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9f
dy0+X01fbGVmdCA9PSAwIHx8IAogICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193
LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ct
Pl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9s
ZWZ0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsK
ICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xv
cjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAg
ICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90
cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9f
cm9vdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIGlmIChfX3gpIF9f
eC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4gX195Owp9CgogCiAK
IAogCgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBib29sIF9TX2luc3Rh
bmNlbGVzcz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
X01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hKQogICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkg
e30KCnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1Rw
PiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICBfTV9ub2RlX2FsbG9jYXRvcjsK
ICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBf
TV9nZXRfbm9kZSgpIAogICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7
IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKSAKICAgIHsgX01f
bm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CgogCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwg
X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1Ji
X3RyZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9
Cgpwcm90ZWN0ZWQ6CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxv
Y190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9n
ZXRfbm9kZSgpCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KICB2b2lk
IF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBfQWxsb2NfdHlwZTo6
ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CnN0cnVjdCBfUmJfdHJlZV9iYXNlCiAgOiBwdWJsaWMgX1JiX3RyZWVfYWxsb2NfYmFzZTxf
VHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9SYl90cmVlX2FsbG9j
X2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAg
X1JiX3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSAKICAgIDogX0Jhc2UoX19h
KSB7IF9NX2hlYWRlciA9IF9NX2dldF9ub2RlKCk7IH0KICB+X1JiX3RyZWVfYmFzZSgpIHsgX01f
cHV0X25vZGUoX01faGVhZGVyKTsgfQoKfTsKCiMgNTE5ICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
dHJlZS5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2Nh
dG9yPCBfVmFsdWUgPiAgPgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNl
PF9WYWx1ZSwgX0FsbG9jPiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9j
PiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9w
dHI7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3RyZWVfbm9kZTsKICB0eXBl
ZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9L
ZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVl
X3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVy
OwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlw
ZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxv
Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgoKCgoKCgpwcm90ZWN0ZWQ6
CgogIF9MaW5rX3R5cGUgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQogIHsK
ICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRfbm9kZSgpOwogICAgdHJ5ICB7CiAgICAgIGNv
bnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQogICAgY2F0Y2goLi4u
KSB7ICBfTV9wdXRfbm9kZShfX3RtcCkgOyB0aHJvdzsgfSA7CiAgICByZXR1cm4gX190bXA7CiAg
fQoKICBfTGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xp
bmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAg
X190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsK
ICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICB2b2lkIGRl
c3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVl
X2ZpZWxkKTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVfdHlw
ZSBfTV9ub2RlX2NvdW50OyAgCiAgX0NvbXBhcmUgX01fa2V5X2NvbXBhcmU7CgogIF9MaW5rX3R5
cGUmIF9NX3Jvb3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVy
LT5fTV9wYXJlbnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0IAogICAgeyBy
ZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KICBfTGlua190eXBlJiBf
TV9yaWdodG1vc3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVy
LT5fTV9yaWdodDsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChfTGlua190eXBlIF9f
eCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQogIHN0YXRpYyBf
TGlua190eXBlJiBfU19yaWdodChfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190
eXBlJikoX194LT5fTV9yaWdodCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcGFyZW50KF9M
aW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7
IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1
cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQogIHN0YXRpYyBjb25zdCBfS2V5JiBfU19rZXkoX0xp
bmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9feCkpOyB9
CiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfTGlua190eXBlIF9feCkKICAgIHsgcmV0
dXJuIChfQ29sb3JfdHlwZSYpKF9feC0+X01fY29sb3IpOyB9CgogIHN0YXRpYyBfTGlua190eXBl
JiBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+
X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcmlnaHQoX0Jhc2VfcHRyIF9feCkK
ICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KICBzdGF0aWMgX0xp
bmtfdHlwZSYgX1NfcGFyZW50KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlw
ZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUoX0Jhc2Vf
cHRyIF9feCkKICAgIHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1ZV9maWVsZDsg
fQogIHN0YXRpYyBjb25zdCBfS2V5JiBfU19rZXkoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJu
IF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fSAKICBzdGF0aWMgX0Nv
bG9yX3R5cGUmIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5
cGUmKShfTGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBf
U19taW5pbXVtKF9MaW5rX3R5cGUgX194KSAKICAgIHsgcmV0dXJuIChfTGlua190eXBlKSAgX1Ji
X3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUg
X1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJf
dHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKcHVibGljOgogIHR5cGVkZWYgX1Ji
X3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJlbmNlLCBwb2ludGVyPiBpdGVyYXRvcjsK
ICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIGNvbnN0X3JlZmVyZW5jZSwg
Y29uc3RfcG9pbnRlcj4gCiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0
eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoK
CgogCgpwcml2YXRlOgogIGl0ZXJhdG9yIF9NX2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9w
dHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOwogIF9MaW5rX3R5cGUgX01fY29weShfTGlu
a190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwogIHZvaWQgX01fZXJhc2UoX0xpbmtfdHlwZSBf
X3gpOwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBfUmJfdHJl
ZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9r
ZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShj
b25zdCBfQ29tcGFyZSYgX19jb21wKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01f
bm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKSAKICAgIHsgX01fZW1wdHlfaW5p
dGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9N
X2tleV9jb21wYXJlKF9fY29tcCkgCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBf
UmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgX01f
bm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9jb21wYXJlKQogIHsgCiAg
ICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICBfTV9lbXB0eV9pbml0aWFsaXplKCk7CiAg
ICBlbHNlIHsKICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOwogICAg
ICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgIF9N
X2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX3JpZ2h0bW9zdCgp
ID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgfQogICAgX01fbm9kZV9jb3VudCA9IF9feC5f
TV9ub2RlX2NvdW50OwogIH0KICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7IH0KICBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiAKICBvcGVyYXRvcj0oY29u
c3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194
KTsKCnByaXZhdGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkgewogICAgX1NfY29sb3Io
X01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOyAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBfTV9sZWZ0bW9zdCgpID0g
X01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgfQoKcHVibGljOiAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgX0NvbXBhcmUga2V5X2NvbXAo
KSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQogIGl0ZXJhdG9yIGJlZ2luKCkgeyBy
ZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2hlYWRl
cjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2hlYWRlcjsgfQog
IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQo
KSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgCiAgICByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKGJlZ2luKCkpOwogIH0gCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX25v
ZGVfY291bnQgPT0gMDsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbm9k
ZV9jb3VudDsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlw
ZSgtMSk7IH0KCiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgIDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFk
ZXIpOwogICAgIDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAgICAg
Ojpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUpOwogIH0KICAgIApwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHBhaXI8aXRlcmF0b3IsYm9v
bD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2Vy
dF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRvciBpbnNlcnRfdW5pcXVl
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3Ig
aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgoKCgoKCgogIHZvaWQgZXJhc2Uo
aXRlcmF0b3IgX19wb3NpdGlvbik7CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBf
X3gpOwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKICB2
b2lkIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0
KTsKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9NX25vZGVfY291bnQgIT0gMCkgewogICAgICBf
TV9lcmFzZShfTV9yb290KCkpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAg
ICBfTV9yb290KCkgPSAwOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAg
X01fbm9kZV9jb3VudCA9IDA7CiAgICB9CiAgfSAgICAgIAoKcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
OwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgc2l6
ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIGxvd2Vy
X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5k
KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0
IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0OwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNv
bnN0IGtleV90eXBlJiBfX3gpOwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9y
PiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCnB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNvbnN0Owp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs
IAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgCm9w
ZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX194LCAKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBf
X3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5i
ZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgCm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCAKc3dhcChfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgIF9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIF9f
eC5zd2FwKF9feSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIApfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpvcGVyYXRv
cj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
PiYgX194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIF9NX2tleV9j
b21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOyAgICAgICAgCiAgICBpZiAoX194Ll9NX3Jvb3Qo
KSA9PSAwKSB7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9o
ZWFkZXI7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgfQogICAgZWxzZSB7
CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAg
ICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRt
b3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX25vZGVfY291bnQgPSBfX3gu
X01fbm9kZV9jb3VudDsKICAgIH0KICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNlcnQoX0Jhc2VfcHRyIF9f
eF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX194
ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195
XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAg
fHwgCiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkp
KSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVmdChfX3kpID0gX196
OyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICBpZiAoX195ID09IF9NX2hlYWRlcikgewogICAgICBfTV9yb290KCkgPSBfX3o7CiAgICAg
IF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgfQogICAgZWxzZSBpZiAoX195ID09IF9NX2xlZnRt
b3N0KCkpCiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7ICAgIAogIH0KICBlbHNlIHsKICAgIF9f
eiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kpID0gX196OwogICAgaWYg
KF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7ICAgCiAg
fQogIF9TX3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9IDA7CiAgX1NfcmlnaHQo
X196KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJlbnQp
OwogICsrX01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNvbnN0
IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlw
ZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7CiAg
ICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/
IAogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogIH0KICByZXR1cm4g
X01faW5zZXJ0KF9feCwgX195LCBfX3YpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwgCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShjb25z
dCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5
cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194ICE9
IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZh
bHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gp
IDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsgICAK
ICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKSAgICAgCiAgICAgIHJldHVybiBw
YWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICBl
bHNlCiAgICAgIC0tX19qOwogIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUp
LCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01f
aW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29s
PihfX2osIGZhbHNlKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFz
cyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0
eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxv
Yz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUs
IF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1Zh
bCYgX192KQp7CiAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQp
IHsgIAogICAgaWYgKHNpemUoKSA+IDAgJiYgCiAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9m
VmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgIHJldHVybiBf
TV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CiAg
ICAgCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBl
bHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7ICAKICAgIGlmIChfTV9r
ZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQog
ICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgZWxzZQog
ICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSB7CiAgICBpdGVy
YXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKF9NX2tl
eV9jb21wYXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSAK
ICAgICAgICAmJiBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bv
c2l0aW9uLl9NX25vZGUpKSkgewogICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkg
PT0gMCkKICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7
IAogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIH0gZWxzZQogICAgICByZXR1cm4g
aW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25z
dCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01f
bGVmdCkgeyAgCiAgICBpZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBfTV9rZXlfY29tcGFyZShf
S2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgcmV0
dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192
KTsKICAgICAKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxz
ZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlcikgeyAKICAgIGlmICghX01fa2V5
X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0KCkpKSkKICAg
ICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgIGVsc2UKICAg
ICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxzZSB7CiAgICBpdGVyYXRvciBfX2Jl
Zm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKCFfTV9rZXlfY29tcGFy
ZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAm
JiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVl
KCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAg
ICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOyAKICAgICAg
ZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0
aW9uLl9NX25vZGUsIF9fdik7CiAgICAgCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9l
cXVhbChfX3YpOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xh
c3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3MgX0FsbG9jPgogIHRlbXBsYXRlPGNsYXNzIF9JST4K
dm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF9lcXVh
bChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgIGluc2VydF9lcXVhbCgqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+
IAogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21w
LF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpIHsKICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5pcXVlKCpf
X2ZpcnN0KTsKfQoKIyAxMDIxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAzCgogICAg
ICAgICAKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs
dWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQg
X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJh
c2UoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195ID0gCiAgICAoX0xpbmtf
dHlwZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfX3Bvc2l0aW9uLl9NX25vZGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9N
X3BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
X2hlYWRlci0+X01fbGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NX2hlYWRlci0+X01fcmlnaHQpOwogIGRlc3Ryb3lfbm9kZShfX3kpOwogIC0tX01f
bm9kZV9jb3VudDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg
X0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlw
ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
c2l6ZV90eXBlIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCnsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBf
X3AgPSBlcXVhbF9yYW5nZShfX3gpOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9f
cC5maXJzdCwgX19wLnNlY29uZCwgX19uKTsKICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQp
OwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFz
cyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZSAKX1JiX3RyZWU8
X0tleSxfVmFsLF9Lb1YsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01fY29weShfTGlua190eXBlIF9f
eCwgX0xpbmtfdHlwZSBfX3ApCnsKICAgICAgICAgICAgICAgICAgICAgICAgIAogIF9MaW5rX3R5
cGUgX190b3AgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsK
IAogIHRyeSAgewogICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgIF9fdG9wLT5fTV9yaWdodCA9
IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX190b3ApOwogICAgX19wID0gX190b3A7CiAgICBfX3gg
PSBfU19sZWZ0KF9feCk7CgogICAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICAgIF9MaW5rX3R5cGUg
X195ID0gX01fY2xvbmVfbm9kZShfX3gpOwogICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAg
IF9feS0+X01fcGFyZW50ID0gX19wOwogICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgICBf
X3ktPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3kpOwogICAgICBfX3AgPSBf
X3k7CiAgICAgIF9feCA9IF9TX2xlZnQoX194KTsKICAgIH0KICB9CiAgY2F0Y2goLi4uKSB7ICBf
TV9lcmFzZShfX3RvcCkgOyB0aHJvdzsgfSA7CgogIHJldHVybiBfX3RvcDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9lcmFzZShfTGlua190eXBlIF9feCkK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICB3aGlsZSAoX194ICE9IDApIHsK
ICAgIF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkpOwogICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0
KF9feCk7CiAgICBkZXN0cm95X25vZGUoX194KTsKICAgIF9feCA9IF9feTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3Qg
PT0gZW5kKCkpCiAgICBjbGVhcigpOwogIGVsc2UKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgZXJhc2UoX19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1
ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+CiAgOjplcmFzZShjb25zdCBfS2V5KiBfX2ZpcnN0LCBjb25zdCBfS2V5KiBfX2xhc3QpIAp7
CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAg
ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IgCl9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYg
X19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAgICAgIAogIF9MaW5rX3R5cGUg
X194ID0gX01fcm9vdCgpOyAgICAgICAKCiAgd2hpbGUgKF9feCAhPSAwKSAKICAgIGlmICghX01f
a2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1Nf
bGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICBpdGVyYXRv
ciBfX2ogPSBpdGVyYXRvcihfX3kpOyAgIAogIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tl
eV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8gCiAgICAgZW5kKCkgOiBfX2o7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl
LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJh
dG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpm
aW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVy
OyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAKCiAgd2hpbGUgKF9feCAhPSAwKSB7
CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBf
X3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194
KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsgICAKICBy
ZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01f
bm9kZSkpKSA/CiAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpjb3VudChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBw
YWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19r
KTsKICBzaXplX3R5cGUgX19uID0gMDsKICBkaXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQs
IF9fbik7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1
ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4KICA6Omxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5
cGUgX195ID0gX01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAKCiAg
d2hpbGUgKF9feCAhPSAwKSAKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9f
aykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBf
X3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omxvd2VyX2JvdW5k
KGNvbnN0IF9LZXkmIF9faykgY29uc3QKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOyAg
CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAKCiAgd2hpbGUgKF9feCAhPSAwKSAKICAg
IGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwg
X194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoK
ICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewog
IF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290
KCk7ICAKCiAgIHdoaWxlIChfX3ggIT0gMCkgCiAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywg
X1Nfa2V5KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAg
ZWxzZQogICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgIHJldHVybiBpdGVyYXRvcihfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVy
YXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog
IDo6dXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kg
PSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICAgd2hpbGUg
KF9feCAhPSAwKSAKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAg
ICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3gg
PSBfU19yaWdodChfX3gpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSAKcGFpcjx0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRv
ciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjppdGVyYXRvcj4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKQp7CiAgcmV0dXJu
IHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLCB1cHBlcl9ib3VuZChf
X2spKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tvViwg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIApwYWlyPHR5cGVuYW1lIF9SYl90
cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9y
LAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9B
bGxvYz46OmNvbnN0X2l0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21w
YXJlLCBfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBy
ZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19r
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91
bmQoX19rKSk7Cn0KCmlubGluZSBpbnQgCl9fYmxhY2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNl
KiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQp7CiAgaWYgKF9fbm9kZSA9PSAw
KQogICAgcmV0dXJuIDA7CiAgZWxzZSB7CiAgICBpbnQgX19iYyA9IF9fbm9kZS0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9ibGFjayA/IDEgOiAwOwogICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAg
ICAgIHJldHVybiBfX2JjOwogICAgZWxzZQogICAgICByZXR1cm4gX19iYyArIF9fYmxhY2tfY291
bnQoX19ub2RlLT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgpib29sIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Ol9fcmJfdmVyaWZ5KCkgY29uc3QKewogIGlmIChfTV9ub2RlX2Nv
dW50ID09IDAgfHwgYmVnaW4oKSA9PSBlbmQoKSkKICAgIHJldHVybiBfTV9ub2RlX2NvdW50ID09
IDAgJiYgYmVnaW4oKSA9PSBlbmQoKSAmJgogICAgICBfTV9oZWFkZXItPl9NX2xlZnQgPT0gX01f
aGVhZGVyICYmIF9NX2hlYWRlci0+X01fcmlnaHQgPT0gX01faGVhZGVyOwogIAogIGludCBfX2xl
biA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgpKTsKICBmb3IgKGNvbnN0
X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19faXQpIHsKICAgIF9M
aW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9faXQuX01fbm9kZTsKICAgIF9MaW5rX3R5cGUg
X19MID0gX1NfbGVmdChfX3gpOwogICAgX0xpbmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoK
ICAgIGlmIChfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKQogICAgICBpZiAoKF9fTCAm
JiBfX0wtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB8fAogICAgICAgICAgKF9fUiAmJiBf
X1ItPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSkKICAgICAgICByZXR1cm4gZmFsc2U7Cgog
ICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQog
ICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShf
X1IpLCBfU19rZXkoX194KSkpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoIV9fTCAmJiAh
X19SICYmIF9fYmxhY2tfY291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICByZXR1
cm4gZmFsc2U7CiAgfQoKICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6
Ol9TX21pbmltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoX01fcmlnaHRt
b3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICBy
ZXR1cm4gZmFsc2U7CgogIHJldHVybiB0cnVlOwp9CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAg
ICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1ZhbHVlID4gID4Kc3RydWN0IHJiX3RyZWUg
OiBwdWJsaWMgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9B
bGxvYz4KewogIHR5cGVkZWYgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0Nv
bXBhcmUsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9y
X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIHJiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9
IF9Db21wYXJlKCksCiAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2Nh
dG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHt9CiAgCiAgfnJiX3RyZWUoKSB7
fQp9OwoKCgoKCiAgCgoKCiAKIAogCiMgMzEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL21hcCIgMiAzCgoK
IyAxICIvb3B0L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfbWFwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFs
bG9jYXRvcjwgX1RwID4gID4KCgoKCmNsYXNzIG1hcCB7CnB1YmxpYzoKCiAKCiAgdHlwZWRlZiBf
S2V5ICAgICAgICAgICAgICAgICAga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAg
ICAgICAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIG1hcHBlZF90
eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBfQ29tcGFyZSAgICAgICAgICAgICAga2V5X2NvbXBhcmU7CiAgICAKICBjbGFzcyB2YWx1ZV9j
b21wYXJlCiAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlw
ZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsK
ICBwcm90ZWN0ZWQgOgogICAgX0NvbXBhcmUgX01fY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0Nv
bXBhcmUgX19jKSA6IF9NX2NvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3Io
KShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3Qgewog
ICAgICByZXR1cm4gX01fY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnBy
aXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAg
ICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBf
UmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAgCnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv
bnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25z
dF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwoKICAgCgogIG1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQog
IGV4cGxpY2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2Nv
bXAsIF9fYSkge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9D
b21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2Zp
cnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtYXAo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29t
cGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9y
X3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19m
aXJzdCwgX19sYXN0KTsgfQojIDEyMyAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX21hcC5oIiAzCgoK
ICBtYXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9f
eC5fTV90KSB7fQogIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShj
b25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3Qg
PSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsgCiAgfQoKICAgCgogIGtleV9jb21wYXJlIGtl
eV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFy
ZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21w
KCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5i
ZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJl
Z2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVy
c2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBj
b25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIF9UcCYgb3BlcmF0b3JbXShjb25zdCBrZXlf
dHlwZSYgX19rKSB7CiAgICBpdGVyYXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOwogICAgIAog
ICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAg
ICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4g
KCpfX2kpLnNlY29uZDsKICB9CiAgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKICAgCgogIHBhaXI8aXRlcmF0b3Is
Ym9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgCiAgICB7IHJldHVybiBfTV90Lmlu
c2VydF91bmlxdWUoX194KTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwg
Y29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKHBv
c2l0aW9uLCBfX3gpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk
IGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK
ICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCgoKCgoKCgoKICB2
b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsg
fQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVy
YXNlKF9feCk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgdm9pZCBjbGVhcigpIHsg
X01fdC5jbGVhcigpOyB9CgogICAKCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194
KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qg
a2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBzaXplX3R5
cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChf
X3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVy
biBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChf
X3gpOyAKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3Jl
dHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3Vu
ZChfX3gpOyAKICB9CiAgCiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29u
c3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9
CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qg
a2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsK
ICB9CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IG1hcCYsIGNvbnN0IG1hcCYp
OwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCA8PiAgKGNvbnN0IG1hcCYsIGNvbnN0IG1hcCYpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LCAKICAgICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X195KSB7CiAgX194LnN3YXAoX195KTsKfQoKCgoKCgoKCiAKCgoKIAogCiAKIyAzMyAiL29wdC9z
ZncvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvbWFwIiAyIDMKCiMgMSAiL29wdC9zZncvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX211bHRpbWFw
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwK
ICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4gID4KCgoKCmNsYXNzIG11
bHRpbWFwIHsKcHVibGljOgoKIAoKICB0eXBlZGVmIF9LZXkgICAgICAgICAgICAgICAgICBrZXlf
dHlwZTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU7CiAgdHlwZWRl
ZiBfVHAgICAgICAgICAgICAgICAgICAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0
IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlICAgICAgICAgICAgICBr
ZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21wYXJlIF9N
X2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBfTV9jb21wKF9fYykge30K
ICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25z
dCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX2NvbXAoX194LmZpcnN0
LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5
X3R5cGUsIHZhbHVlX3R5cGUsIAogICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5
cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAg
CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsgCiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVy
YXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpz
aXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJl
bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAKCiAgbXVsdGltYXAoKSA6IF9NX3QoX0Nv
bXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAgZXhwbGljaXQgbXVsdGltYXAoY29uc3Qg
X0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCks
IGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFz
dCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25z
dCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg
PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0
X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAxMjEgIi9vcHQvc2Z3L2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9t
dWx0aW1hcC5oIiAzCgoKICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkgeyB9CiAgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRo
aXM7IAogIH0KCiAgIAoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9N
X3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0
dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoKICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gX01fdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9N
X3QucmJlZ2luKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVy
biBfTV90LnJlbmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsg
cmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
ZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7
IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7
IH0KICB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7
IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCiAgIAoKICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFs
dWVfdHlwZSYgX194KSB7IHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3gpOyB9CiAgaXRlcmF0
b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewog
ICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24sIF9feCk7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF9lcXVhbChf
X2ZpcnN0LCBfX2xhc3QpOwogIH0KCgoKCgoKCgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3Np
dGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0
IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2Uo
aXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmly
c3QsIF9fbGFzdCk7IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCiAgIAoKICBp
dGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gp
OyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJl
dHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYg
X194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9i
b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsg
fQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IAogIH0KICBpdGVyYXRvciB1cHBl
cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194
KTsgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IAogIH0KICAgcGFpcjxpdGVy
YXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0
dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25z
dF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PSA8PiAgKGNvbnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcCYpOwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCA8
PiAgKGNvbnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG11bHRpbWFwJik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LCAKICAgICAgICAgICAgICAgICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9CgoKCgoKCgoKIAoKCgogCiAKIAojIDM0ICIvb3B0
L3Nmdy9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9tYXAiIDIgMwoKCgoKIAogCiAKIyA1NjcgIi4uLy4uL2luY2x1ZGUveHRs
L29iamlvLmgiIDIKCgp0ZW1wbGF0ZSA8Y2xhc3MgU3RyZWFtLCBjbGFzcyBUMSwgY2xhc3MgVDI+
CmlubGluZSB2b2lkIGNvbXBvc2l0ZShTdHJlYW0mIHN0cmVhbSwgc3RkOjpwYWlyPGNvbnN0IFQx
LFQyPiYgZGF0YSkgewoJc3RyZWFtLnNpbXBsZShjb25zdF9jYXN0PFQxJj4oZGF0YS5maXJzdCkp
OwoJc3RyZWFtLnNpbXBsZShkYXRhLnNlY29uZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBTdHJlYW0s
IGNsYXNzIFQxLCBjbGFzcyBUMj4KaW5saW5lIHZvaWQgY29tcG9zaXRlKFN0cmVhbSYgc3RyZWFt
LCBzdGQ6OnBhaXI8VDEsVDI+JiBkYXRhKSB7CglzdHJlYW0uc2ltcGxlKGRhdGEuZmlyc3QpOwoJ
c3RyZWFtLnNpbXBsZShkYXRhLnNlY29uZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBTdHJlYW0sIGNs
YXNzIFQ+CmlubGluZSB2b2lkIGNvbXBvc2l0ZShTdHJlYW0mIHN0cmVhbSwgc3RkOjpsaXN0PFQ+
JiBkYXRhKSB7CglzdHJlYW0uY29udGFpbmVyKGRhdGEpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgU3Ry
ZWFtLCBjbGFzcyBUPgppbmxpbmUgdm9pZCBjb21wb3NpdGUoU3RyZWFtJiBzdHJlYW0sIHN0ZDo6
dmVjdG9yPFQ+JiBkYXRhKSB7CglzdHJlYW0uY29udGFpbmVyKGRhdGEpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgU3RyZWFtLCBjbGFzcyBUMSwgY2xhc3MgVDI+CmlubGluZSB2b2lkIGNvbXBvc2l0ZShT
dHJlYW0mIHN0cmVhbSwgc3RkOjptYXA8VDEsIFQyPiYgZGF0YSkgewoJc3RyZWFtLmNvbnRhaW5l
cihkYXRhKTsKfQoKCgoKIyAzMCAiLi4vLi4vaW5jbHVkZS94dGwvYXV0b2lvLmgiIDIKCiMgMSAi
Li4vLi4vaW5jbHVkZS94dGwvdm9iamlvLmgiIDEKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCmNsYXNzIHZfYnVmZmVyIHsKIHB1YmxpYzoKCXZpcnR1YWwgdm9pZCByZWFkKGNoYXIqIHB0
ciwgaW50IHNpemUpPTA7Cgl2aXJ0dWFsIHZvaWQgd3JpdGUoY2hhciBjb25zdCogcHRyLCBpbnQg
c2l6ZSk9MDsKCgl2aXJ0dWFsIHZvaWQqIHJlcXVpcmUoaW50IHNpemUpPTA7Cgl2aXJ0dWFsIHZv
aWQgZmx1c2goKT0wOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEJ1ZmZlcj4KY2xhc3Mgdl9idWZmZXJf
d3JhcDogcHVibGljIHZfYnVmZmVyIHsKIHByb3RlY3RlZDoKCUJ1ZmZlciBidWY7CgogcHVibGlj
OgoJdmlydHVhbCB2b2lkIHJlYWQoY2hhciogcHRyLCBpbnQgc2l6ZSkge2J1Zi5yZWFkKHB0ciwg
c2l6ZSk7fQoJdmlydHVhbCB2b2lkIHdyaXRlKGNoYXIgY29uc3QqIHB0ciwgaW50IHNpemUpIHti
dWYud3JpdGUocHRyLCBzaXplKTt9CgoJdmlydHVhbCB2b2lkKiByZXF1aXJlKGludCBzaXplKSB7
cmV0dXJuIGJ1Zi5yZXF1aXJlKHNpemUpO30KCXZpcnR1YWwgdm9pZCBmbHVzaCgpIHtidWYuZmx1
c2goKTt9Cn07CgpjbGFzcyB2X21lbV9idWZmZXI6IHB1YmxpYyB2X2J1ZmZlciB7CiBwcml2YXRl
OgoJbWVtX2J1ZmZlciBidWY7CgogcHVibGljOgoJdl9tZW1fYnVmZmVyKHZvaWQgKmIsIGludCBz
aXplKTpidWYoYiwgc2l6ZSkge30KCgl2aXJ0dWFsIHZvaWQgcmVhZChjaGFyKiBwdHIsIGludCBz
aXplKSB7YnVmLnJlYWQocHRyLCBzaXplKTt9Cgl2aXJ0dWFsIHZvaWQgd3JpdGUoY2hhciBjb25z
dCogcHRyLCBpbnQgc2l6ZSkge2J1Zi53cml0ZShwdHIsIHNpemUpO30KCgl2aXJ0dWFsIHZvaWQq
IHJlcXVpcmUoaW50IHNpemUpIHtyZXR1cm4gYnVmLnJlcXVpcmUoc2l6ZSk7fQoJdmlydHVhbCB2
b2lkIGZsdXNoKCkge2J1Zi5mbHVzaCgpO30KfTsKCgoKCgoKCmNsYXNzIHZfZm9ybWF0IHsKIHB1
YmxpYzoKCXZpcnR1YWwgdm9pZCBpbnB1dF9zaW1wbGUoIGJvb2wgJiBkYXRhKT0wOyAKCXZpcnR1
YWwgdm9pZCBpbnB1dF9zaW1wbGUoIGNoYXIgJiBkYXRhKT0wOyAKCXZpcnR1YWwgdm9pZCBpbnB1
dF9zaW1wbGUoIHVuc2lnbmVkIGNoYXIgJiBkYXRhKT0wOyAKCXZpcnR1YWwgdm9pZCBpbnB1dF9z
aW1wbGUoIHNob3J0ICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQgaW5wdXRfc2ltcGxlKCB1bnNp
Z25lZCBzaG9ydCAmIGRhdGEpPTA7IAoJdmlydHVhbCB2b2lkIGlucHV0X3NpbXBsZSggaW50ICYg
ZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQgaW5wdXRfc2ltcGxlKCB1bnNpZ25lZCBpbnQgJiBkYXRh
KT0wOyAKCXZpcnR1YWwgdm9pZCBpbnB1dF9zaW1wbGUoIGxvbmcgJiBkYXRhKT0wOyAKCXZpcnR1
YWwgdm9pZCBpbnB1dF9zaW1wbGUoIHVuc2lnbmVkIGxvbmcgJiBkYXRhKT0wOyAKCXZpcnR1YWwg
dm9pZCBpbnB1dF9zaW1wbGUoIGxvbmdsb25nICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQgaW5w
dXRfc2ltcGxlKCB1bnNpZ25lZGxvbmdsb25nICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQgaW5w
dXRfc2ltcGxlKCBmbG9hdCAmIGRhdGEpPTA7IAoJdmlydHVhbCB2b2lkIGlucHV0X3NpbXBsZSgg
ZG91YmxlICYgZGF0YSk9MDsgCgkKCXZpcnR1YWwgdm9pZCBpbnB1dF9zdGFydCgpPTA7CgoJdmly
dHVhbCB2b2lkIGlucHV0X3N0YXJ0X2NvbXBvc2l0ZSgpPTA7Cgl2aXJ0dWFsIHZvaWQgaW5wdXRf
ZW5kX2NvbXBvc2l0ZSgpPTA7CgoJdmlydHVhbCB2b2lkIGlucHV0X3N0YXJ0X3ZlY3RvcigpPTA7
Cgl2aXJ0dWFsIHZvaWQgaW5wdXRfZW5kX3ZlY3RvcigpPTA7CgoJdmlydHVhbCB2b2lkIGlucHV0
X3N0YXJ0X2FycmF5KGludCYgbik9MDsKCXZpcnR1YWwgYm9vbCBpbnB1dF9lbmRfYXJyYXkoaW50
JiBuKT0wOwoKCXZpcnR1YWwgdm9pZCBpbnB1dF9jaGFycyhjaGFyKiBkYXRhLCBpbnQgc2l6ZSk9
MDsKCXZpcnR1YWwgdm9pZCBpbnB1dF9yYXcoY2hhciogZGF0YSwgaW50IHNpemUpPTA7CgoJdmly
dHVhbCB2b2lkIG91dHB1dF9zaW1wbGUoY29uc3QgIGJvb2wgJiBkYXRhKT0wOyAKCXZpcnR1YWwg
dm9pZCBvdXRwdXRfc2ltcGxlKGNvbnN0ICBjaGFyICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQg
b3V0cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWQgY2hhciAmIGRhdGEpPTA7IAoJdmlydHVhbCB2
b2lkIG91dHB1dF9zaW1wbGUoY29uc3QgIHNob3J0ICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQg
b3V0cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWQgc2hvcnQgJiBkYXRhKT0wOyAKCXZpcnR1YWwg
dm9pZCBvdXRwdXRfc2ltcGxlKGNvbnN0ICBpbnQgJiBkYXRhKT0wOyAKCXZpcnR1YWwgdm9pZCBv
dXRwdXRfc2ltcGxlKGNvbnN0ICB1bnNpZ25lZCBpbnQgJiBkYXRhKT0wOyAKCXZpcnR1YWwgdm9p
ZCBvdXRwdXRfc2ltcGxlKGNvbnN0ICBsb25nICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQgb3V0
cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWQgbG9uZyAmIGRhdGEpPTA7IAoJdmlydHVhbCB2b2lk
IG91dHB1dF9zaW1wbGUoY29uc3QgIGxvbmdsb25nICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZvaWQg
b3V0cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWRsb25nbG9uZyAmIGRhdGEpPTA7IAoJdmlydHVh
bCB2b2lkIG91dHB1dF9zaW1wbGUoY29uc3QgIGZsb2F0ICYgZGF0YSk9MDsgCgl2aXJ0dWFsIHZv
aWQgb3V0cHV0X3NpbXBsZShjb25zdCAgZG91YmxlICYgZGF0YSk9MDsgCgkKCXZpcnR1YWwgdm9p
ZCBvdXRwdXRfc3RhcnQoKT0wOwoKCXZpcnR1YWwgdm9pZCBvdXRwdXRfc3RhcnRfY29tcG9zaXRl
KCk9MDsKCXZpcnR1YWwgdm9pZCBvdXRwdXRfZW5kX2NvbXBvc2l0ZSgpPTA7CgoJdmlydHVhbCB2
b2lkIG91dHB1dF9zdGFydF92ZWN0b3IoKT0wOwoJdmlydHVhbCB2b2lkIG91dHB1dF9lbmRfdmVj
dG9yKCk9MDsKCgl2aXJ0dWFsIHZvaWQgb3V0cHV0X3N0YXJ0X2FycmF5KGludCBuKT0wOwoJdmly
dHVhbCB2b2lkIG91dHB1dF9lbmRfYXJyYXkoKT0wOwoKCXZpcnR1YWwgdm9pZCBvdXRwdXRfY2hh
cnMoY2hhciBjb25zdCogZGF0YSwgaW50IHNpemUpPTA7Cgl2aXJ0dWFsIHZvaWQgb3V0cHV0X3Jh
dyhjaGFyIGNvbnN0KiBkYXRhLCBpbnQgc2l6ZSk9MDsKCgl2aXJ0dWFsIHZvaWQgcmVzZXRfYnVm
ZmVyKCk9MDsKfTsKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0PgpjbGFzcyB2
X2Zvcm1hdF93cmFwOiBwdWJsaWMgdl9mb3JtYXQgewogcHJvdGVjdGVkOgoJRm9ybWF0IHJlcDsK
CiBwdWJsaWM6CiAJdHlwZWRlZiB0eXBlbmFtZSBGb3JtYXQ6OmJ1ZmZlciBidWZmZXI7CgoJdl9m
b3JtYXRfd3JhcChidWZmZXImIGJ1Zik6cmVwKGJ1Zikge30KCgl2aXJ0dWFsIHZvaWQgaW5wdXRf
c2ltcGxlKCBib29sICYgZGF0YSkgeyByZXAuaW5wdXRfc2ltcGxlKGRhdGEpOyB9IDsKCXZpcnR1
YWwgdm9pZCBpbnB1dF9zaW1wbGUoIGNoYXIgJiBkYXRhKSB7IHJlcC5pbnB1dF9zaW1wbGUoZGF0
YSk7IH0gOwoJdmlydHVhbCB2b2lkIGlucHV0X3NpbXBsZSggdW5zaWduZWQgY2hhciAmIGRhdGEp
IHsgcmVwLmlucHV0X3NpbXBsZShkYXRhKTsgfSA7Cgl2aXJ0dWFsIHZvaWQgaW5wdXRfc2ltcGxl
KCBzaG9ydCAmIGRhdGEpIHsgcmVwLmlucHV0X3NpbXBsZShkYXRhKTsgfSA7Cgl2aXJ0dWFsIHZv
aWQgaW5wdXRfc2ltcGxlKCB1bnNpZ25lZCBzaG9ydCAmIGRhdGEpIHsgcmVwLmlucHV0X3NpbXBs
ZShkYXRhKTsgfSA7Cgl2aXJ0dWFsIHZvaWQgaW5wdXRfc2ltcGxlKCBpbnQgJiBkYXRhKSB7IHJl
cC5pbnB1dF9zaW1wbGUoZGF0YSk7IH0gOwoJdmlydHVhbCB2b2lkIGlucHV0X3NpbXBsZSggdW5z
aWduZWQgaW50ICYgZGF0YSkgeyByZXAuaW5wdXRfc2ltcGxlKGRhdGEpOyB9IDsKCXZpcnR1YWwg
dm9pZCBpbnB1dF9zaW1wbGUoIGxvbmcgJiBkYXRhKSB7IHJlcC5pbnB1dF9zaW1wbGUoZGF0YSk7
IH0gOwoJdmlydHVhbCB2b2lkIGlucHV0X3NpbXBsZSggdW5zaWduZWQgbG9uZyAmIGRhdGEpIHsg
cmVwLmlucHV0X3NpbXBsZShkYXRhKTsgfSA7Cgl2aXJ0dWFsIHZvaWQgaW5wdXRfc2ltcGxlKCBs
b25nbG9uZyAmIGRhdGEpIHsgcmVwLmlucHV0X3NpbXBsZShkYXRhKTsgfSA7Cgl2aXJ0dWFsIHZv
aWQgaW5wdXRfc2ltcGxlKCB1bnNpZ25lZGxvbmdsb25nICYgZGF0YSkgeyByZXAuaW5wdXRfc2lt
cGxlKGRhdGEpOyB9IDsKCXZpcnR1YWwgdm9pZCBpbnB1dF9zaW1wbGUoIGZsb2F0ICYgZGF0YSkg
eyByZXAuaW5wdXRfc2ltcGxlKGRhdGEpOyB9IDsKCXZpcnR1YWwgdm9pZCBpbnB1dF9zaW1wbGUo
IGRvdWJsZSAmIGRhdGEpIHsgcmVwLmlucHV0X3NpbXBsZShkYXRhKTsgfSA7CgoJdmlydHVhbCB2
b2lkIGlucHV0X3N0YXJ0KCkge3JlcC5pbnB1dF9zdGFydCgpO30KCgl2aXJ0dWFsIHZvaWQgaW5w
dXRfc3RhcnRfY29tcG9zaXRlKCkge3JlcC5pbnB1dF9zdGFydF9jb21wb3NpdGUoKTt9Cgl2aXJ0
dWFsIHZvaWQgaW5wdXRfZW5kX2NvbXBvc2l0ZSgpIHtyZXAuaW5wdXRfZW5kX2NvbXBvc2l0ZSgp
O30KCgl2aXJ0dWFsIHZvaWQgaW5wdXRfc3RhcnRfdmVjdG9yKCkge3JlcC5pbnB1dF9zdGFydF92
ZWN0b3IoKTt9Cgl2aXJ0dWFsIHZvaWQgaW5wdXRfZW5kX3ZlY3RvcigpIHtyZXAuaW5wdXRfZW5k
X3ZlY3RvcigpO30KCgl2aXJ0dWFsIHZvaWQgaW5wdXRfc3RhcnRfYXJyYXkoaW50JiBuKSB7cmVw
LmlucHV0X3N0YXJ0X2FycmF5KG4pO30KCXZpcnR1YWwgYm9vbCBpbnB1dF9lbmRfYXJyYXkoaW50
JiBuKSB7cmV0dXJuIHJlcC5pbnB1dF9lbmRfYXJyYXkobik7fQoKCXZpcnR1YWwgdm9pZCBpbnB1
dF9jaGFycyhjaGFyKiBkYXRhLCBpbnQgc2l6ZSkge3JlcC5pbnB1dF9jaGFycyhkYXRhLCBzaXpl
KTt9Cgl2aXJ0dWFsIHZvaWQgaW5wdXRfcmF3KGNoYXIqIGRhdGEsIGludCBzaXplKSB7cmVwLmlu
cHV0X3JhdyhkYXRhLCBzaXplKTt9CgoJdmlydHVhbCB2b2lkIG91dHB1dF9zaW1wbGUoY29uc3Qg
IGJvb2wgJiBkYXRhKSB7IHJlcC5vdXRwdXRfc2ltcGxlKGRhdGEpOyB9IDsKCXZpcnR1YWwgdm9p
ZCBvdXRwdXRfc2ltcGxlKGNvbnN0ICBjaGFyICYgZGF0YSkgeyByZXAub3V0cHV0X3NpbXBsZShk
YXRhKTsgfSA7Cgl2aXJ0dWFsIHZvaWQgb3V0cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWQgY2hh
ciAmIGRhdGEpIHsgcmVwLm91dHB1dF9zaW1wbGUoZGF0YSk7IH0gOwoJdmlydHVhbCB2b2lkIG91
dHB1dF9zaW1wbGUoY29uc3QgIHNob3J0ICYgZGF0YSkgeyByZXAub3V0cHV0X3NpbXBsZShkYXRh
KTsgfSA7Cgl2aXJ0dWFsIHZvaWQgb3V0cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWQgc2hvcnQg
JiBkYXRhKSB7IHJlcC5vdXRwdXRfc2ltcGxlKGRhdGEpOyB9IDsKCXZpcnR1YWwgdm9pZCBvdXRw
dXRfc2ltcGxlKGNvbnN0ICBpbnQgJiBkYXRhKSB7IHJlcC5vdXRwdXRfc2ltcGxlKGRhdGEpOyB9
IDsKCXZpcnR1YWwgdm9pZCBvdXRwdXRfc2ltcGxlKGNvbnN0ICB1bnNpZ25lZCBpbnQgJiBkYXRh
KSB7IHJlcC5vdXRwdXRfc2ltcGxlKGRhdGEpOyB9IDsKCXZpcnR1YWwgdm9pZCBvdXRwdXRfc2lt
cGxlKGNvbnN0ICBsb25nICYgZGF0YSkgeyByZXAub3V0cHV0X3NpbXBsZShkYXRhKTsgfSA7Cgl2
aXJ0dWFsIHZvaWQgb3V0cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWQgbG9uZyAmIGRhdGEpIHsg
cmVwLm91dHB1dF9zaW1wbGUoZGF0YSk7IH0gOwoJdmlydHVhbCB2b2lkIG91dHB1dF9zaW1wbGUo
Y29uc3QgIGxvbmdsb25nICYgZGF0YSkgeyByZXAub3V0cHV0X3NpbXBsZShkYXRhKTsgfSA7Cgl2
aXJ0dWFsIHZvaWQgb3V0cHV0X3NpbXBsZShjb25zdCAgdW5zaWduZWRsb25nbG9uZyAmIGRhdGEp
IHsgcmVwLm91dHB1dF9zaW1wbGUoZGF0YSk7IH0gOwoJdmlydHVhbCB2b2lkIG91dHB1dF9zaW1w
bGUoY29uc3QgIGZsb2F0ICYgZGF0YSkgeyByZXAub3V0cHV0X3NpbXBsZShkYXRhKTsgfSA7Cgl2
aXJ0dWFsIHZvaWQgb3V0cHV0X3NpbXBsZShjb25zdCAgZG91YmxlICYgZGF0YSkgeyByZXAub3V0
cHV0X3NpbXBsZShkYXRhKTsgfSA7CgkKCXZpcnR1YWwgdm9pZCBvdXRwdXRfc3RhcnQoKSB7cmVw
Lm91dHB1dF9zdGFydCgpO30KCgl2aXJ0dWFsIHZvaWQgb3V0cHV0X3N0YXJ0X2NvbXBvc2l0ZSgp
IHtyZXAub3V0cHV0X3N0YXJ0X2NvbXBvc2l0ZSgpO30KCXZpcnR1YWwgdm9pZCBvdXRwdXRfZW5k
X2NvbXBvc2l0ZSgpIHtyZXAub3V0cHV0X2VuZF9jb21wb3NpdGUoKTt9CgoJdmlydHVhbCB2b2lk
IG91dHB1dF9zdGFydF92ZWN0b3IoKSB7cmVwLm91dHB1dF9zdGFydF92ZWN0b3IoKTt9Cgl2aXJ0
dWFsIHZvaWQgb3V0cHV0X2VuZF92ZWN0b3IoKSB7cmVwLm91dHB1dF9lbmRfdmVjdG9yKCk7fQoK
CXZpcnR1YWwgdm9pZCBvdXRwdXRfc3RhcnRfYXJyYXkoaW50IG4pIHtyZXAub3V0cHV0X3N0YXJ0
X2FycmF5KG4pO30KCXZpcnR1YWwgdm9pZCBvdXRwdXRfZW5kX2FycmF5KCkge3JlcC5vdXRwdXRf
ZW5kX2FycmF5KCk7fQoKCXZpcnR1YWwgdm9pZCBvdXRwdXRfY2hhcnMoY2hhciBjb25zdCogZGF0
YSwgaW50IHNpemUpIHtyZXAub3V0cHV0X2NoYXJzKGRhdGEsIHNpemUpO30KCXZpcnR1YWwgdm9p
ZCBvdXRwdXRfcmF3KGNoYXIgY29uc3QqIGRhdGEsIGludCBzaXplKSB7cmVwLm91dHB1dF9yYXco
ZGF0YSwgc2l6ZSk7fQoKCXZpcnR1YWwgdm9pZCByZXNldF9idWZmZXIoKSB7IHJlcC5yZXNldF9i
dWZmZXIoKTsgfQp9OwoKCgoKCgojIDMxICIuLi8uLi9pbmNsdWRlL3h0bC9hdXRvaW8uaCIgMgoK
CgoKY2xhc3MgcmVhZGVyOwoKdHlwZWRlZiBzdGQ6Om1hcDxpbnQsIHJlYWRlcio+IGV4dGVybmFs
aXphYmxlX2luZGV4OwoKY2xhc3MgZXh0ZXJuYWxpemFibGVfYmFzZTsKCmNsYXNzIHJlYWRlciB7
CiBwcml2YXRlOgoJaW50IGlkOwoKIHB1YmxpYzoKIAlyZWFkZXIoaW50IGksIHN0ZDo6bWFwPGlu
dCwgcmVhZGVyKj4mIHJlcG8pOmlkKGkpIHsKCQlzdGQ6Om1hcDxpbnQsIHJlYWRlcio+Ojpjb25z
dF9pdGVyYXRvciB0PXJlcG8uZmluZChpZCk7CgkJaWYgKHQhPXJlcG8uZW5kKCkpCgkJCXRocm93
IHN0ZDo6bG9naWNfZXJyb3IoInJlZ2lzdGVyaW5nIGR1cGxpY2F0ZSBjbGFzcyBpZCIpOwoJCXJl
cG8uaW5zZXJ0KHN0ZDo6cGFpcjxjb25zdCBpbnQsIHJlYWRlcio+KGlkLCB0aGlzKSk7Cgl9Cgog
CXZpcnR1YWwgZXh0ZXJuYWxpemFibGVfYmFzZSogcmVhZChvYmpfaW5wdXQ8dl9mb3JtYXQ+JiBz
dHJlYW0pPTA7CgoJaW50IGNsYXNzaWQoKSBjb25zdCB7cmV0dXJuIGlkO30KfTsKCnRlbXBsYXRl
IDxjbGFzcyBUPgpjbGFzcyBjb25jcmV0ZV9yZWFkZXI6IHB1YmxpYyByZWFkZXIgewogcHVibGlj
OgogCWNvbmNyZXRlX3JlYWRlcihpbnQgaSwgc3RkOjptYXA8aW50LCByZWFkZXIqPiYgcmVwbyk6
cmVhZGVyKGksIHJlcG8pIHt9CgogCXZpcnR1YWwgZXh0ZXJuYWxpemFibGVfYmFzZSogcmVhZChv
YmpfaW5wdXQ8dl9mb3JtYXQ+JiBzdHJlYW0pIHsKCQlUKiBwdHI9bmV3IFQ7CgkJcHRyLT52Y29t
cG9zaXRlKHN0cmVhbSk7CgkJcmV0dXJuIHB0cjsKCX0KfTsKCmNsYXNzIGV4dGVybmFsaXphYmxl
X2Jhc2UgewogcHVibGljOgogCWludCBjbGFzc2lkKCkgY29uc3Qge3JldHVybiBpbmZvKCkuY2xh
c3NpZCgpO30KIAl2aXJ0dWFsIHJlYWRlciYgaW5mbygpIGNvbnN0PTA7CgkKCXZpcnR1YWwgdm9p
ZCB2Y29tcG9zaXRlKG9ial9vdXRwdXQ8dl9mb3JtYXQ+JiBzdHJlYW0pIGNvbnN0PTA7Cgl2aXJ0
dWFsIHZvaWQgdmNvbXBvc2l0ZShvYmpfaW5wdXQ8dl9mb3JtYXQ+JiBzdHJlYW0pPTA7Cn07Cgpj
bGFzcyBhdXRvX29ial9pbnB1dDogcHVibGljIG9ial9pbnB1dDx2X2Zvcm1hdD4gewogcHJpdmF0
ZToKIAljb25zdCBzdGQ6Om1hcDxpbnQsIHJlYWRlcio+JiByZXBvOwoKIHB1YmxpYzoKIAlhdXRv
X29ial9pbnB1dCh2X2Zvcm1hdCYgZiwgY29uc3Qgc3RkOjptYXA8aW50LCByZWFkZXIqPiYgcik6
CgkJb2JqX2lucHV0PHZfZm9ybWF0PihmKSwgcmVwbyhyKSB7fQoKIAl0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KIAlhdXRvX29ial9pbnB1dCYgYXV0b19vYmplY3QoVComIGRhdGEpIHsKCQlpbnQgaWQ9MDsK
CQlzaW1wbGUoaWQpOwoJCXN0ZDo6bWFwPGludCwgcmVhZGVyKj46OmNvbnN0X2l0ZXJhdG9yIHQ9
cmVwby5maW5kKGlkKTsKCQlpZiAodD09cmVwby5lbmQoKSkKCQkJdGhyb3cgc3RkOjpsb2dpY19l
cnJvcigidW5rbm93biBjbGFzcyBpZCIpOwoJCWV4dGVybmFsaXphYmxlX2Jhc2UqIHB0cj0oKnQp
LnNlY29uZC0+cmVhZCgqdGhpcyk7CgkJZGF0YT1keW5hbWljX2Nhc3Q8VCo+KHB0cik7CgkJcmV0
dXJuICp0aGlzOwoJfQp9OwoKY2xhc3MgYXV0b19vYmpfb3V0cHV0OiBwdWJsaWMgb2JqX291dHB1
dDx2X2Zvcm1hdD4gewogcHVibGljOgogCWF1dG9fb2JqX291dHB1dCh2X2Zvcm1hdCYgZik6b2Jq
X291dHB1dDx2X2Zvcm1hdD4oZikge30KCiAJdGVtcGxhdGUgPGNsYXNzIFQ+CiAJYXV0b19vYmpf
b3V0cHV0JiBhdXRvX29iamVjdChUKiYgZGF0YSkgewoJCWNvbnN0IGV4dGVybmFsaXphYmxlX2Jh
c2UqIHB0cj1kYXRhOwoJCWludCBpZD1wdHItPmNsYXNzaWQoKTsKCQlzaW1wbGUoaWQpOwoJCXB0
ci0+dmNvbXBvc2l0ZSgqdGhpcyk7CgkJcmV0dXJuICp0aGlzOwoJfQp9OwoKCiMgMTIzICIuLi8u
Li9pbmNsdWRlL3h0bC9hdXRvaW8uaCIKCgoKCgojIDEzICJhdXRvLmNwcCIgMgoKIyAxICIuLi8u
Li9pbmNsdWRlL3h0bC94ZHIuaCIgMQogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
IAogCiAKCgoKCgoKCgoKIyA1MiAiLi4vLi4vaW5jbHVkZS94dGwveGRyLmgiCgoKCgoKCgoKCiMg
NjkgIi4uLy4uL2luY2x1ZGUveHRsL3hkci5oIgoKIAogCgoKCgoKCgppbmxpbmUgdm9pZCBfeHRs
X2JpZ19lbmQoY2hhciBjb25zdCBpbltdLCBjaGFyIG91dFtdKSB7CiAJKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4ob3V0KSA9CgkgICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGludCo+KGluKTsKfQoKICAKdGVtcGxhdGUgPGNsYXNzIEJ1ZmZlcj4KY2xhc3MgWERSX2Zv
cm1hdDogcHVibGljIGdlbmVyaWNfZm9ybWF0PEJ1ZmZlcj4gewogcHJpdmF0ZToKIHB1YmxpYzoK
CXR5cGVkZWYgQnVmZmVyIGJ1ZmZlcjsKCglYRFJfZm9ybWF0KEJ1ZmZlciYgYnVmKTpnZW5lcmlj
X2Zvcm1hdDxCdWZmZXI+KGJ1Zikge30KCQoJdGVtcGxhdGUgPGNsYXNzIElkeD4KCXZvaWQgaW5w
dXRfc3RhcnRfYXJyYXkoSWR4JiBuKSB7aW5wdXRfc2ltcGxlKG4pO30KCXRlbXBsYXRlIDxjbGFz
cyBJZHg+Cglib29sIGlucHV0X2VuZF9hcnJheShJZHgmIG4pIHtyZXR1cm4gbi0tPD0wO30KCgl2
b2lkIGlucHV0X3NpbXBsZSggYm9vbCAmIGRhdGEpIHsgICBpbnQgIHN0b3JlOyBfeHRsX2JpZ19l
bmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQpICksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCAmc3RvcmUgKSApOyBkYXRhID0gc3RhdGljX2Nhc3Q8IGJvb2wgPiggc3RvcmUg
KTsgfSAKCXZvaWQgaW5wdXRfc2ltcGxlKCBjaGFyICYgZGF0YSkgeyAgIGludCAgc3RvcmU7IF94
dGxfYmlnX2VuZCggcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oICZzdG9yZSApICk7IGRhdGEgPSBzdGF0aWNfY2FzdDwgY2hhciA+
KCBzdG9yZSApOyB9IAoJdm9pZCBpbnB1dF9zaW1wbGUoIHVuc2lnbmVkIGNoYXIgJiBkYXRhKSB7
ICAgaW50ICBzdG9yZTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9jYXN0PGNoYXIqPiggcmVx
dWlyZSg0KSApLCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlICkgKTsgZGF0YSA9IHN0
YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFyID4oIHN0b3JlICk7IH0gCgl2b2lkIGlucHV0X3NpbXBs
ZSggc2hvcnQgJiBkYXRhKSB7ICAgaW50ICBzdG9yZTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJl
dF9jYXN0PGNoYXIqPiggcmVxdWlyZSg0KSApLCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0
b3JlICkgKTsgZGF0YSA9IHN0YXRpY19jYXN0PCBzaG9ydCA+KCBzdG9yZSApOyB9IAoJdm9pZCBp
bnB1dF9zaW1wbGUoIHVuc2lnbmVkIHNob3J0ICYgZGF0YSkgeyAgIGludCAgc3RvcmU7IF94dGxf
YmlnX2VuZCggcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oICZzdG9yZSApICk7IGRhdGEgPSBzdGF0aWNfY2FzdDwgdW5zaWduZWQg
c2hvcnQgPiggc3RvcmUgKTsgfSAKCXZvaWQgaW5wdXRfc2ltcGxlKCBpbnQgJiBkYXRhKSB7ICAg
aW50ICBzdG9yZTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9jYXN0PGNoYXIqPiggcmVxdWly
ZSg0KSApLCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlICkgKTsgZGF0YSA9IHN0YXRp
Y19jYXN0PCBpbnQgPiggc3RvcmUgKTsgfSAKCXZvaWQgaW5wdXRfc2ltcGxlKCB1bnNpZ25lZCBp
bnQgJiBkYXRhKSB7ICAgaW50ICBzdG9yZTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9jYXN0
PGNoYXIqPiggcmVxdWlyZSg0KSApLCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlICkg
KTsgZGF0YSA9IHN0YXRpY19jYXN0PCB1bnNpZ25lZCBpbnQgPiggc3RvcmUgKTsgfSAKCXZvaWQg
aW5wdXRfc2ltcGxlKCBsb25nICYgZGF0YSkgeyAgIGludCAgc3RvcmU7IF94dGxfYmlnX2VuZCgg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oICZzdG9yZSApICk7IGRhdGEgPSBzdGF0aWNfY2FzdDwgbG9uZyA+KCBzdG9yZSApOyB9
IAoJdm9pZCBpbnB1dF9zaW1wbGUoIHVuc2lnbmVkIGxvbmcgJiBkYXRhKSB7ICAgaW50ICBzdG9y
ZTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9jYXN0PGNoYXIqPiggcmVxdWlyZSg0KSApLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlICkgKTsgZGF0YSA9IHN0YXRpY19jYXN0PCB1
bnNpZ25lZCBsb25nID4oIHN0b3JlICk7IH0gCgl2b2lkIGlucHV0X3NpbXBsZSggbG9uZ2xvbmcg
JiBkYXRhKSB7IHVuaW9uIHsgICBsb25nbG9uZyAgbGw7IGludCBpWzJdOyB9IHN0b3JlOyBfeHRs
X2JpZ19lbmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQpICksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KCAmc3RvcmUuaVswXSApICk7IF94dGxfYmlnX2VuZCggcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oICZz
dG9yZS5pWzFdICkgKTsgZGF0YSA9IHN0YXRpY19jYXN0PCBsb25nbG9uZyA+KCBzdG9yZS5sbCAp
OyB9IAoJdm9pZCBpbnB1dF9zaW1wbGUoIHVuc2lnbmVkbG9uZ2xvbmcgJiBkYXRhKSB7IHVuaW9u
IHsgICBsb25nbG9uZyAgbGw7IGludCBpWzJdOyB9IHN0b3JlOyBfeHRsX2JpZ19lbmQoIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQpICksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KCAmc3RvcmUuaVswXSApICk7IF94dGxfYmlnX2VuZCggcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
IHJlcXVpcmUoNCkgKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oICZzdG9yZS5pWzFdICkgKTsg
ZGF0YSA9IHN0YXRpY19jYXN0PCB1bnNpZ25lZGxvbmdsb25nID4oIHN0b3JlLmxsICk7IH0gCgl2
b2lkIGlucHV0X3NpbXBsZSggZmxvYXQgJiBkYXRhKSB7ICAgZmxvYXQgIHN0b3JlOyBfeHRsX2Jp
Z19lbmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQpICksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KCAmc3RvcmUgKSApOyBkYXRhID0gc3RhdGljX2Nhc3Q8IGZsb2F0ID4oIHN0
b3JlICk7IH0gCgl2b2lkIGlucHV0X3NpbXBsZSggZG91YmxlICYgZGF0YSkgeyB1bmlvbiB7ICAg
ZG91YmxlICBsbDsgaW50IGlbMl07IH0gc3RvcmU7IF94dGxfYmlnX2VuZCggcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oICZzdG9y
ZS5pWzBdICkgKTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9jYXN0PGNoYXIqPiggcmVxdWly
ZSg0KSApLCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlLmlbMV0gKSApOyBkYXRhID0g
c3RhdGljX2Nhc3Q8IGRvdWJsZSA+KCBzdG9yZS5sbCApOyB9IAoKCXZvaWQgaW5wdXRfY2hhcnMo
Y2hhciogZGF0YSwgaW50IHNpemUpIHsKCQlpbnB1dF9yYXcoZGF0YSwgc2l6ZSk7Cgl9CgoJIAoJ
dm9pZCBpbnB1dF9yYXcoY2hhciogZGF0YSwgaW50IHNpemUpIHsKCQlpbnQgaTsKCQlmb3IoaT0w
O2k8KHNpemU+PjgpLTE7aSsrLGRhdGErPTI1NikKCQkJc3RkOjptZW1jcHkoZGF0YSwgcmVxdWly
ZSgyNTYpLCAyNTYpOwoJCWludCByZXM9c2l6ZS0oaTw8OCk7CgkJc3RkOjptZW1jcHkoZGF0YSwg
cmVxdWlyZShyZXMpLCByZXMpOwoJCWlmIChyZXMlNCE9MCkKCQkJcmVxdWlyZSg0LXJlcyU0KTsK
CX0KCgl0ZW1wbGF0ZSA8Y2xhc3MgSWR4PgoJdm9pZCBvdXRwdXRfc3RhcnRfYXJyYXkoSWR4IG4p
IHtvdXRwdXRfc2ltcGxlKG4pO30KCXZvaWQgb3V0cHV0X2VuZF9hcnJheSgpIHt9CgoJdm9pZCBv
dXRwdXRfc2ltcGxlKCBib29sICBjb25zdCYgZGF0YSkgeyAgIGludCAgc3RvcmUgPSBzdGF0aWNf
Y2FzdDwgIGludCA+KCBkYXRhICk7IF94dGxfYmlnX2VuZCggcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oICZzdG9yZSApLCByZWludGVycHJldF9jYXN0PGNoYXIqPiggcmVxdWlyZSg0KSApICk7IH0g
Cgl2b2lkIG91dHB1dF9zaW1wbGUoIGNoYXIgIGNvbnN0JiBkYXRhKSB7ICAgaW50ICBzdG9yZSA9
IHN0YXRpY19jYXN0PCAgaW50ID4oIGRhdGEgKTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9j
YXN0PGNoYXIqPiggJnN0b3JlICksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQp
ICkgKTsgfSAKCXZvaWQgb3V0cHV0X3NpbXBsZSggdW5zaWduZWQgY2hhciAgY29uc3QmIGRhdGEp
IHsgICBpbnQgIHN0b3JlID0gc3RhdGljX2Nhc3Q8ICBpbnQgPiggZGF0YSApOyBfeHRsX2JpZ19l
bmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCAmc3RvcmUgKSwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oIHJlcXVpcmUoNCkgKSApOyB9IAoJdm9pZCBvdXRwdXRfc2ltcGxlKCBzaG9ydCAgY29u
c3QmIGRhdGEpIHsgICBpbnQgIHN0b3JlID0gc3RhdGljX2Nhc3Q8ICBpbnQgPiggZGF0YSApOyBf
eHRsX2JpZ19lbmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCAmc3RvcmUgKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSApOyB9IAoJdm9pZCBvdXRwdXRfc2ltcGxlKCB1
bnNpZ25lZCBzaG9ydCAgY29uc3QmIGRhdGEpIHsgICBpbnQgIHN0b3JlID0gc3RhdGljX2Nhc3Q8
ICBpbnQgPiggZGF0YSApOyBfeHRsX2JpZ19lbmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCAm
c3RvcmUgKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSApOyB9IAoJdm9p
ZCBvdXRwdXRfc2ltcGxlKCBpbnQgIGNvbnN0JiBkYXRhKSB7ICAgaW50ICBzdG9yZSA9IHN0YXRp
Y19jYXN0PCAgaW50ID4oIGRhdGEgKTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9jYXN0PGNo
YXIqPiggJnN0b3JlICksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQpICkgKTsg
fSAKCXZvaWQgb3V0cHV0X3NpbXBsZSggdW5zaWduZWQgaW50ICBjb25zdCYgZGF0YSkgeyAgIGlu
dCAgc3RvcmUgPSBzdGF0aWNfY2FzdDwgIGludCA+KCBkYXRhICk7IF94dGxfYmlnX2VuZCggcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oICZzdG9yZSApLCByZWludGVycHJldF9jYXN0PGNoYXIqPigg
cmVxdWlyZSg0KSApICk7IH0gCgl2b2lkIG91dHB1dF9zaW1wbGUoIGxvbmcgIGNvbnN0JiBkYXRh
KSB7ICAgaW50ICBzdG9yZSA9IHN0YXRpY19jYXN0PCAgaW50ID4oIGRhdGEgKTsgX3h0bF9iaWdf
ZW5kKCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlICksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KCByZXF1aXJlKDQpICkgKTsgfSAKCXZvaWQgb3V0cHV0X3NpbXBsZSggdW5zaWduZWQg
bG9uZyAgY29uc3QmIGRhdGEpIHsgICBpbnQgIHN0b3JlID0gc3RhdGljX2Nhc3Q8ICBpbnQgPigg
ZGF0YSApOyBfeHRsX2JpZ19lbmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCAmc3RvcmUgKSwg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSApOyB9IAoJdm9pZCBvdXRwdXRf
c2ltcGxlKCBsb25nbG9uZyAgY29uc3QmIGRhdGEpIHsgdW5pb24geyAgIGxvbmdsb25nICBsbDsg
aW50IGlbMl07IH0gc3RvcmU7IHN0b3JlLmxsID0gc3RhdGljX2Nhc3Q8ICBsb25nbG9uZyA+KCBk
YXRhICk7IF94dGxfYmlnX2VuZCggcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oICZzdG9yZS5pWzBd
ICksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQpICkgKTsgX3h0bF9iaWdfZW5k
KCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlLmlbMV0gKSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oIHJlcXVpcmUoNCkgKSApOyB9IAoJdm9pZCBvdXRwdXRfc2ltcGxlKCB1bnNpZ25l
ZGxvbmdsb25nICBjb25zdCYgZGF0YSkgeyB1bmlvbiB7ICAgbG9uZ2xvbmcgIGxsOyBpbnQgaVsy
XTsgfSBzdG9yZTsgc3RvcmUubGwgPSBzdGF0aWNfY2FzdDwgIGxvbmdsb25nID4oIGRhdGEgKTsg
X3h0bF9iaWdfZW5kKCByZWludGVycHJldF9jYXN0PGNoYXIqPiggJnN0b3JlLmlbMF0gKSwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSApOyBfeHRsX2JpZ19lbmQoIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KCAmc3RvcmUuaVsxXSApLCByZWludGVycHJldF9jYXN0PGNoYXIq
PiggcmVxdWlyZSg0KSApICk7IH0gCgl2b2lkIG91dHB1dF9zaW1wbGUoIGZsb2F0ICBjb25zdCYg
ZGF0YSkgeyAgIGZsb2F0ICBzdG9yZSA9IHN0YXRpY19jYXN0PCAgZmxvYXQgPiggZGF0YSApOyBf
eHRsX2JpZ19lbmQoIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCAmc3RvcmUgKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oIHJlcXVpcmUoNCkgKSApOyB9IAoJdm9pZCBvdXRwdXRfc2ltcGxlKCBk
b3VibGUgIGNvbnN0JiBkYXRhKSB7IHVuaW9uIHsgICBkb3VibGUgIGxsOyBpbnQgaVsyXTsgfSBz
dG9yZTsgc3RvcmUubGwgPSBzdGF0aWNfY2FzdDwgIGRvdWJsZSA+KCBkYXRhICk7IF94dGxfYmln
X2VuZCggcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oICZzdG9yZS5pWzBdICksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KCByZXF1aXJlKDQpICkgKTsgX3h0bF9iaWdfZW5kKCByZWludGVycHJldF9j
YXN0PGNoYXIqPiggJnN0b3JlLmlbMV0gKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oIHJlcXVp
cmUoNCkgKSApOyB9IAoKCXZvaWQgb3V0cHV0X2NoYXJzKGNoYXIgY29uc3QqIGRhdGEsIGludCBz
aXplKSB7CgkJb3V0cHV0X3JhdyhkYXRhLCBzaXplKTsKCX0KCgkgCgl2b2lkIG91dHB1dF9yYXco
Y2hhciBjb25zdCogZGF0YSwgaW50IHNpemUpIHsKCQlpbnQgaTsKCQlmb3IoaT0wO2k8KHNpemU+
PjgpLTE7aSsrLGRhdGErPTI1NikKCQkJc3RkOjptZW1jcHkoZGVzaXJlKDI1NiksIGRhdGEsIDI1
Nik7CgkJaW50IHJlcz1zaXplLShpPDw4KTsKCQlzdGQ6Om1lbWNweShkZXNpcmUocmVzKSwgZGF0
YSwgcmVzKTsKCQlpZiAocmVzJTQhPTApCgkJCXN0ZDo6bWVtc2V0KGRlc2lyZSg0LXJlcyU0KSwg
MCwgNC1yZXMlNCk7Cgl9Cn07CgoKCgoKCgojIDE0ICJhdXRvLmNwcCIgMgoKCmNsYXNzIG9iajog
cHVibGljIGV4dGVybmFsaXphYmxlX2Jhc2UgewogcHJpdmF0ZToKIAlwdWJsaWM6CXZpcnR1YWwg
cmVhZGVyJiBpbmZvKCkgY29uc3Qge3JldHVybiBteWluZm87fQl2aXJ0dWFsIHZvaWQgdmNvbXBv
c2l0ZShvYmpfb3V0cHV0PHZfZm9ybWF0PiYgc3RyZWFtKSBjb25zdAl7Y29uc3RfY2FzdDwgb2Jq
ICo+KHRoaXMpLT5jb21wb3NpdGUoc3RyZWFtKTt9CXZpcnR1YWwgdm9pZCB2Y29tcG9zaXRlKG9i
al9pbnB1dDx2X2Zvcm1hdD4mIHN0cmVhbSkJe2NvbXBvc2l0ZShzdHJlYW0pO31wcml2YXRlOglz
dGF0aWMgY29uY3JldGVfcmVhZGVyPCBvYmogPiBteWluZm8gOwoKIAlpbnQgYSwgYjsKIAkKIHB1
YmxpYzoKIAl0ZW1wbGF0ZSA8Y2xhc3MgU3RyZWFtPgoJdm9pZCBjb21wb3NpdGUoU3RyZWFtJiBz
dHJlYW0pIHsKCQlzdHJlYW0uc2ltcGxlKGEpLnNpbXBsZShiKTsKCX0KCgl2aXJ0dWFsIHZvaWQg
aGVsbG8oKSB7CgkJc3RkOjpjb3V0IDw8ICJTb3UgdW0gb2JqIiA8PCBzdGQ6OmVuZGw7Cgl9Cn07
CgpjbGFzcyBkZXJpdl9vYmo6IHB1YmxpYyBvYmogewogcHJpdmF0ZToKIAlwdWJsaWM6CXZpcnR1
YWwgcmVhZGVyJiBpbmZvKCkgY29uc3Qge3JldHVybiBteWluZm87fQl2aXJ0dWFsIHZvaWQgdmNv
bXBvc2l0ZShvYmpfb3V0cHV0PHZfZm9ybWF0PiYgc3RyZWFtKSBjb25zdAl7Y29uc3RfY2FzdDwg
ZGVyaXZfb2JqICo+KHRoaXMpLT5jb21wb3NpdGUoc3RyZWFtKTt9CXZpcnR1YWwgdm9pZCB2Y29t
cG9zaXRlKG9ial9pbnB1dDx2X2Zvcm1hdD4mIHN0cmVhbSkJe2NvbXBvc2l0ZShzdHJlYW0pO31w
cml2YXRlOglzdGF0aWMgY29uY3JldGVfcmVhZGVyPCBkZXJpdl9vYmogPiBteWluZm8gOwoKIAlp
bnQgYywgZDsKIAkKIHB1YmxpYzoKIAl0ZW1wbGF0ZSA8Y2xhc3MgU3RyZWFtPgoJdm9pZCBjb21w
b3NpdGUoU3RyZWFtJiBzdHJlYW0pIHsKCQlvYmo6OmNvbXBvc2l0ZShzdHJlYW0pOwoJCXN0cmVh
bS5zaW1wbGUoYykuc2ltcGxlKGQpOwoJfQoKCXZpcnR1YWwgdm9pZCBoZWxsbygpIHsKCQlzdGQ6
OmNvdXQgPDwgIlNvdSB1bSBkZXJpdl9vYmoiIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCmNsYXNzIG90
aGVyOiBwdWJsaWMgb2JqIHsKIHByaXZhdGU6CiAJcHVibGljOgl2aXJ0dWFsIHJlYWRlciYgaW5m
bygpIGNvbnN0IHtyZXR1cm4gbXlpbmZvO30JdmlydHVhbCB2b2lkIHZjb21wb3NpdGUob2JqX291
dHB1dDx2X2Zvcm1hdD4mIHN0cmVhbSkgY29uc3QJe2NvbnN0X2Nhc3Q8IG90aGVyICo+KHRoaXMp
LT5jb21wb3NpdGUoc3RyZWFtKTt9CXZpcnR1YWwgdm9pZCB2Y29tcG9zaXRlKG9ial9pbnB1dDx2
X2Zvcm1hdD4mIHN0cmVhbSkJe2NvbXBvc2l0ZShzdHJlYW0pO31wcml2YXRlOglzdGF0aWMgY29u
Y3JldGVfcmVhZGVyPCBvdGhlciA+IG15aW5mbyA7CgogCWludCBhOwogCQogcHVibGljOgogCXRl
bXBsYXRlIDxjbGFzcyBTdHJlYW0+Cgl2b2lkIGNvbXBvc2l0ZShTdHJlYW0mIHN0cmVhbSkgewoJ
CW9iajo6Y29tcG9zaXRlKHN0cmVhbSk7CgkJc3RyZWFtLnNpbXBsZShhKTsKCX0KCgl2aXJ0dWFs
IHZvaWQgaGVsbG8oKSB7CgkJc3RkOjpjb3V0IDw8ICJTb3UgdW0gb3RoZXIiIDw8IHN0ZDo6ZW5k
bDsKCX0KfTsKCmV4dGVybmFsaXphYmxlX2luZGV4IGlkeDsKY29uY3JldGVfcmVhZGVyPCBvYmog
PiAgb2JqIDo6bXlpbmZvKCAgNjkgLCAgIGlkeCApIDsKY29uY3JldGVfcmVhZGVyPCBkZXJpdl9v
YmogPiAgZGVyaXZfb2JqIDo6bXlpbmZvKCAgMTA1ICwgICBpZHggKSA7CmNvbmNyZXRlX3JlYWRl
cjwgb3RoZXIgPiAgb3RoZXIgOjpteWluZm8oICA0NSAsICAgaWR4ICkgOwoKaW50IG1haW4oKSB7
CgljaGFyIGJ1ZlsxMDAwXTsKCW1lbV9idWZmZXIgbWIoYnVmLCAxMDAwKTsKCXZfZm9ybWF0X3dy
YXA8WERSX2Zvcm1hdDxtZW1fYnVmZmVyPiA+IHRmKG1iKTsKCWF1dG9fb2JqX291dHB1dCBvcyh0
Zik7CgoJb2JqKiB0MT1uZXcgb2JqOwoJb2JqKiB0Mj1uZXcgZGVyaXZfb2JqOwoJb2JqKiB0Mz1u
ZXcgb3RoZXI7CgoJdDEtPmhlbGxvKCk7Cgl0Mi0+aGVsbG8oKTsKCXQzLT5oZWxsbygpOwoKCW9z
LmF1dG9fb2JqZWN0KHQxKTsKCW9zLmF1dG9fb2JqZWN0KHQyKTsKCW9zLmF1dG9fb2JqZWN0KHQz
KTsKCglkZWxldGUgdDE7IGRlbGV0ZSB0MjsgZGVsZXRlIHQzOwoJdDE9dDI9dDM9IF9fbnVsbCA7
CgoJc3RkOjpjb3V0IDw8IG1iLnNpemUoKSA8PCBzdGQ6OmVuZGw7CgoJbWVtX2J1ZmZlciBtYjIo
YnVmLCBtYi5zaXplKCkpOwoJdl9mb3JtYXRfd3JhcDxYRFJfZm9ybWF0PG1lbV9idWZmZXI+ID4g
dGYyKG1iMik7CglhdXRvX29ial9pbnB1dCBpcyh0ZjIsIGlkeCk7CgoJaXMuYXV0b19vYmplY3Qo
dDEpOwoJaXMuYXV0b19vYmplY3QodDIpOwoJaXMuYXV0b19vYmplY3QodDMpOwoKCXQxLT5oZWxs
bygpOwoJdDItPmhlbGxvKCk7Cgl0My0+aGVsbG8oKTsKfQoK


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

end of thread, other threads:[~2001-07-07  7:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-07-07  7:16 c++/3559: Internal compiler error compiling XTL 1.4 example lerdsuwa
  -- strict thread matches above, loose matches on Subject: below --
2001-07-04  8:36 ra9569

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