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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c++/8353: Segmentation fault at template instantiation


>Number:         8353
>Category:       c++
>Synopsis:       Segmentation fault at template instantiation
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Oct 25 07:56:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     d95-bli@nada.kth.se
>Release:        unknown-1.0
>Organization:
>Environment:

>Description:
The attached code gives the following error when compiled with g++-3.2:

exempel.cpp: In member function `void functor<T>::operator()() [with T = P]':
exempel.cpp:24:   instantiated from here
exempel.cpp:16: internal error: Segmentation fault

If a type P is explicitly used instead of the template parameter, everything seems to work well.

Note: The program uses an external library, the Boost Multi Array library. I have notfied the developers of that library as well.
>How-To-Repeat:
g++ g++bug.i

If the parameter to the boost typedefs is not the template type T, but rather the type P directly, it seems to compile.
>Fix:

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

IyAxICJleGVtcGVsLmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+Igoj
IDEgImV4ZW1wZWwuY3BwIgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC9tdWx0aV9hcnJheS5ocHAiIDEgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC9tdWx0aV9hcnJheS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC9tdWx0aV9hcnJheS9iYXNlLmhwcCIgMSAzCiMgMjEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBwIiAzCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvZXh0ZW50X3JhbmdlLmhw
cCIgMSAzCiMgMTYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2Fy
cmF5L2V4dGVudF9yYW5nZS5ocHAiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi91dGlsaXR5IiAxIDMKIyA2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvdXRpbGl0eSIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM5ICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L29zX2RlZmluZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5o
IiAxIDMKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMjAgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAz
MjEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgi
IDIgMwojIDM1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA2NiAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvdXRpbGl0eSIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDEgMwojIDc0ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9yZWxvcHMuaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKICBuYW1lc3BhY2UgcmVsX29wcwogIHsKIyA5MCAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQojIDEwMyAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KIyAxMTYgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3JlbG9wcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQojIDEyOSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgogIH0KfQojIDY3ICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi91dGlsaXR5IiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7
CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAg
X1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgp
IHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9f
YSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAg
cGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29u
ZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly
PF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194
LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwK
ICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNl
Y29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg
Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl
dHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp
cjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf
cGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwg
X195KTsKfQoKfQojIDY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi91
dGlsaXR5IiAyIDMKIyAxNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVs
dGlfYXJyYXkvZXh0ZW50X3JhbmdlLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh
Y2UgZGV0YWlsIHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCnRlbXBsYXRlIDx0eXBlbmFtZSBF
eHRlbnQsIHR5cGVuYW1lIFNpemVUeXBlPgpjbGFzcyBleHRlbnRfcmFuZ2UgOiBwcml2YXRlIHN0
ZDo6cGFpcjxFeHRlbnQsRXh0ZW50PiB7CiAgdHlwZWRlZiBzdGQ6OnBhaXI8RXh0ZW50LEV4dGVu
dD4gc3VwZXJfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgRXh0ZW50IGluZGV4OwogIHR5cGVkZWYg
U2l6ZVR5cGUgc2l6ZV90eXBlOwoKICBleHRlbnRfcmFuZ2UoaW5kZXggc3RhcnQsIGluZGV4IGZp
bmlzaCkgOgogICAgc3VwZXJfdHlwZShzdGFydCxmaW5pc2gpIHsgfQoKICBleHRlbnRfcmFuZ2Uo
aW5kZXggZmluaXNoKSA6CiAgICBzdXBlcl90eXBlKDAsZmluaXNoKSB7IH0KCiAgZXh0ZW50X3Jh
bmdlKCkgOiBzdXBlcl90eXBlKDAsMCkgeyB9CgogIGluZGV4IHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gc3VwZXJfdHlwZTo6Zmlyc3Q7IH0KCiAgaW5kZXggZmluaXNoKCkgY29uc3QgeyByZXR1cm4g
c3VwZXJfdHlwZTo6c2Vjb25kOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4g
c3VwZXJfdHlwZTo6c2Vjb25kIC0gc3VwZXJfdHlwZTo6Zmlyc3Q7IH0KfTsKCn0KfQp9CiMgMjIg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBw
IiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh
eS9leHRlbnRfZ2VuLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L211bHRpX2FycmF5L2V4dGVudF9nZW4uaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvcmFuZ2VfbGlzdC5ocHAiIDEgMwojIDE5
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9yYW5nZV9s
aXN0LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2FycmF5
LmhwcCIgMSAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2FycmF5
LmhwcCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRk
ZWYiIDEgMwojIDQ3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3Rk
ZGVmIiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5
cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0
cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9hcnJheS5ocHAiIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
aW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVz
cGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNl
cHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgog
ICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNs
YXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJh
ZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkg
dGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoK
ICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hh
bmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQg
dGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3Rl
ZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgog
IHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAzCiAgYm9v
bCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsK
IyAxMTEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbiIg
MwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDUgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAxIDMKIyA0NCAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzCgoKIyAxICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMK
IyA0MyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdm
d2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz
dHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+
OwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAg
ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKICB0eXBlZGVm
IGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDcgIi91c3IvbG9jYWwvdm9sL2dj
Yy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgoj
IDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEgMwoj
IDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1v
dmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl
c3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVt
c2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g
dm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAq
cmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAq
X19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRl
cm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq
c3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3Ry
bmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBz
dHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91
c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAz
CnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAq
X19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwog
IGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVy
Owp9ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRl
cm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl
X3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAq
X19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4g
Y2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpz
dHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl
eHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f
cmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2Vw
dCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFy
ICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJz
dHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0
cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs
ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNo
YXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hh
ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6
ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19u
ZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpf
X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0
cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBz
aXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3Qg
X19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAq
X19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
Ynplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21w
IChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5k
ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQg
ZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl
eHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50
IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0
ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50
IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl
eHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2Vj
bXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAg
KGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2
ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFs
IChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJv
dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg
Kl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkg
dGhyb3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7
CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsK
ICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAg
dXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAg
dXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNp
bmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlu
bGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyBy
ZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoK
ICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGlu
dCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIq
PihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0
cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5f
c3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcg
OjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24p
CiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19z
MSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihj
aGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIo
Y29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0NiAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMSAz
CiMgNDMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5o
IiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMwojIDEgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMSAzCiMgNDggIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMwoKCgoKIyAxICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9p
bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7
CgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f
dV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hh
ciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMy
X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVk
ZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19x
YWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3Vp
ZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0
eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBp
bnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxp
bV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRf
dDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoK
dHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBs
b25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBl
ZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoK
dHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoK
dHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9f
Ymxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVh
ZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu
dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVh
ZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxv
bmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxh
cl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19z
b2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK
IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpz
dHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMg
MjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsK
CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsK
CgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0
ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFy
YW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJk
c2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVf
dCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0
cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2Fp
dGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15
Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tl
eV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21f
Y291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoK
CnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf
cndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9f
cndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNj
ciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7
CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7
CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9
IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9z
cGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg
X19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0
aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYg
c3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9i
aXRzL3R5cGVzLmgiIDIgMwojIDQ2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDU0ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRl
L3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2NCAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z
dGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3NCAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z
dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91
c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMy
MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25m
aWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0
eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193
Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZf
dCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1
Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2
NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Z2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91
c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMy
ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAs
CiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9f
R0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVH
QUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxf
REVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NP
TlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsK
CgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3Qg
X19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBl
ZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19n
Y29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVk
ZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVk
ZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5
cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg
Kiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp
Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29u
dGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1
bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3Qp
IChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh
bnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2dj
b252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7
CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4
dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFu
c19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpf
X25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRl
ZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBp
bnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7Cgog
IF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2dj
b252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQg
X19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVl
ZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0
IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25l
ZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0
aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19z
dGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19k
YXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVf
dCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9u
X18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1
ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3Qg
X19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBf
X2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7
Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf
R191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEg
Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y
L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYg
X19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAyIDMKIyAxNjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90
OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVm
IHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19t
YXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMg
MTkzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7
CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwK
ICBfX2NvZGVjdnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpf
X2NvZGVjdnRfZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRf
cmVzdWx0ICgqX19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFy
X3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
d2NoYXJfdCAqKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29k
ZWN2dF9kb191bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNo
YXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVj
dCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7
CiAgaW50ICgqX19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwog
IGludCAoKl9fY29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICop
OwogIGludCAoKl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19t
YnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChz
dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90
IF9fY2Rfb3V0Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVh
ZF9wdHI7CiAgd2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7
CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3
Y2hhcl90ICpfSU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90
ICpfSU9fYnVmX2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9f
YmFja3VwX2Jhc2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lP
X3N0YXRlOwogIF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2
dCBfY29kZWN2dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90
ICpfd2lkZV92dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoK
ICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19y
ZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsK
ICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9f
YnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7
CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7Cgog
IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7
CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsK
ICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBf
SU9fbG9ja190ICpfbG9jazsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2
NF90IF9vZmZzZXQ7CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0cnVjdCBf
SU9fd2lkZV9kYXRhICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNl
ZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3Ry
dWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z
dGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVy
biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQ0ICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29v
a2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6
ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVk
ZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGlu
dCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoK
CnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19p
b193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4g
Y29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9z
ZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAg
X19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2Vf
Zm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tp
ZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tp
ZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVf
ZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoK
CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9f
d3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cg
KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklM
RSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0
ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9J
T19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChf
SU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKIyA0NTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zm
c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv
bnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGlu
dCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxF
ICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtv
ZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19v
ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7
CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CgoKZXh0ZXJuIHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0
ZXJuIHdpbnRfdCBfSU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApIHRocm93
ICgpOwpleHRlcm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRo
cm93ICgpOwojIDUwNSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZ3
c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmlj
dCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9f
RklMRSAqLCB3aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mcmVl
X3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3NSAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z
dGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwoj
IDg5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlw
ZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8u
aCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJu
IEZJTEUgKnN0ZGVycjsKIyAxNTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IHJlbW92
ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1l
IChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxNjkgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3Rk
aW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g
Y2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5h
bV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy
biBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4g
aW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2gg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0
ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRo
cm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29u
c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2ll
ICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBj
aGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
c2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21v
ZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRs
aW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmlu
dGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f
YXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9y
bWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDAp
KSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVz
dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAo
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZf
XywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2Fu
ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7
CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp
bnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpn
ZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwojIDQzNyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy
biBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9f
ZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipf
X3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3Np
emVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQg
Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNp
emVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBz
aXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsg
KEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJu
IHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTAwICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2Zm
LCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0
ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0
aHJvdyAoKTsKIyA1MzQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChG
SUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpl
eHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19y
ZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUg
Kl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2
b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2Yg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2Nv
bnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0
IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25z
dCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hh
ciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJp
ZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQg
b2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIHRocm93ICgpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3Rh
Y2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZs
b2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2Nr
ZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxl
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjQ0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKfQoj
IDUzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDIgMwoj
IDk3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6
OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZl
cnJvcjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBv
czsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwog
IHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5n
IDo6ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6
ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0
YzsKICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwog
IHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNp
bmcgOjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6
cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2
YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZp
bGU7CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50
ZjsKICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDE1MyAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCm5hbWVzcGFjZSBfX2du
dV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6
dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6
OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2
c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8u
aCIgMiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDMKIyAxICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2No
ZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBs
b25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9y
aXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikg
KHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50
IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9z
Y2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0g
KF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0
cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9z
ZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwg
c3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU5ICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMTggIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47
CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVh
cjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25n
IGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVj
dCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3Ry
dWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVk
ZWYgX19waWRfdCBwaWRfdDsKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90
IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0
cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
bXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRt
ICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0
cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3Qg
X190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29u
c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBj
aGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l
ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4
dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoK
ZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0
OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVy
biB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpf
X3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lk
X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVj
ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBf
X2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQg
X19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAq
X19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3Qg
X19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRp
bWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9f
dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVz
dHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGlt
ZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93
ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJy
OwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcp
IHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRh
dGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAy
MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFs
LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMv
c2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVj
dAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVu
c2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9z
aWduYWwuaCIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2ln
c2V0X3Qgc2lnc2V0X3Q7CiMgMzcxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFk
dHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVt
CnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQK
Cn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRf
U0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09Q
RV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFE
X01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRI
UkVBRF9NVVRFWF9BREFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhS
RUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9N
VVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9N
VVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVU
RVhfTk9STUFMCgoKCiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FE
QVBUSVZFX05QCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJF
QURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JF
QURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldM
T0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFV
TFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9p
ZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlw
ZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7
CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9Owpl
bnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNI
Uk9OT1VTCgp9OwojIDE2MyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0
aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190aHJlYWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZv
aWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19hcmcp
IHRocm93ICgpOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJl
YWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAodm9p
ZCAqX19yZXR2YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190
aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChw
dGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9p
bml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0
YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJh
bSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGlj
eSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9faW5oZXJp
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg
X19zY29wZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6
ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX2dldGd1YXJkc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jl
c3RyaWN0IF9fZ3VhcmRzaXplKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0
dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRz
dGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3N0
YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tz
aXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9f
cmVzdHJpY3QgX19zdGFja3NpemUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3Qg
X190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0
X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2Nr
IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJp
Y3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Vu
bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhh
dHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJl
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChw
dGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBf
X2tpbmQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0
eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2tpbmQp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9j
b25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2Nv
bmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2Nv
bmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0
aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9f
Y29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3Qg
Kl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQg
KF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo
YXJlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcndsb2Nr
X3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJk
bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0
IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j
aykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpf
X3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5p
dCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19j
b25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0
dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9n
ZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChwdGhyZWFkX3J3bG9j
a2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA1MDkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK
ZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2ss
IGludCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5f
ZGVzdHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFkX3NwaW5sb2NrX3Qg
Kl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2NrIChwdGhy
ZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBfX2JhcnJpZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0
cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwg
dW5zaWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp
ZXJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo
cmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJf
dCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp
ZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFkX2JhcnJpZXJfdCAq
X19iYXJyaWVyKSB0aHJvdyAoKTsKIyA1NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0
ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICop
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlf
dCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhy
ZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVj
aWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTc2ICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19v
bmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRp
bmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxz
dGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cg
KCk7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFk
X2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9p
ZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgdGhy
b3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9w
dGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDYzMSAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoj
IDY0MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVh
bnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRl
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRocmVh
ZF90IF9fdGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tp
ZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2ln
dGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMwpleHRl
cm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKXRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWQsIGludCBf
X3NpZ25vKSB0aHJvdyAoKTsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3
MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2
b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19j
aGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhl
cl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQu
aCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0
aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9f
Z3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEg
d2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQoj
cHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRz
cGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFk
X211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sgCiNwcmFnbWEg
d2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpz
dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9p
ZCAqY29uc3QgX19ndGhyZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7
CiAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cn0KIyA0MzcgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1k
ZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9v
bmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2
ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAg
cmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19n
dGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhy
ZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh
ZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIp
CiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1
cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVh
ZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0
aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBr
ZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2
b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9Cgpz
dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3Qg
Km11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFk
X211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkK
ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90
cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50
Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlm
IChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sg
KG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMiAzCiMg
MzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgt
Z251L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0
cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRp
ZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlw
ZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBfX2NfZmls
ZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlw
ZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVy
bmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAy
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
c2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3Bv
cyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAw
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAx
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4
MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQg
PSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJp
dCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0g
MHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQ1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvY3RpbWUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMwojIDY0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2Nr
X3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1
c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2lu
ZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6
OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi91c3IvbG9jYWwvdm9sL2dj
Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRh
cmcuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA4NSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7CiMg
MTA1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpzdHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7CgoK
ZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhy
b3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nh
dCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJf
dCAqd2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwg
X19jb25zdCB3Y2hhcl90ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u
c3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Nu
Y2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90
ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs
IF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Njb2xs
IChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7
CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKF9fY29uc3Qg
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hm
cm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpl
eHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19j
b25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2No
YXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJf
dCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3Ms
IF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193
Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90
ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2No
YXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAo
X19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJf
dCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6
ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAq
X19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3Ms
IHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3My
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hh
cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0
b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3Qg
bWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
ZXh0ZXJuIHNpemVfdCBtYnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVy
biBzaXplX3Qgd2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAg
ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7
CgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAq
X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyOTcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0
cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1i
c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1i
c25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVz
dHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2Ms
IHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVz
dHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2NoYXJfdCBf
X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFyX3QgKl9f
cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB3Y3N0
b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0
ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxf
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhy
b3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2Nz
dG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3dj
c3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9f
bG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFs
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp
CiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50
IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91
bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs
b25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAo
X19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
Z3JvdXApIHRocm93ICgpOwojIDUyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdj
aGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19j
b25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBpbnQgZndpZGUgKF9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg
ICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3cHJpbnRm
ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cg
KCkgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg
OwoKZXh0ZXJuIGludCB2d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv
dyAoKSA7CgoKZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp
CiAgICAgdGhyb3cgKCkgOwoKCgpleHRlcm4gaW50IGZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdzY2FuZiAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoK
ZXh0ZXJuIGludCBzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp
CiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCmV4dGVybiB3aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRl
cm4gd2ludF90IGZwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBp
bnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQg
KF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9j
a2VkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19G
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQg
KHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50
X3QgcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiB3aW50X3QgcHV0d2NoYXJfdW5sb2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cg
KCk7CgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxv
Y2tlZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAq
X19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKIyA2ODAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
Cn0KIyA1NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAy
IDMKIyA2OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAz
Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg
dXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNp
bmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcg
Ojpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6
OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjpt
YnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6
OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6
OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVzaW5n
IDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsKICB1
c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7CiAg
dXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVz
aW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVz
aW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNp
bmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVz
aW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVzaW5n
IDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNpbmcg
Ojp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5nIDo6
d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2luZyA6
OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2Nocih3
Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0PGNv
bnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5saW5l
IHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0
dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9Cgog
IHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBf
X3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hh
cl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFyX3Qq
CiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nzc3Ry
KGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondt
ZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hhcl90
IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2No
YXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsK
ICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91bGw7
Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBf
X2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg
ZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlw
ZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5
cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5
cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFt
b2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBf
X29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYo
X19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0
IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1v
ZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3Mm
CiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0
dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYp
CiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwog
ICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0
cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBf
X3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAg
ICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9v
ZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3Qg
ZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7
IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9N
X29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsg
X01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJl
YW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFpdHMuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1
Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAg
ICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBv
cyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24o
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJv
b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp
OwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25z
dCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0
IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAg
ICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBf
X3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs
IHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5
cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0
aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNo
YXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUo
Y29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50
X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFf
aW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAg
ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog
ICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt
cG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2ln
bihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0g
X19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0
aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5
cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBf
X24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUq
IF9fcykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNv
bnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
X3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl
KgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXpl
X3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9f
czEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNo
YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7
IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywg
c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hh
cl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlw
ZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog
ICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9Cgog
ICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwg
Y29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAg
ICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90
eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3Qg
aW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9
CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAg
IHsKICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3Qg
aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVm
IHdzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29s
CiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog
ICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0
KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl
dHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0
IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg
ICB7IHJldHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXpl
X3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3Ns
ZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25z
dCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAg
IHsgcmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGlu
dF90eXBlIF9fbikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoK
ICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0
IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3Mx
LCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hh
cl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdt
ZW1zZXQoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9f
Y2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9
CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBl
JiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAg
IGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikK
ICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg
ICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9
CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19j
KQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9
OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
dWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0No
YXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAg
IGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0
czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMSAzCiMgNTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NiAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDEgMwojIDQ4ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAzCgojIDEgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu
Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk
ZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMy
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
Mi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAx
NDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4
MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9i
aXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMK
IyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNs
dWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg
MiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91
c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5f
bGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMv
eG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVk
ZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAz
CiMgMTMzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAy
IDMKIyAxMiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDIgMwojIDY3ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAxIDMKIyA0OCAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK
CmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAx
IDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5k
aWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3Iv
aW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMu
aCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAg
IHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQg
aW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4Owog
ICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7
CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsK
ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6
MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYgc3Ry
dWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYg
c3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZf
dDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGlu
dCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDEzMyAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAo
dm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25w
dHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9p
IChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25n
IGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xk
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9u
ZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy
b3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4
dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVy
biB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpfX2V4
dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAyMTUg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQg
bG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv
bmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91Ymxl
IF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19s
b2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4g
ZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0
b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVy
bmFsIChfX2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwojIDM4NCAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBf
X3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2lu
dCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90
Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoK
CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoK
CgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsK
CgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoK
CgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsK
CgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0
X3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRf
dDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3Qg
ZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qg
a2V5X3Q7CiMgMTM2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX3VzZWNv
bmRzX3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoK
CgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkw
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf
XykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA0NiAi
L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu
aCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZhbAog
IHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9Owoj
IDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYg
c3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAo
X19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZk
X21hc2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoK
CgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19y
ZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMs
CiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3Ry
aWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193
cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRm
ZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0
IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jlc3Ry
aWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxOSAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxr
c2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19m
c2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7
CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3Qg
YmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYg
X19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3Rh
dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsK
CgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQz
Ml90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50
IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoK
ZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3Qg
cmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVu
c2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFu
ZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1
bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5k
NDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9p
ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZh
bCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVu
c2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0
OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2ln
bmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9
OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9y
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMgNTI3
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f
c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lk
ICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZv
aWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRl
cm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJu
ICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7
CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lk
ICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNp
emVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9p
ZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9p
ZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAg
ICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChp
bnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK
CmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIg
Kl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNl
dGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNs
ZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxh
dGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy
ICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lz
dGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFy
ICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7
CiMgNjcyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgq
X19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRl
ZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJj
aCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBf
X2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25t
ZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2Nv
bXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVt
ZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9t
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hh
ciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2
dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1
Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25z
dCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Rv
bWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf
dCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3Qg
Y2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUg
KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2Zk
LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdl
dHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUg
X19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTMgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAg
dXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6
YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9j
OwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcg
OjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxv
YzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7
CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVz
aW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcg
OjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcg
Ojp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9f
aSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJu
IGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMzYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL2NzdGRsaWIiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRp
dl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25n
IF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxv
bmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7
IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkK
ICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9f
ZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24s
IGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9f
cS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2lu
ZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2lu
ZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZf
dDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVz
aW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19n
bnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4
eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6
OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDY4ICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMg
MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbmV3IiAxIDMKIyA0NCAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbmV3IiAzCmV4dGVybiAiQysr
IiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRp
b24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVh
bCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBl
eHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFu
ZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKSB0aHJv
dygpOwp9CiMgNzkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL25ldyIg
Mwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7
CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp
Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxl
dGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25z
dCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6
ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRl
KHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs
ZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9p
ZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4g
X19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19w
KSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAo
dm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10o
dm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAxIDMKIyA0MyAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAzCgoKCgojIDEgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMg
MzQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNl
cHQuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2V4Y2Vw
dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQK
ICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxs
b2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y
YW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNo
YXIqIF9fcyk7Cn0KIyA0OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
aW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
aW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29z
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s
CiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxs
b2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg
dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3Ry
aW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVm
IGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3Ry
ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hh
cj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwog
IHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFz
aWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVi
dWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdp
b3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4g
d2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7
CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3Ry
ZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+
IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cn0K
IyA3MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwojIDkwICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1
ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlf
bWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2ln
bmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hv
cnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlw
ZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hh
cj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVu
c2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9J
c19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoK
Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxf
aXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy
YXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBz
dGQKewojIDgwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9
OwoKICBzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRl
cmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoK
ICBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcge307CiMgMTAwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlm
Zl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVy
ZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdv
cnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAg
ICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9p
bnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07
CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRv
cl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0
ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVy
YXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0
czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5
cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAq
IHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29y
eShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu
Y3MuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMK
IyA2OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl
cmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewp0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7
CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
ICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAgcmV0dXJuIF9fbjsKICB9Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3Rh
bmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAg
CiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICB9CiMgMTExICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMK
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0
dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly
c3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFu
Y2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2Ug
X19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19p
OwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1l
IF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsr
X19pOwogICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGlu
ZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2Ug
X19uLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAg
IF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZh
bmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5j
ZShfX2ksIF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDg5ICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAg
OiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0
ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50
ZXIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3Vy
cmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRl
cjsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAg
IGV4cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3Vy
cmVudChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0
ZXJhdG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgp
KSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0
CiAgICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVy
biAqLS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190
bXAgPSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg
ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAg
ICB7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoK
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAg
cmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAg
ICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg
ICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAg
ICBjdXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAg
ICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikg
Y29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoK
CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2Vf
dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlm
ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07
CiMgMjY5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9p
dGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog
ICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJh
c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAg
ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7
IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9f
eCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5
cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBv
cGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy
biBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvciso
dHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19u
LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQog
ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24p
OyB9CiMgMzI3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNz
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0
b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAg
ICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29u
dGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0
X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgMzUzICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o
IiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUg
X0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250
YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0K
CgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4g
KnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygp
IHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgICAgb3Bl
cmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NCAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1
cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDM5NyAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRl
cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv
aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGZyb250X2luc2Vy
dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3Jl
ZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9f
dmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGZyb250X2luc2Vy
dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBm
cm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyBy
ZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDUzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nv
bnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAg
IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDcwICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMg
aXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAg
IHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwogICAgICB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0b3Io
X0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICAg
IDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1MTIgIi91c3IvbG9jYWwvdm9sL2dj
Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgaW5zZXJ0
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29u
c3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFpbmVyLT5p
bnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKyso
KSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0
ZXJhdG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PihfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
X0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgK
ewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJh
dG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZh
bHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNl
PgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIg
cG9pbnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRv
cigpKSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9J
dGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChf
X2kuYmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgog
ICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAg
X19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFs
X2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9f
bm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9p
dGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9y
W10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1
cnJlbnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0o
Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJl
dHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNv
bnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9p
dGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3Vy
cmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAg
ICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJl
dHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3Qg
X0l0ZXJhdG9yJgogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAg
fTsKIyA2NDUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBf
SXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9
PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFp
bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s
aW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09
IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt
ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0
b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29u
dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp
ICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog
IGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp
IDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy
YXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29u
dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp
bmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4g
X19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l
IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv
cjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250
YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp
bmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg
PD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy
YXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBf
X2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPj0gX19yaHMuYmFzZSgpOyB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JM
LCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSB0eXBl
bmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5j
ZV90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D
b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgLSBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBf
Q29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cn0K
IyA3NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZv
aWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAog
ICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwogICAgICAq
X19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAm
IF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9f
YjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9f
YjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxNjYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm
IF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1
cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29t
cChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjA0ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25z
dCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0
dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBf
X24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAg
ICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwg
Y29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19y
ZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAg
cmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0
cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUp
CiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9h
dXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9h
dXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVz
dWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf
VHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0
LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVy
biBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf
T3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1
eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Ry
aXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVl
VHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojpo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAg
cmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog
ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
X3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
dG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9u
aTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0
ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs
X2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f
Y29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMg
MzM5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAog
ICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0
SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4K
ICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBfX2NvcHlfYmFja3dhcmQoX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19m
aXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25h
bEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmly
c3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAog
ICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgICBjb3B5KF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBf
X2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3Ry
dWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9f
Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAg
Y29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICAgIG1lbW1vdmUo
X19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgICAgIHJl
dHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1Rw
KiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3Qg
X1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewog
ICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp
bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90
cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9U
cml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIs
IF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgog
ICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9y
KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9C
STIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkp
OyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5l
IF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19m
aXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfYmFj
a3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNr
d2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190
cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv
cjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9v
dXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQs
IF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg
X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9f
Tm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0
b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDQ3NyAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK
ICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3Vs
dCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAg
IAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpf
X2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
T3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVy
CiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f
dmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2Zp
cnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2ln
bmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogIHsKICAgIHVuc2ln
bmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAt
IF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0
LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogIHsKICAgIHNp
Z25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9p
ZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAg
ewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAgIGZpbGxfbih1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykK
ICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1
cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBp
bmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3Qg
KyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmly
c3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoj
IDYwNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp
IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp
OwogICAgfQojIDY0MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl
bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lu
cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg
CiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVk
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl
cjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJvb2wK
ICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIp
CiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5OSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFy
eVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAog
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2Zp
cnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQog
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+
CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg
ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MjsKICAgIH0KIyA3NjcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
MSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEs
ICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
aXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2Zp
cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBi
b29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJz
dDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
bGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsK
ICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBp
bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl
bjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwg
X19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25z
dCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKICB7Cgog
ICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg
Y2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQojIDU1ICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwoj
IDg0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv
Yy5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Fzc2Vy
dCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Nhc3Nl
cnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRl
L2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9f
Y29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVu
Y3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4
dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hh
ciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0
IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9jYXNzZXJ0IiAyIDMKIyA4NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMu
aCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw
ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj
IDg2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv
Yy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVj
dCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9s
YXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZf
Y291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50
KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBU
SFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sg
PSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBf
X2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9j
b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog
ICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4
X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAt
LV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50
X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBs
YXRlPGludCBfX2R1bW15PgogICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRp
YyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1
bW15PgogICAgX19ndGhyZWFkX211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+
OjpfU19zd2FwX2xvY2sgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAw
IH19OwoKCgogIGlubGluZSB1bnNpZ25lZCBsb25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxv
bmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19xKQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2Nr
KCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcg
X19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxv
Y2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVz
dWx0OwogIH0KIyAxNTEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAg
IF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgp
CiAgICB7CiMgMTg0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQog
ICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAg
dm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4
X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1
dG9fbG9jawogIHsKICAgIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9f
bG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01f
bG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9j
ay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgX1NUTF9hdXRvX2xvY2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s
b2NrJik7CiAgfTsKCn0KIyA4NyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5OCAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNz
IF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUo
c2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0
aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRv
ciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAg
ICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAg
c3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQqIF9T
X29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogICAgICBzdGF0aWMgdm9pZCAoKiBfX21hbGxv
Y19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyB2b2lkKgog
ICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1bHQg
PSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19v
b21fbWFsbG9jKF9fbik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAgeyBm
cmVlKF9fcCk7IH0KCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICByZWFsbG9jYXRlKHZvaWQqIF9f
cCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1
bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBf
X3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRs
ZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkgPSBf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4oX19vbGQpOwogICAgICB9CiAgICB9OwoKCiAgdGVt
cGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGUgPGlu
dCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6
X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9j
X2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAg
ICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKQogICAgICAgICAg
ICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRs
ZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYgKF9f
cmVzdWx0KQogICAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAgIH0KCiAg
dGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewog
ICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0
OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVy
ID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215X21h
bGxvY19oYW5kbGVyKQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAg
ICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IHJlYWxs
b2MoX19wLCBfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4o
X19yZXN1bHQpOwogICAgICAgIH0KICAgIH0KCgoKCgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9f
bWVtX2ludGVyZmFjZTsKIyAyMTkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4KICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBh
bGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9B
bGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgIHN0YXRpYyBfVHAqIGFs
bG9jYXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1Rw
KSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQog
ICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAo
X1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgeyBfQWxs
b2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgfTsKIyAyNTEgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fZGVidWdfYWxsb2MKICB7CiAgcHJpdmF0ZToK
ICAgIGVudW0ge19TX2V4dHJhID0gOH07CgoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9B
bGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19y
ZXN1bHQgPSBfX247CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAg
fQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAg
ewogICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAg
ICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzAsIF9fUFJF
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3As
IF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0
ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAg
ICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKHN0
YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgMjc3LCBf
X1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop
CiAgICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9T
X2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAo
aW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAg
ICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KICB9OwojIDMyNCAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwp0
ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGUKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51
bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMg
LyBfQUxJR059OwoKICAgIHVuaW9uIF9PYmoKICAgIHsKICAgICAgdW5pb24gX09iaiogX01fZnJl
ZV9saXN0X2xpbms7CiAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0
YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0
aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAg
IHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sg
X1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91
cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FM
SUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAg
ICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0
ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgc3Rh
dGljIHZvaWQqCiAgICBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioK
ICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBj
bGFzcyBfTG9jawogICAgewogICAgcHVibGljOgogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFk
cykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xv
Y2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9s
b2NrKCk7IH0KICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBj
bGFzcyBfTG9jazsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6
ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChz
aXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9j
YXRlKF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSog
X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9p
bmRleChfX24pOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAg
X09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAg
aWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5k
X3VwKF9fbikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9f
bXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAg
ICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfTsKCgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19w
LCBzaXplX3QgX19uKQogICAgewogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykK
ICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAg
ICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAg
IF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFu
Y2U7CiAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7
CiAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0
YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6
ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVl
OyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBs
YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBf
X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0Owog
ICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVf
dCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAo
X19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9
IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwog
ICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19s
ZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRl
c19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2Jq
czsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0
ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3Np
emUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAg
ICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAg
ICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9
ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiop
X1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj
aGFyKikgX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAg
ICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6
ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAg
ICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAg
ICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6
ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJl
ZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAg
ICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAh
PSBfX3ApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlf
ZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAg
ICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19l
bmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAg
ICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0
ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXpl
ICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVl
ICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl
LCBfX25vYmpzKSk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBf
X25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9f
bm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoq
IF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRf
b2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1
bmspOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu
ZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlf
ZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZv
ciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2Jq
OwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsK
ICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2Jq
IC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0
X29iajsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgog
IHRlbXBsYXRlPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsK
ICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9N
QVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0
dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91
cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAg
X19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6
ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwg
X19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICBy
ZXR1cm4oX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KICBfU1RMX211dGV4X2xvY2sKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgPSB7IHswLCAwLCAwLCBQVEhS
RUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX0gfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
aW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgogIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
aW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBhbGxvY2F0b3IKewogIHR5cGVkZWYgX19hbGxvYyBf
QWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYg
Y29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlw
ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxs
b2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2Nh
dG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3Qg
eyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2Ug
X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUg
X19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0
PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAg
ICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw
ZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsg
fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXpl
X3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv
bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShw
b2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0
b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0
IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2OTUgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IKewogIF9B
bGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy
ZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9j
YXRvcigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0
aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7
fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9y
PF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19h
Ll9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBv
aW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29u
c3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZf
X3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7
CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJs
eWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwogIH0K
CgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191
bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAg
c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90KC0x
KSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBf
VHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRl
ciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNz
IF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQg
dmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAg
dHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5k
ZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp
bmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRlbXBsYXRlIDxp
bnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0
PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJl
dHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDg0MCAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIg
Mwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3Ry
YWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxs
b2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpj
b25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNz
OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRz
PF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl
bGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxv
Y190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9y
X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9j
PF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0Fs
bG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9j
PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1Rw
MSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAg
ICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19p
bnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg
dHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8
X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBh
bGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFz
cyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19k
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxf
QWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdf
YWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9y
PHdjaGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9p
ZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcg
KHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxh
dGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQog
ICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwog
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9f
ZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpIF9EZXN0cm95KCYqX19maXJzdCk7IH0KIyAxMTIgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChf
Rm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoK
CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3ko
X1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9UcCgpOyB9CiMgMTM0ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwog
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9E
ZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2
aWFsX2Rlc3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKCiAgICAgIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcigpKTsKICAgIH0KfQojIDU3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxp
emVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXpl
ZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBf
X2N1ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwg
Kl9fZmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4p
CiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAg
IHRocm93OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2Fy
ZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19Q
T0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7CiAgICB9CgogIGlubGluZSBjaGFy
KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBf
X2xhc3QsIGNoYXIqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3Qs
IF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmly
c3QpOwogIH0KCiAgaW5saW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdj
aGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwg
c2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jlc3Vs
dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVk
X2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAg
IHsgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmls
bF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsK
ICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBm
b3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipf
X2N1ciwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAg
X0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
fQojIDE2NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
dW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0aWFsaXplZF9m
aWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmls
bF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAg
ICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFs
c2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAg
dHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICAgICAg
X0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQog
ICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19j
dXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1
ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVk
X2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxp
emVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAg
IF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9
IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0
cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIs
IF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rl
c3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6
ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkK
ICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAg
ICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf
RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
fQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29w
eV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAg
ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVk
X2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAg
ICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRo
cm93OwogICAgICAgIH0KICAgIH0KCn0KIyA1OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVy
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGlj
IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAg
ICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBw
dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJk
SXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFn
ZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7
CiAgICAgICAgX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJh
dG9yLCBfVHA+JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgICsrX01faXRlcjsK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9y
PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg
ICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0g
KnRoaXM7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQog
ICAgfTsKfQojIDYwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1v
cnkiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgpwYWlyPF9U
cCosIHB0cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9U
cCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkK
ICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAw
KSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6OnNpemVfdClfX2xl
biAqIHNpemVvZihfVHApKTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxf
VHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0
dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQojIDEwNiAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICBpbmxpbmUgcGFpcjxfVHAqLHB0cmRpZmZfdD4KICBnZXRfdGVtcG9yYXJ5X2J1ZmZl
cihwdHJkaWZmX3QgX19sZW4pCiAgewogICAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIo
X19sZW4sIChfVHAqKSAwKTsKICB9CiMgMTIwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIHZvaWQKICByZXR1
cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICB7CiAgICBzdGQ6OmZyZWUoX19wKTsKICB9
CiMgMTM1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMK
dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsKICAgX1RwMSog
X01fcHRyOwoKICAgZXhwbGljaXQKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkKICAgOiBfTV9w
dHIoX19wKSB7fQp9OwojIDE3NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z
LjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBjbGFzcyBhdXRvX3B0cgp7CnBy
aXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlw
ZTsKCgoKCgoKCiAgZXhwbGljaXQKICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9IDApIHRo
cm93KCkKICA6IF9NX3B0cihfX3ApIHsgfQojIDIwMiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3co
KQogIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQojIDIxNCAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K
ICAgIGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9f
YS5yZWxlYXNlKCkpIHsgfQojIDIyNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHImCiAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRo
cm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KIyAyNDMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL21l
bW9yeSIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAxPgogICAgYXV0b19wdHImCiAgICBvcGVy
YXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgewogICAgICByZXNldChfX2Eu
cmVsZWFzZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI2MyAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgfmF1dG9fcHRyKCkgeyBkZWxl
dGUgX01fcHRyOyB9CiMgMjczICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMu
Mi9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUmCiAgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7
IHJldHVybiAqX01fcHRyOyB9CgoKCgoKCgogIGVsZW1lbnRfdHlwZSoKICBvcGVyYXRvci0+KCkg
Y29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAyOTUgIi91c3IvbG9jYWwvdm9sL2dj
Yy8zLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoKICBnZXQoKSBj
b25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDMwOSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlKgogIHJlbGVhc2Uo
KSB0aHJvdygpCiAgICB7CiAgICAgIGVsZW1lbnRfdHlwZSogX190bXAgPSBfTV9wdHI7CiAgICAg
IF9NX3B0ciA9IDA7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KIyAzMjQgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIHZvaWQKICByZXNldChlbGVt
ZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9fcCAhPSBfTV9wdHIp
CiAgICAgICAgewogICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9f
cDsKICAgICAgICB9CiAgICB9CiMgMzQ1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBf
X3JlZikgdGhyb3coKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYK
ICBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAg
IHsKICAgICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICB7CiAgICAg
ICAgICBkZWxldGUgX01fcHRyOwogICAgICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOwogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx
PgogICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAxPgogICAgb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCn07Cgp9CiMgNDkgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCgoKCiMgMSAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVk
ZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0
cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlw
ZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3Vs
dCByZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
KyBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1Rw
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy
biBfX3ggJSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9OwojIDE3MyAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv
b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07CiMgMjIy
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlv
bi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl
dHVybiAhX194OyB9Cn07CiMgMjcxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpj
bGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJl
ZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9N
X3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYg
X194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf
UHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJl
ZChfX3gpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5
X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJl
dHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBfUHJlZGljYXRlPgpjbGFzcyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGlj
YXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVk
aWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlw
ZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAg
ICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195
KSBjb25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpu
b3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9Q
cmVkaWNhdGU+KF9fcHJlZCk7Cn0KIyAzNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp
b24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9P
cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0
aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7
CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBj
b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAg
IDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90
eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9P
cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBv
cCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFz
cyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0
aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlv
bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09w
ZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3Bl
cmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZh
bHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAg
ICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkK
ICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz
dWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2Fy
Z3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0K
CgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBj
bGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3Bl
cmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJh
dGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5k
PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0MzggIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVu
Y3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6
CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1
bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQg
KCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9Bcmcg
X194KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
QXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJn
LCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50
ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9f
YmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S
ZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsK
cHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQg
cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkK
ICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwg
X0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+Cmlu
bGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJf
ZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19i
aW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9U
cD4gewogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAg
Y29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMg
dW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlw
ZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5
cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5m
aXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+
CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWly
OjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAq
LF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgp
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0
dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Qg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9f
cGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAo
X19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt
X2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w
ZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAo
X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg
X1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0
IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U
cCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9m
KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29u
c3QKICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1Rw
OjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBj
b25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq
X01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1
bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2
b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz
IG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9p
ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgp
KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9f
ci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t
ZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp
dCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShf
X3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAs
IF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B
cmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBf
X3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9p
ZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f
ZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p
ZCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gp
OyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1Rw
LCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn
KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19y
LCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAo
X1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6Oipf
X2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBt
ZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu
X3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu
bGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2Yp
KCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxf
VHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25z
dF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBt
ZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9S
ZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9y
ZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0
LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1
bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgoKCn0KIyA1MyAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Zv
bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcu
aCIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHkuaCIg
Mwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApf
X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUg
X0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3Jk
IF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAg
ICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAg
ICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAg
ICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApf
X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21p
Y193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2Nr
OyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAi
bSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KIyA0NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
IyA4OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19z
dHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFs
bG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNp
emVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2Ug
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNl
IGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIg
cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29u
c3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBv
aW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojpf
X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv
bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy
YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDEyMyAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBz
dHJ1Y3QgX1JlcAogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1w
bGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBfU19tYXhfc2l6ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAgICAgICBzaXplX3R5cGUgX01fbGVuZ3RoOwog
ICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsKICAgICAgICBfQXRvbWljX3dvcmQgX01fcmVm
ZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX2xlYWtlZCgpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7IH0KCiAgICAgICAgYm9vbAogICAgICAgIF9N
X2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0K
CiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9sZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJl
bmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQogICAg
ICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3Jl
ZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQq
Pih0aGlzICsgMSk7IH0KCiAgICAgICAgX0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90
IF9fcykgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAg
ICAgICBfQ2hhclQqCiAgICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25z
dCBfQWxsb2MmIF9fYWxsb2MyKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiAoIV9NX2lzX2xl
YWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQogICAgICAgICAgICAgICAgICA/IF9NX3Jl
ZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKICAgICAgICB9CgoKICAgICAgICBzdGF0aWMg
X1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiAgICAgICAg
dm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAg
ICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApCiAg
ICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAg
ICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAgICAgIF9DaGFyVCoKICAg
ICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAgIHsKICAgICAgICAgIF9fYXRvbWljX2Fk
ZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOwogICAg
ICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNp
emVfdHlwZSBfX3JlcyA9IDApOwogICAgICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIg
OiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25z
dCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAg
ICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAg
cHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAg
ICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBz
aXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSld
OwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
ZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19w
KQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAq
CiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8
X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2li
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0
aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAg
ICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQo
KTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9z
KSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAg
ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAg
IHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7
CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5z
aXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25l
d29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAg
IHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9y
IF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9
IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9f
cCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hh
cnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1Nf
Y29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRp
YyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9f
azEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEu
YmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlf
Y2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRy
YWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMg
dm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEs
IGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEs
IF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAg
ICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVw
KCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBf
c3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3Ry
aW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBf
X2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAg
ICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNf
c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmco
Y29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBi
YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2Eg
PSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg
ICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5k
LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAg
ICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdl
dF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0cik7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7
IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv
cGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNzaWduKDEsIF9fYyk7IH0KCgog
ICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAg
ICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0
ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3Io
X01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkKICAgICAgewogICAgICAg
ICBfTV9sZWFrKCk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5z
aXplKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAog
ICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJl
dmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yCiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQo
KQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAg
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVy
biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f
bGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
X01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkg
Y29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVz
aXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUo
c2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNp
emVfdHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBh
Y2l0eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAw
KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCks
IDApOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6
ZSgpID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6
ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9Cgog
ICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsK
ICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107CiAgICAg
IH0KCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAog
ICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIHJldHVybiBfTV9kYXRh
KClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24p
CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgX01fbGVhaygpOwogICAgICAg
IHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5h
cHBlbmQoX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29u
c3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXBw
ZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl
bmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQo
Y29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5k
KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFwcGVuZChfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhp
cy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAg
ICAgdm9pZAogICAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNl
KF9NX2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNp
emUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zdHJzaXplKQogICAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAg
Y29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3Bv
czsKICAgICAgICByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zLCBf
X25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPiB0
aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0
cmluZzo6YXNzaWduIik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBs
ZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8
Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fcykpCiAgICAgICAg
ICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcywgX19z
ICsgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgogICAgICAgICAgICBjb25zdCBzaXpl
X3R5cGUgX19wb3MgPSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIGlmIChfX3BvcyA+PSBf
X24pCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0YSgpLCBfX3MsIF9fbik7
CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpt
b3ZlKF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBfTV9yZXAoKS0+X01fbGVuZ3Ro
ID0gX19uOwogICAgICAgICAgICBfTV9kYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwog
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0
aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01f
aWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVy
YXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFj
ZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICAgICAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9f
YmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCkKICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBf
X3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNp
emVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLCAwLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9f
bikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXpl
KCk7CiAgICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGNvbnN0IGJvb2wgX190
ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICBjb25zdCBzaXplX3R5cGUg
X19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICBy
ZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX25l
d3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5
cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19w
b3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n
OjppbnNlcnQiKTsKICAgICAgICBpZiAoX19zaXplID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbikK
ICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwog
ICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQq
PigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCko
X01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm
ZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAg
ICAgewoKCgogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vZmYgPSBfX3MgLSBfTV9kYXRh
KCk7CiAgICAgICAgICAgIF9NX211dGF0ZShfX3BvcywgMCwgX19uKTsKICAgICAgICAgICAgX19z
ID0gX01fZGF0YSgpICsgX19vZmY7CiAgICAgICAgICAgIF9DaGFyVCogX19wID0gX01fZGF0YSgp
ICsgX19wb3M7CiAgICAgICAgICAgIGlmIChfX3MgKyBfX24gPD0gX19wKQogICAgICAgICAgICAg
IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChf
X3MgPj0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zICsgX19u
LCBfX24pOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
dHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fcCAtIF9fcyk7CiAgICAgICAgICAgICAgICB0
cmFpdHNfdHlwZTo6Y29weShfX3AgKyAoX19wIC0gX19zKSwgX19wICsgX19uLCBfX24gLSAoX19w
IC0gX19zKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
ICAgICB9CiAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5
cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQo
X19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBf
X2MpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg
aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9IF9DaGFyVCgpKQogICAgICB7CiAgICAg
ICAgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+aW5z
ZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2MpOwogICAgICAgIF9NX3JlcCgp
LT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19w
b3M7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9f
cG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhp
cy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAg
ICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAg
ICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlz
LT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9NX2RhdGEo
KSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gX01f
aWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJh
dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBf
X2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX2ZpcnN0
LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0
X2xlYWtlZCgpOwogICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBs
YWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf
X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf
X3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAg
ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAg
ICAgIGNvbnN0IGJvb2wgX190ZXN0bjEgPSBfX24xIDwgX19zaXplIC0gX19wb3M7CiAgICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4xID0gX190ZXN0bjEgPyBfX24xIDogX19zaXplIC0gX19w
b3M7CiAgICAgICAgaWYgKF9fc2l6ZSAtIF9fZm9sZG4xID4gdGhpcy0+bWF4X3NpemUoKSAtIF9f
bjIpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNl
Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9D
aGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJU
Kj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFj
ZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwgX19zLCBfX3MgKyBfX24yKTsKCiAg
ICAgICAgZWxzZSByZXR1cm4KICAgICAgICAgICAgICAgX01fcmVwbGFjZShfTV9pYmVnaW4oKSAr
IF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zLCBfX3MgKyBfX24yLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfQ2hhclQqPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7
CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhp
cy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwg
X19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs
IGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
cmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2li
ZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBf
X3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCB0cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJp
bmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAg
ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKICAgICAg
ICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9fazEsIF9fazIsCiAgICAgICAgICAg
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRl
Z29yeSgpKTsgfQoKCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p
MiwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1
cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgaXRl
cmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNl
KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25z
dF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoK
ICAgIHByaXZhdGU6CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZV9z
YWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlcmF0b3IgX19rMSwK
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19rMik7CgoKCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25z
dHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeSBfVGFnOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQs
IF9fYSwgX1RhZygpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgog
ICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1
Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9fZW5kKSwgX19hKTsKICAgICAgICB9Cgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAg
ICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxv
YyYgX19hKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8
X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3Ry
dWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAg
IF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAg
X1NfY29uc3RydWN0KF9Gd2RJdGVyIF9fYmVnLCBfRndkSXRlciBfX2VuZCwgY29uc3QgX0FsbG9j
JiBfX2EsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAg
IHN0YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFy
VCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUK
ICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0g
MCkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkg
Y29uc3QKICAgICAgewoKICAgICAgICBzaXplX3R5cGUgX19uID0gdGhpcy0+c2l6ZSgpOwogICAg
ICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1pbmFs
KTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpOwogICAgICB9CgogICAgICBjb25zdCBfQ2hhclQq
CiAgICAgIGRhdGEoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhKCk7IH0KCiAgICAgIGFsbG9jYXRv
cl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhcGx1czsg
fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu
ZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUo
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fcywgX19w
b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90
eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fc3RyLmRhdGEoKSwg
X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAg
ICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3Bvcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5k
KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihf
X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5maW5kX2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKF9DaGFyVCBfX2MsIHNp
emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBf
X3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBu
cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zLCBfX3Bvcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
bGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg
IGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9f
c3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAog
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2Yo
X19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDAp
IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX24pIGNvbnN0OwogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihfQ2hh
clQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIGJhc2ljX3N0cmlu
ZwogICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3Mp
IGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAg
ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpzdWJzdHIiKTsKICAgICAgICBy
ZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAgICAgfQoKICAgICAgaW50
CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgICAgewog
ICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBl
IF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f
c2l6ZSwgX19vc2l6ZSk7CgogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShf
TV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICAgIGlmICghX19yKQogICAgICAg
ICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKICAgICAgICByZXR1cm4gX19yOwogICAgICB9Cgog
ICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKCgog
ICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBj
b25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAg
ICBzaXplX3R5cGUgX19uMikgY29uc3Q7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDog
X01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJh
dG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf
X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBf
X2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgog
ICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9f
c3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hh
clQgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihf
X2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICBy
ZXR1cm4gX19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf
X2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0
IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo
cykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg
ICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg
IT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBy
ZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4g
X19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMu
Y29tcGFyZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg
PD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCog
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g
X19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
bGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19s
aHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv
bXBhcmUoX19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2Fw
KF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAg
ICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA1NCAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvdm9sL2dj
Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMwoKCgoKIyAxICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDY0ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
IyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFw
LmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAg
IHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwg
X1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRl
eCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9f
Zmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19w
YXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0K
ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1
c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgog
ICAgIAoKICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0g
X19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVl
VHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAg
ICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCAr
IF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsK
ICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAq
KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l
IHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9o
ZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0
YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSks
IF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVz
dF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5k
ZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7
CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5j
ZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vj
b25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxk
KSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRD
aGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9f
c2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAg
ICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAg
aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ
bmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJ
bmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmly
c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
dm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAo
X19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFs
dWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0
IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl
LAogICAgICAgICAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2Ug
X19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFs
dWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBf
X2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5k
ZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYg
KF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25k
Q2hpbGQgLSAxKSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9f
aG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChf
X3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19s
ZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19z
ZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAx
OwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu
ZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp
bmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK
ICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xh
c3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVl
VHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19s
YXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAy
KS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs
IF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAg
ICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7
CgoKICAgICAKCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAg
X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5
cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAg
ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9p
ZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9f
bGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0K
Cn0KIyA2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIg
Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9U
ZW1wb3JhcnlfYnVmZmVyCnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJk
aWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZm
ZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoK
ICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQog
ICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xl
biA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2Yo
X1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAv
PSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBf
X3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFs
LCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01f
bGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVy
biBfTV9sZW47IH0KCiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4g
X01fb3JpZ2luYWxfbGVuOyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0K
CiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFy
eV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAg
ICAgIF9NX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRl
X2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1
ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsK
ICAgICAgICBmcmVlKF9NX2J1ZmZlcik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBf
TV9sZW4gPSAwOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZm
ZXIoKSB7CiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBm
cmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3Qg
X1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3Jhcnlf
YnVmZmVyJikge30KfTsKCn0KIyA2NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODQgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29u
c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsKCiAgICAg
CiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAgICAgIHJl
dHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9f
YzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2Eg
PCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogICAg
ICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDEx
OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is
IGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAo
X19jb21wKF9fYSwgX19iKSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAg
IHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAg
IHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz
ZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlm
IChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg
ICByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3JfZWFjaChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQogICAgewoKICAg
ICAKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9f
ZigqX19maXJzdCk7CiAgICAgIHJldHVybiBfX2Y7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAg
IGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29u
c3QgX1RwJiBfX3ZhbCwKICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICAgICAg
KytfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1
dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9f
Zmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBf
Y291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBf
X3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7Cgog
ICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf
X2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3Qp
IHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKCpfX2Zp
cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh
c2UgMToKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg
ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVy
biBfX2xhc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAg
ICBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAg
PSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4g
MCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAg
aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsK
ICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgog
ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f
Zmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJu
IF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg
Y2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAg
IH0KIyAyODkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAg
IAoKICAgICAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzA5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZp
bmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRf
aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
OwogICAgfQojIDMyOSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0Zv
cndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0g
X19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpf
X2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2Zp
cnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzU4ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNh
dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNh
dGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25l
eHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBp
ZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4gX19m
aXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xh
c3Q7CiAgICB9CiMgMzg3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVu
Y2VfdHlwZQogICAgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg
Y29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAo
Kl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwog
ICAgfQojIDQxMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0K
IyA0NTAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK
CgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmly
c3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICAgICAg
cmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgICAgIF9Gb3J3
YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAg
ICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFz
dDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAg
ICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQg
PSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAg
IHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAg
ICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Qx
OwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVy
biBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICBy
ZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAg
IF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy
ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh
cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQogICAg
ewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8
IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9G
b3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190
bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFf
X3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwog
ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9f
cDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJ
dGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAgIGlm
IChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICBy
ZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBf
X2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFz
dDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAg
ICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsK
ICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4g
X19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0
dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAg
ICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAg
IAogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFz
dCwgX192YWwpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAg
X0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0g
X19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3Qg
JiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICAgICArK19faTsKICAgICAg
ICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0g
ZmluZChfX2ksIF9fbGFzdCwgX192YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0
OwogICAgICB9CiAgICB9CiMgNjQzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp
bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwg
Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQp
CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAt
IDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19p
OwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlf
cHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19u
OwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4g
X19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFz
dCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVy
biBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBz
d2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAg
ICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0
Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvdm9sL2dj
Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVy
YXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9V
bmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpf
X3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICB9CiMgNzY1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5h
cnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0
aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0
KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAm
IF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAK
CiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
ICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19u
ZXdfdmFsdWU7CiAgICB9CiMgODI1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2Vf
aWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKl9fZmlyc3QgPSBf
X25ld192YWx1ZTsKICAgIH0KIyA4NTYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAg
cmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAg
ICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/
IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4
ODggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
LCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRw
dXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9f
Zmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQojIDkxOCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
R2VuZXJhdG9yPgogICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAogICAgIAoK
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19m
aXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTQyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0
SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRl
cgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0
b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCAr
K19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJz
dDsKICAgIH0KIyA5NjkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2Nv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAog
ICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAgICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVy
biBfX3Jlc3VsdDsKICAgIH0KIyAxMDAzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJ
dGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUg
X19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAg
ICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMzkgIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBy
ZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg
X19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmly
c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9f
bGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAg
ICByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAg
IF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0Zvcndh
cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9f
Zmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytf
X2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog
ICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
b3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jl
c3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg
IGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmly
c3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1
cm4gKytfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUg
KCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0
KSkKICAgICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVz
dWx0OwogICAgfQojIDExNDUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVn
b3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVz
dWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTE3MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAg
ICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg
ICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19m
aXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAh
PSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkg
ewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBf
X3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE5OSAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGls
ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVz
dWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19f
cmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5l
IF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAg
IAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6
aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f
bGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMjYz
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsK
CiAgICAgICAgIAogICAgICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQo
X19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg
dW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK
CiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlf
cHJlZCk7CiAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3Qs
IF9fYmluYXJ5X3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1
ZSkKICAgICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xh
c3QpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAg
ICAgICAgICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9f
Zmlyc3QrKywgLS1fX2xhc3QpOwogICAgfQojIDEzNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAg
ICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMTM3NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBy
ZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAgICAg
KytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5OSAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVh
blJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlk
ZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAg
ICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9f
bjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg
KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVy
IF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0Kyss
ICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAg
IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7
CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9f
bGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAg
ICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9f
bWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk
bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2
ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAg
ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9f
bGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9f
Zmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg
ICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg
KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg
X0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24g
PSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2Zp
cnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBf
X2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwog
ICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwg
X19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsK
ICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAg
Zm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAg
ICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3Ag
LSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAg
ICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9f
aiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8
IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAg
ICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICog
KF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9
CiMgMTU2MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZv
aWQKICAgIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxl
LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVy
VHlwZTsKICAgICAgX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBl
KCkpOwogICAgfQojIDE1ODkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg
ICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwg
X19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2MTIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9E
aXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFu
Y2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKICAgIH0KIyAx
NjM0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2
b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Qg
KyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0
ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KIyAxNjYwICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51
bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
IF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dh
cChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmly
c3QpKQogICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAg
ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0
ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2Fw
KCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAg
ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIK
ICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0Owog
ICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJz
dCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBp
bmxpbmUgX0ZvcndhcmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7
CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3Qs
IF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5h
bWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRp
dGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4p
CiAgICB7CiAgICAgIGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmly
c3QpID8gX19sYXN0IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19m
aXJzdDsKICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJ
dGVyIF9fYmVnaW4gPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNl
X3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7
CiAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9f
YmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Q
b2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5j
ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlm
IChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
MSA9IF9fZmlyc3Q7CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAg
ICAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAg
ICAgICAgIH0KICAgICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAg
ICAgICAgcmV0dXJuIF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9y
d2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9f
bGVuIC8gMik7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRp
b25fYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19z
dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4gLSBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRl
KF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0
YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQog
ICAgfQojIDE4NDggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICB7CiAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAg
ICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICAgICAgICByZXR1
cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBl
KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UK
ICAgICAgICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xh
c3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfVHAgX19waXZvdCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAg
IC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0t
X19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytf
X2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNj
ZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
VHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAgICAgKytfX2Zp
cnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9f
bGFzdCkpCiAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0
KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE5MjkgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIGVudW0g
eyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQogICAgewogICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3
aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAg
ICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xh
c3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5n
dWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWws
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0g
X19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4
dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7
CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAg
X19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoK
ICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9f
bGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX192
YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9f
aSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxz
ZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsKTsKICAgICAg
fQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsg
X19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAg
ICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQo
X19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAg
ICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19p
LCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21B
Y2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsg
X19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf
X2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK
ICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAg
ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAg
ICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9f
bGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz
dCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBp
ZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19jb21wKTsKICAgICAgICBf
X3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3Qs
IF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9T
aXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9TaXplIF9fbikKICAgIHsKICAgICAgX1Np
emUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwog
ICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3Ao
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xk
KSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9
CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0
ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19m
aXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRy
b3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3Qg
PSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwg
X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVw
dGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg
X19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAtLV9f
ZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAg
X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAgICAgICAgICAgX19jb21wKTsK
ICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9f
Y29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBz
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9f
bGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
ICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmly
c3QpICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7
CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7
CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9f
aW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAgICAgX19tZXJnZV93aXRo
b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmly
c3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19j
b21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0
eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9t
QWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3Rl
cF9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6
ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAg
ICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdv
X3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAgICAgX19maXJz
dCArPSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFu
Y2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwg
X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAg
ICAgICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFt
ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0
X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9E
aXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7Cgog
ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19y
ZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVw
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQogICAg
ICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9z
aXplKTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAg
ICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0
LAogICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0
YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0
IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVu
a19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9E
aXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlv
bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2No
dW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf
X2NodW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAg
ICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9p
bnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3Rh
bmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBf
c2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0
LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg
ICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9f
c3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xl
biA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1
ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6
ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9z
aXplLCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAg
ICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6
ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29y
dF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19j
b21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUg
X0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkK
ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7
CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAg
ICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRo
X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29y
dF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAg
X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19t
aWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0
IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUg
X0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19z
dGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0g
X19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp
cnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBf
X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAg
X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZm
ZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19t
ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRk
bGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g
X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwogICAgfQojIDI0MzAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAg
CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4g
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAg
IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiAgICAg
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBf
RGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9p
ZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAg
ICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYo
X19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19p
bnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQog
ICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4o
KSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwg
X19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAgX19w
b3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAg
c29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KIyAyNTQwICIvdXNyL2xvY2FsL3Zv
bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBtYWtlX2hlYXAo
X19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9fY29tcCgq
X19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBf
X21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVy
CiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
Pjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVU
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAg
CiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJu
IF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFz
dCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jl
c3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFs
X2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICAr
K19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs
dF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBp
ZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9f
cmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytf
X2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf
cmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMz
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlh
bF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9m
aXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdo
aWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9s
YXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsr
X19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtl
X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwg
Kl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUo
X19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1
bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVz
dWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjg2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykg
ewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVk
X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0
KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAg
X19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0Owog
ICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAy
NzI4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAg
ICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmly
c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9f
bWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYg
KF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UK
ICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91c3IvbG9jYWwvdm9sL2dj
Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dl
cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19s
ZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFs
ZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkg
ewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0
OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRs
ZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19f
Zmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAg
ICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICB9CiMgMjgxNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBs
b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAg
IAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7
CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsK
ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19o
YWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBf
X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9
IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19s
ZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rp
c3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0
YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGls
ZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21p
ZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAg
ICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAg
ICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJz
dDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAg
fQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTAxICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBl
OwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJk
SXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYg
PSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNl
KF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkp
CiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmly
c3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19s
ZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsK
ICAgIH0KIyAyOTQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5n
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw
ZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19s
ZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9
IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAo
Kl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
ICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg
ICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVu
ID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19s
ZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3Qs
IF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy
PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf
Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzAw
MyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVx
dWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z
dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg
CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg
IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg
IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs
IF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2Zp
cnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g
X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0
LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m
aXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp
OwogICAgfQojIDMwNTIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX1RwPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkK
ICAgIHsKCgogICAgIAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dl
cl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xh
c3QgJiYgIShfX3ZhbCA8ICpfX2kpOwogICAgfQojIDMwODMgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wK
ICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dl
cl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19p
ICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg
ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAg
ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1
dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFz
dDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg
ICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf
X2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAg
ICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmICgq
X19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19t
aWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRf
Y3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19s
ZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f
Zmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25k
X2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7
CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3Rf
Y3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAg
ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAg
ICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNl
KF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBf
X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgICAgIF9f
bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBf
X2xlbjIyKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf
X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9f
bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVu
MSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0
KSkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJl
dHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2Zp
cnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAg
ICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwog
ICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7
CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRf
Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXAp
OwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAg
ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBh
ZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAg
ICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAg
IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShf
X25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAg
ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xl
bjIgLSBfX2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19yb3Rh
dGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9l
bmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUp
IHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy
KTsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAg
ICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9
CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZm
ZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNvcHko
X19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5jZShf
X2ZpcnN0LCBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdl
X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2Zp
cnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0g
X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0Miwg
X19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz
dDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoKl9f
bGFzdDIgPCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAg
ICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFz
dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19s
YXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1
cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAg
ICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz
dWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICAgICAq
LS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp
CiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9f
cmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19f
bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0K
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu
YW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX2Fk
YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0g
X19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAg
ICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19m
aXJzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j
dXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0
ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4y
KSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAg
ICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19z
ZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsK
ICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9j
dXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBf
X2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9j
dXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgICAgICAgX19s
ZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAg
ICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9f
bGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1
ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9h
ZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xl
bjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUg
X1BvaW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21l
cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf
X2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19s
ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5k
ID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShf
X2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXAp
OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUp
IHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19s
YXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19t
aWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2Zp
cnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRk
bGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZh
bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0
ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwog
ICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9f
bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAg
ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAg
ICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv
bmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl
bjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAg
ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0
LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAt
IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgfQog
ICAgfQojIDM1MDggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg
IHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAg
ICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Jp
ZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBl
OwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRk
bGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4x
ID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
MiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8
X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm
ZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogICAgICBlbHNl
CiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xl
bjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0
YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlu
cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0
ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwog
ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoK
ICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBf
X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAg
ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s
ZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBp
bmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8
ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg
KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy
LCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19j
b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2Zp
cnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0
ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg
ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0
cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAg
ICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qy
OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy
ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBz
ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9f
Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs
IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq
X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2Ug
aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog
ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg
ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg
ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFz
dDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5
cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNl
IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsK
ICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy
OwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3lt
bWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg
ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg
ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9P
dXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK
ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz
dDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg
ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBl
bHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg
IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg
IGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVu
dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs
dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm
IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg
PSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo
Kl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBf
X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19j
b21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog
ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg
ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf
X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19p
aSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg
IHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z
d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg
ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24o
X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg
KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7
CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19p
aSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg
ICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp
IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg
ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f
bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19p
KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg
d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3
YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg
ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo
X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK
ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19p
KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg
IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp
dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg
ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmly
c3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAg
ewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy
OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09
ICpfX2l0ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFz
dDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZp
bmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAg
CiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy
OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2Zp
cnN0MSwgKl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJu
IF9fbGFzdDE7CiAgICB9CiMgNDIwMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
MSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9l
bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykK
ICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFz
dDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3Qx
OwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3Vs
dAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFz
dDIpOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBf
X25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAg
ICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVy
YXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewog
ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAg
ICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAg
ICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAg
ICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19j
b21wKTsKICAgICAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0g
X19uZXdfcmVzdWx0OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAg
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjI+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAg
ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVy
MjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBf
X3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jl
dkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQg
PT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAg
IGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg
IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBf
X2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0Miwg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAg
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7
CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19y
bGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJ
dGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAg
ICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3Vs
dCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlw
ZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2Vu
ZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwg
X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp
bmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg
ICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSks
CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKfQojIDcwICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDIgMwojIDU3ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMSAz
CiMgNDUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf
c3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3NpemUg
PSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3Qg
dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6
ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0
eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVv
ZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYg
X19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNv
cHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9faSA9
IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1Zikg
LyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytdID0g
Kl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAqIF9f
ciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3RoID0g
X19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQogICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRh
KCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0gX19y
LT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9yICg7
OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBf
X2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19y
LT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAg
ICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVfdHlw
ZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1JlcCog
X19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAgICAg
ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAgICAg
ICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0gX19h
bm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAgICAg
ICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAg
ICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9
CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
SXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs
IGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90
eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhw
ZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9y
KCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCiAgICAgICAg
aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBf
U19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpf
U19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19jb3B5X2No
YXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0Y2goLi4u
KQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7Cgog
ICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAg
ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQq
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0
cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsK
ICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1Nf
ZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2Ny
ZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAg
ICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19j
KTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9N
X2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9s
ZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJt
aW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgp
LT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAg
ICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxv
YyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFy
VCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9T
X2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQog
ICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQog
ICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19h
KSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19z
LCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCog
X19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f
cywgX19zID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDogMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNpemVfdHlw
ZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhf
U19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVy
IF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewogICAg
ICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoKICAgICAgICAgIGFs
bG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFy
VCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxvY2F0
b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01f
ZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6
CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQogICAgewogICAgICBz
aXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXpl
b2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19oYXJkKCkK
ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBfTV9tdXRh
dGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9CgoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl
X3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19s
ZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsgX19w
b3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6
ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8
fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9y
X3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwoKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUg
X19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVh
ZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzaXplb2YoX1JlcCkg
LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9SZXAqIF9fcjsKICAgICAgICAgIGlm
IChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4gX19wYWdlX2NhcGFjaXR5
KQoKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUgPiAyKmNhcGFj
aXR5KCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc2l6ZSA6IDIq
Y2FwYWNpdHkoKSwgX19hKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yID0gX1JlcDo6
X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgICBpZiAo
X19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm
ZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRfYWxsb2NhdG9y
KCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9yZXAo
KS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7
CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQog
ICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3BvcyAr
IF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAgICAgX01fcmVwKCktPl9N
X3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsK
ICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5j
YXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICB7CiAgICAgICAg
ICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xlbmd0
aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CgogICAgICAgICAgaWYgKF9fcmVzIDwg
dGhpcy0+c2l6ZSgpKQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKICAgICAgICAg
IGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCog
X190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAg
ICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3Rt
cCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAgaWYg
KF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJh
YmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9f
cy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2Nh
dG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQq
IF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsKICAg
ICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBf
X3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19zLl9N
X2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAgICAg
ICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19j
YXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBp
ZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6ZSA9
IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKIyA0MjEg
Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5n
LnRjYyIgMwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNvbnN0
IHNpemVfdCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBjb25zdCBzaXplX3QgX19tYWxsb2Nf
aGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAgICAgIGlmICgoX19zaXplICsgX19t
YWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXpl
X3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxv
Y19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3BhZ2VzaXplOwog
ICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAg
ICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1Jl
cCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3NpemUgPiBfX3N1YnBhZ2VzaXplKQogICAg
ICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fc3VicGFnZXNp
emUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fc3VicGFnZXNpemUpKQog
ICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0
cmEgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkg
KiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CgoKCiAgICAgIHZvaWQq
IF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAg
ICAgIF9SZXAgKl9fcCA9IG5ldyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9jYXBhY2l0
eSA9IF9fY2FwYWNpdHk7CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+
X01fbGVuZ3RoID0gMDsKICAgICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQq
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9N
X2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAgewoKICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOwoK
ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXpl
X3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICBj
b25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9f
bWFsbG9jX2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAg
ICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgX1JlcCogX19yOwogICAgICBpZiAoX19yZXF1ZXN0
ZWRfY2FwID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5
KQoKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwID4gMipfTV9j
YXBhY2l0eSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2NhcCA6
IDIqX01fY2FwYWNpdHksIF9fYWxsb2MpOwogICAgICBlbHNlCiAgICAgICAgX19yID0gX1JlcDo6
X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCwgX19hbGxvYyk7CgogICAgICBpZiAoX01fbGVuZ3Ro
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBlOjpjb3B5
KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAgICAgICAg
IGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShf
X2FsbG9jKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRh
dGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAg
ICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh
c2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl
KCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9f
c2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVy
YXNlKF9fbik7CgogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShp
dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAg
ICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFj
ZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAg
IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcg
PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBz
aXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9
IHRoaXMtPm1heF9zaXplKCk7CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAg
ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAg
ICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRh
dGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAg
ICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBl
IF9fbjIpCiAgICB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXpl
KCk7CiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2Zf
cmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4y
ID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9s
ZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4g
dGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
c3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBz
aXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+
IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl
dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdp
bigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsK
CgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24p
ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg
ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlz
LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp
cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgp
LCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwog
ICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19j
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6
ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7
CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBf
X3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwog
ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir
KF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsK
ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2Vy
dmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7
CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAg
ICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0g
X19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkg
LSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
bmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAg
ICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29m
ZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl
bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBp
ZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9z
KQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK
ICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9
IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9z
KQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywg
X19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAg
ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQg
PSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0g
X19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBl
OjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAg
ICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9z
ID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9
PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAg
ICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAg
ICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChf
X3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9y
ICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6
ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsK
ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7
CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAg
ICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3Ms
IF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBy
ZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s
YXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9f
cG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEo
KVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBu
cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9z
ID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQog
ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3Nd
KSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm
aW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMt
PnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgp
W19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBv
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlm
ICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAg
IGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9f
cywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXpl
OwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAg
ICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6
ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6
ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19z
aXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog
ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3Np
emUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9f
b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg
X19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig
PSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVf
dHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8
IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0
cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0g
X19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBf
X3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3Np
emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w
b3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsg
X19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBf
X3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0No
YXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl
KCk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywg
X19zaXplKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQK
ICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf
X3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n
Ojpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9f
bjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAg
IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBf
X2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwog
ICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9f
bjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFz
aWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFp
dHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1p
bihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Jz
aXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh
dGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0g
X19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9T
X3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyLAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9j
OjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIu
c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6
IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7
CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNp
Y19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3Ry
aW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFt
PGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3Ry
ZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19p
c3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf
b3N0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYs
IGNvbnN0IHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2No
YXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2No
YXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAg
Z2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwp9CiMgNTggIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgNDYgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKCgoKCgogIGNsYXNzIGxvZ2ljX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbgogIHsK
ICAgIHN0cmluZyBfTV9tc2c7CgogIHB1YmxpYzoKCiAgICBleHBsaWNpdAogICAgbG9naWNfZXJy
b3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CgogICAgdmlydHVhbAogICAgfmxvZ2ljX2Vycm9yKCkg
dGhyb3coKTsKCgoKICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgIHdoYXQoKSBjb25zdCB0aHJv
dygpOwogIH07CgoKCiAgY2xhc3MgZG9tYWluX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9yCiAg
ewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IGRvbWFpbl9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJn
KTsKICB9OwoKCiAgY2xhc3MgaW52YWxpZF9hcmd1bWVudCA6IHB1YmxpYyBsb2dpY19lcnJvcgog
IHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBpbnZhbGlkX2FyZ3VtZW50KGNvbnN0IHN0cmluZyYg
X19hcmcpOwogIH07CgoKCiAgY2xhc3MgbGVuZ3RoX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9y
CiAgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IGxlbmd0aF9lcnJvcihjb25zdCBzdHJpbmcmIF9f
YXJnKTsKICB9OwoKCgogIGNsYXNzIG91dF9vZl9yYW5nZSA6IHB1YmxpYyBsb2dpY19lcnJvcgog
IHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBvdXRfb2ZfcmFuZ2UoY29uc3Qgc3RyaW5nJiBfX2Fy
Zyk7CiAgfTsKCgoKCgoKICBjbGFzcyBydW50aW1lX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbgog
IHsKICAgIHN0cmluZyBfTV9tc2c7CgogIHB1YmxpYzoKCiAgICBleHBsaWNpdAogICAgcnVudGlt
ZV9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKCiAgICB2aXJ0dWFsCiAgICB+cnVudGltZV9l
cnJvcigpIHRocm93KCk7CgoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICB3aGF0KCkgY29u
c3QgdGhyb3coKTsKICB9OwoKCiAgY2xhc3MgcmFuZ2VfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9l
cnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCByYW5nZV9lcnJvcihjb25zdCBzdHJpbmcm
IF9fYXJnKTsKICB9OwoKCiAgY2xhc3Mgb3ZlcmZsb3dfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9l
cnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBvdmVyZmxvd19lcnJvcihjb25zdCBzdHJp
bmcmIF9fYXJnKTsKICB9OwoKCiAgY2xhc3MgdW5kZXJmbG93X2Vycm9yIDogcHVibGljIHJ1bnRp
bWVfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgdW5kZXJmbG93X2Vycm9yKGNvbnN0
IHN0cmluZyYgX19hcmcpOwogIH07Cn0KIyAyNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvYXJyYXkuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L2RldGFpbC9pdGVyYXRvci5ocHAiIDEgMwojIDU5ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBwIiAzCiMgMSAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnLmhwcCIgMSAzCiMgMjYgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy5ocHAiIDMKIyAxICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcvdXNlci5ocHAiIDEgMwojIDI3ICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcuaHBwIiAyIDMKCgoKCiMgMSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3NlbGVjdF9jb21waWxl
cl9jb25maWcuaHBwIiAxIDMKIyAzMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvY29uZmlnLmhwcCIgMiAzCgoKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvY29uZmlnL2NvbXBpbGVyL2djYy5ocHAiIDEgMwojIDM2ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcuaHBwIiAyIDMKCgoKCiMgMSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3NlbGVjdF9zdGRsaWJfY29uZmlnLmhwcCIg
MSAzCiMgNDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy5ocHAi
IDIgMwoKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy9z
dGRsaWIvbGlic3RkY3BwMy5ocHAiIDEgMwojIDQ1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC9jb25maWcuaHBwIiAyIDMKCgoKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvY29uZmlnL3NlbGVjdF9wbGF0Zm9ybV9jb25maWcuaHBwIiAxIDMKIyA1
MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnLmhwcCIgMiAzCgoK
CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3BsYXRmb3Jt
L2xpbnV4LmhwcCIgMSAzCiMgNjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L2NvbmZpZy9wbGF0Zm9ybS9saW51eC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9jb25maWcvcG9zaXhfZmVhdHVyZXMuaHBwIiAxIDMKIyAxMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcCIg
MwojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwpleHRlcm4gIkMiIHsKIyAxNzUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5oIiAxIDMKIyAxNzYgIi91c3IvaW5jbHVkZS91
bmlzdGQuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDEg
MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9u
bWVudHMuaCIgMiAzCiMgMTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDE5OSAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAwICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz
CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBz
b2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBhY2Nl
c3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIHRocm93
ICgpOwojIDI5MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29mZl90IGxzZWVr
IChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKIyAz
MDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGlu
dCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVh
ZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93ICgpOwoKCmV4
dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAq
X19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICB0aHJvdyAoKTsK
ZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAo
KTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0
IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCBw
d3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSB0aHJvdyAoKTsKIyAzNjIgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBp
bnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl
eHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVl
LCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1
c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFy
ICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRf
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIg
Kl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBf
X3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9kaXJfbmFtZSAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICoq
X19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBpbnQgZXhlY3Zl
IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwgY2hhciAqX19jb25z
dCBfX2VudnBbXSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY3YgKF9fY29uc3Qg
Y2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAu
Li4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg
X19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBleGVjdnAg
KF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBjaGFy
ICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1l
LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVudW0KICB7CiAg
ICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoK
ICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoK
ICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJ
U0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklP
X0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9Q
Q19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9Q
Q19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgogICAgX1BDX0FM
TE9DX1NJWkVfTUlOLAoKICAgIF9QQ19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0KICB7CiAgICBf
U0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9T
Q19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgog
ICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9J
RFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJ
TkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19Q
UklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywK
CiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NL
X1JBTkdFLAoKICAgIF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNT
SU5HLAoKICAgIF9TQ19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMs
CgogICAgX1NDX0FJT19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9f
UFJJT19ERUxUQV9NQVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVO
X01BWCwKCiAgICBfU0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BB
R0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAg
IF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVS
X01BWCwKCgoKCiAgICBfU0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAg
X1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9X
RUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1Rf
TUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hB
UkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwK
CiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JV
TiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJ
LAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5U
RVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwK
CiAgICBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoK
ICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0s
CgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19Q
SUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9T
Q19USFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAg
X1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19U
VFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAg
X1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0Nf
VEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAg
X1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVE
VUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklP
X1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9D
RVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFH
RVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0Nf
UEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVS
U0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1ND
X1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVS
TSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5f
WFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1ND
X0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1ND
X0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19X
T1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NT
SVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1ND
X1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9T
Q19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAg
IF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwK
CiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFY
LAoKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcs
CgogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoK
ICAgIF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19Y
T1BFTl9SRUFMVElNRV9USFJFQURTLAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0Nf
QkFSUklFUlMsCgogICAgX1NDX0JBU0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9T
Q19DX0xBTkdfU1VQUE9SVF9SLAoKICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQ
VVRJTUUsCgogICAgX1NDX1RIUkVBRF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAg
X1NDX0RFVklDRV9TUEVDSUZJQywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1ND
X0ZEX01HTVQsCgogICAgX1NDX0ZJRk8sCgogICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRU
UklCVVRFUywKCiAgICBfU0NfRklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAg
ICBfU0NfTU9OT1RPTklDX0NMT0NLLAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoKICAgIF9TQ19T
SU5HTEVfUFJPQ0VTUywKCiAgICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRF
Ul9MT0NLUywKCiAgICBfU0NfU1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19S
RUdFWF9WRVJTSU9OLAoKICAgIF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0Nf
U1BBV04sCgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElD
X1NFUlZFUiwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJB
U0VfUiwKCiAgICBfU0NfVElNRU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoK
ICAgIF9TQ19VU0VSX0dST1VQUywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9Q
QlMsCgogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAg
ICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxP
T1BfTUFYLAoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BPSU5ULAoKCiAg
ICBfU0NfVjZfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKCiAgICBfU0Nf
VjZfTFA2NF9PRkY2NCwKCiAgICBfU0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfSE9TVF9O
QU1FX01BWCwKCiAgICBfU0NfVFJBQ0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKCiAg
ICBfU0NfVFJBQ0VfSU5IRVJJVCwKCiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoKCgoKZW51bQog
IHsKICAgIF9DU19QQVRILAoKCgoKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwKCiAgICBfQ1Nf
TEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElOVEZMQUdTLAoK
ICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgogICAgX0NTX0xG
UzY0X0xJQlMsCgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1NfWEJTNV9JTFAz
Ml9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1Ms
CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYz
Ml9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1Nf
WEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElC
UywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQ
NjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBf
Q1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxB
R1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJ
R19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBf
Q1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMy
X09GRjMyX0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAg
ICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJf
T0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoK
ICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZf
SUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxB
R1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9W
Nl9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUywK
CiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2
X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZM
QUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfUE9TSVhf
VjZfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9SRVNUUklDVEVE
X0VOVlMKCiAgfTsKIyA1MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKZXh0ZXJuIGxv
bmcgaW50IHBhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFtZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50
IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
X19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQg
KHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgdGhyb3cg
KCk7CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3QgX19nZXRw
Z2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBnaWQgKF9f
cGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3Qg
X19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9p
bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0
ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBz
ZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBf
X3BpZF90IGZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzeW1saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19j
b25zdCBjaGFyICpfX3RvKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmVhZGxpbmsgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5s
aW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBybWRpciAo
X19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBn
cnAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQs
IF9fcGlkX3QgX19wZ3JwX2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2
b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBz
aXplX3QgX19uYW1lX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGxvZ2luIChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZ2V0
b3B0LmgiIDMKZXh0ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRl
cm4gY2hhciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGlu
dCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMg
MTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX19h
cmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMpOwojIDE3
NSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCn0KIyA3MjcgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMiAzCgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVf
dCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldGhv
c3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5u
YW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2V0
ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHJl
dm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBw
cm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgX19zY2Fs
ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpl
eHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gdm9pZCBzZXR1
c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChpbnQgX19u
b2NoZGlyLCBpbnQgX19ub2Nsb3NlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjaHJvb3Qg
KF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHBhc3Mg
KF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnN5bmMg
KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGdldGhvc3RpZCAodm9p
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19v
ZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK
ZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9f
bGVuZ3RoKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnRydW5jYXRlIChpbnQgX19mZCwgX19v
ZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODUxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK
ZXh0ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSB0aHJvdyAoKTsKIyA4
NjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGJyayAodm9pZCAqX19hZGRy
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAoaW50cHRyX3QgX19kZWx0YSkgdGhy
b3cgKCk7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5
c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgdGhyb3cgKCk7CiMgOTA3ICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBfX2NtZCwgX19v
ZmZfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTE3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0
ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZjY0X3QgX19sZW4pIHRo
cm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZmRhdGFz
eW5jIChpbnQgX19maWxkZXMpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNyeXB0IChf
X2NvbnN0IGNoYXIgKl9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fc2FsdCkgdGhyb3cgKCk7CgoKCmV4
dGVybiB2b2lkIGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2Zyb20s
IHZvaWQgKl9fcmVzdHJpY3QgX190bywKICAgICAgICAgICAgICAgICAgc3NpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9y
ayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAo
Kl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKfQojIDEyICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC9jb25maWcvcG9zaXhfZmVhdHVyZXMuaHBwIiAyIDMKIyA2OCAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4Lmhw
cCIgMiAzCiMgNTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy5o
cHAiIDIgMwoKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZp
Zy9zdWZmaXguaHBwIiAxIDMKIyAzMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvY29uZmlnL3N1ZmZpeC5ocHAiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3N1ZmZpeC5ocHAiIDIg
MwojIDU4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcuaHBwIiAy
IDMKIyA2MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2l0ZXJh
dG9yLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMuaHBwIiAxIDMKIyAxMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvdHlwZV90cmFpdHMuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvYWRkX2NvbnN0LmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiIDMKIyAxICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlw
ZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0
ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMwojIDEg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3RlbXBsYXRlX2Fy
aXR5X2Z3ZC5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC9tcGwvYXV4Xy90ZW1wbGF0ZV9hcml0eV9md2QuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cm5h
bWVzcGFjZSBtcGwgewpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBGID4gc3Ry
dWN0IHRlbXBsYXRlX2FyaXR5OwoKfQp9Cn0KIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAy
IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVw
cm9jZXNzb3IvcGFyYW1zLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJhbXMuaHBwIiAzCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vY29uZmlnL3ByZXByb2Nlc3Nv
ci5ocHAiIDEgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwv
YXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1zLmhwcCIgMiAzCiMgMjkgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJhbXMuaHBwIiAzCiMg
MSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2NhdC5o
cHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9j
ZXNzb3IvY2F0LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwIiAyIDMKIyAzMCAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3Bh
cmFtcy5ocHAiIDIgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDIgMwojIDEgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0Lmhw
cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhf
L2xhbWJkYV9zdXBwb3J0LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9sYW1iZGEuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5ocHAiIDMKIyAx
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9jb25maWcvdHRw
LmhwcCIgMSAzCiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9h
dXhfL2NvbmZpZy9sYW1iZGEuaHBwIiAyIDMKIyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwIiAyIDMKIyAyMiAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRl
X2FyaXR5X3NwZWMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC9tcGwvYXV4Xy9jb25maWcvb3ZlcmxvYWRfcmVzb2x1dGlvbi5ocHAiIDEgMwojIDIzICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVt
cGxhdGVfYXJpdHlfc3BlYy5ocHAiIDIgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMKIyAx
OCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX2Nv
bnN0LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewojIDM0ICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfY29uc3QuaHBwIiAzCnRlbXBsYXRlPCB0
eXBlbmFtZSBUID4gc3RydWN0IGFkZF9jb25zdCB7IHR5cGVkZWYgVCBjb25zdCB0eXBlOyB9OwoK
CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfY29uc3Q8VCY+IHsgdHlwZWRl
ZiBUJiB0eXBlOyB9OwoKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA0NyAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX2NvbnN0Lmhw
cCIgMiAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMvYWRkX2N2LmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jdi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw
IiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw
cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBwIiAyIDMKCm5hbWVzcGFj
ZSBib29zdCB7CiMgMzQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL2FkZF9jdi5ocHAiIDMKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYWRkX2N2
IHsgdHlwZWRlZiBUIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07CgoKCgoKCnRlbXBsYXRlPCB0eXBl
bmFtZSBUID4gc3RydWN0IGFkZF9jdjxUJj4geyB0eXBlZGVmIFQmIHR5cGU7IH07CgoKfQoKIyAx
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
dHlwZV90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQ3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfcG9pbnRlci5ocHAi
IDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9hZGRfcG9pbnRlci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcCIgMSAzCiMgMTMgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2Uu
aHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvYnJva2VuX2NvbXBpbGVyX3NwZWMuaHBwIiAxIDMKIyA4NiAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYnJva2VuX2NvbXBpbGVyX3NwZWMuaHBwIiAz
CgoKCgoKCgoKCgoKCgoKCgojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcCIgMiAzCgoKCiMgMSAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRf
ZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlf
c3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMKIyAxOCAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5o
cHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0
IHJlbW92ZV9yZWZlcmVuY2UgeyB0eXBlZGVmIFQgdHlwZTsgfTsKCgp0ZW1wbGF0ZTwgdHlwZW5h
bWUgVCA+IHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPFQmPiB7IHR5cGVkZWYgVCB0eXBlOyB9Owoj
IDM4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1v
dmVfcmVmZXJlbmNlLmhwcCIgMwp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNDEg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9y
ZWZlcmVuY2UuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5o
cHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMu
aHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTcgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcCIgMiAzCgpu
YW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4Kc3RydWN0IGFkZF9wb2ludGVyX2ltcGwKewogICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVf
cmVmZXJlbmNlPFQ+Ojp0eXBlIG5vX3JlZl90eXBlOwogICAgdHlwZWRlZiBub19yZWZfdHlwZSog
dHlwZTsKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGFkZF9wb2ludGVyIHsg
dHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmFkZF9wb2ludGVyX2ltcGw8VD46OnR5cGUgdHlwZTsg
fTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAzNiAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwIiAyIDMKIyAx
NSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAy
IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9h
ZGRfcmVmZXJlbmNlLmhwcCIgMSAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVuY2UuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIgMSAz
CiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lz
X3JlZmVyZW5jZS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9jb25maWcuaHBwIiAxIDMKIyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIgMiAzCiMgMjcgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5j
ZS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw
cCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5o
cHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9ib29s
X2MuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBs
L2Jvb2xfYy5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0
ZTwgYm9vbCBDID4gc3RydWN0IGJvb2xfYwp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IEM7CiAgICB0eXBlZGVmIGJvb2xfYyB0eXBlOwogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7
CiAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+dmFsdWU7IH0KfTsKCgp0
eXBlZGVmIGJvb2xfYzx0cnVlPiB0cnVlX2M7CnR5cGVkZWYgYm9vbF9jPGZhbHNlPiBmYWxzZV9j
OwoKfQp9CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDI4ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBwIiAyIDMKCm5h
bWVzcGFjZSBib29zdCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3JlZmVy
ZW5jZSA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz
dHJ1Y3QgaXNfcmVmZXJlbmNlPFQmPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OwojIDkxICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVu
Y2UuaHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA5NCAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIg
MiAzCiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2FkZF9yZWZlcmVuY2UuaHBwIiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAx
OSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMg
MjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC90eXBlX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfcmVmZXJlbmNlLmhwcCIgMiAzCgpuYW1lc3BhY2Ug
Ym9vc3QgewoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfcmVmZXJlbmNlIHsg
dHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfcmVm
ZXJlbmNlPFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKIyA3MCAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHAiIDMKdGVtcGxh
dGU8PiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZTx2b2lkPiB7IHR5cGVkZWYgdm9pZCB0eXBlOyB9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZTx2b2lkIGNvbnN0PiB7IHR5cGVkZWYgdm9p
ZCBjb25zdCB0eXBlOyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBhZGRfcmVmZXJlbmNlPHZvaWQgdm9s
YXRpbGU+IHsgdHlwZWRlZiB2b2lkIHZvbGF0aWxlIHR5cGU7IH07CnRlbXBsYXRlPD4gc3RydWN0
IGFkZF9yZWZlcmVuY2U8dm9pZCBjb25zdCB2b2xhdGlsZT4geyB0eXBlZGVmIHZvaWQgY29uc3Qg
dm9sYXRpbGUgdHlwZTsgfTsKCgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgODAg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZl
cmVuY2UuaHBwIiAyIDMKIyAxNiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9hZGRfdm9sYXRpbGUuaHBwIiAxIDMKIyAxNyAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIgMwoj
IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC90eXBlX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAzCiMgMSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3Rl
bXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMiAzCiMg
MTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF92
b2xhdGlsZS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKIyAzNCAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIgMwp0ZW1w
bGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfdm9sYXRpbGUgeyB0eXBlZGVmIFQgdm9sYXRp
bGUgdHlwZTsgfTsKCgoKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYWRkX3ZvbGF0
aWxlPFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKCgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhw
cCIgMSAzCiMgNDcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2FkZF92b2xhdGlsZS5ocHAiIDIgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FsaWdubWVudF9vZi5ocHAiIDEgMwojIDE1ICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hbGlnbm1lbnRf
b2YuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL3NpemVfdF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3NpemVfdF90cmFpdF9k
ZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3NpemVfdF90cmFp
dF9kZWYuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9t
cGwvc2l6ZV90X2MuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvbXBsL3NpemVfdF9jLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMSAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMwpuYW1lc3BhY2UgYm9vc3Qg
ewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCBUIE4gPgpzdHJ1Y3QgaW50
ZWdyYWxfYwp7CiAgICBzdGF0aWMgY29uc3QgVCB2YWx1ZSA9IE47CiAgICB0eXBlZGVmIGludGVn
cmFsX2MgdHlwZTsKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwojIDQ3ICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvaW50ZWdyYWxfYy5ocHAiIDMKICAgIHR5cGVkZWYg
aW50ZWdyYWxfYzxULCAodmFsdWUgKyAxKT4gbmV4dDsKICAgIHR5cGVkZWYgaW50ZWdyYWxfYzxU
LCAodmFsdWUgLSAxKT4gcHJpb3I7CgoKCgoKCiAgICBvcGVyYXRvciBUKCkgY29uc3QgeyByZXR1
cm4gdGhpcy0+dmFsdWU7IH0KfTsKCgoKCnRlbXBsYXRlPCBib29sIEMgPgpzdHJ1Y3QgaW50ZWdy
YWxfYzxib29sLCBDPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IEM7CiAgICB0eXBl
ZGVmIGludGVncmFsX2MgdHlwZTsKICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiB0
aGlzLT52YWx1ZTsgfQp9OwoKCn0KfQojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC9tcGwvc2l6ZV90X2MuaHBwIiAyIDMKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNw
YWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgc3RkOjpzaXplX3QgTiA+IHN0cnVjdCBzaXplX3RfYwoKICAg
IDogaW50ZWdyYWxfYzwgc3RkOjpzaXplX3QsTiA+CnsKICAgIHR5cGVkZWYgc2l6ZV90X2MgdHlw
ZTsKfTsKIyA0NiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL3NpemVf
dF9jLmhwcCIgMwp9Cn0KIyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL3NpemVfdF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNiAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWxpZ25tZW50X29mLmhw
cCIgMiAzCgoKCgoKCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3Ry
dWN0IGFsaWdubWVudF9vZjsKCgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgpzdHJ1Y3QgYWxpZ25tZW50X29mX2hhY2sKewogICAgY2hhciBjOwogICAgVCB0OwogICAg
YWxpZ25tZW50X29mX2hhY2soKTsKfTsKCgp0ZW1wbGF0ZSA8dW5zaWduZWQgQSwgdW5zaWduZWQg
Uz4Kc3RydWN0IGFsaWdubWVudF9sb2dpYwp7CiAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3Qg
dmFsdWUgPSBBIDwgUyA/IEEgOiBTOwp9OwoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RydWN0
IGFsaWdubWVudF9vZl9pbXBsCnsKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCB2YWx1ZSA9
ICg6OmJvb3N0OjpkZXRhaWw6OmFsaWdubWVudF9sb2dpYzwgc2l6ZW9mKGRldGFpbDo6YWxpZ25t
ZW50X29mX2hhY2s8VD4pIC0gc2l6ZW9mKFQpLCBzaXplb2YoVCkgPjo6dmFsdWUpOwoKCgoKfTsK
Cn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGFsaWdubWVudF9vZiA6IG1wbDo6c2l6
ZV90X2M8IDo6Ym9vc3Q6OmRldGFpbDo6YWxpZ25tZW50X29mX2ltcGw8VD46OnZhbHVlID4geyB9
OwoKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBhbGlnbm1lbnRfb2Y8VCY+CiAgICA6
IGFsaWdubWVudF9vZjxUKj4Kewp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBhbGlnbm1lbnRfb2Y8
dm9pZD4gOiBtcGw6OnNpemVfdF9jPCAwID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgYWxpZ25t
ZW50X29mPHZvaWQgY29uc3Q+IDogbXBsOjpzaXplX3RfYzwgMCA+IHsgfTsKdGVtcGxhdGU8PiBz
dHJ1Y3QgYWxpZ25tZW50X29mPHZvaWQgdm9sYXRpbGU+IDogbXBsOjpzaXplX3RfYzwgMCA+IHsg
fTsKdGVtcGxhdGU8PiBzdHJ1Y3QgYWxpZ25tZW50X29mPHZvaWQgY29uc3Qgdm9sYXRpbGU+IDog
bXBsOjpzaXplX3RfYzwgMCA+IHsgfTsKCgp9CgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvc2l6ZV90X3RyYWl0X3VuZGVmLmhw
cCIgMSAzCiMgODQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2FsaWdubWVudF9vZi5ocHAiIDIgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2Fzc2lnbi5ocHAiIDEgMwoj
IDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNf
bm90aHJvd19hc3NpZ24uaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfYXNzaWduLmhwcCIgMSAzCiMgMTMgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2Fz
c2lnbi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9pc19QT0QuaHBwIiAxIDMKIyAxMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfUE9ELmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvaWQuaHBwIiAxIDMKIyAxNiAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHAi
IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwoj
IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIg
MwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9p
c192b2lkLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCnRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gc3RydWN0IGlzX3ZvaWQgOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CnRlbXBsYXRlPD4g
c3RydWN0IGlzX3ZvaWQ8dm9pZD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKCgp0ZW1wbGF0
ZTw+IHN0cnVjdCBpc192b2lkPHZvaWQgY29uc3Q+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07
CnRlbXBsYXRlPD4gc3RydWN0IGlzX3ZvaWQ8dm9pZCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwg
dHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfdm9pZDx2b2lkIGNvbnN0IHZvbGF0aWxl
PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OwoKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBw
IiAxIDMKIyAzMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvaXNfdm9pZC5ocHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9pc19QT0QuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAxIDMKIyAxMyAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFyLmhw
cCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2lzX2FyaXRobWV0aWMuaHBwIiAxIDMKIyAxMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHAiIDMKIyAxICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAiIDEg
MwojIDE2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9p
c19pbnRlZ3JhbC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh
aXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry
YWl0X2RlZi5ocHAiIDIgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCgoK
CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX2ludGVncmFsIDogbXBsOjpib29sX2M8
IGZhbHNlID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgY2hh
cj4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdy
YWw8dW5zaWduZWQgY2hhciBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh
dGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgY2hhciB2b2xhdGlsZT4gOiBtcGw6OmJv
b2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQg
Y2hhciBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8
PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUg
PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHVuc2lnbmVkIHNob3J0IGNvbnN0
PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3Jh
bDx1bnNpZ25lZCBzaG9ydCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVt
cGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgc2hvcnQgY29uc3Qgdm9sYXRpbGU+
IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFs
PHVuc2lnbmVkIGludD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgaW50IGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g
eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx1bnNpZ25lZCBpbnQgdm9sYXRpbGU+
IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFs
PHVuc2lnbmVkIGludCBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsK
dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgbG9uZz4gOiBtcGw6OmJvb2xf
YzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgbG9u
ZyBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8dW5zaWduZWQgbG9uZyB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsg
fTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgbG9uZyBjb25zdCB2b2xh
dGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKCnRlbXBsYXRlPD4gc3RydWN0IGlzX2lu
dGVncmFsPHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgY2hhciBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1
ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8c2lnbmVkIGNoYXIgdm9sYXRp
bGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVn
cmFsPHNpZ25lZCBjaGFyIGNvbnN0IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29s
X2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBzaG9y
dCBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8c2lnbmVkIHNob3J0IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgc2hvcnQgY29uc3Qgdm9sYXRp
bGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVn
cmFsPHNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2ludGVncmFsPHNpZ25lZCBpbnQgY29uc3Q+IDogbXBsOjpib29sX2M8IHRydWUgPiB7
IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBpbnQgdm9sYXRpbGU+IDog
bXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNp
Z25lZCBpbnQgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBs
YXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl
ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgbG9uZyBjb25zdD4g
OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8
c2lnbmVkIGxvbmcgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl
PD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBsb25nIGNvbnN0IHZvbGF0aWxlPiA6IG1wbDo6
Ym9vbF9jPCB0cnVlID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Ym9vbD4g
OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8
Ym9vbCBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfaW50ZWdyYWw8Ym9vbCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVt
cGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Ym9vbCBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJv
b2xfYzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y2hhcj4gOiBt
cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y2hh
ciBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8Y2hhciB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh
dGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y2hhciBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xf
YzwgdHJ1ZSA+IHsgfTsKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx3Y2hhcl90PiA6
IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx3
Y2hhcl90IGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj
dCBpc19pbnRlZ3JhbDx3Y2hhcl90IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx3Y2hhcl90IGNvbnN0IHZvbGF0aWxlPiA6
IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3Jh
bDx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl
PD4gc3RydWN0IGlzX2ludGVncmFsPHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdD4gOiBtcGw6OmJv
b2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQg
bG9uZyBsb25nIHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19pbnRlZ3JhbDx1bnNpZ25lZCBsb25nIGxvbmcgY29uc3Qgdm9sYXRpbGU+IDog
bXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPGxv
bmcgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8bG9uZyBsb25nIGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxsb25nIGxvbmcgdm9sYXRpbGU+IDogbXBsOjpib29s
X2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPGxvbmcgbG9uZyBj
b25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKCgoKCgp9CgojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s
X3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2ludGVncmFsLmhwcCIgMiAzCiMgMTQgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FyaXRobWV0aWMuaHBwIiAy
IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9p
c19mbG9hdC5ocHAiIDEgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMK
IyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAz
CiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJv
b3N0IHsKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19mbG9hdCA6IG1wbDo6Ym9v
bF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8ZmxvYXQ+IDogbXBs
Ojpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PGZsb2F0IGNv
bnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9h
dDxmbG9hdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz
dHJ1Y3QgaXNfZmxvYXQ8ZmxvYXQgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUg
PiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PGRvdWJsZT4gOiBtcGw6OmJvb2xfYzwg
dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8ZG91YmxlIGNvbnN0PiA6IG1w
bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDxkb3VibGUg
dm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz
X2Zsb2F0PGRvdWJsZSBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsK
dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8bG9uZyBkb3VibGU+IDogbXBsOjpib29sX2M8IHRy
dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PGxvbmcgZG91YmxlIGNvbnN0PiA6
IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDxsb25n
IGRvdWJsZSB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz
dHJ1Y3QgaXNfZmxvYXQ8bG9uZyBkb3VibGUgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8
IHRydWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgMjcgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Zsb2F0LmhwcCIg
MiAzCiMgMTUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2lzX2FyaXRobWV0aWMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaWNlX29yLmhwcCIgMSAzCiMgMTUgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pY2Vfb3IuaHBw
IiAzCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8
Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMyA9IGZhbHNlLCBib29sIGI0ID0gZmFsc2UsIGJvb2wg
YjUgPSBmYWxzZSwgYm9vbCBiNiA9IGZhbHNlLCBib29sIGI3ID0gZmFsc2U+CnN0cnVjdCBpY2Vf
b3I7Cgp0ZW1wbGF0ZSA8Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMywgYm9vbCBiNCwgYm9vbCBi
NSwgYm9vbCBiNiwgYm9vbCBiNz4Kc3RydWN0IGljZV9vcgp7CiAgICBzdGF0aWMgY29uc3QgYm9v
bCB2YWx1ZSA9IHRydWU7Cn07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaWNlX29yPGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlPgp7CiAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKfQp9CiMgMTYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FyaXRobWV0aWMuaHBwIiAyIDMKCgoKIyAxICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v
bF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0
ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDIwICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1l
dGljLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1w
bGF0ZTwgdHlwZW5hbWUgVCA+CnN0cnVjdCBpc19hcml0aG1ldGljX2ltcGwKewogICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwgOjpib29z
dDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19mbG9hdDxUPjo6dmFsdWUgPjo6
dmFsdWUpOwoKCgoKfTsKCn0KCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19hcml0
aG1ldGljIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfYXJpdGhtZXRpY19pbXBs
PFQ+Ojp2YWx1ZSA+IHsgfTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA0MyAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGht
ZXRpYy5ocHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19lbnVtLmhwcCIgMSAzCiMgMTcgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIiAzCiMg
MSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29u
dmVydGlibGUuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcCIg
MSAzCiMgMTUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2RldGFpbC95ZXNfbm9fdHlwZS5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5
cGVfdHJhaXRzIHsKCnR5cGVkZWYgY2hhciB5ZXNfdHlwZTsKdHlwZWRlZiBkb3VibGUgbm9fdHlw
ZTsKCn0KfQojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDIgMwoKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBw
IiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw
cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDI4ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDIgMwoK
bmFtZXNwYWNlIGJvb3N0IHsKIyA0MSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIiAzCm5hbWVzcGFjZSBkZXRhaWwgewoj
IDEwNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf
Y29udmVydGlibGUuaHBwIiAzCnN0cnVjdCBhbnlfY29udmVyc2lvbgp7CiAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gYW55X2NvbnZlcnNpb24oY29uc3QgVCYpOwogICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGFueV9jb252ZXJzaW9uKFQmKTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1
Y3QgY2hlY2tlcgp7CiAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIF9tX2No
ZWNrKGFueV9jb252ZXJzaW9uIC4uLik7CiAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjp5
ZXNfdHlwZSBfbV9jaGVjayhULCBpbnQpOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEZyb20sIHR5
cGVuYW1lIFRvPgpzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbAp7CiAgICBzdGF0aWMgRnJvbSBf
bV9mcm9tOwogICAgc3RhdGljIGJvb2wgY29uc3QgdmFsdWUgPSBzaXplb2YoIGRldGFpbDo6Y2hl
Y2tlcjxUbz46Ol9tX2NoZWNrKF9tX2Zyb20sIDApICkKICAgICAgICA9PSBzaXplb2YoOjpib29z
dDo6dHlwZV90cmFpdHM6Onllc190eXBlKTsKfTsKIyAxNDMgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcCIgMwp9Cgp0ZW1w
bGF0ZTwgdHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgVG8gPiBzdHJ1Y3QgaXNfY29udmVydGlibGUg
OiBtcGw6OmJvb2xfYzwgKDo6Ym9vc3Q6OmRldGFpbDo6aXNfY29udmVydGlibGVfaW1wbDxGcm9t
LFRvPjo6dmFsdWUpID4geyB9OwoKCgoKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0
IGlzX2NvbnZlcnRpYmxlPHZvaWQsVG8+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9Owp0ZW1w
bGF0ZTwgdHlwZW5hbWUgRnJvbSA+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxGcm9tLHZvaWQ+IDog
bXBsOjpib29sX2M8IGZhbHNlID4geyB9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0
IGlzX2NvbnZlcnRpYmxlPHZvaWQgY29uc3QsVG8+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9
Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVG8gPiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCB2b2xh
dGlsZSxUbz4gOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBU
byA+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkIGNvbnN0IHZvbGF0aWxlLFRvPiA6IG1wbDo6
Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIEZyb20gPiBzdHJ1Y3QgaXNf
Y29udmVydGlibGU8RnJvbSx2b2lkIGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsK
dGVtcGxhdGU8IHR5cGVuYW1lIEZyb20gPiBzdHJ1Y3QgaXNfY29udmVydGlibGU8RnJvbSx2b2lk
IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1l
IEZyb20gPiBzdHJ1Y3QgaXNfY29udmVydGlibGU8RnJvbSx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6
IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKIyAxODAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcCIgMwogICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCx2b2lkPiA6IG1wbDo6Ym9vbF9jPCB0cnVl
ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkLHZvaWQgY29uc3Q+
IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp
YmxlPHZvaWQsdm9pZCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh
dGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IG1w
bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2
b2lkIGNvbnN0LHZvaWQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlPHZvaWQgY29uc3Qsdm9pZCBjb25zdD4gOiBtcGw6OmJvb2xfYzwg
dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCBjb25zdCx2
b2lkIHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj
dCBpc19jb252ZXJ0aWJsZTx2b2lkIGNvbnN0LHZvaWQgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpi
b29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPHZvaWQg
dm9sYXRpbGUsdm9pZD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfY29udmVydGlibGU8dm9pZCB2b2xhdGlsZSx2b2lkIGNvbnN0PiA6IG1wbDo6Ym9vbF9j
PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkIHZvbGF0
aWxlLHZvaWQgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g
c3RydWN0IGlzX2NvbnZlcnRpYmxlPHZvaWQgdm9sYXRpbGUsdm9pZCBjb25zdCB2b2xhdGlsZT4g
OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGli
bGU8dm9pZCBjb25zdCB2b2xhdGlsZSx2b2lkPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0
ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkIGNvbnN0IHZvbGF0aWxlLHZvaWQg
Y29uc3Q+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlPHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xf
YzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCBjb25z
dCB2b2xhdGlsZSx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OwojIDIyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv
aXNfY29udmVydGlibGUuaHBwIiAzCnRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZs
b2F0IGNvbnN0LGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0LHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9j
PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25z
dCx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0
cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29s
X2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNv
bnN0LHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCxzaWduZWQgaW50PiA6IG1wbDo6Ym9v
bF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBj
b25zdCx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g
c3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0LHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9v
bF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBj
b25zdCx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCxzaWduZWQgbG9uZyBsb25nPiA6IG1w
bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxm
bG9hdCBjb25zdCx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07
IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IHZvbGF0aWxlLGNoYXI+IDog
bXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxl
PGZsb2F0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0
ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSx1bnNpZ25lZCBj
aGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252
ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUg
PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IHZvbGF0aWxlLHVu
c2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj
dCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9j
PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xh
dGlsZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g
c3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1wbDo6
Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9h
dCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSxzaWduZWQgbG9uZyBs
b25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252
ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8
IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0
IHZvbGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1w
bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxm
bG9hdCBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g
eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGls
ZSxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6
IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJs
ZTxmbG9hdCBjb25zdCB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g
eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGls
ZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1w
bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxm
bG9hdCBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g
eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGls
ZSxzaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25n
IGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlPGRvdWJsZSBjb25zdCxjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0
ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qsc2lnbmVkIGNoYXI+
IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp
YmxlPGRvdWJsZSBjb25zdCx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qsc2lnbmVkIHNo
b3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252
ZXJ0aWJsZTxkb3VibGUgY29uc3QsdW5zaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUg
PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSBjb25zdCxzaWdu
ZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19j
b252ZXJ0aWJsZTxkb3VibGUgY29uc3QsdW5zaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVl
ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qsc2ln
bmVkIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz
X2NvbnZlcnRpYmxlPGRvdWJsZSBjb25zdCx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0
cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qs
c2lnbmVkIGxvbmcgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz
dHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0LHVuc2lnbmVkIGxvbmcgbG9uZz4gOiBt
cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8
ZG91YmxlIHZvbGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl
PD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSxzaWduZWQgY2hhcj4gOiBt
cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8
ZG91YmxlIHZvbGF0aWxlLHVuc2lnbmVkIGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07
IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSxzaWduZWQg
c2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBzaG9ydD4gOiBtcGw6OmJvb2xfYzwg
dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIHZvbGF0
aWxlLHNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpi
b29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJs
ZSB2b2xhdGlsZSxzaWduZWQgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh
dGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIHZvbGF0aWxlLHVuc2lnbmVkIGxvbmc+
IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp
YmxlPGRvdWJsZSB2b2xhdGlsZSxzaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl
ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgdm9sYXRpbGUs
dW5zaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9sYXRpbGUsY2hhcj4gOiBtcGw6
OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91
YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9sYXRpbGUs
dW5zaWduZWQgY2hhcj4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBzaG9ydD4gOiBt
cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8
ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVl
ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9s
YXRpbGUsc2lnbmVkIGludD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz
dHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIGludD4g
OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGli
bGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl
ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9s
YXRpbGUsdW5zaWduZWQgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8
PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBsb25n
IGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlPGRvdWJsZSBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBs
Ojpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxv
bmcgZG91YmxlIGNvbnN0LGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl
PD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0LHNpZ25lZCBjaGFyPiA6
IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJs
ZTxsb25nIGRvdWJsZSBjb25zdCx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g
eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCxz
aWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0
IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0LHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6
Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n
IGRvdWJsZSBjb25zdCxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCx1bnNpZ25lZCBp
bnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZl
cnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0LHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl
ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25z
dCx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0
cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCxzaWduZWQgbG9uZyBsb25nPiA6
IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJs
ZTxsb25nIGRvdWJsZSBjb25zdCx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRy
dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZv
bGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0
IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6
Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n
IGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSxz
aWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0
IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6IG1w
bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxs
b25nIGRvdWJsZSB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSx1
bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0
IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1wbDo6
Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n
IGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSxz
aWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0
cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxv
bmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZl
cnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0IHZvbGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRy
dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNv
bnN0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w
bGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xhdGlsZSx1
bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj
dCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xhdGlsZSxzaWduZWQgc2hvcnQ+
IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp
YmxlPGxvbmcgZG91YmxlIGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9v
bF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRv
dWJsZSBjb25zdCB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9
OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xh
dGlsZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g
c3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBs
b25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252
ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6
Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n
IGRvdWJsZSBjb25zdCB2b2xhdGlsZSxzaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0
cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBj
b25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7
IH07CiMgMjMxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9pc19jb252ZXJ0aWJsZS5ocHAiIDMKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwoj
IDIzNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf
Y29udmVydGlibGUuaHBwIiAyIDMKIyAxOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiIDIgMwoKCgoKCgoKIyAxICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9k
ZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9z
cGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDI2ICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19lbnVtLmhwcCIgMiAzCgpu
YW1lc3BhY2UgYm9vc3QgewoKCgpuYW1lc3BhY2UgZGV0YWlsIHsKCnN0cnVjdCBpbnRfY29udmVy
dGlibGUKewogICAgaW50X2NvbnZlcnRpYmxlKGludCk7Cn07CgoKCnRlbXBsYXRlIDxib29sIGlz
X3R5cGVuYW1lX2FyaXRobWV0aWNfb3JfcmVmZXJlbmNlID0gdHJ1ZT4Kc3RydWN0IGlzX2VudW1f
aGVscGVyCnsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgdHlwZQogICAgewogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7CiAgICB9Owp9OwoKdGVtcGxhdGUg
PD4Kc3RydWN0IGlzX2VudW1faGVscGVyPGZhbHNlPgp7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gc3RydWN0IHR5cGUKICAgICAgICA6IDo6Ym9vc3Q6OmlzX2NvbnZlcnRpYmxlPFQsOjpib29z
dDo6ZGV0YWlsOjppbnRfY29udmVydGlibGU+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHN0cnVjdCBpc19lbnVtX2ltcGwKewogICB0eXBlZGVmIDo6Ym9vc3Q6OmFkZF9y
ZWZlcmVuY2U8VD4gYXJfdDsKICAgdHlwZWRlZiB0eXBlbmFtZSBhcl90Ojp0eXBlIHJfdHlwZTsK
IyA3NCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf
ZW51bS5ocHAiIDMKICAgc3RhdGljIGNvbnN0IGJvb2wgc2VsZWN0b3IgPSAoOjpib29zdDo6dHlw
ZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgLCA6OmJv
b3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlID46OnZhbHVlKTsKIyA4OCAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiIDMKICAgIHR5
cGVkZWYgOjpib29zdDo6ZGV0YWlsOjppc19lbnVtX2hlbHBlcjxzZWxlY3Rvcj4gc2VfdDsKCiAg
ICB0eXBlZGVmIHR5cGVuYW1lIHNlX3Q6OnRlbXBsYXRlIHR5cGU8cl90eXBlPiBoZWxwZXI7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGhlbHBlcjo6dmFsdWU7Cn07Cgp9Cgp0ZW1wbGF0
ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19lbnVtIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRl
dGFpbDo6aXNfZW51bV9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBp
c19lbnVtPGZsb2F0PiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfZW51bTxkb3VibGU+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9Owp0ZW1wbGF0ZTw+
IHN0cnVjdCBpc19lbnVtPGxvbmcgZG91YmxlPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsK
IyAxMTEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lz
X2VudW0uaHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMTQgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIiAy
IDMKIyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv
aXNfc2NhbGFyLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDEgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcCIgMwojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9w
b2ludGVyLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2lu
dGVyLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIgMwojIDEgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pc19tZW1fZnVu
X3BvaW50ZXJfaW1wbC5ocHAiIDEgMwojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGwuaHBwIiAz
Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsCnsKICAgIHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gZmFsc2U7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUPgpz
dHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoKT4geyBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUPgpzdHJ1Y3Qg
aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoKSBjb25zdD4geyBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQ+CnN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSgpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVD4Kc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCkgY29uc3Qgdm9sYXRpbGU+IHsgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz
IFQsY2xhc3MgVDA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCk+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs
Y2xhc3MgVCxjbGFzcyBUMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KFQwKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRl
IDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKShUMCkgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwPgpzdHJ1Y3QgaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDApIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNz
IFQwLGNsYXNzIFQxPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAs
VDEpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFz
cyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKShUMCxUMSkgY29uc3Q+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxPgpzdHJ1
Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEpIHZvbGF0aWxlPiB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3Mg
VCxjbGFzcyBUMCxjbGFzcyBUMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6
OiopKFQwLFQxKSBjb25zdCB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyKT4g
eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixj
bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2lu
dGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBU
MSxjbGFzcyBUMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQx
LFQyKSB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBs
YXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDI+CnN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMikgY29uc3Qgdm9sYXRpbGU+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBS
LGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDM+CnN0cnVjdCBpc19t
ZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyk+IHsgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBU
MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p
bXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEs
Y2xhc3MgVDIsY2xhc3MgVDM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KShUMCxUMSxUMixUMykgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy
LGNsYXNzIFQzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEs
VDIsVDMpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy
LGNsYXNzIFQzLGNsYXNzIFQ0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6
KikoVDAsVDEsVDIsVDMsVDQpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xh
c3MgVDMsY2xhc3MgVDQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShU
MCxUMSxUMixUMyxUNCkgY29uc3Q+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9
Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNs
YXNzIFQzLGNsYXNzIFQ0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko
VDAsVDEsVDIsVDMsVDQpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBU
MixjbGFzcyBUMyxjbGFzcyBUND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6
OiopKFQwLFQxLFQyLFQzLFQ0KSBjb25zdCB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFz
cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNT4Kc3RydWN0IGlzX21lbV9m
dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1KT4geyBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNz
IFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1PgpzdHJ1Y3Qg
aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUpIGNvbnN0
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs
Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQz
LFQ0LFQ1KSB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRl
bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg
VDMsY2xhc3MgVDQsY2xhc3MgVDU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChU
OjoqKShUMCxUMSxUMixUMyxUNCxUNSkgY29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAs
Y2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDY+CnN0
cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxU
Nik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj
bGFzcyBUNSxjbGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xh
c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDY+CnN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNikgdm9sYXRpbGU+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixj
bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNz
IFQ1LGNsYXNzIFQ2PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAs
VDEsVDIsVDMsVDQsVDUsVDYpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNz
IFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3
PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQs
VDUsVDYsVDcpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRl
IDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xh
c3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNykgY29uc3Q+IHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNs
YXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNz
IFQ2LGNsYXNzIFQ3PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAs
VDEsVDIsVDMsVDQsVDUsVDYsVDcpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxj
bGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNz4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2
LFQ3KSBjb25zdCB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07
CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixj
bGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOD4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2
LFQ3LFQ4KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNz
IFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4PgpzdHJ1Y3QgaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgpIGNvbnN0
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs
Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4KSB2b2xhdGlsZT4geyBz
dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz
IFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUs
Y2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCkgY29uc3Qgdm9sYXRpbGU+IHsg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNs
YXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3Mg
VDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDk+CnN0cnVjdCBpc19tZW1fZnVu
X3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSk+IHsg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xh
c3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBU
NSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOT4Kc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5KSBjb25z
dD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBS
LGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xh
c3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDk+CnN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSkg
dm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8
Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNz
IFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5PgpzdHJ1Y3Qg
aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs
VDgsVDkpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy
LGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNs
YXNzIFQ5LGNsYXNzIFQxMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCk+IHsgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFz
cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBU
NyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTApIGNvbnN0PiB7
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xh
c3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBU
NSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTA+CnN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxU
OCxUOSxUMTApIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFz
cyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBU
OSxjbGFzcyBUMTA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxU
MSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTApIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNs
YXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNz
IFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTE+CnN0cnVj
dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixU
NyxUOCxUOSxUMTAsVDExKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNz
IFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5
LGNsYXNzIFQxMCxjbGFzcyBUMTE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChU
OjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExKSBjb25zdD4geyBzdGF0
aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQs
Y2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xh
c3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMT4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2
LFQ3LFQ4LFQ5LFQxMCxUMTEpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU
OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVy
X2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSkgY29u
c3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBs
YXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMs
Y2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xh
c3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTI+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMik+IHsg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xh
c3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBU
NSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDEx
LGNsYXNzIFQxMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQx
LFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyKSBjb25zdD4geyBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3Mg
VDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYs
Y2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTI+
CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxU
NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMikgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNz
IFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3
LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyPgpzdHJ1Y3Qg
aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs
VDgsVDksVDEwLFQxMSxUMTIpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNz
IFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3
LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQx
Mz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0
LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBU
MSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxj
bGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTM+
CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxU
NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFz
cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBU
NyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBU
MTM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU
NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBU
MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj
bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixj
bGFzcyBUMTM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxU
MixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMpIGNvbnN0IHZvbGF0aWxlPiB7
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixj
bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNz
IFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBU
MTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQx
MixUMTMsVDE0KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNs
YXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNz
IFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQ+CnN0cnVjdCBpc19t
ZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxU
OSxUMTAsVDExLFQxMixUMTMsVDE0KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xh
c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3Mg
VDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNz
IFQxND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQz
LFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQpIHZvbGF0aWxlPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxj
bGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFz
cyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNz
IFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8
UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQx
NCkgY29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK
CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xh
c3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3Mg
VDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFz
cyBUMTU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSk+IHsgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFz
cyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBU
NixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQx
MixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEy
LFQxMyxUMTQsVDE1KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07
CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xh
c3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3Mg
VDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFz
cyBUMTU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSkgdm9sYXRpbGU+IHsg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz
cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1
LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs
Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1PgpzdHJ1Y3QgaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw
LFQxMSxUMTIsVDEzLFQxNCxUMTUpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNs
YXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNz
IFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNz
IFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEs
VDEyLFQxMyxUMTQsVDE1LFQxNik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9
OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixj
bGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFz
cyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNs
YXNzIFQxNSxjbGFzcyBUMTY+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxU
MTYpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg
PGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFz
cyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBU
MTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFz
cyBUMTY+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYpIHZvbGF0aWxl
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs
Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg
VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTY+CnN0
cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxU
NixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYpIGNvbnN0IHZvbGF0aWxlPiB7
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixj
bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNz
IFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBU
MTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFz
cyBUMTc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3KT4geyBz
dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz
cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1
LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs
Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBU
MTc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU
NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3KSBjb25zdD4g
eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNs
YXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3Mg
VDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQx
MSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNz
IFQxNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQz
LFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcpIHZvbGF0
aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj
bGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xh
c3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYs
Y2xhc3MgVDE3PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEs
VDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNykg
Y29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRl
bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg
VDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDks
Y2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBU
MTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQx
MixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU
OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3Mg
VDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOD4Kc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5
LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4KSBjb25zdD4geyBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3Mg
VDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYs
Y2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIs
Y2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBU
MTg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU
NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCkgdm9s
YXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xh
c3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0
LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxj
bGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQx
NixjbGFzcyBUMTcsY2xhc3MgVDE4PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo
VDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxU
MTUsVDE2LFQxNyxUMTgpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQx
LGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNs
YXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxj
bGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQx
OT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0
LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSk+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs
Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg
VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xh
c3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTk+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs
VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxj
bGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFz
cyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xh
c3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTk+
CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxU
NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkpIHZv
bGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNs
YXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBU
NCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAs
Y2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBU
MTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTk+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQx
MixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNs
YXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNz
IFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3Mg
VDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xh
c3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs
VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNs
YXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNz
IFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFz
cyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxj
bGFzcyBUMjA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxU
MixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQx
OCxUMTksVDIwKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRl
bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg
VDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDks
Y2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBU
MTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMD4Kc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2
LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjApIHZv
bGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNs
YXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBU
NCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAs
Y2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBU
MTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwPgpzdHJ1Y3QgaXNfbWVt
X2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDks
VDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCkgY29uc3Qgdm9sYXRp
bGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFz
cyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQs
Y2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNs
YXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2
LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjE+CnN0cnVj
dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixU
NyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSk+
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs
Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg
VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xh
c3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMT4Kc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4
LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxKSBjb25z
dD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBS
LGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xh
c3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNz
IFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNs
YXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjE+CnN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxU
OCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSkgdm9s
YXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xh
c3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0
LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxj
bGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQx
NixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxPgpzdHJ1
Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs
VDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEp
IGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNz
IFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5
LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3Mg
VDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xh
c3MgVDIxLGNsYXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQx
NixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz
cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU
OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3Mg
VDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xh
c3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjI+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs
VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIpIGNvbnN0PiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBU
MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj
bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixj
bGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQx
OCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjI+CnN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxU
MTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIpIHZvbGF0
aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj
bGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xh
c3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYs
Y2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBU
MjI+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU
NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTks
VDIwLFQyMSxUMjIpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
dHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNs
YXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNz
IFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFz
cyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxj
bGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMixjbGFzcyBUMjM+CnN0cnVjdCBpc19tZW1fZnVu
X3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAs
VDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIzKT4geyBz
dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz
cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1
LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs
Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBU
MTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMixjbGFz
cyBUMjM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxU
MTksVDIwLFQyMSxUMjIsVDIzKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3Mg
VDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgs
Y2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQx
NCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNz
IFQyMCxjbGFzcyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMz4Kc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEs
VDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMixUMjMpIHZvbGF0aWxl
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs
Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz
cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg
VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xh
c3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjIs
Y2xhc3MgVDIzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEs
VDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxU
MTgsVDE5LFQyMCxUMjEsVDIyLFQyMykgY29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAs
Y2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xh
c3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xh
c3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgs
Y2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMyxjbGFzcyBU
MjQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU
NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTks
VDIwLFQyMSxUMjIsVDIzLFQyNCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9
OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixj
bGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFz
cyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNs
YXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIw
LGNsYXNzIFQyMSxjbGFzcyBUMjIsY2xhc3MgVDIzLGNsYXNzIFQyND4Kc3RydWN0IGlzX21lbV9m
dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQx
MCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMixUMjMsVDI0
KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxj
bGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg
VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEw
LGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3Mg
VDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjEsY2xh
c3MgVDIyLGNsYXNzIFQyMyxjbGFzcyBUMjQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs
VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIzLFQyNCkgdm9sYXRpbGU+IHsg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz
cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1
LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs
Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBU
MTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMixjbGFz
cyBUMjMsY2xhc3MgVDI0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko
VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2
LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyLFQyMyxUMjQpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKIyAzMzEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pc19tZW1fZnVuX3BvaW50ZXJfaW1w
bC5ocHAiIDMKfQp9CiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIgMiAzCiMgMjggIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5j
dGlvbl9wb2ludGVyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90
cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf
dHJhaXRfZGVmLmhwcCIgMiAzCiMgMjkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIgMiAzCgpuYW1l
c3BhY2UgYm9vc3QgewoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19tZW1iZXJf
ZnVuY3Rpb25fcG9pbnRlciA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aXNf
bWVtX2Z1bl9wb2ludGVyX2ltcGw8VD46OnZhbHVlID4geyB9OwojIDExMyAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX2Z1bmN0aW9uX3Bv
aW50ZXIuaHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMTYgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5j
dGlvbl9wb2ludGVyLmhwcCIgMiAzCiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMiAzCiMgMjggIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2lu
dGVyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYu
aHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm
LmhwcCIgMiAzCiMgMjkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCgoK
Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19tZW1iZXJfcG9pbnRlciA6IG1wbDo6
Ym9vbF9jPCA6OmJvb3N0Ojppc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcjxUPjo6dmFsdWUgPiB7
IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBVID4gc3RydWN0IGlzX21lbWJlcl9w
b2ludGVyPFUgVDo6Kj4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKIyA5MiAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIu
aHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA5NSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBw
IiAyIDMKIyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvaXNfcG9pbnRlci5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pY2VfYW5kLmhwcCIgMSAzCiMgMTUgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pY2VfYW5kLmhw
cCIgMwpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUg
PGJvb2wgYjEsIGJvb2wgYjIsIGJvb2wgYjMgPSB0cnVlLCBib29sIGI0ID0gdHJ1ZSwgYm9vbCBi
NSA9IHRydWUsIGJvb2wgYjYgPSB0cnVlLCBib29sIGI3ID0gdHJ1ZT4Kc3RydWN0IGljZV9hbmQ7
Cgp0ZW1wbGF0ZSA8Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMywgYm9vbCBiNCwgYm9vbCBiNSwg
Ym9vbCBiNiwgYm9vbCBiNz4Kc3RydWN0IGljZV9hbmQKewogICAgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSBmYWxzZTsKfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBpY2VfYW5kPHRydWUsIHRydWUs
IHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWU+CnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsKfTsKCn0KfQojIDE2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9ub3QuaHBwIiAxIDMK
IyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL2ljZV9ub3QuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0
cyB7Cgp0ZW1wbGF0ZSA8Ym9vbCBiPgpzdHJ1Y3QgaWNlX25vdAp7CiAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7Cn07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaWNlX25vdDx0cnVlPgp7
CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKfQp9CiMgMTcgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3BvaW50ZXIuaHBw
IiAyIDMKIyAyOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvaXNfcG9pbnRlci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf
dHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s
X3RyYWl0X2RlZi5ocHAiIDIgMwojIDI5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoK
CgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3Bv
aW50ZXJfaGVscGVyCnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7Cn07CiMg
NDggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3Bv
aW50ZXIuaHBwIiAzCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVs
cGVyPFQqPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGU8IHR5
cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfcG9pbnRlcl9oZWxwZXI8VCogY29uc3Q+IHsgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBp
c19wb2ludGVyX2hlbHBlcjxUKiB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVscGVy
PFQqIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgpzdHJ1Y3QgaXNfcG9pbnRlcl9pbXBsCnsKICAgIHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2VfYW5kPCA6
OmJvb3N0OjpkZXRhaWw6OmlzX3BvaW50ZXJfaGVscGVyPFQ+Ojp2YWx1ZSAsIDo6Ym9vc3Q6OnR5
cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19tZW1iZXJfcG9pbnRlcjxUPjo6dmFsdWUg
Pjo6dmFsdWUgPjo6dmFsdWUpOwoKCgoKCgoKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4g
c3RydWN0IGlzX3BvaW50ZXIgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjppc19wb2lu
dGVyX2ltcGw8VD46OnZhbHVlID4geyB9OwojIDEyOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDMKfQoKIyAxICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFp
dF91bmRlZi5ocHAiIDEgMwojIDEzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDIgMwojIDE2ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAyIDMKCgoKCgoj
IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3Rl
bXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMg
MjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3Nj
YWxhci5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19zY2FsYXJfaW1wbAp7CiAgIHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfb3I8IDo6Ym9vc3Q6Omlz
X2FyaXRobWV0aWM8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19lbnVtPFQ+Ojp2YWx1ZSwgOjpib29z
dDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX21lbWJlcl9wb2ludGVyPFQ+Ojp2
YWx1ZSA+Ojp2YWx1ZSk7CgoKCgoKCn07Cgp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVj
dCBpc19zY2FsYXIgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjppc19zY2FsYXJfaW1w
bDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNDYg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NjYWxh
ci5ocHAiIDIgMwojIDE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9pc19QT0QuaHBwIiAyIDMKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMK
IyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAz
CiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDIyICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19QT0QuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29z
dCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfUE9EOwoKbmFtZXNwYWNlIGRl
dGFpbCB7CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfUE9EX2ltcGwKewogICAg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwg
Ojpib29zdDo6aXNfc2NhbGFyPFQ+Ojp2YWx1ZSwgOjpib29zdDo6aXNfdm9pZDxUPjo6dmFsdWUs
IGZhbHNlID46OnZhbHVlKTsKCgoKCgoKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNp
emVfdCBzej4Kc3RydWN0IGlzX1BPRF9pbXBsPFRbc3pdPgogICAgOiBpc19QT0RfaW1wbDxUPgp7
Cn07CiMgMTE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9pc19QT0QuaHBwIiAzCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX1BPRCA6
IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6OmlzX1BPRF9pbXBsPFQ+Ojp2YWx1ZSA+IHsg
fTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMjIgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX1BPRC5ocHAiIDIgMwojIDE0ICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlh
bF9hc3NpZ24uaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDEgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDMKIyAxICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY3ZfdHJhaXRz
X2ltcGwuaHBwIiAxIDMKIyAxOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL2N2X3RyYWl0c19pbXBsLmhwcCIgMwpuYW1lc3BhY2UgYm9vc3Qg
ewpuYW1lc3BhY2UgZGV0YWlsIHsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBjdl90
cmFpdHNfaW1wIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdl90cmFpdHNfaW1w
PFQqPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19jb25zdCA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfdm9sYXRpbGUgPSBmYWxzZTsKICAgIHR5cGVkZWYgVCB1bnF1YWxpZmll
ZF90eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdl90cmFpdHNfaW1wPGNv
bnN0IFQqPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19jb25zdCA9IHRydWU7CiAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc192b2xhdGlsZSA9IGZhbHNlOwogICAgdHlwZWRlZiBUIHVucXVhbGlm
aWVkX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGN2X3RyYWl0c19pbXA8
dm9sYXRpbGUgVCo+CnsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2NvbnN0ID0gZmFsc2U7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc192b2xhdGlsZSA9IHRydWU7CiAgICB0eXBlZGVmIFQgdW5x
dWFsaWZpZWRfdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgY3ZfdHJhaXRz
X2ltcDxjb25zdCB2b2xhdGlsZSBUKj4KewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfY29uc3Qg
PSB0cnVlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfdm9sYXRpbGUgPSB0cnVlOwogICAgdHlw
ZWRlZiBUIHVucXVhbGlmaWVkX3R5cGU7Cn07Cgp9Cn0KIyAxOCAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwIiAyIDMKIyAyNiAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBw
IiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv
ZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMK
IyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRh
aWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAy
IDMKIyAyNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv
aXNfY29uc3QuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7CgoKCgp0ZW1wbGF0ZTwgdHlwZW5h
bWUgVCA+IHN0cnVjdCBpc19jb25zdCA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6OmN2
X3RyYWl0c19pbXA8VCo+Ojppc19jb25zdCA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz
dHJ1Y3QgaXNfY29uc3Q8VCY+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9OwojIDEwOCAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBw
IiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMTEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnN0LmhwcCIgMiAzCiMgMTUg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2
aWFsX2Fzc2lnbi5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0aWxlLmhwcCIgMSAzCiMgMjYgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0aWxlLmhwcCIgMwojIDEg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9i
b29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBs
YXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMjcg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0
aWxlLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQg
PiBzdHJ1Y3QgaXNfdm9sYXRpbGUgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjpjdl90
cmFpdHNfaW1wPFQqPjo6aXNfdm9sYXRpbGUgPiB7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4g
c3RydWN0IGlzX3ZvbGF0aWxlPFQmPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKIyAxMDgg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0
aWxlLmhwcCIgMwp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgMTExICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHAi
IDIgMwojIDE2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9oYXNfdHJpdmlhbF9hc3NpZ24uaHBwIiAyIDMKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBw
IiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw
cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9hc3NpZ24uaHBwIiAy
IDMKCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlIDx0eXBl
bmFtZSBUPgpzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduX2ltcGwKewogICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX2FuZDwgOjpib29zdDo6dHlw
ZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6aXNfUE9EPFQ+Ojp2YWx1ZSwgZmFsc2UgPjo6dmFs
dWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19jb25zdDxUPjo6
dmFsdWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojpp
c192b2xhdGlsZTxUPjo6dmFsdWUgPjo6dmFsdWUgPjo6dmFsdWUpOwojIDQwICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9hc3NpZ24u
aHBwIiAzCn07Cgp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBoYXNfdHJpdmlhbF9h
c3NpZ24gOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjpoYXNfdHJpdmlhbF9hc3NpZ25f
aW1wbDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMg
NDkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190
cml2aWFsX2Fzc2lnbi5ocHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19hc3NpZ24uaHBwIiAyIDMKCgojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s
X3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRl
X2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTcgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93
X2Fzc2lnbi5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gc3RydWN0IGhhc19ub3Rocm93X2Fzc2lnbiA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpoYXNf
dHJpdmlhbF9hc3NpZ248VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5o
cHAiIDEgMwojIDI1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9oYXNfbm90aHJvd19hc3NpZ24uaHBwIiAyIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19jb25zdHJ1Y3Rv
ci5ocHAiIDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9oYXNfbm90aHJvd19jb25zdHJ1Y3Rvci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rv
ci5ocHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYu
aHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVj
LmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rv
ci5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBoYXNfdHJpdmlhbF9jdG9yX2ltcGwKewogICBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX29yPCA6OmJvb3N0
Ojppc19QT0Q8VD46OnZhbHVlLCBmYWxzZSA+Ojp2YWx1ZSk7CgoKCgp9OwoKfQoKdGVtcGxhdGU8
IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfY29uc3RydWN0b3IgOiBtcGw6OmJvb2xf
YzwgOjpib29zdDo6ZGV0YWlsOjpoYXNfdHJpdmlhbF9jdG9yX2ltcGw8VD46OnZhbHVlID4geyB9
OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvci5o
cHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9oYXNfbm90aHJvd19jb25zdHJ1Y3Rvci5ocHAiIDIgMwoKCiMgMSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm
LmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3Bl
Yy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNyAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3dfY29uc3RydWN0
b3IuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0
cnVjdCBoYXNfbm90aHJvd19jb25zdHJ1Y3RvciA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpoYXNf
dHJpdmlhbF9jb25zdHJ1Y3RvcjxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3Vu
ZGVmLmhwcCIgMSAzCiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2hhc19ub3Rocm93X2NvbnN0cnVjdG9yLmhwcCIgMiAzCiMgMjAgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCiMgMSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3df
Y29weS5ocHAiIDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy9oYXNfbm90aHJvd19jb3B5LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2NvcHkuaHBwIiAxIDMK
IyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFz
X3RyaXZpYWxfY29weS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf
dHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s
X3RyYWl0X2RlZi5ocHAiIDIgMwojIDIyICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb3B5LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9v
c3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGhh
c190cml2aWFsX2NvcHlfaW1wbAp7CiAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9v
c3Q6OnR5cGVfdHJhaXRzOjppY2VfYW5kPCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX29yPCA6
OmJvb3N0Ojppc19QT0Q8VD46OnZhbHVlLCBmYWxzZSA+Ojp2YWx1ZSwgOjpib29zdDo6dHlwZV90
cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSA+
Ojp2YWx1ZSk7CgoKCgoKCgp9OwoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaGFz
X3RyaXZpYWxfY29weSA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6Omhhc190cml2aWFs
X2NvcHlfaW1wbDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIg
MSAzCiMgNDcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2hhc190cml2aWFsX2NvcHkuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3dfY29weS5ocHAiIDIgMwoKCiMgMSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jv
b2xfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxh
dGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNyAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhy
b3dfY29weS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gc3RydWN0IGhhc19ub3Rocm93X2NvcHkgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6aGFzX3Ry
aXZpYWxfY29weTxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIg
MSAzCiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2hhc19ub3Rocm93X2NvcHkuaHBwIiAyIDMKIyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19kZXN0cnVjdG9yLmhwcCIg
MSAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2hhc19ub3Rocm93X2Rlc3RydWN0b3IuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvci5ocHAiIDEg
MwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9o
YXNfdHJpdmlhbF9kZXN0cnVjdG9yLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwoj
IDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRh
aWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMK
IyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2Rlc3RydWN0b3IuaHBwIiAyIDMK
Cm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgpzdHJ1Y3QgaGFzX3RyaXZpYWxfZHRvcl9pbXBsCnsKICAgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6aXNfUE9EPFQ+
Ojp2YWx1ZSwgZmFsc2UgPjo6dmFsdWUpOwoKCgoKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gc3RydWN0IGhhc190cml2aWFsX2Rlc3RydWN0b3IgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6
ZGV0YWlsOjpoYXNfdHJpdmlhbF9kdG9yX2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v
bF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9kZXN0cnVjdG9yLmhwcCIgMiAzCiMgMTQg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Ro
cm93X2Rlc3RydWN0b3IuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
Ym9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAy
MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2Rlc3RydWN0b3IuaHBwIiAyIDMKCm5h
bWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBoYXNfbm90aHJv
d19kZXN0cnVjdG9yIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6Omhhc190cml2aWFsX2Rlc3RydWN0
b3I8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDI1
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90
aHJvd19kZXN0cnVjdG9yLmhwcCIgMiAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19hcnJheS5ocHAiIDEgMwojIDI0ICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19hcnJheS5o
cHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIg
MwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAi
IDIgMwojIDI1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9pc19hcnJheS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKdGVtcGxhdGU8IHR5cGVu
YW1lIFQgPiBzdHJ1Y3QgaXNfYXJyYXkgOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CnRlbXBs
YXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5PFRbTl0+IDog
bXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVf
dCBOID4gc3RydWN0IGlzX2FycmF5PFQgY29uc3RbTl0+IDogbXBsOjpib29sX2M8IHRydWUgPiB7
IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5
PFQgdm9sYXRpbGVbTl0+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPCB0eXBl
bmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5PFQgY29uc3Qgdm9sYXRpbGVb
Tl0+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CiMgNzQgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIgMwp9CgojIDEgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry
YWl0X3VuZGVmLmhwcCIgMSAzCiMgNzcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIgMiAzCiMgMjggIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVyaXZlZC5o
cHAiIDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9pc19iYXNlX2FuZF9kZXJpdmVkLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIgMSAzCiMgMTggIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIg
MwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lz
X3VuaW9uLmhwcCIgMSAzCiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHAiIDEgMwojIDIxICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAz
CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDMKIyAx
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
dGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMK
IyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVt
b3ZlX2N2LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCgoKdGVtcGxhdGU8IHR5cGVuYW1l
IFQgPiBzdHJ1Y3QgcmVtb3ZlX2N2IHsgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmN2X3RyYWl0
c19pbXA8VCo+Ojp1bnF1YWxpZmllZF90eXBlIHR5cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gc3RydWN0IHJlbW92ZV9jdjxUJj4geyB0eXBlZGVmIFQmIHR5cGU7IH07CnRlbXBsYXRlPCB0
eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IHJlbW92ZV9jdjxUIGNvbnN0W05dPiB7
IHR5cGVkZWYgVCB0eXBlW05dOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3Qg
TiA+IHN0cnVjdCByZW1vdmVfY3Y8VCB2b2xhdGlsZVtOXT4geyB0eXBlZGVmIFQgdHlwZVtOXTsg
fTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2N2
PFQgY29uc3Qgdm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHR5cGVbTl07IH07CiMgNDEgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHAi
IDMKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQ0ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAyIDMKIyAxNSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfdW5pb24u
aHBwIiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm
LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2Rl
Zi5ocHAiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9pc191bmlvbi5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBk
ZXRhaWwgewp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGlzX3VuaW9uX2ltcGwKewogICB0
eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZSBjdnQ7CiAgIHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gZmFsc2U7Cn07Cn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlz
X3VuaW9uIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfdW5pb25faW1wbDxUPjo6
dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgMzUgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIg
MiAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2lzX2NsYXNzLmhwcCIgMiAzCgoKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMSAzCiMgMTggIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMwoj
IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC9mYWxzZV9yZXN1bHQuaHBwIiAxIDMKIyAxMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ZhbHNlX3Jlc3VsdC5ocHAiIDMKbmFtZXNwYWNl
IGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJhaXRzIHsKCgpzdHJ1Y3QgZmFsc2VfcmVzdWx0CnsK
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgcmVzdWx0XwogICAgewogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7CiAgICB9Owp9OwoKfX0KIyAxOSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBw
IiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvaXNfZnVuY3Rpb25fcHRyX2hlbHBlci5ocHAiIDEgMwojIDI5ICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfZnVuY3Rp
b25fcHRyX2hlbHBlci5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJh
aXRzIHsKCnRlbXBsYXRlIDxjbGFzcyBSPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcgp7
CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKCgoKdGVtcGxhdGUgPGNs
YXNzIFI+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCk+IHsgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDA+CnN0
cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwKT4geyBzdGF0aWMgY29uc3QgYm9v
bCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMT4K
c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEpPiB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNz
IFQxLGNsYXNzIFQyPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxU
Mik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDM+CnN0cnVjdCBpc19mdW5jdGlv
bl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBU
MixjbGFzcyBUMyxjbGFzcyBUND4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKiko
VDAsVDEsVDIsVDMsVDQpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRl
bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNz
IFQ0LGNsYXNzIFQ1PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxU
MixUMyxUNCxUNSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxh
dGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQs
Y2xhc3MgVDUsY2xhc3MgVDY+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQw
LFQxLFQyLFQzLFQ0LFQ1LFQ2KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxj
bGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0
cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcpPiB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQx
LGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNs
YXNzIFQ4PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxU
NCxUNSxUNixUNyxUOCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt
cGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg
VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDk+CnN0cnVjdCBp
c19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5
KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
UixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxj
bGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTA+CnN0cnVjdCBpc19m
dW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQx
MCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUs
Y2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMT4K
c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs
VDcsVDgsVDksVDEwLFQxMSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK
dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xh
c3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3Mg
VDEwLGNsYXNzIFQxMSxjbGFzcyBUMTI+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIg
KCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyKT4geyBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj
bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz
cyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFz
cyBUMTM+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0
LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3Mg
VDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgs
Y2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQx
ND4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUs
VDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3Mg
VDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgs
Y2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQx
NCxjbGFzcyBUMTU+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQy
LFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1KT4geyBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj
bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz
cyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFz
cyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTY+CnN0cnVjdCBpc19mdW5jdGlvbl9w
dHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEy
LFQxMyxUMTQsVDE1LFQxNik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK
dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xh
c3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3Mg
VDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xh
c3MgVDE2LGNsYXNzIFQxNz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAs
VDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQx
Nyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz
IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUs
Y2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxj
bGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQx
NyxjbGFzcyBUMTg+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQy
LFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4
KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
UixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxj
bGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNs
YXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3
LGNsYXNzIFQxOCxjbGFzcyBUMTk+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCop
KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQx
NixUMTcsVDE4LFQxOSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt
cGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg
VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEw
LGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3Mg
VDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMD4Kc3RydWN0IGlzX2Z1
bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw
LFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCk+IHsgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3Mg
VDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcs
Y2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEz
LGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3Mg
VDE5LGNsYXNzIFQyMCxjbGFzcyBUMjE+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIg
KCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1
LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFz
cyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBU
OSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNz
IFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNs
YXNzIFQyMSxjbGFzcyBUMjI+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQw
LFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixU
MTcsVDE4LFQxOSxUMjAsVDIxLFQyMik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
OyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg
VDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDks
Y2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBU
MTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFz
cyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8
UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxU
MTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyLFQyMyk+IHsgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xh
c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3Mg
VDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNz
IFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNs
YXNzIFQyMCxjbGFzcyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMyxjbGFzcyBUMjQ+CnN0cnVjdCBp
c19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5
LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMixUMjMs
VDI0KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CiMgMTI4ICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfZnVuY3Rp
b25fcHRyX2hlbHBlci5ocHAiIDMKfQp9CiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMiAzCgoKCgoKCiMgMSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf
dHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVf
YXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAzMCAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24u
aHBwIiAyIDMKCgoKCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewoKCnRl
bXBsYXRlPGJvb2wgaXNfcmVmID0gdHJ1ZT4Kc3RydWN0IGlzX2Z1bmN0aW9uX2Nob29zZXIKICAg
IDogOjpib29zdDo6dHlwZV90cmFpdHM6OmZhbHNlX3Jlc3VsdAp7Cn07Cgp0ZW1wbGF0ZSA8Pgpz
dHJ1Y3QgaXNfZnVuY3Rpb25fY2hvb3NlcjxmYWxzZT4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1l
IFQgPiBzdHJ1Y3QgcmVzdWx0XwogICAgICAgIDogOjpib29zdDo6dHlwZV90cmFpdHM6OmlzX2Z1
bmN0aW9uX3B0cl9oZWxwZXI8VCo+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CnN0cnVjdCBpc19mdW5jdGlvbl9pbXBsCiAgICA6IGlzX2Z1bmN0aW9uX2Nob29zZXI8IDo6
Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFsdWUgPgogICAgICAgIDo6dGVtcGxhdGUgcmVzdWx0
XzxUPgp7Cn07CiMgNzcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMwp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVj
dCBpc19mdW5jdGlvbiA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2Z1bmN0aW9u
X2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwoj
IDg0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19m
dW5jdGlvbi5ocHAiIDIgMwojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHAiIDIgMwoKCgoKCiMgMSAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw
cCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5o
cHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAzMCAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIiAyIDMKCm5hbWVz
cGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWlsIHsKIyA2MSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIiAzCnRlbXBsYXRlIDx0
eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfY2xhc3NfaW1wbAp7CgogICAgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9hbmQ8IDo6Ym9vc3Q6OnR5cGVfdHJh
aXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc191bmlvbjxUPjo6dmFsdWUgPjo6dmFsdWUsIDo6Ym9v
c3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19zY2FsYXI8VD46OnZhbHVlID46
OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29zdDo6aXNfYXJyYXk8
VD46OnZhbHVlID46OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29z
dDo6aXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZT46OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6
aWNlX25vdDwgOjpib29zdDo6aXNfdm9pZDxUPjo6dmFsdWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5
cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19mdW5jdGlvbjxUPjo6dmFsdWUgPjo6dmFs
dWUgPjo6dmFsdWUpOwojIDg0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy9pc19jbGFzcy5ocHAiIDMKfTsKCgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQg
PiBzdHJ1Y3QgaXNfY2xhc3MgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjppc19jbGFz
c19pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMK
IyA5NSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf
Y2xhc3MuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVyaXZlZC5ocHAiIDIgMwoKCgoKCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh
aXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJp
dHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAyMCAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVy
aXZlZC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVt
cGxhdGUgPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIERlcml2ZWQ+CnN0cnVjdCBpc19iYXNlX2Fu
ZF9kZXJpdmVkX2ltcGwKewogICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0
eXBlX3RyYWl0czo6aWNlX2FuZDwgOjpib29zdDo6aXNfY29udmVydGlibGU8RGVyaXZlZCosQmFz
ZSo+Ojp2YWx1ZSwgOjpib29zdDo6aXNfY2xhc3M8RGVyaXZlZD46OnZhbHVlLCA6OmJvb3N0Ojpp
c19jbGFzczxCYXNlPjo6dmFsdWUgPjo6dmFsdWUpOwoKCgoKCgp9OwoKfQoKdGVtcGxhdGU8IHR5
cGVuYW1lIEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZl
ZCA6IG1wbDo6Ym9vbF9jPCAoOjpib29zdDo6ZGV0YWlsOjppc19iYXNlX2FuZF9kZXJpdmVkX2lt
cGw8QmFzZSxEZXJpdmVkPjo6dmFsdWUpID4geyB9OwoKCgoKCgoKdGVtcGxhdGU8IHR5cGVuYW1l
IEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZDxCYXNl
JixEZXJpdmVkPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1l
IEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZDxCYXNl
LERlcml2ZWQmPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1l
IEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZDxCYXNl
JixEZXJpdmVkJj4gOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CgoKfQoKIyAxICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFp
dF91bmRlZi5ocHAiIDEgMwojIDU1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9pc19iYXNlX2FuZF9kZXJpdmVkLmhwcCIgMiAzCiMgMjkgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCgojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbXBvdW5k
LmhwcCIgMSAzCiMgMjQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX2NvbXBvdW5kLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
Ym9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAy
MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbXBvdW5kLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9v
c3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGlz
X2NvbXBvdW5kX2ltcGwKewogICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0
eXBlX3RyYWl0czo6aWNlX29yPCA6OmJvb3N0Ojppc19hcnJheTxUPjo6dmFsdWUsIDo6Ym9vc3Q6
OmlzX3BvaW50ZXI8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlLCA6
OmJvb3N0Ojppc19jbGFzczxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX3VuaW9uPFQ+Ojp2YWx1ZSwg
Ojpib29zdDo6aXNfZW51bTxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX21lbWJlcl9wb2ludGVyPFQ+
Ojp2YWx1ZSA+Ojp2YWx1ZSk7CiMgNDMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX2NvbXBvdW5kLmhwcCIgMwp9OwoKfQoKdGVtcGxhdGU8IHR5cGVu
YW1lIFQgPiBzdHJ1Y3QgaXNfY29tcG91bmQgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWls
Ojppc19jb21wb3VuZF9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKCn0KCiMgMSAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5k
ZWYuaHBwIiAxIDMKIyA1MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfY29tcG91bmQuaHBwIiAyIDMKIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VtcHR5LmhwcCIgMSAzCiMgMzIg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VtcHR5
LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBw
IiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv
ZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw
cCIgMiAzCiMgMzMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh
aXRzL2lzX2VtcHR5LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFp
bCB7CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBlbXB0eV9oZWxwZXJfdDEgOiBwdWJs
aWMgVAp7CiAgICBlbXB0eV9oZWxwZXJfdDEoKTsKICAgIGludCBpWzI1Nl07Cn07CgpzdHJ1Y3Qg
ZW1wdHlfaGVscGVyX3QyIHsgaW50IGlbMjU2XTsgfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGJvb2wgaXNfYV9jbGFzcyA9IGZhbHNlPgpzdHJ1Y3QgZW1wdHlfaGVscGVyCnsKICAgIHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3Ry
dWN0IGVtcHR5X2hlbHBlcjxULCB0cnVlPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IChzaXplb2YoZW1wdHlfaGVscGVyX3QxPFQ+KSA9PSBzaXplb2YoZW1wdHlfaGVscGVyX3QyKSk7
CgoKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfZW1wdHlfaW1wbAp7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZSBjdnQ7CiAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9ICggOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6ZGV0
YWlsOjplbXB0eV9oZWxwZXI8Y3Z0LDo6Ym9vc3Q6OmlzX2NsYXNzPFQ+Ojp2YWx1ZT46OnZhbHVl
ICwgZmFsc2UgPjo6dmFsdWUgKTsKCgoKCgoKfTsKIyAxOTAgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VtcHR5LmhwcCIgMwp9Cgp0ZW1wbGF0ZTwg
dHlwZW5hbWUgVCA+IHN0cnVjdCBpc19lbXB0eSA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRh
aWw6OmlzX2VtcHR5X2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRl
Zi5ocHAiIDEgMwojIDE5NyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfZW1wdHkuaHBwIiAyIDMKIyAzNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDEgMwoj
IDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19m
dW5kYW1lbnRhbC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh
aXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry
YWl0X2RlZi5ocHAiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsK
Cm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19mdW5k
YW1lbnRhbF9pbXBsCiAgICA6IDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfb3I8CiAgICAgICAg
ICA6OmJvb3N0Ojppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZQogICAgICAgICwgOjpib29zdDo6aXNf
dm9pZDxUPjo6dmFsdWUKICAgICAgICA+CnsKfTsKCn0KCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+
IHN0cnVjdCBpc19mdW5kYW1lbnRhbCA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6Omlz
X2Z1bmRhbWVudGFsX2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRl
Zi5ocHAiIDEgMwojIDQxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDIgMwojIDM4ICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwoKCgojIDEgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX29iamVjdC5ocHAiIDEgMwoj
IDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19v
YmplY3QuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2Rl
Zi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9k
ZWYuaHBwIiAyIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfb2JqZWN0LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNl
IGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGlzX29iamVjdF9pbXBsCnsK
CiAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vf
YW5kPCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29zdDo6aXNfcmVmZXJlbmNl
PFQ+Ojp2YWx1ZT46OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29z
dDo6aXNfdm9pZDxUPjo6dmFsdWU+Ojp2YWx1ZSwgOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9u
b3Q8IDo6Ym9vc3Q6OmlzX2Z1bmN0aW9uPFQ+Ojp2YWx1ZT46OnZhbHVlID46OnZhbHVlKTsKIyA0
NCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfb2Jq
ZWN0LmhwcCIgMwp9OwoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfb2JqZWN0
IDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfb2JqZWN0X2ltcGw8VD46OnZhbHVl
ID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDUzICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19vYmplY3QuaHBwIiAyIDMK
IyA0MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBw
IiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy9pc19zYW1lLmhwcCIgMSAzCiMgMTUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIg
MSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAi
IDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNiAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHAiIDIgMwoKbmFtZXNwYWNl
IGJvb3N0IHsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUgPiBzdHJ1Y3QgaXNf
c2FtZSA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz
dHJ1Y3QgaXNfc2FtZTxULFQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CiMgNzcgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwIiAz
Cn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv
ZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA4MCAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHAiIDIgMwojIDQ2ICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwoKIyAx
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zdGF0
ZWxlc3MuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvaXNfc3RhdGVsZXNzLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEg
MwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAx
IDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv
ZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3N0YXRlbGVzcy5ocHAiIDIgMwoKbmFtZXNw
YWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0
cnVjdCBpc19zdGF0ZWxlc3NfaW1wbAp7CiAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoOjpi
b29zdDo6dHlwZV90cmFpdHM6OmljZV9hbmQ8IDo6Ym9vc3Q6Omhhc190cml2aWFsX2NvbnN0cnVj
dG9yPFQ+Ojp2YWx1ZSwgOjpib29zdDo6aGFzX3RyaXZpYWxfY29weTxUPjo6dmFsdWUsIDo6Ym9v
c3Q6Omhhc190cml2aWFsX2Rlc3RydWN0b3I8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19jbGFzczxU
Pjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX2VtcHR5PFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSk7CgoKCgoKCgp9
OwoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfc3RhdGVsZXNzIDogbXBsOjpi
b29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfc3RhdGVsZXNzX2ltcGw8VD46OnZhbHVlID4geyB9
OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQ4ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zdGF0ZWxlc3MuaHBwIiAyIDMKIyA0
OCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAy
IDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0
cy9yZW1vdmVfYm91bmRzLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9ib3VuZHMuaHBwIiAzCiMgMSAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRf
ZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlf
c3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMKIyAxOCAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2JvdW5kcy5ocHAi
IDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJl
bW92ZV9ib3VuZHMgeyB0eXBlZGVmIFQgdHlwZTsgfTsKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwg
c3RkOjpzaXplX3QgTiA+IHN0cnVjdCByZW1vdmVfYm91bmRzPFRbTl0+IHsgdHlwZWRlZiBUIHR5
cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IHJlbW92
ZV9ib3VuZHM8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgY29uc3QgdHlwZTsgfTsKdGVtcGxhdGU8
IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2JvdW5kczxUIHZvbGF0
aWxlW05dPiB7IHR5cGVkZWYgVCB2b2xhdGlsZSB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUg
VCwgc3RkOjpzaXplX3QgTiA+IHN0cnVjdCByZW1vdmVfYm91bmRzPFQgY29uc3Qgdm9sYXRpbGVb
Tl0+IHsgdHlwZWRlZiBUIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07CgoKfQoKIyAxICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFp
dF91bmRlZi5ocHAiIDEgMwojIDMzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC90eXBlX3RyYWl0cy9yZW1vdmVfYm91bmRzLmhwcCIgMiAzCiMgNTIgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2NvbnN0LmhwcCIg
MSAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L3JlbW92ZV9jb25zdC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVf
dHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBl
X3RyYWl0X2RlZi5ocHAiIDIgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29uc3QuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7
CgoKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgaXNfdm9s
PgpzdHJ1Y3QgcmVtb3ZlX2NvbnN0X2hlbHBlcgp7CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKCnRl
bXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgcmVtb3ZlX2NvbnN0X2hlbHBlcjxULCB0cnVlPgp7
CiAgICB0eXBlZGVmIFQgdm9sYXRpbGUgdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
c3RydWN0IHJlbW92ZV9jb25zdF9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2Nv
bnN0X2hlbHBlcjwKICAgICAgICAgIHR5cGVuYW1lIGN2X3RyYWl0c19pbXA8VCo+Ojp1bnF1YWxp
ZmllZF90eXBlCiAgICAgICAgLCA6OmJvb3N0Ojppc192b2xhdGlsZTxUPjo6dmFsdWUKICAgICAg
ICA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJl
bW92ZV9jb25zdCB7IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpyZW1vdmVfY29uc3RfaW1wbDxU
Pjo6dHlwZSB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfY29u
c3Q8VCY+IHsgdHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpz
aXplX3QgTiA+IHN0cnVjdCByZW1vdmVfY29uc3Q8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgdHlw
ZVtOXTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVt
b3ZlX2NvbnN0PFQgY29uc3Qgdm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHZvbGF0aWxlIHR5cGVb
Tl07IH07CgoKCgoKCgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNzAgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jb25zdC5o
cHAiIDIgMwojIDUzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry
YWl0cy5ocHAiIDIgMwoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy9yZW1vdmVfcG9pbnRlci5ocHAiIDEgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcG9pbnRlci5ocHAiIDMKIyAx
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv
dHlwZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1w
bGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE4
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf
cG9pbnRlci5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gc3RydWN0IHJlbW92ZV9wb2ludGVyIHsgdHlwZWRlZiBUIHR5cGU7IH07CgoKdGVtcGxhdGU8
IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCo+IHsgdHlwZWRlZiBUIHR5cGU7
IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV9wb2ludGVyPFQqIGNvbnN0
PiB7IHR5cGVkZWYgVCB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1v
dmVfcG9pbnRlcjxUKiB2b2xhdGlsZT4geyB0eXBlZGVmIFQgdHlwZTsgfTsKdGVtcGxhdGU8IHR5
cGVuYW1lIFQgPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCogY29uc3Qgdm9sYXRpbGU+IHsgdHlw
ZWRlZiBUIHR5cGU7IH07CgoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEgMwojIDMzICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcG9p
bnRlci5ocHAiIDIgMwojIDU1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90
eXBlX3RyYWl0cy5ocHAiIDIgMwoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfdm9sYXRpbGUuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3ZvbGF0aWxlLmhw
cCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAz
CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0
YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIg
MiAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L3JlbW92ZV92b2xhdGlsZS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKbmFtZXNwYWNl
IGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBpc19jb25zdD4Kc3RydWN0IHJl
bW92ZV92b2xhdGlsZV9oZWxwZXIKewogICAgdHlwZWRlZiBUIHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4Kc3RydWN0IHJlbW92ZV92b2xhdGlsZV9oZWxwZXI8VCx0cnVlPgp7CiAgICB0
eXBlZGVmIFQgY29uc3QgdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgcmVt
b3ZlX3ZvbGF0aWxlX2ltcGwKewogICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfdm9sYXRpbGVf
aGVscGVyPAogICAgICAgICAgdHlwZW5hbWUgY3ZfdHJhaXRzX2ltcDxUKj46OnVucXVhbGlmaWVk
X3R5cGUKICAgICAgICAsIDo6Ym9vc3Q6OmlzX2NvbnN0PFQ+Ojp2YWx1ZQogICAgICAgID46OnR5
cGUgdHlwZTsKfTsKCn0KCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVtb3ZlX3Zv
bGF0aWxlIHsgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OnJlbW92ZV92b2xhdGlsZV9pbXBsPFQ+
Ojp0eXBlIHR5cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV92b2xh
dGlsZTxUJj4geyB0eXBlZGVmIFQmIHR5cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6
OnNpemVfdCBOID4gc3RydWN0IHJlbW92ZV92b2xhdGlsZTxUIHZvbGF0aWxlW05dPiB7IHR5cGVk
ZWYgVCB0eXBlW05dOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTiA+IHN0
cnVjdCByZW1vdmVfdm9sYXRpbGU8VCBjb25zdCB2b2xhdGlsZVtOXT4geyB0eXBlZGVmIFQgY29u
c3QgdHlwZVtOXTsgfTsKIyA2NyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
dHlwZV90cmFpdHMvcmVtb3ZlX3ZvbGF0aWxlLmhwcCIgMwp9CgojIDEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVm
LmhwcCIgMSAzCiMgNzAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf
dHJhaXRzL3JlbW92ZV92b2xhdGlsZS5ocHAiIDIgMwojIDU3ICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBw
IiAxIDMKIyAxMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp
dHMvdHlwZV93aXRoX2FsaWdubWVudC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9tcGwvaWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvbXBsL2lmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZhbHVlX3drbmQuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2lmLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMSAzCiMg
MjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3Bl
Yy5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvbGFt
YmRhX2Z3ZC5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC9tcGwvbGFtYmRhX2Z3ZC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfYXJpdHlfcGFyYW0uaHBwIiAxIDMKIyAyMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2xhbWJkYV9md2QuaHBwIiAyIDMKCgpu
YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCAs
IGxvbmcgQXJpdHkgPgpzdHJ1Y3QgbGFtYmRhOwoKCgoKfQp9CiMgMjEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIgMwojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC92b2lkLmhwcCIgMSAzCiMgMjMg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC92b2lkLmhwcCIgMwpuYW1l
c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnN0cnVjdCB2b2lkXzsKCnRlbXBsYXRlPCB0
eXBlbmFtZSBUID4Kc3RydWN0IGlzX3ZvaWRfCiAgICA6IGZhbHNlX2MKewoKCgp9OwoKdGVtcGxh
dGU8PgpzdHJ1Y3QgaXNfdm9pZF88dm9pZF8+CiAgICA6IHRydWVfYwp7CgoKCn07Cgp9Cn0KIyAy
MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVj
LmhwcCIgMiAzCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9h
dXhfL3ByZXByb2Nlc3Nvci9lbnVtLmhwcCIgMSAzCiMgMjQgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIgMwojIDEgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZfcGFy
YW1zX3RhaWwuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2RlZl9wYXJhbXNfdGFpbC5ocHAiIDMKIyAxICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvbGltaXRzL2FyaXR5LmhwcCIgMSAz
CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXBy
b2Nlc3Nvci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9jb25maWcvZHRwLmhwcCIgMSAzCiMgMjIgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZf
cGFyYW1zX3RhaWwuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3ByZXByb2Nlc3Nvci9pZGVudGl0eS5ocHAiIDEgMwojIDE2ICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwIiAzCiMgMSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRp
ZXMvaWRlbnRpdHkuaHBwIiAxIDMKIyAxOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvaWRlbnRpdHkuaHBwIiAzCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvZW1w
dHkuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJl
cHJvY2Vzc29yL2ZhY2lsaXRpZXMvaWRlbnRpdHkuaHBwIiAyIDMKIyAxNyAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2lkZW50aXR5LmhwcCIgMiAzCiMg
MjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nl
c3Nvci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvZW1wdHkuaHBwIiAxIDMKIyAyNiAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2RlZl9wYXJh
bXNfdGFpbC5ocHAiIDIgMwoKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZmlsdGVyX3BhcmFtcy5ocHAiIDEgMwojIDM0
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNz
b3IvZGVmX3BhcmFtc190YWlsLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3N1Yi5ocHAiIDEgMwojIDIwICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3Vi
LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhf
L3ByZXByb2Nlc3Nvci90dXBsZS5ocHAiIDEgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3ViLmhwcCIgMiAzCiMgMzUgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9k
ZWZfcGFyYW1zX3RhaWwuaHBwIiAyIDMKIyAyNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1
ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vYXJpdHkuaHBwIiAxIDMKIyAyNiAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMiAz
CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9pZi5ocHAiIDIg
MwoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKdGVtcGxhdGU8CiAgICAg
IGJvb2wgQwogICAgLCB0eXBlbmFtZSBUMQogICAgLCB0eXBlbmFtZSBUMgogICAgPgpzdHJ1Y3Qg
aWZfYwp7CiAgICB0eXBlZGVmIFQxIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUg
VDEKICAgICwgdHlwZW5hbWUgVDIKICAgID4Kc3RydWN0IGlmX2M8ZmFsc2UsVDEsVDI+CnsKICAg
IHR5cGVkZWYgVDIgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBDID0gdm9pZF8K
ICAgICwgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZvaWRfCiAgICA+
CnN0cnVjdCBpZl8KewogICAgdHlwZWRlZiB0eXBlbmFtZSBpZl9jPAogICAgICAgICAgQzo6dmFs
dWUKICAgICAgICAsIFQxCiAgICAgICAgLCBUMgogICAgICAgID46OnR5cGUgdHlwZTsKCiAgIAp9
OwojIDE1OCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2lmLmhwcCIg
Mwp0ZW1wbGF0ZTw+IHN0cnVjdCBpZl88IHZvaWRfLHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwg
dHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8g
LHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGlmXzwgVDEsVDIsVDMgPiB7IH07
IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgaWZfPCB2b2lkXyx2b2lkXyx2b2lkXyA+ICwg
LTEgPiB7IHR5cGVkZWYgaWZfPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07IG5hbWVzcGFj
ZSBhdXggeyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgPiBz
dHJ1Y3QgdGVtcGxhdGVfYXJpdHk8IGlmXzwgVDEsVDIsVDMgPiA+IHsgc3RhdGljIGNvbnN0IGlu
dCB2YWx1ZSA9IDM7IH07IHRlbXBsYXRlPD4gc3RydWN0IHRlbXBsYXRlX2FyaXR5PCBpZl88IHZv
aWRfLHZvaWRfLHZvaWRfID4gPiB7IHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSAtMTsgfTsgfQoK
fQp9CiMgMTIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz
L3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb3JfZWFjaF9pLmhwcCIgMSAzCiMgMTgg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zv
cl9lYWNoX2kuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
cHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvaW5jLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zvcl9lYWNoX2kuaHBwIiAy
IDMKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29y
L2xpc3QvYWR0LmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3ByZXByb2Nlc3Nvci9saXN0L2FkdC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2lzX2JpbmFyeS5ocHAiIDEgMwoj
IDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0
YWlsL2lzX2JpbmFyeS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2NoZWNrLmhwcCIgMSAzCiMgMTggIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvaXNfYmluYXJ5Lmhw
cCIgMiAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nl
c3Nvci9saXN0L2FkdC5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L3ByZXByb2Nlc3Nvci9sb2dpY2FsL2NvbXBsLmhwcCIgMSAzCiMgMjEgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2FkdC5ocHAiIDIg
MwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci90
dXBsZS9lYXQuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvcHJlcHJvY2Vzc29yL2xpc3QvYWR0LmhwcCIgMiAzCiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zvcl9lYWNoX2kuaHBwIiAyIDMK
IyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvcmVw
ZXRpdGlvbi9mb3IuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZm9yLmhwcCIgMwojIDEgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZWJ1Zy9lcnJvci5ocHAiIDEg
MwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3Iv
cmVwZXRpdGlvbi9mb3IuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2F1dG9fcmVjLmhwcCIgMSAzCiMgMTYgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvYXV0b19y
ZWMuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJv
Y2Vzc29yL2NvbnRyb2wvaWlmLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvYXV0b19yZWMuaHBwIiAyIDMKIyAyMSAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRp
b24vZm9yLmhwcCIgMiAzCiMgNDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2Zvci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9kZXRhaWwvZm9yLmhw
cCIgMSAzCiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nl
c3Nvci9yZXBldGl0aW9uL2RldGFpbC9mb3IuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvZXhwcl9paWYuaHBwIiAxIDMK
IyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL3Jl
cGV0aXRpb24vZGV0YWlsL2Zvci5ocHAiIDIgMwoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ib29sLmhwcCIgMSAzCiMgMjEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9u
L2RldGFpbC9mb3IuaHBwIiAyIDMKIyA0MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZm9yLmhwcCIgMiAzCiMgMjIgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zvcl9lYWNoX2ku
aHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9j
ZXNzb3IvdHVwbGUvZWxlbS5ocHAiIDEgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb3JfZWFjaF9pLmhwcCIgMiAzCiMgMSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL3JlbS5o
cHAiIDEgMwojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9j
ZXNzb3IvbGlzdC9mb3JfZWFjaF9pLmhwcCIgMiAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBwIiAyIDMK
IyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvdHVw
bGUvdG9fbGlzdC5ocHAiIDEgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i
b29zdC90eXBlX3RyYWl0cy90eXBlX3dpdGhfYWxpZ25tZW50LmhwcCIgMiAzCgoKIyAxICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9zdGF0aWNfYXNzZXJ0LmhwcCIgMSAzCiMg
MjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3N0YXRpY19hc3NlcnQuaHBw
IiAzCm5hbWVzcGFjZSBib29zdHsKCgp0ZW1wbGF0ZSA8Ym9vbCB4PiBzdHJ1Y3QgU1RBVElDX0FT
U0VSVElPTl9GQUlMVVJFOwoKdGVtcGxhdGUgPD4gc3RydWN0IFNUQVRJQ19BU1NFUlRJT05fRkFJ
TFVSRTx0cnVlPiB7IGVudW0geyB2YWx1ZSA9IDEgfTsgfTsKCgp0ZW1wbGF0ZTxpbnQgeD4gc3Ry
dWN0IHN0YXRpY19hc3NlcnRfdGVzdHt9OwoKfQojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy90eXBlX3dpdGhfYWxpZ25tZW50LmhwcCIgMiAzCiMg
MjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3R5cGVf
d2l0aF9hbGlnbm1lbnQuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWls
IHsKCmNsYXNzIGFsaWdubWVudF9kdW1teTsKdHlwZWRlZiB2b2lkICgqZnVuY3Rpb25fcHRyKSgp
Owp0eXBlZGVmIGludCAoYWxpZ25tZW50X2R1bW15OjoqbWVtYmVyX3B0cik7CnR5cGVkZWYgaW50
IChhbGlnbm1lbnRfZHVtbXk6OiptZW1iZXJfZnVuY3Rpb25fcHRyKSgpOwojIDQ2ICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy90eXBlX3dpdGhfYWxpZ25t
ZW50LmhwcCIgMwp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgdGFyZ2V0Pgp1bmlvbiBsb3dlcl9hbGln
bm1lbnQKewogICAgdHlwZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8Y2hhcj46OnZhbHVl
IDw9IHRhcmdldCwgY2hhciwgY2hhcj46OnR5cGUgdDA7IHR5cGVuYW1lIG1wbDo6aWZfYzwgYWxp
Z25tZW50X29mPHNob3J0Pjo6dmFsdWUgPD0gdGFyZ2V0LCBzaG9ydCwgY2hhcj46OnR5cGUgdDE7
IHR5cGVuYW1lIG1wbDo6aWZfYzwgYWxpZ25tZW50X29mPGludD46OnZhbHVlIDw9IHRhcmdldCwg
aW50LCBjaGFyPjo6dHlwZSB0MjsgdHlwZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8bG9u
Zz46OnZhbHVlIDw9IHRhcmdldCwgbG9uZywgY2hhcj46OnR5cGUgdDM7IHR5cGVuYW1lIG1wbDo6
aWZfYzwgYWxpZ25tZW50X29mPGZsb2F0Pjo6dmFsdWUgPD0gdGFyZ2V0LCBmbG9hdCwgY2hhcj46
OnR5cGUgdDQ7IHR5cGVuYW1lIG1wbDo6aWZfYzwgYWxpZ25tZW50X29mPGRvdWJsZT46OnZhbHVl
IDw9IHRhcmdldCwgZG91YmxlLCBjaGFyPjo6dHlwZSB0NTsgdHlwZW5hbWUgbXBsOjppZl9jPCBh
bGlnbm1lbnRfb2Y8bG9uZyBkb3VibGU+Ojp2YWx1ZSA8PSB0YXJnZXQsIGxvbmcgZG91YmxlLCBj
aGFyPjo6dHlwZSB0NjsgdHlwZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8dm9pZCo+Ojp2
YWx1ZSA8PSB0YXJnZXQsIHZvaWQqLCBjaGFyPjo6dHlwZSB0NzsgdHlwZW5hbWUgbXBsOjppZl9j
PCBhbGlnbm1lbnRfb2Y8ZnVuY3Rpb25fcHRyPjo6dmFsdWUgPD0gdGFyZ2V0LCBmdW5jdGlvbl9w
dHIsIGNoYXI+Ojp0eXBlIHQ4OyB0eXBlbmFtZSBtcGw6OmlmX2M8IGFsaWdubWVudF9vZjxtZW1i
ZXJfcHRyPjo6dmFsdWUgPD0gdGFyZ2V0LCBtZW1iZXJfcHRyLCBjaGFyPjo6dHlwZSB0OTsgdHlw
ZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8bWVtYmVyX2Z1bmN0aW9uX3B0cj46OnZhbHVl
IDw9IHRhcmdldCwgbWVtYmVyX2Z1bmN0aW9uX3B0ciwgY2hhcj46OnR5cGUgdDEwOwoKCgoKfTsK
CnVuaW9uIG1heF9hbGlnbgp7CiAgICBjaGFyIHQwOyBzaG9ydCB0MTsgaW50IHQyOyBsb25nIHQz
OyBmbG9hdCB0NDsgZG91YmxlIHQ1OyBsb25nIGRvdWJsZSB0Njsgdm9pZCogdDc7IGZ1bmN0aW9u
X3B0ciB0ODsgbWVtYmVyX3B0ciB0OTsgbWVtYmVyX2Z1bmN0aW9uX3B0ciB0MTA7CgoKCgp9OwoK
CgoKCnRlbXBsYXRlPGludCBUQWxpZ24sIGludCBBbGlnbj4Kc3RydWN0IGlzX2FsaWduZWQKewog
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoVEFsaWduID49IEFsaWduKSAmIChUQWxpZ24g
JSBBbGlnbiA9PSAwKTsKCgp9OwoKfQoKCgp0ZW1wbGF0ZSA8aW50IEFsaWduPgpjbGFzcyB0eXBl
X3dpdGhfYWxpZ25tZW50CnsKICAgIHR5cGVkZWYgZGV0YWlsOjpsb3dlcl9hbGlnbm1lbnQ8QWxp
Z24+IHQxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmlmX2M8CiAgICAgICAgICA6OmJvb3N0
OjpkZXRhaWw6OmlzX2FsaWduZWQ8IDo6Ym9vc3Q6OmFsaWdubWVudF9vZjx0MT46OnZhbHVlLEFs
aWduID46OnZhbHVlCiAgICAgICAgLCB0MQogICAgICAgICwgZGV0YWlsOjptYXhfYWxpZ24KICAg
ICAgICA+Ojp0eXBlIGFsaWduX3Q7CgogICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZvdW5k
ID0gYWxpZ25tZW50X29mPGFsaWduX3Q+Ojp2YWx1ZTsKCiAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0
YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVS
RTwgKGJvb2wpKCBmb3VuZCA+PSBBbGlnbiApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVk
ZWZfOTM7CiAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6
Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBmb3VuZCAlIEFsaWduID09
IDAgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzk0OwoKIHB1YmxpYzoKICAgIHR5
cGVkZWYgYWxpZ25fdCB0eXBlOwp9OwoKfQojIDU4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDYxICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvci5ocHAiIDEgMwojIDE4ICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvci5ocHAiIDMKIyAxICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pdGVyYXRvciIgMSAzCiMgNjUgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAzCgoKCgoKIyAxICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMKIyA0NCAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMwoKIyAxICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDEgMwojIDQzICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoKCgojIDEgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwoj
IDQ0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3
ZC5oIiAzCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUu
aCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUi
IDEgMwojIDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxl
IiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9s
b2NhbGUuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUv
bG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAi
L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKZW51bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAg
X19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAyLAogIF9fTENfQ09MTEFURSA9IDMsCiAg
X19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdFUyA9IDUsCiAgX19MQ19BTEwgPSA2LAog
IF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgsCiAgX19MQ19BRERSRVNTID0gOSwKICBf
X0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VSRU1FTlQgPSAxMSwKICBfX0xDX0lERU5U
SUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVy
biAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgog
IGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIg
Kmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5
X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRz
X3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFy
ICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdp
dHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hh
ciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9z
aWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7
CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoK
ICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsK
ICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9
OwoKCgpleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFy
ICpfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAo
dm9pZCkgdGhyb3cgKCk7CiMgMTQ5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKZXh0ZXJuIF9f
bG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAq
X19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fYmFz
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2FsZV90
IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2Nh
bGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyA1MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp
bmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0K
IyAzNyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgi
IDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9u
bF90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDMKZXh0ZXJuICJD
IiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0
ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFn
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBp
bnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19j
YXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9s
YW5naW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv
LmgiIDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwK
CiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlf
NiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwK
CiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoK
ICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83
LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFC
TU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05f
NSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAg
TU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgog
IERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwK
CgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9G
TVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMs
CgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9X
QUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywK
CgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQs
CiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9O
XzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05M
X1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84
LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05M
X1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAog
IF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAg
X05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAog
IF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1Rf
Rk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9O
TF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9X
RVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAg
X05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1F
X0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxf
RElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RB
VEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9O
TF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxf
Q09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dF
SUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwK
ICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQ
MywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9D
T0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9T
WU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFU
RV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NP
TExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoK
CiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxf
Q1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBf
TkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBf
TkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxf
Q1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lE
VEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBD
T0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwK
ICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NU
WVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVf
SU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElH
SVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRf
TUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAog
IF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxf
Q1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NU
WVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9J
TkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJ
VFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9X
QywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAg
X05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9D
VFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVf
T1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJ
R0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdf
TUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAog
IF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxf
Q1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBF
X09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRE
SUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4
X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9T
SVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRf
RlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNM
SVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9O
TF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lH
Tk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFf
TUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywK
ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9D
VFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VY
VFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ
XzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwK
ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05M
X05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZ
KSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lN
QUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywK
CgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZS
QUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgog
IF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllf
U1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9N
T05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NF
UF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZ
X1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoK
CgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9f
Q1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9O
TF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNF
REVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RV
T19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05M
X01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9Q
X1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9O
TF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9T
SUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllf
RFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwK
ICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9U
TywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJ
RF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJ
TUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05F
VEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5U
ID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVD
SU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5E
U19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywK
ICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAg
X05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAx
NikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBf
TkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJf
SEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgs
CiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFN
RV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4s
CiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1F
X01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1f
TENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwg
MTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09V
TlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5U
UllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllf
TlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUs
CiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FE
RFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJF
U1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwg
MTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVf
SU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9D
T0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VS
RU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJF
TUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNB
VElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05M
X0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBf
TkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAg
X05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9J
REVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAog
IF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElD
QVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklD
QVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJ
Q0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1f
TENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFu
Z2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJv
dyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpfX25s
X2xhbmdpbmZvX2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIv
dXNyL2luY2x1ZGUvaWNvbnYuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI1ICIv
dXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpp
Y29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNvbnZfb3BlbiAoX19jb25zdCBjaGFyICpfX3Rv
Y29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBjaGFyICoqX19yZXN0cmljdCBfX2luYnVmLAog
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19pbmJ5dGVzbGVmdCwKICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19vdXRidWYsCiAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX291dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGlu
dCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0aHJvdyAoKTsKCn0KIyAzOSAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKyts
b2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzAgIi91c3Iv
aW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0dGV4
dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0
ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQog
ICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2Rv
bWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQgKF9f
Y29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKl9f
ZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBjaGFy
ICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21zZ2lk
MiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRlX18g
KChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19jb25z
dCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNuZ2V0
dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25l
ZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29yeSkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRy
aWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0ZG9t
YWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoKCgpl
eHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19kb21h
aW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKIyAxMTUgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMK
fQojIDQwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRl
ZiBfX2xvY2FsZV90IF9fY19sb2NhbGU7Cn0KIyA0NyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKIyA0
NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/
ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgx
KSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBo
YSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAg
X0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4g
OCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwg
KDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDog
KCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8
PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8
ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/
ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5
KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5j
dCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSks
CiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDEx
KSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0
IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3Qg
Kl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBw
ZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGgg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hk
aWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
dG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50
IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93
ZXIgKGludCkgdGhyb3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4g
aW50IF9faXNhbG51bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9f
aXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRy
bF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChp
bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp
OwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl
cm4gaW50IF9faXN1cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19p
c2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xv
d2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9f
dG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc2ICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMwp9CiMgNTAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL2NjdHlwZSIgMiAzCiMgNjYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAg
dXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAg
dXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAg
dXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAg
dXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9
CiMgNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl
ZndkLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lk
CiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxp
ZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190
aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKCm5hbWVzcGFj
ZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2Nh
bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAg
dG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj
bGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+
IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj
bGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNf
dHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwg
dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBj
b2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2
dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu
VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0
X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVt
cHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29s
bGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFt
ZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGlt
ZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g
PgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50
bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAg
Y2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdl
c19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5z
aWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAg
Y2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9J
bXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G
YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBz
dGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNh
dGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxh
dGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwog
ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBj
b25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv
cnkgYWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAg
ICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRo
cm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3MpOwoKICAgIGxv
Y2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2Nh
dCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRk
LCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBs
b2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgp
IHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYg
X19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxv
Y2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3Q7CgoKICAgIHN0
cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9j
YWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAh
KHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBv
cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19z
MSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3Qg
bG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJp
dmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2lj
OwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IF9TX251bV9jYXRlZ29yaWVzID0gNjsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikg
dGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAg
ewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0
YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2
b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBf
X2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsK
ICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2Nh
bGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNv
bnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0
IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVy
ZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsK
ICAgIGNvbnN0IGNoYXIqIF9NX25hbWVzW19TX251bV9jYXRlZ29yaWVzXTsKICAgIHN0YXRpYyBj
b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxv
Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6
OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog
Y29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T
X2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRf
bWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1Nf
ZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNl
KCkgdGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAg
aW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAg
IGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBj
YXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25z
dCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9J
bXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9J
bXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7
CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJv
b2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgX19yZXQgJiYgaSA8IF9T
X251bV9jYXRlZ29yaWVzIC0gMTsgKytpKQogICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFt
ZXNbaV0sIF9NX25hbWVzW2kgKyAxXSkgPT0gMCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K
CiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29y
eSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0
IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25z
dCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2Zh
Y2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G
YWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFj
ZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBs
b2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9J
bXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0
KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19u
dW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIq
IjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVu
ZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRv
bWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xv
Y2FsZSBfU19jX2xvY2FsZTsKCiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9
IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCk7CgogICAgc3RhdGljIHZvaWQK
ICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9f
cywKICAgICAgICAgICAgICAgICAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gMCk7CgogICAgc3Rh
dGljIF9fY19sb2NhbGUKICAgIF9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7
CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19j
bG9jKTsKCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygp
OwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIGZhY2V0
KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0Jik7CiAg
fTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3Mg
bG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChj
b25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5k
IGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoKCgoKICAgIG11
dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2hpZ2h3
YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25zdCBp
ZCYpOwoKICBwdWJsaWM6CgoKICAgIGlkKCk7CgogICAgaW5saW5lIHNpemVfdAogICAgX01faWQo
KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX2luZGV4KQogICAgICAgIF9NX2luZGV4ID0gMSAr
IF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGlnaHdhdGVyLCAxKTsKICAgICAgcmV0dXJuIF9NX2lu
ZGV4IC0gMTsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25z
dCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9f
bG9jKSB0aHJvdygpOwp9CiMgNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2lvcyIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewoKCgoKICBlbnVt
IF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5s
aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10
ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2Ep
ICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w
ZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4g
X0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3Mg
X19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19j
YXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3Nf
Rm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz
CiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh
dG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBf
X2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4oX0lv
c19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50
PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9
IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3NfT3Bl
bm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0
YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l
IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1v
ZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwg
c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh
dG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lv
c19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBf
X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBp
bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9z
X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9J
b3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9k
ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5t
b2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1v
ZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01f
aW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9w
ZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9J
b3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
OyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwg
X0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50
PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRl
CiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1
cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4o
X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRl
JiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9Cgog
IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z
X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lv
c19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f
YikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog
IG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+c3Rh
dGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVr
ZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoK
ICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgoK
ICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygp
OwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToK
ICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1
ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz
IGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZt
dGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAg
IHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xl
ZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmlj
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz
IHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQp
OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7
CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpf
U19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lv
c19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBp
b3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRl
IGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1v
ZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6
Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3Nf
ZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1v
ZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBv
cGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91
dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5t
b2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRl
ZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNl
ZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAg
c3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMjYgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBl
dmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNv
cHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChl
dmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2
ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVh
bXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdz
IF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVh
bWJ1Zl9zdGF0ZTsKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAgICAgX0Nh
bGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9m
bjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBfQXRvbWljX3dvcmQgX01fcmVmY291bnQ7Cgog
ICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9f
aW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAgICA6
IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291
bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7IF9fYXRvbWlj
X2FkZCgmX01fcmVmY291bnQsIDEpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZl
cmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0K
ICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7CgogICAgdm9pZAogICAg
X01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9k
aXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAgc3RydWN0IF9Xb3JkcwogICAgewogICAgICB2
b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9pd29yZDsKICAgICAgX1dvcmRzKCkgOiBfTV9w
d29yZCgwKSwgX01faXdvcmQoMCkgeyB9CiAgICB9OwoKCiAgICBfV29yZHMgX01fd29yZF96ZXJv
OwoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2FsX3dvcmRfc2l6ZSA9IDg7CiAgICBfV29y
ZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3NpemVdOwoKCiAgICBpbnQgX01fd29yZF9z
aXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAgIF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMo
aW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBf
TV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAgewogICAgICBmcmll
bmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQo
KTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgog
ICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5
bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygp
IGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFn
cyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdz
OwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAg
ICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAg
Zm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAg
ICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRm
bGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xk
ID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9
IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGlu
ZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7
IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4g
X01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJl
YW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lv
bjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9
CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lk
dGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUp
CiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGgg
PSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAg
c3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1i
dWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkg
Y29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxs
b2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7
CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAg
ICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAg
IHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdv
cmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3Jk
X3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3df
d29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5p
b3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCgogIHByaXZhdGU6CiAg
ICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9
KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhh
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBo
YSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFs
cGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9v
bGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hv
d2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hv
d2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3No
b3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6
c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBz
aG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6
c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
bm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19i
YXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19i
YXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6
OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5v
c2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6
c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBw
ZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVw
cGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5v
dXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFz
ZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3Nf
YmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwog
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6
OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNl
JgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpk
ZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNl
KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0Zmll
bGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRp
ZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVu
dGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQoj
IDUwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEg
Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMSAzCiMg
NDQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwoK
CgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVm
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4g
X19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRy
YWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0
c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNp
Y19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19p
c3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNf
b3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJl
YW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFz
cyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJp
ZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90
eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90
ZWN0ZWQ6CgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgc2l6ZV90IF9NX2J1
Zl9zaXplOwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01f
YnVmX3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFy
X3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJf
dHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFy
X3R5cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoK
ICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2lu
aXQ7CgoKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tfc2l6ZSA9IDE7CiAg
ICAgIGNoYXJfdHlwZSBfTV9wYmFja1tfU19wYmFja19zaXplXTsKICAgICAgY2hhcl90eXBlKiBf
TV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAg
ICAgYm9vbCBfTV9wYmFja19pbml0OwoKCiAgICAgIGZwb3M8X19zdGF0ZV90eXBlPiBfTV9wb3M7
CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBp
ZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNpemVfdCBfX2Rpc3Qg
PSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihf
U19wYmFja19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9w
YmFjaywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0g
X01faW5fY3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAg
ICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4p
OwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoK
CgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlm
IChfTV9wYmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1
ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQg
PSAwOwogICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFj
azsKICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9N
X2J1ZjsKICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAg
ICAgICBfX29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0
aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAg
ICBfTV9wYmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3Nh
dmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAg
IH0KICAgICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9f
bikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBf
TV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQp
CiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAg
X01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0
aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICAgIGlmIChf
X3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX2luX2N1ciArPSBfX247CiAg
ICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQogICAgICAgICAgewogICAgICAgICAg
ICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAg
ICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAg
ICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUoKQogICAgICB7CiAgICAgICAgb2ZmX3R5
cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRfY3VyKQogICAgICAgICAgewoKICAgICAg
ICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQogICAgICAgICAgICAgIF9fcmV0ID0gX01f
b3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3VyOwogICAgICAgICAgfQog
ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAg
ICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZh
bHNlOwogICAgICAgIF9NX2J1Zl9zaXplID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAw
OwogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVm
X2xvY2FsZV9pbml0ID0gZmFsc2U7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1i
dWUoY29uc3QgbG9jYWxlICZfX2xvYykKICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlz
LT5nZXRsb2MoKSk7CiAgICAgICAgdGhpcy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBf
X3RtcDsKICAgICAgfQoKICAgICAgbG9jYWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9s
b2NhbGU7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoK
ICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoK
ICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6
OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNl
ZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJz
ZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7
IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFp
bCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9j
dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBpZiAo
X01fcGJhY2tfaW5pdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzaXplX3QgX19z
YXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAg
ICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAgICAg
ICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJhY2tfbGVuOwogICAgICAgICAgICAg
IH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAt
IHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9
IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAg
aW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAodHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKHRoaXMtPnNidW1wYygpLCBfX2VvZikKICAgICAgICAgICAgICAgID8gX19lb2YgOiB0aGlz
LT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAg
ICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsK
ICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAg
IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAg
ICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1
cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBf
X24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoK
ICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNw
dXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0
bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAg
ICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLCBfTV9idWZfc2l6ZV9vcHQoODE5
MiksCiAgICAgIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwgX01faW5fYmVnKDApLCBfTV9pbl9jdXIo
MCksIF9NX2luX2VuZCgwKSwKICAgICAgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwgX01f
b3V0X2VuZCgwKSwKICAgICAgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZf
bG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJh
Y2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2VuZF9zYXZlKDApLAogICAgICBfTV9wYmFja19pbml0
KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3Qg
eyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25z
dCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBj
b25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9f
bikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBl
KiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsK
ICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsK
ICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19i
YXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9k
ZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUqCiAg
ICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBl
KgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90
eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAgIHZv
aWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAgdm9p
ZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAgICAg
ewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwogICAgICAgIF9NX291
dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYm
IF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNl
OjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxv
Y2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOwog
ICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAgX01fYnVmX2xvY2Fs
ZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90
eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKICAgICAg
eyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9m
Zl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v
ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlw
ZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3Mo
cG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6Omlu
IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsg
fQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KCgogICAgICB2
aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQoKICAgICAg
dmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7
IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAg
ICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6
ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
dGhpcy0+dW5kZXJmbG93KCksIF9fcmV0KTsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBf
TV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9m
ICYmIF9fdGVzdHBlbmRpbmcpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsK
ICAgICAgICAgICAgaWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0
KQogICAgICAgICAgICAgICsrX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4g
X19yZXQ7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChp
bnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6
OmVvZigpOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQog
ICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1
cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgNDg1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu
Y2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVh
bWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1idWZfdHlw
ZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVybiAqdGhp
czsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKCm5hbWVzcGFjZSBzdGQK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0
IHNpemVfdAogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BiYWNrX3Np
emU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAg
aW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f
ZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqKHRoaXMtPmdwdHIoKSk7
CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQg
PSB0aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGlu
dF90eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9i
ZWcgPCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0
c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8
fCBfX3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92
ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+
Z3B0cigpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7
CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsK
ICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBl
bmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAg
ICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAg
ICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3Vy
X21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Mp
OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJh
aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNp
emUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQg
PSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgc2l6ZV90
IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9s
ZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0g
X19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwg
X19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5f
Y3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAg
X19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAg
ICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAgICAgICAgaWYgKCF0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywg
dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3Jl
dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0
cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0
bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVh
bXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAg
ICAgICAgb2ZmX3R5cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBp
ZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9f
cmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBt
aW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47
CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92
ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAgICAgKytfX3M7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNp
emUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lv
cywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYm91dCkKICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50
X3R5cGUgaW50X3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgc3RyZWFt
c2l6ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgIHN0cmVhbXNpemUgX194
dHJjdDsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6
Om91dDsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBf
X2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmN0ID0gX19z
Ym91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAgICAgX19y
ZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRy
Y3QpOwogICAgICAgICAgICAgIGlmIChfX3h0cmN0ID09IF9fYnVmc2l6ZSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+
c2dldGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgIHsK
ICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgIGlm
ICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAg
ICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0
ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+Jiwg
YmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh
bWJ1ZjxjaGFyPiopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdj
aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVh
bWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKICAg
ICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwp9CiMgNDk5ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDIgMwojIDUx
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDEg
MwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2lj
X2lvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ug
c3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
Y2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRl
cmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgX0NoYXJUKiwgX0NoYXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBl
OwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5
cGU7CgogICAgcHJpdmF0ZToKCgoKCgoKCiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9N
X3NidWY7CiAgICAgIGludF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVm
X2l0ZXJhdG9yKCkgdGhyb3coKQogICAgICA6IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6
OmVvZigpKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3Mp
IHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYyh0cmFpdHNfdHlwZTo6
ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19z
KSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkg
eyB9CgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFt
YnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlmIChfTV9zYnVmICYm
IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICAg
ICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwog
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgog
ICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9m
ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQg
PSAqdGhpczsKICAgICAgICBpZiAoX01fc2J1ZgogICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoKF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0g
MDsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuIF9f
b2xkOwogICAgICB9CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZf
aXRlcmF0b3ImIF9fYikgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9m
ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSB0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19iLl9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgcmV0
dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAg
ICAgfQoKCiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAog
ICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSBfX2VvZjsKICAgICAgICBpZiAoX01fc2J1ZikKICAg
ICAgICAgIHsKICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywg
X19lb2YpKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+
c2dldGMoKSksIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAg
fQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAg
ICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19i
KQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u
c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAg
ICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAg
eyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVi
bGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAg
IHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJs
aWM6CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYg
X19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9N
X3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19z
KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0K
CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsK
CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAqdGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAg
ICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2Yo
KSkpCiAgICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9
CiMgNDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf
aW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL3Zv
bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS93Y3R5cGUuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwojIDEgIi91c3Iv
bG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMwojIDYxICIv
dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVf
dDsKIyA3OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAw
LAogIF9fSVN3bG93ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAog
IF9fSVN3eGRpZ2l0ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBf
X0lTd2dyYXBoID0gNywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lT
d3B1bmN0ID0gMTAsCiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBw
ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3Vw
cGVyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1
cHBlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAo
KDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93
ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xv
d2VyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3ds
b3dlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAo
KDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxw
aGEpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2Fs
cGhhKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dh
bHBoYSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAo
KDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGln
aXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2Rp
Z2l0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dk
aWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAo
KDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hk
aWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lT
d3hkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChf
X0lTd3hkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDog
KGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgo
X19JU3dzcGFjZSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAo
KF9fSVN3c3BhY2UpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDog
KChfX0lTd3NwYWNlKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6
IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgo
X19JU3dwcmludCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAo
KF9fSVN3cHJpbnQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDog
KChfX0lTd3ByaW50KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6
IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgo
X19JU3dncmFwaCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAo
KF9fSVN3Z3JhcGgpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDog
KChfX0lTd2dyYXBoKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6
IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgo
X19JU3dibGFuaykgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAo
KF9fSVN3YmxhbmspIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDog
KChfX0lTd2JsYW5rKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6
IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgo
X19JU3djbnRybCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAo
KF9fSVN3Y250cmwpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDog
KChfX0lTd2NudHJsKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6
IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgo
X19JU3dwdW5jdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAo
KF9fSVN3cHVuY3QpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDog
KChfX0lTd3B1bmN0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6
IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgo
X19JU3dhbG51bSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAo
KF9fSVN3YWxudW0pIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDog
KChfX0lTd2FsbnVtKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6
IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIg
ewoKCgoKCgoKZXh0ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgaXN3YWxwaGEgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGlzd2NudHJsICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQg
KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9f
d2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgaXN3cHVuY3QgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
aXN3c3BhY2UgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIg
KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3Qg
X193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRo
cm93ICgpOwojIDE3OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3
Y3R5cGUgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
aXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwojIDI0OSAi
L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgX19jb25zdCBfX2ludDMyX3QgKndjdHJh
bnNfdDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwojIDI3NSAiL3Vz
ci9pbmNsdWRlL3djdHlwZS5oIiAzCn0KIyAyODggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpl
eHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9f
cHJvcGVydHkpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193
Yywgd2N0cmFuc190IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9faXN3YWxu
dW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgX19pc3dhbHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs
ZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRf
dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lz
d2dyYXBoX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgX19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xv
Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3
aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IF9faXN3c3BhY2VfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBfX2lzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f
bG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2Js
YW5rX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHdjdHlwZV90IF9fd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2Nh
bGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wg
KHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gd2ludF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2Ms
IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBl
cl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVy
biB3Y3RyYW5zX3QgX193Y3RyYW5zX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2Nh
bGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5z
X2wgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2xv
Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFu
c190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjpp
c3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcg
Ojppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNp
bmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAg
dXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBl
OwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0
cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzCiMg
NDggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh
Y2V0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vzci9s
b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
dHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlw
ZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9J
U3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRp
YyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdp
dCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0Owog
ICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBt
YXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dy
YXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9
IF9JU2FsbnVtOwogIH07CiMgNjQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9f
YykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19tLCBfX2MpOyB9CgogICAgICBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hh
cl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
aXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNj
YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwgX19sbywgX19o
aSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNv
bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFy
X3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG91
cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBl
CiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvbG93ZXIo
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAg
ICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19j
KTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4oY29uc3QgY2hhciogX19sbywgY29u
c3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAgY2hhcgogICAgICBuYXJyb3co
Y2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAg
ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1bHQsIF9fdG8pOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90
IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAg
ICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAg
ICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNrKiBfX3ZlYykgY29uc3QgPSAwOwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20s
IGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hh
cl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUK
ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh
cl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBk
b193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg
IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksCiAgICAgICAgICAg
ICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXIKICAg
ICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgICBjaGFyIF9fZGZh
dWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8
X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7CgogICAgICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMg
PSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9CgogICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2aXJ0dWFsIGJvb2wK
ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq
IF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hh
cl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJv
dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVz
dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6
OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hh
cj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIF9f
Y19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJvb2wgX01fZGVsOwogICAgICBfX3Rv
X3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0
IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNr
KiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7Cgog
ICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgbWFzayog
X190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAgICAgICAgICAgc2l6ZV90IF9fcmVm
cyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXIgX19jKSBj
b25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBpcyhjb25zdCBjaGFyKiBfX2xv
LCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29u
c3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3Qg
Y2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9u
b3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoK
ICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUoKSBjb25zdCB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBzdGF0aWMgY29uc3QgbWFzayoK
ICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlw
ZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg
X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht
YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5
cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93
ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgog
ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0
LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY3R5
cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmIF9fbG9j
KTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTx3Y2hhcl90PiA6IHB1YmxpYyBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2N0eXBlX3QgX193bWFza190eXBl
OwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jdHlwZTsKCiAg
ICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBl
KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgog
ICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9f
bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBi
b29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90
eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg
IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSog
X19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90
eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0
OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPHdjaGFyX3Q+JgogICAgdXNl
X2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiMgMSAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29s
CiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVy
biBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBj
b25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg
Y2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBf
X2hpZ2gpCiAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oKl9fbG93KyspXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0
eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg
Y2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAg
ICAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBf
X20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioK
ICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBj
b25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAg
ICAgICAgICAgJiYgKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyld
ICYgX19tKSAhPSAwKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEg
Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0
cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5
bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShj
b25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+
CiAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IHJlZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5
bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj
LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVjdnQuaCIgMwoKCiAgY2xhc3Mg
Y29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAgIG9r
LAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu
YW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBwdWJs
aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg
X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAgICBv
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9f
ZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAg
ICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9f
ZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9f
dG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAg
ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9CgogICAg
ICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4
dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRl
cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwgX19m
cm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9f
dG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2RpbmcoKSBj
b25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAgICAg
IGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNvbnN0
IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsg
fQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGlj
aXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0X2Fi
c3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0
ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg
Y29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9t
X25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg
ZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5k
LCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1
bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4
dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBp
bnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0
IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChj
b25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg
ICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9IDA7
CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9fY29k
ZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAg
ICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4
dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9f
cmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVy
blQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg
ICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJv
bV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0
ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBl
eHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg
ICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90
eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoK
ICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygp
OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg
ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2Nh
bGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1w
bGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVi
bGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRl
ZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoK
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2
dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0
IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0
LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwK
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5
cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19p
bihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf
X2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBf
X3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAg
dmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4
X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBj
b2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9h
YnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4
dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3Qg
X19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0
KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90
eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg
ICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0
CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAgICAgICAgICBl
eHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgICAg
IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg
ICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwKICAgICAgICAgICAg
IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBpbnRlcm5fdHlw
ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgaW50ZXJuX3R5cGUq
JiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fZW5jb2Rpbmco
KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBib29sIGRvX2Fsd2F5c19ub2Nv
bnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fbGVuZ3RoKGNv
bnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAg
fTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5
cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0
PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgZXhw
bGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpIHsg
fQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsg
fQogICAgfTsKCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyA0
NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRz
CiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJv
dGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hh
ciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3Np
emVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291
dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1
YmxpYzoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N
X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1l
bXNldChfTV9pbnRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5j
LCAwLCBfU19tYXhfc2l6ZSk7CiAgICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0
IGNoYXIqIF9faW50LCBjb25zdCBjaGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N
X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0
cm5jcHkoX01faW50X2VuYywgX19pbnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9l
eHRfZW5jLCBfX2V4dCwgX1NfbWF4X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRz
KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygw
KQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21h
eF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19t
YXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9p
bnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAg
b3BlcmF0b3I9KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHko
X01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5
KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5f
ZGVzYyA9IDA7CiAgICAgIF9NX291dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2Jq
Ll9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVz
Y190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChf
TV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01f
aW5fZGVzYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikK
ICAgICAgICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01f
aW5pdCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRf
Y2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAg
ICAgICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAg
ICAgICAgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRp
bWVfZXJyb3IoImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAg
ICAgIH0KICAgICAgaWYgKCFfTV9vdXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRf
ZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAo
X01fb3V0X2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigi
Y3JlYXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAg
IH0KCiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUg
X19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3Qg
PSBfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9v
dXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAg
IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAg
IHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9n
ZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50
CiAgICBfTV9nZXRfZXh0ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAg
ICBpbnQKICAgIF9NX2dldF9pbnRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsg
fQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJu
IF9NX2ludF9lbmM7IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygp
CiAgICB7IHJldHVybiBfTV9leHRfZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwg
X0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9i
YXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg
X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7
CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19l
bmNfdHJhaXRzOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190
cmFpdHMgX19lbmNfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3Jl
ZnMpCiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBf
X2VuYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8
aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAg
dmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191
bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg
ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg
IGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk
b19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK
ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJv
dygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5UPgogICAgbG9jYWxlOjppZAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5j
X3RyYWl0cz46OmlkOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6
ZV90CiAgICBfX2ljb252X2FkYXB0b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXpl
X3QqLCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwg
Y2hhcioqIF9faW5idWYsIHNpemVfdCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNo
YXIqKiBfX291dGJ1Ziwgc2l6ZV90KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9f
Y2QsIChfVClfX2luYnVmLCBfX2luYnl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0
X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0
cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBf
X2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu
dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRl
Ll9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVz
Y190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9
IF9fc3RhdGUuX01fZ2V0X291dF9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3Qg
X19mbXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fZmJ5
dGVzID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25z
dCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAgc2l6
ZV90IF9fdGJ5dGVzID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAg
ICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAg
ICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAg
IGludCBfX2ludF9ib20gPSBfX3N0YXRlLl9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAg
IGlmIChfX2ludF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXpl
ID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4
ZWQgPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGlu
dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0g
c3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90
cmFpdHM8aW50ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwog
ICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7
CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAm
X19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZieXRl
cywgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0
PGludGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZf
YWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sICZfX2ZieXRlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAg
ICB9CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90
eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19m
Ynl0ZXMgPCBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAg
IF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl
bmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRl
cm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICBleHRlcm5fdHlwZSog
X190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1
bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsK
ICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAg
ICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVz
Y3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGlu
dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3Rv
X2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihfX3RvKTsKICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3Io
aWNvbnYsKl9fZGVzYywgX19udWxsLCBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZfX2N0bywgJl9fdGxlbik7CgogICAgICAgICAgaWYgKF9fY29udiAh
PSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBpZiAoX190
bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190bykpCiAgICAgICAgICAgICAgICBf
X3JldCA9IG5vY29udjsKICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0gMCkKICAgICAg
ICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
X19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IF9fcmV0ID0gZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRf
YmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRz
Pjo6CiAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tLAogICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVy
bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJu
X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9n
b29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlw
ZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0
YXRlLl9NX2dldF9pbl9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mbXVs
dGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fZmxlbiA9IF9f
Zm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90
IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3Rs
ZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciog
X19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9f
Y2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9fZXh0
X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2V4dGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9fZXh0
X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21f
ZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRp
Y19jYXN0PGV4dGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoZXh0ZXJuX3R5cGUp
ICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2Fz
dDxleHRlcm5fdHlwZT4oX19leHRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxleHRl
cm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAg
ICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAg
ICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZf
X3RsZW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGV4dGVybl90eXBlKj4o
X19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
X19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwg
Kl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYg
KF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19mcm9t
X25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CiAg
ICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9f
Y3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBl
Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlh
bDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf
X3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K
ICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46Ogog
ICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICB7CiAgICAgIGludCBfX3JldCA9IDA7
CiAgICAgIGlmIChzaXplb2YoX0V4dGVyblQpIDw9IHNpemVvZihfSW50ZXJuVCkpCiAgICAgICAg
X19yZXQgPSBzaXplb2YoX0ludGVyblQpL3NpemVvZihfRXh0ZXJuVCk7CiAgICAgIHJldHVybiBf
X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5UPgogICAgYm9vbAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0
cz46OgogICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIGZh
bHNlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K
ICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46Ogog
ICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
LAogICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj
b25zdAogICAgeyByZXR1cm4gbWluKF9fbWF4LCBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fZW5kIC0g
X19mcm9tKSk7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4
dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFp
dHM+OjoKICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiAxOyB9
CiMgMzM0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVj
dnQuaCIgMiAzCiMgNDI2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCiAgY2xhc3MgX19udW1fYmFzZQogIHsKICBwcm90
ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2F0b21zW107CgogICAgZW51bQogICAg
ewogICAgICBfTV96ZXJvLAogICAgICBfTV9lID0gX01femVybyArIDEwLAogICAgICBfTV9FID0g
X01femVybyArIDExLAogICAgICBfTV9zaXplID0gMjEgKyAxCiAgICB9OwoKCgogICAgc3RhdGlj
IGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19m
cHRyLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19wcmVjKTsK
CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Zvcm1hdF9pbnQoY29uc3QgaW9zX2Jhc2UmIF9faW8s
IGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwgY2hhciBfX21vZGwpOwogIH07CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZh
Y2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1h
bF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNo
YXIqIF9NX2dyb3VwaW5nOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3RydWVuYW1lOwogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxp
Y2l0CiAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y
ZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQK
ICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9j
KTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAg
ICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRz
X3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cnVl
bmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RydWVuYW1lKCk7IH0KCiAgICAg
IHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5u
dW1wdW5jdCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2lu
dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91
cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFs
IHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
dHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZmFsc2VuYW1l
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAgICAgdm9pZAogICAg
ICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2NhbGUp
OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1w
dW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8PgogICAgbnVtcHVuY3Q8Y2hhcj46On5udW1w
dW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxjaGFyPjo6X01faW5p
dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKICB0ZW1wbGF0ZTw+CiAgICBu
dW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg
IG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5
bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBfX2NfbG9jYWxlIF9N
X2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK
ICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6
ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsK
ICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAg
ICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAg
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgp
CiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNs
YXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg
ICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp
dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo
aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJs
ZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBf
X2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9mbG9hdChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgICAgICAgICAgICAgICAgICAg
c3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3Rf
aW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwK
ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy
X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAg
dW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGxvbmcmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSYp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg
aXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAg
ICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
aWQ7CiMgNzIxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBf
X251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAw
KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAg
ICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1
dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwg
X192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9f
dikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl
JiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3Ms
IF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfZmxvYXQo
aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVy
dF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNv
bnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5f
aW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9f
Y3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBl
CiAgICAgIF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNv
bnN0OwoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f
ZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVu
c2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs
IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2Nf
bG9jYWxlIF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9
IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29s
bGF0ZSA9IF9TX2NfbG9jYWxlOyB9CgoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShfX2Nf
bG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2Nsb25lX2NfbG9jYWxlKF9f
Y2xvYyk7IH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29u
c3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShf
X2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRy
YW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9CgogICAgICBsb25n
CiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0KCgogICAgICBpbnQK
ICAgICAgX01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdDsKCiAg
ICAgIHNpemVfdAogICAgICBfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6
ZV90KSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2xsYXRlKCkK
ICAgICAgewogICAgICAgIGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9IF9TX2NfbG9jYWxlKQog
ICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAg
fQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8x
LCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19s
bzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw
ZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9f
aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJU
KiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVt
cGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAgY29sbGF0
ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBjb25zdDsK
CgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShj
b25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBz
aXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiwgY29uc3Qg
d2NoYXJfdCosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29s
bGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBj
b2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2Nv
bGxhdGUgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX2NvbGxhdGUpOwogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9j
b2xsYXRlLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2xsYXRlX2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIHRpbWVfYmFzZQogIHsKICBw
dWJsaWM6CiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0g
fTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX3RpbWVwdW5j
dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IF9DaGFyVCBfX2NoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBf
X3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgoKICAgICAgc3RhdGlj
IGNvbnN0IF9DaGFyVCogX1NfdGltZXpvbmVzWzE0XTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9f
Y19sb2NhbGUgX01fY19sb2NhbGVfdGltZXB1bmN0OwogICAgICBjb25zdCBjaGFyKiBfTV9uYW1l
X3RpbWVwdW5jdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX2Zvcm1hdDsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fdGlt
ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fdGltZV9lcmFfZm9ybWF0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
ZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW07CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fcG07CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW1fcG1fZm9ybWF0OwoK
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXky
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5
NDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh
eTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NzsKCgogICAgICBjb25zdCBfQ2hhclQqIF9N
X2RheV9hMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTI7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF5X2EzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNDsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9kYXlfYTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E2OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RheV9hNzsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDE7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aDAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDQ7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fbW9udGgwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA2OwogICAgICBjb25z
dCBfQ2hhclQqIF9NX21vbnRoMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwODsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
MTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMTsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9tb250aDEyOwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAxOwogICAgICBjb25z
dCBfQ2hhclQqIF9NX21vbnRoX2EwMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDM7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA0OwogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoX2EwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDY7CiAgICAgIGNvbnN0
IF9DaGFyVCogX01fbW9udGhfYTA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwODsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGhfYTEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMTsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9tb250aF9hMTI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBf
X3RpbWVwdW5jdChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cyksIF9NX25hbWVfdGltZXB1bmN0KCJDIikKICAgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5j
dCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xv
YywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcyksIF9NX25hbWVfdGltZXB1bmN0KF9fcykKICAgICAgeyBfTV9pbml0aWFsaXpl
X3RpbWVwdW5jdChfX2Nsb2MpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dChfQ2hhclQqIF9f
cywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBfQ2hhclQqIF9fZm9ybWF0LAogICAgICAgICAgICAg
Y29uc3QgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX2Zvcm1hdHMo
Y29uc3QgX0NoYXJUKiogX19kYXRlKSBjb25zdAogICAgICB7CgogICAgICAgIF9fZGF0ZVswXSA9
IF9NX2RhdGVfZm9ybWF0OwogICAgICAgIF9fZGF0ZVsxXSA9IF9NX2RhdGVfZXJhX2Zvcm1hdDsK
ICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiog
X190aW1lKSBjb25zdAogICAgICB7CgogICAgICAgIF9fdGltZVswXSA9IF9NX3RpbWVfZm9ybWF0
OwogICAgICAgIF9fdGltZVsxXSA9IF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAg
dm9pZAogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFyVCoqIF9fYW1wbSkgY29uc3QKICAgICAgewog
ICAgICAgIF9fYW1wbVswXSA9IF9NX2FtOwogICAgICAgIF9fYW1wbVsxXSA9IF9NX3BtOwogICAg
ICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoq
IF9fZHQpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kdFswXSA9IF9NX2RhdGVfdGltZV9mb3Jt
YXQ7CiAgICAgICAgX19kdFsxXSA9IF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICB9Cgog
ICAgICB2b2lkCiAgICAgIF9NX2RheXMoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAg
ICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5MTsKICAgICAgICBfX2RheXNbMV0gPSBfTV9k
YXkyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheTM7CiAgICAgICAgX19kYXlzWzNdID0gX01f
ZGF5NDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXk1OwogICAgICAgIF9fZGF5c1s1XSA9IF9N
X2RheTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5NzsKICAgICAgfQoKICAgICAgdm9pZAog
ICAgICBfTV9kYXlzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAg
ICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheV9hMTsKICAgICAgICBfX2RheXNbMV0gPSBf
TV9kYXlfYTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5X2EzOwogICAgICAgIF9fZGF5c1sz
XSA9IF9NX2RheV9hNDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXlfYTU7CiAgICAgICAgX19k
YXlzWzVdID0gX01fZGF5X2E2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheV9hNzsKICAgICAg
fQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNv
bnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoMDE7CiAgICAgICAgX19t
b250aHNbMV0gPSBfTV9tb250aDAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGgwMzsK
ICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBf
TV9tb250aDA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGgwNjsKICAgICAgICBfX21v
bnRoc1s2XSA9IF9NX21vbnRoMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aDA4Owog
ICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGgwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9N
X21vbnRoMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGgxMTsKICAgICAgICBfX21v
bnRoc1sxMV0gPSBfTV9tb250aDEyOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRo
c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAg
ICAgIF9fbW9udGhzWzBdID0gX01fbW9udGhfYTAxOwogICAgICAgIF9fbW9udGhzWzFdID0gX01f
bW9udGhfYTAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGhfYTAzOwogICAgICAgIF9f
bW9udGhzWzNdID0gX01fbW9udGhfYTA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGhf
YTA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2OwogICAgICAgIF9fbW9udGhz
WzZdID0gX01fbW9udGhfYTA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGhfYTA4Owog
ICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGhfYTA5OwogICAgICAgIF9fbW9udGhzWzldID0g
X01fbW9udGhfYTEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoX2ExMTsKICAgICAg
ICBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfl9fdGltZXB1bmN0KCk7CgoKICAgICAgdm9pZAogICAgICBfTV9p
bml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlKTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgX190aW1lcHVu
Y3Q8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6fl9f
dGltZXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAgICBfX3RpbWVwdW5j
dDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190
aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9j
KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX3B1dChj
aGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsKCgogIHRlbXBsYXRl
PD4KICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+Ojp+X190aW1lcHVuY3QoKTsKCiAgdGVtcGxhdGU8
PgogICAgY29uc3Qgd2NoYXJfdCoKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfU190aW1lem9u
ZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6
X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+
CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01fcHV0KHdjaGFyX3QqLCBzaXpl
X3QsIGNvbnN0IHdjaGFyX3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB0bSopIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9D
aGFyVCogX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDog
cHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0
ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBl
OwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1l
X2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsg
fQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGlt
ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
ZXRfZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3ll
YXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7
IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2Jl
ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwK
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01f
ZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21l
bWJlciwKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBf
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoK
ICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90
eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4
dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fZm9ybWF0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dl
dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0
PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5
cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRp
bWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
aW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgY29uc3QgX0No
YXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUK
ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgY29uc3QgdG0qIF9fdG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAw
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f
dG0sIF9fZm9ybWF0LCBfX21vZCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfnRpbWVfcHV0KCkKICAgICAgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNv
bnN0IHRtKiBfX3RtLAogICAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29u
c3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1
dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0
SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29u
c3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPihfX3JlZnMpCiAgICAgIHsgfTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UK
ICB7CiAgcHVibGljOgogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwg
dmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0
aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVy
bgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2Us
IGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu
dGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBt
b25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBj
aGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19z
ZXA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fY3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX01fcG9zaXRpdmVfc2lnbjsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdh
dGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9z
X2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAg
ZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAg
ZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciog
X19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg
ICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFy
X3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAo
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAg
IHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dy
b3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5
cGUKICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bv
c2l0aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAg
aW50CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJh
Y19kaWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAg
IG5lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog
ICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRz
X3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog
ICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9s
OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0
cmluZ190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9uZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0
cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFs
IHBhdHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bv
c19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAg
ICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2Fs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUgPSBf
X251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgog
ICAgbG9jYWxlOjppZCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9D
aGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIHRy
dWU+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIGZh
bHNlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5j
dDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0
IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxz
ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgoK
ICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgp
OwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVu
Y3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl
Pjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKICB0
ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5p
dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1l
IDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2Fs
ZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190
eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhwbGlj
aXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAgewog
ICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOwog
ICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsK
ICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdF9i
eW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5j
dCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAg
IGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1vbmV5
X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3Qg
X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRv
dWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19l
bmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlw
ZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5k
LCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs
b25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu
Z190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0
SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9f
dW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19p
bywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUg
X19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcgZG91
YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
bG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0IG1l
c3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFj
ZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf
bWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAgcHVi
bGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1l
c3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwg
X01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19j
X2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19j
bG9jLCBjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fbmFt
ZTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xv
Yyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8
Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25z
dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7
CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50
IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAg
IGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShf
X2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpCiAg
ICAgICB7CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAhPSBfU19jX2xvY2FsZSkK
ICAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAg
ICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0
cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBlJiBf
X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0YWxv
ZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0
cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAgICAg
IH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFyKiBf
X21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxj
aGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczMCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAgICByZXR1cm4gc3Ry
aW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBz
dHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0
IHN0cmluZyYpIGNvbnN0OwoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFy
VD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19s
b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAog
ICAgewogICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOwogICAgICByZXR1
cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2Fn
ZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKICAgIHsKCgogICAg
ICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OnN0cmlu
Z190eXBlCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBj
b25zdAogICAgewoKCgoKCgogICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoX19M
Q19BTEwsIF9fbnVsbCkpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9NX25hbWVfbWVzc2Fn
ZXMpOwogICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZh
dWx0KSk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FMTCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xk
KTsKICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKCiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRv
X2Nsb3NlKGNhdGFsb2cpIGNvbnN0CiAgICB7IH0KIyAxNzQ0ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNz
YWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVf
dCBfX3JlZnMgPSAwKQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAg
ICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fczsKICAgICAgICBpZiAoX01fY19sb2NhbGVfbWVz
c2FnZXMgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX21lc3NhZ2VzKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVf
bWVzc2FnZXMsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfm1lc3NhZ2VzX2J5bmFtZSgpCiAgICAgIHsgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBj
b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3Qg
bG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5p
cyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f
bG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5
cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg
eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6
bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhh
LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19j
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNw
dW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0
KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8
Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0No
YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBf
X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f
bG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dl
cihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9iYXNpY19pb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zIDogcHVibGlj
IGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg
X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlw
ZV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz
PiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3Ry
ZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51
bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKCgogICAgcHJv
dGVjdGVkOgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAg
ICAgbXV0YWJsZSBjaGFyX3R5cGUgX01fZmlsbDsKICAgICAgbXV0YWJsZSBib29sIF9NX2ZpbGxf
aW5pdDsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1
ZjsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlwZTsKCiAgICAgIGNvbnN0IF9f
bnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBfX251bWdldF90eXBlKiBfTV9m
bnVtZ2V0OwoKICAgIHB1YmxpYzoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsg
fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5mYWlsKCk7IH0KCiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAgdm9pZAogICAgICBjbGVhcihpb3N0
YXRlIF9fc3RhdGUgPSBnb29kYml0KTsKCiAgICAgIHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0
ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUp
OyB9CgogICAgICBib29sCiAgICAgIGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5y
ZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgYm9vbAogICAgICBlb2YoKSBjb25zdAogICAgICB7IHJl
dHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9CgogICAgICBib29sCiAgICAg
IGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8
IGZhaWxiaXQpKSAhPSAwOyB9CgogICAgICBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlvc3RhdGUK
ICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoK
ICAgICAgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAg
ICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJl
YW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAg
eyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7
IH0KCgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+KgogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3Rp
ZXN0cikKICAgICAgewogICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19v
bGQgPSBfTV90aWU7CiAgICAgICAgX01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9f
b2xkOwogICAgICB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAg
ICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlm
bXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbCgp
IGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGxfaW5pdCkKICAgICAgICAgIHsKICAg
ICAgICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAgICAgICAgICAgIF9NX2ZpbGxf
aW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9NX2ZpbGw7CiAgICAgIH0K
CiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAg
ICAgY2hhcl90eXBlIF9fb2xkID0gdGhpcy0+ZmlsbCgpOwogICAgICAgIF9NX2ZpbGwgPSBfX2No
OwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBpbWJ1
ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlw
ZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVu
KGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBiYXNpY19pb3MoKSA6IGlv
c19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBfTV9jaGVja19mYWNl
dChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9f
ZikKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgfQoKICAgICAgdm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xv
Yyk7CiAgICB9Owp9CgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z
LjIvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAgewog
ICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0
YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwg
YmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMoKSkp
CiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBj
YXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAg
YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAg
ICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25zdCBi
YXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhz
Ll9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBfTV9sb2NhbF93
b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9DYWxsYmFja19s
aXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikKICAgICAgICBf
X2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2
ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAgICB7CiAgICAg
ICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAgIH0K
ICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7
CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6ZTsgKytfX2kp
CiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAoX01f
d29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV93
b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93b3JkID0gX193
b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoKICAgICAgdGhp
cy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndpZHRoKCkp
OwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0aGlzLT50
aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7CgogICAgICB0
aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxsX2NhbGxi
YWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQp
IGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPm5hcnJvdyhf
X2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAgICAgY2hhcl90
eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5
cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkp
OwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX19s
b2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVmKCkt
PnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hlX2Zh
Y2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi91c3IvbG9jYWwv
dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBf
TV9maWxsID0gX0NoYXJUKCk7CiAgICAgIF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAgX01f
ZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01f
c3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgIHsKICAgICAgaWYgKGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAg
ICBfTV9mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOwogICAgICBlbHNl
CiAgICAgICAgX01fZmN0eXBlID0gMDsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlw
ZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+
KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZudW1wdXQgPSAwOwogICAgICBpZiAoaGFz
X2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9m
YWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtZ2V0
ID0gMDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zPHdjaGFyX3Q+Owp9CiMgMjA4ICIvdXNy
L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMK
IyA1MiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyA0
NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0
eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsK
ICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNp
dAogICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhp
cy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsg
fQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19w
ZikoX19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAg
aW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNl
ZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19i
YXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJu
IHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAg
IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAg
ICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihf
X24pKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikK
ICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkg
JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3Qg
fHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9y
PDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAg
ICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsK
ICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQg
aW50IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PDwodW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYK
ICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdy
aXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAg
fTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj
bGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAg
Ym9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoK
ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlm
IChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlv
bigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3Mu
cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29s
KCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwg
X0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVy
biAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIg
X19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9Cgog
IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5z
aWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4o
X19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoK
ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv
bnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAg
eyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4o
J1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgp
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoK
CgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvb3N0cmVh
bS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL29zdHJlYW0udGNjIiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL2xvY2FsZSIgMwoKCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMwojIDM3ICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMSAzCiMgNDcgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVy
biAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNy
L2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgi
IDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNs
dWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAy
IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoK
CmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIv
dXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25h
bWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1
ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDIgMwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEg
Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAxIDMKIyA0OCAi
L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKCgoKIyAxICIv
dXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRl
cm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgi
IDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0
eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90
OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9p
bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2FzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X190YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJs
ZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2
b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91
YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNv
c2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2F0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg
cG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQg
Kl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gs
IGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91Ymxl
IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRv
dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg
bW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0x
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl
IHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19w
b3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3Fy
dCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFi
cyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUg
X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp
bnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBk
b3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRv
dWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19z
aWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlz
aWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJs
ZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4g
KGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy
biBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChp
bnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAo
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpl
eHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195
biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
ZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3Vi
bGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0
Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUg
bGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19y
aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dh
cmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg
X19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4g
KGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2Fs
YmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl
IG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlp
bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVt
cXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg
bHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChk
b3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93
ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu
Yml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3Vi
bGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg
MwojIDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0
aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRl
cm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3Nm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9h
dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0
IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2lu
Y29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsg
ZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpf
X2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3No
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0
YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25l
bnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhw
b25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBm
bG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxv
YXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZs
b2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
bG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsK
CgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxv
YXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9h
dCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0
IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
aW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
ZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0
IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2lnbmlm
aWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9f
Y29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBf
X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBp
bnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAo
aW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhy
b3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
eTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYgKGlu
dCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGdh
bW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2Ft
cCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWdu
Z2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRl
cm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRm
IChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQg
X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9f
bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19u
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2Nh
bGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
c2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZs
b2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJi
eWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVv
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5k
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4
dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1
ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBm
bG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cg
KCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNy
L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ks
IGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAo
bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np
bmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo
KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpf
X3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19z
aW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5o
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBf
X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhw
bCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRv
dWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxv
b3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9u
ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91Ymxl
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
bG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNh
bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNv
cHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAq
X190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBf
X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBp
bnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGpu
bCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAo
aW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxvbmcg
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBs
b25nIGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChs
b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChsb25nIGRv
dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUsIGlu
dCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmludGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2Fs
YmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBp
bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3Vi
bGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RydW5jbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGlu
dCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
aW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxv
bmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBs
b25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m
bWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcg
ZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkK
ICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBm
bWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgMTAwICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBz
aWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBfTkFO
LAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAg
IEZQX05PUk1BTAoKICB9OwojIDI0MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVu
dW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lT
T0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJ
Ql9WRVJTSU9OOwojIDI2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRp
b24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsK
ICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0
aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgNDExICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAzCn0KIyA1MiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvY21hdGgiIDIgMwojIDc5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
X1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAg
YWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxp
bmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gp
OyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1
cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQg
X194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlu
bGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3Ns
KF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxv
YXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoK
ICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1
cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25n
IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFu
MjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVy
biA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRh
bjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9f
eSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwo
ZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoK
CgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJl
dHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhs
b25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2lu
ZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpj
b3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJs
ZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBp
bmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoK
CgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6
ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMo
ZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBs
b25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9m
YWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihm
bG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0K
CgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0
dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGlu
ZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYo
X194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRv
dWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoK
CgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwg
aW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1
cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGlu
ZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2ds
KF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChm
bG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0K
CgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBm
bG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyBy
ZXR1cm4gOjptb2RmbChfX3gsIF9faXB0cik7IH0KIyAzODggIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBfX3gsIGludCBfX24pCiAgICB7CiAgICAg
IHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkvX19jbWF0aF9wb3dlcihfX3gsIC1fX24p
CiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19uKTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7
CgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6
cG93ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OnBvd2woX194LCBfX3kpOyB9
CgoKCgoKCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0
dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0
IF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIGlu
bGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGludCBfX24pCiAgeyByZXR1
cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICB1c2luZyA6OnNpbjsKCiAgaW5saW5lIGZs
b2F0CiAgc2luKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9Cgog
IGlubGluZSBsb25nIGRvdWJsZQogIHNpbihsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19i
dWlsdGluX3NpbmwoX194KTsgfQoKICB1c2luZyA6OnNpbmg7CgoKICBpbmxpbmUgZmxvYXQKICBz
aW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxv
bmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2luaGwoX194KTsg
fQoKCgoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUgZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkK
ICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGwoX194KTsg
fQoKICB1c2luZyA6OnRhbjsKCgogIGlubGluZSBmbG9hdAogIHRhbihmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6dGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuKGxvbmcg
ZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsK
CgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmhmKF9feCk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW5oKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjp0YW5obChfX3gpOyB9CgoKCgp9CgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2ZwY2xhc3NpZnko
X1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj
bGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs
YXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4g
KHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZmluaXRlZiAoX19mKSA6IHNpemVv
ZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zpbml0ZSAoX19mKSA6IF9fZmluaXRlbCAo
X19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVf
aXNpbmYoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/
IF9faXNpbmZmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNp
bmYgKF9fZikgOiBfX2lzaW5mbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW50CiAgICBfX2NhcHR1cmVfaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19m
KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNp
emVvZiAoZG91YmxlKSA/IF9faXNuYW4gKF9fZikgOiBfX2lzbmFubCAoX19mKSk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNub3JtYWwoX1RwIF9f
ZikgeyByZXR1cm4gKChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3Np
ZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lm
eSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpID09IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfc2lnbmJpdChfVHAgX19mKSB7
IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19zaWduYml0ZiAoX19m
KSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBf
X3NpZ25iaXRsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg
IF9fY2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gKF9f
ZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18o
X19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9f
dSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0g
c2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNp
emVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkp
ID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNz
aWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3Np
ZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPiBf
X3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0
dXJlX2lzZ3JlYXRlcmVxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19l
eHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhf
X2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191
ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBz
aXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6
ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkg
PT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3Np
ZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lm
eSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+PSBf
X3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0
dXJlX2lzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7
IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChf
X2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190
eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQp
ID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkg
PyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwg
KHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBz
aXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19m
cGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194IDwgX195OyB9KSk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NlcXVh
bChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190
eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIp
OyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVv
Zl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBf
X2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9f
ZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6
ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVv
ZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xh
c3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPD0gX195OyB9KSk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVy
KF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5
cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7
ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9m
X18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f
ZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m
cGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXpl
b2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9m
IChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFz
c2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIChfX3ggPCBfX3kgfHwgX195IDwgX194KTsg
fSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVf
aXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lv
bl9fICh7IF9fdHlwZW9mX18oX19mMSkgX191ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9f
diA9IChfX2YyKTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lm
eWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5
IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikg
PT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09
IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9f
dikpID09IEZQX05BTjsgfSkpOyB9Cn0KIyA1ODAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiBfX2Nh
cHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
dAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRlKF9fZik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2luZihfVHAgX19mKSB7
IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25hbihfX2Yp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNub3JtYWwoX1RwIF9f
ZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9z
aWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dy
ZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyKF9f
ZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNncmVh
dGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzZ3Jl
YXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
dAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVz
cyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlz
bGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xl
c3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK
ICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0
dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVy
biBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7
CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6aXNmaW5p
dGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2luZyBfX2dudV9jeHg6OmlzbmFuOwog
IHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWduYml0Owog
IHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVy
ZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xl
c3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVf
Y3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1
bnNpZ25lZCBpbnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7
CgogICAgICB3aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAq
IF9feDsKICAgICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7
CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDY1NSAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwojIDQyICIvdXNyL2xvY2FsL3Zv
bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMg
MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAxIDMKIyA0
NyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCgojIDEg
Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvY3B1X2xpbWl0cy5oIiAxIDMKIyA0OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvbGltaXRzIiAyIDMKIyA4ODcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5k
X3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJk
X3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5m
aW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVt
IGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAg
ICBkZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0
cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7
CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0
IGludCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBz
dHJ1Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7
CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhy
b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5m
aW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh
dGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3co
KQogICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoK
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAgICAgfHwg
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p
dHM8Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0
cnVlOwoKICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hh
cikoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gKGNoYXIpMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9t
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg
IH07CiMgMTA3MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRz
IiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTEyNyAt
IDEpOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJv
cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25l
ZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2ln
bmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDExMjggIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQg
Y2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2ln
bmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMTI3ICogMiArIDEpOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
Y2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3
Y2hhcl90IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHdjaGFyX3QpKC0yMTQ3NDgzNjQ3
TCAtIDEpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gKHdjaGFyX3QpMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHdjaGFyX3QgZXBz
aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBy
b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBxdWlldF9OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJf
dCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAg
ICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2No
YXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsKICAgIH07CiMgMTI0MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl
L2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz
PHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMy
NzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
aWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7
IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQg
c2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgzMjc2NyAqIDIgKyAxKTsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNjsKICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8aW50Pgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkoLTIxNDc0ODM2
NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IChpbnQpMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m
aW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f
YWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK
CiAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9
CiAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTQxMCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAodW5zaWduZWQpKDIxNDc0ODM2NDdMICogMlUgKyAx
KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3Io
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
aW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v
cm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz
ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0
YXRpYyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQogICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgaW5m
aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAg
ICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxv
bmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4o
MCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwojIDE1MjIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWdu
ZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAg
ICAgc3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIw
MzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcg
bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg
bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp
YyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu
Mi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u
ZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1
ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs
b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Zmxv
YXQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK
CiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0
MzVlLTM4RjsgfQogICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy
biAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0YXRpYyBm
bG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gLTM3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDEyODsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl
bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQgaW5maW5p
dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxv
YXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBz
dGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CiMgMTc2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
bGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4
NTA3MjAxNGUtMzA4OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7
IHJldHVybiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSA1MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg
ZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEz
MWUtMTY7IH0KICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMS4wOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0x
MDIxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0OwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMzA4OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAgICAg
ICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87
CiAgICB9OwojIDE4NDQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2xp
bWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJs
ZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy4z
NjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1h
eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICBzdGF0aWMg
bG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAgICAgZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAg
ICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBk
b3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3Rh
dGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsg
fQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKfQojIDQ0ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu
dGNjIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlw
ZWluZm8iIDEgMwojIDQwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi90
eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNsYXNz
IF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk
ZS9jKysvMy4yL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIGNsYXNzIHR5cGVfaW5m
bwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6
CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2lu
Zm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFt
ZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6
IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29u
c3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDk4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu
Y2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZv
JiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJnLl9fbmFtZTsgfQogICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVy
biBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5
cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0K
CgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBjb25zdDsKCiAg
ICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVh
bCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190
aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19vdXRlcikgY29u
c3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFiaXYxOjpfX2Ns
YXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBl
eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQoKCiAgICB2
aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNsYXNzIGJhZF90eXBlaWQgOiBw
dWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7
IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7CiAgfTsKfQoKfQojIDQ2ICIv
dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu
dGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
IGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QK
ICAgIHsKICAgICAgX0ltcGwqIF9fdG1wID0gbmV3IF9JbXBsKCpfTV9pbXBsLCAxKTsKICAgICAg
X190bXAtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7CiAg
ICAgIHJldHVybiBsb2NhbGUoX190bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxvY2Fs
ZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3RkOjpj
b2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBl
JiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsKICAgICAgcmV0
dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBfX3MxLmxl
bmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3My
LmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9f
bG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBs
b2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAg
IGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19f
aV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRo
cm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAg
bG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAg
ICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRz
W19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9l
eHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYg
X194dHJjKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190
cmFpdHNfdHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAg
ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0
PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1
cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBf
X2N0eXBlLndpZGVuKCctJyk7CiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBf
X2MgPSAqX19iZWc7CiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8
IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAhPSBf
X2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBj
aGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg
ICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9T
X2F0b21zW19NX3plcm9dKTsKICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAg
d2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkK
ICAgICAgICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3VuZF96
ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgewog
ICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3BvczsK
ICAgICAgICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8gKyAx
OwogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVuKF9T
X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3VuZF9k
ZWMgPSBmYWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25zdCBj
aGFyX3R5cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBfX2Zv
dW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBp
bmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAg
ICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25w
LnRob3VzYW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7
CgogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9f
d2F0b21zLCAxMCwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6
ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAg
ICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19z
ZXApCiAgICAgICAgICAgICAgICAgICAmJiBfX2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5kX2Rl
YykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2Fz
dDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAg
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShf
X2MsIF9fZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAg
ICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICBfX2ZvdW5kX2dy
b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgKytf
X3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4nOwogICAgICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9kZWMgPSB0cnVlOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9l
XSkKICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21z
W19NX0VdKSkKICAgICAgICAgICAgICAgICAgICYmICFfX2ZvdW5kX3NjaSAmJiBfX3BvcykKICAg
ICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyAr
PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykK
ICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAg
ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX2Zv
dW5kX3NjaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3Vu
ZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX19mb3VuZF9kZWMp
CiAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf
cG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3Vu
ZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQp
CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfaW50
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYywgaW50JiBf
X2Jhc2UpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3Ry
YWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg
ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8
bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19i
YXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAo
X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICBfX2Jhc2UgPSA4OwogICAgICBl
bHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgIF9fYmFzZSA9IDE2
OwogICAgICBlbHNlCiAgICAgICAgX19iYXNlID0gMTA7CgoKICAgICAgaW50IF9fcG9zID0gMDsK
ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1
cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBf
X2N0eXBlLndpZGVuKCctJyk7CgogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19w
bHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19i
ZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93
KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53
aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0
eXBlLndpZGVuKCd4Jyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX1ggPSBfX2N0eXBlLndpZGVu
KCdYJyk7CiAgICAgIGlmIChfX2Jhc2UgPT0gMTApCiAgICAgICAgewogICAgICAgICAgYm9vbCBf
X2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShf
X2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytf
X3BvczsKICAgICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gMCkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkKICAg
ICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAg
ICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFy
KCkpOwogICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgICAg
IF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICBfX2Jhc2UgPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f
dHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAg
ICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg
ICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkgfHwgX190cmFpdHNfdHlwZTo6ZXEo
X19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywg
Y2hhcigpKTsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0K
CgoKICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogICAgICAgIF9f
bGVuID0gX01fc2l6ZTsKICAgICAgZWxzZQogICAgICAgIF9fbGVuID0gX19iYXNlOwoKCiAgICAg
IGNoYXJfdHlwZSBfX3dhdG9tc1tfTV9zaXplXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9t
cywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBzdHJpbmcgX19mb3VuZF9ncm91
cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAg
ICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQg
X19zZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2Fu
ZHNfc2VwKCk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIF9f
bGVuLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2Ms
IGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1Nf
YXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg
ICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkgJiYg
X19jaGVja19ncm91cGluZykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2Vw
X3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGlu
ZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3Nl
cF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAg
ICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9f
Zm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3Vw
aW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVy
aWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBf
X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNo
YXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
Ojplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJv
b2wmIF9fdikgY29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl
Ojpib29sYWxwaGEpKQogICAgICAgIHsKCgogICAgICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg
ICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCiAgICAgICAgICB1bnNpZ25lZCBs
b25nIF9fdWw7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwg
X19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3Nf
YmFzZTo6ZmFpbGJpdCkgJiYgX191bCA8PSAxKQogICAgICAgICAgICBfX3YgPSBfX3VsOwogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg
ICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8
X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51
bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9f
dHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX19m
YWxzZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1
ZXMgPSBfX3RydWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZXMg
PSBfX2ZhbHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbiA9IF9fdHJ1
ZS5zaXplKCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFsc2VuID0gX19mYWxzZS5z
aXplKCkgLSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5k
OyArK19fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19i
ZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX24gPD0gX19mYWxzZW4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19mYWxzZXNb
X19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHQgPSBfX24gPD0gX190cnVl
bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf
X3RydWVzW19fbl0pIDogZmFsc2U7CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rl
c3R0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYm
IF9fbiA9PSBfX3RydWVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3Yg
PSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZW9mYml0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog
ICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7
CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihf
X3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJl
dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv
X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBj
b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBf
X2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywg
X19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihf
X3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBp
ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAg
ICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5k
LCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7
CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19s
b2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg
ICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQog
ICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX191bCk7CiAgICAgIGVsc2UK
ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAg
ICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRy
YWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAg
IF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwg
X19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n
IGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9f
YmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigp
LCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAg
ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9N
X2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsK
ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j
YWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRy
Yy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0
cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9f
eHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf
ZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0
X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0
dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f
Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAg
ICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
eHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBf
U19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2
b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
Zm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRm
bGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVs
ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlv
c19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAo
aW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKICAgICAgc3RyaW5nIF9feHRy
YzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgoKICAgICAgX19pby5mbGFncyhf
X2ZtdCk7CgogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9f
eHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQogICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2MTggIi91c3IvbG9jYWwvdm9s
L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p
bywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBfVmFs
dWVUIF9fdikgY29uc3QKICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9
IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAgICAgc3RyZWFtc2l6
ZSBfX3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGlj
X2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRp
Y19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1Zlsx
Nl07CgoKICAgICAgICBpbnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4
X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1
aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19m
b3JtYXRfZmxvYXQoX19pbywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19m
cCkKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9f
ZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxl
LCBfX3ByZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21f
dihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBp
ZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUg
PSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWls
dGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAg
ICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3Ys
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3By
ZWMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJv
bV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2ODEgIi91c3IvbG9j
YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMK
ICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9f
bGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVy
IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgog
ICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1
ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgICAg
Y2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6
ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXpl
LCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Nf
bG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAg
ICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIF9f
bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAg
fQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f
Y3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9f
ZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAg
IHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgoKICAg
ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8
X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4g
KiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgog
ICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19u
cCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpZiAoX19wID0g
X190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkKICAg
ICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgoKCgogICAgICBj
b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgaW9zX2Jhc2U6
OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs
ZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFy
VCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAtIF9fd3MgOiBfX2xl
bjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91c2FuZHNf
c2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9f
Z3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9f
d3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3AyIC0gX193czI7CgoK
ICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RyYWl0c190
eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAgICAgICAgICAgX19u
ZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBfX3dz
ID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAgIH0KCiAgICAgIHJl
dHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2ludChfT3V0SXRl
ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAg
ICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25zdCBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFyVCogX193cyA9IHN0
YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9f
bGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp
bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICAgX19jdHlw
ZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0IG51bXB1bmN0
PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGNvbnN0
IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl
OjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgoKCiAg
ICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkg
JiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3Nf
YmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAg
ICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsK
ICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAg
IH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmco
X193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAg
IF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwog
ICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQo
X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJU
KiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl
ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9f
dyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYg
KF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAg
ICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dz
MiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cp
OwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7
CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAg
ICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAg
IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9f
ZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9f
cywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmlu
Z190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAg
IGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJU
PiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYg
KF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0g
X01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUo
KSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZl
cnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51
bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192
KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1
JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGws
IGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9f
YiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7
IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNv
bnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFy
KCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0
KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAg
ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJh
c2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVw
cGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAm
IF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5
CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2Zp
bGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFn
cyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8u
ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBf
X3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf
X3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcg
PSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7
CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdp
dHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs
b2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg
ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAg
ICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCks
IF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19s
b2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVm
IG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9u
ZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5
X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6
ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90
cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0
PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlw
ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlf
YmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7
CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3Np
dGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
X19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWdu
ID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBj
aGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7
CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n
KCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAg
IHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAg
Ym9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFs
c2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9f
YyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl
PihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7
IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAg
IHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtf
X2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAo
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8
fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAo
KHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAg
ewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9
IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBf
X2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAg
ICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9z
X2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYg
KF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAg
ICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nf
c2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdf
c2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
X19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9
PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
X19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAg
ICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6
dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNm
b3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91
cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz
dGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19n
cm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19z
ZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAg
ICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAh
PSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQog
ICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6
ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6
ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9
IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9
IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlk
ID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19j
dHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMu
YmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2ln
bikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0
eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3Vw
aW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGlu
ZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0g
ZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBf
dW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBl
bHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg
X19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAg
IGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9D
aGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAg
ICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252
ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+
PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwog
ICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nf
c2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6
ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3Np
emUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAg
ICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChf
X3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlf
cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qg
c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jh
c2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihf
X2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9f
bW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9u
ZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19t
b25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNl
X2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25z
dCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBh
dHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0g
X19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f
bXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9
X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwog
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f
bXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9
X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog
ICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5f
bm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0g
X19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAg
ICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1i
b2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAg
IGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAg
ICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hh
cl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAg
ICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMs
IF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp
LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg
ICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAg
IGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAg
ICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAg
ICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAg
ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAg
ICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm
Lmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2lu
dGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwog
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAg
ICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwog
ICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIs
IF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFs
dWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJp
bmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwog
ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgp
OwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkg
PyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09
IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAo
aW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
cGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAg
ICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFn
cygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9f
c3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9u
ZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAg
ICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAg
ICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYg
KF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193
aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAg
ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry
aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWdu
LnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdp
bigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7
CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBl
bmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAg
ICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2Zp
bGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAg
ICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykK
ICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRo
KDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVf
Z2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4g
dGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0
bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8
X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3Qg
X19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9y
IChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJy
OyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAg
ICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2Mg
PSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAg
ICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2Mg
PT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsK
ICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3Nb
MTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJy
ZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVn
LCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlz
Mls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAg
ICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2Rh
eXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAg
ICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz
MVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9u
dGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9f
dG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl
ICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsK
ICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAg
ICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRo
czIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9N
X2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3Zp
YV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9
ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr
IDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l
bmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywg
X19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl
ZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAg
ICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4
dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAo
X19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsr
X19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAg
ICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAg
ICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAs
IDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAg
ICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAg
ICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVI
OiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwg
X193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj
YXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsK
ICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1sw
XSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6Cgog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAg
ICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAg
ICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwg
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAg
ICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0g
X19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh
c2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBw
ZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
aW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf
X2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1l
cHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBf
X2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09
IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0n
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbign
KycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwg
NTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUs
IF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg
ICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
dm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShp
dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAg
ICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kg
PSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVl
OwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19l
bmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6
ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJy
b3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsK
ICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50
IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9
IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3Zh
bHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICgh
X190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAog
ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90
eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg
IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9f
bWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkg
KiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90
IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZv
ciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlm
IChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVz
KytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAg
ICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAw
OyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihf
X21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlu
bGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6
ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAg
ICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAg
ICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsK
ICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAg
ICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3Qg
X19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChf
X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVn
KQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBf
X3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAg
IGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv
YygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9f
d2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt
ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193
Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2Mg
PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg
X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj
b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlh
dGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShf
X2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBp
ZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5
cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19k
YXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2Rh
eV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsK
CiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0g
X19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg
ICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAh
PSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5
ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK
ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7
CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv
bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJy
ZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9u
YW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoK
ICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3Ry
YWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01f
bW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19t
b250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQog
ICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRz
X3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVu
ICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10g
PT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAg
ICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6
ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAg
X190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9f
ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVh
cihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxf
Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAg
ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3Ry
aW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBf
X2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9f
ZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19p
ID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRf
dG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAg
ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0g
MTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGlt
ZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl
JiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCog
X19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9f
ZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVn
LCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBf
X21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBf
X2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAg
ICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9y
bWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2Jl
ZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf
X2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lv
LCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxf
Q2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
aW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwg
Y2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo
KTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0g
dXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNp
emVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0
aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICog
X19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFsw
XSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAg
ICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUo
KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9f
bW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0g
Y2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVu
LCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90
eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19s
ZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJu
IF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNv
bGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBj
b25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
c2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBf
Q2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUo
Y29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3Ry
aW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19v
bmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0
ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D
aGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xv
KSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBf
X3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+
PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2Fz
dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkp
KTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAg
fQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25z
dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5z
aWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQog
ICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAg
ICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3
KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBj
aGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg
ICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3Yo
Y2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAg
ICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0x
KQogICAgewogICAgICBpbnQgX19yZXQ7CiAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxv
Y2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FMTCwgIkMiKTsK
ICAgICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9f
c2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25w
cmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiAgICAgIHNldGxvY2FsZShfX0xDX0FM
TCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xkKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoj
IDIwMTkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl
X2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfcGFk
KGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAg
ICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2
b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9D
aGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiBf
X25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSkK
ICAgIHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4g
LSBfX29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJhaXRz
Ojphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVnOwog
ICAgICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3Qg
X19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3Mo
KSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFz
ZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+
KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQg
PSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6
aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBf
X21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fcGx1
cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9UcmFp
dHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsKCiAgICAgICAgICBib29sIF9fdGVzdGhl
eCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29s
ZHNbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX2N0
eXBlLndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAg
ICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAg
ICAgICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAg
ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0
X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlIGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0czo6
ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwog
ICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAg
ICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAg
ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9f
YmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAg
ICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwog
ICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8
X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBf
X2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBf
X2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19t
b2QpOwogICAgfQojIDIxMTQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBib29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYg
X19ncm91cGluZywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBf
X2dyb3VwaW5nX3RtcCkKICAgIHsKICAgICAgaW50IF9faSA9IDA7CiAgICAgIGludCBfX2ogPSAw
OwogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgY29uc3Qg
aW50IF9fbiA9IF9fZ3JvdXBpbmdfdG1wLnNpemUoKTsKICAgICAgYm9vbCBfX3Rlc3QgPSB0cnVl
OwoKCgoKICAgICAgd2hpbGUgKF9fdGVzdCAmJiBfX2kgPCBfX24gLSAxKQogICAgICAgIGZvciAo
X19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9faSA8IF9fbiAtIDE7ICsrX19qLCsr
X19pKQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBfX2dyb3VwaW5nX3Rt
cFtfX24gLSBfX2kgLSAxXTsKCgogICAgICBfX2ogPT0gX19sZW4gPyBfX2ogPSAwIDogX19qOwog
ICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID49IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9f
aSAtIDFdOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBf
Q2hhclQgX19zZXAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcsIGNvbnN0
IGNoYXIqIF9fZ2VuZCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19maXJzdCwg
Y29uc3QgX0NoYXJUKiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4g
Kl9fZ2JlZykKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9f
c2VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZ2JlZyArIDEgPT0gX19nZW5k
ID8gX19nYmVnIDogX19nYmVnICsgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2dlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2diZWcpOwogICAgICAgICAgX19maXJzdCA9IF9f
bGFzdCAtICpfX2diZWc7CiAgICAgICAgICAqX19zKysgPSBfX3NlcDsKICAgICAgICB9CiAgICAg
IGRvCiAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25l
eXB1bmN0PGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5
bmFtZTxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnlu
YW1lPGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8Y2hhcj47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1v
bmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IG1vbmV5X2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PHdj
aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBudW1fZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PHdj
aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIHRpbWVfcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1l
X3B1dF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PHdj
aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8d2NoYXJfdD47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1l
c3NhZ2VzPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29s
bGF0ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2No
YXJfdD47CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBt
YnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hh
cj4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1
bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
bnVtX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9m
YWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0
PGNoYXIsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u
c3QgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFy
LCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBt
b25leV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAg
dXNlX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt
cGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1
bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
dGltZV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVz
ZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IG1lc3NhZ2VzPGNoYXI+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDx3
Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwg
Y2hhciwgbWJzdGF0ZV90PiA+KGxvY2FsZSBjb25zdCYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IGNvbGxhdGU8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PHdj
aGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9m
YWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgbnVtX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFy
X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlw
dW5jdDx3Y2hhcl90LCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIHRy
dWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlw
dW5jdDx3Y2hhcl90LCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCBm
YWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25l
eV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PHdjaGFyX3Q+
JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2Zh
Y2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w
bGF0ZQogICAgY29uc3QgdGltZV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8
d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0
aW1lX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPHdjaGFyX3Q+
JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2Rl
Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDxj
aGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhh
c19mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFy
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PGNo
YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz
X2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8Y3R5cGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0
PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog
ICAgaGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl
dDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdlczx3Y2hh
cl90PiA+KGNvbnN0IGxvY2FsZSYpOwp9CiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2xvY2FsZSIgMiAzCiMgMzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3Mp
CiAgICB7CgogICAgICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgp
LT5mbHVzaCgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpf
X3BmKShfX29zdHJlYW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBf
X3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgq
X19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3Bm
KCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYp
KGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMp
OyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zYmlu
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KCFfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1ZigpKSkKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICgh
X19zYmluKQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp
cywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I8PChsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19i
YXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk
OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpo
ZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAg
ICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5m
YWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2Ms
IF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1
dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYg
aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAo
X19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAg
X19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAg
ICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZh
aWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywg
X19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0
LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0
KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlz
LT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8
KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBp
ZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl
ZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgq
dGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9
IHJkYnVmKCktPnNwdXRjKF9fYyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKF9fcHV0LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+Ojp3cml0ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHN0cmVhbXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAg
ICAgICAgICBpZiAoIF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
Zmx1c2goKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1Zigp
LT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OnRlbGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgt
MSk7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYo
KS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAg
aWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9
IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAg
ICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vl
a2RpciBfX2QpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAg
ICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBf
X2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlw
ZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7Cgog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0
LCBfQ2hhclQgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNl
bnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53
aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJU
Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAg
ICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0g
MTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQu
ZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmX19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVu
ID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFk
cywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsK
ICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQu
d2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
X19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19j
OwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChf
X3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hh
ciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwg
ZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBf
X291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFt
X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNp
emUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0
YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cp
KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRz
Pjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwog
ICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g
X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19s
ZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291
dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAg
ICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAg
IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoK
CgogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0
eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf
X2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0
c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0
PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkp
KTsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAg
ICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9D
aGFyVCogX19zdHIgPSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
ICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9j
YShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4p
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0
cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgIF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xl
biA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0
ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3Mp
CiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBf
X291dDsKICAgIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3Mp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0
aChfX3MpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBf
X291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBf
X3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAg
IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRl
ZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5
cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEo
KTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgIF9D
aGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19j
YXN0PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7CgoKCiAgICAgICAgICBpZiAoX193ID4gX19s
ZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+Ojpf
U19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAg
ICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg
IH0KICAgICAgICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3Ms
IF9fbGVuKTsKICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9
IF9fbGVuKQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBiYXNpY19vc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRs
KG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh
dGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRl
IG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0
ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0
ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsK
ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5z
aWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJl
YW0mLCBjb25zdCBzaWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2lj
X29zdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRsKHdvc3Ry
ZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRzKHdvc3RyZWFtJik7CiAgZXh0
ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBmbHVzaCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0
ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1w
bGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1w
bGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IHdjaGFyX3QqKTsKICBl
eHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjaGFy
Kik7Cgp9CiMgMjc2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9vc3Ry
ZWFtIiAyIDMKIyA3MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRl
cmF0b3IiIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2lz
dHJlYW0iIDEgMwojIDQzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9p
c3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVi
bGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5
cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2Zm
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAg
IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1
Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4g
X19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK
CiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXplIF9NX2djb3VudDsKCiAgICBwdWJsaWM6
CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9fc2IpOwogICAgICAgIF9NX2djb3VudCA9
IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lzdHJl
YW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0KCgogICAgICBjbGFzcyBz
ZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBl
JikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYg
KCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgaW5saW5lIHN0
cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2djb3Vu
dDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p
OwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24sIHRoaXMt
PndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVh
bWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7IHJldHVy
biB0aGlzLT5nZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJf
dHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGlu
ZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdl
dGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0
cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFy
X3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAg
ICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9p
ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBl
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19pbnRfdHlw
ZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJhdG9yIGJv
b2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01fb2s7CiAg
ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xh
c3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9f
YykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBz
aWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVt
cGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBj
aGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihf
X3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy
LF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9f
aW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9j
YXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAg
ICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsg
fQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faXMpOwp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9pc3RyZWFtLnRjYyIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAo
X19pbi5nb29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAg
ICAgIF9faW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9f
aW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAg
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAg
IF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9faW4u
X01fY2hlY2tfZmFjZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAgd2hpbGUgKCF0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAg
ICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo
X19jKSkpCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAg
ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAg
ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQog
ICAgICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19p
bi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAg
ewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAg
X19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9
IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25n
IF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsK
CgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAg
ICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQog
ICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1
bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0
YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0
aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg
ICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp
cywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
YWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkg
PD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0
aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg
ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u
KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N
X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l
cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxv
bmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg
X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6
Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f
ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv
cj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAg
dHJ5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7
CiAgICAgICAgICAgICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAg
ICAgICAgICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2Jpbiwg
X19zYm91dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQg
fHwgIV9feHRyY3QpCiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRy
YWl0c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2dj
b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRz
X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX01fZ2NvdW50
ID0gMTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50
X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUg
X19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19j
ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k
ZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3Ni
LT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAg
ICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
CiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBf
X2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRy
YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19z
Yi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2Vv
ZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAq
X19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAg
ewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2lu
dF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh
aXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19z
YiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3Ni
LT5zZ2V0YygpOwogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRzX3R5cGU6OnRv
X2NoYXJfdHlwZShfX2MpOwoKICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAg
X19jID0gX190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0
c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
biwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p
ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAg
Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAg
X19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50
X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3Vu
dCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3Vu
dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQog
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygp
OwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5
cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUo
c3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9
IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYm
IF9fbiA+IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAg
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAg
ICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBfX24gPSBtaW4o
X19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdo
aWxlIChfTV9nY291bnQgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBl
OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRz
X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19N
X2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAodHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fZ2NvdW50
ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAgICAgICAgICAgIGlmIChfTV9n
Y291bnQgIT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv
ZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRo
aXMtPnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID4gMCkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7
CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291
bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFy
X3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAg
ICAgIGlmICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5
cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVu
Z2V0KHZvaWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt
PnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAg
ewogICAgICBpbnQgX19yZXQgPSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6cG9zX3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxs
Zyh2b2lkKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAg
X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBp
b3NfYmFzZTo6aW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3Nf
dHlwZSBfX3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRi
dWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlm
IChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7
CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYo
X19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09
IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2luLCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4u
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5
cGVfdHlwZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAg
ICAgc3RyZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19u
dW0gPT0gMCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6
ZT46Om1heCgpOwoKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgICAgICBjb25z
dCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19j
ID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19u
dW0gLSAxCiAgICAgICAgICAgICAgICAgICAgICYmIF9fYyAhPSBfX2VvZiAmJiAhX19jdHlwZS5p
cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgKl9fcysrID0gX19jOwogICAgICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAg
ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0
ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7
CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAg
X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt
X3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAg
ICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+
KF9faW4uZ2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6
ZW9mKCk7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAg
IF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgIHdoaWxlIChfX2MgIT0gX19l
b2YgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICBfX2MgPSBf
X3NiLT5zbmV4dGMoKTsKICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICBfX2luLnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1i
dWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90
eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJp
bmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJh
Y3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf
X2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIu
ZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAgICAg
ICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0
PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBjb25zdCBf
X2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxv
YygpKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsK
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg
ICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0
cmFjdGVkIDwgX19uCiAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBl
LmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4
dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAg
fQogICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAg
ICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZh
aWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f
Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlw
ZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQg
PSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBf
X24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBf
VHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq
IF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNi
dW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp
OwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRl
bGltKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uCiAgICAgICAgICAgICAg
ICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAg
JiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1Ry
YWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAg
ICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3RkZWxp
bSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwogICAgICAgICAgICB9CiAg
ICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9f
ZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9D
aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJl
YW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs
b2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4o
J1xuJykpOyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBs
YXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXImKTsKICBleHRlcm4gdGVtcGxh
dGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0
ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CiAgZXh0ZXJu
IHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyJik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNo
YXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2ln
bmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFy
X3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4g
dGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0
ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwoK
fQojIDI5OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIg
MiAzCiMgNzIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9y
IiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
cmVhbV9pdGVyYXRvci5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdHJlYW1faXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQgPSBjaGFyLAogICAgICAgICAgIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LCB0eXBlbmFtZSBfRGlzdCA9IHB0
cmRpZmZfdD4KICAgIGNsYXNzIGlzdHJlYW1faXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0
b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0LCBjb25zdCBfVHAqLCBjb25zdCBfVHAm
PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIGlzdHJl
YW1fdHlwZSogX01fc3RyZWFtOwogICAgICBfVHAgX01fdmFsdWU7CiAgICAgIGJvb2wgX01fb2s7
CgogICAgcHVibGljOgogICAgICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oMCksIF9N
X29rKGZhbHNlKSB7fQoKICAgICAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykg
OiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KCiAgICAgIGlzdHJlYW1faXRlcmF0b3Io
Y29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX19vYmopCiAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9N
X3N0cmVhbSksIF9NX3ZhbHVlKF9fb2JqLl9NX3ZhbHVlKSwKICAgICAgICBfTV9vayhfX29iai5f
TV9vaykKICAgICAgeyB9CgogICAgICBjb25zdCBfVHAmCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogICAgICBjb25zdCBfVHAqCiAgICAgIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgaXN0cmVhbV9pdGVyYXRv
ciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsgX01fcmVhZCgpOyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIGlzdHJlYW1faXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg
ICAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01fcmVhZCgpOwog
ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9lcXVhbChj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0CiAgICAgIHsgcmV0dXJuIChfTV9vayA9
PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0pO30K
CiAgICBwcml2YXRlOgogICAgICB2b2lkCiAgICAgIF9NX3JlYWQoKQogICAgICB7CiAgICAgICAg
X01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgICAg
IGlmIChfTV9vaykKICAgICAgICAgIHsKICAgICAgICAgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1
ZTsKICAgICAgICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOwogICAgICAg
ICAgfQogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRz
LCBfRGlzdD4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fZXF1YWwo
X195KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp
dHMsIGNsYXNzIF9EaXN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0
cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAg
ICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0
PiYgX195KQogICAgeyByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNoYXIsCiAgICAgICAgICAgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRv
cgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lk
LCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6
CiAgICAgIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3N0
cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBf
X3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KCiAgICAgIG9zdHJlYW1faXRl
cmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQogICAgICA6IF9NX3N0
cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykgeyB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNv
bnN0IG9zdHJlYW1faXRlcmF0b3ImIF9fb2JqKQogICAgICA6IF9NX3N0cmVhbShfX29iai5fTV9z
dHJlYW0pLCBfTV9zdHJpbmcoX19vYmouX01fc3RyaW5nKSB7IH0KCiAgICAgIG9zdHJlYW1faXRl
cmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpCiAgICAgIHsKICAgICAg
ICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICAgICAgaWYgKF9NX3N0cmluZykgKl9NX3N0cmVh
bSA8PCBfTV9zdHJpbmc7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBvc3Ry
ZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAg
b3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo
aXM7IH0KICAgIH07Cn0KIyA3MyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z
LjIvaXRlcmF0b3IiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC9pdGVyYXRvci5ocHAiIDIgMwoKCgpuYW1lc3BhY2UgYm9vc3QKewojIDQwICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvci5ocHAiIDMKICBuYW1lc3BhY2UgZGV0
YWlsIHsKICAgdGVtcGxhdGUgPGNsYXNzIENhdGVnb3J5LCBjbGFzcyBULCBjbGFzcyBEaXN0YW5j
ZSwgY2xhc3MgUG9pbnRlciwgY2xhc3MgUmVmZXJlbmNlPgoKICAgc3RydWN0IGl0ZXJhdG9yX2Jh
c2UgOiBzdGQ6Oml0ZXJhdG9yPENhdGVnb3J5LCBULCBEaXN0YW5jZSwgUG9pbnRlciwgUmVmZXJl
bmNlPiB7fTsKIyA1MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvaXRlcmF0
b3IuaHBwIiAzCiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2F0ZWdvcnksIGNsYXNzIFQsIGNsYXNz
IERpc3RhbmNlID0gc3RkOjpwdHJkaWZmX3QsCiAgICAgICAgICAgIGNsYXNzIFBvaW50ZXIgPSBU
KiwgY2xhc3MgUmVmZXJlbmNlID0gVCY+CiAgIHN0cnVjdCBpdGVyYXRvciA6IGRldGFpbDo6aXRl
cmF0b3JfYmFzZTxDYXRlZ29yeSwgVCwgRGlzdGFuY2UsIFBvaW50ZXIsIFJlZmVyZW5jZT4ge307
Cgp9CiMgNjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9pdGVy
YXRvci5ocHAiIDIgMwojIDg5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9k
ZXRhaWwvaXRlcmF0b3IuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBkZXRhaWwg
ewoKdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CnVzaW5nIHN0ZDo6ZGlzdGFuY2U7CiMgMzgw
ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBw
IiAzCn19CiMgMjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2FycmF5Lmhw
cCIgMiAzCgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBULCBzdGQ6
OnNpemVfdCBOPgogICAgY2xhc3MgYXJyYXkgewogICAgICBwdWJsaWM6CiAgICAgICAgVCBlbGVt
c1tOXTsKCiAgICAgIHB1YmxpYzoKCiAgICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAg
ICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKICAgICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0
ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwogICAgICAgIHR5cGVkZWYgY29u
c3QgVCYgY29uc3RfcmVmZXJlbmNlOwogICAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3Qgc2l6ZV90
eXBlOwogICAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCiAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBlbGVtczsgfQogICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZWxlbXM7IH0KICAgICAgICBpdGVyYXRvciBl
bmQoKSB7IHJldHVybiBlbGVtcytOOyB9CiAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gZWxlbXMrTjsgfQoKCgogICAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0
ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgc3RkOjpy
ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwoj
IDcxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9hcnJheS5ocHAiIDMKICAg
ICAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io
ZW5kKCkpOyB9CiAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7
CiAgICAgICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgICAg
ICB9CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcihiZWdpbigpKTsgfQogICAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNv
bnN0IHsKICAgICAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7
CiAgICAgICAgfQoKCiAgICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIGkpIHsg
cmV0dXJuIGVsZW1zW2ldOyB9CiAgICAgICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6
ZV90eXBlIGkpIGNvbnN0IHsgcmV0dXJuIGVsZW1zW2ldOyB9CgoKICAgICAgICByZWZlcmVuY2Ug
YXQoc2l6ZV90eXBlIGkpIHsgcmFuZ2VjaGVjayhpKTsgcmV0dXJuIGVsZW1zW2ldOyB9CiAgICAg
ICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBpKSBjb25zdCB7IHJhbmdlY2hlY2soaSk7
IHJldHVybiBlbGVtc1tpXTsgfQoKCiAgICAgICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4g
ZWxlbXNbMF07IH0KICAgICAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVy
biBlbGVtc1swXTsgfQogICAgICAgIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gZWxlbXNbTi0x
XTsgfQogICAgICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gZWxlbXNb
Ti0xXTsgfQoKCiAgICAgICAgc3RhdGljIHNpemVfdHlwZSBzaXplKCkgeyByZXR1cm4gTjsgfQog
ICAgICAgIHN0YXRpYyBib29sIGVtcHR5KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICBzdGF0
aWMgc2l6ZV90eXBlIG1heF9zaXplKCkgeyByZXR1cm4gTjsgfQogICAgICAgIGVudW0geyBzdGF0
aWNfc2l6ZSA9IE4gfTsKCgogICAgICAgIHZvaWQgc3dhcCAoYXJyYXk8VCxOPiYgeSkgewogICAg
ICAgICAgICBzdGQ6OnN3YXBfcmFuZ2VzKGJlZ2luKCksZW5kKCkseS5iZWdpbigpKTsKICAgICAg
ICB9CgoKICAgICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gZWxlbXM7IH0KCgog
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMj4KICAgICAgICBhcnJheTxULE4+JiBvcGVyYXRv
cj0gKGNvbnN0IGFycmF5PFQyLE4+JiByaHMpIHsKICAgICAgICAgICAgc3RkOjpjb3B5KHJocy5i
ZWdpbigpLHJocy5lbmQoKSwgYmVnaW4oKSk7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgICB9CgoKICAgICAgICB2b2lkIGFzc2lnbiAoY29uc3QgVCYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBzdGQ6OmZpbGxfbihiZWdpbigpLHNpemUoKSx2YWx1ZSk7CiAgICAgICAgfQoK
CiAgICAgIHByaXZhdGU6CgoKICAgICAgICBzdGF0aWMgdm9pZCByYW5nZWNoZWNrIChzaXplX3R5
cGUgaSkgewogICAgICAgICAgICBpZiAoaSA+PSBzaXplKCkpIHsgdGhyb3cgc3RkOjpyYW5nZV9l
cnJvcigiYXJyYXkiKTsgfQogICAgICAgIH0KCiAgICB9OwoKCiAgICB0ZW1wbGF0ZTxjbGFzcyBU
LCBzdGQ6OnNpemVfdCBOPgogICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBhcnJheTxULE4+JiB4
LCBjb25zdCBhcnJheTxULE4+JiB5KSB7CiAgICAgICAgcmV0dXJuIHN0ZDo6ZXF1YWwoeC5iZWdp
bigpLCB4LmVuZCgpLCB5LmJlZ2luKCkpOwogICAgfQogICAgdGVtcGxhdGU8Y2xhc3MgVCwgc3Rk
OjpzaXplX3QgTj4KICAgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBhcnJheTxULE4+JiB4LCBjb25z
dCBhcnJheTxULE4+JiB5KSB7CiAgICAgICAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoeC5iZWdpbigpLHguZW5kKCkseS5iZWdpbigpLHkuZW5kKCkpOwogICAgfQogICAgdGVt
cGxhdGU8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KICAgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3Qg
YXJyYXk8VCxOPiYgeCwgY29uc3QgYXJyYXk8VCxOPiYgeSkgewogICAgICAgIHJldHVybiAhKHg9
PXkpOwogICAgfQogICAgdGVtcGxhdGU8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KICAgIGJvb2wg
b3BlcmF0b3I+IChjb25zdCBhcnJheTxULE4+JiB4LCBjb25zdCBhcnJheTxULE4+JiB5KSB7CiAg
ICAgICAgcmV0dXJuIHk8eDsKICAgIH0KICAgIHRlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6c2l6ZV90
IE4+CiAgICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IGFycmF5PFQsTj4mIHgsIGNvbnN0IGFycmF5
PFQsTj4mIHkpIHsKICAgICAgICByZXR1cm4gISh5PHgpOwogICAgfQogICAgdGVtcGxhdGU8Y2xh
c3MgVCwgc3RkOjpzaXplX3QgTj4KICAgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgYXJyYXk8VCxO
PiYgeCwgY29uc3QgYXJyYXk8VCxOPiYgeSkgewogICAgICAgIHJldHVybiAhKHg8eSk7CiAgICB9
CgoKICAgIHRlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+CiAgICBpbmxpbmUgdm9pZCBz
d2FwIChhcnJheTxULE4+JiB4LCBhcnJheTxULE4+JiB5KSB7CiAgICAgICAgeC5zd2FwKHkpOwog
ICAgfQoKfQojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9h
cnJheS9yYW5nZV9saXN0LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgZGV0
YWlsIHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCgoKCgpzdHJ1Y3QgY2hvb3NlX3JhbmdlX2xp
c3RfbiB7CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bVJhbmdlcz4KICBz
dHJ1Y3QgYmluZCB7CiAgICB0eXBlZGVmIGJvb3N0OjphcnJheTxULE51bVJhbmdlcz4gdHlwZTsK
ICB9Owp9OwoKc3RydWN0IGNob29zZV9yYW5nZV9saXN0X3plcm8gewogIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCBzdGQ6OnNpemVfdCBOdW1SYW5nZXM+CiAgc3RydWN0IGJpbmQgewogICAgdHlwZWRl
ZiBib29zdDo6YXJyYXk8VCwxPiB0eXBlOwogIH07Cn07CgoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IE51bVJhbmdlcz4Kc3RydWN0IHJhbmdlX2xpc3RfZ2VuX2hlbHBlciB7CiAgdHlwZWRlZiBjaG9v
c2VfcmFuZ2VfbGlzdF9uIGNob2ljZTsKfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCByYW5nZV9saXN0
X2dlbl9oZWxwZXI8MD4gewogIHR5cGVkZWYgY2hvb3NlX3JhbmdlX2xpc3RfemVybyBjaG9pY2U7
Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtUmFuZ2VzPgpzdHJ1Y3Qg
cmFuZ2VfbGlzdF9nZW5lcmF0b3Igewpwcml2YXRlOgogIHR5cGVkZWYgdHlwZW5hbWUgcmFuZ2Vf
bGlzdF9nZW5faGVscGVyPE51bVJhbmdlcz46OmNob2ljZSBDaG9pY2U7CnB1YmxpYzoKICB0eXBl
ZGVmIHR5cGVuYW1lIENob2ljZTo6dGVtcGxhdGUgYmluZDxULE51bVJhbmdlcz46OnR5cGUgdHlw
ZTsKfTsKCgoKCgp9Cn0KfQojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC9tdWx0aV9hcnJheS9leHRlbnRfZ2VuLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdHlwZXMuaHBwIiAxIDMKIyAyMiAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdHlwZXMuaHBwIiAzCm5h
bWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXl7
CgoKdHlwZWRlZiBzdGQ6OnNpemVfdCBzaXplX3R5cGU7CnR5cGVkZWYgaW50IGluZGV4OwoKfQp9
Cn0KIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv
ZXh0ZW50X2dlbi5ocHAiIDIgMwoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgZGV0YWls
IHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTnVtUmFu
Z2VzPgpjbGFzcyBleHRlbnRfZ2VuIHsKcHVibGljOgogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6
bXVsdGlfYXJyYXk6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlf
YXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CnByaXZhdGU6CiAgdHlwZWRlZiBleHRlbnRfcmFu
Z2U8aW5kZXgsc2l6ZV90eXBlPiByYW5nZTsKICB0eXBlZGVmIHR5cGVuYW1lIHJhbmdlX2xpc3Rf
Z2VuZXJhdG9yPHJhbmdlLE51bVJhbmdlcz46OnR5cGUgcmFuZ2VfbGlzdDsKcHVibGljOgogIHRl
bXBsYXRlIDxzdGQ6OnNpemVfdCBSYW5nZXM+CiAgc3RydWN0IGdlbl90eXBlIHsKICAgIHR5cGVk
ZWYgZXh0ZW50X2dlbjxSYW5nZXM+IHR5cGU7CiAgfTsKCiAgcmFuZ2VfbGlzdCByYW5nZXNfOwoK
ICBleHRlbnRfZ2VuKCkgeyB9CgoKICBleHRlbnRfZ2VuKGNvbnN0IGV4dGVudF9nZW48TnVtUmFu
Z2VzLTE+JiByaHMsCiAgICAgICAgICAgIGNvbnN0IHJhbmdlJiBhX3JhbmdlKQogIHsKICAgIHN0
ZDo6Y29weShyaHMucmFuZ2VzXy5iZWdpbigpLHJocy5yYW5nZXNfLmVuZCgpLHJhbmdlc18uYmVn
aW4oKSk7CiAgICAqcmFuZ2VzXy5yYmVnaW4oKSA9IGFfcmFuZ2U7CiAgfQoKICBleHRlbnRfZ2Vu
PE51bVJhbmdlcysxPgogIG9wZXJhdG9yW10oY29uc3QgcmFuZ2UmIGFfcmFuZ2UpCiAgewogICAg
cmV0dXJuIGV4dGVudF9nZW48TnVtUmFuZ2VzKzE+KCp0aGlzLGFfcmFuZ2UpOwogIH0KCiAgZXh0
ZW50X2dlbjxOdW1SYW5nZXMrMT4KICBvcGVyYXRvcltdKGluZGV4IGlkeCkKICB7CiAgICByZXR1
cm4gZXh0ZW50X2dlbjxOdW1SYW5nZXMrMT4oKnRoaXMscmFuZ2UoMCxpZHgpKTsKICB9CgogIHN0
YXRpYyBleHRlbnRfZ2VuPDA+IGV4dGVudHMoKSB7CiAgICByZXR1cm4gZXh0ZW50X2dlbjwwPigp
OwogIH0KfTsKCn0KfQp9CiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L211bHRpX2FycmF5L2Jhc2UuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC9tdWx0aV9hcnJheS9pbmRleF9yYW5nZS5ocHAiIDEgMwojIDE4ICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9pbmRleF9yYW5nZS5ocHAi
IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9saW1pdHMuaHBwIiAx
IDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv
aW5kZXhfcmFuZ2UuaHBwIiAyIDMKIyAyOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvbXVsdGlfYXJyYXkvaW5kZXhfcmFuZ2UuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cm5h
bWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXkgewoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXgsdHlwZW5hbWUgU2l6ZVR5cGU+CiAgY2xhc3MgaW5kZXhfcmFuZ2UgewogIHB1
YmxpYzoKICAgIHR5cGVkZWYgSW5kZXggaW5kZXg7CiAgICB0eXBlZGVmIFNpemVUeXBlIHNpemVf
dHlwZTsKCiAgICBpbmRleF9yYW5nZSgpCiAgICB7CiAgICAgIHN0YXJ0XyA9IGZyb21fc3RhcnQo
KTsKICAgICAgZmluaXNoXyA9IHRvX2VuZCgpOwogICAgICBzdHJpZGVfID0gMTsKICAgICAgZGVn
ZW5lcmF0ZV8gPSBmYWxzZTsKICAgIH0KCiAgICBleHBsaWNpdCBpbmRleF9yYW5nZShpbmRleCBw
b3MpCiAgICB7CiAgICAgIHN0YXJ0XyA9IHBvczsKICAgICAgZmluaXNoXyA9IHBvczsKICAgICAg
c3RyaWRlXyA9IDE7CiAgICAgIGRlZ2VuZXJhdGVfID0gdHJ1ZTsKICAgIH0KCiAgICBleHBsaWNp
dCBpbmRleF9yYW5nZShpbmRleCBzdGFydCwgaW5kZXggZmluaXNoLCBpbmRleCBzdHJpZGU9MSkK
ICAgICAgOiBzdGFydF8oc3RhcnQpLCBmaW5pc2hfKGZpbmlzaCksIHN0cmlkZV8oc3RyaWRlKSwK
ICAgICAgICBkZWdlbmVyYXRlXyhzdGFydF8gPT0gZmluaXNoXykKICAgIHsgfQoKCgogICAgaW5k
ZXhfcmFuZ2UmIHN0YXJ0KGluZGV4IHMpIHsKICAgICAgc3RhcnRfID0gczsKICAgICAgZGVnZW5l
cmF0ZV8gPSAoc3RhcnRfID09IGZpbmlzaF8pOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
ICAgaW5kZXhfcmFuZ2UmIGZpbmlzaChpbmRleCBmKSB7CiAgICAgIGZpbmlzaF8gPSBmOwogICAg
ICBkZWdlbmVyYXRlXyA9IChzdGFydF8gPT0gZmluaXNoXyk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgICBpbmRleF9yYW5nZSYgc3RyaWRlKGluZGV4IHMpIHsgc3RyaWRlXyA9IHM7IHJl
dHVybiAqdGhpczsgfQoKICAgIGluZGV4IHN0YXJ0KCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJu
IHN0YXJ0XzsKICAgIH0KCiAgICBpbmRleCBnZXRfc3RhcnQoaW5kZXggbG93X2luZGV4X3Jhbmdl
ID0gMCkgY29uc3QKICAgIHsKICAgICAgaWYgKHN0YXJ0XyA9PSBmcm9tX3N0YXJ0KCkpCiAgICAg
ICAgcmV0dXJuIGxvd19pbmRleF9yYW5nZTsKICAgICAgcmV0dXJuIHN0YXJ0XzsKICAgIH0KCiAg
ICBpbmRleCBmaW5pc2goKSBjb25zdAogICAgewogICAgICByZXR1cm4gZmluaXNoXzsKICAgIH0K
CiAgICBpbmRleCBnZXRfZmluaXNoKGluZGV4IGhpZ2hfaW5kZXhfcmFuZ2UgPSAwKSBjb25zdAog
ICAgewogICAgICBpZiAoZmluaXNoXyA9PSB0b19lbmQoKSkKICAgICAgICByZXR1cm4gaGlnaF9p
bmRleF9yYW5nZTsKICAgICAgcmV0dXJuIGZpbmlzaF87CiAgICB9CgogICAgc2l6ZV90eXBlIHNp
emUoaW5kZXggcmVjb21tZW5kZWRfbGVuZ3RoID0gMCkgY29uc3QKICAgIHsKICAgICAgaWYgKChz
dGFydF8gPT0gZnJvbV9zdGFydCgpKSB8fCAoZmluaXNoXyA9PSB0b19lbmQoKSkpCiAgICAgICAg
cmV0dXJuIHJlY29tbWVuZGVkX2xlbmd0aDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiAoZmlu
aXNoXyAtIHN0YXJ0XykgLyBzdHJpZGVfOwogICAgfQoKICAgIGluZGV4IHN0cmlkZSgpIGNvbnN0
IHsgcmV0dXJuIHN0cmlkZV87IH0KCiAgICBib29sIGlzX2FzY2VuZGluZ19jb250aWd1b3VzKCkg
Y29uc3QKICAgIHsKICAgICAgcmV0dXJuIChzdGFydF8gPCBmaW5pc2hfKSAmJiBpc191bml0X3N0
cmlkZSgpOwogICAgfQoKICAgIHZvaWQgc2V0X2luZGV4X3JhbmdlKGluZGV4IHN0YXJ0LCBpbmRl
eCBmaW5pc2gsIGluZGV4IHN0cmlkZT0xKQogICAgewogICAgICBzdGFydF8gPSBzdGFydDsKICAg
ICAgZmluaXNoXyA9IGZpbmlzaDsKICAgICAgc3RyaWRlXyA9IHN0cmlkZTsKICAgIH0KCiAgICBz
dGF0aWMgaW5kZXhfcmFuZ2UgYWxsKCkKICAgIHsgcmV0dXJuIGluZGV4X3JhbmdlKGZyb21fc3Rh
cnQoKSwgdG9fZW5kKCksIDEpOyB9CgogICAgYm9vbCBpc191bml0X3N0cmlkZSgpIGNvbnN0CiAg
ICB7IHJldHVybiBzdHJpZGVfID09IDE7IH0KCiAgICBib29sIGlzX2RlZ2VuZXJhdGUoKSBjb25z
dCB7IHJldHVybiBkZWdlbmVyYXRlXzsgfQoKICAgIGluZGV4X3JhbmdlIG9wZXJhdG9yLShpbmRl
eCBzaGlmdCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIGluZGV4X3JhbmdlKHN0YXJ0XyAtIHNo
aWZ0LCBmaW5pc2hfIC0gc2hpZnQsIHN0cmlkZV8pOwogICAgfQoKICAgIGluZGV4X3JhbmdlIG9w
ZXJhdG9yKyhpbmRleCBzaGlmdCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIGluZGV4X3Jhbmdl
KHN0YXJ0XyArIHNoaWZ0LCBmaW5pc2hfICsgc2hpZnQsIHN0cmlkZV8pOwogICAgfQoKICAgIGlu
ZGV4IG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHN0YXJ0
XyArIGkgKiBzdHJpZGVfOwogICAgfQoKICAgIGluZGV4IG9wZXJhdG9yKCkodW5zaWduZWQgaSkg
Y29uc3QKICAgIHsKICAgICAgcmV0dXJuIHN0YXJ0XyArIGkgKiBzdHJpZGVfOwogICAgfQoKCgog
IHByaXZhdGU6CiAgICBzdGF0aWMgaW5kZXggZnJvbV9zdGFydCgpCiAgICAgIHsgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8aW5kZXg+OjptaW4oKTsgfQoKICAgIHN0YXRpYyBpbmRleCB0b19l
bmQoKQogICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGluZGV4Pjo6bWF4KCk7IH0K
ICBwdWJsaWM6CiAgICBpbmRleCBzdGFydF8sIGZpbmlzaF8sIHN0cmlkZV87CiAgICBib29sIGRl
Z2VuZXJhdGVfOwogIH07CgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXgsIHR5cGVuYW1l
IFNpemVUeXBlPgogIGlubGluZSBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4KICBvcGVyYXRv
cjw9KEluZGV4IHMsIGNvbnN0IGluZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPiYgcikKICB7CiAg
ICByZXR1cm4gaW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+KHMsIHIuZmluaXNoKCksIHIuc3Ry
aWRlKCkpOwogIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleCwgdHlwZW5hbWUgU2l6ZVR5
cGU+CiAgaW5saW5lIGluZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPgogIG9wZXJhdG9yPChJbmRl
eCBzLCBjb25zdCBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4mIHIpCiAgewogICAgcmV0dXJu
IGluZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPihzICsgMSwgci5maW5pc2goKSwgci5zdHJpZGUo
KSk7CiAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4LCB0eXBlbmFtZSBTaXplVHlwZT4K
ICBpbmxpbmUgaW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+CiAgb3BlcmF0b3I8KGNvbnN0IGlu
ZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPiYgciwgSW5kZXggZikKICB7CiAgICByZXR1cm4gaW5k
ZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+KHIuc3RhcnQoKSwgZiwgci5zdHJpZGUoKSk7CiAgfQoK
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4LCB0eXBlbmFtZSBTaXplVHlwZT4KICBpbmxpbmUg
aW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+CiAgb3BlcmF0b3I8PShjb25zdCBpbmRleF9yYW5n
ZTxJbmRleCxTaXplVHlwZT4mIHIsIEluZGV4IGYpCiAgewogICAgcmV0dXJuIGluZGV4X3Jhbmdl
PEluZGV4LFNpemVUeXBlPihyLnN0YXJ0KCksIGYgKyAxLCByLnN0cmlkZSgpKTsKICB9Cgp9Cn0K
fQojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9i
YXNlLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVs
dGlfYXJyYXkvaW5kZXhfZ2VuLmhwcCIgMSAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2luZGV4X2dlbi5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0
IHsKbmFtZXNwYWNlIGRldGFpbCB7Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7CgoKdGVtcGxhdGUg
PGludCBOdW1SYW5nZXMsIGludCBOdW1EaW1zPgpzdHJ1Y3QgaW5kZXhfZ2VuIHsKcHJpdmF0ZToK
ICB0eXBlZGVmIGluZGV4IEluZGV4OwogIHR5cGVkZWYgc3RkOjpzaXplX3QgU2l6ZVR5cGU7CiAg
dHlwZWRlZiBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4gcmFuZ2U7CnB1YmxpYzoKICB0ZW1w
bGF0ZSA8aW50IERpbXMsIGludCBSYW5nZXM+CiAgc3RydWN0IGdlbl90eXBlIHsKICAgIHR5cGVk
ZWYgaW5kZXhfZ2VuPFJhbmdlcyxEaW1zPiB0eXBlOwogIH07CgogIHR5cGVkZWYgdHlwZW5hbWUg
cmFuZ2VfbGlzdF9nZW5lcmF0b3I8cmFuZ2UsTnVtUmFuZ2VzPjo6dHlwZSByYW5nZV9saXN0Owog
IHJhbmdlX2xpc3QgcmFuZ2VzXzsKCiAgaW5kZXhfZ2VuKCkgeyB9CgogIHRlbXBsYXRlIDxpbnQg
TkQ+CiAgZXhwbGljaXQgaW5kZXhfZ2VuKGNvbnN0IGluZGV4X2dlbjxOdW1SYW5nZXMtMSxORD4m
IHJocywKICAgICAgICAgICAgY29uc3QgaW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+JiByYW5n
ZSkKICB7CiAgICBzdGQ6OmNvcHkocmhzLnJhbmdlc18uYmVnaW4oKSxyaHMucmFuZ2VzXy5lbmQo
KSxyYW5nZXNfLmJlZ2luKCkpOwogICAgKnJhbmdlc18ucmJlZ2luKCkgPSByYW5nZTsKICB9Cgog
IGluZGV4X2dlbjxOdW1SYW5nZXMrMSxOdW1EaW1zKzE+CiAgb3BlcmF0b3JbXShjb25zdCBpbmRl
eF9yYW5nZTxJbmRleCxTaXplVHlwZT4mIHJhbmdlKSBjb25zdAogIHsKICAgIGluZGV4X2dlbjxO
dW1SYW5nZXMrMSxOdW1EaW1zKzE+IHRtcDsKICAgIHN0ZDo6Y29weShyYW5nZXNfLmJlZ2luKCks
cmFuZ2VzXy5lbmQoKSx0bXAucmFuZ2VzXy5iZWdpbigpKTsKICAgICp0bXAucmFuZ2VzXy5yYmVn
aW4oKSA9IHJhbmdlOwogICAgcmV0dXJuIHRtcDsKICB9CgogIGluZGV4X2dlbjxOdW1SYW5nZXMr
MSxOdW1EaW1zPgogIG9wZXJhdG9yW10oSW5kZXggaWR4KSBjb25zdAogIHsKICAgIGluZGV4X2dl
bjxOdW1SYW5nZXMrMSxOdW1EaW1zPiB0bXA7CiAgICBzdGQ6OmNvcHkocmFuZ2VzXy5iZWdpbigp
LHJhbmdlc18uZW5kKCksdG1wLnJhbmdlc18uYmVnaW4oKSk7CiAgICAqdG1wLnJhbmdlc18ucmJl
Z2luKCkgPSBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4oaWR4KTsKICAgIHJldHVybiB0bXA7
CiAgfQoKICBzdGF0aWMgaW5kZXhfZ2VuPDAsMD4gaW5kaWNlcygpIHsKICAgIHJldHVybiBpbmRl
eF9nZW48MCwwPigpOwogIH0KfTsKCn0KfQp9CiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9zdG9yYWdlX29yZGVyLmhwcCIgMSAz
CiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N0
b3JhZ2Vfb3JkZXIuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvbXVsdGlfYXJyYXkvYWxnb3JpdGhtLmhwcCIgMSAzCiMgNDQgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2FsZ29yaXRobS5ocHAiIDMKbmFtZXNwYWNl
IGJvb3N0IHsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyLCBjbGFzcyBTaXplLCBjbGFz
cyBPdXRwdXRJdGVyPgpPdXRwdXRJdGVyIGNvcHlfbihJbnB1dEl0ZXIgZmlyc3QsIFNpemUgY291
bnQsCiAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXIgcmVzdWx0KSB7CiAgZm9yICggOyBjb3Vu
dCA+IDA7IC0tY291bnQpIHsKICAgICpyZXN1bHQgPSAqZmlyc3Q7CiAgICArK2ZpcnN0OwogICAg
KytyZXN1bHQ7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KIyA5OCAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvYWxnb3JpdGhtLmhwcCIgMwp9CiMgMTkgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3Jk
ZXIuaHBwIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y
L2Z1bmN0aW9uYWwiIDEgMwojIDUzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9mdW5jdGlvbmFsIiAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3JkZXIuaHBwIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Zv
bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9udW1lcmljIiAxIDMKIyA2NSAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbnVtZXJpYyIgMwoKCgoKIyAxICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9udW1lcmljLmgiIDEgMwojIDY0
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9udW1lcmlj
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y
LCB0eXBlbmFtZSBfVHA+CiAgICBfVHAKICAgIGFjY3VtdWxhdGUoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfVHAgX19pbml0KQogICAgewoKICAgICAKCiAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2luaXQg
PSBfX2luaXQgKyAqX19maXJzdDsKICAgICAgcmV0dXJuIF9faW5pdDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFy
eU9wZXJhdGlvbj4KICAgIF9UcAogICAgYWNjdW11bGF0ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQsCiAgICAgICAgICAgICAgIF9CaW5h
cnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9faW5pdCA9IF9fYmluYXJ5X29wKF9f
aW5pdCwgKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19pbml0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwgdHlwZW5h
bWUgX1RwPgogICAgX1RwCiAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yMiBfX2ZpcnN0MiwgX1RwIF9faW5pdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAg
X19pbml0ID0gX19pbml0ICsgKCpfX2ZpcnN0MSAqICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBf
X2luaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5h
bWUgX0lucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9C
aW5hcnlPcGVyYXRpb24xLCB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uMj4KICAgIF9UcAogICAg
aW5uZXJfcHJvZHVjdChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBf
X2luaXQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24xIF9fYmluYXJ5X29wMSwK
ICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbjIgX19iaW5hcnlfb3AyKQogICAgewoK
ICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0
MSwgKytfX2ZpcnN0MikKICAgICAgICBfX2luaXQgPSBfX2JpbmFyeV9vcDEoX19pbml0LCBfX2Jp
bmFyeV9vcDIoKl9fZmlyc3QxLCAqX19maXJzdDIpKTsKICAgICAgcmV0dXJuIF9faW5pdDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyYXRvcj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgcGFydGlhbF9zdW0oX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1
dEl0ZXJhdG9yIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAog
ICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJz
dDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX3ZhbHVlID0g
X192YWx1ZSArICpfX2ZpcnN0OwogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAg
fQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeU9w
ZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgcGFydGlhbF9zdW0oX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1
dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg
ICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgICAgICBfX3ZhbHVlID0gX19iaW5hcnlfb3AoX192YWx1ZSwgKl9fZmly
c3QpOwogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4g
KytfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgYWRqYWNlbnRf
ZGlmZmVyZW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2
YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OwogICAgICAg
ICorK19fcmVzdWx0ID0gX190bXAgLSBfX3ZhbHVlOwogICAgICAgIF9fdmFsdWUgPSBfX3RtcDsK
ICAgICAgfQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Jp
bmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgYWRqYWNlbnRfZGlmZmVyZW5j
ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlv
biBfX2JpbmFyeV9vcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDsKICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg
ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3Rt
cCA9ICpfX2ZpcnN0OwogICAgICAgICorK19fcmVzdWx0ID0gX19iaW5hcnlfb3AoX190bXAsIF9f
dmFsdWUpOwogICAgICAgIF9fdmFsdWUgPSBfX3RtcDsKICAgICAgfQogICAgICByZXR1cm4gKytf
X3Jlc3VsdDsKICAgIH0KCn0KIyA3MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvbnVtZXJpYyIgMiAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3JkZXIuaHBwIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Zv
bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDEgMwojIDY1ICIvdXNyL2xvY2FsL3Zv
bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDMKCiMgMSAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAz
CiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2Rl
ZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk
KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i
YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y
dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z
KTsKfQojIDY3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi92ZWN0b3Ii
IDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF92ZWN0b3IuaCIgMSAzCiMgNjUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC92
b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIg
MSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4
Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlk
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291
dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY2
ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3Iu
aCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2Ug
ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRv
cj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3Jf
dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0K
CiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9N
X2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9v
Zl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2Fs
bG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5k
X29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJu
IF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUo
X1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRl
YWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+
IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K
CiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3Rh
cnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVk
OgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3Rv
cmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46
Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikK
ICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFs
bG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0
ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1
Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9j
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j
Pjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf
QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9B
bGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5h
bWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2Uo
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNl
KHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAg
ICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsK
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9i
YXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsgfQp9OwojIDE2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0g
YWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9U
cCwgX0FsbG9jPgp7CgogCgpwcml2YXRlOgogIHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0Fs
bG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3RvcjxfVHAsIF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1
YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9p
bnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVy
YXRvcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRl
ciwgdmVjdG9yX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZl
cmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw
ZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNl
OjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0
ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByb3RlY3RlZDoKICB1c2luZyBfQmFzZTo6
X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6
Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Vu
ZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9y
IF9fcG9zaXRpb24pOwoKcHVibGljOgoKCgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0
ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
ICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoK
CgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcihlbmQoKSk7IH0KCgoKCgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u
c3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAg
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAg
eyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBl
IHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0K
CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEp
IC8gc2l6ZW9mKF9UcCk7IH0KCgoKCgogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7
IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UpIC0gYmVn
aW4oKSk7IH0KCgoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdpbigpID09
IGVuZCgpOyB9CiMgMjg5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF92ZWN0b3IuaCIgMwogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24p
IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KIyAzMDAgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19u
KTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlm
IChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9y
Iik7CiAgfQojIDMxNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01f
cmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQojIDMyOCAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBjb25z
dF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2so
X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9
CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShf
X24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQs
IF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6
IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxs
b2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90
eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
ICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgo
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAgICAgICB7CiAg
ICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfTV9zdGFydCArIF9fbjsKICAgICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24o
X01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfYXV4KF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICAgIHsK
ICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9y
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgICAgIF9NX3JhbmdlX2lu
aXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgICAgIH0KCiAg
fnZlY3RvcigpCiAgeyBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoKICB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KTsK
IyAzOTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Zl
Y3Rvci5oIiAzCiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0
eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwog
ICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwg
X01fZmluaXNoKTsKICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9N
X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg
ICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7
CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CiAgfQojIDQy
MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9y
LmgiIDMKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9N
X2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5
cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2b2lkCiAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3Bh
dGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFz
cyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19u
LCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6
ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy
PgogICAgdm9pZAogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0
ZWdvcnk7CiAgICAgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5
KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAg
ICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkCiAgICBfTV9hc3NpZ25fYXV4KF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKCgogIHJlZmVyZW5jZSBmcm9udCgpIHsg
cmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7
IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVu
ZCgpIC0gMSk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4g
KihlbmQoKSAtIDEpOyB9CiMgNDg4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQKICBwdXNoX2JhY2soY29uc3QgX1RwJiBf
X3gpCiAgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBf
Q29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBl
bHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQojIDUxOSAiL3Vzci9sb2Nh
bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lk
CiAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgewogICAgc3RkOjpzd2FwKF9NX3N0
YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2Zpbmlz
aCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFn
ZSk7CiAgfQojIDUzOCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBjb25zdCBfVHAmIF9feCkKICB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJl
Z2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRp
b24gPT0gZW5kKCkpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsr
X01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9f
cG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQojIDU2MiAiL3Vz
ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMK
ICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKQogIHsKICAgIHNpemVfdHlw
ZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k
X29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBfQ29uc3RydWN0KF9N
X2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl
cnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwog
IH0KCgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIGlu
c2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KQogICAgICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf
SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNw
YXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2go
aXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl
KQogICAgeyBfTV9maWxsX2luc2VydChfX3Bvcywgc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24p
LCBzdGF0aWNfY2FzdDxfVHA+KF9fdmFsKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAg
ICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9yYW5nZV9p
bnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KIyA2
MTIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z
dCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2
b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X1RwJiBfX3gpOwojIDYyNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7
CiAgICBfRGVzdHJveShfTV9maW5pc2gpOwogIH0KIyA2NDUgIi91c3IvbG9jYWwvdm9sL2djYy8z
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IgZXJhc2Uo
aXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQog
ICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2Zp
bmlzaDsKICAgIF9EZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9
CiMgNjY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92
ZWN0b3IuaCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f
bGFzdCkgewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwog
ICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5pc2ggLSAoX19s
YXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CiMgNjg1ICIvdXNyL2xvY2Fs
L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQg
cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9f
bmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQo
KSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194
KTsKICB9CiMgNzAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJl
c2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KCgoKCgoKCiAgdm9pZCBjbGVhcigpIHsgZXJhc2Uo
YmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPgogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwg
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogIHsKICAgIHBvaW50ZXIg
X19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgdHJ5IHsKICAgICAgdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7
CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKF9fcmVz
dWx0LCBfX24pOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAgc2l6ZV90eXBlIF9f
biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRl
KF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmlu
aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2
b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewog
IHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJl
Z2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feCwgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRv
ciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAs
IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
IF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbApvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVj
dG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195
KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2ZWN0b3I8X1RwLF9BbGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9
KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRoaXMpIHsK
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAgaWYgKF9feGxlbiA+
IGNhcGFjaXR5KCkpIHsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5
KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0
LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+
PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQo
KSwgYmVnaW4oKSkpOwogICAgICBfRGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQp
OwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQo
KSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwog
IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25z
dCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0
b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBf
X3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxs
KGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp
bGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFz
ZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0
b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAg
ICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShf
X2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4g
PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7
CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBf
X2xhc3QpKTsKICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgX01fZGVhbGxv
Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFy
dCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCAr
IF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4pIHsKICAgIGl0ZXJhdG9yIF9f
bmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpKTsKICAgIF9EZXN0cm95
KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2Uo
KTsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2
YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsK
ICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5p
c2gpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3Rv
cjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3Qg
X1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBf
Q29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsK
ICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRl
cmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwogICAgKl9fcG9z
aXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRf
c2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0g
MCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9j
YXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAg
dHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9N
X3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5pc2guYmFzZSgpLCBf
X3gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2go
Li4uKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsK
ICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAg
dGhyb3c7CiAgICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxs
b2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3Rh
cnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFz
ZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1Rw
LCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01f
ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwg
KihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19w
b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJh
dG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2Ug
ewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXpl
X3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBw
b2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25l
d19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVu
aW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgIF9Db25z
dHJ1Y3QoX19uZXdfZmluaXNoKTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsK
ICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0
LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbik7
CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAg
IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwog
ICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsK
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf
TV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYg
KF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmlu
aXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXpl
X3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3Ig
X19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7
CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBf
TV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2Fy
ZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAg
ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAg
ICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBf
X2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxl
bXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zp
bmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAg
ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6
ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsK
ICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAg
ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlv
biwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmls
bF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAg
ICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7
CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9f
bmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0
YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9EZXN0
cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf
TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFy
dC5iYXNlKCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgICB9CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRl
cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0g
X19sYXN0KSB7CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsK
ICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikg
ewogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlv
bjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2Vs
ZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAt
IF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAg
ICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xk
X2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0
OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCAr
PSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxl
bXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAgICAg
IH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp
emUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29s
ZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xl
bikpOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICB0cnkg
ewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9z
dGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRp
b24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAog
ICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmlu
aXNoKSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewog
ICAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgIF9N
X2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLCBfX2xlbik7CiAgICAgICAgICB0aHJvdzsK
ICAgICAgICB9CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAg
X01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zp
bmlzaC5iYXNlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgp
ICsgX19sZW47CiAgICB9CiAgfQp9Cgp9CiMgNzIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j
bHVkZS9jKysvMy4yL3ZlY3RvciIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYnZlY3Rvci5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBz
dGQKewogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfQml0X3R5cGU7CiAgZW51bSB7IF9NX3dvcmRf
Yml0ID0gaW50KDggKiBzaXplb2YoX0JpdF90eXBlKSkgfTsKCnN0cnVjdCBfQml0X3JlZmVyZW5j
ZSB7CgogIF9CaXRfdHlwZSAqIF9NX3A7CiAgX0JpdF90eXBlIF9NX21hc2s7CiAgX0JpdF9yZWZl
cmVuY2UoX0JpdF90eXBlICogX194LCBfQml0X3R5cGUgX195KQogICAgOiBfTV9wKF9feCksIF9N
X21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9t
YXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKCpfTV9wICYgX01f
bWFzayk7IH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlm
IChfX3gpICpfTV9wIHw9IF9NX21hc2s7CiAgICBlbHNlICpfTV9wICY9IH5fTV9tYXNrOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRf
cmVmZXJlbmNlJiBfX3gpCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4g
Ym9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9y
ZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9f
eCk7IH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lk
IHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9f
dG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRl
cmF0b3JfYmFzZSA6IHB1YmxpYyBpdGVyYXRvcjxyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywg
Ym9vbD4KewogIF9CaXRfdHlwZSAqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAg
X0JpdF9pdGVyYXRvcl9iYXNlKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAg
IDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7fQoKICB2b2lkIF9NX2J1bXBfdXAoKSB7CiAg
ICBpZiAoX01fb2Zmc2V0KysgPT0gX01fd29yZF9iaXQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9
IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBp
ZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZzZXQgPSBfTV93b3JkX2JpdCAtIDE7
CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7
CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBf
X24gLyBfTV93b3JkX2JpdDsKICAgIF9fbiA9IF9fbiAlIF9NX3dvcmRfYml0OwogICAgaWYgKF9f
biA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX01fd29yZF9i
aXQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQg
aW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9
PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9y
X2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9
PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g
ISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9y
X2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9w
ZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVy
biAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0
b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoK
aW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gs
IGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9NX3dvcmRfYml0ICog
KF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQ7Cn0K
CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5
cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2Uq
IHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwoKICBfQml0X2l0ZXJh
dG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2l0ZXJhdG9yKF9CaXRf
dHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9f
eCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJl
bmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7
CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJh
dG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgp
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9N
X2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0t
KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh
dG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5
cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9f
dG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g
X19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyBy
ZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9y
KyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCAr
IF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0
b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3Rf
cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRf
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6
IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoX0JpdF90
eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194
LCBfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gp
CiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3guX01fcCwgX194Ll9NX29mZnNldCkge30KCiAg
Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0X3JlZmVy
ZW5jZShfTV9wLCAxVUwgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJh
dG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0
X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0
aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVy
YXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0
b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAg
ICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBv
cGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5
cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0
dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVu
Y2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAg
ICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShk
aWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7CiAgfQp9OwoK
aW5saW5lIF9CaXRfY29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0
IF9CaXRfY29uc3RfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGljPgpjbGFzcyBfQnZlY3Rv
cl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxi
b29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRh
X2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl
JiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KCksIF9NX2Zpbmlz
aCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIF9CaXRfdHlwZSAqIF9N
X2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxs
b2NhdGUoKF9fbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQpOyB9CiAgdm9pZCBfTV9k
ZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2Nh
dG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog
ICAgICAgICAgX01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBf
Qml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRfb2Zfc3RvcmFnZTsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFz
ZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190
cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
YWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdl
KDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9CaXRf
dHlwZSwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAg
X0JpdF90eXBlICogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2Nf
dHlwZTo6YWxsb2NhdGUoKF9fbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQpOyB9CiAg
dm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxv
Y190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0
ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAq
IF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX0J2
ZWN0b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19p
bnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9T
X2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9CdmVjdG9yX2Jhc2Uo
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgfl9CdmVjdG9yX2Jh
c2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCn0KCgoKbmFtZXNwYWNlIHN0ZAp7
Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+
IDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVm
IGJvb2wgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVk
ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2Ug
cmVmZXJlbmNlOwogICAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYg
X0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3Bv
aW50ZXI7CgogICAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBf
Qml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2Nh
dG9yX3R5cGU7CiAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAg
ICByZXR1cm4gX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9Cgog
IHByb3RlY3RlZDoKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9j
OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNp
bmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jh
c2U8X0FsbG9jPjo6X01fZmluaXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+Ojpf
TV9lbmRfb2Zfc3RvcmFnZTsKCiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNp
emVfdHlwZSBfX24pIHsKICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7
CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9NX3dvcmRfYml0IC0gMSkv
X01fd29yZF9iaXQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01f
ZmluaXNoID0gX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQg
X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAo
X01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3
YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9z
aXRpb24gPSBfX3g7CiAgICAgICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
PyAyICogc2l6ZSgpIDogc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfTV93b3JkX2JpdCk7CiAgICAg
ICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRv
ciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAg
ICAgICpfX2krKyA9IF9feDsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVu
ZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAg
ICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBp
dGVyYXRvcigpOwogICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkK
ICAgICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAg
ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsK
ICAgICAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICAgICsrX19wb3M7
CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAg
IHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAg
ICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0g
X19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5p
c2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9f
bik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
c2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9N
X2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCks
IF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICAgX19pID0gY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s
IGVuZCgpLCBfX2kpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0
OwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICAgIH0KICAgICAg
fQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0
OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9
CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICAgIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICAgIHJldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAgIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7
IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6
ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0
IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFn
ZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBi
ZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f
bikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CiAg
ICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7
IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KCiAgICB2b2lkIF9N
X3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgICAgaWYgKF9fbiA+PSB0aGlz
LT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3Rvcjxib29sPiIpOwog
ICAgfQoKICAgIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgICB7IF9NX3JhbmdlX2No
ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChz
aXplX3R5cGUgX19uKSBjb25zdAogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAo
KnRoaXMpW19fbl07IH0KCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9f
YSkge30KCiAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAg
ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6
IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19u
KTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/
IH4wIDogMCk7CiAgICB9CgogICAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICAg
IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpCiAgICB7CiAgICAgIF9N
X2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3Rv
cmFnZSwgMCk7CiAgICB9CgogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9y
X2Jhc2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICAgIF9NX2luaXRpYWxpemUo
X194LnNpemUoKSk7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQp
OwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0
aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkg
ewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f
ZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShf
X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAg
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNl
PF9BbGxvYz4oX19hKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9k
aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB+dmVjdG9y
KCkgeyB9CgogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsKICAgICAg
aWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgICBpZiAoX194LnNpemUoKSA+IGNh
cGFjaXR5KCkpIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01faW5pdGlhbGl6
ZShfX3guc2l6ZSgpKTsKICAgICAgfQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks
IGJlZ2luKCkpOwogICAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f
eC5zaXplKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICB2b2lkIF9NX2Zp
bGxfYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPiBzaXplKCkp
IHsKICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+
MCA6IDApOwogICAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9
CiAgICAgIGVsc2UgewogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAg
ICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwog
ICAgICB9CiAgICB9CgogICAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01f
ZmlsbF9hc3NpZ24oX19uLCBfX3gpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRl
cmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19m
aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnRlZ2VyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdl
ciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdCkgX19u
LCAoYm9vbCkgX192YWwpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgICB2
b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpIHsKICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmly
c3QpCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgICAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0
KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m
aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNv
cHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlk
LCBzaXplKCkpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAg
IGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJl
c2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAg
ICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICAgIF9NX2Zpbmlz
aCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2Rl
YWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3Jk
X2JpdDsKICAgICAgfQogICAgfQoKICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdp
bigpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4o
KTsgfQogICAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNv
bnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2
b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01f
ZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAg
ICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0
b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9N
X3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAg
IHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAg
IH0KICAgIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJv
b2woKSkgewogICAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7
CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0
aW9uID09IGVuZCgpKQogICAgICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAg
ICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkg
KyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9N
X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9m
aWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90
eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAg
ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50
ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19m
aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2Vy
dChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBp
ZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19u
KSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsg
ZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlv
biArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZm
ZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUg
X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgIF9CaXRfdHlwZSAqIF9f
cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdp
bigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBmaWxsX24oX19pLCBf
X24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19p
ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01f
d29yZF9iaXQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAg
ICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwg
Ym9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwog
ICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBl
cmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBl
bmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAg
ICAgICAgLS1fTV9maW5pc2g7CiAgICAgIHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRl
cmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194
ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNl
KGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxz
ZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0K
ICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yIChfQml0X3R5cGUgKiBfX3AgPSBfTV9zdGFydC5f
TV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7ICsrX19wKQogICAgICAgICpfX3AgPSB+Kl9f
cDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KICB9
OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIF9fYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgNzMgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIgMiAzCiMgMjQgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3Jk
ZXIuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7CgoKICBjbGFzcyBjX3N0b3JhZ2Vfb3JkZXI7
CiAgY2xhc3MgZm9ydHJhbl9zdG9yYWdlX29yZGVyOwoKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
TnVtRGltcz4KICBjbGFzcyBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXIKICB7CiAgcHVibGljOgogICAg
dHlwZWRlZiBkZXRhaWw6Om11bHRpX2FycmF5OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9yZGVyaW5nSXRlciwgdHlwZW5hbWUgQXNjZW5kaW5nSXRlcj4KICAg
IGdlbmVyYWxfc3RvcmFnZV9vcmRlcihPcmRlcmluZ0l0ZXIgb3JkZXJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXNjZW5kaW5nSXRlciBhc2NlbmRpbmcpIHsKICAgICAgYm9vc3Q6OmNv
cHlfbihvcmRlcmluZyxOdW1EaW1zLG9yZGVyaW5nXy5iZWdpbigpKTsKICAgICAgYm9vc3Q6OmNv
cHlfbihhc2NlbmRpbmcsTnVtRGltcyxhc2NlbmRpbmdfLmJlZ2luKCkpOwogICAgfQoKCgoKCiAg
ICBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXIoY29uc3QgY19zdG9yYWdlX29yZGVyJikgewogICAgICBm
b3IgKHNpemVfdHlwZSBpPTA7IGkgIT0gTnVtRGltczsgKytpKSB7CiAgICAgICAgb3JkZXJpbmdf
W2ldID0gTnVtRGltcyAtIDEgLSBpOwogICAgICB9CiAgICAgIGFzY2VuZGluZ18uYXNzaWduKHRy
dWUpOwogICAgfQoKICAgIGdlbmVyYWxfc3RvcmFnZV9vcmRlcihjb25zdCBmb3J0cmFuX3N0b3Jh
Z2Vfb3JkZXImKSB7CiAgICAgIGZvciAoc2l6ZV90eXBlIGk9MDsgaSAhPSBOdW1EaW1zOyArK2kp
IHsKICAgICAgICBvcmRlcmluZ19baV0gPSBpOwogICAgICB9CiAgICAgIGFzY2VuZGluZ18uYXNz
aWduKHRydWUpOwogICAgfQoKICAgIHNpemVfdHlwZSBvcmRlcmluZyhzaXplX3R5cGUgZGltKSBj
b25zdCB7IHJldHVybiBvcmRlcmluZ19bZGltXTsgfQogICAgYm9vbCBhc2NlbmRpbmcoc2l6ZV90
eXBlIGRpbSkgY29uc3QgeyByZXR1cm4gYXNjZW5kaW5nX1tkaW1dOyB9CgogICAgYm9vbCBhbGxf
ZGltc19hc2NlbmRpbmcoKSBjb25zdCB7CiAgICAgIHJldHVybiBzdGQ6OmFjY3VtdWxhdGUoYXNj
ZW5kaW5nXy5iZWdpbigpLGFzY2VuZGluZ18uZW5kKCksdHJ1ZSwKICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bG9naWNhbF9hbmQ8Ym9vbD4oKSk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvcj09
KGdlbmVyYWxfc3RvcmFnZV9vcmRlciBjb25zdCYgcmhzKSBjb25zdCB7CiAgICAgIHJldHVybiAo
b3JkZXJpbmdfID09IHJocy5vcmRlcmluZ18pICYmCiAgICAgICAgKGFzY2VuZGluZ18gPT0gcmhz
LmFzY2VuZGluZ18pOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICBib29zdDo6YXJyYXk8c2l6ZV90
eXBlLE51bURpbXM+IG9yZGVyaW5nXzsKICAgIGJvb3N0OjphcnJheTxib29sLE51bURpbXM+IGFz
Y2VuZGluZ187CiAgfTsKCiAgY2xhc3MgY19zdG9yYWdlX29yZGVyCiAgewogICAgdHlwZWRlZiBk
ZXRhaWw6Om11bHRpX2FycmF5OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHB1YmxpYzoKCgoKICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOdW1EaW1zPgogICAgb3BlcmF0b3IgZ2VuZXJhbF9zdG9y
YWdlX29yZGVyPE51bURpbXM+KCkgY29uc3QgewogICAgICBib29zdDo6YXJyYXk8c2l6ZV90eXBl
LE51bURpbXM+IG9yZGVyaW5nOwogICAgICBib29zdDo6YXJyYXk8Ym9vbCxOdW1EaW1zPiBhc2Nl
bmRpbmc7CgogICAgICBmb3IgKHNpemVfdHlwZSBpPTA7IGkgIT0gTnVtRGltczsgKytpKSB7CiAg
ICAgICAgb3JkZXJpbmdbaV0gPSBOdW1EaW1zIC0gMSAtIGk7CiAgICAgICAgYXNjZW5kaW5nW2ld
ID0gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51bURp
bXM+KG9yZGVyaW5nLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXNjZW5kaW5nLmJlZ2luKCkpOwogICAgfQoKICB9OwoKICBjbGFzcyBmb3J0cmFu
X3N0b3JhZ2Vfb3JkZXIKICB7CiAgICB0eXBlZGVmIGRldGFpbDo6bXVsdGlfYXJyYXk6OnNpemVf
dHlwZSBzaXplX3R5cGU7CiAgcHVibGljOgoKCgogICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE51
bURpbXM+CiAgICBvcGVyYXRvciBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVtRGltcz4oKSBjb25z
dCB7CiAgICAgIGJvb3N0OjphcnJheTxzaXplX3R5cGUsTnVtRGltcz4gb3JkZXJpbmc7CiAgICAg
IGJvb3N0OjphcnJheTxib29sLE51bURpbXM+IGFzY2VuZGluZzsKCiAgICAgIGZvciAoc2l6ZV90
eXBlIGk9MDsgaSAhPSBOdW1EaW1zOyArK2kpIHsKICAgICAgICBvcmRlcmluZ1tpXSA9IGk7CiAg
ICAgICAgYXNjZW5kaW5nW2ldID0gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZ2VuZXJhbF9z
dG9yYWdlX29yZGVyPE51bURpbXM+KG9yZGVyaW5nLmJlZ2luKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjZW5kaW5nLmJlZ2luKCkpOwogICAgfQoKICB9
OwoKfQojIDI2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh
eS9iYXNlLmhwcCIgMiAzCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z
dC9tdWx0aV9hcnJheS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDEgMwojIDEyOCAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvaXRlcmF0b3JfYWRhcHRvcnMu
aHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdXRpbGl0eS5o
cHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC91dGlsaXR5
LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NoZWNrZWRf
ZGVsZXRlLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0
L2NoZWNrZWRfZGVsZXRlLmhwcCIgMwpuYW1lc3BhY2UgYm9vc3QKewoKCgp0ZW1wbGF0ZTwgdHlw
ZW5hbWUgVCA+IGlubGluZSB2b2lkIGNoZWNrZWRfZGVsZXRlKFQgKiB4KQp7CiAgICB0eXBlZGVm
IGNoYXIgdHlwZV9tdXN0X2JlX2NvbXBsZXRlW3NpemVvZihUKV07CiAgICBkZWxldGUgeDsKfQoK
dGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBpbmxpbmUgdm9pZCBjaGVja2VkX2FycmF5X2RlbGV0ZShU
ICogeCkKewogICAgdHlwZWRlZiBjaGFyIHR5cGVfbXVzdF9iZV9jb21wbGV0ZVtzaXplb2YoVCld
OwogICAgZGVsZXRlIFtdIHg7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBjaGVja2VkX2Rl
bGV0ZXIKewogICAgdHlwZWRlZiB2b2lkIHJlc3VsdF90eXBlOwogICAgdHlwZWRlZiBUICogYXJn
dW1lbnRfdHlwZTsKCiAgICB2b2lkIG9wZXJhdG9yKCkoVCAqIHgpCiAgICB7CiAgICAgICAgY2hl
Y2tlZF9kZWxldGUoeCk7CiAgICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgY2hlY2tl
ZF9hcnJheV9kZWxldGVyCnsKICAgIHR5cGVkZWYgdm9pZCByZXN1bHRfdHlwZTsKICAgIHR5cGVk
ZWYgVCAqIGFyZ3VtZW50X3R5cGU7CgogICAgdm9pZCBvcGVyYXRvcigpKFQgKiB4KQogICAgewog
ICAgICAgIGNoZWNrZWRfYXJyYXlfZGVsZXRlKHgpOwogICAgfQp9OwoKfQojIDE5ICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC91dGlsaXR5LmhwcCIgMiAzCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdXRpbGl0eS9iYXNlX2Zyb21fbWVtYmVyLmhw
cCIgMSAzCiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0aWxpdHkv
YmFzZV9mcm9tX21lbWJlci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC91dGlsaXR5X2Z3ZC5ocHAiIDEgMwojIDE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC91dGlsaXR5X2Z3ZC5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0CnsKCgoKCnRl
bXBsYXRlIDwgdHlwZW5hbWUgTWVtYmVyVHlwZSwgaW50IFVuaXF1ZUlEID0gMCA+CiAgICBjbGFz
cyBiYXNlX2Zyb21fbWVtYmVyOwoKCgoKY2xhc3Mgbm9uY29weWFibGU7CgoKCn0KIyAxNSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdXRpbGl0eS9iYXNlX2Zyb21fbWVtYmVy
LmhwcCIgMiAzCgoKbmFtZXNwYWNlIGJvb3N0CnsKIyAyOSAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvdXRpbGl0eS9iYXNlX2Zyb21fbWVtYmVyLmhwcCIgMwp0ZW1wbGF0ZSA8
IHR5cGVuYW1lIE1lbWJlclR5cGUsIGludCBVbmlxdWVJRCA+CmNsYXNzIGJhc2VfZnJvbV9tZW1i
ZXIKewpwcm90ZWN0ZWQ6CiAgICBNZW1iZXJUeXBlIG1lbWJlcjsKCiAgICBleHBsaWNpdCBiYXNl
X2Zyb21fbWVtYmVyKCkKICAgICAgICA6IG1lbWJlcigpCiAgICAgICAge30KCiAgICB0ZW1wbGF0
ZTwgdHlwZW5hbWUgVDEgPgogICAgZXhwbGljaXQgYmFzZV9mcm9tX21lbWJlciggVDEgeDEgKQog
ICAgICAgIDogbWVtYmVyKCB4MSApCiAgICAgICAge30KCiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyID4KICAgIGJhc2VfZnJvbV9tZW1iZXIoIFQxIHgxLCBUMiB4MiApCiAg
ICAgICAgOiBtZW1iZXIoIHgxLCB4MiApCiAgICAgICAge30KCiAgICB0ZW1wbGF0ZTwgdHlwZW5h
bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMyA+CiAgICBiYXNlX2Zyb21fbWVtYmVyKCBU
MSB4MSwgVDIgeDIsIFQzIHgzICkKICAgICAgICA6IG1lbWJlciggeDEsIHgyLCB4MyApCiAgICAg
ICAge30KCn07Cgp9CiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0
aWxpdHkuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC91
dGlsaXR5L2FkZHJlc3NvZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC91dGlsaXR5L2FkZHJlc3NvZi5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKCgoK
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFQqIGFkZHJlc3NvZihUJiB2KQp7CiAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KAogICAgICAgJmNvbnN0X2Nhc3Q8Y2hhciY+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3Qgdm9sYXRpbGUgY2hhciAmPih2KSkpOwp9Cgp9CiMgMjEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0aWxpdHkuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdAp7
CiMgMzUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0aWxpdHkuaHBwIiAz
CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgIGlubGluZSBUIG5leHQoVCB4KSB7IHJldHVybiAr
K3g7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgIGlubGluZSBUIHByaW9yKFQgeCkgeyBy
ZXR1cm4gLS14OyB9CiMgNDkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0
aWxpdHkuaHBwIiAzCiAgICBjbGFzcyBub25jb3B5YWJsZQogICAgewogICAgcHJvdGVjdGVkOgog
ICAgICAgIG5vbmNvcHlhYmxlKCl7fQogICAgICAgIH5ub25jb3B5YWJsZSgpe30KICAgIHByaXZh
dGU6CiAgICAgICAgbm9uY29weWFibGUoIGNvbnN0IG5vbmNvcHlhYmxlJiApOwogICAgICAgIGNv
bnN0IG5vbmNvcHlhYmxlJiBvcGVyYXRvcj0oIGNvbnN0IG5vbmNvcHlhYmxlJiApOwogICAgfTsK
Cgp9CiMgMTI5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh
eS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p
bmNsdWRlL2Jvb3N0L2NvbXByZXNzZWRfcGFpci5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb21wcmVzc2VkX3BhaXIuaHBwIiAzCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2NvbXByZXNzZWRfcGFpci5ocHAi
IDEgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvY29t
cHJlc3NlZF9wYWlyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L3R5cGVfdHJhaXRzL29iamVjdF90cmFpdHMuaHBwIiAxIDMKIyAyNCAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2NvbXByZXNzZWRfcGFpci5ocHAiIDIgMwoK
CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvc2Ft
ZV90cmFpdHMuaHBwIiAxIDMKIyAyNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvZGV0YWlsL2NvbXByZXNzZWRfcGFpci5ocHAiIDIgMwoKCiMgMSAiL2hvbWUvY29tcGJpby9k
OTUtYmxpL2luY2x1ZGUvYm9vc3QvY2FsbF90cmFpdHMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY2FsbF90cmFpdHMuaHBwIiAzCiMgMSAiL2hvbWUv
Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMSAz
CiMgMjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9jYWxsX3Ry
YWl0cy5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl
X3RyYWl0cy9hcml0aG1ldGljX3RyYWl0cy5ocHAiIDEgMwojIDI4ICIvaG9tZS9jb21wYmlvL2Q5
NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvY2FsbF90cmFpdHMuaHBwIiAyIDMKCgojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90
cmFpdHMuaHBwIiAxIDMKIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
ZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMiAzCgoKbmFtZXNwYWNlIGJvb3N0ewoKbmFtZXNwYWNl
IGRldGFpbHsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sIHNtYWxsXz4Kc3RydWN0IGN0X2lt
cDIKewogICB0eXBlZGVmIGNvbnN0IFQmIHBhcmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4Kc3RydWN0IGN0X2ltcDI8VCwgdHJ1ZT4KewogICB0eXBlZGVmIGNvbnN0IFQgcGFyYW1f
dHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sIGlzcCwgYm9vbCBiMT4Kc3RydWN0
IGN0X2ltcAp7CiAgIHR5cGVkZWYgY29uc3QgVCYgcGFyYW1fdHlwZTsKfTsKCnRlbXBsYXRlIDx0
eXBlbmFtZSBULCBib29sIGlzcD4Kc3RydWN0IGN0X2ltcDxULCBpc3AsIHRydWU+CnsKICAgdHlw
ZWRlZiB0eXBlbmFtZSBjdF9pbXAyPFQsIHNpemVvZihUKSA8PSBzaXplb2Yodm9pZCopPjo6cGFy
YW1fdHlwZSBwYXJhbV90eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgYjE+CnN0
cnVjdCBjdF9pbXA8VCwgdHJ1ZSwgYjE+CnsKICAgdHlwZWRlZiBUIGNvbnN0IHBhcmFtX3R5cGU7
Cn07Cgp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGNhbGxfdHJhaXRzCnsKcHVibGlj
OgogICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAgIHR5
cGVkZWYgY29uc3QgVCYgY29uc3RfcmVmZXJlbmNlOwoKCgoKCgogICB0eXBlZGVmIHR5cGVuYW1l
IGRldGFpbDo6Y3RfaW1wPAogICAgICBULAogICAgICA6OmJvb3N0Ojppc19wb2ludGVyPFQ+Ojp2
YWx1ZSwKICAgICAgOjpib29zdDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUKICAgPjo6cGFyYW1f
dHlwZSBwYXJhbV90eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjYWxsX3Ry
YWl0czxUJj4KewogICB0eXBlZGVmIFQmIHZhbHVlX3R5cGU7CiAgIHR5cGVkZWYgVCYgcmVmZXJl
bmNlOwogICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiBUJiBw
YXJhbV90eXBlOwp9OwojIDEyOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
ZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXpl
X3QgTj4Kc3RydWN0IGNhbGxfdHJhaXRzPFQgW05dPgp7CnByaXZhdGU6CiAgIHR5cGVkZWYgVCBh
cnJheV90eXBlW05dOwpwdWJsaWM6CgogICB0eXBlZGVmIGNvbnN0IFQqIHZhbHVlX3R5cGU7CiAg
IHR5cGVkZWYgYXJyYXlfdHlwZSYgcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IGFycmF5X3R5
cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdCBwYXJhbV90eXBl
Owp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CnN0cnVjdCBjYWxsX3Ry
YWl0czxjb25zdCBUIFtOXT4Kewpwcml2YXRlOgogICB0eXBlZGVmIGNvbnN0IFQgYXJyYXlfdHlw
ZVtOXTsKcHVibGljOgoKICAgdHlwZWRlZiBjb25zdCBUKiB2YWx1ZV90eXBlOwogICB0eXBlZGVm
IGFycmF5X3R5cGUmIHJlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBhcnJheV90eXBlJiBjb25z
dF9yZWZlcmVuY2U7CiAgIHR5cGVkZWYgY29uc3QgVCogY29uc3QgcGFyYW1fdHlwZTsKfTsKCgp9
CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NhbGxfdHJhaXRzLmhw
cCIgMiAzCiMgMzAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9j
b21wcmVzc2VkX3BhaXIuaHBwIiAyIDMKCgpuYW1lc3BhY2UgYm9vc3QKewoKdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMj4KY2xhc3MgY29tcHJlc3NlZF9wYWlyOwoKCgoKbmFtZXNwYWNlIGRl
dGFpbHMKewoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgYm9vbCBJc1NhbWUsIGJv
b2wgRmlyc3RFbXB0eSwgYm9vbCBTZWNvbmRFbXB0eT4KICAgc3RydWN0IGNvbXByZXNzZWRfcGFp
cl9zd2l0Y2g7CgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogICBzdHJ1Y3QgY29t
cHJlc3NlZF9wYWlyX3N3aXRjaDxUMSwgVDIsIGZhbHNlLCBmYWxzZSwgZmFsc2U+CiAgICAgIHtz
dGF0aWMgY29uc3QgaW50IHZhbHVlID0gMDt9OwoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFz
cyBUMj4KICAgc3RydWN0IGNvbXByZXNzZWRfcGFpcl9zd2l0Y2g8VDEsIFQyLCBmYWxzZSwgdHJ1
ZSwgdHJ1ZT4KICAgICAge3N0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSAzO307CgogICB0ZW1wbGF0
ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogICBzdHJ1Y3QgY29tcHJlc3NlZF9wYWlyX3N3aXRjaDxU
MSwgVDIsIGZhbHNlLCB0cnVlLCBmYWxzZT4KICAgICAge3N0YXRpYyBjb25zdCBpbnQgdmFsdWUg
PSAxO307CgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogICBzdHJ1Y3QgY29tcHJl
c3NlZF9wYWlyX3N3aXRjaDxUMSwgVDIsIGZhbHNlLCBmYWxzZSwgdHJ1ZT4KICAgICAge3N0YXRp
YyBjb25zdCBpbnQgdmFsdWUgPSAyO307CgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQy
PgogICBzdHJ1Y3QgY29tcHJlc3NlZF9wYWlyX3N3aXRjaDxUMSwgVDIsIHRydWUsIHRydWUsIHRy
dWU+CiAgICAgIHtzdGF0aWMgY29uc3QgaW50IHZhbHVlID0gNDt9OwoKICAgdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMj4KICAgc3RydWN0IGNvbXByZXNzZWRfcGFpcl9zd2l0Y2g8VDEsIFQy
LCB0cnVlLCBmYWxzZSwgZmFsc2U+CiAgICAgIHtzdGF0aWMgY29uc3QgaW50IHZhbHVlID0gNTt9
OwoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgaW50IFZlcnNpb24+IGNsYXNzIGNv
bXByZXNzZWRfcGFpcl9pbXA7CgoKCiAgIHVzaW5nIHN0ZDo6c3dhcDsKCgoKCgoKICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CiAgIGlubGluZSB2b2lkIGNwX3N3YXAoVCYgdDEsIFQmIHQyKQogICB7
CgoKCiAgICAgIHN3YXAodDEsIHQyKTsKICAgfQoKCgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNs
YXNzIFQyPgogICBjbGFzcyBjb21wcmVzc2VkX3BhaXJfaW1wPFQxLCBUMiwgMD4KICAgewogICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgVDEgZmlyc3RfdHlwZTsKICAgICAgdHlwZWRlZiBUMiBzZWNv
bmRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBlPjo6
cGFyYW1fdHlwZSBmaXJzdF9wYXJhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxf
dHJhaXRzPHNlY29uZF90eXBlPjo6cGFyYW1fdHlwZSBzZWNvbmRfcGFyYW1fdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBlPjo6cmVmZXJlbmNlIGZpcnN0
X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxzZWNvbmRfdHlw
ZT46OnJlZmVyZW5jZSBzZWNvbmRfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNh
bGxfdHJhaXRzPGZpcnN0X3R5cGU+Ojpjb25zdF9yZWZlcmVuY2UgZmlyc3RfY29uc3RfcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6Y29u
c3RfcmVmZXJlbmNlIHNlY29uZF9jb25zdF9yZWZlcmVuY2U7CgogICAgICBjb21wcmVzc2VkX3Bh
aXJfaW1wKCkge30KCiAgICAgIGNvbXByZXNzZWRfcGFpcl9pbXAoZmlyc3RfcGFyYW1fdHlwZSB4
LCBzZWNvbmRfcGFyYW1fdHlwZSB5KQogICAgICAgICA6IGZpcnN0Xyh4KSwgc2Vjb25kXyh5KSB7
fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgpCiAgICAgICAg
IDogZmlyc3RfKHgpIHt9CgogICAgICBjb21wcmVzc2VkX3BhaXJfaW1wKHNlY29uZF9wYXJhbV90
eXBlIHkpCiAgICAgICAgIDogc2Vjb25kXyh5KSB7fQoKICAgICAgZmlyc3RfcmVmZXJlbmNlIGZp
cnN0KCkge3JldHVybiBmaXJzdF87fQogICAgICBmaXJzdF9jb25zdF9yZWZlcmVuY2UgZmlyc3Qo
KSBjb25zdCB7cmV0dXJuIGZpcnN0Xzt9CgogICAgICBzZWNvbmRfcmVmZXJlbmNlIHNlY29uZCgp
IHtyZXR1cm4gc2Vjb25kXzt9CiAgICAgIHNlY29uZF9jb25zdF9yZWZlcmVuY2Ugc2Vjb25kKCkg
Y29uc3Qge3JldHVybiBzZWNvbmRfO30KCiAgICAgIHZvaWQgc3dhcCg6OmJvb3N0Ojpjb21wcmVz
c2VkX3BhaXI8VDEsIFQyPiYgeSkKICAgICAgewogICAgICAgICBjcF9zd2FwKGZpcnN0XywgeS5m
aXJzdCgpKTsKICAgICAgICAgY3Bfc3dhcChzZWNvbmRfLCB5LnNlY29uZCgpKTsKICAgICAgfQog
ICBwcml2YXRlOgogICAgICBmaXJzdF90eXBlIGZpcnN0XzsKICAgICAgc2Vjb25kX3R5cGUgc2Vj
b25kXzsKICAgfTsKCgoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICAgY2xhc3Mg
Y29tcHJlc3NlZF9wYWlyX2ltcDxUMSwgVDIsIDE+CiAgICAgIDogcHJpdmF0ZSBUMQogICB7CiAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQyIHNl
Y29uZF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+
OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2Fs
bF90cmFpdHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2UgZmly
c3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90
eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
Y2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9yZWZl
cmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpj
b25zdF9yZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNzZWRf
cGFpcl9pbXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBl
IHgsIHNlY29uZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDogZmlyc3RfdHlwZSh4KSwgc2Vjb25k
Xyh5KSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgpCiAg
ICAgICAgIDogZmlyc3RfdHlwZSh4KSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChzZWNv
bmRfcGFyYW1fdHlwZSB5KQogICAgICAgICA6IHNlY29uZF8oeSkge30KCiAgICAgIGZpcnN0X3Jl
ZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gKnRoaXM7fQogICAgICBmaXJzdF9jb25zdF9yZWZlcmVu
Y2UgZmlyc3QoKSBjb25zdCB7cmV0dXJuICp0aGlzO30KCiAgICAgIHNlY29uZF9yZWZlcmVuY2Ug
c2Vjb25kKCkge3JldHVybiBzZWNvbmRfO30KICAgICAgc2Vjb25kX2NvbnN0X3JlZmVyZW5jZSBz
ZWNvbmQoKSBjb25zdCB7cmV0dXJuIHNlY29uZF87fQoKICAgICAgdm9pZCBzd2FwKDo6Ym9vc3Q6
OmNvbXByZXNzZWRfcGFpcjxUMSxUMj4mIHkpCiAgICAgIHsKCiAgICAgICAgIGNwX3N3YXAoc2Vj
b25kXywgeS5zZWNvbmQoKSk7CiAgICAgIH0KICAgcHJpdmF0ZToKICAgICAgc2Vjb25kX3R5cGUg
c2Vjb25kXzsKICAgfTsKCgoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICAgY2xh
c3MgY29tcHJlc3NlZF9wYWlyX2ltcDxUMSwgVDIsIDI+CiAgICAgIDogcHJpdmF0ZSBUMgogICB7
CiAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQy
IHNlY29uZF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5
cGU+OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
Y2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2Ug
Zmlyc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29u
ZF90eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9y
ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+
Ojpjb25zdF9yZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNz
ZWRfcGFpcl9pbXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90
eXBlIHgsIHNlY29uZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDogc2Vjb25kX3R5cGUoeSksIGZp
cnN0Xyh4KSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgp
CiAgICAgICAgIDogZmlyc3RfKHgpIHt9CgogICAgICBjb21wcmVzc2VkX3BhaXJfaW1wKHNlY29u
ZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDogc2Vjb25kX3R5cGUoeSkge30KCiAgICAgIGZpcnN0
X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gZmlyc3RfO30KICAgICAgZmlyc3RfY29uc3RfcmVm
ZXJlbmNlIGZpcnN0KCkgY29uc3Qge3JldHVybiBmaXJzdF87fQoKICAgICAgc2Vjb25kX3JlZmVy
ZW5jZSBzZWNvbmQoKSB7cmV0dXJuICp0aGlzO30KICAgICAgc2Vjb25kX2NvbnN0X3JlZmVyZW5j
ZSBzZWNvbmQoKSBjb25zdCB7cmV0dXJuICp0aGlzO30KCiAgICAgIHZvaWQgc3dhcCg6OmJvb3N0
Ojpjb21wcmVzc2VkX3BhaXI8VDEsVDI+JiB5KQogICAgICB7CgogICAgICAgICBjcF9zd2FwKGZp
cnN0XywgeS5maXJzdCgpKTsKICAgICAgfQoKICAgcHJpdmF0ZToKICAgICAgZmlyc3RfdHlwZSBm
aXJzdF87CiAgIH07CgoKCiAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiAgIGNsYXNz
IGNvbXByZXNzZWRfcGFpcl9pbXA8VDEsIFQyLCAzPgogICAgICA6IHByaXZhdGUgVDEsCiAgICAg
ICAgcHJpdmF0ZSBUMgogICB7CiAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBl
OwogICAgICB0eXBlZGVmIFQyIHNlY29uZF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNh
bGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNl
Y29uZF9wYXJhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0
X3R5cGU+OjpyZWZlcmVuY2UgZmlyc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVy
ZW5jZSBmaXJzdF9jb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90
cmFpdHM8c2Vjb25kX3R5cGU+Ojpjb25zdF9yZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5j
ZTsKCiAgICAgIGNvbXByZXNzZWRfcGFpcl9pbXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWly
X2ltcChmaXJzdF9wYXJhbV90eXBlIHgsIHNlY29uZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDog
Zmlyc3RfdHlwZSh4KSwgc2Vjb25kX3R5cGUoeSkge30KCiAgICAgIGNvbXByZXNzZWRfcGFpcl9p
bXAoZmlyc3RfcGFyYW1fdHlwZSB4KQogICAgICAgICA6IGZpcnN0X3R5cGUoeCkge30KCiAgICAg
IGNvbXByZXNzZWRfcGFpcl9pbXAoc2Vjb25kX3BhcmFtX3R5cGUgeSkKICAgICAgICAgOiBzZWNv
bmRfdHlwZSh5KSB7fQoKICAgICAgZmlyc3RfcmVmZXJlbmNlIGZpcnN0KCkge3JldHVybiAqdGhp
czt9CiAgICAgIGZpcnN0X2NvbnN0X3JlZmVyZW5jZSBmaXJzdCgpIGNvbnN0IHtyZXR1cm4gKnRo
aXM7fQoKICAgICAgc2Vjb25kX3JlZmVyZW5jZSBzZWNvbmQoKSB7cmV0dXJuICp0aGlzO30KICAg
ICAgc2Vjb25kX2NvbnN0X3JlZmVyZW5jZSBzZWNvbmQoKSBjb25zdCB7cmV0dXJuICp0aGlzO30K
CgogICAgICB2b2lkIHN3YXAoOjpib29zdDo6Y29tcHJlc3NlZF9wYWlyPFQxLFQyPiYpIHt9CiAg
IH07CgoKCgoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICAgY2xhc3MgY29tcHJl
c3NlZF9wYWlyX2ltcDxUMSwgVDIsIDQ+CiAgICAgIDogcHJpdmF0ZSBUMQogICB7CiAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQyIHNlY29uZF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpwYXJh
bV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFp
dHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2UgZmlyc3RfcmVm
ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6
cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90
cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9yZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpjb25zdF9y
ZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNzZWRfcGFpcl9p
bXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgsIHNl
Y29uZF9wYXJhbV90eXBlKQogICAgICAgICA6IGZpcnN0X3R5cGUoeCkge30KCiAgICAgIGNvbXBy
ZXNzZWRfcGFpcl9pbXAoZmlyc3RfcGFyYW1fdHlwZSB4KQogICAgICAgICA6IGZpcnN0X3R5cGUo
eCkge30KCiAgICAgIGZpcnN0X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gKnRoaXM7fQogICAg
ICBmaXJzdF9jb25zdF9yZWZlcmVuY2UgZmlyc3QoKSBjb25zdCB7cmV0dXJuICp0aGlzO30KCiAg
ICAgIHNlY29uZF9yZWZlcmVuY2Ugc2Vjb25kKCkge3JldHVybiAqdGhpczt9CiAgICAgIHNlY29u
ZF9jb25zdF9yZWZlcmVuY2Ugc2Vjb25kKCkgY29uc3Qge3JldHVybiAqdGhpczt9CgogICAgICB2
b2lkIHN3YXAoOjpib29zdDo6Y29tcHJlc3NlZF9wYWlyPFQxLFQyPiYpIHt9CiAgIHByaXZhdGU6
CiAgIH07CgoKCiAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiAgIGNsYXNzIGNvbXBy
ZXNzZWRfcGFpcl9pbXA8VDEsIFQyLCA1PgogICB7CiAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBU
MSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQyIHNlY29uZF90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFt
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpw
YXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxf
dHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2UgZmlyc3RfcmVmZXJlbmNlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9y
ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46
OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpjb25zdF9yZWZlcmVuY2Ugc2Vjb25kX2Nv
bnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNzZWRfcGFpcl9pbXAoKSB7fQoKICAgICAgY29t
cHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgsIHNlY29uZF9wYXJhbV90eXBlIHkp
CiAgICAgICAgIDogZmlyc3RfKHgpLCBzZWNvbmRfKHkpIHt9CgogICAgICBjb21wcmVzc2VkX3Bh
aXJfaW1wKGZpcnN0X3BhcmFtX3R5cGUgeCkKICAgICAgICAgOiBmaXJzdF8oeCksIHNlY29uZF8o
eCkge30KCiAgICAgIGZpcnN0X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gZmlyc3RfO30KICAg
ICAgZmlyc3RfY29uc3RfcmVmZXJlbmNlIGZpcnN0KCkgY29uc3Qge3JldHVybiBmaXJzdF87fQoK
ICAgICAgc2Vjb25kX3JlZmVyZW5jZSBzZWNvbmQoKSB7cmV0dXJuIHNlY29uZF87fQogICAgICBz
ZWNvbmRfY29uc3RfcmVmZXJlbmNlIHNlY29uZCgpIGNvbnN0IHtyZXR1cm4gc2Vjb25kXzt9Cgog
ICAgICB2b2lkIHN3YXAoOjpib29zdDo6Y29tcHJlc3NlZF9wYWlyPFQxLCBUMj4mIHkpCiAgICAg
IHsKICAgICAgICAgY3Bfc3dhcChmaXJzdF8sIHkuZmlyc3QoKSk7CiAgICAgICAgIGNwX3N3YXAo
c2Vjb25kXywgeS5zZWNvbmQoKSk7CiAgICAgIH0KICAgcHJpdmF0ZToKICAgICAgZmlyc3RfdHlw
ZSBmaXJzdF87CiAgICAgIHNlY29uZF90eXBlIHNlY29uZF87CiAgIH07Cgp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVDEsIGNsYXNzIFQyPgpjbGFzcyBjb21wcmVzc2VkX3BhaXIKICAgOiBwcml2YXRlIDo6
Ym9vc3Q6OmRldGFpbHM6OmNvbXByZXNzZWRfcGFpcl9pbXA8VDEsIFQyLAogICAgICAgICAgICAg
Ojpib29zdDo6ZGV0YWlsczo6Y29tcHJlc3NlZF9wYWlyX3N3aXRjaDwKICAgICAgICAgICAgICAg
ICAgICBUMSwKICAgICAgICAgICAgICAgICAgICBUMiwKICAgICAgICAgICAgICAgICAgICA6OmJv
b3N0Ojppc19zYW1lPHR5cGVuYW1lIHJlbW92ZV9jdjxUMT46OnR5cGUsIHR5cGVuYW1lIHJlbW92
ZV9jdjxUMj46OnR5cGU+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19l
bXB0eTxUMT46OnZhbHVlLAogICAgICAgICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2VtcHR5PFQy
Pjo6dmFsdWU+Ojp2YWx1ZT4Kewpwcml2YXRlOgogICB0eXBlZGVmIGRldGFpbHM6OmNvbXByZXNz
ZWRfcGFpcl9pbXA8VDEsIFQyLAogICAgICAgICAgICAgOjpib29zdDo6ZGV0YWlsczo6Y29tcHJl
c3NlZF9wYWlyX3N3aXRjaDwKICAgICAgICAgICAgICAgICAgICBUMSwKICAgICAgICAgICAgICAg
ICAgICBUMiwKICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19zYW1lPHR5cGVuYW1lIHJl
bW92ZV9jdjxUMT46OnR5cGUsIHR5cGVuYW1lIHJlbW92ZV9jdjxUMj46OnR5cGU+Ojp2YWx1ZSwK
ICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19lbXB0eTxUMT46OnZhbHVlLAogICAgICAg
ICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2VtcHR5PFQyPjo6dmFsdWU+Ojp2YWx1ZT4gYmFzZTsK
cHVibGljOgogICB0eXBlZGVmIFQxIGZpcnN0X3R5cGU7CiAgIHR5cGVkZWYgVDIgc2Vjb25kX3R5
cGU7CiAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OnBhcmFtX3R5
cGUgZmlyc3RfcGFyYW1fdHlwZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxzZWNv
bmRfdHlwZT46OnBhcmFtX3R5cGUgc2Vjb25kX3BhcmFtX3R5cGU7CiAgIHR5cGVkZWYgdHlwZW5h
bWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OnJlZmVyZW5jZSBmaXJzdF9yZWZlcmVuY2U7CiAg
IHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+OjpyZWZlcmVuY2Ugc2Vj
b25kX3JlZmVyZW5jZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBl
Pjo6Y29uc3RfcmVmZXJlbmNlIGZpcnN0X2NvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiB0eXBl
bmFtZSBjYWxsX3RyYWl0czxzZWNvbmRfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBzZWNvbmRfY29u
c3RfcmVmZXJlbmNlOwoKICAgICAgICAgICAgY29tcHJlc3NlZF9wYWlyKCkgOiBiYXNlKCkge30K
ICAgICAgICAgICAgY29tcHJlc3NlZF9wYWlyKGZpcnN0X3BhcmFtX3R5cGUgeCwgc2Vjb25kX3Bh
cmFtX3R5cGUgeSkgOiBiYXNlKHgsIHkpIHt9CiAgIGV4cGxpY2l0IGNvbXByZXNzZWRfcGFpcihm
aXJzdF9wYXJhbV90eXBlIHgpIDogYmFzZSh4KSB7fQogICBleHBsaWNpdCBjb21wcmVzc2VkX3Bh
aXIoc2Vjb25kX3BhcmFtX3R5cGUgeSkgOiBiYXNlKHkpIHt9CgogICBmaXJzdF9yZWZlcmVuY2Ug
Zmlyc3QoKSB7cmV0dXJuIGJhc2U6OmZpcnN0KCk7fQogICBmaXJzdF9jb25zdF9yZWZlcmVuY2Ug
Zmlyc3QoKSBjb25zdCB7cmV0dXJuIGJhc2U6OmZpcnN0KCk7fQoKICAgc2Vjb25kX3JlZmVyZW5j
ZSBzZWNvbmQoKSB7cmV0dXJuIGJhc2U6OnNlY29uZCgpO30KICAgc2Vjb25kX2NvbnN0X3JlZmVy
ZW5jZSBzZWNvbmQoKSBjb25zdCB7cmV0dXJuIGJhc2U6OnNlY29uZCgpO30KCiAgIHZvaWQgc3dh
cChjb21wcmVzc2VkX3BhaXImIHkpIHsgYmFzZTo6c3dhcCh5KTsgfQp9OwoKCgoKdGVtcGxhdGUg
PGNsYXNzIFQ+CmNsYXNzIGNvbXByZXNzZWRfcGFpcjxULCBUPgogICA6IHByaXZhdGUgZGV0YWls
czo6Y29tcHJlc3NlZF9wYWlyX2ltcDxULCBULAogICAgICAgICAgICAgOjpib29zdDo6ZGV0YWls
czo6Y29tcHJlc3NlZF9wYWlyX3N3aXRjaDwKICAgICAgICAgICAgICAgICAgICBULAogICAgICAg
ICAgICAgICAgICAgIFQsCiAgICAgICAgICAgICAgICAgICAgOjpib29zdDo6aXNfc2FtZTx0eXBl
bmFtZSByZW1vdmVfY3Y8VD46OnR5cGUsIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZT46OnZh
bHVlLAogICAgICAgICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2VtcHR5PFQ+Ojp2YWx1ZSwKICAg
ICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19lbXB0eTxUPjo6dmFsdWU+Ojp2YWx1ZT4Kewpw
cml2YXRlOgogICB0eXBlZGVmIGRldGFpbHM6OmNvbXByZXNzZWRfcGFpcl9pbXA8VCwgVCwKICAg
ICAgICAgICAgIDo6Ym9vc3Q6OmRldGFpbHM6OmNvbXByZXNzZWRfcGFpcl9zd2l0Y2g8CiAgICAg
ICAgICAgICAgICAgICAgVCwKICAgICAgICAgICAgICAgICAgICBULAogICAgICAgICAgICAgICAg
ICAgIDo6Ym9vc3Q6OmlzX3NhbWU8dHlwZW5hbWUgcmVtb3ZlX2N2PFQ+Ojp0eXBlLCB0eXBlbmFt
ZSByZW1vdmVfY3Y8VD46OnR5cGU+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICA6OmJvb3N0
Ojppc19lbXB0eTxUPjo6dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgOjpib29zdDo6aXNfZW1w
dHk8VD46OnZhbHVlPjo6dmFsdWU+IGJhc2U7CnB1YmxpYzoKICAgdHlwZWRlZiBUIGZpcnN0X3R5
cGU7CiAgIHR5cGVkZWYgVCBzZWNvbmRfdHlwZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3Ry
YWl0czxmaXJzdF90eXBlPjo6cGFyYW1fdHlwZSBmaXJzdF9wYXJhbV90eXBlOwogICB0eXBlZGVm
IHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6cGFyYW1fdHlwZSBzZWNvbmRfcGFy
YW1fdHlwZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBlPjo6cmVm
ZXJlbmNlIGZpcnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxz
ZWNvbmRfdHlwZT46OnJlZmVyZW5jZSBzZWNvbmRfcmVmZXJlbmNlOwogICB0eXBlZGVmIHR5cGVu
YW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+Ojpjb25zdF9yZWZlcmVuY2UgZmlyc3RfY29uc3Rf
cmVmZXJlbmNlOwogICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6
Y29uc3RfcmVmZXJlbmNlIHNlY29uZF9jb25zdF9yZWZlcmVuY2U7CgogICAgICAgICAgICBjb21w
cmVzc2VkX3BhaXIoKSA6IGJhc2UoKSB7fQogICAgICAgICAgICBjb21wcmVzc2VkX3BhaXIoZmly
c3RfcGFyYW1fdHlwZSB4LCBzZWNvbmRfcGFyYW1fdHlwZSB5KSA6IGJhc2UoeCwgeSkge30KCiAg
IGV4cGxpY2l0CgogICAgICBjb21wcmVzc2VkX3BhaXIoZmlyc3RfcGFyYW1fdHlwZSB4KSA6IGJh
c2UoeCkge30KCiAgIGZpcnN0X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gYmFzZTo6Zmlyc3Qo
KTt9CiAgIGZpcnN0X2NvbnN0X3JlZmVyZW5jZSBmaXJzdCgpIGNvbnN0IHtyZXR1cm4gYmFzZTo6
Zmlyc3QoKTt9CgogICBzZWNvbmRfcmVmZXJlbmNlIHNlY29uZCgpIHtyZXR1cm4gYmFzZTo6c2Vj
b25kKCk7fQogICBzZWNvbmRfY29uc3RfcmVmZXJlbmNlIHNlY29uZCgpIGNvbnN0IHtyZXR1cm4g
YmFzZTo6c2Vjb25kKCk7fQoKICAgdm9pZCBzd2FwKDo6Ym9vc3Q6OmNvbXByZXNzZWRfcGFpcjxU
LFQ+JiB5KSB7IGJhc2U6OnN3YXAoeSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3Mg
VDI+CmlubGluZQp2b2lkCnN3YXAoY29tcHJlc3NlZF9wYWlyPFQxLCBUMj4mIHgsIGNvbXByZXNz
ZWRfcGFpcjxUMSwgVDI+JiB5KQp7CiAgIHguc3dhcCh5KTsKfQoKfQojIDIxICIvaG9tZS9jb21w
YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb21wcmVzc2VkX3BhaXIuaHBwIiAyIDMKIyAxMzAg
Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9y
X2FkYXB0b3JzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvY29uY2VwdF9jaGVjay5ocHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC9jb25jZXB0X2NoZWNrLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs
aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2NvbnZlcnNpb25fdHJhaXRzLmhwcCIgMSAzCiMg
MTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNlcHRfY2hlY2suaHBw
IiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlLmhw
cCIgMSAzCiMgMTAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGUuaHBw
IiAzCm5hbWVzcGFjZSBib29zdCB7CgoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgc3RydWN0IHR5
cGUge307Cgp9CiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNl
cHRfY2hlY2suaHBwIiAyIDMKIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvY29uY2VwdF9jaGVjay5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKCgoKCgoKCnRlbXBsYXRl
IDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoY29u
c3QgVCYpIHsgfQoKCnRlbXBsYXRlIDxjbGFzcyBDb25jZXB0PgppbmxpbmUgdm9pZCBmdW5jdGlv
bl9yZXF1aXJlcyh0eXBlPENvbmNlcHQ+KiA9IDApCnsKCiAgdm9pZCAoQ29uY2VwdDo6KngpKCkg
PSAmIENvbmNlcHQ6OmNvbnN0cmFpbnRzOwogIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2Fybmlu
Zyh4KTsKCn0KIyAxMzYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNl
cHRfY2hlY2suaHBwIiAzCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgpzdHJ1Y3QgcmVxdWly
ZV9zYW1lIHsgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgcmVxdWlyZV9zYW1lPFQsVD4g
eyB0eXBlZGVmIFQgdHlwZTsgfTsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBzdHJ1Y3Qg
SW50ZWdlckNvbmNlcHQgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKCiAgICAgIHguZXJyb3Jf
dHlwZV9tdXN0X2JlX2FuX2ludGVnZXJfdHlwZSgpOwoKICAgIH0KICAgIFQgeDsKICB9OwoKICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlckNvbmNlcHQ8c2hvcnQ+IHsgdm9pZCBjb25zdHJhaW50
cygpIHt9IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IEludGVnZXJDb25jZXB0PHVuc2lnbmVkIHNo
b3J0PiB7IHZvaWQgY29uc3RyYWludHMoKSB7fSB9OwogIHRlbXBsYXRlIDw+IHN0cnVjdCBJbnRl
Z2VyQ29uY2VwdDxpbnQ+IHsgdm9pZCBjb25zdHJhaW50cygpIHt9IH07CiAgdGVtcGxhdGUgPD4g
c3RydWN0IEludGVnZXJDb25jZXB0PHVuc2lnbmVkIGludD4geyB2b2lkIGNvbnN0cmFpbnRzKCkg
e30gfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlckNvbmNlcHQ8bG9uZz4geyB2b2lkIGNv
bnN0cmFpbnRzKCkge30gfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlckNvbmNlcHQ8dW5z
aWduZWQgbG9uZz4geyB2b2lkIGNvbnN0cmFpbnRzKCkge30gfTsKCgoKICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KICBzdHJ1Y3QgU2lnbmVkSW50ZWdlckNvbmNlcHQgewogICAgdm9pZCBjb25zdHJhaW50
cygpIHsKCiAgICAgIHguZXJyb3JfdHlwZV9tdXN0X2JlX2Ffc2lnbmVkX2ludGVnZXJfdHlwZSgp
OwoKICAgIH0KICAgIFQgeDsKICB9OwoKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgU2lnbmVkSW50ZWdl
ckNvbmNlcHQ8c2hvcnQ+IHsgdm9pZCBjb25zdHJhaW50cygpIHt9IH07CiAgdGVtcGxhdGUgPD4g
c3RydWN0IFNpZ25lZEludGVnZXJDb25jZXB0PGludD4geyB2b2lkIGNvbnN0cmFpbnRzKCkge30g
fTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgU2lnbmVkSW50ZWdlckNvbmNlcHQ8bG9uZz4geyB2b2lk
IGNvbnN0cmFpbnRzKCkge30gfTsKCiAgdGVtcGxhdGUgPD4gc3RydWN0IFNpZ25lZEludGVnZXJD
b25jZXB0PGxvbmcgbG9uZz4geyB2b2lkIGNvbnN0cmFpbnRzKCkge30gfTsKCgoKCiAgdGVtcGxh
dGUgPGNsYXNzIFQ+CiAgc3RydWN0IFVuc2lnbmVkSW50ZWdlckNvbmNlcHQgewogICAgdm9pZCBj
b25zdHJhaW50cygpIHsKCiAgICAgIHguZXJyb3JfdHlwZV9tdXN0X2JlX2FuX3Vuc2lnbmVkX2lu
dGVnZXJfdHlwZSgpOwoKICAgIH0KICAgIFQgeDsKICB9OwoKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBzaG9ydD4KICAgIHsgdm9pZCBjb25zdHJh
aW50cygpIHt9IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IFVuc2lnbmVkSW50ZWdlckNvbmNlcHQ8
dW5zaWduZWQgaW50PgogICAgeyB2b2lkIGNvbnN0cmFpbnRzKCkge30gfTsKICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBsb25nPgogICAgeyB2b2lk
IGNvbnN0cmFpbnRzKCkge30gfTsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0
IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7
CiAgICAgIFRUIGE7CiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhhKTsKICAg
IH0KICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IEFzc2lnbmFibGVDb25jZXB0
CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKCiAgICAgIGEgPSBhOwoKICAgICAgY29uc3Rf
Y29uc3RyYWludHMoYSk7CiAgICB9CiAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IFRU
JiBiKSB7CgogICAgICBhID0gYjsKCiAgICB9CiAgICBUVCBhOwogIH07CgogIHRlbXBsYXRlIDxj
bGFzcyBUVD4KICBzdHJ1Y3QgQ29weUNvbnN0cnVjdGlibGVDb25jZXB0CiAgewogICAgdm9pZCBj
b25zdHJhaW50cygpIHsKICAgICAgVFQgYShiKTsKICAgICAgVFQqIHB0ciA9ICZhOwogICAgICBj
b25zdF9jb25zdHJhaW50cyhhKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5n
KHB0cik7CiAgICB9CiAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IFRUJiBhKSB7CiAg
ICAgIFRUIGMoYSk7CiAgICAgIGNvbnN0IFRUKiBwdHIgPSAmYTsKICAgICAgaWdub3JlX3VudXNl
ZF92YXJpYWJsZV93YXJuaW5nKGMpOwogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5p
bmcocHRyKTsKICAgIH0KICAgIFRUIGI7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBz
dHJ1Y3QgU0dJQXNzaWduYWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewog
ICAgICBUVCBiKGEpOwoKICAgICAgYSA9IGE7CgogICAgICBjb25zdF9jb25zdHJhaW50cyhhKTsK
ICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGIpOwogICAgfQogICAgdm9pZCBj
b25zdF9jb25zdHJhaW50cyhjb25zdCBUVCYgYikgewogICAgICBUVCBjKGIpOwoKICAgICAgYSA9
IGI7CgogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYyk7CiAgICB9CiAgICBU
VCBhOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZPgogIHN0cnVjdCBDb252ZXJ0
aWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBZIHkgPSB4Owog
ICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoeSk7CiAgICB9CiAgICBYIHg7CiAg
fTsKIyAyOTIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNlcHRfY2hl
Y2suaHBwIiAzCiAgdGVtcGxhdGUgPGNsYXNzIFRUPgogIHZvaWQgcmVxdWlyZV9ib29sZWFuX2V4
cHIoY29uc3QgVFQmIHQpIHsKICAgIGJvb2wgeCA9IHQ7CiAgICBpZ25vcmVfdW51c2VkX3Zhcmlh
YmxlX3dhcm5pbmcoeCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IEVxdWFs
aXR5Q29tcGFyYWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBy
ZXF1aXJlX2Jvb2xlYW5fZXhwcihhID09IGIpOwogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhwcihh
ICE9IGIpOwogICAgfQogICAgVFQgYSwgYjsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAg
c3RydWN0IExlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRz
KCkgewogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhwcihhIDwgYik7CiAgICB9CiAgICBUVCBhLCBi
OwogIH07CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IENvbXBhcmFibGVDb25jZXB0
CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgcmVxdWlyZV9ib29sZWFuX2V4cHIo
YSA8IGIpOwogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhwcihhID4gYik7CiAgICAgIHJlcXVpcmVf
Ym9vbGVhbl9leHByKGEgPD0gYik7CiAgICAgIHJlcXVpcmVfYm9vbGVhbl9leHByKGEgPj0gYik7
CiAgICB9CiAgICBUVCBhLCBiOwogIH07CiMgMzUyICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC9jb25jZXB0X2NoZWNrLmhwcCIgMwogIHRlbXBsYXRlIDxjbGFzcyBGaXJzdCwg
Y2xhc3MgU2Vjb25kPiBzdHJ1Y3QgRXF1YWxPcENvbmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRzKCkg
eyAodm9pZCljb25zdHJhaW50c18oKTsgfSBib29sIGNvbnN0cmFpbnRzXygpIHsgcmV0dXJuIGEg
PT0gYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgRmlyc3QsIGNs
YXNzIFNlY29uZD4gc3RydWN0IE5vdEVxdWFsT3BDb25jZXB0IHsgdm9pZCBjb25zdHJhaW50cygp
IHsgKHZvaWQpY29uc3RyYWludHNfKCk7IH0gYm9vbCBjb25zdHJhaW50c18oKSB7IHJldHVybiBh
ICE9IGI7IH0gRmlyc3QgYTsgU2Vjb25kIGI7IH07CiAgdGVtcGxhdGUgPGNsYXNzIEZpcnN0LCBj
bGFzcyBTZWNvbmQ+IHN0cnVjdCBMZXNzVGhhbk9wQ29uY2VwdCB7IHZvaWQgY29uc3RyYWludHMo
KSB7ICh2b2lkKWNvbnN0cmFpbnRzXygpOyB9IGJvb2wgY29uc3RyYWludHNfKCkgeyByZXR1cm4g
YSA8IGI7IH0gRmlyc3QgYTsgU2Vjb25kIGI7IH07CiAgdGVtcGxhdGUgPGNsYXNzIEZpcnN0LCBj
bGFzcyBTZWNvbmQ+IHN0cnVjdCBMZXNzRXF1YWxPcENvbmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRz
KCkgeyAodm9pZCljb25zdHJhaW50c18oKTsgfSBib29sIGNvbnN0cmFpbnRzXygpIHsgcmV0dXJu
IGEgPD0gYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgRmlyc3Qs
IGNsYXNzIFNlY29uZD4gc3RydWN0IEdyZWF0ZXJUaGFuT3BDb25jZXB0IHsgdm9pZCBjb25zdHJh
aW50cygpIHsgKHZvaWQpY29uc3RyYWludHNfKCk7IH0gYm9vbCBjb25zdHJhaW50c18oKSB7IHJl
dHVybiBhID4gYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgRmly
c3QsIGNsYXNzIFNlY29uZD4gc3RydWN0IEdyZWF0ZXJFcXVhbE9wQ29uY2VwdCB7IHZvaWQgY29u
c3RyYWludHMoKSB7ICh2b2lkKWNvbnN0cmFpbnRzXygpOyB9IGJvb2wgY29uc3RyYWludHNfKCkg
eyByZXR1cm4gYSA+PSBiOyB9IEZpcnN0IGE7IFNlY29uZCBiOyB9OwoKICB0ZW1wbGF0ZSA8Y2xh
c3MgUmV0LCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPiBzdHJ1Y3QgUGx1c09wQ29uY2VwdCB7
IHZvaWQgY29uc3RyYWludHMoKSB7ICh2b2lkKWNvbnN0cmFpbnRzXygpOyB9IFJldCBjb25zdHJh
aW50c18oKSB7IHJldHVybiBhICsgYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0
ZSA8Y2xhc3MgUmV0LCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPiBzdHJ1Y3QgVGltZXNPcENv
bmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRzKCkgeyAodm9pZCljb25zdHJhaW50c18oKTsgfSBSZXQg
Y29uc3RyYWludHNfKCkgeyByZXR1cm4gYSAqIGI7IH0gRmlyc3QgYTsgU2Vjb25kIGI7IH07CiAg
dGVtcGxhdGUgPGNsYXNzIFJldCwgY2xhc3MgRmlyc3QsIGNsYXNzIFNlY29uZD4gc3RydWN0IERp
dmlkZU9wQ29uY2VwdCB7IHZvaWQgY29uc3RyYWludHMoKSB7ICh2b2lkKWNvbnN0cmFpbnRzXygp
OyB9IFJldCBjb25zdHJhaW50c18oKSB7IHJldHVybiBhIC8gYjsgfSBGaXJzdCBhOyBTZWNvbmQg
YjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgUmV0LCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPiBz
dHJ1Y3QgU3VidHJhY3RPcENvbmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRzKCkgeyAodm9pZCljb25z
dHJhaW50c18oKTsgfSBSZXQgY29uc3RyYWludHNfKCkgeyByZXR1cm4gYSAtIGI7IH0gRmlyc3Qg
YTsgU2Vjb25kIGI7IH07CiAgdGVtcGxhdGUgPGNsYXNzIFJldCwgY2xhc3MgRmlyc3QsIGNsYXNz
IFNlY29uZD4gc3RydWN0IE1vZE9wQ29uY2VwdCB7IHZvaWQgY29uc3RyYWludHMoKSB7ICh2b2lk
KWNvbnN0cmFpbnRzXygpOyB9IFJldCBjb25zdHJhaW50c18oKSB7IHJldHVybiBhICUgYjsgfSBG
aXJzdCBhOyBTZWNvbmQgYjsgfTsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIFJl
dHVybj4KICBzdHJ1Y3QgR2VuZXJhdG9yQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMo
KSB7CiAgICAgIGNvbnN0IFJldHVybiYgciA9IGYoKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJp
YWJsZV93YXJuaW5nKHIpOwogICAgfQogICAgRnVuYyBmOwogIH07CgoKCiAgdGVtcGxhdGUgPGNs
YXNzIEZ1bmM+CiAgc3RydWN0IEdlbmVyYXRvckNvbmNlcHQ8RnVuYyx2b2lkPgogIHsKICAgIHZv
aWQgY29uc3RyYWludHMoKSB7CiAgICAgIGYoKTsKICAgIH0KICAgIEZ1bmMgZjsKICB9OwoKCiAg
dGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIFJldHVybiwgY2xhc3MgQXJnPgogIHN0cnVjdCBV
bmFyeUZ1bmN0aW9uQ29uY2VwdAogIHsKCiAgICBVbmFyeUZ1bmN0aW9uQ29uY2VwdCgpOwoKICAg
IHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIHIgPSBmKGFyZyk7CiAgICB9CiAgICBGdW5jIGY7
CiAgICBBcmcgYXJnOwogICAgUmV0dXJuIHI7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBGdW5j
LCBjbGFzcyBBcmc+CiAgc3RydWN0IFVuYXJ5RnVuY3Rpb25Db25jZXB0PEZ1bmMsIHZvaWQsIEFy
Zz4gewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZihhcmcpOwogICAgfQogICAgRnVu
YyBmOwogICAgQXJnIGFyZzsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIFJl
dHVybiwgY2xhc3MgRmlyc3QsIGNsYXNzIFNlY29uZD4KICBzdHJ1Y3QgQmluYXJ5RnVuY3Rpb25D
b25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgciA9IGYoZmlyc3QsIHNl
Y29uZCk7CiAgICB9CiAgICBGdW5jIGY7CiAgICBGaXJzdCBmaXJzdDsKICAgIFNlY29uZCBzZWNv
bmQ7CiAgICBSZXR1cm4gcjsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIEZp
cnN0LCBjbGFzcyBTZWNvbmQ+CiAgc3RydWN0IEJpbmFyeUZ1bmN0aW9uQ29uY2VwdDxGdW5jLCB2
b2lkLCBGaXJzdCwgU2Vjb25kPgogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGYo
Zmlyc3QsIHNlY29uZCk7CiAgICB9CiAgICBGdW5jIGY7CiAgICBGaXJzdCBmaXJzdDsKICAgIFNl
Y29uZCBzZWNvbmQ7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBBcmc+CiAg
c3RydWN0IFVuYXJ5UHJlZGljYXRlQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7
CiAgICAgIHJlcXVpcmVfYm9vbGVhbl9leHByKGYoYXJnKSk7CiAgICB9CiAgICBGdW5jIGY7CiAg
ICBBcmcgYXJnOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBGaXJzdCwgY2xh
c3MgU2Vjb25kPgogIHN0cnVjdCBCaW5hcnlQcmVkaWNhdGVDb25jZXB0CiAgewogICAgdm9pZCBj
b25zdHJhaW50cygpIHsKICAgICAgcmVxdWlyZV9ib29sZWFuX2V4cHIoZihhLCBiKSk7CiAgICB9
CiAgICBGdW5jIGY7CiAgICBGaXJzdCBhOwogICAgU2Vjb25kIGI7CiAgfTsKCgogIHRlbXBsYXRl
IDxjbGFzcyBGdW5jLCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPgogIHN0cnVjdCBDb25zdF9C
aW5hcnlQcmVkaWNhdGVDb25jZXB0IHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGNv
bnN0X2NvbnN0cmFpbnRzKGYpOwogICAgfQogICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhjb25z
dCBGdW5jJiBmdW4pIHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8QmluYXJ5UHJlZGljYXRlQ29u
Y2VwdDxGdW5jLCBGaXJzdCwgU2Vjb25kPiA+KCk7CgogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhw
cihmdW4oYSwgYikpOwogICAgfQogICAgRnVuYyBmOwogICAgRmlyc3QgYTsKICAgIFNlY29uZCBi
OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBSZXR1cm4+CiAgc3RydWN0IEFk
YXB0YWJsZUdlbmVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIEZ1bmM6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgICB0
eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJ
Q19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCAoaXNfY29udmVydGlibGU8cmVzdWx0X3R5cGUs
IFJldHVybj46OnZhbHVlKSApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNDgyOwog
ICAgICBmdW5jdGlvbl9yZXF1aXJlczwgR2VuZXJhdG9yQ29uY2VwdDxGdW5jLCByZXN1bHRfdHlw
ZT4gPigpOwogICAgfQogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBSZXR1cm4s
IGNsYXNzIEFyZz4KICBzdHJ1Y3QgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbkNvbmNlcHQKICB7CiAg
ICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bmM6OmFyZ3Vt
ZW50X3R5cGUgYXJndW1lbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5jOjpyZXN1
bHRfdHlwZSByZXN1bHRfdHlwZTsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0
X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSgg
KGlzX2NvbnZlcnRpYmxlPHJlc3VsdF90eXBlLCBSZXR1cm4+Ojp2YWx1ZSkgKSA+KT4gYm9vc3Rf
c3RhdGljX2Fzc2VydF90eXBlZGVmXzQ5MzsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNf
YXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChi
b29sKSggKGlzX2NvbnZlcnRpYmxlPEFyZywgYXJndW1lbnRfdHlwZT46OnZhbHVlKSApID4pPiBi
b29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNDk0OwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwg
VW5hcnlGdW5jdGlvbkNvbmNlcHQ8RnVuYywgcmVzdWx0X3R5cGUsIGFyZ3VtZW50X3R5cGU+ID4o
KTsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuYywgY2xhc3MgUmV0dXJuLCBjbGFz
cyBGaXJzdCwgY2xhc3MgU2Vjb25kPgogIHN0cnVjdCBBZGFwdGFibGVCaW5hcnlGdW5jdGlvbkNv
bmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IEZ1bmM6OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3RfYXJndW1lbnRfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBGdW5jOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBzZWNvbmRfYXJndW1lbnRf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5jOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlw
ZTsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJv
b3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggKGlzX2NvbnZlcnRpYmxlPHJl
c3VsdF90eXBlLCBSZXR1cm4+Ojp2YWx1ZSkgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBl
ZGVmXzUwNjsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVv
Zig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggKGlzX2NvbnZlcnRp
YmxlPEZpcnN0LCBmaXJzdF9hcmd1bWVudF90eXBlPjo6dmFsdWUpICkgPik+IGJvb3N0X3N0YXRp
Y19hc3NlcnRfdHlwZWRlZl81MDc7CiAgICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2Vy
dF90ZXN0PCBzaXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCko
IChpc19jb252ZXJ0aWJsZTxTZWNvbmQsIHNlY29uZF9hcmd1bWVudF90eXBlPjo6dmFsdWUpICkg
Pik+IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl81MDg7CiAgICAgIGZ1bmN0aW9uX3JlcXVp
cmVzPCBCaW5hcnlGdW5jdGlvbkNvbmNlcHQ8RnVuYywgcmVzdWx0X3R5cGUsCiAgICAgICAgZmly
c3RfYXJndW1lbnRfdHlwZSwgc2Vjb25kX2FyZ3VtZW50X3R5cGU+ID4oKTsKICAgIH0KICB9OwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuYywgY2xhc3MgQXJnPgogIHN0cnVjdCBBZGFwdGFibGVQcmVk
aWNhdGVDb25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZnVuY3Rpb25f
cmVxdWlyZXM8IFVuYXJ5UHJlZGljYXRlQ29uY2VwdDxGdW5jLCBBcmc+ID4oKTsKICAgICAgZnVu
Y3Rpb25fcmVxdWlyZXM8IEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb25Db25jZXB0PEZ1bmMsIGJvb2ws
IEFyZz4gPigpOwogICAgfQogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBGaXJz
dCwgY2xhc3MgU2Vjb25kPgogIHN0cnVjdCBBZGFwdGFibGVCaW5hcnlQcmVkaWNhdGVDb25jZXB0
CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IEJp
bmFyeVByZWRpY2F0ZUNvbmNlcHQ8RnVuYywgRmlyc3QsIFNlY29uZD4gPigpOwogICAgICBmdW5j
dGlvbl9yZXF1aXJlczwgQWRhcHRhYmxlQmluYXJ5RnVuY3Rpb25Db25jZXB0PEZ1bmMsIGJvb2ws
IEZpcnN0LCBTZWNvbmQ+ID4oKTsKICAgIH0KICB9OwoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+
CiAgc3RydWN0IFRyaXZpYWxJdGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRz
KCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzaWduYWJsZUNvbmNlcHQ8VFQ+ID4oKTsK
ICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdDxUVD4g
PigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdDxU
VD4gPigpOwogICAgICAodm9pZCkqaTsKICAgIH0KICAgIFRUIGk7CiAgfTsKCiAgdGVtcGxhdGUg
PGNsYXNzIFRUPgogIHN0cnVjdCBNdXRhYmxlX1RyaXZpYWxJdGVyYXRvckNvbmNlcHQKICB7CiAg
ICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgVHJpdmlhbEl0
ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwogICAgICAqaSA9ICpqOwogICAgfQogICAgVFQgaSwgajsK
ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IElucHV0SXRlcmF0b3JDb25jZXB0
CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IFRy
aXZpYWxJdGVyYXRvckNvbmNlcHQ8VFQ+ID4oKTsKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0
ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6ZGlmZmVyZW5jZV90eXBlIEQ7CgoKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OnJlZmVyZW5jZSBSOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6cG9pbnRlciBQOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6aXRlcmF0b3JfY2F0
ZWdvcnkgQzsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IENvbnZlcnRpYmxlQ29uY2VwdDxDLCBz
dGQ6OmlucHV0X2l0ZXJhdG9yX3RhZz4gPigpOwoKICAgICAgKytpOwogICAgICBpKys7CiAgICB9
CiAgICBUVCBpOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVCwgY2xhc3MgVmFsdWVUPgogIHN0
cnVjdCBPdXRwdXRJdGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewog
ICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzaWduYWJsZUNvbmNlcHQ8VFQ+ID4oKTsKICAgICAg
KytpOwogICAgICBpKys7CiAgICAgICppKysgPSB0OwogICAgfQogICAgVFQgaSwgajsKICAgIFZh
bHVlVCB0OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBzdHJ1Y3QgRm9yd2FyZEl0ZXJh
dG9yQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3Jl
cXVpcmVzPCBJbnB1dEl0ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46Oml0ZXJhdG9yX2NhdGVnb3J5IEM7CiAgICAg
IGZ1bmN0aW9uX3JlcXVpcmVzPCBDb252ZXJ0aWJsZUNvbmNlcHQ8Qywgc3RkOjpmb3J3YXJkX2l0
ZXJhdG9yX3RhZz4gPigpOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJh
aXRzPFRUPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgcmVmZXJlbmNlIHIgPSAqaTsKICAg
ICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIpOwoKICAgIH0KICAgIFRUIGk7CiAg
fTsKCiAgdGVtcGxhdGUgPGNsYXNzIFRUPgogIHN0cnVjdCBNdXRhYmxlX0ZvcndhcmRJdGVyYXRv
ckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1
aXJlczwgRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwogICAgICAqaSsrID0gKmk7CiAg
ICB9CiAgICBUVCBpOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBzdHJ1Y3QgQmlkaXJl
Y3Rpb25hbEl0ZXJhdG9yQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAg
IGZ1bmN0aW9uX3JlcXVpcmVzPCBGb3J3YXJkSXRlcmF0b3JDb25jZXB0PFRUPiA+KCk7CgogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6aXRlcmF0b3JfY2F0
ZWdvcnkgQzsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IENvbnZlcnRpYmxlQ29uY2VwdDxDLAog
ICAgICAgIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWc+ID4oKTsKCiAgICAgIC0taTsK
ICAgICAgaS0tOwogICAgfQogICAgVFQgaTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAg
c3RydWN0IE11dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdAogIHsKICAgIHZvaWQg
Y29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBCaWRpcmVjdGlvbmFsSXRl
cmF0b3JDb25jZXB0PFRUPiA+KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBNdXRhYmxlX0Zv
cndhcmRJdGVyYXRvckNvbmNlcHQ8VFQ+ID4oKTsKICAgICAgKmktLSA9ICppOwogICAgfQogICAg
VFQgaTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFRUPgogIHN0cnVjdCBSYW5kb21BY2Nlc3NJ
dGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlv
bl9yZXF1aXJlczwgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwogICAgICBm
dW5jdGlvbl9yZXF1aXJlczwgQ29tcGFyYWJsZUNvbmNlcHQ8VFQ+ID4oKTsKCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8VFQ+OjppdGVyYXRvcl9jYXRlZ29yeSBD
OwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQ29udmVydGlibGVDb25jZXB0PCBDLAogICAgICAg
IHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+ID4oKTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OnJlZmVyZW5jZSBSOwoKCiAgICAgIGkgKz0g
bjsKICAgICAgaSA9IGkgKyBuOyBpID0gbiArIGk7CiAgICAgIGkgLT0gbjsKICAgICAgaSA9IGkg
LSBuOwogICAgICBuID0gaSAtIGo7CiAgICAgICh2b2lkKWlbbl07CiAgICB9CiAgICBUVCBhLCBi
OwogICAgVFQgaSwgajsKCiAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OmRp
ZmZlcmVuY2VfdHlwZSBuOwoKCgogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBzdHJ1Y3Qg
TXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFp
bnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25j
ZXB0PFRUPiA+KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBNdXRhYmxlX0JpZGlyZWN0aW9u
YWxJdGVyYXRvckNvbmNlcHQ8VFQ+ID4oKTsKICAgICAgaVtuXSA9ICppOwogICAgfQogICAgVFQg
aTsKCiAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OmRpZmZlcmVuY2VfdHlw
ZSBuOwoKCgogIH07CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CiAgc3RydWN0IENv
bnRhaW5lckNvbmNlcHQKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVf
dHlwZSB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6
c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpjb25z
dF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWlu
ZXI6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29u
dGFpbmVyOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB2b2lkIGNvbnN0cmFp
bnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgSW5wdXRJdGVyYXRvckNvbmNlcHQ8Y29u
c3RfaXRlcmF0b3I+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc2lnbmFibGVDb25j
ZXB0PENvbnRhaW5lcj4gPigpOwogICAgICBjb25zdF9jb25zdHJhaW50cyhjKTsKICAgIH0KICAg
IHZvaWQgY29uc3RfY29uc3RyYWludHMoY29uc3QgQ29udGFpbmVyJiBjKSB7CiAgICAgIGkgPSBj
LmJlZ2luKCk7CiAgICAgIGkgPSBjLmVuZCgpOwogICAgICBuID0gYy5zaXplKCk7CiAgICAgIG4g
PSBjLm1heF9zaXplKCk7CiAgICAgIGIgPSBjLmVtcHR5KCk7CiAgICB9CiAgICBDb250YWluZXIg
YzsKICAgIGJvb2wgYjsKICAgIGNvbnN0X2l0ZXJhdG9yIGk7CiAgICBzaXplX3R5cGUgbjsKICB9
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgogIHN0cnVjdCBNdXRhYmxlX0NvbnRhaW5l
ckNvbmNlcHQKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSB2
YWx1ZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnJlZmVyZW5jZSByZWZl
cmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcmF0b3I7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHZv
aWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBDb250YWluZXJDb25j
ZXB0PENvbnRhaW5lcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzaWduYWJsZUNv
bmNlcHQ8dmFsdWVfdHlwZT4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgSW5wdXRJdGVy
YXRvckNvbmNlcHQ8aXRlcmF0b3I+ID4oKTsKCiAgICAgIGkgPSBjLmJlZ2luKCk7CiAgICAgIGkg
PSBjLmVuZCgpOwogICAgICBjLnN3YXAoYzIpOwogICAgfQogICAgaXRlcmF0b3IgaTsKICAgIENv
bnRhaW5lciBjLCBjMjsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZENvbnRhaW5lcj4K
ICBzdHJ1Y3QgRm9yd2FyZENvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRz
KCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQ29udGFpbmVyQ29uY2VwdDxGb3J3YXJkQ29u
dGFpbmVyPiA+KCk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRm9yd2FyZENvbnRhaW5lcjo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBGb3J3
YXJkSXRlcmF0b3JDb25jZXB0PGNvbnN0X2l0ZXJhdG9yPiA+KCk7CiAgICB9CiAgfTsKCiAgdGVt
cGxhdGUgPGNsYXNzIEZvcndhcmRDb250YWluZXI+CiAgc3RydWN0IE11dGFibGVfRm9yd2FyZENv
bnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlv
bl9yZXF1aXJlczwgRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8Rm9yd2FyZENvbnRhaW5lcj4gPigp
OwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgTXV0YWJsZV9Db250YWluZXJDb25jZXB0PEZvcndh
cmRDb250YWluZXI+ID4oKTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkQ29udGFpbmVy
OjppdGVyYXRvciBpdGVyYXRvcjsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IE11dGFibGVfRm9y
d2FyZEl0ZXJhdG9yQ29uY2VwdDxpdGVyYXRvcj4gPigpOwogICAgfQogIH07CgogIHRlbXBsYXRl
IDxjbGFzcyBSZXZlcnNpYmxlQ29udGFpbmVyPgogIHN0cnVjdCBSZXZlcnNpYmxlQ29udGFpbmVy
Q29uY2VwdAogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgUmV2ZXJzaWJsZUNvbnRhaW5lcjo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFJldmVyc2li
bGVDb250YWluZXI6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKCiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJl
czwgRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8UmV2ZXJzaWJsZUNvbnRhaW5lcj4gPigpOwogICAg
ICBmdW5jdGlvbl9yZXF1aXJlczwgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxjb25zdF9p
dGVyYXRvcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwKICAgICAgICBCaWRpcmVjdGlv
bmFsSXRlcmF0b3JDb25jZXB0PGNvbnN0X3JldmVyc2VfaXRlcmF0b3I+ID4oKTsKICAgICAgY29u
c3RfY29uc3RyYWludHMoYyk7CiAgICB9CiAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0
IFJldmVyc2libGVDb250YWluZXImIGMpIHsKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBp
ID0gYy5yYmVnaW4oKTsKICAgICAgaSA9IGMucmVuZCgpOwogICAgfQogICAgUmV2ZXJzaWJsZUNv
bnRhaW5lciBjOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBSZXZlcnNpYmxlQ29udGFpbmVyPgog
IHN0cnVjdCBNdXRhYmxlX1JldmVyc2libGVDb250YWluZXJDb25jZXB0CiAgewogICAgdHlwZWRl
ZiB0eXBlbmFtZSBSZXZlcnNpYmxlQ29udGFpbmVyOjppdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgUmV2ZXJzaWJsZUNvbnRhaW5lcjo6cmV2ZXJzZV9pdGVyYXRvciByZXZl
cnNlX2l0ZXJhdG9yOwoKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3Jl
cXVpcmVzPCBSZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxSZXZlcnNpYmxlQ29udGFpbmVyPiA+
KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICAgIE11dGFibGVfRm9yd2FyZENvbnRh
aW5lckNvbmNlcHQ8UmV2ZXJzaWJsZUNvbnRhaW5lcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1
aXJlczwgTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PGl0ZXJhdG9yPiA+KCk7
CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICAgIE11dGFibGVfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yQ29uY2VwdDxyZXZlcnNlX2l0ZXJhdG9yPiA+KCk7CgogICAgICByZXZlcnNlX2l0ZXJh
dG9yIGkgPSBjLnJiZWdpbigpOwogICAgICBpID0gYy5yZW5kKCk7CiAgICB9CiAgICBSZXZlcnNp
YmxlQ29udGFpbmVyIGM7CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0NvbnRh
aW5lcj4KICBzdHJ1Y3QgUmFuZG9tQWNjZXNzQ29udGFpbmVyQ29uY2VwdAogIHsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpzaXplX3R5cGUgc2l6ZV90eXBlOwog
ICAgdHlwZWRlZiB0eXBlbmFtZSBSYW5kb21BY2Nlc3NDb250YWluZXI6OmNvbnN0X3JlZmVyZW5j
ZSBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFJhbmRvbUFjY2Vzc0NvbnRh
aW5lcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IFJhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0
aW9uX3JlcXVpcmVzPCBSZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxSYW5kb21BY2Nlc3NDb250
YWluZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IFJhbmRvbUFjY2Vzc0l0ZXJhdG9y
Q29uY2VwdDxjb25zdF9pdGVyYXRvcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwKICAg
ICAgICBSYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcj4g
PigpOwoKICAgICAgY29uc3RfY29uc3RyYWludHMoYyk7CiAgICB9CiAgICB2b2lkIGNvbnN0X2Nv
bnN0cmFpbnRzKGNvbnN0IFJhbmRvbUFjY2Vzc0NvbnRhaW5lciYgYykgewogICAgICBjb25zdF9y
ZWZlcmVuY2UgciA9IGNbbl07CiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhy
KTsKICAgIH0KICAgIFJhbmRvbUFjY2Vzc0NvbnRhaW5lciBjOwogICAgc2l6ZV90eXBlIG47CiAg
fTsKCiAgdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0NvbnRhaW5lcj4KICBzdHJ1Y3QgTXV0
YWJsZV9SYW5kb21BY2Nlc3NDb250YWluZXJDb25jZXB0CiAgewogICAgdHlwZWRlZiB0eXBlbmFt
ZSBSYW5kb21BY2Nlc3NDb250YWluZXI6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIFJhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgUmFuZG9tQWNjZXNzQ29udGFpbmVyOjppdGVyYXRvciBpdGVyYXRv
cjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpyZXZlcnNlX2l0
ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CgogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAg
ZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAgICAgUmFuZG9tQWNjZXNzQ29udGFpbmVyQ29uY2VwdDxS
YW5kb21BY2Nlc3NDb250YWluZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAg
ICAgTXV0YWJsZV9SZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxSYW5kb21BY2Nlc3NDb250YWlu
ZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IE11dGFibGVfUmFuZG9tQWNjZXNzSXRl
cmF0b3JDb25jZXB0PGl0ZXJhdG9yPiA+KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAg
ICAgIE11dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PHJldmVyc2VfaXRlcmF0b3I+
ID4oKTsKCiAgICAgIHJlZmVyZW5jZSByID0gY1tpXTsKICAgICAgaWdub3JlX3VudXNlZF92YXJp
YWJsZV93YXJuaW5nKHIpOwogICAgfQogICAgc2l6ZV90eXBlIGk7CiAgICBSYW5kb21BY2Nlc3ND
b250YWluZXIgYzsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFNlcXVlbmNlPgogIHN0cnVjdCBT
ZXF1ZW5jZUNvbmNlcHQKICB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6cmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgU2VxdWVuY2U6OmNvbnN0X3JlZmVy
ZW5jZSBjb25zdF9yZWZlcmVuY2U7CgogICAgdm9pZCBjb25zdHJhaW50cygpIHsKCgoKICAgICAg
ZnVuY3Rpb25fcmVxdWlyZXM8IE11dGFibGVfRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8U2VxdWVu
Y2U+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29u
Y2VwdDxTZXF1ZW5jZT4gPigpOwoKICAgICAgU2VxdWVuY2UKICAgICAgICBjKG4pLAogICAgICAg
IGMyKG4sIHQpLAogICAgICAgIGMzKGZpcnN0LCBsYXN0KTsKCiAgICAgIGMuaW5zZXJ0KHAsIHQp
OwogICAgICBjLmluc2VydChwLCBuLCB0KTsKICAgICAgYy5pbnNlcnQocCwgZmlyc3QsIGxhc3Qp
OwoKICAgICAgYy5lcmFzZShwKTsKICAgICAgYy5lcmFzZShwLCBxKTsKCiAgICAgIHJlZmVyZW5j
ZSByID0gYy5mcm9udCgpOwoKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGMp
OwogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYzIpOwogICAgICBpZ25vcmVf
dW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYzMpOwogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxl
X3dhcm5pbmcocik7CiAgICAgIGNvbnN0X2NvbnN0cmFpbnRzKGMpOwogICAgfQogICAgdm9pZCBj
b25zdF9jb25zdHJhaW50cyhjb25zdCBTZXF1ZW5jZSYgYykgewogICAgICBjb25zdF9yZWZlcmVu
Y2UgciA9IGMuZnJvbnQoKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIp
OwogICAgfQogICAgdHlwZW5hbWUgU2VxdWVuY2U6OnZhbHVlX3R5cGUgdDsKICAgIHR5cGVuYW1l
IFNlcXVlbmNlOjpzaXplX3R5cGUgbjsKICAgIHR5cGVuYW1lIFNlcXVlbmNlOjp2YWx1ZV90eXBl
KiBmaXJzdCwgKmxhc3Q7CiAgICB0eXBlbmFtZSBTZXF1ZW5jZTo6aXRlcmF0b3IgcCwgcTsKICB9
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRnJvbnRJbnNlcnRpb25TZXF1ZW5jZT4KICBzdHJ1Y3QgRnJv
bnRJbnNlcnRpb25TZXF1ZW5jZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewog
ICAgICBmdW5jdGlvbl9yZXF1aXJlczwgU2VxdWVuY2VDb25jZXB0PEZyb250SW5zZXJ0aW9uU2Vx
dWVuY2U+ID4oKTsKCiAgICAgIGMucHVzaF9mcm9udCh0KTsKICAgICAgYy5wb3BfZnJvbnQoKTsK
ICAgIH0KICAgIEZyb250SW5zZXJ0aW9uU2VxdWVuY2UgYzsKICAgIHR5cGVuYW1lIEZyb250SW5z
ZXJ0aW9uU2VxdWVuY2U6OnZhbHVlX3R5cGUgdDsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQmFj
a0luc2VydGlvblNlcXVlbmNlPgogIHN0cnVjdCBCYWNrSW5zZXJ0aW9uU2VxdWVuY2VDb25jZXB0
CiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrSW5zZXJ0aW9uU2VxdWVuY2U6OnJlZmVyZW5j
ZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEJhY2tJbnNlcnRpb25TZXF1ZW5jZTo6
Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKCiAgICB2b2lkIGNvbnN0cmFpbnRzKCkg
ewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgU2VxdWVuY2VDb25jZXB0PEJhY2tJbnNlcnRpb25T
ZXF1ZW5jZT4gPigpOwoKICAgICAgYy5wdXNoX2JhY2sodCk7CiAgICAgIGMucG9wX2JhY2soKTsK
ICAgICAgcmVmZXJlbmNlIHIgPSBjLmJhY2soKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJs
ZV93YXJuaW5nKHIpOwogICAgfQogICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhjb25zdCBCYWNr
SW5zZXJ0aW9uU2VxdWVuY2UmIGMpIHsKICAgICAgY29uc3RfcmVmZXJlbmNlIHIgPSBjLmJhY2so
KTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIpOwogICAgfTsKICAgIEJh
Y2tJbnNlcnRpb25TZXF1ZW5jZSBjOwogICAgdHlwZW5hbWUgQmFja0luc2VydGlvblNlcXVlbmNl
Ojp2YWx1ZV90eXBlIHQ7CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIEFzc29jaWF0aXZlQ29udGFp
bmVyPgogIHN0cnVjdCBBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNv
bnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgRm9yd2FyZENvbnRhaW5lckNv
bmNlcHQ8QXNzb2NpYXRpdmVDb250YWluZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8
IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdDxBc3NvY2lhdGl2ZUNvbnRhaW5lcj4gPigpOwoK
ICAgICAgaSA9IGMuZmluZChrKTsKICAgICAgciA9IGMuZXF1YWxfcmFuZ2Uoayk7CiAgICAgIGMu
ZXJhc2Uoayk7CiAgICAgIGMuZXJhc2UoaSk7CiAgICAgIGMuZXJhc2Uoci5maXJzdCwgci5zZWNv
bmQpOwogICAgICBjb25zdF9jb25zdHJhaW50cyhjKTsKICAgIH0KICAgIHZvaWQgY29uc3RfY29u
c3RyYWludHMoY29uc3QgQXNzb2NpYXRpdmVDb250YWluZXImIGMpIHsKICAgICAgY2kgPSBjLmZp
bmQoayk7CiAgICAgIG4gPSBjLmNvdW50KGspOwogICAgICBjciA9IGMuZXF1YWxfcmFuZ2Uoayk7
CiAgICB9CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFzc29jaWF0aXZlQ29udGFpbmVyOjppdGVyYXRv
ciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzb2NpYXRpdmVDb250YWluZXI6OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIEFzc29jaWF0aXZlQ29udGFpbmVyIGM7
CiAgICBpdGVyYXRvciBpOwogICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiByOwogICAg
Y29uc3RfaXRlcmF0b3IgY2k7CiAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRl
cmF0b3I+IGNyOwogICAgdHlwZW5hbWUgQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV90eXBlIGs7
CiAgICB0eXBlbmFtZSBBc3NvY2lhdGl2ZUNvbnRhaW5lcjo6c2l6ZV90eXBlIG47CiAgfTsKCiAg
dGVtcGxhdGUgPGNsYXNzIFVuaXF1ZUFzc29jaWF0aXZlQ29udGFpbmVyPgogIHN0cnVjdCBVbmlx
dWVBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkg
ewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzb2NpYXRpdmVDb250YWluZXJDb25jZXB0PFVu
aXF1ZUFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CgogICAgICBVbmlxdWVBc3NvY2lhdGl2ZUNv
bnRhaW5lciBjKGZpcnN0LCBsYXN0KTsKCiAgICAgIHBvc19mbGFnID0gYy5pbnNlcnQodCk7CiAg
ICAgIGMuaW5zZXJ0KGZpcnN0LCBsYXN0KTsKCiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVf
d2FybmluZyhjKTsKICAgIH0KICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBVbmlxdWVBc3NvY2lhdGl2
ZUNvbnRhaW5lcjo6aXRlcmF0b3IsIGJvb2w+IHBvc19mbGFnOwogICAgdHlwZW5hbWUgVW5pcXVl
QXNzb2NpYXRpdmVDb250YWluZXI6OnZhbHVlX3R5cGUgdDsKICAgIHR5cGVuYW1lIFVuaXF1ZUFz
c29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBlKiBmaXJzdCwgKmxhc3Q7CiAgfTsKCiAgdGVt
cGxhdGUgPGNsYXNzIE11bHRpcGxlQXNzb2NpYXRpdmVDb250YWluZXI+CiAgc3RydWN0IE11bHRp
cGxlQXNzb2NpYXRpdmVDb250YWluZXJDb25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygp
IHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc29jaWF0aXZlQ29udGFpbmVyQ29uY2VwdDxN
dWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CgogICAgICBNdWx0aXBsZUFzc29jaWF0
aXZlQ29udGFpbmVyIGMoZmlyc3QsIGxhc3QpOwoKICAgICAgcG9zID0gYy5pbnNlcnQodCk7CiAg
ICAgIGMuaW5zZXJ0KGZpcnN0LCBsYXN0KTsKCiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVf
d2FybmluZyhjKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHBvcyk7CiAg
ICB9CiAgICB0eXBlbmFtZSBNdWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjppdGVyYXRvciBw
b3M7CiAgICB0eXBlbmFtZSBNdWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBl
IHQ7CiAgICB0eXBlbmFtZSBNdWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBl
KiBmaXJzdCwgKmxhc3Q7CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIFNpbXBsZUFzc29jaWF0aXZl
Q29udGFpbmVyPgogIHN0cnVjdCBTaW1wbGVBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7
CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzb2Np
YXRpdmVDb250YWluZXJDb25jZXB0PFNpbXBsZUFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgU2ltcGxlQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV90eXBl
IGtleV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIFNpbXBsZUFzc29jaWF0aXZlQ29udGFp
bmVyOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVxdWly
ZV9zYW1lPGtleV90eXBlLCB2YWx1ZV90eXBlPjo6dHlwZSByZXE7CiAgICB9CiAgfTsKCiAgdGVt
cGxhdGUgPGNsYXNzIFNpbXBsZUFzc29jaWF0aXZlQ29udGFpbmVyPgogIHN0cnVjdCBQYWlyQXNz
b2NpYXRpdmVDb250YWluZXJDb25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAg
ICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc29jaWF0aXZlQ29udGFpbmVyQ29uY2VwdDxTaW1wbGVB
c3NvY2lhdGl2ZUNvbnRhaW5lcj4gPigpOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIFNpbXBsZUFz
c29jaWF0aXZlQ29udGFpbmVyOjprZXlfdHlwZSBrZXlfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBTaW1wbGVBc3NvY2lhdGl2ZUNvbnRhaW5lcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIFNpbXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjptYXBwZWRf
dHlwZSBtYXBwZWRfdHlwZTsKICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3Qga2V5X3R5cGUs
IG1hcHBlZF90eXBlPiByZXF1aXJlZF92YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHJlcXVpcmVfc2FtZTx2YWx1ZV90eXBlLCByZXF1aXJlZF92YWx1ZV90eXBlPjo6dHlwZSByZXE7
CiAgICB9CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIFNvcnRlZEFzc29jaWF0aXZlQ29udGFpbmVy
PgogIHN0cnVjdCBTb3J0ZWRBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lk
IGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzb2NpYXRpdmVDb250
YWluZXJDb25jZXB0PFNvcnRlZEFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CiAgICAgIGZ1bmN0
aW9uX3JlcXVpcmVzPCBSZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxTb3J0ZWRBc3NvY2lhdGl2
ZUNvbnRhaW5lcj4gPigpOwoKICAgICAgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXIKICAgICAg
ICBjKGtjKSwKICAgICAgICBjMihmaXJzdCwgbGFzdCksCiAgICAgICAgYzMoZmlyc3QsIGxhc3Qs
IGtjKTsKCiAgICAgIHAgPSBjLnVwcGVyX2JvdW5kKGspOwogICAgICBwID0gYy5sb3dlcl9ib3Vu
ZChrKTsKICAgICAgciA9IGMuZXF1YWxfcmFuZ2Uoayk7CgogICAgICBjLmluc2VydChwLCB0KTsK
CiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhjKTsKICAgICAgaWdub3JlX3Vu
dXNlZF92YXJpYWJsZV93YXJuaW5nKGMyKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93
YXJuaW5nKGMzKTsKICAgIH0KICAgIHZvaWQgY29uc3RfY29uc3RyYWludHMoY29uc3QgU29ydGVk
QXNzb2NpYXRpdmVDb250YWluZXImIGMpIHsKICAgICAga2MgPSBjLmtleV9jb21wKCk7CiAgICAg
IHZjID0gYy52YWx1ZV9jb21wKCk7CgogICAgICBjcCA9IGMudXBwZXJfYm91bmQoayk7CiAgICAg
IGNwID0gYy5sb3dlcl9ib3VuZChrKTsKICAgICAgY3IgPSBjLmVxdWFsX3JhbmdlKGspOwogICAg
fQogICAgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV9jb21wYXJlIGtj
OwogICAgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6OnZhbHVlX2NvbXBhcmUg
dmM7CiAgICB0eXBlbmFtZSBTb3J0ZWRBc3NvY2lhdGl2ZUNvbnRhaW5lcjo6dmFsdWVfdHlwZSB0
OwogICAgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV90eXBlIGs7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIFNvcnRlZEFzc29jaWF0aXZlQ29udGFpbmVyOjppdGVyYXRvciBp
dGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6
OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgaXRlcmF0b3IgcDsKICAgIGNvbnN0
X2l0ZXJhdG9yIGNwOwogICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiByOwogICAgc3Rk
OjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBjcjsKICAgIHR5cGVuYW1lIFNv
cnRlZEFzc29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBlKiBmaXJzdCwgKmxhc3Q7CiAgfTsK
CgoKfQojIDEzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJy
YXkvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAyIDMKCgoKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL3NlbGVjdF90eXBlLmhwcCIgMSAzCiMgMTcgIi9ob21l
L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9zZWxlY3RfdHlwZS5ocHAiIDMK
bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIGRldGFpbCB7CgoKCgoKCiAgdGVtcGxhdGUgPGJv
b2wgYj4gc3RydWN0IGlmX3RydWUKICB7CiAgICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBG
PgogICAgICBzdHJ1Y3QgdGhlbiB7IHR5cGVkZWYgVCB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRl
IDw+CiAgc3RydWN0IGlmX3RydWU8ZmFsc2U+CiAgewogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgRj4KICAgICAgc3RydWN0IHRoZW4geyB0eXBlZGVmIEYgdHlwZTsgfTsKICB9Owp9fQoj
IDEzNiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvaXRl
cmF0b3JfYWRhcHRvcnMuaHBwIiAyIDMKIyAxNDUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs
dWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwpuYW1lc3BhY2Ug
Ym9vc3QgewpuYW1lc3BhY2UgZGV0YWlsIHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCgoKCnN0
cnVjdCBkZWZhdWx0X2l0ZXJhdG9yX3BvbGljaWVzCnsKIyAxNjQgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwog
ICAgdGVtcGxhdGUgPGNsYXNzIEJhc2U+CiAgICB2b2lkIGluaXRpYWxpemUoQmFzZSYpCiAgICAg
ICAgeyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvcj4KICAgIHR5cGVuYW1l
IEl0ZXJhdG9yQWRhcHRvcjo6cmVmZXJlbmNlIGRlcmVmZXJlbmNlKGNvbnN0IEl0ZXJhdG9yQWRh
cHRvciYgeCkgY29uc3QKICAgICAgICB7IHJldHVybiAqeC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogICAgdm9pZCBpbmNyZW1lbnQoSXRlcmF0b3JBZGFw
dG9yJiB4KQogICAgICAgIHsgKyt4LmJhc2UoKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVy
YXRvckFkYXB0b3I+CiAgICB2b2lkIGRlY3JlbWVudChJdGVyYXRvckFkYXB0b3ImIHgpCiAgICAg
ICAgeyAtLXguYmFzZSgpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvciwg
Y2xhc3MgRGlmZmVyZW5jZVR5cGU+CiAgICB2b2lkIGFkdmFuY2UoSXRlcmF0b3JBZGFwdG9yJiB4
LCBEaWZmZXJlbmNlVHlwZSBuKQogICAgICAgIHsgeC5iYXNlKCkgKz0gbjsgfQoKICAgIHRlbXBs
YXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3IxLCBjbGFzcyBJdGVyYXRvckFkYXB0b3IyPgogICAg
dHlwZW5hbWUgSXRlcmF0b3JBZGFwdG9yMTo6ZGlmZmVyZW5jZV90eXBlCiAgICBkaXN0YW5jZShj
b25zdCBJdGVyYXRvckFkYXB0b3IxJiB4LCBjb25zdCBJdGVyYXRvckFkYXB0b3IyJiB5KSBjb25z
dAogICAgICAgIHsgcmV0dXJuIHkuYmFzZSgpIC0geC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgSXRlcmF0b3JBZGFwdG9yMSwgY2xhc3MgSXRlcmF0b3JBZGFwdG9yMj4KICAgIGJvb2wg
ZXF1YWwoY29uc3QgSXRlcmF0b3JBZGFwdG9yMSYgeCwgY29uc3QgSXRlcmF0b3JBZGFwdG9yMiYg
eSkgY29uc3QKICAgICAgICB7IHJldHVybiB4LmJhc2UoKSA9PSB5LmJhc2UoKTsgfQp9OwojIDI1
NiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvaXRlcmF0
b3JfYWRhcHRvcnMuaHBwIiAzCm5hbWVzcGFjZSBkZXRhaWwgewoKCgoKCgogIHRlbXBsYXRlIDxj
bGFzcyBUPgogIHN0cnVjdCBvcGVyYXRvcl9hcnJvd19wcm94eQogIHsKICAgICAgb3BlcmF0b3Jf
YXJyb3dfcHJveHkoY29uc3QgVCYgeCkgOiBtX3ZhbHVlKHgpIHt9CgogICAgICBUKiBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KCgoKCiAgICAgIG9wZXJhdG9yIFQqKCkg
Y29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KICAgICAgbXV0YWJsZSBUIG1fdmFsdWU7CiAgfTsK
CiAgdGVtcGxhdGUgPGNsYXNzIEl0ZXI+CiAgaW5saW5lIG9wZXJhdG9yX2Fycm93X3Byb3h5PHR5
cGVuYW1lIEl0ZXI6OnJlZmVyZW5jZT4KICBvcGVyYXRvcl9hcnJvdyhjb25zdCBJdGVyJiBpLCBz
dGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykgewoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXI6OnJl
ZmVyZW5jZSB2YWx1ZV90OwogICAgcmV0dXJuIG9wZXJhdG9yX2Fycm93X3Byb3h5PHZhbHVlX3Q+
KCppKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBJdGVyPgogIGlubGluZSB0eXBlbmFtZSBJdGVy
Ojpwb2ludGVyCiAgb3BlcmF0b3JfYXJyb3coY29uc3QgSXRlciYgaSwgc3RkOjpmb3J3YXJkX2l0
ZXJhdG9yX3RhZykgewogICAgcmV0dXJuICYoKmkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIFZh
bHVlLCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIFBvaW50ZXI+CiAgc3RydWN0IG9wZXJhdG9yX2Fy
cm93X3Jlc3VsdF9nZW5lcmF0b3IKICB7CgogICAgICB0eXBlZGVmIG9wZXJhdG9yX2Fycm93X3By
b3h5PFJlZmVyZW5jZT4gcHJveHk7CgogICAgICBlbnVtIHsgdXNlX3Byb3h5ID0gIWJvb3N0Ojpp
c19yZWZlcmVuY2U8UmVmZXJlbmNlPjo6dmFsdWUgfTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
Ym9vc3Q6OmRldGFpbDo6aWZfdHJ1ZTwodXNlX3Byb3h5KT46OnRlbXBsYXRlCiAgICAgIHRoZW48
CiAgICAgICAgcHJveHksCgogICAgICAgIFBvaW50ZXIKICAgICAgPjo6dHlwZSB0eXBlOwogIH07
CiMgMzUxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9p
dGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLGNsYXNz
IFZhbHVlPgogICBzdHJ1Y3QgaXRlcmF0b3JfZGVmYXVsdHMgOiBpdGVyYXRvcl90cmFpdHM8SXRl
cmF0b3I+CiAgIHsKCgogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpZl90cnVlPCgKICAgICAgICAg
ICAgICAgOjpib29zdDo6aXNfc2FtZTxWYWx1ZSx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRl
cmF0b3I+Ojp2YWx1ZV90eXBlPjo6dmFsdWUKICAgICAgICAgICApPjo6dGVtcGxhdGUgdGhlbjwK
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnBvaW50
ZXIsCiAgICAgICAgICAgICAgICBWYWx1ZSoKICAgICAgID46OnR5cGUgcG9pbnRlcjsKCiAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGlmX3RydWU8KAogICAgICAgICAgICAgICA6OmJvb3N0Ojppc19z
YW1lPFZhbHVlLHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGU+
Ojp2YWx1ZQogICAgICAgICAgICk+Ojp0ZW1wbGF0ZSB0aGVuPAogICAgICAgICAgICAgICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6cmVmZXJlbmNlLAogICAgICAgICAgICAg
ICAgVmFsdWUmCiAgICAgICA+Ojp0eXBlIHJlZmVyZW5jZTsKCiAgIH07CgoKCgoKICBzdHJ1Y3Qg
ZGVmYXVsdF9hcmd1bWVudCB7IH07CgogIHN0cnVjdCBkdW1teV9kZWZhdWx0X2dlbiB7CiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7IHR5
cGVkZWYgZGVmYXVsdF9hcmd1bWVudCB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBH
ZW4+IHN0cnVjdCBkZWZhdWx0X2dlbmVyYXRvciB7CiAgICB0eXBlZGVmIGR1bW15X2RlZmF1bHRf
Z2VuIHR5cGU7CiAgfTsKCiAgc3RydWN0IGRlZmF1bHRfdmFsdWVfdHlwZSB7CiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+Ojp2YWx1
ZV90eXBlIHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGRlZmF1bHRfZ2Vu
ZXJhdG9yPGRlZmF1bHRfdmFsdWVfdHlwZT4KICB7IHR5cGVkZWYgZGVmYXVsdF92YWx1ZV90eXBl
IHR5cGU7IH07CgogIHN0cnVjdCBkZWZhdWx0X2RpZmZlcmVuY2VfdHlwZSB7CiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+OjpkaWZm
ZXJlbmNlX3R5cGUgdHlwZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVmYXVs
dF9nZW5lcmF0b3I8ZGVmYXVsdF9kaWZmZXJlbmNlX3R5cGU+CiAgeyB0eXBlZGVmIGRlZmF1bHRf
ZGlmZmVyZW5jZV90eXBlIHR5cGU7IH07CgogIHN0cnVjdCBkZWZhdWx0X2l0ZXJhdG9yX2NhdGVn
b3J5IHsKICAgIHRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qg
c2VsZWN0IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90
cmFpdHM8QmFzZT46Oml0ZXJhdG9yX2NhdGVnb3J5IHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxh
dGUgPD4gc3RydWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnk+
CiAgeyB0eXBlZGVmIGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnkgdHlwZTsgfTsKCiAgc3RydWN0
IGRlZmF1bHRfcG9pbnRlciB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRz
PgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjp2YWx1
ZV90eXBlIFZhbHVlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Om11bHRp
X2FycmF5OjpkZXRhaWw6Oml0ZXJhdG9yX2RlZmF1bHRzPEJhc2UsVmFsdWU+Ojpwb2ludGVyCiAg
ICAgICAgdHlwZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVmYXVsdF9nZW5l
cmF0b3I8ZGVmYXVsdF9wb2ludGVyPgogIHsgdHlwZWRlZiBkZWZhdWx0X3BvaW50ZXIgdHlwZTsg
fTsKCiAgc3RydWN0IGRlZmF1bHRfcmVmZXJlbmNlIHsKICAgIHRlbXBsYXRlIDxjbGFzcyBCYXNl
LCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBUcmFpdHM6OnZhbHVlX3R5cGUgVmFsdWU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6
OmRldGFpbDo6bXVsdGlfYXJyYXk6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8QmFzZSxWYWx1
ZT46OnJlZmVyZW5jZQogICAgICAgIHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3Ry
dWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfcmVmZXJlbmNlPgogIHsgdHlwZWRlZiBkZWZh
dWx0X3JlZmVyZW5jZSB0eXBlOyB9OwoKfQoKCgoKCnN0cnVjdCBuYW1lZF90ZW1wbGF0ZV9wYXJh
bV9iYXNlIHsgfTsKCm5hbWVzcGFjZSBkZXRhaWwgewogIHN0cnVjdCB2YWx1ZV90eXBlX3RhZyB7
IH07CiAgc3RydWN0IHJlZmVyZW5jZV90YWcgeyB9OwogIHN0cnVjdCBwb2ludGVyX3RhZyB7IH07
CiAgc3RydWN0IGRpZmZlcmVuY2VfdHlwZV90YWcgeyB9OwogIHN0cnVjdCBpdGVyYXRvcl9jYXRl
Z29yeV90YWcgeyB9OwoKCgogIHRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgogIHN0cnVjdCBj
b25zX3R5cGUgewogICAgdHlwZWRlZiBBIGZpcnN0X3R5cGU7CiAgICB0eXBlZGVmIEIgc2Vjb25k
X3R5cGU7CiAgfTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4gc3RydWN0IHZhbHVlX3R5cGVf
aXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAgdHlwZWRlZiBkZXRhaWw6
OmNvbnNfdHlwZTxkZXRhaWw6OnZhbHVlX3R5cGVfdGFnLCBWYWx1ZT4gdHlwZTsKfTsKdGVtcGxh
dGUgPGNsYXNzIFJlZmVyZW5jZT4gc3RydWN0IHJlZmVyZW5jZV9pcyA6IHB1YmxpYyBuYW1lZF90
ZW1wbGF0ZV9wYXJhbV9iYXNlCnsKICB0eXBlZGVmIGRldGFpbDo6Y29uc190eXBlPGRldGFpbDo6
cmVmZXJlbmNlX3RhZywgUmVmZXJlbmNlPiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgUG9pbnRl
cj4gc3RydWN0IHBvaW50ZXJfaXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7
CiAgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6OnBvaW50ZXJfdGFnLCBQb2ludGVy
PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgRGlmZmVyZW5jZT4gc3RydWN0IGRpZmZlcmVuY2Vf
dHlwZV9pcwogIDogcHVibGljIG5hbWVkX3RlbXBsYXRlX3BhcmFtX2Jhc2UKewogIHR5cGVkZWYg
ZGV0YWlsOjpjb25zX3R5cGU8ZGV0YWlsOjpkaWZmZXJlbmNlX3R5cGVfdGFnLCBEaWZmZXJlbmNl
PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JDYXRlZ29yeT4gc3RydWN0IGl0ZXJh
dG9yX2NhdGVnb3J5X2lzCiAgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAg
dHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6Oml0ZXJhdG9yX2NhdGVnb3J5X3RhZywg
SXRlcmF0b3JDYXRlZ29yeT4gdHlwZTsKfTsKCm5hbWVzcGFjZSBkZXRhaWwgewoKICBzdHJ1Y3Qg
ZW5kX29mX2xpc3QgeyB9OwojIDUyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvbXVsdGlfYXJyYXkvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCiAgdGVtcGxhdGUgPGNsYXNz
IEFzc29jTGlzdCwgY2xhc3MgS2V5PiBzdHJ1Y3QgZmluZF9wYXJhbTsKCiAgdGVtcGxhdGUgPGNs
YXNzIEtleT4KICBzdHJ1Y3QgZmluZF9wYXJhbTxlbmRfb2ZfbGlzdCwgS2V5PiB7IHR5cGVkZWYg
ZGVmYXVsdF9hcmd1bWVudCB0eXBlOyB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3Mg
VmFsdWUsIGNsYXNzIFJlc3Q+CiAgc3RydWN0IGZpbmRfcGFyYW08ZGV0YWlsOjpjb25zX3R5cGU8
IGRldGFpbDo6Y29uc190eXBlPEtleSwgVmFsdWU+LCBSZXN0PiwgS2V5PiB7CiAgICB0eXBlZGVm
IFZhbHVlIHR5cGU7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBLZXkxLCBjbGFzcyBWYWx1ZSwg
Y2xhc3MgUmVzdCwgY2xhc3MgS2V5Mj4KICBzdHJ1Y3QgZmluZF9wYXJhbTxkZXRhaWw6OmNvbnNf
dHlwZTwgZGV0YWlsOjpjb25zX3R5cGU8S2V5MSwgVmFsdWU+LCBSZXN0PiwgS2V5Mj4gewogICAg
dHlwZWRlZiB0eXBlbmFtZSBmaW5kX3BhcmFtPFJlc3QsIEtleTI+Ojp0eXBlIHR5cGU7CiAgfTsK
CgogIHN0cnVjdCBtYWtlX25hbWVkX2FyZyB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFz
cyBWYWx1ZT4KICAgIHN0cnVjdCBzZWxlY3QgeyB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlOjp0eXBl
IHR5cGU7IH07CiAgfTsKICBzdHJ1Y3QgbWFrZV9rZXlfdmFsdWUgewogICAgdGVtcGxhdGUgPGNs
YXNzIEtleSwgY2xhc3MgVmFsdWU+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsgdHlwZWRlZiBkZXRhaWw6
OmNvbnNfdHlwZTxLZXksIFZhbHVlPiB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBW
YWx1ZT4KICBzdHJ1Y3QgaXNfbmFtZWRfcGFyYW1ldGVyCiAgewogICAgICBlbnVtIHsgdmFsdWUg
PSBpc19jb252ZXJ0aWJsZTxWYWx1ZSwgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZT46OnZhbHVl
IH07CiAgfTsKIyA1NjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRp
X2FycmF5L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwogIHRlbXBsYXRlIDxjbGFzcyBLZXksIGNs
YXNzIFZhbHVlPgogIHN0cnVjdCBtYWtlX2FyZyB7CgoKCgoKCiAgICBlbnVtIHsgaXNfbmFtZWQg
PSBpc19uYW1lZF9wYXJhbWV0ZXI8VmFsdWU+Ojp2YWx1ZSB9OwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBpZl90cnVlPChpc19uYW1lZCk+Ojp0ZW1wbGF0ZQogICAgICB0aGVuPG1ha2VfbmFtZWRfYXJn
LCBtYWtlX2tleV92YWx1ZT46OnR5cGUgTWFrZTsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIE1ha2U6
OnRlbXBsYXRlIHNlbGVjdDxLZXksIFZhbHVlPjo6dHlwZSB0eXBlOwogIH07CgoKCiAgdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19kZWZhdWx0IHsgdHlwZWRlZiB0eXBlX3RyYWl0czo6bm9f
dHlwZSB0eXBlOyB9OwogIHRlbXBsYXRlIDw+IHN0cnVjdCBpc19kZWZhdWx0PGRlZmF1bHRfYXJn
dW1lbnQ+CiAgeyB0eXBlZGVmIHR5cGVfdHJhaXRzOjp5ZXNfdHlwZSB0eXBlOyB9OwoKICBzdHJ1
Y3QgY2hvb3NlX2RlZmF1bHQgewogICAgdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgRGVmYXVs
dEdlbiwgY2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgZGVmYXVsdF9nZW5lcmF0b3I8RGVmYXVsdEdlbj46OnR5cGUgR2Vu
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbjo6dGVtcGxhdGUgc2VsZWN0PEJhc2UsVHJhaXRz
Pjo6dHlwZSB0eXBlOwogICAgfTsKICB9OwogIHN0cnVjdCBjaG9vc2VfYXJnIHsKICAgIHRlbXBs
YXRlIDxjbGFzcyBBcmcsIGNsYXNzIERlZmF1bHRHZW4sIGNsYXNzIEJhc2UsIGNsYXNzIFRyYWl0
cz4KICAgIHN0cnVjdCBzZWxlY3QgewogICAgICB0eXBlZGVmIEFyZyB0eXBlOwogICAgfTsKICB9
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVXNlRGVmYXVsdD4KICBzdHJ1Y3QgY2hvb3NlX2FyZ19vcl9k
ZWZhdWx0IHsgdHlwZWRlZiBjaG9vc2VfYXJnIHR5cGU7IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0
IGNob29zZV9hcmdfb3JfZGVmYXVsdDx0eXBlX3RyYWl0czo6eWVzX3R5cGU+IHsKICAgIHR5cGVk
ZWYgY2hvb3NlX2RlZmF1bHQgdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQXJnLCBjbGFz
cyBEZWZhdWx0R2VuLCBjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgY2xhc3MgcmVzb2x2ZV9k
ZWZhdWx0IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hvb3NlX2FyZ19vcl9kZWZhdWx0PHR5cGVu
YW1lIGlzX2RlZmF1bHQ8QXJnPjo6dHlwZT46OnR5cGUKICAgICAgU2VsZWN0b3I7CiAgcHVibGlj
OgogICAgdHlwZWRlZiB0eXBlbmFtZSBTZWxlY3RvcgogICAgICA6OnRlbXBsYXRlIHNlbGVjdDxB
cmcsIERlZmF1bHRHZW4sIEJhc2UsIFRyYWl0cz46OnR5cGUgdHlwZTsKICB9OwoKICB0ZW1wbGF0
ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVmFsdWUsIGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRl
ciwKICAgICAgICAgICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgogIGNsYXNzIGl0
ZXJhdG9yX2FkYXB0b3JfdHJhaXRzX2dlbgogIHsKCgoKCgogICAgdHlwZWRlZiBkZXRhaWw6OmNv
bnNfdHlwZTwgdHlwZW5hbWUgbWFrZV9hcmc8dmFsdWVfdHlwZV90YWcsIFZhbHVlPjo6dHlwZSwK
ICAgICAgZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9hcmc8cmVmZXJlbmNlX3RhZywg
UmVmZXJlbmNlPjo6dHlwZSwKICAgICAgZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9h
cmc8cG9pbnRlcl90YWcsIFBvaW50ZXI+Ojp0eXBlLAogICAgICBkZXRhaWw6OmNvbnNfdHlwZTx0
eXBlbmFtZSBtYWtlX2FyZzxpdGVyYXRvcl9jYXRlZ29yeV90YWcsIENhdGVnb3J5Pjo6dHlwZSwK
ICAgICAgZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9hcmc8ZGlmZmVyZW5jZV90eXBl
X3RhZywgRGlzdGFuY2U+Ojp0eXBlLAogICAgICAgICAgICAgICAgZW5kX29mX2xpc3Q+ID4gPiA+
ID4gQXJnTGlzdDsKCgogICAgdHlwZWRlZiB0eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHZh
bHVlX3R5cGVfdGFnPjo6dHlwZSBWYWw7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGZpbmRfcGFyYW08
QXJnTGlzdCwgZGlmZmVyZW5jZV90eXBlX3RhZz46OnR5cGUgRGlmZjsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgZmluZF9wYXJhbTxBcmdMaXN0LCBpdGVyYXRvcl9jYXRlZ29yeV90YWc+Ojp0eXBlIENh
dDsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZmluZF9wYXJhbTxBcmdMaXN0LCBwb2ludGVyX3RhZz46
OnR5cGUgUHRyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHJlZmVy
ZW5jZV90YWc+Ojp0eXBlIFJlZjsKCiAgICB0eXBlZGVmIGJvb3N0OjppdGVyYXRvcjxDYXRlZ29y
eSwgVmFsdWUsIERpc3RhbmNlLCBQb2ludGVyLCBSZWZlcmVuY2U+CiAgICAgIFRyYWl0czA7CgoK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0PFZhbCwgZGVmYXVsdF92YWx1ZV90
eXBlLCBCYXNlLCBUcmFpdHMwPjo6dHlwZQogICAgICB2YWx1ZV90eXBlOwoKICAgIHR5cGVkZWYg
dHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0PERpZmYsIGRlZmF1bHRfZGlmZmVyZW5jZV90eXBlLCBC
YXNlLAogICAgICBUcmFpdHMwPjo6dHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIHJlc29sdmVfZGVmYXVsdDxDYXQsIGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnksIEJh
c2UsCiAgICAgIFRyYWl0czA+Ojp0eXBlIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYg
Ym9vc3Q6Oml0ZXJhdG9yPGl0ZXJhdG9yX2NhdGVnb3J5LCB2YWx1ZV90eXBlLCBkaWZmZXJlbmNl
X3R5cGUsCiAgICAgIFBvaW50ZXIsIFJlZmVyZW5jZT4gVHJhaXRzMTsKCgoKCiAgICB0eXBlZGVm
IHR5cGVuYW1lIHJlc29sdmVfZGVmYXVsdDxQdHIsIGRlZmF1bHRfcG9pbnRlciwgQmFzZSwgVHJh
aXRzMT46OnR5cGUKICAgICAgcG9pbnRlcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9k
ZWZhdWx0PFJlZiwgZGVmYXVsdF9yZWZlcmVuY2UsIEJhc2UsIFRyYWl0czE+Ojp0eXBlCiAgICAg
IHJlZmVyZW5jZTsKCiAgcHVibGljOgogICAgdHlwZWRlZiBib29zdDo6aXRlcmF0b3I8aXRlcmF0
b3JfY2F0ZWdvcnksCiAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdDx2YWx1ZV90eXBlPjo6dHlw
ZSwKICAgICAgZGlmZmVyZW5jZV90eXBlLCBwb2ludGVyLCByZWZlcmVuY2U+IHR5cGU7CiAgfTsK
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2F0ZWdvcnksIGNsYXNzIFZhbHVlLCBjbGFzcyBEaWZmZXJl
bmNlLCBjbGFzcyBQb2ludGVyLCBjbGFzcyBSZWZlcmVuY2U+CiAgc3RydWN0IHZhbGlkYXRvcgog
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW5wdXRfb3Jfb3V0cHV0X2l0ZXIgPSAoYm9v
c3Q6OmlzX2NvbnZlcnRpYmxlPENhdGVnb3J5KixzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyo+Ojp2
YWx1ZSB8IGJvb3N0Ojppc19jb252ZXJ0aWJsZTxDYXRlZ29yeSosc3RkOjpvdXRwdXRfaXRlcmF0
b3JfdGFnKj46OnZhbHVlKTsKCgoKCgogICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3Nl
cnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wp
KCBpc19pbnB1dF9vcl9vdXRwdXRfaXRlciApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVk
ZWZfNjc2OwoKCgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBmb3J3YXJkX2l0ZXJfd2l0aF9yZWFs
X3JlZmVyZW5jZSA9ICgoIWJvb3N0Ojppc19jb252ZXJ0aWJsZTxDYXRlZ29yeSosc3RkOjpmb3J3
YXJkX2l0ZXJhdG9yX3RhZyo+Ojp2YWx1ZSkgfCBib29zdDo6aXNfc2FtZTxSZWZlcmVuY2UsVmFs
dWUmPjo6dmFsdWUgfCBib29zdDo6aXNfc2FtZTxSZWZlcmVuY2UsdHlwZW5hbWUgYWRkX2NvbnN0
PFZhbHVlPjo6dHlwZSY+Ojp2YWx1ZSk7CgoKCgoKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0
aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8
IChib29sKSggZm9yd2FyZF9pdGVyX3dpdGhfcmVhbF9yZWZlcmVuY2UgKSA+KT4gYm9vc3Rfc3Rh
dGljX2Fzc2VydF90eXBlZGVmXzY4NjsKICB9Owp9CiMgNzI3ICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKdGVt
cGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIFBvbGljaWVzLAogICAgY2xhc3MgVmFsdWUgPSA6OmJv
b3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpkZXRhaWw6OmRlZmF1bHRfYXJndW1lbnQsCiAgICBj
bGFzcyBSZWZlcmVuY2UgPSA6OmJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpkZXRhaWw6OmRl
ZmF1bHRfYXJndW1lbnQsCiAgICBjbGFzcyBQb2ludGVyID0gOjpib29zdDo6ZGV0YWlsOjptdWx0
aV9hcnJheTo6ZGV0YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgQ2F0ZWdvcnkgPSA6
OmJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpkZXRhaWw6OmRlZmF1bHRfYXJndW1lbnQsCiAg
ICBjbGFzcyBEaXN0YW5jZSA9IDo6Ym9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OmRldGFpbDo6
ZGVmYXVsdF9hcmd1bWVudAogICAgICAgICA+CnN0cnVjdCBpdGVyYXRvcl9hZGFwdG9yIDoKCgoK
CgoKICAgIGRldGFpbDo6aXRlcmF0b3JfYWRhcHRvcl90cmFpdHNfZ2VuPEJhc2UsVmFsdWUsUmVm
ZXJlbmNlLFBvaW50ZXIsQ2F0ZWdvcnksRGlzdGFuY2U+Ojp0eXBlCgp7CiAgICB0eXBlZGVmIGl0
ZXJhdG9yX2FkYXB0b3I8QmFzZSxQb2xpY2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRl
Z29yeSxEaXN0YW5jZT4gc2VsZjsKIHB1YmxpYzoKICAgIHR5cGVkZWYgZGV0YWlsOjppdGVyYXRv
cl9hZGFwdG9yX3RyYWl0c19nZW48QmFzZSxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29y
eSxEaXN0YW5jZT4gVHJhaXRzR2VuOwogICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHNHZW46OnR5
cGUgVHJhaXRzOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjpkaWZmZXJlbmNlX3R5cGUg
ZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnZhbHVlX3R5cGUg
dmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjpwb2ludGVyIHBvaW50ZXI7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y
eTsKCiAgICB0eXBlZGVmIEJhc2UgYmFzZV90eXBlOwogICAgdHlwZWRlZiBQb2xpY2llcyBwb2xp
Y2llc190eXBlOwoKIHByaXZhdGU6CiAgICB0eXBlZGVmIGRldGFpbDo6dmFsaWRhdG9yPAogICAg
ICAgIGl0ZXJhdG9yX2NhdGVnb3J5LHZhbHVlX3R5cGUsZGlmZmVyZW5jZV90eXBlLHBvaW50ZXIs
cmVmZXJlbmNlCiAgICAgICAgPiBjb25jZXB0X2NoZWNrOwoKIHB1YmxpYzoKICAgIGl0ZXJhdG9y
X2FkYXB0b3IoKQogICAgewogICAgfQoKICAgIGV4cGxpY2l0CiAgICBpdGVyYXRvcl9hZGFwdG9y
KGNvbnN0IEJhc2UmIGl0LCBjb25zdCBQb2xpY2llcyYgcCA9IFBvbGljaWVzKCkpCiAgICAgICAg
OiBtX2l0ZXJfcChpdCwgcCkgewogICAgICAgIHBvbGljaWVzKCkuaW5pdGlhbGl6ZShiYXNlKCkp
OwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyMiwgY2xhc3MgVmFsdWUyLCBjbGFzcyBQ
b2ludGVyMiwgY2xhc3MgUmVmZXJlbmNlMj4KICAgIGl0ZXJhdG9yX2FkYXB0b3IgKAogICAgICAg
IGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVyZW5jZTIs
UG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiBzcmMpCiAgICAgICAgICAgIDogbV9pdGVyX3Ao
c3JjLmJhc2UoKSwgc3JjLnBvbGljaWVzKCkpCiAgICB7CiAgICAgICAgcG9saWNpZXMoKS5pbml0
aWFsaXplKGJhc2UoKSk7CiAgICB9CiMgNzkwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC9tdWx0aV9hcnJheS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKICAgIHJlZmVyZW5j
ZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBwb2xpY2llcygpLmRlcmVmZXJl
bmNlKCp0aGlzKTsKICAgIH0KCgoKCgoKICAgIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Om11bHRp
X2FycmF5OjpkZXRhaWw6Om9wZXJhdG9yX2Fycm93X3Jlc3VsdF9nZW5lcmF0b3I8dmFsdWVfdHlw
ZSxyZWZlcmVuY2UscG9pbnRlcj46OnR5cGUKICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAg
IHsgcmV0dXJuIGRldGFpbDo6b3BlcmF0b3JfYXJyb3coKnRoaXMsIGl0ZXJhdG9yX2NhdGVnb3J5
KCkpOyB9CgoKCgoKICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgbikg
Y29uc3QKICAgICAgICB7IHJldHVybiAqKCp0aGlzICsgbik7IH0KCiAgICBzZWxmJiBvcGVyYXRv
cisrKCkgewoKICAgICAgICBwb2xpY2llcygpLmluY3JlbWVudCgqdGhpcyk7CgoKCgoKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgc2VsZiBvcGVyYXRvcisrKGludCkgeyBzZWxmIHRt
cCgqdGhpcyk7ICsrKnRoaXM7IHJldHVybiB0bXA7IH0KCiAgICBzZWxmJiBvcGVyYXRvci0tKCkg
ewoKICAgICAgICBwb2xpY2llcygpLmRlY3JlbWVudCgqdGhpcyk7CgoKCiAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICAgIHNlbGYgb3BlcmF0b3ItLShpbnQpIHsgc2VsZiB0bXAoKnRoaXMp
OyAtLSp0aGlzOyByZXR1cm4gdG1wOyB9CgogICAgc2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNl
X3R5cGUgbikgewogICAgICAgIHBvbGljaWVzKCkuYWR2YW5jZSgqdGhpcywgbik7CiAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICAgIHNlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl
IG4pIHsKICAgICAgICBwb2xpY2llcygpLmFkdmFuY2UoKnRoaXMsIC1uKTsKICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogICAgYmFzZV90eXBlIGNvbnN0JiBiYXNlKCkgY29uc3QgeyByZXR1
cm4gbV9pdGVyX3AuZmlyc3QoKTsgfQoKCgogICAgc2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90
eXBlIHgpIGNvbnN0CiAgICAgICAgeyBzZWxmIHJlc3VsdCgqdGhpcyk7IHJldHVybiByZXN1bHQg
LT0geDsgfQpwcml2YXRlOgogICAgY29tcHJlc3NlZF9wYWlyPEJhc2UsUG9saWNpZXM+IG1faXRl
cl9wOwoKcHVibGljOgogICAgYmFzZV90eXBlJiBiYXNlKCkgeyByZXR1cm4gbV9pdGVyX3AuZmly
c3QoKTsgfQogICAgUG9saWNpZXMmIHBvbGljaWVzKCkgeyByZXR1cm4gbV9pdGVyX3Auc2Vjb25k
KCk7IH0KICAgIGNvbnN0IFBvbGljaWVzJiBwb2xpY2llcygpIGNvbnN0IHsgcmV0dXJuIG1faXRl
cl9wLnNlY29uZCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgUG9saWNpZXMs
IGNsYXNzIFZhbHVlLCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIFBvaW50ZXIsCiAgICBjbGFzcyBD
YXRlZ29yeSwgY2xhc3MgRGlzdGFuY2UxLCBjbGFzcyBEaXN0YW5jZTI+Cml0ZXJhdG9yX2FkYXB0
b3I8QmFzZSxQb2xpY2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5j
ZTE+Cm9wZXJhdG9yKygKICAgIGl0ZXJhdG9yX2FkYXB0b3I8QmFzZSxQb2xpY2llcyxWYWx1ZSxS
ZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5jZTE+IHAsCiAgICBEaXN0YW5jZTIgeCkK
ewogICAgcmV0dXJuIHAgKz0geDsKfQoKdGVtcGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIFBvbGlj
aWVzLCBjbGFzcyBWYWx1ZSwgY2xhc3MgUmVmZXJlbmNlLCBjbGFzcyBQb2ludGVyLAogICAgY2xh
c3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlMSwgY2xhc3MgRGlzdGFuY2UyPgppdGVyYXRvcl9h
ZGFwdG9yPEJhc2UsUG9saWNpZXMsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0ZWdvcnksRGlz
dGFuY2UxPgpvcGVyYXRvcisoCiAgICBEaXN0YW5jZTIgeCwKICAgIGl0ZXJhdG9yX2FkYXB0b3I8
QmFzZSxQb2xpY2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5jZTE+
IHApCnsKICAgIHJldHVybiBwICs9IHg7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEsIGNs
YXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFsdWUy
LAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRlcjEs
IGNsYXNzIFBvaW50ZXIyLCBjbGFzcyBDYXRlZ29yeSwKICAgIGNsYXNzIERpc3RhbmNlPgp0eXBl
bmFtZSBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9yMSxQb2xpY2llcyxWYWx1ZTEsUmVmZXJlbmNl
MSxQb2ludGVyMSxDYXRlZ29yeSxEaXN0YW5jZT46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0o
CiAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9yMSxQb2xpY2llcyxWYWx1ZTEsUmVm
ZXJlbmNlMSxQb2ludGVyMSxDYXRlZ29yeSxEaXN0YW5jZT4mIHgsCiAgICBjb25zdCBpdGVyYXRv
cl9hZGFwdG9yPEl0ZXJhdG9yMixQb2xpY2llcyxWYWx1ZTIsUmVmZXJlbmNlMixQb2ludGVyMixD
YXRlZ29yeSxEaXN0YW5jZT4mIHkpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX2FkYXB0
b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLAogICAgUG9pbnRlcjEsQ2F0
ZWdvcnksRGlzdGFuY2U+OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHJldHVy
biB4LnBvbGljaWVzKCkuZGlzdGFuY2UoeSwgeCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0
b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBWYWx1ZTEsIGNsYXNz
IFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5jZTIsIGNsYXNzIFBv
aW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBEaXN0YW5j
ZT4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSgKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRl
cmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5LERpc3Rh
bmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGljaWVzLFZh
bHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewogICAgcmV0
dXJuIHgucG9saWNpZXMoKS5lcXVhbCh4LCB5KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9y
MSwgY2xhc3MgSXRlcmF0b3IyLCBjbGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUxLCBjbGFzcyBW
YWx1ZTIsCiAgICBjbGFzcyBSZWZlcmVuY2UxLCBjbGFzcyBSZWZlcmVuY2UyLCBjbGFzcyBQb2lu
dGVyMSwgY2xhc3MgUG9pbnRlcjIsCiAgICBjbGFzcyBDYXRlZ29yeSwgY2xhc3MgRGlzdGFuY2U+
CmlubGluZSBib29sCm9wZXJhdG9yPCgKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0
b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5LERpc3RhbmNl
PiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGljaWVzLFZhbHVl
MixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewogICAgcmV0dXJu
IHgucG9saWNpZXMoKS5kaXN0YW5jZSh5LCB4KSA8IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVy
YXRvcjEsIGNsYXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xh
c3MgVmFsdWUyLAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3Mg
UG9pbnRlcjEsIGNsYXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3Rh
bmNlPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oCiAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0
ZXJhdG9yMSxQb2xpY2llcyxWYWx1ZTEsUmVmZXJlbmNlMSxQb2ludGVyMSxDYXRlZ29yeSxEaXN0
YW5jZT4mIHgsCiAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9yMixQb2xpY2llcyxW
YWx1ZTIsUmVmZXJlbmNlMixQb2ludGVyMixDYXRlZ29yeSxEaXN0YW5jZT4mIHkpCnsKICAgIHJl
dHVybiB4LnBvbGljaWVzKCkuZGlzdGFuY2UoeSwgeCkgPiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
SXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBWYWx1ZTEs
IGNsYXNzIFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5jZTIsIGNs
YXNzIFBvaW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBE
aXN0YW5jZT4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSgKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0
b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5
LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGlj
aWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewog
ICAgcmV0dXJuIHgucG9saWNpZXMoKS5kaXN0YW5jZSh5LCB4KSA+PSAwOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBW
YWx1ZTEsIGNsYXNzIFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5j
ZTIsIGNsYXNzIFBvaW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBj
bGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSgKICAgIGNvbnN0IGl0ZXJhdG9y
X2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENh
dGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3Iy
LFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYg
eSkKewogICAgcmV0dXJuIHgucG9saWNpZXMoKS5kaXN0YW5jZSh5LCB4KSA8PSAwOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBj
bGFzcyBWYWx1ZTEsIGNsYXNzIFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJl
ZmVyZW5jZTIsIGNsYXNzIFBvaW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVn
b3J5LCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSgKICAgIGNvbnN0IGl0
ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50
ZXIxLENhdGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRl
cmF0b3IyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3Rh
bmNlPiYgeSkKewogICAgcmV0dXJuICF4LnBvbGljaWVzKCkuZXF1YWwoeCwgeSk7Cn0KCgoKfQp9
Cn0KIyAyOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv
YmFzZS5ocHAiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z
LjIvY2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv
My4yL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vz
ci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0
X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNo
YXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9f
Y29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRp
b24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y
L2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAyIDMKIyAzMiAiL2hvbWUvY29tcGJpby9kOTUtYmxp
L2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvYmFzZS5ocHAiIDIgMwoKCgpuYW1lc3BhY2UgYm9v
c3QgewoKCgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXMsCiAgdHlw
ZW5hbWUgQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8VD4gPgpjbGFzcyBtdWx0aV9hcnJheTsK
CgpuYW1lc3BhY2UgbXVsdGlfYXJyYXlfdHlwZXMgewogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6
bXVsdGlfYXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6
aW5kZXggaW5kZXg7CiAgdHlwZWRlZiBkZXRhaWw6Om11bHRpX2FycmF5OjppbmRleF9yYW5nZTxp
bmRleCxzaXplX3R5cGU+IGluZGV4X3JhbmdlOwogIHR5cGVkZWYgZGV0YWlsOjptdWx0aV9hcnJh
eTo6ZXh0ZW50X3JhbmdlPGluZGV4LHNpemVfdHlwZT4gZXh0ZW50X3JhbmdlOwogIHR5cGVkZWYg
ZGV0YWlsOjptdWx0aV9hcnJheTo6aW5kZXhfZ2VuPDAsMD4gaW5kZXhfZ2VuOwogIHR5cGVkZWYg
ZGV0YWlsOjptdWx0aV9hcnJheTo6ZXh0ZW50X2dlbjwwPiBleHRlbnRfZ2VuOwp9CiMgNjQgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBwIiAz
Cm5hbWVzcGFjZSB7CiAgbXVsdGlfYXJyYXlfdHlwZXM6OmV4dGVudF9nZW4gZXh0ZW50czsKICBt
dWx0aV9hcnJheV90eXBlczo6aW5kZXhfZ2VuIGluZGljZXM7Cn0KCgpuYW1lc3BhY2UgZGV0YWls
IHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNp
emVfdCBOdW1EaW1zPgpjbGFzcyBzdWJfYXJyYXk7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3Rk
OjpzaXplX3QgTnVtRGltcywgdHlwZW5hbWUgVFB0ciA9IGNvbnN0IFQqPgpjbGFzcyBjb25zdF9z
dWJfYXJyYXk7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlw
ZW5hbWUgdmFsdWVfdHlwZSwKICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFn
LCB0eXBlbmFtZSBkaWZmZXJlbmNlX3R5cGU+CnN0cnVjdCBpdGVyYXRvcl9nZW5lcmF0b3I7Cgp0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlwZW5hbWUgdmFsdWVf
dHlwZSwKICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFnLCB0eXBlbmFtZSBk
aWZmZXJlbmNlX3R5cGU+CnN0cnVjdCBjb25zdF9pdGVyYXRvcl9nZW5lcmF0b3I7Cgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlwZW5hbWUgdmFsdWVfdHlwZSwK
ICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFnLCB0eXBlbmFtZSBkaWZmZXJl
bmNlX3R5cGU+CnN0cnVjdCByZXZlcnNlX2l0ZXJhdG9yX2dlbmVyYXRvcjsKCnRlbXBsYXRlIDx0
eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSB2YWx1ZV90eXBlLAogIHR5
cGVuYW1lIHJlZmVyZW5jZV90eXBlLCB0eXBlbmFtZSB0YWcsIHR5cGVuYW1lIGRpZmZlcmVuY2Vf
dHlwZT4Kc3RydWN0IGNvbnN0X3JldmVyc2VfaXRlcmF0b3JfZ2VuZXJhdG9yOwoKdGVtcGxhdGUg
PHR5cGVuYW1lIFQsdHlwZW5hbWUgVFB0cj4Kc3RydWN0IGl0ZXJhdG9yX2Jhc2U7Cgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcz4Kc3RydWN0IGl0ZXJhdG9yX3BvbGlj
aWVzOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXMsIHR5cGVuYW1l
IFRQdHIgPSBjb25zdCBUKj4KY2xhc3MgY29uc3RfbXVsdGlfYXJyYXlfdmlldzsKCnRlbXBsYXRl
IDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBtdWx0aV9hcnJheV92aWV3
OwoKCgoKCmNsYXNzIG11bHRpX2FycmF5X2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiBtdWx0aV9h
cnJheV90eXBlczo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5
cGVzOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgbXVsdGlfYXJy
YXlfdHlwZXM6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4
X3JhbmdlIGluZGV4X3JhbmdlOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmV4dGVudF9y
YW5nZSBleHRlbnRfcmFuZ2U7CiAgdHlwZWRlZiBtdWx0aV9hcnJheV90eXBlczo6aW5kZXhfZ2Vu
IGluZGV4X2dlbjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfZ2VuIGV4dGVu
dF9nZW47Cn07CgoKCgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXM+
CmNsYXNzIHZhbHVlX2FjY2Vzc29yX24gOiBwdWJsaWMgbXVsdGlfYXJyYXlfYmFzZSB7CiAgdHlw
ZWRlZiBtdWx0aV9hcnJheV9iYXNlIHN1cGVyX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu
YW1lIHN1cGVyX3R5cGU6OmluZGV4IGluZGV4OwoKCgoKICB0eXBlZGVmIFQgZWxlbWVudDsKICB0
eXBlZGVmIGJvb3N0OjptdWx0aV9hcnJheTxULE51bURpbXMtMT4gdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHN1Yl9hcnJheTxULE51bURpbXMtMT4gcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3Rfc3Vi
X2FycmF5PFQsTnVtRGltcy0xPiBjb25zdF9yZWZlcmVuY2U7Cgpwcm90ZWN0ZWQ6CgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBSZWZlcmVuY2UsIHR5cGVuYW1lIFRQdHI+CiAgUmVmZXJlbmNlIGFjY2Vz
cyhib29zdDo6dHlwZTxSZWZlcmVuY2U+LGluZGV4IGlkeCxUUHRyIGJhc2UsCiAgICAgICAgICAg
ICAgICAgICBjb25zdCBzaXplX3R5cGUqIGV4dGVudHMsCiAgICAgICAgICAgICAgICAgICBjb25z
dCBpbmRleCogc3RyaWRlcywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4KiBpbmRleF9i
YXNlKSBjb25zdCB7CgoKICAgIFRQdHIgbmV3YmFzZSA9IGJhc2UgKyBpZHggKiBzdHJpZGVzWzBd
OwogICAgcmV0dXJuIFJlZmVyZW5jZShuZXdiYXNlLGV4dGVudHMrMSxzdHJpZGVzKzEsaW5kZXhf
YmFzZSsxKTsKCiAgfQoKICB2YWx1ZV9hY2Nlc3Nvcl9uKCkgeyB9CiAgfnZhbHVlX2FjY2Vzc29y
X24oKSB7IH0KfTsKIyAxNjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211
bHRpX2FycmF5L2Jhc2UuaHBwIiAzCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIHZhbHVlX2Fj
Y2Vzc29yX29uZSA6IHB1YmxpYyBtdWx0aV9hcnJheV9iYXNlIHsKICB0eXBlZGVmIG11bHRpX2Fy
cmF5X2Jhc2Ugc3VwZXJfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlw
ZTo6aW5kZXggaW5kZXg7CgoKCiAgdHlwZWRlZiBUIGVsZW1lbnQ7CiAgdHlwZWRlZiBUIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBUIGNvbnN0JiBjb25zdF9y
ZWZlcmVuY2U7Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWZlcmVuY2UsIHR5
cGVuYW1lIFRQdHI+CiAgUmVmZXJlbmNlIGFjY2Vzcyhib29zdDo6dHlwZTxSZWZlcmVuY2U+LGlu
ZGV4IGlkeCxUUHRyIGJhc2UsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUqLAog
ICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXgqIHN0cmlkZXMsCiAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbmRleCopIGNvbnN0IHsKICAgIHJldHVybiAqKGJhc2UgKyBpZHggKiBzdHJpZGVz
WzBdKTsKICB9CgogIHZhbHVlX2FjY2Vzc29yX29uZSgpIHsgfQogIH52YWx1ZV9hY2Nlc3Nvcl9v
bmUoKSB7IH0KfTsKCgoKCgoKc3RydWN0IGNob29zZV92YWx1ZV9hY2Nlc3Nvcl9uIHsKICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcz4KICBzdHJ1Y3QgYmluZCB7CiAg
ICB0eXBlZGVmIHZhbHVlX2FjY2Vzc29yX248VCxOdW1EaW1zPiB0eXBlOwogIH07Cn07CgpzdHJ1
Y3QgY2hvb3NlX3ZhbHVlX2FjY2Vzc29yX29uZSB7CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0
ZDo6c2l6ZV90IE51bURpbXM+CiAgc3RydWN0IGJpbmQgewogICAgdHlwZWRlZiB2YWx1ZV9hY2Nl
c3Nvcl9vbmU8VD4gdHlwZTsKICB9Owp9OwoKCnRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOdW1EaW1z
PgpzdHJ1Y3QgdmFsdWVfYWNjZXNzb3JfZ2VuX2hlbHBlciB7CiAgdHlwZWRlZiBjaG9vc2VfdmFs
dWVfYWNjZXNzb3JfbiBjaG9pY2U7Cn07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgdmFsdWVfYWNjZXNz
b3JfZ2VuX2hlbHBlcjwxPiB7CiAgdHlwZWRlZiBjaG9vc2VfdmFsdWVfYWNjZXNzb3Jfb25lIGNo
b2ljZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpzdHJ1
Y3QgdmFsdWVfYWNjZXNzb3JfZ2VuZXJhdG9yIHsKcHJpdmF0ZToKICB0eXBlZGVmIHR5cGVuYW1l
IHZhbHVlX2FjY2Vzc29yX2dlbl9oZWxwZXI8TnVtRGltcz46OmNob2ljZSBDaG9pY2U7CnB1Ymxp
YzoKICB0eXBlZGVmIHR5cGVuYW1lIENob2ljZTo6dGVtcGxhdGUgYmluZDxULE51bURpbXM+Ojp0
eXBlIHR5cGU7Cn07CiMgMjM5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9t
dWx0aV9hcnJheS9iYXNlLmhwcCIgMwp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTnVtRGltcz4Kc3Ry
dWN0IGl0ZXJhdG9yX3RhZ19zZWxlY3RvciB7CiAgdHlwZWRlZiBzdGQ6OmlucHV0X2l0ZXJhdG9y
X3RhZyB0eXBlOwp9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IGl0ZXJhdG9yX3RhZ19zZWxlY3Rvcjwx
PiB7CiAgdHlwZWRlZiBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIHR5cGU7Cn07CgoK
CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXM+CmNsYXNzIG11bHRp
X2FycmF5X2ltcGxfYmFzZSA6CiAgcHVibGljIHZhbHVlX2FjY2Vzc29yX2dlbmVyYXRvcjxULE51
bURpbXM+Ojp0eXBlIHsKICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX2FjY2Vzc29yX2dlbmVyYXRv
cjxULE51bURpbXM+Ojp0eXBlIHN1cGVyX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IHN1cGVyX3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6
c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmVsZW1l
bnQgZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmluZGV4X3JhbmdlIGlu
ZGV4X3JhbmdlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6dmFsdWVfdHlwZSB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5j
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y
ZWZlcmVuY2U7CgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3Qgc3ViYXJy
YXkgewogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6c3ViX2FycmF5PFQs
TkRpbXM+IHR5cGU7CiAgfTsKCiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVj
dCBjb25zdF9zdWJhcnJheSB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5
Ojpjb25zdF9zdWJfYXJyYXk8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QgTkRpbXM+CiAgc3RydWN0IGFycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6ZGV0
YWlsOjptdWx0aV9hcnJheTo6bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07Cgog
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3QgY29uc3RfYXJyYXlfdmlldyB7
CiAgcHVibGljOgogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6Y29uc3Rf
bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07CgoKCgoKICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RhZ19zZWxlY3RvcjxOdW1EaW1zPjo6dHlwZSBpdGVyYXRvcl90YWc7Cgog
IHR5cGVkZWYgdHlwZW5hbWUKICAgIGl0ZXJhdG9yX2dlbmVyYXRvcjxULE51bURpbXMsdmFsdWVf
dHlwZSwKICAgIHJlZmVyZW5jZSxpdGVyYXRvcl90YWcsaW5kZXg+Ojp0eXBlIGl0ZXJhdG9yOwoK
ICB0eXBlZGVmIHR5cGVuYW1lCiAgICBjb25zdF9pdGVyYXRvcl9nZW5lcmF0b3I8VCxOdW1EaW1z
LHZhbHVlX3R5cGUsCiAgICBjb25zdF9yZWZlcmVuY2UsaXRlcmF0b3JfdGFnLGluZGV4Pjo6dHlw
ZSBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiB0eXBlbmFtZQogICAgcmV2ZXJzZV9pdGVyYXRv
cl9nZW5lcmF0b3I8VCxOdW1EaW1zLHZhbHVlX3R5cGUsCiAgICByZWZlcmVuY2UsaXRlcmF0b3Jf
dGFnLGluZGV4Pjo6dHlwZSByZXZlcnNlX2l0ZXJhdG9yOwoKICB0eXBlZGVmIHR5cGVuYW1lCiAg
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yX2dlbmVyYXRvcjxULE51bURpbXMsdmFsdWVfdHlwZSwK
ICAgIGNvbnN0X3JlZmVyZW5jZSxpdGVyYXRvcl90YWcsaW5kZXg+Ojp0eXBlIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBpdGVyYXRvcl9iYXNlPFQsVCo+IGl0
ZXJfYmFzZTsKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxjb25zdCBUKj4gY29uc3RfaXRlcl9i
YXNlOwoKICBtdWx0aV9hcnJheV9pbXBsX2Jhc2UoKSB7IH0KICB+bXVsdGlfYXJyYXlfaW1wbF9i
YXNlKCkgeyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVmZXJlbmNlLCB0eXBlbmFtZSBJbmRl
eExpc3QsIHR5cGVuYW1lIFRQdHI+CiAgUmVmZXJlbmNlIGFjY2Vzc19lbGVtZW50KGJvb3N0Ojp0
eXBlPFJlZmVyZW5jZT4sIFRQdHIgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW5kZXhMaXN0JiBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBp
bmRleCogc3RyaWRlcykgY29uc3QgewogICAgaW5kZXggb2Zmc2V0ID0gMDsKICAgIGZvciAoc2l6
ZV90eXBlIG4gPSAwOyBuICE9IE51bURpbXM7ICsrbikKICAgICAgb2Zmc2V0ICs9IGluZGljZXNb
bl0gKiBzdHJpZGVzW25dOwoKICAgIHJldHVybiBiYXNlW29mZnNldF07CiAgfQoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgU3RyaWRlTGlzdCwgdHlwZW5hbWUgRXh0ZW50TGlzdD4KICB2b2lkIGNvbXB1
dGVfc3RyaWRlcyhTdHJpZGVMaXN0JiBzdHJpZGVfbGlzdCwgRXh0ZW50TGlzdCYgZXh0ZW50X2xp
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51
bURpbXM+JiBzdG9yYWdlKQogIHsKCiAgICBpbmRleCBzdHJpZGUgPSAxOwogICAgZm9yIChzaXpl
X3R5cGUgbiA9IDA7IG4gIT0gTnVtRGltczsgKytuKSB7CiAgICAgIGluZGV4IHN0cmlkZV9zaWdu
ID0gKzE7CgogICAgICBpZiAoIXN0b3JhZ2UuYXNjZW5kaW5nKHN0b3JhZ2Uub3JkZXJpbmcobikp
KQogICAgICAgIHN0cmlkZV9zaWduID0gLTE7CgoKCiAgICAgIHN0cmlkZV9saXN0W3N0b3JhZ2Uu
b3JkZXJpbmcobildID0gc3RyaWRlICogc3RyaWRlX3NpZ247CgogICAgICBzdHJpZGUgKj0gZXh0
ZW50X2xpc3Rbc3RvcmFnZS5vcmRlcmluZyhuKV07CiAgICB9CiAgfQoKCgoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgU3RyaWRlTGlzdCwgdHlwZW5hbWUgRXh0ZW50TGlzdCwgdHlwZW5hbWUgQmFzZUxp
c3Q+CiAgaW5kZXgKICBjYWxjdWxhdGVfb3JpZ2luX29mZnNldChjb25zdCBTdHJpZGVMaXN0JiBz
dHJpZGVfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFeHRlbnRMaXN0JiBl
eHRlbnRfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmFsX3N0b3Jh
Z2Vfb3JkZXI8TnVtRGltcz4mIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQmFzZUxpc3QmIGluZGV4X2Jhc2VfbGlzdCkKICB7CiAgICByZXR1cm4KICAgICAgY2FsY3Vs
YXRlX2Rlc2NlbmRpbmdfZGltZW5zaW9uX29mZnNldChzdHJpZGVfbGlzdCxleHRlbnRfbGlzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlKSArCiAg
ICAgIGNhbGN1bGF0ZV9pbmRleGluZ19vZmZzZXQoc3RyaWRlX2xpc3QsaW5kZXhfYmFzZV9saXN0
KTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmlkZUxpc3QsIHR5cGVuYW1lIEV4dGVu
dExpc3Q+CiAgaW5kZXgKICBjYWxjdWxhdGVfZGVzY2VuZGluZ19kaW1lbnNpb25fb2Zmc2V0KGNv
bnN0IFN0cmlkZUxpc3QmIHN0cmlkZV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEV4dGVudExpc3QmIGV4dGVudF9saXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdlbmVyYWxfc3RvcmFnZV9vcmRlcjxOdW1EaW1zPiYgc3RvcmFnZSkK
ICB7CiAgICBpbmRleCBvZmZzZXQgPSAwOwogICAgaWYgKCFzdG9yYWdlLmFsbF9kaW1zX2FzY2Vu
ZGluZygpKQogICAgICBmb3IgKHNpemVfdHlwZSBuID0gMDsgbiAhPSBOdW1EaW1zOyArK24pCiAg
ICAgICAgaWYgKCFzdG9yYWdlLmFzY2VuZGluZyhuKSkKICAgICAgICAgIG9mZnNldCAtPSAoZXh0
ZW50X2xpc3Rbbl0gLSAxKSAqIHN0cmlkZV9saXN0W25dOwoKICAgIHJldHVybiBvZmZzZXQ7CiAg
fQoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmlkZUxpc3QsIHR5cGVuYW1lIEJhc2VMaXN0
PgogIGluZGV4CiAgY2FsY3VsYXRlX2luZGV4aW5nX29mZnNldChjb25zdCBTdHJpZGVMaXN0JiBz
dHJpZGVfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlTGlzdCYgaW5k
ZXhfYmFzZV9saXN0KQogIHsKICAgIGluZGV4IG9mZnNldCA9IDA7CiAgICBmb3IgKHNpemVfdHlw
ZSBuID0gMDsgbiAhPSBOdW1EaW1zOyArK24pCiAgICAgICAgb2Zmc2V0IC09IHN0cmlkZV9saXN0
W25dICogaW5kZXhfYmFzZV9saXN0W25dOwogICAgcmV0dXJuIG9mZnNldDsKICB9CiMgNDA1ICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9iYXNlLmhwcCIg
MwogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcnJheVJlZiwgaW50IE5EaW1zLCB0eXBlbmFtZSBUUHRy
PgogIEFycmF5UmVmCiAgZ2VuZXJhdGVfYXJyYXlfdmlldyhib29zdDo6dHlwZTxBcnJheVJlZj4s
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6
CiAgICAgICAgICAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGluZGljZXMs
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUqIGV4dGVudHMsCiAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbmRleCogc3RyaWRlcywKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGluZGV4KiBpbmRleF9iYXNlcywKICAgICAgICAgICAgICAgICAgICAgIFRQdHIgYmFz
ZSkgY29uc3QgewoKICAgIGJvb3N0OjphcnJheTxpbmRleCxORGltcz4gbmV3X3N0cmlkZXM7CiAg
ICBib29zdDo6YXJyYXk8aW5kZXgsTkRpbXM+IG5ld19leHRlbnRzOwoKICAgIGluZGV4IG9mZnNl
dCA9IDA7CiAgICBzaXplX3R5cGUgZGltID0gMDsKICAgIGZvciAoc2l6ZV90eXBlIG4gPSAwOyBu
ICE9IE51bURpbXM7ICsrbikgewogICAgICBjb25zdCBpbmRleCBkZWZhdWx0X3N0YXJ0ID0gaW5k
ZXhfYmFzZXNbbl07CiAgICAgIGNvbnN0IGluZGV4IGRlZmF1bHRfZmluaXNoID0gZGVmYXVsdF9z
dGFydCtleHRlbnRzW25dOwogICAgICBjb25zdCBpbmRleF9yYW5nZSYgY3VycmVudF9yYW5nZSA9
IGluZGljZXMucmFuZ2VzX1tuXTsKICAgICAgaW5kZXggc3RhcnQgPSBjdXJyZW50X3JhbmdlLmdl
dF9zdGFydChkZWZhdWx0X3N0YXJ0KTsKICAgICAgaW5kZXggZmluaXNoID0gY3VycmVudF9yYW5n
ZS5nZXRfZmluaXNoKGRlZmF1bHRfZmluaXNoKTsKICAgICAgaW5kZXggaW5kZXhfZmFjdG9yID0g
Y3VycmVudF9yYW5nZS5zdHJpZGUoKTsKICAgICAgaW5kZXggbGVuID0gKGZpbmlzaCAtIHN0YXJ0
KSAvIGluZGV4X2ZhY3RvcjsKCgoKICAgICAgb2Zmc2V0ICs9IHN0YXJ0ICogc3RyaWRlc1tuXTsK
CiAgICAgIGlmICghY3VycmVudF9yYW5nZS5pc19kZWdlbmVyYXRlKCkpIHsKCgoKICAgICAgICBu
ZXdfc3RyaWRlc1tkaW1dID0gaW5kZXhfZmFjdG9yICogc3RyaWRlc1tuXTsKCgogICAgICAgIG5l
d19leHRlbnRzW2RpbV0gPSBsZW47CiAgICAgICAgKytkaW07CiAgICAgIH0KICAgIH0KICAgIChz
dGF0aWNfY2FzdDx2b2lkPiAoKGRpbSA9PSBORGltcykgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJk
aW0gPT0gTkRpbXMiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlf
YXJyYXkvYmFzZS5ocHAiLCA0NDQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgIHJl
dHVybgogICAgICBBcnJheVJlZihiYXNlK29mZnNldCwKICAgICAgICAgICAgICAgbmV3X2V4dGVu
dHMsCiAgICAgICAgICAgICAgIG5ld19zdHJpZGVzKTsKICB9CgoKfTsKCn0KfQoKfQojIDIyICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS5ocHAiIDIgMwoj
IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2NvbGxl
Y3Rpb25fY29uY2VwdC5ocHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk
ZS9ib29zdC9tdWx0aV9hcnJheS9jb2xsZWN0aW9uX2NvbmNlcHQuaHBwIiAzCm5hbWVzcGFjZSBi
b29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXkgewoKCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbj4KICBzdHJ1Y3QgQ29sbGVjdGlvbkNvbmNlcHQKICB7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29sbGVjdGlvbjo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIENvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb2xsZWN0aW9uOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwog
ICAgdHlwZWRlZiB0eXBlbmFtZSBDb2xsZWN0aW9uOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm
ZXJlbmNlOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29sbGVjdGlvbjo6ZGlmZmVyZW5jZV90eXBl
IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29sbGVjdGlvbjo6c2l6ZV90
eXBlIHNpemVfdHlwZTsKCiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBib29zdDo6ZnVu
Y3Rpb25fcmVxdWlyZXM8Ym9vc3Q6OklucHV0SXRlcmF0b3JDb25jZXB0PGl0ZXJhdG9yPiA+KCk7
CiAgICAgIGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczxib29zdDo6SW5wdXRJdGVyYXRvckNvbmNl
cHQ8Y29uc3RfaXRlcmF0b3I+ID4oKTsKICAgICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPGJv
b3N0OjpDb3B5Q29uc3RydWN0aWJsZUNvbmNlcHQ8dmFsdWVfdHlwZT4gPigpOwogICAgICBjb25z
dF9jb25zdHJhaW50cyhjKTsKICAgICAgaSA9IGMuYmVnaW4oKTsKICAgICAgaSA9IGMuZW5kKCk7
CiAgICAgIGMuc3dhcChjKTsKICAgIH0KICAgIHZvaWQgY29uc3RfY29uc3RyYWludHMoY29uc3Qg
Q29sbGVjdGlvbiYgYykgewogICAgICBjaSA9IGMuYmVnaW4oKTsKICAgICAgY2kgPSBjLmVuZCgp
OwogICAgICBuID0gYy5zaXplKCk7CiAgICAgIGIgPSBjLmVtcHR5KCk7CiAgICB9CiAgICBDb2xs
ZWN0aW9uIGM7CiAgICBib29sIGI7CiAgICBpdGVyYXRvciBpOwogICAgY29uc3RfaXRlcmF0b3Ig
Y2k7CiAgICBzaXplX3R5cGUgbjsKICB9OwoKfQp9Cn0KIyAyMyAiL2hvbWUvY29tcGJpby9kOTUt
YmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlv
L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9jb3B5X2FycmF5LmhwcCIgMSAzCiMg
MjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2NvcHlf
YXJyYXkuaHBwIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv
Y2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y
L2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vzci9p
bmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2Zh
aWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIg
Kl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29u
c3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24s
IGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu
Y2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAyIDMKIyAyMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvY29weV9hcnJheS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJv
b3N0IHsKbmFtZXNwYWNlIGRldGFpbCB7Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7Cgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudD4KY2xhc3MgY29weV9kaXNwYXRjaCB7CnB1YmxpYzoKICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgU291cmNlSXRlcmF0b3IsIHR5cGVuYW1lIERlc3RJdGVyYXRvcj4KICBz
dGF0aWMgdm9pZCBjb3B5X2FycmF5IChTb3VyY2VJdGVyYXRvciBmaXJzdCwgU291cmNlSXRlcmF0
b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgIERlc3RJdGVyYXRvciByZXN1bHQpIHsKICAgIHdo
aWxlIChmaXJzdCAhPSBsYXN0KSB7CiAgICAgIGNvcHlfYXJyYXkoKmZpcnN0KyssKnJlc3VsdCsr
KTsKICAgIH0KICB9CnByaXZhdGU6CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJyYXkxLCB0eXBl
bmFtZSBBcnJheTI+CiAgc3RhdGljIHZvaWQgY29weV9hcnJheSAoY29uc3QgQXJyYXkxJiBzb3Vy
Y2UsIEFycmF5MiBkZXN0KSB7CiAgICBjb3B5X2FycmF5KHNvdXJjZS5iZWdpbigpLHNvdXJjZS5l
bmQoKSxkZXN0LmJlZ2luKCkpOwogIH0KCiAgc3RhdGljIHZvaWQgY29weV9hcnJheSAoY29uc3Qg
RWxlbWVudCYgc291cmNlLCBFbGVtZW50JiBkZXN0KSB7CiAgICBkZXN0ID0gc291cmNlOwogIH0K
Cn07CgoKdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5MSwgdHlwZW5hbWUgQXJyYXkyPgp2b2lkIGNv
cHlfYXJyYXkgKEFycmF5MSYgc291cmNlLCBBcnJheTImIGRlc3QpIHsKICAoc3RhdGljX2Nhc3Q8
dm9pZD4gKChzdGQ6OmVxdWFsKHNvdXJjZS5zaGFwZSgpLHNvdXJjZS5zaGFwZSgpK3NvdXJjZS5u
dW1fZGltZW5zaW9ucygpLCBkZXN0LnNoYXBlKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInN0
ZDo6ZXF1YWwoc291cmNlLnNoYXBlKCksc291cmNlLnNoYXBlKCkrc291cmNlLm51bV9kaW1lbnNp
b25zKCksIGRlc3Quc2hhcGUoKSkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvbXVsdGlfYXJyYXkvY29weV9hcnJheS5ocHAiLCA1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyks
IDApKSk7CgoKICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5MTo6ZWxlbWVudCBlbGVtZW50X3R5cGU7
CiAgY29weV9kaXNwYXRjaDxlbGVtZW50X3R5cGU+OjoKICAgIGNvcHlfYXJyYXkoc291cmNlLmJl
Z2luKCksc291cmNlLmVuZCgpLGRlc3QuYmVnaW4oKSk7Cn0KCgp9Cn0KfQojIDI0ICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS5ocHAiIDIgMwojIDEgIi9o
b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9yLmhw
cCIgMSAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2Fy
cmF5L2l0ZXJhdG9yLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMSAzCiMgMTM5ICIvaG9tZS9jb21wYmlvL2Q5NS1i
bGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0
IHsKIyAxNDggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2Fk
YXB0b3JzLmhwcCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgUG9saWNpZXMsIGNsYXNzIEFkYXB0ZWQsIGNs
YXNzIFRyYWl0cz4Kc3RydWN0IFRyaXZpYWxJdGVyYXRvclBvbGljaWVzQ29uY2VwdAp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdm9pZCBjb25zdHJh
aW50cygpIHsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBBc3NpZ25hYmxlQ29uY2VwdDxQb2xpY2ll
cz4gPigpOwogICAgZnVuY3Rpb25fcmVxdWlyZXM8IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2Vw
dDxQb2xpY2llcz4gPigpOwogICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc2lnbmFibGVDb25jZXB0
PEFkYXB0ZWQ+ID4oKTsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBEZWZhdWx0Q29uc3RydWN0aWJs
ZUNvbmNlcHQ8QWRhcHRlZD4gPigpOwoKICAgIGNvbnN0X2NvbnN0cmFpbnRzKCk7CiAgfQogIHZv
aWQgY29uc3RfY29uc3RyYWludHMoKSBjb25zdCB7CiAgICByZWZlcmVuY2UgciA9IHAuZGVyZWZl
cmVuY2UoeCk7CiAgICBiID0gcC5lcXVhbCh4LCB4KTsKICAgIGlnbm9yZV91bnVzZWRfdmFyaWFi
bGVfd2FybmluZyhyKTsKICB9CiAgUG9saWNpZXMgcDsKICBBZGFwdGVkIHg7CiAgbXV0YWJsZSBi
b29sIGI7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBQb2xpY2llcywgY2xhc3MgQWRhcHRlZCwgY2xh
c3MgVHJhaXRzPgpzdHJ1Y3QgRm9yd2FyZEl0ZXJhdG9yUG9saWNpZXNDb25jZXB0CnsKICB0eXBl
ZGVmIHR5cGVuYW1lIFRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBUcml2
aWFsSXRlcmF0b3JQb2xpY2llc0NvbmNlcHQ8UG9saWNpZXMsIEFkYXB0ZWQsIFRyYWl0cz4KICAg
ICAgPigpOwoKICAgIHAuaW5jcmVtZW50KHgpOwogICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZyB0ID0gaXRlcmF0b3JfY2F0ZWdvcnkoKTsKICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2Fy
bmluZyh0KTsKICB9CiAgUG9saWNpZXMgcDsKICBBZGFwdGVkIHg7CiAgaXRlcmF0b3JfY2F0ZWdv
cnkgY2F0ZWdvcnk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUG9saWNpZXMsIGNsYXNzIEFkYXB0ZWQs
IGNsYXNzIFRyYWl0cz4Kc3RydWN0IEJpZGlyZWN0aW9uYWxJdGVyYXRvclBvbGljaWVzQ29uY2Vw
dAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9y
X2NhdGVnb3J5OwogIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICBmdW5jdGlvbl9yZXF1aXJlczwK
ICAgICAgRm9yd2FyZEl0ZXJhdG9yUG9saWNpZXNDb25jZXB0PFBvbGljaWVzLCBBZGFwdGVkLCBU
cmFpdHM+CiAgICAgID4oKTsKCiAgICBwLmRlY3JlbWVudCh4KTsKICAgIHN0ZDo6YmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcgdCA9IGl0ZXJhdG9yX2NhdGVnb3J5KCk7CiAgICBpZ25vcmVfdW51
c2VkX3ZhcmlhYmxlX3dhcm5pbmcodCk7CiAgfQogIFBvbGljaWVzIHA7CiAgQWRhcHRlZCB4Owp9
OwoKdGVtcGxhdGUgPGNsYXNzIFBvbGljaWVzLCBjbGFzcyBBZGFwdGVkLCBjbGFzcyBUcmFpdHM+
CnN0cnVjdCBSYW5kb21BY2Nlc3NJdGVyYXRvclBvbGljaWVzQ29uY2VwdAp7CiAgdHlwZWRlZiB0
eXBlbmFtZSBUcmFpdHM6OmRpZmZlcmVuY2VfdHlwZSBEaWZmZXJlbmNlVHlwZTsKICB0eXBlZGVm
IHR5cGVuYW1lIFRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dm9pZCBjb25zdHJhaW50cygpIHsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBCaWRpcmVj
dGlvbmFsSXRlcmF0b3JQb2xpY2llc0NvbmNlcHQ8UG9saWNpZXMsIEFkYXB0ZWQsIFRyYWl0cz4K
ICAgICAgPigpOwoKICAgIHAuYWR2YW5jZSh4LCBuKTsKICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcgdCA9IGl0ZXJhdG9yX2NhdGVnb3J5KCk7CiAgICBjb25zdF9jb25zdHJhaW50
cygpOwogICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHQpOwogIH0KICB2b2lkIGNv
bnN0X2NvbnN0cmFpbnRzKCkgY29uc3QgewogICAgbiA9IHAuZGlzdGFuY2UoeCwgeCk7CiAgfQog
IFBvbGljaWVzIHA7CiAgQWRhcHRlZCB4OwogIG11dGFibGUgRGlmZmVyZW5jZVR5cGUgbjsKICBt
dXRhYmxlIGJvb2wgYjsKfTsKCgoKCgpzdHJ1Y3QgZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcwp7
CiMgMjQ3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvcl9hZGFw
dG9ycy5ocHAiIDMKICAgIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgogICAgdm9pZCBpbml0aWFsaXpl
KEJhc2UmKQogICAgICAgIHsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+
CiAgICB0eXBlbmFtZSBJdGVyYXRvckFkYXB0b3I6OnJlZmVyZW5jZSBkZXJlZmVyZW5jZShjb25z
dCBJdGVyYXRvckFkYXB0b3ImIHgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKnguYmFzZSgpOyB9
CgogICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvcj4KICAgIHZvaWQgaW5jcmVtZW50
KEl0ZXJhdG9yQWRhcHRvciYgeCkKICAgICAgICB7ICsreC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogICAgdm9pZCBkZWNyZW1lbnQoSXRlcmF0b3JBZGFw
dG9yJiB4KQogICAgICAgIHsgLS14LmJhc2UoKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVy
YXRvckFkYXB0b3IsIGNsYXNzIERpZmZlcmVuY2VUeXBlPgogICAgdm9pZCBhZHZhbmNlKEl0ZXJh
dG9yQWRhcHRvciYgeCwgRGlmZmVyZW5jZVR5cGUgbikKICAgICAgICB7IHguYmFzZSgpICs9IG47
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yMSwgY2xhc3MgSXRlcmF0b3JB
ZGFwdG9yMj4KICAgIHR5cGVuYW1lIEl0ZXJhdG9yQWRhcHRvcjE6OmRpZmZlcmVuY2VfdHlwZQog
ICAgZGlzdGFuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yMSYgeCwgY29uc3QgSXRlcmF0b3JBZGFw
dG9yMiYgeSkgY29uc3QKICAgICAgICB7IHJldHVybiB5LmJhc2UoKSAtIHguYmFzZSgpOyB9Cgog
ICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjEsIGNsYXNzIEl0ZXJhdG9yQWRhcHRv
cjI+CiAgICBib29sIGVxdWFsKGNvbnN0IEl0ZXJhdG9yQWRhcHRvcjEmIHgsIGNvbnN0IEl0ZXJh
dG9yQWRhcHRvcjImIHkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4geC5iYXNlKCkgPT0geS5iYXNl
KCk7IH0KfTsKIyAzMzkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJh
dG9yX2FkYXB0b3JzLmhwcCIgMwpuYW1lc3BhY2UgZGV0YWlsIHsKCgoKCgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KICBzdHJ1Y3Qgb3BlcmF0b3JfYXJyb3dfcHJveHkKICB7CiAgICAgIG9wZXJhdG9y
X2Fycm93X3Byb3h5KGNvbnN0IFQmIHgpIDogbV92YWx1ZSh4KSB7fQogICAgICBjb25zdCBUKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KCgogICAgICBvcGVyYXRvciBj
b25zdCBUKigpIGNvbnN0IHsgcmV0dXJuICZtX3ZhbHVlOyB9CiAgICAgIFQgbV92YWx1ZTsKICB9
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4KICBpbmxpbmUgb3BlcmF0b3JfYXJyb3dfcHJveHk8
dHlwZW5hbWUgSXRlcjo6dmFsdWVfdHlwZT4KICBvcGVyYXRvcl9hcnJvdyhjb25zdCBJdGVyJiBp
LCBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyOjp2
YWx1ZV90eXBlIHZhbHVlX3Q7CiAgICByZXR1cm4gb3BlcmF0b3JfYXJyb3dfcHJveHk8dmFsdWVf
dD4oKmkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIEl0ZXI+CiAgaW5saW5lIHR5cGVuYW1lIEl0
ZXI6OnBvaW50ZXIKICBvcGVyYXRvcl9hcnJvdyhjb25zdCBJdGVyJiBpLCBzdGQ6OmZvcndhcmRf
aXRlcmF0b3JfdGFnKSB7CiAgICByZXR1cm4gJigqaSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
VmFsdWUsIGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRlcj4KICBzdHJ1Y3Qgb3BlcmF0b3Jf
YXJyb3dfcmVzdWx0X2dlbmVyYXRvcgogIHsKICAgICAgdHlwZWRlZiBvcGVyYXRvcl9hcnJvd19w
cm94eTxWYWx1ZT4gcHJveHk7CgogICAgICBlbnVtIHsgdXNlX3Byb3h5ID0gIWJvb3N0Ojppc19y
ZWZlcmVuY2U8UmVmZXJlbmNlPjo6dmFsdWUgfTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9v
c3Q6OmRldGFpbDo6aWZfdHJ1ZTwodXNlX3Byb3h5KT46OnRlbXBsYXRlCiAgICAgIHRoZW48CiAg
ICAgICAgcHJveHksCgogICAgICAgIFBvaW50ZXIKICAgICAgPjo6dHlwZSB0eXBlOwogIH07CiMg
NDI4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvcl9hZGFwdG9y
cy5ocHAiIDMKICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLGNsYXNzIFZhbHVlPgogICBzdHJ1
Y3QgaXRlcmF0b3JfZGVmYXVsdHMgOiBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+CiAgIHsKCgog
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpZl90cnVlPCgKICAgICAgICAgICAgICAgOjpib29zdDo6
aXNfc2FtZTxWYWx1ZSx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90
eXBlPjo6dmFsdWUKICAgICAgICAgICApPjo6dGVtcGxhdGUgdGhlbjwKICAgICAgICAgICAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAg
ICAgICBWYWx1ZSoKICAgICAgID46OnR5cGUgcG9pbnRlcjsKCiAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIGlmX3RydWU8KAogICAgICAgICAgICAgICA6OmJvb3N0Ojppc19zYW1lPFZhbHVlLHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGU+Ojp2YWx1ZQogICAgICAg
ICAgICk+Ojp0ZW1wbGF0ZSB0aGVuPAogICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPEl0ZXJhdG9yPjo6cmVmZXJlbmNlLAogICAgICAgICAgICAgICAgVmFsdWUmCiAgICAg
ICA+Ojp0eXBlIHJlZmVyZW5jZTsKCiAgIH07CgoKCgoKICBzdHJ1Y3QgZGVmYXVsdF9hcmd1bWVu
dCB7IH07CgogIHN0cnVjdCBkdW1teV9kZWZhdWx0X2dlbiB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
QmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7IHR5cGVkZWYgZGVmYXVsdF9h
cmd1bWVudCB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBHZW4+IHN0cnVjdCBkZWZh
dWx0X2dlbmVyYXRvciB7CiAgICB0eXBlZGVmIGR1bW15X2RlZmF1bHRfZ2VuIHR5cGU7CiAgfTsK
CiAgc3RydWN0IGRlZmF1bHRfdmFsdWVfdHlwZSB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwg
Y2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
Ym9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+Ojp2YWx1ZV90eXBlIHR5cGU7CiAg
ICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRf
dmFsdWVfdHlwZT4KICB7IHR5cGVkZWYgZGVmYXVsdF92YWx1ZV90eXBlIHR5cGU7IH07CgogIHN0
cnVjdCBkZWZhdWx0X2RpZmZlcmVuY2VfdHlwZSB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwg
Y2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
Ym9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+OjpkaWZmZXJlbmNlX3R5cGUgdHlw
ZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVmYXVsdF9nZW5lcmF0b3I8ZGVm
YXVsdF9kaWZmZXJlbmNlX3R5cGU+CiAgeyB0eXBlZGVmIGRlZmF1bHRfZGlmZmVyZW5jZV90eXBl
IHR5cGU7IH07CgogIHN0cnVjdCBkZWZhdWx0X2l0ZXJhdG9yX2NhdGVnb3J5IHsKICAgIHRlbXBs
YXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8QmFzZT46Oml0
ZXJhdG9yX2NhdGVnb3J5IHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGRl
ZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnk+CiAgeyB0eXBlZGVmIGRl
ZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnkgdHlwZTsgfTsKCiAgc3RydWN0IGRlZmF1bHRfcG9pbnRl
ciB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNl
bGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjp2YWx1ZV90eXBlIFZhbHVlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX2RlZmF1bHRzPEJh
c2UsVmFsdWU+Ojpwb2ludGVyCiAgICAgICAgdHlwZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgZGVmYXVsdF9nZW5lcmF0b3I8ZGVmYXVsdF9wb2ludGVyPgogIHsgdHlwZWRlZiBk
ZWZhdWx0X3BvaW50ZXIgdHlwZTsgfTsKCiAgc3RydWN0IGRlZmF1bHRfcmVmZXJlbmNlIHsKICAg
IHRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnZhbHVlX3R5cGUgVmFsdWU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8QmFzZSxWYWx1
ZT46OnJlZmVyZW5jZQogICAgICAgIHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3Ry
dWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfcmVmZXJlbmNlPgogIHsgdHlwZWRlZiBkZWZh
dWx0X3JlZmVyZW5jZSB0eXBlOyB9OwoKfQoKCgoKCnN0cnVjdCBuYW1lZF90ZW1wbGF0ZV9wYXJh
bV9iYXNlIHsgfTsKCm5hbWVzcGFjZSBkZXRhaWwgewogIHN0cnVjdCB2YWx1ZV90eXBlX3RhZyB7
IH07CiAgc3RydWN0IHJlZmVyZW5jZV90YWcgeyB9OwogIHN0cnVjdCBwb2ludGVyX3RhZyB7IH07
CiAgc3RydWN0IGRpZmZlcmVuY2VfdHlwZV90YWcgeyB9OwogIHN0cnVjdCBpdGVyYXRvcl9jYXRl
Z29yeV90YWcgeyB9OwoKCgogIHRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgogIHN0cnVjdCBj
b25zX3R5cGUgewogICAgdHlwZWRlZiBBIGZpcnN0X3R5cGU7CiAgICB0eXBlZGVmIEIgc2Vjb25k
X3R5cGU7CiAgfTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4gc3RydWN0IHZhbHVlX3R5cGVf
aXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAgdHlwZWRlZiBkZXRhaWw6
OmNvbnNfdHlwZTxkZXRhaWw6OnZhbHVlX3R5cGVfdGFnLCBWYWx1ZT4gdHlwZTsKfTsKdGVtcGxh
dGUgPGNsYXNzIFJlZmVyZW5jZT4gc3RydWN0IHJlZmVyZW5jZV9pcyA6IHB1YmxpYyBuYW1lZF90
ZW1wbGF0ZV9wYXJhbV9iYXNlCnsKICB0eXBlZGVmIGRldGFpbDo6Y29uc190eXBlPGRldGFpbDo6
cmVmZXJlbmNlX3RhZywgUmVmZXJlbmNlPiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgUG9pbnRl
cj4gc3RydWN0IHBvaW50ZXJfaXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7
CiAgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6OnBvaW50ZXJfdGFnLCBQb2ludGVy
PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgRGlmZmVyZW5jZT4gc3RydWN0IGRpZmZlcmVuY2Vf
dHlwZV9pcwogIDogcHVibGljIG5hbWVkX3RlbXBsYXRlX3BhcmFtX2Jhc2UKewogIHR5cGVkZWYg
ZGV0YWlsOjpjb25zX3R5cGU8ZGV0YWlsOjpkaWZmZXJlbmNlX3R5cGVfdGFnLCBEaWZmZXJlbmNl
PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JDYXRlZ29yeT4gc3RydWN0IGl0ZXJh
dG9yX2NhdGVnb3J5X2lzCiAgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAg
dHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6Oml0ZXJhdG9yX2NhdGVnb3J5X3RhZywg
SXRlcmF0b3JDYXRlZ29yeT4gdHlwZTsKfTsKCm5hbWVzcGFjZSBkZXRhaWwgewoKICBzdHJ1Y3Qg
ZW5kX29mX2xpc3QgeyB9OwojIDU5OSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCiAgdGVtcGxhdGUgPGNsYXNzIEFzc29jTGlzdCwg
Y2xhc3MgS2V5PiBzdHJ1Y3QgZmluZF9wYXJhbTsKCiAgdGVtcGxhdGUgPGNsYXNzIEtleT4KICBz
dHJ1Y3QgZmluZF9wYXJhbTxlbmRfb2ZfbGlzdCwgS2V5PiB7IHR5cGVkZWYgZGVmYXVsdF9hcmd1
bWVudCB0eXBlOyB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNz
IFJlc3Q+CiAgc3RydWN0IGZpbmRfcGFyYW08ZGV0YWlsOjpjb25zX3R5cGU8IGRldGFpbDo6Y29u
c190eXBlPEtleSwgVmFsdWU+LCBSZXN0PiwgS2V5PiB7CiAgICB0eXBlZGVmIFZhbHVlIHR5cGU7
CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBLZXkxLCBjbGFzcyBWYWx1ZSwgY2xhc3MgUmVzdCwg
Y2xhc3MgS2V5Mj4KICBzdHJ1Y3QgZmluZF9wYXJhbTxkZXRhaWw6OmNvbnNfdHlwZTwgZGV0YWls
Ojpjb25zX3R5cGU8S2V5MSwgVmFsdWU+LCBSZXN0PiwgS2V5Mj4gewogICAgdHlwZWRlZiB0eXBl
bmFtZSBmaW5kX3BhcmFtPFJlc3QsIEtleTI+Ojp0eXBlIHR5cGU7CiAgfTsKCgogIHN0cnVjdCBt
YWtlX25hbWVkX2FyZyB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWx1ZT4KICAg
IHN0cnVjdCBzZWxlY3QgeyB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlOjp0eXBlIHR5cGU7IH07CiAg
fTsKICBzdHJ1Y3QgbWFrZV9rZXlfdmFsdWUgewogICAgdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xh
c3MgVmFsdWU+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxL
ZXksIFZhbHVlPiB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4KICBzdHJ1
Y3QgaXNfbmFtZWRfcGFyYW1ldGVyCiAgewogICAgICBlbnVtIHsgdmFsdWUgPSBpc19jb252ZXJ0
aWJsZTwgdHlwZW5hbWUgYWRkX3JlZmVyZW5jZTwgVmFsdWUgPjo6dHlwZSwgYWRkX3JlZmVyZW5j
ZTwgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZSA+Ojp0eXBlID46OnZhbHVlIH07CiAgfTsKIyA2
NDAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2FkYXB0b3Jz
LmhwcCIgMwogIHRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVlPgogIHN0cnVjdCBtYWtl
X2FyZyB7CgoKCgoKCiAgICBlbnVtIHsgaXNfbmFtZWQgPSBpc19uYW1lZF9wYXJhbWV0ZXI8VmFs
dWU+Ojp2YWx1ZSB9OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpZl90cnVlPChpc19uYW1lZCk+Ojp0
ZW1wbGF0ZQogICAgICB0aGVuPG1ha2VfbmFtZWRfYXJnLCBtYWtlX2tleV92YWx1ZT46OnR5cGUg
TWFrZTsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIE1ha2U6OnRlbXBsYXRlIHNlbGVjdDxLZXksIFZh
bHVlPjo6dHlwZSB0eXBlOwogIH07CgoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19k
ZWZhdWx0IHsgdHlwZWRlZiB0eXBlX3RyYWl0czo6bm9fdHlwZSB0eXBlOyB9OwogIHRlbXBsYXRl
IDw+IHN0cnVjdCBpc19kZWZhdWx0PGRlZmF1bHRfYXJndW1lbnQ+CiAgeyB0eXBlZGVmIHR5cGVf
dHJhaXRzOjp5ZXNfdHlwZSB0eXBlOyB9OwoKICBzdHJ1Y3QgY2hvb3NlX2RlZmF1bHQgewogICAg
dGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgRGVmYXVsdEdlbiwgY2xhc3MgQmFzZSwgY2xhc3Mg
VHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZGVmYXVs
dF9nZW5lcmF0b3I8RGVmYXVsdEdlbj46OnR5cGUgR2VuOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IEdlbjo6dGVtcGxhdGUgc2VsZWN0PEJhc2UsVHJhaXRzPjo6dHlwZSB0eXBlOwogICAgfTsKICB9
OwogIHN0cnVjdCBjaG9vc2VfYXJnIHsKICAgIHRlbXBsYXRlIDxjbGFzcyBBcmcsIGNsYXNzIERl
ZmF1bHRHZW4sIGNsYXNzIEJhc2UsIGNsYXNzIFRyYWl0cz4KICAgIHN0cnVjdCBzZWxlY3Qgewog
ICAgICB0eXBlZGVmIEFyZyB0eXBlOwogICAgfTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVXNl
RGVmYXVsdD4KICBzdHJ1Y3QgY2hvb3NlX2FyZ19vcl9kZWZhdWx0IHsgdHlwZWRlZiBjaG9vc2Vf
YXJnIHR5cGU7IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGNob29zZV9hcmdfb3JfZGVmYXVsdDx0
eXBlX3RyYWl0czo6eWVzX3R5cGU+IHsKICAgIHR5cGVkZWYgY2hvb3NlX2RlZmF1bHQgdHlwZTsK
ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQXJnLCBjbGFzcyBEZWZhdWx0R2VuLCBjbGFzcyBCYXNl
LCBjbGFzcyBUcmFpdHM+CiAgY2xhc3MgcmVzb2x2ZV9kZWZhdWx0IHsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgY2hvb3NlX2FyZ19vcl9kZWZhdWx0PHR5cGVuYW1lIGlzX2RlZmF1bHQ8QXJnPjo6dHlw
ZT46OnR5cGUKICAgICAgU2VsZWN0b3I7CiAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBT
ZWxlY3RvcgogICAgICA6OnRlbXBsYXRlIHNlbGVjdDxBcmcsIERlZmF1bHRHZW4sIEJhc2UsIFRy
YWl0cz46OnR5cGUgdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVmFs
dWUsIGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRlciwKICAgICAgICAgICAgY2xhc3MgQ2F0
ZWdvcnksIGNsYXNzIERpc3RhbmNlPgogIGNsYXNzIGl0ZXJhdG9yX2FkYXB0b3JfdHJhaXRzX2dl
bgogIHsKCgoKCgogICAgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTwgdHlwZW5hbWUgbWFrZV9h
cmc8dmFsdWVfdHlwZV90YWcsIFZhbHVlPjo6dHlwZSwKICAgICAgZGV0YWlsOjpjb25zX3R5cGU8
dHlwZW5hbWUgbWFrZV9hcmc8cmVmZXJlbmNlX3RhZywgUmVmZXJlbmNlPjo6dHlwZSwKICAgICAg
ZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9hcmc8cG9pbnRlcl90YWcsIFBvaW50ZXI+
Ojp0eXBlLAogICAgICBkZXRhaWw6OmNvbnNfdHlwZTx0eXBlbmFtZSBtYWtlX2FyZzxpdGVyYXRv
cl9jYXRlZ29yeV90YWcsIENhdGVnb3J5Pjo6dHlwZSwKICAgICAgZGV0YWlsOjpjb25zX3R5cGU8
dHlwZW5hbWUgbWFrZV9hcmc8ZGlmZmVyZW5jZV90eXBlX3RhZywgRGlzdGFuY2U+Ojp0eXBlLAog
ICAgICAgICAgICAgICAgZW5kX29mX2xpc3Q+ID4gPiA+ID4gQXJnTGlzdDsKCgogICAgdHlwZWRl
ZiB0eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHZhbHVlX3R5cGVfdGFnPjo6dHlwZSBWYWw7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIGZpbmRfcGFyYW08QXJnTGlzdCwgZGlmZmVyZW5jZV90eXBl
X3RhZz46OnR5cGUgRGlmZjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZmluZF9wYXJhbTxBcmdMaXN0
LCBpdGVyYXRvcl9jYXRlZ29yeV90YWc+Ojp0eXBlIENhdDsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
ZmluZF9wYXJhbTxBcmdMaXN0LCBwb2ludGVyX3RhZz46OnR5cGUgUHRyOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHJlZmVyZW5jZV90YWc+Ojp0eXBlIFJlZjsKCiAg
ICB0eXBlZGVmIGJvb3N0OjppdGVyYXRvcjxDYXRlZ29yeSwgVmFsdWUsIERpc3RhbmNlLCBQb2lu
dGVyLCBSZWZlcmVuY2U+CiAgICAgIFRyYWl0czA7CgoKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVz
b2x2ZV9kZWZhdWx0PFZhbCwgZGVmYXVsdF92YWx1ZV90eXBlLCBCYXNlLCBUcmFpdHMwPjo6dHlw
ZQogICAgICB2YWx1ZV90eXBlOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0
PERpZmYsIGRlZmF1bHRfZGlmZmVyZW5jZV90eXBlLCBCYXNlLAogICAgICBUcmFpdHMwPjo6dHlw
ZSBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc29sdmVfZGVmYXVsdDxD
YXQsIGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnksIEJhc2UsCiAgICAgIFRyYWl0czA+Ojp0eXBl
IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgYm9vc3Q6Oml0ZXJhdG9yPGl0ZXJhdG9y
X2NhdGVnb3J5LCB2YWx1ZV90eXBlLCBkaWZmZXJlbmNlX3R5cGUsCiAgICAgIFBvaW50ZXIsIFJl
ZmVyZW5jZT4gVHJhaXRzMTsKCgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc29sdmVfZGVmYXVs
dDxQdHIsIGRlZmF1bHRfcG9pbnRlciwgQmFzZSwgVHJhaXRzMT46OnR5cGUKICAgICAgcG9pbnRl
cjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0PFJlZiwgZGVmYXVsdF9yZWZl
cmVuY2UsIEJhc2UsIFRyYWl0czE+Ojp0eXBlCiAgICAgIHJlZmVyZW5jZTsKCiAgcHVibGljOgog
ICAgdHlwZWRlZiBib29zdDo6aXRlcmF0b3I8aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgIHR5cGVu
YW1lIHJlbW92ZV9jb25zdDx2YWx1ZV90eXBlPjo6dHlwZSwKICAgICAgZGlmZmVyZW5jZV90eXBl
LCBwb2ludGVyLCByZWZlcmVuY2U+IHR5cGU7CiAgfTsKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2F0
ZWdvcnksIGNsYXNzIFZhbHVlLCBjbGFzcyBEaWZmZXJlbmNlLCBjbGFzcyBQb2ludGVyLCBjbGFz
cyBSZWZlcmVuY2U+CiAgc3RydWN0IHZhbGlkYXRvcgogIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW5wdXRfb3Jfb3V0cHV0X2l0ZXIgPSAoYm9vc3Q6OmlzX2NvbnZlcnRpYmxlPENhdGVn
b3J5KixzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyo+Ojp2YWx1ZSB8IGJvb3N0Ojppc19jb252ZXJ0
aWJsZTxDYXRlZ29yeSosc3RkOjpvdXRwdXRfaXRlcmF0b3JfdGFnKj46OnZhbHVlKTsKCgoKCgog
ICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6
OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBpc19pbnB1dF9vcl9vdXRwdXRfaXRl
ciApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNzUzOwoKCgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBmb3J3YXJkX2l0ZXJfd2l0aF9yZWFsX3JlZmVyZW5jZSA9ICgoIWJvb3N0Ojpp
c19jb252ZXJ0aWJsZTxDYXRlZ29yeSosc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyo+Ojp2YWx1
ZSkgfCBib29zdDo6aXNfc2FtZTxSZWZlcmVuY2UsVmFsdWUmPjo6dmFsdWUgfCBib29zdDo6aXNf
c2FtZTxSZWZlcmVuY2UsdHlwZW5hbWUgYWRkX2NvbnN0PFZhbHVlPjo6dHlwZSY+Ojp2YWx1ZSk7
CgoKCgoKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6
OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggZm9yd2FyZF9pdGVyX3dp
dGhfcmVhbF9yZWZlcmVuY2UgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzc2MzsK
ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUmVzdWx0PiBzdHJ1Y3QgZGVwZW5kZW50
CiAgewogICAgdHlwZWRlZiBSZXN1bHQgdHlwZTsKICB9OwoKfQojIDgxMCAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCnRlbXBsYXRl
IDxjbGFzcyBCYXNlLCBjbGFzcyBQb2xpY2llcywKICAgIGNsYXNzIFZhbHVlID0gOjpib29zdDo6
ZGV0YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgUmVmZXJlbmNlID0gOjpib29zdDo6
ZGV0YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgUG9pbnRlciA9IDo6Ym9vc3Q6OmRl
dGFpbDo6ZGVmYXVsdF9hcmd1bWVudCwKICAgIGNsYXNzIENhdGVnb3J5ID0gOjpib29zdDo6ZGV0
YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgRGlzdGFuY2UgPSA6OmJvb3N0OjpkZXRh
aWw6OmRlZmF1bHRfYXJndW1lbnQKICAgICAgICAgPgpzdHJ1Y3QgaXRlcmF0b3JfYWRhcHRvciA6
CgoKCgoKCiAgICBkZXRhaWw6Oml0ZXJhdG9yX2FkYXB0b3JfdHJhaXRzX2dlbjxCYXNlLFZhbHVl
LFJlZmVyZW5jZSxQb2ludGVyLENhdGVnb3J5LERpc3RhbmNlPjo6dHlwZQoKewogICAgdHlwZWRl
ZiBpdGVyYXRvcl9hZGFwdG9yPEJhc2UsUG9saWNpZXMsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIs
Q2F0ZWdvcnksRGlzdGFuY2U+IHNlbGY7CiBwdWJsaWM6CiAgICB0eXBlZGVmIGRldGFpbDo6aXRl
cmF0b3JfYWRhcHRvcl90cmFpdHNfZ2VuPEJhc2UsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0
ZWdvcnksRGlzdGFuY2U+IFRyYWl0c0dlbjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzR2Vu
Ojp0eXBlIFRyYWl0czsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6ZGlmZmVyZW5jZV90
eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjp2YWx1ZV90
eXBlIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6cG9pbnRlciBwb2lu
dGVyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0
ZWdvcnk7CgogICAgdHlwZWRlZiBCYXNlIGJhc2VfdHlwZTsKICAgIHR5cGVkZWYgUG9saWNpZXMg
cG9saWNpZXNfdHlwZTsKCiBwcml2YXRlOgogICAgdHlwZWRlZiBkZXRhaWw6OnZhbGlkYXRvcjwK
ICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeSx2YWx1ZV90eXBlLGRpZmZlcmVuY2VfdHlwZSxwb2lu
dGVyLHJlZmVyZW5jZQogICAgICAgID4gY29uY2VwdF9jaGVjazsKCiBwdWJsaWM6CiAgICBpdGVy
YXRvcl9hZGFwdG9yKCkKICAgIHsKICAgIH0KCiAgICBleHBsaWNpdAogICAgaXRlcmF0b3JfYWRh
cHRvcihjb25zdCBCYXNlJiBpdCwgY29uc3QgUG9saWNpZXMmIHAgPSBQb2xpY2llcygpKQogICAg
ICAgIDogbV9pdGVyX3AoaXQsIHApIHsKICAgICAgICBwb2xpY2llcygpLmluaXRpYWxpemUoYmFz
ZSgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcjIsIGNsYXNzIFZhbHVlMiwgY2xh
c3MgUG9pbnRlcjIsIGNsYXNzIFJlZmVyZW5jZTI+CiAgICBpdGVyYXRvcl9hZGFwdG9yICgKICAg
ICAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0ZXIyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVu
Y2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgc3JjKQogICAgICAgICAgICA6IG1faXRl
cl9wKHNyYy5iYXNlKCksIHNyYy5wb2xpY2llcygpKQogICAgewogICAgICAgIHBvbGljaWVzKCku
aW5pdGlhbGl6ZShiYXNlKCkpOwogICAgfQojIDg3MyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCiAgICByZWZlcmVuY2Ugb3BlcmF0
b3IqKCkgY29uc3QgewogICAgICAgICByZXR1cm4gcG9saWNpZXMoKS5kZXJlZmVyZW5jZSgqdGhp
cyk7CiAgICB9CgoKCgoKCiAgICB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjpvcGVyYXRvcl9hcnJv
d19yZXN1bHRfZ2VuZXJhdG9yPHZhbHVlX3R5cGUscmVmZXJlbmNlLHBvaW50ZXI+Ojp0eXBlCiAg
ICBvcGVyYXRvci0+KCkgY29uc3QKICAgICAgICB7IHJldHVybiBkZXRhaWw6Om9wZXJhdG9yX2Fy
cm93KCp0aGlzLCBpdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgoKCiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgZGlmZl90eXBlPgogICAgdHlwZW5hbWUgZGV0YWlsOjpkZXBlbmRlbnQ8ZGlmZl90eXBlLCB2
YWx1ZV90eXBlPjo6dHlwZSBvcGVyYXRvcltdKGRpZmZfdHlwZSBuKSBjb25zdAogICAgICAgIHsg
cmV0dXJuICooKnRoaXMgKyBuKTsgfQoKICAgIHNlbGYmIG9wZXJhdG9yKysoKSB7CgogICAgICAg
IHBvbGljaWVzKCkuaW5jcmVtZW50KCp0aGlzKTsKCgoKCgogICAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgICBzZWxmIG9wZXJhdG9yKysoaW50KSB7IHNlbGYgdG1wKCp0aGlzKTsgKysqdGhp
czsgcmV0dXJuIHRtcDsgfQoKICAgIHNlbGYmIG9wZXJhdG9yLS0oKSB7CgogICAgICAgIHBvbGlj
aWVzKCkuZGVjcmVtZW50KCp0aGlzKTsKCgoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
ICAgc2VsZiBvcGVyYXRvci0tKGludCkgeyBzZWxmIHRtcCgqdGhpcyk7IC0tKnRoaXM7IHJldHVy
biB0bXA7IH0KCiAgICBzZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBuKSB7CiAgICAg
ICAgcG9saWNpZXMoKS5hZHZhbmNlKCp0aGlzLCBuKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogICAgc2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgbikgewogICAgICAgIHBv
bGljaWVzKCkuYWR2YW5jZSgqdGhpcywgLW4pOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgICBiYXNlX3R5cGUgY29uc3QmIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJfcC5maXJz
dCgpOyB9CgoKCiAgICBzZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgeCkgY29uc3QKICAg
ICAgICB7IHNlbGYgcmVzdWx0KCp0aGlzKTsgcmV0dXJuIHJlc3VsdCAtPSB4OyB9CnByaXZhdGU6
CiAgICBjb21wcmVzc2VkX3BhaXI8QmFzZSxQb2xpY2llcz4gbV9pdGVyX3A7CgpwdWJsaWM6CiAg
ICBiYXNlX3R5cGUmIGJhc2UoKSB7IHJldHVybiBtX2l0ZXJfcC5maXJzdCgpOyB9CiAgICBQb2xp
Y2llcyYgcG9saWNpZXMoKSB7IHJldHVybiBtX2l0ZXJfcC5zZWNvbmQoKTsgfQogICAgY29uc3Qg
UG9saWNpZXMmIHBvbGljaWVzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyX3Auc2Vjb25kKCk7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUsIGNs
YXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRlciwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBE
aXN0YW5jZTEsIGNsYXNzIERpc3RhbmNlMj4KaXRlcmF0b3JfYWRhcHRvcjxCYXNlLFBvbGljaWVz
LFZhbHVlLFJlZmVyZW5jZSxQb2ludGVyLENhdGVnb3J5LERpc3RhbmNlMT4Kb3BlcmF0b3IrKAog
ICAgaXRlcmF0b3JfYWRhcHRvcjxCYXNlLFBvbGljaWVzLFZhbHVlLFJlZmVyZW5jZSxQb2ludGVy
LENhdGVnb3J5LERpc3RhbmNlMT4gcCwKICAgIERpc3RhbmNlMiB4KQp7CiAgICByZXR1cm4gcCAr
PSB4Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVl
LCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIFBvaW50ZXIsCiAgICBjbGFzcyBDYXRlZ29yeSwgY2xh
c3MgRGlzdGFuY2UxLCBjbGFzcyBEaXN0YW5jZTI+Cml0ZXJhdG9yX2FkYXB0b3I8QmFzZSxQb2xp
Y2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5jZTE+Cm9wZXJhdG9y
KygKICAgIERpc3RhbmNlMiB4LAogICAgaXRlcmF0b3JfYWRhcHRvcjxCYXNlLFBvbGljaWVzLFZh
bHVlLFJlZmVyZW5jZSxQb2ludGVyLENhdGVnb3J5LERpc3RhbmNlMT4gcCkKewogICAgcmV0dXJu
IHAgKz0geDsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRlcmF0b3IyLCBj
bGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUxLCBjbGFzcyBWYWx1ZTIsCiAgICBjbGFzcyBSZWZl
cmVuY2UxLCBjbGFzcyBSZWZlcmVuY2UyLCBjbGFzcyBQb2ludGVyMSwgY2xhc3MgUG9pbnRlcjIs
IGNsYXNzIENhdGVnb3J5LAogICAgY2xhc3MgRGlzdGFuY2U+CnR5cGVuYW1lIGl0ZXJhdG9yX2Fk
YXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVn
b3J5LERpc3RhbmNlPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLSgKICAgIGNvbnN0IGl0ZXJh
dG9yX2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIx
LENhdGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0
b3IyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNl
PiYgeSkKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9s
aWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsCiAgICBQb2ludGVyMSxDYXRlZ29yeSxEaXN0YW5jZT46
OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgcmV0dXJuIHgucG9saWNpZXMoKS5k
aXN0YW5jZSh5LCB4KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEsIGNsYXNzIEl0ZXJh
dG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFsdWUyLAogICAgY2xh
c3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRlcjEsIGNsYXNzIFBv
aW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgppbmxpbmUgYm9vbApv
cGVyYXRvcj09KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9saWNpZXMs
VmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+JiB4LAogICAgY29u
c3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVyZW5jZTIs
UG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4geC5wb2xpY2llcygp
LmVxdWFsKHgsIHkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRv
cjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBWYWx1ZTEsIGNsYXNzIFZhbHVlMiwKICAgIGNsYXNz
IFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5jZTIsIGNsYXNzIFBvaW50ZXIxLCBjbGFzcyBQb2lu
dGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wKb3Bl
cmF0b3I8KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9saWNpZXMsVmFs
dWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+JiB4LAogICAgY29uc3Qg
aXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVyZW5jZTIsUG9p
bnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4geC5wb2xpY2llcygpLmRp
c3RhbmNlKHksIHgpIDwgMDsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRl
cmF0b3IyLCBjbGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUxLCBjbGFzcyBWYWx1ZTIsCiAgICBj
bGFzcyBSZWZlcmVuY2UxLCBjbGFzcyBSZWZlcmVuY2UyLCBjbGFzcyBQb2ludGVyMSwgY2xhc3Mg
UG9pbnRlcjIsCiAgICBjbGFzcyBDYXRlZ29yeSwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSBib29s
Cm9wZXJhdG9yPigKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVz
LFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNv
bnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2Uy
LFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewogICAgcmV0dXJuIHgucG9saWNpZXMo
KS5kaXN0YW5jZSh5LCB4KSA+IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEsIGNsYXNz
IEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFsdWUyLAog
ICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRlcjEsIGNs
YXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj49KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9s
aWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+JiB4LAog
ICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVy
ZW5jZTIsUG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4geC5wb2xp
Y2llcygpLmRpc3RhbmNlKHksIHgpID49IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEs
IGNsYXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFs
dWUyLAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRl
cjEsIGNsYXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgpp
bmxpbmUgYm9vbApvcGVyYXRvcjw9KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRv
cjEsUG9saWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+
JiB4LAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUy
LFJlZmVyZW5jZTIsUG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4g
eC5wb2xpY2llcygpLmRpc3RhbmNlKHksIHgpIDw9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVy
YXRvcjEsIGNsYXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xh
c3MgVmFsdWUyLAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3Mg
UG9pbnRlcjEsIGNsYXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3Rh
bmNlPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJ
dGVyYXRvcjEsUG9saWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlz
dGFuY2U+JiB4LAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMs
VmFsdWUyLFJlZmVyZW5jZTIsUG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICBy
ZXR1cm4gIXgucG9saWNpZXMoKS5lcXVhbCh4LCB5KTsKfQojIDEwNTAgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbj4Kc3RydWN0IHRyYW5zZm9ybV9pdGVyYXRvcl9w
b2xpY2llcyA6IHB1YmxpYyBkZWZhdWx0X2l0ZXJhdG9yX3BvbGljaWVzCnsKICAgIHRyYW5zZm9y
bV9pdGVyYXRvcl9wb2xpY2llcygpIHsgfQogICAgdHJhbnNmb3JtX2l0ZXJhdG9yX3BvbGljaWVz
KGNvbnN0IEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb24mIGYpIDogbV9mKGYpIHsgfQoKICAgIHRlbXBs
YXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+CiAgICB0eXBlbmFtZSBJdGVyYXRvckFkYXB0b3I6
OnJlZmVyZW5jZQogICAgZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yJiBpdGVyKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIG1fZigqaXRlci5iYXNlKCkpOyB9CgogICAgQWRhcHRhYmxl
VW5hcnlGdW5jdGlvbiBtX2Y7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5j
dGlvbiwgY2xhc3MgSXRlcmF0b3I+CmNsYXNzIHRyYW5zZm9ybV9pdGVyYXRvcl9nZW5lcmF0b3IK
ewogICAgdHlwZWRlZiB0eXBlbmFtZSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uOjpyZXN1bHRfdHlw
ZSB2YWx1ZV90eXBlOwpwdWJsaWM6CiAgICB0eXBlZGVmIGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0
b3IsCiAgICAgIHRyYW5zZm9ybV9pdGVyYXRvcl9wb2xpY2llczxBZGFwdGFibGVVbmFyeUZ1bmN0
aW9uPiwKICAgICAgICB2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCB2YWx1ZV90eXBlKiwgc3RkOjpp
bnB1dF9pdGVyYXRvcl90YWc+CiAgICAgIHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRh
YmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSB0cmFuc2Zv
cm1faXRlcmF0b3JfZ2VuZXJhdG9yPEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb24sSXRlcmF0b3I+Ojp0
eXBlCm1ha2VfdHJhbnNmb3JtX2l0ZXJhdG9yKAogICAgSXRlcmF0b3IgYmFzZSwKICAgIGNvbnN0
IEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb24mIGYgPSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uKCkpCnsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhbnNmb3JtX2l0ZXJhdG9yX2dlbmVyYXRvcjxBZGFwdGFi
bGVVbmFyeUZ1bmN0aW9uLEl0ZXJhdG9yPjo6dHlwZSByZXN1bHRfdDsKICAgIHJldHVybiByZXN1
bHRfdChiYXNlLCBmKTsKfQojIDExMDAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv
b3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwpzdHJ1Y3QgaW5kaXJlY3RfaXRlcmF0b3JfcG9s
aWNpZXMgOiBwdWJsaWMgZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcwp7CiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogICAgdHlwZW5hbWUgSXRlcmF0b3JBZGFwdG9yOjpyZWZl
cmVuY2UgZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yJiB4KSBjb25zdAogICAgICAg
IHsgcmV0dXJuICoqeC5iYXNlKCk7IH0KfTsKCm5hbWVzcGFjZSBkZXRhaWwgewoKICB0ZW1wbGF0
ZSA8Y2xhc3MgVD4KICBzdHJ1Y3QgdHJhaXRzX29mX3ZhbHVlX3R5cGUgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX3RyYWl0czxUPjo6dmFsdWVfdHlwZSBv
dXRlcl92YWx1ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRv
cl90cmFpdHM8b3V0ZXJfdmFsdWU+Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPG91dGVyX3ZhbHVlPjo6
cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWls
OjppdGVyYXRvcl90cmFpdHM8b3V0ZXJfdmFsdWU+Ojpwb2ludGVyIHBvaW50ZXI7CiAgfTsKCn0K
CnRlbXBsYXRlIDxjbGFzcyBPdXRlckl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgVmFsdWUKCiAg
ICAgICAgICAgICAgICA9IHR5cGVuYW1lIGRldGFpbDo6dHJhaXRzX29mX3ZhbHVlX3R5cGU8CiAg
ICAgICAgICAgICAgICAgICAgICAgIE91dGVySXRlcmF0b3I+Ojp2YWx1ZV90eXBlCgogICAgICAg
ICAgLCBjbGFzcyBSZWZlcmVuY2UKCiAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGRldGFpbDo6
dHJhaXRzX29mX3ZhbHVlX3R5cGU8CiAgICAgICAgICAgICAgICAgICAgICAgIE91dGVySXRlcmF0
b3I+OjpyZWZlcmVuY2UKCgoKICAgICAgICAgICwgY2xhc3MgQ2F0ZWdvcnkgPSB0eXBlbmFtZSBi
b29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8CiAgICAgICAgICAgICAgICAgICAgICAgIE91
dGVySXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgLCBjbGFzcyBQb2ludGVy
CgogICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBkZXRhaWw6OnRyYWl0c19vZl92YWx1ZV90eXBl
PAogICAgICAgICAgICAgICAgICAgICAgICBPdXRlckl0ZXJhdG9yPjo6cG9pbnRlcgoKCgogICAg
ICAgICA+CnN0cnVjdCBpbmRpcmVjdF9pdGVyYXRvcl9nZW5lcmF0b3IKewogICAgdHlwZWRlZiBp
dGVyYXRvcl9hZGFwdG9yPE91dGVySXRlcmF0b3IsCiAgICAgICAgaW5kaXJlY3RfaXRlcmF0b3Jf
cG9saWNpZXMsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0ZWdvcnk+IHR5cGU7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgT3V0ZXJJdGVyYXRvciwKICAgICAgICAgIGNsYXNzIFZhbHVlCgogICAgICAg
ICAgICAgICAgPSB0eXBlbmFtZSBkZXRhaWw6OnRyYWl0c19vZl92YWx1ZV90eXBlPAogICAgICAg
ICAgICAgICAgICAgICAgICBPdXRlckl0ZXJhdG9yPjo6dmFsdWVfdHlwZQoKICAgICAgICAgICwg
Y2xhc3MgUmVmZXJlbmNlCgogICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBkZXRhaWw6OnRyYWl0
c19vZl92YWx1ZV90eXBlPAogICAgICAgICAgICAgICAgICAgICAgICBPdXRlckl0ZXJhdG9yPjo6
cmVmZXJlbmNlCgoKCiAgICAgICAgICAsIGNsYXNzIENvbnN0UmVmZXJlbmNlID0gVmFsdWUgY29u
c3QmCiAgICAgICAgICAsIGNsYXNzIENhdGVnb3J5ID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6
aXRlcmF0b3JfdHJhaXRzPAogICAgICAgICAgICAgICAgT3V0ZXJJdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5CiAgICAgICAgICAsIGNsYXNzIFBvaW50ZXIKCiAgICAgICAgICAgICAgICA9IHR5
cGVuYW1lIGRldGFpbDo6dHJhaXRzX29mX3ZhbHVlX3R5cGU8CiAgICAgICAgICAgICAgICAgICAg
ICAgIE91dGVySXRlcmF0b3I+Ojpwb2ludGVyCgoKCiAgICAgICAgICAsIGNsYXNzIENvbnN0UG9p
bnRlciA9IFZhbHVlIGNvbnN0KgogICAgICAgICAgID4Kc3RydWN0IGluZGlyZWN0X2l0ZXJhdG9y
X3BhaXJfZ2VuZXJhdG9yCnsKICB0eXBlZGVmIHR5cGVuYW1lIGluZGlyZWN0X2l0ZXJhdG9yX2dl
bmVyYXRvcjxPdXRlckl0ZXJhdG9yLAogICAgVmFsdWUsIFJlZmVyZW5jZSxDYXRlZ29yeSxQb2lu
dGVyPjo6dHlwZSBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIGluZGlyZWN0X2l0ZXJhdG9y
X2dlbmVyYXRvcjxPdXRlckl0ZXJhdG9yLAogICAgVmFsdWUsIENvbnN0UmVmZXJlbmNlLENhdGVn
b3J5LENvbnN0UG9pbnRlcj46OnR5cGUgY29uc3RfaXRlcmF0b3I7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIE91dGVySXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpbmRpcmVjdF9pdGVyYXRvcl9nZW5l
cmF0b3I8T3V0ZXJJdGVyYXRvcj46OnR5cGUKbWFrZV9pbmRpcmVjdF9pdGVyYXRvcihPdXRlckl0
ZXJhdG9yIGJhc2UpCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaW5kaXJlY3RfaXRlcmF0b3JfZ2Vu
ZXJhdG9yCiAgICAgICAgPE91dGVySXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJu
IHJlc3VsdF90KGJhc2UpOwp9CgoKCgoKc3RydWN0IHJldmVyc2VfaXRlcmF0b3JfcG9saWNpZXMg
OiBwdWJsaWMgZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcwp7CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
SXRlcmF0b3JBZGFwdG9yPgogICAgdHlwZW5hbWUgSXRlcmF0b3JBZGFwdG9yOjpyZWZlcmVuY2Ug
ZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yJiB4KSBjb25zdAogICAgICAgIHsgcmV0
dXJuICpib29zdDo6cHJpb3IoeC5iYXNlKCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIEJpZGly
ZWN0aW9uYWxJdGVyYXRvcj4KICAgIHZvaWQgaW5jcmVtZW50KEJpZGlyZWN0aW9uYWxJdGVyYXRv
ciYgeCkgY29uc3QKICAgICAgICB7IC0teC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgogICAgdm9pZCBkZWNyZW1lbnQoQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yJiB4KSBjb25zdAogICAgICAgIHsgKyt4LmJhc2UoKTsgfQoKICAgIHRlbXBsYXRlIDxj
bGFzcyBCaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIERpZmZlcmVuY2VUeXBlPgogICAgdm9p
ZCBhZHZhbmNlKEJpZGlyZWN0aW9uYWxJdGVyYXRvciYgeCwgRGlmZmVyZW5jZVR5cGUgbikgY29u
c3QKICAgICAgICB7IHguYmFzZSgpIC09IG47IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0
b3IxLCBjbGFzcyBJdGVyYXRvcjI+CiAgICB0eXBlbmFtZSBJdGVyYXRvcjE6OmRpZmZlcmVuY2Vf
dHlwZSBkaXN0YW5jZSgKICAgICAgICBjb25zdCBJdGVyYXRvcjEmIHgsIGNvbnN0IEl0ZXJhdG9y
MiYgeSkgY29uc3QKICAgICAgICB7IHJldHVybiB4LmJhc2UoKSAtIHkuYmFzZSgpOyB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRlcmF0b3IyPgogICAgYm9vbCBlcXVh
bChjb25zdCBJdGVyYXRvcjEmIHgsIGNvbnN0IEl0ZXJhdG9yMiYgeSkgY29uc3QKICAgICAgICB7
IHJldHVybiB4LmJhc2UoKSA9PSB5LmJhc2UoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEJpZGly
ZWN0aW9uYWxJdGVyYXRvciwKICAgIGNsYXNzIFZhbHVlID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFp
bDo6aXRlcmF0b3JfdHJhaXRzPEJpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAg
ICBjbGFzcyBSZWZlcmVuY2UgPSB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl9kZWZh
dWx0czxCaWRpcmVjdGlvbmFsSXRlcmF0b3IsVmFsdWU+OjpyZWZlcmVuY2UsCiAgICBjbGFzcyBQ
b2ludGVyID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8QmlkaXJl
Y3Rpb25hbEl0ZXJhdG9yLFZhbHVlPjo6cG9pbnRlciwKICAgIGNsYXNzIENhdGVnb3J5ID0gdHlw
ZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJpZGlyZWN0aW9uYWxJdGVyYXRv
cj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgY2xhc3MgRGlzdGFuY2UgPSB0eXBlbmFtZSBib29z
dDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8QmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICAgICAgID4Kc3RydWN0IHJldmVyc2VfaXRlcmF0b3JfZ2VuZXJhdG9yCnsK
ICAgIHR5cGVkZWYgaXRlcmF0b3JfYWRhcHRvcjxCaWRpcmVjdGlvbmFsSXRlcmF0b3IscmV2ZXJz
ZV9pdGVyYXRvcl9wb2xpY2llcywKICAgICAgICBWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRl
Z29yeSxEaXN0YW5jZT4gdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBCaWRpcmVjdGlvbmFsSXRl
cmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yX2dlbmVyYXRvcjxCaWRpcmVj
dGlvbmFsSXRlcmF0b3I+Ojp0eXBlCm1ha2VfcmV2ZXJzZV9pdGVyYXRvcihCaWRpcmVjdGlvbmFs
SXRlcmF0b3IgYmFzZSkKewogICAgdHlwZWRlZiB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yX2dl
bmVyYXRvcjxCaWRpcmVjdGlvbmFsSXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJu
IHJlc3VsdF90KGJhc2UpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5j
dGlvbj4Kc3RydWN0IHByb2plY3Rpb25faXRlcmF0b3JfcG9saWNpZXMgOiBwdWJsaWMgZGVmYXVs
dF9pdGVyYXRvcl9wb2xpY2llcwp7CiAgICBwcm9qZWN0aW9uX2l0ZXJhdG9yX3BvbGljaWVzKCkg
eyB9CiAgICBwcm9qZWN0aW9uX2l0ZXJhdG9yX3BvbGljaWVzKGNvbnN0IEFkYXB0YWJsZVVuYXJ5
RnVuY3Rpb24mIGYpIDogbV9mKGYpIHsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFk
YXB0b3I+CiAgICB0eXBlbmFtZSBJdGVyYXRvckFkYXB0b3I6OnJlZmVyZW5jZSBkZXJlZmVyZW5j
ZShJdGVyYXRvckFkYXB0b3IgY29uc3QmIGl0ZXIpIGNvbnN0IHsKICAgICAgICByZXR1cm4gbV9m
KCppdGVyLmJhc2UoKSk7CiAgICB9CgogICAgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiBtX2Y7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0b3I+
CmNsYXNzIHByb2plY3Rpb25faXRlcmF0b3JfZ2VuZXJhdG9yIHsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKICAgIHR5
cGVkZWYgcHJvamVjdGlvbl9pdGVyYXRvcl9wb2xpY2llczxBZGFwdGFibGVVbmFyeUZ1bmN0aW9u
PiBwb2xpY2llczsKcHVibGljOgogICAgdHlwZWRlZiBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9y
LHBvbGljaWVzLHZhbHVlX3R5cGUsdmFsdWVfdHlwZSYsdmFsdWVfdHlwZSo+IHR5cGU7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0b3I+CmNs
YXNzIGNvbnN0X3Byb2plY3Rpb25faXRlcmF0b3JfZ2VuZXJhdG9yIHsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKICAg
IHR5cGVkZWYgcHJvamVjdGlvbl9pdGVyYXRvcl9wb2xpY2llczxBZGFwdGFibGVVbmFyeUZ1bmN0
aW9uPiBwb2xpY2llczsKcHVibGljOgogICAgdHlwZWRlZiBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJh
dG9yLHBvbGljaWVzLHZhbHVlX3R5cGUsY29uc3QgdmFsdWVfdHlwZSYsY29uc3QgdmFsdWVfdHlw
ZSo+IHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xh
c3MgSXRlcmF0b3IsIGNsYXNzIENvbnN0SXRlcmF0b3I+CnN0cnVjdCBwcm9qZWN0aW9uX2l0ZXJh
dG9yX3BhaXJfZ2VuZXJhdG9yIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcHJvamVjdGlvbl9pdGVy
YXRvcl9nZW5lcmF0b3I8QWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgSXRlcmF0b3I+Ojp0eXBlIGl0
ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBjb25zdF9wcm9qZWN0aW9uX2l0ZXJhdG9yX2dl
bmVyYXRvcjxBZGFwdGFibGVVbmFyeUZ1bmN0aW9uLCBDb25zdEl0ZXJhdG9yPjo6dHlwZSBjb25z
dF9pdGVyYXRvcjsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwg
Y2xhc3MgSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBwcm9qZWN0aW9uX2l0ZXJhdG9yX2dlbmVy
YXRvcjxBZGFwdGFibGVVbmFyeUZ1bmN0aW9uLCBJdGVyYXRvcj46OnR5cGUKbWFrZV9wcm9qZWN0
aW9uX2l0ZXJhdG9yKAogICAgSXRlcmF0b3IgaXRlciwKICAgIGNvbnN0IEFkYXB0YWJsZVVuYXJ5
RnVuY3Rpb24mIGYgPSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uKCkpCnsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgcHJvamVjdGlvbl9pdGVyYXRvcl9nZW5lcmF0b3I8QWRhcHRhYmxlVW5hcnlGdW5jdGlv
biwgSXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJuIHJlc3VsdF90KGl0ZXIsIGYp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0
b3I+CmlubGluZSB0eXBlbmFtZSBjb25zdF9wcm9qZWN0aW9uX2l0ZXJhdG9yX2dlbmVyYXRvcjxB
ZGFwdGFibGVVbmFyeUZ1bmN0aW9uLCBJdGVyYXRvcj46OnR5cGUKbWFrZV9jb25zdF9wcm9qZWN0
aW9uX2l0ZXJhdG9yKAogICAgSXRlcmF0b3IgaXRlciwKICAgIGNvbnN0IEFkYXB0YWJsZVVuYXJ5
RnVuY3Rpb24mIGYgPSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uKCkpCnsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgY29uc3RfcHJvamVjdGlvbl9pdGVyYXRvcl9nZW5lcmF0b3I8QWRhcHRhYmxlVW5hcnlG
dW5jdGlvbiwgSXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJuIHJlc3VsdF90KGl0
ZXIsIGYpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUHJlZGljYXRlLCBjbGFzcyBJdGVyYXRvcj4K
Y2xhc3MgZmlsdGVyX2l0ZXJhdG9yX3BvbGljaWVzCnsKcHVibGljOgogICAgZmlsdGVyX2l0ZXJh
dG9yX3BvbGljaWVzKCkgeyB9CgogICAgZmlsdGVyX2l0ZXJhdG9yX3BvbGljaWVzKGNvbnN0IFBy
ZWRpY2F0ZSYgcCwgY29uc3QgSXRlcmF0b3ImIGVuZCkKICAgICAgICA6IG1fcHJlZGljYXRlKHAp
LCBtX2VuZChlbmQpIHsgfQoKICAgIHZvaWQgaW5pdGlhbGl6ZShJdGVyYXRvciYgeCkgewogICAg
ICAgIHNhdGlzZnlfcHJlZGljYXRlKHgpOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIEl0
ZXJhdG9yQWRhcHRvcj4KICAgIHZvaWQgaW5jcmVtZW50KEl0ZXJhdG9yQWRhcHRvciYgeCkgewog
ICAgICAgICsreC5iYXNlKCk7CiAgICAgICAgc2F0aXNmeV9wcmVkaWNhdGUoeC5iYXNlKCkpOwog
ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+CiAgICB0eXBlbmFtZSBJ
dGVyYXRvckFkYXB0b3I6OnJlZmVyZW5jZSBkZXJlZmVyZW5jZShjb25zdCBJdGVyYXRvckFkYXB0
b3ImIHgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKnguYmFzZSgpOyB9CgogICAgdGVtcGxhdGUg
PGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjEsIGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjI+CiAgICBib29s
IGVxdWFsKGNvbnN0IEl0ZXJhdG9yQWRhcHRvcjEmIHgsIGNvbnN0IEl0ZXJhdG9yQWRhcHRvcjIm
IHkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4geC5iYXNlKCkgPT0geS5iYXNlKCk7IH0KCiBwcml2
YXRlOgogICAgdm9pZCBzYXRpc2Z5X3ByZWRpY2F0ZShJdGVyYXRvciYgaXRlcik7CiAgICBQcmVk
aWNhdGUgbV9wcmVkaWNhdGU7CiAgICBJdGVyYXRvciBtX2VuZDsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBQcmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yPgp2b2lkIGZpbHRlcl9pdGVyYXRvcl9wb2xpY2ll
czxQcmVkaWNhdGUsSXRlcmF0b3I+OjpzYXRpc2Z5X3ByZWRpY2F0ZSgKICAgIEl0ZXJhdG9yJiBp
dGVyKQp7CiAgICB3aGlsZSAobV9lbmQgIT0gaXRlciAmJiAhbV9wcmVkaWNhdGUoKml0ZXIpKQog
ICAgICAgICsraXRlcjsKfQoKCgpuYW1lc3BhY2UgZGV0YWlsIHsKCiAgdGVtcGxhdGUgPGNsYXNz
IEJhc2UsIGNsYXNzIFQ+CiAgc3RydWN0IHJlZHVjZV90b19iYXNlX2NsYXNzCiAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGlmX3RydWU8KAogICAgICAgICAgICA6OmJvb3N0Ojppc19jb252ZXJ0
aWJsZTxUKixCYXNlKj46OnZhbHVlCiAgICAgICAgICApPjo6dGVtcGxhdGUgdGhlbjxCYXNlLFQ+
Ojp0eXBlIHR5cGU7CiAgfTsKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CiAgc3RydWN0
IG5vbl9iaWRpcmVjdGlvbmFsX2NhdGVnb3J5CiAgewoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBy
ZWR1Y2VfdG9fYmFzZV9jbGFzczwKICAgICAgICAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3Jf
dGFnLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9y
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgPjo6dHlwZSB0eXBlOwogICBwcml2YXRlOgoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYmlkaXJlY3Rpb25hbCA9ICghYm9vc3Q6OmlzX2NvbnZl
cnRpYmxlPHR5cGUqLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKj46OnZhbHVlKTsK
CgogICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9v
c3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBpc19iaWRpcmVjdGlvbmFsICkg
Pik+IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl8xMzc3OwojIDEzOTAgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwogIH07Cn0K
CnRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yLAogICAgY2xhc3MgVmFs
dWUgPSB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2
YWx1ZV90eXBlLAogICAgY2xhc3MgUmVmZXJlbmNlID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6
aXRlcmF0b3JfZGVmYXVsdHM8SXRlcmF0b3IsVmFsdWU+OjpyZWZlcmVuY2UsCiAgICBjbGFzcyBQ
b2ludGVyID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8SXRlcmF0
b3IsVmFsdWU+Ojpwb2ludGVyLAogICAgY2xhc3MgQ2F0ZWdvcnkgPSB0eXBlbmFtZSBib29zdDo6
ZGV0YWlsOjpub25fYmlkaXJlY3Rpb25hbF9jYXRlZ29yeTxJdGVyYXRvcj46OnR5cGUsCiAgICBj
bGFzcyBEaXN0YW5jZSA9IHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX3RyYWl0czxJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICA+CmNsYXNzIGZpbHRlcl9pdGVyYXRv
cl9nZW5lcmF0b3IgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYmlkaXJlY3Rpb25hbCA9IChi
b29zdDo6aXNfY29udmVydGlibGU8Q2F0ZWdvcnkqLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKj46OnZhbHVlKTsKCgogICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rl
c3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggIWlz
X2JpZGlyZWN0aW9uYWwgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzE0MDQ7Cgog
ICAgdHlwZWRlZiBmaWx0ZXJfaXRlcmF0b3JfcG9saWNpZXM8UHJlZGljYXRlLEl0ZXJhdG9yPiBw
b2xpY2llc190eXBlOwogcHVibGljOgogICAgdHlwZWRlZiBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJh
dG9yLHBvbGljaWVzX3R5cGUsCiAgICAgICAgVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0ZWdv
cnksRGlzdGFuY2U+IHR5cGU7Cn07CgoKCm5hbWVzcGFjZSBkZXRhaWwgewogIHRlbXBsYXRlIDxj
bGFzcyBQcmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yPgogIHN0cnVjdCBmaWx0ZXJfZ2VuZXJhdG9y
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmZpbHRlcl9pdGVyYXRvcl9nZW5lcmF0b3I8
UHJlZGljYXRlLEl0ZXJhdG9yPjo6dHlwZSB0eXBlOwogIH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBQ
cmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgZGV0YWlsOjpmaWx0ZXJf
Z2VuZXJhdG9yPFByZWRpY2F0ZSwgSXRlcmF0b3I+Ojp0eXBlCm1ha2VfZmlsdGVyX2l0ZXJhdG9y
KEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0LCBjb25zdCBQcmVkaWNhdGUmIHAgPSBQcmVk
aWNhdGUoKSkKewogIHR5cGVkZWYgZmlsdGVyX2l0ZXJhdG9yX2dlbmVyYXRvcjxQcmVkaWNhdGUs
IEl0ZXJhdG9yPiBHZW47CiAgdHlwZWRlZiBmaWx0ZXJfaXRlcmF0b3JfcG9saWNpZXM8UHJlZGlj
YXRlLEl0ZXJhdG9yPiBwb2xpY2llc190OwogIHR5cGVkZWYgdHlwZW5hbWUgR2VuOjp0eXBlIHJl
c3VsdF90OwogIHJldHVybiByZXN1bHRfdChmaXJzdCwgcG9saWNpZXNfdChwLCBsYXN0KSk7Cn0K
Cn0KIyAyNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv
aXRlcmF0b3IuaHBwIiAyIDMKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIGRldGFpbCB7
Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7CgoKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFRQdHI+CnN0cnVjdCBpdGVyYXRvcl9iYXNlIDogcHJpdmF0ZSBtdWx0aV9hcnJheV9iYXNl
IHsKICB0eXBlZGVmIG11bHRpX2FycmF5X2Jhc2Ugc3VwZXJfdHlwZTsKICB0eXBlZGVmIHN1cGVy
X3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgc3VwZXJfdHlwZTo6c2l6ZV90eXBlIHNpemVf
dHlwZTsKCiAgaW5kZXggaWR4XzsKICBUUHRyIGJhc2VfOwogIGNvbnN0IHNpemVfdHlwZSogZXh0
ZW50c187CiAgY29uc3QgaW5kZXgqIHN0cmlkZXNfOwogIGNvbnN0IGluZGV4KiBpbmRleF9iYXNl
XzsKCiAgaXRlcmF0b3JfYmFzZShpbnQgaWR4LCBUUHRyIGJhc2UsIGNvbnN0IHNpemVfdHlwZSog
ZXh0ZW50cywKICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4KiBzdHJpZGVzLAogICAgICAgICAg
ICAgICAgY29uc3QgaW5kZXgqIGluZGV4X2Jhc2UpIDoKICAgIGlkeF8oaWR4KSwgYmFzZV8oYmFz
ZSksIGV4dGVudHNfKGV4dGVudHMpLAogICAgc3RyaWRlc18oc3RyaWRlcyksIGluZGV4X2Jhc2Vf
KGluZGV4X2Jhc2UpIHsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGl0ZXJhdG9y
X2Jhc2UoY29uc3QgaXRlcmF0b3JfYmFzZTxULE9QdHI+JiByaHMpIDoKICAgIGlkeF8ocmhzLmlk
eF8pLCBiYXNlXyhyaHMuYmFzZV8pLCBleHRlbnRzXyhyaHMuZXh0ZW50c18pLAogICAgc3RyaWRl
c18ocmhzLnN0cmlkZXNfKSwgaW5kZXhfYmFzZV8ocmhzLmluZGV4X2Jhc2VfKSB7CiAgfQoKCiAg
aXRlcmF0b3JfYmFzZSgpIHt9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBO
dW1EaW1zPgpzdHJ1Y3QgaXRlcmF0b3JfcG9saWNpZXMgOgogIHB1YmxpYyBib29zdDo6ZGV0YWls
OjptdWx0aV9hcnJheTo6ZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcywKICBwcml2YXRlIHZhbHVl
X2FjY2Vzc29yX2dlbmVyYXRvcjxULE51bURpbXM+Ojp0eXBlIHsKcHJpdmF0ZToKICB0eXBlZGVm
IHR5cGVuYW1lIHZhbHVlX2FjY2Vzc29yX2dlbmVyYXRvcjxULE51bURpbXM+Ojp0eXBlIHN1cGVy
X3R5cGU7CnB1YmxpYzoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogIHR5cGVu
YW1lIEl0ZXJhdG9yQWRhcHRvcjo6cmVmZXJlbmNlCiAgZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0
b3JBZGFwdG9yJiBpdGVyKSBjb25zdCB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yQWRh
cHRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHJldHVybiBzdXBlcl90eXBlOjphY2Nlc3Mo
Ym9vc3Q6OnR5cGU8cmVmZXJlbmNlPigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
dGVyLmJhc2UoKS5pZHhfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLmJhc2Uo
KS5iYXNlXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlci5iYXNlKCkuZXh0ZW50
c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIuYmFzZSgpLnN0cmlkZXNfLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLmJhc2UoKS5pbmRleF9iYXNlXyk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogIHN0YXRpYyB2b2lkIGluY3Jl
bWVudChJdGVyYXRvckFkYXB0b3ImIHgpIHsgKyt4LmJhc2UoKS5pZHhfOyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+CiAgc3RhdGljIHZvaWQgZGVjcmVtZW50KEl0ZXJhdG9y
QWRhcHRvciYgeCkgeyAtLXguYmFzZSgpLmlkeF87IH0KCiAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJh
dG9yQWRhcHRvcjEsIGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjI+CiAgYm9vbCBlcXVhbChJdGVyYXRv
ckFkYXB0b3IxJiBsaHMsIEl0ZXJhdG9yQWRhcHRvcjImIHJocykgY29uc3QgewogICAgcmV0dXJu
IChsaHMuYmFzZSgpLmlkeF8gPT0gcmhzLmJhc2UoKS5pZHhfKSAmJgogICAgICAobGhzLmJhc2Uo
KS5iYXNlXyA9PSByaHMuYmFzZSgpLmJhc2VfKSAmJgogICAgICAobGhzLmJhc2UoKS5leHRlbnRz
XyA9PSByaHMuYmFzZSgpLmV4dGVudHNfKSAmJgogICAgICAobGhzLmJhc2UoKS5zdHJpZGVzXyA9
PSByaHMuYmFzZSgpLnN0cmlkZXNfKSAmJgogICAgICAobGhzLmJhc2UoKS5pbmRleF9iYXNlXyA9
PSByaHMuYmFzZSgpLmluZGV4X2Jhc2VfKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRv
ckFkYXB0b3IsIGNsYXNzIERpZmZlcmVuY2VUeXBlPgogIHN0YXRpYyB2b2lkIGFkdmFuY2UoSXRl
cmF0b3JBZGFwdG9yJiB4LCBEaWZmZXJlbmNlVHlwZSBuKSB7CiAgICB4LmlkeF8gKz0gbjsKICB9
CgogIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3IxLCBjbGFzcyBJdGVyYXRvckFkYXB0
b3IyPgogIHR5cGVuYW1lIEl0ZXJhdG9yQWRhcHRvcjE6OmRpZmZlcmVuY2VfdHlwZQogIGRpc3Rh
bmNlKEl0ZXJhdG9yQWRhcHRvcjEmIGxocywgSXRlcmF0b3JBZGFwdG9yMiYgcmhzKSBjb25zdCB7
CiAgICByZXR1cm4gcmhzLmJhc2UoKS5pZHhfIC0gbGhzLmJhc2UoKS5pZHhfOwogIH0KfTsKCgp0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgYmFzZV90eXBlLAogIHN0ZDo6c2l6ZV90IE51
bURpbXMsIHR5cGVuYW1lIHZhbHVlX3R5cGUsCiAgdHlwZW5hbWUgcmVmZXJlbmNlX3R5cGUsIHR5
cGVuYW1lIHRhZywgdHlwZW5hbWUgZGlmZmVyZW5jZV90eXBlPgpzdHJ1Y3QgaXRlcmF0b3JfZ2Vu
X2hlbHBlciB7CnByaXZhdGU6CiAgdHlwZWRlZiBpdGVyYXRvcl9wb2xpY2llczxULE51bURpbXM+
IHBvbGljaWVzOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcl90eXBlOwogIHR5cGVkZWYg
dGFnIGNhdGVnb3J5OwpwdWJsaWM6CiAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJh
eTo6aXRlcmF0b3JfYWRhcHRvcjxiYXNlX3R5cGUscG9saWNpZXMsdmFsdWVfdHlwZSwKICAgIHJl
ZmVyZW5jZV90eXBlLHBvaW50ZXJfdHlwZSxjYXRlZ29yeSxkaWZmZXJlbmNlX3R5cGU+IHR5cGU7
Cn07CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXMsIHR5cGVuYW1l
IHZhbHVlX3R5cGUsCiAgdHlwZW5hbWUgcmVmZXJlbmNlX3R5cGUsIHR5cGVuYW1lIHRhZywgdHlw
ZW5hbWUgZGlmZmVyZW5jZV90eXBlPgpzdHJ1Y3QgaXRlcmF0b3JfZ2VuZXJhdG9yIHsKcHJpdmF0
ZToKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxUKj4gYmFzZV90eXBlOwpwdWJsaWM6CiAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl9nZW5faGVscGVyPFQsYmFzZV90eXBlLE51bURpbXMsdmFs
dWVfdHlwZSwKICAgIHJlZmVyZW5jZV90eXBlLHRhZyxkaWZmZXJlbmNlX3R5cGU+Ojp0eXBlIHR5
cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlwZW5h
bWUgdmFsdWVfdHlwZSwKICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFnLCB0
eXBlbmFtZSBkaWZmZXJlbmNlX3R5cGU+CnN0cnVjdCBjb25zdF9pdGVyYXRvcl9nZW5lcmF0b3Ig
ewpwcml2YXRlOgogIHR5cGVkZWYgaXRlcmF0b3JfYmFzZTxULGNvbnN0IFQqPiBiYXNlX3R5cGU7
CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX2dlbl9oZWxwZXI8VCxiYXNlX3R5
cGUsTnVtRGltcyx2YWx1ZV90eXBlLAogICAgcmVmZXJlbmNlX3R5cGUsdGFnLGRpZmZlcmVuY2Vf
dHlwZT46OnR5cGUgdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBO
dW1EaW1zLCB0eXBlbmFtZSB2YWx1ZV90eXBlLAogIHR5cGVuYW1lIHJlZmVyZW5jZV90eXBlLCB0
eXBlbmFtZSB0YWcsIHR5cGVuYW1lIGRpZmZlcmVuY2VfdHlwZT4Kc3RydWN0IHJldmVyc2VfaXRl
cmF0b3JfZ2VuZXJhdG9yIHsKcHJpdmF0ZToKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxUKj4g
YmFzZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfZ2VuX2hlbHBlcjxULGJhc2Vf
dHlwZSxOdW1EaW1zLHZhbHVlX3R5cGUsCiAgICByZWZlcmVuY2VfdHlwZSx0YWcsZGlmZmVyZW5j
ZV90eXBlPjo6dHlwZSBpdF90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6
cmV2ZXJzZV9pdGVyYXRvcl9nZW5lcmF0b3I8aXRfdHlwZT46OnR5cGUgdHlwZTsKfTsKCnRlbXBs
YXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSB2YWx1ZV90eXBl
LAogIHR5cGVuYW1lIHJlZmVyZW5jZV90eXBlLCB0eXBlbmFtZSB0YWcsIHR5cGVuYW1lIGRpZmZl
cmVuY2VfdHlwZT4Kc3RydWN0IGNvbnN0X3JldmVyc2VfaXRlcmF0b3JfZ2VuZXJhdG9yIHsKcHJp
dmF0ZToKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxjb25zdCBUKj4gYmFzZV90eXBlOwogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfZ2VuX2hlbHBlcjxULGJhc2VfdHlwZSxOdW1EaW1zLHZh
bHVlX3R5cGUsCiAgICByZWZlcmVuY2VfdHlwZSx0YWcsZGlmZmVyZW5jZV90eXBlPjo6dHlwZSBp
dF90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6cmV2ZXJzZV9pdGVyYXRv
cl9nZW5lcmF0b3I8aXRfdHlwZT46OnR5cGUgdHlwZTsKfTsKCn0KfQp9CiMgMjUgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5LmhwcCIgMiAzCiMgMSAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvc3ViYXJyYXkuaHBw
IiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJy
YXkvc3ViYXJyYXkuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvbXVsdGlfYXJyYXkvY29uY2VwdF9jaGVja3MuaHBwIiAxIDMKIyAyMyAiL2hvbWUvY29tcGJp
by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvY29uY2VwdF9jaGVja3MuaHBwIiAz
Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJy
YXkgewojIDM2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh
eS9jb25jZXB0X2NoZWNrcy5ocHAiIDMKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KICBzdHJ1
Y3QgaWRnZW5faGVscGVyIHsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJyYXksIHR5cGVuYW1l
IElkeEdlbiwgdHlwZW5hbWUgQ2FsbF9UeXBlPgogICAgc3RhdGljIHZvaWQgY2FsbChBcnJheSYg
YSwgY29uc3QgSWR4R2VuJiBpZGdlbiwgQ2FsbF9UeXBlIGMpIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBBcnJheTo6aW5kZXhfcmFuZ2UgaW5kZXhfcmFuZ2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgQXJyYXk6OmluZGV4IGluZGV4OwogICAgICBpZGdlbl9oZWxwZXI8Ti0xPjo6Y2FsbChhLGlk
Z2VuW2NdLGMpOwogICAgfQogIH07CgogIHRlbXBsYXRlIDw+CiAgc3RydWN0IGlkZ2VuX2hlbHBl
cjwwPiB7CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5LCB0eXBlbmFtZSBJZHhHZW4sIHR5
cGVuYW1lIENhbGxfVHlwZT4KICAgIHN0YXRpYyB2b2lkIGNhbGwoQXJyYXkmIGEsIGNvbnN0IElk
eEdlbiYgaWRnZW4sIENhbGxfVHlwZSkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojpp
bmRleF9yYW5nZSBpbmRleF9yYW5nZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6aW5k
ZXggaW5kZXg7CiAgICAgIGFbIGlkZ2VuIF07CiAgICB9CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBBcnJheSwgc3RkOjpzaXplX3QgTnVtRGltcyA+CiAgc3RydWN0IENvbnN0TXVsdGlBcnJh
eUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewoKCgogICAgICBhWyBpZCBdOwoK
ICAgICAgaWRnZW5faGVscGVyPE51bURpbXMtMT46OmNhbGwoYSxpZGdlbltyYW5nZV0saWQpOwoK
CiAgICAgIGlkZ2VuX2hlbHBlcjxOdW1EaW1zLTE+OjpjYWxsKGEsaWRnZW5bcmFuZ2VdLHJhbmdl
KTsKCiAgICAgIHN0ID0gYS5zaXplKCk7CiAgICAgIHN0ID0gYS5udW1fZGltZW5zaW9ucygpOwog
ICAgICBzdCA9IGEubnVtX2VsZW1lbnRzKCk7CiAgICAgIHN0cCA9IGEuc2hhcGUoKTsKICAgICAg
aWRwID0gYS5zdHJpZGVzKCk7CiAgICAgIGlkcCA9IGEuaW5kZXhfYmFzZXMoKTsKICAgICAgY2l0
ID0gYS5iZWdpbigpOwogICAgICBjaXQgPSBhLmVuZCgpOwogICAgICBjcml0ID0gYS5yYmVnaW4o
KTsKICAgICAgY3JpdCA9IGEucmVuZCgpOwogICAgICBlbHRwID0gYS5vcmlnaW4oKTsKICAgIH0K
CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIEFycmF5OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBBcnJheTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIEFycmF5OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBBcnJheTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFy
cmF5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
QXJyYXk6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQXJyYXk6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmVsZW1lbnQgZWxlbWVudDsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQXJyYXk6OmluZGV4IGluZGV4OwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJh
eTo6aW5kZXhfZ2VuIGluZGV4X2dlbjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmluZGV4
X3JhbmdlIGluZGV4X3JhbmdlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0ZW50X2dl
biBleHRlbnRfZ2VuOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0ZW50X3JhbmdlIGV4
dGVudF9yYW5nZTsKCiAgICBBcnJheSBhOwogICAgc2l6ZV90eXBlIHN0OwogICAgY29uc3Qgc2l6
ZV90eXBlKiBzdHA7CiAgICBpbmRleCBpZDsKICAgIGNvbnN0IGluZGV4KiBpZHA7CiAgICBjb25z
dF9pdGVyYXRvciBjaXQ7CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyaXQ7CiAgICBjb25z
dCBlbGVtZW50KiBlbHRwOwogICAgaW5kZXhfZ2VuIGlkZ2VuOwogICAgaW5kZXhfcmFuZ2UgcmFu
Z2U7CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcnJheSwgc3RkOjpzaXplX3QgTnVtRGlt
cyA+CiAgc3RydWN0IE11dGFibGVNdWx0aUFycmF5Q29uY2VwdAogIHsKICAgIHZvaWQgY29uc3Ry
YWludHMoKSB7CgoKCiAgICAgIHZhbHVlX3R5cGUgdnQgPSBhWyBpZCBdOwoKCiAgICAgIGlkZ2Vu
X2hlbHBlcjxOdW1EaW1zLTE+OjpjYWxsKGEsaWRnZW5bcmFuZ2VdLGlkKTsKCgogICAgICBpZGdl
bl9oZWxwZXI8TnVtRGltcy0xPjo6Y2FsbChhLGlkZ2VuW3JhbmdlXSxyYW5nZSk7CgogICAgICBz
dCA9IGEuc2l6ZSgpOwogICAgICBzdCA9IGEubnVtX2RpbWVuc2lvbnMoKTsKICAgICAgc3QgPSBh
Lm51bV9lbGVtZW50cygpOwogICAgICBzdHAgPSBhLnNoYXBlKCk7CiAgICAgIGlkcCA9IGEuc3Ry
aWRlcygpOwogICAgICBpZHAgPSBhLmluZGV4X2Jhc2VzKCk7CiAgICAgIGl0ID0gYS5iZWdpbigp
OwogICAgICBpdCA9IGEuZW5kKCk7CiAgICAgIHJpdCA9IGEucmJlZ2luKCk7CiAgICAgIHJpdCA9
IGEucmVuZCgpOwogICAgICBlbHRwID0gYS5vcmlnaW4oKTsKICAgICAgY29uc3RfY29uc3RyYWlu
dHMoYSk7CiAgICB9CgogICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhjb25zdCBBcnJheSYgYSkg
ewoKCgoKICAgICAgaWRnZW5faGVscGVyPE51bURpbXMtMT46OmNhbGwoYSxpZGdlbltyYW5nZV0s
aWQpOwoKCiAgICAgIGlkZ2VuX2hlbHBlcjxOdW1EaW1zLTE+OjpjYWxsKGEsaWRnZW5bcmFuZ2Vd
LHJhbmdlKTsKCiAgICAgIHN0ID0gYS5zaXplKCk7CiAgICAgIHN0ID0gYS5udW1fZGltZW5zaW9u
cygpOwogICAgICBzdCA9IGEubnVtX2VsZW1lbnRzKCk7CiAgICAgIHN0cCA9IGEuc2hhcGUoKTsK
ICAgICAgaWRwID0gYS5zdHJpZGVzKCk7CiAgICAgIGlkcCA9IGEuaW5kZXhfYmFzZXMoKTsKICAg
ICAgY2l0ID0gYS5iZWdpbigpOwogICAgICBjaXQgPSBhLmVuZCgpOwogICAgICBjcml0ID0gYS5y
YmVnaW4oKTsKICAgICAgY3JpdCA9IGEucmVuZCgpOwogICAgICBlbHRwID0gYS5vcmlnaW4oKTsK
ICAgIH0KCiAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlw
ZWRlZiB0eXBlbmFtZSBBcnJheTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIEFycmF5OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgdHlw
ZWRlZiB0eXBlbmFtZSBBcnJheTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIEFycmF5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQXJyYXk6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQXJyYXk6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmVsZW1lbnQgZWxlbWVudDsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmluZGV4IGluZGV4OwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBBcnJheTo6aW5kZXhfZ2VuIGluZGV4X2dlbjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6
OmluZGV4X3JhbmdlIGluZGV4X3JhbmdlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0
ZW50X2dlbiBleHRlbnRfZ2VuOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0ZW50X3Jh
bmdlIGV4dGVudF9yYW5nZTsKCiAgICBBcnJheSBhOwogICAgc2l6ZV90eXBlIHN0OwogICAgY29u
c3Qgc2l6ZV90eXBlKiBzdHA7CiAgICBpbmRleCBpZDsKICAgIGNvbnN0IGluZGV4KiBpZHA7CiAg
ICBpdGVyYXRvciBpdDsKICAgIGNvbnN0X2l0ZXJhdG9yIGNpdDsKICAgIHJldmVyc2VfaXRlcmF0
b3Igcml0OwogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjcml0OwogICAgY29uc3QgZWxlbWVu
dCogZWx0cDsKICAgIGluZGV4X2dlbiBpZGdlbjsKICAgIGluZGV4X3JhbmdlIHJhbmdlOwogIH07
CgoKfQp9Cn0KIyAyMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlf
YXJyYXkvc3ViYXJyYXkuaHBwIiAyIDMKCgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNl
IGRldGFpbCB7Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7CgoKCgoKCnRlbXBsYXRlIDx0eXBlbmFt
ZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSBUUHRyPgpjbGFzcyBjb25zdF9zdWJf
YXJyYXkgOgogIHB1YmxpYyBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6bXVsdGlfYXJyYXlf
aW1wbF9iYXNlPFQsTnVtRGltcz4KewogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJy
YXk6Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+IHN1cGVyX3R5cGU7CnB1YmxpYzoK
ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVu
Y2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJfYmFzZSBj
b25zdF9pdGVyX2Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBz
dXBlcl90eXBlOjplbGVtZW50IGVsZW1lbnQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBl
OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6ZGlm
ZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5
cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6ZXh0ZW50X3Jh
bmdlIGV4dGVudF9yYW5nZTsKCgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1
Y3QgY29uc3RfYXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2Fy
cmF5Ojpjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTkRpbXM+IHR5cGU7CiAgfTsKCiAgdGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBhcnJheV92aWV3IHsKICAgIHR5cGVkZWYg
Ym9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2FycmF5X3ZpZXc8VCxORGltcz4gdHlw
ZTsKICB9OwoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGNvbnN0X3N1Yl9hcnJheSAo
Y29uc3QgY29uc3Rfc3ViX2FycmF5PFQsTnVtRGltcyxPUHRyPiYgcmhzKSA6CiAgICBiYXNlXyhy
aHMuYmFzZV8pLCBleHRlbnRzXyhyaHMuZXh0ZW50c18pLCBzdHJpZGVzXyhyaHMuc3RyaWRlc18p
LAogICAgaW5kZXhfYmFzZV8ocmhzLmluZGV4X2Jhc2VfKSB7CiAgfQoKCgogIGNvbnN0X3JlZmVy
ZW5jZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6
OmFjY2Vzcyhib29zdDo6dHlwZTxjb25zdF9yZWZlcmVuY2U+KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkeCxiYXNlXyxzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9iYXNlcygpKTsK
ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleExpc3Q+CiAgY29uc3QgZWxlbWVudCYgb3Bl
cmF0b3IoKShjb25zdCBJbmRleExpc3QmIGluZGljZXMpIGNvbnN0IHsKICAgIHJldHVybiBzdXBl
cl90eXBlOjphY2Nlc3NfZWxlbWVudChib29zdDo6dHlwZTxjb25zdCBlbGVtZW50Jj4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLHN0cmlkZXMoKSk7CiAgfQoKCgogIHRl
bXBsYXRlIDxpbnQgTkRpbXM+CgoKCiAgdHlwZW5hbWUgY29uc3RfYXJyYXlfdmlldzxORGltcz46
OnR5cGUKICBvcGVyYXRvcltdKGNvbnN0IGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjoKICAg
ICAgICAgICAgIGluZGV4X2dlbjxOdW1EaW1zLE5EaW1zPiYgaW5kaWNlcykKICAgIGNvbnN0IHsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgY29uc3RfYXJyYXlfdmlldzxORGltcz46OnR5cGUgcmV0dXJu
X3R5cGU7CiAgICByZXR1cm4KICAgICAgc3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJyYXlfdmlldyhi
b29zdDo6dHlwZTxyZXR1cm5fdHlwZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
YXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcygpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VzKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV8pOwogIH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9QdHI+CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgY29uc3Rfc3ViX2FycmF5PFQs
TnVtRGltcyxPUHRyPiYgcmhzKSBjb25zdCB7CiAgICByZXR1cm4gc3RkOjpsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShiZWdpbigpLGVuZCgpLHJocy5iZWdpbigpLHJocy5lbmQoKSk7CiAgfQoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3Rfc3Vi
X2FycmF5PFQsTnVtRGltcyxPUHRyPiYgcmhzKSBjb25zdCB7CiAgICBpZihzdGQ6OmVxdWFsKHNo
YXBlKCksc2hhcGUoKStudW1fZGltZW5zaW9ucygpLHJocy5zaGFwZSgpKSkKICAgICAgcmV0dXJu
IHN0ZDo6ZXF1YWwoYmVnaW4oKSxlbmQoKSxyaHMuYmVnaW4oKSk7CiAgICBlbHNlIHJldHVybiBm
YWxzZTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBjb25zdF9zdWJfYXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpIGNvbnN0IHsKICAgIHJl
dHVybiAhKCp0aGlzID09IHJocyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBi
b29sIG9wZXJhdG9yPihjb25zdCBjb25zdF9zdWJfYXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMp
IGNvbnN0IHsKICAgIHJldHVybiByaHMgPCAqdGhpczsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBjb25zdF9zdWJfYXJyYXk8VCxOdW1EaW1z
LE9QdHI+JiByaHMpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID4gcmhzKTsKICB9CgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBjb25zdF9zdWJf
YXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwg
cmhzKTsKICB9CgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgewogICAgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yKGNvbnN0X2l0ZXJfYmFzZSgqaW5kZXhfYmFzZXMoKSxvcmlnaW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9i
YXNlcygpKSk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7CiAgICByZXR1cm4g
Y29uc3RfaXRlcmF0b3IoY29uc3RfaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9y
aWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRl
cygpLGluZGV4X2Jhc2VzKCkpKTsKICB9CgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0K
CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQoKICBUUHRyIG9yaWdpbigpIGNvbnN0IHsg
cmV0dXJuIGJhc2VfOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBleHRlbnRz
X1swXTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bV9lbGVtZW50
cygpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CiAgc2l6
ZV90eXBlIG51bV9kaW1lbnNpb25zKCkgY29uc3QgeyByZXR1cm4gTnVtRGltczsgfQogIGNvbnN0
IHNpemVfdHlwZSogc2hhcGUoKSBjb25zdCB7IHJldHVybiBleHRlbnRzXzsgfQogIGNvbnN0IGlu
ZGV4KiBzdHJpZGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaWRlc187IH0KICBjb25zdCBpbmRleCog
aW5kZXhfYmFzZXMoKSBjb25zdCB7IHJldHVybiBpbmRleF9iYXNlXzsgfQoKICBzaXplX3R5cGUg
bnVtX2VsZW1lbnRzKCkgY29uc3QgewogICAgcmV0dXJuIHN0ZDo6YWNjdW11bGF0ZShzaGFwZSgp
LHNoYXBlKCkgKyBudW1fZGltZW5zaW9ucygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUoMSksIHN0ZDo6bXVsdGlwbGllczxzaXplX3R5cGU+KCkpOwogIH0KCgoKcHJvdGVj
dGVkOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxzdGQ6OnNpemVfdD4gZnJpZW5kIGNsYXNzIHZhbHVl
X2FjY2Vzc29yX247CiAgdGVtcGxhdGUgPHR5cGVuYW1lLHN0ZDo6c2l6ZV90LHR5cGVuYW1lPiBm
cmllbmQgY2xhc3MgY29uc3Rfc3ViX2FycmF5OwoKCgoKICBjb25zdF9zdWJfYXJyYXkgKFRQdHIg
YmFzZSwKICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUqIGV4dGVudHMsCiAgICAgICAg
ICAgICAgICAgY29uc3QgaW5kZXgqIHN0cmlkZXMsCiAgICAgICAgICAgICAgICAgY29uc3QgaW5k
ZXgqIGluZGV4X2Jhc2UpIDoKICAgIGJhc2VfKGJhc2UpLCBleHRlbnRzXyhleHRlbnRzKSwgc3Ry
aWRlc18oc3RyaWRlcyksCiAgICBpbmRleF9iYXNlXyhpbmRleF9iYXNlKSB7CiAgfQoKICBUUHRy
IGJhc2VfOwogIGNvbnN0IHNpemVfdHlwZSogZXh0ZW50c187CiAgY29uc3QgaW5kZXgqIHN0cmlk
ZXNfOwogIGNvbnN0IGluZGV4KiBpbmRleF9iYXNlXzsKcHJpdmF0ZToKCiAgY29uc3Rfc3ViX2Fy
cmF5JiBvcGVyYXRvcj0oY29uc3QgY29uc3Rfc3ViX2FycmF5Jik7Cn07CgoKCgoKCnRlbXBsYXRl
IDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBzdWJfYXJyYXkgOiBwdWJs
aWMgY29uc3Rfc3ViX2FycmF5PFQsTnVtRGltcyxUKj4KewogIHR5cGVkZWYgY29uc3Rfc3ViX2Fy
cmF5PFQsTnVtRGltcyxUKj4gc3VwZXJfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg
c3VwZXJfdHlwZTo6ZWxlbWVudCBlbGVtZW50OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlw
ZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6Omlu
ZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6c2l6ZV90eXBlIHNpemVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0
ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aXRlcl9iYXNlIGl0ZXJfYmFz
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1
cGVyX3R5cGU6OmNvbnN0X2l0ZXJfYmFzZSBjb25zdF9pdGVyX2Jhc2U7CgoKICB0ZW1wbGF0ZSA8
c3RkOjpzaXplX3QgTkRpbXM+CiAgc3RydWN0IGNvbnN0X2FycmF5X3ZpZXcgewogICAgdHlwZWRl
ZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6Y29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE5E
aW1zPiB0eXBlOwogIH07CgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3Qg
YXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjptdWx0
aV9hcnJheV92aWV3PFQsTkRpbXM+IHR5cGU7CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBD
b25zdE11bHRpQXJyYXk+CiAgc3ViX2FycmF5JiBvcGVyYXRvcj0oY29uc3QgQ29uc3RNdWx0aUFy
cmF5JiBvdGhlcikgewogICAgZnVuY3Rpb25fcmVxdWlyZXM8IGJvb3N0OjpkZXRhaWw6Om11bHRp
X2FycmF5OjpDb25zdE11bHRpQXJyYXlDb25jZXB0PAogICAgICAgIENvbnN0TXVsdGlBcnJheSwg
TnVtRGltcz4gPigpOwoKCiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChvdGhlci5udW1fZGltZW5z
aW9ucygpID09IG51bV9kaW1lbnNpb25zKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgib3RoZXIu
bnVtX2RpbWVuc2lvbnMoKSA9PSBudW1fZGltZW5zaW9ucygpIiwgIi9ob21lL2NvbXBiaW8vZDk1
LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N1YmFycmF5LmhwcCIsIDIzOCwgX19QUkVU
VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChzdGQ6OmVxdWFs
KG90aGVyLnNoYXBlKCksb3RoZXIuc2hhcGUoKStudW1fZGltZW5zaW9ucygpLCBzaGFwZSgpKSkg
PyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJzdGQ6OmVxdWFsKG90aGVyLnNoYXBlKCksb3RoZXIuc2hh
cGUoKStudW1fZGltZW5zaW9ucygpLCBzaGFwZSgpKSIsICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv
aW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9zdWJhcnJheS5ocHAiLCAyNDAsIF9fUFJFVFRZX0ZV
TkNUSU9OX18pLCAwKSkpOwoKCiAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxvdGhlci5lbmQo
KSxiZWdpbigpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBzdWJfYXJyYXkmIG9wZXJhdG9y
PShjb25zdCBzdWJfYXJyYXkmIG90aGVyKSB7CiAgICBpZiAoJm90aGVyICE9IHRoaXMpIHsKCiAg
ICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKG90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2Rp
bWVuc2lvbnMoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJvdGhlci5udW1fZGltZW5zaW9ucygp
ID09IG51bV9kaW1lbnNpb25zKCkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvbXVsdGlfYXJyYXkvc3ViYXJyYXkuaHBwIiwgMjUwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoc3RkOjplcXVhbChvdGhlci5zaGFwZSgp
LG90aGVyLnNoYXBlKCkrbnVtX2RpbWVuc2lvbnMoKSwgc2hhcGUoKSkpID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgic3RkOjplcXVhbChvdGhlci5zaGFwZSgpLG90aGVyLnNoYXBlKCkrbnVtX2RpbWVu
c2lvbnMoKSwgc2hhcGUoKSkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv
bXVsdGlfYXJyYXkvc3ViYXJyYXkuaHBwIiwgMjUyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp
KTsKCgogICAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxvdGhlci5lbmQoKSxiZWdpbigpKTsK
ICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIFQqIG9yaWdpbigpIHsgcmV0dXJuIGJhc2Vf
OyB9CiAgY29uc3QgVCogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gYmFzZV87IH0KCiAgcmVmZXJl
bmNlIG9wZXJhdG9yW10oaW5kZXggaWR4KSB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNz
KGJvb3N0Ojp0eXBlPHJlZmVyZW5jZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWR4LGJhc2VfLHNoYXBlKCksc3RyaWRlcygpLGluZGV4X2Jhc2VzKCkpOwogIH0KCgoKICB0ZW1w
bGF0ZSA8aW50IE5EaW1zPgoKCgogIHR5cGVuYW1lIGFycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlCiAg
b3BlcmF0b3JbXShjb25zdCBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAg
ICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGluZGljZXMpIHsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgYXJyYXlfdmlldzxORGltcz46OnR5cGUgcmV0dXJuX3R5cGU7CiAgICByZXR1cm4KICAgICAg
c3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJyYXlfdmlldyhib29zdDo6dHlwZTxyZXR1cm5fdHlwZT4o
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4X2Jhc2VzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3JpZ2luKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIEluZGV4TGlzdD4KICBl
bGVtZW50JiBvcGVyYXRvcigpKGNvbnN0IEluZGV4TGlzdCYgaW5kaWNlcykgewogICAgcmV0dXJu
IHN1cGVyX3R5cGU6OmFjY2Vzc19lbGVtZW50KGJvb3N0Ojp0eXBlPGVsZW1lbnQmPigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsc3RyaWRlcygpKTsKICB9CgogIGl0ZXJh
dG9yIGJlZ2luKCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5kZXhfYmFzZXMo
KSxvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0
cmlkZXMoKSxpbmRleF9iYXNlcygpKSk7CiAgfQoKICBpdGVyYXRvciBlbmQoKSB7CiAgICByZXR1
cm4gaXRlcmF0b3IoaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9yaWdpbigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRlcygpLGluZGV4
X2Jhc2VzKCkpKTsKICB9CgoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsKICAgIHJldmVy
c2VfaXRlcmF0b3IgcmkoZW5kKCkpOwogICAgcmV0dXJuIHJpOwogIH0KCiAgcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgewogICAgcmV2ZXJzZV9pdGVyYXRvciByaShiZWdpbigpKTsKICAgIHJldHVy
biByaTsKICB9CgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhMaXN0PgogIGNvbnN0IGVsZW1l
bnQmIG9wZXJhdG9yKCkoY29uc3QgSW5kZXhMaXN0JiBpbmRpY2VzKSBjb25zdCB7CiAgICByZXR1
cm4gc3VwZXJfdHlwZTo6b3BlcmF0b3IoKShpbmRpY2VzKTsKICB9CgogIGNvbnN0X3JlZmVyZW5j
ZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9w
ZXJhdG9yW10oaWR4KTsKICB9CgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0eXBlbmFt
ZSBjb25zdF9hcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgYm9vc3Q6
OmRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgaW5kZXhfZ2VuPE51bURpbXMsTkRp
bXM+JiBpbmRpY2VzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9y
W10oaW5kaWNlcyk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKICAgIHJl
dHVybiBzdXBlcl90eXBlOjpiZWdpbigpOwogIH0KCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6OmVuZCgpOwogIH0KCiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6cmJlZ2luKCk7
CiAgfQoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4g
c3VwZXJfdHlwZTo6cmVuZCgpOwogIH0KCgpwcml2YXRlOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxz
dGQ6OnNpemVfdD4gZnJpZW5kIGNsYXNzIHZhbHVlX2FjY2Vzc29yX247CgoKCgogIHN1Yl9hcnJh
eSAoVCogYmFzZSwKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlKiBleHRlbnRzLAogICAgICAg
ICAgICBjb25zdCBpbmRleCogc3RyaWRlcywKICAgICAgICAgICAgY29uc3QgaW5kZXgqIGluZGV4
X2Jhc2UpIDoKICAgIHN1cGVyX3R5cGUoYmFzZSxleHRlbnRzLHN0cmlkZXMsaW5kZXhfYmFzZSkg
ewogIH0KCn07Cgp9Cn0KCgoKdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5LCBpbnQgTj4KY2xhc3Mg
c3ViYXJyYXlfZ2VuIHsKICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5OjplbGVtZW50IGVsZW1lbnQ7
CnB1YmxpYzoKICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpzdWJfYXJyYXk8
ZWxlbWVudCxOPiB0eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5LCBpbnQgTj4KY2xh
c3MgY29uc3Rfc3ViYXJyYXlfZ2VuIHsKICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5OjplbGVtZW50
IGVsZW1lbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5Ojpj
b25zdF9zdWJfYXJyYXk8ZWxlbWVudCxOPiB0eXBlOwp9Owp9CiMgMjYgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5LmhwcCIgMiAzCiMgMSAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvbXVsdGlfYXJyYXlfcmVmLmhw
cCIgMSAzCiMgMjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2Fy
cmF5L211bHRpX2FycmF5X3JlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j
bHVkZS9ib29zdC9tdWx0aV9hcnJheS92aWV3LmhwcCIgMSAzCiMgMzMgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3ZpZXcuaHBwIiAzCm5hbWVzcGFjZSBi
b29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXkgewoKCnRlbXBs
YXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSBUUHRyPgpjbGFz
cyBjb25zdF9tdWx0aV9hcnJheV92aWV3IDoKICAgIHB1YmxpYyBib29zdDo6ZGV0YWlsOjptdWx0
aV9hcnJheTo6bXVsdGlfYXJyYXlfaW1wbF9iYXNlPFQsTnVtRGltcz4KewogIHR5cGVkZWYgYm9v
c3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+
IHN1cGVyX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnZhbHVl
X3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3Jl
ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpj
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5
cGU6OmNvbnN0X2l0ZXJfYmFzZSBjb25zdF9pdGVyX2Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBz
dXBlcl90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7
CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjplbGVtZW50IGVsZW1lbnQ7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgc3VwZXJfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUg
c3VwZXJfdHlwZTo6ZXh0ZW50X3JhbmdlIGV4dGVudF9yYW5nZTsKCgogIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBORGltcz4KICBzdHJ1Y3QgY29uc3RfYXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJv
b3N0OjpkZXRhaWw6Om11bHRpX2FycmF5Ojpjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTkRpbXM+
IHR5cGU7CiAgfTsKCiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBhcnJh
eV92aWV3IHsKICAgIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2Fy
cmF5X3ZpZXc8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4K
ICBjb25zdF9tdWx0aV9hcnJheV92aWV3KGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdF9tdWx0aV9hcnJheV92aWV3PFQsTnVtRGltcyxPUHRyPiYgb3RoZXIpIDoKICAgIGJhc2Vf
KG90aGVyLmJhc2VfKSwgb3JpZ2luX29mZnNldF8ob3RoZXIub3JpZ2luX29mZnNldF8pLAogICAg
bnVtX2VsZW1lbnRzXyhvdGhlci5udW1fZWxlbWVudHNfKSwgZXh0ZW50X2xpc3RfKG90aGVyLmV4
dGVudF9saXN0XyksCiAgICBzdHJpZGVfbGlzdF8ob3RoZXIuc3RyaWRlX2xpc3RfKSwgaW5kZXhf
YmFzZV9saXN0XyhvdGhlci5pbmRleF9iYXNlX2xpc3RfKQogIHsgfQoKCiAgdGVtcGxhdGUgPGNs
YXNzIEJhc2VMaXN0PgogIHZvaWQgcmVpbmRleChjb25zdCBCYXNlTGlzdCYgdmFsdWVzKSB7CiAg
ICBib29zdDo6Y29weV9uKHZhbHVlcy5iZWdpbigpLG51bV9kaW1lbnNpb25zKCksaW5kZXhfYmFz
ZV9saXN0Xy5iZWdpbigpKTsKICAgIG9yaWdpbl9vZmZzZXRfID0KICAgICAgY2FsY3VsYXRlX2lu
ZGV4aW5nX29mZnNldChzdHJpZGVfbGlzdF8saW5kZXhfYmFzZV9saXN0Xyk7CiAgfQoKICB2b2lk
IHJlaW5kZXgoaW5kZXggdmFsdWUpIHsKICAgIGluZGV4X2Jhc2VfbGlzdF8uYXNzaWduKHZhbHVl
KTsKICAgIG9yaWdpbl9vZmZzZXRfID0KICAgICAgY2FsY3VsYXRlX2luZGV4aW5nX29mZnNldChz
dHJpZGVfbGlzdF8saW5kZXhfYmFzZV9saXN0Xyk7CiAgfQoKICBzaXplX3R5cGUgbnVtX2RpbWVu
c2lvbnMoKSBjb25zdCB7IHJldHVybiBOdW1EaW1zOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gZXh0ZW50X2xpc3RfLmZyb250KCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBudW1fZWxlbWVudHMoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7
IHJldHVybiBzaXplKCkgPT0gMDsgfQoKICBjb25zdCBzaXplX3R5cGUqIHNoYXBlKCkgY29uc3Qg
ewogICAgcmV0dXJuIGV4dGVudF9saXN0Xy5kYXRhKCk7CiAgfQoKICBjb25zdCBpbmRleCogc3Ry
aWRlcygpIGNvbnN0IHsKICAgIHJldHVybiBzdHJpZGVfbGlzdF8uZGF0YSgpOwogIH0KCiAgY29u
c3QgVCogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gYmFzZV8rb3JpZ2luX29mZnNldF87IH0KCiAg
c2l6ZV90eXBlIG51bV9lbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG51bV9lbGVtZW50c187IH0K
CiAgY29uc3QgaW5kZXgqIGluZGV4X2Jhc2VzKCkgY29uc3QgewogICAgcmV0dXJuIGluZGV4X2Jh
c2VfbGlzdF8uZGF0YSgpOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4TGlzdD4KICBj
b25zdCBlbGVtZW50JiBvcGVyYXRvcigpKEluZGV4TGlzdCBpbmRpY2VzKSBjb25zdCB7CiAgICBy
ZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzX2VsZW1lbnQoYm9vc3Q6OnR5cGU8Y29uc3QgZWxlbWVu
dCY+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcyxzdHJpZGVzKCkpOwog
IH0KCgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAg
cmV0dXJuIHN1cGVyX3R5cGU6OmFjY2Vzcyhib29zdDo6dHlwZTxjb25zdF9yZWZlcmVuY2U+KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCxvcmlnaW4oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4X2Jhc2VzKCkpOwogIH0KCgoKICB0ZW1wbGF0ZSA8aW50IE5EaW1zPgoK
CgogIHR5cGVuYW1lIGNvbnN0X2FycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlCiAgb3BlcmF0b3JbXShj
b25zdCBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48
TnVtRGltcyxORGltcz4mIGluZGljZXMpCiAgICBjb25zdCB7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IGNvbnN0X2FycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlIHJldHVybl90eXBlOwogICAgcmV0dXJuCiAg
ICAgIHN1cGVyX3R5cGU6OmdlbmVyYXRlX2FycmF5X3ZpZXcoYm9vc3Q6OnR5cGU8cmV0dXJuX3R5
cGU+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZXMoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleF9iYXNlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9yaWdpbigpKTsKICB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7CiAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoY29uc3RfaXRlcl9iYXNlKCppbmRleF9iYXNl
cygpLG9yaWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCks
c3RyaWRlcygpLGluZGV4X2Jhc2VzKCkpKTsKICB9CgogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsKICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihjb25zdF9pdGVyX2Jhc2UoKmluZGV4X2Jh
c2VzKCkrKnNoYXBlKCksb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhcGUoKSxzdHJpZGVzKCksaW5kZXhfYmFzZXMoKSkpOwogIH0KCiAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcihlbmQoKSk7CiAgfQoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7
CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9CgoKICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBib29sIG9wZXJhdG9yPT0oY29uc3QKICAgICAgICAgICAg
ICAgICAgY29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNv
bnN0IHsKICAgIGlmKHN0ZDo6ZXF1YWwoZXh0ZW50X2xpc3RfLmJlZ2luKCksCiAgICAgICAgICAg
ICAgICAgIGV4dGVudF9saXN0Xy5lbmQoKSwKICAgICAgICAgICAgICAgICAgcmhzLmV4dGVudF9s
aXN0Xy5iZWdpbigpKSkKICAgICAgcmV0dXJuIHN0ZDo6ZXF1YWwoYmVnaW4oKSxlbmQoKSxyaHMu
YmVnaW4oKSk7CiAgICBlbHNlIHJldHVybiBmYWxzZTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8KGNvbnN0CiAgICAgICAgICAgICAgICAgY29uc3RfbXVs
dGlfYXJyYXlfdmlldzxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIHJldHVy
biBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGJlZ2luKCksZW5kKCkscmhzLmJlZ2luKCks
cmhzLmVuZCgpKTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0
b3IhPShjb25zdAogICAgICAgICAgICAgICAgICBjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTnVt
RGltcyxPUHRyPiYgcmhzKQogICAgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsK
ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I+KGNvbnN0CiAg
ICAgICAgICAgICAgICAgY29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE51bURpbXMsT1B0cj4mIHJo
cykKICAgIGNvbnN0IHsKICAgIHJldHVybiByaHMgPCAqdGhpczsKICB9CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8PShjb25zdAogICAgICAgICAgICAgICAgIGNv
bnN0X211bHRpX2FycmF5X3ZpZXc8VCxOdW1EaW1zLE9QdHI+JiByaHMpCiAgICBjb25zdCB7CiAg
ICByZXR1cm4gISgqdGhpcyA+IHJocyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4K
ICBib29sIG9wZXJhdG9yPj0oY29uc3QKICAgICAgICAgICAgICAgICBjb25zdF9tdWx0aV9hcnJh
eV92aWV3PFQsTnVtRGltcyxPUHRyPiYgcmhzKQogICAgY29uc3QgewogICAgcmV0dXJuICEoKnRo
aXMgPCByaHMpOwogIH0KCgoKcHJvdGVjdGVkOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxzdGQ6OnNp
emVfdD4gZnJpZW5kIGNsYXNzIG11bHRpX2FycmF5X2ltcGxfYmFzZTsKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUsc3RkOjpzaXplX3QsdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBjb25zdF9tdWx0aV9hcnJh
eV92aWV3OwoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBFeHRlbnRMaXN0LCB0eXBlbmFtZSBJ
bmRleD4KICBleHBsaWNpdCBjb25zdF9tdWx0aV9hcnJheV92aWV3KFRQdHIgYmFzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXh0ZW50TGlzdCYgZXh0ZW50cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYm9vc3Q6OmFycmF5PEluZGV4LE51bURpbXM+JiBzdHJp
ZGVzKToKICAgIGJhc2VfKGJhc2UpLCBvcmlnaW5fb2Zmc2V0XygwKSB7CgogICAgaW5kZXhfYmFz
ZV9saXN0Xy5hc3NpZ24oMCk7CgoKICAgIGJvb3N0Ojpjb3B5X24oZXh0ZW50cy5iZWdpbigpLE51
bURpbXMsZXh0ZW50X2xpc3RfLmJlZ2luKCkpOwogICAgYm9vc3Q6OmNvcHlfbihzdHJpZGVzLmJl
Z2luKCksTnVtRGltcyxzdHJpZGVfbGlzdF8uYmVnaW4oKSk7CgoKICAgIG51bV9lbGVtZW50c18g
PSBzdGQ6OmFjY3VtdWxhdGUoZXh0ZW50X2xpc3RfLmJlZ2luKCksZXh0ZW50X2xpc3RfLmVuZCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlKDEpLHN0ZDo6bXVsdGlwbGll
czxzaXplX3R5cGU+KCkpOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgobnVtX2VsZW1lbnRzXyAh
PSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIm51bV9lbGVtZW50c18gIT0gMCIsICIvaG9tZS9j
b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS92aWV3LmhwcCIsIDIzNSwg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgfQoKICB0eXBlZGVmIGJvb3N0OjphcnJheTxz
aXplX3R5cGUsTnVtRGltcz4gc2l6ZV9saXN0OwogIHR5cGVkZWYgYm9vc3Q6OmFycmF5PGluZGV4
LE51bURpbXM+IGluZGV4X2xpc3Q7CgogIFRQdHIgYmFzZV87CiAgaW5kZXggb3JpZ2luX29mZnNl
dF87CiAgc2l6ZV90eXBlIG51bV9lbGVtZW50c187CiAgc2l6ZV9saXN0IGV4dGVudF9saXN0XzsK
ICBpbmRleF9saXN0IHN0cmlkZV9saXN0XzsKICBpbmRleF9saXN0IGluZGV4X2Jhc2VfbGlzdF87
Cgpwcml2YXRlOgoKICBjb25zdF9tdWx0aV9hcnJheV92aWV3JiBvcGVyYXRvcj0oY29uc3QgY29u
c3RfbXVsdGlfYXJyYXlfdmlldyYgb3RoZXIpOwp9OwoKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBz
dGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBtdWx0aV9hcnJheV92aWV3IDoKICBwdWJsaWMgY29u
c3RfbXVsdGlfYXJyYXlfdmlldzxULE51bURpbXMsVCo+CnsKICB0eXBlZGVmIGNvbnN0X211bHRp
X2FycmF5X3ZpZXc8VCxOdW1EaW1zLFQqPiBzdXBlcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiB0
eXBlbmFtZSBzdXBlcl90eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBl
bmFtZSBzdXBlcl90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUg
c3VwZXJfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90
eXBlOjppdGVyX2Jhc2UgaXRlcl9iYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6
cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgc3Vw
ZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVu
YW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYg
dHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcl9iYXNlIGNvbnN0X2l0ZXJfYmFzZTsKICB0
eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmVsZW1lbnQg
ZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aW5kZXggaW5kZXg7CiAg
dHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpleHRlbnRfcmFuZ2UgZXh0ZW50X3JhbmdlOwoK
CiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBjb25zdF9hcnJheV92aWV3
IHsKICAgIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OmNvbnN0X211bHRpX2Fy
cmF5X3ZpZXc8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTkRp
bXM+CiAgc3RydWN0IGFycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0
aV9hcnJheTo6bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07CgoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29uc3RNdWx0aUFycmF5PgogIG11bHRpX2FycmF5X3ZpZXcmIG9wZXJhdG9y
PShjb25zdCBDb25zdE11bHRpQXJyYXkmIG90aGVyKSB7CiAgICBmdW5jdGlvbl9yZXF1aXJlczwK
ICAgICAgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICBDb25zdE11bHRpQXJyYXlD
b25jZXB0PENvbnN0TXVsdGlBcnJheSxOdW1EaW1zPiA+KCk7CgoKICAgIChzdGF0aWNfY2FzdDx2
b2lkPiAoKG90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2RpbWVuc2lvbnMoKSkgPyAwIDog
KF9fYXNzZXJ0X2ZhaWwgKCJvdGhlci5udW1fZGltZW5zaW9ucygpID09IG51bV9kaW1lbnNpb25z
KCkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdmll
dy5ocHAiLCAyOTQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgKHN0YXRpY19jYXN0
PHZvaWQ+ICgoc3RkOjplcXVhbChvdGhlci5zaGFwZSgpLG90aGVyLnNoYXBlKCkrbnVtX2RpbWVu
c2lvbnMoKSwgc2hhcGUoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgic3RkOjplcXVhbChvdGhl
ci5zaGFwZSgpLG90aGVyLnNoYXBlKCkrbnVtX2RpbWVuc2lvbnMoKSwgc2hhcGUoKSkiLCAiL2hv
bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdmlldy5ocHAiLCAy
OTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCiAgICBzdGQ6OmNvcHkob3RoZXIuYmVn
aW4oKSxvdGhlci5lbmQoKSxiZWdpbigpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBtdWx0
aV9hcnJheV92aWV3JiBvcGVyYXRvcj0oY29uc3QgbXVsdGlfYXJyYXlfdmlldyYgb3RoZXIpIHsK
ICAgIGlmICgmb3RoZXIgIT0gdGhpcykgewoKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgob3Ro
ZXIubnVtX2RpbWVuc2lvbnMoKSA9PSBudW1fZGltZW5zaW9ucygpKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoIm90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2RpbWVuc2lvbnMoKSIsICIvaG9t
ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS92aWV3LmhwcCIsIDMw
NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAo
KHN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCks
IHNoYXBlKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUo
KSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpIiwgIi9ob21lL2NvbXBi
aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3ZpZXcuaHBwIiwgMzA4LCBfX1BS
RVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCgogICAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxv
dGhlci5lbmQoKSxiZWdpbigpKTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGVsZW1l
bnQqIG9yaWdpbigpIHsgcmV0dXJuIGJhc2VfK29yaWdpbl9vZmZzZXRfOyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBJbmRleExpc3Q+CiAgZWxlbWVudCYgb3BlcmF0b3IoKShjb25zdCBJbmRleExpc3Qm
IGluZGljZXMpIHsKICAgIHJldHVybiBzdXBlcl90eXBlOjphY2Nlc3NfZWxlbWVudChib29zdDo6
dHlwZTxlbGVtZW50Jj4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLHN0
cmlkZXMoKSk7CiAgfQoKCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oaW5kZXggaWR4KSB7CiAgICBy
ZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzKGJvb3N0Ojp0eXBlPHJlZmVyZW5jZT4oKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWR4LG9yaWdpbigpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhfYmFzZXMoKSk7CiAgfQoKCgoKICB0ZW1wbGF0ZSA8aW50IE5EaW1zPgoKCgogIHR5
cGVuYW1lIGFycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlCiAgb3BlcmF0b3JbXShjb25zdCBib29zdDo6
ZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGlt
cz4mIGluZGljZXMpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYXJyYXlfdmlldzxORGltcz46OnR5
cGUgcmV0dXJuX3R5cGU7CiAgICByZXR1cm4KICAgICAgc3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJy
YXlfdmlldyhib29zdDo6dHlwZTxyZXR1cm5fdHlwZT4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
aWRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2Vz
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKCkpOwogIH0K
CgogIGl0ZXJhdG9yIGJlZ2luKCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5k
ZXhfYmFzZXMoKSxvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aGFwZSgpLHN0cmlkZXMoKSxpbmRleF9iYXNlcygpKSk7CiAgfQoKICBpdGVyYXRvciBlbmQoKSB7
CiAgICByZXR1cm4gaXRlcmF0b3IoaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9y
aWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRl
cygpLGluZGV4X2Jhc2VzKCkpKTsKICB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgewog
ICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0KCiAgcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgewogICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQoKCgoK
ICBjb25zdCBlbGVtZW50KiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBzdXBlcl90eXBlOjpvcmln
aW4oKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhMaXN0PgogIGNvbnN0IGVsZW1lbnQmIG9w
ZXJhdG9yKCkoY29uc3QgSW5kZXhMaXN0JiBpbmRpY2VzKSBjb25zdCB7CiAgICByZXR1cm4gc3Vw
ZXJfdHlwZTo6b3BlcmF0b3IoKShpbmRpY2VzKTsKICB9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVy
YXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9y
W10oaWR4KTsKICB9CgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0eXBlbmFtZSBjb25z
dF9hcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgYm9vc3Q6OmRldGFp
bDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgaW5kZXhfZ2VuPE51bURpbXMsTkRpbXM+JiBp
bmRpY2VzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9yW10oaW5k
aWNlcyk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKICAgIHJldHVybiBz
dXBlcl90eXBlOjpiZWdpbigpOwogIH0KCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgewog
ICAgcmV0dXJuIHN1cGVyX3R5cGU6OmVuZCgpOwogIH0KCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6cmJlZ2luKCk7CiAgfQoK
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJf
dHlwZTo6cmVuZCgpOwogIH0KCgpwcml2YXRlOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxzdGQ6OnNp
emVfdD4gZnJpZW5kIGNsYXNzIG11bHRpX2FycmF5X2ltcGxfYmFzZTsKCgoKCgoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRXh0ZW50TGlzdCwgdHlwZW5hbWUgSW5kZXg+CiAgZXhwbGljaXQgbXVsdGlf
YXJyYXlfdmlldyhUKiBiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXh0
ZW50TGlzdCYgZXh0ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb3N0
OjphcnJheTxJbmRleCxOdW1EaW1zPiYgc3RyaWRlcykgOgogICAgc3VwZXJfdHlwZShiYXNlLGV4
dGVudHMsc3RyaWRlcykgeyB9Cgp9OwoKfQp9CgoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJyYXks
IGludCBOPgpjbGFzcyBhcnJheV92aWV3X2dlbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6
ZWxlbWVudCBlbGVtZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9h
cnJheTo6bXVsdGlfYXJyYXlfdmlldzxlbGVtZW50LE4+IHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQXJyYXksIGludCBOPgpjbGFzcyBjb25zdF9hcnJheV92aWV3X2dlbiB7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBBcnJheTo6ZWxlbWVudCBlbGVtZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBib29z
dDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6Y29uc3RfbXVsdGlfYXJyYXlfdmlldzxlbGVtZW50LE4+
IHR5cGU7Cn07Cgp9CiMgMjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211
bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiIDIgMwoKCgojIDEgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIiAxIDMKIyAyNyAiL2hvbWUvY29t
cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZnVuY3Rpb25hbC5ocHAiIDMKbmFtZXNwYWNlIGJv
b3N0CnsKIyA0MyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZnVuY3Rpb25h
bC5ocHAiIDMKICAgIG5hbWVzcGFjZSBkZXRhaWwKICAgIHsKICAgICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgT3BlcmF0aW9uPgogICAgICAgIHN0cnVjdCB1bmFyeV90cmFpdHNfaW1wOwoKICAgICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0aW9uPgogICAgICAgIHN0cnVjdCB1bmFyeV90cmFpdHNfaW1w
PE9wZXJhdGlvbio+CiAgICAgICAgewogICAgICAgICAgICB0eXBlZGVmIE9wZXJhdGlvbiBmdW5j
dGlvbl90eXBlOwogICAgICAgICAgICB0eXBlZGVmIGNvbnN0IGZ1bmN0aW9uX3R5cGUgJiBwYXJh
bV90eXBlOwogICAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5
cGUgcmVzdWx0X3R5cGU7CiAgICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgT3BlcmF0aW9uOjph
cmd1bWVudF90eXBlIGFyZ3VtZW50X3R5cGU7CiAgICAgICAgfTsKCiAgICAgICAgdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIEE+CiAgICAgICAgc3RydWN0IHVuYXJ5X3RyYWl0c19pbXA8UigqKShB
KT4KICAgICAgICB7CiAgICAgICAgICAgIHR5cGVkZWYgUiAoKmZ1bmN0aW9uX3R5cGUpKEEpOwog
ICAgICAgICAgICB0eXBlZGVmIFIgKCpwYXJhbV90eXBlKShBKTsKICAgICAgICAgICAgdHlwZWRl
ZiBSIHJlc3VsdF90eXBlOwogICAgICAgICAgICB0eXBlZGVmIEEgYXJndW1lbnRfdHlwZTsKICAg
ICAgICB9OwoKICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0aW9uPgogICAgICAgIHN0cnVj
dCBiaW5hcnlfdHJhaXRzX2ltcDsKCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIE9wZXJhdGlvbj4K
ICAgICAgICBzdHJ1Y3QgYmluYXJ5X3RyYWl0c19pbXA8T3BlcmF0aW9uKj4KICAgICAgICB7CiAg
ICAgICAgICAgIHR5cGVkZWYgT3BlcmF0aW9uIGZ1bmN0aW9uX3R5cGU7CiAgICAgICAgICAgIHR5
cGVkZWYgY29uc3QgZnVuY3Rpb25fdHlwZSAmIHBhcmFtX3R5cGU7CiAgICAgICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKICAgICAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3Rf
YXJndW1lbnRfdHlwZTsKICAgICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBPcGVyYXRpb246OnNl
Y29uZF9hcmd1bWVudF90eXBlIHNlY29uZF9hcmd1bWVudF90eXBlOwogICAgICAgIH07CgogICAg
ICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBBMSwgY2xhc3MgQTI+CiAgICAgICAgc3RydWN0
IGJpbmFyeV90cmFpdHNfaW1wPFIoKikoQTEsQTIpPgogICAgICAgIHsKICAgICAgICAgICAgdHlw
ZWRlZiBSICgqZnVuY3Rpb25fdHlwZSkoQTEsQTIpOwogICAgICAgICAgICB0eXBlZGVmIFIgKCpw
YXJhbV90eXBlKShBMSxBMik7CiAgICAgICAgICAgIHR5cGVkZWYgUiByZXN1bHRfdHlwZTsKICAg
ICAgICAgICAgdHlwZWRlZiBBMSBmaXJzdF9hcmd1bWVudF90eXBlOwogICAgICAgICAgICB0eXBl
ZGVmIEEyIHNlY29uZF9hcmd1bWVudF90eXBlOwogICAgICAgIH07CiAgICB9CgogICAgdGVtcGxh
dGUgPGNsYXNzIE9wZXJhdGlvbj4KICAgIHN0cnVjdCB1bmFyeV90cmFpdHMKICAgIHsKICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6dW5hcnlfdHJhaXRzX2ltcDxPcGVyYXRpb24qPjo6
ZnVuY3Rpb25fdHlwZSBmdW5jdGlvbl90eXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0
YWlsOjp1bmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+OjpwYXJhbV90eXBlIHBhcmFtX3R5cGU7
CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OnVuYXJ5X3RyYWl0c19pbXA8T3BlcmF0
aW9uKj46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
ZGV0YWlsOjp1bmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+Ojphcmd1bWVudF90eXBlIGFyZ3Vt
ZW50X3R5cGU7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBBPgogICAgc3Ry
dWN0IHVuYXJ5X3RyYWl0czxSKCopKEEpPgogICAgewogICAgICAgIHR5cGVkZWYgUiAoKmZ1bmN0
aW9uX3R5cGUpKEEpOwogICAgICAgIHR5cGVkZWYgUiAoKnBhcmFtX3R5cGUpKEEpOwogICAgICAg
IHR5cGVkZWYgUiByZXN1bHRfdHlwZTsKICAgICAgICB0eXBlZGVmIEEgYXJndW1lbnRfdHlwZTsK
ICAgIH07CgogICAgdGVtcGxhdGUgPGNsYXNzIE9wZXJhdGlvbj4KICAgIHN0cnVjdCBiaW5hcnlf
dHJhaXRzCiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmJpbmFyeV90cmFp
dHNfaW1wPE9wZXJhdGlvbio+OjpmdW5jdGlvbl90eXBlIGZ1bmN0aW9uX3R5cGU7CiAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmJpbmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+Ojpw
YXJhbV90eXBlIHBhcmFtX3R5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmJp
bmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+OjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6YmluYXJ5X3RyYWl0c19pbXA8T3BlcmF0aW9u
Kj46OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3RfYXJndW1lbnRfdHlwZTsKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGRldGFpbDo6YmluYXJ5X3RyYWl0c19pbXA8T3BlcmF0aW9uKj46OnNlY29u
ZF9hcmd1bWVudF90eXBlIHNlY29uZF9hcmd1bWVudF90eXBlOwogICAgfTsKCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgQTEsIGNsYXNzIEEyPgogICAgc3RydWN0IGJpbmFyeV90cmFpdHM8
UigqKShBMSxBMik+CiAgICB7CiAgICAgICAgdHlwZWRlZiBSICgqZnVuY3Rpb25fdHlwZSkoQTEs
QTIpOwogICAgICAgIHR5cGVkZWYgUiAoKnBhcmFtX3R5cGUpKEExLEEyKTsKICAgICAgICB0eXBl
ZGVmIFIgcmVzdWx0X3R5cGU7CiAgICAgICAgdHlwZWRlZiBBMSBmaXJzdF9hcmd1bWVudF90eXBl
OwogICAgICAgIHR5cGVkZWYgQTIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgICB9OwojIDE1NiAi
L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZnVuY3Rpb25hbC5ocHAiIDMKICAg
IHRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGU+CiAgICBjbGFzcyB1bmFyeV9uZWdhdGUKICAgICAg
ICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIHVuYXJ5X3RyYWl0czxQcmVk
aWNhdGU+Ojphcmd1bWVudF90eXBlLGJvb2w+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBl
eHBsaWNpdCB1bmFyeV9uZWdhdGUodHlwZW5hbWUgdW5hcnlfdHJhaXRzPFByZWRpY2F0ZT46OnBh
cmFtX3R5cGUgeCkKICAgICAgICAgICAgOgogICAgICAgICAgICBwcmVkKHgpCiAgICAgICAge30K
ICAgICAgICBib29sIG9wZXJhdG9yKCkodHlwZW5hbWUgY2FsbF90cmFpdHM8dHlwZW5hbWUgdW5h
cnlfdHJhaXRzPFByZWRpY2F0ZT46OmFyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHgpIGNvbnN0
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gIXByZWQoeCk7CiAgICAgICAgfQogICAgICBw
cml2YXRlOgogICAgICAgIHR5cGVuYW1lIHVuYXJ5X3RyYWl0czxQcmVkaWNhdGU+OjpmdW5jdGlv
bl90eXBlIHByZWQ7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGU+CiAgICB1
bmFyeV9uZWdhdGU8UHJlZGljYXRlPiBub3QxKGNvbnN0IFByZWRpY2F0ZSAmcHJlZCkKICAgIHsK
CgogICAgICAgIHJldHVybiB1bmFyeV9uZWdhdGU8UHJlZGljYXRlPigodHlwZW5hbWUgdW5hcnlf
dHJhaXRzPFByZWRpY2F0ZT46OnBhcmFtX3R5cGUpcHJlZCk7CiAgICB9CgogICAgdGVtcGxhdGUg
PGNsYXNzIFByZWRpY2F0ZT4KICAgIHVuYXJ5X25lZ2F0ZTxQcmVkaWNhdGU+IG5vdDEoUHJlZGlj
YXRlICZwcmVkKQogICAgewogICAgICAgIHJldHVybiB1bmFyeV9uZWdhdGU8UHJlZGljYXRlPihw
cmVkKTsKICAgIH0KCgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgUHJlZGljYXRlPgogICAgY2xhc3Mg
YmluYXJ5X25lZ2F0ZQogICAgICAgIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPHR5cGVu
YW1lIGJpbmFyeV90cmFpdHM8UHJlZGljYXRlPjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPFBy
ZWRpY2F0ZT46OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2w+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNpdCBi
aW5hcnlfbmVnYXRlKHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8UHJlZGljYXRlPjo6cGFyYW1fdHlw
ZSB4KQogICAgICAgICAgICA6CiAgICAgICAgICAgIHByZWQoeCkKICAgICAgICB7fQogICAgICAg
IGJvb2wgb3BlcmF0b3IoKSh0eXBlbmFtZSBjYWxsX3RyYWl0czx0eXBlbmFtZSBiaW5hcnlfdHJh
aXRzPFByZWRpY2F0ZT46OmZpcnN0X2FyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHgsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHR5cGVuYW1lIGJpbmFyeV90
cmFpdHM8UHJlZGljYXRlPjo6c2Vjb25kX2FyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHkpIGNv
bnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gIXByZWQoeCx5KTsKICAgICAgICB9CiAg
ICAgIHByaXZhdGU6CiAgICAgICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxQcmVkaWNhdGU+Ojpm
dW5jdGlvbl90eXBlIHByZWQ7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGU+
CiAgICBiaW5hcnlfbmVnYXRlPFByZWRpY2F0ZT4gbm90Mihjb25zdCBQcmVkaWNhdGUgJnByZWQp
CiAgICB7CgoKICAgICAgICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxQcmVkaWNhdGU+KCh0eXBlbmFt
ZSBiaW5hcnlfdHJhaXRzPFByZWRpY2F0ZT46OnBhcmFtX3R5cGUpcHJlZCk7CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIFByZWRpY2F0ZT4KICAgIGJpbmFyeV9uZWdhdGU8UHJlZGljYXRlPiBu
b3QyKFByZWRpY2F0ZSAmcHJlZCkKICAgIHsKICAgICAgICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxQ
cmVkaWNhdGU+KHByZWQpOwogICAgfQoKCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBPcGVyYXRpb24+
CiAgICBjbGFzcyBiaW5kZXIxc3QKICAgICAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJh
aXRzPE9wZXJhdGlvbj46OnJlc3VsdF90eXBlPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAg
YmluZGVyMXN0KHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6cGFyYW1fdHlwZSB4
LAogICAgICAgICAgICAgICAgICB0eXBlbmFtZSBjYWxsX3RyYWl0czx0eXBlbmFtZSBiaW5hcnlf
dHJhaXRzPE9wZXJhdGlvbj46OmZpcnN0X2FyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHkpCiAg
ICAgICAgICAgIDoKICAgICAgICAgICAgb3AoeCksIHZhbHVlKHkpCiAgICAgICAge30KCiAgICAg
ICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxPcGVyYXRpb24+OjpyZXN1bHRfdHlwZQogICAgICAg
IG9wZXJhdG9yKCkodHlwZW5hbWUgY2FsbF90cmFpdHM8dHlwZW5hbWUgYmluYXJ5X3RyYWl0czxP
cGVyYXRpb24+OjpzZWNvbmRfYXJndW1lbnRfdHlwZT46OnBhcmFtX3R5cGUgeCkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBvcCh2YWx1ZSwgeCk7CiAgICAgICAgfQoKICAgICAg
cHJvdGVjdGVkOgogICAgICAgIHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6ZnVu
Y3Rpb25fdHlwZSBvcDsKICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46
OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBP
cGVyYXRpb24+CiAgICBpbmxpbmUgYmluZGVyMXN0PE9wZXJhdGlvbj4gYmluZDFzdChjb25zdCBP
cGVyYXRpb24gJm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgY2FsbF90cmFpdHM8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OmZpcnN0X2Fy
Z3VtZW50X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnBh
cmFtX3R5cGUgeCkKICAgIHsKCgogICAgICAgIHJldHVybiBiaW5kZXIxc3Q8T3BlcmF0aW9uPigo
dHlwZW5hbWUgYmluYXJ5X3RyYWl0czxPcGVyYXRpb24+OjpwYXJhbV90eXBlKW9wLCB4KTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0aW9uPgogICAgaW5saW5lIGJpbmRlcjFzdDxP
cGVyYXRpb24+IGJpbmQxc3QoT3BlcmF0aW9uICZvcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGNhbGxfdHJhaXRzPAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxP
cGVyYXRpb24+OjpmaXJzdF9hcmd1bWVudF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA+OjpwYXJhbV90eXBlIHgpCiAgICB7CiAgICAgICAgcmV0dXJuIGJpbmRl
cjFzdDxPcGVyYXRpb24+KG9wLCB4KTsKICAgIH0KCgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgT3Bl
cmF0aW9uPgogICAgY2xhc3MgYmluZGVyMm5kCiAgICAgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9m
dW5jdGlvbjx0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OmZpcnN0X2FyZ3VtZW50
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5h
cnlfdHJhaXRzPE9wZXJhdGlvbj46OnJlc3VsdF90eXBlPgogICAgewogICAgICBwdWJsaWM6CiAg
ICAgICAgYmluZGVyMm5kKHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6cGFyYW1f
dHlwZSB4LAogICAgICAgICAgICAgICAgICB0eXBlbmFtZSBjYWxsX3RyYWl0czx0eXBlbmFtZSBi
aW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OnNlY29uZF9hcmd1bWVudF90eXBlPjo6cGFyYW1fdHlw
ZSB5KQogICAgICAgICAgICA6CiAgICAgICAgICAgIG9wKHgpLCB2YWx1ZSh5KQogICAgICAgIHt9
CgogICAgICAgIHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6cmVzdWx0X3R5cGUK
ICAgICAgICBvcGVyYXRvcigpKHR5cGVuYW1lIGNhbGxfdHJhaXRzPHR5cGVuYW1lIGJpbmFyeV90
cmFpdHM8T3BlcmF0aW9uPjo6Zmlyc3RfYXJndW1lbnRfdHlwZT46OnBhcmFtX3R5cGUgeCkgY29u
c3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBvcCh4LCB2YWx1ZSk7CiAgICAgICAgfQoK
ICAgICAgcHJvdGVjdGVkOgogICAgICAgIHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9u
Pjo6ZnVuY3Rpb25fdHlwZSBvcDsKICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJh
dGlvbj46OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgT3BlcmF0aW9uPgogICAgaW5saW5lIGJpbmRlcjJuZDxPcGVyYXRpb24+IGJpbmQybmQo
Y29uc3QgT3BlcmF0aW9uICZvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVuYW1lIGNhbGxfdHJhaXRzPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxPcGVyYXRpb24+Ojpz
ZWNvbmRfYXJndW1lbnRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPjo6cGFyYW1fdHlwZSB4KQogICAgewoKCiAgICAgICAgcmV0dXJuIGJpbmRlcjJuZDxPcGVy
YXRpb24+KCh0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OnBhcmFtX3R5cGUpb3As
IHgpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBPcGVyYXRpb24+CiAgICBpbmxpbmUgYmlu
ZGVyMm5kPE9wZXJhdGlvbj4gYmluZDJuZChPcGVyYXRpb24gJm9wLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgY2FsbF90cmFpdHM8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlf
dHJhaXRzPE9wZXJhdGlvbj46OnNlY29uZF9hcmd1bWVudF90eXBlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA+OjpwYXJhbV90eXBlIHgpCiAgICB7CiAgICAgICAgcmV0
dXJuIGJpbmRlcjJuZDxPcGVyYXRpb24+KG9wLCB4KTsKICAgIH0KCgoKCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgUywgY2xhc3MgVD4KICAgIGNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyBzdGQ6OnVuYXJ5
X2Z1bmN0aW9uPFQqLCBTPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgbWVt
X2Z1bl90KFMgKFQ6OipwKSgpKQogICAgICAgICAgICA6CiAgICAgICAgICAgIHB0cihwKQogICAg
ICAgIHt9CiAgICAgICAgUyBvcGVyYXRvcigpKFQqIHApIGNvbnN0CiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKHAtPipwdHIpKCk7CiAgICAgICAgfQogICAgICBwcml2YXRlOgogICAgICAg
IFMgKFQ6OipwdHIpKCk7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBULCBj
bGFzcyBBPgogICAgY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlv
bjxUKiwgQSwgUz4KICAgIHsKICAgICAgcHVibGljOgogICAgICAgIGV4cGxpY2l0IG1lbV9mdW4x
X3QoUyAoVDo6KnApKEEpKQogICAgICAgICAgICA6CiAgICAgICAgICAgIHB0cihwKQogICAgICAg
IHt9CiAgICAgICAgUyBvcGVyYXRvcigpKFQqIHAsIHR5cGVuYW1lIGNhbGxfdHJhaXRzPEE+Ojpw
YXJhbV90eXBlIHgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKHAtPipwdHIp
KHgpOwogICAgICAgIH0KICAgICAgcHJpdmF0ZToKICAgICAgICBTIChUOjoqcHRyKShBKTsKICAg
IH07CgogICAgdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQ+CiAgICBjbGFzcyBjb25zdF9tZW1f
ZnVuX3QgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxjb25zdCBUKiwgUz4KICAgIHsKICAg
ICAgcHVibGljOgogICAgICAgIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChTIChUOjoqcCkoKSBj
b25zdCkKICAgICAgICAgICAgOgogICAgICAgICAgICBwdHIocCkKICAgICAgICB7fQogICAgICAg
IFMgb3BlcmF0b3IoKShjb25zdCBUKiBwKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIChwLT4qcHRyKSgpOwogICAgICAgIH0KICAgICAgcHJpdmF0ZToKICAgICAgICBTIChUOjoq
cHRyKSgpIGNvbnN0OwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgUywgY2xhc3MgVCwgY2xh
c3MgQT4KICAgIGNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVu
Y3Rpb248Y29uc3QgVCosIEEsIFM+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNp
dCBjb25zdF9tZW1fZnVuMV90KFMgKFQ6OipwKShBKSBjb25zdCkKICAgICAgICAgICAgOgogICAg
ICAgICAgICBwdHIocCkKICAgICAgICB7fQogICAgICAgIFMgb3BlcmF0b3IoKShjb25zdCBUKiBw
LCB0eXBlbmFtZSBjYWxsX3RyYWl0czxBPjo6cGFyYW1fdHlwZSB4KSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIChwLT4qcHRyKSh4KTsKICAgICAgICB9CiAgICAgIHByaXZhdGU6
CiAgICAgICAgUyAoVDo6KnB0cikoQSkgY29uc3Q7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNz
IFMsIGNsYXNzIFQ+CiAgICBpbmxpbmUgbWVtX2Z1bl90PFMsVD4gbWVtX2Z1bihTIChUOjoqZiko
KSkKICAgIHsKICAgICAgICByZXR1cm4gbWVtX2Z1bl90PFMsVD4oZik7CiAgICB9CgogICAgdGVt
cGxhdGU8Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQT4KICAgIGlubGluZSBtZW1fZnVuMV90PFMs
VCxBPiBtZW1fZnVuKFMgKFQ6OipmKShBKSkKICAgIHsKICAgICAgICByZXR1cm4gbWVtX2Z1bjFf
dDxTLFQsQT4oZik7CiAgICB9CgoKICAgIHRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+CiAgICBp
bmxpbmUgY29uc3RfbWVtX2Z1bl90PFMsVD4gbWVtX2Z1bihTIChUOjoqZikoKSBjb25zdCkKICAg
IHsKICAgICAgICByZXR1cm4gY29uc3RfbWVtX2Z1bl90PFMsVD4oZik7CiAgICB9CgogICAgdGVt
cGxhdGU8Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQT4KICAgIGlubGluZSBjb25zdF9tZW1fZnVu
MV90PFMsVCxBPiBtZW1fZnVuKFMgKFQ6OipmKShBKSBjb25zdCkKICAgIHsKICAgICAgICByZXR1
cm4gY29uc3RfbWVtX2Z1bjFfdDxTLFQsQT4oZik7CiAgICB9CgoKCgoKICAgIHRlbXBsYXRlIDxj
bGFzcyBTLCBjbGFzcyBUPgogICAgY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyBzdGQ6OnVu
YXJ5X2Z1bmN0aW9uPFQmLCBTPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQg
bWVtX2Z1bl9yZWZfdChTIChUOjoqcCkoKSkKICAgICAgICAgICAgOgogICAgICAgICAgICBwdHIo
cCkKICAgICAgICB7fQogICAgICAgIFMgb3BlcmF0b3IoKShUJiBwKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIChwLipwdHIpKCk7CiAgICAgICAgfQogICAgICBwcml2YXRlOgog
ICAgICAgIFMgKFQ6OipwdHIpKCk7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBTLCBjbGFz
cyBULCBjbGFzcyBBPgogICAgY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgc3RkOjpiaW5h
cnlfZnVuY3Rpb248VCYsIEEsIFM+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNp
dCBtZW1fZnVuMV9yZWZfdChTIChUOjoqcCkoQSkpCiAgICAgICAgICAgIDoKICAgICAgICAgICAg
cHRyKHApCiAgICAgICAge30KICAgICAgICBTIG9wZXJhdG9yKCkoVCYgcCwgdHlwZW5hbWUgY2Fs
bF90cmFpdHM8QT46OnBhcmFtX3R5cGUgeCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAocC4qcHRyKSh4KTsKICAgICAgICB9CiAgICAgIHByaXZhdGU6CiAgICAgICAgUyAoVDo6
KnB0cikoQSk7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBUPgogICAgY2xh
c3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPGNvbnN0
IFQmLCBTPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgY29uc3RfbWVtX2Z1
bl9yZWZfdChTIChUOjoqcCkoKSBjb25zdCkKICAgICAgICAgICAgOgogICAgICAgICAgICBwdHIo
cCkKICAgICAgICB7fQoKICAgICAgICBTIG9wZXJhdG9yKCkoY29uc3QgVCAmcCkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAocC4qcHRyKSgpOwogICAgICAgIH0KICAgICAgcHJp
dmF0ZToKICAgICAgICBTIChUOjoqcHRyKSgpIGNvbnN0OwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQT4KICAgIGNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90
IDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFQmLCBBLCBTPgogICAgewogICAg
ICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoUyAoVDo6KnAp
KEEpIGNvbnN0KQogICAgICAgICAgICA6CiAgICAgICAgICAgIHB0cihwKQogICAgICAgIHt9Cgog
ICAgICAgIFMgb3BlcmF0b3IoKShjb25zdCBUJiBwLCB0eXBlbmFtZSBjYWxsX3RyYWl0czxBPjo6
cGFyYW1fdHlwZSB4KSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIChwLipwdHIp
KHgpOwogICAgICAgIH0KICAgICAgcHJpdmF0ZToKICAgICAgICBTIChUOjoqcHRyKShBKSBjb25z
dDsKICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4KICAgIGlubGluZSBtZW1f
ZnVuX3JlZl90PFMsVD4gbWVtX2Z1bl9yZWYoUyAoVDo6KmYpKCkpCiAgICB7CiAgICAgICAgcmV0
dXJuIG1lbV9mdW5fcmVmX3Q8UyxUPihmKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBTLCBj
bGFzcyBULCBjbGFzcyBBPgogICAgaW5saW5lIG1lbV9mdW4xX3JlZl90PFMsVCxBPiBtZW1fZnVu
X3JlZihTIChUOjoqZikoQSkpCiAgICB7CiAgICAgICAgcmV0dXJuIG1lbV9mdW4xX3JlZl90PFMs
VCxBPihmKTsKICAgIH0KCgogICAgdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4KICAgIGlubGlu
ZSBjb25zdF9tZW1fZnVuX3JlZl90PFMsVD4gbWVtX2Z1bl9yZWYoUyAoVDo6KmYpKCkgY29uc3Qp
CiAgICB7CiAgICAgICAgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8UyxUPihmKTsKICAgIH0K
CiAgICB0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBBPgogICAgaW5saW5lIGNvbnN0
X21lbV9mdW4xX3JlZl90PFMsVCxBPiBtZW1fZnVuX3JlZihTIChUOjoqZikoQSkgY29uc3QpCiAg
ICB7CiAgICAgICAgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PFMsVCxBPihmKTsKICAgIH0K
CgoKCgogICAgdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgUmVzdWx0PgogICAgY2xhc3MgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPEFyZyxS
ZXN1bHQ+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNpdCBwb2ludGVyX3RvX3Vu
YXJ5X2Z1bmN0aW9uKFJlc3VsdCAoKmYpKEFyZykpCiAgICAgICAgICAgIDoKICAgICAgICAgICAg
ZnVuYyhmKQogICAgICAgIHt9CgogICAgICAgIFJlc3VsdCBvcGVyYXRvcigpKHR5cGVuYW1lIGNh
bGxfdHJhaXRzPEFyZz46OnBhcmFtX3R5cGUgeCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBmdW5jKHgpOwogICAgICAgIH0KCiAgICAgIHByaXZhdGU6CiAgICAgICAgUmVzdWx0
ICgqZnVuYykoQXJnKTsKICAgIH07CgogICAgdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgUmVz
dWx0PgogICAgaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248QXJnLFJlc3VsdD4gcHRy
X2Z1bihSZXN1bHQgKCpmKShBcmcpKQogICAgewogICAgICAgIHJldHVybiBwb2ludGVyX3RvX3Vu
YXJ5X2Z1bmN0aW9uPEFyZyxSZXN1bHQ+KGYpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBB
cmcxLCBjbGFzcyBBcmcyLCBjbGFzcyBSZXN1bHQ+CiAgICBjbGFzcyBwb2ludGVyX3RvX2JpbmFy
eV9mdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxBcmcxLEFyZzIsUmVzdWx0
PgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlf
ZnVuY3Rpb24oUmVzdWx0ICgqZikoQXJnMSwgQXJnMikpCiAgICAgICAgICAgIDoKICAgICAgICAg
ICAgZnVuYyhmKQogICAgICAgIHt9CgogICAgICAgIFJlc3VsdCBvcGVyYXRvcigpKHR5cGVuYW1l
IGNhbGxfdHJhaXRzPEFyZzE+OjpwYXJhbV90eXBlIHgsIHR5cGVuYW1lIGNhbGxfdHJhaXRzPEFy
ZzI+OjpwYXJhbV90eXBlIHkpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gZnVu
Yyh4LHkpOwogICAgICAgIH0KCiAgICAgIHByaXZhdGU6CiAgICAgICAgUmVzdWx0ICgqZnVuYyko
QXJnMSwgQXJnMik7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBBcmcxLCBjbGFzcyBBcmcy
LCBjbGFzcyBSZXN1bHQ+CiAgICBpbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248QXJn
MSxBcmcyLFJlc3VsdD4gcHRyX2Z1bihSZXN1bHQgKCpmKShBcmcxLCBBcmcyKSkKICAgIHsKICAg
ICAgICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248QXJnMSxBcmcyLFJlc3VsdD4o
Zik7CiAgICB9Cn0KIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVs
dGlfYXJyYXkvbXVsdGlfYXJyYXlfcmVmLmhwcCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9n
Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9sb2NhbC92b2wv
Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoK
ZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19j
b25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2Zh
aWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChj
b25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgNDkgIi91
c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Nhc3NlcnQiIDIgMwojIDM0ICIv
aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9tdWx0aV9hcnJh
eV9yZWYuaHBwIiAyIDMKCgoKCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgc3RkOjpzaXplX3QgTnVtRGltcywKICB0eXBlbmFtZSBUUHRyID0gY29uc3QgVCoKPgpjbGFz
cyBjb25zdF9tdWx0aV9hcnJheV9yZWYgOgogICAgcHVibGljIGRldGFpbDo6bXVsdGlfYXJyYXk6
Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+CnsKICB0eXBlZGVmIGRldGFpbDo6bXVs
dGlfYXJyYXk6Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+IHN1cGVyX3R5cGU7CnB1
YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJf
YmFzZSBjb25zdF9pdGVyX2Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBl
bmFtZSBzdXBlcl90eXBlOjplbGVtZW50IGVsZW1lbnQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBl
cl90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlw
ZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1
cGVyX3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6ZXh0
ZW50X3JhbmdlIGV4dGVudF9yYW5nZTsKCgoKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTkRpbXM+
CiAgc3RydWN0IGNvbnN0X2FycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjpt
dWx0aV9hcnJheTo6Y29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07Cgog
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3QgYXJyYXlfdmlldyB7CiAgICB0
eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjptdWx0aV9hcnJheV92aWV3PFQsTkRp
bXM+IHR5cGU7CiAgfTsKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUsc3RkOjpzaXplX3QsdHlwZW5h
bWU+CiAgZnJpZW5kIGNsYXNzIGNvbnN0X211bHRpX2FycmF5X3JlZjsKCgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBPUHRyPgogIGNvbnN0X211bHRpX2FycmF5X3JlZihjb25zdCBjb25zdF9tdWx0aV9h
cnJheV9yZWY8VCxOdW1EaW1zLAogICAgICAgICAgICAgICAgICAgICAgICBPUHRyPiYgb3RoZXIp
CiAgICA6IGJhc2VfKG90aGVyLmJhc2VfKSwgc3RvcmFnZV8ob3RoZXIuc3RvcmFnZV8pLAogICAg
ICBleHRlbnRfbGlzdF8ob3RoZXIuZXh0ZW50X2xpc3RfKSwKICAgICAgc3RyaWRlX2xpc3RfKG90
aGVyLnN0cmlkZV9saXN0XyksCiAgICAgIGluZGV4X2Jhc2VfbGlzdF8ob3RoZXIuaW5kZXhfYmFz
ZV9saXN0XyksCiAgICAgIG9yaWdpbl9vZmZzZXRfKG90aGVyLm9yaWdpbl9vZmZzZXRfKSwKICAg
ICAgZGlyZWN0aW9uYWxfb2Zmc2V0XyhvdGhlci5kaXJlY3Rpb25hbF9vZmZzZXRfKSwKICAgICAg
bnVtX2VsZW1lbnRzXyhvdGhlci5udW1fZWxlbWVudHNfKSB7IH0KCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIEV4dGVudExpc3Q+CiAgZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgYmFz
ZSwgY29uc3QgRXh0ZW50TGlzdCYgZXh0ZW50cykgOgogICAgYmFzZV8oYmFzZSksIHN0b3JhZ2Vf
KGNfc3RvcmFnZV9vcmRlcigpKSB7CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAg
IGRldGFpbDo6bXVsdGlfYXJyYXk6OkNvbGxlY3Rpb25Db25jZXB0PEV4dGVudExpc3Q+ID4oKTsK
CiAgICBpbmRleF9iYXNlX2xpc3RfLmFzc2lnbigwKTsKICAgIGluaXRfbXVsdGlfYXJyYXlfcmVm
KGV4dGVudHMuYmVnaW4oKSk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRXh0ZW50TGlzdD4K
ICBleHBsaWNpdCBjb25zdF9tdWx0aV9hcnJheV9yZWYoVFB0ciBiYXNlLCBjb25zdCBFeHRlbnRM
aXN0JiBleHRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxfc3RvcmFn
ZV9vcmRlcjxOdW1EaW1zPiYgc28pIDoKICAgIGJhc2VfKGJhc2UpLCBzdG9yYWdlXyhzbykgewog
ICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpD
b2xsZWN0aW9uQ29uY2VwdDxFeHRlbnRMaXN0PiA+KCk7CgogICAgaW5kZXhfYmFzZV9saXN0Xy5h
c3NpZ24oMCk7CiAgICBpbml0X211bHRpX2FycmF5X3JlZihleHRlbnRzLmJlZ2luKCkpOwogIH0K
CiAgZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgYmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0ZW50X2dlbjxOdW1EaW1zPiYgcmFuZ2VzKSA6CiAgICBiYXNlXyhiYXNlKSwg
c3RvcmFnZV8oY19zdG9yYWdlX29yZGVyKCkpIHsKCiAgICBpbml0X2Zyb21fZXh0ZW50X2dlbihy
YW5nZXMpOwogIH0KCiAgZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgYmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudF9nZW48TnVtRGltcz4mIHJhbmdlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51bURp
bXM+JiBzbykgOgogICAgYmFzZV8oYmFzZSksIHN0b3JhZ2VfKHNvKSB7CgogICAgaW5pdF9mcm9t
X2V4dGVudF9nZW4ocmFuZ2VzKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9y
PgogIHZvaWQgYXNzaWduKElucHV0SXRlcmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKSB7
CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8SW5wdXRJdGVyYXRvckNvbmNlcHQ8SW5wdXRJ
dGVyYXRvcj4gPigpOwoKICAgIElucHV0SXRlcmF0b3IgaW5faXRlciA9IGJlZ2luOwogICAgVCog
b3V0X2l0ZXIgPSBiYXNlXzsKICAgIHN0ZDo6c2l6ZV90IGNvcHlfY291bnQ9MDsKICAgIHdoaWxl
IChpbl9pdGVyICE9IGVuZCAmJiBjb3B5X2NvdW50IDwgbnVtX2VsZW1lbnRzXykgewogICAgICAq
b3V0X2l0ZXIrKyA9ICppbl9pdGVyKys7CiAgICAgIGNvcHlfY291bnQrKzsKICAgIH0KICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBCYXNlTGlzdD4KICB2b2lkIHJlaW5kZXgoY29uc3QgQmFzZUxpc3Qm
IHZhbHVlcykgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBkZXRhaWw6Om11
bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxCYXNlTGlzdD4gPigpOwogICAgYm9vc3Q6OmNv
cHlfbih2YWx1ZXMuYmVnaW4oKSxudW1fZGltZW5zaW9ucygpLGluZGV4X2Jhc2VfbGlzdF8uYmVn
aW4oKSk7CiAgICBvcmlnaW5fb2Zmc2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0
KHN0cmlkZV9saXN0XyxleHRlbnRfbGlzdF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2VfLGluZGV4X2Jhc2VfbGlzdF8pOwogIH0KCiAgdm9pZCByZWluZGV4KGluZGV4IHZh
bHVlKSB7CiAgICBpbmRleF9iYXNlX2xpc3RfLmFzc2lnbih2YWx1ZSk7CiAgICBvcmlnaW5fb2Zm
c2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0KHN0cmlkZV9saXN0XyxleHRlbnRf
bGlzdF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VfLGluZGV4X2Jhc2Vf
bGlzdF8pOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFNpemVMaXN0PgogIHZvaWQgcmVzaGFw
ZShjb25zdCBTaXplTGlzdCYgZXh0ZW50cykgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVz
PAogICAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxTaXplTGlzdD4g
PigpOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgobnVtX2VsZW1lbnRzXyA9PSBzdGQ6OmFjY3Vt
dWxhdGUoZXh0ZW50cy5iZWdpbigpLGV4dGVudHMuZW5kKCksIHNpemVfdHlwZSgxKSxzdGQ6Om11
bHRpcGxpZXM8c2l6ZV90eXBlPigpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJudW1fZWxlbWVu
dHNfID09IHN0ZDo6YWNjdW11bGF0ZShleHRlbnRzLmJlZ2luKCksZXh0ZW50cy5lbmQoKSwgc2l6
ZV90eXBlKDEpLHN0ZDo6bXVsdGlwbGllczxzaXplX3R5cGU+KCkpIiwgIi9ob21lL2NvbXBiaW8v
ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiLCAx
NjIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCgogICAgc3RkOjpjb3B5KGV4dGVudHMu
YmVnaW4oKSxleHRlbnRzLmVuZCgpLGV4dGVudF9saXN0Xy5iZWdpbigpKTsKICAgIGNvbXB1dGVf
c3RyaWRlcyhzdHJpZGVfbGlzdF8sZXh0ZW50X2xpc3RfLHN0b3JhZ2VfKTsKCiAgICBvcmlnaW5f
b2Zmc2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0KHN0cmlkZV9saXN0XyxleHRl
bnRfbGlzdF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VfLGluZGV4X2Jh
c2VfbGlzdF8pOwogIH0KCiAgc2l6ZV90eXBlIG51bV9kaW1lbnNpb25zKCkgY29uc3QgeyByZXR1
cm4gTnVtRGltczsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVudF9s
aXN0Xy5mcm9udCgpOyB9CgoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBu
dW1fZWxlbWVudHMoKTsgfQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09
IDA7IH0KCiAgY29uc3Qgc2l6ZV90eXBlKiBzaGFwZSgpIGNvbnN0IHsKICAgIHJldHVybiBleHRl
bnRfbGlzdF8uZGF0YSgpOwogIH0KCiAgY29uc3QgaW5kZXgqIHN0cmlkZXMoKSBjb25zdCB7CiAg
ICByZXR1cm4gc3RyaWRlX2xpc3RfLmRhdGEoKTsKICB9CgogIGNvbnN0IGVsZW1lbnQqIG9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIGJhc2VfK29yaWdpbl9vZmZzZXRfOyB9CiAgY29uc3QgZWxlbWVu
dCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGJhc2VfOyB9CgogIHNpemVfdHlwZSBudW1fZWxlbWVu
dHMoKSBjb25zdCB7IHJldHVybiBudW1fZWxlbWVudHNfOyB9CgogIGNvbnN0IGluZGV4KiBpbmRl
eF9iYXNlcygpIGNvbnN0IHsKICAgIHJldHVybiBpbmRleF9iYXNlX2xpc3RfLmRhdGEoKTsKICB9
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleExpc3Q+CiAgY29uc3QgZWxlbWVudCYgb3BlcmF0
b3IoKShJbmRleExpc3QgaW5kaWNlcykgY29uc3QgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVp
cmVzPAogICAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxJbmRleExp
c3Q+ID4oKTsKICAgIHJldHVybiBzdXBlcl90eXBlOjphY2Nlc3NfZWxlbWVudChib29zdDo6dHlw
ZTxjb25zdCBlbGVtZW50Jj4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2Vz
LHN0cmlkZXMoKSk7CiAgfQoKCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oaW5kZXggaWR4
KSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzKGJvb3N0Ojp0eXBlPGNvbnN0
X3JlZmVyZW5jZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LG9yaWdpbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9i
YXNlcygpKTsKICB9CgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0eXBlbmFtZSBjb25z
dF9hcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgZGV0YWlsOjptdWx0
aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGluZGljZXMp
CiAgICBjb25zdCB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbnN0X2FycmF5X3ZpZXc8TkRpbXM+
Ojp0eXBlIHJldHVybl90eXBlOwogICAgcmV0dXJuCiAgICAgIHN1cGVyX3R5cGU6OmdlbmVyYXRl
X2FycmF5X3ZpZXcoYm9vc3Q6OnR5cGU8cmV0dXJuX3R5cGU+KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaGFwZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmlkZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleF9i
YXNlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbigpKTsK
ICB9CgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X2l0
ZXJhdG9yKGNvbnN0X2l0ZXJfYmFzZSgqaW5kZXhfYmFzZXMoKSxvcmlnaW4oKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9iYXNlcygp
KSk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7CiAgICByZXR1cm4gY29uc3Rf
aXRlcmF0b3IoY29uc3RfaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9yaWdpbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRlcygpLGlu
ZGV4X2Jhc2VzKCkpKTsKICB9CgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u
c3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0KCiAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIE9QdHI+CiAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0CiAgICAgICAgICAgICAgICAgIGNvbnN0X211bHRpX2FycmF5
X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIGlmKHN0ZDo6ZXF1YWwo
ZXh0ZW50X2xpc3RfLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgIGV4dGVudF9saXN0Xy5lbmQo
KSwKICAgICAgICAgICAgICAgICAgcmhzLmV4dGVudF9saXN0Xy5iZWdpbigpKSkKICAgICAgcmV0
dXJuIHN0ZDo6ZXF1YWwoYmVnaW4oKSxlbmQoKSxyaHMuYmVnaW4oKSk7CiAgICBlbHNlIHJldHVy
biBmYWxzZTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8
KGNvbnN0CiAgICAgICAgICAgICAgICAgY29uc3RfbXVsdGlfYXJyYXlfcmVmPFQsTnVtRGltcyxP
UHRyPiYgcmhzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoYmVnaW4oKSxlbmQoKSxyaHMuYmVnaW4oKSxyaHMuZW5kKCkpOwogIH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9QdHI+CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0CiAgICAgICAgICAgICAg
ICAgIGNvbnN0X211bHRpX2FycmF5X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0
IHsKICAgIHJldHVybiAhKCp0aGlzID09IHJocyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T1B0cj4KICBib29sIG9wZXJhdG9yPihjb25zdAogICAgICAgICAgICAgICAgIGNvbnN0X211bHRp
X2FycmF5X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIHJldHVybiBy
aHMgPCAqdGhpczsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0
b3I8PShjb25zdAogICAgICAgICAgICAgICAgIGNvbnN0X211bHRpX2FycmF5X3JlZjxULE51bURp
bXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID4gcmhzKTsKICB9
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I+PShjb25zdAogICAg
ICAgICAgICAgICAgIGNvbnN0X211bHRpX2FycmF5X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykK
ICAgIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwgcmhzKTsKICB9CgoKCgpwcm90ZWN0ZWQ6
CgoKCgogIHZvaWQgc2V0X2Jhc2VfcHRyKFRQdHIgbmV3X2Jhc2UpIHsgYmFzZV8gPSBuZXdfYmFz
ZTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBjb25zdF9tdWx0aV9hcnJheV9yZWYo
Y29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICAgICAgIGNvbnN0X3N1Yl9h
cnJheTxULE51bURpbXMsT1B0cj4mIHJocykKICAgIDogYmFzZV8ocmhzLm9yaWdpbigpKSwKICAg
ICAgc3RvcmFnZV8oY19zdG9yYWdlX29yZGVyKCkpLAogICAgICBvcmlnaW5fb2Zmc2V0XygwKSwg
ZGlyZWN0aW9uYWxfb2Zmc2V0XygwKSwKICAgICAgbnVtX2VsZW1lbnRzXyhyaHMubnVtX2VsZW1l
bnRzKCkpCiAgewogICAgdXNpbmcgYm9vc3Q6OmNvcHlfbjsKICAgIGNvcHlfbihyaHMuc2hhcGUo
KSxyaHMubnVtX2RpbWVuc2lvbnMoKSxleHRlbnRfbGlzdF8uYmVnaW4oKSk7CiAgICBjb3B5X24o
cmhzLnN0cmlkZXMoKSxyaHMubnVtX2RpbWVuc2lvbnMoKSxzdHJpZGVfbGlzdF8uYmVnaW4oKSk7
CiAgICBjb3B5X24ocmhzLmluZGV4X2Jhc2VzKCkscmhzLm51bV9kaW1lbnNpb25zKCksaW5kZXhf
YmFzZV9saXN0Xy5iZWdpbigpKTsKICB9CgogIHR5cGVkZWYgYm9vc3Q6OmFycmF5PHNpemVfdHlw
ZSxOdW1EaW1zPiBzaXplX2xpc3Q7CiAgdHlwZWRlZiBib29zdDo6YXJyYXk8aW5kZXgsTnVtRGlt
cz4gaW5kZXhfbGlzdDsKCiAgVFB0ciBiYXNlXzsKICBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVt
RGltcz4gc3RvcmFnZV87CiAgc2l6ZV9saXN0IGV4dGVudF9saXN0XzsKICBpbmRleF9saXN0IHN0
cmlkZV9saXN0XzsKICBpbmRleF9saXN0IGluZGV4X2Jhc2VfbGlzdF87CiAgaW5kZXggb3JpZ2lu
X29mZnNldF87CiAgaW5kZXggZGlyZWN0aW9uYWxfb2Zmc2V0XzsKICBzaXplX3R5cGUgbnVtX2Vs
ZW1lbnRzXzsKCnByaXZhdGU6CgogIGNvbnN0X211bHRpX2FycmF5X3JlZiYgb3BlcmF0b3I9KGNv
bnN0IGNvbnN0X211bHRpX2FycmF5X3JlZiYgb3RoZXIpOwoKICB2b2lkIGluaXRfZnJvbV9leHRl
bnRfZ2VuKGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6bXVsdGlfYXJyYXk6
OgogICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRfZ2VuPE51bURpbXM+JiByYW5nZXMpIHsK
CiAgICB0eXBlZGVmIGJvb3N0OjphcnJheTxpbmRleCxOdW1EaW1zPiBleHRlbnRfbGlzdDsKCgog
ICAgc3RkOjp0cmFuc2Zvcm0ocmFuZ2VzLnJhbmdlc18uYmVnaW4oKSxyYW5nZXMucmFuZ2VzXy5l
bmQoKSwKICAgICAgICAgICAgICBpbmRleF9iYXNlX2xpc3RfLmJlZ2luKCksCiAgICAgICAgICAg
ICAgYm9vc3Q6Om1lbV9mdW5fcmVmKCZleHRlbnRfcmFuZ2U6OnN0YXJ0KSk7CgoKICAgIGV4dGVu
dF9saXN0IGV4dGVudHM7CiAgICBzdGQ6OnRyYW5zZm9ybShyYW5nZXMucmFuZ2VzXy5iZWdpbigp
LHJhbmdlcy5yYW5nZXNfLmVuZCgpLAogICAgICAgICAgICAgIGV4dGVudHMuYmVnaW4oKSwKICAg
ICAgICAgICAgICBib29zdDo6bWVtX2Z1bl9yZWYoJmV4dGVudF9yYW5nZTo6c2l6ZSkpOwoKICAg
IGluaXRfbXVsdGlfYXJyYXlfcmVmKGV4dGVudHMuYmVnaW4oKSk7CiAgfQoKCiAgdGVtcGxhdGUg
PGNsYXNzIElucHV0SXRlcmF0b3I+CiAgdm9pZCBpbml0X211bHRpX2FycmF5X3JlZihJbnB1dEl0
ZXJhdG9yIGV4dGVudHNfaXRlcikgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPElucHV0
SXRlcmF0b3JDb25jZXB0PElucHV0SXRlcmF0b3I+ID4oKTsKCiAgICBib29zdDo6Y29weV9uKGV4
dGVudHNfaXRlcixudW1fZGltZW5zaW9ucygpLGV4dGVudF9saXN0Xy5iZWdpbigpKTsKCgogICAg
bnVtX2VsZW1lbnRzXyA9IHN0ZDo6YWNjdW11bGF0ZShleHRlbnRfbGlzdF8uYmVnaW4oKSxleHRl
bnRfbGlzdF8uZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLHN0ZDo6bXVsdGlw
bGllczxpbmRleD4oKSk7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChudW1fZWxlbWVudHNfICE9
IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgibnVtX2VsZW1lbnRzXyAhPSAwIiwgIi9ob21lL2Nv
bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5o
cHAiLCAzNjksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgIGNvbXB1dGVfc3RyaWRl
cyhzdHJpZGVfbGlzdF8sZXh0ZW50X2xpc3RfLHN0b3JhZ2VfKTsKCiAgICBvcmlnaW5fb2Zmc2V0
XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0KHN0cmlkZV9saXN0XyxleHRlbnRfbGlz
dF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VfLGluZGV4X2Jhc2VfbGlz
dF8pOwogICAgZGlyZWN0aW9uYWxfb2Zmc2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9kZXNjZW5kaW5n
X2RpbWVuc2lvbl9vZmZzZXQoc3RyaWRlX2xpc3RfLGV4dGVudF9saXN0XywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlXyk7CiAgfQp9OwoKCnRlbXBs
YXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBtdWx0aV9hcnJheV9y
ZWYgOgogIHB1YmxpYyBjb25zdF9tdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zLFQqPgp7CiAgdHlw
ZWRlZiBjb25zdF9tdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zLFQqPiBzdXBlcl90eXBlOwpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0
eXBlbmFtZSBzdXBlcl90eXBlOjppdGVyX2Jhc2UgaXRlcl9iYXNlOwogIHR5cGVkZWYgdHlwZW5h
bWUgc3VwZXJfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJh
dG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcl9iYXNlIGNvbnN0
X2l0ZXJfYmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVy
X3R5cGU6OmVsZW1lbnQgZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnNp
emVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpkaWZmZXJl
bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6
aW5kZXggaW5kZXg7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpleHRlbnRfcmFuZ2Ug
ZXh0ZW50X3JhbmdlOwoKCgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3Qg
Y29uc3RfYXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5
Ojpjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTkRpbXM+IHR5cGU7CiAgfTsKCiAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBhcnJheV92aWV3IHsKICAgIHR5cGVkZWYgYm9v
c3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2FycmF5X3ZpZXc8VCxORGltcz4gdHlwZTsK
ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRXh0ZW50TGlzdD4KICBleHBsaWNpdCBtdWx0aV9hcnJh
eV9yZWYoVCogYmFzZSwgY29uc3QgRXh0ZW50TGlzdCYgZXh0ZW50cykgOgogICAgc3VwZXJfdHlw
ZShiYXNlLGV4dGVudHMpIHsKICAgIGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczwKICAgICAgZGV0
YWlsOjptdWx0aV9hcnJheTo6Q29sbGVjdGlvbkNvbmNlcHQ8RXh0ZW50TGlzdD4gPigpOwogIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIEV4dGVudExpc3Q+CiAgZXhwbGljaXQgbXVsdGlfYXJyYXlfcmVm
KFQqIGJhc2UsIGNvbnN0IEV4dGVudExpc3QmIGV4dGVudHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdlbmVyYWxfc3RvcmFnZV9vcmRlcjxOdW1EaW1zPiYgc28pIDoKICAgIHN1
cGVyX3R5cGUoYmFzZSxleHRlbnRzLHNvKSB7CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8
CiAgICAgIGRldGFpbDo6bXVsdGlfYXJyYXk6OkNvbGxlY3Rpb25Db25jZXB0PEV4dGVudExpc3Q+
ID4oKTsKICB9CgoKICBleHBsaWNpdCBtdWx0aV9hcnJheV9yZWYoVCogYmFzZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dGVudF9nZW48TnVtRGltcz4mIHJhbmdlcykgOgogICAgc3VwZXJf
dHlwZShiYXNlLHJhbmdlcykgeyB9CgoKICBleHBsaWNpdCBtdWx0aV9hcnJheV9yZWYoVCogYmFz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudF9nZW48TnVtRGltcz4mCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVtRGltcz4mIHNvKSA6CiAgICBzdXBlcl90eXBl
KGJhc2UscmFuZ2VzLHNvKSB7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIE9QdHI+CiAgbXVsdGlf
YXJyYXlfcmVmKGNvbnN0IGRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgICAgICBj
b25zdF9zdWJfYXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpCiAgICA6IHN1cGVyX3R5cGUocmhz
KSB7fQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIENvbnN0TXVsdGlBcnJheT4KICBtdWx0aV9hcnJh
eV9yZWYmIG9wZXJhdG9yPShjb25zdCBDb25zdE11bHRpQXJyYXkmIG90aGVyKSB7CiAgICBmdW5j
dGlvbl9yZXF1aXJlczwKICAgICAgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgIENvbnN0TXVs
dGlBcnJheUNvbmNlcHQ8Q29uc3RNdWx0aUFycmF5LE51bURpbXM+ID4oKTsKCgogICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICgob3RoZXIubnVtX2RpbWVuc2lvbnMoKSA9PSBudW1fZGltZW5zaW9ucygp
KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIm90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2Rp
bWVuc2lvbnMoKSIsICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9h
cnJheS9tdWx0aV9hcnJheV9yZWYuaHBwIiwgNDU4LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp
KTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKHN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhl
ci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoInN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25z
KCksIHNoYXBlKCkpIiwgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRp
X2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiLCA0NjAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw
KSkpOwoKCiAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxvdGhlci5lbmQoKSxiZWdpbigpKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CgogIG11bHRpX2FycmF5X3JlZiYgb3BlcmF0b3I9KGNvbnN0
IG11bHRpX2FycmF5X3JlZiYgb3RoZXIpIHsKICAgIGlmICgmb3RoZXIgIT0gdGhpcykgewoKCiAg
ICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKG90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2Rp
bWVuc2lvbnMoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJvdGhlci5udW1fZGltZW5zaW9ucygp
ID09IG51bV9kaW1lbnNpb25zKCkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v
c3QvbXVsdGlfYXJyYXkvbXVsdGlfYXJyYXlfcmVmLmhwcCIsIDQ3MCwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKHN0ZDo6ZXF1YWwob3RoZXIu
c2hhcGUoKSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoInN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhlci5zaGFwZSgpK251
bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpIiwgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl
L2Jvb3N0L211bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiLCA0NzIsIF9fUFJFVFRZX0ZV
TkNUSU9OX18pLCAwKSkpOwoKCiAgICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLG90aGVyLmVu
ZCgpLGJlZ2luKCkpOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgZWxlbWVudCogb3Jp
Z2luKCkgeyByZXR1cm4gYmFzZV8rb3JpZ2luX29mZnNldF87IH0KCiAgZWxlbWVudCogZGF0YSgp
IHsgcmV0dXJuIGJhc2VfOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbmRleExpc3Q+CiAgZWxlbWVu
dCYgb3BlcmF0b3IoKShjb25zdCBJbmRleExpc3QmIGluZGljZXMpIHsKICBib29zdDo6ZnVuY3Rp
b25fcmVxdWlyZXM8CiAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxJ
bmRleExpc3Q+ID4oKTsKICByZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzX2VsZW1lbnQoYm9vc3Q6
OnR5cGU8ZWxlbWVudCY+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcyxz
dHJpZGVzKCkpOwogIH0KCgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgewogICAg
cmV0dXJuIHN1cGVyX3R5cGU6OmFjY2Vzcyhib29zdDo6dHlwZTxyZWZlcmVuY2U+KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCxvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4X2Jhc2VzKCkpOwogIH0KCgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0
eXBlbmFtZSBhcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgZGV0YWls
OjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGlu
ZGljZXMpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYXJyYXlfdmlldzxORGltcz46OnR5cGUgcmV0
dXJuX3R5cGU7CiAgICByZXR1cm4KICAgICAgc3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJyYXlfdmll
dyhib29zdDo6dHlwZTxyZXR1cm5fdHlwZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNoYXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcygp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VzKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKCkpOwogIH0KCgogIGl0
ZXJhdG9yIGJlZ2luKCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5kZXhfYmFz
ZXMoKSxvcmlnaW4oKSxzaGFwZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJp
ZGVzKCksaW5kZXhfYmFzZXMoKSkpOwogIH0KCiAgaXRlcmF0b3IgZW5kKCkgewogICAgcmV0dXJu
IGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5kZXhfYmFzZXMoKSsqc2hhcGUoKSxvcmlnaW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksaW5kZXhfYmFzZXMo
KSkpOwogIH0KCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgewogICAgcmV2ZXJzZV9pdGVy
YXRvciByaShlbmQoKSk7CiAgICByZXR1cm4gcmk7CiAgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSB7CiAgICByZXZlcnNlX2l0ZXJhdG9yIHJpKGJlZ2luKCkpOwogICAgcmV0dXJuIHJpOwog
IH0KCgoKCiAgY29uc3QgZWxlbWVudCogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3VwZXJfdHlw
ZTo6b3JpZ2luKCk7IH0KICBjb25zdCBlbGVtZW50KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3Vw
ZXJfdHlwZTo6ZGF0YSgpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbmRleExpc3Q+CiAgY29uc3Qg
ZWxlbWVudCYgb3BlcmF0b3IoKShjb25zdCBJbmRleExpc3QmIGluZGljZXMpIGNvbnN0IHsKICAg
IGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczwKICAgICAgZGV0YWlsOjptdWx0aV9hcnJheTo6Q29s
bGVjdGlvbkNvbmNlcHQ8SW5kZXhMaXN0PiA+KCk7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6b3Bl
cmF0b3IoKShpbmRpY2VzKTsKICB9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGluZGV4
IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6OmFjY2Vzcyhib29zdDo6dHlwZTxj
b25zdF9yZWZlcmVuY2U+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCxvcmln
aW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksaW5k
ZXhfYmFzZXMoKSk7CiAgfQoKCgogIHRlbXBsYXRlIDxpbnQgTkRpbXM+CgoKCiAgdHlwZW5hbWUg
Y29uc3RfYXJyYXlfdmlldzxORGltcz46OnR5cGUKICBvcGVyYXRvcltdKGNvbnN0IGRldGFpbDo6
bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgaW5kZXhfZ2VuPE51bURpbXMsTkRpbXM+JiBpbmRp
Y2VzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9yW10oaW5kaWNl
cyk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKICAgIHJldHVybiBzdXBl
cl90eXBlOjpiZWdpbigpOwogIH0KCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgewogICAg
cmV0dXJuIHN1cGVyX3R5cGU6OmVuZCgpOwogIH0KCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6cmJlZ2luKCk7CiAgfQoKICBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlw
ZTo6cmVuZCgpOwogIH0KfTsKCn0KIyAyNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv
Ym9vc3QvbXVsdGlfYXJyYXkuaHBwIiAyIDMKIyAzNiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu
Y2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLAogIHR5cGVuYW1lIEFsbG9jYXRvcj4K
Y2xhc3MgbXVsdGlfYXJyYXkgOgogIHB1YmxpYyBtdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zPgp7
CiAgdHlwZWRlZiBtdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zPiBzdXBlcl90eXBlOwpwdWJsaWM6
CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAg
dHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjppdGVyX2Jhc2UgaXRlcl9iYXNlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcl9iYXNlIGNvbnN0X2l0ZXJfYmFzZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9p
dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5
cGU6OmVsZW1lbnQgZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnNpemVf
dHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpkaWZmZXJlbmNl
X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aW5k
ZXggaW5kZXg7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpleHRlbnRfcmFuZ2UgZXh0
ZW50X3JhbmdlOwoKCiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBjb25z
dF9hcnJheV92aWV3IHsKICAgIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OmNv
bnN0X211bHRpX2FycmF5X3ZpZXc8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgTkRpbXM+CiAgc3RydWN0IGFycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6
ZGV0YWlsOjptdWx0aV9hcnJheTo6bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07
CgogIHRlbXBsYXRlIDxjbGFzcyBFeHRlbnRMaXN0PgogIGV4cGxpY2l0IG11bHRpX2FycmF5KEV4
dGVudExpc3QgY29uc3QmIGV4dGVudHMpIDoKICAgIHN1cGVyX3R5cGUoKFQqKWluaXRpYWxfYmFz
ZV8sZXh0ZW50cykgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBkZXRhaWw6
Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxFeHRlbnRMaXN0PiA+KCk7CiAgICBhbGxv
Y2F0ZV9zcGFjZSgpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIEV4dGVudExpc3Q+CiAgZXhwbGlj
aXQgbXVsdGlfYXJyYXkoRXh0ZW50TGlzdCBjb25zdCYgZXh0ZW50cywKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVtRGltcz4mIHNvKSA6CiAgICBz
dXBlcl90eXBlKChUKilpbml0aWFsX2Jhc2VfLGV4dGVudHMsc28pIHsKICAgIGJvb3N0OjpmdW5j
dGlvbl9yZXF1aXJlczwKICAgICAgZGV0YWlsOjptdWx0aV9hcnJheTo6Q29sbGVjdGlvbkNvbmNl
cHQ8RXh0ZW50TGlzdD4gPigpOwogICAgYWxsb2NhdGVfc3BhY2UoKTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBFeHRlbnRMaXN0PgogIGV4cGxpY2l0IG11bHRpX2FycmF5KEV4dGVudExpc3QgY29u
c3QmIGV4dGVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdl
X29yZGVyPE51bURpbXM+JiBzbywKICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0b3IgY29u
c3QmIGFsbG9jKSA6CiAgICBzdXBlcl90eXBlKChUKilpbml0aWFsX2Jhc2VfLGV4dGVudHMsc28p
LCBhbGxvY2F0b3JfKGFsbG9jKSB7CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAg
IGRldGFpbDo6bXVsdGlfYXJyYXk6OkNvbGxlY3Rpb25Db25jZXB0PEV4dGVudExpc3Q+ID4oKTsK
ICAgIGFsbG9jYXRlX3NwYWNlKCk7CiAgfQoKCiAgZXhwbGljaXQgbXVsdGlfYXJyYXkoY29uc3Qg
ZGV0YWlsOjptdWx0aV9hcnJheQogICAgICAgICAgICAgICAgICAgICAgIDo6ZXh0ZW50X2dlbjxO
dW1EaW1zPiYgcmFuZ2VzKSA6CiAgICBzdXBlcl90eXBlKChUKilpbml0aWFsX2Jhc2VfLHJhbmdl
cykgewoKICAgIGFsbG9jYXRlX3NwYWNlKCk7CiAgfQoKCiAgZXhwbGljaXQgbXVsdGlfYXJyYXko
Y29uc3QgZGV0YWlsOjptdWx0aV9hcnJheQogICAgICAgICAgICAgICAgICAgICAgIDo6ZXh0ZW50
X2dlbjxOdW1EaW1zPiYgcmFuZ2VzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVy
YWxfc3RvcmFnZV9vcmRlcjxOdW1EaW1zPiYgc28pIDoKICAgIHN1cGVyX3R5cGUoKFQqKWluaXRp
YWxfYmFzZV8scmFuZ2VzLHNvKSB7CgogICAgYWxsb2NhdGVfc3BhY2UoKTsKICB9CgoKICBleHBs
aWNpdCBtdWx0aV9hcnJheShjb25zdCBkZXRhaWw6Om11bHRpX2FycmF5CiAgICAgICAgICAgICAg
ICAgICAgICAgOjpleHRlbnRfZ2VuPE51bURpbXM+JiByYW5nZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51bURpbXM+JiBzbywKICAgICAgICAg
ICAgICAgICAgICAgICBBbGxvY2F0b3IgY29uc3QmIGFsbG9jKSA6CiAgICBzdXBlcl90eXBlKChU
Kilpbml0aWFsX2Jhc2VfLHJhbmdlcyxzbyksIGFsbG9jYXRvcl8oYWxsb2MpIHsKCiAgICBhbGxv
Y2F0ZV9zcGFjZSgpOwogIH0KCiAgbXVsdGlfYXJyYXkoY29uc3QgbXVsdGlfYXJyYXkmIHJocykg
OgogIHN1cGVyX3R5cGUocmhzKSwgYWxsb2NhdG9yXyhyaHMuYWxsb2NhdG9yXykgewogICAgYWxs
b2NhdGVfc3BhY2UoKTsKICAgIGJvb3N0Ojpjb3B5X24ocmhzLmJhc2VfLHJocy5udW1fZWxlbWVu
dHMoKSxiYXNlXyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBtdWx0aV9hcnJh
eShjb25zdCBkZXRhaWw6Om11bHRpX2FycmF5OjoKICAgICAgICAgICAgICBjb25zdF9zdWJfYXJy
YXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpIDoKICAgIHN1cGVyX3R5cGUocmhzKSB7CiAgICBhbGxv
Y2F0ZV9zcGFjZSgpOwogICAgc3RkOjpjb3B5KHJocy5iZWdpbigpLHJocy5lbmQoKSxiZWdpbigp
KTsKICB9CgoKCgogIG11bHRpX2FycmF5KGNvbnN0IGRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAg
ICAgICAgICAgIHN1Yl9hcnJheTxULE51bURpbXM+JiByaHMpIDoKICAgIHN1cGVyX3R5cGUocmhz
KSB7CiAgICBhbGxvY2F0ZV9zcGFjZSgpOwogICAgc3RkOjpjb3B5KHJocy5iZWdpbigpLHJocy5l
bmQoKSxiZWdpbigpKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIENvbnN0TXVsdGlBcnJh
eT4KICBtdWx0aV9hcnJheSYgb3BlcmF0b3I9KGNvbnN0IENvbnN0TXVsdGlBcnJheSYgb3RoZXIp
IHsKICAgIHN1cGVyX3R5cGU6Om9wZXJhdG9yPShvdGhlcik7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKICBtdWx0aV9hcnJheSYgb3BlcmF0b3I9KGNvbnN0IG11bHRpX2FycmF5JiBvdGhlcikgewog
ICAgaWYgKCZvdGhlciAhPSB0aGlzKSB7CiAgICAgIHN1cGVyX3R5cGU6Om9wZXJhdG9yPShvdGhl
cik7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgfm11bHRpX2FycmF5KCkgewogICAg
ZGVhbGxvY2F0ZV9zcGFjZSgpOwogIH0KCnByaXZhdGU6CiAgdm9pZCBhbGxvY2F0ZV9zcGFjZSgp
IHsKICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciBub19oaW50PTA7CiAgICBi
YXNlXyA9IGFsbG9jYXRvcl8uYWxsb2NhdGUoc3VwZXJfdHlwZTo6bnVtX2VsZW1lbnRzKCksbm9f
aGludCk7CiAgICBzdXBlcl90eXBlOjpzZXRfYmFzZV9wdHIoYmFzZV8pOwogICAgYWxsb2NhdGVk
X2VsZW1lbnRzXyA9IHN1cGVyX3R5cGU6Om51bV9lbGVtZW50cygpOwogICAgc3RkOjp1bmluaXRp
YWxpemVkX2ZpbGxfbihiYXNlXyxhbGxvY2F0ZWRfZWxlbWVudHNfLFQoKSk7CiAgfQoKICB2b2lk
IGRlYWxsb2NhdGVfc3BhY2UoKSB7CiAgICBpZihiYXNlXykgewogICAgICBmb3IoVCogaSA9IGJh
c2VfOyBpICE9IGJhc2VfK2FsbG9jYXRlZF9lbGVtZW50c187ICsraSkKICAgICAgICBhbGxvY2F0
b3JfLmRlc3Ryb3koaSk7CiAgICAgIGFsbG9jYXRvcl8uZGVhbGxvY2F0ZShiYXNlXyxhbGxvY2F0
ZWRfZWxlbWVudHNfKTsKICAgIH0KICB9CgogIHR5cGVkZWYgYm9vc3Q6OmFycmF5PHNpemVfdHlw
ZSxOdW1EaW1zPiBzaXplX2xpc3Q7CiAgdHlwZWRlZiBib29zdDo6YXJyYXk8aW5kZXgsTnVtRGlt
cz4gaW5kZXhfbGlzdDsKCiAgQWxsb2NhdG9yIGFsbG9jYXRvcl87CiAgVCogYmFzZV87CiAgc2l6
ZV90eXBlIGFsbG9jYXRlZF9lbGVtZW50c187CiAgZW51bSB7aW5pdGlhbF9iYXNlXyA9IDB9Owp9
OwoKfQojIDMgImV4ZW1wZWwuY3BwIiAyCgoKc3RydWN0IFAKe307Cgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgpzdHJ1Y3QgZnVuY3Rvcgp7CiAgICB0eXBlZGVmIGJvb3N0OjptdWx0aV9hcnJheTxULCAz
PiB0YWJsZV90OwogICAgdHlwZWRlZiB0eXBlbmFtZSB0YWJsZV90OjphcnJheV92aWV3PDI+Ojp0
eXBlIG5vZGV0YWJfdDsKCiAgICB2b2lkIG9wZXJhdG9yKCkoKQogICAgewogICAgICAgIG5vZGV0
YWJfdCBub2RldGFiOwogICAgfQoKfTsKCmludCBtYWluKCkKewogICAgZnVuY3RvcjxQPiB2aXM7
CiAgICB2aXMoKTsKCiAgICByZXR1cm4gMDsKfQo=


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