This is the mail archive of the libstdc++-prs@sourceware.cygnus.com mailing list for the libstdc++ project.


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

libstdc++/39: allocator::address declared twice



>Number:         39
>Category:       libstdc++
>Synopsis:       allocator::address declared twice
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 02 22:07:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     James A. Bednar
>Release:        GCC 2.95.1, libstdc++-v3
>Organization:
>Environment:
i686-pc-linux-gnu
>Description:
The trivial file:

#include <vector.h>
class c {
  typedef int (c::* fp) ( );
  vector<fp> v;
  c() { };
};

generates a bizarre and seemingly meaningless error:
.../include/g++-3/stl_alloc.h:750: `allocator<int (c::*)()>::address(int (c::* &)()) const' has already been declared in `allocator<int (c::*)()>'

>How-To-Repeat:
g++ -c bug2.c
>Fix:
I've no idea.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug2.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug2.ii"

IyAxICJidWcyLmMiCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb2Jhc2UuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3BhaXIu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9sdXNyL2dudS9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfY29uZmlnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKCiAK
IAogCiAKIAogCiAKCgoKCgoKCgojIDE0OCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiAKCgoKCgogCgojIDEgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9nbnUv
dHlwZXMuaCIgMSAzCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgogCiMgMTE3ICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgog
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiMg
MjIyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy9j
ZGVmcy5oIiAyIDMKCgogCgoKCgoKCgojIDU0ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMK
CgogCgoKCgoKCgogCgoKCiMgODYgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCgogCgoK
CgoKCgoKIAoKCgoKCgoKIyAyMDUgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKIAoK
IAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAyMTkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoK
CiMgMyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNs
dWRlL2dudS90eXBlcy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS90eXBlcy5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7
CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7Cgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90
OwojIDQxICIvdXNyL2luY2x1ZGUvZ251L3R5cGVzLmgiIDMKCnR5cGVkZWYgX19xdWFkX3QgKl9f
cWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVmIF9fdV9pbnQg
X191aWRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYgX191X2xvbmcg
X19pbm9fdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdV9pbnQg
X19ubGlua190OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBlZGVmIF9fcXVh
ZF90IF9fbG9mZl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRlZiBpbnQgX19z
c2l6ZV90OwkJCSAKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19m
c2lkX3Q7CQkJCSAKCiAKdHlwZWRlZiBpbnQgX19kYWRkcl90OwkJCSAKdHlwZWRlZiBjaGFyICpf
X2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19z
d2Jsa190OwkJIAoMCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKIAp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgaW50IF9fZmRfbWFzazsKCiAKCgogCgoKCgogCnR5cGVkZWYgc3RydWN0CiAgewog
ICAgIAogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9fZmRfbWFz
aykpIF07CiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVmIGludCBfX2tleV90OwoKdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIyA0ICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvZ251L3R5cGVzLmgiIDIgMwoKCiMgMTYg
Ii9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9n
bnUvdHlwZXMuaCIgMwoKCgoKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoK
IyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoK
IAoKCiMgNjEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgogCgojIDEzMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKIAoKIyAyNzEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAg
d2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEzICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoK
CnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p
KSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCiAK
CgoKCgoKCgoKCgoKCgojIDE1MSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMiAzCgoK
CgoKCgoKCgoKCgoKCgoKCiAgICAgIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAyMzQgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1
LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgojIDI0OCAiL2x1
c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiMgMzE2ICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAogCiAKIyAzMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3BhaXIuaCIgMiAzCgoKCiMgMSAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9yZWxvcHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPCBfX3kpOwp9CgogCgoKCiAKIAogCiMgMzQgIi9sdXNyL2dudS9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9wYWly
LmgiIDIgMwoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1Qy
IHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJz
dChfVDEoKSksIHNlY29uZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBf
VDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNz
IF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJz
dChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0
ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3gu
Zmlyc3QgPCBfX3kuZmlyc3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkg
JiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBj
b25zdCBfVDImIF9feSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAK
CgoKIAogCiAKIyAzNyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu
OTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3BhaXIuaCIgMiAzCgoKCgoKCgoKCgoKCiAK
IAogCiMgMzAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvaXRlcmF0b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9mdW5jdGlvbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKCgoKCgogCgogCgoKCgog
CgoKIAoKCgoKCiAKCgojIDYxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7
CgoKCgoKCgoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL2x1c3IvZ251L2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgojIDM2ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvZnVuY3Rpb24uaCIgMiAz
CgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVz
dWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBl
OwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJn
MSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewog
IHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29u
ZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsgICAgICAK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7
CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0
aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoK
IAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBsdXM8
X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9U
cCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiAK
ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAg
Ym9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy
ZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRl
cl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0g
X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsg
cmV0dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFy
eV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjph
cmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1
YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9N
X3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl
Ojphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwog
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9Q
cmVkaWNhdGU+IApub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFy
eV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh
dGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBl
bmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9w
cmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBf
X3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwgCiAgICAgICAgICAgICAgICAgIGNv
bnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0
CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QyKGNv
bnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNh
dGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPiAKY2xhc3MgYmluZGVy
MXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRl
cjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9P
cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1
ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPiAKYmlu
ZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVk
ZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwog
IHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMV90eXBlKF9feCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5
cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6
c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09w
ZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNv
bmRfYXJndW1lbnRfdHlwZSYgX195KSAKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVu
YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0
dXJuIG9wKF9feCwgdmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwg
Y2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+IApiaW5kMm5kKGNvbnN0IF9P
cGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5k
ZXIybmQ8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMl90eXBlKF9feCkpOwp9CgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21w
b3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3Vt
ZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6
OnJlc3VsdF90eXBlPiAKewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX19vcDE7CiAgX09wZXJh
dGlvbjIgX19vcDI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBf
X3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpIAogICAgOiBfX29wMShfX3gpLCBfX29wMihfX3kp
IHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25z
dCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX19vcDEoX19vcDIoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp
b24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEs
X09wZXJhdGlvbjI+IApjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9P
cGVyYXRpb24yJiBfX29wMikKewogIHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9P
cGVyYXRpb24yPihfX29wMSwgX19vcDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEs
IGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBv
c2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1l
bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6
cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX29wMTsKICBfT3BlcmF0
aW9uMiBfTV9vcDI7CiAgX09wZXJhdGlvbjMgX01fb3AzOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBv
c2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwgCiAgICAg
ICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikgCiAgICA6IF9NX29wMShfX3gpLCBf
TV9vcDIoX195KSwgX01fb3AzKF9feikgeyB9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3Vs
dF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fb3AxKF9NX29wMihfX3gpLCBfTV9vcDMo
X194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0
aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9u
MSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPiAKY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEm
IF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIsIAogICAgICAgICBjb25zdCBfT3BlcmF0
aW9uMyYgX19vcDMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJh
dGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19vcDEsIF9fb3AyLCBfX29wMyk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0
aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgog
IF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5j
dGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgq
X194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9f
eCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJn
LCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf
UmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJf
dG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5h
cnlfZnVuY3Rpb24gOiAKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1
bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVi
bGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9p
bnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgCiAg
ICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9B
cmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGlu
ZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiAKcHRyX2Z1
bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmlu
YXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCiAKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
PiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVy
biBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0eSA6IHB1Ymxp
YyBfSWRlbnRpdHk8X1RwPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1Nl
bGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZp
cnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3Io
KShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIGNvbnN0IHR5
cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Bh
aXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBs
YXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9Q
YWlyPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Q
cm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcxPiB7
CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0
IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4K
c3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIs
IF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz
cyBfQXJnMj4gCnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Qcm9qZWN0MXN0PF9BcmcxLCBf
QXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJv
amVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+IHt9OwoKIAogCiAKdGVt
cGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1bgp7CiAgdHlwZWRl
ZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9fdmFsOwogIGNvbnN0YW50X3Zv
aWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX192YWwoX192KSB7fQogIGNvbnN0IHJl
c3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gX192YWw7IH0KfTsgIAoKCnRl
bXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0PgoKCgpzdHJ1
Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Bcmd1bWVudCwg
X1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBf
UmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBvcGVyYXRvcigp
KGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsIGNsYXNzIF9BcmcyID0gX0Fy
ZzE+CgoKCnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF9i
aW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IF9S
ZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAg
IHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBj
b25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwp
CnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1
bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF91
bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVz
dWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4g
CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF9iaW5h
cnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCiAKIApjbGFzcyBzdWJ0
cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5zaWduZWQgaW50LCB1bnNpZ25l
ZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFibGVbNTVdOwogIHNpemVfdCBf
TV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgogIHVuc2lnbmVkIGludCBvcGVy
YXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9pbmRleDEgPSAoX01faW5kZXgx
ICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIgKyAxKSAlIDU1OwogICAgX01f
dGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0gLSBfTV90YWJsZVtfTV9pbmRl
eDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBfX2xpbWl0OwogIH0KCiAgdm9p
ZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAgewogICAgdW5zaWduZWQgaW50
IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAgICBzaXplX3QgX19pOwogICAg
Zm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAgICBzaXplX3QgX19paSA9ICgy
MSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFibGVbX19paV0gPSBfX2s7CiAg
ICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9fc2VlZCA9IF9NX3RhYmxlW19faWld
OwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspIHsK
ICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykKICAgICAgICAgICAgX01fdGFi
bGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSArIF9faSArIDMwKSAlIDU1XTsK
ICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIgPSAzMTsKICB9CgogIHN1YnRy
YWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsg
fQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9OwoK
CiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgoKdGVtcGxhdGUgPGNsYXNz
IF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3Qg
eyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgp
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1
bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1
cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVm
X3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl
dCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1Jl
dCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9S
ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNv
bnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9U
cDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNv
bnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6Oipf
TV9mKShfQXJnKSBjb25zdDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1
bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZv
aWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZv
aWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3Iu
Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l
bV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJn
PiAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf
cmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3Bl
cmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJn
PgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25z
dCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJn
IF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq
X01fZikoX0FyZykgY29uc3Q7Cn07CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoq
X19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4g
bWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1
bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m
KSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0
LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNv
bnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+
IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu
X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1f
ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l
bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+
IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu
MShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4x
X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9m
dW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgpt
ZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25z
dF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgogCgoKCiAKIAogCiMgMzgg
Ii9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9mdW5jdGlvbi5oIiAyIDMKCgoKIyA0OSAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2Z1bmN0aW9uLmgiIDMKCgojIDExMiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2Z1bmN0aW9uLmgiIDMKCgoK
CiAKIAogCiMgMzEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1
LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvci5oIiAyIDMKCgojIDEgIi9sdXNy
L2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQyICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45
NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMzMgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvci5o
IiAyIDMKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVy
ZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRh
cmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsK
CgoKIAoKIyAxMjIgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1
LjEvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA5ICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkYXJnLmgi
IDMKCgoKCiMgNDcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCiMgNjQgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgOTggIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAK
CgoKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCiAKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBz
dHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKICAgCgog
ICAKICBpbnQgX3BvczsKIyAxODIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgp9OwoKc3RydWN0
IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJIAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9w
dHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAg
Y2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciog
X0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZf
ZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jh
c2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5kOyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFy
a2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBf
Ymxrc2l6ZTsKICBfX29mZl90ICAgX29mZnNldDsKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3Vy
X2NvbHVtbjsKICBjaGFyIF91bnVzZWQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCiAgX0lP
X2xvY2tfdCAqX2xvY2s7Cn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVybiBzdHJ1
Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lPX3N0ZGVycl87CgoK
CgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX19zc2l6ZV90ICAgKCpyZWFkKSAgKHN0cnVjdCBfSU9f
RklMRSAqLCB2b2lkICosIF9fc3NpemVfdCAgKSAgOwogIF9fc3NpemVfdCAgICgqd3JpdGUpICAo
c3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX19zc2l6ZV90ICApICA7CiAgX19vZmZf
dCAgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX19vZmZfdCAgLCBpbnQpICA7CiAgaW50
ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZSB7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7
CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1
bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBf
X3VuZGVyZmxvdyAgKF9JT19GSUxFKikgIDsKZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUq
KSAgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgIChfSU9fRklMRSosIGludCkgIDsKCgoKCgoKCgoK
CgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBp
bnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9f
ZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklM
RSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2Zw
KSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0
ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9f
ZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
ZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFKiwgY29uc3QgY2hhciosIF9fZ251Y192
YV9saXN0ICwgaW50KikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSosIGNv
bnN0IGNoYXIqLCBfX2dudWNfdmFfbGlzdCApICA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFk
biAgKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICApICA7CmV4dGVybiBzaXplX3QgICBfSU9f
c2dldG4gIChfSU9fRklMRSAqLCB2b2lkKiwgc2l6ZV90ICApICA7CgpleHRlcm4gX19vZmZfdCAg
IF9JT19zZWVrb2ZmICAoX0lPX0ZJTEUqLCBfX29mZl90ICAsIGludCwgaW50KSAgOwpleHRlcm4g
X19vZmZfdCAgIF9JT19zZWVrcG9zICAoX0lPX0ZJTEUqLCBfX29mZl90ICAsIGludCkgIDsKCmV4
dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUqKSAgOwoKCn0KCgoKIyAz
NiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKCn0KIAoKIyAxICIvbHVzci9nbnUv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkYXJnLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgp2b2lkIHZhX2Vu
ZCAoX19nbnVjX3ZhX2xpc3QpOwkJIAoKCiAKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAogCgoKCgoKCgoKCgoKCgojIDE3NSAiL2x1c3IvZ251L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKIAoKCgoKIAoK
IAoKIAoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDQwICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4x
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFzcyBvc3RyZWFt
OyBjbGFzcyBzdHJlYW1idWY7CgogCgoKCgoKCgp0eXBlZGVmIF9fb2ZmX3QgICBzdHJlYW1vZmY7
CnR5cGVkZWYgX19vZmZfdCAgIHN0cmVhbXBvczsKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFt
c2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpf
c3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdz
IF9mbGFnczsKICAgIHNob3J0ICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lv
c3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlz
OyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgi
IDMKCgpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlv
cyYpOyAgIAogIGlvcyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10
ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQg
b3Blbm1vZGU7CiAgICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlv
X3N0YXRlIHsKCWdvb2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFk
Yml0ID0gNCAgfTsKICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0
ZSA9IDQgLAoJYXBwID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBs
YWNlID0gNjQgLAoJYmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVr
X2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7
CiAgICAgCiAgICBlbnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAs
IGludGVybmFsPSAwMTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkg
ICBzaG93YmFzZT0gMDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAw
ICwgc2hvd3Bvcz0gMDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAw
ICwKCSAgIHVuaXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51
bSB7ICAKCWJhc2VmaWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2Zp
eGVkLAoJYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7
IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0q
IHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAgc2hvcnQgIGZp
bGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgc2hvcnQgIGZpbGwoc2hvcnQgIG5ld2Yp
Cgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBm
bXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxh
Z3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdz
ID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7
IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7Cgl1bnNp
Z25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9y
dCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7
CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJp
dHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7Cglm
bXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2
YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFn
cyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5tYXNrOyBy
ZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9
CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFs
OyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0K
CiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBfc3RyYnVmID8g
c3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19m
YWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsK
CWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBz
ZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBf
ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJl
dHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAm
IGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChp
b3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4g
X3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkg
PyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBf
ZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CglfZXhj
ZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1
cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9
CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpf
b2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAg
ICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3lu
Y193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFn
cyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChp
bnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAg
ICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFzcyBJbml0IHsK
ICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlu
bGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDApOwogICAgaW5s
aW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBv
c3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7
CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2Vy
IHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9m
ZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVh
bWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsgcmV0dXJu
ICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsK
CnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmllbmQgY2xhc3Mg
aW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsK
ICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgp
IHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3Rl
Y3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4
Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQg
X2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3Mg
ICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAgY2hhciogcHB0
cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRyKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2VuZCA6IF9JT19y
ZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5k
OyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAg
ICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBf
SU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lP
X2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBf
SU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0
cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0KICAgIGludCB4
ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30K
ICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAgdm9pZCB4c2V0
ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNr
KSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICAm
IDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9CiAgICB2b2lk
IHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBzZXRiKGNoYXIq
IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBjaGFyKiBlcCkK
ICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7
IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsKICAgICAgaWYg
KF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAKICAgICAgX0lP
X3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQog
ICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQgaW5fYmFj
a3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpHYmFzZSgp
IHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0K
ICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9l
bmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5f
YmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0
cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJwdHIoKSB7
IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAg
Y2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigp
IHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4g
X0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1
cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAg
ICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9m
bGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAgCiAgICBz
dHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxs
KCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1
YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7
ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1Zmxvdygp
OyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVh
bXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0
cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVh
bXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6
b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1v
ZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1v
ZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0
dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNl
ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7
IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNz
ZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsK
ICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58
aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVu
KTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsK
CiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAg
IGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZm
ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVy
ZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9pZCB1bmJ1ZmZl
cmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0K
ICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsg
ZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFz
ZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2FsbG9jYXRlKCk7
IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9h
bGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFpbCgpIHsg
cmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93YWl0aW5n
KCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1z
aXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMs
IG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikgeyByZXR1
cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBz
LCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQogICAgaW50
IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29sdW1uKGlu
dCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6ZV90ICAgbiwgY2hhciBkZWxpbSwg
aW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0
YyAoIGMgLCAgIHRoaXMgKSA7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0YyAo
IHRoaXMgKSA7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuIF9JT19wZWVrY19sb2NrZWQgKCB0
aGlzICkgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVh
ZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVs
c2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsg
aWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGlu
dCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFt
ID0gX19udWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQg
dmZvcm0oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3Jt
KGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3Jl
YWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5
c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBz
eXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2Uo
KTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xhc3Mg
ZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgp
OwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYo
KTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQg
bGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAg
IGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwog
ICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2Rl
LCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0
dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3Qg
eyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19v
cGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0
dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVh
bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwg
c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0
bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hh
ciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6
ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0K
ICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0
cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAg
ICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUg
c2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rp
cik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1z
aXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQg
c3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2Is
IG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpi
YWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRo
PTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVj
aXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBv
c3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygp
IHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAK
CiMgMzEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpj
bGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3Mm
KTsKdHlwZWRlZiBpc3RyZWFtJiAoKl9faW1hbmlwKShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVh
bSYgKCpfX29tYW5pcCkob3N0cmVhbSYpOwoKZXh0ZXJuIGlzdHJlYW0mIHdzKGlzdHJlYW0mIGlu
cyk7CmV4dGVybiBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0m
IGVuZGwob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mIG91dHMp
OwoKY2xhc3Mgb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCiAgICB2b2lkIGRv
X29zZngoKTsKICBwdWJsaWM6CiAgICBvc3RyZWFtKCkgeyB9CiAgICBvc3RyZWFtKHN0cmVhbWJ1
Ziogc2IsIG9zdHJlYW0qIHRpZWQ9IF9fbnVsbCApOwogICAgaW50IG9wZngoKSB7CglpZiAoIWdv
b2QoKSkgcmV0dXJuIDA7CgllbHNlIHsgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7ICA7IHJldHVy
biAxO30gfQogICAgdm9pZCBvc2Z4KCkgeyAgOwoJCSAgaWYgKGZsYWdzKCkgJiAoaW9zOjp1bml0
YnVmfGlvczo6c3RkaW8pKQoJCSAgICAgIGRvX29zZngoKTsgfQogICAgb3N0cmVhbSYgZmx1c2go
KTsKICAgIG9zdHJlYW0mIHB1dChjaGFyIGMpIHsgX3N0cmJ1Zi0+c3B1dGMoYyk7IHJldHVybiAq
dGhpczsgfQoKCgoKCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBjaGFyICpzLCBzdHJlYW1zaXpl
IG4pOwogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3RyZWFtc2l6
ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVh
bSYgd3JpdGUoY29uc3Qgc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1
cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHZv
aWQgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs
IG4pO30KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7CiAgICBvc3RyZWFtJiBzZWVrcChz
dHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbHAoKTsKICAgIG9zdHJlYW0m
IGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBj
aGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0ICBhcmdzKTsKCiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIgYykgeyBy
ZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNpZ25l
ZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgdW5z
aWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRo
aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHZv
aWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4dGVuc2lv
bl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNpb25fXyBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1bnNp
Z25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJldHVybiBv
cGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91
YmxlKW4pOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKTsKCgoKICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhp
cyk7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhp
cyk7IHJldHVybiAqdGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoK
Cgp9OwoKY2xhc3MgaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3Rl
ZDoKICAgIHNpemVfdCAgIF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVibGljOgog
ICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVmKiBzYiwg
b3N0cmVhbSp0aWVkPSBfX251bGwgKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIsIGludCBs
ZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyKiBw
dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIs
IGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3RyZWFtJiBn
ZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVh
bSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlz
dHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0g
J1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlz
dHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAg
IGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
JykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYg
Z2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsg
cmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIHJl
YWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVhbSYgcmVhZCh1bnNpZ25lZCBj
aGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBu
KTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAg
ICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQodm9p
ZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7
IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAg
ICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpbnQgaXBm
eChpbnQgbmVlZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1
cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwgcmRidWYo
KS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoIW5lZWQgJiYgKGZs
YWdzKCkgJiBpb3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAx
OwoJfQogICAgfQogICAgaW50IGlwZngwKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpm
YWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSkgX3RpZS0+Zmx1
c2goKTsKCSAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dzKCk7Cgkg
IGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7ICAKCWlmICghZ29vZCgp
KSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChf
dGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKCSAgcmV0dXJu
IDE7Cgl9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0KICAgIGludCBnZXQoKSB7IGlmICgh
aXBmeDEoKSkgcmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMo
KTsKCQkgICAgICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9zOjplb2ZiaXQpOwoJCSAgICAgICBp
c2Z4KCk7CgkJICAgICAgIHJldHVybiBjaDsKCQkgICAgIH0gfQogICAgaW50IHBlZWsoKTsKICAg
IHNpemVfdCAgIGdjb3VudCgpIHsgcmV0dXJuIF9nY291bnQ7IH0KICAgIGlzdHJlYW0mIGlnbm9y
ZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpICk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJl
YW0mIHNlZWtnKHN0cmVhbXBvcyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVr
X2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBj
aCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVh
cihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7Cglp
ZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRi
aXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0
IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9s
aXN0ICBhcmdzKTsKCgoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChj
aGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVy
biBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBj
KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVy
YXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBj
KSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
aW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9f
IGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJl
YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0
b3I+PihzaG9ydCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoK
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
ZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0
aGlzO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpm
dW5jKSgqdGhpcyk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07Cgpj
bGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGlj
OgogICAgaW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0q
dGllZD0gX19udWxsICk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGlj
IGlzdHJlYW0gewpwdWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlz
dHJlYW0mKTsKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1f
d2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3Ry
ZWFtJj4gKHJocykpOyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGlj
IG9zdHJlYW0gewpwdWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9z
dHJlYW0mKTsKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1f
d2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3Ry
ZWFtJj4gKHJocykpOyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAK
ZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0
cmVhbV93aXRoYXNzaWduIGNsb2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYg
aW5zKTsKZXh0ZXJuIGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVh
bSYgbG9jayhvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBv
dXRzKTsKCnN0cnVjdCBJb3N0cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9z
JiBpKQp7IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1
cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpk
ZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBp
KQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4g
aTsgfQp9ICAKCgojIDM0ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IuaCIgMiAzCgoKIyAxICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCiAKCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRw
dXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg
aW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg
OiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAog
CiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3Rh
bmNlICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAg
ICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0
cnVjdCBvdXRwdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg
ICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAg
ICAgICAgICByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAg
ICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJl
bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVy
YXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAg
dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9U
cCogICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7Cn07CgogCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2Nh
dGVnb3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnko
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXIm
KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUo
Y29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkK
aXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9j
YXRlZ29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNv
bnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2
YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVf
dHlwZShfX2kpOyB9CgoKCgoKIyAyNTkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIg
MwoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRl
cmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytf
X247IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
LCAKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCnsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQp7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9
IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwog
IH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5
OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk
IF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9y
X3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu
Y2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAg
ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+PSAw
KQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19p
Owp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ks
IF9EaXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcpIHsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYg
X19pLCBfRGlzdGFuY2UgX19uKSB7CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRl
Z29yeShfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGlj
OgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVm
IG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2lu
c2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFj
a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l
IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hf
YmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQog
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KfTsKCiMgMzc4ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0Nv
bnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAg
IGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZl
cmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gp
IDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3Zh
bHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigp
IHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFp
bmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2Vy
dGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2Vy
dF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5h
bWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5l
ciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0
ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29u
c3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIg
PSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDU5ICIvbHVzci9nbnUvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0
ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsIAogICAgICAgICAgY2xh
c3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+ICBfU2VsZjsKcHJvdGVjdGVkOgogIF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAg
ICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCBy
ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gp
CiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNv
bnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsK
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICot
LV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy
YXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3Rt
cCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYg
b3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl
bGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJl
bnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA1NTAgIi9sdXNyL2dudS9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
aXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
CiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBf
UmVmLCBfRGlzdGFuY2U+JiBfX3gsIAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9f
eC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKCgogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRv
ciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3Ig
aXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2Vs
ZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0
ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0
ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICAgIAogIGl0
ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ug
b3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJl
dHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVu
dDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9T
ZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQog
IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
ICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZm
ZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7
CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJl
bnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVy
ZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwog
IH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50
ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm
ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAK
IAp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3gu
YmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwg
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwgCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiAKb3BlcmF0
b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
IF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7
CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsK
fQoKIyA4MDUgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0
ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVy
YXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaXN0cmVhbV9pdGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwog
IF9UcCBfTV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewog
ICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChf
TV9lbmRfbWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9
ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0
X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IGNvbnN0IF9UcCYgICAgICAgICAgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBf
TV9zdHJlYW0oJmNpbiksIF9NX2VuZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRv
cihpc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRl
cmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9yKysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisr
KGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsK
ICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CgojIDg2NCAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVybiAoX194Ll9NX3N0cmVhbSA9
PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBfX3kuX01f
ZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2UgJiYgX195
Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9z
dHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNvbnN0
IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zKSA6IF9NX3N0
cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBf
X3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9f
YykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3Zh
bHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYgKF9NX3N0cmluZykgKl9N
X3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJlYW1faXRl
cmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJh
dG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfSAKICBvc3RyZWFtX2l0ZXJh
dG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfSAKfTsKCiMgOTA3ICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCgoKCiAKIAogCiMgMzYgIi9sdXNy
L2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9pdGVyYXRvci5oIiAyIDMKCgoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90
cmFpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBfX2ZhbHNlX3R5cGUg
ewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgeyAKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICAgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKICAg
ICAgICAgICAgICAgICAgICAKCgoKCgogICAgCgoKCgoKCgoKIAoKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCiAKIAogCgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190
eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsK
fTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0Rf
dHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7Cn07CgojIDI5NSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKCgoKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19m
YWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2Vy
PGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8
PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9J
c19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19p
bnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxp
bnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0
cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2lu
dGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVn
ZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07CgoKCgoKIAogCiAKIyAzOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yLmgiIDIgMwoKCgoj
IDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uc3RydWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL25ldy5oIiAxIDMKIAoKCgoKIyAxICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbmV3IiAxIDMKIAogCgoK
CgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCiMgOCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9p
bmNsdWRlL25ldyIgMiAzCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBl
eGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlv
biAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBi
YWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9u
ICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQg
KCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxl
cikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxl
cik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5l
eHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lk
IHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1
Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbmV3IiAyIDMKCgpleHRlcm4gIkMrKyIg
ewoKbmFtZXNwYWNlIHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24g
ewogIHB1YmxpYzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkg
eyByZXR1cm4gImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHt9OwogIGV4
dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxl
cikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIgKG5ld19oYW5kbGVyKTsKCn0gIAoK
IAp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9p
ZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBv
cGVyYXRvciBkZWxldGUgKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAo
dm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpu
b3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90LCBjb25zdCBz
dGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9p
ZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgogCmlubGluZSB2b2lkICpvcGVy
YXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQpp
bmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7
IHJldHVybiBwbGFjZTsgfQp9ICAKCgojIDYgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9uZXcuaCIgMiAzCgoKdXNpbmcgc3RkOjpuZXdfaGFu
ZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyAzNCAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgoKIAoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxp
bmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9U
MSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBuZXcgKF9fcCkgX1QxKF9fdmFsdWUpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsK
ICBuZXcgKF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgpp
bmxpbmUgdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJ
dGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewog
IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJz
dCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFz
dCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKaW5saW5lIHZvaWQgZGVzdHJveShjaGFy
KiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQoK
IAoKCgogCiAKIAojIDQyICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IuaCIgMiAzCgoKCiMgMSAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
LCBjbGFzcyBfVHA+CmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9G
b3J3YXJkSXRlcmF0b3IgX01faXRlcjsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9G
b3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQogIHJhd19zdG9yYWdlX2l0ZXJh
dG9yJiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9y
JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpIHsKICAgIGNvbnN0cnVjdCgmKl9NX2l0
ZXIsIF9fZWxlbWVudCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfSAgICAgICAgCiAgcmF3X3N0b3Jh
Z2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYgb3BlcmF0b3IrKygpIHsKICAgICsr
X01faXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0Zv
cndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGludCkgewogICAgcmF3X3N0b3JhZ2VfaXRl
cmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgKytfTV9pdGVy
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgNzMgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmF3
X3N0b3JhZ2VfaXRlci5oIiAzCgoKIAoKCgogCiAKIAojIDQ1ICIvbHVzci9nbnUvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRl
cmF0b3IuaCIgMiAzCgoKCiMgOTggIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvci5oIiAzCgoKCgog
CiAKIAojIDMzICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4x
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL2x1c3Iv
Z251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgogCgoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwoKCgoKCgogCgoKIyAxOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYg
Ii9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoK
CiMgMjY5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvbHVzci9nbnUv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MiAzCgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY3B5ICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqICBfX3NyYywKCQkJICAgIHNpemVfdCBfX24pICA7CiAKCmV4dGVybiB2b2lkICogIG1l
bW1vdmUgICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNp
emVfdCBfX24pICA7CgogCgoKZXh0ZXJuIHZvaWQgKiAgX19tZW1jY3B5ICAodm9pZCAqICBfX2Rl
c3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICAgIGludCBfX2MsIHNpemVfdCBfX24p
ICA7CgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9p
ZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXplX3QgX19uKSAgOwoKCgogCmV4dGVybiB2
b2lkICogIG1lbXNldCAgKHZvaWQgKiAgX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSAgOwoKIApl
eHRlcm4gaW50IG1lbWNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAg
X19zMiwKCQkJc2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25z
dCB2b2lkICogIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIDsKCgogCmV4dGVybiBjaGFyICpz
dHJjcHkgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMpICA7CiAKZXh0ZXJuIGNo
YXIgKnN0cm5jcHkgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBf
X24pICA7CgogCmV4dGVybiBjaGFyICpzdHJjYXQgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19zcmMpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgIChjaGFyICpfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24pICA7CgogCmV4dGVybiBpbnQgc3RyY21wICAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpICA7CiAKZXh0ZXJuIGludCBzdHJu
Y21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24p
ICA7CgogCmV4dGVybiBpbnQgc3RyY29sbCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyKSAgOwogCmV4dGVybiBzaXplX3Qgc3RyeGZybSAgKGNoYXIgKl9fZGVzdCwgX19j
b25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikgIDsKCgogCmV4dGVybiBjaGFyICpfX3N0cmR1
cCAgKF9fY29uc3QgY2hhciAqX19zKSAgOwpleHRlcm4gY2hhciAqc3RyZHVwICAoX19jb25zdCBj
aGFyICpfX3MpICA7CgoKIAoKCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgIChfX2NvbnN0IGNoYXIg
Kl9fc3RyaW5nLCBzaXplX3QgX19uKSAgOwoKCgoKIyAxMjEgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMwoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSAgOwogCmV4dGVybiBjaGFyICpzdHJyY2hyICAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
ICA7CgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z
dCBjaGFyICpfX3JlamVjdCkgIDsKIAoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gIChfX2NvbnN0IGNo
YXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgIDsKIApleHRlcm4gY2hhciAqc3RycGJy
ayAgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSAgOwogCmV4dGVy
biBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq
X19uZWVkbGUpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAgKGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2RlbGltKSAgOwoKCiAKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAgKGNoYXIgKl9fcywg
X19jb25zdCBjaGFyICpfX2RlbGltLAoJCQkgICAgY2hhciAqKl9fc2F2ZV9wdHIpICA7CgoKCgoK
CgoKCgoKIApleHRlcm4gc2l6ZV90IHN0cmxlbiAgKF9fY29uc3QgY2hhciAqX19zKSAgOwoKIyAx
NzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBjaGFyICpzdHJlcnJvciAg
KGludCBfX2Vycm51bSkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3IgIChpbnQgX19l
cnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pICA7CmV4dGVybiBjaGFyICpzdHJl
cnJvcl9yICAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgOwoK
CgogCmV4dGVybiB2b2lkIGJjb3B5ICAoX19jb25zdCB2b2lkICogIF9fc3JjLCB2b2lkICogIF9f
ZGVzdCwgc2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywg
c2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIGludCBiY21wICAoX19jb25zdCB2b2lkICogIF9fczEs
IF9fY29uc3Qgdm9pZCAqICBfX3MyLCBzaXplX3QgX19uKSAgOwoKIApleHRlcm4gY2hhciAqaW5k
ZXggIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRl
eCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgOwoKIAoKZXh0ZXJuIGludCBmZnMgIChp
bnQgX19pKSAgOwoKIApleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyKSAgOwpleHRlcm4gaW50IHN0cmNhc2VjbXAgIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIDsKCiAKZXh0ZXJuIGludCBfX3N0cm5j
YXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAg
ICBzaXplX3QgX19uKSAgOwpleHRlcm4gaW50IHN0cm5jYXNlY21wICAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAgc2l6ZV90IF9fbikgIDsKCgoKIAoKZXh0
ZXJuIGNoYXIgKl9fc3Ryc2VwICAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2Rl
bGltKSAgOwpleHRlcm4gY2hhciAqc3Ryc2VwICAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBj
aGFyICpfX2RlbGltKSAgOwoKCiMgMjQxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKIApl
eHRlcm4gY2hhciAqYmFzZW5hbWUgIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpICA7CgoKfSAK
CgojIDQ4ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbGltaXRzLmgi
IDEgMwogCgoKIAoKCgoKCiAKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMi45NS4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwogCgoKCgoKIyAxICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvbGltaXRzLmgi
IDEgMwogCgoKIAoKIyAxMTQgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvcG9z
aXgxX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgoKIAoKCiAK
CgogCgoKIAoKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoK
IAoKCiAKCgogCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxfbGltLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwoKCgoK
CgoKCgoKCgoKCgoKCiMgMjEgIi91c3IvaW5jbHVkZS9sb2NhbF9saW0uaCIgMiAzCgoKIAoKIAoK
CiAKCiAKCgogCgogCgojIDkyICIvdXNyL2luY2x1ZGUvcG9zaXgxX2xpbS5oIiAyIDMKCgoKCgoK
CgogCgoKCgoKCgojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvcG9zaXgyX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoK
CgoKCgoKCgoKICAKIAogCiAKIAojIDUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKCgojIDEy
OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgojIDExNyAiL2x1c3IvZ251L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N5
c2xpbWl0cy5oIiAyIDMKCgojIDExICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMi45NS4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAKCgoKIAoKCgogCgoKCgog
CgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoK
CgoKCgoKCgoKCgoKIAoKCgojIDEwNyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgNDkgIi9s
dXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgojIDEgIi9sdXNyL2du
dS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCgoKCgoKCiAKCgojIDE5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL2x1
c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoK
IyAyNjkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi9sdXNyL2dudS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAzMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy
IDMKCgpleHRlcm4gIkMiIHsgCgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CQkJ
IAogICAgaW50IHJlbTsJCQkgCiAgfSBkaXZfdDsKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBs
b25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJIAogIH0gbGRpdl90OwoKCgoKCgoK
CgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBpbnQgX19jdHlwZV9nZXRfbWJfY3VyX21heCAgKHZv
aWQpICA7CgoKIApleHRlcm4gZG91YmxlIGF0b2YgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIDsK
IApleHRlcm4gaW50IGF0b2kgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIDsKIApleHRlcm4gbG9u
ZyBpbnQgYXRvbCAgKF9fY29uc3QgY2hhciAqX19ucHRyKSAgOwoKCiAKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgYXRvbGwgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIDsKCgogCmV4dGVybiBkb3VibGUg
c3RydG9kICAoX19jb25zdCBjaGFyICpfX25wdHIsIGNoYXIgKipfX2VuZHB0cikgIDsKCgoKCgoK
CiAKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoq
X19lbmRwdHIsCgkJCSAgICAgaW50IF9fYmFzZSkgIDsKIApleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgc3RydG91bCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJCQkJICAgICAgIGNoYXIgKipfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkgIDsKCgogCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAgKF9f
Y29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoqX19lbmRwdHIsCgkJCQkgIGludCBfX2Jhc2UpICA7
CiAKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAgKF9fY29uc3QgY2hhciAq
X19ucHRyLAoJCQkJCSAgICBjaGFyICoqX19lbmRwdHIsIGludCBfX2Jhc2UpICA7CgoKCiAKCiAK
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFy
ICoqX19lbmRwdHIsCgkJCQkgICBpbnQgX19iYXNlKSAgOwogCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IHN0cnRvdWxsICAoX19jb25zdCBjaGFyICpfX25wdHIsCgkJCQkJICAgICBjaGFy
ICoqX19lbmRwdHIsIGludCBfX2Jhc2UpICA7CgoKCgogCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRv
ZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJCQkJICAgICAgY2hhciAqKl9fZW5k
cHRyLCBpbnQgX19ncm91cCkgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsICAoX19j
b25zdCBjaGFyICpfX25wdHIsIGNoYXIgKipfX2VuZHB0ciwKCQkJCSAgICAgaW50IF9fZ3JvdXAp
ICA7CmV4dGVybiBsb25nIGRvdWJsZSAgX19zdHJ0b2xkX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICpfX25wdHIsCgkJCQkJCWNoYXIgKipfX2VuZHB0ciwgaW50IF9fZ3JvdXApICA7CmV4dGVybiBs
b25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoq
X19lbmRwdHIsCgkJCQkJaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApICA7CmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJ
CQkJICBjaGFyICoqX19lbmRwdHIsIGludCBfX2Jhc2UsCgkJCQkJCSAgaW50IF9fZ3JvdXApICA7
CgpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvcV9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAq
X19ucHRyLAoJCQkJCSAgICAgY2hhciAqKl9fZW5kcHRyLCBpbnQgX19iYXNlLAoJCQkJCSAgICAg
aW50IF9fZ3JvdXApICA7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91cV9p
bnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJCQkJCQkgICAgICAgY2hhciAqKl9fZW5k
cHRyLAoJCQkJCQkgICAgICAgaW50IF9fYmFzZSwKCQkJCQkJICAgICAgIGludCBfX2dyb3VwKSAg
OwoKCiMgMTk3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKCiAKCgpleHRlcm4gY2hhciAq
bDY0YSAgKGxvbmcgaW50IF9fbikgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGE2NGwgIChfX2NvbnN0
IGNoYXIgKl9fcykgIDsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKCgoKdHlwZWRlZiBfX3VfY2hh
ciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2lu
dDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBl
ZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVk
ZWYgX19kZXZfdCBkZXZfdDsKdHlwZWRlZiBfX2dpZF90IGdpZF90Owp0eXBlZGVmIF9faW5vX3Qg
aW5vX3Q7CnR5cGVkZWYgX19tb2RlX3QgbW9kZV90Owp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190
Owp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90Owp0eXBlZGVm
IF9fcGlkX3QgcGlkX3Q7CnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgp0eXBlZGVmIF9fc3NpemVf
dCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRy
X3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwoKCgojIDEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwoKCgoKCgoKCgogCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgoKCiMgOTcgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKCgoKCgojIDEyNSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoj
IDI4MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvbHVzci9nbnUv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4
ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoK
CgoKIAoKIAoKIyAzMTcgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyA3
MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnQ7CgoKIAoKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CgoKIAoKCgoKCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAg
X19RSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgaW50
IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVm
IHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lf
XyApKSkgOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBf
X0RJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCgogCgoKCgoKCiAKIyAxICIvdXNyL2lu
Y2x1ZGUvZW5kaWFuLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoj
IDEgIi91c3IvaW5jbHVkZS9ieXRlc2V4LmgiIDEgMwogCgoKIyAzNCAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAyIDMKCgoKCgoKCgoKCiMgMTIzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCiAKCgogCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMS9pbmNsdWRlL3NlbGVjdGJpdHMuaCIgMSAzCiAKCgojIDEgIi91c3IvaW5j
bHVkZS9zZWxlY3RiaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDUwICIvdXNyL2luY2x1ZGUvc2VsZWN0Yml0cy5oIiAzCgojIDY1ICIvdXNyL2lu
Y2x1ZGUvc2VsZWN0Yml0cy5oIiAzCgoKCiMgNCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3NlbGVjdGJpdHMuaCIgMiAzCgoKCgoKIyAxOCAi
L2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3Nl
bGVjdGJpdHMuaCIgMwoKCgoKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
IAoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNjgg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK
CgoKCgoKCgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CQkgCiAg
ICBsb25nIGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKCiMgMTI1ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCgoKCiMgMjgxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMzUgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKc3RydWN0IHRpbWV2
YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAp0eXBlZGVmIF9fZmRfc2V0IGZkX3Nl
dDsKCiAKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgpleHRlcm4gaW50IF9fc2VsZWN0ICAoaW50IF9f
bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJICBfX2ZkX3NldCAqX193cml0ZWZkcywgX19m
ZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQkgIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpICA7CmV4
dGVybiBpbnQgc2VsZWN0ICAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJX19m
ZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJc3RydWN0IHRpbWV2
YWwgKl9fdGltZW91dCkgIDsKCiAKCgpleHRlcm4gaW50IF9fcHNlbGVjdCAgKGludCBfX25mZHMs
IF9fZmRfc2V0ICpfX3JlYWRmZHMsCgkJCSAgIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3Nl
dCAqX19leGNlcHRmZHMsCgkJCSAgIHN0cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0KSAgOwpleHRl
cm4gaW50IHBzZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLAoJCQkgX19m
ZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJIHN0cnVjdCB0aW1l
c3BlYyAqX190aW1lb3V0KSAgOwoKCn0gCgoKIyAxMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzCgoKCgp9IAoKCiMgMjEwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAKCgoK
IApleHRlcm4gaW50MzJfdCBfX3JhbmRvbSAgKHZvaWQpICA7CmV4dGVybiBpbnQzMl90IHJhbmRv
bSAgKHZvaWQpICA7CgogCmV4dGVybiB2b2lkIF9fc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3Nl
ZWQpICA7CmV4dGVybiB2b2lkIHNyYW5kb20gICh1bnNpZ25lZCBpbnQgX19zZWVkKSAgOwoKIAoK
CgpleHRlcm4gdm9pZCAqICBfX2luaXRzdGF0ZSAgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQg
KiAgX19zdGF0ZWJ1ZiwKCQkJCSBzaXplX3QgX19zdGF0ZWxlbikgIDsKZXh0ZXJuIHZvaWQgKiAg
aW5pdHN0YXRlICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqICBfX3N0YXRlYnVmLAoJCQkg
ICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pICA7CgogCgpleHRlcm4gdm9pZCAqICBfX3NldHN0YXRl
ICAodm9pZCAqICBfX3N0YXRlYnVmKSAgOwpleHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQg
KiAgX19zdGF0ZWJ1ZikgIDsKCgoKIAoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQz
Ml90ICpmcHRyOwkJIAogICAgaW50MzJfdCAqcnB0cjsJCSAKICAgIGludDMyX3QgKnN0YXRlOwkJ
IAogICAgaW50IHJhbmRfdHlwZTsJCSAKICAgIGludCByYW5kX2RlZzsJCSAKICAgIGludCByYW5k
X3NlcDsJCSAKICAgIGludDMyX3QgKmVuZF9wdHI7CQkgCiAgfTsKCmV4dGVybiBpbnQgX19yYW5k
b21fciAgKHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYsIGludDMyX3QgKl9fcmVzdWx0KSAgOwpl
eHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZiwgaW50MzJfdCAq
X19yZXN1bHQpICA7CgpleHRlcm4gaW50IF9fc3JhbmRvbV9yICAodW5zaWduZWQgaW50IF9fc2Vl
ZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgIDsKZXh0ZXJuIGludCBzcmFuZG9tX3IgICh1
bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgOwoKZXh0ZXJu
IGludCBfX2luaXRzdGF0ZV9yICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqICBfX3N0YXRl
YnVmLAoJCQkgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5kb21fZGF0YSAqX19i
dWYpICA7CmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lk
ICogIF9fc3RhdGVidWYsCgkJCSAgICAgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5kb21f
ZGF0YSAqX19idWYpICA7CgpleHRlcm4gaW50IF9fc2V0c3RhdGVfciAgKHZvaWQgKiAgX19zdGF0
ZWJ1Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgIDsKZXh0ZXJuIGludCBzZXRzdGF0ZV9y
ICAodm9pZCAqICBfX3N0YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgOwoKCgoK
IApleHRlcm4gaW50IHJhbmQgICh2b2lkKSAgOwogCmV4dGVybiB2b2lkIHNyYW5kICAodW5zaWdu
ZWQgaW50IF9fc2VlZCkgIDsKCgogCmV4dGVybiBpbnQgX19yYW5kX3IgICh1bnNpZ25lZCBpbnQg
Kl9fc2VlZCkgIDsKZXh0ZXJuIGludCByYW5kX3IgICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgIDsK
CgoKCiAKCiAKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICAodm9pZCkgIDsKZXh0ZXJuIGRvdWJsZSBl
cmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICA7CgogCmV4dGVybiBsb25n
IGxyYW5kNDggICh2b2lkKSAgOwpleHRlcm4gbG9uZyBucmFuZDQ4ICAodW5zaWduZWQgc2hvcnQg
aW50IF9feHN1YmlbM10pICA7CgogCmV4dGVybiBsb25nIG1yYW5kNDggICh2b2lkKSAgOwpleHRl
cm4gbG9uZyBqcmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICA7CgogCmV4
dGVybiB2b2lkIHNyYW5kNDggIChsb25nIF9fc2VlZHZhbCkgIDsKZXh0ZXJuIHVuc2lnbmVkIHNo
b3J0IGludCAqc2VlZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgIDsKZXh0
ZXJuIHZvaWQgbGNvbmc0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSAgOwoKIApz
dHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CSAKICAg
IHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsJIAog
ICAgdW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOyAgCiAgICBpbnQgaW5pdDsJCQkgCiAgfTsK
CgogCmV4dGVybiBpbnQgZHJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIs
IGRvdWJsZSAqX19yZXN1bHQpICA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLCBk
b3VibGUgKl9fcmVzdWx0KSAgOwoKIApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fYnVmZmVyLCBsb25nICpfX3Jlc3VsdCkgIDsKZXh0ZXJuIGludCBucmFuZDQ4
X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19idWZmZXIsIGxvbmcgKl9fcmVzdWx0KSAgOwoKIApleHRlcm4gaW50IG1yYW5kNDhf
ciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLCBsb25nICpfX3Jlc3VsdCkgIDsKZXh0
ZXJuIGludCBqcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIsIGxvbmcgKl9fcmVzdWx0KSAgOwoKIApleHRl
cm4gaW50IHNyYW5kNDhfciAgKGxvbmcgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikgIDsKZXh0ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl
ZWQxNnZbM10sCgkJCSAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICA7CmV4dGVybiBp
bnQgbGNvbmc0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCgkJCSAgIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgOwoKCiAKZXh0ZXJuIGludCBfX2RyYW5kNDhfaXRl
cmF0ZSAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkJICAgc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19idWZmZXIpICA7CgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWFsbG9jICAoc2l6ZV90
IF9fc2l6ZSkgIDsKIAoKZXh0ZXJuIHZvaWQgKiAgcmVhbGxvYyAgKHZvaWQgKiAgX19wdHIsIHNp
emVfdCBfX3NpemUpICA7CiAKZXh0ZXJuIHZvaWQgKiAgY2FsbG9jICAoc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUpICA7CiAKZXh0ZXJuIHZvaWQgZnJlZSAgKHZvaWQgKiAgX19wdHIpICA7
CgoKIApleHRlcm4gdm9pZCBjZnJlZSAgKHZvaWQgKiAgX19wdHIpICA7CgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2FsbG9jYS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2x1c3Iv
Z251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKCgoKCgoKIAoKCiMgMTkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2
ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAK
CgojIDI2OSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKIApleHRlcm4gdm9pZCAqICBfX2FsbG9jYSAgKHNp
emVfdCBfX3NpemUpICA7CmV4dGVybiB2b2lkICogIGFsbG9jYSAgKHNpemVfdCBfX3NpemUpICA7
CgoKCgoKCn0gCgoKIyAzNjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgogCmV4dGVy
biB2b2lkICogIHZhbGxvYyAgKHNpemVfdCBfX3NpemUpICA7CgoKCiAKZXh0ZXJuIHZvaWQgYWJv
cnQgICh2b2lkKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBp
bnQgYXRleGl0ICAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSAgOwoKCiAKCmV4dGVybiBpbnQgX19v
bl9leGl0ICAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBfX2FyZyksCgkJ
CSAgIHZvaWQgKiAgX19hcmcpICA7CmV4dGVybiBpbnQgb25fZXhpdCAgKHZvaWQgKCpfX2Z1bmMp
IChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLAoJCQkgdm9pZCAqICBfX2FyZykgIDsKCgog
CgoKZXh0ZXJuIHZvaWQgZXhpdCAgKGludCBfX3N0YXR1cykgICBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CgoKIApleHRlcm4gY2hhciAqZ2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25h
bWUpICA7CgogCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52ICAoX19jb25zdCBjaGFyICpf
X25hbWUpICA7CgoKIAogCgpleHRlcm4gaW50IHB1dGVudiAgKF9fY29uc3QgY2hhciAqX19zdHJp
bmcpICA7CgoKCiAKCmV4dGVybiBpbnQgc2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUsIF9f
Y29uc3QgY2hhciAqX192YWx1ZSwKCQkJaW50IF9fcmVwbGFjZSkgIDsKCiAKZXh0ZXJuIHZvaWQg
dW5zZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIDsKCgoKIAoKCmV4dGVybiBpbnQgX19j
bGVhcmVudiAgKHZvaWQpICA7CmV4dGVybiBpbnQgY2xlYXJlbnYgICh2b2lkKSAgOwoKCgoKIAoK
CgpleHRlcm4gY2hhciAqbWt0ZW1wICAoY2hhciAqX190ZW1wbGF0ZSkgIDsKCiAKCgoKCmV4dGVy
biBpbnQgbWtzdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICA7CgoKCiAKZXh0ZXJuIGludCBzeXN0
ZW0gIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgIDsKCgoKCgoKCgoKCiAKCgoKCgpleHRlcm4g
Y2hhciAqcmVhbHBhdGggIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19yZXNvbHZlZCkg
IDsKCgoKIAoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgIChfX2NvbnN0IHZvaWQgKiAs
IF9fY29uc3Qgdm9pZCAqICkgIDsKCgoKCgoKIAoKZXh0ZXJuIHZvaWQgKiAgYnNlYXJjaCAgKF9f
Y29uc3Qgdm9pZCAqICBfX2tleSwgX19jb25zdCB2b2lkICogIF9fYmFzZSwKCQkJICAgICBzaXpl
X3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFy
KSAgOwoKIAoKZXh0ZXJuIHZvaWQgcXNvcnQgICh2b2lkICogIF9fYmFzZSwgc2l6ZV90IF9fbm1l
bWIsIHNpemVfdCBfX3NpemUsCgkJCV9fY29tcGFyX2ZuX3QgX19jb21wYXIpICA7CgoKIApleHRl
cm4gaW50IGFicyAgKGludCBfX3gpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl
cm4gbG9uZyBpbnQgbGFicyAgKGxvbmcgaW50IF9feCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgoKIAoKIApleHRlcm4gZGl2X3QgZGl2ICAoaW50IF9fbnVtZXIsIGludCBfX2Rl
bm9tKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2ICAo
bG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgoKCiAKCgogCgoKZXh0ZXJuIGNoYXIgKmVjdnQgIChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQsCgkJCWludCAqX19zaWduKSAgOwoKIAoKCmV4
dGVybiBjaGFyICpmY3Z0ICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX2Rl
Y3B0LAoJCQlpbnQgKl9fc2lnbikgIDsKCiAKCgpleHRlcm4gY2hhciAqZ2N2dCAgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgOwoKIApleHRlcm4gY2hhciAqcWVj
dnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQsCgkJ
CSBpbnQgKl9fc2lnbikgIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX2RlY3B0LAoJCQkgaW50ICpfX3NpZ24pICA7CmV4dGVy
biBjaGFyICpxZ2N2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIg
Kl9fYnVmKSAgOwoKCgogCgpleHRlcm4gaW50IGVjdnRfciAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19kZWNwdCwKCQkJaW50ICpfX3NpZ24sIGNoYXIgKl9fYnVmLCBzaXpl
X3QgX19sZW4pICA7CmV4dGVybiBpbnQgZmN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX2RlY3B0LAoJCQlpbnQgKl9fc2lnbiwgY2hhciAqX19idWYsIHNpemVfdCBf
X2xlbikgIDsKCmV4dGVybiBpbnQgcWVjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19kZWNwdCwKCQkJIGludCAqX19zaWduLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fbGVuKSAgOwpleHRlcm4gaW50IHFmY3Z0X3IgIChsb25nIGRvdWJsZSAgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQsCgkJCSBpbnQgKl9fc2lnbiwgY2hhciAqX19idWYs
IHNpemVfdCBfX2xlbikgIDsKCgoKCiAKCmV4dGVybiBpbnQgbWJsZW4gIChfX2NvbnN0IGNoYXIg
Kl9fcywgc2l6ZV90IF9fbikgIDsKIAoKZXh0ZXJuIGludCBtYnRvd2MgICh3Y2hhcl90ICpfX3B3
YywgX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pICA7CiAKCmV4dGVybiBpbnQgd2N0b21i
ICAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpICA7CgoKIApleHRlcm4gc2l6ZV90IG1ic3Rv
d2NzICAod2NoYXJfdCAqX19wd2NzLCBfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgIDsK
IApleHRlcm4gc2l6ZV90IHdjc3RvbWJzICAoY2hhciAqX19zLCBfX2NvbnN0IHdjaGFyX3QgKl9f
cHdjcywgc2l6ZV90IF9fbikgIDsKCgoKIAoKCgpleHRlcm4gaW50IHJwbWF0Y2ggIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpICA7CgoKCiMgNTgyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
CgoKCgoKCgoKCn0gCgoKIyA1MCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMK
CiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyA1MSAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKCgoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2l0
ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsKICBf
VHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lk
IGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsKICBfX2l0
ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9UcCBfX3Rt
cCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYikgewogIHJldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19j
b21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2IpID8gX19i
IDogX19hOwp9CgogCiAKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRl
cgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJz
dDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwg
X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jl
c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9kaXNw
YXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgcmV0
dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0
YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlz
cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0
IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJl
dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3Ry
aXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAg
ICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBfT3V0cHV0
SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0K
CiMgMjEzICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLCAK
ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19j
b3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2Fy
ZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+
IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3Qg
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBf
Q2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl
cjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRp
cmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jl
c3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBl
Pgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19s
YXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9U
cCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBf
VHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0
LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlf
YmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwg
Y2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEg
X19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz
PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAg
ICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf
VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9U
cml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
fQoKIyAzMDMgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFp
cjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7
CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7
CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091
dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0
ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+
KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBw
YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9u
KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091
dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f
cmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9f
Zmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9f
Zmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAg
fQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmly
c3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1p
c21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpf
X2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4g
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29s
IGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0g
X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9f
Zmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNh
dGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgogCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg
ICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9f
Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJl
dHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGlu
ZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsK
ICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVf
dCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVt
Y21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9f
cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBi
b29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBj
aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19m
aXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2Zp
cnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9Cgppbmxp
bmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19s
YXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19m
aXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwg
bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAK
ICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg
PCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGljYWxfY29t
cGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNo
YXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq
KSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg
Y2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzNiAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdW5pbml0
aWFsaXplZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgogCgog
CiAKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IF9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJl
dHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFs
aXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1
bHQ7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsr
X19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gX19j
dXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7
IH0gOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czxfVHA+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJk
SXRlcgogIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBy
ZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX3Jlc3VsdCApICk7Cn0K
CmlubGluZSBjaGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29u
c3QgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9f
cmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7
CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJf
dCogCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hh
cl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewogIG1l
bW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2Zp
cnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K
cGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lu
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsKICAgIGZv
ciAoIDsgX19jb3VudCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikgCiAgICAg
IGNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy
LCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0
cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBh
aXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlf
bihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9
IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9y
d2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19m
aXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5w
dXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3Vu
dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeSggX19maXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFz
dCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lk
Cl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19m
YWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAg
IGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1
ciwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRo
cm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh
c3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICAgICAgICAgICAgICAgICAK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1
bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJz
dCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X3RydWVfdHlwZSkKewogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFs
c2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7CiAgICBm
b3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwg
X194KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmly
c3QsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlciAK
X191bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxs
X25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVy
IAp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3Qs
IF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKCiAKIAogCiAKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3
YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJk
SXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1
bHQpOwogIHRyeSAgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19s
YXN0MiwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fbWlk
KSA7IHRocm93OyB9IDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfSW5wdXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlk
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1
bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSAgewogICAgcmV0
dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0
Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAog
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9U
cD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgIHsKICAgIHVu
aW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikg
eyAgZGVzdHJveShfX2ZpcnN0MiwgX19taWQyKSA7IHRocm93OyB9IDsKfQoKIAoKCgogCiAKIAoj
IDM5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb2Jhc2UuaCIgMiAzCgoKCiMgNjUgIi9sdXNyL2dudS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9hbGdvYmFzZS5oIiAzCgoKCgogCiAKIAojIDMwICIvbHVzci9nbnUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9y
LmgiIDIgMwoKIyAxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45
NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
MS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKIyAxICIvbHVz
ci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDM0MiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu
OTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDUzICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9j
LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCiAKCgoKCiMgNTYg
Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQg
X19hc3NlcnRfZmFpbCAgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sCgkJCQlfX2NvbnN0IGNo
YXIgKl9fZmlsZSwKCQkJCXVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQlfX2NvbnN0IGNoYXIgKl9f
ZnVuY3Rpb24pICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogCmV4dGVy
biB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsICAoaW50IF9fZXJybnVtLAoJCQkJICAgICAgIF9f
Y29uc3QgY2hhciAqX19maWxlLAoJCQkJICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQkg
ICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKfSAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDU2ICIvbHVzci9n
bnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgogICAgIAogICAgIAogICAgIAoj
IDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCiAKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm9z
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9saW51eC9l
cnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDQgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKCgojIDE0ICIv
dXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMwoKCgojIDI0ICIvdXNyL2luY2x1ZGUvZXJybm9z
LmgiIDIgMwoKCgogCmV4dGVybiBpbnQgZXJybm87CgogCmV4dGVybiBpbnQgKl9fZXJybm9fbG9j
YXRpb24gICh2b2lkKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgNDQgIi91c3Iv
aW5jbHVkZS9lcnJub3MuaCIgMwoKCgogCgoKCgoKCgoKCgoKCiMgMzYgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAyIDMKCgoKCgogCgoKCgoKCgoKIyA2MyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMK
CgoKfSAKCgojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL2xpbWl0cy5oIiAx
IDMKIAoKCiAKCiMgMTE0ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgMjEgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1NiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwoKCgojIDY4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgODAgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDMKCgoKCiMgOTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgojIDEyNSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDI4MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK
CgojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9z
Y2hlZGJpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIApzdHJ1Y3Qg
c2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsKCiAKCgoKCgoKCgog
CmV4dGVybiBpbnQgX19jbG9uZSAgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9f
Y2hpbGRfc3RhY2ssCgkJCSBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpICA7CgpleHRlcm4gaW50
IGNsb25lICAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywK
CQkgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSAgOwoKCgoKIyAzMiAiL3Vzci9pbmNs
dWRlL3NjaGVkLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3Nl
dHBhcmFtICAoX19waWRfdCBfX3BpZCwKCQkJCSAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcGFyYW0pICA7CmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gIChfX3BpZF90IF9fcGlkLAoJ
CQkJX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICA7CgogCmV4dGVybiBpbnQg
X19zY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19w
YXJhbSkgIDsKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsIHN0cnVj
dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3NldHNjaGVk
dWxlciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICAgIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgOwpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxl
ciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICBfX2NvbnN0IHN0cnVjdCBz
Y2hlZF9wYXJhbSAqX19wYXJhbSkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldHNjaGVkdWxl
ciAgKF9fcGlkX3QgX19waWQpICA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyICAoX19w
aWRfdCBfX3BpZCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3lpZWxkICAodm9pZCkgIDsKZXh0
ZXJuIGludCBzY2hlZF95aWVsZCAgKHZvaWQpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRf
cHJpb3JpdHlfbWF4ICAoaW50IF9fYWxnb3JpdGhtKSAgOwpleHRlcm4gaW50IHNjaGVkX2dldF9w
cmlvcml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9n
ZXRfcHJpb3JpdHlfbWluICAoaW50IF9fYWxnb3JpdGhtKSAgOwpleHRlcm4gaW50IHNjaGVkX2dl
dF9wcmlvcml0eV9taW4gIChpbnQgX19hbGdvcml0aG0pICA7CgogCmV4dGVybiBpbnQgX19zY2hl
ZF9ycl9nZXRfaW50ZXJ2YWwgIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkg
IDsKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIChfX3BpZF90IF9fcGlkLCBzdHJ1
Y3QgdGltZXNwZWMgKl9fdCkgIDsKCn0gCgoKIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKCgoKIAoKCgoKIAoKCgogCgoKCiAKCgoKIAoK
CgogCgoKIAoKCiAKCgoKCiAKCgogCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3Bvc2l4X29w
dC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKIAoKCiMg
MTM3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgogCgoKCgoKIAoKCgoKCgoKCgoKIyAx
ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgog
CgoKIyAxMjYgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL2x1c3IvZ251L2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
IAoKCgoKIAoKCiMgMjY5ICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIv
bHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMTU3ICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDIgMwoKCgogCgoKCgoKCiAKZXh0ZXJuIGludCBfX2FjY2VzcyAgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBpbnQgX190eXBlKSAgOwpleHRlcm4gaW50IGFjY2VzcyAgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBpbnQgX190eXBlKSAgOwoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCiAK
CgoKCmV4dGVybiBfX29mZl90IF9fbHNlZWsgIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwg
aW50IF9fd2hlbmNlKSAgOwpleHRlcm4gX19vZmZfdCBsc2VlayAgKGludCBfX2ZkLCBfX29mZl90
IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpICA7CgogCmV4dGVybiBpbnQgX19jbG9zZSAgKGludCBf
X2ZkKSAgOwpleHRlcm4gaW50IGNsb3NlICAoaW50IF9fZmQpICA7CgogCgpleHRlcm4gc3NpemVf
dCAgX19yZWFkICAoaW50IF9fZmQsIHZvaWQgKiAgX19idWYsIHNpemVfdCBfX25ieXRlcykgIDsK
ZXh0ZXJuIHNzaXplX3QgIHJlYWQgIChpbnQgX19mZCwgdm9pZCAqICBfX2J1Ziwgc2l6ZV90IF9f
bmJ5dGVzKSAgOwoKIApleHRlcm4gc3NpemVfdCAgX193cml0ZSAgKGludCBfX2ZkLCBfX2NvbnN0
IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24pICA7CmV4dGVybiBzc2l6ZV90ICB3cml0ZSAgKGlu
dCBfX2ZkLCBfX2NvbnN0IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24pICA7CgoKIAoKCgpleHRl
cm4gaW50IF9fcGlwZSAgKGludCBfX3BpcGVkZXNbMl0pICA7CmV4dGVybiBpbnQgcGlwZSAgKGlu
dCBfX3BpcGVkZXNbMl0pICA7CgogCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0gICh1
bnNpZ25lZCBpbnQgX19zZWNvbmRzKSAgOwoKIAoKCgoKCgpleHRlcm4gdW5zaWduZWQgaW50IHNs
ZWVwICAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgIDsKCgogCgoKCmV4dGVybiB1bnNpZ25lZCBp
bnQgdWFsYXJtICAodW5zaWduZWQgaW50IF9fdmFsdWUsCgkJCQkgdW5zaWduZWQgaW50IF9faW50
ZXJ2YWwpICA7CgogCgpleHRlcm4gdm9pZCB1c2xlZXAgICh1bnNpZ25lZCBpbnQgX191c2Vjb25k
cykgIDsKCgoKIAoKZXh0ZXJuIGludCBwYXVzZSAgKHZvaWQpICA7CgoKIApleHRlcm4gaW50IF9f
Y2hvd24gIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJIF9fdWlkX3QgX19vd25lciwgX19naWRf
dCBfX2dyb3VwKSAgOwpleHRlcm4gaW50IGNob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJ
ICAgICAgIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSAgOwoKCiAKZXh0ZXJuIGlu
dCBfX2ZjaG93biAgKGludCBfX2ZkLAoJCQkgIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dy
b3VwKSAgOwpleHRlcm4gaW50IGZjaG93biAgKGludCBfX2ZkLAoJCQlfX3VpZF90IF9fb3duZXIs
IF9fZ2lkX3QgX19ncm91cCkgIDsKCgogCgpleHRlcm4gaW50IF9fbGNob3duICAoX19jb25zdCBj
aGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwKCQkJICBfX2dpZF90IF9fZ3JvdXApICA7CmV4
dGVybiBpbnQgbGNob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwK
CQkJX19naWRfdCBfX2dyb3VwKSAgOwoKCgogCmV4dGVybiBpbnQgX19jaGRpciAgKF9fY29uc3Qg
Y2hhciAqX19wYXRoKSAgOwpleHRlcm4gaW50IGNoZGlyICAoX19jb25zdCBjaGFyICpfX3BhdGgp
ICA7CgoKIApleHRlcm4gaW50IGZjaGRpciAgKGludCBfX2ZkKSAgOwoKCiAKCgoKCgoKZXh0ZXJu
IGNoYXIgKl9fZ2V0Y3dkICAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUpICA7CmV4dGVybiBj
aGFyICpnZXRjd2QgIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgIDsKCiMgMzE3ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKIAoKCmV4dGVybiBjaGFyICpnZXR3ZCAgKGNoYXIgKl9f
YnVmKSAgOwoKCgogCmV4dGVybiBpbnQgX19kdXAgIChpbnQgX19mZCkgIDsKZXh0ZXJuIGludCBk
dXAgIChpbnQgX19mZCkgIDsKCiAKZXh0ZXJuIGludCBfX2R1cDIgIChpbnQgX19mZCwgaW50IF9f
ZmQyKSAgOwpleHRlcm4gaW50IGR1cDIgIChpbnQgX19mZCwgaW50IF9fZmQyKSAgOwoKIApleHRl
cm4gY2hhciAqKl9fZW52aXJvbjsKCgoKCgogCgpleHRlcm4gaW50IF9fZXhlY3ZlICAoX19jb25z
dCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCgkJCSAgY2hhciAqX19jb25z
dCBfX2VudnBbXSkgIDsKZXh0ZXJuIGludCBleGVjdmUgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg
Y2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKCQkJY2hhciAqX19jb25zdCBfX2VudnBbXSkgIDsKCgoK
CgoKCgoKCiAKZXh0ZXJuIGludCBleGVjdiAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpf
X2NvbnN0IF9fYXJndltdKSAgOwoKIAoKZXh0ZXJuIGludCBleGVjbGUgIChfX2NvbnN0IGNoYXIg
Kl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSAgOwoKIAoKZXh0ZXJuIGludCBleGVj
bCAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pICA7Cgog
CgpleHRlcm4gaW50IGV4ZWN2cCAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0
IF9fYXJndltdKSAgOwoKIAoKCmV4dGVybiBpbnQgZXhlY2xwICAoX19jb25zdCBjaGFyICpfX2Zp
bGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgIDsKCgoKIApleHRlcm4gaW50IG5pY2UgIChp
bnQgX19pbmMpICA7CgoKCiAKZXh0ZXJuIHZvaWQgX2V4aXQgIChpbnQgX19zdGF0dXMpICAgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9jb25m
bmFtZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCmVudW0KICB7CiAgICBfUENfTElOS19N
QVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoKICAgIF9QQ19OQU1F
X01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoKICAgIF9QQ19DSE9X
Tl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJU0FCTEUsCgogICAg
X1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklPX0lPLAoKICAgIF9Q
Q19TT0NLX01BWEJVRgoKICB9OwoKIAplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1ND
X0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAg
X1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoK
ICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElN
RV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMs
CgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAg
X1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxF
UywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVN
T1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBI
T1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElP
X01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAg
IF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BS
SU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JU
U0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwK
CiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKICAgICAKCiAgICBf
U0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01B
WCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAg
ICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19M
SU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFY
LAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RF
ViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9T
V19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlf
WFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1ND
X1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01B
WElPViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVU
X0RHUkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAg
ICBfU0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKICAgICAKICAgIF9TQ19USFJF
QURTLAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0la
RV9NQVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFY
LAoKICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJB
VElPTlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01J
TiwKCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFD
S0FERFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BS
SU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1ND
X1RIUkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgog
ICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAg
X1NDX1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01B
WCwKCiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19Y
T1BFTl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZ
UFQsCgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9T
Q18yX0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAg
ICBfU0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBH
NCwKCgogICAgX1NDX0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9N
SU4sCgogICAgX1NDX0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklU
LAoKICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8s
CgogICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9N
SU4sCgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJf
TUFYLAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hS
VF9NQVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1ND
X05MX01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9T
Q19OTF9URVhUTUFYCgogIH07CgoKIAplbnVtCiAgewogICAgX0NTX1BBVEgJCQkgCgogIH07Cgoj
IDM5MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgogCmV4dGVybiBsb25nIGludCBfX3Bh
dGhjb25mICAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpICA7CmV4dGVybiBsb25n
IGludCBwYXRoY29uZiAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSAgOwoKIApl
eHRlcm4gbG9uZyBpbnQgX19mcGF0aGNvbmYgIChpbnQgX19mZCwgaW50IF9fbmFtZSkgIDsKZXh0
ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAgKGludCBfX2ZkLCBpbnQgX19uYW1lKSAgOwoKIApleHRl
cm4gbG9uZyBpbnQgX19zeXNjb25mICAoaW50IF9fbmFtZSkgIDsKZXh0ZXJuIGxvbmcgaW50IHN5
c2NvbmYgIChpbnQgX19uYW1lKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBjb25mc3RyICAoaW50IF9f
bmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgIDsKCgoKIApleHRlcm4gX19waWRfdCBf
X2dldHBpZCAgKHZvaWQpICA7CmV4dGVybiBfX3BpZF90IGdldHBpZCAgKHZvaWQpICA7CgogCmV4
dGVybiBfX3BpZF90IF9fZ2V0cHBpZCAgKHZvaWQpICA7CmV4dGVybiBfX3BpZF90IGdldHBwaWQg
ICh2b2lkKSAgOwoKIApleHRlcm4gX19waWRfdCBnZXRwZ3JwICAodm9pZCkgIDsKCiAKCgpleHRl
cm4gaW50IHNldHBnaWQgIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgIDsKCiAKZXh0
ZXJuIF9fcGlkX3QgX19nZXRwZ2lkICAoX19waWRfdCBfX3BpZCkgIDsKCgoKCgogCgoKCgoKCgoK
CgoKIAoKZXh0ZXJuIGludCBzZXRwZ3JwICAodm9pZCkgIDsKCgoKCgoKCgoKIAoKCmV4dGVybiBf
X3BpZF90IF9fc2V0c2lkICAodm9pZCkgIDsKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICAodm9pZCkg
IDsKCgoKCgoKIApleHRlcm4gX191aWRfdCBfX2dldHVpZCAgKHZvaWQpICA7CmV4dGVybiBfX3Vp
ZF90IGdldHVpZCAgKHZvaWQpICA7CgogCmV4dGVybiBfX3VpZF90IF9fZ2V0ZXVpZCAgKHZvaWQp
ICA7CmV4dGVybiBfX3VpZF90IGdldGV1aWQgICh2b2lkKSAgOwoKIApleHRlcm4gX19naWRfdCBf
X2dldGdpZCAgKHZvaWQpICA7CmV4dGVybiBfX2dpZF90IGdldGdpZCAgKHZvaWQpICA7CgogCmV4
dGVybiBfX2dpZF90IF9fZ2V0ZWdpZCAgKHZvaWQpICA7CmV4dGVybiBfX2dpZF90IGdldGVnaWQg
ICh2b2lkKSAgOwoKIAoKCmV4dGVybiBpbnQgX19nZXRncm91cHMgIChpbnQgX19zaXplLCBfX2dp
ZF90IF9fbGlzdFtdKSAgOwpleHRlcm4gaW50IGdldGdyb3VwcyAgKGludCBfX3NpemUsIF9fZ2lk
X3QgX19saXN0W10pICA7CgoKCgoKCgogCgoKCmV4dGVybiBpbnQgX19zZXR1aWQgIChfX3VpZF90
IF9fdWlkKSAgOwpleHRlcm4gaW50IHNldHVpZCAgKF9fdWlkX3QgX191aWQpICA7CgoKIAoKZXh0
ZXJuIGludCBfX3NldHJldWlkICAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSAgOwpl
eHRlcm4gaW50IHNldHJldWlkICAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSAgOwoK
CgogCmV4dGVybiBpbnQgc2V0ZXVpZCAgKF9fdWlkX3QgX191aWQpICA7CgoKIAoKCgpleHRlcm4g
aW50IF9fc2V0Z2lkICAoX19naWRfdCBfX2dpZCkgIDsKZXh0ZXJuIGludCBzZXRnaWQgIChfX2dp
ZF90IF9fZ2lkKSAgOwoKCiAKCmV4dGVybiBpbnQgX19zZXRyZWdpZCAgKF9fZ2lkX3QgX19yZ2lk
LCBfX2dpZF90IF9fZWdpZCkgIDsKZXh0ZXJuIGludCBzZXRyZWdpZCAgKF9fZ2lkX3QgX19yZ2lk
LCBfX2dpZF90IF9fZWdpZCkgIDsKCgoKIApleHRlcm4gaW50IHNldGVnaWQgIChfX2dpZF90IF9f
Z2lkKSAgOwoKCgogCgoKZXh0ZXJuIF9fcGlkX3QgX19mb3JrICAodm9pZCkgIDsKZXh0ZXJuIF9f
cGlkX3QgZm9yayAgKHZvaWQpICA7CgoKIAoKCgpleHRlcm4gX19waWRfdCBfX3Zmb3JrICAodm9p
ZCkgIDsKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgICh2b2lkKSAgOwoKCgogCgpleHRlcm4gY2hhciAq
dHR5bmFtZSAgKGludCBfX2ZkKSAgOwoKIAoKZXh0ZXJuIGludCBfX3R0eW5hbWVfciAgKGludCBf
X2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgOwpleHRlcm4gaW50IHR0eW5hbWVf
ciAgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgOwoKIAoKZXh0ZXJu
IGludCBfX2lzYXR0eSAgKGludCBfX2ZkKSAgOwpleHRlcm4gaW50IGlzYXR0eSAgKGludCBfX2Zk
KSAgOwoKCiAKCmV4dGVybiBpbnQgdHR5c2xvdCAgKHZvaWQpICA7CgoKCiAKZXh0ZXJuIGludCBf
X2xpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSAgOwpleHRl
cm4gaW50IGxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSAg
OwoKCiAKZXh0ZXJuIGludCBfX3N5bWxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25z
dCBjaGFyICpfX3RvKSAgOwpleHRlcm4gaW50IHN5bWxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJv
bSwgX19jb25zdCBjaGFyICpfX3RvKSAgOwoKIAoKCmV4dGVybiBpbnQgX19yZWFkbGluayAgKF9f
Y29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKSAgOwpleHRlcm4g
aW50IHJlYWRsaW5rICAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fYnVmLCBzaXplX3Qg
X19sZW4pICA7CgoKIApleHRlcm4gaW50IF9fdW5saW5rICAoX19jb25zdCBjaGFyICpfX25hbWUp
ICA7CmV4dGVybiBpbnQgdW5saW5rICAoX19jb25zdCBjaGFyICpfX25hbWUpICA7CgogCmV4dGVy
biBpbnQgX19ybWRpciAgKF9fY29uc3QgY2hhciAqX19wYXRoKSAgOwpleHRlcm4gaW50IHJtZGly
ICAoX19jb25zdCBjaGFyICpfX3BhdGgpICA7CgoKIApleHRlcm4gX19waWRfdCB0Y2dldHBncnAg
IChpbnQgX19mZCkgIDsKCiAKZXh0ZXJuIGludCB0Y3NldHBncnAgIChpbnQgX19mZCwgX19waWRf
dCBfX3BncnBfaWQpICA7CgoKIApleHRlcm4gY2hhciAqZ2V0bG9naW4gICh2b2lkKSAgOwoKCgoK
CgoKCiAKZXh0ZXJuIGludCBzZXRsb2dpbiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgOwoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IGdldG9wdCAgKGludCBfX2FyZ2Ms
IGNoYXIgKl9fY29uc3QgKiBfX2FyZ3YsCgkJCV9fY29uc3QgY2hhciAqX19vcHRzKSAgOwpleHRl
cm4gaW50IG9wdGVycjsKZXh0ZXJuIGludCBvcHRpbmQ7CmV4dGVybiBpbnQgb3B0b3B0OwpleHRl
cm4gY2hhciAqb3B0YXJnOwoKCgoKCiAKCgpleHRlcm4gaW50IF9fZ2V0aG9zdG5hbWUgIChjaGFy
ICpfX25hbWUsIHNpemVfdCBfX2xlbikgIDsKZXh0ZXJuIGludCBnZXRob3N0bmFtZSAgKGNoYXIg
Kl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgOwoKIAoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAgKF9f
Y29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pICA7CgogCgpleHRlcm4gaW50IHNldGhv
c3RpZCAgKGxvbmcgaW50IF9faWQpICA7CgoKIAoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAg
KGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUg
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgOwoKCiAKZXh0ZXJuIGludCBm
c3luYyAgKGludCBfX2ZkKSAgOwoKCiAKCgpleHRlcm4gaW50IHZoYW5ndXAgICh2b2lkKSAgOwoK
IApleHRlcm4gaW50IHJldm9rZSAgKF9fY29uc3QgY2hhciAqX19maWxlKSAgOwoKCiAKCgoKCmV4
dGVybiBpbnQgcHJvZmlsICAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNp
emVfdCBfX3NpemUsCgkJCXNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpICA7
CgoKIAoKCmV4dGVybiBpbnQgYWNjdCAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgOwoKIAoKZXh0
ZXJuIGludCBjaHJvb3QgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgIDsKCgogCmV4dGVybiBjaGFy
ICpnZXR1c2Vyc2hlbGwgICh2b2lkKSAgOwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgICh2b2lk
KSAgOyAgCmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAgKHZvaWQpICA7ICAKCgogCgpleHRlcm4g
Y2hhciAqZ2V0cGFzcyAgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpICA7CgogCgoKZXh0ZXJuIGlu
dCBkYWVtb24gIChpbnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSAgOwoKCgoKCgogCmV4dGVy
biBsb25nIGludCBnZXRob3N0aWQgICh2b2lkKSAgOwoKIApleHRlcm4gaW50IHN5bmMgICh2b2lk
KSAgOwoKCiAKCmV4dGVybiBpbnQgX19nZXRwYWdlc2l6ZSAgKHZvaWQpICA7CmV4dGVybiBpbnQg
Z2V0cGFnZXNpemUgICh2b2lkKSAgOwoKCiAKZXh0ZXJuIGludCB0cnVuY2F0ZSAgKF9fY29uc3Qg
Y2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSAgOwoKIApleHRlcm4gaW50IGZ0cnVuY2F0
ZSAgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKSAgOwoKCiAKCmV4dGVybiBpbnQgX19nZXRk
dGFibGVzaXplICAodm9pZCkgIDsKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICAodm9pZCkgIDsK
CgoKCgoKIAoKZXh0ZXJuIGludCBfX2JyayAgKHZvaWQgKiAgX19hZGRyKSAgOwpleHRlcm4gaW50
IGJyayAgKHZvaWQgKiAgX19hZGRyKSAgOwoKCiMgMSAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMg
MTkgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvbHVzci9nbnUvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvbHVzci9nbnUvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK
CgogCgogCgoKIyAxODggIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjEvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL2x1c3IvZ251
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzIuOTUuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgojIDc2OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgogCgoKCmV4dGVy
biB2b2lkICogIF9fc2JyayAgKHB0cmRpZmZfdCBfX2RlbHRhKSAgOwpleHRlcm4gdm9pZCAqICBz
YnJrICAocHRyZGlmZl90IF9fZGVsdGEpICA7CgoKCgogCgoKCgoKCgoKCmV4dGVybiBsb25nIGlu
dCBzeXNjYWxsICAobG9uZyBpbnQgX19zeXNubywgLi4uKSAgOwoKCgoKCgogCgoKCiAKCgoKCgoK
CgpleHRlcm4gaW50IGxvY2tmICAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikg
IDsKCgoKIyA4MzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCgogCgpleHRlcm4gaW50IGZk
YXRhc3luYyAgKGludCBfX2ZpbGRlcykgIDsKCgoKIAoKIyA4NjEgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwoKCn0gCgoKIyAyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CmV4dGVybiAiQyIgeyAKCgojIDEgIi91c3IvaW5jbHVkZS9zaWdzZXQuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgogCgoKdHlwZWRlZiBz
dHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9m
ICh1bnNpZ25lZCBsb25nIGludCkpKSBdOwogIH0gX19zaWdzZXRfdDsKCgoKCiAKCgoKCgojIDEy
MyAiL3Vzci9pbmNsdWRlL3NpZ3NldC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi
IDIgMwoKCgoKCgoKCgoKIyAxNTggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKCgoKCnR5cGVk
ZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgoKIyAyMjkgIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMwoKCgoKIyAyNzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKCgojIDI5OCAiL3Vzci9p
bmNsdWRlL3NpZ25hbC5oIiAzCgoKfSAKCgojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy
IDMKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2
OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDgwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CgoKCgojIDk3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDMKCgoKIyAyODEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAyOCAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIAoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCiAKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgogCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgogCnN0cnVjdCBfcHRocmVhZF9xdWV1
ZQp7CiAgX3B0aHJlYWRfZGVzY3IgaGVhZDsJCSAKICBfcHRocmVhZF9kZXNjciB0YWlsOwkJIAp9
OwoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IG1fc3BpbmxvY2s7CQkgCiAgaW50IG1fY291bnQ7
CQkJIAogIF9wdGhyZWFkX2Rlc2NyIG1fb3duZXI7CSAKICBpbnQgbV9raW5kOwkJCSAKICBzdHJ1
Y3QgX3B0aHJlYWRfcXVldWUgbV93YWl0aW5nOyAgCn0gcHRocmVhZF9tdXRleF90OwoKCgoKCgog
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgY19zcGlubG9jazsgICAgICAgICAgICAgICAgICAgCiAg
c3RydWN0IF9wdGhyZWFkX3F1ZXVlIGNfd2FpdGluZzsgIAp9IHB0aHJlYWRfY29uZF90OwoKCgog
CgplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKICBQVEhSRUFEX0NSRUFURV9ERVRB
Q0hFRAp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAogIFBUSFJFQURfRVhQTElD
SVRfU0NIRUQKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAogIFBUSFJFQURfU0NP
UEVfUFJPQ0VTUwp9OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBkZXRhY2hzdGF0ZTsKICBpbnQg
c2NoZWRwb2xpY3k7CiAgc3RydWN0IHNjaGVkX3BhcmFtIHNjaGVkcGFyYW07CiAgaW50IGluaGVy
aXRzY2hlZDsKICBpbnQgc2NvcGU7Cn0gcHRocmVhZF9hdHRyX3Q7CgplbnVtCnsKICBQVEhSRUFE
X01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9N
VVRFWF9FUlJPUkNIRUNLX05QCn07Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IG11dGV4a2luZDsK
fSBwdGhyZWFkX211dGV4YXR0cl90OwoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBkdW1teTsKfSBw
dGhyZWFkX2NvbmRhdHRyX3Q7CgoKIAoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlf
dDsKCiAKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgogCgpzdHJ1Y3QgX3B0aHJlYWRf
Y2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpyb3V0aW5lKSAgKHZvaWQgKikgIDsJIAogIHZvaWQg
KmFyZzsJCQkJIAogIGludCBjYW5jZWx0eXBlOwkJCSAKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKnByZXY7CSAKfTsKCiAKCmVudW0geyBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsIFBU
SFJFQURfQ0FOQ0VMX0RJU0FCTEUgfTsKZW51bSB7IFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELCBQ
VEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMgfTsKCgoKIAoKIAoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jcmVhdGUgIChwdGhyZWFkX3QgKl9fdGhyZWFkLAoJCQkJX19jb25zdCBwdGhyZWFkX2F0dHJf
dCAqX19hdHRyLAoJCQkJdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAoJCQkJdm9p
ZCAqX19hcmcpICA7CgogCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICAodm9pZCkgIDsK
CiAKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsICAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVh
ZF90IF9fdGhyZWFkMikgIDsKCiAKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICAodm9pZCAqX19y
ZXR2YWwpICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIAoKCmV4dGVybiBpbnQg
cHRocmVhZF9qb2luICAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pICA7
CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggIChwdGhyZWFkX3QgX190aCkgIDsKCgog
CgogCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0ICAocHRocmVhZF9hdHRyX3QgKl9fYXR0
cikgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlICAo
cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX2RldGFjaHN0YXRlKSAgOwoK
IApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAgKF9fY29uc3QgcHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCAqX19kZXRhY2hzdGF0ZSkgIDsKCiAKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQkgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgOwoK
IApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtICAoX19jb25zdCBwdGhyZWFk
X2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5ICAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX3BvbGljeSkgIDsKCiAKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
CgkJCQkJICAgICBpbnQgKl9fcG9saWN5KSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z
ZXRpbmhlcml0c2NoZWQgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICAgIGludCBf
X2luaGVyaXQpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAg
KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgICBpbnQgKl9faW5oZXJp
dCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgIChwdGhyZWFkX2F0dHJf
dCAqX19hdHRyLCBpbnQgX19zY29wZSkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
c2NvcGUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkgICAgICAgaW50ICpf
X3Njb3BlKSAgOwoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gIChwdGhy
ZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCgkJCQkgICAgICAgX19jb25zdCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9nZXRz
Y2hlZHBhcmFtICAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKCQkJCSAgICAgICBpbnQgKl9f
cG9saWN5LAoJCQkJICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIDsKCgogCgog
CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90ICpfX211
dGV4LAoJCQkJICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpICA7
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90ICpfX211dGV4
LAoJCQkJICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpICA7Cgog
CmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95ICAocHRocmVhZF9tdXRl
eF90ICpfX211dGV4KSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrICAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5
bG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIDsKCiAKZXh0ZXJuIGludCBfX3B0aHJl
YWRfbXV0ZXhfbG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIDsKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4X2xvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICA7CgogCmV4dGVy
biBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkg
IDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCkgIDsKCgogCgogCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0
cl9pbml0ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgOwoKIApleHRlcm4gaW50IF9f
cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikg
IDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVhZF9tdXRleGF0
dHJfdCAqX19hdHRyKSAgOwoKIAoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX3NldGtp
bmRfbnAgIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCgkJCQkJCWludCBfX2tpbmQpICA7
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCAgKHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgICBpbnQgX19raW5kKSAgOwogCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfZ2V0a2luZF9ucCAgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICpfX2tpbmQpICA7CgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAgKHB0aHJl
YWRfY29uZF90ICpfX2NvbmQsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19j
b25kX2F0dHIpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgIChwdGhyZWFk
X2NvbmRfdCAqX19jb25kKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgIChw
dGhyZWFkX2NvbmRfdCAqX19jb25kKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9h
ZGNhc3QgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSAgOwoKIAoKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRfd2FpdCAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsCgkJCQkgICBwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpICA7CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAg
KHB0aHJlYWRfY29uZF90ICpfX2NvbmQsCgkJCQkJcHRocmVhZF9tdXRleF90ICpfX211dGV4LAoJ
CQkJCV9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpICA7CgogCgogCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kYXR0cl9pbml0ICAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpICA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95ICAocHRocmVhZF9jb25kYXR0
cl90ICpfX2F0dHIpICA7CgoKIAoKIAoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9jcmVh
dGUgIChwdGhyZWFkX2tleV90ICpfX2tleSwKCQkJCSAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0
aW9uKSAodm9pZCAqKSkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgIChwdGhyZWFk
X2tleV90ICpfX2tleSwKCQkJCSAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikp
ICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlICAocHRocmVhZF9rZXlfdCBfX2tl
eSkgIDsKCiAKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90
IF9fa2V5LAoJCQkJICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSAgOwpleHRlcm4gaW50
IHB0aHJlYWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJICAgICBfX2Nv
bnN0IHZvaWQgKl9fcG9pbnRlcikgIDsKCiAKZXh0ZXJuIHZvaWQgKl9fcHRocmVhZF9nZXRzcGVj
aWZpYyAgKHB0aHJlYWRfa2V5X3QgX19rZXkpICA7CmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNw
ZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSkgIDsKCgogCgogCgoKCmV4dGVybiBpbnQgX19w
dGhyZWFkX29uY2UgIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCgkJCQl2b2lkICgq
X19pbml0X3JvdXRpbmUpICh2b2lkKSkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgIChwdGhy
ZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCgkJCSAgICAgIHZvaWQgKCpfX2luaXRfcm91dGlu
ZSkgKHZvaWQpKSAgOwoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAg
KGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpICA7CgogCgpleHRlcm4gaW50IF9fcHRocmVh
ZF9zZXRjYW5jZWx0eXBlICAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpICA7CmV4dGVybiBp
bnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlICAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpICA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgIChwdGhyZWFkX3QgX190aHJlYWQpICA7Cgog
CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICAodm9pZCkgIDsKCgogCgoKCgoKCgoK
CgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggIChzdHJ1Y3QgX3B0aHJlYWRfY2xl
YW51cF9idWZmZXIgKl9fYnVmZmVyLAoJCQkJCXZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAoJ
CQkJCXZvaWQgKl9fYXJnKSAgOwoKIAoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBf
cG9wICAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCSAgICAg
ICBpbnQgX19leGVjdXRlKSAgOwoKIAoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw
X3B1c2hfZGVmZXIgIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAoJ
CQkJCSAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAoJCQkJCSAgICAgIHZvaWQgKl9f
YXJnKSAgOwoKIAoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3Jl
ICAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCQkgICAgICAg
aW50IF9fZXhlY3V0ZSkgIDsKCiAKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAgKGlu
dCBfX2hvdywgX19jb25zdCBzaWdzZXRfdCAqX19uZXdtYXNrLAoJCQkJIHNpZ3NldF90ICpfX29s
ZG1hc2spICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAgKHB0aHJlYWRfdCBfX3RocmVh
ZCwgaW50IF9fc2lnbm8pICA7CgoKIAoKIAoKCgoKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRf
YXRmb3JrICAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAoJCQkJICB2b2lkICgqX19wYXJlbnQp
ICh2b2lkKSwKCQkJCSAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIDsKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0Zm9yayAgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJCXZvaWQgKCpfX3BhcmVu
dCkgKHZvaWQpLAoJCQkJdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIDsKCiAKCgpleHRlcm4gdm9p
ZCBfX3B0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICAodm9pZCkgIDsKZXh0ZXJuIHZvaWQg
cHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgICh2b2lkKSAgOwoKCiAKZXh0ZXJuIHZvaWQg
X19wdGhyZWFkX2luaXRpYWxpemUgICh2b2lkKSAgOwoKfSAKCgojIDcxICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgODcgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxs
b2MuaCIgMwoKIyA5NyAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu
OTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDExNSAiL2x1
c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKCgoKCgoKCiAKCgoKCgogCiAKCgoKCgoKCgoK
dGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnBy
aXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZv
aWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQgKCogX19t
YWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxs
b2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwog
ICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAg
cmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3As
IHNpemVfdCAgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9j
YXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lkKiBf
X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkg
X19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jl
c3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpf
X2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4o
X19vbGQpOwogIH0KCn07CgogCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCogX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkg
PSAwOwoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAg
ICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAg
ICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVt
b3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlciko
KTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkg
cmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwg
c2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9p
ZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIg
PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxv
Y19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9
CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVh
bGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwog
ICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsK
CnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoK
cHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1
cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChf
VHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9U
cCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxv
Yzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6
ZW9mIChfVHApKTsgfQp9OwoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNz
IGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07ICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAoKcHVibGljOgoK
ICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3Vs
dCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90
KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KCiAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgY2hh
ciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoICooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90Kilf
X3JlYWxfcCA9PSBfX24iICwJIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI2MywgX19Q
UkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxf
cCwgX19uICsgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCog
X19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3Jl
YWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9f
cmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19y
ZWFsX3AgPT0gX19vbGRfc3oiICwJIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI3MCwg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIq
KQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0cmEs
IF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7
CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoKCgoKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKdGVtcGxhdGUg
PGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7
Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFY
X0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUy9fQUxJR059
OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJl
dHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9Cgpwcml2YXRl
IDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsK
ICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0ZToKCgoKCiAg
ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0
YXRpYyAgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAg
cmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCiAgIAogIHN0
YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0aWMgY2hhciog
X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAgIAogIHN0YXRp
YyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0
aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJlYWRfbXV0ZXhf
dCBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCgojIDM4OSAiL2x1c3IvZ251L2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9hbGxvYy5oIiAzCgoKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgIF9Mb2NrKCkgeyBpZiAodGhyZWFkcykgcHRocmVhZF9tdXRleF9sb2NrKCZfU19ub2RlX2Fs
bG9jYXRvcl9sb2NrKSA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyBpZiAodGhyZWFkcykgcHRo
cmVhZF9tdXRleF91bmxvY2soJl9TX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgfTsKICAg
IGZyaWVuZCBjbGFzcyBfTG9jazsKCnB1YmxpYzoKCiAgIAogIHN0YXRpYyB2b2lkKiBhbGxvY2F0
ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CiAg
ICBfT2JqKiAgIF9fcmVzdWx0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7
CiAgICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAgICBf
X215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAg
ICAgCiAgICAgCiAgICAgCgogICAgICAgICAKICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7
CgogICAgX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICBpZiAoX19yZXN1bHQgPT0gMCkg
ewogICAgICAgIHZvaWQqIF9fciA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAg
ICByZXR1cm4gX19yOwogICAgfQogICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01f
ZnJlZV9saXN0X2xpbms7CiAgICByZXR1cm4gKF9fcmVzdWx0KTsKICB9OwoKICAgCiAgc3RhdGlj
IHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgX09iaiogX19x
ID0gKF9PYmoqKV9fcDsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CgogICAg
aWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICBtYWxsb2NfYWxsb2M6OmRl
YWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIF9fbXlfZnJlZV9s
aXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKCiAgICAg
ICAgIAogICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICBfX3EgLT4gX01fZnJlZV9s
aXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAg
ICAgCiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29s
ZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKCn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8IHRydWUgLCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9f
bm9ianMpCnsKICAgIGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBf
X3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0g
X1Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsK
ICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSAr
PSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYg
KF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRl
c19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7
CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUg
Kz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsK
ICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQoJICAyICogX190b3RhbF9ieXRlcyArIF9T
X3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0
ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlz
dCA9CiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu
ZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9m
cmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09
IF9TX3N0YXJ0X2ZyZWUpIHsKICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09i
aiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdDsKCSAgICBfT2JqKiBfX3A7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoX19pID0gX19z
aXplOyBfX2kgPD0gX01BWF9CWVRFUzsgX19pICs9IF9BTElHTikgewogICAgICAgICAgICAgICAg
X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwog
ICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYg
KDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+
IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAo
Y2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJl
ZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl
LCBfX25vYmpzKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJICAgIF9TX2VuZF9mcmVlID0gMDsJIAog
ICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvY19hbGxvYzo6YWxsb2NhdGUo
X19ieXRlc190b19nZXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgICAgIH0KICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAg
ICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAg
cmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKIAogCiAK
dGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewog
ICAgaW50IF9fbm9ianMgPSAyMDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhf
X24sIF9fbm9ianMpOwogICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdDsKICAgIF9P
YmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9v
Ymo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsK
ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19u
KTsKCiAgICAgCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2Zy
ZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3Ig
KF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsK
ICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAg
ICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2Jq
IC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9f
bmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAg
IGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90
KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwog
ICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19z
eikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBf
X2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAg
bWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19v
bGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CiAgICBwdGhyZWFkX211dGV4X3QKICAgIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAg
ICAgICA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsIHswLCAwfX0gOwoKCgoKCgoK
CgojIDYwMiAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMS8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKIyA2ODkgIi9sdXNyL2du
dS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6
X1Nfc3RhcnRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2Vu
ZF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6
ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cl9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlIApfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAg
X05GUkVFTElTVFMKXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCB9OwogCiAKIAoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpjbGFzcyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOyAgICAgICAg
ICAgCnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRy
ZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
X1RwICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0
b3IoKSB0aHJvdygpICB7fQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7
fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+
JikgdGhyb3coKSAge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSAge30KCiAgcG9pbnRlciBhZGRy
ZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVy
IGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAg
CiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAg
ICByZXR1cm4gX19uICE9IDAgPyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9f
biAqIHNpemVvZihfVHApKSkKICAgICAgICAgICAgICAgICAgICA6IDA7CiAgfQoKICAgCiAgdm9p
ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRl
YWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXpl
KCkgY29uc3QgdGhyb3coKSAKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsg
fQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXco
X19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9U
cCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBz
aXplX3QgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCog
Y29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9U
cDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9y
PF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFs
bG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQoKIAogCiAKIAogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2Mg
X191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCAgICBzaXplX3R5cGU7CiAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAg
ICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0
eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0
cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVy
OwogIH07CgogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9jYXRvcihjb25zdCBf
X2FsbG9jYXRvciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9f
dW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRv
cihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkgCiAgICA6IF9f
dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRv
cigpIHRocm93KCkgIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7
IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBl
IF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0
YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2Yo
X1RwKSkpCiAgICAgICAgOiAwOwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9f
cCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19w
LCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhy
b3coKSAKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNv
bnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192
YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsK
ICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFsdWVfdHlw
ZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBf
X2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0
b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19h
bGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxf
VHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0
b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9j
ICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKIAogCiAKCnRlbXBsYXRlIDxpbnQgaW5z
dD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp
bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1
cm4gdHJ1ZTsKfQoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2Fs
bG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9B
bGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNl
Owp9CgoKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKCiAK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJh
aXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OiAgIHJlYmluZDxfVHA+OjpvdGhlcgogICAgICAgICAg
YWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
Pgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2Vs
ZXNzOwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190
cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z
dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxs
b2NfdHlwZTsKICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21h
bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2Fs
bG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3Jf
dHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxs
b2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7
CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0
b3JfdHlwZTsKfTsKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9f
aW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2Fs
bG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9h
bGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAg
ICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsK
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2lt
cGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgog
ICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBl
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3Ry
dWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxs
b2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlw
ZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9j
YXRvcl90eXBlOwp9OwoKCgoKCgoKCiAKCgoKCgogCiAKIAojIDIxICIvbHVzci9nbnUvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
YWxsb2MuaCIgMiAzCgoKCiMgNDAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAzCgoKCgogCiAK
IAojIDMxICIvbHVzci9nbnUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yLmgiIDIgMwoKIyAxICIvbHVzci9nbnUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4xLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgog
IAoKCgoKCgogCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh
dG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0
b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0b3Jf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9j
YXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgw
KSAKICB7fQogIApwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7
CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9y
YWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRh
X2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRl
KF9fcCwgX19uKTsgfQp9OwoKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0
b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojph
bGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1Zl
Y3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCks
IF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJvdGVjdGVkOgog
IF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFn
ZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9B
bGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAg
IHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9j
YXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf
X3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg
X1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxs
b2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxs
b2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShz
aXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAg
X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFz
ZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy
dCk7IH0KfTsgICAgCgojIDE1MCAiL2x1c3IvZ251L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMS8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4gID4KY2xh
c3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gCnsKcHJpdmF0
ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnB1YmxpYzoKICB0
eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0
eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90
eXBlKiBpdGVyYXRvcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X2l0ZXJhdG9y
OwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6
OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgoKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y
OwoKCgoKCgoKcHJvdGVjdGVkOgoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcg
X0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9C
YXNlOjpfTV9maW5pc2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKCnByb3Rl
Y3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1Rw
JiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1Ymxp
YzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IF9NX2ZpbmlzaDsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiBy
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAg
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgp
IGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVf
dHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9m
KF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90
eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gYmVnaW4oKSk7IH0KICBib29sIGVtcHR5KCkgY29uc3QK
ICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10o
c2l6ZV90eXBlIF9fbikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQogIGNvbnN0X3JlZmVy
ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSAr
IF9fbik7IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBh
bGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKSAKICAgIDogX0Jhc2UoX19uLCBfX2EpCiAgICB7IF9NX2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9Cgog
IGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRv
cl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0
LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194
KSAKICAgIDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01f
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0
YXJ0KTsgfQoKCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3Io
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2Ep
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50
ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBf
SW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9p
bml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBl
KSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IF9NX3N0YXJ0ICsgX19uOyAKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9u
KF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90
eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRv
cl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQoKCgoKCgoKCiAgfnZlY3RvcigpIHsgZGVzdHJv
eShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoKICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRv
cj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90
eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2Nh
dGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2Zp
bmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9z
dGFydCArIF9fbjsKICAgIH0KICB9CgogICAKICAgCiAgIAogICAKCiAgdm9pZCBhc3NpZ24oc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgoKICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1
dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf
X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50
ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f
dmFsLCBfX3RydWVfdHlwZSkKICAgIHsgYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192
YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rp
c3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlw
ZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoIF9fZmlyc3QgKSApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOyAKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7
IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0
dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7
IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsg
fQoKICB2b2lkIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwog
ICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQo
KSwgX194KTsKICB9CiAgdm9pZCBwdXNoX2JhY2soKSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9N
X2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19N
X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSk7CiAgfQog
IHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIHsKICAgICA6OnN3YXAoX01fc3Rh
cnQsIF9feC5fTV9zdGFydCk7CiAgICAgOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7
CiAgICAgOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwog
IH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194
KSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01f
ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAg
ICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg
ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgIHJldHVybiBi
ZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikg
ewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg
IGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UK
ICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uKTsKICAgIHJldHVybiBiZWdpbigpICsgX19u
OwogIH0KCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2Vy
dChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19m
aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn
ZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUp
IHsKICAgIGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7CiAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBf
X2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwogIH0KCgoKCgogIHZvaWQg
aW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoK
ICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2Zpbmlz
aCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChf
X3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgX01fZmlu
aXNoLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9maW5pc2gp
OwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f
Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19pID0gY29weShfX2xhc3Qs
IF9NX2ZpbmlzaCwgX19maXJzdCk7CiAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIF9N
X2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2Zp
cnN0OwogIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYg
X194KSB7CiAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkgCiAgICAgIGVyYXNlKGJlZ2luKCkg
KyBfX25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdf
c2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3Np
emUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNl
KGJlZ2luKCksIGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgaXRlcmF0b3IgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9f
biwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKewogICAgaXRlcmF0
b3IgX19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgdHJ5ICB7CiAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgfQogICAgY2F0Y2goLi4uKSB7ICBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24p
IDsgdGhyb3c7IH0gOwogIH0KIyA0NDAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMK
CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5p
dGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2Zp
cnN0KTsKICB9CgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lk
IF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9fbik7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRf
b2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAog
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2Vy
dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6
ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQo
KSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25z
dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2ZWN0b3I8X1RwLF9BbGxvYz4mIAp2ZWN0b3I8
X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsK
ICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNp
emUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIGl0ZXJhdG9yIF9fdG1w
ID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsK
ICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShf
TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0g
X190bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9
CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNv
cHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIGRlc3Ryb3koX19pLCBf
TV9maW5pc2gpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5i
ZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3gu
YmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmlu
aXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46OmFzc2ln
bihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkgewogIGlmIChfX24gPiBjYXBh
Y2l0eSgpKSB7CiAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9h
bGxvY2F0b3IoKSk7CiAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4g
c2l6ZSgpKSB7CiAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2gg
PSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwog
IH0KICBlbHNlCiAgICBlcmFzZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3VyID0g
YmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyAr
K19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQo
KSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46
Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
IHsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19s
ZW4pOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9N
X2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgZGVzdHJveShf
TV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBpZiAo
c2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgZGVzdHJveShfX25ld19maW5pc2gsIF9NX2Zpbmlz
aCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgfQogIGVsc2UgewogICAgX0Zvcndh
cmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBj
b3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNl
cnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihf
TV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsK
ICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoIC0gMiwgX01fZmluaXNoIC0g
MSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNp
emVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0g
X19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdf
c3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBf
X25ld19zdGFydDsKICAgIHRyeSAgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0
KF9fbmV3X2ZpbmlzaCwgX194KTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2Zp
bmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3
X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9f
bGVuKSkgOyB0aHJvdzsgfSA7CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2Rl
YWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01f
c3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5z
ZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRf
b2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7
CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNo
IC0gMiwgX01fZmluaXNoIC0gMSk7CiAgICAqX19wb3NpdGlvbiA9IF9UcCgpOwogIH0KICBlbHNl
IHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6
ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAg
aXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBpdGVyYXRvciBf
X25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRyeSAgewogICAgICBfX25ld19maW5pc2gg
PSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsK
ICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNo
LCBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19z
dGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25l
d19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOwogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7
CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0
KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5p
c2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9j
Pjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0gMCkg
ewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19u
KSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxl
bXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9m
aW5pc2ggPSBfTV9maW5pc2g7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAg
ICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5p
c2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bv
c2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChf
X3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxz
ZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1z
X2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0
ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwg
X01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBm
aWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7ICAgICAg
ICAKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9z
aXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVu
KTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAgIHRyeSAg
ewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19w
b3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAog
ICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25l
d19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3Rh
cnQsX19uZXdfZmluaXNoKSwgCiAgICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25l
d19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9m
aW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNo
ID0gX19uZXdfZmluaXNoOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsg
X19sZW47CiAgICB9CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+
OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAq
X19maXJzdCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZCAKdmVjdG9yPF9U
cCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsK
ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIGlmIChzaXplX3R5cGUoX01f
ZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBjb25zdCBzaXplX3R5
cGUgX19lbGVtc19hZnRlciA9IF9NX2ZpbmlzaCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9y
IF9fb2xkX2ZpbmlzaCA9IF9NX2ZpbmlzaDsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24p
IHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gs
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3
YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg
ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7
CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5j
ZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlk
LCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNf
YWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zpbmlz
aCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAg
ICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxz
ZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25z
dCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAg
ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgICBpdGVy
YXRvciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgICAgdHJ5ICB7CiAgICAgICAgX19u
ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25l
d19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAg
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNo
KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3
X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs
X19sZW4pKSA7IHRocm93OyB9IDsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsK
ICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy
dCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3
X2ZpbmlzaDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwog
ICAgfQogIH0KfQoKIyA4MTAgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKCgoKCgoK
CiAgCgoKCiAKIAogCiMgMzIgIi9sdXNyL2dudS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjEvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy92ZWN0b3IuaCIgMiAzCgoKCgoKCgoK
IAogCiAKIyAxICJidWcyLmMiIDIKCgpjbGFzcyBjIHsKICB0eXBlZGVmIGludCAoYzo6KiBmcCkg
KCApOwogIHZlY3RvcjxmcD4gdjsKICBjKCkgeyB9Owp9Owo=

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